From c3e4c9a25c2910d2d66d52215b3406b13d5b23d5 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Sun, 29 Jun 2014 12:34:32 +0300 Subject: Add more board models --- boards/dk-tm4c129x/Makefile | 108 + boards/dk-tm4c129x/aes_cbc_decrypt/Makefile | 91 + .../dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.c | 691 + .../aes_cbc_decrypt/aes_cbc_decrypt.ewd | 614 + .../aes_cbc_decrypt/aes_cbc_decrypt.ewp | 801 + .../aes_cbc_decrypt/aes_cbc_decrypt.icf | 78 + .../dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ld | 57 + .../aes_cbc_decrypt/aes_cbc_decrypt.sct | 47 + .../aes_cbc_decrypt/aes_cbc_decrypt.uvopt | 359 + .../aes_cbc_decrypt/aes_cbc_decrypt.uvproj | 449 + .../aes_cbc_decrypt/aes_cbc_decrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.bin | Bin 0 -> 31328 bytes .../aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.out | Bin 0 -> 241401 bytes .../aes_cbc_decrypt/ccs/macros.ini_initial | 1 + .../aes_cbc_decrypt/ccs/target_config.ccxml | 13 + .../aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.bin | Bin 0 -> 28924 bytes .../aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.out | Bin 0 -> 212992 bytes .../aes_cbc_decrypt/gcc/aes_cbc_decrypt.axf | Bin 0 -> 72358 bytes .../aes_cbc_decrypt/gcc/aes_cbc_decrypt.bin | Bin 0 -> 29528 bytes boards/dk-tm4c129x/aes_cbc_decrypt/readme.txt | 27 + .../aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.axf | Bin 0 -> 219956 bytes .../aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.bin | Bin 0 -> 29540 bytes boards/dk-tm4c129x/aes_cbc_decrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_cbc_decrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_cbc_decrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_cbc_decrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_cbc_encrypt/Makefile | 91 + .../dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.c | 689 + .../aes_cbc_encrypt/aes_cbc_encrypt.ewd | 614 + .../aes_cbc_encrypt/aes_cbc_encrypt.ewp | 801 + .../aes_cbc_encrypt/aes_cbc_encrypt.icf | 78 + .../dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ld | 57 + .../aes_cbc_encrypt/aes_cbc_encrypt.sct | 47 + .../aes_cbc_encrypt/aes_cbc_encrypt.uvopt | 359 + .../aes_cbc_encrypt/aes_cbc_encrypt.uvproj | 449 + .../aes_cbc_encrypt/aes_cbc_encrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.bin | Bin 0 -> 31320 bytes .../aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.out | Bin 0 -> 241423 bytes .../aes_cbc_encrypt/ccs/macros.ini_initial | 1 + .../aes_cbc_encrypt/ccs/target_config.ccxml | 13 + .../aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.bin | Bin 0 -> 28900 bytes .../aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.out | Bin 0 -> 211772 bytes .../aes_cbc_encrypt/gcc/aes_cbc_encrypt.axf | Bin 0 -> 72358 bytes .../aes_cbc_encrypt/gcc/aes_cbc_encrypt.bin | Bin 0 -> 29532 bytes boards/dk-tm4c129x/aes_cbc_encrypt/readme.txt | 27 + .../aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.axf | Bin 0 -> 219940 bytes .../aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.bin | Bin 0 -> 29524 bytes boards/dk-tm4c129x/aes_cbc_encrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_cbc_encrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_cbc_encrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_cbc_encrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_ccm_decrypt/Makefile | 91 + .../dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.c | 1036 + .../aes_ccm_decrypt/aes_ccm_decrypt.ewd | 614 + .../aes_ccm_decrypt/aes_ccm_decrypt.ewp | 801 + .../aes_ccm_decrypt/aes_ccm_decrypt.icf | 78 + .../dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ld | 57 + .../aes_ccm_decrypt/aes_ccm_decrypt.sct | 47 + .../aes_ccm_decrypt/aes_ccm_decrypt.uvopt | 359 + .../aes_ccm_decrypt/aes_ccm_decrypt.uvproj | 449 + .../aes_ccm_decrypt/aes_ccm_decrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.bin | Bin 0 -> 32552 bytes .../aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.out | Bin 0 -> 244867 bytes .../aes_ccm_decrypt/ccs/macros.ini_initial | 1 + .../aes_ccm_decrypt/ccs/target_config.ccxml | 13 + .../aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.bin | Bin 0 -> 30212 bytes .../aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.out | Bin 0 -> 217688 bytes .../aes_ccm_decrypt/gcc/aes_ccm_decrypt.axf | Bin 0 -> 73198 bytes .../aes_ccm_decrypt/gcc/aes_ccm_decrypt.bin | Bin 0 -> 31396 bytes boards/dk-tm4c129x/aes_ccm_decrypt/readme.txt | 27 + .../aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.axf | Bin 0 -> 220432 bytes .../aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.bin | Bin 0 -> 30436 bytes boards/dk-tm4c129x/aes_ccm_decrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_ccm_decrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_ccm_decrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_ccm_decrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_ccm_encrypt/Makefile | 91 + .../dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.c | 1031 + .../aes_ccm_encrypt/aes_ccm_encrypt.ewd | 614 + .../aes_ccm_encrypt/aes_ccm_encrypt.ewp | 801 + .../aes_ccm_encrypt/aes_ccm_encrypt.icf | 78 + .../dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ld | 57 + .../aes_ccm_encrypt/aes_ccm_encrypt.sct | 47 + .../aes_ccm_encrypt/aes_ccm_encrypt.uvopt | 359 + .../aes_ccm_encrypt/aes_ccm_encrypt.uvproj | 449 + .../aes_ccm_encrypt/aes_ccm_encrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.bin | Bin 0 -> 32544 bytes .../aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.out | Bin 0 -> 244863 bytes .../aes_ccm_encrypt/ccs/macros.ini_initial | 1 + .../aes_ccm_encrypt/ccs/target_config.ccxml | 13 + .../aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.bin | Bin 0 -> 30204 bytes .../aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.out | Bin 0 -> 217604 bytes .../aes_ccm_encrypt/gcc/aes_ccm_encrypt.axf | Bin 0 -> 73198 bytes .../aes_ccm_encrypt/gcc/aes_ccm_encrypt.bin | Bin 0 -> 31388 bytes boards/dk-tm4c129x/aes_ccm_encrypt/readme.txt | 27 + .../aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.axf | Bin 0 -> 220392 bytes .../aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.bin | Bin 0 -> 30428 bytes boards/dk-tm4c129x/aes_ccm_encrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_ccm_encrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_ccm_encrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_ccm_encrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_cmac/Makefile | 91 + boards/dk-tm4c129x/aes_cmac/aes_cmac.c | 957 + boards/dk-tm4c129x/aes_cmac/aes_cmac.ewd | 614 + boards/dk-tm4c129x/aes_cmac/aes_cmac.ewp | 801 + boards/dk-tm4c129x/aes_cmac/aes_cmac.icf | 78 + boards/dk-tm4c129x/aes_cmac/aes_cmac.ld | 57 + boards/dk-tm4c129x/aes_cmac/aes_cmac.sct | 47 + boards/dk-tm4c129x/aes_cmac/aes_cmac.uvopt | 359 + boards/dk-tm4c129x/aes_cmac/aes_cmac.uvproj | 449 + boards/dk-tm4c129x/aes_cmac/aes_cmac_ccs.cmd | 70 + boards/dk-tm4c129x/aes_cmac/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_cmac/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_cmac/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_cmac/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.bin | Bin 0 -> 31752 bytes boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.out | Bin 0 -> 243750 bytes boards/dk-tm4c129x/aes_cmac/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/aes_cmac/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.bin | Bin 0 -> 29472 bytes boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.out | Bin 0 -> 214324 bytes boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.axf | Bin 0 -> 72818 bytes boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.bin | Bin 0 -> 30156 bytes boards/dk-tm4c129x/aes_cmac/readme.txt | 31 + boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.axf | Bin 0 -> 220228 bytes boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.bin | Bin 0 -> 29732 bytes boards/dk-tm4c129x/aes_cmac/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_cmac/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_cmac/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_cmac/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_ecb_decrypt/Makefile | 91 + .../dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.c | 698 + .../aes_ecb_decrypt/aes_ecb_decrypt.ewd | 614 + .../aes_ecb_decrypt/aes_ecb_decrypt.ewp | 801 + .../aes_ecb_decrypt/aes_ecb_decrypt.icf | 78 + .../dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ld | 57 + .../aes_ecb_decrypt/aes_ecb_decrypt.sct | 47 + .../aes_ecb_decrypt/aes_ecb_decrypt.uvopt | 359 + .../aes_ecb_decrypt/aes_ecb_decrypt.uvproj | 449 + .../aes_ecb_decrypt/aes_ecb_decrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.bin | Bin 0 -> 31320 bytes .../aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.out | Bin 0 -> 239518 bytes .../aes_ecb_decrypt/ccs/macros.ini_initial | 1 + .../aes_ecb_decrypt/ccs/target_config.ccxml | 13 + .../aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.bin | Bin 0 -> 28920 bytes .../aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.out | Bin 0 -> 210696 bytes .../aes_ecb_decrypt/gcc/aes_ecb_decrypt.axf | Bin 0 -> 72234 bytes .../aes_ecb_decrypt/gcc/aes_ecb_decrypt.bin | Bin 0 -> 29520 bytes boards/dk-tm4c129x/aes_ecb_decrypt/readme.txt | 27 + .../aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.axf | Bin 0 -> 218324 bytes .../aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.bin | Bin 0 -> 29484 bytes boards/dk-tm4c129x/aes_ecb_decrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_ecb_decrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_ecb_decrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_ecb_decrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_ecb_encrypt/Makefile | 91 + .../dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.c | 701 + .../aes_ecb_encrypt/aes_ecb_encrypt.ewd | 614 + .../aes_ecb_encrypt/aes_ecb_encrypt.ewp | 801 + .../aes_ecb_encrypt/aes_ecb_encrypt.icf | 78 + .../dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ld | 57 + .../aes_ecb_encrypt/aes_ecb_encrypt.sct | 47 + .../aes_ecb_encrypt/aes_ecb_encrypt.uvopt | 359 + .../aes_ecb_encrypt/aes_ecb_encrypt.uvproj | 449 + .../aes_ecb_encrypt/aes_ecb_encrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.bin | Bin 0 -> 31320 bytes .../aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.out | Bin 0 -> 239784 bytes .../aes_ecb_encrypt/ccs/macros.ini_initial | 1 + .../aes_ecb_encrypt/ccs/target_config.ccxml | 13 + .../aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.bin | Bin 0 -> 28888 bytes .../aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.out | Bin 0 -> 211588 bytes .../aes_ecb_encrypt/gcc/aes_ecb_encrypt.axf | Bin 0 -> 72234 bytes .../aes_ecb_encrypt/gcc/aes_ecb_encrypt.bin | Bin 0 -> 29532 bytes boards/dk-tm4c129x/aes_ecb_encrypt/readme.txt | 27 + .../aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.axf | Bin 0 -> 218348 bytes .../aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.bin | Bin 0 -> 29468 bytes boards/dk-tm4c129x/aes_ecb_encrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_ecb_encrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_ecb_encrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_ecb_encrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_gcm_decrypt/Makefile | 91 + .../dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.c | 1190 + .../aes_gcm_decrypt/aes_gcm_decrypt.ewd | 614 + .../aes_gcm_decrypt/aes_gcm_decrypt.ewp | 801 + .../aes_gcm_decrypt/aes_gcm_decrypt.icf | 78 + .../dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ld | 57 + .../aes_gcm_decrypt/aes_gcm_decrypt.sct | 47 + .../aes_gcm_decrypt/aes_gcm_decrypt.uvopt | 359 + .../aes_gcm_decrypt/aes_gcm_decrypt.uvproj | 449 + .../aes_gcm_decrypt/aes_gcm_decrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.bin | Bin 0 -> 33376 bytes .../aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.out | Bin 0 -> 251368 bytes .../aes_gcm_decrypt/ccs/macros.ini_initial | 1 + .../aes_gcm_decrypt/ccs/target_config.ccxml | 13 + .../aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.bin | Bin 0 -> 30652 bytes .../aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.out | Bin 0 -> 224512 bytes .../aes_gcm_decrypt/gcc/aes_gcm_decrypt.axf | Bin 0 -> 82943 bytes .../aes_gcm_decrypt/gcc/aes_gcm_decrypt.bin | Bin 0 -> 40924 bytes boards/dk-tm4c129x/aes_gcm_decrypt/readme.txt | 28 + .../aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.axf | Bin 0 -> 224728 bytes .../aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.bin | Bin 0 -> 31408 bytes boards/dk-tm4c129x/aes_gcm_decrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_gcm_decrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_gcm_decrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_gcm_decrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/aes_gcm_encrypt/Makefile | 91 + .../dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.c | 1190 + .../aes_gcm_encrypt/aes_gcm_encrypt.ewd | 614 + .../aes_gcm_encrypt/aes_gcm_encrypt.ewp | 801 + .../aes_gcm_encrypt/aes_gcm_encrypt.icf | 78 + .../dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ld | 57 + .../aes_gcm_encrypt/aes_gcm_encrypt.sct | 47 + .../aes_gcm_encrypt/aes_gcm_encrypt.uvopt | 359 + .../aes_gcm_encrypt/aes_gcm_encrypt.uvproj | 449 + .../aes_gcm_encrypt/aes_gcm_encrypt_ccs.cmd | 70 + .../dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.cproject | 191 + boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.bin | Bin 0 -> 33376 bytes .../aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.out | Bin 0 -> 251376 bytes .../aes_gcm_encrypt/ccs/macros.ini_initial | 1 + .../aes_gcm_encrypt/ccs/target_config.ccxml | 13 + .../aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.bin | Bin 0 -> 30652 bytes .../aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.out | Bin 0 -> 224516 bytes .../aes_gcm_encrypt/gcc/aes_gcm_encrypt.axf | Bin 0 -> 82943 bytes .../aes_gcm_encrypt/gcc/aes_gcm_encrypt.bin | Bin 0 -> 40924 bytes boards/dk-tm4c129x/aes_gcm_encrypt/readme.txt | 28 + .../aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.axf | Bin 0 -> 224732 bytes .../aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.bin | Bin 0 -> 31408 bytes boards/dk-tm4c129x/aes_gcm_encrypt/startup_ccs.c | 275 + boards/dk-tm4c129x/aes_gcm_encrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/aes_gcm_encrypt/startup_gcc.c | 322 + boards/dk-tm4c129x/aes_gcm_encrypt/startup_rvmdk.S | 331 + boards/dk-tm4c129x/bitband/Makefile | 89 + boards/dk-tm4c129x/bitband/bitband.c | 275 + boards/dk-tm4c129x/bitband/bitband.ewd | 614 + boards/dk-tm4c129x/bitband/bitband.ewp | 798 + boards/dk-tm4c129x/bitband/bitband.icf | 78 + boards/dk-tm4c129x/bitband/bitband.ld | 57 + boards/dk-tm4c129x/bitband/bitband.sct | 47 + boards/dk-tm4c129x/bitband/bitband.uvopt | 345 + boards/dk-tm4c129x/bitband/bitband.uvproj | 444 + boards/dk-tm4c129x/bitband/bitband_ccs.cmd | 70 + boards/dk-tm4c129x/bitband/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/bitband/ccs/.ccsproject | 10 + boards/dk-tm4c129x/bitband/ccs/.cproject | 191 + boards/dk-tm4c129x/bitband/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/bitband/ccs/Debug/bitband.bin | Bin 0 -> 25400 bytes boards/dk-tm4c129x/bitband/ccs/Debug/bitband.out | Bin 0 -> 200134 bytes boards/dk-tm4c129x/bitband/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/bitband/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.bin | Bin 0 -> 23240 bytes boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.out | Bin 0 -> 174004 bytes boards/dk-tm4c129x/bitband/gcc/bitband.axf | Bin 0 -> 61506 bytes boards/dk-tm4c129x/bitband/gcc/bitband.bin | Bin 0 -> 23744 bytes boards/dk-tm4c129x/bitband/readme.txt | 29 + boards/dk-tm4c129x/bitband/rvmdk/bitband.axf | Bin 0 -> 162696 bytes boards/dk-tm4c129x/bitband/rvmdk/bitband.bin | Bin 0 -> 23920 bytes boards/dk-tm4c129x/bitband/startup_ccs.c | 268 + boards/dk-tm4c129x/bitband/startup_ewarm.c | 299 + boards/dk-tm4c129x/bitband/startup_gcc.c | 315 + boards/dk-tm4c129x/bitband/startup_rvmdk.S | 324 + boards/dk-tm4c129x/ble_btool/Makefile | 91 + boards/dk-tm4c129x/ble_btool/ble_btool.c | 283 + boards/dk-tm4c129x/ble_btool/ble_btool.ewd | 614 + boards/dk-tm4c129x/ble_btool/ble_btool.ewp | 801 + boards/dk-tm4c129x/ble_btool/ble_btool.icf | 78 + boards/dk-tm4c129x/ble_btool/ble_btool.ld | 57 + boards/dk-tm4c129x/ble_btool/ble_btool.sct | 47 + boards/dk-tm4c129x/ble_btool/ble_btool.uvopt | 359 + boards/dk-tm4c129x/ble_btool/ble_btool.uvproj | 449 + boards/dk-tm4c129x/ble_btool/ble_btool_ccs.cmd | 70 + boards/dk-tm4c129x/ble_btool/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/ble_btool/ccs/.ccsproject | 10 + boards/dk-tm4c129x/ble_btool/ccs/.cproject | 191 + boards/dk-tm4c129x/ble_btool/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.bin | Bin 0 -> 25728 bytes .../dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.out | Bin 0 -> 204126 bytes .../dk-tm4c129x/ble_btool/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/ble_btool/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.bin | Bin 0 -> 23520 bytes .../dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.out | Bin 0 -> 191620 bytes boards/dk-tm4c129x/ble_btool/gcc/ble_btool.axf | Bin 0 -> 62032 bytes boards/dk-tm4c129x/ble_btool/gcc/ble_btool.bin | Bin 0 -> 24028 bytes boards/dk-tm4c129x/ble_btool/readme.txt | 45 + boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.axf | Bin 0 -> 164808 bytes boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.bin | Bin 0 -> 24180 bytes boards/dk-tm4c129x/ble_btool/startup_ccs.c | 276 + boards/dk-tm4c129x/ble_btool/startup_ewarm.c | 307 + boards/dk-tm4c129x/ble_btool/startup_gcc.c | 323 + boards/dk-tm4c129x/ble_btool/startup_rvmdk.S | 332 + boards/dk-tm4c129x/ble_central/Makefile | 94 + boards/dk-tm4c129x/ble_central/ble_central.c | 2551 + boards/dk-tm4c129x/ble_central/ble_central.ewd | 614 + boards/dk-tm4c129x/ble_central/ble_central.ewp | 810 + boards/dk-tm4c129x/ble_central/ble_central.icf | 78 + boards/dk-tm4c129x/ble_central/ble_central.ld | 57 + boards/dk-tm4c129x/ble_central/ble_central.sct | 47 + boards/dk-tm4c129x/ble_central/ble_central.uvopt | 401 + boards/dk-tm4c129x/ble_central/ble_central.uvproj | 464 + boards/dk-tm4c129x/ble_central/ble_central_ccs.cmd | 70 + boards/dk-tm4c129x/ble_central/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/ble_central/ccs/.ccsproject | 10 + boards/dk-tm4c129x/ble_central/ccs/.cproject | 191 + boards/dk-tm4c129x/ble_central/ccs/.project | 85 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ble_central/ccs/Debug/ble_central.bin | Bin 0 -> 47088 bytes .../ble_central/ccs/Debug/ble_central.out | Bin 0 -> 387039 bytes .../dk-tm4c129x/ble_central/ccs/macros.ini_initial | 1 + .../ble_central/ccs/target_config.ccxml | 13 + .../ble_central/ewarm/Exe/ble_central.bin | Bin 0 -> 44044 bytes .../ble_central/ewarm/Exe/ble_central.out | Bin 0 -> 372024 bytes boards/dk-tm4c129x/ble_central/gap.c | 371 + boards/dk-tm4c129x/ble_central/gcc/ble_central.axf | Bin 0 -> 116065 bytes boards/dk-tm4c129x/ble_central/gcc/ble_central.bin | Bin 0 -> 47533 bytes boards/dk-tm4c129x/ble_central/hci.h | 329 + boards/dk-tm4c129x/ble_central/readme.txt | 94 + .../dk-tm4c129x/ble_central/rvmdk/ble_central.axf | Bin 0 -> 297060 bytes .../dk-tm4c129x/ble_central/rvmdk/ble_central.bin | Bin 0 -> 45124 bytes boards/dk-tm4c129x/ble_central/startup_ccs.c | 277 + boards/dk-tm4c129x/ble_central/startup_ewarm.c | 308 + boards/dk-tm4c129x/ble_central/startup_gcc.c | 324 + boards/dk-tm4c129x/ble_central/startup_rvmdk.S | 333 + boards/dk-tm4c129x/blinky/Makefile | 77 + boards/dk-tm4c129x/blinky/blinky.c | 93 + boards/dk-tm4c129x/blinky/blinky.ewd | 614 + boards/dk-tm4c129x/blinky/blinky.ewp | 777 + boards/dk-tm4c129x/blinky/blinky.icf | 78 + boards/dk-tm4c129x/blinky/blinky.ld | 57 + boards/dk-tm4c129x/blinky/blinky.sct | 47 + boards/dk-tm4c129x/blinky/blinky.uvopt | 268 + boards/dk-tm4c129x/blinky/blinky.uvproj | 414 + boards/dk-tm4c129x/blinky/blinky_ccs.cmd | 70 + boards/dk-tm4c129x/blinky/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/blinky/ccs/.ccsproject | 10 + boards/dk-tm4c129x/blinky/ccs/.cproject | 183 + boards/dk-tm4c129x/blinky/ccs/.project | 50 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/blinky/ccs/Debug/blinky.bin | Bin 0 -> 1320 bytes boards/dk-tm4c129x/blinky/ccs/Debug/blinky.out | Bin 0 -> 31974 bytes boards/dk-tm4c129x/blinky/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/blinky/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.bin | Bin 0 -> 744 bytes boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.out | Bin 0 -> 13320 bytes boards/dk-tm4c129x/blinky/gcc/blinky.axf | Bin 0 -> 34580 bytes boards/dk-tm4c129x/blinky/gcc/blinky.bin | Bin 0 -> 700 bytes boards/dk-tm4c129x/blinky/readme.txt | 23 + boards/dk-tm4c129x/blinky/rvmdk/blinky.axf | Bin 0 -> 10220 bytes boards/dk-tm4c129x/blinky/rvmdk/blinky.bin | Bin 0 -> 744 bytes boards/dk-tm4c129x/blinky/startup_ccs.c | 268 + boards/dk-tm4c129x/blinky/startup_ewarm.c | 299 + boards/dk-tm4c129x/blinky/startup_gcc.c | 315 + boards/dk-tm4c129x/blinky/startup_rvmdk.S | 324 + boards/dk-tm4c129x/boot_demo_emac_flash/Makefile | 100 + .../boot_demo_emac_flash/boot_demo_emac_flash.c | 426 + .../boot_demo_emac_flash/boot_demo_emac_flash.ewd | 614 + .../boot_demo_emac_flash/boot_demo_emac_flash.ewp | 821 + .../boot_demo_emac_flash/boot_demo_emac_flash.icf | 78 + .../boot_demo_emac_flash/boot_demo_emac_flash.ld | 57 + .../boot_demo_emac_flash/boot_demo_emac_flash.sct | 47 + .../boot_demo_emac_flash.uvopt | 387 + .../boot_demo_emac_flash.uvproj | 459 + .../boot_demo_emac_flash_ccs.cmd | 70 + .../boot_demo_emac_flash/ccs/.ccsimportspec | 9 + .../boot_demo_emac_flash/ccs/.ccsproject | 10 + .../dk-tm4c129x/boot_demo_emac_flash/ccs/.cproject | 205 + .../dk-tm4c129x/boot_demo_emac_flash/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/boot_demo_emac_flash.bin | Bin 0 -> 55024 bytes .../ccs/Debug/boot_demo_emac_flash.out | Bin 0 -> 706020 bytes .../boot_demo_emac_flash/ccs/macros.ini_initial | 1 + .../boot_demo_emac_flash/ccs/target_config.ccxml | 13 + .../ewarm/Exe/boot_demo_emac_flash.bin | Bin 0 -> 50300 bytes .../ewarm/Exe/boot_demo_emac_flash.out | Bin 0 -> 601676 bytes .../gcc/boot_demo_emac_flash.axf | Bin 0 -> 120235 bytes .../gcc/boot_demo_emac_flash.bin | Bin 0 -> 53764 bytes boards/dk-tm4c129x/boot_demo_emac_flash/lwipopts.h | 433 + boards/dk-tm4c129x/boot_demo_emac_flash/readme.txt | 44 + .../rvmdk/boot_demo_emac_flash.axf | Bin 0 -> 491656 bytes .../rvmdk/boot_demo_emac_flash.bin | Bin 0 -> 52064 bytes .../dk-tm4c129x/boot_demo_emac_flash/startup_ccs.c | 276 + .../boot_demo_emac_flash/startup_ewarm.c | 307 + .../dk-tm4c129x/boot_demo_emac_flash/startup_gcc.c | 323 + .../boot_demo_emac_flash/startup_rvmdk.S | 332 + boards/dk-tm4c129x/boot_demo_flash/Makefile | 100 + .../dk-tm4c129x/boot_demo_flash/boot_demo_flash.c | 512 + .../boot_demo_flash/boot_demo_flash.ewd | 614 + .../boot_demo_flash/boot_demo_flash.ewp | 821 + .../boot_demo_flash/boot_demo_flash.icf | 78 + .../dk-tm4c129x/boot_demo_flash/boot_demo_flash.ld | 57 + .../boot_demo_flash/boot_demo_flash.sct | 47 + .../boot_demo_flash/boot_demo_flash.uvopt | 387 + .../boot_demo_flash/boot_demo_flash.uvproj | 459 + .../boot_demo_flash/boot_demo_flash_ccs.cmd | 70 + .../dk-tm4c129x/boot_demo_flash/ccs/.ccsimportspec | 9 + boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsproject | 10 + boards/dk-tm4c129x/boot_demo_flash/ccs/.cproject | 205 + boards/dk-tm4c129x/boot_demo_flash/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../boot_demo_flash/ccs/Debug/boot_demo_flash.bin | Bin 0 -> 56560 bytes .../boot_demo_flash/ccs/Debug/boot_demo_flash.out | Bin 0 -> 718405 bytes .../boot_demo_flash/ccs/macros.ini_initial | 1 + .../boot_demo_flash/ccs/target_config.ccxml | 13 + .../boot_demo_flash/ewarm/Exe/boot_demo_flash.bin | Bin 0 -> 51876 bytes .../boot_demo_flash/ewarm/Exe/boot_demo_flash.out | Bin 0 -> 625160 bytes .../boot_demo_flash/gcc/boot_demo_flash.axf | Bin 0 -> 120693 bytes .../boot_demo_flash/gcc/boot_demo_flash.bin | Bin 0 -> 55452 bytes boards/dk-tm4c129x/boot_demo_flash/lwipopts.h | 433 + boards/dk-tm4c129x/boot_demo_flash/readme.txt | 43 + .../boot_demo_flash/rvmdk/boot_demo_flash.axf | Bin 0 -> 501916 bytes .../boot_demo_flash/rvmdk/boot_demo_flash.bin | Bin 0 -> 53692 bytes boards/dk-tm4c129x/boot_demo_flash/startup_ccs.c | 277 + boards/dk-tm4c129x/boot_demo_flash/startup_ewarm.c | 308 + boards/dk-tm4c129x/boot_demo_flash/startup_gcc.c | 324 + boards/dk-tm4c129x/boot_demo_flash/startup_rvmdk.S | 333 + boards/dk-tm4c129x/boot_demo_uart/Makefile | 90 + boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.c | 224 + .../dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewd | 614 + .../dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewp | 801 + .../dk-tm4c129x/boot_demo_uart/boot_demo_uart.icf | 78 + .../dk-tm4c129x/boot_demo_uart/boot_demo_uart.ld | 57 + .../dk-tm4c129x/boot_demo_uart/boot_demo_uart.sct | 47 + .../boot_demo_uart/boot_demo_uart.uvopt | 359 + .../boot_demo_uart/boot_demo_uart.uvproj | 449 + .../boot_demo_uart/boot_demo_uart_ccs.cmd | 70 + .../dk-tm4c129x/boot_demo_uart/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsproject | 10 + boards/dk-tm4c129x/boot_demo_uart/ccs/.cproject | 191 + boards/dk-tm4c129x/boot_demo_uart/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../boot_demo_uart/ccs/Debug/boot_demo_uart.bin | Bin 0 -> 26640 bytes .../boot_demo_uart/ccs/Debug/boot_demo_uart.out | Bin 0 -> 215026 bytes .../boot_demo_uart/ccs/macros.ini_initial | 1 + .../boot_demo_uart/ccs/target_config.ccxml | 13 + .../boot_demo_uart/ewarm/Exe/boot_demo_uart.bin | Bin 0 -> 24520 bytes .../boot_demo_uart/ewarm/Exe/boot_demo_uart.out | Bin 0 -> 194792 bytes .../boot_demo_uart/gcc/boot_demo_uart.axf | Bin 0 -> 71339 bytes .../boot_demo_uart/gcc/boot_demo_uart.bin | Bin 0 -> 25058 bytes boards/dk-tm4c129x/boot_demo_uart/readme.txt | 27 + .../boot_demo_uart/rvmdk/boot_demo_uart.axf | Bin 0 -> 171396 bytes .../boot_demo_uart/rvmdk/boot_demo_uart.bin | Bin 0 -> 25156 bytes boards/dk-tm4c129x/boot_demo_uart/startup_ccs.c | 275 + boards/dk-tm4c129x/boot_demo_uart/startup_ewarm.c | 306 + boards/dk-tm4c129x/boot_demo_uart/startup_gcc.c | 322 + boards/dk-tm4c129x/boot_demo_uart/startup_rvmdk.S | 331 + boards/dk-tm4c129x/boot_demo_usb/Makefile | 93 + boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.c | 821 + boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewd | 614 + boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewp | 807 + boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.icf | 78 + boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ld | 57 + boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.sct | 47 + .../dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvopt | 387 + .../dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvproj | 459 + .../boot_demo_usb/boot_demo_usb_ccs.cmd | 70 + .../dk-tm4c129x/boot_demo_usb/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsproject | 10 + boards/dk-tm4c129x/boot_demo_usb/ccs/.cproject | 193 + boards/dk-tm4c129x/boot_demo_usb/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../boot_demo_usb/ccs/Debug/boot_demo_usb.bin | Bin 0 -> 40840 bytes .../boot_demo_usb/ccs/Debug/boot_demo_usb.out | Bin 0 -> 666984 bytes .../boot_demo_usb/ccs/macros.ini_initial | 1 + .../boot_demo_usb/ccs/target_config.ccxml | 13 + .../boot_demo_usb/ewarm/Exe/boot_demo_usb.bin | Bin 0 -> 38108 bytes .../boot_demo_usb/ewarm/Exe/boot_demo_usb.out | Bin 0 -> 509724 bytes .../boot_demo_usb/gcc/boot_demo_usb.axf | Bin 0 -> 119014 bytes .../boot_demo_usb/gcc/boot_demo_usb.bin | Bin 0 -> 39528 bytes boards/dk-tm4c129x/boot_demo_usb/readme.txt | 90 + .../boot_demo_usb/rvmdk/boot_demo_usb.axf | Bin 0 -> 411572 bytes .../boot_demo_usb/rvmdk/boot_demo_usb.bin | Bin 0 -> 40688 bytes boards/dk-tm4c129x/boot_demo_usb/startup_ccs.c | 277 + boards/dk-tm4c129x/boot_demo_usb/startup_ewarm.c | 308 + boards/dk-tm4c129x/boot_demo_usb/startup_gcc.c | 324 + boards/dk-tm4c129x/boot_demo_usb/startup_rvmdk.S | 333 + .../dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.c | 246 + .../dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.h | 40 + boards/dk-tm4c129x/boot_emac_flash/Makefile | 98 + boards/dk-tm4c129x/boot_emac_flash/bl_config.h | 1137 + .../dk-tm4c129x/boot_emac_flash/boot_emac_flash.c | 52 + .../boot_emac_flash/boot_emac_flash.ewd | 614 + .../boot_emac_flash/boot_emac_flash.ewp | 821 + .../boot_emac_flash/boot_emac_flash.uvopt | 450 + .../boot_emac_flash/boot_emac_flash.uvproj | 479 + .../dk-tm4c129x/boot_emac_flash/ccs/.ccsimportspec | 6 + boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsproject | 10 + boards/dk-tm4c129x/boot_emac_flash/ccs/.cproject | 191 + boards/dk-tm4c129x/boot_emac_flash/ccs/.project | 115 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../boot_emac_flash/ccs/Debug/boot_emac_flash.bin | Bin 0 -> 4730 bytes .../boot_emac_flash/ccs/Debug/boot_emac_flash.out | Bin 0 -> 84728 bytes .../boot_emac_flash/ccs/macros.ini_initial | 1 + .../boot_emac_flash/ccs/target_config.ccxml | 13 + .../boot_emac_flash/ewarm/Exe/boot_emac_flash.bin | Bin 0 -> 4016 bytes .../boot_emac_flash/ewarm/Exe/boot_emac_flash.out | Bin 0 -> 69064 bytes .../boot_emac_flash/gcc/boot_emac_flash.axf | Bin 0 -> 41712 bytes .../boot_emac_flash/gcc/boot_emac_flash.bin | Bin 0 -> 4438 bytes .../boot_emac_flash/rvmdk/boot_emac_flash.axf | Bin 0 -> 69740 bytes .../boot_emac_flash/rvmdk/boot_emac_flash.bin | Bin 0 -> 4388 bytes boards/dk-tm4c129x/calibrate/Makefile | 92 + boards/dk-tm4c129x/calibrate/calibrate.c | 331 + boards/dk-tm4c129x/calibrate/calibrate.ewd | 614 + boards/dk-tm4c129x/calibrate/calibrate.ewp | 804 + boards/dk-tm4c129x/calibrate/calibrate.icf | 78 + boards/dk-tm4c129x/calibrate/calibrate.ld | 57 + boards/dk-tm4c129x/calibrate/calibrate.sct | 47 + boards/dk-tm4c129x/calibrate/calibrate.uvopt | 373 + boards/dk-tm4c129x/calibrate/calibrate.uvproj | 454 + boards/dk-tm4c129x/calibrate/calibrate_ccs.cmd | 70 + boards/dk-tm4c129x/calibrate/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/calibrate/ccs/.ccsproject | 10 + boards/dk-tm4c129x/calibrate/ccs/.cproject | 191 + boards/dk-tm4c129x/calibrate/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/calibrate/ccs/Debug/calibrate.bin | Bin 0 -> 30192 bytes .../dk-tm4c129x/calibrate/ccs/Debug/calibrate.out | Bin 0 -> 234549 bytes .../dk-tm4c129x/calibrate/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/calibrate/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/calibrate/ewarm/Exe/calibrate.bin | Bin 0 -> 27888 bytes .../dk-tm4c129x/calibrate/ewarm/Exe/calibrate.out | Bin 0 -> 211428 bytes boards/dk-tm4c129x/calibrate/gcc/calibrate.axf | Bin 0 -> 71494 bytes boards/dk-tm4c129x/calibrate/gcc/calibrate.bin | Bin 0 -> 28594 bytes boards/dk-tm4c129x/calibrate/readme.txt | 32 + boards/dk-tm4c129x/calibrate/rvmdk/calibrate.axf | Bin 0 -> 204760 bytes boards/dk-tm4c129x/calibrate/rvmdk/calibrate.bin | Bin 0 -> 28756 bytes boards/dk-tm4c129x/calibrate/startup_ccs.c | 275 + boards/dk-tm4c129x/calibrate/startup_ewarm.c | 306 + boards/dk-tm4c129x/calibrate/startup_gcc.c | 322 + boards/dk-tm4c129x/calibrate/startup_rvmdk.S | 331 + boards/dk-tm4c129x/crc32/Makefile | 91 + boards/dk-tm4c129x/crc32/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/crc32/ccs/.ccsproject | 10 + boards/dk-tm4c129x/crc32/ccs/.cproject | 191 + boards/dk-tm4c129x/crc32/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/crc32/ccs/Debug/crc32.bin | Bin 0 -> 29968 bytes boards/dk-tm4c129x/crc32/ccs/Debug/crc32.out | Bin 0 -> 231438 bytes boards/dk-tm4c129x/crc32/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/crc32/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/crc32/crc32.c | 482 + boards/dk-tm4c129x/crc32/crc32.ewd | 614 + boards/dk-tm4c129x/crc32/crc32.ewp | 801 + boards/dk-tm4c129x/crc32/crc32.icf | 78 + boards/dk-tm4c129x/crc32/crc32.ld | 57 + boards/dk-tm4c129x/crc32/crc32.sct | 47 + boards/dk-tm4c129x/crc32/crc32.uvopt | 359 + boards/dk-tm4c129x/crc32/crc32.uvproj | 449 + boards/dk-tm4c129x/crc32/crc32_ccs.cmd | 70 + boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.bin | Bin 0 -> 27612 bytes boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.out | Bin 0 -> 202196 bytes boards/dk-tm4c129x/crc32/gcc/crc32.axf | Bin 0 -> 71357 bytes boards/dk-tm4c129x/crc32/gcc/crc32.bin | Bin 0 -> 28100 bytes boards/dk-tm4c129x/crc32/readme.txt | 26 + boards/dk-tm4c129x/crc32/rvmdk/crc32.axf | Bin 0 -> 214152 bytes boards/dk-tm4c129x/crc32/rvmdk/crc32.bin | Bin 0 -> 28192 bytes boards/dk-tm4c129x/crc32/startup_ccs.c | 268 + boards/dk-tm4c129x/crc32/startup_ewarm.c | 299 + boards/dk-tm4c129x/crc32/startup_gcc.c | 315 + boards/dk-tm4c129x/crc32/startup_rvmdk.S | 324 + boards/dk-tm4c129x/dk-tm4c129x.eww | 464 + boards/dk-tm4c129x/dk-tm4c129x.uvmpw | 335 + boards/dk-tm4c129x/drivers/buttons.c | 261 + boards/dk-tm4c129x/drivers/buttons.h | 105 + boards/dk-tm4c129x/drivers/frame.c | 1539 + boards/dk-tm4c129x/drivers/frame.h | 55 + .../dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c | 1056 + .../dk-tm4c129x/drivers/kentec320x240x16_ssd2119.h | 58 + boards/dk-tm4c129x/drivers/mx66l51235f.c | 534 + boards/dk-tm4c129x/drivers/mx66l51235f.h | 71 + boards/dk-tm4c129x/drivers/pinout.c | 282 + boards/dk-tm4c129x/drivers/pinout.h | 59 + boards/dk-tm4c129x/drivers/sound.c | 688 + boards/dk-tm4c129x/drivers/sound.h | 65 + boards/dk-tm4c129x/drivers/touch.c | 762 + boards/dk-tm4c129x/drivers/touch.h | 61 + boards/dk-tm4c129x/drivers/usb_sound.c | 769 + boards/dk-tm4c129x/drivers/usb_sound.h | 81 + boards/dk-tm4c129x/enet_io/Makefile | 105 + boards/dk-tm4c129x/enet_io/ccs/.ccsimportspec | 33 + boards/dk-tm4c129x/enet_io/ccs/.ccsproject | 10 + boards/dk-tm4c129x/enet_io/ccs/.cproject | 203 + boards/dk-tm4c129x/enet_io/ccs/.project | 100 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.bin | Bin 0 -> 161560 bytes boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.out | Bin 0 -> 921236 bytes boards/dk-tm4c129x/enet_io/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/enet_io/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/enet_io/cgifuncs.c | 551 + boards/dk-tm4c129x/enet_io/cgifuncs.h | 45 + boards/dk-tm4c129x/enet_io/enet_io.c | 927 + boards/dk-tm4c129x/enet_io/enet_io.ewd | 614 + boards/dk-tm4c129x/enet_io/enet_io.ewp | 831 + boards/dk-tm4c129x/enet_io/enet_io.icf | 78 + boards/dk-tm4c129x/enet_io/enet_io.ld | 57 + boards/dk-tm4c129x/enet_io/enet_io.sct | 47 + boards/dk-tm4c129x/enet_io/enet_io.uvopt | 443 + boards/dk-tm4c129x/enet_io/enet_io.uvproj | 479 + boards/dk-tm4c129x/enet_io/enet_io_ccs.cmd | 70 + boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.bin | Bin 0 -> 156948 bytes boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.out | Bin 0 -> 795200 bytes boards/dk-tm4c129x/enet_io/fs/404.htm | 12 + boards/dk-tm4c129x/enet_io/fs/about.htm | 33 + boards/dk-tm4c129x/enet_io/fs/block.htm | 18 + boards/dk-tm4c129x/enet_io/fs/block.jpg | Bin 0 -> 50426 bytes boards/dk-tm4c129x/enet_io/fs/dk-tm4c129x.jpg | Bin 0 -> 10720 bytes boards/dk-tm4c129x/enet_io/fs/favicon.ico | Bin 0 -> 1718 bytes boards/dk-tm4c129x/enet_io/fs/index.htm | 57 + boards/dk-tm4c129x/enet_io/fs/io_cgi.ssi | 146 + boards/dk-tm4c129x/enet_io/fs/io_http.htm | 63 + boards/dk-tm4c129x/enet_io/fs/javascript.js | 191 + boards/dk-tm4c129x/enet_io/fs/javascript_load.js | 11 + boards/dk-tm4c129x/enet_io/fs/overview.htm | 30 + boards/dk-tm4c129x/enet_io/fs/perror.htm | 74 + boards/dk-tm4c129x/enet_io/fs/styles.css | 104 + boards/dk-tm4c129x/enet_io/fs/ti.jpg | Bin 0 -> 7156 bytes boards/dk-tm4c129x/enet_io/fs/tm4c.jpg | Bin 0 -> 3369 bytes boards/dk-tm4c129x/enet_io/gcc/enet_io.axf | Bin 0 -> 223416 bytes boards/dk-tm4c129x/enet_io/gcc/enet_io.bin | Bin 0 -> 162598 bytes boards/dk-tm4c129x/enet_io/io.c | 259 + boards/dk-tm4c129x/enet_io/io.h | 58 + boards/dk-tm4c129x/enet_io/io_fs.c | 316 + boards/dk-tm4c129x/enet_io/io_fsdata.h | 12700 +++++ boards/dk-tm4c129x/enet_io/lwipopts.h | 439 + boards/dk-tm4c129x/enet_io/readme.txt | 78 + boards/dk-tm4c129x/enet_io/rvmdk/enet_io.axf | Bin 0 -> 631608 bytes boards/dk-tm4c129x/enet_io/rvmdk/enet_io.bin | Bin 0 -> 158412 bytes boards/dk-tm4c129x/enet_io/startup_ccs.c | 277 + boards/dk-tm4c129x/enet_io/startup_ewarm.c | 308 + boards/dk-tm4c129x/enet_io/startup_gcc.c | 324 + boards/dk-tm4c129x/enet_io/startup_rvmdk.S | 333 + boards/dk-tm4c129x/enet_lwip/Makefile | 106 + boards/dk-tm4c129x/enet_lwip/ccs/.ccsimportspec | 26 + boards/dk-tm4c129x/enet_lwip/ccs/.ccsproject | 10 + boards/dk-tm4c129x/enet_lwip/ccs/.cproject | 203 + boards/dk-tm4c129x/enet_lwip/ccs/.project | 100 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.bin | Bin 0 -> 189576 bytes .../dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.out | Bin 0 -> 982762 bytes .../dk-tm4c129x/enet_lwip/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/enet_lwip/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/enet_lwip/enet_fs.c | 338 + boards/dk-tm4c129x/enet_lwip/enet_fs.h | 36 + boards/dk-tm4c129x/enet_lwip/enet_fsdata.h | 16229 +++++++ boards/dk-tm4c129x/enet_lwip/enet_lwip.c | 455 + boards/dk-tm4c129x/enet_lwip/enet_lwip.ewd | 614 + boards/dk-tm4c129x/enet_lwip/enet_lwip.ewp | 831 + boards/dk-tm4c129x/enet_lwip/enet_lwip.icf | 78 + boards/dk-tm4c129x/enet_lwip/enet_lwip.ld | 57 + boards/dk-tm4c129x/enet_lwip/enet_lwip.sct | 47 + boards/dk-tm4c129x/enet_lwip/enet_lwip.uvopt | 443 + boards/dk-tm4c129x/enet_lwip/enet_lwip.uvproj | 479 + boards/dk-tm4c129x/enet_lwip/enet_lwip_ccs.cmd | 70 + .../dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.bin | Bin 0 -> 184872 bytes .../dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.out | Bin 0 -> 857612 bytes boards/dk-tm4c129x/enet_lwip/fs/404.htm | 9 + boards/dk-tm4c129x/enet_lwip/fs/about.htm | 32 + boards/dk-tm4c129x/enet_lwip/fs/block.htm | 17 + boards/dk-tm4c129x/enet_lwip/fs/block.jpg | Bin 0 -> 90569 bytes boards/dk-tm4c129x/enet_lwip/fs/dk-tm4c129x.jpg | Bin 0 -> 16832 bytes boards/dk-tm4c129x/enet_lwip/fs/favicon.ico | Bin 0 -> 1718 bytes boards/dk-tm4c129x/enet_lwip/fs/index.htm | 54 + boards/dk-tm4c129x/enet_lwip/fs/javascript.js | 53 + boards/dk-tm4c129x/enet_lwip/fs/overview.htm | 29 + boards/dk-tm4c129x/enet_lwip/fs/styles.css | 104 + boards/dk-tm4c129x/enet_lwip/fs/ti.jpg | Bin 0 -> 7156 bytes boards/dk-tm4c129x/enet_lwip/fs/tm4c.jpg | Bin 0 -> 3369 bytes boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.axf | Bin 0 -> 255946 bytes boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.bin | Bin 0 -> 190739 bytes boards/dk-tm4c129x/enet_lwip/lwipopts.h | 439 + boards/dk-tm4c129x/enet_lwip/readme.txt | 41 + boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.axf | Bin 0 -> 651124 bytes boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.bin | Bin 0 -> 186256 bytes boards/dk-tm4c129x/enet_lwip/startup_ccs.c | 276 + boards/dk-tm4c129x/enet_lwip/startup_ewarm.c | 307 + boards/dk-tm4c129x/enet_lwip/startup_gcc.c | 323 + boards/dk-tm4c129x/enet_lwip/startup_rvmdk.S | 332 + boards/dk-tm4c129x/enet_uip/Makefile | 106 + boards/dk-tm4c129x/enet_uip/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/enet_uip/ccs/.ccsproject | 10 + boards/dk-tm4c129x/enet_uip/ccs/.cproject | 205 + boards/dk-tm4c129x/enet_uip/ccs/.project | 100 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.bin | Bin 0 -> 38264 bytes boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.out | Bin 0 -> 386272 bytes boards/dk-tm4c129x/enet_uip/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/enet_uip/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/enet_uip/clock-arch.h | 41 + boards/dk-tm4c129x/enet_uip/enet_uip.c | 1065 + boards/dk-tm4c129x/enet_uip/enet_uip.ewd | 614 + boards/dk-tm4c129x/enet_uip/enet_uip.ewp | 831 + boards/dk-tm4c129x/enet_uip/enet_uip.icf | 78 + boards/dk-tm4c129x/enet_uip/enet_uip.ld | 57 + boards/dk-tm4c129x/enet_uip/enet_uip.sct | 47 + boards/dk-tm4c129x/enet_uip/enet_uip.uvopt | 443 + boards/dk-tm4c129x/enet_uip/enet_uip.uvproj | 479 + boards/dk-tm4c129x/enet_uip/enet_uip_ccs.cmd | 70 + boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.bin | Bin 0 -> 35324 bytes boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.out | Bin 0 -> 310236 bytes boards/dk-tm4c129x/enet_uip/gcc/enet_uip.axf | Bin 0 -> 109049 bytes boards/dk-tm4c129x/enet_uip/gcc/enet_uip.bin | Bin 0 -> 37146 bytes boards/dk-tm4c129x/enet_uip/readme.txt | 33 + boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.axf | Bin 0 -> 316940 bytes boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.bin | Bin 0 -> 35764 bytes boards/dk-tm4c129x/enet_uip/startup_ccs.c | 276 + boards/dk-tm4c129x/enet_uip/startup_ewarm.c | 307 + boards/dk-tm4c129x/enet_uip/startup_gcc.c | 323 + boards/dk-tm4c129x/enet_uip/startup_rvmdk.S | 332 + boards/dk-tm4c129x/enet_uip/uip-conf.h | 162 + boards/dk-tm4c129x/fontview/Makefile | 102 + boards/dk-tm4c129x/fontview/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/fontview/ccs/.ccsproject | 10 + boards/dk-tm4c129x/fontview/ccs/.cproject | 197 + boards/dk-tm4c129x/fontview/ccs/.project | 100 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/fontview/ccs/Debug/fontview.bin | Bin 0 -> 58768 bytes boards/dk-tm4c129x/fontview/ccs/Debug/fontview.out | Bin 0 -> 476809 bytes boards/dk-tm4c129x/fontview/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/fontview/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.bin | Bin 0 -> 55868 bytes boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.out | Bin 0 -> 436292 bytes boards/dk-tm4c129x/fontview/fatwrapper.c | 858 + boards/dk-tm4c129x/fontview/fatwrapper.h | 45 + boards/dk-tm4c129x/fontview/fontview.c | 705 + boards/dk-tm4c129x/fontview/fontview.ewd | 614 + boards/dk-tm4c129x/fontview/fontview.ewp | 824 + boards/dk-tm4c129x/fontview/fontview.icf | 78 + boards/dk-tm4c129x/fontview/fontview.ld | 57 + boards/dk-tm4c129x/fontview/fontview.sct | 47 + boards/dk-tm4c129x/fontview/fontview.uvopt | 443 + boards/dk-tm4c129x/fontview/fontview.uvproj | 479 + boards/dk-tm4c129x/fontview/fontview_ccs.cmd | 70 + boards/dk-tm4c129x/fontview/gcc/fontview.axf | Bin 0 -> 113159 bytes boards/dk-tm4c129x/fontview/gcc/fontview.bin | Bin 0 -> 57400 bytes boards/dk-tm4c129x/fontview/readme.txt | 30 + boards/dk-tm4c129x/fontview/rvmdk/fontview.axf | Bin 0 -> 368912 bytes boards/dk-tm4c129x/fontview/rvmdk/fontview.bin | Bin 0 -> 56228 bytes boards/dk-tm4c129x/fontview/startup_ccs.c | 277 + boards/dk-tm4c129x/fontview/startup_ewarm.c | 308 + boards/dk-tm4c129x/fontview/startup_gcc.c | 324 + boards/dk-tm4c129x/fontview/startup_rvmdk.S | 333 + boards/dk-tm4c129x/freertos_demo/FreeRTOSConfig.h | 107 + boards/dk-tm4c129x/freertos_demo/Makefile | 124 + .../dk-tm4c129x/freertos_demo/ccs/.ccsimportspec | 59 + boards/dk-tm4c129x/freertos_demo/ccs/.ccsproject | 10 + boards/dk-tm4c129x/freertos_demo/ccs/.cproject | 211 + boards/dk-tm4c129x/freertos_demo/ccs/.project | 175 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../freertos_demo/ccs/Debug/freertos_demo.bin | Bin 0 -> 461448 bytes .../freertos_demo/ccs/Debug/freertos_demo.out | Bin 0 -> 1447152 bytes .../freertos_demo/ccs/macros.ini_initial | 1 + .../freertos_demo/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/freertos_demo/cgifuncs.c | 552 + boards/dk-tm4c129x/freertos_demo/cgifuncs.h | 46 + boards/dk-tm4c129x/freertos_demo/display_task.c | 329 + boards/dk-tm4c129x/freertos_demo/display_task.h | 41 + .../freertos_demo/ewarm/Exe/freertos_demo.bin | Bin 0 -> 455852 bytes .../freertos_demo/ewarm/Exe/freertos_demo.out | Bin 0 -> 1290620 bytes boards/dk-tm4c129x/freertos_demo/freertos_demo.c | 275 + boards/dk-tm4c129x/freertos_demo/freertos_demo.ewd | 614 + boards/dk-tm4c129x/freertos_demo/freertos_demo.ewp | 883 + boards/dk-tm4c129x/freertos_demo/freertos_demo.h | 35 + boards/dk-tm4c129x/freertos_demo/freertos_demo.icf | 78 + boards/dk-tm4c129x/freertos_demo/freertos_demo.ld | 57 + boards/dk-tm4c129x/freertos_demo/freertos_demo.sct | 47 + .../dk-tm4c129x/freertos_demo/freertos_demo.uvopt | 639 + .../dk-tm4c129x/freertos_demo/freertos_demo.uvproj | 549 + .../freertos_demo/freertos_demo_ccs.cmd | 70 + boards/dk-tm4c129x/freertos_demo/fs.c | 236 + .../freertos_demo/gcc/freertos_demo.axf | Bin 0 -> 561272 bytes .../freertos_demo/gcc/freertos_demo.bin | Bin 0 -> 462254 bytes boards/dk-tm4c129x/freertos_demo/html/404.htm | 9 + boards/dk-tm4c129x/freertos_demo/html/block.htm | 27 + boards/dk-tm4c129x/freertos_demo/html/family.htm | 45 + boards/dk-tm4c129x/freertos_demo/html/favicon.ico | Bin 0 -> 1718 bytes boards/dk-tm4c129x/freertos_demo/html/footer.htm | 38 + boards/dk-tm4c129x/freertos_demo/html/freertos.htm | 30 + boards/dk-tm4c129x/freertos_demo/html/header.htm | 51 + .../dk-tm4c129x/freertos_demo/html/images/apps.jpg | Bin 0 -> 55996 bytes .../html/images/c-c-c-communicate-small.jpg | Bin 0 -> 8037 bytes .../html/images/c-c-c-connect-small.jpg | Bin 0 -> 8256 bytes .../html/images/c-c-c-control-small.jpg | Bin 0 -> 7379 bytes .../freertos_demo/html/images/cortex.jpg | Bin 0 -> 6399 bytes .../freertos_demo/html/images/freertos.jpg | Bin 0 -> 3680 bytes .../freertos_demo/html/images/mcu_side-by-side.jpg | Bin 0 -> 77835 bytes .../dk-tm4c129x/freertos_demo/html/images/ti.gif | Bin 0 -> 720 bytes .../freertos_demo/html/images/ti_logo.gif | Bin 0 -> 3301 bytes .../dk-tm4c129x/freertos_demo/html/images/tiva.jpg | Bin 0 -> 164196 bytes .../freertos_demo/html/images/tiva_globe-small.gif | Bin 0 -> 15436 bytes boards/dk-tm4c129x/freertos_demo/html/index.htm | 19 + boards/dk-tm4c129x/freertos_demo/html/io.ssi | 44 + boards/dk-tm4c129x/freertos_demo/html/lwipstat.ssi | 110 + boards/dk-tm4c129x/freertos_demo/html/perror.htm | 25 + boards/dk-tm4c129x/freertos_demo/html/side.htm | 33 + boards/dk-tm4c129x/freertos_demo/html/styles.css | 31 + boards/dk-tm4c129x/freertos_demo/html/ti.htm | 43 + boards/dk-tm4c129x/freertos_demo/htmldata.h | 46756 +++++++++++++++++++ boards/dk-tm4c129x/freertos_demo/idle_task.c | 460 + boards/dk-tm4c129x/freertos_demo/idle_task.h | 35 + boards/dk-tm4c129x/freertos_demo/images.c | 4602 ++ boards/dk-tm4c129x/freertos_demo/images.h | 51 + boards/dk-tm4c129x/freertos_demo/led_task.c | 120 + boards/dk-tm4c129x/freertos_demo/led_task.h | 36 + boards/dk-tm4c129x/freertos_demo/lwip_task.c | 378 + boards/dk-tm4c129x/freertos_demo/lwip_task.h | 35 + boards/dk-tm4c129x/freertos_demo/lwipopts.h | 446 + boards/dk-tm4c129x/freertos_demo/priorities.h | 39 + boards/dk-tm4c129x/freertos_demo/random.c | 176 + boards/dk-tm4c129x/freertos_demo/random.h | 37 + boards/dk-tm4c129x/freertos_demo/readme.txt | 66 + .../freertos_demo/rvmdk/freertos_demo.axf | Bin 0 -> 1059100 bytes .../freertos_demo/rvmdk/freertos_demo.bin | Bin 0 -> 457328 bytes boards/dk-tm4c129x/freertos_demo/spider_task.c | 855 + boards/dk-tm4c129x/freertos_demo/spider_task.h | 44 + boards/dk-tm4c129x/freertos_demo/startup_ccs.c | 279 + boards/dk-tm4c129x/freertos_demo/startup_ewarm.c | 310 + boards/dk-tm4c129x/freertos_demo/startup_gcc.c | 326 + boards/dk-tm4c129x/freertos_demo/startup_rvmdk.S | 335 + boards/dk-tm4c129x/gpio_jtag/Makefile | 90 + boards/dk-tm4c129x/gpio_jtag/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/gpio_jtag/ccs/.ccsproject | 10 + boards/dk-tm4c129x/gpio_jtag/ccs/.cproject | 191 + boards/dk-tm4c129x/gpio_jtag/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.bin | Bin 0 -> 28960 bytes .../dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.out | Bin 0 -> 217256 bytes .../dk-tm4c129x/gpio_jtag/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/gpio_jtag/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.bin | Bin 0 -> 26792 bytes .../dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.out | Bin 0 -> 194052 bytes boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.axf | Bin 0 -> 71437 bytes boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.bin | Bin 0 -> 27350 bytes boards/dk-tm4c129x/gpio_jtag/gpio_jtag.c | 262 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewd | 614 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewp | 801 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.icf | 78 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ld | 57 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.sct | 47 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvopt | 359 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvproj | 449 + boards/dk-tm4c129x/gpio_jtag/gpio_jtag_ccs.cmd | 70 + boards/dk-tm4c129x/gpio_jtag/readme.txt | 28 + boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.axf | Bin 0 -> 197492 bytes boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.bin | Bin 0 -> 27440 bytes boards/dk-tm4c129x/gpio_jtag/startup_ccs.c | 275 + boards/dk-tm4c129x/gpio_jtag/startup_ewarm.c | 306 + boards/dk-tm4c129x/gpio_jtag/startup_gcc.c | 322 + boards/dk-tm4c129x/gpio_jtag/startup_rvmdk.S | 331 + boards/dk-tm4c129x/grlib_demo/Makefile | 95 + boards/dk-tm4c129x/grlib_demo/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/grlib_demo/ccs/.ccsproject | 10 + boards/dk-tm4c129x/grlib_demo/ccs/.cproject | 191 + boards/dk-tm4c129x/grlib_demo/ccs/.project | 90 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../grlib_demo/ccs/Debug/grlib_demo.bin | Bin 0 -> 65712 bytes .../grlib_demo/ccs/Debug/grlib_demo.out | Bin 0 -> 436321 bytes .../dk-tm4c129x/grlib_demo/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/grlib_demo/ccs/target_config.ccxml | 13 + .../grlib_demo/ewarm/Exe/grlib_demo.bin | Bin 0 -> 61580 bytes .../grlib_demo/ewarm/Exe/grlib_demo.out | Bin 0 -> 426024 bytes boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.axf | Bin 0 -> 114964 bytes boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.bin | Bin 0 -> 65288 bytes boards/dk-tm4c129x/grlib_demo/grlib_demo.c | 1324 + boards/dk-tm4c129x/grlib_demo/grlib_demo.ewd | 614 + boards/dk-tm4c129x/grlib_demo/grlib_demo.ewp | 813 + boards/dk-tm4c129x/grlib_demo/grlib_demo.icf | 78 + boards/dk-tm4c129x/grlib_demo/grlib_demo.ld | 57 + boards/dk-tm4c129x/grlib_demo/grlib_demo.sct | 47 + boards/dk-tm4c129x/grlib_demo/grlib_demo.uvopt | 415 + boards/dk-tm4c129x/grlib_demo/grlib_demo.uvproj | 469 + boards/dk-tm4c129x/grlib_demo/grlib_demo_ccs.cmd | 70 + boards/dk-tm4c129x/grlib_demo/images.c | 1131 + boards/dk-tm4c129x/grlib_demo/images.h | 43 + boards/dk-tm4c129x/grlib_demo/readme.txt | 70 + boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.axf | Bin 0 -> 521008 bytes boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.bin | Bin 0 -> 63000 bytes boards/dk-tm4c129x/grlib_demo/startup_ccs.c | 276 + boards/dk-tm4c129x/grlib_demo/startup_ewarm.c | 307 + boards/dk-tm4c129x/grlib_demo/startup_gcc.c | 323 + boards/dk-tm4c129x/grlib_demo/startup_rvmdk.S | 332 + boards/dk-tm4c129x/grlib_driver_test/Makefile | 93 + .../grlib_driver_test/ccs/.ccsimportspec | 11 + .../dk-tm4c129x/grlib_driver_test/ccs/.ccsproject | 10 + boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject | 191 + boards/dk-tm4c129x/grlib_driver_test/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/grlib_driver_test.bin | Bin 0 -> 35328 bytes .../ccs/Debug/grlib_driver_test.out | Bin 0 -> 324736 bytes .../grlib_driver_test/ccs/macros.ini_initial | 1 + .../grlib_driver_test/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/grlib_driver_test/driver_config.h | 137 + .../ewarm/Exe/grlib_driver_test.bin | Bin 0 -> 33060 bytes .../ewarm/Exe/grlib_driver_test.out | Bin 0 -> 329664 bytes .../grlib_driver_test/gcc/grlib_driver_test.axf | Bin 0 -> 107901 bytes .../grlib_driver_test/gcc/grlib_driver_test.bin | Bin 0 -> 34084 bytes .../grlib_driver_test/grlib_driver_test.c | 2544 + .../grlib_driver_test/grlib_driver_test.ewd | 614 + .../grlib_driver_test/grlib_driver_test.ewp | 807 + .../grlib_driver_test/grlib_driver_test.icf | 78 + .../grlib_driver_test/grlib_driver_test.ld | 57 + .../grlib_driver_test/grlib_driver_test.sct | 47 + .../grlib_driver_test/grlib_driver_test.uvopt | 387 + .../grlib_driver_test/grlib_driver_test.uvproj | 459 + .../grlib_driver_test/grlib_driver_test_ccs.cmd | 70 + boards/dk-tm4c129x/grlib_driver_test/images.c | 551 + boards/dk-tm4c129x/grlib_driver_test/images.h | 41 + boards/dk-tm4c129x/grlib_driver_test/readme.txt | 117 + .../grlib_driver_test/rvmdk/grlib_driver_test.axf | Bin 0 -> 243204 bytes .../grlib_driver_test/rvmdk/grlib_driver_test.bin | Bin 0 -> 33644 bytes boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c | 275 + .../dk-tm4c129x/grlib_driver_test/startup_ewarm.c | 306 + boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c | 322 + .../dk-tm4c129x/grlib_driver_test/startup_rvmdk.S | 331 + boards/dk-tm4c129x/hello/Makefile | 89 + boards/dk-tm4c129x/hello/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/hello/ccs/.ccsproject | 10 + boards/dk-tm4c129x/hello/ccs/.cproject | 191 + boards/dk-tm4c129x/hello/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/hello/ccs/Debug/hello.bin | Bin 0 -> 30072 bytes boards/dk-tm4c129x/hello/ccs/Debug/hello.out | Bin 0 -> 200875 bytes boards/dk-tm4c129x/hello/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/hello/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/hello/ewarm/Exe/hello.bin | Bin 0 -> 27920 bytes boards/dk-tm4c129x/hello/ewarm/Exe/hello.out | Bin 0 -> 176480 bytes boards/dk-tm4c129x/hello/gcc/hello.axf | Bin 0 -> 66022 bytes boards/dk-tm4c129x/hello/gcc/hello.bin | Bin 0 -> 28344 bytes boards/dk-tm4c129x/hello/hello.c | 118 + boards/dk-tm4c129x/hello/hello.ewd | 614 + boards/dk-tm4c129x/hello/hello.ewp | 798 + boards/dk-tm4c129x/hello/hello.icf | 78 + boards/dk-tm4c129x/hello/hello.ld | 57 + boards/dk-tm4c129x/hello/hello.sct | 47 + boards/dk-tm4c129x/hello/hello.uvopt | 345 + boards/dk-tm4c129x/hello/hello.uvproj | 444 + boards/dk-tm4c129x/hello/hello_ccs.cmd | 70 + boards/dk-tm4c129x/hello/readme.txt | 27 + boards/dk-tm4c129x/hello/rvmdk/hello.axf | Bin 0 -> 191452 bytes boards/dk-tm4c129x/hello/rvmdk/hello.bin | Bin 0 -> 28560 bytes boards/dk-tm4c129x/hello/startup_ccs.c | 268 + boards/dk-tm4c129x/hello/startup_ewarm.c | 299 + boards/dk-tm4c129x/hello/startup_gcc.c | 315 + boards/dk-tm4c129x/hello/startup_rvmdk.S | 324 + boards/dk-tm4c129x/hello_widget/Makefile | 91 + boards/dk-tm4c129x/hello_widget/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/hello_widget/ccs/.ccsproject | 10 + boards/dk-tm4c129x/hello_widget/ccs/.cproject | 191 + boards/dk-tm4c129x/hello_widget/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../hello_widget/ccs/Debug/hello_widget.bin | Bin 0 -> 36144 bytes .../hello_widget/ccs/Debug/hello_widget.out | Bin 0 -> 271996 bytes .../hello_widget/ccs/macros.ini_initial | 1 + .../hello_widget/ccs/target_config.ccxml | 13 + .../hello_widget/ewarm/Exe/hello_widget.bin | Bin 0 -> 34044 bytes .../hello_widget/ewarm/Exe/hello_widget.out | Bin 0 -> 254908 bytes .../dk-tm4c129x/hello_widget/gcc/hello_widget.axf | Bin 0 -> 106093 bytes .../dk-tm4c129x/hello_widget/gcc/hello_widget.bin | Bin 0 -> 34628 bytes boards/dk-tm4c129x/hello_widget/hello_widget.c | 258 + boards/dk-tm4c129x/hello_widget/hello_widget.ewd | 614 + boards/dk-tm4c129x/hello_widget/hello_widget.ewp | 801 + boards/dk-tm4c129x/hello_widget/hello_widget.icf | 78 + boards/dk-tm4c129x/hello_widget/hello_widget.ld | 57 + boards/dk-tm4c129x/hello_widget/hello_widget.sct | 47 + boards/dk-tm4c129x/hello_widget/hello_widget.uvopt | 359 + .../dk-tm4c129x/hello_widget/hello_widget.uvproj | 449 + .../dk-tm4c129x/hello_widget/hello_widget_ccs.cmd | 70 + boards/dk-tm4c129x/hello_widget/readme.txt | 26 + .../hello_widget/rvmdk/hello_widget.axf | Bin 0 -> 271912 bytes .../hello_widget/rvmdk/hello_widget.bin | Bin 0 -> 34984 bytes boards/dk-tm4c129x/hello_widget/startup_ccs.c | 275 + boards/dk-tm4c129x/hello_widget/startup_ewarm.c | 306 + boards/dk-tm4c129x/hello_widget/startup_gcc.c | 322 + boards/dk-tm4c129x/hello_widget/startup_rvmdk.S | 331 + boards/dk-tm4c129x/hibernate/Makefile | 94 + boards/dk-tm4c129x/hibernate/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/hibernate/ccs/.ccsproject | 10 + boards/dk-tm4c129x/hibernate/ccs/.cproject | 195 + boards/dk-tm4c129x/hibernate/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/hibernate/ccs/Debug/hibernate.bin | Bin 0 -> 40856 bytes .../dk-tm4c129x/hibernate/ccs/Debug/hibernate.out | Bin 0 -> 381834 bytes .../dk-tm4c129x/hibernate/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/hibernate/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/hibernate/ewarm/Exe/hibernate.bin | Bin 0 -> 36988 bytes .../dk-tm4c129x/hibernate/ewarm/Exe/hibernate.out | Bin 0 -> 360712 bytes boards/dk-tm4c129x/hibernate/gcc/hibernate.axf | Bin 0 -> 113666 bytes boards/dk-tm4c129x/hibernate/gcc/hibernate.bin | Bin 0 -> 40360 bytes boards/dk-tm4c129x/hibernate/hibernate.c | 1568 + boards/dk-tm4c129x/hibernate/hibernate.ewd | 614 + boards/dk-tm4c129x/hibernate/hibernate.ewp | 810 + boards/dk-tm4c129x/hibernate/hibernate.icf | 78 + boards/dk-tm4c129x/hibernate/hibernate.ld | 57 + boards/dk-tm4c129x/hibernate/hibernate.sct | 47 + boards/dk-tm4c129x/hibernate/hibernate.uvopt | 387 + boards/dk-tm4c129x/hibernate/hibernate.uvproj | 459 + boards/dk-tm4c129x/hibernate/hibernate_ccs.cmd | 70 + boards/dk-tm4c129x/hibernate/readme.txt | 37 + boards/dk-tm4c129x/hibernate/rvmdk/hibernate.axf | Bin 0 -> 312416 bytes boards/dk-tm4c129x/hibernate/rvmdk/hibernate.bin | Bin 0 -> 38408 bytes boards/dk-tm4c129x/hibernate/startup_ccs.c | 275 + boards/dk-tm4c129x/hibernate/startup_ewarm.c | 306 + boards/dk-tm4c129x/hibernate/startup_gcc.c | 322 + boards/dk-tm4c129x/hibernate/startup_rvmdk.S | 331 + boards/dk-tm4c129x/interrupts/Makefile | 89 + boards/dk-tm4c129x/interrupts/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/interrupts/ccs/.ccsproject | 10 + boards/dk-tm4c129x/interrupts/ccs/.cproject | 191 + boards/dk-tm4c129x/interrupts/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../interrupts/ccs/Debug/interrupts.bin | Bin 0 -> 29320 bytes .../interrupts/ccs/Debug/interrupts.out | Bin 0 -> 212413 bytes .../dk-tm4c129x/interrupts/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/interrupts/ccs/target_config.ccxml | 13 + .../interrupts/ewarm/Exe/interrupts.bin | Bin 0 -> 26884 bytes .../interrupts/ewarm/Exe/interrupts.out | Bin 0 -> 202892 bytes boards/dk-tm4c129x/interrupts/gcc/interrupts.axf | Bin 0 -> 65962 bytes boards/dk-tm4c129x/interrupts/gcc/interrupts.bin | Bin 0 -> 27684 bytes boards/dk-tm4c129x/interrupts/interrupts.c | 593 + boards/dk-tm4c129x/interrupts/interrupts.ewd | 614 + boards/dk-tm4c129x/interrupts/interrupts.ewp | 798 + boards/dk-tm4c129x/interrupts/interrupts.icf | 78 + boards/dk-tm4c129x/interrupts/interrupts.ld | 57 + boards/dk-tm4c129x/interrupts/interrupts.sct | 47 + boards/dk-tm4c129x/interrupts/interrupts.uvopt | 345 + boards/dk-tm4c129x/interrupts/interrupts.uvproj | 444 + boards/dk-tm4c129x/interrupts/interrupts_ccs.cmd | 70 + boards/dk-tm4c129x/interrupts/readme.txt | 34 + boards/dk-tm4c129x/interrupts/rvmdk/interrupts.axf | Bin 0 -> 195528 bytes boards/dk-tm4c129x/interrupts/rvmdk/interrupts.bin | Bin 0 -> 27800 bytes boards/dk-tm4c129x/interrupts/startup_ccs.c | 277 + boards/dk-tm4c129x/interrupts/startup_ewarm.c | 308 + boards/dk-tm4c129x/interrupts/startup_gcc.c | 324 + boards/dk-tm4c129x/interrupts/startup_rvmdk.S | 333 + boards/dk-tm4c129x/lang_demo/Makefile | 102 + boards/dk-tm4c129x/lang_demo/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/lang_demo/ccs/.ccsproject | 10 + boards/dk-tm4c129x/lang_demo/ccs/.cproject | 195 + boards/dk-tm4c129x/lang_demo/ccs/.project | 110 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.bin | Bin 0 -> 61872 bytes .../dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.out | Bin 0 -> 363276 bytes .../dk-tm4c129x/lang_demo/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/lang_demo/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.bin | Bin 0 -> 59320 bytes .../dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.out | Bin 0 -> 353828 bytes boards/dk-tm4c129x/lang_demo/gcc/lang_demo.axf | Bin 0 -> 109268 bytes boards/dk-tm4c129x/lang_demo/gcc/lang_demo.bin | Bin 0 -> 60400 bytes boards/dk-tm4c129x/lang_demo/images.c | 170 + boards/dk-tm4c129x/lang_demo/images.h | 36 + boards/dk-tm4c129x/lang_demo/lang_demo.c | 852 + boards/dk-tm4c129x/lang_demo/lang_demo.ewd | 614 + boards/dk-tm4c129x/lang_demo/lang_demo.ewp | 829 + boards/dk-tm4c129x/lang_demo/lang_demo.icf | 78 + boards/dk-tm4c129x/lang_demo/lang_demo.ld | 57 + boards/dk-tm4c129x/lang_demo/lang_demo.sct | 47 + boards/dk-tm4c129x/lang_demo/lang_demo.uvopt | 471 + boards/dk-tm4c129x/lang_demo/lang_demo.uvproj | 489 + boards/dk-tm4c129x/lang_demo/lang_demo_ccs.cmd | 70 + boards/dk-tm4c129x/lang_demo/readme.txt | 56 + boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.axf | Bin 0 -> 312096 bytes boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.bin | Bin 0 -> 60528 bytes boards/dk-tm4c129x/lang_demo/startup_ccs.c | 275 + boards/dk-tm4c129x/lang_demo/startup_ewarm.c | 306 + boards/dk-tm4c129x/lang_demo/startup_gcc.c | 322 + boards/dk-tm4c129x/lang_demo/startup_rvmdk.S | 331 + boards/dk-tm4c129x/mpu_fault/Makefile | 89 + boards/dk-tm4c129x/mpu_fault/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/mpu_fault/ccs/.ccsproject | 10 + boards/dk-tm4c129x/mpu_fault/ccs/.cproject | 191 + boards/dk-tm4c129x/mpu_fault/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.bin | Bin 0 -> 28376 bytes .../dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.out | Bin 0 -> 204918 bytes .../dk-tm4c129x/mpu_fault/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/mpu_fault/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.bin | Bin 0 -> 26192 bytes .../dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.out | Bin 0 -> 184044 bytes boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.axf | Bin 0 -> 64885 bytes boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.bin | Bin 0 -> 26800 bytes boards/dk-tm4c129x/mpu_fault/mpu_fault.c | 504 + boards/dk-tm4c129x/mpu_fault/mpu_fault.ewd | 614 + boards/dk-tm4c129x/mpu_fault/mpu_fault.ewp | 798 + boards/dk-tm4c129x/mpu_fault/mpu_fault.icf | 78 + boards/dk-tm4c129x/mpu_fault/mpu_fault.ld | 57 + boards/dk-tm4c129x/mpu_fault/mpu_fault.sct | 47 + boards/dk-tm4c129x/mpu_fault/mpu_fault.uvopt | 345 + boards/dk-tm4c129x/mpu_fault/mpu_fault.uvproj | 444 + boards/dk-tm4c129x/mpu_fault/mpu_fault_ccs.cmd | 70 + boards/dk-tm4c129x/mpu_fault/readme.txt | 26 + boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.axf | Bin 0 -> 191980 bytes boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.bin | Bin 0 -> 26788 bytes boards/dk-tm4c129x/mpu_fault/startup_ccs.c | 275 + boards/dk-tm4c129x/mpu_fault/startup_ewarm.c | 306 + boards/dk-tm4c129x/mpu_fault/startup_gcc.c | 322 + boards/dk-tm4c129x/mpu_fault/startup_rvmdk.S | 331 + boards/dk-tm4c129x/qs_weather/Makefile | 106 + boards/dk-tm4c129x/qs_weather/ccs/.ccsimportspec | 16 + boards/dk-tm4c129x/qs_weather/ccs/.ccsproject | 10 + boards/dk-tm4c129x/qs_weather/ccs/.cproject | 205 + boards/dk-tm4c129x/qs_weather/ccs/.project | 110 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../qs_weather/ccs/Debug/qs_weather.bin | Bin 0 -> 155448 bytes .../qs_weather/ccs/Debug/qs_weather.out | Bin 0 -> 1042929 bytes .../dk-tm4c129x/qs_weather/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/qs_weather/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/qs_weather/debug.h | 38 + boards/dk-tm4c129x/qs_weather/eth_client.c | 1309 + boards/dk-tm4c129x/qs_weather/eth_client.h | 163 + .../qs_weather/ewarm/Exe/qs_weather.bin | Bin 0 -> 148420 bytes .../qs_weather/ewarm/Exe/qs_weather.out | Bin 0 -> 916700 bytes boards/dk-tm4c129x/qs_weather/gcc/qs_weather.axf | Bin 0 -> 235946 bytes boards/dk-tm4c129x/qs_weather/gcc/qs_weather.bin | Bin 0 -> 155872 bytes boards/dk-tm4c129x/qs_weather/images.c | 7176 +++ boards/dk-tm4c129x/qs_weather/images.h | 42 + boards/dk-tm4c129x/qs_weather/json.c | 843 + boards/dk-tm4c129x/qs_weather/json.h | 41 + boards/dk-tm4c129x/qs_weather/lwipopts.h | 444 + boards/dk-tm4c129x/qs_weather/qs_weather.c | 2896 ++ boards/dk-tm4c129x/qs_weather/qs_weather.ewd | 614 + boards/dk-tm4c129x/qs_weather/qs_weather.ewp | 838 + boards/dk-tm4c129x/qs_weather/qs_weather.icf | 78 + boards/dk-tm4c129x/qs_weather/qs_weather.ld | 57 + boards/dk-tm4c129x/qs_weather/qs_weather.sct | 47 + boards/dk-tm4c129x/qs_weather/qs_weather.uvopt | 471 + boards/dk-tm4c129x/qs_weather/qs_weather.uvproj | 489 + boards/dk-tm4c129x/qs_weather/qs_weather_ccs.cmd | 70 + boards/dk-tm4c129x/qs_weather/readme.txt | 43 + boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.axf | Bin 0 -> 829760 bytes boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.bin | Bin 0 -> 150744 bytes boards/dk-tm4c129x/qs_weather/startup_ccs.c | 277 + boards/dk-tm4c129x/qs_weather/startup_ewarm.c | 308 + boards/dk-tm4c129x/qs_weather/startup_gcc.c | 324 + boards/dk-tm4c129x/qs_weather/startup_rvmdk.S | 333 + boards/dk-tm4c129x/scribble/Makefile | 93 + boards/dk-tm4c129x/scribble/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/scribble/ccs/.ccsproject | 10 + boards/dk-tm4c129x/scribble/ccs/.cproject | 191 + boards/dk-tm4c129x/scribble/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/scribble/ccs/Debug/scribble.bin | Bin 0 -> 29880 bytes boards/dk-tm4c129x/scribble/ccs/Debug/scribble.out | Bin 0 -> 248956 bytes boards/dk-tm4c129x/scribble/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/scribble/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.bin | Bin 0 -> 27740 bytes boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.out | Bin 0 -> 224260 bytes boards/dk-tm4c129x/scribble/gcc/scribble.axf | Bin 0 -> 72669 bytes boards/dk-tm4c129x/scribble/gcc/scribble.bin | Bin 0 -> 28270 bytes boards/dk-tm4c129x/scribble/readme.txt | 28 + boards/dk-tm4c129x/scribble/rvmdk/scribble.axf | Bin 0 -> 212184 bytes boards/dk-tm4c129x/scribble/rvmdk/scribble.bin | Bin 0 -> 28436 bytes boards/dk-tm4c129x/scribble/scribble.c | 399 + boards/dk-tm4c129x/scribble/scribble.ewd | 614 + boards/dk-tm4c129x/scribble/scribble.ewp | 807 + boards/dk-tm4c129x/scribble/scribble.icf | 78 + boards/dk-tm4c129x/scribble/scribble.ld | 57 + boards/dk-tm4c129x/scribble/scribble.sct | 47 + boards/dk-tm4c129x/scribble/scribble.uvopt | 387 + boards/dk-tm4c129x/scribble/scribble.uvproj | 459 + boards/dk-tm4c129x/scribble/scribble_ccs.cmd | 70 + boards/dk-tm4c129x/scribble/startup_ccs.c | 275 + boards/dk-tm4c129x/scribble/startup_ewarm.c | 306 + boards/dk-tm4c129x/scribble/startup_gcc.c | 322 + boards/dk-tm4c129x/scribble/startup_rvmdk.S | 331 + boards/dk-tm4c129x/sd_card/Makefile | 101 + boards/dk-tm4c129x/sd_card/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/sd_card/ccs/.ccsproject | 10 + boards/dk-tm4c129x/sd_card/ccs/.cproject | 188 + boards/dk-tm4c129x/sd_card/ccs/.project | 100 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.bin | Bin 0 -> 78656 bytes boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.out | Bin 0 -> 543690 bytes boards/dk-tm4c129x/sd_card/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/sd_card/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.bin | Bin 0 -> 75968 bytes boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.out | Bin 0 -> 489660 bytes boards/dk-tm4c129x/sd_card/gcc/sd_card.axf | Bin 0 -> 147246 bytes boards/dk-tm4c129x/sd_card/gcc/sd_card.bin | Bin 0 -> 78236 bytes boards/dk-tm4c129x/sd_card/readme.txt | 35 + boards/dk-tm4c129x/sd_card/rvmdk/sd_card.axf | Bin 0 -> 431996 bytes boards/dk-tm4c129x/sd_card/rvmdk/sd_card.bin | Bin 0 -> 76240 bytes boards/dk-tm4c129x/sd_card/sd_card.c | 1579 + boards/dk-tm4c129x/sd_card/sd_card.ewd | 614 + boards/dk-tm4c129x/sd_card/sd_card.ewp | 823 + boards/dk-tm4c129x/sd_card/sd_card.icf | 78 + boards/dk-tm4c129x/sd_card/sd_card.ld | 57 + boards/dk-tm4c129x/sd_card/sd_card.sct | 47 + boards/dk-tm4c129x/sd_card/sd_card.uvopt | 443 + boards/dk-tm4c129x/sd_card/sd_card.uvproj | 479 + boards/dk-tm4c129x/sd_card/sd_card_ccs.cmd | 70 + boards/dk-tm4c129x/sd_card/startup_ccs.c | 277 + boards/dk-tm4c129x/sd_card/startup_ewarm.c | 308 + boards/dk-tm4c129x/sd_card/startup_gcc.c | 324 + boards/dk-tm4c129x/sd_card/startup_rvmdk.S | 333 + boards/dk-tm4c129x/sha1_hash/Makefile | 91 + boards/dk-tm4c129x/sha1_hash/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/sha1_hash/ccs/.ccsproject | 10 + boards/dk-tm4c129x/sha1_hash/ccs/.cproject | 182 + boards/dk-tm4c129x/sha1_hash/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.bin | Bin 0 -> 31888 bytes .../dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.out | Bin 0 -> 238054 bytes .../dk-tm4c129x/sha1_hash/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/sha1_hash/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.bin | Bin 0 -> 29448 bytes .../dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.out | Bin 0 -> 207584 bytes boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.axf | Bin 0 -> 72738 bytes boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.bin | Bin 0 -> 30040 bytes boards/dk-tm4c129x/sha1_hash/readme.txt | 26 + boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.axf | Bin 0 -> 217912 bytes boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.bin | Bin 0 -> 30128 bytes boards/dk-tm4c129x/sha1_hash/sha1_hash.c | 670 + boards/dk-tm4c129x/sha1_hash/sha1_hash.ewd | 614 + boards/dk-tm4c129x/sha1_hash/sha1_hash.ewp | 801 + boards/dk-tm4c129x/sha1_hash/sha1_hash.icf | 78 + boards/dk-tm4c129x/sha1_hash/sha1_hash.ld | 57 + boards/dk-tm4c129x/sha1_hash/sha1_hash.sct | 47 + boards/dk-tm4c129x/sha1_hash/sha1_hash.uvopt | 359 + boards/dk-tm4c129x/sha1_hash/sha1_hash.uvproj | 449 + boards/dk-tm4c129x/sha1_hash/sha1_hash_ccs.cmd | 70 + boards/dk-tm4c129x/sha1_hash/startup_ccs.c | 275 + boards/dk-tm4c129x/sha1_hash/startup_ewarm.c | 306 + boards/dk-tm4c129x/sha1_hash/startup_gcc.c | 322 + boards/dk-tm4c129x/sha1_hash/startup_rvmdk.S | 331 + boards/dk-tm4c129x/sha1_hmac/Makefile | 91 + boards/dk-tm4c129x/sha1_hmac/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/sha1_hmac/ccs/.ccsproject | 10 + boards/dk-tm4c129x/sha1_hmac/ccs/.cproject | 182 + boards/dk-tm4c129x/sha1_hmac/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.bin | Bin 0 -> 32192 bytes .../dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.out | Bin 0 -> 239750 bytes .../dk-tm4c129x/sha1_hmac/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/sha1_hmac/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.bin | Bin 0 -> 29728 bytes .../dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.out | Bin 0 -> 210392 bytes boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.axf | Bin 0 -> 72885 bytes boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.bin | Bin 0 -> 30336 bytes boards/dk-tm4c129x/sha1_hmac/readme.txt | 23 + boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.axf | Bin 0 -> 218572 bytes boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.bin | Bin 0 -> 30464 bytes boards/dk-tm4c129x/sha1_hmac/sha1_hmac.c | 733 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewd | 614 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewp | 801 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.icf | 78 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ld | 57 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.sct | 47 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvopt | 359 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvproj | 449 + boards/dk-tm4c129x/sha1_hmac/sha1_hmac_ccs.cmd | 70 + boards/dk-tm4c129x/sha1_hmac/startup_ccs.c | 275 + boards/dk-tm4c129x/sha1_hmac/startup_ewarm.c | 306 + boards/dk-tm4c129x/sha1_hmac/startup_gcc.c | 322 + boards/dk-tm4c129x/sha1_hmac/startup_rvmdk.S | 331 + boards/dk-tm4c129x/synth/Makefile | 93 + boards/dk-tm4c129x/synth/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/synth/ccs/.ccsproject | 10 + boards/dk-tm4c129x/synth/ccs/.cproject | 182 + boards/dk-tm4c129x/synth/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/synth/ccs/Debug/synth.bin | Bin 0 -> 29568 bytes boards/dk-tm4c129x/synth/ccs/Debug/synth.out | Bin 0 -> 251640 bytes boards/dk-tm4c129x/synth/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/synth/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/synth/ewarm/Exe/synth.bin | Bin 0 -> 27372 bytes boards/dk-tm4c129x/synth/ewarm/Exe/synth.out | Bin 0 -> 235708 bytes boards/dk-tm4c129x/synth/gcc/synth.axf | Bin 0 -> 72720 bytes boards/dk-tm4c129x/synth/gcc/synth.bin | Bin 0 -> 27990 bytes boards/dk-tm4c129x/synth/readme.txt | 25 + boards/dk-tm4c129x/synth/rvmdk/synth.axf | Bin 0 -> 188412 bytes boards/dk-tm4c129x/synth/rvmdk/synth.bin | Bin 0 -> 28140 bytes boards/dk-tm4c129x/synth/startup_ccs.c | 276 + boards/dk-tm4c129x/synth/startup_ewarm.c | 307 + boards/dk-tm4c129x/synth/startup_gcc.c | 323 + boards/dk-tm4c129x/synth/startup_rvmdk.S | 332 + boards/dk-tm4c129x/synth/synth.c | 1438 + boards/dk-tm4c129x/synth/synth.ewd | 614 + boards/dk-tm4c129x/synth/synth.ewp | 807 + boards/dk-tm4c129x/synth/synth.icf | 78 + boards/dk-tm4c129x/synth/synth.ld | 57 + boards/dk-tm4c129x/synth/synth.sct | 47 + boards/dk-tm4c129x/synth/synth.uvopt | 387 + boards/dk-tm4c129x/synth/synth.uvproj | 459 + boards/dk-tm4c129x/synth/synth_ccs.cmd | 70 + boards/dk-tm4c129x/tamper/Makefile | 92 + boards/dk-tm4c129x/tamper/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/tamper/ccs/.ccsproject | 10 + boards/dk-tm4c129x/tamper/ccs/.cproject | 182 + boards/dk-tm4c129x/tamper/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/tamper/ccs/Debug/tamper.bin | Bin 0 -> 46656 bytes boards/dk-tm4c129x/tamper/ccs/Debug/tamper.out | Bin 0 -> 423563 bytes boards/dk-tm4c129x/tamper/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/tamper/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.bin | Bin 0 -> 42512 bytes boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.out | Bin 0 -> 399472 bytes boards/dk-tm4c129x/tamper/gcc/tamper.axf | Bin 0 -> 115519 bytes boards/dk-tm4c129x/tamper/gcc/tamper.bin | Bin 0 -> 46356 bytes boards/dk-tm4c129x/tamper/readme.txt | 46 + boards/dk-tm4c129x/tamper/rvmdk/tamper.axf | Bin 0 -> 390392 bytes boards/dk-tm4c129x/tamper/rvmdk/tamper.bin | Bin 0 -> 44444 bytes boards/dk-tm4c129x/tamper/startup_ccs.c | 258 + boards/dk-tm4c129x/tamper/startup_ewarm.c | 289 + boards/dk-tm4c129x/tamper/startup_gcc.c | 305 + boards/dk-tm4c129x/tamper/startup_rvmdk.S | 323 + boards/dk-tm4c129x/tamper/tamper.c | 2052 + boards/dk-tm4c129x/tamper/tamper.ewd | 614 + boards/dk-tm4c129x/tamper/tamper.ewp | 804 + boards/dk-tm4c129x/tamper/tamper.icf | 78 + boards/dk-tm4c129x/tamper/tamper.ld | 57 + boards/dk-tm4c129x/tamper/tamper.sct | 47 + boards/dk-tm4c129x/tamper/tamper.uvopt | 373 + boards/dk-tm4c129x/tamper/tamper.uvproj | 454 + boards/dk-tm4c129x/tamper/tamper_ccs.cmd | 70 + boards/dk-tm4c129x/tdes_cbc_decrypt/Makefile | 91 + .../tdes_cbc_decrypt/ccs/.ccsimportspec | 8 + .../dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.cproject | 182 + boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/tdes_cbc_decrypt.bin | Bin 0 -> 30944 bytes .../ccs/Debug/tdes_cbc_decrypt.out | Bin 0 -> 237780 bytes .../tdes_cbc_decrypt/ccs/macros.ini_initial | 1 + .../tdes_cbc_decrypt/ccs/target_config.ccxml | 13 + .../ewarm/Exe/tdes_cbc_decrypt.bin | Bin 0 -> 28552 bytes .../ewarm/Exe/tdes_cbc_decrypt.out | Bin 0 -> 209308 bytes .../tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.axf | Bin 0 -> 71950 bytes .../tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.bin | Bin 0 -> 29100 bytes boards/dk-tm4c129x/tdes_cbc_decrypt/readme.txt | 31 + .../tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.axf | Bin 0 -> 217528 bytes .../tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.bin | Bin 0 -> 29096 bytes boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ccs.c | 275 + .../dk-tm4c129x/tdes_cbc_decrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/tdes_cbc_decrypt/startup_gcc.c | 322 + .../dk-tm4c129x/tdes_cbc_decrypt/startup_rvmdk.S | 331 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.c | 657 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.ewd | 614 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.ewp | 801 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.icf | 78 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.ld | 57 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.sct | 47 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.uvopt | 359 + .../tdes_cbc_decrypt/tdes_cbc_decrypt.uvproj | 449 + .../tdes_cbc_decrypt/tdes_cbc_decrypt_ccs.cmd | 70 + boards/dk-tm4c129x/tdes_cbc_encrypt/Makefile | 91 + .../tdes_cbc_encrypt/ccs/.ccsimportspec | 8 + .../dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsproject | 10 + boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.cproject | 182 + boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.project | 70 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/tdes_cbc_encrypt.bin | Bin 0 -> 30944 bytes .../ccs/Debug/tdes_cbc_encrypt.out | Bin 0 -> 237780 bytes .../tdes_cbc_encrypt/ccs/macros.ini_initial | 1 + .../tdes_cbc_encrypt/ccs/target_config.ccxml | 13 + .../ewarm/Exe/tdes_cbc_encrypt.bin | Bin 0 -> 28556 bytes .../ewarm/Exe/tdes_cbc_encrypt.out | Bin 0 -> 209372 bytes .../tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.axf | Bin 0 -> 71950 bytes .../tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.bin | Bin 0 -> 29100 bytes boards/dk-tm4c129x/tdes_cbc_encrypt/readme.txt | 31 + .../tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.axf | Bin 0 -> 217528 bytes .../tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.bin | Bin 0 -> 29096 bytes boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ccs.c | 275 + .../dk-tm4c129x/tdes_cbc_encrypt/startup_ewarm.c | 306 + boards/dk-tm4c129x/tdes_cbc_encrypt/startup_gcc.c | 322 + .../dk-tm4c129x/tdes_cbc_encrypt/startup_rvmdk.S | 331 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.c | 657 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.ewd | 614 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.ewp | 801 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.icf | 78 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.ld | 57 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.sct | 47 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.uvopt | 359 + .../tdes_cbc_encrypt/tdes_cbc_encrypt.uvproj | 449 + .../tdes_cbc_encrypt/tdes_cbc_encrypt_ccs.cmd | 70 + boards/dk-tm4c129x/timers/Makefile | 89 + boards/dk-tm4c129x/timers/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/timers/ccs/.ccsproject | 10 + boards/dk-tm4c129x/timers/ccs/.cproject | 182 + boards/dk-tm4c129x/timers/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/timers/ccs/Debug/timers.bin | Bin 0 -> 25352 bytes boards/dk-tm4c129x/timers/ccs/Debug/timers.out | Bin 0 -> 197286 bytes boards/dk-tm4c129x/timers/ccs/macros.ini_initial | 1 + boards/dk-tm4c129x/timers/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/timers/ewarm/Exe/timers.bin | Bin 0 -> 23164 bytes boards/dk-tm4c129x/timers/ewarm/Exe/timers.out | Bin 0 -> 174548 bytes boards/dk-tm4c129x/timers/gcc/timers.axf | Bin 0 -> 61466 bytes boards/dk-tm4c129x/timers/gcc/timers.bin | Bin 0 -> 23688 bytes boards/dk-tm4c129x/timers/readme.txt | 26 + boards/dk-tm4c129x/timers/rvmdk/timers.axf | Bin 0 -> 161692 bytes boards/dk-tm4c129x/timers/rvmdk/timers.bin | Bin 0 -> 23852 bytes boards/dk-tm4c129x/timers/startup_ccs.c | 276 + boards/dk-tm4c129x/timers/startup_ewarm.c | 307 + boards/dk-tm4c129x/timers/startup_gcc.c | 323 + boards/dk-tm4c129x/timers/startup_rvmdk.S | 332 + boards/dk-tm4c129x/timers/timers.c | 216 + boards/dk-tm4c129x/timers/timers.ewd | 614 + boards/dk-tm4c129x/timers/timers.ewp | 798 + boards/dk-tm4c129x/timers/timers.icf | 78 + boards/dk-tm4c129x/timers/timers.ld | 57 + boards/dk-tm4c129x/timers/timers.sct | 47 + boards/dk-tm4c129x/timers/timers.uvopt | 345 + boards/dk-tm4c129x/timers/timers.uvproj | 444 + boards/dk-tm4c129x/timers/timers_ccs.cmd | 70 + boards/dk-tm4c129x/uart_echo/Makefile | 89 + boards/dk-tm4c129x/uart_echo/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/uart_echo/ccs/.ccsproject | 10 + boards/dk-tm4c129x/uart_echo/ccs/.cproject | 182 + boards/dk-tm4c129x/uart_echo/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.bin | Bin 0 -> 25448 bytes .../dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.out | Bin 0 -> 203028 bytes .../dk-tm4c129x/uart_echo/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/uart_echo/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.bin | Bin 0 -> 23284 bytes .../dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.out | Bin 0 -> 184500 bytes boards/dk-tm4c129x/uart_echo/gcc/uart_echo.axf | Bin 0 -> 61653 bytes boards/dk-tm4c129x/uart_echo/gcc/uart_echo.bin | Bin 0 -> 23752 bytes boards/dk-tm4c129x/uart_echo/readme.txt | 26 + boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.axf | Bin 0 -> 163968 bytes boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.bin | Bin 0 -> 23936 bytes boards/dk-tm4c129x/uart_echo/startup_ccs.c | 275 + boards/dk-tm4c129x/uart_echo/startup_ewarm.c | 306 + boards/dk-tm4c129x/uart_echo/startup_gcc.c | 322 + boards/dk-tm4c129x/uart_echo/startup_rvmdk.S | 331 + boards/dk-tm4c129x/uart_echo/uart_echo.c | 207 + boards/dk-tm4c129x/uart_echo/uart_echo.ewd | 614 + boards/dk-tm4c129x/uart_echo/uart_echo.ewp | 798 + boards/dk-tm4c129x/uart_echo/uart_echo.icf | 78 + boards/dk-tm4c129x/uart_echo/uart_echo.ld | 57 + boards/dk-tm4c129x/uart_echo/uart_echo.sct | 47 + boards/dk-tm4c129x/uart_echo/uart_echo.uvopt | 345 + boards/dk-tm4c129x/uart_echo/uart_echo.uvproj | 444 + boards/dk-tm4c129x/uart_echo/uart_echo_ccs.cmd | 70 + boards/dk-tm4c129x/udma_demo/Makefile | 92 + boards/dk-tm4c129x/udma_demo/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/udma_demo/ccs/.ccsproject | 10 + boards/dk-tm4c129x/udma_demo/ccs/.cproject | 182 + boards/dk-tm4c129x/udma_demo/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.bin | Bin 0 -> 29592 bytes .../dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.out | Bin 0 -> 237618 bytes .../dk-tm4c129x/udma_demo/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/udma_demo/ccs/target_config.ccxml | 13 + .../dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.bin | Bin 0 -> 27048 bytes .../dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.out | Bin 0 -> 213484 bytes boards/dk-tm4c129x/udma_demo/gcc/udma_demo.axf | Bin 0 -> 67580 bytes boards/dk-tm4c129x/udma_demo/gcc/udma_demo.bin | Bin 0 -> 27904 bytes boards/dk-tm4c129x/udma_demo/readme.txt | 25 + boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.axf | Bin 0 -> 204424 bytes boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.bin | Bin 0 -> 27984 bytes boards/dk-tm4c129x/udma_demo/startup_ccs.c | 278 + boards/dk-tm4c129x/udma_demo/startup_ewarm.c | 309 + boards/dk-tm4c129x/udma_demo/startup_gcc.c | 325 + boards/dk-tm4c129x/udma_demo/startup_rvmdk.S | 334 + boards/dk-tm4c129x/udma_demo/udma_demo.c | 924 + boards/dk-tm4c129x/udma_demo/udma_demo.ewd | 614 + boards/dk-tm4c129x/udma_demo/udma_demo.ewp | 804 + boards/dk-tm4c129x/udma_demo/udma_demo.icf | 78 + boards/dk-tm4c129x/udma_demo/udma_demo.ld | 57 + boards/dk-tm4c129x/udma_demo/udma_demo.sct | 47 + boards/dk-tm4c129x/udma_demo/udma_demo.uvopt | 373 + boards/dk-tm4c129x/udma_demo/udma_demo.uvproj | 454 + boards/dk-tm4c129x/udma_demo/udma_demo_ccs.cmd | 70 + boards/dk-tm4c129x/usb_dev_bulk/Makefile | 94 + boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_dev_bulk/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_dev_bulk/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_dev_bulk/ccs/Debug/usb_dev_bulk.bin | Bin 0 -> 37952 bytes .../usb_dev_bulk/ccs/Debug/usb_dev_bulk.out | Bin 0 -> 595180 bytes .../usb_dev_bulk/ccs/macros.ini_initial | 1 + .../usb_dev_bulk/ccs/target_config.ccxml | 13 + .../usb_dev_bulk/ewarm/Exe/usb_dev_bulk.bin | Bin 0 -> 35132 bytes .../usb_dev_bulk/ewarm/Exe/usb_dev_bulk.out | Bin 0 -> 460652 bytes .../dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.axf | Bin 0 -> 116580 bytes .../dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.bin | Bin 0 -> 36297 bytes boards/dk-tm4c129x/usb_dev_bulk/readme.txt | 43 + .../usb_dev_bulk/rvmdk/usb_dev_bulk.axf | Bin 0 -> 378700 bytes .../usb_dev_bulk/rvmdk/usb_dev_bulk.bin | Bin 0 -> 37420 bytes boards/dk-tm4c129x/usb_dev_bulk/startup_ccs.c | 277 + boards/dk-tm4c129x/usb_dev_bulk/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_dev_bulk/startup_gcc.c | 324 + boards/dk-tm4c129x/usb_dev_bulk/startup_rvmdk.S | 333 + boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.c | 199 + boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.h | 48 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.c | 655 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewd | 614 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewp | 811 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.icf | 78 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ld | 57 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.sct | 47 + boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvopt | 401 + .../dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvproj | 464 + .../dk-tm4c129x/usb_dev_bulk/usb_dev_bulk_ccs.cmd | 70 + boards/dk-tm4c129x/usb_dev_chid/Makefile | 96 + boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsimportspec | 14 + boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_dev_chid/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_dev_chid/ccs/.project | 90 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_dev_chid/ccs/Debug/usb_dev_chid.bin | Bin 0 -> 49992 bytes .../usb_dev_chid/ccs/Debug/usb_dev_chid.out | Bin 0 -> 778282 bytes .../usb_dev_chid/ccs/macros.ini_initial | 1 + .../usb_dev_chid/ccs/target_config.ccxml | 13 + .../usb_dev_chid/ewarm/Exe/usb_dev_chid.bin | Bin 0 -> 47140 bytes .../usb_dev_chid/ewarm/Exe/usb_dev_chid.out | Bin 0 -> 608788 bytes .../dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.axf | Bin 0 -> 122868 bytes .../dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.bin | Bin 0 -> 49108 bytes boards/dk-tm4c129x/usb_dev_chid/readme.txt | 31 + .../usb_dev_chid/rvmdk/usb_dev_chid.axf | Bin 0 -> 541068 bytes .../usb_dev_chid/rvmdk/usb_dev_chid.bin | Bin 0 -> 50256 bytes boards/dk-tm4c129x/usb_dev_chid/startup_ccs.c | 277 + boards/dk-tm4c129x/usb_dev_chid/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_dev_chid/startup_gcc.c | 324 + boards/dk-tm4c129x/usb_dev_chid/startup_rvmdk.S | 333 + boards/dk-tm4c129x/usb_dev_chid/ui.c | 718 + boards/dk-tm4c129x/usb_dev_chid/ui.h | 85 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.c | 209 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewd | 614 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewp | 817 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.icf | 78 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ld | 57 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.sct | 47 + boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvopt | 429 + .../dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvproj | 474 + .../dk-tm4c129x/usb_dev_chid/usb_dev_chid_ccs.cmd | 70 + boards/dk-tm4c129x/usb_dev_chid/usb_keyboard.c | 314 + boards/dk-tm4c129x/usb_dev_chid/usb_mouse.c | 323 + boards/dk-tm4c129x/usb_dev_chid/usb_structs.c | 255 + boards/dk-tm4c129x/usb_dev_chid/usb_structs.h | 118 + boards/dk-tm4c129x/usb_dev_gamepad/Makefile | 94 + .../dk-tm4c129x/usb_dev_gamepad/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_dev_gamepad/ccs/.cproject | 184 + boards/dk-tm4c129x/usb_dev_gamepad/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.bin | Bin 0 -> 38208 bytes .../usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.out | Bin 0 -> 582860 bytes .../usb_dev_gamepad/ccs/macros.ini_initial | 1 + .../usb_dev_gamepad/ccs/target_config.ccxml | 13 + .../usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.bin | Bin 0 -> 35572 bytes .../usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.out | Bin 0 -> 448820 bytes .../usb_dev_gamepad/gcc/usb_dev_gamepad.axf | Bin 0 -> 116423 bytes .../usb_dev_gamepad/gcc/usb_dev_gamepad.bin | Bin 0 -> 36850 bytes boards/dk-tm4c129x/usb_dev_gamepad/readme.txt | 28 + .../usb_dev_gamepad/rvmdk/usb_dev_gamepad.axf | Bin 0 -> 413428 bytes .../usb_dev_gamepad/rvmdk/usb_dev_gamepad.bin | Bin 0 -> 37828 bytes boards/dk-tm4c129x/usb_dev_gamepad/startup_ccs.c | 276 + boards/dk-tm4c129x/usb_dev_gamepad/startup_ewarm.c | 307 + boards/dk-tm4c129x/usb_dev_gamepad/startup_gcc.c | 323 + boards/dk-tm4c129x/usb_dev_gamepad/startup_rvmdk.S | 332 + .../dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.c | 507 + .../usb_dev_gamepad/usb_dev_gamepad.ewd | 614 + .../usb_dev_gamepad/usb_dev_gamepad.ewp | 810 + .../usb_dev_gamepad/usb_dev_gamepad.icf | 78 + .../dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ld | 57 + .../usb_dev_gamepad/usb_dev_gamepad.sct | 47 + .../usb_dev_gamepad/usb_dev_gamepad.uvopt | 401 + .../usb_dev_gamepad/usb_dev_gamepad.uvproj | 464 + .../usb_dev_gamepad/usb_dev_gamepad_ccs.cmd | 70 + .../usb_dev_gamepad/usb_gamepad_structs.c | 221 + .../usb_dev_gamepad/usb_gamepad_structs.h | 56 + boards/dk-tm4c129x/usb_dev_keyboard/Makefile | 94 + .../usb_dev_keyboard/ccs/.ccsimportspec | 10 + .../dk-tm4c129x/usb_dev_keyboard/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_dev_keyboard/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_dev_keyboard/ccs/.project | 80 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/usb_dev_keyboard.bin | Bin 0 -> 45384 bytes .../ccs/Debug/usb_dev_keyboard.out | Bin 0 -> 645461 bytes .../usb_dev_keyboard/ccs/macros.ini_initial | 1 + .../usb_dev_keyboard/ccs/target_config.ccxml | 13 + .../ewarm/Exe/usb_dev_keyboard.bin | Bin 0 -> 42044 bytes .../ewarm/Exe/usb_dev_keyboard.out | Bin 0 -> 523612 bytes .../usb_dev_keyboard/gcc/usb_dev_keyboard.axf | Bin 0 -> 119651 bytes .../usb_dev_keyboard/gcc/usb_dev_keyboard.bin | Bin 0 -> 43742 bytes boards/dk-tm4c129x/usb_dev_keyboard/readme.txt | 36 + .../usb_dev_keyboard/rvmdk/usb_dev_keyboard.axf | Bin 0 -> 469020 bytes .../usb_dev_keyboard/rvmdk/usb_dev_keyboard.bin | Bin 0 -> 44644 bytes boards/dk-tm4c129x/usb_dev_keyboard/startup_ccs.c | 278 + .../dk-tm4c129x/usb_dev_keyboard/startup_ewarm.c | 309 + boards/dk-tm4c129x/usb_dev_keyboard/startup_gcc.c | 325 + .../dk-tm4c129x/usb_dev_keyboard/startup_rvmdk.S | 334 + .../usb_dev_keyboard/usb_dev_keyboard.c | 2355 + .../usb_dev_keyboard/usb_dev_keyboard.ewd | 614 + .../usb_dev_keyboard/usb_dev_keyboard.ewp | 811 + .../usb_dev_keyboard/usb_dev_keyboard.icf | 78 + .../usb_dev_keyboard/usb_dev_keyboard.ld | 57 + .../usb_dev_keyboard/usb_dev_keyboard.sct | 47 + .../usb_dev_keyboard/usb_dev_keyboard.uvopt | 401 + .../usb_dev_keyboard/usb_dev_keyboard.uvproj | 464 + .../usb_dev_keyboard/usb_dev_keyboard_ccs.cmd | 70 + .../usb_dev_keyboard/usb_keyb_structs.c | 148 + .../usb_dev_keyboard/usb_keyb_structs.h | 35 + boards/dk-tm4c129x/usb_dev_msc/Makefile | 98 + boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsimportspec | 12 + boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_dev_msc/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_dev_msc/ccs/.project | 90 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_dev_msc/ccs/Debug/usb_dev_msc.bin | Bin 0 -> 40104 bytes .../usb_dev_msc/ccs/Debug/usb_dev_msc.out | Bin 0 -> 588142 bytes .../dk-tm4c129x/usb_dev_msc/ccs/macros.ini_initial | 1 + .../usb_dev_msc/ccs/target_config.ccxml | 13 + .../usb_dev_msc/ewarm/Exe/usb_dev_msc.bin | Bin 0 -> 37220 bytes .../usb_dev_msc/ewarm/Exe/usb_dev_msc.out | Bin 0 -> 474908 bytes boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.axf | Bin 0 -> 120103 bytes boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.bin | Bin 0 -> 42436 bytes boards/dk-tm4c129x/usb_dev_msc/readme.txt | 27 + .../dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.axf | Bin 0 -> 382452 bytes .../dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.bin | Bin 0 -> 39268 bytes boards/dk-tm4c129x/usb_dev_msc/startup_ccs.c | 276 + boards/dk-tm4c129x/usb_dev_msc/startup_ewarm.c | 307 + boards/dk-tm4c129x/usb_dev_msc/startup_gcc.c | 323 + boards/dk-tm4c129x/usb_dev_msc/startup_rvmdk.S | 332 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.c | 616 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewd | 614 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewp | 818 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.icf | 78 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ld | 57 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.sct | 47 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvopt | 429 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvproj | 474 + boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc_ccs.cmd | 70 + boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.c | 184 + boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.h | 46 + boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.c | 259 + boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.h | 47 + boards/dk-tm4c129x/usb_dev_serial/Makefile | 93 + .../dk-tm4c129x/usb_dev_serial/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_dev_serial/ccs/.cproject | 184 + boards/dk-tm4c129x/usb_dev_serial/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_dev_serial/ccs/Debug/usb_dev_serial.bin | Bin 0 -> 42776 bytes .../usb_dev_serial/ccs/Debug/usb_dev_serial.out | Bin 0 -> 637462 bytes .../usb_dev_serial/ccs/macros.ini_initial | 1 + .../usb_dev_serial/ccs/target_config.ccxml | 13 + .../usb_dev_serial/ewarm/Exe/usb_dev_serial.bin | Bin 0 -> 39928 bytes .../usb_dev_serial/ewarm/Exe/usb_dev_serial.out | Bin 0 -> 504184 bytes .../usb_dev_serial/gcc/usb_dev_serial.axf | Bin 0 -> 118054 bytes .../usb_dev_serial/gcc/usb_dev_serial.bin | Bin 0 -> 41305 bytes boards/dk-tm4c129x/usb_dev_serial/readme.txt | 39 + .../usb_dev_serial/rvmdk/usb_dev_serial.axf | Bin 0 -> 458828 bytes .../usb_dev_serial/rvmdk/usb_dev_serial.bin | Bin 0 -> 42652 bytes boards/dk-tm4c129x/usb_dev_serial/startup_ccs.c | 277 + boards/dk-tm4c129x/usb_dev_serial/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_dev_serial/startup_gcc.c | 324 + boards/dk-tm4c129x/usb_dev_serial/startup_rvmdk.S | 333 + boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.c | 1455 + .../dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewd | 614 + .../dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewp | 807 + .../dk-tm4c129x/usb_dev_serial/usb_dev_serial.icf | 78 + .../dk-tm4c129x/usb_dev_serial/usb_dev_serial.ld | 57 + .../dk-tm4c129x/usb_dev_serial/usb_dev_serial.sct | 47 + .../usb_dev_serial/usb_dev_serial.uvopt | 387 + .../usb_dev_serial/usb_dev_serial.uvproj | 459 + .../usb_dev_serial/usb_dev_serial_ccs.cmd | 70 + .../usb_dev_serial/usb_serial_structs.c | 217 + .../usb_dev_serial/usb_serial_structs.h | 49 + boards/dk-tm4c129x/usb_host_audio/Makefile | 102 + .../dk-tm4c129x/usb_host_audio/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/usb_host_audio/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_host_audio/ccs/.cproject | 188 + boards/dk-tm4c129x/usb_host_audio/ccs/.project | 100 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_host_audio/ccs/Debug/usb_host_audio.bin | Bin 0 -> 61104 bytes .../usb_host_audio/ccs/Debug/usb_host_audio.out | Bin 0 -> 916299 bytes .../usb_host_audio/ccs/macros.ini_initial | 1 + .../usb_host_audio/ccs/target_config.ccxml | 13 + .../usb_host_audio/ewarm/Exe/usb_host_audio.bin | Bin 0 -> 57192 bytes .../usb_host_audio/ewarm/Exe/usb_host_audio.out | Bin 0 -> 771388 bytes .../usb_host_audio/gcc/usb_host_audio.axf | Bin 0 -> 127387 bytes .../usb_host_audio/gcc/usb_host_audio.bin | Bin 0 -> 61008 bytes boards/dk-tm4c129x/usb_host_audio/readme.txt | 38 + .../usb_host_audio/rvmdk/usb_host_audio.axf | Bin 0 -> 623608 bytes .../usb_host_audio/rvmdk/usb_host_audio.bin | Bin 0 -> 60720 bytes boards/dk-tm4c129x/usb_host_audio/startup_ccs.c | 277 + boards/dk-tm4c129x/usb_host_audio/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_host_audio/startup_gcc.c | 324 + boards/dk-tm4c129x/usb_host_audio/startup_rvmdk.S | 333 + boards/dk-tm4c129x/usb_host_audio/usb_host_audio.c | 1554 + .../dk-tm4c129x/usb_host_audio/usb_host_audio.ewd | 614 + .../dk-tm4c129x/usb_host_audio/usb_host_audio.ewp | 826 + .../dk-tm4c129x/usb_host_audio/usb_host_audio.icf | 78 + .../dk-tm4c129x/usb_host_audio/usb_host_audio.ld | 57 + .../dk-tm4c129x/usb_host_audio/usb_host_audio.sct | 47 + .../usb_host_audio/usb_host_audio.uvopt | 457 + .../usb_host_audio/usb_host_audio.uvproj | 484 + .../usb_host_audio/usb_host_audio_ccs.cmd | 70 + boards/dk-tm4c129x/usb_host_audio_in/Makefile | 95 + .../usb_host_audio_in/ccs/.ccsimportspec | 8 + .../dk-tm4c129x/usb_host_audio_in/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_host_audio_in/ccs/.cproject | 184 + boards/dk-tm4c129x/usb_host_audio_in/ccs/.project | 85 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/usb_host_audio_in.bin | Bin 0 -> 49936 bytes .../ccs/Debug/usb_host_audio_in.out | Bin 0 -> 766712 bytes .../usb_host_audio_in/ccs/macros.ini_initial | 1 + .../usb_host_audio_in/ccs/target_config.ccxml | 13 + .../ewarm/Exe/usb_host_audio_in.bin | Bin 0 -> 46464 bytes .../ewarm/Exe/usb_host_audio_in.out | Bin 0 -> 623540 bytes .../usb_host_audio_in/gcc/usb_host_audio_in.axf | Bin 0 -> 121720 bytes .../usb_host_audio_in/gcc/usb_host_audio_in.bin | Bin 0 -> 49100 bytes boards/dk-tm4c129x/usb_host_audio_in/readme.txt | 35 + .../usb_host_audio_in/rvmdk/usb_host_audio_in.axf | Bin 0 -> 494272 bytes .../usb_host_audio_in/rvmdk/usb_host_audio_in.bin | Bin 0 -> 50476 bytes boards/dk-tm4c129x/usb_host_audio_in/startup_ccs.c | 277 + .../dk-tm4c129x/usb_host_audio_in/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_host_audio_in/startup_gcc.c | 324 + .../dk-tm4c129x/usb_host_audio_in/startup_rvmdk.S | 333 + .../usb_host_audio_in/usb_host_audio_in.c | 791 + .../usb_host_audio_in/usb_host_audio_in.ewd | 614 + .../usb_host_audio_in/usb_host_audio_in.ewp | 813 + .../usb_host_audio_in/usb_host_audio_in.icf | 78 + .../usb_host_audio_in/usb_host_audio_in.ld | 57 + .../usb_host_audio_in/usb_host_audio_in.sct | 47 + .../usb_host_audio_in/usb_host_audio_in.uvopt | 415 + .../usb_host_audio_in/usb_host_audio_in.uvproj | 469 + .../usb_host_audio_in/usb_host_audio_in_ccs.cmd | 70 + boards/dk-tm4c129x/usb_host_hub/Makefile | 100 + boards/dk-tm4c129x/usb_host_hub/ccs/.ccsimportspec | 11 + boards/dk-tm4c129x/usb_host_hub/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_host_hub/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_host_hub/ccs/.project | 95 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_host_hub/ccs/Debug/usb_host_hub.bin | Bin 0 -> 55856 bytes .../usb_host_hub/ccs/Debug/usb_host_hub.out | Bin 0 -> 898461 bytes .../usb_host_hub/ccs/macros.ini_initial | 1 + .../usb_host_hub/ccs/target_config.ccxml | 13 + .../usb_host_hub/ewarm/Exe/usb_host_hub.bin | Bin 0 -> 52220 bytes .../usb_host_hub/ewarm/Exe/usb_host_hub.out | Bin 0 -> 710124 bytes .../dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.axf | Bin 0 -> 124924 bytes .../dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.bin | Bin 0 -> 55536 bytes boards/dk-tm4c129x/usb_host_hub/readme.txt | 44 + .../usb_host_hub/rvmdk/usb_host_hub.axf | Bin 0 -> 540148 bytes .../usb_host_hub/rvmdk/usb_host_hub.bin | Bin 0 -> 55952 bytes boards/dk-tm4c129x/usb_host_hub/startup_ccs.c | 275 + boards/dk-tm4c129x/usb_host_hub/startup_ewarm.c | 306 + boards/dk-tm4c129x/usb_host_hub/startup_gcc.c | 322 + boards/dk-tm4c129x/usb_host_hub/startup_rvmdk.S | 331 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.c | 1133 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewd | 614 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewp | 821 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.h | 50 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.icf | 78 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ld | 57 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.sct | 47 + boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvopt | 443 + .../dk-tm4c129x/usb_host_hub/usb_host_hub.uvproj | 479 + .../dk-tm4c129x/usb_host_hub/usb_host_hub_ccs.cmd | 70 + .../dk-tm4c129x/usb_host_hub/usb_host_keyboard.c | 351 + boards/dk-tm4c129x/usb_host_hub/usb_host_msc.c | 946 + boards/dk-tm4c129x/usb_host_keyboard/Makefile | 92 + .../usb_host_keyboard/ccs/.ccsimportspec | 10 + .../dk-tm4c129x/usb_host_keyboard/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_host_keyboard/ccs/.cproject | 184 + boards/dk-tm4c129x/usb_host_keyboard/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/usb_host_keyboard.bin | Bin 0 -> 42000 bytes .../ccs/Debug/usb_host_keyboard.out | Bin 0 -> 594254 bytes .../usb_host_keyboard/ccs/macros.ini_initial | 1 + .../usb_host_keyboard/ccs/target_config.ccxml | 13 + .../ewarm/Exe/usb_host_keyboard.bin | Bin 0 -> 38956 bytes .../ewarm/Exe/usb_host_keyboard.out | Bin 0 -> 475900 bytes .../usb_host_keyboard/gcc/usb_host_keyboard.axf | Bin 0 -> 116668 bytes .../usb_host_keyboard/gcc/usb_host_keyboard.bin | Bin 0 -> 40786 bytes boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.c | 578 + boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.h | 71 + boards/dk-tm4c129x/usb_host_keyboard/readme.txt | 37 + .../usb_host_keyboard/rvmdk/usb_host_keyboard.axf | Bin 0 -> 420140 bytes .../usb_host_keyboard/rvmdk/usb_host_keyboard.bin | Bin 0 -> 41936 bytes boards/dk-tm4c129x/usb_host_keyboard/startup_ccs.c | 276 + .../dk-tm4c129x/usb_host_keyboard/startup_ewarm.c | 307 + boards/dk-tm4c129x/usb_host_keyboard/startup_gcc.c | 323 + .../dk-tm4c129x/usb_host_keyboard/startup_rvmdk.S | 332 + .../usb_host_keyboard/usb_host_keyboard.c | 561 + .../usb_host_keyboard/usb_host_keyboard.ewd | 614 + .../usb_host_keyboard/usb_host_keyboard.ewp | 807 + .../usb_host_keyboard/usb_host_keyboard.icf | 78 + .../usb_host_keyboard/usb_host_keyboard.ld | 57 + .../usb_host_keyboard/usb_host_keyboard.sct | 47 + .../usb_host_keyboard/usb_host_keyboard.uvopt | 387 + .../usb_host_keyboard/usb_host_keyboard.uvproj | 459 + .../usb_host_keyboard/usb_host_keyboard_ccs.cmd | 70 + boards/dk-tm4c129x/usb_host_mouse/Makefile | 93 + .../dk-tm4c129x/usb_host_mouse/ccs/.ccsimportspec | 10 + boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_host_mouse/ccs/.cproject | 184 + boards/dk-tm4c129x/usb_host_mouse/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_host_mouse/ccs/Debug/usb_host_mouse.bin | Bin 0 -> 40368 bytes .../usb_host_mouse/ccs/Debug/usb_host_mouse.out | Bin 0 -> 577440 bytes .../usb_host_mouse/ccs/macros.ini_initial | 1 + .../usb_host_mouse/ccs/target_config.ccxml | 13 + .../usb_host_mouse/ewarm/Exe/usb_host_mouse.bin | Bin 0 -> 37232 bytes .../usb_host_mouse/ewarm/Exe/usb_host_mouse.out | Bin 0 -> 463616 bytes .../usb_host_mouse/gcc/usb_host_mouse.axf | Bin 0 -> 115436 bytes .../usb_host_mouse/gcc/usb_host_mouse.bin | Bin 0 -> 38994 bytes boards/dk-tm4c129x/usb_host_mouse/mouse_ui.c | 429 + boards/dk-tm4c129x/usb_host_mouse/mouse_ui.h | 94 + boards/dk-tm4c129x/usb_host_mouse/readme.txt | 36 + .../usb_host_mouse/rvmdk/usb_host_mouse.axf | Bin 0 -> 395396 bytes .../usb_host_mouse/rvmdk/usb_host_mouse.bin | Bin 0 -> 40392 bytes boards/dk-tm4c129x/usb_host_mouse/startup_ccs.c | 275 + boards/dk-tm4c129x/usb_host_mouse/startup_ewarm.c | 306 + boards/dk-tm4c129x/usb_host_mouse/startup_gcc.c | 322 + boards/dk-tm4c129x/usb_host_mouse/startup_rvmdk.S | 331 + boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.c | 553 + .../dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewd | 614 + .../dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewp | 807 + .../dk-tm4c129x/usb_host_mouse/usb_host_mouse.icf | 78 + .../dk-tm4c129x/usb_host_mouse/usb_host_mouse.ld | 57 + .../dk-tm4c129x/usb_host_mouse/usb_host_mouse.sct | 47 + .../usb_host_mouse/usb_host_mouse.uvopt | 387 + .../usb_host_mouse/usb_host_mouse.uvproj | 459 + .../usb_host_mouse/usb_host_mouse_ccs.cmd | 70 + boards/dk-tm4c129x/usb_host_msc/Makefile | 98 + boards/dk-tm4c129x/usb_host_msc/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/usb_host_msc/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_host_msc/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_host_msc/ccs/.project | 85 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_host_msc/ccs/Debug/usb_host_msc.bin | Bin 0 -> 58168 bytes .../usb_host_msc/ccs/Debug/usb_host_msc.out | Bin 0 -> 845080 bytes .../usb_host_msc/ccs/macros.ini_initial | 1 + .../usb_host_msc/ccs/target_config.ccxml | 13 + .../usb_host_msc/ewarm/Exe/usb_host_msc.bin | Bin 0 -> 54600 bytes .../usb_host_msc/ewarm/Exe/usb_host_msc.out | Bin 0 -> 702720 bytes .../dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.axf | Bin 0 -> 124569 bytes .../dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.bin | Bin 0 -> 58188 bytes boards/dk-tm4c129x/usb_host_msc/readme.txt | 35 + .../usb_host_msc/rvmdk/usb_host_msc.axf | Bin 0 -> 601080 bytes .../usb_host_msc/rvmdk/usb_host_msc.bin | Bin 0 -> 58280 bytes boards/dk-tm4c129x/usb_host_msc/startup_ccs.c | 277 + boards/dk-tm4c129x/usb_host_msc/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_host_msc/startup_gcc.c | 324 + boards/dk-tm4c129x/usb_host_msc/startup_rvmdk.S | 333 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.c | 1591 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewd | 614 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewp | 815 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.icf | 78 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ld | 57 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.sct | 47 + boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvopt | 415 + .../dk-tm4c129x/usb_host_msc/usb_host_msc.uvproj | 469 + .../dk-tm4c129x/usb_host_msc/usb_host_msc_ccs.cmd | 70 + boards/dk-tm4c129x/usb_otg_mouse/Makefile | 99 + .../dk-tm4c129x/usb_otg_mouse/ccs/.ccsimportspec | 13 + boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_otg_mouse/ccs/.cproject | 186 + boards/dk-tm4c129x/usb_otg_mouse/ccs/.project | 90 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_otg_mouse/ccs/Debug/usb_otg_mouse.bin | Bin 0 -> 50336 bytes .../usb_otg_mouse/ccs/Debug/usb_otg_mouse.out | Bin 0 -> 827656 bytes .../usb_otg_mouse/ccs/macros.ini_initial | 1 + .../usb_otg_mouse/ccs/target_config.ccxml | 13 + .../usb_otg_mouse/ewarm/Exe/usb_otg_mouse.bin | Bin 0 -> 46624 bytes .../usb_otg_mouse/ewarm/Exe/usb_otg_mouse.out | Bin 0 -> 642824 bytes .../usb_otg_mouse/gcc/usb_otg_mouse.axf | Bin 0 -> 124621 bytes .../usb_otg_mouse/gcc/usb_otg_mouse.bin | Bin 0 -> 48962 bytes boards/dk-tm4c129x/usb_otg_mouse/readme.txt | 34 + .../usb_otg_mouse/rvmdk/usb_otg_mouse.axf | Bin 0 -> 546568 bytes .../usb_otg_mouse/rvmdk/usb_otg_mouse.bin | Bin 0 -> 50820 bytes boards/dk-tm4c129x/usb_otg_mouse/startup_ccs.c | 277 + boards/dk-tm4c129x/usb_otg_mouse/startup_ewarm.c | 308 + boards/dk-tm4c129x/usb_otg_mouse/startup_gcc.c | 324 + boards/dk-tm4c129x/usb_otg_mouse/startup_rvmdk.S | 333 + boards/dk-tm4c129x/usb_otg_mouse/usb_dev_mouse.c | 556 + boards/dk-tm4c129x/usb_otg_mouse/usb_host_mouse.c | 740 + .../dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.c | 147 + .../dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.h | 33 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.c | 322 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewd | 614 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewp | 818 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.h | 49 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.icf | 78 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ld | 57 + boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.sct | 47 + .../dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvopt | 429 + .../dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvproj | 474 + .../usb_otg_mouse/usb_otg_mouse_ccs.cmd | 70 + boards/dk-tm4c129x/usb_stick_demo/Makefile | 90 + .../dk-tm4c129x/usb_stick_demo/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_stick_demo/ccs/.cproject | 182 + boards/dk-tm4c129x/usb_stick_demo/ccs/.project | 65 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../usb_stick_demo/ccs/Debug/usb_stick_demo.bin | Bin 0 -> 31384 bytes .../usb_stick_demo/ccs/Debug/usb_stick_demo.out | Bin 0 -> 212894 bytes .../usb_stick_demo/ccs/macros.ini_initial | 1 + .../usb_stick_demo/ccs/target_config.ccxml | 13 + .../usb_stick_demo/ewarm/Exe/usb_stick_demo.bin | Bin 0 -> 29160 bytes .../usb_stick_demo/ewarm/Exe/usb_stick_demo.out | Bin 0 -> 196964 bytes .../usb_stick_demo/gcc/usb_stick_demo.axf | Bin 0 -> 67738 bytes .../usb_stick_demo/gcc/usb_stick_demo.bin | Bin 0 -> 29708 bytes boards/dk-tm4c129x/usb_stick_demo/readme.txt | 39 + .../usb_stick_demo/rvmdk/usb_stick_demo.axf | Bin 0 -> 223488 bytes .../usb_stick_demo/rvmdk/usb_stick_demo.bin | Bin 0 -> 29908 bytes boards/dk-tm4c129x/usb_stick_demo/startup_ccs.c | 268 + boards/dk-tm4c129x/usb_stick_demo/startup_ewarm.c | 299 + boards/dk-tm4c129x/usb_stick_demo/startup_gcc.c | 315 + boards/dk-tm4c129x/usb_stick_demo/startup_rvmdk.S | 324 + boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.c | 261 + .../dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewd | 614 + .../dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewp | 798 + .../dk-tm4c129x/usb_stick_demo/usb_stick_demo.icf | 78 + .../dk-tm4c129x/usb_stick_demo/usb_stick_demo.ld | 57 + .../dk-tm4c129x/usb_stick_demo/usb_stick_demo.sct | 47 + .../usb_stick_demo/usb_stick_demo.uvopt | 345 + .../usb_stick_demo/usb_stick_demo.uvproj | 444 + .../usb_stick_demo/usb_stick_demo_ccs.cmd | 70 + boards/dk-tm4c129x/usb_stick_update/Makefile | 87 + .../usb_stick_update/ccs/.ccsimportspec | 10 + .../dk-tm4c129x/usb_stick_update/ccs/.ccsproject | 10 + boards/dk-tm4c129x/usb_stick_update/ccs/.cproject | 182 + boards/dk-tm4c129x/usb_stick_update/ccs/.project | 55 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + .../ccs/Debug/usb_stick_update.bin | Bin 0 -> 17008 bytes .../ccs/Debug/usb_stick_update.out | Bin 0 -> 420525 bytes .../usb_stick_update/ccs/macros.ini_initial | 1 + .../usb_stick_update/ccs/target_config.ccxml | 13 + .../ewarm/Exe/usb_stick_update.bin | Bin 0 -> 15476 bytes .../ewarm/Exe/usb_stick_update.out | Bin 0 -> 322876 bytes .../usb_stick_update/gcc/usb_stick_update.axf | Bin 0 -> 79550 bytes .../usb_stick_update/gcc/usb_stick_update.bin | Bin 0 -> 16974 bytes boards/dk-tm4c129x/usb_stick_update/readme.txt | 49 + .../usb_stick_update/rvmdk/usb_stick_update.axf | Bin 0 -> 228224 bytes .../usb_stick_update/rvmdk/usb_stick_update.bin | Bin 0 -> 17976 bytes boards/dk-tm4c129x/usb_stick_update/simple_fs.c | 865 + boards/dk-tm4c129x/usb_stick_update/simple_fs.h | 105 + boards/dk-tm4c129x/usb_stick_update/startup_ccs.c | 276 + .../dk-tm4c129x/usb_stick_update/startup_ewarm.c | 307 + boards/dk-tm4c129x/usb_stick_update/startup_gcc.c | 323 + .../dk-tm4c129x/usb_stick_update/startup_rvmdk.S | 332 + .../usb_stick_update/usb_stick_update.c | 942 + .../usb_stick_update/usb_stick_update.ewd | 614 + .../usb_stick_update/usb_stick_update.ewp | 792 + .../usb_stick_update/usb_stick_update.icf | 78 + .../usb_stick_update/usb_stick_update.ld | 57 + .../usb_stick_update/usb_stick_update.sct | 47 + .../usb_stick_update/usb_stick_update.uvopt | 317 + .../usb_stick_update/usb_stick_update.uvproj | 434 + .../usb_stick_update/usb_stick_update_ccs.cmd | 70 + boards/dk-tm4c129x/watchdog/Makefile | 92 + boards/dk-tm4c129x/watchdog/ccs/.ccsimportspec | 8 + boards/dk-tm4c129x/watchdog/ccs/.ccsproject | 10 + boards/dk-tm4c129x/watchdog/ccs/.cproject | 182 + boards/dk-tm4c129x/watchdog/ccs/.project | 75 + .../ccs/.settings/org.eclipse.cdt.codan.core.prefs | 3 + boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.bin | Bin 0 -> 32080 bytes boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.out | Bin 0 -> 240230 bytes boards/dk-tm4c129x/watchdog/ccs/macros.ini_initial | 1 + .../dk-tm4c129x/watchdog/ccs/target_config.ccxml | 13 + boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.bin | Bin 0 -> 29668 bytes boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.out | Bin 0 -> 219092 bytes boards/dk-tm4c129x/watchdog/gcc/watchdog.axf | Bin 0 -> 71971 bytes boards/dk-tm4c129x/watchdog/gcc/watchdog.bin | Bin 0 -> 30400 bytes boards/dk-tm4c129x/watchdog/readme.txt | 33 + boards/dk-tm4c129x/watchdog/rvmdk/watchdog.axf | Bin 0 -> 232952 bytes boards/dk-tm4c129x/watchdog/rvmdk/watchdog.bin | Bin 0 -> 30516 bytes boards/dk-tm4c129x/watchdog/startup_ccs.c | 276 + boards/dk-tm4c129x/watchdog/startup_ewarm.c | 307 + boards/dk-tm4c129x/watchdog/startup_gcc.c | 323 + boards/dk-tm4c129x/watchdog/startup_rvmdk.S | 332 + boards/dk-tm4c129x/watchdog/watchdog.c | 356 + boards/dk-tm4c129x/watchdog/watchdog.ewd | 614 + boards/dk-tm4c129x/watchdog/watchdog.ewp | 804 + boards/dk-tm4c129x/watchdog/watchdog.icf | 78 + boards/dk-tm4c129x/watchdog/watchdog.ld | 57 + boards/dk-tm4c129x/watchdog/watchdog.sct | 47 + boards/dk-tm4c129x/watchdog/watchdog.uvopt | 373 + boards/dk-tm4c129x/watchdog/watchdog.uvproj | 454 + boards/dk-tm4c129x/watchdog/watchdog_ccs.cmd | 70 + 2014 files changed, 431005 insertions(+) create mode 100644 boards/dk-tm4c129x/Makefile create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.c create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.icf create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ld create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.sct create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_cbc_decrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.c create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.icf create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ld create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.sct create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_cbc_encrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.c create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.icf create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ld create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.sct create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_ccm_decrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.c create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.icf create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ld create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.sct create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_ccm_encrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_cmac/Makefile create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.c create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.ewd create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.ewp create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.icf create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.ld create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.sct create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.uvopt create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac.uvproj create mode 100644 boards/dk-tm4c129x/aes_cmac/aes_cmac_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.bin create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.out create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_cmac/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.bin create mode 100644 boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.out create mode 100644 boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.axf create mode 100644 boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.bin create mode 100644 boards/dk-tm4c129x/aes_cmac/readme.txt create mode 100644 boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.axf create mode 100644 boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.bin create mode 100644 boards/dk-tm4c129x/aes_cmac/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_cmac/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_cmac/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_cmac/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.c create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.icf create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ld create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.sct create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_ecb_decrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.c create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.icf create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ld create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.sct create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_ecb_encrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.c create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.icf create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ld create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.sct create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.out create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.axf create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_gcm_decrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/Makefile create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.c create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewd create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewp create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.icf create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ld create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.sct create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvopt create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvproj create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.out create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/readme.txt create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.axf create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.bin create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/aes_gcm_encrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/bitband/Makefile create mode 100644 boards/dk-tm4c129x/bitband/bitband.c create mode 100644 boards/dk-tm4c129x/bitband/bitband.ewd create mode 100644 boards/dk-tm4c129x/bitband/bitband.ewp create mode 100644 boards/dk-tm4c129x/bitband/bitband.icf create mode 100644 boards/dk-tm4c129x/bitband/bitband.ld create mode 100644 boards/dk-tm4c129x/bitband/bitband.sct create mode 100644 boards/dk-tm4c129x/bitband/bitband.uvopt create mode 100644 boards/dk-tm4c129x/bitband/bitband.uvproj create mode 100644 boards/dk-tm4c129x/bitband/bitband_ccs.cmd create mode 100644 boards/dk-tm4c129x/bitband/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/bitband/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/bitband/ccs/.cproject create mode 100644 boards/dk-tm4c129x/bitband/ccs/.project create mode 100644 boards/dk-tm4c129x/bitband/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/bitband/ccs/Debug/bitband.bin create mode 100644 boards/dk-tm4c129x/bitband/ccs/Debug/bitband.out create mode 100644 boards/dk-tm4c129x/bitband/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/bitband/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.bin create mode 100644 boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.out create mode 100644 boards/dk-tm4c129x/bitband/gcc/bitband.axf create mode 100644 boards/dk-tm4c129x/bitband/gcc/bitband.bin create mode 100644 boards/dk-tm4c129x/bitband/readme.txt create mode 100644 boards/dk-tm4c129x/bitband/rvmdk/bitband.axf create mode 100644 boards/dk-tm4c129x/bitband/rvmdk/bitband.bin create mode 100644 boards/dk-tm4c129x/bitband/startup_ccs.c create mode 100644 boards/dk-tm4c129x/bitband/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/bitband/startup_gcc.c create mode 100644 boards/dk-tm4c129x/bitband/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/ble_btool/Makefile create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.c create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.ewd create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.ewp create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.icf create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.ld create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.sct create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.uvopt create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool.uvproj create mode 100644 boards/dk-tm4c129x/ble_btool/ble_btool_ccs.cmd create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/.cproject create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/.project create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.bin create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.out create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/ble_btool/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.bin create mode 100644 boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.out create mode 100644 boards/dk-tm4c129x/ble_btool/gcc/ble_btool.axf create mode 100644 boards/dk-tm4c129x/ble_btool/gcc/ble_btool.bin create mode 100644 boards/dk-tm4c129x/ble_btool/readme.txt create mode 100644 boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.axf create mode 100644 boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.bin create mode 100644 boards/dk-tm4c129x/ble_btool/startup_ccs.c create mode 100644 boards/dk-tm4c129x/ble_btool/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/ble_btool/startup_gcc.c create mode 100644 boards/dk-tm4c129x/ble_btool/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/ble_central/Makefile create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.c create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.ewd create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.ewp create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.icf create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.ld create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.sct create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.uvopt create mode 100644 boards/dk-tm4c129x/ble_central/ble_central.uvproj create mode 100644 boards/dk-tm4c129x/ble_central/ble_central_ccs.cmd create mode 100644 boards/dk-tm4c129x/ble_central/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/ble_central/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/ble_central/ccs/.cproject create mode 100644 boards/dk-tm4c129x/ble_central/ccs/.project create mode 100644 boards/dk-tm4c129x/ble_central/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.bin create mode 100644 boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.out create mode 100644 boards/dk-tm4c129x/ble_central/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/ble_central/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.bin create mode 100644 boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.out create mode 100644 boards/dk-tm4c129x/ble_central/gap.c create mode 100644 boards/dk-tm4c129x/ble_central/gcc/ble_central.axf create mode 100644 boards/dk-tm4c129x/ble_central/gcc/ble_central.bin create mode 100644 boards/dk-tm4c129x/ble_central/hci.h create mode 100644 boards/dk-tm4c129x/ble_central/readme.txt create mode 100644 boards/dk-tm4c129x/ble_central/rvmdk/ble_central.axf create mode 100644 boards/dk-tm4c129x/ble_central/rvmdk/ble_central.bin create mode 100644 boards/dk-tm4c129x/ble_central/startup_ccs.c create mode 100644 boards/dk-tm4c129x/ble_central/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/ble_central/startup_gcc.c create mode 100644 boards/dk-tm4c129x/ble_central/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/blinky/Makefile create mode 100644 boards/dk-tm4c129x/blinky/blinky.c create mode 100644 boards/dk-tm4c129x/blinky/blinky.ewd create mode 100644 boards/dk-tm4c129x/blinky/blinky.ewp create mode 100644 boards/dk-tm4c129x/blinky/blinky.icf create mode 100644 boards/dk-tm4c129x/blinky/blinky.ld create mode 100644 boards/dk-tm4c129x/blinky/blinky.sct create mode 100644 boards/dk-tm4c129x/blinky/blinky.uvopt create mode 100644 boards/dk-tm4c129x/blinky/blinky.uvproj create mode 100644 boards/dk-tm4c129x/blinky/blinky_ccs.cmd create mode 100644 boards/dk-tm4c129x/blinky/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/blinky/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/blinky/ccs/.cproject create mode 100644 boards/dk-tm4c129x/blinky/ccs/.project create mode 100644 boards/dk-tm4c129x/blinky/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/blinky/ccs/Debug/blinky.bin create mode 100644 boards/dk-tm4c129x/blinky/ccs/Debug/blinky.out create mode 100644 boards/dk-tm4c129x/blinky/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/blinky/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.bin create mode 100644 boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.out create mode 100644 boards/dk-tm4c129x/blinky/gcc/blinky.axf create mode 100644 boards/dk-tm4c129x/blinky/gcc/blinky.bin create mode 100644 boards/dk-tm4c129x/blinky/readme.txt create mode 100644 boards/dk-tm4c129x/blinky/rvmdk/blinky.axf create mode 100644 boards/dk-tm4c129x/blinky/rvmdk/blinky.bin create mode 100644 boards/dk-tm4c129x/blinky/startup_ccs.c create mode 100644 boards/dk-tm4c129x/blinky/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/blinky/startup_gcc.c create mode 100644 boards/dk-tm4c129x/blinky/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/Makefile create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.c create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewd create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewp create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.icf create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ld create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.sct create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvopt create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvproj create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash_ccs.cmd create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.cproject create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.project create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.out create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.out create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.axf create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/lwipopts.h create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/readme.txt create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.axf create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/startup_ccs.c create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/startup_gcc.c create mode 100644 boards/dk-tm4c129x/boot_demo_emac_flash/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/boot_demo_flash/Makefile create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.c create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewd create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewp create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.icf create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ld create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.sct create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvopt create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvproj create mode 100644 boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash_ccs.cmd create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/.cproject create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/.project create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.out create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.out create mode 100644 boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.axf create mode 100644 boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_flash/lwipopts.h create mode 100644 boards/dk-tm4c129x/boot_demo_flash/readme.txt create mode 100644 boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.axf create mode 100644 boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.bin create mode 100644 boards/dk-tm4c129x/boot_demo_flash/startup_ccs.c create mode 100644 boards/dk-tm4c129x/boot_demo_flash/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/boot_demo_flash/startup_gcc.c create mode 100644 boards/dk-tm4c129x/boot_demo_flash/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/boot_demo_uart/Makefile create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.c create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewd create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewp create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.icf create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ld create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.sct create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvopt create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvproj create mode 100644 boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart_ccs.cmd create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/.cproject create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/.project create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.bin create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.out create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.bin create mode 100644 boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.out create mode 100644 boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.axf create mode 100644 boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.bin create mode 100644 boards/dk-tm4c129x/boot_demo_uart/readme.txt create mode 100644 boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.axf create mode 100644 boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.bin create mode 100644 boards/dk-tm4c129x/boot_demo_uart/startup_ccs.c create mode 100644 boards/dk-tm4c129x/boot_demo_uart/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/boot_demo_uart/startup_gcc.c create mode 100644 boards/dk-tm4c129x/boot_demo_uart/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/boot_demo_usb/Makefile create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.c create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewd create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewp create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.icf create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ld create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.sct create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvopt create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvproj create mode 100644 boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb_ccs.cmd create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/.cproject create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/.project create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.bin create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.out create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.bin create mode 100644 boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.out create mode 100644 boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.axf create mode 100644 boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.bin create mode 100644 boards/dk-tm4c129x/boot_demo_usb/readme.txt create mode 100644 boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.axf create mode 100644 boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.bin create mode 100644 boards/dk-tm4c129x/boot_demo_usb/startup_ccs.c create mode 100644 boards/dk-tm4c129x/boot_demo_usb/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/boot_demo_usb/startup_gcc.c create mode 100644 boards/dk-tm4c129x/boot_demo_usb/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.c create mode 100644 boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.h create mode 100644 boards/dk-tm4c129x/boot_emac_flash/Makefile create mode 100644 boards/dk-tm4c129x/boot_emac_flash/bl_config.h create mode 100644 boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.c create mode 100644 boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewd create mode 100644 boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewp create mode 100644 boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvopt create mode 100644 boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvproj create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/.cproject create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/.project create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.out create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.out create mode 100644 boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.axf create mode 100644 boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.bin create mode 100644 boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.axf create mode 100644 boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.bin create mode 100644 boards/dk-tm4c129x/calibrate/Makefile create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.c create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.ewd create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.ewp create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.icf create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.ld create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.sct create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.uvopt create mode 100644 boards/dk-tm4c129x/calibrate/calibrate.uvproj create mode 100644 boards/dk-tm4c129x/calibrate/calibrate_ccs.cmd create mode 100644 boards/dk-tm4c129x/calibrate/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/calibrate/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/calibrate/ccs/.cproject create mode 100644 boards/dk-tm4c129x/calibrate/ccs/.project create mode 100644 boards/dk-tm4c129x/calibrate/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.bin create mode 100644 boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.out create mode 100644 boards/dk-tm4c129x/calibrate/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/calibrate/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.bin create mode 100644 boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.out create mode 100644 boards/dk-tm4c129x/calibrate/gcc/calibrate.axf create mode 100644 boards/dk-tm4c129x/calibrate/gcc/calibrate.bin create mode 100644 boards/dk-tm4c129x/calibrate/readme.txt create mode 100644 boards/dk-tm4c129x/calibrate/rvmdk/calibrate.axf create mode 100644 boards/dk-tm4c129x/calibrate/rvmdk/calibrate.bin create mode 100644 boards/dk-tm4c129x/calibrate/startup_ccs.c create mode 100644 boards/dk-tm4c129x/calibrate/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/calibrate/startup_gcc.c create mode 100644 boards/dk-tm4c129x/calibrate/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/crc32/Makefile create mode 100644 boards/dk-tm4c129x/crc32/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/crc32/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/crc32/ccs/.cproject create mode 100644 boards/dk-tm4c129x/crc32/ccs/.project create mode 100644 boards/dk-tm4c129x/crc32/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/crc32/ccs/Debug/crc32.bin create mode 100644 boards/dk-tm4c129x/crc32/ccs/Debug/crc32.out create mode 100644 boards/dk-tm4c129x/crc32/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/crc32/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/crc32/crc32.c create mode 100644 boards/dk-tm4c129x/crc32/crc32.ewd create mode 100644 boards/dk-tm4c129x/crc32/crc32.ewp create mode 100644 boards/dk-tm4c129x/crc32/crc32.icf create mode 100644 boards/dk-tm4c129x/crc32/crc32.ld create mode 100644 boards/dk-tm4c129x/crc32/crc32.sct create mode 100644 boards/dk-tm4c129x/crc32/crc32.uvopt create mode 100644 boards/dk-tm4c129x/crc32/crc32.uvproj create mode 100644 boards/dk-tm4c129x/crc32/crc32_ccs.cmd create mode 100644 boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.bin create mode 100644 boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.out create mode 100644 boards/dk-tm4c129x/crc32/gcc/crc32.axf create mode 100644 boards/dk-tm4c129x/crc32/gcc/crc32.bin create mode 100644 boards/dk-tm4c129x/crc32/readme.txt create mode 100644 boards/dk-tm4c129x/crc32/rvmdk/crc32.axf create mode 100644 boards/dk-tm4c129x/crc32/rvmdk/crc32.bin create mode 100644 boards/dk-tm4c129x/crc32/startup_ccs.c create mode 100644 boards/dk-tm4c129x/crc32/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/crc32/startup_gcc.c create mode 100644 boards/dk-tm4c129x/crc32/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/dk-tm4c129x.eww create mode 100644 boards/dk-tm4c129x/dk-tm4c129x.uvmpw create mode 100644 boards/dk-tm4c129x/drivers/buttons.c create mode 100644 boards/dk-tm4c129x/drivers/buttons.h create mode 100644 boards/dk-tm4c129x/drivers/frame.c create mode 100644 boards/dk-tm4c129x/drivers/frame.h create mode 100644 boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c create mode 100644 boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.h create mode 100644 boards/dk-tm4c129x/drivers/mx66l51235f.c create mode 100644 boards/dk-tm4c129x/drivers/mx66l51235f.h create mode 100644 boards/dk-tm4c129x/drivers/pinout.c create mode 100644 boards/dk-tm4c129x/drivers/pinout.h create mode 100644 boards/dk-tm4c129x/drivers/sound.c create mode 100644 boards/dk-tm4c129x/drivers/sound.h create mode 100644 boards/dk-tm4c129x/drivers/touch.c create mode 100644 boards/dk-tm4c129x/drivers/touch.h create mode 100644 boards/dk-tm4c129x/drivers/usb_sound.c create mode 100644 boards/dk-tm4c129x/drivers/usb_sound.h create mode 100644 boards/dk-tm4c129x/enet_io/Makefile create mode 100644 boards/dk-tm4c129x/enet_io/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/enet_io/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/enet_io/ccs/.cproject create mode 100644 boards/dk-tm4c129x/enet_io/ccs/.project create mode 100644 boards/dk-tm4c129x/enet_io/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.bin create mode 100644 boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.out create mode 100644 boards/dk-tm4c129x/enet_io/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/enet_io/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/enet_io/cgifuncs.c create mode 100644 boards/dk-tm4c129x/enet_io/cgifuncs.h create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.c create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.ewd create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.ewp create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.icf create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.ld create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.sct create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.uvopt create mode 100644 boards/dk-tm4c129x/enet_io/enet_io.uvproj create mode 100644 boards/dk-tm4c129x/enet_io/enet_io_ccs.cmd create mode 100644 boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.bin create mode 100644 boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.out create mode 100644 boards/dk-tm4c129x/enet_io/fs/404.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/about.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/block.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/block.jpg create mode 100644 boards/dk-tm4c129x/enet_io/fs/dk-tm4c129x.jpg create mode 100644 boards/dk-tm4c129x/enet_io/fs/favicon.ico create mode 100644 boards/dk-tm4c129x/enet_io/fs/index.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/io_cgi.ssi create mode 100644 boards/dk-tm4c129x/enet_io/fs/io_http.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/javascript.js create mode 100644 boards/dk-tm4c129x/enet_io/fs/javascript_load.js create mode 100644 boards/dk-tm4c129x/enet_io/fs/overview.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/perror.htm create mode 100644 boards/dk-tm4c129x/enet_io/fs/styles.css create mode 100644 boards/dk-tm4c129x/enet_io/fs/ti.jpg create mode 100644 boards/dk-tm4c129x/enet_io/fs/tm4c.jpg create mode 100644 boards/dk-tm4c129x/enet_io/gcc/enet_io.axf create mode 100644 boards/dk-tm4c129x/enet_io/gcc/enet_io.bin create mode 100644 boards/dk-tm4c129x/enet_io/io.c create mode 100644 boards/dk-tm4c129x/enet_io/io.h create mode 100644 boards/dk-tm4c129x/enet_io/io_fs.c create mode 100644 boards/dk-tm4c129x/enet_io/io_fsdata.h create mode 100644 boards/dk-tm4c129x/enet_io/lwipopts.h create mode 100644 boards/dk-tm4c129x/enet_io/readme.txt create mode 100644 boards/dk-tm4c129x/enet_io/rvmdk/enet_io.axf create mode 100644 boards/dk-tm4c129x/enet_io/rvmdk/enet_io.bin create mode 100644 boards/dk-tm4c129x/enet_io/startup_ccs.c create mode 100644 boards/dk-tm4c129x/enet_io/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/enet_io/startup_gcc.c create mode 100644 boards/dk-tm4c129x/enet_io/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/enet_lwip/Makefile create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/.cproject create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/.project create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.bin create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.out create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/enet_lwip/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_fs.c create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_fs.h create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_fsdata.h create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.c create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.ewd create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.ewp create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.icf create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.ld create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.sct create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.uvopt create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip.uvproj create mode 100644 boards/dk-tm4c129x/enet_lwip/enet_lwip_ccs.cmd create mode 100644 boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.bin create mode 100644 boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.out create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/404.htm create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/about.htm create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/block.htm create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/block.jpg create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/dk-tm4c129x.jpg create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/favicon.ico create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/index.htm create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/javascript.js create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/overview.htm create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/styles.css create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/ti.jpg create mode 100644 boards/dk-tm4c129x/enet_lwip/fs/tm4c.jpg create mode 100644 boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.axf create mode 100644 boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.bin create mode 100644 boards/dk-tm4c129x/enet_lwip/lwipopts.h create mode 100644 boards/dk-tm4c129x/enet_lwip/readme.txt create mode 100644 boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.axf create mode 100644 boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.bin create mode 100644 boards/dk-tm4c129x/enet_lwip/startup_ccs.c create mode 100644 boards/dk-tm4c129x/enet_lwip/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/enet_lwip/startup_gcc.c create mode 100644 boards/dk-tm4c129x/enet_lwip/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/enet_uip/Makefile create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/.cproject create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/.project create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.bin create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.out create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/enet_uip/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/enet_uip/clock-arch.h create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.c create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.ewd create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.ewp create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.icf create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.ld create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.sct create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.uvopt create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip.uvproj create mode 100644 boards/dk-tm4c129x/enet_uip/enet_uip_ccs.cmd create mode 100644 boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.bin create mode 100644 boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.out create mode 100644 boards/dk-tm4c129x/enet_uip/gcc/enet_uip.axf create mode 100644 boards/dk-tm4c129x/enet_uip/gcc/enet_uip.bin create mode 100644 boards/dk-tm4c129x/enet_uip/readme.txt create mode 100644 boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.axf create mode 100644 boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.bin create mode 100644 boards/dk-tm4c129x/enet_uip/startup_ccs.c create mode 100644 boards/dk-tm4c129x/enet_uip/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/enet_uip/startup_gcc.c create mode 100644 boards/dk-tm4c129x/enet_uip/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/enet_uip/uip-conf.h create mode 100644 boards/dk-tm4c129x/fontview/Makefile create mode 100644 boards/dk-tm4c129x/fontview/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/fontview/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/fontview/ccs/.cproject create mode 100644 boards/dk-tm4c129x/fontview/ccs/.project create mode 100644 boards/dk-tm4c129x/fontview/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/fontview/ccs/Debug/fontview.bin create mode 100644 boards/dk-tm4c129x/fontview/ccs/Debug/fontview.out create mode 100644 boards/dk-tm4c129x/fontview/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/fontview/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.bin create mode 100644 boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.out create mode 100644 boards/dk-tm4c129x/fontview/fatwrapper.c create mode 100644 boards/dk-tm4c129x/fontview/fatwrapper.h create mode 100644 boards/dk-tm4c129x/fontview/fontview.c create mode 100644 boards/dk-tm4c129x/fontview/fontview.ewd create mode 100644 boards/dk-tm4c129x/fontview/fontview.ewp create mode 100644 boards/dk-tm4c129x/fontview/fontview.icf create mode 100644 boards/dk-tm4c129x/fontview/fontview.ld create mode 100644 boards/dk-tm4c129x/fontview/fontview.sct create mode 100644 boards/dk-tm4c129x/fontview/fontview.uvopt create mode 100644 boards/dk-tm4c129x/fontview/fontview.uvproj create mode 100644 boards/dk-tm4c129x/fontview/fontview_ccs.cmd create mode 100644 boards/dk-tm4c129x/fontview/gcc/fontview.axf create mode 100644 boards/dk-tm4c129x/fontview/gcc/fontview.bin create mode 100644 boards/dk-tm4c129x/fontview/readme.txt create mode 100644 boards/dk-tm4c129x/fontview/rvmdk/fontview.axf create mode 100644 boards/dk-tm4c129x/fontview/rvmdk/fontview.bin create mode 100644 boards/dk-tm4c129x/fontview/startup_ccs.c create mode 100644 boards/dk-tm4c129x/fontview/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/fontview/startup_gcc.c create mode 100644 boards/dk-tm4c129x/fontview/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/freertos_demo/FreeRTOSConfig.h create mode 100644 boards/dk-tm4c129x/freertos_demo/Makefile create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/.cproject create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/.project create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.bin create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.out create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/freertos_demo/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/freertos_demo/cgifuncs.c create mode 100644 boards/dk-tm4c129x/freertos_demo/cgifuncs.h create mode 100644 boards/dk-tm4c129x/freertos_demo/display_task.c create mode 100644 boards/dk-tm4c129x/freertos_demo/display_task.h create mode 100644 boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.bin create mode 100644 boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.out create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.c create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.ewd create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.ewp create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.h create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.icf create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.ld create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.sct create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.uvopt create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo.uvproj create mode 100644 boards/dk-tm4c129x/freertos_demo/freertos_demo_ccs.cmd create mode 100644 boards/dk-tm4c129x/freertos_demo/fs.c create mode 100644 boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.axf create mode 100644 boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.bin create mode 100644 boards/dk-tm4c129x/freertos_demo/html/404.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/block.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/family.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/favicon.ico create mode 100644 boards/dk-tm4c129x/freertos_demo/html/footer.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/freertos.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/header.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/apps.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-communicate-small.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-connect-small.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-control-small.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/cortex.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/freertos.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/mcu_side-by-side.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/ti.gif create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/ti_logo.gif create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/tiva.jpg create mode 100644 boards/dk-tm4c129x/freertos_demo/html/images/tiva_globe-small.gif create mode 100644 boards/dk-tm4c129x/freertos_demo/html/index.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/io.ssi create mode 100644 boards/dk-tm4c129x/freertos_demo/html/lwipstat.ssi create mode 100644 boards/dk-tm4c129x/freertos_demo/html/perror.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/side.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/html/styles.css create mode 100644 boards/dk-tm4c129x/freertos_demo/html/ti.htm create mode 100644 boards/dk-tm4c129x/freertos_demo/htmldata.h create mode 100644 boards/dk-tm4c129x/freertos_demo/idle_task.c create mode 100644 boards/dk-tm4c129x/freertos_demo/idle_task.h create mode 100644 boards/dk-tm4c129x/freertos_demo/images.c create mode 100644 boards/dk-tm4c129x/freertos_demo/images.h create mode 100644 boards/dk-tm4c129x/freertos_demo/led_task.c create mode 100644 boards/dk-tm4c129x/freertos_demo/led_task.h create mode 100644 boards/dk-tm4c129x/freertos_demo/lwip_task.c create mode 100644 boards/dk-tm4c129x/freertos_demo/lwip_task.h create mode 100644 boards/dk-tm4c129x/freertos_demo/lwipopts.h create mode 100644 boards/dk-tm4c129x/freertos_demo/priorities.h create mode 100644 boards/dk-tm4c129x/freertos_demo/random.c create mode 100644 boards/dk-tm4c129x/freertos_demo/random.h create mode 100644 boards/dk-tm4c129x/freertos_demo/readme.txt create mode 100644 boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.axf create mode 100644 boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.bin create mode 100644 boards/dk-tm4c129x/freertos_demo/spider_task.c create mode 100644 boards/dk-tm4c129x/freertos_demo/spider_task.h create mode 100644 boards/dk-tm4c129x/freertos_demo/startup_ccs.c create mode 100644 boards/dk-tm4c129x/freertos_demo/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/freertos_demo/startup_gcc.c create mode 100644 boards/dk-tm4c129x/freertos_demo/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/gpio_jtag/Makefile create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/.cproject create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/.project create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.bin create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.out create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/gpio_jtag/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.bin create mode 100644 boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.out create mode 100644 boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.axf create mode 100644 boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.bin create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.c create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewd create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewp create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.icf create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ld create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.sct create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvopt create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvproj create mode 100644 boards/dk-tm4c129x/gpio_jtag/gpio_jtag_ccs.cmd create mode 100644 boards/dk-tm4c129x/gpio_jtag/readme.txt create mode 100644 boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.axf create mode 100644 boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.bin create mode 100644 boards/dk-tm4c129x/gpio_jtag/startup_ccs.c create mode 100644 boards/dk-tm4c129x/gpio_jtag/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/gpio_jtag/startup_gcc.c create mode 100644 boards/dk-tm4c129x/gpio_jtag/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/grlib_demo/Makefile create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/.cproject create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/.project create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.bin create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.out create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/grlib_demo/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.bin create mode 100644 boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.out create mode 100644 boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.axf create mode 100644 boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.bin create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.c create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.ewd create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.ewp create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.icf create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.ld create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.sct create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.uvopt create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo.uvproj create mode 100644 boards/dk-tm4c129x/grlib_demo/grlib_demo_ccs.cmd create mode 100644 boards/dk-tm4c129x/grlib_demo/images.c create mode 100644 boards/dk-tm4c129x/grlib_demo/images.h create mode 100644 boards/dk-tm4c129x/grlib_demo/readme.txt create mode 100644 boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.axf create mode 100644 boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.bin create mode 100644 boards/dk-tm4c129x/grlib_demo/startup_ccs.c create mode 100644 boards/dk-tm4c129x/grlib_demo/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/grlib_demo/startup_gcc.c create mode 100644 boards/dk-tm4c129x/grlib_demo/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/grlib_driver_test/Makefile create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/.project create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/grlib_driver_test/driver_config.h create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin create mode 100644 boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out create mode 100644 boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf create mode 100644 boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj create mode 100644 boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd create mode 100644 boards/dk-tm4c129x/grlib_driver_test/images.c create mode 100644 boards/dk-tm4c129x/grlib_driver_test/images.h create mode 100644 boards/dk-tm4c129x/grlib_driver_test/readme.txt create mode 100644 boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf create mode 100644 boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin create mode 100644 boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c create mode 100644 boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c create mode 100644 boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/hello/Makefile create mode 100644 boards/dk-tm4c129x/hello/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/hello/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/hello/ccs/.cproject create mode 100644 boards/dk-tm4c129x/hello/ccs/.project create mode 100644 boards/dk-tm4c129x/hello/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/hello/ccs/Debug/hello.bin create mode 100644 boards/dk-tm4c129x/hello/ccs/Debug/hello.out create mode 100644 boards/dk-tm4c129x/hello/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/hello/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/hello/ewarm/Exe/hello.bin create mode 100644 boards/dk-tm4c129x/hello/ewarm/Exe/hello.out create mode 100644 boards/dk-tm4c129x/hello/gcc/hello.axf create mode 100644 boards/dk-tm4c129x/hello/gcc/hello.bin create mode 100644 boards/dk-tm4c129x/hello/hello.c create mode 100644 boards/dk-tm4c129x/hello/hello.ewd create mode 100644 boards/dk-tm4c129x/hello/hello.ewp create mode 100644 boards/dk-tm4c129x/hello/hello.icf create mode 100644 boards/dk-tm4c129x/hello/hello.ld create mode 100644 boards/dk-tm4c129x/hello/hello.sct create mode 100644 boards/dk-tm4c129x/hello/hello.uvopt create mode 100644 boards/dk-tm4c129x/hello/hello.uvproj create mode 100644 boards/dk-tm4c129x/hello/hello_ccs.cmd create mode 100644 boards/dk-tm4c129x/hello/readme.txt create mode 100644 boards/dk-tm4c129x/hello/rvmdk/hello.axf create mode 100644 boards/dk-tm4c129x/hello/rvmdk/hello.bin create mode 100644 boards/dk-tm4c129x/hello/startup_ccs.c create mode 100644 boards/dk-tm4c129x/hello/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/hello/startup_gcc.c create mode 100644 boards/dk-tm4c129x/hello/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/hello_widget/Makefile create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/.cproject create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/.project create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.bin create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.out create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/hello_widget/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.bin create mode 100644 boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.out create mode 100644 boards/dk-tm4c129x/hello_widget/gcc/hello_widget.axf create mode 100644 boards/dk-tm4c129x/hello_widget/gcc/hello_widget.bin create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.c create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.ewd create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.ewp create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.icf create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.ld create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.sct create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.uvopt create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget.uvproj create mode 100644 boards/dk-tm4c129x/hello_widget/hello_widget_ccs.cmd create mode 100644 boards/dk-tm4c129x/hello_widget/readme.txt create mode 100644 boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.axf create mode 100644 boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.bin create mode 100644 boards/dk-tm4c129x/hello_widget/startup_ccs.c create mode 100644 boards/dk-tm4c129x/hello_widget/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/hello_widget/startup_gcc.c create mode 100644 boards/dk-tm4c129x/hello_widget/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/hibernate/Makefile create mode 100644 boards/dk-tm4c129x/hibernate/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/hibernate/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/hibernate/ccs/.cproject create mode 100644 boards/dk-tm4c129x/hibernate/ccs/.project create mode 100644 boards/dk-tm4c129x/hibernate/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.bin create mode 100644 boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.out create mode 100644 boards/dk-tm4c129x/hibernate/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/hibernate/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.bin create mode 100644 boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.out create mode 100644 boards/dk-tm4c129x/hibernate/gcc/hibernate.axf create mode 100644 boards/dk-tm4c129x/hibernate/gcc/hibernate.bin create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.c create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.ewd create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.ewp create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.icf create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.ld create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.sct create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.uvopt create mode 100644 boards/dk-tm4c129x/hibernate/hibernate.uvproj create mode 100644 boards/dk-tm4c129x/hibernate/hibernate_ccs.cmd create mode 100644 boards/dk-tm4c129x/hibernate/readme.txt create mode 100644 boards/dk-tm4c129x/hibernate/rvmdk/hibernate.axf create mode 100644 boards/dk-tm4c129x/hibernate/rvmdk/hibernate.bin create mode 100644 boards/dk-tm4c129x/hibernate/startup_ccs.c create mode 100644 boards/dk-tm4c129x/hibernate/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/hibernate/startup_gcc.c create mode 100644 boards/dk-tm4c129x/hibernate/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/interrupts/Makefile create mode 100644 boards/dk-tm4c129x/interrupts/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/interrupts/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/interrupts/ccs/.cproject create mode 100644 boards/dk-tm4c129x/interrupts/ccs/.project create mode 100644 boards/dk-tm4c129x/interrupts/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.bin create mode 100644 boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.out create mode 100644 boards/dk-tm4c129x/interrupts/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/interrupts/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.bin create mode 100644 boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.out create mode 100644 boards/dk-tm4c129x/interrupts/gcc/interrupts.axf create mode 100644 boards/dk-tm4c129x/interrupts/gcc/interrupts.bin create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.c create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.ewd create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.ewp create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.icf create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.ld create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.sct create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.uvopt create mode 100644 boards/dk-tm4c129x/interrupts/interrupts.uvproj create mode 100644 boards/dk-tm4c129x/interrupts/interrupts_ccs.cmd create mode 100644 boards/dk-tm4c129x/interrupts/readme.txt create mode 100644 boards/dk-tm4c129x/interrupts/rvmdk/interrupts.axf create mode 100644 boards/dk-tm4c129x/interrupts/rvmdk/interrupts.bin create mode 100644 boards/dk-tm4c129x/interrupts/startup_ccs.c create mode 100644 boards/dk-tm4c129x/interrupts/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/interrupts/startup_gcc.c create mode 100644 boards/dk-tm4c129x/interrupts/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/lang_demo/Makefile create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/.cproject create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/.project create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.bin create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.out create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/lang_demo/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.bin create mode 100644 boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.out create mode 100644 boards/dk-tm4c129x/lang_demo/gcc/lang_demo.axf create mode 100644 boards/dk-tm4c129x/lang_demo/gcc/lang_demo.bin create mode 100644 boards/dk-tm4c129x/lang_demo/images.c create mode 100644 boards/dk-tm4c129x/lang_demo/images.h create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.c create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.ewd create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.ewp create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.icf create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.ld create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.sct create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.uvopt create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo.uvproj create mode 100644 boards/dk-tm4c129x/lang_demo/lang_demo_ccs.cmd create mode 100644 boards/dk-tm4c129x/lang_demo/readme.txt create mode 100644 boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.axf create mode 100644 boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.bin create mode 100644 boards/dk-tm4c129x/lang_demo/startup_ccs.c create mode 100644 boards/dk-tm4c129x/lang_demo/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/lang_demo/startup_gcc.c create mode 100644 boards/dk-tm4c129x/lang_demo/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/mpu_fault/Makefile create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/.cproject create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/.project create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.bin create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.out create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/mpu_fault/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.bin create mode 100644 boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.out create mode 100644 boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.axf create mode 100644 boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.bin create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.c create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.ewd create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.ewp create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.icf create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.ld create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.sct create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.uvopt create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault.uvproj create mode 100644 boards/dk-tm4c129x/mpu_fault/mpu_fault_ccs.cmd create mode 100644 boards/dk-tm4c129x/mpu_fault/readme.txt create mode 100644 boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.axf create mode 100644 boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.bin create mode 100644 boards/dk-tm4c129x/mpu_fault/startup_ccs.c create mode 100644 boards/dk-tm4c129x/mpu_fault/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/mpu_fault/startup_gcc.c create mode 100644 boards/dk-tm4c129x/mpu_fault/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/qs_weather/Makefile create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/.cproject create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/.project create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.bin create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.out create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/qs_weather/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/qs_weather/debug.h create mode 100644 boards/dk-tm4c129x/qs_weather/eth_client.c create mode 100644 boards/dk-tm4c129x/qs_weather/eth_client.h create mode 100644 boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.bin create mode 100644 boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.out create mode 100644 boards/dk-tm4c129x/qs_weather/gcc/qs_weather.axf create mode 100644 boards/dk-tm4c129x/qs_weather/gcc/qs_weather.bin create mode 100644 boards/dk-tm4c129x/qs_weather/images.c create mode 100644 boards/dk-tm4c129x/qs_weather/images.h create mode 100644 boards/dk-tm4c129x/qs_weather/json.c create mode 100644 boards/dk-tm4c129x/qs_weather/json.h create mode 100644 boards/dk-tm4c129x/qs_weather/lwipopts.h create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.c create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.ewd create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.ewp create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.icf create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.ld create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.sct create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.uvopt create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather.uvproj create mode 100644 boards/dk-tm4c129x/qs_weather/qs_weather_ccs.cmd create mode 100644 boards/dk-tm4c129x/qs_weather/readme.txt create mode 100644 boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.axf create mode 100644 boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.bin create mode 100644 boards/dk-tm4c129x/qs_weather/startup_ccs.c create mode 100644 boards/dk-tm4c129x/qs_weather/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/qs_weather/startup_gcc.c create mode 100644 boards/dk-tm4c129x/qs_weather/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/scribble/Makefile create mode 100644 boards/dk-tm4c129x/scribble/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/scribble/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/scribble/ccs/.cproject create mode 100644 boards/dk-tm4c129x/scribble/ccs/.project create mode 100644 boards/dk-tm4c129x/scribble/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/scribble/ccs/Debug/scribble.bin create mode 100644 boards/dk-tm4c129x/scribble/ccs/Debug/scribble.out create mode 100644 boards/dk-tm4c129x/scribble/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/scribble/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.bin create mode 100644 boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.out create mode 100644 boards/dk-tm4c129x/scribble/gcc/scribble.axf create mode 100644 boards/dk-tm4c129x/scribble/gcc/scribble.bin create mode 100644 boards/dk-tm4c129x/scribble/readme.txt create mode 100644 boards/dk-tm4c129x/scribble/rvmdk/scribble.axf create mode 100644 boards/dk-tm4c129x/scribble/rvmdk/scribble.bin create mode 100644 boards/dk-tm4c129x/scribble/scribble.c create mode 100644 boards/dk-tm4c129x/scribble/scribble.ewd create mode 100644 boards/dk-tm4c129x/scribble/scribble.ewp create mode 100644 boards/dk-tm4c129x/scribble/scribble.icf create mode 100644 boards/dk-tm4c129x/scribble/scribble.ld create mode 100644 boards/dk-tm4c129x/scribble/scribble.sct create mode 100644 boards/dk-tm4c129x/scribble/scribble.uvopt create mode 100644 boards/dk-tm4c129x/scribble/scribble.uvproj create mode 100644 boards/dk-tm4c129x/scribble/scribble_ccs.cmd create mode 100644 boards/dk-tm4c129x/scribble/startup_ccs.c create mode 100644 boards/dk-tm4c129x/scribble/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/scribble/startup_gcc.c create mode 100644 boards/dk-tm4c129x/scribble/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/sd_card/Makefile create mode 100644 boards/dk-tm4c129x/sd_card/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/sd_card/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/sd_card/ccs/.cproject create mode 100644 boards/dk-tm4c129x/sd_card/ccs/.project create mode 100644 boards/dk-tm4c129x/sd_card/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.bin create mode 100644 boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.out create mode 100644 boards/dk-tm4c129x/sd_card/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/sd_card/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.bin create mode 100644 boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.out create mode 100644 boards/dk-tm4c129x/sd_card/gcc/sd_card.axf create mode 100644 boards/dk-tm4c129x/sd_card/gcc/sd_card.bin create mode 100644 boards/dk-tm4c129x/sd_card/readme.txt create mode 100644 boards/dk-tm4c129x/sd_card/rvmdk/sd_card.axf create mode 100644 boards/dk-tm4c129x/sd_card/rvmdk/sd_card.bin create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.c create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.ewd create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.ewp create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.icf create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.ld create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.sct create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.uvopt create mode 100644 boards/dk-tm4c129x/sd_card/sd_card.uvproj create mode 100644 boards/dk-tm4c129x/sd_card/sd_card_ccs.cmd create mode 100644 boards/dk-tm4c129x/sd_card/startup_ccs.c create mode 100644 boards/dk-tm4c129x/sd_card/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/sd_card/startup_gcc.c create mode 100644 boards/dk-tm4c129x/sd_card/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/sha1_hash/Makefile create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/.cproject create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/.project create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.bin create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.out create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/sha1_hash/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.bin create mode 100644 boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.out create mode 100644 boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.axf create mode 100644 boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.bin create mode 100644 boards/dk-tm4c129x/sha1_hash/readme.txt create mode 100644 boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.axf create mode 100644 boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.bin create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.c create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.ewd create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.ewp create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.icf create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.ld create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.sct create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.uvopt create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash.uvproj create mode 100644 boards/dk-tm4c129x/sha1_hash/sha1_hash_ccs.cmd create mode 100644 boards/dk-tm4c129x/sha1_hash/startup_ccs.c create mode 100644 boards/dk-tm4c129x/sha1_hash/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/sha1_hash/startup_gcc.c create mode 100644 boards/dk-tm4c129x/sha1_hash/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/sha1_hmac/Makefile create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/.cproject create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/.project create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.bin create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.out create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/sha1_hmac/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.bin create mode 100644 boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.out create mode 100644 boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.axf create mode 100644 boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.bin create mode 100644 boards/dk-tm4c129x/sha1_hmac/readme.txt create mode 100644 boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.axf create mode 100644 boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.bin create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.c create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewd create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewp create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.icf create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ld create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.sct create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvopt create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvproj create mode 100644 boards/dk-tm4c129x/sha1_hmac/sha1_hmac_ccs.cmd create mode 100644 boards/dk-tm4c129x/sha1_hmac/startup_ccs.c create mode 100644 boards/dk-tm4c129x/sha1_hmac/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/sha1_hmac/startup_gcc.c create mode 100644 boards/dk-tm4c129x/sha1_hmac/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/synth/Makefile create mode 100644 boards/dk-tm4c129x/synth/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/synth/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/synth/ccs/.cproject create mode 100644 boards/dk-tm4c129x/synth/ccs/.project create mode 100644 boards/dk-tm4c129x/synth/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/synth/ccs/Debug/synth.bin create mode 100644 boards/dk-tm4c129x/synth/ccs/Debug/synth.out create mode 100644 boards/dk-tm4c129x/synth/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/synth/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/synth/ewarm/Exe/synth.bin create mode 100644 boards/dk-tm4c129x/synth/ewarm/Exe/synth.out create mode 100644 boards/dk-tm4c129x/synth/gcc/synth.axf create mode 100644 boards/dk-tm4c129x/synth/gcc/synth.bin create mode 100644 boards/dk-tm4c129x/synth/readme.txt create mode 100644 boards/dk-tm4c129x/synth/rvmdk/synth.axf create mode 100644 boards/dk-tm4c129x/synth/rvmdk/synth.bin create mode 100644 boards/dk-tm4c129x/synth/startup_ccs.c create mode 100644 boards/dk-tm4c129x/synth/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/synth/startup_gcc.c create mode 100644 boards/dk-tm4c129x/synth/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/synth/synth.c create mode 100644 boards/dk-tm4c129x/synth/synth.ewd create mode 100644 boards/dk-tm4c129x/synth/synth.ewp create mode 100644 boards/dk-tm4c129x/synth/synth.icf create mode 100644 boards/dk-tm4c129x/synth/synth.ld create mode 100644 boards/dk-tm4c129x/synth/synth.sct create mode 100644 boards/dk-tm4c129x/synth/synth.uvopt create mode 100644 boards/dk-tm4c129x/synth/synth.uvproj create mode 100644 boards/dk-tm4c129x/synth/synth_ccs.cmd create mode 100644 boards/dk-tm4c129x/tamper/Makefile create mode 100644 boards/dk-tm4c129x/tamper/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/tamper/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/tamper/ccs/.cproject create mode 100644 boards/dk-tm4c129x/tamper/ccs/.project create mode 100644 boards/dk-tm4c129x/tamper/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/tamper/ccs/Debug/tamper.bin create mode 100644 boards/dk-tm4c129x/tamper/ccs/Debug/tamper.out create mode 100644 boards/dk-tm4c129x/tamper/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/tamper/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.bin create mode 100644 boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.out create mode 100644 boards/dk-tm4c129x/tamper/gcc/tamper.axf create mode 100644 boards/dk-tm4c129x/tamper/gcc/tamper.bin create mode 100644 boards/dk-tm4c129x/tamper/readme.txt create mode 100644 boards/dk-tm4c129x/tamper/rvmdk/tamper.axf create mode 100644 boards/dk-tm4c129x/tamper/rvmdk/tamper.bin create mode 100644 boards/dk-tm4c129x/tamper/startup_ccs.c create mode 100644 boards/dk-tm4c129x/tamper/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/tamper/startup_gcc.c create mode 100644 boards/dk-tm4c129x/tamper/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/tamper/tamper.c create mode 100644 boards/dk-tm4c129x/tamper/tamper.ewd create mode 100644 boards/dk-tm4c129x/tamper/tamper.ewp create mode 100644 boards/dk-tm4c129x/tamper/tamper.icf create mode 100644 boards/dk-tm4c129x/tamper/tamper.ld create mode 100644 boards/dk-tm4c129x/tamper/tamper.sct create mode 100644 boards/dk-tm4c129x/tamper/tamper.uvopt create mode 100644 boards/dk-tm4c129x/tamper/tamper.uvproj create mode 100644 boards/dk-tm4c129x/tamper/tamper_ccs.cmd create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/Makefile create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.out create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.out create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.axf create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/readme.txt create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.axf create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewd create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewp create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.icf create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ld create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.sct create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvopt create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvproj create mode 100644 boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/Makefile create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.cproject create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.project create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.out create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.out create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.axf create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/readme.txt create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.axf create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.bin create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ccs.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/startup_gcc.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.c create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewd create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewp create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.icf create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ld create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.sct create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvopt create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvproj create mode 100644 boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt_ccs.cmd create mode 100644 boards/dk-tm4c129x/timers/Makefile create mode 100644 boards/dk-tm4c129x/timers/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/timers/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/timers/ccs/.cproject create mode 100644 boards/dk-tm4c129x/timers/ccs/.project create mode 100644 boards/dk-tm4c129x/timers/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/timers/ccs/Debug/timers.bin create mode 100644 boards/dk-tm4c129x/timers/ccs/Debug/timers.out create mode 100644 boards/dk-tm4c129x/timers/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/timers/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/timers/ewarm/Exe/timers.bin create mode 100644 boards/dk-tm4c129x/timers/ewarm/Exe/timers.out create mode 100644 boards/dk-tm4c129x/timers/gcc/timers.axf create mode 100644 boards/dk-tm4c129x/timers/gcc/timers.bin create mode 100644 boards/dk-tm4c129x/timers/readme.txt create mode 100644 boards/dk-tm4c129x/timers/rvmdk/timers.axf create mode 100644 boards/dk-tm4c129x/timers/rvmdk/timers.bin create mode 100644 boards/dk-tm4c129x/timers/startup_ccs.c create mode 100644 boards/dk-tm4c129x/timers/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/timers/startup_gcc.c create mode 100644 boards/dk-tm4c129x/timers/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/timers/timers.c create mode 100644 boards/dk-tm4c129x/timers/timers.ewd create mode 100644 boards/dk-tm4c129x/timers/timers.ewp create mode 100644 boards/dk-tm4c129x/timers/timers.icf create mode 100644 boards/dk-tm4c129x/timers/timers.ld create mode 100644 boards/dk-tm4c129x/timers/timers.sct create mode 100644 boards/dk-tm4c129x/timers/timers.uvopt create mode 100644 boards/dk-tm4c129x/timers/timers.uvproj create mode 100644 boards/dk-tm4c129x/timers/timers_ccs.cmd create mode 100644 boards/dk-tm4c129x/uart_echo/Makefile create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/.cproject create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/.project create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.bin create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.out create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/uart_echo/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.bin create mode 100644 boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.out create mode 100644 boards/dk-tm4c129x/uart_echo/gcc/uart_echo.axf create mode 100644 boards/dk-tm4c129x/uart_echo/gcc/uart_echo.bin create mode 100644 boards/dk-tm4c129x/uart_echo/readme.txt create mode 100644 boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.axf create mode 100644 boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.bin create mode 100644 boards/dk-tm4c129x/uart_echo/startup_ccs.c create mode 100644 boards/dk-tm4c129x/uart_echo/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/uart_echo/startup_gcc.c create mode 100644 boards/dk-tm4c129x/uart_echo/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.c create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.ewd create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.ewp create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.icf create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.ld create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.sct create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.uvopt create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo.uvproj create mode 100644 boards/dk-tm4c129x/uart_echo/uart_echo_ccs.cmd create mode 100644 boards/dk-tm4c129x/udma_demo/Makefile create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/.cproject create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/.project create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.bin create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.out create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/udma_demo/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.bin create mode 100644 boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.out create mode 100644 boards/dk-tm4c129x/udma_demo/gcc/udma_demo.axf create mode 100644 boards/dk-tm4c129x/udma_demo/gcc/udma_demo.bin create mode 100644 boards/dk-tm4c129x/udma_demo/readme.txt create mode 100644 boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.axf create mode 100644 boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.bin create mode 100644 boards/dk-tm4c129x/udma_demo/startup_ccs.c create mode 100644 boards/dk-tm4c129x/udma_demo/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/udma_demo/startup_gcc.c create mode 100644 boards/dk-tm4c129x/udma_demo/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.c create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.ewd create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.ewp create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.icf create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.ld create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.sct create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.uvopt create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo.uvproj create mode 100644 boards/dk-tm4c129x/udma_demo/udma_demo_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/Makefile create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.bin create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.out create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.bin create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.out create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.axf create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.bin create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/readme.txt create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.axf create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.bin create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.c create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.h create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.c create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewd create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewp create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.icf create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ld create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.sct create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvopt create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvproj create mode 100644 boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_chid/Makefile create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.bin create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.out create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.bin create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.out create mode 100644 boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.axf create mode 100644 boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.bin create mode 100644 boards/dk-tm4c129x/usb_dev_chid/readme.txt create mode 100644 boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.axf create mode 100644 boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.bin create mode 100644 boards/dk-tm4c129x/usb_dev_chid/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ui.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/ui.h create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewd create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewp create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.icf create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ld create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.sct create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvopt create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvproj create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_keyboard.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_mouse.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_structs.c create mode 100644 boards/dk-tm4c129x/usb_dev_chid/usb_structs.h create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/Makefile create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.bin create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.out create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.bin create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.out create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.axf create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.bin create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/readme.txt create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.axf create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.bin create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.c create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewd create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewp create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.icf create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ld create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.sct create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvopt create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvproj create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.c create mode 100644 boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.h create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/Makefile create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.out create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.out create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.axf create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/readme.txt create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.axf create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.c create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewd create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewp create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.icf create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ld create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.sct create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvopt create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvproj create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.c create mode 100644 boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.h create mode 100644 boards/dk-tm4c129x/usb_dev_msc/Makefile create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.bin create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.out create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.bin create mode 100644 boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.out create mode 100644 boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.axf create mode 100644 boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.bin create mode 100644 boards/dk-tm4c129x/usb_dev_msc/readme.txt create mode 100644 boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.axf create mode 100644 boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.bin create mode 100644 boards/dk-tm4c129x/usb_dev_msc/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_dev_msc/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_dev_msc/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_dev_msc/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.c create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewd create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewp create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.icf create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ld create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.sct create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvopt create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvproj create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.c create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.h create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.c create mode 100644 boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.h create mode 100644 boards/dk-tm4c129x/usb_dev_serial/Makefile create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.bin create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.out create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.bin create mode 100644 boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.out create mode 100644 boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.axf create mode 100644 boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.bin create mode 100644 boards/dk-tm4c129x/usb_dev_serial/readme.txt create mode 100644 boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.axf create mode 100644 boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.bin create mode 100644 boards/dk-tm4c129x/usb_dev_serial/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_dev_serial/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_dev_serial/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_dev_serial/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.c create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewd create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewp create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.icf create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ld create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.sct create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvopt create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvproj create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.c create mode 100644 boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.h create mode 100644 boards/dk-tm4c129x/usb_host_audio/Makefile create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.out create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_host_audio/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.out create mode 100644 boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.axf create mode 100644 boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio/readme.txt create mode 100644 boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.axf create mode 100644 boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_host_audio/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_host_audio/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_host_audio/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.c create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewd create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewp create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.icf create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ld create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.sct create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvopt create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvproj create mode 100644 boards/dk-tm4c129x/usb_host_audio/usb_host_audio_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/Makefile create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.out create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.out create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.axf create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/readme.txt create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.axf create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.bin create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.c create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewd create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewp create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.icf create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ld create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.sct create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvopt create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvproj create mode 100644 boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_host_hub/Makefile create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.bin create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.out create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_host_hub/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.bin create mode 100644 boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.out create mode 100644 boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.axf create mode 100644 boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.bin create mode 100644 boards/dk-tm4c129x/usb_host_hub/readme.txt create mode 100644 boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.axf create mode 100644 boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.bin create mode 100644 boards/dk-tm4c129x/usb_host_hub/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_host_hub/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_host_hub/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_host_hub/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.c create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewd create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewp create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.h create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.icf create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ld create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.sct create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvopt create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvproj create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_hub_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_keyboard.c create mode 100644 boards/dk-tm4c129x/usb_host_hub/usb_host_msc.c create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/Makefile create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.out create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.out create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.axf create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.c create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.h create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/readme.txt create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.axf create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.bin create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.c create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewd create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewp create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.icf create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ld create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.sct create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvopt create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvproj create mode 100644 boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_host_mouse/Makefile create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.out create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.out create mode 100644 boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.axf create mode 100644 boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_host_mouse/mouse_ui.c create mode 100644 boards/dk-tm4c129x/usb_host_mouse/mouse_ui.h create mode 100644 boards/dk-tm4c129x/usb_host_mouse/readme.txt create mode 100644 boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.axf create mode 100644 boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_host_mouse/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_host_mouse/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_host_mouse/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_host_mouse/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.c create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewd create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewp create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.icf create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ld create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.sct create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvopt create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvproj create mode 100644 boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_host_msc/Makefile create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.bin create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.out create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_host_msc/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.bin create mode 100644 boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.out create mode 100644 boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.axf create mode 100644 boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.bin create mode 100644 boards/dk-tm4c129x/usb_host_msc/readme.txt create mode 100644 boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.axf create mode 100644 boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.bin create mode 100644 boards/dk-tm4c129x/usb_host_msc/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_host_msc/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_host_msc/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_host_msc/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.c create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewd create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewp create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.icf create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ld create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.sct create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvopt create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvproj create mode 100644 boards/dk-tm4c129x/usb_host_msc/usb_host_msc_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/Makefile create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.out create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.out create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.axf create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/readme.txt create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.axf create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.bin create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_dev_mouse.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_host_mouse.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.h create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.c create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewd create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewp create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.h create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.icf create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ld create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.sct create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvopt create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvproj create mode 100644 boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_stick_demo/Makefile create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.bin create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.out create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.bin create mode 100644 boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.out create mode 100644 boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.axf create mode 100644 boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.bin create mode 100644 boards/dk-tm4c129x/usb_stick_demo/readme.txt create mode 100644 boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.axf create mode 100644 boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.bin create mode 100644 boards/dk-tm4c129x/usb_stick_demo/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_stick_demo/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_stick_demo/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_stick_demo/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.c create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewd create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewp create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.icf create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ld create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.sct create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvopt create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvproj create mode 100644 boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo_ccs.cmd create mode 100644 boards/dk-tm4c129x/usb_stick_update/Makefile create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/.cproject create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/.project create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.bin create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.out create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/usb_stick_update/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.bin create mode 100644 boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.out create mode 100644 boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.axf create mode 100644 boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.bin create mode 100644 boards/dk-tm4c129x/usb_stick_update/readme.txt create mode 100644 boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.axf create mode 100644 boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.bin create mode 100644 boards/dk-tm4c129x/usb_stick_update/simple_fs.c create mode 100644 boards/dk-tm4c129x/usb_stick_update/simple_fs.h create mode 100644 boards/dk-tm4c129x/usb_stick_update/startup_ccs.c create mode 100644 boards/dk-tm4c129x/usb_stick_update/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/usb_stick_update/startup_gcc.c create mode 100644 boards/dk-tm4c129x/usb_stick_update/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.c create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewd create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewp create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.icf create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ld create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.sct create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvopt create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvproj create mode 100644 boards/dk-tm4c129x/usb_stick_update/usb_stick_update_ccs.cmd create mode 100644 boards/dk-tm4c129x/watchdog/Makefile create mode 100644 boards/dk-tm4c129x/watchdog/ccs/.ccsimportspec create mode 100644 boards/dk-tm4c129x/watchdog/ccs/.ccsproject create mode 100644 boards/dk-tm4c129x/watchdog/ccs/.cproject create mode 100644 boards/dk-tm4c129x/watchdog/ccs/.project create mode 100644 boards/dk-tm4c129x/watchdog/ccs/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.bin create mode 100644 boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.out create mode 100644 boards/dk-tm4c129x/watchdog/ccs/macros.ini_initial create mode 100644 boards/dk-tm4c129x/watchdog/ccs/target_config.ccxml create mode 100644 boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.bin create mode 100644 boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.out create mode 100644 boards/dk-tm4c129x/watchdog/gcc/watchdog.axf create mode 100644 boards/dk-tm4c129x/watchdog/gcc/watchdog.bin create mode 100644 boards/dk-tm4c129x/watchdog/readme.txt create mode 100644 boards/dk-tm4c129x/watchdog/rvmdk/watchdog.axf create mode 100644 boards/dk-tm4c129x/watchdog/rvmdk/watchdog.bin create mode 100644 boards/dk-tm4c129x/watchdog/startup_ccs.c create mode 100644 boards/dk-tm4c129x/watchdog/startup_ewarm.c create mode 100644 boards/dk-tm4c129x/watchdog/startup_gcc.c create mode 100644 boards/dk-tm4c129x/watchdog/startup_rvmdk.S create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.c create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.ewd create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.ewp create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.icf create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.ld create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.sct create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.uvopt create mode 100644 boards/dk-tm4c129x/watchdog/watchdog.uvproj create mode 100644 boards/dk-tm4c129x/watchdog/watchdog_ccs.cmd (limited to 'boards/dk-tm4c129x') diff --git a/boards/dk-tm4c129x/Makefile b/boards/dk-tm4c129x/Makefile new file mode 100644 index 0000000..f95743a --- /dev/null +++ b/boards/dk-tm4c129x/Makefile @@ -0,0 +1,108 @@ +#****************************************************************************** +# +# Makefile - Rules for building the dk-tm4c129x examples. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# A list of the directories containing the examples. +# +DIRS=aes_cbc_decrypt \ + aes_cbc_encrypt \ + aes_ccm_decrypt \ + aes_ccm_encrypt \ + aes_cmac \ + aes_ecb_decrypt \ + aes_ecb_encrypt \ + aes_gcm_decrypt \ + aes_gcm_encrypt \ + bitband \ + ble_btool \ + ble_central \ + blinky \ + boot_demo_uart \ + boot_demo_usb \ + boot_demo_emac_flash \ + boot_demo_flash \ + boot_emac_flash \ + calibrate \ + crc32 \ + enet_io \ + enet_lwip \ + enet_uip \ + fontview \ + freertos_demo \ + gpio_jtag \ + grlib_demo \ + grlib_driver_test \ + hello \ + hello_widget \ + hibernate \ + interrupts \ + lang_demo \ + mpu_fault \ + qs_weather \ + scribble \ + sd_card \ + sha1_hash \ + sha1_hmac \ + synth \ + tamper \ + tdes_cbc_decrypt \ + tdes_cbc_encrypt \ + timers \ + uart_echo \ + udma_demo \ + usb_dev_bulk \ + usb_dev_chid \ + usb_dev_gamepad \ + usb_dev_keyboard \ + usb_dev_msc \ + usb_dev_serial \ + usb_host_audio \ + usb_host_audio_in \ + usb_host_hub \ + usb_host_keyboard \ + usb_host_mouse \ + usb_host_msc \ + usb_otg_mouse \ + usb_stick_demo \ + usb_stick_update \ + watchdog + +# +# The default rule, which causes the examples to be built. +# +all: + @for i in ${DIRS}; \ + do \ + make -C $${i} || exit $$?; \ + done + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${wildcard *~} __dummy__ + @-for i in ${DIRS}; \ + do \ + make -C $${i} clean; \ + done diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/Makefile b/boards/dk-tm4c129x/aes_cbc_decrypt/Makefile new file mode 100644 index 0000000..13557e9 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 CBC Decryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 CBC Decryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_cbc_decrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 CBC Decryption Demo. +# +${COMPILER}/aes_cbc_decrypt.axf: ${COMPILER}/aes_cbc_decrypt.o +${COMPILER}/aes_cbc_decrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_cbc_decrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_cbc_decrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_cbc_decrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_cbc_decrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_cbc_decrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_cbc_decrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_cbc_decrypt.axf: aes_cbc_decrypt.ld +SCATTERgcc_aes_cbc_decrypt=aes_cbc_decrypt.ld +ENTRY_aes_cbc_decrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.c b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.c new file mode 100644 index 0000000..abdbbb5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.c @@ -0,0 +1,691 @@ +//***************************************************************************** +// +// aes_cbc_decrypt.c - Simple AES128 and AES256 CBC decryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES CBC Decryption Demo (aes_cbc_decrypt)

+//! +//! Simple demo showing an decryption operation using the AES128 and AES256 +//! modules in CBC mode. A number of blocks of data are decrypted. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Sample plaintext, ciphertext, and key from the NIST SP 800-38A document. +// +//***************************************************************************** +uint32_t g_pui32AESPlainText[16] = +{ + 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 +}; + +uint32_t g_pui32AES128Key[4] = +{ + 0x16157e2b, 0xa6d2ae28, 0x8815f7ab, 0x3c4fcf09 +}; + +uint32_t g_pui32AES256Key[8] = +{ + 0x10eb3d60, 0xbe71ca15, 0xf0ae732b, 0x81777d85, + 0x072c351f, 0xd708613b, 0xa310982d, 0xf4df1409 +}; + +uint32_t g_pui32AESIV[4] = +{ + 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c +}; + +uint32_t g_pui32AES128CipherText[16] = +{ + 0xacab4976, 0x46b21981, 0x9b8ee9ce, 0x7d19e912, + 0x9bcb8650, 0xee197250, 0x3a11db95, 0xb2787691, + 0xb8d6be73, 0x3b74c1e3, 0x9ee61671, 0x16952222, + 0xa1caf13f, 0x09ac1f68, 0x30ca0e12, 0xa7e18675 +}; + +uint32_t g_pui32AES256CipherText[16] = +{ + 0x044c8cf5, 0xbaf1e5d6, 0xfbab9e77, 0xd6fb7b5f, + 0x964efc9c, 0x8d80db7e, 0x7b779f67, 0x7d2c70c6, + 0x6933f239, 0xcfbad9a9, 0x63e230a5, 0x61142304, + 0xe205ebb2, 0xfce99bc3, 0x07196cda, 0x1b9d6a8c +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an decryption operation. +// +//***************************************************************************** +bool +AESCBCDecrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t *pui32IV, uint32_t ui32Length, + bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_DECRYPT | + AES_CFG_MODE_CBC)); + + // + // Write the initial value. + // + AESIVSet(AES_BASE, pui32IV); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the decryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the length registers to start the process. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + else + { + // + // Perform the decryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example decrypts blocks of plaintext using AES128 and AES256 in CBC +// mode. It does the decryption first without uDMA and then with uDMA. +// The results are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32PlainText[16], ui32Errors, ui32Idx, ui32SysClock; + uint32_t ui32Keysize; + tContext sContext; + uint8_t ui8Loop; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-cbc-decrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES CBC decryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Perform the same operation with 128bit key first, then 256bit key. + // + for(ui8Loop = 0; ui8Loop < 2; ui8Loop++) + { + + ui32Keysize = (ui8Loop == 0)?AES_CFG_KEY_SIZE_128BIT:AES_CFG_KEY_SIZE_256BIT; + UARTprintf("\nKey Size: %sbit\n", ((ui8Loop == 0)?"128":"256")); + + // + // Clear the array containing the plaintext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + + // + // Perform the decryption without uDMA. + // + UARTprintf("Performing decryption without uDMA.\n"); + AESCBCDecrypt(ui32Keysize, + (ui8Loop == 0)?g_pui32AES128CipherText:g_pui32AES256CipherText, + pui32PlainText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + g_pui32AESIV, 64, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32PlainText[ui32Idx] != g_pui32AESPlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, g_pui32AESPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the plaintext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + + // + // Perform the decryption with uDMA. + // + UARTprintf("Performing decryption with uDMA.\n"); + AESCBCDecrypt(ui32Keysize, + (ui8Loop == 0)?g_pui32AES128CipherText:g_pui32AES256CipherText, + pui32PlainText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + g_pui32AESIV, 64, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32PlainText[ui32Idx] != g_pui32AESPlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, g_pui32AESPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewd b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewp b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewp new file mode 100644 index 0000000..fda02f2 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_cbc_decrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.icf b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.icf new file mode 100644 index 0000000..6d46828 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_cbc_decrypt.icf - Linker configuration file for aes_cbc_decrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ld b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ld new file mode 100644 index 0000000..a02ae24 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_cbc_decrypt.ld - Linker configuration file for aes_cbc_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.sct b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.sct new file mode 100644 index 0000000..b751064 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_cbc_decrypt.sct - Linker configuration file for aes_cbc_decrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvopt b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvopt new file mode 100644 index 0000000..697a01f --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_cbc_decrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_cbc_decrypt.c + aes_cbc_decrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvproj b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvproj new file mode 100644 index 0000000..63b30c8 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_cbc_decrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_cbc_decrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_cbc_decrypt.bin .\rvmdk\aes_cbc_decrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_cbc_decrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_cbc_decrypt.c + 1 + .\aes_cbc_decrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt_ccs.cmd b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt_ccs.cmd new file mode 100644 index 0000000..246a5b1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_cbc_decrypt_ccs.cmd - CCS linker configuration file for aes_cbc_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..3d917fc --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.cproject new file mode 100644 index 0000000..84d4c02 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.project b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.project new file mode 100644 index 0000000..766fee7 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_cbc_decrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_cbc_decrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt.c + + + aes_cbc_decrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cbc_decrypt/aes_cbc_decrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.bin b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.bin new file mode 100644 index 0000000..5441f2e Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.out b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.out new file mode 100644 index 0000000..2ef4b5c Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/Debug/aes_cbc_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.bin b/boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.bin new file mode 100644 index 0000000..0e54af9 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.out b/boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.out new file mode 100644 index 0000000..3518b29 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/ewarm/Exe/aes_cbc_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.axf b/boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.axf new file mode 100644 index 0000000..301aa2b Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.bin b/boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.bin new file mode 100644 index 0000000..54fb1d6 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/gcc/aes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/readme.txt b/boards/dk-tm4c129x/aes_cbc_decrypt/readme.txt new file mode 100644 index 0000000..00e77da --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/readme.txt @@ -0,0 +1,27 @@ +AES CBC Decryption Demo + +Simple demo showing an decryption operation using the AES128 and AES256 +modules in CBC mode. A number of blocks of data are decrypted. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.axf b/boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.axf new file mode 100644 index 0000000..5b7a2ad Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.bin b/boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.bin new file mode 100644 index 0000000..90b646f Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_decrypt/rvmdk/aes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_decrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_decrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/Makefile b/boards/dk-tm4c129x/aes_cbc_encrypt/Makefile new file mode 100644 index 0000000..ced6ac1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 CBC Encryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 CBC Encryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_cbc_encrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 CBC Encryption Demo. +# +${COMPILER}/aes_cbc_encrypt.axf: ${COMPILER}/aes_cbc_encrypt.o +${COMPILER}/aes_cbc_encrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_cbc_encrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_cbc_encrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_cbc_encrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_cbc_encrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_cbc_encrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_cbc_encrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_cbc_encrypt.axf: aes_cbc_encrypt.ld +SCATTERgcc_aes_cbc_encrypt=aes_cbc_encrypt.ld +ENTRY_aes_cbc_encrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.c b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.c new file mode 100644 index 0000000..9639e8d --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.c @@ -0,0 +1,689 @@ +//***************************************************************************** +// +// aes_cbc_encrypt.c - Simple AES128 and AES256 CBC encryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES CBC Encryption Demo (ae_cbc_encrypt)

+//! +//! Simple demo showing an encryption operation using the AES128 and AES256 +//! modules in CBC mode. A number of blocks of data are encrypted. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Sample plaintext, ciphertext, and key from the NIST SP 800-38A document. +// +//***************************************************************************** +uint32_t g_pui32AESPlainText[16] = +{ + 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 +}; + +uint32_t g_pui32AES128Key[4] = +{ + 0x16157e2b, 0xa6d2ae28, 0x8815f7ab, 0x3c4fcf09 +}; + +uint32_t g_pui32AES256Key[8] = +{ + 0x10eb3d60, 0xbe71ca15, 0xf0ae732b, 0x81777d85, + 0x072c351f, 0xd708613b, 0xa310982d, 0xf4df1409 +}; + +uint32_t g_pui32AESIV[4] = +{ + 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c +}; + +uint32_t g_pui32AES128CipherText[16] = +{ + 0xacab4976, 0x46b21981, 0x9b8ee9ce, 0x7d19e912, + 0x9bcb8650, 0xee197250, 0x3a11db95, 0xb2787691, + 0xb8d6be73, 0x3b74c1e3, 0x9ee61671, 0x16952222, + 0xa1caf13f, 0x09ac1f68, 0x30ca0e12, 0xa7e18675 +}; + +uint32_t g_pui32AES256CipherText[16] = +{ + 0x044c8cf5, 0xbaf1e5d6, 0xfbab9e77, 0xd6fb7b5f, + 0x964efc9c, 0x8d80db7e, 0x7b779f67, 0x7d2c70c6, + 0x6933f239, 0xcfbad9a9, 0x63e230a5, 0x61142304, + 0xe205ebb2, 0xfce99bc3, 0x07196cda, 0x1b9d6a8c +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an encryption operation. +// +//***************************************************************************** +bool +AESCBCEncrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t *pui32IV, uint32_t ui32Length, + bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_CBC)); + + // + // Write the initial value. + // + AESIVSet(AES_BASE, pui32IV); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the encryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the length registers to start the process. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + else + { + // + // Perform the encryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example encrypts blocks of plaintext using AES128 and AES256 in CBC +// mode. It does the encryption first without uDMA and then with uDMA. +// The results are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32CipherText[16], ui32Errors, ui32Idx, ui32SysClock; + uint32_t ui32Keysize; + uint32_t *pui32CipherTextExp; + tContext sContext; + uint8_t ui8Loop; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-cbc-encrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES CBC encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Perform the same operation with 128bit key first, then 256bit key. + // + for(ui8Loop = 0; ui8Loop < 2; ui8Loop++) + { + + ui32Keysize = (ui8Loop == 0)?AES_CFG_KEY_SIZE_128BIT:AES_CFG_KEY_SIZE_256BIT; + UARTprintf("\nKey Size: %sbit\n", ((ui8Loop == 0)?"128":"256")); + + // + // Clear the array containing the cipher text. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Perform the encryption without uDMA. + // + UARTprintf("Performing encryption without uDMA.\n"); + AESCBCEncrypt(ui32Keysize, g_pui32AESPlainText, pui32CipherText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + g_pui32AESIV, 64, false); + + // + // Check the result. + // + pui32CipherTextExp = (ui8Loop == 0)?g_pui32AES128CipherText: + g_pui32AES256CipherText; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32CipherText[ui32Idx] != pui32CipherTextExp[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32CipherTextExp[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Perform the encryption with uDMA. + // + UARTprintf("Performing encryption with uDMA.\n"); + AESCBCEncrypt(ui32Keysize, g_pui32AESPlainText, pui32CipherText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + g_pui32AESIV, 64, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32CipherText[ui32Idx] != pui32CipherTextExp[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32CipherTextExp[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewd b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewp b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewp new file mode 100644 index 0000000..475a7a9 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_cbc_encrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.icf b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.icf new file mode 100644 index 0000000..0eda0a7 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_cbc_encrypt.icf - Linker configuration file for aes_cbc_encrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ld b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ld new file mode 100644 index 0000000..0181206 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_cbc_encrypt.ld - Linker configuration file for aes_cbc_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.sct b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.sct new file mode 100644 index 0000000..7deb5d0 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_cbc_encrypt.sct - Linker configuration file for aes_cbc_encrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvopt b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvopt new file mode 100644 index 0000000..0a6fc81 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_cbc_encrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_cbc_encrypt.c + aes_cbc_encrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvproj b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvproj new file mode 100644 index 0000000..bc27a06 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_cbc_encrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_cbc_encrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_cbc_encrypt.bin .\rvmdk\aes_cbc_encrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_cbc_encrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_cbc_encrypt.c + 1 + .\aes_cbc_encrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt_ccs.cmd b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt_ccs.cmd new file mode 100644 index 0000000..1b9d5ff --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_cbc_encrypt_ccs.cmd - CCS linker configuration file for aes_cbc_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..00f8092 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.cproject new file mode 100644 index 0000000..e732f64 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.project b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.project new file mode 100644 index 0000000..245d996 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_cbc_encrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_cbc_encrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt.c + + + aes_cbc_encrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cbc_encrypt/aes_cbc_encrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.bin b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.bin new file mode 100644 index 0000000..cf4b672 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.out b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.out new file mode 100644 index 0000000..5243f8c Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/Debug/aes_cbc_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.bin b/boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.bin new file mode 100644 index 0000000..a132fd6 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.out b/boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.out new file mode 100644 index 0000000..4c41a75 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/ewarm/Exe/aes_cbc_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.axf b/boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.axf new file mode 100644 index 0000000..18f8202 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.bin b/boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.bin new file mode 100644 index 0000000..a4da3c3 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/gcc/aes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/readme.txt b/boards/dk-tm4c129x/aes_cbc_encrypt/readme.txt new file mode 100644 index 0000000..be052e5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/readme.txt @@ -0,0 +1,27 @@ +AES CBC Encryption Demo + +Simple demo showing an encryption operation using the AES128 and AES256 +modules in CBC mode. A number of blocks of data are encrypted. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.axf b/boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.axf new file mode 100644 index 0000000..191b9c5 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.bin b/boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.bin new file mode 100644 index 0000000..f680ff5 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cbc_encrypt/rvmdk/aes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cbc_encrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cbc_encrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/Makefile b/boards/dk-tm4c129x/aes_ccm_decrypt/Makefile new file mode 100644 index 0000000..2658b4e --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 CCM Decryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 CCM Decryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_ccm_decrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 CCM Decryption Demo. +# +${COMPILER}/aes_ccm_decrypt.axf: ${COMPILER}/aes_ccm_decrypt.o +${COMPILER}/aes_ccm_decrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_ccm_decrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_ccm_decrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_ccm_decrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_ccm_decrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_ccm_decrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_ccm_decrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_ccm_decrypt.axf: aes_ccm_decrypt.ld +SCATTERgcc_aes_ccm_decrypt=aes_ccm_decrypt.ld +ENTRY_aes_ccm_decrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.c b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.c new file mode 100644 index 0000000..4892556 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.c @@ -0,0 +1,1036 @@ +//***************************************************************************** +// +// aes_ccm_decrypt.c - Simple AES128 and AES256 CCM decryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/fpu.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 CCM Decryption Demo (aes_ccm_decrypt)

+//! +//! Simple demo showing an decryption operation using the AES128 and AES256 +//! modules in CCM mode. A set of test cases are decrypted. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Test cases from the NIST SP 800-38C document and proposals for IEEE P1619.1 +// Test Vectors +// +//***************************************************************************** +typedef struct AESTestVectorStruct +{ + uint32_t ui32KeySize; + uint32_t pui32Key[8]; + uint32_t ui32NonceLength; + uint32_t pui32Nonce[4]; + uint32_t ui32PayloadLength; + uint32_t pui32Payload[16]; + uint32_t ui32AuthDataLength; + uint32_t pui32AuthData[16]; + uint32_t pui32CipherText[16]; + uint32_t ui32TagLength; + uint32_t pui32Tag[4]; +} + +tAESCCMTestVector; + +tAESCCMTestVector g_psAESCCMTestVectors[] = +{ + // + // Test Case #1 + // The data in these test cases have been modified to be in big endian + // format as required by the AES module. This was done to simplify writes + // and comparisons. + // Also, The test vector is formatted in the document in a way that the + // ciphertext is the concatenation of the ciphertext and the MAC. they + // have been separated to match the operation of the AES module. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c }, // Key + 7, // Nonce Length + { 0x13121110, 0x00161514, 0x00000000, 0x00000000 }, // Nonce + 4, // Payload Length + { 0x23222120, 0x00000000, 0x00000000, 0x00000000 }, // Payload + 8, // Auth Data Length + { 0x03020100, 0x07060504, 0x00000000, 0x00000000 }, // Auth Data + { 0x5b016271, 0x00000000, 0x00000000, 0x00000000 }, // CipherText + 4, // Tag Length + { 0x5d25ac4d, 0x00000000, 0x00000000, 0x00000000 } // Tag + }, + + // + // Test Case #2 + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c }, // Key + 8, // Nonce Length + { 0x13121110, 0x17161514, 0x00000000, 0x00000000 }, // Nonce + 16, // Payload Length + { 0x23222120, 0x27262524, 0x2b2a2928, 0x2f2e2d2c }, // Payload + 16, // Auth Data Length + { 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c }, // Auth Data + { 0xe0f0a1d2, 0x625fea51, 0x92771a08, 0x3d593d07 }, // CipherText + 6, // Tag Length + { 0xbf4fc61f, 0x0000cdac, 0x00000000, 0x00000000 } // Tag + }, + + // + // Test Case #3 + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c }, // Key + 12, // Nonce Length + { 0x13121110, 0x17161514, 0x1b1a1918, 0x00000000 }, // Nonce + 24, // Payload Length + { 0x23222120, 0x27262524, 0x2b2a2928, 0x2f2e2d2c, // Payload + 0x33323130, 0x37363534, 0x00000000, 0x00000000 }, + 20, // Auth Data Length + { 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c, // Auth Data + 0x13121110, 0x00000000, 0x00000000, 0x00000000 }, + { 0xa901b2e3, 0x7a1ab7f5, 0xecea1c9b, 0x0be797cd, // CipherText + 0xd9aa7661, 0xa58a42a4, 0x00000000, 0x00000000 }, + 8, // Tag Length + { 0xfb924348, 0x5199b0c1, 0x00000000, 0x00000000 } // Tag + }, + + // + // The following test cases use 256bit key, and they are taken from + // proposals for IEEE P1619.1 Test Vectors. + // + // Test Case #4 + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0xb21576fb, 0x1d89803d, 0x0b9870d4, 0xc88495c7, // Key + 0xce64fbb2, 0x4d8f9760, 0x5ae4fc17, 0xb730e849 }, + 12, // Nonce Length + { 0x63a3d1db, 0xb4b72460, 0x6f7dda02, 0x00000000 }, // Nonce + 16, // Payload Length + { 0x8e3445a8, 0xf1b5c5c8, 0x760ef526, 0x1e1bfdfe, // Payload + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, // Auth Data Length + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, // Auth Data + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x611288cc, 0x72faa7c6, 0x39176ab9, 0x7f276b17, // CipherText + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 16, // Tag Length + { 0x14e17234, 0xbe0c2c5f, 0x06496314, 0x23e4f02c } // Tag + }, + + // + // Test Case #5 + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c, // Key + 0x53525150, 0x57565554, 0x5b5a5958, 0x5f5e5d5c }, + 12, // Nonce Length + { 0x13121110, 0x17161514, 0x1b1a1918, 0x00000000 }, // Nonce + 24, // Payload Length + { 0x23222120, 0x27262524, 0x2b2a2928, 0x2f2e2d2c, // Payload + 0x33323130, 0x37363534, 0x00000000, 0x00000000 }, + 20, // Auth Data Length + { 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c, // Auth Data + 0x13121110, 0x00000000, 0x00000000, 0x00000000 }, + { 0xae83f804, 0x3007bdb3, 0xb60bf5ea, 0x21a24fde, // CipherText + 0xe4e43420, 0xe5750e1b, 0x00000000, 0x00000000 }, + 16, // Tag Length + { 0x3a3fba9b, 0x39327f10, 0x299063bd, 0x7103f823 } // Tag + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an CCM decryption operation. +// +//***************************************************************************** +bool +AESCCMDecrypt(uint32_t ui32Keysize, uint32_t *pui32Key, + uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t ui32DataLength, uint32_t *pui32Nonce, + uint32_t ui32NonceLength, uint32_t *pui32AuthData, + uint32_t ui32AuthDataLength, uint32_t *pui32Tag, + uint32_t ui32TagLength, bool bUseDMA) +{ + uint32_t pui32IV[4], ui32Idx; + uint32_t ui32M, ui32L; + uint8_t *pui8Nonce, *pui8IV; + + // + // Determine the value of M. It is determined using + // the tag length. + // + if(ui32TagLength == 4) + { + ui32M = AES_CFG_CCM_M_4; + } + else if(ui32TagLength == 6) + { + ui32M = AES_CFG_CCM_M_6; + } + else if(ui32TagLength == 8) + { + ui32M = AES_CFG_CCM_M_8; + } + else if(ui32TagLength == 10) + { + ui32M = AES_CFG_CCM_M_10; + } + else if(ui32TagLength == 12) + { + ui32M = AES_CFG_CCM_M_12; + } + else if(ui32TagLength == 14) + { + ui32M = AES_CFG_CCM_M_14; + } + else if(ui32TagLength == 16) + { + ui32M = AES_CFG_CCM_M_16; + } + else + { + UARTprintf("Unexpected tag length.\n"); + return(false); + } + + // + // Determine the value of L. This is determined by using + // the value of q from the NIST document: n + q = 15 + // + if(ui32NonceLength == 7) + { + ui32L = AES_CFG_CCM_L_8; + } + else if(ui32NonceLength == 8) + { + ui32L = AES_CFG_CCM_L_7; + } + else if(ui32NonceLength == 9) + { + ui32L = AES_CFG_CCM_L_6; + } + else if(ui32NonceLength == 10) + { + ui32L = AES_CFG_CCM_L_5; + } + else if(ui32NonceLength == 11) + { + ui32L = AES_CFG_CCM_L_4; + } + else if(ui32NonceLength == 12) + { + ui32L = AES_CFG_CCM_L_3; + } + else if(ui32NonceLength == 13) + { + ui32L = AES_CFG_CCM_L_2; + } + else if(ui32NonceLength == 14) + { + ui32L = AES_CFG_CCM_L_1; + } + else + { + UARTprintf("Unexpected nonce length.\n"); + return(false); + } + + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_DECRYPT | + AES_CFG_CTR_WIDTH_128 | + AES_CFG_MODE_CCM | ui32L | ui32M)); + + // + // Determine the value to be written in the initial value registers. It is + // the concatenation of 5 bits of zero, 3 bits of L, nonce, and the counter + // value. First, clear the contents of the IV. + // + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32IV[ui32Idx] = 0; + } + + // + // Now find the binary value of L. + // + if(ui32L == AES_CFG_CCM_L_8) + { + pui32IV[0] = 0x7; + } + else if(ui32L == AES_CFG_CCM_L_7) + { + pui32IV[0] = 0x6; + } + else if(ui32L == AES_CFG_CCM_L_6) + { + pui32IV[0] = 0x5; + } + else if(ui32L == AES_CFG_CCM_L_5) + { + pui32IV[0] = 0x4; + } + else if(ui32L == AES_CFG_CCM_L_4) + { + pui32IV[0] = 0x3; + } + else if(ui32L == AES_CFG_CCM_L_3) + { + pui32IV[0] = 0x2; + } + else if(ui32L == AES_CFG_CCM_L_2) + { + pui32IV[0] = 0x1; + } + + // + // Finally copy the contents of the nonce into the IV. Convert + // the pointers to simplify the copying. + // + pui8Nonce = (uint8_t *)pui32Nonce; + pui8IV = (uint8_t *)pui32IV; + for(ui32Idx = 0; ui32Idx < ui32NonceLength; ui32Idx++) + { + pui8IV[ui32Idx + 1] = pui8Nonce[ui32Idx]; + } + + // + // Write the initial value. + // + ROM_AESIVSet(AES_BASE, pui32IV); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the decryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy auth data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + if(ui32AuthDataLength) + { + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32AuthData, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32AuthDataLength) / 4); + } + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32DataLength) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the length registers. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32DataLength); + + // + // Write the auth length registers to start the process. + // + ROM_AESAuthLengthSet(AES_BASE, ui32AuthDataLength); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests. + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Setup the uDMA to copy the plaintext data. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32DataLength) / 4); + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + + // + // Read the tag out. + // + ROM_AESTagRead(AES_BASE, pui32Tag); + } + else + { + // + // Perform the decryption. + // + ROM_AESDataProcessAuth(AES_BASE, pui32Src, pui32Dst, ui32DataLength, + pui32AuthData, ui32AuthDataLength, pui32Tag); + } + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable the GPIO Peripheral used by the UART. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure GPIO Pins for UART mode. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example decrypts a block of payload using AES128 in CCM mode. It +// does the decryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32Payload[16], pui32Tag[4], ui32Errors, ui32Idx; + uint32_t ui32PayloadLength, ui32TagLength; + uint32_t ui32NonceLength, ui32AuthDataLength; + uint32_t *pui32Nonce, *pui32AuthData, ui32SysClock; + uint32_t *pui32Key, *pui32ExpPayload, *pui32CipherText; + uint32_t ui32Keysize; + uint8_t ui8Vector; + uint8_t *pui8ExpTag, *pui8Tag; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-ccm-decrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + pui8Tag = (uint8_t *)pui32Tag; + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Configure the system clock to run off the internal 16MHz oscillator. + // + MAP_SysCtlClockFreqSet(SYSCTL_OSC_INT | SYSCTL_USE_OSC, 16000000); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES CCM decryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32Payload[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Loop through all the given vectors. + // + for(ui8Vector = 0; + (ui8Vector < + (sizeof(g_psAESCCMTestVectors) / sizeof(g_psAESCCMTestVectors[0]))) && + (ui32Errors == 0); + ui8Vector++) + { + UARTprintf("Starting vector #%d\n", ui8Vector); + + // + // Get the current vector's data members. + // + ui32Keysize = g_psAESCCMTestVectors[ui8Vector].ui32KeySize; + pui32Key = g_psAESCCMTestVectors[ui8Vector].pui32Key; + pui32ExpPayload = g_psAESCCMTestVectors[ui8Vector].pui32Payload; + ui32PayloadLength = + g_psAESCCMTestVectors[ui8Vector].ui32PayloadLength; + pui32AuthData = g_psAESCCMTestVectors[ui8Vector].pui32AuthData; + ui32AuthDataLength = + g_psAESCCMTestVectors[ui8Vector].ui32AuthDataLength; + pui32CipherText = + g_psAESCCMTestVectors[ui8Vector].pui32CipherText; + pui8ExpTag = (uint8_t *)g_psAESCCMTestVectors[ui8Vector].pui32Tag; + ui32TagLength = g_psAESCCMTestVectors[ui8Vector].ui32TagLength; + pui32Nonce = g_psAESCCMTestVectors[ui8Vector].pui32Nonce; + ui32NonceLength = + g_psAESCCMTestVectors[ui8Vector].ui32NonceLength; + + // + // Perform the decryption without uDMA. + // + UARTprintf("Performing decryption without uDMA.\n"); + AESCCMDecrypt(ui32Keysize, pui32Key, pui32CipherText, + pui32Payload, ui32PayloadLength, pui32Nonce, + ui32NonceLength, pui32AuthData, ui32AuthDataLength, + pui32Tag, ui32TagLength, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < (ui32PayloadLength / 4); ui32Idx++) + { + if(pui32Payload[ui32Idx] != pui32ExpPayload[ui32Idx]) + { + UARTprintf("Payload mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpPayload[ui32Idx], + pui32Payload[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < ui32TagLength; ui32Idx++) + { + if(pui8Tag[ui32Idx] != pui8ExpTag[ui32Idx]) + { + UARTprintf("Tag mismatch on byte %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui8ExpTag[ui32Idx], + pui8Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32Payload[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Perform the decryption with uDMA. + // + UARTprintf("Performing decryption with uDMA.\n"); + AESCCMDecrypt(ui32Keysize, pui32Key, pui32CipherText, + pui32Payload, ui32PayloadLength, pui32Nonce, + ui32NonceLength, pui32AuthData, ui32AuthDataLength, + pui32Tag, ui32TagLength, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < (ui32PayloadLength / 4); ui32Idx++) + { + if(pui32Payload[ui32Idx] != pui32ExpPayload[ui32Idx]) + { + UARTprintf("Payload mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpPayload[ui32Idx], + pui32Payload[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < ui32TagLength; ui32Idx++) + { + if(pui8Tag[ui32Idx] != pui8ExpTag[ui32Idx]) + { + UARTprintf("Tag mismatch on byte %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui8ExpTag[ui32Idx], + pui8Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32Payload[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + } + + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewd b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewp b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewp new file mode 100644 index 0000000..462ec0a --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_ccm_decrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.icf b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.icf new file mode 100644 index 0000000..5210cbd --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_ccm_decrypt.icf - Linker configuration file for aes_ccm_decrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ld b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ld new file mode 100644 index 0000000..2685efe --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_ccm_decrypt.ld - Linker configuration file for aes_ccm_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.sct b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.sct new file mode 100644 index 0000000..b88ca10 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_ccm_decrypt.sct - Linker configuration file for aes_ccm_decrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvopt b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvopt new file mode 100644 index 0000000..e9d0319 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_ccm_decrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_ccm_decrypt.c + aes_ccm_decrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvproj b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvproj new file mode 100644 index 0000000..fe7fcb9 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_ccm_decrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_ccm_decrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_ccm_decrypt.bin .\rvmdk\aes_ccm_decrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_ccm_decrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_ccm_decrypt.c + 1 + .\aes_ccm_decrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt_ccs.cmd b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt_ccs.cmd new file mode 100644 index 0000000..af95ed4 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_ccm_decrypt_ccs.cmd - CCS linker configuration file for aes_ccm_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..a198e66 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.cproject new file mode 100644 index 0000000..95e1d41 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.project b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.project new file mode 100644 index 0000000..645e5f9 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_ccm_decrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_ccm_decrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt.c + + + aes_ccm_decrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ccm_decrypt/aes_ccm_decrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.bin b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.bin new file mode 100644 index 0000000..dcb8dc9 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.out b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.out new file mode 100644 index 0000000..5118c2a Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/Debug/aes_ccm_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.bin b/boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.bin new file mode 100644 index 0000000..86f3a90 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.out b/boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.out new file mode 100644 index 0000000..8f1d11f Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/ewarm/Exe/aes_ccm_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.axf b/boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.axf new file mode 100644 index 0000000..7f2e538 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.bin b/boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.bin new file mode 100644 index 0000000..5ffd15e Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/gcc/aes_ccm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/readme.txt b/boards/dk-tm4c129x/aes_ccm_decrypt/readme.txt new file mode 100644 index 0000000..5ff40e6 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/readme.txt @@ -0,0 +1,27 @@ +AES128 and AES256 CCM Decryption Demo + +Simple demo showing an decryption operation using the AES128 and AES256 +modules in CCM mode. A set of test cases are decrypted. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.axf b/boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.axf new file mode 100644 index 0000000..2d30b31 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.bin b/boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.bin new file mode 100644 index 0000000..1435946 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_decrypt/rvmdk/aes_ccm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_decrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_decrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/Makefile b/boards/dk-tm4c129x/aes_ccm_encrypt/Makefile new file mode 100644 index 0000000..ce98f78 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 CCM Encryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 CCM Encryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_ccm_encrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 CCM Encryption Demo. +# +${COMPILER}/aes_ccm_encrypt.axf: ${COMPILER}/aes_ccm_encrypt.o +${COMPILER}/aes_ccm_encrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_ccm_encrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_ccm_encrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_ccm_encrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_ccm_encrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_ccm_encrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_ccm_encrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_ccm_encrypt.axf: aes_ccm_encrypt.ld +SCATTERgcc_aes_ccm_encrypt=aes_ccm_encrypt.ld +ENTRY_aes_ccm_encrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.c b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.c new file mode 100644 index 0000000..e2e32ce --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.c @@ -0,0 +1,1031 @@ +//***************************************************************************** +// +// aes_ccm_encrypt.c - Simple AES128 CCM encryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/fpu.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 CCM Encryption Demo (aes_ccm_encrypt)

+//! +//! Simple demo showing an encryption operation using the AES128 and AES256 +//! modules in CCM mode. A set of test cases are encrypted. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Test cases from the NIST SP 800-38C document and proposals for IEEE P1619.1 +// Test Vectors +// +//***************************************************************************** +typedef struct AESTestVectorStruct +{ + uint32_t ui32KeySize; + uint32_t pui32Key[8]; + uint32_t ui32NonceLength; + uint32_t pui32Nonce[4]; + uint32_t ui32PayloadLength; + uint32_t pui32Payload[16]; + uint32_t ui32AuthDataLength; + uint32_t pui32AuthData[16]; + uint32_t pui32CipherText[16]; + uint32_t ui32TagLength; + uint32_t pui32Tag[4]; +} + +tAESCCMTestVector; + +tAESCCMTestVector g_psAESCCMTestVectors[] = +{ + // + // Test Case #1 + // The data in these test cases have been modified to be in big endian + // format as required by the AES module. This was done to simplify writes + // and comparisons. + // Also, The test vector is formatted in the document in a way that the + // ciphertext is the concatenation of the ciphertext and the MAC. they + // have been separated to match the operation of the AES module. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c }, // Key + 7, // Nonce Length + { 0x13121110, 0x00161514, 0x00000000, 0x00000000 }, // Nonce + 4, // Payload Length + { 0x23222120, 0x00000000, 0x00000000, 0x00000000 }, // Payload + 8, // Auth Data Length + { 0x03020100, 0x07060504, 0x00000000, 0x00000000 }, // Auth Data + { 0x5b016271, 0x00000000, 0x00000000, 0x00000000 }, // CipherText + 4, // Tag Length + { 0x5d25ac4d, 0x00000000, 0x00000000, 0x00000000 } // Tag + }, + + // + // Test Case #2 + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c }, // Key + 8, // Nonce Length + { 0x13121110, 0x17161514, 0x00000000, 0x00000000 }, // Nonce + 16, // Payload Length + { 0x23222120, 0x27262524, 0x2b2a2928, 0x2f2e2d2c }, // Payload + 16, // Auth Data Length + { 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c }, // Auth Data + { 0xe0f0a1d2, 0x625fea51, 0x92771a08, 0x3d593d07 }, // CipherText + 6, // Tag Length + { 0xbf4fc61f, 0x0000cdac, 0x00000000, 0x00000000 } // Tag + }, + + // + // Test Case #3 + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c }, // Key + 12, // Nonce Length + { 0x13121110, 0x17161514, 0x1b1a1918, 0x00000000 }, // Nonce + 24, // Payload Length + { 0x23222120, 0x27262524, 0x2b2a2928, 0x2f2e2d2c, // Payload + 0x33323130, 0x37363534, 0x00000000, 0x00000000 }, + 20, // Auth Data Length + { 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c, // Auth Data + 0x13121110, 0x00000000, 0x00000000, 0x00000000 }, + { 0xa901b2e3, 0x7a1ab7f5, 0xecea1c9b, 0x0be797cd, // CipherText + 0xd9aa7661, 0xa58a42a4, 0x00000000, 0x00000000 }, + 8, // Tag Length + { 0xfb924348, 0x5199b0c1, 0x00000000, 0x00000000 } // Tag + }, + + // + // The following test cases use 256bit key, and they are taken from + // proposals for IEEE P1619.1 Test Vectors. + // + // Test Case #4 + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0xb21576fb, 0x1d89803d, 0x0b9870d4, 0xc88495c7, // Key + 0xce64fbb2, 0x4d8f9760, 0x5ae4fc17, 0xb730e849 }, + 12, // Nonce Length + { 0x63a3d1db, 0xb4b72460, 0x6f7dda02, 0x00000000 }, // Nonce + 16, // Payload Length + { 0x8e3445a8, 0xf1b5c5c8, 0x760ef526, 0x1e1bfdfe, // Payload + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, // Auth Data Length + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, // Auth Data + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x611288cc, 0x72faa7c6, 0x39176ab9, 0x7f276b17, // CipherText + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 16, // Tag Length + { 0x14e17234, 0xbe0c2c5f, 0x06496314, 0x23e4f02c } // Tag + }, + + // + // Test Case #5 + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x43424140, 0x47464544, 0x4b4a4948, 0x4f4e4d4c, // Key + 0x53525150, 0x57565554, 0x5b5a5958, 0x5f5e5d5c }, + 12, // Nonce Length + { 0x13121110, 0x17161514, 0x1b1a1918, 0x00000000 }, // Nonce + 24, // Payload Length + { 0x23222120, 0x27262524, 0x2b2a2928, 0x2f2e2d2c, // Payload + 0x33323130, 0x37363534, 0x00000000, 0x00000000 }, + 20, // Auth Data Length + { 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c, // Auth Data + 0x13121110, 0x00000000, 0x00000000, 0x00000000 }, + { 0xae83f804, 0x3007bdb3, 0xb60bf5ea, 0x21a24fde, // CipherText + 0xe4e43420, 0xe5750e1b, 0x00000000, 0x00000000 }, + 16, // Tag Length + { 0x3a3fba9b, 0x39327f10, 0x299063bd, 0x7103f823 } // Tag + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an CCM encryption operation. +// +//***************************************************************************** +bool +AESCCMEncrypt(uint32_t ui32Keysize, uint32_t *pui32Key, + uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t ui32DataLength, uint32_t *pui32Nonce, + uint32_t ui32NonceLength, uint32_t *pui32AuthData, + uint32_t ui32AuthDataLength, uint32_t *pui32Tag, + uint32_t ui32TagLength, bool bUseDMA) +{ + uint32_t pui32IV[4], ui32Idx; + uint32_t ui32M, ui32L; + uint8_t *pui8Nonce, *pui8IV; + + // + // Determine the value of M. It is determined using + // the tag length. + // + if(ui32TagLength == 4) + { + ui32M = AES_CFG_CCM_M_4; + } + else if(ui32TagLength == 6) + { + ui32M = AES_CFG_CCM_M_6; + } + else if(ui32TagLength == 8) + { + ui32M = AES_CFG_CCM_M_8; + } + else if(ui32TagLength == 10) + { + ui32M = AES_CFG_CCM_M_10; + } + else if(ui32TagLength == 12) + { + ui32M = AES_CFG_CCM_M_12; + } + else if(ui32TagLength == 14) + { + ui32M = AES_CFG_CCM_M_14; + } + else if(ui32TagLength == 16) + { + ui32M = AES_CFG_CCM_M_16; + } + else + { + UARTprintf("Unexpected tag length.\n"); + return(false); + } + + // + // Determine the value of L. This is determined by using + // the value of q from the NIST document: n + q = 15 + // + if(ui32NonceLength == 7) + { + ui32L = AES_CFG_CCM_L_8; + } + else if(ui32NonceLength == 8) + { + ui32L = AES_CFG_CCM_L_7; + } + else if(ui32NonceLength == 9) + { + ui32L = AES_CFG_CCM_L_6; + } + else if(ui32NonceLength == 10) + { + ui32L = AES_CFG_CCM_L_5; + } + else if(ui32NonceLength == 11) + { + ui32L = AES_CFG_CCM_L_4; + } + else if(ui32NonceLength == 12) + { + ui32L = AES_CFG_CCM_L_3; + } + else if(ui32NonceLength == 13) + { + ui32L = AES_CFG_CCM_L_2; + } + else if(ui32NonceLength == 14) + { + ui32L = AES_CFG_CCM_L_1; + } + else + { + UARTprintf("Unexpected nonce length.\n"); + return(false); + } + + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_CTR_WIDTH_128 | + AES_CFG_MODE_CCM | ui32L | ui32M)); + + // + // Determine the value to be written in the initial value registers. It is + // the concatenation of 5 bits of zero, 3 bits of L, nonce, and the counter + // value. First, clear the contents of the IV. + // + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32IV[ui32Idx] = 0; + } + + // + // Now find the binary value of L. + // + if(ui32L == AES_CFG_CCM_L_8) + { + pui32IV[0] = 0x7; + } + else if(ui32L == AES_CFG_CCM_L_7) + { + pui32IV[0] = 0x6; + } + else if(ui32L == AES_CFG_CCM_L_6) + { + pui32IV[0] = 0x5; + } + else if(ui32L == AES_CFG_CCM_L_5) + { + pui32IV[0] = 0x4; + } + else if(ui32L == AES_CFG_CCM_L_4) + { + pui32IV[0] = 0x3; + } + else if(ui32L == AES_CFG_CCM_L_3) + { + pui32IV[0] = 0x2; + } + else if(ui32L == AES_CFG_CCM_L_2) + { + pui32IV[0] = 0x1; + } + + // + // Finally copy the contents of the nonce into the IV. Convert + // the pointers to simplify the copying. + // + pui8Nonce = (uint8_t *)pui32Nonce; + pui8IV = (uint8_t *)pui32IV; + for(ui32Idx = 0; ui32Idx < ui32NonceLength; ui32Idx++) + { + pui8IV[ui32Idx + 1] = pui8Nonce[ui32Idx]; + } + + // + // Write the initial value. + // + ROM_AESIVSet(AES_BASE, pui32IV); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the encryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy auth data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + + if(ui32AuthDataLength) + { + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32AuthData, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32AuthDataLength) / 4); + } + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32DataLength) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the length registers. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32DataLength); + + // + // Write the auth length registers to start the process. + // + ROM_AESAuthLengthSet(AES_BASE, ui32AuthDataLength); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests. + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Setup the uDMA to copy the plaintext data. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32DataLength) / 4); + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + + // + // Read the tag out. + // + ROM_AESTagRead(AES_BASE, pui32Tag); + } + else + { + // + // Perform the encryption. + // + ROM_AESDataProcessAuth(AES_BASE, pui32Src, pui32Dst, ui32DataLength, + pui32AuthData, ui32AuthDataLength, pui32Tag); + } + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable the GPIO Peripheral used by the UART. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure GPIO Pins for UART mode. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example encrypts a block of payload using AES128 in CCM mode. It +// does the encryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32CipherText[16], pui32Tag[4], ui32Errors, ui32Idx; + uint32_t ui32PayloadLength, ui32TagLength; + uint32_t ui32NonceLength, ui32AuthDataLength; + uint32_t *pui32Nonce, *pui32AuthData, ui32SysClock; + uint32_t *pui32Key, *pui32Payload, *pui32ExpCipherText; + uint32_t ui32Keysize; + uint8_t ui8Vector; + uint8_t *pui8ExpTag, *pui8Tag; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-ccm-encrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + pui8Tag = (uint8_t *)pui32Tag; + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Configure the system clock to run off the internal 16MHz oscillator. + // + MAP_SysCtlClockFreqSet(SYSCTL_OSC_INT | SYSCTL_USE_OSC, 16000000); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES CCM encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Loop through all the given vectors. + // + for(ui8Vector = 0; + (ui8Vector < + (sizeof(g_psAESCCMTestVectors) / sizeof(g_psAESCCMTestVectors[0]))) && + (ui32Errors == 0); + ui8Vector++) + { + UARTprintf("Starting vector #%d\n", ui8Vector); + + // + // Get the current vector's data members. + // + ui32Keysize = g_psAESCCMTestVectors[ui8Vector].ui32KeySize; + pui32Key = g_psAESCCMTestVectors[ui8Vector].pui32Key; + pui32Payload = g_psAESCCMTestVectors[ui8Vector].pui32Payload; + ui32PayloadLength = + g_psAESCCMTestVectors[ui8Vector].ui32PayloadLength; + pui32AuthData = g_psAESCCMTestVectors[ui8Vector].pui32AuthData; + ui32AuthDataLength = + g_psAESCCMTestVectors[ui8Vector].ui32AuthDataLength; + pui32ExpCipherText = + g_psAESCCMTestVectors[ui8Vector].pui32CipherText; + pui8ExpTag = (uint8_t *)g_psAESCCMTestVectors[ui8Vector].pui32Tag; + ui32TagLength = g_psAESCCMTestVectors[ui8Vector].ui32TagLength; + pui32Nonce = g_psAESCCMTestVectors[ui8Vector].pui32Nonce; + ui32NonceLength = + g_psAESCCMTestVectors[ui8Vector].ui32NonceLength; + + // + // Perform the encryption without uDMA. + // + UARTprintf("Performing encryption without uDMA.\n"); + AESCCMEncrypt(ui32Keysize, pui32Key, pui32Payload, pui32CipherText, + ui32PayloadLength, pui32Nonce, ui32NonceLength, + pui32AuthData, ui32AuthDataLength, pui32Tag, + ui32TagLength, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < (ui32PayloadLength / 4); ui32Idx++) + { + if(pui32CipherText[ui32Idx] != pui32ExpCipherText[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpCipherText[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < ui32TagLength; ui32Idx++) + { + if(pui8Tag[ui32Idx] != pui8ExpTag[ui32Idx]) + { + UARTprintf("Tag mismatch on byte %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui8ExpTag[ui32Idx], + pui8Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Perform the encryption with uDMA. + // + UARTprintf("Performing encryption with uDMA.\n"); + AESCCMEncrypt(ui32Keysize, pui32Key, pui32Payload, pui32CipherText, + ui32PayloadLength, pui32Nonce, ui32NonceLength, + pui32AuthData, ui32AuthDataLength, pui32Tag, + ui32TagLength, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < (ui32PayloadLength / 4); ui32Idx++) + { + if(pui32CipherText[ui32Idx] != pui32ExpCipherText[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpCipherText[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < ui32TagLength; ui32Idx++) + { + if(pui8Tag[ui32Idx] != pui8ExpTag[ui32Idx]) + { + UARTprintf("Tag mismatch on byte %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui8ExpTag[ui32Idx], + pui8Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewd b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewp b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewp new file mode 100644 index 0000000..ef1f46d --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_ccm_encrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.icf b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.icf new file mode 100644 index 0000000..c963437 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_ccm_encrypt.icf - Linker configuration file for aes_ccm_encrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ld b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ld new file mode 100644 index 0000000..aacb216 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_ccm_encrypt.ld - Linker configuration file for aes_ccm_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.sct b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.sct new file mode 100644 index 0000000..147f91b --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_ccm_encrypt.sct - Linker configuration file for aes_ccm_encrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvopt b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvopt new file mode 100644 index 0000000..5e124fe --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_ccm_encrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_ccm_encrypt.c + aes_ccm_encrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvproj b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvproj new file mode 100644 index 0000000..ff248ea --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_ccm_encrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_ccm_encrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_ccm_encrypt.bin .\rvmdk\aes_ccm_encrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_ccm_encrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_ccm_encrypt.c + 1 + .\aes_ccm_encrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt_ccs.cmd b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt_ccs.cmd new file mode 100644 index 0000000..fbeb0a3 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_ccm_encrypt_ccs.cmd - CCS linker configuration file for aes_ccm_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..52e0e00 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.cproject new file mode 100644 index 0000000..909c7df --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.project b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.project new file mode 100644 index 0000000..b455fdf --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_ccm_encrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_ccm_encrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt.c + + + aes_ccm_encrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ccm_encrypt/aes_ccm_encrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.bin b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.bin new file mode 100644 index 0000000..f8e4912 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.out b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.out new file mode 100644 index 0000000..ab123ba Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/Debug/aes_ccm_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.bin b/boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.bin new file mode 100644 index 0000000..1ac6ae9 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.out b/boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.out new file mode 100644 index 0000000..6cf610b Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/ewarm/Exe/aes_ccm_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.axf b/boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.axf new file mode 100644 index 0000000..ff27801 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.bin b/boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.bin new file mode 100644 index 0000000..5d150f1 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/gcc/aes_ccm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/readme.txt b/boards/dk-tm4c129x/aes_ccm_encrypt/readme.txt new file mode 100644 index 0000000..e1d0e51 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/readme.txt @@ -0,0 +1,27 @@ +AES128 and AES256 CCM Encryption Demo + +Simple demo showing an encryption operation using the AES128 and AES256 +modules in CCM mode. A set of test cases are encrypted. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.axf b/boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.axf new file mode 100644 index 0000000..b27c1ed Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.bin b/boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.bin new file mode 100644 index 0000000..b0eb16a Binary files /dev/null and b/boards/dk-tm4c129x/aes_ccm_encrypt/rvmdk/aes_ccm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ccm_encrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ccm_encrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_cmac/Makefile b/boards/dk-tm4c129x/aes_cmac/Makefile new file mode 100644 index 0000000..0590501 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 CMAC Encryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 CMAC Encryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_cmac.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 CMAC Encryption Demo. +# +${COMPILER}/aes_cmac.axf: ${COMPILER}/aes_cmac.o +${COMPILER}/aes_cmac.axf: ${COMPILER}/frame.o +${COMPILER}/aes_cmac.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_cmac.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_cmac.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_cmac.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_cmac.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_cmac.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_cmac.axf: aes_cmac.ld +SCATTERgcc_aes_cmac=aes_cmac.ld +ENTRY_aes_cmac=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.c b/boards/dk-tm4c129x/aes_cmac/aes_cmac.c new file mode 100644 index 0000000..a31f903 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.c @@ -0,0 +1,957 @@ +//***************************************************************************** +// +// aes_cmac.c - Simple AES CMAC demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 CMAC Demo (aes128_cmac)

+//! +//! Simple demo showing an authentication operation using the AES128 and +//! AES256 modules in CMAC mode. A series of test vectors are authenticated. +//! +//! This module is also capable of CBC-MAC mode, but this has been determined +//! to be insecure when using variable message lengths. CMAC is now +//! recommended instead by NIST. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Test cases from the NIST SP 800-38B document. +// The data in these test cases have been modified to be in big endian +// format as required by the AES module. This was done to simplify writes +// and comparisons. When operations need to be performed on the data, the +// endianness is swapped. +// +//***************************************************************************** +typedef struct AESTestVectorStruct +{ + uint32_t ui32KeySize; + uint32_t *pui32Key; + uint32_t ui32Length; + uint32_t pui32Message[16]; + uint32_t pui32Tag[4]; +} +tAESCMACTestVector; + +// +// The following keys are used in the following test cases. +// +uint32_t g_pui32AES128Key[4] = +{ + 0x16157e2b, 0xa6d2ae28, 0x8815f7ab, 0x3c4fcf09 +}; + +uint32_t g_pui32AES256Key[8] = +{ + 0x10eb3d60, 0xbe71ca15, 0xf0ae732b, 0x81777d85, + 0x072c351f, 0xd708613b, 0xa310982d, 0xf4df1409 +}; + +tAESCMACTestVector g_psAESCMACTestVectors[] = +{ + // + // Test Case #1 ~ #4 are AES128 cases + // Test Case #1 + // Empty message check. Since there is no message, it must be + // padded with a one and 127 zeros. Also, a zero cannot be + // written into the length register in this mode, so we just + // write a 1 as the length to signify an incomplete block. + // Any value from 1 to 15 would have worked in this case. + // Incomplete blocks are XOR'd with subkey2 rather than subkey1. + // + { + AES_CFG_KEY_SIZE_128BIT, + g_pui32AES128Key, + 1, + { 0x00000080, 0x00000000, 0x00000000, 0x00000000 }, + { 0x29691dbb, 0x283759e9, 0x127da37f, 0x4667759b } + }, + + // + // Test Case #2 + // This is the first complete block. It is XOR'd with subkey1. + // + { + AES_CFG_KEY_SIZE_128BIT, + g_pui32AES128Key, + 16, + { 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373 }, + { 0xb4160a07, 0x44414d6b, 0x9ddd9bf7, 0x7c284ad0 } + }, + + // + // Test Case #3 + // Since the message is not a multiple of 128 bits, there must + // be padding appended to the end of the message. This padding + // is a one followed by 63 zeros. + // + { + AES_CFG_KEY_SIZE_128BIT, + g_pui32AES128Key, + 40, + { 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x00000080, 0x00000000 }, + { 0x4767a6df, 0x30e69ade, 0x6132ca30, 0x27c89714 } + }, + + // + // Test Case #4 + // + { + AES_CFG_KEY_SIZE_128BIT, + g_pui32AES128Key, + 64, + { 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 }, + { 0xbfbef051, 0x929d3b7e, 0x177449fc, 0xfe3c3679 } + }, + + // + // Test Case #5 ~ #8 are AES256 cases + // + // Test Case #5 + // Empty message check. + // + { + AES_CFG_KEY_SIZE_256BIT, + g_pui32AES256Key, + 1, + { 0x00000080, 0x00000000, 0x00000000, 0x00000000 }, + { 0xf6628902, 0x9ef87b1b, 0x1f556bfc, 0x83d96746 } + }, + + // + // Test Case #6 + // This is the first complete block. It is XOR'd with subkey1. + // + { + AES_CFG_KEY_SIZE_256BIT, + g_pui32AES256Key, + 16, + { 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373 }, + { 0x3f02a728, 0x828f2e45, 0x8df24bbd, 0x5cc3378c } + }, + + // + // Test Case #7 + // Since the message is not a multiple of 128 bits, there must + // be padding appended to the end of the message. This padding + // is a one followed by 63 zeros. + // + { + AES_CFG_KEY_SIZE_256BIT, + g_pui32AES256Key, + 40, + { 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x00000080, 0x00000000 }, + { 0xf1d8f3aa, 0xc24056de, 0x69b1f532, 0xe611c9b9 } + }, + + // + // Test Case #8 + // + { + AES_CFG_KEY_SIZE_256BIT, + g_pui32AES256Key, + 64, + { 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 }, + { 0x902199e1, 0xd56e9f54, 0x052c6a69, 0x1054316c } + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// Switch the endianness of the data array. +// +//***************************************************************************** +void +EndiannessSwap(uint32_t *pui32Input, uint32_t *pui32Output, + uint32_t ui32Length) +{ + uint32_t ui32Count; + + // + // For each word, swap the endianness. + // + for(ui32Count = 0; ui32Count < ui32Length; ui32Count++) + { + pui32Output[ui32Count] = ((pui32Input[ui32Count] & 0x000000ff) << 24) | + ((pui32Input[ui32Count] & 0x0000ff00) << 8) | + ((pui32Input[ui32Count] & 0x00ff0000) >> 8) | + ((pui32Input[ui32Count] & 0xff000000) >> 24); + + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an ECB encryption operation. +// +//***************************************************************************** +bool +AESECBEncrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t ui32Length) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_ECB)); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Perform the encryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + + return(true); +} + +//***************************************************************************** +// +// Generate a CMAC subkey. +// +//***************************************************************************** +bool +AESCMACSubkeyGet(uint32_t *pui32Key, uint32_t *pui32Input, + uint32_t *pui32Subkey) +{ + uint32_t pui32Output[4]; + uint32_t pui32SwappedInput[4]; + int32_t i32Idx; + bool bCarry; + + // + // If the MSB of the input is 0, then the subkey is just left shifted. + // If the MSB of the input is 1, then the subkey is left shifted and + // XOR'd with a constant. First swap the endianness to big endian + // to make the math easier. + // + EndiannessSwap(pui32Input, pui32SwappedInput, 4); + + // + // Shift each word in the 128 bits. Make sure to carry the left + // shifted bits. + // + bCarry = false; + for(i32Idx = 3; i32Idx >= 0; i32Idx--) + { + // + // Shift the word. + // + pui32Output[i32Idx] = pui32SwappedInput[i32Idx] << 1; + + // + // If there was a carry from the previous word. + // + if(bCarry) + { + pui32Output[i32Idx] |= 0x1; + bCarry = false; + } + + // + // Check to see if we need to carry to the next word. + // + if(pui32SwappedInput[i32Idx] & 0x80000000) + { + bCarry = true; + } + } + + // + // Swap the endianness back to little endian. + // + EndiannessSwap(pui32Output, pui32Subkey, 4); + + // + // XOR in the Rb constant if the MSB is 1. + // + if(pui32SwappedInput[0] & 0x80000000) + { + pui32Subkey[3] ^= 0x87000000; + } + + return true; +} + +//***************************************************************************** +// +// Perform an encryption operation. +// +//***************************************************************************** +bool +AESCMACAuth(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Key, + uint32_t *pui32Tag, uint32_t ui32Length, bool bUseDMA) +{ + uint32_t pui32Subkey1[4]; + uint32_t pui32Subkey2[4]; + uint32_t pui32Zero[4]; + uint32_t pui32EncZero[4]; + + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Calculate the first subkey. First, encrypt a zero string. + // + pui32Zero[0] = 0x00000000; + pui32Zero[1] = 0x00000000; + pui32Zero[2] = 0x00000000; + pui32Zero[3] = 0x00000000; + + // + // Encrypt the zero string. + // + AESECBEncrypt(ui32Keysize, pui32Zero, pui32EncZero, pui32Key, 16); + + // + // Get the first subkey. + // + AESCMACSubkeyGet(pui32Key, pui32EncZero, pui32Subkey1); + + // + // Get the second subkey. + // + AESCMACSubkeyGet(pui32Key, pui32Subkey1, pui32Subkey2); + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_CBCMAC)); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Write the first subkey. + // + ROM_AESKey2Set(AES_BASE, pui32Subkey1, ui32Keysize); + + // + // Write the second subkey. + // + ROM_AESKey3Set(AES_BASE, pui32Subkey2); + + // + // Write the IV with zeroes. + // + ROM_AESIVSet(AES_BASE, pui32Zero); + + // + // Depending on the argument, perform the encryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Write the length registers to start the process. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Enable the DMA channel to start the transfer. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Read out the tag. + // + ROM_AESTagRead(AES_BASE, pui32Tag); + } + else + { + // + // Perform the authentication. + // + ROM_AESDataAuth(AES_BASE, pui32Src, ui32Length, pui32Tag); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example authenticates blocks of plaintext using AES128 and AES256 in +// CMAC mode. +// It does the encryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t *pui32ExpTag, *pui32Message; + uint32_t ui32Errors, ui32Idx, ui32Length, pui32Tag[4], ui32SysClock; + uint32_t ui32KeySize, *pui32Key; + uint8_t ui8Vector; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-cmac"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES CMAC encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Loop through all the given vectors. + // + for(ui8Vector = 0; + (ui8Vector < + (sizeof(g_psAESCMACTestVectors) / sizeof(g_psAESCMACTestVectors[0]))) && + (ui32Errors == 0); + ui8Vector++) + { + UARTprintf("Starting vector #%d\n", ui8Vector); + + // + // Get the current vector's data members. + // + ui32KeySize = g_psAESCMACTestVectors[ui8Vector].ui32KeySize; + pui32Key = g_psAESCMACTestVectors[ui8Vector].pui32Key; + ui32Length = g_psAESCMACTestVectors[ui8Vector].ui32Length; + pui32Message = g_psAESCMACTestVectors[ui8Vector].pui32Message; + pui32ExpTag = g_psAESCMACTestVectors[ui8Vector].pui32Tag; + + // + // Perform the encryption without uDMA. + // + UARTprintf("Performing encryption without uDMA.\n"); + AESCMACAuth(ui32KeySize, pui32Message, pui32Key, + pui32Tag, ui32Length, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + if(pui32Tag[ui32Idx] != pui32ExpTag[ui32Idx]) + { + UARTprintf("Tag mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpTag[ui32Idx], + pui32Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the tag. + // + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Only use DMA with the vectors that have data. + // + if(ui32Length != 0) + { + // + // Perform the encryption with uDMA. + // + UARTprintf("Performing encryption with uDMA.\n"); + AESCMACAuth(ui32KeySize, pui32Message, pui32Key, + pui32Tag, ui32Length, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + if(pui32Tag[ui32Idx] != pui32ExpTag[ui32Idx]) + { + UARTprintf("Tag mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpTag[ui32Idx], + pui32Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Clear the array containing the tag. + // + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.ewd b/boards/dk-tm4c129x/aes_cmac/aes_cmac.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.ewp b/boards/dk-tm4c129x/aes_cmac/aes_cmac.ewp new file mode 100644 index 0000000..876d072 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_cmac.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.icf b/boards/dk-tm4c129x/aes_cmac/aes_cmac.icf new file mode 100644 index 0000000..2f11c0b --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_cmac.icf - Linker configuration file for aes_cmac. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.ld b/boards/dk-tm4c129x/aes_cmac/aes_cmac.ld new file mode 100644 index 0000000..846d354 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_cmac.ld - Linker configuration file for aes_cmac. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.sct b/boards/dk-tm4c129x/aes_cmac/aes_cmac.sct new file mode 100644 index 0000000..eae6858 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_cmac.sct - Linker configuration file for aes_cmac. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.uvopt b/boards/dk-tm4c129x/aes_cmac/aes_cmac.uvopt new file mode 100644 index 0000000..de54d00 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_cmac + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_cmac.c + aes_cmac.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac.uvproj b/boards/dk-tm4c129x/aes_cmac/aes_cmac.uvproj new file mode 100644 index 0000000..eb5225a --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_cmac + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_cmac + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_cmac.bin .\rvmdk\aes_cmac.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_cmac.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_cmac.c + 1 + .\aes_cmac.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_cmac/aes_cmac_ccs.cmd b/boards/dk-tm4c129x/aes_cmac/aes_cmac_ccs.cmd new file mode 100644 index 0000000..0db629d --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/aes_cmac_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_cmac_ccs.cmd - CCS linker configuration file for aes_cmac. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_cmac/ccs/.ccsimportspec new file mode 100644 index 0000000..cc242f8 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/.ccsproject b/boards/dk-tm4c129x/aes_cmac/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/.cproject b/boards/dk-tm4c129x/aes_cmac/ccs/.cproject new file mode 100644 index 0000000..532e4b0 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/.project b/boards/dk-tm4c129x/aes_cmac/ccs/.project new file mode 100644 index 0000000..7e97e3a --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/.project @@ -0,0 +1,70 @@ + + + aes_cmac + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_cmac.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cmac/aes_cmac.c + + + aes_cmac_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cmac/aes_cmac_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_cmac/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_cmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.bin b/boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.bin new file mode 100644 index 0000000..cc9b4b4 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.bin differ diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.out b/boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.out new file mode 100644 index 0000000..fdc4a60 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/ccs/Debug/aes_cmac.out differ diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_cmac/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_cmac/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_cmac/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.bin b/boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.bin new file mode 100644 index 0000000..b8b30cc Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.bin differ diff --git a/boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.out b/boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.out new file mode 100644 index 0000000..acad7c7 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/ewarm/Exe/aes_cmac.out differ diff --git a/boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.axf b/boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.axf new file mode 100644 index 0000000..d75afb4 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.axf differ diff --git a/boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.bin b/boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.bin new file mode 100644 index 0000000..d108dd9 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/gcc/aes_cmac.bin differ diff --git a/boards/dk-tm4c129x/aes_cmac/readme.txt b/boards/dk-tm4c129x/aes_cmac/readme.txt new file mode 100644 index 0000000..e31ac50 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/readme.txt @@ -0,0 +1,31 @@ +AES128 and AES256 CMAC Demo + +Simple demo showing an authentication operation using the AES128 and +AES256 modules in CMAC mode. A series of test vectors are authenticated. + +This module is also capable of CBC-MAC mode, but this has been determined +to be insecure when using variable message lengths. CMAC is now +recommended instead by NIST. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.axf b/boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.axf new file mode 100644 index 0000000..fde8df0 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.axf differ diff --git a/boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.bin b/boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.bin new file mode 100644 index 0000000..4df0ae9 Binary files /dev/null and b/boards/dk-tm4c129x/aes_cmac/rvmdk/aes_cmac.bin differ diff --git a/boards/dk-tm4c129x/aes_cmac/startup_ccs.c b/boards/dk-tm4c129x/aes_cmac/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cmac/startup_ewarm.c b/boards/dk-tm4c129x/aes_cmac/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cmac/startup_gcc.c b/boards/dk-tm4c129x/aes_cmac/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_cmac/startup_rvmdk.S b/boards/dk-tm4c129x/aes_cmac/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_cmac/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/Makefile b/boards/dk-tm4c129x/aes_ecb_decrypt/Makefile new file mode 100644 index 0000000..a9794bb --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 ECB Decryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 ECB Decryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_ecb_decrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 ECB Decryption Demo. +# +${COMPILER}/aes_ecb_decrypt.axf: ${COMPILER}/aes_ecb_decrypt.o +${COMPILER}/aes_ecb_decrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_ecb_decrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_ecb_decrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_ecb_decrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_ecb_decrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_ecb_decrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_ecb_decrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_ecb_decrypt.axf: aes_ecb_decrypt.ld +SCATTERgcc_aes_ecb_decrypt=aes_ecb_decrypt.ld +ENTRY_aes_ecb_decrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.c b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.c new file mode 100644 index 0000000..af003f1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.c @@ -0,0 +1,698 @@ +//***************************************************************************** +// +// aes_ecb_decrypt.c - Simple AES128 and AES256 ECB decryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/fpu.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 ECB Decryption Demo (aes_ecb_decrypt)

+//! +//! Simple demo showing an decryption operation using the AES128 and AES256 +//! modules in ECB mode. A single block of data is decrypted. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Sample plaintext, ciphertext, and key from the NIST SP 800-38A document. +// +//***************************************************************************** +uint32_t g_pui32AESPlainText[16] = +{ + 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 +}; + +uint32_t g_pui32AES128Key[4] = +{ + 0x16157e2b, 0xa6d2ae28, 0x8815f7ab, 0x3c4fcf09 +}; + +uint32_t g_pui32AES256Key[8] = +{ + 0x10eb3d60, 0xbe71ca15, 0xf0ae732b, 0x81777d85, + 0x072c351f, 0xd708613b, 0xa310982d, 0xf4df1409 +}; + +uint32_t g_pui32AES128CipherText[16] = +{ + 0xb47bd73a, 0x60367a0d, 0xf3ca9ea8, 0x97ef6624, + 0x85d5d3f5, 0x9d69b903, 0x5a8985e7, 0xafbafd96, + 0x7fcdb143, 0x23ce8e59, 0xe3001b88, 0x880603ed, + 0x5e780c7b, 0x3fade827, 0x71202382, 0xd45d7204 +}; + +uint32_t g_pui32AES256CipherText[16] = +{ + 0xbdd1eef3, 0x3ca0d2b5, 0x7e5a4b06, 0xf881b13d, + 0x10cb1c59, 0x26ed10d4, 0x4aa75bdc, 0x70283631, + 0xb921edb6, 0xf9f4a69c, 0xb1e753f1, 0x1dedafbe, + 0x7a4b3023, 0xfff3f939, 0x8f8d7d06, 0xc7ec249e +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an decryption operation. +// +//***************************************************************************** +bool +AESECBDecrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t ui32Length, bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_DECRYPT | + AES_CFG_MODE_ECB)); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the decryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Dst, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Src, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the length registers to start the process. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + else + { + // + // Perform the decryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable the GPIO Peripheral used by the UART. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure GPIO Pins for UART mode. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example decrypts blocks of plaintext using AES128 in ECB mode. It +// does the decryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32PlainText[16], ui32Errors, ui32Idx, ui32SysClock; + uint32_t ui32Keysize; + tContext sContext; + uint8_t ui8Loop; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-ecb-decrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Configure the system clock to run off the internal 16MHz oscillator. + // + MAP_SysCtlClockFreqSet(SYSCTL_OSC_INT | SYSCTL_USE_OSC, 16000000); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES ECB decryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Perform the same operation with 128bit key first, then 256bit key. + // + for(ui8Loop = 0; ui8Loop < 2; ui8Loop++) + { + + ui32Keysize = (ui8Loop == 0)?AES_CFG_KEY_SIZE_128BIT: + AES_CFG_KEY_SIZE_256BIT; + UARTprintf("\nKey Size: %sbit\n", ((ui8Loop == 0)?"128":"256")); + + // + // Clear the array containing the plaintext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + + // + // Perform the decryption without uDMA. + // + UARTprintf("Performing decryption without uDMA.\n"); + AESECBDecrypt(ui32Keysize, + (ui8Loop == 0)?g_pui32AES128CipherText:g_pui32AES256CipherText, + pui32PlainText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + 64, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32PlainText[ui32Idx] != g_pui32AESPlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: 0x%x\n", + ui32Idx, g_pui32AESPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the plaintext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + + // + // Perform the decryption with uDMA. + // + UARTprintf("Performing decryption with uDMA.\n"); + AESECBDecrypt(ui32Keysize, pui32PlainText, + (ui8Loop == 0)?g_pui32AES128CipherText:g_pui32AES256CipherText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + 64, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32PlainText[ui32Idx] != g_pui32AESPlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: 0x%x\n", + ui32Idx, g_pui32AESPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewd b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewp b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewp new file mode 100644 index 0000000..ea16ac7 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_ecb_decrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.icf b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.icf new file mode 100644 index 0000000..7ab13c3 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_ecb_decrypt.icf - Linker configuration file for aes_ecb_decrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ld b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ld new file mode 100644 index 0000000..39a9d80 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_ecb_decrypt.ld - Linker configuration file for aes_ecb_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.sct b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.sct new file mode 100644 index 0000000..8cc5982 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_ecb_decrypt.sct - Linker configuration file for aes_ecb_decrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvopt b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvopt new file mode 100644 index 0000000..3091c4e --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_ecb_decrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_ecb_decrypt.c + aes_ecb_decrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvproj b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvproj new file mode 100644 index 0000000..6675e94 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_ecb_decrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_ecb_decrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_ecb_decrypt.bin .\rvmdk\aes_ecb_decrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_ecb_decrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_ecb_decrypt.c + 1 + .\aes_ecb_decrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt_ccs.cmd b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt_ccs.cmd new file mode 100644 index 0000000..9db0e9f --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_ecb_decrypt_ccs.cmd - CCS linker configuration file for aes_ecb_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..3fea0dc --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.cproject new file mode 100644 index 0000000..83995fb --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.project b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.project new file mode 100644 index 0000000..6d2363d --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_ecb_decrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_ecb_decrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt.c + + + aes_ecb_decrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ecb_decrypt/aes_ecb_decrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.bin b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.bin new file mode 100644 index 0000000..ccd3908 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.out b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.out new file mode 100644 index 0000000..20ec2f7 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/Debug/aes_ecb_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.bin b/boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.bin new file mode 100644 index 0000000..42d71f2 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.out b/boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.out new file mode 100644 index 0000000..bd03111 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/ewarm/Exe/aes_ecb_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.axf b/boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.axf new file mode 100644 index 0000000..eb30724 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.bin b/boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.bin new file mode 100644 index 0000000..cbf8323 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/gcc/aes_ecb_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/readme.txt b/boards/dk-tm4c129x/aes_ecb_decrypt/readme.txt new file mode 100644 index 0000000..d9c9da1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/readme.txt @@ -0,0 +1,27 @@ +AES128 and AES256 ECB Decryption Demo + +Simple demo showing an decryption operation using the AES128 and AES256 +modules in ECB mode. A single block of data is decrypted. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.axf b/boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.axf new file mode 100644 index 0000000..1798a30 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.bin b/boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.bin new file mode 100644 index 0000000..3885912 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_decrypt/rvmdk/aes_ecb_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_decrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_decrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/Makefile b/boards/dk-tm4c129x/aes_ecb_encrypt/Makefile new file mode 100644 index 0000000..61498ad --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 ECB Encryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 ECB Encryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_ecb_encrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 ECB Encryption Demo. +# +${COMPILER}/aes_ecb_encrypt.axf: ${COMPILER}/aes_ecb_encrypt.o +${COMPILER}/aes_ecb_encrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_ecb_encrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_ecb_encrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_ecb_encrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_ecb_encrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_ecb_encrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_ecb_encrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_ecb_encrypt.axf: aes_ecb_encrypt.ld +SCATTERgcc_aes_ecb_encrypt=aes_ecb_encrypt.ld +ENTRY_aes_ecb_encrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.c b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.c new file mode 100644 index 0000000..079a0a5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.c @@ -0,0 +1,701 @@ +//***************************************************************************** +// +// aes_ecb_encrypt.c - Simple AES128 ECB encryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/fpu.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 ECB Encryption Demo (aes_ecb_encrypt)

+//! +//! Simple demo showing an encryption operation using the AES128 and AES256 +//! modules in ECB mode. A single block of data is encrypted. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Sample plaintext, ciphertext, and key from the NIST SP 800-38A document. +// +//***************************************************************************** +uint32_t g_pui32AESPlainText[16] = +{ + 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 +}; + +uint32_t g_pui32AES128Key[4] = +{ + 0x16157e2b, 0xa6d2ae28, 0x8815f7ab, 0x3c4fcf09 +}; + +uint32_t g_pui32AES256Key[8] = +{ + 0x10eb3d60, 0xbe71ca15, 0xf0ae732b, 0x81777d85, + 0x072c351f, 0xd708613b, 0xa310982d, 0xf4df1409 +}; + +uint32_t g_pui32AES128CipherText[16] = +{ + 0xb47bd73a, 0x60367a0d, 0xf3ca9ea8, 0x97ef6624, + 0x85d5d3f5, 0x9d69b903, 0x5a8985e7, 0xafbafd96, + 0x7fcdb143, 0x23ce8e59, 0xe3001b88, 0x880603ed, + 0x5e780c7b, 0x3fade827, 0x71202382, 0xd45d7204 +}; + +uint32_t g_pui32AES256CipherText[16] = +{ + 0xbdd1eef3, 0x3ca0d2b5, 0x7e5a4b06, 0xf881b13d, + 0x10cb1c59, 0x26ed10d4, 0x4aa75bdc, 0x70283631, + 0xb921edb6, 0xf9f4a69c, 0xb1e753f1, 0x1dedafbe, + 0x7a4b3023, 0xfff3f939, 0x8f8d7d06, 0xc7ec249e +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf(" Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf(" DMA completed the output context movement from\n"); + UARTprintf(" the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an encryption operation. +// +//***************************************************************************** +bool +AESECBEncrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t ui32Length, bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_ECB)); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the encryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the length registers to start the process. + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + else + { + // + // Perform the encryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable the GPIO Peripheral used by the UART. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure GPIO Pins for UART mode. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example encrypts blocks of plaintext using AES128 in ECB mode. It +// does the encryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32CipherText[16], ui32Errors, ui32Idx, ui32SysClock; + uint32_t ui32Keysize; + uint32_t *pui32CipherTextExp; + tContext sContext; + uint8_t ui8Loop; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-ecb-encrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Configure the system clock to run off the internal 16MHz oscillator. + // + MAP_SysCtlClockFreqSet(SYSCTL_OSC_INT | SYSCTL_USE_OSC, 16000000); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES ECB encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Perform the same operation with 128bit key first, then 256bit key. + // + for(ui8Loop = 0; ui8Loop < 2; ui8Loop++) + { + + ui32Keysize = (ui8Loop == 0)?AES_CFG_KEY_SIZE_128BIT:AES_CFG_KEY_SIZE_256BIT; + UARTprintf("\nKey Size: %sbit\n", ((ui8Loop == 0)?"128":"256")); + + // + // Clear the array containing the cipher text. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Perform the encryption without uDMA. + // + UARTprintf("Performing encryption without uDMA.\n"); + AESECBEncrypt(ui32Keysize, g_pui32AESPlainText, pui32CipherText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + 64, false); + + // + // Check the result. + // + pui32CipherTextExp = (ui8Loop == 0)?g_pui32AES128CipherText: + g_pui32AES256CipherText; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32CipherText[ui32Idx] != pui32CipherTextExp[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32CipherTextExp[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Perform the encryption with uDMA. + // + UARTprintf("Performing encryption with uDMA.\n"); + AESECBEncrypt(ui32Keysize, g_pui32AESPlainText, pui32CipherText, + (ui8Loop == 0)?g_pui32AES128Key:g_pui32AES256Key, + 64, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32CipherText[ui32Idx] != pui32CipherTextExp[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32CipherTextExp[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewd b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewp b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewp new file mode 100644 index 0000000..ef76eab --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_ecb_encrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.icf b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.icf new file mode 100644 index 0000000..ca4c88f --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_ecb_encrypt.icf - Linker configuration file for aes_ecb_encrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ld b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ld new file mode 100644 index 0000000..125f2a9 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_ecb_encrypt.ld - Linker configuration file for aes_ecb_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.sct b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.sct new file mode 100644 index 0000000..a56e0b6 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_ecb_encrypt.sct - Linker configuration file for aes_ecb_encrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvopt b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvopt new file mode 100644 index 0000000..bc3f606 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_ecb_encrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_ecb_encrypt.c + aes_ecb_encrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvproj b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvproj new file mode 100644 index 0000000..28cacf3 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_ecb_encrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_ecb_encrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_ecb_encrypt.bin .\rvmdk\aes_ecb_encrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_ecb_encrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_ecb_encrypt.c + 1 + .\aes_ecb_encrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt_ccs.cmd b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt_ccs.cmd new file mode 100644 index 0000000..3de14ca --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_ecb_encrypt_ccs.cmd - CCS linker configuration file for aes_ecb_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..27e0888 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.cproject new file mode 100644 index 0000000..b640bf8 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.project b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.project new file mode 100644 index 0000000..6f1402d --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_ecb_encrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_ecb_encrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt.c + + + aes_ecb_encrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ecb_encrypt/aes_ecb_encrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.bin b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.bin new file mode 100644 index 0000000..5bede9f Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.out b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.out new file mode 100644 index 0000000..1ad3e3e Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/Debug/aes_ecb_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.bin b/boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.bin new file mode 100644 index 0000000..b7fabe7 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.out b/boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.out new file mode 100644 index 0000000..ad731dd Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/ewarm/Exe/aes_ecb_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.axf b/boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.axf new file mode 100644 index 0000000..fffa08d Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.bin b/boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.bin new file mode 100644 index 0000000..15528e2 Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/gcc/aes_ecb_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/readme.txt b/boards/dk-tm4c129x/aes_ecb_encrypt/readme.txt new file mode 100644 index 0000000..8311ba2 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/readme.txt @@ -0,0 +1,27 @@ +AES128 and AES256 ECB Encryption Demo + +Simple demo showing an encryption operation using the AES128 and AES256 +modules in ECB mode. A single block of data is encrypted. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.axf b/boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.axf new file mode 100644 index 0000000..2da3d7b Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.bin b/boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.bin new file mode 100644 index 0000000..db468de Binary files /dev/null and b/boards/dk-tm4c129x/aes_ecb_encrypt/rvmdk/aes_ecb_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_ecb_encrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_ecb_encrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/Makefile b/boards/dk-tm4c129x/aes_gcm_decrypt/Makefile new file mode 100644 index 0000000..a41ddc1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 GCM Decryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 GCM Decryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_gcm_decrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 GCM Decryption Demo. +# +${COMPILER}/aes_gcm_decrypt.axf: ${COMPILER}/aes_gcm_decrypt.o +${COMPILER}/aes_gcm_decrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_gcm_decrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_gcm_decrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_gcm_decrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_gcm_decrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_gcm_decrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_gcm_decrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_gcm_decrypt.axf: aes_gcm_decrypt.ld +SCATTERgcc_aes_gcm_decrypt=aes_gcm_decrypt.ld +ENTRY_aes_gcm_decrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.c b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.c new file mode 100644 index 0000000..0cb11b7 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.c @@ -0,0 +1,1190 @@ +//***************************************************************************** +// +// aes_gcm_decrypt.c - Simple AES GCM decryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 GCM Decryption Demo (aes_gcm_decrypt)

+//! +//! Simple demo showing authenticated decryption operations using the AES +//! module in GCM mode. The test vectors are from the gcm_revised_spec.pdf +//! document. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Structure for NIST AES GCM tests +// +//***************************************************************************** +typedef struct AESTestVectorStruct +{ + uint32_t ui32KeySize; + uint32_t pui32Key[8]; + uint32_t ui32IVLength; + uint32_t pui32IV[64]; + uint32_t ui32DataLength; + uint32_t pui32PlainText[64]; + uint32_t ui32AuthDataLength; + uint32_t pui32AuthData[64]; + uint32_t pui32CipherText[64]; + uint32_t pui32Tag[4]; +} +tAESGCMTestVector; + +//***************************************************************************** +// +// Test Cases from NIST GCM Revised Spec. +// +//***************************************************************************** +tAESGCMTestVector g_psAESGCMTestVectors[] = +{ + // + // Test Case #1 + // This is a special case that cannot use the GCM mode because the + // data and AAD lengths are both zero. The work around is to perform + // an ECB encryption on Y0. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + 0, + { 0 }, + { 0 }, + { 0xcefce258, 0x61307efa, 0x571d7f36, 0x5a45e7a4 } + }, + + // + // Test Case #2 + // This is the first test in which the AAD length is zero. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 16, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + { 0xceda8803, 0x92a3b660, 0xb9c228f3, 0x78feb271 }, + { 0xd4476eab, 0xbd13ec2c, 0xb2673af5, 0xdfbd5712 } + }, + + // + // Test Case #3 + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 64, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x55d2af1a }, + 0, + { 0 }, + { 0xc21e8342, 0x24747721, 0xb721724b, 0x9cd4d084, + 0x2f21aae3, 0xe0a4022c, 0x237ec135, 0x2ea1ac29, + 0xb214d521, 0x1c936654, 0x5a6a8f7d, 0x05aa84ac, + 0x390ba31b, 0x97ac0a6a, 0x91e0583d, 0x85593f47 }, + { 0xf32a5c4d, 0xa664cd27, 0xbd5af32c, 0xb4faa62b } + }, + + // + // Test Case #4 + // When the data lengths do not align with the block + // boundary, we need to pad with zeros to ensure unknown + // data is not copied with uDMA. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab, 0x00000000, 0x00000000, 0x00000000 }, + { 0xc21e8342, 0x24747721, 0xb721724b, 0x9cd4d084, + 0x2f21aae3, 0xe0a4022c, 0x237ec135, 0x2ea1ac29, + 0xb214d521, 0x1c936654, 0x5a6a8f7d, 0x05aa84ac, + 0x390ba31b, 0x97ac0a6a, 0x91e0583d, 0x00000000 }, + { 0xbc4fc95b, 0xdba52132, 0x5ae9fa94, 0x471a12e7 } + }, + + // + // Test Case #5 + // This is the first case in which IV is less than + // 96 bits. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 8, + { 0xbebafeca, 0xaddbcefa, 0x00000000, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab, 0x00000000, 0x00000000, 0x00000000 }, + { 0x4c3b3561, 0x4a930628, 0x1ff57f77, 0x55472aa2, + 0x712a9b69, 0xf8c6cd4f, 0xf9e56637, 0x23746c7b, + 0x00698073, 0xb2249fe4, 0x4475092b, 0x426b89d4, + 0xe1b58949, 0x070faceb, 0x98453fc2, 0x00000000 }, + { 0xe7d21236, 0x85073b9e, 0x4ae11b56, 0xcbfca2ac } + }, + + // + // Test Case #6 + // This is the first case in which IV is more than + // 96 bits. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 60, + { 0x5d221393, 0xe50684f8, 0x5a9c9055, 0xaa6952ff, + 0x38957a6a, 0xa17d4f53, 0xd203c3e4, 0x28a718a3, + 0x51c9c0c3, 0x39958056, 0x42e2f0fc, 0x54526b9a, + 0xf5dbae16, 0x576adea0, 0x9bb337a6, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab }, + { 0x9849e28c, 0xb6155662, 0xac33a003, 0x94b83fa1, + 0xa51291be, 0xa811a2c3, 0x3c2a26ba, 0xa72c7eca, + 0xa4a9e401, 0x903ca4fb, 0x81b2dccc, 0x6f7c8cd4, + 0xd27528d6, 0x0317a4ac, 0xe5ae344c, 0x00000000 }, + { 0xaec59c61, 0xfa0bfeff, 0x3cf42a46, 0x50d09916 } + }, + + // + // The following test cases use 256bit Keys. + // + // Test Case #7 - Test Case 13 from the doc + // This is a special case that cannot use the GCM mode because the + // data and AAD lengths are both zero. The work around is to perform + // an ECB encryption on Y0. + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + 0, + { 0 }, + { 0 }, + { 0xfb8a0f53, 0xb93645c7, 0xf1b463a9, 0x8b73cbc4 } + }, + + // + // Test Case #8, - Test Case 14 from the doc + // This is the first test in which the AAD length is zero. + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 16, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + { 0x3d40a7ce, 0x6e6b604d, 0xd3c54e07, 0x189df3ba }, + { 0xa7c8d1d0, 0xf06b9999, 0xb5985b26, 0x19b98ad4 } + }, + + // + // Test Case #9, - Test Case 15 from the doc + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067, + 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 64, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x55d2af1a }, + 0, + { 0 }, + { 0xf0c12d52, 0x077d5699, 0xa3377ff4, 0x7d42842a, + 0xdc8c3a64, 0xc9c0e5bf, 0xbda29875, 0xaad15525, + 0x488eb08c, 0x3dbb0d59, 0x108bb0a7, 0x38888256, + 0x631ef6c5, 0x0a7aba93, 0x62f6c9bc, 0xad158089 }, + { 0xc5da94b0, 0xbd7134d9, 0x22501aec, 0x6ccce370 } + }, + + // + // Test Case #10 - Test Case 16 from the doc + // When the data lengths do not align with the block + // boundary, we need to pad with zeros to ensure unknown + // data is not copied with uDMA. + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067, + 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab, 0x00000000, 0x00000000, 0x00000000 }, + { 0xf0c12d52, 0x077d5699, 0xa3377ff4, 0x7d42842a, + 0xdc8c3a64, 0xc9c0e5bf, 0xbda29875, 0xaad15525, + 0x488eb08c, 0x3dbb0d59, 0x108bb0a7, 0x38888256, + 0x631ef6c5, 0x0a7aba93, 0x62f6c9bc, 0x00000000 }, + { 0xce6efc76, 0x68174e0f, 0x5388dfcd, 0x1b552dbb } + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf("Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf("Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf("Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf("Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf("DMA completed a context write to the internal\n"); + UARTprintf("registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf("DMA has written the last word of input data to\n"); + UARTprintf("the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf("DMA completed the output context movement from\n"); + UARTprintf("the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf("DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an ECB encryption operation. +// +//***************************************************************************** +bool +AESECBEncrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t ui32Length) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_ECB)); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Perform the encryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + + return(true); +} + +//***************************************************************************** +// +// Calculate hash subkey with the given key. +// This is performed by encrypting 128 zeroes with the key. +// +//***************************************************************************** +void +AESHashSubkeyGet(uint32_t ui32Keysize, uint32_t *pui32Key, + uint32_t *pui32HashSubkey) +{ + uint32_t pui32ZeroArray[8]; + + // + // Put zeroes into the first 4 words of the array. + // + pui32ZeroArray[0] = 0x0; + pui32ZeroArray[1] = 0x0; + pui32ZeroArray[2] = 0x0; + pui32ZeroArray[3] = 0x0; + + // + // Put zeroes into the next 4 words if the key size is 256bit + // + if(ui32Keysize == AES_CFG_KEY_SIZE_256BIT) + { + pui32ZeroArray[4] = 0x0; + pui32ZeroArray[5] = 0x0; + pui32ZeroArray[6] = 0x0; + pui32ZeroArray[7] = 0x0; + } + + // + // Perform the encryption. + // + AESECBEncrypt(ui32Keysize, pui32ZeroArray, pui32HashSubkey, pui32Key, + (ui32Keysize == AES_CFG_KEY_SIZE_128BIT?16:32)); +} + +//***************************************************************************** +// +// Perform a basic GHASH operation with the hashsubkey and IV. This is +// used to get Y0 when the IV is not 96 bits. To use this GCM mode, the +// operation direction must not be set and the counter should be disabled. +// +//***************************************************************************** +void +AESGHASH(uint32_t ui32Keysize, uint32_t *pui32HashSubkey, uint32_t *pui32IV, + uint32_t ui32IVLength, uint32_t *pui32Result) +{ + uint32_t ui32Count; + + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_MODE_GCM_HLY0ZERO)); + + // + // Set the hash subkey. + // + ROM_AESKey2Set(AES_BASE, pui32HashSubkey, ui32Keysize); + + // + // Write the lengths + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32IVLength); + ROM_AESAuthLengthSet(AES_BASE, 0); + + // + // Write the data. + // + for(ui32Count = 0; ui32Count < ui32IVLength; ui32Count += 16) + { + // + // Write the data registers. + // + ROM_AESDataWrite(AES_BASE, pui32IV + (ui32Count / 4)); + } + + // + // Read the hash tag value. + // + AESTagRead(AES_BASE, pui32Result); +} + +//***************************************************************************** +// +// Calculate the Y0 value that needs to be written into the IV registers. +// Note: Y0 will always be 128 bits. +// +//***************************************************************************** +void +AESGCMY0Get(uint32_t ui32Keysize, uint32_t *pui32IV, uint32_t ui32IVLength, + uint32_t *pui32Key, uint32_t *pui32Y0) +{ + uint32_t pui32HashSubkey[8]; + + // + // If the length is 96 bits, then just set the last bit of the IV to 1. + // + if(ui32IVLength == 12) + { + pui32Y0[0] = pui32IV[0]; + pui32Y0[1] = pui32IV[1]; + pui32Y0[2] = pui32IV[2]; + pui32Y0[3] = 0x01000000; + } + + // + // If the length is not 96 bits, then peform a basic GHASH on the IV. + // + else + { + // + // First, get the hash subkey or H. + // + AESHashSubkeyGet(ui32Keysize, pui32Key, pui32HashSubkey); + + // + // Next, perform the GHASH operation. + // + AESGHASH(ui32Keysize, pui32HashSubkey, pui32IV, ui32IVLength, pui32Y0); + } +} + +//***************************************************************************** +// +// Perform an GCM decryption operation. +// +//***************************************************************************** +bool +AESGCMDecrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t ui32Length, uint32_t *pui32Key, uint32_t *pui32IV, + uint32_t *pui32AAD, uint32_t ui32AADLength, uint32_t *pui32Tag, + bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Wait for the context in flag. + // + while(!g_bContextInIntFlag) + { + } + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_DECRYPT | + AES_CFG_MODE_GCM_HY0CALC)); + + // + // Write the initialization value + // + ROM_AESIVSet(AES_BASE, pui32IV); + + // + // Write the keys. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the decryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + if(ui32AADLength != 0) + { + // + // Setup the DMA module to copy auth data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32AAD, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32AADLength) / 4); + UARTprintf("Data in DMA request enabled.\n"); + } + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the plaintext length + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Write the auth length registers to start the process. + // + ROM_AESAuthLengthSet(AES_BASE, ui32AADLength); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + if(ui32AADLength != 0) + { + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + } + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + if(ui32AADLength != 0) + { + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + } + + if(ui32Length != 0) + { + // + // Setup the uDMA to copy the plaintext data. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + + // + // Read out the tag. + // + AESTagRead(AES_BASE, pui32Tag); + } + else + { + // + // Perform the decryption. + // + ROM_AESDataProcessAuth(AES_BASE, pui32Src, pui32Dst, ui32Length, + pui32AAD, ui32AADLength, pui32Tag); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example decrypts blocks ciphertext using AES128 and AES256 in GCM +// mode. It does the decryption first without uDMA and then with uDMA. +// The results are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32PlainText[64], pui32Tag[4], pui32Y0[4], ui32Errors, ui32Idx; + uint32_t *pui32Key, ui32IVLength, *pui32IV, ui32DataLength; + uint32_t *pui32ExpPlainText, ui32AuthDataLength, *pui32AuthData; + uint32_t *pui32CipherText, *pui32ExpTag; + uint32_t ui32KeySize; + uint32_t ui32SysClock; + uint8_t ui8Vector; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-gcm-decrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES GCM decryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Loop through all the given vectors. + // + for(ui8Vector = 0; + (ui8Vector < + (sizeof(g_psAESGCMTestVectors) / sizeof(g_psAESGCMTestVectors[0]))) && + (ui32Errors == 0); + ui8Vector++) + { + UARTprintf("Starting vector #%d\n", ui8Vector); + + // + // Get the current vector's data members. + // + ui32KeySize = g_psAESGCMTestVectors[ui8Vector].ui32KeySize; + pui32Key = g_psAESGCMTestVectors[ui8Vector].pui32Key; + ui32IVLength = g_psAESGCMTestVectors[ui8Vector].ui32IVLength; + pui32IV = g_psAESGCMTestVectors[ui8Vector].pui32IV; + ui32DataLength = g_psAESGCMTestVectors[ui8Vector].ui32DataLength; + pui32ExpPlainText = g_psAESGCMTestVectors[ui8Vector].pui32PlainText; + ui32AuthDataLength = + g_psAESGCMTestVectors[ui8Vector].ui32AuthDataLength; + pui32AuthData = g_psAESGCMTestVectors[ui8Vector].pui32AuthData; + pui32CipherText = g_psAESGCMTestVectors[ui8Vector].pui32CipherText; + pui32ExpTag = g_psAESGCMTestVectors[ui8Vector].pui32Tag; + + // + // If both the data lengths are zero, then it's a special case. + // + if((ui32DataLength == 0) && (ui32AuthDataLength == 0)) + { + UARTprintf("Performing decryption without uDMA.\n"); + + // + // Figure out the value of Y0 depending on the IV length. + // + AESGCMY0Get(ui32KeySize, pui32IV, ui32IVLength, pui32Key, pui32Y0); + + // + // Perform the basic encryption. + // + AESECBEncrypt(ui32KeySize, pui32Y0, pui32Tag, pui32Key, 16); + } + else + { + // + // Figure out the value of Y0 depending on the IV length. + // + AESGCMY0Get(ui32KeySize, pui32IV, ui32IVLength, pui32Key, pui32Y0); + + // + // Perform the decryption without uDMA. + // + UARTprintf("Performing decryption without uDMA.\n"); + AESGCMDecrypt(ui32KeySize, pui32CipherText, pui32PlainText, + ui32DataLength, pui32Key, pui32Y0, pui32AuthData, + ui32AuthDataLength, pui32Tag, false); + } + + // + // Check the results. + // + for(ui32Idx = 0; ui32Idx < (ui32DataLength / 4); ui32Idx++) + { + if(pui32ExpPlainText[ui32Idx] != pui32PlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + if(pui32ExpTag[ui32Idx] != pui32Tag[ui32Idx]) + { + UARTprintf("Tag mismatch on word %d. Exp: 0x%x, Act: 0x%x\n", + ui32Idx, pui32ExpTag[ui32Idx], pui32Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000003; + } + } + + // + // Clear the arrays containing the ciphertext and tag to ensure things + // are working correctly. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Only use DMA with the vectors that have data. + // + if((ui32DataLength != 0) || (ui32AuthDataLength != 0)) + { + // + // Perform the decryption with uDMA. + // + UARTprintf("Performing decryption with uDMA.\n"); + AESGCMDecrypt(ui32KeySize, pui32CipherText, pui32PlainText, + ui32DataLength, pui32Key, pui32Y0, pui32AuthData, + ui32AuthDataLength, pui32Tag, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < (ui32DataLength / 4); ui32Idx++) + { + if(pui32ExpPlainText[ui32Idx] != pui32PlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, " + "Act: 0x%x\n", ui32Idx, + pui32ExpPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + if(pui32ExpTag[ui32Idx] != pui32Tag[ui32Idx]) + { + UARTprintf("Tag mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpTag[ui32Idx], + pui32Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000003; + } + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + // + // Wait forever. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewd b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewp b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewp new file mode 100644 index 0000000..f38cf74 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_gcm_decrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.icf b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.icf new file mode 100644 index 0000000..0019c3f --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_gcm_decrypt.icf - Linker configuration file for aes_gcm_decrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ld b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ld new file mode 100644 index 0000000..0bc9a25 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_gcm_decrypt.ld - Linker configuration file for aes_gcm_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.sct b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.sct new file mode 100644 index 0000000..2bf4320 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_gcm_decrypt.sct - Linker configuration file for aes_gcm_decrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvopt b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvopt new file mode 100644 index 0000000..c47e7a9 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_gcm_decrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_gcm_decrypt.c + aes_gcm_decrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvproj b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvproj new file mode 100644 index 0000000..6856f2f --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_gcm_decrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_gcm_decrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_gcm_decrypt.bin .\rvmdk\aes_gcm_decrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_gcm_decrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_gcm_decrypt.c + 1 + .\aes_gcm_decrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt_ccs.cmd b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt_ccs.cmd new file mode 100644 index 0000000..790c3a8 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_gcm_decrypt_ccs.cmd - CCS linker configuration file for aes_gcm_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..c0a5a25 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.cproject new file mode 100644 index 0000000..7c834ab --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.project b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.project new file mode 100644 index 0000000..66b532f --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_gcm_decrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_gcm_decrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt.c + + + aes_gcm_decrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_gcm_decrypt/aes_gcm_decrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.bin b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.bin new file mode 100644 index 0000000..dc8f56d Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.out b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.out new file mode 100644 index 0000000..8a9809d Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/Debug/aes_gcm_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.bin b/boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.bin new file mode 100644 index 0000000..f854d57 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.out b/boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.out new file mode 100644 index 0000000..bf5f245 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/ewarm/Exe/aes_gcm_decrypt.out differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.axf b/boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.axf new file mode 100644 index 0000000..761a928 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.bin b/boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.bin new file mode 100644 index 0000000..b1e0be5 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/gcc/aes_gcm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/readme.txt b/boards/dk-tm4c129x/aes_gcm_decrypt/readme.txt new file mode 100644 index 0000000..314d5b2 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/readme.txt @@ -0,0 +1,28 @@ +AES128 and AES256 GCM Decryption Demo + +Simple demo showing authenticated decryption operations using the AES +module in GCM mode. The test vectors are from the gcm_revised_spec.pdf +document. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.axf b/boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.axf new file mode 100644 index 0000000..02697ff Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.bin b/boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.bin new file mode 100644 index 0000000..a466050 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_decrypt/rvmdk/aes_gcm_decrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_decrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_decrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/Makefile b/boards/dk-tm4c129x/aes_gcm_encrypt/Makefile new file mode 100644 index 0000000..9b0c1b1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the AES128 and AES256 GCM Encryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the AES128 and AES256 GCM Encryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/aes_gcm_encrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the AES128 and AES256 GCM Encryption Demo. +# +${COMPILER}/aes_gcm_encrypt.axf: ${COMPILER}/aes_gcm_encrypt.o +${COMPILER}/aes_gcm_encrypt.axf: ${COMPILER}/frame.o +${COMPILER}/aes_gcm_encrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/aes_gcm_encrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/aes_gcm_encrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/aes_gcm_encrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/aes_gcm_encrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/aes_gcm_encrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/aes_gcm_encrypt.axf: aes_gcm_encrypt.ld +SCATTERgcc_aes_gcm_encrypt=aes_gcm_encrypt.ld +ENTRY_aes_gcm_encrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.c b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.c new file mode 100644 index 0000000..09dd106 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.c @@ -0,0 +1,1190 @@ +//***************************************************************************** +// +// aes_gcm_encrypt.c - Simple AES128 and AES256 GCM encryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_aes.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/aes.h" +#include "driverlib/debug.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

AES128 and AES256 GCM Encryption Demo (aes_gcm_encrypt)

+//! +//! Simple demo showing authenticated encryption operations using the AES +//! module in GCM mode. The test vectors are from the gcm_revised_spec.pdf +//! document. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Structure for NIST AES GCM tests +// +//***************************************************************************** +typedef struct AESTestVectorStruct +{ + uint32_t ui32KeySize; + uint32_t pui32Key[8]; + uint32_t ui32IVLength; + uint32_t pui32IV[64]; + uint32_t ui32DataLength; + uint32_t pui32PlainText[64]; + uint32_t ui32AuthDataLength; + uint32_t pui32AuthData[64]; + uint32_t pui32CipherText[64]; + uint32_t pui32Tag[4]; +} +tAESGCMTestVector; + +//***************************************************************************** +// +// Test Cases from NIST GCM Revised Spec. +// +//***************************************************************************** +tAESGCMTestVector g_psAESGCMTestVectors[] = +{ + // + // Test Case #1 + // This is a special case that cannot use the GCM mode because the + // data and AAD lengths are both zero. The work around is to perform + // an ECB encryption on Y0. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + 0, + { 0 }, + { 0 }, + { 0xcefce258, 0x61307efa, 0x571d7f36, 0x5a45e7a4 } + }, + + // + // Test Case #2 + // This is the first test in which the AAD length is zero. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 16, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + { 0xceda8803, 0x92a3b660, 0xb9c228f3, 0x78feb271 }, + { 0xd4476eab, 0xbd13ec2c, 0xb2673af5, 0xdfbd5712 } + }, + + // + // Test Case #3 + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 64, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x55d2af1a }, + 0, + { 0 }, + { 0xc21e8342, 0x24747721, 0xb721724b, 0x9cd4d084, + 0x2f21aae3, 0xe0a4022c, 0x237ec135, 0x2ea1ac29, + 0xb214d521, 0x1c936654, 0x5a6a8f7d, 0x05aa84ac, + 0x390ba31b, 0x97ac0a6a, 0x91e0583d, 0x85593f47 }, + { 0xf32a5c4d, 0xa664cd27, 0xbd5af32c, 0xb4faa62b } + }, + + // + // Test Case #4 + // When the data lengths do not align with the block + // boundary, we need to pad with zeros to ensure unknown + // data is not copied with uDMA. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab, 0x00000000, 0x00000000, 0x00000000 }, + { 0xc21e8342, 0x24747721, 0xb721724b, 0x9cd4d084, + 0x2f21aae3, 0xe0a4022c, 0x237ec135, 0x2ea1ac29, + 0xb214d521, 0x1c936654, 0x5a6a8f7d, 0x05aa84ac, + 0x390ba31b, 0x97ac0a6a, 0x91e0583d, 0x00000000 }, + { 0xbc4fc95b, 0xdba52132, 0x5ae9fa94, 0x471a12e7 } + }, + + // + // Test Case #5 + // This is the first case in which IV is less than + // 96 bits. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 8, + { 0xbebafeca, 0xaddbcefa, 0x00000000, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab, 0x00000000, 0x00000000, 0x00000000 }, + { 0x4c3b3561, 0x4a930628, 0x1ff57f77, 0x55472aa2, + 0x712a9b69, 0xf8c6cd4f, 0xf9e56637, 0x23746c7b, + 0x00698073, 0xb2249fe4, 0x4475092b, 0x426b89d4, + 0xe1b58949, 0x070faceb, 0x98453fc2, 0x00000000 }, + { 0xe7d21236, 0x85073b9e, 0x4ae11b56, 0xcbfca2ac } + }, + + // + // Test Case #6 + // This is the first case in which IV is more than + // 96 bits. + // + { + AES_CFG_KEY_SIZE_128BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 60, + { 0x5d221393, 0xe50684f8, 0x5a9c9055, 0xaa6952ff, + 0x38957a6a, 0xa17d4f53, 0xd203c3e4, 0x28a718a3, + 0x51c9c0c3, 0x39958056, 0x42e2f0fc, 0x54526b9a, + 0xf5dbae16, 0x576adea0, 0x9bb337a6, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab }, + { 0x9849e28c, 0xb6155662, 0xac33a003, 0x94b83fa1, + 0xa51291be, 0xa811a2c3, 0x3c2a26ba, 0xa72c7eca, + 0xa4a9e401, 0x903ca4fb, 0x81b2dccc, 0x6f7c8cd4, + 0xd27528d6, 0x0317a4ac, 0xe5ae344c, 0x00000000 }, + { 0xaec59c61, 0xfa0bfeff, 0x3cf42a46, 0x50d09916 } + }, + + // + // The following test cases use 256bit Keys. + // + // Test Case #7 - Test Case 13 from the doc + // This is a special case that cannot use the GCM mode because the + // data and AAD lengths are both zero. The work around is to perform + // an ECB encryption on Y0. + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + 0, + { 0 }, + { 0 }, + { 0xfb8a0f53, 0xb93645c7, 0xf1b463a9, 0x8b73cbc4 } + }, + + // + // Test Case #8, - Test Case 14 from the doc + // This is the first test in which the AAD length is zero. + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 12, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 16, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + 0, + { 0 }, + { 0x3d40a7ce, 0x6e6b604d, 0xd3c54e07, 0x189df3ba }, + { 0xa7c8d1d0, 0xf06b9999, 0xb5985b26, 0x19b98ad4 } + }, + + // + // Test Case #9, - Test Case 15 from the doc + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067, + 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 64, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x55d2af1a }, + 0, + { 0 }, + { 0xf0c12d52, 0x077d5699, 0xa3377ff4, 0x7d42842a, + 0xdc8c3a64, 0xc9c0e5bf, 0xbda29875, 0xaad15525, + 0x488eb08c, 0x3dbb0d59, 0x108bb0a7, 0x38888256, + 0x631ef6c5, 0x0a7aba93, 0x62f6c9bc, 0xad158089 }, + { 0xc5da94b0, 0xbd7134d9, 0x22501aec, 0x6ccce370 } + }, + + // + // Test Case #10 - Test Case 16 from the doc + // When the data lengths do not align with the block + // boundary, we need to pad with zeros to ensure unknown + // data is not copied with uDMA. + // + { + AES_CFG_KEY_SIZE_256BIT, + { 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067, + 0x92e9fffe, 0x1c736586, 0x948f6a6d, 0x08833067 }, + 12, + { 0xbebafeca, 0xaddbcefa, 0x88f8cade, 0x00000000 }, + 60, + { 0x253231d9, 0xe50684f8, 0xc50959a5, 0x9a26f5af, + 0x53a9a786, 0xdaf73415, 0x3d304c2e, 0x728a318a, + 0x950c3c1c, 0x53096895, 0x240ecf2f, 0x25b5a649, + 0xf5ed6ab1, 0x57e60daa, 0x397b63ba, 0x00000000 }, + 20, + { 0xcefaedfe, 0xefbeadde, 0xcefaedfe, 0xefbeadde, + 0xd2daadab, 0x00000000, 0x00000000, 0x00000000 }, + { 0xf0c12d52, 0x077d5699, 0xa3377ff4, 0x7d42842a, + 0xdc8c3a64, 0xc9c0e5bf, 0xbda29875, 0xaad15525, + 0x488eb08c, 0x3dbb0d59, 0x108bb0a7, 0x38888256, + 0x631ef6c5, 0x0a7aba93, 0x62f6c9bc, 0x00000000 }, + { 0xce6efc76, 0x68174e0f, 0x5388dfcd, 0x1b552dbb } + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 16 byte boundary. This is needed because all +// four data registers must be written at once. This is handled in the AES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 16; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (16 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The AES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bContextOutIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bContextOutDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +AESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the AES masked interrupt status. + // + ui32IntStatus = ROM_AESIntStatus(AES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & AES_INT_CONTEXT_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf("Context input registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_IN) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf("Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & AES_INT_CONTEXT_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_CONTEXT_OUT); + g_bContextOutIntFlag = true; + UARTprintf("Context output registers are ready.\n"); + } + if(ui32IntStatus & AES_INT_DATA_OUT) + { + ROM_AESIntDisable(AES_BASE, AES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf("Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf("DMA completed a context write to the internal\n"); + UARTprintf("registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_IN) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf("DMA has written the last word of input data to\n"); + UARTprintf("the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & AES_INT_DMA_CONTEXT_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneIntFlag = true; + UARTprintf("DMA completed the output context movement from\n"); + UARTprintf("the internal registers.\n"); + } + if(ui32IntStatus & AES_INT_DMA_DATA_OUT) + { + ROM_AESIntClear(AES_BASE, AES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf("DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an ECB encryption operation. +// +//***************************************************************************** +bool +AESECBEncrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t *pui32Key, uint32_t ui32Length) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_ECB)); + + // + // Write the key. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Perform the encryption. + // + ROM_AESDataProcess(AES_BASE, pui32Src, pui32Dst, ui32Length); + + return(true); +} + +//***************************************************************************** +// +// Calculate hash subkey with the given key. +// This is performed by encrypting 128 zeroes with the key. +// +//***************************************************************************** +void +AESHashSubkeyGet(uint32_t ui32Keysize, uint32_t *pui32Key, + uint32_t *pui32HashSubkey) +{ + uint32_t pui32ZeroArray[8]; + + // + // Put zeroes into the first 4 words of the array. + // + pui32ZeroArray[0] = 0x0; + pui32ZeroArray[1] = 0x0; + pui32ZeroArray[2] = 0x0; + pui32ZeroArray[3] = 0x0; + + // + // Put zeroes into the next 4 words if the key size is 256bit + // + if(ui32Keysize == AES_CFG_KEY_SIZE_256BIT) + { + pui32ZeroArray[4] = 0x0; + pui32ZeroArray[5] = 0x0; + pui32ZeroArray[6] = 0x0; + pui32ZeroArray[7] = 0x0; + } + + // + // Perform the encryption. + // + AESECBEncrypt(ui32Keysize, pui32ZeroArray, pui32HashSubkey, pui32Key, + (ui32Keysize == AES_CFG_KEY_SIZE_128BIT?16:32)); +} + +//***************************************************************************** +// +// Perform a basic GHASH operation with the hashsubkey and IV. This is +// used to get Y0 when the IV is not 96 bits. To use this GCM mode, the +// operation direction must not be set and the counter should be disabled. +// +//***************************************************************************** +void +AESGHASH(uint32_t ui32Keysize, uint32_t *pui32HashSubkey, uint32_t *pui32IV, + uint32_t ui32IVLength, uint32_t *pui32Result) +{ + uint32_t ui32Count; + + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_MODE_GCM_HLY0ZERO)); + + // + // Set the hash subkey. + // + ROM_AESKey2Set(AES_BASE, pui32HashSubkey, ui32Keysize); + + // + // Write the lengths + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32IVLength); + ROM_AESAuthLengthSet(AES_BASE, 0); + + // + // Write the data. + // + for(ui32Count = 0; ui32Count < ui32IVLength; ui32Count += 16) + { + // + // Write the data registers. + // + ROM_AESDataWrite(AES_BASE, pui32IV + (ui32Count / 4)); + } + + // + // Read the hash tag value. + // + AESTagRead(AES_BASE, pui32Result); +} + +//***************************************************************************** +// +// Calculate the Y0 value that needs to be written into the IV registers. +// Note: Y0 will always be 128 bits. +// +//***************************************************************************** +void +AESGCMY0Get(uint32_t ui32Keysize, uint32_t *pui32IV, uint32_t ui32IVLength, + uint32_t *pui32Key, uint32_t *pui32Y0) +{ + uint32_t pui32HashSubkey[8]; + + // + // If the length is 96 bits, then just set the last bit of the IV to 1. + // + if(ui32IVLength == 12) + { + pui32Y0[0] = pui32IV[0]; + pui32Y0[1] = pui32IV[1]; + pui32Y0[2] = pui32IV[2]; + pui32Y0[3] = 0x01000000; + } + + // + // If the length is not 96 bits, then peform a basic GHASH on the IV. + // + else + { + // + // First, get the hash subkey or H. + // + AESHashSubkeyGet(ui32Keysize, pui32Key, pui32HashSubkey); + + // + // Next, perform the GHASH operation. + // + AESGHASH(ui32Keysize, pui32HashSubkey, pui32IV, ui32IVLength, pui32Y0); + } +} + +//***************************************************************************** +// +// Perform an GCM encryption operation. +// +//***************************************************************************** +bool +AESGCMEncrypt(uint32_t ui32Keysize, uint32_t *pui32Src, uint32_t *pui32Dst, + uint32_t ui32Length, uint32_t *pui32Key, uint32_t *pui32IV, + uint32_t *pui32AAD, uint32_t ui32AADLength, uint32_t *pui32Tag, + bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_AESReset(AES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bContextOutIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bContextOutDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_CONTEXT_IN | AES_INT_CONTEXT_OUT | + AES_INT_DATA_IN | AES_INT_DATA_OUT)); + + // + // Wait for the context in flag. + // + while(!g_bContextInIntFlag) + { + } + + // + // Configure the AES module. + // + ROM_AESConfigSet(AES_BASE, (ui32Keysize | AES_CFG_DIR_ENCRYPT | + AES_CFG_MODE_GCM_HY0CALC)); + + // + // Write the initialization value + // + ROM_AESIVSet(AES_BASE, pui32IV); + + // + // Write the keys. + // + ROM_AESKey1Set(AES_BASE, pui32Key, ui32Keysize); + + // + // Depending on the argument, perform the encryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_AESIntEnable(AES_BASE, (AES_INT_DMA_CONTEXT_IN | + AES_INT_DMA_DATA_IN | + AES_INT_DMA_CONTEXT_OUT | + AES_INT_DMA_DATA_OUT)); + + if(ui32AADLength != 0) + { + // + // Setup the DMA module to copy auth data in. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32AAD, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32AADLength) / 4); + UARTprintf("Data in DMA request enabled.\n"); + } + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH15_AES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH15_AES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_4 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH15_AES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(AES_BASE + AES_O_DATA_IN_0), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Write the plaintext length + // + ROM_AESLengthSet(AES_BASE, (uint64_t)ui32Length); + + // + // Write the auth length registers to start the process. + // + ROM_AESAuthLengthSet(AES_BASE, ui32AADLength); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + if(ui32AADLength != 0) + { + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + } + ROM_uDMAChannelEnable(UDMA_CH15_AES0DOUT); + + // + // Enable DMA requests + // + ROM_AESDMAEnable(AES_BASE, AES_DMA_DATA_IN | AES_DMA_DATA_OUT); + + if(ui32AADLength != 0) + { + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + } + + if(ui32Length != 0) + { + // + // Setup the uDMA to copy the plaintext data. + // + ROM_uDMAChannelAssign(UDMA_CH14_AES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH14_AES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_4 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH14_AES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(AES_BASE + AES_O_DATA_IN_0), + LengthRoundUp(ui32Length) / 4); + ROM_uDMAChannelEnable(UDMA_CH14_AES0DIN); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + + // + // Read out the tag. + // + AESTagRead(AES_BASE, pui32Tag); + } + else + { + // + // Perform the encryption. + // + ROM_AESDataProcessAuth(AES_BASE, pui32Src, pui32Dst, ui32Length, + pui32AAD, ui32AADLength, pui32Tag); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the AES and CCM modules. +// +//***************************************************************************** +bool +AESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example encrypts blocks ciphertext using AES128 in GCM mode. It +// does the encryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32CipherText[64], pui32Tag[4], pui32Y0[4], ui32Errors, ui32Idx; + uint32_t *pui32Key, ui32IVLength, *pui32IV, ui32DataLength; + uint32_t *pui32ExpCipherText, ui32AuthDataLength, *pui32AuthData; + uint32_t *pui32PlainText, *pui32ExpTag; + uint8_t ui8Vector; + uint32_t ui32KeySize; + uint32_t ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "aes-gcm-encrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable AES interrupts. + // + ROM_IntEnable(INT_AES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting AES GCM encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and AES modules. + // + if(!AESInit()) + { + UARTprintf("Initialization of the AES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Loop through all the given vectors. + // + for(ui8Vector = 0; + (ui8Vector < + (sizeof(g_psAESGCMTestVectors) / sizeof(g_psAESGCMTestVectors[0]))) && + (ui32Errors == 0); + ui8Vector++) + { + UARTprintf("Starting vector #%d\n", ui8Vector); + + // + // Get the current vector's data members. + // + ui32KeySize = g_psAESGCMTestVectors[ui8Vector].ui32KeySize; + pui32Key = g_psAESGCMTestVectors[ui8Vector].pui32Key; + ui32IVLength = g_psAESGCMTestVectors[ui8Vector].ui32IVLength; + pui32IV = g_psAESGCMTestVectors[ui8Vector].pui32IV; + ui32DataLength = g_psAESGCMTestVectors[ui8Vector].ui32DataLength; + pui32PlainText = g_psAESGCMTestVectors[ui8Vector].pui32PlainText; + ui32AuthDataLength = + g_psAESGCMTestVectors[ui8Vector].ui32AuthDataLength; + pui32AuthData = g_psAESGCMTestVectors[ui8Vector].pui32AuthData; + pui32ExpCipherText = g_psAESGCMTestVectors[ui8Vector].pui32CipherText; + pui32ExpTag = g_psAESGCMTestVectors[ui8Vector].pui32Tag; + + // + // If both the data lengths are zero, then it's a special case. + // + if((ui32DataLength == 0) && (ui32AuthDataLength == 0)) + { + UARTprintf("Performing encryption without uDMA.\n"); + + // + // Figure out the value of Y0 depending on the IV length. + // + AESGCMY0Get(ui32KeySize, pui32IV, ui32IVLength, pui32Key, pui32Y0); + + // + // Perform the basic encryption. + // + AESECBEncrypt(ui32KeySize, pui32Y0, pui32Tag, pui32Key, 16); + } + else + { + // + // Figure out the value of Y0 depending on the IV length. + // + AESGCMY0Get(ui32KeySize, pui32IV, ui32IVLength, pui32Key, pui32Y0); + + // + // Perform the encryption without uDMA. + // + UARTprintf("Performing encryption without uDMA.\n"); + AESGCMEncrypt(ui32KeySize, pui32PlainText, pui32CipherText, + ui32DataLength, pui32Key, pui32Y0, pui32AuthData, + ui32AuthDataLength, pui32Tag, false); + } + + // + // Check the results. + // + for(ui32Idx = 0; ui32Idx < (ui32DataLength / 4); ui32Idx++) + { + if(pui32ExpCipherText[ui32Idx] != pui32CipherText[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpCipherText[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + if(pui32ExpTag[ui32Idx] != pui32Tag[ui32Idx]) + { + UARTprintf("Tag mismatch on word %d. Exp: 0x%x, Act: 0x%x\n", + ui32Idx, pui32ExpTag[ui32Idx], pui32Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000003; + } + } + + // + // Clear the arrays containing the ciphertext and tag to ensure things + // are working correctly. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + pui32Tag[ui32Idx] = 0; + } + + // + // Only use DMA with the vectors that have data. + // + if((ui32DataLength != 0) || (ui32AuthDataLength != 0)) + { + // + // Perform the encryption with uDMA. + // + UARTprintf("Performing encryption with uDMA.\n"); + AESGCMEncrypt(ui32KeySize, pui32PlainText, pui32CipherText, + ui32DataLength, pui32Key, pui32Y0, pui32AuthData, + ui32AuthDataLength, pui32Tag, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < (ui32DataLength / 4); ui32Idx++) + { + if(pui32ExpCipherText[ui32Idx] != pui32CipherText[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, " + "Act: 0x%x\n", ui32Idx, + pui32ExpCipherText[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + if(pui32ExpTag[ui32Idx] != pui32Tag[ui32Idx]) + { + UARTprintf("Tag mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, pui32ExpTag[ui32Idx], + pui32Tag[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000003; + } + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + // + // Wait forever. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewd b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewp b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewp new file mode 100644 index 0000000..a4252b4 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\aes_gcm_encrypt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.icf b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.icf new file mode 100644 index 0000000..21e2c08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// aes_gcm_encrypt.icf - Linker configuration file for aes_gcm_encrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ld b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ld new file mode 100644 index 0000000..47c331b --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * aes_gcm_encrypt.ld - Linker configuration file for aes_gcm_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.sct b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.sct new file mode 100644 index 0000000..d44f696 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; aes_gcm_encrypt.sct - Linker configuration file for aes_gcm_encrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvopt b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvopt new file mode 100644 index 0000000..2bf29e1 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + aes_gcm_encrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\aes_gcm_encrypt.c + aes_gcm_encrypt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvproj b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvproj new file mode 100644 index 0000000..c64ab07 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + aes_gcm_encrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + aes_gcm_encrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\aes_gcm_encrypt.bin .\rvmdk\aes_gcm_encrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + aes_gcm_encrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + aes_gcm_encrypt.c + 1 + .\aes_gcm_encrypt.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt_ccs.cmd b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt_ccs.cmd new file mode 100644 index 0000000..9a2054c --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * aes_gcm_encrypt_ccs.cmd - CCS linker configuration file for aes_gcm_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..8409600 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsproject b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.cproject b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.cproject new file mode 100644 index 0000000..a1e290e --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.project b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.project new file mode 100644 index 0000000..c859a3d --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.project @@ -0,0 +1,70 @@ + + + aes_gcm_encrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + aes_gcm_encrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt.c + + + aes_gcm_encrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_gcm_encrypt/aes_gcm_encrypt_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.bin b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.bin new file mode 100644 index 0000000..a3d6c5e Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.out b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.out new file mode 100644 index 0000000..71a0552 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/Debug/aes_gcm_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.bin b/boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.bin new file mode 100644 index 0000000..95c93bb Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.out b/boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.out new file mode 100644 index 0000000..b341535 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/ewarm/Exe/aes_gcm_encrypt.out differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.axf b/boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.axf new file mode 100644 index 0000000..3cc174d Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.bin b/boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.bin new file mode 100644 index 0000000..e73cdb5 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/gcc/aes_gcm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/readme.txt b/boards/dk-tm4c129x/aes_gcm_encrypt/readme.txt new file mode 100644 index 0000000..1e86e33 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/readme.txt @@ -0,0 +1,28 @@ +AES128 and AES256 GCM Encryption Demo + +Simple demo showing authenticated encryption operations using the AES +module in GCM mode. The test vectors are from the gcm_revised_spec.pdf +document. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.axf b/boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.axf new file mode 100644 index 0000000..8285118 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.axf differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.bin b/boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.bin new file mode 100644 index 0000000..5e38683 Binary files /dev/null and b/boards/dk-tm4c129x/aes_gcm_encrypt/rvmdk/aes_gcm_encrypt.bin differ diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ccs.c b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ccs.c new file mode 100644 index 0000000..882868b --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ewarm.c b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ewarm.c new file mode 100644 index 0000000..b08ccba --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/startup_gcc.c b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_gcc.c new file mode 100644 index 0000000..f1c5730 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void AESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + AESIntHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/aes_gcm_encrypt/startup_rvmdk.S b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_rvmdk.S new file mode 100644 index 0000000..558dc08 --- /dev/null +++ b/boards/dk-tm4c129x/aes_gcm_encrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN AESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD AESIntHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/bitband/Makefile b/boards/dk-tm4c129x/bitband/Makefile new file mode 100644 index 0000000..64a06f7 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/Makefile @@ -0,0 +1,89 @@ +#****************************************************************************** +# +# Makefile - Rules for building the bitband example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the bitband example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/bitband.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the bitband example. +# +${COMPILER}/bitband.axf: ${COMPILER}/bitband.o +${COMPILER}/bitband.axf: ${COMPILER}/frame.o +${COMPILER}/bitband.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/bitband.axf: ${COMPILER}/pinout.o +${COMPILER}/bitband.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/bitband.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/bitband.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/bitband.axf: bitband.ld +SCATTERgcc_bitband=bitband.ld +ENTRY_bitband=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/bitband/bitband.c b/boards/dk-tm4c129x/bitband/bitband.c new file mode 100644 index 0000000..d8bb836 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// bitband.c - Bit-band manipulation example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Bit-Banding (bitband)

+//! +//! This example application demonstrates the use of the bit-banding +//! capabilities of the Cortex-M4 microprocessor. All of SRAM and all of the +//! peripherals reside within bit-band regions, meaning that bit-banding +//! operations can be applied to any of them. In this example, a variable in +//! SRAM is set to a particular value one bit at a time using bit-banding +//! operations (it would be more efficient to do a single non-bit-banded write; +//! this simply demonstrates the operation of bit-banding). +// +//***************************************************************************** + +//***************************************************************************** +// +// A map of hex nibbles to ASCII characters. +// +//***************************************************************************** +static const char * const pcHex = "0123456789ABCDEF"; + +//***************************************************************************** +// +// The value that is to be modified via bit-banding. +// +//***************************************************************************** +static volatile uint32_t g_ui32Value; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Delay for the specified number of seconds. Depending upon the current +// SysTick value, the delay will be between N-1 and N seconds (i.e. N-1 full +// seconds are guaranteed, along with the remainder of the current second). +// +//***************************************************************************** +void +Delay(uint32_t ui32Seconds) +{ + // + // Loop while there are more seconds to wait. + // + while(ui32Seconds--) + { + // + // Wait until the SysTick value is less than 1000. + // + while(ROM_SysTickValueGet() > 1000) + { + } + + // + // Wait until the SysTick value is greater than 1000. + // + while(ROM_SysTickValueGet() < 1000) + { + } + } +} + +//***************************************************************************** +// +// Print the given value as a hexadecimal string on the display. +// +//***************************************************************************** +void +PrintValue(uint32_t ui32Value) +{ + char pcBuffer[9]; + + pcBuffer[0] = pcHex[(ui32Value >> 28) & 15]; + pcBuffer[1] = pcHex[(ui32Value >> 24) & 15]; + pcBuffer[2] = pcHex[(ui32Value >> 20) & 15]; + pcBuffer[3] = pcHex[(ui32Value >> 16) & 15]; + pcBuffer[4] = pcHex[(ui32Value >> 12) & 15]; + pcBuffer[5] = pcHex[(ui32Value >> 8) & 15]; + pcBuffer[6] = pcHex[(ui32Value >> 4) & 15]; + pcBuffer[7] = pcHex[(ui32Value >> 0) & 15]; + pcBuffer[8] = '\0'; + + GrStringDrawCentered(&g_sContext, pcBuffer, -1, + GrContextDpyWidthGet(&g_sContext) / 2, 120, 1); +} + +//***************************************************************************** +// +// This example demonstrates the use of bit-banding to set individual bits +// within a word of SRAM. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + uint32_t ui32Errors, ui32Idx; + + // + // Set the system clock to run at 16MHz from the PLL. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 16000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "bitband"); + + // + // Set up and enable the SysTick timer. It will be used as a reference + // for delay loops. The SysTick timer period will be set up for one + // second. + // + ROM_SysTickPeriodSet(ui32SysClock); + ROM_SysTickEnable(); + + // + // Set the value and error count to zero. + // + g_ui32Value = 0; + ui32Errors = 0; + + // + // Print the initial value to the display. + // + PrintValue(g_ui32Value); + + // + // Delay for 1 second. + // + Delay(1); + + // + // Set the value to 0xdecafbad using bit band accesses to each individual + // bit. + // + for(ui32Idx = 0; ui32Idx < 32; ui32Idx++) + { + // + // Set this bit. + // + HWREGBITW(&g_ui32Value, 31 - ui32Idx) = + (0xdecafbad >> (31 - ui32Idx)) & 1; + + // + // Print the current value to the display. + // + PrintValue(g_ui32Value); + + // + // Delay for 1 second. + // + Delay(1); + } + + // + // Make sure that the value is 0xdecafbad. + // + if(g_ui32Value != 0xdecafbad) + { + ui32Errors++; + } + + // + // Make sure that the individual bits read back correctly. + // + for(ui32Idx = 0; ui32Idx < 32; ui32Idx++) + { + if(HWREGBITW(&g_ui32Value, ui32Idx) != ((0xdecafbad >> ui32Idx) & 1)) + { + ui32Errors++; + } + } + + // + // Delay for 2 seconds. + // + Delay(2); + + // + // Print out the result. + // + if(ui32Errors) + { + GrStringDrawCentered(&g_sContext, "Errors!", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 180, 0); + } + else + { + GrStringDrawCentered(&g_sContext, "Success!", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 180, 0); + } + + // + // Flush any cached drawing operations. + // + GrFlush(&g_sContext); + + // + // Loop forever. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/bitband/bitband.ewd b/boards/dk-tm4c129x/bitband/bitband.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/bitband/bitband.ewp b/boards/dk-tm4c129x/bitband/bitband.ewp new file mode 100644 index 0000000..0ff6e90 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\bitband.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + diff --git a/boards/dk-tm4c129x/bitband/bitband.icf b/boards/dk-tm4c129x/bitband/bitband.icf new file mode 100644 index 0000000..f3a3677 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// bitband.icf - Linker configuration file for bitband. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/bitband/bitband.ld b/boards/dk-tm4c129x/bitband/bitband.ld new file mode 100644 index 0000000..b03aca6 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * bitband.ld - Linker configuration file for bitband. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/bitband/bitband.sct b/boards/dk-tm4c129x/bitband/bitband.sct new file mode 100644 index 0000000..5226c5d --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; bitband.sct - Linker configuration file for bitband. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/bitband/bitband.uvopt b/boards/dk-tm4c129x/bitband/bitband.uvopt new file mode 100644 index 0000000..3081f43 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + bitband + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\bitband.c + bitband.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/bitband/bitband.uvproj b/boards/dk-tm4c129x/bitband/bitband.uvproj new file mode 100644 index 0000000..b584201 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + bitband + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + bitband + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\bitband.bin .\rvmdk\bitband.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + bitband.sct + + + --entry Reset_Handler + + + + + + + + Source + + + bitband.c + 1 + .\bitband.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/bitband/bitband_ccs.cmd b/boards/dk-tm4c129x/bitband/bitband_ccs.cmd new file mode 100644 index 0000000..38228cd --- /dev/null +++ b/boards/dk-tm4c129x/bitband/bitband_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * bitband_ccs.cmd - CCS linker configuration file for bitband. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/dk-tm4c129x/bitband/ccs/.ccsimportspec b/boards/dk-tm4c129x/bitband/ccs/.ccsimportspec new file mode 100644 index 0000000..9748e3c --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/bitband/ccs/.ccsproject b/boards/dk-tm4c129x/bitband/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/bitband/ccs/.cproject b/boards/dk-tm4c129x/bitband/ccs/.cproject new file mode 100644 index 0000000..85bdb34 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/bitband/ccs/.project b/boards/dk-tm4c129x/bitband/ccs/.project new file mode 100644 index 0000000..329881f --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/.project @@ -0,0 +1,65 @@ + + + bitband + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + bitband.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/bitband/bitband.c + + + bitband_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/bitband/bitband_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/bitband/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/bitband/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/bitband/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/bitband/ccs/Debug/bitband.bin b/boards/dk-tm4c129x/bitband/ccs/Debug/bitband.bin new file mode 100644 index 0000000..086c6f6 Binary files /dev/null and b/boards/dk-tm4c129x/bitband/ccs/Debug/bitband.bin differ diff --git a/boards/dk-tm4c129x/bitband/ccs/Debug/bitband.out b/boards/dk-tm4c129x/bitband/ccs/Debug/bitband.out new file mode 100644 index 0000000..48f8cbf Binary files /dev/null and b/boards/dk-tm4c129x/bitband/ccs/Debug/bitband.out differ diff --git a/boards/dk-tm4c129x/bitband/ccs/macros.ini_initial b/boards/dk-tm4c129x/bitband/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/bitband/ccs/target_config.ccxml b/boards/dk-tm4c129x/bitband/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.bin b/boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.bin new file mode 100644 index 0000000..d31405a Binary files /dev/null and b/boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.bin differ diff --git a/boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.out b/boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.out new file mode 100644 index 0000000..1972fc0 Binary files /dev/null and b/boards/dk-tm4c129x/bitband/ewarm/Exe/bitband.out differ diff --git a/boards/dk-tm4c129x/bitband/gcc/bitband.axf b/boards/dk-tm4c129x/bitband/gcc/bitband.axf new file mode 100644 index 0000000..e3528df Binary files /dev/null and b/boards/dk-tm4c129x/bitband/gcc/bitband.axf differ diff --git a/boards/dk-tm4c129x/bitband/gcc/bitband.bin b/boards/dk-tm4c129x/bitband/gcc/bitband.bin new file mode 100644 index 0000000..1eed900 Binary files /dev/null and b/boards/dk-tm4c129x/bitband/gcc/bitband.bin differ diff --git a/boards/dk-tm4c129x/bitband/readme.txt b/boards/dk-tm4c129x/bitband/readme.txt new file mode 100644 index 0000000..4c01f2c --- /dev/null +++ b/boards/dk-tm4c129x/bitband/readme.txt @@ -0,0 +1,29 @@ +Bit-Banding + +This example application demonstrates the use of the bit-banding +capabilities of the Cortex-M4 microprocessor. All of SRAM and all of the +peripherals reside within bit-band regions, meaning that bit-banding +operations can be applied to any of them. In this example, a variable in +SRAM is set to a particular value one bit at a time using bit-banding +operations (it would be more efficient to do a single non-bit-banded write; +this simply demonstrates the operation of bit-banding). + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/bitband/rvmdk/bitband.axf b/boards/dk-tm4c129x/bitband/rvmdk/bitband.axf new file mode 100644 index 0000000..59cfe1a Binary files /dev/null and b/boards/dk-tm4c129x/bitband/rvmdk/bitband.axf differ diff --git a/boards/dk-tm4c129x/bitband/rvmdk/bitband.bin b/boards/dk-tm4c129x/bitband/rvmdk/bitband.bin new file mode 100644 index 0000000..0da3d71 Binary files /dev/null and b/boards/dk-tm4c129x/bitband/rvmdk/bitband.bin differ diff --git a/boards/dk-tm4c129x/bitband/startup_ccs.c b/boards/dk-tm4c129x/bitband/startup_ccs.c new file mode 100644 index 0000000..a769216 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/startup_ccs.c @@ -0,0 +1,268 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/bitband/startup_ewarm.c b/boards/dk-tm4c129x/bitband/startup_ewarm.c new file mode 100644 index 0000000..cf3864b --- /dev/null +++ b/boards/dk-tm4c129x/bitband/startup_ewarm.c @@ -0,0 +1,299 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/bitband/startup_gcc.c b/boards/dk-tm4c129x/bitband/startup_gcc.c new file mode 100644 index 0000000..00771a6 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/startup_gcc.c @@ -0,0 +1,315 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/bitband/startup_rvmdk.S b/boards/dk-tm4c129x/bitband/startup_rvmdk.S new file mode 100644 index 0000000..f07ac83 --- /dev/null +++ b/boards/dk-tm4c129x/bitband/startup_rvmdk.S @@ -0,0 +1,324 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/ble_btool/Makefile b/boards/dk-tm4c129x/ble_btool/Makefile new file mode 100644 index 0000000..ac43935 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the ble btool example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the ble btool example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/ble_btool.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the ble btool example. +# +${COMPILER}/ble_btool.axf: ${COMPILER}/ble_btool.o +${COMPILER}/ble_btool.axf: ${COMPILER}/frame.o +${COMPILER}/ble_btool.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/ble_btool.axf: ${COMPILER}/pinout.o +${COMPILER}/ble_btool.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/ble_btool.axf: ${COMPILER}/uartstdio.o +${COMPILER}/ble_btool.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/ble_btool.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/ble_btool.axf: ble_btool.ld +SCATTERgcc_ble_btool=ble_btool.ld +ENTRY_ble_btool=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.c b/boards/dk-tm4c129x/ble_btool/ble_btool.c new file mode 100644 index 0000000..88eb86b --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.c @@ -0,0 +1,283 @@ +//***************************************************************************** +// +// ble_btool.c - This simple program makes it possible to use BTool +// to control a BLE device with TM4c129X + CC2540/CC2541EM +// as host board. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/pin_map.h" +#include "grlib/grlib.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/frame.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Bluetooth Low Energy ``BTool'' (ble_btool)

+//! +//! This application connects the ICDI virtual UART0 with UART3, so that +//! the BTool application running on PC can control the CC2540/CC2541 through +//! the TM4C129X. +//! +//! The CC254X device should be programmed with HostTestRelease(Network +//! Processor) application. A hex file containing this application can be +//! found in the BLE stack 1.4.0 release under +//! C:\\...\\BLE-CC254x-1.4.0\\Accessories\\HexFiles\\ +//! CC254X_SmartRF_HostTestRelease_All.hex. Please refer to the Bluetooth Low +//! Energy CC254X Development Kit User's Guide for information on how to load +//! the hex file to the CC254X. This User's Guide can be found in +//! http://www.ti.com/lit/ug/swru301a/swru301a.pdf +//! +//! On the TM4C129X development board, make sure that jumpers PJ0 and PJ1 +//! are connected to the "EM_UART" side to ensure that the UART3 TX and RX +//! signals are routed to the EM header. UART3 is used to communicate between +//! the TM4C129X and the CC2540 device. +//! +//! BTool is a PC application that allows a user to form a connection between +//! two BLE devices. For more details on BTool, please refer to the above +//! User's Guide. The installer for BTool is included in the BLE stack 1.4.0 +//! release under C:\\...\\BLE-CC254x-1.4.0\\Accessories\\BTool\\ +//! +// +//***************************************************************************** + +// +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The UART0 interrupt handler. +// +//***************************************************************************** +void +UART0IntHandler(void) +{ + uint32_t ui32Status; + + // + // Get the interrrupt status. + // + ui32Status = ROM_UARTIntStatus(UART0_BASE, true); + + // + // Clear the asserted interrupts. + // + ROM_UARTIntClear(UART0_BASE, ui32Status); + + // + // Loop while there are characters in the receive FIFO. + // + while(ROM_UARTCharsAvail(UART0_BASE)) + { + // + // Read the next character from UART0 and sent it to UART3. + // + UARTCharPut(UART3_BASE, UARTCharGetNonBlocking(UART0_BASE)); + } +} + +//***************************************************************************** +// +// The UART3 interrupt handler. +// +//***************************************************************************** +void +UART3IntHandler(void) +{ + uint32_t ui32Status; + + // + // Get the interrrupt status. + // + ui32Status = ROM_UARTIntStatus(UART3_BASE, true); + + // + // Clear the asserted interrupts. + // + ROM_UARTIntClear(UART3_BASE, ui32Status); + + // + // Loop while there are characters in the receive FIFO. + // + while(ROM_UARTCharsAvail(UART3_BASE)) + { + // + // Read the next character from UART3 and send it to UART0. + // + ROM_UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART3_BASE)); + } +} + +//***************************************************************************** +// +// Send a string(HCI command) to the UART3. +// +//***************************************************************************** +void +UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count) +{ + // + // Loop while there are more characters to send. + // + while(ui32Count--) + { + // + // Write the next character to the UART. + // + ROM_UARTCharPutNonBlocking(UART3_BASE, *pui8Buffer++); + } +} + +//***************************************************************************** +// +// This example demonstrates how to send a string of data to the UART. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "ble-btool"); + + // + // PJ0, 1, 4, 5 are used for UART3. + // + ROM_GPIOPinConfigure(GPIO_PJ0_U3RX); + ROM_GPIOPinConfigure(GPIO_PJ1_U3TX); + ROM_GPIOPinConfigure(GPIO_PJ4_U3RTS); + ROM_GPIOPinConfigure(GPIO_PJ5_U3CTS); + ROM_GPIOPinTypeUART(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5); + + // + // Display UART configuration on the display. + // + GrStringDraw(&sContext, "Use BTool on PC", -1, 70, 40, 0); + GrStringDraw(&sContext, "Port:", -1, 70, 70, 0); + GrStringDraw(&sContext, "Baud:", -1, 70, 95, 0); + GrStringDraw(&sContext, "Data:", -1, 70, 120, 0); + GrStringDraw(&sContext, "Parity:", -1, 70, 145, 0); + GrStringDraw(&sContext, "Stop:", -1, 70, 170, 0); + GrStringDraw(&sContext, "Flow:", -1, 70, 195, 0); + GrStringDraw(&sContext, "Uart 0", -1, 150, 70, 0); + GrStringDraw(&sContext, "115,200 bps", -1, 150, 95, 0); + GrStringDraw(&sContext, "8 Bit", -1, 150, 120, 0); + GrStringDraw(&sContext, "None", -1, 150, 145, 0); + GrStringDraw(&sContext, "1 Bit", -1, 150, 170, 0); + GrStringDraw(&sContext, "CTS/RTS", -1, 150, 195, 0); + + // + // Enable the (non-GPIO) peripherals used by this example. PinoutSet() + // already enabled GPIO Port A. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3); + + // + // Enable processor interrupts. + // + IntMasterEnable(); + + // + // Configure the UART0 for 115,200, 8-N-1 operation. + // + ROM_UARTConfigSetExpClk(UART0_BASE, ui32SysClock, 115200, + (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | + UART_CONFIG_PAR_NONE)); + + // + // Configure the UART3 for 115,200, 8-N-1 operation. + // + ROM_UARTConfigSetExpClk(UART3_BASE, ui32SysClock, 115200, + (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | + UART_CONFIG_PAR_NONE)); + + // + // Configure the UART3 with flow control. + // + UARTFlowControlSet(UART3_BASE, UART_FLOWCONTROL_TX | UART_FLOWCONTROL_RX); + + // + // Enable the UART interrupt. + // + ROM_IntEnable(INT_UART0); + ROM_IntEnable(INT_UART3); + ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); + ROM_UARTIntEnable(UART3_BASE, UART_INT_RX | UART_INT_RT); + + // + // Loop forever passing data between UART0 and UART3. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.ewd b/boards/dk-tm4c129x/ble_btool/ble_btool.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.ewp b/boards/dk-tm4c129x/ble_btool/ble_btool.ewp new file mode 100644 index 0000000..4fc7748 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\ble_btool.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.icf b/boards/dk-tm4c129x/ble_btool/ble_btool.icf new file mode 100644 index 0000000..076e971 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// ble_btool.icf - Linker configuration file for ble_btool. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.ld b/boards/dk-tm4c129x/ble_btool/ble_btool.ld new file mode 100644 index 0000000..ed5ceed --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * ble_btool.ld - Linker configuration file for ble_btool. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.sct b/boards/dk-tm4c129x/ble_btool/ble_btool.sct new file mode 100644 index 0000000..18fbac9 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; ble_btool.sct - Linker configuration file for ble_btool. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.uvopt b/boards/dk-tm4c129x/ble_btool/ble_btool.uvopt new file mode 100644 index 0000000..7ac466a --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + ble_btool + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\ble_btool.c + ble_btool.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool.uvproj b/boards/dk-tm4c129x/ble_btool/ble_btool.uvproj new file mode 100644 index 0000000..b2cb8c7 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + ble_btool + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + ble_btool + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\ble_btool.bin .\rvmdk\ble_btool.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + ble_btool.sct + + + --entry Reset_Handler + + + + + + + + Source + + + ble_btool.c + 1 + .\ble_btool.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/ble_btool/ble_btool_ccs.cmd b/boards/dk-tm4c129x/ble_btool/ble_btool_ccs.cmd new file mode 100644 index 0000000..5087ad0 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ble_btool_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * ble_btool_ccs.cmd - CCS linker configuration file for ble_btool. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/ble_btool/ccs/.ccsimportspec b/boards/dk-tm4c129x/ble_btool/ccs/.ccsimportspec new file mode 100644 index 0000000..5de4d9a --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_btool/ccs/.ccsproject b/boards/dk-tm4c129x/ble_btool/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_btool/ccs/.cproject b/boards/dk-tm4c129x/ble_btool/ccs/.cproject new file mode 100644 index 0000000..43f3443 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_btool/ccs/.project b/boards/dk-tm4c129x/ble_btool/ccs/.project new file mode 100644 index 0000000..a6d1afa --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/.project @@ -0,0 +1,70 @@ + + + ble_btool + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + ble_btool.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_btool/ble_btool.c + + + ble_btool_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_btool/ble_btool_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_btool/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/ble_btool/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/ble_btool/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.bin b/boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.bin new file mode 100644 index 0000000..7447c97 Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.bin differ diff --git a/boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.out b/boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.out new file mode 100644 index 0000000..d112f77 Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/ccs/Debug/ble_btool.out differ diff --git a/boards/dk-tm4c129x/ble_btool/ccs/macros.ini_initial b/boards/dk-tm4c129x/ble_btool/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/ble_btool/ccs/target_config.ccxml b/boards/dk-tm4c129x/ble_btool/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.bin b/boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.bin new file mode 100644 index 0000000..46ce5a6 Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.bin differ diff --git a/boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.out b/boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.out new file mode 100644 index 0000000..9246d82 Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/ewarm/Exe/ble_btool.out differ diff --git a/boards/dk-tm4c129x/ble_btool/gcc/ble_btool.axf b/boards/dk-tm4c129x/ble_btool/gcc/ble_btool.axf new file mode 100644 index 0000000..e3b0f00 Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/gcc/ble_btool.axf differ diff --git a/boards/dk-tm4c129x/ble_btool/gcc/ble_btool.bin b/boards/dk-tm4c129x/ble_btool/gcc/ble_btool.bin new file mode 100644 index 0000000..d7460bf Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/gcc/ble_btool.bin differ diff --git a/boards/dk-tm4c129x/ble_btool/readme.txt b/boards/dk-tm4c129x/ble_btool/readme.txt new file mode 100644 index 0000000..c19917d --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/readme.txt @@ -0,0 +1,45 @@ +Bluetooth Low Energy ``BTool'' + +This application connects the ICDI virtual UART0 with UART3, so that +the BTool application running on PC can control the CC2540/CC2541 through +the TM4C129X. + +The CC254X device should be programmed with HostTestRelease(Network +Processor) application. A hex file containing this application can be +found in the BLE stack 1.4.0 release under +C:\\...\\BLE-CC254x-1.4.0\\Accessories\\HexFiles\\ +CC254X_SmartRF_HostTestRelease_All.hex. Please refer to the Bluetooth Low +Energy CC254X Development Kit User's Guide for information on how to load +the hex file to the CC254X. This User's Guide can be found in +http://www.ti.com/lit/ug/swru301a/swru301a.pdf + +On the TM4C129X development board, make sure that jumpers PJ0 and PJ1 +are connected to the "EM_UART" side to ensure that the UART3 TX and RX +signals are routed to the EM header. UART3 is used to communicate between +the TM4C129X and the CC2540 device. + +BTool is a PC application that allows a user to form a connection between +two BLE devices. For more details on BTool, please refer to the above +User's Guide. The installer for BTool is included in the BLE stack 1.4.0 +release under C:\\...\\BLE-CC254x-1.4.0\\Accessories\\BTool\\ + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.axf b/boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.axf new file mode 100644 index 0000000..9fa577f Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.axf differ diff --git a/boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.bin b/boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.bin new file mode 100644 index 0000000..2699b94 Binary files /dev/null and b/boards/dk-tm4c129x/ble_btool/rvmdk/ble_btool.bin differ diff --git a/boards/dk-tm4c129x/ble_btool/startup_ccs.c b/boards/dk-tm4c129x/ble_btool/startup_ccs.c new file mode 100644 index 0000000..2450e1b --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void UART0IntHandler(void); +extern void UART3IntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UART0IntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + UART3IntHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_btool/startup_ewarm.c b/boards/dk-tm4c129x/ble_btool/startup_ewarm.c new file mode 100644 index 0000000..a83b907 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void UART0IntHandler(void); +extern void UART3IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UART0IntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + UART3IntHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_btool/startup_gcc.c b/boards/dk-tm4c129x/ble_btool/startup_gcc.c new file mode 100644 index 0000000..1e703e8 --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void UART0IntHandler(void); +extern void UART3IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UART0IntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + UART3IntHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_btool/startup_rvmdk.S b/boards/dk-tm4c129x/ble_btool/startup_rvmdk.S new file mode 100644 index 0000000..6b4ee6b --- /dev/null +++ b/boards/dk-tm4c129x/ble_btool/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN UART0IntHandler + EXTERN UART3IntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UART0IntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD UART3IntHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/ble_central/Makefile b/boards/dk-tm4c129x/ble_central/Makefile new file mode 100644 index 0000000..600c267 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/Makefile @@ -0,0 +1,94 @@ +#****************************************************************************** +# +# Makefile - Rules for building the ble central example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the ble central example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/ble_central.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the ble central example. +# +${COMPILER}/ble_central.axf: ${COMPILER}/ble_central.o +${COMPILER}/ble_central.axf: ${COMPILER}/frame.o +${COMPILER}/ble_central.axf: ${COMPILER}/gap.o +${COMPILER}/ble_central.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/ble_central.axf: ${COMPILER}/pinout.o +${COMPILER}/ble_central.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/ble_central.axf: ${COMPILER}/touch.o +${COMPILER}/ble_central.axf: ${COMPILER}/uartstdio.o +${COMPILER}/ble_central.axf: ${COMPILER}/ustdlib.o +${COMPILER}/ble_central.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/ble_central.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/ble_central.axf: ble_central.ld +SCATTERgcc_ble_central=ble_central.ld +ENTRY_ble_central=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/ble_central/ble_central.c b/boards/dk-tm4c129x/ble_central/ble_central.c new file mode 100644 index 0000000..3d8b695 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.c @@ -0,0 +1,2551 @@ +//***************************************************************************** +// +// ble_central.c - Demonstration of BLE central device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/uart.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/pin_map.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/frame.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "hci.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

BLE Central Device Demonstration (ble_central)

+//! +//! This application provides a demonstration use of Bluetooth Low Energy +//! central device by utilizing TI’s BLE CC2540 Evaluation Module and +//! SesorTags. +//! +//! By connecting a CC2540 EM board to the EM header on the TM4C129X development +//! board, the TM4C129X can communicate with the CC2540 by means of +//! vendor-specific HCI commands using the UART interface. This application can +//! discover up to three SensorTag devices, it can connect to any one of them, +//! perform pairing and bonding, read some sensor data and RSSI data from the +//! slave, and display the information on the LCD display. +//! +//! This application can discover any BLE device although it may not be +//! able to make a connection to a device other than a SensorTag/CC2540 as the +//! bonding process will likely fail due to the use of a default passcode. +//! We have tested this application with SensorTag and CC2540 Development +//! boards (SmartRF05EB + CC2540 EM) with the SimpleBLEPeripheral +//! sample application programmed. It can successfully bond with both boards +//! since the same default passcode is expected. Both SensorTag and CC2540 +//! devices have BLE Stack 1.4.0 release code programmed. +//! +//! CC2540 device should be programmed with the HostTestRelease +//! (Network Processor) application. A hex file containing the this application +//! can be found in the BLE stack 1.4.0 release under +//! C:\\...\\BLE-CC254x-1.4.0\\Accessories\\HexFiles\\ +//! CC2540_SmartRF_HostTestRelease_All.hex. Please refer to the Bluetooth Low +//! Energy CC2540 Development Kit User's Guide for information on how to load +//! the hex file to the CC2540. This User's Guide can be found in +//! http://www.ti.com/lit/ug/swru301a/swru301a.pdf +//! +//! On the TM4C129X development board, make sure that jumpers PJ0 and PJ1 +//! are connected to the "EM_UART" side which allows UART3 TX and RX signals to +//! be routed to the EM header. UART3 is used as the communication channel +//! between the CC2540 device and the TM4C129X device. +//! +//! Once the application starts, it will verify the serial connection by +//! sending the CC2540 device a vendor-specific HCI command, and waiting for the +//! expected responses within a short time period. Once the physical connection +//! between TM4C129X and CC2540 is verified, the device will automatically +//! start to discover BLE peripheral device. If no devices are found within 20 +//! seconds, the application will timeout and display "No Device Found", +//! otherwise the discovered device names will be shown on the display. +//! Touching any of the device names will start the process of establishing a +//! connection with that device. This sample application always tries to make +//! a secure connection by pairing the device with default passcode "00000". +//! Upon successfully linking and pairing, application will start querying +//! sensor data, including IR temperature, ambient temperature, humidity and +//! RSSI. +//! +//! Whe run inside, IR and ambient temperature should typically be in the low +//! 20s (Celsius). You can place the SensorTag near a hot object (such as a +//! cup of coffee) to verify that the IR temperature increases. You can move +//! the SensorTag further from the TM4C129X development board to verify that +//! its RSSI reading will decrease. +//! +//! At any time after the connection is established, you can touch the +//! "disconnect" button on the bottom of the screen to terminate the +//! connection with the peripheral device. +//! +//! In order to make the SensorTag discoverable by a central device, the +//! SensorTag needs to be in the discovery mode. The LED in the middle of the +//! board will blink periodically if the SensorTag is in discovery mode. If the +//! LED is not blinking, pressing the side button on the SensorTag should +//! place it in discovery mode. Once it is connected to a central device, +//! the LED should be off, pressing the side button while it is connected will +//! terminate the connection and put the SensorTag in discovery mode again. +//! For more information on SensorTag, please visit +//! http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag +//! +//! Every HCI command and event are output to the UART console for +//! debugging purpose. The UART terminal should be configured in 115,200 baud, +//! 8-n-1 mode. +//! +// +//***************************************************************************** + + +//***************************************************************************** +// +// A set of flags. The flag bits are defined as follows: +// +// 0 -> An indicator that a second has occurred. +// 1 -> A complete RX Packet has been received. +// 2 -> Whether to draw a circle or not on the display. +// 3 -> Sensors on the SensorTag are configured or not. +// +//***************************************************************************** +#define FLAG_EVERY_SECOND 0 +#define FLAG_HCI_MSG_COMPLETE 1 +#define FLAG_DRAW_CIRCLE 2 +#define FLAG_SENSOR_CFGD 3 +static volatile uint32_t g_ui32Flags; + +//***************************************************************************** +// +// A system tick counter, incremented every SYSTICKMS. +// +//***************************************************************************** +volatile uint32_t g_ui32TickCounter = 0; + +//***************************************************************************** +// +// The delay count for timeout. It decrements to 1 to indicate timeout. Setting +// it to 0 means no timeout has been set. +// +//***************************************************************************** +volatile uint32_t g_ui32Delay; + +//***************************************************************************** +// +// The application's graphics context. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Flag that informs that the user has requested an action via GUI. +// +//***************************************************************************** +static volatile bool g_bDiscoveryReq = false; +static volatile bool g_bEstLinkReq = false; +static volatile bool g_bTermLinkReq = false; + +//***************************************************************************** +// +// Flag to enable pairing, change to false to diable the pairing. +// +//***************************************************************************** +static bool g_bInitPairReq = true; + +//***************************************************************************** +// +// The width and height of the LCD display +// +//***************************************************************************** +uint32_t g_ui32Width, g_ui32Height; + +//***************************************************************************** +// +// The screen offset of the upper left hand corner where we start to draw. +// +//***************************************************************************** +#define X_OFFSET 8 +#define Y_OFFSET 24 + + +//***************************************************************************** +// +// The maximum number of slaves that we can discover. +// +//***************************************************************************** +#define MAX_SLAVE_NUM 3 + +//***************************************************************************** +// +// The RX receive circular buffer size. +// +//***************************************************************************** +#define BUF_SIZE 128 + + +//***************************************************************************** +// +// The circular buffer used to store the received HCI message from the CC2540. +// +//***************************************************************************** +typedef struct +{ + volatile uint8_t pui8RXBuf[BUF_SIZE]; + volatile uint8_t ui8Rd; + volatile uint8_t ui8Wr; + volatile uint8_t ui8Count; +} tCirBuf; + +tCirBuf g_sRxBuf; + +//***************************************************************************** +// +// The state defination of BLE statemachine. +// +//***************************************************************************** +volatile enum +{ + STATE_DEV_INIT, + STATE_GET_PARAM, + STATE_START_DISCOVERY, + STATE_SET_PARAM, + STATE_READY_FOR_LINK_REQ, + STATE_LINK, + STATE_LINKED, + STATE_SEND_PASSKEY, + STATE_IDLE, + STATE_TERM, + STATE_TERMED, + STATE_ERROR, +}g_iState = STATE_IDLE; + +//***************************************************************************** +// +// The paramers of the central device. +// +//***************************************************************************** +uint16_t g_ui16Param[4]; +uint8_t g_ui8ParamWrIdx = 0; + +//***************************************************************************** +// +// The complete HCI message and its length that we have received from BLE +// stack. +// +//***************************************************************************** +uint8_t g_pui8Msg[200]; +uint8_t g_ui8MsgLen; + +//***************************************************************************** +// +// Received Signal Strength Indication(RSSI). +// +//***************************************************************************** +int8_t g_i8RSSI = 0; + +//***************************************************************************** +// +// Sensor data, IR temperature, humidity etc. Only available on SensorTag +// +//***************************************************************************** +uint8_t g_pui8IRTemp[4]; // RAW data +uint8_t g_pui8Humidity[4]; // RAW data +double g_dIRTemp = 0; +double g_dAmbTemp = 0; +double g_dHumidity = 0; + +//***************************************************************************** +// +// The HCI message information, used for verifying expected response from +// stack. +// +//***************************************************************************** +uint16_t g_ui16CmdStatusOpcode; +uint16_t g_ui16Event; +uint16_t g_ui16Handle; + +//***************************************************************************** +// +// The structure of BLE slave information. +// +//***************************************************************************** +typedef struct +{ + // + // Device Address + // + uint8_t pui8Addr[HCI_BDADDR_LEN]; + // + // Address Type + // + uint8_t ui8AddrType; + // + // Device Name + // + char pcName[32]; + // + // Long Term Key Data, used for bonding. + // + tLTKData sSaveKey; +} tBLEDeviceInfo; + +tBLEDeviceInfo g_psDev[MAX_SLAVE_NUM]; + +//***************************************************************************** +// +// The number of devices discovered. +// +//***************************************************************************** +uint8_t g_ui8DevFound; + +//***************************************************************************** +// +// The index of device to be connected. +// +//***************************************************************************** +uint8_t g_ui8DevConnect; + +//***************************************************************************** +// +// The positions of the circles in the animation used while discovering devices +// +//***************************************************************************** +const int32_t g_ppi32CirclePos[][2] = +{ + { + 12, 0 + }, + { + 8, -9 + }, + { + 0, -12 + }, + { + -8, -9 + }, + { + -12, 0 + }, + { + -8, 9 + }, + { + 0, 12 + }, + { + 8, 9 + } +}; + +//***************************************************************************** +// +// The colors of the circles in the animation used while discovering devices +// +//***************************************************************************** +const uint32_t g_pui32CircleColor[] = +{ + 0x111111, + 0x333333, + 0x555555, + 0x777777, + 0x999999, + 0xbbbbbb, + 0xdddddd, + 0xffffff, +}; + +//***************************************************************************** +// +// The current color index for the animation used while discovering devices +// +//***************************************************************************** +uint32_t g_ui32ColorIdx; + +//***************************************************************************** +// +// The strings that are displayed in the center and bottom of the display +// +//***************************************************************************** +typedef enum +{ + iInitializing = 0, + iScanning, + iScan, + iNoBLE, + iConnect, + iConnecting, + iDisconnect, + iDisconnecting +} eDisplayUpdateIdx; + +// +// eDisplayUpdateIdx is used as index to the following table +// +static char *ppcString[][2] = +{ // Middle of screen, Bottom of screen + {"Initializing", 0}, + {"Discovering", "timeout in 20s"}, + {"No Device Found", "scan"}, + {"CC2540 EM not present", 0}, + {0, "scan again"}, + {0, "connecting" }, + {0, "disconnect" }, + {0, "disconnecting"}, +}; + +//***************************************************************************** +// +// Forward reference to local functions. +// +//***************************************************************************** +void DrawCircle(void); +bool MessageComplete(uint8_t *pui8Buf, uint8_t *pui8Len); +void HandleTemp(void); +void HandleHumidity(void); +void DisplayTemp(uint32_t ui32X, uint32_t ui32Y); +void DisplayHumidity(uint32_t ui32X, uint32_t ui32Y); +void DisplayRSSI(uint32_t ui32X, uint32_t ui32Y); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The interrupt handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Increment the system tick count. + // + g_ui32TickCounter++; + + // + // After the current message has been processed, + // check the message buffer to see if we have received another complete + // message. + // + if(HWREGBITW(&g_ui32Flags, FLAG_HCI_MSG_COMPLETE) == 0) + { + if(MessageComplete(g_pui8Msg, &g_ui8MsgLen) == true) + { + HWREGBITW(&g_ui32Flags, FLAG_HCI_MSG_COMPLETE) = 1; + } + } + + // + // Decrement g_ui32Delay to 1, if it is 1 already, + // meaning it has timed out. + // + if(g_ui32Delay > 1) + { + g_ui32Delay--; + } + + // + // Draw a circle every 100ms + // + if(HWREGBITW(&g_ui32Flags, FLAG_DRAW_CIRCLE) == 1) + { + if(g_ui32TickCounter % 10 == 0) + { + DrawCircle(); + } + } + + // + // set FLAG_EVERY_SECOND every second. + // Systick interrupt is every 10ms, so a second is every 100 interrupts. + // + if(g_ui32TickCounter % 100 == 0) + { + HWREGBITW(&g_ui32Flags, FLAG_EVERY_SECOND) = 1; + } +} + +//***************************************************************************** +// +// The UART interrupt handler. +// +//***************************************************************************** +void +UART3IntHandler(void) +{ + uint32_t ui32Status; + + // + // Get the interrrupt status. + // + ui32Status = ROM_UARTIntStatus(UART3_BASE, true); + + // + // Clear the asserted interrupts. + // + ROM_UARTIntClear(UART3_BASE, ui32Status); + + // + // Loop while there are characters in the receive FIFO. + // + while(ROM_UARTCharsAvail(UART3_BASE)) + { + // + // Check for buffer overflow case, this shouldn't happen + // + if((g_sRxBuf.ui8Wr == g_sRxBuf.ui8Rd) && g_sRxBuf.ui8Count) + { + UARTprintf("\nOF!!! Wr %d, Rd %d, Count %d\n", g_sRxBuf.ui8Wr, g_sRxBuf.ui8Rd, g_sRxBuf.ui8Count); + } + + // + // Read the next character from the UART and place it in the RX buffer. + // + g_sRxBuf.pui8RXBuf[g_sRxBuf.ui8Wr++] = UARTCharGetNonBlocking(UART3_BASE); + + // + // Check for the RX buffer wrap. + // + if(g_sRxBuf.ui8Wr >= BUF_SIZE) + { + g_sRxBuf.ui8Wr = 0; + } + + // + // Increment the total count. + // + g_sRxBuf.ui8Count++; + + } +} + +//***************************************************************************** +// +// The touch screen driver calls this function to report all state changes. +// +//***************************************************************************** +static int32_t +TouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + uint8_t ui8Loop; + + if(ui32Message == WIDGET_MSG_PTR_UP) + { + // + // Check if the bottom of the screen is touched. + // + if(i32Y >= (200 - 8) && i32Y < (200 + 8)) + { + if( (g_iState == STATE_READY_FOR_LINK_REQ) || + (g_iState == STATE_START_DISCOVERY)) + { + g_bDiscoveryReq = true; + } + else if(g_iState == STATE_LINKED) + { + g_bTermLinkReq = true; + } + } + + + // + // Check if any of three device names is touched when it is ready + // to connect + // + if(g_iState == STATE_READY_FOR_LINK_REQ) + { + for(ui8Loop = 0; ui8Loop < g_ui8DevFound; ui8Loop++) + { + if((g_ui8DevFound >= ui8Loop + 1) && + (i32Y >= (60 + 40*ui8Loop - 20)) && + (i32Y < (60 + 40*ui8Loop + 20))) + { + // + // save the device index and + // set flag to connect the device. + // + g_ui8DevConnect = ui8Loop; + g_bEstLinkReq = true; + break; + } + } + } + } + + return(0); +} + +//***************************************************************************** +// +// Send a command to the UART. +// +//***************************************************************************** +void +UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count) +{ + // + // Loop while there are more characters to send. + // + while(ui32Count--) + { + // + // Write the next character to the UART. + // + ROM_UARTCharPut(UART3_BASE, *pui8Buffer++); + } +} + +//***************************************************************************** +// +// Simple function to dump the buffer contents to the UART debug port. +// +//***************************************************************************** +void +DumpBuffer(uint8_t *pui8Buf, uint32_t ui32Len, bool bTX) +{ + uint32_t ui32Idx = 0; + + UARTprintf("\n%s: %d\n", (bTX?"TX":"RX"), ui32Len); + for(ui32Idx = 0; ui32Idx < ui32Len; ui32Idx++) + { + if(ui32Idx && (ui32Idx % 16 == 0)) + { + UARTprintf("\n"); + } + UARTprintf("%02x ", pui8Buf[ui32Idx]); + } + UARTprintf("\n\n"); +} + +//***************************************************************************** +// +// This function looks in the RX buffer and returns true if there is a complete +// message, otherwise it returns false. The complete message will be taken out +// from the RX buffer, and message itself and its length will be returned to +// to the caller. +// This function doesn't block, can be called from interrupt context. +// +//***************************************************************************** +bool +MessageComplete(uint8_t *pui8Buf, uint8_t *pui8Len) +{ + uint8_t ui8Idx; + + if(g_sRxBuf.ui8Count < 7 ) + { + // + // Minimum size of a message is 7+ bytes + // + return false; + } + + // + // Byte 0: Type + // 1: EventCode + // 2: Data Length + // 3: Event LSB + // 4: Event MSB + // 5: Status + // ... + // + + // + // Get the index of the Data Length, it is the byte[2] + // + ui8Idx = g_sRxBuf.ui8Rd+2; + + // + // Check for buffer wrap + // + if(ui8Idx > BUF_SIZE -1) + { + ui8Idx -= BUF_SIZE; + } + + // + // The whole message length should 3+Datalength + // + if(g_sRxBuf.ui8Count < (g_sRxBuf.pui8RXBuf[ui8Idx] + 3)) + { + return false; + } + + // + // Got a complete message. + // Return the length of the message + // + *pui8Len = g_sRxBuf.pui8RXBuf[ui8Idx] + 3; + + // + // Take the rx data out of the buffer and return to caller. + // + for(ui8Idx = 0; ui8Idx < *pui8Len; ui8Idx++) + { + pui8Buf[ui8Idx] = g_sRxBuf.pui8RXBuf[g_sRxBuf.ui8Rd++]; + // + // Check for buffer wrap + // + if(g_sRxBuf.ui8Rd >= BUF_SIZE) + { + g_sRxBuf.ui8Rd = 0; + } + } + g_sRxBuf.ui8Count -= *pui8Len; + + return true; +} + +//***************************************************************************** +// +// This function validates and parses the received message and return true +// if it is valid message, it also return the command status of the message. +// If the message is not valid, the function returns false. +// +//***************************************************************************** +bool +ProcessRxData( uint8_t *pui8CmdStatus) +{ + uint8_t ui8Idx; + uint16_t ui16Val; + + // + // Printout the complete message + // + DumpBuffer(g_pui8Msg, g_ui8MsgLen, false); + + // + // Quick check on the first and third bytes. + // The first byte should be 0x4(EVENT) + // The third byte should be the data length. + // + if((g_pui8Msg[0] != HCI_EVENT_PACKET) || + ((g_pui8Msg[2] + 3) != g_ui8MsgLen)) + { + // + // Invalid message, toss it + // + return false; + } + + // + // Parse the message: + // The second byte is event code, it is either vendor specific event code + // 0xFF(HCI_VE_EVENT_CODE) or any BLE event code. + // 3rd and 4th byte are the event + // + if(g_pui8Msg[1] == HCI_VE_EVENT_CODE) + { + //BLE Ext Event + g_ui16Event = (g_pui8Msg[3] | (g_pui8Msg[4]<<8)); + } + else + { + //BLE Event + g_ui16Event = g_pui8Msg[1]; + } + + // + // Get the status in the response(5th byte) + // + if(g_pui8Msg[1] == HCI_VE_EVENT_CODE) + { + //BLE Ext Event + *pui8CmdStatus = g_pui8Msg[5]; + } + else + { + //BLE Event + *pui8CmdStatus = g_pui8Msg[6]; + } + + switch(g_ui16Event) + { + case GAP_HCI_EVENT_EXT_CMD_STATUS: + // + // CommandStatus Event + // Get the command opcode + // + g_ui16CmdStatusOpcode = (g_pui8Msg[6] | (g_pui8Msg[7]<<8)); + if(g_ui16CmdStatusOpcode == HCI_VE_GAP_GET_PARAM_OPCODE) + { + // + // Save the parameters. + // + g_ui16Param[g_ui8ParamWrIdx++] = (g_pui8Msg[9] | (g_pui8Msg[10]<<8)); + } + break; + + case GAP_HCI_EVENT_EXT_DEVICE_INIT_DONE: + // + // DeviceInitDone Event + // + break; + + case GAP_HCI_EVENT_EXT_DEVICE_INFO: + // + // Device Information Event + // parse the scan response + // + if(g_pui8Msg[6] == GAP_ADTYPE_SCAN_RSP_IND) + { + if(g_ui8DevFound < MAX_SLAVE_NUM) + { + // + // Save the device address + // + g_psDev[g_ui8DevFound].ui8AddrType = g_pui8Msg[7]; + memcpy(g_psDev[g_ui8DevFound].pui8Addr, g_pui8Msg + 8, HCI_BDADDR_LEN); + + // + // Get the device name + // Skip the first ht(0x9) char. + // + memcpy(g_psDev[g_ui8DevFound].pcName, &g_pui8Msg[18], (g_pui8Msg[16]-1)); + + // + // Null terminate the name string + // + g_psDev[g_ui8DevFound].pcName[g_pui8Msg[16] -1] = 0; + + // + // Increment the number of devices found. + // + g_ui8DevFound++; + } + else + { + UARTprintf("More than %d device found, ignor this device\n", MAX_SLAVE_NUM); + } + + } + break; + + case GAP_HCI_EVENT_EXT_DEVICE_DISC_DONE: + // + // Device Discover Done Event + // print out devices' info + // + UARTprintf("%d Devices found\n", g_pui8Msg[6]); + for(ui8Idx = 0; ui8Idx < g_ui8DevFound; ui8Idx++) + { + UARTprintf("Device Name: %s\n", g_psDev[ui8Idx].pcName); + UARTprintf(" -Addr Type: %02x\n", g_psDev[ui8Idx].ui8AddrType); + UARTprintf(" -Addr: %02x:%02x:%02x:%02x:%02x:%02x\n", + g_psDev[ui8Idx].pui8Addr[5], + g_psDev[ui8Idx].pui8Addr[4], + g_psDev[ui8Idx].pui8Addr[3], + g_psDev[ui8Idx].pui8Addr[2], + g_psDev[ui8Idx].pui8Addr[1], + g_psDev[ui8Idx].pui8Addr[0]); + } + break; + + case GAP_HCI_EVENT_EXT_DEVICE_LINK_DONE: + // + // Device EstablishLink Event + // + g_ui16Handle = (g_pui8Msg[13] | (g_pui8Msg[14] << 8)); + UARTprintf("Device connected: %s\n", g_psDev[g_ui8DevConnect].pcName); + UARTprintf(" -Handle: %04x\n", g_ui16Handle); + UARTprintf(" -Addr Type: %04x\n", g_psDev[g_ui8DevConnect].ui8AddrType); + UARTprintf(" -Addr: %02x:%02x:%02x:%02x:%02x:%02x\n", + g_psDev[g_ui8DevConnect].pui8Addr[5], + g_psDev[g_ui8DevConnect].pui8Addr[4], + g_psDev[g_ui8DevConnect].pui8Addr[3], + g_psDev[g_ui8DevConnect].pui8Addr[2], + g_psDev[g_ui8DevConnect].pui8Addr[1], + g_psDev[g_ui8DevConnect].pui8Addr[0]); + + break; + + case GAP_HCI_EVENT_EXT_DEVICE_TERM_LINK_DONE: + // + // Device TerminateLink Event + // + UARTprintf("Device Disconnected, reason: %02x\n", g_pui8Msg[8]); + break; + case GAP_HCI_EVENT_EXT_DEVICE_PASSKEY_NEEDED: + break; + + case GAP_HCI_EVENT_EXT_DEVICE_AUTHENTICATE_DONE: + // + // Save the LongTermKey for bond request + // + g_psDev[g_ui8DevConnect].sSaveKey.bValid = true; + ui8Idx = 37; // The DSInf.Enable field is at index 37 in the byte string. + g_psDev[g_ui8DevConnect].sSaveKey.bAuth = g_pui8Msg[ui8Idx++]; + + // + // Next byte is LTK size, followed by the LTK + // + g_psDev[g_ui8DevConnect].sSaveKey.ui8LTKSize = g_pui8Msg[ui8Idx++]; + memcpy(g_psDev[g_ui8DevConnect].sSaveKey.pui8LTK, + g_pui8Msg + ui8Idx, + g_psDev[g_ui8DevConnect].sSaveKey.ui8LTKSize); + ui8Idx += g_psDev[g_ui8DevConnect].sSaveKey.ui8LTKSize; + + // + // 2 bytes of DIV, followed by 8 bytes of Random number + // + g_psDev[g_ui8DevConnect].sSaveKey.pui8DIV[0] = g_pui8Msg[ui8Idx++]; + g_psDev[g_ui8DevConnect].sSaveKey.pui8DIV[1] = g_pui8Msg[ui8Idx++]; + memcpy(g_psDev[g_ui8DevConnect].sSaveKey.pui8Rand, g_pui8Msg + ui8Idx, 8); + + break; + case GAP_HCI_EVENT_EXT_DEVICE_BOND_DONE: + UARTprintf("Bonded\n"); + break; + + case GAP_HCI_EVENT_EXT_ATT_WRITE_RSP: + break; + + case GAP_HCI_EVENT_EXT_ATT_READ_RSP: + // + // this is the IR temperature response + // + memcpy(g_pui8IRTemp, g_pui8Msg + 9, 4); + HandleTemp(); + break; + + case HCI_ATT_ERROR_RSP_EVENT: + UARTprintf("Error Response event: \n"); + break; + + case GAP_HCI_EVENT_CMD_COMPLETE: + // + // Get the command opcode + // + g_ui16CmdStatusOpcode = (g_pui8Msg[4] | (g_pui8Msg[5]<<8)); + if(g_ui16CmdStatusOpcode == HCI_READ_RSSI_OPCODE) + { + // + // RSSI reading response + // + g_i8RSSI = (int8_t)g_pui8Msg[9]; + UARTprintf("RSSI = %d 0x%x\n", g_i8RSSI, g_pui8Msg[9]); + + // + // Display the data when it is only in LINKED state + // + if(g_iState == STATE_LINKED) + { + DisplayRSSI(g_ui32Width / 2 + 80, 80 + 40); + } + } + break; + + case GAP_HCI_EVENT_HANDLE_VALUE_NOTIFY: + if(g_pui8Msg[8] > 2) //PduLen + { + ui16Val = g_pui8Msg[9] | (g_pui8Msg[10] <<8); + switch(ui16Val) + { + case GATT_IRTEMP_DATA_UUID_HANDLE: + // + // Temperatur Sensor data + // + memcpy(g_pui8IRTemp, g_pui8Msg + 11, 4); + + // + // Display the data when it is LINKED state + // + if(g_iState == STATE_LINKED) + { + HandleTemp(); + } + break; + + case GATT_HUMIDITY_DATA_UUID_HANDLE: + // + // Humidity Sensor data + // + memcpy(g_pui8Humidity, g_pui8Msg + 11, 4); + + // + // Display the data when it is LINKED state + // + if(g_iState == STATE_LINKED) + { + HandleHumidity(); + } + break; + + default: + UARTprintf("unexpected handle: %04x, fix me\n", ui16Val); + break; + + } + } + break; + + default: + UARTprintf("unexpected event: %04x, fix me\n", g_ui16Event); + break; + + } + + return true; +} + +//***************************************************************************** +// +// This function verifies if the received response is expected, and return +// true if it is, false otherwise. +// +//***************************************************************************** +bool +VerifyMsg(uint16_t ui16ExpectedEvent, uint16_t ui16ExpectedEventParam, + uint8_t *pui8Status) +{ + uint8_t ui8CmdStatus; + + if(ProcessRxData(&ui8CmdStatus) == 0) + { + // + // Message is not valid + // + return false; + } + + if(ui8CmdStatus != SUCCESS) + { + // + // Message return non-success status code + // + UARTprintf("Command Status return failure: %02x\n", ui8CmdStatus); + } + + // + // Pass the status code to the caller if a location is provided. + if(pui8Status) + { + *pui8Status = ui8CmdStatus; + } + + // + // check the received event + // + UARTprintf("RX: event 0x%04x\n", g_ui16Event); + if(ui16ExpectedEvent) + { + // + // We are expecting a specific event, check it. + // + if(g_ui16Event == ui16ExpectedEvent) + { + // + // Validate Event param if supplied. + // + if(ui16ExpectedEventParam) + { + if(ui16ExpectedEventParam == g_ui16CmdStatusOpcode) + { + return true; + } + } + else + { + // + // No need to verify EventParam + // + return true; + } + } + } + else + { + // + // We are NOT expecting any specific event, just return true. + // + return true; + } + + return false; +} + +//***************************************************************************** +// +// This function sets the timeout and waits for the given event, the function +// will return true when the expected event has been received before the +// timeout; or return false when the expected event has not been received +// before the timeout. +// +//***************************************************************************** +bool +WaitForRsp(uint16_t ui16ExpectedEvent, uint16_t ui16ExpectedParam, + uint32_t ui32TimeoutMs, uint8_t *pui8Status) +{ + bool bRet = false; + + // + // Set the timeout if non zero + // i32Timeout is in ms, convert it to number of systicks. + // Systick timer is every 10ms, so ui32TimeoutMs/10 + 1 + // + g_ui32Delay = ui32TimeoutMs?(ui32TimeoutMs/10 + 1):0; + + // + // Block until there is a response or timeout + // + while(g_ui32Delay > 1) + { + if(HWREGBITW(&g_ui32Flags, FLAG_HCI_MSG_COMPLETE) == 1) + { + // + // Got a response + // + bRet = VerifyMsg(ui16ExpectedEvent, ui16ExpectedParam, pui8Status); + if(bRet) + { + // + // Got what we expected, disable timeout, and exit the loop + // + g_ui32Delay = 0; + } + + // + // Clear the flag to indicate we are ready to receive the next + // complete message + // + HWREGBITW(&g_ui32Flags, FLAG_HCI_MSG_COMPLETE) = 0; + } + } + + // + // Check for timeout + // + if(g_ui32Delay == 1) + { + UARTprintf("\nTimeout waiting for response..%04x.\n", + ui16ExpectedEvent); + } + + return bRet; +} + +//***************************************************************************** +// +// This function checks if there are any events in the queue to be processed. +// Such as notify event, it will be sent from slave periodically. +// +//***************************************************************************** +bool +CheckForMsg() +{ + bool bSuccess = false; + + if(HWREGBITW(&g_ui32Flags, FLAG_HCI_MSG_COMPLETE) == 1) + { + // + // Got a response + // + bSuccess = VerifyMsg(0, 0, 0); + if(g_ui16Event == GAP_HCI_EVENT_EXT_DEVICE_TERM_LINK_DONE) + { + UARTprintf("Slave terminated the link\n"); + + // + // Sensor will be turned off by the slave + // + HWREGBITW(&g_ui32Flags, FLAG_SENSOR_CFGD) = 0; + + // + // Go back to TERMED state + // + g_iState = STATE_TERMED; + } + + // + // Clear the flag to indicate we are ready to receive the next + // complete message + // + HWREGBITW(&g_ui32Flags, FLAG_HCI_MSG_COMPLETE) = 0; + } + + return bSuccess; + +} + +//***************************************************************************** +// +// This function configures the sensor profiles. +// +//***************************************************************************** +void +ConfigureSensors(void) +{ + uint8_t pui8Byte[2]; + uint8_t ui8Status; + bool bSuccess; + + // + // Enable IR Sensor and Measurements if it is not yet configured. + // + if(HWREGBITW(&g_ui32Flags, FLAG_SENSOR_CFGD) == 1) + { + return; + } + + UARTprintf("Send Temp sensor wake cmd...\n"); + pui8Byte[0] = 0x01; + GAPWriteCharValue(g_ui16Handle, GATT_IRTEMP_CFG_UUID_HANDLE, pui8Byte, 1); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 500ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 500, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + + // + // Humidity Sensor + // + UARTprintf("Send humidity sensor wake cmd...\n"); + GAPWriteCharValue(g_ui16Handle, GATT_HUMIDITY_CFG_UUID_HANDLE, pui8Byte, 1); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 500ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 500, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + + UARTprintf("Send Temp sensor notify cmd...\n"); + pui8Byte[0] = 0x01; + pui8Byte[1] = 0x00; + GAPWriteCharValue(g_ui16Handle, GATT_IRTEMP_NOTIFY_UUID_HANDLE, pui8Byte, 2); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + + // + // Humidity Sensor + // + UARTprintf("Send Humidity sensor notify cmd...\n"); + GAPWriteCharValue(g_ui16Handle, GATT_HUMIDITY_NOTIDY_UUID_HANDLE, pui8Byte, 2); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("ConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + + // + // Set the flag that sensors are configured. + // + HWREGBITW(&g_ui32Flags, FLAG_SENSOR_CFGD) = 1; +} + +//***************************************************************************** +// +// This function deconfigures the sensor profiles. +// +//***************************************************************************** +void +DeConfigureSensors(void) +{ + uint8_t pui8Byte[2]; + uint8_t ui8Status; + bool bSuccess; + + if(HWREGBITW(&g_ui32Flags, FLAG_SENSOR_CFGD) == 0) + { + // Do nothing if the sensors have not been configured. + return; + } + + // + // TM006 IR and Ambient temperature sensor + // + UARTprintf("Send Temp sensor stop notify cmd...\n"); + pui8Byte[0] = 0x00; + pui8Byte[1] = 0x00; + GAPWriteCharValue(g_ui16Handle, GATT_IRTEMP_NOTIFY_UUID_HANDLE, pui8Byte, 2); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Humidity Sensor + // + UARTprintf("Send Humidity sensor stop notify cmd...\n"); + GAPWriteCharValue(g_ui16Handle, GATT_HUMIDITY_NOTIDY_UUID_HANDLE, pui8Byte, 2); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + + // + // Put IR Sensor and Measurements to sleep + // + UARTprintf("Send IR Temp sensor sleep cmd...\n"); + pui8Byte[0] = 0x00; + GAPWriteCharValue(g_ui16Handle, GATT_IRTEMP_CFG_UUID_HANDLE, pui8Byte, 1); + + // + // Wait for CommandStatus response, timeout after 500ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 500, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + + UARTprintf("Send Humidity sensor sleep cmd...\n"); + GAPWriteCharValue(g_ui16Handle, GATT_HUMIDITY_CFG_UUID_HANDLE, pui8Byte, 1); + + // + // Wait for CommandStatus response, timeout after 500ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE, 500, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for CommandStatus error\n"); + } + + // + // Wait for ATT_WriteRsp event, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_ATT_WRITE_RSP, 0, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("DeConfigureSensors: Wait for ATT_WriteRsp error\n"); + } + HWREGBITW(&g_ui32Flags, FLAG_SENSOR_CFGD) = 0; + +} + +//***************************************************************************** +// +// This function queries the parameters of the central device. +// +//***************************************************************************** +bool +GetParam(void) +{ + uint8_t ui8Status; + bool bSuccess; + + UARTprintf("Get Param...\n"); + + // + // Start Parameter write index with 0 + // + g_ui8ParamWrIdx = 0; + + // + // Get the Minimum Link Layer connection interval + // + GAPGetParam(TGAP_CONN_EST_INT_MIN); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_GET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("Get Param %x failed\n", TGAP_CONN_EST_INT_MIN); + } + + // + // Get the Maximum Link Layer connection interval + // + GAPGetParam(TGAP_CONN_EST_INT_MAX); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_GET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("Get Param %x failed\n", TGAP_CONN_EST_INT_MAX); + } + + // + // Get the Link Layer connection slave latency + // + GAPGetParam(TGAP_CONN_EST_LATENCY); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_GET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("Get Param %x failed\n", TGAP_CONN_EST_LATENCY); + } + + // + // Get the Link Layer connection supervision timeout + // + GAPGetParam(TGAP_CONN_EST_SUPERV_TIMEOUT); + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_GET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + UARTprintf("Get Param %x failed\n", TGAP_CONN_EST_SUPERV_TIMEOUT); + } + + if(g_ui16Param[0] != 0 && g_ui16Param[1] != 0 && g_ui16Param[3] != 0) + { + return true; + } + else + { + return false; + } +} + +//***************************************************************************** +// +// This function set the parameters of the central device. +// +//***************************************************************************** +bool +SetParam(void) +{ + uint8_t ui8Status; + bool bSuccess; + + UARTprintf("Set Param...\n"); + + // + // Set the Minimum Link Layer connection interval + // + GAPSetParam(TGAP_CONN_EST_INT_MIN, g_ui16Param[0]); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_SET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + + UARTprintf("Set Param %x failed\n", TGAP_CONN_EST_INT_MIN); + } + + // + // Set the Maximum Link Layer connection interval + // + GAPSetParam(TGAP_CONN_EST_INT_MAX, g_ui16Param[1]); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_SET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + + UARTprintf("Set Param %x failed\n", TGAP_CONN_EST_INT_MAX); + } + + // + // Set the Link Layer connection slave latency + // + GAPSetParam(TGAP_CONN_EST_LATENCY, g_ui16Param[2]); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_SET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + + UARTprintf("Set Param %x failed\n", TGAP_CONN_EST_LATENCY); + } + + // + // Set the Link Layer connection supervision timeout + // + GAPSetParam(TGAP_CONN_EST_SUPERV_TIMEOUT, g_ui16Param[3]); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_SET_PARAM_OPCODE, 200, &ui8Status); + if(!bSuccess || ui8Status) + { + + UARTprintf("Set Param %x failed\n", TGAP_CONN_EST_SUPERV_TIMEOUT); + } + + return bSuccess; +} + +//***************************************************************************** +// +// This function authenticates with the slave device. +// +//***************************************************************************** +bool +Authenticate(void) +{ + bool bSuccess = false; + uint8_t ui8Status; + + if(g_psDev[g_ui8DevConnect].sSaveKey.bValid == false) + { + UARTprintf("Initiate Pairing Request...\n"); + GAPAuthenticate(g_ui16Handle); + + // + // Wait for CommandStatus response, timeout after 100ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_AUTHENTICATE_OPCODE, 100, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Wait for PasskeyNeeded event, timeout after 1s + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_PASSKEY_NEEDED, 0, 1000, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Got PasskeyNeeded event, send the key + // + GAPPassKeyUpdate(g_ui16Handle, "000000"); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_PASSKEY_UPDATE_OPCODE, 200, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Wait for AuthenticationComplete event, timeout after 5s + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_AUTHENTICATE_DONE, 0, 5000, &ui8Status); + } + } + } + } + else + { + UARTprintf("Bond Request...\n"); + GAPBond(g_ui16Handle, &g_psDev[g_ui8DevConnect].sSaveKey); + + // + // Wait for CommandStatus response, timeout after 100ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_BOND_OPCODE, 100, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Wait for BondComplete event, timeout after 1s + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_BOND_DONE, 0, 1000, &ui8Status); + } + } + + if(ui8Status != SUCCESS) + { + UARTprintf("Authenticate failure 0x%x\n", ui8Status); + return false; + } + return bSuccess; +} + +//***************************************************************************** +// +// This function establishes link to the slave. +// +//***************************************************************************** +bool +EstablishLink(uint8_t ui8DevIdx) +{ + bool bSuccess = false; + uint8_t ui8Status; + + UARTprintf("Link Request on device %d...\n", ui8DevIdx); + + GAPEstLinkReq(false, false, g_psDev[ui8DevIdx].ui8AddrType, g_psDev[ui8DevIdx].pui8Addr); + + // + // Wait for CommandStatus response, timeout after 100ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_EST_LINK_REQ_OPCODE, 100, &ui8Status); + if(bSuccess && (ui8Status == SUCCESS || ui8Status == bleAlreadyInRequestedMode)) + { + // + // Wait for EstablishLink response, timeout after 15s + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_LINK_DONE, 0, 15000, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Got DeviceInitDone response, go to the next state + // + if(g_bInitPairReq == true) + { + bSuccess = Authenticate(); + } + } + } + + if(ui8Status != SUCCESS) + { + return false; + } + return bSuccess; +} + +//***************************************************************************** +// +// This function terminates the link. +// +//***************************************************************************** +bool +TerminateLink(void) +{ + bool bSuccess = false; + uint8_t ui8Status; + + UARTprintf("Terminate Link Request...\n"); + + DeConfigureSensors(); + + // + // Send TeminateLink request + // + GAPTerLinkReq(g_ui16Handle, HCI_DISCONNECT_REMOTE_USER_TERM); + + // + // Wait for CommandStatus response, timeout after 200ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_TER_LINK_REQ_OPCODE, 200, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Wait for TerminateLink event, timeout after 1s + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_TERM_LINK_DONE, 0, 1000, &ui8Status); + } + + if(ui8Status != SUCCESS) + { + return false; + } + return bSuccess; +} + +//***************************************************************************** +// +// This function draws the animated circle during discovery state +// +//***************************************************************************** +void +DrawCircle(void) +{ + uint32_t ui32Idx; + + // + // Loop through the circles in the animation. + // + for(ui32Idx = 0; ui32Idx < 8; ui32Idx++) + { + // + // Draw this circle. + // + GrContextForegroundSet(&g_sContext, + g_pui32CircleColor[(g_ui32ColorIdx + + ui32Idx) & 7]); + GrCircleFill(&g_sContext, + (g_ui32Width / 2) + g_ppi32CirclePos[ui32Idx][0], + (g_ui32Height / 2) + g_ppi32CirclePos[ui32Idx][1] + 24, + 2); + } + + // + // Increment the color index. + // + g_ui32ColorIdx++; +} + +//***************************************************************************** +// +// Clear the screen +// +//***************************************************************************** +void ClearScreen(void) +{ + tRectangle sRect; + + // + // Clear the display. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = g_ui32Width - 1; + sRect.i16YMax = g_ui32Height - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); +} + +//***************************************************************************** +// +// Update the display. +// +//***************************************************************************** +void +UpdateDisplay(eDisplayUpdateIdx eUpdate) +{ + uint8_t ui8Loop; + char pcBuf[20]; + + // + // Clear the middle section of the display + // + ClearScreen(); + + // + // Update the middle of screen + // + if(eUpdate == iConnecting) + { + // + // show the to be connected device only + // + GrStringDrawCentered(&g_sContext, g_psDev[g_ui8DevConnect].pcName, -1, + g_ui32Width / 2, 60 + (40*g_ui8DevConnect), false); + + // + // Convert the device address into a string. + // + usprintf(pcBuf, "(%02x:%02x:%02x:%02x:%02x:%02x)", + g_psDev[g_ui8DevConnect].pui8Addr[5], + g_psDev[g_ui8DevConnect].pui8Addr[4], + g_psDev[g_ui8DevConnect].pui8Addr[3], + g_psDev[g_ui8DevConnect].pui8Addr[2], + g_psDev[g_ui8DevConnect].pui8Addr[1], + g_psDev[g_ui8DevConnect].pui8Addr[0]); + GrContextFontSet(&g_sContext, g_psFontCm14); + GrStringDrawCentered(&g_sContext, pcBuf, -1, + g_ui32Width / 2, 60 + (40*g_ui8DevConnect + 16), false); + GrContextFontSet(&g_sContext, g_psFontCmss16b); + + } + else if(eUpdate == iDisconnect) + { + GrStringDraw(&g_sContext, "IR Temperature:", -1, + (g_ui32Width / 2) - 110, 80, false); + GrStringDraw(&g_sContext, "Ambient Temperature:", -1, + (g_ui32Width / 2) - 110, 80 + 20, false); + GrStringDraw(&g_sContext, "RSSI:", -1, + (g_ui32Width / 2) - 110, 80 + 40, false); + GrStringDraw(&g_sContext, "Humidity:", -1, + (g_ui32Width / 2) - 110, 80 + 60, false); + + // + // clear the sensor date + // + g_dIRTemp = 0; + g_dAmbTemp = 0; + g_dHumidity = 0; + g_i8RSSI = 0; + + DisplayTemp(g_ui32Width / 2 + 80, 80); + DisplayRSSI(g_ui32Width / 2 + 80, 80 + 40); + DisplayHumidity(g_ui32Width / 2 + 80, 80 + 60); + } + else + { + if(ppcString[eUpdate][0]) + { + GrStringDrawCentered(&g_sContext, ppcString[eUpdate][0], -1, + g_ui32Width / 2, (g_ui32Height / 2) - 18, false); + } + else + { + + for(ui8Loop = 0; ui8Loop < g_ui8DevFound; ui8Loop++) + { + GrStringDrawCentered(&g_sContext, g_psDev[ui8Loop].pcName, -1, + g_ui32Width / 2, 60 + (40*ui8Loop), false); + + // + // Convert the device address into a string. + // + usprintf(pcBuf, "(%02x:%02x:%02x:%02x:%02x:%02x)", + g_psDev[ui8Loop].pui8Addr[5], + g_psDev[ui8Loop].pui8Addr[4], + g_psDev[ui8Loop].pui8Addr[3], + g_psDev[ui8Loop].pui8Addr[2], + g_psDev[ui8Loop].pui8Addr[1], + g_psDev[ui8Loop].pui8Addr[0]); + GrContextFontSet(&g_sContext, g_psFontCm14); + GrStringDrawCentered(&g_sContext, pcBuf, -1, + g_ui32Width / 2, 60 + (40*ui8Loop + 16), false); + GrContextFontSet(&g_sContext, g_psFontCmss16b); + } + } + } + + // + // Update the bottom text. + // + if(ppcString[eUpdate][1]) + { + GrStringDrawCentered(&g_sContext, ppcString[eUpdate][1], -1, + g_ui32Width / 2, 200, false); + } +} + +//***************************************************************************** +// +// Calculate the object temperature from TMP006 reading. +// Refer to TMP006 data sheet. +// +//***************************************************************************** +double +calculateTemp(int16_t i16Tdie, int16_t i16Vobj) +{ + double Vobj2 = (double)i16Vobj*.00000015625; + double i16Tdie2 = (double)i16Tdie*.03125 + 273.15; + double S0 = 6.40*pow(10,-14); + double a1 = 1.75*pow(10,-3); + double a2 = -1.678*pow(10,-5); + double b0 = -2.94*pow(10,-5); + double b1 = -5.70*pow(10,-8); + double b2 = 4.63*pow(10,-10); + double c2 = 13.4; + double Tref = 298.15; + double S = S0*(1+a1*(i16Tdie2 - Tref)+a2*pow((i16Tdie2 - Tref),2)); + double Vos = b0 + b1*(i16Tdie2 - Tref) + b2*pow((i16Tdie2 - Tref),2); + double fObj = (Vobj2 - Vos) + c2*pow((Vobj2 - Vos),2); + double Tobj = pow(pow(i16Tdie2,4) + (fObj/S),.25); + return (Tobj - 273.15); +} + +//***************************************************************************** +// +// This function converts the raw temperature reading to actual temperature in +// C and displays the temperatures on the display. +// +//***************************************************************************** +void +HandleTemp(void) +{ + int16_t i16VObj, i16TDie; + + UARTprintf("IR %02x %02x %02x %02x\n", g_pui8IRTemp[0], g_pui8IRTemp[1], + g_pui8IRTemp[2], g_pui8IRTemp[3]); + // + // The first two bytes are Object Voltage, + // the last two bytes are Die temperature + // + i16VObj = (int16_t)(g_pui8IRTemp[0] | (g_pui8IRTemp[1]<<8)); + i16TDie = (int16_t)(g_pui8IRTemp[2] | (g_pui8IRTemp[3]<<8)); + if(i16VObj && i16TDie) + { + g_dIRTemp = calculateTemp(i16TDie>>2, i16VObj); + g_dAmbTemp = (double)i16TDie /128.0; + DisplayTemp(g_ui32Width / 2 + 80, 80); + } +} + +//***************************************************************************** +// +// This function converts the raw humidity to humidity in rH and displays it +// on the display. +// +//***************************************************************************** +void +HandleHumidity(void) +{ + uint16_t ui16RawH; + + // + // The first two bytes are temperature(ignored) + // the last two bytes are humitity + // + ui16RawH = (g_pui8Humidity[2] | (g_pui8Humidity[3]<<8)); + UARTprintf("Humidity %04x\n", ui16RawH); + + // + // Conversion algorithm for Humidity + // + ui16RawH &= ~0x0003; // clear bits [1..0] (status bits) + g_dHumidity = -6.0 + (125.0 *(double)ui16RawH)/65536; // RH= -6 + 125 * SRH/2^16 + DisplayHumidity(g_ui32Width / 2 + 80, 80 + 60); +} + +//***************************************************************************** +// +// Display IR and Ambient temperatures on the display. +// +//***************************************************************************** +void +DisplayTemp(uint32_t ui32X, uint32_t ui32Y) +{ + char pcBuf[16]; + int16_t i16IRInt, i16IRFrac; + tRectangle sRect; + + i16IRInt = ((int16_t)(g_dIRTemp*100))/100; + i16IRFrac = (int16_t)(g_dIRTemp*100) - i16IRInt*100; + UARTprintf("IR temp = %d.%d\n", i16IRInt, i16IRFrac); + + // + // Convert the temperature into a string. + // + usprintf(pcBuf, "%d.%dC", i16IRInt, i16IRFrac); + + // + // Clear the previous reading. + // + sRect.i16XMin = ui32X; + sRect.i16YMin = ui32Y; + sRect.i16XMax = ui32X + 60; + sRect.i16YMax = ui32Y + 20; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Display the IR temperature. + // + GrStringDraw(&g_sContext, pcBuf, -1, ui32X, ui32Y, false); + + i16IRInt = ((int16_t)(g_dAmbTemp*100))/100; + i16IRFrac = (int16_t)(g_dAmbTemp*100) - i16IRInt*100; + UARTprintf("Ambient temp = %d.%d\n", i16IRInt, i16IRFrac); + + // + // Convert the temperature into a string. + // + usprintf(pcBuf, "%d.%dC", i16IRInt, i16IRFrac); + + // + // Clear the previous temperature. + // + sRect.i16XMin = ui32X; + sRect.i16YMin = ui32Y + 20; + sRect.i16XMax = ui32X + 60; + sRect.i16YMax = ui32Y + 40; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Display the Ambient temperatur. + // + GrStringDraw(&g_sContext, pcBuf, -1, ui32X, ui32Y + 20, false); +} + +//***************************************************************************** +// +// Display RSSI on the display. +// +//***************************************************************************** +void +DisplayRSSI(uint32_t ui32X, uint32_t ui32Y) +{ + char pcBuf[16]; + tRectangle sRect; + + // + // Convert the RSSI data into a string. + // + if(g_i8RSSI >= 0) + { + // + // RSSI has to be negative value, discard the nonvalid data. + // + return; + } + usprintf(pcBuf, "%ddBm", g_i8RSSI); + + // + // Clear the previous reading. + // + sRect.i16XMin = ui32X; + sRect.i16YMin = ui32Y; + sRect.i16XMax = ui32X + 60; + sRect.i16YMax = ui32Y + 20; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Display on the screen. + // + GrStringDraw(&g_sContext, pcBuf, -1, ui32X, ui32Y, false); +} + +//***************************************************************************** +// +// Display Humidity on the display. +// +//***************************************************************************** +void +DisplayHumidity(uint32_t ui32X, uint32_t ui32Y) +{ + char pcBuf[16]; + tRectangle sRect; + uint16_t ui8Int, ui8Frac; + + ui8Int = (uint16_t)(g_dHumidity); + ui8Frac = (uint16_t)(g_dHumidity*10) - ui8Int*10; + UARTprintf("Humidity = %02d.%01d\n", ui8Int, ui8Frac); + + // + // Convert the humidity into a string. + // + usprintf(pcBuf, "%d.%01d%%rH", ui8Int, ui8Frac); + + // + // Clear the previous reading. + // + sRect.i16XMin = ui32X; + sRect.i16YMin = ui32Y; + sRect.i16XMax = ui32X + 70; + sRect.i16YMax = ui32Y + 20; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Display on the screen. + // + GrStringDraw(&g_sContext, pcBuf, -1, ui32X, ui32Y, false); +} + +//***************************************************************************** +// +// This example demonstrates how to communicate a BLE slave using TI's CC2540 +// EM on TM4C129X Development board. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + bool bSuccess; + uint8_t ui8Status; + uint8_t pui8IRKOrCSRK[16]; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "ble-central"); + GrContextFontSet(&g_sContext, g_psFontCmss16b); + + // + // Initialize the touch screen driver + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(TouchCallback); + + // + // UART 0 is used for debugging message console. + // + UARTStdioConfig(0, 115200, ui32SysClock); + + UARTprintf("\nBLE Central demo running...\n"); + + // + // Get the width and height of the display. + // + g_ui32Width = GrContextDpyWidthGet(&g_sContext); + g_ui32Height = GrContextDpyHeightGet(&g_sContext); + + // + // UART3 is used to communicate with CC2540, configure the pins. + // PJ0, 1, 4, 5 are used for UART3. + // + ROM_GPIOPinConfigure(GPIO_PJ0_U3RX); + ROM_GPIOPinConfigure(GPIO_PJ1_U3TX); + ROM_GPIOPinConfigure(GPIO_PJ4_U3RTS); + ROM_GPIOPinConfigure(GPIO_PJ5_U3CTS); + ROM_GPIOPinTypeUART(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1 | + GPIO_PIN_4 | GPIO_PIN_5); + + // + // EnableUART3 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3); + + // + // Configure the UART3 for 115,200, 8-N-1 operation. + // + ROM_UARTConfigSetExpClk(UART3_BASE, ui32SysClock, 115200, + (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | + UART_CONFIG_PAR_NONE)); + + // + // Configure UART3 to use hardware flow control. + // + UARTFlowControlSet(UART3_BASE, UART_FLOWCONTROL_TX | UART_FLOWCONTROL_RX); + + // + // Enable processor interrupts. + // + IntMasterEnable(); + + // + // Enable the UART interrupt. + // + ROM_IntEnable(INT_UART3); + ROM_UARTIntEnable(UART3_BASE, UART_INT_RX | UART_INT_RT); + + + // + // Clear timeout value + // + g_ui32Delay = 0; + + // + // Configure SysTick for a periodic interrupt at 10ms. + // + ROM_SysTickPeriodSet(ui32SysClock / 100); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // clear the device info and RX buffer + // + memset(g_psDev, 0, sizeof(g_psDev)); + memset(&g_sRxBuf, 0, sizeof(tCirBuf)); + + // + // Start the state machine with initial state + // + g_iState = STATE_DEV_INIT; + + // + // Display "Initializing" on the bottom of screen + // + UpdateDisplay(iInitializing); + + while(1) + { + switch(g_iState) + { + case STATE_DEV_INIT: + + UARTprintf("Device Init...\n"); + + // + // Send GAP_DeviceInit command + // + memset(pui8IRKOrCSRK, 0, 16); + GAPDeviceInit(GAP_PROFILE_CENTRAL, 5, pui8IRKOrCSRK, pui8IRKOrCSRK, 1); + + // + // Wait for CommandStatus response, timeout after 500ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_INIT_OPCODE, 500, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Wait for DeviceInitDone response, timeout after 500ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_INIT_DONE, 0, 500, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Got DeviceInitDone response, go to the next state + // + g_iState = STATE_GET_PARAM; + } + } + else + { + UARTprintf("CC2540 EM board is not connected to the DK\n"); + UpdateDisplay(iNoBLE); + + // + // Hang forever + // + while(1); + } + break; + + case STATE_GET_PARAM: + if(GetParam()) + { + // + // Query parameter successful, go to the discovery state + // + g_bDiscoveryReq = true; + g_iState = STATE_START_DISCOVERY; + UARTprintf("Ready to scan devices\n"); + + // + // Update display + // + UpdateDisplay(iScanning); + } + else + { + // + // cannot query parameters on CC2540, something wrong, + // go to the error state + // + g_iState = STATE_ERROR; + } + break; + + case STATE_START_DISCOVERY: + if(g_bDiscoveryReq) + { + UARTprintf("Start Discovery...\n"); + + // + // Clear the number of devices discovered + // + g_ui8DevFound = 0; + + // + // Start to draw circle periodically + // + HWREGBITW(&g_ui32Flags, FLAG_DRAW_CIRCLE) = 1; + + // + // Send Discovery command + // + GAPDiscoveryReq(DEVDISC_MODE_ALL, true, false); + + // + // Wait for CommandStatus response, timeout after 100ms + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_CMD_STATUS, HCI_VE_GAP_DEVICE_DISC_REQ_OPCODE, 100, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Wait for DiscoveryDone response, timeout after 20s + // + bSuccess = WaitForRsp(GAP_HCI_EVENT_EXT_DEVICE_DISC_DONE, 0, 20000, &ui8Status); + if(bSuccess && ui8Status == SUCCESS) + { + // + // Have we discovered any device? + // + if(g_ui8DevFound) + { + // + // Got DiscoveryDone response, go to the next state + // + g_iState = STATE_SET_PARAM; + } + else + { + // + // No device found: + // Stop drawing the circles. + // + HWREGBITW(&g_ui32Flags, FLAG_DRAW_CIRCLE) = 0; + + // + // show the scan button on the bottom of the + // screen in order to repeat the scanning. + // + UpdateDisplay(iScan); + } + g_bDiscoveryReq = false; + } + } + } + break; + + case STATE_SET_PARAM: + if(SetParam()) + { + // + // Configure parameters are successful, + // go to the next state + // + g_iState = STATE_READY_FOR_LINK_REQ; + UARTprintf("Discovery done\n"); + + HWREGBITW(&g_ui32Flags, FLAG_DRAW_CIRCLE) = 0; + UpdateDisplay(iConnect); + } + else + { + // + // Failed to configure the parameters, + // go to the error state + // + g_iState = STATE_ERROR; + } + break; + + case STATE_READY_FOR_LINK_REQ: + // + // Wait for user to connect any device + // + if(g_bEstLinkReq == true) + { + // + // Received connect command from user, + // go to the next state to connect the device + // + UpdateDisplay(iConnecting); + g_iState = STATE_LINK; + g_bEstLinkReq = false; + } + + // + // Wait for user to do discovery/scan again + // + if(g_bDiscoveryReq == true) + { + // + // Discovery/scan is requested by user + // + g_iState = STATE_START_DISCOVERY; + + // + // Update display + // + UpdateDisplay(iScanning); + } + break; + + case STATE_LINK: + // + // Connect to the device + // + if( EstablishLink(g_ui8DevConnect)) + { + // + // Connected the device without errors. + // go to the next state. + // + g_iState = STATE_LINKED; + + // + // Display the sensor information. + // + UpdateDisplay(iDisconnect); + } + else + { + // + // Link failed, go back to STATE_READY_FOR_LINK_REQ. + // + UARTprintf("Link failed, go back to ready for link state\n"); + g_iState = STATE_READY_FOR_LINK_REQ; + UpdateDisplay(iConnect); + } + break; + + case STATE_LINKED: + // + // Handle Terminate request if any + // + if(g_bTermLinkReq == true) + { + g_iState = STATE_TERM; + UpdateDisplay(iDisconnecting); + break; + } + + // + // Configure the sensor profiles. + // + ConfigureSensors(); + + // + // Check for any sensor notify event + // + CheckForMsg(); + + // + // We will read the device's RSSI every second. + // + if(HWREGBITW(&g_ui32Flags, FLAG_EVERY_SECOND) == 1) + { + HWREGBITW(&g_ui32Flags, FLAG_EVERY_SECOND) = 0; + + // + // Read RSSI + // + HCIReadRSSI(g_ui16Handle); + } + break; + + case STATE_TERM: + // + // We are told to termniate the link. + // + if(TerminateLink()) + { + // + // Terminate success, go to the next state + // + g_iState = STATE_TERMED; + g_bTermLinkReq = false; + } + else + { + //TODO + g_iState = STATE_TERMED; + g_bTermLinkReq = false; + + } + break; + + case STATE_TERMED: + // + // Terminated, go to the next state + // + g_iState = STATE_READY_FOR_LINK_REQ; + UpdateDisplay(iConnect); + break; + + case STATE_IDLE: + default: + // + // Check any messages. + // + CheckForMsg(); + break; + } + } +} diff --git a/boards/dk-tm4c129x/ble_central/ble_central.ewd b/boards/dk-tm4c129x/ble_central/ble_central.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/ble_central/ble_central.ewp b/boards/dk-tm4c129x/ble_central/ble_central.ewp new file mode 100644 index 0000000..5388441 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.ewp @@ -0,0 +1,810 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\ble_central.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\gap.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/ble_central/ble_central.icf b/boards/dk-tm4c129x/ble_central/ble_central.icf new file mode 100644 index 0000000..681cc5a --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// ble_central.icf - Linker configuration file for ble_central. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/ble_central/ble_central.ld b/boards/dk-tm4c129x/ble_central/ble_central.ld new file mode 100644 index 0000000..c528e4b --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * ble_central.ld - Linker configuration file for ble_central. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/ble_central/ble_central.sct b/boards/dk-tm4c129x/ble_central/ble_central.sct new file mode 100644 index 0000000..b1e6c8a --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; ble_central.sct - Linker configuration file for ble_central. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/ble_central/ble_central.uvopt b/boards/dk-tm4c129x/ble_central/ble_central.uvopt new file mode 100644 index 0000000..90855bc --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.uvopt @@ -0,0 +1,401 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + ble_central + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\ble_central.c + ble_central.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\gap.c + gap.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 12 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/ble_central/ble_central.uvproj b/boards/dk-tm4c129x/ble_central/ble_central.uvproj new file mode 100644 index 0000000..11a43fa --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central.uvproj @@ -0,0 +1,464 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + ble_central + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + ble_central + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\ble_central.bin .\rvmdk\ble_central.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + ble_central.sct + + + --entry Reset_Handler + + + + + + + + Source + + + ble_central.c + 1 + .\ble_central.c + + + frame.c + 1 + ..\drivers\frame.c + + + gap.c + 1 + .\gap.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/ble_central/ble_central_ccs.cmd b/boards/dk-tm4c129x/ble_central/ble_central_ccs.cmd new file mode 100644 index 0000000..96f68e9 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ble_central_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * ble_central_ccs.cmd - CCS linker configuration file for ble_central. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/ble_central/ccs/.ccsimportspec b/boards/dk-tm4c129x/ble_central/ccs/.ccsimportspec new file mode 100644 index 0000000..45bc2ed --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_central/ccs/.ccsproject b/boards/dk-tm4c129x/ble_central/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_central/ccs/.cproject b/boards/dk-tm4c129x/ble_central/ccs/.cproject new file mode 100644 index 0000000..4e1735b --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_central/ccs/.project b/boards/dk-tm4c129x/ble_central/ccs/.project new file mode 100644 index 0000000..0c9843d --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/.project @@ -0,0 +1,85 @@ + + + ble_central + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + ble_central.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_central/ble_central.c + + + ble_central_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_central/ble_central_ccs.cmd + + + gap.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_central/gap.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/ble_central/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/ble_central/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/ble_central/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.bin b/boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.bin new file mode 100644 index 0000000..e0dd72c Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.bin differ diff --git a/boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.out b/boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.out new file mode 100644 index 0000000..77f2e2e Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/ccs/Debug/ble_central.out differ diff --git a/boards/dk-tm4c129x/ble_central/ccs/macros.ini_initial b/boards/dk-tm4c129x/ble_central/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/ble_central/ccs/target_config.ccxml b/boards/dk-tm4c129x/ble_central/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.bin b/boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.bin new file mode 100644 index 0000000..4759a71 Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.bin differ diff --git a/boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.out b/boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.out new file mode 100644 index 0000000..6c8f670 Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/ewarm/Exe/ble_central.out differ diff --git a/boards/dk-tm4c129x/ble_central/gap.c b/boards/dk-tm4c129x/ble_central/gap.c new file mode 100644 index 0000000..086b21c --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/gap.c @@ -0,0 +1,371 @@ +//***************************************************************************** +// +// gap.c - GAP configuration and control APIs +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "hci.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +// TX buffer used by all APIs. +// +//***************************************************************************** +uint8_t g_pui8TXBuf[64]; +uint8_t g_ui8TXLen; + +//***************************************************************************** +// +// Forward reference of functions used in this file. +// +//***************************************************************************** +extern void UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count); +extern void DumpBuffer(uint8_t *pui8Buf, uint32_t ui32Len, bool bTX); + +//***************************************************************************** +// +// GAP Device Initialization Request +// +//***************************************************************************** +void +GAPDeviceInit(uint8_t ui8ProfileRole, + uint8_t ui8MaxScanRsps, + uint8_t *pui8IRK, + uint8_t *pui8SRK, + uint32_t ui32SignCounter) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_INIT_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (HCI_VE_GAP_DEVICE_INIT_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 38; + g_pui8TXBuf[g_ui8TXLen++] = ui8ProfileRole; + g_pui8TXBuf[g_ui8TXLen++] = ui8MaxScanRsps; + memcpy(g_pui8TXBuf + g_ui8TXLen, pui8IRK, 16); + g_ui8TXLen +=16; + memcpy(g_pui8TXBuf + g_ui8TXLen, pui8SRK, 16); + g_ui8TXLen +=16; + g_pui8TXBuf[g_ui8TXLen++] = ui32SignCounter & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui32SignCounter >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui32SignCounter >> 16) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui32SignCounter >> 24) & 0xFF; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// GAP Get Parameter Request. +// +//***************************************************************************** +void +GAPGetParam(uint8_t ui8ParamID) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_GET_PARAM_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (HCI_VE_GAP_GET_PARAM_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 1; + g_pui8TXBuf[g_ui8TXLen++] = ui8ParamID; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// GAP Set Parameter request. +// +//***************************************************************************** +void +GAPSetParam(uint8_t ui8ParamID, uint16_t ui16Value) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_SET_PARAM_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (HCI_VE_GAP_SET_PARAM_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 3; + g_pui8TXBuf[g_ui8TXLen++] = ui8ParamID; + g_pui8TXBuf[g_ui8TXLen++] = ui16Value & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16Value >> 8) & 0xFF; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// Start Discovery Request. +// +//***************************************************************************** +void +GAPDiscoveryReq(uint8_t ui8Mode, bool bActiveScan, bool bWhiteList) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_DISC_REQ_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (HCI_VE_GAP_DEVICE_DISC_REQ_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 3; + g_pui8TXBuf[g_ui8TXLen++] = ui8Mode; + g_pui8TXBuf[g_ui8TXLen++] = bActiveScan; + g_pui8TXBuf[g_ui8TXLen++] = bWhiteList; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// Establish Link Request. +// +//***************************************************************************** +void +GAPEstLinkReq(bool bHighDutyCycle, bool bWhiteList, + uint8_t ui8AddrType, uint8_t *pui8DevAddr) +{ + uint8_t ui8Idx; + + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_EST_LINK_REQ_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = + (HCI_VE_GAP_DEVICE_EST_LINK_REQ_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 9; + g_pui8TXBuf[g_ui8TXLen++] = bHighDutyCycle; + g_pui8TXBuf[g_ui8TXLen++] = bWhiteList; + g_pui8TXBuf[g_ui8TXLen++] = ui8AddrType; + for(ui8Idx = 0; ui8Idx < HCI_BDADDR_LEN; ui8Idx++) + { + g_pui8TXBuf[g_ui8TXLen++] = pui8DevAddr[ui8Idx]; + } + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// Terminate Link Request. +// +//***************************************************************************** +void +GAPTerLinkReq(uint16_t ui16ConnHandle, uint8_t ui8Reason) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_TER_LINK_REQ_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = + (HCI_VE_GAP_DEVICE_TER_LINK_REQ_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 3; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16ConnHandle >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = ui8Reason; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// Start Pairing Request. +// +//***************************************************************************** +void +GAPAuthenticate(uint16_t ui16ConnHandle) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_AUTHENTICATE_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = + (HCI_VE_GAP_DEVICE_AUTHENTICATE_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 29; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16ConnHandle >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 0x04; //KeyboardDisplay + g_pui8TXBuf[g_ui8TXLen++] = 0x00; //oob false + memset(&g_pui8TXBuf[g_ui8TXLen], 0, 16); + g_ui8TXLen +=16; + g_pui8TXBuf[g_ui8TXLen++] = 0x05; //AuthReq + g_pui8TXBuf[g_ui8TXLen++] = 0x10; // MaxEKeySize + g_pui8TXBuf[g_ui8TXLen++] = 0x3F; // KeyDist + g_pui8TXBuf[g_ui8TXLen++] = 0x00; // Pair.enable + g_pui8TXBuf[g_ui8TXLen++] = 0x03; // Pair.ioCaps + g_pui8TXBuf[g_ui8TXLen++] = 0x00; // Pair.oobDFlag + + g_pui8TXBuf[g_ui8TXLen++] = 0x01; // Pair.authReq + g_pui8TXBuf[g_ui8TXLen++] = 0x10; // MaxEKeySize + g_pui8TXBuf[g_ui8TXLen++] = 0x3F; // KeyDist + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// PASS key during Authentication. +// +//***************************************************************************** +void +GAPPassKeyUpdate(uint16_t ui16ConnHandle, char *pcPassCode) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_PASSKEY_UPDATE_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = + (HCI_VE_GAP_DEVICE_PASSKEY_UPDATE_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 8; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16ConnHandle >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = pcPassCode[0]; + g_pui8TXBuf[g_ui8TXLen++] = pcPassCode[1]; + g_pui8TXBuf[g_ui8TXLen++] = pcPassCode[2]; + g_pui8TXBuf[g_ui8TXLen++] = pcPassCode[3]; + g_pui8TXBuf[g_ui8TXLen++] = pcPassCode[4]; + g_pui8TXBuf[g_ui8TXLen++] = pcPassCode[5]; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// GAP Bonding Request. +// +//***************************************************************************** +void +GAPBond(uint16_t ui16ConnHandle, tLTKData *psSavedKey) +{ + uint8_t ui8Loop; + + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_BOND_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (HCI_VE_GAP_DEVICE_BOND_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 30; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16ConnHandle >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = psSavedKey->bAuth; + for(ui8Loop = 0; ui8Loop < psSavedKey->ui8LTKSize; ui8Loop++) + { + g_pui8TXBuf[g_ui8TXLen++] = psSavedKey->pui8LTK[ui8Loop]; + } + g_pui8TXBuf[g_ui8TXLen++] = psSavedKey->pui8DIV[0]; + g_pui8TXBuf[g_ui8TXLen++] = psSavedKey->pui8DIV[1]; + for(ui8Loop = 0; ui8Loop < 8; ui8Loop++) + { + g_pui8TXBuf[g_ui8TXLen++] = psSavedKey->pui8Rand[ui8Loop]; + } + g_pui8TXBuf[g_ui8TXLen++] = psSavedKey->ui8LTKSize; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// Read Characteristic Value. +// +//***************************************************************************** +void +GAPReadCharValue(uint16_t ui16ConnHandle, uint16_t ui16Handle) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_READ_CHAR_VAL_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = + (HCI_VE_GAP_DEVICE_READ_CHAR_VAL_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 4; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = ui16Handle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16Handle >> 8) & 0xFF; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; + +} + +//***************************************************************************** +// +// Write Characteristic Value request. +// +//***************************************************************************** +void +GAPWriteCharValue(uint16_t ui16ConnHandle, uint16_t ui16Handle, + uint8_t *pui8Buf, uint8_t ui8Len) +{ + uint8_t ui8Loop; + + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = + (HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 4 + ui8Len; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = ui16Handle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16Handle >> 8) & 0xFF; + for(ui8Loop = 0; ui8Loop < ui8Len; ui8Loop++) + { + g_pui8TXBuf[g_ui8TXLen++] = pui8Buf[ui8Loop]; + } + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} + +//***************************************************************************** +// +// Read RSSI Value Request. +// +//***************************************************************************** +void +HCIReadRSSI(uint16_t ui16ConnHandle) +{ + g_ui8TXLen = 0; + g_pui8TXBuf[g_ui8TXLen++] = HCI_CMD_PACKET; + g_pui8TXBuf[g_ui8TXLen++] = HCI_READ_RSSI_OPCODE & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (HCI_READ_RSSI_OPCODE >> 8) & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = 2; + g_pui8TXBuf[g_ui8TXLen++] = ui16ConnHandle & 0xFF; + g_pui8TXBuf[g_ui8TXLen++] = (ui16ConnHandle >>8) & 0xFF; + + DumpBuffer((uint8_t*)g_pui8TXBuf, g_ui8TXLen, true); + UARTSend((const uint8_t*)g_pui8TXBuf, g_ui8TXLen); + return; +} diff --git a/boards/dk-tm4c129x/ble_central/gcc/ble_central.axf b/boards/dk-tm4c129x/ble_central/gcc/ble_central.axf new file mode 100644 index 0000000..ea891ff Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/gcc/ble_central.axf differ diff --git a/boards/dk-tm4c129x/ble_central/gcc/ble_central.bin b/boards/dk-tm4c129x/ble_central/gcc/ble_central.bin new file mode 100644 index 0000000..a1b24e6 Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/gcc/ble_central.bin differ diff --git a/boards/dk-tm4c129x/ble_central/hci.h b/boards/dk-tm4c129x/ble_central/hci.h new file mode 100644 index 0000000..c5680cf --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/hci.h @@ -0,0 +1,329 @@ +//***************************************************************************** +// +// hci.h - This file contains the types, contants, external functions +// etc. for the BLE HCI Transport Layer. +// This file copied most of #defines from BLE-Stack 1.3.2 release +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef HCI_H +#define HCI_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +// +// Long Term Key info +// +typedef struct +{ + bool bValid; + bool bAuth; + uint8_t ui8LTKSize; + uint8_t pui8LTK[16]; + uint8_t pui8DIV[2]; + uint8_t pui8Rand[8]; +} tLTKData; + +#define HCI_BDADDR_LEN 6 + +// +// HCI Packet Types +// +#define HCI_CMD_PACKET 0x01 +#define HCI_ACL_DATA_PACKET 0x02 +#define HCI_SCO_DATA_PACKET 0x03 +#define HCI_EVENT_PACKET 0x04 + +// +// Vendor Specific Command Opcode +// +#define HCI_VE_GAP_DEVICE_INIT_OPCODE 0xFE00 +#define HCI_VE_GAP_DEVICE_DISC_REQ_OPCODE 0xFE04 +#define HCI_VE_GAP_DEVICE_EST_LINK_REQ_OPCODE 0xFE09 +#define HCI_VE_GAP_DEVICE_TER_LINK_REQ_OPCODE 0xFE0A +#define HCI_VE_GAP_DEVICE_AUTHENTICATE_OPCODE 0xFE0B +#define HCI_VE_GAP_DEVICE_PASSKEY_UPDATE_OPCODE 0xFE0C +#define HCI_VE_GAP_DEVICE_BOND_OPCODE 0xFE0F +#define HCI_VE_GAP_SET_PARAM_OPCODE 0xFE30 +#define HCI_VE_GAP_GET_PARAM_OPCODE 0xFE31 +#define HCI_VE_GAP_DEVICE_READ_CHAR_VAL_OPCODE 0xFD8A +#define HCI_VE_GAP_DEVICE_WRITE_CHAR_VAL_OPCODE 0xFD92 + +// +// BLE Command Opcode +// +#define HCI_READ_RSSI_OPCODE 0x1405 + +// +// Characteristic Value Handle +// +#define GATT_IRTEMP_DATA_UUID_HANDLE 0x25 +#define GATT_IRTEMP_NOTIFY_UUID_HANDLE 0x26 +#define GATT_IRTEMP_CFG_UUID_HANDLE 0x29 +#define GATT_HUMIDITY_DATA_UUID_HANDLE 0x38 +#define GATT_HUMIDITY_NOTIDY_UUID_HANDLE 0x39 +#define GATT_HUMIDITY_CFG_UUID_HANDLE 0x3C + +// +// GAP Profile Roles Bit mask values +// +#define GAP_PROFILE_BROADCASTER 0x01 //A device that sends advertising events only. +#define GAP_PROFILE_OBSERVER 0x02 //A device that receives advertising events only. +#define GAP_PROFILE_PERIPHERAL 0x04 //A device that accepts the establishment of an LE physical link using the connection establishment procedure +#define GAP_PROFILE_CENTRAL 0x08 //A device that supports the Central role initiates the establishment of a physical connection + + +// +// GAP_PARAMETER_ID_DEFINES GAP Parameter IDs +// +#define TGAP_GEN_DISC_ADV_MIN 0 //!< Minimum time to remain advertising, when in Discoverable mode (mSec). Setting this parameter to 0 turns off the timeout (default). +#define TGAP_LIM_ADV_TIMEOUT 1 //!< Maximum time to remain advertising, when in Limited Discoverable mode. In seconds (default 180 seconds) +#define TGAP_GEN_DISC_SCAN 2 //!< Minimum time to perform scanning, when performing General Discovery proc (mSec) +#define TGAP_LIM_DISC_SCAN 3 //!< Minimum time to perform scanning, when performing Limited Discovery proc (mSec) +#define TGAP_CONN_EST_ADV_TIMEOUT 4 //!< Advertising timeout, when performing Connection Establishment proc (mSec) +#define TGAP_CONN_PARAM_TIMEOUT 5 //!< Link Layer connection parameter update notification timer, connection parameter update proc (mSec) + +// Constants +#define TGAP_LIM_DISC_ADV_INT_MIN 6 //!< Minimum advertising interval, when in limited discoverable mode (n * 0.625 mSec) +#define TGAP_LIM_DISC_ADV_INT_MAX 7 //!< Maximum advertising interval, when in limited discoverable mode (n * 0.625 mSec) +#define TGAP_GEN_DISC_ADV_INT_MIN 8 //!< Minimum advertising interval, when in General discoverable mode (n * 0.625 mSec) +#define TGAP_GEN_DISC_ADV_INT_MAX 9 //!< Maximum advertising interval, when in General discoverable mode (n * 0.625 mSec) +#define TGAP_CONN_ADV_INT_MIN 10 //!< Minimum advertising interval, when in Connectable mode (n * 0.625 mSec) +#define TGAP_CONN_ADV_INT_MAX 11 //!< Maximum advertising interval, when in Connectable mode (n * 0.625 mSec) +#define TGAP_CONN_SCAN_INT 12 //!< Scan interval used during Link Layer Initiating state, when in Connectable mode (n * 0.625 mSec) +#define TGAP_CONN_SCAN_WIND 13 //!< Scan window used during Link Layer Initiating state, when in Connectable mode (n * 0.625 mSec) +#define TGAP_CONN_HIGH_SCAN_INT 14 //!< Scan interval used during Link Layer Initiating state, when in Connectable mode, high duty scan cycle scan paramaters (n * 0.625 mSec) +#define TGAP_CONN_HIGH_SCAN_WIND 15 //!< Scan window used during Link Layer Initiating state, when in Connectable mode, high duty scan cycle scan paramaters (n * 0.625 mSec) +#define TGAP_GEN_DISC_SCAN_INT 16 //!< Scan interval used during Link Layer Scanning state, when in General Discovery proc (n * 0.625 mSec) +#define TGAP_GEN_DISC_SCAN_WIND 17 //!< Scan window used during Link Layer Scanning state, when in General Discovery proc (n * 0.625 mSec) +#define TGAP_LIM_DISC_SCAN_INT 18 //!< Scan interval used during Link Layer Scanning state, when in Limited Discovery proc (n * 0.625 mSec) +#define TGAP_LIM_DISC_SCAN_WIND 19 //!< Scan window used during Link Layer Scanning state, when in Limited Discovery proc (n * 0.625 mSec) +#define TGAP_CONN_EST_ADV 20 //!< Advertising interval, when using Connection Establishment proc (n * 0.625 mSec). Obsolete - Do not use. +#define TGAP_CONN_EST_INT_MIN 21 //!< Minimum Link Layer connection interval, when using Connection Establishment proc (n * 1.25 mSec) +#define TGAP_CONN_EST_INT_MAX 22 //!< Maximum Link Layer connection interval, when using Connection Establishment proc (n * 1.25 mSec) +#define TGAP_CONN_EST_SCAN_INT 23 //!< Scan interval used during Link Layer Initiating state, when using Connection Establishment proc (n * 0.625 mSec) +#define TGAP_CONN_EST_SCAN_WIND 24 //!< Scan window used during Link Layer Initiating state, when using Connection Establishment proc (n * 0.625 mSec) +#define TGAP_CONN_EST_SUPERV_TIMEOUT 25 //!< Link Layer connection supervision timeout, when using Connection Establishment proc (n * 10 mSec) +#define TGAP_CONN_EST_LATENCY 26 //!< Link Layer connection slave latency, when using Connection Establishment proc (in number of connection events) +#define TGAP_CONN_EST_MIN_CE_LEN 27 //!< Local informational parameter about min len of connection needed, when using Connection Establishment proc (n * 0.625 mSec) +#define TGAP_CONN_EST_MAX_CE_LEN 28 //!< Local informational parameter about max len of connection needed, when using Connection Establishment proc (n * 0.625 mSec) +#define TGAP_PRIVATE_ADDR_INT 29 //!< Minimum Time Interval between private (resolvable) address changes. In minutes (default 15 minutes) +#define TGAP_CONN_PAUSE_CENTRAL 30 //!< Central idle timer. In seconds (default 1 second) +#define TGAP_CONN_PAUSE_PERIPHERAL 31 //!< Minimum time upon connection establishment before the peripheral starts a connection update procedure. In seconds (default 5 seconds) + +// Proprietary +#define TGAP_SM_TIMEOUT 32 //!< SM Message Timeout (milliseconds). Default 30 seconds. +#define TGAP_SM_MIN_KEY_LEN 33 //!< SM Minimum Key Length supported. Default 7. +#define TGAP_SM_MAX_KEY_LEN 34 //!< SM Maximum Key Length supported. Default 16. +#define TGAP_FILTER_ADV_REPORTS 35 //!< Filter duplicate advertising reports. Default TRUE. +#define TGAP_SCAN_RSP_RSSI_MIN 36 //!< Minimum RSSI required for scan responses to be reported to the app. Default -127. + +// +// GAP Device Discovery Modes +// +#define DEVDISC_MODE_NONDISCOVERABLE 0x00 //!< No discoverable setting +#define DEVDISC_MODE_GENERAL 0x01 //!< General Discoverable devices +#define DEVDISC_MODE_LIMITED 0x02 //!< Limited Discoverable devices +#define DEVDISC_MODE_ALL 0x03 //!< Not filtered + +// +// GAP Address Types +// +#define ADDRTYPE_PUBLIC 0x00 //!< Use the BD_ADDR +#define ADDRTYPE_STATIC 0x01 //!< Static address +#define ADDRTYPE_PRIVATE_NONRESOLVE 0x02 //!< Generate Non-Resolvable Private Address +#define ADDRTYPE_PRIVATE_RESOLVE 0x03 //!< Generate Resolvable Private Address + +// +// GAP Advertiser Event Types +// +#define GAP_ADTYPE_ADV_IND 0x00 //!< Connectable undirected advertisement +#define GAP_ADTYPE_ADV_DIRECT_IND 0x01 //!< Connectable directed advertisement +#define GAP_ADTYPE_ADV_DISCOVER_IND 0x02 //!< Discoverable undirected advertisement +#define GAP_ADTYPE_ADV_NONCONN_IND 0x03 //!< Non-Connectable undirected advertisement +#define GAP_ADTYPE_SCAN_RSP_IND 0x04 //!< Only used in gapDeviceInfoEvent_t + +// +// Vendor Specific Event Code +// +#define HCI_VE_EVENT_CODE 0xFF + +// Vendor Specific Event +#define GAP_HCI_EVENT_EXT_CMD_STATUS 0x067F +#define GAP_HCI_EVENT_EXT_DEVICE_INIT_DONE 0x0600 +#define GAP_HCI_EVENT_EXT_DEVICE_INFO 0x060D +#define GAP_HCI_EVENT_EXT_DEVICE_DISC_DONE 0x0601 +#define GAP_HCI_EVENT_EXT_DEVICE_LINK_DONE 0x0605 +#define GAP_HCI_EVENT_EXT_DEVICE_TERM_LINK_DONE 0x0606 +#define GAP_HCI_EVENT_EXT_DEVICE_PASSKEY_NEEDED 0x060B +#define GAP_HCI_EVENT_EXT_DEVICE_AUTHENTICATE_DONE 0x060A +#define GAP_HCI_EVENT_EXT_DEVICE_BOND_DONE 0x060E +#define GAP_HCI_EVENT_EXT_ATT_READ_RSP 0x050B +#define GAP_HCI_EVENT_EXT_ATT_WRITE_RSP 0x0513 +#define GAP_HCI_EVENT_CMD_COMPLETE 0x0E +#define HCI_ATT_ERROR_RSP_EVENT 0x0501 +#define GAP_HCI_EVENT_HANDLE_VALUE_NOTIFY 0x051B + +/* +** HCI Status +** +** Per the Bluetooth Core Specification, V4.0.0, Vol. 2, Part D. +*/ +#define HCI_SUCCESS 0x00 +#define HCI_ERROR_CODE_UNKNOWN_HCI_CMD 0x01 +#define HCI_ERROR_CODE_UNKNOWN_CONN_ID 0x02 +#define HCI_ERROR_CODE_HW_FAILURE 0x03 +#define HCI_ERROR_CODE_PAGE_TIMEOUT 0x04 +#define HCI_ERROR_CODE_AUTH_FAILURE 0x05 +#define HCI_ERROR_CODE_PIN_KEY_MISSING 0x06 +#define HCI_ERROR_CODE_MEM_CAP_EXCEEDED 0x07 +#define HCI_ERROR_CODE_CONN_TIMEOUT 0x08 +#define HCI_ERROR_CODE_CONN_LIMIT_EXCEEDED 0x09 +#define HCI_ERROR_CODE_SYNCH_CONN_LIMIT_EXCEEDED 0x0A +#define HCI_ERROR_CODE_ACL_CONN_ALREADY_EXISTS 0x0B +#define HCI_ERROR_CODE_CMD_DISALLOWED 0x0C +#define HCI_ERROR_CODE_CONN_REJ_LIMITED_RESOURCES 0x0D +#define HCI_ERROR_CODE_CONN_REJECTED_SECURITY_REASONS 0x0E +#define HCI_ERROR_CODE_CONN_REJECTED_UNACCEPTABLE_BDADDR 0x0F +#define HCI_ERROR_CODE_CONN_ACCEPT_TIMEOUT_EXCEEDED 0x10 +#define HCI_ERROR_CODE_UNSUPPORTED_FEATURE_PARAM_VALUE 0x11 +#define HCI_ERROR_CODE_INVALID_HCI_CMD_PARAMS 0x12 +#define HCI_ERROR_CODE_REMOTE_USER_TERM_CONN 0x13 +#define HCI_ERROR_CODE_REMOTE_DEVICE_TERM_CONN_LOW_RESOURCES 0x14 +#define HCI_ERROR_CODE_REMOTE_DEVICE_TERM_CONN_POWER_OFF 0x15 +#define HCI_ERROR_CODE_CONN_TERM_BY_LOCAL_HOST 0x16 +#define HCI_ERROR_CODE_REPEATED_ATTEMPTS 0x17 +#define HCI_ERROR_CODE_PAIRING_NOT_ALLOWED 0x18 +#define HCI_ERROR_CODE_UNKNOWN_LMP_PDU 0x19 +#define HCI_ERROR_CODE_UNSUPPORTED_REMOTE_FEATURE 0x1A +#define HCI_ERROR_CODE_SCO_OFFSET_REJ 0x1B +#define HCI_ERROR_CODE_SCO_INTERVAL_REJ 0x1C +#define HCI_ERROR_CODE_SCO_AIR_MODE_REJ 0x1D +#define HCI_ERROR_CODE_INVALID_LMP_PARAMS 0x1E +#define HCI_ERROR_CODE_UNSPECIFIED_ERROR 0x1F +#define HCI_ERROR_CODE_UNSUPPORTED_LMP_PARAM_VAL 0x20 +#define HCI_ERROR_CODE_ROLE_CHANGE_NOT_ALLOWED 0x21 +#define HCI_ERROR_CODE_LMP_LL_RESP_TIMEOUT 0x22 +#define HCI_ERROR_CODE_LMP_ERR_TRANSACTION_COLLISION 0x23 +#define HCI_ERROR_CODE_LMP_PDU_NOT_ALLOWED 0x24 +#define HCI_ERROR_CODE_ENCRYPT_MODE_NOT_ACCEPTABLE 0x25 +#define HCI_ERROR_CODE_LINK_KEY_CAN_NOT_BE_CHANGED 0x26 +#define HCI_ERROR_CODE_REQ_QOS_NOT_SUPPORTED 0x27 +#define HCI_ERROR_CODE_INSTANT_PASSED 0x28 +#define HCI_ERROR_CODE_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29 +#define HCI_ERROR_CODE_DIFFERENT_TRANSACTION_COLLISION 0x2A +#define HCI_ERROR_CODE_RESERVED1 0x2B +#define HCI_ERROR_CODE_QOS_UNACCEPTABLE_PARAM 0x2C +#define HCI_ERROR_CODE_QOS_REJ 0x2D +#define HCI_ERROR_CODE_CHAN_ASSESSMENT_NOT_SUPPORTED 0x2E +#define HCI_ERROR_CODE_INSUFFICIENT_SECURITY 0x2F +#define HCI_ERROR_CODE_PARAM_OUT_OF_MANDATORY_RANGE 0x30 +#define HCI_ERROR_CODE_RESERVED2 0x31 +#define HCI_ERROR_CODE_ROLE_SWITCH_PENDING 0x32 +#define HCI_ERROR_CODE_RESERVED3 0x33 +#define HCI_ERROR_CODE_RESERVED_SLOT_VIOLATION 0x34 +#define HCI_ERROR_CODE_ROLE_SWITCH_FAILED 0x35 +#define HCI_ERROR_CODE_EXTENDED_INQUIRY_RESP_TOO_LARGE 0x36 +#define HCI_ERROR_CODE_SIMPLE_PAIRING_NOT_SUPPORTED_BY_HOST 0x37 +#define HCI_ERROR_CODE_HOST_BUSY_PAIRING 0x38 +#define HCI_ERROR_CODE_CONN_REJ_NO_SUITABLE_CHAN_FOUND 0x39 +#define HCI_ERROR_CODE_CONTROLLER_BUSY 0x3A +#define HCI_ERROR_CODE_UNACCEPTABLE_CONN_INTERVAL 0x3B +#define HCI_ERROR_CODE_DIRECTED_ADV_TIMEOUT 0x3C +#define HCI_ERROR_CODE_CONN_TERM_MIC_FAILURE 0x3D +#define HCI_ERROR_CODE_CONN_FAILED_TO_ESTABLISH 0x3E +#define HCI_ERROR_CODE_MAC_CONN_FAILED 0x3F + +// +// Generic Status Return Values +// +#define SUCCESS 0x00 +#define FAILURE 0x01 +#define INVALIDPARAMETER 0x02 +#define INVALID_TASK 0x03 +#define MSG_BUFFER_NOT_AVAIL 0x04 +#define INVALID_MSG_POINTER 0x05 +#define INVALID_EVENT_ID 0x06 +#define INVALID_INTERRUPT_ID 0x07 +#define NO_TIMER_AVAIL 0x08 +#define NV_ITEM_UNINIT 0x09 +#define NV_OPER_FAILED 0x0A +#define INVALID_MEM_SIZE 0x0B +#define NV_BAD_ITEM_LEN 0x0C + +#define bleNotReady 0x10 //!< Not ready to perform task +#define bleAlreadyInRequestedMode 0x11 //!< Already performing that task +#define bleIncorrectMode 0x12 //!< Not setup properly to perform that task +#define bleMemAllocError 0x13 //!< Memory allocation error occurred +#define bleNotConnected 0x14 //!< Can't perform function when not in a connection +#define bleNoResources 0x15 //!< There are no resource available +#define blePending 0x16 //!< Waiting +#define bleTimeout 0x17 //!< Timed out performing function +#define bleInvalidRange 0x18 //!< A parameter is out of range +#define bleLinkEncrypted 0x19 //!< The link is already encrypted +#define bleProcedureComplete 0x1A //!< The Procedure is completed + +// GAP Status Return Values - returned as bStatus_t +#define bleGAPUserCanceled 0x30 //!< The user canceled the task +#define bleGAPConnNotAcceptable 0x31 //!< The connection was not accepted +#define bleGAPBondRejected 0x32 //!< The bound information was rejected. + +// ATT Status Return Values - returned as bStatus_t +#define bleInvalidPDU 0x40 //!< The attribute PDU is invalid +#define bleInsufficientAuthen 0x41 //!< The attribute has insufficient authentication +#define bleInsufficientEncrypt 0x42 //!< The attribute has insufficient encryption +#define bleInsufficientKeySize 0x43 //!< The attribute has insufficient encryption key size + +// Disconnect Reasons +#define HCI_DISCONNECT_AUTH_FAILURE HCI_ERROR_CODE_AUTH_FAILURE +#define HCI_DISCONNECT_REMOTE_USER_TERM HCI_ERROR_CODE_REMOTE_USER_TERM_CONN +#define HCI_DISCONNECT_REMOTE_DEV_LOW_RESOURCES HCI_ERROR_CODE_REMOTE_DEVICE_TERM_CONN_LOW_RESOURCES +#define HCI_DISCONNECT_REMOTE_DEV_POWER_OFF HCI_ERROR_CODE_REMOTE_DEVICE_TERM_CONN_POWER_OFF +#define HCI_DISCONNECT_UNSUPPORTED_REMOTE_FEATURE HCI_ERROR_CODE_UNSUPPORTED_REMOTE_FEATURE +#define HCI_DISCONNECT_KEY_PAIRING_NOT_SUPPORTED HCI_ERROR_CODE_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED +#define HCI_DISCONNECT_UNACCEPTABLE_CONN_INTERVAL HCI_ERROR_CODE_UNACCEPTABLE_CONN_INTERVAL + +extern void GAPDeviceInit(uint8_t ui8ProfileRole, + uint8_t ui8MaxScanRsps, + uint8_t *pui8IRK, + uint8_t *pui8SRK, + uint32_t ui32SignCounter); +extern void GAPGetParam(uint8_t ui8ParamID); +extern void GAPSetParam(uint8_t ui8ParamID, uint16_t ui16Value); +extern void GAPDiscoveryReq(uint8_t ui8Mode, bool bActiveScan, bool bWhiteList); +extern void GAPEstLinkReq(bool bHighDutyCycle, bool bWhiteList, + uint8_t ui8AddrType, uint8_t *pui8DevAddr); +extern void GAPTerLinkReq(uint16_t ui16ConnHandle, uint8_t ui8Reason); +extern void GAPAuthenticate(uint16_t ui16ConnHandle); +extern void GAPPassKeyUpdate(uint16_t ui16ConnHandle, char *pcPassCode); +extern void GAPBond(uint16_t ui16ConnHandle, tLTKData *psSavedKey); +extern void GAPReadCharValue(uint16_t ui16ConnHandle, uint16_t ui16Handle); +extern void GAPWriteCharValue(uint16_t ui16ConnHandle, uint16_t ui16Handle, + uint8_t *pui8Buf, uint8_t ui8Len); +extern void HCIReadRSSI(uint16_t ui16ConnHandle); +#ifdef __cplusplus +} +#endif + +#endif /* HCI_H */ diff --git a/boards/dk-tm4c129x/ble_central/readme.txt b/boards/dk-tm4c129x/ble_central/readme.txt new file mode 100644 index 0000000..b703699 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/readme.txt @@ -0,0 +1,94 @@ +BLE Central Device Demonstration + +This application provides a demonstration use of Bluetooth Low Energy +central device by utilizing TI’s BLE CC2540 Evaluation Module and +SesorTags. + +By connecting a CC2540 EM board to the EM header on the TM4C129X development +board, the TM4C129X can communicate with the CC2540 by means of +vendor-specific HCI commands using the UART interface. This application can +discover up to three SensorTag devices, it can connect to any one of them, +perform pairing and bonding, read some sensor data and RSSI data from the +slave, and display the information on the LCD display. + +This application can discover any BLE device although it may not be +able to make a connection to a device other than a SensorTag/CC2540 as the +bonding process will likely fail due to the use of a default passcode. +We have tested this application with SensorTag and CC2540 Development +boards (SmartRF05EB + CC2540 EM) with the SimpleBLEPeripheral +sample application programmed. It can successfully bond with both boards +since the same default passcode is expected. Both SensorTag and CC2540 +devices have BLE Stack 1.4.0 release code programmed. + +CC2540 device should be programmed with the HostTestRelease +(Network Processor) application. A hex file containing the this application +can be found in the BLE stack 1.4.0 release under +C:\\...\\BLE-CC254x-1.4.0\\Accessories\\HexFiles\\ +CC2540_SmartRF_HostTestRelease_All.hex. Please refer to the Bluetooth Low +Energy CC2540 Development Kit User's Guide for information on how to load +the hex file to the CC2540. This User's Guide can be found in +http://www.ti.com/lit/ug/swru301a/swru301a.pdf + +On the TM4C129X development board, make sure that jumpers PJ0 and PJ1 +are connected to the "EM_UART" side which allows UART3 TX and RX signals to +be routed to the EM header. UART3 is used as the communication channel +between the CC2540 device and the TM4C129X device. + +Once the application starts, it will verify the serial connection by +sending the CC2540 device a vendor-specific HCI command, and waiting for the +expected responses within a short time period. Once the physical connection +between TM4C129X and CC2540 is verified, the device will automatically +start to discover BLE peripheral device. If no devices are found within 20 +seconds, the application will timeout and display "No Device Found", +otherwise the discovered device names will be shown on the display. +Touching any of the device names will start the process of establishing a +connection with that device. This sample application always tries to make +a secure connection by pairing the device with default passcode "00000". +Upon successfully linking and pairing, application will start querying +sensor data, including IR temperature, ambient temperature, humidity and +RSSI. + +Whe run inside, IR and ambient temperature should typically be in the low +20s (Celsius). You can place the SensorTag near a hot object (such as a +cup of coffee) to verify that the IR temperature increases. You can move +the SensorTag further from the TM4C129X development board to verify that +its RSSI reading will decrease. + +At any time after the connection is established, you can touch the +"disconnect" button on the bottom of the screen to terminate the +connection with the peripheral device. + +In order to make the SensorTag discoverable by a central device, the +SensorTag needs to be in the discovery mode. The LED in the middle of the +board will blink periodically if the SensorTag is in discovery mode. If the +LED is not blinking, pressing the side button on the SensorTag should +place it in discovery mode. Once it is connected to a central device, +the LED should be off, pressing the side button while it is connected will +terminate the connection and put the SensorTag in discovery mode again. +For more information on SensorTag, please visit +http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag + +Every HCI command and event are output to the UART console for +debugging purpose. The UART terminal should be configured in 115,200 baud, +8-n-1 mode. + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/ble_central/rvmdk/ble_central.axf b/boards/dk-tm4c129x/ble_central/rvmdk/ble_central.axf new file mode 100644 index 0000000..03e170b Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/rvmdk/ble_central.axf differ diff --git a/boards/dk-tm4c129x/ble_central/rvmdk/ble_central.bin b/boards/dk-tm4c129x/ble_central/rvmdk/ble_central.bin new file mode 100644 index 0000000..2a4a4ba Binary files /dev/null and b/boards/dk-tm4c129x/ble_central/rvmdk/ble_central.bin differ diff --git a/boards/dk-tm4c129x/ble_central/startup_ccs.c b/boards/dk-tm4c129x/ble_central/startup_ccs.c new file mode 100644 index 0000000..156d185 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void UART3IntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + UART3IntHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_central/startup_ewarm.c b/boards/dk-tm4c129x/ble_central/startup_ewarm.c new file mode 100644 index 0000000..9852a56 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void UART3IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + UART3IntHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_central/startup_gcc.c b/boards/dk-tm4c129x/ble_central/startup_gcc.c new file mode 100644 index 0000000..851b511 --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void UART3IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + UART3IntHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/ble_central/startup_rvmdk.S b/boards/dk-tm4c129x/ble_central/startup_rvmdk.S new file mode 100644 index 0000000..af8433a --- /dev/null +++ b/boards/dk-tm4c129x/ble_central/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickIntHandler + EXTERN UART3IntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD UART3IntHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/blinky/Makefile b/boards/dk-tm4c129x/blinky/Makefile new file mode 100644 index 0000000..e672a7f --- /dev/null +++ b/boards/dk-tm4c129x/blinky/Makefile @@ -0,0 +1,77 @@ +#****************************************************************************** +# +# Makefile - Rules for building the blinky example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find header files that do not live in the source directory. +# +IPATH=../../../.. + +# +# The default rule, which causes the blinky example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/blinky.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the blinky example. +# +${COMPILER}/blinky.axf: ${COMPILER}/blinky.o +${COMPILER}/blinky.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/blinky.axf: blinky.ld +SCATTERgcc_blinky=blinky.ld +ENTRY_blinky=ResetISR + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/blinky/blinky.c b/boards/dk-tm4c129x/blinky/blinky.c new file mode 100644 index 0000000..d9c0873 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.c @@ -0,0 +1,93 @@ +//***************************************************************************** +// +// blinky.c - Simple example to blink the on-board LED. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/tm4c129xnczad.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Blinky (blinky)

+//! +//! A very simple example that blinks the on-board LED. +// +//***************************************************************************** + +//***************************************************************************** +// +// Blink the on-board LED. +// +//***************************************************************************** +int +main(void) +{ + volatile uint32_t ui32Loop; + + // + // Enable the GPIO port that is used for the on-board LED. + // + SYSCTL_RCGCGPIO_R = SYSCTL_RCGCGPIO_R14; + + // + // Do a dummy read to insert a few cycles after enabling the peripheral. + // + ui32Loop = SYSCTL_RCGCGPIO_R; + + // + // Enable the GPIO pin for the LED (PQ7). Set the direction as output, and + // enable the GPIO pin for digital function. + // + GPIO_PORTQ_DIR_R = 0x80; + GPIO_PORTQ_DEN_R = 0x80; + + // + // Loop forever. + // + while(1) + { + // + // Turn on the LED. + // + GPIO_PORTQ_DATA_R |= 0x80; + + // + // Delay for a bit. + // + for(ui32Loop = 0; ui32Loop < 200000; ui32Loop++) + { + } + + // + // Turn off the LED. + // + GPIO_PORTQ_DATA_R &= ~(0x80); + + // + // Delay for a bit. + // + for(ui32Loop = 0; ui32Loop < 200000; ui32Loop++) + { + } + } +} diff --git a/boards/dk-tm4c129x/blinky/blinky.ewd b/boards/dk-tm4c129x/blinky/blinky.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/blinky/blinky.ewp b/boards/dk-tm4c129x/blinky/blinky.ewp new file mode 100644 index 0000000..39edba1 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.ewp @@ -0,0 +1,777 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Source + + $PROJ_DIR$\blinky.c + + + $PROJ_DIR$\startup_ewarm.c + + + diff --git a/boards/dk-tm4c129x/blinky/blinky.icf b/boards/dk-tm4c129x/blinky/blinky.icf new file mode 100644 index 0000000..38c73c9 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// blinky.icf - Linker configuration file for blinky. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/blinky/blinky.ld b/boards/dk-tm4c129x/blinky/blinky.ld new file mode 100644 index 0000000..141a76a --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * blinky.ld - Linker configuration file for blinky. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/blinky/blinky.sct b/boards/dk-tm4c129x/blinky/blinky.sct new file mode 100644 index 0000000..ba355e7 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; blinky.sct - Linker configuration file for blinky. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/blinky/blinky.uvopt b/boards/dk-tm4c129x/blinky/blinky.uvopt new file mode 100644 index 0000000..07513f7 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.uvopt @@ -0,0 +1,268 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + blinky + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\blinky.c + blinky.c + + + 1 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + + + Documentation + 1 + 0 + 0 + + 2 + 3 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/blinky/blinky.uvproj b/boards/dk-tm4c129x/blinky/blinky.uvproj new file mode 100644 index 0000000..21a46df --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky.uvproj @@ -0,0 +1,414 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + blinky + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + blinky + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\blinky.bin .\rvmdk\blinky.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD + + ..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + blinky.sct + + + --entry Reset_Handler + + + + + + + + Source + + + blinky.c + 1 + .\blinky.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/blinky/blinky_ccs.cmd b/boards/dk-tm4c129x/blinky/blinky_ccs.cmd new file mode 100644 index 0000000..fdc9dcc --- /dev/null +++ b/boards/dk-tm4c129x/blinky/blinky_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * blinky_ccs.cmd - CCS linker configuration file for blinky. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 256; diff --git a/boards/dk-tm4c129x/blinky/ccs/.ccsimportspec b/boards/dk-tm4c129x/blinky/ccs/.ccsimportspec new file mode 100644 index 0000000..60cba3f --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/blinky/ccs/.ccsproject b/boards/dk-tm4c129x/blinky/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/blinky/ccs/.cproject b/boards/dk-tm4c129x/blinky/ccs/.cproject new file mode 100644 index 0000000..69963b4 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/.cproject @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/blinky/ccs/.project b/boards/dk-tm4c129x/blinky/ccs/.project new file mode 100644 index 0000000..5f9b42c --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/.project @@ -0,0 +1,50 @@ + + + blinky + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + blinky.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/blinky/blinky.c + + + blinky_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/blinky/blinky_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/blinky/startup_ccs.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/blinky/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/blinky/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/blinky/ccs/Debug/blinky.bin b/boards/dk-tm4c129x/blinky/ccs/Debug/blinky.bin new file mode 100644 index 0000000..8903199 Binary files /dev/null and b/boards/dk-tm4c129x/blinky/ccs/Debug/blinky.bin differ diff --git a/boards/dk-tm4c129x/blinky/ccs/Debug/blinky.out b/boards/dk-tm4c129x/blinky/ccs/Debug/blinky.out new file mode 100644 index 0000000..9d7e81a Binary files /dev/null and b/boards/dk-tm4c129x/blinky/ccs/Debug/blinky.out differ diff --git a/boards/dk-tm4c129x/blinky/ccs/macros.ini_initial b/boards/dk-tm4c129x/blinky/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/blinky/ccs/target_config.ccxml b/boards/dk-tm4c129x/blinky/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.bin b/boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.bin new file mode 100644 index 0000000..0b986aa Binary files /dev/null and b/boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.bin differ diff --git a/boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.out b/boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.out new file mode 100644 index 0000000..f0a1354 Binary files /dev/null and b/boards/dk-tm4c129x/blinky/ewarm/Exe/blinky.out differ diff --git a/boards/dk-tm4c129x/blinky/gcc/blinky.axf b/boards/dk-tm4c129x/blinky/gcc/blinky.axf new file mode 100644 index 0000000..52ee3da Binary files /dev/null and b/boards/dk-tm4c129x/blinky/gcc/blinky.axf differ diff --git a/boards/dk-tm4c129x/blinky/gcc/blinky.bin b/boards/dk-tm4c129x/blinky/gcc/blinky.bin new file mode 100644 index 0000000..20b338a Binary files /dev/null and b/boards/dk-tm4c129x/blinky/gcc/blinky.bin differ diff --git a/boards/dk-tm4c129x/blinky/readme.txt b/boards/dk-tm4c129x/blinky/readme.txt new file mode 100644 index 0000000..75f7d9a --- /dev/null +++ b/boards/dk-tm4c129x/blinky/readme.txt @@ -0,0 +1,23 @@ +Blinky + +A very simple example that blinks the on-board LED. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/blinky/rvmdk/blinky.axf b/boards/dk-tm4c129x/blinky/rvmdk/blinky.axf new file mode 100644 index 0000000..5cf0f1d Binary files /dev/null and b/boards/dk-tm4c129x/blinky/rvmdk/blinky.axf differ diff --git a/boards/dk-tm4c129x/blinky/rvmdk/blinky.bin b/boards/dk-tm4c129x/blinky/rvmdk/blinky.bin new file mode 100644 index 0000000..e2f2a76 Binary files /dev/null and b/boards/dk-tm4c129x/blinky/rvmdk/blinky.bin differ diff --git a/boards/dk-tm4c129x/blinky/startup_ccs.c b/boards/dk-tm4c129x/blinky/startup_ccs.c new file mode 100644 index 0000000..a769216 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/startup_ccs.c @@ -0,0 +1,268 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/blinky/startup_ewarm.c b/boards/dk-tm4c129x/blinky/startup_ewarm.c new file mode 100644 index 0000000..bd8d9d1 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/startup_ewarm.c @@ -0,0 +1,299 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[64] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/blinky/startup_gcc.c b/boards/dk-tm4c129x/blinky/startup_gcc.c new file mode 100644 index 0000000..ed4261f --- /dev/null +++ b/boards/dk-tm4c129x/blinky/startup_gcc.c @@ -0,0 +1,315 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[64]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/blinky/startup_rvmdk.S b/boards/dk-tm4c129x/blinky/startup_rvmdk.S new file mode 100644 index 0000000..625bd43 --- /dev/null +++ b/boards/dk-tm4c129x/blinky/startup_rvmdk.S @@ -0,0 +1,324 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000100 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/Makefile b/boards/dk-tm4c129x/boot_demo_emac_flash/Makefile new file mode 100644 index 0000000..80412c9 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/Makefile @@ -0,0 +1,100 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Ethernet flashed-based boot_demo example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/lwip-1.4.1/apps +IPATH+=../../../../third_party/bget +IPATH+=../../../../third_party/lwip-1.4.1/ports/tiva-tm4c129/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include/ipv4 +IPATH+=../../../../third_party + +# +# The default rule, which causes the Ethernet flashed-based boot_demo example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/boot_demo_emac_flash.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Ethernet flashed-based boot_demo example. +# +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/boot_demo_emac_flash.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/frame.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/lwiplib.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/pinout.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/swupdate.o +${COMPILER}/boot_demo_emac_flash.axf: ${COMPILER}/ustdlib.o +${COMPILER}/boot_demo_emac_flash.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/boot_demo_emac_flash.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/boot_demo_emac_flash.axf: boot_demo_emac_flash.ld +SCATTERgcc_boot_demo_emac_flash=boot_demo_emac_flash.ld +ENTRY_boot_demo_emac_flash=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.c b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.c new file mode 100644 index 0000000..cd5c687 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.c @@ -0,0 +1,426 @@ +//***************************************************************************** +// +// boot_demo_emac_flash.c - Ethernet boot loader example application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_flash.h" +#include "inc/hw_memmap.h" +#include "inc/hw_sysctl.h" +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/flash.h" +#include "driverlib/uart.h" +#include "driverlib/usb.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "utils/ustdlib.h" +#include "utils/lwiplib.h" +#include "utils/swupdate.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Ethernet Boot Loader Demo (boot_demo_emac_flash)

+//! +//! An example to demonstrate the use of remote update signaling with the +//! flash-based Ethernet boot loader. This application configures the Ethernet +//! controller and acquires an IP address which is displayed on the screen +//! along with the board's MAC address. It then listens for a ``magic packet'' +//! telling it that a firmware upgrade request is being made and, when this +//! packet is received, transfers control into the boot loader to perform the +//! upgrade. +//! +//! This application is intended for use with flash-based ethernet boot +//! loader (boot_emac_flash). +//! +//! The link address for this application is set to 0x4000, the link address +//! has to be multiple of the flash erase block size(16KB=0x4000). +//! You may change this address to a 16KB boundary higher than the last +//! address occupied by the boot loader binary as long as you also rebuild the +//! boot loader itself after modifying its bl_config.h file to set +//! APP_START_ADDRESS to the same value. +//! +//! The boot_demo_flash application can be used along with this application to +//! easily demonstrate that the boot loader is actually updating the on-chip +//! flash. +//! +//***************************************************************************** + +//***************************************************************************** +// +// The number of SysTick ticks per second. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 + +//***************************************************************************** +// +// A global flag used to indicate if a remote firmware update request has been +// received. +// +//***************************************************************************** +static volatile bool g_bFirmwareUpdate = false; + +//***************************************************************************** +// +// Buffers used to hold the Ethernet MAC and IP addresses for the board. +// +//***************************************************************************** +#define SIZE_MAC_ADDR_BUFFER 32 +#define SIZE_IP_ADDR_BUFFER 32 +char g_pcMACAddr[SIZE_MAC_ADDR_BUFFER]; +char g_pcIPAddr[SIZE_IP_ADDR_BUFFER]; + +//***************************************************************************** +// +// Forward reference to various widget structures. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; + +//***************************************************************************** +// +// The canvas widget used to display the board's Ethernet IP address. +// +//***************************************************************************** +Canvas(g_sIPAddr, &g_sBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 10, 180, 300, 20, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), + ClrBlack, 0, ClrWhite, g_psFontCmss18b, g_pcIPAddr, 0, 0); + +//***************************************************************************** +// +// The canvas widget used to display the board's Ethernet MAC address. This +// is required if using the Ethernet boot loader. +// +//***************************************************************************** +Canvas(g_sMACAddr, &g_sBackground, &g_sIPAddr, 0, + &g_sKentec320x240x16_SSD2119, 10, 200, 300, 20, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), + ClrBlack, 0, ClrWhite, g_psFontCmss18b, g_pcMACAddr, 0, 0); + +//***************************************************************************** +// +// The canvas widget used to display the current status. +// +//***************************************************************************** +Canvas(g_sStatus, &g_sBackground, &g_sMACAddr, 0, + &g_sKentec320x240x16_SSD2119, 60, 110, 200, 40, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), + ClrBlack, 0, ClrWhite, g_psFontCmss22b, "Waiting for signal.", 0, 0); + +//***************************************************************************** +// +// The canvas widget acting as the background to the display. +// +//***************************************************************************** +Canvas(g_sBackground, WIDGET_ROOT, 0, &g_sStatus, + &g_sKentec320x240x16_SSD2119, 10, 23, 300, (240 - 33), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The system clock frequency. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. We use this to provide the +// required timer call to the lwIP stack. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Call the lwIP timer. + // + lwIPTimer(1000 / TICKS_PER_SECOND); +} + +//***************************************************************************** +// +// This function is called by the software update module whenever a remote +// host requests to update the firmware on this board. We set a flag that +// will cause the main loop to exit and transfer control to the bootloader. +// +// IMPORTANT: +// Note that this callback is made in interrupt context and, since it is not +// permitted to transfer control to the boot loader from within an interrupt, +// we can't just call SoftwareUpdateBegin() here. +// +//***************************************************************************** +void SoftwareUpdateRequestCallback(void) +{ + g_bFirmwareUpdate = true; +} + +//***************************************************************************** +// +// Perform the initialization steps required to start up the Ethernet controller +// and lwIP stack. +// +//***************************************************************************** +void +SetupForEthernet(void) +{ + uint32_t ui32User0, ui32User1; + uint8_t pui8MACAddr[6]; + + // + // Configure SysTick for a 100Hz interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / TICKS_PER_SECOND); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Get the MAC address from the UART0 and UART1 registers in NV ram. + // + ROM_FlashUserGet(&ui32User0, &ui32User1); + + // + // Convert the 24/24 split MAC address from NV ram into a MAC address + // array. + // + pui8MACAddr[0] = ui32User0 & 0xff; + pui8MACAddr[1] = (ui32User0 >> 8) & 0xff; + pui8MACAddr[2] = (ui32User0 >> 16) & 0xff; + pui8MACAddr[3] = ui32User1 & 0xff; + pui8MACAddr[4] = (ui32User1 >> 8) & 0xff; + pui8MACAddr[5] = (ui32User1 >> 16) & 0xff; + + // + // Format this address into the string used by the relevant widget. + // + usnprintf(g_pcMACAddr, SIZE_MAC_ADDR_BUFFER, + "MAC: %02X-%02X-%02X-%02X-%02X-%02X", + pui8MACAddr[0], pui8MACAddr[1], pui8MACAddr[2], pui8MACAddr[3], + pui8MACAddr[4], pui8MACAddr[5]); + + // + // Remember that we don't have an IP address yet. + // + usnprintf(g_pcIPAddr, SIZE_IP_ADDR_BUFFER, "IP: Not assigned"); + + // + // Initialize the lwIP TCP/IP stack. + // + lwIPInit(g_ui32SysClock, pui8MACAddr, 0, 0, 0, IPADDR_USE_DHCP); + + // + // Start the remote software update module. + // + SoftwareUpdateInit(SoftwareUpdateRequestCallback); +} + +//***************************************************************************** +// +// Initialize UART0 and set the appropriate communication parameters. +// +//***************************************************************************** +void +SetupForUART(void) +{ + // + // Enable UART0 peripheral. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure the UART for 115200, n, 8, 1 + // + ROM_UARTConfigSetExpClk(UART0_BASE, g_ui32SysClock, 115200, + (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | + UART_CONFIG_WLEN_8)); + + // + // Enable the UART operation. + // + ROM_UARTEnable(UART0_BASE); +} + +//***************************************************************************** +// +// Enable the USB controller +// +//***************************************************************************** +void +SetupForUSB(void) +{ + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + ROM_USBClockEnable(USB0_BASE, 8, USB_CLOCK_INTERNAL); +} + +//***************************************************************************** +// +// Demonstrate the use of the boot loader. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + uint32_t ui32IPAddr; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "boot-demo-emac-flash"); + + // + // Initialize the peripherals that each of the boot loader flavors + // supports. Although this example is only intended for use with the + // Ethernet boot loader, we initialize the other two peripherals too just + // in case it is used with the USB or serial boot loaders. + // + SetupForUART(); + SetupForEthernet(); + SetupForUSB(); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + + // + // Paint the widget tree to make sure they all appear on the display. + // + WidgetPaint(WIDGET_ROOT); + + // + // We don't have an IP address yet so clear the variable to tell us to + // check until we are assigned one. + // + ui32IPAddr = 0; + + // + // Loop forever, processing widget messages. + // + while(!g_bFirmwareUpdate) + { + // + // Do we have an IP address yet? If not, check to see if we've been + // assigned one since the last time we checked. + // + if(ui32IPAddr == 0 || ui32IPAddr == 0xFFFFFFFF) + { + // + // What is our current IP address? + // + ui32IPAddr = lwIPLocalIPAddrGet(); + + // + // If it's non zero, update the display. + // + if(ui32IPAddr!= 0 && ui32IPAddr != 0xFFFFFFFF) + { + usprintf(g_pcIPAddr, "IP: %d.%d.%d.%d", + ui32IPAddr & 0xff, (ui32IPAddr >> 8) & 0xff, + (ui32IPAddr >> 16) & 0xff, ui32IPAddr >> 24); + WidgetPaint((tWidget *)&g_sIPAddr); + } + } + + // + // Process any messages from or for the widgets. + // + WidgetMessageQueueProcess(); + } + + // + // If we drop out, the user has sent "Magic Package" via LMFlash + // so we tidy up and transfer control to the boot loader. + // + + // + // Tell the user that we got their instruction. + // + CanvasTextSet(&g_sStatus, "Updating..."); + WidgetPaint((tWidget *)&g_sStatus); + + // + // Process all remaining messages on the queue (including the paint message + // we just posted). + // + WidgetMessageQueueProcess(); + + // + // Transfer control to the bootloader. + // + SoftwareUpdateBegin(g_ui32SysClock); + + // + // The previous function never returns but we need to stick in a return + // code here to keep the compiler from generating a warning. + // + return(0); +} diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewd b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewp b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewp new file mode 100644 index 0000000..be1eca8 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ewp @@ -0,0 +1,821 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\boot_demo_emac_flash.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\utils\lwiplib.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\swupdate.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.icf b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.icf new file mode 100644 index 0000000..bf8283d --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// boot_demo_emac_flash.icf - Linker configuration file for boot_demo_emac_flash. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00004000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ld b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ld new file mode 100644 index 0000000..bd289db --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * boot_demo_emac_flash.ld - Linker configuration file for boot_demo_emac_flash. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 0x000fc000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.sct b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.sct new file mode 100644 index 0000000..a456015 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; boot_demo_emac_flash.sct - Linker configuration file for boot_demo_emac_flash. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00004000 0x000fc000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00004000 0x000fc000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvopt b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvopt new file mode 100644 index 0000000..3696669 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + boot_demo_emac_flash + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\boot_demo_emac_flash.c + boot_demo_emac_flash.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\lwiplib.c + lwiplib.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\swupdate.c + swupdate.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvproj b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvproj new file mode 100644 index 0000000..43ad288 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + boot_demo_emac_flash + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + boot_demo_emac_flash + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\boot_demo_emac_flash.bin .\rvmdk\boot_demo_emac_flash.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + .;..;..\..\..\..;..\..\..\..\third_party\lwip-1.4.1\apps;..\..\..\..\third_party\bget;..\..\..\..\third_party\lwip-1.4.1\ports\tiva-tm4c129\include;..\..\..\..\third_party\lwip-1.4.1\src\include;..\..\..\..\third_party\lwip-1.4.1\src\include\ipv4;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + boot_demo_emac_flash.sct + + + --entry Reset_Handler + + + + + + + + Source + + + boot_demo_emac_flash.c + 1 + .\boot_demo_emac_flash.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + lwiplib.c + 1 + ..\..\..\..\utils\lwiplib.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + swupdate.c + 1 + ..\..\..\..\utils\swupdate.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash_ccs.cmd b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash_ccs.cmd new file mode 100644 index 0000000..968d6ab --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * boot_demo_emac_flash_ccs.cmd - CCS linker configuration file for boot_demo_emac_flash. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00004000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x000fc000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsimportspec b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsimportspec new file mode 100644 index 0000000..7661f00 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsimportspec @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsproject b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.cproject b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.cproject new file mode 100644 index 0000000..555c5e5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.cproject @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.project b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.project new file mode 100644 index 0000000..ae010b5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.project @@ -0,0 +1,80 @@ + + + boot_demo_emac_flash + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + boot_demo_emac_flash.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash.c + + + boot_demo_emac_flash_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_emac_flash/boot_demo_emac_flash_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/lwiplib.c + 1 + SW_ROOT/utils/lwiplib.c + + + utils/swupdate.c + 1 + SW_ROOT/utils/swupdate.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.bin b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.bin new file mode 100644 index 0000000..4b1f732 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.out b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.out new file mode 100644 index 0000000..53b3451 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/Debug/boot_demo_emac_flash.out differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/macros.ini_initial b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/target_config.ccxml b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.bin b/boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.bin new file mode 100644 index 0000000..8d7d2a9 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.out b/boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.out new file mode 100644 index 0000000..8b675b8 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/ewarm/Exe/boot_demo_emac_flash.out differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.axf b/boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.axf new file mode 100644 index 0000000..098e92c Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.bin b/boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.bin new file mode 100644 index 0000000..f799b7f Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/gcc/boot_demo_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/lwipopts.h b/boards/dk-tm4c129x/boot_demo_emac_flash/lwipopts.h new file mode 100644 index 0000000..932dfb5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/lwipopts.h @@ -0,0 +1,433 @@ +//***************************************************************************** +// +// lwipopts.h - Configuration file for lwIP +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +// +// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h +// header file. +// +// For additional details, refer to the original "opt.h" file, and lwIP +// documentation. +// +//***************************************************************************** + +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +//***************************************************************************** +// +// ---------- Stellaris / lwIP Port Options ---------- +// +//***************************************************************************** +//#define HOST_TMR_INTERVAL 0 +//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000) +//#define INCLUDE_HTTPD_SSI +//#define INCLUDE_HTTPD_CGI +//#define DYNAMIC_HTTP_HEADERS +//#define INCLUDE_HTTPD_DEBUG + +//***************************************************************************** +// +// ---------- Platform specific locking ---------- +// +//***************************************************************************** +#define SYS_LIGHTWEIGHT_PROT 1 // default is 0 +#define NO_SYS 1 // default is 0 +//#define MEMCPY(dst,src,len) memcpy(dst,src,len) +//#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +//***************************************************************************** +// +// ---------- Memory options ---------- +// +//***************************************************************************** +//#define MEM_LIBC_MALLOC 0 +#define MEM_ALIGNMENT 4 // default is 1 +#define MEM_SIZE (24 * 1024) // default is 1600 +//#define MEMP_OVERFLOW_CHECK 0 +//#define MEMP_SANITY_CHECK 0 +//#define MEM_USE_POOLS 0 +//#define MEMP_USE_CUSTOM_POOLS 0 + +//***************************************************************************** +// +// ---------- Internal Memory Pool Sizes ---------- +// +//***************************************************************************** +#define MEMP_NUM_PBUF 20 // Was 16 +//#define MEMP_NUM_RAW_PCB 4 +//#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 8 // Was 5 +//#define MEMP_NUM_TCP_PCB_LISTEN 8 +#define MEMP_NUM_TCP_SEG 16 +//#define MEMP_NUM_REASSDATA 5 +//#define MEMP_NUM_ARP_QUEUE 30 +//#define MEMP_NUM_IGMP_GROUP 8 +//#define MEMP_NUM_SYS_TIMEOUT 3 +//#define MEMP_NUM_NETBUF 2 +//#define MEMP_NUM_NETCONN 4 +//#define MEMP_NUM_TCPIP_MSG_API 8 +//#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 20 // Was 16 + +//***************************************************************************** +// +// ---------- ARP options ---------- +// +//***************************************************************************** +//#define LWIP_ARP 1 +//#define ARP_TABLE_SIZE 10 +//#define ARP_QUEUEING 1 +//#define ETHARP_TRUST_IP_MAC 1 + +//***************************************************************************** +// +// ---------- IP options ---------- +// +//***************************************************************************** +//#define IP_FORWARD 0 +//#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 0 // default is 1 +#define IP_FRAG 0 // default is 1 +//#define IP_REASS_MAXAGE 3 +//#define IP_REASS_MAX_PBUFS 10 +//#define IP_FRAG_USES_STATIC_BUF 1 +//#define IP_FRAG_MAX_MTU 1500 +//#define IP_DEFAULT_TTL 255 + +//***************************************************************************** +// +// ---------- ICMP options ---------- +// +//***************************************************************************** +//#define LWIP_ICMP 1 +//#define ICMP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- RAW options ---------- +// +//***************************************************************************** +//#define LWIP_RAW 1 +//#define RAW_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- DHCP options ---------- +// +//***************************************************************************** +#define LWIP_DHCP 1 // default is 0 +//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) + +//***************************************************************************** +// +// ---------- UPNP options ---------- +// +//***************************************************************************** +//#define LWIP_UPNP 0 + +//***************************************************************************** +// +// ---------- PTPD options ---------- +// +//***************************************************************************** +//#define LWIP_PTPD 0 + +//***************************************************************************** +// +// ---------- AUTOIP options ---------- +// +//***************************************************************************** +#define LWIP_AUTOIP 1 // default is 0 +#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP)) + // default is 0 +#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9 + +//***************************************************************************** +// +// ---------- SNMP options ---------- +// +//***************************************************************************** +//#define LWIP_SNMP 0 +//#define SNMP_CONCURRENT_REQUESTS 1 +//#define SNMP_TRAP_DESTINATIONS 1 +//#define SNMP_PRIVATE_MIB 0 +//#define SNMP_SAFE_REQUESTS 1 + +//***************************************************************************** +// +// ---------- IGMP options ---------- +// +//***************************************************************************** +//#define LWIP_IGMP 0 + +//***************************************************************************** +// +// ---------- DNS options ----------- +// +//***************************************************************************** +//#define LWIP_DNS 0 +//#define DNS_TABLE_SIZE 4 +//#define DNS_MAX_NAME_LENGTH 256 +//#define DNS_MAX_SERVERS 2 +//#define DNS_DOES_NAME_CHECK 1 +//#define DNS_USES_STATIC_BUF 1 +//#define DNS_MSG_SIZE 512 + +//***************************************************************************** +// +// ---------- UDP options ---------- +// +//***************************************************************************** +//#define LWIP_UDP 1 +//#define LWIP_UDPLITE 0 +//#define UDP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- TCP options ---------- +// +//***************************************************************************** +//#define LWIP_TCP 1 +//#define TCP_TTL (IP_DEFAULT_TTL) +#define TCP_WND 1024 // default is 2048, was 4096 +//#define TCP_MAXRTX 12 +//#define TCP_SYNMAXRTX 6 +//#define TCP_QUEUE_OOSEQ 1 +#define TCP_MSS 512 // default is 128, was 1500 +//#define TCP_CALCULATE_EFF_SEND_MSS 1 +#define TCP_SND_BUF (4 * TCP_MSS) + // default is 256 +//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) +//#define TCP_SNDLOWAT (TCP_SND_BUF/2) +//#define TCP_LISTEN_BACKLOG 0 +//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff + +//***************************************************************************** +// +// ---------- API options ---------- +// +//***************************************************************************** +//#define LWIP_EVENT_API 0 +//#define LWIP_CALLBACK_API 1 + +//***************************************************************************** +// +// ---------- Pbuf options ---------- +// +//***************************************************************************** +#define PBUF_LINK_HLEN 16 // default is 14 +#define PBUF_POOL_BUFSIZE 256 + // default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#define ETH_PAD_SIZE 0 // default is 0 + +//***************************************************************************** +// +// ---------- Network Interfaces options ---------- +// +//***************************************************************************** +//#define LWIP_NETIF_HOSTNAME 0 +//#define LWIP_NETIF_API 0 +//#define LWIP_NETIF_STATUS_CALLBACK 0 +//#define LWIP_NETIF_LINK_CALLBACK 0 +//#define LWIP_NETIF_HWADDRHINT 0 + +//***************************************************************************** +// +// ---------- LOOPIF options ---------- +// +//***************************************************************************** +//#define LWIP_HAVE_LOOPIF 0 +//#define LWIP_LOOPIF_MULTITHREADING 1 + +//***************************************************************************** +// +// ---------- Thread options ---------- +// +//***************************************************************************** +//#define TCPIP_THREAD_NAME "tcpip_thread" +//#define TCPIP_THREAD_STACKSIZE 0 +//#define TCPIP_THREAD_PRIO 1 +//#define TCPIP_MBOX_SIZE 0 +//#define SLIPIF_THREAD_NAME "slipif_loop" +//#define SLIPIF_THREAD_STACKSIZE 0 +//#define SLIPIF_THREAD_PRIO 1 +//#define PPP_THREAD_NAME "pppMain" +//#define PPP_THREAD_STACKSIZE 0 +//#define PPP_THREAD_PRIO 1 +//#define DEFAULT_THREAD_NAME "lwIP" +//#define DEFAULT_THREAD_STACKSIZE 0 +//#define DEFAULT_THREAD_PRIO 1 +//#define DEFAULT_RAW_RECVMBOX_SIZE 0 +//#define DEFAULT_UDP_RECVMBOX_SIZE 0 +//#define DEFAULT_TCP_RECVMBOX_SIZE 0 +//#define DEFAULT_ACCEPTMBOX_SIZE 0 + +//***************************************************************************** +// +// ---------- Sequential layer options ---------- +// +//***************************************************************************** +//#define LWIP_TCPIP_CORE_LOCKING 0 +#define LWIP_NETCONN 0 // default is 1 + +//***************************************************************************** +// +// ---------- Socket Options ---------- +// +//***************************************************************************** +#define LWIP_SOCKET 0 // default is 1 +//#define LWIP_COMPAT_SOCKETS 1 +//#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +//#define LWIP_TCP_KEEPALIVE 0 +//#define LWIP_SO_RCVTIMEO 0 +//#define LWIP_SO_RCVBUF 0 +//#define SO_REUSE 0 + +//***************************************************************************** +// +// ---------- Statistics options ---------- +// +//***************************************************************************** +//#define LWIP_STATS 1 +//#define LWIP_STATS_DISPLAY 0 +//#define LINK_STATS 1 +//#define ETHARP_STATS (LWIP_ARP) +//#define IP_STATS 1 +//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +//#define ICMP_STATS 1 +//#define IGMP_STATS (LWIP_IGMP) +//#define UDP_STATS (LWIP_UDP) +//#define TCP_STATS (LWIP_TCP) +//#define MEM_STATS 1 +//#define MEMP_STATS 1 +//#define SYS_STATS 1 + +//***************************************************************************** +// +// ---------- PPP options ---------- +// +//***************************************************************************** +//#define PPP_SUPPORT 0 +//#define PPPOE_SUPPORT 0 +//#define PPPOS_SUPPORT PPP_SUPPORT + +#if PPP_SUPPORT +//#define NUM_PPP 1 +//#define PAP_SUPPORT 0 +//#define CHAP_SUPPORT 0 +//#define MSCHAP_SUPPORT 0 +//#define CBCP_SUPPORT 0 +//#define CCP_SUPPORT 0 +//#define VJ_SUPPORT 0 +//#define MD5_SUPPORT 0 +//#define FSM_DEFTIMEOUT 6 +//#define FSM_DEFMAXTERMREQS 2 +//#define FSM_DEFMAXCONFREQS 10 +//#define FSM_DEFMAXNAKLOOPS 5 +//#define UPAP_DEFTIMEOUT 6 +//#define UPAP_DEFREQTIME 30 +//#define CHAP_DEFTIMEOUT 6 +//#define CHAP_DEFTRANSMITS 10 +//#define LCP_ECHOINTERVAL 0 +//#define LCP_MAXECHOFAILS 3 +//#define PPP_MAXIDLEFLAG 100 + +//#define PPP_MAXMTU 1500 +//#define PPP_DEFMRU 296 +#endif + +//***************************************************************************** +// +// ---------- checksum options ---------- +// +//***************************************************************************** +//#define CHECKSUM_GEN_IP 1 +//#define CHECKSUM_GEN_UDP 1 +//#define CHECKSUM_GEN_TCP 1 +//#define CHECKSUM_CHECK_IP 1 +//#define CHECKSUM_CHECK_UDP 1 +//#define CHECKSUM_CHECK_TCP 1 + +//***************************************************************************** +// +// ---------- Debugging options ---------- +// +//***************************************************************************** +#if 0 +#define U8_F "c" +#define S8_F "c" +#define X8_F "x" +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" +extern void UARTprintf(const char *pcString, ...); +#define LWIP_DEBUG +#endif + +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE + +//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH) + +//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF +//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF +//#define PBUF_DEBUG LWIP_DBG_OFF +//#define API_LIB_DEBUG LWIP_DBG_OFF +//#define API_MSG_DEBUG LWIP_DBG_OFF +//#define SOCKETS_DEBUG LWIP_DBG_OFF +//#define ICMP_DEBUG LWIP_DBG_OFF +//#define IGMP_DEBUG LWIP_DBG_OFF +//#define INET_DEBUG LWIP_DBG_OFF +//#define IP_DEBUG LWIP_DBG_ON // default is OFF +//#define IP_REASS_DEBUG LWIP_DBG_OFF +//#define RAW_DEBUG LWIP_DBG_OFF +//#define MEM_DEBUG LWIP_DBG_OFF +//#define MEMP_DEBUG LWIP_DBG_OFF +//#define SYS_DEBUG LWIP_DBG_OFF +//#define TCP_DEBUG LWIP_DBG_OFF +#define TCP_INPUT_DEBUG LWIP_DBG_ON +//#define TCP_FR_DEBUG LWIP_DBG_OFF +//#define TCP_RTO_DEBUG LWIP_DBG_OFF +//#define TCP_CWND_DEBUG LWIP_DBG_OFF +//#define TCP_WND_DEBUG LWIP_DBG_OFF +//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +//#define TCP_RST_DEBUG LWIP_DBG_OFF +//#define TCP_QLEN_DEBUG LWIP_DBG_OFF +//#define UDP_DEBUG LWIP_DBG_ON // default is OFF +//#define TCPIP_DEBUG LWIP_DBG_OFF +//#define PPP_DEBUG LWIP_DBG_OFF +//#define SLIP_DEBUG LWIP_DBG_OFF +//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF +//#define AUTOIP_DEBUG LWIP_DBG_OFF +//#define SNMP_MSG_DEBUG LWIP_DBG_OFF +//#define SNMP_MIB_DEBUG LWIP_DBG_OFF +//#define DNS_DEBUG LWIP_DBG_OFF + +#endif /* __LWIPOPTS_H__ */ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/readme.txt b/boards/dk-tm4c129x/boot_demo_emac_flash/readme.txt new file mode 100644 index 0000000..395d2ce --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/readme.txt @@ -0,0 +1,44 @@ +Ethernet Boot Loader Demo + +An example to demonstrate the use of remote update signaling with the +flash-based Ethernet boot loader. This application configures the Ethernet +controller and acquires an IP address which is displayed on the screen +along with the board's MAC address. It then listens for a ``magic packet'' +telling it that a firmware upgrade request is being made and, when this +packet is received, transfers control into the boot loader to perform the +upgrade. + +This application is intended for use with flash-based ethernet boot +loader (boot_emac_flash). + +The link address for this application is set to 0x4000, the link address +has to be multiple of the flash erase block size(16KB=0x4000). +You may change this address to a 16KB boundary higher than the last +address occupied by the boot loader binary as long as you also rebuild the +boot loader itself after modifying its bl_config.h file to set +APP_START_ADDRESS to the same value. + +The boot_demo_flash application can be used along with this application to +easily demonstrate that the boot loader is actually updating the on-chip +flash. + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.axf b/boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.axf new file mode 100644 index 0000000..c385c02 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.bin b/boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.bin new file mode 100644 index 0000000..add32c8 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_emac_flash/rvmdk/boot_demo_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ccs.c b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ccs.c new file mode 100644 index 0000000..d369798 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ewarm.c b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ewarm.c new file mode 100644 index 0000000..8f63895 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/startup_gcc.c b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_gcc.c new file mode 100644 index 0000000..74e18ae --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_emac_flash/startup_rvmdk.S b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_rvmdk.S new file mode 100644 index 0000000..198eaad --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_emac_flash/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN lwIPEthernetIntHandler + EXTERN SysTickHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD lwIPEthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/boot_demo_flash/Makefile b/boards/dk-tm4c129x/boot_demo_flash/Makefile new file mode 100644 index 0000000..44bd941 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/Makefile @@ -0,0 +1,100 @@ +#****************************************************************************** +# +# Makefile - Rules for building the boot_demo_flash example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/lwip-1.4.1/apps +IPATH+=../../../../third_party/bget +IPATH+=../../../../third_party/lwip-1.4.1/ports/tiva-tm4c129/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include/ipv4 +IPATH+=../../../../third_party + +# +# The default rule, which causes the boot_demo_flash example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/boot_demo_flash.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the boot_demo_flash example. +# +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/boot_demo_flash.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/frame.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/lwiplib.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/pinout.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/touch.o +${COMPILER}/boot_demo_flash.axf: ${COMPILER}/ustdlib.o +${COMPILER}/boot_demo_flash.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/boot_demo_flash.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/boot_demo_flash.axf: boot_demo_flash.ld +SCATTERgcc_boot_demo_flash=boot_demo_flash.ld +ENTRY_boot_demo_flash=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.c b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.c new file mode 100644 index 0000000..071bd92 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.c @@ -0,0 +1,512 @@ +//***************************************************************************** +// +// boot_demo_flash.c - Flash-base boot loader application example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "inc/hw_flash.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/flash.h" +#include "driverlib/uart.h" +#include "driverlib/uart.h" +#include "driverlib/gpio.h" +#include "driverlib/usb.h" +#include "driverlib/emac.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "utils/ustdlib.h" +#include "utils/lwiplib.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/touch.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Flash-based Boot Loader Demo (boot_demo_flash)

+//! +//! An example to demonstrate the use of a flash-based boot loader. At +//! startup, the application will configure the UART, USB and Ethernet +//! peripherals, and then branch to the boot loader to await the start of an +//! update. +//! +//! This application is intended for use with flash-based ethernet boot +//! loader (boot_emac_flash). Although it isn't neccessary to configure USB +//! and UART interface in this example since only ethernet flash-based boot +//! loader is provided, the code is there for completeness so that USB or +//! UART flash-based boot loader can be implemented if needed. +//! The link address for this application is set to 0x4000, the link address +//! has to be multiple of the flash erase block size(16KB=0x4000). +//! You may change this address to a 16KB boundary higher than the last +//! address occupied by the boot loader binary as long as you also rebuild the +//! boot loader itself after modifying its bl_config.h file to set +//! APP_START_ADDRESS to the same value. +//! +//! The boot_demo_emac_flash application can be used along with this +//! application to easily demonstrate that the boot loader is actually updating +//! the on-chip flash. +//! +// +//***************************************************************************** + + +//***************************************************************************** +// +// The system clock frequency. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The current IP address. +// +//***************************************************************************** +uint32_t g_ui32IPAddress; + +//***************************************************************************** +// +// The number of SysTick ticks per second. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 + +//***************************************************************************** +// +// A global we use to keep track of when the user presses the "Update now" +// button. +// +//***************************************************************************** +volatile bool g_bFirmwareUpdate = false; + +//***************************************************************************** +// +// Buffers used to hold the Ethernet MAC and IP addresses for the board. +// +//***************************************************************************** +#define SIZE_MAC_ADDR_BUFFER 32 +#define SIZE_IP_ADDR_BUFFER 32 +char g_pcMACAddr[SIZE_MAC_ADDR_BUFFER]; +char g_pcIPAddr[SIZE_IP_ADDR_BUFFER]; + +//***************************************************************************** +// +// Forward reference to various widget structures. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; + +//***************************************************************************** +// +// Forward reference to the button press handler. +// +//***************************************************************************** +void OnButtonPress(tWidget *psWidget); + +//***************************************************************************** +// +// The canvas widget used to display the board's Ethernet IP address. +// +//***************************************************************************** +Canvas(g_sIPAddr, &g_sBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 10, 180, 300, 20, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), + ClrBlack, 0, ClrWhite, g_psFontCmss18b, g_pcIPAddr, 0, 0); + +//***************************************************************************** +// +// The canvas widget used to display the board's Ethernet MAC address. This +// is required if using the Ethernet boot loader. +// +//***************************************************************************** +Canvas(g_sMACAddr, &g_sBackground, &g_sIPAddr, 0, + &g_sKentec320x240x16_SSD2119, 10, 200, 300, 20, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), + ClrBlack, 0, ClrWhite, g_psFontCmss18b, g_pcMACAddr, 0, 0); + +//***************************************************************************** +// +// The button used to initiate a boot loader software update. +// +//***************************************************************************** +RectangularButton(g_sPushBtn, &g_sBackground, &g_sMACAddr, 0, + &g_sKentec320x240x16_SSD2119, 60, 110, 200, 40, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY), + ClrDarkBlue, ClrBlue, ClrWhite, ClrWhite, + g_psFontCmss22b, "Update Now", 0, 0, 0, 0, OnButtonPress); + +//***************************************************************************** +// +// The canvas widget acting as the background to the display. +// +//***************************************************************************** +Canvas(g_sBackground, WIDGET_ROOT, 0, &g_sPushBtn, + &g_sKentec320x240x16_SSD2119, 10, 25, 300, (240 - 35), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. We use this to provide the +// required timer call to the lwIP stack. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Call the lwIP timer. + // + lwIPTimer(1000 / TICKS_PER_SECOND); +} + +//***************************************************************************** +// +// Passes control to the bootloader and initiates a remote software update. +// +// This function passes control to the bootloader and initiates an update of +// the main application firmware image via UART0, Ethernet or USB depending +// upon the specific boot loader binary in use. +// +// \return Never returns. +// +//***************************************************************************** +void +JumpToBootLoader(void) +{ + // + // We must make sure we turn off SysTick and its interrupt before entering + // the boot loader! + // + ROM_SysTickIntDisable(); + ROM_SysTickDisable(); + + // + // Disable all processor interrupts. Instead of disabling them + // one at a time, a direct write to NVIC is done to disable all + // peripheral interrupts. + // + HWREG(NVIC_DIS0) = 0xffffffff; + HWREG(NVIC_DIS1) = 0xffffffff; + HWREG(NVIC_DIS2) = 0xffffffff; + HWREG(NVIC_DIS3) = 0xffffffff; + HWREG(NVIC_DIS4) = 0xffffffff; + + // + // Return control to the boot loader. This is a call to the SVC + // handler in the flash based boot loader. + // + (*((void (*)(void))(*(unsigned long *)0x2c)))(); +} + +//***************************************************************************** +// +// Perform the initialization steps required to start up the Ethernet controller +// and lwIP stack. +// +//***************************************************************************** +void +SetupForEthernet(void) +{ + uint32_t ui32User0, ui32User1; + uint8_t pui8MACAddr[6]; + + // + // Configure SysTick for a 100Hz interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / TICKS_PER_SECOND); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Get the MAC address from the UART0 and UART1 registers in NV ram. + // + ROM_FlashUserGet(&ui32User0, &ui32User1); + + // + // Convert the 24/24 split MAC address from NV ram into a MAC address + // array. + // + pui8MACAddr[0] = ui32User0 & 0xff; + pui8MACAddr[1] = (ui32User0 >> 8) & 0xff; + pui8MACAddr[2] = (ui32User0 >> 16) & 0xff; + pui8MACAddr[3] = ui32User1 & 0xff; + pui8MACAddr[4] = (ui32User1 >> 8) & 0xff; + pui8MACAddr[5] = (ui32User1 >> 16) & 0xff; + + // + // Format this address into the string used by the relevant widget. + // + usnprintf(g_pcMACAddr, SIZE_MAC_ADDR_BUFFER, + "MAC: %02X-%02X-%02X-%02X-%02X-%02X", + pui8MACAddr[0], pui8MACAddr[1], pui8MACAddr[2], pui8MACAddr[3], + pui8MACAddr[4], pui8MACAddr[5]); + + // + // Remember that we don't have an IP address yet. + // + usnprintf(g_pcIPAddr, SIZE_IP_ADDR_BUFFER, "IP: Not assigned"); + + // + // Initialize the lwIP TCP/IP stack. + // + lwIPInit(g_ui32SysClock, pui8MACAddr, 0, 0, 0, IPADDR_USE_DHCP); +} + +//***************************************************************************** +// +// Initialize UART0 and set the appropriate communication parameters. +// +//***************************************************************************** +void +SetupForUART(void) +{ + // + // Enable UART0 peripheral. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure the UART for 115200, n, 8, 1 + // + ROM_UARTConfigSetExpClk(UART0_BASE, g_ui32SysClock, 115200, + (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | + UART_CONFIG_WLEN_8)); + + // + // Enable the UART operation. + // + ROM_UARTEnable(UART0_BASE); +} + +//***************************************************************************** +// +// Enable the USB controller +// +//***************************************************************************** +void +SetupForUSB(void) +{ + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + ROM_USBClockEnable(USB0_BASE, 8, USB_CLOCK_INTERNAL); +} + +//***************************************************************************** +// +// This function is called by the graphics library widget manager whenever the +// "Update Now" button is pressed. It sets a flag that the main loop checks +// and, when set, causes control to transfer to the boot loader. +// +//***************************************************************************** +void +OnButtonPress(tWidget *psWidget) +{ + g_bFirmwareUpdate = true; +} + +//***************************************************************************** +// +// A simple application demonstrating use of the boot loader, +// +//***************************************************************************** +int +main(void) +{ + unsigned long ui32NewIPAddr; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "boot-demo-flash"); + + // + // Initialize the peripherals that each of the boot loader flavors + // supports. Since this example is intended for use with any of the + // boot loaders and we don't know which is actually in use, we cover all + // bases and initialize for serial, Ethernet and USB use here. + // + SetupForUART(); + SetupForEthernet(); + SetupForUSB(); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(g_ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + + // + // Paint the widget tree to make sure they all appear on the display. + // + WidgetPaint(WIDGET_ROOT); + + // + // We don't have an IP address yet so clear the variable to tell us to + // check until we are assigned one. + // + g_ui32IPAddress = 0; + + // + // Loop forever, processing widget messages. + // + while(!g_bFirmwareUpdate) + { + // + // Do we have an IP address yet? If not, check to see if we've been + // assigned one since the last time we checked. + // + if(g_ui32IPAddress == 0 || g_ui32IPAddress == 0xffffffff) + { + // + // What is our current IP address? + // + ui32NewIPAddr = lwIPLocalIPAddrGet(); + + // + // See if the IP address has changed. + // + if(ui32NewIPAddr != g_ui32IPAddress) + { + // + // If it's non zero, update the display. + // + if(ui32NewIPAddr == 0xffffffff) + { + usnprintf(g_pcIPAddr, SIZE_IP_ADDR_BUFFER, + "IP: waiting for link"); + } + else if(ui32NewIPAddr == 0) + { + usnprintf(g_pcIPAddr, SIZE_IP_ADDR_BUFFER, + "IP: waiting for IP address"); + } + else + { + usprintf(g_pcIPAddr, "IP: %d.%d.%d.%d", + ui32NewIPAddr & 0xff, + (ui32NewIPAddr >> 8) & 0xff, + (ui32NewIPAddr >> 16) & 0xff, + ui32NewIPAddr >> 24); + } + WidgetPaint((tWidget *)&g_sIPAddr); + + // + // Save the new IP address. + // + g_ui32IPAddress = ui32NewIPAddr; + } + } + + // + // Process any messages from or for the widgets. + // + WidgetMessageQueueProcess(); + } + + // + // If we drop out, the user has pressed the "Update Now" button so we + // tidy up and transfer control to the boot loader. + // + + // + // Tell the user that we got their instruction. + // + PushButtonTextSet(&g_sPushBtn, "Wait for Update..."); + WidgetPaint((tWidget *)&g_sPushBtn); + + // + // Process all remaining messages on the queue (including the paint message + // we just posted). + // + WidgetMessageQueueProcess(); + + // + // Transfer control to the boot loader. + // + JumpToBootLoader(); + + // + // The previous function never returns but we need to stick in a return + // code here to keep the compiler from generating a warning. + // + return(0); +} diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewd b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewp b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewp new file mode 100644 index 0000000..ff10bdb --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ewp @@ -0,0 +1,821 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\boot_demo_flash.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\utils\lwiplib.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.icf b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.icf new file mode 100644 index 0000000..fa872e2 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// boot_demo_flash.icf - Linker configuration file for boot_demo_flash. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00004000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ld b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ld new file mode 100644 index 0000000..7c06009 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * boot_demo_flash.ld - Linker configuration file for boot_demo_flash. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 0x000fc000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.sct b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.sct new file mode 100644 index 0000000..70a3d1a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; boot_demo_flash.sct - Linker configuration file for boot_demo_flash. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00004000 0x000fc000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00004000 0x000fc000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvopt b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvopt new file mode 100644 index 0000000..3c080f8 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + boot_demo_flash + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\boot_demo_flash.c + boot_demo_flash.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\lwiplib.c + lwiplib.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvproj b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvproj new file mode 100644 index 0000000..9da41c2 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + boot_demo_flash + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + boot_demo_flash + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\boot_demo_flash.bin .\rvmdk\boot_demo_flash.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + .;..;..\..\..\..;..\..\..\..\third_party\lwip-1.4.1\apps;..\..\..\..\third_party\bget;..\..\..\..\third_party\lwip-1.4.1\ports\tiva-tm4c129\include;..\..\..\..\third_party\lwip-1.4.1\src\include;..\..\..\..\third_party\lwip-1.4.1\src\include\ipv4;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + boot_demo_flash.sct + + + --entry Reset_Handler + + + + + + + + Source + + + boot_demo_flash.c + 1 + .\boot_demo_flash.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + lwiplib.c + 1 + ..\..\..\..\utils\lwiplib.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash_ccs.cmd b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash_ccs.cmd new file mode 100644 index 0000000..f7126a2 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * boot_demo_flash_ccs.cmd - CCS linker configuration file for boot_demo_flash. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00004000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x000fc000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsimportspec b/boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsimportspec new file mode 100644 index 0000000..a735210 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsimportspec @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsproject b/boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/.cproject b/boards/dk-tm4c129x/boot_demo_flash/ccs/.cproject new file mode 100644 index 0000000..8994b43 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/.cproject @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/.project b/boards/dk-tm4c129x/boot_demo_flash/ccs/.project new file mode 100644 index 0000000..ed043d5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/.project @@ -0,0 +1,80 @@ + + + boot_demo_flash + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + boot_demo_flash.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash.c + + + boot_demo_flash_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_flash/boot_demo_flash_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_flash/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/lwiplib.c + 1 + SW_ROOT/utils/lwiplib.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/boot_demo_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.bin b/boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.bin new file mode 100644 index 0000000..1676872 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.out b/boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.out new file mode 100644 index 0000000..1e52aeb Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/ccs/Debug/boot_demo_flash.out differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/macros.ini_initial b/boards/dk-tm4c129x/boot_demo_flash/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/boot_demo_flash/ccs/target_config.ccxml b/boards/dk-tm4c129x/boot_demo_flash/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.bin b/boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.bin new file mode 100644 index 0000000..60103be Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.out b/boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.out new file mode 100644 index 0000000..ec7dc38 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/ewarm/Exe/boot_demo_flash.out differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.axf b/boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.axf new file mode 100644 index 0000000..717bbab Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.bin b/boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.bin new file mode 100644 index 0000000..611ca4f Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/gcc/boot_demo_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/lwipopts.h b/boards/dk-tm4c129x/boot_demo_flash/lwipopts.h new file mode 100644 index 0000000..932dfb5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/lwipopts.h @@ -0,0 +1,433 @@ +//***************************************************************************** +// +// lwipopts.h - Configuration file for lwIP +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +// +// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h +// header file. +// +// For additional details, refer to the original "opt.h" file, and lwIP +// documentation. +// +//***************************************************************************** + +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +//***************************************************************************** +// +// ---------- Stellaris / lwIP Port Options ---------- +// +//***************************************************************************** +//#define HOST_TMR_INTERVAL 0 +//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000) +//#define INCLUDE_HTTPD_SSI +//#define INCLUDE_HTTPD_CGI +//#define DYNAMIC_HTTP_HEADERS +//#define INCLUDE_HTTPD_DEBUG + +//***************************************************************************** +// +// ---------- Platform specific locking ---------- +// +//***************************************************************************** +#define SYS_LIGHTWEIGHT_PROT 1 // default is 0 +#define NO_SYS 1 // default is 0 +//#define MEMCPY(dst,src,len) memcpy(dst,src,len) +//#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +//***************************************************************************** +// +// ---------- Memory options ---------- +// +//***************************************************************************** +//#define MEM_LIBC_MALLOC 0 +#define MEM_ALIGNMENT 4 // default is 1 +#define MEM_SIZE (24 * 1024) // default is 1600 +//#define MEMP_OVERFLOW_CHECK 0 +//#define MEMP_SANITY_CHECK 0 +//#define MEM_USE_POOLS 0 +//#define MEMP_USE_CUSTOM_POOLS 0 + +//***************************************************************************** +// +// ---------- Internal Memory Pool Sizes ---------- +// +//***************************************************************************** +#define MEMP_NUM_PBUF 20 // Was 16 +//#define MEMP_NUM_RAW_PCB 4 +//#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 8 // Was 5 +//#define MEMP_NUM_TCP_PCB_LISTEN 8 +#define MEMP_NUM_TCP_SEG 16 +//#define MEMP_NUM_REASSDATA 5 +//#define MEMP_NUM_ARP_QUEUE 30 +//#define MEMP_NUM_IGMP_GROUP 8 +//#define MEMP_NUM_SYS_TIMEOUT 3 +//#define MEMP_NUM_NETBUF 2 +//#define MEMP_NUM_NETCONN 4 +//#define MEMP_NUM_TCPIP_MSG_API 8 +//#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 20 // Was 16 + +//***************************************************************************** +// +// ---------- ARP options ---------- +// +//***************************************************************************** +//#define LWIP_ARP 1 +//#define ARP_TABLE_SIZE 10 +//#define ARP_QUEUEING 1 +//#define ETHARP_TRUST_IP_MAC 1 + +//***************************************************************************** +// +// ---------- IP options ---------- +// +//***************************************************************************** +//#define IP_FORWARD 0 +//#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 0 // default is 1 +#define IP_FRAG 0 // default is 1 +//#define IP_REASS_MAXAGE 3 +//#define IP_REASS_MAX_PBUFS 10 +//#define IP_FRAG_USES_STATIC_BUF 1 +//#define IP_FRAG_MAX_MTU 1500 +//#define IP_DEFAULT_TTL 255 + +//***************************************************************************** +// +// ---------- ICMP options ---------- +// +//***************************************************************************** +//#define LWIP_ICMP 1 +//#define ICMP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- RAW options ---------- +// +//***************************************************************************** +//#define LWIP_RAW 1 +//#define RAW_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- DHCP options ---------- +// +//***************************************************************************** +#define LWIP_DHCP 1 // default is 0 +//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) + +//***************************************************************************** +// +// ---------- UPNP options ---------- +// +//***************************************************************************** +//#define LWIP_UPNP 0 + +//***************************************************************************** +// +// ---------- PTPD options ---------- +// +//***************************************************************************** +//#define LWIP_PTPD 0 + +//***************************************************************************** +// +// ---------- AUTOIP options ---------- +// +//***************************************************************************** +#define LWIP_AUTOIP 1 // default is 0 +#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP)) + // default is 0 +#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9 + +//***************************************************************************** +// +// ---------- SNMP options ---------- +// +//***************************************************************************** +//#define LWIP_SNMP 0 +//#define SNMP_CONCURRENT_REQUESTS 1 +//#define SNMP_TRAP_DESTINATIONS 1 +//#define SNMP_PRIVATE_MIB 0 +//#define SNMP_SAFE_REQUESTS 1 + +//***************************************************************************** +// +// ---------- IGMP options ---------- +// +//***************************************************************************** +//#define LWIP_IGMP 0 + +//***************************************************************************** +// +// ---------- DNS options ----------- +// +//***************************************************************************** +//#define LWIP_DNS 0 +//#define DNS_TABLE_SIZE 4 +//#define DNS_MAX_NAME_LENGTH 256 +//#define DNS_MAX_SERVERS 2 +//#define DNS_DOES_NAME_CHECK 1 +//#define DNS_USES_STATIC_BUF 1 +//#define DNS_MSG_SIZE 512 + +//***************************************************************************** +// +// ---------- UDP options ---------- +// +//***************************************************************************** +//#define LWIP_UDP 1 +//#define LWIP_UDPLITE 0 +//#define UDP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- TCP options ---------- +// +//***************************************************************************** +//#define LWIP_TCP 1 +//#define TCP_TTL (IP_DEFAULT_TTL) +#define TCP_WND 1024 // default is 2048, was 4096 +//#define TCP_MAXRTX 12 +//#define TCP_SYNMAXRTX 6 +//#define TCP_QUEUE_OOSEQ 1 +#define TCP_MSS 512 // default is 128, was 1500 +//#define TCP_CALCULATE_EFF_SEND_MSS 1 +#define TCP_SND_BUF (4 * TCP_MSS) + // default is 256 +//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) +//#define TCP_SNDLOWAT (TCP_SND_BUF/2) +//#define TCP_LISTEN_BACKLOG 0 +//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff + +//***************************************************************************** +// +// ---------- API options ---------- +// +//***************************************************************************** +//#define LWIP_EVENT_API 0 +//#define LWIP_CALLBACK_API 1 + +//***************************************************************************** +// +// ---------- Pbuf options ---------- +// +//***************************************************************************** +#define PBUF_LINK_HLEN 16 // default is 14 +#define PBUF_POOL_BUFSIZE 256 + // default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#define ETH_PAD_SIZE 0 // default is 0 + +//***************************************************************************** +// +// ---------- Network Interfaces options ---------- +// +//***************************************************************************** +//#define LWIP_NETIF_HOSTNAME 0 +//#define LWIP_NETIF_API 0 +//#define LWIP_NETIF_STATUS_CALLBACK 0 +//#define LWIP_NETIF_LINK_CALLBACK 0 +//#define LWIP_NETIF_HWADDRHINT 0 + +//***************************************************************************** +// +// ---------- LOOPIF options ---------- +// +//***************************************************************************** +//#define LWIP_HAVE_LOOPIF 0 +//#define LWIP_LOOPIF_MULTITHREADING 1 + +//***************************************************************************** +// +// ---------- Thread options ---------- +// +//***************************************************************************** +//#define TCPIP_THREAD_NAME "tcpip_thread" +//#define TCPIP_THREAD_STACKSIZE 0 +//#define TCPIP_THREAD_PRIO 1 +//#define TCPIP_MBOX_SIZE 0 +//#define SLIPIF_THREAD_NAME "slipif_loop" +//#define SLIPIF_THREAD_STACKSIZE 0 +//#define SLIPIF_THREAD_PRIO 1 +//#define PPP_THREAD_NAME "pppMain" +//#define PPP_THREAD_STACKSIZE 0 +//#define PPP_THREAD_PRIO 1 +//#define DEFAULT_THREAD_NAME "lwIP" +//#define DEFAULT_THREAD_STACKSIZE 0 +//#define DEFAULT_THREAD_PRIO 1 +//#define DEFAULT_RAW_RECVMBOX_SIZE 0 +//#define DEFAULT_UDP_RECVMBOX_SIZE 0 +//#define DEFAULT_TCP_RECVMBOX_SIZE 0 +//#define DEFAULT_ACCEPTMBOX_SIZE 0 + +//***************************************************************************** +// +// ---------- Sequential layer options ---------- +// +//***************************************************************************** +//#define LWIP_TCPIP_CORE_LOCKING 0 +#define LWIP_NETCONN 0 // default is 1 + +//***************************************************************************** +// +// ---------- Socket Options ---------- +// +//***************************************************************************** +#define LWIP_SOCKET 0 // default is 1 +//#define LWIP_COMPAT_SOCKETS 1 +//#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +//#define LWIP_TCP_KEEPALIVE 0 +//#define LWIP_SO_RCVTIMEO 0 +//#define LWIP_SO_RCVBUF 0 +//#define SO_REUSE 0 + +//***************************************************************************** +// +// ---------- Statistics options ---------- +// +//***************************************************************************** +//#define LWIP_STATS 1 +//#define LWIP_STATS_DISPLAY 0 +//#define LINK_STATS 1 +//#define ETHARP_STATS (LWIP_ARP) +//#define IP_STATS 1 +//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +//#define ICMP_STATS 1 +//#define IGMP_STATS (LWIP_IGMP) +//#define UDP_STATS (LWIP_UDP) +//#define TCP_STATS (LWIP_TCP) +//#define MEM_STATS 1 +//#define MEMP_STATS 1 +//#define SYS_STATS 1 + +//***************************************************************************** +// +// ---------- PPP options ---------- +// +//***************************************************************************** +//#define PPP_SUPPORT 0 +//#define PPPOE_SUPPORT 0 +//#define PPPOS_SUPPORT PPP_SUPPORT + +#if PPP_SUPPORT +//#define NUM_PPP 1 +//#define PAP_SUPPORT 0 +//#define CHAP_SUPPORT 0 +//#define MSCHAP_SUPPORT 0 +//#define CBCP_SUPPORT 0 +//#define CCP_SUPPORT 0 +//#define VJ_SUPPORT 0 +//#define MD5_SUPPORT 0 +//#define FSM_DEFTIMEOUT 6 +//#define FSM_DEFMAXTERMREQS 2 +//#define FSM_DEFMAXCONFREQS 10 +//#define FSM_DEFMAXNAKLOOPS 5 +//#define UPAP_DEFTIMEOUT 6 +//#define UPAP_DEFREQTIME 30 +//#define CHAP_DEFTIMEOUT 6 +//#define CHAP_DEFTRANSMITS 10 +//#define LCP_ECHOINTERVAL 0 +//#define LCP_MAXECHOFAILS 3 +//#define PPP_MAXIDLEFLAG 100 + +//#define PPP_MAXMTU 1500 +//#define PPP_DEFMRU 296 +#endif + +//***************************************************************************** +// +// ---------- checksum options ---------- +// +//***************************************************************************** +//#define CHECKSUM_GEN_IP 1 +//#define CHECKSUM_GEN_UDP 1 +//#define CHECKSUM_GEN_TCP 1 +//#define CHECKSUM_CHECK_IP 1 +//#define CHECKSUM_CHECK_UDP 1 +//#define CHECKSUM_CHECK_TCP 1 + +//***************************************************************************** +// +// ---------- Debugging options ---------- +// +//***************************************************************************** +#if 0 +#define U8_F "c" +#define S8_F "c" +#define X8_F "x" +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" +extern void UARTprintf(const char *pcString, ...); +#define LWIP_DEBUG +#endif + +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE + +//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH) + +//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF +//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF +//#define PBUF_DEBUG LWIP_DBG_OFF +//#define API_LIB_DEBUG LWIP_DBG_OFF +//#define API_MSG_DEBUG LWIP_DBG_OFF +//#define SOCKETS_DEBUG LWIP_DBG_OFF +//#define ICMP_DEBUG LWIP_DBG_OFF +//#define IGMP_DEBUG LWIP_DBG_OFF +//#define INET_DEBUG LWIP_DBG_OFF +//#define IP_DEBUG LWIP_DBG_ON // default is OFF +//#define IP_REASS_DEBUG LWIP_DBG_OFF +//#define RAW_DEBUG LWIP_DBG_OFF +//#define MEM_DEBUG LWIP_DBG_OFF +//#define MEMP_DEBUG LWIP_DBG_OFF +//#define SYS_DEBUG LWIP_DBG_OFF +//#define TCP_DEBUG LWIP_DBG_OFF +#define TCP_INPUT_DEBUG LWIP_DBG_ON +//#define TCP_FR_DEBUG LWIP_DBG_OFF +//#define TCP_RTO_DEBUG LWIP_DBG_OFF +//#define TCP_CWND_DEBUG LWIP_DBG_OFF +//#define TCP_WND_DEBUG LWIP_DBG_OFF +//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +//#define TCP_RST_DEBUG LWIP_DBG_OFF +//#define TCP_QLEN_DEBUG LWIP_DBG_OFF +//#define UDP_DEBUG LWIP_DBG_ON // default is OFF +//#define TCPIP_DEBUG LWIP_DBG_OFF +//#define PPP_DEBUG LWIP_DBG_OFF +//#define SLIP_DEBUG LWIP_DBG_OFF +//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF +//#define AUTOIP_DEBUG LWIP_DBG_OFF +//#define SNMP_MSG_DEBUG LWIP_DBG_OFF +//#define SNMP_MIB_DEBUG LWIP_DBG_OFF +//#define DNS_DEBUG LWIP_DBG_OFF + +#endif /* __LWIPOPTS_H__ */ diff --git a/boards/dk-tm4c129x/boot_demo_flash/readme.txt b/boards/dk-tm4c129x/boot_demo_flash/readme.txt new file mode 100644 index 0000000..c5a2ec6 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/readme.txt @@ -0,0 +1,43 @@ +Flash-based Boot Loader Demo + +An example to demonstrate the use of a flash-based boot loader. At +startup, the application will configure the UART, USB and Ethernet +peripherals, and then branch to the boot loader to await the start of an +update. + +This application is intended for use with flash-based ethernet boot +loader (boot_emac_flash). Although it isn't neccessary to configure USB +and UART interface in this example since only ethernet flash-based boot +loader is provided, the code is there for completeness so that USB or +UART flash-based boot loader can be implemented if needed. +The link address for this application is set to 0x4000, the link address +has to be multiple of the flash erase block size(16KB=0x4000). +You may change this address to a 16KB boundary higher than the last +address occupied by the boot loader binary as long as you also rebuild the +boot loader itself after modifying its bl_config.h file to set +APP_START_ADDRESS to the same value. + +The boot_demo_emac_flash application can be used along with this +application to easily demonstrate that the boot loader is actually updating +the on-chip flash. + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.axf b/boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.axf new file mode 100644 index 0000000..87cb9b9 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.bin b/boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.bin new file mode 100644 index 0000000..9045263 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_flash/rvmdk/boot_demo_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_flash/startup_ccs.c b/boards/dk-tm4c129x/boot_demo_flash/startup_ccs.c new file mode 100644 index 0000000..b63c29e --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void SysTickHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_flash/startup_ewarm.c b/boards/dk-tm4c129x/boot_demo_flash/startup_ewarm.c new file mode 100644 index 0000000..d10fcec --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void SysTickHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_flash/startup_gcc.c b/boards/dk-tm4c129x/boot_demo_flash/startup_gcc.c new file mode 100644 index 0000000..c590e71 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void SysTickHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_flash/startup_rvmdk.S b/boards/dk-tm4c129x/boot_demo_flash/startup_rvmdk.S new file mode 100644 index 0000000..bf79349 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_flash/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN lwIPEthernetIntHandler + EXTERN SysTickHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD lwIPEthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/boot_demo_uart/Makefile b/boards/dk-tm4c129x/boot_demo_uart/Makefile new file mode 100644 index 0000000..b124dd5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/Makefile @@ -0,0 +1,90 @@ +#****************************************************************************** +# +# Makefile - Rules for building the boot_demo_uart example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the boot_demo_uart example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/boot_demo_uart.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the boot_demo_uart example. +# +${COMPILER}/boot_demo_uart.axf: ${COMPILER}/boot_demo_uart.o +${COMPILER}/boot_demo_uart.axf: ${COMPILER}/frame.o +${COMPILER}/boot_demo_uart.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/boot_demo_uart.axf: ${COMPILER}/pinout.o +${COMPILER}/boot_demo_uart.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/boot_demo_uart.axf: ${COMPILER}/touch.o +${COMPILER}/boot_demo_uart.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/boot_demo_uart.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/boot_demo_uart.axf: boot_demo_uart.ld +SCATTERgcc_boot_demo_uart=boot_demo_uart.ld +ENTRY_boot_demo_uart=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.c b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.c new file mode 100644 index 0000000..807c669 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.c @@ -0,0 +1,224 @@ +//***************************************************************************** +// +// boot_demo_uart.c - UART boot loader example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Boot Loader UART Demo (boot_demo_uart)

+//! +//! This example demonstrates the use of the ROM-based UART boot loader. When +//! the application runs, it will wait for the screen to be pressed (to +//! simulate an application waiting for a trigger to begin a firmware update) +//! and then branch to the UART boot loader in the ROM. The UART is configured +//! for a baud rate of 115,200 and does not require the use of auto-bauding. +// +//***************************************************************************** + +//***************************************************************************** +// +// A global we use to keep track of when the user presses the screen. +// +//***************************************************************************** +volatile bool g_bFirmwareUpdate = false; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, unsigned long ulLine) +{ +} +#endif + +//***************************************************************************** +// +// This function is called in interrupt context by the touch screen driver when +// there is a pointer event. +// +//***************************************************************************** +int32_t +TSHandler(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + // + // See if this is a pointer up message. + // + if(ui32Message == WIDGET_MSG_PTR_UP) + { + // + // The screen has been pressed and released, so begin the firmware + // update. + // + g_bFirmwareUpdate = true; + } + + // + // Success. + // + return(0); +} + +//***************************************************************************** +// +// A simple application demonstrating use of the boot loader, +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + tContext sContext; + tRectangle sRect; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "boot-demo-uart"); + + // + // Print instructions on the screen. + // + GrStringDrawCentered(&sContext, "Press the screen to start", -1, 160, 108, + false); + GrStringDrawCentered(&sContext, "the update process", -1, 160, 128, false); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(TSHandler); + + // + // Enable the UART that will be used for the firmware update. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure the UART for 115200, 8-N-1. + // + ROM_UARTConfigSetExpClk(UART0_BASE, ui32SysClock, 115200, + (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | + UART_CONFIG_WLEN_8)); + + // + // Enable the UART operation. + // + ROM_UARTEnable(UART0_BASE); + + // + // Wait until the screen has been pressed, indicating that the firwmare + // update should begin. + // + while(!g_bFirmwareUpdate) + { + } + + // + // Clear the screen. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = 319; + sRect.i16YMax = 239; + GrContextForegroundSet(&sContext, ClrBlack); + GrRectFill(&sContext, &sRect); + + // + // Indicate that the firmware update is about to start. + // + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Update process started...", -1, 160, 98, + false); + GrStringDrawCentered(&sContext, "Using UART0 with", -1, 160, 138, false); + GrStringDrawCentered(&sContext, "115,200 baud, 8-N-1.", -1, 160, 158, + false); + + // + // Disable all processor interrupts. Instead of disabling them one at a + // time, a direct write to NVIC is done to disable all peripheral + // interrupts. + // + HWREG(NVIC_DIS0) = 0xffffffff; + HWREG(NVIC_DIS1) = 0xffffffff; + HWREG(NVIC_DIS2) = 0xffffffff; + HWREG(NVIC_DIS3) = 0xffffffff; + HWREG(NVIC_DIS4) = 0xffffffff; + + // + // Call the ROM UART boot loader. + // + ROM_UpdateUART(); + + // + // The boot loader should not return. In the off chance that it does, + // enter a dead loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewd b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewp b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewp new file mode 100644 index 0000000..4a7b9db --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\boot_demo_uart.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.icf b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.icf new file mode 100644 index 0000000..3cb26c9 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// boot_demo_uart.icf - Linker configuration file for boot_demo_uart. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ld b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ld new file mode 100644 index 0000000..61544e3 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * boot_demo_uart.ld - Linker configuration file for boot_demo_uart. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.sct b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.sct new file mode 100644 index 0000000..37bfda9 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; boot_demo_uart.sct - Linker configuration file for boot_demo_uart. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvopt b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvopt new file mode 100644 index 0000000..e317d87 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + boot_demo_uart + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\boot_demo_uart.c + boot_demo_uart.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvproj b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvproj new file mode 100644 index 0000000..e3426a2 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + boot_demo_uart + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + boot_demo_uart + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\boot_demo_uart.bin .\rvmdk\boot_demo_uart.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + boot_demo_uart.sct + + + --entry Reset_Handler + + + + + + + + Source + + + boot_demo_uart.c + 1 + .\boot_demo_uart.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart_ccs.cmd b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart_ccs.cmd new file mode 100644 index 0000000..194a9c6 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * boot_demo_uart_ccs.cmd - CCS linker configuration file for boot_demo_uart. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsimportspec b/boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsimportspec new file mode 100644 index 0000000..40596ec --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsproject b/boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/.cproject b/boards/dk-tm4c129x/boot_demo_uart/ccs/.cproject new file mode 100644 index 0000000..ad381de --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/.project b/boards/dk-tm4c129x/boot_demo_uart/ccs/.project new file mode 100644 index 0000000..fe9cb7c --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/.project @@ -0,0 +1,70 @@ + + + boot_demo_uart + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + boot_demo_uart.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart.c + + + boot_demo_uart_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_uart/boot_demo_uart_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_uart/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/boot_demo_uart/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.bin b/boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.bin new file mode 100644 index 0000000..f188caf Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.out b/boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.out new file mode 100644 index 0000000..917a9c8 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/ccs/Debug/boot_demo_uart.out differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/macros.ini_initial b/boards/dk-tm4c129x/boot_demo_uart/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/boot_demo_uart/ccs/target_config.ccxml b/boards/dk-tm4c129x/boot_demo_uart/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.bin b/boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.bin new file mode 100644 index 0000000..c974b03 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.out b/boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.out new file mode 100644 index 0000000..93dc955 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/ewarm/Exe/boot_demo_uart.out differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.axf b/boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.axf new file mode 100644 index 0000000..cb3c7b5 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.bin b/boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.bin new file mode 100644 index 0000000..a439be9 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/gcc/boot_demo_uart.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/readme.txt b/boards/dk-tm4c129x/boot_demo_uart/readme.txt new file mode 100644 index 0000000..1acf19d --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/readme.txt @@ -0,0 +1,27 @@ +Boot Loader UART Demo + +This example demonstrates the use of the ROM-based UART boot loader. When +the application runs, it will wait for the screen to be pressed (to +simulate an application waiting for a trigger to begin a firmware update) +and then branch to the UART boot loader in the ROM. The UART is configured +for a baud rate of 115,200 and does not require the use of auto-bauding. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.axf b/boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.axf new file mode 100644 index 0000000..45b1626 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.bin b/boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.bin new file mode 100644 index 0000000..ab98922 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_uart/rvmdk/boot_demo_uart.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_uart/startup_ccs.c b/boards/dk-tm4c129x/boot_demo_uart/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_uart/startup_ewarm.c b/boards/dk-tm4c129x/boot_demo_uart/startup_ewarm.c new file mode 100644 index 0000000..860b8a6 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_uart/startup_gcc.c b/boards/dk-tm4c129x/boot_demo_uart/startup_gcc.c new file mode 100644 index 0000000..fad3049 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_uart/startup_rvmdk.S b/boards/dk-tm4c129x/boot_demo_uart/startup_rvmdk.S new file mode 100644 index 0000000..07659c1 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_uart/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/boot_demo_usb/Makefile b/boards/dk-tm4c129x/boot_demo_usb/Makefile new file mode 100644 index 0000000..4d18334 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/Makefile @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Makefile - Rules for building the boot_demo_usb example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the boot_demo_usb example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/boot_demo_usb.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the boot_demo_usb example. +# +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/boot_demo_usb.o +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/frame.o +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/pinout.o +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/touch.o +${COMPILER}/boot_demo_usb.axf: ${COMPILER}/usb_hiddfu_structs.o +${COMPILER}/boot_demo_usb.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/boot_demo_usb.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/boot_demo_usb.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/boot_demo_usb.axf: boot_demo_usb.ld +SCATTERgcc_boot_demo_usb=boot_demo_usb.ld +ENTRY_boot_demo_usb=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.c b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.c new file mode 100644 index 0000000..bef2012 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.c @@ -0,0 +1,821 @@ +//***************************************************************************** +// +// boot_demo_usb.c - Main routines for the USB HID/DFU composite device +// example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/usb.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usblib/device/usbddfu-rt.h" +#include "usblib/device/usbdcomp.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "usb_hiddfu_structs.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Boot Loader USB Demo (boot_demo_usb)

+//! +//! This example application is used in conjunction with the USB boot loader in +//! ROM and turns the development board into a composite device supporting a +//! mouse via the Human Interface Device class and also publishing runtime +//! Device Firmware Upgrade (DFU) capability. Dragging a finger or stylus over +//! the touchscreen translates into mouse movement and presses on marked areas +//! at the bottom of the screen indicate mouse button press. This input is +//! used to generate messages in HID reports sent to the USB host allowing the +//! development board to control the mouse pointer on the host system. +//! +//! Since the device also publishes a DFU interface, host software such as the +//! dfuprog tool can determine that the device is capable of receiving software +//! updates over USB. The runtime DFU protocol allows such tools to signal the +//! device to switch into DFU mode and prepare to receive a new software image. +//! +//! Runtime DFU functionality requires only that the device listen for a +//! particular request (DETACH) from the host and, when this is received, +//! transfer control to the USB boot loader via the normal means to reenumerate +//! as a pure DFU device capable of uploading and downloading firmware images. +//! +//! Windows device drivers for both the runtime and DFU mode of operation can +//! be found in C:/TI/TivaWare_C_Series-x.x/windows_drivers assuming +//! you installed TivaWare in the default directory. +//! +//! To illustrate runtime DFU capability, use the dfuprog tool which +//! is part of the Tiva Windows USB Examples package (SW-USB-win-xxxx.msi) +//! Assuming this package is installed in the default location, the +//! dfuprog executable can be found in the +//! C:/Program Files/Texas Instruments/Tiva/usb_examples or +//! C:/Program Files (x86)/Texas Instruments/Tiva/usb_examples +//! directory. +//! +//! With the device connected to your PC and the device driver installed, enter +//! the following command to enumerate DFU devices: +//! +//! dfuprog -e +//! +//! This will list all DFU-capable devices found and you should see that you +//! have one or two devices available which are in ``Runtime'' mode. +//! +//! If you see two devices, it is strongly recommended that you disconnect +//! ICDI debug port from the PC, and power the board either with a 5V external +//! power brick or any usb wall charger which is not plugged in your pc. +//! This way, your PC is connected to the board only through USB OTG port. +//! The reason for this is that the ICDI chip on the board is DFU-capable +//! device as well as TM4C129X, if not careful, the firmware on the ICDI +//! chip could be accidently erased which can not restored easily. As a +//! result, debug capabilities would be lost! +//! +//! If IDCI debug port is disconnected from your PC, you should see only one +//! device from above command, and its index should be 0, and should be named +//! as ``Mouse with Device Firmware Upgrade''. +//! If for any reason that you cannot provide the power to the board without +//! connecting ICDI debug port to your PC, the above command should show two +//! devices, the second device is probably named as +//! ``In-Circuit Debug interface'', and we need to be careful not to update +//! the firmware on that device. So please take careful note of the index for +//! the device ``Mouse with Device Firmware Upgrade'', it could be 0 or 1, we +//! will need this index number for the following command. +//! Entering the following command will switch this device into DFU mode and +//! leave it ready to receive a new firmware image: +//! +//! dfuprog -i index -m +//! +//! After entering this command, you should notice that the device disconnects +//! from the USB bus and reconnects again. Running ``dfuprog -e'' a +//! second time will show that the device is now in DFU mode and ready to +//! receive downloads. At this point, either LM Flash Programmer or dfuprog +//! may be used to send a new application binary to the device. +// +//***************************************************************************** + +//***************************************************************************** +// +// The defines used with the g_ui32Commands variable. +// +//***************************************************************************** +#define TOUCH_TICK_EVENT 0x80000000 + +//***************************************************************************** +// +// The system tick timer rate. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 50 + +//***************************************************************************** +// +// This structure defines the area of the display that is devoted to a +// mouse button. Touchscreen input in this area is translated into press and +// release messages for the given button. +// +//***************************************************************************** +typedef struct +{ + const char *pcLabel; + uint16_t ui16X; + uint16_t ui16Width; + uint8_t ui8ReportFlag; +} +tMouseButtonArea; + +//***************************************************************************** +// +// The height of the mouse button bar at the bottom of the display and the +// number of buttons it contains. +// +//***************************************************************************** +#define BUTTON_HEIGHT 30 +#define NUM_MOUSE_BUTTONS 3 + +//***************************************************************************** +// +// Definitions of the positions and labels for each of the three mouse buttons. +// +//***************************************************************************** +static tMouseButtonArea g_sMouseButtons[NUM_MOUSE_BUTTONS] = +{ + { "Button 1", 8, 101, MOUSE_REPORT_BUTTON_1 }, + { "Button 2", 109, 102, MOUSE_REPORT_BUTTON_2 }, + { "Button 3", 211, 101, MOUSE_REPORT_BUTTON_3 } +}; + +//***************************************************************************** +// +// Holds command bits used to signal the main loop to perform various tasks. +// +//***************************************************************************** +volatile uint32_t g_ui32Commands; + +//***************************************************************************** +// +// A flag used to indicate whether or not we are currently connected to the USB +// host. +// +//***************************************************************************** +volatile bool g_bConnected; + +//***************************************************************************** +// +// Global system tick counter holds elapsed time since the application started +// expressed in 100ths of a second. +// +//***************************************************************************** +volatile uint32_t g_ui32SysTickCount; + +//***************************************************************************** +// +// Holds the previous press position for the touchscreen. +// +//***************************************************************************** +static volatile int32_t g_i32ScreenStartX; +static volatile int32_t g_i32ScreenStartY; + +//***************************************************************************** +// +// Holds the current press position for the touchscreen. +// +//***************************************************************************** +static volatile int32_t g_i32ScreenX; +static volatile int32_t g_i32ScreenY; + +//***************************************************************************** +// +// Holds the current state of the touchscreen - pressed or not. +// +//***************************************************************************** +static volatile bool g_bScreenPressed; + +//***************************************************************************** +// +// Holds the current state of the push button - pressed or not. +// +//***************************************************************************** +static volatile uint8_t g_ui8Buttons; + +//***************************************************************************** +// +// This enumeration holds the various states that the mouse can be in during +// normal operation. +// +//***************************************************************************** +volatile enum +{ + // + // Unconfigured. + // + MOUSE_STATE_UNCONFIGURED, + + // + // No keys to send and not waiting on data. + // + MOUSE_STATE_IDLE, + + // + // Waiting on data to be sent out. + // + MOUSE_STATE_SENDING +} +g_eMouseState = MOUSE_STATE_UNCONFIGURED; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Flag used to tell the main loop that it's time to pass control back to the +// boot loader for an update. +// +//***************************************************************************** +volatile bool g_bUpdateSignalled; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This function is called by the touchscreen driver whenever there is a +// change in press state or position. +// +//***************************************************************************** +static int32_t +MouseTouchHandler(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + uint32_t ui32Loop; + + switch(ui32Message) + { + // + // The touchscreen has been pressed. Remember where we are so that + // we can determine how far the pointer moves later. + // + case WIDGET_MSG_PTR_DOWN: + { + // + // Save the location of the pointer down event. + // + g_i32ScreenStartX = i32X; + g_i32ScreenStartY = i32Y; + g_i32ScreenX = i32X; + g_i32ScreenY = i32Y; + g_bScreenPressed = true; + + // + // Is the press within the button area? If so, determine which + // button has been pressed. + // + if(i32Y >= + (GrContextDpyHeightGet(&g_sContext) - BUTTON_HEIGHT - 8)) + { + // + // Run through the list of buttons to determine which one was + // pressed. + // + for(ui32Loop = 0; ui32Loop < NUM_MOUSE_BUTTONS; ui32Loop++) + { + if((i32X >= g_sMouseButtons[ui32Loop].ui16X) && + (i32X < (g_sMouseButtons[ui32Loop].ui16X + + g_sMouseButtons[ui32Loop].ui16Width))) + { + g_ui8Buttons |= + g_sMouseButtons[ui32Loop].ui8ReportFlag; + break; + } + } + } + break; + } + + // + // The touchscreen is no longer being pressed. + // + case WIDGET_MSG_PTR_UP: + { + g_bScreenPressed = false; + + // + // Ensure that all buttons are unpressed. + // + g_ui8Buttons = 0; + break; + } + + // + // The user is dragging his/her finger/stylus over the touchscreen. + // + case WIDGET_MSG_PTR_MOVE: + { + g_i32ScreenX = i32X; + g_i32ScreenY = i32Y; + break; + } + } + + return(0); +} + +//***************************************************************************** +// +// This is the callback from the USB DFU runtime interface driver. +// +// \param pvCBData is ignored by this function. +// \param ui32Event is one of the valid events for a DFU device. +// \param ui32MsgParam is defined by the event that occurs. +// \param pvMsgData is a pointer to data that is defined by the event that +// occurs. +// +// This function will be called to inform the application when a change occurs +// during operation as a DFU device. Currently, the only event passed to this +// callback is USBD_DFU_EVENT_DETACH which tells the recipient that they should +// pass control to the boot loader at the earliest, non-interrupt context +// point. +// +// \return This function will return 0. +// +//***************************************************************************** +uint32_t +DFUDetachCallback(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, + void *pvMsgData) +{ + if(ui32Event == USBD_DFU_EVENT_DETACH) + { + // + // Set the flag that the main loop uses to determine when it is time + // to transfer control back to the boot loader. Note that we + // absolutely DO NOT call USBDDFUUpdateBegin() here since we are + // currently in interrupt context and this would cause bad things to + // happen (and the boot loader to not work). + // + g_bUpdateSignalled = true; + } + + return(0); +} + +//***************************************************************************** +// +// This is the callback from the USB composite device class driver. +// +// \param pvCBData is ignored by this function. +// \param ui32Event is one of the valid events for a mouse device. +// \param ui32MsgParam is defined by the event that occurs. +// \param pvMsgData is a pointer to data that is defined by the event that +// occurs. +// +// This function will be called to inform the application when a change occurs +// during operation as a HID class USB mouse device. +// +// \return This function will return 0. +// +//***************************************************************************** +uint32_t +MouseHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, + void *pvMsgData) +{ + switch(ui32Event) + { + // + // The USB host has connected to and configured the device. + // + case USB_EVENT_CONNECTED: + { + g_eMouseState = MOUSE_STATE_IDLE; + g_bConnected = true; + break; + } + + // + // The USB host has disconnected from the device. + // + case USB_EVENT_DISCONNECTED: + { + g_bConnected = false; + g_eMouseState = MOUSE_STATE_UNCONFIGURED; + break; + } + + // + // A report was sent to the host. We are not free to send another. + // + case USB_EVENT_TX_COMPLETE: + { + g_eMouseState = MOUSE_STATE_IDLE; + break; + } + + } + return(0); +} + +//***************************************************************************** +// +// This function updates the display to show button state. +// +// This function is called from ButtonHandler to update the display showing +// the state of each of the buttons. +// +// Returns None. +// +//***************************************************************************** +void +UpdateDisplay(uint8_t ui8Buttons, bool bRedraw) +{ + static uint8_t ui8LastButtons; + tRectangle sRect, sRectOutline; + uint32_t ui32Loop; + + // + // Initialize the Y coordinates of the button rectangle. + // + sRectOutline.i16YMin = + GrContextDpyHeightGet(&g_sContext) - BUTTON_HEIGHT - 8; + sRectOutline.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1 - 8; + sRect.i16YMin = sRectOutline.i16YMin + 1; + sRect.i16YMax = sRectOutline.i16YMax - 1; + + // + // Loop through each of the mouse buttons, drawing each in turn. + // + for(ui32Loop = 0; ui32Loop < NUM_MOUSE_BUTTONS; ui32Loop++) + { + // + // Draw the outline if we are redrawing the whole button area. + // + if(bRedraw) + { + GrContextForegroundSet(&g_sContext, ClrWhite); + + sRectOutline.i16XMin = g_sMouseButtons[ui32Loop].ui16X; + sRectOutline.i16XMax = (sRectOutline.i16XMin + + g_sMouseButtons[ui32Loop].ui16Width) - 1; + + GrRectDraw(&g_sContext, &sRectOutline); + } + + // + // Has the button state changed since we last drew it or are we + // drawing the buttons unconditionally? + // + if(((g_ui8Buttons & g_sMouseButtons[ui32Loop].ui8ReportFlag) != + (ui8LastButtons & g_sMouseButtons[ui32Loop].ui8ReportFlag)) || + bRedraw) + { + // + // Set the appropriate button color depending upon whether the + // button is pressed or not. + // + GrContextForegroundSet(&g_sContext, + ((g_ui8Buttons & + g_sMouseButtons[ui32Loop].ui8ReportFlag) ? + ClrRed : ClrGreen)); + + sRect.i16XMin = g_sMouseButtons[ui32Loop].ui16X + 1; + sRect.i16XMax = (sRect.i16XMin + + g_sMouseButtons[ui32Loop].ui16Width) - 3; + GrRectFill(&g_sContext, &sRect); + + // + // Draw the button text. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(&g_sContext, + g_sMouseButtons[ui32Loop].pcLabel, + -1, (sRect.i16XMin + sRect.i16XMax) / 2, + (sRect.i16YMin + sRect.i16YMax) / 2, 0); + } + } + + // + // Remember the button state we just drew. + // + ui8LastButtons = ui8Buttons; +} + +//***************************************************************************** +// +// This function handles updates due to touchscreen input. +// +// This function is called periodically from the main loop to check the +// touchscreen state and, if necessary, send a HID report back to the host +// system. +// +// Returns Returns \b true on success or \b false if an error is detected. +// +//***************************************************************************** +static void +TouchHandler(void) +{ + int32_t i32DeltaX, i32DeltaY; + static uint8_t ui8Buttons = 0; + + // + // Is someone pressing the screen or has the button changed state? If so, + // we determine how far they have dragged their finger/stylus and use this + // to calculate mouse position changes to send to the host. + // + if(g_bScreenPressed || (ui8Buttons != g_ui8Buttons)) + { + // + // Calculate how far we moved since the last time we checked. This + // rather odd layout prevents a compiler warning about undefined order + // of volatile accesses. + // + i32DeltaX = g_i32ScreenX; + i32DeltaX -= g_i32ScreenStartX; + i32DeltaY = g_i32ScreenY; + i32DeltaY -= g_i32ScreenStartY; + + // + // Reset our start position. + // + g_i32ScreenStartX = g_i32ScreenX; + g_i32ScreenStartY = g_i32ScreenY; + + // + // Was there any movement or change in button state? + // + if(i32DeltaX || i32DeltaY || (ui8Buttons != g_ui8Buttons)) + { + // + // Yes - send a report back to the host after clipping the deltas + // to the maximum we can support. + // + i32DeltaX = (i32DeltaX > 127) ? 127 : i32DeltaX; + i32DeltaX = (i32DeltaX < -128) ? -128 : i32DeltaX; + i32DeltaY = (i32DeltaY > 127) ? 127 : i32DeltaY; + i32DeltaY = (i32DeltaY < -128) ? -128 : i32DeltaY; + + // + // Remember the current button state. + // + ui8Buttons = g_ui8Buttons; + + // + // Send the report back to the host. + // + USBDHIDMouseStateChange((void *)&g_sMouseDevice, + (char)i32DeltaX, (char)i32DeltaY, + ui8Buttons); + } + + // + // Update the button portion of the display. + // + UpdateDisplay(ui8Buttons, false); + } +} + +//***************************************************************************** +// +// This is the interrupt handler for the SysTick interrupt. It is called +// periodically and updates a global tick counter then sets a flag to tell the +// main loop to check the button state. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + g_ui32SysTickCount++; + g_ui32Commands |= TOUCH_TICK_EVENT; +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + tRectangle sRect; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "boot-demo-usb"); + + // + // Set the system tick to fire 100 times per second. + // + ROM_SysTickPeriodSet(ui32SysClock / SYSTICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Draw the buttons in their initial (unpressed)state. + // + UpdateDisplay(g_ui8Buttons, true); + + // + // Initialize each of the device instances that will form our composite + // USB device. + // + USBDHIDMouseCompositeInit(0, &g_sMouseDevice, + &(g_sCompDevice.psDevices[0])); + USBDDFUCompositeInit(0, &g_sDFUDevice, &(g_sCompDevice.psDevices[1])); + + // + // Pass the USB library our device information, initialize the USB + // controller and connect the device to the bus. + // + USBDCompositeInit(0, &g_sCompDevice, DESCRIPTOR_BUFFER_SIZE, + g_pui8DescriptorBuffer); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(MouseTouchHandler); + + // + // Drop into the main loop. + // + while(!g_bUpdateSignalled) + { + // + // Tell the user what we are doing. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(&g_sContext, " Waiting for host... ", -1, 160, + 110, true); + + // + // Wait for USB configuration to complete. + // + while(!g_bConnected) + { + } + + // + // Update the status. + // + GrStringDrawCentered(&g_sContext, " Host connected... ", -1, 160, + 110, true); + + // + // Now keep processing the mouse as long as the host is connected and + // we've not been told to prepare for a firmware upgrade. + // + while(g_bConnected && !g_bUpdateSignalled) + { + // + // If it is time to check the touchscreen state then do so. + // + if(g_ui32Commands & TOUCH_TICK_EVENT) + { + g_ui32Commands &= ~TOUCH_TICK_EVENT; + TouchHandler(); + } + } + + // + // If we drop out of the previous loop, either the host has + // disconnected or a firmware upgrade has been signalled. + // + } + + // + // Tell the user what's going on. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext); + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext); + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(&g_sContext, " Switching to DFU mode ", -1, 160, 118, + true); + + // + // Terminate the USB device and detach from the bus. + // + USBDCDTerm(0); + + // + // Disable all interrupts. + // + ROM_IntMasterDisable(); + + // + // Disable SysTick and its interrupt. + // + ROM_SysTickIntDisable(); + ROM_SysTickDisable(); + + // + // Disable all processor interrupts. Instead of disabling them one at a + // time, a direct write to NVIC is done to disable all peripheral + // interrupts. + // + HWREG(NVIC_DIS0) = 0xffffffff; + HWREG(NVIC_DIS1) = 0xffffffff; + HWREG(NVIC_DIS2) = 0xffffffff; + HWREG(NVIC_DIS3) = 0xffffffff; + HWREG(NVIC_DIS4) = 0xffffffff; + + // + // Enable and reset the USB peripheral. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_USB0); + ROM_USBClockEnable(USB0_BASE, 8, USB_CLOCK_INTERNAL); + + // + // Wait for about a second. + // + ROM_SysCtlDelay(ui32SysClock / 3); + + // + // Re-enable interrupts at the NVIC level. + // + ROM_IntMasterEnable(); + + // + // Call the USB boot loader. + // + ROM_UpdateUSB(0); + + // + // Should never get here, but just in case. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewd b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewp b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewp new file mode 100644 index 0000000..582d300 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\boot_demo_usb.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\usb_hiddfu_structs.c + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.icf b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.icf new file mode 100644 index 0000000..bdf8c7a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// boot_demo_usb.icf - Linker configuration file for boot_demo_usb. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ld b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ld new file mode 100644 index 0000000..10364d4 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * boot_demo_usb.ld - Linker configuration file for boot_demo_usb. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.sct b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.sct new file mode 100644 index 0000000..0d63608 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; boot_demo_usb.sct - Linker configuration file for boot_demo_usb. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvopt b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvopt new file mode 100644 index 0000000..17d359a --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + boot_demo_usb + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\boot_demo_usb.c + boot_demo_usb.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_hiddfu_structs.c + usb_hiddfu_structs.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvproj b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvproj new file mode 100644 index 0000000..429e054 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + boot_demo_usb + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + boot_demo_usb + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\boot_demo_usb.bin .\rvmdk\boot_demo_usb.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + boot_demo_usb.sct + + + --entry Reset_Handler + + + + + + + + Source + + + boot_demo_usb.c + 1 + .\boot_demo_usb.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + usb_hiddfu_structs.c + 1 + .\usb_hiddfu_structs.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb_ccs.cmd b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb_ccs.cmd new file mode 100644 index 0000000..c586087 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * boot_demo_usb_ccs.cmd - CCS linker configuration file for boot_demo_usb. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsimportspec b/boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsimportspec new file mode 100644 index 0000000..987f4c8 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsproject b/boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/.cproject b/boards/dk-tm4c129x/boot_demo_usb/ccs/.cproject new file mode 100644 index 0000000..4572a0f --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/.cproject @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/.project b/boards/dk-tm4c129x/boot_demo_usb/ccs/.project new file mode 100644 index 0000000..84c86fe --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/.project @@ -0,0 +1,75 @@ + + + boot_demo_usb + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + boot_demo_usb.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb.c + + + boot_demo_usb_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_usb/boot_demo_usb_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_usb/startup_ccs.c + + + usb_hiddfu_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/boot_demo_usb/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.bin b/boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.bin new file mode 100644 index 0000000..0c33d91 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.out b/boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.out new file mode 100644 index 0000000..0de67ad Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/ccs/Debug/boot_demo_usb.out differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/macros.ini_initial b/boards/dk-tm4c129x/boot_demo_usb/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/boot_demo_usb/ccs/target_config.ccxml b/boards/dk-tm4c129x/boot_demo_usb/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.bin b/boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.bin new file mode 100644 index 0000000..718a52d Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.out b/boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.out new file mode 100644 index 0000000..44be3d6 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/ewarm/Exe/boot_demo_usb.out differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.axf b/boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.axf new file mode 100644 index 0000000..09be85f Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.bin b/boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.bin new file mode 100644 index 0000000..b439f04 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/gcc/boot_demo_usb.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/readme.txt b/boards/dk-tm4c129x/boot_demo_usb/readme.txt new file mode 100644 index 0000000..8e9ddeb --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/readme.txt @@ -0,0 +1,90 @@ +Boot Loader USB Demo + +This example application is used in conjunction with the USB boot loader in +ROM and turns the development board into a composite device supporting a +mouse via the Human Interface Device class and also publishing runtime +Device Firmware Upgrade (DFU) capability. Dragging a finger or stylus over +the touchscreen translates into mouse movement and presses on marked areas +at the bottom of the screen indicate mouse button press. This input is +used to generate messages in HID reports sent to the USB host allowing the +development board to control the mouse pointer on the host system. + +Since the device also publishes a DFU interface, host software such as the +dfuprog tool can determine that the device is capable of receiving software +updates over USB. The runtime DFU protocol allows such tools to signal the +device to switch into DFU mode and prepare to receive a new software image. + +Runtime DFU functionality requires only that the device listen for a +particular request (DETACH) from the host and, when this is received, +transfer control to the USB boot loader via the normal means to reenumerate +as a pure DFU device capable of uploading and downloading firmware images. + +Windows device drivers for both the runtime and DFU mode of operation can +be found in C:/TI/TivaWare_C_Series-x.x/windows_drivers assuming +you installed TivaWare in the default directory. + +To illustrate runtime DFU capability, use the dfuprog tool which +is part of the Tiva Windows USB Examples package (SW-USB-win-xxxx.msi) +Assuming this package is installed in the default location, the +dfuprog executable can be found in the +C:/Program Files/Texas Instruments/Tiva/usb_examples or +C:/Program Files (x86)/Texas Instruments/Tiva/usb_examples +directory. + +With the device connected to your PC and the device driver installed, enter +the following command to enumerate DFU devices: + +dfuprog -e + +This will list all DFU-capable devices found and you should see that you +have one or two devices available which are in ``Runtime'' mode. + +If you see two devices, it is strongly recommended that you disconnect +ICDI debug port from the PC, and power the board either with a 5V external +power brick or any usb wall charger which is not plugged in your pc. +This way, your PC is connected to the board only through USB OTG port. +The reason for this is that the ICDI chip on the board is DFU-capable +device as well as TM4C129X, if not careful, the firmware on the ICDI +chip could be accidently erased which can not restored easily. As a +result, debug capabilities would be lost! + +If IDCI debug port is disconnected from your PC, you should see only one +device from above command, and its index should be 0, and should be named +as ``Mouse with Device Firmware Upgrade''. +If for any reason that you cannot provide the power to the board without +connecting ICDI debug port to your PC, the above command should show two +devices, the second device is probably named as +``In-Circuit Debug interface'', and we need to be careful not to update +the firmware on that device. So please take careful note of the index for +the device ``Mouse with Device Firmware Upgrade'', it could be 0 or 1, we +will need this index number for the following command. +Entering the following command will switch this device into DFU mode and +leave it ready to receive a new firmware image: + +dfuprog -i index -m + +After entering this command, you should notice that the device disconnects +from the USB bus and reconnects again. Running ``dfuprog -e'' a +second time will show that the device is now in DFU mode and ready to +receive downloads. At this point, either LM Flash Programmer or dfuprog +may be used to send a new application binary to the device. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.axf b/boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.axf new file mode 100644 index 0000000..83062b4 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.axf differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.bin b/boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.bin new file mode 100644 index 0000000..8886085 Binary files /dev/null and b/boards/dk-tm4c129x/boot_demo_usb/rvmdk/boot_demo_usb.bin differ diff --git a/boards/dk-tm4c129x/boot_demo_usb/startup_ccs.c b/boards/dk-tm4c129x/boot_demo_usb/startup_ccs.c new file mode 100644 index 0000000..a178f48 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_usb/startup_ewarm.c b/boards/dk-tm4c129x/boot_demo_usb/startup_ewarm.c new file mode 100644 index 0000000..dbd8966 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_usb/startup_gcc.c b/boards/dk-tm4c129x/boot_demo_usb/startup_gcc.c new file mode 100644 index 0000000..ca2e5e0 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/boot_demo_usb/startup_rvmdk.S b/boards/dk-tm4c129x/boot_demo_usb/startup_rvmdk.S new file mode 100644 index 0000000..93daff4 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.c b/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.c new file mode 100644 index 0000000..2ecc56e --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.c @@ -0,0 +1,246 @@ +//***************************************************************************** +// +// usb_hiddfu_structs.c - Data structures defining the USB mouse device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usblib/device/usbddfu-rt.h" +#include "usblib/device/usbdcomp.h" +#include "usb_hiddfu_structs.h" + +//***************************************************************************** +// +// The languages supported by this device. +// +//***************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//***************************************************************************** +// +// The manufacturer string. +// +//***************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//***************************************************************************** +// +// The product string. +// +//***************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (34 + 1) * 2, + USB_DTYPE_STRING, + 'M', 0, 'o', 0, 'u', 0, 's', 0, 'e', 0, ' ', 0, 'w', 0, 'i', 0, 't', 0, + 'h', 0, ' ', 0, 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0, ' ', 0, + 'F', 0, 'i', 0, 'r', 0, 'm', 0, 'w', 0, 'a', 0, 'r', 0, 'e', 0, ' ', 0, + 'U', 0, 'p', 0, 'g', 0, 'r', 0, 'a', 0, 'd', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The serial number string. +// +//***************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The interface description string. +// +//***************************************************************************** +const uint8_t g_pui8HIDInterfaceString[] = +{ + (19 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'M', 0, 'o', 0, 'u', 0, 's', 0, + 'e', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, + 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + (23 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'M', 0, 'o', 0, 'u', 0, 's', 0, + 'e', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, 'f', 0, 'i', 0, 'g', 0, + 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, 'o', 0, 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_ppui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, + g_pui8HIDInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_ppui8StringDescriptors) / \ + sizeof(g_ppui8StringDescriptors[0])) + +//***************************************************************************** +// +// The HID mouse device initialization and customization structures. +// +//***************************************************************************** +tUSBDHIDMouseDevice g_sMouseDevice = +{ + USB_VID_TI_1CBE, + USB_PID_COMP_HID_DFU, + 500, + USB_CONF_ATTR_SELF_PWR, + MouseHandler, + (void *)&g_sMouseDevice, + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS +}; + +//***************************************************************************** +// +// The DFU runtime interface initialization and customization structures +// +//***************************************************************************** +tUSBDDFUDevice g_sDFUDevice = +{ + DFUDetachCallback, + (void *)&g_sDFUDevice +}; + +//**************************************************************************** +// +// The number of device class instances that this composite device will +// use. +// +//**************************************************************************** +#define NUM_DEVICES 2 + +//**************************************************************************** +// +// The array of devices supported by this composite device. +// +//**************************************************************************** +tCompositeEntry g_psCompDevices[NUM_DEVICES]; + +//**************************************************************************** +// +// Additional workspace required by the composite driver to hold a lookup +// table allowing mapping of composite interface and endpoint numbers to +// individual device class instances. +// +//**************************************************************************** +uint32_t g_pui32CompWorkspace[NUM_DEVICES]; + +//**************************************************************************** +// +// The instance data for this composite device. +// +//**************************************************************************** +tCompositeInstance g_sCompInstance; + +//**************************************************************************** +// +// Allocate the Device Data for the top level composite device class. +// +//**************************************************************************** +tUSBDCompositeDevice g_sCompDevice = +{ + // + // Stellaris VID. + // + USB_VID_TI_1CBE, + + // + // Stellaris PID for composite HID/DFU device. + // + USB_PID_COMP_HID_DFU, + + // + // This is in milliamps. + // + 500, + + // + // Bus powered device. + // + USB_CONF_ATTR_BUS_PWR, + + // + // Device event handler function pointer (receives connect, disconnect + // and other device-level notifications). + // + MouseHandler, + + // + // The string table. + // + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS, + + // + // The Composite device array. + // + NUM_DEVICES, + g_psCompDevices, +}; + +//**************************************************************************** +// +// A buffer into which the composite device can write the combined config +// descriptor. +// +//**************************************************************************** +uint8_t g_pui8DescriptorBuffer[DESCRIPTOR_BUFFER_SIZE]; diff --git a/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.h b/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.h new file mode 100644 index 0000000..ac33ed8 --- /dev/null +++ b/boards/dk-tm4c129x/boot_demo_usb/usb_hiddfu_structs.h @@ -0,0 +1,40 @@ +//***************************************************************************** +// +// usb_mouse_structs.h - Data structures defining the mouse USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USB_HIDDFU_STRUCTS_H__ +#define __USB_HIDDFU_STRUCTS_H__ + +extern uint32_t MouseHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgData, void *pvMsgData); +extern uint32_t DFUDetachCallback(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgData, void *pvMsgData); + +extern tUSBDHIDMouseDevice g_sMouseDevice; +extern tUSBDDFUDevice g_sDFUDevice; +extern tUSBDCompositeDevice g_sCompDevice; + +#define DESCRIPTOR_BUFFER_SIZE (COMPOSITE_DDFU_SIZE + COMPOSITE_DHID_SIZE) +extern uint8_t g_pui8DescriptorBuffer[]; + +#endif // __USB_HIDDFU_STRUCTS_H__ diff --git a/boards/dk-tm4c129x/boot_emac_flash/Makefile b/boards/dk-tm4c129x/boot_emac_flash/Makefile new file mode 100644 index 0000000..74ee14f --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/Makefile @@ -0,0 +1,98 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Ethernet flash-based Boot Loader. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../../../../boot_loader + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=../../../.. +IPATH+=../../../../boot_loader + +# +# The default rule, which causes the Ethernet flash-based Boot Loader to be built. +# +all: ${COMPILER} +all: ${COMPILER}/boot_emac_flash.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Ethernet flash-based Boot Loader. +# +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_autobaud.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_can.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_check.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_crc32.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_decrypt.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_emac.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_flash.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_i2c.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_main.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_packet.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_ssi.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_startup_${COMPILER}.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_uart.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_usb.o +${COMPILER}/boot_emac_flash.axf: ${COMPILER}/bl_usbfuncs.o +${COMPILER}/boot_emac_flash.axf: ../../../../boot_loader/bl_link.ld +SCATTERgcc_boot_emac_flash=../../../../boot_loader/bl_link.ld +ENTRY_boot_emac_flash=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/boot_emac_flash/bl_config.h b/boards/dk-tm4c129x/boot_emac_flash/bl_config.h new file mode 100644 index 0000000..56b476f --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/bl_config.h @@ -0,0 +1,1137 @@ +//***************************************************************************** +// +// bl_config.h - The configurable parameters of the boot loader. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __BL_CONFIG_H__ +#define __BL_CONFIG_H__ + +//***************************************************************************** +// +// The following defines are used to configure the operation of the boot +// loader. For each define, its interactions with other defines are described. +// First is the dependencies (in other words, the defines that must also be +// defined if it is defined), next are the exclusives (in other words, the +// defines that can not be defined if it is defined), and finally are the +// requirements (in other words, the defines that must be defined if it is +// defined). +// +// The following defines must be defined in order for the boot loader to +// operate: +// +// One of CAN_ENABLE_UPDATE, ENET_ENABLE_UPDATE, I2C_ENABLE_UPDATE, +// SSI_ENABLE_UPDATE, UART_ENABLE_UPDATE, or USB_ENABLE_UPDATE +// APP_START_ADDRESS +// VTABLE_START_ADDRESS +// FLASH_PAGE_SIZE +// STACK_SIZE +// +//***************************************************************************** + +//***************************************************************************** +// +// The frequency of the crystal used to clock the microcontroller. +// +// This defines the crystal frequency used by the microcontroller running the +// boot loader. If this is unknown at the time of production, then use the +// UART_AUTOBAUD feature to properly configure the UART. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define CRYSTAL_FREQ 25000000 + +//***************************************************************************** +// +// The starting address of the application. This must be a multiple of 1024 +// bytes (making it aligned to a page boundary). A vector table is expected at +// this location, and the perceived validity of the vector table (stack located +// in SRAM, reset vector located in flash) is used as an indication of the +// validity of the application image. +// +// The flash image of the boot loader must not be larger than this value. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define APP_START_ADDRESS 0x00004000 + +//***************************************************************************** +// +// The address at which the application locates its exception vector table. +// This must be a multiple of 1024 bytes (making it aligned to a page +// boundary). Typically, an application will start with its vector table and +// this value should be set to APP_START_ADDRESS. This option is provided to +// cater for applications which run from external memory which may not be +// accessible by the NVIC (the vector table offset register is only 30 bits +// long). +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define VTABLE_START_ADDRESS 0x00004000 + +//***************************************************************************** +// +// The size of a single, erasable page in the flash. This must be a power +// of 2. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define FLASH_PAGE_SIZE 0x4000 + +//***************************************************************************** +// +// The amount of space at the end of flash to reserved. This must be a +// multiple of 1024 bytes (making it aligned to a page boundary). This +// reserved space is not erased when the application is updated, providing +// non-volatile storage that can be used for parameters. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define FLASH_RSVD_SPACE 0x00000800 + +//***************************************************************************** +// +// The number of words of stack space to reserve for the boot loader. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define STACK_SIZE 256 + +//***************************************************************************** +// +// The number of words in the data buffer used for receiving packets. This +// value must be at least 3. If using auto-baud on the UART, this must be at +// least 20. The maximum usable value is 65 (larger values will result in +// unused space in the buffer). +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define BUFFER_SIZE 20 + +//***************************************************************************** +// +// Enables updates to the boot loader. Updating the boot loader is an unsafe +// operation since it is not fully fault tolerant (losing power to the device +// part way though could result in the boot loader no longer being present in +// flash). +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define ENABLE_BL_UPDATE + +//***************************************************************************** +// +// Enables runtime and download CRC32 checking of the main firmware image. +// If this is defined, the boot loader will scan the main firmware image for +// an image information header (stored immediately above the vector table and +// marked by the words 0xFF01FF02 and 0xFF03FF04). If the header is found and +// the CRC32 value it contains matches that calculated for the image, the +// firmware is run. If the CRC32 does not match or the image information +// is not found, the boot loader retains control and waits for a new download. +// To aid debugging, if this option is used without ENFORCE_CRC being set, the +// image will also be booted if the header is present but the length field is +// set to 0xFFFFFFFF, typically indicating that the firmware file has not been +// run through the post-processing tool which inserts the length and CRC values. +// +// Note that firmware images intended for use with CRC checking must have been +// built with an 8 word image header appended to the top of the vector table +// and the binary must have been processed by a tool such as tools/binpack.exe +// to ensure that the required length (3rd word) and CRC32 (4th word) fields +// are populated in the header. +// +// Depends on: ENFORCE_CRC +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CHECK_CRC + +//***************************************************************************** +// +// This definition may be used alongside CHECK_CRC to remove the debug behavior +// which will allow an image with an uninitialized header to be run. With +// ENFORCE_CRC defined firmware images will only be booted if they contain a +// valid image information header and if the embedded CRC32 in that header +// matches the calculated value. +// +// Depends on: None +// Exclusive of: None +// Requires: CHECK_CRC +// +//***************************************************************************** +//#define ENFORCE_CRC + +//***************************************************************************** +// +// This definition will cause the the boot loader to erase the entire flash on +// updates to the boot loader or to erase the entire application area when the +// application is updated. This erases any unused sections in the flash before +// the firmware is updated. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define FLASH_CODE_PROTECTION + +//***************************************************************************** +// +// Enables the call to decrypt the downloaded data before writing it into +// flash. The decryption routine is empty in the reference boot loader source, +// which simply provides a placeholder for adding an actual decryption +// algorithm. Although this option is retained for backwards compatibility, it +// is recommended that a decryption function be specified using the newer hook +// function mechanism and BL_DECRYPT_FN_HOOK instead. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define ENABLE_DECRYPTION + +//***************************************************************************** +// +// Enables support for the MOSCFAIL handler in the NMI interrupt. +// +// Depends on: None +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define ENABLE_MOSCFAIL_HANDLER + +//***************************************************************************** +// +// Enables the pin-based forced update check. When enabled, the boot loader +// will go into update mode instead of calling the application if a pin is read +// at a particular polarity, forcing an update operation. In either case, the +// application is still able to return control to the boot loader in order to +// start an update. For applications which need to perform more complex +// checking than is possible using a single GPIO, a hook function may be +// provided using BL_CHECK_UPDATE_FN_HOOK instead. +// +// Depends on: None +// Exclusive of: None +// Requires: FORCED_UPDATE_PERIPH, FORCED_UPDATE_PORT, FORCED_UPDATE_PIN, +// FORCED_UPDATE_POLARITY +// +//***************************************************************************** +//#define ENABLE_UPDATE_CHECK + +//***************************************************************************** +// +// The GPIO module to enable in order to check for a forced update. This will +// be one of the SYSCTL_RCGC2_GPIOx values, where "x" is replaced with the port +// name (such as B). The value of "x" should match the value of "x" for +// FORCED_UPDATE_PORT. +// +// Depends on: ENABLE_UPDATE_CHECK +// Exclusive of: None +// Requries: None +// +//***************************************************************************** +//#define FORCED_UPDATE_PERIPH SYSCTL_RCGC2_GPIOB + +//***************************************************************************** +// +// The GPIO port to check for a forced update. This will be one of the +// GPIO_PORTx_BASE values, where "x" is replaced with the port name (such as +// B). The value of "x" should match the value of "x" for +// FORCED_UPDATE_PERIPH. +// +// Depends on: ENABLE_UPDATE_CHECK +// Exclusive of: None +// Requries: None +// +//***************************************************************************** +//#define FORCED_UPDATE_PORT GPIO_PORTB_BASE + +//***************************************************************************** +// +// The pin to check for a forced update. This is a value between 0 and 7. +// +// Depends on: ENABLE_UPDATE_CHECK +// Exclusive of: None +// Requries: None +// +//***************************************************************************** +//#define FORCED_UPDATE_PIN 4 + +//***************************************************************************** +// +// The polarity of the GPIO pin that results in a forced update. This value +// should be 0 if the pin should be low and 1 if the pin should be high. +// +// Depends on: ENABLE_UPDATE_CHECK +// Exclusive of: None +// Requries: None +// +//***************************************************************************** +//#define FORCED_UPDATE_POLARITY 0 + +//***************************************************************************** +// +// This enables a weak pull-up or pull-down for the GPIO pin used in a forced +// update. Only one of FORCED_UPDATE_WPU or FORCED_UPDATE_WPD should be +// defined, or neither if a weak pull-up or pull-down is not required. +// +// Depends on: ENABLE_UPDATE_CHECK +// Exclusive of: None +// Requries: None +// +//***************************************************************************** +//#define FORCED_UPDATE_WPU +//#define FORCED_UPDATE_WPD + +//***************************************************************************** +// +// This enables the use of the GPIO_LOCK mechanism for configuration of +// protected GPIO pins (for example JTAG pins). If this value is not defined, +// the locking mechanism will not be used. The only legal values for this +// feature are GPIO_LOCK_KEY for Fury devices and GPIO_LOCK_KEY_DD for all +// other devices except Sandstorm devices, which do not support this feature. +// +// Depends on: ENABLE_UPDATE_CHECK +// Exclusive of: None +// Requries: None +// +//***************************************************************************** +//#define FORCED_UPDATE_KEY GPIO_LOCK_KEY +//#define FORCED_UPDATE_KEY GPIO_LOCK_KEY_DD + +//***************************************************************************** +// +// Selects the UART as the port for communicating with the boot loader. +// +// Depends on: None +// Exclusive of: CAN_ENABLE_UPDATE, ENET_ENABLE_UPDATE, I2C_ENABLE_UPDATE, +// SSI_ENABLE_UPDATE, USB_ENABLE_UPDATE +// Requires: UART_AUTOBAUD or UART_FIXED_BAUDRATE, BUFFER_SIZE +// +//***************************************************************************** +//#define UART_ENABLE_UPDATE + +//***************************************************************************** +// +// Enables automatic baud rate detection. This can be used if the crystal +// frequency is unknown, or if operation at different baud rates is desired. +// +// Depends on: UART_ENABLE_UPDATE +// Exclusive of: UART_FIXED_BAUDRATE +// Requires: None +// +//***************************************************************************** +//#define UART_AUTOBAUD + +//***************************************************************************** +// +// Selects the baud rate to be used for the UART. +// +// Depends on: UART_ENABLE_UPDATE, CRYSTAL_FREQ +// Exclusive of: UART_AUTOBAUD +// Requires: None +// +//***************************************************************************** +//#define UART_FIXED_BAUDRATE 115200 + +//***************************************************************************** +// +// Selects the SSI port as the port for communicating with the boot loader. +// +// Depends on: None +// Exclusive of: CAN_ENABLE_UPDATE, ENET_ENABLE_UPDATE, I2C_ENABLE_UPDATE, +// UART_ENABLE_UPDATE, USB_ENABLE_UPDATE +// Requires: BUFFER_SIZE +// +//***************************************************************************** +//#define SSI_ENABLE_UPDATE + +//***************************************************************************** +// +// Selects the I2C port as the port for communicating with the boot loader. +// +// Depends on: None +// Exclusive of: CAN_ENABLE_UPDATE, ENET_ENABLE_UPDATE, SSI_ENABLE_UPDATE, +// UART_ENABLE_UPDATE, USB_ENABLE_UPDATE +// Requires: I2C_SLAVE_ADDR, BUFFER_SIZE +// +//***************************************************************************** +//#define I2C_ENABLE_UPDATE + +//***************************************************************************** +// +// Specifies the I2C address of the boot loader. +// +// Depends on: I2C_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define I2C_SLAVE_ADDR 0x42 + +//***************************************************************************** +// +// Selects Ethernet update via the BOOTP/TFTP protocol. +// +// Depends on: None +// Exclusive of: CAN_ENABLE_UPDATE, I2C_ENABLE_UPDATE, SSI_ENABLE_UPDATE, +// UART_ENABLE_UPDATE, USB_ENABLE_UPDATE +// Requires: CRYSTAL_FREQ +// +//***************************************************************************** +#define ENET_ENABLE_UPDATE + +//***************************************************************************** +// +// Enables the use of the Ethernet status LED outputs to indicate traffic and +// connection status. +// +// Depends on: ENET_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define ENET_ENABLE_LEDS + +//***************************************************************************** +// +// Specifies the hard coded MAC address for the Ethernet interface. There are +// six individual values (ENET_MAC_ADDR0 through ENET_MAC_ADDR5) that provide +// the six bytes of the MAC address, where ENET_MAC_ADDR0 though ENET_MAC_ADDR2 +// provide the organizationally unique identifier (OUI) and ENET_MAC_ADDR3 +// through ENET_MAC_ADDR5 provide the extension identifier. If these values +// are not provided, the MAC address will be extracted from the user registers. +// +// Depends on: ENET_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define ENET_MAC_ADDR0 0x00 +//#define ENET_MAC_ADDR1 0x00 +//#define ENET_MAC_ADDR2 0x00 +//#define ENET_MAC_ADDR3 0x00 +//#define ENET_MAC_ADDR4 0x00 +//#define ENET_MAC_ADDR5 0x00 + +//***************************************************************************** +// +// Specifies the name of the BOOTP server from which to request information. +// The use of this specifier allows a board-specific BOOTP server to co-exist +// on a network with the DHCP server that may be part of the network +// infrastructure. The BOOTP server provided by Texas Instruments requires +// that this be set to "stellaris". +// +// Depends on: ENET_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +#define ENET_BOOTP_SERVER "tiva" + +//***************************************************************************** +// +// Selects USB update via Device Firmware Update class. +// +// Depends on: None +// Exclusive of: CAN_ENABLE_UPDATE, ENET_ENABLE_UPDATE, I2C_ENABLE_UPDATE, +// SSI_ENABLE_UPDATE, UART_ENABLE_UPDATE, +// Requires: CRYSTAL_FREQ, USB_VENDOR_ID, USB_PRODUCT_ID, USB_DEVICE_ID, +// USB_MAX_POWER +// +//***************************************************************************** +//#define USB_ENABLE_UPDATE + +//***************************************************************************** +// +// The USB vendor ID published by the DFU device. This value is the TI +// Tiva vendor ID. Change this to the vendor ID you have been assigned by the +// USB-IF. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_VENDOR_ID 0x1cbe + +//***************************************************************************** +// +// The USB device ID published by the DFU device. If you are using your own +// vendor ID, chose a device ID that is different from the ID you use in +// non-update operation. If you have sublicensed TI's vendor ID, you must +// use an assigned product ID here. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_PRODUCT_ID 0x00ff + +//***************************************************************************** +// +// Selects the BCD USB device release number published in the device +// descriptor. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DEVICE_ID 0x0001 + +//***************************************************************************** +// +// Sets the maximum power consumption that the DFU device will report to the +// USB host in the configuration descriptor. Units are milliamps. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_MAX_POWER 150 + +//***************************************************************************** +// +// Specifies whether the DFU device reports to the host that it is self-powered +// (defined as 0) or bus-powered (defined as 1). +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_BUS_POWERED 1 + +//***************************************************************************** +// +// Specifies whether the target board uses a multiplexer to select between USB +// host and device modes. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: USB_MUX_PERIPH, USB_MUX_PORT, USB_MUX_PIN, USB_MUX_DEVICE +// +//***************************************************************************** +//#define USB_HAS_MUX + +//***************************************************************************** +// +// Specifies the GPIO peripheral containing the pin which is used to select +// between USB host and device modes. The value is of the form +// SYSCTL_RCGC2_GPIOx, where GPIOx represents the required GPIO port. +// +// Depends on: USB_ENABLE_UPDATE, USB_HAS_MUX +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_MUX_PERIPH SYSCTL_RCGC2_GPIOH + +//***************************************************************************** +// +// Specifies the GPIO port containing the pin which is used to select between +// USB host and device modes. The value is of the form GPIO_PORTx_BASE, where +// PORTx represents the required GPIO port. +// +// Depends on: USB_ENABLE_UPDATE, USB_HAS_MUX +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_MUX_PORT GPIO_PORTH_BASE + +//***************************************************************************** +// +// Specifies the GPIO pin number used to select between USB host and device +// modes. Valid values are 0 through 7. +// +// Depends on: USB_ENABLE_UPDATE, USB_HAS_MUX +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_MUX_PIN 2 + +//***************************************************************************** +// +// Specifies the state of the GPIO pin required to select USB device-mode +// operation. Valid values are 0 (low) or 1 (high). +// +// Depends on: USB_ENABLE_UPDATE, USB_HAS_MUX +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_MUX_DEVICE 1 + +//***************************************************************************** +// +// Specifies whether the target board requires configuration of the pin used +// for VBUS. This applies to Blizzard class and later devices. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: USB_VBUS_PERIPH, USB_VBUS_PORT, USB_VBUS_PIN +// +//***************************************************************************** +//#define USB_VBUS_CONFIG + +//***************************************************************************** +// +// Specifies the GPIO peripheral containing the pin which is used for VBUS. +// The value is of the form SYSCTL_RCGCGPIO_Rx, where the Rx represents +// the required GPIO port. This applies to Blizzard class and later +// devices. +// +// Depends on: USB_ENABLE_UPDATE, USB_VBUS_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_VBUS_PERIPH SYSCTL_RCGCGPIO_R1 + +//***************************************************************************** +// +// Specifies the GPIO port containing the pin which is used for VBUS. The value +// is of the form GPIO_PORTx_BASE, where PORTx represents the required GPIO +// port. +// +// Depends on: USB_ENABLE_UPDATE, USB_VBUS_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_VBUS_PORT GPIO_PORTB_BASE + +//***************************************************************************** +// +// Specifies the GPIO pin number used for VBUS. Valid values are 0 through 7. +// +// Depends on: USB_ENABLE_UPDATE, USB_VBUS_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_VBUS_PIN 1 + +//***************************************************************************** +// +// Specifies whether the target board requires configuration of the pin used +// for ID. This applies to Blizzard class and later devices. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: USB_ID_PERIPH, USB_ID_PORT, USB_ID_PIN +// +//***************************************************************************** +//#define USB_ID_CONFIG + +//***************************************************************************** +// +// Specifies the GPIO peripheral containing the pin which is used for ID. +// The value is of the form SYSCTL_RCGCGPIO_Rx, where the Rx represents +// the required GPIO port. This applies to Blizzard class and later +// devices. +// +// Depends on: USB_ENABLE_UPDATE, USB_ID_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_ID_PERIPH SYSCTL_RCGCGPIO_R1 + +//***************************************************************************** +// +// Specifies the GPIO port containing the pin which is used for ID. The value +// is of the form GPIO_PORTx_BASE, where PORTx represents the required GPIO +// port. +// +// Depends on: USB_ENABLE_UPDATE, USB_ID_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_ID_PORT GPIO_PORTB_BASE + +//***************************************************************************** +// +// Specifies the GPIO pin number used for ID. Valid values are 0 through 7. +// +// Depends on: USB_ENABLE_UPDATE, USB_ID_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_ID_PIN 0 + +//***************************************************************************** +// +// Specifies whether the target board requires configuration of the pin used +// for DP. This applies to Blizzard class and later devices. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: USB_DP_PERIPH, USB_DP_PORT, USB_DP_PIN +// +//***************************************************************************** +//#define USB_DP_CONFIG + +//***************************************************************************** +// +// Specifies the GPIO peripheral containing the pin which is used for DP. +// The value is of the form SYSCTL_RCGCGPIO_Rx, where the Rx represents +// the required GPIO port. This applies to Blizzard class and later +// devices. +// +// Depends on: USB_ENABLE_UPDATE, USB_DP_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DP_PERIPH SYSCTL_RCGCGPIO_R10 + +//***************************************************************************** +// +// Specifies the GPIO port containing the pin which is used for DP. The value +// is of the form GPIO_PORTx_BASE, where PORTx represents the required GPIO +// port. +// +// Depends on: USB_ENABLE_UPDATE, USB_DP_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DP_PORT GPIO_PORTL_BASE + +//***************************************************************************** +// +// Specifies the GPIO pin number used for DP. Valid values are 0 through 7. +// +// Depends on: USB_ENABLE_UPDATE, USB_DP_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DP_PIN 6 + +//***************************************************************************** +// +// Specifies whether the target board requires configuration of the pin used +// for DM. This applies to Blizzard class and later devices. +// +// Depends on: USB_ENABLE_UPDATE +// Exclusive of: None +// Requires: USB_DM_PERIPH, USB_DM_PORT, USB_DM_PIN +// +//***************************************************************************** +//#define USB_DM_CONFIG + +//***************************************************************************** +// +// Specifies the GPIO peripheral containing the pin which is used for DM. +// The value is of the form SYSCTL_RCGCGPIO_Rx, where the Rx represents +// the required GPIO port. This applies to Blizzard class and later +// devices. +// +// Depends on: USB_ENABLE_UPDATE, USB_DM_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DM_PERIPH SYSCTL_RCGCGPIO_R10 + +//***************************************************************************** +// +// Specifies the GPIO port containing the pin which is used for DM. The value +// is of the form GPIO_PORTx_BASE, where PORTx represents the required GPIO +// port. +// +// Depends on: USB_ENABLE_UPDATE, USB_DM_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DM_PORT GPIO_PORTL_BASE + +//***************************************************************************** +// +// Specifies the GPIO pin number used for DM. Valid values are 0 through 7. +// +// Depends on: USB_ENABLE_UPDATE, USB_DM_CONFIG +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define USB_DM_PIN 7 + +//***************************************************************************** +// +// Selects an update via the CAN port. +// +// Depends on: None +// Exclusive of: ENET_ENABLE_UPDATE, I2C_ENABLE_UPDATE, SSI_ENABLE_UPDATE, +// UART_ENABLE_UPDATE, USB_ENABLE_UPDATE +// Requires: CAN_RX_PERIPH, CAN_RX_PORT, CAN_RX_PIN, CAN_TX_PERIPH, +// CAN_TX_PORT, CAN_TX_PIN, CAN_BIT_RATE, CRYSTAL_FREQ. +// +//***************************************************************************** +//#define CAN_ENABLE_UPDATE + +//***************************************************************************** +// +// Enables the UART to CAN bridging for use when the CAN port is selected for +// communicating with the boot loader. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_UART_BRIDGE + +//***************************************************************************** +// +// The GPIO module to enable in order to configure the CAN0 Rx pin. This will +// be one of the SYSCTL_RCGC2_GPIOx values, where "x" is replaced with the port +// name (such as B). The value of "x" should match the value of "x" for +// CAN_RX_PORT. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_RX_PERIPH SYSCTL_RCGC2_GPIOA + +//***************************************************************************** +// +// The GPIO port used to configure the CAN0 Rx pin. This will be one of the +// GPIO_PORTx_BASE values, where "x" is replaced with the port name (such as +// B). The value of "x" should match the value of "x" for CAN_RX_PERIPH. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_RX_PORT GPIO_PORTA_BASE + +//***************************************************************************** +// +// The GPIO pin that is shared with the CAN0 Rx pin. This is a value between 0 +// and 7. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_RX_PIN 4 + +//***************************************************************************** +// +// The GPIO module to enable in order to configure the CAN0 Tx pin. This will +// be one of the SYSCTL_RCGC2_GPIOx values, where "x" is replaced with the port +// name (such as B). The value of "x" should match the value of "x" for +// CAN_TX_PORT. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_TX_PERIPH SYSCTL_RCGC2_GPIOA + +//***************************************************************************** +// +// The GPIO port used to configure the CAN0 Tx pin. This will be one of the +// GPIO_PORTx_BASE values, where "x" is replaced with the port name (such as +// B). The value of "x" should match the value of "x" for CAN_TX_PERIPH. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_TX_PORT GPIO_PORTA_BASE + +//***************************************************************************** +// +// The GPIO pin that is shared with the CAN0 Tx pin. This is a value between 0 +// and 7. +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_TX_PIN 5 + +//***************************************************************************** +// +// The bit rate used on the CAN bus. This must be one of 20000, 50000, 125000, +// 250000, 500000, or 1000000. The CAN bit rate must be less than or equal to +// the crystal frequency divided by 8 (CRYSTAL_FREQ / 8). +// +// Depends on: CAN_ENABLE_UPDATE +// Exclusive of: None +// Requires: None +// +//***************************************************************************** +//#define CAN_BIT_RATE 1000000 + +//***************************************************************************** +// +// Performs application-specific low level hardware initialization on system +// reset. If hooked, this function will be called immediately after the boot +// loader code relocation completes. An application may perform any required +// low-level hardware initialization during this function. Note that the +// system clock has not been set when this function is called. Initialization +// that assumes the system clock is set may be performed in the BL_INIT_FN_HOOK +// function instead. +// +// void MyHwInitFunc(void); +// +//***************************************************************************** +//#define BL_HW_INIT_FN_HOOK MyHwInitFunc + +//***************************************************************************** +// +// Performs application-specific initialization on system reset. If hooked, +// this function will be called during boot loader initialization to perform +// any board- or application-specific initialization which is required. The +// function is called following a reset immediately after the selected boot +// loader peripheral has been configured and the system clock has been set. +// +// void MyInitFunc(void); +// +//***************************************************************************** +//#define BL_INIT_FN_HOOK MyInitFunc + +//***************************************************************************** +// +// Performs application-specific reinitialization on boot loader entry via SVC. +// If hooked, this function will be called during boot loader reinitialization +// to perform any board- or application-specific initialization which is +// required. The function is called following boot loader entry from an +// application, after any system clock rate adjustments have been made. +// +// void MyReinitFunc(void); +// +//***************************************************************************** +//#define BL_REINIT_FN_HOOK MyReinitFunc + +//***************************************************************************** +// +// Informs an application that a download is starting. If hooked, this +// function will be called when a firmware download is about to begin. The +// function is called after the first data packet of the download is received +// but before it has been written to flash. +// +// void MyStartFunc(void); +// +//***************************************************************************** +//#define BL_START_FN_HOOK MyStartFunc + +//***************************************************************************** +// +// Informs an application of download progress. If hooked, this function will +// be called periodically during a firmware download to provide progress +// information. The function is called after each data packet is received from +// the host. Parameters provide the number of bytes of data received and, in +// cases other than Ethernet update, the expected total number of bytes in the +// download (the TFTP protocol used by the Ethernet boot loader does not send +// the final image size before the download starts so in this case the ulTotal +// parameter is set to 0 to indicate that the size is unknown). +// +// void MyProgressFunc(unsigned long ulCompleted, unsigned long ulTotal); +// +//***************************************************************************** +//#define BL_PROGRESS_FN_HOOK MyProgressFunc + +//***************************************************************************** +// +// Informs an application that a download has completed. If hooked, this +// function will be called when a firmware download has just completed. The +// function is called after the final data packet of the download has been +// written to flash. +// +// void MyEndFunc(void); +// +//***************************************************************************** +//#define BL_END_FN_HOOK MyEndFunc + +//***************************************************************************** +// +// Allows an application to perform in-place data decryption during download. +// If hooked, this function will be called to perform in-place decryption of +// each data packet received during a firmware download. +// +// void MyDecryptionFunc(unsigned char *pucBuffer, unsigned long ulSize); +// +// This value takes precedence over ENABLE_DECRYPTION. If both are defined, +// the hook function defined using BL_DECRYPT_FN_HOOK is called rather than the +// previously-defined DecryptData() stub function. +// +//***************************************************************************** +//#define BL_DECRYPT_FN_HOOK MyDecryptionFunc + +//***************************************************************************** +// +// Allows an application to force a new firmware download. If hooked, this +// function will be called during boot loader initialization to determine +// whether a firmware update should be performed regardless of whether a valid +// main code image is already present. If the function returns 0, the existing +// main code image is booted (if present), otherwise the boot loader will wait +// for a new firmware image to be downloaded. +// +// unsigned long MyCheckUpdateFunc(void); +// +// This value takes precedence over ENABLE_UPDATE_CHECK} if both are defined. +// If you wish to perform a GPIO check in addition to any other update check +// processing required, the GPIO code must be included within the hook function +// itself. +// +//***************************************************************************** +//#define BL_CHECK_UPDATE_FN_HOOK MyCheckUpdateFunc + +//***************************************************************************** +// +// Allows an application to replace the flash block erase function. If hooked, +// this function will be called whenever a block of flash is to be erased. The +// function must erase the block and wait until the operation has completed. +// The size of the block which will be erased is defined by FLASH_BLOCK_SIZE. +// +// void MyFlashEraseFunc(unsigned long ulBlockAddr); +// +//***************************************************************************** +//#define BL_FLASH_ERASE_FN_HOOK MyFlashEraseFunc + +//***************************************************************************** +// +// Allows an application to replace the flash programming function. If hooked, +// this function will be called to program the flash with firmware image data +// received during download operations. The function must program the supplied +// data and wait until the operation has completed. +// +// void MyFlashProgramFunc(unsigned long ulDstAddr, +// unsigned char *pucSrcData, +// unsigned long ulLength); +// +//***************************************************************************** +//#define BL_FLASH_PROGRAM_FN_HOOK MyFlashProgramFunc + +//***************************************************************************** +// +// Allows an application to replace the flash error clear function. If hooked, +// this function must clear any flash error indicators and prepare to detect +// access violations that may occur in a future erase or program operations. +// +// void MyFlashClearErrorFunc(void); +// +//***************************************************************************** +//#define BL_FLASH_CL_ERR_FN_HOOK MyFlashClearErrorFunc + +//***************************************************************************** +// +// Reports whether or not a flash access violation error has occurred. If +// hooked, this function will be called after flash erase or program +// operations. The return code indicates whether or not an access violation +// error occurred since the last call to the function defined by +// BL_FLASH_CL_ERR_FN_HOOK, with 0 indicating no errors and non-zero indicating +// an error. +// +// unsigned long MyFlashErrorFunc(void); +// +//***************************************************************************** +//#define BL_FLASH_ERROR_FN_HOOK MyFlashErrorFunc + +//***************************************************************************** +// +// Reports the total size of the device flash. If hooked, this function will +// be called to determine the size of the supported flash device. The return +// code is the number of bytes of flash in the device. Note that this does not +// take into account any reserved space defined via the FLASH_RSVD_SPACE value. +// +// unsigned long MyFlashSizeFunc(void); +// +//***************************************************************************** +//#define BL_FLASH_SIZE_FN_HOOK MyFlashSizeFunc + +//***************************************************************************** +// +// Reports the address of the first byte after the end of the device flash. If +// hooked, this function will be called to determine the address of the end of +// valid flash. Note that this does not take into account any reserved space +// defined via the FLASH_RSVD_SPACE value. +// +// unsigned long MyFlashEndFunc(void); +// +//***************************************************************************** +//#define BL_FLASH_END_FN_HOOK MyFlashEndFunc + +//***************************************************************************** +// +// Checks whether the start address and size of an image are valid. If hooked, +// this function will be called when a new firmware download is about to start. +// Parameters provided are the requested start address for the new download +// and, when using protocols which transmit the image length in advance, the +// size of the image that is to be downloaded. The return code will be +// non-zero to indicate that the start address is valid and the image will fit +// in the available space, or 0 if either the address is invalid or the image +// is too large for the device. +// +// unsigned long MyFlashAddrCheckFunc(unsigned long ulAddr, +// unsigned long ulSize); +// +//***************************************************************************** +//#define BL_FLASH_AD_CHECK_FN_HOOK MyFlashAddrCheckFunc + +#endif // __BL_CONFIG_H__ diff --git a/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.c b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.c new file mode 100644 index 0000000..90c424d --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.c @@ -0,0 +1,52 @@ +//***************************************************************************** +// +// boot_emac_flash.c - Ethernet flash-based boot loader description. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// This file is just a stub to hold the following doc comments +// + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Ethernet flash-based Boot Loader (boot_emac_flash)

+//! +//! The boot loader is a small piece of code that can be programmed at the +//! beginning of flash to act as an application loader as well as an update +//! mechanism for an application running on a Tiva microcontroller, +//! utilizing either UART0, USB, or Ethernet. The capabilities of the +//! boot loader are configured via the bl_config.h include file. For this +//! example, the boot loader uses Ethernet to load an application. +//! +//! The configuration is set to boot applications which are linked to run from +//! address 0x4000 in flash. This is minimal address since the flash erase +//! size is 16K bytes. +//! +//! Please note that LMFlash programmer version number needs to be at +//! least 1588 or later. Older LMFlash programmer doesn't work with this +//! Ethernet boot loader. +//! +// +//***************************************************************************** + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewd b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewp b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewp new file mode 100644 index 0000000..c2f018f --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.ewp @@ -0,0 +1,821 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Source + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_autobaud.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_can.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_check.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_crc32.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_decrypt.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_emac.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_flash.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_i2c.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_main.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_packet.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_ssi.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_startup_ewarm.S + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_uart.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_usb.c + + + $PROJ_DIR$\..\..\..\..\boot_loader\bl_usbfuncs.c + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvopt b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvopt new file mode 100644 index 0000000..95b3fe5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvopt @@ -0,0 +1,450 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + boot_emac_flash + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_autobaud.c + bl_autobaud.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_can.c + bl_can.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_check.c + bl_check.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_crc32.c + bl_crc32.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_decrypt.c + bl_decrypt.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_emac.c + bl_emac.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_flash.c + bl_flash.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_i2c.c + bl_i2c.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_main.c + bl_main.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_packet.c + bl_packet.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_ssi.c + bl_ssi.c + + + 1 + 12 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_startup_rvmdk.S + bl_startup_rvmdk.S + + + 1 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_uart.c + bl_uart.c + + + 1 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_usb.c + bl_usb.c + + + 1 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\boot_loader\bl_usbfuncs.c + bl_usbfuncs.c + + + + + Documentation + 1 + 0 + 0 + + 2 + 16 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + ..\..\..\..\boot_loader\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + ..\..\..\..\boot_loader\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvproj b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvproj new file mode 100644 index 0000000..19b83e9 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/boot_emac_flash.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + boot_emac_flash + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + boot_emac_flash + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + armcc --device DLM -I . -E -o bl_config.inc ..\..\..\..\boot_loader\bl_config.c + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\boot_emac_flash.bin .\rvmdk\boot_emac_flash.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + .;..\..\..\..;..\..\..\..\boot_loader; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + ..\..\..\..\boot_loader\bl_link.sct + + + --entry Reset_Handler + + + + + + + + Source + + + bl_autobaud.c + 1 + ..\..\..\..\boot_loader\bl_autobaud.c + + + bl_can.c + 1 + ..\..\..\..\boot_loader\bl_can.c + + + bl_check.c + 1 + ..\..\..\..\boot_loader\bl_check.c + + + bl_crc32.c + 1 + ..\..\..\..\boot_loader\bl_crc32.c + + + bl_decrypt.c + 1 + ..\..\..\..\boot_loader\bl_decrypt.c + + + bl_emac.c + 1 + ..\..\..\..\boot_loader\bl_emac.c + + + bl_flash.c + 1 + ..\..\..\..\boot_loader\bl_flash.c + + + bl_i2c.c + 1 + ..\..\..\..\boot_loader\bl_i2c.c + + + bl_main.c + 1 + ..\..\..\..\boot_loader\bl_main.c + + + bl_packet.c + 1 + ..\..\..\..\boot_loader\bl_packet.c + + + bl_ssi.c + 1 + ..\..\..\..\boot_loader\bl_ssi.c + + + bl_startup_rvmdk.S + 2 + ..\..\..\..\boot_loader\bl_startup_rvmdk.S + + + bl_uart.c + 1 + ..\..\..\..\boot_loader\bl_uart.c + + + bl_usb.c + 1 + ..\..\..\..\boot_loader\bl_usb.c + + + bl_usbfuncs.c + 1 + ..\..\..\..\boot_loader\bl_usbfuncs.c + + + + + Documentation + + + readme.txt + 5 + ..\..\..\..\boot_loader\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsimportspec b/boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsimportspec new file mode 100644 index 0000000..34afca1 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsimportspec @@ -0,0 +1,6 @@ + + + + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsproject b/boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/.cproject b/boards/dk-tm4c129x/boot_emac_flash/ccs/.cproject new file mode 100644 index 0000000..deac956 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/.project b/boards/dk-tm4c129x/boot_emac_flash/ccs/.project new file mode 100644 index 0000000..28cdc3f --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/.project @@ -0,0 +1,115 @@ + + + boot_emac_flash + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + boot_loader/bl_autobaud.c + 1 + SW_ROOT/boot_loader/bl_autobaud.c + + + boot_loader/bl_can.c + 1 + SW_ROOT/boot_loader/bl_can.c + + + boot_loader/bl_check.c + 1 + SW_ROOT/boot_loader/bl_check.c + + + boot_loader/bl_crc32.c + 1 + SW_ROOT/boot_loader/bl_crc32.c + + + boot_loader/bl_decrypt.c + 1 + SW_ROOT/boot_loader/bl_decrypt.c + + + boot_loader/bl_emac.c + 1 + SW_ROOT/boot_loader/bl_emac.c + + + boot_loader/bl_flash.c + 1 + SW_ROOT/boot_loader/bl_flash.c + + + boot_loader/bl_i2c.c + 1 + SW_ROOT/boot_loader/bl_i2c.c + + + boot_loader/bl_link_ccs.cmd + 1 + SW_ROOT/boot_loader/bl_link_ccs.cmd + + + boot_loader/bl_main.c + 1 + SW_ROOT/boot_loader/bl_main.c + + + boot_loader/bl_packet.c + 1 + SW_ROOT/boot_loader/bl_packet.c + + + boot_loader/bl_ssi.c + 1 + SW_ROOT/boot_loader/bl_ssi.c + + + boot_loader/bl_startup_ccs.s + 1 + SW_ROOT/boot_loader/bl_startup_ccs.s + + + boot_loader/bl_uart.c + 1 + SW_ROOT/boot_loader/bl_uart.c + + + boot_loader/bl_usb.c + 1 + SW_ROOT/boot_loader/bl_usb.c + + + boot_loader/bl_usbfuncs.c + 1 + SW_ROOT/boot_loader/bl_usbfuncs.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/boot_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.bin b/boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.bin new file mode 100644 index 0000000..dfb0e29 Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.out b/boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.out new file mode 100644 index 0000000..4ec8675 Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/ccs/Debug/boot_emac_flash.out differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/macros.ini_initial b/boards/dk-tm4c129x/boot_emac_flash/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/boot_emac_flash/ccs/target_config.ccxml b/boards/dk-tm4c129x/boot_emac_flash/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/boot_emac_flash/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.bin b/boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.bin new file mode 100644 index 0000000..dafe35a Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.out b/boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.out new file mode 100644 index 0000000..dea28f2 Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/ewarm/Exe/boot_emac_flash.out differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.axf b/boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.axf new file mode 100644 index 0000000..4c137d9 Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.axf differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.bin b/boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.bin new file mode 100644 index 0000000..143cbbb Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/gcc/boot_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.axf b/boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.axf new file mode 100644 index 0000000..92e1988 Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.axf differ diff --git a/boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.bin b/boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.bin new file mode 100644 index 0000000..d4cc0ed Binary files /dev/null and b/boards/dk-tm4c129x/boot_emac_flash/rvmdk/boot_emac_flash.bin differ diff --git a/boards/dk-tm4c129x/calibrate/Makefile b/boards/dk-tm4c129x/calibrate/Makefile new file mode 100644 index 0000000..28d25a1 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/Makefile @@ -0,0 +1,92 @@ +#****************************************************************************** +# +# Makefile - Rules for building the calibrate example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the calibrate example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/calibrate.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the calibrate example. +# +${COMPILER}/calibrate.axf: ${COMPILER}/calibrate.o +${COMPILER}/calibrate.axf: ${COMPILER}/frame.o +${COMPILER}/calibrate.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/calibrate.axf: ${COMPILER}/pinout.o +${COMPILER}/calibrate.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/calibrate.axf: ${COMPILER}/touch.o +${COMPILER}/calibrate.axf: ${COMPILER}/ustdlib.o +${COMPILER}/calibrate.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/calibrate.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/calibrate.axf: calibrate.ld +SCATTERgcc_calibrate=calibrate.ld +ENTRY_calibrate=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/calibrate/calibrate.c b/boards/dk-tm4c129x/calibrate/calibrate.c new file mode 100644 index 0000000..ee16938 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.c @@ -0,0 +1,331 @@ +//***************************************************************************** +// +// calibrate.c - Calibration routine for the touch screen driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "utils/ustdlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Calibration for the Touch Screen (calibrate)

+//! +//! The raw sample interface of the touch screen driver is used to compute the +//! calibration matrix required to convert raw samples into screen X/Y +//! positions. The produced calibration matrix can be inserted into the touch +//! screen driver to map the raw samples into screen coordinates. +//! +//! The touch screen calibration is performed according to the algorithm +//! described by Carlos E. Videles in the June 2002 issue of Embedded Systems +//! Design. It can be found online at +//! +//! http://www.embedded.com/story/OEG20020529S0046. +// +//***************************************************************************** + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Performs calibration of the touch screen. +// +//***************************************************************************** +int +main(void) +{ + int32_t i32Idx, i32X1, i32Y1, i32X2, i32Y2, i32Count, ppi32Points[3][4]; + uint32_t ui32SysClock; + char pcBuffer[32]; + tContext sContext; + tRectangle sRect; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "calibrate"); + + // + // Print the instructions across the middle of the screen in white with a + // 20 point small-caps font. + // + GrContextForegroundSet(&sContext, ClrWhite); + GrContextFontSet(&sContext, g_psFontCmsc20); + GrStringDrawCentered(&sContext, "Touch the box", -1, + GrContextDpyWidthGet(&sContext) / 2, + (GrContextDpyHeightGet(&sContext) / 2) - 10, 0); + + // + // Set the points used for calibration based on the size of the screen. + // + ppi32Points[0][0] = GrContextDpyWidthGet(&sContext) / 10; + ppi32Points[0][1] = (GrContextDpyHeightGet(&sContext) * 2) / 10; + ppi32Points[1][0] = GrContextDpyWidthGet(&sContext) / 2; + ppi32Points[1][1] = (GrContextDpyHeightGet(&sContext) * 9) / 10; + ppi32Points[2][0] = (GrContextDpyWidthGet(&sContext) * 9) / 10; + ppi32Points[2][1] = GrContextDpyHeightGet(&sContext) / 2; + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Loop through the calibration points. + // + for(i32Idx = 0; i32Idx < 3; i32Idx++) + { + // + // Fill a white box around the calibration point. + // + GrContextForegroundSet(&sContext, ClrWhite); + sRect.i16XMin = ppi32Points[i32Idx][0] - 5; + sRect.i16YMin = ppi32Points[i32Idx][1] - 5; + sRect.i16XMax = ppi32Points[i32Idx][0] + 5; + sRect.i16YMax = ppi32Points[i32Idx][1] + 5; + GrRectFill(&sContext, &sRect); + + // + // Flush any cached drawing operations. + // + GrFlush(&sContext); + + // + // Initialize the raw sample accumulators and the sample count. + // + i32X1 = 0; + i32Y1 = 0; + i32Count = -5; + + // + // Loop forever. This loop is explicitly broken out of when the pen is + // lifted. + // + while(1) + { + // + // Grab the current raw touch screen position. + // + i32X2 = g_i16TouchX; + i32Y2 = g_i16TouchY; + + // + // See if the pen is up or down. + // + if((i32X2 < g_i16TouchMin) || (i32Y2 < g_i16TouchMin)) + { + // + // The pen is up, so see if any samples have been accumulated. + // + if(i32Count > 0) + { + // + // The pen has just been lifted from the screen, so break + // out of the controlling while loop. + // + break; + } + + // + // Reset the accumulators and sample count. + // + i32X1 = 0; + i32Y1 = 0; + i32Count = -5; + + // + // Grab the next sample. + // + continue; + } + + // + // Increment the count of samples. + // + i32Count++; + + // + // If the sample count is greater than zero, add this sample to the + // accumulators. + // + if(i32Count > 0) + { + i32X1 += i32X2; + i32Y1 += i32Y2; + } + } + + // + // Save the averaged raw ADC reading for this calibration point. + // + ppi32Points[i32Idx][2] = i32X1 / i32Count; + ppi32Points[i32Idx][3] = i32Y1 / i32Count; + + // + // Erase the box around this calibration point. + // + GrContextForegroundSet(&sContext, ClrBlack); + GrRectFill(&sContext, &sRect); + } + + // + // Clear the screen. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&sContext) - 1; + sRect.i16YMax = GrContextDpyHeightGet(&sContext) - 1; + GrRectFill(&sContext, &sRect); + + // + // Indicate that the calibration data is being displayed. + // + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDraw(&sContext, "Calibration data:", -1, 16, 32, 0); + + // + // Compute and display the M0 calibration value. + // + usprintf(pcBuffer, "M0 = %d", + (((ppi32Points[0][0] - ppi32Points[2][0]) * + (ppi32Points[1][3] - ppi32Points[2][3])) - + ((ppi32Points[1][0] - ppi32Points[2][0]) * + (ppi32Points[0][3] - ppi32Points[2][3])))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 72, 0); + + // + // Compute and display the M1 calibration value. + // + usprintf(pcBuffer, "M1 = %d", + (((ppi32Points[0][2] - ppi32Points[2][2]) * + (ppi32Points[1][0] - ppi32Points[2][0])) - + ((ppi32Points[0][0] - ppi32Points[2][0]) * + (ppi32Points[1][2] - ppi32Points[2][2])))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 92, 0); + + // + // Compute and display the M2 calibration value. + // + usprintf(pcBuffer, "M2 = %d", + ((((ppi32Points[2][2] * ppi32Points[1][0]) - + (ppi32Points[1][2] * ppi32Points[2][0])) * ppi32Points[0][3]) + + (((ppi32Points[0][2] * ppi32Points[2][0]) - + (ppi32Points[2][2] * ppi32Points[0][0])) * ppi32Points[1][3]) + + (((ppi32Points[1][2] * ppi32Points[0][0]) - + (ppi32Points[0][2] * ppi32Points[1][0])) * ppi32Points[2][3]))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 112, 0); + + // + // Compute and display the M3 calibration value. + // + usprintf(pcBuffer, "M3 = %d", + (((ppi32Points[0][1] - ppi32Points[2][1]) * + (ppi32Points[1][3] - ppi32Points[2][3])) - + ((ppi32Points[1][1] - ppi32Points[2][1]) * + (ppi32Points[0][3] - ppi32Points[2][3])))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 132, 0); + + // + // Compute and display the M4 calibration value. + // + usprintf(pcBuffer, "M4 = %d", + (((ppi32Points[0][2] - ppi32Points[2][2]) * + (ppi32Points[1][1] - ppi32Points[2][1])) - + ((ppi32Points[0][1] - ppi32Points[2][1]) * + (ppi32Points[1][2] - ppi32Points[2][2])))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 152, 0); + + // + // Compute and display the M5 calibration value. + // + usprintf(pcBuffer, "M5 = %d", + ((((ppi32Points[2][2] * ppi32Points[1][1]) - + (ppi32Points[1][2] * ppi32Points[2][1])) * ppi32Points[0][3]) + + (((ppi32Points[0][2] * ppi32Points[2][1]) - + (ppi32Points[2][2] * ppi32Points[0][1])) * ppi32Points[1][3]) + + (((ppi32Points[1][2] * ppi32Points[0][1]) - + (ppi32Points[0][2] * ppi32Points[1][1])) * ppi32Points[2][3]))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 172, 0); + + // + // Compute and display the M6 calibration value. + // + usprintf(pcBuffer, "M6 = %d", + (((ppi32Points[0][2] - ppi32Points[2][2]) * + (ppi32Points[1][3] - ppi32Points[2][3])) - + ((ppi32Points[1][2] - ppi32Points[2][2]) * + (ppi32Points[0][3] - ppi32Points[2][3])))); + GrStringDraw(&sContext, pcBuffer, -1, 16, 192, 0); + + // + // Flush any cached drawing operations. + // + GrFlush(&sContext); + + // + // The calibration is complete. Sit around and wait for a reset. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/calibrate/calibrate.ewd b/boards/dk-tm4c129x/calibrate/calibrate.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/calibrate/calibrate.ewp b/boards/dk-tm4c129x/calibrate/calibrate.ewp new file mode 100644 index 0000000..c5233ec --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.ewp @@ -0,0 +1,804 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\calibrate.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/calibrate/calibrate.icf b/boards/dk-tm4c129x/calibrate/calibrate.icf new file mode 100644 index 0000000..e5bcbc9 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// calibrate.icf - Linker configuration file for calibrate. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/calibrate/calibrate.ld b/boards/dk-tm4c129x/calibrate/calibrate.ld new file mode 100644 index 0000000..f01d3ca --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * calibrate.ld - Linker configuration file for calibrate. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/calibrate/calibrate.sct b/boards/dk-tm4c129x/calibrate/calibrate.sct new file mode 100644 index 0000000..f0e0d31 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; calibrate.sct - Linker configuration file for calibrate. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/calibrate/calibrate.uvopt b/boards/dk-tm4c129x/calibrate/calibrate.uvopt new file mode 100644 index 0000000..0887712 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.uvopt @@ -0,0 +1,373 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + calibrate + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\calibrate.c + calibrate.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 10 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/calibrate/calibrate.uvproj b/boards/dk-tm4c129x/calibrate/calibrate.uvproj new file mode 100644 index 0000000..cde2008 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate.uvproj @@ -0,0 +1,454 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + calibrate + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + calibrate + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\calibrate.bin .\rvmdk\calibrate.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + calibrate.sct + + + --entry Reset_Handler + + + + + + + + Source + + + calibrate.c + 1 + .\calibrate.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/calibrate/calibrate_ccs.cmd b/boards/dk-tm4c129x/calibrate/calibrate_ccs.cmd new file mode 100644 index 0000000..155d9ce --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/calibrate_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * calibrate_ccs.cmd - CCS linker configuration file for calibrate. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/calibrate/ccs/.ccsimportspec b/boards/dk-tm4c129x/calibrate/ccs/.ccsimportspec new file mode 100644 index 0000000..6e08123 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/calibrate/ccs/.ccsproject b/boards/dk-tm4c129x/calibrate/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/calibrate/ccs/.cproject b/boards/dk-tm4c129x/calibrate/ccs/.cproject new file mode 100644 index 0000000..a64e368 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/calibrate/ccs/.project b/boards/dk-tm4c129x/calibrate/ccs/.project new file mode 100644 index 0000000..2e27478 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/.project @@ -0,0 +1,75 @@ + + + calibrate + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + calibrate.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/calibrate/calibrate.c + + + calibrate_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/calibrate/calibrate_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/calibrate/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/calibrate/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/calibrate/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.bin b/boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.bin new file mode 100644 index 0000000..335f594 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.bin differ diff --git a/boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.out b/boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.out new file mode 100644 index 0000000..2a25072 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/ccs/Debug/calibrate.out differ diff --git a/boards/dk-tm4c129x/calibrate/ccs/macros.ini_initial b/boards/dk-tm4c129x/calibrate/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/calibrate/ccs/target_config.ccxml b/boards/dk-tm4c129x/calibrate/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.bin b/boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.bin new file mode 100644 index 0000000..1d8f585 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.bin differ diff --git a/boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.out b/boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.out new file mode 100644 index 0000000..ed88518 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/ewarm/Exe/calibrate.out differ diff --git a/boards/dk-tm4c129x/calibrate/gcc/calibrate.axf b/boards/dk-tm4c129x/calibrate/gcc/calibrate.axf new file mode 100644 index 0000000..fae7625 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/gcc/calibrate.axf differ diff --git a/boards/dk-tm4c129x/calibrate/gcc/calibrate.bin b/boards/dk-tm4c129x/calibrate/gcc/calibrate.bin new file mode 100644 index 0000000..938bcc4 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/gcc/calibrate.bin differ diff --git a/boards/dk-tm4c129x/calibrate/readme.txt b/boards/dk-tm4c129x/calibrate/readme.txt new file mode 100644 index 0000000..47cf4f1 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/readme.txt @@ -0,0 +1,32 @@ +Calibration for the Touch Screen + +The raw sample interface of the touch screen driver is used to compute the +calibration matrix required to convert raw samples into screen X/Y +positions. The produced calibration matrix can be inserted into the touch +screen driver to map the raw samples into screen coordinates. + +The touch screen calibration is performed according to the algorithm +described by Carlos E. Videles in the June 2002 issue of Embedded Systems +Design. It can be found online at + +http://www.embedded.com/story/OEG20020529S0046. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/calibrate/rvmdk/calibrate.axf b/boards/dk-tm4c129x/calibrate/rvmdk/calibrate.axf new file mode 100644 index 0000000..f991ec4 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/rvmdk/calibrate.axf differ diff --git a/boards/dk-tm4c129x/calibrate/rvmdk/calibrate.bin b/boards/dk-tm4c129x/calibrate/rvmdk/calibrate.bin new file mode 100644 index 0000000..a1b0516 Binary files /dev/null and b/boards/dk-tm4c129x/calibrate/rvmdk/calibrate.bin differ diff --git a/boards/dk-tm4c129x/calibrate/startup_ccs.c b/boards/dk-tm4c129x/calibrate/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/calibrate/startup_ewarm.c b/boards/dk-tm4c129x/calibrate/startup_ewarm.c new file mode 100644 index 0000000..860b8a6 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/calibrate/startup_gcc.c b/boards/dk-tm4c129x/calibrate/startup_gcc.c new file mode 100644 index 0000000..fad3049 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/calibrate/startup_rvmdk.S b/boards/dk-tm4c129x/calibrate/startup_rvmdk.S new file mode 100644 index 0000000..07659c1 --- /dev/null +++ b/boards/dk-tm4c129x/calibrate/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/crc32/Makefile b/boards/dk-tm4c129x/crc32/Makefile new file mode 100644 index 0000000..37e6da9 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the CRC32 Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the CRC32 Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/crc32.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the CRC32 Demo. +# +${COMPILER}/crc32.axf: ${COMPILER}/crc32.o +${COMPILER}/crc32.axf: ${COMPILER}/frame.o +${COMPILER}/crc32.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/crc32.axf: ${COMPILER}/pinout.o +${COMPILER}/crc32.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/crc32.axf: ${COMPILER}/uartstdio.o +${COMPILER}/crc32.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/crc32.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/crc32.axf: crc32.ld +SCATTERgcc_crc32=crc32.ld +ENTRY_crc32=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/crc32/ccs/.ccsimportspec b/boards/dk-tm4c129x/crc32/ccs/.ccsimportspec new file mode 100644 index 0000000..28f3e67 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/crc32/ccs/.ccsproject b/boards/dk-tm4c129x/crc32/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/crc32/ccs/.cproject b/boards/dk-tm4c129x/crc32/ccs/.cproject new file mode 100644 index 0000000..cd9f8e6 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/crc32/ccs/.project b/boards/dk-tm4c129x/crc32/ccs/.project new file mode 100644 index 0000000..b8532d1 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/.project @@ -0,0 +1,70 @@ + + + crc32 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + crc32.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/crc32/crc32.c + + + crc32_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/crc32/crc32_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/crc32/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/crc32/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/crc32/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/crc32/ccs/Debug/crc32.bin b/boards/dk-tm4c129x/crc32/ccs/Debug/crc32.bin new file mode 100644 index 0000000..3eaa73f Binary files /dev/null and b/boards/dk-tm4c129x/crc32/ccs/Debug/crc32.bin differ diff --git a/boards/dk-tm4c129x/crc32/ccs/Debug/crc32.out b/boards/dk-tm4c129x/crc32/ccs/Debug/crc32.out new file mode 100644 index 0000000..1b04299 Binary files /dev/null and b/boards/dk-tm4c129x/crc32/ccs/Debug/crc32.out differ diff --git a/boards/dk-tm4c129x/crc32/ccs/macros.ini_initial b/boards/dk-tm4c129x/crc32/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/crc32/ccs/target_config.ccxml b/boards/dk-tm4c129x/crc32/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/crc32/crc32.c b/boards/dk-tm4c129x/crc32/crc32.c new file mode 100644 index 0000000..72e4b9b --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.c @@ -0,0 +1,482 @@ +//***************************************************************************** +// +// crc32.c - Simple CRC-32 demo +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ccm.h" +#include "inc/hw_memmap.h" +#include "driverlib/crc.h" +#include "driverlib/debug.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

CRC-32 Demo (crc32)

+//! +//! Simple demo showing an CRC-32 operation using the CCM module. +//! +//! Please note that the use of uDMA is not required for the operation of the +//! CRC module. It is for demostration purposes only. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Random data for use with the test vectors. +// +//***************************************************************************** +uint32_t g_pui32RandomData[] = +{ + 0x8a5f1b22, 0xcb935d29, 0xcc1ac092, 0x5dad8c9e, 0x6a83b39f, 0x8607dc60, + 0xda0ba4d2, 0xf49b0fa2, 0xaf35d524, 0xffa8001d, 0xbcc931e8, 0x4a2c99ef, + 0x7fa297ab, 0xab943bae, 0x07c61cc4, 0x47c8627d +}; + +//***************************************************************************** +// +// Test Vector Structure +// +//***************************************************************************** +typedef struct CRCTestVectorStruct +{ + uint32_t ui32TestNumber; + uint32_t ui32Seed; + uint32_t ui32Result; +} +tCRCTestVector; + +//***************************************************************************** +// +// CRC-32 Test Vectors +// +//***************************************************************************** +tCRCTestVector g_psCRC4C11DB7TestVectors[3] = +{ + { + 0, + 0x00000000, + 0xbcc90d0d + }, + { + 1, + 0xffffffff, + 0x2ff0435c + }, + { + 2, + 0xa5a5a5a5, + 0x75fd6f5c + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Process data to produce a CRC-32 checksum. +// +//***************************************************************************** +uint32_t +CRC32DataProcess(uint32_t *pui32Data, uint32_t ui32Length, uint32_t ui32Seed, + bool bUseDMA) +{ + uint32_t ui32Result; + + // + // Perform a soft reset. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + } + + // + // Configure the CRC engine. + // + ROM_CRCConfigSet(CCM0_BASE, (CRC_CFG_INIT_SEED | CRC_CFG_TYPE_P4C11DB7 | + CRC_CFG_SIZE_32BIT)); + + // + // Write the seed. + // + ROM_CRCSeedSet(CCM0_BASE, ui32Seed); + + // + // Generate CRC using uDMA to copy data. + // + if(bUseDMA) + { + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH30_SW); + ROM_uDMAChannelAttributeDisable(UDMA_CH30_SW, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH30_SW | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_1 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH30_SW | UDMA_PRI_SELECT, + UDMA_MODE_AUTO, (void *)g_pui32RandomData, + (void *)(CCM0_BASE + CCM_O_CRCDIN), + ui32Length); + ROM_uDMAChannelEnable(UDMA_CH30_SW); + UARTprintf(" Data in DMA request enabled.\n"); + + // + // Start the uDMA. + // + ROM_uDMAChannelRequest(UDMA_CH30_SW | UDMA_PRI_SELECT); + + // + // Wait for the transfer to finish. + // + while(ROM_uDMAChannelIsEnabled(UDMA_CH30_SW)) + { + } + + // + // Read the result. + // + ui32Result = ROM_CRCResultRead(CCM0_BASE, false); + } + + // + // Generate CRC using CPU to copy data. + // + else + { + ui32Result = ROM_CRCDataProcess(CCM0_BASE, g_pui32RandomData, + ui32Length, false); + } + + return(ui32Result); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// Initialize the CRC and CCM modules. +// +//***************************************************************************** +bool +CRCInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// This example performs a CRC-32 operation on an array of data using a +// number of starting seeds. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Result, ui32Errors, ui32Idx, ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "crc32-demo"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting CRC-32 demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CRC and CCM modules. + // + if(!CRCInit()) + { + UARTprintf("Initialization of the CRC module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Run through the test vectors. + // + for(ui32Idx = 0; + ui32Idx < (sizeof(g_psCRC4C11DB7TestVectors) / sizeof(tCRCTestVector)); + ui32Idx++) + { + UARTprintf("Starting vector #%d\n", ui32Idx); + + // + // Generate the checksum without uDMA. + // + UARTprintf("Generating CRC-32 checksum without uDMA.\n"); + ui32Result = + CRC32DataProcess(g_pui32RandomData, + (sizeof(g_pui32RandomData) / 4), + g_psCRC4C11DB7TestVectors[ui32Idx].ui32Seed, + false); + + if(ui32Result != g_psCRC4C11DB7TestVectors[ui32Idx].ui32Result) + { + UARTprintf("CRC result mismatch - Exp: 0x%08x, Act: 0x%08x\n", + g_psCRC4C11DB7TestVectors[ui32Idx].ui32Result, + ui32Result); + } + + // + // Generate the checksum with uDMA. + // + UARTprintf("Generating CRC-32 checksum with uDMA.\n"); + ui32Result = + CRC32DataProcess(g_pui32RandomData, + (sizeof(g_pui32RandomData) / 4), + g_psCRC4C11DB7TestVectors[ui32Idx].ui32Seed, + true); + + if(ui32Result != g_psCRC4C11DB7TestVectors[ui32Idx].ui32Result) + { + UARTprintf("CRC result mismatch - Exp: 0x%08x, Act: 0x%08x\n", + g_psCRC4C11DB7TestVectors[ui32Idx].ui32Result, + ui32Result); + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/crc32/crc32.ewd b/boards/dk-tm4c129x/crc32/crc32.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/crc32/crc32.ewp b/boards/dk-tm4c129x/crc32/crc32.ewp new file mode 100644 index 0000000..5e9f117 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\crc32.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/crc32/crc32.icf b/boards/dk-tm4c129x/crc32/crc32.icf new file mode 100644 index 0000000..24b3339 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// crc32.icf - Linker configuration file for crc32. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/crc32/crc32.ld b/boards/dk-tm4c129x/crc32/crc32.ld new file mode 100644 index 0000000..ab51ed6 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * crc32.ld - Linker configuration file for crc32. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/crc32/crc32.sct b/boards/dk-tm4c129x/crc32/crc32.sct new file mode 100644 index 0000000..409bac3 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; crc32.sct - Linker configuration file for crc32. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/crc32/crc32.uvopt b/boards/dk-tm4c129x/crc32/crc32.uvopt new file mode 100644 index 0000000..d56f2d6 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + crc32 + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\crc32.c + crc32.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/crc32/crc32.uvproj b/boards/dk-tm4c129x/crc32/crc32.uvproj new file mode 100644 index 0000000..c38009d --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + crc32 + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + crc32 + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\crc32.bin .\rvmdk\crc32.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + crc32.sct + + + --entry Reset_Handler + + + + + + + + Source + + + crc32.c + 1 + .\crc32.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/crc32/crc32_ccs.cmd b/boards/dk-tm4c129x/crc32/crc32_ccs.cmd new file mode 100644 index 0000000..2177b9b --- /dev/null +++ b/boards/dk-tm4c129x/crc32/crc32_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * crc32_ccs.cmd - CCS linker configuration file for crc32. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.bin b/boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.bin new file mode 100644 index 0000000..2d5a6bc Binary files /dev/null and b/boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.bin differ diff --git a/boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.out b/boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.out new file mode 100644 index 0000000..202700b Binary files /dev/null and b/boards/dk-tm4c129x/crc32/ewarm/Exe/crc32.out differ diff --git a/boards/dk-tm4c129x/crc32/gcc/crc32.axf b/boards/dk-tm4c129x/crc32/gcc/crc32.axf new file mode 100644 index 0000000..b2f0933 Binary files /dev/null and b/boards/dk-tm4c129x/crc32/gcc/crc32.axf differ diff --git a/boards/dk-tm4c129x/crc32/gcc/crc32.bin b/boards/dk-tm4c129x/crc32/gcc/crc32.bin new file mode 100644 index 0000000..871e08b Binary files /dev/null and b/boards/dk-tm4c129x/crc32/gcc/crc32.bin differ diff --git a/boards/dk-tm4c129x/crc32/readme.txt b/boards/dk-tm4c129x/crc32/readme.txt new file mode 100644 index 0000000..6014a90 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/readme.txt @@ -0,0 +1,26 @@ +CRC-32 Demo + +Simple demo showing an CRC-32 operation using the CCM module. + +Please note that the use of uDMA is not required for the operation of the +CRC module. It is for demostration purposes only. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/crc32/rvmdk/crc32.axf b/boards/dk-tm4c129x/crc32/rvmdk/crc32.axf new file mode 100644 index 0000000..9c8f521 Binary files /dev/null and b/boards/dk-tm4c129x/crc32/rvmdk/crc32.axf differ diff --git a/boards/dk-tm4c129x/crc32/rvmdk/crc32.bin b/boards/dk-tm4c129x/crc32/rvmdk/crc32.bin new file mode 100644 index 0000000..bff5ff5 Binary files /dev/null and b/boards/dk-tm4c129x/crc32/rvmdk/crc32.bin differ diff --git a/boards/dk-tm4c129x/crc32/startup_ccs.c b/boards/dk-tm4c129x/crc32/startup_ccs.c new file mode 100644 index 0000000..a769216 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/startup_ccs.c @@ -0,0 +1,268 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/crc32/startup_ewarm.c b/boards/dk-tm4c129x/crc32/startup_ewarm.c new file mode 100644 index 0000000..d029bd0 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/startup_ewarm.c @@ -0,0 +1,299 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/crc32/startup_gcc.c b/boards/dk-tm4c129x/crc32/startup_gcc.c new file mode 100644 index 0000000..ae455f8 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/startup_gcc.c @@ -0,0 +1,315 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/crc32/startup_rvmdk.S b/boards/dk-tm4c129x/crc32/startup_rvmdk.S new file mode 100644 index 0000000..6ee1b83 --- /dev/null +++ b/boards/dk-tm4c129x/crc32/startup_rvmdk.S @@ -0,0 +1,324 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/dk-tm4c129x.eww b/boards/dk-tm4c129x/dk-tm4c129x.eww new file mode 100644 index 0000000..d5ba7a9 --- /dev/null +++ b/boards/dk-tm4c129x/dk-tm4c129x.eww @@ -0,0 +1,464 @@ + + + + + $WS_DIR$\..\..\..\driverlib\driverlib.ewp + + + $WS_DIR$\..\..\..\grlib\grlib.ewp + + + $WS_DIR$\..\..\..\usblib\usblib.ewp + + + $WS_DIR$\aes_cbc_decrypt\aes_cbc_decrypt.ewp + + + $WS_DIR$\aes_cbc_encrypt\aes_cbc_encrypt.ewp + + + $WS_DIR$\aes_ccm_decrypt\aes_ccm_decrypt.ewp + + + $WS_DIR$\aes_ccm_encrypt\aes_ccm_encrypt.ewp + + + $WS_DIR$\aes_cmac\aes_cmac.ewp + + + $WS_DIR$\aes_ecb_decrypt\aes_ecb_decrypt.ewp + + + $WS_DIR$\aes_ecb_encrypt\aes_ecb_encrypt.ewp + + + $WS_DIR$\aes_gcm_decrypt\aes_gcm_decrypt.ewp + + + $WS_DIR$\aes_gcm_encrypt\aes_gcm_encrypt.ewp + + + $WS_DIR$\bitband\bitband.ewp + + + $WS_DIR$\ble_btool\ble_btool.ewp + + + $WS_DIR$\ble_central\ble_central.ewp + + + $WS_DIR$\blinky\blinky.ewp + + + $WS_DIR$\boot_demo_uart\boot_demo_uart.ewp + + + $WS_DIR$\boot_demo_usb\boot_demo_usb.ewp + + + $WS_DIR$\boot_demo_emac_flash\boot_demo_emac_flash.ewp + + + $WS_DIR$\boot_demo_flash\boot_demo_flash.ewp + + + $WS_DIR$\boot_emac_flash\boot_emac_flash.ewp + + + $WS_DIR$\calibrate\calibrate.ewp + + + $WS_DIR$\crc32\crc32.ewp + + + $WS_DIR$\enet_io\enet_io.ewp + + + $WS_DIR$\enet_lwip\enet_lwip.ewp + + + $WS_DIR$\enet_uip\enet_uip.ewp + + + $WS_DIR$\fontview\fontview.ewp + + + $WS_DIR$\freertos_demo\freertos_demo.ewp + + + $WS_DIR$\gpio_jtag\gpio_jtag.ewp + + + $WS_DIR$\grlib_demo\grlib_demo.ewp + + + $WS_DIR$\grlib_driver_test\grlib_driver_test.ewp + + + $WS_DIR$\hello\hello.ewp + + + $WS_DIR$\hello_widget\hello_widget.ewp + + + $WS_DIR$\hibernate\hibernate.ewp + + + $WS_DIR$\interrupts\interrupts.ewp + + + $WS_DIR$\lang_demo\lang_demo.ewp + + + $WS_DIR$\mpu_fault\mpu_fault.ewp + + + $WS_DIR$\qs_weather\qs_weather.ewp + + + $WS_DIR$\scribble\scribble.ewp + + + $WS_DIR$\sd_card\sd_card.ewp + + + $WS_DIR$\sha1_hash\sha1_hash.ewp + + + $WS_DIR$\sha1_hmac\sha1_hmac.ewp + + + $WS_DIR$\synth\synth.ewp + + + $WS_DIR$\tamper\tamper.ewp + + + $WS_DIR$\tdes_cbc_decrypt\tdes_cbc_decrypt.ewp + + + $WS_DIR$\tdes_cbc_encrypt\tdes_cbc_encrypt.ewp + + + $WS_DIR$\timers\timers.ewp + + + $WS_DIR$\uart_echo\uart_echo.ewp + + + $WS_DIR$\udma_demo\udma_demo.ewp + + + $WS_DIR$\usb_dev_bulk\usb_dev_bulk.ewp + + + $WS_DIR$\usb_dev_chid\usb_dev_chid.ewp + + + $WS_DIR$\usb_dev_gamepad\usb_dev_gamepad.ewp + + + $WS_DIR$\usb_dev_keyboard\usb_dev_keyboard.ewp + + + $WS_DIR$\usb_dev_msc\usb_dev_msc.ewp + + + $WS_DIR$\usb_dev_serial\usb_dev_serial.ewp + + + $WS_DIR$\usb_host_audio\usb_host_audio.ewp + + + $WS_DIR$\usb_host_audio_in\usb_host_audio_in.ewp + + + $WS_DIR$\usb_host_hub\usb_host_hub.ewp + + + $WS_DIR$\usb_host_keyboard\usb_host_keyboard.ewp + + + $WS_DIR$\usb_host_mouse\usb_host_mouse.ewp + + + $WS_DIR$\usb_host_msc\usb_host_msc.ewp + + + $WS_DIR$\usb_otg_mouse\usb_otg_mouse.ewp + + + $WS_DIR$\usb_stick_demo\usb_stick_demo.ewp + + + $WS_DIR$\usb_stick_update\usb_stick_update.ewp + + + $WS_DIR$\watchdog\watchdog.ewp + + + + All Examples + + driverlib + Debug + + + grlib + Debug + + + usblib + Debug + + + aes_cbc_decrypt + Debug + + + aes_cbc_encrypt + Debug + + + aes_ccm_decrypt + Debug + + + aes_ccm_encrypt + Debug + + + aes_cmac + Debug + + + aes_ecb_decrypt + Debug + + + aes_ecb_encrypt + Debug + + + aes_gcm_decrypt + Debug + + + aes_gcm_encrypt + Debug + + + bitband + Debug + + + ble_btool + Debug + + + ble_central + Debug + + + blinky + Debug + + + boot_demo_uart + Debug + + + boot_demo_usb + Debug + + + boot_demo_emac_flash + Debug + + + boot_demo_flash + Debug + + + boot_emac_flash + Debug + + + calibrate + Debug + + + crc32 + Debug + + + enet_io + Debug + + + enet_lwip + Debug + + + enet_uip + Debug + + + fontview + Debug + + + freertos_demo + Debug + + + gpio_jtag + Debug + + + grlib_demo + Debug + + + grlib_driver_test + Debug + + + hello + Debug + + + hello_widget + Debug + + + hibernate + Debug + + + interrupts + Debug + + + lang_demo + Debug + + + mpu_fault + Debug + + + qs_weather + Debug + + + scribble + Debug + + + sd_card + Debug + + + sha1_hash + Debug + + + sha1_hmac + Debug + + + synth + Debug + + + tamper + Debug + + + tdes_cbc_decrypt + Debug + + + tdes_cbc_encrypt + Debug + + + timers + Debug + + + uart_echo + Debug + + + udma_demo + Debug + + + usb_dev_bulk + Debug + + + usb_dev_chid + Debug + + + usb_dev_gamepad + Debug + + + usb_dev_keyboard + Debug + + + usb_dev_msc + Debug + + + usb_dev_serial + Debug + + + usb_host_audio + Debug + + + usb_host_audio_in + Debug + + + usb_host_hub + Debug + + + usb_host_keyboard + Debug + + + usb_host_mouse + Debug + + + usb_host_msc + Debug + + + usb_otg_mouse + Debug + + + usb_stick_demo + Debug + + + usb_stick_update + Debug + + + watchdog + Debug + + + + diff --git a/boards/dk-tm4c129x/dk-tm4c129x.uvmpw b/boards/dk-tm4c129x/dk-tm4c129x.uvmpw new file mode 100644 index 0000000..e00306c --- /dev/null +++ b/boards/dk-tm4c129x/dk-tm4c129x.uvmpw @@ -0,0 +1,335 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + dk-tm4c129x + + + ..\..\..\driverlib\driverlib.uvproj + 1 + + + + ..\..\..\grlib\grlib.uvproj + 1 + + + + ..\..\..\usblib\usblib.uvproj + 1 + + + + .\aes_cbc_decrypt\aes_cbc_decrypt.uvproj + 1 + + + + .\aes_cbc_encrypt\aes_cbc_encrypt.uvproj + 1 + + + + .\aes_ccm_decrypt\aes_ccm_decrypt.uvproj + 1 + + + + .\aes_ccm_encrypt\aes_ccm_encrypt.uvproj + 1 + + + + .\aes_cmac\aes_cmac.uvproj + 1 + + + + .\aes_ecb_decrypt\aes_ecb_decrypt.uvproj + 1 + + + + .\aes_ecb_encrypt\aes_ecb_encrypt.uvproj + 1 + + + + .\aes_gcm_decrypt\aes_gcm_decrypt.uvproj + 1 + + + + .\aes_gcm_encrypt\aes_gcm_encrypt.uvproj + 1 + + + + .\bitband\bitband.uvproj + 1 + + + + .\ble_btool\ble_btool.uvproj + 1 + + + + .\ble_central\ble_central.uvproj + 1 + + + + .\blinky\blinky.uvproj + 1 + + + + .\boot_demo_uart\boot_demo_uart.uvproj + 1 + + + + .\boot_demo_usb\boot_demo_usb.uvproj + 1 + + + + .\boot_demo_emac_flash\boot_demo_emac_flash.uvproj + 1 + + + + .\boot_demo_flash\boot_demo_flash.uvproj + 1 + + + + .\boot_emac_flash\boot_emac_flash.uvproj + 1 + + + + .\calibrate\calibrate.uvproj + 1 + + + + .\crc32\crc32.uvproj + 1 + + + + .\enet_io\enet_io.uvproj + 1 + + + + .\enet_lwip\enet_lwip.uvproj + 1 + + + + .\enet_uip\enet_uip.uvproj + 1 + + + + .\fontview\fontview.uvproj + 1 + + + + .\freertos_demo\freertos_demo.uvproj + 1 + + + + .\gpio_jtag\gpio_jtag.uvproj + 1 + + + + .\grlib_demo\grlib_demo.uvproj + 1 + + + + .\grlib_driver_test\grlib_driver_test.uvproj + 1 + + + + .\hello\hello.uvproj + 1 + + + + .\hello_widget\hello_widget.uvproj + 1 + + + + .\hibernate\hibernate.uvproj + 1 + + + + .\interrupts\interrupts.uvproj + 1 + + + + .\lang_demo\lang_demo.uvproj + 1 + + + + .\mpu_fault\mpu_fault.uvproj + 1 + + + + .\qs_weather\qs_weather.uvproj + 1 + + + + .\scribble\scribble.uvproj + 1 + + + + .\sd_card\sd_card.uvproj + 1 + + + + .\sha1_hash\sha1_hash.uvproj + 1 + + + + .\sha1_hmac\sha1_hmac.uvproj + 1 + + + + .\synth\synth.uvproj + 1 + + + + .\tamper\tamper.uvproj + 1 + + + + .\tdes_cbc_decrypt\tdes_cbc_decrypt.uvproj + 1 + + + + .\tdes_cbc_encrypt\tdes_cbc_encrypt.uvproj + 1 + + + + .\timers\timers.uvproj + 1 + + + + .\uart_echo\uart_echo.uvproj + 1 + + + + .\udma_demo\udma_demo.uvproj + 1 + + + + .\usb_dev_bulk\usb_dev_bulk.uvproj + 1 + + + + .\usb_dev_chid\usb_dev_chid.uvproj + 1 + + + + .\usb_dev_gamepad\usb_dev_gamepad.uvproj + 1 + + + + .\usb_dev_keyboard\usb_dev_keyboard.uvproj + 1 + + + + .\usb_dev_msc\usb_dev_msc.uvproj + 1 + + + + .\usb_dev_serial\usb_dev_serial.uvproj + 1 + + + + .\usb_host_audio\usb_host_audio.uvproj + 1 + + + + .\usb_host_audio_in\usb_host_audio_in.uvproj + 1 + + + + .\usb_host_hub\usb_host_hub.uvproj + 1 + + + + .\usb_host_keyboard\usb_host_keyboard.uvproj + 1 + + + + .\usb_host_mouse\usb_host_mouse.uvproj + 1 + + + + .\usb_host_msc\usb_host_msc.uvproj + 1 + + + + .\usb_otg_mouse\usb_otg_mouse.uvproj + 1 + + + + .\usb_stick_demo\usb_stick_demo.uvproj + 1 + + + + .\usb_stick_update\usb_stick_update.uvproj + 1 + + + + .\watchdog\watchdog.uvproj + 1 + + +
diff --git a/boards/dk-tm4c129x/drivers/buttons.c b/boards/dk-tm4c129x/drivers/buttons.c new file mode 100644 index 0000000..d752c24 --- /dev/null +++ b/boards/dk-tm4c129x/drivers/buttons.c @@ -0,0 +1,261 @@ +//***************************************************************************** +// +// buttons.c - DK-TM4C129X development board buttons driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "inc/hw_memmap.h" +#include "inc/hw_gpio.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/pin_map.h" +#include "driverlib/gpio.h" +#include "drivers/buttons.h" + +//***************************************************************************** +// +//! \addtogroup buttons_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// Holds the current, debounced state of each button. A 0 in a bit indicates +// that that button is currently pressed, otherwise it is released. +// We assume that we start with all the buttons released (though if one is +// pressed when the application starts, this will be detected). +// +//***************************************************************************** +static uint8_t g_ui8ButtonStates; + +static uint8_t g_uiButtonsEnabled; + +//***************************************************************************** +// +//! Polls the current state of the buttons and determines which have changed. +//! +//! \param pui8Delta points to a character that will be written to indicate +//! which button states changed since the last time this function was called. +//! This value is derived from the debounced state of the buttons. +//! \param pui8RawState points to a location where the raw button state will +//! be stored. +//! +//! This function should be called periodically by the application to poll the +//! pushbuttons. It determines both the current debounced state of the buttons +//! and also which buttons have changed state since the last time the function +//! was called. +//! +//! In order for button debouncing to work properly, this function should be +//! caled at a regular interval, even if the state of the buttons is not needed +//! that often. +//! +//! If button debouncing is not required, the the caller can pass a pointer +//! for the \e pui8RawState parameter in order to get the raw state of the +//! buttons. The value returned in \e pui8RawState will be a bit mask where +//! a 1 indicates the buttons is pressed. +//! +//! \return Returns the current debounced state of the buttons where a 1 in the +//! button ID's position indicates that the button is pressed and a 0 +//! indicates that it is released. +// +//***************************************************************************** +uint8_t +ButtonsPoll(uint8_t *pui8Delta, uint8_t *pui8RawState) +{ + uint32_t ui32Delta; + uint32_t ui32Data; + static uint8_t ui8SwitchClockA = 0; + static uint8_t ui8SwitchClockB = 0; + + // + // Read the raw state of the push buttons. Save the raw state + // (inverting the bit sense) if the caller supplied storage for the + // raw value. + // + ui32Data = 0; + if(g_uiButtonsEnabled & UP_BUTTON) + { + ui32Data = ROM_GPIOPinRead(GPIO_PORTN_BASE, UP_BUTTON); + } + if(g_uiButtonsEnabled & DOWN_BUTTON) + { + ui32Data |= ROM_GPIOPinRead(GPIO_PORTE_BASE, DOWN_BUTTON); + } + if(g_uiButtonsEnabled & SELECT_BUTTON) + { + ui32Data |= ROM_GPIOPinRead(GPIO_PORTP_BASE, SELECT_BUTTON); + } + + if(pui8RawState) + { + *pui8RawState = (uint8_t)~ui32Data; + } + + // + // Determine the switches that are at a different state than the debounced + // state. + // + ui32Delta = ui32Data ^ g_ui8ButtonStates; + + // + // Increment the clocks by one. + // + ui8SwitchClockA ^= ui8SwitchClockB; + ui8SwitchClockB = ~ui8SwitchClockB; + + // + // Reset the clocks corresponding to switches that have not changed state. + // + ui8SwitchClockA &= ui32Delta; + ui8SwitchClockB &= ui32Delta; + + // + // Get the new debounced switch state. + // + g_ui8ButtonStates &= ui8SwitchClockA | ui8SwitchClockB; + g_ui8ButtonStates |= (~(ui8SwitchClockA | ui8SwitchClockB)) & ui32Data; + + // + // Determine the switches that just changed debounced state. + // + ui32Delta ^= (ui8SwitchClockA | ui8SwitchClockB); + + // + // Store the bit mask for the buttons that have changed for return to + // caller. + // + if(pui8Delta) + { + *pui8Delta = (uint8_t)ui32Delta; + } + + // + // Return the debounced buttons states to the caller. Invert the bit + // sense so that a '1' indicates the button is pressed, which is a + // sensible way to interpret the return value. + // + return(~g_ui8ButtonStates); +} + +//***************************************************************************** +// +//! Initializes the GPIO pins used by the board pushbuttons. +//! +//! \param ui8Buttons is the logical OR of the buttons to initialize. +//! +//! This function must be called during application initialization to +//! configure the GPIO pins to which the pushbuttons are attached. It enables +//! the port used by the buttons and configures each button GPIO as an input +//! with a weak pull-up. The \e ui8Buttons value must be a logical OR +//! combination of the following three buttons on the board: \b UP_BUTTON, +//! \b DOWN_BUTTON, or \b SELECT_BUTTON. +//! +//! \return None. +// +//***************************************************************************** +void +ButtonsInit(uint8_t ui8Buttons) +{ + // + // Initialize the button state. + // + g_ui8ButtonStates = 0; + + // + // Save the buttons in use. + // + g_uiButtonsEnabled = ui8Buttons; + + if(ui8Buttons & UP_BUTTON) + { + // + // Enable the GPIO port to which the up button is connected. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); + + // + // Set the up button's GPIO pins as an input with a pull-up. + // + ROM_GPIODirModeSet(GPIO_PORTN_BASE, UP_BUTTON, GPIO_DIR_MODE_IN); + MAP_GPIOPadConfigSet(GPIO_PORTN_BASE, UP_BUTTON, + GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); + + // + // Initialize the debounced button state with the current state read + // from the GPIO bank. + // + g_ui8ButtonStates = ROM_GPIOPinRead(GPIO_PORTN_BASE, UP_BUTTON); + } + + if(ui8Buttons & DOWN_BUTTON) + { + // + // Enable the GPIO port to which the down button is connected. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); + + // + // Set the down button's GPIO pins as an input with a pull-up. + // + ROM_GPIODirModeSet(GPIO_PORTE_BASE, DOWN_BUTTON, GPIO_DIR_MODE_IN); + MAP_GPIOPadConfigSet(GPIO_PORTE_BASE, DOWN_BUTTON, + GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); + + // + // Initialize the debounced button state with the current state read + // from the GPIO bank. + // + g_ui8ButtonStates |= ROM_GPIOPinRead(GPIO_PORTE_BASE, DOWN_BUTTON); + } + + if(ui8Buttons & SELECT_BUTTON) + { + // + // Enable the GPIO port to which the select button is connected. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); + + // + // Set the select button's GPIO pins as an input with a pull-up. + // + ROM_GPIODirModeSet(GPIO_PORTP_BASE, SELECT_BUTTON, GPIO_DIR_MODE_IN); + MAP_GPIOPadConfigSet(GPIO_PORTP_BASE, SELECT_BUTTON, + GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); + + // + // Initialize the debounced button state with the current state read + // from the GPIO bank. + // + g_ui8ButtonStates |= ROM_GPIOPinRead(GPIO_PORTP_BASE, SELECT_BUTTON); + } +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/buttons.h b/boards/dk-tm4c129x/drivers/buttons.h new file mode 100644 index 0000000..23ccd8a --- /dev/null +++ b/boards/dk-tm4c129x/drivers/buttons.h @@ -0,0 +1,105 @@ +//***************************************************************************** +// +// buttons.h - Prototypes for the DK-TM4C129X development board buttons driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __BUTTONS_H__ +#define __BUTTONS_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Defines for the hardware resources used by the pushbuttons. +// +// The switches are on the following ports/pins: +// +// PN3 - Up Button (UP_BUTTON) +// PE5 - Down Button (DOWN_BUTTON) +// PP1 - Select Button (SELECT_BUTTON) +// +// The switches tie the GPIO to ground, so the GPIOs need to be configured +// with pull-ups, and a value of 0 means the switch is pressed. +// +//***************************************************************************** +#define NUM_BUTTONS 3 +#define UP_BUTTON GPIO_PIN_3 +#define DOWN_BUTTON GPIO_PIN_5 +#define SELECT_BUTTON GPIO_PIN_1 + +#define ALL_BUTTONS (UP_BUTTON | DOWN_BUTTON | SELECT_BUTTON) + +//***************************************************************************** +// +// Useful macros for detecting button events. +// +//***************************************************************************** +#define BUTTON_PRESSED(button, buttons, changed) \ + (((button) & (changed)) && ((button) & (buttons))) + +#define BUTTON_RELEASED(button, buttons, changed) \ + (((button) & (changed)) && !((button) & (buttons))) + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Functions exported from buttons.c +// +//***************************************************************************** +extern void ButtonsInit(uint8_t ui8Buttons); +extern uint8_t ButtonsPoll(uint8_t *pui8Delta, uint8_t *pui8Raw); + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +//***************************************************************************** +// +// Prototypes for the globals exported by this driver. +// +//***************************************************************************** + +#endif // __BUTTONS_H__ diff --git a/boards/dk-tm4c129x/drivers/frame.c b/boards/dk-tm4c129x/drivers/frame.c new file mode 100644 index 0000000..625d10d --- /dev/null +++ b/boards/dk-tm4c129x/drivers/frame.c @@ -0,0 +1,1539 @@ +//***************************************************************************** +// +// frame.c - Draws a standard application frame on the LCD. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" +#include "drivers/frame.h" + +//***************************************************************************** +// +//! \addtogroup frame_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// The top left corner of the border. +// +//***************************************************************************** +static const uint8_t g_pui8TopLeft[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 10, 0, + 26, 0, + + 37, + 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, + 0x0a, 0x00, 0x00, + 0x0b, 0x00, 0x00, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x40, 0x00, 0x00, + 0x44, 0x00, 0x00, + 0x46, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5c, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x15, 0x24, 0x1b, 0x1d, 0x23, 0x1c, 0x1f, 0x00, 0x13, + 0x1a, 0x1b, 0x10, 0x0a, 0x0b, 0x0e, 0x0e, 0x17, 0x00, 0x1c, 0x17, 0x0e, + 0x17, 0x14, 0x10, 0x0d, 0x18, 0x0a, 0x0b, 0x20, 0x0d, 0x0b, 0x14, 0x10, + 0x10, 0x0c, 0x16, 0x0b, 0x1c, 0x0f, 0x0e, 0x12, 0x0a, 0x10, 0x13, 0x16, + 0x0e, 0x18, 0x1e, 0x18, 0x12, 0x0a, 0x0f, 0x13, 0x17, 0x16, 0x12, 0x0f, + 0x24, 0x14, 0x16, 0x12, 0x12, 0x12, 0x18, 0x10, 0x0e, 0x0f, 0x25, 0x14, + 0x18, 0x10, 0x0d, 0x0e, 0x0a, 0x16, 0x0c, 0x11, 0x1c, 0x0d, 0x0d, 0x0c, + 0x0a, 0x16, 0x11, 0x0f, 0x17, 0x0c, 0x24, 0x0b, 0x0e, 0x0c, 0x0b, 0x17, + 0x17, 0x15, 0x10, 0x0b, 0x21, 0x15, 0x0f, 0x10, 0x10, 0x13, 0x09, 0x11, + 0x0f, 0x16, 0x1e, 0x09, 0x0a, 0x0c, 0x16, 0x16, 0x17, 0x14, 0x18, 0x16, + 0x1d, 0x13, 0x11, 0x0e, 0x11, 0x15, 0x10, 0x13, 0x12, 0x10, 0x20, 0x15, + 0x11, 0x10, 0x16, 0x18, 0x10, 0x15, 0x12, 0x10, 0x24, 0x0e, 0x0e, 0x16, + 0x10, 0x0f, 0x0a, 0x15, 0x18, 0x0c, 0x22, 0x0d, 0x0a, 0x0c, 0x0d, 0x0c, + 0x0d, 0x0d, 0x11, 0x11, 0x24, 0x11, 0x16, 0x0c, 0x0b, 0x0f, 0x0d, 0x18, + 0x0e, 0x14, 0x1a, 0x18, 0x17, 0x18, 0x0a, 0x0b, 0x15, 0x0a, 0x09, 0x15, + 0x19, 0x18, 0x14, 0x0d, 0x0c, 0x0e, 0x10, 0x0b, 0x18, 0x0d, 0x22, 0x10, + 0x0c, 0x0b, 0x14, 0x0c, 0x17, 0x14, 0x0e, 0x0d, 0x23, 0x0b, 0x0d, 0x0d, + 0x16, 0x0c, 0x17, 0x0a, 0x0c, 0x11, 0x1b, 0x14, 0x17, 0x0b, 0x0d, 0x10, + 0x0a, 0x0c, 0x13, 0x07, 0x1a, 0x16, 0x17, 0x0c, 0x09, 0x13, 0x16, 0x06, + 0x08, 0x03, 0x1f, 0x18, 0x15, 0x0b, 0x12, 0x11, 0x08, 0x02, 0x00, 0x00, + 0x1c, 0x10, 0x11, 0x0a, 0x0d, 0x15, 0x05, 0x00, 0x00, 0x00, 0x1e, 0x0d, + 0x10, 0x0e, 0x0e, 0x04, 0x01, 0x00, 0x00, 0x00, +}; + +//***************************************************************************** +// +// The top side of the border. +// +//***************************************************************************** +static const uint8_t g_pui8Top[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 44, 1, + 22, 0, + + 39, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x15, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x40, 0x00, 0x00, + 0x42, 0x00, 0x00, + 0x44, 0x00, 0x00, + 0x46, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, + 0x4e, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5a, 0x00, 0x00, + 0x5c, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x1f, 0x22, 0x1d, 0x20, 0x27, 0x26, 0x22, 0x23, 0x1a, 0x21, 0x18, 0x1b, + 0x1a, 0x24, 0x1a, 0x1e, 0x1a, 0x19, 0x27, 0x1b, 0x20, 0x25, 0x21, 0x1c, + 0x22, 0x20, 0x1f, 0x27, 0x1c, 0x24, 0x20, 0x24, 0x1e, 0x26, 0x1c, 0x1d, + 0x24, 0x26, 0x19, 0x27, 0x20, 0x19, 0x1b, 0x22, 0x26, 0x1d, 0x19, 0x18, + 0x1f, 0x19, 0x1b, 0x27, 0x26, 0x25, 0x1c, 0x20, 0x1e, 0x24, 0x20, 0x22, + 0x20, 0x18, 0x1f, 0x26, 0x26, 0x23, 0x1c, 0x23, 0x22, 0x1d, 0x23, 0x1a, + 0x1f, 0x26, 0x25, 0x1d, 0x1b, 0x26, 0x1d, 0x22, 0x27, 0x21, 0x22, 0x25, + 0x1f, 0x26, 0x1e, 0x25, 0x22, 0x26, 0x1f, 0x1b, 0x27, 0x26, 0x1a, 0x26, + 0x22, 0x1e, 0x21, 0x1c, 0x24, 0x1c, 0x1f, 0x1b, 0x1b, 0x1c, 0x20, 0x1e, + 0x1a, 0x26, 0x19, 0x1a, 0x1f, 0x24, 0x27, 0x26, 0x22, 0x1e, 0x23, 0x1d, + 0x1c, 0x1b, 0x21, 0x1b, 0x1a, 0x23, 0x1a, 0x24, 0x1a, 0x23, 0x19, 0x27, + 0x18, 0x20, 0x1a, 0x1b, 0x24, 0x23, 0x22, 0x27, 0x22, 0x24, 0x19, 0x1a, + 0x20, 0x19, 0x19, 0x1b, 0x1f, 0x25, 0x21, 0x24, 0x18, 0x1a, 0x27, 0x1b, + 0x26, 0x1a, 0x27, 0x18, 0x25, 0x19, 0x18, 0x26, 0x21, 0x1a, 0x1a, 0x1e, + 0x26, 0x25, 0x1d, 0x20, 0x21, 0x1f, 0x22, 0x19, 0x20, 0x24, 0x1c, 0x27, + 0x21, 0x26, 0x23, 0x22, 0x18, 0x23, 0x25, 0x26, 0x25, 0x25, 0x27, 0x23, + 0x26, 0x27, 0x22, 0x1f, 0x1a, 0x25, 0x26, 0x19, 0x22, 0x1b, 0x22, 0x1b, + 0x23, 0x1d, 0x1d, 0x1b, 0x19, 0x22, 0x1b, 0x22, 0x20, 0x27, 0x1c, 0x20, + 0x23, 0x19, 0x1f, 0x21, 0x27, 0x1f, 0x1d, 0x25, 0x1e, 0x18, 0x1d, 0x21, + 0x25, 0x1b, 0x22, 0x1f, 0x1f, 0x1c, 0x23, 0x1a, 0x21, 0x18, 0x1e, 0x23, + 0x22, 0x22, 0x1d, 0x1a, 0x21, 0x22, 0x23, 0x1d, 0x23, 0x1b, 0x26, 0x22, + 0x22, 0x1c, 0x20, 0x19, 0x1c, 0x26, 0x22, 0x19, 0x19, 0x1d, 0x21, 0x21, + 0x22, 0x1c, 0x24, 0x1c, 0x1d, 0x1b, 0x27, 0x18, 0x25, 0x1d, 0x1b, 0x1e, + 0x27, 0x26, 0x24, 0x23, 0x19, 0x22, 0x1e, 0x24, 0x27, 0x26, 0x25, 0x1b, + 0x24, 0x20, 0x1c, 0x26, 0x26, 0x25, 0x1f, 0x21, 0x1a, 0x1c, 0x25, 0x1f, + 0x16, 0x11, 0x15, 0x15, 0x0f, 0x0d, 0x0e, 0x12, 0x11, 0x0c, 0x0a, 0x09, + 0x09, 0x12, 0x0d, 0x0c, 0x0d, 0x09, 0x0e, 0x16, 0x11, 0x0c, 0x12, 0x14, + 0x0f, 0x0a, 0x16, 0x12, 0x10, 0x0b, 0x10, 0x0e, 0x15, 0x0e, 0x0b, 0x0d, + 0x13, 0x12, 0x17, 0x0d, 0x16, 0x0a, 0x0e, 0x08, 0x14, 0x14, 0x0c, 0x09, + 0x15, 0x13, 0x08, 0x0f, 0x17, 0x13, 0x0b, 0x0f, 0x15, 0x09, 0x09, 0x0e, + 0x0c, 0x12, 0x14, 0x0a, 0x08, 0x08, 0x0f, 0x14, 0x13, 0x0f, 0x09, 0x11, + 0x11, 0x10, 0x11, 0x0d, 0x0c, 0x16, 0x0f, 0x0a, 0x11, 0x10, 0x11, 0x11, + 0x0b, 0x15, 0x09, 0x09, 0x16, 0x0a, 0x0f, 0x0b, 0x15, 0x0c, 0x0d, 0x16, + 0x0d, 0x15, 0x12, 0x08, 0x0c, 0x14, 0x12, 0x15, 0x0c, 0x0b, 0x0b, 0x11, + 0x09, 0x12, 0x14, 0x13, 0x0b, 0x0e, 0x0d, 0x0e, 0x0b, 0x0e, 0x10, 0x0a, + 0x10, 0x08, 0x0e, 0x0e, 0x0c, 0x13, 0x0c, 0x12, 0x10, 0x16, 0x12, 0x14, + 0x13, 0x0c, 0x12, 0x08, 0x10, 0x15, 0x11, 0x12, 0x10, 0x0e, 0x0d, 0x13, + 0x14, 0x12, 0x0a, 0x08, 0x09, 0x12, 0x0b, 0x11, 0x13, 0x11, 0x08, 0x08, + 0x0c, 0x0c, 0x12, 0x15, 0x0a, 0x0d, 0x12, 0x16, 0x12, 0x0d, 0x16, 0x0a, + 0x0a, 0x10, 0x15, 0x12, 0x16, 0x0b, 0x0e, 0x13, 0x15, 0x10, 0x13, 0x16, + 0x0b, 0x16, 0x10, 0x16, 0x0f, 0x10, 0x17, 0x14, 0x15, 0x11, 0x12, 0x17, + 0x16, 0x0d, 0x15, 0x11, 0x12, 0x14, 0x14, 0x14, 0x0c, 0x11, 0x0f, 0x0a, + 0x14, 0x15, 0x15, 0x12, 0x0e, 0x11, 0x11, 0x12, 0x10, 0x0a, 0x11, 0x08, + 0x13, 0x10, 0x15, 0x10, 0x09, 0x0f, 0x10, 0x08, 0x15, 0x0e, 0x12, 0x0f, + 0x0a, 0x0e, 0x0b, 0x0e, 0x08, 0x13, 0x11, 0x15, 0x11, 0x0f, 0x0f, 0x17, + 0x08, 0x09, 0x12, 0x11, 0x0b, 0x0b, 0x12, 0x16, 0x13, 0x0f, 0x0f, 0x15, + 0x17, 0x17, 0x16, 0x14, 0x0d, 0x10, 0x0b, 0x0f, 0x17, 0x0f, 0x16, 0x17, + 0x0a, 0x0f, 0x14, 0x14, 0x16, 0x0c, 0x14, 0x17, 0x0d, 0x0e, 0x10, 0x10, + 0x11, 0x0b, 0x0f, 0x0d, 0x12, 0x16, 0x0b, 0x11, 0x15, 0x09, 0x0d, 0x0b, + 0x12, 0x11, 0x12, 0x11, 0x08, 0x10, 0x11, 0x0b, 0x08, 0x0d, 0x08, 0x16, + 0x15, 0x11, 0x13, 0x16, 0x0a, 0x0c, 0x0a, 0x0b, 0x12, 0x0a, 0x0a, 0x0b, + 0x17, 0x08, 0x0a, 0x09, 0x0f, 0x12, 0x16, 0x09, 0x11, 0x09, 0x0e, 0x0f, + 0x0e, 0x0c, 0x0b, 0x16, 0x11, 0x0b, 0x08, 0x0e, 0x15, 0x14, 0x0d, 0x17, + 0x08, 0x10, 0x0b, 0x12, 0x13, 0x0d, 0x16, 0x12, 0x0d, 0x08, 0x14, 0x14, + 0x13, 0x12, 0x16, 0x0d, 0x14, 0x0c, 0x14, 0x0b, 0x11, 0x08, 0x09, 0x0a, + 0x0b, 0x0a, 0x11, 0x08, 0x16, 0x17, 0x08, 0x16, 0x0f, 0x0c, 0x11, 0x0a, + 0x11, 0x0f, 0x15, 0x16, 0x10, 0x11, 0x13, 0x0b, 0x0c, 0x12, 0x10, 0x08, + 0x16, 0x0d, 0x0b, 0x10, 0x0e, 0x0c, 0x12, 0x12, 0x0f, 0x0c, 0x13, 0x0d, + 0x0b, 0x14, 0x0c, 0x12, 0x08, 0x15, 0x15, 0x11, 0x0d, 0x12, 0x10, 0x15, + 0x0c, 0x0c, 0x09, 0x10, 0x16, 0x11, 0x10, 0x15, 0x17, 0x13, 0x0d, 0x0d, + 0x08, 0x08, 0x08, 0x0f, 0x0c, 0x13, 0x15, 0x10, 0x0f, 0x09, 0x0b, 0x0f, + 0x16, 0x08, 0x09, 0x0b, 0x13, 0x11, 0x09, 0x17, 0x15, 0x0a, 0x0f, 0x14, + 0x14, 0x08, 0x11, 0x13, 0x13, 0x16, 0x09, 0x14, 0x17, 0x09, 0x0c, 0x0b, + 0x14, 0x09, 0x13, 0x0c, 0x0a, 0x17, 0x14, 0x09, 0x17, 0x15, 0x0d, 0x13, + 0x0f, 0x0e, 0x12, 0x0d, 0x11, 0x0a, 0x09, 0x0e, 0x0a, 0x12, 0x09, 0x16, + 0x11, 0x0b, 0x12, 0x10, 0x0c, 0x17, 0x14, 0x09, 0x08, 0x10, 0x0e, 0x0b, + 0x0f, 0x0a, 0x0c, 0x0e, 0x08, 0x12, 0x0a, 0x0f, 0x09, 0x14, 0x14, 0x12, + 0x16, 0x15, 0x09, 0x08, 0x10, 0x0a, 0x16, 0x09, 0x0e, 0x11, 0x12, 0x13, + 0x10, 0x0e, 0x15, 0x11, 0x16, 0x0b, 0x14, 0x0d, 0x0e, 0x09, 0x14, 0x0e, + 0x13, 0x16, 0x15, 0x15, 0x13, 0x12, 0x10, 0x11, 0x10, 0x11, 0x12, 0x08, + 0x14, 0x11, 0x0a, 0x0a, 0x0b, 0x14, 0x15, 0x13, 0x0a, 0x12, 0x0d, 0x09, + 0x16, 0x09, 0x0f, 0x0c, 0x0b, 0x0c, 0x12, 0x17, 0x0b, 0x10, 0x14, 0x16, + 0x0a, 0x0c, 0x10, 0x12, 0x15, 0x0b, 0x12, 0x12, 0x15, 0x15, 0x14, 0x08, + 0x11, 0x11, 0x14, 0x14, 0x0c, 0x09, 0x16, 0x0a, 0x0a, 0x0d, 0x0f, 0x0e, + 0x12, 0x09, 0x0d, 0x15, 0x11, 0x09, 0x14, 0x13, 0x0e, 0x0d, 0x0e, 0x0c, + 0x0c, 0x0a, 0x08, 0x16, 0x0c, 0x14, 0x12, 0x13, 0x0a, 0x08, 0x17, 0x14, + 0x09, 0x15, 0x0b, 0x17, 0x10, 0x12, 0x0f, 0x15, 0x16, 0x13, 0x0e, 0x0b, + 0x15, 0x0a, 0x12, 0x0d, 0x0d, 0x10, 0x0f, 0x12, 0x13, 0x0f, 0x10, 0x08, + 0x0c, 0x0b, 0x13, 0x0f, 0x0b, 0x12, 0x0b, 0x0d, 0x10, 0x0e, 0x0d, 0x08, + 0x09, 0x14, 0x16, 0x17, 0x10, 0x0c, 0x0a, 0x0d, 0x0f, 0x15, 0x12, 0x14, + 0x0e, 0x0a, 0x0e, 0x09, 0x11, 0x17, 0x09, 0x15, 0x0a, 0x14, 0x0d, 0x0e, + 0x0f, 0x10, 0x13, 0x17, 0x17, 0x09, 0x08, 0x08, 0x16, 0x16, 0x08, 0x0e, + 0x0a, 0x0b, 0x14, 0x11, 0x09, 0x0f, 0x0e, 0x0f, 0x11, 0x15, 0x11, 0x0b, + 0x14, 0x12, 0x09, 0x17, 0x0f, 0x0e, 0x0d, 0x16, 0x16, 0x09, 0x16, 0x16, + 0x0b, 0x16, 0x16, 0x09, 0x15, 0x17, 0x10, 0x08, 0x0b, 0x0c, 0x12, 0x0c, + 0x13, 0x08, 0x13, 0x0d, 0x15, 0x0c, 0x10, 0x12, 0x17, 0x11, 0x12, 0x0e, + 0x08, 0x17, 0x0d, 0x16, 0x09, 0x0c, 0x14, 0x0c, 0x0a, 0x13, 0x0e, 0x08, + 0x13, 0x16, 0x08, 0x16, 0x0a, 0x12, 0x0a, 0x16, 0x12, 0x15, 0x0c, 0x10, + 0x0a, 0x15, 0x0b, 0x09, 0x0f, 0x15, 0x10, 0x0f, 0x15, 0x16, 0x0e, 0x17, + 0x0a, 0x0b, 0x0b, 0x0d, 0x16, 0x12, 0x0d, 0x11, 0x10, 0x0e, 0x10, 0x13, + 0x08, 0x12, 0x11, 0x13, 0x10, 0x16, 0x0b, 0x12, 0x13, 0x0f, 0x14, 0x0a, + 0x0d, 0x0d, 0x12, 0x0a, 0x0b, 0x08, 0x0a, 0x0e, 0x0b, 0x0e, 0x14, 0x0a, + 0x08, 0x0a, 0x13, 0x10, 0x10, 0x0b, 0x0b, 0x10, 0x16, 0x15, 0x0b, 0x0e, + 0x13, 0x0f, 0x09, 0x0f, 0x17, 0x16, 0x12, 0x0c, 0x0b, 0x0c, 0x0f, 0x0f, + 0x0c, 0x11, 0x16, 0x10, 0x17, 0x12, 0x12, 0x17, 0x14, 0x0e, 0x10, 0x0d, + 0x12, 0x13, 0x15, 0x10, 0x11, 0x09, 0x17, 0x0d, 0x11, 0x08, 0x14, 0x10, + 0x16, 0x0e, 0x14, 0x0a, 0x13, 0x0b, 0x11, 0x08, 0x15, 0x0f, 0x10, 0x14, + 0x0a, 0x0a, 0x14, 0x16, 0x10, 0x0c, 0x0b, 0x0b, 0x08, 0x09, 0x13, 0x11, + 0x0b, 0x12, 0x17, 0x14, 0x13, 0x13, 0x0c, 0x12, 0x0a, 0x09, 0x14, 0x15, + 0x0d, 0x0e, 0x15, 0x0a, 0x15, 0x0e, 0x16, 0x17, 0x10, 0x13, 0x16, 0x09, + 0x0b, 0x0b, 0x0a, 0x09, 0x11, 0x08, 0x09, 0x0a, 0x14, 0x17, 0x0c, 0x14, + 0x0a, 0x11, 0x14, 0x0e, 0x11, 0x0f, 0x16, 0x0c, 0x08, 0x0a, 0x13, 0x0d, + 0x13, 0x15, 0x15, 0x0e, 0x13, 0x0a, 0x0e, 0x17, 0x0d, 0x10, 0x08, 0x16, + 0x11, 0x09, 0x09, 0x0d, 0x09, 0x0d, 0x09, 0x0c, 0x16, 0x16, 0x12, 0x0f, + 0x0d, 0x10, 0x14, 0x0e, 0x13, 0x10, 0x13, 0x0f, 0x0d, 0x10, 0x15, 0x09, + 0x13, 0x0b, 0x08, 0x08, 0x13, 0x08, 0x17, 0x0c, 0x0a, 0x08, 0x12, 0x0c, + 0x0d, 0x13, 0x10, 0x0b, 0x12, 0x0b, 0x13, 0x08, 0x14, 0x10, 0x0e, 0x0f, + 0x09, 0x0a, 0x16, 0x0f, 0x13, 0x14, 0x10, 0x0e, 0x17, 0x10, 0x0f, 0x13, + 0x11, 0x0e, 0x08, 0x13, 0x0f, 0x12, 0x08, 0x14, 0x0e, 0x11, 0x08, 0x08, + 0x14, 0x14, 0x08, 0x10, 0x0d, 0x0e, 0x08, 0x0e, 0x11, 0x17, 0x15, 0x0c, + 0x13, 0x0e, 0x12, 0x13, 0x16, 0x09, 0x0e, 0x10, 0x0f, 0x0f, 0x0c, 0x17, + 0x09, 0x0c, 0x13, 0x0f, 0x15, 0x14, 0x10, 0x12, 0x11, 0x10, 0x0a, 0x16, + 0x17, 0x0b, 0x0d, 0x10, 0x0a, 0x0b, 0x14, 0x15, 0x11, 0x0f, 0x11, 0x10, + 0x10, 0x17, 0x08, 0x08, 0x0e, 0x0d, 0x17, 0x10, 0x11, 0x13, 0x17, 0x0f, + 0x10, 0x10, 0x09, 0x09, 0x08, 0x0c, 0x08, 0x08, 0x0f, 0x0e, 0x10, 0x11, + 0x11, 0x0d, 0x0f, 0x0b, 0x14, 0x08, 0x14, 0x0d, 0x08, 0x15, 0x0d, 0x0f, + 0x0a, 0x0d, 0x17, 0x14, 0x08, 0x17, 0x0b, 0x11, 0x0f, 0x0d, 0x13, 0x10, + 0x11, 0x14, 0x10, 0x09, 0x0a, 0x09, 0x13, 0x13, 0x0f, 0x0b, 0x17, 0x0c, + 0x0c, 0x13, 0x11, 0x0d, 0x10, 0x17, 0x14, 0x13, 0x0c, 0x14, 0x0f, 0x0d, + 0x14, 0x12, 0x16, 0x0c, 0x08, 0x11, 0x15, 0x12, 0x0d, 0x0e, 0x13, 0x10, + 0x10, 0x0f, 0x0c, 0x17, 0x12, 0x0b, 0x0b, 0x17, 0x17, 0x15, 0x0c, 0x0f, + 0x14, 0x08, 0x0a, 0x08, 0x15, 0x12, 0x0e, 0x12, 0x0c, 0x0c, 0x16, 0x0d, + 0x16, 0x13, 0x17, 0x0c, 0x09, 0x13, 0x14, 0x11, 0x0a, 0x08, 0x11, 0x15, + 0x0b, 0x15, 0x14, 0x0a, 0x12, 0x08, 0x12, 0x0e, 0x09, 0x15, 0x0f, 0x17, + 0x0f, 0x15, 0x11, 0x14, 0x09, 0x0f, 0x09, 0x08, 0x0b, 0x08, 0x0c, 0x0d, + 0x12, 0x0b, 0x0a, 0x14, 0x12, 0x0b, 0x15, 0x16, 0x0c, 0x09, 0x0b, 0x08, + 0x09, 0x0a, 0x16, 0x0a, 0x12, 0x12, 0x0e, 0x17, 0x0a, 0x15, 0x17, 0x14, + 0x17, 0x0d, 0x0f, 0x16, 0x0a, 0x08, 0x0c, 0x15, 0x0c, 0x0e, 0x12, 0x16, + 0x12, 0x0f, 0x15, 0x16, 0x11, 0x08, 0x16, 0x13, 0x0b, 0x15, 0x15, 0x15, + 0x0f, 0x0c, 0x15, 0x12, 0x0a, 0x14, 0x0e, 0x09, 0x09, 0x15, 0x17, 0x0c, + 0x16, 0x0c, 0x0a, 0x0a, 0x12, 0x15, 0x09, 0x0d, 0x0d, 0x16, 0x0b, 0x16, + 0x17, 0x0a, 0x11, 0x0a, 0x17, 0x0f, 0x08, 0x0f, 0x13, 0x15, 0x09, 0x16, + 0x12, 0x10, 0x17, 0x13, 0x0d, 0x17, 0x08, 0x0c, 0x0b, 0x0b, 0x0e, 0x16, + 0x08, 0x10, 0x0b, 0x0d, 0x0f, 0x0f, 0x0b, 0x0e, 0x11, 0x15, 0x11, 0x11, + 0x0c, 0x11, 0x08, 0x08, 0x0f, 0x0a, 0x16, 0x09, 0x12, 0x16, 0x15, 0x17, + 0x16, 0x16, 0x0c, 0x0a, 0x09, 0x13, 0x08, 0x09, 0x0b, 0x0c, 0x0f, 0x12, + 0x13, 0x13, 0x09, 0x0d, 0x10, 0x13, 0x16, 0x15, 0x0d, 0x17, 0x16, 0x14, + 0x09, 0x15, 0x16, 0x13, 0x13, 0x13, 0x13, 0x12, 0x11, 0x17, 0x14, 0x13, + 0x12, 0x15, 0x15, 0x16, 0x09, 0x0c, 0x11, 0x15, 0x08, 0x12, 0x0a, 0x10, + 0x0e, 0x09, 0x0e, 0x13, 0x09, 0x0c, 0x10, 0x0a, 0x09, 0x0e, 0x16, 0x15, + 0x0a, 0x12, 0x0f, 0x14, 0x12, 0x0c, 0x0f, 0x0c, 0x0a, 0x0c, 0x0b, 0x0c, + 0x11, 0x14, 0x09, 0x11, 0x0f, 0x0c, 0x0a, 0x15, 0x0e, 0x10, 0x11, 0x0f, + 0x15, 0x0a, 0x12, 0x16, 0x10, 0x10, 0x14, 0x13, 0x0b, 0x0c, 0x0f, 0x15, + 0x10, 0x16, 0x09, 0x13, 0x0b, 0x0d, 0x17, 0x14, 0x09, 0x08, 0x0d, 0x10, + 0x0d, 0x0f, 0x0e, 0x13, 0x08, 0x08, 0x0b, 0x15, 0x0a, 0x15, 0x14, 0x13, + 0x0e, 0x10, 0x0e, 0x11, 0x14, 0x15, 0x0e, 0x0d, 0x13, 0x10, 0x08, 0x17, + 0x15, 0x17, 0x13, 0x17, 0x08, 0x09, 0x0f, 0x0d, 0x10, 0x16, 0x09, 0x11, + 0x16, 0x0c, 0x0e, 0x09, 0x09, 0x0a, 0x14, 0x10, 0x12, 0x0a, 0x09, 0x0f, + 0x17, 0x10, 0x14, 0x13, 0x08, 0x14, 0x12, 0x16, 0x14, 0x0e, 0x15, 0x14, + 0x0f, 0x0d, 0x09, 0x17, 0x0b, 0x0a, 0x11, 0x0a, 0x0e, 0x17, 0x0b, 0x10, + 0x14, 0x0f, 0x0e, 0x08, 0x11, 0x17, 0x0a, 0x08, 0x16, 0x0e, 0x11, 0x09, + 0x0f, 0x12, 0x16, 0x11, 0x15, 0x0a, 0x14, 0x10, 0x0b, 0x12, 0x0b, 0x08, + 0x0b, 0x15, 0x12, 0x0b, 0x0c, 0x08, 0x11, 0x09, 0x0f, 0x17, 0x09, 0x09, + 0x17, 0x0c, 0x0a, 0x16, 0x12, 0x13, 0x17, 0x0a, 0x0e, 0x15, 0x13, 0x0b, + 0x17, 0x10, 0x13, 0x0b, 0x0b, 0x17, 0x0b, 0x0f, 0x15, 0x16, 0x12, 0x09, + 0x16, 0x0b, 0x0a, 0x0e, 0x0b, 0x0b, 0x10, 0x0b, 0x10, 0x12, 0x09, 0x0a, + 0x0e, 0x08, 0x0c, 0x15, 0x16, 0x08, 0x08, 0x16, 0x11, 0x14, 0x09, 0x14, + 0x13, 0x0c, 0x0b, 0x11, 0x0b, 0x16, 0x12, 0x09, 0x09, 0x15, 0x10, 0x0d, + 0x09, 0x08, 0x10, 0x11, 0x13, 0x12, 0x14, 0x0a, 0x12, 0x09, 0x17, 0x11, + 0x0a, 0x08, 0x0f, 0x13, 0x15, 0x10, 0x10, 0x11, 0x15, 0x13, 0x0a, 0x08, + 0x12, 0x14, 0x0a, 0x14, 0x12, 0x12, 0x09, 0x13, 0x13, 0x12, 0x0d, 0x0f, + 0x0c, 0x09, 0x11, 0x17, 0x0b, 0x11, 0x10, 0x0d, 0x11, 0x08, 0x08, 0x0e, + 0x10, 0x10, 0x17, 0x0d, 0x0c, 0x09, 0x0d, 0x16, 0x16, 0x0f, 0x12, 0x11, + 0x0a, 0x14, 0x0d, 0x16, 0x0f, 0x12, 0x0d, 0x13, 0x14, 0x16, 0x13, 0x17, + 0x0f, 0x0c, 0x0c, 0x09, 0x0c, 0x0d, 0x10, 0x14, 0x16, 0x10, 0x0a, 0x0b, + 0x12, 0x10, 0x0a, 0x10, 0x08, 0x14, 0x0a, 0x0a, 0x11, 0x0f, 0x08, 0x08, + 0x09, 0x0e, 0x14, 0x15, 0x0c, 0x0f, 0x15, 0x14, 0x14, 0x0a, 0x16, 0x09, + 0x0f, 0x0e, 0x16, 0x0e, 0x17, 0x08, 0x11, 0x11, 0x10, 0x13, 0x0a, 0x10, + 0x10, 0x0c, 0x13, 0x09, 0x13, 0x14, 0x0a, 0x15, 0x0a, 0x16, 0x13, 0x0f, + 0x0e, 0x10, 0x0c, 0x0b, 0x12, 0x0b, 0x0c, 0x0a, 0x12, 0x0a, 0x10, 0x11, + 0x0a, 0x0a, 0x0a, 0x13, 0x16, 0x0c, 0x0c, 0x0e, 0x11, 0x08, 0x10, 0x0c, + 0x15, 0x12, 0x09, 0x08, 0x11, 0x14, 0x0f, 0x17, 0x0d, 0x14, 0x0a, 0x17, + 0x17, 0x0e, 0x0a, 0x12, 0x11, 0x13, 0x0b, 0x13, 0x15, 0x0d, 0x0f, 0x13, + 0x12, 0x13, 0x0a, 0x0b, 0x14, 0x12, 0x10, 0x11, 0x0d, 0x11, 0x11, 0x16, + 0x0e, 0x09, 0x15, 0x13, 0x15, 0x08, 0x13, 0x15, 0x0f, 0x15, 0x0f, 0x08, + 0x16, 0x09, 0x0b, 0x14, 0x09, 0x16, 0x11, 0x11, 0x14, 0x09, 0x11, 0x0d, + 0x14, 0x0d, 0x14, 0x15, 0x11, 0x17, 0x11, 0x10, 0x0c, 0x10, 0x0b, 0x0c, + 0x08, 0x0f, 0x11, 0x0a, 0x0c, 0x14, 0x12, 0x0b, 0x15, 0x15, 0x17, 0x17, + 0x14, 0x11, 0x10, 0x11, 0x12, 0x0a, 0x16, 0x0e, 0x0f, 0x13, 0x0c, 0x08, + 0x12, 0x15, 0x10, 0x16, 0x0e, 0x14, 0x0a, 0x0e, 0x0b, 0x13, 0x11, 0x10, + 0x0f, 0x0b, 0x14, 0x0d, 0x08, 0x13, 0x0d, 0x15, 0x0c, 0x15, 0x0e, 0x17, + 0x17, 0x0d, 0x0d, 0x0f, 0x08, 0x12, 0x10, 0x12, 0x10, 0x09, 0x10, 0x16, + 0x15, 0x12, 0x0d, 0x09, 0x0e, 0x16, 0x12, 0x16, 0x09, 0x0e, 0x0b, 0x0a, + 0x0a, 0x10, 0x08, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x14, 0x14, 0x16, 0x14, + 0x0e, 0x0e, 0x0e, 0x16, 0x10, 0x17, 0x14, 0x0d, 0x12, 0x0a, 0x0f, 0x08, + 0x08, 0x09, 0x17, 0x0a, 0x10, 0x0a, 0x0c, 0x13, 0x13, 0x0c, 0x0a, 0x0a, + 0x13, 0x10, 0x11, 0x0f, 0x0c, 0x0f, 0x0b, 0x12, 0x16, 0x12, 0x11, 0x0e, + 0x12, 0x0e, 0x13, 0x0c, 0x10, 0x0b, 0x0d, 0x10, 0x0d, 0x0c, 0x12, 0x15, + 0x0f, 0x17, 0x10, 0x0b, 0x0b, 0x12, 0x0d, 0x16, 0x0a, 0x17, 0x0e, 0x0e, + 0x0e, 0x12, 0x09, 0x0d, 0x0c, 0x12, 0x13, 0x17, 0x08, 0x0f, 0x0b, 0x10, + 0x12, 0x11, 0x09, 0x17, 0x16, 0x14, 0x15, 0x0e, 0x13, 0x0d, 0x11, 0x17, + 0x08, 0x17, 0x16, 0x0b, 0x16, 0x0c, 0x12, 0x0d, 0x16, 0x13, 0x12, 0x0b, + 0x0e, 0x0d, 0x0a, 0x0e, 0x15, 0x0e, 0x17, 0x0f, 0x08, 0x09, 0x0f, 0x16, + 0x15, 0x0c, 0x0c, 0x11, 0x12, 0x16, 0x10, 0x13, 0x15, 0x0f, 0x16, 0x13, + 0x14, 0x10, 0x09, 0x12, 0x0c, 0x13, 0x16, 0x12, 0x08, 0x09, 0x08, 0x15, + 0x0f, 0x08, 0x0d, 0x10, 0x09, 0x14, 0x0f, 0x17, 0x09, 0x13, 0x10, 0x13, + 0x12, 0x09, 0x0e, 0x0f, 0x10, 0x0d, 0x0b, 0x0c, 0x15, 0x0c, 0x17, 0x09, + 0x17, 0x16, 0x14, 0x08, 0x17, 0x14, 0x16, 0x0f, 0x15, 0x0c, 0x17, 0x17, + 0x09, 0x0e, 0x16, 0x0a, 0x0a, 0x0e, 0x16, 0x14, 0x10, 0x0d, 0x0c, 0x09, + 0x12, 0x10, 0x0e, 0x10, 0x14, 0x0e, 0x12, 0x14, 0x0c, 0x0e, 0x15, 0x0c, + 0x16, 0x0c, 0x13, 0x12, 0x12, 0x0e, 0x0f, 0x17, 0x14, 0x0d, 0x0b, 0x17, + 0x09, 0x17, 0x08, 0x0a, 0x12, 0x08, 0x0c, 0x14, 0x15, 0x10, 0x09, 0x0a, + 0x14, 0x0a, 0x17, 0x0c, 0x10, 0x16, 0x10, 0x0f, 0x0a, 0x0c, 0x0a, 0x15, + 0x12, 0x11, 0x14, 0x0f, 0x17, 0x17, 0x0f, 0x08, 0x17, 0x0f, 0x0b, 0x11, + 0x0f, 0x0f, 0x0e, 0x0d, 0x08, 0x0f, 0x10, 0x14, 0x12, 0x10, 0x09, 0x0b, + 0x0e, 0x11, 0x12, 0x11, 0x16, 0x14, 0x0e, 0x11, 0x0e, 0x0a, 0x08, 0x0d, + 0x0a, 0x0f, 0x0e, 0x09, 0x17, 0x11, 0x13, 0x0f, 0x09, 0x09, 0x15, 0x09, + 0x11, 0x0d, 0x16, 0x0c, 0x15, 0x17, 0x0f, 0x0c, 0x11, 0x0a, 0x15, 0x10, + 0x17, 0x0b, 0x09, 0x0e, 0x0e, 0x09, 0x13, 0x11, 0x11, 0x0a, 0x13, 0x10, + 0x14, 0x0e, 0x08, 0x15, 0x10, 0x15, 0x17, 0x09, 0x0a, 0x15, 0x0e, 0x08, + 0x15, 0x15, 0x0c, 0x0f, 0x08, 0x0a, 0x17, 0x17, 0x0d, 0x09, 0x0d, 0x14, + 0x0b, 0x09, 0x0d, 0x14, 0x0c, 0x08, 0x0d, 0x08, 0x0f, 0x0d, 0x16, 0x17, + 0x0a, 0x15, 0x09, 0x0d, 0x13, 0x0f, 0x0e, 0x11, 0x0d, 0x12, 0x09, 0x0d, + 0x14, 0x09, 0x0d, 0x0a, 0x0a, 0x13, 0x17, 0x0d, 0x15, 0x0c, 0x0a, 0x09, + 0x0d, 0x10, 0x0a, 0x14, 0x15, 0x08, 0x13, 0x08, 0x16, 0x15, 0x0e, 0x12, + 0x0c, 0x14, 0x0b, 0x11, 0x0f, 0x0c, 0x17, 0x0c, 0x0d, 0x0c, 0x0f, 0x10, + 0x08, 0x0e, 0x15, 0x15, 0x12, 0x08, 0x16, 0x17, 0x10, 0x09, 0x14, 0x0e, + 0x0a, 0x0f, 0x0f, 0x08, 0x0c, 0x15, 0x13, 0x11, 0x12, 0x16, 0x0a, 0x0a, + 0x0b, 0x0a, 0x0e, 0x11, 0x0f, 0x16, 0x09, 0x0f, 0x0c, 0x17, 0x0c, 0x17, + 0x17, 0x0b, 0x17, 0x10, 0x0c, 0x13, 0x16, 0x0e, 0x0a, 0x0e, 0x0f, 0x0f, + 0x0c, 0x0a, 0x08, 0x16, 0x09, 0x0b, 0x09, 0x0d, 0x0e, 0x0f, 0x16, 0x15, + 0x0e, 0x08, 0x0c, 0x12, 0x08, 0x11, 0x11, 0x08, 0x15, 0x10, 0x10, 0x09, + 0x0b, 0x0f, 0x10, 0x0e, 0x15, 0x08, 0x16, 0x09, 0x0a, 0x16, 0x08, 0x0c, + 0x0a, 0x09, 0x11, 0x10, 0x11, 0x10, 0x0d, 0x17, 0x10, 0x12, 0x11, 0x11, + 0x0c, 0x0b, 0x11, 0x09, 0x14, 0x09, 0x0b, 0x08, 0x10, 0x14, 0x0e, 0x0e, + 0x17, 0x08, 0x0c, 0x13, 0x0a, 0x0f, 0x14, 0x13, 0x0c, 0x0b, 0x09, 0x08, + 0x10, 0x11, 0x17, 0x13, 0x09, 0x0a, 0x09, 0x12, 0x17, 0x17, 0x15, 0x0d, + 0x0b, 0x17, 0x0b, 0x09, 0x13, 0x13, 0x0c, 0x13, 0x13, 0x11, 0x0f, 0x16, + 0x08, 0x0b, 0x11, 0x0d, 0x0e, 0x12, 0x0d, 0x16, 0x0b, 0x0d, 0x12, 0x0c, + 0x0f, 0x13, 0x17, 0x0f, 0x13, 0x14, 0x14, 0x17, 0x13, 0x08, 0x09, 0x0f, + 0x13, 0x0e, 0x0a, 0x0f, 0x17, 0x11, 0x0d, 0x08, 0x14, 0x16, 0x0d, 0x0b, + 0x10, 0x12, 0x09, 0x14, 0x17, 0x13, 0x09, 0x0f, 0x0f, 0x08, 0x17, 0x0b, + 0x14, 0x14, 0x0a, 0x10, 0x15, 0x0c, 0x17, 0x10, 0x12, 0x0a, 0x17, 0x11, + 0x13, 0x0d, 0x11, 0x10, 0x0b, 0x16, 0x13, 0x14, 0x11, 0x15, 0x10, 0x11, + 0x10, 0x11, 0x08, 0x08, 0x11, 0x08, 0x0b, 0x0e, 0x15, 0x0e, 0x16, 0x12, + 0x12, 0x16, 0x0a, 0x0c, 0x08, 0x0a, 0x15, 0x14, 0x0f, 0x0f, 0x0d, 0x13, + 0x0d, 0x08, 0x0f, 0x16, 0x15, 0x08, 0x0f, 0x0e, 0x12, 0x10, 0x0e, 0x0c, + 0x11, 0x12, 0x12, 0x0e, 0x08, 0x11, 0x08, 0x12, 0x0f, 0x0b, 0x17, 0x10, + 0x0e, 0x15, 0x0d, 0x16, 0x0c, 0x12, 0x11, 0x11, 0x13, 0x09, 0x10, 0x11, + 0x09, 0x08, 0x17, 0x13, 0x10, 0x0e, 0x17, 0x0a, 0x08, 0x12, 0x10, 0x09, + 0x0c, 0x11, 0x14, 0x14, 0x15, 0x13, 0x0c, 0x0b, 0x11, 0x12, 0x0a, 0x15, + 0x0c, 0x14, 0x0f, 0x08, 0x15, 0x08, 0x11, 0x16, 0x08, 0x11, 0x12, 0x11, + 0x08, 0x12, 0x13, 0x08, 0x0d, 0x0b, 0x0a, 0x11, 0x15, 0x16, 0x0d, 0x12, + 0x12, 0x12, 0x16, 0x0b, 0x0c, 0x08, 0x09, 0x11, 0x14, 0x11, 0x11, 0x12, + 0x11, 0x0b, 0x11, 0x11, 0x14, 0x0b, 0x0b, 0x14, 0x16, 0x16, 0x15, 0x0b, + 0x0a, 0x08, 0x15, 0x17, 0x16, 0x0a, 0x12, 0x11, 0x14, 0x10, 0x15, 0x09, + 0x11, 0x16, 0x12, 0x0e, 0x10, 0x0c, 0x08, 0x09, 0x10, 0x11, 0x13, 0x0c, + 0x15, 0x16, 0x09, 0x13, 0x14, 0x17, 0x17, 0x17, 0x17, 0x14, 0x16, 0x16, + 0x17, 0x10, 0x0f, 0x14, 0x09, 0x0d, 0x15, 0x12, 0x0b, 0x10, 0x08, 0x14, + 0x14, 0x09, 0x15, 0x0d, 0x12, 0x11, 0x12, 0x0f, 0x0f, 0x13, 0x0b, 0x0c, + 0x11, 0x0c, 0x0a, 0x0b, 0x15, 0x14, 0x13, 0x0d, 0x10, 0x16, 0x12, 0x0b, + 0x08, 0x16, 0x16, 0x17, 0x08, 0x10, 0x16, 0x14, 0x11, 0x10, 0x11, 0x08, + 0x08, 0x08, 0x12, 0x08, 0x11, 0x09, 0x15, 0x0a, 0x0d, 0x17, 0x0e, 0x0a, + 0x14, 0x0a, 0x10, 0x0c, 0x08, 0x0a, 0x10, 0x09, 0x08, 0x0e, 0x09, 0x09, + 0x17, 0x17, 0x15, 0x10, 0x10, 0x0f, 0x11, 0x10, 0x10, 0x0b, 0x11, 0x09, + 0x0c, 0x0f, 0x0c, 0x11, 0x0f, 0x12, 0x14, 0x0b, 0x14, 0x0c, 0x0f, 0x15, + 0x0e, 0x17, 0x17, 0x0f, 0x0e, 0x08, 0x10, 0x0d, 0x08, 0x0e, 0x16, 0x10, + 0x15, 0x0f, 0x09, 0x0d, 0x13, 0x12, 0x0f, 0x08, 0x0a, 0x13, 0x11, 0x11, + 0x0e, 0x0e, 0x14, 0x0a, 0x13, 0x0c, 0x08, 0x09, 0x0c, 0x17, 0x10, 0x12, + 0x08, 0x09, 0x08, 0x08, 0x0f, 0x17, 0x11, 0x0d, 0x0e, 0x13, 0x13, 0x0a, + 0x0e, 0x0a, 0x0a, 0x10, 0x15, 0x14, 0x09, 0x0b, 0x0a, 0x15, 0x0e, 0x15, + 0x0a, 0x0f, 0x17, 0x0e, 0x0e, 0x10, 0x09, 0x0f, 0x12, 0x09, 0x0f, 0x09, + 0x08, 0x09, 0x0f, 0x0f, 0x14, 0x0a, 0x11, 0x0a, 0x0d, 0x14, 0x12, 0x0a, + 0x10, 0x13, 0x0e, 0x12, 0x11, 0x15, 0x10, 0x13, 0x0c, 0x10, 0x0a, 0x13, + 0x08, 0x0b, 0x0a, 0x13, 0x0c, 0x12, 0x14, 0x0d, 0x13, 0x0c, 0x15, 0x0f, + 0x0f, 0x0f, 0x11, 0x14, 0x0b, 0x0c, 0x16, 0x13, 0x17, 0x0d, 0x0e, 0x11, + 0x0a, 0x17, 0x0d, 0x0f, 0x0f, 0x0f, 0x0a, 0x10, 0x12, 0x0d, 0x0b, 0x17, + 0x17, 0x08, 0x0d, 0x13, 0x0c, 0x0a, 0x0a, 0x14, 0x11, 0x14, 0x10, 0x14, + 0x09, 0x0f, 0x0f, 0x08, 0x14, 0x16, 0x12, 0x17, 0x15, 0x17, 0x0e, 0x0d, + 0x0f, 0x11, 0x15, 0x09, 0x17, 0x09, 0x09, 0x17, 0x09, 0x0e, 0x12, 0x0e, + 0x10, 0x15, 0x0a, 0x0a, 0x12, 0x12, 0x16, 0x13, 0x09, 0x0e, 0x14, 0x16, + 0x0c, 0x0e, 0x15, 0x0a, 0x0e, 0x0c, 0x0f, 0x15, 0x16, 0x0d, 0x17, 0x15, + 0x0e, 0x08, 0x14, 0x10, 0x0f, 0x0f, 0x16, 0x17, 0x0c, 0x09, 0x0a, 0x16, + 0x14, 0x08, 0x11, 0x16, 0x0f, 0x0d, 0x14, 0x14, 0x14, 0x12, 0x16, 0x0a, + 0x17, 0x0e, 0x17, 0x16, 0x14, 0x16, 0x13, 0x0a, 0x17, 0x10, 0x13, 0x0e, + 0x0a, 0x17, 0x13, 0x16, 0x16, 0x0f, 0x09, 0x15, 0x08, 0x14, 0x0c, 0x08, + 0x0e, 0x12, 0x0c, 0x09, 0x0b, 0x0e, 0x11, 0x14, 0x0a, 0x08, 0x15, 0x0b, + 0x0b, 0x12, 0x09, 0x09, 0x0e, 0x09, 0x17, 0x10, 0x08, 0x13, 0x0f, 0x17, + 0x0a, 0x10, 0x14, 0x0b, 0x0d, 0x09, 0x0b, 0x13, 0x13, 0x10, 0x15, 0x17, + 0x17, 0x0f, 0x13, 0x09, 0x0f, 0x11, 0x0d, 0x13, 0x0b, 0x0e, 0x14, 0x11, + 0x0f, 0x14, 0x0a, 0x10, 0x0f, 0x12, 0x0f, 0x12, 0x0a, 0x0c, 0x15, 0x10, + 0x0d, 0x09, 0x0b, 0x09, 0x12, 0x09, 0x08, 0x11, 0x11, 0x14, 0x13, 0x08, + 0x0d, 0x08, 0x14, 0x10, 0x0f, 0x11, 0x0a, 0x17, 0x0d, 0x0c, 0x10, 0x14, + 0x16, 0x17, 0x0f, 0x09, 0x0c, 0x0d, 0x11, 0x11, 0x0f, 0x15, 0x12, 0x09, + 0x17, 0x13, 0x12, 0x10, 0x0f, 0x0e, 0x11, 0x14, 0x0e, 0x0d, 0x0c, 0x16, + 0x16, 0x0f, 0x16, 0x0c, 0x13, 0x0e, 0x09, 0x12, 0x0e, 0x10, 0x14, 0x12, + 0x15, 0x0e, 0x0c, 0x0c, 0x0c, 0x17, 0x0d, 0x0b, 0x12, 0x08, 0x13, 0x09, + 0x0e, 0x0c, 0x16, 0x15, 0x12, 0x0b, 0x14, 0x10, 0x12, 0x12, 0x15, 0x0e, + 0x08, 0x16, 0x09, 0x0f, 0x0e, 0x15, 0x09, 0x0c, 0x0c, 0x0e, 0x10, 0x10, + 0x0d, 0x16, 0x13, 0x08, 0x17, 0x0f, 0x0a, 0x0e, 0x14, 0x08, 0x0b, 0x0e, + 0x0b, 0x17, 0x17, 0x16, 0x12, 0x14, 0x0c, 0x13, 0x13, 0x0e, 0x0a, 0x09, + 0x0c, 0x0c, 0x0e, 0x10, 0x12, 0x17, 0x08, 0x08, 0x15, 0x14, 0x08, 0x15, + 0x0c, 0x0a, 0x0b, 0x08, 0x0b, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0d, 0x09, + 0x0b, 0x12, 0x14, 0x17, 0x08, 0x17, 0x09, 0x0c, 0x0b, 0x0f, 0x15, 0x16, + 0x0e, 0x15, 0x17, 0x0c, 0x12, 0x17, 0x09, 0x17, 0x0a, 0x0c, 0x17, 0x0d, + 0x13, 0x0f, 0x14, 0x0a, 0x16, 0x09, 0x0c, 0x0a, 0x14, 0x08, 0x09, 0x14, + 0x08, 0x0a, 0x09, 0x0c, 0x12, 0x16, 0x0a, 0x08, 0x14, 0x09, 0x0c, 0x0f, + 0x09, 0x0d, 0x0e, 0x0b, 0x12, 0x0e, 0x11, 0x0d, 0x15, 0x0d, 0x10, 0x14, + 0x0f, 0x14, 0x16, 0x0b, 0x15, 0x08, 0x08, 0x15, 0x0b, 0x09, 0x09, 0x15, + 0x17, 0x0c, 0x15, 0x14, 0x0e, 0x0a, 0x0b, 0x0f, 0x10, 0x11, 0x13, 0x0a, + 0x16, 0x0f, 0x0b, 0x0d, 0x12, 0x0e, 0x14, 0x0a, 0x17, 0x10, 0x0d, 0x17, + 0x14, 0x15, 0x14, 0x0f, 0x16, 0x0d, 0x11, 0x14, 0x16, 0x16, 0x0e, 0x0f, + 0x0c, 0x17, 0x0b, 0x13, 0x11, 0x15, 0x0a, 0x10, 0x0d, 0x0e, 0x15, 0x17, + 0x14, 0x12, 0x0a, 0x14, 0x0a, 0x0f, 0x13, 0x17, 0x0d, 0x0f, 0x0e, 0x0b, + 0x15, 0x17, 0x17, 0x13, 0x16, 0x0e, 0x0a, 0x0a, 0x0e, 0x0e, 0x16, 0x17, + 0x0b, 0x09, 0x10, 0x11, 0x0f, 0x0d, 0x10, 0x0b, 0x08, 0x13, 0x08, 0x0a, + 0x0b, 0x13, 0x0a, 0x10, 0x0b, 0x10, 0x14, 0x09, 0x10, 0x14, 0x15, 0x0f, + 0x0b, 0x08, 0x11, 0x11, 0x0e, 0x10, 0x11, 0x12, 0x11, 0x09, 0x0b, 0x08, + 0x0f, 0x14, 0x0c, 0x0f, 0x0f, 0x0c, 0x11, 0x12, 0x08, 0x14, 0x0b, 0x0c, + 0x0c, 0x17, 0x0e, 0x15, 0x14, 0x0b, 0x0c, 0x17, 0x0b, 0x16, 0x10, 0x12, + 0x0e, 0x0a, 0x0c, 0x17, 0x0b, 0x0f, 0x08, 0x12, 0x0c, 0x0c, 0x0a, 0x14, + 0x11, 0x14, 0x0e, 0x12, 0x10, 0x12, 0x17, 0x15, 0x12, 0x0d, 0x12, 0x0e, + 0x11, 0x17, 0x0e, 0x14, 0x15, 0x16, 0x0f, 0x0b, 0x09, 0x13, 0x0b, 0x0c, + 0x0b, 0x0b, 0x17, 0x10, 0x10, 0x09, 0x0c, 0x09, 0x16, 0x12, 0x13, 0x0e, + 0x0d, 0x12, 0x0b, 0x17, 0x08, 0x16, 0x0e, 0x11, 0x15, 0x14, 0x0e, 0x13, + 0x13, 0x15, 0x17, 0x14, 0x11, 0x0a, 0x09, 0x15, 0x0e, 0x09, 0x0d, 0x16, + 0x0b, 0x11, 0x17, 0x09, 0x0c, 0x13, 0x0f, 0x11, 0x0e, 0x12, 0x11, 0x0e, + 0x11, 0x08, 0x08, 0x0e, 0x14, 0x0e, 0x0a, 0x10, 0x0c, 0x09, 0x0c, 0x15, + 0x0c, 0x0e, 0x12, 0x12, 0x0f, 0x17, 0x10, 0x12, 0x11, 0x10, 0x13, 0x15, + 0x0c, 0x0b, 0x0f, 0x13, 0x16, 0x08, 0x0a, 0x0f, 0x08, 0x0a, 0x16, 0x15, + 0x10, 0x08, 0x0d, 0x14, 0x09, 0x12, 0x12, 0x0d, 0x09, 0x0d, 0x08, 0x10, + 0x0d, 0x11, 0x0b, 0x16, 0x0a, 0x17, 0x13, 0x0e, 0x0a, 0x0b, 0x0a, 0x08, + 0x0c, 0x0c, 0x0f, 0x0c, 0x0e, 0x0d, 0x0a, 0x17, 0x0d, 0x10, 0x14, 0x0f, + 0x0b, 0x0e, 0x15, 0x0c, 0x14, 0x15, 0x15, 0x09, 0x0f, 0x08, 0x17, 0x11, + 0x08, 0x13, 0x08, 0x0a, 0x16, 0x0a, 0x0a, 0x0a, 0x0e, 0x12, 0x0f, 0x15, + 0x0f, 0x11, 0x12, 0x0e, 0x13, 0x15, 0x10, 0x0a, 0x0f, 0x08, 0x17, 0x10, + 0x12, 0x14, 0x16, 0x14, 0x0d, 0x13, 0x0a, 0x0d, 0x0e, 0x13, 0x0a, 0x17, + 0x0a, 0x17, 0x17, 0x12, 0x14, 0x10, 0x0a, 0x0c, 0x0a, 0x14, 0x12, 0x16, + 0x12, 0x0b, 0x08, 0x0a, 0x0b, 0x08, 0x12, 0x16, 0x14, 0x10, 0x12, 0x0a, + 0x0c, 0x14, 0x10, 0x13, 0x10, 0x12, 0x12, 0x13, 0x11, 0x12, 0x0e, 0x0d, + 0x0b, 0x10, 0x11, 0x0d, 0x0d, 0x0c, 0x0b, 0x08, 0x0f, 0x0b, 0x0a, 0x13, + 0x0b, 0x14, 0x11, 0x08, 0x0d, 0x0c, 0x0a, 0x11, 0x09, 0x13, 0x0d, 0x12, + 0x0d, 0x08, 0x0d, 0x16, 0x12, 0x14, 0x0c, 0x15, 0x0d, 0x16, 0x0a, 0x13, + 0x0a, 0x0e, 0x13, 0x12, 0x11, 0x15, 0x0d, 0x15, 0x12, 0x17, 0x16, 0x17, + 0x0c, 0x09, 0x11, 0x0d, 0x14, 0x16, 0x08, 0x09, 0x17, 0x0e, 0x08, 0x11, + 0x0a, 0x0d, 0x0f, 0x0f, 0x0b, 0x11, 0x0a, 0x0d, 0x08, 0x16, 0x17, 0x11, + 0x13, 0x0d, 0x0f, 0x0e, 0x0d, 0x0e, 0x0d, 0x11, 0x0f, 0x17, 0x16, 0x0b, + 0x16, 0x16, 0x0d, 0x15, 0x0c, 0x0d, 0x0e, 0x0f, 0x12, 0x15, 0x16, 0x15, + 0x0f, 0x09, 0x0b, 0x0f, 0x17, 0x0b, 0x09, 0x13, 0x11, 0x11, 0x09, 0x16, + 0x17, 0x0f, 0x0f, 0x0e, 0x0f, 0x0e, 0x12, 0x0d, 0x0d, 0x17, 0x0a, 0x11, + 0x0d, 0x11, 0x09, 0x17, 0x0e, 0x08, 0x15, 0x16, 0x09, 0x09, 0x0e, 0x09, + 0x0d, 0x0f, 0x15, 0x16, 0x09, 0x17, 0x14, 0x08, 0x0f, 0x0b, 0x0f, 0x16, + 0x12, 0x0a, 0x0b, 0x17, 0x09, 0x0d, 0x11, 0x0f, 0x17, 0x12, 0x0e, 0x0e, + 0x12, 0x0c, 0x0c, 0x14, 0x0e, 0x13, 0x16, 0x13, 0x0b, 0x13, 0x11, 0x0c, + 0x13, 0x0e, 0x0d, 0x0a, 0x11, 0x15, 0x08, 0x0b, 0x17, 0x0c, 0x0b, 0x09, + 0x12, 0x14, 0x10, 0x11, 0x0e, 0x17, 0x17, 0x08, 0x0b, 0x0c, 0x15, 0x11, + 0x17, 0x13, 0x0c, 0x0a, 0x0f, 0x16, 0x0e, 0x0a, 0x0c, 0x14, 0x0d, 0x16, + 0x11, 0x0d, 0x0a, 0x10, 0x12, 0x0d, 0x12, 0x0c, 0x09, 0x0a, 0x16, 0x0f, + 0x09, 0x16, 0x10, 0x0d, 0x0a, 0x0e, 0x17, 0x0a, 0x09, 0x0c, 0x0c, 0x10, + 0x0a, 0x13, 0x13, 0x0e, 0x0f, 0x08, 0x0d, 0x09, 0x0e, 0x0f, 0x12, 0x08, + 0x0f, 0x12, 0x12, 0x17, 0x12, 0x17, 0x08, 0x09, 0x0f, 0x12, 0x0a, 0x0b, + 0x17, 0x0f, 0x09, 0x0e, 0x14, 0x0f, 0x17, 0x16, 0x0e, 0x15, 0x0b, 0x13, + 0x13, 0x13, 0x0a, 0x14, 0x0f, 0x09, 0x08, 0x16, 0x14, 0x13, 0x16, 0x0f, + 0x12, 0x16, 0x10, 0x09, 0x11, 0x12, 0x0d, 0x11, 0x0a, 0x0f, 0x08, 0x16, + 0x17, 0x17, 0x15, 0x0d, 0x15, 0x08, 0x09, 0x10, 0x13, 0x0b, 0x0d, 0x0b, + 0x0d, 0x0d, 0x09, 0x0a, 0x08, 0x17, 0x11, 0x13, 0x16, 0x0a, 0x15, 0x10, + 0x14, 0x0b, 0x09, 0x17, 0x12, 0x09, 0x16, 0x12, 0x09, 0x13, 0x17, 0x16, + 0x13, 0x09, 0x0f, 0x0f, 0x0d, 0x14, 0x12, 0x13, 0x0a, 0x14, 0x15, 0x0a, + 0x14, 0x0e, 0x16, 0x13, 0x11, 0x14, 0x0b, 0x0e, 0x17, 0x0d, 0x0d, 0x12, + 0x0f, 0x0b, 0x0c, 0x10, 0x16, 0x0c, 0x0f, 0x12, 0x0e, 0x17, 0x0a, 0x13, + 0x13, 0x15, 0x0e, 0x15, 0x11, 0x0c, 0x08, 0x0e, 0x13, 0x17, 0x09, 0x0c, + 0x13, 0x0d, 0x12, 0x13, 0x12, 0x17, 0x0d, 0x0a, 0x0b, 0x12, 0x13, 0x0a, + 0x16, 0x0a, 0x14, 0x0c, 0x09, 0x17, 0x08, 0x15, 0x14, 0x0f, 0x12, 0x0e, + 0x13, 0x13, 0x14, 0x0f, 0x12, 0x15, 0x13, 0x0e, 0x0a, 0x0d, 0x09, 0x15, + 0x0d, 0x0f, 0x17, 0x11, 0x09, 0x13, 0x13, 0x08, 0x15, 0x10, 0x0d, 0x17, + 0x0f, 0x0e, 0x15, 0x0b, 0x15, 0x10, 0x11, 0x11, 0x0b, 0x0e, 0x08, 0x16, + 0x0c, 0x14, 0x0c, 0x0e, 0x0a, 0x0d, 0x0c, 0x0f, 0x14, 0x0c, 0x09, 0x16, + 0x17, 0x15, 0x16, 0x15, 0x0d, 0x0c, 0x15, 0x14, 0x12, 0x12, 0x08, 0x0f, + 0x0a, 0x12, 0x09, 0x0e, 0x08, 0x09, 0x0c, 0x0c, 0x15, 0x11, 0x13, 0x17, + 0x16, 0x08, 0x0f, 0x13, 0x0c, 0x11, 0x11, 0x0c, 0x0e, 0x10, 0x0a, 0x13, + 0x14, 0x17, 0x10, 0x0e, 0x12, 0x10, 0x16, 0x15, 0x0b, 0x17, 0x0b, 0x0b, + 0x08, 0x10, 0x0f, 0x16, 0x09, 0x0b, 0x16, 0x08, 0x0b, 0x0e, 0x14, 0x10, + 0x17, 0x0e, 0x14, 0x0d, 0x16, 0x16, 0x09, 0x13, 0x16, 0x11, 0x0a, 0x10, + 0x0a, 0x08, 0x0d, 0x0d, 0x17, 0x11, 0x10, 0x08, 0x0a, 0x08, 0x17, 0x0c, + 0x0c, 0x15, 0x0d, 0x0f, 0x0b, 0x09, 0x17, 0x0a, 0x0f, 0x14, 0x10, 0x0e, + 0x09, 0x15, 0x08, 0x0d, 0x17, 0x08, 0x0f, 0x0f, 0x14, 0x08, 0x15, 0x0f, + 0x11, 0x08, 0x08, 0x14, 0x0c, 0x0a, 0x0a, 0x11, 0x11, 0x15, 0x15, 0x12, + 0x09, 0x0a, 0x16, 0x0e, 0x0e, 0x0e, 0x17, 0x0f, 0x0b, 0x17, 0x14, 0x0a, + 0x08, 0x0c, 0x11, 0x14, 0x0c, 0x0f, 0x0c, 0x16, 0x0f, 0x0d, 0x13, 0x14, + 0x0f, 0x15, 0x0d, 0x09, 0x13, 0x0a, 0x14, 0x14, 0x0d, 0x12, 0x0a, 0x13, + 0x08, 0x09, 0x0b, 0x0c, 0x09, 0x08, 0x0f, 0x09, 0x0c, 0x09, 0x16, 0x11, + 0x10, 0x0a, 0x10, 0x08, 0x10, 0x0b, 0x15, 0x17, 0x09, 0x0a, 0x09, 0x15, + 0x0d, 0x15, 0x11, 0x12, 0x0f, 0x14, 0x0d, 0x10, 0x16, 0x11, 0x14, 0x08, + 0x11, 0x0b, 0x09, 0x16, 0x0c, 0x08, 0x10, 0x15, 0x0b, 0x08, 0x16, 0x13, + 0x0c, 0x13, 0x13, 0x0e, 0x15, 0x14, 0x0b, 0x0b, 0x11, 0x15, 0x15, 0x08, + 0x11, 0x0b, 0x11, 0x10, 0x14, 0x0d, 0x10, 0x0e, 0x11, 0x12, 0x0c, 0x16, + 0x12, 0x14, 0x13, 0x15, 0x15, 0x12, 0x10, 0x0a, 0x0d, 0x0b, 0x11, 0x0b, + 0x08, 0x14, 0x0e, 0x11, 0x12, 0x0c, 0x12, 0x0c, 0x10, 0x0b, 0x14, 0x0d, + 0x10, 0x0c, 0x13, 0x0a, 0x16, 0x17, 0x08, 0x11, 0x14, 0x14, 0x0e, 0x11, + 0x0e, 0x16, 0x14, 0x14, 0x0a, 0x0d, 0x08, 0x0a, 0x0a, 0x0e, 0x14, 0x14, + 0x13, 0x0e, 0x08, 0x0b, 0x11, 0x14, 0x10, 0x0a, 0x09, 0x0c, 0x0d, 0x08, + 0x0b, 0x0d, 0x11, 0x08, 0x0a, 0x17, 0x12, 0x10, 0x16, 0x0e, 0x0d, 0x08, + 0x13, 0x0d, 0x0b, 0x15, 0x14, 0x17, 0x12, 0x0f, 0x0e, 0x12, 0x13, 0x17, + 0x0f, 0x0c, 0x0a, 0x10, 0x10, 0x0f, 0x10, 0x14, 0x15, 0x0a, 0x14, 0x17, + 0x09, 0x0e, 0x10, 0x08, 0x15, 0x15, 0x09, 0x10, 0x0a, 0x0c, 0x0e, 0x16, + 0x0c, 0x09, 0x0e, 0x12, 0x13, 0x09, 0x12, 0x0a, 0x0e, 0x15, 0x13, 0x16, + 0x0d, 0x0c, 0x12, 0x0a, 0x0e, 0x0f, 0x0a, 0x10, 0x15, 0x12, 0x10, 0x12, + 0x10, 0x12, 0x0b, 0x12, 0x16, 0x12, 0x11, 0x0b, 0x13, 0x17, 0x15, 0x0e, + 0x09, 0x10, 0x11, 0x0f, 0x0d, 0x0c, 0x0d, 0x12, 0x10, 0x08, 0x15, 0x17, + 0x0f, 0x17, 0x0f, 0x0c, 0x12, 0x08, 0x17, 0x0a, 0x12, 0x0a, 0x14, 0x11, + 0x17, 0x15, 0x08, 0x11, 0x15, 0x17, 0x13, 0x0f, 0x0a, 0x10, 0x08, 0x17, + 0x17, 0x14, 0x10, 0x0c, 0x0f, 0x10, 0x13, 0x11, 0x09, 0x11, 0x0a, 0x16, + 0x15, 0x0c, 0x0d, 0x09, 0x0c, 0x12, 0x14, 0x0c, 0x0f, 0x15, 0x15, 0x0d, + 0x14, 0x11, 0x14, 0x17, 0x0a, 0x15, 0x16, 0x09, 0x12, 0x0f, 0x0e, 0x09, + 0x17, 0x0a, 0x13, 0x08, 0x14, 0x15, 0x17, 0x12, 0x0a, 0x0c, 0x14, 0x0f, + 0x17, 0x11, 0x13, 0x0f, 0x0e, 0x11, 0x14, 0x0a, 0x0a, 0x10, 0x09, 0x0d, + 0x0d, 0x08, 0x0f, 0x17, 0x0f, 0x16, 0x09, 0x0e, 0x08, 0x14, 0x0e, 0x15, + 0x12, 0x0d, 0x10, 0x14, 0x12, 0x0c, 0x0b, 0x11, 0x15, 0x16, 0x08, 0x0b, + 0x0f, 0x15, 0x0e, 0x12, 0x0d, 0x0f, 0x17, 0x13, 0x10, 0x0f, 0x13, 0x17, + 0x0d, 0x14, 0x0e, 0x0e, 0x11, 0x15, 0x0b, 0x0b, 0x0b, 0x13, 0x17, 0x15, + 0x08, 0x0b, 0x0e, 0x15, 0x09, 0x0f, 0x08, 0x11, 0x0c, 0x0e, 0x0b, 0x12, + 0x16, 0x0b, 0x0e, 0x0f, 0x12, 0x09, 0x0e, 0x08, 0x16, 0x15, 0x0e, 0x10, + 0x12, 0x12, 0x13, 0x15, 0x0e, 0x13, 0x13, 0x0e, 0x17, 0x0a, 0x0b, 0x09, + 0x12, 0x0c, 0x12, 0x16, 0x13, 0x16, 0x11, 0x11, 0x0a, 0x17, 0x08, 0x15, + 0x09, 0x0f, 0x15, 0x08, 0x0d, 0x0c, 0x10, 0x17, 0x16, 0x0c, 0x15, 0x0d, + 0x08, 0x11, 0x13, 0x08, 0x13, 0x17, 0x09, 0x0d, 0x0c, 0x13, 0x0c, 0x17, + 0x12, 0x15, 0x10, 0x14, 0x15, 0x11, 0x12, 0x17, 0x09, 0x0f, 0x17, 0x0e, + 0x13, 0x10, 0x0e, 0x12, 0x15, 0x0c, 0x08, 0x16, 0x15, 0x14, 0x16, 0x11, + 0x13, 0x17, 0x16, 0x17, 0x13, 0x0b, 0x16, 0x0d, 0x09, 0x0f, 0x0a, 0x16, + 0x09, 0x14, 0x16, 0x0a, 0x0b, 0x15, 0x10, 0x17, 0x0e, 0x16, 0x12, 0x0b, + 0x0a, 0x12, 0x09, 0x08, 0x0e, 0x08, 0x11, 0x0a, 0x17, 0x0f, 0x0a, 0x12, + 0x13, 0x09, 0x08, 0x14, 0x10, 0x0a, 0x13, 0x11, 0x16, 0x11, 0x14, 0x0a, + 0x0f, 0x0c, 0x0a, 0x15, 0x0b, 0x15, 0x09, 0x0e, 0x10, 0x0a, 0x0e, 0x16, + 0x0a, 0x17, 0x09, 0x0a, 0x0f, 0x0b, 0x14, 0x0a, 0x0c, 0x15, 0x17, 0x15, + 0x17, 0x13, 0x0f, 0x16, 0x0d, 0x0b, 0x09, 0x14, 0x10, 0x0c, 0x11, 0x14, + 0x14, 0x10, 0x13, 0x09, 0x14, 0x14, 0x16, 0x0c, 0x09, 0x10, 0x09, 0x0b, + 0x0b, 0x0b, 0x15, 0x09, 0x14, 0x0e, 0x09, 0x0b, 0x08, 0x0c, 0x0b, 0x16, + 0x0c, 0x0d, 0x09, 0x09, 0x0e, 0x0a, 0x16, 0x0b, 0x12, 0x11, 0x0d, 0x0e, + 0x0e, 0x0b, 0x13, 0x0f, 0x14, 0x14, 0x12, 0x17, 0x17, 0x10, 0x09, 0x13, + 0x16, 0x0a, 0x17, 0x16, 0x0f, 0x0a, 0x15, 0x14, 0x0f, 0x16, 0x15, 0x16, + 0x08, 0x14, 0x09, 0x12, 0x0d, 0x0f, 0x09, 0x14, 0x12, 0x14, 0x0b, 0x0f, + 0x10, 0x16, 0x0e, 0x10, 0x0e, 0x10, 0x0c, 0x0d, 0x12, 0x0c, 0x0b, 0x0a, + 0x0e, 0x08, 0x17, 0x16, 0x16, 0x15, 0x15, 0x17, 0x11, 0x16, 0x12, 0x16, + 0x0e, 0x13, 0x12, 0x09, 0x10, 0x16, 0x10, 0x09, 0x15, 0x17, 0x12, 0x0c, + 0x0f, 0x16, 0x11, 0x0a, 0x0a, 0x15, 0x0c, 0x11, 0x15, 0x0c, 0x10, 0x14, + 0x09, 0x0d, 0x14, 0x12, 0x0c, 0x0e, 0x10, 0x12, 0x0a, 0x0b, 0x13, 0x13, + 0x0a, 0x0c, 0x14, 0x08, 0x0b, 0x0e, 0x0d, 0x12, 0x0d, 0x16, 0x14, 0x0f, + 0x14, 0x09, 0x09, 0x11, 0x0d, 0x12, 0x0e, 0x0f, 0x17, 0x0a, 0x09, 0x0c, + 0x11, 0x12, 0x17, 0x14, 0x15, 0x13, 0x0f, 0x08, 0x17, 0x0c, 0x08, 0x0a, + 0x12, 0x0e, 0x15, 0x17, 0x0c, 0x11, 0x0f, 0x09, 0x13, 0x11, 0x13, 0x09, + 0x0b, 0x09, 0x10, 0x0b, 0x0c, 0x11, 0x0f, 0x16, 0x0b, 0x0f, 0x13, 0x09, + 0x0a, 0x0a, 0x0a, 0x09, 0x0e, 0x0b, 0x0c, 0x09, 0x11, 0x09, 0x09, 0x16, + 0x12, 0x10, 0x17, 0x0e, 0x09, 0x12, 0x0f, 0x0d, 0x14, 0x17, 0x10, 0x09, + 0x11, 0x08, 0x17, 0x15, 0x0f, 0x12, 0x16, 0x11, 0x15, 0x09, 0x13, 0x0c, + 0x0c, 0x17, 0x0d, 0x15, 0x08, 0x0e, 0x13, 0x13, 0x17, 0x13, 0x09, 0x08, + 0x0d, 0x11, 0x0e, 0x0a, 0x11, 0x16, 0x0b, 0x0a, 0x16, 0x0a, 0x17, 0x0d, + 0x15, 0x16, 0x17, 0x12, 0x17, 0x12, 0x17, 0x0c, 0x11, 0x0c, 0x09, 0x11, + 0x12, 0x15, 0x0d, 0x12, 0x10, 0x0e, 0x12, 0x16, 0x17, 0x08, 0x08, 0x10, + 0x17, 0x0b, 0x13, 0x15, 0x0e, 0x13, 0x0b, 0x0c, 0x11, 0x0a, 0x16, 0x11, + 0x15, 0x16, 0x16, 0x0f, 0x0a, 0x08, 0x09, 0x15, 0x15, 0x0e, 0x0f, 0x0e, + 0x08, 0x16, 0x13, 0x0b, 0x16, 0x14, 0x08, 0x13, 0x0a, 0x10, 0x0a, 0x17, + 0x12, 0x0f, 0x14, 0x15, 0x14, 0x09, 0x08, 0x0d, 0x0a, 0x09, 0x0d, 0x16, + 0x0d, 0x11, 0x0c, 0x14, 0x13, 0x0b, 0x09, 0x14, 0x09, 0x14, 0x17, 0x08, + 0x11, 0x17, 0x13, 0x14, 0x0f, 0x15, 0x14, 0x0a, 0x0d, 0x10, 0x08, 0x09, + 0x12, 0x09, 0x0f, 0x14, 0x0a, 0x14, 0x12, 0x0f, 0x0d, 0x16, 0x0c, 0x09, + 0x0a, 0x0d, 0x15, 0x0c, 0x0a, 0x15, 0x0c, 0x13, 0x14, 0x08, 0x0f, 0x0c, + 0x16, 0x0b, 0x0f, 0x0b, 0x14, 0x0f, 0x0d, 0x0e, 0x11, 0x14, 0x0a, 0x13, + 0x11, 0x15, 0x0b, 0x17, 0x14, 0x0f, 0x09, 0x16, 0x15, 0x16, 0x0b, 0x17, + 0x14, 0x10, 0x13, 0x11, 0x11, 0x0b, 0x15, 0x0f, 0x0f, 0x0d, 0x13, 0x0b, + 0x15, 0x08, 0x11, 0x0e, 0x15, 0x14, 0x09, 0x0f, 0x11, 0x0d, 0x0f, 0x0d, + 0x15, 0x10, 0x0c, 0x12, 0x0f, 0x10, 0x12, 0x0b, 0x09, 0x0e, 0x14, 0x12, + 0x11, 0x12, 0x09, 0x08, 0x17, 0x15, 0x0c, 0x14, 0x15, 0x16, 0x0b, 0x13, + 0x12, 0x0d, 0x0a, 0x0c, 0x12, 0x11, 0x12, 0x0f, 0x0a, 0x17, 0x0a, 0x11, + 0x10, 0x14, 0x15, 0x11, 0x0a, 0x11, 0x0b, 0x14, 0x0b, 0x0d, 0x15, 0x0b, + 0x0a, 0x09, 0x08, 0x08, 0x17, 0x0b, 0x13, 0x12, 0x10, 0x16, 0x17, 0x0b, + 0x10, 0x12, 0x12, 0x12, 0x11, 0x14, 0x0c, 0x09, 0x11, 0x09, 0x12, 0x14, + 0x13, 0x16, 0x10, 0x17, 0x0b, 0x0d, 0x0b, 0x0d, 0x0f, 0x0b, 0x0d, 0x0f, + 0x0f, 0x09, 0x0a, 0x08, 0x08, 0x09, 0x0b, 0x10, 0x13, 0x16, 0x0b, 0x0d, + 0x13, 0x10, 0x0f, 0x0c, 0x12, 0x09, 0x09, 0x0d, 0x17, 0x12, 0x0c, 0x0b, + 0x17, 0x0f, 0x10, 0x0f, 0x13, 0x16, 0x16, 0x0b, 0x08, 0x08, 0x0b, 0x08, + 0x0a, 0x0f, 0x11, 0x16, 0x0d, 0x15, 0x0b, 0x09, 0x0d, 0x12, 0x0e, 0x17, + 0x14, 0x0f, 0x0d, 0x14, 0x09, 0x12, 0x17, 0x09, 0x09, 0x10, 0x10, 0x15, + 0x0f, 0x0f, 0x08, 0x10, 0x10, 0x0c, 0x11, 0x13, 0x13, 0x0b, 0x11, 0x09, + 0x08, 0x15, 0x0a, 0x0e, 0x0f, 0x11, 0x0e, 0x0c, 0x08, 0x13, 0x08, 0x0a, + 0x0e, 0x08, 0x0b, 0x0f, 0x10, 0x14, 0x0d, 0x08, 0x0c, 0x0d, 0x10, 0x15, + 0x14, 0x11, 0x14, 0x0d, 0x0d, 0x09, 0x0d, 0x12, 0x0f, 0x15, 0x0f, 0x09, + 0x17, 0x17, 0x0e, 0x0c, 0x09, 0x16, 0x11, 0x08, 0x10, 0x0d, 0x0f, 0x13, + 0x0f, 0x0b, 0x17, 0x0d, 0x17, 0x0c, 0x11, 0x13, 0x16, 0x0d, 0x08, 0x0b, + 0x0f, 0x0d, 0x16, 0x16, 0x0b, 0x0d, 0x17, 0x0b, 0x0d, 0x0e, 0x0f, 0x0e, + 0x0c, 0x08, 0x0f, 0x15, 0x0e, 0x17, 0x10, 0x15, 0x0a, 0x0f, 0x0b, 0x09, + 0x14, 0x14, 0x14, 0x12, 0x0a, 0x15, 0x16, 0x11, 0x0a, 0x14, 0x0f, 0x0e, + 0x0a, 0x0f, 0x11, 0x0f, 0x15, 0x08, 0x15, 0x0a, 0x09, 0x0d, 0x17, 0x0f, + 0x0c, 0x10, 0x0d, 0x0e, 0x08, 0x10, 0x10, 0x14, 0x0d, 0x0d, 0x0f, 0x0f, + 0x0a, 0x0d, 0x09, 0x0d, 0x0a, 0x10, 0x13, 0x0c, 0x17, 0x0c, 0x13, 0x15, + 0x0d, 0x11, 0x08, 0x0f, 0x16, 0x08, 0x17, 0x0a, 0x10, 0x0c, 0x11, 0x10, + 0x15, 0x09, 0x0d, 0x0b, 0x0f, 0x14, 0x12, 0x11, 0x0a, 0x14, 0x16, 0x0c, + 0x0c, 0x11, 0x11, 0x0c, 0x16, 0x0c, 0x0a, 0x0c, 0x15, 0x0a, 0x13, 0x13, + 0x0b, 0x12, 0x16, 0x13, 0x17, 0x10, 0x0c, 0x15, 0x11, 0x11, 0x08, 0x08, + 0x0e, 0x13, 0x12, 0x10, 0x0f, 0x10, 0x15, 0x14, 0x0a, 0x0e, 0x08, 0x09, + 0x12, 0x0b, 0x0d, 0x10, 0x0e, 0x09, 0x0c, 0x11, 0x14, 0x0b, 0x0d, 0x14, + 0x13, 0x11, 0x11, 0x0d, 0x0b, 0x11, 0x0e, 0x12, 0x0d, 0x08, 0x0a, 0x14, + 0x11, 0x08, 0x10, 0x13, 0x0e, 0x11, 0x14, 0x09, 0x15, 0x0a, 0x12, 0x0b, + 0x0b, 0x16, 0x15, 0x17, 0x09, 0x0a, 0x14, 0x15, 0x14, 0x0d, 0x0a, 0x08, + 0x17, 0x10, 0x12, 0x0c, 0x10, 0x15, 0x09, 0x09, 0x15, 0x11, 0x15, 0x0c, + 0x0b, 0x11, 0x0d, 0x08, 0x14, 0x17, 0x0c, 0x17, 0x16, 0x09, 0x17, 0x08, + 0x0c, 0x13, 0x15, 0x09, 0x09, 0x17, 0x0a, 0x08, 0x10, 0x15, 0x0d, 0x08, + 0x12, 0x0e, 0x0a, 0x10, 0x08, 0x17, 0x14, 0x0b, 0x11, 0x0a, 0x0c, 0x0d, + 0x0a, 0x11, 0x0d, 0x08, 0x13, 0x0d, 0x09, 0x17, 0x09, 0x17, 0x09, 0x0a, + 0x17, 0x0b, 0x0b, 0x0f, 0x08, 0x10, 0x0f, 0x13, 0x17, 0x12, 0x0b, 0x17, + 0x11, 0x08, 0x0b, 0x0b, 0x0a, 0x10, 0x10, 0x0c, 0x09, 0x16, 0x0d, 0x14, + 0x09, 0x0e, 0x13, 0x0c, 0x17, 0x0c, 0x10, 0x08, 0x0b, 0x16, 0x15, 0x0f, + 0x0d, 0x11, 0x15, 0x13, 0x0f, 0x0d, 0x08, 0x10, 0x09, 0x14, 0x12, 0x0e, + 0x08, 0x10, 0x12, 0x16, 0x11, 0x15, 0x0f, 0x13, 0x0c, 0x0a, 0x17, 0x0b, + 0x0f, 0x10, 0x0b, 0x12, 0x0f, 0x08, 0x0a, 0x14, 0x12, 0x17, 0x0f, 0x09, + 0x0c, 0x0f, 0x11, 0x0e, 0x0c, 0x0c, 0x14, 0x0c, 0x15, 0x0e, 0x0b, 0x0e, + 0x0b, 0x12, 0x0a, 0x0f, 0x14, 0x0a, 0x13, 0x0c, 0x13, 0x16, 0x16, 0x0a, + 0x17, 0x09, 0x17, 0x11, 0x08, 0x0f, 0x12, 0x0c, 0x16, 0x0c, 0x12, 0x0b, + 0x11, 0x0f, 0x0f, 0x0e, 0x15, 0x12, 0x15, 0x09, 0x0c, 0x17, 0x11, 0x09, + 0x0a, 0x0c, 0x0d, 0x15, 0x0a, 0x0c, 0x08, 0x0a, 0x0d, 0x17, 0x13, 0x0d, + 0x0e, 0x0e, 0x12, 0x0d, 0x13, 0x0d, 0x10, 0x0c, 0x14, 0x17, 0x12, 0x12, + 0x12, 0x0f, 0x13, 0x16, 0x0f, 0x0c, 0x08, 0x11, 0x10, 0x0d, 0x0f, 0x13, + 0x12, 0x0f, 0x15, 0x08, 0x0e, 0x11, 0x0d, 0x15, 0x17, 0x08, 0x0a, 0x12, + 0x0d, 0x13, 0x17, 0x0a, 0x12, 0x11, 0x15, 0x0d, 0x09, 0x10, 0x0b, 0x11, + 0x15, 0x0b, 0x0a, 0x0e, 0x11, 0x11, 0x09, 0x0c, 0x09, 0x17, 0x0c, 0x0f, + 0x10, 0x11, 0x0d, 0x10, 0x12, 0x0f, 0x0b, 0x08, 0x0a, 0x0a, 0x0b, 0x15, + 0x14, 0x08, 0x0b, 0x15, 0x11, 0x0e, 0x0e, 0x0e, 0x12, 0x11, 0x14, 0x0c, + 0x0b, 0x16, 0x10, 0x0c, 0x15, 0x15, 0x14, 0x0e, 0x0f, 0x09, 0x16, 0x09, + 0x11, 0x0a, 0x09, 0x14, 0x0c, 0x0d, 0x12, 0x08, 0x0d, 0x15, 0x16, 0x16, + 0x0c, 0x0d, 0x0d, 0x17, 0x17, 0x0a, 0x0c, 0x0a, 0x08, 0x15, 0x0f, 0x16, + 0x12, 0x0c, 0x0c, 0x09, 0x0e, 0x0b, 0x0a, 0x08, 0x0d, 0x0c, 0x14, 0x12, + 0x11, 0x0e, 0x13, 0x16, 0x0c, 0x11, 0x15, 0x11, 0x16, 0x0a, 0x10, 0x15, + 0x0d, 0x14, 0x08, 0x0d, 0x11, 0x10, 0x0c, 0x0b, 0x14, 0x11, 0x0c, 0x0b, + 0x14, 0x0f, 0x0b, 0x0a, 0x13, 0x17, 0x15, 0x0c, 0x0e, 0x10, 0x0b, 0x13, + 0x09, 0x08, 0x0c, 0x08, 0x0b, 0x14, 0x16, 0x11, 0x11, 0x17, 0x17, 0x0b, + 0x0f, 0x0b, 0x0e, 0x0c, 0x14, 0x13, 0x0f, 0x11, 0x0a, 0x13, 0x14, 0x16, + 0x03, 0x00, 0x06, 0x02, 0x06, 0x02, 0x06, 0x00, 0x00, 0x05, 0x07, 0x05, + 0x01, 0x01, 0x06, 0x02, 0x04, 0x04, 0x03, 0x00, 0x05, 0x05, 0x06, 0x04, + 0x06, 0x00, 0x00, 0x07, 0x02, 0x05, 0x04, 0x06, 0x06, 0x02, 0x00, 0x05, + 0x05, 0x07, 0x05, 0x05, 0x04, 0x05, 0x03, 0x06, 0x06, 0x01, 0x00, 0x02, + 0x06, 0x04, 0x03, 0x04, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x04, + 0x07, 0x04, 0x03, 0x05, 0x07, 0x03, 0x03, 0x05, 0x03, 0x00, 0x02, 0x07, + 0x05, 0x06, 0x05, 0x04, 0x07, 0x06, 0x06, 0x06, 0x03, 0x01, 0x02, 0x05, + 0x03, 0x02, 0x06, 0x05, 0x04, 0x07, 0x01, 0x03, 0x04, 0x04, 0x00, 0x04, + 0x00, 0x04, 0x01, 0x03, 0x04, 0x04, 0x03, 0x02, 0x02, 0x01, 0x07, 0x02, + 0x07, 0x05, 0x00, 0x02, 0x07, 0x02, 0x00, 0x03, 0x05, 0x07, 0x00, 0x01, + 0x07, 0x02, 0x04, 0x04, 0x07, 0x05, 0x00, 0x07, 0x01, 0x02, 0x03, 0x06, + 0x06, 0x06, 0x01, 0x00, 0x07, 0x00, 0x03, 0x07, 0x06, 0x03, 0x02, 0x06, + 0x06, 0x03, 0x01, 0x04, 0x02, 0x02, 0x05, 0x02, 0x04, 0x02, 0x06, 0x03, + 0x00, 0x07, 0x03, 0x02, 0x01, 0x06, 0x01, 0x07, 0x05, 0x03, 0x00, 0x05, + 0x04, 0x03, 0x04, 0x03, 0x07, 0x07, 0x01, 0x05, 0x02, 0x03, 0x01, 0x05, + 0x05, 0x07, 0x00, 0x01, 0x02, 0x06, 0x05, 0x03, 0x05, 0x00, 0x05, 0x07, + 0x07, 0x06, 0x06, 0x04, 0x02, 0x07, 0x02, 0x06, 0x03, 0x06, 0x01, 0x03, + 0x06, 0x02, 0x01, 0x01, 0x06, 0x02, 0x06, 0x03, 0x02, 0x06, 0x05, 0x05, + 0x05, 0x02, 0x00, 0x03, 0x03, 0x05, 0x02, 0x02, 0x04, 0x01, 0x07, 0x06, + 0x01, 0x01, 0x04, 0x05, 0x00, 0x06, 0x00, 0x07, 0x01, 0x01, 0x00, 0x07, + 0x04, 0x07, 0x03, 0x07, 0x05, 0x00, 0x04, 0x03, 0x03, 0x04, 0x06, 0x07, + 0x01, 0x01, 0x02, 0x06, 0x03, 0x02, 0x05, 0x04, 0x04, 0x01, 0x01, 0x05, + 0x00, 0x02, 0x04, 0x01, 0x03, 0x04, 0x00, 0x07, 0x03, 0x03, 0x06, 0x01, + 0x04, 0x03, 0x05, 0x00, 0x07, 0x04, 0x00, 0x01, 0x05, 0x02, 0x07, 0x01, + 0x04, 0x04, 0x05, 0x01, 0x06, 0x07, 0x06, 0x06, 0x01, 0x02, 0x07, 0x05, +}; + +//*******************************************************************v********** +// +// The top right corner of the border. +// +//***************************************************************************** +static const uint8_t g_pui8TopRight[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 10, 0, + 26, 0, + + 34, + 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x15, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x44, 0x00, 0x00, + 0x46, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x4e, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5a, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x1d, 0x21, 0x1d, 0x1c, 0x1a, 0x1e, 0x14, 0x00, 0x00, 0x00, 0x13, 0x16, + 0x18, 0x18, 0x0c, 0x11, 0x1d, 0x20, 0x14, 0x00, 0x13, 0x0b, 0x18, 0x10, + 0x18, 0x14, 0x11, 0x11, 0x04, 0x00, 0x0a, 0x0c, 0x0e, 0x0a, 0x0e, 0x0a, + 0x14, 0x11, 0x07, 0x01, 0x15, 0x0a, 0x18, 0x18, 0x0a, 0x12, 0x15, 0x0e, + 0x0f, 0x06, 0x0c, 0x0a, 0x0a, 0x16, 0x0c, 0x0c, 0x0e, 0x0c, 0x14, 0x02, + 0x12, 0x15, 0x16, 0x10, 0x0b, 0x0d, 0x0c, 0x15, 0x19, 0x04, 0x0d, 0x16, + 0x15, 0x0a, 0x0a, 0x15, 0x19, 0x0b, 0x0c, 0x08, 0x16, 0x0f, 0x11, 0x19, + 0x0d, 0x12, 0x0d, 0x0f, 0x13, 0x08, 0x15, 0x0c, 0x0e, 0x15, 0x19, 0x0c, + 0x13, 0x18, 0x15, 0x02, 0x19, 0x13, 0x10, 0x0e, 0x15, 0x12, 0x0c, 0x11, + 0x13, 0x07, 0x19, 0x0e, 0x12, 0x17, 0x14, 0x0a, 0x13, 0x0b, 0x17, 0x06, + 0x0a, 0x13, 0x16, 0x10, 0x0c, 0x13, 0x17, 0x0f, 0x0a, 0x07, 0x16, 0x0e, + 0x0f, 0x18, 0x11, 0x0e, 0x10, 0x12, 0x0c, 0x09, 0x14, 0x13, 0x0c, 0x13, + 0x0d, 0x0e, 0x0b, 0x0f, 0x0e, 0x05, 0x17, 0x10, 0x16, 0x12, 0x0f, 0x14, + 0x19, 0x10, 0x0c, 0x06, 0x0b, 0x15, 0x0c, 0x13, 0x17, 0x12, 0x12, 0x0a, + 0x11, 0x07, 0x16, 0x0c, 0x0e, 0x16, 0x0d, 0x0f, 0x0f, 0x0c, 0x13, 0x02, + 0x14, 0x0b, 0x12, 0x0f, 0x0e, 0x0b, 0x11, 0x0f, 0x19, 0x07, 0x0e, 0x10, + 0x16, 0x0f, 0x0f, 0x17, 0x12, 0x0e, 0x0b, 0x07, 0x14, 0x13, 0x0d, 0x0b, + 0x0b, 0x10, 0x16, 0x0d, 0x11, 0x02, 0x09, 0x0a, 0x14, 0x11, 0x12, 0x12, + 0x14, 0x0b, 0x18, 0x04, 0x01, 0x03, 0x06, 0x11, 0x19, 0x18, 0x10, 0x14, + 0x17, 0x08, 0x00, 0x00, 0x14, 0x22, 0x0c, 0x15, 0x15, 0x17, 0x0e, 0x02, + 0x00, 0x00, 0x00, 0x1b, 0x13, 0x14, 0x11, 0x0a, 0x15, 0x04, 0x00, 0x00, + 0x00, 0x12, 0x1f, 0x11, 0x0c, 0x0a, 0x13, 0x04, +}; + +//***************************************************************************** +// +// The left side of the border. +// +//***************************************************************************** +static const uint8_t g_pui8Left[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 6, 0, + 204, 0, + + 39, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x15, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x40, 0x00, 0x00, + 0x42, 0x00, 0x00, + 0x44, 0x00, 0x00, + 0x46, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, + 0x4e, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5a, 0x00, 0x00, + 0x5c, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x24, 0x15, 0x12, 0x0f, 0x16, 0x04, 0x25, 0x09, 0x0e, 0x13, 0x0c, 0x03, + 0x1d, 0x15, 0x0e, 0x0a, 0x17, 0x00, 0x22, 0x0c, 0x0f, 0x0a, 0x0d, 0x06, + 0x27, 0x14, 0x09, 0x0e, 0x09, 0x03, 0x20, 0x16, 0x0b, 0x0a, 0x0e, 0x01, + 0x23, 0x0c, 0x0c, 0x0a, 0x17, 0x04, 0x21, 0x0d, 0x0e, 0x08, 0x0f, 0x03, + 0x19, 0x0a, 0x13, 0x11, 0x0d, 0x00, 0x1d, 0x0c, 0x15, 0x0e, 0x12, 0x07, + 0x25, 0x0a, 0x15, 0x09, 0x0c, 0x02, 0x1c, 0x08, 0x10, 0x10, 0x0b, 0x04, + 0x19, 0x15, 0x15, 0x10, 0x16, 0x02, 0x27, 0x17, 0x0e, 0x12, 0x10, 0x05, + 0x23, 0x16, 0x17, 0x10, 0x0c, 0x05, 0x1f, 0x0a, 0x14, 0x0d, 0x0b, 0x00, + 0x21, 0x0f, 0x09, 0x0a, 0x08, 0x02, 0x22, 0x09, 0x0a, 0x0f, 0x12, 0x00, + 0x24, 0x11, 0x08, 0x0a, 0x0b, 0x04, 0x26, 0x16, 0x0e, 0x16, 0x0f, 0x05, + 0x20, 0x16, 0x15, 0x0c, 0x0b, 0x00, 0x1d, 0x14, 0x11, 0x0f, 0x16, 0x04, + 0x25, 0x10, 0x13, 0x17, 0x08, 0x03, 0x18, 0x14, 0x17, 0x08, 0x17, 0x01, + 0x21, 0x16, 0x0a, 0x17, 0x14, 0x04, 0x22, 0x0d, 0x0f, 0x10, 0x12, 0x05, + 0x22, 0x08, 0x0f, 0x0c, 0x10, 0x03, 0x26, 0x0d, 0x17, 0x11, 0x0d, 0x07, + 0x27, 0x0d, 0x14, 0x17, 0x0e, 0x05, 0x1a, 0x17, 0x11, 0x0c, 0x16, 0x03, + 0x26, 0x11, 0x14, 0x0d, 0x0a, 0x03, 0x18, 0x14, 0x0e, 0x0f, 0x08, 0x07, + 0x26, 0x16, 0x0b, 0x16, 0x10, 0x04, 0x26, 0x10, 0x16, 0x12, 0x10, 0x02, + 0x1e, 0x13, 0x0c, 0x17, 0x17, 0x01, 0x1e, 0x16, 0x14, 0x0a, 0x0b, 0x07, + 0x21, 0x0b, 0x13, 0x17, 0x13, 0x06, 0x26, 0x12, 0x13, 0x0a, 0x10, 0x02, + 0x22, 0x0e, 0x15, 0x11, 0x08, 0x02, 0x26, 0x0e, 0x08, 0x0a, 0x0e, 0x00, + 0x1c, 0x15, 0x16, 0x09, 0x08, 0x01, 0x18, 0x11, 0x0d, 0x13, 0x10, 0x00, + 0x20, 0x0f, 0x13, 0x0b, 0x11, 0x02, 0x1f, 0x0c, 0x12, 0x0c, 0x15, 0x05, + 0x22, 0x13, 0x0a, 0x12, 0x16, 0x04, 0x23, 0x0a, 0x0e, 0x11, 0x0c, 0x03, + 0x24, 0x0c, 0x08, 0x09, 0x17, 0x04, 0x1b, 0x0f, 0x08, 0x17, 0x13, 0x05, + 0x1b, 0x0b, 0x16, 0x16, 0x10, 0x06, 0x22, 0x0a, 0x10, 0x14, 0x15, 0x03, + 0x1d, 0x10, 0x11, 0x14, 0x0a, 0x06, 0x1b, 0x16, 0x09, 0x0b, 0x08, 0x00, + 0x25, 0x0c, 0x11, 0x15, 0x0b, 0x02, 0x20, 0x0f, 0x10, 0x0e, 0x0d, 0x00, + 0x1a, 0x17, 0x0a, 0x13, 0x14, 0x00, 0x19, 0x0a, 0x11, 0x12, 0x16, 0x05, + 0x20, 0x0a, 0x12, 0x11, 0x0e, 0x05, 0x23, 0x0b, 0x17, 0x0c, 0x09, 0x01, + 0x21, 0x11, 0x12, 0x09, 0x08, 0x00, 0x1a, 0x0b, 0x08, 0x0c, 0x16, 0x06, + 0x1d, 0x17, 0x16, 0x16, 0x12, 0x06, 0x22, 0x0a, 0x17, 0x0c, 0x14, 0x02, + 0x18, 0x0f, 0x11, 0x08, 0x14, 0x05, 0x1b, 0x0e, 0x0c, 0x15, 0x10, 0x02, + 0x25, 0x12, 0x0f, 0x15, 0x17, 0x03, 0x22, 0x0c, 0x0d, 0x10, 0x0a, 0x00, + 0x1d, 0x14, 0x0a, 0x0c, 0x09, 0x07, 0x22, 0x0a, 0x0e, 0x0c, 0x0a, 0x01, + 0x26, 0x0d, 0x11, 0x0b, 0x0a, 0x00, 0x20, 0x08, 0x13, 0x17, 0x16, 0x05, + 0x1e, 0x10, 0x17, 0x13, 0x08, 0x00, 0x23, 0x0e, 0x16, 0x16, 0x13, 0x00, + 0x25, 0x0d, 0x0a, 0x0b, 0x11, 0x02, 0x1e, 0x10, 0x12, 0x08, 0x14, 0x06, + 0x19, 0x0c, 0x16, 0x15, 0x0c, 0x06, 0x20, 0x12, 0x0c, 0x0f, 0x0e, 0x02, + 0x21, 0x0a, 0x14, 0x10, 0x08, 0x03, 0x21, 0x15, 0x15, 0x14, 0x09, 0x03, + 0x19, 0x10, 0x17, 0x14, 0x10, 0x06, 0x21, 0x12, 0x08, 0x10, 0x0f, 0x02, + 0x1c, 0x08, 0x17, 0x11, 0x10, 0x02, 0x27, 0x0a, 0x0f, 0x13, 0x12, 0x04, + 0x1a, 0x0c, 0x0d, 0x17, 0x08, 0x03, 0x1e, 0x09, 0x17, 0x0e, 0x16, 0x03, + 0x1b, 0x0f, 0x09, 0x0b, 0x17, 0x04, 0x20, 0x0c, 0x11, 0x10, 0x15, 0x01, + 0x25, 0x15, 0x0c, 0x0d, 0x10, 0x07, 0x25, 0x12, 0x0a, 0x0b, 0x12, 0x01, + 0x21, 0x09, 0x0d, 0x11, 0x10, 0x01, 0x18, 0x13, 0x12, 0x09, 0x17, 0x05, + 0x23, 0x10, 0x17, 0x0d, 0x08, 0x06, 0x1f, 0x16, 0x12, 0x13, 0x0b, 0x01, + 0x22, 0x08, 0x15, 0x15, 0x0b, 0x04, 0x18, 0x15, 0x11, 0x0d, 0x0e, 0x01, + 0x20, 0x0f, 0x15, 0x0b, 0x11, 0x06, 0x26, 0x0c, 0x0d, 0x15, 0x11, 0x03, + 0x22, 0x08, 0x0c, 0x0c, 0x13, 0x03, 0x1f, 0x0e, 0x10, 0x0c, 0x0b, 0x06, + 0x24, 0x0b, 0x12, 0x0e, 0x10, 0x00, 0x20, 0x09, 0x10, 0x0e, 0x0d, 0x01, + 0x1c, 0x0b, 0x0e, 0x11, 0x09, 0x00, 0x27, 0x13, 0x09, 0x0c, 0x08, 0x06, + 0x23, 0x0f, 0x0b, 0x0c, 0x14, 0x03, 0x19, 0x11, 0x11, 0x13, 0x17, 0x01, + 0x24, 0x10, 0x0c, 0x0d, 0x17, 0x04, 0x20, 0x0b, 0x15, 0x17, 0x15, 0x07, + 0x27, 0x15, 0x12, 0x09, 0x09, 0x05, 0x26, 0x15, 0x0a, 0x0a, 0x09, 0x07, + 0x20, 0x0a, 0x10, 0x0a, 0x16, 0x04, 0x1d, 0x13, 0x09, 0x11, 0x08, 0x00, + 0x1b, 0x10, 0x0c, 0x08, 0x10, 0x00, 0x27, 0x0f, 0x17, 0x12, 0x11, 0x00, + 0x1c, 0x0f, 0x15, 0x0f, 0x11, 0x07, 0x1e, 0x0a, 0x09, 0x17, 0x0c, 0x07, + 0x1f, 0x12, 0x12, 0x10, 0x0c, 0x05, 0x21, 0x0f, 0x0c, 0x15, 0x10, 0x06, + 0x27, 0x10, 0x0c, 0x16, 0x0a, 0x06, 0x26, 0x0f, 0x0d, 0x14, 0x16, 0x07, + 0x23, 0x0d, 0x09, 0x15, 0x0c, 0x03, 0x25, 0x13, 0x09, 0x0f, 0x0c, 0x02, + 0x1b, 0x15, 0x14, 0x10, 0x12, 0x02, 0x1c, 0x12, 0x15, 0x11, 0x10, 0x07, + 0x1e, 0x0f, 0x0f, 0x14, 0x0b, 0x02, 0x23, 0x17, 0x13, 0x15, 0x14, 0x07, + 0x1c, 0x11, 0x13, 0x0d, 0x09, 0x00, 0x22, 0x0c, 0x15, 0x0e, 0x14, 0x04, + 0x24, 0x09, 0x0a, 0x11, 0x12, 0x05, 0x21, 0x09, 0x0a, 0x08, 0x15, 0x02, + 0x1e, 0x11, 0x0d, 0x09, 0x0e, 0x00, 0x19, 0x12, 0x13, 0x15, 0x17, 0x06, + 0x25, 0x12, 0x09, 0x13, 0x09, 0x07, 0x1b, 0x15, 0x17, 0x0d, 0x0f, 0x05, + 0x18, 0x08, 0x14, 0x0a, 0x09, 0x04, 0x20, 0x10, 0x0b, 0x15, 0x12, 0x05, + 0x27, 0x13, 0x0c, 0x12, 0x11, 0x02, 0x1f, 0x0f, 0x17, 0x10, 0x0a, 0x00, + 0x1f, 0x0d, 0x15, 0x0f, 0x13, 0x02, 0x19, 0x14, 0x0d, 0x15, 0x17, 0x03, + 0x1f, 0x0f, 0x16, 0x12, 0x0d, 0x04, 0x1c, 0x0c, 0x0c, 0x11, 0x17, 0x07, + 0x26, 0x0e, 0x0d, 0x15, 0x17, 0x03, 0x25, 0x0f, 0x15, 0x13, 0x16, 0x04, + 0x27, 0x08, 0x0d, 0x0c, 0x15, 0x02, 0x23, 0x0d, 0x14, 0x12, 0x08, 0x01, + 0x1b, 0x0d, 0x0e, 0x10, 0x17, 0x03, 0x1e, 0x15, 0x15, 0x13, 0x13, 0x06, + 0x1b, 0x11, 0x0c, 0x08, 0x0c, 0x01, 0x21, 0x0c, 0x0a, 0x17, 0x10, 0x00, + 0x1b, 0x0c, 0x0e, 0x08, 0x17, 0x03, 0x1a, 0x0a, 0x13, 0x11, 0x12, 0x05, + 0x27, 0x08, 0x10, 0x15, 0x14, 0x02, 0x22, 0x17, 0x15, 0x17, 0x17, 0x01, + 0x19, 0x11, 0x0e, 0x0c, 0x10, 0x07, 0x1d, 0x14, 0x0b, 0x13, 0x15, 0x01, + 0x1a, 0x17, 0x0d, 0x16, 0x11, 0x07, 0x21, 0x11, 0x08, 0x0a, 0x0e, 0x06, + 0x1e, 0x09, 0x14, 0x0c, 0x08, 0x06, 0x1e, 0x09, 0x0e, 0x15, 0x0e, 0x07, + 0x24, 0x14, 0x13, 0x08, 0x0f, 0x04, 0x1a, 0x12, 0x0f, 0x10, 0x10, 0x00, + 0x20, 0x09, 0x12, 0x11, 0x0b, 0x00, 0x1e, 0x12, 0x09, 0x0b, 0x17, 0x00, + 0x27, 0x0d, 0x0b, 0x0d, 0x0b, 0x05, 0x1c, 0x17, 0x0e, 0x17, 0x17, 0x07, + 0x1f, 0x0a, 0x10, 0x17, 0x12, 0x00, 0x18, 0x0b, 0x09, 0x12, 0x14, 0x02, + 0x23, 0x0a, 0x17, 0x14, 0x0d, 0x07, 0x26, 0x0d, 0x0d, 0x09, 0x13, 0x04, + 0x23, 0x17, 0x0f, 0x0a, 0x16, 0x03, 0x18, 0x0e, 0x11, 0x10, 0x0d, 0x02, + 0x20, 0x0e, 0x10, 0x12, 0x08, 0x02, 0x18, 0x13, 0x0f, 0x08, 0x10, 0x06, + 0x27, 0x0e, 0x0a, 0x0c, 0x0f, 0x06, 0x24, 0x0b, 0x14, 0x0c, 0x0d, 0x05, + 0x23, 0x0e, 0x09, 0x0d, 0x16, 0x03, 0x22, 0x0f, 0x15, 0x0a, 0x0a, 0x06, + 0x1e, 0x0a, 0x11, 0x15, 0x0b, 0x00, 0x23, 0x0a, 0x0f, 0x15, 0x0e, 0x07, + 0x23, 0x0b, 0x0b, 0x10, 0x0f, 0x04, 0x1b, 0x0a, 0x17, 0x0d, 0x0f, 0x07, + 0x24, 0x09, 0x0e, 0x12, 0x0b, 0x04, 0x20, 0x12, 0x14, 0x09, 0x10, 0x07, + 0x1a, 0x0b, 0x09, 0x12, 0x09, 0x04, 0x22, 0x14, 0x13, 0x15, 0x0d, 0x01, + 0x1e, 0x11, 0x0d, 0x0e, 0x17, 0x06, 0x1c, 0x13, 0x16, 0x13, 0x0e, 0x01, + 0x1c, 0x16, 0x15, 0x08, 0x17, 0x02, 0x27, 0x0a, 0x11, 0x09, 0x15, 0x05, + 0x21, 0x0f, 0x0f, 0x0d, 0x0d, 0x06, 0x1f, 0x14, 0x0e, 0x14, 0x0a, 0x02, + 0x21, 0x0f, 0x09, 0x10, 0x0a, 0x03, 0x22, 0x0f, 0x0d, 0x10, 0x0f, 0x02, + 0x25, 0x0f, 0x10, 0x0f, 0x11, 0x02, 0x1a, 0x0b, 0x15, 0x12, 0x10, 0x01, + 0x1f, 0x08, 0x16, 0x15, 0x15, 0x00, 0x1b, 0x0e, 0x10, 0x0d, 0x17, 0x05, + 0x24, 0x11, 0x0a, 0x0a, 0x0a, 0x05, 0x20, 0x17, 0x0a, 0x08, 0x0f, 0x05, + 0x1e, 0x11, 0x17, 0x0b, 0x0b, 0x04, 0x1d, 0x12, 0x10, 0x0c, 0x10, 0x02, + 0x1d, 0x14, 0x14, 0x15, 0x09, 0x05, 0x20, 0x16, 0x0d, 0x13, 0x08, 0x03, + 0x1d, 0x11, 0x0f, 0x0f, 0x11, 0x07, 0x1b, 0x17, 0x10, 0x0a, 0x0b, 0x05, +}; + +//***************************************************************************** +// +// The right side of the border. +// +//***************************************************************************** +static const uint8_t g_pui8Right[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 6, 0, + 204, 0, + + 39, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x15, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x40, 0x00, 0x00, + 0x42, 0x00, 0x00, + 0x44, 0x00, 0x00, + 0x46, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, + 0x4e, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5a, 0x00, 0x00, + 0x5c, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x1f, 0x10, 0x15, 0x0b, 0x0f, 0x01, 0x20, 0x0e, 0x09, 0x16, 0x08, 0x07, + 0x23, 0x0a, 0x12, 0x0f, 0x08, 0x07, 0x20, 0x12, 0x11, 0x17, 0x12, 0x02, + 0x1d, 0x0d, 0x14, 0x0f, 0x0e, 0x02, 0x25, 0x16, 0x16, 0x12, 0x0a, 0x02, + 0x26, 0x12, 0x13, 0x08, 0x10, 0x06, 0x27, 0x0c, 0x17, 0x11, 0x13, 0x00, + 0x20, 0x0b, 0x12, 0x09, 0x0b, 0x02, 0x1d, 0x10, 0x13, 0x0a, 0x08, 0x00, + 0x1f, 0x15, 0x08, 0x0d, 0x10, 0x01, 0x22, 0x0f, 0x14, 0x0e, 0x0f, 0x02, + 0x1b, 0x0e, 0x11, 0x0b, 0x08, 0x02, 0x1b, 0x10, 0x11, 0x16, 0x11, 0x06, + 0x1b, 0x17, 0x0e, 0x17, 0x09, 0x03, 0x19, 0x11, 0x0c, 0x09, 0x16, 0x06, + 0x1b, 0x11, 0x0b, 0x08, 0x08, 0x05, 0x1e, 0x0c, 0x09, 0x08, 0x0f, 0x00, + 0x1d, 0x13, 0x12, 0x17, 0x11, 0x02, 0x24, 0x15, 0x0b, 0x0a, 0x14, 0x02, + 0x20, 0x15, 0x17, 0x14, 0x16, 0x07, 0x21, 0x0a, 0x10, 0x14, 0x0a, 0x04, + 0x1f, 0x10, 0x15, 0x11, 0x10, 0x02, 0x23, 0x16, 0x08, 0x0d, 0x15, 0x05, + 0x21, 0x11, 0x0f, 0x15, 0x13, 0x01, 0x1b, 0x0c, 0x08, 0x0a, 0x09, 0x07, + 0x18, 0x12, 0x08, 0x10, 0x0f, 0x01, 0x19, 0x17, 0x14, 0x17, 0x10, 0x02, + 0x1c, 0x0c, 0x0b, 0x0d, 0x11, 0x00, 0x27, 0x0b, 0x11, 0x0e, 0x08, 0x02, + 0x21, 0x0c, 0x11, 0x11, 0x0e, 0x05, 0x20, 0x0f, 0x0d, 0x11, 0x17, 0x06, + 0x24, 0x09, 0x14, 0x10, 0x08, 0x02, 0x25, 0x0d, 0x11, 0x08, 0x12, 0x01, + 0x19, 0x11, 0x0d, 0x12, 0x08, 0x03, 0x18, 0x11, 0x12, 0x12, 0x0b, 0x00, + 0x1d, 0x14, 0x10, 0x12, 0x0d, 0x04, 0x1f, 0x0a, 0x12, 0x0b, 0x13, 0x05, + 0x20, 0x11, 0x08, 0x0a, 0x11, 0x05, 0x1c, 0x12, 0x0d, 0x12, 0x0d, 0x02, + 0x19, 0x0d, 0x16, 0x14, 0x17, 0x01, 0x25, 0x0d, 0x16, 0x0e, 0x17, 0x01, + 0x27, 0x0f, 0x0e, 0x11, 0x12, 0x00, 0x1c, 0x0b, 0x12, 0x0d, 0x0d, 0x02, + 0x18, 0x12, 0x17, 0x0d, 0x0d, 0x02, 0x23, 0x0e, 0x12, 0x11, 0x0a, 0x05, + 0x24, 0x08, 0x17, 0x12, 0x0f, 0x07, 0x25, 0x0e, 0x0e, 0x0c, 0x08, 0x00, + 0x1d, 0x0c, 0x0c, 0x08, 0x12, 0x05, 0x1c, 0x13, 0x0c, 0x0b, 0x09, 0x04, + 0x20, 0x14, 0x08, 0x0b, 0x0e, 0x01, 0x25, 0x0a, 0x0c, 0x15, 0x14, 0x05, + 0x25, 0x12, 0x09, 0x0b, 0x16, 0x00, 0x1c, 0x0c, 0x0e, 0x11, 0x0c, 0x00, + 0x1b, 0x10, 0x14, 0x10, 0x13, 0x06, 0x1a, 0x0c, 0x11, 0x0a, 0x0f, 0x07, + 0x1e, 0x0d, 0x09, 0x12, 0x0b, 0x07, 0x1d, 0x08, 0x10, 0x0f, 0x0b, 0x03, + 0x20, 0x10, 0x13, 0x17, 0x09, 0x07, 0x18, 0x0d, 0x0f, 0x14, 0x15, 0x01, + 0x21, 0x17, 0x0f, 0x0b, 0x0a, 0x07, 0x1a, 0x10, 0x0c, 0x0c, 0x0a, 0x03, + 0x1a, 0x10, 0x10, 0x13, 0x17, 0x05, 0x1a, 0x10, 0x0c, 0x15, 0x0f, 0x02, + 0x24, 0x10, 0x13, 0x0b, 0x0c, 0x04, 0x1f, 0x16, 0x10, 0x16, 0x09, 0x05, + 0x25, 0x0c, 0x0c, 0x0a, 0x11, 0x03, 0x21, 0x13, 0x17, 0x0a, 0x0f, 0x07, + 0x25, 0x11, 0x0e, 0x0a, 0x0e, 0x07, 0x1f, 0x0b, 0x0e, 0x0b, 0x0f, 0x05, + 0x23, 0x16, 0x11, 0x0c, 0x15, 0x05, 0x18, 0x13, 0x08, 0x0c, 0x15, 0x04, + 0x23, 0x0f, 0x0d, 0x12, 0x11, 0x06, 0x21, 0x0f, 0x0e, 0x17, 0x11, 0x06, + 0x26, 0x09, 0x08, 0x0d, 0x0c, 0x04, 0x18, 0x08, 0x0e, 0x12, 0x0d, 0x02, + 0x1d, 0x0d, 0x17, 0x0e, 0x11, 0x06, 0x27, 0x0c, 0x0d, 0x0d, 0x17, 0x07, + 0x19, 0x10, 0x0e, 0x0f, 0x0f, 0x00, 0x1d, 0x0e, 0x09, 0x0d, 0x13, 0x03, + 0x26, 0x13, 0x0f, 0x0d, 0x0d, 0x06, 0x21, 0x13, 0x09, 0x11, 0x09, 0x05, + 0x1e, 0x09, 0x08, 0x14, 0x0e, 0x07, 0x23, 0x0f, 0x0f, 0x09, 0x17, 0x07, + 0x1a, 0x0c, 0x0d, 0x0b, 0x12, 0x00, 0x22, 0x10, 0x14, 0x09, 0x15, 0x01, + 0x26, 0x0f, 0x15, 0x08, 0x08, 0x07, 0x23, 0x0f, 0x08, 0x13, 0x0c, 0x03, + 0x22, 0x17, 0x16, 0x09, 0x09, 0x07, 0x19, 0x0b, 0x0b, 0x0e, 0x0f, 0x07, + 0x1f, 0x09, 0x0f, 0x0b, 0x0b, 0x02, 0x1e, 0x09, 0x14, 0x0c, 0x09, 0x06, + 0x1b, 0x14, 0x0d, 0x0c, 0x10, 0x04, 0x22, 0x0b, 0x10, 0x11, 0x0d, 0x05, + 0x1f, 0x0e, 0x15, 0x13, 0x14, 0x02, 0x21, 0x0b, 0x0d, 0x08, 0x0f, 0x04, + 0x1e, 0x15, 0x12, 0x0a, 0x09, 0x05, 0x18, 0x0d, 0x10, 0x0d, 0x11, 0x00, + 0x26, 0x0c, 0x0c, 0x0f, 0x15, 0x04, 0x19, 0x0d, 0x17, 0x17, 0x09, 0x05, + 0x1b, 0x12, 0x17, 0x11, 0x13, 0x03, 0x1a, 0x09, 0x0d, 0x14, 0x0c, 0x03, + 0x1f, 0x0c, 0x14, 0x17, 0x11, 0x03, 0x18, 0x10, 0x12, 0x0c, 0x08, 0x04, + 0x25, 0x0a, 0x15, 0x15, 0x09, 0x07, 0x20, 0x0d, 0x11, 0x10, 0x16, 0x02, + 0x18, 0x08, 0x0e, 0x0d, 0x14, 0x05, 0x24, 0x0c, 0x17, 0x11, 0x0c, 0x04, + 0x27, 0x0d, 0x09, 0x11, 0x11, 0x01, 0x19, 0x0f, 0x0c, 0x17, 0x0c, 0x03, + 0x26, 0x15, 0x13, 0x10, 0x0e, 0x05, 0x25, 0x0e, 0x12, 0x0c, 0x13, 0x03, + 0x27, 0x10, 0x14, 0x16, 0x09, 0x00, 0x1f, 0x08, 0x0d, 0x11, 0x12, 0x07, + 0x23, 0x14, 0x0f, 0x17, 0x14, 0x05, 0x1e, 0x13, 0x11, 0x09, 0x0c, 0x07, + 0x23, 0x09, 0x0d, 0x0e, 0x0e, 0x00, 0x26, 0x0d, 0x11, 0x12, 0x0c, 0x05, + 0x23, 0x13, 0x14, 0x08, 0x0c, 0x03, 0x18, 0x08, 0x0b, 0x0f, 0x08, 0x00, + 0x1b, 0x0e, 0x13, 0x14, 0x10, 0x07, 0x23, 0x0c, 0x09, 0x09, 0x13, 0x04, + 0x1b, 0x11, 0x15, 0x15, 0x0c, 0x01, 0x20, 0x17, 0x15, 0x0c, 0x08, 0x01, + 0x23, 0x08, 0x0a, 0x17, 0x10, 0x01, 0x27, 0x13, 0x11, 0x13, 0x0f, 0x00, + 0x22, 0x0b, 0x0d, 0x14, 0x0d, 0x00, 0x1c, 0x10, 0x12, 0x0a, 0x0d, 0x07, + 0x1c, 0x16, 0x16, 0x0a, 0x0a, 0x07, 0x1d, 0x16, 0x08, 0x10, 0x16, 0x04, + 0x23, 0x15, 0x0b, 0x0c, 0x10, 0x05, 0x1e, 0x0b, 0x16, 0x14, 0x08, 0x01, + 0x25, 0x0d, 0x14, 0x0f, 0x0f, 0x01, 0x1e, 0x14, 0x08, 0x0d, 0x17, 0x01, + 0x1c, 0x0c, 0x09, 0x0c, 0x15, 0x07, 0x25, 0x10, 0x15, 0x08, 0x15, 0x03, + 0x23, 0x0c, 0x12, 0x12, 0x08, 0x05, 0x26, 0x16, 0x08, 0x12, 0x0d, 0x03, + 0x25, 0x14, 0x0c, 0x15, 0x0a, 0x01, 0x18, 0x0f, 0x0f, 0x0a, 0x14, 0x02, + 0x1a, 0x11, 0x15, 0x17, 0x12, 0x05, 0x1e, 0x0d, 0x17, 0x08, 0x08, 0x00, + 0x23, 0x16, 0x16, 0x14, 0x11, 0x02, 0x1b, 0x0e, 0x08, 0x0f, 0x0b, 0x01, + 0x22, 0x0c, 0x12, 0x0a, 0x0e, 0x03, 0x1f, 0x11, 0x17, 0x0d, 0x10, 0x04, + 0x18, 0x17, 0x17, 0x17, 0x08, 0x07, 0x18, 0x14, 0x16, 0x16, 0x10, 0x03, + 0x1a, 0x13, 0x16, 0x0b, 0x0b, 0x01, 0x1e, 0x16, 0x0e, 0x08, 0x08, 0x06, + 0x1f, 0x10, 0x0e, 0x0e, 0x15, 0x07, 0x18, 0x15, 0x16, 0x08, 0x15, 0x07, + 0x27, 0x15, 0x13, 0x16, 0x13, 0x01, 0x1d, 0x16, 0x17, 0x0b, 0x09, 0x01, + 0x1e, 0x0f, 0x09, 0x14, 0x10, 0x01, 0x22, 0x17, 0x12, 0x09, 0x0e, 0x04, + 0x18, 0x0f, 0x0e, 0x17, 0x0f, 0x01, 0x26, 0x0f, 0x09, 0x12, 0x0e, 0x06, + 0x25, 0x13, 0x13, 0x15, 0x17, 0x06, 0x18, 0x0d, 0x0d, 0x0a, 0x0a, 0x06, + 0x1c, 0x15, 0x15, 0x17, 0x16, 0x02, 0x20, 0x17, 0x14, 0x16, 0x16, 0x01, + 0x1a, 0x15, 0x13, 0x0c, 0x0f, 0x00, 0x19, 0x0d, 0x15, 0x15, 0x0a, 0x06, + 0x22, 0x0b, 0x0b, 0x08, 0x0d, 0x03, 0x25, 0x12, 0x0b, 0x13, 0x12, 0x00, + 0x18, 0x0b, 0x08, 0x14, 0x09, 0x07, 0x18, 0x0c, 0x14, 0x13, 0x10, 0x02, + 0x25, 0x12, 0x11, 0x13, 0x10, 0x06, 0x20, 0x0b, 0x08, 0x14, 0x0b, 0x02, + 0x1a, 0x09, 0x08, 0x0d, 0x14, 0x05, 0x1f, 0x14, 0x16, 0x10, 0x11, 0x00, + 0x1f, 0x11, 0x0d, 0x0c, 0x0d, 0x06, 0x21, 0x0a, 0x10, 0x0a, 0x16, 0x00, + 0x27, 0x0e, 0x0b, 0x17, 0x0a, 0x03, 0x1d, 0x0c, 0x10, 0x0e, 0x12, 0x02, + 0x19, 0x09, 0x0a, 0x08, 0x12, 0x05, 0x19, 0x09, 0x0c, 0x0e, 0x0e, 0x04, + 0x1b, 0x17, 0x14, 0x14, 0x0a, 0x05, 0x24, 0x09, 0x08, 0x08, 0x09, 0x01, + 0x20, 0x0e, 0x10, 0x08, 0x14, 0x01, 0x1d, 0x16, 0x0c, 0x10, 0x17, 0x07, + 0x1b, 0x08, 0x09, 0x0f, 0x0e, 0x03, 0x18, 0x12, 0x0f, 0x14, 0x0e, 0x04, + 0x1f, 0x0b, 0x13, 0x0f, 0x0c, 0x06, 0x23, 0x14, 0x0b, 0x0c, 0x15, 0x00, + 0x1f, 0x0b, 0x16, 0x14, 0x13, 0x07, 0x23, 0x16, 0x16, 0x14, 0x0e, 0x02, + 0x1c, 0x0f, 0x17, 0x13, 0x0b, 0x03, 0x1d, 0x12, 0x12, 0x09, 0x0a, 0x07, + 0x26, 0x16, 0x14, 0x09, 0x0a, 0x05, 0x19, 0x11, 0x15, 0x08, 0x0d, 0x04, + 0x26, 0x08, 0x0f, 0x15, 0x15, 0x07, 0x1a, 0x09, 0x0d, 0x0a, 0x14, 0x04, + 0x21, 0x0a, 0x0c, 0x0b, 0x0b, 0x03, 0x1b, 0x09, 0x0d, 0x17, 0x0a, 0x03, + 0x22, 0x0c, 0x09, 0x0f, 0x0c, 0x03, 0x18, 0x0b, 0x0f, 0x10, 0x08, 0x02, + 0x1e, 0x0b, 0x0d, 0x14, 0x0d, 0x01, 0x1d, 0x16, 0x0c, 0x11, 0x0a, 0x03, + 0x18, 0x0e, 0x10, 0x0d, 0x0e, 0x05, 0x25, 0x08, 0x17, 0x16, 0x10, 0x02, + 0x1d, 0x10, 0x10, 0x14, 0x09, 0x04, 0x19, 0x10, 0x14, 0x0e, 0x0c, 0x00, +}; + +//***************************************************************************** +// +// The bottom left corner of the border. +// +//***************************************************************************** +static const uint8_t g_pui8BottomLeft[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 10, 0, + 10, 0, + + 33, + 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, + 0x10, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x42, 0x00, 0x00, + 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5c, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x1d, 0x11, 0x0e, 0x0b, 0x15, 0x07, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x0b, + 0x13, 0x0d, 0x09, 0x14, 0x03, 0x00, 0x00, 0x00, 0x18, 0x11, 0x12, 0x0f, + 0x0c, 0x13, 0x06, 0x01, 0x00, 0x00, 0x20, 0x12, 0x0c, 0x0e, 0x09, 0x16, + 0x17, 0x1b, 0x1f, 0x16, 0x19, 0x0d, 0x16, 0x15, 0x0f, 0x09, 0x09, 0x0d, + 0x09, 0x1e, 0x1b, 0x0a, 0x12, 0x16, 0x0e, 0x10, 0x0b, 0x0e, 0x11, 0x10, + 0x14, 0x21, 0x13, 0x11, 0x0d, 0x14, 0x0f, 0x0a, 0x09, 0x0f, 0x00, 0x1a, + 0x0e, 0x08, 0x15, 0x13, 0x0f, 0x11, 0x08, 0x16, 0x00, 0x14, 0x03, 0x02, + 0x0b, 0x0f, 0x09, 0x11, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, + 0x05, 0x06, 0x07, 0x04, +}; + +//***************************************************************************** +// +// The bottom side of the border. +// +//***************************************************************************** +static const uint8_t g_pui8Bottom[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 44, 1, + 6, 0, + + 39, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x15, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x40, 0x00, 0x00, + 0x42, 0x00, 0x00, + 0x44, 0x00, 0x00, + 0x46, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x4a, 0x00, 0x00, + 0x4c, 0x00, 0x00, + 0x4e, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x54, 0x00, 0x00, + 0x56, 0x00, 0x00, + 0x58, 0x00, 0x00, + 0x5a, 0x00, 0x00, + 0x5c, 0x00, 0x00, + 0x5e, 0x00, 0x00, + + 0x1a, 0x1d, 0x21, 0x1b, 0x26, 0x22, 0x25, 0x1d, 0x1c, 0x1f, 0x1e, 0x1c, + 0x19, 0x27, 0x21, 0x1a, 0x1f, 0x1f, 0x1d, 0x1c, 0x24, 0x23, 0x19, 0x20, + 0x24, 0x22, 0x1a, 0x25, 0x27, 0x1c, 0x20, 0x1a, 0x22, 0x1a, 0x1e, 0x21, + 0x24, 0x1b, 0x26, 0x18, 0x22, 0x1d, 0x1d, 0x24, 0x1c, 0x26, 0x26, 0x23, + 0x1e, 0x1c, 0x18, 0x1a, 0x27, 0x1a, 0x22, 0x23, 0x24, 0x25, 0x20, 0x24, + 0x1a, 0x19, 0x27, 0x24, 0x1b, 0x1d, 0x1d, 0x18, 0x20, 0x1c, 0x19, 0x1b, + 0x21, 0x1e, 0x27, 0x25, 0x1c, 0x26, 0x21, 0x22, 0x1a, 0x21, 0x25, 0x1a, + 0x24, 0x20, 0x25, 0x21, 0x1d, 0x1e, 0x1d, 0x1f, 0x20, 0x1c, 0x1c, 0x24, + 0x22, 0x21, 0x24, 0x1a, 0x26, 0x25, 0x1e, 0x1f, 0x1b, 0x1e, 0x1d, 0x20, + 0x1c, 0x26, 0x1b, 0x1f, 0x20, 0x18, 0x21, 0x1c, 0x20, 0x1f, 0x26, 0x26, + 0x26, 0x1b, 0x1e, 0x1e, 0x20, 0x22, 0x1a, 0x1a, 0x1c, 0x27, 0x1d, 0x1a, + 0x24, 0x23, 0x21, 0x18, 0x1a, 0x27, 0x20, 0x1e, 0x25, 0x24, 0x26, 0x1e, + 0x24, 0x20, 0x23, 0x1d, 0x18, 0x21, 0x1c, 0x26, 0x25, 0x22, 0x1d, 0x1e, + 0x1d, 0x20, 0x20, 0x21, 0x1f, 0x26, 0x23, 0x1c, 0x22, 0x1d, 0x1c, 0x24, + 0x1c, 0x25, 0x1b, 0x1a, 0x21, 0x19, 0x20, 0x1e, 0x21, 0x1c, 0x24, 0x21, + 0x26, 0x18, 0x20, 0x23, 0x22, 0x25, 0x19, 0x27, 0x1e, 0x22, 0x21, 0x25, + 0x21, 0x1c, 0x19, 0x1b, 0x22, 0x1e, 0x18, 0x26, 0x1b, 0x1b, 0x19, 0x25, + 0x1c, 0x21, 0x1c, 0x26, 0x26, 0x18, 0x20, 0x24, 0x18, 0x19, 0x20, 0x23, + 0x27, 0x22, 0x23, 0x1d, 0x1d, 0x1c, 0x1a, 0x26, 0x21, 0x1c, 0x1a, 0x1b, + 0x23, 0x1a, 0x1a, 0x27, 0x1d, 0x1b, 0x24, 0x22, 0x25, 0x19, 0x20, 0x23, + 0x19, 0x19, 0x20, 0x1a, 0x1a, 0x18, 0x26, 0x19, 0x23, 0x21, 0x1f, 0x18, + 0x26, 0x22, 0x26, 0x20, 0x26, 0x19, 0x23, 0x22, 0x1b, 0x26, 0x21, 0x20, + 0x19, 0x1d, 0x1b, 0x27, 0x1f, 0x24, 0x22, 0x20, 0x25, 0x1b, 0x23, 0x18, + 0x1c, 0x22, 0x1a, 0x27, 0x1b, 0x21, 0x18, 0x1a, 0x1b, 0x27, 0x22, 0x1a, + 0x18, 0x1e, 0x24, 0x1b, 0x1c, 0x1d, 0x24, 0x1e, 0x23, 0x27, 0x1d, 0x1a, + 0x08, 0x13, 0x0f, 0x0c, 0x0d, 0x0f, 0x0f, 0x10, 0x0e, 0x0a, 0x12, 0x0f, + 0x10, 0x0f, 0x12, 0x15, 0x15, 0x0e, 0x0c, 0x10, 0x0e, 0x11, 0x13, 0x0a, + 0x12, 0x0e, 0x13, 0x15, 0x15, 0x0c, 0x0d, 0x16, 0x08, 0x15, 0x0b, 0x0d, + 0x0d, 0x12, 0x16, 0x14, 0x15, 0x11, 0x0b, 0x0e, 0x08, 0x16, 0x0b, 0x15, + 0x0d, 0x10, 0x0e, 0x13, 0x09, 0x09, 0x15, 0x13, 0x0f, 0x11, 0x11, 0x0c, + 0x16, 0x17, 0x0a, 0x16, 0x15, 0x0e, 0x0c, 0x0a, 0x08, 0x0a, 0x17, 0x16, + 0x13, 0x0a, 0x0c, 0x14, 0x08, 0x0f, 0x12, 0x0d, 0x08, 0x08, 0x09, 0x09, + 0x09, 0x17, 0x15, 0x10, 0x10, 0x0f, 0x15, 0x0e, 0x0f, 0x08, 0x0d, 0x0c, + 0x0e, 0x12, 0x0f, 0x0f, 0x15, 0x0e, 0x0d, 0x11, 0x11, 0x11, 0x0d, 0x12, + 0x09, 0x17, 0x08, 0x09, 0x17, 0x09, 0x0b, 0x08, 0x09, 0x08, 0x11, 0x11, + 0x10, 0x0e, 0x08, 0x17, 0x0f, 0x0e, 0x0b, 0x15, 0x09, 0x13, 0x0c, 0x16, + 0x09, 0x11, 0x0f, 0x13, 0x0b, 0x15, 0x0d, 0x0c, 0x14, 0x0d, 0x0d, 0x14, + 0x0f, 0x10, 0x15, 0x10, 0x11, 0x0e, 0x0a, 0x09, 0x15, 0x0b, 0x08, 0x0c, + 0x12, 0x0c, 0x0a, 0x13, 0x17, 0x0e, 0x12, 0x09, 0x08, 0x09, 0x14, 0x0b, + 0x16, 0x0a, 0x10, 0x13, 0x10, 0x15, 0x10, 0x08, 0x0e, 0x0d, 0x11, 0x17, + 0x14, 0x13, 0x09, 0x12, 0x17, 0x0a, 0x17, 0x12, 0x0e, 0x09, 0x0d, 0x0e, + 0x10, 0x17, 0x10, 0x11, 0x09, 0x0d, 0x14, 0x08, 0x0f, 0x0c, 0x13, 0x17, + 0x0a, 0x0b, 0x17, 0x10, 0x11, 0x11, 0x10, 0x0d, 0x0c, 0x11, 0x17, 0x0c, + 0x14, 0x16, 0x16, 0x0b, 0x08, 0x0c, 0x11, 0x10, 0x0c, 0x0a, 0x09, 0x0d, + 0x0f, 0x16, 0x0d, 0x16, 0x0b, 0x09, 0x16, 0x0d, 0x0d, 0x16, 0x16, 0x16, + 0x0f, 0x0f, 0x0b, 0x14, 0x09, 0x0b, 0x09, 0x15, 0x0a, 0x17, 0x08, 0x0b, + 0x0c, 0x12, 0x14, 0x10, 0x14, 0x15, 0x16, 0x0b, 0x14, 0x0b, 0x0a, 0x08, + 0x0d, 0x08, 0x0e, 0x12, 0x17, 0x0c, 0x10, 0x0e, 0x14, 0x14, 0x0b, 0x15, + 0x08, 0x0c, 0x12, 0x0b, 0x0b, 0x12, 0x0e, 0x10, 0x0d, 0x0a, 0x08, 0x09, + 0x08, 0x16, 0x0d, 0x14, 0x0a, 0x10, 0x14, 0x0f, 0x11, 0x0b, 0x0a, 0x10, + 0x0e, 0x13, 0x12, 0x11, 0x0e, 0x08, 0x0a, 0x13, 0x0a, 0x0a, 0x15, 0x0b, + 0x09, 0x0b, 0x17, 0x0c, 0x13, 0x14, 0x14, 0x0c, 0x17, 0x16, 0x14, 0x0f, + 0x10, 0x13, 0x13, 0x08, 0x15, 0x15, 0x0f, 0x0b, 0x10, 0x0a, 0x15, 0x17, + 0x0b, 0x17, 0x12, 0x0d, 0x0a, 0x10, 0x11, 0x0c, 0x13, 0x10, 0x10, 0x0f, + 0x0d, 0x0c, 0x13, 0x0d, 0x0a, 0x10, 0x15, 0x13, 0x0c, 0x11, 0x13, 0x09, + 0x0e, 0x0b, 0x0d, 0x16, 0x0d, 0x0b, 0x16, 0x11, 0x0b, 0x10, 0x17, 0x0e, + 0x09, 0x10, 0x12, 0x14, 0x08, 0x0b, 0x0c, 0x0e, 0x10, 0x17, 0x13, 0x12, + 0x0f, 0x11, 0x0e, 0x13, 0x0a, 0x0a, 0x15, 0x10, 0x0e, 0x0b, 0x0f, 0x14, + 0x0f, 0x0d, 0x0d, 0x12, 0x16, 0x0c, 0x09, 0x17, 0x14, 0x13, 0x14, 0x15, + 0x17, 0x08, 0x0b, 0x0f, 0x08, 0x17, 0x0a, 0x10, 0x10, 0x10, 0x0c, 0x12, + 0x13, 0x09, 0x0b, 0x09, 0x0d, 0x12, 0x16, 0x14, 0x08, 0x0b, 0x0f, 0x16, + 0x0f, 0x10, 0x16, 0x0c, 0x0c, 0x12, 0x09, 0x0b, 0x13, 0x0d, 0x12, 0x14, + 0x0c, 0x15, 0x0c, 0x15, 0x0e, 0x10, 0x0f, 0x09, 0x12, 0x13, 0x0b, 0x17, + 0x0d, 0x09, 0x13, 0x0e, 0x0d, 0x0b, 0x0c, 0x15, 0x13, 0x0b, 0x09, 0x17, + 0x16, 0x0b, 0x0b, 0x11, 0x10, 0x16, 0x0d, 0x15, 0x13, 0x11, 0x12, 0x09, + 0x0a, 0x0a, 0x0b, 0x14, 0x15, 0x0f, 0x13, 0x0b, 0x11, 0x0f, 0x11, 0x16, + 0x12, 0x16, 0x14, 0x0e, 0x09, 0x16, 0x0e, 0x17, 0x09, 0x11, 0x10, 0x12, + 0x10, 0x16, 0x0f, 0x0b, 0x10, 0x0a, 0x0d, 0x12, 0x0d, 0x10, 0x0f, 0x0a, + 0x17, 0x0a, 0x0e, 0x10, 0x12, 0x17, 0x0f, 0x0d, 0x15, 0x0b, 0x13, 0x16, + 0x0a, 0x0a, 0x16, 0x0b, 0x14, 0x0f, 0x16, 0x0c, 0x0d, 0x0e, 0x10, 0x16, + 0x10, 0x15, 0x11, 0x15, 0x0d, 0x08, 0x08, 0x0d, 0x0b, 0x0e, 0x16, 0x16, + 0x0e, 0x0e, 0x0b, 0x0b, 0x12, 0x17, 0x0a, 0x14, 0x0a, 0x09, 0x17, 0x16, + 0x10, 0x16, 0x0a, 0x15, 0x0c, 0x12, 0x14, 0x15, 0x0f, 0x0d, 0x12, 0x15, + 0x0e, 0x13, 0x0b, 0x12, 0x09, 0x0a, 0x10, 0x0f, 0x10, 0x14, 0x13, 0x0a, + 0x14, 0x16, 0x16, 0x16, 0x17, 0x16, 0x14, 0x0f, 0x15, 0x17, 0x0d, 0x09, + 0x0c, 0x0b, 0x10, 0x0d, 0x0e, 0x09, 0x15, 0x17, 0x16, 0x10, 0x09, 0x12, + 0x0e, 0x08, 0x10, 0x0e, 0x17, 0x0d, 0x15, 0x14, 0x0c, 0x0b, 0x16, 0x17, + 0x0c, 0x14, 0x09, 0x14, 0x0d, 0x09, 0x13, 0x12, 0x0d, 0x0c, 0x17, 0x13, + 0x0e, 0x15, 0x12, 0x0c, 0x0d, 0x14, 0x16, 0x14, 0x15, 0x0f, 0x0a, 0x14, + 0x14, 0x08, 0x11, 0x09, 0x0b, 0x10, 0x08, 0x10, 0x0c, 0x0a, 0x0d, 0x12, + 0x0b, 0x08, 0x0d, 0x10, 0x0d, 0x0c, 0x0b, 0x13, 0x0a, 0x16, 0x17, 0x0f, + 0x12, 0x16, 0x0c, 0x0f, 0x0d, 0x0f, 0x0c, 0x0a, 0x10, 0x15, 0x0c, 0x13, + 0x0d, 0x0d, 0x0c, 0x12, 0x0f, 0x12, 0x0d, 0x12, 0x13, 0x12, 0x0a, 0x08, + 0x17, 0x0e, 0x13, 0x09, 0x0c, 0x13, 0x11, 0x16, 0x11, 0x15, 0x0e, 0x16, + 0x0d, 0x12, 0x09, 0x15, 0x10, 0x0d, 0x11, 0x15, 0x12, 0x16, 0x10, 0x0a, + 0x10, 0x15, 0x14, 0x0b, 0x10, 0x17, 0x0c, 0x0f, 0x0e, 0x08, 0x11, 0x12, + 0x13, 0x0a, 0x11, 0x0d, 0x08, 0x17, 0x0c, 0x0d, 0x12, 0x0d, 0x0b, 0x0a, + 0x12, 0x15, 0x17, 0x0d, 0x13, 0x10, 0x0f, 0x0c, 0x0e, 0x0c, 0x0f, 0x16, + 0x0b, 0x14, 0x0e, 0x11, 0x14, 0x17, 0x0c, 0x0f, 0x0a, 0x16, 0x14, 0x0a, + 0x16, 0x09, 0x10, 0x10, 0x0e, 0x14, 0x12, 0x09, 0x11, 0x12, 0x0f, 0x0d, + 0x0a, 0x16, 0x11, 0x10, 0x0b, 0x09, 0x0f, 0x0e, 0x15, 0x15, 0x08, 0x11, + 0x15, 0x0d, 0x09, 0x17, 0x0b, 0x16, 0x09, 0x09, 0x17, 0x12, 0x11, 0x0e, + 0x0e, 0x0b, 0x0f, 0x17, 0x16, 0x16, 0x0d, 0x08, 0x15, 0x16, 0x11, 0x08, + 0x17, 0x08, 0x0f, 0x15, 0x16, 0x10, 0x0f, 0x13, 0x15, 0x10, 0x12, 0x08, + 0x0f, 0x14, 0x0a, 0x0f, 0x0e, 0x13, 0x15, 0x15, 0x17, 0x0d, 0x15, 0x15, + 0x0b, 0x0a, 0x16, 0x09, 0x09, 0x0f, 0x0a, 0x08, 0x10, 0x12, 0x16, 0x0e, + 0x0a, 0x0d, 0x0a, 0x08, 0x16, 0x15, 0x09, 0x0d, 0x11, 0x0b, 0x15, 0x08, + 0x17, 0x12, 0x16, 0x17, 0x17, 0x13, 0x15, 0x0b, 0x16, 0x13, 0x0d, 0x17, + 0x0b, 0x0f, 0x08, 0x13, 0x0a, 0x16, 0x0a, 0x0c, 0x0b, 0x0d, 0x0d, 0x0a, + 0x0a, 0x0e, 0x10, 0x14, 0x12, 0x0d, 0x15, 0x11, 0x08, 0x13, 0x11, 0x08, + 0x09, 0x0c, 0x08, 0x0b, 0x0a, 0x0b, 0x10, 0x0e, 0x10, 0x15, 0x10, 0x13, + 0x0c, 0x08, 0x10, 0x16, 0x0e, 0x0d, 0x10, 0x0e, 0x09, 0x09, 0x0e, 0x10, + 0x0f, 0x12, 0x15, 0x10, 0x0b, 0x0a, 0x15, 0x0c, 0x0e, 0x16, 0x10, 0x11, + 0x0a, 0x08, 0x17, 0x13, 0x16, 0x10, 0x0f, 0x0a, 0x11, 0x17, 0x08, 0x17, + 0x0c, 0x10, 0x0d, 0x0e, 0x11, 0x13, 0x16, 0x09, 0x0e, 0x14, 0x12, 0x11, + 0x17, 0x0f, 0x16, 0x0d, 0x0e, 0x0f, 0x16, 0x11, 0x10, 0x16, 0x0c, 0x0e, + 0x0f, 0x13, 0x11, 0x08, 0x12, 0x11, 0x17, 0x17, 0x0a, 0x0d, 0x0e, 0x14, + 0x09, 0x0d, 0x15, 0x0f, 0x0a, 0x0f, 0x09, 0x09, 0x17, 0x17, 0x0e, 0x0e, + 0x0f, 0x0d, 0x17, 0x17, 0x0c, 0x0b, 0x0d, 0x13, 0x17, 0x16, 0x13, 0x12, + 0x10, 0x13, 0x12, 0x13, 0x09, 0x08, 0x0f, 0x0a, 0x0d, 0x0d, 0x11, 0x0f, + 0x14, 0x12, 0x10, 0x13, 0x12, 0x17, 0x09, 0x0a, 0x0d, 0x09, 0x09, 0x11, + 0x0c, 0x0f, 0x0d, 0x0c, 0x0e, 0x08, 0x16, 0x16, 0x14, 0x11, 0x12, 0x15, + 0x11, 0x09, 0x08, 0x17, 0x0e, 0x11, 0x0f, 0x0b, 0x0c, 0x08, 0x17, 0x17, + 0x08, 0x08, 0x09, 0x0d, 0x0a, 0x0b, 0x16, 0x0f, 0x12, 0x0b, 0x13, 0x08, + 0x0c, 0x12, 0x17, 0x09, 0x0b, 0x12, 0x17, 0x15, 0x13, 0x17, 0x14, 0x0a, + 0x11, 0x0c, 0x0d, 0x16, 0x0c, 0x0c, 0x15, 0x0c, 0x0d, 0x17, 0x12, 0x0f, + 0x0b, 0x10, 0x16, 0x16, 0x14, 0x12, 0x17, 0x09, 0x0c, 0x16, 0x0b, 0x10, + 0x10, 0x0a, 0x0d, 0x0c, 0x09, 0x0a, 0x0f, 0x12, 0x0e, 0x15, 0x11, 0x13, + 0x09, 0x0f, 0x17, 0x0f, 0x0f, 0x11, 0x17, 0x12, 0x0a, 0x16, 0x10, 0x17, + 0x10, 0x0f, 0x09, 0x15, 0x0e, 0x0c, 0x0d, 0x17, 0x0e, 0x13, 0x0b, 0x10, + 0x15, 0x13, 0x0b, 0x0b, 0x10, 0x14, 0x16, 0x12, 0x0b, 0x16, 0x09, 0x12, + 0x10, 0x09, 0x0c, 0x13, 0x17, 0x14, 0x13, 0x10, 0x0c, 0x14, 0x0e, 0x12, + 0x08, 0x14, 0x11, 0x0e, 0x0f, 0x15, 0x16, 0x0c, 0x11, 0x09, 0x0f, 0x09, + 0x16, 0x0e, 0x13, 0x09, 0x0d, 0x15, 0x13, 0x16, 0x16, 0x08, 0x11, 0x16, + 0x15, 0x0c, 0x0f, 0x09, 0x08, 0x15, 0x14, 0x09, 0x12, 0x0e, 0x0f, 0x09, + 0x01, 0x05, 0x04, 0x04, 0x03, 0x02, 0x03, 0x03, 0x02, 0x00, 0x02, 0x01, + 0x03, 0x06, 0x01, 0x03, 0x05, 0x00, 0x04, 0x02, 0x03, 0x00, 0x03, 0x05, + 0x03, 0x05, 0x03, 0x07, 0x04, 0x03, 0x03, 0x06, 0x00, 0x07, 0x03, 0x03, + 0x01, 0x06, 0x07, 0x04, 0x07, 0x01, 0x05, 0x02, 0x00, 0x07, 0x06, 0x05, + 0x07, 0x02, 0x00, 0x02, 0x02, 0x03, 0x00, 0x06, 0x00, 0x03, 0x06, 0x05, + 0x06, 0x01, 0x03, 0x07, 0x01, 0x06, 0x03, 0x03, 0x05, 0x02, 0x07, 0x05, + 0x04, 0x05, 0x07, 0x04, 0x04, 0x06, 0x02, 0x03, 0x00, 0x02, 0x06, 0x03, + 0x05, 0x06, 0x02, 0x06, 0x02, 0x00, 0x03, 0x01, 0x02, 0x07, 0x00, 0x03, + 0x06, 0x03, 0x07, 0x03, 0x05, 0x07, 0x00, 0x01, 0x04, 0x00, 0x06, 0x00, + 0x07, 0x00, 0x04, 0x00, 0x02, 0x02, 0x04, 0x00, 0x01, 0x06, 0x07, 0x03, + 0x06, 0x03, 0x05, 0x01, 0x02, 0x05, 0x05, 0x00, 0x01, 0x04, 0x04, 0x06, + 0x03, 0x05, 0x00, 0x07, 0x06, 0x06, 0x00, 0x05, 0x07, 0x04, 0x05, 0x02, + 0x07, 0x02, 0x02, 0x00, 0x00, 0x02, 0x04, 0x07, 0x05, 0x01, 0x00, 0x07, + 0x07, 0x05, 0x00, 0x00, 0x01, 0x05, 0x07, 0x05, 0x02, 0x00, 0x05, 0x01, + 0x07, 0x05, 0x06, 0x06, 0x01, 0x04, 0x01, 0x00, 0x06, 0x03, 0x01, 0x07, + 0x06, 0x05, 0x06, 0x03, 0x07, 0x06, 0x03, 0x07, 0x03, 0x04, 0x07, 0x05, + 0x01, 0x07, 0x03, 0x04, 0x00, 0x00, 0x05, 0x07, 0x05, 0x04, 0x06, 0x06, + 0x01, 0x07, 0x06, 0x00, 0x03, 0x00, 0x07, 0x01, 0x05, 0x05, 0x04, 0x05, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x03, 0x05, 0x05, 0x03, 0x01, 0x01, 0x03, + 0x01, 0x07, 0x03, 0x06, 0x03, 0x01, 0x04, 0x04, 0x01, 0x03, 0x04, 0x04, + 0x03, 0x04, 0x06, 0x01, 0x01, 0x02, 0x06, 0x06, 0x03, 0x02, 0x06, 0x07, + 0x06, 0x04, 0x04, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x04, 0x00, + 0x02, 0x01, 0x05, 0x03, 0x05, 0x02, 0x07, 0x01, 0x06, 0x05, 0x03, 0x00, + 0x00, 0x01, 0x06, 0x03, 0x04, 0x04, 0x03, 0x02, 0x01, 0x07, 0x05, 0x06, + 0x06, 0x02, 0x04, 0x03, 0x03, 0x01, 0x04, 0x05, 0x03, 0x02, 0x01, 0x01, +}; + +//***************************************************************************** +// +// The bottom right corner of the border. +// +//***************************************************************************** +static const uint8_t g_pui8BottomRight[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 10, 0, + 10, 0, + + 29, + 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, + 0x0b, 0x00, 0x00, + 0x10, 0x00, 0x00, + 0x11, 0x00, 0x00, + 0x12, 0x00, 0x00, + 0x13, 0x00, 0x00, + 0x14, 0x00, 0x00, + 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, + 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, + 0x22, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x24, 0x00, 0x00, + 0x25, 0x00, 0x00, + 0x26, 0x00, 0x00, + 0x27, 0x00, 0x00, + 0x28, 0x00, 0x00, + 0x29, 0x00, 0x00, + 0x2a, 0x00, 0x00, + 0x2b, 0x00, 0x00, + 0x2c, 0x00, 0x00, + 0x2d, 0x00, 0x00, + 0x2e, 0x00, 0x00, + 0x2f, 0x00, 0x00, + 0x40, 0x00, 0x00, + 0x48, 0x00, 0x00, + 0x50, 0x00, 0x00, + 0x56, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x14, 0x1c, 0x14, 0x0a, 0x17, 0x0d, 0x04, 0x00, 0x00, + 0x00, 0x1b, 0x0e, 0x0d, 0x13, 0x17, 0x12, 0x09, 0x00, 0x00, 0x16, 0x1b, + 0x13, 0x10, 0x19, 0x13, 0x0e, 0x07, 0x16, 0x1a, 0x1c, 0x14, 0x18, 0x13, + 0x0a, 0x10, 0x10, 0x04, 0x1d, 0x0a, 0x15, 0x13, 0x19, 0x11, 0x15, 0x15, + 0x18, 0x03, 0x12, 0x14, 0x19, 0x0e, 0x16, 0x11, 0x14, 0x17, 0x0e, 0x08, + 0x14, 0x0b, 0x18, 0x0c, 0x0a, 0x13, 0x0b, 0x14, 0x06, 0x01, 0x11, 0x10, + 0x0d, 0x0f, 0x13, 0x0a, 0x0a, 0x13, 0x07, 0x00, 0x0e, 0x10, 0x0f, 0x17, + 0x0b, 0x11, 0x09, 0x04, 0x02, 0x00, 0x07, 0x03, 0x05, 0x05, 0x05, 0x08, + 0x02, 0x00, 0x00, 0x00, +}; + +//***************************************************************************** +// +//! Draws a frame on the LCD with the application name in the title bar. +//! +//! \param psContext is a pointer to the graphics library context used to draw +//! the application frame. +//! \param pcAppName is a pointer to a string that contains the name of the +//! application. +//! +//! This function draws an application frame onto the LCD, using the supplied +//! graphics library context to access the LCD and the given name in the title +//! bar of the application frame. +//! +//! \return None. +// +//***************************************************************************** +void +FrameDraw(tContext *psContext, const char *pcAppName) +{ + tRectangle sRect; + + // + // See if the display is in a landscape or portrait configuration. + // + if(GrContextDpyWidthGet(psContext) == 320) + { + // + // Reset the clipping region to the entire LCD surface. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = 319; + sRect.i16YMax = 239; + GrContextClipRegionSet(psContext, &sRect); + + // + // Draw the images of the border. + // + GrImageDraw(psContext, g_pui8TopLeft, 0, 0); + GrImageDraw(psContext, g_pui8Top, 10, 0); + GrImageDraw(psContext, g_pui8TopRight, 310, 0); + GrImageDraw(psContext, g_pui8Left, 0, 26); + GrImageDraw(psContext, g_pui8Right, 314, 26); + GrImageDraw(psContext, g_pui8BottomLeft, 0, 230); + GrImageDraw(psContext, g_pui8Bottom, 10, 234); + GrImageDraw(psContext, g_pui8BottomRight, 310, 230); + + // + // Select red test in the Computer Modern sans-serif 18pt bold font. + // + GrContextForegroundSet(psContext, ClrWhite); + GrContextFontSet(psContext, g_psFontCmss18b); + + // + // Draw the application name centered in the title bar. + // + GrStringDrawCentered(psContext, pcAppName, -1, 160, 8, false); + + // + // Set the clip region to the interior region of the border. + // + sRect.i16XMin = 8; + sRect.i16YMin = 24; + sRect.i16XMax = 311; + sRect.i16YMax = 231; + GrContextClipRegionSet(psContext, &sRect); + } + else + { + // + // Reset the clipping region to the entire LCD surface. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = 239; + sRect.i16YMax = 319; + GrContextClipRegionSet(psContext, &sRect); + + // + // Draw the images of the border. + // + GrImageDraw(psContext, g_pui8TopLeft, 0, 0); + GrImageDraw(psContext, g_pui8Top, 10, 0); + GrImageDraw(psContext, g_pui8TopRight, 230, 0); + GrImageDraw(psContext, g_pui8Left, 0, 26); + GrImageDraw(psContext, g_pui8Left, 0, 106); + GrImageDraw(psContext, g_pui8Right, 234, 26); + GrImageDraw(psContext, g_pui8Right, 234, 106); + GrImageDraw(psContext, g_pui8BottomLeft, 0, 310); + GrImageDraw(psContext, g_pui8Bottom, 10, 314); + GrImageDraw(psContext, g_pui8BottomRight, 230, 310); + + // + // Select red test in the Computer Modern sans-serif 18pt bold font. + // + GrContextForegroundSet(psContext, ClrWhite); + GrContextFontSet(psContext, g_psFontCmss18b); + + // + // Draw the application name centered in the title bar. + // + GrStringDrawCentered(psContext, pcAppName, -1, 120, 8, false); + + // + // Set the clip region to the interior region of the border. + // + sRect.i16XMin = 8; + sRect.i16YMin = 24; + sRect.i16XMax = 231; + sRect.i16YMax = 311; + GrContextClipRegionSet(psContext, &sRect); + } +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/frame.h b/boards/dk-tm4c129x/drivers/frame.h new file mode 100644 index 0000000..09461db --- /dev/null +++ b/boards/dk-tm4c129x/drivers/frame.h @@ -0,0 +1,55 @@ +//***************************************************************************** +// +// frame.h - Prototypes for the application frame function. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVERS_FRAME_H__ +#define __DRIVERS_FRAME_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern void FrameDraw(tContext *psContext, const char *pcAppName); + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __DRIVERS_FRAME_H__ diff --git a/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c b/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c new file mode 100644 index 0000000..7fac8df --- /dev/null +++ b/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c @@ -0,0 +1,1056 @@ +//***************************************************************************** +// +// kentec320x240x16_ssd2119.c - Display driver for the Kentec K350QVG-V2-F +// TFT display attached to the LCD controller via +// an 8-bit LIDD interface. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_gpio.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_sysctl.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" +#include "driverlib/rom.h" +#include "driverlib/lcd.h" +#include "grlib/grlib.h" +#include "drivers/kentec320x240x16_ssd2119.h" + +//***************************************************************************** +// +//! \addtogroup kentec320x240x16_ssd2119_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// This driver operates in four different screen orientations. They are: +// +// * Portrait - The screen is taller than it is wide, and the flex connector is +// on the left of the display. This is selected by defining +// PORTRAIT. +// +// * Landscape - The screen is wider than it is tall, and the flex connector is +// on the bottom of the display. This is selected by defining +// LANDSCAPE. +// +// * Portrait flip - The screen is taller than it is wide, and the flex +// connector is on the right of the display. This is +// selected by defining PORTRAIT_FLIP. +// +// * Landscape flip - The screen is wider than it is tall, and the flex +// connector is on the top of the display. This is +// selected by defining LANDSCAPE_FLIP. +// +// These can also be imagined in terms of screen rotation; if portrait mode is +// 0 degrees of screen rotation, landscape is 90 degrees of counter-clockwise +// rotation, portrait flip is 180 degrees of rotation, and landscape flip is +// 270 degress of counter-clockwise rotation. +// +// If no screen orientation is selected, landscape mode will be used. +// +//***************************************************************************** +#if ! defined(PORTRAIT) && ! defined(PORTRAIT_FLIP) && \ + ! defined(LANDSCAPE) && ! defined(LANDSCAPE_FLIP) +#define LANDSCAPE_FLIP +#endif + +//***************************************************************************** +// +// Various definitions controlling coordinate space mapping and drawing +// direction in the four supported orientations. +// +//***************************************************************************** +#ifdef PORTRAIT +#define HORIZ_DIRECTION 0x28 +#define VERT_DIRECTION 0x20 +#define MAPPED_X(x, y) (319 - (y)) +#define MAPPED_Y(x, y) (x) +#endif +#ifdef LANDSCAPE +#define HORIZ_DIRECTION 0x00 +#define VERT_DIRECTION 0x08 +#define MAPPED_X(x, y) (319 - (x)) +#define MAPPED_Y(x, y) (239 - (y)) +#endif +#ifdef PORTRAIT_FLIP +#define HORIZ_DIRECTION 0x18 +#define VERT_DIRECTION 0x10 +#define MAPPED_X(x, y) (y) +#define MAPPED_Y(x, y) (239 - (x)) +#endif +#ifdef LANDSCAPE_FLIP +#define HORIZ_DIRECTION 0x30 +#define VERT_DIRECTION 0x38 +#define MAPPED_X(x, y) (x) +#define MAPPED_Y(x, y) (y) +#endif + +//***************************************************************************** +// +// Various internal SD2119 registers name labels +// +//***************************************************************************** +#define SSD2119_DEVICE_CODE_READ_REG \ + 0x00 +#define SSD2119_OSC_START_REG 0x00 +#define SSD2119_OUTPUT_CTRL_REG 0x01 +#define SSD2119_LCD_DRIVE_AC_CTRL_REG \ + 0x02 +#define SSD2119_PWR_CTRL_1_REG 0x03 +#define SSD2119_DISPLAY_CTRL_REG \ + 0x07 +#define SSD2119_FRAME_CYCLE_CTRL_REG \ + 0x0b +#define SSD2119_PWR_CTRL_2_REG 0x0c +#define SSD2119_PWR_CTRL_3_REG 0x0d +#define SSD2119_PWR_CTRL_4_REG 0x0e +#define SSD2119_GATE_SCAN_START_REG \ + 0x0f +#define SSD2119_SLEEP_MODE_1_REG \ + 0x10 +#define SSD2119_ENTRY_MODE_REG 0x11 +#define SSD2119_SLEEP_MODE_2_REG \ + 0x12 +#define SSD2119_GEN_IF_CTRL_REG 0x15 +#define SSD2119_PWR_CTRL_5_REG 0x1e +#define SSD2119_RAM_DATA_REG 0x22 +#define SSD2119_FRAME_FREQ_REG 0x25 +#define SSD2119_ANALOG_SET_REG 0x26 +#define SSD2119_VCOM_OTP_1_REG 0x28 +#define SSD2119_VCOM_OTP_2_REG 0x29 +#define SSD2119_GAMMA_CTRL_1_REG \ + 0x30 +#define SSD2119_GAMMA_CTRL_2_REG \ + 0x31 +#define SSD2119_GAMMA_CTRL_3_REG \ + 0x32 +#define SSD2119_GAMMA_CTRL_4_REG \ + 0x33 +#define SSD2119_GAMMA_CTRL_5_REG \ + 0x34 +#define SSD2119_GAMMA_CTRL_6_REG \ + 0x35 +#define SSD2119_GAMMA_CTRL_7_REG \ + 0x36 +#define SSD2119_GAMMA_CTRL_8_REG \ + 0x37 +#define SSD2119_GAMMA_CTRL_9_REG \ + 0x3a +#define SSD2119_GAMMA_CTRL_10_REG \ + 0x3b +#define SSD2119_V_RAM_POS_REG 0x44 +#define SSD2119_H_RAM_START_REG 0x45 +#define SSD2119_H_RAM_END_REG 0x46 +#define SSD2119_X_RAM_ADDR_REG 0x4e +#define SSD2119_Y_RAM_ADDR_REG 0x4f + +#define ENTRY_MODE_DEFAULT 0x6830 +#define MAKE_ENTRY_MODE(x) ((ENTRY_MODE_DEFAULT & 0xff00) | (x)) + +//***************************************************************************** +// +// Read Access Timing +// ------------------ +// +// Direction OOOIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOOOOOOOOOOOOO +// +// ~RD ----- -------------------------- +// \ / | +// ------------------ +// < Trdl >< Trdh > +// < Tcycle > +// < Tacc > +// /------------------| +// DATA ------------- ------------------ +// \------------------/ +// < Tdh > +// +// Delays < Trad >< Tdhd >< Trhd >< Trcd > +// +// This design keeps CS tied low so pulse width constraints relating to CS +// have been transfered to ~RD here. +// +// Tcycle Read Cycle Time 1000nS +// Tacc Data Access Time 100nS +// Trdl Read Data Low 500nS +// Trdh Read Data High 500nS +// Tdh Data Hold Time 100nS +// +// Trad (READ_DATA_ACCESS_DELAY) controls the delay between asserting ~RD and +// reading the data from the bus. +// Tdhd (READ_DATA_HOLD_DELAY) controls the delay after reading the data and +// before deasserting ~RD. +// Trhd (READ_HOLD_DELAY) controls the delay between deasserting ~RD and +// switching the data bus direction back to output. +// Trcd (READ_DATA_CYCLE_DELAY) controls the delay after switching the +// direction of the data bus. +// +//***************************************************************************** + +//***************************************************************************** +// +// The delay to impose after setting the state of the read/write line and +// before reading the data bus. This is expressed in terms of cycles of a +// tight loop whose body performs a single GPIO register access and needs to +// comply with the 500nS read cycle pulse width constraint. +// +//***************************************************************************** +#define READ_DATA_ACCESS_DELAY 5 + +//***************************************************************************** +// +// The delay to impose after reading the data and before resetting the state of +// the read/write line during a read operation. This is expressed in terms of +// cycles of a tight loop whose body performs a single GPIO register access and +// needs to comply with the 500nS read cycle pulse width constraint. +// +//***************************************************************************** +#define READ_DATA_HOLD_DELAY 5 + +//***************************************************************************** +// +// The delay to impose after deasserting ~RD and before setting the bus back to +// an output. This is expressed in terms of cycles of a tight loop whose body +// performs a single GPIO register access. +// +//***************************************************************************** +#define READ_HOLD_DELAY 5 + +//***************************************************************************** +// +// The delay to impose after completing a read cycle and before returning to +// the caller. This is expressed in terms of cycles of a tight loop whose body +// performs a single GPIO register access and needs to comply with the 1000nS +// read cycle pulse width constraint. +// +//***************************************************************************** +#define READ_DATA_CYCLE_DELAY 5 + +//***************************************************************************** +// +// The dimensions of the LCD panel. +// +//***************************************************************************** +#define LCD_HORIZONTAL_MAX 320 +#define LCD_VERTICAL_MAX 240 + +//***************************************************************************** +// +// Translates a 24-bit RGB color to a display driver-specific color. +// +// \param c is the 24-bit RGB color. The least-significant byte is the blue +// channel, the next byte is the green channel, and the third byte is the red +// channel. +// +// This macro translates a 24-bit RGB color into a value that can be written +// into the display's frame buffer in order to reproduce that color, or the +// closest possible approximation of that color. +// +// \return Returns the display-driver specific color. +// +//***************************************************************************** +#define DPYCOLORTRANSLATE(c) ((((c) & 0x00f80000) >> 8) | \ + (((c) & 0x0000fc00) >> 5) | \ + (((c) & 0x000000f8) >> 3)) + +//***************************************************************************** +// +// Writes a data word to the SSD2119. +// +//***************************************************************************** +static inline void +WriteData(uint16_t ui16Data) +{ + // + // Split the write into two bytes and pass them to the LCD controller. + // + LCDIDDDataWrite(LCD0_BASE, 0, ui16Data >> 8); + LCDIDDDataWrite(LCD0_BASE, 0, ui16Data & 0xff); +} + +//***************************************************************************** +// +// Writes a command to the SSD2119. +// +//***************************************************************************** +static inline void +WriteCommand(uint8_t ui8Data) +{ + // + // Pass the write on to the controller. + // + LCDIDDCommandWrite(LCD0_BASE, 0, (uint16_t)ui8Data); +} + +//***************************************************************************** +// +//! Draws a pixel on the screen. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! \param i32X is the X coordinate of the pixel. +//! \param i32Y is the Y coordinate of the pixel. +//! \param ui32Value is the color of the pixel. +//! +//! This function sets the given pixel to a particular color. The coordinates +//! of the pixel are assumed to be within the extents of the display. +//! +//! \return None. +// +//***************************************************************************** +static void +Kentec320x240x16_SSD2119PixelDraw(void *pvDisplayData, int32_t i32X, + int32_t i32Y, uint32_t ui32Value) +{ + // + // Set the X address of the display cursor. + // + WriteCommand(SSD2119_X_RAM_ADDR_REG); + WriteData(MAPPED_X(i32X, i32Y)); + + // + // Set the Y address of the display cursor. + // + WriteCommand(SSD2119_Y_RAM_ADDR_REG); + WriteData(MAPPED_Y(i32X, i32Y)); + + // + // Write the pixel value. + // + WriteCommand(SSD2119_RAM_DATA_REG); + WriteData(ui32Value); +} + +//***************************************************************************** +// +//! Draws a horizontal sequence of pixels on the screen. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! \param i32X is the X coordinate of the first pixel. +//! \param i32Y is the Y coordinate of the first pixel. +//! \param i32X0 is sub-pixel offset within the pixel data, which is valid for +//! 1 or 4 bit per pixel formats. +//! \param i32Count is the number of pixels to draw. +//! \param i32BPP is the number of bits per pixel; must be 1, 4, or 8. +//! \param pui8Data is a pointer to the pixel data. For 1 and 4 bit per pixel +//! formats, the most significant bit(s) represent the left-most pixel. +//! \param pui8Palette is a pointer to the palette used to draw the pixels. +//! +//! This function draws a horizontal sequence of pixels on the screen, using +//! the supplied palette. For 1 bit per pixel format, the palette contains +//! pre-translated colors; for 4 and 8 bit per pixel formats, the palette +//! contains 24-bit RGB values that must be translated before being written to +//! the display. +//! +//! \return None. +// +//***************************************************************************** +static void +Kentec320x240x16_SSD2119PixelDrawMultiple(void *pvDisplayData, int32_t i32X, + int32_t i32Y, int32_t i32X0, + int32_t i32Count, int32_t i32BPP, + const uint8_t *pui8Data, + const uint8_t *pui8Palette) +{ + uint32_t ui32Byte; + + // + // Set the cursor increment to left to right, followed by top to bottom. + // + WriteCommand(SSD2119_ENTRY_MODE_REG); + WriteData(MAKE_ENTRY_MODE(HORIZ_DIRECTION)); + + // + // Set the starting X address of the display cursor. + // + WriteCommand(SSD2119_X_RAM_ADDR_REG); + WriteData(MAPPED_X(i32X, i32Y)); + + // + // Set the Y address of the display cursor. + // + WriteCommand(SSD2119_Y_RAM_ADDR_REG); + WriteData(MAPPED_Y(i32X, i32Y)); + + // + // Write the data RAM write command. + // + WriteCommand(SSD2119_RAM_DATA_REG); + + // + // Determine how to interpret the pixel data based on the number of bits + // per pixel. + // + switch(i32BPP & ~GRLIB_DRIVER_FLAG_NEW_IMAGE) + { + // + // The pixel data is in 1 bit per pixel format. + // + case 1: + { + // + // Loop while there are more pixels to draw. + // + while(i32Count) + { + // + // Get the next byte of image data. + // + ui32Byte = *pui8Data++; + + // + // Loop through the pixels in this byte of image data. + // + for(; (i32X0 < 8) && i32Count; i32X0++, i32Count--) + { + // + // Draw this pixel in the appropriate color. + // + WriteData(((uint32_t *)pui8Palette)[(ui32Byte >> + (7 - i32X0)) & 1]); + } + + // + // Start at the beginning of the next byte of image data. + // + i32X0 = 0; + } + + // + // The image data has been drawn. + // + break; + } + + // + // The pixel data is in 4 bit per pixel format. + // + case 4: + { + // + // Loop while there are more pixels to draw. "Duff's device" is + // used to jump into the middle of the loop if the first nibble of + // the pixel data should not be used. Duff's device makes use of + // the fact that a case statement is legal anywhere within a + // sub-block of a switch statement. See + // http://en.wikipedia.org/wiki/Duff's_device for detailed + // information about Duff's device. + // + switch(i32X0 & 1) + { + case 0: + while(i32Count) + { + // + // Get the upper nibble of the next byte of pixel data + // and extract the corresponding entry from the + // palette. + // + ui32Byte = (*pui8Data >> 4) * 3; + ui32Byte = (*(uint32_t *)(pui8Palette + ui32Byte) & + 0x00ffffff); + + // + // Translate this palette entry and write it to the + // screen. + // + WriteData(DPYCOLORTRANSLATE(ui32Byte)); + + // + // Decrement the count of pixels to draw. + // + i32Count--; + + // + // See if there is another pixel to draw. + // + if(i32Count) + { + case 1: + // + // Get the lower nibble of the next byte of pixel + // data and extract the corresponding entry from + // the palette. + // + ui32Byte = (*pui8Data++ & 15) * 3; + ui32Byte = (*(uint32_t *)(pui8Palette + ui32Byte) & + 0x00ffffff); + + // + // Translate this palette entry and write it to the + // screen. + // + WriteData(DPYCOLORTRANSLATE(ui32Byte)); + + // + // Decrement the count of pixels to draw. + // + i32Count--; + } + } + } + + // + // The image data has been drawn. + // + break; + } + + // + // The pixel data is in 8 bit per pixel format. + // + case 8: + { + // + // Loop while there are more pixels to draw. + // + while(i32Count--) + { + // + // Get the next byte of pixel data and extract the + // corresponding entry from the palette. + // + ui32Byte = *pui8Data++ * 3; + ui32Byte = *(uint32_t *)(pui8Palette + ui32Byte) & 0x00ffffff; + + // + // Translate this palette entry and write it to the screen. + // + WriteData(DPYCOLORTRANSLATE(ui32Byte)); + } + + // + // The image data has been drawn. + // + break; + } + } +} + +//***************************************************************************** +// +//! Draws a horizontal line. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! \param i32X1 is the X coordinate of the start of the line. +//! \param i32X2 is the X coordinate of the end of the line. +//! \param i32Y is the Y coordinate of the line. +//! \param ui32Value is the color of the line. +//! +//! This function draws a horizontal line on the display. The coordinates of +//! the line are assumed to be within the extents of the display. +//! +//! \return None. +// +//***************************************************************************** +static void +Kentec320x240x16_SSD2119LineDrawH(void *pvDisplayData, int32_t i32X1, + int32_t i32X2, int32_t i32Y, + uint32_t ui32Value) +{ + // + // Set the cursor increment to left to right, followed by top to bottom. + // + WriteCommand(SSD2119_ENTRY_MODE_REG); + WriteData(MAKE_ENTRY_MODE(HORIZ_DIRECTION)); + + // + // Set the starting X address of the display cursor. + // + WriteCommand(SSD2119_X_RAM_ADDR_REG); + WriteData(MAPPED_X(i32X1, i32Y)); + + // + // Set the Y address of the display cursor. + // + WriteCommand(SSD2119_Y_RAM_ADDR_REG); + WriteData(MAPPED_Y(i32X1, i32Y)); + + // + // Write the data RAM write command. + // + WriteCommand(SSD2119_RAM_DATA_REG); + + // + // Loop through the pixels of this horizontal line. + // + while(i32X1++ <= i32X2) + { + // + // Write the pixel value. + // + WriteData(ui32Value); + } +} + +//***************************************************************************** +// +//! Draws a vertical line. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! \param i32X is the X coordinate of the line. +//! \param i32Y1 is the Y coordinate of the start of the line. +//! \param i32Y2 is the Y coordinate of the end of the line. +//! \param ui32Value is the color of the line. +//! +//! This function draws a vertical line on the display. The coordinates of the +//! line are assumed to be within the extents of the display. +//! +//! \return None. +// +//***************************************************************************** +static void +Kentec320x240x16_SSD2119LineDrawV(void *pvDisplayData, int32_t i32X, + int32_t i32Y1, int32_t i32Y2, + uint32_t ui32Value) +{ + // + // Set the cursor increment to top to bottom, followed by left to right. + // + WriteCommand(SSD2119_ENTRY_MODE_REG); + WriteData(MAKE_ENTRY_MODE(VERT_DIRECTION)); + + // + // Set the X address of the display cursor. + // + WriteCommand(SSD2119_X_RAM_ADDR_REG); + WriteData(MAPPED_X(i32X, i32Y1)); + + // + // Set the starting Y address of the display cursor. + // + WriteCommand(SSD2119_Y_RAM_ADDR_REG); + WriteData(MAPPED_Y(i32X, i32Y1)); + + // + // Write the data RAM write command. + // + WriteCommand(SSD2119_RAM_DATA_REG); + + // + // Loop through the pixels of this vertical line. + // + while(i32Y1++ <= i32Y2) + { + // + // Write the pixel value. + // + WriteData(ui32Value); + } +} + +//***************************************************************************** +// +//! Fills a rectangle. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! \param psRect is a pointer to the structure describing the rectangle. +//! \param ui32Value is the color of the rectangle. +//! +//! This function fills a rectangle on the display. The coordinates of the +//! rectangle are assumed to be within the extents of the display, and the +//! rectangle specification is fully inclusive (in other words, both i16XMin +//! and i16XMax are drawn, along with i16YMin and i16YMax). +//! +//! \return None. +// +//***************************************************************************** +static void +Kentec320x240x16_SSD2119RectFill(void *pvDisplayData, const tRectangle *psRect, + uint32_t ui32Value) +{ + int32_t i32Count; + + // + // Write the Y extents of the rectangle. + // + WriteCommand(SSD2119_ENTRY_MODE_REG); + WriteData(MAKE_ENTRY_MODE(HORIZ_DIRECTION)); + + // + // Write the X extents of the rectangle. + // + WriteCommand(SSD2119_H_RAM_START_REG); +#if (defined PORTRAIT) || (defined LANDSCAPE) + WriteData(MAPPED_X(psRect->i16XMax, psRect->i16YMax)); +#else + WriteData(MAPPED_X(psRect->i16XMin, psRect->i16YMin)); +#endif + + WriteCommand(SSD2119_H_RAM_END_REG); +#if (defined PORTRAIT) || (defined LANDSCAPE) + WriteData(MAPPED_X(psRect->i16XMin, psRect->i16YMin)); +#else + WriteData(MAPPED_X(psRect->i16XMax, psRect->i16YMax)); +#endif + + // + // Write the Y extents of the rectangle + // + WriteCommand(SSD2119_V_RAM_POS_REG); +#if (defined LANDSCAPE_FLIP) || (defined PORTRAIT) + WriteData(MAPPED_Y(psRect->i16XMin, psRect->i16YMin) | + (MAPPED_Y(psRect->i16XMax, psRect->i16YMax) << 8)); +#else + WriteData(MAPPED_Y(psRect->i16XMax, psRect->i16YMax) | + (MAPPED_Y(psRect->i16XMin, psRect->i16YMin) << 8)); +#endif + + // + // Set the display cursor to the upper left of the rectangle (in + // application coordinate space). + // + WriteCommand(SSD2119_X_RAM_ADDR_REG); + WriteData(MAPPED_X(psRect->i16XMin, psRect->i16YMin)); + WriteCommand(SSD2119_Y_RAM_ADDR_REG); + WriteData(MAPPED_Y(psRect->i16XMin, psRect->i16YMin)); + + // + // Tell the controller to write data into its RAM. + // + WriteCommand(SSD2119_RAM_DATA_REG); + + // + // Loop through the pixels of this filled rectangle. + // + for(i32Count = ((psRect->i16XMax - psRect->i16XMin + 1) * + (psRect->i16YMax - psRect->i16YMin + 1)); i32Count >= 0; + i32Count--) + { + // + // Write the pixel value. + // + WriteData(ui32Value); + } + + // + // Reset the X extents to the entire screen. + // + WriteCommand(SSD2119_H_RAM_START_REG); + WriteData(0x0000); + WriteCommand(SSD2119_H_RAM_END_REG); + WriteData(0x013f); + + // + // Reset the Y extent to the full screen + // + WriteCommand(SSD2119_V_RAM_POS_REG); + WriteData(0xef00); +} + +//***************************************************************************** +// +//! Translates a 24-bit RGB color to a display driver-specific color. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! \param ui32Value is the 24-bit RGB color. The least-significant byte is +//! the blue channel, the next byte is the green channel, and the third byte is +//! the red channel. +//! +//! This function translates a 24-bit RGB color into a value that can be +//! written into the display's frame buffer in order to reproduce that color, +//! or the closest possible approximation of that color. +//! +//! \return Returns the display-driver specific color. +// +//***************************************************************************** +static uint32_t +Kentec320x240x16_SSD2119ColorTranslate(void *pvDisplayData, uint32_t ui32Value) +{ + // + // Translate from a 24-bit RGB color to a 5-6-5 RGB color. + // + return(DPYCOLORTRANSLATE(ui32Value)); +} + +//***************************************************************************** +// +//! Flushes any cached drawing operations. +//! +//! \param pvDisplayData is a pointer to the driver-specific data for this +//! display driver. +//! +//! This functions flushes any cached drawing operations to the display. This +//! is useful when a local frame buffer is used for drawing operations, and the +//! flush would copy the local frame buffer to the display. For the SSD2119 +//! driver, the flush is a no operation. +//! +//! \return None. +// +//***************************************************************************** +static void +Kentec320x240x16_SSD2119Flush(void *pvDisplayData) +{ + // + // There is nothing to be done. + // +} + +//***************************************************************************** +// +//! The display structure that describes the driver for the Kentec K350QVG-V2-F +//! TFT panel with an SSD2119 controller. +// +//***************************************************************************** +const tDisplay g_sKentec320x240x16_SSD2119 = +{ + sizeof(tDisplay), + 0, +#if defined(PORTRAIT) || defined(PORTRAIT_FLIP) + 240, + 320, +#else + 320, + 240, +#endif + Kentec320x240x16_SSD2119PixelDraw, + Kentec320x240x16_SSD2119PixelDrawMultiple, + Kentec320x240x16_SSD2119LineDrawH, + Kentec320x240x16_SSD2119LineDrawV, + Kentec320x240x16_SSD2119RectFill, + Kentec320x240x16_SSD2119ColorTranslate, + Kentec320x240x16_SSD2119Flush +}; + +//***************************************************************************** +// +//! Initializes the display driver. +//! +//! \param ui32SysClock is the frequency of the system clock. +//! +//! This function initializes the LCD controller and the SSD2119 display +//! controller on the panel, preparing it to display data. +//! +//! \return None. +// +//***************************************************************************** +void +Kentec320x240x16_SSD2119Init(uint32_t ui32SysClock) +{ + uint32_t ui32ClockMS, ui32Count; + tLCDIDDTiming sTimings; + + // + // Determine the number of system clock cycles in 1mS + // + ui32ClockMS = CYCLES_FROM_TIME_US(ui32SysClock, 1000); + + // + // Divide by 3 to get the number of SysCtlDelay loops in 1mS. + // + ui32ClockMS /= 3; + + // + // Enable the LCD controller. + // + SysCtlPeripheralEnable(SYSCTL_PERIPH_LCD0); + + // + // Assert the LCD reset signal. + // + GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_6, 0); + + // + // Delay for 50ms. + // + SysCtlDelay(50 * ui32ClockMS); + + // + // Deassert the LCD reset signal. + // + GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_6, GPIO_PIN_6); + + // + // Delay for 50ms while the LCD comes out of reset. + // + SysCtlDelay(50 * ui32ClockMS); + + // + // Configure the LCD controller for LIDD-mode operation. + // + LCDModeSet(LCD0_BASE, LCD_MODE_LIDD, ui32SysClock, ui32SysClock); + + // + // Configure DMA-related parameters. + // + LCDDMAConfigSet(LCD0_BASE, LCD_DMA_BURST_4); + + // + // Set control signal parameters and polarities. + // + LCDIDDConfigSet(LCD0_BASE, LIDD_CONFIG_ASYNC_MPU80); + + // + // Set the LIDD interface timings for the Kentec display. Note that the + // inter-transaction delay is set at at 50nS to match the write case. + // Software needs to ensure that it delays at least 450nS more between each + // read or the read timings will be violated. + // + sTimings.ui8WSSetup = CYCLES_FROM_TIME_NS(ui32SysClock, 5); + sTimings.ui8WSDuration = CYCLES_FROM_TIME_NS(ui32SysClock, 40); + sTimings.ui8WSHold = CYCLES_FROM_TIME_NS(ui32SysClock, 5); + sTimings.ui8RSSetup = CYCLES_FROM_TIME_NS(ui32SysClock, 0); + sTimings.ui8RSDuration = CYCLES_FROM_TIME_NS(ui32SysClock, 500); + sTimings.ui8RSHold = CYCLES_FROM_TIME_NS(ui32SysClock, 100); + sTimings.ui8DelayCycles = CYCLES_FROM_TIME_NS(ui32SysClock, 50); + LCDIDDTimingSet(LCD0_BASE, 0, &sTimings); + + // + // Enter sleep mode (if not already there). + // + WriteCommand(SSD2119_SLEEP_MODE_1_REG); + WriteData(0x0001); + + // + // Set initial power parameters. + // + WriteCommand(SSD2119_PWR_CTRL_5_REG); + WriteData(0x00b2); + WriteCommand(SSD2119_VCOM_OTP_1_REG); + WriteData(0x0006); + + // + // Start the oscillator. + // + WriteCommand(SSD2119_OSC_START_REG); + WriteData(0x0001); + + // + // Set pixel format and basic display orientation (scanning direction). + // + WriteCommand(SSD2119_OUTPUT_CTRL_REG); + WriteData(0x30ef); + WriteCommand(SSD2119_LCD_DRIVE_AC_CTRL_REG); + WriteData(0x0600); + + // + // Exit sleep mode. + // + WriteCommand(SSD2119_SLEEP_MODE_1_REG); + WriteData(0x0000); + + // + // Delay 30mS + // + SysCtlDelay(30 * ui32ClockMS); + + // + // Configure pixel color format and MCU interface parameters. + // + WriteCommand(SSD2119_ENTRY_MODE_REG); + WriteData(ENTRY_MODE_DEFAULT); + + // + // Set analog parameters. + // + WriteCommand(SSD2119_SLEEP_MODE_2_REG); + WriteData(0x0999); + WriteCommand(SSD2119_ANALOG_SET_REG); + WriteData(0x3800); + + // + // Enable the display. + // + WriteCommand(SSD2119_DISPLAY_CTRL_REG); + WriteData(0x0033); + + // + // Set VCIX2 voltage to 6.1V. + // + WriteCommand(SSD2119_PWR_CTRL_2_REG); + WriteData(0x0005); + + // + // Configure gamma correction. + // + WriteCommand(SSD2119_GAMMA_CTRL_1_REG); + WriteData(0x0000); + WriteCommand(SSD2119_GAMMA_CTRL_2_REG); + WriteData(0x0303); + WriteCommand(SSD2119_GAMMA_CTRL_3_REG); + WriteData(0x0407); + WriteCommand(SSD2119_GAMMA_CTRL_4_REG); + WriteData(0x0301); + WriteCommand(SSD2119_GAMMA_CTRL_5_REG); + WriteData(0x0301); + WriteCommand(SSD2119_GAMMA_CTRL_6_REG); + WriteData(0x0403); + WriteCommand(SSD2119_GAMMA_CTRL_7_REG); + WriteData(0x0707); + WriteCommand(SSD2119_GAMMA_CTRL_8_REG); + WriteData(0x0400); + WriteCommand(SSD2119_GAMMA_CTRL_9_REG); + WriteData(0x0a00); + WriteCommand(SSD2119_GAMMA_CTRL_10_REG); + WriteData(0x1000); + + // + // Configure Vlcd63 and VCOMl. + // + WriteCommand(SSD2119_PWR_CTRL_3_REG); + WriteData(0x000a); + WriteCommand(SSD2119_PWR_CTRL_4_REG); + WriteData(0x2e00); + + // + // Set the display size and ensure that the GRAM window is set to allow + // access to the full display buffer. + // + WriteCommand(SSD2119_V_RAM_POS_REG); + WriteData((LCD_VERTICAL_MAX-1) << 8); + WriteCommand(SSD2119_H_RAM_START_REG); + WriteData(0x0000); + WriteCommand(SSD2119_H_RAM_END_REG); + WriteData(LCD_HORIZONTAL_MAX-1); + WriteCommand(SSD2119_X_RAM_ADDR_REG); + WriteData(0x0000); + WriteCommand(SSD2119_Y_RAM_ADDR_REG); + WriteData(0x0000); + + // + // Clear the contents of the display buffer. + // + WriteCommand(SSD2119_RAM_DATA_REG); + for(ui32Count = 0; ui32Count < (320 * 240); ui32Count++) + { + WriteData(0x0000); + } +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.h b/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.h new file mode 100644 index 0000000..fa3fd02 --- /dev/null +++ b/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.h @@ -0,0 +1,58 @@ +//***************************************************************************** +// +// kentec320x240x16_ssd2119.h - Prototypes for the display driver for the +// Kentec K350QVG-V2-F TFT display attached to the +// LCD controller via an 8-bit LIDD interface. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVERS_KENTEC320X240X16_SSD2119_H__ +#define __DRIVERS_KENTEC320X240X16_SSD2119_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern const tDisplay g_sKentec320x240x16_SSD2119; +extern void Kentec320x240x16_SSD2119Init(uint32_t ui32SysClock); + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __DRIVERS_KENTEC320X240X16_SSD2119_H__ diff --git a/boards/dk-tm4c129x/drivers/mx66l51235f.c b/boards/dk-tm4c129x/drivers/mx66l51235f.c new file mode 100644 index 0000000..084ee1d --- /dev/null +++ b/boards/dk-tm4c129x/drivers/mx66l51235f.c @@ -0,0 +1,534 @@ +//***************************************************************************** +// +// mx66l51235f.c - Driver for the on-board SPI flash. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "driverlib/ssi.h" +#include "utils/spi_flash.h" + +//***************************************************************************** +// +//! \addtogroup mx66l51235f_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// The current value of the extended address register. This is tracked so that +// it is only updated via SPI when it needs to be changed. +// +//***************************************************************************** +static uint32_t g_ui32MX66L51235FAddr; + +//***************************************************************************** +// +//! Initializes the MX66L51235F driver. +//! +//! \param ui32SysClock is the frequency of the system clock. +//! +//! This function initializes the MX66L51235F driver and SSI interface, +//! preparing for accesses to the SPI flash device. Since the SSI interface +//! on the DK-TM4C129X board is shared with the SD card, this must be called +//! prior to any SPI flash access the immediately follows an SD card access. +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FInit(uint32_t ui32SysClock) +{ + uint32_t ui32SPIClock; + + // + // Set the SPI clock to the minimum of one quarter of system clock and + // 12.5 MHz. The SPI module can run at up to one quarter of system clock + // and the SD card, if inserted, might cause interference on the SPI bus + // (even though it is not selected) if the SPI clock exceeds 12.5 MHz. + // + ui32SPIClock = ui32SysClock / 4; + if(ui32SPIClock > 12500000) + { + ui32SPIClock = 12500000; + } + + // + // Configure the SPI flash driver on SSI3. + // + ROM_SPIFlashInit(SSI3_BASE, ui32SysClock, ui32SPIClock); + + // + // Set the current value of the extended address register to -1, causing it + // to be written on the first access. + // + g_ui32MX66L51235FAddr = 0xffffffff; +} + +//***************************************************************************** +// +// Enable program/erase of the MX66L51235F. +// +//***************************************************************************** +static void +MX66L51235FWriteEnable(void) +{ + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Enable programming/erasing of the MX66L51235F. + // + ROM_SPIFlashWriteEnable(SSI3_BASE); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); +} + +//***************************************************************************** +// +// Waits until a program/erase operation has completed. +// +//***************************************************************************** +static void +MX66L51235FWait(void) +{ + uint8_t ui8Status; + + // + // Loop until the requested operation has completed. + // + do + { + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Read the status register. + // + ui8Status = ROM_SPIFlashReadStatus(SSI3_BASE); + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + } + while(ui8Status & 1); +} + +//***************************************************************************** +// +// Writes the extended address register, allowing the full contents of the +// MX66L51235F to be accessed. +// +//***************************************************************************** +static void +MX66L51235FWriteEAR(uint32_t ui32Addr) +{ + // + // See if the extended address register needs to be written. + // + if((ui32Addr & 0xff000000) == (g_ui32MX66L51235FAddr & 0xff000000)) + { + // + // The extended address register does not need to be changed, so return + // without doing anything. + // + return; + } + + // + // Save the new value of the extended address register. + // + g_ui32MX66L51235FAddr = ui32Addr; + + // + // Enable program/erase of the SPI flash. + // + MX66L51235FWriteEnable(); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Set the SSI module into write-only mode. + // + ROM_SSIAdvModeSet(SSI3_BASE, SSI_ADV_MODE_WRITE); + + // + // Send the sector erase command. + // + ROM_SSIDataPut(SSI3_BASE, 0xc5); + + // + // Send the address of the sector to be erased, marking the last byte of + // the address as the end of the frame. + // + ROM_SSIAdvDataPutFrameEnd(SSI3_BASE, (ui32Addr >> 24) & 0xff); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); +} + +//***************************************************************************** +// +//! Erases a 4 KB sector of the MX66L51235F. +//! +//! \param ui32Addr is the address of the sector to erase. +//! +//! This function erases a sector of the MX66L51235F. Each sector is 4 KB with +//! a 4 KB alignment; the MX66L51235F will ignore the lower ten bits of the +//! address provided. This function will not return until the data has be +//! erased. +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FSectorErase(uint32_t ui32Addr) +{ + // + // Write the extended address register. + // + MX66L51235FWriteEAR(ui32Addr); + + // + // Enable program/erase of the SPI flash. + // + MX66L51235FWriteEnable(); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Erase the requested sector. + // + ROM_SPIFlashSectorErase(SSI3_BASE, ui32Addr); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + + // + // Wait for the erase operation to complete. + // + MX66L51235FWait(); +} + +//***************************************************************************** +// +//! Erases a 32 KB block of the MX66L51235F. +//! +//! \param ui32Addr is the address of the block to erase. +//! +//! This function erases a 32 KB block of the MX66L51235F. Each 32 KB block +//! has a 32 KB alignment; the MX66L51235F will ignore the lower 15 bits of the +//! address provided. This function will not return until the data has be +//! erased. +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FBlockErase32(uint32_t ui32Addr) +{ + // + // Write the extended address register. + // + MX66L51235FWriteEAR(ui32Addr); + + // + // Enable program/erase of the SPI flash. + // + MX66L51235FWriteEnable(); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Erase the requested block. + // + ROM_SPIFlashBlockErase32(SSI3_BASE, ui32Addr); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + + // + // Wait for the erase operation to complete. + // + MX66L51235FWait(); +} + +//***************************************************************************** +// +//! Erases a 64 KB block of the MX66L51235F. +//! +//! \param ui32Addr is the address of the block to erase. +//! +//! This function erases a 64 KB block of the MX66L51235F. Each 64 KB block +//! has a 64 KB alignment; the MX66L51235F will ignore the lower 16 bits of the +//! address provided. This function will not return until the data has be +//! erased. +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FBlockErase64(uint32_t ui32Addr) +{ + // + // Write the extended address register. + // + MX66L51235FWriteEAR(ui32Addr); + + // + // Enable program/erase of the SPI flash. + // + MX66L51235FWriteEnable(); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Erase the requested block. + // + ROM_SPIFlashBlockErase64(SSI3_BASE, ui32Addr); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + + // + // Wait for the erase operation to complete. + // + MX66L51235FWait(); +} + +//***************************************************************************** +// +//! Erases the entire MX66L51235F. +//! +//! This command erase the entire contents of the MX66L51235F. This takes two +//! minutes, nominally, to complete. This function will not return until the +//! data has be erased. +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FChipErase(void) +{ + // + // Enable program/erase of the SPI flash. + // + MX66L51235FWriteEnable(); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Erase the entire device. + // + ROM_SPIFlashChipErase(SSI3_BASE); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + + // + // Wait for the erase operation to complete. + // + MX66L51235FWait(); +} + +//***************************************************************************** +// +//! Programs the MX66L51235F. +//! +//! \param ui32Addr is the address to be programmed. +//! \param pui8Data is a pointer to the data to be programmed. +//! \param ui32Count is the number of bytes to be programmed. +//! +//! This function programs data into the MX66L51235F. This function will not +//! return until the data has be programmed. The addresses to be programmed +//! must not span a 256-byte boundary (in other words, ``\e ui32Addr & ~255'' +//! must be the same as ``(\e ui32Addr + \e ui32Count) & ~255''). +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FPageProgram(uint32_t ui32Addr, const uint8_t *pui8Data, + uint32_t ui32Count) +{ + // + // Write the extended address register. + // + MX66L51235FWriteEAR(ui32Addr); + + // + // Enable program/erase of the SPI flash. + // + MX66L51235FWriteEnable(); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Program the requested data. + // + ROM_SPIFlashPageProgram(SSI3_BASE, ui32Addr, pui8Data, ui32Count); + + // + // Wait until the command has been completely transmitted. + // + while(ROM_SSIBusy(SSI3_BASE)) + { + } + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + + // + // Wait for the page program operation to complete. + // + MX66L51235FWait(); +} + +//***************************************************************************** +// +//! Reads data from the MX66L51235F. +//! +//! \param ui32Addr is the address to read. +//! \param pui8Data is a pointer to the data buffer to into which to read the +//! data. +//! \param ui32Count is the number of bytes to read. +//! +//! This function reads data from the MX66L51235F. +//! +//! \return None. +// +//***************************************************************************** +void +MX66L51235FRead(uint32_t ui32Addr, uint8_t *pui8Data, uint32_t ui32Count) +{ + // + // Write the extended address register. + // + MX66L51235FWriteEAR(ui32Addr); + + // + // Assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, 0); + + // + // Read the requested data. + // + ROM_SPIFlashRead(SSI3_BASE, ui32Addr, pui8Data, ui32Count); + + // + // De-assert the chip select to the MX66L51235F. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/mx66l51235f.h b/boards/dk-tm4c129x/drivers/mx66l51235f.h new file mode 100644 index 0000000..fe18d3d --- /dev/null +++ b/boards/dk-tm4c129x/drivers/mx66l51235f.h @@ -0,0 +1,71 @@ +//***************************************************************************** +// +// mx66l51235f.h - Prototypes for the MX66L51235F driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVERS_MX66L51235F_H__ +#define __DRIVERS_MX66L51235F_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// The memory size and block size in bytes. +// +//***************************************************************************** +#define MX66L51235F_MEMORY_SIZE 0x04000000 +#define MX66L51235F_BLOCK_SIZE 0x1000 + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern void MX66L51235FInit(uint32_t ui32SysClock); +extern void MX66L51235FSectorErase(uint32_t ui32Addr); +extern void MX66L51235FBlockErase32(uint32_t ui32Addr); +extern void MX66L51235FBlockErase64(uint32_t ui32Addr); +extern void MX66L51235FChipErase(void); +extern void MX66L51235FPageProgram(uint32_t ui32Addr, const uint8_t *pui8Data, + uint32_t ui32Count); +extern void MX66L51235FRead(uint32_t ui32Addr, uint8_t *pui8Data, + uint32_t ui32Count); + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __DRIVERS_MX66L51235F_H__ diff --git a/boards/dk-tm4c129x/drivers/pinout.c b/boards/dk-tm4c129x/drivers/pinout.c new file mode 100644 index 0000000..12a4ddc --- /dev/null +++ b/boards/dk-tm4c129x/drivers/pinout.c @@ -0,0 +1,282 @@ +//***************************************************************************** +// +// pinout.c - Function to configure the device pins on the DK-TM4C129X. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/sysctl.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup pinout_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +//! Configures the device pins for the standard usages on the DK-TM4C129X. +//! +//! This function enables the GPIO modules and configures the device pins for +//! the default, standard usages on the DK-TM4C129X. Applications that require +//! alternate configurations of the device pins can either not call this +//! function and take full responsibility for configuring all the device pins, +//! or can reconfigure the required device pins after calling this function. +//! +//! \return None. +// +//***************************************************************************** +void +PinoutSet(void) +{ + // + // Enable all the GPIO peripherals. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOS); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOT); + + // + // PA0-1 are used for UART0. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // PA2-5 are used for SSI0 to the second booster pack. + // + ROM_GPIOPinConfigure(GPIO_PA2_SSI0CLK); + ROM_GPIOPinConfigure(GPIO_PA3_SSI0FSS); + ROM_GPIOPinConfigure(GPIO_PA4_SSI0XDAT0); + ROM_GPIOPinConfigure(GPIO_PA5_SSI0XDAT1); + + // + // PB0-1/PD6-7/PL6-7 are used for USB. + // + HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; + HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xff; + ROM_GPIOPinConfigure(GPIO_PD6_USB0EPEN); + ROM_GPIOPinConfigure(GPIO_PD7_USB0PFLT); + ROM_GPIOPinTypeUSBAnalog(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1); + ROM_GPIOPinTypeUSBDigital(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7); + ROM_GPIOPinTypeUSBAnalog(GPIO_PORTL_BASE, GPIO_PIN_6 | GPIO_PIN_7); + + // + // PB2/PD4 are used for the speaker output. + // + ROM_GPIOPinConfigure(GPIO_PB2_T5CCP0); + ROM_GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_2); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4); + ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, 0); + + // + // PB6-7 are used for I2C to the TMP100 and the EM connector. + // + ROM_GPIOPinConfigure(GPIO_PB6_I2C6SCL); + ROM_GPIOPinConfigure(GPIO_PB7_I2C6SDA); + ROM_GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_6); + ROM_GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_7); + + // + // PE5/PN3/PP1 are used for the push buttons. + // + ROM_GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_5); + ROM_GPIOPinTypeGPIOInput(GPIO_PORTN_BASE, GPIO_PIN_3); + ROM_GPIOPinTypeGPIOInput(GPIO_PORTP_BASE, GPIO_PIN_1); + + // + // PE7/PP7/PT2-3 are used for the touch screen. + // + HWREG(GPIO_PORTE_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; + HWREG(GPIO_PORTE_BASE + GPIO_O_CR) = 0xff; + ROM_GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_7); + ROM_GPIOPinTypeGPIOInput(GPIO_PORTP_BASE, GPIO_PIN_7); + ROM_GPIOPinTypeGPIOInput(GPIO_PORTT_BASE, GPIO_PIN_2 | GPIO_PIN_3); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_7); + ROM_GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_7, 0); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTP_BASE, GPIO_PIN_7); + ROM_GPIOPinWrite(GPIO_PORTP_BASE, GPIO_PIN_7, 0); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTT_BASE, GPIO_PIN_2 | GPIO_PIN_3); + ROM_GPIOPinWrite(GPIO_PORTT_BASE, GPIO_PIN_2 | GPIO_PIN_3, 0); + + // + // PF0/PF4-5/PH4/PQ0-2 are used for the SPI flash (on-board and SD card). + // PH4 selects the SD card and PQ1 selects the on-board SPI flash. + // + ROM_GPIOPinConfigure(GPIO_PF0_SSI3XDAT1); + ROM_GPIOPinConfigure(GPIO_PF4_SSI3XDAT2); + ROM_GPIOPinConfigure(GPIO_PF5_SSI3XDAT3); + ROM_GPIOPinConfigure(GPIO_PQ0_SSI3CLK); + ROM_GPIOPinConfigure(GPIO_PQ2_SSI3XDAT0); + ROM_GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_4 | GPIO_PIN_5); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTH_BASE, GPIO_PIN_4); + ROM_GPIOPinWrite(GPIO_PORTH_BASE, GPIO_PIN_4, GPIO_PIN_4); + ROM_GPIOPinTypeSSI(GPIO_PORTQ_BASE, GPIO_PIN_0 | GPIO_PIN_2); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, GPIO_PIN_1); + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_1, GPIO_PIN_1); + + // + // PF1/PK4/PK6 are used for Ethernet LEDs. + // + ROM_GPIOPinConfigure(GPIO_PF1_EN0LED2); + ROM_GPIOPinConfigure(GPIO_PK4_EN0LED0); + ROM_GPIOPinConfigure(GPIO_PK6_EN0LED1); + GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_1); + GPIOPinTypeEthernetLED(GPIO_PORTK_BASE, GPIO_PIN_4); + GPIOPinTypeEthernetLED(GPIO_PORTK_BASE, GPIO_PIN_6); + + // + // PF6-7/PJ6/PS4-5/PR0-7 are used for the LCD. + // + ROM_GPIOPinConfigure(GPIO_PF7_LCDDATA02); + ROM_GPIOPinConfigure(GPIO_PJ6_LCDAC); + ROM_GPIOPinConfigure(GPIO_PR0_LCDCP); + ROM_GPIOPinConfigure(GPIO_PR1_LCDFP); + ROM_GPIOPinConfigure(GPIO_PR2_LCDLP); + ROM_GPIOPinConfigure(GPIO_PR3_LCDDATA03); + ROM_GPIOPinConfigure(GPIO_PR4_LCDDATA00); + ROM_GPIOPinConfigure(GPIO_PR5_LCDDATA01); + ROM_GPIOPinConfigure(GPIO_PR6_LCDDATA04); + ROM_GPIOPinConfigure(GPIO_PR7_LCDDATA05); + ROM_GPIOPinConfigure(GPIO_PS4_LCDDATA06); + ROM_GPIOPinConfigure(GPIO_PS5_LCDDATA07); + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_6); + ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_6, GPIO_PIN_6); + GPIOPinTypeLCD(GPIO_PORTF_BASE, GPIO_PIN_7); + GPIOPinTypeLCD(GPIO_PORTJ_BASE, GPIO_PIN_6); + GPIOPinTypeLCD(GPIO_PORTR_BASE, + (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | + GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7)); + GPIOPinTypeLCD(GPIO_PORTS_BASE, GPIO_PIN_4 | GPIO_PIN_5); + + // + // PQ7 is used for the user LED. + // + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, GPIO_PIN_7); + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_7, 0); +} + +//***************************************************************************** +// +//! Configures the USB pins for ULPI connection to an external USB PHY. +//! +//! This function configures the USB ULPI pins to connect the DK-TM4C129X board +//! to an external USB PHY in ULPI mode. This allows the external PHY to act +//! as an external high-speed phy for the DK-TM4C129X. This function must be +//! called after the call to PinoutSet() to properly configure the pins. +//! +//! \return None. +// +//***************************************************************************** +#ifdef USE_ULPI +void +USBULPIPinoutSet(void) +{ + // + // Enable all the peripherals that are used by the ULPI interface. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); + + // + // ULPI Port B pins. + // + ROM_GPIOPinConfigure(GPIO_PB2_USB0STP); + ROM_GPIOPinConfigure(GPIO_PB3_USB0CLK); + ROM_GPIOPinTypeUSBDigital(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3); + GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3, + GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_STD); + + // + // ULPI Port P pins. + // + ROM_GPIOPinConfigure(GPIO_PP2_USB0NXT); + ROM_GPIOPinConfigure(GPIO_PP3_USB0DIR); + ROM_GPIOPinConfigure(GPIO_PP4_USB0D7); + ROM_GPIOPinConfigure(GPIO_PP5_USB0D6); + ROM_GPIOPinTypeUSBDigital(GPIO_PORTP_BASE, GPIO_PIN_2 | GPIO_PIN_3 | + GPIO_PIN_4 | GPIO_PIN_5); + GPIOPadConfigSet(GPIO_PORTP_BASE, + GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, + GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_STD); + + // + // ULPI Port L pins. + // + ROM_GPIOPinConfigure(GPIO_PL5_USB0D5); + ROM_GPIOPinConfigure(GPIO_PL4_USB0D4); + ROM_GPIOPinConfigure(GPIO_PL3_USB0D3); + ROM_GPIOPinConfigure(GPIO_PL2_USB0D2); + ROM_GPIOPinConfigure(GPIO_PL1_USB0D1); + ROM_GPIOPinConfigure(GPIO_PL0_USB0D0); + ROM_GPIOPinTypeUSBDigital(GPIO_PORTL_BASE, GPIO_PIN_0 | GPIO_PIN_1 | + GPIO_PIN_2 | GPIO_PIN_3 | + GPIO_PIN_4 | GPIO_PIN_5); + GPIOPadConfigSet(GPIO_PORTL_BASE, + GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | + GPIO_PIN_4 | GPIO_PIN_5, + GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_STD); + // + // ULPI Port M pins used to control the external USB oscillator and the + // external USB phy on the DK-TM4C129X-DPHY board. + // + // PM1 - Enables the USB oscillator on the DK-TM4C129X-DPHY board. + // PM3 - Enables the USB phy on the DK-TM4C129X-DPHY board. + // + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTM_BASE, GPIO_PIN_1 | GPIO_PIN_3); + ROM_GPIOPinWrite(GPIO_PORTM_BASE, GPIO_PIN_1 | GPIO_PIN_3, GPIO_PIN_1 | + GPIO_PIN_3); +} +#endif + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/pinout.h b/boards/dk-tm4c129x/drivers/pinout.h new file mode 100644 index 0000000..802d9fe --- /dev/null +++ b/boards/dk-tm4c129x/drivers/pinout.h @@ -0,0 +1,59 @@ +//***************************************************************************** +// +// pinout.h - Prototype for the function to configure the device pins on the +// DK-TM4C129X. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVERS_PINOUT_H__ +#define __DRIVERS_PINOUT_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern void PinoutSet(void); +#ifdef USE_ULPI +extern void USBULPIPinoutSet(void); +#endif + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __DRIVERS_PINOUT_H__ diff --git a/boards/dk-tm4c129x/drivers/sound.c b/boards/dk-tm4c129x/drivers/sound.c new file mode 100644 index 0000000..56f84e0 --- /dev/null +++ b/boards/dk-tm4c129x/drivers/sound.c @@ -0,0 +1,688 @@ +//***************************************************************************** +// +// sound.c - Sound driver for the speaker on the DK-TM4C129X. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_timer.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" +#include "drivers/sound.h" + +//***************************************************************************** +// +//! \addtogroup sound_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// This structure defines the internal state of the sound driver. +// +//***************************************************************************** +typedef struct +{ + // + // The number of clocks per PWM period. + // + uint32_t ui32Period; + + // + // A set of flags indicating the mode of the sound driver. + // + volatile uint32_t ui32Flags; + + // + // A pointer to the sound buffer being played. + // + const int16_t *pi16Buffer; + + // + // The length of the sound buffer, in bytes. + // + uint32_t ui32Length; + + // + // The current playback offset into the sound buffer. + // + uint32_t ui32Offset; + + // + // The volume to playback the sound stream. This is a value between 0 + // (for silence) and 256 (for full volume). + // + int32_t i32Volume; + + // + // The previous and current sound samples, used for interpolating from + // 8 kHz to 64 kHz sound. + // + int16_t pi16Samples[2]; + + // + // The sound step, which corresponds to the current interpolation point + // between the previous and current sound samples. + // + int32_t i32Step; + + // + // The current requested rate adjustment. This is cleared when the + // the adjustment is made. + // + int32_t i32RateAdjust; + + // + // The callback function that indicates when half of the sound buffer has + // bene played and is therefore ready to be refilled. + // + void (*pfnCallback)(uint32_t ui32Half); +} +tSoundState; + +//***************************************************************************** +// +// The flags that are in tSoundState.ui32Flags. +// +//***************************************************************************** +#define SOUND_FLAG_STARTUP 0 +#define SOUND_FLAG_SHUTDOWN 1 +#define SOUND_FLAG_PLAY 2 +#define SOUND_FLAG_8KHZ 3 +#define SOUND_FLAG_16KHZ 4 +#define SOUND_FLAG_32KHZ 5 +#define SOUND_FLAG_64KHZ 6 + +//***************************************************************************** +// +// The current state of the sound driver. +// +//***************************************************************************** +static tSoundState g_sSoundState; + +//***************************************************************************** +// +//! Handles the TIMER5A interrupt. +//! +//! This function responds to the TIMER5A interrupt, updating the duty cycle of +//! the output waveform in order to produce sound. It is the application's +//! responsibility to ensure that this function is called in response to the +//! TIMER5A interrupt, typically by installing it in the vector table as the +//! handler for the TIMER5A interrupt. +//! +//! \return None. +// +//***************************************************************************** +void +SoundIntHandler(void) +{ + int32_t i32DutyCycle; + + // + // If there is an adjustment to be made, the apply it and set allow the + // update to be done on the next load. + // + if(g_sSoundState.i32RateAdjust) + { + g_sSoundState.ui32Period += g_sSoundState.i32RateAdjust; + g_sSoundState.i32RateAdjust = 0; + TimerLoadSet(TIMER5_BASE, TIMER_A, g_sSoundState.ui32Period); + } + + // + // Clear the timer interrupt. + // + ROM_TimerIntClear(TIMER5_BASE, TIMER_CAPA_EVENT); + + // + // See if the startup ramp is in progress. + // + if(HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_STARTUP)) + { + // + // Increment the ramp count. + // + g_sSoundState.i32Step++; + + // + // Increase the pulse width of the output by one clock. + // + ROM_TimerMatchSet(TIMER5_BASE, TIMER_A, g_sSoundState.i32Step); + + // + // See if this was the last step of the ramp. + // + if(g_sSoundState.i32Step >= (g_sSoundState.ui32Period / 2)) + { + // + // Indicate that the startup ramp has completed. + // + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_STARTUP) = 0; + + // + // Set the step back to zero for the start of audio playback. + // + g_sSoundState.i32Step = 0; + } + + // + // There is nothing further to be done. + // + return; + } + + // + // See if the shutdown ramp is in progress. + // + if(HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_SHUTDOWN)) + { + // + // See if this was the last step of the ramp. + // + if(g_sSoundState.i32Step == 1) + { + // + // Disable the output signals. + // + ROM_TimerMatchSet(TIMER5_BASE, TIMER_A, g_sSoundState.ui32Period); + + // + // Clear the sound flags. + // + g_sSoundState.ui32Flags = 0; + + // + // Disable the speaker amp. + // + ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, 0); + } + else + { + // + // Decrement the ramp count. + // + g_sSoundState.i32Step--; + + // + // Decrease the pulse width of the output by one clock. + // + ROM_TimerMatchSet(TIMER5_BASE, TIMER_A, g_sSoundState.i32Step); + } + + // + // There is nothing further to be done. + // + return; + } + + // + // Compute the value of the PCM sample based on the blended average of the + // previous and current samples. It should be noted that linear + // interpolation does not produce the best results with sound (it produces + // a significant amount of harmonic aliasing) but it is fast. + // + i32DutyCycle = + (((g_sSoundState.pi16Samples[0] * (8 - g_sSoundState.i32Step)) + + (g_sSoundState.pi16Samples[1] * g_sSoundState.i32Step)) / 8); + + // + // Adjust the magnitude of the sample based on the current volume. Since a + // multiplicative volume control is implemented, the volume value + // results in nearly linear volume adjustment if it is squared. + // + i32DutyCycle = (((i32DutyCycle * g_sSoundState.i32Volume * + g_sSoundState.i32Volume) / 65536) + 32768); + + // + // Set the PWM duty cycle based on this PCM sample. + // + i32DutyCycle = (g_sSoundState.ui32Period * i32DutyCycle) / 65536; + ROM_TimerMatchSet(TIMER5_BASE, TIMER_A, i32DutyCycle); + + // + // Increment the sound step based on the sample rate. + // + if(HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_8KHZ)) + { + g_sSoundState.i32Step = (g_sSoundState.i32Step + 1) & 7; + } + else if(HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_16KHZ)) + { + g_sSoundState.i32Step = (g_sSoundState.i32Step + 2) & 7; + } + else if(HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_32KHZ)) + { + g_sSoundState.i32Step = (g_sSoundState.i32Step + 4) & 7; + } + + // + // See if the next sample has been reached. + // + if(g_sSoundState.i32Step == 0) + { + // + // Copy the current sample to the previous sample. + // + g_sSoundState.pi16Samples[0] = g_sSoundState.pi16Samples[1]; + + // + // Get the next sample from the buffer. + // + g_sSoundState.pi16Samples[1] = + g_sSoundState.pi16Buffer[g_sSoundState.ui32Offset]; + + // + // Increment the buffer pointer. + // + g_sSoundState.ui32Offset++; + if(g_sSoundState.ui32Offset == g_sSoundState.ui32Length) + { + g_sSoundState.ui32Offset = 0; + } + + // + // Call the callback function if one of the half-buffers has been + // consumed. + // + if(g_sSoundState.pfnCallback) + { + if(g_sSoundState.ui32Offset == 0) + { + g_sSoundState.pfnCallback(1); + } + else if(g_sSoundState.ui32Offset == (g_sSoundState.ui32Length / 2)) + { + g_sSoundState.pfnCallback(0); + } + } + } +} + +//***************************************************************************** +// +//! Initializes the sound driver. +//! +//! \param ui32SysClock is the frequency of the system clock. +//! +//! This function initializes the sound driver, preparing it to output sound +//! data to the speaker. +//! +//! The system clock should be as high as possible; lower clock rates reduces +//! the quality of the produced sound. For the best quality sound, the system +//! should be clocked at 120 MHz. +//! +//! \note In order for the sound driver to function properly, the sound driver +//! interrupt handler (SoundIntHandler()) must be installed into the vector +//! table for the timer 5 subtimer A interrupt. +//! +//! \return None. +// +//***************************************************************************** +void +SoundInit(uint32_t ui32SysClock) +{ + // + // Enable the peripherals used by the sound driver. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER5); + + // + // Compute the PWM period based on the system clock. + // + g_sSoundState.ui32Period = ui32SysClock / 64000; + + // + // Set the default volume. + // + g_sSoundState.i32Volume = 255; + + // + // Configure the timer to run in PWM mode. + // + if((HWREG(TIMER5_BASE + TIMER_O_CTL) & TIMER_CTL_TBEN) == 0) + { + ROM_TimerConfigure(TIMER5_BASE, (TIMER_CFG_SPLIT_PAIR | + TIMER_CFG_A_PWM | + TIMER_CFG_B_PERIODIC)); + } + ROM_TimerLoadSet(TIMER5_BASE, TIMER_A, g_sSoundState.ui32Period - 1); + ROM_TimerMatchSet(TIMER5_BASE, TIMER_A, g_sSoundState.ui32Period); + ROM_TimerControlLevel(TIMER5_BASE, TIMER_A, true); + + // + // Update the timer values on timeouts and not immediately. + // + TimerUpdateMode(TIMER5_BASE, TIMER_A, TIMER_UP_LOAD_TIMEOUT | + TIMER_UP_MATCH_TIMEOUT); + + // + // Configure the timer to generate an interrupt at every time-out event. + // + ROM_TimerIntEnable(TIMER5_BASE, TIMER_CAPA_EVENT); + + // + // Enable the timer. At this point, the timer generates an interrupt + // every 15.625 us. + // + ROM_TimerEnable(TIMER5_BASE, TIMER_A); + ROM_IntEnable(INT_TIMER5A); + + // + // Clear the sound flags. + // + g_sSoundState.ui32Flags = 0; +} + +//***************************************************************************** +// +//! Make adjustments to the sample period of the PWM audio. +//! +//! \param i32RateAdjust is a signed value of the adjustment to make to the +//! current sample period. +//! +//! This function allows the sample period to be adjusted if the application +//! needs to make small adjustments to the playback rate of the audio. This +//! should only be used to makke smaller adjustments to the sample rate since +//! large changes cause distortion in the output. +//! +//! \return None. +// +//***************************************************************************** +void +SoundPeriodAdjust(int32_t i32RateAdjust) +{ + g_sSoundState.i32RateAdjust += i32RateAdjust; +} + +//***************************************************************************** +// +//! Starts playback of a sound stream. +//! +//! \param pi16Buffer is a pointer to the buffer that contains the sound to +//! play. +//! \param ui32Length is the length of the buffer in samples. This should be +//! a multiple of two. +//! \param ui32Rate is the sound playback rate; valid values are 8000, 16000, +//! 32000, and 64000. +//! \param pfnCallback is the callback function that is called when either half +//! of the sound buffer has been played. +//! +//! This function starts the playback of a sound stream contained in an +//! audio ping-pong buffer. The buffer is played repeatedly until +//! SoundStop() is called. Playback of the sound stream begins +//! immediately, so the buffer should be pre-filled with the initial sound +//! data prior to calling this function. +//! +//! \return Returns \b true if playback was started and \b false if it could +//! not be started (because something is already playing). +// +//***************************************************************************** +bool +SoundStart(int16_t *pi16Buffer, uint32_t ui32Length, uint32_t ui32Rate, + void (*pfnCallback)(uint32_t ui32Half)) +{ + // + // Return without playing the buffer if something is already playing. + // + if(g_sSoundState.ui32Flags) + { + return(false); + } + + // + // Set the sample rate flag. + // + if(ui32Rate == 8000) + { + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_8KHZ) = 1; + } + else if(ui32Rate == 16000) + { + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_16KHZ) = 1; + } + else if(ui32Rate == 32000) + { + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_32KHZ) = 1; + } + else if(ui32Rate == 64000) + { + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_64KHZ) = 1; + } + else + { + return(false); + } + + // + // Enable the speaker amp. + // + ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, GPIO_PIN_4); + + // + // Save the pointer to the buffer. + // + g_sSoundState.pi16Buffer = pi16Buffer; + g_sSoundState.ui32Length = ui32Length; + + // + // Save the pointer to the callback function. + // + g_sSoundState.pfnCallback = pfnCallback; + + // + // Start playback from the beginning of the buffer. + // + g_sSoundState.ui32Offset = 0; + + // + // Initialize the sample buffer with silence. + // + g_sSoundState.pi16Samples[0] = 0; + g_sSoundState.pi16Samples[1] = 0; + + // + // Start playback of the stream. + // + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_STARTUP) = 1; + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_PLAY) = 1; + + // + // Set the step for the startup ramp. + // + g_sSoundState.i32Step = 1; + + // + // Enable the timer interrupt. + // + ROM_TimerMatchSet(TIMER5_BASE, TIMER_A, 1); + + // + // Success. + // + return(true); +} + +//***************************************************************************** +// +//! Stops playback of the current sound stream. +//! +//! This function immediately stops playback of the current sound stream. As +//! a result, the output is changed directly to the mid-point, possibly +//! resulting in a pop or click. It is then ramped down to no output, +//! eliminating the current draw through the amplifier and speaker. +//! +//! \return None. +// +//***************************************************************************** +void +SoundStop(void) +{ + // + // See if playback is in progress. + // + if((g_sSoundState.ui32Flags != 0) && + (HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_SHUTDOWN) == 0)) + { + // + // Temporarily disable the timer interrupt. + // + ROM_IntDisable(INT_TIMER5A); + + // + // Clear the sound flags and set the shutdown flag (to try to avoid a + // pop, though one may still occur based on the current position of the + // output waveform). + // + g_sSoundState.ui32Flags = 0; + HWREGBITW(&g_sSoundState.ui32Flags, SOUND_FLAG_SHUTDOWN) = 1; + + // + // Set the shutdown step to the first. + // + g_sSoundState.i32Step = g_sSoundState.ui32Period / 2; + + // + // Reenable the timer interrupt. + // + ROM_IntEnable(INT_TIMER5A); + } +} + +//***************************************************************************** +// +//! Determines if the sound driver is busy. +//! +//! This function determines if the sound driver is busy, either performing the +//! startup or shutdown ramp for the speaker or playing a sound stream. +//! +//! \return Returns \b true if the sound driver is busy and \b false otherwise. +// +//***************************************************************************** +bool +SoundBusy(void) +{ + // + // The sound driver is busy if the sound flags are not zero. + // + return(g_sSoundState.ui32Flags != 0); +} + +//***************************************************************************** +// +//! Sets the volume of the sound playback. +//! +//! \param i32Volume is the volume of the sound playback, specified as a value +//! between 0 (for silence) and 255 (for full volume). +//! +//! This function sets the volume of the sound playback. Setting the volume to +//! 0 mutes the output, while setting the volume to 256 plays the sound +//! stream without any volume adjustment (that is, full volume). +//! +//! \return None. +// +//***************************************************************************** +void +SoundVolumeSet(int32_t i32Volume) +{ + // + // Set the volume mulitplier to be used. + // + g_sSoundState.i32Volume = i32Volume; +} + +//***************************************************************************** +// +//! Increases the volume of the sound playback. +//! +//! \param i32Volume is the amount by which to increase the volume of the +//! sound playback, specified as a value between 0 (for no adjustment) and 255 +//! maximum adjustment). +//! +//! This function increases the volume of the sound playback relative to the +//! current volume. +//! +//! \return None. +// +//***************************************************************************** +void +SoundVolumeUp(int32_t i32Volume) +{ + // + // Compute the new volume, limiting to the maximum if required. + // + i32Volume = g_sSoundState.i32Volume + i32Volume; + if(i32Volume > 255) + { + i32Volume = 255; + } + + // + // Set the new volume. + // + g_sSoundState.i32Volume = i32Volume; +} + +//***************************************************************************** +// +//! Decreases the volume of the sound playback. +//! +//! \param i32Volume is the amount by which to decrease the volume of the +//! sound playback, specified as a value between 0 (for no adjustment) and 255 +//! maximum adjustment). +//! +//! This function decreases the volume of the sound playback relative to the +//! current volume. +//! +//! \return None. +// +//***************************************************************************** +void +SoundVolumeDown(int32_t i32Volume) +{ + // + // Compute the new volume, limiting to the minimum if required. + // + i32Volume = g_sSoundState.i32Volume - i32Volume; + if(i32Volume < 0) + { + i32Volume = 0; + } + + // + // Set the new volume. + // + g_sSoundState.i32Volume = i32Volume; +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/sound.h b/boards/dk-tm4c129x/drivers/sound.h new file mode 100644 index 0000000..9892b67 --- /dev/null +++ b/boards/dk-tm4c129x/drivers/sound.h @@ -0,0 +1,65 @@ +//***************************************************************************** +// +// sound.h - Prototypes for the sound driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVERS_SOUND_H__ +#define __DRIVERS_SOUND_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes for the APIs. +// +//***************************************************************************** +extern void SoundIntHandler(void); +extern void SoundInit(uint32_t ui32SysClock); +extern bool SoundStart(int16_t *pi16Buffer, uint32_t ui32Length, + uint32_t ui32Rate, + void (*pfnCallback)(uint32_t ui32Half)); +extern void SoundPeriodAdjust(int32_t i32RateAdjust); +extern void SoundStop(void); +extern bool SoundBusy(void); +extern void SoundVolumeSet(int32_t i32Volume); +extern void SoundVolumeUp(int32_t i32Volume); +extern void SoundVolumeDown(int32_t i32Volume); + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __DRIVERS_SOUND_H__ diff --git a/boards/dk-tm4c129x/drivers/touch.c b/boards/dk-tm4c129x/drivers/touch.c new file mode 100644 index 0000000..7129f52 --- /dev/null +++ b/boards/dk-tm4c129x/drivers/touch.c @@ -0,0 +1,762 @@ +//***************************************************************************** +// +// touch.c - Touch screen driver for the DK-TM4C129X. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_adc.h" +#include "inc/hw_gpio.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_timer.h" +#include "inc/hw_types.h" +#include "driverlib/adc.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup touch_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// This driver operates in four different screen orientations. They are: +// +// * Portrait - The screen is taller than it is wide, and the flex connector is +// on the left of the display. This is selected by defining +// PORTRAIT. +// +// * Landscape - The screen is wider than it is tall, and the flex connector is +// on the bottom of the display. This is selected by defining +// LANDSCAPE. +// +// * Portrait flip - The screen is taller than it is wide, and the flex +// connector is on the right of the display. This is +// selected by defining PORTRAIT_FLIP. +// +// * Landscape flip - The screen is wider than it is tall, and the flex +// connector is on the top of the display. This is +// selected by defining LANDSCAPE_FLIP. +// +// These can also be imagined in terms of screen rotation; if portrait mode is +// 0 degrees of screen rotation, landscape is 90 degrees of counter-clockwise +// rotation, portrait flip is 180 degrees of rotation, and landscape flip is +// 270 degress of counter-clockwise rotation. +// +// If no screen orientation is selected, landscape mode will be used. +// +//***************************************************************************** +#if ! defined(PORTRAIT) && ! defined(PORTRAIT_FLIP) && \ + ! defined(LANDSCAPE) && ! defined(LANDSCAPE_FLIP) +#define LANDSCAPE_FLIP +#endif + +//***************************************************************************** +// +// The GPIO pins/ADC channels to which the touch screen is connected. +// +//***************************************************************************** +#define TS_XP_BASE GPIO_PORTE_BASE +#define TS_XP_PIN GPIO_PIN_7 +#define TS_XP_ADC ADC_CTL_CH21 +#define TS_XN_BASE GPIO_PORTT_BASE +#define TS_XN_PIN GPIO_PIN_2 +#define TS_YP_BASE GPIO_PORTP_BASE +#define TS_YP_PIN GPIO_PIN_7 +#define TS_YP_ADC ADC_CTL_CH22 +#define TS_YN_BASE GPIO_PORTT_BASE +#define TS_YN_PIN GPIO_PIN_3 + +//***************************************************************************** +// +// Touchscreen calibration parameters. Screen orientation is a build time +// selection. +// +//***************************************************************************** +const int32_t g_pi32TouchParameters[7] = +{ +#ifdef PORTRAIT + 3840, // M0 + 318720, // M1 + -297763200, // M2 + 328576, // M3 + -8896, // M4 + -164591232, // M5 + 3100080, // M6 +#endif +#ifdef LANDSCAPE + 328192, // M0 + -4352, // M1 + -178717056, // M2 + 1488, // M3 + -314592, // M4 + 1012670064, // M5 + 3055164, // M6 +#endif +#ifdef PORTRAIT_FLIP + 1728, // M0 + -321696, // M1 + 1034304336, // M2 + -325440, // M3 + 1600, // M4 + 1161009600, // M5 + 3098070, // M6 +#endif +#ifdef LANDSCAPE_FLIP + -326400, // M0 + -1024, // M1 + 1155718720, // M2 + 3768, // M3 + 312024, // M4 + -299081088, // M5 + 3013754, // M6 +#endif +}; + +//***************************************************************************** +// +// The lowest ADC reading assumed to represent a press on the screen. Readings +// below this indicate no press is taking place. +// +//***************************************************************************** +#define TOUCH_MIN 150 + +//***************************************************************************** +// +// The current state of the touch screen driver's state machine. This is used +// to cycle the touch screen interface through the powering sequence required +// to read the two axes of the surface. +// +//***************************************************************************** +static uint32_t g_ui32TSState; +#define TS_STATE_INIT 0 +#define TS_STATE_SKIP_X 1 +#define TS_STATE_READ_X 2 +#define TS_STATE_SKIP_Y 3 +#define TS_STATE_READ_Y 4 + +//***************************************************************************** +// +// The most recent raw ADC reading for the X position on the screen. This +// value is not affected by the selected screen orientation. +// +//***************************************************************************** +volatile int16_t g_i16TouchX; + +//***************************************************************************** +// +// The most recent raw ADC reading for the Y position on the screen. This +// value is not affected by the selected screen orientation. +// +//***************************************************************************** +volatile int16_t g_i16TouchY; + +//***************************************************************************** +// +// The minimum raw reading that should be considered valid press. +// +//***************************************************************************** +int16_t g_i16TouchMin = TOUCH_MIN; + +//***************************************************************************** +// +// A pointer to the function to receive messages from the touch screen driver +// when events occur on the touch screen (debounced presses, movement while +// pressed, and debounced releases). +// +//***************************************************************************** +static int32_t (*g_pfnTSHandler)(uint32_t ui32Message, int32_t i32X, + int32_t i32Y); + +//***************************************************************************** +// +// The current state of the touch screen debouncer. When zero, the pen is up. +// When three, the pen is down. When one or two, the pen is transitioning from +// one state to the other. +// +//***************************************************************************** +static uint8_t g_ui8State = 0; + +//***************************************************************************** +// +// The queue of debounced pen positions. This is used to slightly delay the +// returned pen positions, so that the pen positions that occur while the pen +// is being raised are not send to the application. +// +//***************************************************************************** +static int16_t g_pi16Samples[8]; + +//***************************************************************************** +// +// The count of pen positions in g_pi16Samples. When negative, the buffer is +// being pre-filled as a result of a detected pen down event. +// +//***************************************************************************** +static int8_t g_i8Index = 0; + +//***************************************************************************** +// +//! Debounces presses of the touch screen. +//! +//! This function is called when a new X/Y sample pair has been captured in +//! order to perform debouncing of the touch screen. +//! +//! \return None. +// +//***************************************************************************** +static void +TouchScreenDebouncer(void) +{ + int32_t i32X, i32Y, i32Temp; + + // + // Convert the ADC readings into pixel values on the screen. + // + i32X = g_i16TouchX; + i32Y = g_i16TouchY; + i32Temp = (((i32X * g_pi32TouchParameters[0]) + + (i32Y * g_pi32TouchParameters[1]) + g_pi32TouchParameters[2]) / + g_pi32TouchParameters[6]); + i32Y = (((i32X * g_pi32TouchParameters[3]) + + (i32Y * g_pi32TouchParameters[4]) + g_pi32TouchParameters[5]) / + g_pi32TouchParameters[6]); + i32X = i32Temp; + + // + // See if the touch screen is being touched. + // + if((g_i16TouchX < g_i16TouchMin) || (g_i16TouchY < g_i16TouchMin)) + { + // + // If there are no valid values yet then ignore this state. + // + if((g_ui8State & 0x80) == 0) + { + g_ui8State = 0; + } + + // + // See if the pen is not up right now. + // + if(g_ui8State != 0x00) + { + // + // Decrement the state count. + // + g_ui8State--; + + // + // See if the pen has been detected as up three times in a row. + // + if(g_ui8State == 0x80) + { + // + // Indicate that the pen is up. + // + g_ui8State = 0x00; + + // + // See if there is a touch screen event handler. + // + if(g_pfnTSHandler) + { + // + // If we got caught pre-filling the values, just return the + // first valid value as a press and release. If this is + // not done there is a perceived miss of a press event. + // + if(g_i8Index < 0) + { + g_pfnTSHandler(WIDGET_MSG_PTR_DOWN, g_pi16Samples[0], + g_pi16Samples[1]); + g_i8Index = 0; + } + + // + // Send the pen up message to the touch screen event + // handler. + // + g_pfnTSHandler(WIDGET_MSG_PTR_UP, g_pi16Samples[g_i8Index], + g_pi16Samples[g_i8Index + 1]); + } + } + } + } + else + { + // + // If the state was counting down above then fall back to the idle + // state and start waiting for new values. + // + if((g_ui8State & 0x80) && (g_ui8State != 0x83)) + { + // + // Restart the release count down. + // + g_ui8State = 0x83; + } + + // + // See if the pen is not down right now. + // + if(g_ui8State != 0x83) + { + // + // Increment the state count. + // + g_ui8State++; + + // + // See if the pen has been detected as down three times in a row. + // + if(g_ui8State == 0x03) + { + // + // Indicate that the pen is down. + // + g_ui8State = 0x83; + + // + // Set the index to -8, so that the next 3 samples are stored + // into the sample buffer before sending anything back to the + // touch screen event handler. + // + g_i8Index = -8; + + // + // Store this sample into the sample buffer. + // + g_pi16Samples[0] = i32X; + g_pi16Samples[1] = i32Y; + } + } + else + { + // + // See if the sample buffer pre-fill has completed. + // + if(g_i8Index == -2) + { + // + // See if there is a touch screen event handler. + // + if(g_pfnTSHandler) + { + // + // Send the pen down message to the touch screen event + // handler. + // + g_pfnTSHandler(WIDGET_MSG_PTR_DOWN, g_pi16Samples[0], + g_pi16Samples[1]); + } + + // + // Store this sample into the sample buffer. + // + g_pi16Samples[0] = i32X; + g_pi16Samples[1] = i32Y; + + // + // Set the index to the next sample to send. + // + g_i8Index = 2; + } + + // + // Otherwise, see if the sample buffer pre-fill is in progress. + // + else if(g_i8Index < 0) + { + // + // Store this sample into the sample buffer. + // + g_pi16Samples[g_i8Index + 10] = i32X; + g_pi16Samples[g_i8Index + 11] = i32Y; + + // + // Increment the index. + // + g_i8Index += 2; + } + + // + // Otherwise, the sample buffer is full. + // + else + { + // + // See if there is a touch screen event handler. + // + if(g_pfnTSHandler) + { + // + // Send the pen move message to the touch screen event + // handler. + // + g_pfnTSHandler(WIDGET_MSG_PTR_MOVE, + g_pi16Samples[g_i8Index], + g_pi16Samples[g_i8Index + 1]); + } + + // + // Store this sample into the sample buffer. + // + g_pi16Samples[g_i8Index] = i32X; + g_pi16Samples[g_i8Index + 1] = i32Y; + + // + // Increment the index. + // + g_i8Index = (g_i8Index + 2) & 7; + } + } + } +} + +//***************************************************************************** +// +//! Handles the ADC interrupt for the touch screen. +//! +//! This function is called when the ADC sequence that samples the touch screen +//! has completed its acquisition. The touch screen state machine is advanced +//! and the acquired ADC sample is processed appropriately. +//! +//! It is the responsibility of the application using the touch screen driver +//! to ensure that this function is installed in the interrupt vector table for +//! the ADC0 samples sequencer 3 interrupt. +//! +//! \return None. +// +//***************************************************************************** +void +TouchScreenIntHandler(void) +{ + // + // Clear the ADC sample sequence interrupt. + // + HWREG(ADC0_BASE + ADC_O_ISC) = ADC_ISC_IN3; + + // + // Determine what to do based on the current state of the state machine. + // + switch(g_ui32TSState) + { + // + // The new sample is an X axis sample that should be discarded. + // + case TS_STATE_SKIP_X: + { + // + // Read and throw away the ADC sample. + // + HWREG(ADC0_BASE + ADC_O_SSFIFO3); + + // + // Set the analog mode select for the YP pin. + // + HWREG(TS_YP_BASE + GPIO_O_AMSEL) |= TS_YP_PIN; + + // + // Configure the Y axis touch layer pins as inputs. + // + HWREG(TS_YP_BASE + GPIO_O_DIR) &= ~TS_YP_PIN; + HWREG(TS_YN_BASE + GPIO_O_DIR) &= ~TS_YN_PIN; + + // + // The next sample will be a valid X axis sample. + // + g_ui32TSState = TS_STATE_READ_X; + + // + // This state has been handled. + // + break; + } + + // + // The new sample is an X axis sample that should be processed. + // + case TS_STATE_READ_X: + { + // + // Read the raw ADC sample. + // + g_i16TouchX = HWREG(ADC0_BASE + ADC_O_SSFIFO3); + + // + // Clear the analog mode select for the YP pin. + // + HWREG(TS_YP_BASE + GPIO_O_AMSEL) &= ~TS_YP_PIN; + + // + // Configure the X and Y axis touch layers as outputs. + // + HWREG(TS_XP_BASE + GPIO_O_DIR) |= TS_XP_PIN; + HWREG(TS_XN_BASE + GPIO_O_DIR) |= TS_XN_PIN; + HWREG(TS_YP_BASE + GPIO_O_DIR) |= TS_YP_PIN; + HWREG(TS_YN_BASE + GPIO_O_DIR) |= TS_YN_PIN; + + // + // Drive the positive side of the Y axis touch layer with VDD and + // the negative side with GND. Also, drive both sides of the X + // axis layer with GND to discharge any residual voltage (so that + // a no-touch condition can be properly detected). + // + HWREG(TS_XP_BASE + GPIO_O_DATA + (TS_XP_PIN << 2)) = 0; + HWREG(TS_XN_BASE + GPIO_O_DATA + (TS_XN_PIN << 2)) = 0; + HWREG(TS_YP_BASE + GPIO_O_DATA + (TS_YP_PIN << 2)) = TS_YP_PIN; + HWREG(TS_YN_BASE + GPIO_O_DATA + (TS_YN_PIN << 2)) = 0; + + // + // Configure the sample sequence to capture the X axis value. + // + HWREG(ADC0_BASE + ADC_O_SSMUX3) = TS_XP_ADC; + + // + // The next sample will be an invalid Y axis sample. + // + g_ui32TSState = TS_STATE_SKIP_Y; + + // + // This state has been handled. + // + break; + } + + // + // The new sample is a Y axis sample that should be discarded. + // + case TS_STATE_SKIP_Y: + { + // + // Read and throw away the ADC sample. + // + HWREG(ADC0_BASE + ADC_O_SSFIFO3); + + // + // Set the analog mode select for the XP pin. + // + HWREG(TS_XP_BASE + GPIO_O_AMSEL) |= TS_XP_PIN; + + // + // Configure the X axis touch layer pins as inputs. + // + HWREG(TS_XP_BASE + GPIO_O_DIR) &= ~TS_XP_PIN; + HWREG(TS_XN_BASE + GPIO_O_DIR) &= ~TS_XN_PIN; + + // + // The next sample will be a valid Y axis sample. + // + g_ui32TSState = TS_STATE_READ_Y; + + // + // This state has been handled. + // + break; + } + + // + // The new sample is a Y axis sample that should be processed. + // + case TS_STATE_READ_Y: + { + // + // Read the raw ADC sample. + // + g_i16TouchY = HWREG(ADC0_BASE + ADC_O_SSFIFO3); + + // + // The next configuration is the same as the initial configuration. + // Therefore, fall through into the initialization state to avoid + // duplicating the code. + // + } + + // + // The state machine is in its initial state + // + case TS_STATE_INIT: + { + // + // Clear the analog mode select for the XP pin. + // + HWREG(TS_XP_BASE + GPIO_O_AMSEL) &= ~TS_XP_PIN; + + // + // Configure the X and Y axis touch layers as outputs. + // + HWREG(TS_XP_BASE + GPIO_O_DIR) |= TS_XP_PIN; + HWREG(TS_XN_BASE + GPIO_O_DIR) |= TS_XN_PIN; + HWREG(TS_YP_BASE + GPIO_O_DIR) |= TS_YP_PIN; + HWREG(TS_YN_BASE + GPIO_O_DIR) |= TS_YN_PIN; + + // + // Drive one side of the X axis touch layer with VDD and the other + // with GND. Also, drive both sides of the Y axis layer with GND + // to discharge any residual voltage (so that a no-touch condition + // can be properly detected). + // + HWREG(TS_XP_BASE + GPIO_O_DATA + (TS_XP_PIN << 2)) = TS_XP_PIN; + HWREG(TS_XN_BASE + GPIO_O_DATA + (TS_XN_PIN << 2)) = 0; + HWREG(TS_YP_BASE + GPIO_O_DATA + (TS_YP_PIN << 2)) = 0; + HWREG(TS_YN_BASE + GPIO_O_DATA + (TS_YN_PIN << 2)) = 0; + + // + // Configure the sample sequence to capture the Y axis value. + // + HWREG(ADC0_BASE + ADC_O_SSMUX3) = TS_YP_ADC; + + // + // If this is the valid Y sample state, then there is a new X/Y + // sample pair. In that case, run the touch screen debouncer. + // + if(g_ui32TSState == TS_STATE_READ_Y) + { + TouchScreenDebouncer(); + } + + // + // The next sample will be an invalid X axis sample. + // + g_ui32TSState = TS_STATE_SKIP_X; + + // + // This state has been handled. + // + break; + } + } +} + +//***************************************************************************** +// +//! Initializes the touch screen driver. +//! +//! \param ui32SysClock is the frequency of the system clock. +//! +//! This function initializes the touch screen driver, beginning the process of +//! reading from the touch screen. This driver uses the following hardware +//! resources: +//! +//! - ADC 0 sample sequence 3 +//! - Timer 5 subtimer B +//! +//! \return None. +// +//***************************************************************************** +void +TouchScreenInit(uint32_t ui32SysClock) +{ + // + // Set the initial state of the touch screen driver's state machine. + // + g_ui32TSState = TS_STATE_INIT; + + // + // There is no touch screen handler initially. + // + g_pfnTSHandler = 0; + + // + // Enable the peripherals used by the touch screen interface. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER5); + + // + // Configure the ADC sample sequence used to read the touch screen reading. + // + ROM_ADCHardwareOversampleConfigure(ADC0_BASE, 4); + ROM_ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_TIMER, 0); + ROM_ADCSequenceStepConfigure(ADC0_BASE, 3, 0, + TS_YP_ADC | ADC_CTL_END | ADC_CTL_IE); + ROM_ADCSequenceEnable(ADC0_BASE, 3); + + // + // Enable the ADC sample sequence interrupt. + // + ROM_ADCIntEnable(ADC0_BASE, 3); + ROM_IntEnable(INT_ADC0SS3); + + // + // Configure the timer to trigger the sampling of the touch screen + // every 2.5 milliseconds. + // + if((HWREG(TIMER5_BASE + TIMER_O_CTL) & TIMER_CTL_TAEN) == 0) + { + ROM_TimerConfigure(TIMER5_BASE, (TIMER_CFG_SPLIT_PAIR | + TIMER_CFG_A_PWM | + TIMER_CFG_B_PERIODIC)); + } + ROM_TimerPrescaleSet(TIMER5_BASE, TIMER_B, 255); + ROM_TimerLoadSet(TIMER5_BASE, TIMER_B, ((ui32SysClock / 256) / 400) - 1); + TimerControlTrigger(TIMER5_BASE, TIMER_B, true); + + // + // Enable the timer. At this point, the touch screen state machine will + // sample and run every 2.5 ms. + // + ROM_TimerEnable(TIMER5_BASE, TIMER_B); +} + +//***************************************************************************** +// +//! Sets the callback function for touch screen events. +//! +//! \param pfnCallback is a pointer to the function to be called when touch +//! screen events occur. +//! +//! This function sets the address of the function to be called when touch +//! screen events occur. The events that are recognized are the screen being +//! touched (``pen down''), the touch position moving while the screen is +//! touched (``pen move''), and the screen no longer being touched (``pen +//! up''). +//! +//! \return None. +// +//***************************************************************************** +void +TouchScreenCallbackSet(int32_t (*pfnCallback)(uint32_t ui32Message, + int32_t i32X, int32_t i32Y)) +{ + // + // Save the pointer to the callback function. + // + g_pfnTSHandler = pfnCallback; +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/drivers/touch.h b/boards/dk-tm4c129x/drivers/touch.h new file mode 100644 index 0000000..5459bdc --- /dev/null +++ b/boards/dk-tm4c129x/drivers/touch.h @@ -0,0 +1,61 @@ +//***************************************************************************** +// +// touch.h - Prototypes for the touch screen driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVERS_TOUCH_H__ +#define __DRIVERS_TOUCH_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern volatile int16_t g_i16TouchX; +extern volatile int16_t g_i16TouchY; +extern int16_t g_i16TouchMin; +extern void TouchScreenIntHandler(void); +extern void TouchScreenInit(uint32_t ui32SysClock); +extern void TouchScreenCallbackSet(int32_t (*pfnCallback)(uint32_t ui32Message, + int32_t i32X, + int32_t i32Y)); +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __DRIVERS_TOUCH_H__ diff --git a/boards/dk-tm4c129x/drivers/usb_sound.c b/boards/dk-tm4c129x/drivers/usb_sound.c new file mode 100644 index 0000000..3a858bf --- /dev/null +++ b/boards/dk-tm4c129x/drivers/usb_sound.c @@ -0,0 +1,769 @@ +//***************************************************************************** +// +// usb_sound.c - USB host audio handling functions. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "inc/hw_memmap.h" +#include "drivers/usb_sound.h" +#include "driverlib/gpio.h" +#include "driverlib/sysctl.h" +#include "driverlib/udma.h" +#include "driverlib/usb.h" +#include "usblib/usblib.h" +#include "usblib/usbmsc.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhaudio.h" + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 768 + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pHCDPool[HCD_MEMORY_SIZE]; + +//***************************************************************************** +// +// The instance data for the USB host audio driver. +// +//***************************************************************************** +tUSBHostAudioInstance *g_psAudioInstance; + +//***************************************************************************** +// +// Declare the USB Events driver interface. +// +//***************************************************************************** +DECLARE_EVENT_DRIVER(g_sUSBEventDriver, 0, 0, USBHCDEvents); + +//***************************************************************************** +// +// This structure holds the state information for the USB audio device. +// +//***************************************************************************** +static struct +{ + // + // Save the application provided callback function. + // + tUSBBufferCallback pfnCallbackOut; + + // + // Save the application provided callback function. + // + tUSBBufferCallback pfnCallbackIn; + + // + // The event callback for the application. + // + tEventCallback pfnCallbackEvent; + + // + // Volume control multipliers calculated from the information received + // from the audio device. + // + uint32_t pui32Steps[3]; + + // + // The currently pending audio device events. + // + uint32_t ui32EventFlags; + + // + // The current state for the audio device. + // + volatile enum + { + // + // No device is present. + // + eStateNoDevice, + + // + // Audio device is ready. + // + eStateDeviceReady, + + // + // An unsupported device has been attached. + // + eStateUnknownDevice, + + // + // A power fault has occurred. + // + eStatePowerFault + } + iState; + +} g_sAudioState; + +//***************************************************************************** +// +// These defines are used with the ui32EventFlags in the g_sAudioState +// structure. +// +//***************************************************************************** +#define EVENT_OPEN 0x00000001 +#define EVENT_CLOSE 0x00000002 + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the host audio class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHostAudioClassDriver, + &g_sUSBEventDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +static const uint32_t g_ui32NumHostClassDrivers = + sizeof(g_ppHostClassDrivers) / sizeof(tUSBHostClassDriver *); + +//***************************************************************************** +// +// This function was the callback function registered with the USB host audio +// class driver. The only two events that are handled at this point are the +// USBH_AUDIO_EVENT_OPEN and USBH_AUDIO_EVENT_CLOSE which indicate that a new +// audio device has been found or that an existing audio device has been +// disconnected. +// +//***************************************************************************** +static void +AudioCallback(tUSBHostAudioInstance *psAudioInstance, uint32_t ui32Event, + uint32_t ui32MsgParam, void *pvBuffer) +{ + switch(ui32Event) + { + // + // New USB audio device has been enabled. + // + case USBH_AUDIO_EVENT_OPEN: + { + // + // Set the EVENT_OPEN flag and let the main routine handle it. + // + HWREGBITW(&g_sAudioState.ui32EventFlags, EVENT_OPEN) = 1; + + break; + } + + // + // USB audio device has been removed. + // + case USBH_AUDIO_EVENT_CLOSE: + { + // + // Set the EVENT_CLOSE flag and let the main routine handle it. + // + HWREGBITW(&g_sAudioState.ui32EventFlags, EVENT_CLOSE) = 1; + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// Initializes the sound output. +// +// \param ui32Flags is unused as this point but is included for future +// functionality. +// \param pfnCallback is the event callback function for audio devices. +// +// This function prepares the sound driver to enumerate an audio device and +// prepares to play audio once a valid audio device is detected. The +// \e pfnCallback function can be used to receive callbacks when there are +// changes related to the audio device. The ui32Event parameter to the +// callback is one of the SOUND_EVENT_* values. +// +// \return None +// +//***************************************************************************** +void +USBSoundInit(uint32_t ui32Flags, tEventCallback pfnCallback) +{ + // + // Initialize the USB stack mode to force host mode. + // + USBStackModeSet(0, eUSBModeForceHost, 0); + + // + // Register the host class drivers. + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, g_ui32NumHostClassDrivers); + + // + // Open an instance of the audio class driver. + // + g_psAudioInstance = USBHostAudioOpen(0, AudioCallback); + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Initialize the USB controller for host mode operation. + // + USBHCDInit(0, g_pHCDPool, HCD_MEMORY_SIZE); + + // + // Save the event callback function. + // + g_sAudioState.pfnCallbackEvent = pfnCallback; +} + +//***************************************************************************** +// +// Sets the volume of the audio device. +// +// \param ui32Percent is the volume percentage, which must be between 0% +// (silence) and 100% (full volume), inclusive. +// +// This function sets the volume of the sound output to a value between +// silence (0%) and full volume (100%). +// +// \return None. +// +//***************************************************************************** +void +USBSoundVolumeSet(uint32_t ui32Percent) +{ + uint32_t ui32Value; + + // + // Ignore volume changes if there is no device present. + // + if(g_sAudioState.iState == eStateDeviceReady) + { + // + // Scale the voltage percentage to the decibel range provided by the + // USB audio device. + // + ui32Value = (g_sAudioState.pui32Steps[1] * ui32Percent) / 100; + USBHostAudioVolumeSet(g_psAudioInstance, 0, 1, ui32Value); + + ui32Value = (g_sAudioState.pui32Steps[2] * ui32Percent) / 100; + USBHostAudioVolumeSet(g_psAudioInstance, 0, 2, ui32Value); + } +} + +//***************************************************************************** +// +// Returns the current volume level. +// +// \param ui32Channel is the 0 based channel number to query. +// +// This function returns the current volume, specified as a percentage between +// 0% (silence) and 100% (full volume), inclusive. The \e ui32Channel value +// starts with 0 which is the master audio volume control interface. The +// remaining \e ui32Channel values provide access to various other audio +// channels, with 1 and 2 being left and right audio channels. +// +// \return Returns the current volume. +// +//***************************************************************************** +uint32_t +USBSoundVolumeGet(uint32_t ui32Channel) +{ + uint32_t ui32Volume; + + // + // Initialize the return value in case there is no USB device present. + // + ui32Volume = 0xffffffff; + + // + // Ignore volume request if there is no device present. + // + if(g_sAudioState.iState == eStateDeviceReady) + { + ui32Volume = USBHostAudioVolumeGet(g_psAudioInstance, 0, ui32Channel); + } + + return(ui32Volume); +} + +//***************************************************************************** +// +// This sets the current output audio format of the USB audio device. +// +// \param ui32SampleRate is the sample rate. +// \param ui32BitsPerSample is the number of bits per sample. +// \param ui32Channels is the number of channels. +// +// This sets the current audio format for the USB device that is currently +// connected. If there is no USB device connected or the format is not +// supported then the function returns a non-zero value. The function +// returns zero if the USB audio device was successfully configured to the +// requested audio format. +// +// \return Returns zero if the format was successfully set or returns an +// non-zero value if the format was not able to be set. +// +//***************************************************************************** +uint32_t +USBSoundOutputFormatSet(uint32_t ui32SampleRate, + uint32_t ui32BitsPerSample, uint32_t ui32Channels) +{ + // + // Just return if there is no device at this time. + // + if(g_sAudioState.iState != eStateDeviceReady) + { + return(1); + } + + // + // Call the USB Host Audio function to set the format. + // + return(USBHostAudioFormatSet(g_psAudioInstance, ui32SampleRate, + ui32BitsPerSample, ui32Channels, + USBH_AUDIO_FORMAT_OUT)); +} + +//***************************************************************************** +// +// This sets the current input audio format of the USB audio device +// +// \param ui32SampleRate is the sample rate. +// \param ui32BitsPerSample is the number of bits per sample. +// \param ui32Channels is the number of channels. +// +// This sets the current format for the USB device that is currently connect. +// If there is no USB device connected or the format is not supported then the +// function returns 0. The function returns 1 if the USB audio device +// was successfully configured to the requested format. +// +// \return Returns 1 if the format was successfully set or returns 0 if the +// format was not changed. +// +//***************************************************************************** +uint32_t +USBSoundInputFormatSet(uint32_t ui32SampleRate, + uint32_t ui32BitsPerSample, uint32_t ui32Channels) +{ + // + // Just return if there is no device at this time. + // + if(g_sAudioState.iState != eStateDeviceReady) + { + return(0); + } + + return(USBHostAudioFormatSet(g_psAudioInstance, ui32SampleRate, + ui32BitsPerSample, ui32Channels, + USBH_AUDIO_FORMAT_IN)); +} + +//***************************************************************************** +// +// Returns the current sample rate. +// +// This function returns the sample rate that was set by a call to +// USBSoundSetFormat(). This is needed to retrieve the exact sample rate that is +// in use in case the requested rate could not be matched exactly. +// +// \return The current sample rate in samples/second. +// +//***************************************************************************** +uint32_t +USBSoundOutputFormatGet(uint32_t ui32SampleRate, uint32_t ui32Bits, + uint32_t ui32Channels) +{ + // + // Just return if there is no device at this time. + // + if(g_sAudioState.iState != eStateDeviceReady) + { + return(0); + } + + return(USBHostAudioFormatGet(g_psAudioInstance, ui32SampleRate, ui32Bits, + ui32Channels, USBH_AUDIO_FORMAT_OUT)); +} + +//***************************************************************************** +// +// Returns the current sample rate. +// +// This function returns the sample rate that was set by a call to +// USBSoundSetFormat(). This is needed to retrieve the exact sample rate that is +// in use in case the requested rate could not be matched exactly. +// +// \return The current sample rate in samples/second. +// +//***************************************************************************** +uint32_t +USBSoundInputFormatGet(uint32_t ui32SampleRate, uint32_t ui32Bits, + uint32_t ui32Channels) +{ + // + // Just return if there is no device at this time. + // + if(g_sAudioState.iState != eStateDeviceReady) + { + return(0); + } + + return(USBHostAudioFormatGet(g_psAudioInstance, ui32SampleRate, ui32Bits, + ui32Channels, USBH_AUDIO_FORMAT_IN)); +} + +//***************************************************************************** +// +// This is the generic callback from host stack. +// +// \param pvData is actually a pointer to a tEventInfo structure. +// +// This function is called to inform the application when a USB event has +// occurred that is outside those related to the audio device. At this +// point this is used to detect unsupported devices being inserted and removed. +// It is also used to inform the application when a power fault has occurred. +// This function is required when the g_USBGenerii8EventDriver is included in +// the host controller driver array that is passed in to the +// USBHCDRegisterDrivers() function. +// +// \return None. +// +//***************************************************************************** +void +USBHCDEvents(void *pvData) +{ + tEventInfo *psEventInfo; + + // + // Cast this pointer to its actual type. + // + psEventInfo = (tEventInfo *)pvData; + + switch(psEventInfo->ui32Event) + { + // + // Unknown device detected. + // + case USB_EVENT_UNKNOWN_CONNECTED: + { + // + // An unknown device was detected. + // + g_sAudioState.iState = eStateUnknownDevice; + + // + // Call the general event handler if present. + // + if(g_sAudioState.pfnCallbackEvent) + { + g_sAudioState.pfnCallbackEvent(SOUND_EVENT_UNKNOWN_DEV, 1); + } + + break; + } + + // + // Device unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Handle the case where an unknown device is disconnected. + // + if(g_sAudioState.iState == eStateUnknownDevice) + { + g_sAudioState.iState = eStateNoDevice; + + // + // Call the general event handler if present. + // + if(g_sAudioState.pfnCallbackEvent) + { + g_sAudioState.pfnCallbackEvent(SOUND_EVENT_UNKNOWN_DEV, 0); + } + } + else + { + // + // Call the general event handler if present. + // + if(g_sAudioState.pfnCallbackEvent) + { + g_sAudioState.pfnCallbackEvent(SOUND_EVENT_DISCONNECT, 0); + } + } + + break; + } + + // + // A power fault has occurred. + // + case USB_EVENT_POWER_FAULT: + { + // + // No power means no device is present. + // + g_sAudioState.iState = eStatePowerFault; + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This function passes along a buffer callback from the USB host audio driver +// so that the application can process or release the buffers. +// +//***************************************************************************** +void +USBHostAudioCallback(tUSBHostAudioInstance *psAudioInstance, + uint32_t ui32Event, uint32_t ui32Param, void *pvBuffer) +{ + // + // Only call the callback if it is actually present. + // + if(g_sAudioState.pfnCallbackOut) + { + g_sAudioState.pfnCallbackOut(pvBuffer, ui32Event, ui32Param); + } + + // + // Only call the callback if it is actually present. + // + if(g_sAudioState.pfnCallbackIn) + { + g_sAudioState.pfnCallbackIn(pvBuffer, ui32Event, ui32Param); + } +} + +//***************************************************************************** +// +// Starts output of a block of PCM audio samples. +// +// \param pvBuffer is a pointer to the audio data to play. +// \param ui32Size is the length of the data in bytes. +// \param pfnCallback is a function to call when this buffer has be played. +// +// This function starts the output of a block of PCM audio samples. +// +// \return This function returns a non-zero value if the buffer was accepted, +// and returns zero if the buffer was not accepted. +// +//***************************************************************************** +uint32_t +USBSoundBufferOut(const void *pvBuffer, uint32_t ui32Size, + tUSBBufferCallback pfnCallback) +{ + // + // If there is no device present or there is a pending buffer then just + // return with a failure. + // + if(g_sAudioState.iState != eStateDeviceReady) + { + return(0); + } + + // + // Save this buffer callback. + // + g_sAudioState.pfnCallbackOut = pfnCallback; + + // + // Pass the buffer aint32_t to the USB host audio driver for playback. + // + return(USBHostAudioPlay(g_psAudioInstance, (void *)pvBuffer, ui32Size, + USBHostAudioCallback)); +} + +//***************************************************************************** +// +// Requests a new block of PCM audio samples from a USB audio device. +// +// \param pvBuffer is a pointer to a location to store the audio data. +// \param ui32Size is the size of the pvData buffer in bytes. +// \param pfnCallback is a function to call when this buffer has new data. +// +// This function request a new block of PCM audio samples from a USB audio +// device. +// +// \return This function returns a non-zero value if the buffer was accepted, +// and returns zero if the buffer was not accepted. +// +//***************************************************************************** +uint32_t +USBSoundBufferIn(const void *pvBuffer, uint32_t ui32Size, + tUSBBufferCallback pfnCallback) +{ + // + // If there is no device present or there is a pending buffer then just + // return with a failure. + // + if(g_sAudioState.iState != eStateDeviceReady) + { + return(0); + } + + // + // Save this buffer callback. + // + g_sAudioState.pfnCallbackIn = pfnCallback; + + // + // Pass the buffer aint32_t to the USB host audio driver for input. + // + return(USBHostAudioRecord(g_psAudioInstance, (void *)pvBuffer, ui32Size, + USBHostAudioCallback)); +} + +//***************************************************************************** +// +// This function reads the audio volume settings for the USB audio device and +// saves them so that the volume can be scaled correctly. +// +//***************************************************************************** +static void +GetVolumeParameters(void) +{ + uint32_t ui32Max, ui32Min, ui32Res, ui32Channel; + + for(ui32Channel = 0; ui32Channel < 3; ui32Channel++) + { + ui32Max = USBHostAudioVolumeMaxGet(g_psAudioInstance, 0, ui32Channel); + ui32Min = USBHostAudioVolumeMinGet(g_psAudioInstance, 0, ui32Channel); + ui32Res = USBHostAudioVolumeResGet(g_psAudioInstance, 0, ui32Channel); + + g_sAudioState.pui32Steps[ui32Channel] = (ui32Max - ui32Min) / ui32Res; + } +} + +//***************************************************************************** +// +// The main routine for handling USB audio, this should be called periodically +// by the main program and pass in the amount of time in milliseconds that has +// elapsed since the last call. +// +//***************************************************************************** +void +USBSoundMain(void) +{ + // + // Tell the OTG library code how much time has passed in + // milliseconds since the last call. + // + USBHCDMain(); + + switch(g_sAudioState.iState) + { + // + // This is the running state where buttons are checked and the + // screen is updated. + // + case eStateDeviceReady: + { if(HWREGBITW(&g_sAudioState.ui32EventFlags, EVENT_CLOSE)) + { + HWREGBITW(&g_sAudioState.ui32EventFlags, EVENT_CLOSE) = 0; + g_sAudioState.iState = eStateNoDevice; + + // + // Call the general event handler if present. + // + if(g_sAudioState.pfnCallbackEvent) + { + g_sAudioState.pfnCallbackEvent(SOUND_EVENT_DISCONNECT, 0); + } + } + break; + } + + // + // If there is no device then just wait for one. + // + case eStateNoDevice: + { + if(HWREGBITW(&g_sAudioState.ui32EventFlags, EVENT_OPEN)) + { + g_sAudioState.iState = eStateDeviceReady; + + HWREGBITW(&g_sAudioState.ui32EventFlags, EVENT_OPEN) = 0; + + GetVolumeParameters(); + + // + // Call the general event handler if present. + // + if(g_sAudioState.pfnCallbackEvent) + { + g_sAudioState.pfnCallbackEvent(SOUND_EVENT_READY, 0); + } + } + break; + } + + // + // An unknown device was connected. + // + case eStateUnknownDevice: + { + break; + } + + // + // Something has caused a power fault. + // + case eStatePowerFault: + { + break; + } + + default: + { + break; + } + } +} diff --git a/boards/dk-tm4c129x/drivers/usb_sound.h b/boards/dk-tm4c129x/drivers/usb_sound.h new file mode 100644 index 0000000..0105f91 --- /dev/null +++ b/boards/dk-tm4c129x/drivers/usb_sound.h @@ -0,0 +1,81 @@ +//***************************************************************************** +// +// usb_sound.h - USB host audio handling header definitions. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USB_SOUND_H__ +#define __USB_SOUND_H__ + +//***************************************************************************** +// +// The following are defines for the ui32Event value that is returned with the +// tEventCallback function provided to the USBSoundInit() function. +// +//***************************************************************************** + +// +// A USB audio device has been connected. +// +#define SOUND_EVENT_READY 0x00000001 + +// +// A USB device has been disconnected. +// +#define SOUND_EVENT_DISCONNECT 0x00000002 + +// +// An unknown device has been connected. +// +#define SOUND_EVENT_UNKNOWN_DEV 0x00000003 + +//***************************************************************************** +// +// Function prototypes. +// +//***************************************************************************** +typedef void (* tUSBBufferCallback)(void *pvBuffer, uint32_t ui32Event, + uint32_t ui32Value); +typedef void (* tEventCallback)(uint32_t ui32Event, uint32_t ui32Param); +extern void USBSoundMain(void); +extern void USBSoundInit(uint32_t ui32EnableReceive, + tEventCallback pfnCallback); +extern void USBSoundVolumeSet(uint32_t ui32Percent); +extern uint32_t USBSoundVolumeGet(uint32_t ui32Channel); +extern uint32_t USBSoundOutputFormatGet(uint32_t ui32SampleRate, + uint32_t ui32Bits, + uint32_t ui32Channels); +extern uint32_t USBSoundOutputFormatSet(uint32_t ui32SampleRate, + uint32_t ui32Bits, + uint32_t ui32Channels); +extern uint32_t USBSoundInputFormatGet(uint32_t ui32SampleRate, + uint32_t ui32BitsPerSample, + uint32_t ui32Channels); +extern uint32_t USBSoundInputFormatSet(uint32_t ui32SampleRate, + uint32_t ui32Bits, + uint32_t ui32Channels); +extern uint32_t USBSoundBufferOut(const void *pvData, uint32_t ui32Length, + tUSBBufferCallback pfnCallback); + +extern uint32_t USBSoundBufferIn(const void *pvData, uint32_t ui32Length, + tUSBBufferCallback pfnCallback); + +#endif diff --git a/boards/dk-tm4c129x/enet_io/Makefile b/boards/dk-tm4c129x/enet_io/Makefile new file mode 100644 index 0000000..f62a86b --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/Makefile @@ -0,0 +1,105 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Sample Ethernet I/O Control Application using lwIP 1.4.1. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../../../../third_party/lwip-1.4.1/apps +VPATH+=../drivers +VPATH+=../../../../third_party/lwip-1.4.1/apps/httpserver_raw +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/lwip-1.4.1/apps +IPATH+=../../../../third_party/lwip-1.4.1/ports/tiva-tm4c129/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include/ipv4 +IPATH+=../../../../third_party + +# +# The default rule, which causes the Sample Ethernet I/O Control Application using lwIP 1.4.1 to be built. +# +all: ${COMPILER} +all: ${COMPILER}/enet_io.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Sample Ethernet I/O Control Application using lwIP 1.4.1. +# +${COMPILER}/enet_io.axf: ${COMPILER}/cgifuncs.o +${COMPILER}/enet_io.axf: ${COMPILER}/enet_io.o +${COMPILER}/enet_io.axf: ${COMPILER}/frame.o +${COMPILER}/enet_io.axf: ${COMPILER}/httpd.o +${COMPILER}/enet_io.axf: ${COMPILER}/io.o +${COMPILER}/enet_io.axf: ${COMPILER}/io_fs.o +${COMPILER}/enet_io.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/enet_io.axf: ${COMPILER}/locator.o +${COMPILER}/enet_io.axf: ${COMPILER}/lwiplib.o +${COMPILER}/enet_io.axf: ${COMPILER}/pinout.o +${COMPILER}/enet_io.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/enet_io.axf: ${COMPILER}/ustdlib.o +${COMPILER}/enet_io.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/enet_io.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/enet_io.axf: enet_io.ld +SCATTERgcc_enet_io=enet_io.ld +ENTRY_enet_io=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/enet_io/ccs/.ccsimportspec b/boards/dk-tm4c129x/enet_io/ccs/.ccsimportspec new file mode 100644 index 0000000..174931f --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/.ccsimportspec @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_io/ccs/.ccsproject b/boards/dk-tm4c129x/enet_io/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_io/ccs/.cproject b/boards/dk-tm4c129x/enet_io/ccs/.cproject new file mode 100644 index 0000000..7ba7c4f --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/.cproject @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_io/ccs/.project b/boards/dk-tm4c129x/enet_io/ccs/.project new file mode 100644 index 0000000..d8cbb29 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/.project @@ -0,0 +1,100 @@ + + + enet_io + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + cgifuncs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_io/cgifuncs.c + + + enet_io.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_io/enet_io.c + + + enet_io_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_io/enet_io_ccs.cmd + + + io.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_io/io.c + + + io_fs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_io/io_fs.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_io/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/locator.c + 1 + SW_ROOT/utils/locator.c + + + utils/lwiplib.c + 1 + SW_ROOT/utils/lwiplib.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/lwip-1.4.1/apps/httpserver_raw/httpd.c + 1 + SW_ROOT/third_party/lwip-1.4.1/apps/httpserver_raw/httpd.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/enet_io/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/enet_io/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.bin b/boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.bin new file mode 100644 index 0000000..0f8db9c Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.bin differ diff --git a/boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.out b/boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.out new file mode 100644 index 0000000..b3d7b2b Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/ccs/Debug/enet_io.out differ diff --git a/boards/dk-tm4c129x/enet_io/ccs/macros.ini_initial b/boards/dk-tm4c129x/enet_io/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/enet_io/ccs/target_config.ccxml b/boards/dk-tm4c129x/enet_io/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_io/cgifuncs.c b/boards/dk-tm4c129x/enet_io/cgifuncs.c new file mode 100644 index 0000000..db6a699 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/cgifuncs.c @@ -0,0 +1,551 @@ +//***************************************************************************** +// +// cgifuncs.c - Helper functions related to CGI script parameter parsing. +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include "inc/hw_types.h" +#include "utils/ustdlib.h" +#include "cgifuncs.h" + +//***************************************************************************** +// +// Searches the list of parameters passed to a CGI handler and returns the +// index of a given parameter within that list. +// +// \param pcToFind is a pointer to a string containing the name of the +// parameter that is to be found. +// \param pcParam is an array of character pointers, each containing the name +// of a single parameter as encoded in the URI requesting the CGI. +// \param iNumParams is the number of elements in the pcParam array. +// +// This function searches an array of parameters to find the string passed in +// \e pcToFind. If the string is found, the index of that string within the +// \e pcParam array is returned, otherwise -1 is returned. +// +// \return Returns the index of string \e pcToFind within array \e pcParam +// or -1 if the string does not exist in the array. +// +//***************************************************************************** +int32_t +FindCGIParameter(const char *pcToFind, char *pcParam[], int32_t iNumParams) +{ + int32_t iLoop; + + // + // Scan through all the parameters in the array. + // + for(iLoop = 0; iLoop < iNumParams; iLoop++) + { + // + // Does the parameter name match the provided string? + // + if(strcmp(pcToFind, pcParam[iLoop]) == 0) + { + // + // We found a match - return the index. + // + return(iLoop); + } + } + + // + // If we drop out, the parameter was not found. + // + return(-1); +} + +//***************************************************************************** +// +// Determines whether a given character is a valid hexadecimal digit. +// +// \param cDigit is the ASCII character code to be checked for validity. +// +// This function checks the passed character to determime whether or not it is +// a valid hexadecimal digit. +// +// \return Returns \e true if the passed character is a valid hex digit or \e +// false otherwise +// +//***************************************************************************** +bool +IsValidHexDigit(const char cDigit) +{ + if(((cDigit >= '0') && (cDigit <= '9')) || + ((cDigit >= 'a') && (cDigit <= 'f')) || + ((cDigit >= 'A') && (cDigit <= 'F'))) + { + return(true); + } + else + { + return(false); + } +} + +//***************************************************************************** +// +// Converts an ASCII character to a hex digit value. +// +// \param cDigit is the ASCII character code to convert to a number. +// +// This function converts a passed ASCII character to a number assuming that +// the character is a valid hexadecimal digit. If the character is not a valid +// hex digit, the value 0xFF is returned. +// +// \return Returns the number represented by hex digit \e cDigit or 0xFF if +// the character passed is not valid hex. +// +//***************************************************************************** +unsigned char +HexDigit(const char cDigit) +{ + if((cDigit >= '0') && (cDigit <= '9')) + { + return(cDigit - '0'); + } + else + { + if((cDigit >= 'a') && (cDigit <= 'f')) + { + return((cDigit - 'a') + 10); + } + else + { + if((cDigit >= 'A') && (cDigit <= 'F')) + { + return((cDigit - 'A') + 10); + } + } + } + + // + // If we get here, we were passed an invalid hex digit so return 0xFF. + // + return(0xFF); +} + +//***************************************************************************** +// +// Decodes a single %xx escape sequence as an ASCII character. +// +// \param pcEncoded points to the ``%'' character at the start of a three +// character escape sequence which represents a single ASCII character. +// \param pcDecoded points to a byte which will be written with the decoded +// character assuming the escape sequence is valid. +// +// This function decodes a single escape sequence of the form ``%xy'' where +// x and y represent hexadecimal digits. If each digit is a valid hex digit, +// the function writes the decoded character to the pcDecoded buffer and +// returns true, else it returns false. +// +// \return Returns \b true on success or \b false if pcEncoded does not point +// to a valid escape sequence. +// +//***************************************************************************** +bool +DecodeHexEscape(const char *pcEncoded, char *pcDecoded) +{ + if((pcEncoded[0] != '%') || !IsValidHexDigit(pcEncoded[1]) || + !IsValidHexDigit(pcEncoded[2])) + { + return(false); + } + else + { + *pcDecoded = ((HexDigit(pcEncoded[1]) * 16) + + HexDigit(pcEncoded[2])); + return(true); + } +} + +//***************************************************************************** +// +// Encodes a string for use within an HTML tag, escaping non alphanumeric +// characters. +// +// \param pcDecoded is a pointer to a null terminated ASCII string. +// \param pcEncoded is a pointer to a storage for the encoded string. +// \param ui32Len is the number of bytes of storage pointed to by pcEncoded. +// +// This function encodes a string, adding escapes in place of any special, +// non-alphanumeric characters. If the encoded string is too long for the +// provided output buffer, the output will be truncated. +// +// \return Returns the number of characters written to the output buffer +// not including the terminating NULL. +// +//***************************************************************************** +uint32_t +EncodeFormString(const char *pcDecoded, char *pcEncoded, + uint32_t ui32Len) +{ + uint32_t ui32Loop; + uint32_t ui32Count; + + // + // Make sure we were not passed a tiny buffer. + // + if(ui32Len <= 1) + { + return(0); + } + + // + // Initialize our output character counter. + // + ui32Count = 0; + + // + // Step through each character of the input until we run out of data or + // space to put our output in. + // + for(ui32Loop = 0; pcDecoded[ui32Loop] && (ui32Count < (ui32Len - 1)); ui32Loop++) + { + switch(pcDecoded[ui32Loop]) + { + // + // Pass most characters without modification. + // + default: + { + pcEncoded[ui32Count++] = pcDecoded[ui32Loop]; + break; + } + + case '\'': + { + ui32Count += usnprintf(&pcEncoded[ui32Count], (ui32Len - ui32Count), + "'"); + break; + } + } + } + + return(ui32Count); +} + +//***************************************************************************** +// +// Decodes a string encoded as part of an HTTP URI. +// +// \param pcEncoded is a pointer to a null terminated string encoded as per +// RFC1738, section 2.2. +// \param pcDecoded is a pointer to storage for the decoded, null terminated +// string. +// \param ui32Len is the number of bytes of storage pointed to by pcDecoded. +// +// This function decodes a string which has been encoded using the method +// described in RFC1738, section 2.2 for URLs. If the decoded string is too +// long for the provided output buffer, the output will be truncated. +// +// \return Returns the number of character written to the output buffer, not +// including the terminating NULL. +// +//***************************************************************************** +uint32_t +DecodeFormString(const char *pcEncoded, char *pcDecoded, + uint32_t ui32Len) +{ + uint32_t ui32Loop; + uint32_t ui32Count; + bool bValid; + + ui32Count = 0; + ui32Loop = 0; + + // + // Keep going until we run out of input or fill the output buffer. + // + while(pcEncoded[ui32Loop] && (ui32Count < (ui32Len - 1))) + { + switch(pcEncoded[ui32Loop]) + { + // + // '+' in the encoded data is decoded as a space. + // + case '+': + { + pcDecoded[ui32Count++] = ' '; + ui32Loop++; + break; + } + + // + // '%' in the encoded data indicates that the following 2 + // characters indicate the hex ASCII code of the decoded character. + // + case '%': + { + if(pcEncoded[ui32Loop + 1] && pcEncoded[ui32Loop + 2]) + { + // + // Decode the escape sequence. + // + bValid = DecodeHexEscape(&pcEncoded[ui32Loop], + &pcDecoded[ui32Count]); + + // + // If the escape sequence was valid, move to the next + // output character. + // + if(bValid) + { + ui32Count++; + } + + // + // Skip past the escape sequence in the encoded string. + // + ui32Loop += 3; + } + else + { + // + // We reached the end of the string partway through an + // escape sequence so just ignore it and return the number + // of decoded characters found so far. + // + pcDecoded[ui32Count] = '\0'; + return(ui32Count); + } + break; + } + + // + // For all other characters, just copy the input to the output. + // + default: + { + pcDecoded[ui32Count++] = pcEncoded[ui32Loop++]; + break; + } + } + } + + // + // Terminate the string and return the number of characters we decoded. + // + pcDecoded[ui32Count] = '\0'; + return(ui32Count); +} + +//***************************************************************************** +// +// Ensures that a string passed represents a valid decimal number and, +// if so, converts that number to a int32_t. +// +// \param pcValue points to a null terminated string which should contain an +// ASCII representation of a decimal number. +// \param pi32Value points to storage which will receive the number represented +// by pcValue assuming the string is a valid decimal number. +// +// This function determines whether or not a given string represents a valid +// decimal number and, if it does, converts the string into a decimal number +// which is returned to the caller. +// +// \return Returns \b true if the string is a valid representation of a +// decimal number or \b false if not. + +//***************************************************************************** +bool +CheckDecimalParam(const char *pcValue, int32_t *pi32Value) +{ + uint32_t ui32Loop; + bool bStarted; + bool bFinished; + bool bNeg; + int32_t i32Accum; + + // + // Check that the string is a valid decimal number. + // + bStarted = false; + bFinished = false; + bNeg = false; + ui32Loop = 0; + i32Accum = 0; + + while(pcValue[ui32Loop]) + { + // + // Ignore whitespace before the string. + // + if(!bStarted) + { + if((pcValue[ui32Loop] == ' ') || (pcValue[ui32Loop] == '\t')) + { + ui32Loop++; + continue; + } + + // + // Ignore a + or - character as long as we have not started. + // + if((pcValue[ui32Loop] == '+') || (pcValue[ui32Loop] == '-')) + { + // + // If the string starts with a '-', remember to negate the + // result. + // + bNeg = (pcValue[ui32Loop] == '-') ? true : false; + bStarted = true; + ui32Loop++; + } + else + { + // + // We found something other than whitespace or a sign character + // so we start looking for numerals now. + // + bStarted = true; + } + } + + if(bStarted) + { + if(!bFinished) + { + // + // We expect to see nothing other than valid digit characters + // here. + // + if((pcValue[ui32Loop] >= '0') && (pcValue[ui32Loop] <= '9')) + { + i32Accum = (i32Accum * 10) + (pcValue[ui32Loop] - '0'); + } + else + { + // + // Have we hit whitespace? If so, check for no more + // characters until the end of the string. + // + if((pcValue[ui32Loop] == ' ') || (pcValue[ui32Loop] == '\t')) + { + bFinished = true; + } + else + { + // + // We got something other than a digit or whitespace so + // this makes the string invalid as a decimal number. + // + return(false); + } + } + } + else + { + // + // We are scanning for whitespace until the end of the string. + // + if((pcValue[ui32Loop] != ' ') && (pcValue[ui32Loop] != '\t')) + { + // + // We found something other than whitespace so the string + // is not valid. + // + return(false); + } + } + + // + // Move on to the next character in the string. + // + ui32Loop++; + } + } + + // + // If we drop out of the loop, the string must be valid. All we need to do + // now is negate the accumulated value if the string started with a '-'. + // + *pi32Value = bNeg ? -i32Accum : i32Accum; + return(true); +} + +//***************************************************************************** +// +// Searches the list of parameters passed to a CGI handler for a parameter +// with the given name and, if found, reads the parameter value as a decimal +// number. +// +// \param pcName is a pointer to a string containing the name of the +// parameter that is to be found. +// \param pcParam is an array of character pointers, each containing the name +// of a single parameter as encoded in the URI requesting the CGI. +// \param iNumParams is the number of elements in the pcParam array. +// \param pcValues is an array of values associated with each parameter from +// the pcParam array. +// \param pbError is a pointer that will be written to \b true if there is any +// error during the parameter parsing process (parameter not found, value is +// not a valid decimal number). +// +// This function searches an array of parameters to find the string passed in +// \e pcName. If the string is found, the corresponding parameter value is +// read from array pcValues and checked to make sure that it is a valid +// decimal number. If so, the number is returned. If any error is detected, +// parameter \e pbError is written to \b true. Note that \e pbError is NOT +// written if the parameter is successfully found and validated. This is to +// allow multiple parameters to be parsed without the caller needing to check +// return codes after each individual call. +// +// \return Returns the value of the parameter or 0 if an error is detected (in +// which case \e *pbError will be \b true). +// +//***************************************************************************** +int32_t +GetCGIParam(const char *pcName, char *pcParams[], char *pcValue[], + int32_t iNumParams, bool *pbError) +{ + int32_t i32Param; + int32_t i32Value; + bool bRetcode; + + // + // Is the parameter we are looking for in the list? + // + i32Param = FindCGIParameter(pcName, pcParams, iNumParams); + if(i32Param != -1) + { + // + // We found the parameter so now get its value. + // + bRetcode = CheckDecimalParam(pcValue[i32Param], &i32Value); + if(bRetcode) + { + // + // All is well - return the parameter value. + // + return(i32Value); + } + } + + // + // If we reach here, there was a problem so return 0 and set the error + // flag. + // + *pbError = true; + return(0); +} + diff --git a/boards/dk-tm4c129x/enet_io/cgifuncs.h b/boards/dk-tm4c129x/enet_io/cgifuncs.h new file mode 100644 index 0000000..6119ab4 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/cgifuncs.h @@ -0,0 +1,45 @@ +//***************************************************************************** +// +// cgifuncs.c - Helper functions related to CGI script parameter parsing. +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __CGIFUNCS_H__ +#define __CGIFUNCS_H__ + +//***************************************************************************** +// +// Prototypes of functions exported by this module. +// +//***************************************************************************** +int32_t FindCGIParameter(const char *pcToFind, char *pcParam[], int32_t i32NumParams); +bool IsValidHexDigit(const char cDigit); +unsigned char HexDigit(const char cDigit); +bool DecodeHexEscape(const char *pcEncoded, char *pcDecoded); +uint32_t EncodeFormString(const char *pcDecoded, char *pcEncoded, + uint32_t ui32Len); +uint32_t DecodeFormString(const char *pcEncoded, char *pcDecoded, + uint32_t ui32Len); +bool CheckDecimalParam(const char *pcValue, int32_t *pi32Value); +int32_t GetCGIParam(const char *pcName, char *pcParams[], char *pcValue[], + int32_t i32NumParams, bool *pbError); + +#endif // __CGIFUNCS_H__ diff --git a/boards/dk-tm4c129x/enet_io/enet_io.c b/boards/dk-tm4c129x/enet_io/enet_io.c new file mode 100644 index 0000000..942835c --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.c @@ -0,0 +1,927 @@ +//***************************************************************************** +// +// enet_io.c - I/O control via a web server. +// +// Copyright (c) 2007-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/flash.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/timer.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "utils/locator.h" +#include "utils/lwiplib.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "httpserver_raw/httpd.h" +#include "grlib/grlib.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "io.h" +#include "cgifuncs.h" +#include "drivers/frame.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

Ethernet-based I/O Control (enet_io)

+//! +//! This example application demonstrates web-based I/O control using the +//! Tiva Ethernet controller and the lwIP TCP/IP Stack. DHCP is used to +//! obtain an Ethernet address. If DHCP times out without obtaining an +//! address, a static IP address will be chosen using AutoIP. The address that +//! is selected will be shown on the QVGA display allowing you to access the +//! internal web pages served by the application via your normal web browser. +//! +//! Two different methods of controlling board peripherals via web pages are +//! illustrated via pages labeled ``IO Control Demo 1'' and ``IO Control +//! Demo 2'' in the navigation menu on the left of the application's home page. +//! In both cases, the example allows you to toggle the state of the user LED +//! on the board and set the speed of a graphical animation on the display. +//! +//! ``IO Control Demo 1'' uses JavaScript running in the web browser to send +//! HTTP requests for particular special URLs. These special URLs are +//! intercepted in the file system support layer (io_fs.c) and used to +//! control the LED and animation. Responses generated by the board are +//! returned to the browser and inserted into the page HTML dynamically by +//! more JavaScript code. +//! +//! ``IO Control Demo 2'' uses standard HTML forms to pass parameters to CGI +//! (Common Gateway Interface) handlers running on the board. These handlers +//! process the form data and control the animation and LED as requested before +//! sending a response page (in this case, the original form) back to the +//! browser. The application registers the names and handlers for each of its +//! CGIs with the HTTPD server during initialization and the server calls +//! these handlers after parsing URL parameters each time one of the CGI URLs +//! is requested. +//! +//! Information on the state of the various controls in the second demo is +//! inserted into the served HTML using SSI (Server Side Include) tags which +//! are parsed by the HTTPD server in the application. As with the CGI +//! handlers, the application registers its list of SSI tags and a handler +//! function with the web server during initialization and this handler is +//! called whenever any registered tag is found in a .shtml, .ssi, .shtm or +//! .xml file being served to the browser. +//! +//! In addition to LED and animation speed control, the second example also +//! allows a line of text to be sent to the board for display on the LCD +//! panel. This is included to illustrate the decoding of HTTP text strings. +//! +//! Note that the web server used by this example has been modified from the +//! example shipped with the basic lwIP package. Additions include SSI and +//! CGI support along with the ability to have the server automatically insert +//! the HTTP headers rather than having these built in to the files in the +//! file system image. +//! +//! Source files for the internal file system image can be found in the ``fs'' +//! directory. If any of these files are changed, the file system image +//! (io_fsdata.h) should be rebuilt by running the following command from the +//! enet_io directory: +//! +//! ../../../../tools/bin/makefsfile -i fs -o io_fsdata.h -r -h -q +//! +//! For additional details on lwIP, refer to the lwIP web page at: +//! http://savannah.nongnu.org/projects/lwip/ +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines for setting up the system clock. +// +//***************************************************************************** +#define SYSTICKHZ 100 +#define SYSTICKMS (1000 / SYSTICKHZ) + +//***************************************************************************** +// +// Interrupt priority definitions. The top 3 bits of these values are +// significant with lower values indicating higher priority interrupts. +// +//***************************************************************************** +#define SYSTICK_INT_PRIORITY 0x80 +#define ETHERNET_INT_PRIORITY 0xC0 + +//***************************************************************************** +// +// A set of flags. The flag bits are defined as follows: +// +// 0 -> An indicator that the animation timer interrupt has occurred. +// +//***************************************************************************** +#define FLAG_TICK 0 +static volatile unsigned long g_ulFlags; + +//***************************************************************************** +// +// The graphics context used by the application. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The Y extent of the box used to display the text string sent from the +// remote web browser. +// +//***************************************************************************** +#define TEXT_BOX_TOP 140 +#define TEXT_BOX_BOTTOM 184 + +//***************************************************************************** +// +// The position and size of the box used to display the simple animation. +// +//***************************************************************************** +#define ANIM_TOP 210 +#define ANIM_HEIGHT 20 +#define ANIM_LEFT 40 +#define ANIM_WIDTH (320 - (2 * ANIM_LEFT)) + +//***************************************************************************** +// +// The RGB value we use to change the color each time the animated bar cycles +// back to the start. +// +//***************************************************************************** +#define COLOR_INCREMENT 0x00306040 + +//***************************************************************************** +// +// Position and movement granularity for the status indicator shown while +// the IP address is being determined. +// +//***************************************************************************** +#define STATUS_X 40 +#define STATUS_Y 50 +#define MAX_STATUS_X (320 - (2 * STATUS_X)) +#define ANIM_STEP_SIZE 8 + +//***************************************************************************** +// +// External Application references. +// +//***************************************************************************** +extern void httpd_init(void); + +//***************************************************************************** +// +// SSI tag indices for each entry in the g_pcSSITags array. +// +//***************************************************************************** +#define SSI_INDEX_LEDSTATE 0 +#define SSI_INDEX_FORMVARS 1 +#define SSI_INDEX_SPEED 2 + +//***************************************************************************** +// +// This array holds all the strings that are to be recognized as SSI tag +// names by the HTTPD server. The server will call SSIHandler to request a +// replacement string whenever the pattern (where tagname +// appears in the following array) is found in ".ssi", ".shtml" or ".shtm" +// files that it serves. +// +//***************************************************************************** +static const char *g_pcConfigSSITags[] = +{ + "LEDtxt", // SSI_INDEX_LEDSTATE + "FormVars", // SSI_INDEX_FORMVARS + "speed" // SSI_INDEX_SPEED +}; + +//***************************************************************************** +// +// The number of individual SSI tags that the HTTPD server can expect to +// find in our configuration pages. +// +//***************************************************************************** +#define NUM_CONFIG_SSI_TAGS (sizeof(g_pcConfigSSITags) / sizeof (char *)) + +//***************************************************************************** +// +// Prototypes for the various CGI handler functions. +// +//***************************************************************************** +static char *ControlCGIHandler(int32_t iIndex, int32_t i32NumParams, char *pcParam[], + char *pcValue[]); +static char *SetTextCGIHandler(int32_t iIndex, int32_t i32NumParams, char *pcParam[], + char *pcValue[]); + +//***************************************************************************** +// +// Prototype for the main handler used to process server-side-includes for the +// application's web-based configuration screens. +// +//***************************************************************************** +static int32_t SSIHandler(int32_t iIndex, char *pcInsert, int32_t iInsertLen); + +//***************************************************************************** +// +// CGI URI indices for each entry in the g_psConfigCGIURIs array. +// +//***************************************************************************** +#define CGI_INDEX_CONTROL 0 +#define CGI_INDEX_TEXT 1 + +//***************************************************************************** +// +// This array is passed to the HTTPD server to inform it of special URIs +// that are treated as common gateway interface (CGI) scripts. Each URI name +// is defined along with a pointer to the function which is to be called to +// process it. +// +//***************************************************************************** +static const tCGI g_psConfigCGIURIs[] = +{ + { "/iocontrol.cgi", (tCGIHandler)ControlCGIHandler }, // CGI_INDEX_CONTROL + { "/settxt.cgi", (tCGIHandler)SetTextCGIHandler } // CGI_INDEX_TEXT +}; + +//***************************************************************************** +// +// The number of individual CGI URIs that are configured for this system. +// +//***************************************************************************** +#define NUM_CONFIG_CGI_URIS (sizeof(g_psConfigCGIURIs) / sizeof(tCGI)) + +//***************************************************************************** +// +// The file sent back to the browser by default following completion of any +// of our CGI handlers. Each individual handler returns the URI of the page +// to load in response to it being called. +// +//***************************************************************************** +#define DEFAULT_CGI_RESPONSE "/io_cgi.ssi" + +//***************************************************************************** +// +// The file sent back to the browser in cases where a parameter error is +// detected by one of the CGI handlers. This should only happen if someone +// tries to access the CGI directly via the broswer command line and doesn't +// enter all the required parameters alongside the URI. +// +//***************************************************************************** +#define PARAM_ERROR_RESPONSE "/perror.htm" + +#define JAVASCRIPT_HEADER \ + "\n" + +//***************************************************************************** +// +// Timeout for DHCP address request (in seconds). +// +//***************************************************************************** +#ifndef DHCP_EXPIRE_TIMER_SECS +#define DHCP_EXPIRE_TIMER_SECS 45 +#endif + +//***************************************************************************** +// +// The positions of the circles in the animation used while waiting for an IP +// address. +// +//***************************************************************************** +const int32_t g_ppi32CirclePos[][2] = +{ + { + 12, 0 + }, + { + 8, -9 + }, + { + 0, -12 + }, + { + -8, -9 + }, + { + -12, 0 + }, + { + -8, 9 + }, + { + 0, 12 + }, + { + 8, 9 + } +}; + +//***************************************************************************** +// +// The colors of the circles in the animation used while waiting for an IP +// address. +// +//***************************************************************************** +const uint32_t g_pui32CircleColor[] = +{ + 0x111111, + 0x333333, + 0x555555, + 0x777777, + 0x999999, + 0xbbbbbb, + 0xdddddd, + 0xffffff, +}; + +//***************************************************************************** +// +// The current color index for the animation used while waiting for an IP +// address. +// +//***************************************************************************** +uint32_t g_ui32ColorIdx; + +//***************************************************************************** +// +// The current IP address. +// +//***************************************************************************** +uint32_t g_ui32IPAddress; + +//***************************************************************************** +// +// The application's graphics context. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The system clock frequency. Used by the SD card driver. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This CGI handler is called whenever the web browser requests iocontrol.cgi. +// +//***************************************************************************** +static char * +ControlCGIHandler(int32_t iIndex, int32_t i32NumParams, char *pcParam[], char *pcValue[]) +{ + int32_t i32LEDState, i32Speed; + bool bParamError; + + // + // We have not encountered any parameter errors yet. + // + bParamError = false; + + // + // Get each of the expected parameters. + // + i32LEDState = FindCGIParameter("LEDOn", pcParam, i32NumParams); + i32Speed = GetCGIParam("speed_percent", pcParam, pcValue, i32NumParams, + &bParamError); + + // + // Was there any error reported by the parameter parser? + // + if(bParamError || (i32Speed < 0) || (i32Speed > 100)) + { + return(PARAM_ERROR_RESPONSE); + } + + // + // We got all the parameters and the values were within the expected ranges + // so go ahead and make the changes. + // + io_set_led((i32LEDState == -1) ? false : true); + io_set_animation_speed(i32Speed); + + // + // Send back the default response page. + // + return(DEFAULT_CGI_RESPONSE); +} + +//***************************************************************************** +// +// This CGI handler is called whenever the web browser requests settxt.cgi. +// +//***************************************************************************** +static char * +SetTextCGIHandler(int32_t i32Index, int32_t i32NumParams, char *pcParam[], char *pcValue[]) +{ + long lStringParam; + char pcDecodedString[48]; + tRectangle sRect; + + // + // Find the parameter that has the string we need to display. + // + lStringParam = FindCGIParameter("DispText", pcParam, i32NumParams); + + // + // If the parameter was not found, show the error page. + // + if(lStringParam == -1) + { + return(PARAM_ERROR_RESPONSE); + } + + // + // The parameter is present. We need to decode the text for display. + // + DecodeFormString(pcValue[lStringParam], pcDecodedString, 48); + + // + // Erase the previous string and overwrite it with the new one. + // + sRect.i16XMin = 15; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 15 -1 ; + sRect.i16YMin = TEXT_BOX_TOP + 6; + sRect.i16YMax = TEXT_BOX_BOTTOM - 2; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Now draw the new string after setting the clipping rectangle. + // + GrContextClipRegionSet(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrYellow); + GrStringDrawCentered(&g_sContext, pcDecodedString, -1, + (sRect.i16XMin + sRect.i16XMax) / 2, + (sRect.i16YMin + sRect.i16YMax) / 2, 0); + + // + // Reset the clipping rectangle to the full screen. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextClipRegionSet(&g_sContext, &sRect); + + // + // Tell the HTTPD server which file to send back to the client. + // + return(DEFAULT_CGI_RESPONSE); +} + +//***************************************************************************** +// +// This function is called by the HTTP server whenever it encounters an SSI +// tag in a web page. The iIndex parameter provides the index of the tag in +// the g_pcConfigSSITags array. This function writes the substitution text +// into the pcInsert array, writing no more than iInsertLen characters. +// +//***************************************************************************** +static int32_t +SSIHandler(int32_t iIndex, char *pcInsert, int32_t iInsertLen) +{ + // + // Which SSI tag have we been passed? + // + switch(iIndex) + { + case SSI_INDEX_LEDSTATE: + io_get_ledstate(pcInsert, iInsertLen); + break; + + case SSI_INDEX_FORMVARS: + usnprintf(pcInsert, iInsertLen, + "%sls=%d;\nsp=%d;\n%s", + JAVASCRIPT_HEADER, + io_is_led_on(), + io_get_animation_speed(), + JAVASCRIPT_FOOTER); + break; + + case SSI_INDEX_SPEED: + io_get_animation_speed_string(pcInsert, iInsertLen); + break; + + default: + usnprintf(pcInsert, iInsertLen, "??"); + break; + } + + // + // Tell the server how many characters our insert string contains. + // + return(strlen(pcInsert)); +} + +//***************************************************************************** +// +// The interrupt handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Call the lwIP timer handler. + // + lwIPTimer(SYSTICKMS); +} + +//***************************************************************************** +// +// The interrupt handler for the timer used to pace the animation. +// +//***************************************************************************** +void +AnimTimerIntHandler(void) +{ + // + // Clear the timer interrupt. + // + ROM_TimerIntClear(TIMER2_BASE, TIMER_TIMA_TIMEOUT); + + // + // Indicate that a timer interrupt has occurred. + // + HWREGBITW(&g_ulFlags, FLAG_TICK) = 1; +} + +//***************************************************************************** +// +// Display an lwIP type IP Address. +// +//***************************************************************************** +void +DisplayIPAddress(uint32_t ui32Addr, uint32_t ui32Col, uint32_t ui32Row) +{ + char pcBuf[16]; + + // + // Convert the IP Address into a string. + // + usprintf(pcBuf, "%d.%d.%d.%d", ui32Addr & 0xff, (ui32Addr >> 8) & 0xff, + (ui32Addr >> 16) & 0xff, (ui32Addr >> 24) & 0xff); + + // + // Display the string. + // + GrStringDraw(&g_sContext, pcBuf, -1, ui32Col, ui32Row, false); +} + +//***************************************************************************** +// +// Required by lwIP library to support any host-related timer functions. +// +//***************************************************************************** +void +lwIPHostTimerHandler(void) +{ + uint32_t ui32Idx, ui32NewIPAddress, ui32Width; + tRectangle sRect; + + // + // Get the width and height of the display. + // + ui32Width = GrContextDpyWidthGet(&g_sContext); + + // + // Get the current IP address. + // + ui32NewIPAddress = lwIPLocalIPAddrGet(); + + // + // See if the IP address has changed. + // + if(ui32NewIPAddress != g_ui32IPAddress) + { + // + // Clear the display. + // + sRect.i16XMin = STATUS_X; + sRect.i16YMin = STATUS_Y - 22; + sRect.i16XMax = MAX_STATUS_X; + sRect.i16YMax = TEXT_BOX_TOP - 10; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // See if there is an IP address assigned. + // + if(ui32NewIPAddress == 0xffffffff) + { + // + // Indicate that there is no link. + // + GrStringDrawCentered(&g_sContext, "Waiting for link", -1, + ui32Width / 2, STATUS_Y, false); + } + else if(ui32NewIPAddress == 0) + { + // + // There is no IP address, so indicate that the DHCP process is + // running. + // + GrStringDrawCentered(&g_sContext, "Waiting for IP address", -1, + ui32Width / 2, STATUS_Y, false); + } + else + { + // + // Display the new IP address information. + // + GrStringDraw(&g_sContext, "IP Address:", -1, 60, STATUS_Y, + false); + GrStringDraw(&g_sContext, "Subnet Mask:", -1, 60, STATUS_Y + 20, false); + GrStringDraw(&g_sContext, "Gateway:", -1, 60, STATUS_Y + 40, false); + DisplayIPAddress(ui32NewIPAddress, ui32Width / 2, STATUS_Y); + DisplayIPAddress(lwIPLocalNetMaskGet(), ui32Width / 2, STATUS_Y + 20); + DisplayIPAddress(lwIPLocalGWAddrGet(), ui32Width / 2, + STATUS_Y + 40); + } + + // + // Save the new IP address. + // + g_ui32IPAddress = ui32NewIPAddress; + } + + // + // If there is not an IP address, draw the animated circle. + // + if((ui32NewIPAddress == 0) || (ui32NewIPAddress == 0xffffffff)) + { + // + // Loop through the circles in the animation. + // + for(ui32Idx = 0; ui32Idx < 8; ui32Idx++) + { + // + // Draw this circle. + // + GrContextForegroundSet(&g_sContext, + g_pui32CircleColor[(g_ui32ColorIdx + + ui32Idx) & 7]); + GrCircleFill(&g_sContext, + (ui32Width / 2) + g_ppi32CirclePos[ui32Idx][0], + STATUS_Y + g_ppi32CirclePos[ui32Idx][1] + 44, + 2); + } + + // + // Increment the color index. + // + g_ui32ColorIdx++; + } +} + +//***************************************************************************** +// +// This example demonstrates the use of the Ethernet Controller and lwIP +// TCP/IP stack to control various peripherals on the board via a web +// browser. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32User0, ui32User1, ui32AnimPos, ui32Color; + uint8_t pui8MACArray[8]; + tRectangle sRect; + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "enet-io"); + + // + // Configure SysTick for a periodic interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / SYSTICKHZ); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Configure the hardware MAC address for Ethernet Controller filtering of + // incoming packets. The MAC address will be stored in the non-volatile + // USER0 and USER1 registers. + // + ROM_FlashUserGet(&ui32User0, &ui32User1); + if((ui32User0 == 0xffffffff) || (ui32User1 == 0xffffffff)) + { + // + // We should never get here. This is an error if the MAC address has + // not been programmed into the device. Exit the program. + // + GrContextForegroundSet(&g_sContext, ClrRed); + GrStringDrawCentered(&g_sContext, "MAC Address", -1, + GrContextDpyWidthGet(&g_sContext) / 2, + (GrContextDpyHeightGet(&g_sContext) / 2) - 4, + false); + GrStringDrawCentered(&g_sContext, "Not Programmed!", -1, + GrContextDpyWidthGet(&g_sContext) / 2, + (GrContextDpyHeightGet(&g_sContext) / 2) + 16, + false); + while(1) + { + } + } + + // + // Tell the user what we are doing just now. + // + GrStringDrawCentered(&g_sContext, "Waiting for IP", -1, + GrContextDpyWidthGet(&g_sContext) / 2, + STATUS_Y, false); + + // + // Draw the box inside which a text string sent from browser will be + // displayed. + // + sRect.i16XMin = 10; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - sRect.i16XMin - 1; + sRect.i16YMin = TEXT_BOX_TOP; + sRect.i16YMax = TEXT_BOX_BOTTOM - 1; + GrContextForegroundSet(&g_sContext, ClrWhite); + GrRectDraw(&g_sContext, &sRect); + GrContextFontSet(&g_sContext, g_psFontCmss18); + GrStringDraw(&g_sContext, " Browser Text: ", -1, sRect.i16XMin + 6, + TEXT_BOX_TOP - 10, true); + + // + // Draw the box inside which we will draw the animation. + // + sRect.i16XMin = ANIM_LEFT; + sRect.i16XMax = (ANIM_LEFT + ANIM_WIDTH) - 1; + sRect.i16YMin = ANIM_TOP; + sRect.i16YMax = (ANIM_TOP + ANIM_HEIGHT) - 1; + GrContextForegroundSet(&g_sContext, ClrWhite); + GrRectDraw(&g_sContext, &sRect); + + // + // Initialize the animation variables. + // + ui32AnimPos = ANIM_LEFT + 1; + ui32Color = ClrRed; + + // + // Convert the 24/24 split MAC address from NV ram into a 32/16 split + // MAC address needed to program the hardware registers, then program + // the MAC address into the Ethernet Controller registers. + // + pui8MACArray[0] = ((ui32User0 >> 0) & 0xff); + pui8MACArray[1] = ((ui32User0 >> 8) & 0xff); + pui8MACArray[2] = ((ui32User0 >> 16) & 0xff); + pui8MACArray[3] = ((ui32User1 >> 0) & 0xff); + pui8MACArray[4] = ((ui32User1 >> 8) & 0xff); + pui8MACArray[5] = ((ui32User1 >> 16) & 0xff); + + // + // Initialze the lwIP library, using DHCP. + // + lwIPInit(g_ui32SysClock, pui8MACArray, 0, 0, 0, IPADDR_USE_DHCP); + + // + // Setup the device locator service. + // + LocatorInit(); + LocatorMACAddrSet(pui8MACArray); + LocatorAppTitleSet("DK-TM4C129X enet_io"); + + // + // Initialize a sample httpd server. + // + httpd_init(); + + // + // Set the interrupt priorities. We set the SysTick interrupt to a higher + // priority than the Ethernet interrupt to ensure that the file system + // tick is processed if SysTick occurs while the Ethernet handler is being + // processed. This is very likely since all the TCP/IP and HTTP work is + // done in the context of the Ethernet interrupt. + // + ROM_IntPrioritySet(INT_EMAC0, ETHERNET_INT_PRIORITY); + ROM_IntPrioritySet(FAULT_SYSTICK, SYSTICK_INT_PRIORITY); + + // + // Pass our tag information to the HTTP server. + // + http_set_ssi_handler((tSSIHandler)SSIHandler, g_pcConfigSSITags, + NUM_CONFIG_SSI_TAGS); + + // + // Pass our CGI handlers to the HTTP server. + // + http_set_cgi_handlers(g_psConfigCGIURIs, NUM_CONFIG_CGI_URIS); + + // + // Initialize IO controls + // + io_init(); + + // + // Loop forever, processing the on-screen animation. All other work is + // done in the interrupt handlers. + // + while(1) + { + // + // Wait for a new tick to occur. + // + while(!g_ulFlags) + { + // + // Do nothing. + // + } + + // + // Clear the flag now that we have seen it. + // + HWREGBITW(&g_ulFlags, FLAG_TICK) = 0; + + // + // Update the bar position and check for wrap. + // + ui32AnimPos ++; + if(ui32AnimPos == ((ANIM_LEFT + ANIM_WIDTH) - 1)) + { + // + // We've reached the right edge so change color and move back + // to the left. + // + ui32AnimPos = ANIM_LEFT + 1; + ui32Color += COLOR_INCREMENT; + } + + // + // Now we draw the new bar. Note that we need to temporarily + // disable the ethernet interrupt while doing this since we have + // been naughty and set this app up so that it accesses the graphics + // library from two different contexts. + // + ROM_IntDisable(INT_EMAC0); + GrContextForegroundSet(&g_sContext, ui32Color); + GrLineDrawV(&g_sContext, ui32AnimPos, (ANIM_TOP + 1), + (ANIM_TOP + ANIM_HEIGHT) - 2); + ROM_IntEnable(INT_EMAC0); + } +} diff --git a/boards/dk-tm4c129x/enet_io/enet_io.ewd b/boards/dk-tm4c129x/enet_io/enet_io.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/enet_io/enet_io.ewp b/boards/dk-tm4c129x/enet_io/enet_io.ewp new file mode 100644 index 0000000..33e2468 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.ewp @@ -0,0 +1,831 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\cgifuncs.c + + + $PROJ_DIR$\enet_io.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + + + $PROJ_DIR$\io.c + + + $PROJ_DIR$\io_fs.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\utils\locator.c + + + $PROJ_DIR$\..\..\..\..\utils\lwiplib.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/enet_io/enet_io.icf b/boards/dk-tm4c129x/enet_io/enet_io.icf new file mode 100644 index 0000000..4ecb234 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// enet_io.icf - Linker configuration file for enet_io. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/enet_io/enet_io.ld b/boards/dk-tm4c129x/enet_io/enet_io.ld new file mode 100644 index 0000000..047b06c --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * enet_io.ld - Linker configuration file for enet_io. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/enet_io/enet_io.sct b/boards/dk-tm4c129x/enet_io/enet_io.sct new file mode 100644 index 0000000..d23f897 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; enet_io.sct - Linker configuration file for enet_io. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/enet_io/enet_io.uvopt b/boards/dk-tm4c129x/enet_io/enet_io.uvopt new file mode 100644 index 0000000..c0a3546 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.uvopt @@ -0,0 +1,443 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + enet_io + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\cgifuncs.c + cgifuncs.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\enet_io.c + enet_io.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + httpd.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\io.c + io.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\io_fs.c + io_fs.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\locator.c + locator.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\lwiplib.c + lwiplib.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 11 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 15 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
diff --git a/boards/dk-tm4c129x/enet_io/enet_io.uvproj b/boards/dk-tm4c129x/enet_io/enet_io.uvproj new file mode 100644 index 0000000..1aef381 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + enet_io + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + enet_io + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\enet_io.bin .\rvmdk\enet_io.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + .;..;..\..\..\..;..\..\..\..\third_party\lwip-1.4.1\apps;..\..\..\..\third_party\lwip-1.4.1\ports\tiva-tm4c129\include;..\..\..\..\third_party\lwip-1.4.1\src\include;..\..\..\..\third_party\lwip-1.4.1\src\include\ipv4;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + enet_io.sct + + + --entry Reset_Handler + + + + + + + + Source + + + cgifuncs.c + 1 + .\cgifuncs.c + + + enet_io.c + 1 + .\enet_io.c + + + frame.c + 1 + ..\drivers\frame.c + + + httpd.c + 1 + ..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + + + io.c + 1 + .\io.c + + + io_fs.c + 1 + .\io_fs.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + locator.c + 1 + ..\..\..\..\utils\locator.c + + + lwiplib.c + 1 + ..\..\..\..\utils\lwiplib.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
diff --git a/boards/dk-tm4c129x/enet_io/enet_io_ccs.cmd b/boards/dk-tm4c129x/enet_io/enet_io_ccs.cmd new file mode 100644 index 0000000..e688818 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/enet_io_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * enet_io_ccs.cmd - CCS linker configuration file for enet_io. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.bin b/boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.bin new file mode 100644 index 0000000..9afec66 Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.bin differ diff --git a/boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.out b/boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.out new file mode 100644 index 0000000..8a7e136 Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/ewarm/Exe/enet_io.out differ diff --git a/boards/dk-tm4c129x/enet_io/fs/404.htm b/boards/dk-tm4c129x/enet_io/fs/404.htm new file mode 100644 index 0000000..d8b3630 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/404.htm @@ -0,0 +1,12 @@ + + + + + + +
+

404 - file not found

+

Try here instead.

+
+ + diff --git a/boards/dk-tm4c129x/enet_io/fs/about.htm b/boards/dk-tm4c129x/enet_io/fs/about.htm new file mode 100644 index 0000000..25e5cd2 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/about.htm @@ -0,0 +1,33 @@ + + + + +DK-TM4C129X Development Kit + + + + + +

About Texas Instruments

+
+
+Texas Instruments (TI) is a global +analog +and digital +semiconductor IC design +and manufacturing company. In addition to analog technologies, +digital signal processing (DSP) +and +microcontroller (MCU) +semiconductors, TI designs and manufactures semiconductor solutions for analog +and digital embedded and application processing. In the microcontroller space, +TI offers the broadest range of embedded control products, from ultra-low-power +MSP430™ +MCUs and high-performance +TMS320C2000™ +real-time controllers, to the 32 bit general-purpose ARM®-based MCUs of the +Tiva™ C Series +product line. Read more about us on the web at +www.ti.com. + + \ No newline at end of file diff --git a/boards/dk-tm4c129x/enet_io/fs/block.htm b/boards/dk-tm4c129x/enet_io/fs/block.htm new file mode 100644 index 0000000..e46fb3e --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/block.htm @@ -0,0 +1,18 @@ + + + + + +DK-TM4C129X Development Kit + + + + +

TM4C129XNCZAD Block Diagram

+
+
+
+ +
+ + diff --git a/boards/dk-tm4c129x/enet_io/fs/block.jpg b/boards/dk-tm4c129x/enet_io/fs/block.jpg new file mode 100644 index 0000000..3056bb0 Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/fs/block.jpg differ diff --git a/boards/dk-tm4c129x/enet_io/fs/dk-tm4c129x.jpg b/boards/dk-tm4c129x/enet_io/fs/dk-tm4c129x.jpg new file mode 100644 index 0000000..2affcf0 Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/fs/dk-tm4c129x.jpg differ diff --git a/boards/dk-tm4c129x/enet_io/fs/favicon.ico b/boards/dk-tm4c129x/enet_io/fs/favicon.ico new file mode 100644 index 0000000..d14b5d9 Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/fs/favicon.ico differ diff --git a/boards/dk-tm4c129x/enet_io/fs/index.htm b/boards/dk-tm4c129x/enet_io/fs/index.htm new file mode 100644 index 0000000..e911367 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/index.htm @@ -0,0 +1,57 @@ + + + + + + DK-TM4C129X Development Kit + + + + + + +
+ + + + + + +
+ + Texas Instruments + + +
+ Tiva™ C Series TM4C129X Development Kit +
+
+ DK-TM4C129X +
+
+ + TM4C + +
+

+
+ +
+
+
+

+ Copyright © 2013-2014 Texas Instruments Incorporated. All rights reserved. +
+ + diff --git a/boards/dk-tm4c129x/enet_io/fs/io_cgi.ssi b/boards/dk-tm4c129x/enet_io/fs/io_cgi.ssi new file mode 100644 index 0000000..47d015f --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/io_cgi.ssi @@ -0,0 +1,146 @@ + + + + + + I/O Control Demo 2 + + + + + + + +
+ + + + + + +
+ + Texas Instruments + + +
+ Tiva™ C Series TM4C129X Development Kit +
+
+ DK-TM4C129X +
+
+ + TM4C + +
+

+
+ +
+ + + + + + +
+
+

I/O Control Demo 2

+
+
+
    This demonstration shows another method of performing control and status reporting. This time, we use Server Side Include tags to replace text in the page as it is being server from the Tiva C Series DK board and standard HTML forms to send data to a CGI handler + running on the board.  This example does cause the page to be reloaded whenever form data is submitted but it  involves less complex HTML to perform the task. +
    +
    + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + Control + + Current + + New +
    LED State + + + +
    Animation Speed + + + +
    + +
    +
    +
    +
      +
      + + + + + + +
      +
      + + + + + + +
      + Display this text on the screen:
      + + +
      +
      +
      +
      +
      +
      +
      +

      + Copyright © 2013-2014 Texas Instruments Incorporated. All rights reserved. +
      + + diff --git a/boards/dk-tm4c129x/enet_io/fs/io_http.htm b/boards/dk-tm4c129x/enet_io/fs/io_http.htm new file mode 100644 index 0000000..62c7c57 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/io_http.htm @@ -0,0 +1,63 @@ + + + + + + + I/O Control Demo 1 + + + + + + + + + + + +
      +
      +

      I/O Control Demo 1

      +
      +
      +

      This demonstration shows how to perform control and status reporting using HTTP requests embedded within Javascript code on the web page itself. Using this method, it is possible to update sections of text on the current page without the need to refresh the + entire page.

      +

      Toggle USER LED and report the state of the LED

      + + + + + + + + +
      + + USER LED: +
      -
      +
      +

      +

      Set the speed of the animation on the display. Speed is expressed as a percentage.

      + + + + + + + + + + + +
      Current Speed: +
      -
      +
      + + + %
      +

      +
      + + + \ No newline at end of file diff --git a/boards/dk-tm4c129x/enet_io/fs/javascript.js b/boards/dk-tm4c129x/enet_io/fs/javascript.js new file mode 100644 index 0000000..74d90e0 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/javascript.js @@ -0,0 +1,191 @@ + + +window.onload = function() +{ + document.getElementById('about').onclick = loadAbout; + document.getElementById('overview').onclick = loadOverview; + document.getElementById('block').onclick = loadBlock; + document.getElementById('io_http').onclick = loadIOHttp; +} + +function loadAbout() +{ + loadPage("about.htm"); + return false; +} + +function loadOverview() +{ + loadPage("overview.htm"); + return false; +} + +function loadBlock() +{ + loadPage("block.htm"); + return false; +} + +function loadIOHttp() +{ + loadPage("io_http.htm"); + ledstateGet(); + speedGet(); + return false; +} + +function SetFormDefaults() +{ + document.iocontrol.LEDOn.checked = ls; + document.iocontrol.speed_percent.value = sp; +} + +function toggle_led() +{ + var req = false; + + function ToggleComplete() + { + if(req.readyState == 4) + { + if(req.status == 200) + { + document.getElementById("ledstate").innerHTML = "
      " + + req.responseText + "
      "; + } + } + } + + if(window.XMLHttpRequest) + { + req = new XMLHttpRequest(); + } + else if(window.ActiveXObject) + { + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + if(req) + { + req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true); + req.onreadystatechange = ToggleComplete; + req.send(null); + } +} + +function speedSet() +{ + var req = false; + var speed_txt = document.getElementById("speed_percent"); + function speedComplete() + { + if(req.readyState == 4) + { + if(req.status == 200) + { + document.getElementById("current_speed").innerHTML = + "
      " + req.responseText + "
      "; + } + } + } + if(window.XMLHttpRequest) + { + req = new XMLHttpRequest(); + } + else if(window.ActiveXObject) + { + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + if(req) + { + req.open("GET", "/cgi-bin/set_speed?percent=" + speed_txt.value + + "&id" + Math.random(), true); + req.onreadystatechange = speedComplete; + req.send(null); + } +} + +function ledstateGet() +{ + var led = false; + function ledComplete() + { + if(led.readyState == 4) + { + if(led.status == 200) + { + document.getElementById("ledstate").innerHTML = "
      " + + led.responseText + "
      "; + } + } + } + + if(window.XMLHttpRequest) + { + led = new XMLHttpRequest(); + } + else if(window.ActiveXObject) + { + led = new ActiveXObject("Microsoft.XMLHTTP"); + } + if(led) + { + led.open("GET", "/ledstate?id=" + Math.random(), true); + led.onreadystatechange = ledComplete; + led.send(null); + } +} + +function speedGet() +{ + var req = false; + function speedReturned() + { + if(req.readyState == 4) + { + if(req.status == 200) + { + document.getElementById("current_speed").innerHTML = "
      " + req.responseText + "
      "; + } + } + } + + if(window.XMLHttpRequest) + { + req = new XMLHttpRequest(); + } + else if(window.ActiveXObject) + { + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + if(req) + { + req.open("GET", "/get_speed?id=" + Math.random(), true); + req.onreadystatechange = speedReturned; + req.send(null); + } +} + +function loadPage(page) +{ + if(window.XMLHttpRequest) + { + xmlhttp = new XMLHttpRequest(); + } + else + { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + + xmlhttp.open("GET", page, true); + xmlhttp.setRequestHeader("Content-type", + "application/x-www-form-urlencoded"); + xmlhttp.send(); + + xmlhttp.onreadystatechange = function () + { + if((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) + { + document.getElementById("content").innerHTML = xmlhttp.responseText; + } + } +} diff --git a/boards/dk-tm4c129x/enet_io/fs/javascript_load.js b/boards/dk-tm4c129x/enet_io/fs/javascript_load.js new file mode 100644 index 0000000..cb52985 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/javascript_load.js @@ -0,0 +1,11 @@ + + +window.onload = function() +{ + document.getElementById('about').onclick = loadAbout; + document.getElementById('overview').onclick = loadOverview; + document.getElementById('block').onclick = loadBlock; + document.getElementById('io_http').onclick = loadIOHttp; + + loadPage("about.htm"); +} diff --git a/boards/dk-tm4c129x/enet_io/fs/overview.htm b/boards/dk-tm4c129x/enet_io/fs/overview.htm new file mode 100644 index 0000000..66fddbe --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/overview.htm @@ -0,0 +1,30 @@ + + + + + +DK-TM4C129X Development Kit + + + + +

      Tiva™ C Series Product Line

      +
      +
      +As the first ARM® Cortex™-M4 microcontrollers (MCUs) to be +implemented on TI's proprietary 65-nm process technology, the Tiva C Series +provides customers an opportunity to increase their connectivity integration +without sacrificing price, performance, or power consumption. Every C Series +MCU integrates a floating-point core and high-performance analog while still +providing low-power modes to offer a great set of functional options. Today's +engineers understand that designs require more than hardware alone. Often, the +greatest challenge is software and +TivaWare for C Series is a +free library of C files that include both peripheral-level and +application-level code in source and in ROM for every Tiva C Series MCU. This +offering delivers USB, CAN, graphics, and sensor application libraries so +customers can focus their efforts on building applications instead of +programming their connectivity peripherals. The Tiva C Series provides an +excellent baseline for home, building, and industrial applications. + + diff --git a/boards/dk-tm4c129x/enet_io/fs/perror.htm b/boards/dk-tm4c129x/enet_io/fs/perror.htm new file mode 100644 index 0000000..b6a77ff --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/perror.htm @@ -0,0 +1,74 @@ + + + + + + Form Parameter Error + + + + + +
      + + + + + + +
      + + Texas Instruments + + +
      + Tiva™ C Series TM4C129X Development Kit +
      +
      + DK-TM4C129X +
      +
      + + TM4C + +
      +

      +
      + +
      + + + + + + +
      +
      +

      Parameter Error

      +
      +
      +

      +

      Oops - one of the parameters sent to the board +
      was either missing, invalid or out of range. 

      +

      Please try again! +
      +

      +
      +
      +
      +

      + Copyright © 2013-2014 Texas Instruments Incorporated. All rights reserved. +
      + + diff --git a/boards/dk-tm4c129x/enet_io/fs/styles.css b/boards/dk-tm4c129x/enet_io/fs/styles.css new file mode 100644 index 0000000..3403359 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/fs/styles.css @@ -0,0 +1,104 @@ +/* Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. */ + +/* Styling for the entire document. */ +body +{ + background-color: white; + color: black; + font-family: Ariel,Helvetica,sans-serif; +} + +/* Styling for the heading div. */ +#heading +{ + clear: both; + margin-bottom: 10px; +} + +#heading_h1 +{ + font-size: 2em; + font-weight: bold; + text-align: center; +} + +#heading_h2 +{ + font-size: 1.25em; + font-weight: bold; + text-align: center; +} + +#heading hr +{ + border-bottom: 1px solid #ff0000; + border-top: 1px solid #ff0000; +} + +#heading a img +{ + border: 0; +} + +/* Styling for the menu div. */ +#menu +{ + float: left; + margin-bottom: 10px; + width: 225px; +} + +#menu ul +{ + list-style-type: none; + margin: 0; + padding: 0; +} + +#menu a:link, #menu a:visited +{ + background-color: #ff0000; + color: #ffffff; + display: block; + font-weight: bold; + margin-bottom: 2px; + margin-top: 2px; + padding: 4px; + text-align: center; + text-decoration: none; + width: 200px; +} + +#menu a:hover, #menu a:active +{ + background-color: #bf0000; +} + +/* Styling for the content div. */ +#content +{ + margin-bottom: 10px; + margin-left: 225px; +} + +#content_heading +{ + font-size: 1.5em; + font-weight: bold; + text-align: center; +} + +/* Styling for the footing div. */ +#footing +{ + clear: both; + font-size: .75em; + font-style: italic; + text-align: right; +} + +#footing hr +{ + border-bottom: 1px solid #ff0000; + border-top: 1px solid #ff0000; +} diff --git a/boards/dk-tm4c129x/enet_io/fs/ti.jpg b/boards/dk-tm4c129x/enet_io/fs/ti.jpg new file mode 100644 index 0000000..5d1669c Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/fs/ti.jpg differ diff --git a/boards/dk-tm4c129x/enet_io/fs/tm4c.jpg b/boards/dk-tm4c129x/enet_io/fs/tm4c.jpg new file mode 100644 index 0000000..1672a1d Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/fs/tm4c.jpg differ diff --git a/boards/dk-tm4c129x/enet_io/gcc/enet_io.axf b/boards/dk-tm4c129x/enet_io/gcc/enet_io.axf new file mode 100644 index 0000000..51963fa Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/gcc/enet_io.axf differ diff --git a/boards/dk-tm4c129x/enet_io/gcc/enet_io.bin b/boards/dk-tm4c129x/enet_io/gcc/enet_io.bin new file mode 100644 index 0000000..e42f844 Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/gcc/enet_io.bin differ diff --git a/boards/dk-tm4c129x/enet_io/io.c b/boards/dk-tm4c129x/enet_io/io.c new file mode 100644 index 0000000..e8d90bd --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/io.c @@ -0,0 +1,259 @@ +//***************************************************************************** +// +// io.c - I/O routines for the enet_io example application. +// +// Copyright (c) 2007-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_pwm.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/pwm.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "utils/ustdlib.h" +#include "io.h" + +//***************************************************************************** +// +// Hardware connection for the user LED. +// +//***************************************************************************** +#define LED_PORT_BASE GPIO_PORTQ_BASE +#define LED_PIN GPIO_PIN_7 + +//***************************************************************************** +// +// The system clock speed. +// +//***************************************************************************** +extern uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The current speed of the on-screen animation expressed as a percentage. +// +//***************************************************************************** +volatile unsigned long g_ulAnimSpeed = 10; + +//***************************************************************************** +// +// Set the timer used to pace the animation. We scale the timer timeout such +// that a speed of 100% causes the timer to tick once every 4 mS (250Hz). +// +//***************************************************************************** +static void +io_set_timer(unsigned long ulSpeedPercent) +{ + unsigned long ulTimeout; + + // + // Turn the timer off while we are mucking with it. + // + ROM_TimerDisable(TIMER2_BASE, TIMER_A); + + // + // If the speed is non-zero, we reset the timeout. If it is zero, we + // just leave the timer disabled. + // + if(ulSpeedPercent) + { + ulTimeout = g_ui32SysClock / 250; + ulTimeout = (ulTimeout * 100 ) / ulSpeedPercent; + + ROM_TimerLoadSet(TIMER2_BASE, TIMER_A, ulTimeout); + ROM_TimerEnable(TIMER2_BASE, TIMER_A); + } +} + +//***************************************************************************** +// +// Initialize the IO used in this demo +// +//***************************************************************************** +void +io_init(void) +{ + // + // Configure Port F0 for as an output for the status LED. + // + ROM_GPIOPinTypeGPIOOutput(LED_PORT_BASE, LED_PIN); + + // + // Initialize LED to OFF (0) + // + ROM_GPIOPinWrite(LED_PORT_BASE, LED_PIN, 0); + + // + // Enable the peripherals used by this example. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2); + + // + // Configure the timer used to pace the animation. + // + ROM_TimerConfigure(TIMER2_BASE, TIMER_CFG_PERIODIC); + + // + // Setup the interrupts for the timer timeouts. + // + ROM_IntEnable(INT_TIMER2A); + ROM_TimerIntEnable(TIMER2_BASE, TIMER_TIMA_TIMEOUT); + + // + // Set the timer for the current animation speed. This enables the + // timer as a side effect. + // + io_set_timer(g_ulAnimSpeed); +} + +//***************************************************************************** +// +// Set the status LED on or off. +// +//***************************************************************************** +void +io_set_led(bool bOn) +{ + // + // Turn the LED on or off as requested. + // + ROM_GPIOPinWrite(LED_PORT_BASE, LED_PIN, bOn ? LED_PIN : 0); +} + +//***************************************************************************** +// +// Return LED state +// +//***************************************************************************** +void +io_get_ledstate(char * pcBuf, int iBufLen) +{ + // + // Get the state of the LED + // + if(ROM_GPIOPinRead(LED_PORT_BASE, LED_PIN)) + { + usnprintf(pcBuf, iBufLen, "ON"); + } + else + { + usnprintf(pcBuf, iBufLen, "OFF"); + } + +} + +//***************************************************************************** +// +// Return LED state as an integer, 1 on, 0 off. +// +//***************************************************************************** +int +io_is_led_on(void) +{ + // + // Get the state of the LED + // + if(ROM_GPIOPinRead(LED_PORT_BASE, LED_PIN)) + { + return(true); + } + else + { + return(0); + } +} + +//***************************************************************************** +// +// Set the speed of the animation shown on the display. In this version, the +// speed is described as a decimal number encoded as an ASCII string. +// +//***************************************************************************** +void +io_set_animation_speed_string(char *pcBuf) +{ + unsigned long ulSpeed; + + // + // Parse the passed parameter as a decimal number. + // + ulSpeed = 0; + while((*pcBuf >= '0') && (*pcBuf <= '9')) + { + ulSpeed *= 10; + ulSpeed += (*pcBuf - '0'); + pcBuf++; + } + + // + // If the number is valid, set the new speed. + // + if(ulSpeed <= 100) + { + g_ulAnimSpeed = ulSpeed; + io_set_timer(g_ulAnimSpeed); + } +} + +//***************************************************************************** +// +// Set the speed of the animation shown on the display. +// +//***************************************************************************** +void +io_set_animation_speed(unsigned long ulSpeed) +{ + // + // If the number is valid, set the new speed. + // + if(ulSpeed <= 100) + { + g_ulAnimSpeed = ulSpeed; + io_set_timer(g_ulAnimSpeed); + } +} + +//***************************************************************************** +// +// Get the current animation speed as an ASCII string. +// +//***************************************************************************** +void +io_get_animation_speed_string(char *pcBuf, int iBufLen) +{ + usnprintf(pcBuf, iBufLen, "%d%%", g_ulAnimSpeed); +} + +//***************************************************************************** +// +// Get the current animation speed as a number. +// +//***************************************************************************** +unsigned long +io_get_animation_speed(void) +{ + return(g_ulAnimSpeed); +} diff --git a/boards/dk-tm4c129x/enet_io/io.h b/boards/dk-tm4c129x/enet_io/io.h new file mode 100644 index 0000000..35ba0f7 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/io.h @@ -0,0 +1,58 @@ +//***************************************************************************** +// +// io.h - Prototypes for I/O routines for the enet_io example. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IO_H__ +#define __IO_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Exported global variables. +// +//***************************************************************************** +extern volatile unsigned long g_ulAnimSpeed; + +//***************************************************************************** +// +// Exported function prototypes. +// +//***************************************************************************** +void io_init(void); +void io_set_led(bool bOn); +void io_get_ledstate(char *pcBuf, int iBufLen); +void io_set_animation_speed_string(char *pcBuf); +void io_get_animation_speed_string(char *pcBuf, int iBufLen); +void io_set_animation_speed(unsigned long ulSpeedPercent); +unsigned long io_get_animation_speed(void); +int io_is_led_on(void); + +#ifdef __cplusplus +} +#endif + +#endif // __IO_H__ diff --git a/boards/dk-tm4c129x/enet_io/io_fs.c b/boards/dk-tm4c129x/enet_io/io_fs.c new file mode 100644 index 0000000..7472793 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/io_fs.c @@ -0,0 +1,316 @@ +//***************************************************************************** +// +// io_fs.c - File System Processing for enet_io application. +// +// Copyright (c) 2007-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include "inc/hw_types.h" +#include "inc/hw_memmap.h" +#include "driverlib/rom.h" +#include "driverlib/ssi.h" +#include "utils/lwiplib.h" +#include "utils/ustdlib.h" +#include "httpserver_raw/httpd.h" +#include "httpserver_raw/fs.h" +#include "httpserver_raw/fsdata.h" +#include "io.h" + +//***************************************************************************** +// +// Include the web file system data for this application. This file is +// generated by the makefsfile utility, using the following command: +// +// ../../../../tools/bin/makefsfile -i fs -o io_fsdata.h -r -h -q +// +// If any changes are made to the static content of the web pages served by the +// application, this script must be used to regenerate io_fsdata.h in order +// for those changes to be picked up by the web server. +// +//***************************************************************************** +#include "io_fsdata.h" + +//***************************************************************************** +// +// Open a file and return a handle to the file, if found. Otherwise, +// return NULL. This function also looks for special file names used to +// provide specific status information or to control various subsystems. +// These file names are used by the JavaScript on the "IO Control Demo 1" +// example web page. +// +//***************************************************************************** +struct fs_file * +fs_open(const char *pcName) +{ + const struct fsdata_file *psTree; + struct fs_file *psFile = NULL; + + // + // Allocate memory for the file system structure. + // + psFile = mem_malloc(sizeof(struct fs_file)); + if(psFile == NULL) + { + return(NULL); + } + + // + // Process request to toggle STATUS LED + // + if(ustrncmp(pcName, "/cgi-bin/toggle_led", 19) == 0) + { + static char pcBuf[4]; + + // + // Toggle the STATUS LED + // + io_set_led(!io_is_led_on()); + + // + // Get the new state of the LED + // + io_get_ledstate(pcBuf, 4); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + + // + // Return the psFile system pointer. + // + return(psFile); + } + + // + // Request for LED State? + // + else if(ustrncmp(pcName, "/ledstate", 9) == 0) + { + static char pcBuf[4]; + + // + // Get the state of the LED + // + io_get_ledstate(pcBuf, 4); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + return(psFile); + } + // + // Request for the animation speed? + // + else if(ustrncmp(pcName, "/get_speed", 10) == 0) + { + static char pcBuf[6]; + + // + // Get the current animation speed as a string. + // + io_get_animation_speed_string(pcBuf, 6); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + return(psFile); + } + // + // Set the animation speed? + // + else if(ustrncmp(pcName, "/cgi-bin/set_speed?percent=", 12) == 0) + { + static char pcBuf[6]; + + // + // Extract the parameter and set the actual speed requested. + // + io_set_animation_speed_string((char*)pcName + 27); + + // + // Get the current speed setting as a string to send back. + // + io_get_animation_speed_string(pcBuf, 6); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + return(psFile); + } + // + // If I can't find it there, look in the rest of the main psFile system + // + else + { + // + // Initialize the psFile system tree pointer to the root of the linked list. + // + psTree = FS_ROOT; + + // + // Begin processing the linked list, looking for the requested file name. + // + while(NULL != psTree) + { + // + // Compare the requested file "pcName" to the file name in the + // current node. + // + if(ustrncmp(pcName, (char *)psTree->name, psTree->len) == 0) + { + // + // Fill in the data pointer and length values from the + // linked list node. + // + psFile->data = (char *)psTree->data; + psFile->len = psTree->len; + + // + // For now, we setup the read index to the end of the file, + // indicating that all data has been read. + // + psFile->index = psTree->len; + + // + // We are not using any file system extensions in this + // application, so set the pointer to NULL. + // + psFile->pextension = NULL; + + // + // Exit the loop and return the file system pointer. + // + break; + } + + // + // If we get here, we did not find the file at this node of the linked + // list. Get the next element in the list. + // + psTree = psTree->next; + } + } + + // + // If we didn't find the file, ptTee will be NULL. Make sure we + // return a NULL pointer if this happens. + // + if(NULL == psTree) + { + mem_free(psFile); + psFile = NULL; + } + + // + // Return the file system pointer. + // + return(psFile); +} + +//***************************************************************************** +// +// Close an opened file designated by the handle. +// +//***************************************************************************** +void +fs_close(struct fs_file *psFile) +{ + // + // Free the main psFile system object. + // + mem_free(psFile); +} + +//***************************************************************************** +// +// Read the next chunk of data from the file. Return the iCount of data +// that was read. Return 0 if no data is currently available. Return +// a -1 if at the end of file. +// +//***************************************************************************** +int +fs_read(struct fs_file *psFile, char *pcBuffer, int iCount) +{ + int iAvailable; + + // + // Check to see if a command (pextension = 1). + // + if(psFile->pextension == (void *)1) + { + // + // Nothing to do for this file type. + // + psFile->pextension = NULL; + return(-1); + } + + // + // Check to see if more data is available. + // + if(psFile->len == psFile->index) + { + // + // There is no remaining data. Return a -1 for EOF indication. + // + return(-1); + } + + // + // Determine how much data we can copy. The minimum of the 'iCount' + // parameter or the available data in the file system buffer. + // + iAvailable = psFile->len - psFile->index; + if(iAvailable > iCount) + { + iAvailable = iCount; + } + + // + // Copy the data. + // + memcpy(pcBuffer, psFile->data + iAvailable, iAvailable); + psFile->index += iAvailable; + + // + // Return the count of data that we copied. + // + return(iAvailable); +} + +//***************************************************************************** +// +// Determine the number of bytes left to read from the file. +// +//***************************************************************************** +int +fs_bytes_left(struct fs_file *psFile) +{ + // + // Return the number of bytes left to be read from this file. + // + return(psFile->len - psFile->index); +} diff --git a/boards/dk-tm4c129x/enet_io/io_fsdata.h b/boards/dk-tm4c129x/enet_io/io_fsdata.h new file mode 100644 index 0000000..db05c9b --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/io_fsdata.h @@ -0,0 +1,12700 @@ +//*************************************************************************** +// +// File System Image. +// +// This file was automatically generated using the makefsfile utility. +// +//*************************************************************************** + +static const uint8_t data_404_htm[] = +{ + /* /404.htm */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, + 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x0a, + 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, + 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, + 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, 0x3c, 0x68, + 0x33, 0x3e, 0x54, 0x72, 0x79, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, + 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, + 0x61, 0x3e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, + 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, + 0x0a, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_about_htm[] = +{ + /* /about.htm */ + 0x2f, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x44, 0x4b, 0x2d, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x3c, + 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, + 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, + 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, + 0x3d, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, + 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3b, 0x63, 0x68, 0x61, 0x72, 0x73, + 0x65, 0x74, 0x3d, 0x55, 0x54, 0x46, 0x2d, 0x38, + 0x22, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, + 0x73, 0x73, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, + 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, + 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, + 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, + 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x2f, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x3c, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, + 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x54, 0x65, + 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, + 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x68, 0x72, 0x3e, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x54, 0x65, + 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x28, 0x54, 0x49, 0x29, 0x20, 0x69, 0x73, 0x20, + 0x61, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x0a, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x6f, 0x63, 0x75, + 0x73, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, + 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x67, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x74, 0x73, 0x70, 0x3f, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x3d, 0x32, + 0x39, 0x35, 0x36, 0x36, 0x22, 0x3e, 0x61, 0x6e, + 0x61, 0x6c, 0x6f, 0x67, 0x3c, 0x2f, 0x61, 0x3e, + 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x0a, 0x3c, 0x61, 0x20, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, + 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x2f, 0x64, 0x6f, 0x63, 0x73, + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x73, 0x65, + 0x6d, 0x69, 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x49, 0x43, 0x20, 0x64, + 0x65, 0x73, 0x69, 0x67, 0x6e, 0x3c, 0x2f, 0x61, + 0x3e, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, + 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, + 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x20, 0x49, 0x6e, 0x20, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x61, 0x6c, + 0x6f, 0x67, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, + 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, + 0x0a, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x6f, 0x63, 0x75, + 0x73, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x64, 0x73, 0x70, 0x2f, 0x64, 0x6f, 0x63, + 0x73, 0x2f, 0x64, 0x73, 0x70, 0x68, 0x6f, 0x6d, + 0x65, 0x2e, 0x74, 0x73, 0x70, 0x3f, 0x73, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x3d, + 0x34, 0x36, 0x22, 0x3e, 0x64, 0x69, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x44, + 0x53, 0x50, 0x29, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, + 0x61, 0x6e, 0x64, 0x0a, 0x3c, 0x61, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, + 0x6f, 0x63, 0x75, 0x73, 0x2e, 0x74, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x63, 0x75, 0x2f, + 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x6d, 0x63, 0x75, + 0x68, 0x6f, 0x6d, 0x65, 0x2e, 0x74, 0x73, 0x70, + 0x3f, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x3d, 0x31, 0x30, 0x31, 0x22, 0x3e, + 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x20, + 0x28, 0x4d, 0x43, 0x55, 0x29, 0x3c, 0x2f, 0x61, + 0x3e, 0x0a, 0x73, 0x65, 0x6d, 0x69, 0x63, 0x6f, + 0x6e, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x2c, 0x20, 0x54, 0x49, 0x20, 0x64, 0x65, 0x73, + 0x69, 0x67, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x73, 0x65, + 0x6d, 0x69, 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, + 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x6d, 0x62, + 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, + 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x0a, + 0x54, 0x49, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x72, + 0x6f, 0x61, 0x64, 0x65, 0x73, 0x74, 0x20, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, + 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x73, 0x2c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x75, 0x6c, 0x74, 0x72, 0x61, 0x2d, 0x6c, 0x6f, + 0x77, 0x2d, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x0a, + 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x66, 0x6f, 0x63, 0x75, 0x73, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6d, 0x63, 0x75, 0x2f, 0x64, 0x6f, 0x63, 0x73, + 0x2f, 0x6d, 0x63, 0x75, 0x70, 0x72, 0x6f, 0x64, + 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x74, 0x73, 0x70, 0x3f, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x3d, 0x39, + 0x35, 0x26, 0x74, 0x61, 0x62, 0x49, 0x64, 0x3d, + 0x31, 0x34, 0x30, 0x26, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x49, 0x64, 0x3d, 0x33, 0x34, 0x32, + 0x22, 0x3e, 0x4d, 0x53, 0x50, 0x34, 0x33, 0x30, + 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x3c, + 0x2f, 0x61, 0x3e, 0x0a, 0x4d, 0x43, 0x55, 0x73, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x67, + 0x68, 0x2d, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x0a, 0x3c, 0x61, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x63, + 0x75, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x6d, + 0x63, 0x75, 0x70, 0x72, 0x6f, 0x64, 0x6f, 0x76, + 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x74, + 0x73, 0x70, 0x3f, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x3d, 0x39, 0x35, 0x26, + 0x74, 0x61, 0x62, 0x49, 0x64, 0x3d, 0x31, 0x35, + 0x33, 0x31, 0x26, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x49, 0x64, 0x3d, 0x39, 0x31, 0x36, 0x22, + 0x3e, 0x54, 0x4d, 0x53, 0x33, 0x32, 0x30, 0x43, + 0x32, 0x30, 0x30, 0x30, 0x26, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x3b, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, + 0x72, 0x65, 0x61, 0x6c, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, + 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x33, 0x32, + 0x20, 0x62, 0x69, 0x74, 0x20, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x70, 0x75, 0x72, + 0x70, 0x6f, 0x73, 0x65, 0x20, 0x41, 0x52, 0x4d, + 0x26, 0x72, 0x65, 0x67, 0x3b, 0x2d, 0x62, 0x61, + 0x73, 0x65, 0x64, 0x20, 0x4d, 0x43, 0x55, 0x73, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, + 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x73, + 0x64, 0x73, 0x2f, 0x74, 0x69, 0x2f, 0x6d, 0x69, + 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x5f, 0x61, 0x72, 0x6d, 0x5f, 0x63, + 0x6f, 0x72, 0x74, 0x65, 0x78, 0x2f, 0x63, 0x5f, + 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, + 0x6d, 0x34, 0x63, 0x5f, 0x61, 0x72, 0x6d, 0x5f, + 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x2d, 0x6d, + 0x34, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x70, 0x61, 0x67, 0x65, 0x22, + 0x3e, 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x20, + 0x52, 0x65, 0x61, 0x64, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x75, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x77, 0x65, 0x62, 0x20, 0x61, 0x74, + 0x0a, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, + 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x22, + 0x3e, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x3c, 0x2f, 0x61, 0x3e, 0x2e, + 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + +}; + +static const uint8_t data_block_htm[] = +{ + /* /block.htm */ + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x44, + 0x4b, 0x2d, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, + 0x39, 0x58, 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x4b, + 0x69, 0x74, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, + 0x73, 0x73, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, + 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, + 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, + 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, + 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x2f, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x3c, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, + 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, + 0x4e, 0x43, 0x5a, 0x41, 0x44, 0x20, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, 0x67, + 0x72, 0x61, 0x6d, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, + 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x3c, 0x62, 0x72, + 0x3e, 0x0a, 0x3c, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x3e, 0x0a, 0x3c, 0x69, 0x6d, 0x67, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x2f, + 0x3e, 0x0a, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_block_jpg[] = +{ + /* /block.jpg */ + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x6a, + 0x70, 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xe1, 0x00, 0x40, + 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x02, 0x68, 0xa0, 0x03, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdb, + 0x00, 0x43, 0x00, 0x0e, 0x0a, 0x0b, 0x0c, 0x0b, + 0x09, 0x0e, 0x0c, 0x0c, 0x0c, 0x10, 0x0f, 0x0e, + 0x11, 0x15, 0x23, 0x17, 0x15, 0x13, 0x13, 0x15, + 0x2b, 0x1f, 0x21, 0x1a, 0x23, 0x33, 0x2d, 0x36, + 0x35, 0x32, 0x2d, 0x32, 0x31, 0x39, 0x40, 0x51, + 0x45, 0x39, 0x3c, 0x4d, 0x3d, 0x31, 0x32, 0x47, + 0x61, 0x48, 0x4d, 0x54, 0x57, 0x5b, 0x5c, 0x5b, + 0x37, 0x44, 0x64, 0x6b, 0x63, 0x59, 0x6a, 0x51, + 0x59, 0x5b, 0x58, 0xff, 0xdb, 0x00, 0x43, 0x01, + 0x0f, 0x10, 0x10, 0x15, 0x13, 0x15, 0x2a, 0x17, + 0x17, 0x2a, 0x58, 0x3a, 0x32, 0x3a, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0xff, 0xc0, 0x00, 0x11, 0x08, 0x02, 0x35, 0x02, + 0x68, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, + 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x1f, 0x00, + 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, + 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, + 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, + 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, + 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, + 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, + 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, + 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, + 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, + 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, + 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, + 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, + 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, + 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, + 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, + 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, + 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, + 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, + 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, + 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, + 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, + 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, + 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, + 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00, 0x0c, 0x03, + 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, + 0x00, 0xed, 0xa0, 0x85, 0x66, 0x57, 0x77, 0x79, + 0x73, 0xe6, 0x30, 0xe2, 0x42, 0x3b, 0xd4, 0xbf, + 0x64, 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, + 0x00, 0x1a, 0x4b, 0x3f, 0xf5, 0x4f, 0xff, 0x00, + 0x5d, 0x1f, 0xff, 0x00, 0x42, 0x35, 0x62, 0x80, + 0x20, 0xfb, 0x24, 0x7f, 0xdf, 0x9b, 0xfe, 0xfe, + 0xb7, 0xf8, 0xd1, 0xf6, 0x48, 0xff, 0x00, 0xbf, + 0x37, 0xfd, 0xfd, 0x6f, 0xf1, 0xa9, 0xe8, 0xa0, + 0x08, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, + 0xbf, 0xad, 0xfe, 0x34, 0x7d, 0x92, 0x3f, 0xef, + 0xcd, 0xff, 0x00, 0x7f, 0x5b, 0xfc, 0x6a, 0x7a, + 0x28, 0x02, 0x0f, 0xb2, 0x47, 0xfd, 0xf9, 0xbf, + 0xef, 0xeb, 0x7f, 0x8d, 0x1f, 0x64, 0x8f, 0xfb, + 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, 0x1a, 0x9e, + 0x8a, 0x00, 0x83, 0xec, 0x91, 0xff, 0x00, 0x7e, + 0x6f, 0xfb, 0xfa, 0xdf, 0xe3, 0x47, 0xd9, 0x23, + 0xfe, 0xfc, 0xdf, 0xf7, 0xf5, 0xbf, 0xc6, 0xa7, + 0xa2, 0x80, 0x20, 0xfb, 0x24, 0x7f, 0xdf, 0x9b, + 0xfe, 0xfe, 0xb7, 0xf8, 0xd1, 0xf6, 0x48, 0xff, + 0x00, 0xbf, 0x37, 0xfd, 0xfd, 0x6f, 0xf1, 0xa9, + 0xe8, 0xa0, 0x08, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, + 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, 0x7d, 0x92, + 0x3f, 0xef, 0xcd, 0xff, 0x00, 0x7f, 0x5b, 0xfc, + 0x6a, 0x7a, 0x28, 0x02, 0x0f, 0xb2, 0x47, 0xfd, + 0xf9, 0xbf, 0xef, 0xeb, 0x7f, 0x8d, 0x1f, 0x64, + 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, + 0x1a, 0x9e, 0x8a, 0x00, 0x83, 0xec, 0x91, 0xff, + 0x00, 0x7e, 0x6f, 0xfb, 0xfa, 0xdf, 0xe3, 0x47, + 0xd9, 0x23, 0xfe, 0xfc, 0xdf, 0xf7, 0xf5, 0xbf, + 0xc6, 0xa7, 0xa2, 0x80, 0x20, 0xfb, 0x24, 0x7f, + 0xdf, 0x9b, 0xfe, 0xfe, 0xb7, 0xf8, 0xd1, 0xf6, + 0x48, 0xff, 0x00, 0xbf, 0x37, 0xfd, 0xfd, 0x6f, + 0xf1, 0xa9, 0xe8, 0xa0, 0x08, 0x3e, 0xc9, 0x1f, + 0xf7, 0xe6, 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, + 0x7d, 0x92, 0x3f, 0xef, 0xcd, 0xff, 0x00, 0x7f, + 0x5b, 0xfc, 0x6a, 0x7a, 0x28, 0x02, 0x0f, 0xb2, + 0x47, 0xfd, 0xf9, 0xbf, 0xef, 0xeb, 0x7f, 0x8d, + 0x1f, 0x64, 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, + 0xff, 0x00, 0x1a, 0x9e, 0x8a, 0x00, 0x83, 0xec, + 0x91, 0xff, 0x00, 0x7e, 0x6f, 0xfb, 0xfa, 0xdf, + 0xe3, 0x47, 0xd9, 0x23, 0xfe, 0xfc, 0xdf, 0xf7, + 0xf5, 0xbf, 0xc6, 0xa7, 0xa2, 0x80, 0x20, 0xfb, + 0x24, 0x7f, 0xdf, 0x9b, 0xfe, 0xfe, 0xb7, 0xf8, + 0xd1, 0xf6, 0x48, 0xff, 0x00, 0xbf, 0x37, 0xfd, + 0xfd, 0x6f, 0xf1, 0xa9, 0xe8, 0xa0, 0x08, 0x3e, + 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, 0xbf, 0xad, + 0xfe, 0x34, 0x7d, 0x92, 0x3f, 0xef, 0xcd, 0xff, + 0x00, 0x7f, 0x5b, 0xfc, 0x6a, 0x7a, 0x28, 0x02, + 0x0f, 0xb2, 0x47, 0xfd, 0xf9, 0xbf, 0xef, 0xeb, + 0x7f, 0x8d, 0x1f, 0x64, 0x8f, 0xfb, 0xf3, 0x7f, + 0xdf, 0xd6, 0xff, 0x00, 0x1a, 0x9e, 0x8a, 0x00, + 0x83, 0xec, 0x91, 0xff, 0x00, 0x7e, 0x6f, 0xfb, + 0xfa, 0xdf, 0xe3, 0x47, 0xd9, 0x23, 0xfe, 0xfc, + 0xdf, 0xf7, 0xf5, 0xbf, 0xc6, 0xa7, 0xa2, 0x80, + 0x20, 0xfb, 0x24, 0x7f, 0xdf, 0x9b, 0xfe, 0xfe, + 0xb7, 0xf8, 0xd1, 0xf6, 0x48, 0xff, 0x00, 0xbf, + 0x37, 0xfd, 0xfd, 0x6f, 0xf1, 0xa9, 0xe8, 0xa0, + 0x08, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, + 0xbf, 0xad, 0xfe, 0x34, 0x7d, 0x92, 0x3f, 0xef, + 0xcd, 0xff, 0x00, 0x7f, 0x5b, 0xfc, 0x6a, 0x7a, + 0x28, 0x02, 0x0f, 0xb2, 0x47, 0xfd, 0xf9, 0xbf, + 0xef, 0xeb, 0x7f, 0x8d, 0x1f, 0x64, 0x8f, 0xfb, + 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, 0x1a, 0x9e, + 0x8a, 0x00, 0x83, 0xec, 0x91, 0xff, 0x00, 0x7e, + 0x6f, 0xfb, 0xfa, 0xdf, 0xe3, 0x47, 0xd9, 0x23, + 0xfe, 0xfc, 0xdf, 0xf7, 0xf5, 0xbf, 0xc6, 0xa7, + 0xa2, 0x80, 0x20, 0xfb, 0x24, 0x7f, 0xdf, 0x9b, + 0xfe, 0xfe, 0xb7, 0xf8, 0xd1, 0xf6, 0x48, 0xff, + 0x00, 0xbf, 0x37, 0xfd, 0xfd, 0x6f, 0xf1, 0xa9, + 0xe8, 0xa0, 0x08, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, + 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, 0x7d, 0x92, + 0x3f, 0xef, 0xcd, 0xff, 0x00, 0x7f, 0x5b, 0xfc, + 0x6a, 0x7a, 0x42, 0x70, 0x09, 0xf4, 0xa0, 0x08, + 0x7e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, 0xbf, + 0xad, 0xfe, 0x34, 0x7d, 0x92, 0x3f, 0xef, 0xcd, + 0xff, 0x00, 0x7f, 0x5b, 0xfc, 0x69, 0x45, 0xc0, + 0x23, 0x22, 0x39, 0x48, 0xf5, 0x08, 0x69, 0x7c, + 0xff, 0x00, 0xfa, 0x65, 0x2f, 0xfd, 0xf0, 0x68, + 0x01, 0xbf, 0x64, 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, + 0xd6, 0xff, 0x00, 0x1a, 0x3e, 0xc9, 0x1f, 0xf7, + 0xe6, 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, 0xef, + 0x3f, 0xfe, 0x99, 0x4b, 0xff, 0x00, 0x7c, 0x1a, + 0x3c, 0xff, 0x00, 0xfa, 0x65, 0x2f, 0xfd, 0xf0, + 0x68, 0x01, 0xbf, 0x64, 0x8f, 0xfb, 0xf3, 0x7f, + 0xdf, 0xd6, 0xff, 0x00, 0x1a, 0x3e, 0xc9, 0x1f, + 0xf7, 0xe6, 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, + 0xef, 0x3f, 0xfe, 0x99, 0x4b, 0xff, 0x00, 0x7c, + 0x1a, 0x3c, 0xff, 0x00, 0xfa, 0x65, 0x2f, 0xfd, + 0xf0, 0x68, 0x01, 0xbf, 0x64, 0x8f, 0xfb, 0xf3, + 0x7f, 0xdf, 0xd6, 0xff, 0x00, 0x1a, 0x3e, 0xc9, + 0x1f, 0xf7, 0xe6, 0xff, 0x00, 0xbf, 0xad, 0xfe, + 0x34, 0xef, 0x3f, 0xfe, 0x99, 0x4b, 0xff, 0x00, + 0x7c, 0x1a, 0x3c, 0xff, 0x00, 0xfa, 0x65, 0x2f, + 0xfd, 0xf0, 0x68, 0x01, 0xbf, 0x64, 0x8f, 0xfb, + 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, 0x1a, 0x3e, + 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, 0xbf, 0xad, + 0xfe, 0x34, 0xef, 0x3f, 0xfe, 0x99, 0x4b, 0xff, + 0x00, 0x7c, 0x1a, 0x3c, 0xff, 0x00, 0xfa, 0x65, + 0x2f, 0xfd, 0xf0, 0x68, 0x01, 0xbf, 0x64, 0x8f, + 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, 0x1a, + 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, 0xbf, + 0xad, 0xfe, 0x34, 0xef, 0x3f, 0xfe, 0x99, 0x4b, + 0xff, 0x00, 0x7c, 0x1a, 0x3c, 0xff, 0x00, 0xfa, + 0x65, 0x2f, 0xfd, 0xf0, 0x68, 0x01, 0xbf, 0x64, + 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, + 0x1a, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, + 0xbf, 0xad, 0xfe, 0x34, 0xef, 0x3f, 0xfe, 0x99, + 0x4b, 0xff, 0x00, 0x7c, 0x1a, 0x3c, 0xff, 0x00, + 0xfa, 0x65, 0x2f, 0xfd, 0xf0, 0x68, 0x01, 0xbf, + 0x64, 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, + 0x00, 0x1a, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, + 0x00, 0xbf, 0xad, 0xfe, 0x34, 0xef, 0x3f, 0xfe, + 0x99, 0x4b, 0xff, 0x00, 0x7c, 0x1a, 0x3c, 0xff, + 0x00, 0xfa, 0x65, 0x2f, 0xfd, 0xf0, 0x68, 0x01, + 0xbf, 0x64, 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, + 0xff, 0x00, 0x1a, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, + 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, 0xbf, 0x69, + 0x50, 0xdb, 0x4c, 0x72, 0x67, 0xae, 0x36, 0x1a, + 0x3e, 0xd0, 0x3f, 0xe7, 0x9c, 0xbf, 0xf7, 0xc1, + 0xa0, 0x04, 0xfb, 0x24, 0x7f, 0xdf, 0x9b, 0xfe, + 0xfe, 0xb7, 0xf8, 0xd1, 0xf6, 0x48, 0xff, 0x00, + 0xbf, 0x37, 0xfd, 0xfd, 0x6f, 0xf1, 0xa5, 0xfb, + 0x40, 0xff, 0x00, 0x9e, 0x72, 0xff, 0x00, 0xdf, + 0x06, 0x8f, 0xb4, 0x0f, 0xf9, 0xe7, 0x2f, 0xfd, + 0xf0, 0x68, 0x01, 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, + 0xff, 0x00, 0xbf, 0xad, 0xfe, 0x34, 0x7d, 0x92, + 0x3f, 0xef, 0xcd, 0xff, 0x00, 0x7f, 0x5b, 0xfc, + 0x69, 0x7e, 0xd0, 0x3f, 0xe7, 0x9c, 0xbf, 0xf7, + 0xc1, 0xa3, 0xed, 0x03, 0xfe, 0x79, 0xcb, 0xff, + 0x00, 0x7c, 0x1a, 0x00, 0x4f, 0xb2, 0x47, 0xfd, + 0xf9, 0xbf, 0xef, 0xeb, 0x7f, 0x8d, 0x1f, 0x64, + 0x8f, 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, + 0x1a, 0x5f, 0xb4, 0x0f, 0xf9, 0xe7, 0x2f, 0xfd, + 0xf0, 0x68, 0xfb, 0x4a, 0xe7, 0x1e, 0x5c, 0x99, + 0xf4, 0xd9, 0x40, 0x09, 0xf6, 0x48, 0xff, 0x00, + 0xbf, 0x37, 0xfd, 0xfd, 0x6f, 0xf1, 0xa3, 0xec, + 0x91, 0xff, 0x00, 0x7e, 0x6f, 0xfb, 0xfa, 0xdf, + 0xe3, 0x4b, 0xf6, 0x81, 0xff, 0x00, 0x3c, 0xe5, + 0xff, 0x00, 0xbe, 0x0d, 0x1f, 0x68, 0x1f, 0xf3, + 0xce, 0x5f, 0xfb, 0xe0, 0xd0, 0x02, 0x7d, 0x92, + 0x3f, 0xef, 0xcd, 0xff, 0x00, 0x7f, 0x5b, 0xfc, + 0x68, 0xfb, 0x24, 0x7f, 0xdf, 0x9b, 0xfe, 0xfe, + 0xb7, 0xf8, 0xd2, 0xfd, 0xa0, 0x7f, 0xcf, 0x39, + 0x7f, 0xef, 0x83, 0x47, 0xda, 0x07, 0xfc, 0xf3, + 0x97, 0xfe, 0xf8, 0x34, 0x00, 0x9f, 0x64, 0x8f, + 0xfb, 0xf3, 0x7f, 0xdf, 0xd6, 0xff, 0x00, 0x1a, + 0x3e, 0xc9, 0x1f, 0xf7, 0xe6, 0xff, 0x00, 0xbf, + 0xad, 0xfe, 0x34, 0xbf, 0x68, 0x1f, 0xf3, 0xce, + 0x5f, 0xfb, 0xe0, 0xd1, 0xf6, 0x81, 0xff, 0x00, + 0x3c, 0xe5, 0xff, 0x00, 0xbe, 0x0d, 0x00, 0x43, + 0x3c, 0x22, 0x15, 0x47, 0x47, 0x97, 0x3e, 0x62, + 0x8e, 0x64, 0x27, 0xbd, 0x14, 0xb7, 0x12, 0x2c, + 0x90, 0xae, 0x01, 0x18, 0x95, 0x01, 0x04, 0x63, + 0xb8, 0xa2, 0x80, 0x1f, 0x67, 0xfe, 0xa9, 0xff, + 0x00, 0xeb, 0xa3, 0xff, 0x00, 0xe8, 0x46, 0xac, + 0x55, 0x7b, 0x3f, 0xf5, 0x4f, 0xff, 0x00, 0x5d, + 0x1f, 0xff, 0x00, 0x42, 0x35, 0x3d, 0x00, 0x2d, + 0x14, 0x94, 0x50, 0x02, 0xd1, 0x49, 0x45, 0x00, + 0x2d, 0x14, 0x94, 0x50, 0x02, 0xd1, 0x49, 0x45, + 0x00, 0x2d, 0x14, 0x94, 0x50, 0x02, 0xd1, 0x49, + 0x45, 0x00, 0x2d, 0x14, 0x94, 0x50, 0x02, 0xd1, + 0x49, 0x45, 0x00, 0x2d, 0x14, 0x94, 0x50, 0x02, + 0xd1, 0x49, 0x45, 0x00, 0x2d, 0x14, 0x94, 0x50, + 0x02, 0xd1, 0x49, 0x45, 0x00, 0x2d, 0x14, 0x94, + 0x50, 0x02, 0xd1, 0x49, 0x45, 0x00, 0x2d, 0x14, + 0x94, 0x50, 0x02, 0xd1, 0x49, 0x45, 0x00, 0x2d, + 0x14, 0x94, 0x50, 0x02, 0xd1, 0x49, 0x45, 0x00, + 0x2d, 0x14, 0x94, 0x50, 0x02, 0xd1, 0x49, 0x45, + 0x00, 0x2d, 0x14, 0x94, 0x50, 0x02, 0xd3, 0x64, + 0xff, 0x00, 0x56, 0xdf, 0x43, 0x4b, 0x4d, 0x93, + 0xfd, 0x5b, 0x7d, 0x0d, 0x00, 0x20, 0x9a, 0x3b, + 0x7d, 0x3c, 0x4f, 0x29, 0xdb, 0x1c, 0x71, 0x6f, + 0x63, 0x8c, 0xe0, 0x01, 0x93, 0x59, 0x56, 0xde, + 0x2f, 0xd0, 0x2e, 0xee, 0xa3, 0xb5, 0x82, 0xf8, + 0xbc, 0xd2, 0x30, 0x45, 0x5f, 0x22, 0x41, 0x92, + 0x7a, 0x75, 0x5a, 0xd9, 0xb6, 0xff, 0x00, 0x8f, + 0x68, 0xbf, 0xdc, 0x1f, 0xca, 0xb9, 0x09, 0xee, + 0xe6, 0xb1, 0xd4, 0xfc, 0x67, 0x75, 0x6f, 0xc4, + 0xb1, 0x43, 0x6e, 0xc8, 0x71, 0x9c, 0x1f, 0x28, + 0xf3, 0xf8, 0x50, 0x07, 0x67, 0x45, 0x79, 0xc4, + 0xf7, 0x7a, 0xc5, 0xb6, 0x8d, 0x76, 0xcb, 0x36, + 0xa3, 0x1c, 0x4f, 0x0d, 0xbc, 0x89, 0x35, 0xcc, + 0xc0, 0xb8, 0x90, 0xc8, 0xa1, 0xb6, 0xed, 0x39, + 0xda, 0xc0, 0xf4, 0xfa, 0xd4, 0xba, 0x8c, 0x9a, + 0x8d, 0x81, 0xd7, 0x1a, 0x3d, 0x5e, 0xf5, 0xc6, + 0x99, 0x3d, 0xbb, 0xc2, 0x1e, 0x4c, 0xee, 0xf3, + 0x36, 0xee, 0x0d, 0xea, 0x39, 0xe0, 0x74, 0xa0, + 0x0f, 0x42, 0xa2, 0xb8, 0x3d, 0x62, 0x7b, 0xb1, + 0x75, 0xe2, 0x6b, 0x88, 0xf5, 0x5b, 0xa8, 0x0e, + 0x9e, 0x60, 0x78, 0x23, 0x49, 0x48, 0x50, 0x4a, + 0x0e, 0xa3, 0xb8, 0x3e, 0x9d, 0x39, 0xa6, 0x4f, + 0xa9, 0xeb, 0x17, 0x5a, 0xad, 0xe4, 0xd6, 0xeb, + 0x7b, 0xe6, 0x5a, 0xcb, 0x0a, 0xc7, 0x1c, 0x72, + 0x2a, 0xc0, 0xaa, 0x40, 0x2c, 0x1c, 0x13, 0xce, + 0xec, 0x9f, 0xd2, 0x90, 0x1d, 0xfd, 0x32, 0x59, + 0x63, 0x82, 0x26, 0x96, 0x69, 0x16, 0x38, 0xd7, + 0x96, 0x77, 0x38, 0x03, 0xf1, 0xae, 0x22, 0x39, + 0xee, 0x13, 0x4f, 0xd6, 0x2f, 0x67, 0xd5, 0xef, + 0xd1, 0x8d, 0xfc, 0xb6, 0x70, 0x24, 0x67, 0x7e, + 0xd1, 0xe6, 0x0c, 0x05, 0x52, 0x7e, 0xf7, 0x60, + 0x73, 0xc0, 0xaa, 0x57, 0xd3, 0xdc, 0x5c, 0xf8, + 0x53, 0x5c, 0x82, 0x69, 0xef, 0x02, 0xd9, 0xde, + 0x46, 0x23, 0x13, 0xcb, 0x99, 0x02, 0x92, 0xa3, + 0x6b, 0x90, 0x4e, 0x7a, 0x9e, 0xfe, 0x9e, 0x94, + 0x01, 0xe8, 0xf4, 0x57, 0x07, 0xa8, 0xdd, 0xdd, + 0x59, 0x69, 0xde, 0x29, 0x89, 0x2f, 0xee, 0x73, + 0x68, 0x6d, 0xd2, 0x17, 0x79, 0x98, 0xba, 0x65, + 0x57, 0xa1, 0xcf, 0x53, 0xfa, 0xd4, 0xb7, 0x77, + 0x37, 0xf1, 0x5f, 0x78, 0x92, 0xf5, 0x2f, 0xae, + 0x71, 0xa7, 0xc6, 0x8d, 0x04, 0x01, 0xf2, 0x9b, + 0x9a, 0x2e, 0x49, 0x1d, 0xf1, 0xd7, 0x1e, 0xbc, + 0xd0, 0x07, 0x6f, 0x45, 0x70, 0x36, 0xf2, 0x6b, + 0xcd, 0x63, 0x73, 0x15, 0xb4, 0x97, 0xaa, 0x25, + 0xb6, 0x89, 0xd1, 0xef, 0x2e, 0x13, 0x7b, 0x49, + 0xb8, 0x6e, 0x08, 0xd9, 0x3b, 0x43, 0x2f, 0x4f, + 0x7a, 0xdf, 0xf0, 0xad, 0xc9, 0x92, 0x3b, 0xcb, + 0x69, 0x1e, 0xfb, 0xce, 0x82, 0x40, 0x1e, 0x1b, + 0xd2, 0x1d, 0xe2, 0xca, 0xe4, 0x0d, 0xdf, 0xc4, + 0x0f, 0x5a, 0x00, 0xdf, 0xa2, 0x8a, 0x28, 0x18, + 0x51, 0x45, 0x14, 0x01, 0x5e, 0x4f, 0xf8, 0xfc, + 0x5f, 0xfa, 0xe6, 0x7f, 0x98, 0xa7, 0xd3, 0x24, + 0xff, 0x00, 0x8f, 0xc5, 0xff, 0x00, 0xae, 0x67, + 0xf9, 0x8a, 0x7d, 0x31, 0x14, 0xa6, 0xd5, 0xac, + 0x60, 0xbc, 0x16, 0x92, 0x4f, 0x89, 0x72, 0xaa, + 0x7e, 0x46, 0x21, 0x4b, 0x7d, 0xd0, 0x5b, 0x18, + 0x04, 0xf6, 0x04, 0xd3, 0x61, 0xd6, 0x6c, 0x67, + 0xbc, 0x36, 0xb1, 0x3c, 0xcd, 0x28, 0x76, 0x8c, + 0x9f, 0xb3, 0xc9, 0xb7, 0x72, 0xe4, 0x11, 0xbb, + 0x6e, 0xde, 0xc7, 0xbd, 0x60, 0xea, 0x1e, 0x71, + 0x7d, 0x56, 0x74, 0x64, 0x1a, 0x7a, 0x5e, 0x44, + 0x6e, 0x22, 0x23, 0xf7, 0x8e, 0xca, 0x23, 0xc9, + 0x53, 0xd8, 0x7d, 0xde, 0x30, 0x73, 0x83, 0xc8, + 0xcd, 0x5c, 0xb5, 0x92, 0xff, 0x00, 0x4b, 0x68, + 0x44, 0x8f, 0x69, 0x3d, 0x9d, 0xcd, 0xec, 0x8b, + 0xfb, 0xad, 0xdb, 0xc1, 0x92, 0x46, 0x60, 0x73, + 0xd0, 0xe0, 0x9c, 0x11, 0x8f, 0xc6, 0x80, 0x36, + 0x22, 0xbf, 0xb5, 0x96, 0xe5, 0xed, 0xd2, 0x5c, + 0xc8, 0x99, 0xce, 0x54, 0x80, 0x71, 0xc3, 0x61, + 0xb1, 0x83, 0x8e, 0xf8, 0xe9, 0x55, 0xed, 0xb5, + 0xcd, 0x32, 0xee, 0xe5, 0x6d, 0xe0, 0xba, 0x0d, + 0x23, 0xe4, 0x27, 0xc8, 0xc1, 0x5f, 0x1d, 0x76, + 0xb1, 0x18, 0x6f, 0xc0, 0xd5, 0x2d, 0x6f, 0x4d, + 0x10, 0xe9, 0x1a, 0x9d, 0xc4, 0x12, 0x4c, 0xcf, + 0xf6, 0x79, 0x9a, 0x38, 0xf2, 0x36, 0xa1, 0x7e, + 0x5c, 0xaf, 0x19, 0xc9, 0xe7, 0xa9, 0x3e, 0xd5, + 0xa3, 0xbb, 0x4f, 0xfb, 0x25, 0x99, 0x3e, 0x4f, + 0x90, 0x59, 0x3e, 0xcd, 0x90, 0x31, 0xbb, 0x1f, + 0x2e, 0xdf, 0x7a, 0x00, 0xbb, 0x51, 0x2f, 0xfc, + 0x7d, 0x3f, 0xfb, 0xa3, 0xfa, 0xd4, 0xb5, 0x12, + 0xff, 0x00, 0xc7, 0xd3, 0xff, 0x00, 0xba, 0x3f, + 0xad, 0x00, 0x36, 0xf2, 0xf2, 0xda, 0xc2, 0xd5, + 0xee, 0x6e, 0xa6, 0x58, 0xa1, 0x4f, 0xbc, 0xcd, + 0xfe, 0x79, 0xa8, 0xae, 0xb5, 0x4b, 0x2b, 0x38, + 0x62, 0x9a, 0x79, 0x88, 0x59, 0xb9, 0x8f, 0x6a, + 0x33, 0x16, 0x18, 0xce, 0x70, 0x06, 0x7a, 0x53, + 0x75, 0xb8, 0xd1, 0xf4, 0x7b, 0xc2, 0xe8, 0xac, + 0x52, 0x09, 0x19, 0x72, 0x3a, 0x1d, 0xa7, 0x91, + 0xf9, 0xd5, 0x1b, 0x3f, 0xf9, 0x0c, 0x69, 0xdb, + 0xbf, 0xe8, 0x1a, 0xdb, 0x3f, 0xef, 0xa8, 0xf7, + 0x7f, 0xec, 0xb4, 0x01, 0x76, 0xe7, 0x58, 0xb0, + 0xb5, 0x5b, 0x76, 0x92, 0x56, 0x61, 0x70, 0xa5, + 0xe2, 0xf2, 0xa2, 0x79, 0x37, 0x28, 0xc7, 0x3f, + 0x28, 0x3c, 0x7c, 0xc3, 0xf3, 0xa7, 0x9d, 0x52, + 0xcc, 0x18, 0x43, 0x48, 0xca, 0x65, 0x55, 0x65, + 0xcc, 0x4c, 0x30, 0x18, 0xe0, 0x6e, 0xe3, 0xe5, + 0xc9, 0xe3, 0xe6, 0xc5, 0x60, 0xe9, 0x96, 0xf7, + 0xb2, 0x41, 0xa6, 0xdc, 0x58, 0xcd, 0x68, 0x8d, + 0x1c, 0x17, 0x08, 0xab, 0x38, 0x2d, 0xf2, 0xb4, + 0x8a, 0x54, 0x80, 0x08, 0xe3, 0x0a, 0x06, 0x73, + 0xde, 0xb4, 0xac, 0xe2, 0x8f, 0x59, 0xb5, 0x83, + 0x50, 0x93, 0xcc, 0x85, 0xa4, 0x45, 0x59, 0x62, + 0x8d, 0x86, 0xc7, 0xd8, 0xc4, 0x80, 0x78, 0xe9, + 0xbb, 0x3d, 0x31, 0x9c, 0xf3, 0x40, 0x13, 0xdd, + 0x6b, 0x9a, 0x65, 0xa5, 0xc3, 0x5b, 0xcf, 0x74, + 0x16, 0x44, 0xc6, 0xfc, 0x23, 0x10, 0x99, 0xe9, + 0xb9, 0x80, 0xc2, 0xfe, 0x35, 0xa2, 0x08, 0x23, + 0x20, 0xe4, 0x56, 0x26, 0x84, 0x60, 0xfe, 0xca, + 0xbd, 0xfb, 0x46, 0xcc, 0xfd, 0xaa, 0xe3, 0xed, + 0x5b, 0xba, 0x7d, 0xf6, 0xeb, 0xff, 0x00, 0x01, + 0xdb, 0xf8, 0x56, 0xbd, 0xb9, 0x88, 0xdb, 0xc4, + 0x60, 0xdb, 0xe4, 0x94, 0x1e, 0x5e, 0xde, 0x9b, + 0x71, 0xc6, 0x28, 0x02, 0xb4, 0xdd, 0x1f, 0xfe, + 0xbb, 0xa7, 0xf3, 0x14, 0x51, 0x37, 0x47, 0xff, + 0x00, 0xae, 0xc9, 0xfc, 0xc5, 0x14, 0x01, 0x2d, + 0xa7, 0xfa, 0xb7, 0xff, 0x00, 0xae, 0x8f, 0xff, + 0x00, 0xa1, 0x1a, 0xb1, 0x55, 0xed, 0x3f, 0xd5, + 0xbf, 0xfd, 0x74, 0x7f, 0xfd, 0x08, 0xd4, 0xf4, + 0x00, 0xb4, 0x52, 0x51, 0x40, 0x0b, 0x45, 0x53, + 0xb8, 0xd4, 0xec, 0x6d, 0x9f, 0x64, 0xb7, 0x28, + 0x1c, 0x75, 0x50, 0x0b, 0x11, 0xf9, 0x54, 0x3f, + 0xdb, 0xba, 0x67, 0xfc, 0xfc, 0x37, 0xfd, 0xfb, + 0x35, 0x4a, 0x12, 0x7d, 0x09, 0xe6, 0x8f, 0x73, + 0x4a, 0x8a, 0xcd, 0xfe, 0xdd, 0xd3, 0x3f, 0xe7, + 0xe1, 0xbf, 0xef, 0xd9, 0xa3, 0xfb, 0x77, 0x4c, + 0xff, 0x00, 0x9f, 0x86, 0xff, 0x00, 0xbf, 0x66, + 0x9f, 0xb3, 0x97, 0x60, 0xe7, 0x8f, 0x73, 0x4a, + 0x8a, 0xcd, 0xfe, 0xdd, 0xd3, 0x3f, 0xe7, 0xe1, + 0xbf, 0xef, 0xd9, 0xa3, 0xfb, 0x77, 0x4c, 0xff, + 0x00, 0x9f, 0x86, 0xff, 0x00, 0xbf, 0x66, 0x8f, + 0x67, 0x2e, 0xc1, 0xcf, 0x1e, 0xe6, 0x95, 0x15, + 0x9b, 0xfd, 0xbb, 0xa6, 0x7f, 0xcf, 0xc3, 0x7f, + 0xdf, 0xb3, 0x47, 0xf6, 0xee, 0x99, 0xff, 0x00, + 0x3f, 0x0d, 0xff, 0x00, 0x7e, 0xcd, 0x1e, 0xce, + 0x5d, 0x83, 0x9e, 0x3d, 0xcd, 0x2a, 0x2b, 0x37, + 0xfb, 0x77, 0x4c, 0xff, 0x00, 0x9f, 0x86, 0xff, + 0x00, 0xbf, 0x66, 0x8f, 0xed, 0xdd, 0x33, 0xfe, + 0x7e, 0x1b, 0xfe, 0xfd, 0x9a, 0x3d, 0x9c, 0xbb, + 0x07, 0x3c, 0x7b, 0x9a, 0x54, 0x56, 0x6f, 0xf6, + 0xee, 0x99, 0xff, 0x00, 0x3f, 0x0d, 0xff, 0x00, + 0x7e, 0xcd, 0x1f, 0xdb, 0xba, 0x67, 0xfc, 0xfc, + 0x37, 0xfd, 0xfb, 0x34, 0x7b, 0x39, 0x76, 0x0e, + 0x78, 0xf7, 0x34, 0xa8, 0xac, 0xdf, 0xed, 0xdd, + 0x33, 0xfe, 0x7e, 0x1b, 0xfe, 0xfd, 0x9a, 0x3f, + 0xb7, 0x74, 0xcf, 0xf9, 0xf8, 0x6f, 0xfb, 0xf6, + 0x68, 0xf6, 0x72, 0xec, 0x1c, 0xf1, 0xee, 0x69, + 0x51, 0x59, 0xbf, 0xdb, 0xba, 0x67, 0xfc, 0xfc, + 0x37, 0xfd, 0xfb, 0x34, 0x7f, 0x6e, 0xe9, 0x9f, + 0xf3, 0xf0, 0xdf, 0xf7, 0xec, 0xd1, 0xec, 0xe5, + 0xd8, 0x39, 0xe3, 0xdc, 0xd2, 0xa2, 0xb3, 0x7f, + 0xb7, 0x74, 0xcf, 0xf9, 0xf8, 0x6f, 0xfb, 0xf6, + 0x68, 0xfe, 0xdd, 0xd3, 0x3f, 0xe7, 0xe1, 0xbf, + 0xef, 0xd9, 0xa3, 0xd9, 0xcb, 0xb0, 0x73, 0xc7, + 0xb9, 0xa5, 0x45, 0x66, 0xff, 0x00, 0x6e, 0xe9, + 0x9f, 0xf3, 0xf0, 0xdf, 0xf7, 0xec, 0xd1, 0xfd, + 0xbb, 0xa6, 0x7f, 0xcf, 0xc3, 0x7f, 0xdf, 0xb3, + 0x47, 0xb3, 0x97, 0x60, 0xe7, 0x8f, 0x73, 0x4a, + 0x8a, 0xcd, 0x1a, 0xee, 0x98, 0x4f, 0xfc, 0x7c, + 0x30, 0xff, 0x00, 0xb6, 0x6d, 0x56, 0xed, 0xae, + 0xed, 0xae, 0xc1, 0xfb, 0x34, 0xeb, 0x21, 0x1d, + 0x40, 0xe0, 0xfe, 0x46, 0x93, 0x8c, 0x96, 0xe8, + 0x14, 0x93, 0xd9, 0x93, 0xd1, 0x49, 0x41, 0x20, + 0x0c, 0x92, 0x00, 0xa9, 0x28, 0x5a, 0x2a, 0x9c, + 0x97, 0xca, 0x0e, 0x23, 0x5d, 0xde, 0xe6, 0xa2, + 0xfb, 0x7c, 0x9f, 0xdc, 0x5a, 0x00, 0xd1, 0xa2, + 0xb3, 0xbe, 0xdf, 0x27, 0xf7, 0x16, 0x8f, 0xb7, + 0xc9, 0xfd, 0xc5, 0xa0, 0x0d, 0x1a, 0x2b, 0x3b, + 0xed, 0xf2, 0x7f, 0x71, 0x68, 0xfb, 0x7c, 0x9f, + 0xdc, 0x5a, 0x00, 0xd1, 0xa2, 0xb3, 0xbe, 0xdf, + 0x27, 0xf7, 0x16, 0x8f, 0xb7, 0xc9, 0xfd, 0xc5, + 0xa0, 0x0d, 0x1a, 0x2b, 0x3b, 0xed, 0xf2, 0x7f, + 0x71, 0x68, 0xfb, 0x7c, 0x9f, 0xdc, 0x5a, 0x00, + 0xd1, 0xa2, 0xb3, 0xbe, 0xdf, 0x27, 0xf7, 0x16, + 0x8f, 0xb7, 0xc9, 0xfd, 0xc5, 0xa0, 0x0d, 0x1a, + 0x2b, 0x3b, 0xed, 0xf2, 0x7f, 0x71, 0x68, 0xfb, + 0x7c, 0x9f, 0xdc, 0x5a, 0x00, 0xd1, 0xa2, 0xb3, + 0xbe, 0xdf, 0x27, 0xf7, 0x16, 0x8f, 0xb7, 0xc9, + 0xfd, 0xc5, 0xa0, 0x0d, 0x1a, 0x6b, 0xff, 0x00, + 0xab, 0x6f, 0xa5, 0x50, 0xfb, 0x7c, 0x9f, 0xdc, + 0x5a, 0x43, 0x7d, 0x21, 0x04, 0x14, 0x5e, 0x68, + 0x03, 0x4e, 0xdb, 0xfe, 0x3d, 0xa2, 0xff, 0x00, + 0x70, 0x7f, 0x2a, 0x81, 0x74, 0xdb, 0x35, 0xb8, + 0xbc, 0x9c, 0x40, 0x0c, 0x97, 0x8a, 0xab, 0x70, + 0x58, 0x92, 0x1c, 0x28, 0xda, 0x06, 0x0f, 0x1d, + 0x0d, 0x67, 0x8b, 0x87, 0x03, 0x00, 0xb0, 0x1e, + 0x81, 0xcd, 0x1f, 0x69, 0x93, 0xfb, 0xcf, 0xff, + 0x00, 0x7d, 0x9a, 0x00, 0x92, 0x3f, 0x0c, 0xe8, + 0xb1, 0x5b, 0x4d, 0x6c, 0x96, 0x20, 0x45, 0x31, + 0x5d, 0xe3, 0xcc, 0x6c, 0x9d, 0xa7, 0x2a, 0x33, + 0x9c, 0x80, 0x0f, 0x61, 0x53, 0xdc, 0x68, 0xba, + 0x75, 0xd7, 0xdb, 0x3c, 0xeb, 0x6d, 0xdf, 0x6d, + 0x28, 0x6e, 0x3e, 0x76, 0x1b, 0xf6, 0x63, 0x6f, + 0x7e, 0x31, 0x81, 0xd2, 0xaa, 0x7d, 0xa6, 0x4f, + 0xef, 0x3f, 0xfd, 0xf6, 0x68, 0xfb, 0x4c, 0x9f, + 0xde, 0x7f, 0xfb, 0xec, 0xd0, 0x04, 0x1f, 0xf0, + 0x8b, 0xda, 0xdd, 0x6b, 0x5a, 0x8d, 0xf6, 0xa3, + 0x04, 0x57, 0x11, 0xcf, 0x24, 0x6f, 0x00, 0xdc, + 0xd9, 0x5d, 0xaa, 0x01, 0xdc, 0x38, 0xcf, 0x23, + 0xa7, 0x22, 0xb4, 0x2e, 0x74, 0x2d, 0x2e, 0xeb, + 0x50, 0x5b, 0xf9, 0xec, 0xd1, 0xee, 0x54, 0xa9, + 0xde, 0x49, 0xc1, 0x23, 0xa6, 0x46, 0x70, 0x71, + 0xef, 0x55, 0xbe, 0xd3, 0x27, 0xf7, 0x9f, 0xfe, + 0xfb, 0x34, 0x7d, 0xa6, 0x4f, 0xef, 0x3f, 0xfd, + 0xf6, 0x68, 0x02, 0xd3, 0xe8, 0x7a, 0x64, 0x96, + 0x73, 0xd9, 0xbd, 0xa8, 0x68, 0x27, 0x98, 0xcf, + 0x22, 0x97, 0x6e, 0x5c, 0x9c, 0x96, 0xce, 0x72, + 0x39, 0xf4, 0xa8, 0xc7, 0x87, 0x34, 0x75, 0x8a, + 0xe6, 0x11, 0x64, 0xa2, 0x3b, 0x94, 0x54, 0x99, + 0x77, 0xb6, 0x1c, 0x2f, 0x4e, 0xfd, 0x7d, 0xfa, + 0xd4, 0x3f, 0x69, 0x93, 0xfb, 0xcf, 0xff, 0x00, + 0x7d, 0x9a, 0x3e, 0xd3, 0x27, 0xf7, 0x9f, 0xfe, + 0xfb, 0x34, 0x00, 0xe9, 0xbc, 0x2d, 0xa1, 0xce, + 0x73, 0x2d, 0x82, 0xb1, 0x31, 0x88, 0x89, 0x32, + 0x3e, 0x4a, 0x81, 0x81, 0xdf, 0xae, 0x3b, 0xf5, + 0xab, 0xc9, 0xa6, 0xd9, 0xc7, 0x2d, 0xdc, 0x8b, + 0x00, 0xdd, 0x76, 0x00, 0x9f, 0x71, 0x24, 0x38, + 0x0b, 0xb4, 0x70, 0x78, 0xe9, 0xc5, 0x67, 0xfd, + 0xa6, 0x4f, 0xef, 0x3f, 0xfd, 0xf6, 0x68, 0xfb, + 0x4c, 0x9f, 0xde, 0x7f, 0xfb, 0xec, 0xd0, 0x04, + 0x91, 0x78, 0x6b, 0x45, 0x86, 0xda, 0x6b, 0x74, + 0xb0, 0x4f, 0x2a, 0x60, 0x03, 0x82, 0xcc, 0xc4, + 0x81, 0xd3, 0x04, 0x9c, 0x8c, 0x7b, 0x55, 0xcd, + 0x3b, 0x4c, 0xb3, 0xd3, 0x22, 0x78, 0xec, 0xe1, + 0xf2, 0xd5, 0xdb, 0x73, 0x12, 0xc5, 0x8b, 0x1f, + 0x72, 0x49, 0x26, 0xb3, 0xfe, 0xd3, 0x27, 0xf7, + 0x9f, 0xfe, 0xfb, 0x34, 0x7d, 0xa6, 0x4f, 0xef, + 0x3f, 0xfd, 0xf6, 0x68, 0x03, 0x6e, 0x8a, 0xc4, + 0xfb, 0x4c, 0x9f, 0xde, 0x7f, 0xfb, 0xec, 0xd1, + 0xf6, 0x99, 0x3f, 0xbc, 0xff, 0x00, 0xf7, 0xd9, + 0xa0, 0x0d, 0xba, 0x2b, 0x13, 0xed, 0x32, 0x7f, + 0x79, 0xff, 0x00, 0xef, 0xb3, 0x47, 0xda, 0x64, + 0xfe, 0xf3, 0xff, 0x00, 0xdf, 0x66, 0x80, 0x34, + 0xe4, 0xff, 0x00, 0x8f, 0xc5, 0xff, 0x00, 0xae, + 0x67, 0xf9, 0x8a, 0x7d, 0x64, 0x7d, 0xa1, 0xf3, + 0x9c, 0xb6, 0x7d, 0x77, 0x9a, 0x5f, 0xb4, 0x3f, + 0xab, 0xff, 0x00, 0xdf, 0x66, 0x80, 0x2c, 0x4d, + 0xa4, 0x58, 0x4f, 0x77, 0xf6, 0xa9, 0x20, 0xcc, + 0xb9, 0x56, 0x3f, 0x3b, 0x05, 0x62, 0x3a, 0x16, + 0x5c, 0xe0, 0x91, 0xea, 0x47, 0x6a, 0x23, 0xd1, + 0xf4, 0xf8, 0xaf, 0x7e, 0xd8, 0x96, 0xe0, 0x4d, + 0xb8, 0xb8, 0x3b, 0xdb, 0x68, 0x63, 0xd5, 0x82, + 0xe7, 0x00, 0x9f, 0x50, 0x2a, 0xbf, 0xda, 0x1f, + 0xd5, 0xff, 0x00, 0xef, 0xb3, 0x47, 0xda, 0x1f, + 0xd5, 0xff, 0x00, 0xef, 0xb3, 0x40, 0x1a, 0xc4, + 0x64, 0x62, 0xb3, 0xad, 0x74, 0x3d, 0x32, 0xd2, + 0xe5, 0x6e, 0x20, 0xb5, 0x09, 0x22, 0xe7, 0x67, + 0xcc, 0xc5, 0x53, 0x3d, 0x76, 0xa9, 0x38, 0x5f, + 0xc0, 0x54, 0x5f, 0x68, 0x7f, 0x57, 0xff, 0x00, + 0xbe, 0xcd, 0x1f, 0x68, 0x7f, 0x57, 0xff, 0x00, + 0xbe, 0xcd, 0x00, 0x6b, 0x54, 0x4b, 0xff, 0x00, + 0x1f, 0x4f, 0xfe, 0xe8, 0xfe, 0xb5, 0x9d, 0xf6, + 0x87, 0xf5, 0x7f, 0xfb, 0xec, 0xd2, 0x79, 0xed, + 0x9c, 0xe5, 0xb3, 0xeb, 0xb8, 0xd0, 0x05, 0xeb, + 0xfb, 0x0b, 0x7d, 0x46, 0xdf, 0xc8, 0xba, 0x57, + 0x68, 0xb3, 0x9c, 0x24, 0xac, 0x99, 0xe3, 0x1c, + 0x95, 0x23, 0x8e, 0x7a, 0x55, 0x63, 0xa1, 0x69, + 0xa6, 0xd6, 0x3b, 0x66, 0x86, 0x43, 0x1c, 0x64, + 0xb2, 0x66, 0x77, 0x2c, 0xb9, 0x18, 0x20, 0x36, + 0xec, 0xe3, 0xdb, 0x38, 0xa8, 0xfe, 0xd0, 0xfe, + 0xaf, 0xff, 0x00, 0x7d, 0x9a, 0x3e, 0xd0, 0xfe, + 0xaf, 0xff, 0x00, 0x7d, 0x9a, 0x00, 0xb1, 0x73, + 0xa4, 0x58, 0x5d, 0x45, 0x0c, 0x72, 0xdb, 0xe1, + 0x60, 0x5d, 0xb1, 0xf9, 0x6e, 0xd1, 0x95, 0x5f, + 0x40, 0x54, 0x8e, 0x38, 0x1c, 0x55, 0xb8, 0x62, + 0x8e, 0x08, 0x52, 0x18, 0x51, 0x63, 0x8a, 0x35, + 0x0a, 0xa8, 0xa3, 0x00, 0x0f, 0x4a, 0xcc, 0xfb, + 0x43, 0xfa, 0xbf, 0xfd, 0xf6, 0x68, 0xfb, 0x43, + 0xfa, 0xbf, 0xfd, 0xf6, 0x68, 0x02, 0x5b, 0xad, + 0x0f, 0x4c, 0xbb, 0xb9, 0x37, 0x13, 0xda, 0x86, + 0x91, 0xb1, 0xbf, 0xe6, 0x60, 0x1f, 0x1d, 0x37, + 0x28, 0x38, 0x6f, 0xc6, 0xb4, 0x40, 0xc0, 0xc0, + 0x15, 0x94, 0xb7, 0x1c, 0xfc, 0xe6, 0x4c, 0x7b, + 0x48, 0x6a, 0xe4, 0x4b, 0x1c, 0xab, 0xb9, 0x25, + 0x90, 0xff, 0x00, 0xc0, 0xcd, 0x00, 0x47, 0x37, + 0xf1, 0xff, 0x00, 0xd7, 0x64, 0xfe, 0x62, 0x8a, + 0x74, 0xf1, 0x88, 0xe2, 0x5c, 0x12, 0x73, 0x2a, + 0x12, 0x49, 0xcf, 0x71, 0x45, 0x00, 0x3e, 0xd3, + 0xfd, 0x5b, 0xff, 0x00, 0xd7, 0x47, 0xff, 0x00, + 0xd0, 0x8d, 0x4f, 0x55, 0xed, 0x3f, 0xd5, 0xbf, + 0xfd, 0x74, 0x7f, 0xfd, 0x08, 0xd4, 0xf4, 0x00, + 0xb5, 0x8b, 0xe2, 0x1d, 0x41, 0xed, 0xa2, 0x5b, + 0x78, 0x58, 0xac, 0xb2, 0x8c, 0xb3, 0x0e, 0xa1, + 0x7f, 0xfa, 0xf5, 0xb3, 0x5c, 0xaf, 0x8a, 0x3f, + 0xe4, 0x26, 0xbf, 0xf5, 0xc9, 0x7f, 0xad, 0x6b, + 0x45, 0x27, 0x3d, 0x4c, 0xea, 0xb6, 0xa3, 0xa1, + 0x8d, 0x45, 0x14, 0x57, 0x79, 0xc6, 0x14, 0x51, + 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, + 0x4e, 0x8a, 0x36, 0x96, 0x54, 0x8d, 0x06, 0x59, + 0xc8, 0x51, 0xf5, 0x34, 0x00, 0xda, 0x2b, 0x6f, + 0x5a, 0xb0, 0xb4, 0x82, 0xdc, 0x49, 0x66, 0xb8, + 0xf2, 0xa5, 0xf2, 0x65, 0x39, 0x27, 0x2d, 0x80, + 0x73, 0x44, 0x51, 0x69, 0xd6, 0xfa, 0x35, 0xbd, + 0xd5, 0xcd, 0x99, 0x9e, 0x49, 0x1d, 0x94, 0x91, + 0x23, 0x2f, 0x42, 0x6a, 0x3d, 0xa2, 0xb5, 0xd1, + 0x7c, 0x8e, 0xf6, 0x31, 0x28, 0xae, 0x85, 0x34, + 0xeb, 0x09, 0xee, 0x74, 0xf9, 0xa2, 0x89, 0x96, + 0x0b, 0x9d, 0xc1, 0xa2, 0x66, 0x3c, 0x10, 0x0f, + 0x7e, 0xb5, 0x0b, 0xe9, 0xb0, 0x0d, 0x79, 0x21, + 0x0a, 0x45, 0xa3, 0x27, 0x9b, 0x8c, 0x9f, 0xb9, + 0x8c, 0xf5, 0xfa, 0x8a, 0x5e, 0xd1, 0x07, 0x23, + 0x31, 0x28, 0xad, 0x7d, 0x42, 0xc2, 0xde, 0x1d, + 0x56, 0x74, 0x55, 0x31, 0xdb, 0xc4, 0xaa, 0x4a, + 0x83, 0x92, 0x49, 0xc7, 0x00, 0x9f, 0x53, 0x4f, + 0xb8, 0xd3, 0xe1, 0x19, 0x8f, 0xcb, 0x85, 0x1b, + 0xcc, 0xf2, 0x83, 0xc5, 0x23, 0x36, 0xd7, 0xec, + 0x18, 0x37, 0xaf, 0xa8, 0xa7, 0xed, 0x16, 0x81, + 0xc8, 0xcc, 0x5a, 0x28, 0x20, 0x83, 0x82, 0x39, + 0xa2, 0xac, 0x80, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xa7, 0x47, 0x23, 0xc5, 0x22, + 0xc9, 0x1b, 0x15, 0x75, 0x39, 0x04, 0x76, 0xa6, + 0xd1, 0x40, 0x1d, 0xce, 0x97, 0x79, 0xf6, 0xeb, + 0x04, 0x9d, 0xb1, 0xe6, 0x03, 0xb5, 0xf1, 0xfd, + 0xe1, 0x49, 0x74, 0xcd, 0x2c, 0xcb, 0x6e, 0x87, + 0x19, 0xeb, 0x54, 0x3c, 0x2c, 0x7f, 0xd0, 0x27, + 0x1f, 0xf4, 0xd7, 0xfa, 0x55, 0xb9, 0x0e, 0x2e, + 0x6e, 0x0f, 0xa4, 0x6d, 0xff, 0x00, 0xa0, 0xd7, + 0x9d, 0x51, 0x72, 0xc9, 0xa4, 0x77, 0x41, 0xde, + 0x29, 0x90, 0xb5, 0xd4, 0x10, 0x92, 0xb1, 0x44, + 0x92, 0x63, 0xab, 0xb8, 0xce, 0x7f, 0x0a, 0x4f, + 0xb7, 0x8f, 0xf9, 0xe1, 0x07, 0xfd, 0xf1, 0x58, + 0x5f, 0x69, 0xf7, 0xa3, 0xed, 0x3e, 0xf5, 0xc4, + 0xe5, 0x27, 0xd4, 0x0d, 0xdf, 0xb7, 0x8f, 0xf9, + 0xe1, 0x07, 0xfd, 0xf1, 0x47, 0xdb, 0xc7, 0xfc, + 0xf0, 0x83, 0xfe, 0xf8, 0xac, 0x2f, 0xb4, 0xfb, + 0xd1, 0xf6, 0x9f, 0x7a, 0x5c, 0xd2, 0xee, 0x06, + 0xef, 0xdb, 0xc7, 0xfc, 0xf0, 0x83, 0xfe, 0xf8, + 0xa3, 0xed, 0xe3, 0xfe, 0x78, 0x41, 0xff, 0x00, + 0x7c, 0x56, 0x17, 0xda, 0x7d, 0xe8, 0xfb, 0x4f, + 0xbd, 0x1c, 0xd2, 0xee, 0x06, 0xef, 0xdb, 0xc7, + 0xfc, 0xf0, 0x83, 0xfe, 0xf8, 0xa3, 0xed, 0xe3, + 0xfe, 0x78, 0x41, 0xff, 0x00, 0x7c, 0x56, 0x17, + 0xda, 0x7d, 0xea, 0xfe, 0x9b, 0x6a, 0xda, 0x82, + 0xcc, 0x56, 0x5d, 0x86, 0x30, 0x30, 0x36, 0xe7, + 0x39, 0xcf, 0xf8, 0x53, 0x4e, 0x6f, 0xa8, 0x17, + 0xbe, 0xde, 0x3f, 0xe7, 0x84, 0x1f, 0xf7, 0xc5, + 0x1f, 0x6f, 0x1f, 0xf3, 0xc2, 0x0f, 0xfb, 0xe2, + 0xa8, 0xe9, 0xf6, 0xad, 0x7b, 0x1c, 0xcf, 0xe6, + 0xf9, 0x62, 0x21, 0xfd, 0xdc, 0xe4, 0xf3, 0xfe, + 0x15, 0x51, 0x5a, 0x66, 0x88, 0xca, 0xb1, 0x39, + 0x8c, 0x75, 0x70, 0xa7, 0x03, 0xf1, 0xa2, 0xf3, + 0xee, 0x06, 0xcf, 0xdb, 0xc7, 0xfc, 0xf0, 0x83, + 0xfe, 0xf8, 0xa3, 0xed, 0xe3, 0xfe, 0x78, 0x41, + 0xff, 0x00, 0x7c, 0x56, 0x3a, 0x79, 0xee, 0x14, + 0xa4, 0x32, 0x30, 0x6c, 0xed, 0x21, 0x09, 0xce, + 0x3a, 0xe2, 0x90, 0xb4, 0xa2, 0x3f, 0x30, 0xc6, + 0xe1, 0x33, 0x8d, 0xdb, 0x4e, 0x33, 0xf5, 0xa2, + 0xf2, 0xee, 0x06, 0xcf, 0xdb, 0xc7, 0xfc, 0xf0, + 0x83, 0xfe, 0xf8, 0xa3, 0xed, 0xe3, 0xfe, 0x78, + 0x41, 0xff, 0x00, 0x7c, 0x56, 0x32, 0x19, 0xa4, + 0x8c, 0xc8, 0x91, 0x48, 0xc8, 0x3a, 0xb0, 0x52, + 0x40, 0xa0, 0x19, 0xd9, 0x03, 0xac, 0x52, 0x14, + 0x20, 0x90, 0xc1, 0x4e, 0x30, 0x3a, 0xd1, 0x79, + 0x77, 0x03, 0x67, 0xed, 0xe3, 0xfe, 0x78, 0x41, + 0xff, 0x00, 0x7c, 0x51, 0xf6, 0xf1, 0xff, 0x00, + 0x3c, 0x20, 0xff, 0x00, 0xbe, 0x2b, 0x18, 0x99, + 0x84, 0xa2, 0x23, 0x14, 0x82, 0x46, 0xe8, 0xa5, + 0x4e, 0x4f, 0xe1, 0x4c, 0x69, 0xd9, 0x58, 0xab, + 0x02, 0x18, 0x1c, 0x10, 0x7a, 0x8a, 0x57, 0x97, + 0x70, 0x37, 0x3e, 0xde, 0x3f, 0xe7, 0x84, 0x1f, + 0xf7, 0xc5, 0x1f, 0x6f, 0x1f, 0xf3, 0xc2, 0x0f, + 0xfb, 0xe2, 0xb0, 0xbe, 0xd3, 0xef, 0x47, 0xda, + 0x7d, 0xe8, 0xe6, 0x97, 0x70, 0x37, 0x7e, 0xde, + 0x3f, 0xe7, 0x84, 0x1f, 0xf7, 0xc5, 0x1f, 0x6f, + 0x1f, 0xf3, 0xc2, 0x0f, 0xfb, 0xe2, 0xb0, 0xbe, + 0xd3, 0xef, 0x47, 0xda, 0x7d, 0xe8, 0xe6, 0x97, + 0x70, 0x37, 0x7e, 0xde, 0x3f, 0xe7, 0x84, 0x1f, + 0xf7, 0xc5, 0x1f, 0x6f, 0x43, 0xc3, 0x5b, 0xc2, + 0x47, 0xb2, 0xe2, 0xb0, 0xbe, 0xd3, 0xef, 0x47, + 0xda, 0x7d, 0xe8, 0xe6, 0x97, 0x70, 0x37, 0xa4, + 0x48, 0xda, 0x35, 0x9a, 0x1c, 0xf9, 0x6c, 0x70, + 0x41, 0xfe, 0x13, 0xe9, 0x51, 0x54, 0x7a, 0x64, + 0x9e, 0x65, 0x85, 0xc7, 0x7c, 0x3a, 0xff, 0x00, + 0x5a, 0x9a, 0x21, 0x99, 0x50, 0x1f, 0xef, 0x0a, + 0xe9, 0x8b, 0xba, 0xb9, 0x44, 0xa5, 0x61, 0xb7, + 0x00, 0xcf, 0x96, 0x90, 0x8c, 0xf9, 0x60, 0xe3, + 0x1f, 0x53, 0x49, 0xf6, 0x8b, 0x4f, 0xf9, 0xf6, + 0x3f, 0xf7, 0xf0, 0xd6, 0x5d, 0xfd, 0xc1, 0xfb, + 0x7d, 0xc0, 0x27, 0xa4, 0x8c, 0x3f, 0x5a, 0xaf, + 0xf6, 0x8f, 0x7a, 0xc2, 0x53, 0x95, 0xf4, 0x15, + 0xcd, 0xcf, 0xb4, 0x5a, 0x7f, 0xcf, 0xb1, 0xff, + 0x00, 0xbf, 0x86, 0x8f, 0xb4, 0x5a, 0x7f, 0xcf, + 0xb1, 0xff, 0x00, 0xbf, 0x86, 0xb0, 0xfe, 0xd1, + 0xef, 0x5a, 0x51, 0xe9, 0xf3, 0xbc, 0x71, 0x3f, + 0x9f, 0x6e, 0xbe, 0x6a, 0x86, 0x55, 0x67, 0x20, + 0x9c, 0xfe, 0x14, 0x29, 0x4d, 0x8b, 0x52, 0xd7, + 0xda, 0x2d, 0x3f, 0xe7, 0xd8, 0xff, 0x00, 0xdf, + 0xc3, 0x47, 0xda, 0x2d, 0x3f, 0xe7, 0xd8, 0xff, + 0x00, 0xdf, 0xc3, 0x58, 0xf3, 0xb4, 0x96, 0xf3, + 0x34, 0x32, 0x8d, 0xae, 0xbd, 0x46, 0x6a, 0x3f, + 0xb4, 0x7b, 0xd2, 0xe7, 0x9f, 0x70, 0xb9, 0xb9, + 0xf6, 0x8b, 0x4f, 0xf9, 0xf6, 0x3f, 0xf7, 0xf0, + 0xd1, 0xf6, 0x8b, 0x4f, 0xf9, 0xf6, 0x3f, 0xf7, + 0xf0, 0xd6, 0x1f, 0xda, 0x3d, 0xe8, 0xfb, 0x47, + 0xbd, 0x1c, 0xf3, 0xee, 0x17, 0x37, 0x3e, 0xd1, + 0x69, 0xff, 0x00, 0x3e, 0xc7, 0xfe, 0xfe, 0x1a, + 0x3e, 0xd1, 0x69, 0xff, 0x00, 0x3e, 0xc7, 0xfe, + 0xfe, 0x1a, 0xc3, 0xfb, 0x47, 0xbd, 0x1f, 0x68, + 0xf7, 0xa3, 0x9e, 0x7d, 0xc2, 0xe6, 0xe7, 0xda, + 0x2d, 0x3f, 0xe7, 0xd8, 0xff, 0x00, 0xdf, 0xc3, + 0x47, 0xda, 0x2d, 0x3f, 0xe7, 0xd8, 0xff, 0x00, + 0xdf, 0xc3, 0x59, 0xf7, 0x16, 0xf3, 0xdb, 0xc4, + 0x64, 0x76, 0x8c, 0xed, 0x20, 0x3a, 0xab, 0x64, + 0xa6, 0x7a, 0x66, 0xa0, 0xb7, 0x32, 0x5c, 0xcc, + 0xb1, 0x44, 0x37, 0x3b, 0x74, 0x14, 0xf9, 0xa6, + 0x1a, 0x9a, 0xff, 0x00, 0x68, 0xb4, 0xff, 0x00, + 0x9f, 0x63, 0xff, 0x00, 0x7f, 0x0d, 0x1f, 0x68, + 0xb4, 0xff, 0x00, 0x9f, 0x63, 0xff, 0x00, 0x7f, + 0x0d, 0x52, 0xb8, 0xb1, 0xb9, 0x82, 0x16, 0x97, + 0x74, 0x72, 0x2a, 0x7d, 0xff, 0x00, 0x2d, 0xb2, + 0x57, 0xeb, 0x50, 0xdd, 0x29, 0xb6, 0x8e, 0xdd, + 0x8c, 0x9b, 0xbc, 0xe8, 0xc3, 0xf4, 0xc6, 0x28, + 0xe6, 0x9a, 0x1e, 0xa6, 0x9f, 0xda, 0x2d, 0x3f, + 0xe7, 0xd8, 0xff, 0x00, 0xdf, 0xc3, 0x47, 0xda, + 0x2d, 0x3f, 0xe7, 0xd8, 0xff, 0x00, 0xdf, 0xc3, + 0x58, 0x7f, 0x68, 0xf7, 0xa3, 0xed, 0x1e, 0xf4, + 0xb9, 0xe7, 0xdc, 0x57, 0x37, 0x3e, 0xd1, 0x69, + 0xff, 0x00, 0x3e, 0xc7, 0xfe, 0xfe, 0x1a, 0x3e, + 0xd1, 0x69, 0xff, 0x00, 0x3e, 0xc7, 0xfe, 0xfe, + 0x1a, 0xcc, 0xbf, 0x53, 0x67, 0x72, 0x61, 0x32, + 0x6f, 0xe0, 0x1c, 0xe3, 0x1d, 0x6a, 0x39, 0x65, + 0x8d, 0x16, 0x33, 0x1c, 0xde, 0x61, 0x65, 0xcb, + 0x0d, 0xb8, 0xda, 0x7d, 0x3d, 0xe9, 0xf3, 0x4f, + 0xb8, 0x1a, 0xff, 0x00, 0x68, 0xb4, 0xff, 0x00, + 0x9f, 0x63, 0xff, 0x00, 0x7f, 0x0d, 0x1f, 0x68, + 0xb4, 0xff, 0x00, 0x9f, 0x63, 0xff, 0x00, 0x7f, + 0x0d, 0x61, 0xfd, 0xa3, 0xde, 0x8f, 0xb4, 0x7b, + 0xd2, 0xe7, 0x9f, 0x70, 0xb9, 0xb9, 0xf6, 0x8b, + 0x4f, 0xf9, 0xf6, 0x3f, 0xf7, 0xf0, 0xd1, 0xf6, + 0x8b, 0x4f, 0xf9, 0xf6, 0x3f, 0xf7, 0xf0, 0xd6, + 0x1f, 0xda, 0x3d, 0xe8, 0xfb, 0x47, 0xbd, 0x1c, + 0xf3, 0xee, 0x17, 0x37, 0x54, 0x5b, 0xdc, 0x1d, + 0xb1, 0x66, 0x39, 0x3b, 0x2b, 0x1c, 0x83, 0xf8, + 0xd3, 0x60, 0x91, 0xa0, 0x9b, 0x27, 0x23, 0x9c, + 0x30, 0xac, 0x65, 0xba, 0x2a, 0xc1, 0x94, 0xe0, + 0x83, 0x91, 0x5b, 0x77, 0xa0, 0x0b, 0xb9, 0x31, + 0xeb, 0x5b, 0x53, 0x93, 0x6b, 0x51, 0xa2, 0xed, + 0xdf, 0xfa, 0xb4, 0xff, 0x00, 0xae, 0x89, 0xff, + 0x00, 0xa1, 0x0a, 0x29, 0x92, 0x9c, 0xda, 0xc2, + 0x4f, 0xf7, 0xa3, 0xfe, 0x62, 0x8a, 0xd0, 0x63, + 0xad, 0x7f, 0xd5, 0xbf, 0xfd, 0x74, 0x7f, 0xfd, + 0x08, 0xd4, 0xf5, 0x05, 0xaf, 0xfa, 0xb7, 0xff, + 0x00, 0xae, 0x8f, 0xff, 0x00, 0xa1, 0x1a, 0x9a, + 0x80, 0x16, 0xb9, 0x5f, 0x14, 0x7f, 0xc8, 0x4d, + 0x3f, 0xeb, 0x92, 0xff, 0x00, 0x5a, 0xea, 0x6b, + 0x96, 0xf1, 0x47, 0xfc, 0x84, 0xd3, 0xfe, 0xb8, + 0xaf, 0xf5, 0xad, 0xe8, 0x7c, 0x66, 0x55, 0xbe, + 0x13, 0x1a, 0x8a, 0x28, 0xae, 0xd3, 0x90, 0x28, + 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x2b, + 0x53, 0x40, 0x89, 0x5b, 0x50, 0xf3, 0xe4, 0xff, + 0x00, 0x57, 0x6e, 0x86, 0x56, 0xfc, 0x2b, 0x2e, + 0x8a, 0x52, 0x57, 0x56, 0x1a, 0x76, 0x77, 0x3a, + 0x38, 0x2e, 0x2d, 0x75, 0x2b, 0x7b, 0xeb, 0x58, + 0x2d, 0x5a, 0x19, 0x24, 0x43, 0x2e, 0x4c, 0x85, + 0xb7, 0x30, 0x39, 0xa6, 0xa5, 0xe3, 0x59, 0xf8, + 0x76, 0xcd, 0xc4, 0x30, 0xcb, 0xba, 0x46, 0x18, + 0x95, 0x77, 0x0e, 0xa6, 0xb9, 0xea, 0x2a, 0x3d, + 0x9a, 0x2f, 0x9d, 0x9d, 0x66, 0x5e, 0x7d, 0x5f, + 0x4d, 0xbb, 0x8d, 0xb3, 0x6b, 0x22, 0x90, 0x8a, + 0x07, 0x08, 0x76, 0x9c, 0x8f, 0xd2, 0xab, 0x3c, + 0xe9, 0xfd, 0x89, 0x2d, 0xce, 0x7f, 0x7c, 0x81, + 0xad, 0x7e, 0xa0, 0xb6, 0x7f, 0x95, 0x73, 0x94, + 0x52, 0xf6, 0x41, 0xed, 0x0d, 0xfd, 0x59, 0x91, + 0xb5, 0x9b, 0xa8, 0x19, 0x82, 0xef, 0x11, 0x95, + 0x24, 0xe0, 0x6e, 0x00, 0x70, 0x7f, 0x5a, 0x7d, + 0xe4, 0xa6, 0x53, 0xe6, 0xcf, 0x0b, 0x5b, 0xc5, + 0x1c, 0xe6, 0x51, 0x95, 0x0b, 0xe6, 0x8e, 0xdf, + 0x56, 0xf7, 0xf7, 0xae, 0x76, 0x8a, 0x6a, 0x9e, + 0xc2, 0xe7, 0x15, 0x98, 0xb3, 0x33, 0x1e, 0xa4, + 0xe6, 0x92, 0x8a, 0x2b, 0x42, 0x02, 0x8a, 0x28, + 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, + 0xa0, 0x0e, 0xa7, 0xc2, 0xdf, 0xf1, 0xe1, 0x3f, + 0xfd, 0x75, 0x1f, 0xca, 0xac, 0xca, 0x33, 0x3d, + 0xc8, 0xff, 0x00, 0xa6, 0x4d, 0xff, 0x00, 0xa0, + 0xd5, 0x6f, 0x0b, 0x7f, 0xc7, 0x85, 0xc7, 0xfd, + 0x74, 0x1f, 0xca, 0xad, 0x9f, 0x9a, 0xf6, 0x44, + 0xce, 0x37, 0xa9, 0x50, 0x7e, 0xa2, 0xbc, 0xfa, + 0xdf, 0x1b, 0x3b, 0x69, 0xfc, 0x28, 0xe4, 0xbc, + 0x86, 0xf7, 0xa3, 0xc8, 0x6f, 0x7a, 0xd7, 0x6b, + 0x52, 0xac, 0x55, 0x97, 0x04, 0x70, 0x45, 0x27, + 0xd9, 0xbd, 0xab, 0xcf, 0xb8, 0xcc, 0x9f, 0x21, + 0xbd, 0xe8, 0xf2, 0x1b, 0xde, 0xb5, 0xbe, 0xcd, + 0xed, 0x47, 0xd9, 0xbd, 0xa8, 0xb8, 0x19, 0x3e, + 0x43, 0x7b, 0xd1, 0xe4, 0x37, 0xbd, 0x6b, 0x7d, + 0x9b, 0xda, 0x8f, 0xb3, 0x7b, 0x51, 0x70, 0x32, + 0x7c, 0x86, 0xf7, 0xad, 0x8d, 0x14, 0xb5, 0xb5, + 0xa5, 0xec, 0xbc, 0xfc, 0xa6, 0x23, 0xf9, 0x35, + 0x37, 0xec, 0xde, 0xd4, 0xf4, 0x59, 0x23, 0x8e, + 0x48, 0xd4, 0xe1, 0x24, 0xc6, 0xe1, 0x8e, 0xb8, + 0xa6, 0xa5, 0x66, 0x06, 0x94, 0x70, 0xad, 0xa4, + 0xad, 0x02, 0x1e, 0x26, 0x32, 0xcc, 0x71, 0xd8, + 0x63, 0x03, 0xfa, 0xd3, 0x3c, 0xc8, 0xad, 0x8d, + 0x82, 0xa8, 0xba, 0x71, 0xe4, 0x0c, 0x45, 0x08, + 0x05, 0x1f, 0x8e, 0x72, 0x3b, 0x9a, 0xa9, 0xe6, + 0x5c, 0x79, 0x8b, 0x27, 0x99, 0xf3, 0x2a, 0x6c, + 0x07, 0x03, 0xee, 0xfa, 0x52, 0xc7, 0x35, 0xd4, + 0x70, 0xf9, 0x29, 0x2b, 0x08, 0xf1, 0xd2, 0xaf, + 0xda, 0x21, 0xdc, 0x74, 0x4f, 0x24, 0x36, 0x1a, + 0x6a, 0xc2, 0xcc, 0x8a, 0x6e, 0x1b, 0x3e, 0xa5, + 0x77, 0x74, 0x35, 0x25, 0xc3, 0x49, 0x2f, 0xf6, + 0xc4, 0x4e, 0xc4, 0xc6, 0x00, 0x28, 0xbd, 0x97, + 0xe9, 0x55, 0x87, 0x9c, 0x12, 0x34, 0xdd, 0xf2, + 0xc4, 0x77, 0x20, 0xc0, 0xe0, 0xd2, 0x96, 0x9c, + 0x99, 0x49, 0x7e, 0x66, 0xfb, 0xfc, 0x0e, 0x69, + 0x7b, 0x44, 0x17, 0x27, 0x2d, 0x71, 0x0d, 0xde, + 0x93, 0x15, 0xb3, 0x3a, 0xc0, 0x63, 0x4c, 0xaa, + 0xf4, 0x6e, 0x7e, 0x6c, 0xfe, 0x14, 0xdd, 0x59, + 0x9a, 0x1d, 0x39, 0x23, 0xb6, 0x62, 0x8a, 0xd3, + 0x4a, 0x0e, 0xde, 0x38, 0xdc, 0x78, 0xfa, 0x53, + 0x22, 0x9a, 0xea, 0x18, 0xbc, 0xa8, 0xe6, 0x65, + 0x4f, 0x4f, 0x4a, 0x8d, 0xd6, 0x47, 0x85, 0x22, + 0x63, 0x94, 0x42, 0x4a, 0x8c, 0x74, 0xcd, 0x1e, + 0xd1, 0x58, 0x2e, 0x59, 0xb5, 0x51, 0x24, 0x56, + 0xba, 0x93, 0xf2, 0xd6, 0xb0, 0x3a, 0x36, 0x7b, + 0x91, 0xf7, 0x7f, 0x9d, 0x73, 0xad, 0x13, 0xb3, + 0x16, 0x62, 0x49, 0x27, 0x24, 0xd7, 0x44, 0xc2, + 0x38, 0xb4, 0xe3, 0x6d, 0x13, 0x97, 0x32, 0x30, + 0x67, 0xe3, 0x00, 0x7b, 0x55, 0x2f, 0xb3, 0x7b, + 0x52, 0x94, 0x84, 0x64, 0xf9, 0x0d, 0xef, 0x47, + 0x90, 0xde, 0xf5, 0xad, 0xf6, 0x6f, 0x6a, 0x3e, + 0xcd, 0xed, 0x53, 0x70, 0x32, 0x7c, 0x86, 0xf7, + 0xa3, 0xc8, 0x6f, 0x7a, 0xd6, 0xfb, 0x37, 0xb5, + 0x1f, 0x66, 0xf6, 0xa2, 0xe0, 0x64, 0xf9, 0x0d, + 0xef, 0x47, 0x90, 0xde, 0xf5, 0xad, 0xf6, 0x6f, + 0x6a, 0x3e, 0xcd, 0xed, 0x45, 0xc0, 0x93, 0x46, + 0x42, 0x96, 0x17, 0x59, 0xee, 0xe9, 0xfd, 0x6a, + 0xd4, 0x3f, 0xeb, 0x93, 0xfd, 0xe1, 0x4b, 0x6f, + 0x11, 0x82, 0xc1, 0xf7, 0x70, 0x65, 0x71, 0xb4, + 0x7b, 0x0e, 0xf4, 0x91, 0x10, 0x25, 0x42, 0x78, + 0x01, 0x85, 0x74, 0xc3, 0xe1, 0x29, 0x18, 0x5a, + 0x8a, 0x39, 0xd4, 0xae, 0x8e, 0x7f, 0xe5, 0xb3, + 0xff, 0x00, 0xe8, 0x46, 0xab, 0xec, 0x7f, 0x5a, + 0xdb, 0xbe, 0xb6, 0x3f, 0x6d, 0x9c, 0x91, 0xd5, + 0xcb, 0x7e, 0x67, 0x35, 0x5f, 0xec, 0xfe, 0xd5, + 0xce, 0xde, 0xa4, 0x99, 0x9b, 0x1f, 0xd6, 0xba, + 0x1b, 0xa8, 0x2c, 0xe4, 0xb6, 0xd3, 0x9a, 0xea, + 0xe9, 0xe1, 0x2b, 0x02, 0xfc, 0xaa, 0x84, 0xee, + 0xe3, 0xd7, 0xb5, 0x51, 0xfb, 0x3f, 0xb5, 0x4f, + 0x70, 0x64, 0xb8, 0x48, 0x95, 0xd5, 0x40, 0x89, + 0x36, 0x2e, 0x3d, 0x29, 0xa9, 0x24, 0x04, 0xff, + 0x00, 0x69, 0x13, 0x1d, 0x4b, 0x53, 0x85, 0x07, + 0x98, 0x81, 0x16, 0x2d, 0xc3, 0x3b, 0x47, 0x4c, + 0xd4, 0xc3, 0x75, 0xde, 0x95, 0xb9, 0xc0, 0x17, + 0x17, 0x10, 0x3e, 0xec, 0x0c, 0x6f, 0x28, 0x78, + 0xaa, 0x56, 0xad, 0x25, 0xab, 0x31, 0x40, 0xa5, + 0x5c, 0x61, 0x95, 0x86, 0x43, 0x0f, 0x7a, 0x9b, + 0xed, 0x57, 0x1f, 0x69, 0x8e, 0x70, 0x10, 0x79, + 0x63, 0x08, 0x80, 0x61, 0x40, 0xfa, 0x55, 0x29, + 0xae, 0xa3, 0x2d, 0x98, 0xd5, 0xee, 0x6d, 0x98, + 0x7f, 0xab, 0xb1, 0x66, 0x46, 0xfa, 0x08, 0xc1, + 0xfe, 0x60, 0xd4, 0x16, 0xee, 0x96, 0xd6, 0x16, + 0xb2, 0xb5, 0xca, 0xc2, 0x66, 0x76, 0x79, 0x73, + 0x11, 0x7f, 0x37, 0x9e, 0x9e, 0xd5, 0x0a, 0x4f, + 0x3a, 0x2d, 0xc8, 0x01, 0x7f, 0xd2, 0x33, 0xbf, + 0x23, 0xa7, 0x5e, 0x9f, 0x9d, 0x2d, 0xbd, 0xc4, + 0xd0, 0x44, 0x23, 0x09, 0x1b, 0xaa, 0x9d, 0xc9, + 0xbd, 0x73, 0xb4, 0xfa, 0x8a, 0x3d, 0xa2, 0x0b, + 0x8a, 0xb3, 0x0b, 0x5d, 0x32, 0xee, 0x6b, 0x3d, + 0xa4, 0x7d, 0xab, 0x31, 0x12, 0xbf, 0x77, 0x20, + 0x76, 0x35, 0x8f, 0x63, 0x66, 0xf7, 0x97, 0x89, + 0x09, 0x7d, 0xa1, 0x89, 0x25, 0xb1, 0xd0, 0x75, + 0xad, 0x36, 0x92, 0x57, 0xb7, 0x92, 0x16, 0xc3, + 0x07, 0x93, 0xcc, 0x66, 0x3d, 0x73, 0x51, 0xc0, + 0xaf, 0x6f, 0x32, 0xcb, 0x19, 0xc3, 0xaf, 0x43, + 0x52, 0xe4, 0x9d, 0x84, 0x5c, 0xbf, 0x41, 0x7b, + 0x6e, 0xf3, 0x40, 0xc2, 0x3b, 0x57, 0x43, 0x24, + 0xaf, 0x8f, 0x99, 0x9d, 0x78, 0x00, 0xfe, 0x95, + 0x47, 0x40, 0x57, 0x12, 0xdd, 0xed, 0x27, 0xcd, + 0x36, 0xed, 0xb3, 0xeb, 0x57, 0x85, 0xec, 0xe0, + 0x15, 0x58, 0x60, 0x58, 0xcf, 0xde, 0x8c, 0x47, + 0xf2, 0xb7, 0xb9, 0xaa, 0x91, 0x2c, 0x90, 0xcc, + 0x26, 0x88, 0xed, 0x70, 0x72, 0x30, 0x29, 0xb9, + 0xab, 0xdc, 0x66, 0x6d, 0xbc, 0x77, 0x84, 0x4d, + 0xf6, 0x73, 0x26, 0x36, 0x1f, 0x33, 0x6f, 0xf7, + 0x7d, 0xeb, 0xa1, 0x8e, 0x31, 0xb6, 0xda, 0x66, + 0x50, 0xef, 0x05, 0x86, 0xf4, 0x52, 0x32, 0x37, + 0x54, 0x33, 0xdd, 0xdc, 0x4d, 0x13, 0x47, 0xb6, + 0x38, 0xd5, 0xfe, 0xf6, 0xc5, 0xc1, 0x6f, 0xad, + 0x34, 0x5c, 0x5c, 0x2b, 0xc2, 0xeb, 0xb5, 0x4c, + 0x49, 0xb0, 0x60, 0x75, 0x1e, 0xf4, 0x29, 0x24, + 0x21, 0x63, 0x53, 0xa9, 0xd9, 0x5b, 0x4b, 0x79, + 0xb4, 0xca, 0x2e, 0x84, 0x65, 0xc2, 0xe3, 0x72, + 0xfa, 0x55, 0x7d, 0x46, 0xea, 0xe2, 0x56, 0xbc, + 0xb5, 0x6b, 0x75, 0x78, 0x63, 0x7c, 0x46, 0x55, + 0x71, 0xe5, 0x00, 0x7d, 0xbd, 0x6a, 0x59, 0xe6, + 0x9a, 0x61, 0x18, 0x0a, 0x91, 0x2c, 0x67, 0x72, + 0xac, 0x6b, 0xb4, 0x03, 0xeb, 0x4f, 0x9e, 0xe6, + 0x79, 0xe2, 0x68, 0xd9, 0x63, 0x5d, 0xf8, 0xde, + 0x51, 0x70, 0x5f, 0xeb, 0x47, 0x3a, 0x19, 0x6b, + 0x55, 0x43, 0x14, 0x37, 0x57, 0x16, 0xcc, 0x0d, + 0xc3, 0x2a, 0x2b, 0x9e, 0xe8, 0x9e, 0xdf, 0x5a, + 0x4b, 0x71, 0x86, 0xb5, 0x24, 0x6e, 0x03, 0x4e, + 0x39, 0x07, 0xbf, 0x4a, 0xac, 0x6e, 0xa7, 0x37, + 0x0f, 0x31, 0x44, 0x26, 0x44, 0xd8, 0xcb, 0x83, + 0x82, 0x3f, 0x3a, 0x16, 0xe6, 0x75, 0xd9, 0x84, + 0x4f, 0x96, 0x2f, 0x28, 0x70, 0x7a, 0x7e, 0x74, + 0xf9, 0xd5, 0xc2, 0xe2, 0x26, 0xed, 0x42, 0xc6, + 0xc5, 0xee, 0x42, 0xb3, 0x0b, 0xb1, 0x19, 0x21, + 0x40, 0xca, 0xe3, 0x38, 0xa9, 0x8d, 0xc4, 0xd3, + 0x49, 0xab, 0x44, 0xea, 0xbb, 0x22, 0x89, 0xd6, + 0x3c, 0x2e, 0x36, 0x8f, 0x4a, 0xad, 0x1b, 0x48, + 0xb0, 0x25, 0xbf, 0x0a, 0x8b, 0x28, 0x90, 0x30, + 0x1c, 0x83, 0x5a, 0x53, 0x48, 0x04, 0x37, 0x05, + 0xe5, 0x81, 0xcc, 0xa9, 0xb4, 0x79, 0x4b, 0x86, + 0x62, 0x7b, 0xb5, 0x35, 0x2b, 0x81, 0xc8, 0xec, + 0x7f, 0x5a, 0x36, 0x3f, 0xad, 0x69, 0xfd, 0x9f, + 0xda, 0x8f, 0xb3, 0xfb, 0x56, 0x57, 0x11, 0x99, + 0xb1, 0xfd, 0x6b, 0xaa, 0xbe, 0xff, 0x00, 0x8f, + 0xc9, 0x3e, 0xbf, 0xd2, 0xb2, 0x92, 0xd0, 0xbb, + 0x85, 0x55, 0xc9, 0x27, 0x02, 0xb5, 0x2f, 0x08, + 0x6b, 0xb9, 0x08, 0xe9, 0x9a, 0xda, 0x97, 0x51, + 0xa2, 0xd4, 0x9f, 0xf1, 0xeb, 0x07, 0xfb, 0xd1, + 0xff, 0x00, 0x31, 0x45, 0x12, 0x7f, 0xc7, 0xac, + 0x1f, 0xef, 0x47, 0xfc, 0xc5, 0x15, 0xb0, 0xc7, + 0xda, 0xff, 0x00, 0xab, 0x7f, 0xfa, 0xe8, 0xff, + 0x00, 0xfa, 0x11, 0xa9, 0xaa, 0x0b, 0x5f, 0xf5, + 0x6f, 0xff, 0x00, 0x5d, 0x1f, 0xff, 0x00, 0x42, + 0x35, 0x3d, 0x00, 0x15, 0xcb, 0x78, 0x9f, 0xfe, + 0x42, 0x69, 0xff, 0x00, 0x5c, 0x57, 0xfa, 0xd7, + 0x53, 0x5c, 0xb7, 0x8a, 0x3f, 0xe4, 0x26, 0x9f, + 0xf5, 0xc5, 0x7f, 0xad, 0x6f, 0x43, 0xe3, 0x32, + 0xad, 0xf0, 0x98, 0xd4, 0x51, 0x45, 0x76, 0x9c, + 0x81, 0x45, 0x14, 0x50, 0x05, 0xed, 0x32, 0xc1, + 0x6f, 0x1a, 0x57, 0x96, 0x5f, 0x2a, 0x08, 0x57, + 0x74, 0x8f, 0x8c, 0xd4, 0xd7, 0x16, 0x9a, 0x73, + 0xda, 0x49, 0x35, 0x95, 0xd3, 0xef, 0x8f, 0xef, + 0x47, 0x36, 0x01, 0x61, 0xed, 0x52, 0xe8, 0xa3, + 0xed, 0x16, 0x57, 0xf6, 0x2a, 0x40, 0x9a, 0x54, + 0x0c, 0x80, 0x9f, 0xbd, 0x8e, 0xd5, 0x58, 0xe9, + 0x17, 0x31, 0x5a, 0x4d, 0x71, 0x70, 0x04, 0x0b, + 0x1f, 0x40, 0xfd, 0x5c, 0xfa, 0x0a, 0xca, 0xfe, + 0xf6, 0xac, 0xd2, 0xda, 0x6c, 0x47, 0x6f, 0xa5, + 0xdf, 0x5c, 0xc3, 0xe7, 0x43, 0x6e, 0xcd, 0x1f, + 0xae, 0x40, 0xcf, 0xd3, 0xd6, 0x9b, 0x06, 0x9d, + 0x79, 0x70, 0xa5, 0xa1, 0x80, 0xb0, 0x0f, 0xb0, + 0xf2, 0x01, 0x0d, 0xe9, 0x5b, 0x73, 0x43, 0x71, + 0x3c, 0xba, 0x3c, 0x96, 0x8a, 0xcd, 0x0a, 0xa2, + 0x0c, 0xaf, 0x44, 0x20, 0xf3, 0x9a, 0x5d, 0x46, + 0x51, 0xfd, 0x9f, 0xaa, 0x34, 0x2d, 0x85, 0x6b, + 0xa0, 0xa4, 0xa9, 0xf6, 0x5c, 0xfe, 0xb4, 0xbd, + 0xa3, 0x1f, 0x22, 0x33, 0x24, 0xd1, 0xee, 0x22, + 0xd2, 0xfe, 0xd8, 0xc3, 0x9d, 0xdc, 0xae, 0x47, + 0x0b, 0xeb, 0xf9, 0xd5, 0x73, 0xa6, 0x5e, 0x8b, + 0x5f, 0xb4, 0x9b, 0x76, 0xf2, 0xb1, 0xbb, 0x3c, + 0x67, 0x1e, 0xb8, 0xeb, 0x57, 0xd9, 0x19, 0xfc, + 0x37, 0x6c, 0xc1, 0x19, 0xd5, 0x27, 0x62, 0xf8, + 0x19, 0xc0, 0xe7, 0xad, 0x6a, 0xdd, 0xc8, 0xd1, + 0xea, 0x0f, 0x3c, 0x3a, 0x73, 0x4e, 0x0c, 0x39, + 0xf3, 0xbc, 0xed, 0xa8, 0x53, 0x1e, 0xe3, 0x14, + 0xb9, 0xe4, 0x83, 0x91, 0x33, 0x98, 0xfb, 0x15, + 0xcf, 0x97, 0x0c, 0x82, 0x22, 0x52, 0x73, 0xb6, + 0x32, 0x08, 0x39, 0x3e, 0x9e, 0xd5, 0x72, 0xd2, + 0xd6, 0x18, 0xcd, 0xd4, 0x37, 0x96, 0xcc, 0xd3, + 0x40, 0x86, 0x43, 0xb6, 0x5f, 0xa7, 0xcb, 0xc6, + 0x7d, 0x6b, 0x43, 0x40, 0x26, 0x0b, 0x2c, 0xce, + 0xea, 0x8b, 0x34, 0xbb, 0x6d, 0xb7, 0x0c, 0xe1, + 0xf0, 0x46, 0x7f, 0xa5, 0x61, 0x4d, 0xf6, 0x8b, + 0x7b, 0x89, 0xa3, 0x91, 0x99, 0x64, 0xc9, 0x59, + 0x39, 0xfb, 0xde, 0xbf, 0x5a, 0xbb, 0xb9, 0x36, + 0x85, 0x64, 0x92, 0x66, 0xaa, 0x69, 0xb6, 0xb2, + 0xc5, 0x6d, 0x32, 0x86, 0x54, 0xdb, 0xe6, 0x4e, + 0xbb, 0xb3, 0x85, 0x39, 0xc6, 0x3f, 0xef, 0x9c, + 0x7e, 0x35, 0x95, 0x7d, 0x12, 0xc1, 0x7d, 0x71, + 0x12, 0x7d, 0xd4, 0x91, 0x94, 0x67, 0xd0, 0x1a, + 0x67, 0x9f, 0x36, 0xdd, 0xbe, 0x6b, 0xe3, 0x01, + 0x71, 0xb8, 0xf4, 0x07, 0x20, 0x7e, 0x75, 0x3d, + 0xa4, 0x96, 0x86, 0x79, 0x1f, 0x50, 0x13, 0x48, + 0x1b, 0x9c, 0xa1, 0xe7, 0x77, 0xbe, 0x69, 0xa4, + 0xd6, 0xac, 0x4d, 0xa7, 0xa1, 0x73, 0x4d, 0xd2, + 0xa2, 0xbd, 0xd3, 0x27, 0xb8, 0x2e, 0xe2, 0x64, + 0x2c, 0x11, 0x41, 0x18, 0x38, 0x5c, 0xfa, 0x51, + 0xa6, 0xe9, 0x51, 0x5d, 0x69, 0xd7, 0x37, 0x52, + 0xbb, 0xab, 0x46, 0x1b, 0x60, 0x52, 0x39, 0xc0, + 0xcf, 0x3c, 0x7b, 0x8a, 0xb7, 0xa7, 0x5c, 0x47, + 0x6f, 0xa7, 0x99, 0xa2, 0xdc, 0xb0, 0x8b, 0xe1, + 0x8d, 0xdd, 0x42, 0x91, 0x8e, 0x7f, 0x0a, 0xb6, + 0x51, 0x6d, 0x64, 0x9a, 0xc2, 0x3c, 0x6d, 0x8a, + 0xce, 0x67, 0x3f, 0x56, 0x61, 0xfd, 0x31, 0x59, + 0x4a, 0x72, 0xbb, 0x46, 0x8a, 0x2b, 0x43, 0x23, + 0x46, 0xd2, 0xa3, 0xbe, 0x0c, 0xf7, 0x0e, 0xe9, + 0x1e, 0x76, 0xa6, 0xd3, 0x82, 0xcd, 0x8c, 0xff, + 0x00, 0x2a, 0xc9, 0xae, 0xb3, 0x4e, 0x36, 0x2f, + 0x79, 0x6a, 0xb6, 0xd7, 0xbb, 0x84, 0x31, 0x15, + 0x58, 0x7c, 0xb2, 0x32, 0x48, 0xf9, 0x9b, 0x35, + 0xcb, 0xce, 0x91, 0xa4, 0xcc, 0xb1, 0x49, 0xe6, + 0xa0, 0x3c, 0x3e, 0xdc, 0x67, 0xf0, 0xab, 0x84, + 0x9b, 0x93, 0xb9, 0x12, 0x8a, 0x49, 0x11, 0xd1, + 0x45, 0x15, 0xa9, 0x98, 0x51, 0x45, 0x14, 0x01, + 0xd4, 0x78, 0x5f, 0xfe, 0x3c, 0x2e, 0x3f, 0xeb, + 0xa8, 0xfe, 0x55, 0x35, 0xd7, 0xfc, 0x7c, 0xb9, + 0xf7, 0xa8, 0x7c, 0x2f, 0xff, 0x00, 0x1e, 0x13, + 0xff, 0x00, 0xd7, 0x41, 0xfc, 0xaa, 0x6b, 0xaf, + 0xf8, 0xf8, 0x7f, 0xad, 0x79, 0xf5, 0x7e, 0x36, + 0x76, 0xd3, 0xf8, 0x51, 0x16, 0xa9, 0xa9, 0xfd, + 0x96, 0xf3, 0xca, 0x7b, 0x68, 0xe5, 0x5d, 0x8a, + 0x72, 0x49, 0x07, 0xa7, 0xad, 0x54, 0xfe, 0xdb, + 0x87, 0xfe, 0x81, 0xeb, 0xff, 0x00, 0x7f, 0x4d, + 0x43, 0xe2, 0x1f, 0xf9, 0x09, 0x0f, 0xfa, 0xe4, + 0xbf, 0xca, 0xb2, 0xeb, 0x1e, 0x54, 0xfa, 0x16, + 0x6d, 0x7f, 0x6d, 0xc3, 0xff, 0x00, 0x40, 0xf5, + 0xff, 0x00, 0xbf, 0xa6, 0x8f, 0xed, 0xb8, 0x7f, + 0xe8, 0x1e, 0xbf, 0xf7, 0xf4, 0xd6, 0x2d, 0x14, + 0x72, 0x47, 0xb0, 0x1b, 0x5f, 0xdb, 0x70, 0xff, + 0x00, 0xd0, 0x3d, 0x7f, 0xef, 0xe9, 0xa3, 0xfb, + 0x6e, 0x1f, 0xfa, 0x07, 0xaf, 0xfd, 0xfd, 0x35, + 0x8b, 0x45, 0x1c, 0x91, 0xec, 0x06, 0xd7, 0xf6, + 0xdc, 0x3f, 0xf4, 0x0f, 0x5f, 0xfb, 0xfa, 0x68, + 0xfe, 0xdb, 0x87, 0xfe, 0x81, 0xeb, 0xff, 0x00, + 0x7f, 0x4d, 0x62, 0xd5, 0xd9, 0x7c, 0xa6, 0xd2, + 0xe3, 0x64, 0x85, 0x51, 0x84, 0xa5, 0x4b, 0x77, + 0x6f, 0x94, 0x77, 0xa3, 0x92, 0x3d, 0x80, 0xbb, + 0xfd, 0xb7, 0x0f, 0xfd, 0x03, 0xd7, 0xfe, 0xfe, + 0x9a, 0x3f, 0xb6, 0xe1, 0xff, 0x00, 0xa0, 0x7a, + 0xff, 0x00, 0xdf, 0xd3, 0x55, 0xb4, 0xf8, 0xa3, + 0x9a, 0xca, 0xf1, 0x59, 0x14, 0xc8, 0x76, 0x84, + 0x62, 0x39, 0x07, 0x0c, 0x78, 0xfa, 0xed, 0xc5, + 0x4f, 0x6d, 0x04, 0x42, 0xd2, 0xc8, 0x34, 0x6a, + 0xce, 0xf7, 0x28, 0x58, 0x91, 0xce, 0xd3, 0x91, + 0xb7, 0xe9, 0xc6, 0x7f, 0x1a, 0x39, 0x23, 0xd8, + 0x07, 0x7f, 0x6d, 0xc3, 0xff, 0x00, 0x40, 0xf5, + 0xff, 0x00, 0xbf, 0xa6, 0x8f, 0xed, 0xb8, 0x7f, + 0xe8, 0x1e, 0xbf, 0xf7, 0xf4, 0xd4, 0x57, 0xb1, + 0xb7, 0xd8, 0xe5, 0x79, 0xa1, 0x81, 0x58, 0x48, + 0x04, 0x66, 0x10, 0xbc, 0x0e, 0x73, 0x9d, 0xbf, + 0x87, 0x5a, 0x6d, 0xa2, 0x4d, 0xfd, 0x9a, 0x1e, + 0xda, 0xd1, 0x67, 0x7f, 0x39, 0x83, 0x13, 0x08, + 0x90, 0x81, 0xb5, 0x71, 0xda, 0x8e, 0x48, 0xf6, + 0x02, 0x7f, 0xed, 0xb8, 0x7f, 0xe8, 0x1e, 0xbf, + 0xf7, 0xf4, 0xd1, 0xfd, 0xb7, 0x0f, 0xfd, 0x03, + 0xd7, 0xfe, 0xfe, 0x9a, 0xac, 0xf0, 0x79, 0xb1, + 0x40, 0x25, 0x41, 0x0c, 0x8f, 0x34, 0x81, 0xf1, + 0x1e, 0x08, 0xc0, 0x5e, 0x30, 0x3f, 0x97, 0xbd, + 0x0d, 0xa6, 0x6c, 0x72, 0x59, 0xe4, 0x58, 0xc4, + 0x7e, 0x67, 0x31, 0x7c, 0xf8, 0xdd, 0x8f, 0xbb, + 0x9f, 0xeb, 0x47, 0x24, 0x7b, 0x01, 0x67, 0xfb, + 0x6e, 0x1f, 0xfa, 0x07, 0xaf, 0xfd, 0xfd, 0x34, + 0x7f, 0x6d, 0xc3, 0xff, 0x00, 0x40, 0xf5, 0xff, + 0x00, 0xbf, 0xa6, 0xaa, 0xc7, 0x05, 0xb7, 0xd9, + 0x2e, 0x37, 0x4c, 0x36, 0x2c, 0xb1, 0xe2, 0x50, + 0x99, 0x38, 0x21, 0xb8, 0x03, 0xfc, 0xf4, 0xaa, + 0x97, 0x30, 0x9b, 0x7b, 0x89, 0x21, 0x24, 0x36, + 0xc3, 0x8c, 0x8e, 0xf4, 0x72, 0x47, 0xb0, 0x1a, + 0xbf, 0xdb, 0x70, 0xff, 0x00, 0xd0, 0x3d, 0x7f, + 0xef, 0xe9, 0xa3, 0xfb, 0x6e, 0x1f, 0xfa, 0x07, + 0xaf, 0xfd, 0xfd, 0x35, 0x8b, 0x45, 0x1c, 0x91, + 0xec, 0x06, 0xd7, 0xf6, 0xdc, 0x3f, 0xf4, 0x0f, + 0x5f, 0xfb, 0xfa, 0x68, 0xfe, 0xdb, 0x87, 0xfe, + 0x81, 0xeb, 0xff, 0x00, 0x7f, 0x4d, 0x62, 0xd1, + 0x47, 0x24, 0x7b, 0x01, 0xb5, 0xfd, 0xb7, 0x0f, + 0xfd, 0x03, 0xd7, 0xfe, 0xfe, 0x9a, 0x6b, 0x6b, + 0x8b, 0x8f, 0xdd, 0xd8, 0xc6, 0xad, 0xea, 0xcc, + 0x5a, 0xb1, 0xe8, 0xa3, 0x96, 0x3d, 0x80, 0xeb, + 0x6f, 0x1c, 0xbc, 0x91, 0xb1, 0xef, 0x1a, 0x9f, + 0xd2, 0xab, 0xd4, 0xd7, 0x5f, 0x7a, 0x3f, 0xfa, + 0xe4, 0xbf, 0xca, 0xa1, 0xaa, 0x02, 0x4b, 0xfb, + 0xe8, 0x2d, 0x96, 0xd9, 0x6e, 0x21, 0x67, 0xdf, + 0x1e, 0x77, 0xa9, 0xc1, 0x15, 0x53, 0xfb, 0x53, + 0x4d, 0xff, 0x00, 0x9e, 0x37, 0x3f, 0x9a, 0xd4, + 0x5e, 0x20, 0xfb, 0xb6, 0x5f, 0xf5, 0xcc, 0xff, + 0x00, 0x3a, 0xc6, 0xa9, 0x70, 0x8b, 0xd5, 0xa0, + 0x37, 0xbf, 0xb5, 0x34, 0xdf, 0xf9, 0xe3, 0x73, + 0xf9, 0xad, 0x1f, 0xda, 0x9a, 0x6f, 0xfc, 0xf1, + 0xb9, 0xfc, 0xd6, 0xb0, 0x68, 0xa5, 0xec, 0xe3, + 0xd8, 0x56, 0x37, 0xbf, 0xb5, 0x34, 0xdf, 0xf9, + 0xe3, 0x73, 0xf9, 0xad, 0x1f, 0xda, 0x9a, 0x6f, + 0xfc, 0xf1, 0xb9, 0xfc, 0xd6, 0xb3, 0x6d, 0x04, + 0x2b, 0x69, 0x71, 0x34, 0xb0, 0x2c, 0xc5, 0x19, + 0x15, 0x43, 0x33, 0x0c, 0x67, 0x76, 0x7a, 0x1f, + 0x6a, 0x92, 0x5b, 0x15, 0x95, 0xc3, 0x43, 0xb6, + 0x05, 0x30, 0x89, 0x5d, 0x5d, 0x8e, 0x13, 0xe6, + 0xc7, 0xff, 0x00, 0x5e, 0x8f, 0x67, 0x1e, 0xc1, + 0x62, 0xf7, 0xf6, 0xa6, 0x9b, 0xff, 0x00, 0x3c, + 0x6e, 0x7f, 0x35, 0xa3, 0xfb, 0x53, 0x4d, 0xff, + 0x00, 0x9e, 0x37, 0x3f, 0x9a, 0xd6, 0x5b, 0x58, + 0xc8, 0xb1, 0x17, 0xdf, 0x19, 0x60, 0xa1, 0xcc, + 0x60, 0xfc, 0xc1, 0x4f, 0x43, 0xfa, 0x8a, 0x91, + 0x74, 0xf9, 0x12, 0xe2, 0x24, 0x66, 0x86, 0x42, + 0x65, 0x11, 0xba, 0x6e, 0x3f, 0x2b, 0x1e, 0xcd, + 0xff, 0x00, 0xd6, 0xa3, 0xd9, 0xc7, 0xb0, 0x58, + 0xd0, 0xfe, 0xd4, 0xd3, 0x7f, 0xe7, 0x8d, 0xcf, + 0xe6, 0xb4, 0x7f, 0x6a, 0x69, 0xbf, 0xf3, 0xc6, + 0xe7, 0xf3, 0x5a, 0xca, 0x16, 0x6d, 0xe5, 0x2c, + 0x86, 0x48, 0x94, 0xb2, 0xee, 0x58, 0xcb, 0x61, + 0x88, 0xcf, 0x5f, 0x4e, 0xd5, 0x2b, 0x69, 0xee, + 0xd3, 0xc8, 0xbb, 0xa1, 0x8b, 0xf7, 0xad, 0x1a, + 0x29, 0x63, 0x86, 0x60, 0x7a, 0x0f, 0xd3, 0x93, + 0x47, 0xb3, 0x8f, 0x60, 0xb1, 0xa1, 0xfd, 0xa9, + 0xa6, 0xff, 0x00, 0xcf, 0x1b, 0x9f, 0xcd, 0x68, + 0xfe, 0xd4, 0xd3, 0x7f, 0xe7, 0x8d, 0xcf, 0xe6, + 0xb5, 0x99, 0x0d, 0x84, 0x92, 0xa2, 0xb1, 0x92, + 0x38, 0xf7, 0xc8, 0x63, 0x01, 0xc9, 0xce, 0xe1, + 0x8e, 0x3a, 0x7b, 0xd2, 0x5a, 0x42, 0x85, 0xa6, + 0x92, 0x70, 0x4a, 0x40, 0xbb, 0x99, 0x41, 0xc1, + 0x63, 0x90, 0x00, 0xfc, 0xcd, 0x1e, 0xce, 0x3d, + 0x82, 0xc6, 0xa7, 0xf6, 0xa6, 0x9b, 0xff, 0x00, + 0x3c, 0x6e, 0x7f, 0x35, 0xa3, 0xfb, 0x53, 0x4d, + 0xff, 0x00, 0x9e, 0x37, 0x3f, 0x9a, 0xd6, 0x73, + 0xa4, 0x37, 0x16, 0xad, 0x34, 0x10, 0xf9, 0x2f, + 0x1b, 0xaa, 0xb2, 0x06, 0x24, 0x10, 0x7a, 0x1e, + 0x7e, 0x94, 0x8d, 0xa7, 0xc8, 0x24, 0xf2, 0xc4, + 0xb0, 0xb3, 0x02, 0x43, 0x80, 0xdf, 0x73, 0x03, + 0x27, 0x3c, 0x7b, 0x1e, 0x94, 0x7b, 0x38, 0xf6, + 0x0b, 0x1a, 0x5f, 0xda, 0x9a, 0x6f, 0xfc, 0xf1, + 0xb9, 0xfc, 0xd6, 0x8f, 0xed, 0x4d, 0x37, 0xfe, + 0x78, 0xdc, 0xfe, 0x6b, 0x59, 0x9f, 0x64, 0x28, + 0x25, 0xc9, 0x8e, 0x45, 0x11, 0x87, 0x0e, 0xac, + 0x7a, 0x6e, 0x03, 0x8f, 0xe5, 0xcd, 0x4f, 0x77, + 0x67, 0x10, 0x7d, 0x91, 0x05, 0x8f, 0xfd, 0x22, + 0x54, 0xdc, 0xcd, 0xc0, 0x55, 0xdb, 0x8f, 0xeb, + 0x47, 0xb3, 0x8f, 0x60, 0xb1, 0x73, 0xfb, 0x53, + 0x4d, 0xff, 0x00, 0x9e, 0x37, 0x3f, 0x9a, 0xd1, + 0xfd, 0xa9, 0xa6, 0xff, 0x00, 0xcf, 0x1b, 0x9f, + 0xcd, 0x6b, 0x3d, 0x34, 0xf1, 0xb2, 0x56, 0x79, + 0xe3, 0xda, 0xb1, 0x79, 0x88, 0xcb, 0x9c, 0x37, + 0xcd, 0x8f, 0x4a, 0x8c, 0xd8, 0xc8, 0x22, 0x2f, + 0xbe, 0x3d, 0xc1, 0x43, 0x98, 0xf3, 0xf3, 0x05, + 0x3d, 0xff, 0x00, 0x51, 0x47, 0xb3, 0x8f, 0x60, + 0xb1, 0xa9, 0xfd, 0xa9, 0xa6, 0xff, 0x00, 0xcf, + 0x1b, 0x9f, 0xcd, 0x68, 0xfe, 0xd4, 0xd3, 0x7f, + 0xe7, 0x8d, 0xcf, 0xe6, 0xb5, 0x8f, 0x75, 0x6c, + 0xd6, 0xb3, 0x18, 0x5d, 0xd1, 0x9d, 0x78, 0x3b, + 0x0e, 0x71, 0x50, 0xd1, 0xec, 0xe3, 0xd8, 0x2c, + 0x6f, 0x7f, 0x6a, 0x69, 0xbf, 0xf3, 0xc6, 0xe7, + 0xf3, 0x5a, 0x3f, 0xb5, 0x34, 0xdf, 0xf9, 0xe3, + 0x73, 0xf9, 0xad, 0x60, 0xd1, 0x47, 0xb3, 0x8f, + 0x60, 0xb1, 0xd5, 0xd9, 0xdd, 0x41, 0x2d, 0xac, + 0xb3, 0xdb, 0x44, 0xc8, 0xc8, 0xc1, 0x43, 0x39, + 0x04, 0xf3, 0x50, 0xd4, 0x1a, 0x2f, 0xfc, 0x82, + 0xee, 0x7f, 0xeb, 0xa2, 0xff, 0x00, 0x2a, 0x9e, + 0xa9, 0x24, 0xb6, 0x19, 0x7e, 0x4f, 0xf8, 0xf5, + 0x83, 0xfd, 0xe8, 0xff, 0x00, 0x98, 0xa2, 0x89, + 0x3f, 0xe3, 0xd6, 0x1f, 0xf7, 0xa3, 0xfe, 0x62, + 0x8a, 0x60, 0x3e, 0xd7, 0xee, 0x3f, 0xfd, 0x74, + 0x7f, 0xfd, 0x08, 0xd4, 0xd5, 0x05, 0xb7, 0xdc, + 0x7f, 0xfa, 0xe8, 0xdf, 0xfa, 0x11, 0xa9, 0xe8, + 0x00, 0xae, 0x5f, 0xc4, 0xff, 0x00, 0xf2, 0x13, + 0x4f, 0xfa, 0xe2, 0xbf, 0xd6, 0xba, 0x8a, 0xe5, + 0xfc, 0x4f, 0xff, 0x00, 0x21, 0x24, 0xff, 0x00, + 0xae, 0x2b, 0xfc, 0xcd, 0x6f, 0x43, 0xe3, 0x32, + 0xad, 0xf0, 0x98, 0xd4, 0x51, 0x45, 0x76, 0x9c, + 0x81, 0x45, 0x14, 0x50, 0x02, 0xab, 0x15, 0x60, + 0xca, 0x48, 0x23, 0xa1, 0x15, 0x24, 0xb7, 0x13, + 0xcf, 0x8f, 0x3a, 0x69, 0x24, 0xc7, 0x4d, 0xec, + 0x4e, 0x2a, 0x49, 0xed, 0xd2, 0x3b, 0x2b, 0x59, + 0xd4, 0x9d, 0xd2, 0xef, 0xdc, 0x0f, 0x4e, 0x0f, + 0x6a, 0x90, 0xd8, 0x97, 0x82, 0xcc, 0xc0, 0x19, + 0xe5, 0x9d, 0x5c, 0x95, 0xc8, 0xfe, 0x12, 0x7a, + 0x7e, 0x02, 0xa6, 0xeb, 0x71, 0xd9, 0x95, 0xe3, + 0xb8, 0x9e, 0x24, 0x29, 0x1c, 0xd2, 0x22, 0x1e, + 0xaa, 0xac, 0x40, 0x34, 0xd1, 0x2c, 0x82, 0x23, + 0x10, 0x91, 0x84, 0x64, 0xe4, 0xa6, 0x78, 0x27, + 0xe9, 0x52, 0x4f, 0x67, 0x71, 0x6e, 0x8a, 0xf2, + 0xc7, 0x85, 0x63, 0x8c, 0x86, 0x07, 0x9f, 0x4e, + 0x3a, 0x1a, 0x91, 0x6c, 0x24, 0x7d, 0x38, 0xdd, + 0x82, 0x08, 0xdf, 0xb4, 0x0d, 0xc3, 0x3f, 0x95, + 0x3b, 0xad, 0xc2, 0xcc, 0x81, 0x66, 0x99, 0x22, + 0x68, 0x96, 0x57, 0x58, 0xdb, 0xef, 0x20, 0x63, + 0x83, 0xf8, 0x52, 0xfd, 0xa2, 0x7f, 0x27, 0xc9, + 0xf3, 0xa4, 0xf2, 0xbf, 0xb9, 0xb8, 0xed, 0xfc, + 0xaa, 0x49, 0xec, 0x2e, 0xad, 0xe3, 0xf3, 0x25, + 0x88, 0xaa, 0x83, 0x82, 0x72, 0x0e, 0x0f, 0xbe, + 0x3a, 0x7e, 0x35, 0x1d, 0xba, 0x47, 0x24, 0xa0, + 0x4b, 0x27, 0x97, 0x18, 0x19, 0x27, 0x19, 0x3f, + 0x41, 0xef, 0x45, 0xd6, 0xe1, 0xae, 0xc3, 0x5a, + 0x69, 0x5d, 0x51, 0x5a, 0x57, 0x61, 0x1f, 0xdc, + 0x05, 0x8f, 0xcb, 0xf4, 0xf4, 0xa4, 0x92, 0x49, + 0x25, 0x72, 0xf2, 0xbb, 0x3b, 0x9e, 0xac, 0xc7, + 0x26, 0xae, 0x4f, 0x67, 0x0c, 0x7a, 0xb3, 0xda, + 0x99, 0xbc, 0xb8, 0x55, 0xbe, 0xfb, 0xf5, 0x03, + 0x19, 0xa7, 0x9b, 0x2b, 0x7b, 0x88, 0xa3, 0x92, + 0xc9, 0xa5, 0x1b, 0xa6, 0x10, 0x95, 0x97, 0x1d, + 0x4f, 0x43, 0xc5, 0x2e, 0x64, 0x3b, 0x33, 0x3a, + 0x8a, 0xd0, 0x9a, 0xd6, 0xd1, 0xa1, 0x9c, 0xda, + 0xbc, 0xac, 0xf6, 0xfc, 0xb6, 0xfc, 0x61, 0xc6, + 0x71, 0x91, 0x8e, 0x9c, 0xd2, 0x69, 0xb6, 0x29, + 0x79, 0x15, 0xc9, 0x66, 0x61, 0x24, 0x69, 0x98, + 0xc0, 0xe8, 0x4f, 0x3c, 0x1f, 0xca, 0x8e, 0x65, + 0x6b, 0x87, 0x2b, 0xbd, 0x8a, 0x62, 0x59, 0x04, + 0x46, 0x2f, 0x31, 0xbc, 0xb2, 0x72, 0x53, 0x3c, + 0x67, 0xd7, 0x14, 0xef, 0xb4, 0xdc, 0x17, 0x67, + 0x33, 0xc9, 0xbd, 0x97, 0x6b, 0x36, 0xf3, 0x92, + 0x3d, 0x0f, 0xb5, 0x5a, 0xd3, 0x2c, 0x52, 0xef, + 0xcf, 0x69, 0x19, 0x95, 0x63, 0x8c, 0x91, 0xb4, + 0xe3, 0x2d, 0x82, 0x40, 0xfc, 0x81, 0xa8, 0x6f, + 0x2d, 0xd2, 0x01, 0x6f, 0xb0, 0x93, 0xe6, 0xc2, + 0xb2, 0x1c, 0xfa, 0x9c, 0xff, 0x00, 0x85, 0x17, + 0x57, 0xb0, 0x59, 0xda, 0xe4, 0x31, 0x4b, 0x24, + 0x2f, 0xbe, 0x29, 0x1a, 0x36, 0xfe, 0xf2, 0x9c, + 0x1a, 0x65, 0x5e, 0x97, 0x4f, 0x63, 0x2c, 0x71, + 0xdb, 0xfc, 0xc5, 0xa0, 0x49, 0x1b, 0x7b, 0xaa, + 0xf5, 0x1e, 0xf8, 0xa8, 0x2e, 0x6d, 0x67, 0xb4, + 0x65, 0x59, 0x94, 0x29, 0x61, 0xb9, 0x70, 0xc1, + 0xb2, 0x3f, 0x0a, 0x69, 0xa6, 0x26, 0x99, 0x05, + 0x14, 0x51, 0x4c, 0x41, 0x45, 0x14, 0x50, 0x07, + 0x51, 0xe1, 0x7f, 0xf8, 0xf0, 0x9f, 0xfe, 0xba, + 0x8f, 0xe5, 0x53, 0x5d, 0x7f, 0xc7, 0xc3, 0xd4, + 0x3e, 0x17, 0xff, 0x00, 0x8f, 0x0b, 0x8f, 0xfa, + 0xea, 0x3f, 0x95, 0x4d, 0x73, 0xff, 0x00, 0x1f, + 0x0f, 0x5e, 0x7d, 0x5f, 0x8d, 0x9d, 0xb4, 0xfe, + 0x14, 0x64, 0xf8, 0x87, 0xfe, 0x42, 0x43, 0xfe, + 0xb9, 0x2f, 0xf2, 0xac, 0xba, 0xeb, 0x2f, 0xb5, + 0x5b, 0x6b, 0x39, 0x96, 0x19, 0x6d, 0x8c, 0xae, + 0x11, 0x4e, 0xec, 0x2d, 0x56, 0xfe, 0xdf, 0xb2, + 0xff, 0x00, 0x9f, 0x13, 0xf9, 0x2f, 0xf8, 0x56, + 0x65, 0x9c, 0xe5, 0x15, 0xd1, 0xff, 0x00, 0x6f, + 0xd9, 0x7f, 0xcf, 0x89, 0xfc, 0x97, 0xfc, 0x28, + 0xfe, 0xdf, 0xb2, 0xff, 0x00, 0x9f, 0x13, 0xf9, + 0x2f, 0xf8, 0x50, 0x07, 0x39, 0x45, 0x74, 0x7f, + 0xdb, 0xf6, 0x5f, 0xf3, 0xe2, 0x7f, 0x25, 0xff, + 0x00, 0x0a, 0x3f, 0xb7, 0xec, 0xbf, 0xe7, 0xc4, + 0xfe, 0x4b, 0xfe, 0x14, 0x01, 0xce, 0x55, 0xd3, + 0x25, 0x9f, 0xf6, 0x78, 0x80, 0x3c, 0xfe, 0x68, + 0x6d, 0xff, 0x00, 0x70, 0x63, 0x38, 0xc6, 0x3a, + 0xf4, 0xad, 0x6f, 0xed, 0xfb, 0x2f, 0xf9, 0xf1, + 0x3f, 0x92, 0xff, 0x00, 0x85, 0x1f, 0xdb, 0xf6, + 0x5f, 0xf3, 0xe2, 0x7f, 0x25, 0xff, 0x00, 0x0a, + 0x00, 0xc6, 0xb5, 0xba, 0x16, 0xf1, 0x30, 0x00, + 0xef, 0xf3, 0x51, 0xc7, 0xa7, 0xcb, 0x9f, 0xf1, + 0xab, 0x1f, 0xda, 0x10, 0xf9, 0xe1, 0x82, 0x38, + 0x8d, 0x6e, 0x23, 0x75, 0x18, 0x1c, 0x22, 0x0c, + 0x63, 0xeb, 0xd2, 0xb4, 0x7f, 0xb7, 0xec, 0xbf, + 0xe7, 0xc4, 0xfe, 0x4b, 0xfe, 0x14, 0x7f, 0x6f, + 0xd9, 0x7f, 0xcf, 0x89, 0xfc, 0x97, 0xfc, 0x28, + 0x03, 0x26, 0x49, 0xed, 0x52, 0x19, 0xd6, 0x03, + 0x33, 0xb4, 0xf8, 0x04, 0xc8, 0xa1, 0x42, 0x8c, + 0xe7, 0xb1, 0x3e, 0x95, 0x17, 0xda, 0x31, 0x62, + 0x90, 0x2e, 0xe0, 0xe2, 0x56, 0x72, 0x47, 0x4c, + 0x10, 0x07, 0xf4, 0xad, 0xbf, 0xed, 0xfb, 0x2f, + 0xf9, 0xf1, 0x3f, 0x92, 0xff, 0x00, 0x85, 0x1f, + 0xdb, 0xf6, 0x5f, 0xf3, 0xe2, 0x7f, 0x25, 0xff, + 0x00, 0x0a, 0x00, 0xcb, 0xb6, 0xbd, 0x8e, 0x28, + 0xa3, 0x47, 0xf3, 0x32, 0x0c, 0xbb, 0x99, 0x7a, + 0x8d, 0xca, 0x06, 0x47, 0xbf, 0x14, 0xff, 0x00, + 0xb5, 0xda, 0xed, 0x84, 0x2b, 0x5c, 0xc4, 0xd1, + 0x29, 0x55, 0x91, 0x31, 0x9e, 0xb9, 0xcf, 0x5f, + 0x73, 0xc5, 0x68, 0xff, 0x00, 0x6f, 0xd9, 0x7f, + 0xcf, 0x89, 0xfc, 0x97, 0xfc, 0x28, 0xfe, 0xdf, + 0xb2, 0xff, 0x00, 0x9f, 0x13, 0xf9, 0x2f, 0xf8, + 0x50, 0x06, 0x4d, 0xd5, 0xe4, 0x73, 0xa4, 0xe1, + 0x55, 0x81, 0x92, 0x44, 0x60, 0x48, 0x1c, 0xed, + 0x52, 0x09, 0x3e, 0xe7, 0x39, 0xa8, 0x6f, 0x26, + 0x59, 0xee, 0xa4, 0x95, 0x01, 0x0a, 0xc7, 0x23, + 0x3d, 0x6b, 0x73, 0xfb, 0x7e, 0xcb, 0xfe, 0x7c, + 0x4f, 0xe4, 0xbf, 0xe1, 0x47, 0xf6, 0xfd, 0x97, + 0xfc, 0xf8, 0x9f, 0xc9, 0x7f, 0xc2, 0x80, 0x39, + 0xca, 0x2b, 0xa3, 0xfe, 0xdf, 0xb2, 0xff, 0x00, + 0x9f, 0x13, 0xf9, 0x2f, 0xf8, 0x51, 0xfd, 0xbf, + 0x65, 0xff, 0x00, 0x3e, 0x27, 0xf2, 0x5f, 0xf0, + 0xa0, 0x0e, 0x72, 0x8a, 0xe8, 0xff, 0x00, 0xb7, + 0xec, 0xbf, 0xe7, 0xc4, 0xfe, 0x4b, 0xfe, 0x14, + 0x7f, 0x6f, 0xd9, 0x7f, 0xcf, 0x89, 0xfc, 0x97, + 0xfc, 0x28, 0x03, 0x9c, 0xa2, 0xba, 0x3f, 0xed, + 0xfb, 0x2f, 0xf9, 0xf1, 0x3f, 0x92, 0xff, 0x00, + 0x85, 0x1f, 0xdb, 0xf6, 0x5f, 0xf3, 0xe2, 0x7f, + 0x25, 0xff, 0x00, 0x0a, 0x00, 0xb1, 0x75, 0xf7, + 0xa3, 0xff, 0x00, 0xae, 0x4b, 0xfc, 0xaa, 0x1a, + 0xb1, 0x7a, 0x77, 0x4c, 0x18, 0x67, 0x0c, 0x8a, + 0x40, 0xf4, 0xe2, 0xab, 0xd0, 0x05, 0x3f, 0x10, + 0x7d, 0xdb, 0x2f, 0xfa, 0xe6, 0x7f, 0x9d, 0x63, + 0x57, 0x43, 0xaa, 0xde, 0xc3, 0x6e, 0xb6, 0xcb, + 0x35, 0xa4, 0x53, 0x66, 0x3c, 0x86, 0x73, 0x8c, + 0x72, 0x7f, 0xc2, 0xb3, 0xbf, 0xb5, 0x6c, 0xbf, + 0xe8, 0x1d, 0x6b, 0xff, 0x00, 0x7d, 0x1a, 0x00, + 0xcf, 0xa2, 0xb4, 0x3f, 0xb5, 0x6c, 0xbf, 0xe8, + 0x1d, 0x6b, 0xff, 0x00, 0x7d, 0x1a, 0x51, 0xa9, + 0x5a, 0x91, 0x91, 0xa6, 0x5b, 0x91, 0xec, 0x4d, + 0x16, 0x02, 0x2b, 0x4b, 0xb6, 0xb6, 0xb3, 0xb8, + 0x58, 0xa5, 0x68, 0xe5, 0x76, 0x4c, 0x6d, 0xc8, + 0x24, 0x0d, 0xd9, 0xfe, 0x62, 0x9b, 0x1d, 0xc1, + 0x64, 0xbb, 0x33, 0x48, 0xcd, 0x24, 0xb1, 0x85, + 0x05, 0x89, 0x24, 0x9d, 0xca, 0x7f, 0x90, 0xab, + 0x1f, 0xda, 0x36, 0xbf, 0xf4, 0x0b, 0xb7, 0xfc, + 0xcd, 0x1f, 0xda, 0x36, 0xbf, 0xf4, 0x0b, 0xb7, + 0xfc, 0xcd, 0x00, 0x49, 0x2d, 0xfa, 0x18, 0xfc, + 0xd4, 0x96, 0x25, 0x63, 0x1a, 0xa9, 0x8f, 0xc8, + 0x1b, 0xf3, 0x80, 0x0f, 0xcd, 0x8e, 0x9c, 0x7a, + 0xd3, 0x04, 0x96, 0x69, 0xa8, 0xc7, 0x76, 0x27, + 0x2d, 0xba, 0xe0, 0x48, 0x46, 0xd2, 0x36, 0x2e, + 0x72, 0x73, 0xea, 0x7e, 0x94, 0x9f, 0xda, 0x36, + 0xbf, 0xf4, 0x0b, 0xb7, 0xfc, 0xcd, 0x1f, 0xda, + 0x36, 0xbf, 0xf4, 0x0b, 0xb7, 0xfc, 0xcd, 0x00, + 0x24, 0x33, 0xc2, 0xb6, 0x9b, 0x25, 0x9d, 0x64, + 0x40, 0x87, 0x11, 0x34, 0x7f, 0x32, 0xb7, 0x62, + 0xad, 0xd8, 0x67, 0x9e, 0xbf, 0x85, 0x4b, 0x2d, + 0xc5, 0xad, 0xc4, 0xfb, 0xda, 0x7d, 0x8b, 0x1d, + 0xcb, 0xc8, 0x3e, 0x52, 0x77, 0xa9, 0x20, 0xf1, + 0xef, 0xc7, 0x7a, 0x8f, 0xfb, 0x46, 0xd7, 0xfe, + 0x81, 0x76, 0xff, 0x00, 0x99, 0xa3, 0xfb, 0x46, + 0xd7, 0xfe, 0x81, 0x76, 0xff, 0x00, 0x99, 0xa0, + 0x06, 0xfd, 0xaa, 0x36, 0x36, 0xee, 0xcd, 0xb4, + 0x8b, 0xa6, 0x95, 0x86, 0x3a, 0x03, 0xb7, 0xfc, + 0x0d, 0x47, 0x0c, 0xf1, 0x09, 0xee, 0x52, 0x42, + 0x44, 0x33, 0x82, 0xbb, 0x80, 0xce, 0xde, 0x72, + 0x0e, 0x3f, 0x0a, 0x9b, 0xfb, 0x46, 0xd7, 0xfe, + 0x81, 0x76, 0xff, 0x00, 0x99, 0xa3, 0xfb, 0x46, + 0xd7, 0xfe, 0x81, 0x76, 0xff, 0x00, 0x99, 0xa0, + 0x08, 0x9d, 0xed, 0xe0, 0xb5, 0x68, 0x22, 0x9b, + 0xcd, 0x69, 0x1d, 0x4b, 0xba, 0xa9, 0x00, 0x01, + 0xd8, 0x67, 0xbf, 0x35, 0x6c, 0xdd, 0xdb, 0xe0, + 0xac, 0xb7, 0x0b, 0x33, 0xbe, 0xe4, 0xf3, 0x56, + 0x32, 0x19, 0x54, 0xa9, 0x1f, 0x37, 0x1c, 0xf3, + 0x8f, 0x5e, 0xf5, 0x0f, 0xf6, 0x8d, 0xaf, 0xfd, + 0x02, 0xed, 0xff, 0x00, 0x33, 0x47, 0xf6, 0x8d, + 0xaf, 0xfd, 0x02, 0xed, 0xff, 0x00, 0x33, 0x40, + 0x11, 0xab, 0x5b, 0x41, 0x1d, 0xc4, 0x69, 0x31, + 0x72, 0xf1, 0x01, 0xbb, 0x69, 0x00, 0xb6, 0xf0, + 0x78, 0xfc, 0x07, 0x7a, 0xb4, 0xd7, 0x96, 0xcd, + 0x70, 0xcc, 0x24, 0x03, 0x33, 0x4e, 0xca, 0xe5, + 0x49, 0xdb, 0xb8, 0x0d, 0xad, 0xd3, 0xda, 0xa1, + 0xfe, 0xd1, 0xb5, 0xff, 0x00, 0xa0, 0x5d, 0xbf, + 0xe6, 0x68, 0xfe, 0xd1, 0xb5, 0xff, 0x00, 0xa0, + 0x5d, 0xbf, 0xe6, 0x68, 0x02, 0x59, 0x2e, 0xa0, + 0x96, 0x1d, 0x8f, 0x76, 0x5d, 0xcc, 0x0d, 0x19, + 0x77, 0x56, 0x39, 0x3b, 0xc3, 0x7e, 0x5d, 0xaa, + 0x36, 0xb8, 0xb7, 0xcc, 0x97, 0x22, 0x5c, 0xc9, + 0x24, 0x22, 0x3f, 0x2b, 0x69, 0xc8, 0x38, 0x00, + 0x9c, 0xf4, 0xc7, 0x14, 0x9f, 0xda, 0x36, 0xbf, + 0xf4, 0x0b, 0xb7, 0xfc, 0xcd, 0x1f, 0xda, 0x36, + 0xbf, 0xf4, 0x0b, 0xb7, 0xfc, 0xcd, 0x00, 0x54, + 0xbe, 0x91, 0x65, 0xbe, 0xb8, 0x91, 0x0e, 0x51, + 0xe4, 0x66, 0x53, 0xea, 0x33, 0x50, 0x56, 0x97, + 0xf6, 0x8d, 0xaf, 0xfd, 0x02, 0xed, 0xff, 0x00, + 0x33, 0x47, 0xf6, 0x8d, 0xaf, 0xfd, 0x02, 0xed, + 0xff, 0x00, 0x33, 0x40, 0x19, 0xb4, 0x56, 0x97, + 0xf6, 0x8d, 0xaf, 0xfd, 0x02, 0xed, 0xff, 0x00, + 0x33, 0x47, 0xf6, 0x8d, 0xaf, 0xfd, 0x02, 0xed, + 0xff, 0x00, 0x33, 0x40, 0x17, 0x34, 0x5f, 0xf9, + 0x05, 0xdc, 0xff, 0x00, 0xd7, 0x45, 0xfe, 0x55, + 0x3d, 0x1a, 0x7d, 0xcc, 0x73, 0xe9, 0xf7, 0x02, + 0x3b, 0x68, 0xe0, 0x01, 0xd7, 0x21, 0x3b, 0xd1, + 0x40, 0x17, 0xe4, 0xff, 0x00, 0x8f, 0x58, 0x7f, + 0xde, 0x4f, 0xe6, 0x28, 0xa4, 0x93, 0xfe, 0x3d, + 0xa1, 0xff, 0x00, 0x79, 0x3f, 0x98, 0xa2, 0x80, + 0x1f, 0x6d, 0xf7, 0x1f, 0xfe, 0xba, 0x3f, 0xfe, + 0x84, 0x6a, 0x6a, 0x86, 0xdb, 0xee, 0x3f, 0xfd, + 0x74, 0x7f, 0xfd, 0x08, 0xd4, 0xd4, 0x00, 0x57, + 0x31, 0xe2, 0x7f, 0xf9, 0x09, 0x27, 0xfd, 0x71, + 0x5f, 0xe6, 0x6b, 0xa7, 0xae, 0x63, 0xc4, 0xff, + 0x00, 0xf2, 0x12, 0x4f, 0xfa, 0xe2, 0xbf, 0xd6, + 0xb7, 0xa1, 0xf1, 0x99, 0x56, 0xf8, 0x4c, 0x6a, + 0x28, 0xa2, 0xbb, 0x4e, 0x40, 0xa2, 0x8a, 0x28, + 0x03, 0x4a, 0x48, 0xa4, 0xb8, 0xd2, 0x2d, 0x0c, + 0x28, 0xd2, 0x79, 0x4e, 0xea, 0xe1, 0x46, 0x4a, + 0x92, 0x41, 0x15, 0x7a, 0xd5, 0x5e, 0x2b, 0xbd, + 0x2e, 0xdd, 0xbe, 0x59, 0x92, 0x29, 0x09, 0x07, + 0xaa, 0xee, 0xdc, 0x46, 0x6b, 0x0e, 0x29, 0xa6, + 0x81, 0x89, 0x86, 0x57, 0x8c, 0x9e, 0xa5, 0x18, + 0x8a, 0x9a, 0xca, 0xe4, 0x41, 0x7a, 0xb7, 0x13, + 0x17, 0x7e, 0x1b, 0x27, 0xa9, 0x39, 0x52, 0x3f, + 0xad, 0x67, 0x28, 0xbb, 0x16, 0xa4, 0xae, 0x4e, + 0x23, 0x92, 0x2d, 0x1a, 0xe0, 0x4c, 0x8c, 0x9b, + 0xa7, 0x40, 0xa1, 0x86, 0x39, 0x00, 0xe6, 0xac, + 0x69, 0x98, 0x16, 0x96, 0xcc, 0xc3, 0xe4, 0x5b, + 0xe5, 0x2c, 0x7b, 0x0e, 0x3a, 0x9a, 0xca, 0x92, + 0x69, 0x65, 0x0a, 0x25, 0x95, 0xdc, 0x2f, 0x0b, + 0xb9, 0x89, 0xc5, 0x22, 0xcb, 0x22, 0x23, 0x22, + 0x48, 0xca, 0x8f, 0xf7, 0x94, 0x1c, 0x03, 0xf5, + 0xa6, 0xe2, 0xda, 0x05, 0x2b, 0x33, 0x49, 0x22, + 0x9a, 0x18, 0xb5, 0x43, 0x70, 0xac, 0xa0, 0xae, + 0xd3, 0xb8, 0x75, 0x6d, 0xe3, 0x1f, 0xd6, 0xb3, + 0x11, 0x1d, 0xce, 0xd4, 0x42, 0xc7, 0xd0, 0x0c, + 0xd3, 0xa4, 0x9e, 0x69, 0x55, 0x52, 0x59, 0xa4, + 0x75, 0x5e, 0x81, 0x98, 0x90, 0x29, 0x22, 0x9a, + 0x58, 0x1f, 0x7c, 0x32, 0x3c, 0x6d, 0x8c, 0x65, + 0x18, 0x83, 0x4d, 0x26, 0x84, 0xda, 0x66, 0x96, + 0xa3, 0x69, 0x35, 0xc6, 0xb9, 0x24, 0x48, 0x84, + 0x79, 0x8f, 0xc3, 0x11, 0xc7, 0x4e, 0x4d, 0x3e, + 0x39, 0x84, 0x17, 0xd6, 0x91, 0xa4, 0x6f, 0x1d, + 0xa4, 0x53, 0x03, 0xbd, 0xd4, 0x8d, 0xe7, 0xbb, + 0x1a, 0xcf, 0x37, 0xd7, 0x8c, 0xca, 0xe6, 0xee, + 0x72, 0xcb, 0xf7, 0x49, 0x90, 0xe4, 0x7d, 0x29, + 0xb2, 0xdd, 0xdd, 0x4c, 0x9b, 0x26, 0xb9, 0x96, + 0x45, 0xeb, 0x87, 0x72, 0x45, 0x4f, 0x2b, 0xb5, + 0x98, 0xf9, 0x96, 0xe8, 0xbd, 0x15, 0xbc, 0xb6, + 0x91, 0x6a, 0x2d, 0x32, 0x32, 0x0f, 0x2f, 0xca, + 0x19, 0x18, 0xcb, 0x16, 0x1d, 0x3f, 0x23, 0x4c, + 0xd3, 0x66, 0x68, 0x2d, 0x2e, 0xa6, 0x5e, 0xb1, + 0xb4, 0x4c, 0x3f, 0xef, 0xaa, 0xa5, 0x24, 0xf3, + 0x4a, 0xaa, 0xb2, 0x4a, 0xee, 0xab, 0xf7, 0x43, + 0x31, 0x20, 0x53, 0x43, 0xb2, 0xab, 0x20, 0x66, + 0x0a, 0xdf, 0x78, 0x03, 0xc1, 0xa7, 0xcb, 0x75, + 0xa8, 0xb9, 0xb5, 0xd0, 0xdf, 0x11, 0xa5, 0xad, + 0xc2, 0xc1, 0x11, 0x1b, 0x65, 0x13, 0x4e, 0x3f, + 0xdd, 0xd8, 0xc1, 0x3f, 0xaf, 0xe7, 0x55, 0xae, + 0xef, 0x0d, 0xbc, 0x36, 0x48, 0x2d, 0xed, 0xe4, + 0xff, 0x00, 0x46, 0x53, 0x99, 0x62, 0x0c, 0x7a, + 0x9e, 0xf5, 0x95, 0xe7, 0x4b, 0xb8, 0x37, 0x98, + 0xfb, 0x82, 0xed, 0x07, 0x71, 0xc8, 0x1d, 0x31, + 0xf4, 0xa4, 0x67, 0x77, 0xdb, 0xbd, 0x8b, 0x6d, + 0x18, 0x19, 0x39, 0xc0, 0xf4, 0xa4, 0xa1, 0xae, + 0xa3, 0x73, 0xec, 0x6c, 0x5c, 0xc1, 0xf6, 0xcb, + 0xf8, 0x5d, 0xd7, 0x6c, 0x2b, 0x6d, 0x1c, 0x92, + 0xec, 0x1d, 0x06, 0x3a, 0x01, 0xfa, 0x0a, 0xcd, + 0xbd, 0x96, 0x59, 0xee, 0x0c, 0x92, 0x21, 0x8c, + 0x1e, 0x11, 0x31, 0x80, 0xaa, 0x3a, 0x01, 0x4d, + 0x4b, 0xbb, 0x98, 0xce, 0x63, 0xb8, 0x95, 0x0e, + 0x02, 0xe5, 0x5c, 0x8e, 0x07, 0x41, 0x4d, 0x9a, + 0x79, 0xa7, 0x20, 0xcd, 0x34, 0x92, 0x91, 0xd0, + 0xbb, 0x16, 0xc5, 0x38, 0xc5, 0xa1, 0x36, 0x99, + 0x1d, 0x14, 0x51, 0x56, 0x48, 0x51, 0x45, 0x14, + 0x01, 0xd4, 0x78, 0x5f, 0xfe, 0x3c, 0x2e, 0x3f, + 0xeb, 0xa8, 0xfe, 0x55, 0x35, 0xcf, 0xfc, 0x7c, + 0x3f, 0xd6, 0xa1, 0xf0, 0xc7, 0xfc, 0x78, 0x5c, + 0x7f, 0xd7, 0x51, 0xfc, 0xaa, 0x6b, 0x9f, 0xf8, + 0xf8, 0x7a, 0xf3, 0xea, 0xfc, 0x6c, 0xed, 0xa7, + 0xf0, 0xa3, 0x27, 0xc4, 0x3f, 0xf2, 0x12, 0x1f, + 0xf5, 0xc9, 0x7f, 0x95, 0x65, 0xd6, 0xa7, 0x88, + 0x7f, 0xe4, 0x24, 0x3f, 0xeb, 0x92, 0xff, 0x00, + 0x2a, 0xcb, 0xac, 0xcb, 0x0a, 0x28, 0xa2, 0x80, + 0x0a, 0x28, 0xa5, 0x18, 0xc8, 0x24, 0x64, 0x7a, + 0x50, 0x06, 0xcc, 0x17, 0x2c, 0xe6, 0x09, 0x2e, + 0xd9, 0x11, 0x1a, 0xe1, 0x1a, 0x15, 0xe8, 0x11, + 0x41, 0xe7, 0x1e, 0x83, 0xa0, 0xa4, 0x89, 0x6e, + 0x26, 0x9d, 0x25, 0xb8, 0xbb, 0x49, 0xe2, 0x45, + 0x76, 0x56, 0xdc, 0x59, 0x51, 0x82, 0xe7, 0x90, + 0x7f, 0x03, 0xf8, 0x55, 0x5b, 0x8b, 0xcb, 0x69, + 0x66, 0x13, 0x0b, 0x46, 0x0e, 0x08, 0xc0, 0x69, + 0x37, 0x2e, 0x07, 0xf0, 0xe3, 0x03, 0x8a, 0x41, + 0x7e, 0x91, 0x6c, 0x58, 0x2d, 0xf6, 0x44, 0x09, + 0x2e, 0xac, 0xfb, 0xb7, 0xe4, 0x60, 0x8c, 0xfd, + 0x33, 0x40, 0x0d, 0xd4, 0x0b, 0xbf, 0x93, 0x2b, + 0x4d, 0xe7, 0x2b, 0xa9, 0x02, 0x42, 0xbb, 0x58, + 0xe0, 0xf4, 0x35, 0x76, 0xe5, 0x4c, 0x16, 0xcb, + 0x76, 0x84, 0x34, 0xa6, 0x18, 0x90, 0x60, 0xf3, + 0x18, 0x2b, 0xf7, 0xbf, 0x1e, 0x9f, 0xe4, 0x56, + 0x6d, 0xcc, 0xeb, 0x28, 0x8d, 0x23, 0x8f, 0xcb, + 0x8a, 0x30, 0x42, 0xa9, 0x6d, 0xc7, 0x9e, 0xa4, + 0x9a, 0x95, 0x6f, 0x88, 0x9d, 0x5c, 0xc7, 0x94, + 0xf2, 0x96, 0x27, 0x4c, 0xfd, 0xf0, 0x06, 0x3f, + 0xa6, 0x68, 0x03, 0x42, 0xd2, 0x47, 0x5b, 0x6d, + 0x3c, 0x7d, 0xb1, 0x62, 0x8c, 0x83, 0xba, 0x26, + 0x27, 0xe7, 0xf9, 0xcf, 0xb6, 0x3d, 0xb9, 0x35, + 0x9d, 0x6c, 0xd1, 0xc1, 0xa9, 0x6e, 0x99, 0x36, + 0x2a, 0xb3, 0x02, 0x08, 0xce, 0xc3, 0xce, 0x38, + 0xf6, 0x3f, 0xca, 0x9c, 0x97, 0x76, 0xfe, 0x4c, + 0x29, 0x2d, 0xab, 0x3b, 0x42, 0x08, 0x53, 0xe6, + 0xe0, 0x1f, 0x98, 0x9e, 0x46, 0x3d, 0xea, 0x15, + 0xb9, 0x26, 0xed, 0xae, 0x25, 0x8d, 0x24, 0xde, + 0x58, 0xba, 0x91, 0xc1, 0xcf, 0x5f, 0xa5, 0x00, + 0x69, 0x2f, 0xda, 0x5a, 0xe6, 0xcd, 0xa4, 0x9a, + 0x3b, 0x98, 0xbe, 0xd0, 0x9b, 0x66, 0x53, 0x92, + 0x0e, 0x7e, 0xe9, 0xee, 0x3e, 0x94, 0x5c, 0x1b, + 0xa1, 0x6d, 0x72, 0x6f, 0x66, 0x12, 0x44, 0x7e, + 0x58, 0x81, 0x90, 0x39, 0xdf, 0x91, 0xd3, 0x1d, + 0x38, 0xcd, 0x54, 0x5b, 0xe8, 0xa2, 0x31, 0x08, + 0x2d, 0xca, 0x22, 0xca, 0xb2, 0xb0, 0x69, 0x37, + 0x16, 0x23, 0xa0, 0xce, 0x38, 0xef, 0x51, 0x43, + 0x74, 0xa8, 0x25, 0x59, 0x22, 0xf3, 0x22, 0x90, + 0x86, 0xdb, 0xbb, 0x18, 0x20, 0xf5, 0xfe, 0x63, + 0xf1, 0xa0, 0x0b, 0xf7, 0x36, 0xd2, 0xae, 0x97, + 0xe5, 0x18, 0x5d, 0x56, 0x04, 0x59, 0x03, 0x95, + 0x38, 0x25, 0xbe, 0xf7, 0x3f, 0xf0, 0x25, 0xff, + 0x00, 0xbe, 0x69, 0x6e, 0x21, 0x5b, 0x93, 0x60, + 0x4f, 0x44, 0x44, 0x49, 0x3f, 0xdd, 0xd8, 0x1b, + 0x3f, 0xfa, 0x17, 0xe5, 0x54, 0x05, 0xeb, 0xfd, + 0xaa, 0x59, 0xdc, 0x16, 0x12, 0x6f, 0xdc, 0x99, + 0xec, 0xc0, 0xff, 0x00, 0x8d, 0x3f, 0xfb, 0x41, + 0x82, 0x4a, 0xa2, 0x30, 0x3c, 0xc8, 0x96, 0x3e, + 0xbd, 0x30, 0x36, 0xe7, 0xf2, 0xcf, 0xe7, 0x40, + 0x06, 0xac, 0xfe, 0x66, 0xa1, 0x24, 0x84, 0x60, + 0xb2, 0xa3, 0x7f, 0xe3, 0xa2, 0xa9, 0x54, 0xb7, + 0x33, 0x79, 0xf3, 0x79, 0x9b, 0x76, 0xfc, 0xaa, + 0xb8, 0xce, 0x7a, 0x00, 0x3f, 0xa5, 0x45, 0x40, + 0x05, 0x14, 0x51, 0x40, 0x05, 0x14, 0x51, 0x40, + 0x1d, 0x5d, 0xd7, 0xde, 0x8f, 0xfe, 0xb9, 0x2f, + 0xf2, 0xa8, 0x6a, 0x6b, 0xaf, 0xbd, 0x1f, 0xfd, + 0x72, 0x5f, 0xe5, 0x50, 0xd0, 0x07, 0x3f, 0xe3, + 0x4f, 0xbd, 0xa7, 0x8f, 0xfa, 0x64, 0x7f, 0xf4, + 0x2a, 0xa0, 0xda, 0x7d, 0x82, 0x4b, 0x02, 0x66, + 0x57, 0xf3, 0x25, 0x11, 0x9d, 0x92, 0x72, 0x0e, + 0x06, 0x73, 0x94, 0xe3, 0xaf, 0xbe, 0x7d, 0x78, + 0xad, 0x7f, 0x15, 0xd9, 0x49, 0x75, 0x15, 0x94, + 0xd1, 0x91, 0xb5, 0x55, 0x93, 0x9f, 0x5c, 0xd6, + 0x00, 0xb3, 0xbc, 0x07, 0x3f, 0x68, 0x19, 0xdc, + 0x1b, 0x3b, 0xcf, 0x51, 0xd0, 0xd7, 0x4c, 0x25, + 0x15, 0x14, 0xae, 0x61, 0x38, 0xbe, 0x66, 0xec, + 0x44, 0xd0, 0xdb, 0x8b, 0x75, 0x71, 0x1c, 0xe5, + 0xa5, 0x0e, 0xc9, 0x86, 0x04, 0x20, 0x1e, 0xbc, + 0x73, 0xef, 0xd3, 0x8a, 0xd7, 0xf0, 0xaa, 0x97, + 0x8e, 0xef, 0x09, 0x1b, 0xba, 0xc6, 0x4a, 0x89, + 0x42, 0x95, 0x07, 0x2b, 0xfd, 0xee, 0x2b, 0x35, + 0x6c, 0xef, 0x52, 0x26, 0x89, 0x2e, 0x36, 0xc6, + 0xdf, 0x79, 0x03, 0x90, 0x0f, 0xd4, 0x56, 0x9e, + 0x8a, 0x91, 0xd9, 0x47, 0x71, 0x1d, 0xcb, 0x36, + 0x26, 0x4d, 0xb9, 0x8c, 0x67, 0x1c, 0x83, 0xdc, + 0x8f, 0x4a, 0x2a, 0x4e, 0x2e, 0x36, 0x4c, 0x21, + 0x16, 0xa5, 0x73, 0x46, 0xee, 0xdc, 0x3c, 0xd6, + 0xc8, 0xea, 0x91, 0x48, 0xe8, 0x4b, 0x98, 0x97, + 0x2a, 0x79, 0x38, 0xc0, 0x1c, 0x13, 0xf4, 0xa5, + 0x3a, 0x7c, 0x50, 0xac, 0xc6, 0x67, 0x90, 0x0f, + 0x23, 0xcc, 0x4c, 0xc7, 0xb4, 0x8f, 0x98, 0x2f, + 0x23, 0x3f, 0xe7, 0x34, 0xd4, 0xbd, 0xb7, 0x88, + 0xc5, 0x14, 0x62, 0x5f, 0x29, 0x16, 0x40, 0x64, + 0x20, 0x6f, 0xcb, 0x0c, 0x64, 0x0c, 0xf6, 0xc7, + 0xad, 0x29, 0xbc, 0xb5, 0x30, 0x79, 0x20, 0x4c, + 0x07, 0x92, 0xd1, 0x67, 0x00, 0x9f, 0xbc, 0x18, + 0x1e, 0xb5, 0xcc, 0x6e, 0x13, 0xd9, 0x5b, 0x20, + 0x12, 0x79, 0xee, 0x91, 0x04, 0x8f, 0x24, 0xc7, + 0x92, 0x59, 0x97, 0x3d, 0x33, 0xf8, 0xd4, 0x72, + 0x58, 0xa4, 0x31, 0xee, 0x9a, 0xe3, 0x6f, 0xef, + 0x4c, 0x60, 0x04, 0xce, 0x71, 0xb7, 0x9e, 0xbe, + 0x86, 0xa7, 0x4d, 0x4a, 0x31, 0x10, 0x45, 0x96, + 0xe2, 0x12, 0x51, 0x01, 0x68, 0xf1, 0x90, 0x55, + 0x76, 0xfa, 0xf2, 0x0d, 0x56, 0xb9, 0xb8, 0x17, + 0x31, 0xa4, 0x6b, 0xe6, 0x33, 0xf9, 0xac, 0xd9, + 0x73, 0x92, 0x41, 0x0a, 0x07, 0x3e, 0xbc, 0x50, + 0x03, 0x26, 0xb4, 0x68, 0x52, 0x62, 0xed, 0xcc, + 0x72, 0xf9, 0x60, 0x63, 0xef, 0x75, 0xc9, 0xfd, + 0x3f, 0x5a, 0xb9, 0x65, 0x1b, 0x9d, 0x3d, 0x5a, + 0x18, 0xad, 0x99, 0xcc, 0xec, 0xac, 0x66, 0x09, + 0xd3, 0x0b, 0xfd, 0xef, 0xe9, 0x4d, 0xbe, 0xba, + 0x9a, 0x19, 0x20, 0x58, 0xd8, 0xc5, 0x34, 0x71, + 0x8f, 0x30, 0xa9, 0xe7, 0x79, 0x00, 0x1f, 0xd0, + 0x0a, 0x86, 0x39, 0xed, 0xa4, 0xb4, 0xf2, 0xae, + 0x5e, 0x60, 0xfe, 0x6b, 0x49, 0xb9, 0x14, 0x36, + 0x72, 0x07, 0xa9, 0x1e, 0x94, 0x01, 0x39, 0xd3, + 0x92, 0xe2, 0xf2, 0x64, 0x88, 0xc8, 0x9f, 0xbd, + 0xda, 0xa8, 0x22, 0x2c, 0x17, 0xdc, 0x9e, 0xc2, + 0xab, 0x1b, 0x44, 0x48, 0x43, 0x49, 0x38, 0x49, + 0x59, 0x4b, 0xaa, 0x15, 0xe0, 0x81, 0x9e, 0xfe, + 0xbc, 0x1a, 0xb6, 0x75, 0x38, 0x1e, 0x48, 0x9d, + 0x92, 0x51, 0xe4, 0xc8, 0x19, 0x50, 0x11, 0x86, + 0x00, 0x28, 0x19, 0x3e, 0xbf, 0x2d, 0x41, 0x3d, + 0xc5, 0x9c, 0xa8, 0x0b, 0x2c, 0xac, 0xe8, 0xac, + 0x88, 0x0e, 0x00, 0x23, 0x24, 0x82, 0x79, 0xed, + 0x9e, 0x9e, 0xd4, 0x00, 0xb7, 0x96, 0xa0, 0x62, + 0x41, 0x84, 0x05, 0x22, 0x11, 0xa8, 0x5f, 0xbe, + 0xdb, 0x17, 0x3f, 0xcf, 0xaf, 0xbd, 0x27, 0xf6, + 0x68, 0x69, 0x7c, 0xa8, 0x67, 0x0f, 0x22, 0x48, + 0x23, 0x90, 0x15, 0xc0, 0x52, 0x78, 0xc8, 0x3d, + 0xc5, 0x2c, 0xf7, 0xeb, 0x34, 0x61, 0x18, 0x3f, + 0xee, 0xd5, 0x3c, 0x92, 0x47, 0xdd, 0x60, 0x00, + 0x61, 0xf4, 0x38, 0xfe, 0x55, 0x34, 0x9a, 0xa8, + 0x33, 0x2c, 0xa2, 0x5b, 0x97, 0xfd, 0xe0, 0x73, + 0x13, 0xb7, 0xc8, 0xa3, 0xb8, 0x1e, 0xbf, 0xa5, + 0x00, 0x57, 0xb8, 0x8a, 0x04, 0xd3, 0xd1, 0xe1, + 0x7f, 0x33, 0x33, 0x11, 0xbc, 0xa6, 0xd3, 0xd0, + 0x71, 0x4f, 0x6b, 0x27, 0x9a, 0xca, 0xd1, 0xe2, + 0x58, 0x86, 0x51, 0xb7, 0x16, 0x75, 0x52, 0x4e, + 0xe3, 0xea, 0x6a, 0x1b, 0x89, 0xad, 0xbe, 0xc8, + 0xb6, 0xf6, 0xe2, 0x53, 0x89, 0x0b, 0xee, 0x90, + 0x01, 0xdb, 0x1d, 0xaa, 0x39, 0xa6, 0x59, 0x2d, + 0xed, 0xa3, 0x50, 0x73, 0x12, 0x95, 0x39, 0xf7, + 0x62, 0x7f, 0xad, 0x00, 0x6a, 0x49, 0x6b, 0x1f, + 0xdb, 0x5d, 0x4a, 0xc4, 0xb1, 0x93, 0x38, 0x03, + 0x60, 0xf9, 0x71, 0x18, 0xe7, 0xf5, 0xaa, 0x5f, + 0x60, 0x8c, 0xa8, 0x98, 0x5c, 0x7f, 0xa3, 0x6c, + 0x2c, 0x5f, 0x67, 0x23, 0x9c, 0x63, 0x19, 0xeb, + 0xc8, 0xef, 0x53, 0xbe, 0xa5, 0x6e, 0xf3, 0x6f, + 0x29, 0x21, 0x52, 0xd2, 0x92, 0x38, 0xce, 0x1d, + 0x02, 0x8f, 0xe5, 0x49, 0x16, 0xa1, 0x14, 0x08, + 0xb0, 0x42, 0xf3, 0xa4, 0x5b, 0x08, 0xf3, 0x06, + 0x03, 0x86, 0x27, 0x39, 0xc6, 0x7d, 0xb1, 0xd6, + 0x80, 0x20, 0x7b, 0x14, 0x48, 0x65, 0x99, 0xa7, + 0xf9, 0x17, 0x6e, 0xc2, 0x13, 0xef, 0xee, 0x04, + 0x8e, 0xfc, 0x74, 0xa2, 0x4b, 0x14, 0x44, 0x7d, + 0xb3, 0xee, 0x91, 0x62, 0x59, 0x76, 0xec, 0xe3, + 0x04, 0x0e, 0xf9, 0xeb, 0xcd, 0x17, 0x37, 0x8b, + 0x34, 0x32, 0xc7, 0xbe, 0x69, 0x0b, 0x3a, 0x10, + 0xd2, 0x9c, 0x9c, 0x00, 0xd9, 0xfe, 0x74, 0xbf, + 0x6d, 0x8c, 0x4e, 0xf2, 0x6d, 0x62, 0x1a, 0x05, + 0x8c, 0x02, 0x3b, 0x80, 0xa3, 0xf2, 0xe2, 0x80, + 0x26, 0x8b, 0x4c, 0x4f, 0x36, 0x06, 0x67, 0x91, + 0xa2, 0x69, 0x51, 0x18, 0x98, 0x8a, 0x83, 0x9f, + 0xee, 0x92, 0x79, 0x15, 0x02, 0x59, 0xc2, 0xf8, + 0x63, 0x70, 0x51, 0x64, 0x90, 0xa4, 0x59, 0x4e, + 0xbe, 0xe7, 0x9e, 0x07, 0x23, 0xd6, 0xac, 0x8d, + 0x46, 0xd9, 0x66, 0x79, 0x00, 0x99, 0x8b, 0xce, + 0x93, 0x7c, 0xc0, 0x76, 0x39, 0xdb, 0xd7, 0xdc, + 0xf3, 0xfa, 0x53, 0x21, 0xbf, 0x8e, 0x28, 0xfc, + 0x95, 0x9a, 0xea, 0x34, 0x57, 0x2c, 0xa6, 0x3c, + 0x02, 0xe0, 0xe3, 0x83, 0xcf, 0x1d, 0x3a, 0xf3, + 0x40, 0x16, 0xb4, 0x75, 0x29, 0x65, 0x78, 0xad, + 0xc1, 0x59, 0x14, 0x1f, 0xd6, 0xac, 0x54, 0x3a, + 0x52, 0xb0, 0xd3, 0xa7, 0x95, 0xf3, 0xfb, 0xe9, + 0x46, 0xdc, 0xf5, 0x38, 0xce, 0x4d, 0x4d, 0x40, + 0x17, 0xa4, 0xff, 0x00, 0x8f, 0x68, 0x7f, 0xde, + 0x4f, 0xe6, 0x28, 0xa1, 0xff, 0x00, 0xe3, 0xda, + 0x1f, 0xf7, 0x93, 0xf9, 0x8a, 0x28, 0x01, 0xf6, + 0xdf, 0x71, 0xff, 0x00, 0xeb, 0xa3, 0xff, 0x00, + 0xe8, 0x46, 0xa5, 0xa8, 0x6d, 0xbe, 0xe3, 0xff, + 0x00, 0xd7, 0x47, 0xff, 0x00, 0xd0, 0x8d, 0x4d, + 0x40, 0x05, 0x73, 0x1e, 0x27, 0xff, 0x00, 0x90, + 0x92, 0x7f, 0xd7, 0x15, 0xfe, 0xb5, 0xd3, 0xd7, + 0x31, 0xe2, 0x7f, 0xf9, 0x09, 0x27, 0xfd, 0x71, + 0x5f, 0xeb, 0x5b, 0xd0, 0xf8, 0xcc, 0xab, 0x7c, + 0x26, 0x3d, 0x14, 0x51, 0x5d, 0xa7, 0x20, 0x51, + 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, + 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, + 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, + 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, + 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x01, 0xd4, + 0x78, 0x63, 0xfe, 0x3c, 0x27, 0xff, 0x00, 0xae, + 0xa3, 0xf9, 0x54, 0xd7, 0x3f, 0xf1, 0xf0, 0xf5, + 0x07, 0x86, 0x3f, 0xe3, 0xc2, 0xe3, 0xfe, 0xba, + 0x8f, 0xe5, 0x53, 0x5c, 0xff, 0x00, 0xaf, 0x7a, + 0xf3, 0xea, 0xfc, 0x6c, 0xed, 0xa7, 0xf0, 0xa2, + 0x0d, 0x5e, 0xfa, 0x18, 0x2f, 0x04, 0x6f, 0x61, + 0x04, 0xc7, 0xcb, 0x53, 0xbd, 0xc7, 0x3d, 0x2a, + 0x8f, 0xf6, 0xad, 0xbf, 0xfd, 0x02, 0xad, 0x7f, + 0x2a, 0x3c, 0x43, 0xff, 0x00, 0x21, 0x21, 0xff, + 0x00, 0x5c, 0x97, 0xf9, 0x56, 0x5d, 0x66, 0x59, + 0xa9, 0xfd, 0xab, 0x6f, 0xff, 0x00, 0x40, 0xab, + 0x5f, 0xca, 0x8f, 0xed, 0x5b, 0x7f, 0xfa, 0x05, + 0x5a, 0xfe, 0x55, 0x97, 0x45, 0x00, 0x6a, 0x7f, + 0x6a, 0xdb, 0xff, 0x00, 0xd0, 0x2a, 0xd7, 0xf2, + 0xa3, 0xfb, 0x56, 0xdf, 0xfe, 0x81, 0x56, 0xbf, + 0x95, 0x65, 0xd5, 0xcd, 0x31, 0x15, 0xae, 0xf2, + 0xc4, 0x00, 0x88, 0xef, 0x96, 0x19, 0x00, 0x85, + 0x24, 0x1a, 0x00, 0xb1, 0xfd, 0xab, 0x6f, 0xff, + 0x00, 0x40, 0xab, 0x5f, 0xca, 0x8f, 0xed, 0x5b, + 0x7f, 0xfa, 0x05, 0x5a, 0xfe, 0x55, 0x5f, 0x50, + 0x2e, 0xfe, 0x4c, 0xad, 0x37, 0x9c, 0xae, 0xa4, + 0x09, 0x0a, 0xed, 0x63, 0x83, 0xd0, 0xd5, 0xdb, + 0x95, 0x30, 0x5b, 0x2d, 0xda, 0x10, 0xd2, 0x98, + 0x62, 0x41, 0x83, 0xcc, 0x60, 0xaf, 0xde, 0xfc, + 0x7a, 0x7f, 0x91, 0x40, 0x11, 0x7f, 0x6a, 0xdb, + 0xff, 0x00, 0xd0, 0x2a, 0xd7, 0xf2, 0xa3, 0xfb, + 0x56, 0xdf, 0xfe, 0x81, 0x56, 0xbf, 0x95, 0x58, + 0xb4, 0x91, 0xd6, 0xdb, 0x4f, 0x1f, 0x6c, 0x58, + 0xa3, 0x20, 0xee, 0x89, 0x89, 0xf9, 0xfe, 0x73, + 0xed, 0x8f, 0x6e, 0x4d, 0x53, 0xd3, 0x83, 0x26, + 0xad, 0x8f, 0xf5, 0x4c, 0xbe, 0x67, 0x5f, 0xe0, + 0xf9, 0x5b, 0xf9, 0x50, 0x04, 0x9f, 0xda, 0xb6, + 0xff, 0x00, 0xf4, 0x0a, 0xb5, 0xfc, 0xa8, 0xfe, + 0xd5, 0xb7, 0xff, 0x00, 0xa0, 0x55, 0xaf, 0xe5, + 0x4e, 0x49, 0x67, 0x7b, 0xdb, 0x35, 0x93, 0x50, + 0x5b, 0x95, 0xf3, 0xd0, 0xed, 0x05, 0x8e, 0x39, + 0xeb, 0xc8, 0x15, 0x22, 0xcd, 0x3b, 0x5e, 0xc2, + 0xaf, 0xa9, 0x2c, 0xc8, 0x67, 0x4f, 0xdd, 0x86, + 0x6f, 0xef, 0x0f, 0x51, 0x40, 0x10, 0xff, 0x00, + 0x6a, 0xdb, 0xff, 0x00, 0xd0, 0x2a, 0xd7, 0xf2, + 0xa3, 0xfb, 0x56, 0xdf, 0xfe, 0x81, 0x56, 0xbf, + 0x95, 0x3a, 0xee, 0x49, 0xfe, 0xcb, 0x70, 0xb7, + 0x93, 0xac, 0x84, 0x91, 0xe5, 0x2f, 0x98, 0xae, + 0xc0, 0xe7, 0xaf, 0x1d, 0x38, 0xcd, 0x5b, 0xba, + 0x37, 0x42, 0xee, 0xed, 0xae, 0x26, 0x0d, 0x64, + 0x03, 0x02, 0x86, 0x40, 0xdd, 0x41, 0xda, 0x31, + 0xd4, 0x1c, 0xe2, 0x80, 0x29, 0x7f, 0x6a, 0xdb, + 0xff, 0x00, 0xd0, 0x2a, 0xd7, 0xf2, 0xa3, 0xfb, + 0x56, 0xdf, 0xfe, 0x81, 0x56, 0xbf, 0x95, 0x25, + 0xc5, 0xdc, 0xd6, 0x52, 0x47, 0x6f, 0x01, 0x0b, + 0x1a, 0x46, 0x85, 0x97, 0x1c, 0x39, 0x2a, 0x09, + 0xcf, 0xaf, 0x5a, 0xb2, 0x90, 0xc6, 0xa7, 0x52, + 0xb5, 0x45, 0xc2, 0xc8, 0xea, 0xa8, 0x3d, 0x0e, + 0x19, 0x94, 0x7e, 0x60, 0x0a, 0x00, 0xaf, 0xfd, + 0xab, 0x6f, 0xff, 0x00, 0x40, 0xab, 0x5f, 0xca, + 0x8f, 0xed, 0x5b, 0x7f, 0xfa, 0x05, 0x5a, 0xfe, + 0x54, 0x93, 0x81, 0x1e, 0x87, 0x1c, 0x58, 0xf9, + 0xbc, 0xd5, 0x91, 0xbe, 0xac, 0x1b, 0x1f, 0xa0, + 0x15, 0x99, 0x40, 0x1a, 0x9f, 0xda, 0xb6, 0xff, + 0x00, 0xf4, 0x0a, 0xb5, 0xfc, 0xa8, 0xfe, 0xd5, + 0xb7, 0xff, 0x00, 0xa0, 0x55, 0xaf, 0xe5, 0x59, + 0x74, 0x50, 0x06, 0xa7, 0xf6, 0xad, 0xbf, 0xfd, + 0x02, 0xad, 0x7f, 0x2a, 0x3f, 0xb5, 0x6d, 0xff, + 0x00, 0xe8, 0x15, 0x6b, 0xf9, 0x56, 0x5d, 0x14, + 0x01, 0xd6, 0x5e, 0x1d, 0xd2, 0x23, 0x05, 0x0a, + 0x0c, 0x6a, 0x70, 0x3b, 0x71, 0x50, 0x54, 0xd7, + 0x5f, 0x7a, 0x3f, 0xfa, 0xe4, 0xbf, 0xca, 0xa1, + 0xa0, 0x07, 0x2b, 0x8d, 0x8d, 0x14, 0x88, 0xb2, + 0x44, 0xdf, 0x79, 0x1a, 0xa0, 0x3a, 0x7e, 0x9a, + 0x49, 0x3e, 0x5c, 0xeb, 0x9e, 0xc1, 0xc7, 0xf8, + 0x54, 0xb4, 0x50, 0x04, 0x5f, 0xd9, 0xfa, 0x67, + 0xf7, 0x2e, 0x3f, 0xef, 0xb1, 0xfe, 0x14, 0x7f, + 0x67, 0xe9, 0x9f, 0xdc, 0xb8, 0xff, 0x00, 0xbe, + 0xc7, 0xf8, 0x54, 0xb4, 0x50, 0x04, 0x5f, 0xd9, + 0xfa, 0x67, 0xf7, 0x2e, 0x3f, 0xef, 0xb1, 0xfe, + 0x14, 0x7f, 0x67, 0xe9, 0x9f, 0xdc, 0xb8, 0xff, + 0x00, 0xbe, 0xc7, 0xf8, 0x54, 0xb4, 0x50, 0x04, + 0x5f, 0xd9, 0xfa, 0x67, 0xf7, 0x2e, 0x3f, 0xef, + 0xb1, 0xfe, 0x14, 0x7f, 0x67, 0xe9, 0x9f, 0xdc, + 0xb8, 0xff, 0x00, 0xbe, 0xc7, 0xf8, 0x54, 0xb4, + 0x50, 0x04, 0x5f, 0xd9, 0xfa, 0x67, 0xf7, 0x2e, + 0x3f, 0xef, 0xb1, 0xfe, 0x14, 0x7f, 0x67, 0xe9, + 0x9f, 0xdc, 0xb8, 0xff, 0x00, 0xbe, 0xc7, 0xf8, + 0x54, 0xb4, 0x50, 0x04, 0x5f, 0xd9, 0xfa, 0x67, + 0xf7, 0x2e, 0x3f, 0xef, 0xb1, 0xfe, 0x14, 0x7f, + 0x67, 0xe9, 0x9f, 0xdc, 0xb8, 0xff, 0x00, 0xbe, + 0xc7, 0xf8, 0x54, 0xb4, 0x50, 0x04, 0x5f, 0xd9, + 0xfa, 0x67, 0xf7, 0x2e, 0x3f, 0xef, 0xb1, 0xfe, + 0x14, 0x7f, 0x67, 0xe9, 0x9f, 0xdc, 0xb8, 0xff, + 0x00, 0xbe, 0xc7, 0xf8, 0x54, 0xb4, 0x50, 0x04, + 0x5f, 0xd9, 0xfa, 0x67, 0xf7, 0x2e, 0x3f, 0xef, + 0xb1, 0xfe, 0x14, 0x7f, 0x67, 0xe9, 0x9f, 0xdc, + 0xb8, 0xff, 0x00, 0xbe, 0xc7, 0xf8, 0x54, 0xb4, + 0x50, 0x04, 0x5f, 0xd9, 0xfa, 0x67, 0xf7, 0x2e, + 0x3f, 0xef, 0xb1, 0xfe, 0x14, 0x7f, 0x67, 0xe9, + 0x9f, 0xdc, 0xb8, 0xff, 0x00, 0xbe, 0xc7, 0xf8, + 0x54, 0xb4, 0x50, 0x04, 0x5f, 0xd9, 0xfa, 0x67, + 0xf7, 0x2e, 0x3f, 0xef, 0xb1, 0xfe, 0x14, 0x7f, + 0x67, 0xe9, 0x9f, 0xdc, 0xb8, 0xff, 0x00, 0xbe, + 0xc7, 0xf8, 0x54, 0xb4, 0x50, 0x04, 0x5f, 0xd9, + 0xfa, 0x67, 0xf7, 0x2e, 0x3f, 0xef, 0xb1, 0xfe, + 0x14, 0xab, 0x63, 0xa6, 0xa1, 0xdc, 0x20, 0x95, + 0xf1, 0xd9, 0xe4, 0xe3, 0xf4, 0xa9, 0x28, 0xa0, + 0x07, 0xc9, 0x21, 0x90, 0x8e, 0x15, 0x55, 0x46, + 0x15, 0x54, 0x60, 0x01, 0x4c, 0xa2, 0x8a, 0x00, + 0xbc, 0xff, 0x00, 0xf1, 0xed, 0x0f, 0xfb, 0xc9, + 0xfc, 0xc5, 0x14, 0x8f, 0xff, 0x00, 0x1e, 0xf0, + 0xff, 0x00, 0xbc, 0x9f, 0xcc, 0x51, 0x40, 0x0f, + 0xb7, 0xfb, 0xaf, 0xff, 0x00, 0x5d, 0x1f, 0xf9, + 0x9a, 0x9a, 0xa1, 0xb7, 0xfb, 0xaf, 0xff, 0x00, + 0x5d, 0x1f, 0xf9, 0x9a, 0x96, 0x80, 0x16, 0xb9, + 0x8f, 0x13, 0xff, 0x00, 0xc8, 0x49, 0x3f, 0xeb, + 0x8a, 0xff, 0x00, 0x5a, 0xe9, 0xab, 0x0f, 0x5f, + 0xd3, 0xef, 0x2e, 0x6f, 0x92, 0x48, 0x2d, 0xde, + 0x45, 0x11, 0x28, 0xc8, 0xf5, 0xe6, 0xb6, 0xa0, + 0xd2, 0x96, 0xa6, 0x55, 0x55, 0xe3, 0xa1, 0xce, + 0xd1, 0x57, 0xbf, 0xb1, 0xf5, 0x2f, 0xf9, 0xf3, + 0x92, 0x8f, 0xec, 0x7d, 0x4b, 0xfe, 0x7c, 0xe4, + 0xae, 0xce, 0x78, 0xf7, 0x39, 0x79, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x49, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x62, + 0x8d, 0x15, 0x7b, 0xfb, 0x1f, 0x52, 0xff, 0x00, + 0x9f, 0x39, 0x28, 0xfe, 0xc7, 0xd4, 0xbf, 0xe7, + 0xce, 0x4a, 0x39, 0xe3, 0xdc, 0x39, 0x5f, 0x63, + 0x67, 0xc3, 0x1f, 0xf1, 0xe1, 0x3f, 0xfd, 0x75, + 0x1f, 0xca, 0xa6, 0xb9, 0xff, 0x00, 0x5e, 0xd4, + 0x68, 0x36, 0xb3, 0xda, 0xd9, 0x4c, 0xb3, 0xc4, + 0xd1, 0xb1, 0x90, 0x10, 0x0f, 0xd2, 0x8b, 0x9f, + 0xf5, 0xef, 0x5c, 0x35, 0x5d, 0xe6, 0xce, 0xca, + 0x7f, 0x0a, 0x32, 0xbc, 0x43, 0xff, 0x00, 0x21, + 0x21, 0xff, 0x00, 0x5c, 0x97, 0xf9, 0x56, 0x5d, + 0x74, 0x5a, 0xbe, 0xab, 0x73, 0x69, 0x78, 0x22, + 0x88, 0x47, 0xb7, 0x62, 0x9f, 0x99, 0x33, 0xda, + 0xa8, 0xff, 0x00, 0x6f, 0x5e, 0xfa, 0x43, 0xff, + 0x00, 0x7e, 0xc5, 0x66, 0x59, 0x97, 0x45, 0x6a, + 0x7f, 0x6f, 0x5e, 0xfa, 0x43, 0xff, 0x00, 0x7e, + 0xc5, 0x1f, 0xdb, 0xd7, 0xbe, 0x90, 0xff, 0x00, + 0xdf, 0xb1, 0x40, 0x19, 0x75, 0x2d, 0xb4, 0xc6, + 0xde, 0x61, 0x20, 0x50, 0xc3, 0x04, 0x15, 0x3d, + 0xc1, 0x18, 0x23, 0xf2, 0xab, 0xff, 0x00, 0xdb, + 0xd7, 0xbe, 0x90, 0xff, 0x00, 0xdf, 0xb1, 0x47, + 0xf6, 0xf5, 0xef, 0xa4, 0x3f, 0xf7, 0xec, 0x50, + 0x05, 0x2b, 0x99, 0xd6, 0x51, 0x1a, 0x47, 0x1f, + 0x97, 0x14, 0x60, 0x85, 0x52, 0xdb, 0x8f, 0x3d, + 0x49, 0x35, 0x2a, 0xdf, 0x11, 0x3a, 0xb9, 0x8f, + 0x29, 0xe5, 0x2c, 0x4e, 0x99, 0xfb, 0xe0, 0x0c, + 0x7f, 0x4c, 0xd5, 0x8f, 0xed, 0xeb, 0xdf, 0x48, + 0x7f, 0xef, 0xd8, 0xa3, 0xfb, 0x7a, 0xf7, 0xd2, + 0x1f, 0xfb, 0xf6, 0x28, 0x02, 0x04, 0xbb, 0xb7, + 0xf2, 0x61, 0x49, 0x6d, 0x59, 0xda, 0x10, 0x42, + 0x9f, 0x37, 0x00, 0xfc, 0xc4, 0xf2, 0x31, 0xef, + 0x51, 0xc3, 0x76, 0x52, 0xf9, 0xae, 0xa5, 0x4f, + 0x30, 0xb9, 0x72, 0xca, 0x0e, 0xdc, 0xee, 0x04, + 0x1f, 0xe7, 0x56, 0xff, 0x00, 0xb7, 0xaf, 0x7d, + 0x21, 0xff, 0x00, 0xbf, 0x62, 0xac, 0x41, 0xa8, + 0xea, 0x93, 0xc5, 0xe6, 0xc6, 0x96, 0xfb, 0x37, + 0x6d, 0xcb, 0x6c, 0x5e, 0x7f, 0x13, 0xef, 0x40, + 0x19, 0xeb, 0x73, 0x6b, 0x1c, 0xb1, 0x4b, 0x0d, + 0xac, 0x8a, 0xd1, 0xc8, 0xaf, 0xf3, 0x4b, 0xbb, + 0x38, 0x3d, 0x3e, 0xed, 0x39, 0x6e, 0xed, 0x12, + 0x64, 0x9a, 0x3b, 0x49, 0x04, 0x8a, 0xe1, 0xc6, + 0x66, 0xc8, 0xe0, 0xe7, 0xfb, 0xb5, 0x79, 0x75, + 0x1d, 0x59, 0xa7, 0x68, 0x04, 0x31, 0x79, 0x8a, + 0x32, 0xc0, 0xa0, 0x18, 0x1e, 0xb9, 0xe9, 0x8a, + 0x47, 0xd4, 0xf5, 0x54, 0x9d, 0x21, 0x68, 0xa1, + 0x0f, 0x26, 0x02, 0x7c, 0x8b, 0x86, 0xcf, 0xa1, + 0xe9, 0x40, 0x18, 0xae, 0xdb, 0x9c, 0xb6, 0x31, + 0x93, 0x9a, 0xb6, 0xd7, 0xbb, 0xae, 0xee, 0x26, + 0x68, 0xb2, 0x93, 0x82, 0x1a, 0x3d, 0xde, 0xbd, + 0x39, 0xf6, 0x38, 0x35, 0x7d, 0x35, 0x3d, 0x52, + 0x4b, 0xa3, 0x6a, 0x91, 0x44, 0x66, 0x04, 0x82, + 0xbb, 0x07, 0x6e, 0xb5, 0x07, 0xf6, 0xf5, 0xef, + 0xa4, 0x3f, 0xf7, 0xec, 0x50, 0x04, 0x0b, 0x79, + 0x0b, 0x2c, 0x66, 0x7b, 0x51, 0x2c, 0x91, 0x80, + 0xaa, 0xdb, 0xf0, 0x08, 0x1d, 0x37, 0x0e, 0xf4, + 0xc5, 0xbe, 0x90, 0x19, 0x1c, 0xf3, 0x2b, 0xca, + 0xb2, 0xef, 0xcf, 0x42, 0x33, 0xfe, 0x35, 0x6b, + 0xfb, 0x7a, 0xf7, 0xd2, 0x1f, 0xfb, 0xf6, 0x28, + 0xfe, 0xde, 0xbd, 0xf4, 0x87, 0xfe, 0xfd, 0x8a, + 0x00, 0xad, 0x73, 0x79, 0xe7, 0xac, 0xcb, 0xe5, + 0x85, 0x12, 0x48, 0xae, 0x00, 0x3f, 0x74, 0x00, + 0x40, 0x1f, 0x91, 0xfd, 0x2a, 0xa5, 0x6a, 0x7f, + 0x6f, 0x5e, 0xfa, 0x43, 0xff, 0x00, 0x7e, 0xc5, + 0x1f, 0xdb, 0xd7, 0xbe, 0x90, 0xff, 0x00, 0xdf, + 0xb1, 0x40, 0x19, 0x74, 0x56, 0xa7, 0xf6, 0xf5, + 0xef, 0xa4, 0x3f, 0xf7, 0xec, 0x51, 0xfd, 0xbd, + 0x7b, 0xe9, 0x0f, 0xfd, 0xfb, 0x14, 0x01, 0x97, + 0x45, 0x6a, 0x7f, 0x6f, 0x5e, 0xfa, 0x43, 0xff, + 0x00, 0x7e, 0xc5, 0x1f, 0xdb, 0xd7, 0xbe, 0x90, + 0xff, 0x00, 0xdf, 0xb1, 0x40, 0x1a, 0xf7, 0x5f, + 0x7a, 0x3f, 0xfa, 0xe4, 0xbf, 0xca, 0xa1, 0xab, + 0x17, 0x8c, 0x5e, 0x44, 0x63, 0xd4, 0xc6, 0xa7, + 0xf4, 0xaa, 0xf4, 0x00, 0x51, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x01, 0x75, 0xff, 0x00, 0xe3, + 0xde, 0x1f, 0xf7, 0x93, 0xf9, 0x8a, 0x28, 0x7f, + 0xf8, 0xf7, 0x87, 0xfd, 0xe4, 0xfe, 0x62, 0x8a, + 0x00, 0x75, 0xbf, 0xdd, 0x7f, 0xfa, 0xe8, 0xff, + 0x00, 0xcc, 0xd4, 0xd5, 0x0d, 0xbf, 0xdd, 0x7f, + 0xfa, 0xe8, 0xff, 0x00, 0xcc, 0xd4, 0xb4, 0x00, + 0xb5, 0xc3, 0x78, 0xce, 0xe2, 0x78, 0xf5, 0xd6, + 0x58, 0xe6, 0x91, 0x17, 0xca, 0x4e, 0x15, 0x88, + 0x1d, 0x2b, 0xb8, 0xae, 0x0f, 0xc6, 0xff, 0x00, + 0xf2, 0x1f, 0x6f, 0xfa, 0xe4, 0x9f, 0xca, 0x80, + 0x31, 0x3e, 0xd9, 0x75, 0xff, 0x00, 0x3f, 0x33, + 0x7f, 0xdf, 0xc3, 0x47, 0xdb, 0x2e, 0xbf, 0xe7, + 0xe6, 0x6f, 0xfb, 0xf8, 0x6a, 0x0a, 0x28, 0x02, + 0x7f, 0xb6, 0x5d, 0x7f, 0xcf, 0xcc, 0xdf, 0xf7, + 0xf0, 0xd1, 0xf6, 0xcb, 0xaf, 0xf9, 0xf9, 0x9b, + 0xfe, 0xfe, 0x1a, 0x82, 0x8a, 0x00, 0xda, 0x36, + 0x97, 0x49, 0x1c, 0x4d, 0x36, 0xb7, 0x0c, 0x2d, + 0x24, 0x6b, 0x20, 0x47, 0x96, 0x4c, 0x80, 0x46, + 0x46, 0x70, 0xb4, 0xd8, 0x6d, 0xae, 0xe4, 0xb5, + 0x82, 0x79, 0x35, 0x78, 0xa0, 0x13, 0xe7, 0x62, + 0xcb, 0x2b, 0x82, 0x70, 0x71, 0xd8, 0x63, 0xb7, + 0xad, 0x4d, 0xa9, 0x3e, 0x9c, 0x16, 0xcc, 0x5c, + 0x41, 0x72, 0xf2, 0xfd, 0x92, 0x2e, 0x63, 0x95, + 0x55, 0x7e, 0xef, 0xa1, 0x53, 0x4d, 0x91, 0xec, + 0x53, 0x48, 0xd2, 0xcd, 0xdd, 0xbc, 0xf3, 0x30, + 0x49, 0x36, 0x88, 0xe5, 0x08, 0x31, 0xe6, 0x1e, + 0xbf, 0x29, 0xa0, 0x0a, 0xb2, 0x47, 0xa9, 0x45, + 0x1d, 0xd3, 0x49, 0x71, 0x22, 0x1b, 0x59, 0x16, + 0x39, 0x14, 0xc8, 0x73, 0x93, 0x9e, 0x9f, 0xf7, + 0xcd, 0x47, 0x23, 0xdf, 0x47, 0x67, 0x0d, 0xd1, + 0xbb, 0x93, 0x64, 0xcc, 0xea, 0xa0, 0x48, 0xd9, + 0xca, 0xe3, 0x39, 0xff, 0x00, 0xbe, 0x85, 0x5d, + 0x59, 0xa5, 0xd4, 0xac, 0xb5, 0x79, 0x02, 0x66, + 0x69, 0x24, 0x8a, 0x52, 0x88, 0x3a, 0x28, 0x2c, + 0x0e, 0x3d, 0x86, 0x45, 0x41, 0x7e, 0x8f, 0x0e, + 0x8b, 0xa7, 0x45, 0x2a, 0x94, 0x90, 0xbc, 0xb2, + 0x6d, 0x61, 0x83, 0xb4, 0xed, 0x00, 0xff, 0x00, + 0xe3, 0xa6, 0x80, 0x29, 0x7d, 0xb2, 0xeb, 0xfe, + 0x7e, 0x66, 0xff, 0x00, 0xbf, 0x86, 0x8f, 0xb6, + 0x5d, 0x7f, 0xcf, 0xcc, 0xdf, 0xf7, 0xf0, 0xd4, + 0x14, 0x50, 0x04, 0xff, 0x00, 0x6c, 0xba, 0xff, + 0x00, 0x9f, 0x99, 0xbf, 0xef, 0xe1, 0xa3, 0xed, + 0x97, 0x5f, 0xf3, 0xf3, 0x37, 0xfd, 0xfc, 0x35, + 0x05, 0x14, 0x01, 0xd2, 0x5b, 0xdc, 0xdc, 0x1f, + 0x06, 0x5d, 0xc8, 0x67, 0x93, 0x78, 0xbb, 0x50, + 0x1b, 0x79, 0xcf, 0x41, 0x58, 0x5f, 0x6c, 0xba, + 0xff, 0x00, 0x9f, 0x99, 0xbf, 0xef, 0xe1, 0xad, + 0x8b, 0x6f, 0xf9, 0x12, 0x6f, 0x3f, 0xeb, 0xed, + 0x7f, 0x90, 0xac, 0x0a, 0x00, 0x9f, 0xed, 0x97, + 0x5f, 0xf3, 0xf3, 0x37, 0xfd, 0xfc, 0x35, 0x6e, + 0xd5, 0x35, 0x0b, 0xab, 0x3b, 0xab, 0x98, 0xee, + 0x9f, 0x65, 0xb0, 0x52, 0xe0, 0xc8, 0xd9, 0x20, + 0xfa, 0x7e, 0x55, 0x9b, 0x5b, 0x9a, 0x0c, 0xc9, + 0x05, 0xad, 0xc9, 0x97, 0xfd, 0x53, 0xcd, 0x14, + 0x72, 0x7f, 0xb8, 0xc1, 0xd5, 0xbf, 0x43, 0x40, + 0x15, 0x51, 0x35, 0x07, 0xd3, 0x65, 0xd4, 0x05, + 0xd4, 0x82, 0x18, 0xe4, 0x11, 0x90, 0x64, 0x6c, + 0x93, 0xed, 0xfa, 0x7e, 0x75, 0x6a, 0x6d, 0x3f, + 0x50, 0x8a, 0x49, 0x61, 0x5d, 0x56, 0x29, 0x67, + 0x88, 0x16, 0x68, 0x52, 0x67, 0xdf, 0xc0, 0xc9, + 0xc6, 0x40, 0x07, 0x8f, 0x7a, 0x9e, 0xf6, 0x33, + 0x69, 0xa3, 0xdc, 0xe9, 0xc7, 0xef, 0x5b, 0x88, + 0x8c, 0x98, 0xfe, 0xfb, 0x33, 0x13, 0xfa, 0x6d, + 0x1f, 0x85, 0x1a, 0xb5, 0xed, 0x9d, 0x9e, 0xb3, + 0x79, 0x2c, 0x36, 0xd3, 0x1b, 0xcc, 0xb2, 0x87, + 0x79, 0x46, 0xc5, 0x25, 0x70, 0x48, 0x5d, 0xbe, + 0x87, 0xd6, 0x80, 0x32, 0xa6, 0x7b, 0xe8, 0x6d, + 0xed, 0xe7, 0x6b, 0xb9, 0x0a, 0xdc, 0x29, 0x65, + 0x02, 0x46, 0xc8, 0xc3, 0x15, 0xe7, 0xf2, 0xa2, + 0xed, 0xef, 0xac, 0xee, 0x3c, 0x99, 0x2e, 0xe4, + 0x2d, 0xb5, 0x5b, 0x2b, 0x23, 0x63, 0x0c, 0xa1, + 0x87, 0xe8, 0x6a, 0xc5, 0xd4, 0x32, 0xdc, 0x69, + 0x1a, 0x5b, 0x43, 0x13, 0xc8, 0x14, 0x49, 0x19, + 0xd8, 0x33, 0x86, 0xde, 0x4e, 0x3f, 0x22, 0x2a, + 0x3d, 0x7f, 0x1f, 0xda, 0xd2, 0xae, 0x79, 0x44, + 0x8d, 0x1b, 0x9e, 0x8c, 0xb1, 0xa8, 0x23, 0xf3, + 0x06, 0x80, 0x2a, 0x7d, 0xb2, 0xeb, 0xfe, 0x7e, + 0x66, 0xff, 0x00, 0xbf, 0x86, 0x8f, 0xb6, 0x5d, + 0x7f, 0xcf, 0xcc, 0xdf, 0xf7, 0xf0, 0xd4, 0x14, + 0x50, 0x07, 0x79, 0xe0, 0x89, 0x64, 0x97, 0x4d, + 0xbc, 0x32, 0xc8, 0xce, 0x44, 0xab, 0x8d, 0xcd, + 0x9e, 0xd5, 0xa5, 0x71, 0xfe, 0xbd, 0xeb, 0x2b, + 0xc0, 0x9f, 0xf2, 0x0d, 0xbc, 0xff, 0x00, 0xae, + 0xab, 0xfc, 0xab, 0x56, 0xe3, 0xfd, 0x7b, 0xd0, + 0x06, 0x57, 0x88, 0x7f, 0xe4, 0x24, 0x3f, 0xeb, + 0x92, 0xff, 0x00, 0x2a, 0xcb, 0xad, 0xed, 0x6a, + 0xc2, 0xee, 0xe2, 0xf8, 0x49, 0x0c, 0x0e, 0xe9, + 0xe5, 0xa8, 0xc8, 0xfa, 0x56, 0x77, 0xf6, 0x46, + 0xa3, 0xff, 0x00, 0x3e, 0x92, 0x50, 0x05, 0x2a, + 0x2a, 0xef, 0xf6, 0x46, 0xa3, 0xff, 0x00, 0x3e, + 0x92, 0x51, 0xfd, 0x91, 0xa8, 0xff, 0x00, 0xcf, + 0xa4, 0x94, 0x01, 0x4a, 0x8a, 0xbb, 0xfd, 0x91, + 0xa8, 0xff, 0x00, 0xcf, 0xa4, 0x94, 0x7f, 0x64, + 0x6a, 0x3f, 0xf3, 0xe9, 0x25, 0x00, 0x52, 0xa2, + 0xae, 0xff, 0x00, 0x64, 0x6a, 0x3f, 0xf3, 0xe9, + 0x25, 0x1f, 0xd9, 0x1a, 0x8f, 0xfc, 0xfa, 0x49, + 0x40, 0x14, 0xab, 0x46, 0x14, 0x82, 0x4d, 0x2e, + 0x35, 0x9e, 0x66, 0x88, 0x7d, 0xa1, 0xb0, 0x42, + 0x6e, 0xfe, 0x15, 0xeb, 0xc8, 0xa8, 0xff, 0x00, + 0xb2, 0x35, 0x1f, 0xf9, 0xf4, 0x92, 0x9e, 0x74, + 0xdd, 0x50, 0xc4, 0x21, 0x36, 0xd2, 0x6c, 0x0c, + 0x58, 0x0c, 0x0e, 0xa7, 0xff, 0x00, 0xd5, 0x40, + 0x13, 0xde, 0x93, 0xf6, 0x5b, 0xa8, 0xd1, 0x59, + 0x7c, 0xa7, 0x8a, 0x36, 0xcf, 0x52, 0xa0, 0x10, + 0x09, 0xfc, 0x71, 0xfa, 0x53, 0x6c, 0xb3, 0xe4, + 0xe9, 0xfb, 0xfa, 0xfd, 0xb3, 0xe4, 0xcf, 0xa7, + 0xcb, 0x9f, 0xd6, 0x85, 0xb5, 0xd6, 0x56, 0x51, + 0x22, 0xc1, 0x26, 0xfd, 0xa1, 0x09, 0xda, 0x39, + 0x51, 0xd8, 0xfa, 0xfe, 0x34, 0x8f, 0x67, 0xac, + 0x49, 0x3a, 0x4c, 0xd0, 0x48, 0x5e, 0x32, 0x0a, + 0x7c, 0xa3, 0x0b, 0x8f, 0x41, 0xd2, 0x80, 0x2d, + 0xda, 0xe0, 0x5e, 0x47, 0x79, 0xde, 0x7d, 0x88, + 0x3f, 0xde, 0xce, 0x1b, 0xff, 0x00, 0x41, 0xff, + 0x00, 0xc7, 0xab, 0x02, 0xb5, 0x12, 0xcf, 0x57, + 0x41, 0x18, 0x58, 0x24, 0x02, 0x37, 0x2e, 0xbc, + 0x0e, 0x09, 0xef, 0xfa, 0x54, 0x1f, 0xd9, 0x1a, + 0x8f, 0xfc, 0xfa, 0x49, 0x40, 0x14, 0xa8, 0xab, + 0xbf, 0xd9, 0x1a, 0x8f, 0xfc, 0xfa, 0x49, 0x47, + 0xf6, 0x46, 0xa3, 0xff, 0x00, 0x3e, 0x92, 0x50, + 0x05, 0x2a, 0x2a, 0xef, 0xf6, 0x46, 0xa3, 0xff, + 0x00, 0x3e, 0x92, 0x51, 0xfd, 0x91, 0xa8, 0xff, + 0x00, 0xcf, 0xa4, 0x94, 0x01, 0x4a, 0x8a, 0xbb, + 0xfd, 0x91, 0xa8, 0xff, 0x00, 0xcf, 0xa4, 0x94, + 0x7f, 0x64, 0x6a, 0x3f, 0xf3, 0xe9, 0x25, 0x00, + 0x52, 0xa2, 0xae, 0xff, 0x00, 0x64, 0x6a, 0x3f, + 0xf3, 0xe9, 0x25, 0x1f, 0xd9, 0x1a, 0x8f, 0xfc, + 0xfa, 0x49, 0x40, 0x1b, 0xd7, 0x5f, 0x7a, 0x3f, + 0xfa, 0xe4, 0xbf, 0xca, 0xa1, 0xa9, 0xef, 0x14, + 0xab, 0xc6, 0xa7, 0x82, 0x23, 0x50, 0x47, 0xe1, + 0x50, 0x50, 0x01, 0x45, 0x2a, 0xa3, 0x39, 0xc2, + 0x29, 0x63, 0xe8, 0x05, 0x49, 0xf6, 0x5b, 0x8f, + 0xf9, 0xe2, 0xff, 0x00, 0x95, 0x00, 0x45, 0x45, + 0x4b, 0xf6, 0x59, 0xff, 0x00, 0xe7, 0x8b, 0xfe, + 0x54, 0x7d, 0x96, 0x7f, 0xf9, 0xe2, 0xff, 0x00, + 0x95, 0x00, 0x45, 0x45, 0x4b, 0xf6, 0x59, 0xff, + 0x00, 0xe7, 0x8b, 0xfe, 0x54, 0x7d, 0x96, 0x7f, + 0xf9, 0xe2, 0xff, 0x00, 0x95, 0x00, 0x45, 0x45, + 0x4b, 0xf6, 0x59, 0xff, 0x00, 0xe7, 0x8b, 0xfe, + 0x54, 0x7d, 0x96, 0x7f, 0xf9, 0xe2, 0xff, 0x00, + 0x95, 0x00, 0x45, 0x45, 0x4b, 0xf6, 0x59, 0xff, + 0x00, 0xe7, 0x8b, 0xfe, 0x54, 0x7d, 0x96, 0x7f, + 0xf9, 0xe2, 0xff, 0x00, 0x95, 0x00, 0x45, 0x45, + 0x4b, 0xf6, 0x59, 0xff, 0x00, 0xe7, 0x8b, 0xfe, + 0x54, 0x7d, 0x96, 0x7f, 0xf9, 0xe2, 0xff, 0x00, + 0x95, 0x00, 0x45, 0x45, 0x4b, 0xf6, 0x59, 0xff, + 0x00, 0xe7, 0x8b, 0xfe, 0x54, 0x7d, 0x96, 0x7f, + 0xf9, 0xe2, 0xff, 0x00, 0x95, 0x00, 0x45, 0x45, + 0x4b, 0xf6, 0x59, 0xff, 0x00, 0xe7, 0x8b, 0xfe, + 0x54, 0x7d, 0x96, 0x7f, 0xf9, 0xe2, 0xff, 0x00, + 0x95, 0x00, 0x45, 0x45, 0x4b, 0xf6, 0x59, 0xff, + 0x00, 0xe7, 0x8b, 0xfe, 0x54, 0x7d, 0x96, 0x7f, + 0xf9, 0xe2, 0xff, 0x00, 0x95, 0x00, 0x45, 0x45, + 0x4b, 0xf6, 0x59, 0xff, 0x00, 0xe7, 0x8b, 0xfe, + 0x54, 0x7d, 0x96, 0x7f, 0xf9, 0xe2, 0xff, 0x00, + 0x95, 0x00, 0x45, 0x45, 0x4b, 0xf6, 0x59, 0xff, + 0x00, 0xe7, 0x8b, 0xfe, 0x54, 0x7d, 0x96, 0x7f, + 0xf9, 0xe2, 0xff, 0x00, 0x95, 0x00, 0x45, 0x45, + 0x2b, 0x2b, 0x29, 0xc3, 0x29, 0x07, 0xd0, 0x8a, + 0x4a, 0x00, 0xba, 0xff, 0x00, 0xf1, 0xef, 0x0f, + 0xfb, 0xc9, 0xfc, 0xc5, 0x14, 0x3f, 0xfa, 0x88, + 0x7f, 0xde, 0x4f, 0xe6, 0x28, 0xa0, 0x07, 0x5b, + 0xfd, 0xd7, 0xff, 0x00, 0xae, 0x8f, 0xfc, 0xcd, + 0x4b, 0x50, 0xc1, 0xf7, 0x5f, 0xfe, 0xba, 0x3f, + 0xf3, 0x35, 0x2d, 0x00, 0x2d, 0x60, 0xeb, 0xde, + 0x1a, 0x93, 0x56, 0xd4, 0x4d, 0xdc, 0x77, 0x71, + 0xc6, 0xa5, 0x15, 0x76, 0xb2, 0x92, 0x78, 0xad, + 0xda, 0xe4, 0xfc, 0x59, 0xab, 0x6a, 0x16, 0x3a, + 0xac, 0x70, 0xda, 0xdd, 0x49, 0x14, 0x66, 0x05, + 0x6d, 0xab, 0xd3, 0x3c, 0xd0, 0x03, 0x3f, 0xe1, + 0x07, 0xb8, 0xff, 0x00, 0xa0, 0x84, 0x3f, 0xf7, + 0xc1, 0xa3, 0xfe, 0x10, 0x7b, 0x8f, 0xfa, 0x08, + 0x43, 0xff, 0x00, 0x7c, 0x1a, 0xc6, 0xff, 0x00, + 0x84, 0x8b, 0x59, 0xff, 0x00, 0xa0, 0x8c, 0xdf, + 0x9d, 0x5b, 0x93, 0x50, 0xf1, 0x2c, 0x57, 0xeb, + 0x63, 0x25, 0xd4, 0xeb, 0x72, 0xc4, 0x00, 0x85, + 0x97, 0x9c, 0xf4, 0xe7, 0xa5, 0x00, 0x5e, 0xff, + 0x00, 0x84, 0x1e, 0xe3, 0xfe, 0x82, 0x10, 0xff, + 0x00, 0xdf, 0x06, 0x8f, 0xf8, 0x41, 0xee, 0x3f, + 0xe8, 0x21, 0x0f, 0xfd, 0xf0, 0x6b, 0x2a, 0x6d, + 0x6f, 0x5e, 0x83, 0xcb, 0xf3, 0x6f, 0xa6, 0x5f, + 0x35, 0x04, 0x89, 0xf3, 0x03, 0x95, 0x3d, 0xea, + 0x59, 0x75, 0x3f, 0x11, 0xc2, 0x26, 0x32, 0x5e, + 0x4c, 0xbe, 0x48, 0x43, 0x27, 0xce, 0xbf, 0x2e, + 0xef, 0xbb, 0x40, 0x1a, 0x4f, 0xe0, 0xbb, 0xb9, + 0x08, 0x2f, 0xa9, 0x46, 0xfb, 0x40, 0x51, 0xb8, + 0x31, 0xc0, 0x1d, 0x05, 0x0d, 0xe0, 0xbb, 0xb6, + 0x44, 0x46, 0xd4, 0xe3, 0x65, 0x41, 0x85, 0x04, + 0x36, 0x17, 0xe9, 0x54, 0x92, 0xeb, 0xc5, 0x32, + 0x40, 0x26, 0x5b, 0x89, 0xca, 0xb2, 0xef, 0x03, + 0x7a, 0xee, 0x2b, 0xea, 0x17, 0xa9, 0x1f, 0x85, + 0x51, 0xff, 0x00, 0x84, 0x8b, 0x59, 0xff, 0x00, + 0xa0, 0x8c, 0xdf, 0x9d, 0x00, 0x6e, 0x41, 0xe0, + 0xcb, 0xd8, 0x65, 0x0f, 0x06, 0xa8, 0x91, 0xc8, + 0x3a, 0x32, 0x06, 0x04, 0x53, 0xa6, 0xf0, 0x4d, + 0xfc, 0xf2, 0x19, 0x26, 0xd4, 0x92, 0x47, 0x3d, + 0x59, 0xc3, 0x12, 0x7f, 0x1a, 0x83, 0xc3, 0x9a, + 0xde, 0xa5, 0x75, 0x77, 0x3d, 0xbd, 0xc5, 0xcb, + 0x4a, 0x86, 0xde, 0x46, 0xf9, 0x80, 0xc8, 0x20, + 0x71, 0x83, 0xd6, 0xb9, 0xaf, 0xb6, 0x5d, 0x7f, + 0xcf, 0xcc, 0xdf, 0xf7, 0xf0, 0xd0, 0x07, 0x53, + 0xff, 0x00, 0x08, 0x1d, 0xd7, 0xfc, 0xff, 0x00, + 0x43, 0xff, 0x00, 0x7c, 0x1a, 0x3f, 0xe1, 0x03, + 0xba, 0xff, 0x00, 0x9f, 0xe8, 0x7f, 0xef, 0x83, + 0x5c, 0xb7, 0xdb, 0x2e, 0xbf, 0xe7, 0xe6, 0x6f, + 0xfb, 0xf8, 0x6b, 0x56, 0x48, 0xe1, 0xb7, 0x48, + 0x7e, 0xd1, 0xad, 0x5e, 0x24, 0x92, 0x44, 0x92, + 0xed, 0x48, 0x4b, 0x01, 0xb8, 0x67, 0x19, 0xde, + 0x28, 0x03, 0x53, 0xfe, 0x10, 0x3b, 0xaf, 0xf9, + 0xfe, 0x87, 0xfe, 0xf8, 0x34, 0x7f, 0xc2, 0x07, + 0x75, 0xff, 0x00, 0x3f, 0xd0, 0xff, 0x00, 0xdf, + 0x06, 0xb2, 0x6c, 0x12, 0x3b, 0xc5, 0x93, 0x76, + 0xb1, 0x77, 0x1b, 0xc6, 0x8f, 0x21, 0x51, 0x19, + 0x61, 0xb5, 0x79, 0xeb, 0xbc, 0x76, 0xa5, 0x8a, + 0xde, 0x5b, 0x9b, 0x7b, 0xf9, 0xed, 0x75, 0x3b, + 0x87, 0x4b, 0x55, 0x56, 0x50, 0xe0, 0xa9, 0x7c, + 0xe4, 0x9f, 0xe2, 0x38, 0xc0, 0x06, 0x80, 0x3a, + 0x68, 0xbc, 0x29, 0x3a, 0x68, 0x33, 0xe9, 0xbf, + 0x6a, 0x8c, 0xbc, 0x93, 0x09, 0x43, 0xed, 0x38, + 0x18, 0x1d, 0x2b, 0x3b, 0xfe, 0x10, 0x3b, 0xaf, + 0xf9, 0xfe, 0x87, 0xfe, 0xf8, 0x35, 0x8a, 0x91, + 0x5e, 0x36, 0x8d, 0x2e, 0xa2, 0x6f, 0xa6, 0x50, + 0x92, 0x88, 0xd5, 0x37, 0x1f, 0x9b, 0xd4, 0xe7, + 0x3e, 0xe2, 0xa8, 0x7d, 0xb2, 0xeb, 0xfe, 0x7e, + 0x66, 0xff, 0x00, 0xbf, 0x86, 0x80, 0x3a, 0x9f, + 0xf8, 0x40, 0xee, 0xbf, 0xe7, 0xfa, 0x1f, 0xfb, + 0xe0, 0xd1, 0xff, 0x00, 0x08, 0x4d, 0xda, 0x2b, + 0x44, 0x35, 0x28, 0xc2, 0xb6, 0x0b, 0x2e, 0x1b, + 0x07, 0x1d, 0x3f, 0x9d, 0x72, 0xdf, 0x6c, 0xba, + 0xff, 0x00, 0x9f, 0x99, 0xbf, 0xef, 0xe1, 0xae, + 0x9f, 0x5c, 0xd5, 0x35, 0x68, 0xf5, 0x2b, 0x7b, + 0x3b, 0x1b, 0x89, 0x46, 0xe8, 0x23, 0xda, 0x88, + 0x06, 0x49, 0x22, 0x80, 0x24, 0x6f, 0x07, 0x5f, + 0x3e, 0xfd, 0xfa, 0xaa, 0x37, 0x98, 0x41, 0x7c, + 0xee, 0x3b, 0xb1, 0xd3, 0x3e, 0xb4, 0xd9, 0x3c, + 0x17, 0x77, 0x2b, 0x99, 0x25, 0xd4, 0xe3, 0x77, + 0x63, 0x92, 0xcc, 0x18, 0x93, 0x54, 0x65, 0xbd, + 0xf1, 0x34, 0x3e, 0x5e, 0xfb, 0xb9, 0x08, 0x91, + 0xc4, 0x6a, 0xcb, 0x2a, 0x30, 0xdc, 0x7b, 0x12, + 0x0e, 0x01, 0xfa, 0xd4, 0x4b, 0xaa, 0xf8, 0x89, + 0xcd, 0xc0, 0x5b, 0xb9, 0xc9, 0xb6, 0x04, 0xcb, + 0xf3, 0x0f, 0x94, 0x03, 0x8f, 0xe7, 0x40, 0x1a, + 0xf0, 0x78, 0x47, 0x51, 0xb6, 0x0c, 0x2d, 0xf5, + 0x81, 0x08, 0x6f, 0xbd, 0xe5, 0x96, 0x5c, 0xfd, + 0x71, 0x50, 0x9f, 0x03, 0xdc, 0x13, 0x93, 0xa8, + 0x43, 0xff, 0x00, 0x7c, 0x9a, 0xa5, 0x6d, 0x7d, + 0xe2, 0x5b, 0xa4, 0x59, 0x21, 0xbc, 0x90, 0xa3, + 0x2b, 0x30, 0x66, 0x95, 0x14, 0x61, 0x48, 0x04, + 0xf2, 0x7f, 0xda, 0x15, 0x1d, 0xde, 0xa9, 0xe2, + 0x2b, 0x2d, 0x9f, 0x68, 0xbc, 0x99, 0x43, 0xfd, + 0xd6, 0x0e, 0xac, 0xad, 0xf4, 0x23, 0x8a, 0x00, + 0xd1, 0xff, 0x00, 0x84, 0x1e, 0xe3, 0xfe, 0x82, + 0x10, 0xff, 0x00, 0xdf, 0x06, 0x8f, 0xf8, 0x41, + 0xee, 0x3f, 0xe8, 0x21, 0x0f, 0xfd, 0xf0, 0x6a, + 0xad, 0xbd, 0xd7, 0x8a, 0x2e, 0x42, 0x79, 0x57, + 0x8c, 0x4b, 0x80, 0x54, 0x34, 0xf1, 0xa9, 0x20, + 0xfb, 0x13, 0x9a, 0xaf, 0x75, 0xab, 0xeb, 0xf6, + 0x6e, 0x12, 0x6d, 0x41, 0xf7, 0x11, 0x91, 0xb2, + 0x54, 0x71, 0xf9, 0xae, 0x68, 0x03, 0xb0, 0xd0, + 0x74, 0x87, 0xd1, 0xac, 0xe7, 0x89, 0xe7, 0x49, + 0x4c, 0x8e, 0x18, 0x6d, 0x04, 0x63, 0x8a, 0x75, + 0xc7, 0xfa, 0xf6, 0xac, 0xdf, 0x07, 0xea, 0x37, + 0x97, 0xf1, 0x5f, 0xfd, 0xb2, 0xe1, 0xe6, 0xf2, + 0xfc, 0xbd, 0xbb, 0xbb, 0x67, 0x76, 0x7f, 0x95, + 0x69, 0x5c, 0x7f, 0xaf, 0x6a, 0x00, 0xcd, 0xd7, + 0x65, 0x95, 0x2e, 0xa1, 0x09, 0x23, 0x28, 0xf2, + 0x13, 0x80, 0xd8, 0xac, 0xdf, 0xb4, 0x4f, 0xff, + 0x00, 0x3d, 0xa4, 0xff, 0x00, 0xbe, 0x8d, 0x5f, + 0xd7, 0xff, 0x00, 0xe3, 0xee, 0x0f, 0xfa, 0xf7, + 0x4a, 0xcb, 0xa0, 0x09, 0x7e, 0xd1, 0x3f, 0xfc, + 0xf6, 0x93, 0xfe, 0xfa, 0x34, 0x7d, 0xa2, 0x7f, + 0xf9, 0xed, 0x27, 0xfd, 0xf4, 0x6a, 0x2a, 0x28, + 0x02, 0x5f, 0xb4, 0x4f, 0xff, 0x00, 0x3d, 0xa4, + 0xff, 0x00, 0xbe, 0x8d, 0x1f, 0x68, 0x9f, 0xfe, + 0x7b, 0x49, 0xff, 0x00, 0x7d, 0x1a, 0x8a, 0x8a, + 0x00, 0xb1, 0x03, 0x5d, 0xdc, 0x4a, 0x22, 0x8a, + 0x59, 0x0b, 0x9c, 0xe0, 0x19, 0x31, 0xdb, 0x3d, + 0xcd, 0x4a, 0xf0, 0xea, 0x08, 0xf1, 0xa9, 0x67, + 0x3e, 0x63, 0x6d, 0x42, 0xb2, 0x64, 0x13, 0xe9, + 0x90, 0x71, 0x4d, 0xd3, 0x3f, 0xe3, 0xf4, 0x7f, + 0xd7, 0x39, 0x3f, 0xf4, 0x06, 0xab, 0x3a, 0x3e, + 0x70, 0x77, 0x7d, 0xcf, 0x3e, 0x1c, 0x7f, 0xbd, + 0xbb, 0xfc, 0x33, 0x40, 0x15, 0x91, 0x2f, 0xa4, + 0xba, 0x36, 0xca, 0xd2, 0x99, 0x81, 0x20, 0xae, + 0xff, 0x00, 0x4e, 0xbd, 0xe9, 0xb1, 0x9b, 0xc9, + 0x63, 0x91, 0xe3, 0x79, 0x59, 0x63, 0x19, 0x73, + 0xbf, 0xa0, 0xad, 0x6b, 0x5c, 0x0b, 0xc8, 0xef, + 0x3b, 0xcf, 0xb1, 0x07, 0xfb, 0xd9, 0xc3, 0x7f, + 0xe8, 0x3f, 0xf8, 0xf5, 0x57, 0xb0, 0x58, 0xe2, + 0xb6, 0x80, 0x49, 0x3c, 0x71, 0x89, 0x9d, 0x99, + 0xd5, 0xb3, 0x96, 0x4c, 0x15, 0x1d, 0x07, 0xbb, + 0x50, 0x06, 0x72, 0xcd, 0x70, 0xec, 0x15, 0x65, + 0x94, 0xb1, 0x38, 0x00, 0x31, 0xe6, 0xa7, 0xf2, + 0x75, 0x0f, 0x2d, 0x9c, 0x34, 0x85, 0x57, 0x39, + 0xc4, 0x9d, 0x71, 0xd7, 0x1c, 0xf3, 0xf8, 0x51, + 0x65, 0x1b, 0x43, 0x7e, 0xea, 0xc3, 0x0f, 0x0a, + 0xc8, 0x7f, 0xe0, 0x4a, 0xa7, 0xfa, 0x8a, 0x92, + 0xc0, 0x11, 0x2a, 0xac, 0x82, 0x41, 0x2b, 0xc6, + 0xc2, 0x06, 0x27, 0x2a, 0x06, 0x0f, 0x6f, 0xce, + 0x80, 0x22, 0x68, 0xef, 0xd6, 0xdf, 0xcf, 0x2d, + 0x20, 0x8f, 0x19, 0xcf, 0x99, 0xce, 0x3d, 0x71, + 0x9c, 0xe2, 0xa0, 0xfb, 0x44, 0xff, 0x00, 0xf3, + 0xda, 0x4f, 0xfb, 0xe8, 0xd5, 0x9d, 0xc6, 0x0b, + 0x57, 0x92, 0x56, 0x2d, 0x35, 0xc4, 0x61, 0x11, + 0x4f, 0x64, 0xe3, 0x93, 0xf9, 0x60, 0x53, 0x6d, + 0x8a, 0xc3, 0x65, 0x25, 0xc7, 0x94, 0x92, 0x3f, + 0x98, 0xa9, 0xf3, 0xae, 0xe0, 0x06, 0x09, 0xe9, + 0xf8, 0x50, 0x04, 0x46, 0x4b, 0xa1, 0x12, 0xca, + 0x65, 0x93, 0x63, 0x12, 0xa0, 0xef, 0xee, 0x31, + 0x9f, 0xe6, 0x28, 0x79, 0x2e, 0xa3, 0x08, 0x5a, + 0x59, 0x00, 0x71, 0xb9, 0x4e, 0xfe, 0xa2, 0xb4, + 0x21, 0x75, 0x48, 0xad, 0xd0, 0xdb, 0x20, 0x0f, + 0x74, 0xea, 0x52, 0x45, 0xdd, 0xb4, 0x7c, 0x99, + 0x1c, 0xd5, 0x5b, 0x85, 0x02, 0xc0, 0x0f, 0xf9, + 0xe7, 0x70, 0xea, 0xbf, 0x4c, 0x0f, 0xf0, 0xfd, + 0x68, 0x02, 0xbf, 0xda, 0x27, 0xff, 0x00, 0x9e, + 0xd2, 0x7f, 0xdf, 0x46, 0x8f, 0xb4, 0x4f, 0xff, + 0x00, 0x3d, 0xa4, 0xff, 0x00, 0xbe, 0x8d, 0x45, + 0x45, 0x00, 0x4b, 0xf6, 0x89, 0xff, 0x00, 0xe7, + 0xb4, 0x9f, 0xf7, 0xd1, 0xa3, 0xed, 0x13, 0xff, + 0x00, 0xcf, 0x69, 0x3f, 0xef, 0xa3, 0x51, 0x51, + 0x40, 0x12, 0xfd, 0xa2, 0x7f, 0xf9, 0xed, 0x27, + 0xfd, 0xf4, 0x68, 0xfb, 0x44, 0xff, 0x00, 0xf3, + 0xda, 0x4f, 0xfb, 0xe8, 0xd4, 0x54, 0x50, 0x07, + 0x57, 0x75, 0xcc, 0x8b, 0xfe, 0xe2, 0xff, 0x00, + 0x2a, 0x89, 0x14, 0xbb, 0xaa, 0x8e, 0xac, 0x70, + 0x2a, 0x5b, 0xaf, 0xf5, 0x8b, 0xfe, 0xe2, 0xff, + 0x00, 0x2a, 0x6d, 0xb7, 0xfc, 0x7c, 0xc5, 0xfe, + 0xf8, 0xfe, 0x74, 0x00, 0xdb, 0x9b, 0xdf, 0x2a, + 0x46, 0x82, 0x06, 0x28, 0x88, 0x70, 0x48, 0xe0, + 0xb1, 0xee, 0x6a, 0xbf, 0xdb, 0x1f, 0xfe, 0x7a, + 0x37, 0xe7, 0x59, 0x97, 0x93, 0xe2, 0xf6, 0x71, + 0x9e, 0x92, 0x37, 0xf3, 0xa8, 0x7e, 0xd1, 0xef, + 0x5c, 0x92, 0xbb, 0x64, 0x9b, 0x3f, 0x6c, 0x7f, + 0xf9, 0xe8, 0xdf, 0x9d, 0x1f, 0x6c, 0x7f, 0xf9, + 0xe8, 0xdf, 0x9d, 0x63, 0x7d, 0xa3, 0xde, 0xb4, + 0x34, 0x5f, 0x2a, 0xe6, 0xf8, 0xc7, 0x20, 0x0c, + 0x42, 0x12, 0x88, 0x4e, 0x03, 0x37, 0xa5, 0x25, + 0x16, 0xd8, 0x16, 0x7e, 0xd8, 0xff, 0x00, 0xf3, + 0xd1, 0xbf, 0x3a, 0x3e, 0xd8, 0xff, 0x00, 0xf3, + 0xd1, 0xbf, 0x3a, 0x8e, 0xfa, 0x70, 0x22, 0x11, + 0xdd, 0x58, 0x7d, 0x92, 0x5d, 0xe3, 0x6c, 0x88, + 0x98, 0x5c, 0x77, 0xfa, 0xd3, 0x7e, 0xc0, 0xcb, + 0x7f, 0x3d, 0xb3, 0x4d, 0x84, 0x86, 0x3f, 0x34, + 0xc9, 0xb7, 0xaa, 0xe3, 0xd3, 0x34, 0xf9, 0x58, + 0x13, 0x7d, 0xb1, 0xff, 0x00, 0xe7, 0xa3, 0x7e, + 0x74, 0x7d, 0xb1, 0xff, 0x00, 0xe7, 0xa3, 0x7e, + 0x75, 0x00, 0xb3, 0x41, 0x14, 0x46, 0x6b, 0xd8, + 0xe1, 0x96, 0x68, 0xfc, 0xc4, 0x46, 0x07, 0x04, + 0x76, 0xcb, 0x74, 0x15, 0x2d, 0xf5, 0xbc, 0x09, + 0x05, 0x92, 0xdb, 0xcb, 0xbe, 0x69, 0x80, 0x0a, + 0x36, 0x11, 0xbf, 0x27, 0xaf, 0xb5, 0x1c, 0x8c, + 0x07, 0x7d, 0xb1, 0xff, 0x00, 0xe7, 0xa3, 0x7e, + 0x74, 0x7d, 0xb1, 0xff, 0x00, 0xe7, 0xa3, 0x7e, + 0x75, 0x5e, 0xe6, 0xcc, 0x43, 0x0c, 0xcf, 0x15, + 0xd2, 0xcc, 0xf6, 0xe4, 0x09, 0x90, 0x29, 0x1b, + 0x7f, 0xc6, 0xac, 0x36, 0x92, 0x44, 0xd2, 0x40, + 0x97, 0x68, 0x66, 0x54, 0xf3, 0x15, 0x0a, 0xe3, + 0x23, 0xfa, 0x51, 0xc8, 0xc0, 0x3e, 0xd8, 0xff, + 0x00, 0xf3, 0xd1, 0xbf, 0x3a, 0x3e, 0xd8, 0xff, + 0x00, 0xf3, 0xd1, 0xbf, 0x3a, 0xa7, 0x7b, 0x00, + 0xb6, 0xb7, 0x86, 0xe2, 0x3b, 0x85, 0x9e, 0x29, + 0x72, 0x03, 0x05, 0x23, 0x04, 0x55, 0xf4, 0x8e, + 0x29, 0x7c, 0x3a, 0xb2, 0x2c, 0x6b, 0xe7, 0x6d, + 0x69, 0x37, 0x63, 0x9c, 0x2b, 0x73, 0xcf, 0xd0, + 0xd0, 0xa0, 0xc0, 0x67, 0xdb, 0x1f, 0xfe, 0x7a, + 0x37, 0xe7, 0x47, 0xdb, 0x1f, 0xfe, 0x7a, 0x37, + 0xe7, 0x4f, 0xb8, 0x8e, 0x28, 0x74, 0x04, 0x6f, + 0x2d, 0x7c, 0xec, 0x23, 0x16, 0xc7, 0x3f, 0x31, + 0x38, 0x1f, 0x95, 0x43, 0xfd, 0x98, 0x77, 0x79, + 0x1f, 0x6b, 0x4f, 0xb6, 0x6c, 0xdf, 0xe4, 0x6d, + 0x3f, 0x96, 0x7d, 0x69, 0xf2, 0x30, 0x1f, 0xf6, + 0xc7, 0xff, 0x00, 0x9e, 0x8d, 0xf9, 0xd1, 0xf6, + 0xc7, 0xff, 0x00, 0x9e, 0x8d, 0xf9, 0xd4, 0x16, + 0xb6, 0xa0, 0xc1, 0x0d, 0xcc, 0xd7, 0x29, 0x09, + 0x95, 0xf6, 0xc4, 0x8c, 0x0f, 0xcd, 0x83, 0xfa, + 0x55, 0x8d, 0x6e, 0x12, 0x24, 0xb9, 0xbc, 0xf3, + 0x38, 0x59, 0x96, 0x2d, 0x98, 0xff, 0x00, 0x60, + 0x1c, 0xe6, 0x8e, 0x47, 0x6b, 0x80, 0x9f, 0x6c, + 0x7f, 0xf9, 0xe8, 0xdf, 0x9d, 0x1f, 0x6c, 0x7f, + 0xf9, 0xe8, 0xdf, 0x9d, 0x49, 0x65, 0x0f, 0xd9, + 0x6f, 0x24, 0x43, 0x26, 0xfd, 0xf6, 0x46, 0x4e, + 0x98, 0xc6, 0x6a, 0x9d, 0xb5, 0xa0, 0x96, 0x08, + 0xa5, 0x9a, 0xe9, 0x60, 0xf3, 0xdb, 0x6c, 0x4a, + 0x54, 0x9d, 0xc7, 0xfa, 0x51, 0xc8, 0xc0, 0xb1, + 0xf6, 0xc7, 0xff, 0x00, 0x9e, 0x8d, 0xf9, 0xd1, + 0xf6, 0xc7, 0xff, 0x00, 0x9e, 0x8d, 0xf9, 0xd5, + 0x78, 0xec, 0xf1, 0x1c, 0xd2, 0x5d, 0xdc, 0x0b, + 0x74, 0x8e, 0x5f, 0x28, 0x9d, 0xa5, 0xb2, 0xdf, + 0x85, 0x52, 0xb9, 0x71, 0x04, 0xef, 0x10, 0x95, + 0x24, 0x0b, 0xd1, 0xd0, 0xe4, 0x1a, 0x5c, 0xac, + 0x0d, 0x5f, 0xb6, 0x3f, 0xfc, 0xf4, 0x6f, 0xce, + 0x8f, 0xb6, 0x3f, 0xfc, 0xf4, 0x6f, 0xce, 0xb1, + 0xbe, 0xd1, 0xef, 0x47, 0xda, 0x3d, 0xe9, 0x58, + 0x0e, 0x8a, 0xd6, 0xe8, 0xdd, 0x38, 0xb6, 0x95, + 0xb7, 0x6e, 0xfb, 0x8c, 0x7a, 0x83, 0x4c, 0x23, + 0x07, 0x9a, 0xca, 0xd2, 0xe7, 0xdd, 0xa9, 0xdb, + 0x0c, 0xf5, 0x90, 0x56, 0xbc, 0x9f, 0xeb, 0x5f, + 0xea, 0x6b, 0xa2, 0x9b, 0x76, 0xd4, 0x68, 0xb4, + 0xff, 0x00, 0xea, 0x21, 0xff, 0x00, 0x79, 0x3f, + 0x98, 0xa2, 0x87, 0xff, 0x00, 0x51, 0x0f, 0xfb, + 0xc9, 0xfc, 0xc5, 0x15, 0xa0, 0xc7, 0x41, 0xf7, + 0x5f, 0xfe, 0xba, 0x3f, 0xf3, 0x35, 0x2d, 0x45, + 0x07, 0xdd, 0x7f, 0xfa, 0xe8, 0xff, 0x00, 0xcc, + 0xd4, 0x94, 0x00, 0xb5, 0xc3, 0x78, 0xe3, 0xfe, + 0x43, 0x51, 0xff, 0x00, 0xd7, 0xba, 0x7f, 0x5a, + 0xee, 0x2b, 0x17, 0xc4, 0x1e, 0x1f, 0xfe, 0xd8, + 0x78, 0xee, 0x21, 0x9d, 0x22, 0xb8, 0x45, 0xd8, + 0x44, 0x99, 0xda, 0xc3, 0xb7, 0x23, 0xa5, 0x00, + 0x79, 0xed, 0x76, 0x99, 0xfb, 0x7e, 0xbe, 0xbd, + 0xee, 0x2c, 0x6e, 0xc0, 0xf7, 0x68, 0x8b, 0x7f, + 0xec, 0xac, 0x7f, 0x26, 0xaa, 0x5f, 0xf0, 0x85, + 0x6a, 0x3f, 0xf3, 0xf7, 0x65, 0xff, 0x00, 0x7f, + 0x1b, 0xff, 0x00, 0x89, 0xab, 0x51, 0x78, 0x73, + 0x5e, 0x86, 0xfd, 0xaf, 0xe3, 0xd4, 0x6c, 0xd6, + 0xe5, 0x89, 0x25, 0xc3, 0x1e, 0x73, 0xd7, 0x8d, + 0xb8, 0xa0, 0x0c, 0xdd, 0x36, 0xdd, 0x35, 0x3b, + 0x2b, 0x31, 0x27, 0xdd, 0xb3, 0x9c, 0x89, 0x8f, + 0xfd, 0x31, 0x20, 0xbf, 0xfe, 0xca, 0xff, 0x00, + 0x9d, 0x45, 0x1d, 0xc1, 0xbb, 0xb3, 0xd6, 0x2e, + 0x65, 0xff, 0x00, 0x96, 0xb2, 0xc4, 0xec, 0x3d, + 0x01, 0x63, 0x5a, 0x76, 0xfe, 0x15, 0xd6, 0x6d, + 0xa3, 0x9a, 0x38, 0x6f, 0xec, 0xd1, 0x67, 0x4f, + 0x2e, 0x40, 0x1d, 0xbe, 0x65, 0xf4, 0xfb, 0xb4, + 0xd4, 0xf0, 0x8e, 0xad, 0x1c, 0x12, 0xc0, 0xb7, + 0xb6, 0x42, 0x39, 0x71, 0xbc, 0x6f, 0x6e, 0x71, + 0xd3, 0xf8, 0x68, 0x03, 0x33, 0x57, 0x17, 0x5f, + 0xf0, 0x93, 0xce, 0x20, 0xdf, 0xe7, 0x99, 0xbf, + 0x73, 0xb3, 0xae, 0x3f, 0x83, 0x1f, 0x86, 0x2b, + 0x21, 0xb3, 0xb8, 0xee, 0xeb, 0x9e, 0x73, 0x5d, + 0xa2, 0x68, 0x3e, 0x21, 0x4b, 0x71, 0x02, 0xea, + 0x76, 0x61, 0x15, 0x76, 0x03, 0xb8, 0xee, 0x0b, + 0xe8, 0x1b, 0x66, 0x40, 0xfc, 0x6a, 0x8f, 0xfc, + 0x21, 0x5a, 0x8f, 0xfc, 0xfd, 0xd9, 0x7f, 0xdf, + 0xc6, 0xff, 0x00, 0xe2, 0x68, 0x02, 0x9f, 0x85, + 0x3f, 0xe4, 0x29, 0x2f, 0xfd, 0x7b, 0x4b, 0xff, + 0x00, 0xa0, 0xd6, 0x25, 0x77, 0x1a, 0x1f, 0x86, + 0x2f, 0x34, 0xfb, 0xd7, 0x9a, 0x7b, 0x9b, 0x52, + 0x8d, 0x13, 0xc7, 0xf2, 0x3b, 0x13, 0x92, 0x31, + 0xdc, 0x0a, 0xa9, 0xff, 0x00, 0x08, 0x44, 0xff, + 0x00, 0xf4, 0x10, 0x83, 0xfe, 0xf9, 0x34, 0x01, + 0xc9, 0x57, 0x55, 0x71, 0x1e, 0xaa, 0xd0, 0xd9, + 0x1b, 0x4d, 0x36, 0x3b, 0x88, 0xbe, 0xc9, 0x16, + 0x1d, 0xad, 0x12, 0x43, 0x9d, 0xa3, 0xb9, 0x14, + 0xff, 0x00, 0xf8, 0x42, 0x26, 0xff, 0x00, 0xa0, + 0x84, 0x1f, 0xf7, 0xc9, 0xa3, 0xfe, 0x10, 0x89, + 0xbf, 0xe8, 0x21, 0x07, 0xfd, 0xf2, 0x68, 0x03, + 0x1b, 0x48, 0x46, 0x8e, 0xe6, 0xf5, 0x1d, 0x4a, + 0xb2, 0xda, 0x4e, 0x08, 0x3d, 0x8e, 0xd3, 0x53, + 0x68, 0x97, 0x0b, 0x6b, 0x67, 0x71, 0x33, 0x8c, + 0xc6, 0x27, 0x84, 0x38, 0xf5, 0x42, 0x1c, 0x30, + 0xfc, 0x89, 0xad, 0x3f, 0xf8, 0x42, 0x26, 0xff, + 0x00, 0xa0, 0x84, 0x1f, 0xf7, 0xc9, 0xa3, 0xfe, + 0x10, 0x89, 0xbf, 0xe8, 0x21, 0x07, 0xfd, 0xf2, + 0x68, 0x02, 0xae, 0xa0, 0x82, 0xdb, 0x4e, 0xbc, + 0xb0, 0x56, 0x0c, 0xb6, 0xa2, 0x15, 0x24, 0x74, + 0x2c, 0x59, 0x98, 0x9f, 0xd7, 0x1f, 0x85, 0x73, + 0x95, 0xd6, 0xff, 0x00, 0xc2, 0x11, 0x37, 0xfd, + 0x04, 0x20, 0xff, 0x00, 0xbe, 0x4d, 0x1f, 0xf0, + 0x84, 0x4d, 0xff, 0x00, 0x41, 0x08, 0x3f, 0xef, + 0x93, 0x40, 0x1c, 0x95, 0x74, 0xfa, 0xbc, 0xd2, + 0xdb, 0xf8, 0x8a, 0xda, 0x68, 0xa1, 0x33, 0x14, + 0xb5, 0x42, 0xc8, 0x01, 0xe5, 0x76, 0x7c, 0xdd, + 0x3d, 0xb3, 0xcd, 0x4d, 0xff, 0x00, 0x08, 0x44, + 0xff, 0x00, 0xf4, 0x11, 0x83, 0xfe, 0xf9, 0x35, + 0x7f, 0x55, 0xf0, 0xf6, 0xa1, 0x71, 0xa9, 0xc5, + 0x79, 0x65, 0x79, 0x6f, 0x13, 0x45, 0x12, 0x20, + 0x66, 0x76, 0x0d, 0x90, 0x31, 0xd8, 0x1a, 0x00, + 0xe6, 0x66, 0x8a, 0xd6, 0x4d, 0x3e, 0x6b, 0xad, + 0x3a, 0x5b, 0x88, 0x44, 0x4e, 0x9e, 0x6c, 0x12, + 0x90, 0x47, 0x39, 0xda, 0x41, 0x1d, 0x71, 0xcf, + 0x51, 0x5b, 0x59, 0x44, 0xb9, 0x77, 0xe0, 0x26, + 0xb1, 0x2a, 0xaf, 0xe0, 0xd1, 0xf3, 0xff, 0x00, + 0x8f, 0x48, 0x3f, 0x2a, 0x5b, 0xaf, 0x0d, 0xeb, + 0x97, 0x71, 0x08, 0xa6, 0xbf, 0xb0, 0xf2, 0xc3, + 0x6e, 0xd8, 0x9f, 0x20, 0x27, 0xd4, 0x85, 0x41, + 0x93, 0x4d, 0x7f, 0x0b, 0xeb, 0x72, 0x25, 0xb2, + 0x36, 0xa1, 0x66, 0x56, 0xdb, 0xfd, 0x4f, 0xce, + 0xdf, 0x2f, 0x39, 0xfe, 0xed, 0x00, 0x54, 0x39, + 0x8a, 0x19, 0xac, 0xf1, 0x83, 0x06, 0x97, 0xf3, + 0x0f, 0x46, 0x67, 0x57, 0x3f, 0xfa, 0x10, 0xfc, + 0xab, 0x3e, 0x05, 0x76, 0xf0, 0xed, 0xc2, 0xb0, + 0x25, 0x5a, 0xea, 0x31, 0x08, 0xff, 0x00, 0x6b, + 0x6b, 0x6e, 0xc7, 0xe1, 0xb7, 0xf4, 0xad, 0xf5, + 0xf0, 0xf6, 0xbc, 0xb7, 0x93, 0x5d, 0xfd, 0xbe, + 0xc0, 0xcf, 0x30, 0xc4, 0x8c, 0xdf, 0x30, 0x61, + 0xc7, 0x62, 0x98, 0xec, 0x29, 0x26, 0xf0, 0xe6, + 0xbb, 0x3c, 0xd0, 0xcb, 0x26, 0xa1, 0x62, 0x5a, + 0x13, 0x98, 0xc0, 0x24, 0x2a, 0x9c, 0xe7, 0x85, + 0x09, 0x8f, 0xd2, 0x80, 0x33, 0x6d, 0xd8, 0x7f, + 0xc2, 0x61, 0x04, 0x6a, 0x72, 0xb0, 0xca, 0xb0, + 0xaf, 0xd1, 0x06, 0xdf, 0xe9, 0x5c, 0xfd, 0x75, + 0x90, 0xf8, 0x4f, 0x57, 0x82, 0xe9, 0x6e, 0x63, + 0xbe, 0xb2, 0x13, 0x2b, 0x6e, 0x0d, 0xbd, 0x8f, + 0x3f, 0xf7, 0xcd, 0x45, 0xff, 0x00, 0x08, 0x56, + 0xa3, 0xff, 0x00, 0x3f, 0x76, 0x5f, 0xf7, 0xf1, + 0xbf, 0xf8, 0x9a, 0x00, 0xb7, 0xe0, 0x2f, 0xf5, + 0x3a, 0x97, 0xfd, 0xb2, 0xff, 0x00, 0xd9, 0xab, + 0x72, 0xe3, 0xfd, 0x7b, 0x52, 0x68, 0x9a, 0x54, + 0x7a, 0x3d, 0x8b, 0x42, 0x24, 0x12, 0xcd, 0x21, + 0x0d, 0x2b, 0x81, 0xc7, 0xb0, 0x1e, 0xc2, 0x96, + 0xe3, 0xfd, 0x73, 0x50, 0x05, 0x6d, 0x4a, 0xc9, + 0xef, 0xd2, 0x29, 0xad, 0xfe, 0x69, 0xa3, 0x4d, + 0x8d, 0x1e, 0x70, 0x48, 0x1d, 0x08, 0xac, 0xcf, + 0xec, 0x9d, 0x43, 0xfe, 0x7d, 0x24, 0xfc, 0xab, + 0x79, 0x2d, 0x67, 0x70, 0x19, 0x50, 0xe0, 0xf4, + 0x24, 0xe2, 0x9f, 0xf6, 0x4b, 0xaf, 0xee, 0xff, + 0x00, 0xe3, 0xe3, 0xfc, 0x68, 0x03, 0x9e, 0xfe, + 0xc8, 0xd4, 0x7f, 0xe7, 0xd2, 0x4a, 0x3f, 0xb2, + 0x35, 0x1f, 0xf9, 0xf4, 0x92, 0xba, 0x1f, 0xb2, + 0x5d, 0x7f, 0x77, 0xff, 0x00, 0x1f, 0x1f, 0xe3, + 0x47, 0xd9, 0x2e, 0xbf, 0xbb, 0xff, 0x00, 0x8f, + 0x8f, 0xf1, 0xa0, 0x0e, 0x7b, 0xfb, 0x23, 0x51, + 0xff, 0x00, 0x9f, 0x49, 0x28, 0xfe, 0xc8, 0xd4, + 0x7f, 0xe7, 0xd2, 0x4a, 0xe8, 0x7e, 0xc9, 0x75, + 0xfd, 0xdf, 0xfc, 0x7c, 0x7f, 0x8d, 0x1f, 0x64, + 0xba, 0xfe, 0xef, 0xfe, 0x3e, 0x3f, 0xc6, 0x80, + 0x30, 0xa0, 0xd3, 0xb5, 0x4b, 0x79, 0x44, 0xb1, + 0x5b, 0x38, 0x71, 0x9c, 0x12, 0xa0, 0xf6, 0xc7, + 0x7a, 0x95, 0xed, 0xb5, 0x97, 0x78, 0xd8, 0xc0, + 0xe0, 0xc4, 0xdb, 0x90, 0x2a, 0x28, 0x00, 0xfa, + 0xe0, 0x71, 0x5b, 0x1f, 0x64, 0xba, 0xfe, 0xef, + 0xfe, 0x3e, 0x3f, 0xc6, 0x8f, 0xb2, 0x5d, 0x7f, + 0x77, 0xff, 0x00, 0x1f, 0x1f, 0xe3, 0x40, 0x18, + 0xa9, 0x67, 0xab, 0xa0, 0x8c, 0x2c, 0x12, 0x01, + 0x1b, 0x97, 0x5e, 0x07, 0x04, 0xf7, 0xfd, 0x2a, + 0x39, 0x34, 0xdd, 0x52, 0x5d, 0xbb, 0xed, 0xa4, + 0x3b, 0x54, 0x28, 0xe0, 0x70, 0x05, 0x6f, 0x7d, + 0x92, 0xeb, 0xfb, 0xbf, 0xf8, 0xf8, 0xff, 0x00, + 0x1a, 0x3e, 0xc9, 0x75, 0xfd, 0xdf, 0xfc, 0x7c, + 0x7f, 0x8d, 0x00, 0x63, 0x47, 0x67, 0xaa, 0x2d, + 0xe0, 0xb9, 0x92, 0xd2, 0x47, 0x6c, 0xe5, 0xb8, + 0x03, 0x70, 0x3c, 0x1f, 0xd2, 0x9d, 0xf6, 0x5d, + 0x5e, 0x38, 0xda, 0x18, 0x61, 0x9b, 0xc9, 0xe4, + 0x2e, 0xe5, 0x19, 0x00, 0xfb, 0xf6, 0xfc, 0x2b, + 0x5f, 0xec, 0x97, 0x5f, 0xdd, 0xff, 0x00, 0xc7, + 0xc7, 0xf8, 0xd1, 0xf6, 0x4b, 0xaf, 0xee, 0xff, + 0x00, 0xe3, 0xe3, 0xfc, 0x68, 0x03, 0x21, 0xed, + 0xf5, 0x99, 0x23, 0xf2, 0xde, 0xd8, 0x95, 0xdb, + 0xb7, 0xfd, 0x52, 0x67, 0x1f, 0x5c, 0x66, 0xa3, + 0x82, 0xc7, 0x56, 0xb6, 0x2d, 0xe5, 0x5b, 0xb8, + 0xdd, 0xd4, 0x15, 0x04, 0x7e, 0xb5, 0xb7, 0xf6, + 0x4b, 0xaf, 0xee, 0xff, 0x00, 0xe3, 0xe3, 0xfc, + 0x68, 0xfb, 0x25, 0xd7, 0xf7, 0x7f, 0xf1, 0xf1, + 0xfe, 0x34, 0x01, 0x89, 0xf6, 0x1d, 0x5f, 0xe5, + 0x3e, 0x44, 0xa4, 0xa3, 0x99, 0x01, 0x20, 0x7d, + 0xe3, 0x8c, 0x9f, 0xd0, 0x53, 0xa7, 0xb0, 0xd4, + 0x24, 0x86, 0x28, 0xd6, 0xd2, 0x5f, 0x94, 0x97, + 0x72, 0x40, 0xe5, 0x8f, 0x5f, 0xe4, 0x2b, 0x67, + 0xec, 0x97, 0x5f, 0xdd, 0xff, 0x00, 0xc7, 0xc7, + 0xf8, 0xd1, 0xf6, 0x4b, 0xaf, 0xee, 0xff, 0x00, + 0xe3, 0xe3, 0xfc, 0x68, 0x03, 0x9e, 0xfe, 0xc8, + 0xd4, 0x7f, 0xe7, 0xd2, 0x4a, 0x3f, 0xb2, 0x35, + 0x1f, 0xf9, 0xf4, 0x92, 0xba, 0x1f, 0xb2, 0x5d, + 0x7f, 0x77, 0xff, 0x00, 0x1f, 0x1f, 0xe3, 0x47, + 0xd9, 0x2e, 0xbf, 0xbb, 0xff, 0x00, 0x8f, 0x8f, + 0xf1, 0xa0, 0x0e, 0x7b, 0xfb, 0x23, 0x51, 0xff, + 0x00, 0x9f, 0x49, 0x28, 0xfe, 0xc8, 0xd4, 0x7f, + 0xe7, 0xd2, 0x4a, 0xe8, 0x7e, 0xc9, 0x75, 0xfd, + 0xdf, 0xfc, 0x7c, 0x7f, 0x8d, 0x1f, 0x64, 0xba, + 0xfe, 0xef, 0xfe, 0x3e, 0x3f, 0xc6, 0x80, 0x39, + 0xef, 0xec, 0x8d, 0x47, 0xfe, 0x7d, 0x24, 0xa9, + 0xad, 0xf4, 0x5b, 0xa6, 0x90, 0x1b, 0x88, 0xcc, + 0x10, 0x83, 0xf3, 0x33, 0x1e, 0xde, 0xde, 0xf5, + 0xb7, 0xf6, 0x4b, 0xaf, 0xee, 0xff, 0x00, 0xe3, + 0xe3, 0xfc, 0x69, 0x0d, 0x9d, 0xc9, 0xea, 0x99, + 0xff, 0x00, 0x81, 0x0f, 0xf1, 0xa0, 0x08, 0xe7, + 0x90, 0x4b, 0x33, 0x38, 0x18, 0x07, 0xa0, 0xf6, + 0xa2, 0xdb, 0xfe, 0x3e, 0x62, 0xff, 0x00, 0x7c, + 0x7f, 0x3a, 0x63, 0xa3, 0x23, 0x6d, 0x75, 0x2a, + 0x7d, 0x0d, 0x08, 0xdb, 0x1d, 0x58, 0x75, 0x53, + 0x9a, 0x00, 0xc7, 0xbc, 0x83, 0x37, 0x93, 0x9c, + 0x75, 0x91, 0xbf, 0x9d, 0x43, 0xf6, 0x7f, 0x6a, + 0xe8, 0x2e, 0xac, 0x8b, 0x48, 0x66, 0x89, 0x49, + 0x8e, 0x4f, 0x98, 0x63, 0xb6, 0x6a, 0xbf, 0xd9, + 0x4f, 0xf7, 0x4f, 0xe5, 0x5c, 0x92, 0xba, 0x7a, + 0x92, 0x63, 0xfd, 0x9f, 0xda, 0xac, 0xd8, 0xda, + 0x5b, 0xc9, 0x31, 0x5b, 0x89, 0x1a, 0x2c, 0xaf, + 0xc8, 0xe3, 0xa0, 0x6e, 0xd9, 0xab, 0xff, 0x00, + 0x65, 0x3f, 0xdd, 0x3f, 0x95, 0x1f, 0x65, 0x3f, + 0xdd, 0x3f, 0x95, 0x25, 0x20, 0x1f, 0x38, 0xf2, + 0xb4, 0xa9, 0xad, 0xa7, 0xbd, 0x5b, 0xa7, 0x72, + 0xbe, 0x58, 0x07, 0x76, 0xdc, 0x1f, 0x5a, 0x59, + 0xdc, 0x1d, 0x11, 0x65, 0xe7, 0xce, 0x95, 0x16, + 0x02, 0x7d, 0x94, 0x9a, 0x8f, 0xec, 0xad, 0xfd, + 0xd3, 0xf9, 0x54, 0xf7, 0x1e, 0x6d, 0xc6, 0xc0, + 0xc8, 0x15, 0x53, 0xee, 0xaa, 0x2e, 0x00, 0xaa, + 0xe7, 0x0b, 0x85, 0x99, 0x0b, 0x6f, 0x1c, 0x73, + 0xdd, 0xdb, 0xcd, 0x68, 0x13, 0xe6, 0x8e, 0x55, + 0xf9, 0xd7, 0xd8, 0x0a, 0x8a, 0x53, 0x08, 0x1a, + 0x6d, 0xca, 0x48, 0x84, 0x5b, 0xe1, 0x5a, 0x3c, + 0xfc, 0xc3, 0x9f, 0x4a, 0x6f, 0xd9, 0x4f, 0xf7, + 0x4f, 0xe5, 0x47, 0xd9, 0x4f, 0xf7, 0x4f, 0xe5, + 0x47, 0xb4, 0x0b, 0x92, 0xea, 0x52, 0x4a, 0xd1, + 0x5c, 0x11, 0xa8, 0x44, 0xf1, 0x48, 0x7e, 0x48, + 0x91, 0x01, 0x24, 0x7a, 0x13, 0x8e, 0x29, 0xec, + 0xf1, 0x7f, 0x6c, 0xcd, 0x28, 0x95, 0x36, 0x1b, + 0x6d, 0xa1, 0xb7, 0x0c, 0x67, 0x1d, 0x2a, 0xbf, + 0xd9, 0x4f, 0xf7, 0x4f, 0xe5, 0x47, 0xd9, 0x4f, + 0xf7, 0x4f, 0xe5, 0x47, 0xb4, 0x0b, 0x95, 0xe7, + 0x44, 0x6d, 0x12, 0xda, 0x10, 0xca, 0x5d, 0x64, + 0x62, 0x57, 0x3c, 0x8a, 0xb7, 0x68, 0xf1, 0x47, + 0x6d, 0xa7, 0xc6, 0xce, 0xbb, 0x7f, 0x7a, 0x92, + 0x0c, 0xf4, 0x0d, 0xeb, 0x4c, 0xfb, 0x29, 0xfe, + 0xe9, 0xfc, 0xa8, 0xfb, 0x29, 0xfe, 0xe9, 0xfc, + 0xa9, 0x73, 0x85, 0xc7, 0xdd, 0xca, 0x92, 0x5b, + 0xde, 0x6d, 0x65, 0xff, 0x00, 0x5c, 0x9e, 0x5a, + 0xe7, 0xaa, 0xaf, 0x1c, 0x7e, 0x55, 0x37, 0xfa, + 0x37, 0xf6, 0xa7, 0xf6, 0xb7, 0xda, 0x13, 0x6e, + 0xcc, 0xf9, 0x79, 0xf9, 0xf7, 0x6d, 0xc6, 0x31, + 0x55, 0xbe, 0xca, 0x7f, 0xba, 0x7f, 0x2a, 0x3e, + 0xca, 0x7f, 0xba, 0x7f, 0x2a, 0x7e, 0xd0, 0x2e, + 0x2e, 0xc8, 0x6e, 0xec, 0xad, 0x37, 0xce, 0x91, + 0x35, 0xbb, 0xb1, 0x75, 0x6e, 0x09, 0x04, 0xe7, + 0x8a, 0xb1, 0x7c, 0x20, 0xbc, 0x8e, 0xf2, 0x01, + 0x71, 0x12, 0x13, 0x32, 0xc8, 0xac, 0xc7, 0x82, + 0x36, 0x81, 0xfd, 0x2a, 0xb7, 0xd9, 0x4f, 0xf7, + 0x4f, 0xe5, 0x47, 0xd9, 0x4f, 0xf7, 0x4f, 0xe5, + 0x47, 0xb4, 0x0b, 0x96, 0x8b, 0xc1, 0xf6, 0xf2, + 0xeb, 0x2a, 0x6c, 0xfb, 0x17, 0x96, 0x09, 0x61, + 0xd7, 0x3d, 0x3e, 0xb5, 0x1d, 0xac, 0xcc, 0xda, + 0x75, 0xb4, 0x50, 0xde, 0x45, 0x6c, 0xd1, 0x12, + 0x24, 0xde, 0xa0, 0xe4, 0x67, 0xa8, 0xc8, 0xeb, + 0x50, 0xfd, 0x94, 0xff, 0x00, 0x74, 0xfe, 0x54, + 0x7d, 0x94, 0xff, 0x00, 0x74, 0xfe, 0x54, 0x7b, + 0x46, 0x17, 0x1d, 0x68, 0xf3, 0x6f, 0x9d, 0xe3, + 0xbf, 0x8b, 0x73, 0xc9, 0x96, 0x49, 0xd7, 0x6a, + 0xb8, 0xf5, 0xff, 0x00, 0xeb, 0x55, 0x0d, 0x4e, + 0x18, 0x1e, 0xfa, 0x46, 0xb6, 0x55, 0x11, 0x9c, + 0x7d, 0xd1, 0x81, 0x9e, 0xf8, 0xab, 0xbf, 0x65, + 0x3f, 0xdd, 0x3f, 0x95, 0x1f, 0x65, 0x3f, 0xdd, + 0x3f, 0x95, 0x27, 0x3b, 0xab, 0x05, 0xcc, 0x7f, + 0xb3, 0xfb, 0x51, 0xf6, 0x7f, 0x6a, 0xd8, 0xfb, + 0x29, 0xfe, 0xe9, 0xfc, 0xa8, 0xfb, 0x2b, 0x7f, + 0x74, 0xfe, 0x55, 0x37, 0x02, 0x8e, 0x99, 0x06, + 0xdd, 0x4a, 0xd8, 0xe3, 0xa4, 0x82, 0xb5, 0x64, + 0xff, 0x00, 0x5a, 0xff, 0x00, 0x53, 0x4f, 0xb5, + 0xb4, 0xf2, 0x18, 0x5c, 0xca, 0x36, 0xa2, 0x72, + 0xa0, 0xf5, 0x63, 0xda, 0xa2, 0x24, 0x92, 0x49, + 0xea, 0x6b, 0xa6, 0x9d, 0xed, 0xa8, 0xd1, 0x71, + 0xff, 0x00, 0xd4, 0xc3, 0xfe, 0xf2, 0x7f, 0x31, + 0x45, 0x0d, 0xfe, 0xa6, 0x1f, 0xf7, 0x93, 0xf9, + 0x8a, 0x2b, 0x41, 0x8b, 0x07, 0x47, 0xff, 0x00, + 0xae, 0x8d, 0xfc, 0xcd, 0x4b, 0x51, 0x41, 0xd1, + 0xff, 0x00, 0xeb, 0xa3, 0x7f, 0x33, 0x52, 0xd0, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x55, 0x8e, 0xd4, 0x92, 0x79, 0x9c, 0x02, + 0x22, 0x5c, 0xe0, 0xf7, 0x3d, 0xaa, 0xcd, 0x51, + 0xbd, 0x6d, 0xb6, 0x97, 0xc7, 0xd1, 0x07, 0xf3, + 0x14, 0x9e, 0xc0, 0x53, 0x92, 0xf1, 0xe5, 0x72, + 0xce, 0xe5, 0x8d, 0x33, 0xed, 0x1e, 0xf5, 0x93, + 0xe7, 0x9a, 0xda, 0xd1, 0xa5, 0x67, 0xb2, 0x99, + 0x6d, 0x5e, 0x25, 0xbe, 0xde, 0x36, 0xf9, 0x9d, + 0x4a, 0xfb, 0x66, 0xb9, 0x54, 0x6e, 0xc9, 0x23, + 0xfb, 0x47, 0xbd, 0x1f, 0x68, 0xf7, 0xa9, 0x64, + 0x12, 0x5d, 0xea, 0x70, 0x5b, 0x6a, 0x10, 0x1b, + 0x79, 0x19, 0x48, 0xde, 0x84, 0x7c, 0xe7, 0xb1, + 0xf4, 0xaa, 0xd0, 0xda, 0x06, 0xb4, 0x0f, 0x2b, + 0x32, 0x4a, 0xf7, 0x02, 0x04, 0x19, 0xe0, 0x1e, + 0xe4, 0xd1, 0xc8, 0x04, 0x9f, 0x68, 0xf7, 0xa3, + 0xed, 0x1e, 0xf5, 0x24, 0x96, 0xb6, 0x30, 0x5c, + 0xac, 0x32, 0x35, 0xd2, 0xb0, 0x90, 0x2e, 0x1d, + 0x38, 0x93, 0x9c, 0x65, 0x4f, 0xf8, 0xd3, 0xae, + 0x2d, 0xa1, 0xba, 0xd6, 0xae, 0x23, 0x8f, 0xcc, + 0x44, 0x89, 0x4b, 0xcb, 0x80, 0x0f, 0x4e, 0xca, + 0x29, 0xfb, 0x36, 0x16, 0x21, 0xfb, 0x47, 0xbd, + 0x1f, 0x68, 0xf7, 0xa9, 0x17, 0x4f, 0x8d, 0xee, + 0xac, 0xc2, 0x99, 0xd2, 0x0b, 0x8d, 0xc0, 0x89, + 0x06, 0xd7, 0x52, 0x05, 0x34, 0xda, 0xd8, 0x8b, + 0x46, 0xb9, 0xfb, 0x44, 0xc5, 0x21, 0x97, 0xcb, + 0x97, 0x0a, 0x32, 0x4f, 0xfb, 0x3f, 0xfd, 0x7a, + 0x5e, 0xcd, 0x80, 0xdf, 0xb4, 0x7b, 0xd1, 0xf6, + 0x8f, 0x7a, 0xa9, 0xaa, 0x46, 0x2c, 0x6f, 0x5a, + 0x14, 0x62, 0xc9, 0x80, 0xca, 0x4f, 0x5c, 0x1a, + 0xdb, 0xd6, 0x62, 0x37, 0x33, 0xdb, 0xaa, 0x0e, + 0x44, 0xc2, 0x16, 0xfc, 0x40, 0x3f, 0xe3, 0x4f, + 0x90, 0x0c, 0xff, 0x00, 0xb4, 0x7b, 0xd1, 0xf6, + 0x8f, 0x7a, 0xb5, 0xac, 0xc9, 0x14, 0xf7, 0x56, + 0x41, 0xa4, 0xf2, 0xe2, 0x70, 0xdf, 0x3e, 0x33, + 0x80, 0x0d, 0x56, 0x96, 0xce, 0x0d, 0xb6, 0xd3, + 0x42, 0xd3, 0x88, 0xa4, 0x9c, 0x42, 0xc2, 0x51, + 0x86, 0xfa, 0x8a, 0x1c, 0x00, 0x4f, 0xb4, 0x7b, + 0xd1, 0xf6, 0x8f, 0x7a, 0x7c, 0xd6, 0x36, 0xa3, + 0xed, 0xb1, 0x45, 0x34, 0xa6, 0x7b, 0x65, 0x2e, + 0x77, 0x01, 0xb4, 0xaf, 0xa7, 0xd6, 0x9b, 0x65, + 0x67, 0x6d, 0x77, 0x1a, 0x46, 0x93, 0x4c, 0xd7, + 0x0e, 0x85, 0xb7, 0x2a, 0xfc, 0x8a, 0x7d, 0x0d, + 0x2e, 0x46, 0x02, 0x7d, 0xa3, 0xde, 0x8f, 0xb4, + 0x7b, 0xd4, 0x91, 0x58, 0xda, 0x86, 0xb3, 0x86, + 0x79, 0xe5, 0x5b, 0x8b, 0x85, 0x0e, 0x02, 0x81, + 0xb4, 0x03, 0xdb, 0xeb, 0x4c, 0x8a, 0xc6, 0x30, + 0xb7, 0x13, 0x4b, 0xf6, 0x86, 0x8a, 0x39, 0x8c, + 0x48, 0xb0, 0xae, 0x58, 0xe3, 0xb9, 0xa3, 0x91, + 0x80, 0x9f, 0x68, 0xf7, 0xa3, 0xed, 0x1e, 0xf4, + 0xff, 0x00, 0xec, 0xe8, 0xe3, 0x92, 0xf9, 0x66, + 0x95, 0xc2, 0xdb, 0xaa, 0xba, 0xb2, 0x8e, 0xaa, + 0x7d, 0xbd, 0x6a, 0x41, 0xa7, 0xd9, 0x35, 0xc5, + 0xba, 0x0b, 0x89, 0xb1, 0x75, 0x1e, 0xe8, 0xb8, + 0x19, 0x1c, 0x67, 0xe6, 0xa7, 0xec, 0xd8, 0x10, + 0x7d, 0xa3, 0xde, 0x8f, 0xb4, 0x7b, 0xd3, 0xed, + 0xf4, 0xe4, 0xf2, 0x62, 0x7b, 0x83, 0x39, 0x69, + 0x9c, 0xa2, 0xf9, 0x2b, 0x90, 0x98, 0x38, 0xcb, + 0x53, 0x05, 0x94, 0x30, 0xda, 0xdc, 0x4d, 0x75, + 0x2c, 0x83, 0xc8, 0x9f, 0xcb, 0x3e, 0x5e, 0x3e, + 0x61, 0xed, 0x4b, 0x91, 0x80, 0x7d, 0xa3, 0xde, + 0x8f, 0xb4, 0x7b, 0xd5, 0xbb, 0x5b, 0x5b, 0x68, + 0x35, 0x26, 0x42, 0x64, 0x91, 0x1a, 0xdf, 0xcd, + 0x8c, 0x9c, 0x7d, 0xd3, 0x9c, 0xe7, 0xde, 0xb0, + 0x25, 0x9d, 0x3c, 0xc6, 0xf2, 0xb7, 0x79, 0x79, + 0xf9, 0x77, 0x75, 0xc7, 0xbd, 0x0e, 0x16, 0x03, + 0xa2, 0xb5, 0xb8, 0x37, 0x51, 0x49, 0x0b, 0x9d, + 0xcd, 0x1a, 0xef, 0x46, 0x3d, 0x46, 0x3a, 0x8a, + 0x65, 0x51, 0xd0, 0x65, 0x2f, 0x75, 0x38, 0xff, + 0x00, 0xa6, 0x0f, 0xfd, 0x2a, 0xf5, 0x74, 0x53, + 0xf8, 0x46, 0x88, 0x35, 0x9b, 0x89, 0xad, 0xfe, + 0xc6, 0xd0, 0xca, 0xf1, 0x9f, 0x2c, 0xfd, 0xd3, + 0x8e, 0xf5, 0x9c, 0x35, 0x6d, 0x43, 0xa0, 0xba, + 0x92, 0xae, 0x78, 0x83, 0xee, 0xd9, 0x7f, 0xd7, + 0x33, 0xfc, 0xeb, 0x3a, 0xc3, 0x77, 0xf6, 0x85, + 0xbe, 0xc5, 0x0c, 0xc2, 0x45, 0x20, 0x13, 0x81, + 0xd6, 0xac, 0x65, 0x99, 0x75, 0x1d, 0x5a, 0x12, + 0x04, 0xb3, 0x4f, 0x19, 0x3c, 0x80, 0xe3, 0x19, + 0xa6, 0x7f, 0x6b, 0xea, 0x3f, 0xf3, 0xf7, 0x25, + 0x58, 0x65, 0x8a, 0x48, 0xa0, 0x48, 0x8c, 0x97, + 0x51, 0x19, 0xd8, 0x1d, 0xdf, 0x2b, 0x64, 0x81, + 0xd3, 0xf9, 0xe6, 0xaa, 0x6a, 0x10, 0x47, 0x6f, + 0x22, 0x47, 0x17, 0xce, 0xbb, 0x73, 0xe6, 0xf6, + 0x93, 0xdc, 0x7f, 0x2a, 0x00, 0x99, 0x75, 0x0d, + 0x59, 0xa2, 0x32, 0xac, 0xd3, 0x98, 0xc7, 0x57, + 0x03, 0x81, 0xf8, 0xd0, 0x75, 0x1d, 0x58, 0x44, + 0x25, 0x33, 0x4e, 0x23, 0x3c, 0x07, 0xc7, 0x1f, + 0x9d, 0x2e, 0x9f, 0x23, 0x31, 0x08, 0xd2, 0xb6, + 0xf5, 0x8d, 0x96, 0x28, 0xb1, 0x85, 0x6c, 0x83, + 0x9c, 0x9f, 0xc6, 0x91, 0x25, 0x97, 0xec, 0x8e, + 0xf3, 0xbf, 0xfa, 0xe8, 0xc4, 0x31, 0x27, 0x40, + 0x40, 0x23, 0x9f, 0xa0, 0xc7, 0xe7, 0xf8, 0xd0, + 0x03, 0x7f, 0xb5, 0x35, 0x3d, 0x85, 0xc5, 0xcc, + 0xbb, 0x41, 0xc1, 0x3d, 0xb3, 0x47, 0xf6, 0xa6, + 0xa6, 0x50, 0xbf, 0xda, 0x65, 0xda, 0x0e, 0x09, + 0xed, 0x9a, 0x92, 0x38, 0xc5, 0xad, 0x84, 0xe2, + 0xe2, 0x34, 0x97, 0xf7, 0xb1, 0x90, 0xa2, 0x4c, + 0x8e, 0x8f, 0xdd, 0x4d, 0x59, 0xb6, 0x82, 0x18, + 0x26, 0xba, 0xc4, 0x61, 0xc2, 0x9f, 0x94, 0x33, + 0x1e, 0x01, 0x89, 0xdb, 0x1c, 0x1f, 0x6c, 0x50, + 0x05, 0x58, 0x6f, 0xf5, 0x79, 0xc9, 0x10, 0xcb, + 0x71, 0x21, 0x1d, 0x76, 0x2e, 0x71, 0x4b, 0x25, + 0xee, 0xb3, 0x10, 0xcc, 0xaf, 0x72, 0x98, 0x19, + 0xf9, 0x94, 0x8e, 0x3f, 0x2f, 0x7a, 0xa7, 0x68, + 0xc4, 0x5e, 0x44, 0x57, 0xe5, 0x06, 0x45, 0xe0, + 0x1f, 0x7a, 0xb2, 0xca, 0x24, 0x97, 0x50, 0x2e, + 0x49, 0x29, 0xca, 0xf2, 0x78, 0xfd, 0xe2, 0x8f, + 0xeb, 0x40, 0x0d, 0xfe, 0xd7, 0xd4, 0x7f, 0xe7, + 0xee, 0x4a, 0x3f, 0xb5, 0xf5, 0x1f, 0xf9, 0xfb, + 0x92, 0xac, 0x5c, 0x47, 0x67, 0x11, 0xb9, 0x2b, + 0x6a, 0x08, 0x82, 0xe0, 0x46, 0x01, 0x76, 0xf9, + 0x81, 0xdd, 0xd7, 0x9f, 0xf6, 0x69, 0xe3, 0x4f, + 0x82, 0x27, 0x70, 0x63, 0x49, 0x14, 0xce, 0xf1, + 0xe5, 0xe6, 0x08, 0x51, 0x41, 0xc7, 0x1c, 0x8c, + 0x9a, 0x00, 0xa8, 0x35, 0x6d, 0x44, 0x90, 0x05, + 0xd4, 0x84, 0x9e, 0x80, 0x54, 0xcb, 0x77, 0xad, + 0xb2, 0x6f, 0x56, 0xba, 0x29, 0xcf, 0xcc, 0x10, + 0xe3, 0xf9, 0x53, 0x92, 0x18, 0x20, 0x96, 0xd3, + 0x6c, 0x61, 0x99, 0x55, 0xa5, 0x79, 0x32, 0x79, + 0x08, 0xcd, 0xfc, 0xf6, 0xd0, 0x00, 0xfb, 0x35, + 0x84, 0xad, 0x78, 0xb0, 0x6d, 0x0c, 0x4e, 0x77, + 0x6e, 0x3f, 0x39, 0xe4, 0x60, 0x50, 0x04, 0x3f, + 0xda, 0x7a, 0xa6, 0x14, 0xfd, 0xa2, 0x6c, 0x3f, + 0xdd, 0xf7, 0xfa, 0x52, 0xae, 0xa3, 0xab, 0x33, + 0xb2, 0x2c, 0xd3, 0x97, 0x5e, 0x0a, 0x81, 0xc8, + 0xe7, 0x1f, 0xce, 0xac, 0x42, 0xe9, 0x74, 0xcb, + 0x70, 0x17, 0x09, 0x05, 0xcb, 0xc9, 0x8f, 0x45, + 0x23, 0x70, 0x1f, 0xf8, 0xe9, 0xa9, 0x63, 0x3b, + 0x6e, 0x44, 0xff, 0x00, 0xf3, 0xf5, 0x34, 0x18, + 0xfc, 0x7e, 0x66, 0xfd, 0x71, 0x40, 0x14, 0x57, + 0x52, 0xd5, 0x5a, 0x5f, 0x29, 0x67, 0x98, 0xc9, + 0x9c, 0x6c, 0x03, 0x9f, 0xca, 0x93, 0xfb, 0x53, + 0x53, 0x2b, 0xbb, 0xed, 0x32, 0xed, 0xce, 0x33, + 0xdb, 0x35, 0x7e, 0xd4, 0x01, 0xa9, 0x0b, 0xcc, + 0x7f, 0xad, 0x08, 0x07, 0xfb, 0xcc, 0x70, 0xdf, + 0xfa, 0x0b, 0x55, 0x6b, 0x2f, 0xdd, 0xad, 0xb8, + 0x1c, 0xb8, 0x8e, 0x59, 0xd4, 0x7f, 0xb5, 0x82, + 0x17, 0xff, 0x00, 0x41, 0xcd, 0x00, 0x32, 0x5d, + 0x43, 0x57, 0x84, 0x03, 0x2c, 0xb3, 0xc7, 0x9e, + 0x9b, 0xc6, 0x33, 0x43, 0xdf, 0xea, 0xe9, 0x18, + 0x91, 0xe5, 0xb8, 0x58, 0xdb, 0xa3, 0x15, 0xc0, + 0x3f, 0x8d, 0x33, 0x4f, 0x96, 0x59, 0xae, 0xe2, + 0x82, 0x57, 0x69, 0x22, 0x92, 0x54, 0x2e, 0x1b, + 0x9e, 0xf5, 0x0b, 0x5d, 0xdd, 0x3b, 0xcd, 0xb9, + 0xd9, 0x8c, 0x80, 0x87, 0x07, 0x91, 0xf9, 0x50, + 0x05, 0xb9, 0x2f, 0x35, 0xa8, 0x53, 0x7c, 0xaf, + 0x72, 0x8b, 0xfd, 0xe6, 0x42, 0x07, 0xf2, 0xa8, + 0x0e, 0xad, 0xa8, 0x11, 0x8f, 0xb5, 0xc9, 0xf9, + 0xd5, 0xdb, 0xd6, 0x48, 0x2f, 0x6f, 0x5d, 0xee, + 0x95, 0xf7, 0x87, 0x41, 0x0a, 0xee, 0xce, 0x4f, + 0xaf, 0x18, 0xe3, 0xaf, 0xe1, 0x58, 0xb4, 0x01, + 0xd2, 0x5a, 0x49, 0x24, 0xba, 0x3c, 0x4f, 0x23, + 0xb3, 0xb7, 0x98, 0xdc, 0xb1, 0xc9, 0xa5, 0xa6, + 0x69, 0xff, 0x00, 0xf2, 0x04, 0x87, 0xfe, 0xba, + 0x35, 0x3e, 0x80, 0x2d, 0xb7, 0xfa, 0x98, 0x7f, + 0xde, 0x4f, 0xe6, 0x28, 0xa1, 0xbf, 0xd4, 0xc3, + 0xfe, 0xf2, 0x7f, 0x31, 0x45, 0x00, 0x3a, 0x1e, + 0x8f, 0xff, 0x00, 0x5d, 0x1b, 0xf9, 0x9a, 0x92, + 0xa3, 0x87, 0xa3, 0xff, 0x00, 0xd7, 0x46, 0xfe, + 0x66, 0xa4, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0xa9, 0xdd, 0x2e, 0xeb, + 0x5b, 0xd1, 0xea, 0x83, 0xf9, 0x8a, 0xb9, 0x55, + 0xf7, 0x28, 0x9e, 0x44, 0x93, 0xfd, 0x5c, 0x83, + 0x6b, 0x7b, 0x7b, 0xd2, 0x7a, 0xa0, 0x39, 0xcf, + 0xb3, 0xfb, 0x55, 0xcb, 0x5b, 0x6b, 0x09, 0x2d, + 0xda, 0x3b, 0x8d, 0xd1, 0x4b, 0xbb, 0x22, 0x50, + 0x0b, 0x71, 0xe9, 0x8a, 0xd0, 0x6d, 0x3a, 0x45, + 0x3f, 0x2a, 0xef, 0x53, 0xd1, 0x97, 0x90, 0x69, + 0x3f, 0xb3, 0xe6, 0xff, 0x00, 0x9e, 0x2d, 0xf9, + 0x57, 0x2e, 0xa9, 0xec, 0x49, 0x5e, 0xf2, 0x64, + 0x22, 0xce, 0x2b, 0x67, 0x79, 0x0d, 0xb1, 0xc8, + 0x91, 0x87, 0x24, 0xe6, 0xa5, 0xd6, 0x84, 0x4d, + 0x73, 0x04, 0x25, 0x58, 0x46, 0xa4, 0xc8, 0xe1, + 0x7a, 0xe5, 0x8e, 0x4f, 0xe3, 0x53, 0x45, 0x69, + 0x75, 0x0c, 0x82, 0x48, 0xe3, 0x65, 0x61, 0xd0, + 0xed, 0xa4, 0x7b, 0x2b, 0x89, 0x1c, 0xbb, 0xc6, + 0xe5, 0x8f, 0x52, 0x45, 0x3e, 0x67, 0x6d, 0x80, + 0x43, 0x75, 0x14, 0x70, 0x32, 0x1b, 0xa9, 0x2e, + 0xc1, 0x65, 0x64, 0x57, 0x4e, 0x53, 0x07, 0x3d, + 0x4f, 0x5a, 0x68, 0xb8, 0xb7, 0x8b, 0x53, 0x9e, + 0x64, 0x95, 0xcc, 0x77, 0x08, 0x55, 0x99, 0x54, + 0x82, 0x86, 0x97, 0xfb, 0x3e, 0x6f, 0xf9, 0xe2, + 0xdf, 0x95, 0x1f, 0xd9, 0xf3, 0x7f, 0xcf, 0x16, + 0xfc, 0xa8, 0xe6, 0x97, 0x60, 0x19, 0x14, 0xb0, + 0xc5, 0x7f, 0x6c, 0xed, 0x79, 0x3c, 0xeb, 0x1e, + 0xe2, 0xef, 0x26, 0x71, 0xd0, 0xe3, 0x03, 0xad, + 0x57, 0x2d, 0x17, 0xf6, 0x65, 0xc4, 0x1b, 0xbe, + 0x77, 0x9f, 0x78, 0x18, 0x3d, 0x2a, 0xdf, 0xf6, + 0x7c, 0xdf, 0xf3, 0xc5, 0xbf, 0x2a, 0x3f, 0xb3, + 0xe6, 0xff, 0x00, 0x9e, 0x2d, 0xf9, 0x51, 0xcd, + 0x2e, 0xc0, 0x51, 0xd5, 0xbc, 0xbb, 0xab, 0xb5, + 0x92, 0x33, 0xb9, 0x44, 0x6a, 0xb9, 0xc6, 0x2b, + 0x4b, 0xed, 0xd0, 0xad, 0xe5, 0xdc, 0x81, 0xb7, + 0x2b, 0x22, 0xb4, 0x67, 0x07, 0xef, 0x85, 0xc7, + 0xf5, 0xa8, 0xff, 0x00, 0xb3, 0xe6, 0xff, 0x00, + 0x9e, 0x2d, 0xf9, 0x51, 0xfd, 0x9f, 0x37, 0xfc, + 0xf1, 0x6f, 0xca, 0x8e, 0x69, 0x76, 0x01, 0xb6, + 0xf7, 0x16, 0xf1, 0xcd, 0x60, 0xee, 0x73, 0xe4, + 0xc6, 0x55, 0x8e, 0xdf, 0xba, 0x4d, 0x38, 0xcf, + 0x6e, 0xd6, 0xf1, 0x45, 0x25, 0xd4, 0x92, 0xbc, + 0x57, 0x0b, 0x2e, 0xf7, 0x52, 0x77, 0x7d, 0x3d, + 0x28, 0xfe, 0xcf, 0x9b, 0xfe, 0x78, 0xb7, 0xe5, + 0x47, 0xf6, 0x7c, 0xdf, 0xf3, 0xc5, 0xbf, 0x2a, + 0x39, 0xa5, 0xd8, 0x08, 0x84, 0xb0, 0x8b, 0xbd, + 0x46, 0x4d, 0xff, 0x00, 0x2c, 0xf1, 0x32, 0xa1, + 0xc1, 0xe4, 0x9a, 0xb5, 0x0d, 0xf5, 0xbc, 0x72, + 0x5b, 0x49, 0xe7, 0xc8, 0xa8, 0x91, 0x84, 0x30, + 0xa8, 0x3b, 0x41, 0xf5, 0x3e, 0xb5, 0x17, 0xf6, + 0x7c, 0xdf, 0xf3, 0xc5, 0xbf, 0x2a, 0x3f, 0xb3, + 0xe6, 0xff, 0x00, 0x9e, 0x2d, 0xf9, 0x50, 0xa5, + 0x2e, 0xc0, 0x4c, 0xb1, 0xdb, 0x4d, 0x79, 0x63, + 0x29, 0x69, 0x0c, 0x91, 0x28, 0x45, 0x06, 0x32, + 0x03, 0x81, 0xd1, 0xb3, 0xe9, 0xde, 0xa0, 0x13, + 0xa6, 0xdb, 0x9b, 0x66, 0xb9, 0x92, 0xd8, 0xfd, + 0xa1, 0xa4, 0x59, 0x23, 0x07, 0x9e, 0x7a, 0x71, + 0x56, 0x63, 0x8e, 0xfe, 0x38, 0xfc, 0xb4, 0xf3, + 0x02, 0xf6, 0x18, 0xe9, 0x55, 0xff, 0x00, 0xb3, + 0xe6, 0xff, 0x00, 0x9e, 0x4d, 0xf9, 0x53, 0x72, + 0x7d, 0x10, 0xc8, 0x3c, 0xd8, 0x7c, 0xab, 0xf4, + 0xf3, 0xa5, 0x7f, 0x35, 0x55, 0x63, 0x32, 0x92, + 0xcc, 0xd8, 0xf7, 0xa7, 0xa4, 0xd0, 0x2d, 0xc6, + 0x9a, 0xe5, 0xf8, 0x82, 0x3d, 0xae, 0x70, 0x78, + 0xa9, 0x3f, 0xb3, 0xe6, 0xff, 0x00, 0x9e, 0x2d, + 0xf9, 0x51, 0xfd, 0x9f, 0x37, 0xfc, 0xf1, 0x6f, + 0xca, 0x97, 0x34, 0xbb, 0x08, 0x05, 0xcc, 0x52, + 0xc0, 0x91, 0xb5, 0xdc, 0xd6, 0xde, 0x53, 0xb1, + 0xfd, 0xde, 0x7e, 0x75, 0x27, 0x3d, 0xbf, 0xad, + 0x55, 0x91, 0xe3, 0x7d, 0x32, 0x78, 0x77, 0xbb, + 0x3b, 0xcf, 0xbc, 0x6f, 0xe5, 0x88, 0xc7, 0x73, + 0x56, 0xbf, 0xb3, 0xe6, 0xff, 0x00, 0x9e, 0x2d, + 0xf9, 0x51, 0xfd, 0x9f, 0x37, 0xfc, 0xf1, 0x6f, + 0xca, 0x8e, 0x69, 0x76, 0x00, 0x5b, 0x9b, 0x71, + 0x7b, 0x03, 0x97, 0x3b, 0x05, 0xa8, 0x85, 0x98, + 0x29, 0xe0, 0xd6, 0x34, 0x96, 0xa8, 0xb2, 0x30, + 0x46, 0xde, 0xa0, 0xf0, 0xd8, 0xc6, 0x6b, 0x67, + 0xfb, 0x3e, 0x6f, 0xf9, 0xe2, 0xdf, 0x95, 0x1f, + 0xd9, 0xf3, 0x7f, 0xcf, 0x26, 0xfc, 0xa9, 0x36, + 0xdf, 0x40, 0x2a, 0xe8, 0xb1, 0x6c, 0xb8, 0x98, + 0xe3, 0xfe, 0x58, 0x30, 0xab, 0x35, 0x3a, 0xc2, + 0x2c, 0xe2, 0x62, 0xdf, 0xeb, 0x64, 0x5d, 0xa0, + 0x7a, 0x2f, 0x7a, 0x82, 0xba, 0x29, 0xa6, 0xa3, + 0xa9, 0x48, 0x6e, 0xab, 0x61, 0x35, 0xdc, 0x76, + 0x8d, 0x1b, 0x46, 0xa1, 0x63, 0xc7, 0xce, 0xe1, + 0x7b, 0xd5, 0x18, 0xb4, 0x9b, 0xc8, 0x65, 0x49, + 0x52, 0x5b, 0x70, 0xe8, 0x72, 0x0f, 0x9a, 0x2a, + 0x4f, 0x10, 0x7d, 0xdb, 0x2f, 0xfa, 0xe6, 0x7f, + 0x9d, 0x63, 0x55, 0x81, 0xb5, 0x2d, 0x8d, 0xec, + 0x88, 0x11, 0x0d, 0xa4, 0x2a, 0x09, 0x38, 0x8a, + 0x5c, 0x64, 0x91, 0x83, 0xdf, 0xd2, 0xa0, 0x3a, + 0x3d, 0xd9, 0x50, 0xa6, 0x58, 0x08, 0x1d, 0x07, + 0x9c, 0x38, 0xac, 0xca, 0x28, 0x03, 0x72, 0x3b, + 0x4b, 0xe8, 0xe2, 0x54, 0x06, 0xcc, 0xb2, 0x29, + 0x54, 0x90, 0xc8, 0x37, 0x28, 0x3d, 0x87, 0xe6, + 0x69, 0x65, 0xb3, 0xba, 0x9a, 0x30, 0x8f, 0x0d, + 0x86, 0xe0, 0x81, 0x03, 0x89, 0x4e, 0x40, 0x1f, + 0x8e, 0x2b, 0x0a, 0x8a, 0x00, 0xda, 0x83, 0x4f, + 0xbb, 0x86, 0x27, 0x8b, 0x16, 0x72, 0x23, 0xb0, + 0x66, 0x0f, 0x27, 0xa6, 0x71, 0xd0, 0xfb, 0xd4, + 0x89, 0x6d, 0xa8, 0x2c, 0x92, 0x39, 0x6b, 0x46, + 0x32, 0x3e, 0xe6, 0x06, 0x41, 0x8e, 0x8c, 0xb8, + 0xeb, 0xd3, 0x0c, 0x6b, 0x06, 0x8a, 0x00, 0xd5, + 0x4d, 0x26, 0xe9, 0x25, 0x59, 0x15, 0xed, 0x81, + 0x56, 0xdc, 0x07, 0x9a, 0x31, 0x4f, 0x1a, 0x75, + 0xe8, 0x33, 0x9d, 0xf6, 0xbf, 0xbf, 0xfb, 0xdf, + 0xbd, 0x1c, 0x7c, 0xc1, 0xb8, 0xfc, 0xab, 0x1e, + 0x8a, 0x00, 0xda, 0x96, 0xc2, 0xfa, 0x5f, 0x3b, + 0x73, 0xda, 0x8f, 0x3a, 0x51, 0x2b, 0x62, 0x51, + 0xd7, 0x9e, 0x9f, 0xf7, 0xd1, 0xa9, 0x0d, 0xad, + 0xeb, 0x3b, 0xb4, 0x8b, 0x63, 0x26, 0xe9, 0x0c, + 0x80, 0x33, 0xe4, 0x2b, 0x1e, 0xb8, 0xe7, 0xf9, + 0xd6, 0x7b, 0xda, 0xda, 0x44, 0xb1, 0xf9, 0xb7, + 0x72, 0x2b, 0xb4, 0x6a, 0xe4, 0x2c, 0x39, 0x03, + 0x23, 0x3d, 0x77, 0x52, 0x47, 0x69, 0x6e, 0x61, + 0x81, 0xe5, 0xba, 0x68, 0xda, 0x60, 0x48, 0x1e, + 0x56, 0x40, 0xe4, 0x8e, 0x4e, 0x7d, 0xbd, 0x28, + 0x02, 0xef, 0xd8, 0x2f, 0x8a, 0x05, 0xdd, 0x6b, + 0xc4, 0x66, 0x20, 0x7c, 0xc1, 0xd0, 0xb6, 0xef, + 0xeb, 0x51, 0xc9, 0xa5, 0xde, 0x49, 0x14, 0x51, + 0xb3, 0xdb, 0x62, 0x20, 0x54, 0x62, 0x51, 0xdc, + 0x93, 0xfd, 0x6a, 0x8d, 0xd5, 0xa3, 0x5a, 0x84, + 0xde, 0xd9, 0x66, 0x2c, 0x08, 0xf4, 0x21, 0x88, + 0xfe, 0x95, 0x5e, 0x80, 0x36, 0x60, 0xd3, 0xef, + 0xa0, 0x8a, 0x68, 0xd1, 0xed, 0xb6, 0xcc, 0xbb, + 0x5b, 0x32, 0x8e, 0x3e, 0x94, 0xf1, 0x67, 0x7e, + 0x16, 0xd5, 0x77, 0xda, 0xe2, 0xd9, 0xb7, 0x27, + 0xef, 0x07, 0x27, 0x39, 0xe6, 0xb0, 0xe8, 0xa0, + 0x0d, 0xc8, 0xec, 0xf5, 0x08, 0xd6, 0x15, 0x0f, + 0x6a, 0x44, 0x52, 0x19, 0x14, 0x19, 0x07, 0x5f, + 0xf3, 0xfc, 0xe9, 0x9f, 0xd9, 0xf7, 0xe2, 0x68, + 0xa5, 0x59, 0x6d, 0x91, 0xe2, 0x01, 0x57, 0x12, + 0x8e, 0xd5, 0x8d, 0x45, 0x00, 0x6e, 0x4b, 0x67, + 0x7a, 0xe9, 0xb2, 0x3f, 0xb1, 0x40, 0x0b, 0x06, + 0x3e, 0x53, 0x81, 0x92, 0x3a, 0x77, 0xa7, 0x4b, + 0x6b, 0x7d, 0x22, 0x38, 0x02, 0xc9, 0x1e, 0x41, + 0x89, 0x24, 0x47, 0x01, 0x9b, 0xfc, 0xfb, 0x56, + 0x0d, 0x14, 0x01, 0xad, 0x71, 0xa5, 0xde, 0x5c, + 0x4e, 0xf3, 0x3b, 0xdb, 0x06, 0x73, 0xb8, 0x81, + 0x28, 0xc5, 0x47, 0xfd, 0x8b, 0x75, 0xff, 0x00, + 0x3d, 0x2d, 0xff, 0x00, 0xef, 0xe8, 0xac, 0xda, + 0x28, 0x03, 0xa8, 0x82, 0xd9, 0xed, 0xb4, 0x98, + 0xa3, 0x72, 0x84, 0x89, 0x18, 0xe5, 0x5b, 0x22, + 0x99, 0x4c, 0xd3, 0xff, 0x00, 0xe4, 0x09, 0x0f, + 0xfd, 0x74, 0x6a, 0x7d, 0x00, 0x5b, 0x6f, 0xf5, + 0x30, 0xff, 0x00, 0xbc, 0x9f, 0xcc, 0x51, 0x48, + 0xdf, 0xea, 0xa1, 0xff, 0x00, 0x79, 0x3f, 0x98, + 0xa2, 0x80, 0x1d, 0x0f, 0x47, 0xff, 0x00, 0xae, + 0x8d, 0xfc, 0xcd, 0x49, 0x51, 0xc3, 0xd1, 0xff, + 0x00, 0xeb, 0xa3, 0x7f, 0x33, 0x52, 0x50, 0x01, + 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, + 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, + 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, + 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, + 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, + 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, + 0x54, 0xa7, 0xff, 0x00, 0x5c, 0xd5, 0x76, 0xa9, + 0x4d, 0xfe, 0xb5, 0xa8, 0x02, 0x9e, 0xb3, 0x24, + 0x91, 0xda, 0x59, 0xec, 0x76, 0x5c, 0x99, 0x33, + 0xb4, 0xe3, 0xfb, 0xb5, 0x91, 0xf6, 0x89, 0xff, + 0x00, 0xe7, 0xb4, 0x9f, 0xf7, 0xd1, 0xad, 0x4d, + 0x73, 0xfe, 0x3d, 0x2c, 0xbe, 0xb2, 0x7f, 0xec, + 0xb5, 0x8d, 0x40, 0x12, 0xfd, 0xa2, 0x7f, 0xf9, + 0xed, 0x27, 0xfd, 0xf4, 0x68, 0xfb, 0x44, 0xff, + 0x00, 0xf3, 0xda, 0x4f, 0xfb, 0xe8, 0xd4, 0x54, + 0x50, 0x04, 0xbf, 0x68, 0x9f, 0xfe, 0x7b, 0x49, + 0xff, 0x00, 0x7d, 0x1a, 0x3e, 0xd1, 0x3f, 0xfc, + 0xf6, 0x93, 0xfe, 0xfa, 0x35, 0x15, 0x14, 0x01, + 0x32, 0xcd, 0x3b, 0x32, 0xa8, 0x9d, 0xc6, 0x4e, + 0x39, 0x72, 0x05, 0x4d, 0x77, 0xe7, 0x5b, 0x4a, + 0xa8, 0xb7, 0x6f, 0x20, 0x64, 0x0d, 0xb8, 0x12, + 0x07, 0x35, 0x55, 0x15, 0x9d, 0xd5, 0x10, 0x16, + 0x66, 0x38, 0x00, 0x77, 0x35, 0xa3, 0x7d, 0x01, + 0x85, 0xed, 0xde, 0xea, 0x09, 0x44, 0x5e, 0x4a, + 0xa9, 0xda, 0x76, 0x9d, 0xd8, 0xe9, 0x92, 0x28, + 0x01, 0x21, 0xb7, 0xb8, 0x96, 0xea, 0xda, 0x11, + 0x76, 0xe1, 0x67, 0x8f, 0x7e, 0xfc, 0x9f, 0x97, + 0xae, 0x7b, 0xfb, 0x1a, 0x8e, 0x28, 0xe7, 0x74, + 0xdc, 0xf7, 0x13, 0x29, 0xf3, 0x84, 0x5b, 0x57, + 0x2c, 0x4f, 0x5c, 0xf7, 0xed, 0xfd, 0x6a, 0xc4, + 0x4e, 0xa3, 0x4b, 0x79, 0xd3, 0x2a, 0x62, 0xdd, + 0x12, 0x64, 0xf2, 0x03, 0x10, 0x47, 0xe9, 0xba, + 0xac, 0x48, 0x55, 0x75, 0x2d, 0x3d, 0x57, 0xa4, + 0xb3, 0x7d, 0xa0, 0x81, 0xfe, 0xd9, 0x18, 0xfe, + 0x54, 0x01, 0x94, 0x0d, 0xe9, 0x55, 0x60, 0x6e, + 0x0a, 0xb7, 0x00, 0xf3, 0x83, 0xfe, 0x70, 0x7f, + 0x2a, 0x6c, 0x92, 0x5d, 0xc4, 0xe5, 0x24, 0x79, + 0x91, 0x87, 0x66, 0x24, 0x1a, 0xd2, 0xb6, 0x70, + 0x1a, 0xc9, 0x18, 0xb6, 0x0d, 0xb4, 0x9b, 0x40, + 0x6d, 0xa7, 0x71, 0x67, 0xe8, 0x7d, 0x6a, 0xa6, + 0xa3, 0xf2, 0xac, 0x11, 0x18, 0x64, 0x88, 0xa2, + 0x9e, 0x25, 0x70, 0xcd, 0x8c, 0xf7, 0xe0, 0x63, + 0xbd, 0x00, 0x3a, 0x38, 0xa6, 0x65, 0x56, 0x92, + 0xee, 0x44, 0x1e, 0x59, 0x95, 0xba, 0x9d, 0xab, + 0x9c, 0x0e, 0xfd, 0x4d, 0x02, 0x36, 0x72, 0x7c, + 0x9b, 0xf7, 0x71, 0xe5, 0xb3, 0x80, 0x72, 0x0e, + 0x57, 0xa8, 0x23, 0x3c, 0x71, 0x52, 0x11, 0x70, + 0x6f, 0x55, 0xed, 0x59, 0x43, 0x8b, 0x68, 0xf6, + 0xa1, 0xc7, 0xce, 0x36, 0xa8, 0x23, 0x1d, 0xfb, + 0xf1, 0xed, 0x52, 0x1d, 0xb0, 0xdd, 0x59, 0x49, + 0x34, 0x09, 0x6f, 0x33, 0xb1, 0x59, 0x63, 0x4e, + 0x3e, 0x53, 0x81, 0x9c, 0x76, 0xea, 0x7f, 0x2a, + 0x00, 0xac, 0xd1, 0x5d, 0x0b, 0x5b, 0x69, 0x85, + 0xc4, 0x87, 0xcf, 0x62, 0xa1, 0x77, 0x1e, 0x39, + 0xc0, 0xfc, 0xf9, 0xfc, 0xa9, 0x2f, 0x16, 0x6b, + 0x66, 0x1b, 0x2e, 0xa4, 0x91, 0x0b, 0x32, 0x86, + 0xc9, 0x1c, 0x83, 0x83, 0xdf, 0xe8, 0x7f, 0x1a, + 0xd0, 0x87, 0x6a, 0xdc, 0xc9, 0x03, 0x10, 0x45, + 0x9a, 0xa4, 0xbf, 0x8a, 0x03, 0xbb, 0xf5, 0x6a, + 0xcc, 0x72, 0x4e, 0x96, 0x85, 0xba, 0xb4, 0xec, + 0x47, 0xfd, 0xf2, 0x33, 0xfd, 0x28, 0x02, 0x1f, + 0xb4, 0x4f, 0xff, 0x00, 0x3d, 0xa4, 0xff, 0x00, + 0xbe, 0x8d, 0x1f, 0x68, 0x9f, 0xfe, 0x7b, 0x49, + 0xff, 0x00, 0x7d, 0x1a, 0x8a, 0x8a, 0x00, 0x97, + 0xed, 0x13, 0xff, 0x00, 0xcf, 0x69, 0x3f, 0xef, + 0xa3, 0x47, 0xda, 0x27, 0xff, 0x00, 0x9e, 0xd2, + 0x7f, 0xdf, 0x46, 0xa2, 0xa2, 0x80, 0x25, 0xfb, + 0x44, 0xff, 0x00, 0xf3, 0xda, 0x4f, 0xfb, 0xe8, + 0xd2, 0x19, 0xe6, 0x23, 0x06, 0x69, 0x3f, 0xef, + 0xa3, 0x51, 0xd1, 0x40, 0x1d, 0x32, 0x7f, 0xc7, + 0x85, 0x9f, 0xfd, 0x72, 0xfe, 0xa6, 0x92, 0x88, + 0xff, 0x00, 0xe4, 0x1f, 0x67, 0xff, 0x00, 0x5c, + 0xbf, 0xa9, 0xa2, 0x80, 0x29, 0xf8, 0x83, 0xee, + 0xd9, 0x7f, 0xd7, 0x33, 0xfc, 0xeb, 0x1a, 0xba, + 0x8b, 0xfd, 0x37, 0xed, 0xd1, 0x5a, 0xb7, 0xda, + 0x63, 0x8b, 0x6a, 0x63, 0x0f, 0xdf, 0x9a, 0xa5, + 0xff, 0x00, 0x08, 0xff, 0x00, 0xfd, 0x3f, 0xdb, + 0xfe, 0x74, 0x01, 0x89, 0x45, 0x6d, 0xff, 0x00, + 0xc2, 0x3f, 0xff, 0x00, 0x4f, 0xf6, 0xff, 0x00, + 0x9d, 0x1f, 0xf0, 0x8f, 0xff, 0x00, 0xd3, 0xfd, + 0xbf, 0xe7, 0x40, 0x18, 0x94, 0x56, 0xdf, 0xfc, + 0x23, 0xff, 0x00, 0xf4, 0xff, 0x00, 0x6f, 0xf9, + 0xd1, 0xff, 0x00, 0x08, 0xff, 0x00, 0xfd, 0x3f, + 0xdb, 0xfe, 0x74, 0x01, 0x89, 0x45, 0x6d, 0xff, + 0x00, 0xc2, 0x3f, 0xff, 0x00, 0x4f, 0xf6, 0xff, + 0x00, 0x9d, 0x1f, 0xf0, 0x8f, 0xff, 0x00, 0xd3, + 0xfd, 0xbf, 0xe7, 0x40, 0x18, 0x94, 0x56, 0xdf, + 0xfc, 0x23, 0xff, 0x00, 0xf4, 0xff, 0x00, 0x6f, + 0xf9, 0xd1, 0xff, 0x00, 0x08, 0xff, 0x00, 0xfd, + 0x3f, 0xdb, 0xfe, 0x74, 0x00, 0x4f, 0x1d, 0xf3, + 0xc7, 0x07, 0x91, 0x66, 0xb2, 0xc6, 0x60, 0x8c, + 0x6f, 0xf2, 0x15, 0x8f, 0xdd, 0x1d, 0xf1, 0x55, + 0xde, 0x74, 0x82, 0xce, 0xc8, 0x9b, 0x68, 0xe4, + 0x70, 0x8c, 0x43, 0x39, 0x6e, 0x3e, 0x76, 0xec, + 0x0e, 0x2a, 0xc7, 0xfc, 0x23, 0xff, 0x00, 0xf4, + 0xff, 0x00, 0x6f, 0xf9, 0xd1, 0xff, 0x00, 0x08, + 0xff, 0x00, 0xfd, 0x3f, 0xdb, 0xfe, 0x74, 0x01, + 0x46, 0xf5, 0xda, 0x4b, 0x4b, 0x47, 0x73, 0x96, + 0x60, 0xec, 0x4f, 0xa9, 0xdc, 0x6a, 0x95, 0x6d, + 0xff, 0x00, 0xc2, 0x3f, 0xff, 0x00, 0x4f, 0xf6, + 0xff, 0x00, 0x9d, 0x1f, 0xf0, 0x8f, 0xff, 0x00, + 0xd3, 0xfd, 0xbf, 0xe7, 0x40, 0x18, 0x94, 0x56, + 0xdf, 0xfc, 0x23, 0xff, 0x00, 0xf4, 0xff, 0x00, + 0x6f, 0xf9, 0xd1, 0xff, 0x00, 0x08, 0xff, 0x00, + 0xfd, 0x3f, 0xdb, 0xfe, 0x74, 0x01, 0x89, 0x45, + 0x6d, 0xff, 0x00, 0xc2, 0x3f, 0xff, 0x00, 0x4f, + 0xf6, 0xff, 0x00, 0x9d, 0x1f, 0xf0, 0x8f, 0xff, + 0x00, 0xd3, 0xfd, 0xbf, 0xe7, 0x40, 0x18, 0x94, + 0x56, 0xdf, 0xfc, 0x23, 0xff, 0x00, 0xf4, 0xff, + 0x00, 0x6f, 0xf9, 0xd1, 0xff, 0x00, 0x08, 0xff, + 0x00, 0xfd, 0x3f, 0xdb, 0xfe, 0x74, 0x01, 0x89, + 0x45, 0x6d, 0xff, 0x00, 0xc2, 0x3f, 0xff, 0x00, + 0x4f, 0xf6, 0xff, 0x00, 0x9d, 0x1f, 0xf0, 0x8f, + 0xff, 0x00, 0xd3, 0xfd, 0xbf, 0xe7, 0x40, 0x13, + 0xe9, 0xff, 0x00, 0xf2, 0x04, 0x87, 0xfe, 0xba, + 0x35, 0x3e, 0xa5, 0x5b, 0x5f, 0xb1, 0xe9, 0xb1, + 0x43, 0xe6, 0xac, 0x9f, 0x3b, 0x1d, 0xcb, 0xd2, + 0xa2, 0xa0, 0x0b, 0x4d, 0xfe, 0xaa, 0x1f, 0xf7, + 0x93, 0xf9, 0x8a, 0x28, 0x6f, 0xf5, 0x50, 0xff, + 0x00, 0xbc, 0x9f, 0xcc, 0x51, 0x40, 0x0e, 0x8b, + 0xa3, 0xff, 0x00, 0xd7, 0x46, 0xfe, 0x66, 0x9f, + 0x51, 0xc5, 0xfc, 0x7f, 0xf5, 0xd1, 0xbf, 0x99, + 0xa9, 0x28, 0x00, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xa2, 0x8a, 0x28, 0x00, 0xa2, + 0x8a, 0x28, 0x00, 0xaa, 0x73, 0x7f, 0xad, 0x6a, + 0xb9, 0x55, 0x59, 0x1a, 0x4b, 0x9d, 0x8b, 0xd4, + 0x9a, 0x00, 0x8a, 0x58, 0xa2, 0xbb, 0xb5, 0xfb, + 0x3c, 0xcc, 0x53, 0x07, 0x72, 0x48, 0x06, 0x76, + 0x9f, 0xf0, 0xaa, 0x3f, 0xd8, 0x6d, 0xff, 0x00, + 0x3f, 0xb0, 0x7e, 0xbf, 0xe1, 0x5a, 0x8d, 0x3d, + 0xb4, 0x24, 0xa2, 0x20, 0x94, 0x8e, 0xae, 0xc7, + 0x8f, 0xc0, 0x52, 0x7d, 0xb2, 0x2f, 0xf9, 0xf6, + 0x8b, 0xf5, 0xac, 0xdd, 0x48, 0xa1, 0x5c, 0xcc, + 0xfe, 0xc3, 0x6f, 0xf9, 0xfd, 0xb7, 0xfd, 0x7f, + 0xc2, 0x8f, 0xec, 0x36, 0xff, 0x00, 0x9f, 0xdb, + 0x7f, 0xd7, 0xfc, 0x2b, 0x4f, 0xed, 0x91, 0x7f, + 0xcf, 0xb4, 0x5f, 0xad, 0x1f, 0x6c, 0x8b, 0xfe, + 0x7d, 0xa2, 0xfd, 0x68, 0xf6, 0xb1, 0x0b, 0x99, + 0x9f, 0xd8, 0x6d, 0xff, 0x00, 0x3f, 0xb6, 0xff, + 0x00, 0xaf, 0xf8, 0x51, 0xfd, 0x86, 0xdf, 0xf3, + 0xfb, 0x6f, 0xfa, 0xff, 0x00, 0x85, 0x69, 0xfd, + 0xb2, 0x2f, 0xf9, 0xf6, 0x8b, 0xf5, 0xa3, 0xed, + 0x91, 0x7f, 0xcf, 0xb4, 0x5f, 0xad, 0x1e, 0xd6, + 0x21, 0x73, 0x33, 0xfb, 0x0d, 0xbf, 0xe7, 0xf6, + 0xdf, 0xf5, 0xff, 0x00, 0x0a, 0x3f, 0xb0, 0xdb, + 0xfe, 0x7f, 0x6d, 0xff, 0x00, 0x5f, 0xf0, 0xad, + 0x3f, 0xb6, 0x45, 0xff, 0x00, 0x3e, 0xd1, 0x7e, + 0xb4, 0x7d, 0xb2, 0x2f, 0xf9, 0xf6, 0x8b, 0xf5, + 0xa3, 0xda, 0xc4, 0x2e, 0x66, 0x7f, 0x61, 0xb7, + 0xfc, 0xfe, 0xdb, 0xfe, 0xbf, 0xe1, 0x47, 0xf6, + 0x1b, 0x7f, 0xcf, 0xed, 0xbf, 0xeb, 0xfe, 0x15, + 0xa7, 0xf6, 0xc8, 0xbf, 0xe7, 0xda, 0x2f, 0xd6, + 0x8f, 0xb6, 0x45, 0xff, 0x00, 0x3e, 0xd1, 0x7e, + 0xb4, 0x7b, 0x58, 0x85, 0xcc, 0xcf, 0xec, 0x36, + 0xff, 0x00, 0x9f, 0xdb, 0x7f, 0xd7, 0xfc, 0x28, + 0xfe, 0xc3, 0x6f, 0xf9, 0xfd, 0xb7, 0xfd, 0x7f, + 0xc2, 0xb4, 0xfe, 0xd9, 0x17, 0xfc, 0xfb, 0x45, + 0xfa, 0xd1, 0xf6, 0xc8, 0xbf, 0xe7, 0xda, 0x2f, + 0xd6, 0x8f, 0x6b, 0x10, 0xb9, 0x9e, 0xfa, 0x44, + 0x92, 0x45, 0x1a, 0x35, 0xe5, 0xb7, 0xee, 0xf2, + 0x01, 0xf9, 0xb3, 0x8e, 0xb8, 0xe9, 0xf5, 0xfc, + 0xe9, 0x9f, 0xd8, 0x6d, 0xff, 0x00, 0x3f, 0xb6, + 0xff, 0x00, 0xaf, 0xf8, 0x56, 0x9f, 0xdb, 0x22, + 0xff, 0x00, 0x9f, 0x68, 0xbf, 0x5a, 0x3e, 0xd9, + 0x17, 0xfc, 0xfb, 0x45, 0xfa, 0xd1, 0xed, 0x62, + 0x17, 0x33, 0x3f, 0xb0, 0xdb, 0xfe, 0x7f, 0x6d, + 0xff, 0x00, 0x5f, 0xf0, 0xa7, 0xc9, 0xa4, 0x49, + 0x22, 0x46, 0x86, 0xf2, 0xd8, 0x2c, 0x63, 0x00, + 0x0d, 0xdf, 0x9f, 0x4a, 0xd0, 0xfb, 0x64, 0x5f, + 0xf3, 0xed, 0x17, 0xeb, 0x47, 0xdb, 0x22, 0xff, + 0x00, 0x9f, 0x68, 0xbf, 0x5a, 0x3d, 0xac, 0x42, + 0xe6, 0x67, 0xf6, 0x1b, 0x7f, 0xcf, 0xed, 0xbf, + 0xeb, 0xfe, 0x14, 0x7f, 0x61, 0xb7, 0xfc, 0xfe, + 0xdb, 0xfe, 0xbf, 0xe1, 0x5a, 0x7f, 0x6c, 0x8b, + 0xfe, 0x7d, 0xa2, 0xfd, 0x68, 0xfb, 0x64, 0x5f, + 0xf3, 0xed, 0x17, 0xeb, 0x47, 0xb5, 0x88, 0x5c, + 0xcc, 0xfe, 0xc3, 0x6f, 0xf9, 0xfd, 0xb7, 0xfd, + 0x7f, 0xc2, 0x8f, 0xec, 0x36, 0xff, 0x00, 0x9f, + 0xdb, 0x7f, 0xd7, 0xfc, 0x2b, 0x4f, 0xed, 0x91, + 0x7f, 0xcf, 0xb4, 0x5f, 0xad, 0x1f, 0x6c, 0x8b, + 0xfe, 0x7d, 0xa2, 0xfd, 0x68, 0xf6, 0xb1, 0x0b, + 0x99, 0x9f, 0xd8, 0x6d, 0xff, 0x00, 0x3f, 0xb6, + 0xff, 0x00, 0xaf, 0xf8, 0x53, 0x93, 0x44, 0x45, + 0x60, 0x66, 0xbc, 0x8c, 0xa7, 0x71, 0x18, 0x24, + 0x9a, 0xd1, 0xfb, 0x64, 0x5f, 0xf3, 0xed, 0x17, + 0xeb, 0x47, 0xdb, 0x61, 0xef, 0x6d, 0x1e, 0x3d, + 0xb3, 0x47, 0xb5, 0x88, 0x5c, 0x6c, 0xae, 0x1c, + 0xa8, 0x45, 0xdb, 0x1a, 0x00, 0xa8, 0xbe, 0x80, + 0x53, 0x2a, 0x66, 0x58, 0xa4, 0x88, 0xcd, 0x06, + 0x40, 0x1c, 0x3a, 0x1e, 0x76, 0xd4, 0x35, 0x69, + 0xdf, 0x54, 0x32, 0x9f, 0x88, 0x3e, 0xed, 0x97, + 0xfd, 0x73, 0x3f, 0xce, 0xb1, 0xab, 0x67, 0xc4, + 0x1f, 0x76, 0xcb, 0xfe, 0xb9, 0x9f, 0xe7, 0x58, + 0xd4, 0xc0, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, + 0x8a, 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x2a, 0x4b, + 0x78, 0xbc, 0xfb, 0x98, 0xa1, 0xdd, 0xb7, 0xcc, + 0x70, 0xb9, 0xc7, 0x4c, 0x9a, 0x8e, 0xac, 0x69, + 0xff, 0x00, 0xf2, 0x11, 0xb5, 0xff, 0x00, 0xae, + 0xc9, 0xfc, 0xc5, 0x00, 0x36, 0x2b, 0x76, 0x9a, + 0xe4, 0x40, 0x84, 0x64, 0x92, 0x32, 0x7a, 0x00, + 0x3a, 0x9a, 0x92, 0x6b, 0x78, 0x04, 0x46, 0x48, + 0x2e, 0x84, 0xbb, 0x4e, 0x19, 0x59, 0x76, 0x1f, + 0xa8, 0xf5, 0xab, 0x50, 0xdb, 0x4d, 0x6d, 0x78, + 0xc6, 0xe6, 0x36, 0x86, 0x39, 0x43, 0xc6, 0x1d, + 0xc6, 0x00, 0x2c, 0xa4, 0x0a, 0xab, 0x35, 0x8c, + 0xd6, 0xf1, 0x34, 0x93, 0x81, 0x1f, 0x38, 0x55, + 0x27, 0x97, 0xfa, 0x7b, 0x7b, 0xd0, 0x04, 0xd3, + 0x69, 0xf1, 0x2c, 0xd2, 0xc1, 0x15, 0xd1, 0x79, + 0xe3, 0xcf, 0xc8, 0xd1, 0xed, 0xdd, 0x8e, 0xb8, + 0x39, 0x35, 0x9f, 0x5b, 0x73, 0x5b, 0xcb, 0x06, + 0xb1, 0x35, 0xe4, 0xa8, 0x63, 0x81, 0x1d, 0x9f, + 0x73, 0x71, 0xbb, 0xd0, 0x0f, 0x5c, 0xd6, 0x25, + 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, + 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, + 0x00, 0x74, 0x5a, 0x7f, 0xfc, 0x81, 0x21, 0xff, + 0x00, 0xae, 0x8d, 0x4f, 0xa6, 0x69, 0xff, 0x00, + 0xf2, 0x04, 0x87, 0xfe, 0xba, 0x35, 0x3e, 0x80, + 0x2d, 0x37, 0xfa, 0xb8, 0x7f, 0xde, 0x4f, 0xe6, + 0x28, 0xa4, 0x6f, 0xf5, 0x70, 0xff, 0x00, 0xbe, + 0x9f, 0xcc, 0x51, 0x40, 0x0e, 0x8b, 0xfe, 0x5a, + 0x7f, 0xd7, 0x46, 0xfe, 0x74, 0xfa, 0x64, 0x5f, + 0xf2, 0xd3, 0xfe, 0xba, 0x37, 0xf3, 0xa7, 0xd0, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, 0x50, + 0x01, 0x50, 0xa9, 0xdb, 0x34, 0xcd, 0xdc, 0x46, + 0xc4, 0x7f, 0xdf, 0x35, 0x35, 0x40, 0x79, 0x7b, + 0x8f, 0xfa, 0xe4, 0xff, 0x00, 0xfa, 0x0d, 0x27, + 0xb0, 0x18, 0x3f, 0x68, 0xf7, 0xa3, 0xed, 0x1e, + 0xf5, 0x4f, 0xca, 0x6f, 0x53, 0x47, 0x94, 0xde, + 0xa6, 0xb9, 0x6c, 0x49, 0x73, 0xed, 0x1e, 0xf4, + 0x7d, 0xa3, 0xde, 0xa9, 0xf9, 0x4d, 0xea, 0x68, + 0xf2, 0x9b, 0xd4, 0xd1, 0x60, 0x2e, 0x7d, 0xa3, + 0xde, 0x8f, 0xb4, 0x7b, 0xd5, 0x3f, 0x29, 0xbd, + 0x4d, 0x1e, 0x53, 0x7a, 0x9a, 0x2c, 0x05, 0xcf, + 0xb4, 0x7b, 0xd1, 0xf6, 0x8f, 0x7a, 0xa7, 0xe5, + 0x37, 0xa9, 0xa3, 0xca, 0x6f, 0x53, 0x45, 0x80, + 0xdd, 0x86, 0xd6, 0x16, 0xb3, 0x8a, 0xe6, 0x6b, + 0xd5, 0x84, 0x48, 0x48, 0x00, 0xa6, 0x7a, 0x1f, + 0x5c, 0xd5, 0x7b, 0xd8, 0xa4, 0xb3, 0x95, 0x51, + 0x88, 0x70, 0xe3, 0x28, 0xeb, 0xd1, 0x85, 0x2d, + 0xcc, 0x32, 0x3f, 0x87, 0xec, 0x15, 0x41, 0x24, + 0x3b, 0xf4, 0x1e, 0xe6, 0xb4, 0xad, 0xa2, 0x09, + 0x3e, 0x91, 0x04, 0xff, 0x00, 0xeb, 0x63, 0x8d, + 0xd8, 0x83, 0xdb, 0x23, 0x8f, 0xf3, 0xed, 0x57, + 0xca, 0x98, 0xcc, 0xfb, 0x38, 0x5e, 0x5b, 0xe8, + 0x6d, 0xee, 0x12, 0x48, 0x84, 0x99, 0xea, 0x30, + 0x7a, 0x7b, 0xd4, 0x13, 0x19, 0x22, 0xcb, 0x14, + 0x71, 0x19, 0x24, 0x2b, 0x11, 0xc1, 0xfc, 0x6b, + 0x62, 0xc6, 0x64, 0x92, 0x78, 0x53, 0x17, 0x92, + 0x15, 0x9d, 0x88, 0x92, 0x75, 0x18, 0x53, 0xb4, + 0xe5, 0x72, 0x3f, 0x95, 0x54, 0x66, 0xb8, 0x9b, + 0x4d, 0xd5, 0x16, 0xe5, 0x98, 0x85, 0x91, 0x76, + 0x6e, 0xfe, 0x13, 0xbb, 0xa0, 0xfd, 0x28, 0xe5, + 0x56, 0x02, 0x8f, 0xef, 0xfc, 0xdf, 0x27, 0xc9, + 0x93, 0xcc, 0xeb, 0xb3, 0x69, 0xcf, 0xe5, 0x48, + 0x8d, 0x2b, 0xa1, 0x74, 0x8d, 0xd9, 0x17, 0xab, + 0x05, 0x24, 0x0a, 0xda, 0xf2, 0x9c, 0xf8, 0xa5, + 0xe4, 0x00, 0xed, 0xf2, 0xb3, 0x9f, 0xf8, 0x0e, + 0x2a, 0xa2, 0x9b, 0x88, 0x74, 0xcd, 0x2d, 0x6d, + 0x59, 0x80, 0x69, 0x1b, 0x7e, 0xdf, 0xe2, 0x3b, + 0xba, 0x1f, 0xd6, 0x8e, 0x44, 0x06, 0x74, 0x92, + 0xbc, 0x4e, 0x52, 0x45, 0x64, 0x71, 0xd5, 0x58, + 0x60, 0x8a, 0x4f, 0xb4, 0x7b, 0xd4, 0xba, 0xf4, + 0x6c, 0xda, 0xc5, 0xc1, 0x07, 0xba, 0xff, 0x00, + 0xe8, 0x22, 0xb3, 0xbc, 0xa6, 0xf5, 0x35, 0x0d, + 0x59, 0x88, 0xb9, 0xf6, 0x8f, 0x7a, 0x3e, 0xd1, + 0xef, 0x54, 0xfc, 0xa6, 0xf5, 0x34, 0x79, 0x4d, + 0xea, 0x68, 0xb0, 0x17, 0x3e, 0xd1, 0xef, 0x47, + 0xda, 0x3d, 0xea, 0x9f, 0x94, 0xde, 0xa6, 0x8f, + 0x29, 0xbd, 0x4d, 0x16, 0x02, 0xe7, 0xda, 0x3d, + 0xe8, 0xfb, 0x47, 0xbd, 0x53, 0xf2, 0x9b, 0xd4, + 0xd1, 0xe5, 0x37, 0xa9, 0xa2, 0xc0, 0x6e, 0x68, + 0xf3, 0x79, 0x92, 0x5c, 0xa6, 0x78, 0xf2, 0x09, + 0xfd, 0x45, 0x4f, 0x54, 0x74, 0x04, 0x2b, 0x71, + 0x72, 0x49, 0xff, 0x00, 0x97, 0x76, 0xfe, 0x62, + 0xaf, 0x56, 0xf4, 0xfe, 0x11, 0xa1, 0xf7, 0xf6, + 0xb6, 0x57, 0x11, 0x5a, 0x9b, 0xab, 0xbf, 0x21, + 0x82, 0x70, 0x31, 0xd7, 0x9a, 0xa5, 0xfd, 0x9d, + 0xa4, 0x7f, 0xd0, 0x53, 0xf4, 0xa6, 0xf8, 0x83, + 0xee, 0xd9, 0x7f, 0xd7, 0x33, 0xfc, 0xeb, 0x1a, + 0xb4, 0x19, 0xb7, 0xfd, 0x9d, 0xa4, 0x7f, 0xd0, + 0x53, 0xf4, 0xa3, 0xfb, 0x3b, 0x48, 0xff, 0x00, + 0xa0, 0xa7, 0xe9, 0x58, 0x94, 0x50, 0x06, 0xdf, + 0xf6, 0x76, 0x91, 0xff, 0x00, 0x41, 0x4f, 0xd2, + 0x8f, 0xec, 0xed, 0x23, 0xfe, 0x82, 0x9f, 0xa5, + 0x62, 0x51, 0x40, 0x1b, 0x7f, 0xd9, 0xda, 0x47, + 0xfd, 0x05, 0x3f, 0x4a, 0x3f, 0xb3, 0xb4, 0x8f, + 0xfa, 0x0a, 0x7e, 0x95, 0x9b, 0x65, 0x02, 0xce, + 0xf2, 0x6f, 0xde, 0x56, 0x34, 0x2e, 0x55, 0x3a, + 0x9f, 0x61, 0xf9, 0xd1, 0x24, 0x31, 0x48, 0x37, + 0x5a, 0x6f, 0x38, 0x52, 0xce, 0x8e, 0x46, 0x57, + 0x1e, 0xfd, 0xe8, 0x03, 0x4b, 0xfb, 0x3b, 0x48, + 0xff, 0x00, 0xa0, 0xa7, 0xe9, 0x47, 0xf6, 0x76, + 0x91, 0xff, 0x00, 0x41, 0x4f, 0xd2, 0xb3, 0x63, + 0xb1, 0xb9, 0x95, 0x15, 0xd1, 0x06, 0xd6, 0x19, + 0x04, 0xb8, 0x19, 0xe4, 0x8e, 0xe7, 0xd8, 0xd4, + 0x91, 0x58, 0x48, 0xc9, 0x0b, 0xb0, 0xce, 0xf9, + 0xbc, 0xa3, 0x18, 0x65, 0x0d, 0x9e, 0x3d, 0x7e, + 0xb4, 0x01, 0x7b, 0xfb, 0x3b, 0x48, 0xff, 0x00, + 0xa0, 0xa7, 0xe9, 0x47, 0xf6, 0x76, 0x91, 0xff, + 0x00, 0x41, 0x4f, 0xd2, 0xb2, 0xd2, 0xd2, 0x77, + 0x87, 0xce, 0x58, 0xff, 0x00, 0x77, 0xd7, 0x39, + 0x19, 0xc7, 0x73, 0x8e, 0xb4, 0xeb, 0xbb, 0x56, + 0x82, 0x69, 0xf6, 0x83, 0xe5, 0x47, 0x2b, 0x46, + 0x19, 0x88, 0xc9, 0xc5, 0x00, 0x69, 0x7f, 0x67, + 0x69, 0x1f, 0xf4, 0x14, 0xfd, 0x28, 0xfe, 0xce, + 0xd2, 0x3f, 0xe8, 0x29, 0xfa, 0x55, 0x38, 0x23, + 0xb1, 0x7b, 0x49, 0x25, 0x91, 0x2e, 0x37, 0x44, + 0x17, 0x76, 0xd9, 0x14, 0x03, 0x93, 0xdb, 0x8a, + 0x88, 0xda, 0x3c, 0x9b, 0x5a, 0x08, 0xd8, 0x29, + 0x4d, 0xe4, 0xbb, 0xaf, 0x4d, 0xc4, 0x66, 0x80, + 0x34, 0x7f, 0xb3, 0xb4, 0x8f, 0xfa, 0x0a, 0x7e, + 0x94, 0x7f, 0x67, 0x69, 0x1f, 0xf4, 0x14, 0xfd, + 0x2b, 0x35, 0xec, 0x2e, 0x90, 0x1c, 0xc5, 0xd0, + 0x81, 0x80, 0xc0, 0x9e, 0x7a, 0x71, 0xe9, 0xef, + 0x48, 0xd6, 0x57, 0x29, 0x2c, 0x71, 0x98, 0xfe, + 0x69, 0x1b, 0x6a, 0xe1, 0x81, 0x04, 0xfa, 0x66, + 0x80, 0x34, 0xff, 0x00, 0xb3, 0xb4, 0x8f, 0xfa, + 0x0a, 0x7e, 0x94, 0x7f, 0x67, 0x69, 0x1f, 0xf4, + 0x14, 0xfd, 0x2b, 0x1e, 0x58, 0xde, 0x27, 0x28, + 0xe3, 0x0c, 0x3a, 0x8c, 0xe6, 0x99, 0x40, 0x1b, + 0x7f, 0xd9, 0xda, 0x47, 0xfd, 0x05, 0x3f, 0x4a, + 0x3f, 0xb3, 0xb4, 0x8f, 0xfa, 0x0a, 0x7e, 0x95, + 0x89, 0x45, 0x00, 0x6d, 0xff, 0x00, 0x67, 0x69, + 0x1f, 0xf4, 0x14, 0xfd, 0x28, 0xfe, 0xce, 0xd2, + 0x3f, 0xe8, 0x29, 0xfa, 0x56, 0x25, 0x14, 0x01, + 0xd5, 0x2c, 0x50, 0x41, 0xa6, 0xc4, 0x96, 0xd3, + 0x79, 0xd1, 0xef, 0x63, 0xba, 0xa2, 0xa6, 0x69, + 0xff, 0x00, 0xf2, 0x04, 0x87, 0xfe, 0xba, 0x35, + 0x3e, 0x80, 0x2c, 0x9f, 0xf5, 0x70, 0xff, 0x00, + 0xbe, 0x9f, 0xcc, 0x51, 0x41, 0xff, 0x00, 0x57, + 0x0f, 0xfb, 0xe9, 0xfc, 0xc5, 0x14, 0x00, 0xe8, + 0xbf, 0x8f, 0xfe, 0xba, 0x37, 0xf3, 0x35, 0x25, + 0x47, 0x17, 0xf1, 0xff, 0x00, 0xd7, 0x46, 0xfe, + 0x66, 0xa4, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0xa1, 0x8c, 0x6e, 0xb9, + 0x74, 0xee, 0xea, 0xca, 0x33, 0xea, 0x45, 0x4d, + 0x54, 0xe5, 0x38, 0x99, 0x88, 0x38, 0x34, 0x01, + 0x9e, 0x6d, 0x8a, 0x92, 0x08, 0xc1, 0x1d, 0xa9, + 0x3e, 0xcf, 0xed, 0x57, 0xf5, 0x1d, 0x4a, 0x2b, + 0x79, 0xe3, 0x49, 0x6d, 0xbc, 0xc2, 0xd1, 0x2b, + 0x97, 0x56, 0xda, 0x72, 0x7f, 0x0a, 0xa9, 0xfd, + 0xb1, 0x67, 0xff, 0x00, 0x3e, 0x72, 0x7f, 0xdf, + 0xcf, 0xfe, 0xb5, 0x73, 0x3a, 0x52, 0x15, 0x88, + 0xfe, 0xcf, 0xed, 0x47, 0xd9, 0xfd, 0xaa, 0x4f, + 0xed, 0x8b, 0x3f, 0xf9, 0xf3, 0x93, 0xfe, 0xfe, + 0x7f, 0xf5, 0xa8, 0xfe, 0xd8, 0xb3, 0xff, 0x00, + 0x9f, 0x39, 0x3f, 0xef, 0xe7, 0xff, 0x00, 0x5a, + 0x8f, 0x65, 0x21, 0x58, 0x8f, 0xec, 0xfe, 0xd4, + 0x7d, 0x9f, 0xda, 0xa4, 0xfe, 0xd8, 0xb3, 0xff, + 0x00, 0x9f, 0x39, 0x3f, 0xef, 0xe7, 0xff, 0x00, + 0x5a, 0x8f, 0xed, 0x8b, 0x3f, 0xf9, 0xf3, 0x93, + 0xfe, 0xfe, 0x7f, 0xf5, 0xa8, 0xf6, 0x52, 0x0b, + 0x11, 0xfd, 0x9f, 0xda, 0x8f, 0xb3, 0xfb, 0x54, + 0x9f, 0xdb, 0x16, 0x7f, 0xf3, 0xe7, 0x27, 0xfd, + 0xfc, 0xff, 0x00, 0xeb, 0x51, 0xfd, 0xb1, 0x67, + 0xff, 0x00, 0x3e, 0x72, 0x7f, 0xdf, 0xcf, 0xfe, + 0xb5, 0x1e, 0xca, 0x41, 0x62, 0x78, 0x6e, 0x6e, + 0xed, 0xe2, 0x11, 0x45, 0x2e, 0xd4, 0x1d, 0x06, + 0xd1, 0xfe, 0x15, 0x0b, 0x09, 0x5a, 0x6f, 0x39, + 0x9d, 0x8c, 0x99, 0xce, 0xec, 0xf2, 0x29, 0x3f, + 0xb6, 0x2c, 0xff, 0x00, 0xe7, 0xce, 0x4f, 0xfb, + 0xf9, 0xff, 0x00, 0xd6, 0xa3, 0xfb, 0x62, 0xcf, + 0xfe, 0x7c, 0xe4, 0xff, 0x00, 0xbf, 0x9f, 0xfd, + 0x6a, 0x7e, 0xce, 0x63, 0xb1, 0x3b, 0x5c, 0xde, + 0x3c, 0x89, 0x23, 0x4c, 0x4b, 0x27, 0xdd, 0xe0, + 0x71, 0xf8, 0x53, 0x26, 0x92, 0xe6, 0x78, 0x84, + 0x52, 0xca, 0x59, 0x07, 0x63, 0x51, 0xff, 0x00, + 0x6c, 0x59, 0xff, 0x00, 0xcf, 0x9c, 0x9f, 0xf7, + 0xf3, 0xff, 0x00, 0xad, 0x47, 0xf6, 0xc5, 0x9f, + 0xfc, 0xf9, 0xc9, 0xff, 0x00, 0x7f, 0x3f, 0xfa, + 0xd4, 0x72, 0x4c, 0x2c, 0x4e, 0xb7, 0x57, 0x8a, + 0x10, 0x09, 0x8e, 0x13, 0x85, 0xe0, 0x54, 0xd6, + 0x4c, 0x91, 0xdb, 0x88, 0xcd, 0xd4, 0x91, 0x7c, + 0xd9, 0x65, 0x0b, 0x90, 0x47, 0xb7, 0xa5, 0x52, + 0xfe, 0xd8, 0xb3, 0xff, 0x00, 0x9f, 0x39, 0x3f, + 0xef, 0xe7, 0xff, 0x00, 0x5a, 0x8f, 0xed, 0x8b, + 0x3f, 0xf9, 0xf3, 0x93, 0xfe, 0xfe, 0x7f, 0xf5, + 0xa9, 0xa8, 0x4d, 0x06, 0xa3, 0xef, 0x47, 0xda, + 0x6e, 0xe4, 0x9b, 0x18, 0x0c, 0x78, 0xcd, 0x41, + 0xf6, 0x7f, 0x6a, 0x93, 0xfb, 0x62, 0xcf, 0xfe, + 0x7c, 0xe4, 0xff, 0x00, 0xbf, 0x9f, 0xfd, 0x6a, + 0x3f, 0xb6, 0x2c, 0xff, 0x00, 0xe7, 0xce, 0x4f, + 0xfb, 0xf9, 0xff, 0x00, 0xd6, 0xa9, 0x74, 0xe4, + 0xc2, 0xc4, 0x7f, 0x67, 0xf6, 0xa3, 0xec, 0xfe, + 0xd5, 0x27, 0xf6, 0xc5, 0x9f, 0xfc, 0xf9, 0xc9, + 0xff, 0x00, 0x7f, 0x3f, 0xfa, 0xd4, 0x7f, 0x6c, + 0x59, 0xff, 0x00, 0xcf, 0x9c, 0x9f, 0xf7, 0xf3, + 0xff, 0x00, 0xad, 0x47, 0xb2, 0x90, 0xac, 0x47, + 0xf6, 0x7f, 0x6a, 0x3e, 0xcf, 0xed, 0x52, 0x7f, + 0x6c, 0x59, 0xff, 0x00, 0xcf, 0x9c, 0x9f, 0xf7, + 0xf3, 0xff, 0x00, 0xad, 0x47, 0xf6, 0xc5, 0x9f, + 0xfc, 0xf9, 0xc9, 0xff, 0x00, 0x7f, 0x3f, 0xfa, + 0xd4, 0x7b, 0x29, 0x05, 0x88, 0xfe, 0xcf, 0xed, + 0x47, 0xd9, 0xfd, 0xaa, 0x4f, 0xed, 0x8b, 0x3f, + 0xf9, 0xf3, 0x93, 0xfe, 0xfe, 0x7f, 0xf5, 0xa8, + 0x3a, 0xcd, 0xa8, 0xe4, 0x59, 0x39, 0xf6, 0x32, + 0xff, 0x00, 0xf5, 0xa8, 0xf6, 0x52, 0x0b, 0x16, + 0xb4, 0xe8, 0x7c, 0xa5, 0xb8, 0x98, 0x8c, 0x2f, + 0x96, 0x53, 0xea, 0x4d, 0x15, 0x22, 0x5c, 0x9b, + 0xad, 0x36, 0x19, 0x0a, 0x2c, 0x60, 0xbb, 0x00, + 0xab, 0xd0, 0x54, 0x75, 0xbc, 0x63, 0xca, 0xac, + 0x51, 0x4f, 0xc4, 0x1f, 0x76, 0xcb, 0xfe, 0xb9, + 0x1f, 0xe7, 0x58, 0xd5, 0xd1, 0xea, 0xab, 0x63, + 0x22, 0xda, 0x8b, 0xa9, 0xa5, 0x8d, 0x84, 0x7c, + 0x04, 0x4c, 0xe4, 0x66, 0xb3, 0xbc, 0x9d, 0x1f, + 0xfe, 0x7f, 0x2e, 0x3f, 0xef, 0xd5, 0x50, 0x19, + 0xb4, 0x56, 0x97, 0x93, 0xa3, 0xff, 0x00, 0xcf, + 0xe5, 0xc7, 0xfd, 0xfa, 0xa3, 0xc9, 0xd1, 0xff, + 0x00, 0xe7, 0xf2, 0xe3, 0xfe, 0xfd, 0x50, 0x06, + 0x6d, 0x15, 0xa5, 0xe4, 0xe8, 0xff, 0x00, 0xf3, + 0xf9, 0x71, 0xff, 0x00, 0x7e, 0xa8, 0xf2, 0x74, + 0x7f, 0xf9, 0xfc, 0xb8, 0xff, 0x00, 0xbf, 0x54, + 0x01, 0x56, 0xcc, 0x13, 0x29, 0x2b, 0x70, 0x20, + 0x91, 0x46, 0x51, 0x89, 0xc0, 0x27, 0xd3, 0x3d, + 0xaa, 0xfb, 0xce, 0x05, 0xc5, 0xa1, 0x99, 0xe3, + 0x96, 0x72, 0xcc, 0xb2, 0xb4, 0x58, 0x39, 0x43, + 0x81, 0x82, 0x47, 0x04, 0xf5, 0xa8, 0xbc, 0x9d, + 0x1f, 0xfe, 0x7f, 0x2e, 0x3f, 0xef, 0xd5, 0x49, + 0x0f, 0xf6, 0x5c, 0x12, 0x79, 0x91, 0x5e, 0xce, + 0xaf, 0xd8, 0xf9, 0x40, 0xe2, 0x80, 0x1c, 0x5c, + 0x79, 0xd2, 0x5b, 0x86, 0xb7, 0x92, 0x18, 0x8a, + 0xc6, 0x52, 0x56, 0xdb, 0x9d, 0xa3, 0x1b, 0x81, + 0xfa, 0xe7, 0xf3, 0xa4, 0xb7, 0x68, 0x16, 0x48, + 0x36, 0x4c, 0x9e, 0x5c, 0x57, 0xa5, 0xb2, 0xec, + 0x01, 0xda, 0x76, 0xe0, 0xfe, 0x95, 0x17, 0x93, + 0xa4, 0x7f, 0xcf, 0xe5, 0xc7, 0xfd, 0xfb, 0xa3, + 0xc9, 0xd1, 0xff, 0x00, 0xe7, 0xf2, 0xe3, 0xfe, + 0xfd, 0x50, 0x02, 0x30, 0x49, 0x61, 0x82, 0x51, + 0x70, 0x91, 0x88, 0xa2, 0x28, 0xcb, 0xbb, 0xe6, + 0xce, 0x4f, 0x00, 0x7b, 0xe7, 0xf9, 0xd3, 0xf5, + 0x79, 0x62, 0xb9, 0x77, 0x92, 0x26, 0x41, 0xe5, + 0xca, 0xc9, 0xb0, 0x36, 0x43, 0x02, 0x49, 0x0c, + 0x3d, 0x73, 0xdf, 0xf0, 0xa6, 0xf9, 0x3a, 0x3f, + 0xfc, 0xfe, 0x5c, 0x7f, 0xdf, 0xaa, 0x3c, 0x9d, + 0x1f, 0xfe, 0x7f, 0x2e, 0x3f, 0xef, 0xd5, 0x00, + 0x57, 0x81, 0x94, 0x58, 0xdd, 0x29, 0x60, 0x19, + 0xb6, 0x60, 0x13, 0xc9, 0xe6, 0xac, 0x79, 0xb1, + 0xfd, 0x87, 0x6f, 0x98, 0xbb, 0xbe, 0xc9, 0xb7, + 0x19, 0xe7, 0x3e, 0x6e, 0x71, 0xf9, 0x51, 0xe4, + 0xe8, 0xff, 0x00, 0xf3, 0xf9, 0x71, 0xff, 0x00, + 0x7e, 0xa8, 0xf2, 0x74, 0x7f, 0xf9, 0xfc, 0xb8, + 0xff, 0x00, 0xbf, 0x54, 0x01, 0x62, 0xd6, 0xea, + 0x18, 0xaf, 0x9a, 0x47, 0x91, 0x76, 0x08, 0x21, + 0x19, 0xcf, 0x71, 0xb3, 0x3f, 0x96, 0x0f, 0xe5, + 0x4c, 0x49, 0x12, 0x2b, 0x9b, 0x44, 0x22, 0xd6, + 0x34, 0x17, 0x01, 0xcf, 0x95, 0x29, 0x6f, 0x4e, + 0x49, 0x24, 0xe2, 0xa2, 0xf2, 0x74, 0x7f, 0xf9, + 0xfc, 0xb8, 0xff, 0x00, 0xbf, 0x54, 0x79, 0x3a, + 0x3f, 0xfc, 0xfe, 0x5c, 0x7f, 0xdf, 0xaa, 0x00, + 0xce, 0x63, 0x96, 0x24, 0x9a, 0x4a, 0xd2, 0xf2, + 0x74, 0x7f, 0xf9, 0xfc, 0xb8, 0xff, 0x00, 0xbf, + 0x54, 0x79, 0x3a, 0x3f, 0xfc, 0xfe, 0x5c, 0x7f, + 0xdf, 0xaa, 0x00, 0xcd, 0xa2, 0xb4, 0xbc, 0x9d, + 0x1f, 0xfe, 0x7f, 0x2e, 0x3f, 0xef, 0xd5, 0x1e, + 0x4e, 0x8f, 0xff, 0x00, 0x3f, 0x97, 0x1f, 0xf7, + 0xea, 0x80, 0x33, 0x68, 0xad, 0x2f, 0x27, 0x47, + 0xff, 0x00, 0x9f, 0xcb, 0x8f, 0xfb, 0xf5, 0x47, + 0x93, 0xa3, 0xff, 0x00, 0xcf, 0xe5, 0xc7, 0xfd, + 0xfa, 0xa0, 0x0d, 0x0d, 0x3f, 0xfe, 0x40, 0x90, + 0xff, 0x00, 0xd7, 0x56, 0xa7, 0xd3, 0xed, 0xbe, + 0xcc, 0x34, 0x85, 0x5b, 0x59, 0x1e, 0x44, 0x59, + 0x88, 0xcb, 0xae, 0x0e, 0x71, 0x9f, 0xeb, 0x4c, + 0xa0, 0x0b, 0x2d, 0xfe, 0xae, 0x1f, 0xf7, 0xd3, + 0xf9, 0x8a, 0x29, 0x5b, 0xfd, 0x5c, 0x3f, 0xef, + 0xa7, 0xf3, 0x14, 0x50, 0x03, 0xa2, 0xe8, 0xff, + 0x00, 0xf5, 0xd1, 0xbf, 0x99, 0xa9, 0x2a, 0x38, + 0x7a, 0x3f, 0xfd, 0x74, 0x6f, 0xe6, 0x6a, 0x4a, + 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, + 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, + 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, + 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, + 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, + 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, + 0x00, 0x2a, 0x94, 0xdf, 0xeb, 0x5a, 0xae, 0xd5, + 0x29, 0xff, 0x00, 0xd7, 0x35, 0x00, 0x65, 0xeb, + 0xff, 0x00, 0xf1, 0xf7, 0x07, 0xfd, 0x7b, 0xa5, + 0x65, 0xd6, 0xb6, 0xbc, 0x8c, 0x64, 0xb7, 0x9b, + 0x92, 0x8d, 0x10, 0x50, 0x7d, 0xc7, 0x51, 0x59, + 0x34, 0x00, 0x51, 0x45, 0x14, 0x00, 0x55, 0xed, + 0x2d, 0x19, 0x9a, 0xe3, 0x64, 0x2b, 0x34, 0x8b, + 0x09, 0x28, 0xa5, 0x37, 0xf3, 0xb9, 0x7b, 0x55, + 0x1a, 0x9e, 0xda, 0x75, 0x85, 0x2e, 0x01, 0xdd, + 0x99, 0x22, 0xd8, 0xb8, 0xf5, 0xc8, 0x3f, 0xd2, + 0x80, 0x2f, 0x4d, 0x6a, 0xd3, 0x47, 0x0f, 0x9f, + 0x12, 0x5a, 0xcd, 0x97, 0x2d, 0x88, 0xf6, 0xfc, + 0x80, 0x67, 0x25, 0x7f, 0x3f, 0xad, 0x55, 0x36, + 0x88, 0x65, 0x84, 0x24, 0xc4, 0xc5, 0x28, 0x38, + 0x7d, 0x87, 0x3c, 0x76, 0xdb, 0xeb, 0xfe, 0x35, + 0x2c, 0x17, 0xeb, 0x1f, 0x92, 0xed, 0xe6, 0x79, + 0xa8, 0xad, 0x1b, 0x3a, 0xf5, 0xd8, 0x47, 0x07, + 0x3e, 0xa2, 0x97, 0xed, 0xe9, 0xf6, 0x95, 0x66, + 0x9a, 0xe6, 0x55, 0xf2, 0xd9, 0x37, 0xb9, 0xf9, + 0x86, 0x46, 0x32, 0x06, 0x7f, 0xad, 0x00, 0x2b, + 0xd9, 0x7d, 0x9e, 0x1b, 0x82, 0xc0, 0xb0, 0x30, + 0x07, 0x43, 0x24, 0x7b, 0x59, 0x7f, 0x78, 0xa3, + 0xa7, 0x6e, 0xff, 0x00, 0x9d, 0x41, 0x0c, 0x30, + 0xb5, 0x8c, 0xd2, 0xbb, 0x30, 0x95, 0x24, 0x45, + 0x5f, 0x97, 0x23, 0x9c, 0xfb, 0xfb, 0x7e, 0x95, + 0x33, 0xde, 0xc0, 0x2d, 0x4c, 0x51, 0x89, 0x43, + 0x08, 0xfc, 0xb0, 0x48, 0x1f, 0xdf, 0x0d, 0x9e, + 0xbf, 0x5a, 0x88, 0x5e, 0x99, 0x60, 0x99, 0x6e, + 0x64, 0x95, 0xe4, 0x62, 0x8c, 0xad, 0xd7, 0xee, + 0xe7, 0x83, 0xff, 0x00, 0x7d, 0x50, 0x04, 0xef, + 0xa7, 0x2b, 0xdc, 0x32, 0xbc, 0xe1, 0x59, 0xee, + 0x1e, 0x15, 0x0b, 0x1f, 0x19, 0x18, 0xf7, 0xe0, + 0x73, 0xf8, 0x54, 0x22, 0xc1, 0x5f, 0xcb, 0x64, + 0x9f, 0x31, 0xb6, 0xfd, 0xee, 0x57, 0x1b, 0x76, + 0x8c, 0x9f, 0xaf, 0x5a, 0x95, 0xb5, 0x08, 0x4d, + 0xdc, 0x53, 0x05, 0x7d, 0xab, 0x76, 0xf3, 0x1e, + 0x06, 0x76, 0x92, 0xbf, 0xaf, 0x14, 0xcb, 0x4b, + 0xe5, 0xb7, 0x48, 0x97, 0xe7, 0x05, 0x5a, 0x4d, + 0xc5, 0x78, 0x20, 0x32, 0xa8, 0xe3, 0xdc, 0x62, + 0x80, 0x2b, 0xdc, 0x40, 0xb1, 0x08, 0xde, 0x39, + 0x3c, 0xc8, 0xe4, 0x19, 0x52, 0x57, 0x69, 0xe3, + 0xa8, 0x22, 0xac, 0x2c, 0x9b, 0x74, 0xd8, 0xe5, + 0x11, 0x42, 0x5e, 0x39, 0xb6, 0x82, 0x63, 0x07, + 0x23, 0x6f, 0x7f, 0x5a, 0x8e, 0xee, 0xe4, 0x4d, + 0x2c, 0x67, 0xcc, 0x9a, 0x75, 0x4e, 0xbe, 0x71, + 0xeb, 0xcf, 0xa7, 0x6f, 0xce, 0x8b, 0xa9, 0xed, + 0xcc, 0x02, 0x1b, 0x65, 0x90, 0x21, 0x90, 0xc8, + 0x77, 0xe3, 0x8f, 0x40, 0x28, 0x02, 0xcd, 0xcb, + 0x34, 0xef, 0x6b, 0x6e, 0x91, 0x40, 0x86, 0x64, + 0x42, 0x4a, 0x44, 0xaa, 0x72, 0x4f, 0xa8, 0x14, + 0x4d, 0x04, 0x37, 0x77, 0xb6, 0xa6, 0x14, 0x11, + 0xc3, 0x33, 0xf9, 0x64, 0x28, 0xc6, 0x30, 0x7f, + 0xf8, 0x92, 0x2a, 0x15, 0xbd, 0x44, 0x96, 0x39, + 0x54, 0x38, 0x78, 0xe0, 0xd8, 0xa7, 0xd1, 0xf0, + 0x46, 0x7f, 0x5a, 0x17, 0x52, 0x98, 0xc6, 0x0c, + 0xd2, 0x3c, 0x92, 0xc7, 0x22, 0xc9, 0x13, 0x31, + 0xce, 0x31, 0xd4, 0x7f, 0x2f, 0xca, 0x80, 0x1c, + 0x64, 0x6b, 0x88, 0xa6, 0xf2, 0xf4, 0xe5, 0x30, + 0x80, 0x76, 0xb4, 0x71, 0xf2, 0x9e, 0x84, 0xb7, + 0x7f, 0xc6, 0xb3, 0xeb, 0x40, 0x5c, 0xd9, 0xc4, + 0xcf, 0x34, 0x0b, 0x38, 0x77, 0x56, 0x02, 0x33, + 0x8d, 0x8b, 0x91, 0x8e, 0xbd, 0xfa, 0xd6, 0x7d, + 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, + 0x00, 0x74, 0x56, 0x1f, 0xf2, 0x06, 0x83, 0xfd, + 0xf7, 0xa7, 0xd2, 0x5b, 0xc6, 0xd0, 0x69, 0x76, + 0xd1, 0x38, 0xc3, 0x9d, 0xce, 0x47, 0xa0, 0x3d, + 0x29, 0x68, 0x02, 0x86, 0xbd, 0xf7, 0xad, 0x3f, + 0xeb, 0x8f, 0xfe, 0xcc, 0x6b, 0x26, 0xb6, 0x35, + 0xd4, 0x25, 0x2d, 0x25, 0x03, 0x29, 0xb0, 0xa6, + 0x7d, 0xc1, 0xff, 0x00, 0xeb, 0xd6, 0x3d, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x5f, 0xd3, 0x9d, 0x0c, + 0x91, 0xc3, 0xf6, 0x78, 0xdf, 0x73, 0xe6, 0x57, + 0x90, 0x67, 0x09, 0xfd, 0x31, 0xcf, 0x34, 0xc4, + 0xb3, 0x49, 0x62, 0x79, 0xd2, 0x50, 0x21, 0x4c, + 0xef, 0xc8, 0xe5, 0x7f, 0xbb, 0xf5, 0xcf, 0xf8, + 0xd2, 0xdb, 0xcd, 0x6a, 0xb6, 0x6d, 0x0c, 0x8f, + 0x32, 0x3b, 0xb7, 0xce, 0xd1, 0xa0, 0x39, 0x5e, + 0xc3, 0xa8, 0xa8, 0xd6, 0xf2, 0x48, 0x97, 0xca, + 0x8f, 0x1e, 0x50, 0xdc, 0x0a, 0x91, 0xf7, 0xf3, + 0xfd, 0xef, 0xd3, 0xf2, 0xa0, 0x05, 0xb0, 0x55, + 0x92, 0x77, 0x89, 0x94, 0x13, 0x24, 0x6c, 0xab, + 0x91, 0xd1, 0xb1, 0x91, 0xfa, 0x8a, 0xb6, 0x2c, + 0xe3, 0x96, 0xd6, 0xc5, 0x15, 0x40, 0x90, 0xc8, + 0xa2, 0x42, 0x3a, 0xe1, 0xc9, 0xc7, 0xe8, 0xb5, + 0x9f, 0x6d, 0x2f, 0x91, 0x73, 0x14, 0xc3, 0xf8, + 0x1c, 0x37, 0xeb, 0x57, 0x93, 0x51, 0x89, 0x2e, + 0x6e, 0x5c, 0x23, 0xf9, 0x6d, 0x1e, 0xd8, 0x87, + 0x19, 0x52, 0x06, 0x14, 0x9a, 0x00, 0x2e, 0x2c, + 0x92, 0x55, 0x96, 0xee, 0x36, 0x61, 0x1e, 0x77, + 0x90, 0xb0, 0xe1, 0x02, 0x93, 0xd0, 0x1e, 0xe4, + 0x67, 0xa5, 0x36, 0xe2, 0xca, 0xdd, 0x2e, 0xae, + 0x7f, 0x7c, 0xd1, 0xc1, 0x1c, 0x9e, 0x58, 0x25, + 0x32, 0x77, 0x73, 0xc7, 0x5e, 0x9c, 0x75, 0xa5, + 0x6b, 0xdb, 0x67, 0x59, 0x09, 0x13, 0x6e, 0x92, + 0x11, 0x1e, 0x30, 0x30, 0x98, 0xc7, 0x4e, 0x7d, + 0xa8, 0x9a, 0xee, 0xd2, 0x79, 0x27, 0x0e, 0x26, + 0x11, 0xcb, 0x20, 0x94, 0x10, 0x06, 0x43, 0x73, + 0x91, 0xd7, 0xa7, 0x3d, 0x68, 0x00, 0x4b, 0x48, + 0x64, 0xb6, 0x85, 0x1a, 0x65, 0x46, 0x37, 0x0f, + 0x18, 0x75, 0x5d, 0xdb, 0xbe, 0xee, 0x3f, 0x0f, + 0xf1, 0xa5, 0xb4, 0xb2, 0x8d, 0x26, 0x8c, 0x4d, + 0x20, 0x32, 0x32, 0x3b, 0x08, 0x8a, 0x64, 0x60, + 0x06, 0x1d, 0x7d, 0x78, 0xa8, 0x45, 0xd4, 0x43, + 0xc8, 0x0b, 0x1b, 0x2a, 0xc7, 0x70, 0xd2, 0x6d, + 0xeb, 0x85, 0x3b, 0x70, 0x3f, 0x4a, 0x99, 0x6f, + 0xad, 0x4c, 0xa9, 0x33, 0xac, 0xbe, 0x62, 0x2b, + 0xa0, 0x00, 0x0c, 0x10, 0x77, 0x60, 0xf5, 0xf7, + 0xa0, 0x08, 0x4d, 0x80, 0xda, 0x51, 0x66, 0xcd, + 0xc2, 0xc6, 0x24, 0x31, 0xed, 0xe3, 0x07, 0x1d, + 0xfd, 0x70, 0x68, 0xb8, 0xb1, 0x8e, 0x28, 0xa6, + 0x74, 0xb8, 0xde, 0xd0, 0xb0, 0x47, 0x5d, 0x98, + 0xe7, 0x9e, 0x9c, 0xf4, 0xe2, 0xa4, 0xfb, 0x74, + 0x20, 0xb4, 0xea, 0xb2, 0x7d, 0xa1, 0xa3, 0x08, + 0x41, 0x03, 0x68, 0xe0, 0x02, 0x73, 0xf4, 0x1d, + 0x2a, 0x7b, 0xe4, 0x48, 0xad, 0x6e, 0x9f, 0x64, + 0x88, 0xd3, 0xca, 0xac, 0x37, 0xe3, 0x07, 0xa9, + 0x3b, 0x71, 0xd4, 0x7b, 0xfd, 0x28, 0x02, 0xbe, + 0x9f, 0x36, 0x23, 0x99, 0x0c, 0x30, 0x38, 0x48, + 0x99, 0xc1, 0x78, 0x95, 0x8e, 0x7e, 0xa4, 0x52, + 0xac, 0x02, 0xea, 0xd0, 0xdc, 0xc8, 0xe9, 0x12, + 0xa9, 0x66, 0x21, 0x22, 0x03, 0xa6, 0xc1, 0xdb, + 0x1f, 0xde, 0xff, 0x00, 0x39, 0xaa, 0xb6, 0xd3, + 0x2c, 0x3e, 0x76, 0xe0, 0x4e, 0xf8, 0x99, 0x06, + 0x3d, 0x4d, 0x4d, 0x1d, 0xdc, 0x69, 0xa6, 0xbd, + 0xb1, 0x56, 0xde, 0xdb, 0xb0, 0x7b, 0x72, 0x50, + 0xff, 0x00, 0xec, 0xa6, 0x80, 0x16, 0x5b, 0x05, + 0x45, 0x93, 0xcb, 0x9f, 0xcc, 0x74, 0x55, 0x70, + 0xbb, 0x31, 0x95, 0x6c, 0x63, 0xbf, 0x5f, 0x98, + 0x71, 0x4d, 0x9e, 0xc9, 0x22, 0x59, 0x36, 0x4f, + 0xe6, 0x3c, 0x4c, 0x16, 0x41, 0xb7, 0x18, 0x3e, + 0xc7, 0xbf, 0x34, 0xe3, 0x7a, 0x9b, 0xe5, 0x65, + 0x0d, 0x96, 0x82, 0x38, 0xd7, 0x23, 0xba, 0xec, + 0xff, 0x00, 0xe2, 0x4d, 0x3e, 0xf6, 0xfc, 0x5c, + 0xab, 0x62, 0x6b, 0x96, 0xde, 0xdb, 0x8c, 0x6e, + 0xdf, 0x22, 0xfb, 0x0f, 0x5f, 0xd2, 0x80, 0x2b, + 0x5e, 0xdb, 0xa5, 0xad, 0xcb, 0xc2, 0xb2, 0xf9, + 0x85, 0x09, 0x56, 0x3b, 0x71, 0xce, 0x6a, 0xbd, + 0x4d, 0x79, 0x2a, 0xcf, 0x79, 0x3c, 0xca, 0x08, + 0x59, 0x24, 0x66, 0x00, 0xf5, 0xe4, 0xd4, 0x34, + 0x00, 0x51, 0x45, 0x14, 0x01, 0xbf, 0xa5, 0x7f, + 0xc8, 0x18, 0xff, 0x00, 0xd7, 0xc1, 0xff, 0x00, + 0xd0, 0x45, 0x4d, 0x51, 0xe9, 0xe8, 0xd0, 0xe9, + 0x11, 0x87, 0x18, 0x32, 0xc8, 0x64, 0x51, 0xed, + 0x80, 0x3f, 0xa5, 0x49, 0x40, 0x16, 0x9b, 0xfd, + 0x54, 0x3f, 0xef, 0x27, 0xf3, 0x14, 0x50, 0xdf, + 0xea, 0xa1, 0xff, 0x00, 0x79, 0x3f, 0x98, 0xa2, + 0x80, 0x1d, 0x0f, 0x47, 0xff, 0x00, 0xae, 0x8d, + 0xfc, 0xcd, 0x4b, 0x51, 0xc3, 0xd1, 0xff, 0x00, + 0xeb, 0xa3, 0x7f, 0x33, 0x52, 0x50, 0x01, 0x45, + 0x15, 0x03, 0xdc, 0x28, 0x38, 0x51, 0xba, 0x80, + 0x27, 0xa2, 0xaa, 0xfd, 0xa5, 0xbf, 0xba, 0x28, + 0xfb, 0x4b, 0xff, 0x00, 0x74, 0x50, 0x05, 0xaa, + 0x2a, 0xaf, 0xda, 0x5f, 0xfb, 0xa2, 0x8f, 0xb4, + 0xbf, 0xf7, 0x45, 0x00, 0x5a, 0xa2, 0xaa, 0xfd, + 0xa5, 0xff, 0x00, 0xba, 0x28, 0xfb, 0x4b, 0xff, + 0x00, 0x74, 0x50, 0x05, 0xaa, 0x2a, 0xaf, 0xda, + 0x5f, 0xfb, 0xa2, 0x8f, 0xb4, 0xbf, 0xf7, 0x45, + 0x00, 0x5a, 0xa2, 0xaa, 0xfd, 0xa5, 0xff, 0x00, + 0xba, 0x28, 0xfb, 0x4b, 0xff, 0x00, 0x74, 0x50, + 0x05, 0xaa, 0x2a, 0xaf, 0xda, 0x5f, 0xfb, 0xa2, + 0x8f, 0xb4, 0xbf, 0xf7, 0x45, 0x00, 0x5a, 0xa2, + 0xaa, 0xfd, 0xa5, 0xff, 0x00, 0xba, 0x28, 0xfb, + 0x4b, 0xff, 0x00, 0x74, 0x50, 0x05, 0xaa, 0x2a, + 0xaf, 0xda, 0x5f, 0xfb, 0xa2, 0x8f, 0xb4, 0xbf, + 0xf7, 0x45, 0x00, 0x5a, 0xa2, 0xaa, 0xfd, 0xa5, + 0xff, 0x00, 0xba, 0x28, 0xfb, 0x4b, 0xff, 0x00, + 0x74, 0x50, 0x05, 0xaa, 0x2a, 0xaf, 0xda, 0x5f, + 0xfb, 0xa2, 0x8f, 0xb4, 0xbf, 0xf7, 0x45, 0x00, + 0x5a, 0xa2, 0xaa, 0xfd, 0xa5, 0xff, 0x00, 0xba, + 0x28, 0xfb, 0x4b, 0xff, 0x00, 0x74, 0x50, 0x05, + 0xaa, 0xa3, 0x3f, 0xfa, 0xe6, 0xa9, 0x3e, 0xd2, + 0xff, 0x00, 0xdd, 0x15, 0x0b, 0xb6, 0xf6, 0x2c, + 0x7b, 0xd0, 0x02, 0x87, 0x53, 0x1b, 0x45, 0x2c, + 0x6b, 0x2c, 0x4d, 0xd5, 0x1b, 0xfa, 0x7a, 0x54, + 0x3f, 0x62, 0xd3, 0x49, 0xcf, 0xd9, 0xe4, 0x1e, + 0xc2, 0x5a, 0x92, 0x8a, 0x00, 0x8f, 0xec, 0x3a, + 0x6f, 0xfc, 0xfb, 0xcb, 0xff, 0x00, 0x7f, 0x68, + 0xfb, 0x0e, 0x9b, 0xff, 0x00, 0x3e, 0xf2, 0xff, + 0x00, 0xdf, 0xda, 0x92, 0x8a, 0x00, 0x8f, 0xec, + 0x3a, 0x6f, 0xfc, 0xfb, 0xcb, 0xff, 0x00, 0x7f, + 0x68, 0xfb, 0x0e, 0x9b, 0xff, 0x00, 0x3e, 0xf2, + 0xff, 0x00, 0xdf, 0xda, 0x92, 0x8a, 0x00, 0x8f, + 0xec, 0x3a, 0x6f, 0xfc, 0xfb, 0xcb, 0xff, 0x00, + 0x7f, 0x68, 0xfb, 0x0e, 0x9b, 0xff, 0x00, 0x3e, + 0xf2, 0xff, 0x00, 0xdf, 0xda, 0x92, 0x8a, 0x00, + 0x8f, 0xec, 0x3a, 0x6f, 0xfc, 0xfb, 0xcb, 0xff, + 0x00, 0x7f, 0x68, 0xfb, 0x0e, 0x9b, 0xff, 0x00, + 0x3e, 0xf2, 0xff, 0x00, 0xdf, 0xda, 0x92, 0x8a, + 0x00, 0x8f, 0xec, 0x3a, 0x6f, 0xfc, 0xfb, 0xcb, + 0xff, 0x00, 0x7f, 0x68, 0xfb, 0x0e, 0x9b, 0xff, + 0x00, 0x3e, 0xf2, 0xff, 0x00, 0xdf, 0xda, 0x92, + 0x8a, 0x00, 0x8f, 0xec, 0x3a, 0x6f, 0xfc, 0xfb, + 0xcb, 0xff, 0x00, 0x7f, 0x68, 0xfb, 0x0e, 0x9b, + 0xff, 0x00, 0x3e, 0xf2, 0xff, 0x00, 0xdf, 0xda, + 0x92, 0x8a, 0x00, 0x8f, 0xec, 0x3a, 0x6f, 0xfc, + 0xfb, 0xcb, 0xff, 0x00, 0x7f, 0x68, 0xfb, 0x0e, + 0x9b, 0xff, 0x00, 0x3e, 0xf2, 0xff, 0x00, 0xdf, + 0xda, 0x92, 0x8a, 0x00, 0x8f, 0xec, 0x3a, 0x6f, + 0xfc, 0xfb, 0xcb, 0xff, 0x00, 0x7f, 0x68, 0xfb, + 0x0e, 0x9b, 0xff, 0x00, 0x3e, 0xf2, 0xff, 0x00, + 0xdf, 0xda, 0x92, 0x8a, 0x00, 0x8f, 0xec, 0x3a, + 0x6f, 0xfc, 0xfb, 0xcb, 0xff, 0x00, 0x7f, 0x68, + 0xfb, 0x0e, 0x9b, 0xff, 0x00, 0x3e, 0xf2, 0xff, + 0x00, 0xdf, 0xda, 0x92, 0x8a, 0x00, 0x8f, 0xec, + 0x3a, 0x6f, 0xfc, 0xfb, 0xcb, 0xff, 0x00, 0x7f, + 0x69, 0xf1, 0xdb, 0xd8, 0x42, 0xc1, 0xe2, 0xb5, + 0xcb, 0x8e, 0x86, 0x47, 0x2c, 0x07, 0xe1, 0x4b, + 0x45, 0x00, 0x3a, 0x47, 0x69, 0x1c, 0xbb, 0x9c, + 0xb1, 0xef, 0x4d, 0xa2, 0x8a, 0x00, 0x7a, 0xb2, + 0x18, 0x9a, 0x19, 0xa3, 0x12, 0xc2, 0xdd, 0x54, + 0xff, 0x00, 0x31, 0xe8, 0x6a, 0xb1, 0xd3, 0x34, + 0xd2, 0x72, 0x1a, 0xe9, 0x7d, 0xb2, 0xa6, 0xa6, + 0xa2, 0x80, 0x20, 0xfe, 0xcb, 0xd3, 0x7f, 0xe7, + 0xa5, 0xd7, 0xfe, 0x3b, 0x47, 0xf6, 0x5e, 0x9b, + 0xff, 0x00, 0x3d, 0x2e, 0xbf, 0xf1, 0xda, 0x9e, + 0x8a, 0x00, 0x83, 0xfb, 0x2f, 0x4d, 0xff, 0x00, + 0x9e, 0x97, 0x5f, 0xf8, 0xed, 0x1f, 0xd9, 0x7a, + 0x6f, 0xfc, 0xf4, 0xba, 0xff, 0x00, 0xc7, 0x6a, + 0x7a, 0x28, 0x02, 0x0f, 0xec, 0xbd, 0x37, 0xfe, + 0x7a, 0x5d, 0x7f, 0xe3, 0xb4, 0x7f, 0x65, 0xe9, + 0xbf, 0xf3, 0xd2, 0xeb, 0xff, 0x00, 0x1d, 0xa9, + 0xe8, 0xa0, 0x08, 0x3f, 0xb2, 0xf4, 0xdf, 0xf9, + 0xe9, 0x75, 0xff, 0x00, 0x8e, 0xd1, 0xfd, 0x97, + 0xa6, 0xff, 0x00, 0xcf, 0x4b, 0xaf, 0xfc, 0x76, + 0xa7, 0xa2, 0x80, 0x20, 0xfe, 0xcb, 0xd3, 0x7f, + 0xe7, 0xa5, 0xd7, 0xfe, 0x3b, 0x47, 0xf6, 0x5e, + 0x9b, 0xff, 0x00, 0x3d, 0x2e, 0xbf, 0xf1, 0xda, + 0x9e, 0x8a, 0x00, 0x83, 0xfb, 0x2f, 0x4d, 0xff, + 0x00, 0x9e, 0x97, 0x5f, 0xf8, 0xed, 0x1f, 0xd9, + 0x7a, 0x6f, 0xfc, 0xf4, 0xba, 0xff, 0x00, 0xc7, + 0x6a, 0x7a, 0x28, 0x02, 0x0f, 0xec, 0xbd, 0x37, + 0xfe, 0x7a, 0x5d, 0x7f, 0xe3, 0xb4, 0x7f, 0x65, + 0xe9, 0xbf, 0xf3, 0xd2, 0xeb, 0xff, 0x00, 0x1d, + 0xa9, 0xe8, 0xa0, 0x08, 0x3f, 0xb2, 0xf4, 0xdf, + 0xf9, 0xe9, 0x75, 0xff, 0x00, 0x8e, 0xd1, 0xfd, + 0x97, 0xa6, 0xff, 0x00, 0xcf, 0x4b, 0xaf, 0xfc, + 0x76, 0xa7, 0xa2, 0x80, 0x20, 0xfe, 0xcb, 0xd3, + 0x7f, 0xe7, 0xa5, 0xd7, 0xfe, 0x3b, 0x47, 0xf6, + 0x5e, 0x9b, 0xff, 0x00, 0x3d, 0x2e, 0xbf, 0xf1, + 0xda, 0x9e, 0x8a, 0x00, 0x83, 0xfb, 0x2f, 0x4d, + 0xff, 0x00, 0x9e, 0x97, 0x5f, 0xf8, 0xed, 0x3a, + 0x3d, 0x3f, 0x4d, 0x89, 0x83, 0x04, 0x9e, 0x52, + 0x3f, 0x86, 0x46, 0x00, 0x7e, 0x95, 0x2d, 0x14, + 0x00, 0xe9, 0x64, 0x69, 0x5f, 0x73, 0x60, 0x76, + 0x00, 0x74, 0x03, 0xd2, 0x9b, 0x45, 0x14, 0x01, + 0x69, 0xbf, 0xd5, 0x43, 0xfe, 0xf2, 0x7f, 0x31, + 0x45, 0x2b, 0x7f, 0xaa, 0x87, 0xfd, 0xe4, 0xfe, + 0x62, 0x8a, 0x00, 0x74, 0x3d, 0x1f, 0xfe, 0xba, + 0x37, 0xf3, 0x35, 0x25, 0x47, 0x07, 0x47, 0xff, + 0x00, 0xae, 0x8d, 0xfc, 0xcd, 0x4b, 0x40, 0x15, + 0xae, 0x9c, 0x8c, 0x20, 0xfc, 0x69, 0x9b, 0x61, + 0x85, 0x55, 0xa7, 0xc9, 0x66, 0x19, 0x54, 0x07, + 0x1c, 0x7a, 0x9a, 0x6d, 0xc7, 0xfa, 0xe6, 0xaa, + 0x3a, 0xbc, 0xfb, 0x35, 0x29, 0x93, 0x3c, 0x2e, + 0x00, 0xfc, 0x85, 0x44, 0xe4, 0xd2, 0xd0, 0x4c, + 0xbf, 0xf6, 0x9b, 0x5f, 0xf9, 0xf5, 0x1f, 0xf7, + 0xf0, 0xd1, 0xf6, 0x9b, 0x5f, 0xf9, 0xf5, 0x1f, + 0xf7, 0xf0, 0xd6, 0x27, 0xda, 0x3d, 0xea, 0xcd, + 0x94, 0x6f, 0x78, 0xee, 0x03, 0xaa, 0x22, 0x0d, + 0xce, 0xed, 0xd1, 0x45, 0x60, 0xa5, 0x37, 0xd4, + 0x46, 0x97, 0xda, 0x6d, 0x7f, 0xe7, 0xd4, 0x7f, + 0xdf, 0xc3, 0x47, 0xda, 0x6d, 0x7f, 0xe7, 0xd4, + 0x7f, 0xdf, 0xc3, 0x54, 0xae, 0x2d, 0xc4, 0x76, + 0xc6, 0xe2, 0xde, 0xe5, 0x2e, 0x23, 0x53, 0x87, + 0x2a, 0x30, 0x56, 0xaa, 0xe6, 0x6f, 0x2b, 0xcd, + 0xf2, 0xa4, 0xf2, 0xff, 0x00, 0xbf, 0xb4, 0xe3, + 0xf3, 0xa6, 0xe5, 0x34, 0x1a, 0x9a, 0xff, 0x00, + 0x69, 0xb5, 0xff, 0x00, 0x9f, 0x51, 0xff, 0x00, + 0x7f, 0x0d, 0x1f, 0x69, 0xb5, 0xff, 0x00, 0x9f, + 0x51, 0xff, 0x00, 0x7f, 0x0d, 0x64, 0x81, 0x70, + 0xd8, 0xc4, 0x32, 0x9c, 0xae, 0xe1, 0x84, 0x3d, + 0x3d, 0x7e, 0x95, 0x24, 0x70, 0xcf, 0x25, 0x9c, + 0x97, 0x4a, 0x8c, 0x51, 0x0f, 0x65, 0x3c, 0xfa, + 0x9f, 0xc2, 0x8e, 0x69, 0x81, 0xa5, 0xf6, 0x9b, + 0x5f, 0xf9, 0xf5, 0x1f, 0xf7, 0xf0, 0xd1, 0xf6, + 0x9b, 0x5f, 0xf9, 0xf5, 0x1f, 0xf7, 0xf0, 0xd6, + 0x43, 0x99, 0xa3, 0x04, 0xc9, 0x14, 0x88, 0x01, + 0xc1, 0x2c, 0xa4, 0x60, 0xd0, 0xe6, 0x64, 0x8c, + 0x48, 0xf1, 0x48, 0xa8, 0x7a, 0x31, 0x52, 0x01, + 0xa5, 0xcd, 0x30, 0x35, 0xfe, 0xd3, 0x6b, 0xff, + 0x00, 0x3e, 0xa3, 0xfe, 0xfe, 0x1a, 0x3e, 0xd3, + 0x6b, 0xff, 0x00, 0x3e, 0xa3, 0xfe, 0xfe, 0x1a, + 0xcf, 0xd4, 0x95, 0x2c, 0xee, 0xcc, 0x28, 0xcc, + 0x46, 0xd0, 0x7e, 0x6e, 0xb5, 0x64, 0x59, 0xc0, + 0x22, 0x81, 0xa5, 0xbf, 0x58, 0xda, 0x64, 0x0c, + 0xaa, 0x53, 0xd7, 0xdf, 0x34, 0xef, 0x3e, 0xe3, + 0xd4, 0x9f, 0xed, 0x36, 0xbf, 0xf3, 0xea, 0x3f, + 0xef, 0xe1, 0xa3, 0xed, 0x36, 0xbf, 0xf3, 0xea, + 0x3f, 0xef, 0xe1, 0xac, 0xc9, 0xe2, 0x9e, 0x1b, + 0xb6, 0xb5, 0xda, 0x5e, 0x45, 0xec, 0x83, 0x39, + 0xa8, 0x83, 0x4c, 0x5d, 0x90, 0x46, 0xfb, 0xd0, + 0x65, 0x97, 0x69, 0xc8, 0x1e, 0xf4, 0xb9, 0xa6, + 0x23, 0x63, 0xed, 0x36, 0xbf, 0xf3, 0xea, 0x3f, + 0xef, 0xe1, 0xa3, 0xed, 0x36, 0xbf, 0xf3, 0xea, + 0x3f, 0xef, 0xe1, 0xac, 0xdc, 0x30, 0xb7, 0x25, + 0xa1, 0xb8, 0x13, 0x6f, 0x0a, 0x3e, 0x4f, 0x97, + 0x9e, 0xdf, 0x5a, 0x89, 0xbc, 0xf4, 0x52, 0xef, + 0x0c, 0x8a, 0xa0, 0xe0, 0x92, 0xa4, 0x00, 0x69, + 0xf3, 0x4f, 0xb8, 0x1a, 0xff, 0x00, 0x69, 0xb5, + 0xff, 0x00, 0x9f, 0x51, 0xff, 0x00, 0x7f, 0x0d, + 0x1f, 0x69, 0xb5, 0xff, 0x00, 0x9f, 0x51, 0xff, + 0x00, 0x7f, 0x0d, 0x52, 0xb9, 0x81, 0x92, 0x3b, + 0x76, 0x85, 0x64, 0x90, 0xc9, 0x10, 0x91, 0x80, + 0x19, 0xc7, 0xe5, 0x55, 0x22, 0x79, 0x66, 0x62, + 0x22, 0x47, 0x90, 0x8e, 0xca, 0x33, 0x43, 0x94, + 0xd0, 0x6a, 0x6c, 0x7d, 0xa6, 0xd7, 0xfe, 0x7d, + 0x47, 0xfd, 0xfc, 0x34, 0x7d, 0xa6, 0xd7, 0xfe, + 0x7d, 0x47, 0xfd, 0xfc, 0x35, 0x8e, 0xad, 0x2b, + 0xee, 0xdb, 0x1b, 0xb6, 0xd3, 0x86, 0xc2, 0x93, + 0x83, 0xef, 0x4e, 0x51, 0x70, 0xdb, 0xc2, 0xc3, + 0x21, 0xd9, 0xc3, 0x61, 0x0f, 0xcb, 0xf5, 0xa5, + 0xcd, 0x30, 0x35, 0xbe, 0xd3, 0x6b, 0xff, 0x00, + 0x3e, 0xa3, 0xfe, 0xfe, 0x1a, 0x3e, 0xd3, 0x6b, + 0xff, 0x00, 0x3e, 0xa3, 0xfe, 0xfe, 0x1a, 0xcf, + 0x55, 0x46, 0xd2, 0xde, 0xeb, 0x73, 0x6f, 0x59, + 0x76, 0x63, 0xb7, 0x4a, 0x82, 0x43, 0x34, 0x4a, + 0x1a, 0x48, 0x9d, 0x14, 0xf4, 0x2c, 0xa4, 0x03, + 0x4f, 0x9a, 0x7d, 0xc0, 0xd7, 0xfb, 0x4d, 0xaf, + 0xfc, 0xfa, 0x8f, 0xfb, 0xf8, 0x69, 0xc9, 0xf6, + 0x7b, 0x9c, 0xac, 0x40, 0xc5, 0x2f, 0x65, 0x27, + 0x21, 0xab, 0x0b, 0xed, 0x1e, 0xf4, 0xe8, 0x6e, + 0x8a, 0xcc, 0x8c, 0x0f, 0x21, 0x81, 0xa1, 0x4e, + 0x57, 0x0b, 0x9a, 0x84, 0x10, 0x79, 0xa7, 0x44, + 0x86, 0x59, 0x15, 0x17, 0xa9, 0xa9, 0x2e, 0xc6, + 0x2e, 0xa5, 0x03, 0xfb, 0xd4, 0x90, 0x1c, 0x79, + 0xa7, 0xd2, 0x27, 0x3f, 0xa5, 0x74, 0xb2, 0x81, + 0xae, 0xad, 0xe1, 0x25, 0x62, 0x89, 0x64, 0xc7, + 0x57, 0x7e, 0x73, 0xf8, 0x52, 0x7d, 0xbc, 0x7f, + 0xcf, 0x08, 0x3f, 0xef, 0x8a, 0xc2, 0xfb, 0x47, + 0xbd, 0x2a, 0xcc, 0xce, 0xca, 0xab, 0xcb, 0x31, + 0xc0, 0x03, 0xbd, 0x72, 0xb9, 0x49, 0xf5, 0x24, + 0xdc, 0xfb, 0x78, 0xff, 0x00, 0x9e, 0x10, 0x7f, + 0xdf, 0x14, 0x7d, 0xbc, 0x7f, 0xcf, 0x08, 0x3f, + 0xef, 0x8a, 0x83, 0xfb, 0x39, 0x43, 0x88, 0x1a, + 0xfa, 0x25, 0xb9, 0x23, 0xfd, 0x56, 0x3b, 0xfa, + 0x66, 0xb3, 0x87, 0x9e, 0xd3, 0x3c, 0x2b, 0x13, + 0xb4, 0x88, 0x48, 0x65, 0x51, 0x92, 0x28, 0x7c, + 0xe8, 0x0d, 0x8f, 0xb7, 0x8f, 0xf9, 0xe1, 0x07, + 0xfd, 0xf1, 0x47, 0xdb, 0xc7, 0xfc, 0xf0, 0x83, + 0xfe, 0xf8, 0xac, 0x60, 0x66, 0x3b, 0xf1, 0x14, + 0x87, 0x67, 0x0d, 0x85, 0x3f, 0x2f, 0xd6, 0x9d, + 0x8b, 0x8d, 0xcc, 0xbe, 0x44, 0xbb, 0x94, 0x65, + 0x86, 0xc3, 0x90, 0x3d, 0xe8, 0xbc, 0x80, 0xd7, + 0xfb, 0x78, 0xff, 0x00, 0x9e, 0x10, 0x7f, 0xdf, + 0x14, 0x7d, 0xbc, 0x7f, 0xcf, 0x08, 0x3f, 0xef, + 0x8a, 0xc6, 0x43, 0x34, 0x8a, 0x19, 0x22, 0x77, + 0x52, 0x76, 0xe5, 0x54, 0x9e, 0x7d, 0x29, 0x49, + 0x9c, 0x07, 0x63, 0x14, 0x98, 0x4e, 0x1c, 0xed, + 0x3f, 0x2f, 0xd6, 0x8b, 0xcb, 0xb8, 0x1b, 0x1f, + 0x6f, 0x1f, 0xf3, 0xc2, 0x0f, 0xfb, 0xe2, 0x8f, + 0xb7, 0x8f, 0xf9, 0xe1, 0x07, 0xfd, 0xf1, 0x58, + 0xea, 0x67, 0x68, 0x8c, 0xab, 0x14, 0x86, 0x31, + 0xd5, 0xc2, 0x9c, 0x7e, 0x74, 0xfb, 0x11, 0xf6, + 0xcb, 0xb8, 0xed, 0xf7, 0xec, 0xdf, 0x9e, 0x71, + 0x9c, 0x71, 0x9a, 0x2f, 0x2e, 0xe0, 0x6a, 0xfd, + 0xbc, 0x7f, 0xcf, 0x08, 0x3f, 0xef, 0x8a, 0x3e, + 0xde, 0x3f, 0xe7, 0x84, 0x1f, 0xf7, 0xc5, 0x56, + 0x7b, 0x38, 0xda, 0x39, 0x5a, 0xda, 0xf5, 0x26, + 0x78, 0x81, 0x66, 0x4d, 0xbb, 0x4e, 0x07, 0x5a, + 0xcf, 0x53, 0x33, 0x44, 0x65, 0x58, 0x9c, 0xc6, + 0x3a, 0xb0, 0x53, 0x81, 0xf8, 0xd0, 0xdc, 0xd7, + 0x50, 0x36, 0x7e, 0xde, 0x3f, 0xe7, 0x84, 0x1f, + 0xf7, 0xc5, 0x1f, 0x6f, 0x1f, 0xf3, 0xc2, 0x0f, + 0xfb, 0xe2, 0xb1, 0xc1, 0x9d, 0x90, 0x3a, 0xc5, + 0x21, 0x42, 0x09, 0x0c, 0x14, 0xe3, 0x03, 0xad, + 0x4b, 0x70, 0xac, 0x25, 0x61, 0x04, 0x37, 0x1b, + 0x14, 0x0c, 0xf9, 0x89, 0xc8, 0xcf, 0xad, 0x17, + 0x97, 0x70, 0x34, 0xfe, 0xde, 0x3f, 0xe7, 0x84, + 0x1f, 0xf7, 0xc5, 0x1f, 0x6f, 0x1f, 0xf3, 0xc2, + 0x0f, 0xfb, 0xe2, 0xb3, 0xac, 0xa2, 0x69, 0x75, + 0x08, 0xad, 0x67, 0x59, 0x23, 0xdf, 0x9c, 0x82, + 0x30, 0x7a, 0x1f, 0x5a, 0x82, 0x63, 0x24, 0x59, + 0x62, 0x8e, 0x23, 0xdc, 0x42, 0xb1, 0x1c, 0x1f, + 0xc6, 0x8b, 0xcb, 0xb8, 0x1b, 0x1f, 0x6f, 0x1f, + 0xf3, 0xc2, 0x0f, 0xfb, 0xe2, 0x8f, 0xb7, 0x8f, + 0xf9, 0xe1, 0x07, 0xfd, 0xf1, 0x58, 0xc5, 0xa6, + 0x11, 0x09, 0x4c, 0x6e, 0x23, 0x3f, 0xc7, 0xb4, + 0xe3, 0xf3, 0xa5, 0x26, 0x70, 0x9b, 0xcc, 0x52, + 0x04, 0xc0, 0x6d, 0xc5, 0x4e, 0x30, 0x7a, 0x1a, + 0x2f, 0x2e, 0xe0, 0x6c, 0x7d, 0xbc, 0x7f, 0xcf, + 0x08, 0x3f, 0xef, 0x8a, 0x3e, 0xde, 0x3f, 0xe7, + 0x84, 0x1f, 0xf7, 0xc5, 0x63, 0x48, 0x66, 0x89, + 0x55, 0xa4, 0x8a, 0x44, 0x56, 0xe8, 0x59, 0x48, + 0x06, 0xad, 0x5f, 0xc2, 0x60, 0xbe, 0x36, 0xf6, + 0xeb, 0x24, 0x87, 0x68, 0x38, 0xc6, 0x4f, 0xe9, + 0x45, 0xe5, 0xdc, 0x0b, 0xff, 0x00, 0x6f, 0x1f, + 0xf3, 0xc2, 0x0f, 0xfb, 0xe2, 0x8f, 0xb7, 0x46, + 0x78, 0x6b, 0x78, 0x48, 0xf6, 0x5c, 0x1a, 0xc4, + 0x79, 0x5e, 0x36, 0x28, 0xe0, 0xab, 0x0e, 0xa0, + 0x8c, 0x11, 0x4d, 0xfb, 0x47, 0xbd, 0x2e, 0x69, + 0x77, 0x03, 0x7a, 0x44, 0x43, 0x1a, 0xcd, 0x09, + 0x26, 0x36, 0x38, 0x20, 0xff, 0x00, 0x09, 0xf4, + 0xa8, 0xaa, 0x3d, 0x32, 0x4f, 0x32, 0xc2, 0xe7, + 0xbe, 0x1d, 0x71, 0xfa, 0xd4, 0xd1, 0x7f, 0xae, + 0x4c, 0xff, 0x00, 0x78, 0x57, 0x4c, 0x5d, 0xd5, + 0xca, 0x25, 0x73, 0x05, 0xae, 0x16, 0x45, 0xf3, + 0x25, 0xea, 0x41, 0x3c, 0x2d, 0x33, 0xed, 0xb1, + 0x7f, 0xcf, 0xb4, 0x5f, 0xad, 0x65, 0xdf, 0xdc, + 0x11, 0x7f, 0x72, 0x09, 0xe9, 0x2b, 0x0f, 0xd6, + 0xab, 0xfd, 0xa3, 0xde, 0xb0, 0x94, 0xe5, 0x72, + 0x4d, 0xcf, 0xb6, 0xc5, 0xff, 0x00, 0x3e, 0xd1, + 0x7e, 0xb4, 0x7d, 0xb6, 0x2f, 0xf9, 0xf6, 0x8b, + 0xf5, 0xac, 0x3f, 0xb4, 0x7b, 0xd1, 0xf6, 0x8f, + 0x7a, 0x9e, 0x69, 0x77, 0x03, 0x73, 0xed, 0xb1, + 0x7f, 0xcf, 0xb4, 0x5f, 0xad, 0x1f, 0x6d, 0x8b, + 0xfe, 0x7d, 0xa2, 0xfd, 0x6b, 0x0f, 0xed, 0x1e, + 0xf4, 0x7d, 0xa3, 0xde, 0x8e, 0x69, 0x77, 0x03, + 0x73, 0xed, 0xb1, 0x7f, 0xcf, 0xb4, 0x5f, 0xad, + 0x1f, 0x6d, 0x8b, 0xfe, 0x7d, 0xa2, 0xfd, 0x6b, + 0x0f, 0xed, 0x1e, 0xf4, 0x7d, 0xa3, 0xde, 0x8e, + 0x69, 0x77, 0x03, 0x73, 0xed, 0xb1, 0x7f, 0xcf, + 0xb4, 0x5f, 0xad, 0x1f, 0x6d, 0x8b, 0xfe, 0x7d, + 0xa2, 0xfd, 0x6b, 0x3f, 0x4e, 0x84, 0xdf, 0x4c, + 0xc9, 0xe6, 0x88, 0xd5, 0x57, 0x25, 0x88, 0xcf, + 0x7a, 0x86, 0x41, 0x2a, 0xdc, 0x4b, 0x0a, 0xab, + 0x3b, 0x44, 0x4e, 0xed, 0xa3, 0x3c, 0x0e, 0xf4, + 0xef, 0x3d, 0xc3, 0x53, 0x5b, 0xed, 0xb1, 0x7f, + 0xcf, 0xb4, 0x5f, 0xad, 0x1f, 0x6d, 0x8b, 0xfe, + 0x7d, 0xa2, 0xfd, 0x6b, 0x1e, 0x47, 0x96, 0x20, + 0xbe, 0x62, 0x3a, 0x6e, 0xe4, 0x6e, 0x5c, 0x66, + 0x89, 0x0c, 0xd1, 0x28, 0x69, 0x23, 0x74, 0x56, + 0xe8, 0x59, 0x48, 0x06, 0x8e, 0x69, 0x81, 0xb1, + 0xf6, 0xd8, 0xbf, 0xe7, 0xda, 0x2f, 0xd6, 0x8f, + 0xb6, 0xc5, 0xff, 0x00, 0x3e, 0xd1, 0x7e, 0xb5, + 0x43, 0x51, 0x8c, 0x5a, 0xde, 0xfd, 0x9e, 0x22, + 0xef, 0xc0, 0x20, 0x1e, 0x49, 0xcd, 0x56, 0x91, + 0xa6, 0x89, 0xc2, 0x49, 0x1b, 0xa3, 0x1e, 0x8a, + 0xca, 0x41, 0x34, 0x37, 0x35, 0xd4, 0x35, 0x36, + 0x3e, 0xdb, 0x17, 0xfc, 0xfb, 0x45, 0xfa, 0xd1, + 0xf6, 0xd8, 0xbf, 0xe7, 0xda, 0x2f, 0xd6, 0xb2, + 0x1f, 0xed, 0x11, 0x86, 0x2f, 0x0c, 0x8a, 0x17, + 0x1b, 0x8b, 0x21, 0x18, 0xcf, 0x4c, 0xd4, 0x5f, + 0x68, 0xf7, 0xa3, 0x9a, 0x5d, 0xc0, 0xdc, 0xfb, + 0x6c, 0x5f, 0xf3, 0xed, 0x17, 0xeb, 0x47, 0xdb, + 0x62, 0xff, 0x00, 0x9f, 0x68, 0xbf, 0x5a, 0xc3, + 0xfb, 0x47, 0xbd, 0x1f, 0x68, 0xf7, 0xa5, 0xcd, + 0x2e, 0xe0, 0x6e, 0x7d, 0xb6, 0x2f, 0xf9, 0xf6, + 0x8b, 0xf5, 0xa3, 0xed, 0xb1, 0x7f, 0xcf, 0xb4, + 0x5f, 0xad, 0x61, 0xfd, 0xa3, 0xde, 0x8f, 0xb4, + 0x7b, 0xd1, 0xcd, 0x2e, 0xe0, 0x6e, 0x7d, 0xb6, + 0x2f, 0xf9, 0xf6, 0x8b, 0xf5, 0xa3, 0xed, 0xb1, + 0x7f, 0xcf, 0xb4, 0x5f, 0xad, 0x61, 0xfd, 0xa3, + 0xde, 0x8f, 0xb4, 0x7b, 0xd1, 0xcd, 0x2e, 0xe0, + 0x6f, 0xa4, 0x96, 0xf7, 0x2d, 0xe5, 0xed, 0xf2, + 0xa4, 0x3f, 0x74, 0x83, 0xc1, 0x35, 0x03, 0x29, + 0x56, 0x2a, 0x46, 0x08, 0xe0, 0x8a, 0xc8, 0x17, + 0x25, 0x48, 0x20, 0xe0, 0x8a, 0xde, 0xbd, 0x00, + 0x5d, 0xc8, 0x07, 0xad, 0x6f, 0x4e, 0x4d, 0xad, + 0x46, 0x89, 0x1b, 0xfd, 0x4c, 0x3f, 0xef, 0x27, + 0xf3, 0x14, 0x50, 0xdf, 0xea, 0x61, 0xff, 0x00, + 0x79, 0x3f, 0x98, 0xa2, 0xb4, 0x18, 0xf8, 0x3a, + 0x3f, 0xfd, 0x74, 0x7f, 0xe6, 0x6a, 0x4a, 0x8e, + 0x0e, 0x8f, 0xff, 0x00, 0x5d, 0x1f, 0xf9, 0x9a, + 0x96, 0x80, 0x28, 0x5c, 0x7f, 0xaf, 0x6f, 0xf3, + 0xda, 0xb1, 0xf5, 0xc4, 0x63, 0xac, 0x5c, 0x90, + 0x78, 0xc8, 0xfe, 0x42, 0xb6, 0x2e, 0x7f, 0xd7, + 0xb7, 0xe1, 0xfc, 0xaa, 0x0d, 0x52, 0x0d, 0xd7, + 0xcf, 0x26, 0x3e, 0x57, 0x01, 0x81, 0xf6, 0xc5, + 0x65, 0x57, 0x61, 0x33, 0x9f, 0xf2, 0xdf, 0xd4, + 0xd6, 0xb6, 0x97, 0x1b, 0xc9, 0xa5, 0x6a, 0x30, + 0x47, 0x93, 0x33, 0x05, 0x60, 0x07, 0x52, 0x01, + 0xe7, 0xfc, 0xfb, 0xd3, 0x7e, 0xcf, 0xed, 0x4f, + 0x89, 0x24, 0x86, 0x41, 0x24, 0x4c, 0x51, 0xc7, + 0x71, 0x58, 0xa9, 0x59, 0x88, 0xa3, 0x1e, 0x9f, + 0x72, 0x60, 0x69, 0xd8, 0x32, 0x42, 0x8c, 0x03, + 0x6e, 0xe3, 0x3f, 0x4a, 0xe8, 0x37, 0xdc, 0x7f, + 0xc2, 0x45, 0xf6, 0x7c, 0xb7, 0xd8, 0xfc, 0xac, + 0x79, 0x7f, 0xc3, 0xb7, 0x6f, 0xf8, 0xd5, 0x2b, + 0x89, 0x2e, 0x6e, 0x80, 0x13, 0x4a, 0x58, 0x0e, + 0x83, 0x18, 0x14, 0xbe, 0x7d, 0xdf, 0x91, 0xe4, + 0x79, 0xcd, 0xe5, 0xe3, 0x18, 0xf6, 0xfa, 0xd5, + 0x29, 0xa4, 0x05, 0x86, 0x9a, 0x68, 0xae, 0x74, + 0x88, 0xe2, 0x91, 0x96, 0x32, 0x8a, 0x18, 0x0f, + 0xe2, 0x1d, 0x39, 0xa8, 0x2e, 0x0c, 0xa9, 0xa6, + 0x6a, 0x28, 0x8e, 0xea, 0x05, 0xd9, 0x00, 0x03, + 0xd1, 0x73, 0xd2, 0xa3, 0x2d, 0x39, 0x68, 0x98, + 0xbf, 0x30, 0x80, 0x13, 0x81, 0xc6, 0x29, 0xcb, + 0x2d, 0xca, 0x79, 0xbb, 0x64, 0x23, 0xce, 0x24, + 0xbf, 0x03, 0x9c, 0xd1, 0xce, 0x82, 0xe4, 0xba, + 0x93, 0xbc, 0xba, 0xed, 0xb5, 0xbc, 0x8e, 0x7e, + 0xce, 0x19, 0x09, 0x4e, 0xc4, 0xfb, 0xd3, 0x83, + 0xdc, 0xcb, 0x79, 0xab, 0x45, 0x72, 0xcc, 0x6d, + 0xc4, 0x6f, 0x85, 0x6e, 0x8b, 0xfd, 0xdc, 0x7e, + 0x15, 0x52, 0x71, 0x2d, 0xc4, 0xbe, 0x64, 0xad, + 0xb9, 0xfa, 0x67, 0x18, 0xa9, 0x65, 0x9e, 0xee, + 0x68, 0xbc, 0xa9, 0x26, 0x66, 0x4f, 0x4f, 0x5a, + 0x39, 0xd0, 0x5c, 0xad, 0xe2, 0x14, 0x66, 0xd5, + 0x09, 0x1f, 0xdc, 0x5f, 0xe5, 0x57, 0x6e, 0xbe, + 0xc0, 0xb6, 0xba, 0x79, 0xbc, 0x49, 0xdd, 0xc4, + 0x0b, 0x81, 0x1e, 0x30, 0x78, 0xef, 0x55, 0xa7, + 0x12, 0xdc, 0x49, 0xe6, 0x4a, 0x77, 0x3e, 0x31, + 0x9c, 0x62, 0x89, 0x44, 0xb3, 0x2c, 0x6b, 0x23, + 0x6e, 0x11, 0xae, 0xd5, 0xe3, 0xa0, 0xa5, 0xce, + 0xb5, 0x0b, 0x96, 0xed, 0xae, 0x45, 0xd2, 0x6a, + 0x77, 0x8f, 0xe6, 0xc6, 0x48, 0x40, 0x3c, 0xac, + 0x6f, 0x55, 0xf6, 0xa7, 0xdb, 0xcc, 0xb2, 0x5f, + 0x79, 0xa8, 0x93, 0x02, 0xb6, 0x6c, 0x37, 0x4e, + 0xa0, 0x17, 0xc1, 0x18, 0x3e, 0xf5, 0x4a, 0xdf, + 0xce, 0xb6, 0x7d, 0xf0, 0xb9, 0x46, 0xe9, 0xc5, + 0x3f, 0xcd, 0xb9, 0x33, 0x3c, 0xa6, 0x42, 0x5d, + 0xd7, 0x69, 0x24, 0x0e, 0x9e, 0x94, 0xd5, 0x40, + 0xb8, 0xeb, 0x17, 0x9a, 0x6d, 0x39, 0x5e, 0x67, + 0x67, 0x73, 0x7d, 0x19, 0x2c, 0x7a, 0xf6, 0xab, + 0x05, 0xae, 0x1e, 0xff, 0x00, 0x56, 0x8e, 0x66, + 0x63, 0x00, 0x85, 0xb0, 0xa7, 0xa0, 0xf4, 0xc7, + 0xeb, 0x55, 0xad, 0x8b, 0xc4, 0x63, 0x8c, 0xb6, + 0x21, 0x12, 0xab, 0xb0, 0xc7, 0x71, 0xde, 0xa5, + 0xbd, 0xb8, 0x9a, 0x57, 0x96, 0x34, 0x99, 0x8c, + 0x0c, 0xd9, 0x03, 0xfc, 0xf3, 0x4d, 0x4d, 0x58, + 0x77, 0x1e, 0x27, 0x9e, 0x29, 0xb4, 0x78, 0xa3, + 0x72, 0xa8, 0xd1, 0xa6, 0xf0, 0x3f, 0x8b, 0xb7, + 0x34, 0x98, 0x8a, 0x0b, 0x1b, 0xb6, 0xdf, 0x3c, + 0x63, 0xed, 0x8c, 0x0b, 0x5b, 0xe3, 0x70, 0x1d, + 0x87, 0xd2, 0xaa, 0x96, 0x9c, 0xb4, 0x4c, 0x5f, + 0x98, 0x40, 0x09, 0xc0, 0xe3, 0x14, 0xf8, 0xa6, + 0xba, 0x86, 0x49, 0x24, 0x8e, 0x52, 0xad, 0x21, + 0xcb, 0x70, 0x39, 0x3f, 0x4a, 0x39, 0xd0, 0xae, + 0x58, 0xf3, 0xdb, 0x3a, 0xad, 0xc4, 0x51, 0xc9, + 0x0b, 0x98, 0xe3, 0xe2, 0x45, 0xc1, 0x0d, 0xcf, + 0x38, 0xa4, 0xd3, 0xc4, 0xe8, 0x96, 0x26, 0x7b, + 0xa9, 0x89, 0x99, 0xd9, 0xd5, 0x23, 0x51, 0x83, + 0xcf, 0x3b, 0x8f, 0x7a, 0xab, 0xba, 0x7c, 0x4a, + 0x0b, 0x93, 0xe7, 0x7d, 0xfc, 0x8c, 0xee, 0xa7, + 0x24, 0xb7, 0x51, 0xc2, 0x21, 0x49, 0x99, 0x63, + 0x07, 0x20, 0x0e, 0xd4, 0xb9, 0xd0, 0x5c, 0x94, + 0xab, 0x45, 0x6b, 0x73, 0xb2, 0x3d, 0xfb, 0x75, + 0x1c, 0xac, 0x60, 0x75, 0x00, 0xf4, 0xa6, 0xdf, + 0xee, 0xbb, 0xb4, 0xbb, 0x92, 0xde, 0xea, 0x70, + 0x01, 0x0d, 0x2d, 0xbc, 0xeb, 0x9d, 0xbc, 0xf6, + 0x3d, 0xa9, 0xb2, 0x4d, 0x75, 0x28, 0x21, 0xe5, + 0x27, 0x2c, 0x1c, 0xe0, 0x01, 0xc8, 0xe8, 0x68, + 0x9e, 0x7b, 0xbb, 0x88, 0xfc, 0xb9, 0x65, 0x2c, + 0x9d, 0xc6, 0x00, 0xcd, 0x1c, 0xe8, 0x77, 0x30, + 0xbc, 0xb7, 0xf5, 0x34, 0xe8, 0xe3, 0x7f, 0x35, + 0x39, 0xee, 0x2b, 0x4b, 0xec, 0xfe, 0xd5, 0x24, + 0x16, 0x85, 0xe6, 0x45, 0x03, 0x92, 0xc2, 0xa1, + 0x31, 0x1a, 0x37, 0xbf, 0xf1, 0xf7, 0x2f, 0xd6, + 0x9b, 0x10, 0xca, 0xcd, 0xff, 0x00, 0x5c, 0x9f, + 0xff, 0x00, 0x41, 0xa5, 0xba, 0x60, 0xd7, 0x32, + 0x11, 0xd3, 0x75, 0x2d, 0xae, 0x0c, 0xa5, 0x0f, + 0x1b, 0xd4, 0xa8, 0xfc, 0x45, 0x75, 0xb2, 0x8e, + 0x5f, 0xc9, 0x6f, 0x53, 0x56, 0x74, 0xe4, 0xf2, + 0xf5, 0x1b, 0x67, 0x73, 0xf2, 0xac, 0x8a, 0x4e, + 0x7e, 0xb5, 0x75, 0xad, 0x4a, 0xb1, 0x56, 0x5c, + 0x11, 0xc1, 0x14, 0x9f, 0x67, 0xf6, 0xae, 0x4e, + 0x6b, 0x12, 0x32, 0xff, 0x00, 0x4e, 0xba, 0x97, + 0x59, 0x95, 0x51, 0x1f, 0x73, 0xc8, 0x59, 0x5b, + 0xb6, 0x0f, 0x7c, 0xd4, 0xe9, 0x1c, 0xf6, 0x7a, + 0x1c, 0xa2, 0x17, 0x29, 0x30, 0xb9, 0xdb, 0x2b, + 0x21, 0xe7, 0x00, 0x7a, 0xfd, 0x6a, 0x71, 0x73, + 0x78, 0x22, 0xf2, 0x84, 0xed, 0xb7, 0x18, 0xf7, + 0xfc, 0xea, 0x3b, 0x76, 0x9e, 0xd8, 0x93, 0x0c, + 0x85, 0x33, 0xd7, 0xde, 0xab, 0x9d, 0x5c, 0x0b, + 0xf3, 0x97, 0x4b, 0x4b, 0x89, 0xb3, 0xb6, 0xe5, + 0xad, 0x63, 0x2e, 0x47, 0x5d, 0xdc, 0xf3, 0xf5, + 0xa6, 0x47, 0x3d, 0xc1, 0xbb, 0xd2, 0x73, 0x23, + 0x7c, 0xf1, 0x7e, 0xf3, 0x9f, 0xbf, 0xc7, 0x7f, + 0x5a, 0xa6, 0x5e, 0xe1, 0xbc, 0xdc, 0xc8, 0x4f, + 0x9a, 0x00, 0x7c, 0xf7, 0xa0, 0x3c, 0xe1, 0xa2, + 0x60, 0xfc, 0xc2, 0x30, 0x87, 0x03, 0x81, 0x55, + 0xed, 0x10, 0xee, 0x22, 0x19, 0x2d, 0xb4, 0x6b, + 0xbf, 0x25, 0xcc, 0x6d, 0xf6, 0xa2, 0x01, 0x5e, + 0x08, 0x1c, 0x56, 0x84, 0x92, 0x4a, 0xfa, 0xb4, + 0xd1, 0x33, 0x1f, 0x29, 0xad, 0x4e, 0x53, 0xb1, + 0x38, 0xeb, 0xf5, 0xac, 0xe3, 0xe6, 0x98, 0x9a, + 0x22, 0xdf, 0x23, 0xb6, 0xf2, 0x30, 0x39, 0x34, + 0xff, 0x00, 0x36, 0xe7, 0xce, 0x33, 0x79, 0x9f, + 0xbc, 0x2b, 0xb3, 0x3b, 0x47, 0x4a, 0x5e, 0xd1, + 0x0a, 0xe4, 0xb6, 0xcc, 0xd3, 0x25, 0xac, 0x0b, + 0x3d, 0xc5, 0x9d, 0xca, 0xc5, 0xb5, 0x54, 0xae, + 0x63, 0x71, 0x8e, 0xb8, 0xf7, 0xac, 0xfd, 0x0e, + 0x16, 0x8f, 0x5b, 0x83, 0x71, 0xe8, 0x58, 0x7f, + 0xe3, 0xa6, 0xae, 0xa5, 0xc5, 0xdc, 0x71, 0x08, + 0x92, 0x66, 0x08, 0x06, 0x00, 0xf4, 0xfc, 0x6a, + 0x18, 0x52, 0x48, 0x25, 0x12, 0xc4, 0x76, 0xba, + 0xf4, 0x38, 0xa5, 0xce, 0xb4, 0x01, 0x5e, 0xe2, + 0xca, 0xd0, 0x5d, 0x7d, 0x8e, 0x19, 0xfc, 0xf9, + 0x43, 0x21, 0x69, 0x08, 0xc0, 0x07, 0xae, 0x2a, + 0xf7, 0x99, 0x15, 0xb1, 0xb0, 0x55, 0x17, 0x4e, + 0x3c, 0x81, 0x88, 0xa1, 0x00, 0xa3, 0xf1, 0xce, + 0x47, 0x73, 0x59, 0xad, 0x01, 0x66, 0x24, 0xf5, + 0x3c, 0xd5, 0x88, 0xe6, 0xba, 0x8e, 0x1f, 0x25, + 0x26, 0x61, 0x1e, 0x3a, 0x53, 0x55, 0x02, 0xe4, + 0x77, 0x2f, 0x2c, 0x5a, 0x0d, 0xb2, 0x40, 0xcc, + 0x8a, 0xef, 0x20, 0x3e, 0xbb, 0x72, 0x78, 0xad, + 0x0b, 0x9f, 0x31, 0x64, 0xd4, 0xda, 0x22, 0x43, + 0xf9, 0x31, 0xe0, 0x8e, 0xa3, 0xad, 0x67, 0x32, + 0xc8, 0xf0, 0xa4, 0x2c, 0x73, 0x1a, 0x12, 0x54, + 0x63, 0xa6, 0x6a, 0xec, 0x37, 0x0f, 0xe5, 0xdc, + 0xbc, 0xb2, 0x1f, 0x39, 0xd5, 0x42, 0x90, 0x3d, + 0x3e, 0x94, 0xd4, 0xd0, 0xee, 0x16, 0xa1, 0xdd, + 0xb4, 0x69, 0x26, 0x24, 0xcd, 0xfb, 0xc0, 0x4b, + 0x75, 0x23, 0x07, 0x15, 0x5b, 0xcc, 0x96, 0xeb, + 0x4c, 0xd4, 0x16, 0x77, 0x2c, 0xa9, 0x2a, 0x6d, + 0xff, 0x00, 0x64, 0x6e, 0xed, 0xf8, 0x52, 0xb4, + 0xd7, 0x4d, 0x70, 0xb3, 0xb4, 0xa4, 0xc8, 0x9c, + 0x29, 0xc0, 0xe3, 0xf0, 0xa8, 0xc0, 0x94, 0x47, + 0x24, 0x61, 0xbe, 0x49, 0x48, 0x2e, 0x31, 0xd6, + 0x97, 0xb4, 0x42, 0xb9, 0x7e, 0xfa, 0x48, 0xa3, + 0xb9, 0xb9, 0x84, 0xad, 0xdc, 0x80, 0xc3, 0xb7, + 0xca, 0x55, 0x06, 0x35, 0x5c, 0x75, 0x1f, 0xe3, + 0x55, 0x6e, 0x3e, 0xd0, 0xeb, 0xa5, 0x5a, 0xc5, + 0x26, 0xc0, 0xf1, 0x26, 0x73, 0xd0, 0xe3, 0x1d, + 0x7d, 0x69, 0x1a, 0x6b, 0xa6, 0x83, 0xc8, 0x33, + 0x31, 0x8f, 0x18, 0xc7, 0xb7, 0xd6, 0x98, 0xc6, + 0x66, 0x31, 0x12, 0xe7, 0x31, 0x00, 0x10, 0x81, + 0x8c, 0x50, 0xea, 0x20, 0xb9, 0x62, 0xf1, 0x7c, + 0xcd, 0x2f, 0x51, 0x0d, 0x34, 0xd3, 0x32, 0xc8, + 0xa0, 0xb4, 0x8a, 0x00, 0x0c, 0x18, 0x03, 0xb6, + 0xa4, 0xba, 0x90, 0x43, 0x7d, 0x76, 0x24, 0x59, + 0xd6, 0x39, 0x23, 0x8c, 0x19, 0xa1, 0xea, 0x98, + 0xf7, 0xf7, 0xaa, 0xed, 0x71, 0x76, 0xe5, 0xb7, + 0x4c, 0x4e, 0xf5, 0xda, 0x46, 0x06, 0x31, 0x40, + 0xb8, 0xbb, 0x59, 0x9a, 0x51, 0x29, 0x0e, 0xc3, + 0x04, 0xe0, 0x73, 0xf8, 0x53, 0xf6, 0x88, 0x77, + 0x28, 0x6b, 0x16, 0xf2, 0xf9, 0xd0, 0xbb, 0x5c, + 0x1b, 0x84, 0x78, 0xc1, 0x47, 0x2b, 0x83, 0xb7, + 0xde, 0xb3, 0xfc, 0x96, 0xf5, 0x35, 0xb3, 0x3a, + 0xcb, 0x71, 0x26, 0xf9, 0x58, 0xbb, 0x74, 0xc9, + 0xa8, 0xfe, 0xcf, 0xed, 0x50, 0xe5, 0x76, 0x22, + 0x4d, 0x19, 0x0a, 0x58, 0x5d, 0x67, 0xbb, 0xa7, + 0xf5, 0xab, 0x70, 0xff, 0x00, 0xae, 0x4f, 0xf7, + 0x85, 0x16, 0xf1, 0x79, 0x16, 0x0f, 0xbb, 0x83, + 0x2b, 0x8d, 0xa3, 0xd8, 0x77, 0xa2, 0x32, 0x16, + 0x54, 0x63, 0xd0, 0x10, 0x6b, 0xa2, 0x1f, 0x09, + 0x48, 0xc3, 0xd4, 0x62, 0x63, 0xa9, 0x5d, 0x10, + 0x7f, 0xe5, 0xb3, 0xff, 0x00, 0xe8, 0x46, 0xab, + 0x79, 0x2d, 0xea, 0x6b, 0x76, 0xfa, 0xd4, 0x8b, + 0xc9, 0x89, 0x1f, 0x79, 0x8b, 0x0f, 0x70, 0x79, + 0xa8, 0x3e, 0xcf, 0xed, 0x5c, 0xed, 0xea, 0x49, + 0x93, 0xe4, 0xb7, 0xa9, 0xa3, 0xc9, 0x6f, 0x53, + 0x5a, 0xdf, 0x67, 0xf6, 0xa3, 0xec, 0xfe, 0xd4, + 0xb9, 0x80, 0xc9, 0xf2, 0x5b, 0xd4, 0xd1, 0xe4, + 0xb7, 0xa9, 0xad, 0x6f, 0xb3, 0xfb, 0x51, 0xf6, + 0x7f, 0x6a, 0x39, 0x80, 0xc9, 0xf2, 0x5b, 0xd4, + 0xd1, 0xe4, 0xb7, 0xa9, 0xad, 0x6f, 0xb3, 0xfb, + 0x51, 0xf6, 0x7f, 0x6a, 0x39, 0x80, 0x97, 0x4f, + 0xb6, 0x8e, 0x3d, 0x1a, 0x53, 0x35, 0xcf, 0xd9, + 0xcd, 0xc4, 0x80, 0x07, 0xdb, 0xbb, 0x85, 0xff, + 0x00, 0xeb, 0xd5, 0xe1, 0x18, 0x5d, 0x62, 0x5b, + 0xb8, 0xc8, 0x74, 0x9a, 0xd0, 0xb0, 0x38, 0xe0, + 0x9e, 0x3b, 0x7e, 0x15, 0x41, 0xd6, 0x49, 0x22, + 0x8e, 0x26, 0x39, 0x48, 0xf3, 0xb4, 0x63, 0xa5, + 0x48, 0x92, 0xdc, 0xa2, 0x2a, 0x2c, 0x98, 0x55, + 0x52, 0xa0, 0x6d, 0x1c, 0x03, 0xd6, 0xad, 0x4d, + 0x05, 0xc2, 0x35, 0xb8, 0xbc, 0xd2, 0xed, 0x37, + 0xca, 0x5a, 0x61, 0x79, 0x85, 0x79, 0x3e, 0x6c, + 0x0c, 0x67, 0xf1, 0xa9, 0x6f, 0x14, 0xc9, 0xa5, + 0xea, 0x21, 0xa6, 0x9a, 0x66, 0x59, 0x14, 0x6e, + 0x91, 0x40, 0x01, 0x83, 0x00, 0x76, 0xd5, 0x75, + 0x33, 0x24, 0x4b, 0x12, 0xb9, 0x08, 0xaf, 0xbc, + 0x00, 0x3a, 0x37, 0xad, 0x4a, 0xd7, 0x37, 0x6e, + 0x5b, 0x74, 0xcc, 0x77, 0xae, 0xd2, 0x30, 0x31, + 0x8a, 0x39, 0xd0, 0xee, 0x59, 0x74, 0x23, 0x5a, + 0xbb, 0x91, 0x39, 0x99, 0x6d, 0x33, 0x1f, 0xfb, + 0xd8, 0xa3, 0x47, 0xdf, 0x3d, 0xad, 0xb3, 0xdd, + 0xb3, 0x49, 0x22, 0xce, 0xde, 0x5b, 0x3f, 0x27, + 0x1b, 0x4f, 0xf9, 0xfc, 0x2a, 0x93, 0x3d, 0xc3, + 0x5c, 0x0b, 0x83, 0x21, 0xf3, 0x47, 0x1b, 0x80, + 0xc5, 0x49, 0xe6, 0xcd, 0x35, 0xcc, 0x52, 0x5c, + 0x4d, 0x21, 0x08, 0x78, 0x2b, 0x80, 0x47, 0xd2, + 0x9f, 0xb4, 0x57, 0x0b, 0x91, 0x96, 0xba, 0x9b, + 0x43, 0xbf, 0xfb, 0x4b, 0x3b, 0x37, 0x9a, 0xb8, + 0x2d, 0xdb, 0xe6, 0x19, 0x15, 0x87, 0xe4, 0xb7, + 0xa9, 0xae, 0xa6, 0xee, 0x65, 0x7b, 0x59, 0x22, + 0xf3, 0xda, 0x76, 0x91, 0x87, 0x25, 0x76, 0xed, + 0x02, 0xb3, 0x3e, 0xcf, 0xed, 0x53, 0x29, 0x08, + 0xc9, 0xf2, 0x5b, 0xd4, 0xd1, 0xe4, 0xb7, 0xa9, + 0xad, 0x6f, 0xb3, 0xfb, 0x51, 0xf6, 0x7f, 0x6a, + 0x9e, 0x60, 0x32, 0x7c, 0x96, 0xf5, 0x34, 0x79, + 0x2d, 0xea, 0x6b, 0x5b, 0xec, 0xfe, 0xd4, 0x7d, + 0x9f, 0xda, 0x8e, 0x60, 0x32, 0x7c, 0x96, 0xf5, + 0x34, 0x79, 0x2d, 0xea, 0x6b, 0x5b, 0xec, 0xfe, + 0xd4, 0x7d, 0x9f, 0xda, 0x8e, 0x60, 0x32, 0x7c, + 0x96, 0xf5, 0x35, 0xd5, 0x5f, 0x7f, 0xc7, 0xe4, + 0x9f, 0x5f, 0xe9, 0x59, 0xb1, 0xd9, 0xb4, 0xb2, + 0x2a, 0x28, 0xc9, 0x63, 0x8a, 0xd1, 0xbb, 0x60, + 0xf7, 0x52, 0x30, 0xe9, 0x9a, 0xda, 0x96, 0xb7, + 0x1a, 0x25, 0x6f, 0xf5, 0x30, 0xff, 0x00, 0xbc, + 0x9f, 0xcc, 0x51, 0x4a, 0xff, 0x00, 0xea, 0x61, + 0xff, 0x00, 0x79, 0x3f, 0x98, 0xa2, 0xb6, 0x18, + 0xe8, 0x3e, 0xeb, 0xff, 0x00, 0xd7, 0x47, 0xfe, + 0x66, 0xa5, 0xa8, 0xed, 0xfe, 0xeb, 0xff, 0x00, + 0xd7, 0x47, 0xfe, 0x66, 0xa5, 0xa0, 0x0a, 0x17, + 0x3f, 0xeb, 0xdb, 0xf0, 0xfe, 0x54, 0xcd, 0x42, + 0xfc, 0x5a, 0x25, 0xaa, 0x49, 0x08, 0x96, 0x36, + 0x8f, 0x3d, 0x70, 0x41, 0xcf, 0xad, 0x3e, 0xe7, + 0xfd, 0x7b, 0x7e, 0x1f, 0xca, 0xb3, 0xbc, 0x41, + 0xf7, 0x6c, 0xbf, 0xeb, 0x99, 0xfe, 0x74, 0x35, + 0x70, 0x24, 0xfe, 0xd7, 0xb1, 0xff, 0x00, 0x9f, + 0x69, 0xbf, 0xef, 0xa1, 0x47, 0xf6, 0xbd, 0x87, + 0xfc, 0xfa, 0xcd, 0xff, 0x00, 0x7d, 0x8a, 0xc2, + 0xa2, 0xa3, 0x92, 0x3d, 0x82, 0xc6, 0xef, 0xf6, + 0xbd, 0x87, 0xfc, 0xfa, 0xcd, 0xff, 0x00, 0x7d, + 0x8a, 0x3f, 0xb5, 0xec, 0x3f, 0xe7, 0xd6, 0x6f, + 0xfb, 0xec, 0x56, 0x15, 0x14, 0x72, 0x47, 0xb0, + 0x58, 0xdd, 0xfe, 0xd7, 0xb0, 0xff, 0x00, 0x9f, + 0x59, 0xbf, 0xef, 0xb1, 0x47, 0xf6, 0xbd, 0x87, + 0xfc, 0xfa, 0xcd, 0xff, 0x00, 0x7d, 0x8a, 0xc2, + 0xa0, 0x72, 0x71, 0x47, 0x24, 0x7b, 0x05, 0x8d, + 0xdf, 0xed, 0x7b, 0x0f, 0xf9, 0xf5, 0x9b, 0xfe, + 0xfb, 0x14, 0x7f, 0x6b, 0xd8, 0x7f, 0xcf, 0xac, + 0xdf, 0xf7, 0xd8, 0xaa, 0x57, 0x16, 0x31, 0x28, + 0x95, 0x22, 0x32, 0x79, 0x91, 0x4a, 0xb1, 0x92, + 0xe4, 0x61, 0xc9, 0xcf, 0x23, 0xd3, 0xa5, 0x53, + 0x78, 0x25, 0x8d, 0x37, 0x48, 0x85, 0x46, 0xe2, + 0x9c, 0xfa, 0x8e, 0xb4, 0x72, 0x47, 0xb0, 0x58, + 0xd9, 0xfe, 0xd7, 0xb0, 0xff, 0x00, 0x9f, 0x59, + 0xbf, 0xef, 0xb1, 0x47, 0xf6, 0xbd, 0x87, 0xfc, + 0xfa, 0xcd, 0xff, 0x00, 0x7d, 0x8a, 0xce, 0x5b, + 0x44, 0x6d, 0x29, 0xae, 0x83, 0x37, 0x98, 0xb2, + 0xed, 0x23, 0xb6, 0xde, 0x39, 0xfc, 0xd8, 0x54, + 0xff, 0x00, 0xd9, 0xd1, 0x2d, 0xb4, 0x13, 0x49, + 0x23, 0xa8, 0xf2, 0xda, 0x49, 0x71, 0xd8, 0x7c, + 0xbb, 0x40, 0xf7, 0x3b, 0x85, 0x1c, 0x91, 0xec, + 0x16, 0x2d, 0x7f, 0x6b, 0xd8, 0x7f, 0xcf, 0xac, + 0xdf, 0xf7, 0xd8, 0xa3, 0xfb, 0x5e, 0xc3, 0xfe, + 0x7d, 0x66, 0xff, 0x00, 0xbe, 0xc5, 0x65, 0x5c, + 0x2d, 0xa9, 0x8d, 0x5e, 0xdd, 0xa4, 0x07, 0x38, + 0x68, 0xe4, 0xe4, 0xfd, 0x72, 0x2a, 0x74, 0x82, + 0xcd, 0x60, 0xb6, 0x69, 0x84, 0xe5, 0xe6, 0x04, + 0xe5, 0x18, 0x60, 0x7c, 0xc4, 0x74, 0xc7, 0xb7, + 0xad, 0x1c, 0x91, 0xec, 0x16, 0x2f, 0x7f, 0x6b, + 0xd8, 0x7f, 0xcf, 0xac, 0xdf, 0xf7, 0xd8, 0xa3, + 0xfb, 0x5e, 0xc3, 0xfe, 0x7d, 0x66, 0xff, 0x00, + 0xbe, 0xc5, 0x52, 0x6d, 0x3d, 0x44, 0xb0, 0x44, + 0x18, 0x92, 0xd3, 0xb4, 0x2e, 0x7b, 0x02, 0x08, + 0xe4, 0x7e, 0x06, 0x9f, 0x16, 0x9f, 0x0b, 0x5e, + 0x4d, 0x13, 0x33, 0xf9, 0x6b, 0x22, 0x22, 0x10, + 0x79, 0x3b, 0x98, 0x63, 0xff, 0x00, 0x1d, 0xcd, + 0x1c, 0x91, 0xec, 0x16, 0x2d, 0x7f, 0x6b, 0xd8, + 0x7f, 0xcf, 0xac, 0xdf, 0xf7, 0xd8, 0xa3, 0xfb, + 0x5e, 0xc3, 0xfe, 0x7d, 0x66, 0xff, 0x00, 0xbe, + 0xc5, 0x54, 0x83, 0x4e, 0x8e, 0x4d, 0x55, 0xed, + 0x99, 0xd8, 0x42, 0xbf, 0x36, 0xe1, 0xd7, 0x69, + 0xfb, 0xbf, 0xcc, 0x56, 0x6d, 0x1c, 0x91, 0xec, + 0x16, 0x37, 0x7f, 0xb5, 0xec, 0x3f, 0xe7, 0xd6, + 0x6f, 0xfb, 0xec, 0x51, 0xfd, 0xaf, 0x61, 0xff, + 0x00, 0x3e, 0xb3, 0x7f, 0xdf, 0x62, 0xb0, 0xa8, + 0xa3, 0x92, 0x3d, 0x82, 0xc6, 0xef, 0xf6, 0xbd, + 0x87, 0xfc, 0xfa, 0xcd, 0xff, 0x00, 0x7d, 0x8a, + 0x3f, 0xb5, 0xec, 0x3f, 0xe7, 0xd6, 0x6f, 0xfb, + 0xec, 0x56, 0x15, 0x14, 0x72, 0x47, 0xb0, 0x58, + 0xdd, 0xfe, 0xd7, 0xb0, 0xff, 0x00, 0x9f, 0x59, + 0xbf, 0xef, 0xb1, 0x57, 0x6c, 0xef, 0x23, 0x9e, + 0xce, 0x79, 0x60, 0x84, 0xc4, 0x55, 0x82, 0x6e, + 0x27, 0x27, 0x07, 0xf9, 0x57, 0x2b, 0x5b, 0xda, + 0x2f, 0xfc, 0x82, 0xee, 0x7f, 0xeb, 0xa2, 0xff, + 0x00, 0x2a, 0x6a, 0x31, 0x5b, 0x20, 0x27, 0xa2, + 0x8a, 0x2a, 0x80, 0x35, 0x4d, 0x4c, 0x5b, 0x5e, + 0x79, 0x4f, 0x6c, 0x93, 0x0d, 0x8a, 0x73, 0x92, + 0xa6, 0xa9, 0xff, 0x00, 0x6d, 0xc3, 0xff, 0x00, + 0x40, 0xf5, 0xff, 0x00, 0xbf, 0xa6, 0xa2, 0xf1, + 0x0f, 0xfc, 0x84, 0x87, 0xfd, 0x72, 0x5f, 0xe5, + 0x59, 0x75, 0x3c, 0xa9, 0xf4, 0x03, 0x67, 0xfb, + 0x6e, 0x1f, 0xfa, 0x07, 0xaf, 0xfd, 0xfd, 0x34, + 0x7f, 0x6d, 0xc3, 0xff, 0x00, 0x40, 0xf5, 0xff, + 0x00, 0xbf, 0xa6, 0xb1, 0xa8, 0xa3, 0x92, 0x3d, + 0x80, 0xd9, 0xfe, 0xdb, 0x87, 0xfe, 0x81, 0xeb, + 0xff, 0x00, 0x7f, 0x4d, 0x1f, 0xdb, 0x70, 0xff, + 0x00, 0xd0, 0x3d, 0x7f, 0xef, 0xe9, 0xac, 0x6a, + 0x28, 0xe4, 0x8f, 0x60, 0x36, 0x7f, 0xb6, 0xe1, + 0xff, 0x00, 0xa0, 0x7a, 0xff, 0x00, 0xdf, 0xd3, + 0x47, 0xf6, 0xdc, 0x3f, 0xf4, 0x0f, 0x5f, 0xfb, + 0xfa, 0x6b, 0x1a, 0xa6, 0xb4, 0x54, 0x6b, 0xb8, + 0x56, 0x50, 0x4c, 0x65, 0xd4, 0x30, 0x1d, 0x48, + 0xcd, 0x1c, 0x91, 0xec, 0x06, 0x9f, 0xf6, 0xdc, + 0x3f, 0xf4, 0x0f, 0x5f, 0xfb, 0xfa, 0x68, 0xfe, + 0xdb, 0x87, 0xfe, 0x81, 0xeb, 0xff, 0x00, 0x7f, + 0x4d, 0x45, 0x77, 0x00, 0x2b, 0x0a, 0xdc, 0x08, + 0x61, 0x91, 0xa4, 0x65, 0xdf, 0x12, 0x8d, 0xb8, + 0xc0, 0xc6, 0x71, 0xef, 0xf8, 0xd5, 0x2b, 0xab, + 0x63, 0x6a, 0xeb, 0x1b, 0xb7, 0xef, 0x71, 0x97, + 0x51, 0xfc, 0x3e, 0x83, 0x34, 0x72, 0x47, 0xb0, + 0x1a, 0x5f, 0xdb, 0x70, 0xff, 0x00, 0xd0, 0x3d, + 0x7f, 0xef, 0xe9, 0xa3, 0xfb, 0x6e, 0x1f, 0xfa, + 0x07, 0xaf, 0xfd, 0xfd, 0x35, 0x59, 0xe3, 0x8c, + 0x6a, 0x36, 0x69, 0xb1, 0x76, 0xb2, 0x43, 0x91, + 0x8e, 0x0e, 0x42, 0xe6, 0x9d, 0x68, 0x90, 0x25, + 0xc5, 0xc4, 0xb3, 0xa2, 0x98, 0x83, 0x88, 0x80, + 0x23, 0x81, 0xb8, 0xf5, 0xfc, 0x00, 0x34, 0x72, + 0x47, 0xb0, 0x13, 0xff, 0x00, 0x6d, 0xc3, 0xff, + 0x00, 0x40, 0xf5, 0xff, 0x00, 0xbf, 0xa6, 0x8f, + 0xed, 0xb8, 0x7f, 0xe8, 0x1e, 0xbf, 0xf7, 0xf4, + 0xd4, 0x36, 0x90, 0x4d, 0x1c, 0x37, 0x8b, 0x1d, + 0xb2, 0xcd, 0x3c, 0x72, 0x22, 0xe0, 0xc4, 0x1f, + 0x1f, 0x7b, 0x3c, 0x63, 0xda, 0xac, 0xc6, 0x42, + 0x5d, 0x5b, 0x45, 0x25, 0xad, 0xba, 0xc9, 0x22, + 0x96, 0x95, 0x0c, 0x2b, 0xc1, 0xe7, 0x1f, 0x4e, + 0x00, 0xe2, 0x8e, 0x48, 0xf6, 0x01, 0x9f, 0xdb, + 0x70, 0xff, 0x00, 0xd0, 0x3d, 0x7f, 0xef, 0xe9, + 0xa3, 0xfb, 0x6e, 0x1f, 0xfa, 0x07, 0xaf, 0xfd, + 0xfd, 0x35, 0x95, 0x34, 0xa6, 0x67, 0xde, 0xcb, + 0x1a, 0x9c, 0x63, 0x08, 0x81, 0x47, 0xe4, 0x2a, + 0x3a, 0x39, 0x23, 0xd8, 0x0d, 0x9f, 0xed, 0xb8, + 0x7f, 0xe8, 0x1e, 0xbf, 0xf7, 0xf4, 0xd1, 0xfd, + 0xb7, 0x0f, 0xfd, 0x03, 0xd7, 0xfe, 0xfe, 0x9a, + 0xc6, 0xa2, 0x8e, 0x48, 0xf6, 0x03, 0x67, 0xfb, + 0x6e, 0x1f, 0xfa, 0x07, 0xaf, 0xfd, 0xfd, 0x34, + 0x7f, 0x6d, 0xc3, 0xff, 0x00, 0x40, 0xf5, 0xff, + 0x00, 0xbf, 0xa6, 0xb1, 0xa8, 0xa3, 0x92, 0x3d, + 0x80, 0xd9, 0xfe, 0xdb, 0x87, 0xfe, 0x81, 0xeb, + 0xff, 0x00, 0x7f, 0x4d, 0x23, 0x6b, 0x69, 0x8f, + 0x92, 0xc6, 0x30, 0xde, 0xac, 0xe5, 0x87, 0xe5, + 0x58, 0xf4, 0x51, 0xcb, 0x1e, 0xc0, 0x75, 0xb7, + 0x8c, 0x5e, 0x48, 0xc9, 0xef, 0x1a, 0x9c, 0x0e, + 0x83, 0x8a, 0xaf, 0x53, 0x5d, 0x7d, 0xe8, 0xff, + 0x00, 0xeb, 0x92, 0xff, 0x00, 0x2a, 0x86, 0xa8, + 0x07, 0x6a, 0x1a, 0x80, 0xb4, 0x4b, 0x55, 0x78, + 0x16, 0x64, 0x68, 0xf3, 0xc9, 0xc1, 0x1c, 0xfa, + 0xd5, 0x2f, 0xed, 0xab, 0x6f, 0xfa, 0x07, 0x9f, + 0xfb, 0xfd, 0xff, 0x00, 0xd6, 0xa7, 0xeb, 0x56, + 0xf2, 0xce, 0x2d, 0x7c, 0xa4, 0x2d, 0xb2, 0x12, + 0xcd, 0xec, 0x2b, 0x26, 0x1b, 0x49, 0xe7, 0x42, + 0xf1, 0x47, 0xb9, 0x73, 0x8e, 0xa0, 0x64, 0xfa, + 0x0f, 0x5f, 0xc2, 0xa5, 0xc5, 0x3d, 0xd0, 0x1a, + 0x7f, 0xdb, 0x56, 0xdf, 0xf4, 0x0f, 0x3f, 0xf7, + 0xfb, 0xff, 0x00, 0xad, 0x47, 0xf6, 0xd5, 0xb7, + 0xfd, 0x03, 0xcf, 0xfd, 0xfe, 0xff, 0x00, 0xeb, + 0x56, 0x30, 0x19, 0x20, 0x0e, 0xe6, 0x9d, 0x34, + 0x4d, 0x0c, 0xd2, 0x42, 0xc4, 0x16, 0x8d, 0x8a, + 0x9c, 0x74, 0xe2, 0x8e, 0x48, 0xf6, 0x03, 0x5f, + 0xfb, 0x6a, 0xdb, 0xfe, 0x81, 0xe7, 0xfe, 0xff, + 0x00, 0x7f, 0xf5, 0xa8, 0xfe, 0xda, 0xb6, 0xff, + 0x00, 0xa0, 0x79, 0xff, 0x00, 0xbf, 0xdf, 0xfd, + 0x6a, 0xc9, 0x82, 0x09, 0x6e, 0x25, 0x11, 0x42, + 0x85, 0xdc, 0xf6, 0x15, 0x19, 0x04, 0x1c, 0x1a, + 0x39, 0x23, 0xd8, 0x0d, 0xaf, 0xed, 0xab, 0x6f, + 0xfa, 0x07, 0x9f, 0xfb, 0xfd, 0xff, 0x00, 0xd6, + 0xa3, 0xfb, 0x6a, 0xdb, 0xfe, 0x81, 0xe7, 0xfe, + 0xff, 0x00, 0x7f, 0xf5, 0xab, 0x36, 0x4b, 0x2b, + 0x88, 0xe3, 0x2e, 0xd1, 0x80, 0x17, 0x96, 0x1b, + 0x81, 0x2b, 0xf5, 0x1d, 0x45, 0x36, 0x6b, 0x69, + 0x21, 0x44, 0x76, 0x03, 0x6b, 0xf4, 0x20, 0xfb, + 0x03, 0x8f, 0xc9, 0x85, 0x1c, 0x91, 0xec, 0x06, + 0xa7, 0xf6, 0xd5, 0xb7, 0xfd, 0x03, 0xcf, 0xfd, + 0xfe, 0xff, 0x00, 0xeb, 0x51, 0xfd, 0xb5, 0x6d, + 0xff, 0x00, 0x40, 0xf3, 0xff, 0x00, 0x7f, 0xbf, + 0xfa, 0xd5, 0x91, 0x24, 0x6f, 0x13, 0xec, 0x71, + 0x86, 0xc0, 0x38, 0xfa, 0x8c, 0x8a, 0x90, 0xd9, + 0xdc, 0x89, 0x23, 0x43, 0x11, 0x0f, 0x22, 0xee, + 0x50, 0x7d, 0x3f, 0xa7, 0x4e, 0xf4, 0x72, 0x47, + 0xb0, 0x1a, 0x7f, 0xdb, 0x56, 0xdf, 0xf4, 0x0f, + 0x3f, 0xf7, 0xfb, 0xff, 0x00, 0xad, 0x47, 0xf6, + 0xd5, 0xb7, 0xfd, 0x03, 0xcf, 0xfd, 0xfe, 0xff, + 0x00, 0xeb, 0x56, 0x4c, 0xd0, 0xc9, 0x03, 0x84, + 0x91, 0x40, 0x24, 0x64, 0x60, 0x82, 0x08, 0xf6, + 0x22, 0x89, 0xa2, 0x68, 0x64, 0xd8, 0xe4, 0x67, + 0x0a, 0xd9, 0x1e, 0xe0, 0x1f, 0xeb, 0x47, 0x24, + 0x7b, 0x01, 0xad, 0xfd, 0xb5, 0x6d, 0xff, 0x00, + 0x40, 0xf3, 0xff, 0x00, 0x7f, 0xbf, 0xfa, 0xd4, + 0x7f, 0x6d, 0x5b, 0x7f, 0xd0, 0x3c, 0xff, 0x00, + 0xdf, 0xef, 0xfe, 0xb5, 0x64, 0x3c, 0x6c, 0x9c, + 0xe4, 0x32, 0x6e, 0x2a, 0x1c, 0x74, 0x38, 0xf4, + 0xfc, 0xc5, 0x48, 0xb6, 0x93, 0xb4, 0x1e, 0x70, + 0x8f, 0xe4, 0xc1, 0x3d, 0x46, 0x70, 0x3a, 0x9c, + 0x75, 0xc5, 0x1c, 0x91, 0xec, 0x06, 0x9f, 0xf6, + 0xd5, 0xb7, 0xfd, 0x03, 0xcf, 0xfd, 0xfe, 0xff, + 0x00, 0xeb, 0x51, 0xfd, 0xb5, 0x6d, 0xff, 0x00, + 0x40, 0xf3, 0xff, 0x00, 0x7f, 0xbf, 0xfa, 0xd5, + 0x92, 0x90, 0x48, 0xf0, 0xc9, 0x32, 0xae, 0x63, + 0x8f, 0x1b, 0xce, 0x7a, 0x67, 0xa5, 0x39, 0x6d, + 0x27, 0x74, 0x8d, 0xd6, 0x32, 0x44, 0xa4, 0xaa, + 0x7b, 0xe3, 0xad, 0x1c, 0x91, 0xec, 0x06, 0xa7, + 0xf6, 0xd5, 0xb7, 0xfd, 0x03, 0xcf, 0xfd, 0xfe, + 0xff, 0x00, 0xeb, 0x51, 0xfd, 0xb5, 0x6d, 0xff, + 0x00, 0x40, 0xf3, 0xff, 0x00, 0x7f, 0xbf, 0xfa, + 0xd5, 0x9d, 0xf6, 0x1b, 0x9f, 0x31, 0x10, 0x22, + 0x92, 0xf9, 0xda, 0x44, 0x8a, 0x47, 0x03, 0x27, + 0x9c, 0xe2, 0x9b, 0x2d, 0xa4, 0xf1, 0x14, 0x0c, + 0x80, 0xef, 0x38, 0x52, 0x8c, 0x18, 0x13, 0xe9, + 0x91, 0x47, 0x24, 0x7b, 0x01, 0xa7, 0xfd, 0xb5, + 0x6d, 0xff, 0x00, 0x40, 0xf3, 0xff, 0x00, 0x7f, + 0xbf, 0xfa, 0xd4, 0x7f, 0x6d, 0x5b, 0x7f, 0xd0, + 0x3c, 0xff, 0x00, 0xdf, 0xef, 0xfe, 0xb5, 0x66, + 0x4d, 0x69, 0x3c, 0x09, 0xbd, 0xd4, 0x6d, 0xce, + 0xd2, 0x55, 0x83, 0x60, 0xfa, 0x1c, 0x1e, 0x29, + 0x89, 0x04, 0xb2, 0x45, 0x24, 0xa8, 0x99, 0x48, + 0xf1, 0xbc, 0xfa, 0x66, 0x8e, 0x48, 0xf6, 0x03, + 0x5b, 0xfb, 0x6a, 0xdb, 0xfe, 0x81, 0xe7, 0xfe, + 0xff, 0x00, 0x7f, 0xf5, 0xa8, 0xfe, 0xda, 0xb6, + 0xff, 0x00, 0xa0, 0x79, 0xff, 0x00, 0xbf, 0xdf, + 0xfd, 0x6a, 0xce, 0x8e, 0xc6, 0xe6, 0x58, 0xd2, + 0x44, 0x45, 0x21, 0xc6, 0x54, 0x6f, 0x5d, 0xcd, + 0xce, 0x38, 0x19, 0xcf, 0x6a, 0x64, 0x36, 0xb3, + 0xce, 0x18, 0xa2, 0x0c, 0x29, 0xc1, 0x2c, 0xc1, + 0x40, 0x3e, 0x99, 0x34, 0x72, 0x47, 0xb0, 0x1d, + 0x1d, 0x95, 0xea, 0xdc, 0xd9, 0x4f, 0x2c, 0x50, + 0x08, 0x0a, 0xb0, 0x5e, 0x1b, 0x71, 0xfc, 0xea, + 0x3a, 0x8b, 0x4a, 0x8d, 0xe1, 0xd3, 0xee, 0xa3, + 0x91, 0x4a, 0xba, 0xca, 0xb9, 0x07, 0xe9, 0x52, + 0xd3, 0x4a, 0xdb, 0x01, 0x71, 0xff, 0x00, 0xd4, + 0x43, 0xfe, 0xf2, 0x7f, 0x31, 0x45, 0x0f, 0xfe, + 0xa2, 0x1f, 0xf7, 0x93, 0xf9, 0x8a, 0x29, 0x80, + 0xfb, 0x7f, 0xba, 0xff, 0x00, 0xf5, 0xd1, 0xff, + 0x00, 0x99, 0xa9, 0x6a, 0x2b, 0x7f, 0xba, 0xff, + 0x00, 0xf5, 0xd1, 0xff, 0x00, 0x99, 0xa9, 0x68, + 0x02, 0x85, 0xcf, 0xfa, 0xf6, 0xfc, 0x3f, 0x95, + 0x67, 0x78, 0x83, 0xee, 0xd9, 0x7f, 0xd7, 0x33, + 0xfc, 0xeb, 0x46, 0xe7, 0xfe, 0x3e, 0x1b, 0xf0, + 0xfe, 0x55, 0x06, 0xa6, 0xf6, 0x4b, 0x05, 0xa3, + 0x5d, 0x41, 0x24, 0x8c, 0x55, 0x82, 0xec, 0x7c, + 0x63, 0x06, 0x80, 0x39, 0xca, 0x2b, 0x4b, 0xce, + 0xd1, 0xff, 0x00, 0xe7, 0xd2, 0xe3, 0xfe, 0xfe, + 0x51, 0xe7, 0x68, 0xff, 0x00, 0xf3, 0xe9, 0x71, + 0xff, 0x00, 0x7f, 0x28, 0x03, 0x36, 0x8a, 0xd2, + 0xf3, 0xb4, 0x7f, 0xf9, 0xf4, 0xb8, 0xff, 0x00, + 0xbf, 0x94, 0x79, 0xda, 0x3f, 0xfc, 0xfa, 0x5c, + 0x7f, 0xdf, 0xca, 0x00, 0xcd, 0xa5, 0x5c, 0x6e, + 0x1b, 0x81, 0x2b, 0x9e, 0x6b, 0x47, 0xce, 0xd1, + 0xff, 0x00, 0xe7, 0xd2, 0xe3, 0xfe, 0xfe, 0x51, + 0xe7, 0x68, 0xff, 0x00, 0xf3, 0xe9, 0x71, 0xff, + 0x00, 0x7f, 0x28, 0x02, 0x5b, 0xc9, 0x51, 0xe3, + 0x94, 0x4d, 0x70, 0x92, 0x42, 0x64, 0x5f, 0x21, + 0x63, 0x60, 0x4a, 0x2e, 0x7b, 0x0e, 0xdc, 0x76, + 0x35, 0x52, 0xf6, 0xed, 0x6e, 0xc2, 0x12, 0x8c, + 0xaf, 0x1f, 0xca, 0x39, 0xc8, 0xdb, 0xdb, 0xf1, + 0xfe, 0x75, 0x37, 0x9d, 0xa3, 0xff, 0x00, 0xcf, + 0xa5, 0xc7, 0xfd, 0xfc, 0xa3, 0xce, 0xd1, 0xff, + 0x00, 0xe7, 0xd2, 0xe3, 0xfe, 0xfe, 0x50, 0x01, + 0x65, 0x24, 0x5f, 0x66, 0x8a, 0x09, 0x24, 0x55, + 0x59, 0x24, 0x91, 0x1f, 0x27, 0xee, 0x82, 0xab, + 0x82, 0x7f, 0x11, 0xfa, 0x54, 0xed, 0x73, 0x04, + 0xf0, 0x3c, 0x2d, 0x22, 0xa2, 0xcc, 0x64, 0x55, + 0x24, 0xfd, 0xcc, 0x14, 0x2b, 0x9f, 0x6f, 0x97, + 0x15, 0x07, 0x9d, 0xa3, 0xff, 0x00, 0xcf, 0xa5, + 0xc7, 0xfd, 0xfc, 0xa3, 0xce, 0xd1, 0xff, 0x00, + 0xe7, 0xd2, 0xe3, 0xfe, 0xfe, 0x50, 0x05, 0x59, + 0xed, 0xd2, 0x08, 0xd7, 0x33, 0xa3, 0xca, 0x4f, + 0xdd, 0x8d, 0xb7, 0x00, 0x3e, 0xb5, 0x65, 0xaf, + 0x5a, 0x0b, 0x3b, 0x35, 0x84, 0xc4, 0x5d, 0x55, + 0xb2, 0x4a, 0x2b, 0x32, 0x9d, 0xc7, 0xb9, 0xe9, + 0x4b, 0xe7, 0x68, 0xff, 0x00, 0xf3, 0xe9, 0x71, + 0xff, 0x00, 0x7f, 0x28, 0xf3, 0xb4, 0x7f, 0xf9, + 0xf4, 0xb8, 0xff, 0x00, 0xbf, 0x94, 0x00, 0x58, + 0x4e, 0x82, 0xda, 0xe4, 0xcb, 0x20, 0x12, 0x26, + 0x64, 0x4d, 0xc7, 0x96, 0x62, 0xac, 0xbf, 0xd4, + 0x1f, 0xc2, 0xa7, 0x5b, 0x88, 0x76, 0xe9, 0xed, + 0xe6, 0x26, 0xe7, 0x96, 0x33, 0x2f, 0x3f, 0x77, + 0x67, 0xca, 0x33, 0x50, 0x79, 0xda, 0x3f, 0xfc, + 0xfa, 0x5c, 0x7f, 0xdf, 0xca, 0x3c, 0xed, 0x1f, + 0xfe, 0x7d, 0x2e, 0x3f, 0xef, 0xe5, 0x00, 0x4f, + 0x6f, 0x73, 0x08, 0xfb, 0x33, 0x99, 0x14, 0x48, + 0xd2, 0x2a, 0x3e, 0x4f, 0x45, 0x52, 0x4e, 0x7f, + 0x55, 0xff, 0x00, 0xbe, 0x6b, 0x1a, 0xb4, 0xbc, + 0xed, 0x1f, 0xfe, 0x7d, 0x2e, 0x3f, 0xef, 0xe5, + 0x1e, 0x76, 0x8f, 0xff, 0x00, 0x3e, 0x97, 0x1f, + 0xf7, 0xf2, 0x80, 0x33, 0x68, 0xad, 0x2f, 0x3b, + 0x47, 0xff, 0x00, 0x9f, 0x4b, 0x8f, 0xfb, 0xf9, + 0x47, 0x9d, 0xa3, 0xff, 0x00, 0xcf, 0xa5, 0xc7, + 0xfd, 0xfc, 0xa0, 0x0c, 0xda, 0x2b, 0x4b, 0xce, + 0xd1, 0xff, 0x00, 0xe7, 0xd2, 0xe3, 0xfe, 0xfe, + 0x51, 0xe7, 0x68, 0xff, 0x00, 0xf3, 0xe9, 0x71, + 0xff, 0x00, 0x7f, 0x28, 0x03, 0x36, 0xb7, 0xb4, + 0x5f, 0xf9, 0x05, 0xdc, 0xff, 0x00, 0xd7, 0x45, + 0xaa, 0x7e, 0x76, 0x8f, 0xff, 0x00, 0x3e, 0x97, + 0x1f, 0xf7, 0xf2, 0xb4, 0xec, 0x64, 0xb5, 0x6d, + 0x36, 0x7f, 0xb2, 0xc4, 0xf1, 0xaf, 0x98, 0xa0, + 0xef, 0x6c, 0xe6, 0x80, 0x0a, 0x28, 0xa2, 0x80, + 0x33, 0xbc, 0x43, 0xff, 0x00, 0x21, 0x21, 0xff, + 0x00, 0x5c, 0x97, 0xf9, 0x56, 0x5d, 0x74, 0xfa, + 0x9e, 0xad, 0xf6, 0x3b, 0x95, 0x87, 0xec, 0x91, + 0x49, 0x84, 0x53, 0xb9, 0xba, 0xf4, 0xaa, 0x7f, + 0xf0, 0x90, 0x7f, 0xd3, 0x85, 0xbf, 0xe5, 0x40, + 0x18, 0x94, 0x56, 0xdf, 0xfc, 0x24, 0x1f, 0xf4, + 0xe1, 0x6f, 0xf9, 0x51, 0xff, 0x00, 0x09, 0x07, + 0xfd, 0x38, 0x5b, 0xfe, 0x54, 0x01, 0x89, 0x45, + 0x6d, 0xff, 0x00, 0xc2, 0x41, 0xff, 0x00, 0x4e, + 0x16, 0xff, 0x00, 0x95, 0x1f, 0xf0, 0x90, 0x7f, + 0xd3, 0x85, 0xbf, 0xe5, 0x40, 0x18, 0x95, 0x2d, + 0xac, 0xdf, 0x67, 0xb9, 0x8a, 0x6c, 0x6e, 0xd8, + 0xc0, 0xe3, 0xd6, 0xb5, 0xbf, 0xe1, 0x20, 0xff, + 0x00, 0xa7, 0x0b, 0x7f, 0xca, 0x9c, 0xfa, 0xeb, + 0xc6, 0xc5, 0x5f, 0x4d, 0x85, 0x58, 0x75, 0x0c, + 0xb8, 0x34, 0x01, 0x9e, 0x6e, 0xa1, 0x82, 0x34, + 0x4b, 0x50, 0xed, 0xb6, 0x43, 0x26, 0x65, 0x51, + 0xc1, 0xc6, 0x07, 0x00, 0xf6, 0xaa, 0xf3, 0x4f, + 0x24, 0xe1, 0x3c, 0xd3, 0xb9, 0x94, 0x63, 0x71, + 0xea, 0x47, 0xbd, 0x6b, 0x7f, 0xc2, 0x41, 0xff, + 0x00, 0x4e, 0x16, 0xff, 0x00, 0x95, 0x48, 0xfa, + 0xc4, 0xc9, 0x18, 0x91, 0xf4, 0xa8, 0xd5, 0x0f, + 0x46, 0x28, 0x40, 0x3f, 0x8e, 0x28, 0x02, 0x84, + 0x77, 0x76, 0xbb, 0xa0, 0x9e, 0x54, 0x94, 0xcf, + 0x0a, 0xa8, 0x0a, 0xb8, 0xda, 0xdb, 0x7e, 0xee, + 0x4f, 0x6e, 0xd4, 0xc1, 0x7f, 0x2c, 0x56, 0xea, + 0x96, 0xf2, 0xc9, 0x1b, 0x96, 0x67, 0x95, 0x94, + 0xe3, 0x71, 0x3d, 0x3f, 0x97, 0xeb, 0x5a, 0x51, + 0xeb, 0x13, 0x4a, 0xac, 0xd1, 0xe9, 0x51, 0xba, + 0xaf, 0x52, 0xa8, 0x48, 0x1f, 0xa5, 0x11, 0xeb, + 0x13, 0x4a, 0xac, 0xd1, 0xe9, 0x51, 0xba, 0xaf, + 0x52, 0xa8, 0x48, 0x1f, 0xa5, 0x00, 0x67, 0xcf, + 0x7a, 0x92, 0x45, 0x36, 0x03, 0x89, 0x26, 0xf2, + 0xcb, 0x1f, 0xf6, 0x94, 0x10, 0xdf, 0x9e, 0x68, + 0x5b, 0xc8, 0xbe, 0xd7, 0x05, 0xcb, 0x2b, 0x6f, + 0x55, 0xc4, 0xb8, 0x1f, 0x78, 0xe3, 0x00, 0x8f, + 0xc3, 0x15, 0x77, 0xfb, 0x75, 0xb6, 0x6f, 0xfe, + 0xce, 0x83, 0x6e, 0x71, 0x9d, 0xbc, 0x66, 0xa4, + 0x5d, 0x5a, 0xe1, 0x83, 0x6d, 0xd2, 0x11, 0xb6, + 0xfd, 0xec, 0x46, 0x78, 0xfd, 0x28, 0x03, 0x9f, + 0xa2, 0xba, 0x08, 0xb5, 0x6b, 0x89, 0xd4, 0xb4, + 0x3a, 0x42, 0x48, 0xa0, 0xe0, 0x94, 0x8c, 0x91, + 0xfc, 0xa9, 0x9f, 0xdb, 0x8e, 0x03, 0x13, 0xa6, + 0xc3, 0x85, 0x38, 0x6f, 0x97, 0xa7, 0xd6, 0x80, + 0x30, 0xa8, 0xad, 0xbf, 0xf8, 0x48, 0x3f, 0xe9, + 0xc2, 0xdf, 0xf2, 0xa3, 0xfe, 0x12, 0x0f, 0xfa, + 0x70, 0xb7, 0xfc, 0xa8, 0x03, 0x12, 0x8a, 0xdb, + 0xff, 0x00, 0x84, 0x83, 0xfe, 0x9c, 0x2d, 0xff, + 0x00, 0x2a, 0x3f, 0xe1, 0x20, 0xff, 0x00, 0xa7, + 0x0b, 0x7f, 0xca, 0x80, 0x31, 0x28, 0xad, 0xbf, + 0xf8, 0x48, 0x3f, 0xe9, 0xc2, 0xdf, 0xf2, 0xa3, + 0xfe, 0x12, 0x0f, 0xfa, 0x70, 0xb7, 0xfc, 0xa8, + 0x03, 0x42, 0xeb, 0xef, 0x47, 0xff, 0x00, 0x5c, + 0x97, 0xf9, 0x54, 0x35, 0x62, 0xf5, 0xb7, 0xca, + 0xad, 0x8c, 0x6e, 0x45, 0x38, 0x1d, 0xb8, 0xaa, + 0xf4, 0x00, 0xeb, 0xb8, 0x66, 0x96, 0x7b, 0x5f, + 0x2e, 0x37, 0x65, 0x16, 0xf2, 0x67, 0x68, 0xc8, + 0x04, 0xab, 0x01, 0x59, 0x76, 0x76, 0x97, 0x51, + 0xaf, 0xda, 0x04, 0x13, 0x3b, 0xc4, 0xe4, 0x47, + 0x18, 0x52, 0x70, 0xfe, 0xa7, 0xd3, 0x1c, 0x7d, + 0x6b, 0x43, 0x55, 0xb5, 0x86, 0x78, 0xed, 0x0c, + 0x97, 0x91, 0xc0, 0x44, 0x7d, 0x1c, 0x1e, 0x79, + 0xac, 0xef, 0xec, 0xeb, 0x5f, 0xfa, 0x0a, 0x5b, + 0xfe, 0x46, 0x80, 0x1c, 0x44, 0xff, 0x00, 0x63, + 0x8b, 0xc9, 0xc7, 0xd9, 0xbc, 0xbf, 0xde, 0x67, + 0xa6, 0xfd, 0xc7, 0x39, 0xff, 0x00, 0x6b, 0xa5, + 0x3e, 0xf9, 0xa5, 0xb9, 0xfb, 0x64, 0x67, 0x2e, + 0x56, 0xf0, 0x24, 0x63, 0xd3, 0x3b, 0xf8, 0x1f, + 0x90, 0xa8, 0xbf, 0xb3, 0xad, 0x7f, 0xe8, 0x29, + 0x6f, 0xf9, 0x1a, 0x55, 0xb0, 0xb7, 0x46, 0x56, + 0x5d, 0x56, 0xdf, 0x20, 0xe4, 0x70, 0x68, 0x02, + 0x0d, 0x32, 0x29, 0x5f, 0x52, 0x85, 0x51, 0x19, + 0xb6, 0xc8, 0xa5, 0xc2, 0x8e, 0x80, 0x30, 0xeb, + 0x50, 0x4f, 0x14, 0x91, 0x4e, 0xc9, 0x22, 0x14, + 0x6c, 0xf4, 0x61, 0x8a, 0xba, 0x74, 0xeb, 0x62, + 0x72, 0x75, 0x5b, 0x7c, 0xfd, 0x0d, 0x1f, 0xd9, + 0xd6, 0xbf, 0xf4, 0x14, 0xb7, 0xfc, 0x8d, 0x00, + 0x4d, 0x25, 0xb4, 0x97, 0x06, 0x43, 0x3c, 0x1e, + 0x54, 0xad, 0xd2, 0x74, 0x6f, 0x96, 0x56, 0x24, + 0x7e, 0x79, 0xf6, 0xa6, 0xdc, 0x5c, 0x45, 0xf6, + 0x52, 0xe6, 0x04, 0x99, 0x4d, 0xcc, 0x81, 0x37, + 0x16, 0x18, 0x01, 0x57, 0x1d, 0x08, 0xed, 0x51, + 0xff, 0x00, 0x67, 0x5a, 0xff, 0x00, 0xd0, 0x52, + 0xdf, 0xf2, 0x34, 0x7f, 0x67, 0x5a, 0xff, 0x00, + 0xd0, 0x52, 0xdf, 0xf2, 0x34, 0x01, 0x0e, 0xa8, + 0x41, 0xbe, 0x62, 0x06, 0xd0, 0x51, 0x38, 0x1d, + 0xbe, 0x41, 0x56, 0xde, 0xc2, 0xf2, 0x44, 0xb3, + 0x43, 0x14, 0xa8, 0x7c, 0xb6, 0x0e, 0xc5, 0x4f, + 0x1f, 0x33, 0x13, 0xfa, 0x76, 0xa8, 0xbf, 0xb3, + 0xad, 0x7f, 0xe8, 0x29, 0x6f, 0xf9, 0x1a, 0x3f, + 0xb3, 0xad, 0x7f, 0xe8, 0x29, 0x6f, 0xf9, 0x1a, + 0x00, 0x8e, 0xeb, 0x6a, 0x48, 0xa9, 0x71, 0x6d, + 0x3c, 0x68, 0x91, 0xed, 0x89, 0x49, 0xda, 0x71, + 0x93, 0xc9, 0xc8, 0xf5, 0x26, 0xae, 0xcf, 0xe7, + 0x79, 0x72, 0xf9, 0x99, 0xfb, 0x3f, 0x91, 0x16, + 0xcf, 0x4d, 0xf8, 0x4e, 0x9e, 0xfd, 0x7f, 0x0a, + 0xad, 0xfd, 0x9d, 0x6b, 0xff, 0x00, 0x41, 0x4b, + 0x7f, 0xc8, 0xd1, 0xfd, 0x9d, 0x6b, 0xff, 0x00, + 0x41, 0x4b, 0x7f, 0xc8, 0xd0, 0x03, 0xf5, 0x36, + 0x95, 0xa0, 0x90, 0x06, 0x73, 0x1a, 0xde, 0x4b, + 0xb8, 0x67, 0x81, 0xd3, 0x1f, 0xd7, 0xf5, 0xa8, + 0xe1, 0xb7, 0xb8, 0x8a, 0xcf, 0xed, 0x22, 0x19, + 0x64, 0x67, 0x8d, 0x95, 0x48, 0x52, 0x55, 0x10, + 0xe4, 0x13, 0xfc, 0xff, 0x00, 0x9d, 0x2f, 0xf6, + 0x75, 0xaf, 0xfd, 0x05, 0x2d, 0xff, 0x00, 0x23, + 0x47, 0xf6, 0x75, 0xaf, 0xfd, 0x05, 0x2d, 0xff, + 0x00, 0x23, 0x40, 0x06, 0x9a, 0xc3, 0xec, 0xd3, + 0x23, 0x1c, 0x24, 0xb2, 0xa4, 0x67, 0xf1, 0x57, + 0x19, 0xfc, 0x0e, 0x0f, 0xe1, 0x56, 0x18, 0xc8, + 0xab, 0x04, 0x50, 0xec, 0x2d, 0x0c, 0x8f, 0x18, + 0x0f, 0xd1, 0xbe, 0x41, 0xb8, 0x7e, 0x24, 0xb7, + 0xe7, 0x55, 0xff, 0x00, 0xb3, 0xad, 0x7f, 0xe8, + 0x29, 0x6f, 0xf9, 0x1a, 0x3f, 0xb3, 0xad, 0x7f, + 0xe8, 0x29, 0x6f, 0xf9, 0x1a, 0x00, 0x9e, 0x18, + 0x52, 0x29, 0x63, 0x77, 0x81, 0xed, 0xd8, 0xac, + 0xa1, 0xa1, 0xdd, 0xd4, 0x79, 0x67, 0x91, 0x9e, + 0x47, 0xe3, 0x54, 0xd6, 0xe1, 0x4b, 0x41, 0x15, + 0xaa, 0xf9, 0x5b, 0x65, 0xde, 0x1a, 0x57, 0x07, + 0xe6, 0xe3, 0x1c, 0xe0, 0x71, 0x52, 0xff, 0x00, + 0x67, 0x5a, 0xff, 0x00, 0xd0, 0x52, 0xdf, 0xf2, + 0x34, 0x7f, 0x67, 0x5a, 0xff, 0x00, 0xd0, 0x52, + 0xdf, 0xf2, 0x34, 0x00, 0x97, 0x70, 0x62, 0xd5, + 0xe5, 0x92, 0xd8, 0xda, 0xc9, 0xb8, 0x60, 0x02, + 0x76, 0xc9, 0xf4, 0x06, 0xa6, 0xb6, 0x36, 0xf0, + 0x43, 0x6f, 0x0c, 0xf2, 0xba, 0x19, 0x43, 0x33, + 0xa8, 0x4c, 0x82, 0x18, 0x6d, 0x19, 0x39, 0xf4, + 0xe7, 0xf1, 0xa8, 0xbf, 0xb3, 0xad, 0x7f, 0xe8, + 0x29, 0x6f, 0xf9, 0x1a, 0x3f, 0xb3, 0xad, 0x7f, + 0xe8, 0x29, 0x6f, 0xf9, 0x1a, 0x00, 0x74, 0xd6, + 0x37, 0x4d, 0x15, 0xa2, 0xa4, 0x6c, 0x3c, 0xb5, + 0x65, 0x67, 0xe8, 0xaa, 0x44, 0x8d, 0xd4, 0xf6, + 0xa7, 0x5d, 0xa9, 0xbf, 0x47, 0xfb, 0x18, 0xdf, + 0xb6, 0xe2, 0x46, 0x28, 0xbd, 0x48, 0x38, 0xc3, + 0x63, 0xf0, 0x35, 0x1f, 0xf6, 0x75, 0xaf, 0xfd, + 0x05, 0x2d, 0xff, 0x00, 0x23, 0x47, 0xf6, 0x75, + 0xaf, 0xfd, 0x05, 0x2d, 0xff, 0x00, 0x23, 0x40, + 0x1a, 0x1a, 0x6a, 0x3c, 0x76, 0x17, 0x48, 0xee, + 0x19, 0x95, 0xd0, 0x1c, 0x1c, 0xe3, 0x8e, 0x9f, + 0x85, 0x3e, 0x96, 0xc2, 0xde, 0x38, 0x34, 0xd9, + 0xc4, 0x77, 0x29, 0x38, 0x32, 0x29, 0x25, 0x3b, + 0x52, 0x50, 0x05, 0xd7, 0xff, 0x00, 0x51, 0x0f, + 0xfb, 0xc9, 0xfc, 0xc5, 0x14, 0x3f, 0xfc, 0x7b, + 0xc3, 0xfe, 0xf2, 0x7f, 0x31, 0x45, 0x00, 0x3e, + 0xdf, 0xee, 0xbf, 0xfd, 0x74, 0x6f, 0xe6, 0x6a, + 0x5a, 0x8a, 0xdf, 0xee, 0xbf, 0xfd, 0x74, 0x7f, + 0xe6, 0x6a, 0x5a, 0x00, 0xcf, 0xba, 0xff, 0x00, + 0x8f, 0x86, 0xfc, 0x3f, 0x95, 0x67, 0x6b, 0xbf, + 0xf1, 0xef, 0x63, 0xf4, 0x7f, 0xfd, 0x0a, 0xb4, + 0x6e, 0xbf, 0xe3, 0xe1, 0xbf, 0x0f, 0xe5, 0x55, + 0x35, 0x3b, 0x77, 0xba, 0xd3, 0xe3, 0x78, 0x86, + 0xe6, 0xb7, 0x2d, 0xb9, 0x47, 0x5d, 0xa7, 0xbd, + 0x00, 0x65, 0x69, 0xca, 0xad, 0x72, 0x59, 0x94, + 0x30, 0x8e, 0x37, 0x93, 0x69, 0x1c, 0x12, 0x14, + 0x91, 0x56, 0x21, 0xb8, 0x96, 0xfa, 0x2b, 0x88, + 0xae, 0x5b, 0xcc, 0xdb, 0x1e, 0xf4, 0x62, 0x39, + 0x52, 0x08, 0xe9, 0xed, 0xcd, 0x52, 0xb6, 0x99, + 0xad, 0xe7, 0x59, 0x54, 0x02, 0x57, 0xb1, 0xe8, + 0x47, 0x71, 0x57, 0x26, 0x92, 0x05, 0xb1, 0x2f, + 0x68, 0xab, 0x19, 0x97, 0x89, 0x55, 0xa4, 0xcb, + 0xaf, 0x3d, 0x00, 0xf4, 0xe8, 0x73, 0x40, 0x0d, + 0x36, 0x31, 0xf9, 0xf7, 0x51, 0x83, 0x21, 0xf2, + 0xa7, 0x11, 0xae, 0x06, 0x49, 0x05, 0x88, 0xfc, + 0x4f, 0x15, 0x24, 0x9a, 0x74, 0x66, 0x4b, 0x71, + 0x19, 0x64, 0x12, 0xc8, 0x63, 0x60, 0xce, 0xae, + 0x46, 0x31, 0xcf, 0xcb, 0xf5, 0xe9, 0x48, 0x35, + 0x45, 0x49, 0x5e, 0x58, 0xed, 0xb0, 0xf2, 0x48, + 0xb2, 0xb9, 0x2f, 0x9c, 0x91, 0x9e, 0x9c, 0x70, + 0x39, 0xa8, 0xd6, 0xfd, 0x23, 0x58, 0x96, 0x18, + 0x36, 0x08, 0xa5, 0xf3, 0x17, 0x2f, 0x9c, 0xfa, + 0x83, 0xc7, 0x3d, 0x28, 0x02, 0xcc, 0x50, 0xda, + 0xcf, 0x66, 0xaa, 0xa6, 0x54, 0x8b, 0xcc, 0x91, + 0x8e, 0x48, 0x2c, 0x30, 0x99, 0xfe, 0x95, 0x14, + 0x36, 0x30, 0xcf, 0x09, 0x75, 0x59, 0x50, 0xb2, + 0xbb, 0x21, 0x77, 0x5c, 0x71, 0x9e, 0x31, 0xd5, + 0xba, 0x75, 0x14, 0xc1, 0x7f, 0x12, 0x47, 0xe5, + 0xc3, 0x6d, 0xb1, 0x3e, 0x7e, 0xb2, 0x64, 0xfc, + 0xcb, 0xb7, 0xd2, 0x88, 0x6f, 0xd2, 0x31, 0x11, + 0x6b, 0x7d, 0xef, 0x1a, 0x18, 0xf7, 0x6f, 0xc7, + 0xca, 0x73, 0xdb, 0x1d, 0x79, 0xeb, 0x40, 0x0f, + 0xba, 0xb7, 0xb7, 0x61, 0x23, 0x44, 0x8e, 0x9e, + 0x5d, 0xb4, 0x6e, 0x06, 0xe0, 0x72, 0x4e, 0xdf, + 0x6f, 0xf6, 0xbf, 0x3a, 0x6b, 0xda, 0x5b, 0xc5, + 0x68, 0xd3, 0x39, 0x90, 0x9d, 0xb1, 0xe0, 0x02, + 0x3a, 0xb2, 0x93, 0xe9, 0xed, 0x4c, 0x37, 0xb1, + 0xb1, 0x21, 0xa0, 0x25, 0x5a, 0x15, 0x89, 0xc0, + 0x93, 0xae, 0x31, 0x82, 0x38, 0xe3, 0xee, 0x8a, + 0x4b, 0x8b, 0xd1, 0x34, 0x26, 0x25, 0x88, 0x20, + 0x3b, 0x31, 0xf3, 0x67, 0x1b, 0x41, 0x1f, 0xd6, + 0x80, 0x27, 0x97, 0x4c, 0xd9, 0x6e, 0xc7, 0xcb, + 0x9f, 0x7a, 0x44, 0x24, 0x32, 0x15, 0xfd, 0xd9, + 0xe8, 0x48, 0x1c, 0x7b, 0xf5, 0xcf, 0x6a, 0x7d, + 0x9c, 0x92, 0xa6, 0x94, 0xbe, 0x55, 0xe2, 0xda, + 0xe6, 0x76, 0xc9, 0x25, 0x86, 0xef, 0x95, 0x7d, + 0x01, 0xaa, 0x92, 0xdd, 0xc7, 0x2c, 0x5f, 0x34, + 0x07, 0xce, 0xda, 0x14, 0xbe, 0xf3, 0x8e, 0x3b, + 0xe3, 0xd7, 0x8a, 0x21, 0xb9, 0x81, 0x6d, 0x45, + 0xbc, 0xf6, 0xef, 0x20, 0x0e, 0x5c, 0x15, 0x93, + 0x6f, 0x50, 0x07, 0xa1, 0xf4, 0xa0, 0x09, 0x0a, + 0x47, 0x22, 0x5c, 0x5c, 0xdd, 0x4c, 0xf3, 0xb2, + 0x48, 0x8b, 0xb9, 0x1b, 0xef, 0xe4, 0x1e, 0xe4, + 0x7b, 0x53, 0xe6, 0xb2, 0xb5, 0xb6, 0x62, 0x27, + 0x92, 0x5c, 0x34, 0x8c, 0x88, 0xcb, 0x8f, 0x94, + 0x0c, 0x72, 0x7d, 0x7a, 0xf4, 0xaa, 0xb2, 0x5c, + 0x47, 0xe4, 0xc9, 0x0c, 0x51, 0x32, 0x23, 0xba, + 0xb8, 0xdc, 0xfb, 0x88, 0xc0, 0x23, 0xd3, 0xde, + 0xac, 0x3e, 0xa3, 0x1c, 0xac, 0x5a, 0x5b, 0x60, + 0xf8, 0x72, 0xf1, 0x82, 0xdc, 0x02, 0x40, 0xe0, + 0xf1, 0xc8, 0xe0, 0x50, 0x02, 0x45, 0x67, 0x03, + 0x08, 0x62, 0x76, 0x93, 0xcf, 0x9d, 0x0b, 0xa9, + 0x18, 0xda, 0xbd, 0x70, 0x08, 0xfc, 0x2a, 0x78, + 0xad, 0xe1, 0x88, 0x5c, 0x42, 0x85, 0xcc, 0xff, + 0x00, 0x67, 0x05, 0x89, 0xc6, 0xd3, 0x9d, 0xa7, + 0x03, 0xf3, 0xaa, 0xd1, 0xdf, 0x2a, 0x24, 0x64, + 0xc3, 0xba, 0x68, 0x94, 0xa2, 0x49, 0xbb, 0x00, + 0x03, 0x9e, 0xa3, 0xbe, 0x32, 0x69, 0xdf, 0xda, + 0x0b, 0xb5, 0xc8, 0x83, 0x13, 0x3c, 0x42, 0x36, + 0x93, 0x7f, 0xa6, 0x30, 0x71, 0x8f, 0x61, 0x40, + 0x0f, 0xbb, 0xd3, 0x84, 0x11, 0x48, 0xcb, 0x1d, + 0xc2, 0xf9, 0x4e, 0x14, 0xbc, 0x8b, 0x85, 0x7e, + 0xd9, 0x5e, 0x2a, 0xb5, 0xfc, 0x50, 0xc1, 0x77, + 0x24, 0x30, 0xef, 0x22, 0x36, 0x2a, 0x4b, 0x1e, + 0xa7, 0x34, 0xb7, 0x37, 0x51, 0xcf, 0xb9, 0xc4, + 0x05, 0x64, 0x76, 0xdc, 0xcd, 0xbc, 0x91, 0x9f, + 0x61, 0xdb, 0xf5, 0xa8, 0xae, 0x66, 0xfb, 0x45, + 0xcc, 0xb3, 0x6d, 0xdb, 0xe6, 0x39, 0x6c, 0x67, + 0x38, 0xc9, 0xa0, 0x0d, 0x4b, 0xbb, 0x6b, 0x77, + 0xbc, 0xdd, 0x29, 0x97, 0x74, 0xd7, 0x06, 0x2f, + 0x90, 0x81, 0x8e, 0x17, 0x9e, 0x9e, 0xf5, 0x02, + 0xd8, 0xdb, 0xe6, 0x08, 0x59, 0xa4, 0xf3, 0xa6, + 0x46, 0x20, 0x82, 0x36, 0x82, 0x0b, 0x01, 0xc6, + 0x3b, 0xe2, 0xa3, 0x9b, 0x50, 0xf3, 0x65, 0x8e, + 0x4f, 0x2b, 0x1b, 0x26, 0x32, 0xe3, 0x77, 0x5c, + 0xed, 0xe3, 0xa7, 0xfb, 0x3f, 0xad, 0x4d, 0x25, + 0xec, 0x48, 0x96, 0xf2, 0x08, 0x83, 0x4c, 0x23, + 0x6c, 0x10, 0xff, 0x00, 0x70, 0x96, 0x6e, 0xa3, + 0xf1, 0xcf, 0x6a, 0x00, 0x82, 0x3b, 0x48, 0xda, + 0x4b, 0x55, 0x2c, 0xd8, 0x96, 0x16, 0x76, 0xf6, + 0x20, 0xb7, 0xff, 0x00, 0x12, 0x2a, 0xc3, 0x5a, + 0xdb, 0x4d, 0x70, 0x16, 0x38, 0xa4, 0xe2, 0xdd, + 0x1c, 0x46, 0xae, 0x37, 0x39, 0x21, 0x7a, 0x71, + 0xef, 0x55, 0xe1, 0xbe, 0x48, 0xd6, 0x22, 0xd0, + 0x6f, 0x92, 0x24, 0x64, 0x56, 0xdf, 0x81, 0x83, + 0x9e, 0xd8, 0xeb, 0xf3, 0x1a, 0x46, 0xba, 0x82, + 0x42, 0x86, 0x5b, 0x62, 0xd8, 0x8d, 0x50, 0x91, + 0x26, 0x0f, 0xca, 0x00, 0x04, 0x71, 0xc7, 0x03, + 0xde, 0x80, 0x2b, 0xdc, 0x22, 0xc7, 0x33, 0xa2, + 0x07, 0x0a, 0x0f, 0x47, 0x18, 0x61, 0xec, 0x6b, + 0x63, 0x47, 0xff, 0x00, 0x90, 0x65, 0xc7, 0xfd, + 0x75, 0x5f, 0xe5, 0x59, 0x37, 0x53, 0x9b, 0x9b, + 0x83, 0x26, 0xdc, 0x64, 0x00, 0x06, 0x73, 0xd0, + 0x60, 0x7f, 0x2a, 0xdd, 0xb2, 0xb7, 0x7b, 0x3d, + 0x34, 0x47, 0x28, 0xdb, 0x2c, 0xcf, 0xbc, 0xa9, + 0xea, 0xab, 0x8e, 0x33, 0x40, 0x0e, 0xa2, 0x8a, + 0x28, 0x03, 0x3b, 0xc4, 0x3f, 0xf2, 0x12, 0x1f, + 0xf5, 0xc9, 0x7f, 0x95, 0x65, 0xd6, 0xbe, 0xbf, + 0x14, 0xaf, 0xa8, 0x06, 0x48, 0xdd, 0x87, 0x96, + 0xbc, 0x85, 0xcf, 0x6a, 0xcd, 0xfb, 0x3c, 0xff, + 0x00, 0xf3, 0xc6, 0x4f, 0xfb, 0xe4, 0xd0, 0x04, + 0x54, 0x54, 0xbf, 0x67, 0x9f, 0xfe, 0x78, 0xc9, + 0xff, 0x00, 0x7c, 0x9a, 0x3e, 0xcf, 0x3f, 0xfc, + 0xf1, 0x93, 0xfe, 0xf9, 0x34, 0x01, 0x15, 0x15, + 0x2f, 0xd9, 0xe7, 0xff, 0x00, 0x9e, 0x32, 0x7f, + 0xdf, 0x26, 0x8f, 0xb3, 0xcf, 0xff, 0x00, 0x3c, + 0x64, 0xff, 0x00, 0xbe, 0x4d, 0x00, 0x4f, 0xa7, + 0x40, 0xf2, 0xca, 0xd2, 0xac, 0x4d, 0x2f, 0x92, + 0x37, 0x6c, 0x55, 0xce, 0x4f, 0x61, 0xf9, 0xff, + 0x00, 0x2a, 0xbb, 0x35, 0xaf, 0x9f, 0xa9, 0x4c, + 0x97, 0x4a, 0xd1, 0x6e, 0x54, 0x7f, 0x39, 0xb8, + 0xdb, 0xc0, 0x1d, 0xfd, 0x7a, 0x7d, 0x7f, 0x1a, + 0xcb, 0x10, 0x5c, 0x0e, 0x91, 0x4a, 0x3f, 0xe0, + 0x26, 0xa5, 0x9f, 0xed, 0x73, 0xbb, 0x33, 0x45, + 0x20, 0xdd, 0x8c, 0x80, 0xa7, 0x1c, 0x0c, 0x0a, + 0x00, 0x92, 0xda, 0x34, 0x6d, 0x62, 0x28, 0x9a, + 0x2f, 0x2d, 0x3c, 0xe0, 0xbe, 0x5b, 0x76, 0xe7, + 0xa1, 0xa7, 0xd9, 0x4f, 0x34, 0xf7, 0xd2, 0x24, + 0xce, 0xcc, 0xb2, 0xab, 0x89, 0x01, 0x3c, 0x7d, + 0xd2, 0x7f, 0x4a, 0xab, 0xe5, 0xdd, 0x79, 0x81, + 0xfc, 0xb9, 0xb7, 0x8e, 0x43, 0x6d, 0x39, 0xab, + 0xed, 0x2b, 0xcb, 0x69, 0x2b, 0x79, 0x02, 0x1b, + 0xa6, 0xc8, 0x76, 0x58, 0x5b, 0x32, 0x29, 0xf4, + 0xf4, 0x3e, 0xbd, 0x28, 0x02, 0x2b, 0x79, 0xa2, + 0x96, 0x08, 0x22, 0x37, 0x2f, 0x6d, 0x34, 0x44, + 0xec, 0x6c, 0x65, 0x5b, 0x27, 0x39, 0x38, 0xe8, + 0x6a, 0x4d, 0xe1, 0x8a, 0x5b, 0xcb, 0x72, 0xd6, + 0xb7, 0x50, 0x48, 0xc3, 0x76, 0x32, 0x8c, 0xdb, + 0xba, 0xf1, 0xd3, 0x9a, 0x86, 0x29, 0xae, 0x52, + 0x34, 0x46, 0xb3, 0x59, 0x7c, 0xbf, 0xb8, 0x64, + 0x8c, 0x92, 0xbd, 0xff, 0x00, 0xce, 0x69, 0xc2, + 0xe6, 0xec, 0xe0, 0xcd, 0x68, 0xb3, 0x38, 0x24, + 0xab, 0xc9, 0x19, 0x24, 0x64, 0xe7, 0xf9, 0xfa, + 0xd0, 0x03, 0xcc, 0x12, 0x3c, 0x29, 0x6f, 0x2f, + 0xfa, 0xc6, 0xbd, 0x64, 0x6c, 0x7a, 0xe0, 0x66, + 0x9c, 0x6e, 0xa2, 0xbb, 0x65, 0xff, 0x00, 0x48, + 0x7b, 0x59, 0x52, 0x46, 0x64, 0x38, 0xca, 0x1c, + 0xb6, 0x47, 0x4e, 0x9e, 0x9f, 0x85, 0x57, 0x59, + 0xaf, 0x47, 0x26, 0x06, 0x66, 0xde, 0xd2, 0x6e, + 0x28, 0x73, 0xb8, 0x8c, 0x66, 0x96, 0x29, 0xae, + 0x52, 0x34, 0x46, 0xb3, 0x59, 0x7c, 0xbf, 0xb8, + 0x64, 0x8c, 0x92, 0xbd, 0xff, 0x00, 0xce, 0x68, + 0x02, 0x73, 0x0b, 0xfd, 0x89, 0x96, 0x5b, 0x94, + 0x82, 0x45, 0xba, 0x7d, 0xc5, 0xb3, 0xc9, 0xc2, + 0xe7, 0x18, 0x14, 0xdb, 0x89, 0x56, 0x78, 0x6f, + 0xa4, 0x42, 0x59, 0x4b, 0x44, 0x37, 0x1f, 0xe2, + 0xc0, 0x23, 0x3f, 0x8e, 0x33, 0x55, 0xa5, 0x37, + 0x72, 0xc5, 0xb1, 0xe1, 0x73, 0x99, 0x1a, 0x42, + 0xdb, 0x0e, 0x49, 0x38, 0xcf, 0xf2, 0xa6, 0xa2, + 0xdc, 0xa4, 0x12, 0x44, 0x20, 0x7d, 0xb2, 0x10, + 0x4f, 0xc8, 0x73, 0xc7, 0xff, 0x00, 0xae, 0x80, + 0x2b, 0x51, 0x52, 0xfd, 0x9e, 0x7f, 0xf9, 0xe3, + 0x27, 0xfd, 0xf2, 0x68, 0xfb, 0x3c, 0xff, 0x00, + 0xf3, 0xc6, 0x4f, 0xfb, 0xe4, 0xd0, 0x04, 0x54, + 0x54, 0xbf, 0x67, 0x9f, 0xfe, 0x78, 0xc9, 0xff, + 0x00, 0x7c, 0x9a, 0x3e, 0xcf, 0x3f, 0xfc, 0xf1, + 0x93, 0xfe, 0xf9, 0x34, 0x01, 0x15, 0x15, 0x2f, + 0xd9, 0xe7, 0xff, 0x00, 0x9e, 0x32, 0x7f, 0xdf, + 0x26, 0x8f, 0xb3, 0xcf, 0xff, 0x00, 0x3c, 0x64, + 0xff, 0x00, 0xbe, 0x4d, 0x00, 0x74, 0xd7, 0x5f, + 0x7a, 0x3f, 0xfa, 0xe4, 0xbf, 0xca, 0xa1, 0xa9, + 0xae, 0xb8, 0x68, 0xfd, 0xa3, 0x5f, 0xe5, 0x50, + 0xd0, 0x05, 0x3f, 0x10, 0x7d, 0xdb, 0x2f, 0xfa, + 0xe6, 0x7f, 0x9d, 0x63, 0x57, 0x49, 0x7f, 0xb0, + 0xc9, 0x6a, 0x8f, 0x12, 0xbe, 0xeb, 0x69, 0x30, + 0x5b, 0x9d, 0xb8, 0x56, 0x3c, 0x7e, 0x95, 0x93, + 0xa7, 0xb2, 0x7d, 0xd7, 0x82, 0x33, 0x0a, 0x9d, + 0xd3, 0x48, 0xe3, 0x27, 0x6f, 0xa0, 0xf4, 0x3f, + 0x4a, 0x00, 0xa3, 0x45, 0x5c, 0x30, 0xdb, 0xc5, + 0x14, 0x5b, 0xcc, 0x9e, 0x74, 0x89, 0xbc, 0x11, + 0x8d, 0xa3, 0x9e, 0x06, 0x3f, 0x0e, 0xb5, 0x2e, + 0xa5, 0x14, 0x26, 0x4b, 0xb9, 0xa3, 0xdf, 0xbd, + 0x2e, 0x0a, 0xbe, 0xe2, 0x30, 0x73, 0xb8, 0xf1, + 0xe9, 0xd2, 0x80, 0x33, 0xa8, 0xab, 0x5a, 0x69, + 0x4f, 0xb7, 0xc0, 0xaf, 0x12, 0xc8, 0x19, 0xd5, + 0x70, 0xe3, 0x23, 0x92, 0x2a, 0xbb, 0xf0, 0xec, + 0x07, 0xad, 0x00, 0x36, 0x8a, 0xd4, 0xb8, 0x0b, + 0x2c, 0x52, 0x9b, 0x54, 0xb7, 0x92, 0x10, 0x32, + 0xa1, 0x57, 0x6c, 0x91, 0x8c, 0xf7, 0xee, 0x7f, + 0x5a, 0x7d, 0xdc, 0x11, 0x49, 0x00, 0x06, 0x68, + 0x62, 0x31, 0xca, 0xd1, 0x6e, 0x70, 0x7e, 0x60, + 0xaa, 0x83, 0xb0, 0x3e, 0xff, 0x00, 0x9d, 0x00, + 0x64, 0x51, 0x56, 0xb5, 0x24, 0x48, 0xef, 0x19, + 0x10, 0x2e, 0xd0, 0x89, 0xf7, 0x46, 0x01, 0xf9, + 0x47, 0x35, 0x34, 0xaf, 0x18, 0xfb, 0x1c, 0xa9, + 0x6a, 0x84, 0xb4, 0x6d, 0x84, 0x03, 0x82, 0x77, + 0x30, 0x19, 0xf5, 0xed, 0x40, 0x19, 0xf4, 0x55, + 0xeb, 0xa8, 0x4c, 0xb2, 0x80, 0x8b, 0x12, 0xc8, + 0x91, 0xfe, 0xf8, 0x06, 0x54, 0x1b, 0xb2, 0x7a, + 0x76, 0xe9, 0x8e, 0x95, 0x35, 0xd4, 0x30, 0xcb, + 0x23, 0x90, 0x64, 0x13, 0x47, 0x0c, 0x4e, 0x4e, + 0x46, 0xd2, 0x36, 0xa8, 0xc7, 0xeb, 0x40, 0x19, + 0x74, 0x56, 0x86, 0xa1, 0x14, 0x51, 0xc4, 0xc4, + 0x07, 0x69, 0x7e, 0xd3, 0x2a, 0x99, 0x19, 0xb3, + 0x90, 0x31, 0xd7, 0x8f, 0x7f, 0xe7, 0x49, 0x6e, + 0xc8, 0x6d, 0x1f, 0x7c, 0x11, 0x88, 0x95, 0x18, + 0x17, 0x23, 0xe6, 0x67, 0x3f, 0x77, 0x07, 0xf2, + 0xe3, 0xd0, 0x50, 0x05, 0x0a, 0x2a, 0xfd, 0x8c, + 0x51, 0xcb, 0x65, 0x74, 0xac, 0x8a, 0x64, 0x62, + 0xa1, 0x18, 0x8e, 0x41, 0xc3, 0x1e, 0x3e, 0xbb, + 0x71, 0x53, 0xec, 0xb6, 0x82, 0xde, 0xcf, 0xce, + 0x45, 0xc8, 0x66, 0xf3, 0x18, 0xae, 0x79, 0x2a, + 0x0a, 0xe7, 0xd4, 0x0c, 0x8e, 0x3e, 0xb4, 0x01, + 0x93, 0x45, 0x6c, 0x43, 0x1b, 0x3d, 0xcc, 0x2c, + 0xd1, 0xda, 0xc8, 0x36, 0xc9, 0xb6, 0x48, 0xd5, + 0x76, 0x93, 0xb0, 0x90, 0x08, 0xe9, 0xc7, 0x5e, + 0x45, 0x41, 0x3f, 0x94, 0xa2, 0xdc, 0xdd, 0x2c, + 0x3b, 0xc4, 0x9f, 0x38, 0x83, 0x6f, 0x29, 0xc7, + 0x5d, 0xbc, 0x67, 0xad, 0x00, 0x67, 0x51, 0x5a, + 0x17, 0x80, 0xb5, 0xbb, 0x3a, 0x2d, 0xb4, 0x91, + 0x86, 0x18, 0x92, 0x15, 0xda, 0x57, 0xd8, 0x8e, + 0x0f, 0xe7, 0x52, 0xd8, 0xd9, 0x34, 0xb6, 0x4d, + 0xfe, 0x8e, 0xce, 0x67, 0x2c, 0x15, 0xc2, 0x67, + 0x66, 0xd1, 0xc7, 0x3d, 0xb2, 0x78, 0xfc, 0x28, + 0x03, 0x2a, 0x8a, 0xd0, 0x33, 0x2d, 0xbd, 0xad, + 0x98, 0xfb, 0x3c, 0x2e, 0xae, 0x84, 0xb8, 0x68, + 0xc6, 0x5b, 0xe7, 0x61, 0xf7, 0xba, 0xf6, 0xa7, + 0xdc, 0xa4, 0x7a, 0x7a, 0xbf, 0x97, 0x1c, 0x72, + 0x33, 0x4c, 0xe8, 0x1a, 0x45, 0x0d, 0xb5, 0x57, + 0x1c, 0x60, 0xf7, 0xe6, 0x80, 0x2d, 0xe8, 0xbf, + 0xf2, 0x0b, 0xb9, 0xff, 0x00, 0xae, 0x8b, 0xfc, + 0xaa, 0x7a, 0x8f, 0x4b, 0x75, 0x92, 0xc2, 0xe9, + 0xd6, 0x35, 0x8c, 0x19, 0x17, 0xe5, 0x53, 0xc0, + 0x38, 0xa9, 0x28, 0x02, 0xeb, 0xff, 0x00, 0xc7, + 0xbc, 0x3f, 0xef, 0x27, 0xf3, 0x14, 0x50, 0xff, + 0x00, 0xf1, 0xef, 0x0f, 0xfb, 0xc9, 0xfc, 0xc5, + 0x14, 0x00, 0xfb, 0x6f, 0xb8, 0xff, 0x00, 0xf5, + 0xd1, 0xff, 0x00, 0xf4, 0x23, 0x53, 0x54, 0x56, + 0xdf, 0x71, 0xff, 0x00, 0xeb, 0xa3, 0xff, 0x00, + 0xe8, 0x46, 0xa5, 0xa0, 0x0c, 0xeb, 0xaf, 0xf8, + 0xf8, 0x7f, 0xc3, 0xf9, 0x54, 0x68, 0xec, 0x8c, + 0x19, 0x18, 0xa9, 0x1d, 0xc5, 0x49, 0x75, 0xff, + 0x00, 0x1f, 0x0f, 0xf8, 0x7f, 0x2a, 0x56, 0x31, + 0x5a, 0xaa, 0xf9, 0x8a, 0x24, 0x95, 0x86, 0xed, + 0xa7, 0xa2, 0x8f, 0x7a, 0x4d, 0xa4, 0xae, 0xc0, + 0x6b, 0x49, 0x1b, 0x9d, 0xcf, 0x6b, 0x6c, 0xed, + 0xdd, 0x9a, 0x20, 0x49, 0xa4, 0xdd, 0x0f, 0xfc, + 0xf9, 0x5a, 0x7f, 0xdf, 0x91, 0x4b, 0xf6, 0xf1, + 0xff, 0x00, 0x3c, 0x20, 0xff, 0x00, 0xbe, 0x28, + 0xfb, 0x78, 0xff, 0x00, 0x9e, 0x10, 0x7f, 0xdf, + 0x15, 0x9f, 0xb5, 0x88, 0xae, 0x26, 0xe8, 0x7f, + 0xe7, 0xca, 0xd3, 0xfe, 0xfc, 0x8a, 0x37, 0x43, + 0xff, 0x00, 0x3e, 0x56, 0x9f, 0xf7, 0xe4, 0x52, + 0xfd, 0xbc, 0x7f, 0xcf, 0x08, 0x3f, 0xef, 0x8a, + 0x3e, 0xde, 0x3f, 0xe7, 0x84, 0x1f, 0xf7, 0xc5, + 0x1e, 0xd6, 0x21, 0x71, 0x37, 0x43, 0xff, 0x00, + 0x3e, 0x56, 0x9f, 0xf7, 0xe4, 0x51, 0xba, 0x1f, + 0xf9, 0xf2, 0xb4, 0xff, 0x00, 0xbf, 0x22, 0x97, + 0xed, 0xe3, 0xfe, 0x78, 0x41, 0xff, 0x00, 0x7c, + 0x51, 0xf6, 0xf1, 0xff, 0x00, 0x3c, 0x20, 0xff, + 0x00, 0xbe, 0x28, 0xf6, 0xb1, 0x0b, 0x89, 0xba, + 0x1f, 0xf9, 0xf2, 0xb4, 0xff, 0x00, 0xbf, 0x22, + 0x8d, 0xd0, 0xff, 0x00, 0xcf, 0x95, 0xa7, 0xfd, + 0xf9, 0x14, 0xbf, 0x6f, 0x1f, 0xf3, 0xc2, 0x0f, + 0xfb, 0xe2, 0x8f, 0xb7, 0x8f, 0xf9, 0xe1, 0x07, + 0xfd, 0xf1, 0x47, 0xb5, 0x88, 0x5c, 0x4d, 0xd0, + 0xff, 0x00, 0xcf, 0x95, 0xa7, 0xfd, 0xf9, 0x14, + 0x6e, 0x87, 0xfe, 0x7c, 0xad, 0x3f, 0xef, 0xc8, + 0xa5, 0xfb, 0x78, 0xff, 0x00, 0x9e, 0x10, 0x7f, + 0xdf, 0x14, 0x7d, 0xbc, 0x7f, 0xcf, 0x08, 0x3f, + 0xef, 0x8a, 0x3d, 0xac, 0x42, 0xe2, 0x6e, 0x87, + 0xfe, 0x7c, 0xad, 0x3f, 0xef, 0xc8, 0xa3, 0x74, + 0x3f, 0xf3, 0xe5, 0x69, 0xff, 0x00, 0x7e, 0x45, + 0x2f, 0xdb, 0xc7, 0xfc, 0xf0, 0x83, 0xfe, 0xf8, + 0xa3, 0xed, 0xe3, 0xfe, 0x78, 0x41, 0xff, 0x00, + 0x7c, 0x51, 0xed, 0x62, 0x17, 0x13, 0x74, 0x3f, + 0xf3, 0xe5, 0x69, 0xff, 0x00, 0x7e, 0x45, 0x1b, + 0xa1, 0xff, 0x00, 0x9f, 0x2b, 0x4f, 0xfb, 0xf2, + 0x29, 0x7e, 0xde, 0x3f, 0xe7, 0x84, 0x1f, 0xf7, + 0xc5, 0x1f, 0x6f, 0x1f, 0xf3, 0xc2, 0x0f, 0xfb, + 0xe2, 0x8f, 0x6b, 0x10, 0xb8, 0x9b, 0xa1, 0xff, + 0x00, 0x9f, 0x2b, 0x4f, 0xfb, 0xf2, 0x28, 0xdd, + 0x0f, 0xfc, 0xf9, 0x5a, 0x7f, 0xdf, 0x91, 0x4b, + 0xf6, 0xf1, 0xff, 0x00, 0x3c, 0x20, 0xff, 0x00, + 0xbe, 0x28, 0xfb, 0x78, 0xff, 0x00, 0x9e, 0x10, + 0x7f, 0xdf, 0x14, 0x7b, 0x58, 0x85, 0xc4, 0xdd, + 0x0f, 0xfc, 0xf9, 0x5a, 0x7f, 0xdf, 0x91, 0x46, + 0xe8, 0x7f, 0xe7, 0xca, 0xd3, 0xfe, 0xfc, 0x8a, + 0x5f, 0xb7, 0x8f, 0xf9, 0xe1, 0x07, 0xfd, 0xf1, + 0x47, 0xdb, 0xc7, 0xfc, 0xf0, 0x83, 0xfe, 0xf8, + 0xa3, 0xda, 0xc4, 0x2e, 0x26, 0xe8, 0x7f, 0xe7, + 0xca, 0xd3, 0xfe, 0xfc, 0x8a, 0x37, 0x43, 0xff, + 0x00, 0x3e, 0x56, 0x9f, 0xf7, 0xe4, 0x52, 0xfd, + 0xbc, 0x7f, 0xcf, 0x08, 0x3f, 0xef, 0x8a, 0x3e, + 0xde, 0x3f, 0xe7, 0x84, 0x1f, 0xf7, 0xc5, 0x1e, + 0xd6, 0x21, 0x70, 0x59, 0x84, 0x67, 0x31, 0x41, + 0x04, 0x47, 0xd5, 0x22, 0x00, 0xd3, 0x19, 0x8b, + 0x31, 0x66, 0x24, 0x93, 0xd4, 0x9a, 0x7f, 0xdb, + 0xc7, 0xfc, 0xf0, 0x83, 0xfe, 0xf8, 0xa7, 0x47, + 0x2c, 0x17, 0x4d, 0xe5, 0x94, 0x58, 0xa4, 0x3f, + 0x75, 0x97, 0xa1, 0x3e, 0x84, 0x53, 0x55, 0x22, + 0xdd, 0x82, 0xe4, 0x34, 0x50, 0x41, 0x56, 0x20, + 0x8c, 0x11, 0xc5, 0x15, 0xa0, 0xc4, 0xd5, 0x75, + 0x7b, 0xbb, 0x3b, 0xb1, 0x0c, 0x25, 0x02, 0x08, + 0xd4, 0xf2, 0xb9, 0xed, 0x54, 0xbf, 0xe1, 0x22, + 0xd4, 0x7f, 0xbd, 0x1f, 0xfd, 0xf1, 0x4c, 0xf1, + 0x0f, 0xfc, 0x84, 0x87, 0xfd, 0x72, 0x5f, 0xe5, + 0x59, 0x74, 0x01, 0xaf, 0xff, 0x00, 0x09, 0x16, + 0xa3, 0xfd, 0xe8, 0xff, 0x00, 0xef, 0x8a, 0x3f, + 0xe1, 0x22, 0xd4, 0x7f, 0xbd, 0x1f, 0xfd, 0xf1, + 0x59, 0x14, 0x50, 0x06, 0xbf, 0xfc, 0x24, 0x5a, + 0x8f, 0xf7, 0xa3, 0xff, 0x00, 0xbe, 0x28, 0xff, + 0x00, 0x84, 0x8b, 0x51, 0xfe, 0xf4, 0x7f, 0xf7, + 0xc5, 0x64, 0x51, 0x40, 0x1a, 0xff, 0x00, 0xf0, + 0x91, 0x6a, 0x3f, 0xde, 0x8f, 0xfe, 0xf8, 0xa3, + 0xfe, 0x12, 0x2d, 0x47, 0xfb, 0xd1, 0xff, 0x00, + 0xdf, 0x15, 0x91, 0x45, 0x00, 0x6c, 0x7f, 0x6f, + 0xea, 0x61, 0x04, 0x87, 0x6e, 0xc2, 0x70, 0x1b, + 0xcb, 0xe3, 0x34, 0xe7, 0xd7, 0x35, 0x68, 0xd1, + 0x5d, 0xd4, 0x2a, 0xbf, 0xdd, 0x2d, 0x1e, 0x01, + 0xfa, 0x55, 0x50, 0xed, 0x36, 0x9d, 0x02, 0xc8, + 0xd9, 0x55, 0x9f, 0x68, 0x1e, 0x83, 0x02, 0xa5, + 0x95, 0xda, 0x47, 0xd4, 0x04, 0x80, 0xc8, 0x16, + 0x65, 0x21, 0x0f, 0xae, 0xec, 0x63, 0xf2, 0xe2, + 0x80, 0x1d, 0xff, 0x00, 0x09, 0x16, 0xa3, 0xfd, + 0xe8, 0xff, 0x00, 0xef, 0x8a, 0x72, 0xeb, 0xda, + 0xa3, 0x00, 0x54, 0x29, 0x04, 0xed, 0x04, 0x47, + 0xd4, 0xfa, 0x55, 0x5d, 0x46, 0xda, 0x2b, 0x65, + 0x41, 0x10, 0x27, 0x71, 0x24, 0xb9, 0x39, 0xda, + 0x7f, 0xb9, 0xc7, 0x71, 0xde, 0x96, 0x07, 0x95, + 0x34, 0xf8, 0xcc, 0x19, 0xf3, 0x0c, 0xec, 0xab, + 0x81, 0xcf, 0x2a, 0x07, 0x14, 0x01, 0x66, 0x4d, + 0x77, 0x55, 0x89, 0xf6, 0x48, 0x15, 0x1f, 0xfb, + 0xad, 0x1e, 0x0d, 0x2c, 0xba, 0xde, 0xaf, 0x08, + 0x06, 0x54, 0xf2, 0xf3, 0xd3, 0x7c, 0x58, 0xcd, + 0x32, 0x26, 0x02, 0xee, 0x18, 0x83, 0x09, 0x25, + 0xb6, 0x82, 0x43, 0xbb, 0xaf, 0xce, 0x03, 0x30, + 0x03, 0xe9, 0x59, 0xc6, 0xe2, 0x76, 0x86, 0x48, + 0xd9, 0xd9, 0xd1, 0x88, 0x66, 0xdd, 0xcf, 0x3e, + 0xb4, 0x01, 0xa3, 0xff, 0x00, 0x09, 0x16, 0xa3, + 0xfd, 0xe8, 0xff, 0x00, 0xef, 0x8a, 0x3f, 0xe1, + 0x22, 0xd4, 0x7f, 0xbd, 0x1f, 0xfd, 0xf1, 0x59, + 0x14, 0x50, 0x06, 0xbf, 0xfc, 0x24, 0x5a, 0x8f, + 0xf7, 0xa3, 0xff, 0x00, 0xbe, 0x28, 0xff, 0x00, + 0x84, 0x8b, 0x51, 0xfe, 0xf4, 0x7f, 0xf7, 0xc5, + 0x64, 0x51, 0x40, 0x1a, 0xff, 0x00, 0xf0, 0x91, + 0x6a, 0x3f, 0xde, 0x8f, 0xfe, 0xf8, 0xa3, 0xfe, + 0x12, 0x2d, 0x47, 0xfb, 0xd1, 0xff, 0x00, 0xdf, + 0x15, 0x91, 0x45, 0x00, 0x6b, 0xff, 0x00, 0xc2, + 0x45, 0xa8, 0xff, 0x00, 0x7a, 0x3f, 0xfb, 0xe2, + 0x8f, 0xf8, 0x48, 0xb5, 0x1f, 0xef, 0x47, 0xff, + 0x00, 0x7c, 0x56, 0x45, 0x14, 0x01, 0xd6, 0x5e, + 0x31, 0x79, 0x51, 0xcf, 0x56, 0x8d, 0x49, 0xfc, + 0xaa, 0x0a, 0x9a, 0xeb, 0xef, 0x47, 0xff, 0x00, + 0x5c, 0x97, 0xf9, 0x54, 0x34, 0x01, 0x35, 0xdc, + 0x33, 0x11, 0x6d, 0x24, 0x51, 0xdb, 0x39, 0x11, + 0x15, 0xfd, 0xf3, 0x91, 0x8c, 0xe7, 0x38, 0xc1, + 0x1d, 0x8d, 0x51, 0x5b, 0x2b, 0x81, 0x11, 0x88, + 0xc1, 0x60, 0xc9, 0xbc, 0xbe, 0x0c, 0xa7, 0x83, + 0xff, 0x00, 0x7d, 0x54, 0x7e, 0x20, 0xfb, 0xb6, + 0x5f, 0xf5, 0xcc, 0xff, 0x00, 0x3a, 0xc6, 0xa0, + 0x0d, 0xb1, 0x63, 0x7a, 0x21, 0x11, 0xff, 0x00, + 0xa1, 0x92, 0x06, 0xd5, 0x73, 0x20, 0xdc, 0x17, + 0x39, 0xc7, 0x5a, 0x5f, 0xb0, 0xdd, 0xbc, 0xae, + 0xd2, 0x9b, 0x52, 0x92, 0xcc, 0x25, 0x71, 0xe6, + 0x0e, 0xd9, 0xe3, 0xaf, 0x4f, 0x98, 0xd6, 0x1d, + 0x4d, 0x71, 0x0f, 0x90, 0xc8, 0xbb, 0xb7, 0x6e, + 0x8d, 0x5f, 0xa6, 0x3a, 0x8c, 0xd0, 0x06, 0x9d, + 0xbe, 0x9b, 0x73, 0x6f, 0x70, 0x26, 0x51, 0x68, + 0xe4, 0x1c, 0xa8, 0x79, 0x78, 0x53, 0x9c, 0x83, + 0xc1, 0x15, 0x1c, 0xba, 0x4d, 0xcc, 0x92, 0x97, + 0x5f, 0xb2, 0xc7, 0x9f, 0xe1, 0x49, 0x78, 0xfd, + 0x49, 0xa8, 0xa6, 0xd3, 0xe2, 0x59, 0xa5, 0x82, + 0x2b, 0xa2, 0xf3, 0xc7, 0x9f, 0x91, 0xa3, 0xdb, + 0xbb, 0x1d, 0x70, 0x72, 0x6a, 0x28, 0xed, 0x62, + 0xf2, 0x12, 0x5b, 0x8b, 0x8f, 0x24, 0x49, 0x9d, + 0x80, 0x26, 0xe2, 0x47, 0xaf, 0xb0, 0xa0, 0x0d, + 0x41, 0x6d, 0x7a, 0xae, 0x5d, 0x52, 0xc5, 0x64, + 0x63, 0xf3, 0x30, 0x7e, 0x5b, 0x9c, 0xfa, 0xe3, + 0x9f, 0x6c, 0x55, 0x77, 0xd3, 0x6f, 0x64, 0x84, + 0x44, 0xd2, 0x5b, 0x10, 0x1d, 0xa4, 0xcf, 0x9a, + 0x33, 0x93, 0x8c, 0xff, 0x00, 0x2a, 0xa4, 0x2c, + 0xc8, 0xbf, 0x5b, 0x57, 0x90, 0x0d, 0xe4, 0x05, + 0x70, 0x32, 0x0e, 0x47, 0xca, 0x7f, 0x1e, 0x29, + 0x91, 0x5b, 0x97, 0x49, 0xdd, 0x8e, 0xd1, 0x12, + 0xe4, 0xf1, 0xd4, 0xe7, 0x00, 0x7f, 0x9f, 0x4a, + 0x00, 0xbf, 0x36, 0x97, 0x79, 0x3c, 0x9e, 0x63, + 0x3d, 0xb0, 0x38, 0x03, 0x89, 0x47, 0x61, 0x8f, + 0xe9, 0x56, 0x85, 0xbd, 0xd2, 0x98, 0xca, 0xc1, + 0xa7, 0x8f, 0x2c, 0x10, 0xb8, 0x95, 0xb8, 0x07, + 0x3f, 0xed, 0x7b, 0x9a, 0xc7, 0x8a, 0xce, 0x56, + 0xbb, 0x86, 0x09, 0x51, 0xe1, 0x32, 0xb0, 0x50, + 0x59, 0x0f, 0x73, 0xd6, 0x89, 0x6c, 0xae, 0x62, + 0x95, 0x22, 0x30, 0xb9, 0x77, 0x50, 0xca, 0x02, + 0x9c, 0x91, 0x8a, 0x00, 0xbd, 0x36, 0x93, 0x71, + 0x23, 0x02, 0xab, 0x69, 0x17, 0x1d, 0x12, 0x5e, + 0x0f, 0xe6, 0x4d, 0x4d, 0x25, 0xa5, 0xf3, 0xa1, + 0x1f, 0xe8, 0x6a, 0xcc, 0xaa, 0x85, 0xc4, 0x9c, + 0x95, 0x5c, 0x60, 0x75, 0xf6, 0x15, 0x8e, 0xb0, + 0x4c, 0xce, 0xc8, 0xb0, 0xc8, 0x59, 0x3e, 0xf0, + 0x0a, 0x72, 0xbf, 0x5a, 0x16, 0xde, 0x67, 0x90, + 0xc6, 0x90, 0xc8, 0xce, 0x3a, 0xa8, 0x52, 0x48, + 0xa0, 0x0d, 0x69, 0xac, 0x2f, 0x67, 0x47, 0x57, + 0x36, 0x9f, 0x34, 0xad, 0x2e, 0x44, 0xbc, 0x82, + 0x7a, 0xe3, 0x9e, 0x9c, 0x0a, 0x5f, 0xb0, 0xdc, + 0x9b, 0x74, 0x85, 0xa2, 0xb1, 0x60, 0x80, 0x85, + 0x63, 0x29, 0xc8, 0xcf, 0x7e, 0xb8, 0xcd, 0x65, + 0xda, 0x40, 0x2e, 0x2e, 0x44, 0x2c, 0xe6, 0x31, + 0x86, 0x24, 0xed, 0xce, 0x30, 0x09, 0xe9, 0xf8, + 0x53, 0xe5, 0xb6, 0x8b, 0xec, 0xed, 0x35, 0xbc, + 0xe6, 0x55, 0x46, 0x0a, 0xe1, 0x93, 0x69, 0x19, + 0xe8, 0x7a, 0x9f, 0x4a, 0x00, 0xbd, 0x0e, 0x9d, + 0x7b, 0x02, 0xe1, 0x24, 0xb6, 0xff, 0x00, 0x58, + 0xb2, 0x67, 0xcd, 0x1d, 0x57, 0x38, 0xfe, 0x75, + 0x27, 0xd9, 0x2f, 0xf7, 0x96, 0x2d, 0x68, 0x72, + 0xec, 0xe4, 0x17, 0x18, 0x3b, 0x86, 0x08, 0xfa, + 0x56, 0x3b, 0x41, 0x32, 0x2a, 0xb3, 0xc4, 0xea, + 0x1f, 0xee, 0x92, 0xa4, 0x6e, 0xfa, 0x52, 0xb5, + 0xb5, 0xc2, 0x1c, 0x3c, 0x12, 0xa9, 0xf7, 0x42, + 0x3b, 0x67, 0xf9, 0x50, 0x06, 0xc7, 0xd8, 0xef, + 0x57, 0x02, 0x31, 0x65, 0x1a, 0x00, 0xdf, 0x2a, + 0xc9, 0xc1, 0xdc, 0xbb, 0x49, 0xe4, 0xe7, 0xa1, + 0xaa, 0xd1, 0xe9, 0x37, 0x91, 0x48, 0xb2, 0x2c, + 0x96, 0xfb, 0x94, 0xe4, 0x66, 0x41, 0x54, 0xa3, + 0xb7, 0x67, 0x86, 0x59, 0x4e, 0x54, 0x22, 0x6f, + 0x19, 0x1f, 0x7b, 0xe6, 0x0b, 0xfd, 0x69, 0xad, + 0x6f, 0x3a, 0xec, 0xdd, 0x0c, 0x83, 0xcc, 0xfb, + 0x99, 0x53, 0xf3, 0x7d, 0x3d, 0x68, 0x03, 0x56, + 0x5b, 0x0b, 0xb7, 0x89, 0xa3, 0x45, 0xb2, 0x89, + 0x58, 0x82, 0xdb, 0x24, 0xfb, 0xdf, 0x99, 0x34, + 0xd3, 0xa7, 0xdf, 0x16, 0x85, 0x84, 0xb6, 0xeb, + 0xe5, 0x00, 0x17, 0x6c, 0xa3, 0xb7, 0x3f, 0xce, + 0xa8, 0x4b, 0x63, 0x75, 0x14, 0xb2, 0x46, 0x60, + 0x91, 0x8c, 0x7f, 0x78, 0xaa, 0x92, 0x3e, 0xbf, + 0x4a, 0x84, 0xc5, 0x28, 0x8c, 0x48, 0x63, 0x70, + 0x87, 0xa3, 0x11, 0xc7, 0xe7, 0xf8, 0x1f, 0xca, + 0x80, 0x37, 0x3e, 0xcd, 0x78, 0x76, 0x9f, 0x2a, + 0xc3, 0x7a, 0x64, 0xa3, 0x19, 0x3e, 0xee, 0x58, + 0xb7, 0x4c, 0xe3, 0xa9, 0xa8, 0xe3, 0xb1, 0xbd, + 0x55, 0x74, 0x90, 0xda, 0x4c, 0xae, 0xdb, 0xc8, + 0x92, 0x4c, 0xfc, 0xde, 0xbc, 0x1a, 0xc4, 0xa2, + 0x80, 0x3a, 0x9b, 0x68, 0x67, 0x8e, 0xca, 0xe1, + 0xa7, 0x68, 0x89, 0x67, 0x5c, 0x08, 0xc8, 0x20, + 0x00, 0x31, 0x8e, 0x2a, 0x3a, 0x83, 0x45, 0xff, + 0x00, 0x90, 0x5d, 0xcf, 0xfd, 0x74, 0x5f, 0xe5, + 0x53, 0xd0, 0x05, 0xd7, 0xff, 0x00, 0x8f, 0x78, + 0x7f, 0xde, 0x4f, 0xe6, 0x28, 0xa5, 0x7f, 0xf8, + 0xf6, 0x87, 0xfd, 0xe4, 0xfe, 0x62, 0x8a, 0x00, + 0x7d, 0xb7, 0xdc, 0x7f, 0xfa, 0xe8, 0xff, 0x00, + 0xfa, 0x11, 0xa9, 0xaa, 0x1b, 0x6f, 0xb8, 0xff, + 0x00, 0xf5, 0xd1, 0xff, 0x00, 0xf4, 0x23, 0x53, + 0x50, 0x06, 0x6d, 0xd7, 0xfc, 0x7c, 0x3f, 0xe1, + 0xfc, 0xab, 0x3b, 0x58, 0x9f, 0x6e, 0xa9, 0x3a, + 0xe7, 0xa1, 0x1f, 0xc8, 0x56, 0x8d, 0xdf, 0xfc, + 0x7c, 0x3f, 0xe1, 0xfc, 0xab, 0x1f, 0x5c, 0x88, + 0xb6, 0xaf, 0x70, 0x7d, 0xc7, 0xf2, 0x15, 0x9d, + 0x4d, 0x84, 0xc8, 0x7e, 0xd1, 0xef, 0x47, 0xda, + 0x3d, 0xea, 0xb7, 0x90, 0x7d, 0xe8, 0xf2, 0x0f, + 0xbd, 0x60, 0x22, 0xcf, 0xda, 0x3d, 0xea, 0xfd, + 0x9d, 0xbc, 0x73, 0xd9, 0xb5, 0xd4, 0xb7, 0x62, + 0x04, 0x57, 0xd9, 0xca, 0x67, 0xb7, 0xd6, 0xb1, + 0xfc, 0x83, 0xef, 0x5a, 0xb0, 0xc2, 0xc7, 0xc3, + 0x73, 0x20, 0x04, 0x9f, 0xb4, 0x03, 0xc7, 0xd0, + 0x53, 0x8a, 0x40, 0x25, 0xec, 0x2f, 0x68, 0xb1, + 0xc8, 0x25, 0x59, 0x61, 0x93, 0xee, 0x48, 0xbd, + 0x0d, 0x46, 0x12, 0xe4, 0xb2, 0x2f, 0x91, 0x28, + 0x32, 0x70, 0xb9, 0x43, 0xcd, 0x5d, 0x8a, 0xd6, + 0x51, 0xa5, 0x59, 0x5b, 0x31, 0xd9, 0x2b, 0xdc, + 0xef, 0x4d, 0xe3, 0xa0, 0xfa, 0x55, 0xd5, 0x2c, + 0x61, 0xb9, 0x3e, 0x7c, 0xf2, 0xba, 0x5c, 0x20, + 0xdc, 0xe3, 0x68, 0x04, 0x30, 0x07, 0x6f, 0xb6, + 0x2a, 0xb9, 0x13, 0x19, 0x8f, 0x75, 0x1c, 0xd6, + 0xd7, 0x46, 0xdc, 0xab, 0x33, 0xff, 0x00, 0x0e, + 0x14, 0xfc, 0xdf, 0x4a, 0x86, 0x49, 0x24, 0x89, + 0xf6, 0x4a, 0x8c, 0x8d, 0xe8, 0xc3, 0x06, 0xb5, + 0x1a, 0x39, 0xdb, 0x5b, 0xbd, 0x9b, 0xed, 0x0f, + 0x1a, 0xc4, 0x87, 0x9c, 0x6e, 0x21, 0x7d, 0x17, + 0x3d, 0x2a, 0xbe, 0xb5, 0x18, 0x92, 0xcb, 0x4f, + 0x70, 0xd2, 0x31, 0x2a, 0xe3, 0x7c, 0x9f, 0x78, + 0x8e, 0x31, 0x9a, 0x4e, 0x28, 0x43, 0xe1, 0xb5, + 0x85, 0xac, 0xa2, 0xb9, 0x9e, 0xf4, 0x42, 0x24, + 0x24, 0x00, 0x63, 0xcf, 0x43, 0xf5, 0xa8, 0x6e, + 0xed, 0xe6, 0xb6, 0x9f, 0xcb, 0x5c, 0xcc, 0xa5, + 0x3c, 0xc0, 0xc8, 0x33, 0x95, 0xf5, 0xab, 0x0a, + 0x96, 0x83, 0x41, 0xb3, 0x5b, 0xc5, 0x99, 0x94, + 0x33, 0xed, 0xf2, 0xb1, 0xea, 0x7a, 0xe6, 0xa5, + 0xb2, 0xba, 0x17, 0x1a, 0x8c, 0x8f, 0x14, 0x7b, + 0x22, 0x86, 0xd0, 0xa4, 0x6a, 0x79, 0xe0, 0x63, + 0xad, 0x3e, 0x58, 0x8c, 0xcb, 0x02, 0xe1, 0xa4, + 0x31, 0x2c, 0x32, 0x99, 0x00, 0xc9, 0x50, 0x87, + 0x3f, 0x95, 0x4b, 0x69, 0x0c, 0xf7, 0x53, 0xb4, + 0x48, 0xac, 0x0a, 0x02, 0x5b, 0x2a, 0x78, 0xa9, + 0xd6, 0x5b, 0x91, 0xa1, 0xc9, 0x3c, 0x73, 0x49, + 0xe7, 0xbc, 0xe0, 0x49, 0x20, 0x3f, 0x36, 0xdc, + 0x71, 0xcf, 0xe5, 0x5a, 0x0b, 0xe6, 0x0d, 0x42, + 0x37, 0x25, 0x84, 0xaf, 0x65, 0x99, 0x00, 0x38, + 0xcb, 0x7a, 0x9f, 0x7a, 0x14, 0x50, 0x18, 0x6b, + 0xf6, 0x86, 0x2e, 0x16, 0x19, 0x09, 0x4f, 0xbd, + 0x84, 0x3f, 0x2f, 0xd6, 0x9b, 0x13, 0xcb, 0x33, + 0x15, 0x8a, 0x37, 0x90, 0x8e, 0xc8, 0xb9, 0xad, + 0x88, 0x5d, 0x61, 0xd3, 0xac, 0x1d, 0xa4, 0xba, + 0xde, 0xd2, 0x33, 0x1f, 0x27, 0x07, 0x7b, 0x67, + 0xf8, 0xb3, 0xd6, 0xa2, 0x9d, 0x9e, 0x3d, 0x32, + 0xe6, 0x5b, 0x31, 0x24, 0x0e, 0xf7, 0x7f, 0x3f, + 0x1b, 0x59, 0x46, 0x3a, 0x7b, 0x73, 0x4b, 0x95, + 0x01, 0x4e, 0xda, 0x0b, 0x8b, 0x94, 0x99, 0x91, + 0x1b, 0xf7, 0x43, 0x9f, 0x94, 0xf2, 0x7d, 0x3e, + 0xb4, 0xcb, 0x87, 0x58, 0xd6, 0x1d, 0xa9, 0x32, + 0x97, 0x4c, 0x9f, 0x31, 0x71, 0x93, 0xfe, 0xcf, + 0xb5, 0x68, 0x44, 0xd7, 0xa2, 0x3d, 0x4d, 0xa7, + 0x26, 0x29, 0x8c, 0x4a, 0xd8, 0x43, 0x8c, 0x1f, + 0x5e, 0x3b, 0xe2, 0xa5, 0x86, 0x25, 0x6b, 0xfd, + 0x20, 0xc9, 0xce, 0xdb, 0x7e, 0x33, 0xeb, 0x8a, + 0x7c, 0xa8, 0x0c, 0x87, 0xfb, 0x42, 0x15, 0x0f, + 0x0c, 0x8a, 0x5f, 0x85, 0x05, 0x08, 0xdd, 0xf4, + 0xa4, 0x6f, 0x3d, 0x10, 0xbb, 0x45, 0x22, 0xaa, + 0x9d, 0xa5, 0x8a, 0x90, 0x01, 0xf4, 0xad, 0x5d, + 0x39, 0xae, 0x27, 0x82, 0xe3, 0xed, 0x8c, 0xcf, + 0xb6, 0xe2, 0x32, 0x9b, 0xbf, 0x85, 0xb7, 0x72, + 0x05, 0x39, 0xe4, 0x96, 0x5b, 0xad, 0x5e, 0x17, + 0x72, 0x62, 0x10, 0xb1, 0x54, 0xcf, 0x00, 0x8f, + 0x4a, 0x39, 0x10, 0x18, 0x9f, 0x68, 0xf7, 0xa3, + 0xed, 0x1e, 0xf5, 0x5b, 0xc8, 0x3e, 0xf4, 0x79, + 0x07, 0xde, 0xa0, 0x45, 0x9f, 0xb4, 0x7b, 0xd3, + 0xa2, 0xb9, 0x22, 0x54, 0x20, 0xf3, 0xb8, 0x55, + 0x4f, 0x20, 0xfb, 0xd3, 0xa3, 0x84, 0xf9, 0x89, + 0xd7, 0xa8, 0xa0, 0x0e, 0x9a, 0xf0, 0x01, 0x77, + 0x2f, 0xfb, 0xd5, 0x0d, 0x4d, 0x7b, 0xff, 0x00, + 0x1f, 0x72, 0xfd, 0x6a, 0x1a, 0xeb, 0x28, 0xa7, + 0xaf, 0x5b, 0xcf, 0x26, 0xa0, 0x1a, 0x38, 0x64, + 0x75, 0xf2, 0xd7, 0x95, 0x52, 0x47, 0x4a, 0xcd, + 0xfb, 0x1d, 0xd7, 0xfc, 0xfb, 0x4d, 0xff, 0x00, + 0x7e, 0xcd, 0x6b, 0xeb, 0x5a, 0x85, 0xe5, 0xbd, + 0xf0, 0x8e, 0x1b, 0x87, 0x44, 0xf2, 0xd4, 0xe0, + 0x7d, 0x2b, 0x3f, 0xfb, 0x5f, 0x51, 0xff, 0x00, + 0x9f, 0xb9, 0x28, 0x02, 0x0f, 0xb1, 0xdd, 0x7f, + 0xcf, 0xb4, 0xdf, 0xf7, 0xec, 0xd1, 0xf6, 0x3b, + 0xaf, 0xf9, 0xf6, 0x9b, 0xfe, 0xfd, 0x9a, 0x9f, + 0xfb, 0x5f, 0x51, 0xff, 0x00, 0x9f, 0xb9, 0x28, + 0xfe, 0xd7, 0xd4, 0x7f, 0xe7, 0xee, 0x4a, 0x00, + 0x83, 0xec, 0x77, 0x5f, 0xf3, 0xed, 0x37, 0xfd, + 0xfb, 0x34, 0x7d, 0x8e, 0xeb, 0xfe, 0x7d, 0xa6, + 0xff, 0x00, 0xbf, 0x66, 0xa7, 0xfe, 0xd7, 0xd4, + 0x7f, 0xe7, 0xee, 0x4a, 0x3f, 0xb5, 0xf5, 0x1f, + 0xf9, 0xfb, 0x92, 0x80, 0x20, 0xfb, 0x1d, 0xd7, + 0xfc, 0xfb, 0x4d, 0xff, 0x00, 0x7e, 0xcd, 0x1f, + 0x63, 0xba, 0xff, 0x00, 0x9f, 0x69, 0xbf, 0xef, + 0xd9, 0xa9, 0xff, 0x00, 0xb5, 0xf5, 0x1f, 0xf9, + 0xfb, 0x92, 0x8f, 0xed, 0x7d, 0x47, 0xfe, 0x7e, + 0xe4, 0xa0, 0x07, 0x93, 0x74, 0x6d, 0x05, 0xbf, + 0xf6, 0x68, 0x0a, 0x39, 0xdd, 0xe5, 0xbe, 0x73, + 0x8c, 0x67, 0xaf, 0x5a, 0x26, 0x7d, 0x42, 0x55, + 0xc7, 0xd9, 0x1d, 0x18, 0xb0, 0x76, 0x74, 0x8d, + 0x81, 0x76, 0x1d, 0x09, 0xa9, 0xad, 0xee, 0xb5, + 0x4b, 0x84, 0x0c, 0x2f, 0xb6, 0x6e, 0x6d, 0x88, + 0x1d, 0xb1, 0xbd, 0xbd, 0x07, 0x1e, 0xe2, 0xab, + 0x1d, 0x57, 0x52, 0x04, 0x83, 0x75, 0x20, 0x20, + 0xd0, 0x04, 0x3f, 0x65, 0xbc, 0xdb, 0xb7, 0xec, + 0xf3, 0xed, 0xce, 0x71, 0xb0, 0xf5, 0xab, 0x36, + 0xcd, 0x7d, 0x6c, 0xaa, 0xab, 0x64, 0xce, 0x15, + 0x99, 0xbe, 0x68, 0xdb, 0xb8, 0xc7, 0x6a, 0x5b, + 0x7d, 0x43, 0x54, 0xb8, 0x93, 0x62, 0x5d, 0xb8, + 0xe3, 0x24, 0xb1, 0xc0, 0x51, 0xea, 0x69, 0xf3, + 0xde, 0x6a, 0x70, 0xc6, 0xb2, 0x0b, 0xff, 0x00, + 0x36, 0x36, 0x3b, 0x43, 0xc6, 0xd9, 0x19, 0xf4, + 0xe9, 0x40, 0x10, 0x91, 0x78, 0x26, 0x8e, 0x58, + 0x6c, 0x1a, 0x07, 0x4e, 0x47, 0x97, 0x1b, 0x73, + 0xf9, 0xe6, 0x96, 0x6f, 0xb6, 0xcb, 0x11, 0x8d, + 0x6c, 0x0c, 0x2a, 0xc7, 0x2c, 0x23, 0x89, 0x86, + 0xef, 0xad, 0x49, 0x71, 0x7b, 0xaa, 0xdb, 0xc7, + 0x0b, 0xbd, 0xdb, 0x62, 0x55, 0xdc, 0x30, 0x7a, + 0x7d, 0x7f, 0x31, 0xf9, 0xd4, 0x92, 0xcf, 0xab, + 0xc3, 0x7a, 0x6d, 0x1e, 0xf0, 0xef, 0xc6, 0x73, + 0x9e, 0x08, 0xc6, 0x7d, 0x28, 0x03, 0x3b, 0xec, + 0x77, 0x5f, 0xf3, 0xed, 0x37, 0xfd, 0xfb, 0x34, + 0x7d, 0x8e, 0xeb, 0xfe, 0x7d, 0xa6, 0xff, 0x00, + 0xbf, 0x66, 0xa7, 0xfe, 0xd7, 0xd4, 0x7f, 0xe7, + 0xee, 0x4a, 0x3f, 0xb5, 0xf5, 0x1f, 0xf9, 0xfb, + 0x92, 0x80, 0x20, 0xfb, 0x1d, 0xd7, 0xfc, 0xfb, + 0x4d, 0xff, 0x00, 0x7e, 0xcd, 0x1f, 0x63, 0xba, + 0xff, 0x00, 0x9f, 0x69, 0xbf, 0xef, 0xd9, 0xa9, + 0xff, 0x00, 0xb5, 0xf5, 0x1f, 0xf9, 0xfb, 0x92, + 0x8f, 0xed, 0x7d, 0x47, 0xfe, 0x7e, 0xe4, 0xa0, + 0x08, 0x3e, 0xc7, 0x75, 0xff, 0x00, 0x3e, 0xd3, + 0x7f, 0xdf, 0xb3, 0x47, 0xd8, 0xee, 0xbf, 0xe7, + 0xda, 0x6f, 0xfb, 0xf6, 0x6a, 0x7f, 0xed, 0x7d, + 0x47, 0xfe, 0x7e, 0xe4, 0xa3, 0xfb, 0x5f, 0x51, + 0xff, 0x00, 0x9f, 0xb9, 0x28, 0x02, 0x0f, 0xb1, + 0xdd, 0x7f, 0xcf, 0xb4, 0xdf, 0xf7, 0xec, 0xd1, + 0xf6, 0x3b, 0xaf, 0xf9, 0xf6, 0x9b, 0xfe, 0xfd, + 0x9a, 0x9f, 0xfb, 0x5f, 0x51, 0xff, 0x00, 0x9f, + 0xb9, 0x28, 0xfe, 0xd7, 0xd4, 0x7f, 0xe7, 0xee, + 0x4a, 0x00, 0xde, 0xba, 0x04, 0x3c, 0x60, 0xf0, + 0x7c, 0xb5, 0xcf, 0xe5, 0x50, 0x54, 0xf7, 0x6c, + 0x59, 0xe3, 0x66, 0x39, 0x26, 0x35, 0x24, 0xfe, + 0x15, 0x05, 0x00, 0x53, 0xf1, 0x07, 0x4b, 0x2f, + 0xfa, 0xe4, 0x7f, 0x9d, 0x63, 0x57, 0x47, 0xaa, + 0xdb, 0x43, 0x70, 0x96, 0xa6, 0x4b, 0xc8, 0xe0, + 0x2b, 0x1f, 0x47, 0x07, 0x9e, 0x6b, 0x3b, 0xfb, + 0x3a, 0xd7, 0xfe, 0x82, 0x96, 0xff, 0x00, 0x91, + 0xa0, 0x0c, 0xda, 0xd2, 0xbe, 0xb4, 0xb9, 0x75, + 0x8a, 0x74, 0x81, 0xcc, 0x42, 0xde, 0x32, 0x5c, + 0x0e, 0x38, 0x51, 0x47, 0xf6, 0x75, 0xaf, 0xfd, + 0x05, 0x2d, 0xff, 0x00, 0x23, 0x47, 0xf6, 0x75, + 0xaf, 0xfd, 0x05, 0x2d, 0xff, 0x00, 0x23, 0x40, + 0x16, 0x66, 0xb7, 0x96, 0x0d, 0x62, 0x6b, 0xc9, + 0x50, 0xc7, 0x02, 0x3b, 0x3e, 0xe6, 0xe3, 0x77, + 0xa0, 0x1e, 0xb9, 0xaa, 0x8f, 0x6f, 0x2d, 0xed, + 0xb5, 0xb3, 0xdb, 0x2f, 0x98, 0x63, 0x4f, 0x2d, + 0xd4, 0x75, 0x5f, 0x98, 0x9c, 0xfd, 0x39, 0xa7, + 0x7f, 0x67, 0x5a, 0xff, 0x00, 0xd0, 0x52, 0xdf, + 0xf2, 0x34, 0x7f, 0x67, 0x5a, 0xff, 0x00, 0xd0, + 0x52, 0xdf, 0xf2, 0x34, 0x01, 0x0d, 0xfc, 0x80, + 0x5c, 0xc6, 0xa8, 0xe0, 0x98, 0x63, 0x44, 0xdc, + 0xa7, 0x8c, 0x81, 0xce, 0x3f, 0x1a, 0xd1, 0x77, + 0x86, 0x1b, 0x8b, 0x67, 0x05, 0x42, 0xdd, 0x4c, + 0xb3, 0xb7, 0xa2, 0x8c, 0x71, 0x9f, 0xf8, 0x11, + 0x6f, 0xca, 0xaa, 0x7f, 0x67, 0x5a, 0xff, 0x00, + 0xd0, 0x52, 0xdf, 0xf2, 0x34, 0x7f, 0x67, 0x5a, + 0xff, 0x00, 0xd0, 0x52, 0xdf, 0xf2, 0x34, 0x01, + 0x3d, 0xb2, 0x4b, 0x13, 0xd9, 0xc7, 0x72, 0x18, + 0x4a, 0x6e, 0xc3, 0x28, 0x63, 0xce, 0x38, 0xc9, + 0xfc, 0x4e, 0x29, 0x4c, 0x4e, 0xd2, 0x34, 0x82, + 0x37, 0x90, 0x9b, 0x58, 0xf6, 0x20, 0x24, 0x6f, + 0xe1, 0x41, 0xe9, 0xd7, 0x15, 0x5f, 0xfb, 0x3a, + 0xd7, 0xfe, 0x82, 0x96, 0xff, 0x00, 0x91, 0xa3, + 0xfb, 0x3a, 0xd7, 0xfe, 0x82, 0x96, 0xff, 0x00, + 0x91, 0xa0, 0x0b, 0x77, 0x71, 0xcc, 0xf0, 0xb7, + 0xd9, 0xc6, 0x24, 0x3e, 0x4b, 0x1d, 0x8d, 0xd8, + 0x29, 0x19, 0xcf, 0xa0, 0x3d, 0xe9, 0x65, 0x0b, + 0x24, 0xd7, 0xf1, 0x84, 0x96, 0x49, 0x3c, 0xe5, + 0x62, 0xb0, 0xb8, 0x52, 0x46, 0x0f, 0x3d, 0x0f, + 0x19, 0xa8, 0x60, 0xb5, 0xb5, 0x87, 0x70, 0x37, + 0xd6, 0x52, 0x86, 0xc7, 0x12, 0x23, 0x1c, 0x7e, + 0x54, 0xc9, 0x6c, 0xa0, 0x9a, 0x57, 0x96, 0x4d, + 0x56, 0xdc, 0xbb, 0x9c, 0x93, 0x83, 0x40, 0x09, + 0x0b, 0x86, 0xd7, 0x24, 0x73, 0x18, 0x1c, 0x49, + 0x95, 0x2d, 0xbb, 0x3f, 0x21, 0xcf, 0x22, 0x9a, + 0xd2, 0x47, 0x25, 0x82, 0xb4, 0x30, 0xa4, 0x51, + 0xac, 0xa3, 0xcf, 0x55, 0xc9, 0xcf, 0xf7, 0x4f, + 0x24, 0xf1, 0xd6, 0x8f, 0xec, 0xeb, 0x5f, 0xfa, + 0x0a, 0x5b, 0xfe, 0x46, 0x8f, 0xec, 0xeb, 0x5f, + 0xfa, 0x0a, 0x5b, 0xfe, 0x46, 0x80, 0x34, 0x0b, + 0x2c, 0x77, 0xa5, 0xda, 0x39, 0x04, 0x72, 0x5c, + 0x2b, 0x2c, 0xb2, 0x4a, 0x0a, 0x1e, 0x78, 0x2a, + 0x31, 0xd3, 0xf9, 0x54, 0x30, 0x47, 0x70, 0x96, + 0xab, 0x14, 0xfb, 0x84, 0xac, 0xd3, 0x2a, 0xab, + 0x1e, 0x72, 0x63, 0xe3, 0xf3, 0x35, 0x59, 0x2c, + 0x2d, 0x91, 0xd5, 0x86, 0xa7, 0x6c, 0x4a, 0x9c, + 0xe0, 0xa9, 0x22, 0xa6, 0x9e, 0xde, 0xde, 0x64, + 0x54, 0x1a, 0x85, 0x9c, 0x48, 0xa4, 0xb6, 0xd8, + 0xd5, 0xb1, 0x93, 0xdf, 0x9f, 0xa5, 0x00, 0x1e, + 0x53, 0x47, 0xa7, 0x79, 0x72, 0xe5, 0x1b, 0xc8, + 0xf9, 0x81, 0xea, 0xbf, 0xbe, 0x5a, 0x75, 0xf4, + 0x6e, 0x2d, 0x2e, 0xd4, 0xc4, 0x46, 0xd9, 0x55, + 0x83, 0x33, 0x96, 0x67, 0x5e, 0x46, 0xe3, 0xcf, + 0xb8, 0xe4, 0x7a, 0xd5, 0x6f, 0xec, 0xeb, 0x5f, + 0xfa, 0x0a, 0x5b, 0xfe, 0x46, 0x8f, 0xec, 0xeb, + 0x5f, 0xfa, 0x0a, 0x5b, 0xfe, 0x46, 0x80, 0x2f, + 0x5c, 0xc5, 0x3b, 0x5d, 0x21, 0x87, 0x70, 0x0b, + 0x74, 0xf2, 0x39, 0x07, 0x18, 0x04, 0x8c, 0x31, + 0xf6, 0xc6, 0x79, 0xac, 0xfd, 0x4d, 0xc3, 0x2d, + 0xb0, 0x43, 0xfb, 0xa2, 0x8e, 0xca, 0x07, 0x4f, + 0xf5, 0x8d, 0x4e, 0xfe, 0xce, 0xb5, 0xff, 0x00, + 0xa0, 0xa5, 0xbf, 0xe4, 0x68, 0xfe, 0xce, 0xb5, + 0xff, 0x00, 0xa0, 0xa5, 0xbf, 0xe4, 0x68, 0x03, + 0x36, 0x8a, 0xd2, 0xfe, 0xce, 0xb5, 0xff, 0x00, + 0xa0, 0xa5, 0xbf, 0xe4, 0x68, 0xfe, 0xce, 0xb5, + 0xff, 0x00, 0xa0, 0xa5, 0xbf, 0xe4, 0x68, 0x02, + 0xe6, 0x8b, 0xff, 0x00, 0x20, 0xbb, 0x9f, 0xfa, + 0xe8, 0xb5, 0x3d, 0x2e, 0x9f, 0x04, 0x56, 0xfa, + 0x6d, 0xc2, 0xc7, 0x72, 0x93, 0xe5, 0xd4, 0x92, + 0x9d, 0xa9, 0x28, 0x02, 0xf3, 0xff, 0x00, 0xc7, + 0xb4, 0x3f, 0xef, 0x27, 0xf3, 0x14, 0x51, 0x27, + 0xfc, 0x7b, 0x43, 0xfe, 0xf2, 0x7f, 0x31, 0x45, + 0x00, 0x3e, 0xdb, 0xee, 0x3f, 0xfd, 0x74, 0x6f, + 0xfd, 0x08, 0xd4, 0xf5, 0x0d, 0xaf, 0xdc, 0x7f, + 0xfa, 0xe8, 0xff, 0x00, 0xfa, 0x11, 0xa9, 0xa8, + 0x03, 0x36, 0xef, 0xfe, 0x3e, 0x5f, 0xf0, 0xfe, + 0x55, 0x06, 0xa5, 0x6e, 0x5e, 0xe8, 0xcc, 0x06, + 0x56, 0x50, 0x18, 0x1f, 0xc2, 0xa7, 0xbb, 0xff, + 0x00, 0x8f, 0x97, 0xfc, 0x3f, 0x95, 0x36, 0x5b, + 0x96, 0xb5, 0xd2, 0xe4, 0x97, 0x62, 0xc9, 0xb6, + 0x40, 0x36, 0xbf, 0x4e, 0x6a, 0x27, 0x1e, 0x65, + 0x60, 0x33, 0xfe, 0xcf, 0xed, 0x47, 0xd9, 0xfd, + 0xa9, 0x06, 0xb8, 0x31, 0xff, 0x00, 0x1e, 0x31, + 0x7f, 0xdf, 0x46, 0x8f, 0xed, 0xc5, 0xff, 0x00, + 0x9f, 0x18, 0xbf, 0xef, 0xa3, 0x58, 0xfb, 0x29, + 0x0a, 0xc2, 0xfd, 0x9f, 0xda, 0xac, 0x5b, 0xcd, + 0x73, 0x6c, 0x85, 0x21, 0x93, 0x6a, 0x93, 0x92, + 0x36, 0x83, 0xcd, 0x56, 0xfe, 0xdc, 0x5f, 0xf9, + 0xf1, 0x8b, 0xfe, 0xfa, 0x34, 0x7f, 0x6e, 0x2f, + 0xfc, 0xf8, 0xc5, 0xff, 0x00, 0x7d, 0x1a, 0x6a, + 0x94, 0x97, 0x50, 0xb1, 0x3c, 0x86, 0x79, 0x66, + 0x59, 0x9e, 0x46, 0x32, 0x2f, 0x43, 0xe9, 0x52, + 0x1b, 0x9b, 0xc2, 0xcc, 0xc6, 0x76, 0xcb, 0x0d, + 0xa7, 0x81, 0xd2, 0xab, 0x26, 0xb2, 0x64, 0x60, + 0xa9, 0xa7, 0xc6, 0xcc, 0x7b, 0x02, 0xc4, 0xd3, + 0x7f, 0xb7, 0x17, 0xfe, 0x7c, 0x62, 0xff, 0x00, + 0xbe, 0x8d, 0x1e, 0xce, 0x7d, 0xc2, 0xcc, 0xb6, + 0x6e, 0x2e, 0xcc, 0xc2, 0x5f, 0x34, 0xef, 0x0b, + 0xb7, 0x38, 0x1d, 0x2a, 0x39, 0x5e, 0xe2, 0x58, + 0xfc, 0xb9, 0x24, 0x2c, 0x9b, 0xb7, 0x60, 0xfa, + 0xd2, 0x45, 0xa9, 0xcd, 0x38, 0x2d, 0x0e, 0x93, + 0xe6, 0x00, 0x70, 0x4a, 0x06, 0x34, 0xc9, 0x75, + 0x77, 0x85, 0xb6, 0x4b, 0xa6, 0xac, 0x6d, 0x8c, + 0xe1, 0xb7, 0x03, 0x47, 0xb3, 0x9f, 0x70, 0xb0, + 0xe6, 0x59, 0x1e, 0x04, 0x85, 0x9b, 0x31, 0xa1, + 0x25, 0x46, 0x3a, 0x51, 0x0a, 0xc9, 0x03, 0x31, + 0x8c, 0xed, 0x2c, 0xa5, 0x4f, 0x1d, 0xaa, 0x2f, + 0xed, 0xc5, 0xff, 0x00, 0x9f, 0x18, 0xbf, 0xef, + 0xa3, 0x47, 0xf6, 0xe2, 0xff, 0x00, 0xcf, 0x8c, + 0x5f, 0xf7, 0xd1, 0xa3, 0xd9, 0x4b, 0xb8, 0x58, + 0x9e, 0xdd, 0xa7, 0xb6, 0x24, 0xc2, 0xe5, 0x33, + 0xd7, 0x8e, 0xb4, 0x2b, 0xdc, 0x2d, 0xc7, 0xda, + 0x04, 0x8d, 0xe6, 0xff, 0x00, 0x7a, 0xa0, 0xfe, + 0xdc, 0x5f, 0xf9, 0xf1, 0x8b, 0xfe, 0xfa, 0x34, + 0x7f, 0x6e, 0x2f, 0xfc, 0xf8, 0xc5, 0xff, 0x00, + 0x7d, 0x1a, 0x3d, 0x9c, 0xbb, 0x85, 0x8b, 0x69, + 0x71, 0x77, 0x1e, 0xfd, 0xb3, 0x30, 0xde, 0x72, + 0x78, 0x1d, 0x69, 0x90, 0x3d, 0xc5, 0xbb, 0x33, + 0x45, 0x23, 0x29, 0x6f, 0xbd, 0xdf, 0x35, 0x0f, + 0xf6, 0xc9, 0xd9, 0xbf, 0xfb, 0x3e, 0x3d, 0xb9, + 0xc6, 0xec, 0xb6, 0x33, 0x4d, 0xfe, 0xdc, 0x5f, + 0xf9, 0xf1, 0x8b, 0xfe, 0xfa, 0x34, 0x7b, 0x39, + 0xf7, 0x0b, 0x16, 0x23, 0x92, 0xe6, 0x29, 0x5e, + 0x54, 0x95, 0x83, 0xbf, 0xde, 0x27, 0x9c, 0xd3, + 0x5c, 0xcc, 0xed, 0x1b, 0x33, 0x9c, 0xc6, 0x30, + 0x84, 0x71, 0x8a, 0x87, 0xfb, 0x71, 0x7f, 0xe7, + 0xc6, 0x2f, 0xfb, 0xe8, 0xd1, 0xfd, 0xb8, 0xbf, + 0xf3, 0xe3, 0x17, 0xfd, 0xf4, 0x68, 0xf6, 0x73, + 0xee, 0x16, 0x2d, 0x4b, 0x3d, 0xdc, 0xa5, 0x0c, + 0x92, 0x96, 0xd8, 0x77, 0x2f, 0x03, 0xad, 0x33, + 0x74, 0xe1, 0xe5, 0x7d, 0xff, 0x00, 0x34, 0xa0, + 0x87, 0x38, 0x1c, 0x83, 0x50, 0x7f, 0x6e, 0x2f, + 0xfc, 0xf8, 0xc5, 0xff, 0x00, 0x7d, 0x1a, 0x3f, + 0xb7, 0x17, 0xfe, 0x7c, 0x62, 0xff, 0x00, 0xbe, + 0x8d, 0x1e, 0xce, 0x7d, 0xc2, 0xcc, 0x5f, 0xb3, + 0xfb, 0x51, 0xf6, 0x7f, 0x6a, 0x4f, 0xed, 0xc5, + 0xff, 0x00, 0x9f, 0x18, 0xbf, 0xef, 0xa3, 0x47, + 0xf6, 0xe2, 0xff, 0x00, 0xcf, 0x8c, 0x5f, 0xf7, + 0xd1, 0xa5, 0xec, 0xa4, 0x16, 0x17, 0xec, 0xfe, + 0xd5, 0x2d, 0xbd, 0x99, 0x96, 0x74, 0x50, 0x3b, + 0xf3, 0xec, 0x2a, 0x1f, 0xed, 0xc5, 0xff, 0x00, + 0x9f, 0x18, 0xbf, 0xef, 0xa3, 0x56, 0xf4, 0xbd, + 0x4e, 0x4b, 0xab, 0xc3, 0x08, 0x8a, 0x38, 0xa3, + 0xd8, 0xc4, 0x85, 0x1c, 0x9e, 0x3d, 0x69, 0xaa, + 0x4e, 0xfa, 0x85, 0x89, 0xae, 0x5c, 0x49, 0x71, + 0x23, 0x0e, 0x85, 0xaa, 0x3a, 0x28, 0xae, 0x81, + 0x99, 0xde, 0x21, 0xff, 0x00, 0x90, 0x90, 0xff, + 0x00, 0xae, 0x4b, 0xfc, 0xab, 0x2e, 0xb7, 0xf5, + 0x9d, 0x36, 0xf6, 0xe6, 0xf4, 0x4b, 0x04, 0x05, + 0xd3, 0xcb, 0x51, 0x9c, 0x8e, 0xb8, 0xaa, 0x1f, + 0xd8, 0xba, 0x97, 0xfc, 0xfa, 0xb7, 0xe6, 0x3f, + 0xc6, 0x80, 0x33, 0xe8, 0xad, 0x0f, 0xec, 0x5d, + 0x4b, 0xfe, 0x7d, 0x5b, 0xf3, 0x1f, 0xe3, 0x47, + 0xf6, 0x2e, 0xa5, 0xff, 0x00, 0x3e, 0xad, 0xf9, + 0x8f, 0xf1, 0xa0, 0x0c, 0xfa, 0x2b, 0x43, 0xfb, + 0x17, 0x52, 0xff, 0x00, 0x9f, 0x56, 0xfc, 0xc7, + 0xf8, 0xd1, 0xfd, 0x8b, 0xa9, 0x7f, 0xcf, 0xab, + 0x7e, 0x63, 0xfc, 0x68, 0x03, 0x3e, 0x8a, 0xd0, + 0xfe, 0xc5, 0xd4, 0xbf, 0xe7, 0xd5, 0xbf, 0x31, + 0xfe, 0x34, 0x7f, 0x62, 0xea, 0x5f, 0xf3, 0xea, + 0xdf, 0x98, 0xff, 0x00, 0x1a, 0x00, 0x65, 0x9a, + 0x79, 0x49, 0xf6, 0xc7, 0x52, 0xc1, 0x1b, 0x11, + 0xa0, 0xfe, 0x27, 0xff, 0x00, 0x01, 0xc5, 0x4f, + 0x6f, 0x32, 0x0b, 0x52, 0xb2, 0x4a, 0x9f, 0x69, + 0x60, 0xde, 0x53, 0x11, 0xfe, 0xaf, 0xd4, 0x13, + 0xdb, 0x3c, 0xe3, 0xd3, 0xf1, 0xa7, 0x45, 0x61, + 0xad, 0xc2, 0x9b, 0x22, 0x59, 0xe3, 0x5e, 0xb8, + 0x49, 0x70, 0x3f, 0x9d, 0x42, 0x74, 0x6d, 0x4d, + 0x98, 0x96, 0xb6, 0x72, 0x4f, 0x24, 0x96, 0x1f, + 0xe3, 0x40, 0x0c, 0xb0, 0x53, 0x24, 0x57, 0x71, + 0x20, 0xcc, 0x8f, 0x17, 0xca, 0x07, 0x53, 0x86, + 0x04, 0x8f, 0xc8, 0x53, 0x21, 0xb2, 0x9a, 0x46, + 0x84, 0x32, 0x94, 0x49, 0x24, 0xd8, 0x33, 0xc7, + 0xd4, 0xfe, 0x15, 0x3a, 0xe8, 0xfa, 0x9a, 0xb0, + 0x65, 0xb6, 0x70, 0x47, 0x42, 0x18, 0x7f, 0x8d, + 0x3d, 0xb4, 0xdd, 0x65, 0xe4, 0x12, 0x3c, 0x73, + 0x33, 0x81, 0x80, 0xc6, 0x4c, 0x9f, 0xe7, 0x40, + 0x0b, 0x76, 0xf0, 0x5d, 0x5b, 0x5c, 0x18, 0x65, + 0x77, 0x28, 0xe2, 0x50, 0xac, 0x9b, 0x76, 0xaf, + 0xdd, 0xc0, 0xe4, 0xe7, 0xf8, 0x7f, 0x2a, 0xb6, + 0x48, 0xb8, 0xbf, 0x9d, 0x4f, 0xfa, 0xcb, 0x67, + 0x90, 0x8f, 0x74, 0x39, 0xfe, 0x47, 0xf9, 0xd5, + 0x05, 0xd1, 0xf5, 0x45, 0xce, 0xdb, 0x77, 0x1b, + 0x86, 0x0e, 0x18, 0x72, 0x3f, 0x3a, 0x70, 0xd2, + 0xf5, 0x71, 0x23, 0x48, 0x21, 0x94, 0x3b, 0x67, + 0x2d, 0xbc, 0x64, 0xe7, 0xaf, 0x39, 0xa0, 0x0c, + 0xca, 0x2b, 0x43, 0xfb, 0x17, 0x52, 0xff, 0x00, + 0x9f, 0x56, 0xfc, 0xc7, 0xf8, 0xd1, 0xfd, 0x8b, + 0xa9, 0x7f, 0xcf, 0xab, 0x7e, 0x63, 0xfc, 0x68, + 0x03, 0x3e, 0x8a, 0xd0, 0xfe, 0xc5, 0xd4, 0xbf, + 0xe7, 0xd5, 0xbf, 0x31, 0xfe, 0x34, 0x7f, 0x62, + 0xea, 0x5f, 0xf3, 0xea, 0xdf, 0x98, 0xff, 0x00, + 0x1a, 0x00, 0xcf, 0xa2, 0xb4, 0x3f, 0xb1, 0x75, + 0x2f, 0xf9, 0xf5, 0x6f, 0xcc, 0x7f, 0x8d, 0x1f, + 0xd8, 0xba, 0x97, 0xfc, 0xfa, 0xb7, 0xe6, 0x3f, + 0xc6, 0x80, 0x33, 0xe8, 0xad, 0x0f, 0xec, 0x5d, + 0x4b, 0xfe, 0x7d, 0x5b, 0xf3, 0x1f, 0xe3, 0x47, + 0xf6, 0x2e, 0xa5, 0xff, 0x00, 0x3e, 0xad, 0xf9, + 0x8f, 0xf1, 0xa0, 0x0d, 0xbb, 0xaf, 0xbd, 0x1f, + 0xfd, 0x72, 0x5f, 0xe5, 0x50, 0xd4, 0xf7, 0x8a, + 0x56, 0x44, 0x56, 0x18, 0x22, 0x35, 0x07, 0xf2, + 0xa8, 0x28, 0x02, 0x86, 0xbd, 0xf7, 0xad, 0x3f, + 0xeb, 0x8f, 0xfe, 0xcc, 0x6b, 0x26, 0xb5, 0xb5, + 0xe0, 0x73, 0x68, 0xd8, 0xe0, 0xc5, 0x80, 0x7f, + 0x13, 0x59, 0x34, 0x00, 0x0e, 0x78, 0xab, 0x92, + 0xd9, 0x20, 0x8d, 0x8d, 0xbc, 0xfe, 0x7b, 0x23, + 0x84, 0x60, 0xab, 0xdc, 0xf4, 0xda, 0x7b, 0xf4, + 0xaa, 0x80, 0x02, 0x40, 0x27, 0x1e, 0xf5, 0xab, + 0x24, 0x32, 0x45, 0x64, 0xd1, 0x5c, 0x14, 0x8d, + 0x16, 0x45, 0xf2, 0xa5, 0x5f, 0xe3, 0xeb, 0x93, + 0xc7, 0xde, 0xe3, 0x9c, 0xd0, 0x06, 0x56, 0xc6, + 0x0b, 0xbb, 0x69, 0xdb, 0x9c, 0x67, 0x1d, 0xea, + 0xc5, 0xb5, 0xa1, 0xb8, 0x82, 0x69, 0x77, 0x85, + 0xf2, 0xc7, 0xca, 0x31, 0xf7, 0x8e, 0x09, 0xc7, + 0xe4, 0x0d, 0x4b, 0xa8, 0x5d, 0x47, 0x74, 0xa8, + 0xd1, 0x96, 0x52, 0x84, 0x82, 0xa4, 0x7d, 0xef, + 0xf6, 0xfe, 0xa7, 0xbd, 0x4f, 0x0c, 0xd6, 0xf6, + 0x71, 0x5a, 0x2c, 0xd1, 0xc8, 0xcf, 0xfe, 0xb8, + 0xed, 0x70, 0x07, 0x3c, 0x60, 0xf1, 0xcf, 0x03, + 0xf5, 0xa0, 0x0c, 0xe1, 0x04, 0xc6, 0x33, 0x20, + 0x86, 0x42, 0x80, 0x6e, 0x2c, 0x14, 0xe3, 0x1e, + 0xbf, 0xa5, 0x02, 0x19, 0x9a, 0x23, 0x2a, 0xc4, + 0xe6, 0x31, 0xd5, 0xc2, 0x9c, 0x0f, 0xc6, 0xb5, + 0xdd, 0x1a, 0x0b, 0xcb, 0x4b, 0x7d, 0xc4, 0xaa, + 0x45, 0x28, 0x1e, 0xe3, 0x2f, 0xfd, 0x31, 0x45, + 0x94, 0x67, 0xca, 0x80, 0x2c, 0x65, 0xd1, 0xe1, + 0x71, 0xe6, 0x33, 0x9c, 0x06, 0x3b, 0x86, 0xd5, + 0x19, 0xc7, 0xff, 0x00, 0xae, 0x80, 0x33, 0x24, + 0xb3, 0x94, 0x4d, 0xe5, 0x44, 0x8f, 0x2b, 0x6c, + 0x57, 0xf9, 0x17, 0x3c, 0x15, 0x07, 0xfa, 0xd4, + 0x69, 0x04, 0xd2, 0x06, 0x29, 0x0c, 0x8c, 0x14, + 0xe0, 0xe1, 0x49, 0xc5, 0x6a, 0xce, 0x92, 0xcb, + 0x14, 0x91, 0x5b, 0x86, 0x33, 0x62, 0x06, 0x2a, + 0xbd, 0x4a, 0xf9, 0x7f, 0xd0, 0xd5, 0x86, 0xf3, + 0x25, 0xba, 0xb7, 0x7b, 0x66, 0xca, 0xa5, 0xc9, + 0xf3, 0x59, 0x4f, 0x19, 0xf9, 0x72, 0x4f, 0xd7, + 0x9a, 0x00, 0xc3, 0x82, 0x07, 0x9e, 0xe1, 0x61, + 0x5f, 0x95, 0x8f, 0x5d, 0xdc, 0x63, 0x1d, 0x49, + 0xa9, 0x65, 0xb7, 0x80, 0x44, 0x5e, 0x0b, 0xa1, + 0x2e, 0xd2, 0x01, 0x52, 0x9b, 0x4f, 0xd4, 0x7a, + 0xd4, 0x96, 0xcc, 0xab, 0xa9, 0x4a, 0xae, 0xc1, + 0x04, 0x82, 0x48, 0xf7, 0x13, 0xc0, 0x24, 0x10, + 0x2a, 0x5b, 0x4b, 0x39, 0x2d, 0x2e, 0xa1, 0x9a, + 0xef, 0x6c, 0x2a, 0xb2, 0x28, 0x50, 0xe7, 0xef, + 0x73, 0xd7, 0xe8, 0x3d, 0x68, 0x02, 0x8b, 0x5b, + 0x4e, 0x8c, 0x15, 0xe0, 0x91, 0x58, 0x8d, 0xc1, + 0x4a, 0x1c, 0xe3, 0xd6, 0x86, 0xb6, 0xb8, 0x40, + 0xc5, 0xa0, 0x95, 0x42, 0x7d, 0xec, 0xa1, 0xf9, + 0x7e, 0xb5, 0xad, 0x6c, 0xb3, 0xc1, 0x0e, 0xdb, + 0x8d, 0xcb, 0x37, 0xef, 0x5d, 0x03, 0x1e, 0x71, + 0xe5, 0x9c, 0x9f, 0xcf, 0x15, 0x14, 0x6e, 0xc5, + 0x6d, 0x54, 0xb1, 0x23, 0xec, 0x73, 0x71, 0xff, + 0x00, 0x7d, 0xff, 0x00, 0x80, 0xa0, 0x0c, 0xd6, + 0xb7, 0x9d, 0x63, 0xf3, 0x1a, 0x19, 0x02, 0x0c, + 0x7c, 0xc5, 0x4e, 0x39, 0xe9, 0x41, 0x86, 0x61, + 0x10, 0x94, 0xc4, 0xe2, 0x33, 0xc0, 0x7d, 0xa7, + 0x07, 0xf1, 0xad, 0x69, 0x92, 0x55, 0xf3, 0x65, + 0x7c, 0xf9, 0x1f, 0x63, 0x45, 0x07, 0x3c, 0x67, + 0x6a, 0xe0, 0x7d, 0x73, 0xcd, 0x3f, 0xca, 0x61, + 0x6f, 0x32, 0x2c, 0x65, 0x94, 0xdb, 0x2e, 0xc9, + 0x19, 0x89, 0x2f, 0x8d, 0xa7, 0x81, 0x9c, 0x60, + 0x73, 0xf4, 0xc5, 0x00, 0x64, 0x0b, 0x4b, 0x92, + 0xfb, 0x05, 0xbc, 0xa5, 0xb1, 0x9d, 0xbb, 0x0e, + 0x7d, 0x28, 0x36, 0xb3, 0x0b, 0x61, 0x70, 0x63, + 0x6f, 0x2c, 0xb1, 0x5c, 0xe0, 0xf5, 0xad, 0x59, + 0x43, 0xbd, 0xcd, 0xfb, 0x85, 0x69, 0x98, 0x5c, + 0x6d, 0xd8, 0x5c, 0x85, 0x55, 0xcb, 0x7c, 0xc7, + 0x07, 0xb5, 0x4b, 0x32, 0xed, 0xbb, 0x49, 0x18, + 0x62, 0x35, 0xbd, 0x66, 0x2c, 0x7a, 0x00, 0xc1, + 0x76, 0x9f, 0xa5, 0x00, 0x62, 0x35, 0xb5, 0xc2, + 0x38, 0x46, 0x82, 0x45, 0x62, 0x32, 0x01, 0x43, + 0x92, 0x3d, 0x68, 0x6b, 0x6b, 0x85, 0x46, 0x76, + 0x82, 0x40, 0xaa, 0x70, 0xcc, 0x50, 0xe0, 0x1a, + 0xd6, 0xb6, 0x13, 0xdb, 0xc3, 0xb6, 0x7d, 0xcb, + 0x36, 0x65, 0x74, 0x0c, 0x79, 0xc7, 0x96, 0x72, + 0x7f, 0x3c, 0x54, 0x51, 0xac, 0x92, 0xd8, 0x86, + 0x91, 0x64, 0x40, 0x90, 0xb6, 0xd9, 0xd1, 0xfe, + 0x52, 0x39, 0x3b, 0x58, 0x7a, 0x93, 0xc5, 0x00, + 0x64, 0xd1, 0x45, 0x14, 0x01, 0xb7, 0xa2, 0x7f, + 0xc8, 0x3e, 0xef, 0xfd, 0xf4, 0xfe, 0xb5, 0x6a, + 0xab, 0x68, 0xa0, 0x8d, 0x3a, 0xe5, 0x88, 0xe0, + 0xc8, 0xa0, 0x1f, 0x7e, 0x6a, 0xcd, 0x00, 0x5e, + 0x93, 0xfe, 0x3d, 0xa1, 0xff, 0x00, 0x79, 0x3f, + 0x98, 0xa2, 0x96, 0x4f, 0xf8, 0xf5, 0x87, 0xfd, + 0xe4, 0xfe, 0x62, 0x8a, 0x00, 0x7d, 0xaf, 0xfa, + 0xb7, 0xff, 0x00, 0xae, 0x8d, 0xff, 0x00, 0xa1, + 0x1a, 0x9a, 0xa1, 0xb5, 0xff, 0x00, 0x56, 0xff, + 0x00, 0xf5, 0xd1, 0xff, 0x00, 0xf4, 0x23, 0x53, + 0xd0, 0x06, 0x65, 0xdf, 0xfc, 0x7c, 0xbf, 0xe1, + 0xfc, 0xaa, 0xb6, 0xa1, 0xff, 0x00, 0x20, 0x49, + 0xbf, 0xeb, 0xa2, 0xd5, 0x9b, 0xbf, 0xf8, 0xf9, + 0x7f, 0xc3, 0xf9, 0x54, 0x57, 0x30, 0x4b, 0x71, + 0xa4, 0x4b, 0x1c, 0x28, 0x5d, 0xfc, 0xc5, 0x38, + 0x14, 0x01, 0xcc, 0xd1, 0x57, 0x7f, 0xb2, 0x35, + 0x1f, 0xf9, 0xf4, 0x92, 0x8f, 0xec, 0x8d, 0x47, + 0xfe, 0x7d, 0x24, 0xa0, 0x0a, 0x54, 0x55, 0xdf, + 0xec, 0x8d, 0x47, 0xfe, 0x7d, 0x24, 0xa3, 0xfb, + 0x23, 0x51, 0xff, 0x00, 0x9f, 0x49, 0x28, 0x02, + 0xd6, 0x8f, 0x04, 0xc8, 0x12, 0x74, 0x85, 0xdc, + 0xca, 0xc5, 0x03, 0x05, 0x24, 0x2a, 0x8e, 0xbf, + 0x9f, 0x4f, 0xce, 0xa0, 0x16, 0xd1, 0x2d, 0x83, + 0x5c, 0xbc, 0x4c, 0x1e, 0x3c, 0xc4, 0xc8, 0x73, + 0xf7, 0xff, 0x00, 0xbd, 0xf9, 0x7e, 0xa0, 0x7a, + 0xd3, 0xa0, 0xd3, 0xf5, 0x48, 0x25, 0x59, 0x12, + 0xd6, 0x4c, 0xaf, 0x40, 0x7a, 0x54, 0x82, 0xd3, + 0x55, 0x08, 0x13, 0xec, 0x6d, 0xb3, 0xcb, 0x28, + 0x57, 0x1c, 0x1c, 0xf3, 0x9e, 0xbd, 0x73, 0xcf, + 0xe0, 0x28, 0x02, 0xae, 0x94, 0xc4, 0x5f, 0xc4, + 0x03, 0x10, 0x39, 0xe3, 0xf0, 0x35, 0x3e, 0x9f, + 0x6f, 0x14, 0xcb, 0x19, 0xb8, 0x54, 0x3e, 0x6c, + 0xbb, 0x03, 0xbc, 0x8d, 0x9e, 0xdf, 0x74, 0x0e, + 0xfc, 0xf7, 0xe2, 0x92, 0x0d, 0x3b, 0x53, 0x82, + 0x65, 0x95, 0x2c, 0xdc, 0xb2, 0xfa, 0x8e, 0x2a, + 0x58, 0x2d, 0xb5, 0x58, 0x11, 0x15, 0x6c, 0x72, + 0x63, 0x6d, 0xc8, 0xcc, 0xb9, 0x2a, 0x7b, 0xe3, + 0x9f, 0x6a, 0x00, 0x6c, 0x76, 0xf6, 0xa0, 0x43, + 0x1b, 0xc3, 0xb9, 0x9e, 0x09, 0x24, 0x67, 0xdc, + 0x41, 0xca, 0x96, 0xe9, 0xff, 0x00, 0x7c, 0xd3, + 0x44, 0x36, 0xde, 0x53, 0x5c, 0x1b, 0x71, 0x83, + 0x6d, 0xe6, 0x04, 0x0c, 0x70, 0x1b, 0xcc, 0xdb, + 0xeb, 0x9c, 0x54, 0x8d, 0x6d, 0xaa, 0x34, 0x8a, + 0xe2, 0xc7, 0x6e, 0xd8, 0xde, 0x30, 0x00, 0xe3, + 0x0d, 0xbb, 0x3d, 0xff, 0x00, 0xda, 0x35, 0x2d, + 0xbd, 0xae, 0xa0, 0x90, 0xc8, 0xb2, 0x59, 0x93, + 0xb6, 0x0f, 0x2d, 0x14, 0xaf, 0x0d, 0xf3, 0x86, + 0x39, 0xfd, 0x68, 0x02, 0x31, 0x65, 0x0f, 0x95, + 0xf6, 0x94, 0x81, 0x18, 0x3a, 0xa1, 0x11, 0x3c, + 0xbb, 0x55, 0x72, 0x0e, 0x79, 0x24, 0x67, 0xa7, + 0xad, 0x41, 0x79, 0x05, 0xb5, 0xbd, 0xb1, 0xf2, + 0xd0, 0x3b, 0x34, 0xac, 0xaa, 0xfb, 0xf3, 0x85, + 0x01, 0x4f, 0x6e, 0x0f, 0x5a, 0xb0, 0x60, 0xd5, + 0x19, 0x9b, 0x7e, 0x9e, 0x1e, 0x36, 0x0a, 0x04, + 0x65, 0x7e, 0x55, 0xc7, 0x4c, 0x73, 0x9a, 0x86, + 0x5b, 0x0d, 0x4e, 0x58, 0xc2, 0x1b, 0x22, 0x00, + 0x76, 0x71, 0xb5, 0x40, 0xe4, 0xe3, 0xfc, 0x28, + 0x00, 0xb2, 0x8d, 0x26, 0xb7, 0xb5, 0x8e, 0x41, + 0x94, 0x7b, 0xbd, 0xac, 0x3d, 0x46, 0x16, 0x96, + 0xde, 0x0b, 0x59, 0xd1, 0x64, 0x30, 0x6d, 0x55, + 0xf3, 0x41, 0x01, 0x8f, 0xcd, 0x84, 0xdc, 0x0f, + 0xd6, 0x96, 0x0b, 0x4d, 0x56, 0x01, 0x10, 0x4b, + 0x36, 0x3e, 0x54, 0xbe, 0x68, 0xc8, 0xef, 0xc7, + 0xbf, 0xb5, 0x4d, 0x63, 0x69, 0xa8, 0xc0, 0x4a, + 0xbd, 0xa3, 0x04, 0x02, 0x46, 0x04, 0xae, 0x7e, + 0x62, 0x84, 0x01, 0xfc, 0xa8, 0x02, 0xb3, 0x41, + 0x04, 0x96, 0x0f, 0x72, 0xb1, 0x04, 0x6f, 0x2b, + 0x3b, 0x43, 0x1c, 0x06, 0x0e, 0xa3, 0x3c, 0x9f, + 0x43, 0x4f, 0x8d, 0x21, 0x85, 0x67, 0x1e, 0x52, + 0x90, 0xd6, 0x88, 0xe7, 0x24, 0xf5, 0x25, 0x73, + 0xdf, 0xdf, 0xf4, 0xa9, 0x3e, 0xcf, 0xaa, 0x67, + 0x1f, 0xd9, 0xc3, 0xca, 0xd9, 0xb3, 0xca, 0xc1, + 0xdb, 0x8c, 0xe7, 0xd7, 0x3d, 0x7d, 0xe8, 0xf2, + 0x35, 0x5f, 0x34, 0xc8, 0x6c, 0x41, 0xdd, 0x18, + 0x88, 0xae, 0xde, 0x30, 0x31, 0x8e, 0xfe, 0xc2, + 0x80, 0x2a, 0xea, 0x10, 0xc4, 0x91, 0x87, 0x82, + 0x14, 0xf2, 0xb7, 0xe1, 0x65, 0x8e, 0x4d, 0xc0, + 0x8f, 0x46, 0x07, 0xa1, 0xfc, 0xaa, 0x85, 0x6b, + 0x4f, 0x67, 0xa9, 0x4d, 0x19, 0x8c, 0x69, 0xe2, + 0x25, 0x2d, 0xb9, 0xbc, 0xb5, 0xc6, 0xe3, 0xf9, + 0xfb, 0x9a, 0xad, 0xfd, 0x91, 0xa8, 0xff, 0x00, + 0xcf, 0xa4, 0x94, 0x01, 0x4a, 0x8a, 0xbb, 0xfd, + 0x91, 0xa8, 0xff, 0x00, 0xcf, 0xa4, 0x94, 0x7f, + 0x64, 0x6a, 0x3f, 0xf3, 0xe9, 0x25, 0x00, 0x52, + 0xad, 0x4f, 0x0f, 0x7f, 0xc8, 0x48, 0xff, 0x00, + 0xd7, 0x26, 0xfe, 0x55, 0x07, 0xf6, 0x46, 0xa3, + 0xff, 0x00, 0x3e, 0x92, 0x56, 0x8e, 0x8b, 0x61, + 0x77, 0x6d, 0x7c, 0x64, 0x9a, 0x07, 0x44, 0xf2, + 0xd8, 0x64, 0xfd, 0x28, 0x02, 0x7a, 0x28, 0xa2, + 0x80, 0x28, 0xeb, 0xf2, 0xca, 0x9a, 0x80, 0x54, + 0x91, 0xd4, 0x79, 0x6b, 0xc0, 0x6c, 0x76, 0xa8, + 0x5e, 0x0b, 0x80, 0xf6, 0xc9, 0x1d, 0xd9, 0x91, + 0xa7, 0xe3, 0x86, 0x38, 0x53, 0x9c, 0x75, 0xef, + 0x4f, 0xf1, 0x0f, 0xfc, 0x84, 0x87, 0xfd, 0x72, + 0x5f, 0xe5, 0x53, 0x24, 0x13, 0x5b, 0x0d, 0x3e, + 0x49, 0xe2, 0x78, 0xd1, 0x18, 0x87, 0x66, 0x18, + 0x0b, 0x96, 0xef, 0x40, 0x15, 0x8c, 0x52, 0x3b, + 0x43, 0xf6, 0x7b, 0xd9, 0x25, 0x49, 0x24, 0xf2, + 0xf2, 0x72, 0xb8, 0x6f, 0xa6, 0x7a, 0x73, 0x4c, + 0xd9, 0x2f, 0xd9, 0x24, 0xb8, 0x17, 0x8c, 0x76, + 0x30, 0x01, 0x01, 0x39, 0x23, 0x38, 0xc9, 0xf4, + 0xe9, 0x56, 0x60, 0x89, 0xec, 0xed, 0x58, 0x4c, + 0xbb, 0x64, 0x52, 0xd2, 0x80, 0x7d, 0x97, 0x68, + 0x3f, 0x9b, 0x0f, 0xca, 0xa1, 0xb5, 0xb4, 0xb8, + 0x93, 0x4c, 0xb9, 0x64, 0x85, 0xd9, 0x5c, 0xa1, + 0x52, 0x07, 0x5c, 0x13, 0x9a, 0x00, 0x1a, 0x29, + 0x56, 0x16, 0xc5, 0xe4, 0x86, 0x75, 0x8c, 0x48, + 0xd1, 0xf3, 0xc2, 0x9c, 0x77, 0xcf, 0x5c, 0x11, + 0x43, 0x45, 0x2a, 0xc2, 0xd8, 0xbc, 0x90, 0xce, + 0xb1, 0x89, 0x1a, 0x3e, 0x78, 0x53, 0x8e, 0xf9, + 0xeb, 0x82, 0x2a, 0x59, 0x14, 0x86, 0x9e, 0xf4, + 0x8f, 0xdc, 0xc9, 0x6e, 0x15, 0x5b, 0xd5, 0x8a, + 0x81, 0x8f, 0xa8, 0xe7, 0xf2, 0xa2, 0x45, 0x21, + 0xa7, 0xbd, 0x23, 0xf7, 0x32, 0x5b, 0x85, 0x56, + 0xf5, 0x62, 0xa0, 0x63, 0xea, 0x39, 0xfc, 0xa8, + 0x02, 0x08, 0x46, 0xeb, 0x51, 0x3c, 0xf7, 0xd3, + 0xc6, 0x0b, 0x94, 0x01, 0x57, 0x77, 0x40, 0x0f, + 0xf7, 0x87, 0xad, 0x34, 0xa5, 0xcb, 0xc7, 0x2c, + 0xd0, 0x4d, 0x3c, 0x90, 0x46, 0xc1, 0x4b, 0x9c, + 0x8e, 0xbf, 0x9f, 0xf9, 0xc5, 0x59, 0xb3, 0x5b, + 0x96, 0xd2, 0x87, 0xd9, 0xad, 0xd6, 0x63, 0xe7, + 0xb6, 0x41, 0x88, 0x3e, 0x3e, 0x55, 0xf5, 0xa8, + 0xfc, 0xb9, 0xfe, 0xcb, 0x78, 0xb2, 0x45, 0xb2, + 0x41, 0x24, 0x6e, 0xc8, 0x17, 0x6e, 0x06, 0x1b, + 0x9c, 0x7e, 0x22, 0x80, 0x21, 0xbb, 0x4b, 0xbb, + 0x69, 0x5d, 0x4c, 0x93, 0x94, 0x57, 0x28, 0xb2, + 0x1c, 0x80, 0xd8, 0x34, 0xc6, 0x17, 0xca, 0xe1, + 0x18, 0x5c, 0x06, 0x23, 0x70, 0x07, 0x76, 0x71, + 0xeb, 0x5a, 0xc9, 0x28, 0xfe, 0xd2, 0xbc, 0x69, + 0x9b, 0xe4, 0x5b, 0xa4, 0xea, 0x78, 0x1f, 0x31, + 0x02, 0x9a, 0x85, 0xe1, 0x21, 0x4c, 0x33, 0x46, + 0xc1, 0x66, 0x70, 0xd2, 0xca, 0x19, 0xb3, 0xe5, + 0x9c, 0xe3, 0x81, 0xed, 0xcd, 0x00, 0x66, 0x15, + 0xbf, 0x50, 0xc4, 0x8b, 0x90, 0x17, 0x96, 0x27, + 0x77, 0x1f, 0xe7, 0x06, 0x9a, 0xad, 0x78, 0xd1, + 0xb4, 0xaa, 0x67, 0x31, 0xaf, 0x57, 0x04, 0xe0, + 0x7e, 0x35, 0x7e, 0x17, 0x63, 0x26, 0x9e, 0xa5, + 0x8e, 0x0d, 0xbc, 0x9c, 0x7d, 0x4b, 0xe6, 0x9f, + 0x09, 0x1f, 0x65, 0xb6, 0x95, 0x21, 0x96, 0x45, + 0x8e, 0x26, 0x56, 0x2b, 0x28, 0x54, 0x1d, 0x72, + 0x18, 0x63, 0xff, 0x00, 0xd7, 0xc5, 0x00, 0x67, + 0xdc, 0x0b, 0xdb, 0x66, 0x55, 0x99, 0xe5, 0x52, + 0xca, 0x18, 0x64, 0x91, 0xd6, 0xac, 0xcd, 0x6d, + 0x73, 0x16, 0xa6, 0xb6, 0x62, 0xed, 0xd8, 0x31, + 0x1f, 0xbc, 0xc9, 0xe9, 0xdc, 0xe3, 0x3d, 0xb9, + 0xfc, 0xaa, 0x0d, 0x45, 0x58, 0x49, 0x03, 0x90, + 0x76, 0xb4, 0x11, 0xed, 0x3e, 0xb8, 0x50, 0x0d, + 0x69, 0x5c, 0xba, 0xf9, 0x97, 0x13, 0x12, 0x3c, + 0xc8, 0xa5, 0x78, 0x47, 0xfc, 0x09, 0xb8, 0xfd, + 0x37, 0xd0, 0x05, 0x38, 0x6d, 0xe7, 0x96, 0xf2, + 0x7b, 0x7f, 0xb5, 0xba, 0xf9, 0x44, 0xae, 0xe2, + 0x4f, 0xcc, 0x73, 0xb4, 0x0e, 0xbd, 0xcd, 0x43, + 0x6c, 0x26, 0x95, 0x64, 0x79, 0x6e, 0x9e, 0x28, + 0xa3, 0xc6, 0xe6, 0xc9, 0x27, 0x27, 0xa0, 0x03, + 0xd6, 0xae, 0x5c, 0x3c, 0x36, 0xcd, 0x3b, 0x4a, + 0xb2, 0x16, 0x9a, 0xe9, 0x99, 0x7c, 0xb6, 0x0a, + 0x40, 0x53, 0xc7, 0x50, 0x7b, 0x93, 0xf9, 0x52, + 0x4d, 0x17, 0x9e, 0xb7, 0x30, 0xc0, 0x3e, 0x69, + 0x5d, 0x2e, 0x22, 0x4c, 0xfd, 0xe0, 0x41, 0xc8, + 0x1f, 0x4d, 0xdf, 0xa5, 0x00, 0x53, 0xb8, 0x67, + 0x8b, 0x63, 0x45, 0x78, 0xf2, 0xa3, 0x8c, 0x83, + 0xb8, 0x82, 0x3e, 0xa3, 0xb5, 0x4f, 0x0c, 0x32, + 0x32, 0x6e, 0x9a, 0xf6, 0x58, 0xff, 0x00, 0x74, + 0x65, 0x20, 0x02, 0xc4, 0x2e, 0xe0, 0x07, 0x71, + 0xd6, 0xaa, 0x5c, 0x5b, 0x3d, 0xb6, 0xc5, 0x90, + 0x81, 0x23, 0x0c, 0x94, 0xee, 0xbf, 0x5a, 0xd1, + 0x0c, 0xab, 0x2c, 0xee, 0xc8, 0x24, 0x4f, 0xb1, + 0x47, 0x85, 0x62, 0x70, 0x7e, 0xe7, 0xa7, 0xbd, + 0x00, 0x42, 0x21, 0x79, 0x36, 0x34, 0x17, 0xd2, + 0x3a, 0xc8, 0x59, 0x57, 0x20, 0xa9, 0xde, 0x06, + 0x76, 0xe3, 0x3d, 0xea, 0x39, 0x92, 0xe2, 0x3b, + 0x1b, 0x7b, 0xa1, 0x73, 0x23, 0x09, 0x4b, 0x02, + 0xb9, 0x3f, 0x2e, 0x0e, 0x07, 0x7e, 0xf8, 0x35, + 0x60, 0x37, 0x9a, 0xfa, 0x73, 0x5b, 0x46, 0xb1, + 0xc5, 0xe6, 0x80, 0x51, 0x73, 0xc4, 0x99, 0x19, + 0xc9, 0x3e, 0xd8, 0xa9, 0x93, 0xca, 0x99, 0x62, + 0x81, 0xc8, 0x11, 0x32, 0x19, 0x47, 0xfc, 0x06, + 0x46, 0x27, 0xff, 0x00, 0x1d, 0x2d, 0x40, 0x15, + 0xa6, 0xb6, 0xb8, 0x88, 0x90, 0x6e, 0xe4, 0x24, + 0x5b, 0xf9, 0xc4, 0x73, 0xc1, 0xce, 0x36, 0xf5, + 0xaa, 0xd7, 0x06, 0x78, 0x0c, 0x63, 0xed, 0x12, + 0x36, 0xf8, 0xd5, 0xfe, 0xf1, 0xe3, 0x22, 0xaf, + 0x3c, 0x8d, 0x2a, 0xbc, 0xad, 0xf7, 0x9e, 0xcd, + 0x98, 0xfe, 0x32, 0x1a, 0xa5, 0xa8, 0x7d, 0xfb, + 0x7f, 0xfa, 0xe0, 0x9f, 0xca, 0x80, 0x3a, 0x0b, + 0xae, 0x5a, 0x3c, 0xf7, 0x8d, 0x7f, 0x95, 0x43, + 0x53, 0x5d, 0x7d, 0xe8, 0xff, 0x00, 0xeb, 0x92, + 0xff, 0x00, 0x2a, 0x86, 0x80, 0x09, 0x61, 0x8a, + 0xf2, 0xdb, 0xec, 0xf3, 0x36, 0xc2, 0xa7, 0x31, + 0xc9, 0xfd, 0xd3, 0xe8, 0x7d, 0xab, 0x31, 0xb4, + 0x3b, 0xf0, 0xd8, 0x48, 0xd2, 0x45, 0xfe, 0xf2, + 0x48, 0xb8, 0x3f, 0x99, 0xad, 0x3a, 0x28, 0x03, + 0x2f, 0xfb, 0x0f, 0x52, 0xff, 0x00, 0x9f, 0x71, + 0xff, 0x00, 0x7f, 0x13, 0xfc, 0x68, 0xfe, 0xc3, + 0xd4, 0xbf, 0xe7, 0xdc, 0x7f, 0xdf, 0xc4, 0xff, + 0x00, 0x1a, 0xd4, 0xa2, 0x80, 0x32, 0xff, 0x00, + 0xb0, 0xf5, 0x2f, 0xf9, 0xf7, 0x1f, 0xf7, 0xf1, + 0x3f, 0xc6, 0x8f, 0xec, 0x3d, 0x4b, 0xfe, 0x7d, + 0xc7, 0xfd, 0xfc, 0x4f, 0xf1, 0xad, 0x4a, 0x28, + 0x03, 0x2f, 0xfb, 0x0f, 0x52, 0xff, 0x00, 0x9f, + 0x71, 0xff, 0x00, 0x7f, 0x13, 0xfc, 0x68, 0xfe, + 0xc3, 0xd4, 0xbf, 0xe7, 0xdc, 0x7f, 0xdf, 0xc4, + 0xff, 0x00, 0x1a, 0xd4, 0xa2, 0x80, 0x32, 0xff, + 0x00, 0xb0, 0xf5, 0x2f, 0xf9, 0xf7, 0x1f, 0xf7, + 0xf1, 0x3f, 0xc6, 0xac, 0x5b, 0xe9, 0xda, 0x9d, + 0xb8, 0x1b, 0x6c, 0xa1, 0x66, 0x0d, 0xb9, 0x5d, + 0x99, 0x72, 0xa7, 0xfe, 0xfa, 0xfe, 0x75, 0x72, + 0x8a, 0x00, 0xcb, 0x3a, 0x26, 0xa4, 0x4e, 0x4d, + 0xb8, 0xcf, 0xfd, 0x74, 0x5f, 0xf1, 0xa3, 0xfb, + 0x0f, 0x52, 0xff, 0x00, 0x9f, 0x71, 0xff, 0x00, + 0x7f, 0x13, 0xfc, 0x6b, 0x52, 0x8a, 0x00, 0xcb, + 0xfe, 0xc3, 0xd4, 0xbf, 0xe7, 0xdc, 0x7f, 0xdf, + 0xc4, 0xff, 0x00, 0x1a, 0x3f, 0xb0, 0xf5, 0x2f, + 0xf9, 0xf7, 0x1f, 0xf7, 0xf1, 0x3f, 0xc6, 0xb5, + 0x28, 0xa0, 0x0c, 0xf9, 0xb4, 0x9d, 0x52, 0x77, + 0x0e, 0xd6, 0xca, 0x08, 0x55, 0x5e, 0x24, 0x5e, + 0xc0, 0x0f, 0x5f, 0x6a, 0x8f, 0xfb, 0x0f, 0x52, + 0xff, 0x00, 0x9f, 0x71, 0xff, 0x00, 0x7f, 0x13, + 0xfc, 0x6b, 0x52, 0x8a, 0x00, 0xcb, 0xfe, 0xc3, + 0xd4, 0xbf, 0xe7, 0xdc, 0x7f, 0xdf, 0xc4, 0xff, + 0x00, 0x1a, 0x3f, 0xb0, 0xf5, 0x2f, 0xf9, 0xf7, + 0x1f, 0xf7, 0xf1, 0x3f, 0xc6, 0xb5, 0x28, 0xa0, + 0x0c, 0xbf, 0xec, 0x3d, 0x4b, 0xfe, 0x7d, 0xc7, + 0xfd, 0xfc, 0x4f, 0xf1, 0xa3, 0xfb, 0x0f, 0x52, + 0xff, 0x00, 0x9f, 0x71, 0xff, 0x00, 0x7f, 0x13, + 0xfc, 0x6b, 0x52, 0x8a, 0x00, 0xcb, 0xfe, 0xc3, + 0xd4, 0xbf, 0xe7, 0xdc, 0x7f, 0xdf, 0xc4, 0xff, + 0x00, 0x1a, 0x7c, 0x7a, 0x1d, 0xd9, 0x61, 0xe7, + 0x18, 0xe1, 0x5e, 0xe5, 0x9c, 0x1f, 0xd0, 0x56, + 0x8d, 0x14, 0x00, 0xec, 0x45, 0x0c, 0x09, 0x6d, + 0x06, 0x7c, 0xb4, 0xe7, 0x71, 0xea, 0xc7, 0xd6, + 0x9b, 0x45, 0x14, 0x01, 0x7e, 0x4f, 0xf8, 0xf5, + 0x87, 0xfd, 0xe8, 0xff, 0x00, 0x98, 0xa2, 0x89, + 0x3f, 0xe3, 0xd6, 0x1f, 0xf7, 0xa3, 0xfe, 0x62, + 0x8a, 0x00, 0x92, 0xd7, 0xfd, 0x5b, 0xff, 0x00, + 0xd7, 0x47, 0xff, 0x00, 0xd0, 0x8d, 0x4d, 0x50, + 0xda, 0xff, 0x00, 0xab, 0x7f, 0xfa, 0xe8, 0xff, + 0x00, 0xfa, 0x11, 0xa9, 0xe8, 0x03, 0x2e, 0xf3, + 0xfe, 0x3e, 0x5f, 0xf0, 0xfe, 0x55, 0x15, 0xcc, + 0xf2, 0xdb, 0xe9, 0x12, 0xc9, 0x0b, 0x94, 0x7f, + 0x31, 0x46, 0x45, 0x4b, 0x79, 0xff, 0x00, 0x1f, + 0x2f, 0xf8, 0x7f, 0x2a, 0xad, 0xa8, 0x7f, 0xc8, + 0x12, 0x6f, 0xfa, 0xe8, 0xb4, 0x01, 0x97, 0xfd, + 0xaf, 0xa8, 0xff, 0x00, 0xcf, 0xdc, 0x94, 0x7f, + 0x6b, 0xea, 0x3f, 0xf3, 0xf7, 0x25, 0x51, 0xa2, + 0x80, 0x2f, 0x7f, 0x6b, 0xea, 0x3f, 0xf3, 0xf7, + 0x25, 0x1f, 0xda, 0xfa, 0x8f, 0xfc, 0xfd, 0xc9, + 0x54, 0x68, 0xa0, 0x0d, 0x08, 0xb5, 0x2d, 0x52, + 0x79, 0x16, 0x38, 0xae, 0x25, 0x67, 0x3d, 0x00, + 0xa9, 0xcc, 0xfa, 0xd8, 0x95, 0x23, 0xf3, 0x9f, + 0x73, 0xe7, 0x69, 0x0e, 0xb8, 0x38, 0xe4, 0xf3, + 0xd2, 0xaa, 0x58, 0xe7, 0xc8, 0xbd, 0xd9, 0xf7, + 0xfc, 0x9e, 0x3e, 0x9b, 0x97, 0x77, 0xe9, 0x52, + 0x69, 0x42, 0x43, 0x32, 0xee, 0x2e, 0x2d, 0xfe, + 0x7c, 0x91, 0xd3, 0x3e, 0x5b, 0x7e, 0xb8, 0xa0, + 0x09, 0x67, 0xbb, 0xd6, 0x20, 0x40, 0xf2, 0x5c, + 0x36, 0xc2, 0x71, 0xb9, 0x5d, 0x58, 0x67, 0xf0, + 0xa7, 0x7d, 0xa3, 0x5b, 0xf2, 0x7c, 0xdf, 0x36, + 0x5d, 0xbb, 0x77, 0x7d, 0xe1, 0x9c, 0x7a, 0xe3, + 0xae, 0x2a, 0x17, 0x58, 0x21, 0xd3, 0xc7, 0x94, + 0xef, 0x2a, 0x4d, 0x28, 0xde, 0xcc, 0xbb, 0x76, + 0xed, 0xed, 0x8c, 0x9f, 0x5a, 0x6d, 0xe8, 0x9c, + 0xeb, 0x33, 0x88, 0xf7, 0x79, 0x9e, 0x63, 0x6c, + 0xdb, 0xd7, 0x1d, 0xb1, 0xf8, 0x50, 0x03, 0xa1, + 0xd4, 0x75, 0x49, 0xe5, 0x58, 0xa2, 0xb9, 0x91, + 0x9d, 0x8e, 0x00, 0xc8, 0xa6, 0x36, 0xab, 0xa9, + 0x2b, 0x15, 0x37, 0x52, 0x02, 0x0e, 0x08, 0xa3, + 0x4e, 0x41, 0xe5, 0xdc, 0x4c, 0x65, 0x48, 0xb0, + 0x9b, 0x15, 0xdf, 0x38, 0xcb, 0x7d, 0x07, 0xa0, + 0x6a, 0xb1, 0x3a, 0x22, 0x4f, 0x75, 0x76, 0x04, + 0x72, 0xe6, 0x35, 0x95, 0x32, 0x32, 0xb9, 0x66, + 0x01, 0x8e, 0x0f, 0xbe, 0x68, 0x02, 0xbf, 0xf6, + 0xbe, 0xa3, 0xff, 0x00, 0x3f, 0x72, 0x51, 0xfd, + 0xaf, 0xa8, 0xff, 0x00, 0xcf, 0xdc, 0x95, 0x33, + 0x3a, 0xc7, 0x0c, 0x32, 0x0b, 0x28, 0xcb, 0x5c, + 0x39, 0x0c, 0x85, 0x73, 0xd9, 0x78, 0x5f, 0x4c, + 0xe7, 0x3c, 0x7a, 0x8a, 0x7c, 0x71, 0xdb, 0x47, + 0x6d, 0x02, 0xc8, 0xf6, 0xea, 0xb2, 0x44, 0x59, + 0xf7, 0x29, 0x2e, 0x4e, 0x4e, 0x08, 0x38, 0xe3, + 0x18, 0x1d, 0xe8, 0x02, 0x09, 0x35, 0x2d, 0x4e, + 0x26, 0xda, 0xf7, 0x32, 0x03, 0x80, 0xdd, 0x47, + 0x42, 0x32, 0x3f, 0x9d, 0x37, 0xfb, 0x5f, 0x51, + 0xff, 0x00, 0x9f, 0xb9, 0x2a, 0xeb, 0xa4, 0x61, + 0x5e, 0x62, 0xd0, 0x2b, 0xed, 0x85, 0x01, 0x9d, + 0x4b, 0x00, 0x3c, 0xb0, 0x7a, 0x60, 0xf3, 0xc5, + 0x57, 0xbb, 0x10, 0xad, 0xb0, 0x5b, 0x68, 0xe3, + 0x61, 0x2c, 0xee, 0xa1, 0xf6, 0xf2, 0x06, 0x14, + 0xe0, 0x67, 0x9e, 0xa6, 0x80, 0x22, 0x5d, 0x57, + 0x52, 0x62, 0x15, 0x6e, 0xa5, 0x24, 0x9c, 0x00, + 0x3b, 0xd1, 0xfd, 0xad, 0xa8, 0xff, 0x00, 0xcf, + 0xdc, 0x95, 0xa3, 0x12, 0x42, 0x2e, 0x10, 0xaa, + 0xc6, 0x5e, 0x1b, 0xa8, 0xe3, 0xf9, 0x21, 0x0a, + 0x06, 0x49, 0x04, 0x67, 0xab, 0x74, 0xea, 0x6a, + 0xa4, 0x6c, 0xaa, 0xb0, 0x39, 0x82, 0x27, 0x6b, + 0x89, 0xd9, 0x5f, 0x31, 0x8e, 0x83, 0x1c, 0x0f, + 0x4e, 0xbd, 0xa8, 0x02, 0x1f, 0xed, 0x7d, 0x47, + 0xfe, 0x7e, 0xe4, 0xa3, 0xfb, 0x5f, 0x51, 0xff, + 0x00, 0x9f, 0xb9, 0x29, 0xda, 0x8a, 0xc7, 0x0c, + 0x50, 0x43, 0x1c, 0x68, 0x06, 0x18, 0x97, 0xdb, + 0xcb, 0x61, 0xd8, 0x0e, 0x6b, 0x3e, 0x80, 0x2f, + 0x7f, 0x6b, 0xea, 0x3f, 0xf3, 0xf7, 0x25, 0x1f, + 0xda, 0xfa, 0x8f, 0xfc, 0xfd, 0xc9, 0x54, 0x68, + 0xa0, 0x0b, 0xdf, 0xda, 0xfa, 0x8f, 0xfc, 0xfd, + 0xc9, 0x5a, 0x1a, 0x2d, 0xfd, 0xdd, 0xcd, 0xf1, + 0x8e, 0x69, 0xdd, 0xd3, 0xcb, 0x63, 0x83, 0xf4, + 0xac, 0x1a, 0xd4, 0xf0, 0xf7, 0xfc, 0x84, 0x8f, + 0xfd, 0x72, 0x6f, 0xe5, 0x40, 0x1a, 0x34, 0x51, + 0x45, 0x00, 0x67, 0x78, 0x87, 0xfe, 0x42, 0x43, + 0xfe, 0xb9, 0x2f, 0xf2, 0xac, 0xba, 0xd4, 0xf1, + 0x0f, 0xfc, 0x84, 0x87, 0xfd, 0x72, 0x5f, 0xe5, + 0x59, 0x74, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, + 0x45, 0x14, 0x00, 0x53, 0x96, 0x39, 0x18, 0x29, + 0x54, 0x62, 0x19, 0xb6, 0x8c, 0x0e, 0xa7, 0xd2, + 0x9b, 0x5a, 0x96, 0x1f, 0xea, 0x6c, 0xff, 0x00, + 0xeb, 0xf4, 0x7f, 0xec, 0xb4, 0x01, 0x4d, 0xac, + 0x6f, 0x10, 0x65, 0xad, 0x27, 0x51, 0x90, 0x32, + 0x63, 0x3d, 0x69, 0x24, 0xb3, 0xba, 0x89, 0x0b, + 0xc9, 0x6d, 0x32, 0x20, 0xea, 0xcd, 0x19, 0x00, + 0x55, 0xd8, 0xbc, 0x8f, 0xed, 0x18, 0x3c, 0xbb, + 0xa9, 0xa4, 0x6f, 0xb4, 0x2f, 0xca, 0xd1, 0xe0, + 0x7d, 0xef, 0x5c, 0x9a, 0xaf, 0x77, 0xe4, 0x7c, + 0xfe, 0x5d, 0xd4, 0xd2, 0x36, 0xe3, 0xf2, 0xb4, + 0x78, 0x1f, 0x9e, 0x4d, 0x00, 0x46, 0xd6, 0x37, + 0x88, 0xa5, 0xda, 0xd2, 0x75, 0x50, 0x32, 0x49, + 0x8c, 0xe0, 0x0a, 0x85, 0x11, 0xe4, 0x6d, 0xa8, + 0x85, 0x9b, 0xae, 0x14, 0x66, 0xb4, 0xb5, 0x5f, + 0x23, 0xed, 0x77, 0x38, 0xba, 0x9b, 0xcc, 0xdc, + 0x7e, 0x4f, 0x2f, 0x8c, 0xfa, 0x67, 0x77, 0xf4, + 0xa8, 0x34, 0xa9, 0x5d, 0x2e, 0xf6, 0x2b, 0x61, + 0x5d, 0x5b, 0x77, 0xbf, 0xca, 0x68, 0x02, 0xbc, + 0x36, 0xf3, 0xcf, 0x9f, 0x26, 0x19, 0x24, 0xdb, + 0xd7, 0x62, 0x93, 0x8a, 0x05, 0xb4, 0xe4, 0xb8, + 0x10, 0x48, 0x4c, 0x7f, 0x7c, 0x04, 0x3f, 0x2f, + 0xd7, 0xd2, 0xa7, 0xb4, 0x78, 0x05, 0xa4, 0xd1, + 0x4b, 0x3b, 0x44, 0xcd, 0x22, 0x10, 0x55, 0x37, + 0x12, 0x00, 0x6f, 0xf1, 0xab, 0xf0, 0xc6, 0x2d, + 0xbc, 0x88, 0xe7, 0x98, 0xa1, 0x5b, 0x92, 0xd1, + 0x94, 0xe7, 0xcc, 0xe1, 0x7a, 0xfa, 0x0e, 0x9c, + 0xf3, 0xd4, 0xf1, 0x40, 0x18, 0xeb, 0x0c, 0xad, + 0x19, 0x95, 0x62, 0x73, 0x1a, 0xf5, 0x70, 0xa7, + 0x03, 0xf1, 0xa6, 0x56, 0xda, 0x0d, 0xa6, 0x14, + 0x76, 0x29, 0x70, 0x22, 0x91, 0x56, 0x11, 0xf7, + 0x5b, 0x25, 0xba, 0x9e, 0xdd, 0xff, 0x00, 0x21, + 0xd2, 0xb1, 0x28, 0x00, 0xa9, 0x1e, 0x56, 0x92, + 0x28, 0xe3, 0x60, 0x3f, 0x77, 0x90, 0x0f, 0x7c, + 0x75, 0xc7, 0xf3, 0xfc, 0xea, 0x3a, 0x28, 0x02, + 0x48, 0x65, 0x68, 0x1c, 0xba, 0x01, 0xbb, 0x04, + 0x02, 0x7b, 0x67, 0xbd, 0x47, 0x45, 0x14, 0x00, + 0x51, 0x45, 0x14, 0x01, 0xd5, 0xdd, 0x7d, 0xe8, + 0xff, 0x00, 0xeb, 0x92, 0xff, 0x00, 0x2a, 0x86, + 0xa6, 0xba, 0xfb, 0xd1, 0xff, 0x00, 0xd7, 0x25, + 0xfe, 0x55, 0x0d, 0x00, 0x14, 0x51, 0x45, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, + 0x14, 0x51, 0x45, 0x00, 0x68, 0x49, 0xff, 0x00, + 0x1e, 0xb0, 0x7f, 0xbd, 0x1f, 0xf3, 0x14, 0x51, + 0x27, 0xfc, 0x7a, 0xc1, 0xfe, 0xf4, 0x7f, 0xcc, + 0x51, 0x40, 0x0f, 0xb4, 0xff, 0x00, 0x56, 0xff, + 0x00, 0xf5, 0xd1, 0xff, 0x00, 0xf4, 0x23, 0x53, + 0xd4, 0x36, 0x9f, 0xea, 0xdf, 0xfe, 0xba, 0x3f, + 0xfe, 0x84, 0x6a, 0x7a, 0x00, 0xca, 0xbc, 0xff, + 0x00, 0x8f, 0xa7, 0xfc, 0x3f, 0x95, 0x32, 0xe6, + 0xde, 0x5b, 0x8d, 0x1a, 0x44, 0x85, 0x0b, 0xb9, + 0x94, 0x70, 0x29, 0xf7, 0x9f, 0xf1, 0xf4, 0xff, + 0x00, 0x87, 0xf2, 0xaa, 0x7a, 0xa3, 0xba, 0x69, + 0x31, 0x94, 0x72, 0xa7, 0xcf, 0xec, 0x71, 0xfc, + 0x34, 0x01, 0x9b, 0xfd, 0x91, 0xa8, 0xff, 0x00, + 0xcf, 0xa4, 0x94, 0x7f, 0x64, 0x6a, 0x3f, 0xf3, + 0xe9, 0x25, 0x57, 0xfb, 0x44, 0xff, 0x00, 0xf3, + 0xda, 0x4f, 0xfb, 0xe8, 0xd1, 0xf6, 0x89, 0xff, + 0x00, 0xe7, 0xb4, 0x9f, 0xf7, 0xd1, 0xa0, 0x0b, + 0x1f, 0xd9, 0x1a, 0x8f, 0xfc, 0xfa, 0x49, 0x47, + 0xf6, 0x46, 0xa3, 0xff, 0x00, 0x3e, 0x92, 0x53, + 0x55, 0x6e, 0xda, 0xcd, 0xee, 0x84, 0xed, 0xb1, + 0x5b, 0x69, 0x1b, 0xce, 0x7b, 0x7f, 0x88, 0xfc, + 0xea, 0x44, 0x8a, 0x63, 0x04, 0x72, 0xbe, 0xa0, + 0x91, 0x09, 0x01, 0x2a, 0x1d, 0xdf, 0x3c, 0x1c, + 0x76, 0x1e, 0xd4, 0x00, 0xe8, 0xb4, 0xdd, 0x52, + 0x19, 0x04, 0x91, 0x5b, 0xca, 0x8e, 0x3a, 0x11, + 0x52, 0xbd, 0xbe, 0xb4, 0xee, 0xae, 0xd0, 0x49, + 0x95, 0x04, 0x00, 0x10, 0x00, 0x32, 0x30, 0x78, + 0xe9, 0x50, 0xa4, 0x17, 0x2e, 0x14, 0x9b, 0xe4, + 0x40, 0xe4, 0x88, 0xf7, 0x48, 0xc3, 0x7e, 0x0e, + 0x32, 0x3d, 0xbe, 0xb8, 0xaa, 0xaf, 0x35, 0xc2, + 0x39, 0x46, 0x96, 0x40, 0xca, 0x70, 0x46, 0xe3, + 0x40, 0x16, 0xd7, 0x4d, 0xd5, 0x16, 0x26, 0x88, + 0x5b, 0x49, 0xb1, 0xc8, 0x24, 0x60, 0x75, 0x15, + 0x2f, 0xd9, 0xf5, 0xbf, 0x27, 0xc9, 0xf2, 0xa5, + 0xd9, 0xb7, 0x6f, 0xdd, 0x19, 0xc7, 0xa6, 0x7a, + 0xe2, 0xa1, 0x8e, 0x0b, 0x87, 0x86, 0x29, 0x0d, + 0xf2, 0x21, 0x94, 0x12, 0x88, 0xf2, 0x30, 0x27, + 0x9c, 0x7a, 0x63, 0xb7, 0xad, 0x36, 0x28, 0xae, + 0x9f, 0xce, 0xf3, 0x2e, 0xfc, 0x8f, 0x25, 0x82, + 0xb7, 0x98, 0xed, 0xd4, 0xe7, 0xd0, 0x1f, 0x4a, + 0x00, 0x77, 0xf6, 0x6e, 0xa9, 0xe4, 0xf9, 0x3f, + 0x66, 0x93, 0x66, 0xed, 0xd8, 0xc0, 0xeb, 0x52, + 0x47, 0x69, 0xac, 0x45, 0xb3, 0x65, 0xbc, 0x80, + 0x20, 0x2a, 0x01, 0x50, 0x46, 0x09, 0xc9, 0x1e, + 0xf5, 0x08, 0x8e, 0xe1, 0xa6, 0x31, 0xc7, 0x7a, + 0xae, 0xa1, 0x77, 0xb4, 0x81, 0xdb, 0x6a, 0x8f, + 0x7c, 0x8f, 0xf3, 0x9a, 0x65, 0xc7, 0xda, 0x60, + 0xd8, 0xdf, 0x69, 0x32, 0x23, 0xfd, 0xd7, 0x47, + 0x38, 0x34, 0x01, 0x71, 0x60, 0xd6, 0xd4, 0xb9, + 0x11, 0x4b, 0x97, 0x39, 0x24, 0xa8, 0xe0, 0xe3, + 0x1c, 0x7a, 0x7e, 0x14, 0xd4, 0xb4, 0xd6, 0x23, + 0x87, 0xca, 0x58, 0x24, 0x09, 0x82, 0x07, 0xca, + 0x32, 0x33, 0xd7, 0x07, 0xa8, 0xaa, 0x76, 0xe6, + 0xe6, 0x77, 0x2a, 0xb3, 0xb2, 0x85, 0x1b, 0x99, + 0x99, 0xc8, 0x0a, 0x3d, 0x6a, 0x67, 0x86, 0xe9, + 0x55, 0x9d, 0x6e, 0x83, 0xa0, 0x42, 0xfb, 0xd6, + 0x43, 0x82, 0x01, 0x00, 0x8f, 0xaf, 0x34, 0x01, + 0x32, 0xda, 0xeb, 0x2a, 0xe5, 0x85, 0xbb, 0x92, + 0x55, 0x54, 0x82, 0x8a, 0x41, 0x00, 0x60, 0x70, + 0x69, 0x92, 0x58, 0xea, 0xd2, 0x80, 0x1e, 0x09, + 0x5b, 0xe6, 0x2f, 0xc8, 0xee, 0x71, 0x93, 0xfa, + 0x0a, 0xac, 0x5a, 0xe4, 0x5b, 0x89, 0xfc, 0xf7, + 0xda, 0x5c, 0xa6, 0x37, 0x9c, 0xe7, 0x19, 0xfe, + 0xb4, 0xeb, 0x85, 0xbb, 0xb7, 0x8e, 0x17, 0x79, + 0x9b, 0x12, 0xae, 0xe1, 0x87, 0x3c, 0x7d, 0x7f, + 0x31, 0xf9, 0xd0, 0x05, 0xd3, 0x0e, 0xb8, 0x49, + 0x26, 0x17, 0xc9, 0x20, 0xf0, 0x8b, 0xd4, 0x1c, + 0xe7, 0xeb, 0xef, 0x48, 0xb6, 0xfa, 0xd2, 0x16, + 0x2b, 0x03, 0x82, 0xcd, 0xb8, 0xe1, 0x17, 0x83, + 0xea, 0x3d, 0x0f, 0xd2, 0xaa, 0x40, 0x97, 0x53, + 0x46, 0x5d, 0x6e, 0x0a, 0xf2, 0x42, 0x86, 0x73, + 0x96, 0x20, 0x64, 0x81, 0x51, 0xc2, 0xf7, 0x13, + 0x4d, 0x1c, 0x2b, 0x3b, 0x86, 0x76, 0x0a, 0x32, + 0xe7, 0x1c, 0xd0, 0x05, 0x87, 0xd3, 0x75, 0x49, + 0x15, 0x15, 0xed, 0xa4, 0x21, 0x06, 0xd5, 0xe0, + 0x70, 0x32, 0x4f, 0xf3, 0x26, 0x99, 0xfd, 0x91, + 0xa8, 0xff, 0x00, 0xcf, 0xa4, 0x94, 0xe8, 0xa0, + 0xbd, 0x96, 0xf8, 0xd9, 0xac, 0xec, 0x24, 0x52, + 0x41, 0x25, 0xce, 0x38, 0xa7, 0x0b, 0x5b, 0xa2, + 0x10, 0x2d, 0xea, 0x99, 0x5d, 0x03, 0xac, 0x5e, + 0x63, 0x06, 0x39, 0x19, 0x1d, 0xb1, 0x9f, 0xc6, + 0x80, 0x23, 0xfe, 0xc8, 0xd4, 0x7f, 0xe7, 0xd2, + 0x4a, 0x3f, 0xb2, 0x35, 0x1f, 0xf9, 0xf4, 0x92, + 0x96, 0x14, 0x9e, 0x48, 0x04, 0xcf, 0x7c, 0xb0, + 0xa9, 0x62, 0x80, 0x48, 0xed, 0x92, 0x46, 0x33, + 0xd0, 0x1f, 0x51, 0x55, 0x8d, 0xc4, 0xe0, 0xe3, + 0xcf, 0x93, 0xfe, 0xfa, 0x34, 0x01, 0x63, 0xfb, + 0x23, 0x51, 0xff, 0x00, 0x9f, 0x49, 0x2b, 0x47, + 0x45, 0xb0, 0xbb, 0xb6, 0xbe, 0x32, 0x4d, 0x03, + 0xa2, 0x79, 0x6c, 0x32, 0x7e, 0x95, 0x8d, 0xf6, + 0x89, 0xff, 0x00, 0xe7, 0xb4, 0x9f, 0xf7, 0xd1, + 0xad, 0x3d, 0x0a, 0x59, 0x1e, 0x7b, 0x90, 0xf2, + 0x33, 0x0f, 0xb3, 0xb7, 0x04, 0xe7, 0xb8, 0xa0, + 0x0b, 0xb4, 0x51, 0x45, 0x00, 0x51, 0xd7, 0xe2, + 0x95, 0xf5, 0x00, 0xc9, 0x1b, 0xb0, 0xf2, 0xd7, + 0x90, 0xb9, 0xed, 0x59, 0xbf, 0x67, 0x9f, 0xfe, + 0x78, 0xc9, 0xff, 0x00, 0x7c, 0x9a, 0xd8, 0xd6, + 0x2f, 0xee, 0xed, 0xee, 0x21, 0x48, 0x6e, 0x1d, + 0x14, 0xc2, 0xa7, 0x03, 0xd6, 0xa8, 0x7f, 0x6b, + 0xea, 0x3f, 0xf3, 0xf7, 0x25, 0x00, 0x56, 0xfb, + 0x3c, 0xff, 0x00, 0xf3, 0xc6, 0x4f, 0xfb, 0xe4, + 0xd1, 0xf6, 0x79, 0xff, 0x00, 0xe7, 0x8c, 0x9f, + 0xf7, 0xc9, 0xab, 0x3f, 0xda, 0xfa, 0x8f, 0xfc, + 0xfd, 0xc9, 0x52, 0x2e, 0xa3, 0xa9, 0xb5, 0xbc, + 0x93, 0x0b, 0xc7, 0xda, 0x8c, 0xaa, 0x46, 0x79, + 0xe7, 0x3f, 0xe1, 0x40, 0x14, 0xbe, 0xcf, 0x3f, + 0xfc, 0xf1, 0x93, 0xfe, 0xf9, 0x34, 0x7d, 0x9e, + 0x7f, 0xf9, 0xe3, 0x27, 0xfd, 0xf2, 0x6b, 0x4a, + 0x3b, 0xad, 0x56, 0x45, 0x8d, 0xc5, 0xe9, 0x54, + 0x75, 0x67, 0x2c, 0xcd, 0xc2, 0x80, 0x71, 0xcf, + 0x14, 0xe1, 0x71, 0xaa, 0x34, 0xd1, 0xc6, 0xba, + 0x82, 0xb2, 0xc8, 0x19, 0x96, 0x40, 0xdf, 0x2f, + 0x03, 0x27, 0xb6, 0x7f, 0x4a, 0x00, 0xcb, 0xfb, + 0x3c, 0xff, 0x00, 0xf3, 0xc6, 0x4f, 0xfb, 0xe4, + 0xd4, 0xf0, 0xbd, 0xd4, 0x2b, 0x12, 0xac, 0x0c, + 0x44, 0x72, 0xf9, 0xa3, 0x28, 0x7a, 0xf1, 0xfe, + 0x15, 0x66, 0x7b, 0xdd, 0x4a, 0x18, 0xd6, 0x41, + 0x7f, 0xe6, 0xc6, 0xc4, 0xa8, 0x68, 0xdb, 0xb8, + 0xed, 0xc8, 0x14, 0xf4, 0xb9, 0xd4, 0x0c, 0x11, + 0xca, 0xfa, 0xaa, 0x44, 0x24, 0x04, 0xa8, 0x72, + 0xd9, 0xe0, 0xe3, 0xb2, 0xfb, 0x50, 0x04, 0x1e, + 0x7c, 0xc2, 0x45, 0x91, 0x74, 0xd8, 0x91, 0xd5, + 0x83, 0x06, 0x08, 0xf9, 0xc8, 0x39, 0xf5, 0xa6, + 0x4c, 0xf2, 0x4a, 0x8c, 0xbf, 0xd9, 0xb1, 0xa3, + 0x37, 0xf1, 0xaa, 0x3e, 0x47, 0xeb, 0x41, 0xd5, + 0xb5, 0x00, 0xc4, 0x7d, 0xb1, 0xce, 0x0f, 0x50, + 0x6a, 0x7f, 0xb6, 0x6a, 0xbe, 0x4f, 0x9b, 0xf6, + 0xc6, 0xdb, 0xe5, 0xf9, 0xbd, 0x79, 0xc6, 0xed, + 0xbe, 0x9e, 0xb4, 0x01, 0x1c, 0xf3, 0xcd, 0x3b, + 0x3b, 0x3e, 0x9b, 0x16, 0xf7, 0xce, 0x58, 0x23, + 0xe7, 0x3e, 0xbd, 0x6a, 0x2b, 0x46, 0xb8, 0xb5, + 0x72, 0xeb, 0x66, 0x24, 0x63, 0xd0, 0xba, 0x37, + 0x1f, 0x91, 0x1e, 0xb5, 0x66, 0x6b, 0xcd, 0x52, + 0x1b, 0x78, 0xe6, 0x6b, 0xc6, 0xc4, 0x9d, 0x00, + 0x3c, 0x8e, 0x01, 0xf4, 0xf4, 0x22, 0x9b, 0x25, + 0xfe, 0xa5, 0x17, 0xdf, 0xbe, 0x20, 0x98, 0xd6, + 0x40, 0x33, 0xd4, 0x1e, 0xdd, 0x3a, 0xf3, 0x40, + 0x11, 0x24, 0x93, 0xa3, 0x3f, 0xfa, 0x0a, 0xb2, + 0x39, 0x07, 0xcb, 0x31, 0xb1, 0x50, 0x47, 0xa7, + 0x39, 0xfd, 0x69, 0xeb, 0x73, 0x79, 0xb8, 0xb4, + 0x96, 0xa2, 0x56, 0xdf, 0xbd, 0x4b, 0xc6, 0x7e, + 0x46, 0xf6, 0xfc, 0x87, 0x1e, 0xd4, 0x41, 0xa8, + 0xea, 0x53, 0xcf, 0x1c, 0x2b, 0x78, 0xe1, 0x9d, + 0x82, 0x82, 0x4f, 0x1c, 0xd3, 0x3f, 0xb5, 0xb5, + 0x1f, 0xf9, 0xfb, 0x93, 0xf3, 0xa0, 0x07, 0x2d, + 0xc5, 0xe0, 0x41, 0x9b, 0x6d, 0xd2, 0x28, 0x21, + 0x65, 0x68, 0xce, 0xe5, 0x07, 0x39, 0xfe, 0x66, + 0xaa, 0x7d, 0x9e, 0x7f, 0xf9, 0xe3, 0x27, 0xfd, + 0xf2, 0x6b, 0x4a, 0x1b, 0xad, 0x4e, 0x58, 0xd1, + 0xce, 0xa0, 0x22, 0xf3, 0x0e, 0x10, 0x48, 0xd8, + 0x2d, 0xdb, 0xd3, 0xf9, 0xd5, 0x77, 0xd5, 0x35, + 0x24, 0x76, 0x46, 0xba, 0x90, 0x32, 0x9c, 0x11, + 0x9a, 0x00, 0xab, 0xf6, 0x79, 0xff, 0x00, 0xe7, + 0x8c, 0x9f, 0xf7, 0xc9, 0xa3, 0xec, 0xf3, 0xff, + 0x00, 0xcf, 0x19, 0x3f, 0xef, 0x93, 0x56, 0x7f, + 0xb5, 0xf5, 0x1f, 0xf9, 0xfb, 0x92, 0x8f, 0xed, + 0x7d, 0x47, 0xfe, 0x7e, 0xe4, 0xa0, 0x0a, 0xdf, + 0x67, 0x9f, 0xfe, 0x78, 0xc9, 0xff, 0x00, 0x7c, + 0x9a, 0x3e, 0xcf, 0x3f, 0xfc, 0xf1, 0x93, 0xfe, + 0xf9, 0x35, 0x71, 0x35, 0x1d, 0x4d, 0xe1, 0x92, + 0x51, 0x78, 0xfb, 0x63, 0x20, 0x1e, 0x79, 0xe7, + 0xff, 0x00, 0xd5, 0x4c, 0xfe, 0xd7, 0xd4, 0x7f, + 0xe7, 0xee, 0x4a, 0x00, 0xad, 0xf6, 0x79, 0xff, + 0x00, 0xe7, 0x8c, 0x9f, 0xf7, 0xc9, 0xa3, 0xec, + 0xf3, 0xff, 0x00, 0xcf, 0x19, 0x3f, 0xef, 0x93, + 0x56, 0x7f, 0xb5, 0xf5, 0x1f, 0xf9, 0xfb, 0x92, + 0x8f, 0xed, 0x7d, 0x47, 0xfe, 0x7e, 0xe4, 0xa0, + 0x0d, 0xdb, 0xae, 0x1a, 0x3f, 0x68, 0xd7, 0xf9, + 0x54, 0x35, 0x3d, 0xe9, 0x26, 0xe5, 0x89, 0x3d, + 0x97, 0xf9, 0x0a, 0x82, 0x80, 0x0a, 0x28, 0xa2, + 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, + 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, + 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, + 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, + 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, + 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x34, 0x24, 0xff, + 0x00, 0x8f, 0x48, 0x3f, 0xde, 0x8f, 0xf9, 0x8a, + 0x28, 0x93, 0xfe, 0x3d, 0x20, 0xff, 0x00, 0x7a, + 0x3f, 0xe6, 0x28, 0xa0, 0x09, 0x2d, 0x3f, 0xd5, + 0x3f, 0xfd, 0x74, 0x7f, 0xfd, 0x08, 0xd4, 0xf5, + 0x05, 0xa7, 0xfa, 0xb7, 0xff, 0x00, 0xae, 0x8f, + 0xff, 0x00, 0xa1, 0x1a, 0xb1, 0x40, 0x19, 0x37, + 0x9f, 0xf1, 0xf4, 0xff, 0x00, 0x87, 0xf2, 0xaa, + 0x5a, 0xb7, 0xfc, 0x82, 0x23, 0xff, 0x00, 0xaf, + 0x8f, 0xfd, 0x96, 0xaf, 0x5e, 0xff, 0x00, 0xc7, + 0xd3, 0xfe, 0x1f, 0xca, 0xa8, 0xea, 0xdf, 0xf2, + 0x08, 0x8f, 0xfe, 0xbe, 0x3f, 0xf6, 0x5a, 0x00, + 0xc1, 0xa2, 0x8a, 0x28, 0x03, 0x6a, 0x25, 0x81, + 0x7c, 0x9b, 0x26, 0x95, 0xc4, 0x8d, 0x0e, 0xc2, + 0x9b, 0x38, 0xdc, 0xff, 0x00, 0x30, 0xe7, 0x3e, + 0xbb, 0x7b, 0x76, 0xa8, 0x5d, 0xd5, 0x2c, 0x6c, + 0xc3, 0xd9, 0xac, 0xc7, 0x63, 0x72, 0xc5, 0x86, + 0x3e, 0x76, 0xe3, 0x83, 0x59, 0xa6, 0x47, 0x32, + 0x79, 0x85, 0xd8, 0xbe, 0x73, 0xb8, 0x9e, 0x73, + 0x52, 0xa5, 0xed, 0xdc, 0x6b, 0xb5, 0x2e, 0xa6, + 0x51, 0xd7, 0x02, 0x42, 0x28, 0x02, 0xe4, 0x45, + 0x8c, 0x50, 0xc5, 0x73, 0x62, 0x65, 0x89, 0xc9, + 0xf2, 0x8a, 0x12, 0x19, 0x72, 0x79, 0x00, 0xfd, + 0x7b, 0x1a, 0xa5, 0x73, 0x0f, 0x93, 0x3c, 0xa8, + 0xb9, 0x64, 0x49, 0x0a, 0x07, 0xc7, 0x07, 0x14, + 0x2d, 0xd5, 0xca, 0xef, 0xdb, 0x71, 0x28, 0xde, + 0x72, 0xd8, 0x73, 0xf3, 0x7d, 0x69, 0x9e, 0x6b, + 0x79, 0x22, 0x2f, 0xe1, 0xdd, 0xbb, 0xf1, 0xa0, + 0x0b, 0x73, 0x45, 0x24, 0xb6, 0xb6, 0x0b, 0x1a, + 0x33, 0x92, 0x8c, 0x00, 0x03, 0xfd, 0xb6, 0xab, + 0x92, 0xc8, 0x9f, 0xf1, 0x30, 0x3e, 0x52, 0xdc, + 0x01, 0x24, 0x4a, 0x41, 0x27, 0x04, 0x80, 0xc0, + 0x9e, 0x3d, 0xeb, 0x2d, 0x6e, 0xae, 0x52, 0x2f, + 0x29, 0x2e, 0x25, 0x58, 0xff, 0x00, 0xb8, 0x1c, + 0x81, 0xf9, 0x52, 0x43, 0x71, 0x3c, 0x19, 0xf2, + 0x66, 0x92, 0x3d, 0xdd, 0x76, 0x31, 0x19, 0xa0, + 0x0b, 0x50, 0x3c, 0xa2, 0x79, 0x24, 0x82, 0xd1, + 0x02, 0x88, 0xff, 0x00, 0x79, 0x0f, 0x24, 0x15, + 0xcf, 0x3d, 0x4e, 0x7d, 0x29, 0xb7, 0x90, 0x21, + 0x82, 0x2b, 0x88, 0x60, 0x78, 0xb7, 0xee, 0xdd, + 0x19, 0x25, 0xb1, 0x8c, 0x7c, 0xc3, 0xdb, 0x9a, + 0xae, 0xd7, 0x37, 0x0f, 0x22, 0xc8, 0xd3, 0xca, + 0xd2, 0x2f, 0x01, 0xcb, 0x9c, 0x8f, 0xc6, 0x94, + 0xdc, 0xcc, 0x59, 0xd9, 0xe4, 0x67, 0x67, 0x5d, + 0x84, 0xbb, 0x12, 0x71, 0x40, 0x12, 0x58, 0xb4, + 0xc8, 0xf2, 0x3c, 0x51, 0x2c, 0xaa, 0x10, 0xf9, + 0x88, 0x79, 0xca, 0xe4, 0x7f, 0xf5, 0xab, 0x42, + 0x24, 0x82, 0x3b, 0x79, 0x6e, 0x56, 0xd8, 0xa2, + 0xc9, 0x0b, 0x03, 0x0b, 0xb1, 0x23, 0x86, 0x4e, + 0x41, 0xeb, 0x8e, 0x7f, 0x4a, 0xc7, 0x47, 0x78, + 0xd8, 0x3a, 0x3b, 0x23, 0x0e, 0x85, 0x4e, 0x0d, + 0x39, 0xe7, 0x9e, 0x46, 0x66, 0x79, 0xa4, 0x66, + 0x61, 0xb4, 0x92, 0xc4, 0xe4, 0x7a, 0x50, 0x06, + 0x8e, 0x12, 0xf2, 0xce, 0xde, 0x38, 0xa1, 0x58, + 0x43, 0x5c, 0x95, 0x21, 0x49, 0x3d, 0x87, 0x3c, + 0x9a, 0x2e, 0xde, 0x0b, 0xab, 0x6b, 0x83, 0x0c, + 0xae, 0xe5, 0x1c, 0x4a, 0x15, 0x93, 0x6e, 0xd5, + 0xfb, 0xb8, 0x1c, 0x9c, 0xff, 0x00, 0x0f, 0xe5, + 0x59, 0xab, 0x2c, 0x88, 0x00, 0x59, 0x1d, 0x40, + 0x24, 0x80, 0x0e, 0x3d, 0xa9, 0x15, 0xd9, 0x73, + 0xb5, 0x88, 0xc8, 0xc1, 0xc1, 0xea, 0x28, 0x03, + 0x62, 0xca, 0x12, 0xd6, 0xd1, 0xda, 0xc4, 0x08, + 0x92, 0x55, 0xf3, 0x7c, 0xd2, 0x33, 0xc6, 0x70, + 0xc0, 0x7a, 0x70, 0x3f, 0x4a, 0xcf, 0xb2, 0x00, + 0x6a, 0xb6, 0xe1, 0x41, 0x0b, 0xe7, 0xae, 0x33, + 0xd7, 0x1b, 0xaa, 0x15, 0xb8, 0x99, 0x23, 0xf2, + 0xd2, 0x69, 0x15, 0x33, 0x9d, 0xa1, 0x88, 0x19, + 0xa4, 0x32, 0xc8, 0x65, 0xf3, 0x4c, 0x8c, 0x64, + 0xce, 0x77, 0x93, 0xce, 0x7d, 0x73, 0x40, 0x1b, + 0x76, 0xc4, 0x79, 0xd0, 0xdd, 0x7f, 0x14, 0xe5, + 0x22, 0xfc, 0x41, 0xe7, 0xff, 0x00, 0x41, 0x5f, + 0xfb, 0xea, 0xaa, 0xbc, 0x32, 0xcb, 0xa8, 0x59, + 0xf9, 0x6a, 0x7f, 0xd5, 0x44, 0x77, 0x76, 0x1f, + 0x28, 0xe6, 0xb3, 0x84, 0xb2, 0x2e, 0xdd, 0xb2, + 0x38, 0xda, 0x77, 0x2e, 0x0f, 0x43, 0xeb, 0x4f, + 0x37, 0x57, 0x2d, 0x17, 0x94, 0x6e, 0x25, 0x31, + 0xe3, 0x1b, 0x0b, 0x9c, 0x63, 0xe9, 0x40, 0x1a, + 0x0a, 0xc9, 0x3b, 0xaa, 0x1b, 0x23, 0x2c, 0x32, + 0x5c, 0xbe, 0xd7, 0x0c, 0x46, 0x37, 0x63, 0xa6, + 0x3b, 0xf4, 0xeb, 0x59, 0x92, 0xa8, 0x49, 0x9d, + 0x14, 0xee, 0x0a, 0xc4, 0x03, 0xeb, 0x4b, 0x1c, + 0xd3, 0x44, 0xac, 0xb1, 0xca, 0xe8, 0xad, 0xf7, + 0x82, 0xb1, 0x00, 0xd4, 0x74, 0x00, 0x56, 0xb7, + 0x87, 0xff, 0x00, 0xe3, 0xe6, 0xe7, 0xfe, 0xbd, + 0xdb, 0xf9, 0xad, 0x64, 0xd6, 0xb7, 0x87, 0xff, + 0x00, 0xe3, 0xe6, 0xe7, 0xfe, 0xbd, 0xdb, 0xf9, + 0xad, 0x00, 0x5f, 0xa2, 0x8a, 0x28, 0x03, 0x3b, + 0x5f, 0xff, 0x00, 0x8f, 0xb8, 0x3f, 0xeb, 0xdd, + 0x2b, 0x2e, 0xb5, 0x35, 0xff, 0x00, 0xf8, 0xfb, + 0x83, 0xfe, 0xbd, 0xd2, 0xb2, 0xe8, 0x00, 0xab, + 0x96, 0xca, 0xd2, 0x69, 0xd7, 0x68, 0x80, 0xb3, + 0x06, 0x8d, 0xb0, 0x07, 0x38, 0x1b, 0x81, 0x3f, + 0xa8, 0xaa, 0x74, 0xe8, 0xe4, 0x78, 0x9c, 0x3c, + 0x6e, 0xc8, 0xc3, 0xba, 0x9c, 0x1a, 0x00, 0xd4, + 0x5f, 0x3e, 0x18, 0x2d, 0xd5, 0x21, 0x0e, 0x56, + 0x16, 0x32, 0xc4, 0xe3, 0xaa, 0x16, 0xf4, 0xeb, + 0xe8, 0x69, 0xf6, 0xf1, 0x42, 0xb7, 0x16, 0xd7, + 0x11, 0xc0, 0xd1, 0x79, 0x8b, 0x28, 0x31, 0x31, + 0x24, 0x70, 0x87, 0x91, 0xdf, 0x07, 0x35, 0x93, + 0xe7, 0x4b, 0xe6, 0xf9, 0xbe, 0x6b, 0xf9, 0x9f, + 0xdf, 0xdc, 0x73, 0xf9, 0xd3, 0x8d, 0xcc, 0xe6, + 0x61, 0x31, 0x9e, 0x4f, 0x34, 0x74, 0x7d, 0xe7, + 0x23, 0xf1, 0xa0, 0x0b, 0x77, 0x24, 0x49, 0xa6, + 0xab, 0x88, 0x3e, 0xce, 0xa9, 0x2e, 0x02, 0x0c, + 0xe1, 0xb2, 0x3a, 0xf3, 0xcf, 0x18, 0x1f, 0x9d, + 0x39, 0xda, 0xd4, 0x58, 0x59, 0x79, 0xf1, 0xca, + 0xcd, 0xb1, 0xb1, 0xb1, 0xc2, 0xff, 0x00, 0x1b, + 0x7a, 0x83, 0x54, 0x65, 0x9e, 0x69, 0xc8, 0x33, + 0x4a, 0xf2, 0x11, 0xd0, 0xbb, 0x13, 0x4d, 0x2e, + 0xcc, 0xaa, 0xa5, 0x89, 0x0b, 0xc0, 0x04, 0xf4, + 0xa0, 0x0d, 0x58, 0x14, 0xb4, 0xd6, 0x2c, 0xa0, + 0xed, 0x16, 0xd2, 0x7e, 0x1c, 0xbd, 0x22, 0xa9, + 0x7b, 0x15, 0x45, 0x1f, 0x33, 0x5a, 0x00, 0x3f, + 0xef, 0xfd, 0x66, 0xac, 0xf3, 0x22, 0x6c, 0x59, + 0xa4, 0x54, 0xeb, 0xb4, 0x31, 0x02, 0x85, 0x9a, + 0x55, 0xc6, 0xd9, 0x5c, 0x60, 0x60, 0x61, 0x8f, + 0x03, 0x39, 0xfe, 0x7c, 0xd0, 0x06, 0xa5, 0xcc, + 0xf1, 0x2d, 0xb3, 0x16, 0xb7, 0x49, 0x90, 0x5c, + 0xba, 0xa6, 0xe2, 0x46, 0x00, 0x55, 0x03, 0xa1, + 0xf4, 0x14, 0xb2, 0x94, 0x73, 0x29, 0xda, 0x11, + 0x1a, 0xd2, 0x2f, 0x94, 0x1e, 0x00, 0xdc, 0x95, + 0x90, 0x5d, 0x8a, 0xec, 0x2c, 0x76, 0xe7, 0x38, + 0xcf, 0x19, 0xf5, 0xa5, 0x32, 0xc8, 0x41, 0x06, + 0x46, 0x20, 0xa8, 0x53, 0xcf, 0x61, 0xd0, 0x50, + 0x06, 0xfc, 0x2f, 0x3b, 0x5d, 0xca, 0xb2, 0x83, + 0xb1, 0x2f, 0x23, 0x54, 0xc8, 0xfb, 0xa3, 0x71, + 0xe0, 0x7b, 0x74, 0xac, 0xcb, 0x99, 0x5e, 0x7d, + 0x39, 0x1e, 0x43, 0xb9, 0x96, 0x66, 0x55, 0xf6, + 0x18, 0x1c, 0x7d, 0x29, 0x27, 0xd4, 0x19, 0xe2, + 0x0b, 0x12, 0xc9, 0x19, 0xca, 0xb6, 0xe3, 0x29, + 0x6c, 0x63, 0xa0, 0x5f, 0x41, 0xcd, 0x53, 0xde, + 0xdb, 0x76, 0x6e, 0x3b, 0x73, 0x9c, 0x67, 0x8c, + 0xd0, 0x05, 0xf8, 0x0b, 0x18, 0x20, 0x8a, 0xe2, + 0xcc, 0xcf, 0x13, 0x67, 0xca, 0x74, 0x38, 0x61, + 0xcf, 0x20, 0x11, 0xef, 0xd8, 0xd5, 0xe2, 0xb2, + 0x43, 0x3d, 0xad, 0xb2, 0xb1, 0x6b, 0x6f, 0x2e, + 0x45, 0x73, 0x8e, 0x18, 0x06, 0x7e, 0xb5, 0x89, + 0x1d, 0xc4, 0xf1, 0x29, 0x58, 0xe6, 0x91, 0x14, + 0xf5, 0x0a, 0xc4, 0x03, 0x52, 0x49, 0x77, 0x23, + 0x41, 0x1c, 0x2a, 0xce, 0x88, 0xb1, 0xec, 0x60, + 0x1b, 0x87, 0xf9, 0x89, 0xe4, 0x7e, 0x34, 0x01, + 0xa5, 0x0b, 0x46, 0x96, 0xb6, 0xc9, 0xba, 0x63, + 0x1b, 0xc4, 0xc5, 0xe2, 0x48, 0xb7, 0x07, 0x39, + 0x39, 0x24, 0xe7, 0xa8, 0xfd, 0x31, 0x4e, 0x94, + 0xc4, 0x10, 0xc2, 0xcf, 0x2b, 0x43, 0xe4, 0xa1, + 0x11, 0x88, 0xbe, 0x45, 0xe0, 0x7c, 0xdb, 0xb3, + 0xeb, 0xdf, 0x1d, 0xeb, 0x1d, 0x66, 0x95, 0x63, + 0x31, 0x2c, 0xae, 0x23, 0x6e, 0xa8, 0x18, 0xe0, + 0xfe, 0x14, 0x19, 0xa5, 0x31, 0x08, 0x4c, 0xae, + 0x62, 0x1f, 0xc1, 0xb8, 0xe3, 0xf2, 0xa0, 0x0d, + 0x5b, 0xd6, 0x9d, 0xad, 0xf5, 0x05, 0x94, 0x1d, + 0x89, 0x32, 0xaa, 0x02, 0x38, 0x51, 0x93, 0xc0, + 0xf6, 0xe9, 0x58, 0xd5, 0x23, 0xdc, 0x4d, 0x22, + 0xec, 0x79, 0xa4, 0x65, 0xc6, 0x30, 0x58, 0x91, + 0x51, 0xd0, 0x01, 0x45, 0x14, 0x50, 0x07, 0x57, + 0x79, 0xff, 0x00, 0x1f, 0x2d, 0xf4, 0x5f, 0xe4, + 0x2a, 0x1a, 0x9a, 0xf3, 0xfe, 0x3e, 0x5b, 0xe8, + 0xbf, 0xc8, 0x54, 0x34, 0x00, 0x51, 0x45, 0x14, + 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, + 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, + 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, + 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, + 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, + 0x00, 0x51, 0x45, 0x14, 0x01, 0xa3, 0x2f, 0xfc, + 0x7a, 0x41, 0xfe, 0xf4, 0x7f, 0xcc, 0x51, 0x44, + 0xbf, 0xf1, 0xe9, 0x07, 0xfb, 0xd1, 0xff, 0x00, + 0x31, 0x45, 0x00, 0x49, 0x67, 0xfe, 0xa9, 0xff, + 0x00, 0xeb, 0xa3, 0xff, 0x00, 0xe8, 0x46, 0xa7, + 0xa8, 0x2c, 0xff, 0x00, 0xd5, 0x3f, 0xfd, 0x74, + 0x7f, 0xfd, 0x08, 0xd4, 0xf4, 0x01, 0x95, 0x7b, + 0xff, 0x00, 0x1f, 0x4f, 0xf8, 0x7f, 0x2a, 0xa3, + 0xab, 0x02, 0x74, 0x84, 0xc7, 0x6b, 0x8f, 0xfd, + 0x96, 0xaf, 0x5e, 0xff, 0x00, 0xc7, 0xd3, 0xfe, + 0x1f, 0xca, 0xa2, 0x31, 0xad, 0xcd, 0xb4, 0xb6, + 0x8c, 0x40, 0x32, 0x00, 0x50, 0x9e, 0xcc, 0x3a, + 0x50, 0x07, 0x31, 0x45, 0x3e, 0x58, 0xde, 0x19, + 0x1a, 0x39, 0x14, 0xab, 0xa9, 0xc1, 0x07, 0xb5, + 0x32, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, + 0xa2, 0x80, 0x34, 0x62, 0x86, 0x33, 0xa7, 0x18, + 0xca, 0x2f, 0x9f, 0x22, 0x34, 0xca, 0xd8, 0xe4, + 0x05, 0x3d, 0x3f, 0x20, 0xc7, 0xf2, 0xa8, 0x56, + 0xd1, 0x3c, 0x94, 0x66, 0x9c, 0x2c, 0xb2, 0x29, + 0x74, 0x8c, 0xaf, 0x04, 0x7d, 0x7d, 0x4e, 0x0d, + 0x4e, 0x35, 0x49, 0x12, 0xe6, 0x31, 0x1c, 0x92, + 0x0b, 0x44, 0xda, 0xbe, 0x56, 0x7a, 0xa8, 0x18, + 0x3c, 0x7b, 0xf3, 0x51, 0x9b, 0x9b, 0x53, 0x1c, + 0x6c, 0xcb, 0x29, 0x96, 0x15, 0x28, 0x83, 0x8c, + 0x1e, 0x49, 0x52, 0x7e, 0x99, 0xe9, 0xed, 0x40, + 0x08, 0xf6, 0x0b, 0xe7, 0x2c, 0x11, 0x5c, 0x2b, + 0xcd, 0xe6, 0x79, 0x6e, 0xa4, 0x63, 0x07, 0xd4, + 0x7a, 0x8a, 0x96, 0x0b, 0x58, 0x43, 0x19, 0x23, + 0x90, 0x4f, 0x1f, 0x97, 0x2a, 0x9d, 0xc9, 0x8c, + 0x30, 0x42, 0x47, 0x1f, 0xe7, 0xa5, 0x35, 0xaf, + 0x2d, 0x92, 0xe9, 0x6e, 0xe1, 0x8e, 0x43, 0x29, + 0x97, 0xcc, 0x60, 0xc7, 0x01, 0x7d, 0x54, 0x7f, + 0x8d, 0x3d, 0xf5, 0x04, 0x2d, 0xcc, 0xf7, 0x53, + 0x0d, 0x92, 0x0f, 0xde, 0x91, 0xc1, 0x2a, 0x40, + 0xe3, 0x3e, 0xfd, 0x68, 0x02, 0x16, 0xb1, 0x55, + 0x42, 0x3c, 0xec, 0xce, 0xa8, 0x24, 0x68, 0xf6, + 0xf0, 0x01, 0xc7, 0x7f, 0x5c, 0x1a, 0x57, 0xb1, + 0x8d, 0x6f, 0x9e, 0xd8, 0x4e, 0xce, 0x53, 0x39, + 0x29, 0x11, 0x24, 0x90, 0x7a, 0x01, 0x9a, 0x92, + 0x6d, 0x47, 0xcd, 0x83, 0x1e, 0x75, 0xc8, 0x62, + 0x81, 0x4c, 0x41, 0xbe, 0x4e, 0x30, 0x33, 0xff, + 0x00, 0xd6, 0xc5, 0x33, 0xed, 0x90, 0xb5, 0xcd, + 0xeb, 0x37, 0x98, 0x91, 0xdc, 0x13, 0x86, 0x50, + 0x37, 0x0f, 0x9b, 0x3e, 0xb4, 0x00, 0xe9, 0x6c, + 0x23, 0x86, 0x09, 0xc3, 0xb3, 0x99, 0x55, 0xa3, + 0x09, 0xf2, 0x63, 0x86, 0x04, 0xf3, 0xcf, 0x1f, + 0xd3, 0x14, 0x2e, 0x9a, 0x8f, 0x37, 0x93, 0x1d, + 0xc6, 0xe7, 0x59, 0x56, 0x39, 0x3e, 0x4e, 0x17, + 0x27, 0x19, 0x1c, 0xf3, 0xcf, 0xd2, 0x96, 0x6b, + 0xeb, 0x77, 0x89, 0x82, 0x09, 0x55, 0xb1, 0x1e, + 0xdc, 0x80, 0x70, 0x50, 0x11, 0xeb, 0xef, 0x4e, + 0x4b, 0xfb, 0x68, 0xae, 0x4c, 0xd1, 0xac, 0xb9, + 0x96, 0x65, 0x92, 0x40, 0x40, 0xf9, 0x40, 0x39, + 0x20, 0x73, 0xcf, 0x3f, 0x4a, 0x00, 0x87, 0xec, + 0x50, 0x88, 0xbc, 0xd3, 0x72, 0x42, 0x16, 0x28, + 0xad, 0xe5, 0x71, 0x90, 0x07, 0x5e, 0x78, 0xeb, + 0x54, 0x6a, 0xfd, 0x8d, 0xdc, 0x36, 0xdf, 0x39, + 0x69, 0x83, 0x67, 0xe6, 0x8d, 0x70, 0x52, 0x41, + 0xe8, 0x7f, 0xc9, 0xaa, 0x14, 0x00, 0x51, 0x45, + 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x56, 0xb7, + 0x87, 0xc1, 0xf3, 0xee, 0x8f, 0x6f, 0xb3, 0xb7, + 0x3f, 0x88, 0xac, 0x9a, 0xe8, 0xac, 0x2d, 0x8d, + 0x95, 0x81, 0xf3, 0x06, 0x26, 0xb8, 0xc1, 0x2b, + 0xdd, 0x54, 0x74, 0xfc, 0xe8, 0x01, 0xf4, 0x51, + 0x45, 0x00, 0x67, 0xeb, 0xe0, 0xfd, 0xaa, 0x03, + 0xd8, 0xdb, 0xa6, 0x3f, 0x5a, 0xca, 0xae, 0x8a, + 0xfe, 0xd8, 0xdf, 0x59, 0x2f, 0x96, 0x33, 0x3c, + 0x19, 0xc2, 0xff, 0x00, 0x79, 0x6b, 0x9d, 0xa0, + 0x02, 0x8a, 0x28, 0xa0, 0x0d, 0x6b, 0x11, 0xb0, + 0xda, 0x42, 0x08, 0x5f, 0x36, 0x39, 0x64, 0x72, + 0x7f, 0xdd, 0x65, 0x19, 0xfa, 0x60, 0xfe, 0x74, + 0xc5, 0xb7, 0x54, 0xd3, 0xee, 0x15, 0x2e, 0x22, + 0x98, 0xbb, 0xc6, 0x3e, 0x4c, 0xf1, 0xd7, 0xd4, + 0x0a, 0x8e, 0x3b, 0x95, 0x48, 0x20, 0x94, 0x61, + 0x9e, 0x25, 0x78, 0x8a, 0x67, 0x07, 0x0c, 0x0e, + 0x0f, 0xfe, 0x3c, 0x7f, 0x2a, 0xad, 0x15, 0xc1, + 0x8e, 0xde, 0x58, 0x82, 0xf2, 0xec, 0xac, 0x1b, + 0x3d, 0x31, 0x9f, 0xf1, 0xa0, 0x0b, 0xbf, 0x61, + 0xb5, 0x79, 0x5e, 0x24, 0x96, 0x44, 0x30, 0xca, + 0xa9, 0x23, 0xb9, 0x18, 0x20, 0x9c, 0x12, 0x3d, + 0x39, 0xa7, 0x7d, 0x9a, 0xda, 0x15, 0xb9, 0x12, + 0x5b, 0xdc, 0x2b, 0x2c, 0x3b, 0x82, 0xc8, 0x47, + 0x1f, 0x32, 0x8c, 0x83, 0x8e, 0x7a, 0xff, 0x00, + 0x3f, 0x5a, 0x81, 0xef, 0xe3, 0x62, 0xe4, 0x5b, + 0x00, 0x65, 0x70, 0xf2, 0x82, 0xf9, 0x0d, 0xec, + 0x3d, 0x29, 0x7e, 0xdf, 0x18, 0x88, 0xc0, 0xb6, + 0xed, 0xe4, 0xec, 0x65, 0xc1, 0x93, 0x24, 0x64, + 0xa9, 0xeb, 0x8f, 0xf6, 0x47, 0x18, 0xa0, 0x0b, + 0x10, 0x48, 0xf6, 0xf1, 0x32, 0xc6, 0xc5, 0x1e, + 0x3b, 0x3d, 0xd9, 0x1d, 0x72, 0xce, 0xa7, 0xf9, + 0x11, 0x49, 0x0c, 0x4d, 0xa9, 0xc0, 0xb2, 0x4d, + 0xb9, 0xa4, 0x8d, 0xc8, 0x2c, 0x8b, 0x96, 0x75, + 0xdb, 0x9c, 0x7b, 0x9e, 0x3f, 0x5a, 0xac, 0x97, + 0xa9, 0xf6, 0x89, 0xe4, 0x92, 0x12, 0xd1, 0xca, + 0x9b, 0x36, 0x07, 0xc1, 0x03, 0x8c, 0x73, 0x8f, + 0x6a, 0x51, 0x7e, 0x11, 0x91, 0x61, 0x83, 0x64, + 0x0b, 0xbb, 0x31, 0x96, 0xc9, 0x6d, 0xc3, 0x07, + 0x27, 0xe9, 0x40, 0x12, 0x4f, 0xa7, 0xaa, 0x40, + 0xf2, 0x04, 0x9a, 0x36, 0xd9, 0xbd, 0x63, 0x97, + 0xa8, 0xc3, 0x61, 0xbb, 0x73, 0xd4, 0x1a, 0x70, + 0xb1, 0x53, 0xba, 0xd9, 0x65, 0x71, 0xfb, 0xe8, + 0x91, 0xf3, 0xd3, 0x71, 0x56, 0xdc, 0x7f, 0x0e, + 0x6a, 0xbc, 0x57, 0x91, 0x43, 0x74, 0x92, 0xc7, + 0x6e, 0x7c, 0xb5, 0x52, 0xac, 0x8d, 0x26, 0x4b, + 0x83, 0xea, 0x71, 0xfd, 0x29, 0x23, 0xbf, 0x92, + 0x32, 0xcf, 0xb4, 0x19, 0x1a, 0x75, 0x9b, 0x27, + 0xd4, 0x6e, 0xe3, 0xff, 0x00, 0x1e, 0xa0, 0x09, + 0xa0, 0xb4, 0xb6, 0xb9, 0xde, 0xf0, 0x2d, 0xc3, + 0x88, 0xd7, 0x2d, 0x10, 0x00, 0xb9, 0xe4, 0x01, + 0x82, 0x07, 0xbf, 0xe9, 0x4e, 0x4b, 0x5f, 0xb3, + 0x5e, 0xb1, 0xc3, 0xaa, 0x88, 0x77, 0x81, 0x20, + 0xc3, 0x2e, 0xe1, 0xb4, 0x67, 0xe8, 0x4d, 0x44, + 0x2f, 0x60, 0x40, 0x51, 0x2d, 0x76, 0xc2, 0xe0, + 0x87, 0x1e, 0x67, 0xcc, 0x79, 0x07, 0xef, 0x63, + 0xb6, 0x3f, 0x9d, 0x44, 0xf7, 0x28, 0x52, 0x65, + 0x8e, 0x2d, 0x82, 0x4d, 0xa3, 0xef, 0x67, 0x00, + 0x7f, 0x89, 0xc5, 0x00, 0x5e, 0x37, 0x52, 0x2e, + 0xa9, 0xf6, 0x30, 0x07, 0xd9, 0x44, 0xbe, 0x4f, + 0x93, 0x8e, 0x0a, 0xe7, 0x1f, 0x9f, 0xbd, 0x24, + 0x57, 0x77, 0x50, 0xda, 0x5e, 0x46, 0x97, 0x32, + 0x62, 0x12, 0xaa, 0x98, 0x6e, 0x83, 0x76, 0x2a, + 0x0f, 0xed, 0x04, 0xf3, 0x05, 0xc1, 0xb6, 0x06, + 0xe8, 0x7f, 0xcb, 0x4d, 0xfc, 0x6e, 0xfe, 0xf6, + 0xdf, 0x5a, 0xad, 0x1c, 0xe5, 0x20, 0x9a, 0x22, + 0xb9, 0xf3, 0x76, 0xf3, 0x9e, 0x98, 0x39, 0xa0, + 0x0b, 0xde, 0x75, 0xc4, 0x31, 0xda, 0xa5, 0xb4, + 0x9b, 0x24, 0x9d, 0x4c, 0x8e, 0xe4, 0x80, 0x58, + 0x96, 0x23, 0x92, 0x7e, 0x94, 0xd5, 0x59, 0x4d, + 0xf4, 0xd0, 0x4e, 0x88, 0x86, 0x78, 0xc9, 0x2a, + 0x98, 0xdb, 0x9d, 0xbb, 0x94, 0x8c, 0x7b, 0xff, + 0x00, 0x33, 0x55, 0xe3, 0xba, 0x8b, 0xc8, 0x48, + 0x6e, 0x60, 0xf3, 0x56, 0x3c, 0xec, 0x21, 0xf6, + 0x91, 0x9e, 0xdf, 0x4a, 0x92, 0x3b, 0x90, 0xf7, + 0x12, 0x5d, 0x38, 0x44, 0xf2, 0xe2, 0xdb, 0x1a, + 0x03, 0xfe, 0xce, 0xd5, 0x1f, 0x87, 0x5f, 0xc2, + 0x80, 0x28, 0xd1, 0x45, 0x14, 0x00, 0x50, 0x01, + 0x27, 0x00, 0x64, 0xd1, 0x5a, 0x9a, 0x2d, 0x9f, + 0x99, 0x38, 0xba, 0x94, 0x62, 0x08, 0x4e, 0xec, + 0x9f, 0xe2, 0x6e, 0xc0, 0x50, 0x06, 0xc5, 0xe7, + 0xfc, 0x7c, 0xb0, 0xf4, 0x00, 0x7e, 0x82, 0xa0, + 0xa5, 0x76, 0x2e, 0xec, 0xe7, 0xab, 0x1c, 0xd2, + 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, + 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, + 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, + 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, + 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, + 0x50, 0x01, 0x45, 0x14, 0x50, 0x01, 0x45, 0x14, + 0x50, 0x06, 0x8c, 0xbf, 0xf1, 0xe7, 0x07, 0xfb, + 0xd1, 0xff, 0x00, 0x31, 0x45, 0x12, 0xff, 0x00, + 0xc7, 0x9c, 0x1f, 0xef, 0x47, 0xfc, 0xc5, 0x14, + 0x01, 0x25, 0x9f, 0xfa, 0xa7, 0xff, 0x00, 0xae, + 0x8f, 0xff, 0x00, 0xa1, 0x1a, 0xb1, 0x50, 0x59, + 0xff, 0x00, 0xaa, 0x7f, 0xfa, 0xe8, 0xff, 0x00, + 0xfa, 0x11, 0xa9, 0xe8, 0x03, 0x3b, 0x51, 0x8c, + 0x89, 0x04, 0x80, 0x70, 0x46, 0x0f, 0xd6, 0xa9, + 0xd6, 0xe3, 0xa2, 0xba, 0x95, 0x61, 0x90, 0x6b, + 0x3e, 0x5b, 0x07, 0x07, 0x31, 0x90, 0xc3, 0xd0, + 0xf5, 0xa0, 0x0a, 0x93, 0xac, 0x17, 0x8a, 0x16, + 0xee, 0x32, 0xcc, 0x06, 0x04, 0x88, 0x70, 0xc3, + 0xfc, 0x6a, 0xa9, 0xd2, 0x2c, 0xc9, 0xe2, 0xee, + 0x50, 0x3d, 0x0c, 0x79, 0xfe, 0xb5, 0xa1, 0xf6, + 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, 0x8a, 0x3e, 0xc7, + 0x71, 0xff, 0x00, 0x3c, 0xff, 0x00, 0x51, 0x40, + 0x19, 0xdf, 0xd8, 0xf6, 0x7f, 0xf3, 0xf9, 0x27, + 0xfd, 0xfa, 0xff, 0x00, 0xeb, 0xd1, 0xfd, 0x8f, + 0x67, 0xff, 0x00, 0x3f, 0x92, 0x7f, 0xdf, 0xaf, + 0xfe, 0xbd, 0x68, 0xfd, 0x8e, 0xe3, 0xfe, 0x79, + 0xfe, 0xa2, 0x8f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, + 0xd4, 0x50, 0x06, 0x77, 0xf6, 0x3d, 0x9f, 0xfc, + 0xfe, 0x49, 0xff, 0x00, 0x7e, 0xbf, 0xfa, 0xf4, + 0x7f, 0x63, 0xd9, 0xff, 0x00, 0xcf, 0xe4, 0x9f, + 0xf7, 0xeb, 0xff, 0x00, 0xaf, 0x5a, 0x3f, 0x63, + 0xb8, 0xff, 0x00, 0x9e, 0x7f, 0xa8, 0xa3, 0xec, + 0x77, 0x1f, 0xf3, 0xcf, 0xf5, 0x14, 0x01, 0x9d, + 0xfd, 0x8f, 0x67, 0xff, 0x00, 0x3f, 0x92, 0x7f, + 0xdf, 0xaf, 0xfe, 0xbd, 0x1f, 0xd8, 0xf6, 0x7f, + 0xf3, 0xf9, 0x27, 0xfd, 0xfa, 0xff, 0x00, 0xeb, + 0xd6, 0x8f, 0xd8, 0xee, 0x3f, 0xe7, 0x9f, 0xea, + 0x28, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, 0x45, + 0x00, 0x67, 0x7f, 0x63, 0xd9, 0xff, 0x00, 0xcf, + 0xe4, 0x9f, 0xf7, 0xeb, 0xff, 0x00, 0xaf, 0x47, + 0xf6, 0x3d, 0x9f, 0xfc, 0xfe, 0x49, 0xff, 0x00, + 0x7e, 0xbf, 0xfa, 0xf5, 0xa3, 0xf6, 0x3b, 0x8f, + 0xf9, 0xe7, 0xfa, 0x8a, 0x3e, 0xc7, 0x71, 0xff, + 0x00, 0x3c, 0xff, 0x00, 0x51, 0x40, 0x19, 0xdf, + 0xd8, 0xf6, 0x7f, 0xf3, 0xf9, 0x27, 0xfd, 0xfa, + 0xff, 0x00, 0xeb, 0xd1, 0xfd, 0x8f, 0x67, 0xff, + 0x00, 0x3f, 0x92, 0x7f, 0xdf, 0xaf, 0xfe, 0xbd, + 0x68, 0xfd, 0x8e, 0xe3, 0xfe, 0x79, 0xfe, 0xa2, + 0x8f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, 0xd4, 0x50, + 0x06, 0x77, 0xf6, 0x3d, 0x9f, 0xfc, 0xfe, 0x49, + 0xff, 0x00, 0x7e, 0xbf, 0xfa, 0xf4, 0x7f, 0x63, + 0xd9, 0xff, 0x00, 0xcf, 0xe4, 0x9f, 0xf7, 0xeb, + 0xff, 0x00, 0xaf, 0x5a, 0x3f, 0x63, 0xb8, 0xff, + 0x00, 0x9e, 0x7f, 0xa8, 0xa3, 0xec, 0x77, 0x1f, + 0xf3, 0xcf, 0xf5, 0x14, 0x01, 0x9d, 0xfd, 0x8f, + 0x67, 0xff, 0x00, 0x3f, 0x92, 0x7f, 0xdf, 0xaf, + 0xfe, 0xbd, 0x1f, 0xd8, 0xf6, 0x7f, 0xf3, 0xf9, + 0x27, 0xfd, 0xfa, 0xff, 0x00, 0xeb, 0xd6, 0x8f, + 0xd8, 0xee, 0x3f, 0xe7, 0x9f, 0xea, 0x28, 0xfb, + 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, 0x45, 0x00, 0x67, + 0x7f, 0x63, 0xd9, 0xff, 0x00, 0xcf, 0xe4, 0x9f, + 0xf7, 0xeb, 0xff, 0x00, 0xaf, 0x47, 0xf6, 0x3d, + 0x9f, 0xfc, 0xfe, 0x49, 0xff, 0x00, 0x7e, 0xbf, + 0xfa, 0xf5, 0xa3, 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, + 0xfa, 0x8a, 0x3e, 0xc7, 0x71, 0xff, 0x00, 0x3c, + 0xff, 0x00, 0x51, 0x40, 0x19, 0xdf, 0xd8, 0xf6, + 0x7f, 0xf3, 0xf9, 0x27, 0xfd, 0xfa, 0xff, 0x00, + 0xeb, 0xd1, 0xfd, 0x8f, 0x67, 0xff, 0x00, 0x3f, + 0x92, 0x7f, 0xdf, 0xaf, 0xfe, 0xbd, 0x68, 0xfd, + 0x8e, 0xe3, 0xfe, 0x79, 0xfe, 0xa2, 0x8f, 0xb1, + 0xdc, 0x7f, 0xcf, 0x3f, 0xd4, 0x50, 0x05, 0x7b, + 0x7b, 0x6b, 0x2b, 0x46, 0xdf, 0x0c, 0x4d, 0x2c, + 0x83, 0xa3, 0xcd, 0x8f, 0x97, 0xe8, 0x29, 0xcc, + 0xcc, 0xec, 0x59, 0x8e, 0x49, 0xef, 0x53, 0x7d, + 0x8e, 0xe3, 0xfe, 0x79, 0xfe, 0xa2, 0x8f, 0xb1, + 0xdc, 0x7f, 0xcf, 0x3f, 0xd4, 0x50, 0x04, 0x14, + 0x54, 0xff, 0x00, 0x63, 0xb8, 0xff, 0x00, 0x9e, + 0x7f, 0xa8, 0xa3, 0xec, 0x77, 0x1f, 0xf3, 0xcf, + 0xf5, 0x14, 0x01, 0x02, 0xb1, 0x56, 0x0c, 0xa4, + 0x82, 0x3a, 0x11, 0x49, 0x71, 0x05, 0x9d, 0xe1, + 0xdd, 0x71, 0x13, 0x2c, 0x87, 0xac, 0x91, 0x1c, + 0x13, 0xf5, 0x1d, 0x2a, 0xc7, 0xd8, 0xee, 0x3f, + 0xe7, 0x9f, 0xea, 0x28, 0xfb, 0x1d, 0xc7, 0xfc, + 0xf3, 0xfd, 0x45, 0x00, 0x50, 0x3a, 0x4d, 0x87, + 0x6b, 0x89, 0xc7, 0xfc, 0x04, 0x52, 0x7f, 0x64, + 0xd8, 0xff, 0x00, 0xcf, 0xcc, 0xff, 0x00, 0xf7, + 0xc0, 0xad, 0x0f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, + 0xd4, 0x51, 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, + 0x8a, 0x00, 0xcf, 0xfe, 0xc9, 0xb1, 0xff, 0x00, + 0x9f, 0x99, 0xff, 0x00, 0xef, 0x81, 0x47, 0xf6, + 0x4d, 0x8f, 0xfc, 0xfc, 0xcf, 0xff, 0x00, 0x7c, + 0x0a, 0xd0, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, + 0x45, 0x1f, 0x63, 0xb8, 0xff, 0x00, 0x9e, 0x7f, + 0xa8, 0xa0, 0x0c, 0xff, 0x00, 0xec, 0x9b, 0x1f, + 0xf9, 0xf9, 0x9f, 0xfe, 0xf8, 0x14, 0x7f, 0x64, + 0xd8, 0xff, 0x00, 0xcf, 0xcc, 0xff, 0x00, 0xf7, + 0xc0, 0xad, 0x0f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, + 0xd4, 0x51, 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, + 0x8a, 0x00, 0xcf, 0xfe, 0xc9, 0xb1, 0xff, 0x00, + 0x9f, 0x99, 0xff, 0x00, 0xef, 0x81, 0x47, 0xf6, + 0x4d, 0x8f, 0xfc, 0xfc, 0xcf, 0xff, 0x00, 0x7c, + 0x0a, 0xd0, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, + 0x45, 0x1f, 0x63, 0xb8, 0xff, 0x00, 0x9e, 0x7f, + 0xa8, 0xa0, 0x0c, 0xff, 0x00, 0xec, 0x9b, 0x1f, + 0xf9, 0xf9, 0x9f, 0xfe, 0xf8, 0x14, 0x7f, 0x64, + 0xd8, 0xff, 0x00, 0xcf, 0xcc, 0xff, 0x00, 0xf7, + 0xc0, 0xad, 0x0f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, + 0xd4, 0x51, 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, + 0x8a, 0x00, 0xcf, 0xfe, 0xc9, 0xb1, 0xff, 0x00, + 0x9f, 0x99, 0xff, 0x00, 0xef, 0x81, 0x47, 0xf6, + 0x4d, 0x8f, 0xfc, 0xfc, 0xcf, 0xff, 0x00, 0x7c, + 0x0a, 0xd0, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, + 0x45, 0x1f, 0x63, 0xb8, 0xff, 0x00, 0x9e, 0x7f, + 0xa8, 0xa0, 0x0c, 0xff, 0x00, 0xec, 0x9b, 0x1f, + 0xf9, 0xf9, 0x9f, 0xfe, 0xf8, 0x14, 0x7f, 0x64, + 0xd8, 0xff, 0x00, 0xcf, 0xcc, 0xff, 0x00, 0xf7, + 0xc0, 0xad, 0x0f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, + 0xd4, 0x51, 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, + 0x8a, 0x00, 0xcf, 0xfe, 0xc9, 0xb1, 0xff, 0x00, + 0x9f, 0x99, 0xff, 0x00, 0xef, 0x81, 0x47, 0xf6, + 0x4d, 0x8f, 0xfc, 0xfc, 0xcf, 0xff, 0x00, 0x7c, + 0x0a, 0xd0, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, + 0x45, 0x1f, 0x63, 0xb8, 0xff, 0x00, 0x9e, 0x7f, + 0xa8, 0xa0, 0x0c, 0xff, 0x00, 0xec, 0x9b, 0x1f, + 0xf9, 0xf9, 0x9f, 0xfe, 0xf8, 0x14, 0xbf, 0xd9, + 0x36, 0x3f, 0xf3, 0xf1, 0x3f, 0xfd, 0xf0, 0x2a, + 0xff, 0x00, 0xd8, 0xee, 0x3f, 0xe7, 0x9f, 0xea, + 0x28, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, 0x45, + 0x00, 0x53, 0x4d, 0x3b, 0x4e, 0x88, 0x86, 0x22, + 0x69, 0x88, 0xec, 0xc4, 0x28, 0xfd, 0x39, 0xab, + 0x12, 0x4a, 0x64, 0x0a, 0xb8, 0x55, 0x45, 0xe1, + 0x51, 0x46, 0x00, 0xa9, 0x3e, 0xc7, 0x71, 0xff, + 0x00, 0x3c, 0xff, 0x00, 0x51, 0x47, 0xd8, 0xee, + 0x3f, 0xe7, 0x9f, 0xea, 0x28, 0x02, 0x0a, 0x2a, + 0x7f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, 0xd4, 0x51, + 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, 0x8a, 0x00, + 0x82, 0x8a, 0x9f, 0xec, 0x77, 0x1f, 0xf3, 0xcf, + 0xf5, 0x14, 0x7d, 0x8e, 0xe3, 0xfe, 0x79, 0xfe, + 0xa2, 0x80, 0x20, 0xa2, 0xa7, 0xfb, 0x1d, 0xc7, + 0xfc, 0xf3, 0xfd, 0x45, 0x1f, 0x63, 0xb8, 0xff, + 0x00, 0x9e, 0x7f, 0xa8, 0xa0, 0x08, 0x28, 0xa9, + 0xfe, 0xc7, 0x71, 0xff, 0x00, 0x3c, 0xff, 0x00, + 0x51, 0x47, 0xd8, 0xee, 0x3f, 0xe7, 0x9f, 0xea, + 0x28, 0x02, 0x0a, 0x2a, 0x7f, 0xb1, 0xdc, 0x7f, + 0xcf, 0x3f, 0xd4, 0x51, 0xf6, 0x3b, 0x8f, 0xf9, + 0xe7, 0xfa, 0x8a, 0x00, 0x82, 0x8a, 0x9f, 0xec, + 0x77, 0x1f, 0xf3, 0xcf, 0xf5, 0x14, 0x7d, 0x8e, + 0xe3, 0xfe, 0x79, 0xfe, 0xa2, 0x80, 0x20, 0xa2, + 0xa7, 0xfb, 0x1d, 0xc7, 0xfc, 0xf3, 0xfd, 0x45, + 0x1f, 0x63, 0xb8, 0xff, 0x00, 0x9e, 0x7f, 0xa8, + 0xa0, 0x08, 0x28, 0xa9, 0xfe, 0xc7, 0x71, 0xff, + 0x00, 0x3c, 0xff, 0x00, 0x51, 0x47, 0xd8, 0xee, + 0x3f, 0xe7, 0x9f, 0xea, 0x28, 0x02, 0x0a, 0x2a, + 0x7f, 0xb1, 0xdc, 0x7f, 0xcf, 0x3f, 0xd4, 0x51, + 0xf6, 0x3b, 0x8f, 0xf9, 0xe7, 0xfa, 0x8a, 0x00, + 0x82, 0x8a, 0x9f, 0xec, 0x77, 0x1f, 0xf3, 0xcf, + 0xf5, 0x14, 0x7d, 0x8e, 0xe3, 0xfe, 0x79, 0xfe, + 0xa2, 0x80, 0x20, 0xa2, 0xa7, 0xfb, 0x1d, 0xc7, + 0xfc, 0xf3, 0xfd, 0x45, 0x1f, 0x63, 0xb8, 0xff, + 0x00, 0x9e, 0x7f, 0xa8, 0xa0, 0x08, 0x28, 0xa9, + 0xfe, 0xc7, 0x71, 0xff, 0x00, 0x3c, 0xff, 0x00, + 0x51, 0x47, 0xd8, 0xee, 0x3f, 0xe7, 0x9f, 0xea, + 0x28, 0x02, 0x0a, 0x74, 0x68, 0x64, 0x91, 0x50, + 0x75, 0x35, 0x3a, 0xd9, 0x4e, 0x4e, 0x0a, 0x85, + 0x1e, 0xa4, 0xd5, 0xeb, 0x7b, 0x64, 0x80, 0x71, + 0xcb, 0x1e, 0xf4, 0x00, 0xcb, 0xa1, 0xb6, 0x14, + 0x51, 0xd0, 0x48, 0x83, 0xf5, 0x14, 0x53, 0xaf, + 0x3f, 0xd5, 0x27, 0xfd, 0x74, 0x4f, 0xfd, 0x08, + 0x51, 0x40, 0x18, 0x93, 0x5e, 0xdc, 0x41, 0x73, + 0x34, 0x51, 0xc8, 0x55, 0x56, 0x46, 0xc0, 0xc7, + 0xbd, 0x33, 0xfb, 0x4e, 0xf3, 0xfe, 0x7b, 0x1f, + 0xc8, 0x51, 0x45, 0x00, 0x1f, 0xda, 0x77, 0x9f, + 0xf3, 0xd8, 0xfe, 0x42, 0x8f, 0xed, 0x3b, 0xcf, + 0xf9, 0xec, 0x7f, 0x21, 0x45, 0x14, 0x00, 0x7f, + 0x69, 0xde, 0x7f, 0xcf, 0x63, 0xf9, 0x0a, 0x3f, + 0xb4, 0xef, 0x3f, 0xe7, 0xb1, 0xfc, 0x85, 0x14, + 0x50, 0x01, 0xfd, 0xa7, 0x79, 0xff, 0x00, 0x3d, + 0x8f, 0xe4, 0x28, 0xfe, 0xd3, 0xbc, 0xff, 0x00, + 0x9e, 0xc7, 0xf2, 0x14, 0x51, 0x40, 0x07, 0xf6, + 0x9d, 0xe7, 0xfc, 0xf6, 0x3f, 0x90, 0xa3, 0xfb, + 0x4e, 0xf3, 0xfe, 0x7b, 0x1f, 0xc8, 0x51, 0x45, + 0x00, 0x1f, 0xda, 0x77, 0x9f, 0xf3, 0xd8, 0xfe, + 0x42, 0x8f, 0xed, 0x3b, 0xcf, 0xf9, 0xec, 0x7f, + 0x21, 0x45, 0x14, 0x00, 0x7f, 0x69, 0xde, 0x7f, + 0xcf, 0x63, 0xf9, 0x0a, 0x3f, 0xb4, 0xef, 0x3f, + 0xe7, 0xb1, 0xfc, 0x85, 0x14, 0x50, 0x01, 0xfd, + 0xa7, 0x79, 0xff, 0x00, 0x3d, 0x8f, 0xe4, 0x28, + 0xfe, 0xd3, 0xbc, 0xff, 0x00, 0x9e, 0xc7, 0xf2, + 0x14, 0x51, 0x40, 0x07, 0xf6, 0x9d, 0xe7, 0xfc, + 0xf6, 0x3f, 0x90, 0xa3, 0xfb, 0x4e, 0xf3, 0xfe, + 0x7b, 0x1f, 0xc8, 0x51, 0x45, 0x00, 0x1f, 0xda, + 0x77, 0x9f, 0xf3, 0xd8, 0xfe, 0x42, 0x8f, 0xed, + 0x3b, 0xcf, 0xf9, 0xec, 0x7f, 0x21, 0x45, 0x14, + 0x00, 0x7f, 0x69, 0xde, 0x7f, 0xcf, 0x63, 0xf9, + 0x0a, 0x3f, 0xb4, 0xef, 0x3f, 0xe7, 0xb1, 0xfc, + 0x85, 0x14, 0x50, 0x01, 0xfd, 0xa7, 0x79, 0xff, + 0x00, 0x3d, 0x8f, 0xe4, 0x28, 0xfe, 0xd3, 0xbc, + 0xff, 0x00, 0x9e, 0xc7, 0xf2, 0x14, 0x51, 0x40, + 0x07, 0xf6, 0x9d, 0xe7, 0xfc, 0xf6, 0x3f, 0x90, + 0xa3, 0xfb, 0x4e, 0xf3, 0xfe, 0x7b, 0x1f, 0xc8, + 0x51, 0x45, 0x00, 0x1f, 0xda, 0x77, 0x9f, 0xf3, + 0xd8, 0xfe, 0x42, 0x8f, 0xed, 0x3b, 0xcf, 0xf9, + 0xec, 0x7f, 0x21, 0x45, 0x14, 0x00, 0x7f, 0x69, + 0xde, 0x7f, 0xcf, 0x63, 0xf9, 0x0a, 0x3f, 0xb4, + 0xef, 0x3f, 0xe7, 0xb1, 0xfc, 0x85, 0x14, 0x50, + 0x01, 0xfd, 0xa7, 0x79, 0xff, 0x00, 0x3d, 0x8f, + 0xe4, 0x28, 0xfe, 0xd3, 0xbc, 0xff, 0x00, 0x9e, + 0xc7, 0xf2, 0x14, 0x51, 0x40, 0x07, 0xf6, 0x9d, + 0xe7, 0xfc, 0xf6, 0x3f, 0x90, 0xa3, 0xfb, 0x4e, + 0xf3, 0xfe, 0x7b, 0x1f, 0xc8, 0x51, 0x45, 0x00, + 0x1f, 0xda, 0x77, 0x9f, 0xf3, 0xd8, 0xfe, 0x42, + 0x8f, 0xed, 0x3b, 0xcf, 0xf9, 0xec, 0x7f, 0x21, + 0x45, 0x14, 0x00, 0x7f, 0x69, 0xde, 0x7f, 0xcf, + 0x63, 0xf9, 0x0a, 0x3f, 0xb4, 0xef, 0x3f, 0xe7, + 0xb1, 0xfc, 0x85, 0x14, 0x50, 0x01, 0xfd, 0xa7, + 0x79, 0xff, 0x00, 0x3d, 0x8f, 0xe4, 0x28, 0xfe, + 0xd3, 0xbc, 0xff, 0x00, 0x9e, 0xc7, 0xf2, 0x14, + 0x51, 0x40, 0x07, 0xf6, 0x9d, 0xe7, 0xfc, 0xf6, + 0x3f, 0x90, 0xa3, 0xfb, 0x4e, 0xf3, 0xfe, 0x7b, + 0x1f, 0xc8, 0x51, 0x45, 0x00, 0x1f, 0xda, 0x77, + 0x9f, 0xf3, 0xd8, 0xfe, 0x42, 0x8f, 0xed, 0x3b, + 0xcf, 0xf9, 0xec, 0x7f, 0x21, 0x45, 0x14, 0x00, + 0x7f, 0x69, 0xde, 0x7f, 0xcf, 0x63, 0xf9, 0x0a, + 0x3f, 0xb4, 0xef, 0x3f, 0xe7, 0xb1, 0xfc, 0x85, + 0x14, 0x50, 0x01, 0xfd, 0xa7, 0x79, 0xff, 0x00, + 0x3d, 0x8f, 0xe4, 0x28, 0xfe, 0xd3, 0xbc, 0xff, + 0x00, 0x9e, 0xc7, 0xf2, 0x14, 0x51, 0x40, 0x07, + 0xf6, 0x9d, 0xe7, 0xfc, 0xf6, 0x3f, 0x90, 0xa3, + 0xfb, 0x4e, 0xf3, 0xfe, 0x7b, 0x1f, 0xc8, 0x51, + 0x45, 0x00, 0x1f, 0xda, 0x77, 0x9f, 0xf3, 0xd8, + 0xfe, 0x42, 0x8f, 0xed, 0x3b, 0xcf, 0xf9, 0xec, + 0x7f, 0x21, 0x45, 0x14, 0x00, 0x7f, 0x69, 0xde, + 0x7f, 0xcf, 0x63, 0xf9, 0x0a, 0x3f, 0xb4, 0xef, + 0x3f, 0xe7, 0xb1, 0xfc, 0x85, 0x14, 0x50, 0x01, + 0xfd, 0xa7, 0x79, 0xff, 0x00, 0x3d, 0x8f, 0xe4, + 0x28, 0xfe, 0xd3, 0xbc, 0xff, 0x00, 0x9e, 0xc7, + 0xf2, 0x14, 0x51, 0x40, 0x07, 0xf6, 0x9d, 0xe7, + 0xfc, 0xf6, 0x3f, 0x90, 0xa3, 0xfb, 0x4e, 0xf3, + 0xfe, 0x7b, 0x1f, 0xc8, 0x51, 0x45, 0x00, 0x1f, + 0xda, 0x77, 0x9f, 0xf3, 0xd8, 0xfe, 0x42, 0x8f, + 0xed, 0x3b, 0xcf, 0xf9, 0xec, 0x7f, 0x21, 0x45, + 0x14, 0x00, 0x7f, 0x69, 0xde, 0x7f, 0xcf, 0x63, + 0xf9, 0x0a, 0x3f, 0xb4, 0xef, 0x3f, 0xe7, 0xb1, + 0xfc, 0x85, 0x14, 0x50, 0x01, 0xfd, 0xa7, 0x79, + 0xff, 0x00, 0x3d, 0x8f, 0xe4, 0x28, 0xfe, 0xd3, + 0xbc, 0xff, 0x00, 0x9e, 0xc7, 0xf2, 0x14, 0x51, + 0x40, 0x07, 0xf6, 0x9d, 0xe7, 0xfc, 0xf6, 0x3f, + 0x90, 0xa3, 0xfb, 0x4e, 0xf3, 0xfe, 0x7b, 0x1f, + 0xc8, 0x51, 0x45, 0x00, 0x1f, 0xda, 0x77, 0x9f, + 0xf3, 0xd8, 0xfe, 0x42, 0x8f, 0xed, 0x3b, 0xcf, + 0xf9, 0xec, 0x7f, 0x21, 0x45, 0x14, 0x00, 0x7f, + 0x69, 0xde, 0x7f, 0xcf, 0x63, 0xf9, 0x0a, 0x3f, + 0xb4, 0xef, 0x3f, 0xe7, 0xb1, 0xfc, 0x85, 0x14, + 0x50, 0x01, 0xfd, 0xa7, 0x79, 0xff, 0x00, 0x3d, + 0x8f, 0xe4, 0x28, 0xfe, 0xd3, 0xbc, 0xff, 0x00, + 0x9e, 0xc7, 0xf2, 0x14, 0x51, 0x40, 0x07, 0xf6, + 0x9d, 0xe7, 0xfc, 0xf6, 0x3f, 0x90, 0xa3, 0xfb, + 0x4e, 0xf3, 0xfe, 0x7b, 0x1f, 0xc8, 0x51, 0x45, + 0x00, 0x1f, 0xda, 0x77, 0x9f, 0xf3, 0xd8, 0xfe, + 0x42, 0x8f, 0xed, 0x3b, 0xcf, 0xf9, 0xec, 0x7f, + 0x21, 0x45, 0x14, 0x01, 0x3d, 0x8d, 0xcd, 0xc5, + 0xe5, 0xec, 0x50, 0x4b, 0x29, 0x28, 0x4e, 0xe3, + 0xc0, 0xed, 0xcf, 0xf4, 0xa2, 0x8a, 0x28, 0x03, + 0xff, 0xd9, +}; + +static const uint8_t data_dk_tm4c129x_jpg[] = +{ + /* /dk-tm4c129x.jpg */ + 0x2f, 0x64, 0x6b, 0x2d, 0x74, 0x6d, 0x34, 0x63, + 0x31, 0x32, 0x39, 0x78, 0x2e, 0x6a, 0x70, 0x67, + 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xe1, 0x00, 0x40, + 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0xa0, 0x03, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdb, + 0x00, 0x43, 0x00, 0x06, 0x04, 0x05, 0x06, 0x05, + 0x04, 0x06, 0x06, 0x05, 0x06, 0x07, 0x07, 0x06, + 0x08, 0x0a, 0x10, 0x0a, 0x0a, 0x09, 0x09, 0x0a, + 0x14, 0x0e, 0x0f, 0x0c, 0x10, 0x17, 0x14, 0x18, + 0x18, 0x17, 0x14, 0x16, 0x16, 0x1a, 0x1d, 0x25, + 0x1f, 0x1a, 0x1b, 0x23, 0x1c, 0x16, 0x16, 0x20, + 0x2c, 0x20, 0x23, 0x26, 0x27, 0x29, 0x2a, 0x29, + 0x19, 0x1f, 0x2d, 0x30, 0x2d, 0x28, 0x30, 0x25, + 0x28, 0x29, 0x28, 0xff, 0xdb, 0x00, 0x43, 0x01, + 0x07, 0x07, 0x07, 0x0a, 0x08, 0x0a, 0x13, 0x0a, + 0x0a, 0x13, 0x28, 0x1a, 0x16, 0x1a, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xac, 0x00, + 0xd0, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, + 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x1f, 0x00, + 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, + 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, + 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, + 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, + 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, + 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, + 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, + 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, + 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, + 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, + 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, + 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, + 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, + 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, + 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, + 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, + 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, + 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, + 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, + 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, + 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, + 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, + 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, + 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00, 0x0c, 0x03, + 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, + 0x00, 0xba, 0x23, 0xf6, 0xa9, 0x16, 0x3c, 0x91, + 0x56, 0x12, 0x2c, 0xe2, 0xa7, 0x8e, 0x1a, 0xd8, + 0xc8, 0x81, 0x22, 0xe9, 0x56, 0x23, 0x87, 0xa7, + 0x15, 0x66, 0x28, 0x7d, 0xaa, 0xdc, 0x50, 0x50, + 0x17, 0x2a, 0xc5, 0x07, 0xb5, 0x5c, 0x8a, 0xdf, + 0xda, 0xac, 0xc5, 0x07, 0xb5, 0x57, 0xd7, 0xb5, + 0x4b, 0x6f, 0x0f, 0xe9, 0xdf, 0x6d, 0xbd, 0x8e, + 0x57, 0x87, 0x78, 0x43, 0xe5, 0x80, 0x48, 0x27, + 0x3d, 0x47, 0xa6, 0x78, 0xfa, 0x9a, 0x41, 0x72, + 0xdc, 0x56, 0xf5, 0x6e, 0x38, 0x3d, 0xab, 0x3b, + 0xc1, 0xfa, 0xe5, 0x9f, 0x89, 0x74, 0xe6, 0xbb, + 0xb2, 0x05, 0x4a, 0x48, 0x63, 0x92, 0x36, 0x39, + 0x2a, 0x47, 0xd3, 0xfc, 0xf6, 0xae, 0x90, 0x22, + 0x46, 0xbb, 0xa4, 0x2a, 0x8b, 0xc7, 0x2d, 0x8f, + 0xeb, 0x45, 0xd0, 0xca, 0xf1, 0xc1, 0xed, 0x53, + 0x79, 0x68, 0x8a, 0x59, 0xca, 0xaa, 0x8e, 0xe7, + 0x03, 0x1f, 0x5a, 0xe4, 0x75, 0x4f, 0x89, 0xbe, + 0x19, 0xd3, 0x2e, 0x26, 0x82, 0x4b, 0x89, 0x67, + 0x9a, 0x2e, 0x19, 0x61, 0x8f, 0x77, 0xcd, 0xcf, + 0xcb, 0xbb, 0xa6, 0x7f, 0x4e, 0xde, 0xd5, 0xe6, + 0x5f, 0x10, 0xbe, 0x2c, 0x5b, 0xeb, 0x76, 0x33, + 0x69, 0xb6, 0xb6, 0xb1, 0x43, 0x64, 0xe0, 0xe5, + 0xae, 0x1c, 0x17, 0x3c, 0x70, 0x40, 0x1c, 0x03, + 0xd7, 0xb9, 0xe7, 0xd3, 0xad, 0x4b, 0x7d, 0x82, + 0xce, 0xf6, 0x3d, 0xf6, 0xd8, 0xc3, 0x71, 0x18, + 0x92, 0xde, 0x48, 0xe5, 0x8f, 0x24, 0x06, 0x8d, + 0x83, 0x03, 0x83, 0xd3, 0x8e, 0x33, 0x9a, 0xb0, + 0xb0, 0xfb, 0x57, 0xc7, 0x3a, 0x7f, 0xc4, 0xdd, + 0x4b, 0x47, 0x81, 0x2d, 0xb4, 0x9b, 0xfb, 0xc8, + 0xe0, 0x42, 0xc5, 0x23, 0x4d, 0xa1, 0x57, 0x27, + 0x3d, 0xfe, 0xa7, 0xfc, 0xf4, 0xf5, 0x6f, 0x85, + 0xfe, 0x2c, 0xd4, 0xbc, 0x5d, 0x60, 0x6c, 0x6e, + 0xee, 0x27, 0x37, 0xac, 0xc7, 0xcb, 0x92, 0x5b, + 0x96, 0x40, 0x54, 0x93, 0xd4, 0x8e, 0x38, 0xda, + 0x78, 0xe0, 0x9c, 0x8f, 0xa5, 0x67, 0x52, 0xab, + 0xa7, 0x1e, 0x66, 0x8e, 0x8c, 0x3e, 0x1f, 0xdb, + 0x4d, 0x42, 0xf6, 0xf3, 0x3d, 0xae, 0xe6, 0x7b, + 0x5b, 0x50, 0x3e, 0xd5, 0x71, 0x0c, 0x23, 0xb7, + 0x98, 0xe0, 0x67, 0xf3, 0xaa, 0xf6, 0xda, 0xa5, + 0x9d, 0xdb, 0x4c, 0xb6, 0x2e, 0x6e, 0xda, 0x15, + 0xdc, 0xfe, 0x50, 0xe1, 0x41, 0xef, 0x93, 0x81, + 0xd7, 0xde, 0xbc, 0xa2, 0xea, 0xce, 0x08, 0x5a, + 0xe9, 0x2e, 0xee, 0x4c, 0x57, 0x96, 0xf9, 0x12, + 0x09, 0xdc, 0x05, 0x90, 0x8e, 0x7e, 0x43, 0xdf, + 0x8e, 0x41, 0xce, 0x0f, 0xad, 0x3f, 0xc3, 0x37, + 0x12, 0xc9, 0x24, 0x37, 0x1a, 0x73, 0xab, 0x49, + 0x92, 0x1b, 0xec, 0xa4, 0xb3, 0x26, 0xd2, 0x3a, + 0x8c, 0xf2, 0x39, 0x1c, 0x1e, 0x31, 0x5c, 0x2f, + 0x1b, 0x55, 0xed, 0x1b, 0x23, 0xdc, 0x59, 0x26, + 0x1f, 0x97, 0xf8, 0xb7, 0x97, 0x45, 0xb7, 0xf5, + 0xf2, 0x3d, 0x72, 0xc6, 0xe2, 0x1b, 0xc1, 0x2f, + 0x96, 0x48, 0x78, 0x9c, 0xc7, 0x22, 0x1e, 0xaa, + 0x47, 0xb5, 0x5a, 0xf2, 0xfd, 0xab, 0x99, 0xf0, + 0x0e, 0xb5, 0x25, 0x8d, 0xc5, 0xdd, 0xae, 0xb1, + 0x6a, 0x02, 0x11, 0xbd, 0x6f, 0x44, 0x59, 0xf3, + 0x32, 0xc1, 0x40, 0x38, 0x19, 0x2d, 0xbc, 0xb7, + 0x50, 0x31, 0x8e, 0x7b, 0x57, 0x64, 0x0c, 0x53, + 0xe6, 0x4b, 0x62, 0xc6, 0x22, 0x48, 0x19, 0x18, + 0x23, 0x07, 0x18, 0x3d, 0xc1, 0xe0, 0xe6, 0xbb, + 0xe8, 0xd4, 0xe6, 0x8a, 0xbb, 0xd4, 0xf0, 0x71, + 0x54, 0x1d, 0x29, 0xbb, 0x26, 0x91, 0x44, 0xc7, + 0xed, 0x51, 0x98, 0xfd, 0xab, 0x40, 0xc7, 0xed, + 0x4d, 0x31, 0xd6, 0xe7, 0x21, 0x9c, 0xd1, 0xf1, + 0x51, 0xb4, 0x7e, 0xd5, 0xa4, 0x62, 0xf6, 0xa8, + 0xcc, 0x34, 0xc9, 0x33, 0x0c, 0x5e, 0xd4, 0xd3, + 0x15, 0x69, 0x18, 0x71, 0xda, 0x98, 0x61, 0xf6, + 0xa6, 0x23, 0x37, 0xca, 0xa3, 0xc9, 0xfc, 0x6b, + 0x48, 0xc3, 0xed, 0x47, 0x93, 0xed, 0x4c, 0x46, + 0x70, 0x84, 0x74, 0xc5, 0x38, 0x43, 0xed, 0x5a, + 0x02, 0x1e, 0x29, 0xe2, 0x1f, 0x41, 0x48, 0x0f, + 0x3b, 0x8e, 0x1f, 0xad, 0x59, 0x8e, 0x1f, 0x6a, + 0x87, 0x54, 0x99, 0xac, 0x2d, 0x52, 0x70, 0xab, + 0xe5, 0xef, 0x08, 0xec, 0xdf, 0xc0, 0x09, 0xfb, + 0xde, 0xe3, 0xaf, 0xa5, 0x3f, 0x5b, 0x01, 0x1e, + 0xd2, 0xce, 0xd3, 0x52, 0x5b, 0x6b, 0xdb, 0x87, + 0x00, 0x09, 0x10, 0xf9, 0x6c, 0x0f, 0x20, 0x2c, + 0x80, 0x11, 0x93, 0x91, 0x81, 0x90, 0x6b, 0x96, + 0x75, 0xd4, 0x5b, 0x8a, 0x4d, 0xb3, 0xd0, 0xa7, + 0x85, 0x73, 0x51, 0x94, 0xa4, 0x92, 0x7d, 0xfc, + 0x8b, 0xd1, 0x42, 0x00, 0xe4, 0x70, 0x3a, 0xfb, + 0x53, 0x1e, 0xff, 0x00, 0x4f, 0xb5, 0x07, 0xcf, + 0xbb, 0x85, 0x48, 0xea, 0x37, 0x02, 0x7f, 0x21, + 0xcd, 0x67, 0xde, 0x78, 0x37, 0x51, 0x96, 0xca, + 0x47, 0x93, 0x52, 0x37, 0x17, 0x20, 0x7c, 0x91, + 0x9c, 0xed, 0x3d, 0x3b, 0xfd, 0x33, 0xd8, 0x73, + 0x5e, 0x7f, 0x7d, 0x73, 0x69, 0xa6, 0xbc, 0x7f, + 0x6f, 0xbb, 0x4e, 0x5b, 0x1e, 0x5c, 0x63, 0x2c, + 0x40, 0xeb, 0xcf, 0x00, 0x1f, 0xc4, 0x1f, 0xd2, + 0xb9, 0xe7, 0x89, 0xaa, 0x9d, 0xa3, 0x03, 0xd2, + 0xc3, 0xe5, 0xb8, 0x59, 0x45, 0xce, 0x75, 0xb4, + 0x5b, 0xd9, 0x5b, 0xf3, 0x3d, 0x09, 0xfc, 0x61, + 0xa5, 0x45, 0x30, 0x8e, 0x35, 0x9a, 0x52, 0x4f, + 0xde, 0xda, 0x11, 0x7a, 0x1e, 0xa5, 0xba, 0x7e, + 0x55, 0xc7, 0xfc, 0x41, 0xf1, 0x3c, 0xfa, 0xae, + 0x86, 0xf6, 0xb6, 0xb6, 0xe2, 0x18, 0x1d, 0x91, + 0xa4, 0x3b, 0x44, 0x8f, 0xb0, 0x1e, 0x4a, 0x8c, + 0x80, 0x48, 0x38, 0x38, 0xc1, 0xe3, 0x93, 0x8c, + 0x66, 0xb2, 0xef, 0x35, 0x9d, 0x12, 0xe5, 0x5e, + 0xeb, 0x45, 0xfb, 0x5d, 0xbc, 0xa2, 0x52, 0x11, + 0x64, 0x6e, 0x80, 0x77, 0x1c, 0x7a, 0x63, 0xbe, + 0x41, 0xe7, 0xa6, 0x2b, 0x9a, 0xf1, 0x46, 0xb2, + 0xf6, 0x3e, 0x24, 0xb5, 0x0c, 0xf1, 0x18, 0xa6, + 0x83, 0x71, 0x4c, 0x06, 0xc1, 0x24, 0x82, 0x09, + 0xc6, 0x08, 0xe3, 0x04, 0x72, 0x3a, 0xf5, 0xee, + 0xbd, 0xa5, 0x67, 0x75, 0xd5, 0x1a, 0x54, 0xc2, + 0xe1, 0x21, 0x08, 0xd4, 0x86, 0xcf, 0xb9, 0x5b, + 0xc3, 0x9e, 0x29, 0xbc, 0xf0, 0xdd, 0xec, 0xd3, + 0xd9, 0xdc, 0x43, 0xb4, 0x2b, 0x43, 0x2e, 0x5f, + 0x11, 0xbe, 0x01, 0x1d, 0x38, 0x3c, 0x75, 0x53, + 0xd4, 0x7b, 0x64, 0x8a, 0xdd, 0xf1, 0x47, 0xc4, + 0x1b, 0x0b, 0x71, 0x71, 0x6c, 0xab, 0x75, 0x2d, + 0xf3, 0x8c, 0xb4, 0xfe, 0x61, 0x08, 0x14, 0x93, + 0x8d, 0x9b, 0x86, 0xec, 0x7d, 0xd2, 0x0f, 0xb6, + 0x7e, 0x9e, 0x6b, 0xaa, 0xc5, 0x65, 0xa7, 0xdf, + 0xca, 0x2e, 0x2d, 0x84, 0x91, 0xc9, 0xf3, 0xc4, + 0xc4, 0x06, 0x38, 0x23, 0x90, 0x73, 0xe8, 0x7d, + 0xbd, 0xc7, 0x6a, 0x7f, 0x8a, 0x6e, 0x6e, 0x3e, + 0xd7, 0xa7, 0x5e, 0x0c, 0x79, 0x17, 0x56, 0x88, + 0x88, 0x8c, 0x77, 0x60, 0x28, 0xc1, 0x1d, 0x73, + 0x8e, 0x48, 0xfa, 0x1e, 0x2b, 0x5b, 0x46, 0x7c, + 0xad, 0x9c, 0x50, 0x94, 0xe9, 0x29, 0xc6, 0x3a, + 0x6c, 0x64, 0x6a, 0x11, 0x5d, 0xfd, 0xa9, 0x61, + 0x56, 0x96, 0x66, 0x61, 0x90, 0x55, 0x48, 0x2f, + 0x91, 0xd4, 0x8e, 0xa7, 0x20, 0x53, 0xa1, 0xf0, + 0xc6, 0xb3, 0x72, 0xac, 0xcb, 0xa7, 0xcc, 0x02, + 0x82, 0x49, 0x75, 0xd9, 0x8c, 0x2e, 0xef, 0xe2, + 0xf6, 0xe7, 0x18, 0xe9, 0xcd, 0x7b, 0x9d, 0xd3, + 0xc8, 0x1d, 0xa0, 0xd3, 0xf4, 0xc7, 0x86, 0x24, + 0x0a, 0x7c, 0xe8, 0x01, 0x22, 0x47, 0x55, 0x00, + 0x9c, 0xb2, 0x8d, 0xa3, 0xd7, 0xa8, 0xcf, 0x6e, + 0x49, 0x38, 0x37, 0x91, 0xc1, 0xb0, 0x7d, 0xa6, + 0xee, 0xf1, 0xc1, 0xdb, 0xfb, 0xa5, 0x5c, 0x81, + 0xb4, 0x63, 0x05, 0x9b, 0x03, 0x20, 0x71, 0x90, + 0xa4, 0x7a, 0x57, 0x3b, 0xc6, 0xbb, 0xda, 0x28, + 0xf5, 0xa9, 0xe4, 0x8a, 0x4b, 0x9a, 0x72, 0x3c, + 0x9a, 0x1d, 0x03, 0x69, 0x56, 0xb9, 0xb9, 0x45, + 0x4f, 0x48, 0xd4, 0xbb, 0x64, 0x10, 0x08, 0xc7, + 0x1e, 0xb9, 0x15, 0xd1, 0x78, 0x13, 0x5e, 0x7d, + 0x36, 0xe1, 0x62, 0x62, 0xc8, 0x50, 0x10, 0x3b, + 0x11, 0x9e, 0x33, 0x8c, 0xf2, 0xc3, 0xdf, 0x3d, + 0xa9, 0x3c, 0x6f, 0x7d, 0x15, 0x96, 0xa3, 0x0c, + 0x56, 0x36, 0xf2, 0xc2, 0x02, 0x12, 0xe2, 0x57, + 0xdc, 0x5b, 0x3c, 0x7a, 0x00, 0x38, 0x07, 0xb7, + 0x7a, 0xe5, 0xa4, 0x9e, 0x59, 0x10, 0x5e, 0x67, + 0x64, 0xca, 0xc3, 0x1b, 0x40, 0x19, 0x00, 0x7e, + 0xb5, 0xd3, 0x1b, 0xd4, 0xa7, 0xef, 0xf5, 0x3c, + 0xca, 0xd0, 0x8d, 0x0a, 0xd6, 0xa3, 0xf6, 0x4f, + 0x4d, 0xf1, 0x2c, 0xb0, 0xad, 0xd4, 0x1a, 0xb8, + 0x6c, 0x47, 0x71, 0x28, 0x8a, 0x68, 0xf9, 0xfd, + 0xcc, 0xa0, 0x74, 0xe7, 0x8d, 0xa4, 0x0c, 0x8e, + 0x78, 0x1d, 0x79, 0xcd, 0x6b, 0xf8, 0x4f, 0x50, + 0xb8, 0x13, 0xea, 0x13, 0xd9, 0x5e, 0xc6, 0x91, + 0x22, 0x01, 0x71, 0x12, 0xca, 0x56, 0x42, 0xa4, + 0xf0, 0x54, 0xe3, 0x6e, 0xee, 0x3f, 0x11, 0xc7, + 0xd3, 0xce, 0x3c, 0xdb, 0xad, 0x67, 0x45, 0xfb, + 0x35, 0x8c, 0x26, 0x69, 0xde, 0x45, 0x2d, 0x1c, + 0x6b, 0xb9, 0x89, 0x50, 0x78, 0x00, 0x76, 0xe9, + 0xe9, 0xc7, 0xd2, 0xba, 0x4f, 0x08, 0x4d, 0x77, + 0xa1, 0x1d, 0x53, 0x49, 0xb8, 0x81, 0x20, 0xb9, + 0x97, 0xcb, 0x37, 0x31, 0xcb, 0x12, 0xf9, 0x8b, + 0x18, 0x04, 0x8c, 0x16, 0x3f, 0x28, 0x3b, 0xb2, + 0x46, 0x09, 0xe8, 0x7d, 0x8b, 0x82, 0x97, 0x27, + 0x24, 0x8c, 0xa6, 0xe0, 0xaa, 0xaa, 0xd0, 0xba, + 0x5b, 0xfc, 0xce, 0xa7, 0x48, 0xf8, 0x91, 0x79, + 0x0d, 0xb1, 0x36, 0xae, 0x03, 0xb2, 0x80, 0xd3, + 0x5d, 0xcc, 0x64, 0x76, 0x3d, 0xc0, 0x55, 0xe4, + 0x2e, 0x7a, 0x72, 0x73, 0xd7, 0xd4, 0x51, 0x0f, + 0xc4, 0x0b, 0xe4, 0xd6, 0xec, 0xef, 0x6e, 0x75, + 0xb9, 0xb6, 0xdb, 0xc9, 0xe6, 0x0b, 0x68, 0xbe, + 0x58, 0x49, 0xcf, 0x21, 0x86, 0x72, 0xdd, 0x7b, + 0xf3, 0xf9, 0x53, 0xb4, 0x4f, 0x05, 0x78, 0x74, + 0x5b, 0x0b, 0x89, 0xdd, 0xee, 0x8b, 0x10, 0x63, + 0xb6, 0x77, 0x08, 0x70, 0xcc, 0x54, 0xae, 0x3a, + 0xee, 0x1b, 0x49, 0xe4, 0x0f, 0x4f, 0x43, 0x5b, + 0xba, 0x5e, 0x9f, 0x1a, 0xc6, 0xc0, 0x69, 0x10, + 0x69, 0x4a, 0xf1, 0xbb, 0x22, 0x3c, 0x42, 0x59, + 0x77, 0xa9, 0xdb, 0xb0, 0xe4, 0x72, 0x0e, 0x4f, + 0x3c, 0x0e, 0x0e, 0x73, 0x59, 0xba, 0xf0, 0x8b, + 0xba, 0x47, 0x44, 0x30, 0x15, 0x2a, 0xda, 0x32, + 0x96, 0x9f, 0x37, 0xfd, 0x7f, 0xc3, 0x9f, 0x4a, + 0x5a, 0x59, 0xc9, 0x25, 0x95, 0xbc, 0x92, 0xec, + 0xf3, 0x5e, 0x35, 0x67, 0xd9, 0xd3, 0x71, 0x19, + 0x38, 0xf6, 0xcd, 0x0f, 0x64, 0x47, 0x41, 0xfa, + 0x56, 0x27, 0xc3, 0x2d, 0x41, 0x67, 0xf0, 0xdc, + 0x63, 0xfb, 0x40, 0xdf, 0xb2, 0x9d, 0xa4, 0x2a, + 0x01, 0xe5, 0x71, 0xf7, 0x46, 0x3a, 0x81, 0xd8, + 0x8f, 0xd2, 0xbb, 0x62, 0x01, 0x1f, 0x5a, 0xe8, + 0x8c, 0xdb, 0x57, 0x3c, 0xda, 0x94, 0x94, 0x64, + 0xe2, 0x9d, 0xec, 0x73, 0xad, 0x6a, 0x41, 0xe8, + 0x6a, 0x26, 0x80, 0xe7, 0x91, 0x5d, 0x23, 0x42, + 0xac, 0x3a, 0x0a, 0x86, 0x4b, 0x55, 0x39, 0xff, + 0x00, 0x0a, 0xb5, 0x33, 0x27, 0x4c, 0xe7, 0xfc, + 0x9f, 0x6a, 0x4f, 0x27, 0xda, 0xb6, 0x64, 0xb4, + 0xc7, 0x20, 0x54, 0x06, 0x02, 0x0f, 0x22, 0xab, + 0x98, 0x87, 0x13, 0x2f, 0xc8, 0xf6, 0xa5, 0xf2, + 0x7d, 0xab, 0x47, 0xca, 0x1e, 0x94, 0x9e, 0x57, + 0xb5, 0x3b, 0x8b, 0x94, 0xa0, 0x21, 0xf6, 0xa5, + 0xf2, 0x79, 0xe9, 0x57, 0xfc, 0xac, 0x76, 0xa3, + 0xca, 0x14, 0x5c, 0x39, 0x4f, 0x34, 0xbd, 0x8d, + 0x3e, 0xcb, 0x22, 0x4b, 0xb8, 0x23, 0xa9, 0x52, + 0x53, 0xa8, 0xf7, 0x1e, 0x87, 0xb8, 0x3d, 0x8d, + 0x79, 0x9f, 0x8b, 0x35, 0x09, 0x63, 0xf0, 0xe5, + 0x9d, 0x8d, 0xd4, 0xa8, 0x35, 0x0b, 0x4b, 0xb2, + 0x91, 0x49, 0x85, 0x67, 0x91, 0x11, 0x77, 0xab, + 0xae, 0x7e, 0x65, 0x20, 0x60, 0xe7, 0x8c, 0x8e, + 0x39, 0xaf, 0x60, 0x96, 0xd7, 0xce, 0x81, 0x90, + 0x8e, 0xa2, 0xbc, 0xab, 0xe2, 0x6e, 0x82, 0xd7, + 0x5a, 0x69, 0x99, 0x4a, 0xa4, 0xb6, 0x67, 0xcc, + 0xdd, 0xe5, 0x8c, 0x91, 0x82, 0x30, 0x58, 0x7c, + 0xd8, 0x20, 0x91, 0x83, 0xc6, 0x48, 0xf7, 0x35, + 0x9c, 0xe1, 0xef, 0x29, 0x1b, 0x52, 0xaa, 0xf9, + 0x5d, 0x27, 0xb3, 0xd7, 0xe7, 0xff, 0x00, 0x04, + 0xe4, 0x75, 0x7f, 0x88, 0xfa, 0xe9, 0x91, 0x7c, + 0xdd, 0x5a, 0x78, 0xe4, 0xc6, 0x42, 0x43, 0x18, + 0x5e, 0xfd, 0x70, 0xa3, 0x9e, 0x9e, 0xb5, 0xcb, + 0x78, 0xbe, 0xf2, 0x5d, 0x5f, 0x4c, 0x67, 0x7b, + 0xa8, 0x0d, 0xc7, 0xc8, 0xfe, 0x4c, 0x4a, 0x10, + 0xf5, 0x0b, 0x80, 0x00, 0xc6, 0x79, 0xe6, 0xb9, + 0x89, 0x16, 0x77, 0x82, 0x49, 0x23, 0x12, 0xb4, + 0x31, 0x9f, 0x9d, 0x87, 0x21, 0x49, 0x3d, 0x4f, + 0xa7, 0xe9, 0x5d, 0x16, 0x95, 0xa7, 0xdd, 0x69, + 0x3a, 0x3e, 0x8d, 0xe2, 0x7d, 0x30, 0xdc, 0x49, + 0x3c, 0x97, 0x8f, 0x03, 0xa8, 0x8c, 0x2a, 0x47, + 0xb0, 0x1e, 0x0b, 0x83, 0xbb, 0xee, 0x9c, 0x9c, + 0x85, 0x00, 0x1e, 0xfd, 0x6a, 0x65, 0x64, 0xaf, + 0x63, 0x5a, 0x51, 0x93, 0x7c, 0xa9, 0xe8, 0xf7, + 0x17, 0xe1, 0xfb, 0xc7, 0x61, 0x29, 0x83, 0x52, + 0xb3, 0x74, 0x0a, 0xcc, 0xe6, 0x49, 0x08, 0x8f, + 0xae, 0x38, 0xc1, 0x20, 0x13, 0xc1, 0xc0, 0xeb, + 0x9f, 0xc4, 0x54, 0x1e, 0x33, 0x7f, 0xed, 0x27, + 0x5b, 0xdb, 0x65, 0x73, 0x2a, 0x64, 0xe7, 0x24, + 0xe0, 0x7a, 0x0e, 0xc0, 0x70, 0x7a, 0x00, 0x33, + 0xeb, 0x9c, 0xd6, 0x97, 0x8e, 0xb5, 0x66, 0xd5, + 0xad, 0xd2, 0xf2, 0xc2, 0xce, 0x0b, 0x59, 0xa6, + 0xb9, 0xdb, 0xb5, 0x77, 0x65, 0x46, 0xdc, 0x63, + 0x27, 0x8d, 0xb8, 0x1f, 0x5f, 0xad, 0x60, 0xd8, + 0xb4, 0x96, 0xf6, 0xf2, 0x47, 0x77, 0x2f, 0x9f, + 0x2c, 0x8d, 0xbc, 0x90, 0x9f, 0x77, 0x03, 0xb6, + 0x3a, 0x70, 0x3a, 0xf1, 0xe9, 0x59, 0x41, 0x4a, + 0x6b, 0x9d, 0x2d, 0x4e, 0xea, 0xce, 0x14, 0x5f, + 0xb0, 0x9b, 0xba, 0xb6, 0xfe, 0x65, 0xbd, 0x17, + 0x67, 0x88, 0x74, 0xe6, 0xb0, 0x9d, 0xd8, 0x00, + 0xa6, 0x44, 0x3c, 0xfe, 0xed, 0x80, 0x1c, 0xe3, + 0xbf, 0x1d, 0x7b, 0xe3, 0x38, 0xc5, 0x75, 0x10, + 0x78, 0x22, 0xca, 0xde, 0xd2, 0x3b, 0x99, 0xe6, + 0x97, 0x51, 0x68, 0xa5, 0xf2, 0xc4, 0x9c, 0xc5, + 0x14, 0x60, 0xf4, 0x2c, 0xa4, 0x64, 0xa9, 0x19, + 0xc1, 0xc8, 0x39, 0xfd, 0x78, 0x5b, 0x58, 0xa5, + 0xb3, 0xd4, 0x0d, 0xcd, 0x84, 0xaa, 0x91, 0x39, + 0x00, 0xae, 0x0f, 0xcb, 0x9c, 0x67, 0x8f, 0xe9, + 0xc6, 0x39, 0x15, 0xd8, 0xf8, 0x96, 0xfc, 0xc5, + 0xe1, 0xeb, 0x89, 0x22, 0x94, 0x89, 0xd0, 0x2e, + 0xdc, 0x71, 0xfc, 0x43, 0xd3, 0xa8, 0xc1, 0x3f, + 0x81, 0xae, 0x5c, 0x4a, 0xa9, 0x19, 0xa8, 0xc1, + 0xd9, 0x33, 0xd3, 0xca, 0xd6, 0x1e, 0xa5, 0x29, + 0x54, 0xac, 0xae, 0xe1, 0xf8, 0xa3, 0xd4, 0x26, + 0x9b, 0x4d, 0xbb, 0x48, 0x62, 0xbc, 0x92, 0x5b, + 0x89, 0x97, 0x85, 0x48, 0xa4, 0x2d, 0x12, 0x7d, + 0x01, 0xc1, 0xf7, 0xfb, 0xd8, 0x1f, 0x95, 0x67, + 0xea, 0xe7, 0x4f, 0x68, 0xa2, 0x8a, 0x2d, 0x2a, + 0xdb, 0x1b, 0x8f, 0xfc, 0xb4, 0x04, 0xf1, 0xc7, + 0x24, 0x73, 0x8e, 0x78, 0x19, 0x3e, 0xa7, 0xb5, + 0x70, 0x5f, 0x09, 0x6e, 0xee, 0x2f, 0x7f, 0xb6, + 0xe6, 0xbd, 0x8a, 0x4b, 0xb1, 0x18, 0x87, 0x0c, + 0x54, 0x9f, 0x2f, 0x97, 0xc9, 0xdc, 0x3a, 0x7e, + 0x44, 0x13, 0xc9, 0xe9, 0x82, 0xcd, 0x62, 0x29, + 0xf4, 0xfb, 0xdb, 0x8b, 0x6d, 0x4d, 0xe5, 0x90, + 0x28, 0x56, 0x88, 0xbe, 0x46, 0xf4, 0x23, 0x86, + 0xdb, 0xdb, 0x8e, 0xbe, 0x87, 0x23, 0xe9, 0x9c, + 0x70, 0xd2, 0x95, 0x47, 0x0e, 0x6d, 0x51, 0xd5, + 0x53, 0x32, 0x85, 0x2a, 0x11, 0xac, 0xe9, 0xb6, + 0x9d, 0xfa, 0xe9, 0xa7, 0xf5, 0xd8, 0xd7, 0xd5, + 0x7c, 0x27, 0x69, 0x77, 0x15, 0x9d, 0xed, 0xd5, + 0xbb, 0x4b, 0x68, 0x5c, 0x82, 0xd6, 0xf2, 0x65, + 0xc0, 0xe9, 0xd0, 0xf0, 0x07, 0x04, 0x67, 0x3d, + 0x78, 0xf4, 0xac, 0xe9, 0xfc, 0x37, 0xa5, 0x5d, + 0x5a, 0x7d, 0x8e, 0x38, 0x8d, 0xbd, 0xc5, 0xb2, + 0x36, 0x11, 0xc3, 0x13, 0x21, 0x07, 0x91, 0xcf, + 0x21, 0xb1, 0x9e, 0x0e, 0x47, 0x18, 0xf4, 0xce, + 0xe7, 0x81, 0x6e, 0x75, 0x12, 0x62, 0xb5, 0xb7, + 0xb7, 0xb9, 0x82, 0xc4, 0x36, 0xf8, 0x65, 0x95, + 0x98, 0x43, 0xbc, 0x72, 0xc1, 0x89, 0xf9, 0x40, + 0x20, 0x67, 0xd3, 0x3c, 0x77, 0xae, 0x97, 0x51, + 0xb2, 0xb9, 0xb7, 0xfb, 0x22, 0xc7, 0x1d, 0x88, + 0x8e, 0xfe, 0xe1, 0xa5, 0x59, 0x89, 0x50, 0x0b, + 0x93, 0x8c, 0x79, 0xaf, 0xce, 0x32, 0xc7, 0xbf, + 0x53, 0x8e, 0x69, 0x54, 0xe7, 0xa4, 0xdc, 0x2e, + 0xdd, 0xb6, 0x22, 0x94, 0xa8, 0xe2, 0xa2, 0xaa, + 0xa5, 0x18, 0x5f, 0xe2, 0xde, 0xff, 0x00, 0xe5, + 0xb1, 0xe1, 0xd6, 0xd6, 0x93, 0x78, 0x77, 0x56, + 0x13, 0x5a, 0x5c, 0x47, 0x24, 0x01, 0xce, 0x08, + 0x2c, 0x3b, 0x11, 0xb4, 0x86, 0x00, 0x11, 0xc9, + 0xf7, 0xc6, 0x45, 0x54, 0xb9, 0xfe, 0xd0, 0xff, + 0x00, 0x84, 0x99, 0xb5, 0x28, 0x42, 0x91, 0x34, + 0xcb, 0x19, 0x69, 0x24, 0xf9, 0x5b, 0x70, 0x23, + 0x6b, 0x1c, 0xe4, 0x8c, 0x03, 0xcf, 0xb7, 0xbd, + 0x77, 0x3f, 0x17, 0xf4, 0x65, 0xd3, 0xe1, 0x48, + 0xa2, 0x78, 0x24, 0xb9, 0x69, 0x37, 0xb2, 0xc3, + 0xbc, 0xed, 0xf9, 0x7d, 0x48, 0xda, 0x73, 0x9c, + 0xe0, 0x67, 0x1d, 0x7a, 0x75, 0xe7, 0xf4, 0x3b, + 0x85, 0xd3, 0xa2, 0x8f, 0x4e, 0xb8, 0x88, 0x34, + 0xe8, 0xa1, 0xdf, 0x7b, 0x30, 0x07, 0x76, 0x1b, + 0x6e, 0x38, 0xc7, 0x3c, 0x7a, 0xd7, 0x4d, 0x39, + 0xcd, 0xc3, 0xda, 0x4a, 0x3e, 0xf1, 0xe6, 0xe2, + 0x63, 0x45, 0x4d, 0xd2, 0xa5, 0x2f, 0x73, 0x7f, + 0x99, 0xd3, 0xfc, 0x3d, 0xd4, 0xb5, 0x36, 0xd3, + 0xaf, 0xbe, 0xd4, 0x44, 0x50, 0xc5, 0x3a, 0xa7, + 0x93, 0xb1, 0x46, 0xc7, 0x0b, 0x83, 0x95, 0xeb, + 0xe8, 0x0f, 0x00, 0x67, 0xde, 0xbb, 0x7d, 0x3b, + 0x51, 0xb8, 0x96, 0xe2, 0x47, 0x8a, 0x38, 0xcb, + 0xe4, 0xcb, 0x2c, 0xc4, 0x84, 0x65, 0x03, 0x39, + 0x3b, 0xfb, 0x75, 0x3e, 0xbf, 0xa6, 0x2b, 0x1b, + 0x47, 0xd5, 0xc1, 0xd3, 0x24, 0xb4, 0xd3, 0xe3, + 0x10, 0xc5, 0x23, 0x97, 0x77, 0xff, 0x00, 0x9e, + 0xe0, 0xed, 0xc6, 0xec, 0xf1, 0xb8, 0x02, 0x32, + 0x7a, 0x93, 0xce, 0x4f, 0x5a, 0xc7, 0xf1, 0x4b, + 0x5e, 0x49, 0xa5, 0xcf, 0x10, 0x99, 0x9d, 0x59, + 0x4a, 0x8c, 0x12, 0x40, 0x24, 0x81, 0xdf, 0xb7, + 0x6e, 0x3e, 0xb5, 0xc7, 0x29, 0x46, 0xa5, 0x5b, + 0xb7, 0x63, 0xde, 0xc2, 0xc6, 0x54, 0xb0, 0x76, + 0x8c, 0x53, 0x3b, 0xdd, 0x33, 0xc5, 0x56, 0x7e, + 0x1a, 0x17, 0x4c, 0x2f, 0xe3, 0xb6, 0x92, 0x6b, + 0xad, 0xd7, 0x51, 0x47, 0x2b, 0x31, 0x18, 0xc8, + 0xf2, 0xca, 0xa8, 0x24, 0x1e, 0x7a, 0xf1, 0xc8, + 0xc8, 0x23, 0x9a, 0xea, 0x7c, 0x31, 0xf1, 0x8a, + 0xe2, 0x5d, 0x5b, 0x4e, 0xd3, 0xe6, 0xd3, 0x19, + 0x34, 0xcc, 0x1f, 0xb4, 0x5f, 0xce, 0x4e, 0xf0, + 0x3b, 0x7c, 0xa0, 0x75, 0xe9, 0x9e, 0xe7, 0x93, + 0x81, 0x5e, 0x1f, 0xe0, 0xef, 0x07, 0x78, 0xc7, + 0x56, 0x85, 0x17, 0x4b, 0xd3, 0x0a, 0x45, 0x1f, + 0xee, 0xcc, 0xb2, 0x20, 0x8f, 0x04, 0xe4, 0xe0, + 0x9e, 0x1b, 0xd3, 0x9e, 0x9d, 0x2b, 0xd2, 0x74, + 0x3f, 0x82, 0x3a, 0xfb, 0xb4, 0x37, 0x1a, 0xa6, + 0xbd, 0x0d, 0xac, 0x8a, 0x55, 0xb6, 0xc4, 0xbb, + 0xf0, 0x41, 0xce, 0x0f, 0x3c, 0x8c, 0x0f, 0x5a, + 0xf4, 0xe1, 0x18, 0xc7, 0x66, 0x7c, 0x9e, 0x22, + 0xa4, 0xea, 0xb7, 0xce, 0x92, 0xfe, 0xbe, 0xf3, + 0xe9, 0x98, 0xdc, 0x49, 0x1a, 0xba, 0xe7, 0x6b, + 0x00, 0xc3, 0x23, 0xb5, 0x3e, 0xb0, 0x6f, 0xf5, + 0x3d, 0x42, 0xd8, 0xda, 0x25, 0x96, 0x9d, 0xf6, + 0xf5, 0x73, 0xb6, 0x67, 0x8a, 0x64, 0x8c, 0xc5, + 0xf2, 0x9c, 0x36, 0xd6, 0x23, 0x70, 0x24, 0x63, + 0x83, 0x9a, 0xbb, 0x6b, 0x3d, 0xdb, 0xc8, 0x0c, + 0xf1, 0xc5, 0x1a, 0x74, 0xe1, 0xcb, 0x1f, 0xe4, + 0x29, 0xb9, 0x6b, 0x63, 0x94, 0xd0, 0x23, 0x23, + 0x9a, 0x63, 0xc4, 0xac, 0x3a, 0x54, 0x94, 0x55, + 0x05, 0x8a, 0x8f, 0x07, 0xa0, 0xa8, 0x8c, 0x7e, + 0xd5, 0xa1, 0x8a, 0x8d, 0xd0, 0x1e, 0x82, 0xa9, + 0x32, 0x5c, 0x4a, 0x5b, 0x3d, 0xa8, 0xd9, 0xed, + 0x56, 0x0a, 0x63, 0xb5, 0x26, 0x28, 0xb8, 0xac, + 0x72, 0x76, 0x16, 0x26, 0x56, 0x19, 0x07, 0x19, + 0xf4, 0xac, 0x8f, 0x1c, 0xe8, 0x28, 0xb0, 0x17, + 0x68, 0xf7, 0x45, 0x2a, 0x94, 0x90, 0x7a, 0x82, + 0x08, 0xc5, 0x7a, 0x05, 0x8d, 0xaa, 0xc2, 0x83, + 0x81, 0xf9, 0x53, 0x75, 0xab, 0x25, 0xbe, 0xd3, + 0xe5, 0x89, 0x86, 0x49, 0x1c, 0x53, 0x72, 0xbb, + 0xb1, 0x2a, 0x16, 0x57, 0x5b, 0x9f, 0x2d, 0xd8, + 0x68, 0xb6, 0x96, 0x17, 0x1a, 0x9e, 0x89, 0x63, + 0x6d, 0x12, 0x35, 0xfc, 0x49, 0x10, 0x32, 0x82, + 0xa0, 0x4a, 0x84, 0x15, 0x71, 0xcf, 0x40, 0x1c, + 0x9d, 0xdc, 0x60, 0x0c, 0xf6, 0xcd, 0x66, 0xea, + 0x12, 0xdc, 0x45, 0x75, 0xa7, 0xe9, 0x96, 0x36, + 0xec, 0xba, 0x66, 0x16, 0xe2, 0x74, 0xb6, 0x0d, + 0x22, 0x47, 0x31, 0x52, 0xa7, 0x7f, 0xcd, 0x8c, + 0xe5, 0x5b, 0xbe, 0x4a, 0xfa, 0xe2, 0xbb, 0x7f, + 0x19, 0x58, 0xcb, 0x63, 0x33, 0x5e, 0xc1, 0x95, + 0x9e, 0x15, 0x31, 0x3f, 0xc8, 0x1b, 0x28, 0x73, + 0xd4, 0x1e, 0x3a, 0x9f, 0x43, 0xd6, 0xb8, 0x7b, + 0x3b, 0xeb, 0xa5, 0xbb, 0xb8, 0x92, 0x07, 0x22, + 0x4b, 0x80, 0x44, 0x8e, 0xd8, 0x6c, 0x93, 0xc8, + 0xce, 0x70, 0xbd, 0x7b, 0x9e, 0x3a, 0x9e, 0x71, + 0x8a, 0xf2, 0xa7, 0x37, 0x4a, 0xa3, 0x8c, 0xd5, + 0xcf, 0xad, 0xc3, 0xd2, 0x58, 0xbc, 0x32, 0xab, + 0x49, 0xa8, 0xf7, 0xf5, 0x5b, 0xff, 0x00, 0x9a, + 0x38, 0x5f, 0x13, 0x48, 0x6d, 0xf6, 0x89, 0x70, + 0xcf, 0xe6, 0x00, 0xcc, 0x30, 0x7d, 0xb3, 0x91, + 0xc0, 0x3d, 0xf8, 0xce, 0x7b, 0xe0, 0xf1, 0x5c, + 0xf4, 0x9a, 0x95, 0xa3, 0x31, 0x12, 0x4c, 0x50, + 0x8e, 0xbb, 0x86, 0x41, 0x23, 0xbf, 0xa0, 0x3d, + 0xfb, 0x7b, 0xd7, 0x77, 0xad, 0xe8, 0xb2, 0x88, + 0x56, 0x24, 0x0e, 0xde, 0x71, 0xc7, 0x93, 0xb4, + 0xe7, 0x78, 0x38, 0x20, 0xf6, 0xdd, 0x9e, 0x47, + 0x5c, 0x02, 0x3e, 0x95, 0xc9, 0xbe, 0x86, 0x34, + 0x8d, 0x65, 0xed, 0xbe, 0xd0, 0x8f, 0x30, 0x68, + 0xee, 0x23, 0x65, 0x5c, 0x15, 0x65, 0x24, 0xed, + 0xe9, 0xd7, 0x9c, 0x76, 0x04, 0xf3, 0xd8, 0x57, + 0x55, 0x1c, 0x4c, 0x79, 0x4f, 0x37, 0x1f, 0x81, + 0x92, 0x92, 0x9f, 0x46, 0x33, 0x48, 0x9a, 0xde, + 0x6b, 0xc8, 0xd6, 0x07, 0x2e, 0x1a, 0x4d, 0xcc, + 0xc0, 0x1e, 0x49, 0x39, 0xe0, 0xfa, 0xf1, 0xff, + 0x00, 0xea, 0xae, 0xba, 0xfe, 0xde, 0xc8, 0x5a, + 0x17, 0x96, 0xd3, 0xce, 0x8b, 0x70, 0xde, 0xac, + 0xc4, 0x06, 0x04, 0xf4, 0x38, 0xe7, 0xbf, 0xa8, + 0xe6, 0xb2, 0x34, 0x5f, 0x0e, 0xd9, 0x43, 0x72, + 0xba, 0x84, 0x77, 0xf0, 0x41, 0x6f, 0x23, 0x16, + 0x8e, 0x36, 0x57, 0x6f, 0x2c, 0x8c, 0x7c, 0x9d, + 0xce, 0x72, 0x78, 0xce, 0x38, 0xe7, 0x8a, 0x3c, + 0x79, 0x32, 0x41, 0xa4, 0xdb, 0xe6, 0x75, 0x9a, + 0x73, 0x28, 0x93, 0x11, 0x92, 0x76, 0x20, 0xdc, + 0x32, 0xdd, 0x31, 0xc8, 0xe0, 0x7f, 0xf5, 0xab, + 0x1a, 0xb2, 0x75, 0xea, 0x2e, 0x57, 0xa1, 0xdd, + 0x82, 0x8c, 0x30, 0x78, 0x49, 0xba, 0x8a, 0xed, + 0xec, 0x76, 0x7a, 0x74, 0x56, 0xab, 0xa7, 0x2f, + 0xf6, 0x5d, 0xac, 0x16, 0x50, 0x3e, 0x18, 0xb4, + 0x4a, 0xd9, 0x90, 0x0c, 0x80, 0x49, 0x3d, 0x71, + 0xc8, 0x27, 0xd4, 0x64, 0xe7, 0xad, 0x6b, 0xcf, + 0x77, 0xf6, 0xa8, 0xac, 0xc4, 0x68, 0xc2, 0x5b, + 0x58, 0xc4, 0x6d, 0x2c, 0x8a, 0xac, 0xd9, 0x03, + 0x18, 0x56, 0xea, 0x17, 0x80, 0x48, 0xe3, 0x04, + 0x93, 0x5e, 0x7d, 0xe0, 0x5d, 0x6d, 0x16, 0x45, + 0x47, 0x8d, 0x1c, 0x3b, 0x02, 0xaa, 0x41, 0xf9, + 0x8f, 0x4d, 0xa7, 0x03, 0x27, 0x38, 0xc7, 0x50, + 0x39, 0x35, 0xe9, 0x91, 0x5a, 0x9b, 0x86, 0x12, + 0xd8, 0x23, 0x4f, 0x6d, 0x24, 0x4d, 0x2c, 0x4e, + 0xdf, 0x2a, 0xe0, 0x26, 0xec, 0x36, 0x3a, 0x11, + 0xd3, 0x19, 0x3c, 0x73, 0xd3, 0x9a, 0xf3, 0xea, + 0xaa, 0xb0, 0x9f, 0x2d, 0xf7, 0x3d, 0x6c, 0xbe, + 0xbe, 0x16, 0xb5, 0x14, 0xea, 0x45, 0x7b, 0xba, + 0xff, 0x00, 0x5e, 0x65, 0xa8, 0x2d, 0xa3, 0x9e, + 0x09, 0x27, 0xd4, 0xa5, 0xdf, 0x26, 0xd5, 0x74, + 0x06, 0xe1, 0x09, 0x6e, 0x09, 0xc3, 0x0c, 0xee, + 0x07, 0x03, 0xa7, 0x1d, 0x7f, 0x0a, 0x5b, 0xcb, + 0x38, 0x9a, 0xd9, 0x66, 0xb1, 0x74, 0x5b, 0x43, + 0x2a, 0x93, 0x19, 0x2a, 0xde, 0x53, 0x03, 0xc6, + 0x65, 0xc6, 0xff, 0x00, 0xbd, 0xb4, 0xed, 0x03, + 0x19, 0xc9, 0xcf, 0x52, 0x33, 0x61, 0x81, 0x3f, + 0xb3, 0x44, 0xf7, 0x7b, 0xe2, 0x9a, 0x58, 0x83, + 0x46, 0xbb, 0x7e, 0xec, 0x98, 0x39, 0x07, 0xb1, + 0x1f, 0x77, 0x07, 0x20, 0x60, 0xe4, 0x64, 0x82, + 0x2a, 0x3b, 0x5b, 0x85, 0x81, 0x59, 0xe5, 0xb7, + 0x82, 0x76, 0xc0, 0xcf, 0x98, 0x18, 0x84, 0x6e, + 0x99, 0xc0, 0x38, 0x23, 0xf3, 0xe7, 0x15, 0x0a, + 0x5e, 0xcd, 0xd9, 0xa3, 0xba, 0x54, 0xbe, 0xb5, + 0x1e, 0x78, 0xc9, 0xe9, 0xd2, 0xd6, 0x5f, 0x73, + 0xeb, 0xf9, 0x33, 0x8f, 0xf1, 0x85, 0xb4, 0xd2, + 0xea, 0xdb, 0xca, 0x23, 0x05, 0x7f, 0x98, 0x47, + 0x21, 0x6c, 0xf4, 0xe5, 0x58, 0xe4, 0xe7, 0xbf, + 0x7e, 0x4f, 0xe1, 0x5c, 0x07, 0x89, 0x33, 0x6d, + 0xac, 0x9b, 0xfb, 0x5c, 0x79, 0x4e, 0xdc, 0x80, + 0x7a, 0x7f, 0x2e, 0x0e, 0x33, 0xd0, 0x73, 0xda, + 0xbd, 0x86, 0xfa, 0xe2, 0xe2, 0x65, 0x95, 0x63, + 0x60, 0x88, 0xe3, 0xe6, 0x58, 0x14, 0x2a, 0xb6, + 0x00, 0xe0, 0x85, 0xff, 0x00, 0x0f, 0x7a, 0xe4, + 0x3c, 0x43, 0xe1, 0xf9, 0xad, 0xad, 0xbc, 0xcb, + 0xab, 0x59, 0xe3, 0xb2, 0x98, 0xe0, 0x97, 0x52, + 0x00, 0x63, 0x93, 0xd0, 0x90, 0x07, 0xae, 0x4e, + 0x79, 0x15, 0xdb, 0x86, 0xae, 0x93, 0xf5, 0x3c, + 0x9c, 0xd3, 0x02, 0xe5, 0x4d, 0x79, 0x6c, 0x54, + 0xf0, 0xd6, 0xa7, 0xbf, 0xca, 0x36, 0xec, 0x13, + 0x76, 0xd2, 0x4e, 0xde, 0x54, 0x82, 0x79, 0xcf, + 0x50, 0x36, 0xb3, 0x7a, 0x72, 0x33, 0xd8, 0x57, + 0x69, 0x79, 0x2e, 0x77, 0x06, 0xfe, 0xf1, 0x5d, + 0xa4, 0xe7, 0x63, 0x0e, 0xdd, 0x49, 0xc7, 0x3c, + 0x1f, 0x4e, 0x6b, 0xc7, 0xb4, 0xe9, 0x65, 0xd1, + 0x35, 0x71, 0x6f, 0x39, 0x22, 0x22, 0xdc, 0x31, + 0x18, 0xca, 0x9c, 0x8c, 0xfe, 0x3f, 0xe3, 0x5d, + 0xc6, 0x8b, 0x7b, 0x0c, 0xf0, 0x99, 0x26, 0x2c, + 0xdb, 0x1b, 0x0b, 0xb9, 0x58, 0x89, 0x72, 0x79, + 0xe4, 0x73, 0x80, 0xa5, 0x7b, 0xe0, 0xfe, 0x35, + 0xad, 0x6c, 0x2f, 0x34, 0xb9, 0x96, 0xc7, 0x9f, + 0x96, 0xe6, 0x4e, 0x87, 0xee, 0xe5, 0xb9, 0xd1, + 0xf8, 0x33, 0xc7, 0x13, 0x78, 0x4f, 0xc5, 0x9e, + 0x72, 0xca, 0x64, 0xb1, 0x62, 0xb1, 0xdc, 0x40, + 0x0e, 0x03, 0x00, 0x31, 0x90, 0x07, 0x19, 0xf7, + 0xc1, 0x23, 0xdf, 0x90, 0x7e, 0xa9, 0xb1, 0xbc, + 0x83, 0x53, 0xb0, 0x82, 0xff, 0x00, 0x4f, 0x94, + 0xcb, 0x6f, 0x3a, 0x07, 0x8d, 0x87, 0xbf, 0xaf, + 0xa7, 0xa7, 0xd7, 0x39, 0xaf, 0x87, 0x2f, 0x60, + 0x96, 0x3b, 0xeb, 0x81, 0x2d, 0xb2, 0xa4, 0x85, + 0xf7, 0x0c, 0x49, 0xb8, 0x14, 0x61, 0x90, 0xc0, + 0x8e, 0x31, 0xd7, 0xbf, 0xe7, 0x5f, 0x42, 0xfc, + 0x08, 0xb8, 0xd6, 0xa3, 0xf0, 0x74, 0xfe, 0x44, + 0xca, 0xd6, 0x69, 0x74, 0x22, 0x89, 0x1d, 0x41, + 0xdb, 0xbb, 0x1b, 0x88, 0x6f, 0x41, 0x90, 0x4f, + 0x5e, 0x38, 0x18, 0xeb, 0x5b, 0xc3, 0xf7, 0x71, + 0xb1, 0xe6, 0xe3, 0x6d, 0x5e, 0x6e, 0xb2, 0xea, + 0xcf, 0x6c, 0x85, 0x5d, 0x7e, 0x6c, 0x60, 0x0e, + 0x79, 0xed, 0xec, 0x7d, 0xbf, 0x95, 0x73, 0x9a, + 0xa6, 0xb7, 0xa9, 0xe9, 0xfa, 0xa5, 0xe7, 0x9f, + 0x75, 0xa3, 0x26, 0x98, 0xbb, 0x1a, 0x27, 0xf9, + 0xfc, 0xd4, 0xca, 0xf2, 0x1c, 0x12, 0x13, 0x39, + 0xe8, 0x77, 0x2f, 0x1f, 0xa7, 0x29, 0xe2, 0x9d, + 0x49, 0xb4, 0x19, 0xed, 0xf5, 0x0d, 0x57, 0x55, + 0x92, 0x6b, 0x50, 0xfb, 0x64, 0x48, 0x48, 0xca, + 0xe7, 0xd1, 0x4e, 0x48, 0xf5, 0xe0, 0x83, 0x51, + 0xcb, 0xe2, 0xbf, 0x0a, 0x6b, 0x3a, 0xb5, 0xb8, + 0xd1, 0x74, 0xa1, 0xad, 0xde, 0xd9, 0x47, 0x88, + 0xe7, 0xb8, 0x94, 0x43, 0x02, 0x99, 0x0e, 0x79, + 0xde, 0x4b, 0x33, 0xfc, 0xbc, 0x90, 0x8c, 0x47, + 0xa8, 0xa7, 0xed, 0x1b, 0xd8, 0xe4, 0xf6, 0x56, + 0xdc, 0xf4, 0x8f, 0x08, 0xeb, 0x69, 0xad, 0x5b, + 0x49, 0x2c, 0x13, 0xad, 0xcc, 0x6b, 0x8f, 0xde, + 0x46, 0x84, 0x26, 0x4f, 0x50, 0xac, 0x32, 0xad, + 0xd3, 0xb3, 0x1c, 0x7e, 0x35, 0xd0, 0xd6, 0x6e, + 0x82, 0xd7, 0xef, 0xa7, 0x46, 0xda, 0xa8, 0xb4, + 0x4b, 0x86, 0x24, 0x88, 0xed, 0x37, 0x14, 0x45, + 0xec, 0xbb, 0x8f, 0x2c, 0x7d, 0xf0, 0x3d, 0x31, + 0xc6, 0x4e, 0x95, 0x6b, 0x1d, 0x8c, 0xad, 0x60, + 0xa2, 0x8a, 0x2a, 0x80, 0x6b, 0x2e, 0x6a, 0x32, + 0xb8, 0xcd, 0x4d, 0x48, 0x45, 0x00, 0xc3, 0xa7, + 0x4a, 0x3b, 0x51, 0x49, 0x9a, 0x00, 0xf3, 0x8f, + 0x88, 0x5a, 0x4a, 0x89, 0x5a, 0x5d, 0x99, 0x8a, + 0x51, 0x87, 0x1f, 0x51, 0x82, 0x2b, 0xe7, 0x8f, + 0x1e, 0xfd, 0xaf, 0x4c, 0xd3, 0x9a, 0xc6, 0xde, + 0x69, 0x56, 0x38, 0xa4, 0xdc, 0x58, 0xb8, 0x4f, + 0x30, 0x0c, 0x95, 0x1b, 0x43, 0x64, 0x8e, 0x7a, + 0x91, 0xd7, 0x20, 0x62, 0xbe, 0xbb, 0xf1, 0x0d, + 0x90, 0xbe, 0xd3, 0xa4, 0x8c, 0x81, 0xb8, 0x0c, + 0x8f, 0xad, 0x78, 0x1f, 0x8e, 0x74, 0x96, 0xb9, + 0xd3, 0xe7, 0x8c, 0x96, 0x46, 0x41, 0xb5, 0xf0, + 0x70, 0x08, 0xcf, 0x52, 0x0b, 0x01, 0xc1, 0xe7, + 0x9c, 0x8c, 0x64, 0xfa, 0x63, 0x3a, 0xd0, 0x4d, + 0x73, 0xf6, 0xfc, 0x8e, 0x9c, 0x1d, 0x57, 0x19, + 0x3a, 0x0d, 0xe9, 0x2f, 0xcc, 0xf3, 0x0d, 0x26, + 0xfa, 0x2b, 0x9b, 0x88, 0xde, 0x77, 0x68, 0xa0, + 0xd4, 0x18, 0xbe, 0x7e, 0xf9, 0x49, 0x95, 0xbe, + 0x61, 0x83, 0xb9, 0x89, 0x3d, 0x4f, 0x00, 0x65, + 0xb8, 0xc8, 0x18, 0xac, 0xff, 0x00, 0x1d, 0x69, + 0x52, 0x42, 0xdf, 0x69, 0x04, 0x34, 0xf1, 0x31, + 0x32, 0x6e, 0x98, 0x48, 0x46, 0x3d, 0x48, 0x3d, + 0x7a, 0x71, 0x8e, 0x31, 0x8a, 0xa1, 0x68, 0xad, + 0x67, 0x7f, 0x36, 0x9f, 0x27, 0xca, 0xae, 0x77, + 0xc2, 0x46, 0x78, 0x6c, 0x80, 0x0f, 0x04, 0x02, + 0x7d, 0x32, 0xc4, 0x74, 0x27, 0x3d, 0x2b, 0xa9, + 0xb7, 0xb8, 0x8e, 0xea, 0xcd, 0x2e, 0xd8, 0xa8, + 0x0d, 0x9b, 0x6b, 0xa4, 0x89, 0x8e, 0x15, 0x80, + 0xc7, 0x55, 0xc2, 0xe0, 0xe3, 0x38, 0xdc, 0x72, + 0x46, 0x7a, 0x57, 0x9e, 0xff, 0x00, 0x75, 0x3e, + 0x65, 0xb3, 0x3d, 0x9c, 0x35, 0xeb, 0xd3, 0x78, + 0x69, 0xbd, 0x56, 0xc7, 0x3d, 0xe1, 0x7b, 0xd5, + 0x97, 0x75, 0xbc, 0x93, 0x08, 0xa1, 0x9c, 0x81, + 0x92, 0x40, 0xd9, 0x28, 0x19, 0x56, 0xe7, 0x9c, + 0x70, 0xdd, 0x01, 0xc0, 0xe3, 0xa9, 0x15, 0x3e, + 0xa9, 0x0c, 0x97, 0x0b, 0x73, 0x6f, 0x74, 0x8f, + 0x23, 0x12, 0x77, 0x09, 0x1b, 0x6e, 0x08, 0x04, + 0x72, 0x49, 0xc0, 0xe0, 0x75, 0x3e, 0x98, 0x15, + 0x83, 0x75, 0x11, 0xd1, 0xf5, 0x89, 0x20, 0x62, + 0x12, 0x09, 0x0e, 0x46, 0xc6, 0xe0, 0x60, 0xf1, + 0x82, 0xa7, 0xb1, 0xc1, 0x03, 0x3e, 0x82, 0xba, + 0xe8, 0x35, 0x69, 0xb5, 0x1d, 0x18, 0x46, 0x40, + 0x33, 0x5b, 0xb0, 0x59, 0x59, 0x0e, 0x30, 0x00, + 0x1b, 0x4e, 0x17, 0xe5, 0xef, 0xd4, 0xe4, 0xe7, + 0xea, 0x6a, 0xa7, 0xee, 0x4b, 0x9a, 0x3b, 0x06, + 0x12, 0x5c, 0xe9, 0xe1, 0xe6, 0xb5, 0x3c, 0xca, + 0xcc, 0xbe, 0x99, 0xa9, 0x35, 0xbc, 0x84, 0xed, + 0x07, 0x2a, 0x4f, 0x75, 0xf5, 0xff, 0x00, 0x3e, + 0xf5, 0xec, 0xff, 0x00, 0x0f, 0xf5, 0xcb, 0x29, + 0x75, 0xb9, 0x20, 0xd5, 0x0c, 0xa9, 0xa5, 0xf1, + 0xe6, 0xec, 0x2d, 0x9d, 0xac, 0x32, 0x00, 0x0b, + 0x81, 0x8c, 0xe4, 0xe3, 0x07, 0xa0, 0x15, 0xe7, + 0x1e, 0x2d, 0xd2, 0xfc, 0xe4, 0x4b, 0x88, 0x4a, + 0x87, 0x52, 0x31, 0x9c, 0x82, 0x49, 0x1d, 0xf9, + 0x24, 0xfd, 0x4e, 0x3a, 0x0f, 0x7a, 0x93, 0xc2, + 0x73, 0x1b, 0x5d, 0x5d, 0x1f, 0x50, 0x66, 0x00, + 0x83, 0x08, 0x08, 0xdb, 0x76, 0xb6, 0x31, 0x96, + 0xee, 0x40, 0xce, 0x31, 0xde, 0xb6, 0xa9, 0x4d, + 0x57, 0x87, 0xb4, 0x5b, 0xa3, 0x9a, 0x84, 0xde, + 0x0b, 0x11, 0xec, 0xa4, 0xec, 0x9b, 0xfb, 0x93, + 0x3d, 0xeb, 0x52, 0xbe, 0xd0, 0xad, 0x9f, 0x4d, + 0x1a, 0x73, 0x1b, 0x98, 0x1d, 0x5b, 0xcf, 0x49, + 0x41, 0x61, 0x1e, 0x4f, 0x18, 0x43, 0xc8, 0x6f, + 0x5e, 0xc4, 0x60, 0x67, 0xbd, 0x59, 0x6b, 0x88, + 0x61, 0x87, 0xca, 0xb6, 0xb5, 0xdf, 0x03, 0xa9, + 0x47, 0x56, 0xf2, 0xe1, 0x12, 0x86, 0x2a, 0x17, + 0x85, 0x25, 0xb1, 0xd3, 0xdb, 0x3d, 0x71, 0x5e, + 0x71, 0x19, 0x91, 0x8f, 0x03, 0xaf, 0xe3, 0xc7, + 0xe1, 0xc5, 0x6b, 0x47, 0xa9, 0xdf, 0x5a, 0xd9, + 0xa4, 0x2b, 0x72, 0xd0, 0x44, 0x80, 0xf0, 0x98, + 0x8c, 0x9c, 0x9c, 0xf2, 0x47, 0x27, 0xf9, 0x62, + 0xbc, 0xc5, 0x53, 0x56, 0x7d, 0x64, 0xf0, 0x5e, + 0xea, 0xe5, 0x77, 0xb7, 0x76, 0x75, 0x6b, 0x34, + 0x36, 0x96, 0xb1, 0xcc, 0x23, 0x4b, 0x44, 0x93, + 0xe6, 0x4f, 0xb3, 0xc0, 0x88, 0xd8, 0xdd, 0xc1, + 0x12, 0x3e, 0x72, 0x3f, 0x00, 0x7b, 0xfd, 0x38, + 0xbd, 0x49, 0x97, 0x53, 0x92, 0x45, 0x92, 0xe2, + 0x67, 0xb7, 0x6e, 0x56, 0x3b, 0x87, 0x2c, 0xc3, + 0xa9, 0xfb, 0xdd, 0x33, 0x9c, 0xfa, 0x72, 0x6a, + 0xf6, 0x91, 0xa2, 0x6a, 0x3a, 0x95, 0xc4, 0x4d, + 0x06, 0x9b, 0x77, 0x75, 0x19, 0x61, 0x92, 0x32, + 0xa0, 0x8f, 0x4d, 0xed, 0xf2, 0xfe, 0xa6, 0xbb, + 0xdd, 0x37, 0xe1, 0xfd, 0xf7, 0x98, 0xaf, 0x28, + 0xd3, 0xb4, 0xf1, 0x8c, 0x11, 0x8f, 0xb4, 0xc8, + 0x3f, 0x03, 0x85, 0xcf, 0xe2, 0x45, 0x69, 0xec, + 0xea, 0x54, 0x56, 0x8a, 0x39, 0x67, 0x8b, 0xc2, + 0xe1, 0x1b, 0x75, 0x24, 0x9b, 0x67, 0x85, 0x6a, + 0xde, 0x18, 0xb7, 0xb9, 0x9a, 0x25, 0x96, 0x2b, + 0xa5, 0x92, 0x36, 0x24, 0x4f, 0x1b, 0xa6, 0x1d, + 0x40, 0x03, 0xa9, 0x19, 0xcf, 0x4c, 0x9e, 0x7a, + 0x7d, 0x6a, 0xde, 0x89, 0xa4, 0xa6, 0x99, 0xa7, + 0x2d, 0xb5, 0x89, 0x91, 0x67, 0x92, 0x5d, 0xc9, + 0xe5, 0xbe, 0xf6, 0x63, 0x80, 0x31, 0x8c, 0x64, + 0xf4, 0x3c, 0x67, 0x1c, 0xd7, 0xd0, 0xf6, 0x7e, + 0x01, 0xf0, 0xfd, 0xa0, 0x47, 0xbe, 0xf3, 0xef, + 0x8a, 0xf4, 0xf3, 0xdf, 0x6a, 0x67, 0xfd, 0xd5, + 0xc1, 0xfd, 0x4d, 0x37, 0x50, 0xf1, 0xaf, 0x83, + 0x7c, 0x2d, 0x1b, 0xc7, 0x1d, 0xee, 0x9f, 0x68, + 0xeb, 0xd6, 0x3b, 0x35, 0x05, 0xf8, 0xf6, 0x5e, + 0x4f, 0xeb, 0x5d, 0x54, 0xa9, 0x57, 0xb5, 0xa7, + 0x23, 0xc7, 0xc4, 0x66, 0x58, 0x0b, 0xb7, 0x46, + 0x8d, 0xdb, 0xea, 0xdd, 0x8f, 0x1d, 0xd3, 0x7e, + 0x17, 0xf8, 0xa7, 0x54, 0xb3, 0x0f, 0x26, 0x9c, + 0x22, 0xea, 0xf0, 0xc9, 0x72, 0xcb, 0x12, 0xa0, + 0x27, 0x95, 0x65, 0xe0, 0x85, 0x24, 0x67, 0x81, + 0x90, 0x79, 0xe4, 0x70, 0x7d, 0x5b, 0xc2, 0x9f, + 0x0d, 0x35, 0x4b, 0x4d, 0x16, 0xd2, 0xca, 0x7f, + 0x14, 0x0b, 0x1b, 0x58, 0xd8, 0xbc, 0x90, 0x69, + 0xc8, 0xac, 0x59, 0xce, 0x41, 0x3e, 0x63, 0x8f, + 0xfd, 0x97, 0xde, 0xb8, 0xdd, 0x73, 0xe3, 0xcd, + 0x94, 0x7b, 0x97, 0x46, 0xd3, 0x6e, 0x6e, 0x9f, + 0x24, 0x09, 0x2e, 0x5c, 0x22, 0x9f, 0x70, 0x07, + 0x3f, 0xa0, 0xae, 0x07, 0x5b, 0xf8, 0xc5, 0xe2, + 0xfd, 0x4e, 0x1f, 0x26, 0x2b, 0xd8, 0xec, 0x21, + 0xc1, 0x18, 0xb4, 0x8c, 0x29, 0x23, 0xd3, 0x71, + 0xc9, 0x1f, 0x86, 0x0d, 0x75, 0xaa, 0x6d, 0x25, + 0x73, 0xc4, 0xab, 0x5f, 0xda, 0x49, 0xc9, 0x2b, + 0x5c, 0xfa, 0x3d, 0xbc, 0x2b, 0xe1, 0x3f, 0x0f, + 0x5a, 0xbc, 0xda, 0xac, 0xa2, 0xe8, 0x60, 0x87, + 0xb9, 0xd5, 0x2e, 0xb7, 0xf0, 0x7d, 0x03, 0x7c, + 0x80, 0xfd, 0x00, 0x35, 0xe6, 0xda, 0x76, 0xad, + 0x0f, 0xc3, 0xdf, 0x14, 0x5b, 0x5c, 0x68, 0x12, + 0x43, 0x3f, 0x82, 0x75, 0x6f, 0x91, 0xef, 0x20, + 0x0b, 0x27, 0x93, 0x2a, 0xb9, 0xc0, 0x62, 0x71, + 0xc7, 0x20, 0x1e, 0x7a, 0x74, 0xe4, 0x73, 0xf3, + 0xf6, 0xa3, 0xa8, 0x5e, 0x6a, 0x53, 0xf9, 0xda, + 0x85, 0xd4, 0xf7, 0x53, 0x76, 0x79, 0xa4, 0x67, + 0x23, 0xe8, 0x4d, 0x75, 0xdf, 0x0c, 0xfc, 0x5e, + 0x9a, 0x0d, 0xd4, 0xba, 0x6e, 0xac, 0x5d, 0xf4, + 0x1b, 0xe3, 0xb6, 0x70, 0x3a, 0xc0, 0xdd, 0x04, + 0xa9, 0xe9, 0x8e, 0xfe, 0xdf, 0x85, 0x57, 0xb3, + 0xb6, 0xc4, 0x46, 0xa3, 0xda, 0x5b, 0x33, 0xea, + 0x1f, 0x05, 0x7c, 0x47, 0xd3, 0xbc, 0x47, 0x3c, + 0xb8, 0x82, 0x5b, 0x18, 0x1d, 0xd5, 0x20, 0x7b, + 0xa6, 0x0a, 0x67, 0x72, 0x39, 0xda, 0x06, 0x40, + 0x1c, 0x63, 0xef, 0x1e, 0x6b, 0xbb, 0x6b, 0x98, + 0x12, 0x74, 0x81, 0xe6, 0x8d, 0x67, 0x70, 0x4a, + 0xc6, 0x58, 0x6e, 0x61, 0xea, 0x07, 0x53, 0x5f, + 0x2f, 0x78, 0xaa, 0x79, 0x34, 0x29, 0x80, 0xd4, + 0x2e, 0x0c, 0xf6, 0xbb, 0x1a, 0x78, 0x25, 0xdf, + 0xf2, 0xcc, 0x98, 0xdd, 0xb9, 0x48, 0xe0, 0xf1, + 0x93, 0x59, 0x3f, 0xb3, 0xbd, 0xc3, 0x6a, 0xbf, + 0x10, 0xb4, 0xe9, 0xb5, 0x19, 0x9d, 0xae, 0x21, + 0x8e, 0x49, 0x43, 0xc8, 0xc7, 0x2c, 0xcc, 0xb8, + 0xc6, 0x7a, 0xe7, 0xee, 0x8c, 0x74, 0xc6, 0x7f, + 0x19, 0xa3, 0x39, 0x4a, 0xfc, 0xca, 0xd6, 0x3a, + 0xf1, 0x98, 0x5a, 0x74, 0x94, 0x5d, 0x29, 0x73, + 0x36, 0x7d, 0x7d, 0x45, 0x14, 0x56, 0xc7, 0x9e, + 0x14, 0x51, 0x45, 0x00, 0x34, 0x9a, 0x66, 0x68, + 0x34, 0xc6, 0x34, 0x00, 0xe2, 0x41, 0x18, 0x38, + 0xc1, 0xf5, 0xaf, 0x34, 0xf1, 0xc6, 0x9a, 0x2d, + 0xef, 0x4c, 0xaa, 0xbf, 0xbb, 0x94, 0x1c, 0xfe, + 0x35, 0xe8, 0xf9, 0xac, 0x8f, 0x13, 0x58, 0x8b, + 0xed, 0x35, 0xc0, 0x1f, 0x38, 0xe4, 0x53, 0x4f, + 0xb9, 0x32, 0x57, 0x57, 0x5b, 0x9f, 0x23, 0x7c, + 0x46, 0xd1, 0x0d, 0xbc, 0xef, 0x3a, 0x3b, 0x19, + 0x91, 0xf7, 0xa1, 0x77, 0xc9, 0x6c, 0x9f, 0x76, + 0x2c, 0x49, 0x18, 0x24, 0x80, 0x06, 0x7d, 0x80, + 0x35, 0x99, 0xa1, 0x6a, 0x10, 0x18, 0xa0, 0x9a, + 0x76, 0x5f, 0x26, 0x74, 0x16, 0xd7, 0x2e, 0xcd, + 0xf7, 0x1c, 0x67, 0xcb, 0x61, 0x92, 0x49, 0xf9, + 0x46, 0x3e, 0x55, 0x00, 0x2a, 0xfa, 0x9a, 0xf5, + 0xef, 0x16, 0x69, 0xbf, 0x69, 0xb4, 0x90, 0x61, + 0x8b, 0x20, 0xda, 0xea, 0x09, 0xf9, 0x97, 0x3d, + 0xc0, 0x65, 0xcf, 0x3d, 0xb2, 0x07, 0x7a, 0xf1, + 0x48, 0x31, 0xa5, 0x6a, 0xd7, 0x96, 0x73, 0x95, + 0x36, 0x77, 0x63, 0x6b, 0x92, 0xc3, 0x00, 0x83, + 0xbb, 0x39, 0x53, 0xd7, 0xa7, 0x7e, 0xf8, 0xe7, + 0xad, 0x70, 0xd6, 0xa7, 0x64, 0xe2, 0xfa, 0x7e, + 0x47, 0xaf, 0x4e, 0xb3, 0x97, 0x2e, 0x22, 0x1b, + 0xec, 0xfd, 0x7f, 0xe0, 0x9a, 0x5e, 0x2b, 0xd3, + 0x67, 0xb9, 0xb4, 0x78, 0x2e, 0x03, 0x2d, 0xdd, + 0xa9, 0xe3, 0xcc, 0xc8, 0xc8, 0xec, 0x7e, 0x76, + 0x18, 0x18, 0x3d, 0x02, 0xe7, 0x1c, 0xd6, 0x1e, + 0x81, 0xa8, 0x34, 0x72, 0xc5, 0x2c, 0x85, 0x8a, + 0x44, 0x3c, 0xb9, 0x10, 0xe3, 0x26, 0x33, 0x9c, + 0xe3, 0x77, 0x0a, 0x72, 0x5b, 0x18, 0x53, 0x82, + 0xc4, 0xf6, 0x15, 0xd5, 0xe8, 0x97, 0x09, 0x75, + 0xa2, 0xa5, 0xde, 0x0b, 0x5f, 0x44, 0x42, 0xca, + 0xa8, 0xe5, 0x36, 0xae, 0x3a, 0x95, 0x03, 0x27, + 0xa1, 0xf9, 0xb7, 0x0e, 0x7d, 0x6b, 0x8d, 0xf1, + 0x26, 0x9d, 0x25, 0x9e, 0xa2, 0xee, 0xb0, 0xbb, + 0x5b, 0xdc, 0x61, 0xd4, 0xa9, 0x03, 0x00, 0xe0, + 0xe4, 0xe4, 0xe5, 0x47, 0x42, 0x09, 0x3d, 0x79, + 0xc7, 0x38, 0xac, 0xe9, 0xfb, 0xcb, 0xd9, 0xc8, + 0xec, 0xc5, 0x46, 0xdc, 0xb8, 0xaa, 0x5d, 0x7f, + 0x33, 0x6f, 0x5f, 0x82, 0x7d, 0x52, 0xc7, 0xec, + 0x3a, 0x4a, 0xcb, 0x77, 0x78, 0xf2, 0xa4, 0x90, + 0xa5, 0xba, 0x96, 0xf3, 0x54, 0x03, 0x92, 0x07, + 0x04, 0xf0, 0x73, 0x9c, 0x7a, 0xfd, 0x6b, 0x63, + 0x44, 0xf8, 0x57, 0xe2, 0x6b, 0xe4, 0x22, 0xf6, + 0x3b, 0x7b, 0x14, 0x76, 0x04, 0x2d, 0xc4, 0xa0, + 0xb0, 0x50, 0x31, 0xf7, 0x63, 0xc9, 0x1e, 0xc0, + 0xe0, 0xe3, 0x8a, 0xe7, 0x34, 0xfd, 0x75, 0xec, + 0x65, 0xb0, 0xd4, 0x2c, 0x15, 0x7c, 0xfb, 0x29, + 0x04, 0x91, 0xf9, 0x68, 0xc1, 0x4a, 0x9c, 0x86, + 0x56, 0x63, 0x92, 0x46, 0x09, 0x00, 0xfa, 0x0c, + 0xf2, 0x4e, 0x6b, 0xda, 0xf5, 0xff, 0x00, 0x88, + 0x17, 0x56, 0x9e, 0x0d, 0xb5, 0xd7, 0x34, 0x1b, + 0x58, 0x2e, 0x62, 0x76, 0x11, 0x5c, 0x3b, 0x92, + 0x3c, 0x96, 0x3f, 0x74, 0x94, 0x1c, 0x10, 0x71, + 0x83, 0xe8, 0x7a, 0x70, 0x41, 0xae, 0x9a, 0x30, + 0x74, 0xe3, 0xca, 0x8f, 0x37, 0x30, 0xc4, 0x7d, + 0x66, 0xa2, 0xab, 0xe4, 0x74, 0x5a, 0x7f, 0xc3, + 0x9d, 0x26, 0x12, 0x7e, 0xdb, 0x77, 0x75, 0x70, + 0x41, 0x04, 0x46, 0xb8, 0x8c, 0x01, 0xd8, 0x1e, + 0xe7, 0xf4, 0xcd, 0x5d, 0x95, 0xbc, 0x2d, 0xe1, + 0xa2, 0x27, 0x94, 0x69, 0xf6, 0xaa, 0xa3, 0x6a, + 0xf9, 0xe4, 0x6e, 0xcf, 0x3d, 0x0b, 0x65, 0x81, + 0xf5, 0x18, 0xaf, 0x9d, 0x35, 0xaf, 0x88, 0xde, + 0x27, 0xd5, 0x81, 0x8e, 0x4d, 0x49, 0xed, 0xe1, + 0x3d, 0x62, 0xb6, 0x02, 0x31, 0xf9, 0x8e, 0x6b, + 0x94, 0x9e, 0x69, 0x2e, 0x25, 0x32, 0xcf, 0x23, + 0xc9, 0x21, 0xea, 0xce, 0xdb, 0x89, 0xfc, 0x7a, + 0xd1, 0x1c, 0x3c, 0x23, 0xb2, 0x22, 0xb6, 0x3f, + 0x11, 0x5d, 0x5a, 0xa4, 0xdb, 0x5f, 0x87, 0xdc, + 0x7d, 0x1d, 0xac, 0xfc, 0x65, 0xd0, 0x6c, 0x91, + 0xa2, 0xb6, 0x6b, 0xad, 0x46, 0x60, 0x47, 0xcd, + 0x12, 0xec, 0x40, 0x57, 0x3c, 0x83, 0xe9, 0x8e, + 0xbd, 0xbe, 0x99, 0xae, 0x1f, 0x5a, 0xf8, 0xe3, + 0xaf, 0x5d, 0xee, 0x5d, 0x36, 0xd6, 0xd6, 0xca, + 0x32, 0x3a, 0x9c, 0xc8, 0xdf, 0x5c, 0x9e, 0x07, + 0xd3, 0x06, 0xbc, 0x9a, 0x8a, 0xd9, 0x45, 0x23, + 0x92, 0xe6, 0xd6, 0xb1, 0xe2, 0xad, 0x77, 0x59, + 0x66, 0x3a, 0x9e, 0xab, 0x77, 0x38, 0x6e, 0xa9, + 0xe6, 0x6d, 0x5f, 0xfb, 0xe4, 0x71, 0x8f, 0xc2, + 0xb1, 0x30, 0x07, 0x03, 0xa5, 0x2d, 0x15, 0x42, + 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, + 0x3d, 0x37, 0xe1, 0xd6, 0xb1, 0xa7, 0x6b, 0xf6, + 0x50, 0xf8, 0x43, 0xc5, 0x60, 0x3c, 0x21, 0xcb, + 0x69, 0x97, 0x2c, 0xe5, 0x4c, 0x2e, 0x7a, 0xc4, + 0x58, 0x73, 0xb5, 0xb3, 0xf8, 0x1e, 0x3d, 0x31, + 0xd8, 0xc3, 0x60, 0xbe, 0x1e, 0x9f, 0xec, 0xf6, + 0x16, 0x76, 0xb6, 0x37, 0x03, 0xef, 0xa7, 0xca, + 0xcc, 0x0a, 0xf0, 0x1b, 0x27, 0xab, 0x00, 0x7a, + 0xe0, 0x1c, 0x1c, 0xf4, 0xe6, 0xbc, 0x04, 0x12, + 0x08, 0x20, 0x9c, 0x8e, 0x9e, 0xd5, 0xef, 0x7f, + 0x0f, 0x7c, 0x4e, 0x3c, 0x67, 0xa2, 0x49, 0xa6, + 0xde, 0x38, 0x1e, 0x25, 0xb5, 0x8b, 0x09, 0x26, + 0x70, 0xd7, 0x90, 0xa8, 0xe9, 0xee, 0xe3, 0x24, + 0x1c, 0xe4, 0x11, 0xc9, 0xcf, 0x6c, 0x2b, 0xd3, + 0x73, 0x5a, 0x33, 0xd1, 0xcb, 0xb1, 0x31, 0xa1, + 0x52, 0xd3, 0x49, 0xa7, 0xd5, 0xf4, 0xff, 0x00, + 0x80, 0x7b, 0x5f, 0xc3, 0xbf, 0x16, 0xc5, 0xe2, + 0x0b, 0x01, 0x0d, 0xc4, 0xb1, 0xb5, 0xfc, 0x23, + 0x0c, 0x55, 0x81, 0x12, 0x8f, 0xef, 0x29, 0x1d, + 0x6b, 0xb4, 0xaf, 0x93, 0x3c, 0x35, 0xab, 0x4f, + 0xe1, 0x8d, 0x46, 0x04, 0xbc, 0xb7, 0x6b, 0x29, + 0x63, 0x69, 0x19, 0x26, 0x8b, 0xe5, 0x59, 0xb0, + 0x7a, 0x81, 0xdb, 0x92, 0x37, 0x0e, 0xdc, 0xe3, + 0x23, 0x15, 0xf4, 0x9f, 0x84, 0x3c, 0x47, 0x6d, + 0xe2, 0x4d, 0x2d, 0x2e, 0x60, 0x65, 0x13, 0x28, + 0x02, 0x54, 0x07, 0x3b, 0x4f, 0xf8, 0x1e, 0xd4, + 0xe9, 0xca, 0xd6, 0x8b, 0x77, 0xec, 0xfb, 0x99, + 0xe2, 0xa8, 0xde, 0xf5, 0x61, 0x1b, 0x77, 0x5d, + 0x9f, 0xf9, 0x3e, 0x9f, 0x71, 0xd0, 0x51, 0x45, + 0x15, 0xb1, 0xc4, 0x44, 0xdd, 0xea, 0x26, 0xe9, + 0x52, 0xb7, 0x5a, 0x8c, 0xd0, 0x03, 0x0d, 0x21, + 0x01, 0x81, 0x52, 0x38, 0x3d, 0x69, 0x48, 0xe6, + 0x8c, 0x73, 0x40, 0x1e, 0x65, 0xe2, 0xfd, 0x3b, + 0xec, 0x9a, 0x81, 0x70, 0xa3, 0xcb, 0x7e, 0x71, + 0x8c, 0x8f, 0x70, 0x6b, 0xc7, 0xbc, 0x4f, 0xe1, + 0x04, 0xd4, 0x6f, 0x4d, 0xb5, 0xbc, 0x53, 0xbb, + 0x28, 0xf3, 0x55, 0x63, 0x90, 0xe7, 0xca, 0x1c, + 0xe0, 0x0e, 0x38, 0x1c, 0x8c, 0x67, 0x71, 0xed, + 0x5f, 0x4a, 0x78, 0xb3, 0x4e, 0x17, 0x9a, 0x6b, + 0x32, 0x8f, 0x9d, 0x39, 0x15, 0xe4, 0xf7, 0x64, + 0xd9, 0xdc, 0x41, 0x7c, 0x2d, 0xa2, 0xb9, 0x92, + 0xc9, 0xcc, 0x86, 0x19, 0x14, 0x11, 0x22, 0x10, + 0x43, 0x21, 0xfc, 0x3a, 0x7a, 0x11, 0x59, 0x62, + 0x62, 0xe5, 0x0e, 0x68, 0x3b, 0x34, 0x75, 0x65, + 0xf5, 0xa3, 0x4a, 0xab, 0xa7, 0x51, 0x5e, 0x32, + 0xfc, 0xfa, 0x7f, 0x91, 0xc2, 0x58, 0x78, 0x5c, + 0x78, 0x76, 0x0b, 0xd8, 0xac, 0x5d, 0x52, 0x00, + 0xea, 0x65, 0xf2, 0xd1, 0xe7, 0x92, 0x55, 0xc7, + 0x49, 0x00, 0x3b, 0x4f, 0x2c, 0x78, 0x38, 0x1c, + 0xfd, 0x2b, 0x95, 0xd6, 0xe1, 0x9a, 0xe6, 0xce, + 0xe6, 0xd9, 0x95, 0xe3, 0xb9, 0x93, 0x26, 0x48, + 0xfc, 0x90, 0x18, 0x83, 0xd0, 0xaa, 0x2a, 0xfc, + 0x83, 0x1b, 0x7f, 0x88, 0x0c, 0xfb, 0x57, 0x53, + 0xe3, 0x5f, 0x12, 0x6a, 0xba, 0x76, 0x9b, 0x74, + 0xb0, 0x2a, 0x7d, 0x96, 0xfa, 0x44, 0xfb, 0x4c, + 0x44, 0xff, 0x00, 0xab, 0x2a, 0x4f, 0x96, 0xc3, + 0x6e, 0x08, 0x38, 0xc6, 0xe2, 0x70, 0x71, 0x8a, + 0xf2, 0x68, 0xf5, 0xb1, 0x25, 0xe7, 0xef, 0xae, + 0x23, 0x79, 0x4b, 0xe0, 0xae, 0xdd, 0xd9, 0x6c, + 0xf5, 0xf7, 0x19, 0xed, 0x93, 0xfd, 0x6b, 0x9a, + 0x95, 0x29, 0xb5, 0xed, 0x1b, 0xb9, 0xeb, 0xd5, + 0xc5, 0x52, 0xa7, 0x7c, 0x3d, 0xad, 0xe9, 0xb6, + 0xa6, 0x76, 0x9a, 0xe6, 0x3b, 0xb6, 0xb5, 0xb8, + 0x2a, 0x1b, 0x24, 0xa9, 0xda, 0x18, 0x06, 0xf5, + 0xc1, 0xe3, 0x07, 0x8f, 0xc2, 0xbd, 0x0f, 0xe1, + 0xde, 0xbf, 0x6f, 0x63, 0x7d, 0x36, 0x91, 0xab, + 0x05, 0x93, 0x47, 0xd5, 0x01, 0x86, 0x61, 0xbd, + 0x5b, 0xcb, 0x2d, 0xd0, 0xe4, 0x70, 0x0f, 0x7f, + 0x6c, 0x0a, 0xe1, 0x7c, 0x49, 0x68, 0x25, 0x8c, + 0xdd, 0xc0, 0x18, 0xb4, 0x63, 0x2f, 0xd4, 0xed, + 0x07, 0xd7, 0x00, 0x00, 0x46, 0x7d, 0xfa, 0xfb, + 0x72, 0xfb, 0x5b, 0x9f, 0xed, 0x2b, 0x3e, 0xb2, + 0xb6, 0xc3, 0xb5, 0xc0, 0x04, 0xec, 0x20, 0x0e, + 0x46, 0x38, 0x50, 0x4f, 0x1f, 0x81, 0x27, 0xdf, + 0xb5, 0x35, 0x35, 0x73, 0xc5, 0xad, 0x4d, 0xd2, + 0x9b, 0x8b, 0x35, 0x3c, 0x57, 0xa1, 0xcf, 0xe1, + 0xdd, 0x72, 0xe3, 0x4f, 0xb8, 0x3b, 0xc2, 0x1d, + 0xd1, 0x49, 0x8c, 0x09, 0x23, 0x3c, 0xab, 0x0f, + 0x6c, 0x7e, 0xbc, 0x76, 0xac, 0x9a, 0xf4, 0x8c, + 0x1f, 0x1c, 0x78, 0x21, 0xe2, 0x20, 0xbf, 0x88, + 0xf4, 0x15, 0x20, 0xe7, 0x1b, 0xa7, 0x84, 0x72, + 0x47, 0xb9, 0xe0, 0x9f, 0xa8, 0x38, 0xeb, 0x5e, + 0x6f, 0x4d, 0x18, 0x05, 0x14, 0x51, 0x40, 0x05, + 0x14, 0x51, 0x40, 0x05, 0x14, 0x0e, 0x4f, 0x19, + 0xe3, 0xad, 0x74, 0x5a, 0x6f, 0x82, 0xbc, 0x41, + 0xa8, 0x35, 0xf2, 0x43, 0xa6, 0xdc, 0x2c, 0xb6, + 0x61, 0x7c, 0xd8, 0x9e, 0x36, 0x12, 0x65, 0xc1, + 0x64, 0x1b, 0x00, 0xdd, 0xc8, 0x53, 0xce, 0x00, + 0xf5, 0x3d, 0x32, 0x01, 0xce, 0xd1, 0x4e, 0x96, + 0x37, 0x8a, 0x57, 0x8e, 0x54, 0x64, 0x91, 0x09, + 0x56, 0x56, 0x18, 0x2a, 0x47, 0x63, 0x9e, 0x41, + 0xc8, 0xe9, 0x4d, 0xee, 0x00, 0xea, 0x78, 0x14, + 0x00, 0x55, 0x9d, 0x36, 0xfa, 0xeb, 0x4c, 0xbf, + 0x82, 0xf6, 0xc2, 0x67, 0x82, 0xea, 0x06, 0x0f, + 0x1c, 0x88, 0x79, 0x56, 0x1d, 0xff, 0x00, 0xcf, + 0x04, 0x70, 0x78, 0xad, 0x3b, 0x0f, 0x09, 0x6b, + 0xd7, 0xce, 0x04, 0x1a, 0x5d, 0xde, 0x00, 0x56, + 0x66, 0x68, 0x98, 0x6d, 0x46, 0xe3, 0x71, 0x1d, + 0x76, 0xf7, 0xcf, 0x20, 0x0e, 0xb5, 0xb3, 0x6d, + 0xe0, 0xfb, 0x2b, 0x79, 0x23, 0xfe, 0xd5, 0xd4, + 0xcb, 0x2b, 0x48, 0xf6, 0xa5, 0x6d, 0xe2, 0x90, + 0x79, 0x77, 0x2a, 0x46, 0x22, 0x90, 0xec, 0x66, + 0x04, 0xae, 0xe6, 0x18, 0x42, 0x1b, 0x18, 0x1f, + 0xc4, 0x54, 0x03, 0xd4, 0xa0, 0xbc, 0xd3, 0xfe, + 0x23, 0x78, 0x6d, 0x75, 0x84, 0xb6, 0x56, 0xd5, + 0x6c, 0x8a, 0xad, 0xdd, 0xae, 0xec, 0x2c, 0x4d, + 0xcf, 0xef, 0x15, 0x4f, 0x55, 0x3f, 0x90, 0xe7, + 0xd2, 0xb6, 0xf4, 0x8d, 0x46, 0xfb, 0xc2, 0xbf, + 0x66, 0x91, 0x22, 0xb3, 0x0e, 0x9f, 0xba, 0x99, + 0x51, 0xb2, 0xe5, 0x47, 0x21, 0x5b, 0x1f, 0x28, + 0x18, 0xe8, 0x46, 0x78, 0x03, 0xbd, 0x78, 0x4e, + 0x99, 0xa8, 0x6a, 0x3f, 0x0e, 0xfc, 0x60, 0x93, + 0x5a, 0xcf, 0x14, 0xcf, 0x1a, 0x8f, 0x31, 0x17, + 0x70, 0x49, 0xe3, 0x70, 0x09, 0x47, 0x56, 0x01, + 0x81, 0xc7, 0x50, 0x40, 0x20, 0xf3, 0x5f, 0x40, + 0xe9, 0x07, 0x48, 0xd5, 0xe0, 0xb2, 0xd6, 0x2d, + 0xe6, 0x3f, 0xf0, 0x8e, 0xdd, 0xa3, 0x24, 0x88, + 0xa8, 0x4b, 0xc6, 0xf8, 0xff, 0x00, 0x56, 0xe0, + 0x76, 0x56, 0xef, 0xc6, 0x07, 0x43, 0xd2, 0xb8, + 0xab, 0xd2, 0x69, 0xf3, 0xc1, 0x9e, 0xd6, 0x03, + 0x19, 0x17, 0x1f, 0x63, 0x59, 0x5d, 0x7e, 0x2d, + 0x76, 0xff, 0x00, 0x23, 0xd7, 0x74, 0x6d, 0x4e, + 0xdf, 0x57, 0xd3, 0xe2, 0xbc, 0xb3, 0x6d, 0xd1, + 0x48, 0x3a, 0x1e, 0xaa, 0x7b, 0x82, 0x3d, 0x6b, + 0x42, 0xb8, 0x3f, 0x05, 0xe8, 0xf3, 0x69, 0x52, + 0x79, 0xda, 0x6d, 0xd4, 0x37, 0x9a, 0x74, 0xeb, + 0xbf, 0x7c, 0x4f, 0xf2, 0x3f, 0x3c, 0x6d, 0x19, + 0x24, 0x1c, 0x7f, 0x2e, 0xbe, 0x9d, 0xcc, 0x6e, + 0xb2, 0x20, 0x65, 0x39, 0x06, 0xba, 0x69, 0x49, + 0xca, 0x3e, 0xf2, 0xb3, 0x3c, 0xcc, 0x44, 0x21, + 0x09, 0xbf, 0x64, 0xef, 0x11, 0x08, 0xa6, 0x11, + 0x53, 0x11, 0x93, 0x4d, 0xc5, 0x68, 0x60, 0x44, + 0x45, 0x20, 0x15, 0x2e, 0x07, 0x6a, 0x4c, 0x0e, + 0xf4, 0x00, 0xc6, 0x40, 0xca, 0x55, 0xba, 0x1e, + 0x0d, 0x79, 0x67, 0x8b, 0x34, 0xd3, 0x63, 0xa8, + 0xb9, 0x0b, 0xfb, 0xb7, 0xe4, 0x71, 0x5e, 0xb0, + 0x05, 0x73, 0xde, 0x32, 0xd3, 0x45, 0xe6, 0x9c, + 0xce, 0x8b, 0xf3, 0xc6, 0x33, 0x55, 0x17, 0x66, + 0x45, 0x45, 0x74, 0x7c, 0x8f, 0xf1, 0x6a, 0xca, + 0x7b, 0x2b, 0x0b, 0xcb, 0x2b, 0x74, 0x67, 0x8a, + 0xe5, 0x84, 0x91, 0x2a, 0x83, 0x9e, 0x5d, 0x0e, + 0x07, 0x1f, 0xde, 0x1f, 0x86, 0x7b, 0xe7, 0x8f, + 0x2a, 0xd2, 0x34, 0x6b, 0x98, 0x75, 0x28, 0x26, + 0xbd, 0x43, 0x6d, 0x04, 0x2e, 0x1d, 0xcc, 0x8d, + 0xb1, 0x80, 0x07, 0x3d, 0x0f, 0xcd, 0x9e, 0x31, + 0xd2, 0xbe, 0xa8, 0xf1, 0x2d, 0x94, 0xf7, 0x16, + 0x0c, 0xd6, 0x84, 0xad, 0xf5, 0xb9, 0x12, 0xc0, + 0x47, 0x76, 0x53, 0xf7, 0x4f, 0xa8, 0x38, 0xfa, + 0x66, 0xbc, 0x37, 0xe2, 0x35, 0xcd, 0xa4, 0x11, + 0x5a, 0x6a, 0x16, 0xb6, 0x8b, 0x0b, 0x5c, 0x16, + 0x53, 0x6e, 0x0f, 0x0a, 0x08, 0xdd, 0x8e, 0x99, + 0xe0, 0xb7, 0x1f, 0xe1, 0xd7, 0x28, 0xde, 0x12, + 0xf6, 0x76, 0xd0, 0xee, 0x94, 0x95, 0x6a, 0x4b, + 0x10, 0xdd, 0xe5, 0x7b, 0x35, 0xfa, 0xfc, 0xff, + 0x00, 0xcc, 0xc5, 0xbb, 0x67, 0x49, 0x24, 0x55, + 0xdc, 0xd0, 0xbb, 0xb2, 0x6c, 0x90, 0x13, 0xc8, + 0xc0, 0xce, 0xdc, 0x81, 0xdf, 0xaf, 0x3d, 0x2b, + 0x9f, 0xb0, 0x99, 0xb4, 0xcd, 0x47, 0x63, 0x00, + 0xd6, 0xee, 0x76, 0xb8, 0xe1, 0xb8, 0xfe, 0xf0, + 0xea, 0x32, 0x3a, 0xfa, 0x64, 0x7a, 0x55, 0xdd, + 0x22, 0xe6, 0xe7, 0x52, 0xd4, 0x5a, 0x26, 0x40, + 0xb1, 0x88, 0x99, 0xe4, 0x55, 0x1f, 0x78, 0x28, + 0x3c, 0x92, 0x7b, 0xf3, 0xd7, 0xa9, 0x3e, 0xe7, + 0x97, 0xeb, 0x02, 0x2b, 0x8b, 0x79, 0x09, 0x03, + 0xed, 0x08, 0x77, 0x75, 0xea, 0x3b, 0x80, 0xa1, + 0x70, 0x07, 0x7e, 0x7b, 0x8c, 0x0a, 0x6b, 0xdd, + 0x97, 0x29, 0x73, 0xbd, 0x7a, 0x5e, 0xd2, 0x5b, + 0xa3, 0xa8, 0xd1, 0x75, 0xeb, 0x8f, 0x0f, 0xeb, + 0xb6, 0xba, 0xc5, 0xaa, 0x10, 0xd0, 0x90, 0x26, + 0x8d, 0x5c, 0x36, 0xe8, 0xf8, 0xcf, 0x03, 0x85, + 0x1c, 0x64, 0x0c, 0x67, 0x3e, 0xbd, 0x4e, 0xbf, + 0xc4, 0xbd, 0x0a, 0xde, 0xc6, 0xfe, 0x0d, 0x63, + 0x48, 0x0a, 0xda, 0x36, 0xa8, 0xbe, 0x74, 0x26, + 0x3f, 0xbb, 0x1b, 0x90, 0x0b, 0x47, 0xc7, 0x6e, + 0xe3, 0xa7, 0x07, 0x1d, 0x8d, 0x70, 0x7a, 0x3e, + 0xa0, 0x2e, 0xac, 0x84, 0x52, 0xb8, 0x0f, 0x10, + 0x19, 0xde, 0x49, 0x0c, 0xa1, 0xb2, 0x38, 0xc7, + 0x5c, 0xe4, 0xff, 0x00, 0xf5, 0xab, 0xd2, 0x3e, + 0x1d, 0x5d, 0x5b, 0xea, 0x76, 0x37, 0xfe, 0x04, + 0xd6, 0x26, 0x22, 0x39, 0xbf, 0x7b, 0x61, 0x24, + 0x83, 0x06, 0x19, 0x47, 0x38, 0xc1, 0xe4, 0x72, + 0x73, 0x8e, 0xbb, 0x49, 0xe9, 0x54, 0xd5, 0xb5, + 0x38, 0x4e, 0x12, 0xcd, 0x21, 0x92, 0xee, 0x14, + 0xbb, 0x95, 0xa1, 0xb7, 0x67, 0x51, 0x2c, 0x8a, + 0x9b, 0xca, 0x29, 0x38, 0x2c, 0x17, 0x23, 0x3c, + 0x67, 0x8c, 0x8c, 0xf4, 0xe2, 0xbd, 0xcf, 0x5f, + 0xf8, 0x27, 0xa7, 0x69, 0xd2, 0x68, 0xd7, 0x5a, + 0x7e, 0xad, 0xf6, 0xcd, 0x27, 0x50, 0x51, 0x00, + 0x9e, 0x59, 0xd6, 0x22, 0xd3, 0xc9, 0xfe, 0xa5, + 0x90, 0x85, 0x21, 0x91, 0x89, 0x5e, 0x06, 0x4f, + 0x5e, 0x7d, 0x3c, 0x82, 0xd2, 0x1b, 0x7d, 0x0b, + 0xc4, 0x8d, 0x6f, 0xe2, 0x6d, 0x32, 0x4b, 0xb8, + 0x6d, 0x64, 0x31, 0xdc, 0x5a, 0xa4, 0xfe, 0x4b, + 0x31, 0x07, 0x1f, 0x78, 0x02, 0x71, 0xf4, 0xed, + 0xf9, 0xd7, 0xd0, 0xf2, 0x7c, 0x52, 0xf8, 0x70, + 0x3c, 0x0f, 0xa7, 0x69, 0x70, 0xc1, 0x73, 0x1d, + 0xb9, 0xcc, 0x49, 0x6b, 0xe4, 0x19, 0x64, 0xb0, + 0x6c, 0x1c, 0x48, 0x4b, 0x1e, 0x76, 0xe7, 0x20, + 0x82, 0x4f, 0xe2, 0x08, 0xa0, 0x0f, 0x2f, 0xd5, + 0x3e, 0x14, 0x5c, 0x5b, 0xf8, 0x42, 0x1f, 0x10, + 0x68, 0x77, 0x4d, 0xad, 0xad, 0xb4, 0x8e, 0x9a, + 0x9d, 0xa7, 0x92, 0x60, 0x7b, 0x66, 0x4f, 0xbe, + 0x98, 0xce, 0x5b, 0x6e, 0x0a, 0xb1, 0x1c, 0xf4, + 0x20, 0x11, 0x92, 0x19, 0xe1, 0xcb, 0xbf, 0x0e, + 0xea, 0x7a, 0x3c, 0x13, 0x5e, 0xe9, 0x5a, 0x6d, + 0xa4, 0x36, 0x33, 0x79, 0x77, 0xd0, 0x20, 0x3b, + 0x9a, 0x39, 0x38, 0x8e, 0xe5, 0x19, 0xce, 0xf7, + 0x31, 0xb7, 0xde, 0x8c, 0xb1, 0x56, 0x04, 0x1c, + 0x0e, 0x71, 0xeb, 0xd7, 0xda, 0xff, 0x00, 0x8b, + 0xf4, 0xdf, 0x86, 0x3e, 0x21, 0xd7, 0xac, 0xef, + 0xb4, 0x4d, 0x4a, 0x29, 0xd8, 0x49, 0x6a, 0x74, + 0xb4, 0x79, 0x16, 0xd8, 0x3b, 0x13, 0x2b, 0x9d, + 0xdc, 0x9c, 0x67, 0x76, 0xd2, 0x3e, 0x52, 0x4e, + 0x78, 0x18, 0x1f, 0x33, 0x78, 0x7f, 0x57, 0x9f, + 0x43, 0xd6, 0xad, 0x75, 0x2b, 0x75, 0x49, 0x24, + 0x85, 0xf2, 0x63, 0x91, 0x41, 0x59, 0x14, 0xf0, + 0xc8, 0x47, 0xa1, 0x19, 0x1e, 0xa3, 0xaf, 0x04, + 0x03, 0x40, 0x1d, 0xcc, 0xda, 0x9e, 0x95, 0x6c, + 0xba, 0x96, 0x8f, 0x2c, 0x36, 0xda, 0x94, 0x37, + 0x72, 0x24, 0x11, 0x45, 0xa5, 0xa8, 0x13, 0x22, + 0x99, 0x10, 0xb1, 0x59, 0x52, 0x35, 0x56, 0xdc, + 0xc8, 0xac, 0x13, 0x0e, 0x01, 0xe0, 0x63, 0x93, + 0x57, 0x6e, 0x75, 0x6d, 0x6f, 0x54, 0xb6, 0xbb, + 0xb8, 0x96, 0xdb, 0x4d, 0xb6, 0xb4, 0xb1, 0x85, + 0x76, 0xbe, 0xa0, 0x44, 0xd7, 0x51, 0xa8, 0xc0, + 0x76, 0x0a, 0x83, 0x79, 0x56, 0x66, 0x04, 0xee, + 0x52, 0x81, 0x8f, 0x51, 0xc9, 0xa8, 0xee, 0x7c, + 0x59, 0xa0, 0x68, 0x6b, 0x6e, 0xba, 0x4d, 0x9d, + 0x9d, 0xe5, 0xb8, 0x5c, 0xc7, 0xe5, 0x86, 0x82, + 0xe9, 0x22, 0x7f, 0x9d, 0x55, 0xe5, 0x4f, 0x94, + 0xcb, 0x1b, 0x71, 0x96, 0x0d, 0xca, 0xa3, 0x0c, + 0x10, 0x49, 0xe6, 0x6e, 0xbc, 0x6f, 0x75, 0xba, + 0xd6, 0x4b, 0x2b, 0x78, 0x62, 0xb9, 0x80, 0xbf, + 0xef, 0xe4, 0x8e, 0x22, 0x64, 0x56, 0x42, 0x8c, + 0x85, 0x55, 0x15, 0x76, 0x10, 0x49, 0x28, 0x77, + 0x0c, 0xfa, 0x8c, 0xe4, 0x03, 0xa6, 0xd5, 0x3c, + 0x0b, 0x2d, 0xfd, 0xc5, 0xf5, 0xf5, 0xd6, 0xa8, + 0x75, 0x4d, 0x4a, 0xe1, 0x5a, 0xe9, 0x67, 0x0a, + 0x91, 0xc0, 0xc0, 0x05, 0x70, 0xef, 0xb4, 0x92, + 0x22, 0x90, 0x16, 0x55, 0x73, 0xe5, 0xe1, 0x97, + 0x04, 0x63, 0x90, 0x96, 0xfa, 0xd7, 0x86, 0x74, + 0x14, 0x49, 0xc6, 0x99, 0x6f, 0x0e, 0xa0, 0x96, + 0xae, 0xab, 0x14, 0x52, 0x19, 0x7c, 0xc1, 0x20, + 0x27, 0xcb, 0x97, 0xa8, 0xca, 0xe1, 0x97, 0x78, + 0x65, 0x70, 0xac, 0x8d, 0xc9, 0xc8, 0x5e, 0x47, + 0x49, 0xf0, 0xff, 0x00, 0x8a, 0x3c, 0x55, 0x1d, + 0xb4, 0x3a, 0x7d, 0x8d, 0xf5, 0xe5, 0xbc, 0x2a, + 0xc9, 0x09, 0x3c, 0x43, 0x12, 0x93, 0xb8, 0x80, + 0xc7, 0xe5, 0x03, 0x24, 0x9e, 0xa0, 0x66, 0xbb, + 0xad, 0x1b, 0xe0, 0xc3, 0x86, 0x0f, 0xe2, 0x2d, + 0x6a, 0x08, 0x14, 0x00, 0x5a, 0xde, 0xc5, 0x4c, + 0xf2, 0x7d, 0x0b, 0x7d, 0xd5, 0xfa, 0xf3, 0x45, + 0xc0, 0xe6, 0x35, 0xef, 0x1a, 0xdb, 0x5c, 0x5f, + 0x7d, 0xa3, 0x4f, 0xb2, 0x95, 0xe6, 0x08, 0xd1, + 0x35, 0xcd, 0xcb, 0x2a, 0xb4, 0xea, 0x5b, 0x87, + 0x90, 0x46, 0x01, 0x32, 0x80, 0x14, 0x17, 0xde, + 0x72, 0xca, 0x1c, 0x05, 0x3c, 0x8a, 0x1a, 0x75, + 0x87, 0x8b, 0xfc, 0x5f, 0x24, 0xff, 0x00, 0x62, + 0x87, 0x54, 0xd4, 0x85, 0xd1, 0x44, 0x9a, 0x4c, + 0xb1, 0x49, 0x76, 0x67, 0x6e, 0xf7, 0x3f, 0x29, + 0x23, 0x27, 0x05, 0x89, 0x23, 0xf2, 0xaf, 0x68, + 0xb3, 0xf0, 0xf7, 0x81, 0xbc, 0x22, 0xb1, 0xbb, + 0xd9, 0xda, 0x3c, 0xed, 0xd2, 0x7d, 0x52, 0x41, + 0x2b, 0x9c, 0x77, 0x54, 0xfb, 0x99, 0xf6, 0x1c, + 0xf6, 0xab, 0x77, 0x7e, 0x35, 0xb8, 0xb8, 0x53, + 0x1e, 0x99, 0xa7, 0xdc, 0xcd, 0x0a, 0x0d, 0xaa, + 0x6e, 0x08, 0xb5, 0x84, 0x63, 0xd1, 0x48, 0xdc, + 0x47, 0x1d, 0x36, 0x91, 0xf5, 0xeb, 0x59, 0x4a, + 0xb4, 0x63, 0xbb, 0x3a, 0x69, 0x61, 0x2b, 0x56, + 0xf8, 0x22, 0x70, 0x7a, 0x07, 0xc0, 0xfb, 0xe9, + 0x19, 0x5b, 0x5e, 0xd5, 0x6d, 0xad, 0x10, 0x0d, + 0xcd, 0x05, 0x9a, 0x9b, 0x89, 0x7e, 0x84, 0x8f, + 0x94, 0x7d, 0x72, 0x45, 0x7a, 0x7f, 0x87, 0x74, + 0x8d, 0x03, 0xc0, 0xfa, 0x2d, 0xdd, 0xbe, 0x9c, + 0x66, 0x78, 0xee, 0x80, 0x79, 0x3e, 0xd7, 0x71, + 0xb8, 0xc8, 0x47, 0x00, 0x85, 0x1f, 0x2a, 0x9e, + 0x47, 0xa1, 0xe8, 0x09, 0xe9, 0x58, 0x24, 0xf8, + 0x9e, 0xf5, 0x1e, 0x2b, 0x8d, 0x46, 0x4b, 0x3b, + 0x76, 0x3c, 0xad, 0x98, 0xfb, 0x3a, 0x10, 0x7b, + 0xee, 0x6c, 0xb9, 0xe3, 0x1c, 0x00, 0x33, 0xcd, + 0x5c, 0xb0, 0xd3, 0x6c, 0xad, 0x21, 0x92, 0x10, + 0x5f, 0xcb, 0x94, 0x83, 0x2e, 0xc6, 0x24, 0xb6, + 0x3b, 0x97, 0x6c, 0xb1, 0xfa, 0x60, 0x7f, 0x2a, + 0xcd, 0x55, 0x9d, 0x4f, 0xe1, 0xc4, 0xdd, 0xe1, + 0x68, 0xd0, 0xd6, 0xbd, 0x45, 0x7e, 0xcb, 0x56, + 0x71, 0x9f, 0x0e, 0xbc, 0x63, 0xae, 0x78, 0x28, + 0xea, 0x76, 0x5a, 0x8d, 0xb1, 0x9a, 0x19, 0x8b, + 0x4d, 0x63, 0x6a, 0x24, 0x2c, 0x60, 0x98, 0xb0, + 0xca, 0x30, 0x5e, 0x02, 0x10, 0xcc, 0x70, 0x70, + 0x41, 0x53, 0x80, 0x32, 0x6b, 0xdd, 0xbc, 0x03, + 0xae, 0xeb, 0x9a, 0xb2, 0x44, 0xfa, 0xae, 0x98, + 0xd0, 0xa4, 0x88, 0x59, 0xe5, 0x0b, 0xb1, 0x03, + 0x67, 0x23, 0x0a, 0xdc, 0xf4, 0xf7, 0x35, 0x7f, + 0xc2, 0x7a, 0x1e, 0x83, 0x14, 0x2b, 0x77, 0xa7, + 0xd8, 0xc3, 0xf6, 0x86, 0x1f, 0x34, 0xac, 0x37, + 0x3e, 0x7e, 0xa7, 0x9a, 0xea, 0xb0, 0x3b, 0x56, + 0x91, 0x8c, 0xfa, 0xe8, 0x63, 0x52, 0xa5, 0x0d, + 0x7d, 0x9c, 0x5b, 0xbf, 0x7f, 0xf2, 0xff, 0x00, + 0x82, 0x06, 0x8a, 0x5a, 0x2b, 0x53, 0x94, 0x6e, + 0x28, 0xc5, 0x3b, 0x14, 0x62, 0x80, 0x12, 0x9b, + 0x22, 0x09, 0x11, 0x95, 0xba, 0x11, 0x8a, 0x7e, + 0x28, 0xa0, 0x0f, 0x24, 0xf1, 0x56, 0x9e, 0x6c, + 0x35, 0x37, 0x00, 0x10, 0x8d, 0x92, 0xb5, 0xe1, + 0x7f, 0x12, 0x7c, 0x2b, 0x65, 0x2e, 0xa1, 0xe7, + 0x5e, 0xdc, 0x4d, 0x05, 0xa4, 0x82, 0x49, 0x63, + 0x2a, 0x38, 0x12, 0x63, 0x94, 0xe0, 0x64, 0x02, + 0x79, 0xff, 0x00, 0x81, 0x63, 0x80, 0x39, 0xfa, + 0xa7, 0xc6, 0xfa, 0x68, 0xbc, 0xd3, 0xcc, 0xc8, + 0x3f, 0x79, 0x1f, 0x3c, 0x57, 0x90, 0xeb, 0x5a, + 0x6c, 0x5a, 0x95, 0x99, 0x82, 0x74, 0xce, 0xc7, + 0x12, 0x27, 0xca, 0x0f, 0xcc, 0xbd, 0xb0, 0x78, + 0x23, 0xb7, 0x42, 0x3d, 0x69, 0x55, 0x52, 0x94, + 0x2f, 0x0d, 0xd1, 0x78, 0x3a, 0x94, 0xe9, 0x56, + 0xb5, 0x55, 0x78, 0xbd, 0xff, 0x00, 0x47, 0xf2, + 0xfc, 0x8e, 0x5f, 0xe1, 0x3f, 0xc3, 0x2d, 0x0f, + 0x57, 0x1f, 0x6f, 0x86, 0xf1, 0xac, 0x63, 0x2a, + 0x80, 0xc4, 0xf1, 0x9f, 0x37, 0x3b, 0x41, 0x60, + 0x59, 0xb8, 0x2a, 0xd9, 0x04, 0x60, 0x72, 0x39, + 0xeb, 0x9c, 0x71, 0x3f, 0x19, 0x7c, 0x18, 0x9e, + 0x14, 0xd7, 0x8c, 0x36, 0xc8, 0x8d, 0x61, 0x71, + 0x97, 0x89, 0xf7, 0x33, 0x16, 0x0b, 0x8c, 0xee, + 0x0b, 0x8e, 0x84, 0x92, 0x3b, 0x63, 0xf4, 0xe9, + 0x1f, 0x54, 0xd5, 0x34, 0xb9, 0xaf, 0xe4, 0xd1, + 0xb5, 0x08, 0x13, 0x51, 0xd4, 0x8e, 0xd9, 0x23, + 0x9c, 0x00, 0xb6, 0xfb, 0x48, 0xc3, 0x1c, 0xc7, + 0xb3, 0x70, 0xf9, 0x86, 0x30, 0x00, 0x1f, 0x98, + 0xe3, 0xce, 0xa5, 0xae, 0x5f, 0xc3, 0x27, 0xf6, + 0xc5, 0xe3, 0xea, 0x52, 0x33, 0x9c, 0x3d, 0xcb, + 0x99, 0x02, 0xe4, 0x82, 0x76, 0x03, 0xf7, 0x41, + 0x00, 0x03, 0xd3, 0x23, 0xd3, 0x8c, 0x73, 0x7b, + 0x68, 0x5b, 0xe2, 0x3d, 0x68, 0xe0, 0xf1, 0x2e, + 0xa3, 0x5c, 0x96, 0x5f, 0xd7, 0xde, 0x79, 0xc4, + 0x89, 0x26, 0x97, 0xa8, 0x2c, 0x81, 0x19, 0x51, + 0xb9, 0xc1, 0x05, 0x78, 0xc8, 0xfc, 0x7d, 0xc7, + 0x39, 0xc5, 0x69, 0xcb, 0x75, 0x3d, 0xbc, 0xd6, + 0xd7, 0x56, 0x50, 0x47, 0x66, 0x52, 0x3f, 0xb6, + 0x5b, 0xb0, 0x93, 0x7b, 0x38, 0xf3, 0x36, 0xf3, + 0x82, 0x70, 0x46, 0x0f, 0x07, 0x03, 0x00, 0xf0, + 0x38, 0x15, 0xd4, 0x6b, 0xde, 0x0f, 0x9b, 0xfb, + 0x38, 0xcb, 0x16, 0xc9, 0x21, 0x91, 0x7c, 0xd4, + 0x78, 0xe3, 0x8e, 0x35, 0x5f, 0x67, 0x6d, 0xc4, + 0x86, 0x1c, 0xfc, 0xbc, 0x9c, 0x1f, 0xcb, 0x36, + 0xcb, 0xc3, 0xfa, 0xe4, 0x1f, 0x65, 0xbc, 0x9e, + 0xc6, 0x78, 0x6c, 0x23, 0x85, 0x62, 0x32, 0x48, + 0xbb, 0x73, 0x19, 0x6e, 0x76, 0x8e, 0x4f, 0x3c, + 0xf3, 0xc0, 0xcf, 0x3e, 0xb5, 0xb7, 0xb4, 0x52, + 0x5a, 0x33, 0x92, 0x78, 0x59, 0x46, 0x76, 0x69, + 0x9d, 0xc7, 0x8b, 0x16, 0x0f, 0x1b, 0x78, 0x3e, + 0xd7, 0xc5, 0xfa, 0x6a, 0x8f, 0xb7, 0x5b, 0x28, + 0x83, 0x53, 0x88, 0x0e, 0x70, 0x06, 0x03, 0x9e, + 0xfe, 0xc4, 0xfa, 0x60, 0xd7, 0x9c, 0xd7, 0x63, + 0xf0, 0x9b, 0x59, 0x8f, 0xc3, 0xde, 0x33, 0xb8, + 0xd3, 0xef, 0x21, 0xff, 0x00, 0x89, 0x4e, 0xa8, + 0xbe, 0x4b, 0x47, 0x21, 0x2c, 0x39, 0xcf, 0xca, + 0x4f, 0x42, 0x08, 0x3b, 0x73, 0x8e, 0xb8, 0xae, + 0xdd, 0x7e, 0x11, 0xe8, 0xf6, 0xf7, 0xf7, 0x53, + 0x5f, 0x6b, 0x92, 0xbe, 0x9e, 0x1f, 0x74, 0x50, + 0x5a, 0xc5, 0x99, 0x04, 0x6d, 0xca, 0xef, 0x76, + 0xe0, 0x1c, 0x1f, 0x43, 0x9e, 0xb5, 0x4a, 0x48, + 0xe5, 0xa9, 0x4e, 0x54, 0xe5, 0xca, 0xd1, 0xe3, + 0x49, 0x2c, 0x89, 0x1b, 0xa2, 0xc8, 0xeb, 0x1b, + 0xfd, 0xf5, 0x04, 0x80, 0x71, 0xea, 0x3a, 0x56, + 0xee, 0x81, 0xe0, 0xbf, 0x10, 0xeb, 0xfb, 0x4e, + 0x97, 0xa5, 0x5c, 0xcb, 0x13, 0x73, 0xe7, 0x32, + 0x84, 0x8f, 0xeb, 0xb9, 0xb0, 0xb8, 0xfc, 0x6b, + 0xda, 0x21, 0xb3, 0xf0, 0x97, 0x84, 0xed, 0x44, + 0xd6, 0x96, 0x1a, 0x5c, 0x32, 0x0e, 0x52, 0x6b, + 0xf9, 0x96, 0xe2, 0x79, 0x08, 0xee, 0x8a, 0x78, + 0xfe, 0x43, 0xeb, 0x55, 0xb5, 0x1f, 0x1c, 0xdf, + 0x5e, 0xa9, 0x36, 0x96, 0x77, 0x12, 0x80, 0x71, + 0xba, 0xf1, 0xfc, 0xa8, 0xd7, 0xb7, 0xca, 0x9d, + 0x4f, 0xd3, 0x61, 0xfe, 0xb5, 0x13, 0xad, 0x08, + 0x6e, 0xcd, 0xa8, 0xe0, 0xeb, 0xd7, 0x7e, 0xe4, + 0x4e, 0x7f, 0x46, 0xf8, 0x3b, 0x1c, 0x6c, 0x5f, + 0xc4, 0x3a, 0xdc, 0x60, 0x26, 0x37, 0x5b, 0xe9, + 0xc8, 0x66, 0x61, 0xf5, 0x73, 0xf2, 0xaf, 0xeb, + 0x5d, 0x64, 0x1a, 0x67, 0x82, 0x3c, 0x21, 0x1a, + 0xb0, 0xb0, 0xb2, 0x13, 0x8c, 0x1f, 0x3b, 0x50, + 0x71, 0x71, 0x29, 0xf7, 0x08, 0x7e, 0x50, 0x7e, + 0x9c, 0xd6, 0x6a, 0x59, 0x78, 0x83, 0x56, 0x88, + 0xc7, 0x77, 0x77, 0x2c, 0x36, 0xe7, 0x2d, 0x18, + 0xb7, 0x1f, 0x66, 0x8c, 0x67, 0x9c, 0x86, 0x6c, + 0xb9, 0x1d, 0x7a, 0x63, 0x3e, 0xfd, 0x2b, 0x42, + 0xc3, 0xc3, 0x16, 0x36, 0xae, 0x27, 0x72, 0x0d, + 0xd6, 0x30, 0xcf, 0x10, 0x3b, 0x98, 0xf2, 0x32, + 0xd2, 0x3e, 0x58, 0x9e, 0x4f, 0x18, 0x02, 0xb3, + 0x55, 0x67, 0x3f, 0xe1, 0xc4, 0xe8, 0x78, 0x3a, + 0x14, 0x3f, 0xde, 0x2a, 0x2f, 0x45, 0xab, 0x26, + 0xbb, 0xf1, 0xc5, 0xd5, 0xe3, 0x79, 0x76, 0x36, + 0x97, 0x12, 0x44, 0x46, 0x23, 0x96, 0xed, 0xbe, + 0xcf, 0x00, 0xc7, 0x19, 0x0b, 0x8c, 0x91, 0xed, + 0xb0, 0xe7, 0xa0, 0xe7, 0x9a, 0xa4, 0x2d, 0xfc, + 0x41, 0xaa, 0x47, 0x1f, 0xdb, 0x6e, 0xe4, 0xb5, + 0x8b, 0xbc, 0x56, 0xca, 0x2d, 0xd0, 0x8f, 0x5d, + 0xe7, 0x2e, 0x7f, 0x00, 0x2b, 0x7e, 0xde, 0x18, + 0x6d, 0x48, 0x36, 0xb0, 0xc7, 0x13, 0x03, 0xf7, + 0xc0, 0xcb, 0x13, 0xea, 0x58, 0xe4, 0xfe, 0xb8, + 0xa9, 0x76, 0xbc, 0x8c, 0x4f, 0x2c, 0x4f, 0xea, + 0x6a, 0x96, 0x1a, 0xa4, 0xff, 0x00, 0x89, 0x2b, + 0x7a, 0x19, 0x4b, 0x31, 0xc3, 0xd1, 0xd3, 0x0f, + 0x4e, 0xfe, 0x6f, 0xfc, 0x8c, 0x8d, 0x3b, 0x40, + 0xb1, 0xb2, 0x63, 0x21, 0x01, 0xe6, 0xdd, 0xbf, + 0x7a, 0x81, 0xbf, 0x3e, 0xf2, 0xb6, 0x5c, 0x8e, + 0x3d, 0xbd, 0xb0, 0x6b, 0x5d, 0x59, 0x63, 0x60, + 0x61, 0x8d, 0x63, 0x6e, 0xbb, 0x86, 0x4b, 0x13, + 0xeb, 0xb8, 0xf3, 0x9a, 0xbf, 0x67, 0xa3, 0xde, + 0xdd, 0x1f, 0xdd, 0x40, 0xd8, 0x3d, 0xf1, 0x5d, + 0x05, 0x87, 0x82, 0xa7, 0x90, 0x86, 0xb8, 0x70, + 0x83, 0xb8, 0xad, 0xa1, 0x42, 0x95, 0x3d, 0x91, + 0xc7, 0x5b, 0x1d, 0x89, 0xc4, 0x7c, 0x52, 0xd3, + 0xb2, 0xd0, 0xe3, 0xce, 0x58, 0xe4, 0x92, 0x49, + 0x3c, 0xd4, 0xf6, 0xf6, 0x57, 0x17, 0x04, 0x08, + 0xa2, 0x66, 0x3f, 0x4a, 0xf4, 0xbb, 0x1f, 0x09, + 0xd8, 0xdb, 0x60, 0xba, 0xf9, 0x8d, 0xea, 0x6b, + 0x6e, 0x0b, 0x3b, 0x78, 0x17, 0x11, 0x44, 0x8a, + 0x3e, 0x95, 0xab, 0x99, 0xcc, 0xa9, 0x37, 0xb9, + 0xc9, 0x78, 0x37, 0x4d, 0xd4, 0xac, 0xa6, 0xcc, + 0xca, 0x56, 0x13, 0xd4, 0x1a, 0xed, 0x45, 0x02, + 0x8a, 0x86, 0xee, 0x6d, 0x18, 0xf2, 0xab, 0x09, + 0x4b, 0x4d, 0xcd, 0x28, 0x3e, 0xb4, 0x86, 0x2d, + 0x14, 0x64, 0x1a, 0x28, 0x18, 0x51, 0x45, 0x14, + 0x00, 0xc9, 0x51, 0x65, 0x8d, 0x91, 0x87, 0x04, + 0x60, 0xd7, 0x91, 0xf8, 0x9b, 0x4f, 0x36, 0x1a, + 0x94, 0x89, 0xb4, 0x85, 0x62, 0x4a, 0xfa, 0x57, + 0xaf, 0xd7, 0x29, 0xe3, 0xbd, 0x33, 0xed, 0x36, + 0x3e, 0x7c, 0x6b, 0xf3, 0xa7, 0x5a, 0xa8, 0xbb, + 0x33, 0x3a, 0x91, 0xba, 0x3c, 0x1b, 0xc4, 0x96, + 0x70, 0x58, 0x6a, 0xd6, 0xda, 0x9c, 0xb0, 0x99, + 0x2d, 0x5d, 0xff, 0x00, 0x7a, 0xa3, 0x1c, 0x30, + 0x1c, 0xe3, 0x3c, 0x67, 0x18, 0x3e, 0x99, 0x1e, + 0x95, 0xd3, 0xd9, 0xe8, 0xd6, 0x5e, 0x34, 0x82, + 0x1b, 0x2f, 0xb4, 0xa5, 0xb4, 0xb0, 0xba, 0x3e, + 0xf9, 0x53, 0x74, 0x8a, 0x8c, 0x1b, 0x00, 0x10, + 0x4e, 0x41, 0x23, 0x8e, 0x7b, 0x74, 0xe4, 0x52, + 0x6a, 0x56, 0x51, 0x6a, 0x16, 0x33, 0xd9, 0xcf, + 0xc2, 0xca, 0xb8, 0xdd, 0x9f, 0xb8, 0xc3, 0xa3, + 0x7e, 0x7f, 0xa7, 0x15, 0xca, 0x7f, 0x69, 0x4d, + 0xa3, 0xeb, 0xe3, 0x57, 0x26, 0x34, 0xb7, 0x82, + 0x36, 0xb1, 0xfe, 0xcc, 0x50, 0xa5, 0xd9, 0x47, + 0xf7, 0x63, 0x2c, 0x14, 0x0d, 0xdf, 0x31, 0xe7, + 0x2d, 0xdb, 0xb9, 0xae, 0x09, 0xe1, 0xe1, 0x0a, + 0x8f, 0x9b, 0x66, 0x7b, 0xb4, 0x71, 0xb5, 0x71, + 0x14, 0x21, 0x2a, 0x77, 0xf6, 0x94, 0xf4, 0xd3, + 0xb7, 0x4d, 0x0e, 0x97, 0xc6, 0x7e, 0x05, 0xb6, + 0xd1, 0x92, 0xd6, 0xca, 0x6b, 0xc6, 0x3a, 0x54, + 0x92, 0x2a, 0x89, 0x1f, 0x0c, 0xe9, 0x21, 0xdd, + 0xc0, 0xf4, 0x5c, 0x67, 0xa6, 0x79, 0x3e, 0xf5, + 0xcb, 0xc1, 0x16, 0x9f, 0x6d, 0x1d, 0xcb, 0xbe, + 0xcb, 0x8b, 0x81, 0x2f, 0x94, 0x92, 0x5d, 0x6e, + 0x6c, 0x06, 0x40, 0x07, 0xee, 0xf2, 0x3e, 0x71, + 0x8c, 0x74, 0xc1, 0xfa, 0x54, 0x9a, 0x4e, 0xab, + 0xe2, 0xed, 0x7d, 0xe7, 0x6d, 0x66, 0xd5, 0x5a, + 0xc9, 0xd0, 0x2c, 0x56, 0xd3, 0xa0, 0x82, 0x28, + 0xb9, 0xce, 0xe5, 0xda, 0x43, 0x6e, 0x18, 0x18, + 0x27, 0x71, 0xfa, 0x0e, 0x0e, 0xa6, 0x8f, 0xe1, + 0xf1, 0x66, 0xf2, 0xcb, 0x77, 0x2a, 0x4f, 0x24, + 0xa7, 0x73, 0x2e, 0xcd, 0xc0, 0x13, 0x8e, 0x41, + 0x6e, 0xa7, 0x20, 0x1e, 0x99, 0xc8, 0xeb, 0x50, + 0xf0, 0xfc, 0xd3, 0xbc, 0x11, 0xd7, 0x1c, 0xc5, + 0xd3, 0xa1, 0xcb, 0x89, 0x96, 0xbd, 0xba, 0xfd, + 0xcb, 0x5f, 0x5b, 0x9c, 0x0f, 0x89, 0x34, 0x8b, + 0x2b, 0xb8, 0x95, 0xec, 0xcc, 0xab, 0x7a, 0xb2, + 0x36, 0xf9, 0xb6, 0x15, 0x12, 0x83, 0xce, 0x40, + 0xe9, 0x8e, 0x48, 0xe3, 0x1e, 0xfc, 0xd7, 0x5b, + 0x1d, 0x86, 0xa7, 0x7d, 0x74, 0x24, 0x96, 0x59, + 0xe6, 0xb4, 0x39, 0x31, 0xc3, 0x22, 0xf9, 0x09, + 0x18, 0x3c, 0xf5, 0x24, 0xb1, 0x3d, 0x33, 0x8c, + 0x03, 0x5d, 0x45, 0xb5, 0x84, 0x10, 0xc9, 0xbe, + 0x08, 0x14, 0x48, 0x49, 0x3b, 0xb1, 0x92, 0x49, + 0xef, 0xcf, 0x23, 0xad, 0x6b, 0x5a, 0xe9, 0x57, + 0x97, 0x4d, 0xfb, 0xb8, 0x5c, 0xe7, 0xbe, 0x0d, + 0x6f, 0x1c, 0x24, 0xdf, 0xc7, 0x2b, 0x2e, 0xc8, + 0xe1, 0xaf, 0x9c, 0x51, 0xb5, 0xa8, 0xd3, 0xbb, + 0xee, 0xff, 0x00, 0xc9, 0x1c, 0x5e, 0x9b, 0xe1, + 0x4b, 0x7b, 0x79, 0x16, 0x59, 0x64, 0x55, 0x99, + 0x5f, 0x78, 0x6b, 0x74, 0x0a, 0xf9, 0x1c, 0xf3, + 0x21, 0x1b, 0x88, 0x1d, 0xb1, 0x80, 0x3b, 0x62, + 0xb7, 0xed, 0xad, 0x2d, 0xad, 0x58, 0x1b, 0x78, + 0x11, 0x64, 0xc9, 0xcc, 0x87, 0xe6, 0x72, 0x4f, + 0x53, 0xb8, 0xf3, 0x9f, 0xca, 0xbb, 0x3b, 0x1f, + 0x05, 0xdd, 0x4b, 0x83, 0x3b, 0x04, 0x07, 0xad, + 0x74, 0x36, 0x3e, 0x0f, 0xb2, 0x83, 0x06, 0x5c, + 0xc8, 0x7d, 0xeb, 0x78, 0x50, 0xa5, 0x4f, 0x65, + 0xa9, 0xe6, 0xd6, 0xc7, 0x62, 0xb1, 0x1a, 0x4a, + 0x56, 0x5d, 0x96, 0x9f, 0x91, 0xe6, 0xf1, 0xc1, + 0x3d, 0xc3, 0xe5, 0x51, 0xdd, 0x89, 0xe4, 0xf5, + 0xc9, 0xf7, 0xad, 0x8b, 0x1f, 0x0c, 0x5f, 0xdc, + 0x90, 0x4c, 0x45, 0x14, 0xfa, 0xd7, 0xa6, 0xdb, + 0x69, 0xf6, 0xb6, 0xeb, 0x88, 0xa1, 0x45, 0xfc, + 0x2a, 0xd6, 0x00, 0x1c, 0x56, 0xae, 0x7d, 0x8e, + 0x55, 0x4b, 0xb9, 0xc4, 0xd8, 0xf8, 0x21, 0x06, + 0x0d, 0xd4, 0x99, 0xf5, 0x02, 0xba, 0x1b, 0x2d, + 0x02, 0xc2, 0xd0, 0x0d, 0x90, 0xa9, 0x23, 0xb9, + 0xad, 0x6a, 0x2a, 0x79, 0x99, 0xa2, 0x82, 0x43, + 0x12, 0x34, 0x8c, 0x61, 0x14, 0x28, 0xf6, 0x14, + 0xfa, 0x28, 0xa4, 0x50, 0x51, 0x47, 0x4a, 0x46, + 0x60, 0x28, 0x01, 0x49, 0xc5, 0x31, 0x98, 0x74, + 0xa8, 0xd9, 0xfd, 0xe9, 0x9b, 0xbd, 0xe9, 0xa4, + 0x4d, 0xc9, 0xf3, 0x4d, 0xdd, 0x4d, 0xcd, 0x34, + 0x9a, 0x61, 0x72, 0x4d, 0xd4, 0xa1, 0xf9, 0xe6, + 0xa0, 0x2c, 0x7d, 0x69, 0xa5, 0x8d, 0x16, 0x13, + 0x65, 0xc0, 0xc0, 0xf4, 0xa5, 0xaa, 0x8a, 0xc7, + 0xd6, 0xa6, 0x46, 0x34, 0xac, 0x34, 0xc9, 0x6a, + 0x2b, 0x98, 0x96, 0x78, 0x5e, 0x36, 0x00, 0x86, + 0x18, 0xa9, 0x01, 0xa5, 0xa4, 0x51, 0xe3, 0x7a, + 0xfd, 0x8b, 0x58, 0xea, 0x32, 0x46, 0x54, 0xed, + 0xc9, 0x23, 0x8e, 0xd5, 0x9f, 0x1d, 0x91, 0x92, + 0xe3, 0xce, 0x8a, 0xdd, 0x7c, 0xe3, 0x8f, 0xde, + 0x04, 0x1b, 0xb2, 0x38, 0xeb, 0xd7, 0xb5, 0x7a, + 0xee, 0xa9, 0xa5, 0x5a, 0x5d, 0xdc, 0xa3, 0xcf, + 0x16, 0xe6, 0xf5, 0xab, 0x76, 0xba, 0x75, 0xac, + 0x0a, 0x3c, 0xa8, 0x50, 0x7e, 0x15, 0x4f, 0x96, + 0x56, 0xba, 0x33, 0x8a, 0x9c, 0x5b, 0xe5, 0x76, + 0xb9, 0xe6, 0x36, 0x5e, 0x1a, 0xd4, 0x2e, 0xc8, + 0x3e, 0x59, 0x50, 0x79, 0xcb, 0x57, 0x43, 0x63, + 0xe0, 0x81, 0xc1, 0xba, 0x93, 0x9f, 0x41, 0x5d, + 0xc8, 0x00, 0x0e, 0x06, 0x28, 0xa3, 0x9d, 0x82, + 0xa4, 0x91, 0x8d, 0x65, 0xe1, 0xdd, 0x3e, 0xd7, + 0x1b, 0x61, 0x0c, 0x47, 0x73, 0x5a, 0xb1, 0x43, + 0x1c, 0x63, 0x08, 0x8a, 0xa3, 0xd8, 0x54, 0x94, + 0x54, 0xdc, 0xb4, 0x92, 0xd8, 0x28, 0xa2, 0x8a, + 0x06, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x49, + 0x9a, 0x00, 0x5e, 0x94, 0x85, 0x80, 0xa8, 0xe4, + 0x62, 0x05, 0x56, 0x91, 0xcf, 0x3c, 0xd3, 0xb0, + 0x9b, 0x2c, 0x3c, 0xa0, 0x71, 0xc5, 0x42, 0xd2, + 0x75, 0x35, 0x5d, 0x98, 0xd4, 0x4e, 0xe7, 0xd6, + 0xaa, 0xc4, 0x36, 0x58, 0x69, 0x7d, 0xea, 0x36, + 0x98, 0x55, 0x47, 0x76, 0xcf, 0x5a, 0xaf, 0x23, + 0xb7, 0x3c, 0xd3, 0x48, 0x57, 0x3f, 0xff, 0xd9, + +}; + +static const uint8_t data_favicon_ico[] = +{ + /* /favicon.ico */ + 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, + 0x2e, 0x69, 0x63, 0x6f, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x10, 0x10, + 0x10, 0x00, 0x01, 0x00, 0x04, 0x00, 0x28, 0x01, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x68, 0x05, + 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x79, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x99, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x79, 0x99, 0x99, 0x70, 0x00, 0x00, 0x07, + 0x77, 0x99, 0x97, 0x79, 0x97, 0x00, 0x00, 0x09, + 0x99, 0x99, 0x7f, 0xf7, 0x99, 0x70, 0x00, 0x79, + 0x99, 0x99, 0xf9, 0x97, 0x99, 0x97, 0x07, 0x99, + 0x99, 0x99, 0xf9, 0x9f, 0x99, 0x99, 0x79, 0x99, + 0x99, 0x99, 0xf9, 0x9f, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x97, 0xf9, 0x9f, 0x79, 0x97, 0x00, 0x00, + 0x99, 0x97, 0xf7, 0x9f, 0x79, 0x90, 0x00, 0x00, + 0x99, 0x99, 0x7f, 0xf7, 0x99, 0x70, 0x00, 0x00, + 0x99, 0x99, 0x9f, 0x99, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x99, 0x90, 0x99, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x99, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8f, + 0xfc, 0xfd, 0xff, 0x0f, 0xfc, 0xfd, 0xfe, 0x0f, + 0xfc, 0xfd, 0xfc, 0x07, 0xfc, 0xfd, 0xe0, 0x03, + 0xfc, 0xfd, 0xe0, 0x01, 0xfc, 0xfd, 0xc0, 0x00, + 0xfc, 0xfd, 0x80, 0x00, 0xfc, 0xfd, 0x00, 0x00, + 0xfc, 0xfd, 0x00, 0x00, 0xfc, 0xfd, 0xf0, 0x01, + 0xfc, 0xfd, 0xf0, 0x01, 0xfc, 0xfd, 0xf0, 0x0f, + 0xfc, 0xfd, 0xf0, 0x4f, 0xfc, 0xfd, 0xf0, 0x7f, + 0xfc, 0xfd, 0xf0, 0xff, 0xfc, 0xfd, 0x28, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0xc0, 0xdc, + 0xc0, 0x00, 0xf0, 0xca, 0xa6, 0x00, 0xd4, 0xf0, + 0xff, 0x00, 0xb1, 0xe2, 0xff, 0x00, 0x8e, 0xd4, + 0xff, 0x00, 0x6b, 0xc6, 0xff, 0x00, 0x48, 0xb8, + 0xff, 0x00, 0x25, 0xaa, 0xff, 0x00, 0x00, 0xaa, + 0xff, 0x00, 0x00, 0x92, 0xdc, 0x00, 0x00, 0x7a, + 0xb9, 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0x4a, + 0x73, 0x00, 0x00, 0x32, 0x50, 0x00, 0xd4, 0xe3, + 0xff, 0x00, 0xb1, 0xc7, 0xff, 0x00, 0x8e, 0xab, + 0xff, 0x00, 0x6b, 0x8f, 0xff, 0x00, 0x48, 0x73, + 0xff, 0x00, 0x25, 0x57, 0xff, 0x00, 0x00, 0x55, + 0xff, 0x00, 0x00, 0x49, 0xdc, 0x00, 0x00, 0x3d, + 0xb9, 0x00, 0x00, 0x31, 0x96, 0x00, 0x00, 0x25, + 0x73, 0x00, 0x00, 0x19, 0x50, 0x00, 0xd4, 0xd4, + 0xff, 0x00, 0xb1, 0xb1, 0xff, 0x00, 0x8e, 0x8e, + 0xff, 0x00, 0x6b, 0x6b, 0xff, 0x00, 0x48, 0x48, + 0xff, 0x00, 0x25, 0x25, 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, + 0xb9, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x50, 0x00, 0xe3, 0xd4, + 0xff, 0x00, 0xc7, 0xb1, 0xff, 0x00, 0xab, 0x8e, + 0xff, 0x00, 0x8f, 0x6b, 0xff, 0x00, 0x73, 0x48, + 0xff, 0x00, 0x57, 0x25, 0xff, 0x00, 0x55, 0x00, + 0xff, 0x00, 0x49, 0x00, 0xdc, 0x00, 0x3d, 0x00, + 0xb9, 0x00, 0x31, 0x00, 0x96, 0x00, 0x25, 0x00, + 0x73, 0x00, 0x19, 0x00, 0x50, 0x00, 0xf0, 0xd4, + 0xff, 0x00, 0xe2, 0xb1, 0xff, 0x00, 0xd4, 0x8e, + 0xff, 0x00, 0xc6, 0x6b, 0xff, 0x00, 0xb8, 0x48, + 0xff, 0x00, 0xaa, 0x25, 0xff, 0x00, 0xaa, 0x00, + 0xff, 0x00, 0x92, 0x00, 0xdc, 0x00, 0x7a, 0x00, + 0xb9, 0x00, 0x62, 0x00, 0x96, 0x00, 0x4a, 0x00, + 0x73, 0x00, 0x32, 0x00, 0x50, 0x00, 0xff, 0xd4, + 0xff, 0x00, 0xff, 0xb1, 0xff, 0x00, 0xff, 0x8e, + 0xff, 0x00, 0xff, 0x6b, 0xff, 0x00, 0xff, 0x48, + 0xff, 0x00, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xdc, 0x00, 0xdc, 0x00, 0xb9, 0x00, + 0xb9, 0x00, 0x96, 0x00, 0x96, 0x00, 0x73, 0x00, + 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0xff, 0xd4, + 0xf0, 0x00, 0xff, 0xb1, 0xe2, 0x00, 0xff, 0x8e, + 0xd4, 0x00, 0xff, 0x6b, 0xc6, 0x00, 0xff, 0x48, + 0xb8, 0x00, 0xff, 0x25, 0xaa, 0x00, 0xff, 0x00, + 0xaa, 0x00, 0xdc, 0x00, 0x92, 0x00, 0xb9, 0x00, + 0x7a, 0x00, 0x96, 0x00, 0x62, 0x00, 0x73, 0x00, + 0x4a, 0x00, 0x50, 0x00, 0x32, 0x00, 0xff, 0xd4, + 0xe3, 0x00, 0xff, 0xb1, 0xc7, 0x00, 0xff, 0x8e, + 0xab, 0x00, 0xff, 0x6b, 0x8f, 0x00, 0xff, 0x48, + 0x73, 0x00, 0xff, 0x25, 0x57, 0x00, 0xff, 0x00, + 0x55, 0x00, 0xdc, 0x00, 0x49, 0x00, 0xb9, 0x00, + 0x3d, 0x00, 0x96, 0x00, 0x31, 0x00, 0x73, 0x00, + 0x25, 0x00, 0x50, 0x00, 0x19, 0x00, 0xff, 0xd4, + 0xd4, 0x00, 0xff, 0xb1, 0xb1, 0x00, 0xff, 0x8e, + 0x8e, 0x00, 0xff, 0x6b, 0x6b, 0x00, 0xff, 0x48, + 0x48, 0x00, 0xff, 0x25, 0x25, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xb9, 0x00, + 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xff, 0xe3, + 0xd4, 0x00, 0xff, 0xc7, 0xb1, 0x00, 0xff, 0xab, + 0x8e, 0x00, 0xff, 0x8f, 0x6b, 0x00, 0xff, 0x73, + 0x48, 0x00, 0xff, 0x57, 0x25, 0x00, 0xff, 0x55, + 0x00, 0x00, 0xdc, 0x49, 0x00, 0x00, 0xb9, 0x3d, + 0x00, 0x00, 0x96, 0x31, 0x00, 0x00, 0x73, 0x25, + 0x00, 0x00, 0x50, 0x19, 0x00, 0x00, 0xff, 0xf0, + 0xd4, 0x00, 0xff, 0xe2, 0xb1, 0x00, 0xff, 0xd4, + 0x8e, 0x00, 0xff, 0xc6, 0x6b, 0x00, 0xff, 0xb8, + 0x48, 0x00, 0xff, 0xaa, 0x25, 0x00, 0xff, 0xaa, + 0x00, 0x00, 0xdc, 0x92, 0x00, 0x00, 0xb9, 0x7a, + 0x00, 0x00, 0x96, 0x62, 0x00, 0x00, 0x73, 0x4a, + 0x00, 0x00, 0x50, 0x32, 0x00, 0x00, 0xff, 0xff, + 0xd4, 0x00, 0xff, 0xff, 0xb1, 0x00, 0xff, 0xff, + 0x8e, 0x00, 0xff, 0xff, 0x6b, 0x00, 0xff, 0xff, + 0x48, 0x00, 0xff, 0xff, 0x25, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xdc, 0xdc, 0x00, 0x00, 0xb9, 0xb9, + 0x00, 0x00, 0x96, 0x96, 0x00, 0x00, 0x73, 0x73, + 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, 0xf0, 0xff, + 0xd4, 0x00, 0xe2, 0xff, 0xb1, 0x00, 0xd4, 0xff, + 0x8e, 0x00, 0xc6, 0xff, 0x6b, 0x00, 0xb8, 0xff, + 0x48, 0x00, 0xaa, 0xff, 0x25, 0x00, 0xaa, 0xff, + 0x00, 0x00, 0x92, 0xdc, 0x00, 0x00, 0x7a, 0xb9, + 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0x4a, 0x73, + 0x00, 0x00, 0x32, 0x50, 0x00, 0x00, 0xe3, 0xff, + 0xd4, 0x00, 0xc7, 0xff, 0xb1, 0x00, 0xab, 0xff, + 0x8e, 0x00, 0x8f, 0xff, 0x6b, 0x00, 0x73, 0xff, + 0x48, 0x00, 0x57, 0xff, 0x25, 0x00, 0x55, 0xff, + 0x00, 0x00, 0x49, 0xdc, 0x00, 0x00, 0x3d, 0xb9, + 0x00, 0x00, 0x31, 0x96, 0x00, 0x00, 0x25, 0x73, + 0x00, 0x00, 0x19, 0x50, 0x00, 0x00, 0xd4, 0xff, + 0xd4, 0x00, 0xb1, 0xff, 0xb1, 0x00, 0x8e, 0xff, + 0x8e, 0x00, 0x6b, 0xff, 0x6b, 0x00, 0x48, 0xff, + 0x48, 0x00, 0x25, 0xff, 0x25, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xb9, + 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x73, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0xd4, 0xff, + 0xe3, 0x00, 0xb1, 0xff, 0xc7, 0x00, 0x8e, 0xff, + 0xab, 0x00, 0x6b, 0xff, 0x8f, 0x00, 0x48, 0xff, + 0x73, 0x00, 0x25, 0xff, 0x57, 0x00, 0x00, 0xff, + 0x55, 0x00, 0x00, 0xdc, 0x49, 0x00, 0x00, 0xb9, + 0x3d, 0x00, 0x00, 0x96, 0x31, 0x00, 0x00, 0x73, + 0x25, 0x00, 0x00, 0x50, 0x19, 0x00, 0xd4, 0xff, + 0xf0, 0x00, 0xb1, 0xff, 0xe2, 0x00, 0x8e, 0xff, + 0xd4, 0x00, 0x6b, 0xff, 0xc6, 0x00, 0x48, 0xff, + 0xb8, 0x00, 0x25, 0xff, 0xaa, 0x00, 0x00, 0xff, + 0xaa, 0x00, 0x00, 0xdc, 0x92, 0x00, 0x00, 0xb9, + 0x7a, 0x00, 0x00, 0x96, 0x62, 0x00, 0x00, 0x73, + 0x4a, 0x00, 0x00, 0x50, 0x32, 0x00, 0xd4, 0xff, + 0xff, 0x00, 0xb1, 0xff, 0xff, 0x00, 0x8e, 0xff, + 0xff, 0x00, 0x6b, 0xff, 0xff, 0x00, 0x48, 0xff, + 0xff, 0x00, 0x25, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xdc, 0xdc, 0x00, 0x00, 0xb9, + 0xb9, 0x00, 0x00, 0x96, 0x96, 0x00, 0x00, 0x73, + 0x73, 0x00, 0x00, 0x50, 0x50, 0x00, 0xf2, 0xf2, + 0xf2, 0x00, 0xe6, 0xe6, 0xe6, 0x00, 0xda, 0xda, + 0xda, 0x00, 0xce, 0xce, 0xce, 0x00, 0xc2, 0xc2, + 0xc2, 0x00, 0xb6, 0xb6, 0xb6, 0x00, 0xaa, 0xaa, + 0xaa, 0x00, 0x9e, 0x9e, 0x9e, 0x00, 0x92, 0x92, + 0x92, 0x00, 0x86, 0x86, 0x86, 0x00, 0x7a, 0x7a, + 0x7a, 0x00, 0x6e, 0x6e, 0x6e, 0x00, 0x62, 0x62, + 0x62, 0x00, 0x56, 0x56, 0x56, 0x00, 0x4a, 0x4a, + 0x4a, 0x00, 0x3e, 0x3e, 0x3e, 0x00, 0x32, 0x32, + 0x32, 0x00, 0x26, 0x26, 0x26, 0x00, 0x1a, 0x1a, + 0x1a, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0xf0, 0xfb, + 0xff, 0x00, 0xa4, 0xa0, 0xa0, 0x00, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, + 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x28, + 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x28, 0x28, + 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0x25, 0x25, 0x25, 0x28, 0x28, 0xf6, + 0xf6, 0x23, 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, 0x23, + 0x23, 0xf6, 0x23, 0x28, 0x25, 0x00, 0x00, 0x00, + 0x25, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, 0x28, + 0x28, 0xf6, 0x28, 0x28, 0x28, 0x25, 0x00, 0x25, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, 0x28, + 0x28, 0xf6, 0x28, 0x28, 0x28, 0x28, 0x25, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0xf6, 0xf6, 0x28, + 0x28, 0xf6, 0xf6, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0xf6, 0xf6, 0x28, + 0x28, 0x23, 0xf6, 0x28, 0x28, 0x25, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x23, 0x23, + 0x28, 0x23, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, + 0x23, 0x23, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, + 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x25, 0x00, + 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8f, + 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x0f, + 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0xe0, 0x03, + 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, + 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xf0, 0x0f, + 0x00, 0x00, 0xf0, 0x4f, 0x00, 0x00, 0xf0, 0xff, + 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, +}; + +static const uint8_t data_index_htm[] = +{ + /* /index.htm */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0d, + 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, + 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, + 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, + 0x2d, 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, + 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, + 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, + 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, + 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, + 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, + 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3b, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, + 0x74, 0x3d, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x44, 0x4b, + 0x2d, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, + 0x58, 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, + 0x74, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, + 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, + 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, + 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, + 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, + 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, + 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x6a, + 0x73, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, + 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, 0x76, + 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x31, + 0x2e, 0x32, 0x22, 0x20, 0x63, 0x68, 0x61, 0x72, + 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, 0x66, + 0x2d, 0x38, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, + 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x2e, + 0x6a, 0x73, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, + 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x31, 0x2e, 0x32, 0x22, 0x20, 0x63, 0x68, 0x61, + 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, + 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x3c, 0x2f, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x74, 0x69, 0x22, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x74, 0x69, 0x2e, 0x6a, + 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, + 0x22, 0x54, 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, + 0x30, 0x25, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x68, 0x31, 0x22, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, + 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x20, 0x54, 0x4d, 0x34, 0x43, + 0x31, 0x32, 0x39, 0x58, 0x20, 0x44, 0x65, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, + 0x20, 0x4b, 0x69, 0x74, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, + 0x32, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x44, 0x4b, 0x2d, 0x54, 0x4d, + 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, + 0x76, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x74, 0x69, 0x76, 0x61, 0x22, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x74, 0x69, 0x76, 0x61, 0x22, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, + 0x22, 0x74, 0x6d, 0x34, 0x63, 0x2e, 0x6a, 0x70, + 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, + 0x54, 0x4d, 0x34, 0x43, 0x22, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x68, 0x72, 0x3e, 0x3c, 0x68, 0x72, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x54, 0x49, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, + 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x22, 0x3e, 0x54, 0x69, + 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x76, + 0x69, 0x65, 0x77, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, + 0x2f, 0x6c, 0x69, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, + 0x3e, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, + 0x58, 0x4e, 0x43, 0x5a, 0x41, 0x44, 0x20, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, + 0x67, 0x72, 0x61, 0x6d, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x2f, 0x64, 0x6b, + 0x2d, 0x74, 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, + 0x78, 0x22, 0x3e, 0x44, 0x4b, 0x2d, 0x54, 0x4d, + 0x34, 0x43, 0x31, 0x32, 0x39, 0x78, 0x20, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x50, + 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, + 0x2f, 0x6c, 0x69, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x74, 0x69, 0x76, 0x61, 0x2d, 0x63, 0x22, 0x3e, + 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x3b, 0x20, 0x54, 0x4d, 0x34, 0x43, + 0x31, 0x32, 0x39, 0x58, 0x20, 0x46, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x20, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x20, 0x50, 0x61, 0x67, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x2e, + 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, 0x64, 0x3d, + 0x22, 0x69, 0x6f, 0x5f, 0x68, 0x74, 0x74, 0x70, + 0x22, 0x3e, 0x49, 0x2f, 0x4f, 0x20, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x44, 0x65, + 0x6d, 0x6f, 0x20, 0x31, 0x3c, 0x62, 0x72, 0x3e, + 0x28, 0x48, 0x54, 0x54, 0x50, 0x20, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x29, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, + 0x6f, 0x5f, 0x63, 0x67, 0x69, 0x2e, 0x73, 0x73, + 0x69, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, + 0x6f, 0x5f, 0x63, 0x67, 0x69, 0x22, 0x3e, 0x49, + 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x20, + 0x32, 0x3c, 0x62, 0x72, 0x3e, 0x28, 0x53, 0x53, + 0x49, 0x2f, 0x43, 0x47, 0x49, 0x29, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x64, 0x6b, + 0x2d, 0x74, 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, + 0x78, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x61, + 0x6c, 0x74, 0x3d, 0x22, 0x44, 0x4b, 0x2d, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x66, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x72, 0x3e, 0x3c, 0x68, 0x72, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x20, 0x26, 0x63, 0x6f, 0x70, 0x79, + 0x3b, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x32, + 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, 0x61, + 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, 0x6e, + 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, + 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, + 0x3e, 0x0d, 0x0a, +}; + +static const uint8_t data_io_cgi_ssi[] = +{ + /* /io_cgi.ssi */ + 0x2f, 0x69, 0x6f, 0x5f, 0x63, 0x67, 0x69, 0x2e, + 0x73, 0x73, 0x69, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x20, + 0x54, 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, + 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, + 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, + 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, + 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, + 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63, 0x68, + 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x55, 0x54, + 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x49, 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x44, 0x65, 0x6d, + 0x6f, 0x20, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, + 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, + 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, + 0x6c, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, + 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, + 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, + 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x6a, 0x61, 0x76, + 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, + 0x6a, 0x73, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, + 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x31, 0x2e, 0x32, 0x22, 0x20, 0x63, 0x68, 0x61, + 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, + 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x3c, 0x2f, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x21, 0x2d, 0x2d, 0x23, 0x46, 0x6f, 0x72, 0x6d, + 0x56, 0x61, 0x72, 0x73, 0x2d, 0x2d, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x20, 0x69, 0x64, 0x3d, + 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x74, 0x69, 0x22, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x74, 0x69, 0x2e, 0x6a, 0x70, 0x67, + 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x54, + 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x31, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x20, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, 0x44, 0x65, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x4b, 0x69, 0x74, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x32, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, 0x43, + 0x31, 0x32, 0x39, 0x58, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x74, 0x69, 0x76, 0x61, 0x22, 0x20, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, + 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x76, 0x61, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x74, 0x6d, 0x34, 0x63, 0x2e, 0x6a, + 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, + 0x22, 0x54, 0x4d, 0x34, 0x43, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x72, 0x3e, + 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, 0x65, 0x6e, + 0x75, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x75, 0x6c, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x54, 0x49, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x6f, 0x76, 0x65, 0x72, 0x76, + 0x69, 0x65, 0x77, 0x22, 0x3e, 0x54, 0x69, 0x76, + 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, + 0x65, 0x77, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, + 0x74, 0x6d, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x4e, + 0x43, 0x5a, 0x41, 0x44, 0x20, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, 0x67, 0x72, + 0x61, 0x6d, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, + 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x6f, + 0x6f, 0x6c, 0x2f, 0x64, 0x6b, 0x2d, 0x74, 0x6d, + 0x34, 0x63, 0x31, 0x32, 0x39, 0x78, 0x22, 0x3e, + 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, 0x43, 0x31, + 0x32, 0x39, 0x58, 0x20, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x20, 0x50, 0x61, 0x67, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x76, 0x61, + 0x2d, 0x63, 0x22, 0x3e, 0x54, 0x69, 0x76, 0x61, + 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, + 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x78, + 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, + 0x50, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x5f, 0x68, 0x74, + 0x74, 0x70, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6f, 0x5f, 0x68, + 0x74, 0x74, 0x70, 0x22, 0x3e, 0x49, 0x2f, 0x4f, + 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x20, 0x31, 0x3c, + 0x62, 0x72, 0x3e, 0x28, 0x48, 0x54, 0x54, 0x50, + 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x29, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x69, 0x6f, 0x5f, 0x63, 0x67, 0x69, 0x2e, + 0x73, 0x73, 0x69, 0x22, 0x20, 0x69, 0x64, 0x3d, + 0x22, 0x69, 0x6f, 0x5f, 0x63, 0x67, 0x69, 0x22, + 0x3e, 0x49, 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x44, 0x65, 0x6d, + 0x6f, 0x20, 0x32, 0x3c, 0x62, 0x72, 0x3e, 0x28, + 0x53, 0x53, 0x49, 0x2f, 0x43, 0x47, 0x49, 0x29, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x64, 0x6b, + 0x2d, 0x74, 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, + 0x78, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x61, + 0x6c, 0x74, 0x3d, 0x22, 0x44, 0x4b, 0x2d, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, + 0x30, 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x20, 0x76, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, + 0x6f, 0x70, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x22, 0x37, 0x35, 0x25, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, + 0x32, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x49, 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x44, 0x65, 0x6d, + 0x6f, 0x20, 0x32, 0x3c, 0x2f, 0x68, 0x32, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x68, 0x72, 0x20, 0x73, + 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x32, 0x22, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, + 0x30, 0x30, 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x75, 0x6c, 0x3e, 0x3c, 0x2f, + 0x75, 0x6c, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, + 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, + 0x6f, 0x77, 0x73, 0x20, 0x61, 0x6e, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x20, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, + 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x54, + 0x68, 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, + 0x2c, 0x20, 0x77, 0x65, 0x20, 0x75, 0x73, 0x65, + 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x53, 0x69, 0x64, 0x65, 0x20, 0x49, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x61, 0x67, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x61, 0x73, + 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, + 0x65, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x54, 0x69, 0x76, + 0x61, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x20, 0x44, 0x4b, 0x20, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x66, 0x6f, + 0x72, 0x6d, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, + 0x65, 0x6e, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x43, 0x47, + 0x49, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x75, + 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x2e, 0x20, 0x26, 0x6e, 0x62, 0x73, + 0x70, 0x3b, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x20, 0x63, 0x61, 0x75, 0x73, + 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, + 0x67, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, + 0x20, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x65, 0x76, + 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x73, 0x20, + 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, + 0x20, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x69, + 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x73, 0x20, + 0x6c, 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x20, 0x48, 0x54, 0x4d, + 0x4c, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x38, 0x30, 0x25, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x66, 0x6f, + 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, + 0x69, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2e, 0x63, 0x67, 0x69, 0x22, 0x20, 0x6e, + 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, 0x62, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, + 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x32, + 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, + 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x32, + 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x6c, 0x65, 0x66, 0x74, 0x22, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, + 0x70, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x62, 0x3e, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3c, 0x2f, + 0x62, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x62, 0x3e, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x62, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x62, 0x3e, 0x4e, 0x65, 0x77, 0x3c, 0x2f, + 0x62, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, + 0x65, 0x66, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, + 0x22, 0x3e, 0x4c, 0x45, 0x44, 0x20, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, + 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x4c, 0x45, 0x44, 0x74, 0x78, + 0x74, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, + 0x70, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, + 0x22, 0x4c, 0x45, 0x44, 0x4f, 0x6e, 0x22, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, + 0x65, 0x66, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, + 0x22, 0x3e, 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x70, 0x65, 0x65, + 0x64, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, + 0x70, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x73, 0x70, 0x65, 0x65, 0x64, 0x2d, 0x2d, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31, + 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x22, + 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x34, + 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x64, 0x20, 0x63, 0x6f, 0x6c, + 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x33, 0x22, + 0x20, 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, + 0x3d, 0x22, 0x31, 0x22, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x6d, 0x69, 0x64, 0x64, + 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x3d, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, + 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x66, 0x6f, 0x72, + 0x6d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x75, 0x6c, + 0x3e, 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x3d, 0x22, 0x31, 0x22, 0x20, 0x63, 0x65, 0x6c, + 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x3d, 0x22, 0x32, 0x22, 0x20, 0x63, 0x65, 0x6c, + 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, + 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3d, 0x22, 0x38, 0x30, 0x25, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, + 0x66, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x66, + 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, + 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, + 0x22, 0x73, 0x65, 0x74, 0x74, 0x78, 0x74, 0x2e, + 0x63, 0x67, 0x69, 0x22, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x74, 0x78, + 0x74, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, + 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, + 0x67, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x63, 0x65, + 0x6c, 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, + 0x67, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x72, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x62, 0x3e, 0x44, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x6f, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, + 0x72, 0x65, 0x65, 0x6e, 0x3a, 0x3c, 0x62, 0x72, + 0x3e, 0x3c, 0x2f, 0x62, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, 0x22, + 0x34, 0x30, 0x22, 0x20, 0x73, 0x69, 0x7a, 0x65, + 0x3d, 0x22, 0x34, 0x30, 0x22, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x3d, 0x22, 0x44, 0x69, 0x73, 0x70, + 0x54, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x3d, 0x22, 0x44, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x22, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3d, 0x22, 0x53, 0x65, 0x6e, 0x64, + 0x20, 0x54, 0x65, 0x78, 0x74, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x72, + 0x3e, 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x70, 0x79, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x26, 0x63, + 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x32, 0x30, 0x31, + 0x33, 0x2d, 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, + 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, + 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, + 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, + +}; + +static const uint8_t data_io_http_htm[] = +{ + /* /io_http.htm */ + 0x2f, 0x69, 0x6f, 0x5f, 0x68, 0x74, 0x74, 0x70, + 0x2e, 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x20, + 0x54, 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, + 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, + 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, + 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x65, + 0x61, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, + 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, + 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63, + 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x55, + 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x49, 0x2f, + 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x20, 0x31, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, + 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, + 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, + 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, + 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, + 0x30, 0x30, 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, + 0x66, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, + 0x37, 0x35, 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x68, 0x32, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x49, 0x2f, + 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x20, 0x31, + 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x68, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, + 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x54, 0x68, + 0x69, 0x73, 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x6e, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x68, + 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, + 0x20, 0x48, 0x54, 0x54, 0x50, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x65, + 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x4a, + 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6f, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, + 0x62, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x69, + 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x20, 0x55, + 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, + 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x20, 0x74, 0x6f, 0x20, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, + 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x74, 0x69, + 0x72, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, 0x2e, + 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, + 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x55, + 0x53, 0x45, 0x52, 0x20, 0x4c, 0x45, 0x44, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x4c, 0x45, 0x44, 0x3c, + 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, + 0x22, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x22, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, + 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x4c, + 0x45, 0x44, 0x22, 0x20, 0x6f, 0x6e, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x74, 0x6f, 0x67, + 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x64, 0x28, + 0x29, 0x3b, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x53, 0x45, + 0x52, 0x20, 0x4c, 0x45, 0x44, 0x3a, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x65, + 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x2d, + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, + 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, + 0x53, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6e, 0x69, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x2e, 0x20, 0x53, + 0x70, 0x65, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, + 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x53, 0x70, 0x65, 0x65, 0x64, 0x3a, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x22, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x2d, 0x3c, 0x2f, 0x64, + 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x70, 0x65, + 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x22, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x53, + 0x65, 0x74, 0x20, 0x53, 0x70, 0x65, 0x65, 0x64, + 0x22, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x65, 0x64, + 0x53, 0x65, 0x74, 0x28, 0x29, 0x3b, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x75, + 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x3d, 0x22, 0x33, 0x22, 0x20, 0x73, + 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x34, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x65, + 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, + 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x25, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x3c, 0x2f, 0x70, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x0a, 0x3c, 0x2f, 0x68, + 0x74, 0x6d, 0x6c, 0x3e, +}; + +static const uint8_t data_javascript_js[] = +{ + /* /javascript.js */ + 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x2e, 0x6a, 0x73, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6f, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, + 0x28, 0x27, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x27, + 0x29, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x62, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x27, 0x6f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x3d, + 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x27, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, + 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, + 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x69, 0x6f, + 0x5f, 0x68, 0x74, 0x74, 0x70, 0x27, 0x29, 0x2e, + 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, + 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x4f, + 0x48, 0x74, 0x74, 0x70, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x62, + 0x6f, 0x75, 0x74, 0x28, 0x29, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, + 0x50, 0x61, 0x67, 0x65, 0x28, 0x22, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x28, 0x29, 0x0a, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x61, 0x67, 0x65, 0x28, 0x22, + 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, + 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, + 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x67, 0x65, + 0x28, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x68, 0x74, 0x6d, 0x22, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, + 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x4f, 0x48, 0x74, 0x74, 0x70, 0x28, + 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x67, 0x65, + 0x28, 0x22, 0x69, 0x6f, 0x5f, 0x68, 0x74, 0x74, + 0x70, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x64, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x47, 0x65, 0x74, + 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, + 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, + 0x6d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x73, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x6f, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x45, 0x44, + 0x4f, 0x6e, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x65, 0x64, 0x20, 0x3d, 0x20, 0x6c, 0x73, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x6f, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x70, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x67, 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x64, + 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x71, + 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x28, 0x29, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x28, 0x72, 0x65, 0x71, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, + 0x72, 0x65, 0x71, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x30, + 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, + 0x28, 0x22, 0x6c, 0x65, 0x64, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x29, 0x2e, 0x69, 0x6e, 0x6e, + 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x3d, + 0x20, 0x22, 0x3c, 0x64, 0x69, 0x76, 0x3e, 0x22, + 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, + 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, 0x2b, 0x20, + 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x58, + 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, + 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x58, + 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, + 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x58, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x71, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x58, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x22, + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, + 0x74, 0x2e, 0x58, 0x4d, 0x4c, 0x48, 0x54, 0x54, + 0x50, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x28, 0x72, 0x65, 0x71, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x22, 0x47, + 0x45, 0x54, 0x22, 0x2c, 0x20, 0x22, 0x2f, 0x63, + 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, 0x2f, 0x74, + 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, + 0x64, 0x3f, 0x69, 0x64, 0x22, 0x20, 0x2b, 0x20, + 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x2c, 0x20, 0x74, + 0x72, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x71, 0x2e, 0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x54, + 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x71, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, + 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, + 0x74, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, + 0x71, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x61, 0x72, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, + 0x5f, 0x74, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x72, + 0x65, 0x71, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x3d, + 0x20, 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x28, 0x72, 0x65, 0x71, + 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, + 0x3d, 0x3d, 0x20, 0x32, 0x30, 0x30, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, + 0x70, 0x65, 0x65, 0x64, 0x22, 0x29, 0x2e, 0x69, + 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, + 0x20, 0x3d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x3c, 0x64, 0x69, 0x76, + 0x3e, 0x22, 0x20, 0x2b, 0x20, 0x72, 0x65, 0x71, + 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x65, 0x78, 0x74, 0x20, 0x2b, 0x20, + 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x58, 0x4d, + 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x20, + 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x58, 0x4d, + 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, + 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x58, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x71, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x58, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x22, 0x4d, + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x2e, 0x58, 0x4d, 0x4c, 0x48, 0x54, 0x54, 0x50, + 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x28, 0x72, 0x65, 0x71, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x22, 0x47, 0x45, + 0x54, 0x22, 0x2c, 0x20, 0x22, 0x2f, 0x63, 0x67, + 0x69, 0x2d, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x65, + 0x74, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x3f, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x3d, + 0x22, 0x20, 0x2b, 0x20, 0x73, 0x70, 0x65, 0x65, + 0x64, 0x5f, 0x74, 0x78, 0x74, 0x2e, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x2b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, + 0x69, 0x64, 0x22, 0x20, 0x2b, 0x20, 0x4d, 0x61, + 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, + 0x6d, 0x28, 0x29, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2e, + 0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x70, 0x65, + 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x2e, + 0x73, 0x65, 0x6e, 0x64, 0x28, 0x6e, 0x75, 0x6c, + 0x6c, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x65, + 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, 0x47, 0x65, + 0x74, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x65, + 0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x6c, + 0x65, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x3d, + 0x20, 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x28, 0x6c, 0x65, 0x64, + 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, + 0x3d, 0x3d, 0x20, 0x32, 0x30, 0x30, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, 0x6c, + 0x65, 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x29, 0x2e, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, + 0x54, 0x4d, 0x4c, 0x20, 0x3d, 0x20, 0x22, 0x3c, + 0x64, 0x69, 0x76, 0x3e, 0x22, 0x20, 0x2b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6c, 0x65, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x20, 0x2b, 0x20, 0x22, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0x22, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x2e, 0x58, 0x4d, 0x4c, 0x48, + 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6c, 0x65, 0x64, 0x20, 0x3d, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x58, 0x4d, 0x4c, 0x48, + 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, + 0x20, 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x58, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6c, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x58, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, + 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, + 0x66, 0x74, 0x2e, 0x58, 0x4d, 0x4c, 0x48, 0x54, + 0x54, 0x50, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x28, 0x6c, 0x65, 0x64, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, + 0x64, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x22, + 0x47, 0x45, 0x54, 0x22, 0x2c, 0x20, 0x22, 0x2f, + 0x6c, 0x65, 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x3f, 0x69, 0x64, 0x3d, 0x22, 0x20, 0x2b, 0x20, + 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x2c, 0x20, 0x74, + 0x72, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, + 0x64, 0x2e, 0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x6c, + 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x64, 0x2e, + 0x73, 0x65, 0x6e, 0x64, 0x28, 0x6e, 0x75, 0x6c, + 0x6c, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x47, 0x65, 0x74, 0x28, 0x29, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x61, 0x72, 0x20, 0x72, 0x65, 0x71, 0x20, 0x3d, + 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x70, 0x65, + 0x65, 0x64, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x72, 0x65, + 0x71, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x3d, 0x20, + 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x28, 0x72, 0x65, 0x71, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, + 0x3d, 0x20, 0x32, 0x30, 0x30, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, + 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x22, 0x29, 0x2e, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x3d, 0x20, 0x22, 0x3c, 0x64, 0x69, 0x76, 0x3e, + 0x22, 0x20, 0x2b, 0x20, 0x72, 0x65, 0x71, 0x2e, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x54, 0x65, 0x78, 0x74, 0x20, 0x2b, 0x20, 0x22, + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x22, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x58, 0x4d, + 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x20, + 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x58, 0x4d, + 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, + 0x73, 0x65, 0x20, 0x69, 0x66, 0x28, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x58, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x72, 0x65, 0x71, 0x20, 0x3d, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x58, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x28, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, + 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x58, 0x4d, 0x4c, + 0x48, 0x54, 0x54, 0x50, 0x22, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x28, 0x72, 0x65, 0x71, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x71, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x28, 0x22, 0x47, 0x45, 0x54, 0x22, 0x2c, 0x20, + 0x22, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x3f, 0x69, 0x64, 0x3d, 0x22, + 0x20, 0x2b, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, + 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, + 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x72, 0x65, 0x71, 0x2e, 0x6f, 0x6e, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, + 0x3d, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x72, 0x65, 0x71, 0x2e, 0x73, 0x65, 0x6e, + 0x64, 0x28, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, + 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x61, 0x67, 0x65, 0x28, 0x70, 0x61, 0x67, 0x65, + 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x2e, 0x58, 0x4d, 0x4c, 0x48, 0x74, 0x74, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x20, + 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x58, 0x4d, + 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, + 0x68, 0x74, 0x74, 0x70, 0x20, 0x3d, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x58, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x28, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, + 0x6f, 0x66, 0x74, 0x2e, 0x58, 0x4d, 0x4c, 0x48, + 0x54, 0x54, 0x50, 0x22, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, + 0x70, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x22, + 0x47, 0x45, 0x54, 0x22, 0x2c, 0x20, 0x70, 0x61, + 0x67, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, + 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x28, + 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x78, 0x2d, 0x77, 0x77, 0x77, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x75, 0x72, 0x6c, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x22, + 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, + 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x73, + 0x65, 0x6e, 0x64, 0x28, 0x29, 0x3b, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x68, + 0x74, 0x74, 0x70, 0x2e, 0x6f, 0x6e, 0x72, 0x65, + 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x3d, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x28, 0x78, + 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, + 0x26, 0x26, 0x20, 0x28, 0x78, 0x6d, 0x6c, 0x68, + 0x74, 0x74, 0x70, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x30, + 0x30, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, + 0x64, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x22, 0x29, 0x2e, 0x69, 0x6e, 0x6e, + 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x3d, + 0x20, 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, + 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x65, 0x78, 0x74, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, + 0x0a, +}; + +static const uint8_t data_javascript_load_js[] = +{ + /* /javascript_load.js */ + 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, + 0x2e, 0x6a, 0x73, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6f, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, + 0x28, 0x27, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x27, + 0x29, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x62, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x27, 0x6f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x3d, + 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x27, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, + 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, + 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x69, 0x6f, + 0x5f, 0x68, 0x74, 0x74, 0x70, 0x27, 0x29, 0x2e, + 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, + 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x4f, + 0x48, 0x74, 0x74, 0x70, 0x3b, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x61, 0x67, 0x65, 0x28, 0x22, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x29, + 0x3b, 0x0a, 0x7d, 0x0a, +}; + +static const uint8_t data_overview_htm[] = +{ + /* /overview.htm */ + 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x44, + 0x4b, 0x2d, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, + 0x39, 0x58, 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x4b, + 0x69, 0x74, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, + 0x73, 0x73, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, + 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, + 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, + 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, + 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x2f, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x3c, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, + 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x20, 0x50, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x20, 0x4c, 0x69, 0x6e, + 0x65, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x68, + 0x72, 0x3e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0a, + 0x41, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x20, 0x41, 0x52, 0x4d, + 0x26, 0x72, 0x65, 0x67, 0x3b, 0x20, 0x43, 0x6f, + 0x72, 0x74, 0x65, 0x78, 0x26, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x3b, 0x2d, 0x4d, 0x34, 0x20, 0x6d, + 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x20, + 0x28, 0x4d, 0x43, 0x55, 0x73, 0x29, 0x20, 0x74, + 0x6f, 0x20, 0x62, 0x65, 0x0a, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, + 0x20, 0x6f, 0x6e, 0x20, 0x54, 0x49, 0x27, 0x73, + 0x20, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x65, + 0x74, 0x61, 0x72, 0x79, 0x20, 0x36, 0x35, 0x2d, + 0x6e, 0x6d, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2c, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, + 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x73, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, + 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x69, 0x72, 0x20, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x77, 0x69, + 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x73, 0x61, + 0x63, 0x72, 0x69, 0x66, 0x69, 0x63, 0x69, 0x6e, + 0x67, 0x20, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2c, + 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x6f, 0x72, + 0x20, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x20, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x0a, 0x4d, 0x43, 0x55, 0x20, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, + 0x73, 0x20, 0x61, 0x20, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x67, 0x68, + 0x2d, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x61, + 0x6c, 0x6f, 0x67, 0x20, 0x77, 0x68, 0x69, 0x6c, + 0x65, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x0a, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x6c, 0x6f, 0x77, 0x2d, 0x70, 0x6f, + 0x77, 0x65, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x65, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x66, 0x66, + 0x65, 0x72, 0x20, 0x61, 0x20, 0x67, 0x72, 0x65, + 0x61, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, + 0x66, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x54, 0x6f, + 0x64, 0x61, 0x79, 0x27, 0x73, 0x0a, 0x65, 0x6e, + 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x20, + 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, + 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, + 0x6e, 0x20, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, + 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x65, + 0x2e, 0x20, 0x4f, 0x66, 0x74, 0x65, 0x6e, 0x2c, + 0x20, 0x74, 0x68, 0x65, 0x0a, 0x67, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x63, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, + 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x0a, + 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x77, 0x61, 0x72, 0x65, 0x22, 0x3e, + 0x54, 0x69, 0x76, 0x61, 0x57, 0x61, 0x72, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x43, 0x20, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x0a, 0x66, + 0x72, 0x65, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x74, + 0x68, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x20, 0x62, 0x6f, 0x74, 0x68, + 0x20, 0x70, 0x65, 0x72, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x61, 0x6c, 0x2d, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, + 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x20, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x4f, + 0x4d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x20, 0x54, 0x69, 0x76, 0x61, + 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x20, 0x4d, 0x43, 0x55, 0x2e, 0x20, 0x54, + 0x68, 0x69, 0x73, 0x0a, 0x6f, 0x66, 0x66, 0x65, + 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x20, 0x55, 0x53, + 0x42, 0x2c, 0x20, 0x43, 0x41, 0x4e, 0x2c, 0x20, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, + 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, + 0x65, 0x73, 0x20, 0x73, 0x6f, 0x0a, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x73, 0x20, + 0x63, 0x61, 0x6e, 0x20, 0x66, 0x6f, 0x63, 0x75, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, + 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x20, + 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, + 0x20, 0x6f, 0x66, 0x0a, 0x70, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x20, + 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x20, 0x70, 0x65, 0x72, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x20, + 0x54, 0x68, 0x65, 0x20, 0x54, 0x69, 0x76, 0x61, + 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x73, 0x20, 0x61, 0x6e, 0x0a, 0x65, 0x78, + 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, 0x20, + 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x6f, 0x6d, + 0x65, 0x2c, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, + 0x69, 0x61, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, + 0x3e, 0x0a, +}; + +static const uint8_t data_perror_htm[] = +{ + /* /perror.htm */ + 0x2f, 0x70, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x20, 0x20, + 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, + 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63, 0x68, + 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x55, 0x54, + 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3c, 0x2f, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, + 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, + 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, + 0x73, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, + 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, + 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, + 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x66, 0x61, 0x76, + 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, + 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x6a, 0x61, 0x76, + 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, + 0x6a, 0x73, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, + 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x31, 0x2e, 0x32, 0x22, 0x20, 0x63, 0x68, 0x61, + 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, + 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x3c, 0x2f, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x22, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x74, 0x69, 0x2e, 0x6a, + 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, + 0x22, 0x54, 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, + 0x31, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, + 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, + 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x68, 0x32, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x44, 0x4b, 0x2d, 0x54, 0x4d, + 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x76, 0x61, + 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x76, + 0x61, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x74, 0x6d, 0x34, 0x63, + 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, + 0x74, 0x3d, 0x22, 0x54, 0x4d, 0x34, 0x43, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, + 0x72, 0x3e, 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, + 0x65, 0x6e, 0x75, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x75, 0x6c, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x54, 0x49, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x6f, 0x76, 0x65, 0x72, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x22, 0x3e, 0x54, + 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x20, 0x4f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, + 0x3e, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, + 0x58, 0x4e, 0x43, 0x5a, 0x41, 0x44, 0x20, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, + 0x67, 0x72, 0x61, 0x6d, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x74, 0x6f, 0x6f, 0x6c, 0x2f, 0x64, 0x6b, 0x2d, + 0x74, 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, 0x78, + 0x22, 0x3e, 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x50, 0x61, + 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, + 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x2d, 0x63, 0x22, 0x3e, 0x54, 0x69, + 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x3b, 0x20, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, + 0x39, 0x78, 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x20, 0x50, 0x61, 0x67, 0x65, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x5f, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x68, 0x74, 0x6d, + 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6f, + 0x5f, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3e, 0x49, + 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x20, + 0x31, 0x3c, 0x62, 0x72, 0x3e, 0x28, 0x48, 0x54, + 0x54, 0x50, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x73, 0x29, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x5f, 0x63, 0x67, + 0x69, 0x2e, 0x73, 0x73, 0x69, 0x22, 0x3e, 0x49, + 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x20, 0x44, 0x65, 0x6d, 0x6f, 0x20, + 0x32, 0x3c, 0x62, 0x72, 0x3e, 0x28, 0x53, 0x53, + 0x49, 0x2f, 0x43, 0x47, 0x49, 0x29, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x75, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x64, 0x6b, 0x2d, 0x74, + 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, 0x78, 0x2e, + 0x6a, 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, + 0x3d, 0x22, 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, + 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x22, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x74, 0x6f, 0x70, 0x22, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x37, 0x35, 0x25, + 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x68, 0x32, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x68, 0x72, 0x20, 0x73, 0x69, + 0x7a, 0x65, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, + 0x30, 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, + 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x4f, 0x6f, + 0x70, 0x73, 0x20, 0x2d, 0x20, 0x6f, 0x6e, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, + 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x62, 0x72, 0x3e, 0x77, 0x61, 0x73, + 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2c, + 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6f, 0x66, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, + 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x50, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x20, 0x74, 0x72, 0x79, + 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x21, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x72, 0x3e, + 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x20, 0x26, 0x63, 0x6f, + 0x70, 0x79, 0x3b, 0x20, 0x32, 0x30, 0x31, 0x33, + 0x2d, 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, + 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, + 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0x0a, +}; + +static const uint8_t data_styles_css[] = +{ + /* /styles.css */ + 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, + 0x63, 0x73, 0x73, 0x00, + 0x2f, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, + 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x32, 0x30, + 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, 0x61, 0x73, + 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, 0x6e, 0x63, + 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, + 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, + 0x53, 0x74, 0x79, 0x6c, 0x69, 0x6e, 0x67, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x20, 0x2a, 0x2f, 0x0a, 0x62, 0x6f, 0x64, 0x79, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, + 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, 0x65, 0x6c, + 0x2c, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, + 0x63, 0x61, 0x2c, 0x73, 0x61, 0x6e, 0x73, 0x2d, + 0x73, 0x65, 0x72, 0x69, 0x66, 0x3b, 0x0a, 0x7d, + 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x79, + 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x76, + 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, + 0x72, 0x3a, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, + 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, + 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x31, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, + 0x3a, 0x20, 0x32, 0x65, 0x6d, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, + 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x23, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x68, 0x32, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x2e, + 0x32, 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, + 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x23, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x68, 0x72, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, + 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, + 0x69, 0x64, 0x20, 0x23, 0x66, 0x66, 0x30, 0x30, + 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x74, + 0x6f, 0x70, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, + 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x20, 0x23, 0x66, + 0x66, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, 0x7d, + 0x0a, 0x0a, 0x23, 0x68, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x20, 0x61, 0x20, 0x69, 0x6d, 0x67, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x30, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, + 0x53, 0x74, 0x79, 0x6c, 0x69, 0x6e, 0x67, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x64, 0x69, 0x76, + 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x6d, 0x65, + 0x6e, 0x75, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, + 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, + 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, + 0x20, 0x31, 0x30, 0x70, 0x78, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3a, 0x20, 0x32, 0x32, 0x35, 0x70, 0x78, 0x3b, + 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x6d, 0x65, 0x6e, + 0x75, 0x20, 0x75, 0x6c, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x2d, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2d, 0x74, 0x79, + 0x70, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x30, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x3b, + 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x6d, 0x65, 0x6e, + 0x75, 0x20, 0x61, 0x3a, 0x6c, 0x69, 0x6e, 0x6b, + 0x2c, 0x20, 0x23, 0x6d, 0x65, 0x6e, 0x75, 0x20, + 0x61, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x74, 0x65, + 0x64, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x3a, 0x20, 0x23, 0x66, 0x66, 0x30, 0x30, 0x30, + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, 0x64, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, + 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x32, 0x70, 0x78, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, + 0x3a, 0x20, 0x32, 0x70, 0x78, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, + 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x70, 0x78, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, + 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, 0x6f, + 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x32, + 0x30, 0x30, 0x70, 0x78, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x23, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x61, + 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x20, + 0x23, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x61, 0x3a, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x62, 0x66, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, + 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x74, + 0x79, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x69, + 0x76, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, + 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, + 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, + 0x74, 0x3a, 0x20, 0x32, 0x32, 0x35, 0x70, 0x78, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, + 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, + 0x2e, 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, + 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x79, 0x6c, 0x69, + 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6f, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x64, 0x69, 0x76, 0x2e, 0x20, + 0x2a, 0x2f, 0x0a, 0x23, 0x66, 0x6f, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, + 0x20, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x2e, 0x37, + 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x69, 0x74, 0x61, + 0x6c, 0x69, 0x63, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, + 0x66, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x68, 0x72, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, + 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, + 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, + 0x64, 0x20, 0x23, 0x66, 0x66, 0x30, 0x30, 0x30, + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x74, 0x6f, + 0x70, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, + 0x6f, 0x6c, 0x69, 0x64, 0x20, 0x23, 0x66, 0x66, + 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, + +}; + +static const uint8_t data_ti_jpg[] = +{ + /* /ti.jpg */ + 0x2f, 0x74, 0x69, 0x2e, 0x6a, 0x70, 0x67, 0x00, + + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x04, 0x05, 0x0a, 0x07, + 0x07, 0x06, 0x08, 0x0c, 0x0a, 0x0c, 0x0c, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0d, 0x0e, 0x12, 0x10, 0x0d, + 0x0e, 0x11, 0x0e, 0x0b, 0x0b, 0x10, 0x16, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0x0c, 0x0f, + 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, + 0x14, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x03, 0x04, + 0x04, 0x05, 0x04, 0x05, 0x09, 0x05, 0x05, 0x09, + 0x14, 0x0d, 0x0b, 0x0d, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc2, + 0x00, 0x11, 0x08, 0x00, 0x4b, 0x01, 0x16, 0x03, + 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x01, 0x00, + 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x07, 0x05, 0x08, 0x01, 0x02, 0x04, 0x03, 0xff, + 0xc4, 0x00, 0x1c, 0x01, 0x01, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, + 0x03, 0x04, 0x06, 0x07, 0x08, 0xff, 0xda, 0x00, + 0x0c, 0x03, 0x01, 0x00, 0x02, 0x10, 0x03, 0x10, + 0x00, 0x00, 0x01, 0xda, 0x90, 0x62, 0xec, 0xda, + 0x80, 0xea, 0x74, 0xb2, 0xbc, 0xf0, 0x92, 0x4c, + 0xf1, 0x5c, 0xab, 0xd8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, + 0xd6, 0xe8, 0x35, 0x63, 0x9d, 0xf6, 0x9b, 0xc2, + 0x67, 0xcd, 0x7d, 0x2d, 0x6b, 0x47, 0x7f, 0x91, + 0xf5, 0xd7, 0x0f, 0xda, 0xeb, 0x7e, 0x27, 0x53, + 0xb1, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x02, 0x90, 0xbd, 0x79, 0xfd, + 0x59, 0xe7, 0x3d, 0xb2, 0x67, 0xb9, 0xcd, 0xe4, + 0x32, 0xe9, 0xe1, 0xb0, 0xc8, 0xc9, 0x33, 0x45, + 0x6c, 0x64, 0xcf, 0x94, 0x54, 0x35, 0xae, 0xbc, + 0x96, 0x91, 0x35, 0x33, 0x86, 0x4c, 0xf2, 0x19, + 0x23, 0xd8, 0x60, 0x8f, 0x11, 0x63, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x16, 0xcd, 0xca, 0x32, + 0x23, 0xd2, 0x31, 0x96, 0x6e, 0xc1, 0x74, 0xba, + 0xad, 0x86, 0x9a, 0xf2, 0x3a, 0xff, 0x00, 0x53, + 0xa9, 0xf9, 0xd3, 0x2c, 0x6b, 0x5e, 0x5f, 0x6d, + 0x7a, 0x3f, 0x0d, 0xf4, 0x56, 0xdd, 0x47, 0x26, + 0x27, 0xb0, 0xb3, 0x8d, 0x50, 0x36, 0xa4, 0xad, + 0x48, 0xd9, 0x8f, 0x24, 0xe6, 0xc5, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x55, 0xb4, 0x74, 0x5f, + 0xa3, 0x53, 0x11, 0x5e, 0x8d, 0xc5, 0x69, 0x62, + 0xee, 0xf1, 0xbc, 0xd6, 0xea, 0xef, 0x43, 0xb0, + 0xeb, 0x75, 0x37, 0x2f, 0xa5, 0xf9, 0xf7, 0xdf, + 0x76, 0x0d, 0x36, 0x56, 0x74, 0x65, 0x8f, 0x69, + 0x16, 0x31, 0x06, 0x64, 0xaf, 0xcb, 0x80, 0xad, + 0x0d, 0xb8, 0x3e, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xe1, 0xb3, 0x2d, 0x3f, 0x1d, 0xdd, 0xfa, + 0xee, 0xc3, 0xf0, 0x64, 0x9d, 0xed, 0x73, 0x34, + 0x44, 0x57, 0xa6, 0x5d, 0xb2, 0x7e, 0x77, 0x37, + 0xda, 0xe7, 0xc6, 0xbe, 0x97, 0xf1, 0xc8, 0x39, + 0x38, 0x3b, 0x1c, 0x00, 0x77, 0x39, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc2, 0x9d, 0x29, 0x76, + 0xa6, 0x73, 0xde, 0xe1, 0x80, 0xc5, 0x2d, 0xb8, + 0x7d, 0x1f, 0x81, 0x64, 0xb2, 0x6a, 0xf2, 0x0d, + 0x47, 0x33, 0x25, 0x90, 0x57, 0x06, 0x54, 0x90, + 0x95, 0x69, 0x6c, 0x15, 0x31, 0x99, 0x3b, 0x1b, + 0x18, 0x51, 0x24, 0x54, 0xb4, 0x48, 0xe9, 0x0d, + 0x2e, 0x12, 0x86, 0x2e, 0xf3, 0x18, 0x56, 0xa4, + 0xf8, 0xe0, 0xb4, 0x89, 0x70, 0x01, 0x48, 0xde, + 0x09, 0x5a, 0x72, 0x37, 0xbc, 0xd8, 0x29, 0x8f, + 0x31, 0xfa, 0xd6, 0xd0, 0x35, 0x1c, 0xb3, 0xca, + 0xf8, 0xc9, 0x1f, 0x33, 0x2e, 0x47, 0x8d, 0x99, + 0x34, 0xd0, 0xce, 0x19, 0x53, 0x66, 0xca, 0x04, + 0x81, 0x12, 0xa3, 0x2c, 0x57, 0x26, 0xc4, 0x90, + 0xc2, 0x8d, 0x37, 0x00, 0xd7, 0xd3, 0x60, 0x0a, + 0x2c, 0x93, 0x97, 0xc0, 0x00, 0x00, 0x01, 0xc1, + 0x48, 0x92, 0x12, 0xc9, 0x2b, 0x53, 0x08, 0x4d, + 0xc8, 0x71, 0x66, 0x15, 0xf1, 0xd4, 0xfa, 0x98, + 0xa2, 0x6e, 0x7c, 0x4e, 0x86, 0x18, 0x8d, 0x12, + 0x33, 0xde, 0x4a, 0x8f, 0xb9, 0x58, 0x96, 0x01, + 0x5d, 0x13, 0xf2, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xff, 0xc4, 0x00, 0x2b, 0x10, 0x00, 0x01, + 0x04, 0x02, 0x01, 0x01, 0x06, 0x06, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, + 0x03, 0x04, 0x06, 0x01, 0x07, 0x00, 0x13, 0x10, + 0x11, 0x12, 0x36, 0x37, 0x40, 0x14, 0x15, 0x17, + 0x30, 0x31, 0x34, 0x16, 0x20, 0x50, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x05, 0x02, + 0xec, 0x26, 0x41, 0xb1, 0x70, 0xfe, 0xa1, 0x8d, + 0xe0, 0x53, 0xf1, 0xce, 0xa7, 0xbf, 0x98, 0xf7, + 0xf7, 0x1f, 0x2e, 0xf3, 0x5c, 0xaf, 0x09, 0x6a, + 0xd4, 0x24, 0x89, 0x32, 0x51, 0xfc, 0x11, 0x98, + 0x4b, 0x89, 0x56, 0x78, 0xa7, 0x50, 0x9c, 0xfc, + 0x43, 0x7c, 0x4b, 0xa8, 0x56, 0x7d, 0xcd, 0xc7, + 0xcb, 0xbc, 0xad, 0x8a, 0x91, 0x24, 0x9b, 0x39, + 0xc9, 0x7b, 0x9d, 0x85, 0x12, 0x72, 0x4e, 0x81, + 0x9c, 0xe4, 0xe7, 0x24, 0xeb, 0x68, 0x25, 0x48, + 0x2e, 0xb1, 0x0f, 0x1b, 0x28, 0xc0, 0x10, 0x34, + 0x59, 0xf8, 0xda, 0x21, 0x7c, 0x0f, 0x5e, 0x46, + 0xb0, 0x22, 0xbf, 0x68, 0x85, 0x66, 0x68, 0x75, + 0xc2, 0x19, 0x42, 0x47, 0xec, 0x90, 0x6b, 0x31, + 0x03, 0x19, 0x8a, 0x78, 0x79, 0xdb, 0x98, 0xca, + 0xf3, 0xc2, 0xaf, 0xe2, 0x0b, 0xcb, 0xfb, 0xe5, + 0x9e, 0x90, 0xc0, 0xef, 0xa8, 0x24, 0xb8, 0x46, + 0xe3, 0x38, 0x9c, 0x3e, 0x00, 0x3b, 0x13, 0x00, + 0x69, 0x7e, 0x06, 0xa7, 0xdb, 0xcf, 0x32, 0x69, + 0xc0, 0x85, 0x54, 0x1c, 0x8b, 0x2e, 0x75, 0x9a, + 0xe3, 0xbe, 0xb6, 0x6e, 0xaf, 0x2f, 0x0c, 0xbd, + 0xb4, 0x3a, 0xbb, 0x00, 0x74, 0x29, 0xa1, 0x55, + 0x3a, 0x7e, 0xb1, 0x39, 0x55, 0x04, 0xc8, 0x11, + 0x25, 0xa1, 0x26, 0xef, 0x72, 0xd4, 0x64, 0x57, + 0x02, 0x69, 0xf7, 0xc9, 0x52, 0x6f, 0x10, 0xb6, + 0x1d, 0x7a, 0xcd, 0x37, 0xd8, 0x5d, 0xeb, 0x8d, + 0xb0, 0xdf, 0x60, 0xc4, 0x2a, 0x3d, 0x4e, 0x0c, + 0x57, 0x63, 0xd5, 0x33, 0x8c, 0xa7, 0x3c, 0x83, + 0xfa, 0x7c, 0x70, 0x8c, 0x7c, 0xed, 0xad, 0xcd, + 0x21, 0xb7, 0x84, 0x86, 0xd8, 0x81, 0xe2, 0x03, + 0xfa, 0x88, 0xc3, 0x22, 0x23, 0x55, 0x22, 0x9d, + 0xa5, 0x50, 0xef, 0xd9, 0x1a, 0x16, 0x9b, 0x51, + 0x8c, 0x78, 0x49, 0xc8, 0x88, 0xa3, 0xde, 0xdb, + 0xd8, 0xa8, 0x83, 0x3a, 0xda, 0xec, 0x1b, 0xcc, + 0xf6, 0x51, 0xd3, 0x67, 0xef, 0xcc, 0x8a, 0x89, + 0xb1, 0xa1, 0xeb, 0xdc, 0xa2, 0x75, 0xb2, 0xab, + 0x19, 0x03, 0xea, 0x56, 0x31, 0xf0, 0x85, 0x2a, + 0xce, 0x2b, 0x09, 0x18, 0x0e, 0x55, 0x96, 0x68, + 0xda, 0x80, 0xe1, 0xfc, 0xc6, 0x31, 0x8c, 0x67, + 0xf0, 0xab, 0xc1, 0x24, 0x5a, 0x7c, 0x18, 0xce, + 0x3a, 0x68, 0xe7, 0x4d, 0x1c, 0xf0, 0x27, 0xbb, + 0xa6, 0x8e, 0x61, 0x29, 0x4f, 0x3c, 0x09, 0xcf, + 0x3c, 0x09, 0xee, 0x4a, 0x12, 0x8f, 0x66, 0xa4, + 0x61, 0x69, 0xb0, 0x0a, 0x50, 0x82, 0x6d, 0x23, + 0xaa, 0xe0, 0xe8, 0x4d, 0x8e, 0x87, 0xda, 0xef, + 0xad, 0x9b, 0x26, 0x61, 0x81, 0xa7, 0xe9, 0x96, + 0xe6, 0x6e, 0x22, 0x85, 0xd8, 0xa7, 0x09, 0xaa, + 0xd7, 0x82, 0x4f, 0xb0, 0x0d, 0xc0, 0xab, 0x2c, + 0x98, 0x07, 0x7e, 0x70, 0x26, 0xe0, 0xd0, 0x02, + 0xc2, 0xe4, 0xd0, 0xbe, 0x73, 0x70, 0xe3, 0x67, + 0xcc, 0xd5, 0x2e, 0xe5, 0xe5, 0xce, 0x6f, 0x66, + 0x11, 0x63, 0xac, 0x3e, 0xb4, 0xf4, 0xc2, 0x1a, + 0xf7, 0x5f, 0xdb, 0x49, 0xb3, 0x61, 0xd9, 0x07, + 0x25, 0x0e, 0x1d, 0xac, 0xdf, 0x96, 0x78, 0x0d, + 0x1f, 0x06, 0x2d, 0x92, 0x06, 0x82, 0x28, 0x28, + 0xc4, 0xcb, 0x49, 0xba, 0xd5, 0x96, 0xc8, 0x6d, + 0x05, 0x68, 0xf0, 0xc4, 0x17, 0x37, 0x0c, 0x5e, + 0x4c, 0x4f, 0xbb, 0x16, 0x9c, 0x62, 0x8a, 0x04, + 0x25, 0x7e, 0x79, 0x68, 0x15, 0x76, 0xc8, 0xb0, + 0x2f, 0xfa, 0x1a, 0x06, 0xc1, 0xb8, 0xd9, 0xa0, + 0x91, 0x65, 0xf6, 0xf1, 0x9c, 0x27, 0xb5, 0xdf, + 0x5b, 0x0e, 0xfa, 0x95, 0x75, 0xab, 0xc9, 0xaa, + 0x93, 0xa1, 0x3f, 0x06, 0x7d, 0x4a, 0x66, 0x9a, + 0xe9, 0x2f, 0x58, 0x1c, 0x24, 0xfc, 0xcb, 0x9f, + 0xaa, 0xd3, 0x3f, 0x53, 0x59, 0x0d, 0x27, 0x3d, + 0x14, 0x95, 0xc7, 0x6e, 0xee, 0x73, 0x3d, 0x3d, + 0xc7, 0x31, 0x58, 0x4c, 0x4a, 0x6f, 0xa5, 0x76, + 0x50, 0xeb, 0xc5, 0x24, 0x7b, 0xae, 0xda, 0x60, + 0x69, 0xcf, 0x2b, 0xeb, 0x80, 0x1f, 0x3c, 0x96, + 0x0a, 0xbd, 0x8a, 0xcc, 0x9a, 0xd4, 0x06, 0x09, + 0x9c, 0xb1, 0x8e, 0x23, 0x40, 0x55, 0x5b, 0xcb, + 0x35, 0xbf, 0x58, 0x2c, 0x4d, 0x8e, 0x95, 0x0a, + 0x5e, 0x9c, 0x72, 0x2a, 0xf5, 0x49, 0xf9, 0xc5, + 0x62, 0xfd, 0x9c, 0xfe, 0x33, 0xae, 0x1f, 0x51, + 0xd2, 0x35, 0x19, 0x53, 0xcf, 0xb8, 0xda, 0x5d, + 0x42, 0x68, 0x30, 0x9b, 0x07, 0x9a, 0x01, 0x06, + 0x31, 0x59, 0xaa, 0x43, 0xab, 0x45, 0x2b, 0xaf, + 0xde, 0x2c, 0x7a, 0x64, 0x59, 0x32, 0x06, 0xd4, + 0x68, 0x79, 0xa8, 0xc9, 0xb5, 0x6b, 0xc8, 0xf6, + 0x39, 0xa5, 0x68, 0x4d, 0x9e, 0x85, 0x9a, 0x01, + 0x29, 0x28, 0x95, 0x5a, 0x4f, 0xf1, 0xe1, 0xd5, + 0x8f, 0x86, 0xae, 0xaa, 0xab, 0xd3, 0xab, 0xd7, + 0x29, 0x2f, 0xd6, 0x20, 0x8f, 0xd5, 0xae, 0x8a, + 0x5c, 0x2a, 0x33, 0xed, 0x11, 0x01, 0x52, 0x90, + 0x0c, 0xa9, 0xc0, 0x91, 0xac, 0x03, 0x87, 0x40, + 0x50, 0xe1, 0x30, 0x35, 0xeb, 0xd0, 0x0f, 0xd8, + 0x81, 0x35, 0x63, 0x16, 0xba, 0x01, 0x2c, 0x26, + 0xb7, 0x59, 0x87, 0x57, 0x83, 0xfe, 0x1f, 0xff, + 0xc4, 0x00, 0x33, 0x11, 0x00, 0x01, 0x03, 0x03, + 0x02, 0x04, 0x03, 0x03, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, + 0x00, 0x05, 0x11, 0x12, 0x31, 0x06, 0x21, 0x40, + 0x41, 0x13, 0x14, 0x61, 0x50, 0x52, 0x71, 0x10, + 0x16, 0x22, 0x25, 0x32, 0x33, 0x35, 0x42, 0x51, + 0x60, 0x91, 0xb1, 0xe1, 0xff, 0xda, 0x00, 0x08, + 0x01, 0x03, 0x01, 0x01, 0x3f, 0x01, 0xf9, 0x22, + 0xc6, 0x5c, 0xc7, 0x43, 0x2d, 0xee, 0x6b, 0xe6, + 0xb5, 0xc0, 0x8c, 0x8d, 0x3f, 0xcf, 0xf9, 0x57, + 0x0b, 0x63, 0xd6, 0xd5, 0x25, 0x0f, 0x63, 0x9f, + 0xe9, 0x5b, 0xf6, 0xf6, 0x05, 0x87, 0xf1, 0x16, + 0xeb, 0xf2, 0xd7, 0x16, 0x65, 0x4e, 0xb6, 0xac, + 0x76, 0xab, 0x34, 0xc8, 0x71, 0x23, 0xa8, 0x3c, + 0x32, 0xa3, 0xe9, 0x4e, 0x6a, 0x75, 0xc2, 0xb4, + 0x8e, 0x46, 0x8a, 0x14, 0x9e, 0x6a, 0x1d, 0x75, + 0x84, 0xfd, 0x60, 0xdd, 0x76, 0xab, 0xc4, 0xe6, + 0x1b, 0x8c, 0xea, 0x0a, 0xc6, 0xac, 0x6d, 0x4b, + 0x4f, 0x91, 0xb3, 0x60, 0xfb, 0xbf, 0xdd, 0x59, + 0xd5, 0x1c, 0xc6, 0x43, 0x4d, 0xab, 0x24, 0x6f, + 0x5c, 0x4e, 0x94, 0xa6, 0x17, 0x2f, 0x7b, 0xac, + 0x86, 0x86, 0x9d, 0x7d, 0x08, 0x78, 0xe0, 0x1a, + 0x1c, 0x2d, 0x08, 0x8c, 0x85, 0x9c, 0x54, 0x4e, + 0x1e, 0x8f, 0x11, 0xe4, 0xbc, 0xda, 0x8e, 0x45, + 0x27, 0xb0, 0xab, 0x95, 0xbd, 0xff, 0x00, 0x3c, + 0x16, 0xe6, 0xcb, 0x55, 0x71, 0x06, 0xb5, 0xc7, + 0x6e, 0x22, 0x3e, 0xd2, 0x8e, 0x2a, 0xc3, 0x6b, + 0x76, 0xdc, 0x95, 0x99, 0x1b, 0x9a, 0xba, 0x43, + 0x4c, 0xd8, 0xab, 0x6e, 0x94, 0x9f, 0x0d, 0x65, + 0x1d, 0x5f, 0x3e, 0xd5, 0xc3, 0xb7, 0x65, 0xa9, + 0x5e, 0x55, 0xf3, 0xf0, 0xaf, 0x4a, 0x07, 0x35, + 0x39, 0x68, 0x72, 0xea, 0xca, 0x16, 0x79, 0x24, + 0x13, 0x52, 0x9e, 0x66, 0x45, 0xd5, 0x94, 0xea, + 0xfa, 0x29, 0x19, 0xa4, 0xa8, 0x29, 0x20, 0x8a, + 0x73, 0x48, 0x07, 0x34, 0xff, 0x00, 0xdf, 0x2b, + 0xe3, 0xd6, 0x32, 0xea, 0xa3, 0xb8, 0x97, 0x51, + 0xb8, 0xa7, 0xf8, 0xa0, 0xa9, 0x8d, 0x0d, 0x27, + 0x0b, 0x3d, 0xea, 0xcb, 0x7c, 0x79, 0x52, 0x43, + 0x52, 0x55, 0x90, 0x6a, 0xfd, 0x6a, 0x98, 0xec, + 0xb2, 0xeb, 0x69, 0xc8, 0x22, 0x85, 0xa6, 0x69, + 0x23, 0x2d, 0x9a, 0x97, 0x72, 0x66, 0xcc, 0xc2, + 0x59, 0x3c, 0xd5, 0x8d, 0xaa, 0x55, 0xfa, 0x64, + 0xb2, 0x46, 0xad, 0x23, 0xd3, 0xaf, 0x07, 0x49, + 0x04, 0x76, 0xab, 0x4c, 0xd1, 0x3e, 0x28, 0x20, + 0xf3, 0x1b, 0xd3, 0xae, 0x16, 0xdb, 0x2b, 0xa9, + 0x32, 0x17, 0x29, 0xe5, 0x3a, 0xbe, 0xfe, 0xc1, + 0xb7, 0xdc, 0x1d, 0xb7, 0xb9, 0xe2, 0x37, 0x47, + 0x89, 0xa2, 0x3a, 0xde, 0x95, 0xa4, 0xd2, 0xb0, + 0x49, 0x23, 0x6f, 0xdc, 0x7f, 0xff, 0xc4, 0x00, + 0x27, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x11, 0x04, + 0x12, 0x10, 0x21, 0x31, 0x40, 0x13, 0x14, 0x22, + 0x32, 0x41, 0x50, 0x61, 0x42, 0x60, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, 0x3f, 0x01, + 0xe0, 0xcc, 0x10, 0x64, 0xcf, 0x37, 0x5e, 0x25, + 0x76, 0xa5, 0xbc, 0xd7, 0xe8, 0x6f, 0xf6, 0x70, + 0xd2, 0x74, 0x9a, 0x94, 0x66, 0x71, 0xb4, 0xc1, + 0x85, 0x18, 0x80, 0x83, 0xdf, 0x5f, 0xec, 0xe1, + 0x45, 0x67, 0x3b, 0xa6, 0x4b, 0xdf, 0xf9, 0x2f, + 0xdc, 0x2c, 0x9a, 0x3c, 0xee, 0xef, 0x1c, 0x95, + 0x19, 0x10, 0xea, 0xdc, 0x46, 0xd4, 0xb3, 0xae, + 0x0c, 0x12, 0x9b, 0x57, 0xc3, 0x38, 0x9a, 0x4e, + 0xac, 0xe6, 0x6a, 0x2e, 0x5b, 0x71, 0x89, 0x43, + 0xec, 0x78, 0x0e, 0x46, 0x7b, 0xcd, 0x55, 0x3f, + 0xd0, 0x83, 0x82, 0x7a, 0x68, 0x62, 0x3e, 0x62, + 0xa9, 0x5a, 0x1b, 0x97, 0x59, 0xd3, 0x94, 0x1d, + 0x62, 0x72, 0x51, 0xde, 0x38, 0xdc, 0x31, 0x06, + 0x93, 0xd5, 0xf9, 0x35, 0x1a, 0x75, 0x0b, 0x94, + 0x9a, 0x7b, 0x50, 0x26, 0xd3, 0x0d, 0xf5, 0xe3, + 0xac, 0x5a, 0x9a, 0xe6, 0xcc, 0x4d, 0x3a, 0x2f, + 0xc7, 0x7e, 0x46, 0x79, 0x19, 0xa8, 0xaf, 0xc3, + 0x7e, 0x50, 0x28, 0x26, 0x22, 0xec, 0x50, 0x3e, + 0x86, 0xda, 0x85, 0x83, 0x13, 0xc9, 0xb2, 0xb0, + 0xc4, 0x1c, 0xbf, 0xd1, 0xff, 0x00, 0xff, 0xc4, + 0x00, 0x49, 0x10, 0x00, 0x01, 0x03, 0x02, 0x03, + 0x04, 0x04, 0x09, 0x06, 0x0a, 0x0b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, + 0x11, 0x05, 0x12, 0x21, 0x13, 0x31, 0x41, 0x51, + 0x14, 0x22, 0x32, 0x71, 0x06, 0x10, 0x15, 0x23, + 0x42, 0x61, 0x81, 0x91, 0xb1, 0x24, 0x33, 0x40, + 0x72, 0x73, 0xc1, 0x20, 0x43, 0x50, 0x74, 0x83, + 0x92, 0xb2, 0xc3, 0xd1, 0xf0, 0x16, 0x30, 0x34, + 0x52, 0x62, 0xa1, 0xc2, 0xd2, 0xe1, 0xe2, 0xf1, + 0xf2, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, + 0x06, 0x3f, 0x02, 0xf1, 0x2e, 0x4b, 0xa1, 0x45, + 0x08, 0xde, 0x11, 0xbe, 0xbe, 0x66, 0x4f, 0xea, + 0xa7, 0xf8, 0xd3, 0xa6, 0x3a, 0x5c, 0x4e, 0xcf, + 0x7e, 0xd0, 0x01, 0xf9, 0x06, 0x5f, 0x70, 0xf8, + 0xf8, 0xa6, 0xdc, 0x81, 0xd6, 0x4f, 0xdf, 0x49, + 0x31, 0xc8, 0x0d, 0x25, 0x36, 0xf9, 0xdb, 0x53, + 0x6d, 0x15, 0x81, 0x91, 0x20, 0x6a, 0x6b, 0x45, + 0x03, 0xdd, 0xe2, 0xb1, 0x5a, 0x41, 0xf5, 0x9a, + 0xf9, 0xc4, 0xfb, 0xea, 0xc1, 0x69, 0x27, 0xd4, + 0x7e, 0x95, 0x2f, 0xb8, 0x7c, 0x7c, 0x51, 0x1c, + 0xd8, 0xb9, 0xd1, 0xf3, 0xdc, 0xae, 0xdd, 0x5d, + 0x2a, 0xfb, 0xd3, 0xb7, 0xbf, 0xb1, 0x3f, 0xf9, + 0x4f, 0xbe, 0xeb, 0x4e, 0x34, 0x97, 0x16, 0x72, + 0x95, 0x0b, 0x5e, 0x95, 0xaf, 0xe2, 0x8f, 0x8a, + 0x4c, 0xec, 0x49, 0xd7, 0x64, 0x3e, 0xf2, 0xee, + 0x02, 0x15, 0x95, 0x29, 0x1c, 0x05, 0x27, 0x05, + 0x05, 0xde, 0x84, 0x57, 0xbb, 0x3e, 0xbd, 0x8b, + 0xef, 0xa8, 0x53, 0x52, 0xe4, 0xc8, 0x8b, 0x4a, + 0xee, 0x95, 0x6a, 0xe3, 0x6b, 0xe6, 0x93, 0xec, + 0xac, 0xdf, 0x2b, 0x29, 0xe7, 0xd1, 0xd5, 0x4c, + 0xe2, 0x7e, 0x7d, 0x50, 0x9d, 0xfc, 0x6a, 0x1b, + 0xbe, 0x53, 0x7b, 0x58, 0xf2, 0xa7, 0x5d, 0x83, + 0xb5, 0x53, 0x6d, 0x9b, 0x15, 0xad, 0x19, 0x45, + 0xe9, 0xc8, 0x2c, 0x35, 0x24, 0xc8, 0x68, 0xe5, + 0x72, 0xed, 0x68, 0xdf, 0x79, 0xa4, 0xc8, 0x9c, + 0xb2, 0x84, 0x29, 0x59, 0x46, 0x51, 0x72, 0x4d, + 0x37, 0x32, 0x22, 0x8a, 0xd8, 0x5e, 0xeb, 0x8b, + 0x1a, 0x4b, 0x12, 0x5c, 0x52, 0xe4, 0xab, 0x50, + 0xc3, 0x29, 0xce, 0xba, 0x6a, 0x23, 0x6e, 0x3a, + 0xdc, 0xa7, 0x0d, 0x92, 0xcb, 0xcd, 0x94, 0x9d, + 0xd7, 0xfa, 0x03, 0xee, 0x45, 0x48, 0x5b, 0xe9, + 0x17, 0x4a, 0x54, 0x37, 0xd7, 0xcd, 0xc7, 0xfd, + 0x53, 0xfc, 0x69, 0xc8, 0xee, 0xa1, 0x90, 0xda, + 0xf7, 0xe5, 0x49, 0xbf, 0xc7, 0xc4, 0xa6, 0x9a, + 0x2a, 0xcd, 0x15, 0x8c, 0xcb, 0xb8, 0xa9, 0x33, + 0x9f, 0xec, 0x47, 0x68, 0xa8, 0x9f, 0xe7, 0xdb, + 0x51, 0xfa, 0x39, 0x56, 0xcd, 0xb0, 0x7b, 0x42, + 0xda, 0xd3, 0x72, 0x00, 0xcc, 0x06, 0x8a, 0x1c, + 0xc5, 0x21, 0x63, 0x72, 0x85, 0xfc, 0x48, 0xfb, + 0x4f, 0xdd, 0x54, 0x3f, 0xce, 0x7f, 0xd2, 0x6a, + 0x2a, 0x3c, 0x93, 0x89, 0x2f, 0x65, 0x19, 0x23, + 0x30, 0x8d, 0xd4, 0x3d, 0x5e, 0x7c, 0xaa, 0xdd, + 0x15, 0xb4, 0x31, 0x39, 0xbd, 0xab, 0xac, 0xa7, + 0xb3, 0x75, 0x01, 0x7a, 0x9f, 0x87, 0x47, 0x75, + 0x0e, 0x33, 0x21, 0x1e, 0x6c, 0xad, 0x5a, 0x22, + 0xfd, 0x95, 0x77, 0x8a, 0x6d, 0xa4, 0x2f, 0x6e, + 0xeb, 0x9e, 0x71, 0xe9, 0x17, 0xbe, 0xd5, 0x47, + 0x8d, 0x3f, 0x01, 0xcd, 0x60, 0x61, 0xb1, 0xca, + 0x55, 0xf6, 0xab, 0x1f, 0xcf, 0xba, 0xb1, 0x2c, + 0x0a, 0x49, 0xb3, 0xad, 0xa8, 0xad, 0x09, 0x3c, + 0xc6, 0x8a, 0xfb, 0xaa, 0x6e, 0x32, 0x60, 0x74, + 0xc8, 0x92, 0x06, 0x8e, 0xf0, 0x03, 0x4e, 0x3c, + 0x0e, 0x95, 0x10, 0x4d, 0x8c, 0xb8, 0x72, 0xdb, + 0x70, 0x29, 0xa7, 0x97, 0xe8, 0x9f, 0xac, 0x3e, + 0x83, 0xd3, 0xe3, 0xa7, 0x2e, 0xbe, 0x75, 0x23, + 0x77, 0x7f, 0x8f, 0x10, 0x75, 0x29, 0x25, 0x6f, + 0xb8, 0x1a, 0x16, 0x15, 0x88, 0x39, 0xb2, 0x5e, + 0x77, 0x96, 0x94, 0x76, 0x75, 0xb5, 0x58, 0x8b, + 0x1f, 0x5f, 0x89, 0x8f, 0xa8, 0x3e, 0x1e, 0x24, + 0xcf, 0x0e, 0x7c, 0x8c, 0x39, 0x6d, 0xbd, 0xba, + 0xbd, 0x8b, 0x7c, 0x6a, 0x14, 0x64, 0x2b, 0x3b, + 0xfb, 0x5d, 0xa6, 0x44, 0xea, 0x72, 0xd8, 0xeb, + 0x50, 0xe3, 0x3e, 0x24, 0xe7, 0x6d, 0x84, 0xa1, + 0x69, 0xd8, 0x13, 0xc2, 0xa4, 0x4c, 0x4c, 0x55, + 0x34, 0xd0, 0xea, 0x42, 0x8e, 0x45, 0x96, 0xed, + 0xb8, 0xdb, 0x80, 0xa9, 0x53, 0xa7, 0x49, 0x6d, + 0x53, 0xe5, 0x1e, 0x92, 0xb9, 0x67, 0xf1, 0x6a, + 0xe0, 0x9e, 0xee, 0x15, 0x22, 0x1e, 0x22, 0x17, + 0x9a, 0x33, 0x64, 0xc6, 0x25, 0x27, 0xaf, 0xfe, + 0x0a, 0x38, 0x93, 0xf3, 0xa6, 0x22, 0x5c, 0x87, + 0x54, 0xb7, 0xd3, 0x1d, 0xf2, 0x8b, 0x1b, 0xee, + 0x35, 0x12, 0x44, 0x27, 0x5e, 0x94, 0x84, 0xd9, + 0x6f, 0x67, 0x39, 0xd6, 0x2f, 0xda, 0xb9, 0xee, + 0xa9, 0x4c, 0xce, 0x61, 0xd7, 0xa0, 0x85, 0x82, + 0xcc, 0xe6, 0x1b, 0xba, 0x72, 0xab, 0x50, 0x15, + 0x50, 0x63, 0xe0, 0x30, 0x54, 0xb9, 0x19, 0xee, + 0xec, 0x90, 0xce, 0x40, 0x07, 0xae, 0x90, 0x8b, + 0xdf, 0x28, 0xb5, 0xfe, 0x80, 0xe3, 0x0e, 0x0b, + 0xb6, 0xe0, 0xca, 0x6b, 0x34, 0x87, 0x83, 0x91, + 0x46, 0xb9, 0x46, 0xf5, 0x52, 0xa4, 0x43, 0x67, + 0x64, 0xb6, 0xb5, 0x52, 0x53, 0xc5, 0x34, 0x98, + 0xd2, 0x1c, 0xd8, 0xb8, 0x95, 0x1d, 0xe3, 0x43, + 0x47, 0xe5, 0x8d, 0x7b, 0xe9, 0xe7, 0x53, 0xd4, + 0x68, 0xac, 0x95, 0x3a, 0xa1, 0x40, 0xec, 0x76, + 0xee, 0x7f, 0x7d, 0xdd, 0x6a, 0xc3, 0x41, 0x5a, + 0x50, 0xc0, 0x3c, 0x9f, 0x0f, 0xa4, 0x95, 0x65, + 0xda, 0x66, 0x39, 0x37, 0x5e, 0xf4, 0x33, 0x04, + 0xe6, 0xae, 0xc8, 0xf7, 0x57, 0x64, 0x55, 0xac, + 0x2d, 0xca, 0xbb, 0x22, 0xb4, 0x00, 0x57, 0x64, + 0x55, 0xb2, 0x8b, 0x72, 0xae, 0xaa, 0x42, 0x7b, + 0xbe, 0x86, 0x41, 0xd4, 0x1d, 0x2d, 0x4e, 0x32, + 0x47, 0x9b, 0x3d, 0x66, 0xcf, 0x31, 0x48, 0x40, + 0xf4, 0x8d, 0xa9, 0xb8, 0xed, 0x0b, 0x25, 0x03, + 0xf0, 0x11, 0xf6, 0x9f, 0xba, 0xa8, 0xe9, 0xc2, + 0xa6, 0xcb, 0x1b, 0x66, 0x4b, 0xa5, 0x84, 0x2f, + 0x4e, 0xaf, 0x21, 0x4b, 0x42, 0xd5, 0xb1, 0x9c, + 0x84, 0xd9, 0xe4, 0x36, 0xab, 0x1f, 0xac, 0x9a, + 0xc7, 0x31, 0x37, 0x25, 0x3d, 0x36, 0x43, 0x32, + 0x8c, 0x66, 0x83, 0xeb, 0x25, 0x29, 0xd4, 0x6b, + 0x6f, 0x6d, 0x31, 0x88, 0x7f, 0x4a, 0xe5, 0x74, + 0xa7, 0x53, 0x9f, 0x23, 0x44, 0x14, 0xa0, 0xf2, + 0xcb, 0x4d, 0xe1, 0xee, 0xcf, 0x53, 0x2f, 0x09, + 0x4a, 0x53, 0x98, 0x83, 0x7b, 0xd4, 0xd5, 0xae, + 0x2c, 0x3b, 0xcd, 0xad, 0xea, 0xac, 0x3f, 0x07, + 0x47, 0x84, 0x13, 0x96, 0xdc, 0xac, 0x97, 0x71, + 0x4a, 0xd4, 0x66, 0x55, 0xa9, 0xd4, 0xbb, 0x8b, + 0xcb, 0xc4, 0x20, 0x3c, 0xc2, 0x81, 0x59, 0x5e, + 0x57, 0x18, 0x58, 0xd4, 0x1f, 0x8d, 0x4c, 0xda, + 0xf8, 0x41, 0x3a, 0x3e, 0xc3, 0x2d, 0xb2, 0x2a, + 0xf7, 0xbd, 0x46, 0xc2, 0x25, 0x62, 0x0a, 0xc5, + 0x22, 0xbe, 0x50, 0x2e, 0xe0, 0xeb, 0x0c, 0xd5, + 0x1f, 0x0a, 0x46, 0x27, 0x31, 0x10, 0x9e, 0x29, + 0x51, 0x6c, 0x3c, 0x79, 0x5e, 0xc2, 0x9e, 0x40, + 0x71, 0xc6, 0xba, 0x9a, 0x2d, 0xb5, 0x59, 0x43, + 0xdb, 0x53, 0xe7, 0xbd, 0x88, 0xcb, 0x54, 0xbb, + 0x38, 0xa4, 0xbb, 0xb5, 0x37, 0x4e, 0x4d, 0xd6, + 0xa6, 0xe1, 0x62, 0xf2, 0x5d, 0x79, 0x13, 0x1a, + 0x0a, 0x64, 0xbc, 0xab, 0xd8, 0x9d, 0x53, 0x6e, + 0xfa, 0x6a, 0x26, 0x1e, 0xb5, 0x37, 0x3a, 0x49, + 0x24, 0x29, 0x06, 0xc5, 0x28, 0x48, 0xba, 0x8d, + 0x4f, 0x91, 0x37, 0x10, 0x96, 0xeb, 0xa5, 0x45, + 0xa0, 0x76, 0xa7, 0xa8, 0x2c, 0x0d, 0xc7, 0xae, + 0xb1, 0x04, 0x3b, 0xe1, 0x04, 0xe6, 0x13, 0x18, + 0x80, 0x32, 0x2a, 0xf7, 0xdf, 0xfc, 0x29, 0xb2, + 0x71, 0x97, 0xb1, 0x48, 0xab, 0x41, 0x43, 0xcc, + 0xc8, 0x55, 0x94, 0xdf, 0x25, 0x8f, 0x75, 0xaa, + 0x63, 0x89, 0x93, 0x22, 0x76, 0x1b, 0x16, 0x46, + 0xc9, 0x48, 0x7d, 0x79, 0x85, 0x8f, 0x0f, 0xf9, + 0xa7, 0xf1, 0x5c, 0x32, 0x5b, 0xad, 0x14, 0x27, + 0x3a, 0x16, 0xca, 0xf2, 0x90, 0x79, 0x1a, 0xc2, + 0xf2, 0x62, 0xf2, 0xe1, 0xc7, 0xe8, 0xa9, 0x75, + 0xc7, 0xc2, 0xf3, 0x2d, 0xe7, 0x17, 0xad, 0xbb, + 0x85, 0x4a, 0xc0, 0xd5, 0xe1, 0x04, 0xe4, 0xb4, + 0xce, 0x7b, 0x3a, 0x15, 0xd6, 0x36, 0xac, 0x49, + 0x6e, 0xcb, 0x5e, 0x25, 0x75, 0xa3, 0xa2, 0xc9, + 0x7b, 0x7a, 0x6f, 0xbc, 0x1e, 0xeb, 0x54, 0x79, + 0xed, 0xf8, 0x5b, 0x29, 0x52, 0x9c, 0x40, 0x5f, + 0x56, 0xca, 0x6d, 0x27, 0x96, 0x5a, 0x0c, 0xe2, + 0x8a, 0xda, 0x4b, 0x69, 0x6a, 0x4e, 0xda, 0xf7, + 0xda, 0x0e, 0x0a, 0xfc, 0x1d, 0x9b, 0xa2, 0xca, + 0x1d, 0x95, 0x8d, 0xe2, 0x81, 0x69, 0xc6, 0x56, + 0x01, 0xb8, 0x55, 0xed, 0x43, 0x37, 0x6a, 0xda, + 0xfe, 0x02, 0x3e, 0xd3, 0xf7, 0x55, 0x80, 0x7d, + 0x83, 0x9f, 0x7d, 0x0f, 0x08, 0xf0, 0x5b, 0xa1, + 0xb0, 0xac, 0xcf, 0x34, 0x9f, 0x47, 0xfe, 0xa6, + 0xb1, 0x01, 0x8a, 0x84, 0xa6, 0x34, 0xc9, 0xaa, + 0x4a, 0x82, 0xbb, 0x37, 0x55, 0xad, 0xaf, 0x0a, + 0xdb, 0x61, 0x58, 0xa3, 0x91, 0xd7, 0xe8, 0x87, + 0x3f, 0xdc, 0x2b, 0x12, 0xc2, 0x71, 0x17, 0x4c, + 0x85, 0x43, 0xdc, 0xe2, 0x8e, 0x62, 0x35, 0xb1, + 0x17, 0xe3, 0x58, 0x0f, 0xe8, 0x7f, 0x6c, 0xd3, + 0xff, 0x00, 0x50, 0xfc, 0x2b, 0x12, 0xf2, 0x76, + 0x27, 0xe4, 0xe2, 0x9c, 0xb9, 0xbc, 0xd8, 0x56, + 0x6d, 0xf4, 0xfb, 0x38, 0xf2, 0x56, 0xee, 0x36, + 0x16, 0x43, 0x4f, 0xb8, 0xbb, 0xa7, 0x37, 0x77, + 0xc2, 0xb0, 0xe5, 0x2b, 0x40, 0x42, 0x2c, 0x7d, + 0x86, 0x9e, 0x24, 0xd8, 0x04, 0x1f, 0x85, 0x4e, + 0xd3, 0xd0, 0x91, 0xf0, 0x35, 0xe0, 0xee, 0x37, + 0x1a, 0xe1, 0xf8, 0x8d, 0x21, 0x2a, 0x50, 0xe5, + 0xe8, 0x9f, 0x7d, 0x63, 0x9e, 0x11, 0xc8, 0x46, + 0x54, 0x88, 0x66, 0x2c, 0x74, 0x9e, 0x1d, 0x5e, + 0xb9, 0xf7, 0xd4, 0xcf, 0xb7, 0x3f, 0xb2, 0x2b, + 0x16, 0xf9, 0x7c, 0xb8, 0x5b, 0x35, 0x0f, 0xec, + 0xae, 0x65, 0xcd, 0xa9, 0xdf, 0x53, 0x1f, 0x77, + 0x11, 0x76, 0x53, 0x4f, 0x84, 0x00, 0xa9, 0x6b, + 0xba, 0x81, 0x17, 0xd2, 0xfe, 0xda, 0xf0, 0xc2, + 0x34, 0x96, 0xc3, 0xac, 0xb8, 0xfa, 0x42, 0x92, + 0x7b, 0x8d, 0x4f, 0xc3, 0xd2, 0x4b, 0xb8, 0x56, + 0x20, 0x8b, 0x24, 0xab, 0x77, 0xff, 0x00, 0x42, + 0xb0, 0x9f, 0xcd, 0x5a, 0xfd, 0x91, 0x58, 0x9f, + 0xe9, 0x3e, 0xea, 0x4c, 0x2c, 0x4e, 0xdd, 0x1e, + 0x5a, 0xf6, 0x42, 0xfa, 0x75, 0xb7, 0x8d, 0x78, + 0x6e, 0xa2, 0xf6, 0x13, 0x8a, 0xb8, 0xcb, 0x9c, + 0x03, 0x9a, 0x1f, 0xd6, 0x15, 0x88, 0x44, 0x9e, + 0xe1, 0x7d, 0x70, 0xd6, 0x90, 0x97, 0x54, 0x6e, + 0x4d, 0xef, 0xa5, 0xf8, 0xf6, 0x7f, 0xab, 0x18, + 0xc9, 0xc6, 0x55, 0xe5, 0x00, 0xac, 0xd9, 0x84, + 0x71, 0x97, 0x75, 0xb7, 0x5e, 0x98, 0xc5, 0x46, + 0x2b, 0xb2, 0x76, 0x38, 0xca, 0xd2, 0x03, 0x00, + 0xa4, 0x0e, 0x37, 0xd7, 0x5b, 0xeb, 0x4a, 0x42, + 0xc0, 0x52, 0x54, 0x2c, 0x41, 0xe3, 0x58, 0x8e, + 0x14, 0xda, 0xd4, 0x88, 0xb2, 0xdd, 0xda, 0xa7, + 0x4f, 0x9b, 0xdd, 0xf7, 0x8a, 0xd8, 0xc2, 0xf0, + 0x9e, 0x6c, 0x78, 0x7b, 0x83, 0x2a, 0x4e, 0x72, + 0x07, 0xd6, 0xbd, 0x2d, 0xa8, 0xd9, 0x96, 0xe3, + 0x86, 0xee, 0x3c, 0xe6, 0xaa, 0x59, 0xa4, 0x62, + 0xcb, 0xc5, 0x8a, 0x24, 0xb4, 0x41, 0x67, 0x2b, + 0x02, 0xc8, 0xb1, 0xb8, 0xe3, 0xad, 0x29, 0x86, + 0xe4, 0x86, 0x64, 0x29, 0x39, 0x76, 0xfb, 0x3b, + 0xf7, 0x9c, 0xb7, 0xa7, 0x16, 0xc6, 0x22, 0xa7, + 0x9a, 0x77, 0xe7, 0x1a, 0x5b, 0x43, 0x5e, 0x5a, + 0xde, 0x9b, 0x9c, 0xd4, 0x95, 0xe1, 0xf3, 0xd3, + 0x6f, 0x3c, 0x84, 0xde, 0xf6, 0xdd, 0xa7, 0x3a, + 0x8e, 0x31, 0x19, 0x8b, 0x77, 0x11, 0x63, 0xb1, + 0x39, 0x94, 0x06, 0xd5, 0xea, 0xd2, 0xb6, 0x13, + 0x3c, 0x28, 0x99, 0x22, 0x19, 0xd1, 0x4d, 0x25, + 0xb0, 0x92, 0x47, 0x2b, 0xde, 0xbc, 0x91, 0x05, + 0xee, 0x82, 0xc6, 0x4d, 0x99, 0x56, 0x4c, 0xe7, + 0x2f, 0x1f, 0x69, 0xe7, 0x4e, 0x60, 0xf2, 0xa5, + 0x74, 0xc8, 0xe5, 0x05, 0xa4, 0x2b, 0x67, 0x94, + 0xa5, 0x36, 0xff, 0x00, 0x3a, 0x4e, 0x0b, 0x16, + 0x4f, 0x46, 0x6f, 0x26, 0xcd, 0x4e, 0xec, 0xee, + 0x48, 0xf4, 0xbd, 0xf5, 0x2a, 0x2c, 0x4c, 0x52, + 0xe8, 0x7b, 0x51, 0xb4, 0x60, 0x1c, 0x8a, 0xe7, + 0xbf, 0x97, 0x0a, 0x75, 0x50, 0xf1, 0xf9, 0x51, + 0xd4, 0xef, 0x6f, 0x66, 0x80, 0x2f, 0x4c, 0x4a, + 0x99, 0x8d, 0xca, 0xc4, 0x36, 0x17, 0x53, 0x6d, + 0x3c, 0x3a, 0xa1, 0x5c, 0x0d, 0x4a, 0x9a, 0x71, + 0x33, 0x27, 0xa5, 0x9c, 0xcf, 0xa0, 0xb2, 0x00, + 0x51, 0xf5, 0x6b, 0xa5, 0x3b, 0x0e, 0x5a, 0x73, + 0x36, 0xbe, 0x3c, 0x52, 0x79, 0x8a, 0x8d, 0x0d, + 0x2e, 0xe6, 0x53, 0x0c, 0xa5, 0xa0, 0xe1, 0x4f, + 0x21, 0x6b, 0xda, 0x8e, 0x30, 0x9c, 0x58, 0xaa, + 0x62, 0xcd, 0xdc, 0xbc, 0x71, 0x95, 0x57, 0xde, + 0x2d, 0x7d, 0x29, 0x70, 0x5e, 0x51, 0x42, 0x14, + 0xa4, 0xab, 0x32, 0x77, 0x8b, 0x1b, 0xd1, 0x61, + 0x8f, 0x0a, 0x26, 0xb7, 0x0b, 0x70, 0x69, 0x49, + 0xcc, 0xa0, 0x39, 0x66, 0xbd, 0x74, 0x68, 0x60, + 0xd8, 0x9c, 0xcb, 0x5a, 0xfb, 0x4b, 0x3e, 0xbf, + 0xc8, 0x9f, 0xff, 0xc4, 0x00, 0x2a, 0x10, 0x01, + 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x03, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x81, + 0x10, 0x71, 0xf0, 0x91, 0xa1, 0xb1, 0x30, 0x40, + 0xc1, 0xd1, 0x20, 0x50, 0xf1, 0xe1, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x3f, 0x21, + 0xf4, 0xa0, 0xdb, 0x20, 0x1d, 0xab, 0x94, 0xf4, + 0x9a, 0x7d, 0x74, 0x1c, 0xe2, 0xf5, 0x4b, 0xd2, + 0x20, 0xde, 0x22, 0xbf, 0xdf, 0xfc, 0x07, 0x44, + 0xe2, 0x05, 0x28, 0xd0, 0x2e, 0xf1, 0x05, 0x3b, + 0xa7, 0x6a, 0xde, 0x71, 0x2e, 0xc2, 0xe4, 0x5c, + 0x12, 0x94, 0xff, 0x00, 0x45, 0x7e, 0x9d, 0x94, + 0x90, 0x13, 0xfe, 0x3e, 0x76, 0x72, 0x40, 0xfe, + 0xe2, 0xe5, 0xcf, 0x80, 0xe8, 0x9c, 0x4b, 0x25, + 0x57, 0x7f, 0x87, 0x77, 0x88, 0x2a, 0xd7, 0x32, + 0x0e, 0x38, 0xa2, 0xc1, 0xc7, 0xc8, 0x07, 0x4f, + 0x10, 0x41, 0x49, 0xca, 0xf7, 0x23, 0x98, 0xcc, + 0xe8, 0xdf, 0x5e, 0x06, 0xf0, 0x06, 0x61, 0xe0, + 0x14, 0xe9, 0x75, 0xf9, 0x10, 0x6e, 0x56, 0xa8, + 0x87, 0xba, 0x17, 0xe1, 0x89, 0x04, 0x49, 0x61, + 0xaa, 0xbd, 0xe3, 0xd4, 0xb6, 0x04, 0x80, 0xc0, + 0xed, 0x59, 0xcc, 0x10, 0x32, 0x48, 0x1d, 0x05, + 0xfc, 0xcc, 0x7d, 0x71, 0x17, 0x18, 0xf1, 0x12, + 0xb1, 0xb7, 0xf0, 0xc5, 0xeb, 0xc4, 0xb0, 0x38, + 0x8a, 0xa1, 0x1a, 0x44, 0xe2, 0x1f, 0x99, 0xb1, + 0xd1, 0xd6, 0x8d, 0x79, 0x88, 0x49, 0xf8, 0x8b, + 0xf0, 0x71, 0xd7, 0xf6, 0x19, 0x72, 0xce, 0x05, + 0x37, 0x8f, 0x6b, 0x95, 0xf6, 0x24, 0x34, 0xc1, + 0x91, 0x36, 0xf4, 0x64, 0x54, 0xf5, 0x25, 0xd5, + 0xfe, 0x62, 0x4c, 0xae, 0xf9, 0xdc, 0x40, 0xe3, + 0x2c, 0xb9, 0x0f, 0xf9, 0x3c, 0xc3, 0x1b, 0x77, + 0xfc, 0x43, 0xb5, 0x01, 0x37, 0xdf, 0xd3, 0xe0, + 0x77, 0x43, 0xf4, 0x71, 0xde, 0x45, 0x12, 0xf0, + 0x67, 0x3f, 0xaa, 0x62, 0x10, 0xb2, 0x09, 0x6a, + 0x1c, 0x78, 0xf7, 0xdc, 0x33, 0xa8, 0x72, 0x05, + 0x85, 0x38, 0xc9, 0x7d, 0x71, 0xda, 0x12, 0x7e, + 0x4c, 0x32, 0x9b, 0xf2, 0x67, 0x1d, 0xa3, 0x48, + 0xd4, 0xcd, 0x62, 0x0f, 0xb8, 0x43, 0x85, 0xc5, + 0x8e, 0x92, 0xb3, 0xee, 0xfa, 0xc4, 0x13, 0x99, + 0x87, 0x0b, 0x84, 0x6a, 0xc3, 0x3c, 0x4a, 0x9f, + 0x22, 0xd5, 0xc2, 0x6e, 0x07, 0x54, 0xe3, 0xac, + 0x3f, 0x5d, 0x2c, 0x89, 0x38, 0xff, 0x00, 0x50, + 0xfb, 0x3d, 0x73, 0x9d, 0x06, 0xb0, 0x65, 0xf1, + 0x96, 0x62, 0xe4, 0x50, 0x58, 0x13, 0x8f, 0xac, + 0x50, 0x82, 0xd9, 0xb4, 0x79, 0xc4, 0xf8, 0xbe, + 0x89, 0x74, 0x5c, 0xb8, 0x61, 0x50, 0x5d, 0xfd, + 0xf4, 0xd2, 0xe5, 0xe5, 0xa3, 0x5b, 0x42, 0xd3, + 0x8b, 0x62, 0x40, 0x56, 0x5c, 0xa1, 0x13, 0xbc, + 0x4f, 0x82, 0xd0, 0xd2, 0x94, 0x75, 0xb8, 0xf1, + 0x16, 0x6b, 0xb4, 0x27, 0x8b, 0x76, 0x0d, 0x8e, + 0xfd, 0x88, 0xdf, 0xee, 0x54, 0x83, 0x5a, 0x6e, + 0xea, 0xbb, 0x7b, 0x42, 0xd2, 0x68, 0x0b, 0xd4, + 0x15, 0xba, 0x79, 0xeb, 0x33, 0x44, 0x58, 0x64, + 0x01, 0xcc, 0xaa, 0xe3, 0x58, 0xa0, 0x0e, 0x55, + 0x9c, 0x20, 0xd6, 0x3a, 0x6a, 0x6c, 0x27, 0x4e, + 0x5a, 0xdb, 0x9e, 0x5b, 0x7a, 0x47, 0x6a, 0xd1, + 0xef, 0x51, 0xfa, 0xf5, 0x2d, 0x97, 0x23, 0xd9, + 0x84, 0xd5, 0x34, 0xb4, 0xe9, 0x0f, 0x48, 0x25, + 0xc7, 0x60, 0xd7, 0x37, 0x93, 0x70, 0x80, 0x30, + 0xcf, 0x97, 0x9b, 0x09, 0x43, 0xbe, 0x16, 0x8d, + 0xa7, 0x0a, 0x48, 0x46, 0x5b, 0xa3, 0xab, 0x06, + 0x60, 0x1f, 0x01, 0xa8, 0x28, 0x28, 0xc0, 0x1c, + 0x4b, 0xdf, 0x0b, 0xac, 0x5c, 0xb4, 0x9d, 0x1e, + 0xbb, 0x8d, 0x57, 0x55, 0xc4, 0x1c, 0x3a, 0x94, + 0xb5, 0xe9, 0x6d, 0x5c, 0x7d, 0xa6, 0x4f, 0x8d, + 0x62, 0x7f, 0xc1, 0x97, 0x99, 0x8e, 0x84, 0x5d, + 0x6a, 0xaf, 0x29, 0x33, 0xf3, 0x1d, 0x18, 0x87, + 0xd0, 0x4f, 0x45, 0x4c, 0x4b, 0x97, 0xe9, 0x72, + 0xfd, 0x2e, 0x5c, 0xb9, 0x7f, 0xe6, 0x97, 0x0c, + 0x70, 0x4a, 0x5c, 0x91, 0xf6, 0x09, 0x63, 0x97, + 0xfa, 0xd4, 0x5d, 0xa8, 0x4f, 0x96, 0xa6, 0x39, + 0x19, 0xee, 0xf2, 0xca, 0xf5, 0xf8, 0x1d, 0xd1, + 0x95, 0x29, 0xca, 0x6c, 0xdb, 0xec, 0x16, 0x93, + 0x2b, 0x44, 0x87, 0x4a, 0xed, 0x83, 0xf6, 0x71, + 0x07, 0xa7, 0x3b, 0x4a, 0x0e, 0xe6, 0xd3, 0x65, + 0xb8, 0x49, 0xb9, 0xdb, 0x8e, 0x98, 0x89, 0xfd, + 0x5b, 0xe0, 0x1c, 0x59, 0x7b, 0x07, 0x54, 0xb5, + 0xde, 0xe6, 0xb8, 0xa8, 0xd7, 0x13, 0x55, 0x09, + 0x64, 0x2e, 0x8e, 0x9a, 0x1e, 0x49, 0xaa, 0xcf, + 0x71, 0x8d, 0xdf, 0xb4, 0xa5, 0x33, 0xd7, 0x42, + 0xa1, 0xbe, 0xa3, 0xe1, 0x98, 0x33, 0x55, 0xa5, + 0xa4, 0x9c, 0x18, 0x96, 0xda, 0x5a, 0xdd, 0xc1, + 0x84, 0x81, 0x35, 0x02, 0x12, 0x06, 0x9d, 0x8f, + 0x3d, 0x65, 0x17, 0x9d, 0x08, 0x16, 0x2e, 0x83, + 0x1e, 0xf5, 0x37, 0x1f, 0x26, 0x87, 0x4e, 0x38, + 0x22, 0x64, 0x49, 0x15, 0x1d, 0x83, 0x6e, 0x66, + 0x73, 0xba, 0xaa, 0xee, 0xd7, 0x19, 0x80, 0x62, + 0x16, 0x5d, 0x5e, 0xfd, 0x0d, 0xd9, 0x75, 0x2f, + 0xf1, 0x2a, 0x6d, 0x04, 0xf0, 0xd6, 0xbb, 0x21, + 0x75, 0x7b, 0x0b, 0x50, 0x6b, 0xf7, 0xd4, 0x7b, + 0x27, 0x5f, 0x10, 0x72, 0x60, 0x7f, 0x3e, 0x66, + 0xff, 0x00, 0x1c, 0x1a, 0x05, 0x63, 0x5c, 0xca, + 0xed, 0x10, 0x56, 0x97, 0x0b, 0x7d, 0xc3, 0x86, + 0xc8, 0xfe, 0x98, 0x0d, 0x41, 0x6b, 0xb7, 0x1a, + 0xac, 0x6a, 0x33, 0x66, 0x1c, 0x0b, 0xec, 0x3c, + 0x35, 0xe3, 0xfc, 0x6e, 0x9b, 0x3b, 0x7f, 0xfe, + 0xbb, 0x43, 0x7a, 0x75, 0x34, 0x53, 0xd2, 0xa6, + 0x2b, 0x60, 0xc3, 0x57, 0xea, 0xcf, 0x81, 0xdd, + 0x10, 0xc2, 0x1b, 0xb4, 0x35, 0xc5, 0x9c, 0xb5, + 0xf5, 0x0e, 0x25, 0xf2, 0x2e, 0x80, 0x12, 0x1e, + 0xe6, 0x9e, 0xb5, 0x01, 0xc1, 0x72, 0x1c, 0x9d, + 0x34, 0xbf, 0x68, 0xe9, 0x0b, 0x6a, 0x07, 0xd2, + 0xd6, 0x62, 0x65, 0xee, 0x4c, 0x4f, 0x97, 0xb4, + 0xf7, 0xb3, 0x41, 0xe9, 0xbd, 0x7f, 0xec, 0xc2, + 0x9f, 0xea, 0xae, 0x0a, 0x6e, 0xb6, 0xfb, 0x10, + 0xb0, 0x9c, 0xa7, 0x36, 0x47, 0xde, 0x00, 0x84, + 0x2a, 0xf1, 0x01, 0x32, 0xb2, 0xc7, 0x78, 0x2c, + 0x5b, 0x6f, 0x4b, 0xdf, 0x83, 0xf3, 0x8a, 0x03, + 0xa5, 0x41, 0x60, 0xf7, 0x5b, 0xf7, 0xe9, 0xe9, + 0xd1, 0x4a, 0x5b, 0x77, 0xba, 0xf2, 0xb5, 0x2d, + 0x70, 0xad, 0x18, 0x3a, 0x14, 0xd2, 0x88, 0x21, + 0xfe, 0xbd, 0xff, 0x00, 0x24, 0x7a, 0x68, 0xdf, + 0x29, 0x13, 0xdb, 0x47, 0x73, 0xed, 0x25, 0x7c, + 0xde, 0xd1, 0x41, 0x00, 0x66, 0x8c, 0x5e, 0xe1, + 0xc1, 0xeb, 0x47, 0x35, 0x08, 0x45, 0x2c, 0x9e, + 0x0c, 0x3f, 0x89, 0x56, 0x95, 0x61, 0x32, 0xae, + 0x83, 0xb7, 0x7f, 0xd2, 0x0a, 0x81, 0xa7, 0x86, + 0x69, 0x67, 0x1b, 0xb6, 0x8e, 0x9d, 0x62, 0xae, + 0x3a, 0xc3, 0x29, 0xa2, 0xc7, 0x6d, 0x9f, 0x77, + 0x68, 0xa4, 0x58, 0x7d, 0x81, 0xd8, 0xca, 0x4e, + 0x80, 0x32, 0x7a, 0x86, 0x72, 0x1f, 0x45, 0xae, + 0xf1, 0x75, 0x07, 0x43, 0xe8, 0x85, 0x1f, 0x89, + 0x92, 0x1c, 0x6f, 0xf4, 0x87, 0x68, 0x67, 0x3e, + 0x29, 0x55, 0x34, 0xe8, 0x5e, 0x77, 0x05, 0xed, + 0x56, 0x18, 0xf0, 0x75, 0x33, 0xce, 0x2f, 0x98, + 0x0f, 0x1e, 0x81, 0x58, 0xbb, 0x1a, 0x2a, 0xe7, + 0x0c, 0x73, 0x2f, 0x31, 0xb1, 0x87, 0x51, 0x96, + 0x21, 0x2c, 0x2a, 0xbb, 0x0d, 0xdb, 0xaf, 0x7f, + 0xa4, 0xa0, 0x4a, 0xef, 0x47, 0xae, 0xfc, 0x46, + 0xef, 0x91, 0x2c, 0x31, 0x0e, 0x53, 0x67, 0xdd, + 0x1d, 0x91, 0xc0, 0x0e, 0xd0, 0x1c, 0xb6, 0x1c, + 0x8e, 0x38, 0x80, 0xd7, 0x8a, 0x83, 0xfc, 0x0b, + 0xc3, 0x6d, 0xe6, 0xa2, 0x28, 0x3d, 0xaa, 0x61, + 0x2b, 0xcf, 0x0f, 0xca, 0x64, 0x8b, 0x8b, 0xaa, + 0x73, 0x9e, 0xec, 0xb1, 0x63, 0x00, 0xc5, 0xa5, + 0x07, 0x35, 0x77, 0xfc, 0xc7, 0x13, 0x6d, 0xba, + 0x69, 0x46, 0x8b, 0x71, 0xed, 0x29, 0xea, 0xb0, + 0x3d, 0x87, 0x78, 0x80, 0x5b, 0x08, 0x62, 0x98, + 0xc9, 0xda, 0xea, 0xfc, 0xc4, 0xfe, 0x3c, 0x18, + 0xf2, 0x91, 0xf4, 0x94, 0xfb, 0x71, 0x5d, 0x0e, + 0x1f, 0x4a, 0xf3, 0x1d, 0x4a, 0xfb, 0x1c, 0x5f, + 0xe2, 0x26, 0x6e, 0xd1, 0x5f, 0x52, 0xbf, 0x8f, + 0xf4, 0x9f, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, + 0x91, 0x92, 0xac, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0xb8, 0xfb, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x26, 0xba, 0x16, 0x58, 0x80, 0x01, + 0x04, 0x00, 0x49, 0x24, 0x92, 0x49, 0x24, 0x90, + 0xd6, 0xc4, 0xe4, 0x40, 0x24, 0x02, 0x00, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x43, 0x1e, 0xf1, 0x31, + 0x60, 0x00, 0x09, 0x00, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x20, 0x29, 0x33, 0x55, 0x92, 0x41, 0x04, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x24, 0x5a, 0x09, 0x20, 0x80, 0x00, 0x20, 0x92, + 0x09, 0x04, 0x92, 0x01, 0x24, 0x33, 0x19, 0x04, + 0x12, 0x40, 0x20, 0x12, 0x08, 0x20, 0x00, 0x01, + 0x20, 0x92, 0x49, 0x24, 0x80, 0x48, 0x20, 0x90, + 0x49, 0x20, 0x10, 0x00, 0x00, 0x82, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x3f, 0xff, 0xc4, 0x00, 0x27, + 0x11, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, + 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x11, 0x21, 0x31, 0x41, 0x51, + 0x40, 0x61, 0x71, 0x81, 0x91, 0xb1, 0x10, 0x60, + 0xa1, 0xf1, 0xc1, 0xd1, 0xf0, 0xff, 0xda, 0x00, + 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, 0x10, 0xfa, + 0x53, 0x7f, 0x71, 0xa3, 0x9e, 0xf0, 0xb8, 0xa9, + 0xe5, 0xb4, 0x34, 0x29, 0x37, 0x95, 0xff, 0x00, + 0x04, 0x2f, 0x32, 0xd5, 0x33, 0xab, 0xd7, 0xe0, + 0xbd, 0xdf, 0x86, 0x15, 0x62, 0xb0, 0x67, 0xde, + 0x02, 0x49, 0x05, 0xb7, 0x88, 0xac, 0xac, 0x73, + 0x0e, 0x33, 0x0a, 0x35, 0x45, 0x28, 0xef, 0x32, + 0x40, 0x3c, 0x75, 0x9a, 0xb4, 0x4b, 0x0d, 0x60, + 0x7a, 0xef, 0xc3, 0x32, 0x34, 0xe6, 0xbf, 0x31, + 0xc2, 0x31, 0x1b, 0xad, 0xe2, 0x54, 0x88, 0x34, + 0x34, 0xcd, 0xfe, 0xd0, 0x32, 0x1c, 0xf0, 0x85, + 0x53, 0x94, 0x7b, 0x53, 0xd6, 0x5e, 0xf1, 0x52, + 0xf1, 0xfe, 0x65, 0xab, 0xf9, 0x63, 0xfa, 0x8c, + 0xd9, 0x66, 0xb5, 0x5a, 0x78, 0x82, 0xae, 0xdd, + 0x94, 0xac, 0x6a, 0x19, 0xcd, 0x5f, 0x1e, 0x20, + 0xcf, 0x87, 0xf6, 0x05, 0x42, 0xe8, 0xb8, 0xd3, + 0x38, 0x26, 0xfe, 0x75, 0x3c, 0xc7, 0x4b, 0x66, + 0xbd, 0xba, 0xb6, 0xc1, 0xa1, 0x8e, 0xae, 0x09, + 0xab, 0xe2, 0x50, 0x1d, 0x90, 0x94, 0xaa, 0x8a, + 0x0f, 0x39, 0xa8, 0x15, 0x22, 0xad, 0x7b, 0xd4, + 0x65, 0xae, 0xcd, 0x62, 0x19, 0x56, 0x18, 0x51, + 0x06, 0xcb, 0x7c, 0xc1, 0xbe, 0xab, 0x5c, 0xc7, + 0xa2, 0x96, 0xc9, 0xcf, 0x80, 0xe1, 0xde, 0x24, + 0x7c, 0x11, 0x6b, 0x0f, 0xa6, 0xce, 0x92, 0x8a, + 0xc1, 0xa4, 0x6a, 0xb9, 0x75, 0xef, 0x12, 0x40, + 0xf0, 0x1b, 0x79, 0x8d, 0x44, 0x9b, 0x61, 0xf9, + 0xd7, 0xe2, 0x5a, 0xb6, 0xcd, 0x3a, 0xc6, 0xe9, + 0x08, 0xd8, 0x53, 0xa2, 0x5b, 0x38, 0xa8, 0x6e, + 0x31, 0x5f, 0x80, 0x1f, 0x5a, 0x23, 0xa5, 0x6a, + 0x7f, 0x53, 0x3d, 0x7b, 0x0f, 0xaf, 0x93, 0x64, + 0x8a, 0xc5, 0x51, 0xc6, 0xd6, 0x91, 0xee, 0x49, + 0xab, 0xfb, 0x8f, 0xff, 0xc4, 0x00, 0x1f, 0x11, + 0x01, 0x01, 0x01, 0x00, 0x03, 0x01, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x11, 0x21, 0x31, 0x40, 0x41, 0x10, + 0x50, 0x51, 0x60, 0x81, 0xff, 0xda, 0x00, 0x08, + 0x01, 0x02, 0x01, 0x01, 0x3f, 0x10, 0xfc, 0x39, + 0xa0, 0xb9, 0x46, 0x4f, 0x5d, 0xb7, 0x3f, 0xe7, + 0xbf, 0xbe, 0xc3, 0x19, 0x06, 0x76, 0x08, 0xe0, + 0x88, 0x9b, 0x3a, 0x83, 0xec, 0xe6, 0xc8, 0xf3, + 0xb4, 0xea, 0x6e, 0x5d, 0x11, 0xb2, 0x31, 0xb3, + 0x64, 0x9e, 0xbe, 0xc6, 0xbd, 0xb2, 0x88, 0x93, + 0xa2, 0x87, 0x1b, 0x00, 0xbe, 0x24, 0x1f, 0x22, + 0x47, 0x0e, 0xb6, 0x5d, 0xfe, 0x46, 0x5e, 0xb1, + 0x99, 0x8c, 0x38, 0xd2, 0xe3, 0x21, 0xc7, 0x5b, + 0x60, 0xfb, 0x59, 0x6f, 0x2c, 0x5f, 0xc8, 0x63, + 0x1d, 0x04, 0x30, 0x7a, 0xde, 0x61, 0xdf, 0x19, + 0xa6, 0x62, 0x4c, 0x4b, 0x7a, 0xc0, 0x7f, 0x73, + 0x37, 0xd4, 0x30, 0xba, 0x63, 0x83, 0x0f, 0x69, + 0xa7, 0x76, 0x07, 0xa1, 0x87, 0x01, 0xc4, 0x7c, + 0x3e, 0xc6, 0x2f, 0xcb, 0x7f, 0x41, 0xa4, 0x42, + 0x47, 0xc1, 0x04, 0x62, 0xff, 0x00, 0x63, 0xff, + 0xc4, 0x00, 0x27, 0x10, 0x01, 0x01, 0x00, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x21, + 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xa1, + 0x10, 0x30, 0x40, 0xc1, 0x20, 0x50, 0xb1, 0xf0, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, + 0x3f, 0x10, 0xfe, 0x03, 0x67, 0xa4, 0x9a, 0x04, + 0x01, 0xca, 0x72, 0x99, 0xa0, 0xc6, 0x92, 0x53, + 0xe5, 0x14, 0xa3, 0x97, 0xe5, 0xcc, 0xc8, 0x94, + 0x2e, 0xac, 0xde, 0x02, 0x67, 0x8f, 0xf3, 0xde, + 0x4f, 0xfe, 0x98, 0x2f, 0x97, 0x00, 0x7c, 0x0c, + 0xd7, 0x79, 0x3c, 0xfa, 0x53, 0x77, 0xbd, 0x61, + 0x46, 0x15, 0x86, 0xc0, 0x56, 0xbb, 0xf9, 0xce, + 0xdf, 0x84, 0x2a, 0x7d, 0x7f, 0x0b, 0xc2, 0x39, + 0x69, 0xf8, 0x5c, 0xff, 0x00, 0xe5, 0xff, 0x00, + 0xde, 0x09, 0x68, 0xe1, 0xa3, 0xf4, 0x3f, 0xe4, + 0x48, 0x57, 0x59, 0x38, 0xae, 0x4f, 0xb0, 0x21, + 0x59, 0x8c, 0xa9, 0x14, 0x04, 0xca, 0xde, 0x1c, + 0xc7, 0xde, 0x56, 0xbe, 0x46, 0x84, 0xb3, 0xf4, + 0x35, 0x86, 0x28, 0xa6, 0xd7, 0x43, 0x69, 0xd0, + 0x7e, 0xcf, 0x39, 0x60, 0x4a, 0x88, 0x9c, 0x7c, + 0x7d, 0x65, 0x44, 0xd7, 0x9c, 0x0d, 0x83, 0x8d, + 0x60, 0x38, 0x53, 0x51, 0x3b, 0x6e, 0xa6, 0xb1, + 0xbc, 0x61, 0x09, 0x36, 0x63, 0x9c, 0xd5, 0x65, + 0x8e, 0x6e, 0x3a, 0xe7, 0x98, 0x10, 0xe4, 0x05, + 0xea, 0x8c, 0x87, 0x2f, 0xda, 0x14, 0x3f, 0x2d, + 0x24, 0xcb, 0x0e, 0xea, 0x50, 0x21, 0x35, 0x20, + 0x44, 0x69, 0xbd, 0xe1, 0xb1, 0xf3, 0x34, 0xcb, + 0xbd, 0x54, 0x22, 0xea, 0x69, 0xbc, 0x5c, 0x9b, + 0x35, 0x24, 0x4a, 0xbb, 0x89, 0x2a, 0xbd, 0x58, + 0xc2, 0x97, 0xe7, 0xeb, 0x28, 0x0e, 0xe0, 0x25, + 0x7a, 0xfb, 0x31, 0x47, 0xa3, 0x2a, 0x12, 0x0d, + 0xa1, 0x38, 0x7e, 0x78, 0xc2, 0xff, 0x00, 0xd7, + 0x21, 0xd8, 0xb5, 0x06, 0x32, 0x8b, 0x8d, 0x4d, + 0x09, 0xd5, 0x12, 0xd2, 0x08, 0xbd, 0x9c, 0x1a, + 0x5f, 0xef, 0xa2, 0x07, 0x82, 0xc0, 0x98, 0x45, + 0x78, 0x36, 0x6e, 0x62, 0xa4, 0x76, 0x23, 0x46, + 0x23, 0x32, 0x29, 0x90, 0x00, 0x20, 0x48, 0xa8, + 0xe4, 0x3a, 0x73, 0xe3, 0x9c, 0xba, 0x79, 0x5f, + 0xbe, 0x51, 0xed, 0xd8, 0xfa, 0xc8, 0xc5, 0xfc, + 0x2a, 0x3e, 0x81, 0xda, 0x9f, 0x90, 0x66, 0xef, + 0xd8, 0xd5, 0x40, 0xe1, 0xf5, 0xfb, 0x62, 0x3f, + 0x52, 0x5e, 0x78, 0x13, 0xdf, 0x23, 0xe3, 0xe7, + 0x07, 0x30, 0xd8, 0x6c, 0x00, 0x97, 0xde, 0xf3, + 0xac, 0xfd, 0x16, 0x45, 0xa6, 0x18, 0x56, 0xbb, + 0x40, 0x7e, 0x60, 0x22, 0xdd, 0xeb, 0x25, 0x66, + 0x2b, 0xdc, 0xca, 0x2c, 0x9e, 0x2a, 0xd6, 0xc1, + 0xb3, 0xb1, 0x70, 0x91, 0x98, 0xc5, 0x0e, 0x86, + 0x90, 0x12, 0x01, 0x24, 0xc1, 0x03, 0xe3, 0x54, + 0x7a, 0x5e, 0xd3, 0x4b, 0x78, 0x1c, 0xaa, 0xe0, + 0x7c, 0x60, 0xab, 0x75, 0x1c, 0x31, 0x27, 0x85, + 0xf9, 0x4c, 0xe9, 0x8d, 0x96, 0x0d, 0xbc, 0xea, + 0x1e, 0x0f, 0x0c, 0x0c, 0xa0, 0x13, 0xbc, 0x12, + 0x07, 0x00, 0x05, 0xe1, 0xa7, 0x1a, 0x82, 0x9a, + 0xc2, 0xf2, 0xc2, 0x4a, 0x84, 0x63, 0x8e, 0x07, + 0xf7, 0xea, 0xbc, 0xf9, 0xca, 0x12, 0xa4, 0x06, + 0x96, 0x01, 0x3d, 0xb4, 0xcd, 0x36, 0xe0, 0x5c, + 0x75, 0x2b, 0x0f, 0x33, 0x8c, 0x31, 0x7e, 0x8a, + 0xe7, 0xc2, 0x57, 0x86, 0xfc, 0x61, 0x89, 0x27, + 0x90, 0x71, 0xb1, 0x65, 0x70, 0xc7, 0xed, 0x05, + 0x03, 0xd8, 0x9d, 0x60, 0x50, 0x0b, 0x8c, 0x2a, + 0x7c, 0x4b, 0x93, 0x04, 0x3a, 0x60, 0x15, 0x5c, + 0xaf, 0x0d, 0x41, 0x57, 0xaa, 0x48, 0x42, 0xe0, + 0x6f, 0x0c, 0x55, 0x51, 0x04, 0xb6, 0x06, 0x20, + 0x05, 0xe7, 0x24, 0xb4, 0x3f, 0x0c, 0xfa, 0x81, + 0x47, 0x9d, 0x26, 0x58, 0x50, 0x1b, 0xa5, 0x62, + 0x8a, 0x9e, 0xa3, 0xee, 0x62, 0xc3, 0x2e, 0x40, + 0xd5, 0x08, 0x82, 0xfb, 0x7c, 0x1c, 0x84, 0x8c, + 0x96, 0x81, 0xd8, 0x70, 0x21, 0xf4, 0x62, 0xf0, + 0x44, 0xbb, 0xf0, 0xea, 0x4d, 0xb5, 0xad, 0x61, + 0x88, 0xe1, 0x2e, 0xf5, 0x8a, 0x16, 0x0a, 0x3b, + 0xae, 0x1f, 0x0c, 0xbc, 0xa4, 0x04, 0xe4, 0xaa, + 0x5e, 0x75, 0x54, 0x3d, 0x36, 0xf3, 0x89, 0x24, + 0x68, 0x88, 0x1a, 0xd0, 0x5b, 0x96, 0x66, 0xb2, + 0xee, 0x05, 0xfb, 0x9f, 0xdf, 0x19, 0xd5, 0xf8, + 0x46, 0x87, 0x4f, 0x4e, 0x38, 0x1b, 0x86, 0x75, + 0xe9, 0xc1, 0x39, 0x46, 0xb3, 0x52, 0xe8, 0x51, + 0x5e, 0x00, 0xbc, 0x15, 0xd0, 0xed, 0xcb, 0x27, + 0x66, 0x38, 0x1b, 0xf4, 0x0a, 0xa5, 0x80, 0x7a, + 0x47, 0xf7, 0x89, 0x12, 0x48, 0xa5, 0x53, 0x89, + 0x37, 0x97, 0x85, 0xb7, 0x25, 0x78, 0x7c, 0x09, + 0xa3, 0x46, 0xaf, 0x39, 0xc8, 0x15, 0xf9, 0x2f, + 0x93, 0x8f, 0xf1, 0x86, 0xe4, 0x20, 0x50, 0x07, + 0x00, 0x61, 0x87, 0x65, 0x1b, 0x25, 0xea, 0xce, + 0xb1, 0xe0, 0x7c, 0x11, 0xa7, 0x21, 0xa0, 0x6f, + 0x6a, 0x21, 0xc9, 0x80, 0x85, 0x11, 0x59, 0x7b, + 0x0b, 0xb9, 0x57, 0x0e, 0x8f, 0xc2, 0xc6, 0x61, + 0x88, 0x42, 0x9d, 0x0f, 0x26, 0x77, 0xc9, 0xb6, + 0x15, 0xf2, 0x62, 0xf3, 0xeb, 0xd7, 0x09, 0x02, + 0xaa, 0x84, 0x0b, 0xe7, 0x5e, 0xb1, 0x67, 0x31, + 0x02, 0xae, 0xbb, 0x7b, 0xcf, 0x9c, 0xb4, 0x6b, + 0xeb, 0x14, 0x6c, 0x02, 0x18, 0x7f, 0x19, 0x41, + 0xc9, 0xf9, 0xc8, 0xf2, 0x64, 0x79, 0x32, 0x9e, + 0x71, 0x04, 0xa9, 0xbe, 0x3d, 0xe4, 0x0c, 0xa5, + 0xca, 0x79, 0xc8, 0xf2, 0x64, 0x3d, 0x99, 0x1e, + 0x4c, 0x8f, 0x26, 0x52, 0xca, 0x5c, 0x11, 0xef, + 0x29, 0xe7, 0x04, 0x7b, 0xfe, 0x13, 0x14, 0x73, + 0x1e, 0xb0, 0x33, 0xac, 0xb4, 0x42, 0x23, 0xf5, + 0x8a, 0x66, 0x61, 0x69, 0x5a, 0x8f, 0x6f, 0x27, + 0xc0, 0xf7, 0xa5, 0x20, 0x1d, 0x9f, 0x20, 0x3f, + 0xf7, 0x0d, 0xd8, 0xbe, 0xdd, 0xc7, 0x95, 0x6b, + 0x73, 0x97, 0xf0, 0xe7, 0xe8, 0xb2, 0x52, 0x80, + 0x67, 0xec, 0xbe, 0x06, 0x46, 0xd8, 0xc3, 0x73, + 0x1d, 0x73, 0xf3, 0x81, 0xa0, 0x29, 0xa0, 0x74, + 0xee, 0xda, 0x45, 0x1d, 0x3a, 0x19, 0xed, 0xaa, + 0x22, 0x92, 0xf3, 0x03, 0x42, 0xe4, 0x43, 0x93, + 0x6a, 0x23, 0x59, 0x6b, 0x4a, 0x07, 0xa3, 0x26, + 0x5c, 0x46, 0xe8, 0xa8, 0xa3, 0x62, 0x40, 0xbd, + 0x80, 0xb2, 0xf8, 0x19, 0x9a, 0x4c, 0x35, 0x0a, + 0x2e, 0x21, 0xc1, 0xae, 0x04, 0xd9, 0xc3, 0x6a, + 0x03, 0x41, 0x13, 0x65, 0x16, 0x68, 0x14, 0x73, + 0x54, 0xb5, 0x0f, 0xdf, 0x07, 0x90, 0x40, 0xa7, + 0xb8, 0xd8, 0x6d, 0x8a, 0x87, 0x45, 0xd0, 0xda, + 0xef, 0x39, 0xbd, 0x95, 0x58, 0x0b, 0xa1, 0x87, + 0x06, 0x32, 0x6f, 0xde, 0x02, 0x00, 0xd8, 0xd0, + 0xdf, 0x7b, 0xbc, 0xe2, 0xdf, 0xb6, 0x32, 0x72, + 0x30, 0x4b, 0x33, 0xa5, 0xe0, 0x8b, 0xb2, 0x72, + 0x50, 0x69, 0xc2, 0x17, 0x3c, 0x1d, 0x65, 0xd0, + 0xe1, 0x1c, 0x87, 0xe8, 0x2c, 0x74, 0xb9, 0x09, + 0x79, 0xf6, 0x12, 0x0f, 0x23, 0xcf, 0x5a, 0xe1, + 0x6c, 0x41, 0x45, 0x71, 0x7a, 0x9f, 0x40, 0xe0, + 0xdd, 0x70, 0x51, 0x98, 0x92, 0x35, 0x06, 0xfe, + 0x70, 0x1a, 0x68, 0xc6, 0xd7, 0x34, 0x30, 0x95, + 0xf5, 0x89, 0xa1, 0xc8, 0xf8, 0xc0, 0xf9, 0xb4, + 0x54, 0x4e, 0xb7, 0x28, 0x5f, 0x60, 0x9d, 0x65, + 0xbb, 0xfd, 0x23, 0x51, 0x62, 0x24, 0xa7, 0x88, + 0x38, 0xe2, 0x58, 0xa6, 0x0c, 0xa4, 0xf2, 0xe4, + 0xfa, 0xeb, 0x13, 0x59, 0xbf, 0x4c, 0xa2, 0xb8, + 0x04, 0xe6, 0xd5, 0xb4, 0x2a, 0x00, 0x7d, 0x8e, + 0x26, 0xe3, 0x55, 0xd8, 0xb4, 0x71, 0x93, 0x9a, + 0x82, 0xd0, 0xb9, 0x08, 0x3a, 0x48, 0x26, 0xbe, + 0x3f, 0xe0, 0xf0, 0xe1, 0x65, 0x8c, 0xb3, 0xe1, + 0x5e, 0x57, 0x6b, 0x4e, 0x6d, 0xa0, 0x55, 0xa0, + 0x15, 0xbf, 0x07, 0x6f, 0xde, 0x05, 0x58, 0x02, + 0xe6, 0x8d, 0xcf, 0x56, 0xff, 0x00, 0x28, 0x0a, + 0xb0, 0xcd, 0xa3, 0xbd, 0x32, 0x01, 0x51, 0x1f, + 0x6e, 0x2d, 0xac, 0x02, 0xbe, 0xc8, 0xe9, 0xe2, + 0x94, 0x68, 0xf1, 0xb1, 0xa2, 0x7f, 0x30, 0x4e, + 0x7c, 0xe0, 0xa9, 0x39, 0x46, 0x65, 0x5c, 0x4b, + 0x9f, 0x28, 0x14, 0x3e, 0x7f, 0x6c, 0x42, 0xdf, + 0x17, 0x57, 0x05, 0xba, 0x8a, 0x7c, 0x3e, 0x60, + 0x84, 0x88, 0x9d, 0x58, 0xf0, 0x02, 0xe2, 0x53, + 0xc1, 0x10, 0x99, 0x79, 0x52, 0xb2, 0x8f, 0x18, + 0x60, 0x13, 0x09, 0x81, 0x08, 0xd1, 0x2b, 0x44, + 0x89, 0x12, 0x65, 0x54, 0x2b, 0x30, 0x51, 0x4f, + 0xbd, 0x3e, 0x71, 0x37, 0x36, 0xf0, 0x02, 0xaa, + 0xf5, 0x89, 0xef, 0x43, 0x38, 0x72, 0x1e, 0x4f, + 0x79, 0x40, 0xb8, 0x9d, 0x52, 0x7e, 0x69, 0x7c, + 0x7a, 0xe3, 0x3f, 0xc9, 0xa9, 0xaf, 0xdc, 0x69, + 0x00, 0xe6, 0x8c, 0x30, 0xa6, 0xae, 0x78, 0xd9, + 0xcc, 0xfa, 0x25, 0x3a, 0x70, 0xf9, 0x73, 0x97, + 0x94, 0xb6, 0x92, 0x62, 0x43, 0x00, 0x6a, 0x9b, + 0xd6, 0x5e, 0xa8, 0x7a, 0x03, 0xb0, 0xf0, 0x1d, + 0x89, 0xb1, 0x04, 0xcb, 0x85, 0x41, 0xdb, 0x01, + 0x9a, 0x31, 0x5d, 0x20, 0xec, 0xc4, 0xef, 0xe8, + 0xb2, 0x85, 0x0d, 0x93, 0x17, 0x2d, 0xb1, 0xe2, + 0x8d, 0x9f, 0x3e, 0x89, 0x45, 0x14, 0x26, 0x8a, + 0xe5, 0xd6, 0xea, 0x95, 0xbf, 0x3f, 0x86, 0x68, + 0xc3, 0x45, 0x17, 0xf2, 0x28, 0x8a, 0xb0, 0x97, + 0x47, 0xf5, 0x13, 0xa7, 0x11, 0x0a, 0x0f, 0x4c, + 0xef, 0x1c, 0xf0, 0x80, 0x84, 0xc0, 0x35, 0xe7, + 0x6c, 0x8b, 0xbb, 0xbc, 0x68, 0x63, 0x0c, 0x20, + 0xa3, 0x60, 0x4b, 0x44, 0x08, 0x76, 0x47, 0x7b, + 0x85, 0x15, 0x00, 0xe9, 0x13, 0x48, 0xf2, 0x62, + 0x29, 0xc9, 0x36, 0x64, 0xb7, 0x94, 0x0b, 0x34, + 0x6d, 0x2b, 0x80, 0x42, 0x25, 0x53, 0x73, 0x03, + 0x72, 0x18, 0x4f, 0x17, 0x27, 0x8e, 0x8a, 0x81, + 0xda, 0x80, 0x05, 0x60, 0xf3, 0xb5, 0x77, 0x8e, + 0xaf, 0x73, 0xde, 0xad, 0x3b, 0x0a, 0xfd, 0x06, + 0x00, 0x19, 0xb9, 0x50, 0x06, 0x00, 0x46, 0x82, + 0x84, 0x3a, 0x6c, 0xf0, 0x55, 0x02, 0x48, 0x34, + 0xb4, 0x97, 0x48, 0x9a, 0x87, 0x38, 0x9d, 0x46, + 0xcf, 0xce, 0x51, 0xe9, 0x21, 0x74, 0x44, 0x79, + 0xc1, 0x46, 0xe7, 0x83, 0x08, 0x84, 0x69, 0xb0, + 0x36, 0xa3, 0x53, 0x14, 0xf9, 0x46, 0x30, 0x93, + 0x71, 0x35, 0xb7, 0xaa, 0x4c, 0x2d, 0x4c, 0x01, + 0xf3, 0x90, 0x60, 0xaa, 0xbb, 0xd3, 0x7a, 0xa7, + 0xb1, 0x86, 0x70, 0x82, 0xa5, 0xb2, 0x20, 0x8c, + 0xa9, 0xd6, 0x00, 0xa2, 0x8d, 0x29, 0x1c, 0x9a, + 0x76, 0x68, 0x79, 0xc6, 0x15, 0x15, 0x03, 0xb4, + 0x04, 0xd0, 0xa8, 0x54, 0xad, 0x45, 0x5e, 0xa1, + 0x5b, 0x45, 0x1d, 0x3a, 0x61, 0xf2, 0xe1, 0x60, + 0xc1, 0x32, 0x5c, 0x2b, 0xb4, 0x0d, 0x36, 0x69, + 0x37, 0x00, 0xc6, 0x72, 0x76, 0xe1, 0x3c, 0x20, + 0x89, 0x1d, 0x5c, 0xdd, 0x56, 0xcc, 0x4e, 0x6e, + 0x74, 0xdf, 0xec, 0x74, 0xe4, 0xd0, 0x65, 0x55, + 0x83, 0xd6, 0xbf, 0x83, 0xf2, 0xc9, 0x79, 0xcb, + 0x2f, 0x10, 0x01, 0x01, 0x04, 0x6f, 0x2a, 0xe3, + 0x48, 0x94, 0x15, 0xf3, 0x1d, 0x0a, 0x2a, 0xea, + 0xb4, 0xf1, 0x82, 0xab, 0x64, 0x66, 0x48, 0xa2, + 0x4a, 0x50, 0x6a, 0x6b, 0x59, 0x27, 0x13, 0x7c, + 0xc9, 0x20, 0x1a, 0x34, 0x00, 0x03, 0xdd, 0x5f, + 0xfa, 0x3f, 0xff, 0xd9, +}; + +static const uint8_t data_tm4c_jpg[] = +{ + /* /tm4c.jpg */ + 0x2f, 0x74, 0x6d, 0x34, 0x63, 0x2e, 0x6a, 0x70, + 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x04, 0x05, 0x0a, 0x07, + 0x07, 0x06, 0x08, 0x0c, 0x0a, 0x0c, 0x0c, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0d, 0x0e, 0x12, 0x10, 0x0d, + 0x0e, 0x11, 0x0e, 0x0b, 0x0b, 0x10, 0x16, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0x0c, 0x0f, + 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, + 0x14, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x03, 0x04, + 0x04, 0x05, 0x04, 0x05, 0x09, 0x05, 0x05, 0x09, + 0x14, 0x0d, 0x0b, 0x0d, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc2, + 0x00, 0x11, 0x08, 0x00, 0x4b, 0x00, 0x4b, 0x03, + 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x00, 0x02, + 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x04, 0x08, 0x01, 0x05, 0x07, 0x03, 0x02, 0xff, + 0xc4, 0x00, 0x19, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, + 0x03, 0x05, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x10, 0x03, 0x10, 0x00, 0x00, 0x01, + 0x50, 0xb1, 0x28, 0x0c, 0x81, 0x80, 0x18, 0x7d, + 0x3c, 0xfa, 0xff, 0x00, 0x6f, 0x2f, 0x59, 0xf9, + 0xfd, 0xb4, 0x67, 0x37, 0xa3, 0x2e, 0x0f, 0x01, + 0x50, 0x73, 0x27, 0x8f, 0x7d, 0x7c, 0xab, 0x5d, + 0x1e, 0x1d, 0x4f, 0xe7, 0xf7, 0x54, 0x5c, 0x6f, + 0x70, 0x48, 0x30, 0x49, 0x17, 0x07, 0x9e, 0x9e, + 0x7d, 0xe7, 0xb7, 0x97, 0x85, 0x9d, 0x8f, 0x87, + 0xae, 0xa5, 0xe7, 0x4e, 0xca, 0xb8, 0x41, 0x36, + 0x43, 0x0e, 0xb2, 0xc3, 0xd1, 0xe1, 0xa2, 0xd4, + 0x0e, 0xeb, 0xcb, 0xd1, 0x50, 0xf3, 0x55, 0x54, + 0x02, 0x55, 0x9d, 0x37, 0xdf, 0xc7, 0xda, 0xcc, + 0x81, 0x61, 0x79, 0xfd, 0xaa, 0x3c, 0xaa, 0xaa, + 0x19, 0x1e, 0x3d, 0x7c, 0xb6, 0x56, 0x00, 0x05, + 0x94, 0xf2, 0xf5, 0xa9, 0x51, 0x31, 0x54, 0x8d, + 0xbe, 0xb3, 0xb9, 0xd6, 0x40, 0x00, 0x2d, 0x16, + 0x37, 0x55, 0x25, 0xb2, 0x67, 0x30, 0x49, 0xda, + 0x9e, 0x68, 0x8e, 0x41, 0x3e, 0xc8, 0x85, 0xa8, + 0xce, 0xaa, 0x9a, 0xea, 0x4f, 0x1d, 0x67, 0xa1, + 0x46, 0xbc, 0xfb, 0x25, 0x10, 0x4d, 0x5d, 0x5a, + 0xbc, 0xd9, 0xaa, 0x8c, 0x80, 0x00, 0x18, 0x03, + 0xd8, 0xb1, 0x6b, 0xff, 0xc4, 0x00, 0x25, 0x10, + 0x00, 0x00, 0x06, 0x03, 0x00, 0x01, 0x05, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x01, 0x13, + 0x16, 0x36, 0x07, 0x10, 0x11, 0x15, 0x21, 0x12, + 0x14, 0x31, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, + 0x00, 0x01, 0x05, 0x02, 0xb8, 0x5f, 0x25, 0x73, + 0x60, 0xee, 0x26, 0x87, 0x71, 0x34, 0x3b, 0x89, + 0xa1, 0xdc, 0x4d, 0x0e, 0xe2, 0x68, 0x77, 0x13, + 0x42, 0x12, 0xc5, 0x39, 0x2c, 0xf3, 0xfb, 0xeb, + 0x88, 0x29, 0xa3, 0xbc, 0x8b, 0xb2, 0xe4, 0xa5, + 0xb5, 0xa7, 0x03, 0x02, 0xa4, 0x93, 0x8f, 0x4e, + 0xb4, 0x30, 0x96, 0xab, 0x47, 0xd7, 0x4a, 0xc6, + 0xbc, 0x59, 0x0b, 0x67, 0x1a, 0xcd, 0x9a, 0xce, + 0x3d, 0x3d, 0x66, 0xb2, 0x3f, 0x53, 0x11, 0x5e, + 0x26, 0xc1, 0x56, 0xcf, 0xcc, 0x2d, 0x85, 0x0c, + 0xb9, 0xb7, 0x66, 0x3e, 0x4d, 0x65, 0x9e, 0xc4, + 0xcc, 0xbd, 0x68, 0xdd, 0x79, 0x18, 0xb7, 0x2c, + 0xeb, 0xb2, 0xee, 0xd1, 0x9d, 0xfb, 0x38, 0x51, + 0x04, 0xfa, 0x40, 0x84, 0x55, 0xd9, 0xd6, 0x1b, + 0x05, 0x4f, 0xf6, 0x0a, 0x7d, 0x2c, 0x38, 0xb8, + 0xbb, 0xab, 0xe7, 0x41, 0x20, 0x1d, 0x13, 0x0a, + 0x56, 0xd5, 0xce, 0x33, 0x5a, 0x55, 0x32, 0x34, + 0xa3, 0x91, 0x54, 0x9f, 0xc7, 0x65, 0x89, 0x36, + 0x0d, 0x82, 0xa1, 0xfb, 0x5f, 0xb5, 0x79, 0x37, + 0xc7, 0xbb, 0x66, 0xd9, 0x72, 0xb2, 0x25, 0x2a, + 0x09, 0xff, 0x00, 0x31, 0xb0, 0x6c, 0x14, 0xdf, + 0x1d, 0xb5, 0x79, 0x37, 0xb7, 0xfa, 0x18, 0xa1, + 0x86, 0xa9, 0x6c, 0x1b, 0x06, 0xc1, 0xb0, 0x52, + 0xbc, 0x6a, 0xd5, 0xe4, 0xcd, 0x6a, 0x2f, 0x5e, + 0x40, 0x99, 0xb2, 0xa4, 0x51, 0xa3, 0x43, 0x22, + 0x6d, 0x83, 0x60, 0xd8, 0x36, 0x0d, 0x82, 0x8f, + 0xfb, 0x58, 0xb2, 0x1c, 0xa9, 0xdb, 0x63, 0xa6, + 0x61, 0xd4, 0x87, 0xf5, 0x05, 0xe4, 0x6b, 0xc7, + 0x12, 0x2e, 0xf1, 0xf6, 0x65, 0xd3, 0xf0, 0xf9, + 0xba, 0x8b, 0x3f, 0x49, 0x8b, 0xb7, 0x05, 0x24, + 0x73, 0xd5, 0x4c, 0xb2, 0x4b, 0x37, 0xc5, 0x13, + 0xc5, 0x6d, 0xa5, 0xc9, 0x2d, 0x11, 0x72, 0x8e, + 0xe1, 0x9e, 0x61, 0x5f, 0x8c, 0xad, 0x77, 0x72, + 0xb2, 0x98, 0xb4, 0x98, 0x8e, 0x17, 0xb4, 0xe5, + 0x75, 0xd4, 0xb9, 0xaa, 0xe5, 0x37, 0x16, 0xb5, + 0xdd, 0x62, 0x46, 0x67, 0x32, 0x29, 0xd0, 0x48, + 0x6e, 0x4a, 0xd9, 0x59, 0x8c, 0x7e, 0xfb, 0x8d, + 0x86, 0x1c, 0x6c, 0x38, 0xe3, 0x61, 0x87, 0x1b, + 0x0e, 0x38, 0xd8, 0x61, 0xc6, 0xc3, 0x8e, 0x36, + 0x1c, 0x23, 0x4c, 0x86, 0xda, 0xd5, 0xba, 0x4d, + 0x9b, 0x7f, 0xff, 0xc4, 0x00, 0x21, 0x11, 0x00, + 0x01, 0x04, 0x01, 0x03, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x02, 0x11, 0x20, 0x31, 0x10, 0x12, 0x21, + 0x13, 0x30, 0x32, 0x40, 0x51, 0xff, 0xda, 0x00, + 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, 0x01, 0xbb, + 0xdd, 0xb4, 0x2e, 0xa3, 0xd3, 0x4c, 0x89, 0xec, + 0x3e, 0x09, 0x50, 0x99, 0xe2, 0x2e, 0xf7, 0x7c, + 0xd2, 0x13, 0x71, 0x62, 0xa1, 0x42, 0x84, 0xdc, + 0x54, 0xf1, 0x51, 0x8a, 0x9e, 0x6a, 0x28, 0x6c, + 0x3d, 0xff, 0x00, 0xff, 0xc4, 0x00, 0x22, 0x11, + 0x00, 0x01, 0x04, 0x00, 0x05, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x02, 0x11, 0x20, 0x03, 0x10, 0x12, + 0x31, 0x32, 0x13, 0x21, 0x30, 0x40, 0x41, 0xff, + 0xda, 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, 0x3f, + 0x01, 0xbe, 0x1b, 0x75, 0x95, 0xd2, 0x62, 0x70, + 0x83, 0x1e, 0x0c, 0x39, 0x01, 0x4a, 0x7f, 0x23, + 0x76, 0x37, 0xe9, 0xca, 0x53, 0xb9, 0x1b, 0x35, + 0x03, 0x9b, 0xb7, 0xa8, 0x13, 0x53, 0xbd, 0x47, + 0x6a, 0x9d, 0xe8, 0x2c, 0x7d, 0xff, 0x00, 0xff, + 0xc4, 0x00, 0x3f, 0x10, 0x00, 0x02, 0x01, 0x03, + 0x01, 0x03, 0x06, 0x0a, 0x09, 0x02, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, + 0x04, 0x11, 0x12, 0x13, 0x21, 0x31, 0x05, 0x22, + 0x34, 0x41, 0x51, 0xd1, 0x14, 0x20, 0x32, 0x61, + 0x71, 0x81, 0x91, 0x92, 0x93, 0xb3, 0x10, 0x15, + 0x23, 0x42, 0x52, 0x62, 0x72, 0x74, 0xa1, 0xa2, + 0xb2, 0x06, 0x24, 0x73, 0x83, 0x94, 0xb1, 0xf1, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x06, + 0x3f, 0x02, 0xbc, 0x8a, 0x0b, 0x87, 0xb7, 0x8a, + 0x09, 0x1a, 0x25, 0x58, 0xd8, 0x8e, 0x07, 0x1d, + 0x55, 0xd3, 0xe7, 0xf8, 0xad, 0xdf, 0x5d, 0x3e, + 0x7f, 0x8a, 0xdd, 0xf5, 0xd3, 0xe7, 0xf8, 0xad, + 0xdf, 0x5d, 0x3e, 0x7f, 0x8a, 0xdd, 0xf5, 0xd3, + 0xe7, 0xf8, 0xad, 0xdf, 0x5d, 0x3e, 0x7f, 0x8a, + 0xdd, 0xf4, 0x13, 0xc3, 0xee, 0x04, 0x4b, 0xbe, + 0x46, 0xda, 0xb7, 0x0f, 0x6d, 0x74, 0x8b, 0x8f, + 0xf9, 0x0f, 0xdf, 0x51, 0x49, 0x37, 0x3a, 0x4c, + 0xba, 0x96, 0xed, 0xc3, 0x11, 0x9f, 0xe2, 0xb9, + 0x48, 0xba, 0x97, 0x41, 0x79, 0x26, 0xa5, 0x07, + 0x19, 0x1a, 0xbb, 0x6b, 0x93, 0x60, 0x6b, 0x7b, + 0x98, 0x21, 0x9e, 0xc8, 0xdf, 0x4b, 0x27, 0x84, + 0x6a, 0xd2, 0xba, 0x18, 0xe9, 0xf2, 0x7c, 0xdc, + 0x6a, 0x18, 0x35, 0x37, 0xd6, 0xaf, 0x77, 0xa0, + 0xfe, 0x11, 0x0f, 0xda, 0x6f, 0xc7, 0x13, 0xba, + 0x22, 0xde, 0xba, 0xbb, 0xbc, 0xb9, 0xb5, 0xbb, + 0x9e, 0xd9, 0x4c, 0x09, 0x0c, 0x0e, 0xfb, 0x26, + 0xe7, 0xa6, 0x4b, 0x31, 0xc7, 0x68, 0x23, 0xd3, + 0x4b, 0xc9, 0xf1, 0xc3, 0x77, 0x15, 0xb6, 0x75, + 0xb2, 0x4e, 0x98, 0x99, 0x63, 0xc6, 0xa3, 0xbb, + 0xb7, 0x1c, 0x3d, 0x55, 0xca, 0xed, 0x3c, 0x32, + 0x34, 0x70, 0xac, 0x12, 0xdb, 0xc7, 0x3d, 0xca, + 0xdb, 0x73, 0x64, 0xce, 0xe6, 0x66, 0xeb, 0x1c, + 0x3d, 0x55, 0xca, 0x30, 0xd9, 0x34, 0xe6, 0xfe, + 0x3b, 0xbd, 0x94, 0x0b, 0x21, 0xf2, 0x97, 0x11, + 0xea, 0xf6, 0x6b, 0x27, 0x3d, 0x82, 0x9a, 0xde, + 0xd8, 0x31, 0x47, 0x4d, 0xa0, 0x67, 0x39, 0x66, + 0xcf, 0xd1, 0x1f, 0xfa, 0x92, 0xfc, 0xc6, 0xae, + 0x51, 0x85, 0x70, 0x1a, 0x4b, 0xd7, 0x51, 0x9e, + 0x1b, 0xde, 0x93, 0xc1, 0xee, 0x9a, 0x5d, 0x11, + 0x1b, 0x45, 0x32, 0xae, 0xcc, 0xe9, 0xe7, 0xa9, + 0x41, 0x9e, 0xac, 0x06, 0xff, 0x00, 0xdd, 0xd4, + 0xaf, 0x2d, 0xf4, 0x57, 0x30, 0xcc, 0x23, 0x7c, + 0x99, 0x78, 0x91, 0xa9, 0x17, 0xd3, 0x80, 0x0d, + 0x5d, 0xb1, 0xe5, 0x91, 0x67, 0x7b, 0x18, 0xd8, + 0xcd, 0x13, 0xf5, 0xec, 0xc0, 0x0a, 0x3c, 0xfd, + 0x95, 0x71, 0x7a, 0x2f, 0x31, 0x2d, 0xcc, 0x53, + 0x6d, 0xf3, 0xbd, 0x8f, 0x5e, 0x9c, 0xfe, 0x6c, + 0x1f, 0x61, 0xaf, 0xaa, 0x6e, 0x6e, 0x0b, 0x45, + 0xb2, 0x8f, 0x29, 0xd5, 0x8f, 0x2c, 0x0f, 0x51, + 0x63, 0x42, 0xea, 0x7b, 0x97, 0x33, 0x31, 0xd6, + 0xb9, 0xfb, 0xbc, 0xd0, 0xb9, 0xf4, 0xe9, 0x02, + 0x97, 0x5b, 0x6a, 0xd2, 0xa1, 0x47, 0xa3, 0xe8, + 0x87, 0xf5, 0xcb, 0xf3, 0x1a, 0xaf, 0xe2, 0x27, + 0x48, 0x7b, 0xd7, 0x52, 0x7b, 0x39, 0xf5, 0xb5, + 0x87, 0x95, 0xda, 0x59, 0x1f, 0x56, 0xe6, 0x97, + 0x9d, 0xa1, 0x74, 0xe8, 0x18, 0x1c, 0x58, 0x86, + 0xe1, 0xdb, 0x45, 0x53, 0x95, 0x63, 0x5d, 0x18, + 0xcf, 0xda, 0x32, 0xaa, 0xef, 0x6c, 0x67, 0xb3, + 0x78, 0xf6, 0x91, 0x52, 0xc9, 0x25, 0xd2, 0x8d, + 0x9e, 0x73, 0xb4, 0x07, 0x3b, 0x94, 0x1c, 0x7a, + 0x7c, 0xde, 0x63, 0x48, 0x91, 0xf2, 0x90, 0xc1, + 0xd6, 0xba, 0x06, 0x79, 0xcc, 0x0c, 0xb9, 0x0b, + 0xdb, 0xb9, 0x3f, 0xac, 0x76, 0xd2, 0x5c, 0x35, + 0xf4, 0x72, 0x98, 0x8b, 0x87, 0x05, 0xb2, 0x0e, + 0x8d, 0x38, 0xc7, 0x9b, 0x7d, 0x17, 0xdb, 0x24, + 0xa0, 0x4a, 0x62, 0xe6, 0xf6, 0x8f, 0xa6, 0x0f, + 0xd7, 0x27, 0xcc, 0x6a, 0xe5, 0x6f, 0xdd, 0x49, + 0xfd, 0xc7, 0xc4, 0x08, 0xbe, 0xb3, 0xd9, 0x4a, + 0x88, 0x30, 0xa3, 0xc4, 0xb6, 0xfd, 0x52, 0x7c, + 0xc6, 0xae, 0x55, 0xfd, 0xd4, 0x9f, 0xdc, 0x7c, + 0x4f, 0xce, 0x78, 0xf8, 0xb6, 0xbe, 0x99, 0x3e, + 0x63, 0x57, 0x2b, 0x7e, 0xea, 0x4f, 0xee, 0x35, + 0xf5, 0xb4, 0x6d, 0x0f, 0x83, 0xed, 0x84, 0x3a, + 0x0b, 0xe1, 0xf2, 0x48, 0x1d, 0x98, 0xc6, 0xfe, + 0xda, 0xd0, 0x51, 0xb5, 0x1e, 0x18, 0x1c, 0x7d, + 0x15, 0xae, 0x54, 0x2a, 0x7e, 0xe8, 0x61, 0xe3, + 0x5a, 0x7a, 0x64, 0xf9, 0x8d, 0x5c, 0xa4, 0xcf, + 0x18, 0x99, 0x16, 0xf1, 0xc9, 0x8c, 0x92, 0x03, + 0x0d, 0x5c, 0x37, 0x54, 0x76, 0xdf, 0xe1, 0xfb, + 0x7b, 0xa7, 0x68, 0x19, 0x6e, 0x9e, 0xce, 0x02, + 0x49, 0xc9, 0x07, 0x8e, 0xae, 0x20, 0x36, 0x9f, + 0xe2, 0xb9, 0x32, 0xda, 0xc6, 0x69, 0x66, 0x9a, + 0xca, 0x23, 0x04, 0xd2, 0x31, 0xf4, 0x61, 0x73, + 0xd6, 0x7c, 0xae, 0x14, 0xd9, 0xe4, 0xd9, 0x1e, + 0x65, 0xba, 0x96, 0x46, 0x46, 0xb6, 0x57, 0xda, + 0x0d, 0xaf, 0x93, 0x9d, 0xff, 0x00, 0xa7, 0xaf, + 0x7d, 0x48, 0x13, 0x91, 0x2e, 0xa4, 0xd5, 0x2e, + 0xd1, 0x1d, 0xad, 0x78, 0x11, 0xbb, 0x65, 0x81, + 0xc4, 0x63, 0x3b, 0xf3, 0xc7, 0xaa, 0x9b, 0xc1, + 0xec, 0xee, 0x15, 0x5f, 0xc9, 0x8c, 0xc5, 0xbf, + 0x3c, 0x0e, 0xe1, 0xf9, 0xb7, 0x56, 0xa8, 0xad, + 0x67, 0x95, 0x7b, 0x52, 0x32, 0x45, 0x15, 0x4b, + 0x3b, 0x87, 0x61, 0xc4, 0x2c, 0x4c, 0x71, 0x48, + 0x65, 0x8a, 0x48, 0x83, 0x8c, 0xae, 0xb5, 0x23, + 0x50, 0xf3, 0x55, 0x97, 0xfb, 0x9f, 0x31, 0xab, + 0x95, 0x41, 0x18, 0x3e, 0x13, 0x21, 0xfe, 0x69, + 0x6e, 0xac, 0xa6, 0x30, 0x4e, 0xbb, 0x83, 0x0a, + 0xcf, 0xae, 0x9f, 0xec, 0xd5, 0x63, 0x62, 0xcd, + 0xa7, 0xf0, 0x93, 0x21, 0x72, 0x41, 0xf5, 0xe3, + 0xcf, 0x81, 0x9a, 0xda, 0xa5, 0xb4, 0x49, 0x83, + 0x2f, 0x30, 0x0e, 0x6f, 0x3e, 0x21, 0x19, 0xdd, + 0xc3, 0xab, 0x34, 0x93, 0xec, 0x34, 0xca, 0xb8, + 0xc1, 0x57, 0xdd, 0xe5, 0x87, 0xff, 0x00, 0xb1, + 0xec, 0xa9, 0x16, 0x78, 0x51, 0xb6, 0x9c, 0x74, + 0xe0, 0x7d, 0xe0, 0xdb, 0x81, 0x04, 0x71, 0x1f, + 0xc9, 0xa4, 0x12, 0x22, 0xb0, 0x8d, 0x65, 0x55, + 0xed, 0xc3, 0xa6, 0x9c, 0x67, 0xcd, 0xd5, 0x56, + 0xea, 0xc8, 0x03, 0x44, 0x31, 0xaf, 0xef, 0x36, + 0xe0, 0x38, 0xf9, 0xb1, 0xd7, 0x9a, 0xb0, 0xdc, + 0x77, 0xeb, 0x3f, 0xd6, 0xd4, 0x27, 0x9e, 0xd1, + 0x5e, 0x52, 0x37, 0xb6, 0x48, 0xcf, 0xb2, 0xba, + 0x10, 0xf7, 0xdb, 0xbe, 0xba, 0x10, 0xf7, 0xdb, + 0xbe, 0xba, 0x10, 0xf7, 0xdb, 0xbe, 0xba, 0x10, + 0xf7, 0xdb, 0xbe, 0xba, 0x10, 0xf7, 0xdb, 0xbe, + 0xba, 0x10, 0xf7, 0xdb, 0xbe, 0xba, 0x10, 0xf7, + 0xdb, 0xbe, 0x97, 0xfc, 0x90, 0xe3, 0xf8, 0xdb, + 0xbe, 0xa3, 0x8a, 0x24, 0x09, 0x1a, 0xae, 0x15, + 0x47, 0x55, 0x7f, 0xff, 0xc4, 0x00, 0x24, 0x10, + 0x01, 0x00, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, + 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x11, 0x21, 0x00, 0x31, 0x41, 0x51, 0x61, + 0x71, 0x10, 0x20, 0x81, 0x30, 0x91, 0xa1, 0xc1, + 0xf0, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, + 0x01, 0x3f, 0x21, 0x23, 0x87, 0x57, 0x86, 0x93, + 0x22, 0x56, 0x26, 0xfb, 0xeb, 0xee, 0xc9, 0x93, + 0x26, 0x4c, 0x99, 0x6b, 0xbd, 0xa5, 0x3d, 0x0e, + 0xcf, 0xfd, 0xaf, 0x8a, 0x64, 0x9d, 0x34, 0xaa, + 0xec, 0x3b, 0x49, 0x3e, 0x71, 0x65, 0x91, 0x2f, + 0x9b, 0x21, 0x06, 0x3d, 0xc3, 0x90, 0xa3, 0xe2, + 0x58, 0x28, 0x11, 0xd2, 0x5f, 0xe9, 0x18, 0xcd, + 0x33, 0xe3, 0x96, 0x34, 0x49, 0x24, 0x40, 0x8b, + 0x40, 0x04, 0xe0, 0x18, 0x99, 0xe9, 0x2c, 0xe7, + 0xa8, 0x10, 0xd1, 0x38, 0xcd, 0x38, 0x56, 0xc3, + 0x11, 0x13, 0xd1, 0xda, 0x69, 0x78, 0xb4, 0x62, + 0x80, 0x2e, 0x08, 0x82, 0x0f, 0x92, 0xb2, 0x2a, + 0x63, 0xe4, 0x0a, 0x06, 0x89, 0xa4, 0xe5, 0x2e, + 0x42, 0x96, 0x1b, 0x41, 0x52, 0x21, 0x06, 0xbc, + 0x71, 0xbb, 0x3e, 0x32, 0x1c, 0x26, 0xe5, 0x06, + 0x70, 0x14, 0x09, 0x72, 0x7e, 0x97, 0x37, 0x54, + 0x9b, 0x49, 0xcf, 0x55, 0x58, 0x2a, 0x93, 0x43, + 0x85, 0x08, 0x92, 0xda, 0x1e, 0x1e, 0x5c, 0x96, + 0x5f, 0x80, 0x6a, 0x8e, 0xc6, 0x68, 0xc5, 0x23, + 0x0f, 0x38, 0xd1, 0x86, 0x35, 0x14, 0x2e, 0xe5, + 0xa9, 0x1e, 0x6c, 0xb9, 0x3e, 0x40, 0x6d, 0xd9, + 0x49, 0x4f, 0xd5, 0x9c, 0xd0, 0x2f, 0x2a, 0x65, + 0xc5, 0x6c, 0x0f, 0x47, 0xbc, 0x46, 0x7d, 0xa7, + 0xc1, 0xd1, 0xf1, 0x52, 0x32, 0x3c, 0x22, 0xdc, + 0x4a, 0x27, 0x25, 0x55, 0x2e, 0xfc, 0x87, 0x71, + 0xac, 0x4c, 0xb0, 0x18, 0x7e, 0x9a, 0x40, 0x19, + 0x13, 0xe1, 0x2d, 0xf4, 0xb6, 0xd5, 0x76, 0xc1, + 0x94, 0xdc, 0x27, 0xa3, 0x5d, 0x3a, 0x32, 0x7a, + 0x42, 0x52, 0x20, 0x02, 0x6c, 0xac, 0x14, 0xa8, + 0x62, 0x21, 0x84, 0xf9, 0x01, 0xdf, 0xbb, 0xf0, + 0x32, 0x4b, 0x0d, 0xb2, 0x36, 0x4c, 0x4e, 0xca, + 0x75, 0xe3, 0xbc, 0xf6, 0xcf, 0x6c, 0x72, 0x7e, + 0x13, 0x24, 0x3a, 0xc8, 0x3a, 0xc8, 0x3a, 0xc2, + 0xda, 0x27, 0xf0, 0x77, 0x83, 0xd0, 0x30, 0x7d, + 0x23, 0x96, 0xfa, 0x27, 0x40, 0x50, 0x04, 0xaf, + 0x06, 0x5e, 0xbb, 0xdf, 0xfa, 0xfa, 0x83, 0x95, + 0xf8, 0xcc, 0x92, 0xff, 0x00, 0x81, 0x54, 0x15, + 0x6e, 0x19, 0x0b, 0x46, 0x10, 0xe2, 0xa4, 0x9e, + 0xfd, 0x8f, 0x26, 0x18, 0xda, 0xf0, 0x8f, 0xbf, + 0xb0, 0x14, 0xbc, 0x00, 0xec, 0x0a, 0x84, 0xe5, + 0x36, 0x27, 0x52, 0x5e, 0x04, 0xf6, 0xc7, 0xea, + 0x13, 0xe6, 0x90, 0xd3, 0x22, 0x72, 0x53, 0x82, + 0x29, 0x02, 0xc6, 0xa1, 0xb3, 0x4b, 0xdf, 0x5b, + 0xd5, 0x35, 0x92, 0x04, 0x6c, 0x89, 0x64, 0x94, + 0xa1, 0x95, 0x1e, 0x91, 0xac, 0xd9, 0x54, 0x86, + 0xfb, 0x11, 0x2d, 0x27, 0x26, 0x58, 0x09, 0x23, + 0x51, 0x81, 0xab, 0x8f, 0xc1, 0xbc, 0xaa, 0xd2, + 0xba, 0xb9, 0x86, 0xc3, 0x87, 0x2a, 0xb3, 0x2e, + 0x94, 0x1b, 0x03, 0xa4, 0xfe, 0xcc, 0x94, 0x08, + 0xb1, 0x7b, 0x25, 0xb3, 0xd6, 0x29, 0x4f, 0x38, + 0x16, 0x55, 0x11, 0xe9, 0x69, 0xfe, 0x1c, 0x33, + 0x3c, 0xc1, 0xb4, 0xec, 0x46, 0x93, 0xc3, 0x92, + 0x14, 0x95, 0x94, 0x54, 0xb8, 0xe1, 0x41, 0x16, + 0x55, 0xf2, 0x2a, 0x6e, 0x2c, 0x10, 0x18, 0xc0, + 0x12, 0x02, 0x08, 0xe9, 0x0f, 0x0a, 0x22, 0x25, + 0x68, 0x2b, 0x16, 0xa2, 0xf8, 0x80, 0x68, 0x11, + 0x5c, 0x57, 0x4a, 0x22, 0x87, 0x1a, 0xee, 0x11, + 0x82, 0x15, 0x48, 0x02, 0xcb, 0xad, 0xa5, 0x38, + 0xcb, 0x89, 0xd6, 0xb7, 0xae, 0x45, 0x9e, 0x93, + 0x1a, 0x8c, 0xbe, 0x8e, 0xf8, 0x42, 0x10, 0xc0, + 0x53, 0x4c, 0x91, 0x2d, 0xc4, 0x43, 0x5b, 0xd4, + 0xb8, 0x72, 0xa7, 0x0d, 0xb4, 0xfb, 0x48, 0x9f, + 0xe0, 0x8d, 0x9a, 0x36, 0x68, 0xd9, 0xb3, 0x22, + 0x57, 0x21, 0x4a, 0x98, 0x31, 0x3a, 0x26, 0x01, + 0xd6, 0x7f, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, + 0x12, 0x01, 0x27, 0x03, 0xc0, 0x00, 0x97, 0x81, + 0x20, 0x90, 0x83, 0xe8, 0x82, 0x2d, 0x20, 0xb2, + 0x48, 0xa9, 0x2c, 0xc8, 0x0e, 0xdb, 0x03, 0x20, + 0xff, 0x00, 0xfe, 0x20, 0x70, 0xe4, 0x93, 0x92, + 0x3c, 0x9f, 0x9c, 0x16, 0xd9, 0xb4, 0x8f, 0xff, + 0xc4, 0x00, 0x1e, 0x11, 0x00, 0x03, 0x00, 0x02, + 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x10, + 0x31, 0x20, 0x21, 0x30, 0x41, 0x51, 0x61, 0xff, + 0xda, 0x00, 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, + 0x10, 0x94, 0x84, 0x21, 0x08, 0x43, 0xb2, 0xf6, + 0x7e, 0xc4, 0x3f, 0xaf, 0x03, 0x50, 0xfc, 0x20, + 0xc6, 0xe3, 0x68, 0x69, 0xbd, 0xe1, 0xaf, 0x93, + 0xf5, 0x10, 0xe7, 0x26, 0x8e, 0x2d, 0x14, 0x7d, + 0xba, 0xc8, 0x42, 0x1a, 0xb8, 0xb5, 0x10, 0x84, + 0x21, 0xa2, 0xe0, 0xde, 0x89, 0x88, 0x42, 0x1a, + 0x65, 0xb9, 0x98, 0x42, 0x32, 0x0b, 0x59, 0x7d, + 0xf2, 0x82, 0xd6, 0x21, 0x08, 0x42, 0x10, 0x84, + 0xc7, 0xff, 0xc4, 0x00, 0x1f, 0x11, 0x00, 0x03, + 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x11, 0x20, 0x31, 0x10, 0x21, 0x41, 0x51, 0x61, + 0x30, 0x71, 0xff, 0xda, 0x00, 0x08, 0x01, 0x02, + 0x01, 0x01, 0x3f, 0x10, 0xb0, 0xbf, 0x0a, 0x5f, + 0x85, 0x29, 0x4e, 0x97, 0xc7, 0x93, 0xe6, 0x53, + 0xf4, 0xfc, 0x12, 0x45, 0xef, 0x87, 0x7f, 0xed, + 0x9a, 0xd2, 0x86, 0xc4, 0xd2, 0xd7, 0x07, 0xc8, + 0x44, 0xdd, 0x65, 0x4a, 0x53, 0x6e, 0x34, 0x41, + 0x44, 0xa2, 0x29, 0x4a, 0x6e, 0xc5, 0x60, 0xa5, + 0x29, 0x4d, 0x98, 0x27, 0x92, 0x94, 0xa5, 0x29, + 0xb7, 0x29, 0x5e, 0x69, 0x4a, 0x51, 0xef, 0x95, + 0xd6, 0x6f, 0x9a, 0x52, 0xe5, 0xff, 0xc4, 0x00, + 0x24, 0x10, 0x01, 0x01, 0x00, 0x02, 0x02, 0x03, + 0x00, 0x02, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x11, 0x00, 0x21, 0x31, 0x61, + 0x41, 0x51, 0x71, 0x20, 0xa1, 0x10, 0x81, 0x91, + 0xb1, 0xc1, 0xd1, 0xff, 0xda, 0x00, 0x08, 0x01, + 0x01, 0x00, 0x01, 0x3f, 0x10, 0x5a, 0xb8, 0xa5, + 0x42, 0x42, 0xd8, 0x10, 0xa2, 0x81, 0x80, 0x3f, + 0x28, 0x22, 0x64, 0xc9, 0x13, 0x35, 0x4f, 0x26, + 0x1c, 0xdf, 0x93, 0xd6, 0x43, 0xfa, 0xb1, 0x16, + 0x6b, 0x21, 0xa7, 0x08, 0x2e, 0x63, 0x96, 0x2d, + 0x37, 0x58, 0x08, 0x03, 0x00, 0x29, 0x80, 0x40, + 0x95, 0xe6, 0x00, 0x8f, 0xbc, 0x29, 0x43, 0x42, + 0xd8, 0xc9, 0x88, 0x86, 0x61, 0xbd, 0x45, 0xd7, + 0x64, 0x94, 0x18, 0xda, 0x72, 0xe7, 0xca, 0x3a, + 0x50, 0x08, 0x9b, 0x14, 0x29, 0x93, 0x16, 0xd8, + 0x5d, 0x6a, 0x61, 0xa8, 0x85, 0x97, 0x0b, 0xf9, + 0x93, 0x87, 0x26, 0x34, 0xa9, 0x03, 0x77, 0x8d, + 0x05, 0x05, 0xc1, 0x29, 0xa1, 0x52, 0x22, 0x11, + 0x83, 0x70, 0x27, 0x8a, 0x81, 0x6e, 0x9b, 0x90, + 0x88, 0x68, 0x42, 0xb8, 0xd4, 0x1f, 0xd0, 0xb7, + 0x16, 0x1b, 0x6c, 0x13, 0xba, 0xaf, 0x79, 0xd8, + 0xcf, 0x8d, 0x3a, 0xd9, 0xf9, 0x37, 0x80, 0xa9, + 0x5f, 0x06, 0x25, 0x2c, 0x49, 0x6d, 0x13, 0xa1, + 0x2c, 0x5d, 0x52, 0x45, 0x14, 0xaf, 0x43, 0x02, + 0xd1, 0x35, 0xa6, 0xc5, 0x1a, 0xdb, 0x72, 0x93, + 0x1d, 0xc8, 0x2e, 0x1a, 0x3b, 0x73, 0x42, 0xa6, + 0x0a, 0xbc, 0x4f, 0xe7, 0xa8, 0xb9, 0x46, 0x82, + 0xd3, 0x48, 0xf3, 0xaa, 0xcb, 0xb6, 0x94, 0x10, + 0x6e, 0x1a, 0x75, 0xac, 0x42, 0x4e, 0xf2, 0x80, + 0xd9, 0xa2, 0xab, 0xea, 0xf2, 0xe1, 0xb1, 0x34, + 0x5e, 0x36, 0x1f, 0x41, 0x9f, 0x59, 0xdc, 0xc9, + 0x9c, 0xe9, 0xe2, 0xa1, 0x4c, 0xdb, 0x5a, 0x1b, + 0xbc, 0xde, 0xe9, 0xf4, 0x8b, 0xf4, 0x40, 0xd9, + 0x82, 0x41, 0xa6, 0x0b, 0x7e, 0xa1, 0x16, 0x88, + 0x86, 0x91, 0x10, 0xe6, 0x97, 0x15, 0xad, 0x8e, + 0x12, 0x29, 0x48, 0xfd, 0xda, 0xa1, 0x0d, 0xea, + 0xe4, 0x11, 0x15, 0x2a, 0x85, 0x8b, 0xa3, 0x71, + 0x23, 0xaa, 0xd1, 0x8d, 0x31, 0x85, 0x79, 0x29, + 0x01, 0xc8, 0xb2, 0x02, 0x18, 0xe1, 0x70, 0xb4, + 0x72, 0x56, 0x80, 0x6d, 0x18, 0x3f, 0x8a, 0xed, + 0x25, 0xcf, 0x6c, 0x2b, 0xa1, 0xfd, 0xb3, 0x8b, + 0x4d, 0x71, 0xac, 0x0a, 0x40, 0x4e, 0xb0, 0x12, + 0x72, 0xa1, 0x41, 0xe5, 0x7f, 0xcf, 0x70, 0xc2, + 0xec, 0xa0, 0x85, 0x7d, 0xaf, 0xb5, 0x6a, 0xbe, + 0xdc, 0x09, 0xc4, 0x33, 0xeb, 0x3e, 0xf3, 0xb7, + 0x9b, 0xf0, 0xfd, 0x3b, 0x67, 0x40, 0x2a, 0xbe, + 0x8c, 0x93, 0x86, 0x23, 0x78, 0xf4, 0x3a, 0x3f, + 0xcd, 0xcf, 0xaf, 0xde, 0x7d, 0x7e, 0xf3, 0xeb, + 0xf7, 0x9f, 0x5f, 0xbc, 0xed, 0x86, 0xfe, 0x1d, + 0x57, 0x8f, 0x2d, 0x33, 0x02, 0x1b, 0x08, 0xe0, + 0xab, 0x26, 0x2d, 0x95, 0x2e, 0x48, 0xbb, 0x0a, + 0x6a, 0x52, 0x82, 0x6c, 0x66, 0x4b, 0xab, 0xa3, + 0x95, 0x4d, 0x5e, 0xc4, 0x3e, 0x39, 0xf5, 0x9f, + 0x59, 0xf5, 0x9f, 0x59, 0xf5, 0x9d, 0xa4, 0xf8, + 0xa8, 0x5a, 0xba, 0x86, 0xa8, 0x22, 0x29, 0x40, + 0x34, 0x46, 0x39, 0xce, 0xbf, 0x78, 0x07, 0x24, + 0x88, 0xcb, 0x87, 0x13, 0x18, 0x98, 0xab, 0x90, + 0x19, 0x1a, 0x8f, 0x53, 0xa9, 0x31, 0xbf, 0x01, + 0x9f, 0x79, 0x02, 0x52, 0x4c, 0x26, 0xc6, 0x60, + 0x24, 0xe2, 0x4d, 0x71, 0x84, 0x82, 0x52, 0x9e, + 0x25, 0x01, 0xdd, 0x5c, 0x48, 0x26, 0x49, 0x08, + 0x01, 0x45, 0x73, 0x74, 0x8a, 0xa0, 0x9f, 0x02, + 0x5a, 0x08, 0x80, 0xfa, 0x58, 0xe2, 0x8e, 0x75, + 0x09, 0x08, 0x11, 0x4d, 0xbd, 0xf8, 0x6f, 0x26, + 0x76, 0x3e, 0x2f, 0x81, 0x03, 0xed, 0x46, 0x76, + 0xc3, 0x62, 0x82, 0xf4, 0x0c, 0x69, 0x9f, 0x10, + 0x4e, 0x93, 0x05, 0xf4, 0x82, 0x09, 0x41, 0xca, + 0xbd, 0x09, 0x41, 0x94, 0x32, 0xc0, 0xa7, 0xa8, + 0x28, 0x6b, 0xa3, 0x47, 0xfa, 0xcd, 0x07, 0xc0, + 0x2f, 0x79, 0x3b, 0xae, 0x9a, 0x5c, 0xb3, 0xcc, + 0x2f, 0x1a, 0xb6, 0x1c, 0x42, 0xc0, 0x7c, 0x6a, + 0x14, 0xcf, 0x82, 0x5e, 0xd2, 0xe6, 0x50, 0x98, + 0x21, 0x50, 0x3f, 0x97, 0xcc, 0x68, 0x54, 0x93, + 0x4a, 0x98, 0xa0, 0x9b, 0x40, 0xb1, 0xde, 0xb9, + 0x29, 0x5a, 0x0b, 0x4a, 0x80, 0x3b, 0xf6, 0x3d, + 0x19, 0x9e, 0x5d, 0xae, 0x42, 0xb8, 0x61, 0xd2, + 0x50, 0x15, 0x15, 0x01, 0xf8, 0x88, 0x9f, 0x70, + 0xf5, 0xd8, 0x8f, 0x7a, 0x2b, 0x49, 0xdf, 0xe5, + 0x67, 0x6c, 0xdd, 0xb3, 0x4c, 0xda, 0xe6, 0xd0, + 0xed, 0x98, 0x58, 0xdf, 0x91, 0x94, 0xeb, 0x05, + 0x4f, 0xa5, 0x1c, 0xd0, 0x3c, 0x06, 0x7f, 0xff, + 0xd9, +}; + +const struct fsdata_file file_tm4c_jpg[] = +{ + { + NULL, + data_tm4c_jpg, + data_tm4c_jpg + 10, + sizeof(data_tm4c_jpg) - 10 + } +}; + +const struct fsdata_file file_ti_jpg[] = +{ + { + file_tm4c_jpg, + data_ti_jpg, + data_ti_jpg + 8, + sizeof(data_ti_jpg) - 8 + } +}; + +const struct fsdata_file file_styles_css[] = +{ + { + file_ti_jpg, + data_styles_css, + data_styles_css + 12, + sizeof(data_styles_css) - 12 + } +}; + +const struct fsdata_file file_perror_htm[] = +{ + { + file_styles_css, + data_perror_htm, + data_perror_htm + 12, + sizeof(data_perror_htm) - 12 + } +}; + +const struct fsdata_file file_overview_htm[] = +{ + { + file_perror_htm, + data_overview_htm, + data_overview_htm + 14, + sizeof(data_overview_htm) - 14 + } +}; + +const struct fsdata_file file_javascript_load_js[] = +{ + { + file_overview_htm, + data_javascript_load_js, + data_javascript_load_js + 20, + sizeof(data_javascript_load_js) - 20 + } +}; + +const struct fsdata_file file_javascript_js[] = +{ + { + file_javascript_load_js, + data_javascript_js, + data_javascript_js + 15, + sizeof(data_javascript_js) - 15 + } +}; + +const struct fsdata_file file_io_http_htm[] = +{ + { + file_javascript_js, + data_io_http_htm, + data_io_http_htm + 13, + sizeof(data_io_http_htm) - 13 + } +}; + +const struct fsdata_file file_io_cgi_ssi[] = +{ + { + file_io_http_htm, + data_io_cgi_ssi, + data_io_cgi_ssi + 12, + sizeof(data_io_cgi_ssi) - 12 + } +}; + +const struct fsdata_file file_index_htm[] = +{ + { + file_io_cgi_ssi, + data_index_htm, + data_index_htm + 11, + sizeof(data_index_htm) - 11 + } +}; + +const struct fsdata_file file_favicon_ico[] = +{ + { + file_index_htm, + data_favicon_ico, + data_favicon_ico + 13, + sizeof(data_favicon_ico) - 13 + } +}; + +const struct fsdata_file file_dk_tm4c129x_jpg[] = +{ + { + file_favicon_ico, + data_dk_tm4c129x_jpg, + data_dk_tm4c129x_jpg + 17, + sizeof(data_dk_tm4c129x_jpg) - 17 + } +}; + +const struct fsdata_file file_block_jpg[] = +{ + { + file_dk_tm4c129x_jpg, + data_block_jpg, + data_block_jpg + 11, + sizeof(data_block_jpg) - 11 + } +}; + +const struct fsdata_file file_block_htm[] = +{ + { + file_block_jpg, + data_block_htm, + data_block_htm + 11, + sizeof(data_block_htm) - 11 + } +}; + +const struct fsdata_file file_about_htm[] = +{ + { + file_block_htm, + data_about_htm, + data_about_htm + 11, + sizeof(data_about_htm) - 11 + } +}; + +const struct fsdata_file file_404_htm[] = +{ + { + file_about_htm, + data_404_htm, + data_404_htm + 9, + sizeof(data_404_htm) - 9 + } +}; + +#define FS_ROOT file_404_htm + +#define FS_NUMFILES 16 + diff --git a/boards/dk-tm4c129x/enet_io/lwipopts.h b/boards/dk-tm4c129x/enet_io/lwipopts.h new file mode 100644 index 0000000..de6ac67 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/lwipopts.h @@ -0,0 +1,439 @@ +//***************************************************************************** +// +// lwipopts.h - Configuration file for lwIP +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +// +// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h +// header file. +// +// For additional details, refer to the original "opt.h" file, and lwIP +// documentation. +// +//***************************************************************************** + +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +//***************************************************************************** +// +// ---------- Stellaris / lwIP Port Options ---------- +// +//***************************************************************************** +#define HOST_TMR_INTERVAL 100 // default is 0 +#define DHCP_EXPIRE_TIMER_MSECS (10 * 1000) +#define LWIP_HTTPD_SSI 1 +#define LWIP_HTTPD_CGI 1 +#define LWIP_HTTPD_DYNAMIC_HEADERS 1 +//#define HTTPD_DEBUG LWIP_DBG_ON +#define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | \ + EMAC_PHY_AN_100B_T_FULL_DUPLEX) +#define PHY_PHYS_ADDR 0 +#define NUM_TX_DESCRIPTORS 24 +#define NUM_RX_DESCRIPTORS 8 + +//***************************************************************************** +// +// ---------- Platform specific locking ---------- +// +//***************************************************************************** +#define SYS_LIGHTWEIGHT_PROT 1 // default is 0 +#define NO_SYS 1 // default is 0 +//#define MEMCPY(dst,src,len) memcpy(dst,src,len) +//#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +//***************************************************************************** +// +// ---------- Memory options ---------- +// +//***************************************************************************** +//#define MEM_LIBC_MALLOC 0 +#define MEM_ALIGNMENT 4 // default is 1 +#define MEM_SIZE (64 * 1024) // default is 1600 +//#define MEMP_OVERFLOW_CHECK 0 +//#define MEMP_SANITY_CHECK 0 +//#define MEM_USE_POOLS 0 +//#define MEMP_USE_CUSTOM_POOLS 0 + +//***************************************************************************** +// +// ---------- Internal Memory Pool Sizes ---------- +// +//***************************************************************************** +#define MEMP_NUM_PBUF 48 // Default 16 +//#define MEMP_NUM_RAW_PCB 4 +//#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 16 // Default 5 +//#define MEMP_NUM_TCP_PCB_LISTEN 8 +#define MEMP_NUM_TCP_SEG 32 // Default 16 +//#define MEMP_NUM_REASSDATA 5 +//#define MEMP_NUM_ARP_QUEUE 30 +//#define MEMP_NUM_IGMP_GROUP 8 +#define MEMP_NUM_SYS_TIMEOUT 8 +//#define MEMP_NUM_NETBUF 2 +//#define MEMP_NUM_NETCONN 4 +//#define MEMP_NUM_TCPIP_MSG_API 8 +//#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 48 // Default 16 + +//***************************************************************************** +// +// ---------- ARP options ---------- +// +//***************************************************************************** +//#define LWIP_ARP 1 +//#define ARP_TABLE_SIZE 10 +//#define ARP_QUEUEING 1 +//#define ETHARP_TRUST_IP_MAC 1 + +//***************************************************************************** +// +// ---------- IP options ---------- +// +//***************************************************************************** +//#define IP_FORWARD 0 +//#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 0 // default is 1 +#define IP_FRAG 0 // default is 1 +//#define IP_REASS_MAXAGE 3 +//#define IP_REASS_MAX_PBUFS 10 +//#define IP_FRAG_USES_STATIC_BUF 1 +//#define IP_FRAG_MAX_MTU 1500 +//#define IP_DEFAULT_TTL 255 + +//***************************************************************************** +// +// ---------- ICMP options ---------- +// +//***************************************************************************** +//#define LWIP_ICMP 1 +//#define ICMP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- RAW options ---------- +// +//***************************************************************************** +//#define LWIP_RAW 1 +//#define RAW_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- DHCP options ---------- +// +//***************************************************************************** +#define LWIP_DHCP 1 // default is 0 +//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) + +//***************************************************************************** +// +// ---------- UPNP options ---------- +// +//***************************************************************************** +//#define LWIP_UPNP 0 + +//***************************************************************************** +// +// ---------- PTPD options ---------- +// +//***************************************************************************** +//#define LWIP_PTPD 0 + +//***************************************************************************** +// +// ---------- AUTOIP options ---------- +// +//***************************************************************************** +#define LWIP_AUTOIP 1 // default is 0 +#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP)) + // default is 0 +#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9 + +//***************************************************************************** +// +// ---------- SNMP options ---------- +// +//***************************************************************************** +//#define LWIP_SNMP 0 +//#define SNMP_CONCURRENT_REQUESTS 1 +//#define SNMP_TRAP_DESTINATIONS 1 +//#define SNMP_PRIVATE_MIB 0 +//#define SNMP_SAFE_REQUESTS 1 + +//***************************************************************************** +// +// ---------- IGMP options ---------- +// +//***************************************************************************** +//#define LWIP_IGMP 0 + +//***************************************************************************** +// +// ---------- DNS options ----------- +// +//***************************************************************************** +//#define LWIP_DNS 0 +//#define DNS_TABLE_SIZE 4 +//#define DNS_MAX_NAME_LENGTH 256 +//#define DNS_MAX_SERVERS 2 +//#define DNS_DOES_NAME_CHECK 1 +//#define DNS_USES_STATIC_BUF 1 +//#define DNS_MSG_SIZE 512 + +//***************************************************************************** +// +// ---------- UDP options ---------- +// +//***************************************************************************** +//#define LWIP_UDP 1 +//#define LWIP_UDPLITE 0 +//#define UDP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- TCP options ---------- +// +//***************************************************************************** +//#define LWIP_TCP 1 +//#define TCP_TTL (IP_DEFAULT_TTL) +#define TCP_WND 4096 // default is 2048 +//#define TCP_MAXRTX 12 +//#define TCP_SYNMAXRTX 6 +//#define TCP_QUEUE_OOSEQ 1 +#define TCP_MSS 1500 // default is 128 +//#define TCP_CALCULATE_EFF_SEND_MSS 1 +#define TCP_SND_BUF (6 * TCP_MSS) + // default is 256 +//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) +//#define TCP_SNDLOWAT (TCP_SND_BUF/2) +//#define TCP_LISTEN_BACKLOG 0 +//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff + +//***************************************************************************** +// +// ---------- API options ---------- +// +//***************************************************************************** +//#define LWIP_EVENT_API 0 +//#define LWIP_CALLBACK_API 1 + +//***************************************************************************** +// +// ---------- Pbuf options ---------- +// +//***************************************************************************** +#define PBUF_LINK_HLEN 16 // default is 14 +#define PBUF_POOL_BUFSIZE 512 + // default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#define ETH_PAD_SIZE 0 // default is 0 + +//***************************************************************************** +// +// ---------- Network Interfaces options ---------- +// +//***************************************************************************** +//#define LWIP_NETIF_HOSTNAME 0 +//#define LWIP_NETIF_API 0 +//#define LWIP_NETIF_STATUS_CALLBACK 0 +//#define LWIP_NETIF_LINK_CALLBACK 0 +//#define LWIP_NETIF_HWADDRHINT 0 + +//***************************************************************************** +// +// ---------- LOOPIF options ---------- +// +//***************************************************************************** +//#define LWIP_HAVE_LOOPIF 0 +//#define LWIP_LOOPIF_MULTITHREADING 1 + +//***************************************************************************** +// +// ---------- Thread options ---------- +// +//***************************************************************************** +//#define TCPIP_THREAD_NAME "tcpip_thread" +//#define TCPIP_THREAD_STACKSIZE 0 +//#define TCPIP_THREAD_PRIO 1 +//#define TCPIP_MBOX_SIZE 0 +//#define SLIPIF_THREAD_NAME "slipif_loop" +//#define SLIPIF_THREAD_STACKSIZE 0 +//#define SLIPIF_THREAD_PRIO 1 +//#define PPP_THREAD_NAME "pppMain" +//#define PPP_THREAD_STACKSIZE 0 +//#define PPP_THREAD_PRIO 1 +//#define DEFAULT_THREAD_NAME "lwIP" +//#define DEFAULT_THREAD_STACKSIZE 0 +//#define DEFAULT_THREAD_PRIO 1 +//#define DEFAULT_RAW_RECVMBOX_SIZE 0 +//#define DEFAULT_UDP_RECVMBOX_SIZE 0 +//#define DEFAULT_TCP_RECVMBOX_SIZE 0 +//#define DEFAULT_ACCEPTMBOX_SIZE 0 + +//***************************************************************************** +// +// ---------- Sequential layer options ---------- +// +//***************************************************************************** +//#define LWIP_TCPIP_CORE_LOCKING 0 +#define LWIP_NETCONN 0 // default is 1 + +//***************************************************************************** +// +// ---------- Socket Options ---------- +// +//***************************************************************************** +#define LWIP_SOCKET 0 // default is 1 +//#define LWIP_COMPAT_SOCKETS 1 +//#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +//#define LWIP_TCP_KEEPALIVE 0 +//#define LWIP_SO_RCVTIMEO 0 +//#define LWIP_SO_RCVBUF 0 +//#define SO_REUSE 0 + +//***************************************************************************** +// +// ---------- Statistics options ---------- +// +//***************************************************************************** +//#define LWIP_STATS 1 +//#define LWIP_STATS_DISPLAY 0 +//#define LINK_STATS 1 +//#define ETHARP_STATS (LWIP_ARP) +//#define IP_STATS 1 +//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +//#define ICMP_STATS 1 +//#define IGMP_STATS (LWIP_IGMP) +//#define UDP_STATS (LWIP_UDP) +//#define TCP_STATS (LWIP_TCP) +//#define MEM_STATS 1 +//#define MEMP_STATS 1 +//#define SYS_STATS 1 + +//***************************************************************************** +// +// ---------- PPP options ---------- +// +//***************************************************************************** +//#define PPP_SUPPORT 0 +//#define PPPOE_SUPPORT 0 +//#define PPPOS_SUPPORT PPP_SUPPORT + +#if PPP_SUPPORT +//#define NUM_PPP 1 +//#define PAP_SUPPORT 0 +//#define CHAP_SUPPORT 0 +//#define MSCHAP_SUPPORT 0 +//#define CBCP_SUPPORT 0 +//#define CCP_SUPPORT 0 +//#define VJ_SUPPORT 0 +//#define MD5_SUPPORT 0 +//#define FSM_DEFTIMEOUT 6 +//#define FSM_DEFMAXTERMREQS 2 +//#define FSM_DEFMAXCONFREQS 10 +//#define FSM_DEFMAXNAKLOOPS 5 +//#define UPAP_DEFTIMEOUT 6 +//#define UPAP_DEFREQTIME 30 +//#define CHAP_DEFTIMEOUT 6 +//#define CHAP_DEFTRANSMITS 10 +//#define LCP_ECHOINTERVAL 0 +//#define LCP_MAXECHOFAILS 3 +//#define PPP_MAXIDLEFLAG 100 + +//#define PPP_MAXMTU 1500 +//#define PPP_DEFMRU 296 +#endif + +//***************************************************************************** +// +// ---------- checksum options ---------- +// +//***************************************************************************** +#define CHECKSUM_GEN_IP 0 +#define CHECKSUM_GEN_ICMP 0 +#define CHECKSUM_GEN_UDP 0 +#define CHECKSUM_GEN_TCP 0 +#define CHECKSUM_CHECK_IP 0 +#define CHECKSUM_CHECK_UDP 0 +#define CHECKSUM_CHECK_TCP 0 + +//***************************************************************************** +// +// ---------- Debugging options ---------- +// +//***************************************************************************** +#if 0 +#define U8_F "c" +#define S8_F "c" +#define X8_F "x" +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" +extern void UARTprintf(const char *pcString, ...); +#define LWIP_DEBUG +#endif + +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE + +//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH) + +//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF +//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF +//#define PBUF_DEBUG LWIP_DBG_OFF +//#define API_LIB_DEBUG LWIP_DBG_OFF +//#define API_MSG_DEBUG LWIP_DBG_OFF +//#define SOCKETS_DEBUG LWIP_DBG_OFF +//#define ICMP_DEBUG LWIP_DBG_OFF +//#define IGMP_DEBUG LWIP_DBG_OFF +//#define INET_DEBUG LWIP_DBG_OFF +//#define IP_DEBUG LWIP_DBG_ON // default is OFF +//#define IP_REASS_DEBUG LWIP_DBG_OFF +//#define RAW_DEBUG LWIP_DBG_OFF +//#define MEM_DEBUG LWIP_DBG_OFF +//#define MEMP_DEBUG LWIP_DBG_OFF +//#define SYS_DEBUG LWIP_DBG_OFF +//#define TCP_DEBUG LWIP_DBG_OFF +//#define TCP_INPUT_DEBUG LWIP_DBG_OFF +//#define TCP_FR_DEBUG LWIP_DBG_OFF +//#define TCP_RTO_DEBUG LWIP_DBG_OFF +//#define TCP_CWND_DEBUG LWIP_DBG_OFF +//#define TCP_WND_DEBUG LWIP_DBG_OFF +//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +//#define TCP_RST_DEBUG LWIP_DBG_OFF +//#define TCP_QLEN_DEBUG LWIP_DBG_OFF +//#define UDP_DEBUG LWIP_DBG_ON // default is OFF +//#define TCPIP_DEBUG LWIP_DBG_OFF +//#define PPP_DEBUG LWIP_DBG_OFF +//#define SLIP_DEBUG LWIP_DBG_OFF +//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF +//#define AUTOIP_DEBUG LWIP_DBG_OFF +//#define SNMP_MSG_DEBUG LWIP_DBG_OFF +//#define SNMP_MIB_DEBUG LWIP_DBG_OFF +//#define DNS_DEBUG LWIP_DBG_OFF + +#endif /* __LWIPOPTS_H__ */ diff --git a/boards/dk-tm4c129x/enet_io/readme.txt b/boards/dk-tm4c129x/enet_io/readme.txt new file mode 100644 index 0000000..900af8e --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/readme.txt @@ -0,0 +1,78 @@ +Ethernet-based I/O Control + +This example application demonstrates web-based I/O control using the +Tiva Ethernet controller and the lwIP TCP/IP Stack. DHCP is used to +obtain an Ethernet address. If DHCP times out without obtaining an +address, a static IP address will be chosen using AutoIP. The address that +is selected will be shown on the QVGA display allowing you to access the +internal web pages served by the application via your normal web browser. + +Two different methods of controlling board peripherals via web pages are +illustrated via pages labeled ``IO Control Demo 1'' and ``IO Control +Demo 2'' in the navigation menu on the left of the application's home page. +In both cases, the example allows you to toggle the state of the user LED +on the board and set the speed of a graphical animation on the display. + +``IO Control Demo 1'' uses JavaScript running in the web browser to send +HTTP requests for particular special URLs. These special URLs are +intercepted in the file system support layer (io_fs.c) and used to +control the LED and animation. Responses generated by the board are +returned to the browser and inserted into the page HTML dynamically by +more JavaScript code. + +``IO Control Demo 2'' uses standard HTML forms to pass parameters to CGI +(Common Gateway Interface) handlers running on the board. These handlers +process the form data and control the animation and LED as requested before +sending a response page (in this case, the original form) back to the +browser. The application registers the names and handlers for each of its +CGIs with the HTTPD server during initialization and the server calls +these handlers after parsing URL parameters each time one of the CGI URLs +is requested. + +Information on the state of the various controls in the second demo is +inserted into the served HTML using SSI (Server Side Include) tags which +are parsed by the HTTPD server in the application. As with the CGI +handlers, the application registers its list of SSI tags and a handler +function with the web server during initialization and this handler is +called whenever any registered tag is found in a .shtml, .ssi, .shtm or +.xml file being served to the browser. + +In addition to LED and animation speed control, the second example also +allows a line of text to be sent to the board for display on the LCD +panel. This is included to illustrate the decoding of HTTP text strings. + +Note that the web server used by this example has been modified from the +example shipped with the basic lwIP package. Additions include SSI and +CGI support along with the ability to have the server automatically insert +the HTTP headers rather than having these built in to the files in the +file system image. + +Source files for the internal file system image can be found in the ``fs'' +directory. If any of these files are changed, the file system image +(io_fsdata.h) should be rebuilt by running the following command from the +enet_io directory: + +../../../../tools/bin/makefsfile -i fs -o io_fsdata.h -r -h -q + +For additional details on lwIP, refer to the lwIP web page at: +http://savannah.nongnu.org/projects/lwip/ + +------------------------------------------------------------------------------- + +Copyright (c) 2007-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/enet_io/rvmdk/enet_io.axf b/boards/dk-tm4c129x/enet_io/rvmdk/enet_io.axf new file mode 100644 index 0000000..cf322ae Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/rvmdk/enet_io.axf differ diff --git a/boards/dk-tm4c129x/enet_io/rvmdk/enet_io.bin b/boards/dk-tm4c129x/enet_io/rvmdk/enet_io.bin new file mode 100644 index 0000000..8e93d7c Binary files /dev/null and b/boards/dk-tm4c129x/enet_io/rvmdk/enet_io.bin differ diff --git a/boards/dk-tm4c129x/enet_io/startup_ccs.c b/boards/dk-tm4c129x/enet_io/startup_ccs.c new file mode 100644 index 0000000..f1c8626 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); +extern void AnimTimerIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + AnimTimerIntHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_io/startup_ewarm.c b/boards/dk-tm4c129x/enet_io/startup_ewarm.c new file mode 100644 index 0000000..d017f8d --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); +extern void AnimTimerIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + AnimTimerIntHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_io/startup_gcc.c b/boards/dk-tm4c129x/enet_io/startup_gcc.c new file mode 100644 index 0000000..a011ff8 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); +extern void AnimTimerIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + AnimTimerIntHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_io/startup_rvmdk.S b/boards/dk-tm4c129x/enet_io/startup_rvmdk.S new file mode 100644 index 0000000..0aee183 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN lwIPEthernetIntHandler + EXTERN SysTickIntHandler + EXTERN AnimTimerIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD AnimTimerIntHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD lwIPEthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/enet_lwip/Makefile b/boards/dk-tm4c129x/enet_lwip/Makefile new file mode 100644 index 0000000..2b633ba --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/Makefile @@ -0,0 +1,106 @@ +#****************************************************************************** +# +# Makefile - Rules for building the web server using lwIP. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/lwip-1.4.1/apps/httpserver_raw +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../third_party/fatfs/src +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/lwip-1.4.1/apps +IPATH+=../../../../third_party/lwip-1.4.1/ports/tiva-tm4c129/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include/ipv4 +IPATH+=../../../../third_party + +# +# The default rule, which causes the web server using lwIP to be built. +# +all: ${COMPILER} +all: ${COMPILER}/enet_lwip.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the web server using lwIP. +# +${COMPILER}/enet_lwip.axf: ${COMPILER}/enet_fs.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/enet_lwip.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/ff.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/frame.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/httpd.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/locator.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/lwiplib.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/mmc-dk-tm4c129x.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/pinout.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/enet_lwip.axf: ${COMPILER}/ustdlib.o +${COMPILER}/enet_lwip.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/enet_lwip.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/enet_lwip.axf: enet_lwip.ld +SCATTERgcc_enet_lwip=enet_lwip.ld +ENTRY_enet_lwip=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/.ccsimportspec b/boards/dk-tm4c129x/enet_lwip/ccs/.ccsimportspec new file mode 100644 index 0000000..5537fcc --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/.ccsimportspec @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/.ccsproject b/boards/dk-tm4c129x/enet_lwip/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/.cproject b/boards/dk-tm4c129x/enet_lwip/ccs/.cproject new file mode 100644 index 0000000..d5b34c0 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/.cproject @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/.project b/boards/dk-tm4c129x/enet_lwip/ccs/.project new file mode 100644 index 0000000..f1e4978 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/.project @@ -0,0 +1,100 @@ + + + enet_lwip + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + enet_fs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_lwip/enet_fs.c + + + enet_lwip.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_lwip/enet_lwip.c + + + enet_lwip_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_lwip/enet_lwip_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_lwip/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/locator.c + 1 + SW_ROOT/utils/locator.c + + + utils/lwiplib.c + 1 + SW_ROOT/utils/lwiplib.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fatfs/port/mmc-dk-tm4c129x.c + 1 + SW_ROOT/third_party/fatfs/port/mmc-dk-tm4c129x.c + + + third_party/fatfs/src/ff.c + 1 + SW_ROOT/third_party/fatfs/src/ff.c + + + third_party/lwip-1.4.1/apps/httpserver_raw/httpd.c + 1 + SW_ROOT/third_party/lwip-1.4.1/apps/httpserver_raw/httpd.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/enet_lwip/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.bin b/boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.bin new file mode 100644 index 0000000..df15448 Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.bin differ diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.out b/boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.out new file mode 100644 index 0000000..7e7356e Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/ccs/Debug/enet_lwip.out differ diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/macros.ini_initial b/boards/dk-tm4c129x/enet_lwip/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/enet_lwip/ccs/target_config.ccxml b/boards/dk-tm4c129x/enet_lwip/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_lwip/enet_fs.c b/boards/dk-tm4c129x/enet_lwip/enet_fs.c new file mode 100644 index 0000000..4a38ee5 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_fs.c @@ -0,0 +1,338 @@ +//***************************************************************************** +// +// enet_fs.c - File System Processing for lwIP Web Server Apps. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "driverlib/rom.h" +#include "driverlib/ssi.h" +#include "utils/lwiplib.h" +#include "utils/ustdlib.h" +#include "httpserver_raw/httpd.h" +#include "httpserver_raw/fs.h" +#include "httpserver_raw/fsdata.h" +#include "fatfs/src/ff.h" +#include "fatfs/src/diskio.h" + +//***************************************************************************** +// +// Include the file system data for this application. This file is generated +// by the makefsfile utility, using the following command: +// +// ../../../../tools/bin/makefsfile -i fs -o enet_fsdata.h -r -h -q +// +// If any changes are made to the static content of the web pages served by the +// application, this command must be used to regenerate enet_fsdata.h in order +// for those changes to be picked up by the web server. +// +//***************************************************************************** +#include "enet_fsdata.h" + +//***************************************************************************** +// +// The following are data structures used by FatFs. +// +//***************************************************************************** +static FATFS g_sFatFs; + +//***************************************************************************** +// +// The number of milliseconds that has passed since the last disk_timerproc() +// call. +// +//***************************************************************************** +static uint32_t ui32TickCounter = 0; + +//***************************************************************************** +// +// Initialize the file system. +// +//***************************************************************************** +void +fs_init(void) +{ + // + // Initialize and mount the Fat File System. + // + f_mount(0, &g_sFatFs); +} + +//***************************************************************************** +// +// File System tick handler. +// +//***************************************************************************** +void +fs_tick(uint32_t ui32TickMS) +{ + // + // Increment the tick counter. + // + ui32TickCounter += ui32TickMS; + + // + // Check to see if the FAT FS tick needs to run. + // + if(ui32TickCounter >= 10) + { + ui32TickCounter = 0; + disk_timerproc(); + } +} + +//***************************************************************************** +// +// Open a file and return a handle to the file, if found. Otherwise, +// return NULL. +// +//***************************************************************************** +struct fs_file * +fs_open(const char *pcName) +{ + const struct fsdata_file *psTree; + struct fs_file *psFile = NULL; + FIL *psFatFile = NULL; + FRESULT fresult = FR_OK; + + // + // Allocate memory for the file system structure. + // + psFile = mem_malloc(sizeof(struct fs_file)); + if(psFile == NULL) + { + return(NULL); + } + + // + // See if a file on the SD card is being requested. + // + if(ustrncmp(pcName, "/sd/", 4) == 0) + { + // + // Allocate memory for the Fat File system handle. + // + psFatFile = mem_malloc(sizeof(FIL)); + if(psFatFile == NULL) + { + mem_free(psFile); + return(NULL); + } + + // + // Attempt to open the file on the Fat File System. + // + fresult = f_open(psFatFile, pcName + 3, FA_READ); + if(fresult == FR_OK) + { + psFile->data = NULL; + psFile->len = 0; + psFile->index = 0; + psFile->pextension = psFatFile; + return(psFile); + } + + // + // If we get here, we failed to find the file on the Fat File System, + // so free up the Fat File system handle/object. + // + mem_free(psFatFile); + mem_free(psFile); + return(NULL); + } + + // + // Initialize the file system tree pointer to the root of the linked list. + // + psTree = FS_ROOT; + + // + // Begin processing the linked list, looking for the requested file name. + // + while(NULL != psTree) + { + // + // Compare the requested file "name" to the file name in the + // current node. + // + if(ustrncmp(pcName, (char *)psTree->name, psTree->len) == 0) + { + // + // Fill in the data pointer and length values from the + // linked list node. + // + psFile->data = (char *)psTree->data; + psFile->len = psTree->len; + + // + // For now, we setup the read index to the end of the file, + // indicating that all data has been read. + // + psFile->index = psTree->len; + + // + // We are not using any file system extensions in this + // application, so set the pointer to NULL. + // + psFile->pextension = NULL; + + // + // Exit the loop and return the file system pointer. + // + break; + } + + // + // If we get here, we did not find the file at this node of the linked + // list. Get the next element in the list. + // + psTree = psTree->next; + } + + // + // If we didn't find the file, ptTee will be NULL. Make sure we + // return a NULL pointer if this happens. + // + if(psTree == NULL) + { + mem_free(psFile); + psFile = NULL; + } + + // + // Return the file system pointer. + // + return(psFile); +} + +//***************************************************************************** +// +// Close an opened file designated by the handle. +// +//***************************************************************************** +void +fs_close(struct fs_file *psFile) +{ + // + // If a Fat file was opened, free its object. + // + if(psFile->pextension) + { + mem_free(psFile->pextension); + } + + // + // Free the main file system object. + // + mem_free(psFile); +} + +//***************************************************************************** +// +// Read the next chunck of data from the file. Return the count of data +// that was read. Return 0 if no data is currently available. Return +// a -1 if at the end of file. +// +//***************************************************************************** +int +fs_read(struct fs_file *psFile, char *pcBuffer, int iCount) +{ + int iAvailable; + UINT uiBytesRead; + FRESULT fresult; + + // + // Check to see if a Fat File was opened and process it. + // + if(psFile->pextension) + { + // + // Read the data. + // + fresult = f_read(psFile->pextension, pcBuffer, iCount, &uiBytesRead); + if((fresult != FR_OK) || (uiBytesRead == 0)) + { + return(-1); + } + return((int)uiBytesRead); + } + + // + // Check to see if more data is available. + // + if(psFile->index == psFile->len) + { + // + // There is no remaining data. Return a -1 for EOF indication. + // + return(-1); + } + + // + // Determine how much data we can copy. The minimum of the 'iCount' + // parameter or the available data in the file system buffer. + // + iAvailable = psFile->len - psFile->index; + if(iAvailable > iCount) + { + iAvailable = iCount; + } + + // + // Copy the data. + // + memcpy(pcBuffer, psFile->data + iAvailable, iAvailable); + psFile->index += iAvailable; + + // + // Return the count of data that we copied. + // + return(iAvailable); +} + +//***************************************************************************** +// +// Determine the number of bytes left to read from the file. +// +//***************************************************************************** +int +fs_bytes_left(struct fs_file *psFile) +{ + // + // Check to see if a Fat File was opened and process it. + // + if(psFile->pextension) + { + // + // Return the number of bytes left to be read from the Fat File. + // + return(f_size((FIL *)psFile->pextension) - + f_tell((FIL *)psFile->pextension)); + } + + // + // Return the number of bytes left to be read from this file. + // + return(psFile->len - psFile->index); +} diff --git a/boards/dk-tm4c129x/enet_lwip/enet_fs.h b/boards/dk-tm4c129x/enet_lwip/enet_fs.h new file mode 100644 index 0000000..fd04321 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_fs.h @@ -0,0 +1,36 @@ +//***************************************************************************** +// +// enet_fs.h - Prototypes for the file system module. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __ENET_FS_H__ +#define __ENET_FS_H__ + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern void fs_init(void); +extern void fs_tick(uint32_t ui32TickMS); + +#endif // __ENET_FS_H__ diff --git a/boards/dk-tm4c129x/enet_lwip/enet_fsdata.h b/boards/dk-tm4c129x/enet_lwip/enet_fsdata.h new file mode 100644 index 0000000..1faf92d --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_fsdata.h @@ -0,0 +1,16229 @@ +//*************************************************************************** +// +// File System Image. +// +// This file was automatically generated using the makefsfile utility. +// +//*************************************************************************** + +static const uint8_t data_404_htm[] = +{ + /* /404.htm */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, + 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, 0x3c, 0x68, + 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, + 0x68, 0x31, 0x3e, 0x0a, 0x3c, 0x68, 0x33, 0x3e, + 0x54, 0x72, 0x79, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, + 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, + 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, + 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x3c, + 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, + 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0x0a, +}; + +static const uint8_t data_about_htm[] = +{ + /* /about.htm */ + 0x2f, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x44, 0x4b, 0x2d, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x3c, + 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, + 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, + 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, + 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, + 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x66, + 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, + 0x63, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, 0x2f, + 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x70, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x41, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x54, 0x65, 0x78, 0x61, 0x73, + 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x70, 0x3e, + 0x0a, 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x3c, 0x62, + 0x72, 0x3e, 0x0a, 0x54, 0x65, 0x78, 0x61, 0x73, + 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x20, 0x28, 0x54, 0x49, + 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x67, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x0a, 0x3c, 0x61, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2f, 0x64, 0x6f, + 0x63, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x73, + 0x70, 0x3f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x3d, 0x32, 0x39, 0x35, 0x36, + 0x36, 0x22, 0x3e, 0x61, 0x6e, 0x61, 0x6c, 0x6f, + 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x61, 0x6e, + 0x64, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x0a, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x73, 0x65, 0x6d, 0x69, 0x63, + 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x72, + 0x20, 0x49, 0x43, 0x20, 0x64, 0x65, 0x73, 0x69, + 0x67, 0x6e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x61, + 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, + 0x61, 0x63, 0x74, 0x75, 0x72, 0x69, 0x6e, 0x67, + 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, 0x20, + 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, + 0x67, 0x69, 0x65, 0x73, 0x2c, 0x0a, 0x3c, 0x61, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x73, + 0x70, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x64, + 0x73, 0x70, 0x68, 0x6f, 0x6d, 0x65, 0x2e, 0x74, + 0x73, 0x70, 0x3f, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x3d, 0x34, 0x36, 0x22, + 0x3e, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x20, 0x28, 0x44, 0x53, 0x50, 0x29, + 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x61, 0x6e, 0x64, + 0x0a, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x6f, 0x63, 0x75, + 0x73, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6d, 0x63, 0x75, 0x2f, 0x64, 0x6f, 0x63, + 0x73, 0x2f, 0x6d, 0x63, 0x75, 0x68, 0x6f, 0x6d, + 0x65, 0x2e, 0x74, 0x73, 0x70, 0x3f, 0x73, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x3d, + 0x31, 0x30, 0x31, 0x22, 0x3e, 0x6d, 0x69, 0x63, + 0x72, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x28, 0x4d, 0x43, + 0x55, 0x29, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x73, + 0x65, 0x6d, 0x69, 0x63, 0x6f, 0x6e, 0x64, 0x75, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x54, + 0x49, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, + 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, + 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x63, + 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x72, + 0x20, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, + 0x6e, 0x61, 0x6c, 0x6f, 0x67, 0x0a, 0x61, 0x6e, + 0x64, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, + 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x49, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x69, + 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2c, 0x0a, 0x54, 0x49, 0x20, + 0x6f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x62, 0x72, 0x6f, 0x61, 0x64, + 0x65, 0x73, 0x74, 0x20, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6d, 0x62, + 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2c, 0x20, + 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x75, 0x6c, 0x74, + 0x72, 0x61, 0x2d, 0x6c, 0x6f, 0x77, 0x2d, 0x70, + 0x6f, 0x77, 0x65, 0x72, 0x0a, 0x3c, 0x61, 0x20, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, + 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2e, 0x74, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x63, 0x75, + 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x6d, 0x63, + 0x75, 0x70, 0x72, 0x6f, 0x64, 0x6f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x74, 0x73, + 0x70, 0x3f, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x3d, 0x39, 0x35, 0x26, 0x74, + 0x61, 0x62, 0x49, 0x64, 0x3d, 0x31, 0x34, 0x30, + 0x26, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x49, + 0x64, 0x3d, 0x33, 0x34, 0x32, 0x22, 0x3e, 0x4d, + 0x53, 0x50, 0x34, 0x33, 0x30, 0x26, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x3b, 0x3c, 0x2f, 0x61, 0x3e, + 0x0a, 0x4d, 0x43, 0x55, 0x73, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x68, 0x69, 0x67, 0x68, 0x2d, 0x70, + 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, + 0x63, 0x65, 0x0a, 0x3c, 0x61, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x6f, + 0x63, 0x75, 0x73, 0x2e, 0x74, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6d, 0x63, 0x75, 0x2f, 0x64, + 0x6f, 0x63, 0x73, 0x2f, 0x6d, 0x63, 0x75, 0x70, + 0x72, 0x6f, 0x64, 0x6f, 0x76, 0x65, 0x72, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x74, 0x73, 0x70, 0x3f, + 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x3d, 0x39, 0x35, 0x26, 0x74, 0x61, 0x62, + 0x49, 0x64, 0x3d, 0x31, 0x35, 0x33, 0x31, 0x26, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x49, 0x64, + 0x3d, 0x39, 0x31, 0x36, 0x22, 0x3e, 0x54, 0x4d, + 0x53, 0x33, 0x32, 0x30, 0x43, 0x32, 0x30, 0x30, + 0x30, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x72, 0x65, 0x61, + 0x6c, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x33, 0x32, 0x20, 0x62, 0x69, + 0x74, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x6c, 0x2d, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, + 0x65, 0x20, 0x41, 0x52, 0x4d, 0x26, 0x72, 0x65, + 0x67, 0x3b, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64, + 0x20, 0x4d, 0x43, 0x55, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x0a, 0x3c, 0x61, 0x20, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, + 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6c, 0x73, 0x64, 0x73, 0x2f, + 0x74, 0x69, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x2f, 0x74, 0x69, 0x76, 0x61, 0x5f, + 0x61, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x72, 0x74, + 0x65, 0x78, 0x2f, 0x63, 0x5f, 0x73, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x2f, 0x74, 0x6d, 0x34, 0x63, + 0x5f, 0x61, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x72, + 0x74, 0x65, 0x78, 0x2d, 0x6d, 0x34, 0x2f, 0x6f, + 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x70, 0x61, 0x67, 0x65, 0x22, 0x3e, 0x54, 0x69, + 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x6c, + 0x69, 0x6e, 0x65, 0x2e, 0x20, 0x52, 0x65, 0x61, + 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x73, 0x20, + 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, + 0x65, 0x62, 0x20, 0x61, 0x74, 0x0a, 0x3c, 0x61, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x22, 0x3e, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x3c, 0x2f, 0x61, 0x3e, 0x2e, 0x0a, 0x3c, 0x2f, + 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_block_htm[] = +{ + /* /block.htm */ + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x44, 0x4b, 0x2d, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x3c, + 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, + 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, + 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, + 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, + 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x66, + 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, + 0x63, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, 0x2f, + 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x70, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x4e, 0x43, 0x5a, + 0x41, 0x44, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x20, 0x44, 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, + 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x68, 0x72, + 0x3e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x3c, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x6a, 0x70, 0x67, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, + 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, + 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0x0a, +}; + +static const uint8_t data_block_jpg[] = +{ + /* /block.jpg */ + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x6a, + 0x70, 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x04, 0x05, 0x0a, 0x07, + 0x07, 0x06, 0x08, 0x0c, 0x0a, 0x0c, 0x0c, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0d, 0x0e, 0x12, 0x10, 0x0d, + 0x0e, 0x11, 0x0e, 0x0b, 0x0b, 0x10, 0x16, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0x0c, 0x0f, + 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, + 0x14, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x03, 0x04, + 0x04, 0x05, 0x04, 0x05, 0x09, 0x05, 0x05, 0x09, + 0x14, 0x0d, 0x0b, 0x0d, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc2, + 0x00, 0x11, 0x08, 0x02, 0x35, 0x02, 0x68, 0x03, + 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x01, 0x00, + 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x03, 0x06, 0x07, 0x01, 0x08, 0xff, + 0xc4, 0x00, 0x1a, 0x01, 0x01, 0x00, 0x03, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, + 0x05, 0x04, 0x06, 0xff, 0xda, 0x00, 0x0c, 0x03, + 0x01, 0x00, 0x02, 0x10, 0x03, 0x10, 0x00, 0x00, + 0x01, 0xf7, 0xe2, 0x50, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x52, 0x51, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x31, 0x22, 0x1f, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x03, 0xe8, 0x00, 0x03, + 0xe1, 0xf4, 0x00, 0x01, 0x10, 0xdc, 0x59, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, + 0x46, 0x31, 0x3c, 0x61, 0xe8, 0xb0, 0x00, 0x0d, + 0x06, 0xf0, 0x00, 0x00, 0x15, 0x73, 0x12, 0x25, + 0x40, 0x69, 0x27, 0x95, 0xa7, 0x50, 0x42, 0x35, + 0x90, 0xcd, 0x26, 0xe2, 0x21, 0xd3, 0x94, 0x44, + 0xc2, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6a, 0x37, 0xc4, 0xf8, 0x89, 0xc8, + 0x22, 0x59, 0x3c, 0x8e, 0x4c, 0x28, 0x8b, 0x92, + 0x5a, 0x6b, 0xd1, 0xe9, 0x29, 0xf4, 0x98, 0x00, + 0x2a, 0xe6, 0x24, 0x4b, 0xc5, 0x4b, 0xc3, 0x71, + 0xd5, 0x17, 0xc4, 0x22, 0xa8, 0xe7, 0xce, 0x7c, + 0xea, 0x4d, 0x27, 0x6c, 0x55, 0x12, 0xcb, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xac, 0x91, 0x13, 0x00, 0xa1, 0x2c, 0x4e, 0x58, + 0xe9, 0x8f, 0xa4, 0x62, 0x29, 0xd1, 0x42, 0x8e, + 0x57, 0x50, 0xbb, 0x00, 0x15, 0x73, 0x12, 0x25, + 0xcf, 0x1f, 0x0e, 0x84, 0xe6, 0x0e, 0xa0, 0x84, + 0x46, 0x2a, 0x89, 0x45, 0xc9, 0x40, 0x74, 0xc5, + 0x09, 0x30, 0xb0, 0x01, 0x14, 0xfe, 0x9c, 0x2b, + 0xf5, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x4b, 0x9f, 0x3e, 0xd3, 0xb1, 0xd7, 0xe1, + 0x4a, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xf0, 0x8a, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x0f, 0xa0, 0x00, 0x0f, 0x87, 0xd0, 0x01, + 0xb0, 0xbb, 0x35, 0x9b, 0x8b, 0x10, 0x70, 0x9d, + 0x4e, 0x77, 0x8e, 0x77, 0xb9, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd8, 0x9f, + 0xd0, 0x3f, 0x2f, 0xdf, 0xc3, 0xcb, 0xe8, 0xa8, + 0xe6, 0xd3, 0x0c, 0xa0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xf6, 0x59, 0x74, 0xaf, 0x0b, + 0x59, 0xb1, 0xf2, 0xd7, 0x0f, 0x35, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x66, 0xf6, + 0xd3, 0xec, 0xb7, 0x46, 0x7c, 0x2c, 0x41, 0xe3, + 0x9f, 0x43, 0xc5, 0xe1, 0x3a, 0x3e, 0x10, 0x00, + 0x03, 0x74, 0x4f, 0x73, 0xcf, 0xf6, 0x8b, 0x0c, + 0xaf, 0x03, 0x5a, 0x47, 0xb5, 0x76, 0xd6, 0x78, + 0x3e, 0x8f, 0x8b, 0xe0, 0x00, 0x00, 0x7b, 0x0f, + 0x0b, 0xaf, 0x71, 0xc7, 0xe8, 0x79, 0x67, 0x13, + 0x30, 0x00, 0x03, 0xa3, 0xda, 0x45, 0x2e, 0x51, + 0x9c, 0xb5, 0xc3, 0x29, 0x04, 0x23, 0xc3, 0x10, + 0x00, 0x07, 0x63, 0xd0, 0xb4, 0xef, 0x6d, 0xf9, + 0xae, 0x2e, 0x55, 0xb9, 0xc0, 0xea, 0x7d, 0x16, + 0xe7, 0xf1, 0x88, 0xd5, 0x80, 0x00, 0xbb, 0xd6, + 0x6b, 0xa8, 0xb9, 0xd2, 0x60, 0x56, 0x2a, 0xf3, + 0x81, 0x69, 0xa4, 0xc5, 0xaa, 0x2d, 0x60, 0x01, + 0x94, 0xbd, 0x03, 0xbd, 0xb5, 0xb9, 0xb8, 0x9e, + 0x0f, 0x1e, 0xfa, 0x1e, 0x2f, 0x09, 0xd1, 0xf0, + 0x80, 0x00, 0x1d, 0x77, 0x8b, 0xd5, 0xd2, 0xf9, + 0x7d, 0x1a, 0xad, 0x17, 0x3e, 0x7d, 0xab, 0x36, + 0xca, 0x35, 0xab, 0xb6, 0x2d, 0xe6, 0x5d, 0x6e, + 0x6e, 0x00, 0x00, 0x01, 0xec, 0x1c, 0x2e, 0xbd, + 0xb7, 0x1f, 0xa1, 0xe3, 0x5c, 0x7c, 0xc0, 0x00, + 0x0e, 0xdf, 0xd3, 0x6e, 0xbf, 0xd1, 0x3a, 0x2a, + 0xac, 0xa4, 0x6f, 0xb4, 0xfc, 0x35, 0x56, 0x36, + 0xcc, 0xf9, 0x7f, 0x8a, 0x98, 0x80, 0x00, 0x3b, + 0xcf, 0x75, 0xee, 0x7d, 0x96, 0xf3, 0xbe, 0x4e, + 0x75, 0x59, 0xc0, 0xf4, 0xff, 0x00, 0x6d, 0xbe, + 0x93, 0xad, 0x32, 0x2c, 0x81, 0x44, 0x5a, 0xc7, + 0x0f, 0xe7, 0x8e, 0xfb, 0xd5, 0x6a, 0x0c, 0xa3, + 0x9b, 0xc6, 0x3d, 0x37, 0xd9, 0x6a, 0xea, 0x45, + 0x75, 0x1d, 0x46, 0xf3, 0x89, 0x53, 0x9c, 0x4e, + 0xb4, 0xf9, 0x37, 0x86, 0x80, 0x7b, 0x27, 0x6f, + 0x5b, 0x43, 0x79, 0x3c, 0x1e, 0x3f, 0xf4, 0x3c, + 0x5e, 0x13, 0xa3, 0xe1, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xeb, 0xfc, 0x2e, 0xbd, + 0xdf, 0x1f, 0xa1, 0xc5, 0xf0, 0x72, 0xc6, 0x00, + 0x00, 0x24, 0x59, 0x26, 0xd3, 0x99, 0x1e, 0x23, + 0x34, 0xed, 0x94, 0x4a, 0xc5, 0xae, 0xd3, 0x43, + 0xe7, 0x80, 0x00, 0x03, 0xa2, 0xea, 0x5f, 0xe7, + 0xb6, 0xf4, 0xfc, 0x4c, 0xab, 0xb2, 0x81, 0x3e, + 0xf3, 0xf6, 0x53, 0xae, 0xd5, 0x57, 0xd9, 0x47, + 0xaa, 0x35, 0x57, 0x7b, 0x4d, 0x2e, 0x31, 0x6d, + 0xab, 0x4c, 0x30, 0x86, 0xd9, 0x65, 0x2f, 0x90, + 0x8b, 0x57, 0x59, 0xec, 0xb7, 0x01, 0xcf, 0xa0, + 0xce, 0x5d, 0x87, 0xd0, 0x6d, 0x6a, 0x6f, 0x27, + 0x83, 0xc8, 0x3e, 0x87, 0x8b, 0xc2, 0x74, 0x7c, + 0x20, 0x0e, 0x8b, 0xcd, 0xbc, 0xdc, 0xef, 0x5b, + 0xae, 0x7a, 0xe6, 0x2c, 0xf2, 0xd6, 0xbb, 0x5c, + 0xe3, 0xda, 0xb7, 0x9e, 0x7d, 0xac, 0xb2, 0xd3, + 0x8f, 0xf7, 0x79, 0x7a, 0x5f, 0x27, 0xa0, 0x7c, + 0x98, 0xe2, 0xbd, 0xde, 0x40, 0x00, 0xf5, 0xfe, + 0x17, 0x5e, 0x6f, 0x2b, 0xa3, 0x0f, 0x18, 0xa5, + 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0xe5, 0xd8, 0xfa, 0x6d, 0x56, 0x4a, 0xc2, + 0x29, 0x7c, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0b, 0xfd, 0xe6, 0x07, 0xa2, 0xdd, + 0x29, 0xbc, 0x9c, 0x0f, 0x21, 0xfa, 0x1e, 0x2f, + 0x09, 0xd1, 0xf0, 0x80, 0x3b, 0xbe, 0x7f, 0xb6, + 0xaf, 0x6c, 0xbb, 0x0f, 0x0f, 0xaf, 0x38, 0x9a, + 0x2f, 0x46, 0x1d, 0x9f, 0x87, 0xd9, 0x4b, 0xbe, + 0x3e, 0x73, 0xd4, 0xe7, 0xe9, 0xb4, 0x58, 0x65, + 0xa7, 0x6f, 0xe0, 0xf6, 0x5c, 0xe1, 0xaf, 0xc3, + 0xc7, 0xfb, 0x7c, 0xa8, 0xd6, 0xa8, 0x03, 0xd7, + 0xf8, 0x5d, 0x79, 0xbc, 0xae, 0x8f, 0x18, 0x72, + 0x00, 0x00, 0x0b, 0xd2, 0x51, 0x60, 0x69, 0x35, + 0x9a, 0x8f, 0x86, 0x25, 0x29, 0x10, 0x00, 0x01, + 0xec, 0xa5, 0x79, 0x48, 0x70, 0xa0, 0x17, 0x84, + 0xa2, 0x01, 0x28, 0x86, 0x4c, 0x23, 0x98, 0x9b, + 0xcc, 0x4c, 0x4b, 0x02, 0x31, 0x18, 0x8c, 0x40, + 0x00, 0xf4, 0x52, 0xc0, 0xe9, 0x0d, 0xe4, 0xe0, + 0x79, 0x0f, 0xd0, 0xf1, 0x78, 0x5e, 0x8f, 0x84, + 0x01, 0x99, 0x22, 0x96, 0xfa, 0x6a, 0xb4, 0x65, + 0x13, 0x94, 0x30, 0x96, 0x33, 0x1a, 0x66, 0x06, + 0xf8, 0x9d, 0xb5, 0x9d, 0x56, 0x8d, 0x13, 0x00, + 0x01, 0xeb, 0xdc, 0x2e, 0xbc, 0xee, 0x57, 0x47, + 0x8c, 0x39, 0x00, 0x00, 0x05, 0xf1, 0xa0, 0xb4, + 0x21, 0x90, 0x8b, 0x03, 0x79, 0x14, 0xaf, 0x20, + 0x00, 0x00, 0x3d, 0x94, 0xaf, 0x29, 0x0e, 0x14, + 0x02, 0xf0, 0xd4, 0x5d, 0x9a, 0x8d, 0x64, 0xa2, + 0x09, 0x18, 0xc8, 0xba, 0x29, 0xcb, 0x83, 0x12, + 0x21, 0x4a, 0x57, 0x00, 0x7a, 0x29, 0x60, 0x74, + 0x86, 0xe2, 0x70, 0x3c, 0x8b, 0xe8, 0x78, 0xbc, + 0x2f, 0x47, 0xc2, 0x00, 0xb6, 0xc7, 0x59, 0x35, + 0x98, 0x3a, 0x56, 0x55, 0x2d, 0xaa, 0x62, 0x2d, + 0xe9, 0x6b, 0x8e, 0xb2, 0x2b, 0x6c, 0x26, 0x31, + 0x3e, 0x4c, 0x42, 0xbd, 0x66, 0xd2, 0xd5, 0x9a, + 0xe7, 0x5f, 0xa5, 0x00, 0x1e, 0xbd, 0xc2, 0xeb, + 0xcd, 0xe5, 0x74, 0x77, 0x15, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x15, 0x84, + 0x79, 0x8e, 0x5e, 0xd0, 0x36, 0x56, 0x7e, 0xc4, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xac, + 0x1d, 0x19, 0xb8, 0x9c, 0x0f, 0x23, 0xfa, 0x1e, + 0x2f, 0x0b, 0xd1, 0xf0, 0x80, 0x3a, 0xaf, 0x27, + 0xa7, 0xa0, 0xf3, 0x6f, 0xce, 0xfa, 0x70, 0xb2, + 0xcb, 0x48, 0xd7, 0xaf, 0x25, 0xec, 0xf2, 0xf5, + 0xde, 0x2f, 0x56, 0xf8, 0x98, 0xb6, 0xae, 0x9b, + 0x47, 0x4b, 0xe5, 0xf4, 0x55, 0xeb, 0x9e, 0xc8, + 0x9e, 0x53, 0xd9, 0xe5, 0xac, 0xd7, 0x30, 0x07, + 0xae, 0xf0, 0xba, 0xf3, 0xb9, 0x5d, 0x1e, 0x34, + 0xe4, 0x00, 0x00, 0xef, 0x0f, 0x85, 0x09, 0x7c, + 0x6f, 0x39, 0x63, 0xa1, 0x06, 0x26, 0x65, 0x09, + 0x44, 0x00, 0x07, 0xb2, 0x95, 0xe7, 0x9a, 0xf5, + 0x79, 0xdc, 0xef, 0xb3, 0xcd, 0x41, 0xb6, 0x7d, + 0xb7, 0x27, 0xa1, 0xd5, 0x73, 0xbd, 0xd9, 0x18, + 0x91, 0x48, 0x85, 0xe1, 0x89, 0x52, 0x4b, 0x06, + 0xb3, 0x79, 0x72, 0x50, 0x18, 0x82, 0xc0, 0xaf, + 0x3a, 0x42, 0xc8, 0xe8, 0x8d, 0xc4, 0xe0, 0x79, + 0x27, 0xd0, 0xf1, 0x78, 0x5e, 0x8f, 0x84, 0x01, + 0x26, 0xb6, 0x9d, 0x9d, 0xe0, 0xe9, 0x4c, 0x66, + 0x33, 0x89, 0xc5, 0x12, 0xe9, 0x7d, 0x73, 0x1a, + 0xad, 0x1a, 0x66, 0x36, 0x43, 0x09, 0x4a, 0xa5, + 0xb5, 0xda, 0x22, 0x5a, 0xa0, 0x0f, 0x5d, 0xe1, + 0x75, 0xe7, 0x72, 0xba, 0x3c, 0x69, 0xc8, 0x00, + 0x0f, 0xa7, 0x42, 0x62, 0x40, 0x25, 0x99, 0x90, + 0x0b, 0x02, 0x21, 0x91, 0xbc, 0xad, 0x21, 0x80, + 0x01, 0xec, 0xa5, 0x79, 0xc4, 0xfb, 0x7c, 0xbe, + 0x6b, 0xed, 0xf2, 0x8e, 0xb7, 0x9f, 0xec, 0xe9, + 0xbc, 0xbe, 0x8c, 0x8d, 0xe5, 0x49, 0x60, 0x43, + 0x2d, 0x0a, 0xe3, 0x61, 0x34, 0xa6, 0x22, 0x9d, + 0x11, 0xa8, 0x82, 0x64, 0x59, 0x1a, 0x0b, 0xc2, + 0x69, 0xd1, 0x1b, 0x89, 0xa0, 0xf2, 0x5f, 0xa1, + 0xe2, 0xf0, 0xbd, 0x1f, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x5d, 0xe1, 0x75, + 0xe7, 0x72, 0xba, 0x35, 0xc7, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x72, 0x56, + 0x1b, 0xca, 0xe3, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x64, 0xf3, 0x41, 0xd0, 0x9b, + 0x89, 0xa0, 0xf2, 0x6f, 0xa1, 0xe2, 0xf0, 0xbd, + 0x1f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x5c, 0xe1, 0x75, 0xe7, 0x72, 0xba, + 0x3c, 0x71, 0xc8, 0x00, 0x0b, 0xb3, 0x22, 0xf8, + 0xde, 0x51, 0x13, 0x89, 0x64, 0x52, 0xe4, 0xe7, + 0x4b, 0x62, 0xa8, 0xe4, 0xc0, 0x00, 0xf6, 0x52, + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xe8, 0x0d, 0xc4, 0xd0, 0x79, 0x3f, + 0xd0, 0xf1, 0x78, 0x5e, 0x8f, 0x84, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xae, 0x70, + 0xba, 0xf3, 0xb9, 0x5d, 0x1e, 0x38, 0xe4, 0x00, + 0x04, 0xb3, 0x71, 0x2c, 0xcc, 0x8c, 0x6d, 0x37, + 0x14, 0x25, 0xc1, 0x99, 0xa0, 0xc8, 0xa6, 0x00, + 0x03, 0xd9, 0x4a, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xa0, 0x37, 0x13, + 0x01, 0xe7, 0xdd, 0xbe, 0x4f, 0x23, 0xee, 0xf2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf4, 0x8e, 0x3f, 0x4d, 0xce, 0xf7, 0x57, 0x9c, + 0xf0, 0x00, 0x00, 0x0b, 0x33, 0xe1, 0x89, 0xf0, + 0x80, 0x00, 0x00, 0x00, 0x77, 0x25, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x7e, 0x6e, 0x26, 0x03, 0xf3, 0xe1, 0xe6, 0xc0, + 0x03, 0xac, 0x35, 0x90, 0x48, 0xa5, 0x78, 0x00, + 0xf4, 0x33, 0xcf, 0x01, 0x72, 0x0b, 0x93, 0x9d, + 0x05, 0x78, 0x3d, 0xf0, 0xea, 0x8e, 0x38, 0xe4, + 0x00, 0x00, 0x00, 0x75, 0x04, 0xd3, 0x51, 0x6e, + 0x79, 0xc0, 0x00, 0x00, 0x01, 0xec, 0xa5, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x7e, 0x6d, 0x26, 0x03, 0xf3, 0x91, 0xe6, + 0x20, 0x03, 0xd1, 0x4d, 0x66, 0x05, 0x79, 0xc8, + 0x80, 0x0f, 0x48, 0x3c, 0xdc, 0x1e, 0x82, 0x4f, + 0x3e, 0x94, 0x04, 0x73, 0x95, 0x07, 0xe8, 0x43, + 0xb2, 0x29, 0x0e, 0x64, 0x00, 0x00, 0x06, 0xf2, + 0x59, 0x89, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x7a, + 0x41, 0x5a, 0x6c, 0x24, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x14, 0xc0, 0xbe, 0x36, + 0x93, 0x01, 0xe7, 0x27, 0x2a, 0x00, 0x36, 0x83, + 0x33, 0x61, 0xa0, 0x00, 0x75, 0x07, 0x2e, 0x01, + 0xb0, 0xd6, 0x49, 0x21, 0x1f, 0x01, 0xe8, 0xc6, + 0xd3, 0x96, 0x39, 0x30, 0x00, 0x24, 0x92, 0xcd, + 0x46, 0xa3, 0x41, 0x64, 0x6b, 0x2b, 0x8d, 0xc0, + 0xd2, 0x00, 0x00, 0xf5, 0xa2, 0x19, 0x9f, 0x23, + 0x3a, 0xbf, 0x2d, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xdf, 0xdd, 0x68, 0xfd, 0x3d, + 0x2f, 0x0d, 0xa4, 0xc0, 0x78, 0xc1, 0xe7, 0xa5, + 0xd1, 0x00, 0x94, 0x4d, 0x39, 0xd3, 0xb7, 0x3c, + 0xa0, 0x1d, 0x89, 0xac, 0xfa, 0x43, 0x39, 0xd0, + 0x7a, 0xd9, 0x44, 0x44, 0x25, 0x11, 0x8b, 0x02, + 0xac, 0xf4, 0xd3, 0xa8, 0x38, 0xf3, 0x90, 0x00, + 0x02, 0xe8, 0xb5, 0x2e, 0x0a, 0xe2, 0x9c, 0x92, + 0x68, 0x30, 0x2e, 0x4a, 0x82, 0x80, 0x00, 0x01, + 0xec, 0x66, 0x07, 0x9d, 0xf1, 0xb2, 0x81, 0x40, + 0xe9, 0xb6, 0x99, 0x97, 0x9d, 0x55, 0x8c, 0x49, + 0x76, 0x42, 0xa2, 0xce, 0xea, 0x2c, 0xdd, 0x1e, + 0xd2, 0x21, 0x52, 0x22, 0xc2, 0xca, 0xf3, 0xbe, + 0x54, 0x79, 0x40, 0xa2, 0xce, 0x22, 0x54, 0x2e, + 0x34, 0x9e, 0xd7, 0xb1, 0xa5, 0xc1, 0xb4, 0x96, + 0x0f, 0xcf, 0x47, 0x96, 0x1e, 0xf2, 0x71, 0xc4, + 0x43, 0x49, 0xc5, 0x9d, 0xe9, 0xe7, 0xe0, 0xf6, + 0x23, 0x8a, 0x27, 0x96, 0xa7, 0x97, 0x03, 0xd6, + 0x8e, 0x60, 0xef, 0x4a, 0x33, 0x9a, 0x2e, 0xcf, + 0x35, 0x3d, 0xd4, 0xf4, 0x02, 0xa8, 0xe5, 0x00, + 0x00, 0x92, 0x4b, 0x35, 0x11, 0xc9, 0x66, 0xc3, + 0xe9, 0x18, 0xf8, 0x6d, 0x2b, 0x40, 0x00, 0x9c, + 0x76, 0x47, 0xd3, 0x80, 0xe2, 0xe5, 0x06, 0x81, + 0x6b, 0xa4, 0xf5, 0x3e, 0x89, 0xd8, 0x6e, 0xb2, + 0x25, 0x1b, 0xa5, 0x26, 0xce, 0x67, 0x08, 0xb9, + 0xd6, 0x50, 0x9d, 0x75, 0x65, 0x16, 0x7a, 0x3e, + 0x91, 0xea, 0x8d, 0x57, 0x39, 0x8c, 0x52, 0xe5, + 0x02, 0xdf, 0x59, 0xec, 0x3b, 0x1a, 0x5b, 0x9b, + 0x49, 0x60, 0xe0, 0x4e, 0x00, 0xb9, 0x23, 0x1a, + 0x4b, 0x73, 0x9e, 0x3a, 0x82, 0x98, 0xf8, 0x00, + 0x00, 0xfa, 0x74, 0x45, 0x39, 0xa4, 0x96, 0x6b, + 0x21, 0x10, 0x8f, 0x59, 0x32, 0x36, 0x43, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x25, 0x5f, 0x21, 0xb7, 0x8f, 0x9d, 0x67, 0x92, + 0xa0, 0x09, 0xfa, 0xcc, 0x0c, 0xa0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x16, 0xde, 0xeb, 0x45, 0xea, + 0xe9, 0x74, 0x6c, 0x25, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xab, 0x38, + 0xe5, 0xf8, 0x79, 0x69, 0xa0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x0e, 0x9d, 0xe3, + 0xf4, 0x2f, 0x5e, 0x73, 0x24, 0x82, 0x39, 0x24, + 0xf8, 0x6a, 0x06, 0xf3, 0x32, 0x10, 0x32, 0x27, + 0x11, 0x0d, 0x86, 0x26, 0x06, 0xe0, 0x6d, 0x20, + 0x1d, 0xb0, 0x2e, 0xcd, 0xa4, 0xa0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, + 0xf8, 0x47, 0x94, 0x72, 0xf3, 0xef, 0xbd, 0x56, + 0xcc, 0xa9, 0xce, 0x2c, 0xef, 0x3b, 0x65, 0xaa, + 0x23, 0x59, 0x43, 0x94, 0x77, 0xfe, 0xab, 0xd7, + 0xd6, 0x2a, 0xf3, 0x8d, 0xb2, 0xd7, 0x0d, 0xb3, + 0x3a, 0xa2, 0x36, 0x4a, 0x54, 0xcc, 0x48, 0x8d, + 0x50, 0xb8, 0xd2, 0x7c, 0xdf, 0xc7, 0x5e, 0xa3, + 0xd3, 0x37, 0xfd, 0x2d, 0x29, 0x0e, 0x60, 0xe8, + 0x0a, 0x52, 0xc0, 0xc0, 0xdc, 0x5a, 0x9c, 0x71, + 0x68, 0x4f, 0x37, 0x9a, 0x01, 0xbc, 0x96, 0x64, + 0x54, 0x90, 0x48, 0x27, 0x4e, 0x70, 0x67, 0xa7, + 0x9b, 0x8b, 0xa3, 0x69, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x78, + 0x47, 0x9a, 0xf2, 0x33, 0xbe, 0xda, 0x6c, 0x2e, + 0x9b, 0x79, 0x91, 0x2d, 0x70, 0xd3, 0x0a, 0xcc, + 0xe3, 0x4c, 0x3a, 0x9f, 0x44, 0xc1, 0xa3, 0x7d, + 0x90, 0x69, 0x17, 0x3a, 0xce, 0x52, 0xaf, 0xcd, + 0x06, 0x91, 0xbe, 0xd3, 0x22, 0x55, 0x19, 0xc5, + 0xbe, 0x93, 0xc2, 0x79, 0x2b, 0xd1, 0xfa, 0xad, + 0x6b, 0xd3, 0xbe, 0x07, 0x3a, 0x4e, 0x2b, 0x4b, + 0x63, 0x22, 0x39, 0x28, 0xa9, 0x24, 0x99, 0x92, + 0x88, 0xa4, 0x73, 0x71, 0xbc, 0x11, 0xc9, 0x26, + 0x65, 0x71, 0x14, 0xec, 0xc8, 0xe5, 0xd1, 0xb0, + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0xca, 0x44, 0x1e, 0x36, 0x78, + 0x51, 0xbe, 0xcc, 0x21, 0xae, 0x00, 0x00, 0x00, + 0x02, 0xcb, 0x65, 0x6e, 0x20, 0x00, 0x02, 0x77, + 0x4a, 0xf5, 0xbe, 0xdb, 0x52, 0x1c, 0x28, 0x00, + 0x00, 0x01, 0xd0, 0x1f, 0x08, 0x65, 0x60, 0x00, + 0x00, 0x01, 0xe9, 0xe6, 0xe2, 0xe4, 0xd8, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x09, 0x44, 0x71, 0x00, 0x00, 0x66, + 0x4f, 0x26, 0x91, 0xc8, 0x46, 0xb2, 0xd4, 0xfa, + 0x6b, 0x30, 0x2a, 0x80, 0x00, 0x1e, 0x9c, 0x60, + 0x52, 0x1c, 0x28, 0x00, 0x00, 0x01, 0xdf, 0x15, + 0x84, 0x22, 0x84, 0x00, 0x00, 0x00, 0xf4, 0xf3, + 0x71, 0x70, 0x6d, 0x24, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x84, 0xe7, + 0x4e, 0x10, 0x00, 0x0c, 0xce, 0xa8, 0xda, 0x59, + 0x90, 0xca, 0x62, 0xc0, 0x90, 0x4f, 0x39, 0x22, + 0x94, 0x00, 0x01, 0xea, 0xe6, 0x24, 0x92, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x90, 0x82, 0x5c, 0x1b, 0x09, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, + 0x34, 0x9c, 0xe8, 0x00, 0x00, 0x00, 0x04, 0x92, + 0x30, 0x24, 0x91, 0x80, 0x00, 0xda, 0x74, 0x64, + 0x72, 0x90, 0xe1, 0x40, 0x00, 0x00, 0x4a, 0x33, + 0x24, 0x96, 0x07, 0x32, 0x00, 0x00, 0x00, 0x7a, + 0x79, 0xb8, 0xb7, 0x36, 0x12, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x51, + 0x0c, 0xb9, 0xf4, 0xc3, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0xfd, 0xf7, 0x81, + 0xbc, 0xd2, 0x1c, 0x28, 0x00, 0x00, 0x0b, 0x32, + 0xec, 0xa8, 0x3a, 0x93, 0xcf, 0xc0, 0x00, 0x00, + 0x0f, 0x4f, 0x37, 0x16, 0xe6, 0x64, 0x90, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xa4, 0x79, 0xaf, 0x13, 0x30, 0x00, 0x00, + 0x75, 0x3b, 0xcd, 0x65, 0x22, 0x44, 0xab, 0x68, + 0xf9, 0x0c, 0x0c, 0x21, 0xa8, 0x00, 0x00, 0x3a, + 0x7f, 0x5d, 0xa7, 0xf4, 0xef, 0x24, 0xa0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xa4, + 0x20, 0x96, 0xc6, 0xc2, 0x48, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x69, + 0x1e, 0x3d, 0xc7, 0xcc, 0x00, 0x00, 0x1d, 0x9f, + 0xa2, 0x7a, 0xad, 0xed, 0xb2, 0x54, 0x79, 0x45, + 0xde, 0xb3, 0x49, 0x94, 0x50, 0x65, 0x1c, 0xce, + 0x30, 0x00, 0x00, 0x76, 0x1e, 0xab, 0x74, 0x1d, + 0x1b, 0xd2, 0x1c, 0x28, 0x00, 0x16, 0x87, 0xd3, + 0xe1, 0x24, 0x86, 0x6c, 0x26, 0x91, 0x0c, 0x4c, + 0x48, 0x46, 0x90, 0x00, 0x3d, 0x3c, 0xdc, 0x5b, + 0x1b, 0x49, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x83, 0x48, 0xe3, 0x38, + 0x39, 0x63, 0x00, 0x00, 0x02, 0xe7, 0x69, 0x81, + 0x48, 0x9f, 0x79, 0xd1, 0x56, 0xfb, 0x27, 0xeb, + 0x34, 0xf8, 0x45, 0x7e, 0x70, 0x00, 0x00, 0x74, + 0x1e, 0xfb, 0xfc, 0xe9, 0xde, 0x90, 0xe1, 0x40, + 0x00, 0xb3, 0x3a, 0x33, 0xe9, 0xf0, 0x80, 0x6f, + 0x29, 0xcb, 0x52, 0xc8, 0xd2, 0x71, 0x46, 0x20, + 0x00, 0x7a, 0x81, 0xb4, 0xb7, 0x36, 0x92, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x46, 0x69, 0xc2, 0x29, 0xb2, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x5d, 0x07, + 0xa6, 0x62, 0xda, 0x75, 0x9c, 0xc0, 0x00, 0x02, + 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd9, + 0x1a, 0x0b, 0x73, 0x69, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x47, + 0x22, 0x72, 0x00, 0x03, 0xa1, 0x2c, 0x0a, 0x72, + 0xc4, 0xae, 0x2d, 0x08, 0x25, 0x79, 0x66, 0x4c, + 0x04, 0x73, 0x99, 0x00, 0x03, 0xd3, 0x8d, 0xe7, + 0x3a, 0x71, 0x80, 0x1d, 0x11, 0xa0, 0xd6, 0x5d, + 0x9a, 0x0c, 0x0c, 0xcc, 0x88, 0x20, 0xdc, 0x64, + 0x69, 0x34, 0x91, 0x8a, 0xd0, 0x0f, 0x47, 0x27, + 0x17, 0x06, 0xd2, 0x50, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x4e, 0x54, + 0xe2, 0xc0, 0x05, 0x89, 0x68, 0x66, 0x7d, 0x21, + 0x93, 0x88, 0xe4, 0x53, 0xe9, 0xbc, 0xfa, 0x66, + 0x73, 0x40, 0x00, 0x7a, 0xa8, 0x28, 0x8e, 0x1c, + 0x02, 0xfc, 0x8a, 0x45, 0x3a, 0x23, 0x03, 0xe1, + 0x0c, 0xb0, 0x34, 0x96, 0x07, 0x30, 0x4e, 0x33, + 0x37, 0x14, 0xc4, 0x10, 0x0f, 0x4d, 0x24, 0x17, + 0x06, 0xe2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x0c, 0x48, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x71, + 0xbc, 0xd4, 0x6f, 0x2a, 0xcc, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x96, 0x26, 0x82, + 0xe4, 0xdc, 0x4a, 0x3e, 0x10, 0x08, 0xe7, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x33, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0xa3, 0x69, 0x2c, 0xab, + 0x34, 0x79, 0xab, 0x8f, 0x92, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0xa2, 0x6b, + 0xfd, 0x96, 0xdb, 0x09, 0x1c, 0xda, 0x61, 0x94, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xcb, 0xa5, 0x78, 0x5a, 0xcd, 0x8f, 0x8a, 0x9a, + 0xbc, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x7d, 0x13, 0x03, 0xdd, 0x7b, 0x83, + 0x71, 0x2c, 0xe7, 0xce, 0x7f, 0x8f, 0x9d, 0x0e, + 0x11, 0x6d, 0xa2, 0x65, 0xe6, 0x9b, 0x28, 0xcc, + 0x95, 0x64, 0x3a, 0xbe, 0x16, 0x37, 0x5a, 0xe9, + 0x34, 0x99, 0x44, 0x4a, 0xa6, 0xd9, 0x0e, 0xab, + 0x7d, 0x66, 0x97, 0x18, 0xfb, 0x2d, 0x84, 0xeb, + 0xab, 0xa8, 0x8d, 0x56, 0xeb, 0x3b, 0xbe, 0xee, + 0xb8, 0xe7, 0x1e, 0x75, 0xc5, 0xcb, 0x33, 0xb1, + 0xf4, 0xdb, 0x97, 0xc2, 0x31, 0x86, 0x72, 0xc2, + 0x1f, 0x4f, 0x84, 0x9b, 0x2e, 0xf5, 0x9e, 0x6b, + 0x08, 0xc8, 0x9b, 0x76, 0xd9, 0x57, 0x51, 0x84, + 0x32, 0x3e, 0x16, 0xfa, 0xa8, 0xb1, 0x8d, 0x67, + 0x63, 0xd0, 0xbc, 0xff, 0x00, 0x6d, 0xf9, 0x4e, + 0x2e, 0x55, 0xb9, 0x80, 0x00, 0x0b, 0xbd, 0x66, + 0x15, 0x63, 0x44, 0x32, 0x2d, 0x34, 0x9a, 0xbc, + 0xe3, 0x22, 0x25, 0x40, 0x00, 0x07, 0xd9, 0x7a, + 0x37, 0x7b, 0x59, 0x46, 0xe2, 0x59, 0xcf, 0x1c, + 0x3f, 0x2b, 0x3e, 0x6f, 0x18, 0xed, 0x3d, 0x33, + 0x43, 0x93, 0xd3, 0x3d, 0x96, 0x8b, 0x58, 0xae, + 0xab, 0x7c, 0xb7, 0x4b, 0x9a, 0xc6, 0x2f, 0xf5, + 0x9d, 0x84, 0x9b, 0x2b, 0x28, 0xb1, 0xbc, 0xe1, + 0x10, 0x3e, 0x98, 0x9a, 0x21, 0xaa, 0x1e, 0x6d, + 0xe3, 0xae, 0xd9, 0x7a, 0xe7, 0x6b, 0x5d, 0x34, + 0x8f, 0x26, 0xe3, 0xe7, 0x6b, 0x75, 0xbe, 0xb3, + 0x61, 0x69, 0xea, 0x76, 0x9d, 0x30, 0xa1, 0xce, + 0x3a, 0x4d, 0x66, 0xb2, 0x91, 0xcb, 0xe3, 0x16, + 0x76, 0x9e, 0x8f, 0x69, 0xe7, 0x32, 0x8e, 0x9f, + 0x69, 0x8b, 0x11, 0x55, 0x9a, 0xf3, 0x59, 0xa7, + 0xce, 0x25, 0x59, 0x26, 0x67, 0x8a, 0xf3, 0xd7, + 0x98, 0xc2, 0x3b, 0xcf, 0x75, 0xae, 0xbd, 0x97, + 0xf3, 0xce, 0x4e, 0x75, 0x79, 0xc0, 0x00, 0x01, + 0xdf, 0xfa, 0xad, 0xd0, 0xed, 0x34, 0xb9, 0xc4, + 0xdb, 0x26, 0xda, 0x7e, 0x94, 0x19, 0x47, 0x9e, + 0xf9, 0x2a, 0x00, 0x00, 0x0f, 0x62, 0xed, 0xeb, + 0x24, 0xde, 0x4b, 0x39, 0xd2, 0xb7, 0x8d, 0x95, + 0x27, 0x9e, 0x24, 0x4a, 0x55, 0xe7, 0x61, 0xa2, + 0x23, 0x64, 0xcc, 0x6a, 0xc4, 0xcb, 0x4c, 0x3a, + 0xc0, 0xc8, 0xdf, 0x69, 0xfa, 0x4d, 0xd1, 0x5b, + 0x94, 0x6d, 0x99, 0xd5, 0x0d, 0x92, 0xc8, 0x15, + 0x59, 0xc4, 0x8b, 0xba, 0x7e, 0xf6, 0xd9, 0x56, + 0x39, 0x6e, 0x06, 0x58, 0x42, 0xe7, 0x59, 0x8b, + 0x58, 0xfa, 0x9f, 0xb2, 0xd5, 0x11, 0xbe, 0x67, + 0x64, 0xa0, 0x52, 0x34, 0xd5, 0x65, 0xa4, 0xc5, + 0xac, 0x5e, 0xfa, 0x2d, 0x59, 0x8c, 0x46, 0xac, + 0x49, 0xb4, 0xe8, 0x88, 0x97, 0x69, 0xf8, 0x42, + 0xa4, 0x45, 0xab, 0xa4, 0xea, 0x5f, 0x1f, 0x6d, + 0xeb, 0xb8, 0x99, 0x56, 0xe3, 0x00, 0x00, 0x04, + 0xab, 0x24, 0xda, 0x74, 0x42, 0x65, 0x91, 0xe1, + 0x26, 0xcb, 0x4d, 0xa7, 0x92, 0xf1, 0xd4, 0x00, + 0x00, 0xdb, 0x67, 0x51, 0xf4, 0x1b, 0x4d, 0x37, + 0x13, 0x0e, 0x74, 0xd3, 0x94, 0x53, 0xf9, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, + 0xf6, 0x98, 0x5b, 0xcf, 0xd3, 0xee, 0x31, 0x47, + 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x97, 0x61, 0xe8, 0xb5, 0x5c, 0xb7, 0x65, + 0x14, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x74, 0x7b, 0x4c, 0x4d, 0x66, 0xf4, + 0xdc, 0x4c, 0x39, 0xc3, 0x98, 0x38, 0x50, 0x00, + 0x3e, 0x9d, 0x29, 0x46, 0x58, 0x96, 0x25, 0x29, + 0x62, 0x64, 0x6e, 0x31, 0x39, 0x60, 0x00, 0x07, + 0xa2, 0x96, 0x00, 0xe6, 0x4e, 0x40, 0x00, 0x01, + 0x34, 0xe8, 0x8a, 0x02, 0xd4, 0xda, 0x66, 0x59, + 0x9c, 0x41, 0x18, 0x00, 0x00, 0x3d, 0x94, 0xaf, + 0x2b, 0xce, 0x24, 0x82, 0x6e, 0x32, 0x23, 0x96, + 0x26, 0xa3, 0x41, 0x2c, 0x8e, 0x0c, 0x09, 0x26, + 0x93, 0x71, 0xb8, 0xd2, 0x7d, 0x34, 0x92, 0xcd, + 0x27, 0x78, 0x4a, 0x2f, 0x4d, 0xe4, 0xc3, 0x9b, + 0x39, 0x83, 0x85, 0x00, 0x03, 0x23, 0xb4, 0x29, + 0x09, 0xe5, 0x89, 0xcb, 0x96, 0x86, 0x64, 0xf3, + 0x23, 0x84, 0x00, 0x00, 0x7a, 0x29, 0x60, 0x0e, + 0x64, 0xe4, 0x00, 0x00, 0x13, 0x0b, 0x32, 0xac, + 0xbb, 0x23, 0x1b, 0x41, 0xce, 0x80, 0x00, 0x00, + 0xf6, 0x52, 0xbc, 0xdc, 0x71, 0xe6, 0xc3, 0x71, + 0x4c, 0x57, 0x1d, 0x69, 0xa4, 0xa8, 0x2e, 0x8a, + 0xb2, 0xf8, 0x84, 0x45, 0x3e, 0x96, 0x67, 0xc2, + 0x88, 0x94, 0x4d, 0x34, 0x9b, 0x0b, 0xc3, 0x71, + 0x7c, 0x6f, 0x26, 0x1c, 0xd1, 0x00, 0xe5, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, + 0x4c, 0x41, 0xb8, 0xa3, 0x00, 0x00, 0x6c, 0x35, + 0x92, 0x80, 0x34, 0x12, 0x81, 0x1c, 0xd4, 0x00, + 0x00, 0xea, 0x8a, 0xb3, 0x13, 0x96, 0x06, 0x66, + 0x27, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xae, 0x30, 0x2f, 0xcd, 0xc4, 0xd3, 0x9a, 0x39, + 0x73, 0x9d, 0x2c, 0x4d, 0x44, 0x82, 0x51, 0x0c, + 0xf8, 0x6b, 0x37, 0x9b, 0x88, 0x06, 0xe3, 0x51, + 0x3c, 0x8c, 0x55, 0x1d, 0x31, 0x5c, 0x43, 0x2d, + 0x0e, 0x58, 0xee, 0x4b, 0x30, 0x73, 0x27, 0x20, + 0x00, 0x05, 0xd9, 0x7e, 0x52, 0x12, 0x0f, 0xa4, + 0xa3, 0x59, 0xb8, 0xc4, 0xd4, 0x72, 0x40, 0x00, + 0x0f, 0x65, 0x2b, 0xca, 0x43, 0x85, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xd1, 0x4b, + 0x02, 0xfc, 0xde, 0x4d, 0x39, 0x92, 0x94, 0xe0, + 0x8b, 0xd3, 0xe9, 0x1c, 0xc8, 0xf8, 0x60, 0x60, + 0x60, 0x0d, 0x25, 0x91, 0x1c, 0xda, 0x45, 0x21, + 0x16, 0xc4, 0xd2, 0x01, 0xac, 0x84, 0x7a, 0x19, + 0xb0, 0x14, 0x27, 0x24, 0x00, 0x06, 0x44, 0xa3, + 0x41, 0xd2, 0x95, 0xa6, 0xd3, 0x49, 0xf4, 0x8a, + 0x6b, 0x22, 0x80, 0x00, 0x3d, 0x6c, 0xaf, 0x3e, + 0x1c, 0x61, 0xa4, 0x9c, 0x56, 0x95, 0x67, 0x54, + 0x48, 0x28, 0x49, 0xa6, 0x04, 0xe2, 0x31, 0xac, + 0xc8, 0x9e, 0x6c, 0x20, 0x18, 0x12, 0xc8, 0xa6, + 0xf3, 0xa0, 0x24, 0x1d, 0x01, 0xbc, 0x9a, 0x73, + 0x04, 0x63, 0x71, 0x88, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0xc2, 0x31, 0x80, 0x3e, 0x14, + 0x00, 0x00, 0x01, 0xb0, 0xcc, 0xd0, 0x6d, 0x3e, + 0x99, 0x91, 0x80, 0x00, 0x00, 0x76, 0x65, 0x61, + 0x3c, 0xe7, 0x8d, 0x66, 0x46, 0x82, 0x39, 0x6a, + 0x56, 0x98, 0x97, 0x05, 0x39, 0x60, 0x68, 0x36, + 0x11, 0xc9, 0x47, 0xd2, 0xac, 0x9c, 0x6b, 0x2c, + 0x08, 0xa7, 0x42, 0x44, 0x3a, 0x02, 0x41, 0x34, + 0xe5, 0xcc, 0xfc, 0x75, 0xd3, 0xe3, 0xa8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf4, + 0xcc, 0x1f, 0x7d, 0xf1, 0x39, 0x93, 0x90, 0x00, + 0x00, 0x0e, 0x98, 0x96, 0x40, 0x33, 0x2c, 0x0e, + 0x60, 0x82, 0x00, 0x00, 0x03, 0xd9, 0x4a, 0xf2, + 0x90, 0xe1, 0x41, 0x34, 0xb9, 0x21, 0x18, 0x91, + 0xcd, 0x80, 0x8c, 0x0d, 0xc6, 0xf2, 0x01, 0xb0, + 0xcc, 0xd4, 0x4a, 0x21, 0x1a, 0x01, 0xe8, 0xa5, + 0x81, 0xd0, 0x9b, 0xc9, 0xc7, 0x2e, 0x72, 0xfc, + 0x8c, 0xe8, 0x30, 0xa8, 0x1d, 0x26, 0xf6, 0x8d, + 0x58, 0x87, 0x56, 0xd9, 0x41, 0xa3, 0xa4, 0xde, + 0x60, 0xd2, 0x2b, 0xe8, 0x97, 0x64, 0x4a, 0xb5, + 0x42, 0xc6, 0xed, 0x10, 0xd3, 0x0f, 0x84, 0x5a, + 0xc0, 0x1b, 0x66, 0x7d, 0x0f, 0xbb, 0xac, 0x02, + 0x90, 0xe5, 0x40, 0x00, 0x02, 0xe0, 0xf8, 0x55, + 0x16, 0xa6, 0xb3, 0x22, 0xa8, 0x00, 0x00, 0x07, + 0xab, 0x15, 0xc5, 0x29, 0xc2, 0x03, 0xa9, 0x2d, + 0xca, 0x52, 0x21, 0xd5, 0x11, 0x4f, 0xa4, 0x93, + 0xe9, 0x4e, 0x6b, 0x3a, 0x52, 0x09, 0xa0, 0xd8, + 0x4d, 0x39, 0x93, 0x9a, 0x07, 0xa2, 0x96, 0x07, + 0x44, 0x6f, 0x27, 0x1c, 0xb1, 0xc3, 0x72, 0xb3, + 0xe7, 0x31, 0x80, 0x3b, 0x1f, 0x45, 0xac, 0xee, + 0xbf, 0xd6, 0x6a, 0x29, 0x15, 0x99, 0xa6, 0x59, + 0x2a, 0x55, 0xd5, 0x74, 0x9b, 0x4c, 0x1a, 0x44, + 0x48, 0x64, 0x4c, 0xb4, 0xe8, 0x88, 0xd9, 0x2f, + 0x2b, 0xf0, 0xd4, 0x0d, 0xb2, 0xf5, 0x9e, 0xd6, + 0xb5, 0xe4, 0x03, 0x98, 0x00, 0x00, 0x0b, 0x62, + 0xac, 0x92, 0x6f, 0x31, 0x25, 0x14, 0xa0, 0x00, + 0x00, 0x3d, 0x20, 0xad, 0x30, 0x39, 0x70, 0x00, + 0x00, 0x02, 0x69, 0xa0, 0xd2, 0x0c, 0xc9, 0xa5, + 0x78, 0x00, 0x03, 0xae, 0x30, 0x3a, 0x22, 0x41, + 0x38, 0xe5, 0x48, 0x1c, 0x7c, 0xe9, 0x7c, 0xb5, + 0x02, 0xd3, 0x49, 0xd1, 0x09, 0x76, 0x7c, 0x23, + 0xd5, 0xa6, 0x20, 0x6d, 0x99, 0xfa, 0x48, 0xb3, + 0x45, 0x5f, 0x65, 0xae, 0x12, 0x2c, 0xd3, 0x54, + 0x0a, 0x40, 0x12, 0xf4, 0x9b, 0xbe, 0xf6, 0xb1, + 0x0e, 0x64, 0xe4, 0x00, 0x00, 0x02, 0xf4, 0xb0, + 0x2b, 0xcd, 0x25, 0xd9, 0x70, 0x79, 0xa8, 0x00, + 0x00, 0x0f, 0x65, 0x2b, 0xce, 0x74, 0xe3, 0x01, + 0x78, 0x53, 0x16, 0x64, 0x33, 0x12, 0x59, 0x14, + 0xc8, 0x98, 0x43, 0x3e, 0x98, 0x98, 0x9b, 0x8f, + 0xa6, 0x07, 0xc2, 0x20, 0x3d, 0x00, 0xb5, 0x3a, + 0x32, 0x41, 0x38, 0xe5, 0x0c, 0x29, 0x1c, 0xbe, + 0x31, 0xf4, 0x03, 0x61, 0xac, 0x98, 0x6a, 0x34, + 0x00, 0x0c, 0xcc, 0x00, 0x00, 0x00, 0x5c, 0xeb, + 0x39, 0xe9, 0x22, 0x19, 0xcd, 0x80, 0x00, 0x04, + 0xe2, 0x11, 0xf4, 0x90, 0x68, 0x36, 0x1a, 0x00, + 0x00, 0x00, 0x7a, 0x11, 0x5a, 0x73, 0xc7, 0x16, + 0x7d, 0x3b, 0x12, 0xb8, 0xb0, 0x27, 0x83, 0x51, + 0x62, 0x72, 0x84, 0xb2, 0xc8, 0x8a, 0x49, 0x37, + 0x1a, 0xc9, 0x84, 0x32, 0x11, 0xc6, 0x83, 0xd0, + 0x4b, 0x43, 0xa3, 0x24, 0x13, 0xce, 0x50, 0xaa, + 0x3c, 0xc0, 0x00, 0x76, 0xc5, 0x71, 0x18, 0xb0, + 0x36, 0x18, 0x12, 0x8a, 0xf3, 0x61, 0xb0, 0xd2, + 0x48, 0x21, 0x1c, 0xd8, 0x00, 0xeb, 0xce, 0x98, + 0x14, 0x25, 0x71, 0xf4, 0xd2, 0x6e, 0x06, 0x06, + 0xa3, 0x13, 0x41, 0xf4, 0xd4, 0x6e, 0x2d, 0x0c, + 0x08, 0x66, 0xb2, 0xc0, 0xc8, 0x88, 0x4c, 0x2a, + 0x8f, 0x4e, 0x2b, 0xcc, 0x8e, 0x48, 0xc0, 0x00, + 0x00, 0x2c, 0xca, 0xd3, 0xe0, 0x04, 0xa2, 0x28, + 0x00, 0x03, 0x79, 0xd6, 0x9a, 0x4e, 0x90, 0x90, + 0x4f, 0x39, 0x32, 0x21, 0xc2, 0x80, 0x09, 0x64, + 0x92, 0x29, 0x34, 0xfa, 0x4a, 0x34, 0x10, 0x8d, + 0xa4, 0xd3, 0x50, 0x34, 0x15, 0x60, 0x03, 0xa6, + 0x2c, 0x01, 0xcc, 0x93, 0x4d, 0x24, 0x12, 0x60, + 0x3e, 0x11, 0x8b, 0xe3, 0x51, 0x04, 0x90, 0x73, + 0xc7, 0x54, 0x42, 0x30, 0x39, 0x83, 0xa9, 0x35, + 0x13, 0x88, 0xc5, 0x09, 0xe9, 0x65, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xd2, 0x92, 0x09, 0xe7, 0x24, 0x44, 0x38, 0x50, + 0x01, 0xbc, 0xb0, 0x34, 0x9b, 0x48, 0x26, 0xa3, + 0x00, 0x6f, 0x34, 0x19, 0x1f, 0x0f, 0x80, 0x00, + 0x74, 0xc5, 0x80, 0x39, 0x93, 0x90, 0x00, 0x00, + 0x6d, 0x26, 0x98, 0x19, 0x90, 0x4d, 0xc7, 0xd3, + 0x02, 0x38, 0x24, 0x82, 0x30, 0x07, 0xb2, 0x95, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x4a, 0x49, 0x27, 0x9c, 0x89, 0x54, + 0x79, 0x80, 0x00, 0xbc, 0x24, 0x99, 0x9a, 0x8c, + 0x0b, 0x43, 0x49, 0xbc, 0x92, 0x57, 0x17, 0x85, + 0x29, 0x14, 0xe6, 0x80, 0x07, 0x5e, 0x74, 0xc0, + 0xe6, 0x4e, 0x40, 0x00, 0x01, 0xd6, 0x99, 0x15, + 0x65, 0xa1, 0x5e, 0x62, 0x74, 0x26, 0x47, 0x9f, + 0x80, 0x00, 0x07, 0xb2, 0x95, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4c, + 0x48, 0x2c, 0x0e, 0x44, 0x8e, 0x70, 0x20, 0x02, + 0x41, 0x34, 0x84, 0x4d, 0x20, 0x92, 0x4d, 0xe6, + 0x93, 0x23, 0x41, 0x34, 0xc0, 0x80, 0x68, 0x00, + 0x1d, 0x31, 0x60, 0x0a, 0x13, 0x92, 0x00, 0x00, + 0x58, 0x93, 0x4d, 0x06, 0xf2, 0x21, 0x99, 0xbc, + 0xc0, 0xa5, 0x00, 0x00, 0x0f, 0x5b, 0x2b, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x98, 0x92, 0x58, 0x1c, 0x81, 0x46, 0x70, + 0x00, 0xb0, 0x25, 0x02, 0xa0, 0xb8, 0x30, 0x31, + 0x34, 0x18, 0x13, 0x08, 0x26, 0xe3, 0x22, 0x29, + 0x60, 0x6f, 0x23, 0x15, 0x47, 0xc3, 0xaf, 0x2f, + 0x01, 0x5e, 0x73, 0x20, 0x94, 0x4c, 0x36, 0x91, + 0x89, 0x05, 0x39, 0x62, 0x7c, 0x35, 0x9a, 0x88, + 0xe5, 0xb1, 0x56, 0x60, 0x09, 0x44, 0x50, 0x0f, + 0x48, 0x2b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x9c, 0x92, 0x58, 0x1c, + 0x79, 0xcf, 0x9e, 0x74, 0x0e, 0xf0, 0x82, 0x60, + 0x50, 0x96, 0x85, 0xe1, 0x48, 0x60, 0x47, 0x3a, + 0x62, 0x11, 0x91, 0x2c, 0xe6, 0x8e, 0xbc, 0xa6, + 0x37, 0x1c, 0x89, 0xa4, 0xec, 0x8e, 0x8c, 0x1c, + 0xc9, 0xc8, 0x02, 0xf0, 0xb7, 0x37, 0x15, 0x86, + 0xc2, 0x59, 0xf0, 0xda, 0x64, 0x5a, 0x9c, 0x89, + 0xbc, 0xbf, 0x22, 0x1b, 0x08, 0xe7, 0x0c, 0x01, + 0xec, 0xa5, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xd4, 0x12, 0x0b, 0x13, + 0x8e, 0x39, 0xf3, 0xce, 0x81, 0xb4, 0x98, 0x60, + 0x68, 0x37, 0x18, 0x19, 0x1f, 0x48, 0xc6, 0xe3, + 0x59, 0x81, 0xbc, 0xd6, 0x0d, 0xe6, 0xa2, 0x38, + 0x3b, 0x23, 0xa3, 0x07, 0x32, 0x72, 0x00, 0xda, + 0x66, 0x66, 0x62, 0x69, 0x37, 0x98, 0x9a, 0x8c, + 0xcb, 0xa2, 0x88, 0xde, 0x49, 0x22, 0x03, 0x22, + 0x28, 0x07, 0xb2, 0x95, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x50, 0x49, + 0x2c, 0x4e, 0x38, 0xe7, 0x8f, 0x3a, 0x00, 0x00, + 0x75, 0x04, 0x03, 0x71, 0x28, 0x86, 0x6c, 0x37, + 0x9f, 0x0d, 0x07, 0x3e, 0x00, 0x00, 0xec, 0xce, + 0x88, 0x1c, 0xd1, 0xc7, 0x80, 0x76, 0x84, 0x63, + 0xe9, 0xb4, 0xd8, 0x62, 0x45, 0x37, 0x11, 0xcd, + 0xc4, 0x93, 0x59, 0xac, 0xd6, 0x72, 0xa0, 0x1f, + 0x4f, 0x65, 0x2b, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0xa4, 0x92, 0x58, + 0x9c, 0x69, 0x10, 0xf2, 0xa3, 0x48, 0x00, 0x1d, + 0x49, 0x18, 0xdc, 0x6e, 0x31, 0x34, 0x1b, 0xcd, + 0xa4, 0x23, 0x9d, 0x00, 0x00, 0x7a, 0x71, 0xbc, + 0x1a, 0x4f, 0x30, 0x00, 0xe8, 0x8a, 0xb2, 0xcc, + 0xc8, 0xd2, 0x66, 0x60, 0x60, 0x6e, 0x21, 0x93, + 0xca, 0x92, 0x59, 0x24, 0xe7, 0x80, 0x3a, 0xe3, + 0xab, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1d, 0x49, 0x28, 0xb1, 0x39, + 0x82, 0x88, 0xd8, 0x53, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5a, 0x1b, 0x0c, 0x01, 0x91, + 0x89, 0x5a, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x24, 0x16, 0x84, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x71, 0xd5, + 0x99, 0x16, 0x46, 0x07, 0x32, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x3a, 0x13, 0x03, 0x82, 0x23, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x58, 0x9f, 0xff, 0xc4, 0x00, 0x32, + 0x10, 0x00, 0x01, 0x04, 0x02, 0x01, 0x03, 0x02, + 0x06, 0x01, 0x04, 0x02, 0x03, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x03, 0x05, 0x01, 0x15, + 0x14, 0x06, 0x13, 0x16, 0x12, 0x34, 0x10, 0x11, + 0x20, 0x32, 0x33, 0x35, 0x40, 0x07, 0x17, 0x30, + 0x31, 0x21, 0x23, 0x22, 0x24, 0x50, 0x25, 0x36, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, + 0x05, 0x02, 0x1c, 0x7c, 0x4e, 0xde, 0x03, 0x17, + 0x01, 0x8b, 0x80, 0xc5, 0xc0, 0x62, 0xe0, 0x31, + 0x70, 0x18, 0xb8, 0x0c, 0x5c, 0x06, 0x2e, 0x03, + 0x17, 0x01, 0x8b, 0x80, 0xc5, 0xc0, 0x62, 0xe0, + 0x31, 0x70, 0x18, 0xb8, 0x0c, 0x5c, 0x06, 0x2e, + 0x03, 0x17, 0x01, 0x8b, 0x80, 0xc5, 0xc0, 0x62, + 0xe0, 0x31, 0x70, 0x18, 0xb8, 0x0c, 0x5c, 0x06, + 0x2e, 0x03, 0x17, 0x01, 0x8b, 0x80, 0xc5, 0xc0, + 0x62, 0xe0, 0x31, 0x70, 0x18, 0xb8, 0x0c, 0x5c, + 0x06, 0x2e, 0x03, 0x17, 0x01, 0x8b, 0x80, 0xc5, + 0xc0, 0x62, 0xe0, 0x31, 0x70, 0x18, 0xb8, 0x0c, + 0x5c, 0x06, 0x2e, 0x03, 0x17, 0x01, 0x8b, 0x80, + 0xc5, 0xc0, 0x62, 0xe0, 0x31, 0x70, 0x18, 0xb8, + 0x0c, 0x5c, 0x06, 0x2e, 0x03, 0x17, 0x01, 0x8b, + 0x80, 0xc5, 0xc0, 0x62, 0xe0, 0x31, 0x70, 0x18, + 0xb8, 0x0c, 0x5c, 0x06, 0x2e, 0x03, 0x17, 0x01, + 0x8b, 0x80, 0xc5, 0xc0, 0x62, 0xe0, 0x31, 0x70, + 0x18, 0xb8, 0x0c, 0x5c, 0x06, 0x2e, 0x03, 0x17, + 0x01, 0x8b, 0x80, 0xc5, 0xc0, 0x62, 0xe0, 0x31, + 0x70, 0x18, 0xb8, 0x0c, 0x5c, 0x06, 0x2e, 0x03, + 0x17, 0x01, 0x8b, 0x80, 0xc4, 0x40, 0xf8, 0x81, + 0xa0, 0x7e, 0x2f, 0xfe, 0x66, 0x73, 0xf2, 0xc6, + 0x0a, 0xc6, 0x71, 0xc9, 0x5c, 0x95, 0xc9, 0x5c, + 0x95, 0xc9, 0x5c, 0x95, 0xc9, 0x5c, 0x95, 0xc9, + 0x5c, 0x95, 0xc9, 0x5c, 0x95, 0xc9, 0x5c, 0x95, + 0xc9, 0x5c, 0xbc, 0x7c, 0xf9, 0x58, 0x5c, 0xac, + 0x2e, 0x56, 0x17, 0x2b, 0x0b, 0x95, 0x85, 0xca, + 0xc2, 0xe6, 0x37, 0xe7, 0xca, 0xc2, 0xe5, 0x61, + 0x72, 0xb0, 0xb9, 0x58, 0x5c, 0xac, 0x2e, 0x56, + 0x11, 0x53, 0x62, 0x58, 0x41, 0xfc, 0x5f, 0xfc, + 0xc9, 0x3f, 0x1e, 0x27, 0x60, 0x95, 0xa2, 0x7f, + 0x50, 0x68, 0x0f, 0x2f, 0xe9, 0x9a, 0x78, 0xc6, + 0x8b, 0xfc, 0x12, 0x7b, 0xd5, 0x3d, 0xe8, 0x23, + 0x1b, 0x07, 0x51, 0x02, 0x49, 0xb1, 0x5a, 0x8b, + 0x39, 0x42, 0x75, 0x35, 0x61, 0xc4, 0xa6, 0xfb, + 0xb3, 0xec, 0x07, 0xab, 0x14, 0xcb, 0xb0, 0xab, + 0xe0, 0x2f, 0xa8, 0x40, 0x09, 0xb9, 0xbb, 0x0f, + 0x19, 0x33, 0xa9, 0xab, 0x40, 0x27, 0x19, 0xf9, + 0xe2, 0x7f, 0xf4, 0x0f, 0xe2, 0xff, 0x00, 0xe6, + 0x49, 0xf8, 0xc5, 0xf6, 0xc4, 0x9f, 0x35, 0x65, + 0xa9, 0x27, 0xdc, 0x09, 0x47, 0x6b, 0x2d, 0x8d, + 0x5e, 0x6f, 0x89, 0x2f, 0x05, 0x91, 0x73, 0x70, + 0x75, 0xc4, 0x45, 0x4e, 0xca, 0xeb, 0x12, 0x48, + 0x33, 0xa3, 0xed, 0x4f, 0x26, 0xb6, 0xb0, 0xd3, + 0x0e, 0x84, 0xf1, 0x65, 0xbe, 0x75, 0x7f, 0x45, + 0x99, 0x99, 0xa2, 0xfa, 0x24, 0xf7, 0xaa, 0xcf, + 0xbd, 0x97, 0x87, 0x29, 0xd4, 0x8e, 0xea, 0x2a, + 0x7c, 0x0f, 0x4b, 0xea, 0xaf, 0xe1, 0xa6, 0xfb, + 0xbe, 0xa1, 0x89, 0x92, 0x52, 0x01, 0xfb, 0xaa, + 0x71, 0x0d, 0x96, 0x00, 0x60, 0x8f, 0xa8, 0x84, + 0xe9, 0xbe, 0xce, 0xa0, 0x6c, 0xc5, 0x91, 0xa7, + 0x40, 0xfe, 0x2f, 0xfe, 0x64, 0x9f, 0x8c, 0x5f, + 0x6c, 0xda, 0x70, 0xd8, 0x4c, 0x5d, 0x17, 0x4b, + 0x00, 0xa5, 0x74, 0xdd, 0x71, 0xab, 0xc2, 0x06, + 0x36, 0xf4, 0xae, 0x98, 0xab, 0x3a, 0xc6, 0x4e, + 0x99, 0xad, 0x94, 0x2c, 0x74, 0x85, 0x43, 0x61, + 0x9f, 0xa1, 0xe8, 0xca, 0xcc, 0x74, 0xe1, 0xc5, + 0x2c, 0x3d, 0x19, 0x4a, 0x38, 0xb5, 0x74, 0xc1, + 0xd2, 0xc5, 0xf4, 0x49, 0xef, 0x54, 0xf4, 0x00, + 0x12, 0x64, 0x5d, 0x3f, 0x5f, 0x09, 0xdf, 0xed, + 0x07, 0xd3, 0x35, 0xa0, 0x12, 0x9b, 0xee, 0xec, + 0xaa, 0xc7, 0xb7, 0x1f, 0x3d, 0x2f, 0x5d, 0x91, + 0x0b, 0xa0, 0x00, 0xe8, 0xa0, 0x82, 0x31, 0x61, + 0x33, 0xa6, 0x6b, 0x4f, 0x2b, 0xfd, 0x29, 0xd0, + 0x3f, 0x8b, 0xe2, 0x55, 0xc8, 0x41, 0x3f, 0xc9, + 0xeb, 0x17, 0x93, 0xd6, 0x2f, 0x27, 0xac, 0x5e, + 0x4f, 0x58, 0xbc, 0x9e, 0xb1, 0x79, 0x3d, 0x62, + 0xf2, 0x7a, 0xc5, 0xe4, 0xf5, 0x8b, 0xc9, 0xeb, + 0x17, 0x93, 0xd6, 0x2f, 0x27, 0xac, 0x5e, 0x4f, + 0x58, 0xbc, 0x9e, 0xb1, 0x79, 0x3d, 0x62, 0xf2, + 0x7a, 0xc5, 0xe4, 0xf5, 0x8b, 0xc9, 0xeb, 0x17, + 0x93, 0xd6, 0x2f, 0x27, 0xac, 0x5e, 0x4f, 0x58, + 0x84, 0x3c, 0x63, 0xf0, 0xb3, 0x9f, 0x96, 0x25, + 0xb3, 0x6b, 0x73, 0xb4, 0x91, 0x6d, 0x24, 0x5b, + 0x49, 0x16, 0xd2, 0x45, 0xb4, 0x91, 0x6d, 0x24, + 0x5b, 0x49, 0x16, 0xd2, 0x45, 0xb4, 0x91, 0x6d, + 0x24, 0x5b, 0x49, 0x16, 0xd2, 0x45, 0xb4, 0x91, + 0x6d, 0x24, 0x5b, 0x49, 0x16, 0xd2, 0x45, 0x9b, + 0x37, 0xe7, 0x18, 0x2d, 0xf8, 0xc7, 0x32, 0x45, + 0xcc, 0x91, 0x73, 0x24, 0x5c, 0xc9, 0x17, 0x32, + 0x45, 0xcc, 0x91, 0x73, 0x24, 0x5c, 0xc9, 0x17, + 0x32, 0x45, 0xcc, 0x91, 0x73, 0x24, 0x5c, 0xc9, + 0x17, 0x32, 0x45, 0xcc, 0x91, 0x73, 0x24, 0x5c, + 0xa7, 0x7c, 0xf9, 0x6f, 0x5c, 0xb7, 0xae, 0x5b, + 0xd7, 0x2d, 0xeb, 0x96, 0xf5, 0xcb, 0x7a, 0xe4, + 0xbb, 0xe7, 0xcb, 0x7a, 0xe5, 0xbd, 0x72, 0xde, + 0xb9, 0x6f, 0x4c, 0x2d, 0x44, 0xc6, 0x4c, 0xd2, + 0x62, 0xc4, 0x51, 0x05, 0xf8, 0xfe, 0x1d, 0x53, + 0x6c, 0xe0, 0xa1, 0xfe, 0x2c, 0x52, 0xba, 0x19, + 0x29, 0xec, 0x36, 0x95, 0xc6, 0x39, 0xd3, 0xcc, + 0xe3, 0xa0, 0x83, 0x3b, 0x5c, 0x2d, 0xae, 0x16, + 0xd7, 0x0b, 0x6b, 0x85, 0xb5, 0xc2, 0xda, 0xe1, + 0x6d, 0x70, 0xb6, 0xb8, 0x5b, 0x5c, 0x2d, 0xae, + 0x16, 0xd7, 0x0b, 0x6b, 0x85, 0xb5, 0xc2, 0xda, + 0xe1, 0x6d, 0x70, 0xb6, 0xb8, 0x5b, 0x5c, 0x2d, + 0xae, 0x16, 0xd7, 0x0b, 0x6b, 0x85, 0xb4, 0x6e, + 0x54, 0xac, 0x63, 0xa2, 0x59, 0x64, 0x22, 0xe3, + 0x96, 0x22, 0xe5, 0x88, 0xb9, 0x62, 0x2e, 0x58, + 0x8b, 0x96, 0x22, 0xe5, 0x88, 0xb9, 0x62, 0x2e, + 0x58, 0x8b, 0x96, 0x22, 0xe5, 0x88, 0xb9, 0x62, + 0x2e, 0x58, 0x8b, 0x96, 0x22, 0xe5, 0x88, 0xb9, + 0x62, 0x2e, 0x58, 0x8b, 0x96, 0x22, 0xe5, 0x88, + 0xb9, 0x62, 0x2e, 0x58, 0x8b, 0x96, 0x22, 0x6f, + 0x1c, 0xbc, 0x8f, 0x2e, 0x46, 0x98, 0xdf, 0xc4, + 0x17, 0xe3, 0xf8, 0x75, 0x97, 0xed, 0x7e, 0xb8, + 0xa2, 0x74, 0xd2, 0xf5, 0x05, 0x58, 0x83, 0x0d, + 0x0c, 0x35, 0xe2, 0x51, 0xc7, 0x4e, 0x09, 0x24, + 0xc9, 0x4d, 0x06, 0x3a, 0x8a, 0xd2, 0xac, 0x71, + 0xee, 0x0a, 0xa9, 0x8b, 0x0b, 0xfd, 0x7f, 0x83, + 0xa3, 0x33, 0xff, 0x00, 0xe7, 0x49, 0x9f, 0x91, + 0x5c, 0xb5, 0xcb, 0x5c, 0xb5, 0xcb, 0x5c, 0xb5, + 0xcb, 0x5c, 0xb5, 0x50, 0x16, 0x6d, 0xb1, 0x56, + 0x13, 0xac, 0xa3, 0x6b, 0xa6, 0x7c, 0x4c, 0xef, + 0xc9, 0x8c, 0xbe, 0x5c, 0x46, 0xcc, 0xcd, 0x2c, + 0x78, 0xcc, 0xce, 0x66, 0x73, 0x33, 0x65, 0x71, + 0x39, 0x63, 0xb9, 0x6b, 0x96, 0xb9, 0x6b, 0x96, + 0xb9, 0x6b, 0x96, 0xaa, 0x25, 0xee, 0xd7, 0x43, + 0xff, 0x00, 0x33, 0x59, 0x17, 0xff, 0x00, 0xe8, + 0x72, 0xd7, 0x2d, 0x47, 0x53, 0x3c, 0x91, 0x12, + 0xe9, 0x04, 0x9f, 0x96, 0xb9, 0x6b, 0x96, 0xb9, + 0x6b, 0x96, 0x8a, 0x12, 0x71, 0x21, 0x1b, 0x32, + 0x19, 0x31, 0x55, 0x84, 0x8d, 0x09, 0xac, 0xe1, + 0xc7, 0xcb, 0x5c, 0xb5, 0x64, 0xcd, 0x71, 0x53, + 0x4f, 0x1b, 0x1b, 0xcb, 0x5c, 0xb5, 0xcb, 0x5c, + 0xb4, 0xd3, 0xb2, 0xc7, 0x58, 0x63, 0xe4, 0x64, + 0xd9, 0xf9, 0x88, 0x17, 0xe3, 0xf8, 0x75, 0x8f, + 0xed, 0x7e, 0xbe, 0x98, 0x87, 0x0e, 0xb2, 0x1c, + 0xb1, 0x6e, 0x46, 0x8e, 0xc3, 0x35, 0xdd, 0x31, + 0xf3, 0x71, 0x57, 0x72, 0x14, 0xcd, 0x0d, 0xe3, + 0x9a, 0xeb, 0xcb, 0x09, 0xf3, 0x36, 0x5e, 0xef, + 0x5b, 0xbe, 0xbe, 0x8c, 0xfd, 0x7c, 0xd8, 0xf9, + 0xcf, 0xc6, 0xca, 0xe3, 0x65, 0x71, 0xb2, 0xb8, + 0xd9, 0x5c, 0x6c, 0xae, 0x36, 0x57, 0x1b, 0x2b, + 0xa7, 0xf3, 0x90, 0xc3, 0x8c, 0x7c, 0x01, 0x37, + 0x76, 0x20, 0xf3, 0x0c, 0x92, 0x0d, 0x5c, 0x53, + 0xa4, 0x9d, 0x65, 0xc4, 0x0e, 0x65, 0xdb, 0x9c, + 0x35, 0x60, 0x6d, 0xee, 0xc4, 0xe8, 0x5c, 0xf7, + 0x71, 0xb2, 0xb8, 0xd9, 0x5c, 0x6c, 0xae, 0x36, + 0x57, 0x1b, 0x2b, 0x8d, 0x95, 0x41, 0x1f, 0x6e, + 0xba, 0x0f, 0xcd, 0x6b, 0x1b, 0xb6, 0x9d, 0xb7, + 0xae, 0xdb, 0xd1, 0x82, 0x89, 0x28, 0xbc, 0xde, + 0xfa, 0xc7, 0xaa, 0xc2, 0x9f, 0x31, 0x35, 0xe5, + 0x0b, 0x23, 0x44, 0xae, 0x69, 0x18, 0x0a, 0xaa, + 0xb6, 0xbd, 0xf6, 0x07, 0x59, 0x47, 0xb2, 0x1f, + 0xa6, 0x18, 0xfc, 0x4a, 0x2c, 0x46, 0x7c, 0xa2, + 0x87, 0x1e, 0x98, 0x9b, 0x9b, 0xa0, 0x6d, 0x8e, + 0x22, 0x77, 0x5d, 0xc7, 0x98, 0x21, 0x17, 0x1f, + 0x27, 0x47, 0xf3, 0xb5, 0x03, 0x25, 0xcc, 0x44, + 0x9d, 0xb7, 0xae, 0xdb, 0xd7, 0x6d, 0xea, 0xc7, + 0xde, 0xcb, 0xec, 0xc2, 0xfc, 0x7f, 0x0e, 0xb1, + 0xfd, 0xaf, 0xf1, 0xba, 0x33, 0xf5, 0xff, 0x00, + 0x71, 0xee, 0x07, 0x2c, 0x77, 0x11, 0x71, 0x17, + 0x11, 0x71, 0x17, 0x11, 0x71, 0x14, 0x6c, 0x92, + 0x28, 0xbb, 0xa4, 0x77, 0x23, 0x20, 0xa8, 0xa0, + 0xff, 0x00, 0xb7, 0xb7, 0x97, 0xcf, 0x9c, 0xc2, + 0x41, 0x43, 0xc2, 0xf6, 0xc9, 0x24, 0x2e, 0xc4, + 0x70, 0x56, 0x71, 0x17, 0x11, 0x71, 0x17, 0x11, + 0x71, 0x17, 0x11, 0x71, 0x10, 0xd0, 0x71, 0x6b, + 0xe1, 0xcf, 0xca, 0x5b, 0x10, 0xf3, 0xcf, 0xe2, + 0x2e, 0x22, 0x27, 0x2f, 0x29, 0x81, 0xba, 0x40, + 0x9d, 0xce, 0x23, 0x94, 0xc2, 0xa7, 0x8d, 0xa2, + 0x97, 0x30, 0xb0, 0xba, 0x59, 0x5e, 0x38, 0xec, + 0x78, 0xb3, 0x62, 0xca, 0x76, 0xe2, 0x16, 0xc8, + 0x34, 0xe4, 0xd8, 0x10, 0x4c, 0x38, 0x32, 0x76, + 0x3c, 0x92, 0x26, 0x21, 0x12, 0x6c, 0xe5, 0x45, + 0x93, 0x67, 0xc9, 0x0d, 0x36, 0x66, 0xa8, 0xdf, + 0x23, 0x47, 0x22, 0x6f, 0x94, 0x1c, 0x45, 0xc4, + 0x4c, 0x07, 0x32, 0x3c, 0xf7, 0x61, 0xc6, 0x4b, + 0xed, 0x03, 0xfc, 0x7f, 0x0e, 0xb1, 0xfd, 0xaf, + 0xd1, 0x4f, 0x57, 0x8b, 0x17, 0x12, 0x05, 0x74, + 0x81, 0x8b, 0x48, 0x71, 0x90, 0x0d, 0x4e, 0x61, + 0x6d, 0x97, 0xa7, 0xa7, 0x86, 0xa7, 0x34, 0xa6, + 0xe0, 0x5d, 0x69, 0x1d, 0xb0, 0x82, 0x86, 0x2c, + 0xb2, 0x98, 0x59, 0xa2, 0xb1, 0x85, 0xa3, 0x1f, + 0x53, 0x47, 0x15, 0x8d, 0x55, 0x45, 0x1c, 0x47, + 0x56, 0x74, 0xfd, 0x14, 0x76, 0x9f, 0x57, 0x46, + 0xfe, 0xbc, 0xcf, 0x75, 0x73, 0x77, 0xc2, 0x3b, + 0xc9, 0x62, 0x5e, 0x4b, 0x12, 0xf2, 0x58, 0x97, + 0x92, 0xc4, 0xbc, 0x96, 0x25, 0xe4, 0xb1, 0x2f, + 0x25, 0x89, 0x79, 0x2c, 0x4b, 0xc9, 0x62, 0x5e, + 0x4b, 0x12, 0xf2, 0x58, 0x97, 0x92, 0xc4, 0xbc, + 0x96, 0x25, 0xe4, 0xb1, 0x2f, 0x25, 0x89, 0x79, + 0x2c, 0x4b, 0xc9, 0x62, 0x5e, 0x4b, 0x12, 0xf2, + 0x58, 0x97, 0x92, 0xc4, 0x9f, 0xd4, 0xd8, 0xf9, + 0x1e, 0xfc, 0xc9, 0x22, 0xb2, 0xb3, 0x84, 0x46, + 0xef, 0x2b, 0x96, 0xf2, 0xb9, 0x6f, 0x2b, 0x96, + 0xf2, 0xb9, 0x6f, 0x2b, 0x96, 0xf2, 0xb9, 0x6f, + 0x2b, 0x96, 0xf2, 0xb9, 0x6f, 0x2b, 0x96, 0xf2, + 0xb9, 0x6f, 0x2b, 0x96, 0xf2, 0xb9, 0x6f, 0x2b, + 0x96, 0xf2, 0xb9, 0x6f, 0x2b, 0x96, 0xf2, 0xb9, + 0x6f, 0x2b, 0x96, 0xf2, 0xb9, 0x6f, 0x2b, 0x96, + 0xf2, 0xb9, 0x6f, 0x2b, 0x90, 0x27, 0x41, 0x38, + 0x8a, 0x5f, 0x68, 0x1f, 0xe3, 0xf8, 0x75, 0x8f, + 0xed, 0x7e, 0x8e, 0x9e, 0xc7, 0x2c, 0x0c, 0xf4, + 0xf9, 0x30, 0x87, 0x38, 0xe4, 0x15, 0x2d, 0xa4, + 0xf8, 0xd6, 0xbe, 0x37, 0x49, 0xd2, 0xc7, 0x4b, + 0x98, 0xac, 0xba, 0x63, 0x39, 0x18, 0x12, 0x3b, + 0xe2, 0x93, 0xc9, 0x9b, 0xd2, 0x0c, 0xa2, 0x3a, + 0x7a, 0xa2, 0xe3, 0x12, 0xbb, 0xb6, 0xd0, 0x64, + 0xaa, 0xc8, 0x52, 0x1a, 0x43, 0x19, 0x1c, 0xff, + 0x00, 0x47, 0x46, 0xfe, 0xbc, 0xcf, 0x73, 0xd5, + 0x3f, 0xb4, 0xfa, 0xa5, 0xed, 0xba, 0xa6, 0xae, + 0x06, 0x4e, 0x08, 0x83, 0x45, 0x80, 0xec, 0x22, + 0x77, 0x08, 0x26, 0x4d, 0xab, 0x90, 0x6e, 0xfc, + 0x4e, 0xa5, 0xf4, 0x3e, 0x21, 0x47, 0xe1, 0x96, + 0x3e, 0x45, 0x27, 0xea, 0x33, 0xee, 0x5d, 0x4f, + 0xf6, 0xfc, 0x42, 0xc4, 0x2d, 0x0e, 0x6a, 0xdc, + 0x4c, 0xf7, 0xd6, 0x48, 0xc8, 0x99, 0x52, 0xf6, + 0x13, 0x8a, 0xf7, 0x76, 0x5d, 0x52, 0xf7, 0x11, + 0x05, 0x5c, 0x93, 0x30, 0x21, 0xd9, 0x9c, 0xc9, + 0x1c, 0x25, 0x88, 0xea, 0x99, 0x31, 0x27, 0x03, + 0x31, 0xe0, 0xea, 0xf8, 0xda, 0xf6, 0x55, 0x63, + 0xd1, 0x9a, 0xc9, 0x31, 0x11, 0xa1, 0xe4, 0x19, + 0xfe, 0x3d, 0x3f, 0xfa, 0x95, 0x27, 0xb4, 0x0f, + 0xec, 0xf8, 0x75, 0x8f, 0xed, 0x7e, 0x86, 0xbb, + 0x2c, 0x74, 0xc5, 0xce, 0x4a, 0x8c, 0xb9, 0xe1, + 0x66, 0x27, 0x93, 0x11, 0x34, 0x89, 0x59, 0x17, + 0x2e, 0x7e, 0xcb, 0x88, 0x95, 0xed, 0x96, 0x69, + 0x27, 0x7f, 0xc3, 0xbd, 0x26, 0x22, 0xe6, 0x4f, + 0xeb, 0x8a, 0x69, 0x07, 0x7f, 0xd3, 0xd1, 0xbf, + 0xaf, 0x33, 0xdc, 0xf5, 0x4f, 0xed, 0x3e, 0xac, + 0xcc, 0x26, 0xb4, 0x33, 0x78, 0x91, 0x6d, 0x61, + 0xe4, 0x4a, 0x48, 0xb1, 0xc1, 0xca, 0xf9, 0x00, + 0x25, 0x8b, 0x21, 0x8b, 0x9c, 0x2f, 0xa4, 0xcb, + 0x06, 0x12, 0xc3, 0xe7, 0x69, 0x45, 0xfd, 0x46, + 0x7d, 0xcb, 0xaa, 0x3e, 0xdf, 0x88, 0x47, 0xb8, + 0x30, 0xa2, 0x2f, 0xd4, 0xc9, 0x6d, 0x1b, 0x98, + 0xf1, 0x30, 0x71, 0xd9, 0xc0, 0x4c, 0x2d, 0x0e, + 0x62, 0xc5, 0x28, 0x8e, 0x74, 0x6f, 0xcc, 0x04, + 0xc5, 0x89, 0xe4, 0x7c, 0x03, 0x0b, 0xcf, 0x1f, + 0xe4, 0xd7, 0x8c, 0x34, 0x6e, 0xb1, 0x19, 0xc4, + 0x4a, 0x6c, 0x13, 0x40, 0xe2, 0xe0, 0xf9, 0xd8, + 0xca, 0xd9, 0xec, 0x3e, 0x3d, 0x3f, 0xfa, 0x95, + 0x27, 0xb4, 0x13, 0xec, 0xf8, 0x75, 0x8f, 0xed, + 0x3e, 0x82, 0x05, 0x6c, 0x40, 0x66, 0xb3, 0x32, + 0x40, 0x4d, 0x7c, 0xe2, 0x31, 0x95, 0x72, 0x3e, + 0xb0, 0x9a, 0xa2, 0x84, 0x8c, 0x58, 0xe3, 0x96, + 0x52, 0x2b, 0xe1, 0x86, 0xe3, 0x35, 0xb0, 0x17, + 0x14, 0xe0, 0x88, 0xf8, 0x6a, 0x6b, 0x19, 0x63, + 0x15, 0x3d, 0x6b, 0x2c, 0x11, 0xe2, 0xb4, 0x5c, + 0x4f, 0x52, 0xec, 0xcc, 0x58, 0x33, 0x02, 0xef, + 0xa3, 0xa3, 0xbf, 0x5c, 0x5f, 0xb9, 0xb1, 0xbc, + 0x1e, 0xbe, 0x7f, 0x2a, 0x09, 0x79, 0x50, 0x4b, + 0xca, 0x82, 0x5e, 0x54, 0x12, 0xf2, 0xa0, 0x97, + 0x95, 0x04, 0xbc, 0xa8, 0x25, 0xe5, 0x41, 0x2f, + 0x2a, 0x09, 0x79, 0x50, 0x4b, 0xca, 0x82, 0x5e, + 0x54, 0x12, 0xf2, 0xa0, 0x97, 0x95, 0x04, 0xbc, + 0xa8, 0x25, 0xe5, 0x41, 0x2f, 0x2a, 0x09, 0x79, + 0x50, 0x4b, 0xca, 0x82, 0x5e, 0x54, 0x12, 0xf2, + 0xa0, 0x95, 0x83, 0xbd, 0x73, 0xab, 0xab, 0x28, + 0x44, 0x6e, 0xf4, 0x25, 0xbd, 0x09, 0x62, 0xe4, + 0x5c, 0xad, 0xc0, 0xcb, 0x70, 0x32, 0xdc, 0x0c, + 0xb7, 0x03, 0x2d, 0xc0, 0xcb, 0x70, 0x32, 0xdc, + 0x0c, 0xb7, 0x03, 0x2d, 0xc0, 0xcb, 0x70, 0x32, + 0xdc, 0x0c, 0xb7, 0x03, 0x2d, 0xc0, 0xcb, 0x70, + 0x32, 0xdc, 0x0c, 0xb7, 0x03, 0x2d, 0xc0, 0xcb, + 0x70, 0x32, 0xac, 0x32, 0x32, 0xab, 0x94, 0x9e, + 0xd4, 0x4f, 0xb3, 0xe1, 0xd6, 0x3f, 0xb4, 0xfa, + 0x25, 0x82, 0x42, 0xe9, 0x42, 0x63, 0xa0, 0x33, + 0x11, 0x3e, 0x0a, 0x3a, 0x7f, 0x96, 0x03, 0x8e, + 0x19, 0x60, 0x89, 0x91, 0xba, 0x4c, 0xda, 0x81, + 0x31, 0x7d, 0x41, 0x14, 0xfc, 0x53, 0xe1, 0x16, + 0x50, 0x22, 0xa9, 0x9f, 0x22, 0x89, 0x88, 0x98, + 0x11, 0x26, 0xd8, 0xe4, 0x48, 0x4c, 0x17, 0x63, + 0x63, 0x61, 0x3c, 0x84, 0x93, 0xf4, 0x74, 0x77, + 0xeb, 0x8b, 0xf7, 0x1d, 0x53, 0xfb, 0x4f, 0xa4, + 0x63, 0x1d, 0x26, 0x61, 0x61, 0x13, 0x91, 0x69, + 0x97, 0x48, 0x8b, 0x6f, 0x14, 0x50, 0xa5, 0x7b, + 0x05, 0x15, 0xec, 0x1a, 0xcf, 0x1c, 0x97, 0x14, + 0x56, 0x4a, 0xc0, 0xa5, 0x87, 0x2b, 0x6a, 0x4a, + 0x81, 0xa5, 0xab, 0xc9, 0x3b, 0xd6, 0x5f, 0x49, + 0x9f, 0x72, 0xfe, 0xa0, 0xfd, 0xce, 0xa9, 0x05, + 0x93, 0x38, 0x71, 0xf0, 0x3f, 0x45, 0xb3, 0x2f, + 0x8c, 0xd1, 0x71, 0x24, 0xf9, 0xa9, 0x8e, 0x06, + 0x93, 0x5a, 0x33, 0x14, 0xb5, 0x6c, 0x1e, 0x39, + 0xc0, 0xc8, 0xec, 0xaf, 0x89, 0xf9, 0xad, 0xcd, + 0x4b, 0x0b, 0x3b, 0x20, 0x31, 0x90, 0x1e, 0x0e, + 0x30, 0xb4, 0xfe, 0xb9, 0x49, 0x82, 0x18, 0xeb, + 0x5d, 0x5a, 0xf2, 0x01, 0x94, 0x18, 0xf9, 0xda, + 0xb6, 0x7a, 0x5f, 0x58, 0xc8, 0xe1, 0x96, 0xb1, + 0x8c, 0x64, 0x34, 0xac, 0xee, 0xb2, 0xba, 0x27, + 0xaa, 0x16, 0xe6, 0x30, 0x54, 0x9e, 0xd4, 0x4f, + 0xb3, 0xe1, 0xd6, 0x3f, 0xb4, 0xfa, 0x21, 0x26, + 0x51, 0xb3, 0x5e, 0x6e, 0x06, 0x3a, 0x52, 0x25, + 0x9f, 0x0d, 0x9e, 0x48, 0xd9, 0x29, 0x53, 0x4e, + 0xd8, 0x48, 0x94, 0x67, 0xe6, 0xcc, 0xb7, 0x3a, + 0x63, 0xc9, 0x25, 0x92, 0x13, 0x34, 0xcd, 0xc4, + 0x8e, 0x6b, 0x79, 0x12, 0xfa, 0x9f, 0x23, 0xa4, + 0x51, 0x9e, 0x4c, 0x59, 0x9c, 0xa9, 0x8a, 0xcf, + 0xd1, 0xd1, 0xdf, 0xae, 0x2f, 0xdc, 0x75, 0x4f, + 0xed, 0x3e, 0x8c, 0x7f, 0xb2, 0x6c, 0x47, 0x9e, + 0x6c, 0x5a, 0x32, 0x14, 0x59, 0x4d, 0x9f, 0x0d, + 0xb3, 0xf9, 0x4e, 0xc3, 0xc7, 0xec, 0xb4, 0xcf, + 0xfd, 0xc6, 0xd9, 0x47, 0x06, 0x60, 0x37, 0x11, + 0xac, 0x58, 0xbb, 0x97, 0xb5, 0x76, 0x18, 0x51, + 0x1c, 0x99, 0xbe, 0x93, 0x3e, 0xe5, 0xd6, 0xb5, + 0xd2, 0x1b, 0x16, 0xb8, 0xcc, 0x65, 0xb5, 0xe6, + 0x32, 0x2e, 0x9f, 0x64, 0x75, 0xd1, 0xc7, 0x62, + 0x3c, 0x0b, 0x60, 0x2f, 0x1d, 0x97, 0x11, 0xe2, + 0x22, 0xcb, 0xc1, 0x91, 0xd8, 0x9d, 0x28, 0xf2, + 0x46, 0x48, 0xf3, 0x07, 0x9b, 0x98, 0x1f, 0x21, + 0x05, 0x89, 0x3b, 0x09, 0xb5, 0x69, 0x11, 0xc9, + 0x7b, 0x8c, 0xce, 0x49, 0x03, 0xf0, 0xc8, 0x21, + 0xb2, 0x8e, 0xfb, 0x88, 0x1f, 0x3c, 0x36, 0xd1, + 0x8c, 0xc2, 0xec, 0x1b, 0x3c, 0x1b, 0x18, 0xf1, + 0x3e, 0x2d, 0xc6, 0x6c, 0xd0, 0x5a, 0xc7, 0x0c, + 0x54, 0xcd, 0x73, 0x6b, 0x14, 0x9e, 0xd4, 0x4f, + 0xb3, 0xe1, 0xd6, 0x1f, 0xb4, 0xfe, 0x37, 0x47, + 0x7e, 0xb8, 0xbf, 0x71, 0x79, 0x69, 0x10, 0xa6, + 0xef, 0x07, 0x5b, 0xc1, 0xd6, 0xf0, 0x75, 0xbc, + 0x1d, 0x6f, 0x07, 0x5b, 0xc1, 0xd6, 0xf0, 0x75, + 0xbc, 0x1d, 0x6f, 0x07, 0x5b, 0xc1, 0xd6, 0xf0, + 0x75, 0xbc, 0x1d, 0x6f, 0x07, 0x5b, 0xc1, 0xd6, + 0xf0, 0x75, 0xbc, 0x1d, 0x6f, 0x07, 0x5b, 0xc1, + 0xd6, 0xf0, 0x75, 0xbc, 0x1d, 0x6f, 0x07, 0x47, + 0xbb, 0xd5, 0x22, 0x6b, 0xf1, 0xdb, 0xd5, 0x56, + 0xe5, 0x6a, 0x6b, 0x56, 0xa6, 0xb5, 0x6a, 0x6b, + 0x56, 0xa6, 0xb5, 0x6a, 0x6b, 0x56, 0xa6, 0xb5, + 0x6a, 0x6b, 0x56, 0xa6, 0xb5, 0x6a, 0x6b, 0x56, + 0xa6, 0xb5, 0x6a, 0x6b, 0x56, 0xa6, 0xb5, 0x6a, + 0x6b, 0x56, 0xa6, 0xb5, 0x6a, 0x6b, 0x56, 0xa6, + 0xb5, 0x6a, 0x6b, 0x56, 0xa6, 0xb5, 0x6a, 0x6b, + 0x53, 0x6b, 0x2b, 0x63, 0xcc, 0xb2, 0xe6, 0x5f, + 0x84, 0x9e, 0xd8, 0x5f, 0xb3, 0xe1, 0xd6, 0x1f, + 0xb4, 0xfe, 0x37, 0x47, 0xfe, 0xb8, 0xbf, 0x71, + 0xd5, 0x3f, 0xb4, 0xfa, 0x29, 0xd9, 0x87, 0x99, + 0x69, 0x97, 0x48, 0x8b, 0x6f, 0x14, 0x50, 0xa5, + 0x7b, 0x05, 0xaa, 0xc6, 0x63, 0xb9, 0x64, 0xf3, + 0x48, 0x73, 0x48, 0x9d, 0xc7, 0x9b, 0x24, 0xfc, + 0x53, 0x72, 0x56, 0x0b, 0x24, 0xe9, 0x6b, 0x65, + 0x60, 0xec, 0x66, 0x48, 0xc7, 0x6a, 0x83, 0xe9, + 0x33, 0xee, 0xfe, 0x4c, 0x9e, 0xd8, 0x5f, 0xb7, + 0xe1, 0xd6, 0x1f, 0xb4, 0xfe, 0x37, 0x47, 0xfe, + 0xb8, 0xbf, 0x71, 0xd5, 0x3f, 0xb4, 0xfa, 0x04, + 0x23, 0x8b, 0x39, 0x65, 0x36, 0x7c, 0x36, 0xcf, + 0xe5, 0x3b, 0x0f, 0x1f, 0xb3, 0x01, 0xfe, 0x8b, + 0x06, 0x96, 0x2c, 0x33, 0x34, 0xe1, 0x23, 0x9d, + 0xee, 0xf5, 0xbd, 0xd6, 0x5e, 0xb3, 0x1b, 0x63, + 0x13, 0x9a, 0xdb, 0x29, 0x30, 0x8b, 0xb1, 0xe5, + 0x37, 0xe9, 0x33, 0xee, 0xfe, 0x4c, 0x9e, 0xd8, + 0x5f, 0xb7, 0xe1, 0xd4, 0xd5, 0x25, 0x98, 0x7f, + 0x8f, 0x58, 0xaf, 0x1e, 0xb1, 0x5e, 0x3d, 0x62, + 0xbc, 0x7a, 0xc5, 0x78, 0xf5, 0x8a, 0xf1, 0xeb, + 0x15, 0xe3, 0xd6, 0x2b, 0xc7, 0xac, 0x57, 0x8f, + 0x58, 0xaf, 0x1e, 0xb1, 0x5e, 0x3d, 0x62, 0xbc, + 0x7a, 0xc5, 0x78, 0xf5, 0x8a, 0xf1, 0xeb, 0x15, + 0xe3, 0xd6, 0x2b, 0xc7, 0xac, 0x57, 0x8f, 0x58, + 0xaf, 0x1e, 0xb1, 0x5e, 0x3d, 0x62, 0xbc, 0x7a, + 0xc5, 0x78, 0xf5, 0x8a, 0xf1, 0xeb, 0x15, 0xd3, + 0x40, 0xce, 0x08, 0x05, 0x7b, 0x8b, 0xcb, 0xc2, + 0x41, 0x37, 0xca, 0x4d, 0x5e, 0x52, 0x6a, 0xf2, + 0x93, 0x57, 0x94, 0x9a, 0xbc, 0xa4, 0xd5, 0xe5, + 0x26, 0xaf, 0x29, 0x35, 0x79, 0x49, 0xa8, 0x7b, + 0x7b, 0x42, 0xa2, 0x6d, 0xc5, 0xb3, 0x88, 0x7d, + 0xcd, 0xa4, 0x73, 0xc7, 0x77, 0x69, 0x29, 0x7e, + 0x52, 0x6a, 0xf2, 0x93, 0x57, 0x94, 0x9a, 0xbc, + 0xa4, 0xd5, 0xe5, 0x26, 0xaf, 0x29, 0x35, 0x79, + 0x49, 0xab, 0xca, 0x4d, 0x5e, 0x52, 0x6a, 0x3d, + 0xd9, 0x7c, 0x9f, 0xc9, 0x7f, 0xb7, 0x17, 0xed, + 0xf8, 0x7f, 0x50, 0x0b, 0x9e, 0x1e, 0xa1, 0xd8, + 0x14, 0xb6, 0x05, 0x2d, 0x81, 0x4b, 0x60, 0x52, + 0xc8, 0x04, 0xc7, 0x1c, 0x01, 0x97, 0x28, 0x92, + 0xc3, 0x65, 0x04, 0x72, 0x3c, 0xd8, 0x82, 0xd8, + 0x14, 0xb6, 0x05, 0x2d, 0x81, 0x4b, 0x60, 0x52, + 0x14, 0xb9, 0xf3, 0xd0, 0xdb, 0x02, 0x96, 0xc0, + 0xa4, 0x1c, 0x76, 0x06, 0x85, 0x1c, 0x76, 0x12, + 0x55, 0x91, 0x52, 0x7c, 0x32, 0x4e, 0xf3, 0x47, + 0x18, 0xe7, 0x9b, 0x5e, 0x46, 0xc0, 0xa5, 0xb0, + 0x29, 0x7f, 0x4e, 0xe7, 0x92, 0x7a, 0xb2, 0xbd, + 0xc7, 0x54, 0xfe, 0xd3, 0xfc, 0x03, 0xc7, 0x04, + 0xb5, 0x36, 0x19, 0xff, 0x00, 0xd4, 0xaf, 0xfc, + 0x21, 0xff, 0x00, 0xc1, 0xbf, 0xe1, 0x33, 0xee, + 0xfe, 0x4b, 0xfd, 0xb8, 0xdf, 0x6f, 0xc3, 0xfa, + 0x89, 0xff, 0x00, 0xf4, 0x7f, 0x45, 0xb4, 0x95, + 0xcd, 0xc4, 0xb2, 0x03, 0x1d, 0x2b, 0x08, 0x96, + 0xe0, 0x0b, 0x28, 0xdc, 0x3d, 0x17, 0xd0, 0x27, + 0xff, 0x00, 0xc1, 0x7c, 0x3a, 0x68, 0x86, 0x8c, + 0x25, 0x84, 0x39, 0x02, 0x96, 0xee, 0xc4, 0x4a, + 0xfb, 0xc3, 0x07, 0x94, 0xaa, 0x5e, 0xa6, 0xfd, + 0xcf, 0xc3, 0xfa, 0x6d, 0xfa, 0xa2, 0xbf, 0x3f, + 0x50, 0x55, 0x16, 0x59, 0xfa, 0x0b, 0x05, 0xa0, + 0xb0, 0x5a, 0x0b, 0x05, 0xa0, 0xb0, 0x5a, 0x0b, + 0x05, 0xa0, 0xb0, 0x5a, 0x0b, 0x05, 0xa0, 0xb0, + 0x5a, 0x6b, 0x3c, 0xc2, 0xd0, 0x6e, 0x59, 0x2b, + 0xeb, 0xee, 0x24, 0x9d, 0x95, 0xd6, 0xf1, 0xad, + 0x05, 0x82, 0xd0, 0x58, 0x2d, 0x05, 0x82, 0xd0, + 0x58, 0x2d, 0x05, 0x82, 0xd0, 0x58, 0x2d, 0x05, + 0x82, 0xd0, 0x58, 0x2d, 0x05, 0x82, 0x39, 0xb9, + 0x63, 0xd3, 0x23, 0x74, 0x99, 0xe1, 0x4e, 0xb8, + 0x53, 0xae, 0x14, 0xeb, 0x85, 0x3a, 0xe1, 0x4e, + 0xb8, 0x53, 0xae, 0x14, 0xeb, 0x85, 0x3a, 0xe1, + 0x4e, 0xb8, 0x53, 0xae, 0x14, 0xeb, 0x85, 0x3a, + 0xe1, 0x4e, 0xb8, 0x53, 0xae, 0x14, 0xeb, 0x85, + 0x3a, 0xe1, 0x4e, 0xb8, 0x53, 0xae, 0x14, 0xeb, + 0x85, 0x3a, 0xe1, 0x4e, 0x9c, 0xcc, 0xb3, 0x29, + 0xfe, 0xdc, 0x6f, 0xb7, 0xe1, 0xd4, 0xbd, 0x19, + 0x25, 0xf5, 0x9f, 0xf6, 0xca, 0x75, 0xfd, 0xb2, + 0x9d, 0x7f, 0x6c, 0xa7, 0x5f, 0xdb, 0x29, 0xd4, + 0x9f, 0xd3, 0x72, 0xe5, 0x4e, 0xfe, 0x9b, 0x96, + 0xf6, 0x0f, 0xfd, 0x39, 0x34, 0x79, 0x67, 0xfe, + 0x9a, 0x9e, 0x4c, 0x9f, 0xda, 0xd2, 0x97, 0xf6, + 0xb4, 0xa5, 0xfd, 0xad, 0x29, 0x7f, 0x6b, 0x4a, + 0x50, 0xf4, 0x24, 0xf1, 0xf4, 0xef, 0xf6, 0xb4, + 0xa5, 0xfd, 0xad, 0x29, 0x7f, 0x6d, 0x8b, 0x63, + 0x5f, 0xfd, 0x3c, 0x36, 0x45, 0x2f, 0xf4, 0xdc, + 0xb9, 0xe4, 0x1b, 0xa0, 0x6c, 0x03, 0x5f, 0xdb, + 0x32, 0x32, 0xbf, 0xb6, 0x53, 0xaf, 0xed, 0x94, + 0xeb, 0xa6, 0x7a, 0x7d, 0xdd, 0x3a, 0x11, 0x5f, + 0x9f, 0xa9, 0x27, 0x92, 0x32, 0xf9, 0x73, 0x2e, + 0x5c, 0xcb, 0x97, 0x32, 0xe5, 0xcc, 0xb9, 0x73, + 0x21, 0xdc, 0x51, 0x52, 0xbc, 0x7b, 0x08, 0xdf, + 0x1b, 0x0e, 0x94, 0xb8, 0xb2, 0x5c, 0xf1, 0xb4, + 0x82, 0x1e, 0xee, 0x3d, 0x87, 0x6d, 0xd1, 0x1c, + 0xd1, 0xf9, 0x73, 0x2c, 0xca, 0x4e, 0x22, 0x92, + 0x52, 0x62, 0xc7, 0x2e, 0x65, 0xcb, 0x99, 0x72, + 0xe6, 0x5c, 0xb9, 0x97, 0x2e, 0x65, 0xcb, 0x99, + 0x19, 0xff, 0x00, 0x32, 0x31, 0xbe, 0xb7, 0x99, + 0x63, 0xd8, 0x93, 0x60, 0xf5, 0xb0, 0x7a, 0xd8, + 0x3d, 0x6c, 0x1e, 0xb6, 0x0f, 0x5b, 0x07, 0xad, + 0x83, 0xd6, 0xc1, 0xeb, 0x60, 0xf5, 0xb0, 0x7a, + 0xd8, 0x3d, 0x6c, 0x1e, 0xb6, 0x0f, 0x5b, 0x07, + 0xad, 0x83, 0xd6, 0xc1, 0xeb, 0x60, 0xf5, 0xb0, + 0x7a, 0xd8, 0x3d, 0x6c, 0x1e, 0xb6, 0x0f, 0x41, + 0x9d, 0xcd, 0x7f, 0xfa, 0x4f, 0xf6, 0xe3, 0x7d, + 0xbf, 0x0e, 0xb7, 0xbe, 0xb0, 0xac, 0xb7, 0xf2, + 0xfb, 0x95, 0x2d, 0xb7, 0x52, 0xc1, 0x63, 0x3f, + 0x52, 0x5f, 0x0a, 0xa6, 0xba, 0xea, 0x38, 0x30, + 0xc3, 0xba, 0xa6, 0x51, 0xfc, 0xbe, 0xe5, 0x74, + 0xa7, 0x52, 0xd8, 0x9c, 0x66, 0xc0, 0xa5, 0xb0, + 0x29, 0x4b, 0x0c, 0x42, 0xb2, 0xb2, 0x36, 0x58, + 0x36, 0x11, 0x25, 0x30, 0x68, 0xe0, 0x2d, 0xf4, + 0x7b, 0x02, 0x96, 0xc0, 0xa5, 0xd4, 0x77, 0x76, + 0xd1, 0x5a, 0x4d, 0x65, 0xd4, 0xd0, 0x26, 0xde, + 0xf5, 0x13, 0xf2, 0x25, 0x9f, 0x52, 0x9a, 0xc3, + 0x6e, 0xfa, 0x8a, 0xb9, 0x0a, 0x6f, 0x54, 0x1b, + 0x83, 0x7a, 0x82, 0xfa, 0xbe, 0x4e, 0x83, 0xb7, + 0x32, 0xd6, 0x12, 0x7f, 0x3f, 0x53, 0xfb, 0xcf, + 0xa6, 0x9f, 0xdf, 0x50, 0xfc, 0xfe, 0x41, 0xff, + 0x00, 0xc1, 0xb5, 0xac, 0x64, 0x23, 0x57, 0xc5, + 0x98, 0x2c, 0x6b, 0x3f, 0x2f, 0xab, 0x23, 0x08, + 0x26, 0x70, 0x38, 0x30, 0x49, 0x86, 0x44, 0x4b, + 0x71, 0x8a, 0xff, 0x00, 0xa8, 0xcf, 0xc8, 0x27, + 0xba, 0x3c, 0xaf, 0x91, 0xdc, 0xb5, 0xcb, 0x5d, + 0x3d, 0xda, 0x30, 0xfb, 0x12, 0x71, 0x88, 0xb5, + 0x79, 0x6d, 0x8e, 0x2b, 0xd8, 0xd8, 0x6c, 0x44, + 0x86, 0x31, 0xcb, 0xaf, 0xc0, 0xf0, 0xbe, 0x83, + 0xfe, 0xeb, 0x01, 0xb0, 0x18, 0xcc, 0x8e, 0x29, + 0xba, 0x60, 0xa8, 0xa2, 0x83, 0xa7, 0x34, 0xb9, + 0xf5, 0x06, 0x17, 0xcc, 0x7e, 0xa1, 0x1f, 0xe5, + 0x25, 0x78, 0xfc, 0x13, 0x44, 0x03, 0x13, 0x8f, + 0x15, 0x7f, 0xa6, 0x32, 0xdf, 0xc5, 0x23, 0x96, + 0xb9, 0x6a, 0x9c, 0x9f, 0x55, 0xac, 0xbf, 0x95, + 0xff, 0x00, 0x80, 0x6f, 0xf5, 0xf0, 0xfe, 0xa3, + 0x7e, 0xf5, 0x7c, 0xf6, 0x9d, 0x45, 0x52, 0x23, + 0x6e, 0x81, 0x8c, 0xbe, 0x78, 0x57, 0x98, 0x2b, + 0xca, 0xdd, 0xf3, 0xf5, 0x74, 0x4f, 0xed, 0xbe, + 0x05, 0x45, 0x6a, 0xe8, 0x68, 0xd8, 0xe8, 0x8a, + 0xe9, 0xe2, 0xb0, 0x10, 0x56, 0x91, 0xe0, 0x3a, + 0xcf, 0x85, 0xe9, 0x12, 0x89, 0xd4, 0xd3, 0xc2, + 0x2c, 0xb5, 0xbf, 0xf8, 0xc6, 0x56, 0x7f, 0xe8, + 0x84, 0x66, 0xb9, 0xfd, 0x34, 0x2b, 0xb1, 0xe6, + 0xcb, 0xfa, 0x67, 0xf8, 0x49, 0xfc, 0xf6, 0xd5, + 0xaf, 0xb4, 0x66, 0x82, 0xc1, 0x68, 0x2c, 0x16, + 0x82, 0xc1, 0x68, 0x2c, 0x16, 0x82, 0xc1, 0x0f, + 0x51, 0x68, 0x2c, 0xb2, 0x07, 0x73, 0x23, 0xd9, + 0x5d, 0x6f, 0x1a, 0x92, 0x9a, 0xce, 0x65, 0x15, + 0x75, 0xa3, 0x4d, 0xe0, 0xdb, 0x45, 0x1c, 0x82, + 0xdc, 0xcb, 0x10, 0xd5, 0xb6, 0xc2, 0x2d, 0x65, + 0xb2, 0x22, 0xaa, 0xc2, 0x58, 0x74, 0x16, 0x0b, + 0x41, 0x60, 0xb4, 0x16, 0x0b, 0x41, 0x60, 0xb4, + 0x16, 0x08, 0x5e, 0x9c, 0x29, 0xf2, 0x13, 0x2f, + 0x7e, 0x71, 0x3d, 0xd1, 0xc2, 0xfc, 0xcd, 0xe2, + 0x2e, 0x22, 0xae, 0x00, 0x79, 0x66, 0x27, 0xfe, + 0x8a, 0x82, 0x1f, 0x8c, 0xd0, 0x80, 0xec, 0x30, + 0x69, 0x9d, 0x0e, 0x31, 0x6d, 0x2c, 0x8f, 0x89, + 0xf2, 0x45, 0xbc, 0x21, 0x8d, 0x75, 0x08, 0x32, + 0x47, 0x10, 0xa6, 0xce, 0xc9, 0x46, 0xff, 0x00, + 0xd6, 0xdb, 0xf6, 0xe1, 0x3c, 0x0b, 0x1c, 0x41, + 0x61, 0x1b, 0xa4, 0x83, 0x62, 0x11, 0x0e, 0x75, + 0x60, 0x52, 0x4d, 0xeb, 0xb8, 0x82, 0x09, 0x2c, + 0x38, 0x8b, 0x88, 0xaa, 0x06, 0xf4, 0xda, 0x4b, + 0xf9, 0x5f, 0xf8, 0x07, 0xff, 0x00, 0x5f, 0x0e, + 0xa8, 0xe9, 0x4f, 0x21, 0x7f, 0xf6, 0xda, 0xc5, + 0x43, 0xd1, 0xf7, 0xb0, 0x58, 0x8d, 0xd0, 0xb7, + 0x21, 0xc7, 0x1f, 0x40, 0x5b, 0x45, 0x03, 0x3a, + 0x5b, 0xa8, 0x63, 0x1f, 0xfb, 0x6d, 0x62, 0xba, + 0x73, 0xa2, 0x4b, 0xa9, 0x3b, 0xfb, 0x67, 0x32, + 0xfe, 0xda, 0x4c, 0xbf, 0xb6, 0x93, 0x2f, 0xed, + 0xa4, 0xcb, 0xfb, 0x69, 0x32, 0xfe, 0xda, 0x4c, + 0xbf, 0xb6, 0x93, 0x2f, 0xed, 0x9c, 0xca, 0xeb, + 0xa4, 0xac, 0x0a, 0xb5, 0x33, 0xa3, 0xaf, 0x0f, + 0x8a, 0x4e, 0x89, 0xba, 0x95, 0x8c, 0xe9, 0x2b, + 0xe6, 0x1d, 0x3f, 0x47, 0xde, 0x93, 0x34, 0x1d, + 0x05, 0x6e, 0x31, 0x7f, 0xdb, 0x6b, 0x15, 0xd3, + 0xd4, 0x4c, 0xe9, 0xea, 0xf2, 0x7f, 0x3b, 0x02, + 0x9a, 0x4c, 0x70, 0x0a, 0x5c, 0x02, 0x97, 0x00, + 0xa5, 0xc0, 0x29, 0x70, 0x0a, 0x5c, 0x02, 0x97, + 0x00, 0xa5, 0xc0, 0x29, 0x70, 0x0a, 0x5c, 0x02, + 0x97, 0x00, 0xa5, 0xc0, 0x29, 0x70, 0x0a, 0x5c, + 0x02, 0x97, 0x00, 0xa5, 0xc0, 0x29, 0x70, 0x0a, + 0x5c, 0x02, 0x97, 0x00, 0xa5, 0xc0, 0x29, 0x66, + 0xbc, 0x9c, 0xa7, 0xc6, 0xe8, 0xdd, 0x1b, 0xfb, + 0x6f, 0x36, 0xb7, 0xd5, 0x27, 0x0b, 0x2b, 0x85, + 0x95, 0xc2, 0xca, 0xe1, 0x65, 0x15, 0xdd, 0x2d, + 0x70, 0xb2, 0xb8, 0x59, 0x5c, 0x2c, 0xae, 0x16, + 0x57, 0x0b, 0x2b, 0x85, 0x95, 0xc2, 0xca, 0xe1, + 0x65, 0x70, 0xb2, 0xb8, 0x59, 0x5c, 0x2c, 0xae, + 0x16, 0x57, 0x0b, 0x2b, 0x85, 0x95, 0xc2, 0xca, + 0xe0, 0xe5, 0x06, 0x0f, 0x19, 0xd9, 0xcf, 0xab, + 0x2f, 0xfc, 0x03, 0xff, 0x00, 0xaf, 0xe5, 0x67, + 0xd3, 0x1c, 0xb2, 0xd8, 0xba, 0x67, 0xf2, 0xd7, + 0x2d, 0x72, 0xd7, 0x2d, 0x72, 0xd7, 0x2d, 0x72, + 0xd7, 0x2d, 0x72, 0xd7, 0x2d, 0x72, 0xd7, 0x2d, + 0x72, 0xd7, 0x2d, 0x72, 0xd7, 0x2d, 0x72, 0xd7, + 0x2d, 0x72, 0xd7, 0x2d, 0x72, 0xd0, 0x65, 0xf3, + 0xa2, 0x57, 0xe5, 0x4c, 0x2a, 0xc5, 0xf5, 0x82, + 0x96, 0xde, 0xd4, 0x7c, 0xef, 0xec, 0x13, 0x6d, + 0xad, 0x9d, 0x16, 0x6d, 0xed, 0x71, 0x16, 0xf2, + 0xcb, 0xd1, 0xbc, 0xb2, 0xf4, 0x41, 0x6b, 0x6e, + 0x4a, 0x96, 0xc6, 0xe6, 0x05, 0xbf, 0xb0, 0x5b, + 0xfb, 0x05, 0x8b, 0xeb, 0x1c, 0xe5, 0xa7, 0x5d, + 0xbd, 0x9b, 0xab, 0x34, 0xdb, 0x6b, 0x67, 0xbd, + 0xb7, 0x16, 0xaf, 0x97, 0x79, 0x65, 0xe9, 0x96, + 0xd6, 0xd8, 0x74, 0xfb, 0x5b, 0x78, 0xe3, 0x96, + 0xc2, 0xea, 0x06, 0x6f, 0xac, 0x32, 0x81, 0x99, + 0xf3, 0xd2, 0x27, 0x7e, 0x11, 0xff, 0x00, 0xd7, + 0xf2, 0x8f, 0x77, 0xa4, 0x3e, 0x56, 0x55, 0x04, + 0xf9, 0x90, 0x19, 0x5a, 0xf3, 0xad, 0x60, 0x03, + 0x0f, 0x0e, 0x50, 0x81, 0x18, 0xa2, 0x43, 0x88, + 0xeb, 0xd6, 0x54, 0xc7, 0x21, 0x79, 0x04, 0x1c, + 0x07, 0x73, 0x0e, 0xb0, 0xeb, 0xf8, 0x79, 0xa4, + 0x75, 0x04, 0xb1, 0x94, 0x64, 0xd5, 0xd0, 0xfa, + 0x67, 0xad, 0x17, 0x0a, 0xbe, 0xbc, 0x63, 0xa3, + 0x86, 0xb0, 0x5c, 0x3a, 0x2a, 0xc8, 0xfd, 0x3a, + 0x88, 0xe2, 0x93, 0x15, 0x21, 0x38, 0x81, 0x6a, + 0x19, 0xd8, 0xc5, 0x74, 0x30, 0x08, 0x18, 0x23, + 0x0b, 0x6b, 0x29, 0x4d, 0xee, 0xf4, 0xd4, 0xdd, + 0xc2, 0xd7, 0x53, 0xfd, 0xb5, 0x9e, 0xad, 0x8b, + 0x9b, 0x1c, 0xb1, 0x59, 0x8d, 0x18, 0x92, 0x55, + 0xca, 0xe7, 0xe5, 0x93, 0x4b, 0xc3, 0x8e, 0x2c, + 0x03, 0x5e, 0x20, 0xb0, 0x8d, 0x30, 0x4f, 0xce, + 0x0d, 0x73, 0x7b, 0xd2, 0x95, 0x10, 0x70, 0x67, + 0x55, 0x0c, 0x2f, 0x64, 0x10, 0x0d, 0x2e, 0x31, + 0xff, 0x00, 0xab, 0x04, 0x8d, 0x35, 0xd1, 0x7f, + 0xe2, 0x50, 0x78, 0xf9, 0x5a, 0x57, 0xff, 0x00, + 0xd4, 0xda, 0xb9, 0xe5, 0x20, 0xc7, 0x1e, 0x53, + 0xde, 0x7b, 0xd8, 0x29, 0xca, 0xb3, 0xf4, 0x29, + 0xdf, 0x84, 0x7f, 0xf5, 0xfc, 0xa3, 0x1b, 0xeb, + 0x17, 0x88, 0x83, 0x10, 0x19, 0x46, 0x3c, 0x86, + 0xe7, 0x1d, 0x41, 0x88, 0xdc, 0x56, 0x4d, 0x8a, + 0x11, 0xf0, 0x50, 0xf0, 0xdb, 0x43, 0x3c, 0x50, + 0x58, 0x65, 0xd1, 0xea, 0xae, 0xfb, 0x66, 0x99, + 0xb4, 0x85, 0x86, 0x8c, 0x58, 0xf1, 0x4d, 0x92, + 0xa0, 0x78, 0xf8, 0x9e, 0x1e, 0x6c, 0x16, 0x63, + 0xc5, 0x2b, 0x62, 0x18, 0x83, 0x5a, 0x4b, 0x3d, + 0x3d, 0xe8, 0xbb, 0x51, 0x91, 0x03, 0x49, 0xc1, + 0x91, 0x4e, 0x3c, 0x92, 0x47, 0x25, 0x53, 0x0c, + 0x1f, 0x07, 0xca, 0x13, 0x5b, 0x27, 0x4f, 0xc1, + 0xdb, 0x25, 0x5d, 0x55, 0xca, 0x7c, 0x70, 0xd0, + 0x98, 0x3c, 0xb3, 0x56, 0x1b, 0x23, 0x73, 0xd3, + 0xc5, 0xe7, 0x11, 0x80, 0x74, 0x51, 0x4d, 0x5c, + 0x49, 0x11, 0x8d, 0x54, 0x58, 0xd1, 0x30, 0x3b, + 0x06, 0x48, 0xca, 0x12, 0xa3, 0x9b, 0x50, 0x6e, + 0x33, 0x35, 0x59, 0xb3, 0xae, 0x11, 0xae, 0x7e, + 0xac, 0xdf, 0x44, 0x94, 0x85, 0xcb, 0x10, 0xf5, + 0x26, 0x8d, 0x0e, 0x2b, 0xcf, 0xc3, 0x63, 0xaf, + 0x3e, 0x26, 0xea, 0x4e, 0xc4, 0xd2, 0xd7, 0x9a, + 0xf6, 0x4c, 0x09, 0xd2, 0xb0, 0x9a, 0x42, 0xcb, + 0x23, 0xc7, 0x09, 0x43, 0x88, 0xf0, 0xa9, 0xd3, + 0xbf, 0x0c, 0x1f, 0xeb, 0xf9, 0x5e, 0xb6, 0xe2, + 0x77, 0xd4, 0x48, 0xdc, 0xea, 0x66, 0x50, 0x80, + 0x48, 0xf2, 0x49, 0x5a, 0x44, 0xaf, 0xd4, 0xcc, + 0xb5, 0x33, 0x2d, 0x4c, 0xcb, 0x53, 0x32, 0xd4, + 0xcc, 0xb5, 0x33, 0x2d, 0x4c, 0xcb, 0x53, 0x32, + 0xd4, 0xcc, 0xb5, 0x33, 0x28, 0xe2, 0x3e, 0x28, + 0xb5, 0x33, 0x2d, 0x4c, 0xcb, 0x53, 0x32, 0xd4, + 0xcc, 0xb5, 0x33, 0x2d, 0x4c, 0xcb, 0x53, 0x32, + 0x60, 0xf8, 0xae, 0x89, 0x75, 0x47, 0xdb, 0xfe, + 0x17, 0x82, 0x2c, 0x18, 0x8c, 0x01, 0xfb, 0x06, + 0x02, 0xe0, 0xb1, 0xfe, 0x1a, 0xcf, 0xd0, 0xa7, + 0x7e, 0x18, 0x3f, 0x96, 0x47, 0xe6, 0xbf, 0x95, + 0xf1, 0x05, 0xcb, 0x99, 0x72, 0xe6, 0x5c, 0xb9, + 0x97, 0x2e, 0x65, 0xcb, 0x99, 0x30, 0x89, 0xde, + 0xe3, 0xbb, 0xa1, 0xcb, 0x00, 0xb3, 0xce, 0x54, + 0x31, 0x4e, 0xf6, 0x63, 0x26, 0x65, 0xb2, 0xca, + 0x54, 0x0f, 0x8a, 0x09, 0x9e, 0xde, 0xd3, 0xa4, + 0x4e, 0x80, 0x9c, 0x0a, 0x7b, 0x26, 0x0d, 0xdc, + 0xb9, 0x97, 0x2e, 0x65, 0xcb, 0x99, 0x72, 0xe6, + 0x5c, 0xb9, 0x97, 0x2a, 0x6c, 0xa8, 0xff, 0x00, + 0x5c, 0xba, 0x9f, 0xed, 0xff, 0x00, 0x09, 0x11, + 0x1c, 0xf8, 0xde, 0x53, 0x45, 0x06, 0xc2, 0x47, + 0x4a, 0x27, 0xf8, 0x6b, 0x3f, 0x42, 0x9d, 0xf8, + 0xa0, 0xfe, 0x59, 0x1f, 0x9b, 0xa8, 0xfd, 0x9f, + 0xd2, 0xc6, 0x3a, 0x47, 0xd8, 0x8b, 0x91, 0x9f, + 0x14, 0x8d, 0xc5, 0x44, 0x99, 0xc3, 0x6d, 0x05, + 0x93, 0xe4, 0xeb, 0x5f, 0xfc, 0x71, 0x9c, 0x4f, + 0xce, 0xcf, 0xa6, 0x02, 0xe0, 0xf9, 0x30, 0x97, + 0xe7, 0xe7, 0x53, 0xf5, 0x47, 0xfa, 0xe5, 0x67, + 0x4d, 0xb3, 0x87, 0xc4, 0xd7, 0x89, 0xaf, 0x13, + 0x5e, 0x26, 0xbc, 0x4d, 0x78, 0x9a, 0xf1, 0x35, + 0xe2, 0x6b, 0xc4, 0xd7, 0x89, 0xaf, 0x13, 0x5e, + 0x26, 0xbc, 0x4d, 0x78, 0x9a, 0xf1, 0x35, 0xe2, + 0x6b, 0xc4, 0xd7, 0x89, 0xaf, 0x13, 0x5e, 0x26, + 0xbc, 0x4d, 0x34, 0x2d, 0x7d, 0x5a, 0x77, 0xe2, + 0x87, 0xf9, 0x73, 0xfe, 0x69, 0xa1, 0x88, 0xe1, + 0x3c, 0x67, 0x2b, 0xc6, 0x5c, 0xbc, 0x65, 0xcb, + 0xc6, 0x5c, 0xbc, 0x65, 0xcb, 0xc6, 0x5c, 0xbc, + 0x65, 0xcb, 0xc6, 0x5c, 0xbc, 0x65, 0xcb, 0xc6, + 0x5c, 0xbc, 0x65, 0xca, 0x4a, 0x09, 0x25, 0x8b, + 0xc6, 0x5c, 0xbc, 0x65, 0xca, 0x5a, 0x09, 0x25, + 0x67, 0x8c, 0xb9, 0x78, 0xcb, 0x97, 0x8c, 0xb9, + 0x78, 0xcb, 0x97, 0x8c, 0xb9, 0x47, 0xd3, 0x6c, + 0x6b, 0xa6, 0x93, 0x0f, 0xca, 0xea, 0x7f, 0xb7, + 0xfc, 0x02, 0xc3, 0xc9, 0x26, 0x11, 0x1c, 0x41, + 0x53, 0x89, 0x03, 0x61, 0x9e, 0xa6, 0x26, 0xcd, + 0xfe, 0x1a, 0xcf, 0xd0, 0xa7, 0x7e, 0x28, 0x7f, + 0x96, 0xe8, 0xf3, 0x29, 0x2e, 0x24, 0x61, 0xf3, + 0xb1, 0x89, 0x6c, 0x62, 0x5b, 0x18, 0x96, 0xc6, + 0x25, 0xb1, 0x89, 0x6c, 0x62, 0x5b, 0x18, 0x96, + 0xc6, 0x25, 0xb1, 0x89, 0x6c, 0x62, 0x5b, 0x18, + 0x96, 0xc6, 0x25, 0xb1, 0x89, 0x6c, 0x62, 0x5b, + 0x18, 0x96, 0xc6, 0x25, 0xb1, 0x89, 0x6c, 0x62, + 0x5b, 0x18, 0x96, 0xc6, 0x25, 0xb1, 0x89, 0x3d, + 0x91, 0xcd, 0x0a, 0xea, 0x7f, 0xb7, 0xfc, 0x15, + 0x7f, 0xb3, 0x80, 0x39, 0x83, 0x36, 0x7a, 0xc9, + 0x85, 0x86, 0x71, 0x25, 0x1a, 0xeb, 0xfc, 0x35, + 0x9f, 0xa1, 0x4e, 0xfc, 0x70, 0xff, 0x00, 0x2d, + 0xb9, 0xf4, 0xcd, 0xcb, 0x5c, 0xb5, 0xcb, 0x5c, + 0xb5, 0xcb, 0x5c, 0xb5, 0xcb, 0x5c, 0xb5, 0x00, + 0x51, 0x3c, 0x1b, 0x08, 0x64, 0xaf, 0x98, 0x01, + 0xdf, 0x35, 0x84, 0xf9, 0x92, 0x15, 0xff, 0x00, + 0x7f, 0x79, 0x8f, 0x96, 0x46, 0x49, 0x33, 0xe1, + 0x7f, 0x2d, 0x72, 0xd7, 0x2d, 0x72, 0xd7, 0x2d, + 0x72, 0xd7, 0x2d, 0x51, 0x4f, 0xdd, 0x91, 0x59, + 0x84, 0x11, 0x50, 0xe9, 0xea, 0x16, 0x9e, 0xa1, + 0x69, 0xea, 0x16, 0x9e, 0xa1, 0x69, 0xea, 0x16, + 0x9e, 0xa1, 0x69, 0xea, 0x16, 0x9e, 0xa1, 0x69, + 0xea, 0x16, 0x9e, 0xa1, 0x69, 0xea, 0x16, 0x9e, + 0xa1, 0x69, 0xea, 0x16, 0x9e, 0xa1, 0x69, 0xea, + 0x16, 0x9e, 0xa1, 0x69, 0xea, 0x16, 0x9e, 0xa1, + 0x69, 0xea, 0x16, 0x9e, 0xa1, 0x69, 0xea, 0x13, + 0x60, 0x80, 0x6a, 0xb5, 0x9f, 0xc7, 0x0f, 0xf2, + 0xff, 0x00, 0xdb, 0xfb, 0x0e, 0x5d, 0x87, 0x2e, + 0xc3, 0x97, 0x61, 0xcb, 0xb0, 0xe5, 0xd8, 0x72, + 0xec, 0x39, 0x76, 0x1c, 0x8b, 0x1d, 0xef, 0xe9, + 0xb1, 0x20, 0xed, 0x91, 0x5c, 0x43, 0x25, 0x9f, + 0x2e, 0x20, 0x8a, 0xae, 0xcb, 0xb3, 0xd5, 0xd8, + 0xc9, 0x03, 0xd5, 0x75, 0x2c, 0x59, 0x75, 0xdf, + 0x61, 0xcb, 0xb0, 0xe5, 0xd8, 0x72, 0xec, 0x39, + 0x76, 0x1c, 0xbb, 0x0e, 0x5d, 0x87, 0x2e, 0x99, + 0x8f, 0x2c, 0x21, 0x75, 0x3f, 0xdb, 0xf4, 0x80, + 0x2b, 0x4a, 0x7c, 0xb0, 0x45, 0x32, 0x8a, 0xb0, + 0x89, 0x99, 0x0d, 0x53, 0xdc, 0xc8, 0xc0, 0x9e, + 0x48, 0x4e, 0x0b, 0x23, 0x4c, 0x34, 0x40, 0xc8, + 0x1e, 0x40, 0x7c, 0xa9, 0xf5, 0x65, 0x46, 0x9f, + 0x5a, 0x43, 0x25, 0x9a, 0x17, 0x40, 0xff, 0x00, + 0xa6, 0xb3, 0xf4, 0x2b, 0x3f, 0x8e, 0x1f, 0xe5, + 0xc7, 0x8f, 0x51, 0x59, 0x0b, 0xd3, 0x9e, 0x22, + 0xe2, 0x2e, 0x22, 0xe2, 0x2e, 0x22, 0xe2, 0x2e, + 0x22, 0x1c, 0xc2, 0xc5, 0x85, 0xd8, 0x95, 0xf3, + 0xb8, 0xc3, 0x1f, 0x24, 0xf3, 0x12, 0x4c, 0x4d, + 0x34, 0xc6, 0xe2, 0xbd, 0xcd, 0x84, 0x6b, 0x0c, + 0x73, 0x0c, 0xe2, 0x2e, 0x22, 0xe2, 0x2e, 0x22, + 0xe2, 0x2e, 0x22, 0xe2, 0x2a, 0xb1, 0xfb, 0x0d, + 0x5d, 0x51, 0xfe, 0xbe, 0x90, 0x31, 0xf3, 0x99, + 0xe5, 0x7c, 0x89, 0xf5, 0xe3, 0xbc, 0x2b, 0xa0, + 0x64, 0x8e, 0xc3, 0x67, 0x82, 0xf6, 0x78, 0x8c, + 0x78, 0xcf, 0x6e, 0x00, 0xef, 0x33, 0x80, 0x21, + 0xb0, 0xc2, 0x7c, 0x72, 0xb2, 0x02, 0x9d, 0x9f, + 0x9e, 0x7e, 0x9a, 0xcf, 0xd0, 0xa7, 0x7e, 0x38, + 0x7f, 0x97, 0x37, 0xfc, 0x4d, 0x6b, 0x71, 0x18, + 0x84, 0x79, 0x08, 0x8b, 0xc8, 0x44, 0x5e, 0x42, + 0x22, 0xf2, 0x11, 0x17, 0x90, 0x88, 0xbc, 0x84, + 0x45, 0xe4, 0x22, 0x2f, 0x21, 0x11, 0x79, 0x08, + 0x8b, 0xc8, 0x44, 0x5e, 0x42, 0x22, 0xf2, 0x11, + 0x17, 0x90, 0x88, 0xbc, 0x84, 0x45, 0xe4, 0x22, + 0x2f, 0x21, 0x11, 0x79, 0x08, 0x8b, 0xc8, 0x44, + 0x5e, 0x42, 0x22, 0xf2, 0x11, 0x17, 0x91, 0x0b, + 0x84, 0xc3, 0x32, 0x75, 0x5a, 0xba, 0x68, 0x32, + 0xb7, 0x8f, 0x50, 0xb8, 0xf5, 0x0b, 0x8f, 0x50, + 0xb8, 0xf5, 0x0b, 0x8f, 0x50, 0xb8, 0xf5, 0x0a, + 0x0d, 0x60, 0xd2, 0x71, 0xea, 0x17, 0x1e, 0xa1, + 0x71, 0xea, 0x17, 0x1e, 0xa1, 0x71, 0xea, 0x17, + 0x1e, 0xa1, 0x71, 0xea, 0x17, 0x1e, 0xa1, 0x71, + 0xea, 0x17, 0x1e, 0xa1, 0x71, 0xea, 0x17, 0x1e, + 0xa1, 0x71, 0xea, 0x17, 0x1e, 0xa1, 0x0b, 0xc7, + 0xd3, 0x27, 0x7e, 0x28, 0x3f, 0x96, 0x47, 0xe6, + 0xea, 0x7f, 0x79, 0xf4, 0x53, 0x33, 0x2f, 0x74, + 0xe1, 0x38, 0x88, 0xb8, 0x0c, 0xcc, 0xaf, 0xad, + 0xe2, 0x42, 0x38, 0xf1, 0x3e, 0xbd, 0xf5, 0x0d, + 0x79, 0x38, 0xab, 0x6b, 0xd1, 0x43, 0x36, 0x1c, + 0x36, 0x6f, 0x4d, 0x59, 0x6e, 0xc9, 0x4f, 0x9c, + 0x68, 0x4f, 0x3b, 0xba, 0xe2, 0xe2, 0xfa, 0x6b, + 0x7f, 0x46, 0xba, 0x97, 0xee, 0xf8, 0xd5, 0x48, + 0xdc, 0xc8, 0xca, 0xf6, 0xcd, 0x15, 0x63, 0x1b, + 0x2c, 0xf8, 0x01, 0x93, 0x08, 0x4d, 0x73, 0x26, + 0xc1, 0x55, 0xa3, 0xc6, 0x54, 0x60, 0x43, 0x28, + 0xa1, 0x57, 0x47, 0x1c, 0xd9, 0xab, 0xc7, 0xa4, + 0x9a, 0xc6, 0x43, 0x15, 0x59, 0x3f, 0x28, 0xda, + 0x2f, 0x34, 0x39, 0xaa, 0x9a, 0xc6, 0x93, 0x5c, + 0xd8, 0x5b, 0x60, 0x2b, 0x42, 0x2b, 0xe3, 0x4b, + 0xfa, 0x34, 0xef, 0xc5, 0x07, 0xf2, 0xc8, 0xfc, + 0xdd, 0x4d, 0x1b, 0xbb, 0xbf, 0x40, 0x84, 0xe0, + 0x76, 0x8d, 0x6a, 0xd8, 0x96, 0xd1, 0xbc, 0xa7, + 0xd9, 0x41, 0x81, 0x36, 0x39, 0x9c, 0x77, 0x5a, + 0xc5, 0x93, 0x02, 0xb4, 0xc0, 0x91, 0x9a, 0x66, + 0x08, 0x94, 0xc2, 0x47, 0x74, 0x0d, 0xb1, 0x63, + 0x25, 0x6d, 0xc4, 0xd9, 0x8f, 0x06, 0x07, 0x03, + 0xbe, 0x91, 0x62, 0xc8, 0xd5, 0x2b, 0xa9, 0x63, + 0xce, 0x59, 0xf1, 0x16, 0x71, 0x58, 0x13, 0x2c, + 0x1f, 0x0b, 0x44, 0x9f, 0x8c, 0x53, 0x2d, 0xe2, + 0x8c, 0xa7, 0x59, 0x0e, 0xf6, 0xce, 0x78, 0xa4, + 0xc9, 0x83, 0xa2, 0x6a, 0x6d, 0x98, 0xd9, 0x97, + 0x65, 0x16, 0x33, 0x62, 0xc6, 0x42, 0x20, 0x84, + 0x34, 0x75, 0x11, 0xf1, 0xb2, 0xaf, 0x36, 0x2c, + 0xf5, 0x58, 0x5a, 0xe0, 0xb6, 0x9d, 0x3e, 0x09, + 0x37, 0xe3, 0x59, 0x1b, 0xa0, 0xa5, 0x4e, 0xfc, + 0x50, 0x7f, 0xaf, 0xe5, 0x11, 0xf9, 0xb0, 0xfc, + 0x66, 0x2d, 0x6d, 0x6a, 0xd6, 0x56, 0xad, 0x65, + 0x6a, 0xd6, 0x56, 0xad, 0x65, 0x6a, 0xd6, 0x56, + 0xad, 0x65, 0x6a, 0xd6, 0x56, 0xad, 0x65, 0x6a, + 0xd6, 0x56, 0xad, 0x65, 0x6a, 0xd6, 0x56, 0xad, + 0x65, 0x6a, 0xd6, 0x56, 0xad, 0x65, 0x6a, 0xd6, + 0x56, 0xad, 0x65, 0x6a, 0xd6, 0x56, 0xad, 0x65, + 0x6a, 0xd6, 0x56, 0xa8, 0x84, 0x00, 0x77, 0x49, + 0x23, 0xa5, 0x7a, 0x6b, 0xdb, 0x98, 0xb3, 0x4b, + 0x5b, 0x9c, 0xe9, 0x2b, 0x56, 0x92, 0xb5, 0x69, + 0x2b, 0x56, 0x92, 0xb5, 0x69, 0x2b, 0x56, 0x92, + 0xb5, 0x69, 0x2b, 0x56, 0x92, 0xb5, 0x69, 0x2b, + 0x56, 0x92, 0xb5, 0x69, 0x2b, 0x56, 0x92, 0xb5, + 0x69, 0x2b, 0x56, 0x92, 0xb5, 0x69, 0x2b, 0x56, + 0x92, 0xb5, 0x69, 0x2b, 0x56, 0x92, 0xb5, 0x69, + 0x2b, 0x54, 0x75, 0x55, 0xb0, 0xba, 0x59, 0x73, + 0x33, 0xd3, 0xbf, 0x14, 0x1f, 0xeb, 0xe1, 0x21, + 0x78, 0x6a, 0xe6, 0x39, 0x73, 0x1c, 0xb9, 0x8e, + 0x5c, 0xc7, 0x2e, 0x63, 0x97, 0x31, 0xcb, 0x98, + 0xe5, 0xcc, 0x72, 0xe6, 0x39, 0x73, 0x1c, 0xb9, + 0x8e, 0x5c, 0xc7, 0x2e, 0x63, 0x97, 0x31, 0xcb, + 0x98, 0xe5, 0xcc, 0x72, 0xe6, 0x39, 0x73, 0x1c, + 0xb9, 0x8e, 0x5c, 0xc7, 0x2e, 0x63, 0x97, 0x31, + 0xcb, 0x98, 0xe4, 0xf7, 0x7a, 0xdd, 0xff, 0x00, + 0xd0, 0x77, 0xe1, 0x1f, 0xfd, 0x23, 0x24, 0xf9, + 0x2f, 0x4c, 0x43, 0x37, 0x98, 0x32, 0xe6, 0x8a, + 0xb9, 0xa2, 0xae, 0x68, 0xab, 0x9a, 0x2a, 0xe6, + 0x8a, 0xb9, 0xa2, 0xae, 0x68, 0xab, 0x9a, 0x2a, + 0xe6, 0x8a, 0xb9, 0xa2, 0xae, 0x68, 0xab, 0x9a, + 0x2a, 0xe6, 0x8a, 0xb9, 0xa2, 0xae, 0x68, 0xab, + 0x9a, 0x2a, 0xe6, 0x8a, 0xb9, 0xa2, 0xae, 0x68, + 0xab, 0x9a, 0x2a, 0x67, 0x1c, 0xc5, 0xfe, 0x94, + 0x51, 0xe6, 0x69, 0x1c, 0x68, 0xe3, 0xe7, 0x6b, + 0x85, 0xb5, 0xc2, 0xda, 0xe1, 0x6d, 0x70, 0xb6, + 0xb8, 0x5b, 0x5c, 0x2d, 0xae, 0x16, 0xd7, 0x0b, + 0x6b, 0x85, 0xb5, 0xc2, 0xda, 0xe1, 0x6d, 0x70, + 0xb6, 0xb8, 0x5b, 0x5c, 0x2d, 0xae, 0x16, 0xd7, + 0x0b, 0x6b, 0x85, 0xb5, 0xc2, 0xda, 0xe1, 0x6d, + 0x70, 0xb6, 0x6c, 0xca, 0x96, 0x36, 0x66, 0x34, + 0xf7, 0x42, 0x12, 0xd8, 0xc4, 0xb6, 0x31, 0x2d, + 0x8c, 0x4b, 0x63, 0x12, 0xd8, 0xc4, 0xb6, 0x31, + 0x2d, 0x8c, 0x4b, 0x63, 0x12, 0xd8, 0xc4, 0xb6, + 0x31, 0x2d, 0x8c, 0x4b, 0x63, 0x12, 0xd8, 0xc4, + 0xb6, 0x31, 0x2d, 0x8c, 0x4b, 0x63, 0x12, 0xd8, + 0xc4, 0xb6, 0x31, 0x2d, 0x8c, 0x4b, 0x63, 0x12, + 0xd8, 0xc4, 0xa3, 0x94, 0x73, 0x1c, 0xe6, 0xe5, + 0x8e, 0x77, 0xe1, 0x1f, 0xfd, 0x22, 0xbf, 0x3d, + 0xe1, 0x3e, 0x8b, 0x4e, 0x5a, 0xae, 0x85, 0xf6, + 0x0f, 0x28, 0x4c, 0x44, 0x2f, 0xce, 0x6e, 0xd6, + 0x30, 0x43, 0x94, 0x43, 0xcf, 0x30, 0x52, 0x66, + 0x68, 0x70, 0xfc, 0xcd, 0x1c, 0x76, 0xed, 0x6d, + 0x79, 0x98, 0xaf, 0x85, 0xb1, 0x13, 0x0c, 0xe3, + 0x19, 0xea, 0x97, 0x2f, 0xf9, 0x67, 0x03, 0x3f, + 0xbf, 0x1b, 0x4b, 0x19, 0xd1, 0xc7, 0x13, 0xe5, + 0x23, 0x2c, 0x74, 0xb2, 0x26, 0xe2, 0x77, 0x26, + 0x35, 0xae, 0xa9, 0x93, 0x33, 0x42, 0xde, 0x5a, + 0x80, 0xdc, 0xb6, 0x63, 0xb1, 0xe9, 0x2c, 0x6c, + 0xfc, 0x97, 0x2d, 0x30, 0x8c, 0xc8, 0xed, 0x46, + 0x30, 0xfc, 0x77, 0x9d, 0x36, 0x33, 0x36, 0x57, + 0xc8, 0x8f, 0x54, 0x79, 0x9a, 0x56, 0xff, 0x00, + 0xdd, 0x8c, 0x37, 0x33, 0x3a, 0x2a, 0xec, 0x6c, + 0x0d, 0x7d, 0x74, 0x6e, 0x8d, 0xae, 0x95, 0xf1, + 0x63, 0xbc, 0xe6, 0x14, 0xdc, 0xe2, 0x60, 0x21, + 0x74, 0xf6, 0x53, 0xe6, 0x48, 0x56, 0x5d, 0x2e, + 0x22, 0xcf, 0x79, 0xac, 0x93, 0x33, 0x42, 0xdb, + 0x21, 0xb2, 0x31, 0xef, 0x9d, 0xd1, 0x3b, 0x96, + 0xaa, 0x25, 0xee, 0xd7, 0x43, 0xf9, 0xac, 0x8a, + 0xf9, 0x58, 0xf2, 0xd7, 0x2d, 0x72, 0xd7, 0x2d, + 0x72, 0xd7, 0x2d, 0x72, 0xd5, 0x54, 0x19, 0xb3, + 0x9a, 0x4c, 0x4a, 0xc2, 0x24, 0x7c, 0xb0, 0xa9, + 0x33, 0x34, 0x2d, 0xb5, 0x8b, 0x01, 0x1d, 0x23, + 0xa5, 0x85, 0xef, 0xef, 0xc5, 0x8e, 0x5a, 0xe5, + 0xae, 0x5a, 0xe5, 0xae, 0x5a, 0xe5, 0xae, 0x5a, + 0xc1, 0x99, 0x6e, 0x6c, 0x71, 0xf2, 0x35, 0xdf, + 0x84, 0x7f, 0xf4, 0x8a, 0xfc, 0xfd, 0x47, 0x1b, + 0xb3, 0x75, 0xda, 0x72, 0xa6, 0x85, 0xf3, 0x54, + 0x47, 0x54, 0x4e, 0x47, 0xf5, 0x91, 0xe4, 0xee, + 0x22, 0x58, 0x0a, 0x27, 0xbb, 0x1d, 0x55, 0xb4, + 0x8f, 0x9b, 0xa8, 0x5b, 0x21, 0x13, 0x9d, 0xd5, + 0x31, 0xb9, 0xd6, 0xc6, 0x70, 0x5a, 0x20, 0x86, + 0xe0, 0xd6, 0x0a, 0x46, 0x25, 0xb0, 0xae, 0x92, + 0x52, 0x2b, 0x32, 0xe9, 0xe4, 0xb1, 0xc1, 0x33, + 0xc1, 0x37, 0xca, 0x21, 0x40, 0xe4, 0xe7, 0xe7, + 0x57, 0x89, 0xa3, 0x6e, 0x5b, 0x98, 0x45, 0xb2, + 0xf9, 0x9e, 0x1f, 0x69, 0xca, 0x28, 0x9d, 0xdd, + 0x3f, 0xde, 0x43, 0x8f, 0x9b, 0x78, 0xf9, 0x55, + 0x4c, 0xec, 0xd9, 0xd9, 0xd4, 0x15, 0x35, 0xe4, + 0x71, 0x4d, 0x5f, 0xd3, 0xe4, 0x65, 0xf1, 0x87, + 0x19, 0x53, 0xf3, 0x19, 0x99, 0x03, 0xa3, 0x96, + 0x59, 0x24, 0xb9, 0x11, 0xf9, 0x25, 0x9d, 0x3a, + 0x3b, 0xa2, 0xbe, 0x90, 0xb0, 0x81, 0x5d, 0xd8, + 0x83, 0xc9, 0x52, 0x49, 0x07, 0x4e, 0x97, 0xdc, + 0x64, 0x81, 0xe1, 0xf2, 0x3b, 0xbb, 0x21, 0xb5, + 0x56, 0x33, 0x45, 0x11, 0x65, 0x72, 0x24, 0x69, + 0xed, 0xef, 0x54, 0x19, 0x36, 0x20, 0xb0, 0xbe, + 0x16, 0x5e, 0xff, 0x00, 0x1f, 0x2a, 0x82, 0x3f, + 0x45, 0x74, 0x1f, 0x9a, 0xd6, 0x17, 0x66, 0xd3, + 0xb0, 0xe5, 0xd8, 0x72, 0xec, 0x39, 0x76, 0x1c, + 0xbb, 0x0e, 0x5d, 0x87, 0x2e, 0xc3, 0x95, 0x58, + 0x6c, 0x8a, 0x8f, 0x10, 0xfa, 0x2e, 0xe2, 0x69, + 0x16, 0x35, 0x07, 0xb7, 0xbd, 0x51, 0x23, 0x33, + 0x8b, 0xca, 0x1f, 0x59, 0x22, 0x7a, 0xca, 0x23, + 0xa7, 0xfb, 0x0e, 0x5d, 0x87, 0x2e, 0xc3, 0x97, + 0x61, 0xcb, 0xb0, 0xe5, 0xd8, 0x72, 0xec, 0x39, + 0x76, 0x1c, 0xac, 0x7d, 0xeb, 0xff, 0x00, 0x00, + 0xdf, 0xe9, 0x15, 0xf9, 0xee, 0x45, 0xf5, 0x9f, + 0xc4, 0x50, 0x32, 0x41, 0xa4, 0x2a, 0x62, 0x4d, + 0xc7, 0x28, 0xbe, 0x3f, 0xae, 0x7c, 0xb9, 0x93, + 0x13, 0x1a, 0x23, 0x12, 0x95, 0x2c, 0xc4, 0x96, + 0x44, 0x24, 0x62, 0x42, 0xe4, 0x9b, 0x12, 0x10, + 0xd1, 0xbb, 0xc1, 0xbf, 0xbe, 0x4f, 0x78, 0x47, + 0x3e, 0x1c, 0xd8, 0x17, 0x34, 0xef, 0xf5, 0xcf, + 0x97, 0x42, 0x41, 0x43, 0xc9, 0xeb, 0x9d, 0x47, + 0x39, 0x31, 0x41, 0x29, 0x05, 0x4d, 0x82, 0x09, + 0x28, 0xa8, 0xf8, 0x88, 0x70, 0x73, 0x24, 0xe6, + 0xbb, 0x0f, 0x28, 0x3f, 0xfc, 0xa5, 0x70, 0x59, + 0x63, 0xb8, 0x8b, 0x06, 0x18, 0xd8, 0x85, 0x7c, + 0xe1, 0x67, 0x32, 0x10, 0xe5, 0x89, 0x27, 0xc3, + 0xb3, 0xdd, 0xcc, 0x3d, 0xe2, 0x3b, 0xcc, 0x28, + 0xb8, 0xe1, 0x81, 0x8f, 0x1a, 0x57, 0x0d, 0x97, + 0x66, 0x32, 0x0a, 0x8a, 0x07, 0x36, 0x47, 0xc0, + 0x39, 0x6f, 0xed, 0xb8, 0x82, 0x5e, 0x46, 0x3b, + 0xb8, 0x89, 0xc4, 0x14, 0xf1, 0xdd, 0x99, 0x9f, + 0x97, 0x16, 0x5b, 0xd6, 0x0a, 0x2d, 0xb3, 0x10, + 0xd9, 0x4a, 0x93, 0x88, 0x85, 0x83, 0x8b, 0x5d, + 0x13, 0xbd, 0x32, 0xd8, 0x85, 0x9c, 0x1d, 0xc4, + 0x5c, 0x45, 0xc4, 0x5c, 0x45, 0xc4, 0x5c, 0x45, + 0xc4, 0x52, 0x36, 0x49, 0x62, 0x64, 0xe4, 0xc7, + 0x1b, 0x73, 0x33, 0x22, 0x71, 0x65, 0xbd, 0x3a, + 0x42, 0x1c, 0x4f, 0x7e, 0x62, 0x09, 0x38, 0x8c, + 0x48, 0x27, 0x11, 0x71, 0x17, 0x11, 0x71, 0x17, + 0x11, 0x71, 0x17, 0x11, 0x45, 0x5f, 0x99, 0xa4, + 0x39, 0xf8, 0x90, 0xb7, 0xfe, 0x01, 0xbe, 0xd4, + 0x5f, 0xb8, 0xb4, 0xb5, 0xc0, 0x0c, 0xdf, 0x82, + 0xb7, 0xe0, 0x2d, 0xf8, 0x0b, 0x7e, 0x02, 0xdf, + 0x80, 0xb7, 0xe0, 0x2d, 0xf8, 0x0b, 0x7e, 0x02, + 0xdf, 0x80, 0xb7, 0xe0, 0x2d, 0xf8, 0x0b, 0x7e, + 0x02, 0xdf, 0x80, 0xb7, 0xe0, 0x2d, 0xf8, 0x0b, + 0x7e, 0x02, 0xdf, 0x80, 0xb7, 0xe0, 0x2d, 0xf8, + 0x0b, 0x7e, 0x02, 0xdf, 0x80, 0x80, 0xb0, 0x8c, + 0x90, 0xbe, 0x17, 0x37, 0x58, 0x08, 0xdf, 0x25, + 0x89, 0x79, 0x2c, 0x4b, 0xc9, 0x62, 0x5e, 0x4b, + 0x12, 0xf2, 0x58, 0x97, 0x92, 0xc4, 0xbc, 0x96, + 0x25, 0xe4, 0xb1, 0x2f, 0x25, 0x89, 0x79, 0x2c, + 0x4b, 0xc9, 0x62, 0x5e, 0x4b, 0x12, 0xf2, 0x58, + 0x97, 0x92, 0xc4, 0xbc, 0x96, 0x25, 0xe4, 0xb1, + 0x2f, 0x25, 0x89, 0x79, 0x2c, 0x4b, 0xc9, 0x62, + 0x5e, 0x4b, 0x12, 0x77, 0x52, 0xb3, 0xe4, 0x7b, + 0xf2, 0xf9, 0x15, 0xa5, 0xb7, 0x01, 0x9e, 0x48, + 0x3a, 0xf2, 0x41, 0xd7, 0x92, 0x0e, 0xbc, 0x90, + 0x75, 0xe4, 0x83, 0xaf, 0x24, 0x1d, 0x79, 0x20, + 0xeb, 0xc9, 0x07, 0x5e, 0x48, 0x3a, 0xf2, 0x41, + 0xd7, 0x92, 0x0e, 0xbc, 0x90, 0x75, 0xe4, 0x83, + 0xaf, 0x24, 0x1d, 0x79, 0x20, 0xeb, 0xc9, 0x07, + 0x5e, 0x48, 0x3a, 0xf2, 0x41, 0xd7, 0x92, 0x0e, + 0xbc, 0x90, 0x75, 0xe4, 0x83, 0xa0, 0x2c, 0x5a, + 0x58, 0x29, 0xff, 0x00, 0x80, 0x6f, 0xb5, 0x17, + 0xee, 0x3a, 0x9f, 0xed, 0xfa, 0x8a, 0xad, 0x8d, + 0x8a, 0x41, 0xa5, 0x89, 0x8d, 0x05, 0xaf, 0xa8, + 0xd4, 0x44, 0xd1, 0x49, 0x68, 0xbd, 0xb6, 0x0c, + 0x1b, 0x07, 0x75, 0x4e, 0x31, 0x34, 0x35, 0x31, + 0x38, 0xe1, 0xaa, 0x59, 0x2d, 0xbf, 0xd5, 0xd3, + 0xff, 0x00, 0xa9, 0xf8, 0x75, 0x4f, 0xed, 0x3e, + 0xa0, 0x9a, 0xc7, 0x98, 0x68, 0xb8, 0xf4, 0x98, + 0x1e, 0x42, 0x7c, 0x91, 0x33, 0x66, 0x13, 0x21, + 0x8c, 0x80, 0x46, 0x96, 0x18, 0x63, 0x77, 0x6c, + 0xb2, 0x27, 0xc9, 0x0f, 0xfa, 0xcc, 0xfb, 0x97, + 0x50, 0x0b, 0x29, 0x38, 0x80, 0x09, 0xc9, 0x66, + 0x31, 0xf3, 0xcc, 0xf0, 0xe4, 0x79, 0xc6, 0x1a, + 0x42, 0xe5, 0xce, 0x3e, 0x59, 0x92, 0xb8, 0x88, + 0xa3, 0x9c, 0x39, 0x07, 0x64, 0xb1, 0x3a, 0x07, + 0xe6, 0xbc, 0x8c, 0x49, 0x38, 0xf2, 0x0c, 0xf9, + 0xe0, 0xc8, 0xf2, 0x3e, 0x2c, 0xb1, 0x34, 0x09, + 0xdf, 0x03, 0x06, 0x92, 0x48, 0x58, 0x0c, 0xf2, + 0x33, 0x58, 0x47, 0x72, 0x50, 0x66, 0x87, 0x33, + 0x81, 0x30, 0xcc, 0x8c, 0x69, 0x25, 0x86, 0x3a, + 0xc2, 0x26, 0x8a, 0x00, 0x66, 0x25, 0x52, 0xc2, + 0xf8, 0x2b, 0x53, 0xff, 0x00, 0x00, 0xdf, 0x6a, + 0x2f, 0xdc, 0x75, 0x3f, 0xdb, 0xf4, 0xb7, 0xe5, + 0xea, 0x3e, 0x76, 0xbe, 0x3b, 0x03, 0xda, 0x7e, + 0x2b, 0xe5, 0x8f, 0x8a, 0xe3, 0x61, 0x2a, 0x02, + 0x45, 0x60, 0xd1, 0xba, 0xc5, 0xc3, 0x05, 0x5a, + 0x53, 0x70, 0x2b, 0x0b, 0x8b, 0xd2, 0x29, 0x90, + 0xe3, 0xeb, 0xe9, 0xff, 0x00, 0xd4, 0xfc, 0x3a, + 0xa7, 0xf6, 0x9f, 0x50, 0x64, 0x71, 0x0a, 0xc9, + 0xd1, 0x0d, 0x1c, 0xe5, 0x3c, 0x95, 0x19, 0xc2, + 0xfa, 0xb1, 0x6b, 0x2c, 0x03, 0x11, 0x64, 0xc9, + 0xa2, 0x6d, 0x84, 0x7c, 0xcf, 0xf0, 0x19, 0xf7, + 0x23, 0x60, 0x9a, 0x69, 0xc0, 0x04, 0xa8, 0x9b, + 0xf2, 0x9f, 0x85, 0x62, 0xe9, 0x0b, 0x54, 0xf0, + 0xca, 0xfb, 0x32, 0x21, 0x7c, 0x24, 0x48, 0x14, + 0x85, 0xe4, 0xa2, 0xe2, 0xe2, 0x5c, 0x67, 0xd4, + 0x7b, 0xea, 0xcc, 0x99, 0x86, 0x7a, 0x63, 0x94, + 0x9e, 0xef, 0x6e, 0xe1, 0xd2, 0x38, 0x78, 0x04, + 0x22, 0x10, 0x6a, 0x5d, 0x8e, 0x2b, 0xb3, 0x23, + 0x1a, 0x38, 0xcc, 0x86, 0x56, 0x95, 0x8c, 0xb8, + 0xd1, 0xbe, 0x42, 0x89, 0x91, 0xc5, 0x86, 0x7a, + 0xc2, 0x9f, 0x11, 0xad, 0xcd, 0xa3, 0x2a, 0x63, + 0x74, 0x35, 0xc9, 0xfe, 0xdc, 0x5f, 0xb5, 0x17, + 0xee, 0x2e, 0x24, 0x09, 0xa3, 0xf2, 0x2a, 0x17, + 0x22, 0xa1, 0x72, 0x2a, 0x17, 0x22, 0xa1, 0x72, + 0x2a, 0x17, 0x22, 0xa1, 0x72, 0x2a, 0x17, 0x22, + 0xa1, 0x72, 0x2a, 0x17, 0x22, 0xa1, 0x72, 0x2a, + 0x17, 0x22, 0xa1, 0x72, 0x2a, 0x17, 0x22, 0xa1, + 0x72, 0x2a, 0x17, 0x22, 0xa1, 0x72, 0x2a, 0x17, + 0x22, 0xa1, 0x72, 0x2a, 0x17, 0x22, 0xa1, 0x72, + 0x2a, 0x15, 0x6c, 0xa2, 0xba, 0xaf, 0xe1, 0x71, + 0x7d, 0xaf, 0x2b, 0xcb, 0x17, 0x96, 0x2f, 0x2c, + 0x5e, 0x58, 0xbc, 0xb1, 0x79, 0x62, 0x7f, 0x54, + 0x3a, 0x27, 0x79, 0x62, 0x7f, 0x51, 0x4d, 0x1c, + 0x71, 0x75, 0x0c, 0xd3, 0xb6, 0x2e, 0xa1, 0x9a, + 0x76, 0xf9, 0x43, 0xbd, 0x0d, 0xbf, 0x21, 0xea, + 0x1b, 0xe2, 0x09, 0x6f, 0x93, 0xbf, 0xe5, 0xe5, + 0x8b, 0xcb, 0x17, 0x96, 0x2f, 0x2c, 0x5e, 0x58, + 0xbc, 0xb1, 0x58, 0x3b, 0xd7, 0x32, 0xba, 0x0a, + 0x22, 0xa3, 0xd3, 0x8c, 0xb4, 0xe3, 0x26, 0x55, + 0x0e, 0xc7, 0x66, 0xa0, 0x6c, 0xad, 0x38, 0xcb, + 0x4e, 0x32, 0xd3, 0x8c, 0xb4, 0xe3, 0x2d, 0x38, + 0xcb, 0x4e, 0x32, 0xd3, 0x8c, 0xb4, 0xe3, 0x2d, + 0x38, 0xcb, 0x4e, 0x32, 0xd3, 0x8c, 0xb4, 0xe3, + 0x2d, 0x38, 0xcb, 0x4e, 0x32, 0xd3, 0x8c, 0xb4, + 0xe3, 0x2d, 0x38, 0xca, 0xb4, 0x58, 0xc5, 0xab, + 0x4f, 0xf6, 0xe2, 0xfd, 0xa8, 0xcf, 0x71, 0xd4, + 0x9e, 0xda, 0xa9, 0x8d, 0x71, 0x50, 0x15, 0x2d, + 0x9c, 0x39, 0xad, 0x8f, 0xbf, 0x25, 0x43, 0x33, + 0x24, 0x23, 0x8a, 0x50, 0x50, 0x56, 0x42, 0x4c, + 0x06, 0x0a, 0x3b, 0xb1, 0x20, 0x03, 0xc2, 0x1c, + 0xb4, 0xdd, 0xb1, 0xc0, 0x92, 0x48, 0xea, 0x33, + 0x1c, 0x72, 0xb2, 0x7a, 0xe1, 0x83, 0x74, 0x35, + 0xf0, 0xbf, 0x10, 0x8b, 0x14, 0x28, 0xea, 0x8c, + 0x0d, 0x15, 0x9c, 0x10, 0x8a, 0x61, 0xc1, 0x8f, + 0x21, 0xad, 0xac, 0x1f, 0xe7, 0x10, 0x11, 0xbe, + 0x47, 0x82, 0x3c, 0xe4, 0x92, 0xc6, 0xc5, 0x3d, + 0x0f, 0xea, 0xbe, 0x1d, 0x53, 0xfb, 0x4f, 0xa6, + 0xa8, 0x67, 0xcd, 0x2c, 0xe1, 0x72, 0xad, 0x04, + 0x85, 0x8f, 0xbb, 0xaf, 0x2a, 0x62, 0x4f, 0x16, + 0x78, 0xa6, 0x1f, 0xb9, 0x87, 0x67, 0x23, 0x49, + 0x24, 0x39, 0x36, 0x23, 0x9d, 0x98, 0x1f, 0xc1, + 0x26, 0x76, 0x93, 0x07, 0xd4, 0x67, 0xdc, 0xba, + 0x9f, 0xed, 0xfe, 0x2f, 0x4f, 0xfe, 0xa5, 0x3f, + 0xdb, 0x8b, 0xf6, 0xa3, 0x3d, 0xc5, 0xc0, 0x8f, + 0x36, 0xb8, 0x52, 0x5c, 0x24, 0xf3, 0xcb, 0x03, + 0x00, 0xc5, 0xdb, 0x59, 0x2b, 0x6d, 0x19, 0x0b, + 0x71, 0x6b, 0x1c, 0x71, 0xc1, 0x6a, 0xc8, 0x96, + 0xca, 0x37, 0x64, 0xab, 0x2c, 0x11, 0x04, 0xc7, + 0xb2, 0x78, 0xa0, 0x32, 0x06, 0x89, 0x21, 0x51, + 0xf6, 0x1f, 0x6e, 0xc9, 0x9d, 0x15, 0x9e, 0x23, + 0x66, 0xd9, 0xbe, 0x92, 0xce, 0x8c, 0x94, 0x5c, + 0xfc, 0xa2, 0xa7, 0xb6, 0xef, 0xcd, 0x2d, 0x94, + 0x51, 0xb2, 0x0b, 0x36, 0x42, 0xd7, 0x1d, 0x0c, + 0xb9, 0x30, 0x9c, 0x98, 0x45, 0x78, 0xae, 0xaf, + 0xab, 0xf8, 0x75, 0x34, 0x12, 0x49, 0x65, 0xc4, + 0x99, 0x71, 0x26, 0x5c, 0x49, 0x97, 0x12, 0x65, + 0xc4, 0x99, 0x60, 0x62, 0x30, 0x88, 0xe5, 0x92, + 0xfe, 0xc9, 0x3d, 0xc7, 0x4e, 0xf9, 0xc3, 0x86, + 0x72, 0x63, 0x8f, 0x06, 0x17, 0x94, 0xd2, 0x0d, + 0x6a, 0x86, 0x72, 0x63, 0x8e, 0x5c, 0x97, 0x3c, + 0x4c, 0x69, 0x2c, 0x83, 0x89, 0x32, 0xe2, 0x4c, + 0xb8, 0x93, 0x2e, 0x24, 0xcb, 0x89, 0x32, 0xe2, + 0x4c, 0x8d, 0xff, 0x00, 0x87, 0x2b, 0x2f, 0x46, + 0x64, 0xab, 0x7b, 0x57, 0x1e, 0x08, 0x62, 0xb7, + 0x82, 0x27, 0x49, 0x53, 0x96, 0xec, 0x5f, 0xf7, + 0x95, 0x86, 0xcf, 0x11, 0xa2, 0xc7, 0x28, 0xf6, + 0xd1, 0xb6, 0x23, 0x66, 0x7b, 0x30, 0x8c, 0x1f, + 0xbf, 0x31, 0x83, 0xc3, 0x3c, 0x96, 0x90, 0xc5, + 0x14, 0x42, 0xbd, 0xb9, 0x0e, 0xb6, 0x16, 0x4e, + 0x07, 0x6c, 0x61, 0x87, 0x82, 0x17, 0x48, 0x49, + 0x1d, 0xa6, 0xa3, 0x9b, 0x97, 0x8f, 0x5b, 0x5d, + 0x99, 0xc0, 0xc9, 0x18, 0x14, 0x52, 0xe3, 0x65, + 0x4b, 0x69, 0xe4, 0x6c, 0xb5, 0xca, 0x4f, 0x6c, + 0x2f, 0xd8, 0x8c, 0xf7, 0x2c, 0x91, 0xd1, 0x39, + 0xd2, 0xb1, 0xf9, 0xf5, 0x42, 0xbd, 0x50, 0xaf, + 0x54, 0x2b, 0xd5, 0x0a, 0xf5, 0x42, 0xbd, 0x50, + 0xaf, 0x54, 0x2b, 0xd5, 0x0a, 0xf5, 0x42, 0xbd, + 0x50, 0xaf, 0x54, 0x2b, 0xd5, 0x0a, 0xf5, 0x42, + 0xbd, 0x50, 0xaf, 0x54, 0x2b, 0xd5, 0x0a, 0xf5, + 0x42, 0xbd, 0x50, 0xaf, 0x54, 0x29, 0x84, 0x62, + 0x2c, 0xb9, 0xd9, 0x7b, 0xbe, 0x17, 0x5d, 0x40, + 0x5d, 0x71, 0x9e, 0x5f, 0x60, 0xbc, 0xbe, 0xc1, + 0x79, 0x7d, 0x82, 0xf2, 0xfb, 0x05, 0xe5, 0xf6, + 0x0b, 0xcb, 0xec, 0x17, 0x97, 0xd8, 0x2f, 0x2a, + 0xb3, 0xf4, 0x3f, 0xa9, 0xed, 0x62, 0x67, 0x97, + 0xd8, 0x26, 0xf5, 0x4d, 0xa3, 0xb1, 0x27, 0x54, + 0x5a, 0x42, 0xf9, 0x7a, 0x96, 0xd8, 0x75, 0xe5, + 0xf6, 0x0b, 0xcb, 0xec, 0x17, 0x97, 0xd8, 0x2f, + 0x2f, 0xb0, 0x5e, 0x5f, 0x60, 0xbc, 0xbe, 0xc1, + 0x79, 0x7d, 0x82, 0xf2, 0xfb, 0x04, 0x7b, 0xb3, + 0x24, 0xa8, 0xd1, 0xe5, 0x76, 0x1b, 0x5a, 0x43, + 0x62, 0xc5, 0x61, 0x98, 0x87, 0x58, 0x5b, 0xe5, + 0x16, 0x9c, 0x91, 0x49, 0x9a, 0x84, 0x99, 0x65, + 0xc0, 0x46, 0x35, 0xcf, 0xa6, 0x32, 0x48, 0x48, + 0xa3, 0x2c, 0x99, 0x70, 0x21, 0x4d, 0xcc, 0xf4, + 0x33, 0xcc, 0xe9, 0x00, 0x36, 0x46, 0x11, 0x56, + 0x61, 0x2c, 0xd5, 0x93, 0x91, 0xa0, 0xa8, 0x34, + 0x66, 0xf0, 0x0f, 0xf5, 0xeb, 0xcc, 0x6a, 0x8a, + 0x80, 0xb8, 0x64, 0x9a, 0xa8, 0xa9, 0x22, 0x75, + 0x49, 0xd9, 0x77, 0x0c, 0xb5, 0x15, 0x61, 0xac, + 0x68, 0xa3, 0xcf, 0x08, 0x0a, 0x4f, 0x6c, 0x27, + 0xd8, 0x8c, 0xf7, 0x2e, 0x74, 0x40, 0xb7, 0x6b, + 0x85, 0xb5, 0xc2, 0xda, 0xe1, 0x6d, 0x70, 0xb6, + 0xb8, 0x5b, 0x5c, 0x2d, 0xae, 0x16, 0xd7, 0x0b, + 0x6b, 0x85, 0xb5, 0xc2, 0xda, 0xe1, 0x6d, 0x70, + 0xb6, 0xb8, 0x5b, 0x5c, 0x2d, 0xae, 0x16, 0xd7, + 0x0b, 0x6b, 0x85, 0xb5, 0xc2, 0xda, 0xe1, 0x6d, + 0x70, 0xb6, 0xb8, 0x51, 0x4f, 0x09, 0xae, 0xce, + 0x3d, 0x39, 0x5d, 0x53, 0xfb, 0x4f, 0xaf, 0x12, + 0x64, 0x8a, 0xd9, 0x64, 0x74, 0xaf, 0xb4, 0x0e, + 0x30, 0x9a, 0x34, 0x92, 0xc7, 0x5b, 0x13, 0xfe, + 0x46, 0x72, 0xe7, 0x7c, 0x3f, 0xe0, 0x33, 0xee, + 0x5d, 0x51, 0xf6, 0xfc, 0x0a, 0x1f, 0x8c, 0xe9, + 0xea, 0x62, 0x6c, 0xd1, 0x05, 0x17, 0x63, 0x15, + 0xd9, 0xd8, 0x42, 0x26, 0x64, 0x64, 0x35, 0xf2, + 0xb8, 0xc9, 0xab, 0x49, 0x86, 0x56, 0x8b, 0x33, + 0x9e, 0xc1, 0x66, 0x92, 0x40, 0x85, 0xe5, 0x15, + 0x30, 0x71, 0x71, 0xde, 0x34, 0xb1, 0xb5, 0xe1, + 0x91, 0x1e, 0x62, 0x11, 0xd2, 0x40, 0xe1, 0x27, + 0x62, 0x9a, 0xb0, 0x98, 0x66, 0xcc, 0x12, 0x62, + 0x3f, 0x87, 0x4f, 0xfe, 0xa5, 0x49, 0xed, 0x84, + 0xfb, 0x11, 0xbe, 0xe6, 0xf8, 0x9f, 0x45, 0xb7, + 0x2d, 0x72, 0xd7, 0x2d, 0x02, 0x2c, 0x65, 0x05, + 0x62, 0x3b, 0x80, 0x6e, 0x23, 0x27, 0x2e, 0x32, + 0x19, 0x83, 0x2e, 0x59, 0x64, 0x81, 0xe3, 0x85, + 0x0b, 0xc1, 0x38, 0x49, 0x83, 0x9f, 0x1d, 0xf7, + 0x48, 0x10, 0xf3, 0x9d, 0x3b, 0x79, 0x0e, 0xcc, + 0x2f, 0x94, 0x8c, 0x88, 0x29, 0x06, 0x30, 0xa9, + 0x1b, 0x13, 0x5f, 0xdf, 0x8f, 0x2e, 0xef, 0xc6, + 0xce, 0x5a, 0xe5, 0xae, 0x5a, 0x88, 0xcf, 0x94, + 0xa7, 0xff, 0x00, 0xc1, 0x8b, 0xa9, 0x44, 0x9e, + 0x6b, 0x1d, 0x79, 0x4b, 0x5e, 0x52, 0xd7, 0x94, + 0xb5, 0xe5, 0x2d, 0x79, 0x4b, 0x5e, 0x52, 0xd7, + 0x94, 0xb3, 0x92, 0xb2, 0x1c, 0xef, 0xb0, 0x99, + 0xbc, 0x23, 0x3d, 0x22, 0x38, 0xe0, 0xdb, 0x96, + 0x97, 0x89, 0xe7, 0xe6, 0x4d, 0x16, 0xbc, 0xa5, + 0xaf, 0x29, 0x6b, 0xca, 0x5a, 0xf2, 0x96, 0xbc, + 0xa5, 0xaf, 0x29, 0x6b, 0xca, 0x5a, 0xf2, 0x91, + 0xb8, 0xf9, 0x3d, 0x75, 0x47, 0xfa, 0xf8, 0x59, + 0x00, 0x44, 0x8d, 0x9c, 0x49, 0x46, 0xba, 0x78, + 0xb2, 0x59, 0x0b, 0x65, 0x2f, 0xa4, 0xa7, 0xc9, + 0x14, 0x04, 0x87, 0x1c, 0xb0, 0x49, 0xd9, 0x73, + 0xa5, 0x3a, 0x29, 0xa4, 0x82, 0x6c, 0x62, 0x59, + 0xc7, 0x93, 0xd7, 0x7e, 0xe9, 0x63, 0x96, 0xbb, + 0x2f, 0xc4, 0x47, 0x0d, 0x14, 0xf1, 0x89, 0xd9, + 0xcc, 0x55, 0x96, 0x31, 0x3b, 0x86, 0x64, 0x33, + 0xb8, 0xcb, 0x89, 0x3d, 0x4d, 0xf8, 0x74, 0xff, + 0x00, 0xea, 0x54, 0x9e, 0xd8, 0x4f, 0xb1, 0x1b, + 0xee, 0x7a, 0x8a, 0x0c, 0xba, 0xeb, 0x8d, 0x95, + 0xc6, 0xca, 0xe3, 0x65, 0x40, 0x3b, 0xb3, 0xd2, + 0xd0, 0x85, 0x2e, 0x29, 0xdb, 0xea, 0x74, 0x0e, + 0x8a, 0x77, 0xdf, 0x75, 0x0c, 0x3d, 0xd0, 0x1b, + 0x18, 0x9e, 0x3d, 0x5e, 0x77, 0x2e, 0xcd, 0xb3, + 0x13, 0x8e, 0x9f, 0x67, 0xaf, 0x65, 0x04, 0x8d, + 0x1e, 0xb0, 0x87, 0x3a, 0x2a, 0xa8, 0x5e, 0x6f, + 0x6c, 0x78, 0x5a, 0xfb, 0x0a, 0xb7, 0x90, 0x48, + 0xef, 0x96, 0x59, 0xcb, 0xe3, 0x65, 0x71, 0xb2, + 0xb8, 0xd9, 0x51, 0x0f, 0x9e, 0xe9, 0xfe, 0xf1, + 0x75, 0x0d, 0xa9, 0x62, 0x1f, 0xbf, 0xb0, 0x5b, + 0xfb, 0x05, 0xbf, 0xb0, 0x5b, 0xfb, 0x05, 0xbf, + 0xb0, 0x5b, 0xfb, 0x05, 0xbf, 0xb0, 0x42, 0x9b, + 0x68, 0x53, 0x33, 0x7b, 0x63, 0x8c, 0x8d, 0x6b, + 0x68, 0x5c, 0xa4, 0xd8, 0xd9, 0x8f, 0x19, 0x36, + 0x36, 0x82, 0xc7, 0x31, 0x36, 0xe3, 0x9d, 0xbf, + 0xb0, 0x5b, 0xfb, 0x05, 0xbf, 0xb0, 0x5b, 0xfb, + 0x05, 0xbf, 0xb0, 0x5b, 0xfb, 0x05, 0xbf, 0xb0, + 0x5b, 0xfb, 0x04, 0x73, 0xb2, 0xf7, 0xab, 0xa1, + 0x21, 0x2d, 0x9a, 0x71, 0x96, 0x9c, 0x65, 0xa7, + 0x19, 0x69, 0xc6, 0x5a, 0x71, 0x96, 0x9c, 0x65, + 0xa7, 0x19, 0x69, 0xc6, 0x5a, 0x71, 0x90, 0xe0, + 0x8a, 0x3a, 0x9a, 0xb6, 0x02, 0x25, 0xd3, 0x8c, + 0xb4, 0xe3, 0x26, 0x55, 0x0d, 0x1b, 0xc9, 0x10, + 0x72, 0x19, 0xa7, 0x19, 0x69, 0xc6, 0x5a, 0x71, + 0x96, 0x9c, 0x65, 0xa7, 0x19, 0x69, 0xc6, 0x55, + 0x83, 0x44, 0x2d, 0x5a, 0x93, 0xda, 0x89, 0xf6, + 0x23, 0x7d, 0xcd, 0xb0, 0xbd, 0xc2, 0xf8, 0x8b, + 0x88, 0xb8, 0x88, 0x52, 0x09, 0x09, 0x92, 0xba, + 0x79, 0xa6, 0xc9, 0x86, 0x65, 0xdc, 0xb2, 0xfb, + 0xd2, 0xbe, 0x79, 0xe2, 0x73, 0x64, 0x7c, 0x10, + 0x36, 0x41, 0xb2, 0x2b, 0xa7, 0x0b, 0x2d, 0x79, + 0x0d, 0x26, 0x32, 0xcb, 0x89, 0x0f, 0x21, 0x02, + 0x3a, 0x29, 0x49, 0x86, 0x69, 0x33, 0x34, 0x99, + 0x94, 0x92, 0xa7, 0xcf, 0xae, 0x7f, 0x5f, 0x11, + 0x71, 0x17, 0x11, 0x0b, 0x5f, 0x99, 0x88, 0x2d, + 0xf8, 0x94, 0x95, 0xd5, 0x3f, 0xb4, 0xfa, 0xc0, + 0x8f, 0xb2, 0xc1, 0x48, 0x66, 0x04, 0xac, 0x6e, + 0x65, 0x8a, 0x0a, 0xd9, 0xa5, 0x71, 0xaf, 0x80, + 0xd1, 0xb3, 0x9e, 0x5d, 0x87, 0xf8, 0x0c, 0xfb, + 0x97, 0x52, 0xfd, 0xdf, 0x09, 0x6b, 0x9b, 0xdb, + 0xf4, 0x3b, 0xd2, 0x20, 0x19, 0x2a, 0x0c, 0x0b, + 0x33, 0xa3, 0xc0, 0xf2, 0xba, 0x29, 0x2b, 0xe4, + 0xc4, 0xec, 0x16, 0x69, 0x50, 0xc2, 0xbc, 0x92, + 0x26, 0x12, 0x1c, 0x44, 0xe0, 0xe7, 0x63, 0x9c, + 0x19, 0x0c, 0x4e, 0x16, 0x66, 0x47, 0x91, 0xa5, + 0xc4, 0x58, 0x04, 0x9c, 0xbf, 0x20, 0xcc, 0xd1, + 0x5c, 0x1c, 0xec, 0x7b, 0x83, 0x9d, 0x8c, 0xf8, + 0x74, 0xf7, 0xeb, 0x94, 0x9e, 0xd4, 0x3f, 0xb1, + 0x1b, 0xee, 0xa6, 0x37, 0x21, 0x54, 0xf9, 0x36, + 0x17, 0x93, 0x61, 0x79, 0x36, 0x17, 0x93, 0x61, + 0x33, 0xa8, 0xb3, 0x2b, 0xbc, 0x9b, 0x0a, 0x1b, + 0x99, 0x89, 0xc4, 0xd7, 0xef, 0x1d, 0xfe, 0x4d, + 0x85, 0xe4, 0xd8, 0x5e, 0x4d, 0x85, 0xe4, 0xd8, + 0x5e, 0x47, 0xff, 0x00, 0x87, 0x93, 0x61, 0x79, + 0x36, 0x17, 0x93, 0x61, 0x79, 0x36, 0x17, 0x93, + 0x61, 0x79, 0x36, 0x17, 0x93, 0x61, 0x79, 0x36, + 0x15, 0x35, 0xdc, 0x87, 0x1d, 0xf0, 0xbf, 0xa6, + 0x30, 0xc3, 0xbc, 0x6e, 0xc9, 0x78, 0xdd, 0x92, + 0xf1, 0xbb, 0x25, 0xe3, 0x76, 0x4b, 0xc6, 0xec, + 0x97, 0x8d, 0xd9, 0x2f, 0x1b, 0xb2, 0x50, 0xd5, + 0x5d, 0x8e, 0xcc, 0xf4, 0xed, 0x9b, 0xb2, 0xde, + 0x9e, 0xb3, 0x63, 0x9d, 0x4d, 0x73, 0x24, 0x8d, + 0xe9, 0xfb, 0x46, 0x2c, 0x51, 0xdb, 0xe2, 0x4f, + 0x1b, 0xb2, 0x5e, 0x37, 0x64, 0xbc, 0x6e, 0xc9, + 0x78, 0xdd, 0x92, 0xf1, 0xbb, 0x25, 0xe3, 0x76, + 0x4b, 0xc6, 0xec, 0x97, 0x8d, 0xd9, 0x23, 0x9b, + 0x96, 0x48, 0xba, 0x97, 0x19, 0xf9, 0xac, 0x7f, + 0xce, 0x65, 0x1e, 0x48, 0x00, 0xb4, 0x36, 0x33, + 0x5b, 0x01, 0x03, 0xd7, 0x44, 0xf8, 0xdc, 0x31, + 0xb5, 0xf1, 0x67, 0xb4, 0x4c, 0x72, 0xcd, 0x0b, + 0xbd, 0x73, 0x16, 0x1b, 0xda, 0xdb, 0x30, 0xab, + 0x9e, 0x09, 0x62, 0x36, 0x61, 0x61, 0x89, 0xee, + 0xcb, 0x67, 0x64, 0x8d, 0x5d, 0x9c, 0xf1, 0xe6, + 0xc3, 0xe4, 0x2a, 0x76, 0xfa, 0x0c, 0x13, 0x13, + 0x0b, 0x0c, 0x6c, 0x7c, 0xf5, 0xff, 0x00, 0x0e, + 0x9f, 0xc6, 0x71, 0x58, 0xa4, 0xf6, 0xa1, 0xfe, + 0x34, 0x77, 0xba, 0xb3, 0xfd, 0x0f, 0xd1, 0x44, + 0x2c, 0xac, 0x5c, 0x48, 0xdb, 0x5d, 0x4c, 0xec, + 0xe2, 0xc2, 0xb0, 0x58, 0x88, 0x6c, 0x62, 0x8b, + 0x8c, 0x60, 0x71, 0xbb, 0x38, 0xae, 0x87, 0xb4, + 0x78, 0xc3, 0x88, 0x2d, 0x7c, 0x4d, 0x9c, 0x61, + 0x46, 0x14, 0x96, 0x38, 0x58, 0x25, 0xaf, 0x8a, + 0x38, 0x47, 0x6d, 0x98, 0xf1, 0x47, 0x1f, 0xd1, + 0xd2, 0xdf, 0xb4, 0xf8, 0x75, 0x34, 0xf2, 0x47, + 0x65, 0x20, 0xc4, 0x61, 0xf9, 0x82, 0x47, 0xbb, + 0xd1, 0x27, 0x0d, 0xf0, 0x4a, 0xd8, 0x5f, 0x04, + 0xad, 0x86, 0x0c, 0x7a, 0x84, 0xcc, 0x64, 0xbe, + 0x33, 0x63, 0x2c, 0x39, 0x9d, 0x83, 0x98, 0xfc, + 0xb4, 0xf6, 0xe1, 0xae, 0x31, 0xd1, 0x15, 0x83, + 0x02, 0x74, 0xe1, 0x91, 0x0d, 0xac, 0x02, 0xcf, + 0x39, 0xc2, 0xe2, 0x59, 0xf0, 0x53, 0x9f, 0x0a, + 0x82, 0x07, 0xbd, 0x98, 0x1d, 0xf2, 0xa9, 0xe3, + 0x9e, 0x10, 0x27, 0x0e, 0x78, 0x32, 0x53, 0xa6, + 0x1b, 0x26, 0xff, 0x00, 0xcb, 0x94, 0xc3, 0xc5, + 0x60, 0x33, 0xba, 0x64, 0xfc, 0x3b, 0xc6, 0x6c, + 0x57, 0x8c, 0xd8, 0xaf, 0x19, 0xb1, 0x5e, 0x33, + 0x62, 0xbc, 0x66, 0xc5, 0x78, 0xcd, 0x8a, 0xf1, + 0x9b, 0x14, 0x2d, 0x45, 0x98, 0x98, 0xcf, 0x4d, + 0x59, 0x67, 0x3e, 0x33, 0x62, 0xbc, 0x66, 0xc5, + 0x78, 0xcd, 0x8a, 0x22, 0x86, 0xcc, 0x99, 0x3c, + 0x66, 0xc5, 0x78, 0xcd, 0x8a, 0xf1, 0x9b, 0x15, + 0xe3, 0x36, 0x2b, 0xc6, 0x6c, 0x57, 0x8c, 0xd8, + 0xa8, 0xfa, 0x64, 0xbf, 0x57, 0xca, 0x21, 0xe0, + 0x52, 0x7b, 0x40, 0xff, 0x00, 0x1a, 0x3b, 0xdd, + 0x14, 0x34, 0xa5, 0xd3, 0x68, 0x2c, 0x16, 0x82, + 0xc1, 0x68, 0x2c, 0x16, 0x82, 0xc1, 0x0d, 0x53, + 0x68, 0x2c, 0xb8, 0x06, 0xd7, 0x0c, 0x1a, 0xa2, + 0xc8, 0x59, 0x86, 0x0e, 0xd4, 0x56, 0x38, 0x3b, + 0x47, 0x48, 0x28, 0x56, 0x11, 0xc1, 0x91, 0x6d, + 0x1c, 0xe9, 0xab, 0x2c, 0xe7, 0x8c, 0x70, 0x2d, + 0x06, 0xc5, 0x68, 0x36, 0x03, 0x67, 0x8b, 0x67, + 0xf3, 0xe2, 0xda, 0xf7, 0x88, 0xaf, 0xb2, 0x9e, + 0x3d, 0x05, 0x82, 0xd0, 0x58, 0x2d, 0x05, 0x82, + 0xd0, 0x58, 0x2e, 0x9f, 0xaa, 0x2c, 0x43, 0xfe, + 0x1d, 0x53, 0xfb, 0x46, 0x0b, 0x30, 0x78, 0x1e, + 0x07, 0xd7, 0x88, 0x18, 0x04, 0x4b, 0x55, 0x2b, + 0x33, 0x87, 0x4a, 0xcc, 0xe1, 0xc0, 0x34, 0x97, + 0x54, 0x76, 0x67, 0xe2, 0x32, 0x7f, 0xff, 0x00, + 0x51, 0x99, 0x70, 0xf9, 0x81, 0xee, 0xcc, 0x90, + 0x67, 0x1c, 0x4b, 0x56, 0xbb, 0xb8, 0x5c, 0x8d, + 0xee, 0x12, 0xf8, 0x83, 0xcc, 0xf0, 0x72, 0x70, + 0x50, 0x6e, 0x0d, 0x61, 0xf8, 0x64, 0xd8, 0x77, + 0x79, 0xd1, 0xf6, 0x88, 0x6c, 0x92, 0xe6, 0x76, + 0xda, 0x7d, 0xe6, 0x7d, 0xdf, 0xc9, 0x97, 0xda, + 0x05, 0xf8, 0xd1, 0xde, 0xe8, 0xa2, 0x65, 0x12, + 0x9b, 0x7f, 0x60, 0xb7, 0xf6, 0x0b, 0x7f, 0x60, + 0xb7, 0xf6, 0x0a, 0x1b, 0x8b, 0x42, 0x64, 0xc9, + 0x37, 0x78, 0x94, 0x83, 0xed, 0xc5, 0x67, 0x2a, + 0xef, 0xb3, 0x05, 0xbd, 0xa1, 0x53, 0x3a, 0xf6, + 0xc5, 0x8e, 0xdf, 0xd8, 0x2d, 0xfd, 0x82, 0x96, + 0xe6, 0xce, 0x07, 0x6f, 0xec, 0x13, 0x6f, 0x6c, + 0x9d, 0x9d, 0xf5, 0x8a, 0xdf, 0xd8, 0x2d, 0xfd, + 0x82, 0xdf, 0xd8, 0x2d, 0xfd, 0x82, 0xdf, 0xd8, + 0x2e, 0x9f, 0xb5, 0x2c, 0xb3, 0xfe, 0x1d, 0x53, + 0xfb, 0x4f, 0xa9, 0xb0, 0xbd, 0xe9, 0xd5, 0x85, + 0xb3, 0x12, 0xd7, 0x95, 0x03, 0x1d, 0x58, 0x5b, + 0x1a, 0xc8, 0xdd, 0x2b, 0xa0, 0x16, 0x62, 0x96, + 0x04, 0x9d, 0xd9, 0x68, 0xf2, 0xba, 0x2f, 0x84, + 0x93, 0xba, 0x58, 0xa0, 0x9d, 0xc3, 0x3f, 0xe2, + 0x67, 0xdd, 0xfc, 0x99, 0x7d, 0xa0, 0x5f, 0x8d, + 0x1d, 0xee, 0xac, 0xff, 0x00, 0x43, 0xf4, 0x57, + 0x7c, 0xf8, 0xf4, 0xb8, 0x93, 0x33, 0xc8, 0xd8, + 0x07, 0xae, 0xb0, 0xc4, 0xfb, 0xba, 0xb8, 0xf1, + 0xdb, 0x22, 0x36, 0x47, 0x3b, 0x9e, 0xd8, 0xa1, + 0x8e, 0x11, 0xe2, 0x15, 0xf1, 0xb3, 0x0d, 0x37, + 0x10, 0xb4, 0x58, 0x19, 0x17, 0x26, 0x37, 0xb5, + 0xad, 0xb5, 0x6b, 0x07, 0x8b, 0xe8, 0xe9, 0x6f, + 0xda, 0x7c, 0x3a, 0xa7, 0xf6, 0x9f, 0x55, 0x67, + 0xe1, 0x87, 0xb1, 0xb3, 0x3b, 0xb0, 0xae, 0xbb, + 0x1c, 0xca, 0x59, 0x9e, 0xc3, 0x02, 0x92, 0x1e, + 0x1c, 0x10, 0xe0, 0x35, 0x1e, 0x3d, 0x39, 0xfa, + 0xcc, 0xfb, 0xbf, 0x93, 0x2f, 0xb3, 0x0b, 0xf1, + 0xa3, 0xfd, 0xd1, 0x62, 0x4a, 0x5d, 0x1e, 0x82, + 0xc1, 0x68, 0x2c, 0x16, 0x82, 0xc1, 0x68, 0x2c, + 0x14, 0x34, 0xf6, 0x83, 0x4a, 0xf1, 0x2e, 0xa4, + 0x7b, 0x69, 0xed, 0x1b, 0x0f, 0x12, 0xeb, 0xb1, + 0xa6, 0xb3, 0xec, 0xc5, 0x5f, 0x71, 0x0a, 0x68, + 0xd7, 0x6d, 0xcc, 0x60, 0x5c, 0x45, 0x0b, 0x02, + 0xb8, 0x63, 0xa5, 0xab, 0xb6, 0x9b, 0x19, 0x1e, + 0xef, 0x39, 0x60, 0x97, 0x51, 0xe6, 0x4a, 0x6b, + 0x39, 0x71, 0xa0, 0xb0, 0x5a, 0x0b, 0x05, 0xa0, + 0xb0, 0x5a, 0x0b, 0x05, 0xd3, 0xf5, 0x45, 0x88, + 0x7f, 0xc3, 0xa9, 0xa0, 0x92, 0x4b, 0x2e, 0x24, + 0xcb, 0x89, 0x32, 0xe2, 0x4c, 0xb8, 0x93, 0x2e, + 0x24, 0xcb, 0x89, 0x32, 0x81, 0xe5, 0x0e, 0xde, + 0x54, 0xd8, 0x92, 0x79, 0x24, 0x9d, 0x84, 0x15, + 0x31, 0x39, 0x05, 0xf3, 0x82, 0xf8, 0xe5, 0x9e, + 0x3c, 0xb4, 0xc3, 0x3d, 0x4d, 0x28, 0xc6, 0xb3, + 0x89, 0x32, 0xe2, 0x4c, 0xb8, 0x93, 0x2e, 0x24, + 0xcb, 0x89, 0x32, 0xe2, 0x4c, 0xb8, 0x93, 0x23, + 0x7f, 0xe1, 0xdf, 0xc9, 0x97, 0xd9, 0x85, 0xf8, + 0xd1, 0xfe, 0xee, 0xe2, 0x47, 0x47, 0x4f, 0xcb, + 0x99, 0x72, 0xe6, 0x4d, 0x69, 0x6f, 0x09, 0x90, + 0x4c, 0xe8, 0x23, 0x18, 0x87, 0xe1, 0xe4, 0x11, + 0x1b, 0xe2, 0x18, 0x89, 0x21, 0x86, 0x02, 0xa4, + 0x58, 0x8a, 0x77, 0xcc, 0x4f, 0x20, 0x64, 0x36, + 0x49, 0x29, 0xef, 0x1c, 0xa6, 0xb7, 0xd4, 0x4f, + 0x18, 0x96, 0x96, 0x2c, 0x63, 0xb0, 0xa2, 0x23, + 0x82, 0x42, 0x08, 0x9e, 0x11, 0x8d, 0x9a, 0xc3, + 0x01, 0x15, 0x9c, 0x41, 0x14, 0xf2, 0xc1, 0xca, + 0x99, 0x72, 0xe6, 0x5d, 0x37, 0x3c, 0x92, 0x11, + 0xf0, 0xbe, 0xb5, 0x2c, 0x42, 0x77, 0xf6, 0x0b, + 0x7f, 0x60, 0x9b, 0x6f, 0x64, 0xf1, 0xe2, 0x36, + 0xd6, 0x56, 0xe0, 0xab, 0x47, 0x4e, 0x4d, 0x8d, + 0x90, 0xf1, 0xb0, 0xcb, 0x07, 0x41, 0x9b, 0xeb, + 0x0c, 0x67, 0x61, 0x69, 0xd8, 0x9e, 0xc2, 0xd0, + 0x71, 0xe5, 0xb4, 0xb2, 0x85, 0x0d, 0x71, 0x64, + 0x51, 0x1b, 0xeb, 0x05, 0x01, 0xb6, 0x73, 0x46, + 0xfb, 0xcb, 0x28, 0xdf, 0xbf, 0xb0, 0x5b, 0xfb, + 0x04, 0xcb, 0x7b, 0x27, 0xc1, 0xbf, 0xb0, 0x5b, + 0xfb, 0x05, 0xbf, 0xb0, 0x56, 0x19, 0xf9, 0x95, + 0xfc, 0x99, 0x7d, 0x98, 0x5f, 0x89, 0x1f, 0xee, + 0xef, 0x3f, 0x4d, 0xf0, 0x89, 0x90, 0x35, 0x3d, + 0xed, 0x8e, 0xbe, 0x1c, 0xbb, 0x31, 0x16, 0x3f, + 0x1c, 0x89, 0xe0, 0x92, 0x71, 0x26, 0x95, 0x88, + 0x79, 0x25, 0xc1, 0x07, 0x0c, 0xcc, 0xc1, 0x5c, + 0xe9, 0x98, 0xf8, 0x63, 0x82, 0x21, 0xfe, 0x4d, + 0xb0, 0x08, 0xd7, 0xc0, 0x68, 0xc0, 0x41, 0x97, + 0x0a, 0x06, 0x31, 0x8b, 0x71, 0x33, 0xff, 0x00, + 0x7b, 0xc7, 0x92, 0x6b, 0x16, 0x3d, 0xa5, 0x3a, + 0x66, 0x62, 0x39, 0x97, 0x4b, 0xfb, 0x9f, 0x87, + 0x53, 0xfb, 0xcf, 0x80, 0x8d, 0xcc, 0xb5, 0x8d, + 0xef, 0x8e, 0x38, 0xb0, 0xc4, 0xd2, 0x4b, 0xce, + 0x25, 0xab, 0x91, 0xc2, 0xe2, 0xbc, 0x76, 0xfa, + 0xa6, 0x63, 0x33, 0x20, 0x05, 0x95, 0x13, 0x05, + 0x9b, 0x2d, 0x93, 0x30, 0x49, 0x33, 0xcc, 0x2a, + 0x77, 0x95, 0x58, 0x36, 0x5d, 0x91, 0xf2, 0xc7, + 0x8f, 0x3c, 0x0e, 0x64, 0x62, 0x4d, 0x98, 0xb0, + 0xcb, 0x07, 0xce, 0xe1, 0xfe, 0x27, 0xfb, 0xaf, + 0xe4, 0xcb, 0xec, 0xc1, 0xfc, 0x48, 0xff, 0x00, + 0x77, 0x79, 0xfa, 0x6f, 0x86, 0x65, 0x7b, 0xa4, + 0x65, 0x91, 0x71, 0x35, 0xa7, 0x12, 0xd5, 0xde, + 0x77, 0x61, 0x87, 0x13, 0x1c, 0x50, 0x15, 0x30, + 0xa9, 0xc6, 0x90, 0xf9, 0x79, 0xb3, 0x39, 0xd1, + 0xc8, 0xe8, 0x9c, 0xf2, 0xa6, 0x95, 0xcc, 0x9a, + 0x48, 0xf0, 0xd7, 0xb9, 0x89, 0x85, 0x4d, 0x1c, + 0x79, 0x9a, 0x4c, 0xcb, 0x89, 0xa4, 0x6a, 0xc9, + 0xc4, 0xba, 0x28, 0xc9, 0x96, 0x16, 0xfc, 0x3a, + 0x5f, 0xdc, 0xfc, 0x3a, 0x9f, 0xde, 0x7c, 0x22, + 0x95, 0xf0, 0x3f, 0x91, 0x2f, 0x77, 0x99, 0x3e, + 0x66, 0x98, 0x99, 0x89, 0xce, 0x5e, 0xe7, 0x61, + 0x85, 0x4d, 0x1b, 0x1a, 0x44, 0xac, 0x5e, 0xb7, + 0x65, 0xbd, 0xe9, 0x32, 0x88, 0xb6, 0xcc, 0x91, + 0x7a, 0xdd, 0xe9, 0x88, 0xb9, 0xe0, 0x6c, 0x87, + 0xc8, 0xe8, 0x1a, 0x44, 0xac, 0x8b, 0x91, 0x2e, + 0x61, 0x79, 0x53, 0x4a, 0xdf, 0x89, 0xfe, 0xeb, + 0xf9, 0x32, 0xfb, 0x20, 0x7f, 0x12, 0xb0, 0xf7, + 0x77, 0x7f, 0xa5, 0xfa, 0xa2, 0x1e, 0x3c, 0xd6, + 0x34, 0x06, 0xf6, 0x1f, 0x56, 0xde, 0xf8, 0xc0, + 0xc5, 0xea, 0x75, 0x6e, 0x1a, 0xc7, 0xd6, 0x46, + 0xc3, 0xe6, 0xaa, 0x60, 0xe3, 0xb6, 0x99, 0xb2, + 0x4f, 0xad, 0x87, 0x10, 0xfd, 0x5d, 0x2f, 0x8f, + 0xfd, 0x8f, 0x87, 0x53, 0xfb, 0xbf, 0x8d, 0x76, + 0x3b, 0x79, 0x68, 0x98, 0x8e, 0xb7, 0x58, 0x2c, + 0x92, 0xf0, 0xc7, 0x81, 0xa3, 0xca, 0xf1, 0x22, + 0x82, 0x17, 0x5d, 0x0e, 0x4d, 0x53, 0x63, 0x1f, + 0x15, 0x98, 0xca, 0x1c, 0x01, 0x8c, 0x51, 0x83, + 0xc3, 0x3d, 0xc7, 0x3d, 0x96, 0xf0, 0x9e, 0x50, + 0xe1, 0xf2, 0x08, 0x1e, 0x36, 0xb2, 0x4c, 0xd8, + 0x7c, 0x71, 0x8f, 0x9e, 0x4f, 0xf7, 0x5f, 0xc9, + 0x9b, 0xd9, 0x03, 0xf8, 0x95, 0x87, 0xbb, 0xed, + 0x60, 0xc1, 0x66, 0x85, 0xe3, 0xcb, 0xf4, 0xe2, + 0xed, 0xf1, 0x95, 0x92, 0xc6, 0x74, 0x6e, 0xb0, + 0x1a, 0x32, 0xdf, 0x6c, 0xdc, 0xba, 0x7b, 0x7e, + 0xf8, 0xfb, 0x08, 0x9e, 0x54, 0xf6, 0x43, 0xc9, + 0x14, 0x76, 0xa3, 0x40, 0x4d, 0x71, 0xd1, 0x07, + 0xf5, 0xd6, 0x87, 0x9a, 0xda, 0xff, 0x00, 0x85, + 0x90, 0x79, 0xb3, 0x07, 0xe3, 0x11, 0x8d, 0x8e, + 0x08, 0x4a, 0xec, 0x8f, 0x25, 0xa4, 0x6e, 0xce, + 0xd2, 0x3c, 0x42, 0xcb, 0x26, 0x72, 0x71, 0x6b, + 0x88, 0xf3, 0x0d, 0x84, 0x63, 0x97, 0x15, 0xa3, + 0xe2, 0xce, 0x2c, 0x61, 0x62, 0x79, 0x8d, 0xf4, + 0x6d, 0x99, 0xdc, 0x8c, 0x9f, 0x40, 0xf1, 0x1b, + 0x1f, 0x1e, 0x23, 0x30, 0xf2, 0x7e, 0x3d, 0x3f, + 0x5f, 0xdd, 0x22, 0x47, 0xe6, 0x47, 0xff, 0x00, + 0x26, 0x6f, 0x64, 0x07, 0xe2, 0x56, 0x91, 0x7c, + 0xa4, 0x44, 0x32, 0x0b, 0x06, 0xe7, 0xa7, 0xc3, + 0xce, 0x7c, 0x78, 0x45, 0xe3, 0xc2, 0x2f, 0x1e, + 0x11, 0x78, 0xf0, 0x8b, 0xc7, 0x84, 0x5e, 0x3c, + 0x22, 0xf1, 0xe1, 0x17, 0x8f, 0x08, 0xbc, 0x78, + 0x45, 0xe3, 0xc2, 0x2f, 0x1e, 0x11, 0x78, 0xf0, + 0x8b, 0xc7, 0x84, 0x5e, 0x3c, 0x22, 0xf1, 0xe1, + 0x17, 0x8f, 0x08, 0xbc, 0x78, 0x45, 0xe3, 0xc1, + 0xa1, 0x43, 0x0a, 0xbd, 0xcf, 0x7e, 0x64, 0x77, + 0xc1, 0xae, 0xcb, 0x1c, 0x50, 0xc2, 0x58, 0x67, + 0x42, 0x02, 0xd0, 0x82, 0xb4, 0x20, 0xad, 0x08, + 0x2b, 0x42, 0x0a, 0xd0, 0x82, 0xb4, 0x20, 0xad, + 0x08, 0x2b, 0x42, 0x0a, 0xd0, 0x82, 0xb4, 0x20, + 0xad, 0x08, 0x2b, 0x42, 0x0a, 0xd0, 0x82, 0xb4, + 0x20, 0xad, 0x08, 0x2b, 0x42, 0x0a, 0xd0, 0x82, + 0xa3, 0xa8, 0xae, 0x87, 0x32, 0xcf, 0x99, 0x71, + 0xfc, 0x98, 0xa3, 0xcc, 0xb2, 0x1b, 0x8f, 0x4c, + 0x00, 0x7e, 0x24, 0xf6, 0x62, 0x46, 0xcd, 0x56, + 0xf6, 0xe7, 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, + 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0xb5, + 0xe4, 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, + 0xb5, 0xe4, 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, + 0x90, 0xb5, 0xe4, 0x2d, 0x79, 0x0b, 0x5e, 0x42, + 0xd7, 0x90, 0xb5, 0xe4, 0x2d, 0x79, 0x0b, 0x5e, + 0x42, 0xd7, 0x90, 0xb5, 0xe4, 0x2d, 0x79, 0x0b, + 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, 0x2d, 0x79, + 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, 0x2d, + 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, + 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0xb5, + 0xe4, 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, + 0xb5, 0xe4, 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, + 0x90, 0xb5, 0xe4, 0x2d, 0x79, 0x0b, 0x5e, 0x42, + 0xd7, 0x90, 0xb5, 0xe4, 0x2d, 0x79, 0x0b, 0x5e, + 0x42, 0xd7, 0x90, 0xb5, 0xe4, 0x2d, 0x79, 0x0b, + 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, 0x2d, 0x79, + 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, 0x2d, + 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0xb5, 0xe4, + 0x2d, 0x79, 0x0b, 0x5e, 0x42, 0xd7, 0x90, 0x99, + 0x5b, 0x33, 0xb2, 0x28, 0x6d, 0x1b, 0x07, 0xfe, + 0x22, 0x2c, 0x88, 0x14, 0xad, 0xc9, 0x8b, 0x72, + 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, + 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, + 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, + 0xc9, 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, + 0x2d, 0xc9, 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xb7, + 0x26, 0x2d, 0xc9, 0x8b, 0x72, 0x62, 0xdc, 0x98, + 0xb7, 0x26, 0x2d, 0xc9, 0x8b, 0x72, 0x62, 0xdc, + 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, 0x72, 0x62, + 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, 0x72, + 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, + 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, + 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, + 0xc9, 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, + 0x2d, 0xc9, 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xb7, + 0x26, 0x2d, 0xc9, 0x8b, 0x72, 0x62, 0xdc, 0x98, + 0xb7, 0x26, 0x2d, 0xc9, 0x8b, 0x72, 0x62, 0xdc, + 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, 0x72, 0x62, + 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, 0x72, + 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, 0x8b, + 0x72, 0x62, 0xdc, 0x98, 0xb7, 0x26, 0x2d, 0xc9, + 0x8b, 0x72, 0x62, 0xdc, 0x98, 0xab, 0x8c, 0x9e, + 0xc0, 0xef, 0xff, 0xc4, 0x00, 0x2f, 0x11, 0x00, + 0x02, 0x01, 0x03, 0x01, 0x06, 0x07, 0x00, 0x02, + 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x11, 0x02, 0x03, 0x12, 0x51, 0x04, 0x10, + 0x13, 0x20, 0x21, 0x41, 0x14, 0x30, 0x31, 0x32, + 0x33, 0x40, 0x50, 0x22, 0x80, 0x60, 0x71, 0x61, + 0x91, 0xa0, 0xa1, 0xff, 0xda, 0x00, 0x08, 0x01, + 0x03, 0x01, 0x01, 0x3f, 0x01, 0xfe, 0xc2, 0xd5, + 0x7e, 0xdd, 0x1d, 0x1b, 0x3c, 0x55, 0xad, 0x4f, + 0x15, 0x6b, 0x53, 0xc5, 0x5a, 0xd4, 0xf1, 0x56, + 0xb5, 0x3c, 0x55, 0xad, 0x4f, 0x15, 0x6b, 0x53, + 0xc5, 0x5a, 0xd4, 0xf1, 0x56, 0xb5, 0x3c, 0x55, + 0xad, 0x4f, 0x15, 0x6b, 0x53, 0xc5, 0x5a, 0xd4, + 0xf1, 0x56, 0xb5, 0x3c, 0x55, 0xad, 0x4f, 0x15, + 0x6b, 0x53, 0xc5, 0x5a, 0xd4, 0xf1, 0x56, 0xb5, + 0x3c, 0x55, 0xad, 0x4f, 0x15, 0x6b, 0x53, 0xc5, + 0x5a, 0xd4, 0xf1, 0x56, 0xb5, 0x28, 0xb9, 0x45, + 0xcf, 0x6b, 0xfd, 0x7d, 0xaa, 0xeb, 0xa5, 0x62, + 0xbe, 0xb2, 0x6d, 0x39, 0x45, 0x8b, 0x9c, 0x4a, + 0x27, 0x74, 0x92, 0xc9, 0x64, 0xb2, 0x59, 0x2c, + 0x96, 0x4b, 0x25, 0x92, 0xc9, 0x64, 0xb2, 0x59, + 0x2c, 0x96, 0x4b, 0x25, 0x92, 0xc9, 0x64, 0xb2, + 0x59, 0x2f, 0x7b, 0x70, 0x64, 0x64, 0x64, 0x64, + 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, + 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, + 0x64, 0x27, 0xcd, 0xb6, 0x7c, 0x9e, 0x42, 0x52, + 0xe0, 0xbf, 0x6e, 0x8a, 0x54, 0xd1, 0xd8, 0x4a, + 0xdd, 0x36, 0x95, 0x75, 0x53, 0x22, 0xb5, 0x6e, + 0xa7, 0x45, 0x4b, 0xd1, 0x8e, 0xd5, 0x3c, 0x68, + 0xec, 0x5c, 0xb7, 0x4a, 0xb8, 0xd7, 0x62, 0xab, + 0x4b, 0xd3, 0xc9, 0xd8, 0xbd, 0xaf, 0xc9, 0x82, + 0x3c, 0xe5, 0xb9, 0xef, 0x8e, 0x78, 0xdd, 0x1f, + 0x43, 0x6c, 0xf9, 0x3c, 0x8d, 0x99, 0x7f, 0x3c, + 0x9f, 0x62, 0x9a, 0xa8, 0xba, 0xaa, 0xa6, 0x95, + 0x02, 0xb9, 0xc3, 0xb1, 0x4b, 0x83, 0xdd, 0x76, + 0x8a, 0xd7, 0xa0, 0xea, 0x5c, 0x27, 0x57, 0x7f, + 0x42, 0xf7, 0xca, 0xe9, 0x2b, 0x73, 0xd6, 0xa5, + 0x1d, 0x7c, 0x9d, 0x8b, 0xda, 0xfc, 0x95, 0xe7, + 0xaf, 0x35, 0x6f, 0xf5, 0xf3, 0xb6, 0xcf, 0x93, + 0xeb, 0xec, 0x5e, 0xd7, 0xe5, 0x49, 0x24, 0x92, + 0x49, 0x24, 0xf9, 0x14, 0xee, 0x7c, 0xb2, 0x49, + 0x24, 0xee, 0x9d, 0xd2, 0x49, 0x24, 0x92, 0x4f, + 0x97, 0xb6, 0x7c, 0x9c, 0xb6, 0xad, 0xf1, 0x25, + 0xbf, 0x44, 0x55, 0x45, 0xb7, 0x4c, 0xd0, 0xca, + 0x6c, 0xdc, 0xad, 0x4a, 0x45, 0x36, 0xab, 0xab, + 0xd1, 0x0e, 0xc5, 0x4a, 0xde, 0x67, 0x06, 0xbc, + 0x72, 0x83, 0x87, 0x54, 0x27, 0xa9, 0x45, 0x09, + 0x64, 0xab, 0x5d, 0x51, 0xc2, 0xa5, 0xa4, 0xff, + 0x00, 0xec, 0xb8, 0xb1, 0xad, 0xa4, 0x5a, 0xb2, + 0xae, 0x5b, 0x75, 0x77, 0x2d, 0x59, 0x55, 0xd0, + 0xea, 0x65, 0x8b, 0x2a, 0xe7, 0x5a, 0xb9, 0xb6, + 0x2f, 0x6b, 0xdd, 0x04, 0x22, 0x11, 0x08, 0x84, + 0x42, 0x21, 0x10, 0x88, 0x44, 0x22, 0x11, 0x08, + 0x84, 0x42, 0x21, 0x10, 0x88, 0x44, 0x22, 0x11, + 0x08, 0x84, 0x42, 0xdf, 0x12, 0x62, 0x62, 0x62, + 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, + 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, + 0x62, 0x62, 0x44, 0x73, 0x6d, 0x9f, 0x27, 0x2d, + 0x8f, 0xe5, 0x4d, 0x54, 0x77, 0x67, 0x02, 0xa5, + 0x4b, 0xaa, 0xae, 0x83, 0xa6, 0xaa, 0x9d, 0xb7, + 0x47, 0xa1, 0x71, 0xff, 0x00, 0x0a, 0xe3, 0x52, + 0x26, 0xc2, 0xff, 0x00, 0x65, 0x6e, 0x2b, 0xc9, + 0x53, 0x26, 0xcd, 0xfc, 0x69, 0xfe, 0x5d, 0xfd, + 0x0a, 0xb2, 0xa5, 0xb4, 0xcc, 0x9e, 0xa5, 0x0e, + 0x89, 0x9b, 0x85, 0xaa, 0x95, 0x34, 0x4a, 0xf4, + 0x92, 0x30, 0x6e, 0xda, 0xd1, 0x96, 0xb0, 0x75, + 0x2c, 0x6a, 0xf4, 0x2a, 0x49, 0x3e, 0x9c, 0xbb, + 0x17, 0xb5, 0xfe, 0xb6, 0xd9, 0xf2, 0x73, 0x3a, + 0xaa, 0xab, 0xd5, 0x8a, 0xaa, 0x97, 0x44, 0xc9, + 0x71, 0x06, 0x4d, 0x28, 0x93, 0x2a, 0xa2, 0x24, + 0xc9, 0xb1, 0xb6, 0xfa, 0xbd, 0xf2, 0xe2, 0x0c, + 0xea, 0xf5, 0x91, 0x37, 0x4f, 0x55, 0xcd, 0xb1, + 0x7b, 0x5f, 0xeb, 0x6d, 0x9f, 0x27, 0x2d, 0x54, + 0xa5, 0x4a, 0xab, 0x53, 0x87, 0x2a, 0x9c, 0x7b, + 0x95, 0x51, 0x55, 0x3d, 0x59, 0xc3, 0x6e, 0x8c, + 0xca, 0xad, 0xd7, 0x4a, 0x96, 0x8a, 0x52, 0x6f, + 0xa9, 0x55, 0x09, 0x5c, 0xc6, 0x7a, 0x1c, 0x3a, + 0x6a, 0x49, 0xd0, 0x3a, 0x28, 0x87, 0x87, 0x62, + 0xd5, 0xb5, 0x71, 0x32, 0xd5, 0xb5, 0x5c, 0xc9, + 0x5d, 0x2a, 0x98, 0x1d, 0xae, 0xa9, 0x53, 0xa1, + 0x55, 0x15, 0x51, 0xee, 0xe5, 0xd8, 0xbd, 0xaf, + 0xed, 0x4c, 0x19, 0x2d, 0x4c, 0x96, 0xa7, 0xaf, + 0xd9, 0xdb, 0x3e, 0x4e, 0x56, 0x9d, 0x56, 0xe9, + 0x82, 0x85, 0x15, 0x51, 0x4f, 0x7e, 0xa4, 0x35, + 0x69, 0xce, 0xa5, 0xaf, 0x6a, 0xff, 0x00, 0x62, + 0x4e, 0x95, 0x5e, 0x42, 0x53, 0xe8, 0x5c, 0xa1, + 0xd5, 0x76, 0x04, 0xf1, 0xae, 0x95, 0xd9, 0x0a, + 0x97, 0x42, 0xaf, 0x22, 0xd3, 0xc6, 0x96, 0xff, + 0x00, 0xd1, 0x0a, 0x87, 0x8a, 0xef, 0x2f, 0xff, + 0x00, 0x85, 0x77, 0x31, 0x54, 0xa8, 0x5e, 0x85, + 0x74, 0xf1, 0x2b, 0x4d, 0xfa, 0x42, 0x2b, 0x6e, + 0xa7, 0x2f, 0x97, 0x62, 0xf6, 0xbf, 0xb5, 0xb5, + 0xf6, 0x30, 0xa4, 0x85, 0x06, 0xcb, 0xed, 0x7f, + 0x67, 0x6c, 0xf9, 0x39, 0x55, 0x4e, 0x9f, 0x46, + 0x51, 0x5e, 0x35, 0x64, 0xc7, 0x53, 0x7e, 0xa4, + 0xb5, 0xd0, 0x75, 0x37, 0xea, 0xc5, 0x53, 0xa7, + 0xaa, 0x38, 0x95, 0xea, 0x3a, 0xea, 0xab, 0xa3, + 0x63, 0xa9, 0xbf, 0x56, 0x49, 0x93, 0x25, 0xb1, + 0x57, 0x52, 0xf4, 0x63, 0xaa, 0xaa, 0xbd, 0x5f, + 0x2e, 0xc5, 0xed, 0x7f, 0x6a, 0xfd, 0xa7, 0x76, + 0x20, 0xf0, 0xd7, 0x35, 0x3c, 0x35, 0xcf, 0x49, + 0x2c, 0xdb, 0x76, 0xd4, 0x3f, 0xb3, 0xb6, 0x7c, + 0x9f, 0x5f, 0x62, 0xf6, 0xbf, 0xd6, 0xdb, 0x3e, + 0x4f, 0xaf, 0xb1, 0x7b, 0x5f, 0xeb, 0x6d, 0x9f, + 0x27, 0xd7, 0xd8, 0xbd, 0xaf, 0xf5, 0xb6, 0x9b, + 0x55, 0xd7, 0x5c, 0xd2, 0x8e, 0x05, 0xcd, 0x0e, + 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, + 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, + 0xcd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0e, + 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, + 0x0e, 0x05, 0xdd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, + 0xcd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0e, + 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, + 0x0e, 0x05, 0xcd, 0x0e, 0x05, 0xcd, 0x0d, 0x96, + 0x8a, 0xa8, 0xa5, 0xe5, 0xfd, 0x01, 0x6f, 0xeb, + 0x27, 0xfb, 0x4b, 0x74, 0x10, 0x41, 0x04, 0x10, + 0x76, 0x3b, 0x10, 0x40, 0xf7, 0x41, 0x1f, 0xe0, + 0x1d, 0xb9, 0x7b, 0x6f, 0xff, 0x00, 0x9f, 0x25, + 0x7e, 0xbb, 0x5c, 0xb3, 0xf4, 0x52, 0xfd, 0x55, + 0xfa, 0xcf, 0x72, 0xdd, 0x04, 0x10, 0x41, 0x03, + 0x18, 0xc8, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, + 0x23, 0x72, 0xfd, 0x67, 0xbe, 0x46, 0x49, 0x3b, + 0xd9, 0x24, 0xef, 0x9e, 0x49, 0x27, 0x74, 0xee, + 0x5f, 0xaf, 0x0c, 0xea, 0x75, 0x3a, 0x9d, 0x4e, + 0xa7, 0x53, 0xa9, 0xd4, 0xea, 0x75, 0x3a, 0x9d, + 0x4e, 0xa7, 0x53, 0xa9, 0xd4, 0xea, 0x75, 0x3a, + 0x9d, 0x4e, 0xa2, 0x5f, 0xd1, 0xe9, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x4e, 0x7f, + 0x7e, 0x08, 0x23, 0xcc, 0x5f, 0xbf, 0xdb, 0x93, + 0xbe, 0xe7, 0xe4, 0x2f, 0xdf, 0x9d, 0xd2, 0x49, + 0x22, 0x7e, 0x4d, 0x3f, 0xaf, 0x04, 0x10, 0x41, + 0x04, 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, 0x10, + 0x41, 0x04, 0x10, 0x41, 0x04, 0x7f, 0x54, 0xdb, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x13, 0xdf, 0x24, + 0xb2, 0x59, 0x2c, 0x96, 0x4b, 0x25, 0x92, 0xc9, + 0x64, 0xb2, 0x59, 0x2c, 0x96, 0x4b, 0x25, 0x92, + 0xc9, 0x64, 0xb2, 0x59, 0x2c, 0x96, 0x4e, 0xf6, + 0xcc, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, + 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, + 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x85, 0x57, 0x33, + 0xdf, 0x1c, 0xcc, 0x8e, 0x58, 0xf3, 0x23, 0xc8, + 0x8e, 0x48, 0xe5, 0x8d, 0xf4, 0xf9, 0x51, 0xc9, + 0x1f, 0x41, 0xf2, 0x77, 0xe5, 0x7f, 0x4f, 0xb7, + 0x32, 0xf5, 0xdf, 0xdb, 0xc8, 0x7b, 0x97, 0x9e, + 0xbc, 0xf7, 0xbe, 0x49, 0x24, 0x9d, 0xd3, 0xbe, + 0x49, 0x24, 0x6c, 0x92, 0x49, 0x24, 0x92, 0x79, + 0xe7, 0x74, 0x93, 0xba, 0x49, 0xdf, 0x3b, 0xa4, + 0x9d, 0xd3, 0xba, 0x49, 0xdf, 0x4e, 0xe7, 0xe4, + 0xc9, 0x24, 0x92, 0x49, 0x3e, 0x7e, 0x26, 0x26, + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, + 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, + 0x26, 0x26, 0x24, 0x6f, 0x82, 0x11, 0x08, 0x84, + 0x42, 0x21, 0x10, 0x88, 0x44, 0x22, 0x11, 0x08, + 0x84, 0x42, 0x21, 0x10, 0x88, 0x44, 0x22, 0x11, + 0x08, 0x84, 0x42, 0x21, 0x6f, 0x82, 0x11, 0x08, + 0x84, 0x42, 0x21, 0x10, 0x88, 0x44, 0x22, 0x11, + 0x08, 0x84, 0x42, 0x21, 0x10, 0x88, 0x44, 0x22, + 0x11, 0x08, 0x84, 0x42, 0x21, 0x11, 0xfd, 0xd4, + 0x6c, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0x4f, 0xf5, + 0xdf, 0x24, 0x72, 0xc1, 0x1f, 0xe0, 0x6f, 0x93, + 0xb7, 0x23, 0x3b, 0x6e, 0xed, 0xfe, 0x04, 0xf9, + 0x24, 0x92, 0x49, 0x27, 0x7c, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x3f, 0xb9, 0x08, 0x84, 0x42, 0x21, + 0x10, 0x88, 0x44, 0x22, 0x11, 0x08, 0x84, 0x42, + 0x21, 0x10, 0x88, 0x44, 0x22, 0x11, 0x08, 0x84, + 0x42, 0x21, 0x10, 0xbf, 0xf0, 0x3d, 0xff, 0xc4, + 0x00, 0x38, 0x11, 0x00, 0x01, 0x04, 0x01, 0x02, + 0x04, 0x04, 0x04, 0x05, 0x04, 0x01, 0x04, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x11, + 0x14, 0x12, 0x51, 0x04, 0x13, 0x21, 0x31, 0x22, + 0x32, 0x41, 0x52, 0x10, 0x20, 0x61, 0x62, 0x05, + 0x33, 0x40, 0x50, 0x71, 0x23, 0x30, 0x42, 0x80, + 0x81, 0x43, 0x91, 0xc1, 0xf0, 0xa0, 0xa1, 0xe1, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, + 0x3f, 0x01, 0xff, 0x00, 0x61, 0x59, 0xc3, 0x4b, + 0x22, 0x5a, 0x21, 0x85, 0x36, 0xc6, 0x14, 0xdb, + 0x18, 0x53, 0x6c, 0x61, 0x4d, 0xb1, 0x85, 0x36, + 0xc6, 0x14, 0xdb, 0x18, 0x53, 0x6c, 0x61, 0x4d, + 0xb1, 0x85, 0x36, 0xc6, 0x14, 0xdb, 0x18, 0x53, + 0x6c, 0x61, 0x4d, 0xb1, 0x85, 0x36, 0xc6, 0x14, + 0xdb, 0x18, 0x53, 0x6c, 0x61, 0x4d, 0xb1, 0x85, + 0x36, 0xc6, 0x14, 0xdb, 0x18, 0x53, 0x6c, 0x61, + 0x4d, 0xb1, 0x24, 0x2f, 0x8b, 0xcc, 0x9f, 0xbb, + 0xf0, 0x50, 0x23, 0xd7, 0x5b, 0xbf, 0x4c, 0xa8, + 0x8e, 0x4a, 0x53, 0x88, 0x8b, 0x93, 0x26, 0x9f, + 0x84, 0x9c, 0x52, 0xdf, 0x80, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0x4e, 0x2a, 0x4f, + 0x52, 0x37, 0xa4, 0x8d, 0xb4, 0xf8, 0x4b, 0x3a, + 0x47, 0xd0, 0xcc, 0xfb, 0x4c, 0xcf, 0xb4, 0xcc, + 0xfb, 0x4c, 0xcf, 0xb4, 0xcc, 0xfb, 0x4c, 0xcf, + 0xb4, 0xcc, 0xfb, 0x4c, 0xcf, 0xb4, 0xcc, 0xfb, + 0x4c, 0xcf, 0xb4, 0xcc, 0xfb, 0x4c, 0xcf, 0xb4, + 0xcc, 0xfb, 0x4c, 0xcf, 0xb4, 0xcc, 0xfb, 0x4c, + 0xcf, 0xb4, 0xcc, 0xfb, 0x4c, 0xcf, 0xb4, 0xcc, + 0xfb, 0x4c, 0xcf, 0xb4, 0xcc, 0xfb, 0x48, 0xb8, + 0x84, 0x91, 0x69, 0x7a, 0x7c, 0xdc, 0x07, 0xe5, + 0x7f, 0x61, 0x57, 0x4a, 0x5a, 0x9c, 0x34, 0xd2, + 0x39, 0xd5, 0x27, 0xaf, 0x54, 0x1c, 0xe9, 0x5f, + 0x33, 0x98, 0xc7, 0x55, 0x0b, 0x34, 0xac, 0x6b, + 0xda, 0xab, 0xd5, 0x04, 0x9d, 0xdc, 0x8d, 0x5f, + 0xe5, 0xd8, 0x86, 0x67, 0xba, 0x24, 0x5f, 0x55, + 0x19, 0x33, 0xbb, 0xff, 0x00, 0xcf, 0xfc, 0x7d, + 0x3f, 0xb3, 0xf8, 0x87, 0x9d, 0x07, 0xf9, 0x54, + 0xd2, 0x69, 0x34, 0x9a, 0x4d, 0x26, 0x93, 0x49, + 0x1c, 0x3c, 0xcb, 0x19, 0x0e, 0xbb, 0x34, 0x2f, + 0x73, 0x42, 0xa9, 0xa1, 0x7b, 0x9a, 0x15, 0x4d, + 0x0a, 0x68, 0x5e, 0xc6, 0x93, 0x49, 0xa4, 0xd2, + 0x69, 0x34, 0x9a, 0x4e, 0x17, 0xb2, 0xfc, 0x24, + 0x4b, 0x7a, 0x9a, 0x4d, 0x22, 0x70, 0xea, 0xa9, + 0x76, 0x2b, 0x15, 0xab, 0x4a, 0x69, 0x34, 0x9a, + 0x4d, 0x26, 0x91, 0xd0, 0xab, 0x52, 0xc4, 0x62, + 0xb9, 0x69, 0x07, 0x40, 0xe6, 0xa5, 0x8e, 0x8f, + 0x4d, 0x1a, 0x4d, 0x23, 0xe3, 0xd0, 0xb4, 0x2b, + 0x13, 0xd0, 0xd2, 0x69, 0x34, 0x9a, 0x44, 0x4a, + 0xeb, 0xf3, 0x70, 0x1f, 0x95, 0xfd, 0x8e, 0x2d, + 0xd5, 0x1e, 0x94, 0xf5, 0xe8, 0x39, 0x8f, 0x81, + 0xcc, 0x7b, 0x9d, 0x68, 0x9d, 0x05, 0x8f, 0x9b, + 0xc4, 0xb9, 0x2e, 0x8e, 0x8c, 0x86, 0x48, 0xd7, + 0xcc, 0x23, 0x17, 0x9e, 0x8c, 0xf4, 0xee, 0x70, + 0xf7, 0xc9, 0x6b, 0x93, 0xea, 0x46, 0xdd, 0x3d, + 0x1a, 0xb6, 0xaa, 0x95, 0xfc, 0x7f, 0xf8, 0x27, + 0x4f, 0xec, 0x7e, 0x21, 0xe7, 0x41, 0xfe, 0x55, + 0x2c, 0xb2, 0xcb, 0x2c, 0xb2, 0xc8, 0x9d, 0x4d, + 0x72, 0x9e, 0x55, 0xaf, 0xe4, 0xd4, 0x8d, 0xd2, + 0x23, 0xa9, 0xad, 0xa1, 0x5d, 0x7a, 0xd0, 0xb5, + 0x45, 0x62, 0x34, 0x95, 0xda, 0x5b, 0xd0, 0x6a, + 0xda, 0x24, 0x9b, 0x16, 0x59, 0x65, 0x96, 0x59, + 0x67, 0x0d, 0xeb, 0xf0, 0x7f, 0x99, 0x7e, 0x2e, + 0xd1, 0x4d, 0xd4, 0xa6, 0xbb, 0xd4, 0xf4, 0x3c, + 0xcc, 0xfe, 0x4e, 0x96, 0x9f, 0x41, 0x15, 0x1a, + 0xd4, 0x5b, 0xee, 0x6a, 0x46, 0xb1, 0x55, 0xbb, + 0x8c, 0x4d, 0x6e, 0xa1, 0xde, 0x34, 0xb4, 0xec, + 0x43, 0xea, 0x36, 0xfd, 0x04, 0xf4, 0x5f, 0xa0, + 0x9f, 0xd4, 0x6a, 0x2b, 0xb7, 0x1e, 0xf5, 0x5b, + 0x6d, 0x12, 0x74, 0x45, 0x54, 0xee, 0x27, 0xa7, + 0xf0, 0x27, 0x8d, 0xa8, 0xab, 0xb9, 0xaa, 0xf5, + 0xa7, 0xf6, 0x78, 0x0f, 0xca, 0xfd, 0x3f, 0xe2, + 0x1e, 0x74, 0x1c, 0x96, 0x94, 0x2f, 0x4e, 0x8a, + 0x59, 0x65, 0x96, 0x59, 0x62, 0x3d, 0x51, 0x28, + 0xe6, 0xba, 0xee, 0xc4, 0x99, 0xe8, 0x94, 0x8a, + 0x73, 0x16, 0x91, 0x0e, 0x6b, 0xba, 0xfd, 0x44, + 0x99, 0xed, 0x4a, 0x45, 0x39, 0x8a, 0xa9, 0x42, + 0xc8, 0xd6, 0xc7, 0xa5, 0xab, 0xdc, 0xb2, 0xcb, + 0x2c, 0xb2, 0xcb, 0x38, 0x54, 0x5d, 0x37, 0xf0, + 0x97, 0xa3, 0xd4, 0xb2, 0xc7, 0x48, 0xae, 0xa1, + 0xb2, 0x2b, 0x3b, 0x1c, 0xf7, 0x6a, 0xd4, 0x24, + 0xca, 0x97, 0xf5, 0x1b, 0x32, 0xb5, 0x28, 0xe6, + 0xaa, 0xa5, 0x0d, 0x7a, 0xb5, 0x6d, 0x0c, 0x85, + 0xd8, 0x47, 0xab, 0x56, 0xd0, 0x74, 0xee, 0x72, + 0x51, 0xce, 0x77, 0x4f, 0xa0, 0xe9, 0x95, 0xc3, + 0xa7, 0x73, 0x92, 0x8e, 0x7a, 0xdd, 0x9c, 0xf5, + 0x12, 0x45, 0xad, 0x23, 0xa4, 0x44, 0x45, 0xb5, + 0x42, 0xcb, 0x13, 0xaa, 0xd2, 0x7c, 0xdc, 0x07, + 0xe5, 0x7c, 0xb3, 0xcd, 0xca, 0xa4, 0x44, 0xb5, + 0x51, 0x92, 0x4c, 0x8f, 0x46, 0xc8, 0xde, 0xfb, + 0x0f, 0xe2, 0x22, 0x62, 0xe9, 0x72, 0x8e, 0x9e, + 0x36, 0x79, 0x94, 0x4e, 0x25, 0xae, 0x97, 0x96, + 0x73, 0xe3, 0xd5, 0xa2, 0xfa, 0x9c, 0xd6, 0x5a, + 0xa5, 0xf6, 0x24, 0x91, 0xcb, 0xa5, 0xd1, 0xaf, + 0x45, 0xfa, 0x0b, 0x3b, 0xda, 0xae, 0x6f, 0xfd, + 0x88, 0x9c, 0xae, 0x62, 0x39, 0x49, 0xb8, 0x87, + 0x45, 0x2a, 0x37, 0xd0, 0x9b, 0x88, 0x74, 0x72, + 0x35, 0x8d, 0x38, 0x9e, 0x21, 0x61, 0xe8, 0xde, + 0xff, 0x00, 0x37, 0xe2, 0x1e, 0x74, 0xf8, 0x3a, + 0x26, 0x3f, 0xcc, 0x86, 0x34, 0x5b, 0x18, 0xd1, + 0x6c, 0x63, 0x45, 0xb1, 0x8d, 0x16, 0xc6, 0x34, + 0x5b, 0x18, 0xd1, 0x6c, 0x63, 0x45, 0xb1, 0x8d, + 0x16, 0xc6, 0x34, 0x5b, 0x18, 0xd1, 0x6c, 0x63, + 0x45, 0xb1, 0x8d, 0x16, 0xc6, 0x34, 0x5b, 0x18, + 0xd1, 0x6c, 0x63, 0x45, 0xb1, 0x8d, 0x16, 0xc6, + 0x34, 0x5b, 0x18, 0xd1, 0x6c, 0x63, 0x45, 0xb1, + 0x8d, 0x16, 0xc2, 0x70, 0xf1, 0x27, 0xa7, 0xc6, + 0x48, 0x5b, 0x2f, 0x73, 0x0d, 0x9b, 0xa9, 0x86, + 0xcd, 0xd4, 0xc3, 0x66, 0xea, 0x61, 0xb3, 0x75, + 0x30, 0xd9, 0xba, 0x98, 0x6c, 0xdd, 0x4c, 0x36, + 0x6e, 0xa6, 0x1b, 0x37, 0x53, 0x0d, 0x9b, 0xa9, + 0x86, 0xcd, 0xd4, 0xc3, 0x66, 0xea, 0x61, 0xb3, + 0x75, 0x30, 0xd9, 0xba, 0x98, 0x6c, 0xdd, 0x4c, + 0x36, 0x6e, 0xa6, 0x1b, 0x37, 0x53, 0x0d, 0x9b, + 0xa9, 0x86, 0xcd, 0xd4, 0xc3, 0x66, 0xea, 0x61, + 0xb3, 0x75, 0x30, 0xd9, 0xba, 0x91, 0xc0, 0xc8, + 0xfa, 0xa7, 0xcd, 0xc0, 0x7e, 0x57, 0xcb, 0xc4, + 0xf8, 0x1e, 0xc9, 0x17, 0xb2, 0x19, 0x2c, 0x57, + 0xa3, 0x19, 0xd4, 0x6b, 0x98, 0xc4, 0x95, 0x24, + 0xee, 0x42, 0xdf, 0xea, 0x47, 0xab, 0x61, 0x16, + 0xb8, 0x97, 0x7f, 0x04, 0x69, 0x71, 0xe9, 0x73, + 0xeb, 0xaf, 0x6a, 0x38, 0xbf, 0x13, 0xfc, 0x3e, + 0x9d, 0xff, 0x00, 0x81, 0xba, 0x5e, 0xd4, 0x54, + 0xec, 0x69, 0x6e, 0xc4, 0x89, 0x25, 0x22, 0x44, + 0x4c, 0xc5, 0x7c, 0x9a, 0x5d, 0xdf, 0x49, 0x6b, + 0x22, 0x24, 0xab, 0xea, 0xe4, 0x26, 0xe6, 0x23, + 0x1d, 0xad, 0xbd, 0xfd, 0x46, 0xaa, 0xaa, 0x5a, + 0xa5, 0x7c, 0xbf, 0x88, 0x79, 0xd3, 0xf7, 0x6e, + 0x03, 0xf2, 0xbe, 0x5e, 0xe3, 0x58, 0xd6, 0xf9, + 0x50, 0x56, 0x35, 0xcb, 0x6a, 0x86, 0x94, 0xbb, + 0x34, 0xb5, 0x56, 0xe8, 0xd0, 0xdb, 0xd5, 0x5d, + 0x4d, 0x2d, 0x4e, 0xc8, 0x23, 0x51, 0xa9, 0x49, + 0xf1, 0xd2, 0x97, 0x66, 0x86, 0xd5, 0x50, 0xad, + 0x47, 0x74, 0x5f, 0x9b, 0xf1, 0x0f, 0x3a, 0x7e, + 0xed, 0xc0, 0x7e, 0x57, 0xca, 0xd7, 0xaa, 0xbd, + 0xcd, 0xd8, 0xe6, 0xd2, 0xbb, 0x57, 0x64, 0x1b, + 0x23, 0x5e, 0xb4, 0x82, 0xca, 0x89, 0x27, 0x2c, + 0x6c, 0xcc, 0x7a, 0xd3, 0x54, 0x7a, 0xaa, 0x27, + 0x85, 0x06, 0xc8, 0xe5, 0x8b, 0x5d, 0x75, 0x39, + 0xae, 0x62, 0xaa, 0x49, 0xb5, 0x8d, 0x92, 0x44, + 0x54, 0xd7, 0xea, 0x4d, 0x2a, 0xc4, 0xad, 0x27, + 0x95, 0x63, 0xaa, 0xf5, 0x23, 0x7a, 0xbf, 0x55, + 0xfa, 0x28, 0xd9, 0xba, 0x2a, 0xbb, 0x71, 0x92, + 0x36, 0x4f, 0x2f, 0xcb, 0xf8, 0x87, 0x9d, 0x3f, + 0x54, 0x88, 0xab, 0xd8, 0xd0, 0xed, 0x8d, 0x0e, + 0xd8, 0xaa, 0xfd, 0x4f, 0x01, 0xf9, 0x5f, 0x2a, + 0x39, 0x19, 0x33, 0xb5, 0x7a, 0xd0, 0xf5, 0x47, + 0x32, 0x47, 0xfa, 0x5a, 0x7f, 0xe0, 0xb4, 0x74, + 0xcd, 0xd3, 0xb1, 0x3f, 0x99, 0xc8, 0x9e, 0xd1, + 0x5c, 0xd7, 0x2c, 0x7a, 0x7f, 0xf7, 0xa0, 0xaa, + 0x89, 0xdc, 0x86, 0x46, 0xb2, 0x04, 0x55, 0x15, + 0xba, 0xd8, 0xe5, 0x55, 0xf1, 0x2a, 0x0e, 0x7a, + 0x48, 0xac, 0xd3, 0xfc, 0x93, 0x37, 0x5b, 0x9a, + 0xd5, 0xfa, 0x96, 0xb2, 0x37, 0x52, 0xfa, 0x52, + 0x7f, 0xf7, 0xd4, 0x8e, 0x2d, 0x6a, 0xf5, 0xb5, + 0xee, 0x31, 0xfc, 0xa8, 0xd5, 0x13, 0xbd, 0xa9, + 0x1b, 0x51, 0xad, 0xa4, 0xf9, 0x7f, 0x10, 0xf3, + 0xa7, 0xea, 0xb8, 0x0f, 0xf2, 0x39, 0x8f, 0xa5, + 0xff, 0x00, 0xdf, 0xfc, 0x96, 0xb6, 0x71, 0xde, + 0x74, 0xfd, 0x4f, 0x01, 0xf9, 0x5f, 0x2b, 0x9a, + 0xd7, 0x79, 0x90, 0x91, 0x9a, 0x99, 0xa5, 0xa2, + 0x35, 0xad, 0xec, 0x82, 0xb5, 0x15, 0x6d, 0x44, + 0x63, 0x5b, 0xd5, 0x10, 0x73, 0x51, 0xdd, 0x1c, + 0x87, 0x2a, 0x3e, 0xda, 0x50, 0x6c, 0x6c, 0x6f, + 0x56, 0xa0, 0x8d, 0x6b, 0x7a, 0xa2, 0x14, 0x9d, + 0xcd, 0x29, 0xb0, 0x88, 0x89, 0xd8, 0x58, 0xd8, + 0xbd, 0xd0, 0x6b, 0x1a, 0xcf, 0x2a, 0x57, 0xcb, + 0xf8, 0x87, 0x9d, 0x3f, 0x55, 0xc3, 0x4e, 0x90, + 0xdd, 0x99, 0x91, 0x6c, 0x66, 0x45, 0x77, 0x47, + 0x11, 0x32, 0x4c, 0xeb, 0x4f, 0xd4, 0xf0, 0x1f, + 0x95, 0xfa, 0x7f, 0xc4, 0x3c, 0xe9, 0xfb, 0xb7, + 0x01, 0xf9, 0x5f, 0xa7, 0xfc, 0x43, 0xce, 0x9f, + 0xbb, 0x70, 0x1f, 0x95, 0xfa, 0x7f, 0xc4, 0x3c, + 0xe9, 0xfb, 0xb7, 0x07, 0x34, 0x6c, 0x8e, 0x9c, + 0xa6, 0x4c, 0x3e, 0xe3, 0x26, 0x1f, 0x71, 0x93, + 0x0f, 0xb8, 0xc9, 0x87, 0xdc, 0x64, 0xc3, 0xee, + 0x32, 0x61, 0xf7, 0x19, 0x30, 0xfb, 0x8c, 0x98, + 0x7d, 0xc6, 0x4c, 0x3e, 0xe3, 0x26, 0x1f, 0x71, + 0x93, 0x0f, 0xb8, 0xc9, 0x87, 0xdc, 0x64, 0xc3, + 0xee, 0x32, 0x61, 0xf7, 0x19, 0x30, 0xfb, 0x8c, + 0x98, 0x7d, 0xc6, 0x4c, 0x3e, 0xe3, 0x26, 0x1f, + 0x71, 0x93, 0x0f, 0xb8, 0xc9, 0x87, 0xdc, 0x64, + 0xc3, 0xee, 0x32, 0x61, 0xf7, 0x1c, 0x6c, 0x8d, + 0x91, 0xc9, 0xa5, 0x7f, 0xd0, 0x19, 0xe5, 0x72, + 0xba, 0x90, 0xb5, 0xdc, 0xb7, 0x6e, 0x5b, 0xb7, + 0x2d, 0xdb, 0x96, 0xed, 0xcb, 0x76, 0xe5, 0xbb, + 0x72, 0xdd, 0xb9, 0x6e, 0xdc, 0xb7, 0x6e, 0x5b, + 0xb7, 0x2d, 0xdb, 0x96, 0xed, 0xcb, 0x76, 0xe5, + 0xbb, 0x72, 0xdd, 0xb9, 0x6e, 0xdc, 0xb7, 0x6e, + 0x5b, 0xb7, 0x2d, 0xdb, 0x96, 0xed, 0xce, 0x1e, + 0x57, 0x6a, 0xd2, 0xef, 0xdd, 0xde, 0x9e, 0x25, + 0x28, 0xa2, 0x26, 0x22, 0xbb, 0xa8, 0xf4, 0xe9, + 0x4e, 0x6d, 0x1c, 0x9f, 0x12, 0xa1, 0xc9, 0x4a, + 0xea, 0xa3, 0xe2, 0x4a, 0x4d, 0x23, 0xa1, 0xa4, + 0xe8, 0xa6, 0x3f, 0xa5, 0x8e, 0x8f, 0x4a, 0x5a, + 0x1a, 0x11, 0x62, 0xfa, 0x8a, 0xc4, 0x48, 0xbe, + 0xa7, 0x23, 0xd2, 0xfa, 0x8d, 0x8b, 0xa5, 0xaa, + 0x93, 0x33, 0xaa, 0xb8, 0x63, 0x34, 0x3b, 0xfe, + 0x06, 0xc5, 0x69, 0x6a, 0xa2, 0x45, 0xea, 0xe5, + 0x15, 0x94, 0xb4, 0x51, 0x44, 0x69, 0xe3, 0x4f, + 0xdd, 0xde, 0xbe, 0x25, 0x2c, 0xb1, 0x9a, 0x55, + 0x7c, 0x4a, 0x39, 0xda, 0x58, 0xa8, 0xae, 0xb1, + 0x5f, 0xfd, 0x2d, 0x43, 0x1c, 0x95, 0xd5, 0x7a, + 0x0a, 0xf6, 0xf8, 0x5d, 0x64, 0x8f, 0xe8, 0xbe, + 0x23, 0x5a, 0x73, 0x17, 0xaf, 0xa0, 0xae, 0x4e, + 0x5a, 0x0d, 0x7a, 0x53, 0x47, 0x48, 0x8a, 0x8e, + 0x35, 0x37, 0x5f, 0x32, 0xcd, 0x4d, 0x7b, 0x53, + 0xaf, 0x61, 0xee, 0x6b, 0xad, 0x2c, 0xd6, 0xdd, + 0x5d, 0xfd, 0x06, 0xbe, 0xd8, 0x88, 0x8b, 0x43, + 0x5f, 0xde, 0x9c, 0x48, 0xe6, 0xea, 0xf0, 0x96, + 0x59, 0x1a, 0xf8, 0xd3, 0xf5, 0xf6, 0x5a, 0x16, + 0x85, 0xa1, 0x68, 0x5a, 0x16, 0x85, 0xa1, 0x68, + 0x5a, 0x16, 0x85, 0xa1, 0x68, 0x5a, 0x16, 0x85, + 0xa1, 0x68, 0x5a, 0x16, 0x85, 0xa1, 0x68, 0x5a, + 0x7c, 0x67, 0x89, 0xcd, 0x75, 0xa2, 0x74, 0x3a, + 0x9d, 0x4e, 0xa7, 0x51, 0xf2, 0x39, 0xfe, 0x87, + 0x53, 0xa9, 0xd4, 0xea, 0x75, 0x3a, 0x9d, 0x4e, + 0xa7, 0x53, 0xa9, 0xd4, 0xea, 0x75, 0x3a, 0x9d, + 0x4e, 0xa7, 0x0f, 0x13, 0x95, 0xda, 0x9d, 0xfa, + 0xe9, 0x1d, 0xa5, 0xaa, 0xa3, 0x95, 0x5e, 0xb6, + 0xa5, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, + 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, + 0x1c, 0x33, 0xd5, 0x7c, 0x2b, 0xfb, 0xb4, 0xde, + 0x45, 0x28, 0x8b, 0xca, 0xba, 0x7b, 0x8a, 0xdd, + 0x6e, 0x44, 0x7a, 0x09, 0x12, 0x57, 0x53, 0x96, + 0xc4, 0x5a, 0x1d, 0x1a, 0x3a, 0x45, 0x39, 0x29, + 0x69, 0xf5, 0x39, 0x4c, 0xab, 0x24, 0x66, 0x95, + 0xa2, 0x56, 0xeb, 0x54, 0x25, 0x44, 0x72, 0xa0, + 0xb1, 0x37, 0xa2, 0xa0, 0xb1, 0x37, 0xaa, 0x27, + 0xa0, 0xd8, 0x9a, 0xef, 0xe4, 0x48, 0x9b, 0xd1, + 0x17, 0xba, 0x89, 0x12, 0x75, 0x55, 0x39, 0x28, + 0x97, 0x7e, 0x87, 0x25, 0x96, 0x9f, 0x51, 0x21, + 0x4a, 0xea, 0x72, 0x9a, 0x88, 0xaa, 0xe1, 0xb1, + 0xb5, 0xaf, 0x15, 0x13, 0xd0, 0xe1, 0xd3, 0xc7, + 0xfb, 0xb4, 0xde, 0x45, 0x2c, 0x62, 0xb1, 0x52, + 0x9c, 0x3e, 0x44, 0xe8, 0x8d, 0xf4, 0x26, 0x72, + 0x23, 0x91, 0x0e, 0x6b, 0x51, 0x3b, 0xd9, 0xcd, + 0x6a, 0x3d, 0x56, 0xfb, 0x89, 0x23, 0x51, 0xc9, + 0xe2, 0xb3, 0x98, 0x9a, 0x15, 0x09, 0x5e, 0x8e, + 0x77, 0x43, 0x9c, 0xdd, 0x4a, 0x24, 0xad, 0x45, + 0x69, 0xcc, 0x6d, 0x55, 0x9c, 0xc6, 0xea, 0x72, + 0x89, 0x33, 0x12, 0x96, 0xc4, 0x56, 0xb9, 0xcd, + 0x39, 0x89, 0xd5, 0xaa, 0xb5, 0xd4, 0xe6, 0x36, + 0x9d, 0xd4, 0xe6, 0x36, 0xda, 0x73, 0x5a, 0xa9, + 0x57, 0x42, 0xc8, 0x9a, 0x15, 0x0e, 0x6b, 0x75, + 0x27, 0xf0, 0x2a, 0xec, 0x70, 0xcb, 0xe3, 0xfd, + 0xd9, 0xcd, 0xd4, 0x94, 0x3a, 0x19, 0x1a, 0xb5, + 0x47, 0x2e, 0x4f, 0x68, 0xd6, 0xca, 0xd5, 0xb4, + 0x41, 0x59, 0x2a, 0xad, 0xaa, 0x1c, 0xb9, 0x3d, + 0xa7, 0x2e, 0x4f, 0x69, 0xcb, 0x93, 0xda, 0x72, + 0xe4, 0xf6, 0x9c, 0xb9, 0x3d, 0xa7, 0x2e, 0x4f, + 0x69, 0xcb, 0x93, 0xda, 0x72, 0xe4, 0xf6, 0x9c, + 0xb9, 0x3d, 0xa7, 0x2e, 0x4f, 0x68, 0x9c, 0xf4, + 0x4a, 0x44, 0x39, 0x72, 0x7b, 0x4e, 0x5c, 0x9e, + 0xd3, 0x97, 0x27, 0xb4, 0xe5, 0xc9, 0xed, 0x39, + 0x72, 0x7b, 0x4e, 0x5c, 0x9e, 0xd3, 0x95, 0x27, + 0xb4, 0xe1, 0xe1, 0x56, 0x78, 0x9d, 0xdf, 0xfd, + 0x1e, 0x7f, 0x15, 0x4b, 0x4d, 0x32, 0xdf, 0xb1, + 0x96, 0xfd, 0x8c, 0xb7, 0xec, 0x65, 0xbf, 0x63, + 0x2d, 0xfb, 0x19, 0x6f, 0xd8, 0xcb, 0x7e, 0xc6, + 0x5b, 0xf6, 0x32, 0xdf, 0xb1, 0x96, 0xfd, 0x8c, + 0xb7, 0xec, 0x65, 0xbf, 0x63, 0x2d, 0xfb, 0x19, + 0x6f, 0xd8, 0xcb, 0x7e, 0xc6, 0x5b, 0xf6, 0x32, + 0xdf, 0xb1, 0x96, 0xfd, 0x8c, 0xb7, 0xec, 0x65, + 0xbf, 0x63, 0x2d, 0xfb, 0x11, 0x4a, 0x92, 0xa7, + 0xee, 0xcf, 0xf2, 0xa9, 0x45, 0x14, 0x51, 0x45, + 0x14, 0x50, 0x90, 0xa2, 0xb7, 0x52, 0xa8, 0xf8, + 0xd5, 0x8a, 0x32, 0x2b, 0x72, 0x23, 0x85, 0x62, + 0xa1, 0xa1, 0x6e, 0xa8, 0xd0, 0xaa, 0x2b, 0x6b, + 0xb9, 0x45, 0x14, 0x51, 0x45, 0x14, 0x70, 0xde, + 0x6f, 0xdd, 0x9f, 0xe5, 0x52, 0xcb, 0x2c, 0xb2, + 0xcb, 0x2c, 0xb1, 0x7f, 0x2d, 0xa2, 0x77, 0x62, + 0x28, 0xc7, 0x22, 0xaf, 0xa9, 0x6a, 0xad, 0x76, + 0xa3, 0xfe, 0xb1, 0x6a, 0x8c, 0x6e, 0x92, 0x6f, + 0x3a, 0x96, 0x59, 0x65, 0x96, 0x59, 0x67, 0x0f, + 0xe6, 0xfd, 0xd9, 0xc9, 0x68, 0x5d, 0x16, 0x59, + 0x65, 0x96, 0x59, 0x63, 0x67, 0x7b, 0x52, 0x91, + 0x4e, 0x62, 0xdd, 0x9c, 0xf7, 0xaa, 0xdd, 0x8b, + 0x2b, 0x9c, 0x94, 0xaa, 0x73, 0xdf, 0xb9, 0x1c, + 0x8d, 0x46, 0xd2, 0xba, 0x89, 0x24, 0xd6, 0xe5, + 0x52, 0xcb, 0x2c, 0xb2, 0xcb, 0x2c, 0xe1, 0x51, + 0x55, 0x55, 0x7f, 0x77, 0x7c, 0x2c, 0x7f, 0x55, + 0x43, 0x16, 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, + 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, + 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, + 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, + 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, 0x33, 0x16, + 0x33, 0x16, 0x2d, 0x84, 0x44, 0x6a, 0x52, 0x7f, + 0xaa, 0x52, 0xcc, 0x91, 0x99, 0x8b, 0xb1, 0x98, + 0xbb, 0x19, 0x8b, 0xb1, 0x98, 0xbb, 0x19, 0x8b, + 0xb1, 0x98, 0xbb, 0x19, 0x8b, 0xb1, 0x98, 0xbb, + 0x19, 0x8b, 0xb1, 0x98, 0xbb, 0x19, 0x8b, 0xb1, + 0x98, 0xbb, 0x19, 0x8b, 0xb1, 0x98, 0xbb, 0x19, + 0x8b, 0xb1, 0x98, 0xbb, 0x19, 0x8b, 0xb1, 0x98, + 0xbb, 0x19, 0x8b, 0xb1, 0x98, 0xbb, 0x19, 0x8b, + 0xb1, 0x17, 0x10, 0x92, 0x2d, 0x2f, 0xc5, 0xfc, + 0x52, 0xdd, 0x30, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, + 0x90, 0xca, 0x90, 0x4e, 0x2a, 0x4f, 0x52, 0x37, + 0xa4, 0x8d, 0xb4, 0xf8, 0x4b, 0xc4, 0x68, 0x5a, + 0x43, 0x2d, 0xfb, 0x19, 0x6f, 0xd8, 0xcb, 0x7e, + 0xc6, 0x5b, 0xf6, 0x32, 0xdf, 0xb1, 0x96, 0xfd, + 0x8c, 0xb7, 0xec, 0x65, 0xbf, 0x63, 0x2d, 0xfb, + 0x19, 0x6f, 0xd8, 0xcb, 0x7e, 0xc6, 0x5b, 0xf6, + 0x32, 0xdf, 0xb1, 0x96, 0xfd, 0x8c, 0xb7, 0xec, + 0x65, 0xbf, 0x63, 0x2d, 0xfb, 0x19, 0x6f, 0xd8, + 0xcb, 0x7e, 0xc6, 0x5b, 0xf6, 0x32, 0xdf, 0xb1, + 0x17, 0x13, 0xad, 0x69, 0xdf, 0x34, 0xc9, 0xfd, + 0x45, 0x28, 0x64, 0x5a, 0xc7, 0x43, 0x49, 0xa9, + 0xab, 0x66, 0x85, 0xab, 0x39, 0x6e, 0xd8, 0x48, + 0x95, 0x5b, 0xa8, 0x56, 0x2a, 0x77, 0x34, 0x2a, + 0x75, 0x24, 0x8d, 0x18, 0xea, 0x43, 0x90, 0xda, + 0x4b, 0x70, 0xe8, 0xd5, 0x1d, 0xa4, 0xd0, 0xa7, + 0x2f, 0xa7, 0x6e, 0xa6, 0x85, 0x4f, 0x41, 0xd1, + 0x52, 0x26, 0x91, 0x18, 0xab, 0xd8, 0xd0, 0xa6, + 0x85, 0xd8, 0xe5, 0xa6, 0x8d, 0x42, 0xb1, 0x53, + 0xb9, 0x43, 0x52, 0x97, 0xe0, 0xff, 0x00, 0x2a, + 0x94, 0x69, 0x31, 0xd3, 0xb6, 0xae, 0xa6, 0x85, + 0xba, 0x34, 0x29, 0xcb, 0x5d, 0x8d, 0x0a, 0xa6, + 0x85, 0x34, 0x2f, 0x71, 0x91, 0xeb, 0x75, 0x0b, + 0x02, 0x57, 0x85, 0x4d, 0x0b, 0xdc, 0xd0, 0xa3, + 0xa3, 0xeb, 0xe1, 0x41, 0x91, 0xdb, 0xb4, 0xb8, + 0x56, 0x2a, 0x1a, 0x16, 0xac, 0xd0, 0xa2, 0xb1, + 0x53, 0xb8, 0xf8, 0xa9, 0xd4, 0xd3, 0x4d, 0x14, + 0x70, 0xbd, 0x97, 0xe1, 0x22, 0x78, 0xd4, 0xa2, + 0x8a, 0x28, 0xa2, 0x8a, 0x23, 0x8b, 0x5a, 0x8b, + 0x1a, 0xdd, 0x0a, 0xc5, 0x4e, 0xe2, 0xb1, 0x53, + 0xb9, 0x24, 0x7a, 0x5d, 0x48, 0x68, 0x54, 0xee, + 0x68, 0x54, 0xf4, 0x28, 0xa2, 0x8a, 0x28, 0xa2, + 0x8a, 0xf9, 0xa5, 0xf3, 0xaf, 0xc2, 0x3e, 0xac, + 0x72, 0x20, 0x8d, 0x5a, 0xb2, 0xd7, 0x9b, 0xa7, + 0xd0, 0xd5, 0x4a, 0xc4, 0x41, 0x56, 0x9a, 0xef, + 0xe4, 0x7a, 0xff, 0x00, 0x51, 0x1a, 0xa5, 0xaa, + 0xb9, 0xc8, 0xbd, 0x89, 0xbc, 0xe3, 0x95, 0x94, + 0xdd, 0x43, 0x5e, 0x8e, 0xd4, 0xe1, 0x1d, 0x6e, + 0xbf, 0xa0, 0xc5, 0xb6, 0xda, 0xee, 0x5a, 0xea, + 0x72, 0x29, 0xa9, 0x51, 0x58, 0x87, 0x46, 0xb5, + 0x7f, 0x93, 0x57, 0x99, 0x50, 0x65, 0xf8, 0x6d, + 0x7b, 0x9d, 0x91, 0x7f, 0x91, 0xcb, 0xa9, 0x15, + 0x51, 0x7e, 0x09, 0xf0, 0x7f, 0x95, 0x4b, 0x18, + 0xbe, 0x24, 0x1e, 0xd7, 0x2c, 0x94, 0x75, 0x6c, + 0x7d, 0x37, 0x15, 0x69, 0x15, 0x7d, 0x68, 0x47, + 0x2d, 0xb0, 0xbd, 0x2c, 0x5a, 0xdc, 0x57, 0x78, + 0xd5, 0x3e, 0x83, 0x5d, 0xaa, 0x93, 0xb2, 0x91, + 0x7e, 0x62, 0x0b, 0x23, 0x1b, 0x7a, 0x4d, 0x48, + 0xdd, 0x23, 0x9d, 0x51, 0xa5, 0x0e, 0x5f, 0x35, + 0x0d, 0x5b, 0xd1, 0x66, 0xad, 0x4c, 0x75, 0x8f, + 0x72, 0x22, 0xaa, 0x0a, 0xab, 0xe1, 0x6a, 0x0e, + 0x5b, 0x63, 0x87, 0x3a, 0x9c, 0xb6, 0x4b, 0xdd, + 0x3a, 0x96, 0x70, 0xde, 0xbf, 0x07, 0xaf, 0x89, + 0x4b, 0x2c, 0xb2, 0xcb, 0x2c, 0xb1, 0x94, 0x8c, + 0xea, 0xb5, 0x67, 0xf9, 0xea, 0x4d, 0x84, 0x55, + 0x7b, 0x13, 0xf9, 0x1c, 0xb6, 0xc7, 0x1f, 0xe6, + 0xbf, 0xc1, 0x12, 0xea, 0x44, 0x57, 0x1a, 0x95, + 0x63, 0x75, 0x96, 0x59, 0x65, 0x96, 0x59, 0x65, + 0xfc, 0xdc, 0x47, 0x49, 0x14, 0xb1, 0x1e, 0xad, + 0x5b, 0x41, 0xd2, 0xb9, 0xfd, 0xd4, 0xe7, 0x3e, + 0xb4, 0xd9, 0xcd, 0x77, 0x4f, 0xa1, 0xcd, 0x72, + 0x5f, 0xd4, 0x74, 0x8a, 0xe5, 0xb5, 0x16, 0x67, + 0xb9, 0x29, 0x54, 0x73, 0xd5, 0xcb, 0x6a, 0x2c, + 0x8a, 0xee, 0xe3, 0x64, 0x56, 0xf5, 0x43, 0x9a, + 0xeb, 0xbb, 0x19, 0x25, 0x52, 0x7a, 0x12, 0x4c, + 0xaa, 0xaa, 0x88, 0xbd, 0x0e, 0x6b, 0xba, 0x7d, + 0x04, 0x99, 0xc8, 0xb6, 0x8a, 0x73, 0x5d, 0xd7, + 0xea, 0x24, 0xae, 0x44, 0xab, 0x16, 0x67, 0x2f, + 0xa8, 0xe9, 0x9c, 0xe4, 0xa5, 0x52, 0xc6, 0x78, + 0x9c, 0x88, 0x9f, 0x07, 0x25, 0xa5, 0x0b, 0xd3, + 0xa2, 0x96, 0x73, 0xdf, 0x55, 0x63, 0x65, 0x73, + 0x3c, 0xa7, 0x35, 0xdd, 0x7e, 0xa7, 0x35, 0xdd, + 0x3e, 0x87, 0x31, 0x6a, 0x8e, 0x73, 0xae, 0xc4, + 0x99, 0xe8, 0x95, 0x63, 0x5e, 0xad, 0x5b, 0x43, + 0x50, 0x93, 0x3d, 0x12, 0x91, 0x4e, 0x62, 0xaa, + 0x50, 0xd9, 0xba, 0x39, 0x55, 0x7a, 0x9c, 0xe7, + 0x5e, 0xab, 0x39, 0x8b, 0x4a, 0x87, 0x39, 0xf5, + 0xa6, 0xce, 0x62, 0xad, 0x7d, 0x0e, 0x7b, 0xd7, + 0xd4, 0xe7, 0x3e, 0xee, 0xc7, 0x48, 0xae, 0x5b, + 0x52, 0xce, 0x15, 0x17, 0x4d, 0xfc, 0x26, 0xb6, + 0xbd, 0x6c, 0xb2, 0xcb, 0x2c, 0xb2, 0xcb, 0x16, + 0x45, 0x54, 0xa1, 0x26, 0x72, 0x74, 0x39, 0x8a, + 0x89, 0x47, 0x3d, 0xeb, 0xea, 0x73, 0x5d, 0x7a, + 0xac, 0xe7, 0x2b, 0x9c, 0x8a, 0xe5, 0x24, 0x95, + 0x34, 0xd5, 0xd9, 0x65, 0x96, 0x59, 0x65, 0x96, + 0x36, 0xdc, 0xb4, 0x9f, 0x33, 0xe3, 0x6c, 0x9e, + 0x63, 0x12, 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, + 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, + 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, + 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, + 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, 0x33, 0x12, + 0x33, 0x12, 0x31, 0x90, 0xb2, 0x3f, 0x2f, 0xc5, + 0xf1, 0x31, 0xfe, 0x64, 0x31, 0xa2, 0xd8, 0xc6, + 0x8b, 0x63, 0x1a, 0x2d, 0x8c, 0x68, 0xb6, 0x31, + 0xa2, 0xd8, 0xc6, 0x8b, 0x63, 0x1a, 0x2d, 0x8c, + 0x68, 0xb6, 0x31, 0xa2, 0xd8, 0xc6, 0x8b, 0x63, + 0x1a, 0x2d, 0x8c, 0x68, 0xb6, 0x31, 0xa2, 0xd8, + 0xc6, 0x8b, 0x63, 0x1a, 0x2d, 0x8c, 0x68, 0xb6, + 0x31, 0xa2, 0xd8, 0xc6, 0x8b, 0x63, 0x1a, 0x2d, + 0x8c, 0x68, 0xb6, 0x13, 0x87, 0x89, 0x3d, 0x3e, + 0x2f, 0x8d, 0xb2, 0x79, 0x90, 0xc6, 0x8b, 0x63, + 0x1a, 0x2d, 0x8c, 0x68, 0xb6, 0x31, 0xa2, 0xd8, + 0xc6, 0x8b, 0x63, 0x1a, 0x2d, 0x8c, 0x68, 0xb6, + 0x31, 0xa2, 0xd8, 0xc6, 0x8b, 0x63, 0x1a, 0x2d, + 0x8c, 0x68, 0xb6, 0x31, 0xa2, 0xd8, 0xc6, 0x8b, + 0x63, 0x1a, 0x2d, 0x8c, 0x68, 0xb6, 0x31, 0xa2, + 0xd8, 0xc6, 0x8b, 0x63, 0x1a, 0x2d, 0x8c, 0x68, + 0xb6, 0x31, 0xa2, 0xd8, 0xc6, 0x8b, 0x61, 0x91, + 0x32, 0x3f, 0x2a, 0x7f, 0xba, 0x93, 0x4f, 0xcb, + 0xe8, 0x9d, 0xcc, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, + 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, + 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, + 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, + 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, 0x0c, 0xa9, + 0x0c, 0xa9, 0x0c, 0xa9, 0x08, 0x78, 0x9d, 0x4b, + 0xa5, 0xdf, 0xbb, 0xcc, 0x9f, 0xd4, 0x52, 0x8a, + 0x28, 0x6c, 0x48, 0xe6, 0xea, 0x55, 0x1f, 0x16, + 0x9e, 0xa7, 0x2d, 0xdb, 0x0e, 0x8d, 0x5a, 0xb4, + 0x2b, 0x55, 0x3b, 0x89, 0x0a, 0x69, 0xd4, 0xaa, + 0x3a, 0x25, 0x6a, 0xd1, 0xa1, 0x7b, 0x50, 0xd8, + 0x95, 0xcb, 0x46, 0x85, 0xd8, 0x46, 0x2a, 0xf6, + 0x1b, 0x12, 0xba, 0xc7, 0x31, 0x12, 0xa8, 0xd0, + 0xa9, 0xe8, 0x68, 0x52, 0x8a, 0x28, 0x44, 0xeb, + 0xfb, 0xbc, 0xab, 0xe3, 0x52, 0xcb, 0x2c, 0x4f, + 0xca, 0x51, 0x11, 0x74, 0x35, 0x3e, 0xa5, 0xf4, + 0x53, 0xaf, 0x31, 0xdd, 0x7b, 0x12, 0xaf, 0x85, + 0xaa, 0x5b, 0x79, 0x69, 0xa8, 0x64, 0x9a, 0x9d, + 0xd3, 0x63, 0x52, 0xf2, 0xf5, 0x17, 0xe2, 0xff, + 0x00, 0x81, 0x1c, 0x88, 0xd6, 0xa8, 0xae, 0xa6, + 0x2a, 0xb7, 0x71, 0x15, 0xde, 0x2b, 0x13, 0xcc, + 0xc1, 0x8a, 0xae, 0x45, 0xd4, 0x6a, 0xb5, 0x7a, + 0x16, 0x59, 0x62, 0x2f, 0xee, 0xfc, 0x42, 0x2b, + 0x5e, 0x59, 0x65, 0x8d, 0x99, 0xcc, 0xe8, 0xd5, + 0x16, 0x47, 0x2a, 0xda, 0xa9, 0xcf, 0x7e, 0xe7, + 0x3d, 0xf7, 0x76, 0x2c, 0xae, 0x72, 0x52, 0xa9, + 0xcc, 0x55, 0x4d, 0x23, 0x5e, 0xad, 0xec, 0x36, + 0x57, 0x33, 0xca, 0xa7, 0x35, 0xd7, 0xaa, 0xfa, + 0x89, 0x3b, 0xd3, 0xd4, 0x6c, 0xae, 0x6f, 0x65, + 0x12, 0x57, 0x22, 0xda, 0x28, 0xb2, 0x39, 0x68, + 0x59, 0x9e, 0xee, 0xea, 0x73, 0x5d, 0xd5, 0x77, + 0x2c, 0xb2, 0xc8, 0xd1, 0x5e, 0xe4, 0x44, 0xfd, + 0xdd, 0xcd, 0x47, 0x74, 0x71, 0x8f, 0x16, 0xc6, + 0x3c, 0x5b, 0x18, 0xf1, 0x6c, 0x63, 0xc5, 0xb1, + 0x8f, 0x16, 0xc6, 0x3c, 0x5b, 0x18, 0xf1, 0x6c, + 0x63, 0xc5, 0xb1, 0x8f, 0x16, 0xc6, 0x3c, 0x5b, + 0x18, 0xf1, 0x6c, 0x63, 0xc5, 0xb1, 0x8f, 0x16, + 0xc6, 0x3c, 0x5b, 0x18, 0xf1, 0x6c, 0x63, 0xc5, + 0xb1, 0x8f, 0x16, 0xc6, 0x3c, 0x5b, 0x18, 0xf1, + 0x6c, 0x63, 0xc5, 0xb1, 0x8f, 0x16, 0xc3, 0x58, + 0xd6, 0x79, 0x53, 0xff, 0x00, 0x80, 0xef, 0xff, + 0xc4, 0x00, 0x50, 0x10, 0x00, 0x01, 0x03, 0x02, + 0x01, 0x05, 0x0a, 0x0a, 0x06, 0x07, 0x07, 0x05, + 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x03, + 0x04, 0x11, 0x12, 0x13, 0x21, 0x31, 0x33, 0x34, + 0x10, 0x22, 0x32, 0x41, 0x51, 0x91, 0x92, 0x93, + 0xa1, 0xb1, 0x05, 0x14, 0x23, 0x35, 0x61, 0x71, + 0x72, 0x73, 0x81, 0xc1, 0x20, 0x42, 0x52, 0xa2, + 0xd1, 0xe1, 0x24, 0x30, 0x40, 0x62, 0x83, 0xa3, + 0xf0, 0x15, 0x43, 0x53, 0x74, 0x82, 0xb2, 0xc2, + 0x06, 0x50, 0x63, 0xd2, 0xf1, 0x54, 0x44, 0x55, + 0xf2, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, + 0x06, 0x3f, 0x02, 0x7b, 0xde, 0xf9, 0x2f, 0x8d, + 0xda, 0x24, 0x3c, 0xab, 0x87, 0x2f, 0x58, 0x57, + 0x0e, 0x5e, 0xb0, 0xae, 0x1c, 0xbd, 0x61, 0x5c, + 0x39, 0x7a, 0xc2, 0xb8, 0x72, 0xf5, 0x85, 0x70, + 0xe5, 0xeb, 0x0a, 0xe1, 0xcb, 0xd6, 0x15, 0xc3, + 0x97, 0xac, 0x2b, 0x87, 0x2f, 0x58, 0x57, 0x0e, + 0x5e, 0xb0, 0xae, 0x1c, 0xbd, 0x61, 0x5c, 0x39, + 0x7a, 0xc2, 0xb8, 0x72, 0xf5, 0x85, 0x70, 0xe5, + 0xeb, 0x0a, 0xe1, 0xcb, 0xd6, 0x15, 0xc3, 0x97, + 0xac, 0x2b, 0x87, 0x2f, 0x58, 0x57, 0x0e, 0x5e, + 0xb0, 0xae, 0x1c, 0xbd, 0x61, 0x5c, 0x39, 0x7a, + 0xc2, 0xb8, 0x72, 0xf5, 0x85, 0x70, 0xe5, 0xeb, + 0x0a, 0xe1, 0xcb, 0xd6, 0x15, 0xc3, 0x97, 0xac, + 0x2b, 0x87, 0x2f, 0x58, 0x57, 0x0e, 0x5e, 0xb0, + 0xae, 0x1c, 0xbd, 0x61, 0x5c, 0x39, 0x7a, 0xc2, + 0xb8, 0x72, 0xf5, 0x85, 0x70, 0xe5, 0xeb, 0x0a, + 0xe1, 0xcb, 0xd6, 0x15, 0xc3, 0x97, 0xac, 0x2b, + 0x87, 0x2f, 0x58, 0x57, 0x0e, 0x5e, 0xb0, 0xae, + 0x1c, 0xbd, 0x61, 0x5c, 0x39, 0x7a, 0xc2, 0xb8, + 0x72, 0xf5, 0x85, 0x70, 0xe5, 0xeb, 0x0a, 0xe1, + 0xcb, 0xd6, 0x15, 0xc3, 0x97, 0xac, 0x2b, 0x87, + 0x2f, 0x58, 0x57, 0x0e, 0x5e, 0xb0, 0xae, 0x1c, + 0xbd, 0x61, 0x5c, 0x39, 0x7a, 0xc2, 0xb8, 0x72, + 0xf5, 0x85, 0x70, 0xe5, 0xeb, 0x0a, 0xe1, 0xcb, + 0xd6, 0x15, 0xc3, 0x97, 0xac, 0x2b, 0x87, 0x2f, + 0x58, 0x57, 0x0e, 0x5e, 0xb0, 0xae, 0x1c, 0xbd, + 0x61, 0x5c, 0x39, 0x7a, 0xc2, 0xb8, 0x72, 0xf5, + 0x85, 0x70, 0xe5, 0xeb, 0x0a, 0xe1, 0xcb, 0xd6, + 0x15, 0xc3, 0x97, 0xac, 0x2b, 0x87, 0x2f, 0x58, + 0x57, 0x0e, 0x5e, 0xb0, 0xae, 0x1c, 0xbd, 0x61, + 0x5c, 0x39, 0x7a, 0xc2, 0xb8, 0x72, 0xf5, 0x85, + 0x70, 0xe5, 0xeb, 0x0a, 0xe1, 0xcb, 0xd6, 0x15, + 0xc3, 0x97, 0xac, 0x2b, 0x87, 0x2f, 0x58, 0x57, + 0x0e, 0x5e, 0xb0, 0xae, 0x1c, 0xbd, 0x61, 0x5c, + 0x39, 0x7a, 0xc2, 0xb8, 0x72, 0xf5, 0x85, 0x70, + 0xe5, 0xeb, 0x0a, 0xe1, 0xcb, 0xd6, 0x15, 0xc3, + 0x97, 0xac, 0x2b, 0x87, 0x2f, 0x58, 0x57, 0x0e, + 0x5e, 0xb0, 0xae, 0x1c, 0xbd, 0x61, 0x4c, 0x7b, + 0x1f, 0x25, 0xf1, 0xb7, 0x4c, 0x87, 0x95, 0x3f, + 0xde, 0x3f, 0xbf, 0xfe, 0xdb, 0x75, 0x71, 0x1c, + 0x84, 0x7b, 0x0b, 0x55, 0x2f, 0x40, 0xad, 0x54, + 0xbd, 0x02, 0xb5, 0x52, 0xf4, 0x0a, 0xd5, 0x4b, + 0xd0, 0x2b, 0x55, 0x2f, 0x40, 0xad, 0x54, 0xbd, + 0x02, 0xb5, 0x52, 0xf4, 0x0a, 0xd5, 0x4b, 0xd0, + 0x2b, 0x55, 0x2f, 0x40, 0xad, 0x54, 0xbd, 0x02, + 0xb5, 0x52, 0xf4, 0x0a, 0xd5, 0x4b, 0xd0, 0x2b, + 0x55, 0x2f, 0x40, 0xad, 0x54, 0xbd, 0x02, 0xb5, + 0x52, 0xf4, 0x0a, 0xb6, 0x09, 0x2f, 0xec, 0xad, + 0x5c, 0x9d, 0x05, 0xab, 0x93, 0xa0, 0xb5, 0x72, + 0x74, 0x16, 0xae, 0x4e, 0x82, 0xd5, 0xc9, 0xd0, + 0x5a, 0xb9, 0x3a, 0x0a, 0xd8, 0x24, 0xbf, 0xb2, + 0xb5, 0x72, 0x74, 0x16, 0xae, 0x4e, 0x82, 0xd5, + 0xc9, 0xd0, 0x5a, 0xb9, 0x3a, 0x0b, 0x57, 0x27, + 0x41, 0x6a, 0xe4, 0xe8, 0x21, 0x6b, 0x8b, 0x4a, + 0xcd, 0x3e, 0xb4, 0xff, 0x00, 0x78, 0xfe, 0xff, + 0x00, 0xfb, 0x6b, 0xbd, 0x48, 0x4d, 0x29, 0xc3, + 0x1c, 0x71, 0x63, 0x71, 0xb5, 0xec, 0x00, 0x51, + 0xd3, 0x41, 0x5c, 0x5f, 0x34, 0x8e, 0x0c, 0x6b, + 0x72, 0x12, 0x0c, 0xe7, 0x47, 0xd5, 0xfa, 0x4e, + 0x92, 0x59, 0x1b, 0x14, 0x6d, 0xd2, 0xf7, 0x9b, + 0x01, 0xfa, 0x96, 0xfb, 0xb3, 0xdf, 0xb9, 0xe2, + 0xb2, 0x4f, 0x69, 0xae, 0x1b, 0xc1, 0x36, 0x04, + 0xe8, 0x05, 0xda, 0x01, 0x3e, 0x94, 0x69, 0x62, + 0x74, 0xae, 0x94, 0x3d, 0xd1, 0x9f, 0xd1, 0xe4, + 0xc3, 0x88, 0x69, 0xdf, 0x5a, 0xdc, 0x5c, 0xa9, + 0xf4, 0xec, 0x92, 0xf2, 0x36, 0xff, 0x00, 0x54, + 0x81, 0x9b, 0x4d, 0x8e, 0x83, 0x6f, 0x42, 0x6c, + 0x10, 0xd5, 0x07, 0xc8, 0xeb, 0xe0, 0xde, 0xb8, + 0x35, 0xfe, 0xcb, 0xad, 0x67, 0x7c, 0x37, 0x24, + 0xf6, 0x42, 0x7d, 0x4d, 0x54, 0xa2, 0x18, 0x59, + 0xa5, 0xce, 0x50, 0xcb, 0x34, 0xb6, 0x6c, 0xd9, + 0xd9, 0x85, 0x8e, 0x71, 0x77, 0x1e, 0x80, 0x2e, + 0xa9, 0x9d, 0x24, 0xae, 0x70, 0xa8, 0x69, 0x7c, + 0x59, 0x18, 0x9f, 0x2e, 0x26, 0xe6, 0xcf, 0xbd, + 0x07, 0x94, 0x28, 0x41, 0x91, 0xcd, 0x32, 0x80, + 0xe6, 0xde, 0x37, 0x0b, 0x03, 0x98, 0x62, 0xcd, + 0xbd, 0xf8, 0xd9, 0x3a, 0x09, 0xea, 0x83, 0x24, + 0x6d, 0xb1, 0xef, 0x5c, 0x43, 0x3d, 0xa2, 0x05, + 0x9b, 0xf1, 0x57, 0x0a, 0x4f, 0x7e, 0xcf, 0x92, + 0x7f, 0xbc, 0x7f, 0x7f, 0xfd, 0xb5, 0xde, 0xa5, + 0x0f, 0xb0, 0x17, 0xfd, 0x79, 0x55, 0x4f, 0xae, + 0x8a, 0x1a, 0x77, 0x34, 0xf2, 0x1c, 0x91, 0xce, + 0xab, 0x1c, 0xd9, 0x7c, 0x21, 0x14, 0x4e, 0x86, + 0x9e, 0x46, 0xcd, 0x57, 0x30, 0x2f, 0x12, 0x65, + 0x5a, 0x0e, 0x1b, 0x1e, 0x09, 0x05, 0x7f, 0xd4, + 0x25, 0x9e, 0x17, 0xad, 0x78, 0xf0, 0x5c, 0xf4, + 0xcf, 0x84, 0x3e, 0x4e, 0x16, 0x53, 0x0e, 0x20, + 0xee, 0x51, 0xe8, 0x5f, 0xf5, 0x6c, 0xec, 0xf0, + 0xa5, 0x55, 0x39, 0xf0, 0x7e, 0x42, 0x48, 0x22, + 0x64, 0xb6, 0x68, 0x25, 0x83, 0x48, 0xe4, 0x3c, + 0x8a, 0xba, 0x6a, 0x76, 0xd6, 0xe5, 0x29, 0x65, + 0x84, 0x47, 0x14, 0x4f, 0x6b, 0x69, 0xc3, 0x6c, + 0x0b, 0x83, 0xc1, 0x39, 0xef, 0x72, 0xbc, 0x39, + 0x5b, 0x3f, 0x85, 0xab, 0x98, 0xef, 0x1f, 0x96, + 0x8a, 0x06, 0x45, 0xbf, 0xb0, 0xca, 0x0c, 0xcd, + 0x07, 0xeb, 0x71, 0x5e, 0xf9, 0x82, 0xff, 0x00, + 0xa8, 0x60, 0x9a, 0x6a, 0xc0, 0xda, 0x3a, 0xc8, + 0xc4, 0x62, 0xa2, 0x5b, 0xca, 0x01, 0x2d, 0xde, + 0xbc, 0x83, 0x9f, 0x49, 0x5f, 0xf5, 0x84, 0x4c, + 0xaf, 0xa9, 0xbd, 0x21, 0xa7, 0x64, 0x2f, 0x7c, + 0xce, 0x2f, 0x6d, 0xda, 0xde, 0x3f, 0x4a, 0xff, + 0x00, 0xaa, 0xab, 0x59, 0x5d, 0x53, 0x6f, 0x07, + 0x46, 0xc3, 0x05, 0x3e, 0x3f, 0x27, 0x77, 0x43, + 0x9c, 0x91, 0xe8, 0xd2, 0xaa, 0xe2, 0xa6, 0x7d, + 0x6b, 0x44, 0xb4, 0xd1, 0x3d, 0x8f, 0xae, 0xa8, + 0x66, 0x33, 0x26, 0x2d, 0xf6, 0x07, 0x5c, 0xdb, + 0x10, 0xd0, 0xab, 0x69, 0xe4, 0x7d, 0x76, 0x5e, + 0x09, 0x06, 0x38, 0x2b, 0xce, 0x27, 0xc5, 0x71, + 0xf6, 0xbe, 0xb0, 0xfa, 0x2d, 0xf7, 0x67, 0xbf, + 0x73, 0xc3, 0x13, 0x30, 0xb0, 0x78, 0x35, 0x95, + 0x91, 0x78, 0xc4, 0x47, 0x58, 0xf7, 0x01, 0x1d, + 0xcb, 0x4f, 0x17, 0xd5, 0xcd, 0xe8, 0xe2, 0xba, + 0x80, 0x3d, 0xf4, 0x95, 0x14, 0x55, 0x35, 0xb2, + 0x37, 0xc9, 0x5f, 0x18, 0x2f, 0x91, 0xce, 0x06, + 0xfa, 0x0f, 0x21, 0x16, 0x5e, 0x15, 0x9e, 0x07, + 0xca, 0xe7, 0xf8, 0xbc, 0xee, 0x64, 0x77, 0xcc, + 0xc2, 0xec, 0xef, 0x23, 0xd6, 0xa8, 0x49, 0xc9, + 0x78, 0xbd, 0xd9, 0xe2, 0xd7, 0xd1, 0x7f, 0xab, + 0x87, 0x72, 0x4f, 0x64, 0x2a, 0xd2, 0xf6, 0x87, + 0x60, 0x82, 0x47, 0x36, 0xe3, 0x41, 0xc2, 0x57, + 0x82, 0xf1, 0x7f, 0xfd, 0x61, 0xc1, 0xd2, 0x8e, + 0xff, 0x00, 0x25, 0xe0, 0xb9, 0xe8, 0x66, 0xa5, + 0x63, 0xa3, 0x82, 0xa1, 0x8d, 0x6d, 0x45, 0xce, + 0xf5, 0xd2, 0x36, 0xc4, 0x01, 0xc5, 0x66, 0x8e, + 0x75, 0x4f, 0xe1, 0x09, 0x31, 0xc0, 0xe9, 0x1a, + 0x1b, 0x2c, 0x51, 0xbb, 0x78, 0xfc, 0x0e, 0x36, + 0x1a, 0x34, 0x5e, 0xfc, 0x9a, 0x55, 0x7f, 0x8c, + 0x61, 0xbf, 0x8d, 0x54, 0xf8, 0xd6, 0x3f, 0x6d, + 0xda, 0x7f, 0xd3, 0x6f, 0x82, 0x88, 0xc1, 0x6c, + 0x8e, 0x11, 0x83, 0x0e, 0x8c, 0x3c, 0x4a, 0x4f, + 0x7c, 0xcf, 0x92, 0x7f, 0xbc, 0x7f, 0x7f, 0xfd, + 0xb5, 0xde, 0xa5, 0x0f, 0xb0, 0x15, 0x6c, 0xf9, + 0x00, 0x64, 0xad, 0x0d, 0x6d, 0x46, 0x22, 0x48, + 0x78, 0x02, 0xc3, 0x37, 0xa9, 0x4d, 0x4e, 0xca, + 0x20, 0x22, 0x9b, 0x0e, 0x31, 0x8d, 0xd7, 0x38, + 0x4d, 0xc6, 0x7b, 0xde, 0xde, 0x85, 0x5d, 0x96, + 0xa7, 0xc7, 0xe3, 0xc5, 0x86, 0xa3, 0x7e, 0xe1, + 0x8f, 0x07, 0x07, 0x8f, 0x36, 0x8e, 0x25, 0xe1, + 0x3a, 0xdf, 0x08, 0xc1, 0x15, 0x4c, 0x73, 0xc9, + 0x1b, 0xe0, 0x18, 0x8d, 0xc6, 0x16, 0x80, 0x71, + 0x7c, 0x46, 0x8c, 0xe9, 0xb5, 0xd3, 0xd1, 0xb5, + 0xf5, 0x42, 0xdb, 0xfb, 0x9c, 0xf6, 0xd1, 0x71, + 0xa0, 0xfc, 0x55, 0x45, 0x23, 0xe9, 0x83, 0xa9, + 0xea, 0x26, 0x33, 0xc8, 0xdc, 0x4e, 0xce, 0xf2, + 0x6f, 0x7b, 0xdf, 0x37, 0xc1, 0x55, 0x44, 0x28, + 0x9b, 0x93, 0xaa, 0x6b, 0x59, 0x33, 0x71, 0x3b, + 0x7f, 0x6d, 0x1c, 0x7a, 0x7d, 0x3a, 0x55, 0xe5, + 0xa1, 0x0f, 0x39, 0x31, 0x15, 0xf2, 0x8e, 0xce, + 0xd1, 0xa3, 0x8f, 0x4f, 0xa7, 0x4a, 0xac, 0x90, + 0x40, 0x31, 0x56, 0x58, 0x4f, 0x88, 0x92, 0x1f, + 0x61, 0x87, 0x47, 0xa9, 0x4f, 0x4e, 0xca, 0x16, + 0x64, 0xa7, 0xb0, 0x78, 0x2e, 0x71, 0x39, 0xb4, + 0x67, 0x27, 0x37, 0xc1, 0x3e, 0x3a, 0x38, 0x72, + 0x41, 0xe7, 0x13, 0x8e, 0x22, 0xe2, 0xe3, 0xe9, + 0x27, 0x3f, 0xd1, 0x6f, 0xbb, 0x3d, 0xfb, 0x9e, + 0x35, 0x24, 0x17, 0x9a, 0xe1, 0xc7, 0x7e, 0xec, + 0x2e, 0x23, 0x41, 0x2d, 0xbd, 0x8f, 0xc5, 0x78, + 0xdb, 0x29, 0xed, 0x3e, 0x22, 0xfe, 0x11, 0xc2, + 0x1c, 0x74, 0x90, 0xdd, 0x00, 0xfa, 0x77, 0x05, + 0x44, 0x14, 0xa1, 0x92, 0x36, 0xf8, 0x77, 0xc4, + 0xb5, 0x97, 0xfb, 0x22, 0xf6, 0x6f, 0xc3, 0x72, + 0x4f, 0x64, 0x2c, 0x85, 0x48, 0x7b, 0xa2, 0xbd, + 0xec, 0xc9, 0x1c, 0xcb, 0xf4, 0x48, 0x51, 0xd3, + 0x18, 0xa4, 0x31, 0x46, 0x6e, 0xcb, 0xce, 0xfc, + 0x4d, 0xff, 0x00, 0x55, 0xef, 0x6f, 0x42, 0x82, + 0x39, 0x20, 0xb3, 0x60, 0x6e, 0x18, 0xf2, 0x6e, + 0x31, 0x96, 0x8e, 0x4b, 0xb6, 0xd9, 0xbd, 0x09, + 0x90, 0xc4, 0xc1, 0x1c, 0x4c, 0x18, 0x5a, 0xc6, + 0xe8, 0x01, 0x1a, 0x89, 0xe9, 0x43, 0xe4, 0x75, + 0xb1, 0xef, 0x88, 0x0f, 0xb7, 0xda, 0x00, 0xd9, + 0xdf, 0x1d, 0xc7, 0xfb, 0xe6, 0x7c, 0x93, 0xfd, + 0xe3, 0xfb, 0xfe, 0x86, 0x09, 0x6a, 0x5a, 0x1f, + 0xc6, 0xd1, 0x77, 0x77, 0x2d, 0x7b, 0xba, 0xb2, + 0xb5, 0xee, 0xea, 0xca, 0xd7, 0xbb, 0xab, 0x2b, + 0x5e, 0xee, 0xac, 0xad, 0x7b, 0xba, 0xb2, 0xb5, + 0xee, 0xea, 0xca, 0xd7, 0xbb, 0xab, 0x2b, 0x5e, + 0xee, 0xac, 0xad, 0x7b, 0xba, 0xb2, 0xb5, 0xee, + 0xea, 0xca, 0xd7, 0xbb, 0xab, 0x2b, 0x5e, 0xee, + 0xac, 0xad, 0x7b, 0xba, 0xb2, 0xb5, 0xee, 0xea, + 0xca, 0xd7, 0xbb, 0xab, 0x2b, 0x5e, 0xee, 0xac, + 0xad, 0x7b, 0xba, 0xb2, 0xb5, 0xee, 0xea, 0xca, + 0xd7, 0xbb, 0xab, 0x2b, 0x68, 0x3d, 0x59, 0x5f, + 0xa3, 0xce, 0xd9, 0x7d, 0x1c, 0x7c, 0xdb, 0x97, + 0x39, 0x82, 0xb3, 0x1b, 0x8b, 0xd2, 0xb8, 0x2d, + 0x5c, 0x16, 0xae, 0x0b, 0x57, 0x05, 0xab, 0x82, + 0xd5, 0xc1, 0x6a, 0xe0, 0xb5, 0x70, 0x5a, 0xb8, + 0x2d, 0x5c, 0x16, 0xae, 0x0b, 0x57, 0x05, 0xab, + 0x82, 0xd5, 0xc1, 0x6a, 0xe0, 0xb5, 0x70, 0x5a, + 0xad, 0x85, 0xaa, 0xc0, 0xb8, 0x0f, 0x6c, 0xae, + 0x13, 0xfa, 0x65, 0x70, 0x9f, 0xd3, 0x2b, 0x84, + 0xfe, 0x99, 0x5c, 0x27, 0xf4, 0xca, 0xe1, 0x3f, + 0xa6, 0x57, 0x09, 0xfd, 0x32, 0xb8, 0x4f, 0xe9, + 0x95, 0xc2, 0x7f, 0x4c, 0xae, 0x13, 0xfa, 0x65, + 0x70, 0x9f, 0xd3, 0x2b, 0x84, 0xfe, 0x99, 0x5c, + 0x27, 0xf4, 0xca, 0xe1, 0x3f, 0xa6, 0x57, 0x09, + 0xfd, 0x32, 0xb8, 0x4f, 0xe9, 0x95, 0x7b, 0xba, + 0xfc, 0xb8, 0x8a, 0xd2, 0xee, 0x99, 0x5a, 0x5d, + 0xd3, 0x2b, 0x4b, 0xba, 0x65, 0x69, 0x77, 0x4c, + 0xad, 0x2e, 0xe9, 0x95, 0xa5, 0xdd, 0x32, 0xaf, + 0x9e, 0xfe, 0xd1, 0x5a, 0x5d, 0xd3, 0x2b, 0x4b, + 0xba, 0x65, 0x69, 0x77, 0x4c, 0xad, 0x2e, 0xe9, + 0x95, 0xbe, 0xca, 0x7c, 0x1e, 0x55, 0xdb, 0x2c, + 0x9d, 0x34, 0x2d, 0x73, 0x79, 0x19, 0xa7, 0xd6, + 0x9f, 0xef, 0x1f, 0xdf, 0xba, 0xda, 0x78, 0x4e, + 0x19, 0x65, 0x17, 0x2e, 0x1c, 0x4d, 0xfd, 0x99, + 0xaf, 0x63, 0x8b, 0x5e, 0xdc, 0xe0, 0x85, 0x1c, + 0xe7, 0x59, 0xc1, 0x7d, 0xb9, 0x53, 0x69, 0xd9, + 0xf1, 0x58, 0x62, 0x8d, 0xb2, 0x7e, 0xfc, 0x99, + 0xee, 0xb5, 0x10, 0x74, 0x16, 0xa2, 0x0e, 0x82, + 0xd4, 0x41, 0xd0, 0x5a, 0x88, 0x3a, 0x0b, 0x51, + 0x07, 0x41, 0x6a, 0x20, 0xe8, 0x2d, 0x44, 0x1d, + 0x05, 0xa8, 0x83, 0xa0, 0xb5, 0x10, 0x74, 0x16, + 0xa2, 0x0e, 0x82, 0xd4, 0x41, 0xd0, 0x5a, 0x88, + 0x3a, 0x0b, 0x51, 0x07, 0x41, 0x6a, 0x20, 0xe8, + 0x2d, 0x44, 0x1d, 0x05, 0xa8, 0x83, 0xa0, 0xb5, + 0x10, 0x74, 0x16, 0xa2, 0x0e, 0x82, 0xd4, 0x41, + 0xd0, 0x5a, 0x88, 0x3a, 0x0b, 0x7d, 0x4f, 0x09, + 0x1e, 0x86, 0xd9, 0x36, 0x68, 0xb5, 0x64, 0xda, + 0xc7, 0xea, 0x9d, 0xc1, 0x97, 0xbb, 0xa4, 0x39, + 0xf2, 0x63, 0x8b, 0xd6, 0xb6, 0x63, 0xd6, 0x2d, + 0x98, 0xf5, 0x8b, 0x66, 0x3d, 0x62, 0xd9, 0x8f, + 0x58, 0xb6, 0x63, 0xd6, 0x2d, 0x98, 0xf5, 0x8b, + 0x66, 0x3d, 0x62, 0xd9, 0x8f, 0x58, 0xb6, 0x63, + 0xd6, 0x2d, 0x98, 0xf5, 0x8b, 0x66, 0x3d, 0x62, + 0xd9, 0x8f, 0x58, 0xb6, 0x63, 0xd6, 0x2d, 0x98, + 0xf5, 0x8b, 0x66, 0x3d, 0x62, 0xd9, 0x8f, 0x58, + 0xb6, 0x63, 0xd6, 0x2d, 0x98, 0xf5, 0x8b, 0x66, + 0x3d, 0x62, 0xd9, 0x8f, 0x58, 0xb6, 0x63, 0xd6, + 0x2c, 0x31, 0xde, 0x29, 0x38, 0x9a, 0xe3, 0x70, + 0x57, 0x61, 0x09, 0x9e, 0xf1, 0x9d, 0xe9, 0xfe, + 0xf1, 0xdd, 0xfb, 0xac, 0xf7, 0x4d, 0xf9, 0xfe, + 0xa1, 0x91, 0xb7, 0x84, 0xe3, 0x84, 0x21, 0x25, + 0x1b, 0x6d, 0x92, 0x93, 0x23, 0x2e, 0x72, 0x6e, + 0x6c, 0xa9, 0xaa, 0xaa, 0x28, 0xcd, 0x44, 0x92, + 0x39, 0xcd, 0xcd, 0x21, 0x6f, 0x19, 0x5e, 0x0c, + 0x9a, 0x38, 0x9c, 0xda, 0x7a, 0x9c, 0x41, 0xd0, + 0xb9, 0xc7, 0x88, 0x26, 0x44, 0x1b, 0xfa, 0x11, + 0x66, 0x5a, 0xd7, 0xfa, 0x96, 0x53, 0xb1, 0xa0, + 0xc7, 0x4b, 0x13, 0x5a, 0x70, 0x83, 0x9c, 0xdf, + 0x89, 0x18, 0xf0, 0x45, 0x1b, 0xb1, 0xe4, 0x83, + 0xe1, 0x91, 0xc6, 0xcf, 0xe2, 0x0e, 0xc5, 0xf2, + 0xfd, 0x4d, 0x47, 0xbd, 0xf9, 0x2a, 0x93, 0xff, + 0x00, 0x8d, 0xdf, 0xed, 0xfd, 0x44, 0xf8, 0x65, + 0xc0, 0x63, 0xb6, 0x6b, 0x5e, 0xea, 0x77, 0xe5, + 0x32, 0x62, 0x2f, 0x45, 0xee, 0x8c, 0x82, 0x37, + 0x98, 0xc6, 0x97, 0x86, 0xe6, 0x4d, 0x2c, 0x86, + 0x47, 0x07, 0x70, 0x6c, 0xd3, 0x9d, 0x65, 0x0b, + 0x1e, 0x23, 0xbd, 0xb1, 0x5b, 0x32, 0x2f, 0x64, + 0x4f, 0x73, 0x06, 0x97, 0x06, 0xe6, 0x41, 0xe2, + 0x27, 0x96, 0x10, 0x4e, 0x20, 0xdc, 0xd9, 0xb4, + 0xa1, 0x19, 0x89, 0xe2, 0x43, 0xa1, 0x98, 0x73, + 0x94, 0x5a, 0xec, 0xce, 0x19, 0x88, 0x3f, 0x4e, + 0xab, 0xd0, 0xf6, 0xfc, 0xd3, 0x3d, 0x61, 0x54, + 0x8b, 0xe8, 0x91, 0xc3, 0xb5, 0x69, 0x5a, 0x54, + 0x4f, 0xcb, 0xc0, 0xdc, 0xab, 0x43, 0x9a, 0xd7, + 0x3e, 0xc5, 0x3a, 0x29, 0x46, 0x17, 0xb7, 0x48, + 0x5a, 0x56, 0x95, 0xa5, 0x69, 0xdc, 0x32, 0x3d, + 0xcc, 0x38, 0x6c, 0x1e, 0xd6, 0xba, 0xe5, 0x97, + 0xe5, 0x4d, 0x8a, 0x21, 0x89, 0xe7, 0x89, 0x3a, + 0x5c, 0x51, 0xca, 0xd6, 0x70, 0xb2, 0x6e, 0xbe, + 0x15, 0x4c, 0xec, 0x78, 0xb2, 0xd1, 0xe3, 0xd1, + 0xa1, 0x69, 0x5a, 0x56, 0x47, 0x1e, 0x3c, 0xc0, + 0xde, 0xd6, 0x51, 0xe0, 0x9b, 0x28, 0x4b, 0x6e, + 0xe1, 0x6b, 0x61, 0x3c, 0x8b, 0x4a, 0xd2, 0xb4, + 0xad, 0x28, 0x38, 0x1c, 0xe3, 0x3a, 0x97, 0xd6, + 0xa0, 0xf6, 0xa3, 0xef, 0x09, 0xfe, 0xf1, 0xdd, + 0xfb, 0xac, 0xf7, 0x4d, 0xf9, 0xfe, 0xa3, 0x2e, + 0xfd, 0x5d, 0x3b, 0x0c, 0xae, 0x5e, 0x10, 0xa5, + 0x82, 0x94, 0xc1, 0x2c, 0x8d, 0x33, 0x67, 0x93, + 0x16, 0x27, 0x05, 0x42, 0xe1, 0x0c, 0x53, 0x5e, + 0x47, 0x0b, 0x4c, 0xdb, 0xf1, 0x95, 0xe0, 0x9a, + 0xb8, 0xdd, 0x7a, 0x37, 0xb4, 0x86, 0x37, 0xec, + 0x1c, 0x26, 0xe1, 0x4b, 0x53, 0x7f, 0x2e, 0xd0, + 0xea, 0x4f, 0x81, 0x75, 0xfb, 0x95, 0x5c, 0x0e, + 0x70, 0x66, 0x31, 0x19, 0x69, 0x3a, 0x2e, 0x07, + 0xff, 0x00, 0x56, 0x52, 0x78, 0x9d, 0x4b, 0x14, + 0x73, 0xe5, 0x85, 0xda, 0x1b, 0x95, 0x1c, 0x5e, + 0xb7, 0x7e, 0x28, 0xb8, 0xe9, 0x39, 0xff, 0x00, + 0x51, 0x51, 0xef, 0x3e, 0x4a, 0xab, 0xdd, 0x3b, + 0xfd, 0xbf, 0xa8, 0xaf, 0x97, 0xec, 0x98, 0x8f, + 0xde, 0x4e, 0x81, 0x9a, 0x26, 0x33, 0x4f, 0xf0, + 0xb6, 0x65, 0xe0, 0xe0, 0x3c, 0x69, 0xe3, 0x20, + 0x2d, 0x0c, 0x20, 0x16, 0x3f, 0x96, 0xe1, 0x78, + 0x28, 0x42, 0xe7, 0x46, 0x0d, 0x41, 0xbf, 0xab, + 0x16, 0x85, 0xe1, 0xc8, 0x9c, 0xe2, 0x62, 0x00, + 0x61, 0x6f, 0x10, 0x5e, 0x06, 0x8a, 0x99, 0xce, + 0x6d, 0x3e, 0x4d, 0x97, 0x6b, 0x74, 0x3b, 0xed, + 0x5d, 0x32, 0x3a, 0x77, 0x64, 0xd8, 0xe9, 0xa5, + 0x07, 0x0f, 0x25, 0xce, 0x65, 0x47, 0xe1, 0x27, + 0x67, 0x75, 0x2c, 0x0f, 0x63, 0xbd, 0x63, 0x83, + 0xde, 0x8b, 0x89, 0x24, 0x9c, 0xff, 0x00, 0x4e, + 0xb3, 0xdb, 0x67, 0xcd, 0x47, 0xed, 0x05, 0x59, + 0xef, 0x9f, 0xdf, 0xbb, 0xe0, 0xc7, 0x55, 0x55, + 0x3a, 0x02, 0xd8, 0x1b, 0xbd, 0x6b, 0x09, 0xba, + 0xf0, 0xaf, 0x84, 0xa1, 0x67, 0x95, 0x60, 0x63, + 0x62, 0xc4, 0x2f, 0x87, 0x8a, 0xeb, 0x13, 0xc0, + 0xf1, 0x9a, 0x88, 0x1f, 0x7b, 0x0b, 0x63, 0x2d, + 0x39, 0x95, 0x2b, 0xbe, 0xa5, 0x03, 0x8c, 0x67, + 0xd4, 0x23, 0x1f, 0x30, 0xa8, 0xe5, 0x75, 0x43, + 0x60, 0x33, 0x3d, 0xcf, 0x96, 0xf1, 0x63, 0xca, + 0xe7, 0xd0, 0xab, 0x25, 0xa3, 0xb1, 0x1e, 0x37, + 0xe4, 0x89, 0x6f, 0x07, 0x32, 0x8e, 0x2c, 0x78, + 0x03, 0xb3, 0x97, 0x72, 0x27, 0xcd, 0x03, 0x84, + 0x54, 0x6e, 0x69, 0x92, 0x57, 0xdb, 0x7c, 0xe7, + 0x8c, 0xc0, 0x15, 0x5b, 0x87, 0x5b, 0xe2, 0xee, + 0xc1, 0xeb, 0x53, 0x64, 0x0b, 0xed, 0x83, 0xca, + 0x61, 0xfb, 0x2a, 0x96, 0x62, 0xd0, 0xf7, 0xc1, + 0x41, 0x8d, 0x8d, 0x3f, 0x69, 0x52, 0x4b, 0x57, + 0x63, 0x28, 0xaa, 0x11, 0xe3, 0xb5, 0xb1, 0x37, + 0x91, 0x57, 0x52, 0x98, 0x03, 0xe1, 0x8d, 0xd6, + 0x8c, 0xb5, 0xb6, 0xc9, 0x59, 0x56, 0x54, 0x53, + 0xba, 0xf5, 0x25, 0xac, 0x6b, 0xf9, 0x58, 0xc5, + 0x49, 0x71, 0x88, 0x7f, 0x67, 0x1b, 0x8e, 0x5d, + 0x0b, 0xc1, 0xef, 0xa9, 0x0d, 0x2f, 0x15, 0x62, + 0x3b, 0x86, 0xdb, 0x7b, 0xc8, 0xbc, 0x35, 0x13, + 0xda, 0xdc, 0x11, 0x44, 0xf6, 0xc7, 0x66, 0xdb, + 0x08, 0xfa, 0x12, 0xa8, 0x3d, 0xa8, 0xfb, 0xc2, + 0x7f, 0xbc, 0x77, 0x7e, 0xeb, 0x3d, 0xcb, 0x7e, + 0x7f, 0xb3, 0xd4, 0x7b, 0xcf, 0x92, 0x91, 0x97, + 0xb6, 0x30, 0x5b, 0xd8, 0x8b, 0x48, 0xb1, 0x0b, + 0x42, 0xd0, 0xb4, 0x2d, 0x0b, 0x42, 0xd0, 0xa4, + 0x8d, 0xa6, 0xcc, 0x93, 0x84, 0x2d, 0xa5, 0x07, + 0xe3, 0xdf, 0x06, 0x64, 0xc1, 0xb7, 0x12, 0xc8, + 0xb2, 0x57, 0x08, 0xf9, 0x14, 0x4c, 0xc5, 0xbd, + 0x88, 0xe2, 0x60, 0xb6, 0x82, 0xa6, 0x38, 0xb5, + 0xdc, 0x3c, 0xda, 0x56, 0x4a, 0x39, 0x5c, 0xd6, + 0x72, 0x26, 0x44, 0xe3, 0x78, 0xd9, 0x9c, 0x04, + 0x69, 0xe2, 0x79, 0x79, 0x90, 0xe2, 0x7e, 0x6b, + 0x5b, 0xd0, 0xb4, 0x2d, 0x0b, 0x42, 0xd0, 0xb4, + 0x2d, 0x0b, 0x42, 0x7d, 0xf3, 0x65, 0x5c, 0x2c, + 0x3d, 0x49, 0x84, 0xe8, 0xba, 0xa8, 0xb8, 0xd2, + 0xf2, 0x77, 0x61, 0x6b, 0xc0, 0xb4, 0x4d, 0xc0, + 0x2c, 0x9d, 0x80, 0x02, 0x1c, 0x2c, 0xe6, 0x38, + 0x5c, 0x15, 0x1c, 0xf6, 0x60, 0xc9, 0x8b, 0x35, + 0x80, 0x6f, 0x42, 0xaa, 0x02, 0xdf, 0xa4, 0x70, + 0xd0, 0x8c, 0x36, 0x39, 0x1a, 0xd3, 0x89, 0xb9, + 0x46, 0xdf, 0x09, 0xf4, 0x29, 0x21, 0x75, 0x9c, + 0x1e, 0xfc, 0xa1, 0x77, 0x1d, 0xd3, 0x65, 0x8f, + 0x33, 0xda, 0xb0, 0xb6, 0x18, 0x1b, 0x19, 0xd3, + 0x18, 0x8f, 0x7a, 0x50, 0x96, 0x33, 0x81, 0xe3, + 0x91, 0x3a, 0x3b, 0x32, 0x36, 0xbb, 0x85, 0x93, + 0x6d, 0xb1, 0x28, 0x1c, 0xdc, 0x2d, 0x31, 0x33, + 0x26, 0x33, 0x69, 0x1e, 0x95, 0x18, 0xb3, 0x62, + 0x6c, 0x67, 0x13, 0x5b, 0x10, 0xb0, 0x07, 0x95, + 0x39, 0x85, 0xac, 0x6e, 0x3e, 0x19, 0x63, 0x6c, + 0x5f, 0xeb, 0x52, 0x4a, 0x5a, 0xc3, 0x94, 0x66, + 0x4d, 0xcd, 0xb6, 0x62, 0x13, 0x37, 0xac, 0xde, + 0xc5, 0x91, 0xd1, 0xc4, 0xa3, 0x83, 0x33, 0x18, + 0xd9, 0x72, 0x98, 0x80, 0xce, 0x0a, 0xa9, 0x2e, + 0x96, 0x07, 0xe5, 0x59, 0x84, 0x64, 0x85, 0x8b, + 0xbd, 0x27, 0x74, 0x34, 0x0c, 0xe5, 0x4a, 0x47, + 0x2a, 0x83, 0xda, 0x8f, 0xbc, 0x27, 0xfb, 0xc7, + 0x77, 0xee, 0xb3, 0xdc, 0xb7, 0xe7, 0xf4, 0x65, + 0x7c, 0xb2, 0x64, 0x69, 0xe1, 0x6e, 0x29, 0x1e, + 0xa4, 0x9a, 0x8a, 0xa9, 0xf8, 0xe3, 0xd3, 0x1c, + 0xf6, 0x04, 0xfa, 0x96, 0x5a, 0x1a, 0x77, 0x3e, + 0x3e, 0x5e, 0x54, 0x4c, 0x50, 0x17, 0x59, 0xf9, + 0x33, 0x9c, 0x69, 0x5e, 0x36, 0xe1, 0x9f, 0x16, + 0x76, 0xdc, 0x66, 0x6f, 0x2a, 0xf1, 0x93, 0x4e, + 0xec, 0x8d, 0xb1, 0x5f, 0xd1, 0xcb, 0x65, 0x04, + 0x99, 0x3b, 0xb2, 0x73, 0x86, 0x32, 0x08, 0x37, + 0x2a, 0xb2, 0x1a, 0xca, 0x62, 0xe9, 0xa0, 0x61, + 0x93, 0x7b, 0x2f, 0xab, 0x36, 0x65, 0x4b, 0x30, + 0xc4, 0xc6, 0x61, 0xca, 0x4e, 0x31, 0x7d, 0x5c, + 0xf6, 0xff, 0x00, 0x6d, 0x95, 0x4c, 0x4c, 0xe0, + 0x32, 0x47, 0x34, 0x73, 0xaa, 0x99, 0xcb, 0x9e, + 0x27, 0x61, 0x21, 0x8d, 0x1a, 0x0e, 0x6b, 0xaa, + 0xaa, 0x99, 0x5c, 0xf6, 0xb9, 0x81, 0xd8, 0x03, + 0x78, 0xec, 0x13, 0xdf, 0x50, 0xf7, 0x47, 0x1f, + 0x05, 0x98, 0x74, 0xb9, 0xda, 0x7e, 0x95, 0x47, + 0xbc, 0xf9, 0x27, 0xac, 0x9b, 0xe9, 0x99, 0x33, + 0x70, 0x34, 0xdc, 0xe6, 0x2b, 0xcd, 0xed, 0xeb, + 0x4a, 0xf3, 0x7b, 0x7a, 0xd2, 0xbc, 0xde, 0xde, + 0xb4, 0xaf, 0x37, 0xb7, 0xad, 0x2b, 0xcd, 0xed, + 0xeb, 0x4a, 0xf3, 0x7b, 0x7a, 0xd2, 0xbc, 0xde, + 0xde, 0xb4, 0xaf, 0x37, 0xb7, 0xad, 0x2b, 0xcd, + 0xed, 0xeb, 0x4a, 0xf3, 0x7b, 0x7a, 0xd2, 0xbc, + 0xde, 0xde, 0xb4, 0xaf, 0x37, 0xb7, 0xad, 0x2b, + 0xcd, 0xed, 0xeb, 0x4a, 0xf3, 0x7b, 0x7a, 0xd2, + 0xbc, 0xde, 0xde, 0xb4, 0xaf, 0x37, 0xb7, 0xad, + 0x2b, 0xcd, 0xed, 0xeb, 0x4a, 0xf3, 0x7b, 0x7a, + 0xd2, 0xbc, 0xde, 0xde, 0xb4, 0xaf, 0x37, 0xb7, + 0xad, 0x2b, 0xc9, 0xd1, 0x46, 0xd7, 0x72, 0xb9, + 0xc5, 0xca, 0x32, 0x7f, 0xc3, 0x6e, 0xe5, 0x2b, + 0x67, 0x84, 0xc9, 0x8a, 0x3e, 0x1b, 0x0e, 0x70, + 0xb5, 0x55, 0x3f, 0x75, 0x6a, 0xaa, 0x7e, 0xea, + 0xd5, 0x54, 0xfd, 0xd5, 0xaa, 0xa9, 0xfb, 0xab, + 0x55, 0x53, 0xf7, 0x56, 0xaa, 0xa7, 0xee, 0xad, + 0x55, 0x4f, 0xdd, 0x5a, 0xaa, 0x9f, 0xba, 0xb5, + 0x55, 0x3f, 0x75, 0x6a, 0xaa, 0x7e, 0xea, 0xd5, + 0x54, 0xfd, 0xd5, 0xaa, 0xa9, 0xfb, 0xab, 0x55, + 0x53, 0xf7, 0x56, 0xaa, 0xa7, 0xee, 0xad, 0x55, + 0x4f, 0xdd, 0x5a, 0xaa, 0x9f, 0xba, 0xb5, 0x55, + 0x3f, 0x75, 0x6a, 0xaa, 0x7e, 0xea, 0xd5, 0x54, + 0xfd, 0xd5, 0xaa, 0xa9, 0xfb, 0xab, 0x55, 0x53, + 0xf7, 0x54, 0xd3, 0xd3, 0x46, 0xe6, 0x39, 0x84, + 0x37, 0x13, 0xf4, 0xee, 0x41, 0xed, 0x47, 0xde, + 0x13, 0xfd, 0xe3, 0xbb, 0xf7, 0x59, 0xee, 0x5b, + 0xf3, 0xfa, 0x3e, 0x12, 0xa2, 0x69, 0x02, 0x69, + 0x5a, 0x1c, 0xc1, 0xcb, 0x65, 0x35, 0x45, 0x47, + 0xe8, 0xcd, 0x8f, 0x40, 0x93, 0xeb, 0x9f, 0x42, + 0xf0, 0x1c, 0x94, 0x8d, 0x73, 0xa0, 0x6b, 0x19, + 0x9d, 0xba, 0x1a, 0x78, 0xee, 0xbc, 0x2e, 0xe8, + 0x5d, 0x66, 0x9a, 0xa0, 0x2e, 0xdf, 0x50, 0xba, + 0xa4, 0x70, 0x69, 0x7b, 0x59, 0x39, 0x2f, 0xb7, + 0x10, 0x4f, 0x9e, 0x2f, 0x07, 0x3a, 0xa0, 0x64, + 0x75, 0xf9, 0x6c, 0x2c, 0x2c, 0xb7, 0x32, 0xbc, + 0xef, 0x0c, 0x6c, 0xd2, 0xda, 0x9b, 0x10, 0xbd, + 0x9f, 0x6d, 0x2a, 0x76, 0x3d, 0xce, 0x6c, 0xb9, + 0xdb, 0x26, 0x7d, 0x2a, 0xd9, 0x57, 0xda, 0xd8, + 0x6d, 0x8b, 0x8b, 0x4a, 0x91, 0xfe, 0x10, 0x13, + 0x4a, 0x1d, 0x9e, 0xf1, 0x9c, 0xf7, 0x46, 0x68, + 0xae, 0xd8, 0x45, 0x78, 0xb6, 0x2d, 0x38, 0x6d, + 0xf8, 0x29, 0xe8, 0x59, 0xc1, 0x8a, 0x8a, 0x67, + 0xf4, 0x9d, 0xf8, 0x2a, 0x46, 0xd3, 0xd6, 0xe2, + 0x10, 0xc4, 0x5a, 0x20, 0xc9, 0x9d, 0x3c, 0x66, + 0xe9, 0xed, 0x8a, 0x4c, 0xb4, 0x60, 0xe6, 0x7d, + 0xad, 0x7f, 0xa3, 0x51, 0xef, 0x3e, 0x49, 0xeb, + 0xf8, 0x6d, 0xfa, 0x71, 0x16, 0xc4, 0xd6, 0x38, + 0x4b, 0x84, 0xbb, 0x8d, 0xd9, 0x95, 0x6b, 0x5c, + 0xc0, 0x64, 0x38, 0x43, 0x1d, 0x6c, 0xe0, 0xd9, + 0xc7, 0xe4, 0xa8, 0x43, 0xa3, 0x6b, 0xa4, 0x7d, + 0x4b, 0x0b, 0x89, 0x1c, 0x46, 0xf9, 0xbb, 0x14, + 0xae, 0x96, 0x28, 0x1a, 0xe1, 0x20, 0x0c, 0x30, + 0x06, 0xfa, 0x74, 0xe1, 0x41, 0xf4, 0xf4, 0xad, + 0xa8, 0x7e, 0x59, 0xc1, 0xc4, 0xc2, 0x24, 0xcd, + 0x60, 0xa0, 0x12, 0xb4, 0x41, 0x2b, 0xa6, 0x90, + 0x3a, 0xd1, 0xe7, 0xd0, 0xdc, 0xd6, 0x08, 0xe2, + 0x7c, 0x8d, 0x8f, 0x27, 0x94, 0xcf, 0x16, 0xff, + 0x00, 0x4d, 0xb8, 0x2a, 0xa7, 0x14, 0xc3, 0x03, + 0x65, 0x8e, 0xd2, 0x86, 0x5c, 0xda, 0xce, 0xfe, + 0xbe, 0x0a, 0x48, 0x89, 0xc5, 0x80, 0xda, 0xfc, + 0xbf, 0x4e, 0x2f, 0x76, 0xde, 0xed, 0xca, 0x1f, + 0x77, 0xf3, 0xfa, 0x15, 0x33, 0x49, 0x03, 0x67, + 0x2d, 0x73, 0x00, 0x0e, 0x24, 0x69, 0xbf, 0x27, + 0xa9, 0x07, 0x45, 0x86, 0x9d, 0xb9, 0x11, 0x33, + 0x9b, 0x21, 0x3b, 0xdc, 0xf6, 0xfc, 0xd6, 0x2c, + 0x6c, 0x2e, 0x0d, 0x0f, 0x31, 0x03, 0xbe, 0x03, + 0x95, 0x42, 0xc2, 0x62, 0x94, 0x99, 0x44, 0x6e, + 0x66, 0x23, 0xbd, 0x3c, 0x87, 0xf2, 0x4d, 0x90, + 0xc9, 0x13, 0x4b, 0x86, 0x21, 0x19, 0x3b, 0xe2, + 0x14, 0xa3, 0x14, 0x50, 0xf9, 0x57, 0x44, 0xd6, + 0x97, 0x1c, 0xe7, 0x90, 0x7e, 0x69, 0xae, 0xc7, + 0x1c, 0x78, 0x9e, 0x62, 0x01, 0xe7, 0x3e, 0x2c, + 0xd9, 0xbb, 0x54, 0xef, 0x9c, 0x13, 0x1c, 0x0d, + 0xc4, 0x5a, 0x0d, 0xae, 0x6f, 0x6b, 0x27, 0x4d, + 0x04, 0x39, 0x09, 0x23, 0x70, 0x6b, 0x98, 0x1c, + 0x48, 0x20, 0xfa, 0xd6, 0x4c, 0x4b, 0x0b, 0x9c, + 0x09, 0x0f, 0xb3, 0xb8, 0x16, 0xd3, 0x75, 0x36, + 0xae, 0x56, 0x88, 0xc3, 0xc3, 0xda, 0xe3, 0xa3, + 0x10, 0x19, 0xbf, 0x35, 0x82, 0x2c, 0x31, 0x7e, + 0x93, 0x33, 0x31, 0x3d, 0xd9, 0x83, 0x5b, 0x6b, + 0x29, 0x9c, 0xe9, 0xe3, 0xc2, 0xd8, 0xb2, 0x8c, + 0x73, 0x6f, 0x67, 0x6f, 0xad, 0xc8, 0xb1, 0x63, + 0x8f, 0x10, 0x68, 0x79, 0x8a, 0xfb, 0xe0, 0xde, + 0x54, 0x62, 0x73, 0xd8, 0xf7, 0xb7, 0x4e, 0x0e, + 0x2f, 0xa1, 0x55, 0xef, 0x1b, 0xb9, 0x07, 0xb5, + 0x1f, 0x78, 0x4f, 0xf7, 0x8e, 0xef, 0xdd, 0x67, + 0xb9, 0x6f, 0xcf, 0xe8, 0x82, 0xd3, 0x62, 0x38, + 0xc2, 0x19, 0x69, 0xa4, 0x96, 0xda, 0x31, 0xba, + 0xe8, 0xb2, 0x39, 0xa4, 0x63, 0x0e, 0x96, 0xb5, + 0xc4, 0x02, 0x8c, 0x42, 0x47, 0x64, 0xc9, 0xb9, + 0x65, 0xf3, 0x27, 0x46, 0xd9, 0x5e, 0xd8, 0xdd, + 0xa5, 0x81, 0xd9, 0x8a, 0xc8, 0xe5, 0xa4, 0xc9, + 0x7d, 0x8c, 0x59, 0xb9, 0x93, 0x03, 0xa4, 0x7b, + 0x84, 0x7c, 0x00, 0x5d, 0xc1, 0xf5, 0x22, 0xf9, + 0x5e, 0xe9, 0x1e, 0x7e, 0xb3, 0x8d, 0xce, 0xee, + 0x4b, 0x1b, 0xb2, 0x64, 0xdf, 0x05, 0xf3, 0x5d, + 0x39, 0xf9, 0x79, 0x31, 0xb8, 0x61, 0x73, 0xb1, + 0x1b, 0x91, 0xc8, 0xb1, 0xc4, 0xf7, 0x46, 0xef, + 0xb4, 0xd3, 0x63, 0xf4, 0xaa, 0x3d, 0xe7, 0xc9, + 0x3d, 0x7f, 0x0d, 0xbf, 0x4c, 0x43, 0x8a, 0x6c, + 0xad, 0xf1, 0xf0, 0x05, 0xaf, 0x6d, 0x1a, 0x53, + 0xac, 0x0e, 0x3c, 0xab, 0x24, 0x1c, 0x99, 0xaf, + 0xf8, 0xa0, 0xe0, 0xc7, 0x88, 0xdb, 0x51, 0x1b, + 0xda, 0x3f, 0x71, 0xa2, 0xdc, 0xea, 0xa1, 0xb0, + 0x65, 0x5e, 0xe9, 0xf4, 0x99, 0x1a, 0x05, 0x85, + 0xef, 0xca, 0x99, 0x00, 0xc4, 0x1e, 0x24, 0x2f, + 0xbf, 0xc0, 0x7e, 0x0a, 0x36, 0x3f, 0x1d, 0xc1, + 0x96, 0xee, 0x6e, 0x91, 0x89, 0xa0, 0x66, 0xe6, + 0x50, 0x06, 0xba, 0xa6, 0x27, 0x44, 0xd2, 0xd1, + 0x23, 0x2d, 0x7d, 0x37, 0xbe, 0x95, 0x50, 0x03, + 0x5c, 0x0c, 0x8f, 0x63, 0xae, 0x78, 0xec, 0xd2, + 0x09, 0x3e, 0x93, 0x75, 0x24, 0xad, 0xb8, 0x6b, + 0x8f, 0x1f, 0xd3, 0x8b, 0xdd, 0xb7, 0xbb, 0x72, + 0x87, 0xdd, 0xfc, 0xfe, 0x85, 0x48, 0x8e, 0x57, + 0x45, 0x33, 0xdc, 0xcb, 0x61, 0xe4, 0xcf, 0x75, + 0x5a, 0x66, 0x90, 0xba, 0x49, 0x63, 0x00, 0x17, + 0x67, 0xb9, 0xc4, 0xdf, 0xc1, 0x65, 0x59, 0x2c, + 0x6d, 0x71, 0x63, 0x5b, 0x93, 0xc8, 0x0c, 0x7c, + 0x57, 0xdf, 0x5b, 0x42, 0x8e, 0xa8, 0x4e, 0x5d, + 0x8a, 0xa0, 0x49, 0x6c, 0x27, 0x78, 0xdb, 0xdc, + 0xdf, 0xf2, 0x58, 0x25, 0x9c, 0x48, 0xcc, 0x26, + 0xd0, 0xba, 0x3d, 0xf3, 0x5d, 0xc5, 0x63, 0xc8, + 0xb1, 0x3a, 0x7c, 0x9b, 0x63, 0xa9, 0x7c, 0x83, + 0x7a, 0x77, 0xed, 0x26, 0xf9, 0xbd, 0x39, 0x95, + 0x33, 0x89, 0xc2, 0x45, 0x53, 0xa5, 0x70, 0xe4, + 0x07, 0x0f, 0xe0, 0x55, 0x53, 0x24, 0x24, 0x43, + 0x3d, 0xc6, 0x20, 0x34, 0x67, 0xb8, 0x29, 0xd0, + 0x45, 0x36, 0x58, 0xc8, 0xe0, 0x5e, 0xf6, 0xb6, + 0xc0, 0x01, 0xeb, 0x44, 0x4b, 0x38, 0x9d, 0xef, + 0xbb, 0x32, 0xc2, 0x3b, 0x39, 0xad, 0x2d, 0x23, + 0x7d, 0xcb, 0xc4, 0xaa, 0x18, 0xc9, 0x72, 0x98, + 0xe2, 0x03, 0x15, 0xb3, 0x17, 0x63, 0x07, 0x37, + 0xc1, 0x39, 0xd9, 0x4b, 0x79, 0x69, 0xdc, 0xd7, + 0x96, 0x9d, 0xee, 0x20, 0x30, 0xb9, 0x60, 0x7d, + 0x59, 0x7b, 0xf2, 0x06, 0x22, 0xf7, 0x87, 0x69, + 0xc6, 0x1c, 0xa4, 0xa8, 0x12, 0xde, 0x49, 0x21, + 0x11, 0xe4, 0xb0, 0x9c, 0xc6, 0xc0, 0x1f, 0x82, + 0xa9, 0x91, 0x86, 0xec, 0x7c, 0x8e, 0x20, 0xfa, + 0x2f, 0xf4, 0x2a, 0xbd, 0xe3, 0x77, 0x20, 0xf6, + 0x99, 0xde, 0x13, 0xfd, 0xe3, 0xbb, 0xf7, 0x59, + 0xee, 0x5b, 0xf3, 0xfa, 0x34, 0x93, 0x02, 0x71, + 0x4b, 0x8e, 0xff, 0x00, 0x02, 0xa8, 0x8c, 0x01, + 0xcf, 0x9a, 0x76, 0xbc, 0x96, 0xdf, 0x90, 0x9f, + 0xc1, 0x35, 0xf2, 0xb2, 0xcd, 0x26, 0xd7, 0x04, + 0x1c, 0xfc, 0x8b, 0xc6, 0xc5, 0xb8, 0x78, 0x6d, + 0x88, 0x2c, 0xa4, 0xb1, 0x61, 0x6e, 0x83, 0x9c, + 0x1b, 0x7a, 0xf9, 0x15, 0xa5, 0x93, 0x25, 0x1e, + 0x92, 0x6d, 0x7e, 0x64, 0xfa, 0x5c, 0xae, 0x4e, + 0x06, 0xbb, 0x58, 0xfe, 0x4b, 0x28, 0x9f, 0x44, + 0x65, 0x18, 0xa6, 0x10, 0x96, 0xcd, 0x6d, 0x27, + 0x41, 0xcc, 0xaa, 0x0d, 0x2b, 0xe5, 0x73, 0xe9, + 0xf8, 0x59, 0x4b, 0x59, 0xe2, 0xf6, 0xb8, 0x55, + 0x77, 0x73, 0x84, 0x91, 0xb2, 0xf1, 0xdb, 0x8c, + 0xaa, 0x83, 0x23, 0x9c, 0xd6, 0xc7, 0x19, 0x23, + 0x0f, 0x1b, 0xad, 0x71, 0xdc, 0x55, 0x36, 0x12, + 0x4e, 0x56, 0x11, 0x21, 0xbf, 0x2e, 0x75, 0x13, + 0x29, 0xf7, 0xd8, 0xa0, 0x64, 0xa7, 0x28, 0xf0, + 0xdd, 0x23, 0xd2, 0x9a, 0x26, 0x68, 0x6e, 0x21, + 0x88, 0x59, 0xc0, 0xdc, 0x7c, 0x3e, 0x8d, 0x47, + 0xbc, 0xf9, 0x27, 0xa6, 0xc3, 0x2d, 0x39, 0x99, + 0xf8, 0x01, 0xc5, 0x99, 0x6c, 0x27, 0x99, 0xab, + 0x61, 0x3c, 0xcd, 0x5b, 0x09, 0xe6, 0x6a, 0xd8, + 0x4f, 0x33, 0x56, 0xc2, 0x79, 0x9a, 0xb6, 0x13, + 0xcc, 0xd5, 0xb0, 0x9e, 0x66, 0xad, 0x84, 0xf3, + 0x35, 0x6c, 0x27, 0x99, 0xab, 0x61, 0x3c, 0xcd, + 0x5b, 0x09, 0xe6, 0x6a, 0xd8, 0x4f, 0x33, 0x56, + 0xc2, 0x79, 0x9a, 0xb6, 0x13, 0xcc, 0xd5, 0xb0, + 0x9e, 0x66, 0xad, 0x84, 0xf3, 0x35, 0x6c, 0x27, + 0x99, 0xab, 0x61, 0x3c, 0xcd, 0x5b, 0x09, 0xe6, + 0x6a, 0xd8, 0x4f, 0x33, 0x56, 0xc2, 0x79, 0x9a, + 0x83, 0xb8, 0x9c, 0xc0, 0x77, 0x29, 0x04, 0xd4, + 0xb1, 0x4f, 0xe4, 0xf4, 0xc8, 0x74, 0x67, 0x5e, + 0x6e, 0xa6, 0xe9, 0x2f, 0x37, 0x53, 0x74, 0x96, + 0x6f, 0x06, 0x53, 0x9f, 0x89, 0x5e, 0x6b, 0xa7, + 0xe7, 0x2b, 0xcd, 0x74, 0xfc, 0xe5, 0x79, 0xae, + 0x9f, 0x9c, 0xaf, 0x35, 0xd3, 0xf3, 0x95, 0xe6, + 0xba, 0x7e, 0x72, 0xbc, 0xd7, 0x4f, 0xce, 0x57, + 0x9a, 0xe9, 0xf9, 0xca, 0xf3, 0x5d, 0x3f, 0x39, + 0x5e, 0x6b, 0xa7, 0xe7, 0x2b, 0xcd, 0x74, 0xfc, + 0xe5, 0x79, 0xae, 0x9f, 0x9c, 0xaf, 0x35, 0xd3, + 0xf3, 0x95, 0xe6, 0xba, 0x7e, 0x72, 0xbc, 0xd7, + 0x4f, 0xce, 0x57, 0x9a, 0xe9, 0xf9, 0xca, 0xf3, + 0x5d, 0x3f, 0x39, 0x5e, 0x6b, 0xa7, 0xe7, 0x2b, + 0xcd, 0x74, 0xfc, 0xe5, 0x55, 0x64, 0xe9, 0x99, + 0x4e, 0x03, 0x9b, 0x99, 0x9c, 0x7b, 0x90, 0x7b, + 0x4c, 0xef, 0x09, 0xfe, 0xf1, 0xdd, 0xfb, 0xac, + 0xf7, 0x2d, 0xf9, 0xfd, 0x1a, 0x23, 0x0b, 0x0c, + 0x99, 0x27, 0x3d, 0xaf, 0xc2, 0x2f, 0x6b, 0xe7, + 0x0b, 0xc1, 0x14, 0xe7, 0x79, 0x3b, 0x22, 0x90, + 0x91, 0xf6, 0x6f, 0x88, 0x85, 0x52, 0x25, 0x69, + 0x65, 0xe7, 0x60, 0x68, 0x70, 0xe3, 0xb1, 0xba, + 0xa5, 0x73, 0x86, 0xf1, 0xb5, 0xcd, 0x2e, 0x3c, + 0x99, 0x97, 0x85, 0xcc, 0xed, 0x73, 0x46, 0x1c, + 0x3b, 0xee, 0x37, 0x63, 0x16, 0x56, 0x63, 0x4b, + 0x8f, 0x20, 0x0a, 0x48, 0x9a, 0xd2, 0x32, 0x8e, + 0xcc, 0xe2, 0x33, 0x68, 0x54, 0x51, 0xb6, 0x37, + 0xc7, 0x47, 0x14, 0xc0, 0xe3, 0x7b, 0x6d, 0x8c, + 0xfd, 0xa2, 0xbc, 0x28, 0xe9, 0x98, 0x58, 0x30, + 0x64, 0x85, 0xc6, 0x92, 0x5c, 0x3f, 0x05, 0x57, + 0x33, 0x74, 0xb1, 0xd1, 0x3b, 0xef, 0x26, 0xc1, + 0x1f, 0x06, 0x51, 0x35, 0x47, 0xfa, 0x70, 0x1c, + 0x1f, 0x35, 0x40, 0xc1, 0x4f, 0x4f, 0x2f, 0xe8, + 0xcd, 0x37, 0x96, 0x20, 0xe3, 0xc6, 0xa0, 0x7b, + 0xc6, 0x18, 0x5b, 0x4b, 0x1c, 0x92, 0x60, 0x1a, + 0x05, 0xb4, 0x04, 0x64, 0x91, 0x86, 0x31, 0xa1, + 0xac, 0xfb, 0x23, 0x88, 0x7d, 0x1a, 0x8f, 0x79, + 0xf2, 0x4f, 0x5f, 0xc3, 0x6f, 0xd2, 0xa7, 0x92, + 0xa8, 0xb5, 0x8c, 0x75, 0x43, 0x1d, 0x0b, 0x74, + 0x06, 0x34, 0x1c, 0xff, 0x00, 0x05, 0x1c, 0xb3, + 0xd5, 0xb6, 0xa6, 0x26, 0x07, 0xb8, 0x3a, 0xf8, + 0x83, 0x1c, 0x1b, 0x75, 0x0c, 0xa6, 0x6f, 0x18, + 0x6b, 0x9b, 0x9a, 0x42, 0xdb, 0x3b, 0x4f, 0x1a, + 0x6d, 0x53, 0x08, 0x74, 0xd9, 0x18, 0x99, 0x9b, + 0xfb, 0xb0, 0x5b, 0xa7, 0xe4, 0xbc, 0x1a, 0x3c, + 0x71, 0xb0, 0xc7, 0x9f, 0x14, 0x2e, 0xbe, 0xff, + 0x00, 0x7e, 0x7e, 0x0a, 0xf3, 0x37, 0x26, 0xd6, + 0xb8, 0x82, 0x2d, 0x7c, 0x07, 0xf2, 0x54, 0x2e, + 0x92, 0x68, 0xea, 0xe2, 0xf1, 0x86, 0xda, 0x66, + 0x9b, 0x91, 0x9f, 0x42, 0xab, 0x35, 0xb3, 0x09, + 0x22, 0x3b, 0xd8, 0xc6, 0x50, 0x3f, 0x7f, 0x7e, + 0x2b, 0x68, 0xcc, 0xb2, 0x46, 0x17, 0xb5, 0xb0, + 0x35, 0xb2, 0xe3, 0x2d, 0xcc, 0x49, 0xe1, 0x67, + 0xf8, 0x8e, 0x8a, 0xf0, 0x75, 0xf4, 0x31, 0x8c, + 0x64, 0x9e, 0xce, 0x00, 0xef, 0xfd, 0x94, 0x8f, + 0xfb, 0x4d, 0x61, 0xfb, 0xa3, 0xe9, 0x45, 0xee, + 0xdb, 0xdd, 0xb9, 0xe0, 0xdf, 0x74, 0x7b, 0xd4, + 0x0c, 0xbc, 0xaf, 0xca, 0x48, 0x22, 0x38, 0x24, + 0xd1, 0x98, 0x7e, 0xe7, 0xa7, 0xd2, 0x9a, 0xf1, + 0x1c, 0xc5, 0xd2, 0x87, 0x39, 0x96, 0x70, 0x38, + 0x6d, 0xcb, 0x9b, 0x3f, 0x62, 0xac, 0xb3, 0x23, + 0x7b, 0xdb, 0x19, 0x2d, 0xca, 0xdb, 0x0d, 0xee, + 0xde, 0x5c, 0xca, 0x91, 0xaf, 0x0c, 0x86, 0x47, + 0xb7, 0x7e, 0x61, 0x6d, 0xda, 0x73, 0x9d, 0x16, + 0xe3, 0xf5, 0x29, 0xcc, 0xae, 0x92, 0xd9, 0x0c, + 0xa3, 0x2f, 0x1d, 0x8f, 0x0a, 0xd9, 0xc5, 0xff, + 0x00, 0xab, 0xa1, 0x26, 0x59, 0xd1, 0xc3, 0x82, + 0x3b, 0x9c, 0x9d, 0xc9, 0x73, 0x9b, 0x7e, 0x55, + 0x8a, 0x69, 0xf0, 0xf9, 0x53, 0x1e, 0x66, 0xdf, + 0x93, 0x3f, 0x31, 0x53, 0x97, 0xbb, 0x3c, 0x72, + 0xe4, 0x80, 0xb7, 0x0b, 0xfa, 0xf9, 0xa6, 0xba, + 0x28, 0xa9, 0x9c, 0xf3, 0x31, 0x04, 0xce, 0x19, + 0xa2, 0xc3, 0x95, 0x4e, 0xc8, 0xb1, 0xc7, 0xe5, + 0x30, 0xb5, 0x82, 0x22, 0x6d, 0xeb, 0xe4, 0x08, + 0x19, 0x27, 0x11, 0xcc, 0xe6, 0x97, 0xb6, 0x32, + 0x38, 0xbd, 0x7f, 0x04, 0x24, 0xcd, 0x18, 0x2c, + 0x88, 0x31, 0xa0, 0x70, 0xdd, 0x81, 0xb7, 0x59, + 0x28, 0xa7, 0x12, 0x48, 0xd9, 0x04, 0x72, 0x0c, + 0x36, 0x03, 0xf1, 0x4c, 0x74, 0x4f, 0xca, 0xf9, + 0x62, 0x31, 0x96, 0x61, 0x3a, 0x02, 0xa3, 0x7c, + 0x42, 0x21, 0x76, 0xbb, 0x11, 0x73, 0xda, 0xd2, + 0x77, 0xc7, 0x95, 0x3c, 0x11, 0x1b, 0x63, 0x26, + 0x70, 0x06, 0x0e, 0x0d, 0xa3, 0x19, 0xd0, 0x98, + 0x54, 0x7e, 0x8b, 0x83, 0x11, 0x7e, 0x0c, 0xfa, + 0x6d, 0x6b, 0x29, 0x65, 0x33, 0xf9, 0x36, 0xe1, + 0xc1, 0x66, 0x70, 0xb1, 0x03, 0x6e, 0xe4, 0xfb, + 0x4f, 0x8a, 0x56, 0xc4, 0xd9, 0xb0, 0xe1, 0xcd, + 0x63, 0x6e, 0x3f, 0x8a, 0xa7, 0x73, 0x9e, 0xf7, + 0x42, 0xe9, 0x5b, 0x1b, 0x89, 0x88, 0xb6, 0xf7, + 0xe4, 0xe5, 0x08, 0x13, 0x50, 0x63, 0x6c, 0x92, + 0x16, 0x45, 0x76, 0x69, 0xf5, 0xe7, 0xcd, 0xa5, + 0x57, 0x34, 0xe9, 0x12, 0x34, 0x1e, 0xdd, 0xc8, + 0x3d, 0xa6, 0x77, 0x84, 0xff, 0x00, 0x78, 0xee, + 0xfd, 0xd6, 0x7b, 0x96, 0xfc, 0xfe, 0x8d, 0xe2, + 0x95, 0xf1, 0x1e, 0x56, 0x3a, 0xc8, 0x4f, 0x2e, + 0x27, 0xe6, 0x75, 0xf8, 0xce, 0x70, 0x42, 0x68, + 0x92, 0x57, 0xc9, 0x87, 0x46, 0x27, 0x5e, 0xc9, + 0xcc, 0x6c, 0x8e, 0x6b, 0x1d, 0xc2, 0x68, 0x39, + 0x8a, 0x6b, 0x64, 0x95, 0xf2, 0x35, 0xba, 0x03, + 0x9d, 0x7b, 0x2c, 0x51, 0x48, 0xf8, 0x9d, 0xa2, + 0xec, 0x36, 0x4d, 0x71, 0xaa, 0x98, 0xb9, 0xba, + 0x09, 0x90, 0xe6, 0x58, 0x65, 0xa8, 0x96, 0x56, + 0xf2, 0x3d, 0xe4, 0x84, 0xd6, 0xc9, 0x2b, 0xde, + 0xd6, 0xe8, 0x0e, 0x75, 0xec, 0x9c, 0xd0, 0xe2, + 0x1a, 0xed, 0x22, 0xfa, 0x50, 0x76, 0x51, 0xf8, + 0x80, 0xc2, 0x0d, 0xf8, 0xb9, 0x13, 0x71, 0x38, + 0xbb, 0x08, 0xb0, 0xb9, 0xd0, 0x15, 0xd9, 0x51, + 0x2b, 0x0d, 0xb0, 0xdd, 0xaf, 0x23, 0x37, 0x22, + 0x06, 0x69, 0x9f, 0x29, 0x1a, 0x31, 0xba, 0xff, + 0x00, 0x46, 0xa3, 0xde, 0x7c, 0x93, 0xd7, 0xf0, + 0xdb, 0xf4, 0x73, 0xe7, 0x08, 0x4a, 0x29, 0x1c, + 0x1e, 0x08, 0xcc, 0xf9, 0x31, 0x36, 0xdc, 0x96, + 0xb2, 0x63, 0x60, 0xa7, 0xc1, 0x10, 0x24, 0xb9, + 0xae, 0x7e, 0x2c, 0x57, 0x16, 0xee, 0x51, 0xb2, + 0x38, 0xf2, 0x51, 0x46, 0x33, 0x36, 0xf7, 0x29, + 0xaf, 0x31, 0xde, 0x3c, 0x90, 0x85, 0xf1, 0xdf, + 0x84, 0x2d, 0x65, 0x03, 0x64, 0xa5, 0x74, 0x8e, + 0x86, 0xf6, 0x39, 0x5b, 0x0d, 0x37, 0xd1, 0x64, + 0xea, 0x89, 0x18, 0xd9, 0x71, 0x92, 0x5c, 0xd3, + 0xa0, 0xdd, 0x44, 0x20, 0xa7, 0xc0, 0xc6, 0xca, + 0xd9, 0x5c, 0x1c, 0xfb, 0x97, 0x10, 0xa6, 0x6c, + 0x91, 0xe5, 0x62, 0x90, 0x87, 0x61, 0xbd, 0xac, + 0x6f, 0xff, 0x00, 0xd5, 0x2c, 0xcf, 0x18, 0x84, + 0x98, 0xb1, 0x32, 0xfc, 0xaa, 0x56, 0x86, 0x70, + 0xe2, 0x6c, 0x7a, 0x74, 0x58, 0x5a, 0xfc, 0xd7, + 0xe7, 0x58, 0xf0, 0xe1, 0xde, 0xb4, 0x5b, 0xd4, + 0x2d, 0xf4, 0xa2, 0xf7, 0x6d, 0xee, 0xdc, 0xa0, + 0x99, 0x84, 0x61, 0x6b, 0x4b, 0x33, 0xf2, 0xdd, + 0x5f, 0x2f, 0x9e, 0xe1, 0xdc, 0x33, 0xa7, 0x95, + 0x3a, 0x26, 0xcf, 0x86, 0x27, 0x70, 0x98, 0x1e, + 0x6c, 0x55, 0x44, 0x75, 0x0e, 0x75, 0xa6, 0x66, + 0x1b, 0xc4, 0x2f, 0x6c, 0xe3, 0xf0, 0x51, 0x47, + 0x1e, 0x57, 0x24, 0xd6, 0xc8, 0x32, 0x86, 0xd8, + 0xee, 0xe1, 0x6c, 0xcb, 0x25, 0xe5, 0x40, 0xc8, + 0x98, 0xaf, 0x61, 0xf6, 0xb1, 0x5f, 0x4a, 0x0c, + 0x12, 0x54, 0x40, 0x4b, 0x59, 0x77, 0x45, 0xca, + 0xd6, 0xdb, 0x97, 0x42, 0x64, 0x6d, 0xca, 0x39, + 0xf9, 0x57, 0x3a, 0xef, 0x37, 0x26, 0xf8, 0x6d, + 0xdc, 0xa9, 0xda, 0xc7, 0x18, 0x67, 0x8d, 0x9e, + 0x50, 0xb4, 0xe7, 0xc5, 0x60, 0x3b, 0x80, 0x59, + 0x3a, 0x97, 0xcc, 0x1f, 0x95, 0x74, 0x98, 0x98, + 0xd0, 0x6f, 0x70, 0x3d, 0x3e, 0x85, 0x0b, 0xdc, + 0xc9, 0x46, 0x46, 0x4c, 0x4d, 0x60, 0xd0, 0xec, + 0xc0, 0x0b, 0xf4, 0x55, 0xdc, 0xd9, 0x5c, 0xf6, + 0x34, 0xb1, 0x9c, 0x40, 0xe7, 0x36, 0x27, 0x9d, + 0x06, 0x1c, 0x5e, 0x4d, 0xac, 0xc8, 0x9f, 0xb2, + 0x40, 0x00, 0xfc, 0x0a, 0x6c, 0xa2, 0x4a, 0x99, + 0x3c, 0xa0, 0x79, 0x85, 0xee, 0xde, 0x01, 0xc8, + 0x9b, 0x04, 0x19, 0x43, 0x69, 0x0b, 0xf1, 0x48, + 0x07, 0x22, 0xa5, 0x8c, 0x5e, 0xf1, 0x34, 0x83, + 0xd2, 0x25, 0x62, 0x2c, 0x93, 0x0e, 0x29, 0x8d, + 0xbd, 0xa6, 0x00, 0x84, 0x11, 0x3a, 0x76, 0x45, + 0x80, 0x8c, 0xa8, 0xcc, 0xfb, 0xde, 0xfc, 0xaa, + 0x56, 0x62, 0x9a, 0x42, 0xe7, 0xb0, 0x87, 0x4a, + 0x6e, 0x73, 0x07, 0x7e, 0x2a, 0x49, 0x30, 0x92, + 0x0c, 0x0d, 0x8a, 0xde, 0x90, 0x1b, 0xf8, 0x29, + 0x24, 0xf2, 0xce, 0x2e, 0x9d, 0x93, 0xef, 0xad, + 0xc4, 0x78, 0x3a, 0x56, 0x49, 0xb3, 0x55, 0x44, + 0xc6, 0xbc, 0xb9, 0xa6, 0x2c, 0xc5, 0xc0, 0xf1, + 0x1c, 0xea, 0xa2, 0x57, 0xdf, 0xcb, 0x4b, 0x9a, + 0xfc, 0x76, 0xe3, 0xdc, 0x83, 0xda, 0x67, 0x78, + 0x4f, 0xf7, 0x8e, 0xef, 0xdd, 0x67, 0xb9, 0x6f, + 0xcf, 0xf6, 0x7a, 0x8f, 0x7a, 0x3b, 0x93, 0xd0, + 0x63, 0xe8, 0x60, 0x9c, 0xe0, 0x6e, 0xfd, 0xfa, + 0x57, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x97, 0x9a, 0xa9, 0x79, + 0x97, 0x9a, 0xa9, 0x79, 0x93, 0x0d, 0xb0, 0xde, + 0x36, 0xe6, 0x1b, 0x8e, 0x8e, 0x46, 0x09, 0x62, + 0x76, 0x96, 0x39, 0x6a, 0xe7, 0x1e, 0x80, 0xf5, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0xc0, 0xa8, 0xe9, 0x85, + 0xc0, 0xa8, 0xe9, 0x85, 0x7c, 0x8c, 0xb2, 0x7a, + 0x1e, 0xfc, 0xc8, 0x66, 0x0d, 0x6b, 0x45, 0x83, + 0x5b, 0xa0, 0x6e, 0x41, 0xed, 0x33, 0xbc, 0x27, + 0xfb, 0xc7, 0x77, 0xee, 0xb3, 0xdc, 0xb7, 0xe7, + 0xfb, 0x3d, 0x47, 0xbd, 0x1d, 0xc9, 0xeb, 0xf8, + 0x6d, 0xfa, 0x37, 0x71, 0x03, 0x03, 0x1c, 0xfb, + 0xbb, 0x40, 0xb0, 0x50, 0xca, 0x66, 0xf1, 0x86, + 0xb9, 0xb9, 0xa4, 0x2d, 0xb3, 0xb4, 0xf1, 0xa6, + 0xd5, 0x30, 0x87, 0x4d, 0x91, 0x89, 0x99, 0xbf, + 0xbb, 0x05, 0xba, 0x7e, 0x4b, 0xc1, 0xa3, 0xc7, + 0x1b, 0x0c, 0x79, 0xf1, 0x42, 0xeb, 0xef, 0xf7, + 0xe7, 0xe0, 0xad, 0xa9, 0x70, 0xca, 0x69, 0xfa, + 0x9b, 0xd2, 0xa8, 0x44, 0x9e, 0x10, 0x15, 0x6d, + 0xcb, 0xb3, 0x7a, 0x0b, 0xb3, 0x67, 0xf4, 0x85, + 0x03, 0x5d, 0xe1, 0x26, 0xd4, 0x33, 0x2e, 0xcf, + 0x24, 0x0b, 0xbe, 0xd7, 0xa4, 0x2a, 0x96, 0xd6, + 0x4c, 0xd9, 0x6e, 0x46, 0x49, 0xb9, 0x40, 0xf2, + 0x0d, 0xfd, 0x1a, 0x33, 0x2a, 0xc7, 0x54, 0x4c, + 0x1d, 0x40, 0x31, 0x6f, 0x0c, 0x81, 0xdc, 0x59, + 0xb3, 0x71, 0x67, 0x51, 0xc1, 0x01, 0x0d, 0x89, + 0xac, 0x61, 0x2d, 0xb6, 0x67, 0x92, 0x01, 0x37, + 0xe5, 0xd2, 0xbc, 0x2b, 0x4a, 0xd1, 0x66, 0xc8, + 0xf6, 0xb5, 0xa3, 0x90, 0xd9, 0xc4, 0x0e, 0x7b, + 0x28, 0xe3, 0xe3, 0xca, 0x36, 0x47, 0x7c, 0x43, + 0xbe, 0x40, 0x7d, 0x28, 0xbd, 0xdb, 0x7b, 0xbf, + 0x6a, 0x83, 0xda, 0x67, 0x78, 0x4f, 0xf7, 0x8e, + 0xef, 0xdd, 0x8f, 0xdc, 0xb7, 0xe7, 0xfb, 0x3d, + 0x47, 0xbd, 0x1d, 0xc9, 0xeb, 0xf8, 0x6d, 0xfa, + 0x22, 0x4b, 0x62, 0x19, 0xc1, 0x69, 0xe3, 0x07, + 0x31, 0x51, 0xb2, 0x38, 0xf2, 0x51, 0x46, 0x33, + 0x36, 0xf7, 0x29, 0xaf, 0x31, 0xde, 0x3c, 0x90, + 0x85, 0xf1, 0xdf, 0x84, 0x2d, 0x65, 0x03, 0x64, + 0xa5, 0x74, 0x8e, 0x86, 0xf6, 0x39, 0x5b, 0x0d, + 0x37, 0xd1, 0x64, 0xea, 0xa9, 0x19, 0x94, 0xc5, + 0x8b, 0x13, 0x41, 0xb7, 0x08, 0x1f, 0xc5, 0x43, + 0x2c, 0x34, 0xcf, 0x6b, 0xa3, 0x78, 0x7e, 0xfa, + 0x5b, 0xde, 0xdf, 0x04, 0xc9, 0x99, 0x49, 0x20, + 0x91, 0xaf, 0x0f, 0xcf, 0x35, 0xf8, 0xfd, 0x94, + 0x5d, 0xca, 0x55, 0x4c, 0xc6, 0x3b, 0xc7, 0x3d, + 0xc3, 0xa3, 0xba, 0x8f, 0x2f, 0x4a, 0x26, 0x96, + 0x31, 0x85, 0xae, 0xc7, 0x60, 0x47, 0x15, 0xc7, + 0x1a, 0x95, 0xc7, 0x3c, 0xaf, 0x95, 0xb2, 0xe3, + 0xf4, 0x8b, 0xfe, 0x2a, 0x61, 0x93, 0xc0, 0x1f, + 0x20, 0x78, 0xcf, 0xc1, 0x00, 0x10, 0x07, 0xd2, + 0x8b, 0xdd, 0xb7, 0xbb, 0xf6, 0xa8, 0x3d, 0xa6, + 0x77, 0x84, 0xff, 0x00, 0x78, 0xee, 0xfd, 0xd6, + 0x3e, 0x18, 0x1d, 0x23, 0x32, 0x4d, 0x17, 0x0b, + 0x64, 0x91, 0x6c, 0x92, 0x2d, 0x92, 0x45, 0xb2, + 0x48, 0xb6, 0x49, 0x16, 0xc9, 0x22, 0xd9, 0x24, + 0x5b, 0x24, 0x8b, 0x64, 0x91, 0x6c, 0x92, 0x2d, + 0x92, 0x45, 0xb2, 0x48, 0xb6, 0x49, 0x16, 0xc9, + 0x22, 0xd9, 0x24, 0x5b, 0x24, 0x8b, 0x64, 0x91, + 0x6c, 0x92, 0x2d, 0x92, 0x45, 0xb2, 0x48, 0xb6, + 0x49, 0x16, 0xc9, 0x22, 0x9d, 0xb3, 0xc4, 0x62, + 0x26, 0x4b, 0x8b, 0xfa, 0x93, 0xd0, 0x8a, 0x3c, + 0x9e, 0x1c, 0x0d, 0x3b, 0xe6, 0x5d, 0x68, 0x87, + 0xab, 0x5a, 0x21, 0xea, 0xd6, 0x88, 0x7a, 0xb5, + 0xa2, 0x1e, 0xad, 0x68, 0x87, 0xab, 0x5a, 0x21, + 0xea, 0xd6, 0x88, 0x7a, 0xb5, 0xa2, 0x1e, 0xad, + 0x65, 0x18, 0xda, 0x7c, 0x17, 0xc3, 0x77, 0x61, + 0x6e, 0x7f, 0x89, 0x4e, 0x83, 0x23, 0x1e, 0x51, + 0xb9, 0xc8, 0xc0, 0x33, 0x28, 0xe1, 0x74, 0x71, + 0x63, 0x93, 0x83, 0xbc, 0x16, 0x3f, 0x14, 0x69, + 0x9b, 0x1c, 0x46, 0x70, 0x48, 0xc3, 0x80, 0x71, + 0x2d, 0x10, 0xf5, 0x6b, 0x44, 0x3d, 0x5a, 0xd1, + 0x0f, 0x56, 0xb4, 0x43, 0xd5, 0xad, 0x10, 0xf5, + 0x6b, 0x44, 0x3d, 0x5a, 0xd1, 0x0f, 0x56, 0xb4, + 0x43, 0xd5, 0xad, 0x10, 0xf5, 0x69, 0x8e, 0x3a, + 0x4c, 0x6d, 0x3f, 0xb5, 0x41, 0xed, 0x33, 0xbc, + 0x27, 0xfb, 0xc7, 0x77, 0xee, 0xb9, 0xac, 0x9a, + 0x46, 0x37, 0x24, 0xcc, 0xcd, 0x71, 0x0b, 0x69, + 0x9b, 0xa6, 0x56, 0xd3, 0x37, 0x4c, 0xad, 0xa6, + 0x6e, 0x99, 0x5b, 0x4c, 0xdd, 0x32, 0xa2, 0x74, + 0xbe, 0x1a, 0x86, 0x07, 0x49, 0x1b, 0x64, 0x0c, + 0x7c, 0xb2, 0x5e, 0xc7, 0xd4, 0xd5, 0x04, 0xef, + 0xf0, 0xbc, 0x54, 0xe2, 0x7b, 0xe0, 0x6c, 0xb2, + 0xbc, 0x1c, 0xc6, 0xdc, 0x96, 0x55, 0x8e, 0x92, + 0xa2, 0x46, 0x1a, 0x57, 0xb6, 0x39, 0x1a, 0x64, + 0x37, 0xb9, 0xbf, 0xe0, 0xa0, 0xa9, 0x35, 0x52, + 0x60, 0x99, 0xce, 0x6b, 0x46, 0x50, 0xdf, 0x7b, + 0x6b, 0xf7, 0xad, 0xa6, 0x6e, 0x99, 0x5b, 0x4c, + 0xdd, 0x32, 0xb6, 0x99, 0xba, 0x65, 0x6d, 0x33, + 0x74, 0xca, 0xad, 0x7e, 0x5a, 0x4c, 0x62, 0xad, + 0xa3, 0x16, 0x23, 0x7d, 0x01, 0x6d, 0x33, 0x74, + 0xca, 0xda, 0x66, 0xe9, 0x95, 0x59, 0x53, 0x1d, + 0x53, 0xf0, 0x52, 0x80, 0x5e, 0x0c, 0x86, 0xe6, + 0xfc, 0x8a, 0x5a, 0xff, 0x00, 0x1a, 0x78, 0x82, + 0x39, 0x04, 0x79, 0xe4, 0x37, 0x25, 0x4b, 0x13, + 0x7c, 0x2b, 0x1c, 0xd5, 0x11, 0x02, 0x5d, 0x04, + 0x73, 0x3f, 0x1e, 0x6c, 0xe7, 0x48, 0x54, 0xd3, + 0x3a, 0xaa, 0x4c, 0x35, 0x0d, 0x2e, 0x6d, 0xa4, + 0x3c, 0x46, 0xdf, 0x25, 0x91, 0x92, 0xaa, 0x42, + 0xec, 0x2d, 0x76, 0xf6, 0x43, 0xf5, 0x9a, 0x0f, + 0xcd, 0x6d, 0x33, 0x74, 0xca, 0xda, 0x66, 0xe9, + 0x95, 0x5d, 0x94, 0x91, 0xd2, 0x79, 0x56, 0xf0, + 0x8d, 0xf8, 0x93, 0xd7, 0xf0, 0xdb, 0xfa, 0x98, + 0x84, 0xf3, 0x3a, 0x11, 0xe3, 0x0e, 0xb1, 0x0c, + 0xc5, 0xc4, 0xdf, 0x4a, 0xab, 0x8d, 0xa0, 0xb7, + 0x24, 0xf8, 0xa3, 0x37, 0xd2, 0x5a, 0x01, 0x17, + 0xe7, 0x5e, 0x0d, 0xc5, 0xff, 0x00, 0xec, 0xde, + 0x7a, 0xb7, 0xb7, 0x51, 0xd6, 0x7f, 0x8f, 0x82, + 0x3f, 0xf5, 0x5f, 0x7d, 0xfe, 0xde, 0xdf, 0xd5, + 0x45, 0xee, 0xdb, 0xdd, 0xfb, 0x54, 0x1e, 0xd3, + 0x3b, 0xc2, 0x7f, 0xbc, 0x77, 0x7e, 0xeb, 0xbd, + 0xd3, 0x3e, 0x8d, 0x10, 0xa8, 0x82, 0xa5, 0xf3, + 0x78, 0x9c, 0x59, 0xe3, 0x95, 0xad, 0x6f, 0x07, + 0x93, 0x09, 0x5e, 0x08, 0x35, 0x50, 0x4d, 0x3b, + 0xb0, 0x49, 0x61, 0x1c, 0xa1, 0x83, 0x58, 0x74, + 0xef, 0x4a, 0xf0, 0xdc, 0x98, 0x2f, 0x34, 0x92, + 0x45, 0x36, 0x4d, 0x9c, 0x4d, 0x05, 0xdd, 0xd7, + 0x0b, 0xc1, 0x71, 0x48, 0xd2, 0xc9, 0x31, 0x4d, + 0x26, 0x17, 0x69, 0xc2, 0x70, 0x80, 0x7e, 0xe9, + 0xfa, 0x35, 0xdf, 0xe7, 0x1b, 0xdc, 0x37, 0x6a, + 0x8c, 0x9a, 0x97, 0x4d, 0x0c, 0x72, 0x7b, 0x2e, + 0x0f, 0x07, 0xb0, 0xaa, 0xaf, 0x07, 0x9e, 0x15, + 0x38, 0x88, 0xbf, 0xdb, 0x71, 0x27, 0xbb, 0x0f, + 0x32, 0xae, 0x92, 0x2a, 0x79, 0x4d, 0x6e, 0xf9, + 0xb9, 0x47, 0xca, 0x30, 0x0b, 0x8b, 0x5f, 0x0d, + 0xbe, 0x6b, 0xc1, 0x06, 0x18, 0xdd, 0x28, 0x68, + 0x92, 0x23, 0x80, 0x5e, 0xce, 0xc6, 0x4d, 0xbb, + 0x42, 0x95, 0xbc, 0x6c, 0x64, 0x71, 0x9f, 0x58, + 0x8d, 0xa0, 0xf6, 0x8d, 0xda, 0xef, 0x7a, 0xde, + 0xe4, 0xf4, 0x24, 0x86, 0x07, 0x48, 0xcc, 0x9b, + 0x73, 0x85, 0xb2, 0x48, 0xb6, 0x49, 0x16, 0xc9, + 0x22, 0xd9, 0x24, 0x5b, 0x24, 0x8b, 0x64, 0x91, + 0x6c, 0x92, 0x2d, 0x92, 0x44, 0x22, 0xf1, 0x69, + 0x32, 0x61, 0xd8, 0xad, 0x6e, 0x34, 0x24, 0x10, + 0xc9, 0x8f, 0x0e, 0x0e, 0x08, 0xce, 0x3d, 0x3c, + 0xaa, 0x39, 0x9d, 0x04, 0x98, 0xe3, 0xe0, 0xe6, + 0x16, 0x1f, 0x05, 0x1e, 0x18, 0x24, 0x19, 0x37, + 0x63, 0x6e, 0x61, 0x98, 0xad, 0x92, 0x45, 0xb2, + 0x48, 0xb6, 0x49, 0x16, 0xc9, 0x22, 0xd9, 0x24, + 0x5b, 0x24, 0x8b, 0x64, 0x91, 0x6c, 0x92, 0x2d, + 0x92, 0x45, 0x18, 0x39, 0x88, 0x8d, 0xbb, 0x96, + 0x6b, 0x4b, 0x8f, 0xa1, 0x6a, 0x9f, 0xcc, 0xb5, + 0x4f, 0xe6, 0x5a, 0xa7, 0xf3, 0x2d, 0x53, 0xf9, + 0x96, 0xa9, 0xfc, 0xcb, 0x54, 0xfe, 0x65, 0xaa, + 0x7f, 0x32, 0xd5, 0x3f, 0x99, 0x6a, 0x9f, 0xcc, + 0xb5, 0x4f, 0xe6, 0x5a, 0xa7, 0xf3, 0x2d, 0x53, + 0xf9, 0x96, 0xa9, 0xfc, 0xcb, 0x54, 0xfe, 0x65, + 0xaa, 0x7f, 0x32, 0xd5, 0x3f, 0x99, 0x6a, 0x9f, + 0xcc, 0xb5, 0x4f, 0xe6, 0x5a, 0xa7, 0xf3, 0x2d, + 0x53, 0xf9, 0x96, 0xa9, 0xfc, 0xca, 0xce, 0x04, + 0x1f, 0x4e, 0xe4, 0x1e, 0xd3, 0x3b, 0xc2, 0x7f, + 0xbc, 0x77, 0x7e, 0xef, 0x8d, 0x32, 0xae, 0x38, + 0x9a, 0x58, 0x1b, 0x85, 0xc0, 0xad, 0xbe, 0x1e, + 0x89, 0x5b, 0x7c, 0x3d, 0x12, 0xb6, 0xf8, 0x7a, + 0x25, 0x6d, 0xf0, 0xf4, 0x4a, 0x18, 0xfc, 0x25, + 0x1b, 0xec, 0x30, 0x8c, 0x41, 0xc6, 0xc3, 0x91, + 0x31, 0x8e, 0xf0, 0x94, 0x6e, 0x6b, 0x38, 0x20, + 0x87, 0x58, 0x20, 0xf8, 0x3c, 0x26, 0xc8, 0xe4, + 0x1a, 0x1c, 0xc0, 0xe0, 0x51, 0x92, 0x6f, 0x09, + 0x36, 0x59, 0x0e, 0x97, 0x3c, 0x38, 0x95, 0xb6, + 0xc5, 0xd0, 0x2b, 0x6d, 0x8b, 0xa0, 0x56, 0xdb, + 0x17, 0x40, 0xad, 0xb6, 0x2e, 0x81, 0x55, 0x1e, + 0x0e, 0xf1, 0xa8, 0xf1, 0xc9, 0x30, 0x97, 0x1e, + 0x13, 0x65, 0xb6, 0xc5, 0xd0, 0x2b, 0x6d, 0x8b, + 0xa0, 0x53, 0xa3, 0xfe, 0xd2, 0x8c, 0x35, 0xd6, + 0x25, 0xb6, 0x36, 0x2a, 0x4c, 0x5e, 0x15, 0x63, + 0xb2, 0x99, 0xdf, 0x7c, 0x5b, 0xef, 0x5a, 0x2f, + 0x93, 0xc2, 0x51, 0xc8, 0xf3, 0xa5, 0xce, 0x0e, + 0x24, 0xa7, 0x64, 0x3c, 0x30, 0x20, 0xc5, 0xa7, + 0x27, 0x89, 0xb7, 0x5e, 0x70, 0x87, 0xa2, 0x56, + 0xdf, 0x0f, 0x44, 0xad, 0xbe, 0x1e, 0x89, 0x55, + 0x11, 0x3e, 0x76, 0xcc, 0x64, 0x78, 0x76, 0xf4, + 0x27, 0x28, 0x03, 0x64, 0x73, 0x46, 0x41, 0x9a, + 0x0a, 0xd7, 0x49, 0xd2, 0x5a, 0xe9, 0x3a, 0x4b, + 0x5d, 0x27, 0x49, 0x6b, 0xa4, 0xe9, 0x2d, 0x74, + 0x9d, 0x24, 0x23, 0x8e, 0x47, 0x97, 0x9f, 0xdf, + 0xb2, 0x8d, 0xa5, 0xcf, 0xf2, 0x8e, 0xc2, 0xd2, + 0xd9, 0x2e, 0x09, 0xf5, 0xdd, 0x1a, 0x66, 0xba, + 0x43, 0x38, 0x24, 0x61, 0xc7, 0xc8, 0xa5, 0x7b, + 0x1f, 0x23, 0x9b, 0x18, 0xbb, 0x8e, 0x3d, 0x08, + 0x35, 0xb2, 0xc8, 0x49, 0xcc, 0x06, 0x22, 0x9c, + 0xfb, 0xbf, 0x0b, 0x6f, 0xfd, 0xe7, 0x26, 0x9b, + 0x67, 0xce, 0xb2, 0xe5, 0xd2, 0x64, 0xed, 0x7b, + 0xe3, 0xe2, 0xe5, 0xb2, 0xd7, 0x49, 0xd2, 0x4d, + 0x97, 0x29, 0x26, 0x07, 0x12, 0xd0, 0x71, 0xf1, + 0x8f, 0xfe, 0xa6, 0x17, 0x49, 0x20, 0x0f, 0x18, + 0x86, 0xff, 0x00, 0x4a, 0xd7, 0x49, 0xd2, 0x5a, + 0xe9, 0x3a, 0x4b, 0x5d, 0x27, 0x49, 0x6b, 0xa4, + 0xe9, 0x2d, 0x74, 0x9d, 0x25, 0xae, 0x93, 0xa4, + 0x9b, 0xec, 0x37, 0xb9, 0x35, 0xa3, 0x49, 0x36, + 0x4e, 0x82, 0x03, 0x81, 0x8c, 0x36, 0xb8, 0xd2, + 0xe2, 0xb8, 0x67, 0x9d, 0x6b, 0x0f, 0x3a, 0xd6, + 0x1e, 0x75, 0xac, 0x3c, 0xeb, 0x58, 0x79, 0xd6, + 0xb0, 0xf3, 0xad, 0x61, 0xe7, 0x5a, 0xc3, 0xce, + 0xb5, 0x87, 0x9d, 0x6b, 0x0f, 0x3a, 0xd6, 0x1e, + 0x75, 0xac, 0x3c, 0xeb, 0x58, 0x79, 0xd6, 0xb0, + 0xf3, 0xad, 0x61, 0xe7, 0x5a, 0xc3, 0xce, 0xb5, + 0x87, 0x9d, 0x6b, 0x0f, 0x3a, 0xd6, 0x1e, 0x75, + 0xac, 0x3c, 0xeb, 0x58, 0x79, 0xd0, 0xa7, 0x94, + 0xe2, 0xc5, 0xc0, 0x71, 0xd2, 0x0e, 0xe4, 0x1e, + 0xd3, 0x3b, 0xd3, 0xfd, 0xe3, 0xbb, 0xf7, 0x63, + 0x8a, 0x96, 0xa9, 0xf0, 0xc7, 0x90, 0x6b, 0xb0, + 0xb7, 0x97, 0x3a, 0xf3, 0x84, 0xdc, 0xe9, 0xb4, + 0x2f, 0xaa, 0x99, 0xb5, 0x4e, 0x20, 0x06, 0x62, + 0x19, 0xef, 0xa3, 0x3a, 0x8f, 0x29, 0x5d, 0x33, + 0x72, 0x8c, 0x12, 0x37, 0x7c, 0x33, 0x85, 0x31, + 0x7d, 0x5c, 0xcd, 0xc8, 0xe1, 0x2f, 0xdf, 0x0d, + 0xee, 0x2d, 0x08, 0x4c, 0xd9, 0xe7, 0x2d, 0x2d, + 0xc6, 0x06, 0x36, 0xe2, 0x23, 0x94, 0x37, 0x4a, + 0xf3, 0x84, 0xdc, 0xea, 0xa2, 0x0a, 0x8a, 0x93, + 0x34, 0x66, 0x9e, 0x43, 0xbe, 0x19, 0xc1, 0x03, + 0x95, 0x6d, 0x33, 0x74, 0xca, 0xda, 0x66, 0xe9, + 0x95, 0x07, 0x8c, 0x78, 0x66, 0xb1, 0x92, 0x49, + 0x13, 0x65, 0xc2, 0xc8, 0x71, 0x01, 0x71, 0x7d, + 0x38, 0xd4, 0x98, 0xbc, 0x2f, 0x57, 0x14, 0x8c, + 0x63, 0xe4, 0x2d, 0x11, 0xe2, 0xde, 0xb7, 0x3f, + 0xdb, 0x5e, 0x11, 0x9a, 0x97, 0xc2, 0x75, 0x12, + 0x32, 0x95, 0xad, 0x70, 0xc6, 0x0b, 0x4b, 0xf4, + 0xdf, 0xeb, 0x66, 0xb5, 0x8a, 0x97, 0xc2, 0x26, + 0xb6, 0x56, 0x86, 0xca, 0x23, 0x11, 0xe2, 0x3b, + 0xef, 0x4e, 0x95, 0xb4, 0xcd, 0xd3, 0x2b, 0x69, + 0x9b, 0xa6, 0x55, 0x35, 0x25, 0x15, 0x44, 0x83, + 0x14, 0x11, 0xd9, 0x91, 0x8c, 0xe4, 0xd9, 0x45, + 0x8a, 0xae, 0x4b, 0x48, 0xfc, 0x9b, 0x5c, 0xd9, + 0x58, 0xe1, 0x8b, 0x92, 0xe3, 0x42, 0xa9, 0x02, + 0xae, 0x7f, 0xd1, 0x85, 0xe5, 0xce, 0x37, 0xb9, + 0xec, 0x9a, 0xf8, 0xaa, 0xe4, 0x2c, 0x70, 0x73, + 0x83, 0x9d, 0x2b, 0x5a, 0x2c, 0xdb, 0x5f, 0x4f, + 0xac, 0x26, 0x65, 0xeb, 0x26, 0x68, 0x7f, 0x05, + 0xc1, 0xc1, 0xcd, 0x77, 0xa8, 0x8c, 0xc9, 0x99, + 0x2a, 0xc7, 0x1c, 0x62, 0xed, 0x0e, 0x9e, 0x36, + 0x93, 0xf0, 0x25, 0x06, 0x4d, 0xe1, 0x07, 0x62, + 0x22, 0xfb, 0xc9, 0x5a, 0xfe, 0xe5, 0xe1, 0x1f, + 0x1b, 0xa8, 0x7c, 0xf9, 0x3c, 0x9e, 0x1c, 0x5c, + 0x5c, 0x24, 0xe5, 0x07, 0xf9, 0x76, 0x7d, 0x21, + 0xee, 0xe4, 0xff, 0x00, 0x61, 0x46, 0xfc, 0x0c, + 0xbc, 0x36, 0xf6, 0xb1, 0x7e, 0x17, 0x51, 0xd6, + 0x7f, 0x8f, 0x82, 0x3f, 0xf5, 0x5f, 0x7d, 0xfe, + 0xde, 0xd5, 0x4e, 0x24, 0x9e, 0x38, 0x84, 0xce, + 0x25, 0xed, 0x7d, 0xee, 0x59, 0xc1, 0xe4, 0xf6, + 0x93, 0xc3, 0xb8, 0x70, 0xb6, 0x43, 0xfe, 0xa0, + 0xd2, 0x9a, 0xd7, 0x87, 0xe5, 0x9d, 0x19, 0xc8, + 0x38, 0x9d, 0xe8, 0x16, 0x3c, 0x5c, 0xe9, 0xef, + 0x95, 0xc5, 0xd3, 0x54, 0x33, 0x03, 0x5a, 0x78, + 0x99, 0xcb, 0xd9, 0x99, 0x49, 0x3e, 0x4d, 0x92, + 0x3f, 0x28, 0xd6, 0x79, 0x46, 0xe2, 0x00, 0x58, + 0xaa, 0x56, 0x1a, 0x76, 0x59, 0xf5, 0x6f, 0x69, + 0x64, 0x82, 0xf8, 0x46, 0xf3, 0x32, 0x03, 0xfc, + 0x3a, 0x87, 0xb5, 0xbe, 0xab, 0x0f, 0xa6, 0xdf, + 0x61, 0xbd, 0xca, 0x1f, 0x6c, 0x2a, 0x81, 0xff, + 0x00, 0x91, 0xdd, 0xfb, 0xb8, 0x24, 0x01, 0xfb, + 0xc2, 0x58, 0xc2, 0x78, 0x4e, 0xe4, 0x42, 0x3a, + 0xaa, 0x0f, 0x12, 0x9b, 0x1e, 0x69, 0x23, 0x65, + 0x9b, 0x6f, 0x9a, 0xa8, 0xa6, 0x74, 0xd6, 0x64, + 0x31, 0xe5, 0x4c, 0xb8, 0x78, 0x94, 0x39, 0x6a, + 0xd8, 0xe0, 0x9a, 0x66, 0x65, 0x18, 0xc7, 0x8c, + 0xd6, 0xf6, 0x95, 0x03, 0x69, 0xe5, 0xc7, 0x34, + 0xda, 0x06, 0x1b, 0x63, 0xbf, 0x1a, 0x9d, 0xd1, + 0xd5, 0x36, 0x77, 0xd3, 0x90, 0x26, 0x60, 0x6d, + 0xb0, 0xfe, 0x2a, 0x58, 0x5b, 0x56, 0xc3, 0x3b, + 0x59, 0x94, 0x0c, 0x2d, 0xb5, 0xc7, 0xc9, 0x41, + 0x51, 0x1d, 0x40, 0xa8, 0x86, 0x5b, 0x8c, 0x40, + 0x5b, 0x38, 0x4d, 0x78, 0x63, 0x72, 0xf8, 0x5d, + 0x26, 0x3b, 0x67, 0xb3, 0x5d, 0x9d, 0x31, 0xd8, + 0x1b, 0x97, 0xde, 0x38, 0xbe, 0xd9, 0xf7, 0xcb, + 0x21, 0xe3, 0x4c, 0xf1, 0xec, 0x18, 0xfc, 0x5e, + 0xdf, 0x35, 0x05, 0x44, 0xb5, 0x2d, 0x83, 0x2a, + 0xfb, 0x44, 0xc7, 0x0e, 0x17, 0xe0, 0xaa, 0xea, + 0xf2, 0x9c, 0x19, 0x84, 0x58, 0x2d, 0xfb, 0x80, + 0xa9, 0x19, 0x94, 0xc7, 0x8e, 0x88, 0xcb, 0xa2, + 0xca, 0x19, 0x66, 0xa9, 0x6d, 0x3e, 0x5d, 0xd8, + 0x62, 0x05, 0xb7, 0xc4, 0xa6, 0x92, 0xaa, 0xa0, + 0x53, 0x47, 0x1c, 0xb9, 0x1b, 0xe1, 0x2e, 0xdf, + 0x27, 0xc7, 0x95, 0x64, 0xa0, 0x7d, 0x76, 0x1b, + 0x83, 0xbb, 0x4a, 0x3f, 0xf2, 0x04, 0xff, 0x00, + 0x5a, 0x83, 0xda, 0x67, 0x7a, 0x7f, 0xbc, 0x77, + 0x7e, 0xec, 0x5f, 0xe5, 0xd9, 0xf3, 0xdc, 0x6f, + 0x1d, 0x4d, 0x05, 0x5f, 0x4a, 0x12, 0xef, 0xf8, + 0x9f, 0xf7, 0x2a, 0x21, 0x27, 0x06, 0x8a, 0x72, + 0x26, 0xf7, 0x26, 0xef, 0xff, 0x00, 0x8b, 0xf9, + 0xd7, 0x86, 0xea, 0x65, 0xfe, 0xf6, 0x58, 0x9e, + 0xee, 0x91, 0x55, 0x19, 0x0c, 0x79, 0x7c, 0xb7, + 0x91, 0xc1, 0xa6, 0xdf, 0x52, 0xdf, 0x0b, 0x23, + 0x7d, 0x3c, 0x6a, 0x6f, 0xf2, 0xd2, 0xf7, 0x6e, + 0xd0, 0x1a, 0x4f, 0x06, 0xc7, 0x53, 0x0f, 0x8a, + 0x45, 0xe5, 0x1d, 0x48, 0xd9, 0x3e, 0xaf, 0x29, + 0x0a, 0xb9, 0x8e, 0x18, 0x5c, 0xda, 0x49, 0xc1, + 0x07, 0x8b, 0x7a, 0x55, 0x4c, 0xaf, 0xd5, 0x89, + 0xe1, 0x0f, 0x1c, 0xad, 0x38, 0xc3, 0xbb, 0x2e, + 0xab, 0xa8, 0x1a, 0xec, 0x42, 0x94, 0x42, 0xd2, + 0x47, 0x1b, 0x89, 0x73, 0x8f, 0x7d, 0xbe, 0x1b, + 0xb4, 0xb3, 0x45, 0x0f, 0x8c, 0x16, 0x52, 0xb0, + 0x98, 0xf9, 0x5b, 0x83, 0x7d, 0xd9, 0x75, 0x35, + 0x57, 0x83, 0xa4, 0xa8, 0x80, 0x44, 0xf6, 0x65, + 0x69, 0xe5, 0x37, 0x19, 0xef, 0x62, 0x08, 0xd2, + 0x9e, 0xfc, 0xc1, 0x9e, 0x19, 0x94, 0x37, 0xe0, + 0xe8, 0xb3, 0xfd, 0xe9, 0x07, 0x32, 0x9a, 0x93, + 0x46, 0x43, 0xc1, 0x5b, 0xe1, 0xfb, 0xce, 0x7b, + 0x5e, 0x7f, 0xdc, 0xaa, 0x5a, 0xe1, 0x70, 0xea, + 0xa8, 0xc4, 0x23, 0xf7, 0xac, 0xec, 0x56, 0xec, + 0xec, 0x54, 0xf1, 0xb7, 0x3b, 0x61, 0x91, 0xb0, + 0x0f, 0xf4, 0x0c, 0x3f, 0x2d, 0xcf, 0x0a, 0xff, + 0x00, 0x0b, 0xfe, 0x49, 0xca, 0x29, 0x69, 0xf7, + 0xd3, 0xc6, 0xdc, 0x0e, 0x8e, 0xfa, 0x47, 0x28, + 0x5b, 0x24, 0x8b, 0x64, 0x91, 0x6c, 0x92, 0x2d, + 0x92, 0x45, 0xb2, 0x48, 0x84, 0x91, 0xd3, 0x3c, + 0x3c, 0x7a, 0x01, 0x51, 0xb8, 0xc0, 0xff, 0x00, + 0x26, 0x71, 0x34, 0x35, 0x80, 0x00, 0x7d, 0x4a, + 0x3c, 0x30, 0x48, 0x32, 0x6e, 0xc6, 0xdc, 0xc3, + 0x31, 0x4d, 0xc7, 0x4d, 0x21, 0xc2, 0xdc, 0x23, + 0x37, 0x12, 0x15, 0x2f, 0xa4, 0x7c, 0x8e, 0xbe, + 0xfb, 0x37, 0x0b, 0x95, 0x3a, 0x18, 0xa1, 0x97, + 0x23, 0x9c, 0x37, 0x13, 0x45, 0xed, 0xf2, 0x59, + 0x37, 0x53, 0x5d, 0xb8, 0x70, 0xea, 0x99, 0x7b, + 0x7a, 0xec, 0x9d, 0x92, 0xa7, 0x78, 0xc5, 0xa6, + 0xed, 0x05, 0x33, 0xc8, 0x48, 0x70, 0xbc, 0xc8, + 0x2e, 0x3e, 0xb7, 0x2f, 0x62, 0x8a, 0x31, 0x49, + 0x2e, 0x6b, 0xbd, 0xc4, 0x8d, 0x2e, 0x3f, 0xd0, + 0x5b, 0x24, 0x8b, 0x64, 0x91, 0x6c, 0x92, 0x2d, + 0x92, 0x45, 0xb2, 0x48, 0x81, 0xa8, 0x67, 0x8b, + 0xc0, 0x38, 0x4e, 0x77, 0xc9, 0x39, 0xfa, 0x01, + 0xd0, 0xa1, 0xf6, 0xc2, 0xa8, 0x3f, 0xf9, 0x1d, + 0xdf, 0xba, 0x5b, 0x51, 0x23, 0xa1, 0xcd, 0xbc, + 0x78, 0xe2, 0x77, 0xa5, 0x4f, 0x4f, 0x35, 0x63, + 0x6b, 0x5e, 0xf2, 0x32, 0x60, 0x1c, 0x58, 0x7e, + 0x28, 0x4b, 0xfd, 0xfc, 0xac, 0x6d, 0x39, 0xf5, + 0x02, 0x54, 0x4c, 0x9a, 0xaa, 0x09, 0xe8, 0xb0, + 0xef, 0xa2, 0x98, 0x6f, 0xdb, 0xe8, 0x0b, 0xc1, + 0x75, 0x2c, 0x7b, 0x48, 0xa7, 0xb3, 0x4c, 0x77, + 0xdf, 0x2a, 0x9b, 0x78, 0x42, 0x37, 0xc3, 0x21, + 0xde, 0x42, 0xc6, 0x02, 0x48, 0xf4, 0xf2, 0x29, + 0xe5, 0xca, 0xb3, 0x01, 0xa6, 0xc3, 0x8b, 0x16, + 0x6d, 0x0a, 0x96, 0x2c, 0x43, 0x1b, 0x64, 0x71, + 0x2d, 0xbe, 0x75, 0xe0, 0xd8, 0xdc, 0xf6, 0xe1, + 0xf2, 0xac, 0x90, 0x5f, 0x40, 0x77, 0x2a, 0xae, + 0xc2, 0xe6, 0xeb, 0x99, 0x81, 0xb7, 0xd2, 0x1a, + 0xbf, 0xb5, 0xbc, 0x61, 0x98, 0x70, 0xea, 0xbe, + 0xbd, 0xf0, 0xda, 0xd6, 0x54, 0x58, 0xe7, 0x64, + 0x2e, 0xa7, 0x7b, 0xb1, 0x35, 0xda, 0x48, 0x26, + 0xf9, 0x95, 0x6c, 0x02, 0xa2, 0x36, 0x1c, 0xb3, + 0x65, 0x0e, 0x71, 0xcc, 0x77, 0xa0, 0x2c, 0x4d, + 0x95, 0xb8, 0x3c, 0x47, 0x26, 0x0d, 0xf8, 0xf9, + 0x15, 0x2c, 0x51, 0x55, 0xc7, 0x48, 0xe8, 0x49, + 0x0f, 0xca, 0x00, 0x6e, 0x3d, 0x17, 0x55, 0x0f, + 0x8e, 0xbe, 0x2c, 0x4f, 0x93, 0x7c, 0xca, 0x86, + 0xe1, 0x6b, 0xc7, 0x2a, 0x91, 0xd4, 0xed, 0x02, + 0x3f, 0xdd, 0xd1, 0x7d, 0xda, 0x53, 0xff, 0x00, + 0x90, 0x27, 0xfa, 0xd4, 0x1e, 0xd3, 0x3b, 0xd4, + 0x9e, 0xf1, 0xdd, 0xfb, 0xb1, 0xcf, 0x0c, 0xcd, + 0x86, 0xa5, 0x8d, 0xc0, 0x44, 0x9c, 0x17, 0x05, + 0xb5, 0x51, 0x74, 0xdd, 0xff, 0x00, 0xaa, 0x35, + 0xd1, 0xf8, 0x46, 0x8d, 0xb5, 0x46, 0xe4, 0xbf, + 0x11, 0xe3, 0xf4, 0x61, 0xb2, 0x9d, 0x90, 0xd7, + 0xd1, 0xb1, 0xb3, 0xb3, 0x27, 0x20, 0xc6, 0xed, + 0xf0, 0xe8, 0xa9, 0x61, 0x6d, 0x65, 0x10, 0x8e, + 0x5b, 0x63, 0x18, 0x8e, 0x7b, 0x68, 0xfa, 0xa8, + 0x42, 0xdf, 0x09, 0xd1, 0xe0, 0x0d, 0xc0, 0x0d, + 0xce, 0x20, 0x39, 0x03, 0xb0, 0x5d, 0x6d, 0x54, + 0x5d, 0x37, 0x7f, 0xea, 0x9f, 0x2c, 0xd5, 0x34, + 0xa5, 0x8e, 0x89, 0xf1, 0xef, 0x1c, 0x49, 0xce, + 0x3d, 0x4b, 0xce, 0x10, 0x74, 0x4a, 0xf3, 0x84, + 0x1d, 0x12, 0xbc, 0xe1, 0x07, 0x44, 0xaf, 0x38, + 0x41, 0xd1, 0x2b, 0xce, 0x10, 0x74, 0x4a, 0xf3, + 0x84, 0x1d, 0x12, 0xbc, 0xe1, 0x07, 0x44, 0xaf, + 0x38, 0x41, 0xd1, 0x2a, 0x1a, 0xca, 0x2a, 0xca, + 0x78, 0x4c, 0x51, 0x31, 0x81, 0xce, 0x79, 0x06, + 0xe0, 0x7a, 0x90, 0x8a, 0x5a, 0xfa, 0x1c, 0x9d, + 0xf1, 0x60, 0x66, 0xf0, 0x5f, 0x97, 0x33, 0x15, + 0x2b, 0x5d, 0xe1, 0x0a, 0x32, 0xda, 0x6d, 0x56, + 0xf8, 0xef, 0x78, 0xfe, 0xca, 0x9a, 0xaf, 0xc7, + 0xe8, 0x4c, 0xf3, 0x0b, 0x48, 0xe7, 0x67, 0x0e, + 0x1e, 0xa2, 0xcb, 0x71, 0x28, 0x65, 0x93, 0xc2, + 0x14, 0x45, 0xd0, 0x9b, 0xc6, 0x01, 0xb3, 0x5b, + 0xfe, 0x9c, 0x16, 0x4d, 0xa9, 0x8e, 0xb6, 0x88, + 0x4e, 0xd7, 0x62, 0x0e, 0xc4, 0x4e, 0x7e, 0x8a, + 0xda, 0xa8, 0xba, 0x6e, 0xff, 0x00, 0xd5, 0x3a, + 0x10, 0xfc, 0xac, 0xf2, 0x1c, 0x52, 0xbc, 0x68, + 0xf5, 0x04, 0xe5, 0x70, 0xcc, 0xde, 0x9c, 0xcb, + 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, + 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, + 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, + 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, + 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, + 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, + 0x47, 0xdf, 0x0b, 0x47, 0xdf, 0x0b, 0x47, 0xdf, + 0x0b, 0x47, 0xdf, 0x0b, 0x83, 0x7f, 0xf5, 0x05, + 0x67, 0x02, 0xd3, 0xe9, 0x4d, 0x77, 0x21, 0xba, + 0x33, 0x46, 0xdb, 0xc7, 0x26, 0xfb, 0x37, 0x12, + 0xe0, 0x95, 0xc1, 0x2b, 0x82, 0x57, 0x05, 0x30, + 0x39, 0x81, 0xad, 0x6e, 0x86, 0xb0, 0x58, 0x05, + 0xc1, 0x2b, 0x82, 0x57, 0x04, 0xae, 0x09, 0x5c, + 0x12, 0xb8, 0x25, 0x70, 0x4a, 0xe0, 0x95, 0xc1, + 0x2b, 0x82, 0x57, 0x04, 0xae, 0x09, 0x5c, 0x12, + 0xb8, 0x25, 0x70, 0x4a, 0xe0, 0x94, 0x2a, 0x65, + 0x18, 0x58, 0xcd, 0x00, 0xfd, 0x62, 0x89, 0x50, + 0x7b, 0x4c, 0xef, 0x4f, 0xf7, 0x8e, 0xef, 0xfd, + 0xae, 0x79, 0x9c, 0x2e, 0x22, 0x17, 0xb7, 0xa5, + 0x62, 0x7b, 0xb1, 0x1f, 0xd9, 0xa5, 0x85, 0xfb, + 0xe7, 0x31, 0xb8, 0xda, 0xef, 0x96, 0xe5, 0x0b, + 0xa1, 0x95, 0xd1, 0x9c, 0x9f, 0xd5, 0x3e, 0x95, + 0xb5, 0x48, 0x80, 0x96, 0x69, 0xa3, 0x27, 0xed, + 0x8b, 0x2d, 0xae, 0x44, 0x64, 0x13, 0x4e, 0x63, + 0x1a, 0x5e, 0x06, 0x60, 0x84, 0xb9, 0x69, 0xf2, + 0x47, 0xeb, 0xdb, 0x32, 0x2e, 0xf1, 0x99, 0x70, + 0x8c, 0xd7, 0x45, 0xde, 0x33, 0x2e, 0x11, 0x9a, + 0xe8, 0xe4, 0x65, 0x9e, 0x5b, 0x69, 0xc0, 0x2e, + 0xbc, 0xa3, 0xea, 0x23, 0xcd, 0x7d, 0xf3, 0x6c, + 0xb6, 0xb9, 0x16, 0xd7, 0x22, 0xb0, 0xaa, 0x90, + 0x95, 0x8d, 0xa6, 0xa8, 0xb3, 0xed, 0x06, 0x1b, + 0x26, 0xfe, 0x91, 0x2e, 0xfb, 0x83, 0xe9, 0x4e, + 0x63, 0x66, 0x9c, 0xbd, 0xba, 0x5a, 0x06, 0x71, + 0xc4, 0xb2, 0x42, 0x79, 0x8c, 0x9a, 0x30, 0x01, + 0x9d, 0x62, 0xf1, 0x99, 0x70, 0xde, 0xd7, 0x43, + 0x2b, 0x2c, 0xf1, 0xdf, 0x46, 0x31, 0x6b, 0xa1, + 0x23, 0xa5, 0x9d, 0xb1, 0x9d, 0x0e, 0x23, 0x31, + 0x58, 0xe4, 0x75, 0x4c, 0x6d, 0xfb, 0x4e, 0x6d, + 0x82, 0xda, 0xe4, 0xe7, 0x50, 0xbe, 0x47, 0xb9, + 0xee, 0xca, 0x3b, 0x3b, 0x8d, 0xf7, 0x20, 0xf6, + 0x99, 0xde, 0xa4, 0xf7, 0x8e, 0xef, 0xfd, 0xaf, + 0xc2, 0x07, 0xf7, 0x07, 0x78, 0xdc, 0x9d, 0xb4, + 0xcf, 0x89, 0x9e, 0x10, 0xc7, 0x9b, 0x29, 0xc6, + 0xdf, 0x42, 0xa7, 0xa6, 0xf0, 0x84, 0x06, 0x96, + 0x57, 0x34, 0x8c, 0xa3, 0x3e, 0xb9, 0x58, 0xe4, + 0x73, 0x99, 0x33, 0xea, 0x45, 0x3b, 0x07, 0x17, + 0xa4, 0xa6, 0xc5, 0x23, 0xaa, 0x98, 0xe1, 0x20, + 0x6d, 0x9e, 0xcc, 0xd2, 0x7b, 0x2a, 0xa6, 0x38, + 0xf2, 0x8c, 0x8e, 0x26, 0x97, 0xcb, 0x61, 0xfe, + 0xd5, 0x45, 0x63, 0x3b, 0x20, 0xa8, 0xc4, 0x2d, + 0x20, 0xb3, 0xda, 0x42, 0x75, 0x4f, 0x8c, 0x4d, + 0x82, 0x19, 0x32, 0x72, 0xe6, 0x19, 0xfd, 0x94, + 0xe8, 0x5a, 0xe2, 0xf6, 0x58, 0x39, 0xa4, 0xf2, + 0x2a, 0x50, 0xdd, 0x22, 0x61, 0x0b, 0xbe, 0x20, + 0x1f, 0xc5, 0x50, 0x87, 0x49, 0x92, 0x85, 0xe1, + 0xdb, 0xfb, 0x71, 0x5d, 0x52, 0xcb, 0x0b, 0xa7, + 0x11, 0x49, 0x38, 0x81, 0xc2, 0x51, 0x67, 0x7a, + 0xc2, 0xaf, 0x8e, 0x29, 0xa5, 0x35, 0x14, 0xad, + 0x2f, 0xce, 0x37, 0xb6, 0x51, 0xb1, 0xb2, 0xca, + 0xea, 0x97, 0xb0, 0xba, 0xed, 0x6f, 0x93, 0x69, + 0xe4, 0x2a, 0x8a, 0x19, 0xe6, 0x95, 0xb5, 0x35, + 0x2d, 0x0f, 0xb3, 0x46, 0xf4, 0x05, 0x53, 0x2c, + 0xb9, 0x77, 0xc5, 0x1c, 0xc6, 0x16, 0x36, 0x16, + 0xdd, 0xc7, 0xd2, 0xbc, 0x20, 0x26, 0x95, 0xe1, + 0xb4, 0xe1, 0xaf, 0x6b, 0x9b, 0xc6, 0x0a, 0xa6, + 0x67, 0x8c, 0x4d, 0x6a, 0xa6, 0x62, 0x8b, 0x30, + 0xcd, 0xeb, 0x51, 0x3a, 0xa3, 0x2e, 0x5d, 0x33, + 0xcb, 0x1b, 0x91, 0x6d, 0xc3, 0x6c, 0x6d, 0x77, + 0x2a, 0x99, 0x6a, 0xa4, 0x90, 0x64, 0x27, 0xc9, + 0x1c, 0x9f, 0xd6, 0x1e, 0x84, 0xe6, 0x12, 0xf9, + 0x58, 0x69, 0xf2, 0xd1, 0x9c, 0xda, 0x3d, 0x29, + 0xd9, 0x2c, 0x59, 0x3b, 0xef, 0x71, 0x69, 0xb2, + 0xa8, 0x1f, 0xf8, 0x1f, 0xb9, 0x43, 0xee, 0xfe, + 0x6a, 0x9b, 0x08, 0x0e, 0x76, 0x50, 0x66, 0x2a, + 0x06, 0xc7, 0x8e, 0xb2, 0x23, 0x3b, 0x81, 0xc5, + 0x99, 0xd7, 0x23, 0xfa, 0x29, 0x91, 0xc7, 0xbf, + 0x6e, 0x1b, 0xe5, 0xbf, 0xc4, 0x58, 0x1d, 0x23, + 0xb1, 0xb6, 0x37, 0x36, 0x28, 0xad, 0x66, 0xba, + 0xe0, 0xa9, 0x1f, 0x33, 0xf5, 0xcc, 0x10, 0xc5, + 0x1f, 0x2d, 0x88, 0xcf, 0xf0, 0xb2, 0xa8, 0x13, + 0xc6, 0xd9, 0xbc, 0xac, 0x7b, 0xd1, 0x25, 0xc6, + 0x87, 0xf1, 0x85, 0x57, 0x68, 0xf1, 0x86, 0x9d, + 0xe8, 0x71, 0x39, 0x81, 0x89, 0xe5, 0x43, 0x6d, + 0xed, 0xe4, 0x19, 0x87, 0xad, 0x78, 0x48, 0xbe, + 0xe7, 0x06, 0x76, 0xe7, 0xff, 0x00, 0xc8, 0x15, + 0x5d, 0xa9, 0x41, 0xc8, 0x54, 0x64, 0x80, 0xc6, + 0xec, 0xe0, 0xdf, 0x4f, 0x32, 0x78, 0x31, 0xb6, + 0x46, 0xe5, 0xdf, 0x1d, 0xdf, 0x30, 0x66, 0x16, + 0x83, 0xc5, 0x9f, 0x4a, 0xa3, 0xc2, 0xc0, 0xe7, + 0x00, 0xe9, 0x9d, 0x25, 0xf4, 0xe1, 0x2e, 0xfc, + 0x17, 0x83, 0xa5, 0x75, 0x63, 0x69, 0xec, 0x1c, + 0x7e, 0xb6, 0x23, 0xbf, 0x3c, 0x81, 0x36, 0x70, + 0xdb, 0x32, 0x0a, 0x97, 0xc9, 0x6e, 0x46, 0xdb, + 0x17, 0xfc, 0x4a, 0x13, 0xff, 0x00, 0xfa, 0xa6, + 0x83, 0xff, 0x00, 0x67, 0x76, 0xa1, 0x59, 0xfe, + 0x2e, 0x00, 0x3d, 0xa2, 0x6c, 0xef, 0xf6, 0xb9, + 0x53, 0x0f, 0xaf, 0x82, 0x5a, 0x86, 0xfa, 0xed, + 0x9b, 0xfd, 0xaa, 0x28, 0x65, 0x71, 0x92, 0x17, + 0xca, 0xd2, 0xf0, 0xec, 0xfc, 0x6a, 0x7b, 0xbd, + 0xce, 0xca, 0x5f, 0x18, 0x39, 0xd5, 0x7b, 0xdd, + 0x54, 0xd7, 0xe3, 0x0f, 0x66, 0x41, 0xb8, 0xaf, + 0x73, 0xcb, 0x9a, 0xdb, 0x90, 0xfb, 0xc7, 0x6e, + 0x41, 0xed, 0x33, 0xbd, 0x49, 0xef, 0x1d, 0xdf, + 0xfb, 0x5d, 0x78, 0xfd, 0xd1, 0xde, 0x37, 0x1d, + 0x1d, 0x46, 0x28, 0x66, 0xc5, 0x71, 0x30, 0x17, + 0xcd, 0xc9, 0x65, 0x43, 0x15, 0x33, 0x9f, 0x2f, + 0x8b, 0x1b, 0x89, 0x1f, 0xa4, 0x95, 0x04, 0x25, + 0xae, 0x11, 0x37, 0xca, 0x3c, 0x37, 0x4d, 0xdc, + 0x6e, 0x53, 0x98, 0x6a, 0xa4, 0xad, 0x05, 0xcd, + 0x2c, 0x6b, 0xd9, 0x9d, 0x96, 0x3c, 0xaa, 0xa2, + 0x66, 0x4a, 0xe3, 0x15, 0x4b, 0x08, 0x73, 0x9a, + 0xdb, 0x16, 0x15, 0x48, 0xf7, 0x56, 0x4f, 0x52, + 0xd8, 0xee, 0x5c, 0xf9, 0x2f, 0x6d, 0x1c, 0x41, + 0x54, 0xc1, 0x7d, 0xfb, 0xe7, 0xc6, 0x05, 0xb8, + 0x93, 0x5f, 0x19, 0xc4, 0xdc, 0x00, 0x68, 0x55, + 0x92, 0x07, 0x62, 0x6b, 0x98, 0x1d, 0x19, 0xb1, + 0xe1, 0x81, 0x65, 0xe0, 0xe7, 0x3b, 0x3e, 0x46, + 0x32, 0xd7, 0x66, 0xe0, 0x95, 0x14, 0x6f, 0xaa, + 0x92, 0x57, 0xc5, 0x50, 0xd9, 0x72, 0x8f, 0x69, + 0xdf, 0x7e, 0x0b, 0xc2, 0x92, 0x62, 0xde, 0xcf, + 0x13, 0x9a, 0xcc, 0xda, 0x6e, 0xa9, 0x5f, 0x96, + 0x91, 0xb1, 0xb2, 0x31, 0x19, 0x81, 0xa3, 0x7a, + 0x0f, 0x2a, 0xf0, 0x7c, 0xb8, 0xa4, 0xca, 0xc6, + 0x03, 0x1a, 0x32, 0x64, 0x63, 0x03, 0xeb, 0x2a, + 0xba, 0x67, 0x54, 0xc9, 0x48, 0x7c, 0x61, 0xd2, + 0x36, 0x58, 0xef, 0xcd, 0x99, 0x78, 0x49, 0xb9, + 0x59, 0x5f, 0x95, 0x6b, 0x5a, 0xc3, 0x31, 0xc4, + 0xe3, 0x65, 0xe0, 0xa7, 0xe3, 0xcd, 0x04, 0x78, + 0x5f, 0x98, 0xe6, 0x4c, 0x8d, 0xd5, 0x73, 0x52, + 0x64, 0x9e, 0xe3, 0xe4, 0xaf, 0xbf, 0x69, 0x2a, + 0xa2, 0x1c, 0x6f, 0x74, 0x8f, 0x9f, 0x18, 0xca, + 0x67, 0x71, 0x1e, 0x92, 0xa9, 0xde, 0x5f, 0xe4, + 0xc5, 0x26, 0x45, 0xce, 0xb6, 0x82, 0x9c, 0x18, + 0x71, 0xb6, 0xf9, 0x9d, 0x6b, 0x5d, 0x4e, 0x7f, + 0xf0, 0x3b, 0x72, 0x8c, 0xc6, 0xe8, 0xdb, 0x68, + 0xfe, 0xbb, 0xec, 0x99, 0x23, 0x25, 0xa7, 0x0f, + 0x69, 0xb8, 0x39, 0x50, 0x83, 0x58, 0x69, 0x29, + 0xda, 0x09, 0x36, 0x8a, 0x5b, 0x5c, 0x94, 0x06, + 0x56, 0x0b, 0x0d, 0x03, 0x2c, 0x13, 0x59, 0xfa, + 0x19, 0x73, 0x41, 0x6b, 0x64, 0x2f, 0x18, 0x9a, + 0x10, 0x6b, 0xa2, 0xa0, 0xb8, 0x60, 0x60, 0x78, + 0x94, 0xdc, 0x76, 0xa7, 0xc5, 0xfa, 0x1c, 0xac, + 0x79, 0x0e, 0x21, 0xf2, 0x72, 0x5f, 0xf1, 0x52, + 0x3f, 0x15, 0x23, 0xb2, 0x8f, 0xc4, 0xeb, 0xc9, + 0xe8, 0x22, 0xdc, 0xce, 0x42, 0x40, 0xea, 0x6b, + 0x87, 0x62, 0x03, 0x2a, 0x2c, 0xaa, 0x0e, 0x2a, + 0x6f, 0x2f, 0xc2, 0xf2, 0xbf, 0xbd, 0x7f, 0x92, + 0x9e, 0xee, 0xa5, 0xf2, 0xd2, 0x65, 0x5d, 0x69, + 0x78, 0xf3, 0xfe, 0x2a, 0x47, 0x3c, 0x51, 0x49, + 0x8a, 0x43, 0x28, 0x0f, 0x7f, 0x04, 0x9e, 0x4c, + 0xe8, 0x37, 0x15, 0x2e, 0x68, 0xcc, 0x57, 0xca, + 0x0d, 0x18, 0xae, 0xa1, 0x8c, 0xbe, 0x9a, 0xd1, + 0x02, 0x07, 0x95, 0x1c, 0xb7, 0x53, 0xc6, 0xc7, + 0xd3, 0x61, 0x98, 0x61, 0x37, 0x94, 0x2a, 0x46, + 0xe3, 0xa5, 0xb5, 0x33, 0xb1, 0x33, 0xca, 0x69, + 0xcf, 0x7c, 0xea, 0x10, 0x1f, 0x4a, 0x44, 0x52, + 0x65, 0x1b, 0x79, 0x38, 0xd4, 0x52, 0xb6, 0x5a, + 0x76, 0x3e, 0x20, 0x03, 0x6d, 0x28, 0xe2, 0x58, + 0x59, 0xe2, 0x74, 0xe2, 0xf8, 0x8e, 0x45, 0xf6, + 0xb9, 0x4f, 0x1f, 0xa1, 0x46, 0xf9, 0x33, 0x3e, + 0x46, 0x3c, 0x07, 0x39, 0x49, 0x33, 0x9f, 0x4c, + 0x1c, 0xf3, 0x73, 0x69, 0x42, 0xd6, 0x53, 0xf5, + 0xa1, 0x43, 0x1b, 0xcb, 0x49, 0xca, 0x1e, 0x01, + 0xb8, 0xdc, 0x83, 0xda, 0x67, 0x7a, 0x93, 0xde, + 0x3b, 0xbf, 0xf6, 0xb9, 0x59, 0x26, 0xae, 0x41, + 0x84, 0xfa, 0x16, 0xf5, 0xb8, 0xda, 0x74, 0x39, + 0xbc, 0x6b, 0x54, 0xee, 0x64, 0x1f, 0x1b, 0x1c, + 0xd7, 0x0e, 0x3b, 0x22, 0xf7, 0xc6, 0xf7, 0x38, + 0xe9, 0x36, 0x5a, 0xa7, 0x73, 0x2d, 0x53, 0xb9, + 0x96, 0xa9, 0xdc, 0xcb, 0x54, 0xee, 0x65, 0xaa, + 0x77, 0x32, 0xd5, 0x3b, 0x99, 0x6a, 0x9d, 0xcc, + 0xb5, 0x4e, 0xe6, 0x5a, 0xa7, 0x73, 0x2d, 0x53, + 0xb9, 0x96, 0x4d, 0x99, 0x40, 0xcf, 0x52, 0xd5, + 0x3b, 0x99, 0x6a, 0x9d, 0xcc, 0xb5, 0x4e, 0xe6, + 0x5a, 0xa7, 0x73, 0x2d, 0x53, 0xb9, 0x96, 0xa9, + 0xdc, 0xcb, 0x54, 0xee, 0x64, 0xe2, 0xed, 0x74, + 0x83, 0x08, 0x1c, 0x83, 0x72, 0x87, 0xdd, 0xfc, + 0xff, 0x00, 0x55, 0x1e, 0x56, 0xaa, 0x46, 0xbd, + 0xcc, 0x6b, 0xec, 0xd8, 0x6f, 0xa4, 0x5f, 0xed, + 0x2a, 0x77, 0x4b, 0x54, 0xe8, 0x9f, 0x35, 0xec, + 0x32, 0x57, 0x03, 0x3d, 0xb4, 0xdd, 0x33, 0x11, + 0xbb, 0x8e, 0x20, 0x47, 0x25, 0x8d, 0xbf, 0x55, + 0x0f, 0xbc, 0x76, 0xe4, 0x1e, 0xd3, 0x3b, 0xd4, + 0x9e, 0xf1, 0xdd, 0xff, 0x00, 0xb5, 0xb9, 0x50, + 0xe0, 0x7b, 0x9b, 0x9e, 0x4d, 0x07, 0xd4, 0xb5, + 0xd2, 0x74, 0x96, 0xba, 0x4e, 0x92, 0xd7, 0x49, + 0xd2, 0x5a, 0xe9, 0x3a, 0x4b, 0x5d, 0x27, 0x49, + 0x06, 0xe5, 0x9f, 0x9f, 0x36, 0x77, 0xa6, 0xb4, + 0x55, 0x3e, 0x50, 0x58, 0x1d, 0x88, 0x12, 0x15, + 0x2c, 0x42, 0xad, 0xe0, 0x4e, 0xcc, 0x78, 0xef, + 0xa3, 0x4d, 0xfb, 0x96, 0x27, 0x54, 0x4a, 0xdf, + 0x2c, 0x22, 0xc2, 0xdb, 0xb8, 0xfa, 0x53, 0x5c, + 0x32, 0xf8, 0x5d, 0xa0, 0xe7, 0xce, 0xb0, 0xc8, + 0xf9, 0xa3, 0x77, 0x23, 0x89, 0x05, 0x35, 0xcf, + 0xab, 0x7b, 0x06, 0x4c, 0xca, 0xed, 0x27, 0x0b, + 0x6f, 0x60, 0x8e, 0x46, 0xb9, 0xf2, 0x0c, 0x9b, + 0x9e, 0x38, 0x8e, 0x6e, 0x22, 0x2e, 0xa9, 0x66, + 0x15, 0x0f, 0x39, 0x77, 0x16, 0x86, 0xdc, 0xe6, + 0xce, 0xb7, 0xb5, 0x4f, 0x96, 0x32, 0x5c, 0xdc, + 0x57, 0xb6, 0x70, 0x7f, 0xae, 0x75, 0xae, 0x93, + 0xa4, 0xb5, 0xd2, 0x74, 0x96, 0xba, 0x4e, 0x92, + 0xd7, 0x49, 0xd2, 0x5a, 0xe9, 0x3a, 0x4b, 0x5a, + 0xfe, 0x92, 0xa1, 0xf7, 0x5f, 0x3d, 0xca, 0x1f, + 0x77, 0xf3, 0xfd, 0x54, 0x19, 0x1a, 0x36, 0xcb, + 0x19, 0x82, 0x3d, 0xfe, 0x40, 0x3b, 0xea, 0xf2, + 0xaa, 0x0b, 0xd3, 0x47, 0x2b, 0xc3, 0x5c, 0x43, + 0x9f, 0x7c, 0xdb, 0xf3, 0xe9, 0x54, 0x6f, 0x71, + 0xbb, 0x9c, 0x1e, 0x49, 0xff, 0x00, 0x51, 0xfd, + 0x54, 0x3e, 0xf1, 0xdb, 0x90, 0x7b, 0x4c, 0xef, + 0x52, 0x7b, 0xc7, 0x77, 0xfe, 0xd6, 0xe5, 0x41, + 0xeb, 0x93, 0xe5, 0xf4, 0x9a, 0xc6, 0x8c, 0x4e, + 0x71, 0xb0, 0x01, 0x53, 0x3a, 0xaa, 0x09, 0x72, + 0x59, 0x16, 0xb7, 0x36, 0xf7, 0x3d, 0x93, 0xe7, + 0x66, 0xf4, 0xc5, 0x8a, 0x26, 0xdf, 0x4e, 0xf8, + 0x82, 0x3f, 0xe4, 0xbc, 0x1a, 0xd6, 0xe8, 0x96, + 0x6f, 0x19, 0xe9, 0x11, 0xf8, 0x2a, 0x06, 0x12, + 0x73, 0xd3, 0x49, 0x84, 0x07, 0x5b, 0x7c, 0x4b, + 0xfb, 0x55, 0x3c, 0x66, 0x19, 0x22, 0x2c, 0x69, + 0xd6, 0xbf, 0x13, 0xad, 0x74, 0xd7, 0x53, 0x38, + 0x07, 0xf8, 0xb4, 0x78, 0x58, 0x7e, 0xb8, 0xc2, + 0x2e, 0x3d, 0x2a, 0x85, 0xf2, 0xc2, 0xda, 0x69, + 0x9e, 0xe2, 0xd9, 0x63, 0x66, 0x6d, 0xee, 0x8b, + 0xdb, 0x8b, 0x49, 0x52, 0x40, 0xef, 0xff, 0x00, + 0x84, 0xd6, 0x4b, 0xf1, 0x60, 0xcf, 0xda, 0x53, + 0x31, 0x69, 0x33, 0xb8, 0x8e, 0x61, 0x7f, 0x97, + 0xd3, 0xa1, 0xf7, 0x5f, 0x3d, 0xca, 0x47, 0x78, + 0xc4, 0x70, 0xe1, 0x65, 0xac, 0xf5, 0xb7, 0xd3, + 0xf3, 0xad, 0xbe, 0x9f, 0x9d, 0x6d, 0xf4, 0xfc, + 0xeb, 0x6f, 0xa7, 0xe7, 0x5b, 0x7d, 0x3f, 0x3a, + 0xdb, 0xe9, 0xf9, 0xd6, 0xdf, 0x4f, 0xce, 0xb6, + 0xfa, 0x7e, 0x75, 0xb7, 0xd3, 0xf3, 0xad, 0xbe, + 0x9f, 0x9d, 0x6d, 0xf4, 0xfc, 0xeb, 0x6f, 0xa7, + 0xe7, 0x5b, 0x7d, 0x3f, 0x3a, 0xdb, 0xe9, 0xf9, + 0xd6, 0xdf, 0x4f, 0xce, 0xb6, 0xfa, 0x7e, 0x75, + 0xb7, 0xd3, 0xf3, 0xad, 0xbe, 0x9f, 0x9d, 0x6d, + 0xf4, 0xfc, 0xeb, 0x6f, 0xa7, 0xe7, 0x5b, 0x7d, + 0x3f, 0x3a, 0x86, 0x1c, 0xa3, 0x65, 0xdf, 0x93, + 0x89, 0x9a, 0x37, 0x21, 0xf6, 0x99, 0xde, 0xa4, + 0xf7, 0x8e, 0xef, 0xfd, 0xad, 0xcb, 0xc5, 0xe6, + 0x38, 0x2c, 0x71, 0x32, 0x4b, 0x5f, 0x0a, 0xdb, + 0x20, 0xed, 0x5b, 0x65, 0x3f, 0x6a, 0xdb, 0x29, + 0xfb, 0x56, 0xd9, 0x4f, 0xda, 0xb6, 0xca, 0x7e, + 0xd5, 0xb6, 0x53, 0xf6, 0xad, 0xb2, 0x9f, 0xb5, + 0x6d, 0x94, 0xfd, 0xab, 0x6c, 0xa7, 0xed, 0x5b, + 0x65, 0x3f, 0x6a, 0xdb, 0x29, 0xfb, 0x54, 0x6c, + 0x75, 0x65, 0x37, 0x93, 0xcc, 0x0e, 0x7b, 0xdb, + 0x91, 0x6d, 0x94, 0xfd, 0xab, 0x6c, 0xa7, 0xed, + 0x51, 0xb3, 0xc7, 0x29, 0x83, 0x63, 0x16, 0x00, + 0x5d, 0x6d, 0x94, 0xfd, 0xab, 0x6c, 0xa7, 0xed, + 0x5b, 0x65, 0x3f, 0x6a, 0xdb, 0x29, 0xfb, 0x56, + 0xd9, 0x4f, 0xda, 0xaf, 0x35, 0x63, 0x30, 0x72, + 0x46, 0x09, 0x25, 0x00, 0xc6, 0xe0, 0x8d, 0xa3, + 0x0b, 0x5b, 0xc8, 0x37, 0x28, 0x7d, 0xdf, 0xcf, + 0xf5, 0x31, 0x45, 0x7c, 0x39, 0x47, 0x86, 0xdf, + 0x92, 0xeb, 0x20, 0xd2, 0x2f, 0x7d, 0x27, 0x40, + 0xf4, 0xa2, 0xf8, 0x6a, 0x84, 0xb8, 0x4d, 0x8b, + 0x5c, 0xdc, 0x27, 0xe1, 0xca, 0xa5, 0x82, 0x2a, + 0x93, 0x25, 0x44, 0x77, 0xde, 0x3a, 0x3c, 0x37, + 0xb7, 0x26, 0x7f, 0xd5, 0x43, 0xef, 0x1d, 0xb9, + 0x0f, 0xb4, 0xce, 0xf5, 0x27, 0xbc, 0x77, 0x7f, + 0xed, 0x78, 0x1b, 0xa4, 0x95, 0x85, 0xac, 0x13, + 0x11, 0xa5, 0xee, 0xd0, 0xb6, 0x68, 0x96, 0xcd, + 0x12, 0xd9, 0xa2, 0x5b, 0x34, 0x4b, 0x66, 0x89, + 0x6c, 0xd1, 0x2d, 0x9a, 0x25, 0xb3, 0x44, 0xb6, + 0x68, 0x96, 0xcd, 0x12, 0xd9, 0xa2, 0x5b, 0x34, + 0x4b, 0x66, 0x89, 0x6c, 0xd1, 0x2d, 0x9a, 0x25, + 0xb3, 0x44, 0xb6, 0x68, 0x96, 0xcd, 0x12, 0xd9, + 0xa2, 0x5b, 0x34, 0x4b, 0x3d, 0x34, 0x6b, 0x2d, + 0x05, 0xc0, 0x1c, 0x26, 0x1e, 0x2d, 0xca, 0x1f, + 0x77, 0xf3, 0xfd, 0x4d, 0x27, 0xbe, 0x67, 0x7a, + 0x71, 0xa8, 0x8d, 0xd0, 0x47, 0x28, 0x7c, 0x42, + 0x47, 0x8b, 0x0b, 0x90, 0x6c, 0x9c, 0xf9, 0xc6, + 0x4b, 0x3d, 0x9a, 0xd3, 0xa5, 0xde, 0xa5, 0x3d, + 0x64, 0xac, 0x31, 0xd3, 0xb1, 0xce, 0x7e, 0x27, + 0x7d, 0x6e, 0x40, 0x3f, 0x55, 0x0f, 0xbc, 0x76, + 0xe4, 0x3e, 0xd3, 0x3b, 0xd4, 0x9e, 0xf1, 0xdd, + 0xff, 0x00, 0xb5, 0xce, 0x79, 0x23, 0x77, 0x77, + 0xea, 0x62, 0xa9, 0x9a, 0xb4, 0x40, 0x24, 0x24, + 0x00, 0x59, 0x74, 0xd6, 0x38, 0x87, 0x87, 0x8b, + 0xb1, 0xed, 0xd0, 0xe0, 0xa1, 0xa7, 0x9d, 0x92, + 0x44, 0x24, 0xbe, 0x91, 0x63, 0xa1, 0x5c, 0xb1, + 0xe2, 0x3b, 0xd9, 0xae, 0x23, 0x31, 0x59, 0x2c, + 0x8c, 0x99, 0x5f, 0xb1, 0x84, 0xdd, 0x17, 0xb2, + 0x37, 0xb9, 0x83, 0x4b, 0x80, 0xcc, 0x11, 0x64, + 0x8d, 0x2c, 0x78, 0xd2, 0xd7, 0x0b, 0x1f, 0xd4, + 0x55, 0x37, 0x8b, 0x20, 0x4f, 0x68, 0xdc, 0xa4, + 0x35, 0x55, 0x7e, 0x2c, 0xe0, 0xcc, 0xc3, 0x95, + 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, + 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, + 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, + 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, + 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, + 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, + 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, + 0xb1, 0x79, 0xd3, 0xb1, 0x79, 0xd3, 0xb1, 0x42, + 0xca, 0x79, 0xb2, 0xf1, 0xe3, 0x3b, 0xfd, 0xc8, + 0x7d, 0xa6, 0x77, 0xa9, 0x3d, 0xe3, 0xbb, 0xff, + 0x00, 0x6b, 0xa9, 0xf7, 0x4f, 0xff, 0x00, 0x6f, + 0xea, 0x7c, 0x1c, 0xd6, 0x82, 0x4e, 0x37, 0xe8, + 0xf5, 0xaf, 0x02, 0x43, 0x3e, 0xb6, 0x36, 0x3d, + 0xd6, 0x3c, 0x5c, 0x8a, 0x16, 0x5a, 0xb2, 0x52, + 0x27, 0x27, 0x2b, 0x50, 0x06, 0xf4, 0xe1, 0x37, + 0x17, 0x5e, 0x17, 0x6d, 0x4b, 0x9c, 0x43, 0x5e, + 0xdc, 0x18, 0xbe, 0xa9, 0xbe, 0x81, 0xd8, 0x9f, + 0x25, 0xb7, 0xb9, 0x2b, 0xf6, 0x2f, 0x04, 0x0a, + 0x67, 0x38, 0x07, 0x48, 0xec, 0x78, 0x7e, 0xb1, + 0xbe, 0x82, 0xaa, 0x4f, 0xab, 0xfd, 0xa3, 0xf5, + 0x15, 0x57, 0xff, 0x00, 0xf3, 0xbb, 0xbc, 0x6e, + 0x50, 0xfb, 0xbf, 0x9f, 0xd2, 0x93, 0x1e, 0x2c, + 0x31, 0xb0, 0xbc, 0x86, 0x69, 0x2b, 0x15, 0x2e, + 0x33, 0x66, 0x97, 0x3d, 0x8f, 0xd2, 0xdf, 0xc5, + 0x35, 0xed, 0x60, 0xc2, 0xed, 0x04, 0xb8, 0x0f, + 0xeb, 0x41, 0x50, 0xbd, 0xc2, 0xf8, 0xe6, 0xc9, + 0x64, 0xc3, 0x80, 0x77, 0x12, 0xcb, 0x06, 0x79, + 0x3e, 0x5b, 0xfc, 0x95, 0x46, 0x1b, 0xe4, 0x63, + 0x94, 0xc6, 0x1c, 0xe3, 0xa5, 0x49, 0x23, 0xd9, + 0x51, 0x8a, 0x2b, 0x5f, 0x0c, 0x82, 0xc6, 0xff, + 0x00, 0x04, 0xd3, 0x0c, 0x6e, 0xc2, 0x59, 0x94, + 0xdf, 0xbc, 0x68, 0xc5, 0x6b, 0xa3, 0x78, 0xb4, + 0x10, 0x2c, 0x08, 0x27, 0x3e, 0x85, 0x1c, 0x65, + 0x9b, 0xe9, 0x0e, 0x16, 0xd9, 0xc0, 0xdc, 0xf2, + 0x2c, 0x0f, 0x16, 0x77, 0x25, 0xfe, 0x94, 0x3e, + 0xf1, 0xdb, 0x90, 0xfb, 0x4c, 0xef, 0x52, 0x7b, + 0xc7, 0x77, 0xfe, 0xd7, 0x23, 0x38, 0xde, 0xd2, + 0xd1, 0xcc, 0xac, 0x45, 0x8f, 0xea, 0x04, 0x51, + 0x4b, 0x85, 0x83, 0x40, 0xc2, 0x16, 0x58, 0xbd, + 0xc6, 0x5d, 0x38, 0x93, 0x24, 0x33, 0x12, 0xe6, + 0x70, 0x73, 0x04, 0x22, 0x92, 0x52, 0xe6, 0x0e, + 0x24, 0xc0, 0x26, 0x36, 0x66, 0x8c, 0xcb, 0x26, + 0x6a, 0xa4, 0x87, 0x7d, 0x77, 0x37, 0x0d, 0xc1, + 0x1e, 0x8e, 0x45, 0x2c, 0xd6, 0xb6, 0x23, 0xfa, + 0x8a, 0x99, 0x4e, 0x66, 0xe4, 0xf0, 0x7c, 0x4e, + 0xe5, 0x0f, 0xbb, 0xf9, 0xfd, 0x22, 0x5b, 0x51, + 0xe2, 0xd2, 0x81, 0x76, 0x38, 0x9b, 0x67, 0xf5, + 0xf1, 0x2a, 0x2c, 0xb3, 0xe3, 0x9a, 0xa0, 0x97, + 0x36, 0x57, 0x45, 0x63, 0x76, 0x1c, 0xdc, 0x5a, + 0x4e, 0x95, 0x2c, 0x18, 0xa9, 0xe4, 0x82, 0x2c, + 0x31, 0xe4, 0xe6, 0x76, 0x1b, 0xdb, 0xeb, 0x03, + 0xcf, 0xce, 0xa9, 0xf0, 0x4c, 0xdc, 0x9c, 0x55, + 0xc5, 0xdb, 0xf7, 0x58, 0xe1, 0xde, 0xd8, 0xf6, + 0x2a, 0x79, 0x45, 0x43, 0x22, 0x11, 0x44, 0x58, + 0xe6, 0xdf, 0x7d, 0x7b, 0x9c, 0xd6, 0xf4, 0xdd, + 0x3e, 0x48, 0xdc, 0xd1, 0x93, 0x95, 0xcc, 0xc0, + 0x1d, 0xc2, 0x17, 0xbe, 0x20, 0xab, 0x1a, 0x5c, + 0x03, 0x8e, 0x0b, 0x0e, 0x5c, 0xeb, 0x0e, 0x36, + 0xe2, 0xf1, 0x4c, 0x36, 0xbf, 0x1e, 0x5a, 0xf6, + 0xe6, 0x4f, 0x91, 0xf2, 0x37, 0x06, 0x42, 0x11, + 0xa7, 0xdd, 0xdf, 0xe6, 0xa8, 0x99, 0xfa, 0x2c, + 0x4c, 0x15, 0x01, 0xe7, 0x25, 0x21, 0x77, 0xc4, + 0x92, 0x51, 0xfa, 0x50, 0xfb, 0xd7, 0x6e, 0x43, + 0xed, 0x33, 0xbd, 0x49, 0xef, 0x1d, 0xdf, 0xfb, + 0x59, 0x51, 0xb2, 0x5a, 0x6c, 0xa9, 0x74, 0x4d, + 0x7e, 0x36, 0xbb, 0x09, 0x5b, 0x1c, 0x9d, 0x67, + 0xe4, 0xb6, 0x39, 0x3a, 0xcf, 0xc9, 0x6c, 0x72, + 0x75, 0x9f, 0x92, 0xd8, 0xe4, 0xeb, 0x3f, 0x25, + 0xb1, 0xc9, 0xd6, 0x7e, 0x4b, 0x63, 0x93, 0xac, + 0xfc, 0x96, 0xc7, 0x27, 0x59, 0xf9, 0x2d, 0x8e, + 0x4e, 0xb3, 0xf2, 0x5b, 0x1c, 0x9d, 0x67, 0xe4, + 0xb6, 0x39, 0x3a, 0xcf, 0xc9, 0x6c, 0x72, 0x75, + 0x9f, 0x92, 0xd8, 0xe4, 0xeb, 0x3f, 0x25, 0xb1, + 0xc9, 0xd6, 0x7e, 0x4b, 0x63, 0x93, 0xac, 0xfc, + 0x96, 0xc7, 0x27, 0x59, 0xf9, 0x2d, 0x8e, 0x4e, + 0xb3, 0xf2, 0x5b, 0x1c, 0x9d, 0x67, 0xe4, 0xb6, + 0x39, 0x3a, 0xcf, 0xc9, 0x6c, 0x72, 0x75, 0x9f, + 0x92, 0xd8, 0xe4, 0xeb, 0x3f, 0x25, 0x9a, 0x89, + 0xc7, 0xd7, 0x2f, 0xe4, 0xa0, 0x93, 0x00, 0x8c, + 0x63, 0x76, 0xf5, 0xba, 0x37, 0x29, 0x3c, 0x66, + 0x69, 0x22, 0x70, 0x8f, 0x36, 0x06, 0xdd, 0x6d, + 0x75, 0x1d, 0x5a, 0xda, 0xea, 0x3a, 0xb5, 0xb5, + 0xd4, 0x75, 0x6b, 0x6b, 0xa8, 0xea, 0xd6, 0xd7, + 0x51, 0xd5, 0xad, 0xae, 0xa3, 0xab, 0x58, 0xe3, + 0xad, 0x9d, 0xaf, 0xe5, 0xc9, 0x05, 0xb5, 0xd4, + 0x75, 0x6b, 0x6b, 0xa8, 0xea, 0xd6, 0xd7, 0x51, + 0xd5, 0xad, 0xae, 0xa3, 0xab, 0x5b, 0x5d, 0x47, + 0x56, 0xb6, 0xba, 0x8e, 0xad, 0x6d, 0x75, 0x1d, + 0x5a, 0xda, 0xea, 0x3a, 0xb5, 0xb5, 0xd4, 0x75, + 0x6b, 0x6b, 0xa8, 0xea, 0xd6, 0xd7, 0x51, 0xd5, + 0xad, 0xae, 0xa3, 0xab, 0x5b, 0x5d, 0x47, 0x56, + 0xb6, 0xba, 0x8e, 0xad, 0x35, 0xb4, 0xcf, 0x74, + 0x8c, 0x6c, 0xc4, 0x5d, 0xe2, 0xdc, 0x5b, 0x90, + 0xfb, 0x4c, 0xef, 0x52, 0x7b, 0xc7, 0x77, 0xfe, + 0xd6, 0xe5, 0x07, 0xf9, 0x76, 0x7d, 0x1a, 0x9c, + 0x10, 0x89, 0xe4, 0x10, 0xdd, 0xad, 0x2c, 0xc7, + 0x9f, 0x10, 0xe2, 0x50, 0xe5, 0xe2, 0x65, 0x1c, + 0xf7, 0x79, 0x75, 0x99, 0x87, 0x78, 0x05, 0xef, + 0x87, 0x9d, 0x41, 0x86, 0x62, 0x61, 0x96, 0xf6, + 0x7e, 0x0c, 0xfe, 0xab, 0x2a, 0x9c, 0x40, 0xba, + 0xf0, 0x07, 0xb3, 0x28, 0xcc, 0x2e, 0x1e, 0x50, + 0x0d, 0x0a, 0x79, 0x5c, 0x5c, 0x25, 0x6b, 0xd8, + 0xd6, 0xef, 0x79, 0x6f, 0xe9, 0xf4, 0x27, 0x35, + 0xd3, 0x86, 0x39, 0xf5, 0x0f, 0x85, 0xa1, 0xb1, + 0xe6, 0xb8, 0xb7, 0x30, 0xce, 0xa3, 0x2c, 0x9e, + 0xf1, 0x9c, 0x78, 0x9e, 0x5b, 0x6c, 0x38, 0x45, + 0xca, 0x8d, 0xf1, 0xbf, 0x29, 0x14, 0x83, 0x31, + 0x22, 0xc5, 0x47, 0x26, 0x4e, 0x2c, 0x6c, 0x9b, + 0x0d, 0xcc, 0x63, 0x38, 0xb7, 0x1f, 0x2a, 0xa4, + 0xa7, 0x64, 0x50, 0x33, 0x2c, 0xc6, 0x12, 0x59, + 0x13, 0x41, 0xb9, 0x54, 0x86, 0x16, 0x88, 0xe1, + 0x99, 0xf9, 0x3d, 0xef, 0xa0, 0xfe, 0x16, 0x53, + 0x64, 0xfc, 0x1c, 0xd3, 0x00, 0x19, 0x9d, 0x13, + 0x33, 0xb3, 0xd6, 0xef, 0xa5, 0x4f, 0xed, 0xbf, + 0x72, 0x8f, 0xdc, 0xfc, 0xcf, 0xd0, 0x8e, 0x1f, + 0x17, 0x8e, 0x4c, 0x4f, 0xbc, 0x8f, 0x90, 0x5f, + 0x79, 0xf2, 0xe3, 0x4f, 0x9d, 0xb2, 0xda, 0x16, + 0x5f, 0x1d, 0xc6, 0x76, 0xf2, 0x7a, 0xee, 0x9f, + 0x13, 0x9a, 0x0e, 0x52, 0x37, 0x06, 0xdf, 0x88, + 0xda, 0xe1, 0x78, 0x3d, 0x8d, 0x68, 0xca, 0x97, + 0x8c, 0xa1, 0xf6, 0xef, 0x6e, 0xc0, 0xa6, 0xaa, + 0x8d, 0xce, 0x11, 0x5f, 0x1d, 0x9b, 0x0d, 0x98, + 0x1b, 0x7d, 0x00, 0xf2, 0xe7, 0x55, 0x5e, 0x58, + 0xc5, 0x4f, 0x1c, 0x99, 0x3b, 0xe0, 0xb9, 0xbf, + 0x3f, 0xa1, 0x42, 0xc7, 0x4c, 0xd6, 0x38, 0xd4, + 0x3e, 0x30, 0xf6, 0xb7, 0x16, 0x2e, 0x0d, 0xbe, + 0x1f, 0x8a, 0x8b, 0x2c, 0xf0, 0x65, 0x73, 0x1e, + 0xe1, 0x11, 0x6d, 0xc5, 0xb3, 0xf1, 0xfc, 0x11, + 0x68, 0x96, 0xf5, 0x2d, 0x60, 0x90, 0xc5, 0x87, + 0x35, 0xbd, 0x7c, 0xb9, 0xd4, 0xee, 0x6d, 0x46, + 0x51, 0xd0, 0xb8, 0x31, 0xed, 0xc3, 0x6c, 0xea, + 0x66, 0x18, 0xa1, 0x78, 0x64, 0x4e, 0x78, 0x2f, + 0x89, 0xa4, 0xdd, 0x1a, 0x99, 0x1e, 0xc8, 0x5a, + 0x0b, 0x9c, 0x44, 0x71, 0x0f, 0xdc, 0x1f, 0xf2, + 0x52, 0x60, 0x9b, 0x28, 0xf6, 0x35, 0xb2, 0x61, + 0xc1, 0x6b, 0xb5, 0xd6, 0xb7, 0xc7, 0x38, 0x52, + 0x60, 0x9b, 0x28, 0xf8, 0x9d, 0x86, 0x41, 0x86, + 0xd6, 0xf5, 0x72, 0xa7, 0xc2, 0xd9, 0x32, 0xa5, + 0x86, 0xc4, 0xe1, 0xb7, 0xd0, 0x3f, 0xe6, 0x0f, + 0xfb, 0x46, 0xe4, 0x3e, 0xd3, 0x3b, 0xd4, 0x9e, + 0xf1, 0xdd, 0xff, 0x00, 0xb5, 0xb9, 0x53, 0x4d, + 0xfd, 0xdb, 0xa2, 0x0d, 0xbf, 0xa4, 0x7d, 0x1a, + 0x80, 0x6f, 0x79, 0x23, 0xc0, 0x2d, 0xeb, 0x07, + 0xe4, 0xa0, 0x7b, 0xb1, 0xe5, 0x58, 0xd7, 0x46, + 0x5e, 0xdd, 0x38, 0x0e, 0x8f, 0x88, 0x4d, 0x73, + 0xa6, 0xa9, 0x95, 0xb9, 0x37, 0x33, 0x1b, 0xf8, + 0x42, 0xfc, 0x60, 0x7e, 0x6b, 0x25, 0x1e, 0x54, + 0x38, 0x47, 0x93, 0x04, 0xfb, 0x61, 0xd7, 0xef, + 0x53, 0xb6, 0xa5, 0xf2, 0x49, 0x23, 0x8b, 0x0b, + 0x5d, 0xa7, 0x45, 0xf3, 0x76, 0xa8, 0xa5, 0xc2, + 0xfc, 0x2d, 0xab, 0x7c, 0xe7, 0xd4, 0x4b, 0x7f, + 0x05, 0x10, 0xdf, 0x82, 0x1d, 0x26, 0x22, 0xdd, + 0x36, 0x70, 0x03, 0x37, 0xa7, 0x32, 0x88, 0xe5, + 0x26, 0xa8, 0x6b, 0x3f, 0xc7, 0x3a, 0x7f, 0x04, + 0x21, 0xa6, 0x6b, 0xc3, 0x31, 0x99, 0x0e, 0x53, + 0x8b, 0xd0, 0xa3, 0x94, 0x07, 0x07, 0xc7, 0x06, + 0x4d, 0xbe, 0xd7, 0x2a, 0x06, 0x59, 0x1f, 0x2c, + 0xd1, 0xc8, 0xd9, 0x22, 0x73, 0xb3, 0xdb, 0x95, + 0x49, 0x2c, 0x2d, 0x9b, 0x28, 0xe0, 0x40, 0x8c, + 0xdb, 0x03, 0x6e, 0x2d, 0xf1, 0xfa, 0x54, 0x91, + 0x3f, 0x33, 0xcd, 0xe4, 0xb7, 0x25, 0xf4, 0x6e, + 0x51, 0x4b, 0xf5, 0x30, 0x16, 0x5f, 0xd3, 0x7f, + 0xa0, 0xe8, 0x9e, 0xe9, 0xa3, 0x91, 0xee, 0xdf, + 0x3a, 0x36, 0x03, 0x71, 0xc4, 0x34, 0xac, 0x9c, + 0x76, 0xc8, 0xe7, 0xde, 0x91, 0xc3, 0xbf, 0x2a, + 0x8a, 0x5f, 0xb0, 0xe0, 0xe5, 0x54, 0xf0, 0xc7, + 0x64, 0xdd, 0x1e, 0x18, 0x87, 0x21, 0x02, 0xcd, + 0xba, 0x96, 0xf9, 0x5c, 0x52, 0x42, 0x22, 0xb6, + 0x6b, 0x32, 0xd6, 0xd1, 0xcc, 0xaa, 0x03, 0xf2, + 0xc2, 0x29, 0x64, 0x13, 0x66, 0x02, 0xe0, 0xe7, + 0xb8, 0xed, 0x54, 0xf8, 0x58, 0xe6, 0xb6, 0x3a, + 0x87, 0x4b, 0x87, 0x4e, 0xf7, 0x7b, 0x9b, 0xb1, + 0x32, 0x67, 0xb6, 0x5c, 0xab, 0x1a, 0xe6, 0x00, + 0x2d, 0x63, 0x7b, 0xd8, 0xf6, 0xa7, 0x4e, 0xd0, + 0xff, 0x00, 0x19, 0x74, 0x62, 0x32, 0x0f, 0x04, + 0x68, 0x17, 0xec, 0x55, 0x6f, 0xc0, 0xf8, 0xcc, + 0xf2, 0xb5, 0xc3, 0x1d, 0xbd, 0x27, 0x7b, 0x6d, + 0x23, 0xd2, 0xa6, 0xc5, 0x7d, 0xfc, 0x65, 0x82, + 0xc9, 0xf4, 0xc4, 0x3b, 0x19, 0xc5, 0x9f, 0x8b, + 0x39, 0x67, 0xfe, 0xa5, 0x4c, 0xe6, 0x87, 0x5d, + 0xd0, 0x47, 0x18, 0xf5, 0xb7, 0x07, 0xfe, 0xa9, + 0xd6, 0x9a, 0xa5, 0xd8, 0xdd, 0x8b, 0x26, 0xf7, + 0x6f, 0x1b, 0xf8, 0xa9, 0xe6, 0x6d, 0xc3, 0x5e, + 0xf2, 0xe1, 0x7f, 0x5f, 0xd0, 0x8c, 0x38, 0x58, + 0xcb, 0x21, 0x90, 0x7a, 0xad, 0x6d, 0xc8, 0x3d, + 0xa6, 0x77, 0xa9, 0x3d, 0xe3, 0xbb, 0xff, 0x00, + 0x6b, 0x72, 0x74, 0x52, 0xb0, 0x4d, 0x0b, 0xb4, + 0xb1, 0xcb, 0x67, 0x90, 0x7f, 0x11, 0x6a, 0x25, + 0xeb, 0x16, 0xa2, 0x5e, 0xb1, 0x6a, 0x25, 0xeb, + 0x16, 0xa2, 0x5e, 0xb1, 0x6a, 0x25, 0xeb, 0x16, + 0xa2, 0x5e, 0xb1, 0x6a, 0x25, 0xeb, 0x16, 0xa2, + 0x5e, 0xb1, 0x6a, 0x25, 0xeb, 0x16, 0xa2, 0x5e, + 0xb1, 0x6a, 0x25, 0xeb, 0x16, 0xa2, 0x5e, 0xb1, + 0x6a, 0x25, 0xeb, 0x16, 0xa2, 0x5e, 0xb1, 0x6a, + 0x25, 0xeb, 0x16, 0xa2, 0x5e, 0xb1, 0x6a, 0x25, + 0xeb, 0x16, 0xa2, 0x5e, 0xb1, 0x6a, 0x25, 0xeb, + 0x10, 0x7c, 0x74, 0xb7, 0x78, 0xd0, 0x64, 0x76, + 0x2e, 0xc4, 0x5c, 0xe3, 0x77, 0x1d, 0xc7, 0x45, + 0x2b, 0x04, 0xb0, 0xbb, 0x4b, 0x0a, 0xe1, 0x55, + 0x37, 0xd1, 0xbd, 0x5a, 0xca, 0xaf, 0xba, 0xb5, + 0x95, 0x5f, 0x75, 0x6b, 0x2a, 0xbe, 0xea, 0xd6, + 0x55, 0x7d, 0xd5, 0xac, 0xaa, 0xfb, 0xab, 0x59, + 0x55, 0xf7, 0x56, 0xb2, 0xab, 0xee, 0xad, 0x65, + 0x57, 0xdd, 0x5a, 0xca, 0xaf, 0xba, 0xb5, 0x95, + 0x5f, 0x75, 0x6b, 0x2a, 0xbe, 0xea, 0xd6, 0x55, + 0x7d, 0xd5, 0xac, 0xaa, 0xfb, 0xab, 0x59, 0x55, + 0xf7, 0x56, 0xb2, 0xab, 0xee, 0xad, 0x65, 0x57, + 0xdd, 0x5a, 0xca, 0xaf, 0xba, 0xb5, 0x95, 0x5f, + 0x75, 0x6b, 0x2a, 0xbe, 0xea, 0xc5, 0x86, 0x69, + 0xed, 0xf5, 0x64, 0x20, 0x0e, 0xc5, 0x88, 0xfa, + 0x80, 0x1c, 0x5b, 0x90, 0x7b, 0x4c, 0xef, 0x52, + 0x7b, 0xc7, 0x77, 0xee, 0xef, 0x77, 0xcb, 0x40, + 0x5a, 0x02, 0xd0, 0x16, 0x80, 0xb4, 0x05, 0xa0, + 0x2d, 0x01, 0x68, 0x0b, 0x40, 0x5a, 0x02, 0xd0, + 0x16, 0x80, 0xb4, 0x05, 0xa0, 0x2d, 0x01, 0x68, + 0x0b, 0x40, 0x5a, 0x02, 0xd0, 0x16, 0x80, 0xb4, + 0x05, 0xa0, 0x2d, 0x01, 0x13, 0xff, 0x00, 0x71, + 0x83, 0xda, 0x67, 0x7a, 0x93, 0xde, 0x3b, 0xbf, + 0x73, 0x00, 0xf8, 0xa6, 0xba, 0x7b, 0x97, 0x3b, + 0x38, 0x8c, 0x72, 0x2d, 0x98, 0x74, 0xca, 0xd9, + 0x47, 0x4c, 0xad, 0x94, 0x74, 0xca, 0xd9, 0x47, + 0x4c, 0xad, 0x94, 0x74, 0xca, 0xd9, 0x47, 0x4c, + 0xad, 0x94, 0x74, 0xca, 0xd9, 0x47, 0x4c, 0xad, + 0x94, 0x74, 0xca, 0xd9, 0x47, 0x4c, 0xad, 0x94, + 0x74, 0xca, 0xd9, 0x47, 0x4c, 0xad, 0x94, 0x74, + 0xca, 0xd9, 0x47, 0x4c, 0xad, 0x94, 0x74, 0xca, + 0xd9, 0x47, 0x4c, 0xad, 0x94, 0x74, 0xca, 0xd9, + 0x47, 0x4c, 0xad, 0x94, 0x74, 0xca, 0xd9, 0x47, + 0x4c, 0xad, 0x94, 0x74, 0xca, 0xc3, 0x1f, 0x92, + 0x97, 0x89, 0xa4, 0xdc, 0x1d, 0xc6, 0xb0, 0x69, + 0x2b, 0x0c, 0x51, 0xb6, 0x5b, 0x7d, 0x77, 0xe7, + 0xba, 0xd4, 0x41, 0xd0, 0x5a, 0x88, 0x3a, 0x0b, + 0x51, 0x07, 0x41, 0x6a, 0x20, 0xe8, 0x2d, 0x44, + 0x1d, 0x05, 0xa8, 0x83, 0xa0, 0xb5, 0x10, 0x74, + 0x16, 0xa2, 0x0e, 0x82, 0xd4, 0x41, 0xd0, 0x5a, + 0x88, 0x3a, 0x0b, 0x51, 0x07, 0x41, 0x6a, 0x20, + 0xe8, 0x2d, 0x44, 0x1d, 0x05, 0xa8, 0x83, 0xa0, + 0xb5, 0x10, 0x74, 0x16, 0xa2, 0x0e, 0x82, 0xd4, + 0x41, 0xd0, 0x5a, 0x88, 0x3a, 0x0b, 0x51, 0x07, + 0x41, 0x6a, 0x20, 0xe8, 0x2d, 0xf5, 0x3c, 0x44, + 0x7a, 0x05, 0x93, 0x66, 0x88, 0xde, 0x37, 0x66, + 0xb1, 0xfa, 0xa7, 0x93, 0x70, 0x07, 0xb7, 0x2b, + 0x37, 0x18, 0xe2, 0x6a, 0xd9, 0xe2, 0x5b, 0x3c, + 0x4b, 0x67, 0x89, 0x6c, 0xf1, 0x2d, 0x9e, 0x25, + 0xb3, 0xc4, 0xb6, 0x78, 0x96, 0xcf, 0x12, 0xd9, + 0xe2, 0x5b, 0x3c, 0x4b, 0x67, 0x89, 0x6c, 0xf1, + 0x2d, 0x9e, 0x25, 0xb3, 0xc4, 0xb6, 0x78, 0x96, + 0xcf, 0x12, 0xd9, 0xe2, 0x5b, 0x3c, 0x4b, 0x67, + 0x89, 0x6c, 0xf1, 0x2d, 0x9e, 0x25, 0x83, 0x0e, + 0x42, 0x43, 0xc1, 0x23, 0x41, 0x45, 0xa7, 0x31, + 0x0a, 0x0f, 0x69, 0x9d, 0xe9, 0xfe, 0xf1, 0xdd, + 0xfb, 0x8e, 0x53, 0x36, 0xfc, 0x1b, 0x0e, 0xcd, + 0xc7, 0xd9, 0xe2, 0x36, 0x30, 0x62, 0x7b, 0xdd, + 0xa0, 0x04, 0x6a, 0x20, 0xa9, 0x6d, 0x4c, 0x4d, + 0x36, 0x76, 0x1c, 0xd8, 0x56, 0x57, 0x26, 0xfc, + 0x97, 0xdb, 0xc3, 0x99, 0x0b, 0x43, 0x21, 0xb8, + 0xc5, 0xc1, 0x3a, 0x39, 0x54, 0x95, 0x2d, 0x6b, + 0xb0, 0x37, 0xd1, 0xa5, 0x13, 0x24, 0x4f, 0x60, + 0x19, 0xb7, 0xcd, 0xb2, 0x0f, 0x74, 0x6f, 0x6b, + 0x0e, 0x87, 0x16, 0xe6, 0x46, 0x26, 0x38, 0x91, + 0x60, 0x77, 0xca, 0x9d, 0xd2, 0xd7, 0xb6, 0x27, + 0x4c, 0xd0, 0xe0, 0xd2, 0xc4, 0xea, 0x6c, 0x26, + 0x49, 0x07, 0xd8, 0x17, 0xba, 0x73, 0x32, 0x6f, + 0xc6, 0xd1, 0x77, 0x37, 0x0e, 0x70, 0x8e, 0x28, + 0x6a, 0x04, 0xf8, 0xc3, 0x46, 0xf3, 0x7b, 0xff, + 0x00, 0xd4, 0x5c, 0xe8, 0xa4, 0x6b, 0x41, 0xb1, + 0x25, 0xba, 0x15, 0x31, 0x85, 0xb2, 0x4a, 0x64, + 0x88, 0x48, 0xeb, 0x0b, 0xd9, 0x5a, 0x26, 0x3a, + 0x43, 0xc8, 0xd1, 0x74, 0xec, 0x31, 0xbd, 0xd8, + 0x78, 0x56, 0x1a, 0x13, 0xed, 0x0c, 0x87, 0x07, + 0x0a, 0xcd, 0x39, 0x93, 0xea, 0xae, 0x71, 0xb6, + 0x5c, 0x16, 0xe2, 0x41, 0xd2, 0x46, 0xf6, 0x34, + 0xe8, 0x2e, 0x6d, 0xb7, 0x18, 0x41, 0xce, 0x1c, + 0x14, 0xbe, 0xd2, 0x94, 0xf2, 0x44, 0xee, 0xed, + 0xc0, 0xd6, 0xe7, 0x71, 0xcc, 0x02, 0x10, 0x3a, + 0xba, 0x26, 0xd5, 0x9f, 0xee, 0xbf, 0x34, 0xf8, + 0x9b, 0x1b, 0xdf, 0x23, 0x73, 0x16, 0xb4, 0x5d, + 0x3e, 0xd1, 0xbc, 0xe0, 0xe1, 0x6f, 0x74, 0x27, + 0x37, 0x23, 0x26, 0x26, 0x8b, 0x91, 0x84, 0xe6, + 0x58, 0x99, 0x1b, 0xde, 0xdb, 0xe1, 0xbb, 0x5b, + 0x7c, 0xfc, 0x89, 0xe7, 0x24, 0xfb, 0x33, 0x84, + 0x70, 0xf0, 0x7d, 0x68, 0xc8, 0x22, 0x79, 0x8c, + 0x7d, 0x70, 0xdc, 0xca, 0x3a, 0x7c, 0x78, 0x31, + 0xf1, 0xda, 0xfc, 0x4a, 0x63, 0x4d, 0x5a, 0xda, + 0x87, 0xc4, 0x31, 0x39, 0x98, 0x6c, 0x6c, 0x8c, + 0x82, 0x37, 0x98, 0xc6, 0x97, 0x86, 0xe6, 0x41, + 0xe2, 0x27, 0x96, 0x10, 0x4e, 0x20, 0xdc, 0xd9, + 0xb4, 0xa7, 0x08, 0x21, 0xa8, 0xc0, 0xd0, 0x2f, + 0x94, 0x66, 0x70, 0xa2, 0xa6, 0x9d, 0xaf, 0x8b, + 0x1f, 0xa2, 0xc7, 0x42, 0xc4, 0x58, 0xf1, 0x1d, + 0xec, 0xd7, 0x11, 0x98, 0xac, 0xa9, 0x8d, 0xe2, + 0x2f, 0xb7, 0x87, 0x32, 0xc6, 0x62, 0x78, 0x65, + 0xb1, 0x62, 0xc3, 0x9a, 0xdc, 0xa8, 0x3a, 0x48, + 0xde, 0xc6, 0xbb, 0x41, 0x73, 0x6d, 0x75, 0xe2, + 0xf0, 0x09, 0x25, 0xde, 0x83, 0x6d, 0x25, 0x16, + 0xbc, 0x16, 0x38, 0x71, 0x1d, 0xca, 0xaf, 0x43, + 0xda, 0x99, 0xed, 0x05, 0x54, 0x2f, 0xa2, 0x57, + 0x0e, 0xdf, 0xd4, 0x39, 0x99, 0x4c, 0x93, 0x5a, + 0x2e, 0x5d, 0x6b, 0xa9, 0xa1, 0x0d, 0x73, 0xdd, + 0x15, 0xf1, 0x61, 0x1c, 0x9c, 0x69, 0xb9, 0x46, + 0x39, 0x98, 0xb4, 0x62, 0x16, 0xba, 0x0e, 0x92, + 0x37, 0xb1, 0xa7, 0x41, 0x73, 0x6d, 0x75, 0x90, + 0x8b, 0x13, 0xf3, 0x0b, 0x5f, 0x39, 0x41, 0x8f, + 0x8d, 0xec, 0x71, 0xd0, 0xd7, 0x36, 0xc5, 0x38, + 0xbe, 0x19, 0x1a, 0x1b, 0xc2, 0xbb, 0x4e, 0x6f, + 0xd4, 0x5c, 0x1c, 0xea, 0x5f, 0x5a, 0x83, 0xda, + 0x67, 0x7a, 0x7f, 0xbc, 0x77, 0x7e, 0xe3, 0x95, + 0x57, 0xac, 0x77, 0x6e, 0x78, 0x52, 0x06, 0x67, + 0x99, 0xc1, 0xae, 0x03, 0x8c, 0x80, 0x9f, 0x33, + 0x81, 0x64, 0x0d, 0x70, 0x0e, 0xc5, 0x99, 0x78, + 0xbd, 0xcf, 0x88, 0xe4, 0xed, 0x93, 0xfa, 0x98, + 0x70, 0xfe, 0x2b, 0xc0, 0x91, 0xc5, 0x21, 0x6c, + 0x45, 0x8d, 0xc4, 0x07, 0xd6, 0xf5, 0xaf, 0x0a, + 0x35, 0x8f, 0x73, 0x40, 0xab, 0x20, 0x58, 0xe8, + 0x17, 0xd0, 0xa9, 0x60, 0x7b, 0xbf, 0x46, 0xc4, + 0xc2, 0x59, 0xc4, 0x4a, 0xf0, 0xcc, 0x55, 0x0e, + 0x71, 0xa6, 0x11, 0xbe, 0xcd, 0x76, 0x86, 0xfd, + 0x94, 0x6d, 0xf6, 0x1b, 0xdc, 0xbc, 0x18, 0x6b, + 0x19, 0x3b, 0xde, 0x20, 0x6d, 0x84, 0x76, 0xb7, + 0xc5, 0x78, 0x5a, 0xad, 0xf9, 0x48, 0x89, 0xc0, + 0x3c, 0x8f, 0x0d, 0xad, 0xf4, 0x2c, 0xab, 0x59, + 0x30, 0x2d, 0xa2, 0x23, 0x15, 0x43, 0x73, 0xbf, + 0x90, 0xfa, 0x53, 0x5f, 0x2b, 0xcc, 0x92, 0x1a, + 0xe8, 0xee, 0xe3, 0xf0, 0x5e, 0x19, 0x8e, 0x67, + 0x38, 0xd3, 0xe4, 0x5d, 0x66, 0x9d, 0x03, 0x91, + 0x78, 0x0e, 0x36, 0x3c, 0xb5, 0x8e, 0x8d, 0xb8, + 0xc0, 0xfa, 0xca, 0xb4, 0xe3, 0x9e, 0x2f, 0xd3, + 0x5c, 0x0b, 0xa9, 0xad, 0x8b, 0xd1, 0xf0, 0x5e, + 0x18, 0x9e, 0x26, 0x49, 0x03, 0xf2, 0x71, 0xe6, + 0x91, 0xb6, 0x37, 0xe5, 0x5e, 0x0e, 0x33, 0x55, + 0x4c, 0x4c, 0xcf, 0x2f, 0x0c, 0x8d, 0xba, 0x79, + 0x71, 0x1e, 0x35, 0x57, 0x82, 0x3c, 0xa6, 0x1f, + 0x08, 0xdc, 0x46, 0x38, 0xfd, 0x0a, 0xb6, 0x48, + 0x2a, 0xa7, 0x00, 0x10, 0xe9, 0x69, 0xaa, 0x07, + 0x07, 0x3f, 0x17, 0x26, 0xe3, 0x3d, 0x6a, 0x5f, + 0x5a, 0x9f, 0xdd, 0x3f, 0xbb, 0x72, 0x95, 0xef, + 0xe0, 0x89, 0x05, 0xd4, 0xcd, 0x6b, 0x5d, 0x89, + 0xf2, 0x62, 0x6b, 0xb8, 0xac, 0xa6, 0xc8, 0xb8, + 0xb2, 0x7f, 0x19, 0xc3, 0x23, 0xd8, 0x73, 0xda, + 0xdc, 0xaa, 0xa6, 0x5b, 0xe1, 0xaa, 0x34, 0x91, + 0x17, 0x9e, 0x3c, 0x59, 0xf3, 0xaf, 0x03, 0x79, + 0x43, 0xbf, 0x8b, 0xca, 0x7e, 0xfe, 0x6e, 0x35, + 0x59, 0x91, 0x71, 0x8d, 0xde, 0x37, 0x98, 0xb7, + 0x48, 0x53, 0xc4, 0x5d, 0xe4, 0x5d, 0x4a, 0x6e, + 0xce, 0x22, 0x6d, 0xa5, 0x52, 0x40, 0xd9, 0xaa, + 0x28, 0x2a, 0x9b, 0x16, 0x06, 0xb0, 0xb6, 0xf1, + 0xbf, 0xd3, 0x65, 0x4f, 0x7e, 0x22, 0xee, 0xe2, + 0xaa, 0xfc, 0x52, 0x29, 0xbc, 0x62, 0x50, 0x63, + 0x2e, 0x94, 0x8b, 0x0e, 0x55, 0xe0, 0xe0, 0x3c, + 0x69, 0xe3, 0x20, 0x2d, 0x0c, 0x20, 0x16, 0x3f, + 0x96, 0xea, 0x95, 0x90, 0xb9, 0xd1, 0x87, 0xbe, + 0x40, 0x79, 0x6d, 0x73, 0x99, 0x78, 0x59, 0xd1, + 0x5c, 0x3f, 0x21, 0x1d, 0x88, 0xf8, 0xaf, 0x01, + 0x49, 0x31, 0x26, 0x6f, 0x29, 0x9c, 0xe9, 0x23, + 0x89, 0x78, 0x4d, 0xb3, 0xbc, 0xb9, 0xad, 0x95, + 0x98, 0x7f, 0x74, 0x62, 0xe2, 0x55, 0x51, 0x5a, + 0xae, 0x40, 0x60, 0xc3, 0x92, 0x63, 0x41, 0x8c, + 0x0b, 0x69, 0x5e, 0x07, 0xa6, 0x8a, 0x4c, 0x98, + 0x74, 0x6c, 0xbf, 0x21, 0xf5, 0xf2, 0xaf, 0x09, + 0x83, 0x34, 0xd3, 0xb9, 0xb2, 0x37, 0x7d, 0x20, + 0xb0, 0x06, 0xff, 0x00, 0x55, 0x56, 0xe5, 0x04, + 0xcd, 0x8a, 0x48, 0xe3, 0x06, 0x78, 0x34, 0xb1, + 0x42, 0xf7, 0x54, 0x1a, 0x96, 0x3a, 0x31, 0x81, + 0xe4, 0x58, 0xdb, 0xd3, 0xb9, 0x59, 0xed, 0xb3, + 0xe6, 0xa3, 0xf6, 0x82, 0xac, 0xf7, 0xcf, 0xef, + 0xfd, 0x44, 0xa6, 0x5a, 0x9f, 0x15, 0x35, 0x12, + 0x00, 0x1f, 0x87, 0x16, 0x66, 0xa9, 0xaa, 0xe3, + 0x21, 0xec, 0x9a, 0x90, 0xbc, 0x1b, 0x66, 0x27, + 0x32, 0xa3, 0xc7, 0x2e, 0x29, 0xc5, 0x65, 0x83, + 0xe4, 0xcf, 0xc4, 0xbc, 0x26, 0x0c, 0xd3, 0x4e, + 0xe6, 0xc8, 0xdd, 0xf4, 0x82, 0xc0, 0x1b, 0xfd, + 0x55, 0x5b, 0x23, 0x75, 0xcd, 0xa4, 0xf2, 0x7e, + 0xbb, 0x2a, 0x57, 0xd5, 0xb8, 0xc9, 0x23, 0x6a, + 0x1d, 0x93, 0x73, 0xf4, 0xf0, 0x57, 0x84, 0x7c, + 0x65, 0xce, 0x73, 0xb2, 0xad, 0xb1, 0x77, 0xaf, + 0x47, 0xea, 0x65, 0x50, 0x7b, 0x4c, 0xef, 0x4f, + 0xf7, 0x8e, 0xef, 0xdc, 0x72, 0x7c, 0x9c, 0x4f, + 0xb3, 0x87, 0x36, 0xe0, 0x7c, 0x4e, 0x2c, 0x78, + 0xe3, 0x08, 0x09, 0xa4, 0x2f, 0x03, 0x89, 0x64, + 0x32, 0xce, 0xc9, 0xda, 0xd6, 0x50, 0xbb, 0x16, + 0x78, 0x45, 0x99, 0x9b, 0x42, 0x9b, 0x0c, 0x84, + 0x65, 0xb3, 0xbf, 0x36, 0x95, 0x94, 0x94, 0xe2, + 0x7f, 0x2a, 0xc9, 0x49, 0x33, 0x9c, 0xce, 0x45, + 0x94, 0x94, 0xe2, 0x7e, 0x8b, 0xd9, 0x46, 0x24, + 0x38, 0x84, 0x6d, 0xc2, 0xdc, 0xda, 0x02, 0xc7, + 0x0b, 0xcb, 0x1c, 0x9f, 0x2e, 0x50, 0x99, 0x1c, + 0xdc, 0x24, 0x9e, 0x45, 0x1c, 0x65, 0xd6, 0x83, + 0x2a, 0x24, 0x22, 0xca, 0x68, 0xd9, 0x29, 0x34, + 0xee, 0x75, 0xec, 0xa1, 0x76, 0x2c, 0xf0, 0x8b, + 0x33, 0x36, 0x85, 0x23, 0xe3, 0x94, 0xb5, 0xd2, + 0x1b, 0xbb, 0x36, 0x95, 0x36, 0xfc, 0x9c, 0xb7, + 0x0e, 0xfc, 0x68, 0x42, 0xd9, 0x5c, 0xd8, 0xc7, + 0x12, 0x21, 0xd2, 0x1c, 0xee, 0xc7, 0xa3, 0x8d, + 0x64, 0xe5, 0x94, 0xb9, 0x9c, 0x9b, 0x91, 0xb4, + 0x0c, 0xe4, 0xa9, 0x48, 0xd1, 0x74, 0x59, 0xf6, + 0xda, 0x5a, 0x88, 0x22, 0xc4, 0x6e, 0x64, 0xc4, + 0xee, 0xc3, 0xa3, 0xfa, 0x28, 0x98, 0x5e, 0x59, + 0x7d, 0x2a, 0x6b, 0xc8, 0x4e, 0x57, 0x87, 0x7e, + 0x35, 0x0b, 0xb1, 0xe7, 0x84, 0x59, 0x99, 0xb4, + 0x27, 0x45, 0x8b, 0x78, 0xe7, 0x63, 0x22, 0xdc, + 0x68, 0xcb, 0x8f, 0xca, 0x16, 0xe0, 0xbd, 0x86, + 0x85, 0x92, 0x6c, 0xce, 0x0c, 0xd0, 0x84, 0xb1, + 0x9c, 0x2f, 0x1a, 0x0a, 0x24, 0xe9, 0x2b, 0x22, + 0xc9, 0x5c, 0x23, 0xe4, 0x4c, 0x84, 0x9f, 0x26, + 0xce, 0x08, 0xb2, 0xaa, 0x74, 0x92, 0x1c, 0xbb, + 0xc3, 0x70, 0x9b, 0x72, 0x26, 0xce, 0x64, 0x26, + 0x56, 0xe8, 0x36, 0xd0, 0xa5, 0x8e, 0xfb, 0xc9, + 0x73, 0xb8, 0x5b, 0x4a, 0xc8, 0x99, 0x5d, 0x93, + 0xd1, 0x65, 0x11, 0x2e, 0xcf, 0x10, 0xb3, 0x3d, + 0x09, 0xd7, 0x98, 0x9c, 0x43, 0x09, 0xcd, 0xc4, + 0x8c, 0xa2, 0x53, 0x8c, 0x8b, 0x1c, 0xc1, 0x63, + 0x95, 0xc5, 0xee, 0xf4, 0xee, 0x3f, 0x16, 0x6c, + 0xab, 0xc5, 0x87, 0xa9, 0x30, 0x9d, 0x00, 0xa9, + 0x89, 0x1c, 0x27, 0x17, 0x0f, 0x8a, 0xd0, 0xb4, + 0x2d, 0x0b, 0x42, 0xd0, 0xb4, 0x2d, 0x0a, 0x38, + 0xdc, 0x6e, 0xc8, 0xf8, 0x22, 0xda, 0x13, 0x58, + 0xd7, 0xd9, 0xad, 0x69, 0x68, 0xcc, 0x34, 0x1d, + 0x29, 0xb1, 0xb5, 0xd6, 0x63, 0x5f, 0x94, 0x1e, + 0xb4, 0xeb, 0xcc, 0x4e, 0x26, 0xe1, 0x39, 0xb8, + 0x90, 0x9f, 0x28, 0x72, 0xa3, 0xeb, 0x0c, 0xca, + 0x29, 0x2a, 0x25, 0x79, 0x0c, 0x3a, 0x5b, 0x9a, + 0xca, 0x48, 0xb2, 0xee, 0xa9, 0x74, 0x84, 0x67, + 0x2d, 0xb6, 0x10, 0x16, 0x85, 0xa1, 0x68, 0x5a, + 0x16, 0x85, 0xa1, 0x68, 0x4d, 0x63, 0x46, 0x72, + 0xa5, 0x23, 0x45, 0xd4, 0x1e, 0xd3, 0x3b, 0xd3, + 0xfd, 0xe3, 0xbb, 0xf7, 0x1c, 0xa9, 0x19, 0x24, + 0x22, 0x68, 0xdd, 0x1d, 0xf4, 0xd8, 0x85, 0xb3, + 0x4d, 0xd2, 0x0b, 0x66, 0x9b, 0xa4, 0x16, 0xcd, + 0x37, 0x48, 0x2d, 0x9a, 0x6e, 0x90, 0x5b, 0x34, + 0xdd, 0x20, 0xb6, 0x69, 0xba, 0x41, 0x6c, 0xd3, + 0x74, 0x82, 0xd9, 0xa6, 0xe9, 0x05, 0xb3, 0x4d, + 0xd2, 0x0b, 0x66, 0x9b, 0xa4, 0x16, 0xcd, 0x37, + 0x48, 0x2d, 0x9a, 0x6e, 0x90, 0x5b, 0x34, 0xdd, + 0x20, 0xb6, 0x69, 0xba, 0x41, 0x6c, 0xd3, 0x74, + 0x82, 0xd9, 0xa6, 0xe9, 0x05, 0xb3, 0x4d, 0xd2, + 0x0b, 0x66, 0x9b, 0xa4, 0x16, 0xcd, 0x37, 0x48, + 0x2d, 0x9a, 0x6e, 0x90, 0x5b, 0x34, 0xdd, 0x20, + 0xaa, 0x25, 0x82, 0x2c, 0x89, 0x6b, 0x83, 0x31, + 0x13, 0x73, 0xbb, 0x93, 0x7d, 0x33, 0x27, 0x18, + 0x1a, 0x6f, 0x7b, 0x15, 0xe6, 0xf6, 0xf5, 0xa5, + 0x79, 0xbd, 0xbd, 0x69, 0x5e, 0x6f, 0x6f, 0x5a, + 0x57, 0x9b, 0xdb, 0xd6, 0x95, 0xe6, 0xf6, 0xf5, + 0xa5, 0x79, 0xbd, 0xbd, 0x69, 0x5e, 0x6f, 0x6f, + 0x5a, 0x57, 0x9b, 0xdb, 0xd6, 0x95, 0xe6, 0xf6, + 0xf5, 0xa5, 0x79, 0xbd, 0xbd, 0x69, 0x5e, 0x6f, + 0x6f, 0x5a, 0x57, 0x9b, 0xdb, 0xd6, 0x95, 0xe6, + 0xf6, 0xf5, 0xa5, 0x79, 0xbd, 0xbd, 0x69, 0x5e, + 0x6f, 0x6f, 0x5a, 0x57, 0x9b, 0xdb, 0xd6, 0x95, + 0xe6, 0xf6, 0xf5, 0xa5, 0x79, 0xbd, 0xbd, 0x69, + 0x5e, 0x6f, 0x6f, 0x5a, 0x57, 0x9b, 0xdb, 0xd6, + 0x95, 0xbc, 0xa1, 0x8d, 0xae, 0xe5, 0x73, 0xc9, + 0x51, 0x93, 0xfe, 0x1b, 0x73, 0x6e, 0x52, 0x35, + 0xf0, 0x36, 0x76, 0x3a, 0x3e, 0x33, 0x62, 0x3e, + 0x2b, 0xcd, 0xff, 0x00, 0xce, 0xfc, 0x97, 0x9b, + 0xff, 0x00, 0x9d, 0xf9, 0x2f, 0x37, 0xff, 0x00, + 0x3b, 0xf2, 0x5e, 0x6f, 0xfe, 0x77, 0xe4, 0xbc, + 0xdf, 0xfc, 0xef, 0xc9, 0x79, 0xbf, 0xf9, 0xdf, + 0x92, 0xf3, 0x7f, 0xf3, 0xbf, 0x25, 0xe6, 0xff, + 0x00, 0xe7, 0x7e, 0x4b, 0xcd, 0xff, 0x00, 0xce, + 0xfc, 0x97, 0x9b, 0xff, 0x00, 0x9d, 0xf9, 0x2f, + 0x37, 0xff, 0x00, 0x3b, 0xf2, 0x5e, 0x6f, 0xfe, + 0x77, 0xe4, 0xbc, 0xdf, 0xfc, 0xef, 0xc9, 0x79, + 0xbf, 0xf9, 0xdf, 0x92, 0xf3, 0x7f, 0xf3, 0xbf, + 0x25, 0xe6, 0xff, 0x00, 0xe7, 0x7e, 0x4b, 0xcd, + 0xff, 0x00, 0xce, 0xfc, 0x97, 0x9b, 0xff, 0x00, + 0x9d, 0xf9, 0x2f, 0x37, 0xff, 0x00, 0x3b, 0xf2, + 0x5e, 0x6f, 0xfe, 0x77, 0xe4, 0xbc, 0xdf, 0xfc, + 0xef, 0xc9, 0x54, 0x4b, 0x14, 0x22, 0x9c, 0xb5, + 0xc1, 0xba, 0x6e, 0x79, 0xf7, 0x20, 0xf6, 0x99, + 0xde, 0x9f, 0xef, 0x1d, 0xdf, 0xb8, 0xe5, 0x43, + 0xee, 0xfe, 0x7f, 0x4e, 0x56, 0xc5, 0x8f, 0x29, + 0x14, 0x82, 0x22, 0x64, 0x22, 0xcf, 0xbf, 0x27, + 0x22, 0xc4, 0xf6, 0x16, 0x8c, 0x58, 0x33, 0xf2, + 0xa7, 0x55, 0x02, 0x72, 0x8d, 0x92, 0xd6, 0xe2, + 0xc3, 0x9b, 0xe6, 0x42, 0x82, 0x67, 0xbd, 0xcd, + 0x18, 0x1d, 0x24, 0xb6, 0xf8, 0x58, 0x0e, 0x90, + 0x4d, 0x7d, 0x3b, 0x9e, 0x0d, 0xec, 0x63, 0x93, + 0x39, 0xf5, 0xdd, 0x52, 0x99, 0x84, 0xe5, 0xf3, + 0x03, 0x9d, 0x8e, 0x16, 0x1b, 0xe2, 0x34, 0x59, + 0x53, 0xc6, 0x1c, 0x49, 0x74, 0xee, 0x81, 0xe7, + 0xd2, 0x0f, 0xe0, 0x54, 0xf1, 0xb9, 0xcf, 0xc9, + 0x36, 0x46, 0x31, 0x84, 0x69, 0x38, 0x9d, 0x9b, + 0xb2, 0xe9, 0xf4, 0xce, 0x73, 0xb2, 0x03, 0x3e, + 0x21, 0xa6, 0xc7, 0x83, 0xde, 0x3e, 0x9d, 0x57, + 0xbc, 0x6e, 0xef, 0xf0, 0xdb, 0xf4, 0xe0, 0x12, + 0x02, 0x63, 0x2f, 0x18, 0x80, 0xe4, 0x50, 0x89, + 0xf2, 0x30, 0x48, 0xe9, 0x1c, 0xdc, 0x70, 0x81, + 0x86, 0xdc, 0x57, 0xb7, 0xa7, 0xe2, 0x84, 0x6f, + 0x3e, 0x5a, 0xdb, 0xf6, 0xfd, 0x95, 0x44, 0xdc, + 0x0d, 0xc2, 0xe6, 0xc3, 0x71, 0x6d, 0x37, 0x02, + 0xea, 0xa6, 0x59, 0x98, 0xd3, 0x10, 0x7e, 0x4a, + 0xc4, 0x68, 0xb9, 0xfc, 0x01, 0x55, 0xcd, 0x65, + 0x3b, 0x67, 0xa8, 0x8e, 0x46, 0xb6, 0xc6, 0x2c, + 0x76, 0xe1, 0x5d, 0x52, 0x47, 0x25, 0x34, 0x0d, + 0x92, 0x46, 0x93, 0x2c, 0x66, 0x11, 0x9b, 0x4d, + 0xbd, 0x4b, 0x11, 0x6b, 0x1b, 0xe8, 0x8d, 0xa1, + 0xa3, 0xb3, 0xf5, 0x11, 0x7b, 0xb6, 0xf7, 0x6e, + 0x51, 0xe4, 0xd9, 0x8b, 0x0c, 0x25, 0xc7, 0xd0, + 0x16, 0x28, 0xd9, 0x88, 0x68, 0xd2, 0x05, 0xfd, + 0x5c, 0xaa, 0xca, 0x48, 0x9d, 0x6c, 0x4c, 0x71, + 0x69, 0xb2, 0x11, 0xc4, 0xcc, 0x6f, 0x3c, 0x5b, + 0x85, 0xee, 0x66, 0x61, 0xa4, 0x62, 0x17, 0x6f, + 0xac, 0x71, 0x26, 0x3d, 0xd6, 0xc2, 0xed, 0x04, + 0x7a, 0x81, 0xf9, 0x85, 0x85, 0xe2, 0xce, 0xb0, + 0x2a, 0x26, 0x18, 0x88, 0x7c, 0x83, 0x13, 0x47, + 0xa1, 0x61, 0x90, 0x58, 0x91, 0x71, 0x63, 0x70, + 0x56, 0x07, 0x11, 0x7b, 0x03, 0x9b, 0xd2, 0x2e, + 0xaf, 0xc2, 0x66, 0x22, 0xd0, 0xf1, 0xa0, 0xd9, + 0x65, 0x83, 0x37, 0x96, 0xbe, 0x91, 0x7b, 0x72, + 0xd9, 0x4b, 0x2b, 0x5b, 0x78, 0xe3, 0xb6, 0x23, + 0xc9, 0x7d, 0x0a, 0x27, 0x36, 0x3b, 0x89, 0x49, + 0x0c, 0xf4, 0xdb, 0x4a, 0x63, 0x30, 0xb4, 0x97, + 0xde, 0xc4, 0x3d, 0xb6, 0xcd, 0xa7, 0x3d, 0xec, + 0x99, 0x76, 0xdf, 0x19, 0xb3, 0x4b, 0x1c, 0x1c, + 0x09, 0xf8, 0x2c, 0x6f, 0x68, 0xc3, 0x7b, 0x5d, + 0xae, 0x0e, 0xb1, 0xf8, 0x29, 0x65, 0x6b, 0x6e, + 0xc8, 0xed, 0x88, 0xf2, 0x26, 0x3d, 0x8c, 0x04, + 0x3f, 0x82, 0x31, 0x8c, 0x47, 0xe1, 0xa5, 0x38, + 0xb1, 0xb9, 0x9b, 0x98, 0x97, 0x10, 0xd1, 0xda, + 0xab, 0x23, 0x91, 0xa5, 0xaf, 0x12, 0xb6, 0xe0, + 0xee, 0x41, 0xed, 0x33, 0xbd, 0x3f, 0xde, 0x3b, + 0xbf, 0x71, 0xca, 0x87, 0xdd, 0xfc, 0xfe, 0x90, + 0xc5, 0xa3, 0x8d, 0x4c, 0x26, 0x9d, 0xb2, 0xc0, + 0x64, 0x19, 0x06, 0xc6, 0x41, 0x2c, 0x6f, 0xab, + 0x8b, 0x32, 0x61, 0xc2, 0x58, 0xf6, 0x6f, 0x46, + 0x7b, 0x8c, 0x3c, 0x5f, 0x15, 0x14, 0x32, 0x48, + 0xd6, 0xb6, 0x49, 0x24, 0x63, 0xae, 0x74, 0x02, + 0xd6, 0xd8, 0xf3, 0xf7, 0x27, 0xc4, 0x64, 0x6c, + 0x6d, 0x98, 0xc8, 0x1b, 0x7f, 0xab, 0x9d, 0x98, + 0x6f, 0xcc, 0x85, 0xe6, 0x64, 0x93, 0x13, 0xc1, + 0x8c, 0xe2, 0x00, 0x7a, 0xd5, 0x13, 0x62, 0xc9, + 0x17, 0x86, 0xba, 0xe4, 0xb1, 0xae, 0x73, 0x4e, + 0x23, 0xcc, 0xaa, 0x8c, 0x8f, 0x19, 0x46, 0x79, + 0x46, 0x62, 0x39, 0xc9, 0x2d, 0x23, 0xe6, 0x39, + 0x97, 0x83, 0x5d, 0x94, 0x6e, 0x27, 0xcb, 0x19, + 0x97, 0x3f, 0x07, 0x06, 0xf4, 0x5d, 0x52, 0x3c, + 0xc8, 0xd1, 0x21, 0x91, 0xac, 0x7d, 0xce, 0x86, + 0xb4, 0xfe, 0x6d, 0xe6, 0xfa, 0x75, 0x5e, 0xf1, + 0xbb, 0xbf, 0xc3, 0x6f, 0xd3, 0x8a, 0x6b, 0x62, + 0xc0, 0xeb, 0xd9, 0x31, 0x94, 0xc1, 0xcf, 0xb3, + 0xf2, 0x97, 0x98, 0x0d, 0x36, 0xb0, 0x4c, 0xca, + 0x6f, 0x9c, 0xd1, 0x6c, 0x5c, 0x67, 0xd6, 0xa0, + 0x9e, 0x56, 0x4a, 0x6a, 0x21, 0x68, 0x01, 0xad, + 0xb6, 0x17, 0x5b, 0x42, 0x6b, 0x20, 0x92, 0x48, + 0x9e, 0x5c, 0xe7, 0xc8, 0xe6, 0x9b, 0x5c, 0xa9, + 0xed, 0x8c, 0x4b, 0x36, 0x4c, 0x93, 0xe9, 0x00, + 0xdd, 0x53, 0xd4, 0xb8, 0x3b, 0x18, 0x6d, 0xa5, + 0xf4, 0x9b, 0x5a, 0xff, 0x00, 0xa9, 0x8b, 0xdd, + 0xb7, 0xbb, 0x72, 0x8f, 0x26, 0xc7, 0xbd, 0xa2, + 0x9e, 0x4b, 0xe1, 0x1f, 0xba, 0xeb, 0x2f, 0x18, + 0xc8, 0x4b, 0x23, 0xe2, 0x7d, 0xa3, 0x8c, 0x34, + 0xe6, 0x7f, 0x29, 0x50, 0xe4, 0xb6, 0x5c, 0x9f, + 0x94, 0xbe, 0x8c, 0x58, 0xbb, 0xf4, 0x2a, 0xd8, + 0xf8, 0x65, 0xb5, 0x81, 0x91, 0x8e, 0x4b, 0xe3, + 0xfc, 0x02, 0x80, 0x31, 0x8e, 0x76, 0x19, 0x1a, + 0x5d, 0x87, 0x88, 0x62, 0x09, 0xcc, 0x91, 0xa6, + 0x37, 0x5f, 0x43, 0x85, 0x94, 0xa6, 0x78, 0x32, + 0x32, 0xbb, 0x45, 0x43, 0x1d, 0xbd, 0x94, 0xdf, + 0xb6, 0xfe, 0x84, 0x5c, 0x60, 0x64, 0xed, 0x35, + 0x32, 0x61, 0xc4, 0x48, 0xb0, 0xb3, 0x79, 0x0a, + 0x71, 0x03, 0x0e, 0xf1, 0x99, 0x87, 0xb0, 0x15, + 0x0b, 0x32, 0x72, 0xc6, 0x70, 0x38, 0x3d, 0xc5, + 0xa7, 0x36, 0xf9, 0xc7, 0xb9, 0x06, 0x54, 0x53, + 0x4f, 0x1b, 0x18, 0xcc, 0x31, 0x34, 0x9c, 0x27, + 0x4e, 0x93, 0x9b, 0xd6, 0xa5, 0xca, 0x6c, 0xd9, + 0x08, 0xb0, 0x72, 0x63, 0xde, 0x76, 0xe9, 0x52, + 0x00, 0x5c, 0x63, 0x6d, 0x64, 0xd7, 0x1c, 0x43, + 0x45, 0xbe, 0x6b, 0xc6, 0x04, 0x52, 0xca, 0x5e, + 0xc7, 0x35, 0xa4, 0x02, 0x5a, 0xc6, 0x71, 0x9e, + 0xf5, 0x3b, 0x1d, 0xc0, 0x96, 0x56, 0x46, 0x7e, + 0x2d, 0x7a, 0x82, 0x28, 0x70, 0x17, 0x42, 0xf7, + 0xc4, 0x03, 0xf4, 0x3b, 0x78, 0x31, 0x0f, 0x8e, + 0x75, 0x1b, 0xdf, 0x03, 0xe9, 0x9c, 0x5b, 0x2d, + 0xe0, 0xc5, 0xa4, 0x64, 0xce, 0x71, 0x7d, 0x0a, + 0x9e, 0x2a, 0x56, 0xe4, 0x70, 0xcb, 0x8c, 0x3a, + 0x57, 0xdf, 0x7d, 0xcc, 0x9f, 0x24, 0x94, 0xc6, + 0x8e, 0x4c, 0x43, 0x35, 0xf7, 0xb2, 0x7a, 0x82, + 0xa6, 0x8a, 0x69, 0x5c, 0xc3, 0x2d, 0xdc, 0xf0, + 0x19, 0x71, 0x67, 0x66, 0x17, 0xcf, 0xf1, 0xf8, + 0xaa, 0x20, 0xd8, 0xdc, 0x32, 0x6d, 0x73, 0x5d, + 0x27, 0xd5, 0x69, 0xca, 0x3b, 0x8d, 0x3f, 0xc5, + 0x06, 0x53, 0x0d, 0x44, 0x8e, 0x2c, 0x6e, 0x92, + 0x0d, 0xac, 0xeb, 0x2a, 0xb6, 0x3d, 0xe1, 0xee, + 0x0f, 0x66, 0x83, 0x7b, 0x66, 0xd1, 0xb9, 0x07, + 0xb4, 0xce, 0xf0, 0x9f, 0xef, 0x1d, 0xdf, 0xb8, + 0xe5, 0x44, 0x6a, 0xa1, 0x92, 0x42, 0x5a, 0x40, + 0xc0, 0xeb, 0x71, 0xad, 0x92, 0xa3, 0xac, 0x5b, + 0x25, 0x47, 0x58, 0xb6, 0x4a, 0x8e, 0xb1, 0x6c, + 0x95, 0x1d, 0x62, 0xd9, 0x2a, 0x3a, 0xc5, 0xb2, + 0x54, 0x75, 0x8b, 0x64, 0xa8, 0xeb, 0x16, 0xc9, + 0x51, 0xd6, 0x2d, 0x92, 0xa3, 0xac, 0x5b, 0x25, + 0x47, 0x58, 0xb6, 0x4a, 0x8e, 0xb1, 0x6c, 0x95, + 0x1d, 0x62, 0xd9, 0x2a, 0x3a, 0xc5, 0xb2, 0x54, + 0x75, 0x8b, 0x64, 0xa8, 0xeb, 0x16, 0xc9, 0x51, + 0xd6, 0x2d, 0x92, 0xa3, 0xac, 0x5b, 0x25, 0x47, + 0x58, 0xb6, 0x4a, 0x8e, 0xb1, 0x6c, 0x95, 0x1d, + 0x62, 0xd9, 0x2a, 0x3a, 0xc5, 0x3f, 0x8a, 0xc4, + 0xf8, 0xdb, 0x94, 0x17, 0xc6, 0xeb, 0xee, 0x88, + 0xbc, 0x56, 0x29, 0x77, 0x8d, 0x38, 0x9f, 0xa5, + 0x6c, 0x14, 0xfc, 0xcb, 0x60, 0xa7, 0xe6, 0x5b, + 0x05, 0x3f, 0x32, 0xd8, 0x29, 0xf9, 0x96, 0xc1, + 0x4f, 0xcc, 0xb6, 0x0a, 0x7e, 0x64, 0x5a, 0xff, + 0x00, 0x07, 0x42, 0xc7, 0x0e, 0x27, 0x05, 0xb0, + 0x53, 0xf3, 0x21, 0x23, 0xbc, 0x15, 0x1b, 0x63, + 0x3a, 0x1c, 0x59, 0x99, 0x17, 0x47, 0xe0, 0xa8, + 0xe4, 0x68, 0xd2, 0x5a, 0xcb, 0xd9, 0x17, 0x47, + 0xe0, 0xa8, 0xe4, 0x68, 0xd2, 0x5a, 0xcb, 0xd9, + 0x63, 0xfe, 0xce, 0x87, 0x0d, 0xed, 0x7b, 0x66, + 0x4e, 0xc3, 0xe0, 0x86, 0x3b, 0x0e, 0x9b, 0x30, + 0xe6, 0x58, 0xa2, 0xf0, 0x43, 0x25, 0x6e, 0x8b, + 0xb2, 0x32, 0x53, 0x8f, 0xf6, 0x6c, 0x36, 0x6e, + 0x67, 0x6f, 0x74, 0x2d, 0x82, 0x9f, 0x99, 0x6c, + 0x14, 0xfc, 0xcb, 0x60, 0xa7, 0xe6, 0x5b, 0x05, + 0x3f, 0x32, 0xd8, 0x29, 0xf9, 0x96, 0xc1, 0x4f, + 0xcc, 0x9a, 0xeb, 0x5a, 0xec, 0x69, 0xb6, 0xe5, + 0x19, 0x92, 0xae, 0x3a, 0x7b, 0x47, 0xa1, 0xfc, + 0x6b, 0xce, 0x94, 0xfc, 0xc5, 0x79, 0xd2, 0x9f, + 0x98, 0xa0, 0xe1, 0xe1, 0x4a, 0x7b, 0x8c, 0xfa, + 0x0a, 0xf3, 0xa4, 0x1c, 0xc5, 0x79, 0xd2, 0x9f, + 0x98, 0xaf, 0x3a, 0x53, 0xf3, 0x15, 0xe7, 0x4a, + 0x7e, 0x62, 0xbc, 0xe9, 0x4f, 0xcc, 0x57, 0x9d, + 0x29, 0xf9, 0x8a, 0xf3, 0xa5, 0x3f, 0x31, 0x5e, + 0x74, 0xa7, 0xe6, 0x2b, 0xce, 0x94, 0xfc, 0xc5, + 0x79, 0xd2, 0x9f, 0x98, 0xaf, 0x3a, 0x53, 0xf3, + 0x15, 0xe7, 0x4a, 0x7e, 0x62, 0xbc, 0xe9, 0x4f, + 0xcc, 0x57, 0x9d, 0x29, 0xf9, 0x8a, 0xf3, 0xa5, + 0x3f, 0x31, 0x5e, 0x74, 0xa7, 0xe6, 0x2b, 0xce, + 0x94, 0xfc, 0xc5, 0x79, 0xd2, 0x9f, 0x98, 0xaa, + 0x81, 0x1d, 0x4b, 0x2a, 0x2e, 0xf1, 0x9d, 0x9c, + 0x5b, 0x90, 0x7b, 0x4c, 0xef, 0x09, 0xfe, 0xf1, + 0xdd, 0xfb, 0x8e, 0x5e, 0x0f, 0xf5, 0x3f, 0xbd, + 0x17, 0x39, 0xa1, 0xe2, 0x36, 0x3e, 0x4c, 0x27, + 0x8e, 0xc2, 0xea, 0xa6, 0x3a, 0x97, 0x65, 0x30, + 0xb3, 0x28, 0xc7, 0x1f, 0xaa, 0x6e, 0x15, 0x5c, + 0x63, 0x28, 0x72, 0x53, 0x88, 0x9b, 0x6c, 0xe4, + 0x8b, 0x91, 0xf2, 0x54, 0xc1, 0x85, 0xd1, 0x89, + 0x64, 0x31, 0x90, 0xe7, 0xb5, 0xf6, 0xd1, 0x9f, + 0x37, 0x72, 0x6b, 0x5a, 0x65, 0x64, 0x59, 0x49, + 0x1c, 0x6f, 0x62, 0x73, 0x32, 0xe8, 0xb9, 0xa2, + 0x56, 0x17, 0x35, 0xee, 0x69, 0x7b, 0xdb, 0xc5, + 0x7e, 0x2d, 0x27, 0x46, 0x95, 0x23, 0xa3, 0x6b, + 0xa3, 0xc9, 0xd3, 0x47, 0x26, 0x91, 0x9c, 0x9c, + 0x3e, 0x8f, 0x4a, 0x74, 0xce, 0x32, 0x13, 0x86, + 0x3b, 0x00, 0x46, 0x97, 0x34, 0x9f, 0x92, 0x71, + 0xc9, 0xcf, 0x8d, 0x91, 0x89, 0x32, 0xa4, 0x79, + 0x33, 0xe8, 0x43, 0x27, 0x58, 0x28, 0xfc, 0xbb, + 0xb3, 0x92, 0x73, 0xef, 0x5b, 0xc8, 0x15, 0x4d, + 0x4d, 0x4c, 0xaf, 0xa8, 0x73, 0x64, 0x63, 0x71, + 0x46, 0xee, 0x15, 0xc1, 0xe5, 0x1e, 0x84, 0x44, + 0xef, 0x92, 0xce, 0x91, 0xcc, 0x63, 0x9b, 0xc4, + 0x05, 0xb3, 0x9e, 0x75, 0x04, 0x6e, 0x2f, 0xf1, + 0x89, 0xd8, 0x5e, 0xd2, 0x38, 0x23, 0x4d, 0xbb, + 0x95, 0x4c, 0x2d, 0x2f, 0x35, 0x1e, 0x2f, 0x9c, + 0x9e, 0x0e, 0x7c, 0x2a, 0x42, 0x23, 0x9d, 0xb9, + 0x27, 0x06, 0x97, 0xca, 0xdb, 0x35, 0xfe, 0x90, + 0xa4, 0x86, 0x1c, 0x64, 0x46, 0xe2, 0xd2, 0x5f, + 0xeb, 0x58, 0xa5, 0x32, 0x62, 0x9a, 0xa0, 0xc5, + 0xbc, 0x23, 0x37, 0x07, 0x3f, 0x6a, 0x82, 0x22, + 0x64, 0xcb, 0xcc, 0xc7, 0x1b, 0x82, 0x30, 0x82, + 0x0b, 0x87, 0xc9, 0x52, 0x36, 0xee, 0xf2, 0xb0, + 0xba, 0x43, 0xeb, 0x18, 0xbf, 0x04, 0x1b, 0x1c, + 0x72, 0x66, 0xa7, 0x63, 0xf2, 0x4d, 0x70, 0xc4, + 0xf2, 0x40, 0xd1, 0x9b, 0xd2, 0x9e, 0xd6, 0x87, + 0x80, 0x38, 0xa4, 0x16, 0x70, 0x55, 0x1e, 0xf4, + 0x77, 0x6e, 0xff, 0x00, 0x0d, 0xbf, 0x49, 0xd2, + 0xb6, 0x27, 0x4d, 0x91, 0x18, 0xb0, 0x34, 0x5e, + 0xe7, 0x89, 0x4e, 0xca, 0x90, 0xe8, 0xb1, 0x35, + 0xaf, 0xcb, 0x3b, 0x36, 0x1f, 0xfe, 0xa8, 0xa3, + 0x74, 0x59, 0x36, 0x65, 0x80, 0xc9, 0xbb, 0xd7, + 0xa1, 0x48, 0xd9, 0x9e, 0xe7, 0x36, 0x56, 0xbf, + 0x28, 0x0f, 0xa8, 0xaa, 0x78, 0xbc, 0x61, 0xf4, + 0x73, 0x44, 0x4e, 0x17, 0x5b, 0x78, 0xec, 0xfd, + 0x89, 0x90, 0x4b, 0x50, 0xea, 0x3a, 0xb8, 0x1e, + 0xed, 0xf5, 0xb7, 0x8e, 0x38, 0xbd, 0x1a, 0x13, + 0x20, 0x93, 0x58, 0x6b, 0x4b, 0x1d, 0xeb, 0xcc, + 0x9b, 0xfa, 0x43, 0xa8, 0xe5, 0x63, 0xdc, 0x58, + 0x6d, 0xbc, 0x37, 0x37, 0x1e, 0xa4, 0x5b, 0x2d, + 0x43, 0x29, 0xe4, 0x6d, 0x53, 0xf1, 0x17, 0x5f, + 0x39, 0xb3, 0x79, 0x02, 0xf0, 0x84, 0x8c, 0x38, + 0x9b, 0x78, 0x86, 0x23, 0xf5, 0xac, 0x2d, 0x7f, + 0xa7, 0x17, 0xbb, 0x6f, 0x76, 0xe5, 0x0f, 0xbb, + 0xf9, 0xfe, 0xcd, 0x55, 0xef, 0x1b, 0xb9, 0x07, + 0xb4, 0xce, 0xf0, 0x9f, 0xef, 0x1d, 0xdf, 0xb8, + 0xe5, 0x13, 0xe3, 0x18, 0x9d, 0x4f, 0x7c, 0x4d, + 0x1a, 0x70, 0x9e, 0x34, 0xd9, 0x5b, 0x62, 0x47, + 0x11, 0xd0, 0x56, 0x2a, 0x46, 0xb6, 0x33, 0x2e, + 0x69, 0x43, 0xa4, 0xbb, 0xc6, 0x7d, 0x03, 0xd1, + 0xa1, 0x3e, 0x46, 0x53, 0xd9, 0xf2, 0x48, 0x25, + 0x7d, 0xdf, 0x7c, 0xff, 0x00, 0xd1, 0x50, 0x88, + 0x60, 0xc1, 0x92, 0x97, 0x28, 0xdb, 0xbe, 0xfe, + 0xbb, 0xac, 0x9c, 0x54, 0xd8, 0x19, 0xbf, 0xd2, + 0xfb, 0xf0, 0x9b, 0x87, 0x91, 0x42, 0x5d, 0x4f, + 0x8d, 0xf1, 0xb0, 0xc5, 0x8b, 0x1f, 0xd5, 0xcf, + 0xdb, 0x9d, 0x6f, 0xa0, 0x38, 0x5d, 0x08, 0x85, + 0xe0, 0x3f, 0x4d, 0xad, 0x63, 0xa3, 0xd0, 0x11, + 0x88, 0x45, 0x80, 0x6f, 0x3e, 0xb7, 0xd9, 0x04, + 0x7c, 0xd6, 0xfa, 0x1f, 0x2f, 0x84, 0x37, 0x1e, + 0x3c, 0xd9, 0xb8, 0xed, 0xca, 0xb2, 0x13, 0x40, + 0xe9, 0x6c, 0xf2, 0xf0, 0x5b, 0x26, 0x1e, 0x21, + 0xe8, 0xf4, 0x29, 0x62, 0x8a, 0x22, 0xc6, 0x3d, + 0xed, 0x7e, 0xf9, 0xf7, 0xb5, 0x81, 0xf4, 0x7a, + 0x51, 0x32, 0xd3, 0x09, 0x2c, 0xfc, 0x6c, 0x05, + 0xda, 0x3d, 0x7c, 0xa3, 0x32, 0x8c, 0x98, 0x71, + 0x4f, 0x13, 0x4b, 0x19, 0x26, 0x2c, 0xc0, 0x7a, + 0xbe, 0x29, 0xe7, 0x21, 0xe5, 0xdf, 0x18, 0x8d, + 0xd2, 0x63, 0xe4, 0xb6, 0x7b, 0x7c, 0x11, 0x70, + 0x83, 0x04, 0xaf, 0x76, 0x27, 0x3b, 0x1d, 0xc7, + 0xc0, 0x29, 0xa6, 0xb6, 0x1c, 0xa3, 0xcb, 0xad, + 0xc8, 0xa3, 0x7e, 0x4a, 0xd8, 0x26, 0x32, 0xdb, + 0x17, 0xb3, 0x9b, 0xee, 0xaa, 0x69, 0x04, 0x61, + 0xf3, 0x08, 0xdd, 0x62, 0x1f, 0xc0, 0x25, 0xce, + 0xd2, 0xa1, 0xc5, 0x06, 0x39, 0x22, 0x63, 0xa3, + 0x6b, 0xb1, 0xe6, 0xb1, 0xbf, 0x17, 0xc5, 0x30, + 0xcb, 0x4c, 0x5d, 0x68, 0xda, 0xc2, 0x44, 0x96, + 0xd1, 0xa0, 0x8c, 0xc8, 0xc9, 0x86, 0xd7, 0xb0, + 0x03, 0x4e, 0x81, 0x64, 0x19, 0x28, 0xc3, 0x2c, + 0xce, 0xc7, 0x87, 0xec, 0x8e, 0x2d, 0xd0, 0x5b, + 0x1b, 0x9c, 0x32, 0x6d, 0xce, 0x02, 0xd4, 0xc9, + 0xd1, 0x5a, 0x99, 0x3a, 0x2b, 0x53, 0x27, 0x45, + 0x6a, 0x64, 0xe8, 0xad, 0x4c, 0x9d, 0x15, 0x9a, + 0x29, 0x07, 0xfa, 0x4a, 0x73, 0x9d, 0x14, 0x83, + 0x15, 0xae, 0x03, 0x4d, 0xb3, 0x20, 0xfc, 0x12, + 0xe3, 0x1f, 0x5a, 0xc5, 0x4a, 0x72, 0x02, 0x0a, + 0xb7, 0x66, 0x7b, 0x9b, 0x11, 0xf2, 0x83, 0xe4, + 0x98, 0xd7, 0x51, 0xb6, 0x6c, 0x9f, 0x00, 0xc9, + 0x19, 0xbb, 0x50, 0x32, 0xd2, 0x0a, 0x87, 0x82, + 0x48, 0x7c, 0x91, 0x9b, 0x8c, 0xf7, 0x5a, 0x97, + 0x39, 0xd8, 0xdd, 0x26, 0x22, 0xc3, 0xa4, 0x8b, + 0x26, 0x35, 0xd4, 0x6d, 0x9b, 0x27, 0xc0, 0x32, + 0x46, 0x6e, 0xd5, 0x81, 0xf1, 0x3c, 0xf9, 0x43, + 0x29, 0x76, 0x13, 0x72, 0x4a, 0x96, 0x21, 0x03, + 0xb0, 0xc9, 0x62, 0x77, 0xa7, 0x89, 0x6a, 0x64, + 0xe8, 0xad, 0x4c, 0x9d, 0x15, 0xa9, 0x93, 0xa2, + 0xb5, 0x32, 0x74, 0x56, 0xa6, 0x4e, 0x8a, 0xd4, + 0xc9, 0xd1, 0x51, 0xfb, 0xb6, 0xf7, 0x6e, 0x52, + 0x31, 0xd1, 0xb5, 0xf8, 0xa9, 0xa4, 0xce, 0xee, + 0x2c, 0xc5, 0x59, 0xf0, 0xc6, 0x61, 0x69, 0xc5, + 0x34, 0x8f, 0x17, 0xde, 0xf2, 0x0e, 0x45, 0x16, + 0x32, 0xfc, 0xb3, 0xdb, 0x8c, 0x11, 0xc1, 0xd3, + 0xa1, 0x56, 0x4d, 0x1e, 0x3c, 0x6c, 0xa9, 0xc2, + 0xec, 0x5a, 0x0d, 0xf1, 0x68, 0xe6, 0x54, 0xe1, + 0xf1, 0xb6, 0x50, 0xe7, 0x86, 0xd9, 0xfa, 0x34, + 0xa7, 0x7a, 0xd4, 0xbe, 0x2c, 0xca, 0x79, 0x20, + 0xb5, 0xc0, 0x6b, 0x6d, 0x24, 0x7e, 0xbe, 0x33, + 0xda, 0x85, 0xe5, 0x8a, 0x13, 0x1c, 0xae, 0x8b, + 0x13, 0xef, 0x9f, 0x0b, 0x58, 0x38, 0x87, 0xf5, + 0x74, 0xe6, 0xb3, 0x0e, 0x10, 0xd6, 0x70, 0x74, + 0x70, 0x42, 0xa1, 0x91, 0x94, 0xcc, 0x25, 0xd1, + 0x9f, 0x26, 0x06, 0x93, 0x89, 0xc0, 0x7a, 0xd0, + 0x0c, 0x11, 0x36, 0x56, 0x47, 0xe5, 0xac, 0xe6, + 0xb0, 0x62, 0xfe, 0xad, 0xa1, 0x3e, 0xc5, 0xe2, + 0x68, 0xe1, 0x89, 0xf7, 0xfa, 0xba, 0x1a, 0x2d, + 0xda, 0x9d, 0x99, 0xee, 0x9b, 0xc6, 0x65, 0x69, + 0x91, 0xce, 0xd3, 0x6b, 0x7e, 0x2a, 0x4c, 0x70, + 0xc6, 0x21, 0x6b, 0x08, 0x2f, 0x23, 0x7c, 0xe7, + 0xf1, 0x58, 0xf3, 0x2a, 0xc6, 0x96, 0x83, 0x21, + 0x2d, 0x0c, 0x75, 0xb3, 0x83, 0x67, 0x1e, 0xdb, + 0x2a, 0x2c, 0xab, 0x1b, 0x98, 0xbb, 0x1b, 0xb0, + 0xdf, 0x39, 0x68, 0x22, 0xfe, 0xab, 0x85, 0x09, + 0x31, 0xd2, 0xca, 0x2d, 0x25, 0xa4, 0x8c, 0x0c, + 0x24, 0xe0, 0x36, 0xb8, 0xfc, 0x55, 0x31, 0xa9, + 0x6c, 0x39, 0x4c, 0xa6, 0xfc, 0x53, 0xe1, 0xe0, + 0x66, 0xfb, 0x39, 0x93, 0x9e, 0xd1, 0x4d, 0x24, + 0x61, 0xd9, 0xa4, 0x81, 0xb8, 0x4b, 0x7d, 0x04, + 0x27, 0x7e, 0x8e, 0x64, 0x33, 0xe2, 0x0d, 0x93, + 0x0d, 0xf0, 0x61, 0x19, 0xb3, 0xfa, 0x4a, 0xa2, + 0x19, 0x08, 0x64, 0x6b, 0xd8, 0x4b, 0xf1, 0x46, + 0x2e, 0x77, 0xee, 0xe3, 0xd2, 0x9f, 0x93, 0x8d, + 0x92, 0x38, 0xcc, 0xf6, 0x62, 0x95, 0xb8, 0xac, + 0x1b, 0x6f, 0xc5, 0x56, 0x3d, 0xb1, 0x88, 0x81, + 0x91, 0xbb, 0xd6, 0xe8, 0xd1, 0xb9, 0x07, 0xb4, + 0xce, 0xf0, 0x9f, 0xef, 0x1d, 0xdf, 0xb8, 0xf5, + 0x89, 0xa7, 0x09, 0x57, 0x7d, 0x2d, 0x33, 0xdd, + 0xf6, 0x9d, 0x10, 0xba, 0xd8, 0xa9, 0x3a, 0x90, + 0xb6, 0x2a, 0x4e, 0xa4, 0x2d, 0x8a, 0x93, 0xa9, + 0x0b, 0x62, 0xa4, 0xea, 0x42, 0xd8, 0xa9, 0x3a, + 0x90, 0xb6, 0x2a, 0x4e, 0xa4, 0x2d, 0x8a, 0x93, + 0xa9, 0x0b, 0x62, 0xa4, 0xea, 0x42, 0xd8, 0xa9, + 0x3a, 0x90, 0xb6, 0x2a, 0x4e, 0xa4, 0x2d, 0x8a, + 0x93, 0xa9, 0x0b, 0x62, 0xa4, 0xea, 0x42, 0xd8, + 0xa9, 0x3a, 0x90, 0xb6, 0x2a, 0x4e, 0xa4, 0x2d, + 0x8a, 0x93, 0xa9, 0x0b, 0x62, 0xa4, 0xea, 0x42, + 0xd8, 0xa9, 0x3a, 0x90, 0xb6, 0x2a, 0x4e, 0xa4, + 0x2d, 0x8a, 0x93, 0xa9, 0x0a, 0xf1, 0x41, 0x04, + 0x27, 0x95, 0x91, 0x80, 0xae, 0xe3, 0x73, 0xcb, + 0xba, 0x21, 0x84, 0xb7, 0x06, 0x06, 0x9c, 0xed, + 0x5c, 0x28, 0xfa, 0x0b, 0x85, 0x1f, 0x41, 0x70, + 0xa3, 0xe8, 0x2e, 0x14, 0x7d, 0x05, 0xc2, 0x8f, + 0xa0, 0xb8, 0x51, 0xf4, 0x17, 0x0a, 0x3e, 0x82, + 0xc7, 0xbd, 0xc0, 0x4d, 0xb1, 0x64, 0xf3, 0x26, + 0xb9, 0xed, 0x0c, 0x6b, 0xb8, 0x25, 0xd1, 0xe9, + 0x5c, 0x28, 0xfa, 0x08, 0x10, 0x1a, 0x41, 0x38, + 0x45, 0xa3, 0xe3, 0x58, 0x24, 0x01, 0x8f, 0xfb, + 0x2e, 0x8e, 0xc5, 0x0c, 0xab, 0x32, 0x77, 0xd1, + 0x8e, 0x2b, 0x5d, 0x70, 0xa3, 0xe8, 0x2e, 0x14, + 0x7d, 0x05, 0xc2, 0x8f, 0xa0, 0xb8, 0x51, 0xf4, + 0x17, 0x0a, 0x3e, 0x82, 0xe1, 0x47, 0xd0, 0x5c, + 0x28, 0xfa, 0x0b, 0x85, 0x1f, 0x41, 0x31, 0xc7, + 0x4b, 0x98, 0xd3, 0xb9, 0x4b, 0x24, 0x71, 0xd3, + 0xbc, 0xe4, 0x8b, 0x7c, 0xbb, 0xed, 0x6b, 0xfc, + 0x7d, 0x28, 0xc4, 0x61, 0xa0, 0x73, 0x31, 0x63, + 0xb1, 0x94, 0xff, 0x00, 0xec, 0x83, 0x3f, 0x43, + 0x24, 0x0c, 0x21, 0xe6, 0x4d, 0xf0, 0x1c, 0x89, + 0xe6, 0x43, 0x4a, 0x59, 0x2c, 0xc2, 0x67, 0x8c, + 0xa7, 0xaf, 0xf1, 0x2b, 0x2c, 0x05, 0x23, 0xc8, + 0x37, 0x68, 0x7c, 0xba, 0x39, 0x8a, 0x2f, 0x1e, + 0x2b, 0x17, 0xee, 0xb2, 0x5c, 0xdd, 0xa8, 0xbd, + 0xac, 0xa1, 0x6c, 0x87, 0x84, 0xe0, 0xfe, 0x17, + 0x6f, 0x72, 0x11, 0xb9, 0xf4, 0xd6, 0xc6, 0x64, + 0xbe, 0x54, 0x5e, 0xe6, 0xdf, 0x82, 0xc6, 0xe7, + 0xd3, 0x5e, 0xc0, 0x66, 0x94, 0x71, 0x0b, 0x28, + 0x8b, 0x60, 0xa0, 0x19, 0x30, 0x43, 0x7c, 0xa9, + 0xe3, 0xbf, 0xef, 0x7a, 0x50, 0x2d, 0x6d, 0x24, + 0x3e, 0x86, 0x4b, 0xf8, 0x94, 0x47, 0xe8, 0x6d, + 0x71, 0x6b, 0x58, 0x5e, 0x24, 0xce, 0x40, 0xb6, + 0x6d, 0x3e, 0x84, 0xf6, 0xbc, 0xd2, 0x6f, 0xa5, + 0x74, 0xb7, 0xca, 0xe8, 0x27, 0x4a, 0x64, 0x2e, + 0x8a, 0x89, 0xd8, 0x01, 0x01, 0xc6, 0x53, 0x7e, + 0xf5, 0x66, 0x3e, 0x9b, 0x58, 0xd9, 0x2f, 0x95, + 0x1a, 0x5b, 0x7b, 0x77, 0xac, 0x58, 0xa9, 0x0d, + 0xde, 0xe7, 0x90, 0x5e, 0x2d, 0x9f, 0x31, 0x1e, + 0xa4, 0x04, 0x62, 0x8e, 0x26, 0x0c, 0x5b, 0xd6, + 0xc9, 0x9b, 0x38, 0xb5, 0xf4, 0xa6, 0xbd, 0xb2, + 0x53, 0xe2, 0x69, 0xb8, 0xf2, 0x81, 0x18, 0xda, + 0xda, 0x28, 0x5a, 0xe3, 0x77, 0x64, 0xe4, 0xd3, + 0xda, 0xa1, 0x22, 0x5a, 0x76, 0x64, 0x80, 0x0d, + 0xc3, 0x2a, 0x61, 0xc9, 0x50, 0x63, 0x65, 0xf0, + 0x3b, 0x29, 0xc1, 0xb9, 0x27, 0x96, 0xdc, 0x69, + 0xed, 0x79, 0xa4, 0xa8, 0x6b, 0x9d, 0x8e, 0xd2, + 0xc9, 0xc7, 0xca, 0xaa, 0x5d, 0x39, 0x8c, 0x97, + 0x3d, 0xb6, 0xc9, 0x1c, 0xc0, 0x6e, 0x41, 0xed, + 0x33, 0xbc, 0x27, 0xfb, 0xc7, 0x77, 0xee, 0x3d, + 0x37, 0x1b, 0x72, 0x93, 0x38, 0x5f, 0x09, 0xd0, + 0xd5, 0xa8, 0x83, 0xa0, 0xb5, 0x10, 0x74, 0x16, + 0xa2, 0x0e, 0x82, 0xd4, 0x41, 0xd0, 0x5a, 0x88, + 0x3a, 0x0b, 0x51, 0x07, 0x41, 0x6a, 0x20, 0xe8, + 0x2d, 0x44, 0x1d, 0x05, 0xa8, 0x83, 0xa0, 0xb5, + 0x10, 0x74, 0x16, 0xa2, 0x0e, 0x82, 0xd4, 0x41, + 0xd0, 0x5a, 0x88, 0x3a, 0x0b, 0x51, 0x07, 0x41, + 0x6a, 0x20, 0xe8, 0x2d, 0x44, 0x1d, 0x05, 0xa8, + 0x83, 0xa0, 0xb5, 0x10, 0x74, 0x16, 0xa2, 0x0e, + 0x82, 0xd4, 0x41, 0xd0, 0x5a, 0x88, 0x3a, 0x0b, + 0x26, 0x58, 0xd8, 0x65, 0x3c, 0x17, 0x37, 0x42, + 0x20, 0xe9, 0x1b, 0x9f, 0xc3, 0x6f, 0xea, 0x29, + 0xdb, 0x21, 0xbb, 0x44, 0xf8, 0x47, 0xa0, 0x58, + 0x2f, 0x09, 0xe5, 0x06, 0x50, 0x36, 0x60, 0x43, + 0x0f, 0xb5, 0x6b, 0x73, 0x26, 0x08, 0xc1, 0x38, + 0x89, 0x25, 0xe4, 0xf0, 0x7f, 0x73, 0xe0, 0xa2, + 0xc8, 0xdf, 0x2a, 0x67, 0x73, 0x45, 0xb4, 0xe7, + 0x68, 0x0a, 0x18, 0xf1, 0x65, 0x65, 0xa6, 0x82, + 0x43, 0x8b, 0x4e, 0xfe, 0xc4, 0xf6, 0x29, 0x18, + 0x5e, 0xe7, 0xb1, 0xc7, 0x13, 0xb1, 0x67, 0xfd, + 0x4c, 0x5e, 0xed, 0xbd, 0xdb, 0x94, 0x3e, 0xef, + 0xe7, 0xba, 0xc1, 0x8b, 0x16, 0x28, 0xda, 0xfe, + 0x71, 0x75, 0x2c, 0x11, 0x54, 0x99, 0x2a, 0x23, + 0xbe, 0xf1, 0xd1, 0xe1, 0xbd, 0xb9, 0x33, 0xa6, + 0x4b, 0x51, 0x51, 0x90, 0x12, 0x70, 0x00, 0x66, + 0x22, 0x7d, 0x29, 0xb4, 0xae, 0x90, 0x0c, 0x64, + 0x61, 0x78, 0xce, 0x0d, 0xf4, 0x2a, 0x87, 0x38, + 0xe0, 0xc9, 0x0e, 0x4d, 0x26, 0xf6, 0xb2, 0x82, + 0x09, 0x5a, 0xf8, 0x0c, 0xae, 0x00, 0x17, 0xb5, + 0x32, 0x33, 0x0b, 0xcb, 0xde, 0xdc, 0x40, 0x06, + 0x9c, 0xe9, 0xcd, 0x11, 0x3c, 0xb9, 0x9c, 0x20, + 0x1b, 0xa1, 0x18, 0xdb, 0x0b, 0xdc, 0xf1, 0xa5, + 0xa1, 0xb9, 0xd0, 0x89, 0xce, 0xc9, 0x8b, 0x12, + 0x4d, 0xaf, 0x6b, 0x0b, 0xa7, 0x4d, 0x4f, 0x39, + 0x95, 0xac, 0x20, 0x38, 0x39, 0x98, 0x48, 0xbf, + 0xc5, 0x35, 0xce, 0x89, 0xed, 0x0f, 0xe0, 0x92, + 0xdd, 0x2b, 0x7d, 0x04, 0x8d, 0xf5, 0xb4, 0xa9, + 0xa5, 0x37, 0x68, 0x63, 0x31, 0x8c, 0xdc, 0x2d, + 0xf0, 0x1f, 0x34, 0xcc, 0x50, 0xc8, 0x31, 0xf0, + 0x6e, 0xde, 0x17, 0xa9, 0x4b, 0x1e, 0x45, 0xee, + 0x31, 0xf0, 0xb0, 0xb4, 0xa1, 0x21, 0x8d, 0xc2, + 0x33, 0xf5, 0xad, 0x9b, 0x76, 0xab, 0xde, 0x37, + 0x72, 0x0f, 0x69, 0x9d, 0xe1, 0x3f, 0xde, 0x3b, + 0xbf, 0x71, 0xea, 0xa1, 0xbc, 0x84, 0x77, 0x2d, + 0x2b, 0x4a, 0xd2, 0x9f, 0x53, 0x2d, 0x57, 0x8b, + 0xb1, 0xaf, 0xc1, 0x9d, 0x97, 0x51, 0xc8, 0x24, + 0x6c, 0xd0, 0x49, 0xc1, 0x91, 0x8a, 0x31, 0x90, + 0x92, 0xf2, 0x70, 0x6e, 0xd3, 0x9d, 0x1a, 0x72, + 0xd7, 0x39, 0xff, 0x00, 0x56, 0xcd, 0xe1, 0x7a, + 0x96, 0x19, 0x1a, 0xe8, 0xdd, 0xc8, 0xe1, 0x65, + 0x15, 0x4c, 0xd5, 0xa2, 0x9c, 0x48, 0x48, 0x00, + 0xb2, 0xeb, 0x03, 0x7c, 0xb8, 0x2c, 0xca, 0x07, + 0x46, 0x2f, 0xbd, 0xe5, 0x59, 0x31, 0x0c, 0x86, + 0x4d, 0x38, 0x70, 0x9b, 0xa7, 0x44, 0xd6, 0xb8, + 0x16, 0x8b, 0xba, 0xe3, 0x42, 0x78, 0x10, 0xc8, + 0x4b, 0x38, 0x56, 0x69, 0xde, 0xfa, 0xd5, 0xa2, + 0x63, 0xe4, 0x3c, 0x8c, 0x17, 0x53, 0x39, 0x8c, + 0x77, 0x92, 0x1f, 0x67, 0x49, 0xe4, 0x50, 0x61, + 0x6c, 0xcd, 0x2e, 0x6d, 0xce, 0x54, 0x69, 0x3e, + 0x8f, 0x42, 0x68, 0x7c, 0x32, 0x34, 0xbf, 0x82, + 0x0b, 0x4e, 0x74, 0x5c, 0xe8, 0xa4, 0x6b, 0x5a, + 0x6c, 0x49, 0x6e, 0x82, 0xb4, 0xad, 0x2b, 0x4a, + 0x66, 0x7e, 0x35, 0x2f, 0xaf, 0x70, 0x39, 0x90, + 0xc8, 0xf6, 0xe4, 0xdb, 0x9d, 0xad, 0x25, 0x6c, + 0xd3, 0x74, 0x0a, 0xd9, 0xa6, 0xe8, 0x15, 0xb3, + 0x4d, 0xd0, 0x2b, 0x66, 0x9b, 0xa0, 0x56, 0xcd, + 0x37, 0x40, 0xad, 0x9a, 0x6e, 0x81, 0x5b, 0x34, + 0xdd, 0x02, 0xbc, 0x5f, 0xfb, 0x37, 0x37, 0xda, + 0xc9, 0xbe, 0xf7, 0xe5, 0xd2, 0xb6, 0x57, 0xc6, + 0xe2, 0xe0, 0xf7, 0x3d, 0x91, 0x90, 0x5c, 0x79, + 0x4a, 0xc3, 0x90, 0x9e, 0xda, 0x6d, 0x80, 0xa6, + 0xb5, 0xb4, 0x4e, 0x78, 0x0e, 0x2e, 0xdf, 0x46, + 0xee, 0x31, 0x65, 0x1c, 0xb0, 0xd0, 0x9a, 0x67, + 0xb3, 0x46, 0x4e, 0x37, 0x7c, 0xd1, 0x8d, 0xb4, + 0x39, 0x06, 0xb8, 0xdd, 0xd9, 0x28, 0x88, 0xc4, + 0xb6, 0x69, 0xba, 0x05, 0x6c, 0xd3, 0x74, 0x0a, + 0xd9, 0xa6, 0xe8, 0x15, 0xb3, 0x4d, 0xd0, 0x2b, + 0x66, 0x9b, 0xa0, 0x56, 0xcd, 0x37, 0x40, 0xad, + 0x9a, 0x6e, 0x81, 0x5b, 0x34, 0xdd, 0x02, 0xa3, + 0x07, 0xfc, 0x36, 0xf7, 0x6e, 0x50, 0xfb, 0xaf, + 0x9e, 0xec, 0x33, 0xb6, 0x17, 0x98, 0x45, 0x3c, + 0x7b, 0xf0, 0x33, 0x70, 0x54, 0xf5, 0x92, 0xb0, + 0xc7, 0x4e, 0xc7, 0x39, 0xf8, 0x9d, 0xf5, 0xb9, + 0x00, 0x54, 0x8e, 0xa7, 0x6e, 0x50, 0xc6, 0xcc, + 0x9b, 0xda, 0x34, 0xb7, 0x39, 0x3f, 0x35, 0x18, + 0x63, 0xae, 0x61, 0x8d, 0xac, 0xc4, 0xde, 0x50, + 0x15, 0x2b, 0xee, 0x03, 0x6a, 0xa6, 0x15, 0x07, + 0xd1, 0xc9, 0xf7, 0x8b, 0x95, 0x0c, 0x75, 0x37, + 0x12, 0x9a, 0xc0, 0xe6, 0x87, 0x69, 0xb7, 0x19, + 0x45, 0xe1, 0x8e, 0x94, 0x9a, 0x48, 0xf0, 0x46, + 0x09, 0x18, 0xf3, 0x34, 0x1d, 0x1c, 0x89, 0xd9, + 0x01, 0x69, 0x0e, 0x45, 0xc7, 0x26, 0x78, 0x83, + 0x48, 0xd3, 0xc8, 0x0a, 0xf0, 0x8c, 0x61, 0x92, + 0x4b, 0x26, 0x59, 0xae, 0xc3, 0x03, 0xb0, 0x92, + 0x2c, 0x7d, 0x0a, 0x47, 0x96, 0x71, 0x49, 0x76, + 0xe2, 0xbf, 0xd4, 0x3c, 0x61, 0x35, 0xd1, 0x42, + 0xd8, 0x63, 0x12, 0x8c, 0xbb, 0x1b, 0x73, 0x7f, + 0xb2, 0x73, 0xfc, 0x51, 0x73, 0xa3, 0x90, 0x47, + 0x25, 0x43, 0x4b, 0x65, 0x96, 0x50, 0x59, 0xa7, + 0x31, 0x6e, 0x64, 0xd8, 0xa7, 0xbe, 0x55, 0xce, + 0x99, 0xad, 0x6b, 0xb4, 0xe7, 0x8f, 0xf1, 0x59, + 0x39, 0x37, 0x87, 0x21, 0x9e, 0xfc, 0x5e, 0x58, + 0x2a, 0xd1, 0x92, 0x23, 0x0c, 0xad, 0x70, 0x73, + 0x9c, 0x5c, 0xe7, 0x0c, 0xe3, 0x12, 0x69, 0x86, + 0xe0, 0x36, 0xa9, 0xf2, 0x3c, 0x8e, 0x20, 0x6d, + 0x67, 0x1f, 0x45, 0x95, 0x28, 0x61, 0xf2, 0x58, + 0x1c, 0x5a, 0x3f, 0x88, 0xed, 0xda, 0xaf, 0x78, + 0xdd, 0xc8, 0x3d, 0xa6, 0x77, 0x84, 0xff, 0x00, + 0x78, 0xee, 0xfd, 0xc7, 0xaa, 0x93, 0xe9, 0x1d, + 0xdf, 0x42, 0x76, 0x8b, 0x93, 0xe3, 0x1f, 0x20, + 0xa8, 0x29, 0xce, 0xf2, 0x67, 0xd5, 0x63, 0x66, + 0x31, 0xa0, 0x2a, 0xbf, 0x2f, 0x3c, 0xcf, 0x65, + 0x43, 0x37, 0xcf, 0x16, 0x00, 0xe2, 0x00, 0xe1, + 0x55, 0xf2, 0xf8, 0xc3, 0xa2, 0x6c, 0x4c, 0x39, + 0xed, 0x88, 0x86, 0xfe, 0xea, 0xf0, 0x63, 0xc1, + 0x91, 0xfb, 0xd7, 0x6f, 0xe5, 0xe1, 0x11, 0x9b, + 0x4a, 0xa1, 0x15, 0x8d, 0x99, 0xc3, 0x13, 0xed, + 0x92, 0xf5, 0xa9, 0x1f, 0x1c, 0x79, 0x38, 0x61, + 0xa4, 0x2c, 0x8d, 0xa7, 0x90, 0x29, 0x67, 0x64, + 0xaf, 0xf1, 0x97, 0xcf, 0x69, 0x24, 0x07, 0x7d, + 0x6b, 0x28, 0x9c, 0x49, 0x13, 0x3e, 0x86, 0xf2, + 0x5b, 0x8d, 0xcb, 0xc1, 0xaf, 0x2f, 0xaa, 0xc6, + 0xe7, 0xb9, 0xc7, 0x21, 0x9f, 0x1b, 0xaf, 0xf5, + 0x95, 0x54, 0xb4, 0x62, 0x4a, 0x77, 0xbe, 0xaf, + 0x7d, 0xc4, 0xe0, 0x39, 0x17, 0x85, 0x9d, 0x3d, + 0xe2, 0x9c, 0xc4, 0xd7, 0x59, 0x86, 0xdf, 0x15, + 0xe0, 0x4c, 0x79, 0xf0, 0xd3, 0xf1, 0xf2, 0xd9, + 0x54, 0xf8, 0xe3, 0x9c, 0xfc, 0x35, 0x11, 0x96, + 0x63, 0xe2, 0x76, 0x2c, 0xf6, 0x5e, 0x1b, 0x89, + 0xee, 0x26, 0x11, 0x0b, 0xb0, 0xb3, 0x88, 0x7d, + 0x06, 0x7a, 0xd4, 0xbe, 0xbd, 0xc0, 0xc8, 0xa7, + 0x73, 0x19, 0x93, 0x69, 0xb0, 0x5b, 0x5c, 0x8b, + 0x6b, 0x91, 0x6d, 0x72, 0x2d, 0xae, 0x45, 0xb5, + 0xc8, 0xb6, 0xb9, 0x16, 0xd7, 0x22, 0x0e, 0x15, + 0xd9, 0x3c, 0x4e, 0xc0, 0xcc, 0x6e, 0xb6, 0x33, + 0xc8, 0x15, 0x8d, 0x54, 0x97, 0x58, 0x19, 0x56, + 0xed, 0x17, 0x25, 0xc6, 0xc0, 0x0e, 0x54, 0xd9, + 0x05, 0x7e, 0x5a, 0x32, 0x6d, 0x8e, 0x37, 0x66, + 0xbf, 0x22, 0x85, 0xef, 0xab, 0x75, 0xa5, 0x6e, + 0x21, 0x63, 0xfd, 0x7a, 0x17, 0x8a, 0xba, 0xac, + 0xe3, 0xb5, 0xef, 0x7c, 0xc7, 0x35, 0xd6, 0xd7, + 0x22, 0xda, 0xe4, 0x5b, 0x5c, 0x8b, 0x6b, 0x91, + 0x6d, 0x72, 0x2d, 0xae, 0x45, 0xb5, 0xc8, 0xb6, + 0xb9, 0x14, 0x64, 0xe7, 0x26, 0x36, 0xee, 0x51, + 0xe3, 0xac, 0x8e, 0x9c, 0x88, 0xf4, 0x3f, 0x8d, + 0x79, 0xd2, 0x9f, 0x98, 0xaf, 0x3a, 0x53, 0xf3, + 0x15, 0xe7, 0x4a, 0x7e, 0x62, 0xbc, 0xe9, 0x4f, + 0xcc, 0x57, 0x9d, 0x29, 0xf9, 0x8a, 0xf3, 0xa5, + 0x3f, 0x31, 0x5e, 0x74, 0xa7, 0xe6, 0x2b, 0xce, + 0x94, 0xfc, 0xc5, 0x79, 0xd2, 0x9f, 0x98, 0xa7, + 0x5e, 0xba, 0x8e, 0x60, 0x78, 0xa4, 0x69, 0x4f, + 0x91, 0xfe, 0x15, 0xa7, 0x2f, 0x71, 0xb9, 0xcc, + 0x57, 0x9d, 0x29, 0xf9, 0x8a, 0xf3, 0xa5, 0x3f, + 0x31, 0x4d, 0x70, 0xf0, 0x9d, 0x31, 0xb1, 0xbe, + 0x76, 0x92, 0x9a, 0xcf, 0xed, 0x0a, 0x48, 0x98, + 0xd2, 0x4e, 0x18, 0xda, 0xed, 0x2b, 0xce, 0x94, + 0xfc, 0xc5, 0x79, 0xd2, 0x9f, 0x98, 0xaf, 0x3a, + 0x53, 0xf3, 0x15, 0xe7, 0x4a, 0x7e, 0x62, 0xbc, + 0xe9, 0x4f, 0xcc, 0x57, 0x9d, 0x29, 0xf9, 0x8a, + 0xaa, 0x6c, 0x75, 0x2c, 0xa8, 0xbb, 0xdb, 0xc0, + 0xe2, 0xdc, 0x83, 0xda, 0x67, 0x78, 0x4f, 0xf7, + 0x8e, 0xef, 0xdc, 0x7a, 0x33, 0x69, 0x6c, 0xa0, + 0x38, 0x1f, 0xa0, 0x59, 0x0c, 0x98, 0x1a, 0x4d, + 0xf4, 0x04, 0x25, 0x7c, 0x8e, 0x32, 0x0d, 0x07, + 0x91, 0x38, 0xe5, 0x8d, 0xc8, 0xb1, 0x42, 0x5c, + 0xa9, 0xca, 0x5b, 0x0d, 0xec, 0x34, 0x2c, 0x9c, + 0x92, 0x17, 0xb3, 0x16, 0x2b, 0x1e, 0x54, 0xc8, + 0x49, 0xf2, 0x6c, 0xe0, 0x8b, 0x27, 0x18, 0xce, + 0x12, 0xe1, 0x84, 0xe6, 0xe2, 0x44, 0xc2, 0xf2, + 0xcb, 0xe9, 0x5e, 0x30, 0x24, 0x39, 0x6f, 0xb4, + 0x9f, 0x86, 0x62, 0x31, 0x9b, 0x94, 0xe3, 0x14, + 0x85, 0xa5, 0xda, 0x78, 0xee, 0x9f, 0x2b, 0x64, + 0x22, 0x47, 0xf0, 0x8e, 0x9b, 0xa8, 0xcb, 0x9e, + 0x6f, 0x18, 0xb3, 0x08, 0xcd, 0x64, 0xcc, 0x72, + 0x97, 0x60, 0x37, 0x1e, 0xb5, 0x33, 0xf1, 0x6f, + 0xa5, 0x16, 0x79, 0xb6, 0x9f, 0xa0, 0xc6, 0x81, + 0xc6, 0xa4, 0x70, 0xd0, 0x4e, 0xe7, 0xf0, 0xdb, + 0xfa, 0x8f, 0x1c, 0x78, 0x2e, 0x0c, 0x77, 0x93, + 0x67, 0xda, 0x77, 0xe0, 0x15, 0xa4, 0x91, 0xbe, + 0x34, 0x71, 0x64, 0x9c, 0x7f, 0xbb, 0xe5, 0xbf, + 0xaf, 0x3a, 0xad, 0x89, 0x99, 0xe5, 0x7c, 0x5b, + 0xd1, 0xcb, 0x67, 0x02, 0x42, 0x87, 0x10, 0xc0, + 0xc9, 0x24, 0xc0, 0x2f, 0xda, 0x55, 0x49, 0x86, + 0x47, 0xbc, 0xb1, 0xf9, 0x50, 0xd7, 0x33, 0x0e, + 0x16, 0xf0, 0x79, 0x7d, 0x9e, 0x65, 0x50, 0x3f, + 0xbd, 0xa6, 0x7c, 0x84, 0x7a, 0x58, 0x6f, 0xdc, + 0x7b, 0xff, 0x00, 0x53, 0x17, 0xbb, 0x6f, 0x76, + 0xe5, 0x1f, 0xb9, 0xf9, 0x9d, 0xd7, 0x18, 0x27, + 0xf1, 0x87, 0x31, 0xc1, 0x8e, 0x0d, 0x6f, 0x19, + 0xe4, 0xe5, 0x58, 0xb0, 0x9c, 0x37, 0xb5, 0xd4, + 0xf2, 0x63, 0xc3, 0x93, 0x19, 0x85, 0xb8, 0x59, + 0x89, 0xee, 0x05, 0x63, 0x11, 0x3c, 0xb2, 0xd7, + 0xc5, 0x87, 0x35, 0x91, 0x94, 0x44, 0xf3, 0x18, + 0xd2, 0xfc, 0x39, 0x96, 0x4a, 0x26, 0xba, 0x73, + 0x81, 0xaf, 0xde, 0x37, 0x94, 0x03, 0xf3, 0x4e, + 0xc1, 0x13, 0xdf, 0x87, 0x31, 0xb3, 0x74, 0x26, + 0xc2, 0x37, 0xae, 0x3f, 0x6b, 0x8b, 0x95, 0x17, + 0xc1, 0x52, 0x26, 0xc2, 0x6c, 0x5a, 0x5b, 0x84, + 0xfc, 0x39, 0x50, 0x6b, 0xa1, 0x91, 0xae, 0x22, + 0xf6, 0x2d, 0x3a, 0x13, 0xb1, 0x41, 0x23, 0x70, + 0x70, 0xae, 0xc3, 0x99, 0x65, 0x1d, 0x0b, 0xc3, + 0x3e, 0xd1, 0x6e, 0x64, 0x25, 0x31, 0x3c, 0x46, + 0x74, 0x3f, 0x0e, 0x65, 0x83, 0xc5, 0xe5, 0xc5, + 0xa7, 0x0e, 0x03, 0x74, 0x2a, 0x30, 0x1c, 0x99, + 0x76, 0x1b, 0xd9, 0x06, 0xba, 0x09, 0x1a, 0xe2, + 0x2e, 0x01, 0x69, 0xd0, 0x9c, 0xf3, 0x0c, 0x81, + 0xad, 0x36, 0x2e, 0x2d, 0x36, 0x1b, 0xb5, 0x9e, + 0xdb, 0x3e, 0x7b, 0x90, 0x7b, 0x4c, 0xef, 0x09, + 0xfe, 0xf1, 0xdd, 0xfb, 0x8f, 0x52, 0x49, 0x81, + 0xb2, 0x5a, 0x40, 0x30, 0xbd, 0x6c, 0x51, 0x74, + 0x8a, 0xd8, 0x62, 0xe9, 0x15, 0xb0, 0xc5, 0xd2, + 0x2b, 0x61, 0x8b, 0xa4, 0x56, 0x16, 0x78, 0x3d, + 0x8f, 0x77, 0x20, 0x25, 0x6c, 0x31, 0x74, 0x8a, + 0x26, 0x1f, 0x05, 0x65, 0x40, 0xe3, 0x66, 0x22, + 0xb0, 0xcb, 0xe0, 0xd6, 0xc4, 0xee, 0x47, 0xe2, + 0x0b, 0x61, 0x8b, 0xa4, 0x56, 0xc3, 0x17, 0x48, + 0xad, 0x86, 0x2e, 0x91, 0x5b, 0x0c, 0x5d, 0x22, + 0xb1, 0xff, 0x00, 0x67, 0xc7, 0x86, 0xf6, 0xc5, + 0x73, 0x65, 0xb0, 0xc5, 0xd2, 0x2b, 0x61, 0x8b, + 0xa4, 0x56, 0xc3, 0x17, 0x48, 0xad, 0x86, 0x2e, + 0x91, 0x5b, 0x0c, 0x5d, 0x22, 0xb6, 0x18, 0xba, + 0x45, 0x6c, 0x31, 0x74, 0x8a, 0xd8, 0x62, 0xe9, + 0x15, 0x92, 0x11, 0x47, 0x0c, 0x78, 0x1c, 0x77, + 0x83, 0x39, 0xdd, 0x12, 0x43, 0x01, 0x7b, 0x32, + 0x6d, 0x17, 0xb8, 0x5b, 0x2b, 0xb9, 0xc2, 0xd9, + 0x5d, 0xce, 0x16, 0xca, 0xee, 0x70, 0xb6, 0x57, + 0x73, 0x85, 0xb2, 0xbb, 0x9c, 0x2d, 0x95, 0xdc, + 0xe1, 0x6c, 0xae, 0xe7, 0x0b, 0x0c, 0x4d, 0x9e, + 0x36, 0xf2, 0x32, 0x5b, 0x7c, 0xd1, 0x26, 0x99, + 0xc4, 0x9e, 0x32, 0xe0, 0x81, 0x6d, 0x33, 0x81, + 0x1c, 0x61, 0xc1, 0x65, 0x1d, 0x1c, 0xce, 0x7e, + 0x8c, 0x46, 0x4c, 0xfd, 0xe8, 0xe1, 0xa7, 0x78, + 0xb8, 0xb1, 0xb3, 0x82, 0x32, 0x64, 0x64, 0xc6, + 0x74, 0xbb, 0x1e, 0x73, 0xda, 0xb6, 0x57, 0x73, + 0x85, 0xb2, 0xbb, 0x9c, 0x2d, 0x95, 0xdc, 0xe1, + 0x6c, 0xae, 0xe7, 0x0b, 0x65, 0x77, 0x38, 0x5b, + 0x2b, 0xb9, 0xc2, 0xd9, 0x5d, 0xce, 0x16, 0xca, + 0xee, 0x70, 0xa3, 0x69, 0xcc, 0x44, 0x6d, 0xdc, + 0xa3, 0x3c, 0x59, 0x2f, 0x9e, 0xe7, 0x22, 0x74, + 0x53, 0xe1, 0x8a, 0x36, 0xc8, 0xdc, 0x94, 0xad, + 0xfa, 0xfe, 0x9c, 0xda, 0x73, 0x26, 0x16, 0x12, + 0xdc, 0x24, 0x8c, 0x27, 0xeb, 0x7e, 0xff, 0x00, + 0xac, 0xaa, 0x21, 0x2b, 0x24, 0x73, 0xf5, 0xc7, + 0x03, 0x80, 0x19, 0xf3, 0x67, 0xcd, 0xc8, 0x3b, + 0x55, 0x15, 0x3d, 0xee, 0xd6, 0xc5, 0x28, 0xf5, + 0xe7, 0x7a, 0xa7, 0x01, 0x99, 0x46, 0x3e, 0x17, + 0x8c, 0xa3, 0x9c, 0x73, 0x13, 0x8b, 0x7a, 0x02, + 0x92, 0x28, 0x01, 0x33, 0x5a, 0x02, 0x5a, 0xdd, + 0x36, 0xc9, 0xaa, 0x67, 0x53, 0xba, 0xed, 0x65, + 0x49, 0xca, 0xb9, 0xa7, 0x35, 0xf7, 0xb9, 0xcf, + 0x6a, 0x95, 0xaf, 0x70, 0x60, 0x93, 0x29, 0x1e, + 0x23, 0xc5, 0x70, 0x42, 0x86, 0x5a, 0xab, 0x40, + 0x04, 0x8d, 0xb0, 0x7f, 0xd6, 0xfc, 0x96, 0x19, + 0xf1, 0x36, 0x7f, 0x2c, 0xf6, 0xe2, 0xd3, 0xab, + 0x39, 0xd5, 0x1b, 0x49, 0x36, 0xf1, 0x39, 0xbf, + 0xe7, 0xf8, 0x29, 0x65, 0x7e, 0xcf, 0xe2, 0x6c, + 0x6d, 0xf8, 0xaf, 0x85, 0xb6, 0x1c, 0xea, 0x76, + 0x08, 0xcb, 0x9a, 0x69, 0x9b, 0x86, 0x57, 0x38, + 0x92, 0xfe, 0x09, 0xcd, 0xc5, 0x60, 0xbc, 0x24, + 0xe0, 0xd3, 0x3b, 0x85, 0x46, 0x1c, 0x05, 0xe4, + 0x34, 0x0c, 0xfb, 0xe3, 0x65, 0x1c, 0x8e, 0x16, + 0x89, 0xb5, 0xce, 0x71, 0x77, 0x10, 0xb8, 0x6d, + 0x8a, 0xc3, 0x3e, 0x26, 0xcf, 0xe5, 0x9e, 0xdc, + 0x5a, 0x75, 0x67, 0x3a, 0xc4, 0xf6, 0xbe, 0x30, + 0xc8, 0x5d, 0x86, 0xa1, 0x8f, 0xde, 0x9d, 0x3b, + 0xd7, 0x6e, 0xd5, 0x9e, 0x23, 0x23, 0x46, 0xe4, + 0x1e, 0xd3, 0x3b, 0xc2, 0x7f, 0xbc, 0x77, 0x7e, + 0xe3, 0xd4, 0xde, 0xf1, 0xbf, 0x45, 0x93, 0xb2, + 0x27, 0xbf, 0x2a, 0xec, 0x18, 0x83, 0x6e, 0x1a, + 0xde, 0x3f, 0xeb, 0xd6, 0x9d, 0x50, 0xf8, 0x88, + 0x7c, 0x77, 0x85, 0xcc, 0x37, 0xe1, 0xf2, 0xa8, + 0x85, 0xcd, 0xb3, 0xf7, 0x28, 0xbc, 0x61, 0xad, + 0x39, 0x59, 0x32, 0x61, 0xef, 0x7b, 0xaf, 0xfe, + 0x90, 0x3d, 0x7c, 0x6a, 0x16, 0x3e, 0x1c, 0x4e, + 0x74, 0x12, 0x48, 0xe7, 0xe2, 0x37, 0xde, 0x97, + 0x7f, 0xea, 0x9d, 0x39, 0x80, 0x5b, 0xc5, 0xb2, + 0x99, 0x3c, 0x46, 0xc1, 0xd9, 0x4c, 0x2b, 0xc6, + 0x19, 0x0b, 0x1d, 0x8c, 0x32, 0xd1, 0x3e, 0x5c, + 0x2d, 0x6d, 0xef, 0x7c, 0xf7, 0xf4, 0x23, 0x81, + 0xa1, 0xee, 0x74, 0xae, 0x6b, 0x5f, 0x8e, 0xf6, + 0x16, 0x69, 0xf9, 0xaa, 0x38, 0xde, 0x2e, 0xc7, + 0xd6, 0x58, 0x8f, 0x80, 0x42, 0x43, 0x06, 0x16, + 0xb7, 0x2a, 0x08, 0x0e, 0x39, 0xec, 0xcb, 0x8f, + 0x8a, 0x7d, 0x4b, 0x62, 0xc9, 0xbb, 0x25, 0xc1, + 0x04, 0xd8, 0x10, 0xf6, 0x8b, 0xf3, 0x15, 0x51, + 0xe4, 0x81, 0x06, 0x91, 0x8f, 0x37, 0x27, 0x8c, + 0xb6, 0xfd, 0xeb, 0x1c, 0x31, 0x37, 0x25, 0x8a, + 0xcd, 0x9a, 0x39, 0x31, 0x5c, 0x7a, 0x79, 0x0f, + 0xd1, 0xfe, 0x1b, 0xb7, 0x40, 0x6c, 0x8e, 0x68, + 0xc9, 0xb7, 0x30, 0x2a, 0x95, 0x8c, 0xab, 0x32, + 0x3a, 0x7c, 0xd9, 0x9c, 0x6c, 0x0d, 0xed, 0xa5, + 0x43, 0x90, 0xac, 0x92, 0x66, 0x49, 0x26, 0x4a, + 0xf9, 0xc5, 0x8a, 0x96, 0x71, 0x58, 0xe3, 0x85, + 0xd6, 0x0c, 0xb9, 0xbd, 0xb9, 0x7d, 0x09, 0xdf, + 0xa6, 0x3c, 0xce, 0xd6, 0x09, 0x1d, 0x16, 0x7d, + 0x1e, 0xbf, 0x8a, 0x77, 0xe9, 0x8f, 0x33, 0xb5, + 0x82, 0x47, 0x45, 0x9f, 0x47, 0xaf, 0xe2, 0x84, + 0xf3, 0x57, 0x4d, 0x15, 0xde, 0x58, 0x03, 0x5b, + 0x8b, 0x88, 0x7a, 0x7d, 0x2a, 0x59, 0xa0, 0x9a, + 0x69, 0x69, 0xe3, 0x20, 0x63, 0x37, 0x0a, 0x46, + 0x97, 0xcc, 0x58, 0x1e, 0x58, 0x24, 0xce, 0x03, + 0xac, 0x83, 0x5d, 0xe3, 0x01, 0xc4, 0x5e, 0xc6, + 0xfa, 0x13, 0x89, 0x15, 0x00, 0x37, 0x49, 0xdf, + 0x66, 0x46, 0x40, 0x67, 0x31, 0x8d, 0x2f, 0x17, + 0xb0, 0x4d, 0x12, 0xbe, 0x56, 0x97, 0x34, 0x38, + 0x5c, 0x94, 0xda, 0x3f, 0x1a, 0x7b, 0x81, 0x23, + 0xca, 0x67, 0xd1, 0xc6, 0x7b, 0xd4, 0xf4, 0xfe, + 0x36, 0xf6, 0xe4, 0x89, 0x18, 0xae, 0x73, 0x9b, + 0xd8, 0x73, 0xa9, 0x1f, 0x25, 0x53, 0xe1, 0x86, + 0x3e, 0x13, 0xae, 0x4f, 0xc2, 0xc9, 0x86, 0x3a, + 0xc7, 0x4c, 0xc7, 0x8c, 0xc6, 0xe4, 0x11, 0xeb, + 0x0b, 0x14, 0xb5, 0x92, 0xc5, 0xe4, 0x8c, 0xa4, + 0x0d, 0xf6, 0x6b, 0xd8, 0x71, 0xa6, 0x18, 0x2b, + 0x64, 0x91, 0xaf, 0xbb, 0x5b, 0x7b, 0x83, 0x88, + 0x71, 0x69, 0x54, 0xf5, 0x3e, 0x32, 0xf7, 0x09, + 0x6f, 0x76, 0xdc, 0xef, 0x73, 0xa2, 0x0d, 0x5b, + 0xee, 0x29, 0xf2, 0xe7, 0x4f, 0x2d, 0xb0, 0xe9, + 0x51, 0x8f, 0x18, 0x91, 0xd8, 0xe3, 0x6b, 0xf4, + 0xf2, 0xa8, 0xbd, 0xdb, 0x7b, 0xb7, 0x3c, 0x5e, + 0x67, 0x64, 0xc8, 0x37, 0x8e, 0x4f, 0xb2, 0xb7, + 0x8c, 0x64, 0xa3, 0xed, 0x32, 0x41, 0x65, 0xb3, + 0x8e, 0xb1, 0xbf, 0x8a, 0xd9, 0xc7, 0x58, 0xdf, + 0xc5, 0x6c, 0xe3, 0xac, 0x6f, 0xe2, 0xb6, 0x71, + 0xd6, 0x37, 0xf1, 0x5b, 0x38, 0xeb, 0x1b, 0xf8, + 0xad, 0x9c, 0x75, 0x8d, 0xfc, 0x56, 0xce, 0x3a, + 0xc6, 0xfe, 0x2b, 0x35, 0x14, 0x2f, 0x70, 0x38, + 0x9a, 0xf7, 0x39, 0xb7, 0x69, 0xe7, 0x5a, 0x8f, + 0xe6, 0x37, 0xf1, 0x5b, 0x38, 0xeb, 0x1b, 0xf8, + 0xad, 0x9c, 0x75, 0x8d, 0xfc, 0x56, 0xce, 0x3a, + 0xc6, 0xfe, 0x2b, 0x1b, 0xa9, 0xda, 0x0e, 0x16, + 0xb7, 0x34, 0x8d, 0xe2, 0x16, 0xe5, 0x5b, 0x38, + 0xeb, 0x1b, 0xf8, 0xad, 0x9c, 0x75, 0x8d, 0xfc, + 0x56, 0xce, 0x3a, 0xc6, 0xfe, 0x2b, 0x67, 0x1d, + 0x63, 0x7f, 0x15, 0xb3, 0x8e, 0xb1, 0xbf, 0x8a, + 0xd9, 0xc7, 0x58, 0xdf, 0xc5, 0x0c, 0xb1, 0x8e, + 0x9d, 0xbc, 0x65, 0xcf, 0x07, 0xb9, 0x47, 0x4f, + 0x06, 0xa9, 0x9f, 0x58, 0xfd, 0x63, 0xcb, 0xb9, + 0x07, 0xb5, 0x1f, 0x78, 0x4f, 0xf7, 0x8e, 0xef, + 0xdc, 0x7a, 0x9a, 0x38, 0x58, 0x64, 0x7e, 0x51, + 0xb9, 0x82, 0xd9, 0x24, 0x5b, 0x24, 0x8b, 0x64, + 0x91, 0x6c, 0x92, 0x26, 0xc8, 0xda, 0x57, 0xdd, + 0xbc, 0x47, 0x42, 0x0c, 0xf1, 0x33, 0x83, 0x26, + 0x63, 0xc3, 0x6d, 0x37, 0xe3, 0xf5, 0xfe, 0x09, + 0xb2, 0xb6, 0x91, 0xc5, 0xc3, 0x94, 0x26, 0x35, + 0xb4, 0x57, 0x31, 0xbb, 0x13, 0x1c, 0xe6, 0xe7, + 0x6a, 0x6b, 0xfc, 0x47, 0x0e, 0x16, 0x3a, 0x30, + 0x00, 0xcd, 0x67, 0x5f, 0xd3, 0xfb, 0xca, 0x46, + 0xbe, 0x8c, 0x9b, 0x41, 0x92, 0x63, 0x4b, 0x78, + 0x5b, 0xfc, 0x59, 0xfb, 0x53, 0xb1, 0xf8, 0x3c, + 0x3e, 0x33, 0x61, 0x92, 0x2d, 0xde, 0x8b, 0x68, + 0xb6, 0x74, 0x18, 0x68, 0xc8, 0x01, 0xee, 0x7e, + 0xf5, 0xb6, 0xd3, 0x6f, 0xc1, 0x44, 0x1b, 0x46, + 0x4e, 0x4e, 0x5c, 0xa8, 0xb8, 0xe3, 0x58, 0x5d, + 0x4a, 0xe0, 0xc0, 0x24, 0x70, 0xde, 0xdf, 0x7c, + 0x59, 0x65, 0x6f, 0xec, 0xf1, 0x92, 0xc1, 0x83, + 0x25, 0x63, 0x86, 0xd7, 0xbf, 0x2d, 0xf4, 0xa2, + 0xf3, 0x43, 0x7b, 0xc6, 0x22, 0xc3, 0x87, 0x35, + 0xbf, 0xa0, 0xb0, 0x0f, 0x07, 0xe4, 0x9a, 0x5d, + 0x89, 0xd9, 0x36, 0xe9, 0x3c, 0xeb, 0x64, 0x91, + 0x6c, 0x92, 0x2d, 0x92, 0x45, 0xb2, 0x48, 0x8c, + 0x93, 0x40, 0xe8, 0xd9, 0x93, 0x76, 0x73, 0xbb, + 0xfc, 0x36, 0xaf, 0x06, 0x3e, 0x78, 0x9d, 0x13, + 0x18, 0x48, 0x7b, 0x9c, 0x38, 0x37, 0x72, 0x76, + 0x58, 0x60, 0x91, 0xa5, 0xd2, 0x81, 0xea, 0x6d, + 0x81, 0xe7, 0x70, 0x55, 0x4e, 0x64, 0x2f, 0x73, + 0x5c, 0x5b, 0x84, 0x81, 0xa6, 0xc4, 0xdd, 0x4f, + 0x59, 0xfd, 0xc3, 0xe9, 0xec, 0xd7, 0x72, 0x92, + 0xd0, 0x2c, 0xa7, 0xac, 0xfe, 0xe1, 0xf4, 0xf6, + 0x6b, 0xb9, 0x49, 0x68, 0x16, 0x43, 0xc5, 0xa9, + 0xc4, 0xe7, 0x2e, 0xeb, 0xde, 0x20, 0xfb, 0x6f, + 0x5b, 0xca, 0xab, 0x9b, 0x24, 0x59, 0x39, 0x44, + 0x91, 0xbd, 0xcc, 0x0d, 0xc3, 0x61, 0x67, 0x71, + 0x2a, 0xe3, 0x33, 0xb7, 0x8d, 0xab, 0x66, 0x9e, + 0x2d, 0xf1, 0x41, 0xb9, 0x29, 0xa2, 0x75, 0xa6, + 0x78, 0x74, 0xd2, 0x07, 0x1d, 0x59, 0xd1, 0x99, + 0x78, 0x35, 0xb7, 0x36, 0xf1, 0x79, 0x3b, 0xde, + 0xa9, 0x65, 0x64, 0x32, 0xca, 0xd6, 0x44, 0xe0, + 0xe2, 0xd9, 0x03, 0x58, 0x34, 0xde, 0xf9, 0x94, + 0x0f, 0xb6, 0xf5, 0xd0, 0x47, 0x63, 0xcb, 0xbd, + 0x0a, 0xa6, 0x6b, 0xf9, 0x48, 0xa4, 0x7c, 0x03, + 0xfd, 0x47, 0xff, 0x00, 0xf6, 0xaa, 0x1d, 0x2b, + 0x64, 0x2e, 0x9a, 0xa9, 0xce, 0x19, 0x37, 0x06, + 0xe6, 0x69, 0xf5, 0x72, 0x93, 0xcc, 0xaa, 0xa1, + 0x87, 0x85, 0x2b, 0x99, 0x53, 0x1b, 0x3e, 0xd0, + 0xb1, 0xcd, 0xda, 0x98, 0x24, 0x20, 0x48, 0x73, + 0x98, 0xf8, 0xdb, 0xeb, 0x55, 0x0f, 0x2c, 0x12, + 0x47, 0xe2, 0x31, 0xd9, 0xa7, 0x41, 0xe0, 0x2f, + 0x06, 0x3a, 0x9e, 0x31, 0x14, 0x39, 0x5e, 0x03, + 0x78, 0xa4, 0xb8, 0xf9, 0x59, 0x45, 0x0b, 0xcf, + 0x92, 0x2d, 0x32, 0xf4, 0x64, 0x77, 0xfc, 0x71, + 0x27, 0xc8, 0xee, 0x13, 0xe8, 0x9c, 0xe3, 0xd6, + 0x2a, 0x7f, 0x70, 0xce, 0xe5, 0x17, 0xbb, 0x6f, + 0x77, 0xed, 0x50, 0x7b, 0x51, 0xf7, 0x84, 0xff, + 0x00, 0x78, 0xee, 0xfd, 0xc7, 0xa9, 0xa4, 0x85, + 0xe6, 0x37, 0xe5, 0x1b, 0x9c, 0x2d, 0xae, 0x45, + 0xb5, 0xc8, 0xb6, 0xb9, 0x16, 0xd7, 0x22, 0x11, + 0xc7, 0x51, 0x2b, 0xde, 0x78, 0x82, 0x64, 0x79, + 0x67, 0xdd, 0xf7, 0xc2, 0x71, 0xb6, 0xc6, 0xda, + 0x73, 0xe8, 0x41, 0xef, 0xa8, 0x76, 0x02, 0x6d, + 0x89, 0xaf, 0x0e, 0x1d, 0x8b, 0x2b, 0x95, 0x93, + 0x0d, 0xb1, 0x70, 0x85, 0xed, 0xcb, 0x6d, 0x29, + 0xb1, 0x45, 0x53, 0x23, 0x9e, 0xed, 0x02, 0xe8, + 0x83, 0x55, 0x20, 0x21, 0x6d, 0x72, 0x2d, 0xae, + 0x45, 0x85, 0xf5, 0x32, 0x03, 0x60, 0xed, 0x3c, + 0xa2, 0xeb, 0x6b, 0x91, 0x00, 0x2a, 0xa4, 0x24, + 0xf1, 0x05, 0xb5, 0x48, 0xb6, 0xb9, 0x16, 0xd7, + 0x22, 0xda, 0xe4, 0x5b, 0x5c, 0x8b, 0x6b, 0x91, + 0x18, 0xe6, 0x9d, 0xd2, 0x33, 0x26, 0xec, 0xc7, + 0x77, 0xf8, 0x6d, 0xfa, 0x63, 0x0b, 0x1c, 0x71, + 0x1c, 0x22, 0xc3, 0x49, 0xe4, 0x57, 0x75, 0x2c, + 0xcd, 0x1a, 0x33, 0xc6, 0x51, 0x7c, 0x94, 0xd3, + 0x46, 0xc1, 0xf5, 0x9c, 0xc2, 0x02, 0x2e, 0x75, + 0x2c, 0xcd, 0x68, 0xce, 0x49, 0x8c, 0xab, 0x31, + 0xa5, 0xe7, 0x91, 0xa1, 0x1c, 0x8c, 0x32, 0x4b, + 0x6d, 0x38, 0x1b, 0x7b, 0x27, 0x81, 0x0c, 0x84, + 0xb3, 0x85, 0xbd, 0x3b, 0xdf, 0x5a, 0x32, 0x08, + 0xde, 0x63, 0x1a, 0x5e, 0x1b, 0x98, 0x6e, 0xc6, + 0xc7, 0x5b, 0xc9, 0xe6, 0x07, 0x8e, 0xdc, 0x8b, + 0x1b, 0x6d, 0x8a, 0xc4, 0x02, 0x78, 0xbe, 0x84, + 0x5e, 0xed, 0xbd, 0xdf, 0xb5, 0x41, 0xed, 0x47, + 0xde, 0x13, 0xfd, 0xe3, 0xbb, 0xf7, 0x1f, 0xfd, + 0x71, 0x29, 0xbd, 0xe3, 0x7e, 0x8d, 0x7e, 0x1d, + 0x66, 0x47, 0x37, 0xab, 0x10, 0xbf, 0x62, 0x6d, + 0xcb, 0x85, 0x3e, 0xfe, 0xfc, 0x97, 0xc9, 0x94, + 0x32, 0x4f, 0x7c, 0xcc, 0x9a, 0x41, 0x89, 0xce, + 0x6e, 0x1c, 0x38, 0x78, 0xb4, 0xfa, 0x55, 0x46, + 0x4f, 0x16, 0x57, 0x28, 0x70, 0xe1, 0xe4, 0xe2, + 0xec, 0x55, 0x32, 0x99, 0x5b, 0x0d, 0x9b, 0x93, + 0x6b, 0xdf, 0x7d, 0x2e, 0xf5, 0x7a, 0x2e, 0xaa, + 0xea, 0x80, 0x8e, 0x6b, 0xc6, 0xd9, 0x59, 0x9a, + 0xed, 0xb9, 0x20, 0x13, 0x6f, 0x5d, 0xd4, 0x32, + 0x0a, 0x26, 0x17, 0x54, 0x3c, 0xe2, 0x8c, 0xb7, + 0xd0, 0xde, 0x0f, 0x26, 0x9b, 0xfc, 0x55, 0x3b, + 0x64, 0x75, 0x3b, 0x5b, 0x24, 0x65, 0xcf, 0xc6, + 0xd2, 0x64, 0xbe, 0x7d, 0x06, 0xc9, 0xf3, 0x17, + 0x40, 0xd7, 0xe1, 0x81, 0x80, 0xce, 0xdc, 0x40, + 0x0c, 0x9f, 0xa8, 0xa0, 0xda, 0x76, 0x46, 0xec, + 0xac, 0xef, 0x68, 0x7e, 0x1e, 0x2b, 0x37, 0x30, + 0xba, 0x8f, 0x0b, 0x63, 0xc7, 0x0d, 0x54, 0x71, + 0xef, 0x21, 0xc2, 0x05, 0xef, 0x71, 0x7e, 0x3f, + 0x8a, 0xa7, 0x7e, 0x46, 0x29, 0x0d, 0x44, 0xee, + 0x6b, 0xee, 0xc1, 0xa3, 0x36, 0x61, 0xc9, 0xa5, + 0x41, 0x0c, 0x6c, 0x66, 0x87, 0x12, 0xfb, 0x67, + 0x3b, 0xf7, 0x0d, 0x3f, 0x47, 0xf8, 0x6e, 0xdd, + 0xfe, 0x1b, 0x7e, 0x9d, 0x0f, 0xf9, 0xd1, 0xff, + 0x00, 0x15, 0x06, 0x0a, 0x99, 0x64, 0x77, 0x8c, + 0x37, 0x7a, 0xe8, 0xec, 0x38, 0x5e, 0xb4, 0xfc, + 0x15, 0x32, 0xc8, 0xec, 0x5c, 0x17, 0x47, 0x61, + 0xde, 0xaa, 0xbf, 0x49, 0x97, 0x29, 0x88, 0xf9, + 0x3c, 0x9e, 0x6e, 0x7b, 0xac, 0x0d, 0x36, 0x6b, + 0xc1, 0xc5, 0xe9, 0xcc, 0x54, 0xd1, 0xc9, 0x3b, + 0xa1, 0x2e, 0x91, 0x87, 0x7a, 0xdb, 0xe8, 0x0e, + 0xfc, 0x54, 0x11, 0xcf, 0x31, 0x61, 0x6d, 0x49, + 0x31, 0x96, 0x7f, 0x79, 0xc1, 0xd3, 0xc9, 0xc5, + 0xce, 0xa0, 0x6b, 0xce, 0x0a, 0x9c, 0x9c, 0x81, + 0xb0, 0x0e, 0x0b, 0xae, 0x5d, 0xa7, 0xb7, 0x9b, + 0xf5, 0x11, 0x7b, 0xb6, 0xf7, 0x7e, 0xd5, 0x07, + 0xb5, 0x1f, 0x78, 0x4f, 0xf7, 0x8e, 0xef, 0xdc, + 0x7f, 0xc3, 0xb9, 0x4a, 0xd8, 0x58, 0x64, 0x79, + 0x94, 0x66, 0x0b, 0x64, 0x91, 0x6c, 0x92, 0x2d, + 0x92, 0x45, 0xb2, 0x48, 0x84, 0x91, 0xd3, 0xca, + 0xc7, 0x8d, 0x04, 0x26, 0xb8, 0xc2, 0xfb, 0xb4, + 0x10, 0x2c, 0xd0, 0x00, 0xbe, 0x9c, 0xc9, 0xd1, + 0x0a, 0x69, 0x32, 0x6e, 0x20, 0x91, 0x65, 0x92, + 0xc9, 0x49, 0x82, 0xd8, 0x74, 0x0b, 0xdb, 0x92, + 0xfa, 0x56, 0x4b, 0xc5, 0xa4, 0xc9, 0xe2, 0xc5, + 0x6b, 0x71, 0xa6, 0x61, 0x81, 0xfb, 0xc0, 0x5a, + 0x06, 0x10, 0x73, 0x1e, 0x24, 0xf3, 0x92, 0x92, + 0xef, 0x37, 0x3b, 0xd1, 0xd9, 0xc8, 0xb2, 0x4d, + 0x82, 0x40, 0xcc, 0xff, 0x00, 0x54, 0x5c, 0x7a, + 0x8f, 0x12, 0x2e, 0x10, 0x3f, 0x38, 0x0d, 0x20, + 0xb0, 0x11, 0x9b, 0x46, 0x65, 0x67, 0xc1, 0x2b, + 0xb7, 0xc5, 0xff, 0x00, 0x13, 0xff, 0x00, 0xc5, + 0x7c, 0x8b, 0xf4, 0xdf, 0x80, 0xdd, 0x3c, 0xbe, + 0xbf, 0x4a, 0x71, 0x6c, 0x0f, 0x18, 0x8e, 0x2e, + 0x03, 0x73, 0x1e, 0x51, 0xc9, 0xf0, 0x4c, 0x0e, + 0xa6, 0x90, 0x86, 0x0c, 0x2d, 0xcd, 0xe9, 0xbf, + 0xcd, 0x6c, 0x92, 0x2d, 0x92, 0x45, 0xb2, 0x48, + 0xb6, 0x49, 0x11, 0x92, 0x68, 0x1d, 0x1b, 0x32, + 0x6e, 0xce, 0x77, 0x41, 0x6c, 0x6e, 0x70, 0xc9, + 0xb7, 0x38, 0x0b, 0x53, 0x27, 0x45, 0x6a, 0x64, + 0xe8, 0xad, 0x4c, 0x9d, 0x15, 0xa9, 0x93, 0xa2, + 0xb5, 0x32, 0x74, 0x56, 0xa6, 0x4e, 0x8a, 0x88, + 0x36, 0x03, 0xe4, 0xe5, 0xca, 0x8b, 0xb0, 0xe9, + 0xfe, 0x82, 0x6c, 0x8d, 0xf0, 0x6c, 0x6c, 0x78, + 0x70, 0x70, 0x70, 0x63, 0xf4, 0xdf, 0xd6, 0x9c, + 0x3f, 0xb3, 0x99, 0x19, 0x3f, 0x5d, 0xac, 0x7d, + 0xfb, 0xd3, 0xdc, 0xff, 0x00, 0x06, 0xc7, 0x8d, + 0xfa, 0x5f, 0x81, 0xf7, 0xef, 0x45, 0xe2, 0x8f, + 0x2a, 0xee, 0x23, 0x23, 0x1d, 0x9b, 0x99, 0x49, + 0xfa, 0x0b, 0x5d, 0x1b, 0xcd, 0xf2, 0x66, 0x37, + 0x58, 0x7a, 0x91, 0x73, 0xe9, 0xb2, 0xae, 0xc7, + 0x94, 0x69, 0x7c, 0x67, 0x7a, 0x7d, 0x08, 0x5e, + 0x9f, 0x14, 0x80, 0x10, 0xd9, 0x5c, 0xc3, 0x89, + 0xb7, 0xff, 0x00, 0xea, 0xd4, 0xc9, 0xd1, 0x5a, + 0x99, 0x3a, 0x2b, 0x53, 0x27, 0x45, 0x6a, 0x64, + 0xe8, 0xad, 0x4c, 0x9d, 0x15, 0xa9, 0x93, 0xa2, + 0xb5, 0x32, 0x74, 0x54, 0x7e, 0xed, 0xbd, 0xdf, + 0xb5, 0x41, 0xed, 0x47, 0xde, 0x13, 0xfd, 0xe3, + 0xbb, 0xf7, 0x1f, 0xf0, 0xee, 0x51, 0x96, 0x38, + 0xb4, 0xe5, 0xf8, 0x8f, 0xee, 0xad, 0x74, 0x9d, + 0x25, 0xae, 0x93, 0xa4, 0x9f, 0x53, 0x96, 0x76, + 0x4d, 0xae, 0xc3, 0xc3, 0x37, 0xfe, 0xb3, 0x8e, + 0x75, 0x1c, 0xaf, 0xf0, 0x83, 0x21, 0x12, 0x5c, + 0x80, 0xf7, 0xbe, 0xfa, 0x6d, 0xc8, 0x81, 0xf1, + 0xd6, 0xb3, 0x11, 0x21, 0x98, 0xa4, 0x3b, 0xff, + 0x00, 0x57, 0xe6, 0x8b, 0x5d, 0x2c, 0x81, 0xc0, + 0xd8, 0xef, 0x94, 0x4f, 0xf1, 0xe6, 0x30, 0xcb, + 0xc1, 0x63, 0xe4, 0x70, 0x27, 0x3d, 0xbd, 0x4a, + 0x7c, 0xa5, 0x57, 0x8b, 0xe4, 0x48, 0x6b, 0xb2, + 0xae, 0x76, 0x9c, 0xfc, 0x9e, 0xa5, 0x81, 0x95, + 0xa2, 0x40, 0x1b, 0x8d, 0xd2, 0x07, 0xbb, 0x0b, + 0x42, 0x61, 0xf1, 0x9c, 0xab, 0x1f, 0xa1, 0xec, + 0x79, 0xb2, 0x21, 0xb3, 0xb9, 0xa1, 0xa3, 0x13, + 0x9c, 0xe7, 0x9b, 0x00, 0x9c, 0xf1, 0x55, 0x94, + 0x8c, 0x33, 0x1e, 0x36, 0xbc, 0xe7, 0xce, 0x07, + 0xcd, 0x09, 0xf2, 0xee, 0xc2, 0x5f, 0x83, 0x84, + 0x6e, 0xa1, 0x7b, 0xe6, 0x75, 0xa5, 0x6e, 0x21, + 0x67, 0x9f, 0xeb, 0x91, 0x17, 0x8a, 0x82, 0xdd, + 0x21, 0xa1, 0xcf, 0x37, 0x71, 0xb5, 0xf3, 0x28, + 0xe2, 0x6c, 0xcf, 0xc4, 0xf7, 0x06, 0x8b, 0xb8, + 0xa3, 0x46, 0x27, 0x22, 0x40, 0x48, 0xb9, 0x79, + 0xb6, 0x64, 0xc0, 0xda, 0xd6, 0x99, 0x5e, 0xd0, + 0xf1, 0x0e, 0x51, 0xd8, 0xb3, 0x85, 0x95, 0x75, + 0x70, 0x81, 0xb8, 0x8b, 0x06, 0x51, 0xee, 0xe2, + 0xb7, 0x20, 0xf4, 0xad, 0x73, 0xfa, 0x45, 0x6b, + 0xa4, 0xe9, 0x2a, 0xa0, 0xe9, 0x1c, 0xe1, 0xe2, + 0xee, 0xd2, 0x7d, 0x23, 0x76, 0x06, 0x43, 0x3b, + 0x98, 0xdc, 0x8b, 0x4d, 0x82, 0xda, 0xe4, 0x5b, + 0x5c, 0x8a, 0x49, 0xbc, 0x6d, 0xd8, 0x58, 0x43, + 0x4e, 0x7e, 0x5b, 0xfe, 0x0a, 0x37, 0x78, 0xe9, + 0x6b, 0x1c, 0xd2, 0xfc, 0x4e, 0x3c, 0x10, 0x0d, + 0xb3, 0xa8, 0x98, 0xdf, 0x08, 0x07, 0x36, 0x40, + 0x48, 0x90, 0x3b, 0x7b, 0x9b, 0x4f, 0x15, 0xd3, + 0x64, 0x15, 0xf9, 0x68, 0xdc, 0x6d, 0x8a, 0x33, + 0xc7, 0xcc, 0xa3, 0x95, 0xfe, 0x15, 0x64, 0x22, + 0x4b, 0x90, 0x1e, 0x4d, 0xf4, 0xdb, 0x91, 0x11, + 0xe3, 0x8f, 0x3e, 0x90, 0xb2, 0xbe, 0x38, 0x70, + 0xe4, 0xf2, 0xba, 0x78, 0xb1, 0x61, 0x51, 0xcc, + 0xea, 0xc3, 0x67, 0xf1, 0x03, 0x9f, 0x40, 0x3f, + 0x35, 0xbe, 0xae, 0x23, 0xc9, 0x89, 0x00, 0xbe, + 0x9b, 0xa8, 0xe1, 0x6d, 0x5b, 0xc3, 0x9e, 0xe0, + 0xd1, 0x72, 0xb6, 0xb9, 0x13, 0x1c, 0x7c, 0x20, + 0x22, 0xca, 0x70, 0x04, 0x8e, 0xe1, 0x76, 0x22, + 0xd7, 0x55, 0x48, 0x1c, 0x0d, 0x8a, 0xda, 0xe4, + 0x5b, 0x5c, 0x8a, 0x49, 0x45, 0x5b, 0xb0, 0xc7, + 0x6b, 0xe7, 0xe5, 0x5b, 0x5c, 0x8b, 0x6b, 0x91, + 0x6d, 0x72, 0x27, 0x5f, 0x90, 0x77, 0x7e, 0xd5, + 0x07, 0xb5, 0x1f, 0x78, 0x4f, 0xf7, 0x8f, 0xef, + 0xdc, 0x7f, 0xc3, 0xb9, 0x47, 0xfe, 0x63, 0xfe, + 0x3b, 0xb0, 0xd1, 0xba, 0x57, 0x09, 0x5d, 0x0e, + 0x03, 0x1e, 0x0c, 0xd8, 0x9d, 0x9c, 0x67, 0xbf, + 0xb3, 0xcc, 0xa8, 0x43, 0xa8, 0xdb, 0x50, 0x70, + 0x3b, 0x3b, 0xb1, 0x66, 0xdf, 0x9e, 0x42, 0xa0, + 0x8a, 0xa2, 0x8b, 0x2d, 0x0b, 0x89, 0xc9, 0x16, + 0x13, 0x89, 0xb9, 0xf4, 0x7e, 0x45, 0x4c, 0xc1, + 0x77, 0x46, 0xc7, 0x96, 0x07, 0xf2, 0xaf, 0x07, + 0x36, 0x36, 0x17, 0x92, 0xc7, 0x0b, 0x01, 0xfb, + 0xe5, 0x78, 0x48, 0xe4, 0x9b, 0x52, 0x03, 0xe2, + 0x6d, 0xae, 0x74, 0xd8, 0xe7, 0xcc, 0xa5, 0x7c, + 0x14, 0x8d, 0x0d, 0xc9, 0xef, 0xe1, 0xce, 0x41, + 0x6f, 0xc7, 0x3a, 0x86, 0x78, 0x61, 0x7c, 0x38, + 0xf1, 0x62, 0x8c, 0xe7, 0xb5, 0xad, 0x9f, 0xd5, + 0x9d, 0x4a, 0xe8, 0xa3, 0x13, 0x00, 0xcf, 0x29, + 0x19, 0xe3, 0x6a, 0x96, 0xa5, 0xb4, 0xd8, 0x03, + 0xe1, 0x70, 0x30, 0x3d, 0xc6, 0xd9, 0x9c, 0xcc, + 0xfc, 0xbc, 0x7d, 0x8a, 0x9a, 0x38, 0xe1, 0x6d, + 0x38, 0x75, 0x49, 0x6e, 0xf4, 0x93, 0xc4, 0x33, + 0xe7, 0x55, 0x26, 0x19, 0x1e, 0xf2, 0xc7, 0xe5, + 0x43, 0x5c, 0xcc, 0x38, 0x5b, 0xc1, 0xe5, 0xf6, + 0x79, 0x94, 0x74, 0xd1, 0xe6, 0x92, 0x56, 0xe5, + 0x72, 0xc4, 0x7c, 0x1c, 0x07, 0x26, 0x65, 0x4d, + 0x86, 0xe1, 0xb9, 0x76, 0xda, 0xfa, 0x78, 0x4a, + 0x0a, 0xaf, 0xad, 0x39, 0x64, 0x3c, 0xc7, 0x3f, + 0xfb, 0x5b, 0xce, 0xa8, 0xb0, 0x03, 0xaa, 0x88, + 0xe2, 0xe4, 0xde, 0x8c, 0xe9, 0xac, 0x34, 0x66, + 0x68, 0x64, 0xa9, 0x7e, 0x17, 0x87, 0x1e, 0x3b, + 0x7e, 0x49, 0xed, 0x07, 0x10, 0x6b, 0x88, 0x07, + 0x97, 0x72, 0xaf, 0xfc, 0xbb, 0xbb, 0xc6, 0xec, + 0x1f, 0xe5, 0xd9, 0xbb, 0x58, 0xd6, 0x8c, 0x4e, + 0xc5, 0x1b, 0xac, 0x39, 0x37, 0xdf, 0x88, 0x54, + 0xc1, 0xb0, 0x89, 0x0b, 0x61, 0x71, 0x96, 0x27, + 0xfd, 0x82, 0xe5, 0x4b, 0x51, 0x1c, 0x06, 0x2c, + 0xa3, 0x65, 0xbc, 0x2e, 0x37, 0xd0, 0xce, 0x2f, + 0x42, 0x6b, 0xc4, 0x3e, 0x2c, 0x1b, 0x2d, 0xb0, + 0x0b, 0xd9, 0xd7, 0x1a, 0x73, 0xfa, 0x95, 0x06, + 0x5e, 0x39, 0x5e, 0xec, 0x0e, 0xb6, 0x4d, 0xe0, + 0x7d, 0x73, 0xe8, 0x5e, 0x0f, 0x2d, 0x07, 0x0f, + 0x8b, 0x49, 0xde, 0xf4, 0x1a, 0x34, 0xba, 0x90, + 0x01, 0xd7, 0xa7, 0x62, 0x81, 0x95, 0x0c, 0xf1, + 0x97, 0x35, 0xb8, 0x89, 0x16, 0x01, 0xad, 0x1c, + 0x4a, 0x6d, 0xe8, 0x63, 0x0d, 0x24, 0x3b, 0xd1, + 0xc4, 0x31, 0x31, 0x4c, 0xd9, 0x06, 0xf1, 0x95, + 0x91, 0xb5, 0x99, 0xb4, 0x0c, 0x47, 0x30, 0xec, + 0x4c, 0x7c, 0x87, 0x13, 0x9b, 0x31, 0x68, 0xf4, + 0x0b, 0x0c, 0xca, 0x9e, 0x2a, 0x8a, 0x3f, 0x18, + 0x85, 0xda, 0xa7, 0xb0, 0xef, 0x86, 0x7f, 0xeb, + 0x31, 0x54, 0x94, 0xcd, 0x25, 0xd4, 0xb8, 0x24, + 0x6b, 0x8f, 0x13, 0x80, 0x73, 0xf4, 0xaa, 0x56, + 0xe2, 0x94, 0xc6, 0xf8, 0x9c, 0x5d, 0x14, 0x71, + 0x62, 0x0f, 0xd3, 0x7b, 0x9b, 0xa3, 0x09, 0x74, + 0xae, 0x83, 0x22, 0xc2, 0x23, 0x11, 0x6f, 0x1b, + 0xa3, 0x7d, 0x7b, 0xaf, 0x09, 0x36, 0x4b, 0xe0, + 0x64, 0xcd, 0x6b, 0x2e, 0x34, 0x0b, 0x9c, 0xc3, + 0xe8, 0x3b, 0xd4, 0xde, 0xef, 0xda, 0xa0, 0xf5, + 0xc7, 0xde, 0x13, 0xfd, 0xe3, 0xfb, 0xf7, 0x1f, + 0xf0, 0xee, 0x51, 0xff, 0x00, 0x98, 0xff, 0x00, + 0x8e, 0xee, 0x50, 0xbd, 0xc5, 0xfa, 0x71, 0x5f, + 0x3a, 0xc2, 0xca, 0xa9, 0x9a, 0x39, 0x04, 0x85, + 0x3e, 0xd5, 0x12, 0x8c, 0x79, 0xdd, 0x67, 0x9c, + 0xeb, 0x25, 0xf5, 0x71, 0x62, 0x59, 0x26, 0xd4, + 0x4a, 0xd8, 0xfe, 0xc0, 0x79, 0xb2, 0x39, 0x19, + 0xa4, 0x8a, 0xfa, 0x70, 0x3a, 0xd7, 0x42, 0x47, + 0x4f, 0x23, 0xa4, 0x6e, 0x87, 0x97, 0x9b, 0x84, + 0xf7, 0x3e, 0x47, 0x48, 0xe7, 0xb7, 0x01, 0x2f, + 0x37, 0xcc, 0x83, 0x98, 0xe2, 0xc7, 0x0e, 0x36, + 0x9b, 0x27, 0x39, 0xf2, 0xbd, 0xce, 0x70, 0xb1, + 0x25, 0xda, 0x42, 0xb3, 0x5e, 0xe6, 0x8d, 0x39, + 0x8a, 0x38, 0x5c, 0x45, 0xc5, 0x8d, 0x96, 0x06, + 0xcc, 0xf6, 0xb2, 0xf7, 0xc2, 0x1d, 0x99, 0x65, + 0x4b, 0xdc, 0x64, 0xbd, 0xf1, 0xdf, 0x3d, 0xd3, + 0x6c, 0xf7, 0x0c, 0x27, 0x10, 0xb1, 0xd0, 0x56, + 0x48, 0xd4, 0x4a, 0x62, 0xb5, 0xb0, 0x63, 0x36, + 0x4e, 0x6c, 0x72, 0xbd, 0x8d, 0x76, 0x90, 0xd7, + 0x5a, 0xfb, 0xb5, 0x7f, 0xe5, 0xdd, 0xde, 0x37, + 0x60, 0xff, 0x00, 0x2e, 0xcd, 0xdc, 0x51, 0xbd, + 0xd1, 0xbb, 0x95, 0xa6, 0xc5, 0x65, 0x72, 0x8f, + 0xca, 0xfd, 0xbc, 0x59, 0xd0, 0x9b, 0x2d, 0x26, + 0x54, 0x7d, 0x7c, 0x46, 0xfc, 0xe8, 0x19, 0xa5, + 0x7c, 0xa4, 0x7d, 0xb7, 0x5d, 0x34, 0x17, 0x12, + 0x1b, 0xa0, 0x72, 0x2c, 0x0d, 0x95, 0xed, 0x67, + 0xd9, 0x0e, 0xcc, 0x86, 0x19, 0x5e, 0x2c, 0x2c, + 0x2c, 0xef, 0x4d, 0xfb, 0xd6, 0x1c, 0x47, 0x0d, + 0xef, 0x6f, 0x4a, 0x3b, 0xf7, 0x67, 0x18, 0x74, + 0xf1, 0x72, 0x20, 0xd8, 0xc3, 0xe2, 0x37, 0x07, + 0x11, 0x94, 0xba, 0xd6, 0xd1, 0x87, 0x91, 0x61, + 0xc4, 0x70, 0xde, 0xf6, 0x45, 0xb1, 0xcd, 0x24, + 0x6d, 0x3a, 0x43, 0x5d, 0x65, 0x14, 0x4d, 0x73, + 0xa3, 0x63, 0x59, 0x81, 0xc0, 0x3b, 0x33, 0xb3, + 0x93, 0xf3, 0x46, 0x36, 0xca, 0xf1, 0x19, 0xd2, + 0xc0, 0xec, 0xc5, 0x64, 0xb2, 0xaf, 0xc9, 0x7d, + 0x8c, 0x59, 0x96, 0x17, 0xca, 0xf7, 0xb7, 0x45, + 0x8b, 0xbe, 0x83, 0xbd, 0x4d, 0xee, 0xfd, 0xaa, + 0x9f, 0xd7, 0x1f, 0x78, 0x4f, 0xf7, 0x8f, 0xef, + 0xdc, 0x7f, 0xc3, 0xb9, 0x33, 0xd1, 0x51, 0xff, + 0x00, 0x1f, 0xa7, 0x93, 0x2c, 0x19, 0x79, 0x1a, + 0xe9, 0xda, 0xeb, 0x67, 0xb0, 0xe2, 0xec, 0x72, + 0x61, 0x74, 0xe1, 0x93, 0x48, 0xdc, 0x6c, 0x8e, + 0xda, 0x47, 0xaf, 0xe0, 0x9b, 0x04, 0x75, 0x0d, + 0x92, 0x6c, 0xa6, 0x4d, 0xcd, 0x22, 0xd6, 0x3f, + 0x30, 0x8c, 0x8c, 0x93, 0xc6, 0x22, 0xc1, 0x28, + 0xdf, 0x32, 0xd6, 0x70, 0x61, 0x28, 0x8c, 0xb5, + 0xe7, 0x6b, 0x04, 0x8e, 0x8f, 0x0f, 0x17, 0xaf, + 0xe2, 0x9f, 0x4c, 0x27, 0x73, 0xf0, 0x5e, 0xe5, + 0x91, 0x5c, 0x93, 0x7d, 0x00, 0x2a, 0x8c, 0x6e, + 0x79, 0x99, 0xae, 0x8f, 0x06, 0xf2, 0xdc, 0x20, + 0x4f, 0x2a, 0xc9, 0x32, 0xa3, 0x13, 0xdb, 0x2b, + 0x62, 0x93, 0x79, 0xc1, 0xb9, 0xb6, 0x6e, 0x55, + 0x94, 0x35, 0x27, 0x01, 0x71, 0x60, 0x76, 0x4f, + 0x35, 0xc7, 0x2f, 0x27, 0xd3, 0xab, 0x3c, 0x5e, + 0x2e, 0x7b, 0xc6, 0xed, 0x3f, 0xf9, 0x76, 0x7d, + 0x0a, 0x38, 0xaf, 0x87, 0x2b, 0x1c, 0xb2, 0xb8, + 0x9f, 0x53, 0x9a, 0x3b, 0xbb, 0x55, 0x48, 0x65, + 0x44, 0x53, 0x97, 0x3e, 0x31, 0xe4, 0xef, 0x9b, + 0x4f, 0x28, 0x4f, 0x8d, 0xb2, 0x3d, 0x99, 0x19, + 0x03, 0x24, 0x7b, 0xed, 0x62, 0x2f, 0x6b, 0x8e, + 0x45, 0x55, 0x8e, 0x9e, 0x76, 0x38, 0x43, 0x8b, + 0x0c, 0x84, 0x7d, 0xa1, 0x9c, 0x1b, 0x7a, 0x53, + 0x84, 0x6e, 0x2c, 0x7c, 0x74, 0x78, 0xae, 0x39, + 0x5c, 0xf0, 0x7b, 0x88, 0x4d, 0x7c, 0xd8, 0x9d, + 0x24, 0x6f, 0x20, 0xb9, 0x83, 0x7e, 0xf6, 0xe1, + 0xbd, 0xbd, 0x79, 0xbb, 0x53, 0xe4, 0x0c, 0x9a, + 0x27, 0x60, 0xc6, 0x23, 0x97, 0x4e, 0x9b, 0x1e, + 0xf0, 0x9d, 0x4e, 0xd9, 0x1c, 0x3c, 0xb4, 0x4c, + 0x75, 0xf4, 0x5f, 0x0b, 0xaf, 0xcc, 0x9e, 0xf8, + 0x05, 0x43, 0xc4, 0x6d, 0xbb, 0xa2, 0x19, 0xde, + 0x73, 0xe6, 0xb6, 0x6f, 0xea, 0xc9, 0xc7, 0x7e, + 0xc6, 0x88, 0x71, 0x81, 0x20, 0xdf, 0x36, 0xf9, + 0x85, 0xfe, 0x25, 0x78, 0x9e, 0x6f, 0x13, 0x12, + 0xe4, 0x72, 0x16, 0xcd, 0x6b, 0xdb, 0x9d, 0x56, + 0xc6, 0xda, 0x89, 0x2d, 0x09, 0x6b, 0x59, 0x9f, + 0x46, 0x75, 0x48, 0xca, 0x77, 0xe0, 0x92, 0x76, + 0x99, 0x5e, 0xfb, 0x81, 0x88, 0xe2, 0x3a, 0x49, + 0xf5, 0x29, 0xa0, 0x99, 0x8c, 0x66, 0x5e, 0x33, + 0x76, 0xc7, 0xc1, 0xbd, 0xae, 0x0f, 0xd0, 0xb2, + 0x77, 0xa8, 0x77, 0x7e, 0xd5, 0x4f, 0xeb, 0x8f, + 0xbc, 0x27, 0xfb, 0xc7, 0xf7, 0xee, 0x3f, 0xe1, + 0xdc, 0xa6, 0xa4, 0x39, 0xb2, 0x9c, 0x12, 0x78, + 0x9c, 0x34, 0x27, 0x47, 0x23, 0x4b, 0x1e, 0xdc, + 0xc4, 0x1f, 0xa5, 0x1e, 0x07, 0xc9, 0xe2, 0x6d, + 0xc2, 0xdc, 0x8d, 0xf4, 0xb7, 0x8d, 0x46, 0x5c, + 0xd9, 0x0c, 0xb0, 0xb4, 0xb1, 0x9c, 0x87, 0x39, + 0xb1, 0x3c, 0xe9, 0xb5, 0x50, 0xc7, 0x26, 0x54, + 0xcb, 0x94, 0x76, 0x2d, 0x03, 0x94, 0x05, 0xae, + 0xaa, 0x9c, 0x61, 0x90, 0x79, 0x53, 0xa2, 0xed, + 0x20, 0x2b, 0x65, 0xaa, 0x43, 0xb0, 0x06, 0xe4, + 0x81, 0xf2, 0x7f, 0xd7, 0xa1, 0x57, 0xb8, 0xe5, + 0x19, 0x1d, 0x49, 0x36, 0x73, 0x46, 0xf8, 0x6f, + 0xae, 0x9c, 0x1a, 0x24, 0x63, 0xad, 0x1e, 0x1c, + 0xc0, 0xe7, 0x65, 0xc7, 0xcd, 0x19, 0x98, 0xd9, + 0x6f, 0x24, 0xcd, 0x92, 0x40, 0x6d, 0xbd, 0x00, + 0xde, 0xc3, 0x95, 0x62, 0x2e, 0x98, 0x3a, 0xfb, + 0xe8, 0xdb, 0xc0, 0x90, 0x72, 0x1f, 0xa6, 0x72, + 0x82, 0xd3, 0xd4, 0x58, 0x91, 0xf6, 0x5b, 0xba, + 0xdc, 0x9e, 0x7a, 0x88, 0x34, 0x0f, 0xb4, 0xdf, + 0xa1, 0x4f, 0x2e, 0x67, 0x3e, 0x20, 0xf8, 0x4b, + 0x2f, 0x63, 0x63, 0x7b, 0x1e, 0xd2, 0xa5, 0x8c, + 0x0c, 0xef, 0x2d, 0x38, 0xb9, 0x2c, 0x9e, 0x45, + 0x30, 0x06, 0x57, 0x87, 0xcb, 0x77, 0x66, 0x77, + 0xab, 0x91, 0x64, 0x1b, 0x03, 0xb2, 0x18, 0x5c, + 0xdb, 0x19, 0x2e, 0x73, 0x90, 0x74, 0xdb, 0xf7, + 0x42, 0xa8, 0x7c, 0x90, 0x97, 0x47, 0x2b, 0x30, + 0x60, 0x0f, 0xb5, 0x86, 0x6e, 0x3b, 0x7a, 0x13, + 0x1b, 0x14, 0x38, 0x29, 0xdb, 0x8a, 0xf1, 0xe2, + 0xb9, 0x75, 0xc5, 0x8d, 0xca, 0x64, 0x8c, 0xa7, + 0xf2, 0x60, 0x16, 0xb9, 0x8e, 0x7d, 0xf1, 0x5f, + 0xd2, 0x9c, 0xeb, 0x5e, 0x47, 0x4e, 0xd9, 0xae, + 0x7d, 0x17, 0xfc, 0x51, 0x63, 0x29, 0x70, 0xc2, + 0xe1, 0x67, 0x8c, 0x7b, 0xe3, 0xa3, 0x8f, 0xe0, + 0xa6, 0x6c, 0x71, 0x64, 0xc4, 0x98, 0x47, 0x0a, + 0xf9, 0x82, 0xf1, 0x83, 0x4c, 0x0d, 0x67, 0xf8, + 0xb8, 0xb3, 0x5f, 0xed, 0x61, 0xe5, 0x53, 0xc7, + 0x6b, 0xe5, 0x6d, 0x9e, 0xfa, 0x2c, 0x99, 0x15, + 0x44, 0x19, 0x61, 0x1f, 0x00, 0x87, 0xe1, 0x23, + 0xd0, 0xa4, 0xa9, 0x76, 0x18, 0xf2, 0x71, 0xe1, + 0x63, 0x07, 0xab, 0x08, 0xfa, 0x02, 0xaa, 0x51, + 0x6a, 0x78, 0x73, 0xfb, 0x4e, 0xe2, 0x09, 0xce, + 0x3a, 0x49, 0xbf, 0xed, 0x54, 0xfe, 0xb8, 0xfb, + 0xc2, 0x7f, 0xbc, 0x7f, 0x7e, 0xe0, 0x93, 0x88, + 0xe6, 0xdc, 0x02, 0xae, 0x32, 0xe7, 0x01, 0x61, + 0x2b, 0x33, 0x3f, 0xf3, 0x59, 0xaa, 0xe4, 0x03, + 0xd3, 0x1a, 0xdb, 0x24, 0xea, 0xbf, 0x35, 0xb6, + 0x49, 0xd5, 0x7e, 0x6b, 0x6c, 0x93, 0xaa, 0xfc, + 0xd6, 0xd9, 0x27, 0x55, 0xf9, 0xad, 0xb2, 0x4e, + 0xab, 0xf3, 0x5b, 0x64, 0x9d, 0x57, 0xe6, 0xb6, + 0xc9, 0x3a, 0xaf, 0xcd, 0x6d, 0x92, 0x75, 0x5f, + 0x9a, 0xdb, 0x24, 0xea, 0xbf, 0x35, 0xb6, 0x49, + 0xd5, 0x7e, 0x6b, 0x6c, 0x93, 0xaa, 0xfc, 0xd6, + 0xd9, 0x27, 0x55, 0xf9, 0xad, 0xb2, 0x4e, 0xab, + 0xf3, 0x5b, 0x64, 0x9d, 0x57, 0xe6, 0xb6, 0xc9, + 0x3a, 0xaf, 0xcd, 0x6d, 0x92, 0x75, 0x5f, 0x9a, + 0xdb, 0x24, 0xea, 0xbf, 0x35, 0xb6, 0x49, 0xd5, + 0xac, 0x71, 0x46, 0xe9, 0xa5, 0xe2, 0x7c, 0xdc, + 0x5e, 0xa0, 0x8b, 0x9c, 0x6e, 0x77, 0x41, 0x06, + 0xc4, 0x2c, 0x53, 0xc4, 0x59, 0x2f, 0x1c, 0xb0, + 0xe6, 0x27, 0xe0, 0xb6, 0x89, 0xfa, 0x21, 0x6d, + 0x13, 0xf4, 0x02, 0xda, 0x27, 0xe8, 0x05, 0xb4, + 0x4f, 0xd0, 0x0b, 0x68, 0x9f, 0xa0, 0x16, 0xd1, + 0x3f, 0x40, 0x2d, 0xa2, 0x7e, 0x80, 0x5b, 0x44, + 0xfd, 0x00, 0xb6, 0x89, 0xfa, 0x01, 0x6d, 0x13, + 0xf4, 0x02, 0xda, 0x27, 0xe8, 0x05, 0xb4, 0x4f, + 0xd0, 0x0b, 0x68, 0x9f, 0xa0, 0x16, 0xd1, 0x3f, + 0x40, 0x2d, 0xa2, 0x7e, 0x80, 0x5b, 0x44, 0xfd, + 0x00, 0xb6, 0x89, 0xfa, 0x01, 0x6d, 0x13, 0xf4, + 0x02, 0xbd, 0xa6, 0xa8, 0x3c, 0x8f, 0x38, 0x42, + 0x6b, 0x6c, 0x18, 0xc6, 0xf0, 0x58, 0xdc, 0xc0, + 0x7e, 0xd4, 0xd6, 0x8e, 0x35, 0x18, 0xe4, 0x7b, + 0x3b, 0xd3, 0xfd, 0xe3, 0xfb, 0xf7, 0x0b, 0x5c, + 0x2e, 0x0a, 0xf2, 0x67, 0x10, 0xe4, 0x2b, 0x57, + 0xda, 0x16, 0xaf, 0xb4, 0x2d, 0x5f, 0x68, 0x5a, + 0xbe, 0xd0, 0xb5, 0x7d, 0xa1, 0x6a, 0xfb, 0x42, + 0xd5, 0xf6, 0x85, 0xab, 0xed, 0x0b, 0x57, 0xda, + 0x16, 0xaf, 0xb4, 0x2d, 0x5f, 0x68, 0x5a, 0xbe, + 0xd0, 0xb5, 0x7d, 0xa1, 0x6a, 0xfb, 0x42, 0xd5, + 0xf6, 0x85, 0xab, 0xed, 0x0b, 0x57, 0xda, 0x16, + 0xaf, 0xb4, 0x2d, 0x5f, 0x68, 0x5a, 0xbe, 0xd0, + 0xb5, 0x7d, 0xa1, 0x6a, 0xfb, 0x42, 0xd5, 0xf6, + 0x85, 0xab, 0xed, 0x0b, 0x57, 0xda, 0x16, 0xaf, + 0xb4, 0x2d, 0x5f, 0x68, 0x5a, 0xbe, 0xd0, 0xb5, + 0x7d, 0xa1, 0x6a, 0xfb, 0x42, 0xd5, 0xf6, 0x85, + 0xab, 0xed, 0x0b, 0x57, 0xda, 0x16, 0xaf, 0xb4, + 0x2d, 0x5f, 0x68, 0x5a, 0xbe, 0xd0, 0xb5, 0x7d, + 0xa1, 0x6a, 0xfb, 0x42, 0xd5, 0xf6, 0x85, 0xab, + 0xed, 0x0b, 0x57, 0xda, 0x16, 0xaf, 0xb4, 0x2d, + 0x5f, 0x68, 0x5a, 0xbe, 0xd0, 0xb5, 0x7d, 0xa1, + 0x6a, 0xfb, 0x42, 0xd5, 0xf6, 0x85, 0xab, 0xed, + 0x0b, 0x57, 0xda, 0x16, 0xaf, 0xb4, 0x2d, 0x5f, + 0x68, 0x5a, 0xbe, 0xd0, 0xb5, 0x7d, 0xa1, 0x6a, + 0xfb, 0x42, 0xd5, 0xf6, 0x85, 0xab, 0xed, 0x0b, + 0x57, 0xda, 0x16, 0xaf, 0xb4, 0x2d, 0x5f, 0x68, + 0x5a, 0xbe, 0xd0, 0xb5, 0x7d, 0xa1, 0x6a, 0xfb, + 0x42, 0xd5, 0xf6, 0x85, 0xab, 0xed, 0x0b, 0x57, + 0xda, 0x16, 0xaf, 0xb4, 0x2d, 0x5f, 0x68, 0x5a, + 0xbe, 0xd0, 0xb5, 0x7d, 0xa1, 0x6a, 0xfb, 0x42, + 0xce, 0x03, 0x7d, 0x65, 0x72, 0xbb, 0x95, 0x33, + 0xde, 0x33, 0xbd, 0x4f, 0x1c, 0x72, 0x61, 0x68, + 0x91, 0xdd, 0xeb, 0x5c, 0x79, 0x96, 0xb8, 0xf3, + 0x2d, 0x71, 0xe6, 0x5a, 0xe3, 0xcc, 0xb5, 0xc7, + 0x99, 0x6b, 0x8f, 0x32, 0xd7, 0x1e, 0x65, 0xae, + 0x3c, 0xcb, 0x5c, 0x79, 0x96, 0xb8, 0xf3, 0x2d, + 0x71, 0xe6, 0x5a, 0xe3, 0xcc, 0xb5, 0xc7, 0x99, + 0x6b, 0x8f, 0x32, 0xd7, 0x1e, 0x65, 0xae, 0x3c, + 0xcb, 0x5c, 0x79, 0x96, 0xb8, 0xf3, 0x2d, 0x71, + 0xe6, 0x5a, 0xe3, 0xcc, 0xb5, 0xc7, 0x99, 0x6b, + 0x8f, 0x32, 0xd7, 0x1e, 0x65, 0xae, 0x3c, 0xcb, + 0x5c, 0x79, 0x96, 0xb8, 0xf3, 0x2d, 0x71, 0xe6, + 0x5a, 0xe3, 0xcc, 0xb5, 0xc7, 0x99, 0x6b, 0x8f, + 0x32, 0xd7, 0x1e, 0x65, 0xae, 0x3c, 0xcb, 0x5c, + 0x79, 0x96, 0xb8, 0xf3, 0x2d, 0x71, 0xe6, 0x5a, + 0xe3, 0xcc, 0xb5, 0xc7, 0x99, 0x6b, 0x8f, 0x32, + 0xd7, 0x1e, 0x65, 0xae, 0x3c, 0xcb, 0x5c, 0x79, + 0x96, 0xb8, 0xf3, 0x2d, 0x71, 0xe6, 0x5a, 0xe3, + 0xcc, 0xb5, 0xc7, 0x99, 0x6b, 0x8f, 0x32, 0xd7, + 0x1e, 0x65, 0xae, 0x3c, 0xcb, 0x5c, 0x79, 0x96, + 0xb8, 0xf3, 0x2d, 0x71, 0xe6, 0x5a, 0xe3, 0xcc, + 0xb5, 0xc7, 0x99, 0x6b, 0x8f, 0x32, 0xd7, 0x1e, + 0x65, 0xae, 0x3c, 0xcb, 0x5c, 0x79, 0x96, 0xb8, + 0xf3, 0x2d, 0x71, 0xe6, 0x5a, 0xe3, 0xcc, 0xb5, + 0xc7, 0x99, 0x6b, 0x8f, 0x32, 0xd7, 0x1e, 0x65, + 0xae, 0x3c, 0xcb, 0x5c, 0x79, 0x96, 0xb8, 0xf3, + 0x2d, 0x71, 0xe6, 0x5a, 0xe3, 0xcc, 0xb5, 0xc7, + 0x99, 0x6b, 0x8f, 0x32, 0xd7, 0x1e, 0x65, 0xae, + 0x3c, 0xcb, 0x5c, 0x79, 0x96, 0xb8, 0xf3, 0x2d, + 0x71, 0xe6, 0x50, 0xc3, 0x2c, 0xa4, 0xb0, 0x9b, + 0xf3, 0x67, 0x5f, 0xff, 0xc4, 0x00, 0x2a, 0x10, + 0x00, 0x02, 0x01, 0x02, 0x05, 0x03, 0x05, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x11, 0x00, 0x21, 0x31, 0x41, 0x51, 0x61, + 0xf0, 0xf1, 0x71, 0xc1, 0xd1, 0x10, 0x81, 0x91, + 0xa1, 0xb1, 0x20, 0x40, 0x30, 0xe1, 0x50, 0xff, + 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x3f, + 0x21, 0x3e, 0x0a, 0xf4, 0x21, 0x03, 0xd6, 0x6d, + 0x7e, 0xf3, 0x6b, 0xf7, 0x9b, 0x5f, 0xbc, 0xda, + 0xfd, 0xe6, 0xd7, 0xef, 0x36, 0xbf, 0x79, 0xb5, + 0xfb, 0xcd, 0xaf, 0xde, 0x6d, 0x7e, 0xf3, 0x6b, + 0xf7, 0x9b, 0x5f, 0xbc, 0xda, 0xfd, 0xe6, 0xd7, + 0xef, 0x36, 0xbf, 0x79, 0xb5, 0xfb, 0xcd, 0xaf, + 0xde, 0x6d, 0x7e, 0xf3, 0x6b, 0xf7, 0x9b, 0x5f, + 0xbc, 0xda, 0xfd, 0xe6, 0xd7, 0xef, 0x36, 0xbf, + 0x79, 0xb5, 0xfb, 0xcd, 0xaf, 0xde, 0x6d, 0x7e, + 0xf3, 0x6b, 0xf7, 0x9b, 0x5f, 0xbc, 0xda, 0xfd, + 0xe6, 0xd7, 0xef, 0x36, 0xbf, 0x79, 0xb5, 0xfb, + 0xcd, 0xaf, 0xde, 0x6d, 0x7e, 0xf3, 0x6b, 0xf7, + 0x9b, 0x5f, 0xbc, 0xda, 0xfd, 0xe6, 0xd7, 0xef, + 0x36, 0xbf, 0x79, 0xb5, 0xfb, 0xcd, 0xaf, 0xde, + 0x6d, 0x7e, 0xf3, 0x6b, 0xf7, 0x9b, 0x5f, 0xbc, + 0xda, 0xfd, 0xe6, 0xd7, 0xef, 0x36, 0xbf, 0x79, + 0xb5, 0xfb, 0xcd, 0xaf, 0xde, 0x6d, 0x7e, 0xf3, + 0x6b, 0xf7, 0x9b, 0x5f, 0xbc, 0xda, 0xfd, 0xe6, + 0xd7, 0xef, 0x36, 0xbf, 0x79, 0xb5, 0xfb, 0xcd, + 0xaf, 0xde, 0x6d, 0x7e, 0xf3, 0x6b, 0xf7, 0x9b, + 0x5f, 0xbc, 0xda, 0xfd, 0xe6, 0xd7, 0xef, 0x36, + 0xbf, 0x79, 0xb5, 0xfb, 0xcd, 0xaf, 0xde, 0x6d, + 0x7e, 0xf3, 0x6b, 0xf7, 0x9b, 0x5f, 0xbc, 0xda, + 0xfd, 0xe6, 0xd7, 0xef, 0x36, 0xbf, 0x79, 0xb5, + 0xfb, 0xcd, 0xaf, 0xde, 0x6d, 0x7e, 0xf3, 0x6b, + 0xf7, 0x9b, 0x5f, 0xbc, 0x1e, 0x0a, 0xf5, 0x21, + 0x11, 0xd6, 0x6d, 0x19, 0xe3, 0x8e, 0x38, 0xe3, + 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, + 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, + 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, + 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0xe2, 0xb0, + 0x0e, 0x01, 0x11, 0x2a, 0x08, 0x22, 0x0f, 0xf8, + 0x04, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, + 0x42, 0x11, 0x1b, 0xc6, 0x8d, 0x3b, 0x9c, 0xca, + 0x73, 0x29, 0xcc, 0xa7, 0x32, 0x9c, 0xca, 0x73, + 0x28, 0xe3, 0xa2, 0x55, 0x3b, 0x9c, 0xca, 0x73, + 0x29, 0xcc, 0xa7, 0x32, 0x9c, 0xca, 0x73, 0x28, + 0x8f, 0x20, 0x10, 0x28, 0xdb, 0x37, 0x8c, 0xf1, + 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, + 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, + 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, + 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, + 0x70, 0xfe, 0x54, 0xbf, 0x15, 0xda, 0xa5, 0x25, + 0x0a, 0x9a, 0x0c, 0x25, 0x71, 0x8f, 0x34, 0x64, + 0x0c, 0xa0, 0xf7, 0xfe, 0x85, 0x1a, 0x98, 0x91, + 0xb5, 0x26, 0xdf, 0xf1, 0xdc, 0x32, 0x7a, 0x04, + 0x56, 0x58, 0x3e, 0xdf, 0x42, 0xa8, 0x10, 0x20, + 0x4b, 0x19, 0xc3, 0x2d, 0xfa, 0x08, 0x94, 0x81, + 0xcb, 0x92, 0x10, 0x60, 0x35, 0x76, 0x55, 0xd3, + 0xa2, 0xa0, 0xa2, 0xc5, 0x63, 0x0e, 0xd8, 0x40, + 0x89, 0x88, 0xbb, 0x03, 0xdc, 0x1f, 0x4d, 0xcf, + 0x33, 0x05, 0x6f, 0x9f, 0xe6, 0x02, 0xe4, 0xe8, + 0x2b, 0x0e, 0x1c, 0x64, 0x81, 0x95, 0x40, 0xc4, + 0x02, 0xa4, 0xaa, 0x63, 0x29, 0x31, 0xfb, 0xca, + 0xa0, 0xb4, 0xc7, 0xd6, 0x05, 0x54, 0xe3, 0xe2, + 0xd6, 0xba, 0x68, 0x2f, 0x1a, 0x4b, 0x1d, 0x04, + 0x77, 0xb3, 0x4f, 0x70, 0x20, 0x04, 0x46, 0x0d, + 0x41, 0x13, 0x60, 0xce, 0x77, 0x0c, 0xff, 0x00, + 0xfc, 0xdf, 0xba, 0x9b, 0xce, 0x52, 0x82, 0x4a, + 0xd3, 0xec, 0x0b, 0xfb, 0x42, 0xe1, 0xdd, 0x99, + 0x22, 0x47, 0x22, 0xd9, 0x6a, 0x11, 0x18, 0xdf, + 0xc9, 0xde, 0x50, 0xe2, 0xd2, 0xd1, 0x5a, 0x43, + 0xd7, 0x12, 0x59, 0x40, 0x46, 0x29, 0x29, 0x81, + 0x93, 0x78, 0x79, 0x12, 0x71, 0x10, 0x56, 0x12, + 0x14, 0x14, 0x70, 0x50, 0xde, 0xf1, 0x89, 0xcc, + 0xa2, 0xc2, 0xaa, 0x82, 0x05, 0x88, 0x26, 0x73, + 0x48, 0x0b, 0x26, 0x80, 0x43, 0xae, 0x6a, 0xb2, + 0x88, 0xb1, 0x46, 0x88, 0x0c, 0x33, 0x04, 0x9b, + 0x22, 0xe4, 0x98, 0x9c, 0x02, 0x86, 0x40, 0x46, + 0x37, 0x16, 0x45, 0x9d, 0x4b, 0x82, 0x02, 0x2f, + 0x87, 0x08, 0x1a, 0x44, 0xb7, 0x58, 0xd9, 0x41, + 0x8c, 0x06, 0x06, 0xb6, 0x40, 0x03, 0x72, 0xa4, + 0x13, 0xfc, 0xee, 0x19, 0x3d, 0x04, 0x9f, 0x2c, + 0x73, 0x96, 0x82, 0x28, 0x56, 0x04, 0x96, 0x46, + 0x03, 0xcc, 0x5e, 0xbd, 0x75, 0x1a, 0x04, 0xe0, + 0x08, 0xd4, 0xa9, 0x45, 0x7d, 0x19, 0x49, 0x42, + 0x1b, 0x26, 0x6a, 0x4a, 0x65, 0x27, 0x08, 0x18, + 0xca, 0x9a, 0x0d, 0x1f, 0x99, 0x59, 0x7a, 0x6e, + 0x79, 0x98, 0x55, 0x39, 0x03, 0xa9, 0x6c, 0x6a, + 0x89, 0xf9, 0x9d, 0x12, 0xeb, 0x3b, 0x19, 0x01, + 0xcc, 0x08, 0xe4, 0xd1, 0x98, 0xb1, 0x37, 0x44, + 0xbc, 0x38, 0xa2, 0xf6, 0x16, 0xa2, 0x12, 0xc4, + 0x1e, 0x08, 0xa8, 0x54, 0xc5, 0x21, 0x61, 0x95, + 0x81, 0x3f, 0xab, 0xf9, 0xa5, 0x65, 0x33, 0x2d, + 0x50, 0xb3, 0x44, 0xa5, 0x9b, 0x55, 0x9d, 0x83, + 0x3f, 0xff, 0x00, 0x37, 0xec, 0xa6, 0xf3, 0x94, + 0x10, 0x8a, 0xa0, 0x8a, 0xc4, 0x48, 0xa0, 0x18, + 0x8a, 0x0a, 0xe3, 0x0e, 0x77, 0x8d, 0x9a, 0x00, + 0xb2, 0x00, 0x80, 0x50, 0xa8, 0x00, 0x73, 0x44, + 0x84, 0xc3, 0x61, 0x30, 0x3c, 0x66, 0x0b, 0xdc, + 0xd5, 0x40, 0x04, 0x08, 0x20, 0x36, 0x29, 0x0e, + 0x53, 0x4d, 0x80, 0x0a, 0xf8, 0x4b, 0x46, 0x04, + 0x0c, 0x27, 0xd0, 0x2d, 0xe4, 0x0d, 0x42, 0x63, + 0x10, 0x83, 0x98, 0x14, 0x54, 0x17, 0x8f, 0x42, + 0xca, 0x8d, 0x49, 0x87, 0x04, 0xc3, 0xc9, 0xa0, + 0x26, 0x37, 0x00, 0xa7, 0xd9, 0x0e, 0xa8, 0x05, + 0x45, 0x48, 0x12, 0x29, 0x59, 0x4b, 0xc5, 0xad, + 0x46, 0xa4, 0x09, 0x88, 0x20, 0x80, 0x36, 0x60, + 0xa0, 0xf9, 0xbd, 0x48, 0x44, 0xcb, 0x25, 0xee, + 0x7f, 0x9d, 0xc3, 0x27, 0xa6, 0x01, 0x96, 0x02, + 0xc7, 0x4d, 0x84, 0x11, 0x02, 0x42, 0x19, 0x44, + 0xb8, 0xa4, 0x5f, 0x74, 0x42, 0xe3, 0x2c, 0x03, + 0xa9, 0xce, 0x10, 0x01, 0x1a, 0x83, 0x09, 0xe1, + 0x0b, 0x5e, 0x0d, 0x26, 0x68, 0x1e, 0x9b, 0x9e, + 0x66, 0x5e, 0x3c, 0x16, 0xb8, 0x84, 0x49, 0x04, + 0x22, 0x68, 0x69, 0x09, 0xcd, 0x26, 0x35, 0xc1, + 0x10, 0x2e, 0xc2, 0x95, 0x2d, 0x26, 0x10, 0x30, + 0xf9, 0x80, 0x44, 0x85, 0x40, 0x19, 0x28, 0x20, + 0xcd, 0x6c, 0x22, 0x0a, 0xc0, 0x4b, 0x12, 0x0c, + 0xc3, 0xe4, 0x9e, 0xc0, 0xc0, 0x00, 0x00, 0x02, + 0x03, 0x09, 0x6e, 0xf5, 0x67, 0x60, 0xcf, 0xea, + 0xe1, 0xa0, 0x5a, 0xc4, 0x83, 0xaa, 0x15, 0xfe, + 0x4a, 0x69, 0xa6, 0x9a, 0x69, 0xa6, 0x9a, 0x69, + 0xa6, 0x9a, 0x69, 0xa6, 0x9a, 0x69, 0xa4, 0x10, + 0xd9, 0xd4, 0xf8, 0x61, 0x91, 0x34, 0x2a, 0x45, + 0x81, 0xf7, 0x57, 0xd0, 0x26, 0x20, 0x05, 0xc9, + 0x87, 0x1d, 0x51, 0x41, 0x37, 0x46, 0x6e, 0x8c, + 0xdd, 0x19, 0xba, 0x33, 0x74, 0x66, 0xe8, 0xcd, + 0xd1, 0x9b, 0xa3, 0x37, 0x46, 0x6e, 0x8c, 0xdd, + 0x19, 0xba, 0x33, 0x74, 0x66, 0xe8, 0xcd, 0xd1, + 0x9b, 0xa3, 0x0b, 0x89, 0x44, 0x2c, 0x60, 0x50, + 0x32, 0x80, 0x00, 0x01, 0xf7, 0x37, 0x1f, 0x79, + 0xb8, 0xfb, 0xcd, 0xc7, 0xde, 0x6e, 0x3e, 0xf3, + 0x71, 0xf7, 0x9b, 0x8f, 0xbc, 0xdc, 0x7d, 0xe6, + 0xe3, 0xef, 0x37, 0x1f, 0x79, 0xb8, 0xfb, 0xcd, + 0xc7, 0xde, 0x6e, 0x3e, 0xf3, 0x71, 0xf7, 0x9b, + 0x8f, 0xbc, 0xdc, 0x7d, 0xe1, 0x3b, 0x88, 0x8a, + 0xea, 0x6c, 0xce, 0xf3, 0x66, 0x77, 0x9b, 0x33, + 0xbc, 0xd9, 0x9d, 0xe6, 0xcc, 0xef, 0x36, 0x67, + 0x78, 0xa2, 0x67, 0x51, 0xd6, 0x9b, 0x33, 0xbc, + 0xd9, 0x9d, 0xe6, 0xcc, 0xef, 0x36, 0x67, 0x79, + 0x56, 0xb2, 0x13, 0x3b, 0x78, 0xc4, 0x33, 0x11, + 0x86, 0x62, 0x24, 0xd9, 0x34, 0xcd, 0xe3, 0x3c, + 0x71, 0xc2, 0xc9, 0x21, 0x74, 0xb5, 0x4e, 0xa5, + 0xfc, 0x7f, 0x98, 0x99, 0x91, 0xb2, 0x20, 0xca, + 0x21, 0x00, 0x4e, 0x19, 0x71, 0xf7, 0x08, 0xc3, + 0xd8, 0x9d, 0x64, 0x9c, 0x7c, 0x50, 0x8b, 0xe0, + 0x18, 0x4e, 0x03, 0x38, 0x0c, 0xe0, 0x33, 0x80, + 0xce, 0x03, 0x38, 0x0c, 0xe0, 0x33, 0x80, 0xce, + 0x03, 0x38, 0x0c, 0xe0, 0x33, 0x80, 0xce, 0x03, + 0x38, 0x0c, 0xe0, 0x33, 0x80, 0xce, 0x03, 0x38, + 0x0c, 0xe0, 0x33, 0x80, 0xcb, 0x22, 0x1b, 0x86, + 0x3e, 0x63, 0xe3, 0xaa, 0xdc, 0xc8, 0xf4, 0x32, + 0xa2, 0x55, 0xa4, 0xd5, 0x39, 0x07, 0x89, 0xc8, + 0x3c, 0x4e, 0x41, 0xe2, 0x72, 0x0f, 0x13, 0x90, + 0x78, 0x9c, 0x83, 0xc4, 0xe4, 0x1e, 0x27, 0x20, + 0xf1, 0x39, 0x07, 0x89, 0xc8, 0x3c, 0x4e, 0x41, + 0xe2, 0x72, 0x0f, 0x13, 0x90, 0x78, 0x9c, 0x83, + 0xc4, 0xe4, 0x1e, 0x27, 0x20, 0xf1, 0x39, 0x07, + 0x89, 0xc8, 0x3c, 0x4e, 0x41, 0xe2, 0x72, 0x0f, + 0x13, 0x90, 0x78, 0x83, 0xe2, 0x2c, 0x0b, 0xce, + 0x06, 0x92, 0xc0, 0x06, 0x23, 0x7b, 0x0a, 0x66, + 0xf3, 0x9f, 0xd7, 0x6a, 0xcf, 0xfe, 0x01, 0x22, + 0xc7, 0x06, 0xa4, 0xa1, 0x0e, 0x61, 0xb3, 0xda, + 0x22, 0xea, 0x69, 0x8c, 0x35, 0xe5, 0x86, 0xcc, + 0x8b, 0x15, 0x84, 0x37, 0xe7, 0xa4, 0xc2, 0x4b, + 0x16, 0xee, 0x33, 0xca, 0x12, 0x28, 0x0a, 0xa3, + 0x34, 0xd5, 0xbb, 0x82, 0x21, 0x66, 0xa8, 0x2c, + 0x90, 0x02, 0x02, 0x5d, 0xc9, 0xf6, 0x0e, 0x1e, + 0xc8, 0xcd, 0xde, 0x8c, 0x31, 0x57, 0xb2, 0x10, + 0x48, 0x82, 0x11, 0x18, 0x7f, 0xc2, 0x81, 0x80, + 0x03, 0xf4, 0x9a, 0x34, 0x78, 0xeb, 0x9d, 0x73, + 0xae, 0x75, 0xce, 0xb9, 0xd7, 0x3a, 0xe1, 0x29, + 0x14, 0x81, 0x56, 0x96, 0x85, 0xe9, 0x69, 0x4d, + 0x5d, 0x8d, 0x62, 0x25, 0x5c, 0x65, 0x2e, 0x0f, + 0x70, 0x23, 0xd4, 0xc1, 0x7e, 0x15, 0x8e, 0x0b, + 0x75, 0x9a, 0x98, 0x8c, 0x86, 0x75, 0x64, 0xe5, + 0xe9, 0x9e, 0x44, 0x3a, 0x98, 0x2e, 0x58, 0x09, + 0x24, 0x2e, 0x3d, 0x31, 0x8a, 0x99, 0x64, 0xc5, + 0xa4, 0x84, 0x04, 0x04, 0xd4, 0x08, 0x83, 0x94, + 0xeb, 0x9d, 0x73, 0xae, 0x75, 0xce, 0xb9, 0xd7, + 0x2f, 0xc7, 0x43, 0x00, 0x89, 0xb1, 0xfd, 0xa1, + 0xc1, 0xdd, 0x88, 0x43, 0xd6, 0xab, 0xa9, 0x85, + 0x14, 0x1b, 0x51, 0x46, 0xac, 0x69, 0x9f, 0xcd, + 0x57, 0x54, 0x6a, 0x8c, 0xc2, 0x56, 0x26, 0x10, + 0xf5, 0xed, 0xc2, 0x60, 0x38, 0x17, 0xba, 0x84, + 0x21, 0x1a, 0x62, 0xd1, 0x56, 0x17, 0xaf, 0xad, + 0x18, 0x85, 0x4f, 0x5a, 0x07, 0x58, 0x6d, 0xbd, + 0x43, 0xdc, 0x3a, 0xff, 0x00, 0x35, 0x4a, 0x36, + 0x70, 0x07, 0x58, 0x31, 0x86, 0xaf, 0xa8, 0xc4, + 0x6e, 0x60, 0x6d, 0x39, 0xfd, 0x77, 0xac, 0xff, + 0x00, 0xe0, 0x5e, 0x6b, 0xb7, 0x41, 0x4f, 0xba, + 0xfb, 0x47, 0xe0, 0xd8, 0x47, 0xcf, 0x1b, 0x1e, + 0x91, 0xb1, 0x7a, 0x42, 0x32, 0x2b, 0x79, 0x4c, + 0x02, 0xb0, 0x00, 0xc3, 0x1e, 0x9f, 0x47, 0x29, + 0x80, 0xcd, 0xea, 0x04, 0x4d, 0xa8, 0x32, 0xd2, + 0x64, 0x09, 0xc1, 0x82, 0x0f, 0x35, 0x18, 0xfe, + 0xf4, 0x08, 0x50, 0xe8, 0x30, 0xc2, 0x26, 0x69, + 0x0b, 0x76, 0x24, 0xbf, 0xe1, 0xf4, 0xf0, 0xa7, + 0x9c, 0x5a, 0xa6, 0x6a, 0x99, 0xaa, 0x66, 0xa9, + 0x9a, 0xa6, 0x6a, 0x99, 0xaa, 0x60, 0xf8, 0xdf, + 0xb4, 0x8a, 0xa1, 0xe2, 0xa8, 0x16, 0x04, 0x83, + 0xf0, 0xe2, 0x17, 0x7b, 0x18, 0x03, 0x71, 0x53, + 0x8c, 0x08, 0x62, 0xc2, 0xc4, 0xbe, 0xad, 0x34, + 0x85, 0x0f, 0x2d, 0x8e, 0x83, 0x70, 0x30, 0x66, + 0xb0, 0xe6, 0x6b, 0x05, 0xc3, 0x56, 0x6a, 0x56, + 0x1e, 0xbd, 0x8d, 0x5d, 0x77, 0x47, 0x88, 0x0b, + 0xc4, 0x8e, 0x23, 0x5e, 0xe2, 0x20, 0xf2, 0x89, + 0x8e, 0x66, 0x6a, 0x99, 0xaa, 0x66, 0xa9, 0x9a, + 0xa6, 0x6a, 0x99, 0xaa, 0x61, 0x1a, 0xc6, 0x0d, + 0xa3, 0x38, 0x69, 0x01, 0xa7, 0x73, 0x35, 0xa6, + 0xb4, 0x57, 0xb8, 0x8c, 0x45, 0x0c, 0x45, 0xa2, + 0x18, 0x46, 0x18, 0xc8, 0x2e, 0x5c, 0xf1, 0x80, + 0x81, 0x3e, 0x8a, 0xe7, 0xac, 0xef, 0xf3, 0x02, + 0x8c, 0x3d, 0xc4, 0x80, 0x3f, 0x24, 0x77, 0x5d, + 0x38, 0xb1, 0x1c, 0x0a, 0x05, 0x12, 0x35, 0x6a, + 0x70, 0x10, 0xb0, 0x3a, 0x31, 0x58, 0x58, 0xb8, + 0x29, 0x58, 0x03, 0x30, 0x5d, 0x7a, 0x5a, 0xec, + 0xba, 0x21, 0xa9, 0x8c, 0x01, 0x71, 0xad, 0xec, + 0xb7, 0xd4, 0x28, 0x75, 0xa7, 0xea, 0x71, 0x8d, + 0x24, 0x0b, 0x08, 0x91, 0x50, 0x65, 0x9e, 0xa0, + 0x26, 0x70, 0xd9, 0x6e, 0x92, 0xc9, 0x3e, 0x85, + 0x24, 0xc1, 0x03, 0x1d, 0x60, 0x09, 0x1f, 0x58, + 0xb1, 0x86, 0xa4, 0xc3, 0x18, 0x20, 0xb9, 0xb6, + 0x44, 0x6e, 0x09, 0x40, 0x63, 0x0e, 0x81, 0x85, + 0x84, 0x12, 0x02, 0x08, 0x20, 0x30, 0x9e, 0xa8, + 0x19, 0xad, 0x35, 0xa6, 0xb4, 0xfb, 0xc3, 0xf0, + 0x7a, 0x10, 0xd8, 0x73, 0xfa, 0xee, 0x19, 0xff, + 0x00, 0x9d, 0xf4, 0xf0, 0x40, 0x24, 0xc1, 0xa7, + 0x53, 0x44, 0x70, 0x34, 0x88, 0x38, 0x7f, 0x75, + 0x55, 0x40, 0x50, 0x0a, 0x59, 0x51, 0x2f, 0xbd, + 0x70, 0x0a, 0x65, 0xb4, 0xa4, 0x8a, 0x48, 0xa9, + 0xd0, 0xdc, 0x40, 0x44, 0x1c, 0x14, 0x2e, 0x37, + 0x08, 0x6a, 0xc1, 0x53, 0xed, 0xa7, 0xb4, 0xc9, + 0x84, 0x82, 0xa7, 0x43, 0x84, 0x65, 0x50, 0x53, + 0x14, 0x26, 0xf5, 0x80, 0x09, 0xf6, 0x22, 0xdf, + 0xd0, 0xff, 0x00, 0x85, 0x55, 0x47, 0x2a, 0xb6, + 0xba, 0x18, 0xbe, 0xe0, 0x0f, 0x10, 0x09, 0x27, + 0xde, 0x08, 0x4b, 0x1f, 0xd0, 0x96, 0x3f, 0x67, + 0x4c, 0xe9, 0x82, 0xc3, 0x05, 0x33, 0x50, 0x33, + 0x85, 0xda, 0x5e, 0x93, 0xd4, 0x45, 0x0c, 0x41, + 0x97, 0x44, 0x42, 0x48, 0x41, 0x04, 0x60, 0xc9, + 0x60, 0x68, 0xdb, 0x55, 0xd6, 0x5c, 0x1a, 0x54, + 0x67, 0x64, 0x95, 0xb9, 0x1e, 0x15, 0x49, 0xbd, + 0x71, 0x83, 0x0a, 0x18, 0x23, 0x58, 0x73, 0x22, + 0x38, 0x32, 0x60, 0x84, 0xc4, 0x8f, 0x6c, 0x75, + 0x19, 0x6a, 0x21, 0x14, 0x64, 0xe6, 0x81, 0x43, + 0xff, 0x00, 0xbe, 0x16, 0x10, 0x17, 0xb4, 0xb2, + 0x8b, 0x34, 0x2b, 0x59, 0x84, 0xbe, 0xe4, 0xa1, + 0xab, 0x61, 0x57, 0x7d, 0xe9, 0x04, 0x92, 0x00, + 0x2e, 0x5a, 0x38, 0x03, 0x52, 0x8d, 0xe8, 0xd3, + 0xd9, 0x9d, 0x33, 0xa6, 0x34, 0x79, 0xd0, 0x10, + 0xcc, 0x31, 0x47, 0xa3, 0x0d, 0xc7, 0x3c, 0x71, + 0xcd, 0xc3, 0x3f, 0xe5, 0x66, 0xcf, 0x56, 0x40, + 0xc0, 0x0d, 0x68, 0x65, 0x3d, 0x66, 0x9c, 0x4f, + 0xb7, 0xe2, 0x64, 0xa2, 0x1c, 0x0f, 0x63, 0x35, + 0xf6, 0x80, 0x4d, 0xd8, 0x02, 0x15, 0xa2, 0x09, + 0x70, 0x79, 0x5c, 0xa2, 0x4d, 0x2e, 0xbb, 0xc2, + 0x2b, 0x86, 0x2a, 0x1f, 0xb8, 0x6b, 0x55, 0x1a, + 0x31, 0xde, 0x44, 0x49, 0x50, 0xd0, 0xf5, 0x84, + 0xa1, 0x72, 0x88, 0xa2, 0x63, 0x0c, 0x6f, 0x02, + 0xad, 0x48, 0xb2, 0x2b, 0x7e, 0xe5, 0xee, 0x11, + 0xb5, 0x06, 0x89, 0x65, 0x02, 0x02, 0x17, 0xac, + 0x7a, 0x1e, 0x29, 0x10, 0x9e, 0x78, 0xc2, 0xf7, + 0x90, 0xf0, 0x05, 0x59, 0x6c, 0x1a, 0x54, 0x40, + 0x8d, 0x2d, 0x48, 0x08, 0x35, 0xc1, 0xa0, 0x03, + 0xef, 0xfa, 0xfa, 0xf8, 0x24, 0x4c, 0x58, 0xfc, + 0x98, 0x84, 0xc4, 0x2f, 0x23, 0x31, 0xfe, 0x5c, + 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, + 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x10, 0x7a, + 0x5c, 0x8f, 0x89, 0x7c, 0x22, 0x44, 0x2c, 0x18, + 0xf4, 0x17, 0xb9, 0xd4, 0x2a, 0x29, 0x56, 0xf3, + 0x96, 0x8e, 0x5a, 0x39, 0x68, 0xe5, 0xa3, 0x96, + 0x8e, 0x5a, 0x39, 0x68, 0xe5, 0xa3, 0x96, 0x8e, + 0x5a, 0x39, 0x68, 0xe5, 0xa3, 0x96, 0x8e, 0x5a, + 0x39, 0x68, 0xe5, 0xa3, 0x96, 0x8e, 0x5a, 0x39, + 0x68, 0xe5, 0xa3, 0x96, 0x81, 0x09, 0x4a, 0x50, + 0x6a, 0x15, 0x4a, 0x82, 0x5f, 0xd1, 0x86, 0xe3, + 0x9f, 0xd7, 0x74, 0xcf, 0xf9, 0x34, 0x62, 0xd1, + 0x57, 0x98, 0xfc, 0x82, 0x9c, 0x20, 0x2f, 0x32, + 0x20, 0x4d, 0x26, 0xc3, 0x44, 0x74, 0xbf, 0xf2, + 0x57, 0x48, 0x92, 0x5f, 0xca, 0x06, 0x21, 0x8f, + 0xf5, 0xdc, 0xa9, 0x84, 0xfe, 0x9b, 0x5d, 0x02, + 0xa3, 0xe1, 0xef, 0x29, 0x93, 0x6a, 0xf9, 0x05, + 0xd3, 0x08, 0x07, 0x32, 0x29, 0x16, 0x3a, 0xbc, + 0xc1, 0xbc, 0xd2, 0x4e, 0xa1, 0x21, 0x41, 0xd1, + 0xd6, 0x04, 0x94, 0x20, 0x04, 0xde, 0xa4, 0x92, + 0x65, 0x27, 0xa8, 0x5a, 0x34, 0xae, 0xad, 0x09, + 0x16, 0x18, 0x56, 0x60, 0x5f, 0x00, 0x20, 0xb5, + 0x82, 0xa1, 0xb2, 0x15, 0xcb, 0x19, 0x4f, 0x28, + 0x3e, 0xbc, 0xd1, 0xb7, 0xf3, 0xf4, 0xf1, 0xf7, + 0x7b, 0x4b, 0x5b, 0xe9, 0xfd, 0x99, 0xee, 0x2b, + 0x9a, 0x52, 0x59, 0xeb, 0x84, 0x6f, 0x8c, 0x2a, + 0x02, 0x20, 0xe0, 0xe9, 0xf7, 0x83, 0xd1, 0x1c, + 0xc9, 0x78, 0xbe, 0x89, 0xd6, 0xb0, 0x6a, 0x3e, + 0x47, 0x05, 0xd8, 0x59, 0x5e, 0xb1, 0xed, 0x92, + 0x04, 0x14, 0x77, 0x05, 0x5c, 0xcb, 0x0c, 0xaf, + 0xe0, 0x96, 0x97, 0x54, 0x35, 0x87, 0x30, 0x46, + 0xfa, 0x16, 0xdd, 0x59, 0xd6, 0xf6, 0x86, 0xd1, + 0x88, 0xdd, 0x2a, 0x40, 0x15, 0xa3, 0x0f, 0xdd, + 0x00, 0x94, 0x8a, 0x9b, 0x6a, 0xff, 0x00, 0x88, + 0xdf, 0x77, 0xfc, 0x06, 0xc8, 0xcc, 0xc2, 0xed, + 0xc3, 0x24, 0x7f, 0xed, 0x49, 0x09, 0xb6, 0x51, + 0x39, 0x74, 0x18, 0x42, 0xee, 0x00, 0xea, 0x48, + 0x96, 0x22, 0x8d, 0xd6, 0x03, 0x1c, 0x3e, 0xb3, + 0x96, 0x1e, 0x06, 0xad, 0x68, 0xc0, 0x42, 0x7e, + 0x03, 0x24, 0x31, 0x45, 0x81, 0xa3, 0x73, 0x0b, + 0x2e, 0x50, 0x66, 0xea, 0x68, 0x31, 0x54, 0xb8, + 0x85, 0x53, 0xb9, 0xc0, 0x83, 0x20, 0x1f, 0x75, + 0xb3, 0x52, 0xbb, 0x50, 0xb0, 0xa0, 0x36, 0x15, + 0x3f, 0x52, 0xab, 0x81, 0x89, 0xd4, 0x45, 0xc0, + 0xb0, 0xbd, 0xe2, 0x0b, 0x62, 0x35, 0xa2, 0x6a, + 0x0b, 0x00, 0x0d, 0x43, 0x14, 0x8c, 0x44, 0xac, + 0x28, 0x67, 0x75, 0x32, 0x42, 0xd5, 0xa4, 0x3d, + 0x01, 0x2a, 0x40, 0xb8, 0x44, 0xe4, 0xce, 0xa7, + 0x59, 0x74, 0x31, 0xa3, 0xa0, 0xd6, 0xbb, 0x18, + 0x55, 0x61, 0x0f, 0xdc, 0x15, 0x89, 0xe4, 0x88, + 0x25, 0x88, 0x37, 0x75, 0x84, 0x9c, 0x04, 0x38, + 0x90, 0x4d, 0x2b, 0x7b, 0xfb, 0xff, 0x00, 0x1b, + 0x76, 0x5e, 0xb4, 0x36, 0x9c, 0xfe, 0xbb, 0x26, + 0x7f, 0xc8, 0x91, 0x0e, 0x60, 0x88, 0x89, 0xd6, + 0x40, 0x6b, 0xf3, 0x3e, 0xf7, 0x2a, 0x60, 0x04, + 0x03, 0x0a, 0x90, 0xdc, 0xe6, 0xad, 0x2b, 0xe4, + 0x23, 0x03, 0xac, 0x31, 0x8c, 0xf9, 0x8f, 0xe2, + 0x94, 0x96, 0x91, 0x02, 0x3b, 0x12, 0xf3, 0x54, + 0x2c, 0x9e, 0xe7, 0xd4, 0x19, 0x01, 0x39, 0x6b, + 0xe6, 0x59, 0xc2, 0x73, 0xcb, 0xee, 0xe4, 0xc7, + 0x11, 0x41, 0x48, 0x30, 0x0b, 0xa3, 0x7f, 0x20, + 0xfe, 0xbe, 0x9e, 0x3e, 0xcf, 0x69, 0x6b, 0x7d, + 0x3f, 0xb5, 0x6a, 0xf7, 0xed, 0xe1, 0x55, 0x6a, + 0x97, 0x5e, 0xd0, 0x62, 0x11, 0xf7, 0x56, 0x0f, + 0xc2, 0x11, 0x20, 0x01, 0xc3, 0x05, 0x00, 0xbe, + 0x05, 0xe6, 0x1d, 0x35, 0x40, 0x12, 0x21, 0xa5, + 0x13, 0x2c, 0x08, 0xa5, 0x25, 0x30, 0x50, 0x22, + 0x11, 0xfa, 0x98, 0x7e, 0x43, 0x20, 0x51, 0xaa, + 0xe1, 0xb2, 0x8e, 0xfa, 0x0a, 0x88, 0xc5, 0xd9, + 0xa3, 0xa5, 0x2a, 0x60, 0xaf, 0x07, 0x00, 0xc1, + 0x43, 0x11, 0xbe, 0x60, 0x4d, 0x60, 0x02, 0xfb, + 0x7f, 0xc4, 0x6f, 0xb3, 0xfe, 0x0c, 0x4e, 0x04, + 0xc8, 0x24, 0x31, 0x87, 0x51, 0x0c, 0x50, 0xea, + 0x89, 0x3a, 0xbf, 0x42, 0xf8, 0x8e, 0xc2, 0xa5, + 0x60, 0x80, 0x00, 0x74, 0x17, 0x6e, 0xd4, 0x8c, + 0x39, 0x0a, 0x5a, 0x01, 0x53, 0x6f, 0x61, 0x8b, + 0x03, 0x0c, 0x91, 0x2d, 0xb2, 0xe8, 0xc8, 0xdf, + 0x3a, 0x43, 0x3b, 0xc2, 0xd2, 0x20, 0xb2, 0x9a, + 0x8a, 0xf2, 0xdc, 0xe5, 0xc6, 0xb8, 0xc6, 0xcc, + 0x20, 0xc9, 0x99, 0x5e, 0x34, 0xd0, 0xea, 0x04, + 0x2f, 0x03, 0xf8, 0x33, 0x20, 0x28, 0x24, 0xb2, + 0xfd, 0x84, 0x34, 0x0f, 0x11, 0xf8, 0x08, 0x03, + 0x32, 0x78, 0xd8, 0xd6, 0x19, 0x69, 0x54, 0xd0, + 0xd6, 0x14, 0x34, 0x98, 0xe4, 0x60, 0x88, 0x0c, + 0x78, 0x85, 0x86, 0x59, 0x83, 0xa8, 0x85, 0x44, + 0x13, 0x84, 0x4a, 0x83, 0x6b, 0x10, 0x08, 0x1d, + 0x2a, 0xa6, 0x77, 0x80, 0xc7, 0x01, 0x36, 0xb0, + 0x91, 0x8d, 0xa5, 0x3c, 0xd2, 0xc9, 0x91, 0x2f, + 0xe3, 0x6e, 0xcb, 0xd6, 0xa6, 0xfb, 0x9f, 0xd7, + 0x6c, 0xcf, 0xf9, 0x1f, 0x76, 0x9a, 0x4d, 0x02, + 0x00, 0x50, 0x9e, 0x14, 0x80, 0xb2, 0x9e, 0xd1, + 0x42, 0x8f, 0x45, 0x46, 0x62, 0x25, 0x1d, 0x0c, + 0x22, 0x39, 0x0a, 0x75, 0x84, 0x74, 0x6d, 0xb5, + 0x48, 0xc6, 0x02, 0x41, 0x03, 0x93, 0x80, 0x03, + 0xf6, 0x81, 0x29, 0x80, 0xd5, 0x8b, 0x20, 0xc4, + 0x98, 0x6a, 0x1a, 0x82, 0x92, 0x45, 0x4d, 0x2b, + 0x2b, 0x65, 0x1c, 0x8a, 0x18, 0x0e, 0x0a, 0x18, + 0xa3, 0x64, 0x55, 0x71, 0x13, 0x6a, 0x91, 0x43, + 0x81, 0x84, 0xa5, 0x20, 0x30, 0xaa, 0xd0, 0xd3, + 0x15, 0x2a, 0x9c, 0x66, 0x02, 0xa0, 0x15, 0xc1, + 0x7c, 0x10, 0xb3, 0x5a, 0x6e, 0xc4, 0x6c, 0xd2, + 0x91, 0x21, 0x15, 0x02, 0xc4, 0x44, 0xa2, 0x99, + 0xc3, 0xef, 0x29, 0xa3, 0x61, 0xb2, 0x3f, 0xcf, + 0xd5, 0xc7, 0xdd, 0xed, 0x07, 0x84, 0x51, 0x71, + 0x8d, 0x44, 0xdc, 0x1d, 0xa6, 0xe0, 0xed, 0x37, + 0x07, 0x69, 0xb8, 0x3b, 0x4d, 0xc1, 0xda, 0x6e, + 0x0e, 0xd3, 0x70, 0x76, 0x9b, 0x83, 0xb4, 0xdc, + 0x1d, 0xa6, 0xe0, 0xed, 0x37, 0x07, 0x69, 0xb8, + 0x3b, 0x4d, 0xc1, 0xda, 0x6e, 0x0e, 0xd3, 0x70, + 0x76, 0x9b, 0x83, 0xb4, 0xdc, 0x1d, 0xa6, 0xe0, + 0xed, 0x37, 0x07, 0x69, 0xb8, 0x3b, 0x4d, 0xc1, + 0xda, 0x08, 0x13, 0x42, 0x07, 0x00, 0x45, 0xbd, + 0x1c, 0x57, 0x70, 0x60, 0xb8, 0x17, 0xd4, 0xe4, + 0x53, 0x91, 0x40, 0x6c, 0x36, 0x63, 0xfc, 0x72, + 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, + 0x82, 0x08, 0x20, 0x82, 0x08, 0x0c, 0x99, 0xb9, + 0x49, 0xa9, 0xe7, 0xd3, 0xd7, 0xa6, 0xfb, 0x9e, + 0x38, 0xe6, 0xd9, 0x9f, 0xf2, 0x40, 0x4d, 0xce, + 0x19, 0x06, 0x01, 0x9c, 0xa9, 0xd8, 0x7d, 0x09, + 0x0b, 0x19, 0x14, 0xa5, 0x3d, 0x74, 0x11, 0x4f, + 0xc4, 0x44, 0xac, 0x22, 0x41, 0x40, 0x5a, 0x98, + 0x4c, 0x65, 0x84, 0x13, 0x49, 0xd5, 0x62, 0x66, + 0x37, 0xbe, 0xa8, 0xc2, 0x2b, 0x52, 0x48, 0x20, + 0x06, 0x7d, 0x84, 0x19, 0x6d, 0xc1, 0x44, 0x52, + 0x8f, 0x60, 0x60, 0x20, 0x59, 0x47, 0x95, 0x4d, + 0x2c, 0xe8, 0x46, 0x59, 0xb3, 0x1e, 0xd2, 0x67, + 0xc1, 0x18, 0x59, 0xc7, 0xf4, 0xfb, 0x41, 0xd0, + 0x8e, 0x2b, 0x2a, 0x19, 0xc2, 0x60, 0x03, 0x8f, + 0x09, 0xd0, 0xd6, 0xc0, 0x43, 0x49, 0x56, 0x48, + 0x06, 0x80, 0xd0, 0x0f, 0xe7, 0xea, 0xe3, 0xef, + 0x76, 0x96, 0xb7, 0xd3, 0xf9, 0x17, 0xce, 0x10, + 0x5e, 0x65, 0x13, 0x9c, 0x65, 0x68, 0xd5, 0x69, + 0x18, 0x8a, 0x37, 0x38, 0x54, 0x08, 0xc2, 0x87, + 0x55, 0x2a, 0x7c, 0xc1, 0xd4, 0x89, 0x8b, 0xea, + 0x3a, 0xd9, 0x42, 0x97, 0x80, 0x8d, 0x51, 0x21, + 0xf5, 0x28, 0x86, 0x5e, 0xe2, 0x08, 0x05, 0x43, + 0x8d, 0x15, 0x2b, 0xad, 0x52, 0x20, 0xab, 0xeb, + 0x18, 0xe0, 0x05, 0x62, 0xc8, 0xfb, 0x4a, 0x45, + 0xbd, 0xf0, 0x4a, 0xdd, 0x46, 0x68, 0x8c, 0x20, + 0x40, 0x7b, 0x45, 0x50, 0x22, 0xa1, 0xa1, 0x9c, + 0x54, 0x61, 0x8d, 0x16, 0x16, 0x6e, 0xfa, 0x1d, + 0x2a, 0x0c, 0xd9, 0x54, 0x3e, 0x3e, 0xb0, 0xa5, + 0x42, 0x2a, 0x46, 0xa7, 0xff, 0x00, 0x80, 0xc7, + 0x47, 0x09, 0xc9, 0xa0, 0xd2, 0x16, 0x4c, 0x24, + 0xba, 0x2c, 0x42, 0xea, 0xd6, 0x95, 0x41, 0x0c, + 0x48, 0x1c, 0x3d, 0x13, 0x26, 0xc0, 0x41, 0x88, + 0x7b, 0x0c, 0x4c, 0x2e, 0x3a, 0x4e, 0x1c, 0x29, + 0xcb, 0x51, 0x41, 0x29, 0x28, 0x86, 0x07, 0xef, + 0x03, 0x8e, 0x16, 0x7e, 0x56, 0xb2, 0x8f, 0xba, + 0x34, 0x0a, 0x8c, 0x61, 0x80, 0x00, 0xd2, 0xc9, + 0xad, 0x2d, 0x59, 0x51, 0x11, 0x04, 0x57, 0x00, + 0xf8, 0xc5, 0x2a, 0xfc, 0x67, 0x44, 0xc0, 0x58, + 0x5c, 0xab, 0x3d, 0x02, 0x1f, 0x09, 0x95, 0x49, + 0x3f, 0x18, 0x06, 0xbc, 0x4d, 0xa1, 0x54, 0x51, + 0x89, 0xfa, 0xcf, 0xcc, 0x74, 0x94, 0x57, 0x04, + 0x12, 0x04, 0x8a, 0xb5, 0x09, 0x64, 0x17, 0xec, + 0x52, 0x62, 0x37, 0xc2, 0x7e, 0x99, 0x39, 0x91, + 0x08, 0x10, 0xa3, 0x03, 0x12, 0x53, 0x05, 0xd0, + 0x08, 0xd2, 0x0e, 0xb3, 0x60, 0xc3, 0x4a, 0xe6, + 0x98, 0xdf, 0x18, 0x47, 0xab, 0x42, 0x9a, 0xe0, + 0xe8, 0xa0, 0x08, 0xbd, 0xca, 0x22, 0x2a, 0x17, + 0x01, 0xb1, 0x92, 0xd6, 0x34, 0xc0, 0xb0, 0xd5, + 0x12, 0x06, 0xf6, 0xec, 0x8c, 0x65, 0xd3, 0xe4, + 0xaa, 0x38, 0xa1, 0xd2, 0xa8, 0x7d, 0xfd, 0xea, + 0xb4, 0x25, 0x34, 0x89, 0x55, 0x71, 0xa3, 0xc4, + 0x58, 0x19, 0x80, 0xc3, 0x72, 0x70, 0x13, 0xa1, + 0x0e, 0xd2, 0xf6, 0x84, 0x59, 0x30, 0xab, 0x80, + 0xa3, 0x38, 0x12, 0xd0, 0xd3, 0x51, 0xea, 0xa9, + 0xb2, 0xe7, 0x8e, 0x39, 0xb6, 0x67, 0xfc, 0x8d, + 0x4e, 0x21, 0x12, 0x0c, 0xfc, 0x42, 0x1f, 0x48, + 0x21, 0x50, 0xe2, 0x9d, 0x60, 0x71, 0x00, 0x84, + 0xc8, 0xd1, 0xda, 0x5e, 0xbd, 0x26, 0x3a, 0xa3, + 0x19, 0x72, 0xbd, 0x70, 0x74, 0x03, 0x29, 0x0e, + 0x6a, 0xa6, 0xba, 0x88, 0xee, 0xfe, 0xf2, 0x5e, + 0xe8, 0xba, 0x4a, 0xf3, 0xd7, 0x5a, 0xba, 0x13, + 0x29, 0xb5, 0xc3, 0xc1, 0xd0, 0x0d, 0xa2, 0xaa, + 0x42, 0xe8, 0x4b, 0x3c, 0xe0, 0x00, 0x42, 0xab, + 0x96, 0x15, 0x26, 0x8a, 0x8a, 0x6a, 0xcf, 0x3b, + 0x40, 0x69, 0x28, 0x7f, 0x6c, 0x44, 0xb5, 0xd6, + 0x19, 0x4a, 0x30, 0xb4, 0x8e, 0xbf, 0x3f, 0xcf, + 0xd1, 0xc7, 0xde, 0xed, 0x2d, 0x6f, 0xa7, 0xf2, + 0x60, 0x01, 0x0a, 0x95, 0x19, 0xc5, 0x66, 0x01, + 0x54, 0x74, 0xb4, 0x54, 0xbc, 0xac, 0xc6, 0xfc, + 0x55, 0x90, 0xd0, 0x41, 0x88, 0xf7, 0x8c, 0x30, + 0x00, 0xd5, 0xc4, 0xb2, 0x49, 0x43, 0xf3, 0x08, + 0x4a, 0xb1, 0x62, 0x91, 0x8d, 0xca, 0x96, 0x63, + 0x23, 0x07, 0x1e, 0x20, 0xac, 0x19, 0xd7, 0xd5, + 0xce, 0x10, 0x95, 0xe1, 0xbe, 0x21, 0xf4, 0xbd, + 0x0e, 0x10, 0xf2, 0x30, 0xf4, 0x62, 0x1a, 0x08, + 0x54, 0xe1, 0x8c, 0x0c, 0xd4, 0xcb, 0x61, 0x81, + 0x05, 0x1c, 0x08, 0x7b, 0xc3, 0xcd, 0x17, 0xd0, + 0x84, 0x24, 0x7d, 0x3f, 0xa8, 0x04, 0x48, 0x1a, + 0xf8, 0x3c, 0x2c, 0x52, 0xa3, 0xde, 0xa1, 0x3b, + 0x3d, 0x9f, 0xf0, 0x18, 0x3e, 0x97, 0xb9, 0x0a, + 0x97, 0x80, 0x88, 0x08, 0x27, 0x2a, 0xa5, 0xac, + 0xb8, 0x66, 0xba, 0xc1, 0xfb, 0xa9, 0x05, 0xeb, + 0x84, 0x8c, 0x2b, 0xa9, 0xa8, 0x48, 0x9b, 0x89, + 0x10, 0x44, 0x66, 0xc0, 0x02, 0xe4, 0x06, 0x82, + 0x43, 0x1c, 0xe1, 0x30, 0x08, 0xbd, 0x78, 0x9a, + 0x47, 0xa8, 0x41, 0xa6, 0x1a, 0xc0, 0xb3, 0x8c, + 0x60, 0xc5, 0x06, 0xc6, 0x42, 0xb8, 0x25, 0x8c, + 0xc3, 0x23, 0xe5, 0x04, 0x01, 0xe2, 0x7c, 0x60, + 0xa3, 0x44, 0xa3, 0x69, 0x0f, 0x5a, 0xbd, 0x5c, + 0x5c, 0xd6, 0xc5, 0xb1, 0x52, 0x42, 0xb0, 0x1e, + 0x88, 0x8f, 0x84, 0x82, 0x86, 0xee, 0x34, 0x17, + 0xa4, 0x06, 0x00, 0xf0, 0x80, 0x19, 0x25, 0x63, + 0x04, 0x60, 0x0d, 0xa1, 0x00, 0xc9, 0x83, 0x48, + 0x05, 0x14, 0xdf, 0x00, 0x9f, 0x61, 0x04, 0xb4, + 0x20, 0x55, 0x53, 0x21, 0x52, 0xf4, 0xb2, 0x8a, + 0xdb, 0x84, 0x03, 0x60, 0x15, 0x09, 0xca, 0x01, + 0x90, 0x37, 0x9b, 0x12, 0x68, 0x3d, 0x8c, 0x66, + 0x83, 0x21, 0x00, 0x24, 0x09, 0xc7, 0x30, 0x7f, + 0xf6, 0x3b, 0x58, 0x21, 0x00, 0x31, 0x60, 0x28, + 0x54, 0x01, 0x38, 0x85, 0xd9, 0xf1, 0x00, 0x85, + 0xe5, 0x5a, 0x45, 0x7a, 0xc0, 0xa4, 0xce, 0x20, + 0x2c, 0x45, 0xd6, 0xd5, 0xc0, 0x34, 0x3f, 0x01, + 0x41, 0x39, 0xe8, 0x22, 0x6b, 0xd2, 0x82, 0x11, + 0x2a, 0x74, 0x2a, 0x68, 0xad, 0x7a, 0xde, 0xd2, + 0xd1, 0x0a, 0xbd, 0x6a, 0x36, 0xc6, 0xa5, 0x7a, + 0x94, 0xd9, 0x73, 0xfa, 0xef, 0x99, 0xff, 0x00, + 0xa0, 0xc7, 0xda, 0xed, 0x1d, 0x15, 0xc9, 0xc9, + 0x6f, 0xf3, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, + 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x04, + 0x3c, 0x40, 0x8c, 0x01, 0x4f, 0x4e, 0x89, 0x97, + 0x8e, 0xba, 0x18, 0x4e, 0x26, 0xa7, 0x02, 0x87, + 0xc8, 0x9b, 0xc3, 0xb4, 0xde, 0x1d, 0xa6, 0xf0, + 0xed, 0x37, 0x87, 0x69, 0xbc, 0x3b, 0x4d, 0xe1, + 0xda, 0x6f, 0x0e, 0xd3, 0x78, 0x76, 0x9b, 0xc3, + 0xb4, 0xde, 0x1d, 0xa6, 0xf0, 0xed, 0x37, 0x87, + 0x69, 0xbc, 0x3b, 0x4d, 0xe1, 0xda, 0x6f, 0x0e, + 0xd3, 0x78, 0x76, 0x9b, 0xc3, 0xb4, 0xde, 0x1d, + 0xa6, 0xf0, 0xed, 0x04, 0x44, 0xc1, 0xbe, 0x02, + 0x14, 0xb5, 0x0e, 0x41, 0xc8, 0x0f, 0x56, 0x9b, + 0xae, 0x7f, 0x5d, 0xd3, 0x3f, 0xf4, 0x38, 0xfb, + 0x1d, 0xa5, 0xad, 0xf4, 0xfe, 0x53, 0x44, 0x1c, + 0x0c, 0x85, 0x20, 0x91, 0x8a, 0x35, 0xf6, 0x95, + 0x3e, 0x60, 0xea, 0x44, 0xc5, 0xf5, 0x1d, 0x6c, + 0xa1, 0x4b, 0xc0, 0x46, 0xa8, 0x90, 0xfa, 0x94, + 0x43, 0x2f, 0x71, 0x04, 0x02, 0xa1, 0xc6, 0x8a, + 0x95, 0xd6, 0xa9, 0x13, 0x0a, 0x28, 0xea, 0x69, + 0xe5, 0x19, 0x53, 0x4f, 0x99, 0x2b, 0x42, 0x12, + 0x18, 0x11, 0x26, 0x6c, 0xc8, 0x14, 0x8f, 0x6e, + 0xcc, 0x4a, 0x48, 0x62, 0x95, 0x0f, 0x71, 0x02, + 0x42, 0x44, 0xdd, 0x44, 0xa1, 0xc9, 0x2a, 0x15, + 0xa2, 0xe2, 0x2c, 0xa4, 0xa4, 0x6b, 0x7d, 0x26, + 0xe8, 0x6b, 0x43, 0x80, 0x20, 0x51, 0xfd, 0xe1, + 0x6f, 0xb3, 0xef, 0xff, 0x00, 0xc1, 0x18, 0x26, + 0xfb, 0x9f, 0xfd, 0x70, 0x31, 0xf6, 0x3b, 0x4b, + 0x5b, 0xe9, 0xfc, 0x94, 0x50, 0xaa, 0xcc, 0x18, + 0x83, 0xe0, 0x98, 0xc3, 0x00, 0x0d, 0x5c, 0x4b, + 0x24, 0x94, 0x3f, 0x30, 0x84, 0xab, 0x16, 0x29, + 0x18, 0xdc, 0xa9, 0x66, 0x32, 0x30, 0x71, 0xe2, + 0x0a, 0xc1, 0x9d, 0x7d, 0x5c, 0xe1, 0xdc, 0x53, + 0x3a, 0x85, 0x02, 0x8a, 0x2a, 0x2c, 0x81, 0xec, + 0xc0, 0x9a, 0xb7, 0xe6, 0x05, 0x12, 0x42, 0x10, + 0xa0, 0x14, 0xa2, 0x81, 0x26, 0x15, 0x28, 0xa6, + 0x72, 0xa9, 0xa8, 0xaa, 0xb8, 0x28, 0xdb, 0x08, + 0x6b, 0x02, 0xd9, 0x08, 0xb1, 0x56, 0x5a, 0xe2, + 0x90, 0xee, 0x2a, 0xf2, 0x4d, 0xdb, 0x6a, 0x4a, + 0x06, 0x05, 0x03, 0x60, 0x03, 0x91, 0x15, 0xd3, + 0xff, 0x00, 0x82, 0x30, 0x4d, 0xb7, 0x3c, 0x71, + 0xc1, 0x7f, 0xc8, 0x78, 0xd6, 0x70, 0xc2, 0x70, + 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, + 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, + 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, + 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, + 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, 0xc2, 0x70, + 0xc2, 0x02, 0x15, 0x81, 0x8c, 0x47, 0xdc, 0xed, + 0x06, 0x8a, 0x69, 0x02, 0xa8, 0x9c, 0x02, 0x70, + 0x09, 0xc0, 0x27, 0x00, 0x9c, 0x02, 0x70, 0x09, + 0xc0, 0x27, 0x00, 0x85, 0xb5, 0xff, 0x00, 0x03, + 0x00, 0x2a, 0x86, 0x62, 0x00, 0x49, 0xda, 0x18, + 0x0c, 0xc9, 0xb2, 0xb5, 0x60, 0xf8, 0xcc, 0x00, + 0xb5, 0xa5, 0x04, 0xc8, 0xd7, 0x58, 0x48, 0xf0, + 0x55, 0x45, 0x9d, 0x6d, 0x81, 0x9c, 0x02, 0x70, + 0x09, 0xc0, 0x27, 0x00, 0x9c, 0x02, 0x70, 0x09, + 0xc0, 0x27, 0x00, 0x9c, 0x02, 0x2d, 0xc6, 0x85, + 0xd3, 0xfd, 0x79, 0x36, 0xdc, 0xfe, 0xac, 0x06, + 0x85, 0x4b, 0x4d, 0xc5, 0xde, 0x6e, 0x2e, 0xf3, + 0x71, 0x77, 0x9b, 0x8b, 0xbc, 0x44, 0xb9, 0x2d, + 0x8d, 0x86, 0xc1, 0xf7, 0x02, 0x29, 0x0c, 0xfd, + 0x69, 0xb4, 0x61, 0x51, 0x9c, 0xc0, 0x02, 0x35, + 0x64, 0xb0, 0x22, 0xbc, 0x72, 0x87, 0x8a, 0x17, + 0x12, 0x37, 0x5f, 0x1f, 0xb9, 0xb8, 0xbb, 0xcd, + 0xc5, 0xde, 0x6e, 0x2e, 0xf3, 0x71, 0x77, 0x85, + 0x89, 0x80, 0xa8, 0x82, 0xc3, 0x9b, 0x8b, 0xbc, + 0xdc, 0x5d, 0xe5, 0x1c, 0x61, 0xae, 0x23, 0xee, + 0x48, 0x93, 0x6a, 0x40, 0xd4, 0xa0, 0x86, 0xe0, + 0x74, 0x1a, 0x30, 0xeb, 0x88, 0x94, 0x36, 0x75, + 0x48, 0x28, 0x24, 0x12, 0x03, 0x28, 0x1c, 0x21, + 0xe6, 0x84, 0xac, 0x80, 0x53, 0x7e, 0xe5, 0x0b, + 0x41, 0x6f, 0x9a, 0x10, 0x1b, 0xe8, 0x13, 0x71, + 0x77, 0x9b, 0x8b, 0xbc, 0x3c, 0x1a, 0x00, 0x04, + 0xe9, 0xee, 0x9f, 0x73, 0xb4, 0xb5, 0xbe, 0x9f, + 0xf1, 0x28, 0x44, 0x04, 0xcd, 0x6a, 0x14, 0x26, + 0x9b, 0xb6, 0x3c, 0x5a, 0x14, 0x3f, 0x11, 0xb3, + 0xb8, 0xdf, 0x03, 0x46, 0xa2, 0x62, 0x49, 0x7c, + 0x05, 0xf7, 0xff, 0x00, 0xe2, 0xc6, 0xc9, 0xbe, + 0xe7, 0xf5, 0xda, 0xb2, 0xfe, 0x74, 0xad, 0x67, + 0x8a, 0xa8, 0x9f, 0x70, 0x28, 0xe9, 0x15, 0x9b, + 0x2c, 0x4f, 0x82, 0x20, 0x50, 0xd8, 0x05, 0xa0, + 0x14, 0x2e, 0xa3, 0x34, 0x26, 0xac, 0xac, 0x23, + 0x53, 0xf0, 0x7f, 0xc0, 0x31, 0xaf, 0x5b, 0x4e, + 0x76, 0x45, 0x7f, 0x4c, 0x73, 0x3f, 0xe1, 0x0f, + 0xef, 0xc2, 0x50, 0xad, 0x00, 0x09, 0xb1, 0x29, + 0xc3, 0x53, 0xe4, 0xb7, 0x94, 0xb1, 0x46, 0x86, + 0x03, 0x00, 0xa5, 0x4d, 0x86, 0x5e, 0xc4, 0x1f, + 0xc1, 0x9f, 0x6b, 0xb4, 0x3e, 0x18, 0x05, 0xd1, + 0xa9, 0xc2, 0x4e, 0x12, 0x70, 0x93, 0x84, 0x9c, + 0x24, 0xe1, 0x27, 0x09, 0x38, 0x48, 0x4a, 0x2e, + 0x02, 0xab, 0x80, 0x04, 0xfd, 0x08, 0x20, 0xf0, + 0x13, 0x2c, 0x48, 0x40, 0x05, 0xac, 0x17, 0xca, + 0x19, 0x80, 0xc0, 0x9a, 0x92, 0x58, 0x56, 0x0a, + 0xe9, 0x05, 0x08, 0x22, 0x8d, 0xcd, 0x4c, 0xfd, + 0x09, 0xc2, 0x4e, 0x12, 0x70, 0x93, 0x84, 0x9c, + 0x24, 0xe1, 0x27, 0x09, 0x38, 0x49, 0xc2, 0x41, + 0x1c, 0x94, 0x46, 0x45, 0x7a, 0x68, 0x74, 0x05, + 0xff, 0x00, 0x99, 0x8c, 0x63, 0x18, 0xc6, 0x31, + 0x8c, 0x63, 0x18, 0xc6, 0x31, 0x8c, 0x63, 0x19, + 0xa5, 0x0a, 0x05, 0xeb, 0x13, 0x75, 0xcf, 0xea, + 0x54, 0xf4, 0x22, 0x34, 0x1f, 0xcf, 0xff, 0x00, + 0xff, 0x00, 0xf9, 0x13, 0x3c, 0x32, 0x24, 0x28, + 0x03, 0x41, 0x94, 0x10, 0x1a, 0x20, 0xe8, 0x24, + 0xb2, 0x86, 0x15, 0xac, 0xb2, 0x77, 0x89, 0xf4, + 0x22, 0x5d, 0x61, 0xac, 0xbd, 0xcf, 0xf2, 0x69, + 0xa6, 0x9a, 0x46, 0x90, 0x3a, 0x80, 0x00, 0x01, + 0x2f, 0x6f, 0x53, 0x4d, 0x57, 0x97, 0x03, 0x19, + 0x03, 0x44, 0x8c, 0x53, 0x3f, 0x32, 0xec, 0x90, + 0x44, 0x98, 0x58, 0xe6, 0x5a, 0xc2, 0x0f, 0xb6, + 0x7c, 0x35, 0x26, 0x07, 0x01, 0x14, 0x89, 0xfb, + 0xd4, 0x6b, 0x09, 0x84, 0x92, 0x13, 0x8f, 0xaf, + 0xff, 0x00, 0xe0, 0xc5, 0xe0, 0x98, 0x24, 0x16, + 0x33, 0xed, 0xf6, 0x8c, 0x95, 0x24, 0x70, 0x31, + 0x9c, 0xa6, 0x72, 0x99, 0xca, 0x67, 0x29, 0x9c, + 0xa6, 0x3f, 0xfe, 0x90, 0x0a, 0xa8, 0x19, 0xa9, + 0x2a, 0xc2, 0x19, 0x44, 0x88, 0x67, 0x2c, 0x44, + 0xfb, 0x85, 0x0d, 0x06, 0x9a, 0x2c, 0xea, 0xd6, + 0x06, 0x0a, 0x3d, 0x9e, 0x51, 0xf3, 0x0e, 0xe3, + 0xd0, 0x61, 0x32, 0x92, 0x3d, 0x42, 0x12, 0x4e, + 0x20, 0x54, 0x03, 0x31, 0x48, 0x0e, 0x01, 0x58, + 0xd0, 0x54, 0x15, 0x1a, 0xd5, 0x4e, 0x53, 0x09, + 0xc1, 0x3a, 0x0a, 0xa0, 0x9c, 0x74, 0x46, 0x41, + 0x0a, 0xc4, 0x05, 0xb3, 0xd0, 0xce, 0x53, 0x39, + 0x4c, 0xe5, 0x33, 0x94, 0xce, 0x53, 0x39, 0x4c, + 0x32, 0x51, 0x2c, 0xf6, 0xb0, 0xf6, 0x92, 0x08, + 0xd5, 0x4b, 0x19, 0x10, 0x17, 0x24, 0xff, 0x00, + 0x98, 0xd2, 0x94, 0xa5, 0x29, 0x4a, 0x52, 0x94, + 0xa5, 0x29, 0x4a, 0x52, 0x94, 0xa4, 0x6b, 0xcf, + 0x64, 0x16, 0x70, 0x86, 0x20, 0xdc, 0x4d, 0x87, + 0x24, 0xd9, 0x73, 0xc7, 0x1c, 0x38, 0xde, 0xd2, + 0x13, 0x16, 0x33, 0x82, 0x78, 0x85, 0x0d, 0x4b, + 0xae, 0xf6, 0x18, 0xe7, 0x06, 0x18, 0x83, 0x16, + 0x35, 0xa3, 0x4e, 0x87, 0xe2, 0x05, 0x58, 0x15, + 0xbd, 0x07, 0xf3, 0xfa, 0xc6, 0x52, 0x92, 0x66, + 0x7b, 0xf1, 0x1a, 0x81, 0x38, 0x27, 0x89, 0x4a, + 0x36, 0x9a, 0xc1, 0x21, 0x1f, 0x33, 0x71, 0x77, + 0x9b, 0x8b, 0xbc, 0x67, 0xef, 0xcc, 0x05, 0x41, + 0x41, 0xfc, 0x41, 0xc1, 0xd4, 0x08, 0x20, 0xb3, + 0x4a, 0x90, 0x2c, 0xa0, 0x92, 0x08, 0xb0, 0x41, + 0x52, 0xd4, 0x0d, 0x8b, 0x58, 0x4a, 0x93, 0x64, + 0xc5, 0x8d, 0xac, 0x4c, 0x61, 0x37, 0x17, 0x79, + 0xb8, 0xbb, 0xca, 0x2f, 0xbb, 0x8d, 0xe7, 0x4c, + 0xc3, 0x2d, 0x82, 0x62, 0x2b, 0x19, 0x08, 0x2e, + 0xaa, 0x19, 0x58, 0x98, 0x76, 0xa1, 0x9d, 0x6a, + 0x70, 0x8d, 0xfe, 0x30, 0xb0, 0x06, 0xc8, 0x24, + 0x7e, 0x6d, 0x0c, 0x38, 0x93, 0x12, 0xbe, 0x2f, + 0x54, 0x5f, 0x30, 0xc2, 0x60, 0x43, 0x86, 0x6c, + 0x80, 0x38, 0x40, 0x48, 0xa5, 0x56, 0xba, 0x99, + 0x12, 0xbc, 0xca, 0xbf, 0x15, 0x5f, 0x82, 0x7d, + 0xfe, 0xd3, 0x6c, 0xd7, 0xfb, 0x03, 0xf2, 0x31, + 0xb6, 0x8e, 0xb0, 0x4c, 0x49, 0x2f, 0x80, 0xbe, + 0xf3, 0x5b, 0x8e, 0xf1, 0x40, 0x8a, 0x44, 0x31, + 0xbd, 0x61, 0x01, 0xd2, 0x16, 0x1a, 0xa8, 0xfb, + 0x10, 0x08, 0x02, 0x8f, 0x6c, 0x77, 0xc2, 0xea, + 0xa1, 0xc0, 0xc5, 0x8a, 0x52, 0x8c, 0x80, 0x8a, + 0xbe, 0x00, 0x3d, 0xf2, 0x81, 0x9d, 0x3e, 0x80, + 0x81, 0x0d, 0x0e, 0x25, 0x5f, 0x48, 0x1e, 0x2a, + 0xe9, 0xe5, 0x55, 0xd8, 0xd6, 0xf7, 0xa4, 0xcf, + 0x24, 0x8e, 0x6a, 0x1f, 0x5f, 0x7f, 0xde, 0xcf, + 0x96, 0x6c, 0x39, 0xca, 0x95, 0x61, 0x7d, 0xa7, + 0x54, 0xea, 0x84, 0x49, 0xc0, 0x4c, 0x80, 0x2d, + 0xfa, 0xf8, 0x94, 0xd8, 0x41, 0xae, 0x18, 0x2d, + 0x47, 0x6a, 0x00, 0xa8, 0x2d, 0x3d, 0x73, 0x87, + 0x06, 0x07, 0xa0, 0xce, 0xce, 0xc1, 0x13, 0x27, + 0x80, 0xed, 0x56, 0x2c, 0x15, 0x02, 0x87, 0x1c, + 0x00, 0x2a, 0x15, 0x42, 0x73, 0x42, 0x07, 0x74, + 0xb3, 0x56, 0x4b, 0x55, 0x52, 0x24, 0x44, 0x87, + 0xad, 0xc0, 0x8c, 0xa6, 0x1f, 0x40, 0x2e, 0x8d, + 0x57, 0xb1, 0x96, 0x99, 0x13, 0x6f, 0x12, 0x03, + 0xbd, 0x94, 0x1e, 0xe1, 0x8e, 0xc9, 0xac, 0x2f, + 0x48, 0x13, 0x74, 0xd8, 0x97, 0x05, 0x16, 0x75, + 0x43, 0x52, 0x43, 0xe4, 0x84, 0xde, 0xb9, 0x43, + 0x90, 0xba, 0x16, 0x1a, 0xa5, 0xf4, 0x8e, 0x22, + 0x87, 0x8f, 0x05, 0x55, 0x58, 0x3c, 0x63, 0x1e, + 0x51, 0x57, 0x6e, 0xb0, 0xc3, 0x58, 0x10, 0x24, + 0xb4, 0x4d, 0x75, 0x9d, 0x53, 0xaa, 0x57, 0xab, + 0x8f, 0xee, 0x7d, 0xcf, 0xec, 0xda, 0xf2, 0x4d, + 0xb7, 0x3f, 0xae, 0xd5, 0x9f, 0xa0, 0xb2, 0xb0, + 0x8d, 0x7b, 0x93, 0xf1, 0xa2, 0x5c, 0xb0, 0x2c, + 0x80, 0xcf, 0x63, 0xf0, 0x21, 0xf0, 0xaa, 0x32, + 0x04, 0xcb, 0xe2, 0x18, 0x2a, 0x9c, 0xbd, 0x8e, + 0xc9, 0x04, 0x2a, 0x6b, 0xba, 0xef, 0xf8, 0x16, + 0x9b, 0x04, 0x91, 0x12, 0x8c, 0x38, 0x61, 0xc5, + 0xdd, 0x1c, 0x41, 0xc2, 0x0e, 0x67, 0x91, 0xa4, + 0x27, 0xb9, 0x40, 0x10, 0x5b, 0x94, 0x64, 0xfd, + 0x3d, 0x43, 0x06, 0x0e, 0x40, 0xdc, 0x8b, 0x2d, + 0x55, 0x58, 0x42, 0x89, 0xa8, 0x1b, 0x2c, 0x5a, + 0x82, 0xee, 0x1d, 0x63, 0xa7, 0x91, 0x64, 0xf1, + 0xf8, 0xcf, 0x02, 0x6c, 0x37, 0x49, 0xf7, 0x42, + 0x81, 0xed, 0x0b, 0x43, 0x35, 0x8f, 0xcc, 0x57, + 0x04, 0x14, 0x6e, 0x45, 0x90, 0x5b, 0xde, 0xaf, + 0x7f, 0x5b, 0xfd, 0xde, 0xd1, 0x2f, 0x01, 0x3d, + 0x08, 0x2c, 0xcb, 0xeb, 0x1b, 0xe0, 0x9c, 0x24, + 0xe1, 0x27, 0x09, 0x38, 0x48, 0xef, 0xfa, 0x01, + 0x22, 0x54, 0x23, 0x43, 0x4b, 0x18, 0x0d, 0x02, + 0x3c, 0xf1, 0xc4, 0x09, 0xc1, 0x42, 0x08, 0xa3, + 0x73, 0x53, 0x3f, 0x42, 0x5a, 0xa9, 0x53, 0x04, + 0x16, 0x10, 0x86, 0xab, 0x0a, 0x04, 0x21, 0x05, + 0x33, 0x0e, 0x69, 0xc5, 0x87, 0x3b, 0x87, 0x76, + 0xc4, 0x03, 0x1a, 0x9a, 0x8e, 0x69, 0x01, 0x0c, + 0x4b, 0x6b, 0x0b, 0x95, 0x1c, 0x80, 0x4a, 0xb5, + 0x0b, 0xa8, 0xce, 0x34, 0x91, 0x38, 0xec, 0x04, + 0xb2, 0x7a, 0xac, 0x95, 0x99, 0x22, 0x81, 0x8f, + 0x37, 0xb2, 0x01, 0x38, 0x49, 0xc2, 0x4e, 0x12, + 0x70, 0x93, 0x84, 0x87, 0x26, 0x63, 0x3c, 0x02, + 0xb2, 0x0c, 0x4c, 0x18, 0x20, 0xc5, 0x19, 0x01, + 0x41, 0x36, 0x1c, 0xe5, 0x2c, 0xb9, 0x3e, 0xd3, + 0xa6, 0x74, 0xc0, 0x98, 0x09, 0xe0, 0xf0, 0x3a, + 0x20, 0x0c, 0x1f, 0x14, 0xd3, 0x53, 0x15, 0xd6, + 0xda, 0xd5, 0x09, 0xf7, 0x10, 0x49, 0xf6, 0x91, + 0x2c, 0x62, 0xa6, 0x03, 0x9a, 0x34, 0x3c, 0xba, + 0x42, 0xf5, 0x4d, 0x1d, 0x0d, 0x8d, 0x34, 0x85, + 0x84, 0xc4, 0x28, 0x62, 0x94, 0x79, 0xc0, 0xcc, + 0xa0, 0x85, 0x00, 0x5e, 0x10, 0x33, 0x96, 0x3a, + 0xab, 0xe1, 0x81, 0x8e, 0xc1, 0x85, 0x28, 0x80, + 0x04, 0x0c, 0xa9, 0x3d, 0xc5, 0xd5, 0xb5, 0x2f, + 0x2b, 0xf2, 0xc3, 0x95, 0x80, 0x63, 0x61, 0x08, + 0xa3, 0x50, 0x4e, 0xf2, 0x22, 0xf6, 0x31, 0x81, + 0xba, 0xc4, 0x71, 0x7d, 0xb4, 0x80, 0xc7, 0x42, + 0x50, 0x85, 0x82, 0x82, 0xce, 0x90, 0x66, 0x50, + 0x22, 0xfb, 0x84, 0xe4, 0x21, 0x71, 0x45, 0x6a, + 0xa5, 0x55, 0xa3, 0x9d, 0x33, 0xa6, 0x53, 0xab, + 0x17, 0xee, 0x7d, 0xcf, 0xec, 0xd8, 0xf2, 0x4d, + 0xe7, 0x3f, 0xaa, 0xcd, 0xeb, 0x95, 0x4b, 0x15, + 0x00, 0xa2, 0x19, 0xc3, 0xd2, 0xb1, 0x76, 0x78, + 0x1a, 0x88, 0x8f, 0xfe, 0x28, 0xa4, 0xcc, 0x04, + 0xd1, 0xaf, 0xe6, 0x34, 0xf9, 0x71, 0x71, 0xd5, + 0x6d, 0xf0, 0x80, 0x38, 0xaa, 0x57, 0x4e, 0x11, + 0xa0, 0x3e, 0x95, 0xa8, 0x56, 0x49, 0xc2, 0xa0, + 0x6a, 0x3f, 0xf0, 0x63, 0x9e, 0x79, 0xe7, 0x9e, + 0x41, 0x64, 0x01, 0x8d, 0x08, 0xa9, 0x13, 0x43, + 0xa4, 0x41, 0x2e, 0xf2, 0x5c, 0xc0, 0x26, 0x75, + 0x30, 0x35, 0x85, 0x0e, 0x7f, 0xdd, 0xae, 0x70, + 0x0b, 0x3f, 0x56, 0x61, 0x51, 0xcc, 0x0c, 0x30, + 0x82, 0x71, 0x23, 0xc3, 0xdb, 0xa0, 0x05, 0xc0, + 0x61, 0x58, 0xc0, 0xa8, 0xbd, 0x71, 0x15, 0xf4, + 0xac, 0x28, 0xa2, 0xc5, 0x26, 0x02, 0x9a, 0x02, + 0xbf, 0x26, 0x7d, 0xd8, 0x2a, 0x7b, 0x58, 0x90, + 0x6f, 0x99, 0xb3, 0xe4, 0x9b, 0x3e, 0x49, 0xb3, + 0xe4, 0x9b, 0x3e, 0x49, 0xb3, 0xe4, 0x9b, 0x3e, + 0x49, 0xb3, 0xe4, 0x9b, 0x3e, 0x49, 0xb3, 0xe4, + 0x9b, 0x3e, 0x49, 0xb3, 0xe4, 0x9b, 0x3e, 0x49, + 0xb3, 0xe4, 0x9b, 0x3e, 0x49, 0xb3, 0xe4, 0x9b, + 0x3e, 0x49, 0xb3, 0xe4, 0x9b, 0x3e, 0x49, 0xb3, + 0xe4, 0x9b, 0x3e, 0x49, 0x70, 0xf9, 0xae, 0xf0, + 0xcb, 0x2e, 0x41, 0x42, 0x05, 0xb8, 0x83, 0xda, + 0x10, 0xa5, 0x4d, 0x4c, 0x58, 0x19, 0xc6, 0x4e, + 0x32, 0x71, 0x90, 0x0c, 0xdd, 0xf1, 0x05, 0x21, + 0xeb, 0xe3, 0x44, 0xe3, 0x27, 0x19, 0x38, 0xc9, + 0xc6, 0x4e, 0x32, 0x71, 0x93, 0x8c, 0x9c, 0x64, + 0xe3, 0x27, 0x19, 0x38, 0xc9, 0xc6, 0x4e, 0x32, + 0x71, 0x93, 0x8c, 0x8d, 0xf0, 0x4c, 0x78, 0xc5, + 0xe6, 0x02, 0x10, 0xc5, 0x2e, 0x4b, 0x33, 0x63, + 0xc9, 0x36, 0xdc, 0xff, 0x00, 0xeb, 0x20, 0x39, + 0x4c, 0xf1, 0xa0, 0x0f, 0xb8, 0x4c, 0x69, 0x73, + 0x33, 0xaa, 0x75, 0x4e, 0xa9, 0xd5, 0x3a, 0xa7, + 0x54, 0xea, 0x9d, 0x53, 0xaa, 0x75, 0x4e, 0xa9, + 0xd5, 0x3a, 0xa7, 0x54, 0xea, 0x9d, 0x53, 0xaa, + 0x75, 0x4e, 0xa9, 0xd5, 0x3a, 0xa1, 0x8a, 0x59, + 0x9d, 0x52, 0x00, 0xbf, 0xa2, 0xbb, 0x1a, 0xde, + 0x1e, 0xa9, 0x42, 0x06, 0x50, 0x00, 0xc1, 0xc1, + 0xc6, 0x05, 0x40, 0xf7, 0x13, 0x94, 0x94, 0x57, + 0x3b, 0x0e, 0xb1, 0x50, 0x94, 0x01, 0x10, 0x2a, + 0xa7, 0xaa, 0x50, 0x14, 0x12, 0x18, 0x16, 0x10, + 0x4b, 0x41, 0xfb, 0x1f, 0x88, 0x0a, 0x09, 0x0c, + 0x0b, 0x08, 0x25, 0xa0, 0xfd, 0x8f, 0xc4, 0x22, + 0x24, 0xed, 0x1d, 0x7a, 0xa1, 0x02, 0x92, 0x38, + 0x30, 0x9e, 0x86, 0x03, 0xa8, 0xcc, 0x81, 0xef, + 0x39, 0x49, 0xca, 0x40, 0x62, 0x21, 0x40, 0x0c, + 0x61, 0x40, 0x29, 0xd4, 0x28, 0xa1, 0xaa, 0x89, + 0x07, 0x46, 0xf2, 0xce, 0xa9, 0x4a, 0xd6, 0x14, + 0xa2, 0x27, 0x04, 0x77, 0x05, 0x99, 0x02, 0x54, + 0x0b, 0x9a, 0x83, 0x8b, 0x84, 0xa0, 0x2a, 0x3d, + 0x80, 0x79, 0x41, 0xc6, 0x1e, 0xf1, 0x7d, 0x86, + 0x25, 0xc7, 0x5a, 0xe3, 0xa0, 0x54, 0xd6, 0x4e, + 0xbf, 0x90, 0x88, 0x46, 0x5f, 0x04, 0x12, 0x13, + 0x71, 0x85, 0xe9, 0xbd, 0xe4, 0x9b, 0x0e, 0x78, + 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, + 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, + 0x8e, 0x38, 0xe3, 0x9a, 0x7d, 0x1b, 0xa9, 0x17, + 0x68, 0x0d, 0x36, 0x81, 0x46, 0xd5, 0xc6, 0x70, + 0x1a, 0x85, 0x80, 0x6c, 0x46, 0x94, 0xce, 0x08, + 0xb6, 0x80, 0x08, 0x5d, 0x4e, 0x95, 0x89, 0x29, + 0x45, 0x06, 0x94, 0xc9, 0x25, 0x8d, 0x70, 0x87, + 0x89, 0x2c, 0x24, 0xb1, 0x80, 0x0c, 0xe9, 0xf7, + 0x03, 0xa6, 0x32, 0x8c, 0x3a, 0x4e, 0x4a, 0xbd, + 0x23, 0x94, 0x1a, 0x20, 0xe3, 0xe4, 0x2f, 0xac, + 0x06, 0x29, 0x90, 0x89, 0x0c, 0x61, 0x80, 0xec, + 0x9e, 0x43, 0x4c, 0x02, 0x40, 0x85, 0x42, 0x82, + 0x8a, 0x0c, 0xd7, 0xdc, 0x34, 0x70, 0xe3, 0x01, + 0x9c, 0x8b, 0x28, 0xd1, 0xd0, 0x81, 0x30, 0xd5, + 0x66, 0x4a, 0xe9, 0x59, 0x65, 0xbc, 0x8a, 0x85, + 0xe2, 0x2f, 0xd2, 0x00, 0x68, 0x10, 0x19, 0xc0, + 0xeb, 0x7f, 0x78, 0x22, 0xea, 0xcc, 0xb1, 0xba, + 0x96, 0x51, 0x33, 0x9e, 0x02, 0xe8, 0xd4, 0x1c, + 0x50, 0x58, 0x56, 0x08, 0x94, 0x3f, 0x50, 0x93, + 0x3c, 0x75, 0x8c, 0x7f, 0xe5, 0x46, 0x40, 0xe1, + 0xf2, 0xa7, 0x08, 0x03, 0x40, 0x58, 0x71, 0x2f, + 0x3b, 0x47, 0x4b, 0xb2, 0x17, 0x41, 0x07, 0xab, + 0x29, 0x9d, 0x5b, 0xe9, 0x9a, 0xc6, 0x17, 0x50, + 0xbf, 0x3d, 0x3e, 0xee, 0x2b, 0x63, 0x05, 0x05, + 0x40, 0xa3, 0x8c, 0x3d, 0xf8, 0x70, 0xb1, 0x41, + 0x5c, 0x85, 0x59, 0x8a, 0x81, 0x35, 0xdd, 0x45, + 0x1b, 0x11, 0x80, 0x02, 0xde, 0xc6, 0x04, 0xb2, + 0xbe, 0x89, 0x86, 0x7d, 0xce, 0x15, 0xcc, 0x40, + 0x1d, 0x81, 0x50, 0xa0, 0x16, 0x1b, 0x01, 0x89, + 0x99, 0xeb, 0x2b, 0x1b, 0x80, 0x16, 0xa8, 0x5e, + 0xb8, 0xe5, 0x09, 0xe1, 0xcb, 0x2c, 0x1d, 0x08, + 0x76, 0x01, 0xf5, 0x84, 0x23, 0x21, 0x52, 0x18, + 0x19, 0x21, 0x40, 0xb0, 0xe9, 0x47, 0xf0, 0x98, + 0x52, 0x10, 0x02, 0x11, 0xac, 0xb0, 0xb5, 0x2d, + 0x5c, 0x07, 0x03, 0x98, 0x70, 0x38, 0x36, 0x07, + 0x56, 0xa2, 0x96, 0x95, 0xcd, 0x39, 0xc8, 0x0b, + 0x70, 0xd5, 0x57, 0xeb, 0xdc, 0x45, 0xc1, 0xc0, + 0x5a, 0xa6, 0xc5, 0x0f, 0xb9, 0xd4, 0x98, 0x2d, + 0x21, 0x1b, 0xaf, 0x0f, 0x3b, 0x5f, 0x56, 0xbe, + 0x88, 0x82, 0x55, 0x41, 0x27, 0x78, 0xfd, 0x60, + 0x26, 0x0c, 0x46, 0x1c, 0xa6, 0x3e, 0x35, 0xca, + 0x0b, 0x77, 0x39, 0x3d, 0x56, 0x6d, 0x7b, 0xc7, + 0x37, 0x08, 0x53, 0x13, 0x76, 0xc1, 0x7d, 0x45, + 0x0a, 0x21, 0x84, 0x10, 0xaa, 0xc5, 0xef, 0x87, + 0xf1, 0x6d, 0xef, 0x24, 0xd8, 0x73, 0xc7, 0x1c, + 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, + 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, + 0xc7, 0x1c, 0xd5, 0x79, 0x9d, 0x31, 0x71, 0xa6, + 0x50, 0x9c, 0xc8, 0x25, 0x14, 0xc2, 0xae, 0x81, + 0x00, 0x69, 0x48, 0x5b, 0x0a, 0x4a, 0x01, 0xf7, + 0x07, 0x98, 0xbb, 0x85, 0x7a, 0xa9, 0x52, 0xb9, + 0x50, 0xac, 0x62, 0xa1, 0xec, 0x46, 0x69, 0x7d, + 0xc3, 0x71, 0xa3, 0x73, 0x12, 0x48, 0x06, 0xb3, + 0x8c, 0x27, 0x3d, 0xdd, 0x5c, 0xd2, 0x80, 0xd3, + 0xec, 0x2a, 0x06, 0xb3, 0xb2, 0x40, 0x54, 0x5a, + 0xfd, 0x43, 0xbe, 0x44, 0xb9, 0xcb, 0x2c, 0x75, + 0xf6, 0x8e, 0xae, 0xa5, 0x14, 0x1a, 0xac, 0x80, + 0x1f, 0xa8, 0x3d, 0xd5, 0x67, 0xae, 0xcc, 0x29, + 0xef, 0x04, 0x33, 0xc9, 0xa1, 0x2a, 0x9e, 0x06, + 0x1c, 0xc7, 0x2d, 0x40, 0xb0, 0x63, 0x61, 0x8c, + 0x62, 0x00, 0x1a, 0x4c, 0x12, 0x59, 0x5d, 0x05, + 0xfb, 0x63, 0x19, 0x17, 0x5c, 0x21, 0x49, 0x76, + 0x2f, 0x57, 0x4a, 0xfb, 0x43, 0x08, 0x9a, 0x22, + 0xb1, 0x85, 0x8f, 0x59, 0x7c, 0x00, 0xe2, 0xa4, + 0x07, 0x61, 0xc2, 0x40, 0x40, 0x43, 0xc6, 0xc2, + 0x23, 0x2e, 0x96, 0x06, 0x6b, 0x09, 0x43, 0x2e, + 0x1f, 0xcf, 0x41, 0xcc, 0x8c, 0x0a, 0x8e, 0xfa, + 0xc0, 0x56, 0x56, 0x39, 0x12, 0xdb, 0xc2, 0x38, + 0x11, 0x25, 0x93, 0x85, 0x15, 0xa1, 0x2a, 0x6b, + 0xc2, 0x04, 0x19, 0x09, 0x7b, 0xe3, 0x1b, 0x00, + 0xb5, 0x89, 0xb8, 0xa3, 0x94, 0xab, 0xa0, 0x08, + 0x04, 0x15, 0xbf, 0x51, 0x36, 0x05, 0xbc, 0xb3, + 0x42, 0xc4, 0x41, 0x84, 0x4a, 0x21, 0x23, 0x97, + 0x1b, 0x30, 0x7c, 0x40, 0xcb, 0x05, 0x80, 0x05, + 0xab, 0xc1, 0x59, 0x30, 0x54, 0x29, 0x45, 0x35, + 0xcc, 0x25, 0x1b, 0x92, 0xa2, 0x81, 0x68, 0xad, + 0xab, 0x85, 0x71, 0xf4, 0x24, 0x5f, 0x68, 0x50, + 0x50, 0xb1, 0x48, 0x4e, 0xae, 0x90, 0x1c, 0xc4, + 0x66, 0xf7, 0xa9, 0x1d, 0x20, 0xf1, 0x0d, 0x61, + 0x84, 0x12, 0xaa, 0xb9, 0x98, 0xac, 0xb3, 0x54, + 0x0e, 0x95, 0xd4, 0x8f, 0x78, 0xcb, 0x25, 0x38, + 0x6a, 0x4c, 0x4a, 0xda, 0x1a, 0x69, 0x80, 0x1a, + 0x96, 0x06, 0xb6, 0xbf, 0xc9, 0x80, 0xbd, 0x47, + 0x52, 0x00, 0xd7, 0x3c, 0x7a, 0x99, 0x5f, 0x78, + 0x52, 0x98, 0xac, 0xea, 0x6d, 0x90, 0xa4, 0x02, + 0x80, 0x84, 0xc1, 0xc5, 0xd5, 0x07, 0x8a, 0x01, + 0xc3, 0xc2, 0x28, 0x94, 0x7f, 0x3e, 0x99, 0x04, + 0x97, 0x2b, 0x0d, 0x6d, 0x7d, 0x37, 0x2c, 0x93, + 0x71, 0xcf, 0xfe, 0xbb, 0x6a, 0x61, 0x01, 0xe8, + 0x3e, 0xd0, 0x23, 0xa9, 0x08, 0xf4, 0x52, 0xd7, + 0x5a, 0xab, 0x09, 0xa0, 0x59, 0x2e, 0xff, 0x00, + 0x9d, 0x29, 0x4a, 0x52, 0x94, 0xa5, 0x29, 0x49, + 0x4a, 0x80, 0x60, 0xe8, 0x70, 0xff, 0x00, 0x80, + 0x29, 0x4a, 0x52, 0x94, 0x41, 0x94, 0x67, 0xdf, + 0x7a, 0xfa, 0x7d, 0x9f, 0xfc, 0x82, 0xa2, 0x9d, + 0x14, 0x02, 0x11, 0xa6, 0x70, 0xe0, 0x41, 0x21, + 0xd1, 0x8e, 0xae, 0x86, 0x51, 0x6f, 0x96, 0x24, + 0x5c, 0x73, 0xae, 0x36, 0xff, 0x00, 0xa5, 0xb7, + 0x2c, 0x92, 0xdd, 0x9a, 0xff, 0x00, 0xd8, 0x2b, + 0xc8, 0xb1, 0xc1, 0xd6, 0x79, 0x4c, 0xe5, 0x33, + 0x94, 0xce, 0x53, 0x39, 0x4c, 0x09, 0x84, 0x48, + 0x31, 0x00, 0xf7, 0x31, 0x27, 0xbb, 0x00, 0x2c, + 0x61, 0x59, 0x5f, 0xa5, 0x62, 0x43, 0xd4, 0xc1, + 0xa3, 0x3a, 0x93, 0x69, 0x25, 0xb0, 0x0e, 0xa9, + 0x0a, 0x62, 0xe1, 0x30, 0x32, 0x00, 0x3a, 0x48, + 0xb0, 0x17, 0xc1, 0xf8, 0x30, 0x90, 0x63, 0x7f, + 0x8c, 0x0c, 0xbc, 0x6b, 0x19, 0x12, 0x25, 0xea, + 0x49, 0xc3, 0x24, 0x5c, 0x04, 0x9a, 0x45, 0x16, + 0xda, 0xcd, 0x82, 0x8c, 0xba, 0xc3, 0x78, 0xf0, + 0x82, 0x20, 0xc7, 0x1a, 0xfc, 0x40, 0x15, 0xe4, + 0x75, 0x88, 0x84, 0xce, 0x87, 0xa0, 0x4e, 0x53, + 0x39, 0x4c, 0xe5, 0x33, 0x94, 0xce, 0x53, 0x08, + 0x44, 0x13, 0x83, 0x83, 0x4a, 0xb6, 0xee, 0xf4, + 0xfb, 0xbf, 0xf9, 0x14, 0xf3, 0x40, 0x8a, 0xb1, + 0xd4, 0x1c, 0x24, 0x99, 0xa1, 0xaf, 0x92, 0x00, + 0x1f, 0x79, 0xa8, 0xfb, 0xb8, 0x97, 0x7f, 0xd2, + 0xdb, 0x56, 0x49, 0x66, 0xcd, 0x7f, 0xec, 0x05, + 0x43, 0x63, 0xfe, 0xa6, 0x46, 0x12, 0xe4, 0x49, + 0xb0, 0x81, 0xbd, 0x76, 0xec, 0xb6, 0x32, 0x0c, + 0x38, 0x85, 0x3e, 0x4c, 0x07, 0xd3, 0x25, 0x5a, + 0x80, 0xc8, 0x0e, 0x9a, 0x06, 0x8a, 0x80, 0xea, + 0x88, 0x22, 0x6c, 0x56, 0x06, 0x3a, 0xd1, 0x00, + 0x26, 0x98, 0x02, 0x80, 0x58, 0xdf, 0x38, 0x48, + 0xfc, 0x22, 0x26, 0x86, 0x10, 0x69, 0x8a, 0x9a, + 0x18, 0xaf, 0xfb, 0x84, 0x74, 0xcc, 0xe1, 0x47, + 0x48, 0xd6, 0x02, 0x3d, 0xc8, 0xfd, 0xe6, 0x62, + 0x89, 0xb6, 0x31, 0xff, 0x00, 0xdd, 0xfd, 0xb7, + 0xda, 0xbd, 0x2e, 0x0f, 0xd9, 0xa9, 0xaf, 0xf9, + 0x91, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x12, 0xce, 0x7d, 0x70, 0xf4, 0xd9, + 0xb2, 0x4b, 0x76, 0x6b, 0x8e, 0x38, 0xe3, 0x8e, + 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, + 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x3f, + 0x48, 0x4c, 0x6d, 0x2b, 0xa8, 0xc5, 0x8c, 0x41, + 0x8f, 0xb2, 0xf5, 0xff, 0x00, 0xcc, 0xe6, 0xbc, + 0x67, 0x35, 0xe3, 0x39, 0xaf, 0x19, 0xcd, 0x78, + 0xce, 0x6b, 0xc6, 0x73, 0x5e, 0x33, 0x9a, 0xf1, + 0x9c, 0xd7, 0x8c, 0xe6, 0xbc, 0x67, 0x35, 0xe3, + 0x08, 0x30, 0x87, 0x17, 0x0b, 0xc1, 0x60, 0x5f, + 0xc9, 0x9c, 0xd7, 0x8c, 0xe6, 0xbc, 0x61, 0x05, + 0xd4, 0xdc, 0xb2, 0x6d, 0x73, 0x39, 0xaf, 0x19, + 0xcd, 0x78, 0xce, 0x6b, 0xc6, 0x73, 0x5e, 0x33, + 0x9a, 0xf1, 0x81, 0x64, 0xc2, 0xa7, 0x44, 0x55, + 0xb4, 0x47, 0x83, 0xcb, 0x36, 0xf4, 0xfb, 0xbf, + 0xf8, 0xb4, 0x5e, 0x3b, 0xa8, 0x9c, 0x11, 0x08, + 0x44, 0x2d, 0x80, 0x54, 0x96, 0x80, 0x02, 0x62, + 0x07, 0x25, 0xd3, 0x62, 0xc4, 0xa7, 0xde, 0x92, + 0xa2, 0xb0, 0x2c, 0xbc, 0x41, 0x35, 0x57, 0x4f, + 0xfa, 0x5b, 0x66, 0xc9, 0x37, 0x3a, 0xff, 0x00, + 0xd7, 0x95, 0xcc, 0x21, 0x7d, 0x3b, 0x13, 0x51, + 0xd0, 0x4d, 0xc1, 0xf3, 0x37, 0x07, 0xcc, 0xdc, + 0x1f, 0x33, 0x70, 0x7c, 0xcd, 0xc1, 0xf3, 0x37, + 0x07, 0xcc, 0xdc, 0x1f, 0x33, 0x70, 0x7c, 0xcd, + 0xc1, 0xf3, 0x37, 0x07, 0xcc, 0xdc, 0x1f, 0x33, + 0x70, 0x7c, 0xcd, 0xc1, 0xf3, 0x37, 0x07, 0xcc, + 0xdc, 0x1f, 0x33, 0x70, 0x7c, 0xcd, 0xc1, 0xf3, + 0x37, 0x07, 0xcc, 0xdc, 0x1f, 0x33, 0x70, 0x7c, + 0xc6, 0xe0, 0x74, 0x62, 0x12, 0x30, 0x51, 0x8c, + 0xe5, 0x2f, 0x2f, 0x4f, 0xbb, 0xff, 0x00, 0x8b, + 0x74, 0xcb, 0x10, 0xed, 0xd1, 0x01, 0xaa, 0x81, + 0xc8, 0xa0, 0x47, 0xe9, 0x60, 0x33, 0xb4, 0x13, + 0x24, 0x94, 0x85, 0x07, 0x50, 0xca, 0xff, 0x00, + 0xa5, 0xb6, 0xec, 0x93, 0x63, 0xaf, 0xfd, 0x6b, + 0xfa, 0x12, 0xc1, 0xca, 0x7a, 0xe7, 0x5c, 0xeb, + 0x9d, 0x73, 0xae, 0x75, 0xce, 0xb9, 0xd7, 0x0d, + 0xa3, 0x45, 0x03, 0x04, 0x8b, 0xbd, 0x20, 0x60, + 0xb2, 0xb2, 0x46, 0x53, 0x35, 0x56, 0x18, 0x02, + 0x34, 0x63, 0x48, 0xc4, 0xe6, 0x64, 0xe3, 0xa0, + 0x71, 0x8b, 0x0a, 0x03, 0xc3, 0x7a, 0x5e, 0x5e, + 0x70, 0xb6, 0x7a, 0x86, 0x5f, 0x61, 0x80, 0x0f, + 0x63, 0x3a, 0xe7, 0x5c, 0xeb, 0x9d, 0x73, 0xae, + 0x75, 0xce, 0xb9, 0x5c, 0xdd, 0x0b, 0xa7, 0x93, + 0xd1, 0xa8, 0x44, 0x2a, 0xc7, 0x79, 0xb4, 0x13, + 0x68, 0x26, 0xd0, 0x4d, 0xa0, 0x9b, 0x41, 0x36, + 0x82, 0x6d, 0x04, 0xda, 0x09, 0xb4, 0x13, 0x68, + 0x26, 0xd0, 0x4d, 0xa0, 0x9b, 0x41, 0x36, 0x82, + 0x6d, 0x04, 0xda, 0x09, 0xb4, 0x13, 0x68, 0x26, + 0xd0, 0x4d, 0xa0, 0x9b, 0x41, 0x2a, 0x92, 0xfe, + 0xac, 0xbd, 0x37, 0xec, 0x93, 0x63, 0xaf, 0xfd, + 0x64, 0x21, 0xb9, 0xa6, 0xa1, 0x9a, 0x86, 0x6a, + 0x19, 0xa8, 0x66, 0xa1, 0x9a, 0x86, 0x6a, 0x19, + 0xa8, 0x60, 0x30, 0x7b, 0x47, 0x8a, 0x04, 0x5a, + 0xbe, 0xbe, 0xc2, 0xff, 0x00, 0x8f, 0xa8, 0x3b, + 0x81, 0xb4, 0x48, 0x12, 0x34, 0xe9, 0x14, 0x29, + 0x6f, 0x51, 0xc8, 0xd1, 0x16, 0x85, 0x8e, 0xc1, + 0x53, 0xfb, 0x16, 0x59, 0x4f, 0x41, 0xcc, 0x17, + 0xa4, 0x0d, 0x89, 0x44, 0xc9, 0xa8, 0x66, 0xa1, + 0x9a, 0x86, 0x6a, 0x19, 0xa8, 0x66, 0xa1, 0x9a, + 0x86, 0x16, 0xc8, 0xaf, 0x49, 0xfb, 0xbf, 0xe9, + 0x58, 0xdc, 0x2a, 0xf2, 0x02, 0x1f, 0x3f, 0x00, + 0xc0, 0x81, 0x21, 0xc2, 0x10, 0x0d, 0xdd, 0x31, + 0x60, 0x33, 0x8a, 0xe6, 0x98, 0x7c, 0xd4, 0x8c, + 0x4d, 0xdd, 0x0d, 0x22, 0x26, 0x48, 0x6f, 0xf1, + 0x65, 0x4d, 0x0d, 0x71, 0x14, 0xf7, 0x8d, 0x2c, + 0xd6, 0x68, 0x32, 0x05, 0xc8, 0xb8, 0x81, 0x9a, + 0x89, 0xe1, 0x03, 0xc3, 0x20, 0x4f, 0xcd, 0x2e, + 0xb3, 0xd6, 0x14, 0x78, 0x54, 0xc9, 0x09, 0x53, + 0x0c, 0x43, 0xe2, 0x48, 0xe2, 0x7a, 0xd4, 0x42, + 0xc2, 0xba, 0x9b, 0x41, 0x85, 0x5a, 0xe0, 0x41, + 0x12, 0x05, 0x90, 0x4d, 0x8d, 0xa0, 0x7e, 0xdb, + 0xe0, 0xd5, 0x50, 0x28, 0x1a, 0x8a, 0x18, 0x4e, + 0x00, 0x13, 0x00, 0x2b, 0xe3, 0xfe, 0x16, 0xdf, + 0xb2, 0x4d, 0xce, 0xb8, 0xa2, 0x8a, 0x28, 0xa2, + 0x8a, 0x28, 0xa2, 0x8a, 0x28, 0xa2, 0x8a, 0x28, + 0xa2, 0x8a, 0x28, 0xa2, 0x8a, 0x28, 0xa2, 0x95, + 0xb0, 0x06, 0x75, 0x99, 0x83, 0x15, 0x10, 0xa2, + 0x0c, 0xe9, 0x9d, 0x33, 0xa6, 0x74, 0xce, 0x99, + 0xd3, 0x3a, 0x65, 0x5d, 0x1e, 0xa0, 0x99, 0x78, + 0x89, 0x5a, 0x71, 0x76, 0xa0, 0xc7, 0xba, 0x33, + 0x60, 0x0a, 0x4d, 0x25, 0x08, 0x6b, 0x98, 0x3d, + 0xd6, 0x27, 0xcc, 0x42, 0x40, 0xe0, 0xb2, 0xaf, + 0xbc, 0x0d, 0x03, 0xa0, 0xf5, 0x51, 0x38, 0x08, + 0x85, 0x50, 0x07, 0x20, 0x10, 0xfc, 0x9d, 0x33, + 0xa6, 0x74, 0xce, 0x99, 0xd3, 0x3a, 0x67, 0x4c, + 0x38, 0x55, 0x57, 0x59, 0x07, 0x8f, 0x4f, 0xb7, + 0xfe, 0x87, 0x01, 0x50, 0x91, 0x39, 0x3a, 0x0e, + 0x08, 0x8b, 0x09, 0x69, 0x40, 0x13, 0x42, 0x0f, + 0xd6, 0x13, 0x0a, 0x48, 0x4b, 0x3a, 0x41, 0x68, + 0x63, 0x80, 0xf4, 0x18, 0x73, 0xa9, 0x90, 0x59, + 0x4a, 0xbd, 0x4c, 0xc2, 0xe3, 0x08, 0x2d, 0x45, + 0x2e, 0x21, 0x15, 0xb5, 0x4b, 0x8c, 0x65, 0x53, + 0x40, 0x86, 0x19, 0xce, 0xad, 0x69, 0x2a, 0x30, + 0x10, 0x6a, 0x95, 0x28, 0x46, 0xaa, 0x4d, 0x2b, + 0xfd, 0x0b, 0x96, 0x50, 0xcc, 0x00, 0xf5, 0x55, + 0x05, 0x03, 0x50, 0xa8, 0xd0, 0xc2, 0xa0, 0x12, + 0x65, 0xa0, 0x11, 0x50, 0x00, 0x3e, 0xe9, 0x18, + 0x89, 0x64, 0x9b, 0xff, 0x00, 0xc3, 0x9b, 0x76, + 0x49, 0x6e, 0xcd, 0x71, 0x45, 0x14, 0x51, 0x45, + 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, + 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x0c, + 0x9e, 0x0a, 0x20, 0xb0, 0x44, 0x76, 0xba, 0x2a, + 0x42, 0x31, 0xa5, 0x6d, 0x38, 0x4c, 0x70, 0x98, + 0xe1, 0x31, 0xc2, 0x63, 0x84, 0xc7, 0x09, 0x8e, + 0x13, 0x1c, 0x26, 0x38, 0x4c, 0x70, 0x98, 0xe1, + 0x31, 0xc2, 0x63, 0x84, 0xc7, 0x09, 0x8e, 0x13, + 0x1c, 0x26, 0x38, 0x4c, 0x70, 0x98, 0xe1, 0x31, + 0xc2, 0x60, 0xd5, 0x17, 0xc9, 0x42, 0x0e, 0x12, + 0xc0, 0x16, 0xc0, 0x2f, 0x40, 0x1d, 0x3a, 0x92, + 0x21, 0xff, 0x00, 0xe4, 0xe3, 0xb3, 0x8e, 0xce, + 0x3b, 0x38, 0xec, 0xe3, 0xb3, 0x8e, 0xc5, 0xc3, + 0x40, 0x83, 0xc4, 0x74, 0x76, 0x3a, 0xc2, 0x43, + 0xda, 0xce, 0x3b, 0x38, 0xec, 0xe3, 0xb3, 0x8e, + 0xce, 0x3b, 0x38, 0xec, 0xe3, 0xb3, 0x8e, 0xce, + 0x3b, 0x38, 0xec, 0xe3, 0xb3, 0x8e, 0xce, 0x3b, + 0x0c, 0x4e, 0xf8, 0x3a, 0x75, 0x1f, 0xd1, 0xe9, + 0xb3, 0x64, 0x96, 0x6c, 0xd7, 0xfe, 0xc1, 0xb6, + 0x6b, 0xfc, 0x96, 0xc9, 0x60, 0xfb, 0x0d, 0x08, + 0x1c, 0x09, 0x9a, 0x0a, 0x00, 0x79, 0xa1, 0xec, + 0x19, 0xc2, 0x04, 0x25, 0x27, 0x54, 0x86, 0xd2, + 0xeb, 0xef, 0x88, 0x82, 0x3c, 0x01, 0xc3, 0x4b, + 0x55, 0x34, 0x6f, 0xec, 0x60, 0x65, 0x8c, 0x06, + 0x14, 0x7d, 0xda, 0x30, 0xd6, 0x88, 0x66, 0x76, + 0x48, 0xc8, 0x53, 0xa9, 0xf0, 0xa5, 0xe7, 0x49, + 0xee, 0xb2, 0xa2, 0xea, 0x11, 0x0a, 0xcf, 0x48, + 0x44, 0x26, 0x0d, 0x76, 0x05, 0x10, 0x43, 0x3f, + 0xb8, 0xc4, 0x59, 0xca, 0x02, 0x37, 0x2a, 0x8f, + 0xb4, 0x3d, 0x55, 0xc2, 0xa2, 0xec, 0x06, 0x21, + 0x44, 0xb0, 0xc0, 0x25, 0x45, 0xf5, 0x73, 0xea, + 0x61, 0x77, 0x1c, 0x0c, 0x8c, 0x50, 0x40, 0x2b, + 0x4b, 0xbf, 0xaf, 0xeb, 0x66, 0xcc, 0x7f, 0x5d, + 0x3b, 0x22, 0xc2, 0x14, 0x35, 0xa4, 0x33, 0x82, + 0xa6, 0x5b, 0x71, 0x0a, 0x57, 0x43, 0xef, 0x28, + 0x66, 0x0a, 0x71, 0xd5, 0x10, 0x7b, 0x80, 0x3d, + 0xe0, 0x6a, 0x01, 0x84, 0x54, 0x82, 0x27, 0xe9, + 0xf6, 0xca, 0xfd, 0x12, 0x41, 0x21, 0x15, 0x40, + 0x10, 0x4a, 0x52, 0xc6, 0xb2, 0xc9, 0x34, 0x2a, + 0xab, 0xa2, 0xc0, 0x1a, 0xaf, 0xda, 0x61, 0xde, + 0xf4, 0xed, 0xea, 0x66, 0xec, 0x83, 0x6a, 0x22, + 0x54, 0x01, 0xae, 0x66, 0x44, 0x05, 0x84, 0xd5, + 0x7e, 0x4a, 0x22, 0x83, 0xd8, 0x00, 0xdb, 0xde, + 0x67, 0x7e, 0x34, 0x8c, 0x50, 0xba, 0x8a, 0x1a, + 0xca, 0x44, 0xc8, 0x94, 0xd4, 0x87, 0x02, 0x39, + 0x94, 0x23, 0x42, 0xa0, 0x88, 0xe8, 0x19, 0xbc, + 0xe5, 0x25, 0xf6, 0xb8, 0x01, 0x53, 0xe8, 0xb5, + 0xbc, 0xa1, 0x0d, 0xd3, 0xc4, 0x68, 0xc9, 0xd0, + 0xc2, 0xc2, 0x36, 0x28, 0x53, 0xac, 0x1e, 0xa7, + 0xfa, 0x71, 0xb3, 0x64, 0x96, 0xec, 0xd7, 0xfe, + 0xc0, 0x50, 0x60, 0x90, 0x5c, 0x8c, 0x63, 0xf9, + 0xad, 0xe4, 0x97, 0x09, 0xbe, 0xf9, 0x4a, 0x00, + 0x9c, 0xd4, 0x40, 0xa8, 0x1c, 0xc2, 0x7d, 0x94, + 0xa2, 0x06, 0x51, 0xc1, 0x38, 0x91, 0x55, 0x4c, + 0x20, 0xd4, 0x28, 0xaa, 0x2b, 0x7b, 0x2e, 0x96, + 0xa3, 0x0a, 0x40, 0x61, 0xe4, 0xfe, 0xfc, 0xcd, + 0xa4, 0x7b, 0x42, 0x48, 0x37, 0x00, 0x5e, 0xf5, + 0xc0, 0x4d, 0xcc, 0x5a, 0x00, 0x62, 0x59, 0x2a, + 0xf8, 0x85, 0x25, 0xc8, 0x6b, 0x55, 0x50, 0x00, + 0x25, 0x3d, 0xe1, 0x48, 0x6a, 0x4a, 0xa2, 0x10, + 0x05, 0x80, 0xce, 0x3b, 0xd5, 0xd0, 0x05, 0x14, + 0x8c, 0x56, 0x0d, 0xf5, 0x10, 0xae, 0xa6, 0x14, + 0x46, 0x86, 0xb6, 0x34, 0xf8, 0x80, 0x0d, 0x2e, + 0x60, 0x43, 0x15, 0x45, 0x40, 0x32, 0xa8, 0x3f, + 0xa0, 0xf1, 0x55, 0x1d, 0xc0, 0xbb, 0x3d, 0x01, + 0x40, 0xcb, 0x48, 0x02, 0x24, 0x7d, 0xff, 0x00, + 0x16, 0xef, 0x82, 0x1d, 0x54, 0x23, 0x46, 0xc9, + 0xf6, 0xca, 0x03, 0xd2, 0x14, 0xd9, 0x31, 0x0b, + 0xba, 0x5d, 0x15, 0x21, 0x05, 0xd6, 0x98, 0x31, + 0x46, 0x2a, 0x97, 0x24, 0x1b, 0xa2, 0xac, 0x03, + 0xb4, 0x36, 0x05, 0xbe, 0x51, 0x33, 0x2a, 0x09, + 0x1c, 0x96, 0xb0, 0x1e, 0x81, 0x07, 0x2d, 0xc3, + 0x44, 0x66, 0xd2, 0xd1, 0x15, 0x2a, 0x16, 0x15, + 0x00, 0x5d, 0x4d, 0x71, 0x13, 0x0f, 0x69, 0x55, + 0x2b, 0x71, 0x87, 0x49, 0x4e, 0x3f, 0x90, 0xa4, + 0x08, 0xcd, 0xd4, 0x58, 0xb1, 0xbc, 0x58, 0x36, + 0x06, 0x86, 0xf0, 0x22, 0x28, 0x7f, 0x21, 0x29, + 0x11, 0x75, 0x60, 0xcb, 0x2a, 0x58, 0x00, 0xb9, + 0x8c, 0x77, 0x08, 0xb4, 0x0d, 0x10, 0x29, 0x58, + 0x4d, 0x6d, 0x57, 0xd4, 0xa4, 0xc0, 0x90, 0xd9, + 0xa8, 0x57, 0x15, 0xad, 0x05, 0xa8, 0x1e, 0xbc, + 0x02, 0x46, 0xbf, 0xc1, 0xdf, 0x01, 0xe7, 0x48, + 0x3f, 0x3d, 0x36, 0xac, 0x93, 0x71, 0xcf, 0xfe, + 0xce, 0x78, 0x30, 0xf3, 0x19, 0x83, 0x81, 0x84, + 0xc4, 0x9e, 0x88, 0x5b, 0xf5, 0x36, 0xdf, 0x13, + 0x6d, 0xf1, 0x36, 0xdf, 0x13, 0x6d, 0xf1, 0x36, + 0xdf, 0x13, 0x6d, 0xf1, 0x36, 0xdf, 0x13, 0x6d, + 0xf1, 0x36, 0xdf, 0x13, 0x6d, 0xf1, 0x36, 0xdf, + 0x13, 0x6d, 0xf1, 0x36, 0xdf, 0x13, 0x6d, 0xf1, + 0x36, 0xdf, 0x13, 0x6d, 0xf1, 0x36, 0xdf, 0x13, + 0x6d, 0xf1, 0x36, 0xdf, 0x12, 0xe3, 0x3c, 0x4c, + 0x01, 0xfa, 0x19, 0x8c, 0x9a, 0x1f, 0x4a, 0x9b, + 0xdc, 0x95, 0x5c, 0xc1, 0xc0, 0xc7, 0x61, 0xa1, + 0x12, 0x5f, 0xe4, 0x94, 0xa5, 0x29, 0x4a, 0x52, + 0x94, 0xa5, 0x29, 0x4a, 0x52, 0x94, 0xa4, 0x36, + 0x27, 0x59, 0xee, 0xca, 0x4a, 0x79, 0x14, 0x40, + 0x80, 0x60, 0x07, 0xa6, 0xf5, 0x92, 0x6e, 0x39, + 0xe2, 0x96, 0x85, 0x90, 0x75, 0x61, 0xfe, 0x8a, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x39, 0xda, + 0x13, 0x97, 0xff, 0x00, 0x47, 0x72, 0xc9, 0x36, + 0x1c, 0xfe, 0x85, 0x4c, 0x4a, 0xc5, 0x35, 0xa3, + 0x55, 0xd4, 0x4c, 0x1f, 0xe5, 0xe8, 0x20, 0x82, + 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, + 0x82, 0x08, 0x20, 0x82, 0x0a, 0xb0, 0x26, 0xff, + 0x00, 0x48, 0x6f, 0x38, 0x41, 0x22, 0x0d, 0x08, + 0x97, 0xc9, 0x57, 0x48, 0x43, 0x6b, 0x08, 0xfe, + 0x01, 0x38, 0x0c, 0xe0, 0x33, 0x80, 0xce, 0x03, + 0x38, 0x0c, 0xe0, 0x33, 0x80, 0xce, 0x03, 0x38, + 0x0c, 0xe0, 0x33, 0x80, 0xce, 0x03, 0x38, 0x0c, + 0xe0, 0x33, 0x80, 0xce, 0x03, 0x38, 0x0c, 0xe0, + 0x33, 0x80, 0xce, 0x03, 0x2d, 0xf1, 0xad, 0x7f, + 0xc8, 0x86, 0xe4, 0x53, 0x5c, 0xf4, 0x16, 0x36, + 0x99, 0x4a, 0xd2, 0xd4, 0xcd, 0xd1, 0xf3, 0x37, + 0x47, 0xcc, 0xdd, 0x1f, 0x33, 0x74, 0x7c, 0xcd, + 0xd1, 0xf3, 0x37, 0x47, 0xcc, 0xdd, 0x1f, 0x33, + 0x74, 0x7c, 0xcd, 0xd1, 0xf3, 0x37, 0x47, 0xcc, + 0xdd, 0x1f, 0x33, 0x74, 0x7c, 0xcd, 0xd1, 0xf3, + 0x37, 0x47, 0xcc, 0xdd, 0x1f, 0x33, 0x74, 0x7c, + 0xcd, 0xd1, 0xf3, 0x37, 0x47, 0xcc, 0xdd, 0x1f, + 0x33, 0x74, 0x7c, 0xcd, 0xd1, 0xf3, 0x01, 0x17, + 0x44, 0x4b, 0x36, 0x44, 0x61, 0x04, 0x0b, 0x48, + 0x89, 0xbd, 0x64, 0x9b, 0x6e, 0x7f, 0x43, 0xfa, + 0x3f, 0x21, 0xad, 0x64, 0x34, 0x09, 0x3a, 0xe0, + 0x19, 0xd7, 0x28, 0x87, 0x3b, 0x47, 0x06, 0x6b, + 0x31, 0x3f, 0x6b, 0x1f, 0x7b, 0x4c, 0x31, 0xcd, + 0x56, 0xed, 0x6b, 0x0c, 0x54, 0x70, 0x28, 0x65, + 0x2a, 0xc8, 0xd0, 0x2a, 0xc3, 0x40, 0xc0, 0x44, + 0x88, 0x48, 0x60, 0x57, 0x49, 0x75, 0x3f, 0xb0, + 0x2f, 0x78, 0x0a, 0x95, 0xc2, 0xad, 0x44, 0x2d, + 0x66, 0xb7, 0x8e, 0xae, 0x61, 0x9c, 0x60, 0x88, + 0x4d, 0x81, 0x00, 0x58, 0xc5, 0x00, 0x49, 0x17, + 0x24, 0x61, 0x1f, 0x74, 0x00, 0x24, 0x04, 0x33, + 0x67, 0x2a, 0x3e, 0xeb, 0x80, 0x59, 0x13, 0x02, + 0xfa, 0x6a, 0xe5, 0xd0, 0x5a, 0x1c, 0x8b, 0xc3, + 0x25, 0x90, 0xf8, 0x97, 0x6c, 0x40, 0x6c, 0xb9, + 0x28, 0x3c, 0xab, 0x09, 0x81, 0xb2, 0x4e, 0x9f, + 0x5c, 0xa5, 0x1b, 0xe0, 0x5a, 0xc4, 0x0c, 0xbe, + 0xe7, 0x50, 0x0f, 0x47, 0x3a, 0xe2, 0x1e, 0x10, + 0x1f, 0x30, 0x21, 0x8c, 0xc6, 0x75, 0x31, 0xfb, + 0x4e, 0xb8, 0xdb, 0x8d, 0x00, 0x62, 0x4c, 0x4a, + 0x01, 0x45, 0xc7, 0x2e, 0x10, 0x0d, 0x53, 0x25, + 0xe4, 0x08, 0xa1, 0xb4, 0x2b, 0x53, 0x00, 0x52, + 0xac, 0xd9, 0xe5, 0x15, 0x9e, 0xd7, 0x87, 0x33, + 0x94, 0x0a, 0x2e, 0x28, 0x80, 0x37, 0x7b, 0xb4, + 0x84, 0x9b, 0x84, 0xe8, 0xc4, 0x8b, 0xf1, 0x2e, + 0x66, 0xe2, 0x08, 0xfb, 0xc3, 0x8a, 0x63, 0x65, + 0x11, 0x1b, 0x7b, 0x43, 0x9c, 0xbb, 0x75, 0x2e, + 0xab, 0x2e, 0x4f, 0x70, 0x23, 0xd4, 0xc3, 0x1c, + 0xb0, 0x10, 0x48, 0x5c, 0x7a, 0x63, 0x01, 0xa6, + 0x44, 0x6f, 0x56, 0x68, 0x51, 0xe1, 0x2b, 0xae, + 0xcc, 0x1a, 0x36, 0x38, 0x8d, 0x23, 0x12, 0x19, + 0x93, 0x84, 0x64, 0x71, 0x80, 0xe4, 0x8b, 0x11, + 0x3f, 0xbd, 0xa1, 0xd2, 0x09, 0x61, 0x54, 0xb3, + 0x64, 0x73, 0x97, 0xdc, 0xe7, 0x07, 0x43, 0x86, + 0x67, 0xb4, 0x21, 0x7c, 0x68, 0x25, 0xfa, 0xb4, + 0x34, 0x47, 0xb4, 0xeb, 0x95, 0x71, 0x60, 0xd1, + 0xa5, 0xe0, 0xb6, 0xdb, 0xb9, 0x0e, 0x43, 0xc8, + 0x13, 0xaa, 0x75, 0x4e, 0xa9, 0xd5, 0x3a, 0xa7, + 0x54, 0xea, 0x8b, 0x75, 0x9d, 0x40, 0xa8, 0x00, + 0x5c, 0x67, 0x0d, 0xcd, 0xaa, 0x25, 0x02, 0xaf, + 0x44, 0x1a, 0x41, 0xc1, 0x99, 0xd1, 0xa3, 0x97, + 0xdc, 0xee, 0x07, 0x43, 0x8c, 0x33, 0x8e, 0x15, + 0x04, 0x8d, 0x25, 0xe8, 0x4c, 0x04, 0xf6, 0x82, + 0xa4, 0x2b, 0x0c, 0x1e, 0xcf, 0x27, 0x3a, 0xa7, + 0x54, 0xea, 0x9d, 0x53, 0xaa, 0x75, 0x4e, 0xa8, + 0x32, 0x88, 0x16, 0x0c, 0x00, 0x02, 0x9f, 0xf8, + 0x9b, 0xde, 0x49, 0xbe, 0xe7, 0xf4, 0xfc, 0xff, + 0x00, 0x90, 0xac, 0x09, 0x5d, 0xa4, 0xd7, 0x31, + 0x84, 0x85, 0x8b, 0x85, 0x56, 0xf1, 0x87, 0x8d, + 0x28, 0x55, 0x32, 0xa8, 0x31, 0x5d, 0xe5, 0x27, + 0xfe, 0x95, 0x2a, 0xd9, 0x1c, 0x15, 0x68, 0x88, + 0xb2, 0xdd, 0x54, 0xfd, 0x86, 0x0f, 0x5f, 0x98, + 0x36, 0xae, 0x88, 0x60, 0xeb, 0xf2, 0x98, 0x7f, + 0x26, 0x46, 0xb5, 0x84, 0x6c, 0xca, 0x95, 0x86, + 0x32, 0xa4, 0x15, 0xf1, 0x5a, 0xb4, 0x21, 0x46, + 0x31, 0x1d, 0xe8, 0x69, 0x36, 0x35, 0x1e, 0x95, + 0x80, 0x89, 0x92, 0x01, 0x24, 0x59, 0xfb, 0x42, + 0x47, 0x88, 0x96, 0x4c, 0x8b, 0x41, 0x36, 0x43, + 0x0c, 0x06, 0x14, 0x66, 0x0c, 0xf1, 0x7e, 0xc1, + 0x5f, 0xb9, 0x48, 0xc1, 0xa2, 0x80, 0x06, 0x82, + 0xe0, 0xb5, 0xe4, 0x89, 0x0e, 0xb1, 0x47, 0xdc, + 0x17, 0x26, 0xdc, 0xaa, 0xa9, 0xce, 0xe8, 0xde, + 0x28, 0xf2, 0xd0, 0x44, 0x2c, 0x30, 0x92, 0x74, + 0x0f, 0x21, 0xc0, 0x65, 0x35, 0xcc, 0xbf, 0x0d, + 0xbf, 0xbe, 0x9e, 0xa1, 0xb9, 0xe6, 0xb9, 0x83, + 0x20, 0x45, 0xc8, 0xe1, 0x5b, 0xc2, 0x6b, 0x94, + 0x81, 0xa8, 0x58, 0x2f, 0x21, 0xda, 0x02, 0x47, + 0xec, 0xd8, 0x2c, 0x4c, 0x1a, 0xf9, 0x8f, 0xe8, + 0x10, 0xd0, 0x1b, 0xe4, 0xf0, 0x21, 0xaf, 0x4e, + 0x32, 0xef, 0xb3, 0x3f, 0x78, 0x89, 0xd1, 0x03, + 0x90, 0x10, 0xb4, 0x36, 0x6d, 0x5a, 0x18, 0x19, + 0xe0, 0xf2, 0x81, 0xb6, 0x74, 0x86, 0x8d, 0x45, + 0x77, 0x99, 0x8e, 0x0d, 0x44, 0x39, 0x48, 0x78, + 0x9e, 0xbc, 0x84, 0x9b, 0x11, 0x8a, 0x5d, 0xec, + 0x68, 0x0d, 0x07, 0x53, 0x8c, 0x54, 0xe2, 0x8a, + 0x15, 0xe2, 0x01, 0xb3, 0x32, 0x11, 0x46, 0x22, + 0x53, 0x30, 0xe7, 0x0c, 0x9a, 0xbd, 0x94, 0x25, + 0x48, 0x61, 0x3a, 0x42, 0x32, 0x05, 0x0c, 0x9b, + 0x59, 0x87, 0x21, 0x0e, 0x8b, 0x3e, 0xb0, 0x1b, + 0xe7, 0x38, 0x64, 0x09, 0x26, 0x00, 0xad, 0x0a, + 0x0a, 0x78, 0x86, 0x14, 0x41, 0x40, 0x68, 0x14, + 0x12, 0x51, 0xda, 0x0e, 0x2d, 0x5c, 0x1c, 0x69, + 0xab, 0x69, 0xfc, 0x66, 0x3a, 0x99, 0xae, 0x61, + 0x1e, 0xc6, 0x0d, 0xa3, 0x38, 0x50, 0x04, 0xd4, + 0x9f, 0x79, 0xac, 0x66, 0xb1, 0x9a, 0xc6, 0x6b, + 0x19, 0xac, 0x66, 0xb1, 0x9a, 0xc6, 0x55, 0x97, + 0xc7, 0x26, 0x3a, 0x01, 0xab, 0x82, 0xb0, 0x27, + 0x90, 0x43, 0x4f, 0x61, 0xf3, 0x1a, 0x20, 0x8b, + 0x34, 0x31, 0xab, 0xb8, 0xd2, 0x10, 0x14, 0xf1, + 0x0c, 0x28, 0x82, 0x80, 0xd0, 0x29, 0x54, 0xb7, + 0xa9, 0x69, 0x55, 0x1a, 0xca, 0x97, 0x78, 0xd9, + 0x07, 0xc4, 0xea, 0xfe, 0x04, 0x34, 0x4b, 0x8b, + 0x91, 0x4b, 0x0d, 0x06, 0x53, 0x58, 0xcd, 0x63, + 0x35, 0x8c, 0xd6, 0x33, 0x58, 0xcd, 0x63, 0x35, + 0x8c, 0xd6, 0x33, 0xef, 0x0f, 0xc1, 0x36, 0x3c, + 0x93, 0x6d, 0xcf, 0x14, 0xfc, 0xff, 0x00, 0x90, + 0x89, 0x98, 0xc9, 0xcc, 0x24, 0xe8, 0x96, 0x42, + 0x24, 0x6b, 0x2b, 0xa0, 0x80, 0x0f, 0x81, 0x3e, + 0x82, 0x86, 0xb2, 0x77, 0x84, 0x8d, 0x4c, 0x2a, + 0x52, 0x2d, 0x85, 0x7d, 0xe5, 0xd2, 0x02, 0x14, + 0xac, 0xdf, 0x0a, 0x5f, 0x09, 0x65, 0x50, 0x0a, + 0x00, 0xb5, 0xad, 0x33, 0xd0, 0x64, 0xab, 0xd4, + 0xe3, 0xef, 0x0f, 0x68, 0xe1, 0x40, 0x28, 0x3a, + 0x4a, 0x71, 0x43, 0x41, 0xa1, 0x1d, 0x90, 0x82, + 0x24, 0x55, 0x8e, 0x91, 0x86, 0x98, 0x87, 0x03, + 0x5e, 0x1a, 0x45, 0x68, 0x33, 0x50, 0x11, 0x5c, + 0xf0, 0x84, 0xc3, 0x60, 0x54, 0xc7, 0xef, 0xb4, + 0x24, 0x6a, 0x61, 0x52, 0x91, 0x6c, 0x2b, 0xef, + 0x08, 0x50, 0x14, 0xc8, 0xb3, 0x49, 0x4a, 0x22, + 0x69, 0x14, 0x81, 0x2b, 0x68, 0x48, 0x60, 0xc0, + 0xe1, 0x57, 0x7b, 0xc2, 0x8b, 0x28, 0x90, 0x02, + 0xa1, 0x02, 0xc0, 0xd2, 0x66, 0xf3, 0x90, 0x07, + 0xd5, 0x5e, 0x74, 0x46, 0xa2, 0x04, 0x42, 0x94, + 0xdb, 0x58, 0x20, 0xa1, 0x00, 0x87, 0x27, 0x32, + 0x10, 0x85, 0x0e, 0x52, 0x20, 0xe1, 0x3a, 0x62, + 0xec, 0xae, 0x46, 0xbe, 0xd0, 0x96, 0xdb, 0x40, + 0x02, 0x0f, 0xb1, 0x96, 0x84, 0xc0, 0x40, 0x28, + 0x2d, 0xd3, 0xda, 0x03, 0xb7, 0x4d, 0x69, 0xf8, + 0xaf, 0xbc, 0x6d, 0x35, 0x3b, 0x57, 0x3c, 0x27, + 0xc6, 0xc3, 0xe3, 0x2d, 0x07, 0x82, 0x41, 0x02, + 0x0c, 0x0d, 0x0d, 0xe5, 0x7f, 0x4e, 0x80, 0x2a, + 0x8b, 0x19, 0x55, 0xa2, 0x32, 0x65, 0x24, 0x52, + 0x45, 0x4e, 0x86, 0xe2, 0x3d, 0x59, 0x89, 0x4a, + 0x84, 0xde, 0x02, 0x1e, 0x04, 0x34, 0x35, 0x1c, + 0x84, 0x05, 0xb1, 0x47, 0x0f, 0xa2, 0x50, 0x02, + 0x14, 0x81, 0x25, 0x40, 0xb1, 0x18, 0x39, 0x70, + 0x6d, 0x93, 0xbc, 0x30, 0x94, 0x88, 0x00, 0x04, + 0x45, 0xa1, 0xf3, 0xa5, 0x6a, 0x23, 0xd0, 0xa0, + 0xce, 0x06, 0x35, 0x02, 0x05, 0xa8, 0x94, 0xa0, + 0xbb, 0x4f, 0x24, 0xe9, 0x84, 0x48, 0xda, 0x88, + 0x35, 0x7e, 0xe0, 0xad, 0x22, 0x4f, 0xcc, 0xa4, + 0x20, 0xeb, 0x30, 0x4c, 0x7f, 0xc2, 0xaa, 0xaa, + 0x9f, 0xd0, 0x58, 0x55, 0x78, 0xa4, 0xa1, 0x9c, + 0xac, 0x2d, 0x0c, 0xd5, 0x42, 0x00, 0xa6, 0x77, + 0x78, 0x7c, 0xe9, 0x56, 0x88, 0xf4, 0x28, 0x54, + 0x80, 0x40, 0x01, 0x0a, 0x3d, 0xa5, 0x46, 0x60, + 0x12, 0x5a, 0xc0, 0x4a, 0x32, 0x4b, 0xa9, 0xf5, + 0x40, 0x2c, 0xff, 0x00, 0xe1, 0x55, 0x53, 0x28, + 0x9d, 0x0a, 0x43, 0x16, 0xe8, 0x3e, 0x94, 0x9b, + 0x1e, 0x49, 0xb2, 0xe7, 0xf4, 0xfc, 0x3f, 0x93, + 0x32, 0x48, 0x84, 0xf0, 0x3d, 0xa0, 0xc5, 0x95, + 0xb2, 0xbb, 0x4d, 0x95, 0xda, 0x6c, 0xae, 0xd3, + 0x65, 0x76, 0x9b, 0x2b, 0xb4, 0xd9, 0x5d, 0xa6, + 0xca, 0xed, 0x36, 0x57, 0x69, 0xb2, 0xbb, 0x4d, + 0x95, 0xda, 0x6c, 0xae, 0xd3, 0x65, 0x76, 0x9b, + 0x2b, 0xb4, 0xd9, 0x5d, 0xa6, 0xca, 0xed, 0x36, + 0x57, 0x69, 0xb2, 0xbb, 0x4d, 0x95, 0xda, 0x6c, + 0xae, 0xd3, 0x65, 0x76, 0x87, 0x27, 0x54, 0x1a, + 0x0f, 0xe7, 0xa0, 0x28, 0xb1, 0x28, 0x9e, 0x29, + 0x9b, 0xc8, 0xc4, 0x8b, 0xff, 0x00, 0x95, 0x14, + 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, + 0x14, 0x51, 0x45, 0x14, 0x51, 0x44, 0x23, 0xcb, + 0x00, 0x3f, 0x12, 0x92, 0x0c, 0x89, 0x60, 0xc6, + 0x1e, 0x82, 0x7e, 0xa1, 0x10, 0xe0, 0x70, 0x8d, + 0x57, 0xce, 0x75, 0x5f, 0x39, 0xd5, 0x7c, 0xe7, + 0x55, 0xf3, 0x9d, 0x57, 0xce, 0x75, 0x5f, 0x39, + 0xd5, 0x7c, 0xe7, 0x55, 0xf3, 0x9d, 0x57, 0xce, + 0x75, 0x5f, 0x39, 0xd5, 0x7c, 0xe7, 0x55, 0xf3, + 0x9d, 0x57, 0xce, 0x75, 0x5f, 0x39, 0xd5, 0x7c, + 0xe7, 0x55, 0xf3, 0x9d, 0x57, 0xce, 0x75, 0x5f, + 0x39, 0xd5, 0x7c, 0xe7, 0x55, 0xf3, 0x9d, 0x57, + 0xce, 0x46, 0xc4, 0x19, 0x14, 0xc6, 0xfe, 0x8d, + 0xaf, 0x24, 0xdd, 0x73, 0xfa, 0x7e, 0x1f, 0xc9, + 0xf7, 0x7f, 0xd0, 0x06, 0x40, 0xb7, 0x58, 0x18, + 0xf1, 0x0e, 0x01, 0x98, 0x3b, 0x30, 0x3a, 0x93, + 0x49, 0x55, 0x24, 0xc1, 0x29, 0x70, 0xb4, 0x8f, + 0x93, 0xa7, 0xa4, 0xaf, 0xac, 0x40, 0xc5, 0xda, + 0x48, 0xa1, 0x6d, 0xcc, 0xe2, 0x67, 0x0e, 0x70, + 0xe4, 0xe0, 0xd0, 0x00, 0x05, 0x0d, 0x30, 0xc3, + 0xae, 0xa5, 0x55, 0xb3, 0x98, 0x59, 0x59, 0x60, + 0x30, 0xc6, 0x57, 0x23, 0x32, 0x90, 0x00, 0x00, + 0x01, 0x1a, 0x6b, 0x40, 0xf1, 0x5d, 0xc1, 0xd5, + 0x91, 0x57, 0xed, 0xfe, 0xf6, 0xec, 0xbd, 0x6d, + 0x6f, 0xa7, 0xf6, 0x2a, 0xc9, 0x82, 0x49, 0x2d, + 0x51, 0x48, 0x70, 0xfa, 0x32, 0xa8, 0x81, 0x91, + 0xfc, 0x05, 0xf0, 0x82, 0x5e, 0x6a, 0x07, 0xe2, + 0x1e, 0x25, 0x57, 0xde, 0x06, 0x38, 0x0d, 0xac, + 0xae, 0x61, 0xac, 0x0f, 0x36, 0x8d, 0x01, 0x57, + 0x23, 0xa7, 0xd4, 0x88, 0x96, 0xac, 0x18, 0x50, + 0x80, 0x83, 0x90, 0x82, 0x23, 0xfd, 0x2b, 0x0c, + 0x02, 0x2f, 0x00, 0x15, 0xe6, 0x37, 0xed, 0x2f, + 0xa2, 0x3f, 0xe4, 0x19, 0xad, 0x3f, 0x6c, 0x00, + 0x5d, 0xfd, 0xa1, 0x92, 0xe9, 0x46, 0x61, 0x26, + 0x80, 0x9a, 0xb4, 0x11, 0x10, 0x62, 0x54, 0x36, + 0xc4, 0x52, 0xb1, 0x82, 0xa9, 0x0b, 0xfa, 0xc0, + 0x3c, 0xe1, 0x08, 0x40, 0x6e, 0x29, 0x06, 0xfc, + 0x0c, 0x11, 0x10, 0x46, 0xc8, 0x2f, 0xdc, 0x20, + 0x39, 0xa3, 0x63, 0x1a, 0x5f, 0x8f, 0x9a, 0x61, + 0xcd, 0x06, 0xe8, 0x40, 0x23, 0xe8, 0x88, 0xdc, + 0x83, 0x24, 0x33, 0x55, 0x4e, 0x56, 0x37, 0x83, + 0x42, 0xb8, 0x80, 0x06, 0x60, 0x8a, 0x18, 0x1a, + 0x70, 0x9f, 0xb1, 0x00, 0x3e, 0x8c, 0x1e, 0x58, + 0x62, 0x02, 0xa3, 0x4f, 0xa8, 0xf9, 0x86, 0x2d, + 0xb9, 0xeb, 0x02, 0xe0, 0xcc, 0x81, 0x9a, 0x98, + 0xdd, 0x0b, 0x19, 0x1f, 0x88, 0x58, 0x85, 0x10, + 0x22, 0xae, 0xc6, 0x71, 0xe1, 0x08, 0x19, 0xd1, + 0xa3, 0xd1, 0x06, 0xb0, 0x7a, 0x3e, 0x98, 0x0a, + 0x04, 0x88, 0x75, 0x14, 0x98, 0xd1, 0x0e, 0x86, + 0x0b, 0x14, 0x7a, 0xc2, 0xe3, 0xbf, 0x62, 0xeb, + 0x41, 0xc4, 0xe2, 0x68, 0x68, 0x24, 0x51, 0xda, + 0xa0, 0xe1, 0x05, 0x03, 0x72, 0x78, 0x39, 0x32, + 0x01, 0xe9, 0x00, 0x81, 0x4c, 0x15, 0x3d, 0x36, + 0x9c, 0x93, 0x7d, 0xcf, 0xe9, 0xf9, 0x7f, 0x04, + 0xfb, 0xbf, 0xe8, 0x62, 0x70, 0x25, 0xc2, 0x0c, + 0xa1, 0x38, 0xca, 0xdd, 0xa5, 0xaf, 0x66, 0x8a, + 0xaa, 0x87, 0x75, 0x33, 0xfb, 0x89, 0xfc, 0x8e, + 0x32, 0x9d, 0x8a, 0x25, 0x28, 0x5d, 0x00, 0x03, + 0x04, 0xbe, 0x14, 0x58, 0x49, 0xa4, 0x2d, 0x73, + 0x05, 0xd0, 0xbc, 0xd4, 0x85, 0x1b, 0xc2, 0x14, + 0xd2, 0x35, 0x00, 0x5d, 0x48, 0x27, 0x01, 0x82, + 0xe6, 0x21, 0xbe, 0x33, 0x59, 0x96, 0x58, 0x05, + 0x66, 0x95, 0x68, 0x42, 0x64, 0xa3, 0x31, 0xe0, + 0x39, 0x80, 0x32, 0x20, 0x9d, 0x08, 0xfe, 0xce, + 0xdd, 0x97, 0xad, 0xad, 0xf4, 0xfe, 0xf0, 0x9a, + 0x0d, 0xd3, 0x8c, 0xb5, 0x76, 0x55, 0x80, 0x02, + 0x6d, 0x77, 0x9a, 0xa4, 0x16, 0xdb, 0x97, 0x6b, + 0x06, 0xc5, 0x43, 0xaa, 0x81, 0x61, 0xdf, 0x26, + 0xe2, 0xc1, 0xd0, 0xda, 0x56, 0x16, 0x72, 0x12, + 0x56, 0xc0, 0x01, 0xf6, 0x62, 0x8f, 0x60, 0xe4, + 0xb0, 0xef, 0x89, 0x2f, 0xe6, 0x61, 0xc7, 0xf0, + 0x14, 0x88, 0x02, 0xb8, 0x84, 0xf5, 0x7f, 0xf3, + 0x18, 0xe8, 0x11, 0x9c, 0x20, 0x12, 0x06, 0xeb, + 0x84, 0x4b, 0x14, 0x0d, 0x8a, 0x4f, 0x20, 0x0a, + 0x53, 0x13, 0xd0, 0xc2, 0x1a, 0x11, 0xf2, 0x99, + 0xbf, 0xab, 0x14, 0xa3, 0xf8, 0x9e, 0x9d, 0x61, + 0x0e, 0xb0, 0x2b, 0xe8, 0x44, 0x09, 0x43, 0x09, + 0xd2, 0x5f, 0xd7, 0x45, 0x10, 0x72, 0x93, 0x04, + 0x09, 0x3a, 0x00, 0x05, 0x6a, 0x8f, 0xf1, 0x10, + 0x39, 0xc2, 0xba, 0x18, 0x48, 0xc1, 0x41, 0x04, + 0x40, 0x94, 0x5a, 0x18, 0x30, 0xe0, 0x30, 0xf0, + 0x2a, 0x00, 0xe6, 0x4e, 0x0c, 0x60, 0x25, 0xcd, + 0x42, 0xd8, 0xd4, 0x26, 0xc9, 0x2a, 0x42, 0xbc, + 0xe3, 0xf9, 0x56, 0x72, 0x2d, 0x20, 0x6c, 0xd0, + 0x22, 0x6b, 0x3b, 0x7e, 0x7d, 0xe3, 0x77, 0x39, + 0x22, 0x60, 0xc7, 0x33, 0x83, 0x06, 0xf2, 0x80, + 0x1a, 0x44, 0x73, 0x82, 0x20, 0xfb, 0x14, 0x7d, + 0xa3, 0xcd, 0x08, 0xab, 0x0f, 0x90, 0x1f, 0x9c, + 0x01, 0xa4, 0x4c, 0x5e, 0xe9, 0x32, 0x55, 0xc3, + 0xd4, 0x10, 0x0b, 0x61, 0x22, 0x4a, 0x00, 0x02, + 0xca, 0x51, 0xf9, 0x80, 0x4e, 0xa3, 0x6c, 0xad, + 0x33, 0x05, 0x41, 0x16, 0xd1, 0x21, 0x01, 0x58, + 0x89, 0x0c, 0x86, 0x30, 0x8f, 0x02, 0x04, 0xd7, + 0x60, 0x51, 0xe7, 0xf6, 0x0c, 0x10, 0xa1, 0xe9, + 0x03, 0x08, 0xe2, 0x53, 0xd5, 0x69, 0x6f, 0x6f, + 0x58, 0x9b, 0x6e, 0x78, 0xa7, 0xe7, 0xfc, 0x12, + 0xc8, 0x5e, 0xdc, 0x04, 0x71, 0xd9, 0xc7, 0x67, + 0x1d, 0x9c, 0x76, 0x71, 0xd9, 0xc7, 0x67, 0x1d, + 0x9c, 0x76, 0x71, 0xd9, 0xc7, 0x67, 0x1d, 0x9c, + 0x76, 0x71, 0xd9, 0xc7, 0x67, 0x1d, 0x9c, 0x76, + 0x71, 0xd9, 0xc7, 0x67, 0x1d, 0x9c, 0x76, 0x71, + 0xd8, 0xc5, 0x30, 0x46, 0xb4, 0xaf, 0x5b, 0x2f, + 0xd4, 0x31, 0x0f, 0xed, 0x11, 0x11, 0x12, 0xf5, + 0x5a, 0x54, 0x8f, 0x65, 0xe8, 0x97, 0x3d, 0xab, + 0x02, 0xe8, 0x54, 0xbb, 0x6c, 0x58, 0x3a, 0x90, + 0x97, 0x6d, 0x8b, 0x07, 0x52, 0x13, 0xbc, 0x73, + 0x64, 0xd4, 0x12, 0x40, 0x31, 0x57, 0xba, 0x94, + 0x87, 0xa1, 0x02, 0xc2, 0x20, 0xe5, 0x41, 0x08, + 0x0a, 0x11, 0x58, 0xd5, 0xe4, 0x69, 0x4f, 0xed, + 0x11, 0x11, 0x12, 0x8d, 0xa8, 0xc5, 0x85, 0x3d, + 0x0f, 0x27, 0x20, 0x01, 0x38, 0xb4, 0xf5, 0x41, + 0x00, 0x7b, 0x1c, 0x01, 0x75, 0x61, 0x02, 0x49, + 0xc9, 0xc7, 0xfc, 0x42, 0x08, 0x20, 0x82, 0x08, + 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, + 0x03, 0xb1, 0x96, 0x42, 0x7d, 0x95, 0xf5, 0xc9, + 0xb6, 0xe7, 0x8a, 0x7e, 0x3f, 0xc1, 0xe8, 0x38, + 0x01, 0x0c, 0x0b, 0x04, 0x70, 0x07, 0x46, 0x04, + 0xb2, 0x97, 0x80, 0x62, 0xb1, 0x90, 0x20, 0x90, + 0xba, 0x47, 0xb0, 0x02, 0x82, 0x0a, 0x5a, 0x62, + 0x7d, 0x90, 0xfe, 0x8a, 0x40, 0xad, 0x56, 0x93, + 0x76, 0x50, 0x42, 0x8b, 0x48, 0x39, 0xe4, 0xb0, + 0x1b, 0xac, 0x00, 0x50, 0x39, 0x09, 0xc0, 0x7c, + 0x90, 0x25, 0x95, 0x22, 0xc5, 0xc4, 0x09, 0x82, + 0x3a, 0xd1, 0x81, 0xfb, 0xd7, 0x48, 0x11, 0x44, + 0xaa, 0x07, 0x25, 0x58, 0x1d, 0xaf, 0x29, 0xb2, + 0x4b, 0x72, 0x00, 0x48, 0xd3, 0x00, 0x6e, 0xee, + 0x2d, 0x1b, 0xfc, 0x58, 0x17, 0xde, 0x12, 0x92, + 0x37, 0x23, 0x59, 0x66, 0x1c, 0x30, 0x88, 0x83, + 0xc1, 0x19, 0x47, 0x8d, 0x94, 0x0a, 0xc6, 0x3a, + 0xbc, 0x0c, 0x64, 0x84, 0x26, 0x5e, 0xa0, 0x9c, + 0x1c, 0x98, 0x49, 0xa1, 0x8b, 0x90, 0x09, 0x84, + 0xc7, 0x5a, 0xca, 0x23, 0xbc, 0x02, 0x4a, 0xb3, + 0x4a, 0xf5, 0xa1, 0x84, 0x38, 0x90, 0x40, 0x92, + 0x41, 0x64, 0x25, 0x19, 0xa2, 0x00, 0x00, 0x03, + 0x10, 0x1f, 0x6e, 0x3a, 0x4a, 0x07, 0x80, 0xa1, + 0xa5, 0x13, 0x20, 0xeb, 0xa6, 0xb0, 0xa4, 0x52, + 0x89, 0x14, 0x22, 0xaa, 0x5a, 0x9f, 0xb8, 0xde, + 0xa1, 0x41, 0xee, 0x9b, 0x12, 0x22, 0x68, 0x5a, + 0x87, 0x0c, 0x4b, 0xd8, 0x02, 0x26, 0xff, 0x00, + 0x9b, 0xd6, 0xd6, 0xfa, 0x7f, 0x41, 0x10, 0x55, + 0x93, 0xb6, 0x28, 0x60, 0xea, 0x74, 0x06, 0x7b, + 0x2d, 0xe5, 0x80, 0x55, 0xa0, 0x59, 0x8e, 0xbe, + 0xf2, 0xa1, 0xc8, 0x99, 0xac, 0xc7, 0x00, 0xd9, + 0x62, 0xe8, 0x9d, 0x6c, 0x11, 0x0c, 0x64, 0xa1, + 0x55, 0x59, 0x90, 0x90, 0xb0, 0x25, 0x54, 0xb0, + 0x68, 0xd0, 0x08, 0x81, 0xe2, 0x47, 0x24, 0x8b, + 0x38, 0x8e, 0x8d, 0x10, 0x80, 0x89, 0x2c, 0x1d, + 0x45, 0xa8, 0x03, 0x2f, 0xbe, 0xaa, 0x2d, 0x58, + 0xaa, 0x42, 0xcd, 0x1a, 0x01, 0x16, 0xff, 0x00, + 0xa8, 0x6e, 0x09, 0xd0, 0xfa, 0x08, 0xb0, 0x89, + 0x10, 0xbd, 0xc4, 0x3f, 0x7f, 0xf8, 0x8d, 0xf7, + 0x7f, 0xe6, 0x6d, 0xd9, 0x7a, 0xe4, 0xdf, 0x73, + 0xfa, 0x7e, 0x3f, 0xc1, 0x18, 0xc9, 0xe3, 0x4a, + 0x9f, 0x02, 0x20, 0x9d, 0x62, 0xed, 0x84, 0x22, + 0x0e, 0x84, 0x12, 0x21, 0x4e, 0x1d, 0x2b, 0x58, + 0x02, 0x95, 0x22, 0x75, 0xca, 0x31, 0x7e, 0xc4, + 0x08, 0x12, 0x48, 0x14, 0xa0, 0x2d, 0x12, 0x55, + 0x8d, 0xd6, 0x92, 0x80, 0xda, 0x19, 0x46, 0x75, + 0x5b, 0x74, 0xcb, 0x76, 0x4e, 0xde, 0xf0, 0x4e, + 0x00, 0xa0, 0x09, 0x60, 0x0a, 0x95, 0x03, 0xfa, + 0x84, 0xc0, 0x25, 0x08, 0x48, 0x53, 0x0d, 0x87, + 0xad, 0x06, 0xac, 0xf4, 0xa6, 0x43, 0x2e, 0xc7, + 0xf1, 0x2b, 0x64, 0x91, 0xaf, 0xb4, 0x07, 0xb2, + 0x19, 0xad, 0x20, 0xc8, 0xf5, 0x15, 0xec, 0x0a, + 0xe8, 0x38, 0x13, 0x95, 0x4a, 0x55, 0x63, 0x7f, + 0x98, 0xea, 0xa1, 0x4c, 0x99, 0x00, 0x11, 0x46, + 0x00, 0xaa, 0x4b, 0x56, 0x14, 0x84, 0x3b, 0xa5, + 0x48, 0x65, 0x51, 0x0a, 0x2a, 0x5a, 0xab, 0x00, + 0x12, 0x86, 0x87, 0xda, 0x30, 0xc6, 0x18, 0xd9, + 0x8d, 0x0a, 0x02, 0x73, 0x73, 0x5f, 0x73, 0xba, + 0x8b, 0x4e, 0x75, 0x8d, 0x51, 0xbd, 0x0f, 0x96, + 0xb3, 0x4c, 0x59, 0x78, 0x30, 0x55, 0x40, 0x82, + 0x2d, 0x78, 0x62, 0x25, 0x10, 0x1d, 0x11, 0x70, + 0xf8, 0xc3, 0x70, 0x1a, 0x91, 0x88, 0x18, 0x05, + 0x05, 0x6f, 0x2a, 0x3d, 0x06, 0xac, 0x80, 0x15, + 0xc4, 0xa1, 0x79, 0x56, 0xa2, 0xce, 0xe1, 0x09, + 0xb5, 0x37, 0xf5, 0xbf, 0x5a, 0x6c, 0x8b, 0x4e, + 0x53, 0x39, 0x4c, 0xe5, 0x33, 0x94, 0xce, 0x53, + 0x3e, 0x84, 0xa1, 0x98, 0x00, 0x20, 0x88, 0x53, + 0x77, 0x32, 0xe9, 0xc8, 0x08, 0x27, 0x31, 0x6a, + 0xc7, 0x5c, 0xa5, 0x86, 0x75, 0x40, 0x43, 0x04, + 0xdb, 0xb3, 0x73, 0x15, 0xe8, 0x78, 0x1b, 0x54, + 0x21, 0x86, 0xe8, 0x5c, 0x62, 0x52, 0x2c, 0xc2, + 0x2b, 0x27, 0x52, 0x4a, 0x2e, 0xf1, 0xe1, 0x26, + 0x8c, 0x69, 0x5c, 0x3d, 0xfa, 0xcc, 0x57, 0xa1, + 0xe0, 0x6d, 0x50, 0x86, 0x1b, 0xa1, 0x70, 0xe1, + 0xd6, 0x88, 0x88, 0x3f, 0xc8, 0xd6, 0x90, 0xc2, + 0xe1, 0x52, 0x5f, 0x33, 0x94, 0xce, 0x53, 0x39, + 0x4c, 0xe5, 0x33, 0x94, 0xce, 0x53, 0x00, 0x86, + 0x42, 0x22, 0x9f, 0xa0, 0xe8, 0xcf, 0x01, 0x74, + 0x9e, 0x83, 0x36, 0x05, 0x66, 0x06, 0xb1, 0xa5, + 0xa8, 0x37, 0x5d, 0x2a, 0x92, 0x74, 0x86, 0x89, + 0x3c, 0xe0, 0x4a, 0x80, 0x20, 0x9d, 0x85, 0xdf, + 0xb4, 0x25, 0x80, 0x43, 0xc2, 0xa4, 0x98, 0x2a, + 0x27, 0xce, 0x50, 0x94, 0xf4, 0xea, 0x00, 0xd6, + 0x34, 0x70, 0x50, 0x85, 0x03, 0x42, 0x58, 0x90, + 0x06, 0x0c, 0xc5, 0x68, 0x19, 0x06, 0xa1, 0x58, + 0x2c, 0x4f, 0xd5, 0x86, 0x88, 0x49, 0x8b, 0x30, + 0x1e, 0xa8, 0x22, 0x28, 0xaf, 0x11, 0xd6, 0xf1, + 0x7a, 0xc2, 0x18, 0x0c, 0x03, 0x9a, 0xd7, 0xba, + 0x87, 0x06, 0xe0, 0x85, 0x62, 0x36, 0x0c, 0x06, + 0x90, 0x8c, 0x4e, 0x11, 0x4d, 0x55, 0x83, 0x0a, + 0x60, 0x4d, 0xd0, 0x5b, 0xf6, 0x85, 0x60, 0x83, + 0xa1, 0x23, 0x8a, 0x16, 0xcf, 0x3a, 0x22, 0x34, + 0x6a, 0x49, 0x79, 0xca, 0x60, 0x14, 0x40, 0xb8, + 0x58, 0x77, 0xec, 0x03, 0x83, 0xec, 0xfb, 0xc0, + 0xa7, 0x0b, 0x5e, 0x40, 0x6a, 0x91, 0x56, 0x34, + 0x32, 0x93, 0xe3, 0xec, 0x62, 0x02, 0x80, 0x08, + 0xa3, 0x40, 0x84, 0x04, 0x43, 0xdf, 0xb3, 0xb1, + 0x2e, 0xb1, 0x82, 0x26, 0xd4, 0x03, 0x96, 0x90, + 0x06, 0xba, 0xbb, 0x5e, 0x54, 0x85, 0x80, 0x3b, + 0x86, 0x85, 0x8f, 0x68, 0xbf, 0x43, 0x8c, 0xa6, + 0x61, 0x4a, 0x01, 0x8c, 0x4c, 0x1f, 0x80, 0xb7, + 0x02, 0x34, 0x78, 0x8c, 0xae, 0xca, 0x3a, 0x83, + 0x72, 0xf7, 0xc3, 0xd4, 0x26, 0xeb, 0x9f, 0xd3, + 0xf2, 0x7e, 0x08, 0x22, 0x58, 0x6c, 0x44, 0x2e, + 0x31, 0x5c, 0x99, 0x7f, 0x92, 0x18, 0x61, 0x86, + 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, + 0x86, 0x18, 0x61, 0xc8, 0x00, 0x9e, 0x08, 0x78, + 0x61, 0xee, 0x5e, 0xa2, 0x93, 0x0b, 0xc8, 0xb2, + 0x3f, 0xe0, 0x84, 0x21, 0x08, 0x42, 0x08, 0xc4, + 0xd1, 0x05, 0xc1, 0xc9, 0xc1, 0x4c, 0x36, 0x94, + 0x74, 0x9c, 0x7d, 0x10, 0xc5, 0x4b, 0x18, 0xf2, + 0x0d, 0x62, 0xf8, 0xdf, 0xf8, 0x43, 0x05, 0x18, + 0x06, 0xf1, 0x3d, 0x87, 0xff, 0x00, 0x14, 0x21, + 0x08, 0x42, 0x10, 0x8b, 0xe1, 0xd3, 0xa9, 0x1e, + 0x82, 0xb5, 0x18, 0x21, 0x83, 0x02, 0x90, 0x5c, + 0x41, 0x88, 0xb3, 0x0a, 0x59, 0x34, 0xc0, 0x1a, + 0xc1, 0xca, 0x95, 0x18, 0xe1, 0x2c, 0xb4, 0xaa, + 0xc4, 0xe0, 0xeb, 0x78, 0x05, 0xf2, 0x6c, 0x0d, + 0x41, 0xa0, 0x56, 0xdd, 0xaa, 0xc0, 0xab, 0x3d, + 0x54, 0xdb, 0x06, 0x84, 0xa8, 0x59, 0x5b, 0x17, + 0xc8, 0x98, 0x4a, 0x12, 0x0a, 0xd3, 0x50, 0x24, + 0x11, 0x40, 0x6a, 0xa8, 0x21, 0xfa, 0x82, 0xf8, + 0x02, 0x07, 0xf1, 0x11, 0x32, 0x9e, 0x82, 0x00, + 0x63, 0x90, 0x86, 0x41, 0xa9, 0xd3, 0x15, 0x3e, + 0x44, 0x5d, 0xe0, 0xa0, 0x40, 0x2b, 0x73, 0xad, + 0x49, 0x4e, 0x22, 0x2e, 0xd6, 0xc0, 0xc1, 0x2c, + 0xc0, 0x04, 0x1a, 0xa8, 0x2b, 0x6a, 0x0b, 0xe5, + 0x08, 0x28, 0xc2, 0x68, 0x19, 0x64, 0xd1, 0x5f, + 0xb6, 0x02, 0x2e, 0x55, 0x19, 0x30, 0x6a, 0x16, + 0xae, 0x38, 0x89, 0xa4, 0x11, 0x28, 0x41, 0xe0, + 0x12, 0x8a, 0x20, 0x2f, 0xc4, 0xe6, 0x4c, 0x8b, + 0x46, 0x95, 0x80, 0xff, 0x00, 0x01, 0x87, 0x0f, + 0xa4, 0x07, 0xa4, 0x64, 0x3b, 0x36, 0x5f, 0x01, + 0x42, 0xcc, 0x86, 0xc2, 0x00, 0x45, 0xbb, 0xdd, + 0x92, 0x61, 0x2b, 0x0a, 0x43, 0x2b, 0x1b, 0x14, + 0x61, 0x12, 0x4c, 0x46, 0x16, 0x30, 0x53, 0xac, + 0x08, 0x20, 0xb8, 0xb1, 0x3d, 0x02, 0x42, 0x08, + 0x0a, 0x5b, 0x0f, 0x50, 0x9b, 0x2e, 0x7f, 0x4f, + 0xc9, 0xf8, 0x22, 0xaa, 0x11, 0x84, 0xb0, 0x79, + 0x99, 0xc0, 0x67, 0x01, 0x9c, 0x06, 0x70, 0x19, + 0xc0, 0x67, 0x01, 0x9c, 0x06, 0x70, 0x19, 0xc0, + 0x67, 0x01, 0x9c, 0x06, 0x70, 0x19, 0xc0, 0x67, + 0x01, 0x9c, 0x06, 0x70, 0x19, 0xc0, 0x67, 0x01, + 0x9c, 0x06, 0x70, 0x19, 0xc0, 0x60, 0x75, 0x10, + 0xd0, 0x99, 0xc8, 0x88, 0x70, 0xa4, 0x44, 0x47, + 0xa5, 0xad, 0xf4, 0xff, 0x00, 0x85, 0x0b, 0x2f, + 0x58, 0x42, 0x18, 0x10, 0xe6, 0x8a, 0x60, 0xd1, + 0x95, 0x44, 0x52, 0x57, 0xb6, 0xc0, 0x37, 0x45, + 0x1e, 0x23, 0xac, 0x20, 0x5a, 0x66, 0xf0, 0x26, + 0xb5, 0x82, 0x16, 0x23, 0x86, 0x42, 0x01, 0x81, + 0x9b, 0x7d, 0x88, 0x42, 0x39, 0x01, 0x8b, 0x9b, + 0x36, 0xbf, 0xfc, 0xc6, 0xfb, 0x3f, 0x56, 0x7f, + 0x96, 0x92, 0x52, 0x7d, 0xca, 0x8a, 0xc0, 0xb2, + 0xf1, 0x04, 0xd5, 0x5d, 0x20, 0xd5, 0xd0, 0x6c, + 0x20, 0x28, 0x95, 0x42, 0x0e, 0x9e, 0xc6, 0x08, + 0xbd, 0x80, 0xa8, 0x0c, 0xc6, 0x85, 0x8f, 0x98, + 0x66, 0x80, 0x32, 0x45, 0x44, 0xa0, 0x1f, 0x73, + 0xf1, 0x08, 0x94, 0x08, 0x8a, 0x12, 0x9a, 0x29, + 0xc0, 0xb4, 0x21, 0x70, 0x81, 0x0e, 0xcb, 0x0c, + 0x60, 0x37, 0xf3, 0x28, 0x4f, 0x58, 0xc2, 0x55, + 0x95, 0x65, 0x88, 0x75, 0x10, 0x46, 0xfb, 0xc9, + 0x99, 0x2a, 0x31, 0x94, 0xc4, 0xc3, 0x2f, 0xc2, + 0x37, 0x31, 0x43, 0x2e, 0x4a, 0x62, 0x03, 0xa7, + 0x38, 0x50, 0x0d, 0x00, 0x49, 0x03, 0x58, 0x33, + 0xf5, 0x59, 0x7c, 0x07, 0x34, 0xe0, 0x27, 0x6a, + 0x40, 0x18, 0x46, 0xe8, 0xf2, 0x42, 0x46, 0xfb, + 0x14, 0x00, 0xce, 0xd6, 0xd6, 0x58, 0xe1, 0x06, + 0x6d, 0x7c, 0x7d, 0x8f, 0xc1, 0xf5, 0xdb, 0xb2, + 0xf5, 0x49, 0xb2, 0xe7, 0x8a, 0x7e, 0x0f, 0xc1, + 0x2a, 0x05, 0x87, 0xd3, 0xf8, 0xa8, 0x65, 0xf5, + 0x49, 0x40, 0xe7, 0xac, 0xd1, 0x92, 0xb8, 0xe9, + 0xa1, 0x88, 0x8a, 0x44, 0xab, 0xdb, 0x19, 0x58, + 0x5c, 0x7b, 0xf3, 0x4c, 0x65, 0xcb, 0xe5, 0xf0, + 0x61, 0x0f, 0x98, 0x9a, 0x81, 0x22, 0xef, 0x49, + 0x52, 0xcd, 0x38, 0x07, 0xf0, 0x82, 0x68, 0xd0, + 0x30, 0xa8, 0x33, 0x50, 0xc6, 0x9c, 0x42, 0xda, + 0x0d, 0x0e, 0xa5, 0x28, 0x05, 0x16, 0xa1, 0x2b, + 0xc1, 0x0a, 0x45, 0x61, 0x92, 0x48, 0x7c, 0x43, + 0x2a, 0x82, 0x12, 0x18, 0x9a, 0x14, 0xeb, 0x10, + 0x1b, 0xe8, 0xa3, 0x33, 0x3c, 0x01, 0xf9, 0x88, + 0x18, 0x9e, 0x99, 0xc3, 0x63, 0xc9, 0xf0, 0x32, + 0x09, 0xcf, 0xf8, 0xa8, 0xe5, 0x04, 0x20, 0x57, + 0xcc, 0x00, 0x8e, 0x7f, 0x44, 0x13, 0x5a, 0xa5, + 0xa6, 0xe2, 0xed, 0x37, 0x17, 0x69, 0xb8, 0xbb, + 0x4d, 0xc5, 0xda, 0x6e, 0x2e, 0xd3, 0x71, 0x76, + 0x9b, 0x8b, 0xb4, 0x00, 0x58, 0x1a, 0xad, 0x8d, + 0x65, 0x3a, 0x64, 0xa2, 0x52, 0x90, 0xfb, 0xd8, + 0x99, 0xd4, 0xd9, 0x56, 0x3a, 0xe5, 0x38, 0x0b, + 0xce, 0xd0, 0x68, 0x05, 0x0b, 0xc6, 0xec, 0xb0, + 0x86, 0x8b, 0x2c, 0xab, 0x7a, 0xb1, 0x86, 0x74, + 0x84, 0x0b, 0x60, 0xb3, 0x6f, 0xe0, 0x52, 0x6e, + 0x2e, 0xd3, 0x71, 0x76, 0x9b, 0x8b, 0xb4, 0xdc, + 0x5d, 0xa6, 0xe2, 0xed, 0x37, 0x17, 0x69, 0xb8, + 0xbb, 0x4d, 0xc5, 0xda, 0x10, 0x50, 0x82, 0x04, + 0x41, 0xf4, 0x02, 0xeb, 0xbd, 0x45, 0xa6, 0x81, + 0xa1, 0x00, 0x2e, 0xb0, 0x4c, 0x92, 0x52, 0x14, + 0x1d, 0x43, 0x2a, 0x3e, 0xb7, 0x9b, 0x0c, 0x02, + 0x13, 0xa1, 0x17, 0x68, 0x60, 0x81, 0xee, 0xa9, + 0x83, 0x58, 0x8e, 0x87, 0xf2, 0x07, 0x59, 0x77, + 0xc5, 0x04, 0x3d, 0x3e, 0x04, 0x06, 0x07, 0x83, + 0x76, 0x3d, 0x82, 0x55, 0x71, 0x50, 0xae, 0xf8, + 0x4c, 0xeb, 0x11, 0x18, 0x80, 0xca, 0x63, 0x84, + 0x12, 0xaa, 0x40, 0x46, 0xa0, 0x26, 0xe1, 0x70, + 0x63, 0x01, 0x09, 0x52, 0xe6, 0x01, 0xfd, 0x10, + 0x20, 0x11, 0x58, 0xf5, 0x4d, 0x57, 0x71, 0xd6, + 0xd1, 0xe8, 0xf6, 0x24, 0xd4, 0x11, 0x2a, 0xd5, + 0x9f, 0x58, 0x6a, 0xa2, 0x52, 0x16, 0x41, 0x28, + 0xb5, 0xa0, 0x89, 0xfe, 0x44, 0xef, 0x28, 0x03, + 0xde, 0xce, 0xba, 0xcb, 0xe2, 0xf8, 0x1b, 0x9e, + 0xec, 0x14, 0xd4, 0x50, 0x4f, 0x5a, 0xca, 0x55, + 0x15, 0x00, 0x0a, 0xc0, 0x28, 0x62, 0x04, 0x08, + 0x3e, 0x90, 0x35, 0xd0, 0xc1, 0xd7, 0x88, 0x65, + 0x91, 0xec, 0xaf, 0x5d, 0xbb, 0x2f, 0x56, 0x9b, + 0xee, 0x7f, 0x4f, 0xc5, 0xf8, 0x20, 0x94, 0xeb, + 0xf9, 0x27, 0x56, 0x75, 0x67, 0x56, 0x01, 0x22, + 0x04, 0xd2, 0x05, 0x5c, 0x2a, 0x98, 0xa0, 0x6a, + 0x46, 0x5a, 0x6b, 0x08, 0x92, 0x96, 0x46, 0x11, + 0x48, 0x1a, 0x05, 0x4f, 0x79, 0x50, 0x6b, 0xed, + 0x20, 0xa0, 0x1b, 0x75, 0x80, 0x20, 0xc4, 0x39, + 0x91, 0x20, 0x71, 0xc3, 0x5b, 0x0d, 0xbd, 0xdc, + 0x05, 0xc2, 0x1d, 0xd8, 0xbc, 0x58, 0x39, 0x2c, + 0xa3, 0x48, 0x79, 0x5b, 0xe6, 0x00, 0xa2, 0xe9, + 0x24, 0x8b, 0x12, 0x33, 0xbc, 0x38, 0x35, 0x0a, + 0x16, 0x1d, 0x8d, 0x72, 0x86, 0xd8, 0xa2, 0x20, + 0x53, 0xae, 0x56, 0xaf, 0xec, 0x10, 0xc5, 0x90, + 0x21, 0xe8, 0x34, 0x28, 0x08, 0x52, 0xc6, 0x40, + 0xc8, 0x25, 0x2b, 0x2f, 0x50, 0x9e, 0x15, 0x93, + 0x0a, 0x6b, 0x0d, 0x15, 0x12, 0x1a, 0xa0, 0x50, + 0x81, 0x86, 0x73, 0xab, 0x3a, 0xb3, 0xab, 0x02, + 0xb9, 0x6f, 0xef, 0xaf, 0xd5, 0xaf, 0x85, 0x46, + 0xa7, 0x29, 0x39, 0x49, 0xca, 0x4e, 0x52, 0x72, + 0x93, 0x94, 0x9c, 0xa4, 0x5f, 0x52, 0x07, 0x28, + 0xe0, 0x6a, 0x2e, 0x85, 0x61, 0xf8, 0x10, 0x28, + 0x87, 0x16, 0x24, 0x82, 0x15, 0x05, 0x72, 0x38, + 0x08, 0xc4, 0x0c, 0x2d, 0x06, 0x63, 0x00, 0x83, + 0x0f, 0xa7, 0x88, 0x41, 0x62, 0x8d, 0x2e, 0x89, + 0x7b, 0x88, 0x72, 0x3d, 0xc2, 0x34, 0x58, 0x05, + 0x68, 0x7d, 0xe7, 0x29, 0x39, 0x49, 0xca, 0x4e, + 0x52, 0x72, 0x93, 0x94, 0x9c, 0xa4, 0xe5, 0x21, + 0x8b, 0x60, 0x24, 0xf4, 0xf4, 0x3e, 0x2b, 0x6b, + 0x2e, 0xab, 0xd3, 0xfe, 0x48, 0x20, 0x82, 0x08, + 0x20, 0x82, 0x08, 0x2c, 0x22, 0xcb, 0x34, 0x46, + 0x44, 0x23, 0x0c, 0x58, 0x46, 0xc6, 0x3e, 0xa8, + 0x20, 0x60, 0xa0, 0x80, 0x08, 0x3d, 0x46, 0x30, + 0x2a, 0x0e, 0x22, 0x01, 0x24, 0xcd, 0x5e, 0x43, + 0xfb, 0x41, 0x04, 0x10, 0x41, 0x07, 0x20, 0xe1, + 0x22, 0x7f, 0x5e, 0xb5, 0x37, 0xdc, 0xfe, 0x9f, + 0x9b, 0xf0, 0x43, 0x85, 0x1f, 0x08, 0x08, 0x89, + 0xd3, 0x3a, 0x67, 0x4c, 0xad, 0x48, 0x21, 0xd5, + 0xf7, 0x1a, 0x42, 0x3c, 0x50, 0x7b, 0x6c, 0xa1, + 0xd3, 0x86, 0xe0, 0x97, 0x45, 0xf7, 0x09, 0x69, + 0x67, 0xe4, 0x09, 0x43, 0xeb, 0x00, 0x02, 0x1d, + 0xec, 0xc4, 0xa5, 0x42, 0x6f, 0x1a, 0xd8, 0x48, + 0x85, 0x95, 0xc5, 0x66, 0x08, 0xb6, 0x00, 0x10, + 0x7d, 0x8c, 0x2a, 0x62, 0xc7, 0x58, 0x4a, 0xaa, + 0x29, 0x8b, 0x9c, 0x6d, 0x4f, 0x69, 0x5e, 0x6c, + 0xe7, 0x33, 0xac, 0xa2, 0x9e, 0x0a, 0xbe, 0xc8, + 0x9f, 0x8c, 0x00, 0x10, 0x8e, 0x90, 0xfa, 0xb9, + 0x1a, 0x00, 0x00, 0xb1, 0x4a, 0xbe, 0xf0, 0x02, + 0xf2, 0xd4, 0x52, 0x6f, 0x85, 0x3d, 0xa7, 0x4c, + 0xe9, 0x9d, 0x32, 0xfe, 0xe0, 0x24, 0xe4, 0x31, + 0x32, 0xe8, 0xc5, 0x7a, 0x5a, 0xdf, 0x4f, 0xf8, + 0x5b, 0x8a, 0x84, 0x2c, 0xd6, 0xbe, 0xc1, 0x3e, + 0xc2, 0x14, 0x8b, 0x09, 0x8f, 0x8a, 0xc2, 0xc0, + 0xd8, 0xc9, 0xbc, 0x60, 0x02, 0xb1, 0xd7, 0x52, + 0x3d, 0x81, 0xf8, 0x82, 0x52, 0x8a, 0x25, 0x27, + 0xa1, 0x90, 0x18, 0xc1, 0xdb, 0x6d, 0x62, 0x11, + 0x01, 0x53, 0xf8, 0x40, 0x0b, 0xfb, 0xb8, 0x13, + 0x0f, 0x73, 0xef, 0xff, 0x00, 0x51, 0xba, 0x01, + 0x95, 0x07, 0x16, 0x3b, 0xe8, 0x05, 0x89, 0xdd, + 0x2c, 0x2c, 0x21, 0x11, 0x90, 0x02, 0xca, 0x8f, + 0x28, 0x36, 0x81, 0x32, 0xb9, 0xd8, 0x03, 0xa1, + 0x50, 0xd0, 0x5a, 0xd1, 0x24, 0x62, 0x1b, 0xc9, + 0x83, 0xf1, 0x29, 0xd2, 0x30, 0x11, 0x1f, 0x78, + 0x2c, 0xcd, 0xe0, 0xa4, 0x81, 0x6c, 0x0e, 0xd4, + 0x41, 0x04, 0x18, 0x9a, 0x62, 0xd9, 0x18, 0x86, + 0x48, 0x2c, 0xd0, 0x04, 0x54, 0x8f, 0x40, 0x0c, + 0x3f, 0xd0, 0x0d, 0xf3, 0xc4, 0x19, 0x4f, 0xbd, + 0x21, 0xbb, 0x90, 0x45, 0x12, 0x15, 0x25, 0x65, + 0x06, 0x98, 0x24, 0x24, 0x05, 0x76, 0x79, 0x44, + 0xc1, 0xd5, 0x68, 0xa8, 0x31, 0x5d, 0x41, 0x10, + 0x98, 0x0d, 0x10, 0x9c, 0xf5, 0x89, 0x02, 0x29, + 0x45, 0x00, 0x28, 0x94, 0xb3, 0x04, 0x43, 0x48, + 0x67, 0x8b, 0x2e, 0x17, 0x95, 0xec, 0x61, 0xb2, + 0x50, 0x54, 0x48, 0x54, 0x95, 0x94, 0x44, 0x36, + 0x64, 0x4c, 0x89, 0xc3, 0xfa, 0x63, 0xa6, 0xdb, + 0x9f, 0xd3, 0xf2, 0x7e, 0x08, 0x0a, 0xd1, 0xd0, + 0xc2, 0x37, 0xe9, 0x00, 0x05, 0xef, 0xe0, 0xc7, + 0x1c, 0x46, 0x49, 0x96, 0x3a, 0x4f, 0xa6, 0x23, + 0xea, 0x52, 0x21, 0x18, 0x3e, 0xd2, 0x82, 0xf5, + 0xb8, 0xab, 0xa1, 0xfe, 0x71, 0xc7, 0x1c, 0x5b, + 0x10, 0xe6, 0x16, 0x4f, 0xfe, 0x38, 0xe3, 0x8e, + 0x38, 0xe3, 0x8e, 0x26, 0x0e, 0x1c, 0x09, 0x62, + 0x8c, 0x9f, 0x5a, 0x5d, 0xb0, 0x02, 0xa0, 0x6a, + 0x66, 0xc3, 0xef, 0x36, 0x1f, 0x79, 0xb0, 0xfb, + 0xcd, 0x87, 0xde, 0x6c, 0x3e, 0xf3, 0x61, 0xf7, + 0x9b, 0x0f, 0xbc, 0xa8, 0xa3, 0x74, 0x87, 0xd0, + 0x41, 0x9b, 0x73, 0x24, 0x09, 0x3f, 0x30, 0xb1, + 0x39, 0x80, 0x04, 0x7d, 0xc1, 0x00, 0x88, 0x41, + 0x88, 0x0c, 0x9c, 0x65, 0x91, 0x80, 0xc6, 0x46, + 0xb0, 0x06, 0x0b, 0xd2, 0x15, 0x2e, 0xce, 0x69, + 0xb0, 0xfb, 0xcd, 0x87, 0xde, 0x6c, 0x3e, 0xf3, + 0x61, 0xf7, 0x9b, 0x0f, 0xbc, 0xd8, 0x7d, 0xe6, + 0xc3, 0xef, 0x36, 0x1f, 0x78, 0x30, 0x52, 0x08, + 0xd5, 0x7a, 0x52, 0x3a, 0xc8, 0x03, 0x9d, 0x6f, + 0xf7, 0xd0, 0x40, 0x41, 0x28, 0x4d, 0xf2, 0x86, + 0x4d, 0x4c, 0xd5, 0xc5, 0xe5, 0x45, 0x4e, 0xe2, + 0xd8, 0xc3, 0xee, 0x8c, 0x8c, 0x7b, 0x8b, 0xdc, + 0xe8, 0x23, 0x8b, 0xe3, 0x49, 0x14, 0x80, 0x12, + 0x74, 0xb2, 0x87, 0xba, 0x1c, 0xad, 0x00, 0x8d, + 0xfb, 0x80, 0x23, 0xd3, 0xa0, 0xc4, 0x10, 0x57, + 0x26, 0xd5, 0x08, 0x26, 0xae, 0x62, 0x8a, 0xaf, + 0x47, 0xf2, 0x09, 0x1f, 0x22, 0x57, 0xd8, 0xd4, + 0x82, 0x09, 0xd0, 0x2b, 0xaa, 0xb0, 0x16, 0x09, + 0x95, 0x0c, 0x41, 0x3e, 0xe4, 0x45, 0x7f, 0x71, + 0x82, 0xa7, 0x71, 0xa2, 0xee, 0xd0, 0x96, 0xca, + 0x25, 0x48, 0xaf, 0xd0, 0x4a, 0xae, 0x2a, 0x1d, + 0x0a, 0xd8, 0x9d, 0xf0, 0x7c, 0x4a, 0xfe, 0x61, + 0x48, 0xdc, 0xf7, 0x8b, 0x97, 0xbc, 0x5d, 0x24, + 0xcc, 0x8b, 0x00, 0x3b, 0x03, 0x61, 0x45, 0x1c, + 0xd2, 0xa1, 0x16, 0x55, 0x80, 0x50, 0x49, 0xb4, + 0x25, 0x64, 0x03, 0x2c, 0x1a, 0x6d, 0x0d, 0xe5, + 0xfc, 0xa0, 0x4a, 0x91, 0x5f, 0xa0, 0x95, 0x5c, + 0x54, 0x14, 0x0a, 0x1a, 0x05, 0x52, 0x33, 0x24, + 0x91, 0x9d, 0x45, 0x3d, 0x4a, 0x10, 0x86, 0x8e, + 0x64, 0x02, 0xff, 0x00, 0x7d, 0x7a, 0x6c, 0x39, + 0xe2, 0x9f, 0x83, 0xf0, 0x7f, 0x56, 0x16, 0x44, + 0x20, 0x14, 0x00, 0x54, 0x4e, 0x0c, 0xa1, 0x02, + 0x99, 0x98, 0x25, 0xd4, 0x3c, 0x90, 0x35, 0x19, + 0x81, 0x9c, 0x1f, 0x84, 0x56, 0x03, 0xae, 0x1d, + 0x28, 0x5a, 0xc6, 0x29, 0x40, 0x2e, 0x31, 0x51, + 0x68, 0xb7, 0x94, 0x00, 0x64, 0x55, 0x55, 0x42, + 0x1a, 0x4a, 0x82, 0x80, 0x21, 0xee, 0x85, 0xa4, + 0x33, 0xc6, 0x14, 0xb5, 0x2a, 0x9f, 0x17, 0x40, + 0x4e, 0x40, 0xf1, 0xc6, 0x58, 0x8d, 0xba, 0x04, + 0x2b, 0x14, 0x48, 0x60, 0xfa, 0xe8, 0xae, 0xe6, + 0x8c, 0x98, 0x2d, 0x8c, 0x38, 0x1a, 0xa1, 0x7c, + 0x6b, 0x8b, 0x2a, 0x69, 0x04, 0x41, 0x82, 0x0b, + 0x22, 0x86, 0x49, 0xae, 0x2c, 0x11, 0x67, 0xd8, + 0x0d, 0xaf, 0xd5, 0xec, 0x35, 0x83, 0x37, 0x7f, + 0x00, 0xaa, 0x01, 0x3d, 0x5c, 0x31, 0xa7, 0xf3, + 0x7b, 0x7d, 0x3d, 0x6f, 0xd6, 0x9b, 0x02, 0xd0, + 0x8a, 0xbf, 0xa2, 0x62, 0xaa, 0xf5, 0x95, 0x9f, + 0x00, 0xdb, 0x4f, 0x07, 0x6a, 0xdf, 0x43, 0x0d, + 0x3a, 0xb0, 0x0e, 0x11, 0x21, 0xab, 0x92, 0xd0, + 0xa8, 0x2c, 0xba, 0x01, 0xa3, 0x8a, 0xa5, 0x01, + 0x21, 0x42, 0xa0, 0xb2, 0xe8, 0x06, 0x8e, 0x2a, + 0x94, 0x04, 0x85, 0x16, 0xb4, 0x55, 0x9d, 0x11, + 0xdb, 0x04, 0x51, 0x14, 0x44, 0xa8, 0xc9, 0x94, + 0xba, 0xe2, 0x33, 0x84, 0xcf, 0x7e, 0x70, 0x44, + 0x53, 0xe2, 0x00, 0x22, 0xc1, 0x54, 0x90, 0xa9, + 0x2b, 0x28, 0x32, 0xd0, 0xcc, 0x10, 0x19, 0x15, + 0xca, 0xa0, 0x8f, 0x63, 0x28, 0xaf, 0x72, 0x0f, + 0xac, 0x62, 0xe7, 0x20, 0x3a, 0x10, 0xf1, 0xcb, + 0x18, 0x3e, 0xac, 0x8e, 0x1d, 0x03, 0xc1, 0x62, + 0xc2, 0x2e, 0x40, 0x09, 0xe0, 0x59, 0x3a, 0x31, + 0x11, 0x57, 0xa5, 0xa4, 0x33, 0x60, 0x6a, 0x92, + 0x8f, 0xc1, 0x95, 0xd7, 0xe0, 0x33, 0x90, 0x65, + 0x22, 0xef, 0x11, 0x24, 0x82, 0xf0, 0x95, 0x2c, + 0x9e, 0x8b, 0x38, 0x14, 0xec, 0xad, 0x4a, 0x60, + 0xc3, 0x5d, 0xd0, 0xd6, 0x02, 0x65, 0x22, 0x82, + 0x82, 0x02, 0xae, 0xad, 0x1f, 0x88, 0x7e, 0x91, + 0x00, 0xe8, 0x35, 0x3a, 0x19, 0xcc, 0xcb, 0x01, + 0x84, 0x8d, 0x5e, 0x11, 0x28, 0x96, 0x4d, 0x7f, + 0x46, 0xa7, 0x0d, 0xc1, 0x1b, 0x82, 0x32, 0x30, + 0xe0, 0x60, 0x97, 0x2f, 0x92, 0x3f, 0xe0, 0x99, + 0x32, 0x64, 0xc9, 0x93, 0x26, 0x08, 0xac, 0x39, + 0xb3, 0x80, 0xdf, 0x6b, 0x16, 0x21, 0x01, 0x22, + 0x49, 0xb9, 0xfe, 0x32, 0x64, 0xc9, 0x81, 0x01, + 0x16, 0x25, 0x0c, 0x3e, 0x23, 0xfb, 0x4c, 0x99, + 0x32, 0x64, 0xc9, 0x8e, 0xcc, 0xaa, 0x00, 0x74, + 0x22, 0xe1, 0x12, 0xcd, 0x52, 0x6e, 0x1e, 0xe5, + 0xeb, 0x43, 0x71, 0xcf, 0xe9, 0xf8, 0x3f, 0x04, + 0x3b, 0x10, 0x4c, 0x75, 0x38, 0x49, 0xc2, 0x4e, + 0x12, 0x70, 0x90, 0x86, 0xe4, 0x60, 0x1e, 0x51, + 0xe8, 0xc4, 0x83, 0xa0, 0x09, 0x92, 0xae, 0x24, + 0x5e, 0x88, 0xca, 0x72, 0x85, 0x2a, 0x85, 0x9c, + 0x69, 0x9c, 0x7c, 0x29, 0x4d, 0x55, 0x61, 0x8f, + 0xb4, 0x17, 0x2b, 0x33, 0x25, 0x4d, 0xf5, 0x17, + 0xb4, 0xae, 0x2c, 0x80, 0x45, 0x12, 0x15, 0x64, + 0x6a, 0xa5, 0xb3, 0x88, 0x50, 0xc4, 0x55, 0x1a, + 0xa0, 0xc1, 0x33, 0x8e, 0x35, 0x83, 0xee, 0xc5, + 0x55, 0x08, 0x10, 0xac, 0xa9, 0x81, 0xb7, 0x67, + 0x75, 0x34, 0x35, 0xb5, 0x21, 0x61, 0x60, 0x06, + 0xa1, 0x02, 0x3a, 0x35, 0x29, 0x92, 0x72, 0xdc, + 0x26, 0x6a, 0x20, 0x2d, 0xe1, 0x28, 0x35, 0xb0, + 0xec, 0xd2, 0xa3, 0xc1, 0x3e, 0x21, 0x38, 0x82, + 0x84, 0x85, 0x82, 0x01, 0x2c, 0xb3, 0x34, 0x08, + 0x56, 0x70, 0x93, 0x84, 0x9c, 0x24, 0xe1, 0x20, + 0xf0, 0xc0, 0x2e, 0x96, 0xf5, 0xb5, 0xbe, 0x91, + 0x79, 0x2f, 0x08, 0x61, 0x3f, 0x98, 0x39, 0x68, + 0x49, 0xa8, 0x04, 0xe9, 0x0a, 0x99, 0xa8, 0x6a, + 0xa2, 0x91, 0x20, 0x28, 0x1d, 0x21, 0x1e, 0x29, + 0x9d, 0xa7, 0xba, 0x30, 0x5d, 0x34, 0x84, 0x78, + 0xa6, 0x76, 0x9e, 0xe8, 0xc1, 0x74, 0xd2, 0x59, + 0xb3, 0x1f, 0x69, 0x02, 0xa1, 0x60, 0x00, 0xc3, + 0x8a, 0x52, 0xc2, 0xa3, 0xe6, 0x0a, 0xad, 0xbe, + 0x68, 0x81, 0x07, 0x45, 0x0d, 0xd1, 0x6e, 0xd9, + 0xa8, 0x40, 0x05, 0x0d, 0x2b, 0xa4, 0x38, 0x8c, + 0x6c, 0x0f, 0x36, 0xfe, 0x40, 0xcc, 0x0e, 0x89, + 0xb5, 0x89, 0xb8, 0x83, 0x9d, 0x69, 0x06, 0x28, + 0xb4, 0x9d, 0x04, 0x7e, 0xc4, 0x73, 0x02, 0xe7, + 0x14, 0xf1, 0xf4, 0x65, 0xbc, 0x91, 0xf0, 0x16, + 0x8d, 0x4a, 0x00, 0x87, 0xc0, 0x75, 0xaa, 0x56, + 0x06, 0x64, 0x61, 0xd0, 0xc5, 0xec, 0x64, 0x02, + 0xc3, 0x87, 0x51, 0xca, 0x3a, 0x1a, 0x0b, 0x20, + 0x08, 0x70, 0x20, 0xdd, 0xc7, 0x65, 0x04, 0x16, + 0x9b, 0xc3, 0x24, 0x93, 0x56, 0x08, 0x01, 0xe0, + 0x1e, 0xe8, 0x59, 0xfb, 0x47, 0xdb, 0x90, 0x04, + 0xcf, 0xfb, 0x4f, 0x18, 0x86, 0xc3, 0x9f, 0xd3, + 0xf3, 0xfe, 0x08, 0x36, 0x20, 0x18, 0xea, 0x72, + 0x93, 0x94, 0x9c, 0xa4, 0xe5, 0x25, 0xab, 0x62, + 0x61, 0x2e, 0x1a, 0xc0, 0x32, 0x8e, 0xed, 0x83, + 0x59, 0x8d, 0x4e, 0x2f, 0x64, 0xc8, 0xa8, 0xed, + 0x2f, 0xf8, 0x35, 0xaa, 0x87, 0x90, 0xc9, 0x00, + 0xfe, 0x61, 0x23, 0x12, 0x20, 0x9b, 0x19, 0xca, + 0x4e, 0x52, 0x0e, 0x92, 0xd4, 0x43, 0x40, 0x07, + 0xd1, 0x13, 0x94, 0x84, 0x6d, 0xc8, 0x54, 0x24, + 0xc2, 0x22, 0x8f, 0xcd, 0x39, 0x49, 0xca, 0x4e, + 0x52, 0x72, 0x93, 0x94, 0x87, 0xc3, 0x48, 0xfa, + 0x5b, 0xd6, 0xd6, 0xfa, 0x7f, 0x60, 0x8c, 0x0b, + 0x72, 0x1d, 0x16, 0xba, 0x41, 0x62, 0x61, 0x0c, + 0x0d, 0x49, 0x40, 0x5b, 0x39, 0x70, 0x90, 0x06, + 0x3d, 0xc8, 0x82, 0xff, 0x00, 0x68, 0x90, 0x06, + 0x64, 0xa9, 0x4e, 0x5a, 0x4d, 0x41, 0x42, 0xf3, + 0x06, 0x8e, 0xaf, 0xde, 0x52, 0xd8, 0x91, 0x8f, + 0xfc, 0x89, 0x41, 0x7b, 0x90, 0x3d, 0x63, 0xea, + 0x11, 0x89, 0x0e, 0x6c, 0x2f, 0xd8, 0x0b, 0xf9, + 0x30, 0xe0, 0x3d, 0x5a, 0x01, 0x31, 0xaf, 0xfb, + 0xc6, 0x61, 0xb4, 0xe7, 0xf4, 0xfc, 0xff, 0x00, + 0x8f, 0xea, 0xce, 0xf6, 0x2a, 0xff, 0x00, 0xfa, + 0x6f, 0x67, 0x28, 0x05, 0xc4, 0x85, 0x43, 0x2b, + 0x89, 0x51, 0x2d, 0xbc, 0x37, 0xa2, 0x35, 0x4d, + 0x6f, 0x28, 0x68, 0xab, 0x33, 0x7d, 0x2d, 0x3f, + 0x30, 0x6c, 0x1d, 0xa8, 0x1d, 0x21, 0x36, 0xc9, + 0xca, 0x25, 0x05, 0xd6, 0xc8, 0x2a, 0x93, 0x51, + 0x06, 0x2b, 0x06, 0x2c, 0x04, 0x0c, 0x4c, 0xd4, + 0x64, 0x8e, 0x82, 0xd0, 0xc2, 0x22, 0x08, 0x09, + 0x24, 0x28, 0xc5, 0x8b, 0x83, 0xd0, 0x48, 0x62, + 0x82, 0x4a, 0x02, 0xa1, 0x59, 0x60, 0x60, 0xd1, + 0x97, 0x00, 0x19, 0x60, 0x30, 0x19, 0xdb, 0x30, + 0x32, 0x10, 0x7c, 0x86, 0x80, 0x02, 0x24, 0xdb, + 0x7a, 0x82, 0x86, 0x46, 0x12, 0x0c, 0x22, 0x85, + 0x98, 0x69, 0x5a, 0x88, 0x3f, 0x20, 0x82, 0x34, + 0xc6, 0xf8, 0x0f, 0xcc, 0x87, 0xf3, 0x7b, 0x7d, + 0x3d, 0x6d, 0x6f, 0xa7, 0xf7, 0xb3, 0x65, 0x02, + 0x3e, 0xcf, 0xdd, 0x31, 0x7f, 0xc8, 0x03, 0x7f, + 0xda, 0xeb, 0x37, 0xfc, 0x81, 0x4f, 0xef, 0xe3, + 0x96, 0x4f, 0xb4, 0x12, 0x46, 0x60, 0x30, 0x0a, + 0x5d, 0x20, 0x23, 0xce, 0x49, 0x4c, 0x80, 0x0e, + 0x23, 0x26, 0x30, 0xcb, 0x93, 0x2c, 0x8a, 0x2a, + 0xc8, 0xcd, 0x5b, 0xa9, 0x18, 0xe8, 0xc7, 0xba, + 0xc1, 0x81, 0xad, 0x08, 0xb4, 0xa8, 0xff, 0x00, + 0xe1, 0x8c, 0x43, 0x79, 0xcf, 0x14, 0xdb, 0x68, + 0x99, 0xc5, 0x08, 0xd0, 0x03, 0xcc, 0xe1, 0x27, + 0x09, 0x38, 0x49, 0xc2, 0x7a, 0x52, 0xc5, 0x2c, + 0xbc, 0x70, 0xc0, 0x24, 0x0a, 0x54, 0x18, 0xc5, + 0x24, 0xa0, 0x6a, 0x1a, 0x3a, 0x5c, 0xcd, 0xae, + 0xef, 0x45, 0xa3, 0x9f, 0x0f, 0x1b, 0x02, 0x71, + 0x08, 0x70, 0x50, 0x01, 0x8c, 0x90, 0x37, 0x0e, + 0xb5, 0x81, 0x15, 0x51, 0x12, 0x10, 0x52, 0x7d, + 0x0a, 0x51, 0x4a, 0x05, 0x80, 0x15, 0x00, 0x6e, + 0x2e, 0x36, 0x86, 0x17, 0xc8, 0x9e, 0x28, 0x05, + 0x54, 0xa5, 0x00, 0xbc, 0x02, 0x4c, 0x70, 0x80, + 0xe9, 0x32, 0xfd, 0x9f, 0x10, 0xd8, 0x9a, 0x40, + 0xd0, 0x28, 0x2c, 0x59, 0x8b, 0xaa, 0x10, 0xc2, + 0xd2, 0xf8, 0x92, 0xad, 0x52, 0x58, 0xbe, 0xb1, + 0x40, 0xdf, 0xa2, 0x9c, 0x24, 0xe1, 0x27, 0x09, + 0x38, 0x48, 0x3c, 0x30, 0x0b, 0xa5, 0xbd, 0x6f, + 0xd6, 0x9b, 0x22, 0xd3, 0x94, 0xce, 0x53, 0x39, + 0x4c, 0xe5, 0x33, 0x94, 0xce, 0x53, 0x0b, 0x36, + 0x05, 0x7c, 0x53, 0x43, 0xa4, 0x54, 0x8e, 0xe9, + 0x11, 0xb1, 0xd3, 0x34, 0x87, 0xb4, 0x57, 0x06, + 0x42, 0x54, 0x73, 0x91, 0x50, 0x71, 0xc3, 0x01, + 0xc8, 0x94, 0xc0, 0x12, 0x0a, 0x61, 0x77, 0x28, + 0x12, 0x0f, 0x87, 0x16, 0x35, 0x3c, 0x4e, 0x31, + 0x31, 0xb9, 0x51, 0x35, 0x54, 0x59, 0x0a, 0x16, + 0x29, 0x06, 0x0d, 0xe5, 0x62, 0x66, 0xb0, 0xc5, + 0x71, 0x47, 0x39, 0x4c, 0xe5, 0x33, 0x94, 0xce, + 0x53, 0x39, 0x4c, 0xe5, 0x33, 0x94, 0xc0, 0x21, + 0x90, 0x88, 0xa7, 0xfe, 0xb1, 0x0d, 0xe7, 0x3c, + 0x53, 0x65, 0xa2, 0x1f, 0x8e, 0x30, 0xd5, 0x1c, + 0xa6, 0x72, 0x98, 0x30, 0xd6, 0x41, 0x51, 0x6a, + 0x8d, 0x07, 0xd0, 0x83, 0xb0, 0x14, 0x38, 0x05, + 0x80, 0xb1, 0x10, 0x9a, 0x18, 0xec, 0x5a, 0x4a, + 0x74, 0x50, 0x3c, 0x52, 0x10, 0x60, 0x80, 0xf4, + 0x22, 0x11, 0xe0, 0x84, 0xa8, 0x02, 0xb9, 0x25, + 0x46, 0x73, 0x24, 0x35, 0xaa, 0xac, 0xa0, 0xe6, + 0x84, 0xab, 0x5c, 0xe6, 0x15, 0x58, 0x07, 0x2c, + 0x31, 0x11, 0x76, 0xc0, 0x24, 0xd8, 0x95, 0xc5, + 0x51, 0x1e, 0xe2, 0x18, 0x6a, 0x41, 0x81, 0x62, + 0x7e, 0x47, 0xcc, 0x0d, 0x32, 0x62, 0x5c, 0x00, + 0x20, 0x0c, 0x5b, 0x0b, 0xa8, 0x45, 0x58, 0xc4, + 0xbc, 0x00, 0x1e, 0xf0, 0xea, 0x57, 0x08, 0x16, + 0x28, 0xea, 0x89, 0x7b, 0x89, 0x55, 0x98, 0x84, + 0xa6, 0x0f, 0x66, 0x6a, 0xf0, 0x79, 0x45, 0x24, + 0x99, 0x2a, 0xb0, 0x8a, 0xad, 0x75, 0x89, 0xe5, + 0xe4, 0x44, 0x68, 0xe9, 0x06, 0x18, 0x05, 0x42, + 0x7a, 0x38, 0x06, 0x74, 0x10, 0xe9, 0x20, 0x46, + 0xe6, 0x48, 0x46, 0x48, 0x7e, 0xa2, 0x5c, 0xa6, + 0x3a, 0x56, 0x11, 0xcf, 0xaa, 0x68, 0x3c, 0xf2, + 0x63, 0x5a, 0xce, 0x52, 0x72, 0x90, 0x56, 0x5f, + 0x86, 0xa7, 0x41, 0x53, 0x54, 0x0b, 0x48, 0x52, + 0x21, 0x80, 0xd1, 0x9e, 0x4e, 0xf0, 0xe9, 0x63, + 0xe5, 0x02, 0x4b, 0x58, 0x4b, 0x28, 0xd5, 0x38, + 0x27, 0x90, 0x03, 0x02, 0xc0, 0xe3, 0x06, 0x60, + 0x28, 0x74, 0x0b, 0x01, 0xe2, 0x25, 0x2e, 0x02, + 0x99, 0x43, 0xf5, 0x13, 0xa1, 0xab, 0xb0, 0x76, + 0xbb, 0xfa, 0x86, 0xf3, 0x3a, 0x14, 0x0c, 0x4d, + 0x32, 0x08, 0x06, 0xb0, 0x6e, 0x80, 0x22, 0x02, + 0x97, 0xab, 0xf6, 0x30, 0x92, 0xc4, 0xa9, 0x32, + 0x55, 0x69, 0x08, 0xcf, 0x72, 0x31, 0x6a, 0x21, + 0x41, 0x42, 0xa8, 0x89, 0x56, 0x8c, 0xa8, 0x41, + 0x82, 0x03, 0x14, 0x22, 0x72, 0x93, 0x94, 0x8d, + 0xd3, 0x04, 0x0d, 0x46, 0xa4, 0xa9, 0xa4, 0xe5, + 0x27, 0x29, 0x39, 0x48, 0x73, 0x89, 0x9e, 0xcf, + 0xfd, 0x7c, 0x37, 0x0c, 0xfe, 0x9b, 0xad, 0x13, + 0xed, 0xbd, 0x4e, 0x37, 0x4a, 0x5e, 0xfd, 0x94, + 0x72, 0x45, 0xd4, 0x41, 0x04, 0xe0, 0x68, 0x42, + 0x33, 0x44, 0x60, 0xc9, 0xb0, 0x21, 0xd8, 0xbf, + 0xfd, 0x23, 0xe2, 0x93, 0x14, 0x43, 0x04, 0x62, + 0x83, 0x55, 0x98, 0x15, 0xa9, 0x09, 0x04, 0x06, + 0x58, 0x81, 0xb8, 0x30, 0x41, 0x6d, 0x5d, 0x64, + 0x1d, 0x0b, 0x12, 0x34, 0xb2, 0x97, 0xea, 0xa2, + 0x22, 0x16, 0x24, 0xd5, 0xa8, 0xae, 0x50, 0xcd, + 0x7a, 0x8b, 0x0f, 0x0e, 0x97, 0xba, 0x34, 0xb2, + 0x86, 0x68, 0x5e, 0xe1, 0x59, 0x0d, 0x10, 0xc0, + 0x1e, 0xa9, 0x00, 0x46, 0x3d, 0x43, 0x87, 0xe4, + 0x1d, 0xb6, 0xd6, 0x21, 0x10, 0x15, 0x3f, 0x84, + 0x0d, 0x72, 0xbc, 0xc0, 0x00, 0x9b, 0x56, 0x0d, + 0xef, 0x42, 0x31, 0x82, 0xa0, 0xa0, 0x18, 0x48, + 0x9c, 0x18, 0x08, 0xd6, 0xdd, 0x7b, 0x58, 0x6d, + 0x7e, 0x29, 0x28, 0x20, 0x84, 0x8e, 0x42, 0x16, + 0xab, 0x23, 0x89, 0xdd, 0x01, 0x88, 0x00, 0xab, + 0x34, 0x97, 0xa0, 0x81, 0xbf, 0xf2, 0xaf, 0x6c, + 0xd7, 0xd4, 0xb7, 0x82, 0xac, 0xca, 0x21, 0x3f, + 0x3f, 0x24, 0x5c, 0xc5, 0xd5, 0xf1, 0x22, 0xf9, + 0x1a, 0x75, 0x83, 0xe1, 0x86, 0x5c, 0x0b, 0x2a, + 0x57, 0x66, 0xbd, 0x8c, 0x03, 0xb5, 0xf2, 0xb2, + 0xc3, 0x70, 0xb0, 0x82, 0xf8, 0x89, 0x71, 0xa8, + 0x82, 0xad, 0x52, 0x87, 0x3a, 0x82, 0xa6, 0x4b, + 0xca, 0x3e, 0x60, 0x1f, 0x62, 0x8d, 0x4c, 0x9a, + 0x42, 0x28, 0xfc, 0x45, 0xc3, 0x00, 0x21, 0x26, + 0xe7, 0x02, 0xad, 0x55, 0xac, 0x35, 0x20, 0xff, + 0x00, 0x41, 0xf1, 0x02, 0xd9, 0xc7, 0x02, 0x0a, + 0xb1, 0xe4, 0xd3, 0x48, 0x41, 0xce, 0xb2, 0x03, + 0x24, 0xc0, 0x22, 0x97, 0x65, 0x18, 0xeb, 0x29, + 0x7d, 0x5e, 0xbe, 0x47, 0xa0, 0x23, 0xa4, 0x4f, + 0x55, 0x34, 0xa6, 0xec, 0x40, 0x43, 0x0a, 0x21, + 0x16, 0x8e, 0x04, 0xa8, 0x0f, 0xdf, 0x5c, 0xac, + 0x48, 0x81, 0x74, 0x07, 0x28, 0x02, 0x4e, 0x82, + 0x5b, 0x3f, 0xc6, 0xc5, 0x97, 0xfd, 0x7e, 0x36, + 0x0c, 0xfe, 0x9b, 0xad, 0x13, 0xed, 0xbd, 0x55, + 0x80, 0x35, 0x4a, 0xac, 0xdc, 0xac, 0x07, 0x25, + 0x28, 0x64, 0xb3, 0x8c, 0xb8, 0xa5, 0x40, 0x3e, + 0x66, 0xb5, 0x84, 0x81, 0x86, 0x5e, 0xf4, 0xa5, + 0xc0, 0x98, 0x49, 0x5d, 0xe8, 0xe6, 0x0d, 0x1d, + 0x5f, 0xbc, 0xa0, 0x97, 0xc2, 0x34, 0x16, 0x86, + 0x16, 0x90, 0x52, 0x97, 0xda, 0x58, 0xef, 0x4e, + 0x07, 0xbc, 0x74, 0x1c, 0x68, 0x9b, 0x88, 0xe9, + 0x02, 0x03, 0x84, 0x80, 0x38, 0x44, 0x84, 0x4f, + 0xc5, 0x26, 0x79, 0x18, 0x26, 0x32, 0x33, 0x16, + 0x6e, 0x70, 0xd9, 0xa9, 0x8a, 0xcd, 0x47, 0xd6, + 0x79, 0xcb, 0xeb, 0xd6, 0xa1, 0x89, 0x91, 0x91, + 0xa0, 0xf8, 0x82, 0x20, 0x04, 0x15, 0x0e, 0x49, + 0xa9, 0x4b, 0x02, 0x18, 0x0e, 0xa5, 0x7f, 0xe9, + 0x5e, 0xd9, 0xaf, 0xa8, 0x60, 0x86, 0xc7, 0x03, + 0xdc, 0x4d, 0x4a, 0x3a, 0xdf, 0x7b, 0xc2, 0x54, + 0x35, 0x20, 0x6a, 0xfe, 0xa5, 0x30, 0x10, 0x09, + 0x97, 0xe6, 0x0c, 0xb1, 0x23, 0x1a, 0x03, 0x74, + 0xf7, 0x95, 0x2f, 0x8d, 0xa0, 0xdd, 0x25, 0x98, + 0x33, 0x00, 0x80, 0x40, 0xfd, 0x75, 0xac, 0x23, + 0x4c, 0x82, 0x4f, 0x34, 0x6b, 0x95, 0x9d, 0x04, + 0x22, 0x01, 0x30, 0x09, 0x02, 0x75, 0x14, 0xba, + 0x02, 0x14, 0xd2, 0x66, 0xc7, 0xbc, 0x1a, 0x35, + 0x42, 0xae, 0xe7, 0x0a, 0xc7, 0x75, 0xc9, 0xa3, + 0xcd, 0x4b, 0x87, 0x85, 0xc0, 0xf5, 0x51, 0xfd, + 0xa7, 0x3c, 0x5c, 0x46, 0xf4, 0x97, 0x66, 0x3c, + 0x0e, 0xb0, 0x84, 0x61, 0x90, 0x0b, 0x06, 0x4b, + 0xed, 0x68, 0x3a, 0x2d, 0x00, 0x0e, 0x21, 0x0b, + 0x53, 0xf8, 0xd8, 0xb2, 0xff, 0x00, 0xae, 0x46, + 0xe1, 0x9f, 0xd3, 0x6d, 0xa2, 0x09, 0x25, 0x1a, + 0x9a, 0x7f, 0x63, 0x02, 0x26, 0x85, 0x02, 0x81, + 0xf4, 0x2f, 0xc4, 0x6c, 0xc1, 0x22, 0x90, 0x12, + 0x11, 0x6a, 0x12, 0xc8, 0x2c, 0xb3, 0x94, 0x82, + 0x25, 0x9e, 0x21, 0x07, 0x01, 0x1a, 0xd2, 0x02, + 0x14, 0xcb, 0x6a, 0x21, 0x4c, 0xf5, 0x07, 0x4c, + 0x26, 0x5d, 0x8a, 0x30, 0x68, 0xe2, 0xa9, 0x00, + 0x0a, 0x5e, 0xf0, 0xe7, 0x35, 0x18, 0x10, 0x88, + 0x1a, 0xfb, 0x91, 0x8f, 0xb8, 0x34, 0x01, 0x0d, + 0xc0, 0x10, 0x10, 0x68, 0x34, 0xae, 0x4b, 0x17, + 0x32, 0x27, 0x22, 0x05, 0x51, 0x55, 0x00, 0xd3, + 0x09, 0x40, 0x80, 0x0c, 0xca, 0xc1, 0xb3, 0xa1, + 0x9a, 0x5d, 0xe5, 0xfd, 0x93, 0x24, 0x0b, 0xd7, + 0xd5, 0x02, 0xec, 0x0a, 0x0f, 0xcf, 0xf0, 0x30, + 0x60, 0x36, 0x8d, 0x8e, 0x68, 0x01, 0x1f, 0x74, + 0x4f, 0x61, 0x99, 0xab, 0xd1, 0x18, 0xfc, 0x5c, + 0xb4, 0x67, 0x51, 0x99, 0x37, 0x8b, 0xea, 0xb2, + 0x8d, 0x4c, 0x5c, 0x1f, 0xe0, 0xdd, 0xd2, 0xb9, + 0xd6, 0xb4, 0x43, 0x1c, 0x15, 0x8e, 0x65, 0xac, + 0x3a, 0xcc, 0x82, 0x28, 0xa0, 0x7d, 0x42, 0x85, + 0xb4, 0x0e, 0xe0, 0x34, 0xc6, 0x51, 0xdf, 0x0e, + 0x40, 0x81, 0x90, 0xd2, 0xc4, 0x08, 0x1e, 0xf1, + 0x80, 0xf0, 0x10, 0x21, 0x03, 0x02, 0x22, 0xc9, + 0xb1, 0x59, 0xa5, 0x00, 0x22, 0x50, 0x20, 0xfb, + 0xc0, 0x2f, 0x88, 0x48, 0x23, 0x00, 0x8f, 0x7b, + 0xfa, 0x77, 0x70, 0x4e, 0xc8, 0x03, 0xa1, 0xc5, + 0x22, 0x83, 0x3c, 0x64, 0x1c, 0x2b, 0x00, 0x07, + 0xd8, 0xc3, 0x6b, 0x48, 0x20, 0x1b, 0x1e, 0x89, + 0x17, 0x02, 0xd9, 0x9f, 0xe0, 0x82, 0x00, 0xc9, + 0xa0, 0x12, 0xdf, 0x10, 0x13, 0xd5, 0x3f, 0xd6, + 0xa3, 0x78, 0xcf, 0x14, 0xdb, 0x68, 0x84, 0xf1, + 0x06, 0x20, 0xdb, 0x77, 0x0b, 0x42, 0x0c, 0x2c, + 0x58, 0x1f, 0xe8, 0x30, 0x3d, 0x70, 0x80, 0x40, + 0x06, 0x0d, 0x33, 0x5f, 0x98, 0x18, 0x9d, 0x34, + 0x15, 0x83, 0x9b, 0x04, 0x60, 0xc5, 0x42, 0x34, + 0x08, 0x23, 0x00, 0x35, 0x29, 0x1a, 0xb7, 0x73, + 0x94, 0xad, 0x2d, 0x76, 0xa9, 0x68, 0x33, 0x9d, + 0x4b, 0xf6, 0x95, 0xc1, 0x02, 0xc5, 0x14, 0x00, + 0x09, 0xbd, 0x88, 0x18, 0x31, 0xbc, 0xaa, 0xb0, + 0x01, 0x10, 0xa2, 0x90, 0xf1, 0x48, 0xd6, 0x1d, + 0xfc, 0x38, 0x10, 0x00, 0x80, 0x09, 0x76, 0x21, + 0x9f, 0xd4, 0x41, 0x72, 0xd2, 0x31, 0xd5, 0xc5, + 0x89, 0x56, 0x97, 0x69, 0x05, 0x03, 0xaa, 0x4d, + 0x3e, 0x0f, 0xf7, 0x78, 0xc6, 0x37, 0x0d, 0x81, + 0xd4, 0xfa, 0xa4, 0x95, 0x67, 0x14, 0xb5, 0x20, + 0x6a, 0x3f, 0x80, 0x39, 0x9e, 0x1c, 0x09, 0x83, + 0xdf, 0xe2, 0x19, 0xc2, 0xd1, 0xd6, 0xb6, 0x6e, + 0x1e, 0xf0, 0x2a, 0x44, 0x4a, 0x50, 0x49, 0x40, + 0x82, 0x12, 0x5e, 0x38, 0x40, 0x69, 0x92, 0x93, + 0xa5, 0x96, 0x43, 0xa0, 0xb3, 0x98, 0xce, 0xaa, + 0xae, 0x4b, 0x96, 0x51, 0x68, 0x0f, 0xe2, 0x01, + 0x0e, 0xa6, 0x33, 0x55, 0xa9, 0x48, 0x59, 0xcf, + 0x8e, 0x42, 0x04, 0x16, 0x9a, 0xe0, 0x30, 0x8b, + 0x9c, 0xc2, 0x6a, 0x3b, 0x2b, 0x59, 0x1e, 0xfb, + 0xae, 0x61, 0x24, 0x12, 0xd1, 0x22, 0xa6, 0x27, + 0x38, 0x6d, 0x18, 0x0a, 0xc8, 0x54, 0x2f, 0x32, + 0x4a, 0x38, 0x5a, 0xd1, 0xa2, 0x00, 0xad, 0x5f, + 0x8c, 0xea, 0xba, 0x78, 0x43, 0x9b, 0x7f, 0xbb, + 0x0f, 0xde, 0x1e, 0x4e, 0x71, 0xa3, 0x42, 0x59, + 0x2a, 0x16, 0x1d, 0x7d, 0xcc, 0x1a, 0xe2, 0x29, + 0xec, 0x69, 0x43, 0xa9, 0x57, 0x27, 0x4f, 0xe1, + 0x83, 0x95, 0x59, 0xf6, 0x8f, 0x79, 0x75, 0xb4, + 0x5f, 0xeb, 0x51, 0xb4, 0x67, 0xf4, 0x38, 0xa1, + 0x49, 0x8e, 0xbe, 0x8e, 0x98, 0xa0, 0x40, 0xfc, + 0xf7, 0x42, 0x43, 0x81, 0x80, 0x09, 0xfd, 0xff, + 0x00, 0x13, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, + 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x00, 0x06, + 0xa4, 0x19, 0x0f, 0xfd, 0xc4, 0x06, 0xaa, 0x99, + 0x07, 0x98, 0x3b, 0xc2, 0x40, 0x3d, 0xc9, 0xf5, + 0x20, 0x62, 0x98, 0x23, 0x08, 0xce, 0xa5, 0xc0, + 0xea, 0x4a, 0x87, 0xac, 0x24, 0x34, 0x00, 0xc8, + 0xf9, 0xa6, 0xf8, 0xef, 0x37, 0xc7, 0x79, 0xbe, + 0x3b, 0xcd, 0xf1, 0xde, 0x6f, 0x8e, 0xf3, 0x7c, + 0x77, 0x9b, 0xe3, 0xbc, 0xdf, 0x1d, 0xe6, 0xf8, + 0xef, 0x37, 0xc7, 0x79, 0xbe, 0x3b, 0xcd, 0xf1, + 0xde, 0x6f, 0x8e, 0xf3, 0x7c, 0x77, 0x9b, 0xe3, + 0xbc, 0xdf, 0x1d, 0xe6, 0xf8, 0xef, 0x03, 0xcc, + 0x26, 0x10, 0xbf, 0x15, 0xfb, 0x88, 0x82, 0x90, + 0x69, 0xe8, 0x3f, 0xd5, 0x7d, 0x32, 0x50, 0x20, + 0x6c, 0x10, 0xf8, 0xcd, 0xa3, 0x3f, 0xa6, 0x3f, + 0x04, 0x21, 0x41, 0x07, 0x4c, 0x33, 0x73, 0xcd, + 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, + 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, + 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, + 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, + 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, + 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, + 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, + 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, + 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, + 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, + 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, + 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, + 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, + 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, + 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, + 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, + 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, + 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, + 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, + 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, 0x73, 0xcd, + 0x37, 0x3c, 0xd3, 0x73, 0xcd, 0x37, 0x3c, 0xd3, + 0x73, 0xcd, 0x37, 0x3c, 0xd1, 0x30, 0x2e, 0x60, + 0xed, 0x09, 0x88, 0xaf, 0x73, 0x9b, 0x46, 0x58, + 0x69, 0x89, 0xc1, 0x0c, 0xd3, 0x88, 0x78, 0x9c, + 0x43, 0xc4, 0xe2, 0x1e, 0x27, 0x10, 0xf1, 0x38, + 0x87, 0x89, 0xc4, 0x3c, 0x4e, 0x21, 0xe2, 0x71, + 0x0f, 0x13, 0x88, 0x78, 0x9c, 0x43, 0xc4, 0xe2, + 0x1e, 0x27, 0x10, 0xf1, 0x38, 0x87, 0x89, 0xc4, + 0x3c, 0x4e, 0x21, 0xe2, 0x71, 0x0f, 0x13, 0x88, + 0x78, 0x9c, 0x43, 0xc4, 0xe2, 0x1e, 0x27, 0x10, + 0xf1, 0x38, 0x87, 0x89, 0xc4, 0x3c, 0x4e, 0x21, + 0xe2, 0x71, 0x0f, 0x13, 0x88, 0x78, 0x9c, 0x43, + 0xc4, 0xe2, 0x1e, 0x27, 0x10, 0xf1, 0x38, 0x87, + 0x89, 0xc4, 0x3c, 0x4e, 0x21, 0xe2, 0x71, 0x0f, + 0x13, 0x88, 0x78, 0x9c, 0x43, 0xc4, 0xe2, 0x1e, + 0x27, 0x10, 0xf1, 0x38, 0x87, 0x89, 0xc4, 0x3c, + 0x4e, 0x21, 0xe2, 0x71, 0x0f, 0x13, 0x88, 0x78, + 0x9c, 0x43, 0xc4, 0xe2, 0x1e, 0x27, 0x10, 0xf1, + 0x38, 0x87, 0x89, 0xc4, 0x3c, 0x4e, 0x21, 0xe2, + 0x71, 0x0f, 0x13, 0x88, 0x78, 0x9c, 0x43, 0xc4, + 0xe2, 0x1e, 0x27, 0x10, 0xf1, 0x38, 0x87, 0x89, + 0xc4, 0x3c, 0x4e, 0x21, 0xe2, 0x71, 0x0f, 0x13, + 0x88, 0x78, 0x9c, 0x43, 0xc4, 0xe2, 0x1e, 0x27, + 0x10, 0xf1, 0x38, 0x87, 0x89, 0xc4, 0x3c, 0x4e, + 0x21, 0xe2, 0x71, 0x0f, 0x13, 0x88, 0x78, 0x9c, + 0x43, 0xc4, 0xe2, 0x1e, 0x27, 0x10, 0xf1, 0x38, + 0x87, 0x89, 0xc4, 0x3c, 0x4e, 0x21, 0xe2, 0x71, + 0x0f, 0x13, 0x88, 0x78, 0x9c, 0x43, 0xc4, 0xe2, + 0x1e, 0x23, 0x63, 0x06, 0x00, 0x17, 0x02, 0x1f, + 0x62, 0x7f, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, + 0x12, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x24, 0x90, 0x49, + 0x24, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x11, 0xb6, 0xdf, 0x6d, 0xb6, + 0xdb, 0xe2, 0x40, 0x00, 0x80, 0x08, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x25, 0x66, 0x93, 0x45, 0x0d, 0xb7, 0xc0, 0x90, + 0x00, 0x04, 0x90, 0x09, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x90, 0x09, 0x00, 0x82, + 0x21, 0x9b, 0x6f, 0x88, 0x24, 0x02, 0x49, 0x04, + 0x82, 0x4e, 0xf6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, + 0xb6, 0xc2, 0xc9, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x92, 0x49, 0x04, 0x92, 0x49, 0x20, 0x0d, 0x6d, + 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x6a, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x20, + 0x52, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, + 0x6d, 0x42, 0x40, 0x36, 0xdb, 0x6d, 0x84, 0x8c, + 0x1f, 0xb6, 0xdb, 0x6d, 0x6c, 0x92, 0x49, 0x16, + 0xc3, 0x08, 0xb4, 0x92, 0x49, 0x73, 0x26, 0x42, + 0x49, 0x24, 0x6a, 0x4d, 0x44, 0x93, 0x40, 0x12, + 0x2d, 0xb6, 0xdb, 0x76, 0x73, 0x7a, 0xed, 0xb6, + 0xd9, 0x52, 0x49, 0x24, 0xc6, 0x9c, 0x9f, 0x32, + 0x49, 0x25, 0x21, 0xf9, 0x3a, 0xaf, 0x20, 0xc1, + 0xab, 0x3a, 0xff, 0x00, 0xc0, 0x24, 0x5b, 0x6d, + 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xf4, + 0x00, 0x00, 0xb1, 0x55, 0xaf, 0x00, 0x00, 0x07, + 0x54, 0x95, 0x0b, 0xb8, 0x64, 0xeb, 0xe5, 0xf4, + 0x4b, 0x92, 0x48, 0xb6, 0xd8, 0xf7, 0xf4, 0xcf, + 0xcd, 0x8e, 0xdb, 0x65, 0x33, 0x6d, 0xb6, 0xdb, + 0x6d, 0xb6, 0xdb, 0x6d, 0xf1, 0x27, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xf3, 0x00, 0x91, 0x6d, + 0xb4, 0x2f, 0x78, 0x98, 0xc2, 0x9d, 0xb6, 0xc8, + 0x40, 0x00, 0x02, 0x09, 0x20, 0x90, 0x00, 0x00, + 0x02, 0x40, 0x04, 0x92, 0x49, 0x00, 0x10, 0x00, + 0x00, 0x02, 0x41, 0x26, 0xdb, 0x63, 0xdd, 0x5f, + 0x5d, 0x8f, 0x3b, 0x6d, 0xb0, 0x80, 0x00, 0x04, + 0x02, 0x49, 0x24, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x24, 0x00, 0x40, 0x00, 0x10, 0x00, 0x04, 0x02, + 0x4d, 0xb6, 0xc8, 0xc9, 0x9f, 0xd5, 0x54, 0x7e, + 0xdb, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x48, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x48, 0x24, 0x9b, 0x6d, 0x85, + 0x5a, 0x6c, 0x5a, 0xaa, 0x6d, 0xb6, 0xd2, 0x00, + 0x04, 0x80, 0x48, 0x00, 0x02, 0x00, 0x00, 0x11, + 0xbb, 0xe0, 0x12, 0x01, 0x20, 0x82, 0x49, 0x24, + 0x12, 0x49, 0x36, 0xdb, 0x48, 0xac, 0xeb, 0x8d, + 0xd2, 0x3b, 0x6d, 0x84, 0x00, 0x08, 0x20, 0x12, + 0x09, 0x00, 0x00, 0x00, 0x24, 0x37, 0x49, 0x04, + 0x02, 0x09, 0x20, 0x82, 0x48, 0x20, 0x12, 0x2d, + 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xd9, + 0x09, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x90, 0x40, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x48, 0x24, 0x5b, 0x6d, 0xb6, 0xdb, + 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x90, 0x00, 0x00, + 0x92, 0x41, 0x24, 0x00, 0x00, 0x00, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x48, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, + 0xdb, 0x65, 0x20, 0x00, 0x40, 0x20, 0x80, 0x41, + 0x00, 0x00, 0x01, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x00, 0x90, 0x92, 0x49, + 0x24, 0x92, 0x4d, 0x24, 0x92, 0x49, 0x2e, 0x49, + 0x24, 0x92, 0x48, 0x24, 0x92, 0x49, 0x24, 0x82, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x41, 0x20, 0x92, 0x40, 0x00, 0x92, 0x49, + 0x24, 0x00, 0x09, 0x20, 0x80, 0x00, 0x00, 0x02, + 0x08, 0x00, 0x00, 0x00, 0x04, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x12, 0x41, + 0x24, 0x92, 0x09, 0x24, 0x82, 0x41, 0x24, 0x12, + 0x41, 0x24, 0x92, 0x49, 0x04, 0x82, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x09, 0x20, 0x10, 0x00, 0x24, 0x80, + 0x00, 0x00, 0x12, 0x48, 0x00, 0x92, 0x49, 0x24, + 0x92, 0x40, 0x24, 0x92, 0x49, 0x24, 0x91, 0x5b, + 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xa2, + 0x40, 0x24, 0x02, 0x48, 0x24, 0x90, 0x09, 0x24, + 0x02, 0x48, 0x24, 0x00, 0x00, 0x24, 0x80, 0x01, + 0x00, 0x00, 0x01, 0x01, 0x27, 0xc3, 0x4f, 0xe3, + 0x2f, 0x56, 0x4a, 0x93, 0xa0, 0x12, 0x48, 0x04, + 0x80, 0x48, 0x24, 0x12, 0x09, 0x04, 0x10, 0x49, + 0x24, 0x92, 0x40, 0x20, 0x00, 0x09, 0x24, 0x80, + 0x02, 0x96, 0x8a, 0xa6, 0xdc, 0x4f, 0x1b, 0x76, + 0x4a, 0x49, 0x24, 0x82, 0x09, 0x04, 0x12, 0x49, + 0x20, 0x92, 0x00, 0x00, 0x13, 0x6d, 0xb6, 0xdb, + 0x6d, 0xb6, 0xdb, 0x6d, 0xa0, 0x10, 0x01, 0xa0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4b, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, + 0x6d, 0xbb, 0x04, 0x90, 0x49, 0x24, 0x90, 0x48, + 0x20, 0x10, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x86, + 0xc6, 0x95, 0xed, 0x31, 0x95, 0x49, 0xce, 0x40, + 0x24, 0x82, 0x08, 0x20, 0x12, 0x00, 0x04, 0x12, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x80, 0xa3, 0xd7, 0x0b, + 0x5a, 0xe3, 0x5d, 0xe4, 0x90, 0x48, 0x20, 0x82, + 0x08, 0x04, 0x90, 0x00, 0x24, 0x12, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x4e, + 0x56, 0x49, 0x24, 0x92, 0x49, 0x14, 0x92, 0x49, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x49, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x24, 0x82, + 0x40, 0x20, 0x92, 0x49, 0x20, 0x12, 0x00, 0x00, + 0x00, 0x09, 0x20, 0x00, 0x00, 0x00, 0x92, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x01, 0x04, 0x10, 0x00, 0x00, + 0x00, 0x01, 0x20, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x20, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4a, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x3a, 0x90, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x82, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x64, 0x92, 0x49, 0x31, 0x73, 0x45, 0x24, 0x92, + 0x4d, 0x04, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa4, 0x92, 0x49, + 0x7c, 0x30, 0xd9, 0x24, 0x92, 0x5a, 0x40, 0x00, + 0x00, 0x08, 0x04, 0x92, 0x40, 0x00, 0x12, 0x48, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x3f, 0xff, 0x00, 0xff, 0x00, 0x34, + 0xab, 0xb7, 0xff, 0x00, 0xff, 0x00, 0xc4, 0x80, + 0x00, 0x00, 0x10, 0x09, 0x20, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x36, 0xdb, 0x6d, 0xb6, 0xdb, + 0x6d, 0xb6, 0xd8, 0x78, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x00, 0x00, 0x12, 0x40, 0x24, 0x12, 0x00, 0x00, + 0x92, 0x00, 0x24, 0x02, 0x40, 0x24, 0x90, 0x40, + 0x00, 0x90, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x04, 0x92, 0x08, 0x20, 0x80, 0x01, 0x24, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x48, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x90, 0x48, 0x04, 0x02, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x12, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x82, 0x01, 0x56, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, + 0xb6, 0xdb, 0x60, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x77, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x24, 0x11, 0x2f, + 0x26, 0xe2, 0x36, 0x47, 0x83, 0x44, 0xe2, 0x93, + 0xde, 0xe2, 0x89, 0x65, 0xf2, 0x66, 0x64, 0xaf, + 0xb5, 0x34, 0x92, 0x49, 0x23, 0x20, 0x1d, 0x24, + 0x92, 0x52, 0x00, 0x22, 0x57, 0x67, 0x0d, 0x37, + 0x90, 0x2f, 0x26, 0xb4, 0xc1, 0xdc, 0xcc, 0x86, + 0xe1, 0x21, 0x8e, 0x18, 0xc9, 0xba, 0x8d, 0xb6, + 0xdb, 0x50, 0xd0, 0x03, 0x6d, 0xb6, 0xdc, 0x80, + 0x4f, 0x1c, 0xdc, 0x55, 0x6b, 0x1a, 0xfc, 0x22, + 0xd2, 0xc2, 0x62, 0xf8, 0x54, 0x2e, 0xc6, 0x6f, + 0xaa, 0x46, 0x7c, 0x49, 0x24, 0x92, 0xf4, 0x63, + 0xf2, 0x49, 0x24, 0xf1, 0x20, 0x0c, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x26, 0x80, 0x7f, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xfb, 0x51, 0x6d, 0xb6, + 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x90, 0x40, + 0x20, 0x00, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, + 0x01, 0x24, 0x00, 0x00, 0x20, 0x82, 0x48, 0x00, + 0x00, 0x00, 0x20, 0x92, 0x41, 0x20, 0x00, 0x49, + 0x00, 0x80, 0x00, 0x24, 0x92, 0x40, 0x00, 0x10, + 0x08, 0x00, 0x12, 0x00, 0x00, 0x02, 0x48, 0x00, + 0x00, 0x49, 0x04, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x40, 0x24, 0x10, 0x08, 0x20, 0x92, + 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x82, 0x49, 0x24, 0x12, 0x49, + 0x00, 0x12, 0x49, 0x20, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, 0x04, + 0x00, 0x49, 0x04, 0x00, 0x08, 0x24, 0x82, 0x49, + 0x20, 0x00, 0x00, 0x24, 0x80, 0x09, 0x00, 0x00, + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x20, 0x02, 0x09, 0x24, 0x10, 0x09, + 0x04, 0x92, 0x08, 0x20, 0x12, 0x09, 0x24, 0x82, + 0x41, 0x00, 0x92, 0x49, 0x24, 0x92, 0x49, 0x00, + 0x90, 0x48, 0x20, 0x12, 0x48, 0x00, 0x82, 0x01, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x24, 0x92, 0x09, + 0x00, 0x92, 0x00, 0x24, 0x82, 0x4c, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x89, 0x00, + 0x00, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x49, 0x20, 0x02, 0x41, 0x20, 0x00, + 0x09, 0x20, 0x01, 0xb7, 0x0c, 0xa8, 0x14, 0x56, + 0xee, 0x46, 0xde, 0x92, 0x00, 0x00, 0x00, 0x48, + 0x04, 0x00, 0x00, 0x00, 0x10, 0x01, 0x04, 0x02, + 0x00, 0x20, 0x10, 0x08, 0x00, 0x90, 0x00, 0x29, + 0x27, 0x74, 0x73, 0xe3, 0x3b, 0xd7, 0xa4, 0x92, + 0x20, 0x92, 0x49, 0x24, 0x92, 0x41, 0x24, 0x92, + 0x48, 0x20, 0x00, 0x00, 0x00, 0x12, 0x01, 0x20, + 0x00, 0x01, 0x24, 0x12, 0x42, 0x4a, 0x9f, 0x6a, + 0x66, 0x1a, 0x08, 0x89, 0x22, 0x48, 0x00, 0x00, + 0x09, 0x20, 0x10, 0x00, 0x00, 0x00, 0x48, 0x20, + 0x80, 0x49, 0x20, 0x80, 0x40, 0x04, 0x00, 0x40, + 0x24, 0xfd, 0xb6, 0xdf, 0x6d, 0xb7, 0xdb, 0x6d, + 0xb6, 0xfc, 0x90, 0x00, 0x00, 0x02, 0x09, 0x20, + 0x00, 0x00, 0x04, 0x90, 0x48, 0x20, 0x02, 0x01, + 0x00, 0x12, 0x08, 0x00, 0x92, 0x41, 0x00, 0x02, + 0x40, 0x24, 0x92, 0x49, 0x00, 0x00, 0x49, 0x04, + 0x00, 0x01, 0x00, 0x90, 0x00, 0x20, 0x02, 0x49, + 0x04, 0x92, 0x49, 0x24, 0x92, 0x41, 0x24, 0x92, + 0x09, 0x20, 0x82, 0x49, 0x24, 0x92, 0x01, 0x20, + 0x00, 0x09, 0x24, 0x92, 0x41, 0x04, 0x82, 0x08, + 0x20, 0x00, 0x41, 0x20, 0x02, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x01, 0x24, + 0x92, 0x49, 0x20, 0x82, 0x41, 0x20, 0x92, 0x49, + 0x24, 0x80, 0x00, 0x04, 0x10, 0x48, 0x00, 0x00, + 0x00, 0x04, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x82, 0x48, 0x00, 0x12, 0x01, + 0x24, 0x12, 0x00, 0x00, 0x02, 0x49, 0x00, 0x00, + 0x09, 0x24, 0x80, 0x00, 0x00, 0x00, 0x09, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x48, + 0x24, 0x02, 0x49, 0x00, 0x10, 0x41, 0x00, 0x00, + 0x49, 0x24, 0x90, 0x49, 0x24, 0x90, 0x00, 0x00, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x08, 0x04, 0x90, + 0x48, 0x00, 0x02, 0x49, 0x00, 0x10, 0x41, 0x20, + 0x92, 0x01, 0x04, 0x12, 0x41, 0x24, 0x82, 0x48, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x12, 0x00, 0x00, 0x90, 0x01, 0x00, + 0x02, 0x00, 0x04, 0x12, 0x48, 0x04, 0x90, 0x01, + 0x04, 0x80, 0x01, 0x20, 0x02, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x41, 0x24, + 0x00, 0x00, 0x24, 0x92, 0x01, 0x20, 0x92, 0x40, + 0x24, 0x90, 0x08, 0x20, 0x82, 0x49, 0x24, 0x92, + 0x00, 0x04, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x41, 0x00, 0x00, 0x01, + 0x00, 0x82, 0x48, 0x00, 0x00, 0x49, 0x20, 0x02, + 0x40, 0x24, 0x12, 0x01, 0x04, 0x00, 0x01, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x00, 0x90, 0x00, 0x00, 0x02, 0x01, 0x24, 0x80, + 0x00, 0x00, 0x92, 0x00, 0x00, 0x90, 0x40, 0x20, + 0x12, 0x48, 0x00, 0x12, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x41, 0x24, 0x90, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x24, + 0x80, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x40, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x20, 0x12, 0x09, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x04, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x7f, 0xff, 0xc4, 0x00, + 0x2d, 0x11, 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, + 0x05, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x11, 0x21, 0x31, 0x61, + 0x10, 0x41, 0x51, 0x71, 0x20, 0x40, 0x50, 0xc1, + 0xf0, 0x30, 0x81, 0xa1, 0xd1, 0x80, 0x91, 0xb1, + 0xe1, 0x60, 0x70, 0xa0, 0xff, 0xda, 0x00, 0x08, + 0x01, 0x03, 0x01, 0x01, 0x3f, 0x10, 0xff, 0x00, + 0xd9, 0x37, 0xeb, 0xbf, 0xfc, 0x35, 0xfa, 0xfc, + 0xe1, 0x3c, 0x13, 0x84, 0xf1, 0x3f, 0x25, 0x60, + 0xe3, 0x57, 0xfd, 0xff, 0x00, 0x87, 0xc8, 0x99, + 0xf2, 0x26, 0x7c, 0x89, 0x9f, 0x22, 0x67, 0xc8, + 0x99, 0xf2, 0x26, 0x7c, 0x89, 0x9f, 0x22, 0x67, + 0xc8, 0x99, 0xf2, 0x26, 0x7c, 0x89, 0x9f, 0x22, + 0x67, 0xc8, 0x99, 0xf2, 0x26, 0x7c, 0x89, 0x9f, + 0x22, 0x67, 0xc8, 0x99, 0xf2, 0x26, 0x7c, 0x89, + 0x9f, 0x02, 0x67, 0x34, 0x3d, 0x5d, 0x69, 0xf9, + 0x7f, 0xe7, 0xfd, 0xf2, 0xc8, 0x4c, 0x8d, 0x10, + 0x9f, 0x5d, 0x1f, 0x7e, 0x0d, 0xf9, 0x79, 0x6a, + 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x3a, 0xaf, 0x04, + 0xf9, 0x60, 0x00, 0x00, 0x12, 0xf1, 0xe2, 0xd1, + 0xec, 0xbd, 0xfe, 0x83, 0x94, 0x9a, 0xb1, 0x65, + 0x1a, 0xa3, 0xef, 0x0b, 0xea, 0x36, 0xd6, 0xad, + 0x09, 0x26, 0x56, 0xab, 0xd0, 0x49, 0x15, 0x66, + 0xaf, 0xda, 0x0b, 0xe2, 0x89, 0x3f, 0x3c, 0xb2, + 0x72, 0xa4, 0x9d, 0x95, 0x36, 0xf3, 0xd1, 0xde, + 0xbd, 0x51, 0xa7, 0xd0, 0xd1, 0x6f, 0xec, 0x3d, + 0x3e, 0x82, 0xa1, 0x51, 0x19, 0x19, 0x19, 0x19, + 0x19, 0x1f, 0xd2, 0xea, 0x7e, 0x0b, 0x53, 0xc4, + 0xe0, 0x4a, 0x8d, 0xd0, 0xd4, 0xe2, 0xd4, 0x70, + 0x69, 0x7d, 0x3d, 0x1e, 0xcb, 0xdf, 0xe8, 0x25, + 0xf2, 0x88, 0xd9, 0x57, 0xa6, 0xae, 0xb6, 0xb4, + 0x31, 0x02, 0x3a, 0xde, 0xaa, 0xf5, 0x2b, 0x74, + 0xcf, 0x4d, 0x9c, 0x75, 0x1d, 0x15, 0x5f, 0xee, + 0xff, 0x00, 0x43, 0xa6, 0xd3, 0x96, 0x4e, 0xe8, + 0x7b, 0xe2, 0x15, 0x68, 0x95, 0xfd, 0xbd, 0xf3, + 0xa8, 0xdd, 0x6d, 0xbf, 0xa1, 0xf9, 0x7e, 0xc3, + 0xd0, 0xa5, 0x29, 0x4a, 0x52, 0x8d, 0x86, 0x69, + 0x82, 0xc8, 0x58, 0x91, 0x75, 0x2e, 0x54, 0x1b, + 0x88, 0x5d, 0x4a, 0x52, 0x94, 0xa5, 0x2f, 0x1b, + 0xd4, 0xc1, 0x81, 0xcc, 0x52, 0xea, 0xcd, 0x51, + 0xec, 0x2c, 0x22, 0xc5, 0x50, 0x95, 0x63, 0xca, + 0xe0, 0x5b, 0x70, 0xd1, 0x91, 0xbd, 0x50, 0xf0, + 0x23, 0x54, 0xa9, 0x75, 0x30, 0x60, 0xc7, 0x8b, + 0x47, 0xb2, 0xf7, 0xf2, 0xff, 0x00, 0x97, 0xec, + 0x3c, 0x9a, 0x14, 0xa5, 0x29, 0x4a, 0x52, 0x8a, + 0xd3, 0x88, 0x99, 0x1d, 0x04, 0x25, 0x11, 0x4a, + 0x52, 0x94, 0xa5, 0x34, 0x5e, 0x1a, 0x9f, 0x16, + 0xe8, 0x9c, 0x35, 0x53, 0x98, 0x50, 0x68, 0x82, + 0x73, 0x3c, 0x29, 0xcc, 0x8d, 0xdf, 0x03, 0xa1, + 0xd1, 0xaa, 0xf0, 0x5e, 0x43, 0x78, 0x79, 0xe3, + 0xaf, 0x8b, 0x47, 0xb2, 0xf7, 0xf0, 0xad, 0x99, + 0x99, 0x1b, 0x1b, 0x1f, 0xab, 0x93, 0xe7, 0xd8, + 0xcc, 0x3a, 0x13, 0xdb, 0x66, 0x7d, 0xcb, 0xa7, + 0xb6, 0x9d, 0x46, 0x9e, 0x4b, 0xe7, 0x2d, 0x4d, + 0x11, 0x8d, 0x03, 0x2c, 0x39, 0x75, 0xed, 0x8c, + 0x51, 0x2e, 0xf0, 0xa5, 0xec, 0xcc, 0xff, 0x00, + 0x20, 0x9d, 0x0c, 0x9b, 0x1b, 0x26, 0xe2, 0xcf, + 0xea, 0x8d, 0xbd, 0xe2, 0xcf, 0xb2, 0x2a, 0xb2, + 0x2d, 0x16, 0xef, 0x5f, 0x17, 0xe5, 0xfb, 0x70, + 0x68, 0xf5, 0x36, 0x8d, 0xa3, 0x68, 0xda, 0x36, + 0x8d, 0xa3, 0x68, 0xda, 0x36, 0x8d, 0xa3, 0x68, + 0xda, 0x36, 0x8d, 0xa3, 0x68, 0xda, 0x36, 0x8d, + 0xa3, 0x68, 0xda, 0x36, 0xb8, 0xb4, 0xd4, 0x41, + 0x04, 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, 0x10, + 0x41, 0x04, 0x10, 0x41, 0x04, 0x10, 0x40, 0x93, + 0xc4, 0xd1, 0xec, 0xbd, 0xfc, 0x2b, 0x3f, 0x41, + 0x4f, 0xb0, 0xf0, 0xcc, 0xba, 0xf3, 0x14, 0x86, + 0x09, 0x69, 0xcb, 0xad, 0x17, 0x77, 0xf8, 0x94, + 0x6c, 0xda, 0x55, 0x26, 0xa3, 0x1b, 0xa3, 0x6b, + 0x62, 0x9f, 0xe0, 0xce, 0xad, 0x13, 0x7f, 0x69, + 0xaf, 0xb1, 0x4c, 0x47, 0xa3, 0x30, 0xca, 0x1a, + 0x7a, 0xbb, 0xd3, 0x5a, 0x35, 0x7f, 0xcd, 0x9f, + 0xa2, 0x34, 0x02, 0x77, 0xf6, 0xff, 0x00, 0x43, + 0x2b, 0xd2, 0x3c, 0x47, 0xf7, 0x74, 0x61, 0x4f, + 0x57, 0x5f, 0x0f, 0xe5, 0xfb, 0x7a, 0xb6, 0x8f, + 0x65, 0xef, 0xe1, 0x4d, 0xa7, 0x51, 0xae, 0x4f, + 0xbb, 0x12, 0xd0, 0x97, 0x72, 0x51, 0x78, 0xe9, + 0xc8, 0x4d, 0x15, 0xa3, 0xe4, 0x73, 0x94, 0xe9, + 0x70, 0x34, 0x92, 0x6d, 0xe3, 0x4d, 0x87, 0xb5, + 0xaf, 0x7e, 0x3c, 0xe7, 0x1d, 0x0c, 0x8e, 0x95, + 0xe3, 0x5e, 0x43, 0xca, 0xc7, 0xb7, 0x8b, 0xf2, + 0xfd, 0xbd, 0x5b, 0x47, 0xb2, 0xf7, 0xf0, 0xa5, + 0xda, 0xd7, 0xe0, 0xbd, 0x51, 0xd7, 0xe1, 0xfe, + 0x84, 0xa9, 0x38, 0x14, 0x97, 0x59, 0xc8, 0xd1, + 0x4b, 0xe6, 0xbd, 0x08, 0x07, 0x88, 0x6f, 0xc4, + 0x9c, 0xd8, 0xd9, 0x17, 0x96, 0x96, 0x77, 0xe7, + 0x81, 0xc6, 0xb3, 0xba, 0xaf, 0x35, 0xa5, 0x45, + 0x45, 0xe5, 0x2c, 0x77, 0x2c, 0xdb, 0x09, 0x7e, + 0x75, 0xf6, 0x66, 0x37, 0xcd, 0x26, 0x39, 0xf3, + 0x04, 0x79, 0x69, 0x6b, 0xde, 0x0f, 0x52, 0x4d, + 0x77, 0x4f, 0xfc, 0xf0, 0xfe, 0x5f, 0xb7, 0x9a, + 0x69, 0x93, 0x66, 0xdb, 0xfb, 0x36, 0xdf, 0xd8, + 0x9a, 0x4a, 0xbc, 0xce, 0x8f, 0x65, 0xef, 0xe1, + 0x6b, 0x2d, 0x8d, 0xa7, 0xf7, 0x18, 0xfb, 0x08, + 0xbe, 0xcb, 0x5a, 0x12, 0xaa, 0xcc, 0x27, 0xe6, + 0x93, 0x57, 0xa2, 0x5f, 0xf0, 0x6c, 0xa6, 0xdf, + 0x7a, 0x86, 0x34, 0x4a, 0x3f, 0xaa, 0xd5, 0xfb, + 0x11, 0x04, 0xd3, 0xb5, 0x7c, 0xdf, 0x57, 0xf3, + 0x41, 0xf8, 0x93, 0x13, 0xee, 0xda, 0xfd, 0x0d, + 0x57, 0xcb, 0xdc, 0x41, 0xd0, 0xfe, 0x85, 0x4f, + 0x71, 0x8a, 0x19, 0x86, 0xa9, 0x3e, 0xa4, 0x41, + 0x11, 0x8e, 0x74, 0x9a, 0x2f, 0xf1, 0x13, 0x24, + 0xe8, 0xba, 0x2e, 0x9e, 0x1f, 0xcb, 0xf6, 0xf3, + 0x5c, 0xbe, 0xfe, 0xc3, 0x4b, 0x4b, 0x39, 0x73, + 0x5f, 0xf9, 0xfb, 0x1e, 0x54, 0x79, 0xbf, 0x34, + 0xfd, 0x1f, 0x9d, 0xed, 0xe6, 0x74, 0x7b, 0x2f, + 0x7f, 0x0b, 0xaa, 0xe5, 0xd8, 0x52, 0x72, 0xeb, + 0xf9, 0x4d, 0x10, 0xed, 0xb8, 0x25, 0x1a, 0x3c, + 0x31, 0x3a, 0x4c, 0x69, 0x6e, 0x3a, 0xab, 0x4f, + 0x61, 0xb1, 0xa6, 0xde, 0xad, 0xd8, 0xba, 0xb6, + 0xb7, 0x6c, 0x46, 0x93, 0x1a, 0x42, 0x64, 0x9a, + 0x4f, 0x0c, 0xcb, 0x6b, 0xe9, 0xf6, 0x1c, 0x15, + 0xd8, 0x36, 0xad, 0x5f, 0x76, 0x67, 0x5c, 0xfb, + 0xbb, 0xe1, 0xfc, 0xbf, 0x6f, 0x34, 0x92, 0xba, + 0x75, 0x36, 0x9f, 0xdb, 0xfd, 0x09, 0x4a, 0x12, + 0x77, 0x7f, 0xa1, 0xed, 0x95, 0xbf, 0x33, 0xa3, + 0xd9, 0x7b, 0xf9, 0x7f, 0xcb, 0xf6, 0xf5, 0x6d, + 0x1e, 0xcb, 0xdf, 0xcb, 0xfe, 0x5f, 0xb7, 0xab, + 0x68, 0xf6, 0x5e, 0xfe, 0x5f, 0xf2, 0xfd, 0xbd, + 0x5b, 0x31, 0x0a, 0x1b, 0xf3, 0x7e, 0x6f, 0xcd, + 0xf9, 0xbf, 0x37, 0xe6, 0xfc, 0xdf, 0x9b, 0xf3, + 0x7e, 0x6f, 0xcd, 0xf9, 0xbd, 0x37, 0xe6, 0xfc, + 0xdf, 0x9b, 0xf3, 0x7e, 0x6f, 0xcd, 0xf9, 0xbf, + 0x37, 0xe2, 0x81, 0x26, 0x7f, 0x80, 0x2c, 0x6e, + 0x23, 0x26, 0x4c, 0x99, 0x32, 0x64, 0xc9, 0x93, + 0x26, 0x4c, 0x99, 0x32, 0x64, 0xc9, 0x93, 0x26, + 0x4c, 0x99, 0x32, 0x3a, 0xc7, 0xea, 0xed, 0x64, + 0x84, 0x13, 0x23, 0xdd, 0x1a, 0xa1, 0xdc, 0x34, + 0xc4, 0x1f, 0x05, 0xc1, 0x10, 0x69, 0x70, 0x57, + 0x30, 0x9c, 0xc4, 0xa3, 0x10, 0xdc, 0x34, 0x42, + 0x09, 0x67, 0xd5, 0xdb, 0xc9, 0x4a, 0x29, 0xcc, + 0x6e, 0x29, 0x46, 0xf5, 0x09, 0xe0, 0xab, 0x0c, + 0x6f, 0x72, 0xaa, 0x36, 0x82, 0x6a, 0x21, 0xb5, + 0x92, 0xaa, 0x2a, 0x69, 0x0d, 0xa7, 0x51, 0x55, + 0x13, 0xc0, 0x9e, 0xe3, 0x6a, 0xe0, 0xa5, 0x35, + 0x7a, 0xbb, 0x13, 0x29, 0x4a, 0x51, 0xb3, 0x29, + 0x4a, 0x52, 0x94, 0xa5, 0x29, 0x4a, 0x52, 0x94, + 0xbc, 0x1d, 0x6b, 0xf3, 0xcd, 0xc5, 0x47, 0x5f, + 0x96, 0x77, 0xa3, 0xf5, 0x6d, 0x1c, 0x34, 0x63, + 0x51, 0xaa, 0xf2, 0x68, 0x21, 0x0e, 0x99, 0xa9, + 0x11, 0xa8, 0x91, 0x89, 0x4c, 0x9a, 0x1a, 0x0d, + 0x32, 0x24, 0x64, 0x63, 0x83, 0x9a, 0x90, 0x2e, + 0xa2, 0x39, 0x89, 0x13, 0xe1, 0xaf, 0xd5, 0xb4, + 0x14, 0x4d, 0x73, 0x1e, 0x88, 0x36, 0x61, 0x1d, + 0x48, 0xa5, 0x57, 0x52, 0xe0, 0x6a, 0xf0, 0x45, + 0x62, 0x4c, 0x15, 0x75, 0x2a, 0xac, 0x48, 0x61, + 0xb4, 0x5e, 0x45, 0x59, 0x22, 0xa2, 0x1f, 0x32, + 0xa8, 0x45, 0xe1, 0xaf, 0xd5, 0x9a, 0xaa, 0x0d, + 0x04, 0xe8, 0x12, 0x4e, 0x44, 0x6e, 0x44, 0xe8, + 0x27, 0x41, 0x3a, 0x09, 0xd0, 0x4e, 0x82, 0x74, + 0x13, 0xa0, 0x9d, 0x04, 0xe8, 0x27, 0x41, 0x8e, + 0x09, 0xd0, 0x4e, 0x82, 0x74, 0x13, 0xa0, 0x9d, + 0x04, 0xe8, 0x27, 0x40, 0xe5, 0x97, 0xfc, 0x1e, + 0x7d, 0x25, 0x96, 0x59, 0x65, 0x96, 0x59, 0x65, + 0x96, 0x59, 0x65, 0x96, 0x59, 0x65, 0x96, 0x59, + 0x65, 0xfa, 0xb8, 0x7a, 0x10, 0x84, 0x21, 0x08, + 0x42, 0x09, 0x25, 0xa3, 0x81, 0x53, 0x8c, 0x84, + 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0xaf, 0xd5, + 0x9e, 0x9f, 0x45, 0xe8, 0x3a, 0x26, 0x26, 0x66, + 0x3b, 0xc1, 0x98, 0xa1, 0xab, 0xe8, 0x6b, 0xf5, + 0x67, 0xa7, 0x0a, 0x52, 0x94, 0xa5, 0x28, 0x99, + 0x68, 0x57, 0xa9, 0x43, 0x66, 0x59, 0x83, 0x51, + 0xba, 0xe9, 0x4a, 0x52, 0x94, 0xa5, 0x35, 0x5f, + 0x57, 0x68, 0xc9, 0x24, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x12, 0x9f, 0xc5, 0x28, 0x1d, 0x87, + 0x61, 0xd8, 0x76, 0x1d, 0x87, 0x61, 0xd8, 0x76, + 0x1d, 0x87, 0x61, 0xd8, 0x76, 0x1d, 0x87, 0x61, + 0xd8, 0x76, 0x1d, 0x87, 0x61, 0xd8, 0x76, 0x1d, + 0x82, 0x5e, 0x38, 0xbe, 0x9f, 0x2b, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x62, 0x75, 0x5e, 0x11, 0xc1, + 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, + 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, + 0x30, 0xfc, 0x5a, 0xb8, 0x25, 0x47, 0x19, 0x44, + 0x64, 0x64, 0x72, 0x91, 0x91, 0x89, 0x1e, 0x0e, + 0xe1, 0xa6, 0x9c, 0x23, 0x26, 0x08, 0xc7, 0xd0, + 0x46, 0x46, 0x46, 0x4c, 0x52, 0x3e, 0x0b, 0x83, + 0xd0, 0x84, 0x3b, 0xc8, 0xc8, 0x46, 0x42, 0x32, + 0x09, 0x57, 0x0d, 0xac, 0x84, 0x63, 0x5d, 0x05, + 0x4e, 0x31, 0xa2, 0x11, 0x90, 0x70, 0xe2, 0x21, + 0x38, 0x9a, 0xc9, 0x08, 0x42, 0x10, 0x84, 0x15, + 0x11, 0x91, 0x91, 0x8e, 0x1c, 0x44, 0x64, 0x64, + 0x21, 0x08, 0x42, 0x10, 0x9e, 0x2d, 0x5c, 0x16, + 0x8c, 0x9c, 0xce, 0x82, 0xc6, 0x87, 0xa3, 0x1b, + 0xcc, 0x2e, 0x5d, 0x35, 0x0e, 0x45, 0x44, 0xed, + 0x62, 0x79, 0x13, 0xa8, 0xe6, 0xcb, 0xa1, 0x84, + 0x99, 0x75, 0x62, 0xe4, 0x75, 0x1e, 0x53, 0xf0, + 0x3d, 0x38, 0x2d, 0x46, 0x9d, 0x34, 0xc0, 0xe5, + 0x4b, 0x94, 0x68, 0x9c, 0x2e, 0x60, 0x9d, 0x8b, + 0x81, 0x52, 0xd0, 0xb2, 0x0d, 0xc0, 0xf9, 0x8b, + 0x91, 0x6a, 0x74, 0x6f, 0x30, 0x7c, 0x90, 0xf4, + 0x63, 0x71, 0xbf, 0x0a, 0xde, 0x4a, 0x52, 0x94, + 0xa5, 0x28, 0xa4, 0x39, 0xd1, 0x65, 0x0d, 0xe1, + 0x9c, 0xcc, 0x96, 0x4b, 0x87, 0x4a, 0x52, 0x94, + 0xa5, 0x29, 0x7c, 0x58, 0xb2, 0x89, 0xc1, 0xb3, + 0xd4, 0xa9, 0x29, 0x45, 0x0d, 0xd1, 0xb3, 0xc5, + 0x1b, 0xba, 0x8d, 0xd1, 0x46, 0x85, 0x6a, 0x28, + 0x28, 0x50, 0x99, 0x14, 0x56, 0x94, 0xa1, 0xb3, + 0xd4, 0xa2, 0xcb, 0x9c, 0x1e, 0x57, 0x1a, 0x13, + 0x6b, 0x42, 0x8a, 0x2b, 0xd0, 0xad, 0x4a, 0xd0, + 0x4e, 0x70, 0xad, 0x0a, 0xf4, 0x16, 0x0e, 0x95, + 0x69, 0x59, 0x52, 0x15, 0x94, 0x56, 0xa3, 0x6d, + 0xeb, 0xc1, 0x31, 0x78, 0x60, 0xca, 0x52, 0x94, + 0xa5, 0x29, 0x4a, 0xe0, 0xa3, 0x55, 0x32, 0x79, + 0x1a, 0x49, 0x4a, 0x52, 0x94, 0xa5, 0x28, 0xb2, + 0xe7, 0x89, 0xa4, 0xf5, 0x20, 0x82, 0x08, 0x20, + 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, + 0x20, 0x82, 0x08, 0x20, 0x48, 0xb4, 0xe2, 0xd1, + 0xea, 0x6d, 0x1b, 0x46, 0xd1, 0xb4, 0x6d, 0x1b, + 0x46, 0xd1, 0xb4, 0x6d, 0x1b, 0x46, 0xd1, 0xb4, + 0x6d, 0x1b, 0x46, 0xd1, 0xb4, 0x6d, 0x1b, 0x46, + 0xd1, 0xb4, 0x6d, 0x71, 0x68, 0xf5, 0xf2, 0xd5, + 0x55, 0x55, 0x55, 0x55, 0x52, 0x45, 0xa7, 0xf3, + 0x52, 0x3a, 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, + 0x14, 0x51, 0x45, 0x14, 0x51, 0x45, 0x14, 0x51, + 0x45, 0x14, 0x57, 0x0f, 0xd5, 0xf5, 0x78, 0x15, + 0x2a, 0xc6, 0xa1, 0x18, 0xd3, 0x4e, 0x70, 0x49, + 0x2b, 0x63, 0x82, 0x31, 0x26, 0xc8, 0xc8, 0x24, + 0xd8, 0xd1, 0x19, 0x1f, 0x81, 0x7a, 0xbe, 0xa3, + 0x06, 0x0c, 0x70, 0x4c, 0x25, 0xc3, 0x9b, 0x34, + 0x23, 0x11, 0x44, 0xeb, 0x2e, 0xa3, 0x99, 0x70, + 0x8b, 0x8c, 0x15, 0xe4, 0xe6, 0x85, 0x9d, 0x4b, + 0x96, 0x8c, 0x18, 0x30, 0x63, 0xd5, 0xf1, 0x65, + 0x29, 0x44, 0xcb, 0x43, 0x2c, 0x96, 0x56, 0xa6, + 0x45, 0xe4, 0x27, 0x05, 0x1a, 0x1a, 0xa9, 0x42, + 0x82, 0x96, 0x78, 0x1b, 0x3e, 0x0a, 0x52, 0x8b, + 0x2e, 0x7a, 0xbb, 0x49, 0xea, 0x6d, 0x1b, 0x46, + 0xd1, 0xb4, 0x6d, 0x1b, 0x46, 0xd1, 0xb4, 0x6d, + 0x1b, 0x46, 0xd1, 0xb4, 0x6d, 0x1b, 0x46, 0xd1, + 0xb4, 0x6d, 0x1b, 0x46, 0xd1, 0xb4, 0x6d, 0x09, + 0x25, 0xa7, 0xff, 0x00, 0x03, 0xbf, 0xff, 0xc4, + 0x00, 0x2e, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, + 0x05, 0x03, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x21, 0x61, + 0x31, 0x91, 0xe1, 0xf0, 0x41, 0x51, 0x71, 0xa1, + 0xd1, 0x81, 0xc1, 0xf1, 0x10, 0x20, 0x30, 0x50, + 0xb1, 0x40, 0x80, 0x60, 0x70, 0xa0, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, 0x3f, 0x10, + 0xff, 0x00, 0xe9, 0x31, 0xf9, 0xd7, 0xfe, 0x35, + 0x7f, 0xe3, 0x57, 0xf8, 0x92, 0x9c, 0x09, 0x03, + 0x8c, 0xbf, 0xb0, 0x59, 0x66, 0x8b, 0x2c, 0xd1, + 0x65, 0x9a, 0x2c, 0xb3, 0x45, 0x96, 0x68, 0xb2, + 0xcd, 0x16, 0x59, 0xa2, 0xcb, 0x34, 0x59, 0x66, + 0x8b, 0x2c, 0xd1, 0x65, 0x9a, 0x2c, 0xb3, 0x45, + 0x96, 0x68, 0xb2, 0xcd, 0x16, 0x59, 0xa2, 0xcb, + 0x34, 0x59, 0x66, 0x8b, 0x2c, 0xd1, 0x65, 0x9a, + 0x36, 0x9a, 0x31, 0x2d, 0x6f, 0x9f, 0xed, 0xd8, + 0x91, 0x29, 0x61, 0xd7, 0x4f, 0xf3, 0x3c, 0x2e, + 0x53, 0x27, 0x13, 0x0c, 0x57, 0x41, 0xb8, 0x11, + 0x64, 0x94, 0xe6, 0xce, 0x8e, 0x5a, 0x9d, 0x1c, + 0xb5, 0x3a, 0x39, 0x6a, 0x74, 0x72, 0xd4, 0xe8, + 0xe5, 0xa9, 0xd1, 0xcb, 0x53, 0xa3, 0x96, 0xa7, + 0x47, 0x2d, 0x4e, 0x8e, 0x5a, 0x9d, 0x1c, 0xb5, + 0x3a, 0x39, 0x6a, 0x74, 0x72, 0xd4, 0xe8, 0xe5, + 0xa9, 0xd1, 0xcb, 0x53, 0xa3, 0x96, 0xa7, 0x47, + 0x2d, 0x4e, 0x8e, 0x5a, 0x9d, 0x1c, 0xb5, 0x3a, + 0x39, 0x6a, 0x74, 0x72, 0xd4, 0x49, 0xd0, 0x9a, + 0x12, 0x3e, 0x96, 0x0e, 0x97, 0xc8, 0x97, 0xcb, + 0x42, 0x5f, 0x2d, 0x09, 0x7c, 0xb4, 0x25, 0xf2, + 0xd0, 0x97, 0xcb, 0x42, 0x5f, 0x2d, 0x09, 0x7c, + 0xb4, 0x25, 0xf2, 0xd0, 0x97, 0xcb, 0x42, 0x5f, + 0x2d, 0x09, 0x7c, 0xb4, 0x25, 0xf2, 0xd0, 0x97, + 0xcb, 0x42, 0x5f, 0x2d, 0x09, 0x7c, 0xb4, 0x25, + 0xf2, 0xd0, 0x97, 0xcb, 0x42, 0x5f, 0x2d, 0x09, + 0x7c, 0xb4, 0x25, 0xf2, 0xd0, 0x97, 0xcb, 0x42, + 0x19, 0x4b, 0xee, 0xc5, 0xea, 0xfd, 0xbf, 0x02, + 0xd9, 0x84, 0xaa, 0x31, 0x3b, 0x07, 0x03, 0x09, + 0x68, 0x82, 0xa9, 0x13, 0xc1, 0x3e, 0x42, 0xc5, + 0x38, 0xe1, 0xa5, 0xcd, 0xae, 0x18, 0x0c, 0xbb, + 0x3a, 0x1e, 0x69, 0xf0, 0x31, 0xce, 0x5c, 0xfb, + 0x4d, 0x69, 0x18, 0x2c, 0xd8, 0xd6, 0x36, 0xd4, + 0x50, 0xd2, 0x53, 0xc4, 0xe1, 0xcb, 0x93, 0x31, + 0xfc, 0x0b, 0x5e, 0xde, 0xe7, 0x60, 0xff, 0x00, + 0x9f, 0x80, 0x04, 0x0a, 0xa2, 0x08, 0x8c, 0xdc, + 0x40, 0x9c, 0xa0, 0xa8, 0x28, 0xd0, 0x9d, 0x48, + 0x15, 0x14, 0x12, 0xd2, 0x95, 0x04, 0xf5, 0x29, + 0x50, 0x8d, 0xd1, 0x51, 0xb2, 0x70, 0xfe, 0xf0, + 0x12, 0x13, 0xd0, 0x78, 0x0f, 0x65, 0xf3, 0x7f, + 0x51, 0x12, 0x0a, 0xdf, 0x41, 0xe1, 0x15, 0x5f, + 0x70, 0x24, 0x88, 0xbd, 0xba, 0x8b, 0x08, 0xa8, + 0xd1, 0x24, 0xe3, 0x91, 0x1d, 0xa6, 0x65, 0x4f, + 0xd4, 0xc7, 0x72, 0x28, 0x94, 0xa7, 0x9d, 0xbe, + 0xd0, 0x63, 0x24, 0xc5, 0x7d, 0xd8, 0xbd, 0x5f, + 0xb7, 0xe0, 0x67, 0x12, 0x74, 0x9e, 0xa4, 0xd9, + 0x87, 0x02, 0x50, 0x9d, 0x04, 0xb2, 0x68, 0x25, + 0x83, 0x8e, 0x08, 0x84, 0x0d, 0x0d, 0x4b, 0xe6, + 0xa5, 0x43, 0xdf, 0xb9, 0xcc, 0x04, 0x65, 0x51, + 0xfd, 0x15, 0x15, 0x4c, 0x55, 0xd1, 0xbf, 0x6a, + 0x7a, 0x0a, 0x48, 0xdc, 0x60, 0xdc, 0xb8, 0xf4, + 0xe2, 0x8a, 0x55, 0x51, 0x08, 0x91, 0x25, 0xf8, + 0x3b, 0x5f, 0x73, 0xb0, 0x7f, 0xcf, 0xc1, 0xfe, + 0xc4, 0xc7, 0xf4, 0x49, 0x45, 0xe3, 0x2f, 0x03, + 0x80, 0xab, 0xa6, 0x0b, 0x06, 0x33, 0x0a, 0x97, + 0xee, 0x3a, 0x46, 0x08, 0x78, 0x78, 0x69, 0x6a, + 0x40, 0xac, 0x2d, 0xbf, 0xe8, 0x86, 0x1c, 0x0e, + 0x7d, 0x30, 0xfe, 0x8e, 0x6e, 0x5f, 0xdf, 0xfb, + 0x4a, 0xf4, 0x0f, 0x01, 0xd7, 0xae, 0xff, 0x00, + 0xa4, 0xa2, 0x50, 0x8c, 0xe8, 0x28, 0xb8, 0x10, + 0x8a, 0xaa, 0x88, 0x13, 0xac, 0xf1, 0x47, 0xeb, + 0x04, 0x33, 0xb8, 0x53, 0xd8, 0x79, 0xe1, 0x53, + 0x74, 0x99, 0x17, 0x48, 0xe2, 0x10, 0xc5, 0xb4, + 0xda, 0xad, 0xf1, 0x95, 0xc0, 0x79, 0x71, 0xc6, + 0x1c, 0x12, 0xcd, 0xb5, 0xe8, 0x22, 0x86, 0x29, + 0x89, 0x8c, 0xb1, 0x85, 0x03, 0x87, 0x49, 0x2e, + 0xc7, 0x4d, 0xd3, 0x64, 0x3a, 0x91, 0x65, 0x6a, + 0x89, 0xbb, 0x16, 0x09, 0xc1, 0x28, 0x94, 0x4a, + 0xfb, 0xb1, 0x7a, 0xbf, 0x6f, 0xf3, 0xf6, 0xbe, + 0xe3, 0x1e, 0x9c, 0x50, 0xcd, 0xde, 0x22, 0xfb, + 0xff, 0x00, 0x68, 0x47, 0x47, 0x89, 0x4d, 0x88, + 0x94, 0x7a, 0x18, 0x0e, 0x18, 0xe2, 0x8b, 0x02, + 0x46, 0xd3, 0x71, 0x86, 0x20, 0xd2, 0xbb, 0xa2, + 0x2a, 0x08, 0xea, 0x76, 0xb7, 0xe0, 0xfe, 0xb3, + 0x3f, 0x1c, 0x07, 0x80, 0xcd, 0x77, 0xcd, 0xfd, + 0x74, 0xa8, 0xf8, 0x28, 0x1e, 0x37, 0xc5, 0xc1, + 0xe0, 0x50, 0x51, 0x4c, 0x17, 0x01, 0x32, 0xfa, + 0x8a, 0x78, 0x9a, 0x58, 0x4f, 0x0e, 0x83, 0x6a, + 0xfc, 0x5c, 0x89, 0x4e, 0xaa, 0x12, 0xe8, 0x92, + 0x39, 0x45, 0x09, 0xcd, 0x0c, 0x68, 0xa1, 0x4e, + 0x31, 0xc4, 0x4a, 0x6c, 0xb8, 0x23, 0xe4, 0x82, + 0x54, 0x49, 0x72, 0xa0, 0xc4, 0xd0, 0xa7, 0x18, + 0xe3, 0xd4, 0x6d, 0x77, 0x4a, 0xaa, 0x23, 0x80, + 0x93, 0x14, 0x54, 0x51, 0xe8, 0x24, 0xb8, 0x12, + 0x73, 0x3c, 0x47, 0x1b, 0x52, 0xa1, 0x46, 0x2e, + 0xef, 0xeb, 0xbb, 0x56, 0x23, 0xfb, 0xb1, 0x7a, + 0xbf, 0x6f, 0xb5, 0x89, 0x24, 0xa1, 0x21, 0x28, + 0xa3, 0x8a, 0x54, 0xea, 0x50, 0x65, 0xef, 0x21, + 0xcc, 0x43, 0x49, 0xf4, 0x23, 0x87, 0xc3, 0x1a, + 0xe3, 0xcb, 0x21, 0x3e, 0x25, 0xe0, 0xf5, 0xe5, + 0x38, 0x15, 0x1d, 0x55, 0xbb, 0x2d, 0xf2, 0x10, + 0xc4, 0xb5, 0x2e, 0xea, 0xd6, 0x39, 0x0c, 0x85, + 0x5c, 0xc5, 0x1c, 0x54, 0x4f, 0xf6, 0x7d, 0x19, + 0x88, 0xe3, 0x49, 0xf6, 0x14, 0x34, 0xa5, 0x13, + 0xce, 0xae, 0x39, 0x8a, 0x29, 0x34, 0xe2, 0x66, + 0xee, 0x39, 0xf5, 0x21, 0x92, 0x9e, 0x27, 0x3c, + 0x16, 0x1d, 0xdf, 0xdd, 0xda, 0xfb, 0xfd, 0x1f, + 0xcc, 0x8c, 0xdf, 0x6f, 0xc9, 0xbe, 0xdf, 0x93, + 0x7d, 0xbf, 0x26, 0xfb, 0x7e, 0x4d, 0xf6, 0xfc, + 0x9b, 0xed, 0xf9, 0x37, 0xdb, 0xf2, 0x6f, 0xb7, + 0xe4, 0xdf, 0x6f, 0xc9, 0xbe, 0xdf, 0x93, 0x7d, + 0xbf, 0x26, 0xfb, 0x7e, 0x4d, 0xf6, 0xfc, 0x9b, + 0xed, 0xf9, 0x37, 0xdb, 0xf2, 0x6f, 0xb7, 0xe4, + 0xdf, 0x6f, 0xc9, 0xbe, 0xdf, 0x93, 0x7d, 0xbf, + 0x26, 0xfb, 0x7e, 0x46, 0x32, 0xbf, 0xb7, 0xfd, + 0xfa, 0xe1, 0x5a, 0xf3, 0x47, 0xca, 0x2f, 0x07, + 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, + 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, + 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, + 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, + 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, + 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, + 0xca, 0x2f, 0x07, 0xca, 0x2f, 0x07, 0xca, 0x2f, + 0x07, 0xca, 0x2f, 0x03, 0x18, 0x65, 0xf3, 0x7f, + 0x76, 0x2f, 0x57, 0xed, 0xf6, 0xbc, 0x3a, 0xa3, + 0x4e, 0xd2, 0x2a, 0x94, 0x3e, 0x5c, 0x3a, 0x8d, + 0x39, 0x26, 0x6f, 0x1c, 0x5a, 0xe1, 0x03, 0x21, + 0x4a, 0xa7, 0xfe, 0xb8, 0xec, 0x21, 0x66, 0xe1, + 0xb4, 0x81, 0x2b, 0x57, 0xa8, 0x39, 0x9e, 0xb3, + 0xb8, 0x11, 0x46, 0xb2, 0xd2, 0x63, 0x72, 0xa7, + 0xb9, 0x09, 0xd3, 0xa1, 0xab, 0x15, 0xa6, 0x13, + 0x8e, 0x1c, 0x70, 0xfe, 0x50, 0x4a, 0x25, 0x47, + 0x3c, 0x22, 0xd0, 0x23, 0x54, 0xe4, 0x73, 0x4f, + 0xc9, 0xc4, 0x22, 0x39, 0x2f, 0x22, 0xbc, 0x86, + 0x49, 0xb9, 0x2e, 0x18, 0x28, 0x15, 0xe5, 0x39, + 0x63, 0x1e, 0xbf, 0x6f, 0x6b, 0xef, 0xfb, 0x6c, + 0x5e, 0xaf, 0xdb, 0xed, 0x69, 0x24, 0x3c, 0x0c, + 0x0c, 0x5d, 0x14, 0x0a, 0x89, 0x36, 0xb9, 0xa4, + 0x36, 0xce, 0x94, 0xf3, 0xe2, 0x35, 0x0e, 0x8d, + 0xae, 0x31, 0x53, 0x83, 0x2e, 0x8a, 0xe6, 0x27, + 0x1b, 0x42, 0x9c, 0x69, 0x8f, 0x5e, 0x64, 0x51, + 0x49, 0x5b, 0xeb, 0x2d, 0x15, 0x3c, 0xf8, 0x94, + 0xd0, 0xc2, 0x72, 0x94, 0x2a, 0x3e, 0x7d, 0x45, + 0x70, 0xa6, 0xaf, 0x5f, 0xbb, 0xb5, 0xf7, 0xfd, + 0xb6, 0x2f, 0x57, 0xed, 0xf6, 0xb9, 0xb8, 0x42, + 0x3d, 0x50, 0x95, 0x3a, 0x5a, 0xab, 0xd5, 0x2c, + 0x7d, 0x58, 0xf8, 0xda, 0xae, 0xab, 0xd6, 0xb8, + 0xab, 0x92, 0xd7, 0x29, 0xc1, 0xfc, 0x7a, 0x95, + 0xa4, 0x7e, 0xb5, 0xe9, 0x38, 0xfa, 0x12, 0xe9, + 0x1e, 0xf1, 0xb0, 0xb7, 0x59, 0x96, 0x0b, 0x9c, + 0xc0, 0x92, 0x35, 0x46, 0x92, 0x9e, 0x18, 0xaa, + 0x88, 0x35, 0x51, 0x86, 0x26, 0x8e, 0x26, 0x1f, + 0x3a, 0x09, 0x24, 0x94, 0x37, 0x5e, 0x94, 0x21, + 0x6b, 0x2d, 0x96, 0x3c, 0xa5, 0x27, 0xfd, 0x43, + 0x8e, 0x60, 0xb2, 0x81, 0x3c, 0xad, 0x95, 0x13, + 0x78, 0x3b, 0x48, 0xa9, 0xb6, 0x98, 0xa6, 0x0d, + 0x7f, 0x63, 0xed, 0xed, 0x7d, 0xff, 0x00, 0xd4, + 0xc2, 0x12, 0x4b, 0x8c, 0x8b, 0x8c, 0x86, 0xcd, + 0x0d, 0x47, 0xfa, 0x71, 0x7a, 0xbf, 0x6f, 0xb5, + 0x52, 0xd1, 0x06, 0x53, 0xc6, 0x25, 0x31, 0x42, + 0xab, 0x7a, 0x91, 0x06, 0x37, 0x26, 0x98, 0x69, + 0x8e, 0x4d, 0xa8, 0x24, 0xf1, 0x86, 0xd1, 0x98, + 0x81, 0x79, 0xac, 0xd3, 0x94, 0xa7, 0xd8, 0x43, + 0x2d, 0x03, 0x42, 0xc1, 0x7b, 0xfb, 0x8e, 0x4e, + 0x36, 0x28, 0x9c, 0xc2, 0xe4, 0xbd, 0xdf, 0x16, + 0x23, 0xda, 0x6b, 0xe8, 0x49, 0x3c, 0x73, 0x81, + 0x18, 0x21, 0xa4, 0xec, 0x37, 0x18, 0xf9, 0xa8, + 0x3f, 0x60, 0x86, 0x8a, 0xaf, 0x06, 0xd2, 0xe0, + 0x4c, 0x49, 0x65, 0x29, 0xe7, 0x38, 0xbe, 0x98, + 0xb1, 0x59, 0xf3, 0xcd, 0xf3, 0x7c, 0x5f, 0xdb, + 0xda, 0xfb, 0xff, 0x00, 0xa9, 0x31, 0xf4, 0xf7, + 0x13, 0x19, 0x45, 0x0a, 0x70, 0xdb, 0xf9, 0xd2, + 0xa2, 0xa6, 0x95, 0x48, 0x9b, 0xcf, 0x2a, 0xd2, + 0xd8, 0xd4, 0x4c, 0xaf, 0x77, 0xfe, 0x9c, 0x5e, + 0xaf, 0xdb, 0xed, 0x4b, 0x08, 0x7d, 0x54, 0x8f, + 0x7c, 0x4b, 0x0e, 0x94, 0x69, 0x93, 0x8d, 0x4a, + 0x79, 0x21, 0x11, 0x09, 0xb5, 0x85, 0x87, 0x0d, + 0x24, 0xdf, 0x24, 0x27, 0x80, 0xd5, 0xd4, 0x89, + 0x49, 0xa4, 0x0f, 0x1a, 0x21, 0xbc, 0x14, 0xec, + 0x92, 0x1e, 0x34, 0x93, 0x78, 0xc2, 0x1b, 0x1a, + 0x65, 0x54, 0x53, 0x6a, 0x10, 0xdc, 0xe1, 0xc7, + 0x9f, 0x52, 0x52, 0x11, 0x35, 0x10, 0xc2, 0x5f, + 0x1c, 0x16, 0x2f, 0x16, 0x48, 0x24, 0x74, 0x28, + 0xfb, 0x7b, 0x5f, 0x7f, 0xf5, 0x33, 0x85, 0xb4, + 0xe3, 0x0b, 0x4f, 0x93, 0x87, 0x3c, 0x97, 0x91, + 0xb5, 0x19, 0xe5, 0x59, 0x79, 0x14, 0x57, 0x09, + 0x28, 0xaf, 0xfa, 0x71, 0x7a, 0xbf, 0x6f, 0xf3, + 0xf6, 0xbe, 0xff, 0x00, 0xb6, 0xc5, 0xea, 0xfd, + 0xbf, 0xcf, 0xda, 0xfb, 0xfe, 0xdb, 0x17, 0xab, + 0xf6, 0xff, 0x00, 0x3f, 0x6b, 0xef, 0xfb, 0x68, + 0x1f, 0x4e, 0x5f, 0xb1, 0x68, 0x5a, 0x16, 0x85, + 0xa1, 0x68, 0x5a, 0x16, 0x85, 0xa1, 0x68, 0x5a, + 0x16, 0x85, 0xa1, 0x68, 0x5a, 0x16, 0x85, 0xa1, + 0x68, 0x5a, 0x16, 0x85, 0xa1, 0x68, 0x5a, 0x0e, + 0xb9, 0x92, 0x5e, 0xff, 0x00, 0xf0, 0x0b, 0x53, + 0xe1, 0x2e, 0xe5, 0xd1, 0x70, 0x5c, 0x17, 0x05, + 0xc1, 0x70, 0x5c, 0x17, 0x05, 0xc1, 0x70, 0x5c, + 0x17, 0x05, 0xc1, 0x70, 0x5c, 0x17, 0x05, 0xc1, + 0x70, 0x5c, 0x17, 0x05, 0xc1, 0x08, 0xe9, 0x4f, + 0xf6, 0xf9, 0xa3, 0xfa, 0xf1, 0x25, 0x9a, 0x77, + 0x10, 0xea, 0x09, 0xc5, 0x22, 0x96, 0x5d, 0x12, + 0x99, 0x14, 0x0a, 0x2d, 0xa9, 0xdb, 0x11, 0x5b, + 0x4b, 0x7d, 0xc4, 0x39, 0xc8, 0xd6, 0x23, 0xa9, + 0xa5, 0x71, 0x22, 0xd0, 0xe9, 0x4c, 0x58, 0x2f, + 0x13, 0xc9, 0x8a, 0x94, 0xe0, 0xaf, 0x1a, 0x9e, + 0x03, 0x51, 0x50, 0x89, 0x2e, 0x84, 0xb2, 0xf8, + 0xa5, 0xd9, 0x13, 0x8a, 0x66, 0x64, 0x25, 0x10, + 0xa7, 0x02, 0x8b, 0x80, 0x93, 0x8e, 0x64, 0xd4, + 0xa7, 0xeb, 0xc6, 0xdb, 0xfe, 0xdf, 0x34, 0x7f, + 0x5d, 0xe0, 0x41, 0xc9, 0xdc, 0x42, 0x59, 0x9e, + 0x11, 0x51, 0x50, 0xe2, 0x74, 0xc8, 0x49, 0x12, + 0xdc, 0x70, 0x78, 0xa1, 0x04, 0xa4, 0xa7, 0x0e, + 0x23, 0x24, 0x48, 0xd3, 0xc1, 0x28, 0xef, 0xc8, + 0x72, 0x90, 0x8b, 0x88, 0xdc, 0xd6, 0x58, 0xba, + 0xdb, 0xe6, 0x9f, 0xa9, 0x15, 0x3e, 0x2a, 0x3a, + 0x23, 0x86, 0xe2, 0x30, 0xe3, 0x31, 0x18, 0x09, + 0x8d, 0xa2, 0x6c, 0xe7, 0x41, 0x0a, 0xd5, 0x55, + 0x3e, 0xc8, 0x75, 0x29, 0x23, 0x7c, 0xc8, 0xc1, + 0x65, 0x8c, 0xfb, 0x0e, 0x6d, 0x91, 0x8f, 0x1a, + 0x27, 0x71, 0xc7, 0xe0, 0xfa, 0xf3, 0xf5, 0x7f, + 0xde, 0xd1, 0x62, 0xcb, 0xc5, 0xe2, 0xf1, 0x78, + 0xbc, 0x5e, 0x2f, 0x17, 0x8b, 0xc5, 0xe2, 0xf1, + 0x78, 0xbc, 0x5e, 0x2f, 0x17, 0x8b, 0xc5, 0xe2, + 0xf1, 0x78, 0xbd, 0xf5, 0x62, 0x98, 0xd5, 0x27, + 0x90, 0x9e, 0x42, 0x79, 0x09, 0xe4, 0x21, 0x53, + 0x82, 0x5c, 0x12, 0xa1, 0x3c, 0x84, 0xf2, 0x13, + 0xc8, 0x4f, 0x21, 0x3c, 0x84, 0xf2, 0x13, 0xc8, + 0x4f, 0x21, 0x3c, 0x84, 0xf2, 0x13, 0xc8, 0x4f, + 0x21, 0x3c, 0x84, 0xf2, 0x13, 0xc8, 0x55, 0xc0, + 0x48, 0x54, 0x25, 0xcf, 0x8f, 0xfb, 0xac, 0x49, + 0x34, 0xe5, 0xff, 0x00, 0x9b, 0xff, 0x00, 0xff, + 0x00, 0xef, 0x9b, 0xe7, 0x97, 0xed, 0x92, 0x76, + 0x71, 0x22, 0x2c, 0x22, 0x0a, 0xfe, 0x43, 0xa1, + 0x27, 0xcd, 0x71, 0x18, 0x9d, 0x0d, 0xb8, 0x1a, + 0xf6, 0x9c, 0x73, 0xe8, 0x23, 0x15, 0x12, 0xab, + 0xd0, 0x4d, 0x8e, 0x62, 0x58, 0xe2, 0x34, 0xd7, + 0x70, 0x9c, 0x3d, 0x04, 0xc6, 0xc0, 0x5d, 0x83, + 0x8c, 0xea, 0x4c, 0xee, 0x15, 0x48, 0x12, 0x21, + 0xb8, 0xa9, 0x57, 0x1c, 0xd4, 0x2e, 0x49, 0x37, + 0x2c, 0xba, 0x15, 0x75, 0xe2, 0x18, 0xb1, 0x09, + 0xc5, 0x31, 0x25, 0x2b, 0x70, 0x12, 0xa2, 0x5d, + 0x14, 0xd4, 0x8a, 0x73, 0xab, 0xe1, 0xee, 0x27, + 0x21, 0xd1, 0xc5, 0x07, 0xc5, 0x8a, 0x89, 0x44, + 0xa7, 0xc0, 0x40, 0xdd, 0x3f, 0x6c, 0xf0, 0xed, + 0xe2, 0xbe, 0x96, 0xd6, 0x43, 0xe6, 0x55, 0x59, + 0xe6, 0x1f, 0x1c, 0x15, 0x5f, 0xa8, 0xdd, 0xa9, + 0xe0, 0x8a, 0x61, 0xea, 0x42, 0x94, 0x26, 0x43, + 0x5d, 0xb2, 0x29, 0x96, 0xe6, 0x3d, 0x16, 0x23, + 0xaa, 0x2a, 0xdc, 0x89, 0x8d, 0xe5, 0x42, 0x23, + 0x6a, 0x74, 0x8a, 0x75, 0x48, 0x74, 0x37, 0x82, + 0xad, 0x86, 0xf4, 0x67, 0x6d, 0x34, 0xe5, 0xa7, + 0x51, 0x56, 0x54, 0x69, 0xc0, 0xf2, 0x64, 0x44, + 0x47, 0xb8, 0xc8, 0x97, 0x2a, 0x8a, 0x98, 0xdf, + 0xa0, 0xb9, 0xfa, 0x34, 0xd6, 0x85, 0x26, 0x4e, + 0x62, 0x27, 0x11, 0x2d, 0xf3, 0x82, 0xa8, 0x91, + 0x33, 0xc1, 0xbc, 0x26, 0xa8, 0x66, 0x45, 0x5b, + 0x9a, 0xe3, 0x02, 0x9e, 0x6e, 0x94, 0x3e, 0xa2, + 0x53, 0x69, 0xa5, 0x12, 0x32, 0xb7, 0xed, 0x94, + 0xf7, 0xe2, 0x63, 0x82, 0xe8, 0xbe, 0xc8, 0x97, + 0x74, 0xfa, 0x0d, 0x4c, 0xb6, 0xec, 0x5f, 0x64, + 0x5f, 0x64, 0x5f, 0x64, 0x5f, 0x64, 0x5f, 0x64, + 0x5f, 0x64, 0x5f, 0x64, 0x5f, 0x64, 0x5f, 0x64, + 0x5f, 0x64, 0x3c, 0xf9, 0x1d, 0x0b, 0xec, 0x8b, + 0xec, 0x8b, 0xec, 0x8b, 0xec, 0x8b, 0xec, 0x8b, + 0xec, 0x89, 0x78, 0xb2, 0x24, 0x71, 0x1c, 0x3f, + 0xe1, 0xd7, 0x42, 0x61, 0x33, 0x72, 0xc3, 0xbf, + 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, + 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, + 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, + 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, + 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, + 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, + 0x92, 0xc3, 0xbf, 0x92, 0xc3, 0xbf, 0x92, 0xc3, + 0xbf, 0x91, 0x21, 0xd5, 0x3b, 0x92, 0x05, 0x46, + 0xb1, 0x5f, 0xb6, 0xe0, 0x39, 0x3f, 0xe7, 0xe1, + 0xff, 0x00, 0x54, 0x87, 0x36, 0x21, 0x0e, 0xb3, + 0x80, 0xc5, 0xa6, 0x93, 0x2b, 0x11, 0x43, 0x8e, + 0x27, 0xa0, 0x90, 0x94, 0xa8, 0x35, 0xa1, 0x21, + 0xfe, 0x0f, 0xeb, 0x0f, 0xd3, 0xdd, 0x7e, 0xdb, + 0xb0, 0x7f, 0xc2, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x81, 0x02, 0xb8, 0xb9, 0xb1, 0x52, 0xc4, 0xd2, + 0x62, 0x52, 0x52, 0xae, 0x2f, 0xa6, 0x03, 0xe5, + 0x73, 0xf7, 0x21, 0xb6, 0x76, 0xf6, 0x17, 0x3a, + 0x9f, 0xb8, 0xcb, 0x77, 0x22, 0x04, 0x08, 0x10, + 0x20, 0x40, 0x80, 0xe9, 0xbf, 0x4f, 0x75, 0xfb, + 0x67, 0x35, 0x2c, 0x60, 0x6c, 0xd0, 0xf1, 0xfc, + 0x1f, 0xe8, 0x2c, 0xba, 0x21, 0xb6, 0x77, 0x51, + 0xa0, 0x6a, 0x91, 0x5e, 0x64, 0x24, 0x24, 0x96, + 0x02, 0x70, 0x2a, 0xaa, 0x89, 0x9e, 0x9c, 0x84, + 0x25, 0xc1, 0xfe, 0x0f, 0xfc, 0x22, 0xc4, 0x7e, + 0xdd, 0xbe, 0x28, 0xb2, 0xf3, 0x2c, 0xbc, 0xcb, + 0x2f, 0x32, 0xcb, 0xcc, 0xb2, 0xf3, 0x2c, 0xbc, + 0xcb, 0x2f, 0x32, 0xcb, 0xcc, 0xb2, 0xf3, 0x2c, + 0xbc, 0xcb, 0x2f, 0x32, 0xcb, 0xcc, 0xb2, 0xf3, + 0x2c, 0xbc, 0xcb, 0x2f, 0x32, 0xcb, 0xcc, 0xb2, + 0xf3, 0x2c, 0xbc, 0xcb, 0x2f, 0x32, 0xcb, 0xcc, + 0x48, 0xd4, 0xc8, 0xc3, 0x0b, 0xfe, 0x52, 0xa3, + 0xb5, 0x2c, 0xdb, 0x66, 0xdb, 0x36, 0xd9, 0xb6, + 0xcd, 0xb6, 0x6d, 0xb3, 0x6d, 0x9b, 0x6c, 0xdb, + 0x66, 0xdb, 0x36, 0xd9, 0xb6, 0xcd, 0xb6, 0x6d, + 0xb3, 0x6d, 0x9b, 0x6c, 0xdb, 0x66, 0xdb, 0x36, + 0xd9, 0xb6, 0xcd, 0xb6, 0x43, 0x28, 0x7f, 0x46, + 0xe0, 0x51, 0x91, 0x4e, 0x6c, 0xb2, 0xb2, 0xd4, + 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, + 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, + 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, + 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, + 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, + 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, + 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, 0xd4, 0xb2, 0xb2, + 0xd4, 0x49, 0xd0, 0x9a, 0x12, 0x3e, 0x92, 0xa2, + 0xe5, 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, + 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, + 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, + 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, + 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, + 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, + 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, + 0x1d, 0xfc, 0x96, 0x1d, 0xfc, 0x96, 0x1d, 0xfc, + 0x89, 0x42, 0xa1, 0xbf, 0xb9, 0xcf, 0x67, 0x0f, + 0xa5, 0xcc, 0xd4, 0xc2, 0x58, 0xb1, 0x54, 0x41, + 0x62, 0x70, 0xc7, 0x02, 0x66, 0x0c, 0x32, 0x22, + 0xa2, 0xdf, 0x62, 0xac, 0x8d, 0x0d, 0x69, 0x27, + 0x07, 0x08, 0x42, 0x43, 0x22, 0x6d, 0x72, 0xd4, + 0x6e, 0x84, 0xb2, 0xab, 0x51, 0x54, 0x51, 0x5b, + 0x55, 0xe9, 0xf2, 0x35, 0xa5, 0xb1, 0x39, 0x46, + 0xe5, 0x4b, 0x28, 0x29, 0x22, 0x64, 0xc2, 0xc0, + 0x4f, 0x98, 0x6a, 0x09, 0x8f, 0xc7, 0x30, 0x22, + 0x94, 0x6b, 0xe9, 0x62, 0x5a, 0xfa, 0x76, 0x0f, + 0xf9, 0xf4, 0xa6, 0x6e, 0x11, 0x52, 0x69, 0x61, + 0x3b, 0x22, 0xaa, 0x24, 0x9a, 0x60, 0x55, 0x6a, + 0x54, 0xb0, 0x90, 0x94, 0x8c, 0x77, 0x18, 0x09, + 0xca, 0x0a, 0x84, 0x04, 0xe2, 0x46, 0x19, 0xca, + 0xd7, 0x08, 0x81, 0x31, 0x41, 0x50, 0x4f, 0x52, + 0x95, 0x0a, 0x89, 0x22, 0xe8, 0x87, 0x43, 0x52, + 0x57, 0x22, 0x84, 0x14, 0x28, 0x46, 0xa6, 0x28, + 0x20, 0x94, 0x83, 0x1b, 0x98, 0xdd, 0xa1, 0xfd, + 0x29, 0x09, 0xe8, 0x3c, 0x09, 0x5b, 0x77, 0xfd, + 0xfc, 0x1f, 0xe4, 0x93, 0x70, 0x90, 0x83, 0xaa, + 0x98, 0x30, 0x04, 0x09, 0x25, 0x1a, 0x13, 0x5b, + 0x63, 0x62, 0x11, 0xa6, 0x39, 0xd2, 0xd4, 0xfc, + 0x1f, 0xd3, 0xa7, 0x2b, 0xee, 0x72, 0x94, 0x73, + 0x4a, 0x84, 0xa3, 0xaa, 0x23, 0xd0, 0x1e, 0x91, + 0x03, 0x66, 0x8a, 0x34, 0x87, 0x24, 0x9e, 0x02, + 0x7c, 0x22, 0x82, 0xc2, 0x29, 0x3d, 0x07, 0x8f, + 0x42, 0x11, 0x72, 0xb7, 0x45, 0x80, 0x85, 0xf2, + 0xb0, 0xc3, 0x18, 0x15, 0x01, 0x3e, 0xae, 0x23, + 0x67, 0x25, 0xc3, 0xd8, 0x6c, 0xc1, 0x21, 0x89, + 0x40, 0xe8, 0xd2, 0x25, 0xcd, 0x55, 0x58, 0x1c, + 0x19, 0xa7, 0x0b, 0x11, 0x91, 0x48, 0xa9, 0xba, + 0x7b, 0x93, 0x44, 0xa6, 0x30, 0x8a, 0x7d, 0x53, + 0x14, 0xc9, 0x43, 0x29, 0x5f, 0x4e, 0xc1, 0xff, + 0x00, 0x08, 0x0b, 0x4e, 0x7c, 0xc6, 0x84, 0x58, + 0xb1, 0x36, 0x9e, 0x2a, 0x1c, 0x0e, 0xe4, 0xa4, + 0xf7, 0x21, 0x53, 0x8a, 0xa8, 0x9d, 0xba, 0x03, + 0x1b, 0xb8, 0x0a, 0x05, 0xb8, 0x3d, 0x18, 0xf4, + 0x3a, 0xff, 0x00, 0x0a, 0x08, 0xe5, 0xd2, 0xa3, + 0x80, 0x52, 0xe9, 0x82, 0xc1, 0x8c, 0xc3, 0x25, + 0xb1, 0x89, 0xbe, 0x28, 0x43, 0x19, 0xb1, 0x54, + 0x9f, 0x01, 0x4d, 0x7f, 0x48, 0x0a, 0xdd, 0x30, + 0xe1, 0x1c, 0xc7, 0x26, 0x62, 0x91, 0x58, 0x36, + 0xe1, 0xac, 0x7a, 0xf0, 0x14, 0xaa, 0x38, 0x69, + 0x55, 0x70, 0x24, 0x98, 0xe4, 0x9a, 0xa1, 0x01, + 0xa5, 0x7a, 0x07, 0x80, 0xaf, 0x5d, 0xff, 0x00, + 0x48, 0x10, 0x20, 0x40, 0x81, 0x02, 0x02, 0x3a, + 0xeb, 0x1f, 0xc2, 0x89, 0xb0, 0x1c, 0x86, 0x0b, + 0x75, 0xe6, 0x15, 0x21, 0xb7, 0x0d, 0x63, 0xd7, + 0x80, 0xdd, 0x75, 0x8a, 0xa0, 0x65, 0x50, 0xe5, + 0xc6, 0x44, 0xa3, 0x9d, 0x7f, 0x48, 0x10, 0x20, + 0x40, 0x81, 0x02, 0x04, 0x3e, 0xe9, 0x4c, 0xe3, + 0xf4, 0xce, 0x18, 0x65, 0x3a, 0x62, 0xd4, 0x2a, + 0x34, 0xd8, 0x2a, 0x63, 0xb8, 0x93, 0x35, 0x30, + 0x84, 0x25, 0x4c, 0xb1, 0x42, 0x4d, 0x85, 0x10, + 0xce, 0x58, 0x2b, 0xb1, 0x9d, 0x06, 0xbb, 0x1e, + 0x24, 0xca, 0xb8, 0x0f, 0x77, 0x2a, 0x34, 0xd8, + 0x3b, 0x54, 0x3c, 0x4e, 0x62, 0xe2, 0x1b, 0xa0, + 0x93, 0x4f, 0x8a, 0x7d, 0x4c, 0x0c, 0xbe, 0x99, + 0x71, 0x13, 0xfa, 0x31, 0xe9, 0xc8, 0x66, 0xed, + 0x15, 0x5f, 0x4a, 0x4c, 0x34, 0x0e, 0x25, 0xa0, + 0x6e, 0xa9, 0xdc, 0x25, 0x36, 0x9b, 0x06, 0xf6, + 0x9d, 0x1b, 0x9f, 0x53, 0x8b, 0xd6, 0x23, 0x86, + 0x04, 0x23, 0x40, 0x94, 0xfa, 0xa1, 0xc9, 0xcb, + 0x30, 0x1c, 0x1a, 0x17, 0x74, 0x43, 0xf1, 0x12, + 0x23, 0xd3, 0xa0, 0xda, 0xad, 0x52, 0x12, 0x64, + 0x51, 0xe2, 0x36, 0x4d, 0x40, 0xe7, 0x1b, 0xb0, + 0x72, 0x27, 0x15, 0x04, 0xa6, 0x5a, 0x99, 0x26, + 0x65, 0xfd, 0x2b, 0x33, 0xf1, 0xc0, 0x62, 0x23, + 0xe6, 0x9c, 0xff, 0x00, 0x07, 0xf4, 0x27, 0x74, + 0x58, 0x08, 0x92, 0x3a, 0x29, 0x59, 0x89, 0x62, + 0xba, 0x27, 0x3e, 0xa3, 0x91, 0x38, 0xa8, 0x36, + 0x4d, 0x50, 0x9a, 0x14, 0x2e, 0x43, 0x6e, 0xb3, + 0x3b, 0x44, 0x25, 0xf8, 0x3f, 0xa2, 0x78, 0xcf, + 0xee, 0x5d, 0x08, 0x5e, 0x79, 0xe8, 0x5e, 0x79, + 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, + 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, + 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, + 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, + 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, + 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, + 0xe8, 0x5e, 0x79, 0xe8, 0x5e, 0x79, 0xe8, 0x5e, + 0x79, 0xe8, 0x56, 0x52, 0xbc, 0xfe, 0xad, 0xe6, + 0x47, 0xbe, 0x46, 0xfb, 0x7e, 0x4d, 0xf6, 0xfc, + 0x9b, 0xed, 0xf9, 0x37, 0xdb, 0xf2, 0x6f, 0xb7, + 0xe4, 0xdf, 0x6f, 0xc9, 0xbe, 0xdf, 0x93, 0x7d, + 0xbf, 0x26, 0xfb, 0x7e, 0x4d, 0xf6, 0xfc, 0x9b, + 0xed, 0xf9, 0x37, 0xdb, 0xf2, 0x6f, 0xb7, 0xe4, + 0xdf, 0x6f, 0xc9, 0xbe, 0xdf, 0x93, 0x7d, 0xbf, + 0x26, 0xfb, 0x7e, 0x4d, 0xf6, 0xfc, 0x9b, 0xed, + 0xf9, 0x37, 0xdb, 0xf2, 0x34, 0x95, 0xfd, 0xbf, + 0xe8, 0x92, 0x4a, 0x17, 0xd1, 0x14, 0x48, 0x6e, + 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, + 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, + 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, + 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, + 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, 0x36, 0x6e, + 0x36, 0x54, 0x20, 0xff, 0x00, 0xb5, 0x26, 0x47, + 0x23, 0xa3, 0x96, 0xa7, 0x47, 0x2d, 0x4e, 0x8e, + 0x5a, 0x9d, 0x1c, 0xb5, 0x3a, 0x39, 0x6a, 0x74, + 0x72, 0xd4, 0xe8, 0xe5, 0xa9, 0xd1, 0xcb, 0x53, + 0xa3, 0x96, 0xa7, 0x47, 0x2d, 0x4e, 0x8e, 0x5a, + 0x9d, 0x1c, 0xb5, 0x3a, 0x39, 0x6a, 0x74, 0x72, + 0xd4, 0xe8, 0xe5, 0xa9, 0xd1, 0xcb, 0x53, 0xa3, + 0x96, 0xa7, 0x47, 0x2d, 0x4e, 0x8e, 0x5a, 0x9d, + 0x1c, 0xb5, 0x3a, 0x39, 0x6a, 0x31, 0x49, 0x86, + 0xf0, 0x6b, 0xf6, 0xf3, 0xb3, 0x78, 0x7d, 0x9d, + 0xf2, 0x12, 0x98, 0xc0, 0x64, 0x51, 0xca, 0x7c, + 0x4a, 0xc9, 0x4a, 0xa5, 0x13, 0x1a, 0x42, 0x40, + 0xea, 0x43, 0x9b, 0x6a, 0x46, 0x15, 0xa4, 0xd3, + 0x90, 0x9e, 0xe1, 0x50, 0xec, 0x8b, 0x01, 0x3e, + 0x63, 0x01, 0x41, 0x49, 0x13, 0x32, 0x58, 0x6e, + 0x04, 0x10, 0x3a, 0xae, 0x3e, 0xd6, 0x1c, 0x64, + 0xf1, 0x0d, 0x6a, 0x5a, 0xfb, 0x3c, 0x68, 0xd7, + 0xed, 0xe2, 0xfb, 0x20, 0xf3, 0x17, 0x31, 0x06, + 0x68, 0xdd, 0x02, 0x9b, 0x65, 0xb6, 0x9a, 0xfe, + 0xf0, 0x1b, 0x66, 0x50, 0x93, 0xb5, 0x85, 0x62, + 0x2b, 0x38, 0xe2, 0x24, 0xbe, 0x7c, 0x70, 0x10, + 0xf6, 0x90, 0x93, 0x40, 0xa7, 0xa3, 0xab, 0x75, + 0x62, 0x68, 0xf3, 0x75, 0x0d, 0x63, 0x75, 0x7c, + 0x38, 0xbb, 0x8e, 0x91, 0x2e, 0xe2, 0x1b, 0xd2, + 0xe1, 0x11, 0x72, 0x72, 0x39, 0x71, 0x6b, 0x39, + 0x1b, 0x35, 0x74, 0x49, 0xfd, 0x82, 0xa2, 0xfd, + 0xbb, 0x8b, 0x78, 0x3f, 0xb3, 0xaa, 0xa0, 0x5e, + 0x82, 0xdd, 0x60, 0xde, 0xdb, 0xe2, 0x2e, 0x6c, + 0x0a, 0xc0, 0x2c, 0x46, 0x85, 0x9d, 0x10, 0xd5, + 0xb7, 0xc6, 0x83, 0x89, 0x80, 0x48, 0x88, 0x24, + 0x63, 0x10, 0xdd, 0xbc, 0x61, 0xfa, 0xb1, 0x8d, + 0x19, 0xbc, 0x30, 0x23, 0x38, 0x05, 0x49, 0x2b, + 0x8b, 0xf7, 0x7c, 0x29, 0x3c, 0x12, 0x8d, 0xd9, + 0x37, 0x64, 0xdd, 0x93, 0x76, 0x4d, 0xd9, 0x37, + 0x64, 0xdd, 0x93, 0x76, 0x4d, 0xd9, 0x37, 0x64, + 0xdd, 0x93, 0x76, 0x4d, 0xd9, 0x37, 0x64, 0xdd, + 0x93, 0x76, 0x4d, 0xd9, 0x37, 0x64, 0xdd, 0x93, + 0x76, 0x4d, 0xd9, 0x17, 0x44, 0x1f, 0xfe, 0x07, + 0x7f, 0xff, 0xc4, 0x00, 0x2b, 0x10, 0x01, 0x01, + 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, 0x04, 0x03, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x11, + 0x00, 0x21, 0x31, 0x41, 0x51, 0xf0, 0x61, 0xc1, + 0xf1, 0x10, 0x71, 0xd1, 0x20, 0x81, 0x91, 0xa1, + 0x30, 0x40, 0xb1, 0xe1, 0x50, 0x60, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x3f, 0x10, + 0x77, 0x33, 0x54, 0x40, 0x00, 0x10, 0x40, 0x3f, + 0xfc, 0x66, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, + 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, + 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, + 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, + 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, + 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, + 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, + 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, + 0x3e, 0x7c, 0xf9, 0xcd, 0xcc, 0xdd, 0x10, 0x08, + 0x8c, 0x34, 0x5c, 0x53, 0xff, 0x00, 0x9b, 0x58, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3c, 0x4a, + 0x76, 0x30, 0x40, 0xc0, 0x1e, 0x1e, 0x11, 0x08, + 0x9e, 0xb9, 0x3e, 0x27, 0xfc, 0xc9, 0xf1, 0x3f, + 0xe6, 0x4f, 0x89, 0xff, 0x00, 0x32, 0x7c, 0x4f, + 0xf9, 0x93, 0xe2, 0x7f, 0xcc, 0x9f, 0x13, 0xfe, + 0x64, 0xf8, 0x9f, 0xf3, 0x27, 0xc4, 0xff, 0x00, + 0x99, 0x3e, 0x27, 0xfc, 0xc9, 0xf1, 0x3f, 0xe6, + 0x4f, 0x89, 0xff, 0x00, 0x32, 0x7c, 0x4f, 0xf9, + 0x93, 0xe2, 0x7f, 0xcc, 0x9f, 0x13, 0xfe, 0x64, + 0xf8, 0x9f, 0xf3, 0x05, 0xa4, 0xa2, 0xcd, 0x16, + 0x59, 0xcc, 0xdf, 0x39, 0xe7, 0xfe, 0xd9, 0xe7, + 0xfe, 0xd9, 0xe7, 0xfe, 0xd9, 0xe7, 0xfe, 0xd9, + 0xe7, 0xfe, 0xd9, 0xe7, 0xfe, 0xd8, 0x00, 0xa8, + 0x08, 0xc8, 0x3c, 0x29, 0xc9, 0x9e, 0x7f, 0xed, + 0x9e, 0x7f, 0xed, 0x9e, 0x7f, 0xed, 0x9e, 0x7f, + 0xed, 0x9e, 0x7f, 0xed, 0x9e, 0x7f, 0xed, 0x88, + 0xaf, 0x33, 0xa4, 0xd7, 0x63, 0xf7, 0xc7, 0x3f, + 0xf9, 0xa5, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x85, 0xf4, 0x71, 0xe2, 0x18, 0x44, 0x68, 0x30, + 0xc1, 0x18, 0x15, 0xe8, 0x2e, 0x30, 0xaa, 0x64, + 0x90, 0x81, 0x51, 0x4d, 0xa0, 0xee, 0xfe, 0xae, + 0x93, 0xe5, 0x68, 0x55, 0x40, 0x37, 0xca, 0xff, + 0x00, 0x8f, 0x8d, 0x25, 0x62, 0xa7, 0xdb, 0x8f, + 0x48, 0x34, 0x03, 0x14, 0x18, 0xe0, 0x5b, 0x2d, + 0x67, 0x98, 0xb4, 0x52, 0x0a, 0xa6, 0x6a, 0x10, + 0x6b, 0x88, 0x19, 0xaa, 0x41, 0x43, 0x64, 0x38, + 0x07, 0x8c, 0x8a, 0x2a, 0x5a, 0x40, 0x2f, 0x4c, + 0x2f, 0x07, 0xd5, 0x0e, 0xc2, 0x96, 0x64, 0x2e, + 0x80, 0x0a, 0x9d, 0x00, 0xa5, 0x80, 0xb9, 0xac, + 0xff, 0x00, 0x12, 0x5a, 0xb2, 0x08, 0x88, 0x09, + 0x45, 0xc7, 0x40, 0xa0, 0x80, 0x58, 0x94, 0x13, + 0x72, 0x0c, 0xcb, 0x8d, 0xf4, 0x78, 0x9a, 0xb1, + 0x79, 0x7c, 0x50, 0x8a, 0x88, 0x74, 0xf7, 0x1b, + 0x94, 0x77, 0xc4, 0x23, 0xd2, 0x23, 0xc3, 0x70, + 0x20, 0x18, 0x42, 0x88, 0xf0, 0x8e, 0x3f, 0xfe, + 0x70, 0xca, 0xfc, 0x5f, 0x67, 0x3c, 0x47, 0x6e, + 0x6c, 0x40, 0xe8, 0xcc, 0x64, 0x3a, 0x77, 0xd1, + 0xd7, 0x56, 0xb0, 0x97, 0xfb, 0xd2, 0x4d, 0x69, + 0xdb, 0x4e, 0x08, 0x14, 0x77, 0x42, 0x0a, 0x95, + 0x48, 0x12, 0x18, 0x52, 0xdb, 0x2e, 0x90, 0x2f, + 0xe4, 0xb1, 0x05, 0x08, 0x78, 0x1a, 0x91, 0x24, + 0xda, 0xd8, 0xde, 0xca, 0x13, 0x29, 0x01, 0x94, + 0x4d, 0x57, 0x8e, 0x11, 0xa2, 0x4a, 0x02, 0xb2, + 0x26, 0x07, 0x94, 0x38, 0x1b, 0x57, 0x21, 0x40, + 0x03, 0x20, 0xed, 0x20, 0x10, 0x56, 0x46, 0x22, + 0x76, 0x65, 0x02, 0xc3, 0x55, 0xc8, 0xdf, 0x0e, + 0x93, 0xab, 0x06, 0x30, 0xcd, 0xa0, 0xb8, 0x04, + 0x5b, 0xc6, 0x44, 0xd6, 0xf6, 0xa0, 0x1d, 0x16, + 0x5a, 0x8a, 0xf6, 0xe5, 0xd2, 0x8c, 0x51, 0x41, + 0x49, 0x22, 0xfe, 0xae, 0x2c, 0xc5, 0x2e, 0xa1, + 0xb4, 0xd2, 0x0e, 0x86, 0xac, 0x94, 0x21, 0xe5, + 0x61, 0x42, 0xe0, 0x70, 0x1a, 0x37, 0x0c, 0x25, + 0x31, 0x1b, 0x9e, 0x48, 0xbe, 0xb2, 0xe0, 0x21, + 0x18, 0x30, 0x13, 0xee, 0xcc, 0xca, 0x6a, 0xdb, + 0x6c, 0x15, 0xe3, 0xea, 0x84, 0xb4, 0xd1, 0x84, + 0x24, 0xbf, 0x10, 0xa9, 0xb8, 0xbb, 0xe7, 0x88, + 0xc7, 0xee, 0x53, 0x7f, 0x49, 0x88, 0xfe, 0x70, + 0xa5, 0x69, 0xa3, 0x47, 0x83, 0x47, 0x0c, 0xa6, + 0xcb, 0xd7, 0x06, 0x42, 0x54, 0x2a, 0x4b, 0x31, + 0x39, 0xa6, 0xfb, 0x8a, 0x76, 0xd6, 0xc9, 0xba, + 0xf4, 0x26, 0x0e, 0x24, 0xf4, 0x05, 0x1d, 0x24, + 0x9c, 0x03, 0xb4, 0xff, 0x00, 0xe7, 0xee, 0xb7, + 0xe4, 0xbb, 0x39, 0xe2, 0x3b, 0x71, 0xe7, 0x08, + 0x41, 0xce, 0xc4, 0x50, 0x08, 0x79, 0x38, 0xa1, + 0xc4, 0x44, 0x0d, 0xda, 0x2c, 0x0b, 0x49, 0x26, + 0xb2, 0x50, 0x80, 0xb4, 0xa1, 0x5a, 0x34, 0xfa, + 0x23, 0x95, 0x72, 0x36, 0x0e, 0x04, 0xe2, 0xca, + 0x80, 0x95, 0x02, 0x83, 0xac, 0xe9, 0xcc, 0xf6, + 0xee, 0x27, 0x43, 0x40, 0x40, 0x38, 0x32, 0xf8, + 0x41, 0xd8, 0x4d, 0xb1, 0x89, 0x20, 0x38, 0x00, + 0x53, 0x34, 0xd2, 0x49, 0x2b, 0x93, 0x80, 0x42, + 0xc8, 0x14, 0x3b, 0xc3, 0x2e, 0x76, 0xa4, 0xcc, + 0x0a, 0x08, 0x1d, 0x8d, 0x69, 0x9b, 0x2b, 0x5c, + 0x01, 0xd1, 0x1e, 0x58, 0x00, 0x73, 0x5d, 0xe1, + 0x13, 0x72, 0x47, 0x5c, 0x31, 0xa0, 0x05, 0xb2, + 0x66, 0xb0, 0x87, 0x97, 0x41, 0x0d, 0x00, 0x0a, + 0x43, 0x8f, 0xd7, 0xc6, 0xed, 0xb2, 0xf0, 0x72, + 0x39, 0xd0, 0xc5, 0x12, 0x44, 0x75, 0x78, 0xb9, + 0x85, 0x1f, 0x43, 0x81, 0xad, 0x8e, 0xd5, 0xc0, + 0x00, 0x88, 0x94, 0x4c, 0x0b, 0x56, 0x2a, 0xda, + 0x1b, 0xc8, 0x28, 0xf1, 0x94, 0xe1, 0x7e, 0xa8, + 0x6d, 0xdf, 0xa9, 0xaa, 0xd5, 0x82, 0x25, 0x95, + 0xa5, 0x14, 0x23, 0x2d, 0x56, 0x38, 0x6f, 0xd8, + 0x00, 0x85, 0xc2, 0x38, 0x20, 0x4a, 0x5b, 0x88, + 0x09, 0x18, 0xda, 0xad, 0x83, 0x0c, 0x2f, 0x77, + 0xcc, 0x90, 0x08, 0xe0, 0x00, 0x33, 0x67, 0xca, + 0x34, 0x53, 0x8e, 0x20, 0x03, 0x88, 0x07, 0x04, + 0xc3, 0x2c, 0x08, 0x02, 0x01, 0xf4, 0x3c, 0xa6, + 0x17, 0x5c, 0xae, 0x30, 0x6d, 0xc5, 0xa3, 0x68, + 0x91, 0xf6, 0x80, 0xbd, 0x14, 0xcf, 0x2e, 0xf6, + 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, + 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, + 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, + 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, + 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, + 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, + 0xcf, 0x2e, 0xf6, 0xcf, 0x2e, 0xf6, 0xc3, 0x46, + 0xff, 0x00, 0x63, 0x3e, 0xf1, 0x3f, 0xd6, 0x0a, + 0xa7, 0xd2, 0xa7, 0x74, 0x48, 0xf5, 0x99, 0x5c, + 0x24, 0x21, 0x51, 0x00, 0xee, 0xb8, 0xa0, 0x19, + 0xab, 0xff, 0x00, 0x01, 0xcb, 0xfd, 0x67, 0x97, + 0xf9, 0x67, 0x97, 0xf9, 0x67, 0x97, 0xf9, 0x67, + 0x97, 0xf9, 0x67, 0x97, 0xf9, 0x67, 0x97, 0xf9, + 0x67, 0x97, 0xf9, 0x67, 0x97, 0xf9, 0x67, 0x97, + 0xf9, 0x67, 0x97, 0xf9, 0x67, 0x97, 0xf9, 0x67, + 0x97, 0xf9, 0x67, 0x97, 0xf9, 0x67, 0x97, 0xf9, + 0x67, 0x97, 0xf9, 0x67, 0x97, 0xf9, 0x65, 0xec, + 0xd2, 0xf4, 0x3f, 0xbe, 0x0c, 0x00, 0x03, 0x41, + 0xc0, 0x04, 0x07, 0xa7, 0xfa, 0x14, 0x28, 0x50, + 0xa1, 0x42, 0x85, 0x0a, 0x14, 0x28, 0x50, 0xa1, + 0x42, 0x85, 0x00, 0x44, 0x28, 0x26, 0x07, 0x32, + 0xdb, 0x35, 0xc7, 0x1f, 0xae, 0x14, 0x28, 0x50, + 0xa1, 0x42, 0x0d, 0x44, 0x04, 0x68, 0x0e, 0x05, + 0xb5, 0xe7, 0xf4, 0xc2, 0x85, 0x0a, 0x12, 0x12, + 0xe7, 0xa8, 0x93, 0xf6, 0x56, 0xff, 0x00, 0x26, + 0x4b, 0xe5, 0xa4, 0x14, 0xec, 0x97, 0x0e, 0x5e, + 0x77, 0x59, 0x1d, 0xaf, 0xa1, 0x8e, 0x7d, 0x7b, + 0x1a, 0x6b, 0x1d, 0x2d, 0x61, 0x72, 0x24, 0x2f, + 0x65, 0x39, 0xc5, 0xad, 0x76, 0xff, 0x00, 0xaa, + 0x15, 0x9b, 0x0c, 0x5c, 0x23, 0x8e, 0x04, 0x3a, + 0x01, 0x18, 0xc0, 0x71, 0x48, 0x74, 0xb9, 0x12, + 0x39, 0x4e, 0x9d, 0xf7, 0xe8, 0x05, 0xc6, 0x50, + 0x3c, 0x85, 0x39, 0x6b, 0x07, 0x6c, 0xf1, 0x0f, + 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, + 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, + 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, + 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, + 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, + 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, + 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, 0x0f, 0x7c, 0xf1, + 0x0f, 0x7c, 0x2e, 0x20, 0x40, 0xff, 0x00, 0x68, + 0x34, 0xc5, 0x46, 0xf2, 0xd4, 0x25, 0xb7, 0xad, + 0x36, 0x7a, 0x7d, 0x17, 0x93, 0xe3, 0x6e, 0x71, + 0xd9, 0x5e, 0xc6, 0xff, 0x00, 0xd6, 0xad, 0x5a, + 0xb5, 0x6a, 0xd5, 0xab, 0x56, 0xad, 0x5a, 0xb5, + 0x6a, 0xd5, 0xab, 0x56, 0xad, 0x5a, 0xb5, 0x6a, + 0xdb, 0xd3, 0xc7, 0x72, 0xbb, 0x24, 0x45, 0xeb, + 0xac, 0x2c, 0xaa, 0x56, 0xb5, 0x62, 0x27, 0x73, + 0xdb, 0x02, 0x1d, 0x8e, 0x5a, 0xcf, 0xee, 0x5f, + 0xf0, 0x88, 0xf5, 0x9e, 0xd5, 0x18, 0x3f, 0x94, + 0xca, 0xad, 0x51, 0x44, 0xfc, 0xa6, 0x8c, 0x6a, + 0x15, 0xc7, 0xd6, 0x77, 0x23, 0x71, 0x3a, 0x00, + 0x68, 0x31, 0x39, 0x4b, 0xb2, 0xd4, 0x47, 0x4d, + 0x3d, 0x53, 0xb9, 0x32, 0xc9, 0x14, 0x9e, 0x04, + 0x4f, 0x11, 0xb9, 0x6e, 0xf9, 0xc0, 0x13, 0x8e, + 0x92, 0x57, 0xa1, 0x72, 0xad, 0x82, 0x8c, 0x07, + 0x81, 0x2b, 0xc6, 0xc9, 0x04, 0xd5, 0x8d, 0x42, + 0xde, 0xc2, 0x63, 0xb6, 0x54, 0x51, 0x11, 0xff, + 0x00, 0x03, 0x2d, 0x74, 0x03, 0xd5, 0x27, 0xfe, + 0x18, 0xf5, 0x76, 0x43, 0xda, 0x29, 0xff, 0x00, + 0x3f, 0xc0, 0xaa, 0xa8, 0xd9, 0x8b, 0x4b, 0x93, + 0x23, 0x94, 0xdd, 0xf3, 0x9a, 0x7b, 0x97, 0x95, + 0x74, 0x38, 0x21, 0xeb, 0xe7, 0x2a, 0x5b, 0x34, + 0x13, 0xcc, 0x48, 0x7e, 0xee, 0x02, 0x4e, 0x75, + 0xd3, 0x2e, 0x1c, 0x9c, 0xce, 0x3a, 0xe3, 0xf2, + 0x84, 0x8b, 0x25, 0x8e, 0x99, 0x6f, 0x4b, 0x72, + 0xe1, 0xb3, 0x5f, 0xbc, 0xc0, 0x87, 0xef, 0x9c, + 0x51, 0xe0, 0xc4, 0x40, 0x22, 0x75, 0x3a, 0x75, + 0xc1, 0x3d, 0xa0, 0x70, 0x79, 0x29, 0x5b, 0xd2, + 0x18, 0xee, 0x32, 0x98, 0x66, 0x28, 0x76, 0x23, + 0xa8, 0xfe, 0xb5, 0x55, 0x4b, 0xa2, 0xe0, 0xf4, + 0x52, 0x9f, 0xeb, 0x0f, 0x62, 0x09, 0xfb, 0x46, + 0x52, 0x9a, 0x4d, 0x78, 0x00, 0x3f, 0x60, 0x0f, + 0xdb, 0x3c, 0x2e, 0x78, 0x5c, 0xd3, 0x5c, 0x2b, + 0x28, 0x81, 0x6e, 0xee, 0x69, 0x77, 0x8c, 0x32, + 0xc0, 0xae, 0x41, 0x11, 0xea, 0x22, 0x23, 0xd9, + 0xcf, 0x0b, 0x9e, 0x17, 0x3c, 0x2e, 0x78, 0x5c, + 0x1a, 0x81, 0x6b, 0xeb, 0x86, 0x06, 0x99, 0xa4, + 0xa6, 0x5c, 0xbd, 0x17, 0x1d, 0xc2, 0xa3, 0x20, + 0x01, 0x55, 0x5d, 0x00, 0x75, 0xc4, 0xfb, 0xad, + 0xc7, 0xed, 0xe2, 0x4e, 0xb2, 0xcf, 0xb6, 0x49, + 0x88, 0xbe, 0x0f, 0xb9, 0x5f, 0xbb, 0x5f, 0x6c, + 0xf0, 0xb9, 0xe1, 0x72, 0x8b, 0xdf, 0x70, 0x94, + 0x95, 0xc7, 0xdf, 0x04, 0x38, 0xc2, 0xb6, 0xe6, + 0x97, 0x8f, 0x66, 0xb3, 0xc2, 0xe7, 0x85, 0xcf, + 0x0b, 0x9e, 0x17, 0x24, 0x82, 0x49, 0xe0, 0x34, + 0x7f, 0x9c, 0x07, 0x60, 0xff, 0x00, 0x32, 0x17, + 0xfb, 0x71, 0x9b, 0x54, 0x97, 0xd7, 0xfc, 0x95, + 0xfb, 0x09, 0xf6, 0x38, 0x70, 0x6a, 0xfd, 0xc2, + 0x30, 0x61, 0xb7, 0x66, 0x84, 0xc3, 0x90, 0xbf, + 0x70, 0xbd, 0xb2, 0xeb, 0xbd, 0x53, 0x5e, 0x80, + 0x4d, 0x25, 0xde, 0x2d, 0x31, 0xe3, 0x9b, 0x44, + 0x02, 0xde, 0x4f, 0x63, 0x81, 0x80, 0x70, 0xab, + 0x3c, 0x84, 0x1e, 0x91, 0x3f, 0xde, 0x19, 0x18, + 0x9f, 0x69, 0x5a, 0x00, 0x02, 0xd0, 0xa9, 0x0a, + 0x9a, 0x64, 0x2c, 0xc8, 0x8c, 0x29, 0x62, 0x37, + 0x00, 0x36, 0x61, 0xe6, 0x88, 0xe2, 0xad, 0x7f, + 0xc1, 0xe4, 0xfb, 0x71, 0x0f, 0xe4, 0x7f, 0xdf, + 0x3e, 0x47, 0x3e, 0x47, 0x3e, 0x47, 0x3e, 0x47, + 0x3e, 0x47, 0x3e, 0x47, 0x3e, 0x47, 0x1f, 0xe7, + 0x0f, 0xdd, 0x68, 0xfd, 0xca, 0x7e, 0xf8, 0x00, + 0x52, 0x15, 0x60, 0x7d, 0xb5, 0x4e, 0x04, 0x62, + 0x85, 0x3e, 0xd6, 0x0e, 0xfa, 0xd6, 0xb4, 0xf7, + 0xc1, 0xa3, 0x68, 0x7b, 0x39, 0xbb, 0x43, 0xba, + 0x8c, 0x3b, 0x18, 0xf0, 0x81, 0xee, 0xd0, 0xbc, + 0x25, 0xb0, 0x9c, 0xbb, 0x77, 0x8a, 0x11, 0xc6, + 0x86, 0xd0, 0x0d, 0x2e, 0x6b, 0xc2, 0xae, 0x9c, + 0xb0, 0x68, 0x56, 0xc4, 0x94, 0xeb, 0x5d, 0x86, + 0x98, 0xed, 0x9a, 0xe4, 0x80, 0xfa, 0x40, 0xf7, + 0x45, 0xfb, 0xe2, 0xf3, 0x1a, 0xdd, 0xa3, 0x57, + 0xf9, 0xcf, 0x91, 0xcf, 0x91, 0xcf, 0x91, 0xcf, + 0x91, 0xcf, 0x91, 0xcf, 0x91, 0xc1, 0x86, 0xbd, + 0x47, 0xdb, 0x1b, 0x78, 0x1a, 0x62, 0xf9, 0x13, + 0x1a, 0xe9, 0x9f, 0xaf, 0xfe, 0x33, 0xd7, 0xff, + 0x00, 0x18, 0x74, 0x5d, 0x0c, 0x48, 0xa1, 0x23, + 0xba, 0xde, 0x23, 0xb5, 0x48, 0x05, 0x28, 0x52, + 0xa7, 0xd8, 0x13, 0x65, 0xae, 0x6e, 0xde, 0x40, + 0x94, 0x00, 0x68, 0xab, 0xff, 0x00, 0x01, 0x87, + 0x61, 0x65, 0x1b, 0x41, 0x3e, 0xc5, 0xc4, 0xd2, + 0xea, 0x39, 0xcc, 0x44, 0x94, 0xfd, 0xe9, 0xc3, + 0x8f, 0xea, 0x06, 0x0e, 0xc7, 0x1f, 0x22, 0x08, + 0xd5, 0xc4, 0x6c, 0x4c, 0xd2, 0xa3, 0x07, 0x56, + 0x0c, 0xf5, 0x4c, 0x91, 0x03, 0xe9, 0xd4, 0x8e, + 0x85, 0xac, 0x21, 0xb3, 0x07, 0xae, 0xe3, 0xb9, + 0x8f, 0xba, 0xe0, 0xb1, 0xeb, 0x2d, 0x2d, 0x11, + 0x3c, 0x9d, 0xce, 0xd7, 0xa5, 0xcd, 0xdf, 0xed, + 0x3c, 0x28, 0xea, 0x9f, 0xf5, 0x1e, 0x43, 0x03, + 0x14, 0xeb, 0x00, 0xa0, 0x07, 0x6c, 0x27, 0x1e, + 0xa5, 0xa8, 0x1f, 0x24, 0x12, 0xa3, 0x81, 0x10, + 0xb5, 0x36, 0xcd, 0x60, 0x22, 0x93, 0x5d, 0x61, + 0x7d, 0x2b, 0x6f, 0x43, 0x7a, 0x95, 0x07, 0xaa, + 0xf7, 0x25, 0xaf, 0x46, 0x4c, 0x03, 0xed, 0x35, + 0xb2, 0xe4, 0x03, 0x48, 0x07, 0x07, 0x7c, 0x57, + 0x49, 0x3c, 0x61, 0x10, 0x29, 0xa0, 0x6e, 0xcd, + 0x43, 0x3d, 0x7f, 0xf1, 0x9e, 0xbf, 0xf8, 0xcf, + 0x5f, 0xfc, 0x7d, 0x65, 0x50, 0x59, 0xfd, 0x72, + 0xbf, 0xec, 0x70, 0xf0, 0xfd, 0xb8, 0x42, 0x19, + 0xfe, 0x08, 0xeb, 0xee, 0xeb, 0xf7, 0xc4, 0xf6, + 0xd1, 0xdb, 0x47, 0x26, 0x78, 0x4c, 0xf0, 0x99, + 0xe1, 0x33, 0xc2, 0x67, 0x84, 0xcf, 0x09, 0x91, + 0x0b, 0xec, 0x90, 0xf9, 0x12, 0x91, 0x7a, 0x26, + 0x05, 0x7d, 0x78, 0x7a, 0x53, 0x56, 0x3a, 0xbb, + 0xe7, 0xd7, 0x13, 0xd0, 0xc0, 0xa8, 0x3c, 0x88, + 0x43, 0xec, 0x99, 0x2d, 0x08, 0xe4, 0x75, 0x2a, + 0x57, 0x7b, 0x8d, 0x32, 0xa9, 0xcc, 0x9c, 0x23, + 0xc3, 0x86, 0x3a, 0x85, 0x20, 0x93, 0x7c, 0xd0, + 0xbf, 0xb1, 0x31, 0x84, 0x33, 0x5b, 0xad, 0x5a, + 0x56, 0xaf, 0x55, 0xc7, 0x8c, 0x7e, 0xa2, 0x05, + 0x03, 0xcb, 0x0d, 0x9c, 0xcf, 0xb6, 0x78, 0x4c, + 0xf0, 0x99, 0xe1, 0x33, 0xc2, 0x67, 0x84, 0xcf, + 0x09, 0x9e, 0x13, 0x03, 0x95, 0x93, 0x91, 0x13, + 0x7e, 0xdb, 0x18, 0x3d, 0x1b, 0x8e, 0x80, 0x2b, + 0x91, 0x2a, 0xe8, 0x5c, 0xad, 0xbf, 0x70, 0x67, + 0x8c, 0xcf, 0x19, 0x8a, 0xb7, 0x6c, 0x0c, 0x51, + 0xa5, 0xae, 0xba, 0x4f, 0xb6, 0x7d, 0xb6, 0x9e, + 0x5b, 0xf5, 0xba, 0xff, 0x00, 0x2f, 0x77, 0x05, + 0xac, 0x2d, 0x36, 0x20, 0xc3, 0xd7, 0xbf, 0x43, + 0xb4, 0xc5, 0x33, 0x28, 0xe5, 0x7d, 0x95, 0x46, + 0x6e, 0xf4, 0xc4, 0xce, 0x21, 0xac, 0x6e, 0xd4, + 0xab, 0xbe, 0xbb, 0xc2, 0x7a, 0xdd, 0x5a, 0x80, + 0xee, 0xc9, 0xae, 0x26, 0x71, 0x25, 0xe7, 0x4d, + 0x88, 0x89, 0xd4, 0x45, 0x1f, 0xbe, 0x4c, 0x44, + 0x9c, 0x2a, 0x73, 0xaa, 0xe8, 0xeb, 0x96, 0x3c, + 0x7a, 0xc1, 0x79, 0x27, 0x08, 0x8a, 0x4c, 0x41, + 0x7b, 0xe4, 0x34, 0xdb, 0xd6, 0x4b, 0xf6, 0xc2, + 0xb4, 0x18, 0xb3, 0xd5, 0x02, 0xbb, 0x4e, 0x93, + 0xf6, 0xce, 0x4b, 0x1d, 0x6e, 0xd8, 0x2b, 0xcb, + 0xaf, 0xdf, 0xbb, 0x8e, 0x1b, 0x19, 0x8e, 0xee, + 0x5b, 0x9e, 0x93, 0xf8, 0xcb, 0xb7, 0x2b, 0x32, + 0xcd, 0x9b, 0xdd, 0x73, 0x7a, 0xb9, 0xbb, 0x5d, + 0x8f, 0x6a, 0x95, 0x7e, 0xd3, 0x7c, 0x7a, 0x62, + 0x04, 0x37, 0x81, 0x9a, 0x37, 0x10, 0x1b, 0x25, + 0xa7, 0x38, 0xae, 0x53, 0x26, 0xed, 0x1d, 0xa2, + 0x38, 0xac, 0xe7, 0x8c, 0xf1, 0x99, 0xe3, 0x31, + 0xa1, 0x12, 0x63, 0x95, 0x61, 0x84, 0x2b, 0x9e, + 0x3b, 0x80, 0x3f, 0xd8, 0xe3, 0xcc, 0x1c, 0xff, + 0x00, 0x07, 0xe3, 0x0d, 0x7a, 0x51, 0x5c, 0x58, + 0x3b, 0xbd, 0x4e, 0x38, 0x58, 0x63, 0x9c, 0x2a, + 0xb5, 0x69, 0x50, 0x53, 0xcb, 0xc9, 0xd7, 0x4d, + 0x55, 0xdb, 0x57, 0xa3, 0xdc, 0xc8, 0x3b, 0x89, + 0xa3, 0xb3, 0x1f, 0xb3, 0x42, 0x1f, 0x42, 0x02, + 0x1c, 0xa9, 0x0e, 0xae, 0x25, 0x60, 0x49, 0xac, + 0x0d, 0xa5, 0x29, 0xc8, 0xa8, 0x74, 0xce, 0x56, + 0x60, 0xa3, 0xe7, 0x5a, 0x31, 0xbe, 0x09, 0xbe, + 0x32, 0xa9, 0x88, 0xa8, 0x3c, 0x14, 0x6d, 0xa9, + 0x1c, 0x3d, 0x9c, 0x74, 0x4e, 0xe5, 0x04, 0x4e, + 0x2d, 0x5a, 0x85, 0x9c, 0x26, 0xb0, 0x8f, 0x8d, + 0xe9, 0x4c, 0x1a, 0x11, 0x68, 0xce, 0x5b, 0x58, + 0x6c, 0x81, 0x52, 0x2e, 0x0f, 0x56, 0x06, 0x19, + 0x77, 0x43, 0x06, 0x50, 0xd2, 0xe9, 0xa1, 0x8c, + 0x34, 0x40, 0xc0, 0x31, 0x53, 0x47, 0xa4, 0xeb, + 0xfb, 0x13, 0x02, 0x8c, 0x94, 0xc0, 0x41, 0xc9, + 0x6b, 0x91, 0xbf, 0xd4, 0xa7, 0x9f, 0xae, 0x30, + 0x4a, 0x06, 0x13, 0xa6, 0x99, 0x09, 0x98, 0x9c, + 0xda, 0x6f, 0x31, 0x4e, 0xa6, 0x79, 0xa7, 0xb6, + 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, + 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, + 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, + 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, + 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, + 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, + 0x79, 0xa7, 0xb6, 0x79, 0xa7, 0xb6, 0x79, 0xa7, + 0xb6, 0x24, 0xed, 0x80, 0xc6, 0x9d, 0x53, 0xd7, + 0x12, 0x53, 0x49, 0x22, 0x55, 0x87, 0x42, 0xaf, + 0xd2, 0x4e, 0xb5, 0x25, 0xc5, 0x01, 0x04, 0x9c, + 0xa4, 0x9d, 0x6f, 0xfa, 0xcf, 0x3c, 0xf3, 0xcf, + 0x3c, 0xf3, 0xcf, 0x3c, 0xf3, 0xcf, 0x3c, 0xf3, + 0xcf, 0x3c, 0xf3, 0xcf, 0x10, 0x1a, 0x9e, 0xed, + 0x43, 0xa0, 0xd5, 0xf5, 0xc5, 0x52, 0xaa, 0xae, + 0xd5, 0xc5, 0x88, 0x2c, 0x7e, 0x99, 0x4f, 0xd4, + 0x10, 0x0d, 0x4e, 0x1d, 0x5a, 0x15, 0xd5, 0xff, + 0x00, 0x85, 0x78, 0x1c, 0x27, 0x3d, 0xa1, 0x31, + 0x92, 0x2b, 0x7d, 0x52, 0x37, 0xb0, 0xa3, 0x50, + 0x62, 0x6b, 0x7e, 0x23, 0x5a, 0x11, 0xbc, 0xd1, + 0xbc, 0x2e, 0xa0, 0x7c, 0x50, 0x72, 0x9d, 0x1b, + 0x3b, 0xef, 0xbe, 0x38, 0x58, 0x55, 0xeb, 0xb1, + 0xe0, 0xd9, 0xb7, 0x5b, 0x3b, 0xe1, 0x91, 0xbe, + 0xc3, 0x03, 0x42, 0x99, 0xb7, 0x6a, 0xf4, 0x6f, + 0x26, 0x86, 0xb9, 0x90, 0xe4, 0xf1, 0x49, 0xf7, + 0x93, 0x57, 0x70, 0xff, 0x00, 0x58, 0x9b, 0xa2, + 0xba, 0xc0, 0xdb, 0x4e, 0x9c, 0x00, 0x13, 0x31, + 0x7a, 0x2e, 0xef, 0x0d, 0x47, 0x03, 0xbe, 0x71, + 0xe6, 0x21, 0x10, 0x68, 0x2a, 0xd2, 0xee, 0xad, + 0x70, 0xb5, 0x2c, 0x61, 0x3e, 0xc9, 0x52, 0x12, + 0xee, 0x5c, 0x6e, 0xc6, 0x5e, 0xb6, 0x43, 0xea, + 0x0f, 0xd9, 0xc7, 0x8c, 0xd2, 0x56, 0xd9, 0xa1, + 0x4e, 0xd2, 0x74, 0x03, 0x07, 0x02, 0x40, 0xfb, + 0xc1, 0x2f, 0xd8, 0xfe, 0x97, 0x3c, 0xfd, 0x73, + 0xfa, 0x4f, 0xf8, 0xff, 0x00, 0x01, 0xa4, 0x59, + 0x95, 0xb1, 0x71, 0x7a, 0x53, 0x06, 0x82, 0x72, + 0xd5, 0x87, 0x4b, 0x89, 0xea, 0x89, 0x69, 0xb9, + 0xcc, 0x63, 0x9b, 0x1d, 0x04, 0x8b, 0x26, 0xd8, + 0x74, 0x9c, 0x8b, 0xb2, 0xfd, 0x5f, 0x4a, 0x68, + 0x10, 0x92, 0x6b, 0x8e, 0x1c, 0x9c, 0x3d, 0x54, + 0xce, 0x6a, 0x85, 0xfe, 0x47, 0x19, 0x77, 0x47, + 0x7d, 0x82, 0x06, 0xd4, 0x44, 0x05, 0xf1, 0x57, + 0x28, 0xd4, 0xd4, 0x06, 0xf2, 0x66, 0x26, 0xc7, + 0x5d, 0x1b, 0xb9, 0x88, 0x54, 0x93, 0x10, 0xab, + 0xc8, 0x56, 0xa0, 0x36, 0xdc, 0x16, 0x2b, 0xa0, + 0xa8, 0x07, 0x00, 0x78, 0xa4, 0x67, 0xaf, 0xeb, + 0xf2, 0xdd, 0x9f, 0xaa, 0xe3, 0x7e, 0xfe, 0xf4, + 0x37, 0xbc, 0xbd, 0xcb, 0x87, 0x2b, 0x7f, 0x57, + 0x22, 0x80, 0x74, 0x0d, 0x78, 0x2b, 0x05, 0x66, + 0xaa, 0xdb, 0x66, 0xb8, 0x08, 0xf0, 0x80, 0x14, + 0x0c, 0x2a, 0x3c, 0x30, 0x2f, 0x4a, 0x00, 0x60, + 0xa4, 0x51, 0x6e, 0x5f, 0x22, 0xb6, 0x84, 0xf5, + 0x99, 0x20, 0xa6, 0x87, 0x59, 0x35, 0xf3, 0x53, + 0x7f, 0x58, 0x94, 0x1d, 0x4e, 0x46, 0xdc, 0x49, + 0x71, 0x81, 0x1f, 0x04, 0x56, 0x01, 0x40, 0x8d, + 0x69, 0x52, 0xb6, 0xab, 0x9b, 0x9f, 0xa1, 0x3a, + 0x9b, 0x8a, 0x6f, 0x35, 0xc0, 0x39, 0x00, 0x39, + 0x20, 0xa8, 0xa8, 0xc2, 0x48, 0xe0, 0xb0, 0x26, + 0x55, 0x2a, 0x97, 0x63, 0x7a, 0x22, 0xd4, 0x12, + 0xf9, 0x9a, 0x82, 0x08, 0x82, 0xd0, 0x81, 0x0a, + 0x94, 0xc2, 0xd0, 0x90, 0x12, 0x18, 0x43, 0xc3, + 0x86, 0xd2, 0x6d, 0x0c, 0x60, 0xe4, 0x9c, 0x3a, + 0x3b, 0x41, 0x40, 0x8a, 0xbb, 0x88, 0xeb, 0xf4, + 0x90, 0x10, 0x80, 0x8e, 0x04, 0x00, 0xa1, 0x85, + 0xfc, 0x08, 0xd0, 0xa8, 0xa3, 0x68, 0x1a, 0x5d, + 0x0b, 0x1a, 0x1f, 0x5f, 0x35, 0xdf, 0xf4, 0x7f, + 0xe1, 0x83, 0xfc, 0x43, 0x0b, 0xc5, 0x88, 0xe8, + 0x89, 0xb1, 0xc2, 0x08, 0xbc, 0x5f, 0xb1, 0x69, + 0x99, 0x6c, 0xd9, 0xb8, 0x0e, 0x68, 0x07, 0xf7, + 0xc0, 0x90, 0xe0, 0x81, 0xc8, 0xae, 0x9d, 0x1b, + 0x4b, 0xac, 0x52, 0xd3, 0x55, 0x3d, 0xc5, 0x9c, + 0x0e, 0x4e, 0x98, 0x80, 0x98, 0xf0, 0xfa, 0xbb, + 0xd5, 0xd5, 0xe9, 0x83, 0x3c, 0xa0, 0xa7, 0x5a, + 0x0b, 0x38, 0x9c, 0x4e, 0x0c, 0x16, 0x14, 0x13, + 0x90, 0x85, 0x45, 0x60, 0x07, 0xd4, 0x84, 0xd4, + 0xe0, 0x02, 0x0e, 0xe3, 0x1a, 0xb2, 0xe2, 0x78, + 0x3a, 0x59, 0x00, 0x35, 0x58, 0x85, 0x6b, 0x47, + 0x6c, 0x22, 0x34, 0x81, 0x21, 0x22, 0x50, 0x62, + 0x7e, 0xaf, 0x1f, 0xdb, 0x9f, 0xd6, 0x7f, 0xc7, + 0xf8, 0x0d, 0x4a, 0x3a, 0xf4, 0x16, 0x6f, 0x40, + 0xbd, 0xc6, 0x2a, 0x00, 0xe0, 0x1a, 0x6e, 0x16, + 0xef, 0x82, 0x22, 0x5b, 0xea, 0x01, 0x9d, 0x8a, + 0xb8, 0x78, 0x6c, 0xd7, 0x8b, 0x7e, 0xee, 0x01, + 0x09, 0xc7, 0x81, 0x68, 0x2a, 0xc8, 0x5e, 0xf9, + 0x4c, 0x87, 0xda, 0x9d, 0x51, 0xb6, 0xf4, 0x26, + 0xcd, 0xe1, 0x5c, 0x08, 0x3a, 0xa8, 0x50, 0xac, + 0x88, 0xba, 0x3a, 0x77, 0xa4, 0x9c, 0x7f, 0xe0, + 0xaa, 0x86, 0xc6, 0x36, 0x5d, 0x0d, 0x98, 0x34, + 0x8f, 0x4e, 0x2c, 0x84, 0x00, 0x60, 0x25, 0x76, + 0xee, 0x27, 0xe4, 0x60, 0x12, 0x0d, 0x82, 0x9d, + 0x3b, 0xfe, 0xbf, 0x2d, 0xd9, 0xfa, 0x8e, 0x61, + 0x59, 0x81, 0xef, 0x68, 0x03, 0x8d, 0x77, 0x75, + 0x63, 0x86, 0xde, 0x4c, 0x71, 0xa3, 0xb4, 0xdc, + 0xaa, 0x1c, 0x3b, 0x18, 0xd0, 0x51, 0x64, 0x85, + 0x45, 0xb5, 0xa0, 0x71, 0x1c, 0x33, 0x57, 0x74, + 0xb0, 0xc8, 0x2f, 0x4d, 0x41, 0xb1, 0x13, 0xa8, + 0x67, 0x5d, 0x88, 0x90, 0x41, 0xc1, 0x35, 0xd6, + 0x90, 0xb5, 0xca, 0xc4, 0x06, 0xae, 0x6c, 0x1d, + 0x40, 0x92, 0x83, 0x64, 0x4c, 0xe4, 0x09, 0x66, + 0xa0, 0x28, 0x6f, 0xb0, 0x57, 0xb3, 0x65, 0x69, + 0x05, 0x41, 0xbd, 0x0f, 0x50, 0xa8, 0xd3, 0x17, + 0xae, 0x68, 0x70, 0xf9, 0x71, 0x30, 0x8d, 0x4a, + 0x01, 0x02, 0xd5, 0xc6, 0x91, 0xd6, 0x2f, 0x52, + 0x96, 0xd5, 0x05, 0x84, 0x55, 0x0c, 0xd0, 0x3f, + 0xa7, 0x80, 0x84, 0x01, 0xca, 0x4a, 0xf7, 0x03, + 0x35, 0x33, 0xa6, 0x14, 0x22, 0x4b, 0xb5, 0x01, + 0x85, 0x96, 0x60, 0x10, 0x54, 0xea, 0xb4, 0xa7, + 0xbc, 0x22, 0x22, 0xb3, 0xa3, 0x63, 0xd3, 0x56, + 0xad, 0x82, 0x42, 0xec, 0x10, 0x8b, 0x9b, 0x04, + 0xe3, 0xaa, 0x0a, 0x20, 0x94, 0x4d, 0x25, 0xfd, + 0x1e, 0x6b, 0xbf, 0xfc, 0x71, 0x37, 0xe4, 0x58, + 0x86, 0x0e, 0x75, 0x42, 0x14, 0xa3, 0xba, 0xbf, + 0xb6, 0x19, 0x91, 0x49, 0xd3, 0x73, 0x93, 0x72, + 0x8a, 0xab, 0xc7, 0x21, 0x83, 0x95, 0xa0, 0x20, + 0x2a, 0x92, 0x67, 0x61, 0xf4, 0xc8, 0x98, 0xe1, + 0xe9, 0x8d, 0x4d, 0xcd, 0x00, 0x15, 0x1b, 0x26, + 0xf1, 0x2a, 0xda, 0x23, 0xc2, 0x54, 0xa7, 0xb1, + 0x30, 0x24, 0x1e, 0xa9, 0x41, 0x7f, 0x68, 0x81, + 0x43, 0x75, 0x40, 0xcb, 0x9d, 0x40, 0x06, 0xad, + 0x80, 0x56, 0xc0, 0x85, 0x50, 0xc5, 0xee, 0x49, + 0xc1, 0x41, 0x01, 0xa5, 0x0e, 0x4e, 0xe9, 0x8d, + 0x12, 0xf6, 0x84, 0x05, 0x1b, 0x2c, 0xa3, 0xdc, + 0xa4, 0xc2, 0x2d, 0x62, 0x87, 0x0c, 0x35, 0x29, + 0xa4, 0x89, 0xb4, 0xc1, 0x9e, 0x64, 0x60, 0x54, + 0xc3, 0xb2, 0xd9, 0xbe, 0xe3, 0x1f, 0xd1, 0x0c, + 0x30, 0x89, 0x01, 0x34, 0xc1, 0xaf, 0x3b, 0xc4, + 0x1a, 0x13, 0x90, 0x01, 0x05, 0x07, 0x43, 0x6c, + 0xef, 0xce, 0x5f, 0x63, 0x9b, 0xe1, 0x80, 0x12, + 0x89, 0xcf, 0x4f, 0xd3, 0xe5, 0xfb, 0x73, 0xfa, + 0x8f, 0xf8, 0xc7, 0xc6, 0xb9, 0x3d, 0x34, 0x1c, + 0x9a, 0xff, 0x00, 0x5b, 0x1e, 0x3c, 0x78, 0xf1, + 0xe3, 0xc7, 0x8f, 0x1e, 0x3c, 0x78, 0xf1, 0xe3, + 0xc7, 0x8f, 0x1e, 0x3c, 0x78, 0xf1, 0xc0, 0x70, + 0x3c, 0x12, 0x53, 0x40, 0x35, 0xf4, 0xdd, 0x34, + 0xf8, 0xf0, 0x48, 0xfd, 0xf9, 0xe1, 0xfe, 0xf9, + 0xe1, 0xfe, 0xf8, 0x6d, 0x87, 0x85, 0x47, 0xfb, + 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, + 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, + 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, + 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, + 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, + 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, + 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xc1, 0x67, + 0xd1, 0x03, 0xa5, 0x7b, 0x8d, 0x3f, 0x7f, 0xa8, + 0x47, 0x3f, 0xc0, 0x78, 0xd2, 0xe4, 0xfe, 0xe5, + 0xd9, 0x42, 0x02, 0xc7, 0x8a, 0x4c, 0x19, 0x55, + 0xe7, 0x12, 0xb7, 0xd4, 0x24, 0x76, 0x52, 0xe2, + 0x53, 0xde, 0x86, 0xbb, 0x07, 0xb0, 0x17, 0xd4, + 0xca, 0xd5, 0xb5, 0x46, 0xb0, 0xfd, 0x01, 0xea, + 0xf6, 0xcb, 0xf6, 0x5e, 0xc4, 0xc0, 0xbc, 0xba, + 0x2e, 0x95, 0xe3, 0x34, 0xe0, 0xb6, 0x52, 0xef, + 0x0c, 0x30, 0x33, 0xaa, 0x25, 0x79, 0xb0, 0x15, + 0x9d, 0xb0, 0xe3, 0x7a, 0x44, 0x0b, 0xa4, 0x34, + 0x7a, 0x07, 0x75, 0xc7, 0x8b, 0xd6, 0x45, 0x48, + 0x6f, 0xd8, 0xdd, 0x0b, 0xd7, 0x38, 0xfd, 0xce, + 0xf2, 0xd2, 0x7d, 0x99, 0x3f, 0x7c, 0xf4, 0x14, + 0x8e, 0x86, 0xfd, 0xab, 0x99, 0xb4, 0x0a, 0x6d, + 0x38, 0x2a, 0x69, 0xc7, 0xab, 0xdf, 0x08, 0x9f, + 0x9a, 0xb1, 0x53, 0xe8, 0x52, 0x1b, 0x8a, 0x74, + 0x1c, 0x04, 0x82, 0x39, 0x9b, 0x86, 0x86, 0x80, + 0x7a, 0xb5, 0xe5, 0xfd, 0x3a, 0x79, 0xfa, 0xe7, + 0xf5, 0xdf, 0xf1, 0xfa, 0x8d, 0x40, 0x14, 0x00, + 0xf0, 0xf5, 0xc0, 0x5d, 0xa4, 0x6d, 0x00, 0xfe, + 0xf6, 0xc4, 0x9d, 0xa9, 0xc4, 0xcc, 0xfa, 0x35, + 0xc0, 0xe7, 0x62, 0x60, 0x83, 0x55, 0xca, 0xd3, + 0x4f, 0x58, 0x41, 0x5a, 0x44, 0x8d, 0x6d, 0xb6, + 0xa1, 0x19, 0x9b, 0x7a, 0xf4, 0x2e, 0x4a, 0x87, + 0x72, 0xf3, 0x8b, 0xfc, 0x59, 0xa4, 0x6e, 0xa3, + 0x71, 0xd3, 0xbb, 0xc3, 0x78, 0xfc, 0x06, 0x99, + 0x41, 0xae, 0xf3, 0x0e, 0xb9, 0x23, 0x4c, 0xad, + 0x7d, 0x2e, 0x03, 0x43, 0xf6, 0x43, 0xce, 0x2c, + 0x66, 0x0e, 0x7c, 0xb0, 0x15, 0x34, 0x9a, 0x66, + 0xe9, 0x82, 0xd1, 0x7b, 0x2d, 0x50, 0x44, 0x44, + 0xe0, 0xff, 0x00, 0x03, 0x82, 0xf8, 0x16, 0x1d, + 0x17, 0x92, 0x03, 0x9c, 0x78, 0x06, 0x27, 0xf7, + 0xfa, 0xbc, 0xb7, 0x67, 0xd1, 0x0a, 0x9a, 0x64, + 0xba, 0x5b, 0xfc, 0xb8, 0x52, 0x52, 0x40, 0xf8, + 0x2c, 0x33, 0x40, 0x8b, 0xd3, 0x78, 0xbf, 0xca, + 0x4c, 0xe4, 0x8c, 0x2c, 0xa1, 0x3a, 0x21, 0xe1, + 0xd6, 0xa0, 0x07, 0xd7, 0x5c, 0x4d, 0x0a, 0xce, + 0x7d, 0x72, 0x31, 0xf3, 0xd6, 0x72, 0x73, 0x82, + 0x0b, 0x60, 0x29, 0xc3, 0x67, 0x64, 0x55, 0xef, + 0x16, 0xab, 0x02, 0x87, 0x62, 0x80, 0x87, 0xb5, + 0xd8, 0x90, 0x3d, 0x92, 0x2a, 0x05, 0x00, 0xd1, + 0xc8, 0x1a, 0xc1, 0xe4, 0xac, 0x17, 0x73, 0x41, + 0x2d, 0x07, 0x53, 0x88, 0xed, 0x0a, 0x4d, 0x0c, + 0xdb, 0xa0, 0x6e, 0xb7, 0x0a, 0xa0, 0x2f, 0x08, + 0x54, 0x24, 0x0a, 0x4d, 0xf7, 0xeb, 0x83, 0x0d, + 0xab, 0xcf, 0x23, 0x52, 0xab, 0x05, 0x80, 0x2a, + 0x03, 0x68, 0x54, 0x5c, 0xb3, 0x56, 0x92, 0xb6, + 0x8b, 0xaa, 0x91, 0x89, 0xc4, 0x43, 0x6b, 0x04, + 0x04, 0x81, 0xd6, 0x68, 0xb6, 0xaa, 0x2d, 0x53, + 0x66, 0xfc, 0xef, 0x54, 0x0b, 0x17, 0x10, 0x46, + 0xe1, 0x63, 0x5c, 0xd6, 0x51, 0x65, 0x36, 0x63, + 0xf8, 0x06, 0x98, 0x46, 0x82, 0x03, 0x64, 0x28, + 0xa8, 0x02, 0xef, 0x40, 0x74, 0xc9, 0x10, 0x82, + 0xa2, 0x85, 0x4a, 0x08, 0x06, 0xc9, 0x37, 0x86, + 0xf9, 0x04, 0x8b, 0x01, 0xa8, 0xb8, 0xf5, 0x23, + 0x54, 0x93, 0x35, 0x66, 0x51, 0x11, 0xdb, 0x86, + 0xc5, 0x06, 0xcd, 0x85, 0x81, 0x80, 0x04, 0x6a, + 0x77, 0x1d, 0xb3, 0xd6, 0xcd, 0x10, 0xb4, 0x58, + 0x55, 0xcc, 0xab, 0x63, 0x47, 0xa8, 0xa5, 0xa0, + 0x0d, 0x71, 0x89, 0x75, 0x60, 0x20, 0x03, 0x14, + 0xd1, 0xa2, 0xf9, 0xd6, 0xb3, 0xd1, 0xb5, 0xd9, + 0x0a, 0x7f, 0x27, 0xd1, 0x65, 0x8e, 0x7f, 0x82, + 0xf0, 0xa4, 0xbd, 0x69, 0x51, 0xd9, 0x51, 0x4c, + 0x23, 0xc8, 0xad, 0x19, 0x15, 0x45, 0xd9, 0x55, + 0x78, 0xbc, 0xe4, 0xc5, 0x7b, 0x5f, 0x68, 0x26, + 0x34, 0x68, 0xc2, 0x30, 0xe0, 0x62, 0x1c, 0x49, + 0x91, 0xeb, 0x9a, 0x48, 0xce, 0x87, 0xe6, 0xc2, + 0x1a, 0xed, 0x88, 0x9c, 0xda, 0xbe, 0xa5, 0x28, + 0x33, 0x46, 0xbd, 0x31, 0xac, 0xc2, 0x9a, 0x49, + 0x55, 0x51, 0xa6, 0x72, 0x66, 0x89, 0xcb, 0x5d, + 0x1c, 0x34, 0x17, 0x6e, 0xfd, 0x70, 0x8d, 0x3c, + 0x4d, 0xf1, 0x10, 0x9f, 0xb3, 0x36, 0x23, 0x75, + 0x17, 0x58, 0x1a, 0x87, 0x65, 0xe3, 0x20, 0xc0, + 0x27, 0x7e, 0x59, 0x69, 0x66, 0x1a, 0x8a, 0x71, + 0x81, 0x82, 0x04, 0x92, 0x6a, 0x96, 0x74, 0x2b, + 0x03, 0x5b, 0x73, 0xa0, 0x42, 0x62, 0x72, 0xc7, + 0x03, 0x47, 0x03, 0xa6, 0x12, 0x8c, 0x53, 0x65, + 0xe4, 0x14, 0xcf, 0xdb, 0xf4, 0xb9, 0xe7, 0xeb, + 0x9b, 0x7d, 0xb7, 0xfc, 0x7e, 0xa3, 0x52, 0xc8, + 0x04, 0x58, 0x8e, 0xa5, 0xe9, 0x8f, 0x40, 0x33, + 0x62, 0x40, 0x95, 0x25, 0x13, 0x4e, 0x76, 0xe3, + 0x82, 0x50, 0x30, 0x75, 0xf1, 0x02, 0x02, 0x94, + 0xaa, 0xcc, 0x4c, 0xf7, 0xbb, 0x95, 0xb7, 0x8a, + 0xc3, 0x40, 0x00, 0x4e, 0xa8, 0xb5, 0xe4, 0x50, + 0xa3, 0xb8, 0x52, 0xd1, 0x80, 0xee, 0x6f, 0x48, + 0x4d, 0x3b, 0x8c, 0x12, 0x58, 0xcb, 0x05, 0x9d, + 0x32, 0x7e, 0xc5, 0xdf, 0x42, 0xf5, 0x7b, 0x21, + 0xb4, 0x0f, 0x4c, 0x74, 0x78, 0xa5, 0xe3, 0xc7, + 0x88, 0xea, 0x9b, 0x4a, 0xcc, 0xe6, 0xa6, 0x8b, + 0x75, 0x62, 0x14, 0x75, 0xb1, 0xf6, 0x30, 0x2d, + 0xed, 0x92, 0x3e, 0x06, 0x33, 0x4a, 0x6b, 0x91, + 0x82, 0xd9, 0x7a, 0xda, 0xc2, 0x7a, 0x94, 0xec, + 0x2f, 0x6c, 0xdd, 0xbe, 0x6f, 0xdc, 0xbb, 0xb0, + 0xe7, 0x79, 0xd2, 0xcd, 0xf3, 0xfa, 0xbc, 0xb7, + 0x67, 0xd1, 0xcc, 0xca, 0x48, 0x05, 0x04, 0x5d, + 0xa3, 0x4d, 0x6c, 0xbd, 0xb1, 0xa2, 0x55, 0x20, + 0x8d, 0x2d, 0xd0, 0x01, 0xc8, 0xa9, 0xce, 0x37, + 0x54, 0xa5, 0x4d, 0x6c, 0xfa, 0x03, 0x93, 0xa1, + 0x89, 0xac, 0x8b, 0x14, 0x56, 0x5e, 0x47, 0xd4, + 0xe4, 0xd6, 0x29, 0x79, 0x9d, 0x01, 0x45, 0x60, + 0x64, 0x73, 0xbb, 0x17, 0x0b, 0x2c, 0xa9, 0x4c, + 0xef, 0x4d, 0x80, 0xf4, 0x12, 0x31, 0x85, 0x8d, + 0x38, 0x6f, 0xa0, 0xd5, 0x45, 0x2a, 0x43, 0x58, + 0x8b, 0x08, 0x60, 0x5d, 0x63, 0xbd, 0xab, 0xa0, + 0xdc, 0x5c, 0x5d, 0x25, 0xa3, 0x67, 0x23, 0xb2, + 0x0e, 0x90, 0x77, 0x72, 0x96, 0x14, 0x07, 0x55, + 0x4e, 0x52, 0x6c, 0x79, 0xc6, 0x02, 0xb8, 0x30, + 0xd0, 0x90, 0x82, 0xc0, 0xa9, 0x79, 0x63, 0x09, + 0xe7, 0xd1, 0x16, 0x3e, 0x47, 0x27, 0x28, 0x17, + 0x13, 0xfc, 0xe3, 0x2f, 0x59, 0xd5, 0x6a, 0x2b, + 0x56, 0x6d, 0xc2, 0x03, 0x14, 0x42, 0x4b, 0x89, + 0xce, 0x24, 0x91, 0xc3, 0x89, 0x18, 0x38, 0xc8, + 0x06, 0x24, 0x9f, 0xcb, 0x6e, 0xb8, 0x06, 0x8c, + 0x12, 0x00, 0x9d, 0x1d, 0x91, 0x36, 0x1b, 0xbf, + 0x7c, 0x78, 0x3e, 0x10, 0xad, 0xc6, 0x81, 0x2a, + 0xe6, 0x08, 0x9d, 0x18, 0x3e, 0x5c, 0x85, 0xf9, + 0xba, 0x07, 0x5a, 0x8a, 0xd3, 0x8c, 0x75, 0xd8, + 0x84, 0x0a, 0x43, 0xc8, 0x10, 0x80, 0xbf, 0x70, + 0x53, 0x6f, 0x1e, 0x72, 0xee, 0x5d, 0x9b, 0x62, + 0x6b, 0x98, 0x94, 0xcc, 0xd6, 0x80, 0xb6, 0x82, + 0x3e, 0x6a, 0x09, 0x18, 0xe0, 0x89, 0x02, 0x4b, + 0x0d, 0x18, 0xb8, 0x5e, 0x6c, 0x3c, 0x5b, 0x77, + 0x63, 0x0f, 0xef, 0x02, 0x7b, 0x8f, 0xd1, 0xff, + 0x00, 0xb6, 0x62, 0xfb, 0x9e, 0x13, 0xb7, 0x3f, + 0xaa, 0xff, 0x00, 0x8c, 0x2f, 0x22, 0xd2, 0xa1, + 0xd6, 0xa7, 0x06, 0x7c, 0xa7, 0xf1, 0x9f, 0x29, + 0xfc, 0x67, 0xca, 0x7f, 0x19, 0xf2, 0x9f, 0xc6, + 0x7c, 0xa7, 0xf1, 0x9f, 0x29, 0xfc, 0x67, 0xca, + 0x7f, 0x19, 0xf2, 0x9f, 0xc6, 0x7c, 0xa7, 0xf1, + 0x9f, 0x29, 0xfc, 0x67, 0xca, 0x7f, 0x19, 0xf2, + 0x9f, 0xc6, 0x7c, 0xa7, 0xf1, 0x9f, 0x29, 0xfc, + 0x67, 0xca, 0x7f, 0x19, 0xf2, 0x9f, 0xc6, 0x7c, + 0xa7, 0xf1, 0x9f, 0x29, 0xfc, 0x67, 0xca, 0x7f, + 0x19, 0xf2, 0x9f, 0xc6, 0x7c, 0xa7, 0xf1, 0x80, + 0x6a, 0x8f, 0x12, 0xdc, 0x3d, 0x0e, 0x3f, 0x6f, + 0xa6, 0xb9, 0x59, 0x2e, 0xc3, 0x80, 0x9b, 0x0e, + 0xe6, 0xf1, 0x1b, 0x6a, 0xd5, 0xf4, 0x05, 0x5f, + 0xe7, 0xfd, 0x46, 0xad, 0x5a, 0xb5, 0x6a, 0xd5, + 0xab, 0x56, 0xad, 0x5a, 0xb5, 0x6a, 0xd5, 0xab, + 0x56, 0xad, 0x5a, 0xa2, 0x34, 0xa0, 0x4f, 0xdd, + 0x25, 0xfb, 0x5c, 0x2e, 0x4a, 0x05, 0x9b, 0xc0, + 0x38, 0x3f, 0xdd, 0xd9, 0x3d, 0xe7, 0x84, 0xed, + 0xcf, 0xe9, 0xbf, 0xe3, 0xf5, 0x1a, 0x3f, 0x51, + 0xd0, 0xcf, 0xe3, 0x00, 0x44, 0xde, 0x99, 0x5a, + 0x69, 0xeb, 0x08, 0x2b, 0x48, 0x91, 0xad, 0xb6, + 0xd4, 0x23, 0x33, 0x6f, 0x5e, 0x85, 0xc9, 0x50, + 0xee, 0x5e, 0x71, 0x7f, 0x8b, 0x34, 0x8d, 0xd4, + 0x6e, 0x3a, 0x77, 0x78, 0x6f, 0x18, 0x82, 0x50, + 0x24, 0x87, 0x2a, 0x17, 0x73, 0xa0, 0xba, 0xc9, + 0xc6, 0xc6, 0x2e, 0x21, 0x87, 0xe1, 0x4d, 0x2b, + 0xbc, 0x65, 0xc3, 0x1c, 0x03, 0x94, 0xda, 0x01, + 0xe7, 0xa6, 0xb0, 0xe6, 0x5e, 0x63, 0xf0, 0xd4, + 0x21, 0x6b, 0x2a, 0x12, 0xe4, 0x7c, 0x01, 0xc2, + 0x53, 0x39, 0x2a, 0x44, 0x4b, 0x48, 0xe4, 0xe7, + 0x9d, 0xc0, 0xd0, 0x9a, 0x24, 0x46, 0xc0, 0x04, + 0xcb, 0xb2, 0x67, 0xda, 0x85, 0xbc, 0x57, 0x0e, + 0x80, 0x7d, 0xf8, 0x9b, 0xfd, 0x50, 0xf2, 0xdd, + 0x9f, 0xed, 0xbc, 0x59, 0x6d, 0x72, 0xb9, 0xe2, + 0xfb, 0xff, 0x00, 0xae, 0x73, 0x13, 0xfd, 0x27, + 0xfc, 0x7e, 0xa3, 0x42, 0x8e, 0x62, 0x44, 0x22, + 0x9b, 0x29, 0x2f, 0x4b, 0x71, 0x33, 0xde, 0xee, + 0x56, 0xde, 0x2b, 0x0d, 0x00, 0x01, 0x3a, 0xa2, + 0xd7, 0x91, 0x42, 0x8e, 0xe1, 0x4b, 0x46, 0x03, + 0xb9, 0xbd, 0x21, 0x34, 0xee, 0x30, 0x49, 0x63, + 0x2c, 0x16, 0x74, 0xce, 0x48, 0x4f, 0xdf, 0xd0, + 0x60, 0xa4, 0xd3, 0xc6, 0x28, 0xbe, 0xd3, 0x21, + 0x52, 0x49, 0x61, 0xc9, 0x9d, 0x9c, 0x5a, 0xf6, + 0xec, 0xae, 0xa8, 0x72, 0x09, 0xce, 0xad, 0xdc, + 0x99, 0xeb, 0x93, 0x2b, 0x2b, 0x66, 0x17, 0xee, + 0x10, 0x8d, 0x4e, 0x93, 0x37, 0xab, 0x86, 0xf1, + 0x17, 0x02, 0x38, 0x0a, 0x4b, 0x44, 0xd2, 0x80, + 0x1b, 0x30, 0x6e, 0xa8, 0xf2, 0xb4, 0x34, 0xea, + 0xf7, 0x93, 0xee, 0xd3, 0x6a, 0x03, 0xfc, 0x3a, + 0x11, 0x40, 0xdc, 0x3d, 0x3b, 0xd7, 0xe9, 0xf2, + 0xdd, 0x9f, 0xed, 0x2c, 0x71, 0xcf, 0xaf, 0xa3, + 0x77, 0x8a, 0x08, 0x15, 0xa6, 0xde, 0x76, 0x67, + 0x82, 0x7b, 0xe7, 0x82, 0x7b, 0xe7, 0x82, 0x7b, + 0xe7, 0x82, 0x7b, 0xe7, 0x82, 0x7b, 0xe7, 0x82, + 0x7b, 0xe7, 0x82, 0x7b, 0xe7, 0x82, 0x7b, 0xe7, + 0x82, 0x7b, 0xe7, 0x82, 0x7b, 0xe7, 0x82, 0x7b, + 0xe7, 0x82, 0x7b, 0xe6, 0xb5, 0xf0, 0x3e, 0xf9, + 0xe0, 0x9e, 0xf9, 0xe0, 0x9e, 0xf9, 0xe0, 0x9e, + 0xf9, 0xe0, 0x9e, 0xf9, 0xe0, 0x9e, 0xf9, 0xe0, + 0x9e, 0xf9, 0xe0, 0x9e, 0xf9, 0xe0, 0x9e, 0xf9, + 0xe0, 0x9e, 0xf8, 0x6c, 0x2b, 0x30, 0x74, 0x29, + 0x3d, 0x73, 0x7f, 0xb0, 0xff, 0x00, 0x8c, 0x7f, + 0xf0, 0xbb, 0x05, 0x5d, 0xbd, 0x3f, 0xc3, 0x9e, + 0x79, 0xe7, 0x9e, 0x79, 0xe7, 0x30, 0x44, 0xb5, + 0xd0, 0x01, 0x8c, 0x1b, 0x47, 0x5c, 0x16, 0x5d, + 0x15, 0x2c, 0x6d, 0x42, 0x86, 0x13, 0x1a, 0x47, + 0x66, 0x1e, 0x7e, 0x72, 0x9b, 0x04, 0x89, 0xd2, + 0x90, 0x75, 0x72, 0x8c, 0x53, 0x70, 0x08, 0xa9, + 0x34, 0x36, 0x58, 0xcd, 0x7f, 0x8b, 0x3c, 0xf3, + 0xcf, 0x3c, 0xf3, 0xcf, 0x38, 0xbe, 0x80, 0x21, + 0x5b, 0x75, 0xfb, 0xff, 0x00, 0xb4, 0xfe, 0x9e, + 0x1d, 0xb9, 0x70, 0x4b, 0x00, 0x08, 0xab, 0xac, + 0x10, 0xfd, 0x2d, 0x9b, 0x36, 0x6d, 0x23, 0xe2, + 0x63, 0x9d, 0x74, 0x63, 0xc0, 0xbe, 0xf8, 0x2b, + 0x40, 0x34, 0xa0, 0x44, 0x2b, 0xb4, 0x92, 0x2c, + 0xc6, 0x4d, 0xd0, 0x17, 0x1d, 0x2a, 0x0d, 0xcc, + 0x69, 0x45, 0xba, 0x6d, 0xc4, 0xce, 0x52, 0x45, + 0xd0, 0x3a, 0xe2, 0xf1, 0x53, 0x57, 0xf4, 0x36, + 0x6c, 0xd9, 0xb3, 0x99, 0xa9, 0xb2, 0x2c, 0x2a, + 0x87, 0xa7, 0xd5, 0xb3, 0x68, 0xa4, 0x99, 0xa3, + 0x82, 0x4a, 0x42, 0xc3, 0x01, 0x4b, 0xc6, 0x03, + 0xf0, 0x19, 0x18, 0xa5, 0x44, 0x15, 0x22, 0x71, + 0x38, 0x2a, 0xed, 0x81, 0x24, 0x09, 0x72, 0x89, + 0x51, 0x41, 0xc4, 0xc4, 0x85, 0xe6, 0xf1, 0x60, + 0x34, 0x11, 0x74, 0x9c, 0x3a, 0xc6, 0x8c, 0x06, + 0x5b, 0x1d, 0x86, 0x86, 0x75, 0xc8, 0xca, 0x6d, + 0xfa, 0x36, 0x6c, 0xc1, 0x4c, 0x4a, 0x36, 0x82, + 0x99, 0x9f, 0xd0, 0x7f, 0xc7, 0xf8, 0x8d, 0x3a, + 0x75, 0x8f, 0x71, 0xad, 0xc4, 0x69, 0xa5, 0xfb, + 0x65, 0x6b, 0x0b, 0xb1, 0x60, 0x53, 0x50, 0x6a, + 0xa6, 0xf7, 0x74, 0xe3, 0x96, 0xb5, 0x77, 0x77, + 0xf3, 0x22, 0xdf, 0x5c, 0x82, 0x4d, 0xc7, 0xa9, + 0x5f, 0xbc, 0x46, 0x7d, 0x0f, 0x73, 0xfc, 0x5e, + 0x5b, 0xb3, 0xfd, 0xeb, 0x15, 0x7c, 0x87, 0x7f, + 0xe9, 0xe8, 0x10, 0x0f, 0x1e, 0x81, 0x9d, 0x7a, + 0xbd, 0x31, 0xed, 0xc2, 0x8e, 0x68, 0x08, 0x57, + 0xae, 0x87, 0xf3, 0x95, 0x9d, 0x2c, 0xa5, 0x1e, + 0xe5, 0x21, 0x77, 0x06, 0xbd, 0x5c, 0x15, 0x93, + 0x1a, 0x6a, 0x92, 0xd8, 0x41, 0x5e, 0x4a, 0x35, + 0xfe, 0x02, 0x1b, 0x6c, 0x18, 0xe2, 0xff, 0x00, + 0xfb, 0x20, 0xf5, 0x0c, 0x64, 0x21, 0x57, 0xa5, + 0xf7, 0xee, 0x37, 0xf5, 0xc5, 0x81, 0xeb, 0x27, + 0xdf, 0x22, 0x4c, 0x40, 0x51, 0x6c, 0x99, 0x5d, + 0x90, 0x10, 0xa0, 0x20, 0xc4, 0x40, 0xf2, 0x3a, + 0xe1, 0xc2, 0x39, 0x29, 0x04, 0xbc, 0x67, 0x54, + 0x5e, 0xa7, 0xd7, 0xc8, 0x77, 0xe7, 0xf5, 0x9f, + 0xf1, 0x84, 0x6a, 0x99, 0x14, 0x37, 0x39, 0xcf, + 0x8c, 0x7e, 0x73, 0xe3, 0x1f, 0x9c, 0xf8, 0xc7, + 0xe7, 0x3e, 0x31, 0xf9, 0xcf, 0x8c, 0x7e, 0x73, + 0xe3, 0x1f, 0x9c, 0xf8, 0xc7, 0xe7, 0x3e, 0x31, + 0xf9, 0xc6, 0xb0, 0xe1, 0x57, 0x70, 0x73, 0xb0, + 0xa5, 0x9a, 0xfb, 0xe2, 0xb1, 0x04, 0x88, 0xe4, + 0x84, 0x00, 0x35, 0x78, 0x76, 0x30, 0xba, 0xf7, + 0x9c, 0xc8, 0x20, 0x23, 0x68, 0x43, 0xd4, 0xc5, + 0x6a, 0x78, 0x07, 0x04, 0xbc, 0xde, 0x26, 0x86, + 0xe1, 0xb6, 0xfc, 0x63, 0xf3, 0x9f, 0x18, 0xfc, + 0xe7, 0xc6, 0x3f, 0x39, 0xf1, 0x8f, 0xce, 0x7c, + 0x63, 0xf3, 0x9f, 0x18, 0xfc, 0xe7, 0xc6, 0x3f, + 0x39, 0xf1, 0x8f, 0xce, 0x7c, 0x63, 0xf3, 0x8e, + 0x09, 0x0f, 0xe4, 0x25, 0x3f, 0xaf, 0xa7, 0xac, + 0x3e, 0xab, 0xfa, 0xcb, 0x7e, 0x6e, 0x7c, 0xd7, + 0x3e, 0x6b, 0x9f, 0x35, 0xcf, 0x9a, 0xe7, 0xcd, + 0x73, 0xe6, 0xb9, 0xf3, 0x5c, 0xf9, 0xae, 0x7c, + 0xd7, 0x3e, 0x6b, 0x9f, 0x35, 0xcf, 0x9a, 0xe7, + 0xcd, 0x73, 0xe6, 0xb9, 0xf3, 0x5c, 0xf9, 0xae, + 0x7c, 0xd7, 0x3e, 0x6b, 0x9f, 0x35, 0xcf, 0x9a, + 0xe6, 0x8e, 0x15, 0xb9, 0x4f, 0xb3, 0xf5, 0x70, + 0xb3, 0x5b, 0x97, 0x25, 0xbd, 0x3b, 0x6c, 0x96, + 0x9a, 0xfd, 0x25, 0x14, 0x51, 0x4a, 0xf5, 0x5c, + 0x03, 0xda, 0x2c, 0x0d, 0x03, 0x41, 0xc6, 0x2a, + 0x13, 0x2c, 0x20, 0x19, 0x81, 0x4a, 0x09, 0x55, + 0x72, 0xe8, 0x5d, 0xd7, 0x0e, 0xe8, 0x13, 0xf6, + 0x72, 0x03, 0x63, 0x4b, 0x7a, 0x2b, 0x2b, 0xfb, + 0xbf, 0xa7, 0x8e, 0x38, 0xe0, 0xb2, 0x35, 0xee, + 0xb1, 0xf2, 0xaf, 0x57, 0xd7, 0x8e, 0x0e, 0x64, + 0x10, 0x64, 0xa8, 0x8b, 0x49, 0x78, 0xa9, 0xcb, + 0x8b, 0xa7, 0x1e, 0xec, 0xee, 0xe3, 0xbd, 0x31, + 0xa9, 0x75, 0x9e, 0xb8, 0xd1, 0x41, 0x88, 0x55, + 0xf5, 0x70, 0x6f, 0x54, 0x48, 0x3b, 0x4d, 0xd5, + 0xd7, 0x1c, 0xbc, 0x55, 0x22, 0xbd, 0xfe, 0xa5, + 0x14, 0x27, 0x77, 0xde, 0x55, 0x0e, 0x3f, 0xa2, + 0xff, 0x00, 0x8c, 0x56, 0xcf, 0x62, 0xa9, 0xb4, + 0x1c, 0xf1, 0x9f, 0x7c, 0xf1, 0x9f, 0x7c, 0xf1, + 0x9f, 0x7c, 0xf1, 0x9f, 0x7c, 0xf1, 0x9f, 0x7c, + 0x0a, 0xec, 0xdf, 0x25, 0x64, 0x60, 0x11, 0xda, + 0x71, 0x8e, 0x3d, 0x06, 0x8d, 0x00, 0xb8, 0xb5, + 0x34, 0x89, 0x94, 0x62, 0x9b, 0x20, 0x22, 0xa3, + 0xa1, 0xb2, 0xc6, 0x6b, 0x02, 0x81, 0xc8, 0x2e, + 0xc1, 0x8d, 0x3d, 0x74, 0x56, 0x0b, 0xc0, 0xe0, + 0x44, 0x2a, 0x32, 0x98, 0x01, 0x76, 0xae, 0x5d, + 0x2e, 0xdc, 0x85, 0xa0, 0x14, 0x03, 0x45, 0x11, + 0xde, 0xb1, 0x61, 0x6e, 0x42, 0xc5, 0x1a, 0x6d, + 0x40, 0x40, 0x69, 0x1d, 0xe7, 0x8c, 0xfb, 0xe7, + 0x17, 0xb1, 0x18, 0x0b, 0x36, 0x21, 0xb5, 0x23, + 0x75, 0xc3, 0x82, 0x4c, 0x03, 0x41, 0x5a, 0x11, + 0x70, 0x82, 0x72, 0x22, 0x33, 0x3c, 0x67, 0xdf, + 0x3c, 0x67, 0xdf, 0x3c, 0x67, 0xdf, 0x3c, 0x67, + 0xdf, 0x3c, 0x67, 0xdf, 0x3c, 0x67, 0xdf, 0x1c, + 0xc2, 0x2a, 0xad, 0x57, 0x0f, 0xed, 0xe1, 0x05, + 0x87, 0xfd, 0xc0, 0xe2, 0x96, 0x34, 0x03, 0x3d, + 0x44, 0x03, 0x53, 0x02, 0x21, 0x3f, 0xbf, 0xf3, + 0x9f, 0x2b, 0xfc, 0xe7, 0xca, 0xff, 0x00, 0x39, + 0xf2, 0xbf, 0xce, 0x7c, 0xaf, 0xf3, 0x9f, 0x2b, + 0xfc, 0xe7, 0xca, 0xff, 0x00, 0x39, 0xf2, 0xbf, + 0xce, 0x7c, 0xaf, 0xf3, 0x9f, 0x2b, 0xfc, 0xe7, + 0xca, 0xff, 0x00, 0x39, 0xf2, 0xbf, 0xce, 0x7c, + 0xaf, 0xf3, 0x9f, 0x2b, 0xfc, 0xe7, 0xca, 0xff, + 0x00, 0x39, 0xf2, 0xbf, 0xce, 0x7c, 0xaf, 0xf3, + 0x9f, 0x2b, 0xfc, 0xe7, 0xca, 0xff, 0x00, 0x39, + 0xf2, 0xbf, 0xce, 0x7c, 0xaf, 0xf3, 0x89, 0x16, + 0x41, 0x34, 0x29, 0x0a, 0xda, 0x32, 0x47, 0xd3, + 0x1c, 0x44, 0x48, 0x9d, 0x9f, 0xa5, 0x97, 0x3e, + 0xaa, 0x8d, 0x5b, 0x81, 0x0f, 0x90, 0x0e, 0x58, + 0x7f, 0x1f, 0x40, 0x12, 0xb5, 0xa1, 0xa1, 0x18, + 0x0d, 0x88, 0x37, 0xa1, 0xb1, 0x44, 0x70, 0xc5, + 0x2d, 0x86, 0xf0, 0x2d, 0x4d, 0x82, 0x31, 0x14, + 0x20, 0x99, 0x46, 0x63, 0xae, 0x05, 0x50, 0x55, + 0x42, 0x50, 0xaf, 0x00, 0x38, 0xe1, 0xe7, 0x00, + 0xa2, 0xda, 0xe9, 0x8b, 0x48, 0x9b, 0x35, 0xf4, + 0x00, 0x3f, 0x42, 0xa9, 0x60, 0x94, 0x0c, 0xde, + 0xac, 0xd9, 0x97, 0x7f, 0x56, 0xcd, 0xa1, 0x09, + 0xa0, 0x87, 0x4a, 0xe2, 0xcb, 0x1f, 0x6c, 0xa5, + 0x99, 0x33, 0x60, 0x37, 0x69, 0x74, 0x16, 0x57, + 0x9c, 0x2c, 0xa9, 0xfd, 0xc9, 0x47, 0x74, 0xa8, + 0x60, 0xf8, 0xcc, 0x4b, 0x41, 0x6a, 0xa2, 0x3e, + 0x55, 0x5d, 0x93, 0xea, 0xd9, 0xb2, 0xe6, 0xd6, + 0xc6, 0x89, 0x5d, 0x82, 0xaf, 0x2c, 0xd7, 0xa6, + 0x6d, 0xc3, 0xb9, 0xbf, 0x67, 0xaf, 0x67, 0xa0, + 0xbc, 0x0e, 0x4b, 0xd3, 0x6b, 0x8e, 0xcd, 0xe8, + 0x22, 0x53, 0xcb, 0xc0, 0xa3, 0xb1, 0x85, 0x11, + 0x3a, 0x30, 0x0a, 0xb2, 0xaa, 0x5d, 0x13, 0xc8, + 0x40, 0xe2, 0x94, 0x50, 0x52, 0x82, 0x4a, 0x5e, + 0x72, 0xcc, 0x39, 0x2a, 0x74, 0xbb, 0x6a, 0x6b, + 0xfe, 0x99, 0xd5, 0x8e, 0x17, 0xa4, 0xd9, 0xa6, + 0x8e, 0x94, 0x7a, 0xc8, 0x99, 0xd0, 0x54, 0x09, + 0xdf, 0xae, 0x07, 0x3f, 0xd4, 0x67, 0xf5, 0x5f, + 0xf1, 0x9e, 0x33, 0xb7, 0xeb, 0x27, 0x83, 0x5d, + 0x9f, 0xa0, 0xa7, 0xf6, 0x73, 0xa6, 0x41, 0x26, + 0xe3, 0xd4, 0xaf, 0xde, 0x23, 0x3e, 0x87, 0xb9, + 0x9c, 0x30, 0x8f, 0xe2, 0x7b, 0x51, 0x62, 0xb6, + 0x7e, 0xec, 0xef, 0x6c, 0xc4, 0x23, 0x1e, 0xa1, + 0xbf, 0xb6, 0x4f, 0xfe, 0xba, 0x80, 0xaa, 0xda, + 0x96, 0x12, 0x11, 0x5d, 0x98, 0x24, 0xcd, 0xf3, + 0x93, 0x3f, 0x02, 0x76, 0xa0, 0xf0, 0x28, 0xbe, + 0x21, 0x40, 0x13, 0x6a, 0xa1, 0x3a, 0x81, 0x48, + 0xb7, 0x2d, 0x89, 0x0a, 0xcc, 0x0a, 0x6c, 0x01, + 0xa0, 0x38, 0x25, 0x73, 0x7a, 0x53, 0x62, 0x1b, + 0x0f, 0xd8, 0x37, 0xf7, 0x7d, 0xff, 0x00, 0xc0, + 0x83, 0xc7, 0x76, 0xe1, 0xfe, 0x13, 0x59, 0x4e, + 0x67, 0x3a, 0x9c, 0x7d, 0x6e, 0x51, 0xed, 0x15, + 0x8a, 0xf0, 0xea, 0x86, 0x80, 0xa5, 0x88, 0x2b, + 0xa7, 0x70, 0xd9, 0xba, 0x79, 0x82, 0x79, 0x32, + 0x0e, 0xfe, 0x9f, 0x63, 0x83, 0x14, 0xa1, 0x24, + 0x5b, 0x91, 0xd0, 0xe1, 0xfb, 0x75, 0x30, 0xfd, + 0x5d, 0xfc, 0x16, 0x34, 0xa5, 0x9a, 0x37, 0x1b, + 0xd3, 0x18, 0x97, 0xde, 0xde, 0xc2, 0x20, 0x28, + 0x50, 0x24, 0xc0, 0xca, 0xa7, 0xc4, 0x0b, 0x43, + 0x62, 0x0a, 0xba, 0xa8, 0x0d, 0xc6, 0xc5, 0xd6, + 0x9b, 0x4a, 0x15, 0x2d, 0x8e, 0xb8, 0x75, 0xc5, + 0x14, 0x20, 0x70, 0x00, 0x06, 0x68, 0x3b, 0xfd, + 0x0c, 0xa3, 0xbe, 0x30, 0x22, 0xdc, 0x76, 0x52, + 0xf6, 0xc5, 0x96, 0x4e, 0x3b, 0x7e, 0xa2, 0xe1, + 0xec, 0xf5, 0xe3, 0x79, 0x7a, 0xc4, 0xa5, 0xa3, + 0x0e, 0x11, 0x2a, 0x27, 0x15, 0x2e, 0x7d, 0xe6, + 0x97, 0xd7, 0xfa, 0x19, 0x3f, 0x96, 0x51, 0xe4, + 0xfe, 0x15, 0xf0, 0x55, 0x9d, 0x5a, 0xb7, 0x8c, + 0x19, 0xf3, 0xbd, 0x54, 0x29, 0x1b, 0x81, 0x57, + 0x9f, 0xb6, 0x2d, 0x0b, 0x44, 0x0c, 0xa0, 0x8c, + 0x88, 0xfd, 0xd8, 0x17, 0x84, 0x1c, 0xd0, 0x22, + 0x07, 0xd6, 0x27, 0x44, 0x4e, 0x99, 0x39, 0x9c, + 0x96, 0xdf, 0xff, 0x00, 0x21, 0x9e, 0x37, 0xbb, + 0x1e, 0x22, 0xb3, 0x5a, 0x65, 0x3e, 0xb8, 0x41, + 0xed, 0xbf, 0xd4, 0x8c, 0x7b, 0xba, 0x7e, 0x85, + 0xd3, 0x09, 0x38, 0xf2, 0xb5, 0x55, 0x5e, 0x80, + 0x76, 0xa5, 0xd7, 0x02, 0x84, 0x94, 0xb6, 0xfc, + 0x3d, 0x05, 0x0f, 0x40, 0xc5, 0x90, 0x1e, 0xdb, + 0x5b, 0xb0, 0x70, 0x74, 0xda, 0x93, 0xa6, 0x05, + 0xea, 0xb2, 0xb7, 0x66, 0xef, 0xad, 0xcf, 0x03, + 0xdf, 0xf5, 0x4e, 0x64, 0x39, 0x9e, 0xe1, 0x23, + 0xd2, 0xeb, 0x08, 0x57, 0x61, 0x02, 0x90, 0xe8, + 0x88, 0x99, 0xff, 0x00, 0x9e, 0x4f, 0xc5, 0x56, + 0xfd, 0xf1, 0x73, 0xff, 0x00, 0xe3, 0x6f, 0x27, + 0x28, 0xd9, 0xd8, 0xfd, 0x54, 0x0c, 0x7a, 0xf3, + 0x83, 0xb8, 0x19, 0x3e, 0xae, 0x99, 0x48, 0x84, + 0x9b, 0x02, 0x60, 0x88, 0x81, 0x81, 0x23, 0xce, + 0x06, 0x34, 0x79, 0xd4, 0x01, 0xe9, 0x49, 0x7a, + 0x23, 0xb6, 0x35, 0x4b, 0xcd, 0xcd, 0xc1, 0xe8, + 0x15, 0xfb, 0x7a, 0x63, 0x5a, 0xe5, 0x75, 0x0c, + 0x7e, 0xe9, 0xfb, 0xab, 0xa6, 0x0d, 0x7e, 0x5e, + 0x89, 0x17, 0xa2, 0x75, 0xd6, 0x9e, 0xbf, 0x45, + 0x3e, 0xf7, 0xfd, 0x67, 0xfa, 0xef, 0xf8, 0xc9, + 0x26, 0x15, 0x2f, 0xdb, 0xc0, 0xa2, 0x82, 0xf4, + 0x21, 0xdc, 0x05, 0x13, 0xa7, 0x1f, 0xce, 0x7c, + 0x63, 0xf3, 0x9f, 0x18, 0xfc, 0xe7, 0xc6, 0x3f, + 0x39, 0xf1, 0x8f, 0xce, 0x01, 0x66, 0x97, 0xa5, + 0x26, 0xa8, 0x50, 0xd8, 0xf3, 0x82, 0x7f, 0xe6, + 0x4d, 0x10, 0x99, 0xd0, 0x6d, 0x1b, 0x26, 0x2b, + 0x53, 0xc0, 0x38, 0x25, 0xe6, 0xf1, 0x34, 0x37, + 0x0d, 0xb5, 0xb5, 0x04, 0x81, 0xba, 0x50, 0x9d, + 0xdd, 0xf2, 0xaa, 0xb5, 0xc4, 0x2d, 0x16, 0x6d, + 0xa4, 0xd0, 0x2a, 0x16, 0x75, 0xb8, 0x09, 0x9b, + 0x98, 0x3a, 0xc3, 0x78, 0x17, 0x44, 0xab, 0xcd, + 0xc7, 0x0a, 0x50, 0x11, 0x00, 0x06, 0x30, 0x00, + 0xed, 0xae, 0x70, 0xd9, 0x20, 0x3b, 0x4a, 0xa8, + 0x8a, 0x2c, 0x8a, 0x56, 0x38, 0x98, 0x16, 0x16, + 0x2b, 0x65, 0xda, 0x5d, 0x6d, 0x35, 0xc6, 0xda, + 0xe7, 0xc3, 0x9d, 0x20, 0x90, 0x44, 0x09, 0xf6, + 0x58, 0x58, 0x7c, 0x63, 0xf3, 0x9f, 0x18, 0xfc, + 0xe7, 0xc6, 0x3f, 0x39, 0xf1, 0x8f, 0xce, 0x7c, + 0x63, 0xf3, 0x83, 0xa2, 0x5d, 0xca, 0x34, 0x2a, + 0x94, 0x35, 0x3b, 0xe2, 0xa7, 0x10, 0x5e, 0x88, + 0x0f, 0xe0, 0x33, 0xc7, 0x76, 0xe7, 0xed, 0xb7, + 0x3b, 0xe5, 0xe3, 0x33, 0xc6, 0x65, 0xa3, 0x2c, + 0x03, 0xae, 0xe8, 0xbd, 0xda, 0x4e, 0x0d, 0x9c, + 0xe2, 0xb7, 0xd5, 0x6d, 0x5a, 0x8a, 0xa5, 0x0e, + 0x3a, 0x48, 0x72, 0xe2, 0x18, 0x0c, 0x33, 0x6d, + 0xc1, 0xd7, 0x40, 0xbe, 0xa6, 0x42, 0x7f, 0xe4, + 0xbd, 0x75, 0x6d, 0x20, 0x35, 0xd7, 0x01, 0xac, + 0x47, 0x66, 0x95, 0x1a, 0xd7, 0xd2, 0x07, 0x6c, + 0xdc, 0x96, 0xe4, 0xe8, 0x4a, 0x80, 0x44, 0xa6, + 0x0e, 0xaa, 0xac, 0xe8, 0xe2, 0x24, 0x84, 0xb4, + 0x92, 0x6a, 0x34, 0x71, 0xce, 0x17, 0xef, 0x68, + 0xe9, 0x0b, 0x54, 0x1b, 0xce, 0x27, 0x93, 0xa8, + 0x96, 0x01, 0x17, 0x4a, 0xd1, 0xd4, 0x30, 0xdb, + 0x5c, 0x1b, 0x35, 0x12, 0xac, 0x5d, 0x3b, 0xe6, + 0xe7, 0xd4, 0xbf, 0xed, 0x87, 0x13, 0xec, 0xbe, + 0x9b, 0xca, 0x46, 0x5b, 0x00, 0x34, 0x46, 0xd0, + 0x3b, 0x55, 0xa9, 0x32, 0xf7, 0x66, 0xe0, 0x4a, + 0xa2, 0x8e, 0x22, 0xb6, 0x18, 0x3a, 0xc9, 0x27, + 0xbc, 0x0b, 0x7a, 0x9f, 0xbb, 0x22, 0x6a, 0x9d, + 0xc5, 0x38, 0x83, 0xa1, 0x2a, 0xb5, 0xd1, 0x8f, + 0xa3, 0x32, 0xae, 0x81, 0x0a, 0x10, 0x06, 0x4c, + 0x36, 0xba, 0xc3, 0x15, 0xf6, 0x56, 0x85, 0x9e, + 0x9b, 0x3f, 0xb9, 0xac, 0xf1, 0x99, 0xe3, 0x33, + 0x8d, 0x7d, 0x33, 0xd1, 0x9e, 0x37, 0xbb, 0x1f, + 0xe8, 0x87, 0x2a, 0xc6, 0xe4, 0x3a, 0x85, 0xb9, + 0xde, 0x0a, 0x27, 0x13, 0xe8, 0xb6, 0x0f, 0x07, + 0x75, 0xa5, 0x55, 0x84, 0x5d, 0x69, 0xc2, 0x6c, + 0x31, 0x94, 0x60, 0x78, 0xa8, 0xae, 0x93, 0x8e, + 0x61, 0x8a, 0x58, 0xa2, 0x80, 0x7e, 0x8f, 0x6d, + 0xb1, 0x50, 0xa7, 0x62, 0xdd, 0xdc, 0x6a, 0xab, + 0x4b, 0x08, 0x96, 0xe8, 0xd4, 0x84, 0x9a, 0x93, + 0xe8, 0xb4, 0x0f, 0x14, 0x1e, 0x24, 0x85, 0x83, + 0xce, 0xf1, 0x05, 0x3f, 0x83, 0xf5, 0xf1, 0x45, + 0x14, 0x51, 0x44, 0xbc, 0x3f, 0x7c, 0x72, 0x74, + 0x08, 0xaf, 0x18, 0x16, 0xb7, 0xa5, 0x68, 0xa2, + 0x63, 0xc2, 0xed, 0x08, 0xb4, 0x07, 0xcc, 0x50, + 0x05, 0x2b, 0xbd, 0xb8, 0x9b, 0x35, 0x16, 0x84, + 0xa8, 0x97, 0xa0, 0x6d, 0x70, 0x1c, 0x01, 0x85, + 0x26, 0xa8, 0x58, 0x35, 0x04, 0x2f, 0x08, 0x91, + 0x30, 0xcc, 0x4c, 0x28, 0x9b, 0x29, 0xa8, 0x7b, + 0x45, 0xb8, 0xda, 0xd0, 0x96, 0x1a, 0xaa, 0x42, + 0xda, 0xf2, 0x3f, 0x45, 0xbc, 0x70, 0xd5, 0x2a, + 0x2f, 0xdb, 0x78, 0x5d, 0xaa, 0x42, 0xc3, 0xfa, + 0x2f, 0xf8, 0x61, 0xde, 0xff, 0x00, 0x6f, 0xa2, + 0x8b, 0xfb, 0x67, 0xa9, 0xc7, 0xea, 0x71, 0xfa, + 0x9c, 0x7e, 0xa7, 0x1f, 0xa9, 0xc7, 0xea, 0x71, + 0xfa, 0x9c, 0x7e, 0xa7, 0x1f, 0xa9, 0xc7, 0xea, + 0x71, 0xfa, 0x9c, 0x7e, 0xa7, 0x1f, 0xa9, 0xc7, + 0xea, 0x71, 0xfa, 0x9c, 0x7e, 0xa7, 0x1f, 0xa9, + 0xc7, 0xea, 0x71, 0xfa, 0x9c, 0x7e, 0xa7, 0x1c, + 0x7e, 0x37, 0x02, 0xaf, 0xd8, 0xc8, 0x67, 0x5c, + 0xb9, 0x60, 0x1b, 0x7e, 0xfd, 0x21, 0x3f, 0xe6, + 0x6d, 0xdf, 0xcd, 0x1e, 0x74, 0x0e, 0x23, 0x43, + 0xa6, 0x7c, 0xd7, 0x3e, 0x6b, 0x9f, 0x35, 0xc0, + 0x0d, 0xe3, 0x62, 0xe6, 0x04, 0x9a, 0x97, 0xd4, + 0xd5, 0x36, 0xdb, 0xac, 0xf9, 0xae, 0x7c, 0xd7, + 0x3e, 0x6b, 0x9f, 0x35, 0xcf, 0x9a, 0xe7, 0xcd, + 0x73, 0xe6, 0xb9, 0xf3, 0x5c, 0xf9, 0xae, 0x7c, + 0xd7, 0x3e, 0x6b, 0x9f, 0x35, 0xcf, 0x9a, 0xe7, + 0xcd, 0x73, 0xe6, 0xb8, 0x38, 0x06, 0x5e, 0x83, + 0xcd, 0xae, 0x04, 0xf9, 0x2b, 0x29, 0xd0, 0x63, + 0x7d, 0x3e, 0xf1, 0x43, 0xae, 0x4f, 0x57, 0xfd, + 0xd0, 0x34, 0x7a, 0x12, 0x9b, 0x2d, 0xb3, 0xe9, + 0x42, 0xfd, 0xb1, 0xb5, 0xc5, 0xba, 0x0f, 0x40, + 0xe8, 0x7a, 0x19, 0xe7, 0x73, 0xce, 0xe7, 0x9d, + 0xcf, 0x3b, 0x9e, 0x77, 0x3c, 0xee, 0x79, 0xdc, + 0xf3, 0xb9, 0xe7, 0x73, 0xce, 0xe7, 0x9d, 0xcf, + 0x3b, 0x9e, 0x77, 0x3c, 0xee, 0x79, 0xdc, 0xf3, + 0xb9, 0xe7, 0x73, 0xce, 0xe7, 0x9d, 0xcf, 0x3b, + 0x9e, 0x77, 0x11, 0x8a, 0x47, 0xad, 0x37, 0x76, + 0x47, 0xfa, 0xfb, 0x4c, 0x7d, 0x2f, 0x77, 0x22, + 0x68, 0x0c, 0x4f, 0x47, 0x05, 0xd9, 0x80, 0x3f, + 0x60, 0x26, 0x5a, 0x84, 0xba, 0xfb, 0xc0, 0x14, + 0xf5, 0xcf, 0x8c, 0x7e, 0x31, 0x5b, 0x85, 0x4a, + 0x3b, 0x0c, 0x1f, 0xbb, 0x94, 0xee, 0x8e, 0x9d, + 0xa1, 0xb8, 0xfa, 0x5c, 0x0c, 0xb1, 0x7d, 0x94, + 0x92, 0x20, 0xa2, 0x07, 0x5a, 0xec, 0xe0, 0x65, + 0x8b, 0xf1, 0x49, 0x22, 0x0a, 0x20, 0x75, 0xae, + 0xce, 0x03, 0x7a, 0x14, 0x42, 0xf0, 0xd1, 0x2c, + 0x79, 0xc9, 0x92, 0xc4, 0xb3, 0x70, 0x8e, 0xb6, + 0x9d, 0xc1, 0xd4, 0xcf, 0x8c, 0x7e, 0x33, 0xe3, + 0x1f, 0x8c, 0x27, 0xe2, 0x4c, 0x54, 0xf0, 0x04, + 0xdb, 0x8e, 0xc5, 0x0a, 0x20, 0xa7, 0x42, 0x74, + 0x88, 0xf6, 0x47, 0x17, 0x73, 0xb8, 0x9a, 0x45, + 0x3f, 0x88, 0xd7, 0x5d, 0x65, 0xc8, 0xb2, 0xb0, + 0xb0, 0x14, 0x3a, 0x87, 0xaa, 0x1c, 0xb8, 0xa4, + 0x4d, 0x8c, 0x0a, 0x68, 0xd5, 0x23, 0x49, 0xa8, + 0xe0, 0x74, 0xd6, 0x9f, 0x6e, 0xed, 0x25, 0x9b, + 0x98, 0x55, 0x02, 0x90, 0x8f, 0xb0, 0xbf, 0xb6, + 0x4c, 0x3c, 0xef, 0xdb, 0x8a, 0xc3, 0xfb, 0x38, + 0xac, 0x4d, 0x04, 0x79, 0x78, 0x21, 0x31, 0x8a, + 0x11, 0x26, 0x81, 0xfe, 0x43, 0x0b, 0x0a, 0x69, + 0x90, 0x08, 0x55, 0xb0, 0xfa, 0xe3, 0x73, 0xfd, + 0xb8, 0x40, 0x00, 0x00, 0x06, 0x37, 0x94, 0x6b, + 0x1f, 0x01, 0x88, 0x1c, 0x69, 0x4e, 0x94, 0x69, + 0x79, 0x35, 0xda, 0xcd, 0x39, 0x09, 0x38, 0x0c, + 0x62, 0xba, 0x24, 0xa2, 0x8d, 0xa8, 0x29, 0xa3, + 0x10, 0x53, 0xb8, 0x24, 0x05, 0x4a, 0x9a, 0x34, + 0x9b, 0x31, 0x3f, 0x9f, 0x38, 0xe9, 0xd8, 0x06, + 0x25, 0xef, 0x86, 0xf8, 0xa4, 0x28, 0x33, 0x47, + 0x5d, 0xb8, 0x60, 0x77, 0x7a, 0xb4, 0x64, 0x44, + 0x52, 0xd6, 0x23, 0xb4, 0x40, 0x8f, 0x45, 0xc5, + 0x67, 0x1c, 0xb6, 0xa0, 0x8e, 0x85, 0xd8, 0xf8, + 0x14, 0x10, 0x15, 0x9d, 0x89, 0x35, 0x24, 0xd0, + 0x0a, 0x34, 0xfd, 0xba, 0x63, 0x82, 0xa3, 0x72, + 0x11, 0x1e, 0x80, 0xed, 0xf7, 0xc5, 0x9a, 0xd0, + 0x85, 0xf1, 0x00, 0xaa, 0x00, 0x1d, 0xc6, 0x35, + 0x67, 0x12, 0x9a, 0x21, 0x14, 0x14, 0xa3, 0xd3, + 0xd4, 0xc3, 0x79, 0xc4, 0x35, 0x61, 0x40, 0x0c, + 0x0b, 0xa5, 0x68, 0x4d, 0xe0, 0xb7, 0xcb, 0x25, + 0x21, 0x60, 0xe9, 0x15, 0x4c, 0xe7, 0x93, 0x48, + 0xaa, 0x32, 0x28, 0xc0, 0x0e, 0xc8, 0xd9, 0x32, + 0xfb, 0x55, 0x63, 0x6b, 0x58, 0x00, 0x2b, 0x0a, + 0xde, 0x35, 0x42, 0x82, 0x6a, 0x9b, 0xc0, 0x5b, + 0xd4, 0x14, 0x75, 0x6b, 0x0f, 0x7e, 0xd4, 0xc6, + 0x76, 0xc9, 0x38, 0x00, 0x5b, 0x0a, 0x41, 0x58, + 0x34, 0x54, 0x8b, 0x43, 0x23, 0x16, 0xd0, 0x9a, + 0xdf, 0x78, 0xca, 0xf0, 0x14, 0x10, 0x83, 0x48, + 0x1a, 0xc1, 0x5a, 0x5e, 0x54, 0x64, 0xfa, 0x69, + 0xa9, 0x36, 0x7b, 0x00, 0xef, 0x9f, 0xb5, 0x44, + 0xf2, 0x7a, 0x2d, 0x39, 0x9a, 0xc4, 0x2d, 0x86, + 0xe7, 0xd7, 0x70, 0xdc, 0x7b, 0xf9, 0x0b, 0xb4, + 0x61, 0xae, 0x63, 0x3b, 0x38, 0xbb, 0xff, 0x00, + 0x0a, 0x42, 0x83, 0x41, 0xb0, 0x36, 0x3a, 0x01, + 0xb4, 0x0e, 0x40, 0x8a, 0x64, 0xd3, 0x15, 0x01, + 0x93, 0x76, 0x9c, 0xc0, 0xd4, 0xec, 0x34, 0x89, + 0x3e, 0xeb, 0x15, 0x50, 0x08, 0x04, 0x70, 0x20, + 0xd0, 0x68, 0xe8, 0x68, 0x9d, 0xcd, 0xbd, 0x3c, + 0x44, 0x58, 0xbc, 0x0a, 0x55, 0x3e, 0x86, 0x80, + 0x6d, 0x3a, 0xd2, 0xb6, 0x06, 0x47, 0xd5, 0x65, + 0xce, 0x6b, 0x61, 0xa4, 0x5b, 0x96, 0x04, 0xc8, + 0xc0, 0x46, 0xb9, 0xa9, 0xf7, 0xb9, 0x1b, 0x9e, + 0x04, 0x6b, 0xf4, 0x31, 0x22, 0x8d, 0x38, 0x79, + 0x04, 0xab, 0x52, 0x5e, 0x4b, 0xd2, 0xed, 0x44, + 0xb9, 0x1c, 0x0d, 0x24, 0x7b, 0xcd, 0xc2, 0x14, + 0xd4, 0xaa, 0x04, 0x1c, 0xb3, 0x7b, 0x1f, 0xe4, + 0xf0, 0x70, 0x04, 0x9d, 0x6e, 0x44, 0xae, 0x1a, + 0x3d, 0xa9, 0xa0, 0x83, 0x44, 0xf4, 0xd8, 0xdf, + 0xa6, 0x1f, 0x47, 0x36, 0x41, 0x37, 0x9d, 0x04, + 0x31, 0x14, 0xe4, 0x99, 0xad, 0xbf, 0xc3, 0x0e, + 0x0d, 0x47, 0xdd, 0x82, 0xf0, 0x7a, 0x32, 0x07, + 0x17, 0xab, 0x75, 0x3f, 0x55, 0x22, 0x7a, 0xfa, + 0xe3, 0xbd, 0xb6, 0x60, 0x10, 0x56, 0xa9, 0x51, + 0x22, 0x90, 0xe3, 0x0d, 0x8a, 0xb5, 0xd8, 0xde, + 0x94, 0x34, 0x81, 0xa6, 0xa6, 0x1e, 0x5c, 0x4b, + 0x42, 0xd0, 0x00, 0xd2, 0xc5, 0xb3, 0x3e, 0x9e, + 0x3f, 0xd3, 0xe8, 0xf0, 0x15, 0x3f, 0xdb, 0x84, + 0x00, 0x00, 0x00, 0xd7, 0x96, 0x6f, 0xee, 0xf6, + 0xcf, 0x19, 0x8f, 0x41, 0x89, 0x2c, 0x48, 0x17, + 0xad, 0x68, 0x1d, 0x37, 0xad, 0xb4, 0xaa, 0x1a, + 0x20, 0x81, 0xd8, 0x20, 0x07, 0xa4, 0x3a, 0x61, + 0x7c, 0x6e, 0xc3, 0x58, 0x51, 0x24, 0x89, 0x70, + 0xc0, 0x91, 0x80, 0x05, 0xbb, 0x72, 0x4d, 0x75, + 0x3a, 0x0b, 0x92, 0xdf, 0x85, 0xa4, 0x94, 0x8a, + 0xd9, 0x49, 0x38, 0x59, 0xbd, 0x16, 0x11, 0xf1, + 0x0b, 0x17, 0x82, 0xef, 0x0e, 0x1a, 0x8e, 0x81, + 0x0e, 0x52, 0x1f, 0x65, 0xb8, 0xea, 0x53, 0xfa, + 0x48, 0x48, 0x07, 0x14, 0x79, 0xaa, 0x02, 0xb0, + 0x03, 0x45, 0xbd, 0xa0, 0x7f, 0x0c, 0x25, 0x63, + 0x36, 0x5f, 0x01, 0x38, 0x5e, 0x6b, 0x9c, 0x03, + 0xdb, 0xb4, 0xb0, 0x05, 0x55, 0x03, 0x1e, 0xe8, + 0x6f, 0x4c, 0xb6, 0x71, 0x25, 0x44, 0x4d, 0xab, + 0xbc, 0x18, 0x4b, 0x50, 0x24, 0x11, 0x0e, 0x9d, + 0x80, 0x02, 0xf0, 0xfa, 0x65, 0x84, 0x2d, 0xb7, + 0x25, 0xab, 0x6a, 0xcd, 0xbc, 0x1a, 0xe7, 0x34, + 0xb1, 0x91, 0x09, 0x01, 0x08, 0x79, 0xed, 0x67, + 0x6c, 0x1f, 0x25, 0xb5, 0x48, 0xa2, 0x41, 0xbd, + 0x0c, 0xd3, 0xde, 0xe2, 0x82, 0x3b, 0xa6, 0x02, + 0x4d, 0xb9, 0x77, 0x64, 0xfa, 0x82, 0x6d, 0x24, + 0xac, 0x81, 0xa1, 0x30, 0xde, 0xb7, 0x8f, 0x23, + 0xb0, 0x00, 0x12, 0x0a, 0xd3, 0x7b, 0xc1, 0x2d, + 0x47, 0x77, 0x94, 0x69, 0x59, 0x4d, 0x82, 0x6f, + 0x14, 0xda, 0xcb, 0x7b, 0x5a, 0xa6, 0xeb, 0xb3, + 0x9c, 0x64, 0x47, 0xf5, 0x66, 0x9f, 0xd7, 0xd0, + 0xea, 0x1d, 0x26, 0xb6, 0x43, 0x91, 0x32, 0xc1, + 0x46, 0x14, 0x4a, 0x69, 0xd2, 0x7a, 0x38, 0xaf, + 0x88, 0x10, 0x51, 0xc5, 0x6e, 0xe0, 0x80, 0x50, + 0x0a, 0xe5, 0x5f, 0x2a, 0x82, 0xbc, 0xc2, 0xea, + 0xc2, 0xe7, 0x1d, 0xb1, 0x9a, 0x39, 0x9d, 0x9a, + 0x8d, 0x22, 0x64, 0xcc, 0xb3, 0x80, 0xc8, 0x35, + 0xba, 0xbd, 0x0a, 0xac, 0xde, 0x31, 0x01, 0xce, + 0x02, 0x08, 0xb8, 0x36, 0x58, 0xdd, 0x05, 0x94, + 0x4f, 0x9f, 0x39, 0xbe, 0x60, 0x18, 0xe1, 0x1b, + 0x24, 0x24, 0xdd, 0xcf, 0xe8, 0x60, 0xc1, 0xd4, + 0x9a, 0x9c, 0xdf, 0x5c, 0x21, 0x73, 0x86, 0x27, + 0xec, 0xed, 0x0d, 0xdd, 0x2f, 0x5d, 0xe7, 0x4a, + 0x5f, 0x0f, 0x09, 0x55, 0x3a, 0x36, 0xba, 0x37, + 0xcd, 0x70, 0x5a, 0x02, 0xd8, 0xb1, 0x15, 0x75, + 0x12, 0x28, 0xe4, 0x34, 0x05, 0x80, 0x32, 0x48, + 0x13, 0xc4, 0x95, 0x25, 0xde, 0x15, 0x18, 0x26, + 0x47, 0xed, 0xb3, 0x53, 0x41, 0xa9, 0xf7, 0xc5, + 0xd0, 0x49, 0x60, 0x8b, 0xb6, 0x08, 0xca, 0x1b, + 0xa5, 0x9c, 0xee, 0x0c, 0x37, 0xf4, 0x10, 0x40, + 0x49, 0x0d, 0x7a, 0xe3, 0x6c, 0x16, 0xb2, 0x0e, + 0x01, 0x42, 0x20, 0x23, 0xd6, 0xde, 0xa1, 0xd3, + 0x0c, 0x60, 0x54, 0x4d, 0xe4, 0x87, 0x4b, 0xa2, + 0x33, 0x1d, 0x8d, 0xbe, 0x61, 0xad, 0x2c, 0x0b, + 0x64, 0x03, 0xb9, 0xa3, 0x29, 0xa0, 0xea, 0x03, + 0x42, 0xaa, 0x01, 0xf5, 0x46, 0x15, 0x39, 0x2e, + 0x29, 0xac, 0x14, 0xcf, 0xba, 0xe7, 0x98, 0xfb, + 0xe2, 0xc5, 0x1f, 0x28, 0x14, 0xd3, 0x57, 0x4f, + 0xd1, 0x7f, 0xb9, 0x2c, 0x11, 0x28, 0xed, 0x70, + 0xa0, 0x63, 0xea, 0x07, 0x21, 0x43, 0x37, 0x03, + 0x77, 0x27, 0xdb, 0x8c, 0xf9, 0x56, 0x1e, 0xf7, + 0x42, 0x31, 0x44, 0x74, 0x89, 0xc2, 0xe5, 0xc8, + 0x10, 0xca, 0xb3, 0xe5, 0x59, 0xf2, 0xac, 0xf9, + 0x56, 0x7c, 0xab, 0x3e, 0x55, 0x9f, 0x2a, 0xcf, + 0x95, 0x67, 0xca, 0xb3, 0xe5, 0x59, 0xf2, 0xac, + 0x0e, 0x82, 0x21, 0x2a, 0x5e, 0x88, 0x5f, 0xd8, + 0xe2, 0xed, 0x5d, 0xfb, 0xb3, 0xe5, 0x59, 0xf2, + 0xac, 0xf9, 0x56, 0x7c, 0xab, 0x3e, 0x55, 0x82, + 0xbe, 0xeb, 0x2a, 0x61, 0xe8, 0x0d, 0x5d, 0xfd, + 0x48, 0x13, 0xff, 0x00, 0x67, 0xf8, 0xce, 0x3b, + 0x61, 0x01, 0xcc, 0xad, 0x21, 0x16, 0x19, 0x16, + 0xc1, 0x40, 0x07, 0x22, 0x82, 0xde, 0x9c, 0x1e, + 0xb8, 0x63, 0x31, 0xb0, 0x1b, 0x0a, 0xd1, 0x5b, + 0x61, 0xcf, 0xf8, 0xbc, 0x7f, 0xa7, 0xfb, 0xc1, + 0x50, 0xff, 0x00, 0x7c, 0xff, 0x00, 0x86, 0x7a, + 0x00, 0x3f, 0xa8, 0xd8, 0xef, 0x97, 0xf9, 0xcf, + 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, + 0xcf, 0x19, 0xf7, 0xcf, 0x19, 0xf7, 0xc1, 0xf6, + 0xb0, 0x7d, 0x59, 0x51, 0x81, 0xdd, 0x70, 0x89, + 0xc4, 0xbd, 0x5a, 0x06, 0x93, 0xb2, 0x85, 0xec, + 0x71, 0x80, 0x78, 0xba, 0xca, 0x20, 0x9c, 0xe8, + 0xed, 0x2c, 0xe9, 0x8c, 0x62, 0xa5, 0x02, 0x30, + 0x0a, 0xa4, 0x8e, 0x47, 0x66, 0x2d, 0x56, 0x21, + 0x38, 0x05, 0xc2, 0xa9, 0x81, 0xcb, 0xda, 0x70, + 0x06, 0x18, 0x8b, 0x87, 0x8a, 0x83, 0x8b, 0x07, + 0x00, 0x00, 0x00, 0x03, 0x5b, 0x5a, 0x02, 0x48, + 0x74, 0x44, 0x7e, 0x9b, 0xfe, 0xd8, 0xdc, 0x80, + 0x43, 0x3e, 0xf0, 0x2b, 0x0a, 0x49, 0x74, 0xd7, + 0x95, 0x93, 0xa3, 0xef, 0xc9, 0x3d, 0x17, 0xdb, + 0x8e, 0xd2, 0xd4, 0xf7, 0xfc, 0x83, 0x3c, 0x67, + 0xdf, 0x3c, 0x67, 0xdf, 0x3c, 0x67, 0xdf, 0x3c, + 0x67, 0xdf, 0x3c, 0x67, 0xdf, 0x0c, 0x8c, 0x45, + 0x38, 0x9f, 0xce, 0x35, 0x0a, 0xaa, 0x15, 0x7f, + 0xc8, 0xdc, 0x12, 0xdd, 0x07, 0xb3, 0x86, 0xe8, + 0xde, 0xba, 0xe9, 0x96, 0xc1, 0x5a, 0xe1, 0x32, + 0x64, 0x25, 0x81, 0xfe, 0x31, 0x9d, 0x20, 0x9c, + 0xba, 0x5f, 0xba, 0xbf, 0xe2, 0xf1, 0xfe, 0x9f, + 0x58, 0xaa, 0x64, 0x35, 0xca, 0xe5, 0x72, 0xb9, + 0x5c, 0xae, 0x57, 0x2b, 0x95, 0xca, 0xe5, 0x72, + 0xb9, 0x5c, 0xae, 0x57, 0x2b, 0x95, 0xca, 0xe5, + 0x72, 0xb9, 0x5c, 0xae, 0x57, 0x2b, 0x95, 0xca, + 0xe7, 0xf6, 0x4f, 0xf8, 0x60, 0x6b, 0x34, 0x5e, + 0x19, 0xf7, 0x7f, 0x6f, 0xd4, 0x2c, 0xa0, 0xca, + 0xb4, 0x03, 0xaa, 0xa8, 0x61, 0x15, 0x50, 0x2e, + 0x5b, 0x3d, 0x4e, 0xa4, 0xc7, 0x0d, 0x03, 0x34, + 0xc0, 0x81, 0x5b, 0xb4, 0x0d, 0xf4, 0x31, 0xe8, + 0xe0, 0xcb, 0x35, 0x3f, 0xb0, 0xf5, 0xd2, 0xe4, + 0xd1, 0xec, 0xcf, 0x08, 0xc9, 0x00, 0x81, 0xda, + 0x64, 0x3e, 0xe2, 0xac, 0x00, 0xac, 0x8d, 0x80, + 0xe2, 0xb8, 0xce, 0x34, 0x5c, 0x21, 0xb9, 0x29, + 0x6d, 0x7c, 0xea, 0xa8, 0x60, 0xe1, 0xfd, 0x9c, + 0x9e, 0xc6, 0xc0, 0xe0, 0x3b, 0xc2, 0xe0, 0x1f, + 0x7d, 0x17, 0x54, 0x49, 0xf7, 0x3a, 0xeb, 0x0c, + 0x59, 0x8b, 0x4e, 0x51, 0x67, 0xf3, 0xfa, 0xc7, + 0x5a, 0x26, 0xa6, 0xc8, 0xf8, 0xf5, 0xfa, 0x76, + 0xaa, 0x88, 0xad, 0xd3, 0x66, 0xb3, 0xc9, 0xff, + 0x00, 0xac, 0xf2, 0x7f, 0xeb, 0x3c, 0x9f, 0xfa, + 0xcf, 0x27, 0xfe, 0xb3, 0xc9, 0xff, 0x00, 0xac, + 0xf2, 0x7f, 0xeb, 0x3c, 0x9f, 0xfa, 0xcf, 0x27, + 0xfe, 0xb3, 0xc9, 0xff, 0x00, 0xac, 0xf2, 0x7f, + 0xeb, 0x3c, 0x9f, 0xfa, 0xcf, 0x27, 0xfe, 0xb3, + 0xc9, 0xff, 0x00, 0xac, 0xf2, 0x7f, 0xeb, 0x3c, + 0x9f, 0xfa, 0xcf, 0x27, 0xfe, 0xb3, 0xc9, 0xff, + 0x00, 0xac, 0xf2, 0x7f, 0xeb, 0x3c, 0x9f, 0xfa, + 0xcf, 0x27, 0xfe, 0xb3, 0xc9, 0xff, 0x00, 0xac, + 0xea, 0xa5, 0x3a, 0xa8, 0x35, 0xf7, 0x3e, 0x8f, + 0x37, 0x73, 0xfd, 0xb0, 0x40, 0x00, 0x00, 0x0d, + 0xfe, 0xe9, 0xff, 0x00, 0x0c, 0xde, 0x8a, 0x84, + 0x9c, 0x80, 0x1a, 0x2e, 0x43, 0xa9, 0x95, 0x2e, + 0xd3, 0x54, 0x14, 0xfb, 0x71, 0xff, 0x00, 0x1d, + 0x1a, 0x34, 0x68, 0xd1, 0xa3, 0x46, 0x8d, 0x1a, + 0x22, 0x60, 0xa4, 0xf5, 0x84, 0xea, 0xa1, 0x9a, + 0xa7, 0x32, 0x40, 0xfa, 0x51, 0xa2, 0xae, 0x80, + 0x99, 0x36, 0x93, 0x5d, 0x47, 0x6f, 0xa0, 0x10, + 0x03, 0xf5, 0x51, 0xa3, 0x46, 0x8d, 0x17, 0xbd, + 0xd1, 0x69, 0xd4, 0x40, 0x27, 0xbb, 0x67, 0x6c, + 0x23, 0x03, 0x5b, 0x65, 0x82, 0xf5, 0x7f, 0x3f, + 0xe3, 0xbb, 0xf8, 0xfd, 0x14, 0x74, 0x52, 0xcb, + 0x65, 0x31, 0xa5, 0x17, 0x68, 0x37, 0x94, 0x88, + 0x1c, 0xe8, 0xc6, 0x1c, 0xb1, 0x8e, 0x50, 0x1e, + 0xc0, 0x6f, 0x81, 0x45, 0x8e, 0x0e, 0xaa, 0xb4, + 0x61, 0x22, 0xc5, 0x82, 0x82, 0x54, 0xd6, 0xf5, + 0xfe, 0x2f, 0x1f, 0xe9, 0xf4, 0x58, 0xba, 0xd6, + 0x06, 0x99, 0x4c, 0xa6, 0x53, 0x29, 0x94, 0xca, + 0x65, 0x32, 0x99, 0x4c, 0xa6, 0x53, 0x29, 0x94, + 0xca, 0x65, 0x32, 0x99, 0x4c, 0xa6, 0x53, 0x29, + 0x94, 0xca, 0x65, 0x32, 0x99, 0x4c, 0x76, 0x02, + 0x0a, 0x68, 0x34, 0x55, 0xf4, 0x0d, 0xfe, 0xd8, + 0xc3, 0x92, 0x96, 0x0e, 0x67, 0xd3, 0xd5, 0x73, + 0xe1, 0x32, 0xf8, 0x4c, 0xbe, 0x13, 0x2f, 0x84, + 0xcb, 0xe1, 0x32, 0xf8, 0x4c, 0xbe, 0x13, 0x2f, + 0x84, 0xcb, 0xe1, 0x32, 0xf8, 0x4c, 0xbe, 0x13, + 0x2f, 0x84, 0xcb, 0xe1, 0x32, 0xf8, 0x4c, 0xbe, + 0x13, 0x2f, 0x84, 0xcb, 0xe1, 0x32, 0xf8, 0x4c, + 0xbe, 0x13, 0x2f, 0x84, 0xc8, 0x74, 0x43, 0xe4, + 0x6d, 0x3d, 0x1b, 0xac, 0x8e, 0x84, 0xbe, 0xaf, + 0x07, 0x52, 0xe2, 0xbd, 0x7f, 0xaf, 0xf1, 0xdc, + 0x85, 0xe3, 0x48, 0x85, 0xbc, 0xae, 0x0a, 0x95, + 0xe8, 0x57, 0xa6, 0x3a, 0xe8, 0x09, 0x55, 0x76, + 0x84, 0xd2, 0xdb, 0xde, 0x01, 0x57, 0x03, 0xa0, + 0xc7, 0x6f, 0x21, 0xe6, 0xc2, 0x1d, 0x15, 0x74, + 0x7f, 0x8b, 0xc7, 0xfa, 0x7d, 0x16, 0x7f, 0xc7, + 0xfd, 0xb8, 0x2a, 0x28, 0xc9, 0xca, 0x1b, 0x4c, + 0xf1, 0xb9, 0xe3, 0x73, 0xc6, 0xe7, 0x8d, 0xcf, + 0x1b, 0x9e, 0x37, 0x3c, 0x6e, 0x78, 0xdc, 0xbd, + 0xa7, 0x6a, 0x18, 0x49, 0xf5, 0x6c, 0x39, 0xc4, + 0x7d, 0x16, 0xf4, 0x23, 0xea, 0xf4, 0xf5, 0x39, + 0x11, 0xca, 0x32, 0x70, 0xa5, 0x00, 0xd2, 0x4a, + 0x3a, 0x38, 0xfc, 0xd1, 0x6c, 0x2a, 0x6d, 0x01, + 0x43, 0xa6, 0x20, 0x96, 0xd9, 0xd0, 0xc5, 0xba, + 0xe9, 0x37, 0x67, 0x18, 0x9b, 0x16, 0x27, 0x9e, + 0x81, 0x0f, 0xdf, 0x25, 0x33, 0x76, 0x42, 0x09, + 0x40, 0x4d, 0x23, 0xfb, 0xe7, 0x8d, 0xcf, 0x1b, + 0x9e, 0x37, 0x3c, 0x6e, 0x78, 0xdc, 0xf1, 0xb9, + 0xe3, 0x71, 0xd4, 0xdc, 0x3d, 0x14, 0x23, 0xfb, + 0x57, 0xf3, 0xf4, 0xd5, 0x38, 0x86, 0xf2, 0x5d, + 0xbd, 0x73, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, + 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, + 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, + 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, + 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, + 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, + 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, + 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, 0xb3, 0xc3, 0xf8, + 0xb2, 0x15, 0xd1, 0xc0, 0x54, 0x16, 0x0e, 0xdf, + 0x5b, 0xfc, 0x7f, 0xdb, 0x83, 0x8d, 0xa5, 0x0f, + 0xf0, 0x8e, 0xee, 0xee, 0xee, 0xe8, 0xa9, 0x54, + 0x75, 0xb9, 0xf1, 0x96, 0x89, 0xcd, 0x70, 0x68, + 0x1d, 0xca, 0x87, 0x47, 0x28, 0xe0, 0x39, 0xa5, + 0xca, 0xb6, 0x1b, 0xaf, 0x39, 0xbd, 0xe1, 0xc2, + 0x5a, 0x05, 0xe0, 0x00, 0x8d, 0x03, 0xeb, 0x95, + 0x9b, 0xd3, 0xf9, 0x09, 0x6f, 0xf0, 0xcd, 0xff, + 0x00, 0xb8, 0x32, 0x72, 0x0e, 0x42, 0x6b, 0x48, + 0x7a, 0x61, 0x63, 0x43, 0x0f, 0xf0, 0x0e, 0xee, + 0xee, 0xee, 0xc7, 0x08, 0x37, 0xfe, 0x0a, 0xe7, + 0xa4, 0x29, 0xc2, 0x5b, 0x0c, 0x41, 0xd5, 0x54, + 0x62, 0x23, 0x95, 0xa7, 0x1f, 0xcd, 0x08, 0x20, + 0x08, 0x19, 0x42, 0x51, 0x0b, 0x90, 0xb8, 0xb7, + 0x62, 0x70, 0x4f, 0x60, 0x1c, 0x9a, 0x83, 0x33, + 0x76, 0x32, 0x32, 0x41, 0x1c, 0xc2, 0xce, 0xc0, + 0x5d, 0x0a, 0xb8, 0x22, 0xb1, 0xb5, 0x1c, 0x6c, + 0x72, 0x10, 0x46, 0xba, 0x70, 0xcb, 0x59, 0x34, + 0xc8, 0x4d, 0x28, 0x02, 0x84, 0x22, 0xc8, 0xb3, + 0x18, 0x5f, 0x66, 0x91, 0x5a, 0x09, 0x62, 0xbf, + 0x7c, 0x16, 0x12, 0x0e, 0x90, 0xb8, 0x00, 0x89, + 0xca, 0x9a, 0x22, 0x23, 0x05, 0x03, 0xc4, 0x00, + 0xc4, 0x80, 0x22, 0x94, 0x05, 0xc4, 0xd6, 0x94, + 0x9d, 0x09, 0x30, 0x0d, 0x10, 0x4a, 0x59, 0x81, + 0x79, 0xd6, 0xe1, 0x03, 0x15, 0x20, 0x97, 0x67, + 0x23, 0x44, 0x11, 0x3f, 0x57, 0x8f, 0xf4, 0xfa, + 0xdf, 0x14, 0xff, 0x00, 0x6c, 0x20, 0x00, 0x00, + 0x04, 0xc5, 0x2a, 0x39, 0x5c, 0x07, 0xef, 0xc7, + 0xef, 0x89, 0xb9, 0x60, 0xa2, 0x27, 0x23, 0x9f, + 0x67, 0xf8, 0xcf, 0xb3, 0xfc, 0x67, 0xd9, 0xfe, + 0x33, 0xec, 0xff, 0x00, 0x19, 0xf6, 0x7f, 0x8c, + 0xfb, 0x3f, 0xc6, 0x7d, 0x9f, 0xe3, 0x18, 0x16, + 0xa1, 0xda, 0x0b, 0x6a, 0xf2, 0xbd, 0x70, 0x58, + 0x89, 0x0d, 0xc9, 0xc4, 0x7a, 0x4e, 0xc6, 0xb1, + 0x4d, 0x42, 0x1b, 0x24, 0xb9, 0x46, 0x29, 0x51, + 0x77, 0x82, 0xc9, 0xc0, 0x86, 0xce, 0x2a, 0x16, + 0x3a, 0x55, 0x99, 0x40, 0x84, 0x62, 0x0a, 0xda, + 0xae, 0x0a, 0x72, 0x99, 0x64, 0x08, 0x3b, 0xaa, + 0x01, 0x42, 0x69, 0xdc, 0xf4, 0xc5, 0x20, 0x32, + 0x5d, 0xc1, 0x4f, 0x58, 0x33, 0xec, 0xff, 0x00, + 0x19, 0xf6, 0x7f, 0x8c, 0xfb, 0x3f, 0xc6, 0x7d, + 0x9f, 0xe3, 0x3e, 0xcf, 0xf1, 0x9f, 0x67, 0xf8, + 0xcf, 0xb3, 0xfc, 0x65, 0xde, 0x02, 0x53, 0x98, + 0x01, 0xea, 0x42, 0xfd, 0x04, 0xbf, 0xea, 0xcb, + 0x04, 0xe9, 0x2b, 0x82, 0xec, 0xd9, 0x42, 0xe9, + 0x48, 0xcb, 0x71, 0x83, 0x45, 0x91, 0x06, 0xee, + 0xb0, 0x15, 0x8d, 0x2b, 0x92, 0x3c, 0xde, 0x02, + 0xea, 0x82, 0xb7, 0x11, 0xec, 0x30, 0x6d, 0xae, + 0x35, 0x76, 0x84, 0x29, 0x35, 0x1a, 0x9b, 0x97, + 0x06, 0x66, 0x11, 0x8c, 0x95, 0x80, 0xd0, 0x69, + 0xd9, 0x46, 0x7e, 0xf0, 0x21, 0x2b, 0xde, 0x54, + 0x3a, 0x09, 0xd2, 0x93, 0x4a, 0x89, 0x79, 0x65, + 0x87, 0x2c, 0x36, 0xce, 0x31, 0x68, 0x7a, 0x8f, + 0x27, 0x51, 0x6f, 0xee, 0x1c, 0xb8, 0xc9, 0xc7, + 0xbf, 0x3c, 0x30, 0x0d, 0x6b, 0x23, 0x67, 0xa4, + 0xe0, 0x59, 0x29, 0x30, 0x15, 0x8d, 0x1d, 0x14, + 0xea, 0x06, 0x25, 0xf0, 0x15, 0x36, 0xef, 0x9f, + 0xd4, 0x1a, 0x74, 0xfc, 0x3f, 0x41, 0x9f, 0x9b, + 0xfe, 0xd8, 0x20, 0x00, 0x00, 0x03, 0x9e, 0x31, + 0x08, 0x8c, 0x22, 0x38, 0x32, 0x28, 0xd8, 0xba, + 0xc5, 0x9b, 0x7a, 0x39, 0xff, 0x00, 0x56, 0x85, + 0x0a, 0x14, 0x28, 0x50, 0xa1, 0x42, 0x85, 0x0a, + 0x14, 0x28, 0x50, 0xa1, 0x42, 0x85, 0x0a, 0x14, + 0x0d, 0xda, 0xdc, 0x5f, 0xe4, 0x2f, 0x2b, 0x42, + 0xfe, 0xd2, 0x0b, 0x5a, 0xbb, 0x76, 0xf7, 0x7e, + 0x9a, 0xdd, 0x6f, 0xed, 0x45, 0x55, 0xd3, 0x56, + 0x78, 0x17, 0xbe, 0x78, 0x17, 0xbe, 0x78, 0x17, + 0xbe, 0x78, 0x17, 0xbe, 0x78, 0x17, 0xbe, 0x78, + 0x17, 0xbe, 0x17, 0xa0, 0x15, 0x7b, 0xd7, 0x64, + 0x3a, 0x08, 0x9d, 0x13, 0x12, 0x2b, 0x2e, 0xd5, + 0xd9, 0xfd, 0xe7, 0x81, 0x7b, 0xe7, 0x81, 0x7b, + 0xe7, 0x81, 0x7b, 0xe7, 0x81, 0x7b, 0xe7, 0x81, + 0x7b, 0xe7, 0x81, 0x7b, 0xe7, 0x81, 0x7b, 0xe7, + 0x81, 0x7b, 0xe7, 0x81, 0x7b, 0xe7, 0x81, 0x7b, + 0xe7, 0x81, 0x7b, 0xe7, 0x81, 0x7b, 0xe7, 0x81, + 0x7b, 0xe0, 0x7c, 0xa0, 0xf7, 0x82, 0x87, 0x49, + 0xbb, 0xe8, 0x3f, 0xdc, 0x7d, 0x0f, 0xf6, 0x4f, + 0xf8, 0x67, 0x8c, 0xed, 0xfa, 0x5d, 0x4b, 0x53, + 0xe8, 0x21, 0x0b, 0xd8, 0x70, 0xb9, 0x5c, 0x84, + 0xb5, 0x5a, 0x08, 0x6c, 0x74, 0x03, 0xa7, 0xa5, + 0xc7, 0xac, 0x90, 0xa8, 0x84, 0x64, 0xd8, 0x00, + 0x21, 0xe6, 0x37, 0x19, 0x4d, 0xb7, 0xdf, 0x72, + 0x29, 0x06, 0x8b, 0x79, 0x76, 0x98, 0x34, 0x9e, + 0x04, 0xd1, 0x15, 0x1a, 0xa5, 0x6a, 0x4c, 0xb5, + 0x82, 0xc1, 0x4d, 0xb4, 0x80, 0x11, 0x04, 0x85, + 0xe9, 0x02, 0xc8, 0x79, 0x19, 0x81, 0x60, 0x02, + 0x59, 0x4b, 0x64, 0xc4, 0xc4, 0xdc, 0xa1, 0xd9, + 0x5a, 0x78, 0x88, 0x3a, 0x42, 0x0d, 0xf4, 0x09, + 0x65, 0xe7, 0xac, 0xf6, 0x7a, 0x8d, 0xe5, 0xc1, + 0xdb, 0x0a, 0x51, 0xe0, 0x4d, 0x10, 0x70, 0xd1, + 0x41, 0x90, 0x70, 0x7f, 0x39, 0xf2, 0xec, 0x80, + 0x94, 0xe3, 0xd5, 0x1c, 0x1f, 0x4c, 0x5a, 0x61, + 0x58, 0x32, 0x28, 0x6d, 0x2f, 0x62, 0x7f, 0x8f, + 0x80, 0x64, 0xe6, 0xa1, 0xe4, 0xcd, 0x84, 0xd0, + 0x98, 0xb7, 0x66, 0xf5, 0x1e, 0x6e, 0xd8, 0x97, + 0x52, 0xad, 0x8c, 0x09, 0x22, 0x5c, 0x29, 0x5c, + 0x9c, 0xc6, 0x86, 0xc9, 0xc3, 0xbc, 0x37, 0xb7, + 0x7c, 0x1e, 0x2d, 0xf8, 0xb5, 0x0e, 0x52, 0x92, + 0xf1, 0x5d, 0xf0, 0x1c, 0x6d, 0x96, 0x88, 0x20, + 0xbc, 0x10, 0xe8, 0x52, 0xe5, 0x9c, 0xdd, 0xdd, + 0x27, 0x3c, 0x84, 0x8b, 0xa9, 0x39, 0x33, 0x36, + 0x08, 0x23, 0xc4, 0x12, 0x15, 0x2a, 0xad, 0x53, + 0x82, 0xae, 0x5e, 0x1c, 0x21, 0x47, 0xa8, 0xc3, + 0x74, 0x1a, 0x0d, 0x14, 0x33, 0x9d, 0x3d, 0xc0, + 0x07, 0xac, 0x09, 0x04, 0x1c, 0x82, 0x4c, 0x0e, + 0x77, 0xa2, 0x2c, 0xd6, 0x71, 0x48, 0x81, 0x67, + 0x01, 0x15, 0x07, 0xf3, 0x13, 0x41, 0x15, 0xe8, + 0x2b, 0xa5, 0x99, 0x29, 0xc2, 0x81, 0x31, 0x0a, + 0xd8, 0x74, 0x00, 0xd8, 0xb4, 0x2c, 0x70, 0x02, + 0x0a, 0x4d, 0xb3, 0x69, 0x94, 0x0e, 0x48, 0x99, + 0x17, 0xc8, 0xc4, 0x99, 0xa2, 0xa0, 0xc9, 0x45, + 0x52, 0x08, 0xdc, 0x6d, 0x7a, 0xbe, 0x0d, 0x20, + 0x6c, 0xd0, 0x5e, 0x22, 0xa6, 0xe5, 0x7f, 0xf8, + 0x33, 0xdb, 0xa1, 0xfe, 0xf9, 0xff, 0x00, 0x0c, + 0xd2, 0xa1, 0x5f, 0x16, 0x35, 0xfd, 0xc7, 0x7d, + 0xfd, 0x3f, 0x49, 0x19, 0xa7, 0x66, 0xda, 0x15, + 0x21, 0x38, 0x2b, 0x53, 0x58, 0xec, 0xb4, 0xe9, + 0x04, 0x55, 0xa4, 0xc5, 0x22, 0x05, 0x26, 0x2d, + 0xbf, 0x31, 0x70, 0x28, 0x90, 0x3a, 0x72, 0x8e, + 0xcb, 0x8c, 0x64, 0xf2, 0xb4, 0x18, 0x16, 0x9e, + 0x00, 0xf0, 0x57, 0x68, 0xc0, 0x5a, 0x81, 0x0c, + 0xaa, 0x08, 0x86, 0xd2, 0xc4, 0xe3, 0x78, 0x7e, + 0x2f, 0x0b, 0xcc, 0x06, 0x92, 0x50, 0xb3, 0x66, + 0xde, 0x85, 0x30, 0x28, 0xad, 0xf1, 0x72, 0xb8, + 0x61, 0xa1, 0x76, 0xc3, 0x8b, 0x9c, 0x4a, 0xb7, + 0x44, 0x00, 0x0c, 0x6b, 0x2e, 0xb8, 0xce, 0x63, + 0xff, 0x00, 0xc8, 0x15, 0xcd, 0x01, 0xda, 0x2d, + 0xe0, 0x99, 0x33, 0x53, 0x23, 0x5f, 0xae, 0x00, + 0xc3, 0xcc, 0x35, 0x97, 0x46, 0xcc, 0x6e, 0xe4, + 0xd1, 0x47, 0x0b, 0xbf, 0x5e, 0x3b, 0x3d, 0xcc, + 0x20, 0x59, 0x02, 0x45, 0x34, 0x57, 0xf5, 0x2c, + 0x32, 0xf1, 0x43, 0x21, 0x3b, 0xa2, 0xc7, 0x8b, + 0x3e, 0x9a, 0x05, 0x60, 0xea, 0xe1, 0xdb, 0x45, + 0x3b, 0xef, 0xb7, 0xe8, 0xa9, 0xbd, 0x17, 0x0b, + 0x64, 0x4d, 0x02, 0x6d, 0xf4, 0x32, 0x95, 0x86, + 0x72, 0x32, 0x22, 0x54, 0x02, 0x47, 0x85, 0xda, + 0xa9, 0xbc, 0xae, 0xae, 0x01, 0x53, 0xf7, 0x09, + 0xfb, 0xe0, 0xac, 0xa1, 0xe3, 0xd3, 0xb4, 0x0d, + 0x8a, 0x5a, 0xf5, 0xc2, 0x9e, 0x79, 0x52, 0xca, + 0x0e, 0xf0, 0x11, 0x05, 0xd2, 0x71, 0xfc, 0xa4, + 0xec, 0x22, 0xab, 0x24, 0x16, 0x24, 0x3d, 0x46, + 0x18, 0xb3, 0x84, 0x03, 0x6e, 0x28, 0x00, 0x6c, + 0xe9, 0xbd, 0xb1, 0xf5, 0x91, 0x09, 0x2b, 0x09, + 0x40, 0x84, 0x11, 0x86, 0xf4, 0x5d, 0xf6, 0xa0, + 0x38, 0x4f, 0x73, 0xaa, 0x88, 0xad, 0xa0, 0x63, + 0xb9, 0x5b, 0x0e, 0xf0, 0x81, 0xe9, 0x11, 0x8c, + 0x1e, 0x7a, 0x41, 0xfd, 0x19, 0x38, 0xb5, 0x35, + 0xae, 0x97, 0xed, 0x8c, 0x42, 0x26, 0x03, 0xb1, + 0x3b, 0x71, 0x6d, 0x72, 0xf7, 0x30, 0x8e, 0x41, + 0xf7, 0x82, 0xee, 0x0d, 0x69, 0x5d, 0xd0, 0x56, + 0x55, 0xd9, 0x9c, 0x05, 0x54, 0xd2, 0x08, 0xa4, + 0x90, 0xe1, 0xc0, 0xf2, 0x7b, 0x01, 0x20, 0x02, + 0x96, 0x3b, 0x8b, 0xfa, 0x34, 0xa2, 0x60, 0x1d, + 0x92, 0x73, 0x15, 0xa3, 0xd4, 0x47, 0xeb, 0x14, + 0x60, 0x30, 0xc8, 0x64, 0x32, 0x19, 0x0c, 0x86, + 0x43, 0x21, 0x90, 0xc8, 0x64, 0x32, 0x19, 0x0c, + 0x86, 0x43, 0x21, 0x90, 0xc8, 0x64, 0x32, 0x19, + 0x0c, 0x86, 0x43, 0x21, 0x90, 0xc8, 0x67, 0xf6, + 0x0f, 0xf8, 0x60, 0xe5, 0x85, 0x38, 0x0e, 0x05, + 0xbe, 0x95, 0x32, 0x1c, 0x8b, 0x47, 0xcf, 0x41, + 0x6b, 0xfd, 0x42, 0x8a, 0x28, 0xa2, 0x8a, 0x28, + 0xa2, 0x8a, 0x28, 0xa2, 0x8a, 0x28, 0xa2, 0x8a, + 0x29, 0x91, 0x27, 0xb3, 0xcc, 0xe8, 0x7e, 0xe6, + 0x29, 0xf4, 0xd5, 0x25, 0xe9, 0xc1, 0xc7, 0xd1, + 0x53, 0xa0, 0xa2, 0x07, 0x06, 0xd9, 0xf7, 0x31, + 0x51, 0x47, 0x72, 0xbf, 0x62, 0x83, 0x3e, 0xf9, + 0xf1, 0x5f, 0x8e, 0x7c, 0x57, 0xe3, 0x9f, 0x15, + 0xf8, 0xe7, 0xc5, 0x7e, 0x39, 0xf1, 0x5f, 0x8e, + 0x7c, 0x57, 0xe3, 0x9f, 0x15, 0xf8, 0xe7, 0xc5, + 0x7e, 0x39, 0xf1, 0x5f, 0x8e, 0x7c, 0x57, 0xe3, + 0x9f, 0x15, 0xf8, 0xe7, 0xc5, 0x7e, 0x39, 0xf1, + 0x5f, 0x8e, 0x7c, 0x57, 0xe3, 0x9f, 0x15, 0xf8, + 0xe7, 0xc5, 0x7e, 0x39, 0xf1, 0x5f, 0x8e, 0x7c, + 0x57, 0xe3, 0x9f, 0x15, 0xf8, 0xe6, 0xc7, 0x34, + 0x8c, 0x7a, 0x45, 0x13, 0xd2, 0xc7, 0x27, 0x13, + 0x04, 0x33, 0xf0, 0xba, 0x07, 0x6f, 0xa0, 0xc9, + 0x4d, 0xfa, 0x42, 0x74, 0x55, 0x00, 0xe5, 0x71, + 0x2d, 0xa3, 0x9a, 0x9f, 0xb3, 0xbe, 0x37, 0xd1, + 0x9e, 0xb7, 0xf3, 0x9e, 0x53, 0xf9, 0xcf, 0x29, + 0xfc, 0xe7, 0x94, 0xfe, 0x73, 0xca, 0x7f, 0x39, + 0xe5, 0x3f, 0x9c, 0xf2, 0x9f, 0xce, 0x79, 0x4f, + 0xe7, 0x3c, 0xa7, 0xf3, 0x9e, 0x53, 0xf9, 0xcf, + 0x29, 0xfc, 0xe7, 0x94, 0xfe, 0x73, 0xca, 0x7f, + 0x39, 0xe5, 0x3f, 0x9c, 0xf2, 0x9f, 0xce, 0x79, + 0x4f, 0xe7, 0x3c, 0xa7, 0xf3, 0x9e, 0x53, 0xf9, + 0xcf, 0x29, 0xfc, 0xe7, 0x94, 0xfe, 0x73, 0xca, + 0x7f, 0x39, 0xe5, 0x3f, 0x9c, 0xf2, 0x9f, 0xce, + 0x0a, 0x62, 0x6a, 0x70, 0xe3, 0xff, 0x00, 0xa2, + 0x30, 0x51, 0x90, 0xcc, 0x31, 0xd2, 0x28, 0x76, + 0xe8, 0x61, 0x24, 0x6e, 0xe2, 0xae, 0x3a, 0x61, + 0xe8, 0x1b, 0xc1, 0x9b, 0x67, 0xbf, 0xfe, 0xf9, + 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, + 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, + 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, + 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, + 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, + 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, + 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, 0xf9, 0xe0, 0x7e, + 0xf9, 0xe0, 0x7e, 0xf8, 0x12, 0x5e, 0x74, 0x52, + 0x58, 0x5b, 0x3b, 0x2e, 0xb0, 0xc8, 0x51, 0x11, + 0xe8, 0xe4, 0xf3, 0x20, 0x2f, 0x03, 0x95, 0x7d, + 0x00, 0x5f, 0xdb, 0x2e, 0x20, 0x51, 0x07, 0xdf, + 0x84, 0x3b, 0x7f, 0xaa, 0x82, 0x08, 0x20, 0x82, + 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, + 0x82, 0x08, 0x20, 0x58, 0xcd, 0xa1, 0xfc, 0x2a, + 0x6b, 0x14, 0xf4, 0x38, 0xc2, 0x55, 0x3d, 0x75, + 0xb3, 0xd3, 0x01, 0x50, 0x0a, 0xbd, 0x0c, 0x68, + 0x45, 0x0f, 0xe9, 0x28, 0xa6, 0xf8, 0x29, 0xc6, + 0xf3, 0xe0, 0xb2, 0xf8, 0x2c, 0xbe, 0x0b, 0x2f, + 0x82, 0xcb, 0xe0, 0xb2, 0xf8, 0x2c, 0xbe, 0x0b, + 0x2f, 0x82, 0xcb, 0xe0, 0xb2, 0xf8, 0x2c, 0xbe, + 0x0b, 0x2f, 0x82, 0xcb, 0xe0, 0xb2, 0xf8, 0x2c, + 0xbe, 0x0b, 0x2f, 0x82, 0xcb, 0xe0, 0xb2, 0xf8, + 0x2c, 0xbe, 0x0b, 0x2f, 0x82, 0xcb, 0xe0, 0xb2, + 0x14, 0x6c, 0x25, 0xe8, 0xa8, 0xdd, 0x70, 0x27, + 0x7f, 0xe5, 0x7c, 0xa4, 0xfe, 0x44, 0x62, 0x7e, + 0x88, 0xb4, 0x51, 0x25, 0xe0, 0x07, 0xf0, 0xc5, + 0x3a, 0x5c, 0xef, 0x42, 0x66, 0x78, 0xdc, 0x5e, + 0x94, 0x8e, 0xee, 0x9f, 0x56, 0x3a, 0xd7, 0x0e, + 0xf5, 0x8c, 0xcf, 0x26, 0xb9, 0x44, 0x8b, 0xa5, + 0x85, 0xf5, 0xfb, 0xc1, 0x66, 0xde, 0xca, 0xe9, + 0xff, 0x00, 0xac, 0x2d, 0x06, 0x35, 0xd4, 0xe0, + 0x43, 0x6f, 0xf6, 0x60, 0xec, 0x78, 0x3d, 0xcc, + 0xc1, 0x3a, 0xa7, 0x07, 0xed, 0x82, 0xd2, 0x2f, + 0xd7, 0x02, 0x08, 0xbb, 0x07, 0x53, 0x79, 0x2b, + 0xe1, 0xb0, 0xfe, 0x22, 0x23, 0xfb, 0x64, 0x52, + 0x67, 0x0d, 0xd1, 0xd8, 0x07, 0xf5, 0x8d, 0x41, + 0x7f, 0x08, 0x46, 0x71, 0xc1, 0x65, 0x66, 0x50, + 0xff, 0x00, 0x15, 0x96, 0x00, 0x05, 0xe1, 0x3e, + 0xd8, 0xf3, 0xa4, 0x86, 0x16, 0x8a, 0x82, 0x95, + 0x78, 0xb9, 0xac, 0x1b, 0x34, 0x52, 0x2d, 0x38, + 0x44, 0x0e, 0x44, 0xef, 0x89, 0x6c, 0x01, 0x9d, + 0x62, 0x82, 0x0d, 0xd4, 0x77, 0x8c, 0x34, 0xa6, + 0x77, 0x48, 0x6a, 0xfb, 0xaf, 0xdf, 0x24, 0x62, + 0x42, 0x4e, 0xe8, 0x18, 0x67, 0xa2, 0x84, 0x4e, + 0x04, 0x9b, 0x3a, 0x03, 0xcb, 0xac, 0x4c, 0x62, + 0x25, 0x0b, 0x92, 0x4d, 0x8e, 0xcc, 0xc4, 0x51, + 0x80, 0x05, 0xab, 0x12, 0x5b, 0xbe, 0xff, 0x00, + 0xb6, 0x7d, 0xe8, 0xad, 0x57, 0xb0, 0x07, 0xf6, + 0xcf, 0x1b, 0x95, 0x14, 0x8a, 0xf0, 0x81, 0x33, + 0x84, 0x3f, 0xe4, 0x3b, 0x7f, 0xb7, 0x01, 0x75, + 0x83, 0x7b, 0x23, 0x5c, 0xf1, 0xb8, 0x06, 0xec, + 0x69, 0x59, 0x00, 0xf5, 0x57, 0x27, 0x9d, 0x55, + 0x49, 0x65, 0x1d, 0x69, 0x75, 0xad, 0xbb, 0x0e, + 0x34, 0x71, 0xd0, 0xe6, 0xc0, 0x3c, 0x27, 0x38, + 0x58, 0xa1, 0x26, 0xd9, 0x06, 0xbb, 0x2e, 0x8b, + 0x2b, 0x8b, 0x89, 0x91, 0x56, 0xbc, 0x0c, 0xa3, + 0xd5, 0xd6, 0x69, 0x30, 0xaa, 0x47, 0x42, 0x11, + 0x8d, 0xf5, 0x4c, 0x9c, 0x38, 0x67, 0xd8, 0x29, + 0xb7, 0xa3, 0x32, 0xad, 0xa1, 0x93, 0x1c, 0xd2, + 0x43, 0xf9, 0xcb, 0x01, 0x84, 0xfd, 0xe4, 0x45, + 0xe8, 0xe7, 0xae, 0x13, 0x3d, 0x48, 0x5c, 0xba, + 0x56, 0x4f, 0xf9, 0xbd, 0x99, 0x4a, 0xd9, 0xa0, + 0x9e, 0x62, 0x43, 0xf7, 0x73, 0x8e, 0x3c, 0x19, + 0x88, 0x04, 0x4e, 0xa7, 0x4e, 0xb8, 0xf9, 0x0c, + 0x10, 0xfa, 0xa3, 0x00, 0xba, 0xb9, 0xc7, 0x29, + 0x55, 0xe0, 0x02, 0x43, 0x89, 0x7b, 0x3b, 0xe3, + 0xf6, 0xc3, 0xa0, 0x93, 0x84, 0x16, 0xba, 0x63, + 0x7c, 0x98, 0x25, 0xbd, 0x26, 0xbf, 0x9c, 0xe1, + 0xaf, 0x37, 0xae, 0x58, 0x4a, 0x68, 0xe0, 0xbc, + 0x67, 0x6c, 0x7b, 0x05, 0x5d, 0x80, 0x3a, 0xed, + 0x81, 0x28, 0x9e, 0x92, 0x0b, 0xa2, 0xd6, 0xfb, + 0x63, 0x12, 0x08, 0xfb, 0xfb, 0x2b, 0x66, 0x78, + 0xdc, 0x72, 0x42, 0x43, 0xba, 0x42, 0xa7, 0xec, + 0x61, 0x0c, 0x54, 0x09, 0xfb, 0x31, 0x10, 0x30, + 0xab, 0xc0, 0x10, 0x7f, 0x07, 0xf8, 0x3f, 0xff, + 0x00, 0xe5, 0x04, 0xaf, 0x0c, 0x87, 0x22, 0xf7, + 0x74, 0x70, 0x42, 0x06, 0x11, 0x88, 0x81, 0x67, + 0x06, 0xba, 0xd9, 0x93, 0x65, 0x88, 0x9d, 0xe8, + 0x14, 0xd9, 0xb3, 0x3b, 0x63, 0x1c, 0xaa, 0xec, + 0x01, 0xd7, 0x6c, 0xe0, 0x5b, 0x15, 0x5a, 0x80, + 0x0b, 0xe8, 0x4c, 0x8f, 0xbb, 0xd9, 0x4b, 0x08, + 0x81, 0x6b, 0xdb, 0x02, 0xa7, 0x3a, 0xe9, 0x97, + 0x4e, 0x4d, 0x17, 0x9e, 0x9f, 0xe0, 0xff, 0x00, + 0xfd, 0x46, 0x14, 0x07, 0x62, 0x6c, 0x70, 0x15, + 0x88, 0x67, 0xaa, 0x17, 0xfb, 0x7e, 0x98, 0xcd, + 0xc5, 0x61, 0x9e, 0x07, 0xa7, 0x0a, 0x39, 0xc0, + 0x3e, 0x9b, 0x47, 0xb8, 0x1e, 0xa9, 0x48, 0xe5, + 0xd5, 0x27, 0xa7, 0xbe, 0x3b, 0x47, 0x10, 0xfa, + 0xc5, 0xca, 0xb7, 0x36, 0x7e, 0xec, 0x00, 0xa4, + 0x7c, 0xc8, 0x7e, 0x25, 0x98, 0x96, 0x0d, 0x80, + 0x3a, 0x13, 0xb0, 0x26, 0x0f, 0x0a, 0x4d, 0xe0, + 0xa5, 0x42, 0xa2, 0x80, 0x03, 0xa5, 0x5a, 0x70, + 0xdf, 0x5c, 0xa2, 0x62, 0x86, 0x22, 0x69, 0xea, + 0xb7, 0x67, 0xa6, 0xb1, 0x65, 0x70, 0xc5, 0x40, + 0xa2, 0xe9, 0x36, 0x27, 0x28, 0x3b, 0x71, 0x86, + 0x11, 0xeb, 0xec, 0xcb, 0xc0, 0x88, 0x41, 0x52, + 0x03, 0xb7, 0xb7, 0x4c, 0xa1, 0xc5, 0x28, 0x32, + 0xf0, 0x06, 0xf6, 0x54, 0xe1, 0x9c, 0x18, 0xc0, + 0xb7, 0x17, 0xde, 0x94, 0x94, 0x51, 0xea, 0x99, + 0x29, 0x52, 0x49, 0x00, 0x0b, 0xd8, 0x09, 0x8b, + 0x5a, 0x31, 0x68, 0x23, 0x5a, 0x4a, 0xb1, 0xcb, + 0x5e, 0x73, 0x5f, 0x35, 0x58, 0x08, 0x4f, 0x78, + 0x0a, 0x0e, 0x8a, 0xb9, 0x4d, 0x8e, 0x84, 0xd2, + 0xe4, 0x00, 0xd7, 0x5e, 0x53, 0xbb, 0x83, 0x0b, + 0xb0, 0x67, 0x1a, 0x6a, 0x0b, 0xa0, 0xf7, 0xde, + 0x75, 0xa8, 0x9f, 0xdf, 0x4c, 0x02, 0x53, 0xa6, + 0x1d, 0x35, 0x8b, 0x4e, 0x55, 0xea, 0xb8, 0x20, + 0x3c, 0x84, 0xe3, 0x21, 0x50, 0x85, 0x57, 0x04, + 0x8f, 0x33, 0x65, 0x48, 0x5e, 0x3e, 0x8c, 0x14, + 0xf8, 0x96, 0x7f, 0x71, 0xff, 0x00, 0x0c, 0x62, + 0x39, 0x4f, 0x2f, 0x95, 0xc5, 0x1a, 0xb6, 0x74, + 0x03, 0xb7, 0xa1, 0xcf, 0xed, 0x83, 0x5e, 0x74, + 0x03, 0x48, 0xc8, 0x02, 0x57, 0xa5, 0x76, 0xce, + 0x86, 0x50, 0xaa, 0x40, 0x4b, 0xdd, 0x0f, 0x57, + 0x77, 0x08, 0x61, 0x65, 0xd0, 0x3c, 0x38, 0x2a, + 0xc7, 0x93, 0x47, 0x06, 0x12, 0x2e, 0x9d, 0xdc, + 0x90, 0x7d, 0x36, 0x8b, 0xc2, 0x93, 0x6b, 0x8e, + 0x3d, 0x0a, 0x29, 0x6a, 0x36, 0x68, 0x9a, 0xe8, + 0xa7, 0x0e, 0x2d, 0x8b, 0x42, 0xc2, 0x15, 0x70, + 0x67, 0x93, 0x70, 0x1c, 0x64, 0xb0, 0x04, 0x29, + 0xd5, 0x48, 0x8d, 0x61, 0xd3, 0x56, 0x18, 0x61, + 0x48, 0x73, 0xc8, 0x3d, 0x67, 0x2b, 0x38, 0x5c, + 0xb0, 0xa5, 0xd8, 0x25, 0x3a, 0x1e, 0xa2, 0x05, + 0xaa, 0x14, 0x75, 0x5c, 0x3b, 0xeb, 0x5a, 0xd3, + 0xd5, 0xcb, 0x89, 0x63, 0x55, 0xdd, 0x73, 0x11, + 0x29, 0x77, 0x0c, 0xb1, 0xf8, 0xd9, 0xae, 0x80, + 0xd8, 0x85, 0x44, 0xd9, 0x2e, 0x15, 0x5c, 0x2f, + 0x5d, 0xcc, 0x9d, 0xbc, 0x82, 0xf7, 0xf5, 0xce, + 0x0e, 0x0e, 0x22, 0x1e, 0xc0, 0x18, 0x07, 0x1b, + 0xee, 0xe6, 0xc1, 0x2e, 0x07, 0xea, 0x23, 0x4e, + 0x67, 0x4f, 0x64, 0xc9, 0x5d, 0x70, 0x48, 0x1a, + 0xeb, 0x0a, 0x16, 0xaa, 0xf7, 0xcb, 0x26, 0xd6, + 0x7b, 0xfc, 0x74, 0x09, 0x0d, 0x27, 0x7c, 0xbe, + 0x7e, 0x58, 0x2a, 0x8e, 0xd3, 0x63, 0xd5, 0x92, + 0x37, 0x46, 0x01, 0x7c, 0xd4, 0xae, 0x88, 0x3b, + 0x17, 0x91, 0xbb, 0xcf, 0x95, 0xc0, 0xd6, 0xba, + 0x17, 0xed, 0x8d, 0xbc, 0x0d, 0x30, 0xd2, 0x01, + 0x3f, 0x7f, 0xf0, 0x7f, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0x6d, 0x50, 0x08, 0x10, 0x08, 0x12, + 0xee, 0x6f, 0x4f, 0x5c, 0x0f, 0x48, 0x08, 0xe6, + 0x87, 0xbd, 0x91, 0xfb, 0xb0, 0xd4, 0x12, 0xfb, + 0x76, 0xc7, 0x09, 0x2d, 0x69, 0x81, 0xc6, 0x5f, + 0xef, 0xb3, 0xdf, 0xe3, 0x62, 0x24, 0x34, 0x9d, + 0xf0, 0x49, 0xb2, 0x70, 0xa2, 0x01, 0xf7, 0x07, + 0xd9, 0x73, 0x79, 0x0c, 0xd5, 0xdd, 0x39, 0x10, + 0x0b, 0xef, 0xda, 0x32, 0x6c, 0x44, 0x05, 0x51, + 0xd8, 0xf0, 0x92, 0x70, 0x2b, 0x27, 0xf8, 0xbf, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xe5, 0x0c, + 0x04, 0x5f, 0xa6, 0xad, 0x7c, 0xbc, 0x70, 0x1f, + 0x2f, 0xbc, 0x28, 0x5f, 0xe4, 0x4f, 0xdb, 0xe9, + 0xf2, 0xd5, 0x85, 0x19, 0xd4, 0x7b, 0x9e, 0x8e, + 0xb1, 0x4a, 0xad, 0x61, 0xbd, 0xe0, 0x0b, 0xce, + 0xdd, 0xef, 0x3f, 0x8e, 0x6f, 0x83, 0x38, 0x74, + 0x9a, 0x96, 0x4d, 0x63, 0x95, 0x79, 0xdd, 0x9a, + 0x27, 0x43, 0xee, 0xcd, 0x21, 0x0e, 0x14, 0xa6, + 0xa3, 0x09, 0xae, 0x8c, 0x62, 0x97, 0x86, 0xd8, + 0x26, 0x80, 0x35, 0x82, 0x67, 0xa0, 0x20, 0x93, + 0x88, 0x03, 0xfb, 0x8e, 0x3f, 0x06, 0x67, 0x02, + 0x40, 0x80, 0x38, 0xc4, 0xda, 0x26, 0x80, 0x38, + 0xd0, 0x2f, 0xdd, 0xae, 0x38, 0x58, 0x12, 0x0e, + 0xc2, 0x84, 0x4f, 0xb9, 0x8d, 0x62, 0x9a, 0x34, + 0x29, 0x12, 0x0d, 0x74, 0x0c, 0x66, 0x32, 0xae, + 0xf7, 0xcc, 0xe0, 0x70, 0x1f, 0xdb, 0x34, 0x9d, + 0xc1, 0x88, 0xd9, 0x50, 0x05, 0xee, 0x9e, 0x98, + 0xe5, 0x5e, 0x77, 0x66, 0x89, 0xd0, 0xfb, 0xb1, + 0xce, 0x7c, 0x0a, 0xb5, 0x54, 0xd0, 0x6a, 0xf0, + 0x6a, 0xe5, 0x24, 0x98, 0x64, 0xa9, 0x69, 0x45, + 0x25, 0xe9, 0x32, 0x3e, 0x8f, 0xa0, 0xbe, 0x84, + 0x41, 0x77, 0x2c, 0xf4, 0xc1, 0x76, 0xad, 0x9e, + 0x43, 0x02, 0x20, 0x38, 0x9c, 0x65, 0xa8, 0x08, + 0xc7, 0xb3, 0x8d, 0x03, 0xc0, 0xe6, 0xf1, 0xf4, + 0xda, 0xa0, 0x76, 0xb8, 0xd9, 0x57, 0xd0, 0x37, + 0xfb, 0x65, 0x19, 0x04, 0x77, 0x4d, 0x5f, 0xeb, + 0x1a, 0x42, 0x99, 0x01, 0x74, 0xfd, 0xf5, 0xfb, + 0xe3, 0xc7, 0x41, 0xd1, 0x47, 0x23, 0x9e, 0x33, + 0x08, 0x94, 0xc8, 0xe1, 0xe1, 0x08, 0x8f, 0xe7, + 0x00, 0x0c, 0x04, 0x01, 0xe1, 0x41, 0x2e, 0xdd, + 0xce, 0xb8, 0x2d, 0x13, 0x76, 0x2c, 0x8a, 0x94, + 0x17, 0xb3, 0x1c, 0xd1, 0xda, 0x95, 0x92, 0x69, + 0xfc, 0x99, 0xba, 0xa6, 0xfe, 0x63, 0x25, 0x3e, + 0xc3, 0x3d, 0x31, 0x2a, 0x9e, 0xb4, 0x53, 0x34, + 0xd3, 0x8e, 0xb2, 0xfa, 0xe4, 0xde, 0x9d, 0xa7, + 0x64, 0xa4, 0x1f, 0x67, 0x59, 0x5f, 0x75, 0x72, + 0xc2, 0x5a, 0x08, 0xe9, 0x79, 0x30, 0x09, 0xa9, + 0x24, 0xaa, 0xd5, 0xc5, 0xf6, 0xb0, 0x2a, 0x0f, + 0x22, 0x10, 0xfb, 0x26, 0x6a, 0x85, 0x7a, 0x5b, + 0x55, 0x0a, 0xd5, 0xea, 0xb9, 0x47, 0x83, 0xcc, + 0x58, 0x49, 0x04, 0x13, 0x9e, 0x71, 0xaf, 0xa9, + 0xc4, 0x08, 0x8c, 0xeb, 0x05, 0xe9, 0x9d, 0xf4, + 0xeb, 0x64, 0x16, 0x52, 0x3b, 0xd2, 0x61, 0xc9, + 0x5e, 0xc5, 0x27, 0xaa, 0x68, 0xf4, 0x59, 0x94, + 0xf7, 0x1f, 0xa1, 0x40, 0x81, 0x67, 0x76, 0xb9, + 0x63, 0x46, 0xda, 0xcb, 0x4e, 0x01, 0xdb, 0xb0, + 0x1f, 0x5c, 0x01, 0x2a, 0x39, 0x24, 0x0e, 0xe4, + 0xef, 0x3a, 0xb8, 0xcd, 0x00, 0x6b, 0x68, 0x70, + 0x01, 0xa0, 0xdb, 0xa3, 0xbe, 0x78, 0xcc, 0x41, + 0xa3, 0x18, 0x88, 0xab, 0xed, 0xb1, 0x89, 0x12, + 0x41, 0xbb, 0x01, 0x72, 0xef, 0x00, 0x06, 0x9c, + 0x63, 0xf6, 0x72, 0x3e, 0x19, 0x1f, 0x0c, 0x8f, + 0x86, 0x47, 0xc3, 0x23, 0xe1, 0x91, 0xf0, 0xc8, + 0xf8, 0x64, 0x82, 0x32, 0x01, 0x41, 0xe0, 0x0b, + 0x53, 0x96, 0xe3, 0xab, 0x58, 0xd8, 0xf1, 0xa2, + 0x98, 0xa1, 0xd7, 0x53, 0x53, 0x09, 0xff, 0x00, + 0x83, 0x93, 0x20, 0x63, 0x69, 0xd2, 0xcf, 0x4c, + 0xbb, 0xa2, 0x4d, 0x65, 0xa7, 0x00, 0xed, 0xd8, + 0x0f, 0xae, 0x30, 0x6a, 0x22, 0x00, 0x81, 0x00, + 0x49, 0xae, 0x37, 0xd7, 0x09, 0x27, 0x07, 0xf4, + 0xa5, 0xb3, 0x8b, 0xad, 0x84, 0xc2, 0x73, 0x4d, + 0x44, 0x38, 0x00, 0x6b, 0x94, 0x37, 0x72, 0x3e, + 0x19, 0x1f, 0x0c, 0x8f, 0x86, 0x47, 0xc3, 0x23, + 0xe1, 0x91, 0xf0, 0xc8, 0xf8, 0x63, 0x2e, 0x2c, + 0x8e, 0x1d, 0xdf, 0xb0, 0x6f, 0xf6, 0xca, 0xc4, + 0x25, 0xdd, 0x07, 0xb3, 0x0e, 0x42, 0x71, 0x58, + 0xe7, 0x83, 0xe9, 0xc4, 0x39, 0xc4, 0x11, 0x73, + 0x62, 0xea, 0x72, 0x8d, 0xc3, 0x66, 0x00, 0xd8, + 0x6b, 0xc0, 0x6b, 0xa7, 0x4f, 0xf5, 0x4f, 0x1e, + 0x3c, 0x78, 0xf1, 0xe3, 0xc7, 0x8f, 0x1e, 0x3c, + 0x78, 0xf1, 0xe3, 0xc7, 0x8f, 0x1e, 0x3c, 0x78, + 0x2a, 0xe0, 0x01, 0x3a, 0xc6, 0x06, 0xa0, 0x6a, + 0xf7, 0xbc, 0x4c, 0x40, 0x44, 0x46, 0x89, 0xd3, + 0x2a, 0x45, 0xd8, 0x0c, 0x1d, 0x88, 0xfd, 0xb3, + 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, + 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, + 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, + 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, + 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, + 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, + 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, 0xb3, 0xcf, 0x3d, + 0xb3, 0xcf, 0x3d, 0xb3, 0xb6, 0x01, 0x0f, 0xf7, + 0x72, 0xff, 0x00, 0x39, 0x15, 0xa0, 0x46, 0x6f, + 0x50, 0x74, 0x2b, 0xf4, 0x55, 0x57, 0x69, 0x02, + 0x10, 0xb0, 0x9d, 0x11, 0xe0, 0xff, 0x00, 0x5b, + 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, + 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, + 0x9f, 0x3e, 0x3b, 0x36, 0xa6, 0xe1, 0x55, 0x04, + 0xbc, 0x68, 0x3e, 0x87, 0xea, 0x8b, 0x5f, 0x2f, + 0xd3, 0xfa, 0xee, 0xdd, 0x85, 0x32, 0xf0, 0x31, + 0x6e, 0x9e, 0xc2, 0x89, 0xa4, 0x2c, 0x8a, 0x15, + 0xa4, 0xc6, 0x44, 0x7c, 0x62, 0x4e, 0x4b, 0x6e, + 0xc5, 0x64, 0x14, 0x31, 0xbc, 0x6f, 0x73, 0x58, + 0x33, 0x2c, 0x0a, 0xd9, 0x1e, 0x32, 0x3b, 0xe2, + 0xc8, 0x6d, 0xc0, 0x6b, 0x3d, 0x93, 0x97, 0x04, + 0x53, 0x7c, 0x6d, 0x02, 0x51, 0x10, 0xb6, 0x22, + 0x08, 0x9d, 0x4d, 0x84, 0x8c, 0x48, 0xa4, 0x08, + 0x97, 0x42, 0xa4, 0xdf, 0x4c, 0x24, 0xd3, 0x44, + 0xe9, 0x8b, 0xd1, 0x0d, 0xaf, 0x0f, 0xdb, 0x14, + 0x71, 0x93, 0x8b, 0x82, 0x8b, 0x7a, 0x03, 0x61, + 0xd3, 0x58, 0x37, 0xbd, 0x20, 0x05, 0x4a, 0xaa, + 0x56, 0xd7, 0x54, 0xfd, 0x7e, 0x6b, 0xbf, 0xfc, + 0x46, 0xb9, 0xf7, 0x68, 0x62, 0x01, 0xb2, 0xa5, + 0x21, 0xbe, 0xdb, 0xc0, 0x1e, 0x21, 0x00, 0x30, + 0xd6, 0xc2, 0x8d, 0xd8, 0x50, 0xe8, 0x97, 0x91, + 0x16, 0x22, 0x76, 0xe5, 0x44, 0x85, 0x34, 0x41, + 0x56, 0xc2, 0x50, 0x11, 0x27, 0x4a, 0x84, 0x54, + 0xab, 0x79, 0xad, 0xc3, 0xf4, 0xcb, 0x96, 0x40, + 0x9d, 0x0b, 0x24, 0xe1, 0xac, 0xd9, 0x5d, 0x5f, + 0xc3, 0x22, 0x85, 0xb2, 0x1d, 0x0c, 0x64, 0xb8, + 0xe2, 0xde, 0xe8, 0x52, 0xe3, 0x0e, 0xb0, 0xc0, + 0x13, 0xb3, 0xa9, 0x45, 0xdc, 0x82, 0xef, 0x99, + 0x7f, 0xc1, 0xe5, 0xbb, 0x3e, 0x85, 0x87, 0x13, + 0x22, 0x02, 0x54, 0x87, 0x0a, 0x1c, 0xb3, 0x43, + 0x96, 0xf8, 0xac, 0x03, 0xa1, 0x04, 0x04, 0x62, + 0xbb, 0x35, 0xbc, 0x68, 0xc1, 0x01, 0x7d, 0x71, + 0xd9, 0xac, 0xaa, 0xd4, 0x94, 0x83, 0x29, 0xaa, + 0x18, 0x95, 0xbe, 0x24, 0x0e, 0xd5, 0x48, 0x0d, + 0x9b, 0x50, 0xde, 0x02, 0x71, 0x14, 0x76, 0x4c, + 0x64, 0x1a, 0x67, 0x00, 0x4e, 0x12, 0xa1, 0xa3, + 0x69, 0xdf, 0x1c, 0x68, 0x60, 0x58, 0xaa, 0x9c, + 0x88, 0xf7, 0x53, 0x80, 0xb1, 0x8b, 0xe5, 0xb4, + 0x6d, 0x9b, 0xa2, 0x9b, 0x47, 0xef, 0xbd, 0xe3, + 0xa2, 0x89, 0xa0, 0x1a, 0xa3, 0xa9, 0x67, 0x58, + 0x0a, 0xeb, 0x78, 0x6e, 0xc8, 0x87, 0x36, 0x2e, + 0x85, 0x12, 0x8a, 0x51, 0xed, 0x96, 0xe1, 0x4e, + 0x51, 0xcb, 0xc0, 0xd0, 0x6e, 0xb9, 0x1e, 0x70, + 0x92, 0x85, 0x73, 0x70, 0x52, 0x19, 0x1f, 0x60, + 0xc1, 0xa3, 0x21, 0x91, 0x12, 0x04, 0x63, 0x15, + 0x42, 0x21, 0x04, 0x6b, 0xa7, 0x15, 0xbb, 0xc9, + 0x16, 0xf7, 0x42, 0xd6, 0xa8, 0xd0, 0xce, 0xb3, + 0x34, 0x9d, 0xea, 0x08, 0x3a, 0x5a, 0x01, 0xda, + 0x86, 0x9d, 0xe9, 0x81, 0xae, 0xa2, 0xd9, 0xee, + 0x10, 0x42, 0xa2, 0x10, 0x9d, 0xcc, 0xbf, 0x78, + 0x35, 0x04, 0x16, 0xc7, 0x70, 0xbb, 0x35, 0xbc, + 0x85, 0x32, 0x4c, 0x0c, 0x29, 0xc6, 0xa1, 0xd4, + 0x3a, 0x7b, 0x61, 0x43, 0x34, 0x41, 0xb5, 0x34, + 0x5a, 0xd4, 0x78, 0x18, 0x0a, 0xe8, 0xc3, 0xc9, + 0xb7, 0x15, 0x2a, 0xdc, 0x45, 0xad, 0xa6, 0xb2, + 0x4e, 0x49, 0x2b, 0xec, 0x77, 0x08, 0xf2, 0xba, + 0xe3, 0x0b, 0xda, 0x81, 0x15, 0xb9, 0xf7, 0x11, + 0x11, 0x34, 0x88, 0x9f, 0xe4, 0xf3, 0x55, 0xeb, + 0x88, 0x03, 0x64, 0x45, 0xad, 0x87, 0xed, 0x81, + 0x9f, 0x34, 0x83, 0x99, 0x88, 0x23, 0x96, 0xe0, + 0x65, 0xc2, 0x5e, 0x2d, 0x94, 0x3b, 0x09, 0x59, + 0x54, 0xee, 0x6b, 0x13, 0x75, 0xb1, 0x74, 0x92, + 0x6a, 0xba, 0xa6, 0x3a, 0xdb, 0xb3, 0x9a, 0x02, + 0x29, 0xf3, 0x27, 0x2a, 0xa7, 0x1b, 0xd7, 0xa3, + 0x87, 0xe9, 0xaa, 0x31, 0x1e, 0xa4, 0x70, 0x0b, + 0x01, 0xb2, 0x86, 0x25, 0x29, 0x0e, 0x86, 0x87, + 0x08, 0x81, 0xae, 0x47, 0xae, 0x47, 0x1b, 0xa2, + 0x6d, 0x98, 0xde, 0x01, 0xde, 0xce, 0x00, 0x88, + 0x8a, 0x0f, 0x34, 0x3a, 0x2a, 0x8f, 0x42, 0xe6, + 0xc4, 0x26, 0x88, 0x9a, 0x5d, 0x00, 0x17, 0x5b, + 0xf6, 0x67, 0xea, 0x2b, 0xe9, 0xff, 0x00, 0xd9, + 0xfe, 0x23, 0x78, 0x55, 0xdf, 0x01, 0x1d, 0x83, + 0xd1, 0x96, 0x3d, 0x1c, 0xb6, 0x73, 0xce, 0xe2, + 0x03, 0x9d, 0xda, 0x3b, 0x15, 0x04, 0x5a, 0xc5, + 0xc1, 0x76, 0xba, 0x11, 0xea, 0x20, 0xbb, 0x90, + 0xb0, 0x26, 0x91, 0x00, 0x92, 0x41, 0xb6, 0x20, + 0x20, 0xa7, 0x04, 0xb9, 0x39, 0x6c, 0x62, 0xd0, + 0x45, 0x56, 0x8e, 0xe6, 0xfe, 0xf6, 0x08, 0x24, + 0x26, 0x05, 0x7b, 0x15, 0xaa, 0x35, 0xcb, 0x52, + 0x15, 0x6e, 0x4e, 0xa6, 0x1c, 0x3a, 0x2b, 0xcb, + 0x4d, 0x16, 0xef, 0xf8, 0x7c, 0xb7, 0x67, 0xd1, + 0x45, 0xb0, 0x9b, 0xe7, 0x04, 0x14, 0xa5, 0x72, + 0xa8, 0x64, 0x77, 0xec, 0x28, 0x10, 0xc3, 0x76, + 0xfa, 0x88, 0x38, 0xc0, 0x82, 0x02, 0x0c, 0xc9, + 0x8e, 0xfb, 0xf9, 0x3b, 0x0d, 0x67, 0x07, 0x51, + 0x1e, 0x66, 0xed, 0x89, 0x1e, 0xe9, 0x5d, 0xef, + 0x38, 0x78, 0x07, 0xd1, 0x87, 0x80, 0xca, 0xba, + 0x35, 0x87, 0x95, 0x50, 0x80, 0xa8, 0xa2, 0x58, + 0x88, 0xe6, 0x88, 0xa4, 0xe5, 0xfc, 0x15, 0x39, + 0x0c, 0xd9, 0x5e, 0x59, 0x09, 0x39, 0xd4, 0x3d, + 0xda, 0xea, 0x37, 0x78, 0xd4, 0xc4, 0x84, 0x78, + 0x28, 0xb0, 0x0a, 0xaa, 0x1c, 0x6d, 0x5c, 0x9c, + 0xb8, 0xaf, 0x13, 0x49, 0x68, 0x27, 0x3a, 0x0e, + 0xb8, 0x4a, 0x33, 0x28, 0x6a, 0xe7, 0xc6, 0x10, + 0x0b, 0x06, 0x19, 0x32, 0x3a, 0x60, 0x74, 0x2f, + 0xdb, 0xdf, 0xd5, 0xbc, 0x31, 0x30, 0xbc, 0x92, + 0x20, 0x8e, 0x0a, 0xaa, 0xba, 0xb3, 0xcb, 0x90, + 0x15, 0xa3, 0x80, 0x60, 0x48, 0x24, 0xe0, 0x13, + 0xe7, 0x07, 0x6f, 0x8b, 0x80, 0x6d, 0xfb, 0xf9, + 0xe0, 0x73, 0xe4, 0x00, 0x6f, 0x41, 0x8e, 0x14, + 0xb2, 0x0d, 0x8e, 0x51, 0xa7, 0xd9, 0x03, 0xa2, + 0x1b, 0x6e, 0xa4, 0xc1, 0x2c, 0x4c, 0x7b, 0x4a, + 0x06, 0x5c, 0x93, 0x12, 0x7e, 0xe5, 0x5e, 0xce, + 0x79, 0x7a, 0xee, 0xc1, 0x6f, 0x05, 0xa2, 0x19, + 0xaa, 0x63, 0x9c, 0xaf, 0xeb, 0xee, 0xb4, 0x28, + 0x90, 0xdb, 0xd3, 0x34, 0xd3, 0x3a, 0x6c, 0xe3, + 0xce, 0xaa, 0xae, 0x23, 0xc9, 0x57, 0xd2, 0x37, + 0x25, 0x06, 0xb3, 0xd5, 0x2e, 0x6a, 0x98, 0x76, + 0x80, 0xf4, 0xa9, 0xd8, 0x28, 0x28, 0x1d, 0x7d, + 0x5c, 0x0b, 0xf4, 0x75, 0xae, 0x39, 0xc3, 0x13, + 0x89, 0x96, 0xda, 0x6e, 0xad, 0xcf, 0x02, 0xf6, + 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, + 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, + 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, + 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, + 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, + 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, + 0xcf, 0x02, 0xf6, 0xcf, 0x02, 0xf6, 0xcf, 0x02, + 0xf6, 0xcf, 0x02, 0xf6, 0xc8, 0x4e, 0x8c, 0x15, + 0x08, 0x88, 0x68, 0x84, 0xfa, 0xf7, 0x2e, 0x84, + 0x5d, 0x1e, 0x38, 0x33, 0xc9, 0xff, 0x00, 0x8c, + 0xf2, 0x7f, 0xe3, 0x3c, 0x9f, 0xf8, 0xcf, 0x27, + 0xfe, 0x33, 0xc9, 0xff, 0x00, 0x8c, 0xf2, 0x7f, + 0xe3, 0x1d, 0x98, 0x03, 0xba, 0xd7, 0x6a, 0x8d, + 0x26, 0x79, 0x3f, 0xf1, 0x92, 0x0d, 0x1b, 0xdf, + 0xe2, 0xb2, 0xfe, 0xce, 0x76, 0xc6, 0x4c, 0xf5, + 0xd9, 0x43, 0xf7, 0xce, 0xc8, 0xc9, 0x9e, 0xbb, + 0x28, 0x7e, 0xf8, 0x99, 0x42, 0xd1, 0xbd, 0x10, + 0x5e, 0x05, 0x88, 0xce, 0x62, 0x64, 0x25, 0x4d, + 0x99, 0x65, 0x34, 0xe9, 0x23, 0xbe, 0x8e, 0x28, + 0xfb, 0x8a, 0x20, 0x2a, 0x54, 0x18, 0x8c, 0xf5, + 0x30, 0x70, 0x45, 0x10, 0x45, 0x05, 0xe4, 0x51, + 0xd3, 0xd9, 0xcf, 0x27, 0xfe, 0x33, 0xc9, 0xff, + 0x00, 0x8c, 0xf2, 0x7f, 0xe3, 0x3c, 0x9f, 0xf8, + 0xcf, 0x27, 0xfe, 0x33, 0xc9, 0xff, 0x00, 0x8c, + 0xfd, 0xfa, 0x32, 0xa5, 0x87, 0xa1, 0xf4, 0x7a, + 0xa7, 0x06, 0x86, 0xd4, 0xec, 0x1d, 0x67, 0x8c, + 0xfb, 0x67, 0x8c, 0xfb, 0x62, 0xbf, 0x89, 0x00, + 0x0d, 0x34, 0x88, 0xec, 0xe1, 0xc4, 0xef, 0x4a, + 0xaa, 0xaf, 0xf1, 0x9e, 0x33, 0xed, 0x9e, 0x33, + 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, + 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, + 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, + 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, + 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, + 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, 0x86, 0x94, + 0xf8, 0x05, 0x25, 0x77, 0x4d, 0xfd, 0x0e, 0x30, + 0x6f, 0xd1, 0xd6, 0x99, 0xef, 0x31, 0xdb, 0x93, + 0xe8, 0x15, 0x1d, 0xa7, 0x5a, 0x09, 0xd4, 0x13, + 0x14, 0x40, 0x50, 0x62, 0x64, 0x61, 0xb4, 0x9c, + 0x2f, 0x0d, 0x65, 0x53, 0x49, 0x48, 0xe7, 0x43, + 0x58, 0x80, 0x85, 0x5f, 0xda, 0x27, 0x40, 0xdb, + 0x53, 0x44, 0x1a, 0xf5, 0x07, 0x92, 0x23, 0x87, + 0xb3, 0x89, 0xcc, 0x4a, 0x00, 0x87, 0x8a, 0x0f, + 0x25, 0xe3, 0x02, 0x5d, 0x0d, 0x90, 0x05, 0x85, + 0x48, 0x08, 0x4b, 0xb0, 0xb1, 0xcc, 0xd7, 0x95, + 0x09, 0x07, 0x51, 0x2f, 0x51, 0xc0, 0xc0, 0x21, + 0x88, 0xc4, 0x85, 0x57, 0x00, 0x7b, 0xc1, 0x2d, + 0x41, 0x2e, 0x92, 0x96, 0xe9, 0xde, 0xb4, 0xf3, + 0xd5, 0x23, 0x9c, 0x59, 0x29, 0xe4, 0xfd, 0x01, + 0xbb, 0x3d, 0x67, 0x38, 0x34, 0xf4, 0xc8, 0x35, + 0x37, 0x08, 0x41, 0x78, 0x22, 0x6c, 0x45, 0xd2, + 0x80, 0x89, 0x95, 0x02, 0xda, 0x56, 0xe4, 0x5e, + 0x0c, 0x9d, 0x59, 0x23, 0x34, 0x3f, 0xdc, 0x29, + 0xa0, 0xd3, 0x1c, 0xdf, 0xca, 0x38, 0xe2, 0x98, + 0x68, 0x55, 0x5d, 0x34, 0x35, 0x77, 0xfe, 0xd6, + 0x00, 0x7a, 0x71, 0x04, 0x16, 0x81, 0xa4, 0x98, + 0x6e, 0x91, 0x88, 0xc5, 0x00, 0x80, 0x43, 0xad, + 0x45, 0xd5, 0x82, 0x14, 0x25, 0x45, 0x4f, 0x74, + 0xc5, 0x5d, 0x38, 0x46, 0x37, 0x47, 0xe0, 0xa1, + 0x40, 0x5e, 0xa2, 0x24, 0x3b, 0x36, 0xa0, 0x0a, + 0xac, 0xb4, 0x02, 0x1d, 0x0e, 0x5d, 0xae, 0xf6, + 0xe2, 0x06, 0x8a, 0x79, 0x09, 0x44, 0x24, 0x6c, + 0x02, 0x48, 0x16, 0x11, 0x24, 0xf5, 0xa2, 0x14, + 0xdd, 0x46, 0x97, 0x56, 0x58, 0x59, 0xfe, 0x26, + 0xc6, 0x8b, 0xa1, 0x1a, 0xc1, 0x48, 0x2b, 0xa7, + 0xa1, 0xea, 0x8c, 0x3a, 0x1a, 0x40, 0x9d, 0xbc, + 0x30, 0x27, 0x74, 0x26, 0xe0, 0x71, 0xa3, 0xba, + 0x51, 0x10, 0x15, 0xe4, 0xb2, 0x3d, 0xd5, 0x90, + 0xd6, 0x26, 0x90, 0x7e, 0xb1, 0x6d, 0x6a, 0x27, + 0xa0, 0x4c, 0x61, 0x62, 0x3b, 0x46, 0xdb, 0x85, + 0x6a, 0x0f, 0x41, 0x81, 0xb2, 0x7d, 0x8e, 0x83, + 0x42, 0x0d, 0xf4, 0x00, 0x0c, 0xd0, 0x98, 0xe2, + 0x04, 0xe9, 0x20, 0x16, 0xba, 0xd4, 0xc1, 0xf6, + 0x3b, 0xf4, 0x70, 0x9e, 0xc0, 0xd4, 0x7a, 0x2c, + 0x32, 0x94, 0xd4, 0x04, 0xbb, 0x61, 0x17, 0x80, + 0xd9, 0x30, 0x85, 0xc7, 0x62, 0x04, 0x8e, 0xc5, + 0xbb, 0xef, 0xab, 0x7f, 0xaf, 0xcb, 0x76, 0x7f, + 0xb1, 0x77, 0x9a, 0xef, 0xfa, 0x1f, 0xd1, 0xc2, + 0xdf, 0x98, 0x31, 0xf0, 0x54, 0x48, 0x1d, 0x44, + 0x59, 0xc0, 0xde, 0x0c, 0x6b, 0xaa, 0x01, 0x56, + 0x0d, 0xdc, 0x0f, 0x47, 0x13, 0x86, 0x03, 0xb6, + 0x53, 0x89, 0xb1, 0x22, 0xa5, 0x24, 0xd9, 0x14, + 0x4f, 0x70, 0xe8, 0x87, 0xa6, 0x2a, 0x97, 0x96, + 0x00, 0xe1, 0x2f, 0x16, 0x30, 0x3a, 0x3a, 0x21, + 0x34, 0x09, 0x17, 0x78, 0x7c, 0xc2, 0x03, 0xba, + 0x85, 0x85, 0x28, 0x42, 0x71, 0x1c, 0xae, 0x29, + 0x5b, 0x00, 0xb7, 0x36, 0xde, 0x8d, 0xca, 0x4e, + 0xed, 0xe1, 0x2a, 0x7d, 0x29, 0x2a, 0x98, 0x5b, + 0x84, 0x0e, 0xf8, 0xba, 0x47, 0x0a, 0x5a, 0x12, + 0x13, 0x61, 0x60, 0xb6, 0xeb, 0xba, 0xe9, 0x8f, + 0x34, 0x3d, 0x00, 0x00, 0x11, 0x08, 0xaa, 0x55, + 0x76, 0x70, 0xbd, 0xfa, 0x84, 0x99, 0x43, 0x7e, + 0x0d, 0xa7, 0x38, 0x17, 0xd4, 0x41, 0xe8, 0xa4, + 0xd8, 0x26, 0xc2, 0x69, 0xbb, 0x72, 0x9b, 0xbe, + 0xa0, 0xbc, 0xf9, 0xcf, 0xdf, 0x1b, 0x8b, 0x90, + 0x64, 0x12, 0xd8, 0xb1, 0xe7, 0x5b, 0x80, 0xe2, + 0x8c, 0xcd, 0x3d, 0xdc, 0x25, 0x00, 0x73, 0x10, + 0xe7, 0x35, 0x35, 0xb3, 0x5b, 0x28, 0x3c, 0x82, + 0x51, 0x20, 0xc5, 0x45, 0x30, 0x04, 0xcf, 0xe5, + 0x6a, 0x7b, 0xe0, 0x16, 0x59, 0x61, 0x9f, 0xc6, + 0x55, 0x8c, 0x6d, 0x32, 0x7a, 0x9e, 0x9d, 0x6d, + 0x0c, 0x9d, 0xa1, 0xd3, 0x9a, 0xa0, 0xab, 0xd6, + 0x68, 0x86, 0x73, 0x90, 0x60, 0xa5, 0xee, 0xb5, + 0xa6, 0xe9, 0x3a, 0x58, 0xe2, 0xc0, 0x53, 0x0e, + 0xbc, 0x51, 0x66, 0x04, 0xba, 0xa4, 0xc4, 0xa2, + 0x0e, 0x18, 0x50, 0x56, 0xe0, 0xde, 0xa6, 0xb8, + 0xa8, 0x07, 0xd6, 0xca, 0x87, 0xa2, 0x2c, 0x74, + 0x34, 0xc7, 0xea, 0x90, 0x78, 0x6c, 0xaf, 0x58, + 0x67, 0x8c, 0xfb, 0x67, 0x8c, 0xfb, 0x67, 0x8c, + 0xfb, 0x67, 0x8c, 0xfb, 0x67, 0x8c, 0xfb, 0x63, + 0xaa, 0xa3, 0xcc, 0x17, 0xfa, 0xc2, 0x1a, 0x34, + 0xb5, 0x2b, 0xaa, 0xd4, 0x2f, 0x3e, 0x87, 0x39, + 0xb4, 0x32, 0x32, 0x30, 0xaa, 0x2e, 0xa1, 0x3e, + 0xd8, 0x03, 0x14, 0x96, 0x5d, 0x08, 0x98, 0xe1, + 0x20, 0x6f, 0x91, 0x8c, 0xe4, 0x8e, 0x21, 0x49, + 0x00, 0x24, 0x08, 0x2b, 0x96, 0xa0, 0x2d, 0x79, + 0x01, 0x40, 0x48, 0x10, 0x2b, 0x53, 0x58, 0x02, + 0x40, 0xc6, 0xf8, 0xa6, 0x1a, 0xe1, 0xad, 0x77, + 0x1a, 0xc8, 0xce, 0x48, 0xe2, 0x14, 0x90, 0x02, + 0x40, 0x82, 0xb9, 0x6e, 0x6f, 0x12, 0x96, 0xd9, + 0x26, 0xac, 0x0e, 0x57, 0xf6, 0x74, 0x1b, 0x49, + 0x4d, 0x53, 0x8e, 0xbb, 0x47, 0xa7, 0x19, 0xe3, + 0x3e, 0xd9, 0xe3, 0x3e, 0xd9, 0xe3, 0x3e, 0xd9, + 0xe3, 0x3e, 0xd9, 0xe3, 0x3e, 0xd9, 0xe3, 0x3e, + 0xd8, 0xa2, 0x00, 0x28, 0x88, 0xc7, 0xd1, 0xad, + 0xa8, 0xe3, 0x3f, 0x78, 0xb6, 0x22, 0x19, 0x35, + 0x16, 0xe4, 0x55, 0x44, 0x11, 0x60, 0x04, 0x55, + 0x4d, 0x90, 0x0e, 0x98, 0x97, 0x75, 0xad, 0xae, + 0xe6, 0x8a, 0xaa, 0x44, 0x50, 0xa9, 0x70, 0xec, + 0x5b, 0xad, 0xe0, 0x80, 0x94, 0x11, 0x68, 0x47, + 0x5c, 0x60, 0x53, 0x43, 0x41, 0x5e, 0x5c, 0x36, + 0x00, 0x69, 0x5a, 0x8c, 0xc2, 0x20, 0x00, 0x01, + 0xa0, 0x2e, 0x19, 0xc1, 0x1c, 0xd2, 0xd8, 0x89, + 0x69, 0xd4, 0x35, 0xa8, 0x11, 0x76, 0xea, 0xda, + 0x27, 0x40, 0x49, 0x85, 0x49, 0xcb, 0x80, 0xd1, + 0xb3, 0x1a, 0xa8, 0xa0, 0xec, 0xbb, 0x02, 0xda, + 0xef, 0x2a, 0xc0, 0xe9, 0x1c, 0xb7, 0x69, 0x47, + 0x39, 0x01, 0xc6, 0xb0, 0x31, 0x18, 0x63, 0x5a, + 0x32, 0x43, 0xe8, 0x04, 0x18, 0xa0, 0x1a, 0x7b, + 0xde, 0xd0, 0x01, 0xb0, 0x0a, 0x24, 0x69, 0xc5, + 0xcf, 0x93, 0x69, 0xc2, 0x46, 0xac, 0x36, 0x9b, + 0xbd, 0xc1, 0x81, 0xe0, 0x7c, 0xc7, 0xa2, 0xa4, + 0x29, 0xa6, 0x87, 0x72, 0xc1, 0xee, 0xa9, 0x91, + 0x75, 0x48, 0xd3, 0x27, 0x31, 0xdb, 0x39, 0x2f, + 0xae, 0x8c, 0xe5, 0xfd, 0x18, 0x59, 0x59, 0x8c, + 0x5e, 0x1b, 0x75, 0x55, 0x48, 0x85, 0x54, 0x6b, + 0x43, 0x4e, 0x6e, 0xb4, 0x8c, 0xe9, 0x0b, 0x86, + 0xcc, 0x48, 0xb7, 0xa6, 0x49, 0x03, 0xa8, 0x04, + 0x1c, 0x7a, 0x6c, 0xed, 0x06, 0xdb, 0x18, 0x0e, + 0x5b, 0x37, 0x08, 0x12, 0xf1, 0xb7, 0x87, 0xd3, + 0x90, 0x32, 0xc0, 0x93, 0xd2, 0xea, 0x88, 0x41, + 0x21, 0x82, 0x80, 0xb6, 0x67, 0x01, 0x36, 0xb5, + 0xa2, 0xe8, 0x93, 0x78, 0x88, 0x04, 0x50, 0xe8, + 0x95, 0x6c, 0x1a, 0x4d, 0xa5, 0x9d, 0x3f, 0x51, + 0xc9, 0xe3, 0x34, 0xfb, 0xab, 0x8f, 0xfe, 0x9e, + 0x99, 0xb0, 0x93, 0x34, 0xbd, 0xd6, 0x67, 0x9d, + 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x67, + 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, + 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, + 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x67, + 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, + 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, + 0x7b, 0x67, 0x9d, 0x7b, 0x67, 0x9d, 0x7b, 0x64, + 0x35, 0xbc, 0x9f, 0x77, 0x19, 0xa7, 0x11, 0x6c, + 0xd4, 0xd5, 0x7d, 0x5f, 0xa9, 0xb6, 0xfa, 0x07, + 0x31, 0xde, 0x7c, 0x33, 0xf3, 0x9f, 0x0c, 0xfc, + 0xe7, 0xc3, 0x3f, 0x39, 0xf0, 0xcf, 0xce, 0x7c, + 0x33, 0xf3, 0x9f, 0x0c, 0xfc, 0xe7, 0xc3, 0x3f, + 0x38, 0x0e, 0x34, 0x7c, 0x04, 0x14, 0x70, 0x50, + 0x46, 0x7a, 0xe5, 0xb3, 0x88, 0xa6, 0xee, 0xda, + 0x1f, 0x6c, 0xf8, 0x67, 0xe7, 0x34, 0xf2, 0x03, + 0x53, 0x1b, 0x1c, 0xc2, 0x68, 0xde, 0xcc, 0x69, + 0x3e, 0x58, 0x8b, 0xc7, 0x03, 0x87, 0x54, 0x29, + 0x28, 0xfd, 0x8b, 0xfb, 0x67, 0xc3, 0x3f, 0x39, + 0xf0, 0xcf, 0xce, 0x7c, 0x33, 0xf3, 0x9f, 0x0c, + 0xfc, 0xe7, 0xc3, 0x3f, 0x39, 0xf0, 0xcf, 0xce, + 0x7c, 0x33, 0xf3, 0x9f, 0x0c, 0xfc, 0xe4, 0x4e, + 0x52, 0xc2, 0x10, 0xaf, 0xd1, 0xe1, 0x7c, 0x1c, + 0x05, 0x37, 0x8a, 0x15, 0xb3, 0x52, 0x38, 0x74, + 0x43, 0x18, 0x31, 0x15, 0x00, 0x13, 0x62, 0x57, + 0x7b, 0x6b, 0xce, 0xa0, 0x98, 0xad, 0xb8, 0xac, + 0x15, 0x01, 0x00, 0x30, 0xe5, 0xc1, 0x19, 0x55, + 0x24, 0xee, 0x14, 0x5a, 0xcd, 0x1b, 0xa3, 0xf8, + 0xb5, 0x47, 0x26, 0xa5, 0x49, 0x36, 0xa6, 0xdd, + 0x63, 0x63, 0x78, 0x07, 0x43, 0xa9, 0xcb, 0x3b, + 0xdb, 0xfc, 0x60, 0x54, 0x78, 0xc3, 0x35, 0x41, + 0x31, 0xb1, 0x45, 0x29, 0x73, 0xaf, 0xb5, 0xd6, + 0x21, 0x6c, 0x9b, 0x8d, 0x72, 0xbb, 0x75, 0x1b, + 0x37, 0x40, 0xdd, 0x4c, 0x26, 0xa3, 0x77, 0xcd, + 0xe3, 0x1e, 0x8e, 0xc5, 0xb7, 0x00, 0xb7, 0x63, + 0x0d, 0x19, 0x12, 0x65, 0x3b, 0x24, 0xb5, 0xea, + 0xd5, 0xf7, 0xa6, 0x90, 0xd7, 0x19, 0xa7, 0xd1, + 0xd8, 0x3d, 0x4a, 0xa2, 0xba, 0x80, 0xb2, 0x59, + 0x0c, 0x5e, 0x64, 0x91, 0x3b, 0x52, 0xef, 0x8c, + 0x29, 0x11, 0xe6, 0xa1, 0x6b, 0x32, 0x6d, 0x08, + 0xbb, 0x79, 0x7a, 0x06, 0x80, 0x65, 0xcb, 0xa8, + 0x00, 0x44, 0x1c, 0x3a, 0x82, 0x74, 0x36, 0x6e, + 0xef, 0x29, 0x35, 0x97, 0x15, 0x1a, 0x00, 0x1b, + 0x3a, 0x3a, 0x20, 0xbd, 0x8e, 0xe8, 0xad, 0x8c, + 0x87, 0xe8, 0x0f, 0x4e, 0x6b, 0x54, 0x3a, 0x98, + 0x34, 0xab, 0x49, 0xe8, 0xf3, 0x91, 0x9c, 0xef, + 0x0b, 0xa8, 0x52, 0x82, 0xae, 0x85, 0x9a, 0xd1, + 0x95, 0x64, 0x28, 0x22, 0xb0, 0xaa, 0x98, 0xf5, + 0x5d, 0x1c, 0x63, 0xea, 0x88, 0x2d, 0x05, 0x54, + 0x8d, 0xb0, 0xd0, 0x5b, 0x31, 0xb5, 0x5c, 0xfa, + 0x3d, 0x09, 0x88, 0xe7, 0x71, 0x85, 0x18, 0x63, + 0x99, 0x34, 0x4e, 0x65, 0x35, 0x00, 0x00, 0xec, + 0x7d, 0x5e, 0x0c, 0xbe, 0x1f, 0x4d, 0x98, 0x4f, + 0x8b, 0xa2, 0x7a, 0x23, 0x53, 0xb7, 0x88, 0x1f, + 0x73, 0xfd, 0x50, 0x82, 0x08, 0x20, 0x82, 0x08, + 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, + 0x08, 0x23, 0xf6, 0x32, 0x83, 0x9d, 0xf0, 0xbc, + 0x09, 0xd5, 0x31, 0xf9, 0x38, 0xce, 0x44, 0x62, + 0x7f, 0x88, 0xd7, 0xee, 0x5e, 0xae, 0xc4, 0x00, + 0xd1, 0xca, 0xaf, 0x55, 0x57, 0x6e, 0x5e, 0xae, + 0xac, 0x0a, 0x80, 0xda, 0x83, 0x0c, 0xe3, 0x83, + 0x27, 0x33, 0x6b, 0x62, 0x82, 0xed, 0xdb, 0x2d, + 0xb5, 0x10, 0x0e, 0x61, 0xda, 0x5e, 0xa2, 0xe1, + 0xda, 0x84, 0x09, 0xb1, 0x69, 0xbc, 0xdf, 0x02, + 0xc2, 0x8b, 0xfb, 0x86, 0x23, 0xc2, 0x93, 0x53, + 0x1d, 0xf7, 0xa0, 0xc1, 0x59, 0xb8, 0xa5, 0x42, + 0x91, 0x6c, 0x6f, 0xf8, 0x7c, 0xb7, 0x67, 0xe9, + 0x3b, 0xf2, 0xaa, 0x0c, 0x86, 0xcd, 0x2f, 0x59, + 0xc1, 0x87, 0x55, 0x5a, 0x30, 0x91, 0x62, 0xc1, + 0x41, 0x2a, 0x6b, 0x7a, 0xc5, 0x08, 0xad, 0x64, + 0x21, 0x01, 0x32, 0x1a, 0xab, 0x03, 0x58, 0x9e, + 0x88, 0x2c, 0xce, 0xb2, 0x77, 0x5e, 0x9c, 0x8d, + 0x4c, 0x56, 0xa7, 0x6d, 0x01, 0x2a, 0x45, 0x52, + 0xee, 0x0f, 0x58, 0xb2, 0xd7, 0x8c, 0x0e, 0x3a, + 0x02, 0xf7, 0xfd, 0xf0, 0x2b, 0x63, 0xd2, 0xb0, + 0x6c, 0x5a, 0x80, 0xe1, 0x13, 0xa6, 0x2a, 0xf8, + 0x0d, 0xb3, 0x94, 0x8a, 0x0f, 0x5c, 0x02, 0x1d, + 0x03, 0xfd, 0xc0, 0xa1, 0xb3, 0x93, 0x16, 0x8e, + 0x1f, 0x30, 0xb5, 0xd1, 0xdc, 0x94, 0xe7, 0x0d, + 0xaa, 0xa5, 0xa6, 0x8c, 0x05, 0x12, 0x76, 0x23, + 0x35, 0xbc, 0xfe, 0xcf, 0x55, 0x9b, 0x49, 0xc8, + 0xe3, 0x10, 0x23, 0x01, 0x42, 0xb2, 0x27, 0x01, + 0x57, 0x63, 0x7c, 0x62, 0x22, 0x45, 0x1a, 0x37, + 0x94, 0x0d, 0x29, 0xa5, 0xdc, 0x7d, 0x98, 0x05, + 0x62, 0xd2, 0x32, 0x14, 0x73, 0xa7, 0x17, 0x9c, + 0x5c, 0x74, 0xf2, 0xcc, 0x97, 0xd5, 0x8a, 0x28, + 0x26, 0x49, 0x20, 0x4e, 0x59, 0x04, 0x98, 0xd4, + 0xf9, 0xfe, 0x27, 0xeb, 0xe6, 0xbb, 0xfe, 0x87, + 0x3c, 0x37, 0xe9, 0x7b, 0x4c, 0xb2, 0xde, 0x81, + 0x07, 0x63, 0x59, 0xfa, 0x2a, 0xbd, 0x5d, 0x94, + 0x0c, 0x46, 0x86, 0x5d, 0x38, 0xe9, 0x83, 0x0c, + 0x95, 0xdb, 0xce, 0x51, 0xfd, 0x15, 0xeb, 0xd4, + 0x42, 0x6d, 0x62, 0x48, 0xa5, 0xd9, 0x36, 0x4a, + 0xeb, 0xa0, 0xb9, 0xad, 0x8e, 0x2d, 0x57, 0x62, + 0x51, 0x44, 0xa5, 0xe1, 0xc5, 0x07, 0xc0, 0x8c, + 0xc7, 0x86, 0x03, 0x82, 0xea, 0x53, 0xb5, 0x84, + 0x1f, 0x57, 0x07, 0x38, 0x22, 0x5d, 0xea, 0x71, + 0xb0, 0xb0, 0x75, 0x78, 0x29, 0xbd, 0xe0, 0xf8, + 0x7a, 0xf3, 0x01, 0x11, 0x28, 0x22, 0x36, 0x75, + 0x33, 0x7e, 0x51, 0x53, 0x20, 0x09, 0x44, 0x80, + 0xf2, 0xfd, 0xb1, 0x55, 0x81, 0x08, 0x8e, 0x40, + 0x1b, 0x1e, 0xb3, 0x22, 0xf9, 0x41, 0x4e, 0xe8, + 0x16, 0x61, 0x7d, 0x19, 0x08, 0xa2, 0x01, 0xd2, + 0xd9, 0xc8, 0x18, 0xfd, 0x19, 0xa5, 0xae, 0x62, + 0x7d, 0x85, 0xc2, 0xd0, 0xc7, 0x6a, 0x60, 0x14, + 0xd9, 0xa6, 0x8e, 0xf8, 0xc3, 0x12, 0x53, 0x8c, + 0x58, 0x42, 0xb5, 0x1d, 0xfe, 0x8a, 0x9b, 0x7a, + 0xb5, 0xd9, 0x89, 0x82, 0x42, 0x16, 0xfd, 0xdd, + 0xbf, 0x47, 0x2c, 0x00, 0xa2, 0x9b, 0x94, 0x13, + 0xfc, 0x0d, 0x9b, 0x36, 0x6c, 0xd9, 0xb3, 0x61, + 0x16, 0x9f, 0xe2, 0xeb, 0xae, 0x48, 0x3d, 0x4e, + 0x99, 0x14, 0x39, 0x0b, 0xf7, 0x9c, 0xd1, 0x4d, + 0x05, 0x2c, 0xbb, 0xc5, 0x44, 0xd6, 0xdd, 0x13, + 0x34, 0xd2, 0xcd, 0x5c, 0x63, 0x1e, 0xcf, 0xa5, + 0xb1, 0xa2, 0x0d, 0x24, 0x45, 0xb7, 0x35, 0x29, + 0x84, 0xcf, 0xb8, 0xb7, 0x54, 0x9c, 0x22, 0x88, + 0xe6, 0xee, 0x94, 0x5f, 0x9b, 0x69, 0x05, 0x52, + 0x15, 0xb9, 0xa3, 0xfc, 0x2d, 0x9b, 0x36, 0x6c, + 0xd9, 0xb3, 0x66, 0xc5, 0x21, 0x90, 0x88, 0x82, + 0x89, 0xf4, 0x61, 0xba, 0xdb, 0xf5, 0x26, 0x1c, + 0xb8, 0xd9, 0x4f, 0x0d, 0x46, 0xe0, 0x74, 0x18, + 0xed, 0xe4, 0x3c, 0xd8, 0x43, 0xa2, 0xae, 0x8c, + 0x5a, 0x32, 0x08, 0x06, 0x4a, 0x21, 0x2f, 0x45, + 0x05, 0xc4, 0x8b, 0xcc, 0xa2, 0x56, 0x5c, 0x95, + 0x07, 0xae, 0xc6, 0xb1, 0xbe, 0x6a, 0xa8, 0x1c, + 0xbb, 0x12, 0x9f, 0x42, 0x73, 0xa2, 0x0a, 0xd9, + 0xb8, 0x55, 0x78, 0x7e, 0x09, 0x25, 0x99, 0x39, + 0x92, 0x10, 0x82, 0x2a, 0x14, 0x15, 0x03, 0x76, + 0x40, 0x70, 0x33, 0x9d, 0x54, 0x9e, 0xb4, 0x51, + 0x26, 0xa2, 0x0a, 0xf5, 0xc2, 0x45, 0x4b, 0xea, + 0x03, 0x6a, 0xa2, 0x81, 0xa5, 0x1e, 0x32, 0xb3, + 0xf0, 0x39, 0x29, 0x62, 0x28, 0x25, 0x8e, 0x59, + 0x93, 0x05, 0x6d, 0x64, 0x7a, 0x06, 0xbb, 0x10, + 0x87, 0xa2, 0x16, 0x6d, 0xe0, 0xa4, 0x35, 0x9b, + 0x4a, 0x21, 0x81, 0xc0, 0x82, 0xb8, 0x1e, 0x58, + 0x9a, 0x59, 0x8e, 0xad, 0x1c, 0x14, 0x9c, 0x8c, + 0x9e, 0x74, 0xdb, 0xa2, 0x08, 0xa3, 0xb3, 0xae, + 0x75, 0xb5, 0x25, 0x33, 0x1a, 0x16, 0xb7, 0x1a, + 0xee, 0x6a, 0x9b, 0x96, 0x8c, 0xa2, 0xbc, 0xe1, + 0x7a, 0xd1, 0x77, 0xb5, 0xe4, 0x68, 0x68, 0xc3, + 0x43, 0xec, 0xfe, 0x1f, 0x52, 0xbe, 0x9d, 0xbf, + 0x97, 0xd0, 0xe5, 0x83, 0x0f, 0x9f, 0x49, 0x90, + 0x68, 0xe0, 0x39, 0xfa, 0x9f, 0xcf, 0x3d, 0x4f, + 0xe7, 0x9e, 0xa7, 0xf3, 0xc9, 0x07, 0x2e, 0x55, + 0x99, 0x0b, 0xf2, 0x72, 0xa2, 0x13, 0xcd, 0x23, + 0x5a, 0x63, 0xbe, 0x08, 0x40, 0xb4, 0x58, 0x4a, + 0x55, 0xa8, 0xd6, 0xb8, 0x6d, 0xc2, 0xba, 0x30, + 0x4b, 0x48, 0xb3, 0x1b, 0xb4, 0x12, 0x57, 0xbe, + 0x48, 0x19, 0x74, 0x2e, 0x2c, 0x2d, 0xd2, 0xcd, + 0xba, 0x7d, 0x71, 0x39, 0x78, 0x4b, 0xc8, 0xef, + 0x35, 0x3b, 0x62, 0xce, 0x6b, 0x77, 0x46, 0x3c, + 0xc5, 0x78, 0x9b, 0xd0, 0x73, 0xbc, 0x48, 0x21, + 0xca, 0x98, 0x4b, 0xb0, 0x32, 0x4e, 0xe3, 0xae, + 0x03, 0x46, 0xac, 0x62, 0xd3, 0x74, 0xa8, 0x1e, + 0x4e, 0x99, 0xdf, 0xef, 0x13, 0x92, 0x33, 0x7b, + 0x06, 0xe9, 0x7b, 0x18, 0xbc, 0x2a, 0x46, 0xea, + 0x02, 0x52, 0x33, 0x56, 0x6c, 0x75, 0x98, 0x98, + 0x18, 0x70, 0x3a, 0x48, 0xc2, 0xd8, 0x91, 0x81, + 0x70, 0xa9, 0x08, 0xed, 0x05, 0xa4, 0xfa, 0x8e, + 0xcf, 0x50, 0xc6, 0xc4, 0x57, 0x05, 0x36, 0xd7, + 0x00, 0x88, 0xd0, 0x2d, 0x6d, 0xcf, 0xb0, 0x9f, + 0x2e, 0x58, 0x92, 0xaa, 0x4e, 0x56, 0xbb, 0xcf, + 0x53, 0xf9, 0xe7, 0xa9, 0xfc, 0xf3, 0xd4, 0xfe, + 0x78, 0xf1, 0x74, 0xea, 0xfa, 0x33, 0xfb, 0x8f, + 0xf8, 0x7d, 0x06, 0xbe, 0x10, 0xb6, 0x6e, 0xf1, + 0xd7, 0x3e, 0x31, 0xf8, 0xcf, 0x8c, 0x7e, 0x33, + 0xe3, 0x1f, 0x8c, 0xf8, 0xc7, 0xe3, 0x3e, 0x31, + 0xf8, 0xcf, 0x8c, 0x7e, 0x33, 0xe3, 0x1f, 0x8c, + 0x05, 0x48, 0xcb, 0x88, 0x98, 0x3d, 0x9c, 0xfb, + 0x00, 0xbb, 0xc4, 0xda, 0x84, 0x0a, 0x23, 0x13, + 0x8e, 0xf8, 0x60, 0x58, 0x30, 0xea, 0x91, 0x00, + 0xeb, 0xf6, 0x0a, 0xa1, 0x9a, 0x96, 0x72, 0xd2, + 0x54, 0x22, 0x0d, 0x29, 0xb3, 0x8b, 0x1c, 0x0e, + 0xc6, 0x0b, 0x8a, 0x41, 0x44, 0xd1, 0x0b, 0xae, + 0xf6, 0x14, 0xf2, 0xc1, 0x4a, 0xd3, 0xb2, 0xe8, + 0x38, 0xe0, 0x99, 0xf1, 0x8f, 0xc6, 0x7c, 0x63, + 0xf1, 0x9f, 0x18, 0xfc, 0x67, 0xc6, 0x3f, 0x19, + 0xf1, 0x8f, 0xc6, 0x7c, 0x63, 0xf1, 0x9f, 0x18, + 0xfc, 0x67, 0xc6, 0x3f, 0x18, 0xb7, 0x79, 0x5f, + 0x2a, 0x55, 0xfe, 0x5f, 0xa4, 0xcf, 0x18, 0x98, + 0x2f, 0x48, 0xe2, 0x89, 0xfb, 0x67, 0x8c, 0xfb, + 0x67, 0x8c, 0xfb, 0x67, 0x8c, 0xfb, 0x67, 0x8c, + 0xfb, 0x67, 0x8c, 0xfb, 0x67, 0x8c, 0xfb, 0x67, + 0x8c, 0xfb, 0x67, 0x8c, 0xfb, 0x67, 0x8c, 0xfb, + 0x61, 0x4e, 0xcb, 0x6d, 0xf2, 0x29, 0x0e, 0x5a, + 0x58, 0xea, 0x8c, 0x30, 0x2a, 0xac, 0xc0, 0x52, + 0xb0, 0x08, 0x1e, 0x9d, 0x33, 0xc6, 0x7d, 0xb3, + 0xc6, 0x7d, 0xb1, 0x08, 0x18, 0x42, 0x1a, 0x08, + 0x20, 0xd6, 0xc7, 0x4e, 0x14, 0x6e, 0x2c, 0x58, + 0x5b, 0x4a, 0x85, 0xcc, 0x03, 0x41, 0x9e, 0x33, + 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, + 0x33, 0xed, 0x9e, 0x33, 0xed, 0x9e, 0x33, 0xed, + 0x92, 0x4e, 0x8e, 0x07, 0xd0, 0x7d, 0x51, 0x7f, + 0x6f, 0xd4, 0x33, 0x7b, 0xd3, 0x54, 0x84, 0x6b, + 0x8f, 0xdc, 0x08, 0xeb, 0xed, 0x9e, 0x33, 0x3c, + 0x66, 0x78, 0xcc, 0x47, 0x8e, 0x0e, 0xd6, 0x05, + 0xa8, 0xf0, 0x3f, 0x8c, 0x6f, 0xce, 0x16, 0x28, + 0x69, 0x06, 0xb6, 0xde, 0x8c, 0x4c, 0xdd, 0x28, + 0xd6, 0xee, 0x84, 0x0e, 0xdd, 0x01, 0xf5, 0xc7, + 0x46, 0x97, 0x25, 0x6a, 0xd6, 0x87, 0x7b, 0xd8, + 0xe3, 0xc6, 0x8a, 0xd1, 0xab, 0x51, 0x94, 0x36, + 0xea, 0xcf, 0x4c, 0xd4, 0x1a, 0xf4, 0xb1, 0x55, + 0x0a, 0xd5, 0x79, 0x5c, 0xe9, 0x51, 0x9e, 0x03, + 0x80, 0xcb, 0x0d, 0x9b, 0xc7, 0xe1, 0x00, 0x80, + 0x3c, 0x50, 0x4a, 0x6f, 0x73, 0x36, 0x91, 0x83, + 0x04, 0x89, 0x24, 0x44, 0x93, 0xa4, 0x98, 0x8b, + 0x0f, 0x17, 0x1e, 0x60, 0x3b, 0x1f, 0xb3, 0x1c, + 0xb7, 0x55, 0x01, 0xb3, 0x60, 0x22, 0xed, 0xdf, + 0x3b, 0xc3, 0x27, 0x10, 0xd0, 0x7a, 0x81, 0x35, + 0xd3, 0x5a, 0xe9, 0x88, 0xe0, 0xa4, 0x00, 0xa4, + 0x40, 0xd3, 0xbb, 0xbc, 0xbc, 0x62, 0x67, 0x05, + 0x40, 0x04, 0x7d, 0xd8, 0x0d, 0x67, 0xa6, 0xed, + 0xa6, 0x95, 0xde, 0x1c, 0xf1, 0x99, 0xe3, 0x33, + 0xc6, 0x63, 0x99, 0x62, 0x47, 0x1b, 0x53, 0xec, + 0x5c, 0xde, 0x4d, 0xa7, 0x70, 0xd0, 0xfe, 0xf3, + 0xfc, 0x46, 0xc0, 0xa6, 0xb6, 0x43, 0x15, 0x1c, + 0x53, 0xbc, 0xbd, 0x45, 0x00, 0xfc, 0xc0, 0x50, + 0x9d, 0xf8, 0x37, 0x94, 0x6d, 0x69, 0x28, 0xfc, + 0x85, 0xe5, 0xc8, 0x47, 0x2a, 0xba, 0x1c, 0xe3, + 0x70, 0xb9, 0xa6, 0xe1, 0x05, 0xb5, 0x5b, 0xe0, + 0x71, 0x86, 0xf4, 0x17, 0x8b, 0x86, 0x39, 0x04, + 0xf1, 0xa5, 0x7d, 0x95, 0x91, 0x40, 0x78, 0x17, + 0xd4, 0x89, 0xfb, 0x76, 0x3f, 0xc3, 0xe5, 0xbb, + 0x3f, 0x40, 0x6c, 0x42, 0x0a, 0xcd, 0xb0, 0xfe, + 0x72, 0x6a, 0x0e, 0x30, 0x26, 0x6a, 0x8b, 0x51, + 0x34, 0x41, 0x1c, 0xae, 0x48, 0x1b, 0x04, 0xdd, + 0xb8, 0xb3, 0x73, 0x2a, 0xe1, 0x4e, 0x82, 0x95, + 0x49, 0xb0, 0x47, 0x80, 0xeb, 0x95, 0x3f, 0x79, + 0xf7, 0x06, 0x21, 0x0a, 0xf1, 0x51, 0xd1, 0xc7, + 0x51, 0xd4, 0xd3, 0xd9, 0x24, 0x39, 0xea, 0xe3, + 0x52, 0xa8, 0x04, 0x28, 0xd1, 0x39, 0x1d, 0x65, + 0xd5, 0x98, 0x55, 0xce, 0x0f, 0x66, 0x10, 0x34, + 0xae, 0xa3, 0x90, 0x0c, 0x86, 0x24, 0x5e, 0xa6, + 0x08, 0x3d, 0x74, 0xe3, 0x53, 0x0e, 0x7b, 0xc0, + 0x76, 0xc0, 0xdf, 0x02, 0x8b, 0x1c, 0x13, 0x1c, + 0xbe, 0x42, 0x14, 0x54, 0x02, 0xaf, 0x00, 0x38, + 0x6f, 0xc8, 0x28, 0x3c, 0x96, 0x72, 0xe9, 0x79, + 0xc7, 0xfb, 0x1d, 0x15, 0x96, 0xd1, 0x36, 0x06, + 0xf6, 0x22, 0x73, 0x92, 0xb3, 0x4a, 0x7b, 0x22, + 0x62, 0xfd, 0x9c, 0x5e, 0x3e, 0xc4, 0xc2, 0x39, + 0x84, 0x10, 0x7a, 0x22, 0x74, 0xc6, 0x3f, 0x4d, + 0x99, 0xb9, 0x59, 0x22, 0xa1, 0xbd, 0xa1, 0xd3, + 0x06, 0x70, 0xc7, 0x31, 0x0a, 0x2a, 0x01, 0x57, + 0x80, 0x1c, 0x63, 0x7e, 0x12, 0x36, 0x28, 0x22, + 0x1d, 0x47, 0x77, 0xeb, 0xe6, 0xbb, 0x7d, 0x41, + 0x06, 0x5f, 0x0f, 0xa5, 0xc1, 0xe5, 0x31, 0x42, + 0x2e, 0x91, 0x15, 0xeb, 0xfd, 0x64, 0xe2, 0xca, + 0xed, 0xf6, 0x5c, 0xf2, 0xcf, 0x7c, 0xf2, 0xcf, + 0x7c, 0xf2, 0xcf, 0x7c, 0x35, 0xd6, 0xb0, 0xf8, + 0x56, 0x06, 0xd8, 0x0b, 0xf6, 0x33, 0xcb, 0x3d, + 0xf3, 0x59, 0x54, 0x64, 0x16, 0x28, 0x41, 0x8f, + 0x18, 0x79, 0x80, 0x6f, 0x0b, 0x87, 0x43, 0x34, + 0xef, 0xd3, 0x3c, 0xb3, 0xdf, 0x3c, 0xb3, 0xdf, + 0x3c, 0xb3, 0xdf, 0x3c, 0xb3, 0xdf, 0x12, 0x28, + 0x98, 0x76, 0xc4, 0x17, 0x64, 0xb1, 0x19, 0xcc, + 0x4c, 0xf2, 0xcf, 0x7c, 0xf2, 0xcf, 0x7c, 0xf2, + 0xcf, 0x7c, 0xf2, 0xcf, 0x7c, 0xf2, 0xcf, 0x7c, + 0xf2, 0xcf, 0x7c, 0xf2, 0xcf, 0x7c, 0xf2, 0xcf, + 0x7c, 0x6d, 0x39, 0x38, 0x43, 0x52, 0x96, 0x1d, + 0x89, 0xf5, 0x4e, 0x24, 0x44, 0x39, 0x24, 0x07, + 0x5f, 0xe0, 0x22, 0x44, 0x89, 0x12, 0x24, 0x48, + 0xed, 0x9b, 0x26, 0x5d, 0xcb, 0x09, 0x75, 0xce, + 0x3d, 0x18, 0x38, 0x83, 0x55, 0x5d, 0xd5, 0xeb, + 0x86, 0x13, 0x8b, 0x20, 0xe1, 0x12, 0xc7, 0x18, + 0xc3, 0xd0, 0x30, 0x44, 0x2a, 0x04, 0x52, 0x5e, + 0x17, 0x39, 0x33, 0x9b, 0xb3, 0xe6, 0x1b, 0x8c, + 0x34, 0xeb, 0x22, 0xab, 0xe4, 0xe5, 0x4e, 0x69, + 0x85, 0xb5, 0xdd, 0xdf, 0xf8, 0x48, 0x91, 0x22, + 0x44, 0x89, 0x12, 0x24, 0x5b, 0x9a, 0x6d, 0xd0, + 0x11, 0x3f, 0x91, 0xfa, 0x0d, 0xc6, 0x17, 0x6d, + 0x0a, 0x3e, 0xe4, 0x7f, 0x3f, 0x41, 0x16, 0x00, + 0xb2, 0x83, 0xbe, 0xb1, 0x01, 0xe2, 0x70, 0xa1, + 0xeb, 0x18, 0x4b, 0x1d, 0x01, 0x28, 0xc0, 0x51, + 0x63, 0x5b, 0x36, 0x80, 0x3b, 0x57, 0x76, 0x0a, + 0x71, 0x12, 0xe0, 0x6a, 0x8a, 0x40, 0x54, 0x41, + 0xd1, 0xf7, 0xb8, 0xad, 0x33, 0x5f, 0xd8, 0x90, + 0x57, 0xed, 0x33, 0x7f, 0x79, 0xac, 0xa2, 0x63, + 0x6a, 0x28, 0x2f, 0x4d, 0x38, 0x4b, 0x7a, 0xca, + 0x0c, 0x2c, 0x36, 0xd6, 0x76, 0x51, 0xe2, 0xe1, + 0x9d, 0x70, 0x9a, 0x51, 0x06, 0x31, 0x47, 0x66, + 0x82, 0xac, 0x45, 0x8a, 0xf8, 0x9a, 0xd3, 0xa1, + 0xb0, 0xf4, 0x15, 0xcb, 0x5f, 0x66, 0x4a, 0x71, + 0x85, 0xe8, 0xa7, 0xd9, 0xb6, 0xe3, 0xf7, 0x42, + 0x7a, 0x12, 0x3d, 0xde, 0x0f, 0x82, 0x49, 0x66, + 0x23, 0x15, 0x76, 0x23, 0xa3, 0xe3, 0xd9, 0xdb, + 0x06, 0xe4, 0x4f, 0x9e, 0x61, 0xa6, 0x76, 0x6f, + 0x2b, 0x40, 0x16, 0x3b, 0xc2, 0x73, 0xa6, 0x93, + 0x17, 0x6d, 0x16, 0xce, 0xe8, 0x19, 0xb2, 0x88, + 0x21, 0x45, 0x79, 0x30, 0x49, 0x00, 0x7e, 0xfd, + 0x67, 0x86, 0x10, 0xba, 0x63, 0x8b, 0xd0, 0x34, + 0x78, 0x65, 0xee, 0xf0, 0x7c, 0x12, 0x4b, 0x32, + 0xd6, 0xca, 0x55, 0x75, 0xb4, 0xe3, 0x94, 0xaa, + 0x2e, 0x7e, 0xb6, 0x62, 0x8e, 0xf2, 0x90, 0x7d, + 0x80, 0xfe, 0xff, 0x00, 0x43, 0x92, 0x1b, 0xf4, + 0x7d, 0xa6, 0x3b, 0xc7, 0xfa, 0xfe, 0x9b, 0xd1, + 0xe7, 0xf2, 0x88, 0x11, 0x49, 0xdf, 0x00, 0xea, + 0x63, 0xc5, 0x8d, 0xe2, 0x61, 0xda, 0xa1, 0x45, + 0x02, 0x74, 0x93, 0x8c, 0x49, 0x1a, 0xc0, 0x7b, + 0xa6, 0x41, 0x14, 0xe8, 0x60, 0xa8, 0xb7, 0x77, + 0x35, 0x1a, 0x8b, 0x8e, 0xbc, 0x25, 0x73, 0xb1, + 0xd1, 0x05, 0x16, 0xa2, 0x46, 0xaa, 0x34, 0x47, + 0x6d, 0x4e, 0x8a, 0xdb, 0xa2, 0x29, 0xda, 0x23, + 0x11, 0x09, 0x7f, 0x9b, 0x14, 0x8d, 0xbb, 0xcc, + 0xa0, 0x97, 0x4c, 0x79, 0x17, 0xc2, 0x2e, 0x03, + 0xe9, 0x64, 0x37, 0x4b, 0x84, 0xb9, 0xe5, 0xe8, + 0xd8, 0xa2, 0x25, 0x17, 0x63, 0x89, 0x62, 0xb1, + 0xd4, 0x3c, 0xa8, 0x03, 0x74, 0x5a, 0xe1, 0xac, + 0x68, 0xf9, 0x2b, 0x35, 0xd1, 0x88, 0x11, 0x25, + 0xa9, 0x35, 0x18, 0x8b, 0xb1, 0xa8, 0x50, 0x43, + 0xcb, 0xa3, 0xb9, 0x10, 0x42, 0x3b, 0xa9, 0xd1, + 0x90, 0xaf, 0x58, 0x04, 0x43, 0xdc, 0x94, 0xfd, + 0x66, 0x94, 0x1e, 0x9b, 0x2b, 0xd2, 0x38, 0xab, + 0x59, 0x42, 0x15, 0xba, 0x08, 0xf2, 0x09, 0xa6, + 0x53, 0x68, 0x49, 0x9c, 0x37, 0x2c, 0x56, 0xeb, + 0x2c, 0xa2, 0xec, 0x09, 0x89, 0xa6, 0xfc, 0x82, + 0x55, 0xd2, 0x97, 0x36, 0x5e, 0x74, 0x45, 0xb7, + 0x16, 0xf9, 0x1c, 0xa7, 0x1b, 0x28, 0x42, 0xed, + 0x49, 0x96, 0xe2, 0xdf, 0x23, 0x94, 0xe3, 0x65, + 0x08, 0x5d, 0xa9, 0x30, 0x1c, 0xbd, 0x40, 0x99, + 0x4b, 0x3e, 0x04, 0x8f, 0x18, 0xec, 0xeb, 0xd6, + 0x59, 0x54, 0x08, 0x44, 0x6e, 0x15, 0xd8, 0xf8, + 0xe6, 0x45, 0x2a, 0x5d, 0xb4, 0x2c, 0xc2, 0xc9, + 0xd7, 0x94, 0x21, 0x5b, 0x40, 0x2a, 0xf0, 0x03, + 0x8d, 0xa7, 0xc6, 0x82, 0x42, 0x9e, 0x05, 0x67, + 0xa8, 0x74, 0x71, 0x57, 0x0d, 0x40, 0x76, 0x1d, + 0x1c, 0x9c, 0xb9, 0xb4, 0xb6, 0x98, 0x8a, 0x38, + 0x6e, 0xa0, 0xe8, 0x89, 0xd3, 0x0d, 0x41, 0x90, + 0x82, 0x3a, 0x9f, 0x48, 0x9c, 0xaf, 0x78, 0x0b, + 0x89, 0xec, 0x31, 0xd7, 0xa1, 0x39, 0x60, 0xae, + 0xe6, 0x17, 0x14, 0x36, 0x3e, 0x85, 0x0d, 0xa2, + 0x28, 0x02, 0x29, 0x31, 0x77, 0x88, 0xc5, 0x06, + 0x26, 0x97, 0xdb, 0x68, 0x8d, 0x17, 0x70, 0xf8, + 0xe0, 0x4e, 0xfa, 0xc7, 0x7b, 0x07, 0x40, 0xb7, + 0xc1, 0x75, 0xbf, 0x4d, 0x59, 0x58, 0x90, 0x03, + 0xb3, 0x10, 0xe7, 0x2b, 0x72, 0x19, 0x1d, 0x9d, + 0x79, 0x7e, 0x09, 0x5c, 0xe0, 0xc2, 0xd8, 0x86, + 0xb7, 0xa8, 0x2b, 0xfb, 0x38, 0xce, 0x4c, 0x50, + 0xe3, 0x7e, 0xa2, 0xcb, 0x2f, 0x5e, 0xc6, 0x28, + 0x24, 0x0a, 0x6a, 0xb1, 0xf4, 0x36, 0x85, 0xa0, + 0xfd, 0xc4, 0xda, 0xac, 0xe1, 0x07, 0x2d, 0x97, + 0xba, 0x1b, 0xdc, 0xbb, 0xf9, 0x0f, 0xf0, 0x23, + 0x46, 0x8d, 0x1a, 0x34, 0x68, 0xf8, 0xaf, 0x2a, + 0xa6, 0x40, 0x1d, 0x21, 0x04, 0x12, 0x86, 0xda, + 0x99, 0xa9, 0x51, 0x15, 0xef, 0xfa, 0x28, 0xd1, + 0xa3, 0x39, 0x77, 0x03, 0x50, 0xdb, 0x5b, 0x45, + 0x7d, 0x6f, 0x1c, 0x7e, 0xb4, 0x68, 0xd1, 0xa3, + 0x46, 0x8c, 0x9a, 0xa2, 0xd3, 0xc6, 0xe3, 0x0b, + 0xb1, 0xaf, 0xb9, 0x8a, 0x53, 0x04, 0x4e, 0x31, + 0x74, 0xec, 0x1d, 0x0d, 0x7d, 0x0e, 0x00, 0x2e, + 0x3f, 0x1f, 0xa7, 0xc7, 0x2a, 0xa9, 0x54, 0x06, + 0xb9, 0xf1, 0x8f, 0xce, 0x7c, 0x63, 0xf3, 0x9f, + 0x18, 0xfc, 0xe7, 0xc6, 0x3f, 0x38, 0x80, 0xa1, + 0x54, 0x94, 0x4d, 0x80, 0xef, 0x82, 0x55, 0x48, + 0x5e, 0xb8, 0xab, 0xa5, 0xae, 0x74, 0xc2, 0x67, + 0x3f, 0xb9, 0x03, 0xa2, 0xa0, 0x1e, 0x17, 0xae, + 0x21, 0x3e, 0xd2, 0x36, 0x99, 0x43, 0x3c, 0x14, + 0xe5, 0x0e, 0xf1, 0xc9, 0x6e, 0xea, 0x27, 0xcc, + 0x69, 0xd7, 0x74, 0xa1, 0x8d, 0x63, 0x99, 0x0a, + 0x36, 0x69, 0xa3, 0xc1, 0x30, 0x08, 0xe8, 0xa1, + 0x31, 0xdc, 0x8d, 0x16, 0x06, 0x01, 0x6a, 0xd6, + 0xd7, 0x0c, 0x4f, 0xc0, 0x21, 0x20, 0x30, 0x08, + 0x00, 0x72, 0xd5, 0xe8, 0x7a, 0x25, 0x65, 0x40, + 0x3a, 0x0d, 0xd3, 0xa2, 0x3c, 0xef, 0x2b, 0xb5, + 0x2f, 0x13, 0xb2, 0xa2, 0xa3, 0xb3, 0xab, 0x59, + 0x8a, 0x84, 0xc6, 0x90, 0x45, 0x97, 0x99, 0xc8, + 0x3a, 0x1c, 0x6b, 0x2a, 0x35, 0x66, 0x4a, 0x5c, + 0x82, 0x8a, 0x53, 0x73, 0xa8, 0x4a, 0x63, 0xbd, + 0xea, 0x5a, 0xc0, 0x01, 0x09, 0xc0, 0xad, 0x67, + 0xc6, 0x3f, 0x39, 0xf1, 0x8f, 0xce, 0x7c, 0x63, + 0xf3, 0x9f, 0x18, 0xfc, 0xe3, 0x3e, 0xee, 0x40, + 0x2e, 0xa7, 0x3f, 0xa0, 0xd6, 0x0b, 0x55, 0xa7, + 0x89, 0xbc, 0x68, 0x3f, 0x6c, 0x61, 0xe3, 0xbc, + 0xe8, 0x2f, 0xdc, 0x0e, 0xec, 0xc2, 0x01, 0xad, + 0x84, 0x52, 0xeb, 0x5c, 0xf6, 0xc2, 0xb0, 0x47, + 0xca, 0xc8, 0x77, 0xde, 0xf4, 0x0d, 0xe2, 0x61, + 0x58, 0x23, 0xe5, 0x64, 0x3b, 0xef, 0x7a, 0x06, + 0xf1, 0x30, 0x14, 0x36, 0xb6, 0xba, 0x10, 0xd8, + 0x6f, 0x8e, 0x66, 0x42, 0x31, 0x5c, 0x08, 0x33, + 0x07, 0x63, 0x26, 0x9d, 0xf2, 0xd0, 0x20, 0x1e, + 0xfe, 0x35, 0x00, 0x9b, 0xe8, 0x18, 0x90, 0xe7, + 0x09, 0xdf, 0x82, 0x20, 0xf9, 0x8b, 0xa3, 0x8f, + 0xcc, 0x95, 0x48, 0xa6, 0xbf, 0xb8, 0x07, 0xed, + 0x8e, 0x52, 0x7c, 0xc2, 0x8e, 0x40, 0x1d, 0x89, + 0x49, 0xc6, 0x6f, 0x55, 0x6b, 0xb1, 0xf7, 0xac, + 0x41, 0xec, 0x8e, 0x20, 0xf9, 0x60, 0xed, 0xe1, + 0x67, 0x6c, 0x7b, 0xb0, 0x20, 0x60, 0xcd, 0xa3, + 0xa0, 0x06, 0xce, 0xf5, 0x8a, 0x6c, 0x76, 0x44, + 0x7b, 0xe0, 0x99, 0xea, 0x75, 0x71, 0x81, 0x6e, + 0x36, 0x42, 0x4d, 0x1a, 0x36, 0x3d, 0x41, 0x2c, + 0xa6, 0x4b, 0xc4, 0x07, 0x04, 0x0a, 0x44, 0x3c, + 0x13, 0x63, 0x8a, 0xf1, 0x8f, 0xc8, 0xb5, 0xe2, + 0x0c, 0x5d, 0x14, 0xe8, 0xaa, 0x38, 0xfb, 0x78, + 0xd3, 0x7e, 0x2d, 0x63, 0x07, 0x50, 0x3d, 0x55, + 0xfd, 0xb9, 0xe5, 0xfb, 0x33, 0xcb, 0x76, 0x7f, + 0xb4, 0x3f, 0x44, 0x0f, 0xc6, 0x39, 0xd5, 0x5a, + 0x04, 0x34, 0xcf, 0x8c, 0x7e, 0x33, 0xe3, 0x1f, + 0x8c, 0xf8, 0xc7, 0xe3, 0x3e, 0x31, 0xf8, 0xc7, + 0x3c, 0x48, 0xd1, 0x61, 0x57, 0x8d, 0x00, 0x2a, + 0xba, 0x02, 0xb8, 0xa3, 0x52, 0xa5, 0x11, 0xa9, + 0x04, 0x15, 0x1d, 0x3f, 0x7c, 0xd3, 0x99, 0x06, + 0x93, 0x68, 0x45, 0x05, 0x8c, 0x58, 0xf6, 0xc0, + 0x83, 0x54, 0xb6, 0x51, 0x79, 0x38, 0x77, 0xc1, + 0x37, 0x66, 0x48, 0x25, 0xbd, 0xc8, 0xae, 0xe0, + 0x08, 0x2d, 0x59, 0xac, 0x7b, 0xb3, 0x39, 0x41, + 0x88, 0xeb, 0xbe, 0x7c, 0x63, 0xf1, 0x9f, 0x18, + 0xfc, 0x60, 0x16, 0x45, 0xb6, 0x61, 0xa5, 0x36, + 0xa9, 0xc9, 0x77, 0x1c, 0xf8, 0xc7, 0xe3, 0x05, + 0xb4, 0x9c, 0x12, 0x60, 0x00, 0x6d, 0x5e, 0x98, + 0xa0, 0x34, 0x62, 0x23, 0x5f, 0xd6, 0x7c, 0x63, + 0xf1, 0x9f, 0x18, 0xfc, 0x67, 0xc6, 0x3f, 0x19, + 0xf1, 0x8f, 0xc6, 0x7c, 0x63, 0xf1, 0x88, 0xfb, + 0x39, 0x14, 0x9a, 0xbc, 0x7f, 0x88, 0xd2, 0xfb, + 0xd0, 0x62, 0x49, 0x03, 0x7b, 0x1a, 0x6f, 0x67, + 0x7c, 0x2e, 0x71, 0x8e, 0x24, 0xa1, 0xe4, 0xa0, + 0x0e, 0xaa, 0x19, 0x3c, 0xa5, 0xb9, 0xd4, 0x0a, + 0x00, 0xaa, 0x1f, 0x77, 0x1b, 0xae, 0x43, 0x9c, + 0xaa, 0x20, 0x03, 0x75, 0xce, 0x6d, 0x89, 0x92, + 0x2a, 0x81, 0x60, 0x0a, 0xbd, 0x03, 0x1e, 0x0c, + 0x77, 0xa4, 0xb3, 0x43, 0x2c, 0x65, 0xec, 0xe2, + 0xde, 0x94, 0x7c, 0xb3, 0x98, 0x9d, 0xaf, 0x33, + 0x8c, 0x5c, 0xe3, 0x51, 0x1d, 0x84, 0x87, 0x3d, + 0x5f, 0xa8, 0x19, 0x21, 0x2f, 0x50, 0x9b, 0x14, + 0x33, 0x54, 0xe6, 0x48, 0x0c, 0x6c, 0x80, 0x95, + 0xb9, 0x49, 0x34, 0x16, 0x2d, 0x96, 0xf2, 0x09, + 0xf5, 0xf2, 0xdd, 0x9f, 0xef, 0x10, 0xbf, 0xa7, + 0x8f, 0xf5, 0xfd, 0x20, 0x1b, 0xf6, 0x47, 0xff, + 0x00, 0x67, 0xe4, 0xcd, 0x67, 0x54, 0xd5, 0x2a, + 0x94, 0x03, 0x7d, 0x4d, 0x75, 0x2e, 0x06, 0x01, + 0xea, 0x60, 0xba, 0x56, 0x10, 0xa9, 0x08, 0x6e, + 0xc8, 0x35, 0xb3, 0x49, 0x6b, 0xb4, 0xe3, 0x44, + 0xe9, 0xf6, 0x63, 0x14, 0x8d, 0x11, 0x60, 0x41, + 0xa9, 0x1e, 0x8e, 0xa7, 0x19, 0x27, 0xc1, 0x4a, + 0x77, 0x14, 0x40, 0x39, 0x11, 0x4d, 0x4c, 0x4b, + 0xb1, 0xe1, 0xec, 0x48, 0xdb, 0x23, 0xbe, 0x91, + 0x40, 0x12, 0x86, 0x7c, 0x03, 0x4e, 0x45, 0x98, + 0x09, 0x60, 0x6e, 0x12, 0xe4, 0x87, 0x43, 0x08, + 0xb1, 0x2b, 0xa1, 0x04, 0x5c, 0x3a, 0x57, 0x3a, + 0x20, 0xc8, 0x11, 0xc1, 0x62, 0x14, 0xe2, 0x8a, + 0x83, 0xa8, 0x2f, 0x6b, 0x01, 0x28, 0x42, 0x04, + 0x77, 0xab, 0x83, 0xf1, 0x44, 0xc1, 0x81, 0xd6, + 0x09, 0x5b, 0x35, 0x8c, 0x31, 0xf3, 0x25, 0xce, + 0x2c, 0x87, 0xdf, 0x95, 0xd1, 0xfe, 0x73, 0x4d, + 0x59, 0x43, 0xed, 0x09, 0x1d, 0xde, 0x9f, 0xa7, + 0x57, 0xa6, 0x6c, 0x3d, 0xa1, 0x23, 0x57, 0xd3, + 0xf4, 0xea, 0xf4, 0xc2, 0x3a, 0xfa, 0x10, 0xdf, + 0xbf, 0xfb, 0x5f, 0xc7, 0x15, 0x28, 0x70, 0x05, + 0x18, 0x9e, 0x76, 0x8c, 0xe1, 0x42, 0xf0, 0x66, + 0xb4, 0xec, 0x7d, 0xe0, 0x00, 0x05, 0xb7, 0x5d, + 0x87, 0x0a, 0x57, 0x50, 0xaa, 0xd5, 0xd3, 0xd1, + 0x4b, 0x83, 0xc7, 0x75, 0x8f, 0x7a, 0x24, 0x11, + 0xae, 0xe4, 0x34, 0x05, 0x6b, 0xaf, 0xd7, 0xe5, + 0xbb, 0x3f, 0xdb, 0xa0, 0x2f, 0xd1, 0xf6, 0x99, + 0x05, 0x6f, 0x5c, 0x86, 0x81, 0x71, 0xf1, 0x8f, + 0xce, 0x7c, 0x63, 0xf3, 0x9f, 0x18, 0xfc, 0xe7, + 0xc6, 0x3f, 0x38, 0xe3, 0x99, 0x42, 0x09, 0x48, + 0x9c, 0xec, 0x45, 0x11, 0xd2, 0x31, 0xc1, 0x3b, + 0x58, 0xe4, 0xe4, 0x02, 0xa0, 0x59, 0x78, 0xde, + 0x8c, 0x11, 0x81, 0x13, 0x3a, 0xc2, 0xed, 0x00, + 0x51, 0x28, 0xc6, 0xe6, 0x96, 0x8a, 0x4f, 0xa6, + 0x71, 0x70, 0xeb, 0x82, 0x6a, 0x4c, 0xd2, 0x80, + 0x68, 0x6f, 0xe6, 0x1e, 0x5d, 0x6a, 0x58, 0x57, + 0xbb, 0x84, 0x6a, 0xf8, 0xdd, 0xb8, 0x23, 0x2d, + 0x28, 0x1d, 0x99, 0xdd, 0xe7, 0x06, 0x9e, 0x23, + 0x70, 0x55, 0x80, 0x0e, 0x03, 0x27, 0xa0, 0xa7, + 0x72, 0xd8, 0x12, 0xa6, 0x80, 0x35, 0xef, 0x83, + 0x47, 0xbd, 0x7d, 0xb8, 0xa9, 0x00, 0x45, 0xe5, + 0xb5, 0x70, 0xfc, 0x21, 0xe9, 0x89, 0xeb, 0xb6, + 0x69, 0xb0, 0xe1, 0x37, 0x81, 0xa0, 0xed, 0x70, + 0xfa, 0xbd, 0x00, 0xbc, 0x9c, 0x2a, 0x67, 0x12, + 0xf3, 0xd2, 0x12, 0x3a, 0x4c, 0x39, 0x1a, 0x3b, + 0x62, 0x78, 0x80, 0x23, 0x75, 0x14, 0xdb, 0xbb, + 0x5a, 0xef, 0xb0, 0x67, 0xc6, 0x3f, 0x39, 0xf1, + 0x8f, 0xce, 0x7c, 0x63, 0xf3, 0x9f, 0x18, 0xfc, + 0xe3, 0x3e, 0xee, 0x40, 0x2e, 0xa7, 0x3f, 0x54, + 0x83, 0xc3, 0x65, 0x7a, 0xc3, 0x3c, 0x67, 0xdb, + 0x3c, 0x67, 0xdb, 0x3c, 0x67, 0xdb, 0x3c, 0x67, + 0xdb, 0x3c, 0x67, 0xdb, 0x3c, 0x67, 0xdb, 0x10, + 0xa7, 0x53, 0x50, 0x09, 0x09, 0x74, 0x68, 0x8f, + 0x3b, 0xc2, 0x40, 0x79, 0x5c, 0x47, 0x90, 0x8b, + 0x0e, 0xb8, 0x59, 0x39, 0xc1, 0xa3, 0xba, 0x88, + 0xfb, 0x2f, 0x24, 0xe3, 0x63, 0xcb, 0x8e, 0x7b, + 0x78, 0x70, 0x5c, 0x7a, 0x87, 0x3c, 0x4f, 0x4c, + 0x21, 0x35, 0x45, 0x43, 0xd8, 0x0c, 0xc6, 0xde, + 0x09, 0x30, 0x08, 0x90, 0x49, 0xb4, 0x46, 0xbd, + 0x50, 0x58, 0xdd, 0x8e, 0xa4, 0x40, 0xc8, 0xda, + 0x60, 0x82, 0x13, 0xa7, 0x68, 0xeb, 0x12, 0x0b, + 0x56, 0x94, 0xca, 0x11, 0x6d, 0x45, 0x1a, 0x44, + 0xd6, 0x78, 0xcf, 0xb6, 0x78, 0xcf, 0xb6, 0x78, + 0xcf, 0xb6, 0x78, 0xcf, 0xb6, 0x78, 0xcf, 0xb6, + 0x78, 0xcf, 0xb6, 0x78, 0xcf, 0xb6, 0x28, 0x80, + 0x0a, 0x22, 0x31, 0xfe, 0xd1, 0xcc, 0x0d, 0xfa, + 0x7e, 0xd7, 0x00, 0x9e, 0x10, 0x29, 0xa7, 0x45, + 0x1c, 0xf1, 0x9f, 0x7c, 0xf1, 0x9f, 0x7c, 0x10, + 0xd0, 0x2e, 0x97, 0x30, 0xe1, 0x40, 0x5b, 0xcf, + 0x73, 0x2c, 0x3a, 0x66, 0xaa, 0x14, 0x31, 0xb7, + 0xae, 0x6c, 0xb4, 0xe2, 0x77, 0xce, 0x54, 0x21, + 0xd0, 0xbd, 0x9c, 0x69, 0x2a, 0x5a, 0xa2, 0x27, + 0x3d, 0xcc, 0x18, 0xe8, 0xfc, 0xbd, 0x41, 0x16, + 0x53, 0xd3, 0x8c, 0x21, 0x41, 0xac, 0x63, 0x80, + 0x0b, 0xbc, 0xdc, 0x74, 0xc7, 0xff, 0x00, 0x41, + 0x04, 0xa5, 0xdc, 0xa8, 0x82, 0xb2, 0x2a, 0xe1, + 0xd8, 0x94, 0x2a, 0x52, 0x14, 0x06, 0x50, 0x39, + 0x3b, 0xe2, 0xf4, 0x22, 0x6f, 0x02, 0xc2, 0xb2, + 0x84, 0x05, 0x50, 0x06, 0x12, 0xa4, 0x66, 0x7d, + 0xc8, 0x03, 0xa4, 0x34, 0x6d, 0xe2, 0xba, 0xa3, + 0x3e, 0x72, 0xac, 0xe2, 0x43, 0xd6, 0xdb, 0xac, + 0x16, 0xd6, 0x06, 0x0a, 0x41, 0x64, 0xd1, 0x0b, + 0xae, 0xf6, 0x1b, 0x09, 0x28, 0xb4, 0x26, 0x12, + 0x88, 0x76, 0x1a, 0x03, 0x59, 0x86, 0x6d, 0x65, + 0x88, 0x82, 0x85, 0x65, 0x77, 0x07, 0x04, 0xc0, + 0xc9, 0x98, 0x56, 0x15, 0xa8, 0x46, 0x6f, 0xd4, + 0xc1, 0x60, 0xba, 0x2a, 0x0d, 0x16, 0xc4, 0xd1, + 0xab, 0xa2, 0xe0, 0x06, 0xf4, 0x89, 0xc2, 0x68, + 0x87, 0x3a, 0x61, 0x70, 0x43, 0x34, 0x0f, 0xaf, + 0x39, 0xe3, 0x3e, 0xf8, 0x4c, 0x81, 0x08, 0x8c, + 0xac, 0x5e, 0x76, 0xff, 0x00, 0x3f, 0x51, 0x41, + 0xb8, 0xa2, 0xca, 0xd8, 0xe5, 0x86, 0x7c, 0x63, + 0xf1, 0x9f, 0x18, 0xfc, 0x61, 0xc7, 0xed, 0xd9, + 0x14, 0x86, 0x90, 0xdd, 0x53, 0x93, 0x9e, 0x9b, + 0xaf, 0x0e, 0x17, 0x83, 0x8e, 0xc0, 0x14, 0x63, + 0x55, 0x98, 0xc9, 0x0d, 0xf2, 0x4b, 0xe4, 0x02, + 0xd3, 0x7b, 0x3a, 0x37, 0x0a, 0xb8, 0x3a, 0x80, + 0x29, 0x14, 0xc0, 0xec, 0x8f, 0x47, 0x2f, 0x3a, + 0x66, 0xea, 0x14, 0x31, 0xb7, 0xae, 0x19, 0x06, + 0xc0, 0x3a, 0x1e, 0x4a, 0x18, 0xfa, 0x98, 0xab, + 0xc5, 0x77, 0x77, 0xf1, 0x35, 0xea, 0xcb, 0x39, + 0x5b, 0xac, 0x10, 0x56, 0x5a, 0xaa, 0x48, 0x48, + 0x57, 0xe9, 0x79, 0xc3, 0x8d, 0x2d, 0xdf, 0xd9, + 0xcb, 0x2c, 0x30, 0x90, 0x5d, 0x0c, 0x00, 0x9c, + 0xc2, 0x20, 0xa1, 0x32, 0xbd, 0x07, 0x16, 0x0d, + 0x06, 0x71, 0xfc, 0x61, 0x96, 0xd5, 0x7d, 0xf2, + 0xc0, 0x10, 0xd2, 0x28, 0xef, 0x58, 0xf2, 0x74, + 0xb6, 0x44, 0x4e, 0x3b, 0x99, 0xf1, 0x8f, 0xc6, + 0x7c, 0x63, 0xf1, 0x85, 0x77, 0xb2, 0xc4, 0x84, + 0x34, 0xeb, 0xb5, 0x3a, 0x73, 0x9f, 0x18, 0xfc, + 0x67, 0xc6, 0x3f, 0x19, 0xf1, 0x8f, 0xc6, 0x36, + 0x1e, 0x6d, 0xf5, 0x57, 0xfb, 0x5f, 0xf6, 0x87, + 0xeb, 0x42, 0x58, 0x0c, 0x9e, 0x07, 0x19, 0x24, + 0xb4, 0x28, 0xa9, 0x4b, 0xe9, 0xf5, 0x3b, 0x77, + 0xe9, 0xd7, 0xd4, 0x9e, 0xbb, 0x2e, 0xf2, 0x73, + 0x5d, 0x24, 0x46, 0xc1, 0xda, 0x82, 0xee, 0xeb, + 0x6c, 0x5e, 0x62, 0x1a, 0xf6, 0x39, 0xe2, 0xc8, + 0xc3, 0xbe, 0x22, 0x7f, 0xd4, 0x95, 0x13, 0x59, + 0x61, 0x09, 0xba, 0x7b, 0x94, 0x75, 0x96, 0x37, + 0x14, 0x27, 0xcb, 0x82, 0x4e, 0x95, 0xd5, 0x2e, + 0xa6, 0x81, 0xce, 0x53, 0xf6, 0xba, 0x89, 0x9b, + 0x1d, 0x44, 0x51, 0x5c, 0x34, 0x74, 0xd2, 0x83, + 0x10, 0x8a, 0x6d, 0x6d, 0xb3, 0x81, 0xcd, 0x52, + 0xbf, 0x17, 0x41, 0xb4, 0x91, 0xb6, 0xd4, 0x54, + 0xc1, 0x8e, 0x07, 0xe0, 0xd0, 0x5c, 0x45, 0xb8, + 0xc9, 0x83, 0x7a, 0x0b, 0xc5, 0xc3, 0x1c, 0x82, + 0x78, 0xd2, 0xbe, 0xce, 0xbf, 0x16, 0x12, 0xab, + 0x54, 0x55, 0x1b, 0x3a, 0x90, 0x61, 0x2b, 0xbd, + 0x1a, 0xed, 0x03, 0x72, 0x5d, 0x61, 0x50, 0xf5, + 0x08, 0x68, 0xbe, 0xea, 0xd7, 0xad, 0xfa, 0xe1, + 0x4e, 0xb9, 0xa8, 0xe2, 0x10, 0x00, 0x2a, 0xf4, + 0x98, 0x8e, 0x2e, 0x03, 0x30, 0x4a, 0x04, 0x1b, + 0x91, 0xe3, 0x97, 0x06, 0xf1, 0x89, 0xc2, 0x01, + 0xfb, 0x82, 0xfe, 0x91, 0xbe, 0x33, 0xb7, 0xd4, + 0xa1, 0xf4, 0xab, 0x87, 0x73, 0x70, 0xab, 0xb6, + 0x29, 0xc3, 0x45, 0x56, 0xe4, 0x53, 0x98, 0x6e, + 0xc0, 0x1c, 0x30, 0x26, 0x6b, 0x8a, 0xdd, 0x93, + 0x77, 0xb3, 0x46, 0x0b, 0x94, 0x22, 0xe7, 0x18, + 0x85, 0x6b, 0x5d, 0xb1, 0x24, 0x0d, 0xa7, 0x8a, + 0x18, 0x0d, 0xc3, 0x47, 0xad, 0xbb, 0xa7, 0xdb, + 0x13, 0xd1, 0xd5, 0xb9, 0xae, 0xb2, 0x52, 0x1f, + 0x71, 0xdc, 0xcf, 0x56, 0x72, 0x64, 0x21, 0xfc, + 0xb8, 0x0b, 0x07, 0xc8, 0x57, 0x9d, 0x77, 0x3a, + 0xf1, 0x8b, 0x96, 0xb2, 0x93, 0x2c, 0x14, 0xc0, + 0x75, 0x55, 0xf5, 0xc0, 0xa7, 0x01, 0x22, 0x23, + 0x57, 0x10, 0xa1, 0xa2, 0x8f, 0xaa, 0xf3, 0x4f, + 0x81, 0x4d, 0x0b, 0x82, 0x9a, 0xe0, 0x6e, 0x62, + 0xe8, 0xa9, 0x44, 0x2b, 0xf5, 0x37, 0x02, 0x35, + 0xa0, 0x60, 0xc1, 0x67, 0xb4, 0x22, 0x0d, 0x30, + 0x0b, 0xc9, 0xa4, 0xb9, 0xa3, 0x9b, 0xf0, 0x5a, + 0x25, 0xe3, 0x1a, 0x4b, 0x1c, 0xe7, 0x17, 0x17, + 0xad, 0x20, 0x36, 0x2b, 0x74, 0xd5, 0x66, 0x48, + 0x19, 0x14, 0x61, 0xa7, 0xc4, 0x38, 0x6b, 0x63, + 0xea, 0xff, 0x00, 0xe2, 0x41, 0x71, 0x6f, 0x86, + 0x74, 0xd4, 0xf6, 0xd3, 0xe3, 0x65, 0xa4, 0x37, + 0x70, 0x20, 0xde, 0xce, 0x41, 0x21, 0x15, 0x55, + 0x5e, 0xaa, 0xb8, 0xaa, 0x69, 0x76, 0xa5, 0xcc, + 0x76, 0x3d, 0x57, 0x16, 0x49, 0xaa, 0x56, 0xac, + 0x77, 0x4e, 0x0e, 0x85, 0xee, 0xb0, 0x82, 0xc4, + 0x40, 0x95, 0x25, 0x13, 0x1b, 0x55, 0x75, 0xba, + 0xe3, 0xc9, 0x8e, 0xd4, 0x96, 0x6c, 0x2c, 0xac, + 0xbd, 0xdc, 0xe6, 0xd1, 0xc8, 0x03, 0x4a, 0xd0, + 0xdb, 0xc3, 0xd5, 0xc6, 0x2b, 0x05, 0xbd, 0x22, + 0x95, 0xdb, 0x8e, 0x1a, 0x75, 0x96, 0x22, 0xd4, + 0x4a, 0xe2, 0xbd, 0x06, 0xcc, 0xda, 0x47, 0x37, + 0xd1, 0x52, 0xd6, 0x81, 0x8e, 0xa8, 0x60, 0xd9, + 0x5d, 0x8c, 0x08, 0x0e, 0x97, 0x63, 0xd4, 0xd7, + 0x19, 0xc9, 0x8c, 0xb7, 0x5f, 0x30, 0xe4, 0x61, + 0xa7, 0x59, 0xa1, 0x68, 0xd4, 0x7a, 0x24, 0x19, + 0x68, 0x37, 0xd3, 0x35, 0xe6, 0x55, 0x90, 0x44, + 0xdf, 0x61, 0x0d, 0xdb, 0xac, 0x79, 0x7a, 0x24, + 0x43, 0x13, 0xb3, 0x62, 0x6d, 0x8e, 0xc6, 0x0b, + 0x64, 0x37, 0x12, 0x40, 0x3d, 0x00, 0x71, 0x30, + 0xac, 0x6c, 0x75, 0xf1, 0x02, 0x0f, 0xdd, 0xfa, + 0x86, 0xf8, 0xce, 0xdf, 0x55, 0x47, 0x9e, 0xd4, + 0x39, 0x88, 0x26, 0x06, 0xc9, 0x2a, 0x72, 0x72, + 0x5d, 0xf6, 0x9e, 0xb8, 0x40, 0xe2, 0xb4, 0x71, + 0x21, 0x51, 0xa5, 0x39, 0xea, 0xe1, 0x35, 0x4a, + 0xd8, 0x76, 0x14, 0xcc, 0x4e, 0x98, 0x66, 0xa9, + 0x20, 0x3c, 0x0a, 0x5d, 0x75, 0x57, 0x36, 0x93, + 0xdb, 0xdc, 0x22, 0xc3, 0x2a, 0x29, 0x73, 0xd3, + 0x66, 0x2a, 0xc9, 0x1d, 0x06, 0x90, 0xe3, 0xb9, + 0xbc, 0x32, 0x70, 0x1a, 0x90, 0x0e, 0x8a, 0x80, + 0x5e, 0x58, 0x76, 0xc6, 0x2f, 0xde, 0x02, 0x53, + 0x17, 0x68, 0x87, 0x02, 0x27, 0x06, 0x5b, 0x9d, + 0x6b, 0xd0, 0xd1, 0x01, 0xae, 0x29, 0x4e, 0x86, + 0x22, 0xb5, 0x08, 0xb7, 0xbc, 0x8f, 0x42, 0xc0, + 0x2f, 0x3a, 0xcf, 0xb4, 0x84, 0x83, 0xf4, 0x40, + 0xfe, 0xf8, 0xa5, 0x62, 0x10, 0x3a, 0xae, 0x1d, + 0x91, 0xbd, 0x5d, 0x60, 0xeb, 0x36, 0xa5, 0x1e, + 0x8b, 0x1f, 0xdc, 0xcb, 0xaa, 0xf0, 0x2d, 0x6d, + 0x2f, 0x6b, 0xe9, 0x84, 0x4e, 0x21, 0xfe, 0x00, + 0x99, 0x0e, 0x87, 0x4f, 0xf7, 0xe0, 0xc8, 0x19, + 0x5c, 0x3e, 0x84, 0x0b, 0x94, 0x4a, 0x3b, 0x94, + 0xbf, 0x78, 0xff, 0x00, 0x1f, 0xac, 0x86, 0x94, + 0xc4, 0xf8, 0x1e, 0x41, 0x6c, 0xeb, 0x1f, 0x4c, + 0x5b, 0xc2, 0x7e, 0x98, 0x39, 0x27, 0xb4, 0x5e, + 0x49, 0x18, 0x10, 0x61, 0xb8, 0x9d, 0x2b, 0x34, + 0x03, 0x08, 0xd6, 0xa2, 0x65, 0xb7, 0x6f, 0xa8, + 0x8a, 0x74, 0x38, 0xa0, 0x45, 0xe9, 0x06, 0x1e, + 0x48, 0xdc, 0x83, 0x64, 0x73, 0x28, 0x81, 0xc8, + 0x24, 0x99, 0xdd, 0x30, 0x70, 0xd6, 0x35, 0x22, + 0xa0, 0x20, 0xac, 0x1c, 0x53, 0xe1, 0xb0, 0x86, + 0x08, 0x5b, 0x40, 0x8a, 0xc8, 0x6c, 0x41, 0x80, + 0x30, 0xde, 0xd2, 0x7c, 0x66, 0xad, 0xec, 0x9a, + 0x6e, 0x2c, 0x57, 0xd2, 0x41, 0xc5, 0x69, 0x15, + 0x10, 0x2a, 0x38, 0xfd, 0x74, 0x51, 0x13, 0x4e, + 0x85, 0x23, 0xf7, 0x8f, 0xf1, 0xf5, 0x34, 0xef, + 0xa6, 0x0c, 0x97, 0xfb, 0x13, 0xf4, 0x5c, 0x9c, + 0x09, 0xb7, 0x1b, 0x16, 0x2d, 0x07, 0xf7, 0x30, + 0xa6, 0xba, 0xe4, 0x20, 0x77, 0x1b, 0xd2, 0xf0, + 0xe0, 0x87, 0x3f, 0x52, 0xb3, 0x80, 0xd0, 0x90, + 0xd0, 0xa5, 0x23, 0x96, 0xde, 0xf5, 0x17, 0x1b, + 0xc9, 0xea, 0x01, 0x01, 0xb1, 0x71, 0xb2, 0x54, + 0x2a, 0x21, 0x13, 0x86, 0x5f, 0xb1, 0x91, 0x41, + 0xa8, 0x90, 0x40, 0x06, 0xaa, 0x0d, 0x7a, 0xe8, + 0x06, 0x46, 0x24, 0x0e, 0x09, 0xbe, 0x16, 0x04, + 0x34, 0x84, 0x65, 0xca, 0x11, 0x44, 0x82, 0xe6, + 0x0a, 0x82, 0x5e, 0x36, 0xb7, 0x49, 0xd3, 0x20, + 0xfa, 0x68, 0xca, 0x4d, 0x81, 0x75, 0x0e, 0x74, + 0x22, 0x16, 0xa3, 0x84, 0x3a, 0xaa, 0x16, 0x18, + 0x59, 0x9b, 0x21, 0x99, 0x49, 0xd9, 0x12, 0xd9, + 0xf7, 0x4b, 0x71, 0x01, 0x9b, 0x9a, 0x6d, 0xf4, + 0x50, 0xe9, 0x88, 0xbe, 0x51, 0xd9, 0x29, 0x04, + 0x1d, 0x28, 0x54, 0x76, 0xe0, 0x92, 0xf2, 0x92, + 0xbc, 0xec, 0x33, 0x6e, 0x0c, 0x83, 0x3f, 0x42, + 0x02, 0x70, 0x02, 0xaa, 0xf0, 0x66, 0x88, 0x20, + 0x95, 0x18, 0x0d, 0x35, 0xea, 0x7f, 0xb4, 0x30, + 0xc3, 0x7e, 0x85, 0x8c, 0xc4, 0x72, 0x8b, 0xb7, + 0x8a, 0xd7, 0x63, 0x64, 0xfa, 0xe2, 0x43, 0x18, + 0x70, 0x5e, 0x73, 0xc3, 0xcf, 0xea, 0x0d, 0xae, + 0xb0, 0x0e, 0x87, 0x42, 0x37, 0x7c, 0xf2, 0xc9, + 0xd9, 0x22, 0x96, 0x06, 0x3a, 0x84, 0x44, 0x8e, + 0xc1, 0x71, 0xc9, 0x35, 0x75, 0x28, 0xd2, 0x17, + 0x08, 0x40, 0x6b, 0x6b, 0x81, 0x6e, 0x64, 0x68, + 0x21, 0x12, 0x62, 0xf4, 0xa9, 0xc7, 0x70, 0xc6, + 0xbd, 0x90, 0xdb, 0x69, 0x50, 0x58, 0xed, 0x70, + 0xc5, 0x7a, 0xf2, 0xaa, 0x11, 0x04, 0x41, 0x01, + 0xfc, 0xa4, 0x62, 0xe8, 0x15, 0x09, 0xc2, 0xa0, + 0x28, 0x1a, 0x26, 0x9b, 0xc6, 0xb0, 0xdb, 0x4c, + 0x06, 0x37, 0x33, 0x34, 0x40, 0x4d, 0xdc, 0x3c, + 0x10, 0xed, 0x3e, 0x48, 0x23, 0x91, 0x78, 0x5d, + 0x47, 0x1d, 0xbd, 0xbf, 0x55, 0xc8, 0xe2, 0x29, + 0xda, 0x4e, 0x8a, 0xd4, 0xec, 0x03, 0x13, 0xea, + 0x7a, 0xb2, 0x5f, 0xf6, 0x80, 0x85, 0x0e, 0xa3, + 0x0d, 0xb8, 0x91, 0x8e, 0x9f, 0xa9, 0x8c, 0x2c, + 0x8d, 0x0e, 0x65, 0x40, 0x6c, 0x35, 0x25, 0x23, + 0x12, 0xa2, 0x1c, 0x9b, 0x4c, 0xe1, 0xbb, 0xeb, + 0x24, 0xeb, 0x8c, 0x9a, 0x07, 0xaa, 0x04, 0x46, + 0x1c, 0x90, 0x90, 0xc2, 0x23, 0xa1, 0xc5, 0x22, + 0x52, 0x20, 0x22, 0x3d, 0x7b, 0x56, 0xe0, 0x74, + 0x4f, 0xf8, 0xaa, 0x45, 0x48, 0xe0, 0x2f, 0xa6, + 0x71, 0x39, 0x01, 0xc1, 0x20, 0xe8, 0x88, 0x04, + 0x1a, 0xe6, 0xa9, 0xce, 0x9e, 0x2f, 0x05, 0x0d, + 0x09, 0x19, 0x1c, 0xbb, 0xc0, 0xfe, 0xf4, 0x50, + 0x56, 0xe3, 0x62, 0x75, 0xa6, 0x8f, 0x5d, 0x4d, + 0xcd, 0xcb, 0x5c, 0xae, 0x19, 0xc8, 0xa2, 0x56, + 0xd3, 0x8e, 0x84, 0x4c, 0x52, 0xa8, 0x24, 0xd1, + 0xb2, 0x40, 0xe9, 0xb6, 0xa0, 0xec, 0x81, 0x5a, + 0x48, 0x2d, 0x0e, 0x87, 0xdc, 0x30, 0x8d, 0x52, + 0xd7, 0x0a, 0x5e, 0x33, 0x95, 0xee, 0x7e, 0xf8, + 0xb1, 0x19, 0x6a, 0xb4, 0x10, 0xda, 0x04, 0x11, + 0x83, 0xbc, 0xea, 0x1c, 0x49, 0xe9, 0xe4, 0xc2, + 0xd9, 0xdf, 0x65, 0x0f, 0xd0, 0xc4, 0x03, 0x9e, + 0x01, 0xbe, 0xed, 0x81, 0x79, 0x00, 0x8f, 0x38, + 0xcd, 0x5f, 0xbe, 0x0b, 0x7f, 0xda, 0x13, 0x0c, + 0x18, 0x5c, 0xc7, 0xaf, 0x1f, 0x64, 0x78, 0xbf, + 0x72, 0x7f, 0x19, 0xc6, 0x40, 0xa8, 0x1f, 0xd0, + 0x85, 0x68, 0x1d, 0x87, 0x57, 0xae, 0x29, 0x3b, + 0xc2, 0x2f, 0xba, 0x13, 0x3e, 0x31, 0x8f, 0x8c, + 0x63, 0xe3, 0x18, 0xf8, 0xc6, 0x3e, 0x31, 0x8f, + 0x8c, 0x63, 0xe3, 0x18, 0xf8, 0xc6, 0x3e, 0x31, + 0x8f, 0x8c, 0x63, 0xe3, 0x18, 0xf8, 0xc6, 0x3e, + 0x31, 0x8f, 0x8c, 0x63, 0xe3, 0x18, 0xf8, 0xc6, + 0x3e, 0x31, 0x80, 0x88, 0x4e, 0x42, 0x29, 0xd8, + 0x72, 0x11, 0x76, 0x2a, 0x4b, 0xa1, 0x4b, 0x62, + 0x34, 0x8e, 0x25, 0x11, 0xaa, 0xdb, 0xe7, 0x6f, + 0xa9, 0xc6, 0x42, 0xf1, 0x59, 0x41, 0xc3, 0xf7, + 0x34, 0x22, 0xdd, 0xf4, 0x5c, 0x70, 0xb6, 0xe1, + 0x14, 0xfb, 0xa7, 0xfa, 0x42, 0x44, 0x89, 0x12, + 0x24, 0x48, 0x91, 0x22, 0x44, 0x89, 0x12, 0x24, + 0x48, 0x91, 0x20, 0x56, 0x7c, 0xbb, 0xb5, 0xd2, + 0x86, 0xff, 0x00, 0x86, 0x10, 0x24, 0xd9, 0xec, + 0x01, 0xff, 0x00, 0x7f, 0xda, 0x0e, 0x94, 0xd4, + 0x16, 0x1d, 0x5f, 0xd8, 0xde, 0x0b, 0x28, 0x5c, + 0xf6, 0x04, 0xfa, 0xeb, 0x0a, 0xc4, 0x89, 0x9d, + 0x38, 0xc1, 0x01, 0xf4, 0xec, 0xfd, 0xf5, 0xff, + 0x00, 0xe1, 0xe0, 0x82, 0x08, 0x20, 0x82, 0x08, + 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, + 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, + 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, + 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, + 0x08, 0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, + 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x80, 0x2d, + 0x47, 0x6c, 0x4f, 0xd9, 0x38, 0x90, 0xa5, 0x82, + 0x8c, 0xec, 0x1d, 0x0f, 0xa6, 0xb2, 0x27, 0x69, + 0xb7, 0x79, 0xd9, 0xff, 0x00, 0xe3, 0x21, 0x42, + 0x85, 0x0a, 0x14, 0x28, 0x50, 0xa1, 0x42, 0x85, + 0x0a, 0x14, 0x28, 0x50, 0xa1, 0x42, 0x85, 0x0a, + 0x14, 0x28, 0x50, 0xa1, 0x42, 0x85, 0x0a, 0x14, + 0x28, 0x50, 0xa1, 0x42, 0x85, 0x0a, 0x14, 0x28, + 0x50, 0xa1, 0x42, 0x85, 0x0a, 0x14, 0x28, 0x50, + 0xa1, 0x42, 0x85, 0x0a, 0x14, 0x28, 0x50, 0xa1, + 0x42, 0x85, 0x0a, 0x14, 0x28, 0x50, 0xa1, 0x42, + 0x85, 0x0a, 0x14, 0x28, 0x50, 0xa1, 0x42, 0x84, + 0xe2, 0x28, 0x46, 0xbd, 0x12, 0xec, 0xe7, 0xff, + 0xd9, +}; + +static const uint8_t data_dk_tm4c129x_jpg[] = +{ + /* /dk-tm4c129x.jpg */ + 0x2f, 0x64, 0x6b, 0x2d, 0x74, 0x6d, 0x34, 0x63, + 0x31, 0x32, 0x39, 0x78, 0x2e, 0x6a, 0x70, 0x67, + 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x04, 0x05, 0x0a, 0x07, + 0x07, 0x06, 0x08, 0x0c, 0x0a, 0x0c, 0x0c, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0d, 0x0e, 0x12, 0x10, 0x0d, + 0x0e, 0x11, 0x0e, 0x0b, 0x0b, 0x10, 0x16, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0x0c, 0x0f, + 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, + 0x14, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x03, 0x04, + 0x04, 0x05, 0x04, 0x05, 0x09, 0x05, 0x05, 0x09, + 0x14, 0x0d, 0x0b, 0x0d, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc2, + 0x00, 0x11, 0x08, 0x00, 0xac, 0x00, 0xd0, 0x03, + 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x03, 0x04, 0x05, 0x06, 0x07, 0x01, 0x08, 0xff, + 0xc4, 0x00, 0x1b, 0x01, 0x00, 0x01, 0x05, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, + 0x04, 0x05, 0x06, 0x07, 0xff, 0xda, 0x00, 0x0c, + 0x03, 0x01, 0x00, 0x02, 0x10, 0x03, 0x10, 0x00, + 0x00, 0x01, 0x7b, 0x34, 0x2a, 0x02, 0xe0, 0xe4, + 0x1d, 0x03, 0xc0, 0x78, 0x0e, 0xd0, 0x74, 0x82, + 0xe0, 0x60, 0x70, 0xe1, 0x28, 0xe5, 0x6f, 0x5e, + 0xd3, 0x89, 0xab, 0xb9, 0xb1, 0x53, 0x82, 0x26, + 0xa8, 0x41, 0x12, 0x11, 0x35, 0x08, 0xa8, 0x50, + 0x01, 0xd0, 0x32, 0x19, 0xec, 0x76, 0x5c, 0x03, + 0xa1, 0x1d, 0x03, 0xc0, 0x6e, 0x82, 0xa2, 0xd8, + 0xc7, 0x54, 0x18, 0x99, 0x93, 0x5d, 0x9e, 0xab, + 0xb5, 0x7c, 0xdd, 0xe7, 0x99, 0xdd, 0x61, 0xdf, + 0x1e, 0x81, 0xa9, 0xc7, 0xdc, 0x74, 0x31, 0x38, + 0xf8, 0x8a, 0xa8, 0x98, 0x84, 0x10, 0x8a, 0x11, + 0x50, 0x00, 0x0e, 0x81, 0xd1, 0x73, 0xa6, 0x4c, + 0xe9, 0x11, 0xd8, 0xa4, 0x82, 0xeb, 0x08, 0x6f, + 0x54, 0x1a, 0xdc, 0xf6, 0x7a, 0x33, 0xb5, 0x76, + 0xb2, 0x1b, 0xb8, 0xfd, 0x6c, 0xa9, 0xb6, 0x5b, + 0x1c, 0x69, 0x63, 0x47, 0xcb, 0xcb, 0x02, 0xca, + 0xce, 0x49, 0x0f, 0xad, 0x1d, 0x00, 0x54, 0x41, + 0xcc, 0x49, 0x50, 0xaa, 0x85, 0x0e, 0x08, 0x03, + 0xa0, 0x61, 0x72, 0xda, 0x5a, 0xc7, 0xad, 0x69, + 0x28, 0x74, 0xb3, 0xfa, 0xfb, 0x05, 0x9e, 0x95, + 0x6a, 0x7c, 0xaa, 0x4d, 0x8c, 0xd3, 0x12, 0xeb, + 0xf9, 0x1d, 0x8c, 0x0c, 0x77, 0x28, 0xfa, 0xbc, + 0x9d, 0x5a, 0xde, 0x34, 0xec, 0x53, 0xd9, 0x25, + 0xaf, 0x6b, 0xa5, 0xb1, 0x39, 0x05, 0xfd, 0xea, + 0xf7, 0x3d, 0x76, 0x9a, 0x91, 0x15, 0x11, 0x54, + 0x6c, 0xe6, 0x22, 0xad, 0x2b, 0x93, 0x80, 0x03, + 0xa1, 0x9a, 0x31, 0xd9, 0x9d, 0x6d, 0x1a, 0xe5, + 0x9a, 0x15, 0x68, 0xed, 0x27, 0x0d, 0xd6, 0xea, + 0xa2, 0xbc, 0xd6, 0x7a, 0x5d, 0x0e, 0x91, 0x06, + 0x84, 0x79, 0x25, 0x5a, 0x6a, 0x31, 0xb6, 0x32, + 0x29, 0xf6, 0x6a, 0xb5, 0x9b, 0x3b, 0x40, 0xa5, + 0xd0, 0x5d, 0xe8, 0x74, 0x0f, 0x35, 0x38, 0xdb, + 0x4d, 0xac, 0x6d, 0xcd, 0xcc, 0x30, 0x70, 0x42, + 0x08, 0x83, 0x9a, 0x92, 0xa7, 0x00, 0x06, 0x7b, + 0x35, 0x7c, 0xaa, 0x1b, 0x38, 0x08, 0xfb, 0x0c, + 0x57, 0x1e, 0xd6, 0xd4, 0x81, 0xb9, 0x8e, 0xdd, + 0xae, 0xb8, 0xe1, 0xf7, 0xc7, 0xb9, 0x86, 0x5b, + 0xf8, 0x16, 0x1a, 0xba, 0x16, 0x6c, 0xce, 0x93, + 0x3c, 0xb7, 0x91, 0x5e, 0x9f, 0x37, 0x45, 0xce, + 0xe9, 0x62, 0x26, 0x9d, 0xae, 0xb7, 0x09, 0xa4, + 0xab, 0x37, 0xe4, 0x89, 0xf3, 0x16, 0x42, 0x54, + 0x00, 0x01, 0x35, 0x44, 0x95, 0xbc, 0x0a, 0x9c, + 0xd0, 0x44, 0x46, 0xfc, 0x67, 0x1b, 0xb3, 0x8d, + 0x9a, 0xb5, 0x12, 0x7a, 0xd5, 0xdb, 0xd8, 0x2f, + 0x61, 0xbb, 0x6e, 0xc0, 0xef, 0xe7, 0x20, 0x25, + 0xd6, 0xd4, 0xa3, 0x26, 0x35, 0xbc, 0x5c, 0xe5, + 0x67, 0xcf, 0xf6, 0x38, 0xbb, 0x46, 0x7d, 0xeb, + 0xa6, 0x7f, 0x6a, 0x8e, 0xa7, 0x23, 0xea, 0x9b, + 0xdc, 0xc3, 0xd0, 0xae, 0xc6, 0xe9, 0x97, 0x25, + 0x86, 0x40, 0x00, 0x02, 0x82, 0x6a, 0xd4, 0x15, + 0x0a, 0x8b, 0x80, 0x67, 0x74, 0x74, 0x7c, 0xde, + 0xa6, 0xbf, 0x3d, 0x0a, 0x9d, 0xfe, 0x62, 0x52, + 0xbe, 0xaf, 0x24, 0x73, 0xaa, 0xf5, 0xb4, 0xbc, + 0xde, 0xc9, 0x09, 0x10, 0x95, 0xf5, 0x18, 0xd8, + 0xa5, 0x4f, 0xd0, 0xe6, 0xe9, 0x1a, 0x9c, 0x9d, + 0xde, 0xb6, 0xb4, 0x4b, 0xab, 0xfa, 0x15, 0xb4, + 0xe7, 0x63, 0x52, 0x49, 0x16, 0xb1, 0x62, 0x09, + 0x17, 0xa0, 0x00, 0x00, 0x38, 0x20, 0x14, 0x06, + 0x6c, 0xe8, 0xbc, 0xf3, 0x9b, 0xd3, 0xc7, 0xd3, + 0x7c, 0x7d, 0x97, 0xa1, 0x1c, 0x2b, 0xbf, 0x4a, + 0x83, 0x7f, 0x95, 0xda, 0x31, 0xba, 0xdb, 0xbc, + 0x7a, 0x2e, 0x64, 0xac, 0x80, 0xb4, 0xca, 0x7b, + 0x55, 0x4b, 0x59, 0xaf, 0x2c, 0xd4, 0xb1, 0xd9, + 0xe7, 0x35, 0x69, 0x33, 0xe7, 0xc6, 0x66, 0xcb, + 0x2e, 0x9e, 0xf6, 0x5e, 0xe6, 0xac, 0xb0, 0x00, + 0x00, 0x03, 0x81, 0xc0, 0x8b, 0x56, 0x60, 0x70, + 0x69, 0x62, 0x55, 0x65, 0xb4, 0xd0, 0xe9, 0xa8, + 0xfa, 0x3c, 0xd5, 0xba, 0x8e, 0xfd, 0x46, 0xfe, + 0x62, 0xb3, 0xd1, 0xbe, 0x73, 0x7e, 0xa1, 0x2a, + 0xea, 0xcb, 0x4d, 0x46, 0xfb, 0x6f, 0x9e, 0x9d, + 0x9b, 0x38, 0xb6, 0xf2, 0x68, 0x0f, 0x8e, 0x84, + 0x2d, 0x11, 0xe9, 0x6e, 0x6c, 0x97, 0xbc, 0x8e, + 0xd6, 0x27, 0x67, 0x8c, 0xf5, 0xf1, 0x08, 0x00, + 0x00, 0x08, 0x05, 0x02, 0x86, 0x6b, 0x24, 0x1e, + 0x76, 0xce, 0xe9, 0x63, 0x2a, 0x2a, 0x8e, 0xd0, + 0x84, 0x7e, 0x4c, 0xa4, 0x7b, 0x33, 0x1a, 0xbc, + 0x66, 0xd5, 0x97, 0xd4, 0xbd, 0xb3, 0x8b, 0x57, + 0x9e, 0x9d, 0x1d, 0xed, 0xa0, 0x38, 0x84, 0x50, + 0x00, 0x00, 0x00, 0x34, 0xe6, 0xba, 0xe3, 0x91, + 0xdb, 0xed, 0x37, 0xf9, 0xdb, 0x9d, 0xac, 0x80, + 0x00, 0x12, 0x02, 0x01, 0x42, 0x1d, 0x59, 0x89, + 0x43, 0xa3, 0x8a, 0x53, 0xb1, 0x61, 0xab, 0xd0, + 0x53, 0x6f, 0xe1, 0x48, 0x3e, 0x0d, 0xad, 0xf9, + 0xf9, 0x1c, 0x8d, 0xaa, 0x38, 0x4c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0d, 0xee, 0xbe, + 0x94, 0x5b, 0x6c, 0x7a, 0x55, 0xf4, 0xe7, 0xa7, + 0xa2, 0x01, 0x20, 0x48, 0x08, 0x00, 0x33, 0x39, + 0x6b, 0x63, 0xd8, 0x5d, 0xb0, 0x8e, 0x6a, 0xb5, + 0x96, 0x67, 0xda, 0x9c, 0x9e, 0x86, 0xc4, 0xae, + 0x2b, 0x22, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xe4, 0x37, 0xea, 0x3b, 0xd3, + 0x99, 0xfb, 0xbb, 0x56, 0xd7, 0x16, 0xfa, 0x48, + 0x12, 0x04, 0xc0, 0x80, 0x02, 0x15, 0xd1, 0xe4, + 0xf5, 0xb4, 0x68, 0x55, 0xb5, 0xb2, 0x7b, 0x74, + 0x1b, 0xa4, 0x87, 0x9f, 0x23, 0x46, 0x62, 0x66, + 0xce, 0x00, 0x00, 0x00, 0x03, 0xa1, 0x62, 0x0a, + 0xf8, 0x14, 0x27, 0x02, 0x64, 0x1a, 0xa1, 0xe8, + 0x2c, 0xee, 0x8a, 0xe4, 0xfa, 0xd7, 0x9b, 0xd8, + 0xc5, 0x50, 0x80, 0x50, 0x01, 0xd0, 0xcb, 0x26, + 0xa9, 0xe7, 0xea, 0x5b, 0xf9, 0x4d, 0x8a, 0x33, + 0xb5, 0xf5, 0x2b, 0xf6, 0x72, 0x6f, 0x0d, 0x64, + 0xb2, 0x36, 0xa2, 0xab, 0xb9, 0x85, 0x5c, 0x08, + 0x05, 0x07, 0x80, 0x40, 0xe0, 0x42, 0x03, 0x01, + 0x2e, 0xed, 0x34, 0xf8, 0xed, 0x67, 0x4c, 0xb5, + 0xbb, 0x0d, 0xbc, 0x59, 0xce, 0x28, 0x70, 0x00, + 0x74, 0x2b, 0xee, 0x8b, 0x1a, 0x86, 0xfe, 0x1a, + 0x49, 0x51, 0x73, 0x54, 0x65, 0xa3, 0x4f, 0x93, + 0xa4, 0xb1, 0x6a, 0xea, 0x9e, 0x88, 0x07, 0x61, + 0xe6, 0x50, 0xd0, 0xc2, 0xb0, 0x0d, 0x91, 0x2f, + 0x68, 0x5c, 0xa2, 0xb4, 0xee, 0xae, 0xb3, 0x36, + 0x59, 0x7b, 0x3e, 0x7e, 0xa5, 0x3d, 0x1b, 0x54, + 0xd5, 0x00, 0xa0, 0x38, 0x00, 0x3a, 0x05, 0x0c, + 0x9a, 0x6a, 0x78, 0x66, 0x6f, 0x53, 0x63, 0x92, + 0xa5, 0x25, 0xce, 0xca, 0xe7, 0xa3, 0x27, 0x1a, + 0xe9, 0xeb, 0x06, 0x70, 0xe0, 0xe1, 0x3c, 0x25, + 0xfd, 0xa5, 0xae, 0x3b, 0x6a, 0xd4, 0xd6, 0x65, + 0x15, 0xb7, 0xb3, 0xd0, 0x96, 0xbd, 0x86, 0x2c, + 0xd0, 0x5d, 0x0b, 0xcc, 0x73, 0xdd, 0x59, 0x60, + 0x00, 0x0e, 0x00, 0x0e, 0x80, 0x0a, 0xcb, 0xa1, + 0xc8, 0x59, 0x62, 0x8b, 0x47, 0xa0, 0xa7, 0xb6, + 0xcb, 0x39, 0xe9, 0xc6, 0x3e, 0x9d, 0x8d, 0x59, + 0x78, 0x7e, 0x7d, 0x82, 0x3b, 0x2d, 0x6a, 0x6d, + 0xa3, 0x1d, 0xa9, 0x09, 0xf3, 0xa6, 0x6e, 0xe2, + 0x2b, 0x6b, 0x39, 0xfa, 0x2d, 0x81, 0xb2, 0xd8, + 0x99, 0x24, 0xdb, 0x64, 0x70, 0x28, 0x0e, 0x09, + 0xd1, 0x40, 0x00, 0x00, 0x00, 0x82, 0x64, 0x53, + 0x53, 0xce, 0xf9, 0xef, 0x42, 0xb3, 0xcb, 0x96, + 0x83, 0x75, 0x6a, 0xd1, 0x5a, 0xad, 0x4a, 0xdb, + 0x69, 0x49, 0xd5, 0x8c, 0xe9, 0xeb, 0xd8, 0x4f, + 0x6d, 0x66, 0xcb, 0xb5, 0xf6, 0x26, 0xc9, 0x61, + 0x6c, 0xb2, 0x6d, 0x71, 0xc5, 0x00, 0x00, 0x08, + 0x9a, 0xa1, 0x91, 0x42, 0x9d, 0x45, 0xe8, 0x00, + 0x00, 0x02, 0xa8, 0xf8, 0x72, 0xc6, 0xc9, 0x54, + 0xa3, 0xbf, 0xd1, 0x25, 0x1f, 0x1c, 0xbd, 0x8c, + 0xb9, 0x5b, 0x39, 0xb3, 0xed, 0x92, 0xc2, 0xd9, + 0x27, 0x5b, 0x23, 0xa4, 0x77, 0x40, 0x00, 0x00, + 0x00, 0x0a, 0x22, 0x4a, 0x84, 0x54, 0x59, 0x17, + 0x81, 0xc5, 0x0c, 0x81, 0xd1, 0x7a, 0x28, 0x04, + 0x84, 0xc7, 0xe7, 0xa4, 0xc2, 0x0b, 0x93, 0x53, + 0x55, 0xb0, 0xb6, 0x4b, 0x03, 0x24, 0x95, 0x47, + 0xa8, 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc1, + 0x12, 0x73, 0x50, 0x54, 0x4c, 0x44, 0x95, 0x1f, + 0x35, 0xfc, 0x10, 0xaa, 0x14, 0x6f, 0x45, 0x59, + 0x1c, 0xab, 0x5d, 0xd1, 0x62, 0x15, 0x8e, 0xc5, + 0x76, 0x8e, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x22, 0x4a, 0x8d, 0xd5, 0xa8, 0xb9, + 0x11, 0x51, 0x15, 0x6b, 0x71, 0x3f, 0xff, 0xc4, + 0x00, 0x2b, 0x10, 0x00, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x01, 0x04, 0x01, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x04, 0x02, 0x05, 0x00, + 0x01, 0x06, 0x12, 0x11, 0x13, 0x14, 0x07, 0x10, + 0x20, 0x30, 0x15, 0x16, 0x23, 0x24, 0x31, 0x21, + 0x22, 0x25, 0x36, 0xff, 0xda, 0x00, 0x08, 0x01, + 0x01, 0x00, 0x01, 0x05, 0x02, 0xeb, 0x9a, 0x8e, + 0x6a, 0x19, 0x18, 0x64, 0x47, 0x91, 0x1e, 0x44, + 0x79, 0x11, 0xe4, 0x47, 0x9d, 0x75, 0x1d, 0x0f, + 0xa9, 0x63, 0xd3, 0x08, 0x41, 0x87, 0x06, 0xe0, + 0x4f, 0x81, 0x2c, 0x4f, 0x9d, 0x73, 0xae, 0x75, + 0xcd, 0xc7, 0x3a, 0xe7, 0x4c, 0xe9, 0x9d, 0x33, + 0xa6, 0x74, 0xcf, 0x5e, 0x6a, 0x19, 0x18, 0x64, + 0x47, 0x91, 0x1e, 0x44, 0x78, 0xfb, 0x83, 0xac, + 0x5e, 0x9e, 0xc4, 0x36, 0xeb, 0xf5, 0xd4, 0x71, + 0xae, 0x61, 0x58, 0x99, 0x39, 0x0f, 0x37, 0x85, + 0x88, 0x57, 0xe6, 0x0c, 0xa1, 0x0e, 0x2f, 0x76, + 0xcd, 0xe0, 0x0a, 0x08, 0x43, 0x75, 0x84, 0x94, + 0xa5, 0x43, 0x61, 0x25, 0xe7, 0xff, 0x00, 0x52, + 0x67, 0x5c, 0xeb, 0x9d, 0x33, 0xa6, 0x74, 0xcf, + 0x5e, 0x7a, 0xf3, 0xd7, 0x9e, 0xbc, 0xf5, 0xe6, + 0xa1, 0x91, 0x1e, 0x44, 0x79, 0xb6, 0x57, 0x0e, + 0x6e, 0xf9, 0x58, 0x4b, 0x90, 0x5c, 0x4d, 0xd4, + 0x6b, 0xae, 0x4d, 0x52, 0x6b, 0x4e, 0x50, 0x01, + 0x63, 0x10, 0x2f, 0xb2, 0x14, 0xee, 0x17, 0x50, + 0xac, 0xf1, 0x94, 0x56, 0x7b, 0x52, 0x76, 0x53, + 0x8e, 0x89, 0x52, 0xcc, 0xfb, 0xa9, 0xcb, 0x0c, + 0x31, 0xc3, 0x94, 0x1b, 0x4e, 0x88, 0x12, 0x90, + 0x76, 0xbe, 0x6c, 0x39, 0xeb, 0xcf, 0x5e, 0x7a, + 0xf3, 0xd7, 0x9d, 0x33, 0xa6, 0x74, 0xc6, 0x89, + 0xb5, 0x84, 0xef, 0xfc, 0x6c, 0xb4, 0x0c, 0x4c, + 0x27, 0x28, 0x94, 0xd9, 0x5f, 0x48, 0xba, 0xb4, + 0x7f, 0x6b, 0xd9, 0x35, 0x00, 0xaa, 0x7b, 0x42, + 0x93, 0xda, 0x4d, 0xcb, 0xc9, 0xa3, 0x0f, 0x17, + 0x6c, 0x45, 0x76, 0x24, 0x49, 0x4b, 0x5d, 0xca, + 0xfa, 0x55, 0x13, 0x2d, 0x6e, 0x25, 0xc7, 0xab, + 0xfd, 0x6a, 0xab, 0x1d, 0x47, 0x8c, 0x35, 0xa9, + 0xd6, 0xf8, 0xcd, 0xc3, 0x5b, 0xcd, 0x87, 0x36, + 0x1c, 0xf5, 0xe7, 0x4c, 0xe9, 0x9d, 0x33, 0xa6, + 0x1a, 0x3a, 0xf5, 0x5b, 0x33, 0x28, 0xd7, 0x37, + 0xcb, 0x1e, 0xf3, 0x6e, 0x79, 0x3c, 0xb5, 0x06, + 0xe2, 0xb4, 0xae, 0x65, 0xf2, 0xf6, 0x97, 0x8b, + 0x45, 0xe1, 0xc7, 0x42, 0x31, 0x4e, 0x6b, 0x9f, + 0x4d, 0xfc, 0x7d, 0xc5, 0xaa, 0x41, 0x1a, 0x33, + 0xa9, 0x54, 0xc2, 0x18, 0x25, 0x54, 0xd9, 0x3e, + 0x47, 0xf2, 0x7c, 0x79, 0xb6, 0x76, 0xba, 0xed, + 0x12, 0x64, 0x5a, 0xe8, 0x35, 0x19, 0x57, 0xcf, + 0x89, 0x36, 0xa3, 0xbe, 0xd1, 0xfb, 0x6e, 0x1e, + 0x73, 0x63, 0xce, 0xb9, 0xe3, 0x3c, 0x64, 0x83, + 0xde, 0x1c, 0x9a, 0xb7, 0x66, 0x5a, 0x5a, 0x9c, + 0xa0, 0xaa, 0xa5, 0x49, 0x3b, 0xd7, 0x76, 0xe8, + 0xc3, 0xbd, 0x88, 0x62, 0x84, 0x80, 0xc5, 0x93, + 0x3d, 0x2b, 0xf8, 0x91, 0x88, 0xc6, 0x39, 0x09, + 0xaa, 0x6a, 0x22, 0xb1, 0x8c, 0x2e, 0x41, 0x67, + 0x2f, 0x43, 0x4b, 0x41, 0x12, 0x69, 0x58, 0xa6, + 0xf7, 0xf8, 0xd6, 0x9b, 0x34, 0x95, 0xa7, 0xa1, + 0xb8, 0x76, 0x09, 0x7d, 0x3b, 0x7f, 0x78, 0x77, + 0x18, 0x16, 0x08, 0x85, 0xdc, 0xbe, 0xfb, 0x8e, + 0x78, 0xfb, 0x01, 0x7e, 0xfb, 0xbc, 0xac, 0xd6, + 0xa0, 0x0a, 0xf1, 0x2c, 0x43, 0xcc, 0x90, 0x2d, + 0x9c, 0xbd, 0x59, 0xb6, 0xc5, 0xbd, 0xa9, 0x38, + 0x4c, 0xa7, 0x18, 0x7d, 0x4b, 0xc0, 0x5a, 0x5e, + 0x66, 0xf7, 0x46, 0x02, 0xd1, 0x20, 0x60, 0x47, + 0x63, 0xb7, 0x14, 0xe6, 0xd5, 0x97, 0xf6, 0x5c, + 0xad, 0x73, 0xce, 0x16, 0x79, 0x4d, 0xc8, 0xa7, + 0x49, 0x6c, 0x03, 0xc1, 0xb0, 0x47, 0x5b, 0xd6, + 0x33, 0x60, 0xca, 0xac, 0xd4, 0x58, 0x6a, 0xc0, + 0x7f, 0x7d, 0xeb, 0x3c, 0x60, 0x03, 0xd3, 0x4e, + 0xaf, 0xa6, 0x17, 0xb9, 0x5e, 0x4b, 0x48, 0x4c, + 0x17, 0x45, 0x76, 0xbe, 0x5d, 0x37, 0x5d, 0xf0, + 0x5c, 0x4a, 0xa8, 0x23, 0x25, 0xf4, 0xf4, 0x35, + 0x28, 0xac, 0x75, 0xad, 0xc4, 0x3e, 0xcd, 0xc0, + 0x7a, 0xf8, 0xc2, 0x26, 0x87, 0xa3, 0x94, 0x93, + 0xcb, 0x0a, 0xc9, 0x88, 0x6b, 0xce, 0x55, 0xed, + 0xa4, 0xc4, 0x49, 0x03, 0x0e, 0x51, 0x3f, 0x04, + 0x23, 0xb1, 0xa7, 0xb4, 0x6f, 0x75, 0x93, 0x95, + 0xdd, 0x53, 0xed, 0x21, 0xb3, 0xed, 0x6f, 0xcf, + 0x90, 0xa5, 0xae, 0xd7, 0xde, 0xd4, 0xd7, 0x51, + 0x88, 0x96, 0x77, 0x89, 0x4a, 0x1b, 0xab, 0x63, + 0x53, 0xc6, 0xa1, 0x22, 0x68, 0x3e, 0x53, 0x67, + 0x8f, 0xd8, 0x86, 0x6e, 0xb0, 0xc2, 0x22, 0xde, + 0xcb, 0x08, 0x43, 0x53, 0x88, 0x46, 0xce, 0xfe, + 0x5e, 0xdb, 0xa7, 0x81, 0x66, 0x92, 0x5a, 0x4d, + 0x75, 0xb8, 0x6d, 0xa3, 0x81, 0xa9, 0xe2, 0x0c, + 0x85, 0x3d, 0xd2, 0xd4, 0xd5, 0x8d, 0x67, 0xa3, + 0xc5, 0xad, 0x29, 0x39, 0x62, 0xf6, 0xa4, 0xd9, + 0x61, 0xa9, 0xfe, 0x56, 0x0b, 0xfc, 0x95, 0xef, + 0x12, 0xf6, 0xae, 0x2d, 0x6c, 0x07, 0x19, 0x22, + 0x60, 0x92, 0x3f, 0x05, 0xc8, 0x3b, 0x26, 0x93, + 0xb6, 0x4f, 0xd9, 0xaa, 0x99, 0xfa, 0x5b, 0xd7, + 0x6d, 0xe6, 0x9c, 0x38, 0x42, 0xa5, 0x73, 0x0d, + 0x91, 0x6e, 0x2e, 0x7e, 0xc2, 0xe3, 0x15, 0xe1, + 0xc6, 0x39, 0x0d, 0x3d, 0x34, 0x5e, 0xfa, 0x96, + 0x18, 0xe3, 0xbc, 0xf6, 0xdd, 0xb8, 0xb0, 0xc9, + 0x9b, 0x9f, 0x1a, 0xbd, 0xd5, 0x69, 0x6d, 0x49, + 0x2a, 0xd9, 0xfd, 0x3b, 0x2e, 0xdd, 0xe4, 0x3f, + 0x9d, 0xda, 0x9e, 0xa3, 0x72, 0x2a, 0xff, 0x00, + 0x54, 0xd1, 0x6a, 0x1d, 0x6d, 0x54, 0x99, 0x44, + 0x83, 0x3d, 0x64, 0xf8, 0xe6, 0xe0, 0x52, 0xe1, + 0x76, 0x6c, 0x68, 0x1c, 0x51, 0x51, 0xe4, 0xb7, + 0x57, 0x53, 0x8e, 0x73, 0xf4, 0x17, 0xd3, 0xbf, + 0x51, 0x9f, 0x36, 0x39, 0x74, 0xf3, 0xfb, 0xfc, + 0x78, 0xeb, 0xeb, 0xd9, 0x86, 0x2b, 0x6a, 0xae, + 0x7c, 0x76, 0xf2, 0x36, 0x80, 0xfc, 0xac, 0xd7, + 0xf9, 0x0b, 0xda, 0xa9, 0xed, 0x14, 0x3f, 0xc2, + 0x6d, 0x22, 0xe8, 0xc9, 0x59, 0x2b, 0x20, 0x30, + 0xbd, 0x96, 0xd6, 0x93, 0xfc, 0xa0, 0xa1, 0xa6, + 0x77, 0x95, 0xd9, 0xbb, 0x93, 0x9c, 0x89, 0x2f, + 0xd3, 0xc7, 0xae, 0x3f, 0xa8, 0x12, 0xad, 0x7a, + 0x74, 0xec, 0x53, 0xdb, 0x0e, 0xd9, 0x5f, 0xb6, + 0xfe, 0xff, 0x00, 0xef, 0x2d, 0xd5, 0xf4, 0x31, + 0x67, 0x45, 0xa6, 0x8c, 0x0a, 0x6f, 0xe2, 0xa0, + 0xec, 0x24, 0x50, 0xad, 0x2e, 0xa5, 0xe3, 0xd6, + 0x63, 0x5c, 0xf6, 0xb5, 0xd3, 0xaa, 0x7b, 0xf5, + 0x2c, 0xc1, 0x14, 0x3c, 0x0e, 0xbf, 0x2b, 0xad, + 0x51, 0xb3, 0xd2, 0xe2, 0x6e, 0x0d, 0xe5, 0xf3, + 0x7f, 0x85, 0xb2, 0xbe, 0xf5, 0xcb, 0xfd, 0x82, + 0x5d, 0x5b, 0x34, 0xaa, 0xf1, 0xb0, 0xec, 0x6b, + 0x20, 0x77, 0xd0, 0x8b, 0xf2, 0xc3, 0xff, 0x00, + 0xd1, 0xd2, 0x7e, 0x4b, 0x71, 0xe7, 0xda, 0xdc, + 0xa3, 0xb8, 0x4b, 0x01, 0x46, 0xfb, 0x3b, 0x1d, + 0x08, 0x45, 0x25, 0x9a, 0x63, 0x8a, 0xdc, 0x27, + 0xf1, 0x1e, 0x85, 0x2a, 0x33, 0x4a, 0x51, 0x97, + 0x6d, 0x7d, 0xbc, 0x7d, 0xb7, 0x1f, 0x3a, 0xb6, + 0x53, 0xe3, 0x31, 0xcb, 0x41, 0x35, 0xc0, 0xa2, + 0x04, 0x83, 0x25, 0xde, 0xf5, 0x20, 0x13, 0x69, + 0xb0, 0x95, 0x91, 0x2a, 0xde, 0xe4, 0xb5, 0xb0, + 0x5c, 0xe1, 0xd4, 0x24, 0x57, 0xfe, 0x9d, 0xae, + 0xac, 0x9a, 0xe1, 0x24, 0x15, 0x3d, 0x71, 0xeb, + 0x9c, 0x4e, 0x4e, 0x2a, 0x2d, 0x11, 0xd7, 0x5c, + 0x1b, 0x5c, 0x6e, 0x4c, 0x90, 0x76, 0x15, 0xb5, + 0xba, 0x7b, 0x90, 0x8c, 0xa7, 0x5d, 0x6b, 0x7b, + 0xdd, 0xa1, 0xf4, 0xe4, 0xd2, 0xdd, 0x72, 0x28, + 0x71, 0xc4, 0xf8, 0xed, 0xf3, 0xdc, 0x7b, 0x28, + 0x2c, 0x9e, 0x7b, 0x5f, 0x8d, 0xca, 0x9e, 0xf5, + 0xec, 0x97, 0x99, 0x01, 0xc8, 0xca, 0x21, 0xc5, + 0x42, 0x91, 0xb6, 0x1c, 0xea, 0x41, 0xa6, 0xd7, + 0xb8, 0x3c, 0x74, 0xc3, 0x70, 0x02, 0x80, 0xeb, + 0x6c, 0xa5, 0xcc, 0xf8, 0xe7, 0xf0, 0x67, 0xb3, + 0xb7, 0x53, 0x8c, 0x57, 0xbd, 0x3a, 0xe7, 0x49, + 0x76, 0x85, 0x76, 0x17, 0x91, 0x17, 0xca, 0x95, + 0x76, 0x97, 0x51, 0x4f, 0xe9, 0xfe, 0xfc, 0x8a, + 0xae, 0x8e, 0x8f, 0x45, 0xe4, 0x24, 0x2e, 0xbf, + 0xf4, 0xd8, 0xd0, 0x14, 0x08, 0x21, 0x53, 0x5c, + 0x84, 0x21, 0xf9, 0x6f, 0x5d, 0xb5, 0x6a, 0xaf, + 0xc6, 0x67, 0x92, 0x52, 0x86, 0x6c, 0x71, 0x3e, + 0x1e, 0x8b, 0xd9, 0xcc, 0xb8, 0xfe, 0xa9, 0x1f, + 0x96, 0xb6, 0x9b, 0x12, 0x34, 0xc7, 0x3b, 0x5d, + 0x43, 0x90, 0xd3, 0xe6, 0xa7, 0x28, 0xc5, 0x0e, + 0x3f, 0x61, 0x67, 0x89, 0xf0, 0x2d, 0x47, 0x70, + 0x52, 0x92, 0x8b, 0x45, 0xe4, 0x65, 0x3e, 0xfd, + 0x56, 0x0e, 0x45, 0x7a, 0xc0, 0xaf, 0xbd, 0x6f, + 0x51, 0xdf, 0xfb, 0xc1, 0xae, 0x42, 0xe5, 0x32, + 0x8c, 0x2f, 0x2f, 0xce, 0xed, 0x4f, 0x78, 0x1d, + 0x52, 0x2d, 0x87, 0x6e, 0x34, 0x9c, 0xfe, 0x5b, + 0xcc, 0xc1, 0xea, 0x19, 0xfc, 0x70, 0xd5, 0xba, + 0x3c, 0xe2, 0x6f, 0xea, 0xae, 0xe7, 0xfa, 0x19, + 0x31, 0x9e, 0x00, 0xa9, 0xa4, 0x13, 0x1c, 0x8c, + 0xec, 0x6b, 0x4b, 0xd8, 0x3b, 0x10, 0x53, 0x84, + 0x3b, 0x1c, 0x20, 0x1c, 0xf1, 0xb9, 0x6c, 0x48, + 0x18, 0xd8, 0x0e, 0x3d, 0x39, 0x60, 0x29, 0x00, + 0x2c, 0x80, 0x20, 0x3f, 0xd3, 0x38, 0xf7, 0x8d, + 0x9a, 0xdf, 0x19, 0x9b, 0x20, 0x41, 0x66, 0xc3, + 0x5e, 0x1e, 0x41, 0x0b, 0x9e, 0x36, 0x3a, 0xfd, + 0x42, 0x00, 0x14, 0x6c, 0x51, 0x09, 0xa3, 0x15, + 0x99, 0x60, 0x8b, 0x52, 0x40, 0x5b, 0x18, 0x06, + 0x1c, 0x88, 0xe6, 0x5d, 0x82, 0x9c, 0xe6, 0xc0, + 0x71, 0xdd, 0x60, 0x6b, 0x00, 0x1c, 0xd4, 0x75, + 0x1f, 0xc7, 0xcf, 0xe8, 0xbd, 0x53, 0xda, 0x16, + 0x17, 0x8b, 0x40, 0xf9, 0x73, 0x41, 0xf5, 0x1d, + 0xb7, 0xb3, 0xda, 0x75, 0x9e, 0x8d, 0x8d, 0x68, + 0x43, 0x62, 0x48, 0xc6, 0xd8, 0x38, 0xf9, 0x67, + 0x80, 0xa1, 0x08, 0xf0, 0x6a, 0x88, 0x5f, 0x9f, + 0x9c, 0xed, 0x9e, 0x7e, 0xde, 0x73, 0xce, 0x76, + 0xcf, 0x3f, 0x72, 0x43, 0xd9, 0x07, 0xd7, 0xda, + 0xcc, 0x45, 0x7e, 0xd3, 0x0d, 0x43, 0x06, 0xc0, + 0x71, 0xdc, 0x0d, 0x50, 0x03, 0x91, 0x84, 0x63, + 0xfa, 0x3c, 0xe6, 0xe7, 0x9b, 0x96, 0x77, 0xcd, + 0xcf, 0xef, 0xe7, 0x3c, 0xe6, 0xb7, 0x9a, 0xdf, + 0xdd, 0x94, 0x84, 0x72, 0x0d, 0x51, 0x0b, 0xf5, + 0xef, 0x79, 0xb9, 0x66, 0xf7, 0x9b, 0xde, 0x6e, + 0x59, 0x29, 0x6f, 0x3f, 0xff, 0xc4, 0x00, 0x36, + 0x11, 0x00, 0x01, 0x04, 0x01, 0x03, 0x02, 0x02, + 0x08, 0x05, 0x04, 0x02, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x11, 0x05, + 0x12, 0x21, 0x13, 0x31, 0x30, 0x41, 0x14, 0x20, + 0x22, 0x23, 0x32, 0x51, 0x61, 0xb1, 0x10, 0x33, + 0x42, 0x81, 0x91, 0x40, 0x71, 0xa1, 0xd1, 0x15, + 0xf0, 0x24, 0xc1, 0xe1, 0xff, 0xda, 0x00, 0x08, + 0x01, 0x03, 0x01, 0x01, 0x3f, 0x01, 0xf1, 0x1b, + 0x0c, 0x92, 0x7c, 0x0d, 0xca, 0x76, 0x9f, 0x3b, + 0x30, 0x65, 0x1b, 0x73, 0xf3, 0x56, 0x2b, 0x3e, + 0xb9, 0xc3, 0xbc, 0xfc, 0x7c, 0xfa, 0x80, 0x13, + 0xd9, 0x10, 0x47, 0x08, 0x2f, 0xa2, 0xd3, 0x84, + 0x6c, 0x6e, 0xf9, 0x3e, 0xd9, 0x42, 0xec, 0x51, + 0xe0, 0xfe, 0x93, 0xdb, 0xcb, 0xf9, 0x4f, 0x9e, + 0x0b, 0x91, 0x96, 0x82, 0x0f, 0xd9, 0x5c, 0x82, + 0x52, 0xfe, 0xf9, 0x1f, 0x65, 0x24, 0x66, 0x37, + 0x6d, 0x77, 0x8a, 0x39, 0xec, 0xa3, 0xa5, 0x66, + 0x5f, 0x85, 0x85, 0x7f, 0xc4, 0x4e, 0xd6, 0xee, + 0x7f, 0x0b, 0xd0, 0x76, 0x8c, 0xe5, 0x63, 0x6b, + 0x94, 0xf6, 0xcb, 0x7d, 0xd0, 0x45, 0xa7, 0x38, + 0x4d, 0xad, 0x2b, 0xbb, 0x35, 0x1a, 0x6f, 0x67, + 0xe6, 0x70, 0xaa, 0x4b, 0xd3, 0x7e, 0xd3, 0xe6, + 0xaf, 0x57, 0x73, 0x5d, 0xbf, 0xc9, 0x53, 0x73, + 0xe3, 0x93, 0x2d, 0x42, 0x79, 0x31, 0xb7, 0x29, + 0xf9, 0x7f, 0x75, 0xb5, 0x61, 0x61, 0x63, 0xd7, + 0xa1, 0x5a, 0x3b, 0x4e, 0x2d, 0x90, 0xe1, 0x40, + 0xfa, 0x71, 0x93, 0xbd, 0x99, 0x51, 0xea, 0x90, + 0xb1, 0xc0, 0x36, 0x3c, 0x05, 0x67, 0x50, 0x64, + 0x0d, 0xc9, 0x07, 0x95, 0x52, 0xe1, 0xb4, 0xc2, + 0x1e, 0xa4, 0x9f, 0xa5, 0x3e, 0x3c, 0x95, 0x88, + 0xcb, 0x5e, 0xa6, 0x6e, 0x5c, 0xd7, 0x7c, 0xd4, + 0x30, 0xb1, 0xa0, 0x39, 0xce, 0x08, 0x9d, 0xa3, + 0x86, 0x2d, 0x4e, 0x5d, 0xe4, 0x34, 0x2e, 0x9e, + 0x63, 0xde, 0x84, 0xce, 0x92, 0x2e, 0x92, 0xdc, + 0x63, 0x38, 0x51, 0xd5, 0x89, 0xec, 0xeb, 0x79, + 0x2a, 0xf1, 0x37, 0x66, 0xee, 0x9f, 0x63, 0xca, + 0xb8, 0xf6, 0xbe, 0x5f, 0x65, 0xbb, 0x7f, 0x0c, + 0x2c, 0x2c, 0x2c, 0x7a, 0xb1, 0x4a, 0x60, 0x78, + 0x90, 0x79, 0x2b, 0x65, 0x9b, 0xb3, 0x1f, 0x62, + 0xb2, 0x51, 0x9e, 0x59, 0x9a, 0x18, 0xf3, 0x9c, + 0x2a, 0xe5, 0xd1, 0xf2, 0xee, 0x02, 0x9d, 0x8d, + 0x91, 0xbb, 0x98, 0xaa, 0x33, 0xd3, 0x07, 0x43, + 0xcf, 0xc9, 0x56, 0xd1, 0x9b, 0xb8, 0x36, 0x63, + 0xcf, 0x74, 0xd8, 0x64, 0x8b, 0xf2, 0x80, 0x03, + 0xfc, 0xa6, 0xd7, 0x2f, 0xe5, 0xef, 0x2a, 0x5d, + 0x3e, 0xa5, 0x82, 0xec, 0x3b, 0xb7, 0xf0, 0x9b, + 0xe8, 0xb2, 0x1f, 0x47, 0x85, 0x1a, 0xd2, 0x69, + 0xf2, 0x75, 0x5c, 0xde, 0x14, 0xe5, 0xd6, 0x24, + 0xea, 0x7c, 0xd6, 0x8c, 0xc6, 0x10, 0xf6, 0xbd, + 0x59, 0x30, 0xb5, 0x99, 0x71, 0xc6, 0x15, 0x99, + 0xaa, 0x48, 0xf2, 0x5b, 0x92, 0xa5, 0x76, 0x5d, + 0xb8, 0x0c, 0x7a, 0x98, 0x58, 0x58, 0xf5, 0x23, + 0x76, 0xe6, 0x6c, 0x3d, 0xc2, 0xc2, 0x85, 0xa5, + 0xaf, 0x04, 0x2d, 0x41, 0xcd, 0xe9, 0x35, 0x80, + 0xf6, 0x51, 0x59, 0x31, 0x34, 0xb4, 0x05, 0x5e, + 0x52, 0xd9, 0x9a, 0xf6, 0xf1, 0xca, 0xbd, 0x67, + 0xff, 0x00, 0x19, 0xf8, 0x3c, 0xad, 0x20, 0x49, + 0x2b, 0xde, 0x03, 0xf1, 0x95, 0x72, 0x4b, 0x02, + 0x42, 0xc9, 0x9c, 0x4a, 0xd2, 0x64, 0xd8, 0xe3, + 0x1c, 0xac, 0xdc, 0xd7, 0x7d, 0x3b, 0x7d, 0x53, + 0x2c, 0x53, 0x80, 0x97, 0x86, 0xe0, 0x80, 0xb5, + 0x0d, 0x43, 0xd2, 0xe3, 0x0d, 0x60, 0xec, 0x99, + 0x33, 0x58, 0x1b, 0x16, 0x15, 0x18, 0xe2, 0x3c, + 0xab, 0x90, 0x4a, 0xe6, 0x16, 0xc6, 0x13, 0xa2, + 0x2c, 0xe1, 0xfc, 0x2f, 0x76, 0x3f, 0x03, 0x8f, + 0x2f, 0x5c, 0x0c, 0xaf, 0xcb, 0x21, 0xc9, 0xb1, + 0x57, 0xda, 0xc9, 0xda, 0xdf, 0xaf, 0x1f, 0x65, + 0x3c, 0x8f, 0x12, 0x9d, 0xcc, 0xe0, 0xf6, 0x2a, + 0xdc, 0x78, 0x6f, 0x6e, 0x16, 0xd5, 0x4a, 0x3d, + 0xf3, 0xb3, 0x3f, 0x35, 0x6a, 0x08, 0x7a, 0x2e, + 0xc8, 0x5a, 0x74, 0x51, 0x33, 0xf2, 0x94, 0x3a, + 0x64, 0x41, 0xee, 0x7b, 0xc6, 0x54, 0xb3, 0x39, + 0xa5, 0xb1, 0x40, 0xcf, 0xf0, 0x7f, 0xd2, 0x76, + 0x77, 0xed, 0x98, 0x12, 0xef, 0xed, 0xdf, 0xf6, + 0xed, 0xff, 0x00, 0xb4, 0x5b, 0xb6, 0x3c, 0x85, + 0x6a, 0x37, 0x35, 0xfb, 0xd5, 0x2b, 0x04, 0x10, + 0x14, 0x56, 0x38, 0xca, 0xd5, 0xbd, 0xfc, 0xa5, + 0xff, 0x00, 0x8e, 0xc7, 0x1e, 0xcb, 0x18, 0xf5, + 0x80, 0x4e, 0x19, 0x5a, 0x25, 0x80, 0xfc, 0xd2, + 0x97, 0xb1, 0xe4, 0x2b, 0x31, 0xc3, 0xb0, 0x17, + 0x0e, 0xc9, 0xd5, 0xa2, 0xb2, 0xd2, 0x77, 0x27, + 0x42, 0x21, 0x7e, 0xd5, 0x4e, 0xbb, 0x58, 0xee, + 0xb8, 0xe5, 0x6a, 0x76, 0x8c, 0x8c, 0xd9, 0x8e, + 0xca, 0x8d, 0xa2, 0xd2, 0x39, 0x52, 0x5f, 0xd9, + 0x06, 0x47, 0xc7, 0xdb, 0x0a, 0x1b, 0x76, 0x25, + 0xc3, 0x76, 0x8c, 0xfe, 0xa5, 0x2b, 0x3a, 0x80, + 0x7b, 0x58, 0x4e, 0xae, 0xc0, 0xae, 0x44, 0xc9, + 0x38, 0x05, 0x73, 0x04, 0x8a, 0x0b, 0x52, 0x39, + 0xa4, 0x61, 0x75, 0xba, 0x8e, 0x21, 0xca, 0x46, + 0x0c, 0xa1, 0xd9, 0x72, 0x4a, 0x3d, 0xfc, 0x0d, + 0xce, 0x85, 0xe2, 0x46, 0x77, 0x0a, 0xcc, 0xce, + 0xb0, 0xc1, 0x33, 0x7c, 0xd5, 0x2b, 0x66, 0x23, + 0x81, 0xe6, 0xaf, 0xc4, 0xf3, 0xef, 0x15, 0x39, + 0xb6, 0x3b, 0x07, 0xb1, 0x56, 0x60, 0x6b, 0x87, + 0x0b, 0x98, 0x24, 0x55, 0xe5, 0x92, 0x66, 0xb9, + 0x90, 0xfc, 0x43, 0xb2, 0x86, 0x3b, 0x8f, 0x0f, + 0xea, 0xfb, 0x27, 0xee, 0xb0, 0xec, 0xee, 0x73, + 0xb9, 0xfd, 0xca, 0x77, 0xbd, 0x76, 0x3b, 0xff, + 0x00, 0xdf, 0x90, 0x4c, 0xae, 0xdd, 0x98, 0xe1, + 0x4d, 0xa1, 0x36, 0xc1, 0xdc, 0x1d, 0x84, 0xfd, + 0x32, 0x1a, 0xc3, 0x66, 0xf5, 0x71, 0xb0, 0xb5, + 0xde, 0xc3, 0xb9, 0x4f, 0x93, 0x27, 0x38, 0x5d, + 0x47, 0x29, 0x1e, 0xd9, 0x70, 0x40, 0x42, 0xbc, + 0x8f, 0x69, 0x70, 0x1d, 0xbc, 0x07, 0x0c, 0x85, + 0xa6, 0xcb, 0xde, 0x07, 0x7e, 0xc9, 0xcd, 0xe9, + 0x3f, 0x6a, 0x81, 0xc2, 0xd4, 0x1b, 0x4f, 0x74, + 0xf6, 0x74, 0x64, 0xda, 0xa9, 0x39, 0xb3, 0x0e, + 0x7b, 0xad, 0x46, 0x0d, 0x83, 0x72, 0xd3, 0xec, + 0xf4, 0x2c, 0xb5, 0xe5, 0x02, 0x4a, 0x7d, 0x78, + 0x41, 0x2f, 0x7a, 0x9b, 0x51, 0xad, 0x08, 0x3b, + 0x5d, 0xca, 0x9b, 0x5a, 0xc8, 0xc0, 0xe5, 0x4b, + 0xab, 0xdb, 0x97, 0xf5, 0x61, 0x3a, 0x47, 0xbf, + 0x97, 0x1c, 0xfe, 0x19, 0xfc, 0x23, 0x90, 0xc4, + 0xf0, 0xf0, 0xa3, 0xbf, 0x5f, 0xa3, 0xbd, 0xbc, + 0x14, 0x63, 0x74, 0x99, 0x7b, 0x47, 0xd4, 0xf8, + 0x1c, 0xc6, 0xe0, 0xf6, 0xa9, 0xb1, 0x62, 0x21, + 0x33, 0x55, 0x39, 0xfa, 0x6f, 0xca, 0xbd, 0x5f, + 0xa8, 0xde, 0xa3, 0x15, 0x69, 0xcc, 0x2f, 0x0f, + 0x5a, 0x9d, 0x91, 0x35, 0x71, 0x84, 0x13, 0xf5, + 0xe9, 0xf0, 0x04, 0x6d, 0x01, 0x4d, 0x72, 0x6b, + 0x07, 0x32, 0x3b, 0x2b, 0x3e, 0x03, 0x48, 0x0e, + 0x19, 0xec, 0xab, 0x47, 0x51, 0xad, 0xc8, 0xec, + 0x55, 0xfa, 0x62, 0x1f, 0x7d, 0x17, 0x2c, 0x3f, + 0xe3, 0xe9, 0xeb, 0xb8, 0x64, 0x2d, 0x36, 0x6e, + 0x4c, 0x0e, 0xf3, 0xfb, 0xa2, 0xce, 0x94, 0x98, + 0x77, 0x62, 0xa9, 0x4a, 0x2c, 0xc7, 0xd3, 0x2a, + 0xcc, 0x0e, 0x8d, 0xe7, 0x68, 0xe1, 0x1b, 0x19, + 0x6f, 0x4d, 0xc9, 0xc3, 0x6f, 0x89, 0x4a, 0xcf, + 0x45, 0xe1, 0x8f, 0xf8, 0x53, 0x77, 0xd4, 0x79, + 0x8e, 0x73, 0xee, 0xdd, 0xfb, 0xfe, 0xea, 0xdd, + 0x53, 0x55, 0xf8, 0xee, 0xd3, 0xd8, 0xfa, 0xe7, + 0x2d, 0x76, 0x42, 0x8e, 0x28, 0xaf, 0xc2, 0x26, + 0x71, 0xc7, 0xfb, 0xff, 0x00, 0xea, 0x86, 0x08, + 0xab, 0xf2, 0xdf, 0x35, 0x6f, 0xdb, 0x6e, 0x33, + 0xc2, 0x7b, 0x70, 0x70, 0x57, 0x71, 0xe2, 0xe9, + 0xf6, 0x5a, 0x48, 0x82, 0x7c, 0x63, 0xea, 0x9d, + 0x5a, 0x1b, 0x40, 0xc7, 0x93, 0xf4, 0x53, 0xc2, + 0xea, 0xf2, 0x18, 0xdf, 0xeb, 0x3c, 0x64, 0x2d, + 0x36, 0x7c, 0x38, 0xd6, 0x73, 0xb0, 0x1f, 0xf7, + 0x57, 0xa4, 0xf4, 0x7d, 0x98, 0xee, 0xa3, 0xbb, + 0x23, 0xde, 0x04, 0x87, 0x85, 0x72, 0x12, 0xd3, + 0xb9, 0x76, 0xf1, 0xab, 0xdc, 0x74, 0x91, 0xed, + 0x6f, 0xe6, 0x05, 0x6a, 0xd8, 0xb2, 0xc0, 0x24, + 0x1e, 0xd0, 0x58, 0xc7, 0xac, 0xe0, 0x5a, 0x72, + 0x14, 0xf3, 0x3a, 0xe4, 0x4d, 0x97, 0xcc, 0x70, + 0x53, 0x5a, 0x5a, 0xe1, 0xbb, 0x84, 0x66, 0xeb, + 0x82, 0x9c, 0xdd, 0xa7, 0x08, 0x7c, 0xbc, 0x58, + 0x60, 0x91, 0xce, 0xf6, 0x51, 0xa5, 0x31, 0x71, + 0xd8, 0x32, 0x14, 0xd5, 0xdb, 0x14, 0x7e, 0xd3, + 0xc6, 0xef, 0x97, 0xac, 0xf1, 0x90, 0xb4, 0xbb, + 0x42, 0xbc, 0xdb, 0x24, 0xf8, 0x5d, 0xc1, 0x57, + 0x81, 0xf4, 0x87, 0x0c, 0xaa, 0x9c, 0x4b, 0xca, + 0xb4, 0x07, 0x71, 0xf8, 0x1e, 0x79, 0xf0, 0x39, + 0x3d, 0x93, 0x2b, 0x4b, 0x27, 0x60, 0xa2, 0xd2, + 0xcf, 0xeb, 0x45, 0xb4, 0x6a, 0xf3, 0x21, 0x19, + 0x52, 0x6a, 0xed, 0x69, 0xf7, 0x2d, 0x52, 0x5d, + 0x9e, 0xc0, 0xc3, 0x9d, 0xe0, 0x38, 0x61, 0x54, + 0xac, 0x35, 0x18, 0xba, 0x99, 0xf6, 0x9b, 0xdf, + 0xfd, 0xa9, 0x76, 0xc0, 0xf3, 0x1b, 0x06, 0x4f, + 0xcd, 0x46, 0xee, 0xab, 0x79, 0xee, 0xa4, 0x66, + 0xd2, 0x99, 0x19, 0x28, 0x8d, 0xbc, 0x7a, 0x83, + 0x25, 0x47, 0x56, 0x49, 0x3b, 0x05, 0x16, 0x96, + 0x71, 0x97, 0x22, 0xda, 0x55, 0x3e, 0x27, 0x29, + 0xb5, 0x96, 0x0e, 0x21, 0x62, 0x96, 0xfd, 0x89, + 0xb8, 0x73, 0x91, 0xe5, 0x61, 0x30, 0x1f, 0x01, + 0xe3, 0x2a, 0x8d, 0x9f, 0x46, 0x97, 0xe8, 0x78, + 0x2a, 0x5d, 0x2e, 0x70, 0x77, 0x30, 0x70, 0xa3, + 0xd2, 0xde, 0xc1, 0xca, 0x9a, 0xab, 0xdc, 0x0b, + 0x71, 0xca, 0x8e, 0x29, 0x9c, 0xe0, 0xac, 0x40, + 0xe1, 0xca, 0x00, 0x9e, 0x13, 0x2b, 0x49, 0x21, + 0xc0, 0x0a, 0x1d, 0x24, 0x9f, 0x89, 0x11, 0x4e, + 0xaf, 0xc6, 0xee, 0x7f, 0xef, 0xc9, 0x4b, 0xad, + 0x31, 0xa3, 0x6c, 0x0c, 0xfe, 0x54, 0xfa, 0x8d, + 0x99, 0xfe, 0x27, 0x70, 0xbb, 0xa0, 0xd2, 0x84, + 0x6b, 0x60, 0x58, 0xf0, 0x9c, 0x39, 0x5a, 0x45, + 0xa3, 0x6e, 0xa3, 0xa0, 0xdd, 0x87, 0x37, 0xcd, + 0x45, 0x6e, 0x6d, 0x39, 0xee, 0x6b, 0xce, 0xe2, + 0xa9, 0x6a, 0x6e, 0x94, 0xb9, 0xdb, 0x7d, 0xb1, + 0xf6, 0xff, 0x00, 0x6a, 0x79, 0x01, 0x0d, 0xfd, + 0x21, 0xdf, 0x2f, 0x9f, 0xf7, 0x50, 0xd4, 0x75, + 0x9d, 0xdb, 0xfd, 0x91, 0xe4, 0xa4, 0x65, 0x4a, + 0x8d, 0xc4, 0x8f, 0x19, 0x53, 0x6b, 0x71, 0xb3, + 0x22, 0xbb, 0x3f, 0x95, 0x3e, 0xa3, 0x66, 0x7e, + 0x1c, 0xee, 0x3e, 0x8b, 0x92, 0x83, 0x09, 0x42, + 0x34, 0x1a, 0x07, 0x8d, 0x20, 0x54, 0xac, 0xba, + 0xac, 0xc1, 0xe1, 0x4f, 0x46, 0x69, 0x1d, 0xba, + 0x31, 0x9c, 0xf9, 0xa8, 0x58, 0xca, 0x6f, 0xea, + 0x4f, 0x26, 0x0f, 0xd3, 0x92, 0xa6, 0xd5, 0x21, + 0xed, 0x03, 0x14, 0xfa, 0x95, 0xab, 0x1c, 0x39, + 0xdc, 0x2c, 0x12, 0x84, 0x68, 0x46, 0x16, 0x07, + 0xf4, 0x3d, 0xd3, 0x86, 0x0a, 0x36, 0xec, 0x18, + 0xc4, 0x5b, 0xce, 0xd0, 0xb6, 0x12, 0x84, 0x68, + 0x30, 0x78, 0x59, 0xf1, 0x30, 0x0a, 0xc0, 0xfe, + 0x87, 0xff, 0xc4, 0x00, 0x2d, 0x11, 0x00, 0x02, + 0x02, 0x01, 0x03, 0x02, 0x06, 0x01, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x00, 0x03, 0x11, 0x04, 0x12, 0x21, 0x30, 0x31, + 0x10, 0x13, 0x20, 0x22, 0x32, 0x41, 0x23, 0x14, + 0x42, 0x61, 0x71, 0x33, 0x40, 0x43, 0x51, 0x52, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, + 0x3f, 0x01, 0xea, 0x1b, 0x11, 0x7b, 0x98, 0x75, + 0x55, 0xfd, 0x73, 0x2a, 0xb5, 0x6d, 0x19, 0x1f, + 0xe8, 0x93, 0x88, 0x0c, 0x27, 0x13, 0x76, 0x61, + 0x19, 0x9b, 0x04, 0xd4, 0xee, 0xdd, 0x81, 0x3c, + 0xa6, 0x6f, 0xee, 0x0a, 0xda, 0xa3, 0x92, 0x25, + 0x2e, 0xaa, 0x22, 0x36, 0xe1, 0x91, 0xd6, 0x6b, + 0xeb, 0x5e, 0xe6, 0x0d, 0x52, 0x1e, 0xd1, 0xb5, + 0x1c, 0xe2, 0x77, 0x11, 0x29, 0x07, 0x99, 0xc6, + 0x21, 0xb1, 0x47, 0xdc, 0x16, 0x83, 0xda, 0x5f, + 0x5e, 0xf5, 0xcc, 0xd3, 0x5b, 0x91, 0xb4, 0xcb, + 0xb0, 0xc3, 0x06, 0x1a, 0xd7, 0xbe, 0x22, 0x8c, + 0x4d, 0xd3, 0x74, 0xcf, 0x43, 0x51, 0x6b, 0xd7, + 0x8d, 0xa2, 0x1f, 0xd4, 0x37, 0xdc, 0x6d, 0x3b, + 0x11, 0x92, 0xd2, 0xba, 0x0b, 0x19, 0x65, 0x5e, + 0x59, 0xe2, 0x1a, 0xbc, 0xca, 0xff, 0x00, 0x99, + 0x4b, 0xee, 0x59, 0x59, 0xe0, 0x88, 0xee, 0xc4, + 0xe0, 0x40, 0xb9, 0xfb, 0x9a, 0x74, 0xc0, 0xcc, + 0xdd, 0xce, 0x27, 0x96, 0x11, 0xf7, 0x43, 0xee, + 0x8d, 0x73, 0xee, 0xd9, 0x1d, 0x8e, 0xec, 0x6e, + 0x95, 0x0c, 0x2f, 0x7f, 0x1c, 0xcc, 0xcc, 0xfa, + 0x5d, 0x37, 0xae, 0x25, 0x23, 0xff, 0x00, 0x53, + 0x68, 0x9b, 0x15, 0x4e, 0x40, 0x8f, 0xee, 0xed, + 0x10, 0x95, 0xe0, 0xcb, 0x7f, 0x03, 0x79, 0x83, + 0xb4, 0x7d, 0x61, 0xc6, 0x6b, 0x85, 0xd4, 0xfc, + 0xa7, 0x99, 0x8f, 0x88, 0x8b, 0xa8, 0xb5, 0x38, + 0xc4, 0x2d, 0x6a, 0x7e, 0x57, 0x82, 0xc4, 0xd4, + 0x0d, 0xa2, 0x2e, 0xda, 0x97, 0x6c, 0xd5, 0x93, + 0xc1, 0x12, 0xb5, 0x62, 0x78, 0x89, 0x5d, 0x80, + 0x60, 0x9c, 0x44, 0x1c, 0x63, 0xd3, 0x9f, 0x49, + 0x18, 0x6c, 0xf8, 0x39, 0xcf, 0x13, 0x4e, 0x87, + 0x71, 0x31, 0xaa, 0x0c, 0x73, 0x2c, 0x5d, 0xc8, + 0x41, 0x94, 0x55, 0xf9, 0x00, 0xc7, 0x13, 0x59, + 0xb5, 0x00, 0xe2, 0x54, 0xb5, 0x95, 0x05, 0x04, + 0xd5, 0xa6, 0x46, 0x43, 0x60, 0x88, 0xc9, 0x6d, + 0x8b, 0x82, 0x66, 0x92, 0x9f, 0x28, 0xfb, 0x8c, + 0xb6, 0xb2, 0xf9, 0x6c, 0xc7, 0xb1, 0x87, 0x12, + 0xab, 0x10, 0x1c, 0xb4, 0xde, 0xbf, 0x53, 0x7b, + 0x78, 0x29, 0x7f, 0xdc, 0x3d, 0x64, 0xcf, 0x90, + 0xc4, 0x67, 0x7e, 0x54, 0x98, 0x81, 0x4a, 0x70, + 0xd2, 0xa3, 0x32, 0x25, 0xcf, 0xb5, 0x0e, 0x22, + 0x58, 0xf9, 0xe0, 0xcb, 0x2d, 0x66, 0x38, 0xb2, + 0x36, 0xa1, 0xb1, 0x80, 0x62, 0xa8, 0xf9, 0xb9, + 0x83, 0x18, 0xf6, 0xc1, 0xc9, 0x95, 0x90, 0x57, + 0x13, 0x53, 0x5e, 0x39, 0x81, 0x77, 0x4d, 0x38, + 0xd8, 0xbe, 0x2c, 0xf8, 0x8a, 0x49, 0xef, 0xea, + 0x26, 0x09, 0xad, 0xac, 0x8f, 0xca, 0xb1, 0x1d, + 0x87, 0x68, 0x97, 0xb2, 0x9e, 0xd1, 0x9c, 0xb2, + 0xe6, 0x3d, 0xc5, 0x97, 0x61, 0x9a, 0x7a, 0xf6, + 0x99, 0xa9, 0xab, 0xee, 0x57, 0x5e, 0xf7, 0xc1, + 0xed, 0x1a, 0xa4, 0x43, 0x9c, 0xc5, 0x3b, 0x7e, + 0xa2, 0xd8, 0x65, 0x36, 0x10, 0x79, 0x8c, 0x3c, + 0xc5, 0x9e, 0x4a, 0xa4, 0xc6, 0x39, 0x10, 0xb6, + 0x27, 0x26, 0x7c, 0x62, 0xf6, 0xe8, 0x10, 0x1d, + 0x76, 0x98, 0x95, 0x85, 0xf6, 0x19, 0x65, 0x7c, + 0xff, 0x00, 0x52, 0x96, 0x18, 0xdb, 0x2c, 0x52, + 0x25, 0x6e, 0x63, 0x0f, 0x31, 0x61, 0xac, 0x21, + 0xcb, 0x76, 0x31, 0x8d, 0x60, 0x8d, 0xb3, 0xeb, + 0x00, 0x41, 0xed, 0x8e, 0xc7, 0x39, 0x12, 0xbd, + 0x79, 0x41, 0xc8, 0x83, 0x52, 0xd6, 0x73, 0x89, + 0x5b, 0x1c, 0x72, 0x26, 0xd1, 0x36, 0x8f, 0xa8, + 0x01, 0x03, 0xbc, 0xde, 0x14, 0xe0, 0xf4, 0x01, + 0x9a, 0x85, 0xff, 0x00, 0x90, 0x47, 0xe4, 0x6e, + 0x9f, 0xe3, 0x78, 0x7f, 0x22, 0xe6, 0x37, 0xb6, + 0x69, 0x9f, 0x3c, 0x4b, 0xeb, 0x0f, 0x59, 0x02, + 0x18, 0x1d, 0x8f, 0x02, 0x2d, 0x4e, 0xdf, 0x51, + 0x74, 0xa6, 0x26, 0x96, 0xb5, 0x3d, 0xa0, 0x40, + 0x3b, 0x4d, 0xb3, 0x68, 0x1e, 0x0c, 0xbb, 0x86, + 0x23, 0xd0, 0xf9, 0xc4, 0xc8, 0x5e, 0x0f, 0x43, + 0x01, 0x97, 0x06, 0x2f, 0xb4, 0x94, 0x32, 0xd4, + 0x94, 0xbe, 0x38, 0x96, 0x27, 0xd4, 0xd3, 0x26, + 0xc7, 0xdd, 0x0b, 0x41, 0xa4, 0x5c, 0xf2, 0x62, + 0xd2, 0xab, 0xf1, 0x13, 0x64, 0xdb, 0xeb, 0x39, + 0xc7, 0x11, 0xda, 0xc6, 0x38, 0x32, 0x9b, 0x4b, + 0x7b, 0x5f, 0xbf, 0xac, 0x19, 0xa8, 0x5f, 0xdf, + 0x2d, 0xf7, 0xa6, 0xe1, 0xdc, 0x47, 0x43, 0x59, + 0xcc, 0x46, 0x0e, 0x39, 0x82, 0xb3, 0xde, 0x01, + 0x31, 0xd3, 0xb6, 0xbd, 0xc3, 0x23, 0xbc, 0x38, + 0xb9, 0x77, 0x27, 0x71, 0x2a, 0xb3, 0xcc, 0x1f, + 0xcf, 0xaf, 0xe4, 0x30, 0x63, 0xda, 0x74, 0xc7, + 0x69, 0x9e, 0x7b, 0x5c, 0x71, 0x89, 0x50, 0xc1, + 0xcf, 0x81, 0x1f, 0x7d, 0x5b, 0xab, 0x23, 0xde, + 0x91, 0x2e, 0x20, 0xe4, 0x08, 0x8e, 0x1c, 0x64, + 0x7a, 0x94, 0xcd, 0x52, 0x64, 0x79, 0x80, 0x76, + 0x94, 0x57, 0xbf, 0x39, 0x86, 0xa0, 0x07, 0x12, + 0xa7, 0xcf, 0x13, 0xb4, 0xec, 0x7a, 0xb6, 0xd7, + 0x83, 0xfc, 0x4a, 0x6a, 0x6a, 0xcf, 0xf1, 0xeb, + 0x1c, 0x89, 0x5a, 0x8a, 0x98, 0xa4, 0xce, 0x47, + 0x13, 0x6e, 0xd3, 0x3b, 0xc2, 0x33, 0x07, 0x4f, + 0x31, 0x9c, 0x0e, 0xf3, 0x7d, 0x7c, 0x64, 0xc5, + 0xb7, 0x73, 0x70, 0x38, 0xf5, 0x2c, 0xd4, 0xd7, + 0xbd, 0x77, 0x0e, 0xe2, 0x53, 0xf0, 0x12, 0xcf, + 0x8c, 0xaf, 0x3e, 0x07, 0xa1, 0x91, 0x1a, 0xc0, + 0x23, 0x6a, 0x00, 0x81, 0xae, 0xb3, 0xe0, 0x22, + 0x68, 0xc9, 0xe5, 0xcc, 0x14, 0xa2, 0x7d, 0x74, + 0x04, 0xb2, 0xc3, 0xa7, 0x6d, 0xb3, 0x71, 0x2b, + 0xb9, 0xa7, 0x68, 0x0e, 0x44, 0x2c, 0x3b, 0x41, + 0xff, 0x00, 0x5e, 0x8c, 0xc6, 0xb0, 0x08, 0xda, + 0x80, 0x20, 0x6b, 0xad, 0xf8, 0x88, 0xba, 0x36, + 0x3f, 0x33, 0x13, 0x4f, 0x5a, 0x76, 0x1e, 0x2d, + 0xd0, 0x59, 0x7d, 0x7e, 0x62, 0xff, 0x00, 0x51, + 0x75, 0x15, 0x9e, 0x0c, 0xfd, 0x4a, 0x98, 0xb6, + 0x8e, 0xf3, 0x28, 0x20, 0x33, 0x74, 0x36, 0x01, + 0x1f, 0x52, 0x20, 0x36, 0xd9, 0xf0, 0x11, 0x74, + 0x6c, 0xdf, 0x33, 0x13, 0x4d, 0x5d, 0x7f, 0x5e, + 0x19, 0x9b, 0xa6, 0xee, 0x98, 0xe6, 0x6a, 0xea, + 0xf2, 0xec, 0xc8, 0xec, 0x67, 0xe9, 0xab, 0x7f, + 0x7a, 0x8d, 0xa2, 0x5b, 0x47, 0x61, 0x9e, 0x22, + 0x2f, 0x3f, 0xd4, 0x6b, 0xbc, 0xbc, 0x62, 0x06, + 0xb6, 0xe3, 0xed, 0x11, 0x74, 0x6c, 0xdf, 0x33, + 0x13, 0x4d, 0x5a, 0x76, 0x1e, 0x19, 0x9b, 0xa6, + 0x7a, 0xca, 0x65, 0xd5, 0xf9, 0xab, 0x88, 0xb7, + 0x20, 0x18, 0x31, 0x9b, 0xcc, 0x5d, 0xb5, 0xae, + 0x62, 0x69, 0x9c, 0xfc, 0xcc, 0x4d, 0x35, 0x69, + 0xf5, 0x3b, 0x4d, 0xd3, 0x74, 0xcf, 0x57, 0x1e, + 0x91, 0x05, 0x15, 0x86, 0xdd, 0x89, 0xba, 0x6f, + 0x99, 0xe9, 0x63, 0xa9, 0x99, 0x9e, 0xbe, 0x3c, + 0x3f, 0xff, 0xc4, 0x00, 0x42, 0x10, 0x00, 0x02, + 0x01, 0x02, 0x03, 0x05, 0x04, 0x06, 0x06, 0x08, + 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x03, 0x00, 0x11, 0x04, 0x12, 0x21, 0x13, 0x22, + 0x31, 0x41, 0x51, 0x32, 0x52, 0x61, 0x71, 0x14, + 0x23, 0x30, 0x42, 0x81, 0x91, 0x05, 0x20, 0x62, + 0xa1, 0xd1, 0xf0, 0x10, 0x24, 0x33, 0x40, 0x92, + 0xb1, 0xc1, 0xe1, 0x25, 0x53, 0x72, 0x82, 0xf1, + 0x15, 0x34, 0x63, 0x83, 0xa3, 0xff, 0xda, 0x00, + 0x08, 0x01, 0x01, 0x00, 0x06, 0x3f, 0x02, 0xf6, + 0x37, 0x3a, 0x0a, 0xcc, 0x8c, 0x1d, 0x7a, 0xa9, + 0xfd, 0x1e, 0xb1, 0xd5, 0x3f, 0xd4, 0x69, 0xf6, + 0x27, 0x6c, 0x50, 0x5c, 0xe5, 0xa6, 0xb7, 0x15, + 0x39, 0x58, 0x74, 0xfd, 0xc7, 0x6d, 0x28, 0x62, + 0x97, 0xb6, 0xed, 0x19, 0x62, 0xd2, 0xc6, 0xc5, + 0x4f, 0x2a, 0xd7, 0x4f, 0x3a, 0x74, 0x32, 0x34, + 0x8e, 0xbc, 0x91, 0x69, 0xf0, 0xf1, 0xc4, 0xa9, + 0x09, 0xe7, 0x21, 0xd6, 0x84, 0x78, 0x69, 0xe5, + 0x54, 0x17, 0xb2, 0x8e, 0x15, 0xb0, 0x92, 0x47, + 0xdb, 0x13, 0xba, 0xcf, 0x21, 0x1a, 0x54, 0x82, + 0x49, 0x32, 0x4d, 0x1f, 0x6b, 0x68, 0x74, 0x3e, + 0x54, 0xaf, 0x01, 0xb9, 0xe7, 0xb2, 0xd4, 0x8a, + 0x96, 0x2c, 0x54, 0x5a, 0x71, 0x13, 0xe5, 0xed, + 0x6b, 0x6f, 0xe7, 0x59, 0x93, 0xb3, 0xed, 0xb7, + 0xa5, 0x51, 0xf1, 0xac, 0xa3, 0x33, 0x78, 0xda, + 0xc2, 0x8c, 0x51, 0xc7, 0x91, 0x09, 0x05, 0xb9, + 0x9b, 0x53, 0x3c, 0x52, 0x2d, 0xb5, 0x46, 0xd7, + 0x74, 0xd4, 0x91, 0x81, 0x23, 0xce, 0x78, 0xc9, + 0x9b, 0x4b, 0x78, 0x73, 0xa0, 0xb7, 0x67, 0x27, + 0xa0, 0xe3, 0x44, 0x8c, 0x3b, 0x69, 0xd7, 0x4e, + 0x55, 0x77, 0x90, 0x01, 0xf6, 0x45, 0xcd, 0x05, + 0xec, 0xda, 0x93, 0x17, 0x7d, 0xd9, 0x1b, 0x2b, + 0xaf, 0x75, 0xbf, 0x0a, 0x9d, 0xe2, 0x98, 0x2a, + 0x81, 0xbe, 0x81, 0xac, 0xd6, 0xf0, 0xe5, 0x5e, + 0xac, 0xea, 0x78, 0xbc, 0xcf, 0x98, 0x9f, 0x80, + 0xa8, 0x66, 0x7c, 0x6b, 0x5a, 0x36, 0xbe, 0xc9, + 0x74, 0x4f, 0x8f, 0x5a, 0x42, 0xd6, 0xcc, 0x54, + 0x5e, 0xde, 0xc8, 0x3d, 0xb4, 0xbd, 0x89, 0x3c, + 0xaa, 0x28, 0x63, 0xc4, 0xec, 0xa6, 0x73, 0xef, + 0x0d, 0xdf, 0x83, 0x53, 0x13, 0x89, 0xda, 0x49, + 0xc9, 0x79, 0x52, 0xed, 0xa5, 0x1c, 0x7b, 0x2b, + 0xc6, 0x8c, 0x98, 0x4d, 0xa4, 0x6d, 0x9b, 0x40, + 0xd5, 0x16, 0xab, 0x95, 0x92, 0xf6, 0xe3, 0x4d, + 0x9e, 0x3c, 0xc0, 0xea, 0xa7, 0x8d, 0x61, 0xe6, + 0xf7, 0x25, 0x88, 0x00, 0x0f, 0x85, 0x14, 0x87, + 0x0c, 0x51, 0x45, 0xb7, 0xd3, 0xde, 0x23, 0xcc, + 0x56, 0xfc, 0xb2, 0x9f, 0xb0, 0x3f, 0x1a, 0x45, + 0x86, 0x36, 0x4d, 0x35, 0xcc, 0x78, 0xd6, 0xd7, + 0x83, 0x83, 0xca, 0xb6, 0x71, 0x26, 0x77, 0x24, + 0x5d, 0x57, 0x53, 0x58, 0xac, 0x23, 0xa0, 0x8e, + 0x46, 0xcb, 0xb4, 0x57, 0x51, 0x98, 0x0f, 0xc9, + 0xad, 0xa3, 0x93, 0x37, 0x76, 0x22, 0x6d, 0xce, + 0xbf, 0xed, 0x13, 0x06, 0x0a, 0x92, 0x01, 0x5c, + 0xcd, 0x71, 0xa5, 0xa9, 0x7f, 0x58, 0xf4, 0x82, + 0x3c, 0x3b, 0x3e, 0x1e, 0xc8, 0x86, 0xbd, 0x8f, + 0x4a, 0x86, 0x19, 0x18, 0x7a, 0x44, 0x52, 0xd9, + 0x5b, 0x9b, 0x00, 0x2e, 0x08, 0xad, 0xec, 0x5b, + 0xa9, 0xe8, 0x82, 0xd4, 0x49, 0x95, 0x36, 0x9a, + 0x1c, 0x8a, 0x2d, 0x59, 0x27, 0x84, 0x8b, 0x1b, + 0xe6, 0x6d, 0x28, 0x4c, 0x97, 0xcc, 0x28, 0xc0, + 0xc7, 0xc4, 0x78, 0x1a, 0x59, 0x19, 0xdb, 0x14, + 0x55, 0xb2, 0xe6, 0xec, 0xaa, 0xd2, 0xac, 0xac, + 0xd2, 0x30, 0xe0, 0x11, 0xae, 0xa3, 0xf3, 0xe7, + 0x4a, 0xab, 0x85, 0x8f, 0xf8, 0xaa, 0x29, 0xa4, + 0x42, 0xf1, 0x5f, 0x8c, 0x67, 0x5a, 0xd8, 0x85, + 0xd9, 0xc9, 0x18, 0x3a, 0x1b, 0xeb, 0x59, 0xa3, + 0x90, 0x32, 0x5f, 0xc6, 0x8e, 0x25, 0x6d, 0xbc, + 0xc1, 0x6e, 0xcd, 0xa1, 0xbf, 0x2a, 0x9f, 0x69, + 0xba, 0x8a, 0xe0, 0x64, 0xb7, 0x03, 0xe5, 0x4c, + 0x55, 0x45, 0xfb, 0x4c, 0xfc, 0x08, 0xf8, 0xd4, + 0xa7, 0x6e, 0x22, 0x66, 0x96, 0xf2, 0xa2, 0xb1, + 0x3f, 0xed, 0xb0, 0xac, 0x3e, 0x1d, 0xb0, 0xd6, + 0xc3, 0x7b, 0xf8, 0x87, 0xe3, 0xf2, 0xa0, 0x7a, + 0xfb, 0x02, 0x2b, 0x3f, 0x65, 0xa1, 0xde, 0xbe, + 0x5f, 0xeb, 0x4c, 0xc3, 0x31, 0x45, 0xe2, 0x7a, + 0x56, 0x0f, 0xe9, 0x3c, 0x3e, 0x76, 0x76, 0x98, + 0xa1, 0x19, 0x74, 0x16, 0xf1, 0xa1, 0x34, 0x30, + 0xa4, 0x4e, 0xf2, 0x70, 0x1e, 0x54, 0xcb, 0x23, + 0x6d, 0x19, 0x8d, 0xf8, 0x70, 0xad, 0xa4, 0x2c, + 0x02, 0x9e, 0x5d, 0x2a, 0x46, 0x56, 0xdf, 0x16, + 0xb7, 0xce, 0xb1, 0xaf, 0x2a, 0x99, 0xad, 0x97, + 0x5b, 0x76, 0x78, 0xf3, 0xa7, 0x8f, 0x10, 0x59, + 0xb9, 0xad, 0xf9, 0x8a, 0x58, 0x91, 0x1e, 0x38, + 0x38, 0xab, 0xb1, 0x39, 0x2f, 0xce, 0xf5, 0x10, + 0x0b, 0x0e, 0x59, 0xe4, 0x2c, 0x1f, 0xc7, 0xfd, + 0x47, 0xce, 0x82, 0xa9, 0x46, 0x90, 0xb5, 0xc8, + 0x4b, 0xe9, 0x4b, 0x87, 0x75, 0xbb, 0x81, 0x73, + 0x72, 0x7c, 0xed, 0x46, 0x28, 0x57, 0x22, 0xb1, + 0xb9, 0x3d, 0xff, 0x00, 0x3a, 0x75, 0xcc, 0x48, + 0x22, 0xd4, 0x06, 0x1f, 0x0d, 0x65, 0x1b, 0xb9, + 0x98, 0x65, 0xa5, 0x7c, 0x46, 0x3d, 0x62, 0x61, + 0xad, 0x94, 0x5e, 0xa2, 0x11, 0x61, 0xfd, 0x26, + 0xfa, 0x39, 0x56, 0x03, 0x2f, 0x8d, 0x8d, 0x6f, + 0xaa, 0xa8, 0xf3, 0xbf, 0xb0, 0xbd, 0xae, 0xac, + 0x2c, 0xd5, 0x89, 0xc1, 0x45, 0x1a, 0x8d, 0xba, + 0x85, 0xde, 0xef, 0x0e, 0x07, 0xef, 0xac, 0x3e, + 0x1a, 0x24, 0x23, 0x0d, 0xa4, 0x8e, 0x22, 0xbb, + 0x05, 0x7b, 0x5b, 0x5d, 0x7c, 0x28, 0x66, 0xd4, + 0xe6, 0xd4, 0xd6, 0xaf, 0x6f, 0x3a, 0x50, 0xa6, + 0xf7, 0x6e, 0x35, 0x76, 0x8b, 0x3a, 0xf3, 0x04, + 0xd0, 0xf4, 0x78, 0xd2, 0x04, 0x3a, 0xdd, 0x7d, + 0xea, 0x86, 0xc3, 0x7a, 0x35, 0xcb, 0x9d, 0x80, + 0x27, 0xe0, 0x69, 0x9e, 0x76, 0xcc, 0x6c, 0x08, + 0xdf, 0x1a, 0xd0, 0x68, 0x88, 0x11, 0x66, 0x1b, + 0xba, 0x1c, 0xbf, 0xee, 0xe3, 0x57, 0xb0, 0x3a, + 0xfb, 0xad, 0x7f, 0xbe, 0xb6, 0xf1, 0xf6, 0x4d, + 0x2e, 0x43, 0x6b, 0xdb, 0xe1, 0xf9, 0xd6, 0x8d, + 0xfa, 0xf0, 0xe9, 0x59, 0xf3, 0x66, 0x84, 0xee, + 0xba, 0x52, 0x4f, 0x0b, 0x66, 0x8d, 0xc5, 0xc1, + 0xab, 0xd4, 0xd9, 0xa4, 0xc2, 0x8c, 0x30, 0xb1, + 0x53, 0xae, 0x61, 0xe7, 0xcb, 0xef, 0x14, 0xcc, + 0xae, 0x25, 0x51, 0xef, 0x28, 0xd3, 0xf0, 0xfb, + 0xfe, 0xbb, 0x2d, 0x19, 0x93, 0x47, 0x4d, 0xd3, + 0xa5, 0xf4, 0xa9, 0x19, 0x4e, 0xaf, 0xc4, 0x9d, + 0x68, 0x28, 0xb9, 0xcf, 0xee, 0x5b, 0x9d, 0x18, + 0xf6, 0x81, 0x9e, 0xea, 0xea, 0x47, 0x23, 0xd2, + 0x86, 0x20, 0x4e, 0x91, 0xc6, 0x75, 0x0a, 0x41, + 0xdd, 0xf0, 0xa8, 0xf7, 0xf3, 0xbe, 0x6c, 0xdb, + 0xbc, 0x86, 0xb4, 0x01, 0x50, 0xd7, 0xe0, 0x2b, + 0x34, 0x20, 0xc9, 0x1b, 0x29, 0x65, 0x27, 0x41, + 0xc2, 0xb3, 0xc9, 0x74, 0x66, 0x5b, 0xa8, 0xb7, + 0x3a, 0x25, 0xa3, 0x49, 0x0f, 0xda, 0xe5, 0x4d, + 0x63, 0x60, 0x78, 0x88, 0xc5, 0x87, 0xdd, 0x57, + 0x92, 0x37, 0x58, 0x5f, 0xa8, 0xe7, 0x5b, 0x37, + 0xec, 0xf5, 0xf0, 0xab, 0xb5, 0xcd, 0x8e, 0x97, + 0x07, 0x7a, 0xa4, 0xcd, 0x1e, 0x53, 0x7b, 0xf6, + 0xaf, 0xa5, 0x3e, 0x57, 0x06, 0x21, 0x2e, 0x55, + 0x04, 0x70, 0xeb, 0x49, 0x88, 0xc4, 0x62, 0x8b, + 0xc5, 0x7b, 0x30, 0x4e, 0x5f, 0x0a, 0x8f, 0xd1, + 0x70, 0xbf, 0xf5, 0x09, 0xa1, 0x5d, 0xd7, 0x91, + 0xb2, 0x46, 0x2f, 0xe7, 0xa9, 0x3a, 0x74, 0x34, + 0x0e, 0x23, 0x64, 0x24, 0xee, 0xc3, 0x7b, 0x01, + 0xec, 0x0b, 0x5b, 0x75, 0xb8, 0xd6, 0xc1, 0x1d, + 0x82, 0xab, 0x5e, 0xf7, 0xb5, 0xfa, 0x69, 0x7a, + 0x52, 0xc7, 0x22, 0x4e, 0x6f, 0xd6, 0xcd, 0xcf, + 0xa9, 0xff, 0x00, 0x9a, 0xda, 0x71, 0x75, 0xe3, + 0x77, 0xbd, 0x64, 0x2d, 0x95, 0x1f, 0xee, 0x6e, + 0x46, 0xa4, 0x8e, 0x40, 0x58, 0xf3, 0xcc, 0x68, + 0xc6, 0x78, 0x72, 0xa6, 0x4c, 0x46, 0x61, 0x85, + 0xf7, 0xad, 0xd0, 0xf9, 0x56, 0x1b, 0x60, 0x76, + 0xa8, 0x7b, 0x61, 0xb5, 0xb7, 0xc2, 0xb2, 0xc7, + 0x1d, 0xd0, 0x8b, 0x10, 0x6c, 0xb9, 0xba, 0x70, + 0xa5, 0x7c, 0xa2, 0x10, 0xdc, 0x36, 0x68, 0x01, + 0xfe, 0x23, 0x4c, 0x0c, 0x8c, 0x63, 0x3c, 0x16, + 0x43, 0xaf, 0xce, 0x94, 0x32, 0xc8, 0x19, 0x4f, + 0x6d, 0x48, 0xd6, 0x84, 0x70, 0xdc, 0x39, 0x6b, + 0x8c, 0xa6, 0xe4, 0xd5, 0xce, 0x1f, 0x27, 0x34, + 0x69, 0x48, 0x50, 0x3c, 0x08, 0xe9, 0x51, 0x42, + 0xff, 0x00, 0x4a, 0x7a, 0x3c, 0x4b, 0xa9, 0x8f, + 0x0c, 0x2f, 0x73, 0xfe, 0xa3, 0xf8, 0x51, 0x6c, + 0x43, 0x6d, 0xba, 0xcb, 0x8b, 0x96, 0xff, 0x00, + 0xda, 0xa3, 0x93, 0x06, 0xca, 0xff, 0x00, 0x42, + 0xe2, 0xf4, 0x33, 0xa6, 0xf6, 0x46, 0x06, 0x9b, + 0x71, 0xb0, 0xe8, 0x4d, 0x90, 0xcb, 0xef, 0x9a, + 0x08, 0x5c, 0x07, 0x3c, 0x16, 0xfa, 0xfd, 0x76, + 0x5e, 0x74, 0xe3, 0x50, 0x47, 0x1f, 0xcd, 0xe9, + 0xf0, 0xe7, 0x40, 0x75, 0x4f, 0x3a, 0x12, 0xff, + 0x00, 0xeb, 0x94, 0x27, 0x5f, 0x87, 0xe3, 0x4c, + 0x9c, 0x11, 0xba, 0x1f, 0xc2, 0xad, 0xef, 0xc6, + 0x77, 0x88, 0xfb, 0xb8, 0x69, 0x42, 0x45, 0xb5, + 0xe8, 0x19, 0x8f, 0xd9, 0xdd, 0x36, 0xb1, 0xf1, + 0xfd, 0x01, 0x04, 0x9b, 0x35, 0x1d, 0x34, 0xa5, + 0x2b, 0x87, 0x92, 0x65, 0xfc, 0xf3, 0xe1, 0x40, + 0xb6, 0xc3, 0x0d, 0xff, 0x00, 0xd1, 0xbf, 0x0a, + 0x06, 0x5c, 0xf8, 0x8b, 0x7f, 0x98, 0x6c, 0x3e, + 0xea, 0x20, 0x4d, 0x04, 0x24, 0x7b, 0xb0, 0x8d, + 0x7e, 0xea, 0x3e, 0x8b, 0x87, 0x79, 0x4f, 0x7a, + 0x53, 0x61, 0x59, 0x16, 0x61, 0x86, 0x4f, 0xfc, + 0x2b, 0x6f, 0xbe, 0xb3, 0xcd, 0x2b, 0xcc, 0xdd, + 0x5d, 0xaf, 0x4d, 0x86, 0xc4, 0xdc, 0xe0, 0x67, + 0xed, 0xfd, 0x83, 0xde, 0x15, 0xeb, 0xa4, 0xda, + 0x47, 0x6c, 0xe8, 0xd7, 0xd1, 0xc7, 0x1d, 0x2b, + 0x0e, 0xf3, 0xb9, 0x32, 0x20, 0x66, 0xbb, 0x1e, + 0x26, 0xde, 0xc3, 0x35, 0xb7, 0x5a, 0x8b, 0x83, + 0xbe, 0x0d, 0xc5, 0xcf, 0x1f, 0xbe, 0xf4, 0x8e, + 0xd6, 0xc8, 0xe3, 0x67, 0x21, 0x3c, 0x8f, 0xba, + 0x7f, 0xe0, 0x72, 0xa2, 0x8f, 0x71, 0x2c, 0x5d, + 0xef, 0xee, 0x7f, 0xa5, 0x2b, 0x1b, 0xd9, 0x74, + 0x61, 0xe1, 0xf1, 0xe1, 0xcf, 0xe7, 0x5b, 0x0c, + 0x30, 0x69, 0xa6, 0x2c, 0x19, 0x04, 0x63, 0xb5, + 0x5e, 0xb5, 0x53, 0x0e, 0x09, 0xe1, 0x23, 0x6b, + 0x6f, 0x21, 0x5e, 0xb6, 0x59, 0x24, 0xfb, 0x23, + 0x76, 0xb3, 0xb6, 0xc2, 0x20, 0x3b, 0xfc, 0x6b, + 0x2a, 0x19, 0x31, 0x2f, 0xd5, 0x45, 0x85, 0x11, + 0x04, 0x51, 0xc0, 0x3f, 0x88, 0xd1, 0xdb, 0xe2, + 0xa4, 0x92, 0xfc, 0xaf, 0xa7, 0xcb, 0xeb, 0x27, + 0xd1, 0x1f, 0x48, 0xea, 0xb7, 0xfd, 0x5a, 0x52, + 0x6d, 0x94, 0xf7, 0x6f, 0xd0, 0xd6, 0xce, 0x18, + 0xa3, 0xc3, 0xc9, 0xcc, 0x69, 0x7f, 0x3a, 0xc8, + 0xec, 0x36, 0xe9, 0xc6, 0xc7, 0xb5, 0xe3, 0xf5, + 0xcf, 0x5a, 0x6e, 0xa3, 0x88, 0xea, 0x3e, 0x62, + 0xa5, 0x85, 0xbf, 0x63, 0x2e, 0x87, 0x5f, 0xc2, + 0x84, 0xbc, 0x66, 0x5d, 0x18, 0x03, 0x6b, 0x0f, + 0x2f, 0xeb, 0x44, 0x85, 0x25, 0x24, 0xd4, 0x5a, + 0xa0, 0xc4, 0x43, 0x6c, 0xf0, 0xb6, 0x65, 0xca, + 0x0d, 0xad, 0xcc, 0x13, 0x51, 0x63, 0xb0, 0x71, + 0xa4, 0xaa, 0x77, 0x64, 0x27, 0xdc, 0x3c, 0xb4, + 0xab, 0x1c, 0x41, 0x8d, 0x3b, 0xb1, 0x6e, 0xd6, + 0x67, 0x62, 0xcd, 0xd4, 0xfb, 0x23, 0x86, 0x94, + 0xff, 0x00, 0x89, 0x44, 0xba, 0x37, 0x39, 0x94, + 0x7f, 0x5a, 0x41, 0x24, 0x66, 0x06, 0x52, 0x48, + 0x75, 0xd0, 0x3f, 0xe7, 0x9d, 0x09, 0x13, 0xb4, + 0x3b, 0x4b, 0xd3, 0xeb, 0xde, 0xdb, 0xa6, 0xb6, + 0x68, 0xae, 0xd6, 0xde, 0x01, 0x5b, 0xdd, 0xa9, + 0x96, 0x22, 0x15, 0x2f, 0xbd, 0x94, 0x17, 0x66, + 0x1e, 0x3c, 0xaa, 0x48, 0xec, 0x56, 0x43, 0xda, + 0x5c, 0xba, 0xfc, 0x05, 0xb4, 0xa3, 0x13, 0xf1, + 0xe5, 0xa5, 0xf5, 0xa7, 0xc2, 0x62, 0x77, 0xb0, + 0x98, 0x9d, 0xc7, 0xd6, 0xf6, 0xbd, 0x49, 0x87, + 0x7d, 0x6d, 0xaa, 0xb7, 0x79, 0x79, 0x1f, 0x66, + 0x93, 0x42, 0xe6, 0x39, 0x50, 0xdd, 0x58, 0x72, + 0xa1, 0x8b, 0x11, 0xdf, 0x15, 0x0d, 0x84, 0xb1, + 0x5f, 0x45, 0x3d, 0xef, 0x2a, 0x8d, 0x82, 0xc5, + 0x71, 0xba, 0xe0, 0x71, 0xb7, 0x8d, 0x2c, 0xd1, + 0x1b, 0xa9, 0xfb, 0xbe, 0xb1, 0xea, 0x29, 0x27, + 0xd9, 0xac, 0xad, 0x09, 0xbe, 0x46, 0x1d, 0xa1, + 0xcc, 0x54, 0xa1, 0x00, 0xd9, 0x4e, 0xc3, 0x68, + 0xbd, 0x3b, 0xa7, 0xf1, 0xad, 0xe9, 0x01, 0x6b, + 0xf0, 0xe3, 0xad, 0x6d, 0x56, 0xf7, 0x1c, 0x7c, + 0x2b, 0xde, 0x36, 0xe3, 0xe1, 0x45, 0x78, 0xfd, + 0x23, 0x80, 0xf9, 0xba, 0x7d, 0x79, 0x82, 0xe1, + 0x9c, 0x34, 0x36, 0xcc, 0x85, 0x4e, 0x6d, 0x78, + 0x69, 0x45, 0x58, 0x59, 0x86, 0x84, 0x1f, 0xd1, + 0xb9, 0x85, 0x93, 0x91, 0x24, 0xaf, 0x01, 0xd7, + 0xca, 0x87, 0xa4, 0x62, 0x6e, 0x0b, 0x18, 0xad, + 0x1a, 0xb6, 0xec, 0x9d, 0xd3, 0xa1, 0x3d, 0x79, + 0x7f, 0x60, 0xf1, 0xba, 0xb9, 0x51, 0xbc, 0x05, + 0xec, 0xea, 0x79, 0x1b, 0xd4, 0x38, 0xc4, 0x7f, + 0xf0, 0xe9, 0x45, 0x98, 0x01, 0xaa, 0x9e, 0xe9, + 0xf2, 0xac, 0xf0, 0x48, 0xb3, 0x61, 0xdc, 0x5e, + 0xea, 0x74, 0x35, 0x71, 0xf5, 0x6d, 0x47, 0xa1, + 0xa9, 0x61, 0x41, 0x75, 0x93, 0x79, 0x40, 0xf3, + 0x14, 0x8f, 0x28, 0xd9, 0x22, 0x9b, 0x9c, 0xc6, + 0xc6, 0x98, 0x0d, 0x50, 0x92, 0x2c, 0xd5, 0x63, + 0xaa, 0x1d, 0x0f, 0x3a, 0x8b, 0x17, 0x18, 0xd5, + 0x7b, 0x6a, 0x0d, 0xee, 0xb4, 0x98, 0xcc, 0x35, + 0x8e, 0x0f, 0x15, 0xbe, 0xb9, 0x78, 0x29, 0xe6, + 0x29, 0x04, 0x8c, 0x52, 0x32, 0x77, 0x98, 0x0b, + 0xd8, 0x79, 0x56, 0x0e, 0x48, 0x71, 0x7b, 0x7c, + 0x26, 0x20, 0x64, 0xce, 0xce, 0x17, 0x7d, 0xbb, + 0x16, 0xd3, 0x85, 0x27, 0xd2, 0x18, 0x49, 0x4e, + 0x3f, 0x66, 0xc4, 0x62, 0x61, 0xc9, 0x90, 0xc7, + 0x6e, 0x23, 0xe1, 0x48, 0xd2, 0xe1, 0x60, 0x85, + 0x20, 0x6c, 0xb3, 0xc6, 0xbc, 0x4a, 0xb7, 0x66, + 0x40, 0x4e, 0xa7, 0x29, 0xe2, 0xb7, 0xac, 0x46, + 0x0d, 0x95, 0x31, 0x49, 0x29, 0x08, 0xab, 0x84, + 0xed, 0x8d, 0xe1, 0x7d, 0xe0, 0xa0, 0x1b, 0xd8, + 0x69, 0xad, 0x4a, 0xed, 0x1e, 0x1e, 0x28, 0xa0, + 0x41, 0x63, 0x89, 0xde, 0x95, 0x47, 0x33, 0xa6, + 0xba, 0x93, 0xcf, 0x4a, 0x9e, 0x79, 0x31, 0x5e, + 0x97, 0x89, 0x90, 0x6d, 0x43, 0xd8, 0x2a, 0x1e, + 0x06, 0xe6, 0xde, 0xeb, 0x6a, 0x01, 0xd3, 0x51, + 0x41, 0xfd, 0x19, 0x13, 0x10, 0x22, 0x20, 0x2a, + 0x36, 0x6c, 0xd9, 0xbd, 0xd6, 0xfe, 0x57, 0xd0, + 0xea, 0x3e, 0x1b, 0x48, 0x61, 0x62, 0xf6, 0x2a, + 0x65, 0x94, 0xd8, 0xbf, 0x89, 0xb7, 0xbd, 0xc3, + 0x5b, 0xf2, 0xbd, 0x3e, 0xc9, 0x31, 0x18, 0xad, + 0xa5, 0x83, 0xb7, 0x26, 0xb7, 0x0b, 0x9f, 0xc6, + 0x81, 0xc6, 0x62, 0xa3, 0x84, 0x7f, 0x97, 0x08, + 0xda, 0x37, 0xe1, 0x52, 0xc7, 0x06, 0x66, 0x59, + 0x75, 0x6d, 0xb3, 0xde, 0xff, 0x00, 0x0e, 0x15, + 0x89, 0x86, 0x68, 0xf3, 0xab, 0x5d, 0xe0, 0x8b, + 0x37, 0x61, 0xef, 0xc0, 0xdb, 0x97, 0x1f, 0x95, + 0x29, 0xc4, 0x61, 0x8a, 0x06, 0x17, 0x2d, 0xc0, + 0x7c, 0xbe, 0xb5, 0xc7, 0x11, 0x44, 0xc7, 0xa4, + 0xf1, 0xef, 0x27, 0x9f, 0x4a, 0x8a, 0x78, 0xe2, + 0xc8, 0x5e, 0xe3, 0x67, 0xd3, 0x9d, 0x15, 0x22, + 0xcb, 0x96, 0xe4, 0x0a, 0x3f, 0xe6, 0x0f, 0xcf, + 0x0b, 0x56, 0x56, 0x3a, 0xaf, 0x5e, 0x75, 0x3f, + 0xd0, 0x58, 0xa7, 0xdd, 0x6d, 0xe8, 0x19, 0xbd, + 0xc6, 0xad, 0x9e, 0x3f, 0x0c, 0xd3, 0x2c, 0x6d, + 0x96, 0x48, 0x83, 0xe4, 0x3f, 0x3a, 0xc3, 0xe1, + 0x95, 0x24, 0x58, 0xfb, 0x22, 0x2c, 0x99, 0x9a, + 0x0f, 0xb5, 0xad, 0x7d, 0x21, 0x8f, 0x8a, 0x7c, + 0x26, 0x29, 0x5c, 0xe6, 0x8b, 0xd1, 0x01, 0x61, + 0x1d, 0xce, 0xf1, 0xd7, 0xf2, 0x2a, 0x2c, 0x4a, + 0x00, 0xcc, 0x87, 0xb2, 0xdc, 0x18, 0x73, 0x15, + 0x18, 0xc3, 0x43, 0x14, 0xf1, 0xf2, 0xcb, 0x74, + 0x94, 0x29, 0xd4, 0x02, 0xc3, 0xde, 0x53, 0xd6, + 0xfc, 0x05, 0x46, 0xd1, 0x46, 0xa9, 0x22, 0x5f, + 0xd6, 0x32, 0xae, 0xa0, 0x8b, 0x11, 0x60, 0x06, + 0x9e, 0x1a, 0xd4, 0x6b, 0x0c, 0x13, 0x4f, 0x1a, + 0x0b, 0x27, 0x71, 0x47, 0x9f, 0x0a, 0xbe, 0x3b, + 0x1a, 0x91, 0x8e, 0x71, 0xe1, 0xc6, 0x76, 0xa5, + 0x26, 0x28, 0xcb, 0xf7, 0xf1, 0x6d, 0x98, 0xfc, + 0xb8, 0x55, 0xa0, 0x82, 0x47, 0x41, 0xa0, 0xda, + 0x7a, 0xa4, 0xf9, 0x7f, 0x6a, 0x2a, 0xf8, 0x83, + 0x02, 0x1e, 0x50, 0xfa, 0xb1, 0xf3, 0x3a, 0xd1, + 0x4d, 0x6c, 0xdd, 0xab, 0x1e, 0x3f, 0x13, 0x42, + 0x58, 0x61, 0x5d, 0xa1, 0xe2, 0xc7, 0x53, 0xf5, + 0xed, 0x47, 0xa1, 0xac, 0xf2, 0xbb, 0x47, 0x13, + 0x66, 0x65, 0xb7, 0x7b, 0xa7, 0xe7, 0xad, 0x6d, + 0xd6, 0x6f, 0x47, 0x1a, 0x6e, 0x91, 0xbd, 0xc3, + 0x5d, 0x4f, 0x23, 0x59, 0x10, 0x03, 0x03, 0xea, + 0xa6, 0xe7, 0x5a, 0x0d, 0x62, 0x01, 0xf8, 0x54, + 0x72, 0x44, 0x82, 0x1b, 0x2e, 0xd9, 0x0e, 0x6b, + 0x93, 0xbd, 0x6a, 0x8b, 0xe9, 0x78, 0x07, 0xaf, + 0x8c, 0x64, 0xc4, 0xaf, 0xf5, 0xfd, 0x04, 0x06, + 0x20, 0x1e, 0x22, 0x87, 0xa3, 0xe1, 0x5d, 0xd7, + 0xbe, 0x74, 0x5f, 0x99, 0xab, 0xe3, 0x71, 0xab, + 0xa7, 0x18, 0xf0, 0xc3, 0x31, 0xf9, 0xd7, 0xec, + 0x22, 0xcf, 0xdf, 0xc4, 0x9d, 0xa3, 0x7c, 0xb8, + 0x55, 0xa2, 0x89, 0xd9, 0x7d, 0xd6, 0x9b, 0x71, + 0x3e, 0x5f, 0xda, 0x97, 0x6b, 0x29, 0x89, 0x7b, + 0x91, 0x0c, 0x83, 0xe7, 0xc6, 0xb3, 0x71, 0x7b, + 0xde, 0xe3, 0x8f, 0xf1, 0x1d, 0x6b, 0x74, 0x05, + 0x3d, 0x79, 0xfc, 0xff, 0x00, 0x46, 0xea, 0x93, + 0x5b, 0xda, 0x27, 0xb0, 0xcc, 0x38, 0xad, 0x64, + 0x71, 0xc0, 0xe6, 0x1e, 0x75, 0x3b, 0x61, 0x67, + 0x45, 0xc4, 0x62, 0x7b, 0x4b, 0x27, 0x08, 0xfc, + 0x7b, 0x36, 0xbd, 0x37, 0xa5, 0x4c, 0x71, 0x4c, + 0x4f, 0x19, 0x4e, 0x6f, 0x97, 0x4a, 0xcc, 0xb6, + 0x65, 0x6d, 0xe0, 0x54, 0x00, 0x07, 0x9e, 0xbc, + 0x7c, 0x2a, 0x29, 0x9e, 0x17, 0x48, 0x02, 0x05, + 0xcc, 0xc3, 0xdd, 0xbd, 0x3e, 0x1e, 0x54, 0xfd, + 0x57, 0x15, 0xb9, 0x95, 0xbf, 0x95, 0x4a, 0xf2, + 0xe3, 0x98, 0xe1, 0xef, 0xba, 0x91, 0x2e, 0xf5, + 0xb9, 0x5c, 0xd6, 0x78, 0xe0, 0xc3, 0xa1, 0xe4, + 0xf8, 0x87, 0x0f, 0x23, 0x79, 0x0a, 0xf5, 0x70, + 0xbb, 0xf8, 0xce, 0x72, 0xaf, 0xcb, 0xfb, 0x55, + 0xa4, 0x95, 0x92, 0x3e, 0x5b, 0x3f, 0x56, 0xbf, + 0x33, 0xad, 0x67, 0x3f, 0xb4, 0xea, 0x9c, 0x4f, + 0xfb, 0x8e, 0xb5, 0xea, 0xd0, 0x21, 0xeb, 0xcf, + 0xe7, 0x5d, 0x6b, 0x44, 0x35, 0xbe, 0x6d, 0x5a, + 0x8c, 0xc6, 0xb7, 0x54, 0x0f, 0x62, 0x45, 0x30, + 0xe5, 0x51, 0xe2, 0x59, 0x33, 0x44, 0x4e, 0xf0, + 0xf1, 0xa4, 0x87, 0x68, 0x22, 0x65, 0x20, 0xdd, + 0x86, 0xf5, 0xaa, 0x38, 0x5a, 0x6f, 0xd5, 0x58, + 0x8d, 0xe3, 0xa9, 0x0d, 0x52, 0x13, 0x69, 0x24, + 0xcd, 0x94, 0x34, 0xba, 0xf2, 0xee, 0xf5, 0xa0, + 0x62, 0xcc, 0x26, 0x0c, 0x6e, 0xf6, 0xb6, 0x6a, + 0xcc, 0xcc, 0xef, 0x17, 0x24, 0x61, 0x90, 0x0a, + 0x0c, 0xcd, 0x67, 0x06, 0xf7, 0x8c, 0x58, 0xff, + 0x00, 0x17, 0x1a, 0xdc, 0x40, 0x1b, 0xbd, 0xc4, + 0xd6, 0x80, 0x93, 0x5d, 0x9b, 0x57, 0xac, 0x6a, + 0xd1, 0x2b, 0x41, 0x6f, 0x6b, 0x9c, 0x71, 0x14, + 0xf0, 0xbf, 0x06, 0xe7, 0xd0, 0xd7, 0xa5, 0xe8, + 0x11, 0x14, 0xc1, 0xe8, 0xa3, 0x89, 0xf8, 0x5f, + 0xae, 0xb4, 0xe7, 0x15, 0x10, 0x30, 0x91, 0x65, + 0x8a, 0x41, 0x91, 0x57, 0xc7, 0x4a, 0x66, 0x91, + 0x84, 0x85, 0xb5, 0xb5, 0xaf, 0xfc, 0xea, 0xea, + 0x9b, 0xdd, 0x6b, 0x44, 0x35, 0xbf, 0xbb, 0x5b, + 0xdb, 0xd5, 0xba, 0x80, 0x7e, 0xe2, 0x54, 0xf3, + 0xa6, 0x5a, 0xcc, 0xb1, 0x8c, 0xfd, 0xeb, 0x6b, + 0x5d, 0x9b, 0x79, 0xd7, 0xac, 0x6a, 0xec, 0xde, + 0xb4, 0x16, 0xfd, 0xd4, 0x17, 0x5b, 0x9a, 0xdd, + 0x41, 0xfb, 0x8f, 0xff, 0xc4, 0x00, 0x28, 0x10, + 0x01, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, + 0x71, 0x81, 0x91, 0xa1, 0x10, 0x20, 0xb1, 0xc1, + 0xf0, 0xd1, 0x30, 0xe1, 0xf1, 0xff, 0xda, 0x00, + 0x08, 0x01, 0x01, 0x00, 0x01, 0x3f, 0x21, 0x3e, + 0xa6, 0xec, 0xfd, 0xcf, 0xa6, 0x40, 0x03, 0x96, + 0x3e, 0x20, 0x99, 0x04, 0x24, 0xbf, 0x67, 0x48, + 0xe0, 0x5c, 0x03, 0xd1, 0xe5, 0xa2, 0x15, 0xa5, + 0xe9, 0xda, 0x3e, 0xbb, 0xf4, 0xac, 0xb0, 0xfd, + 0x4f, 0x8c, 0x3b, 0x3e, 0xd9, 0x1e, 0xd4, 0xc2, + 0xea, 0xba, 0x5a, 0x5c, 0xb4, 0x8b, 0x6e, 0x5a, + 0xa0, 0x1b, 0x61, 0xeb, 0x18, 0x03, 0x0b, 0x6b, + 0x3d, 0x2f, 0x53, 0x65, 0x46, 0xc9, 0xf4, 0xc1, + 0xae, 0x7a, 0xc5, 0x2a, 0xf8, 0x50, 0x5b, 0x7c, + 0xf9, 0x96, 0xb4, 0x65, 0x28, 0xd9, 0xda, 0x74, + 0xaf, 0x92, 0x65, 0xde, 0x28, 0x22, 0xf7, 0x78, + 0x83, 0x37, 0x29, 0x6b, 0x46, 0xb6, 0x5e, 0xb5, + 0x0d, 0xc0, 0xca, 0x97, 0xca, 0x81, 0xa2, 0xd6, + 0xce, 0xcc, 0x56, 0x60, 0xdf, 0x6b, 0xc6, 0xca, + 0x4e, 0xcc, 0x65, 0x96, 0x19, 0x7b, 0x63, 0xd9, + 0x3c, 0x27, 0x87, 0xd0, 0x7d, 0x59, 0x44, 0x31, + 0xc7, 0x71, 0x93, 0xf1, 0x0a, 0x8b, 0xbd, 0x0f, + 0x71, 0x97, 0xc0, 0x49, 0x5d, 0xfa, 0x66, 0x9a, + 0xc3, 0xff, 0x00, 0xc9, 0x8d, 0xe5, 0x66, 0xb4, + 0x95, 0xd9, 0xc6, 0xcf, 0xfd, 0x82, 0x00, 0x17, + 0x62, 0xa9, 0x6b, 0x33, 0xb1, 0xf4, 0x94, 0x6e, + 0x40, 0x28, 0x3d, 0xf5, 0x07, 0x04, 0x0a, 0xa7, + 0x1d, 0xb9, 0xed, 0x98, 0xa8, 0xe8, 0xe2, 0x6c, + 0xd5, 0x62, 0x35, 0x57, 0x28, 0x70, 0x9d, 0xeb, + 0xa9, 0xfe, 0x42, 0xed, 0x03, 0xf1, 0x3c, 0xf2, + 0xf3, 0x06, 0x7e, 0xf7, 0x29, 0x6c, 0x38, 0x65, + 0x1c, 0x22, 0x15, 0x24, 0xae, 0x6b, 0x41, 0x7d, + 0xe7, 0x53, 0xb4, 0x51, 0xe6, 0x97, 0x7e, 0xa9, + 0x99, 0xe4, 0x70, 0xdd, 0x66, 0xa3, 0x1c, 0x44, + 0x38, 0x8a, 0x9e, 0x13, 0xc2, 0x78, 0x4f, 0x19, + 0xe3, 0x3c, 0x60, 0x28, 0x63, 0xe1, 0x2f, 0x33, + 0x1e, 0x87, 0x29, 0xec, 0x3a, 0xc1, 0x56, 0xf4, + 0xdc, 0xaa, 0x97, 0xb6, 0xfe, 0x53, 0x6d, 0x0a, + 0x6d, 0x47, 0x3d, 0x8f, 0x79, 0x5e, 0xdd, 0x88, + 0xd0, 0x72, 0x7f, 0xf6, 0x0e, 0x2d, 0x7d, 0x52, + 0x8b, 0x84, 0x71, 0x9f, 0x10, 0x08, 0x73, 0xf5, + 0x2a, 0x4c, 0x9e, 0x8f, 0x69, 0x5b, 0x55, 0xdf, + 0x5d, 0x18, 0x27, 0x8f, 0xf6, 0x1b, 0x43, 0xe2, + 0xa0, 0x01, 0x6c, 0x2b, 0xbf, 0xfe, 0xcd, 0x36, + 0xe3, 0x05, 0x85, 0x15, 0x4a, 0xad, 0x18, 0xc0, + 0xca, 0x4a, 0x16, 0x17, 0xe5, 0xe8, 0x77, 0xf7, + 0x83, 0x2f, 0xd2, 0x1b, 0x09, 0x92, 0x55, 0x65, + 0x65, 0x74, 0x23, 0x9c, 0x09, 0x80, 0x5a, 0xa5, + 0x71, 0x7b, 0x63, 0xa4, 0x09, 0xb3, 0x52, 0x1b, + 0xa5, 0x09, 0xd6, 0xca, 0xe6, 0xa2, 0x02, 0xaa, + 0xbe, 0xdb, 0x94, 0xcd, 0xe7, 0xb6, 0x18, 0x29, + 0x94, 0xa4, 0x2b, 0xe2, 0xad, 0x9d, 0xe5, 0x1f, + 0xa2, 0x1b, 0x2b, 0x8d, 0x78, 0xfb, 0x43, 0x0d, + 0x87, 0x4b, 0xb9, 0xdc, 0xef, 0x05, 0xa9, 0x78, + 0xcf, 0x59, 0x51, 0x5b, 0xb8, 0xf3, 0x80, 0xd8, + 0x7f, 0xc0, 0x8f, 0xc1, 0xa6, 0x97, 0x05, 0x51, + 0xce, 0x63, 0xab, 0x49, 0x77, 0xb7, 0x19, 0x4c, + 0xca, 0x92, 0xad, 0x79, 0x68, 0xe9, 0xfc, 0x1f, + 0x32, 0xcc, 0xc0, 0x17, 0xe9, 0x1b, 0xae, 0x71, + 0xf1, 0x29, 0x64, 0x26, 0x8b, 0x8b, 0x2a, 0xd1, + 0x3b, 0x93, 0x6d, 0xc6, 0x4f, 0x0a, 0xe9, 0x85, + 0x45, 0x17, 0xdc, 0xe3, 0xad, 0x67, 0xe6, 0x75, + 0xd4, 0x9b, 0x26, 0xb5, 0xae, 0x19, 0xaf, 0xba, + 0x1a, 0x5f, 0x26, 0x72, 0x35, 0xd7, 0xa4, 0x28, + 0x6b, 0xb8, 0x8e, 0x34, 0xd8, 0x5f, 0x3f, 0x33, + 0x14, 0xa3, 0xb6, 0x01, 0x66, 0xf5, 0x86, 0x59, + 0x0d, 0x59, 0x14, 0x19, 0xbf, 0x65, 0xf7, 0x8e, + 0x13, 0x65, 0xa8, 0x4c, 0xdb, 0xd3, 0xb6, 0x11, + 0x93, 0x21, 0x98, 0xbc, 0x82, 0xc7, 0xbf, 0x6f, + 0x31, 0x0f, 0xd6, 0xdf, 0x6a, 0x78, 0x73, 0xf2, + 0xf4, 0x82, 0x4e, 0x85, 0x97, 0xf4, 0xab, 0x85, + 0xf4, 0x4f, 0xd5, 0xe2, 0x88, 0xe8, 0x22, 0xb4, + 0x2d, 0x29, 0xf2, 0xd2, 0x9e, 0xa4, 0x1a, 0x50, + 0xc5, 0xaf, 0x28, 0xcb, 0x14, 0xaa, 0x7a, 0xed, + 0xeb, 0x2e, 0xb0, 0xca, 0x50, 0x27, 0x25, 0x86, + 0x15, 0xe3, 0x13, 0x34, 0x30, 0x27, 0x43, 0x8f, + 0x6d, 0xc4, 0x8c, 0x5c, 0xd3, 0xd5, 0x1d, 0x42, + 0xbc, 0x18, 0xe1, 0xfa, 0xb9, 0x84, 0x9b, 0x99, + 0x77, 0x5e, 0x8f, 0xdf, 0xa4, 0x0b, 0xa8, 0x09, + 0x7c, 0xfa, 0x6b, 0xfb, 0x99, 0x86, 0x31, 0xad, + 0x39, 0x6c, 0x71, 0x4f, 0xe7, 0xcc, 0xa2, 0xa2, + 0x91, 0x2b, 0xf5, 0x3c, 0xb9, 0x99, 0xd2, 0xb2, + 0x3a, 0x75, 0xaa, 0x77, 0xc5, 0xca, 0xda, 0xb6, + 0x38, 0xdd, 0x60, 0xc4, 0x06, 0xfd, 0x9d, 0x2f, + 0x15, 0x96, 0x2c, 0x2b, 0xbc, 0xc6, 0xba, 0x14, + 0xd8, 0x2f, 0xf7, 0x13, 0x6e, 0x9a, 0x2d, 0x17, + 0xbe, 0xfd, 0x63, 0xee, 0x61, 0xa2, 0xd3, 0xa7, + 0xaf, 0xbc, 0x76, 0xbd, 0x99, 0xfc, 0x71, 0x63, + 0x25, 0xf4, 0x67, 0xa3, 0x83, 0x77, 0xe3, 0xed, + 0x9a, 0xca, 0x8e, 0x18, 0x97, 0x5d, 0xd8, 0xba, + 0x8c, 0x6c, 0xe9, 0x69, 0xa2, 0xfb, 0x1c, 0xf0, + 0x36, 0xfa, 0x78, 0x9c, 0xc1, 0xc1, 0x88, 0x5e, + 0xf3, 0x9d, 0x4e, 0x01, 0xa4, 0x53, 0xdb, 0x67, + 0xea, 0x55, 0x99, 0xf6, 0x59, 0x1f, 0x99, 0xb1, + 0xcb, 0x70, 0xcf, 0x25, 0x2e, 0x01, 0x2f, 0xb4, + 0xc4, 0xcb, 0xa1, 0x6c, 0x68, 0xb5, 0xdd, 0x64, + 0xf2, 0x4c, 0xab, 0x0c, 0xb0, 0x06, 0x3a, 0x81, + 0x8d, 0x75, 0x59, 0x86, 0x1a, 0x6b, 0x38, 0x2d, + 0x39, 0xb3, 0x5a, 0xef, 0x13, 0xbd, 0x65, 0xe4, + 0xf1, 0xaf, 0x3a, 0x68, 0x3a, 0xbd, 0xe5, 0xe6, + 0x43, 0x31, 0xad, 0xe1, 0x5b, 0x2c, 0xbb, 0xbc, + 0x87, 0x1f, 0xde, 0x09, 0x9a, 0x0d, 0xc6, 0xb2, + 0x87, 0x7d, 0x6a, 0x9f, 0x67, 0x69, 0x77, 0x90, + 0x59, 0xbb, 0x7b, 0xbe, 0xf2, 0x90, 0xb2, 0x07, + 0x81, 0x3a, 0xf4, 0xbe, 0xf2, 0x8f, 0x74, 0x69, + 0xaa, 0x50, 0x75, 0xe2, 0x78, 0xcb, 0xe3, 0xf9, + 0x33, 0x37, 0xd3, 0xa2, 0x57, 0x9c, 0x35, 0x6f, + 0xd0, 0x72, 0xbd, 0x17, 0xd9, 0x64, 0x69, 0x04, + 0xf1, 0x11, 0x65, 0xe3, 0x13, 0x0d, 0x49, 0xc6, + 0xb3, 0xec, 0xc7, 0x66, 0x1a, 0x6f, 0x1d, 0x97, + 0x74, 0x6f, 0xac, 0x18, 0x57, 0x2b, 0x25, 0xd5, + 0xa4, 0xf3, 0x7f, 0x92, 0x62, 0x50, 0x08, 0xc8, + 0x67, 0xd5, 0xc7, 0xcc, 0x5a, 0x62, 0xa8, 0x5b, + 0xdf, 0xd7, 0x99, 0x86, 0x35, 0x29, 0x77, 0x43, + 0x3e, 0xb2, 0xc2, 0x84, 0xb0, 0xdb, 0xd3, 0x05, + 0xb7, 0xe4, 0xdb, 0x1c, 0xb5, 0x4a, 0xe0, 0xb6, + 0x6b, 0x55, 0xa9, 0xa0, 0x6d, 0xc0, 0x57, 0x27, + 0xe2, 0x9d, 0x53, 0xcd, 0x54, 0xa4, 0x20, 0xcd, + 0x54, 0x7d, 0x68, 0x60, 0x24, 0xb5, 0xc1, 0x22, + 0xf7, 0x5a, 0x96, 0xa0, 0x5e, 0xa0, 0x75, 0xb7, + 0xa4, 0x26, 0x88, 0xdc, 0x22, 0xae, 0x12, 0x3e, + 0x02, 0xc0, 0xcb, 0x39, 0xec, 0x24, 0x38, 0x1c, + 0x35, 0x51, 0x6d, 0x37, 0x2b, 0x78, 0xdc, 0xd9, + 0x58, 0x3d, 0xac, 0x7f, 0xc9, 0x94, 0xd6, 0x96, + 0x6d, 0xd1, 0x5f, 0xc4, 0x2e, 0xc4, 0xde, 0x5c, + 0x73, 0xea, 0x05, 0x10, 0xb5, 0x53, 0xc8, 0xe3, + 0x16, 0xef, 0xcd, 0x1e, 0x3e, 0xd4, 0x9a, 0xfa, + 0x0b, 0x36, 0x74, 0x25, 0xed, 0x80, 0x11, 0xa7, + 0x62, 0x99, 0x19, 0xda, 0x45, 0xee, 0xb5, 0xb7, + 0x37, 0xaa, 0xcb, 0xf4, 0x2f, 0xb2, 0x66, 0x4b, + 0x3a, 0x8f, 0xde, 0xfe, 0x2a, 0x58, 0x1d, 0xa6, + 0x6e, 0xab, 0x2f, 0xe0, 0x74, 0x7e, 0x62, 0xa0, + 0x57, 0x4a, 0xa9, 0xaa, 0xca, 0xb8, 0xf5, 0xe9, + 0x13, 0x0e, 0xd9, 0x3c, 0x9f, 0xdf, 0xb9, 0xa6, + 0x85, 0x9d, 0xba, 0x2c, 0xa2, 0x9e, 0x75, 0xc1, + 0x0f, 0x10, 0x4d, 0x74, 0x67, 0x8a, 0x59, 0x1e, + 0xbd, 0x4e, 0x67, 0x02, 0x35, 0x99, 0x68, 0xc1, + 0x2f, 0x4f, 0xdc, 0x1e, 0x64, 0xd8, 0x1a, 0xf8, + 0xb6, 0xcf, 0x4e, 0xf0, 0x39, 0xcb, 0x0c, 0x7f, + 0x2f, 0xa6, 0xe6, 0x1d, 0x30, 0xaa, 0x3e, 0x53, + 0x7d, 0xf3, 0x1c, 0x2d, 0xdd, 0x45, 0x55, 0x6b, + 0xb6, 0xbb, 0xc0, 0x9c, 0xe1, 0x04, 0x77, 0x80, + 0xdb, 0x78, 0x31, 0x03, 0xe2, 0x13, 0x76, 0x77, + 0x86, 0x34, 0x3e, 0x57, 0xc5, 0x47, 0x0f, 0x42, + 0x60, 0x85, 0xca, 0x59, 0x2a, 0xdc, 0x63, 0x35, + 0xbd, 0x78, 0x98, 0x72, 0x77, 0xc1, 0xab, 0x34, + 0x16, 0x07, 0xac, 0x1f, 0x93, 0x68, 0x2d, 0xe0, + 0xfb, 0xae, 0x02, 0x86, 0x96, 0x47, 0xbb, 0xc2, + 0xd5, 0xab, 0x3b, 0xe0, 0x63, 0xbf, 0x79, 0x9c, + 0x93, 0x61, 0x78, 0xb6, 0x1c, 0x27, 0xa5, 0xb5, + 0x14, 0x08, 0x5d, 0xb5, 0x80, 0x63, 0x74, 0x33, + 0x5e, 0x55, 0x1d, 0x84, 0xce, 0x38, 0xb3, 0x8d, + 0xb8, 0x6b, 0x17, 0xd2, 0x1f, 0xa8, 0x80, 0xc1, + 0xc7, 0x2a, 0xee, 0x6d, 0xcd, 0xcb, 0xd2, 0x0b, + 0x8b, 0xb1, 0x5f, 0x9f, 0x7e, 0xd1, 0x52, 0x81, + 0x12, 0x68, 0x15, 0x7d, 0x41, 0x75, 0x51, 0xff, + 0x00, 0x17, 0x18, 0x4f, 0x0a, 0xad, 0xf2, 0x99, + 0x8d, 0x2e, 0x39, 0x4c, 0x09, 0xe7, 0x18, 0x05, + 0x55, 0x25, 0x55, 0xfe, 0xbd, 0x66, 0x67, 0x9e, + 0x4b, 0xe2, 0x9f, 0x99, 0xb3, 0x73, 0x09, 0xfd, + 0xd2, 0x95, 0xc3, 0xfd, 0x4d, 0x44, 0xe2, 0x66, + 0x50, 0x2f, 0x75, 0xa7, 0xa5, 0x4e, 0xe8, 0x47, + 0x3f, 0x98, 0xda, 0x2d, 0x40, 0xdf, 0x07, 0x8b, + 0x9e, 0xd2, 0x81, 0x99, 0x71, 0xc7, 0x25, 0xe2, + 0x6e, 0x30, 0x17, 0x25, 0x37, 0xbb, 0xd6, 0x3e, + 0xd5, 0x97, 0x16, 0xc8, 0x4a, 0x7a, 0x89, 0x7a, + 0x0d, 0xa2, 0xf7, 0xdc, 0x97, 0x1a, 0x02, 0xfc, + 0x46, 0x3b, 0x44, 0xf7, 0x5f, 0x62, 0xba, 0x2b, + 0x80, 0xee, 0x84, 0xee, 0x8b, 0x22, 0xce, 0x35, + 0x56, 0x38, 0x21, 0xdf, 0xac, 0xd7, 0x7d, 0x75, + 0xa2, 0xce, 0x83, 0x9e, 0xc9, 0x65, 0x00, 0x99, + 0xae, 0x6d, 0xad, 0xff, 0x00, 0x31, 0xdd, 0x12, + 0xa1, 0xd2, 0x9d, 0xdf, 0x66, 0xa3, 0xd9, 0x53, + 0x54, 0x00, 0xef, 0xcb, 0x1b, 0x08, 0x4a, 0x2e, + 0x65, 0xd9, 0x6d, 0xf8, 0x88, 0x45, 0xab, 0x4b, + 0x4e, 0x6e, 0x77, 0x52, 0x6d, 0xc1, 0x70, 0xed, + 0xb1, 0xfb, 0x18, 0xfb, 0xaa, 0xe4, 0xef, 0x62, + 0x7d, 0xbf, 0xe1, 0xed, 0x2b, 0x44, 0x75, 0xd6, + 0x30, 0x59, 0xe4, 0xbe, 0x9c, 0xdc, 0xb8, 0x89, + 0x64, 0x08, 0x7a, 0x2b, 0x7f, 0x63, 0x16, 0x5c, + 0x13, 0xd6, 0x19, 0x25, 0x7a, 0x9d, 0x24, 0xbe, + 0xc1, 0x67, 0xbc, 0xaa, 0x51, 0x1b, 0x5c, 0x04, + 0xcd, 0xda, 0xfe, 0xb9, 0x9b, 0x6f, 0x34, 0xa1, + 0xb4, 0x67, 0xdd, 0x32, 0xbd, 0xa9, 0x07, 0xab, + 0x9c, 0x7a, 0xfe, 0xe0, 0x49, 0x49, 0x44, 0x4b, + 0x08, 0x5e, 0x29, 0xaf, 0x4e, 0xf1, 0x91, 0xa9, + 0x76, 0x75, 0x08, 0xeb, 0xaf, 0x3e, 0x60, 0xab, + 0xd7, 0x15, 0x3f, 0xd8, 0xed, 0x0b, 0x6b, 0x6f, + 0xfc, 0x46, 0x9b, 0x37, 0x00, 0x24, 0xa3, 0x65, + 0x7e, 0x48, 0x5b, 0xbd, 0xee, 0x6a, 0xb4, 0xca, + 0x8e, 0x87, 0x1d, 0x9c, 0x67, 0x71, 0x2e, 0x0a, + 0x82, 0x76, 0xff, 0x00, 0x1f, 0xb0, 0xea, 0x31, + 0x28, 0x8e, 0xa5, 0xc1, 0x85, 0xd2, 0x01, 0x60, + 0xbf, 0x0d, 0x6b, 0x5d, 0x61, 0x0b, 0x92, 0xe0, + 0xeb, 0xa5, 0xb6, 0xdc, 0x3d, 0x7c, 0x45, 0xdd, + 0x9d, 0xa2, 0x23, 0x84, 0x3b, 0x1c, 0xee, 0x23, + 0x00, 0xb6, 0x54, 0x07, 0x83, 0xd6, 0x12, 0x06, + 0x39, 0x4b, 0x74, 0xc9, 0x8f, 0xf3, 0x11, 0xc0, + 0xab, 0xe8, 0xd3, 0x47, 0xfc, 0xc7, 0xe0, 0x99, + 0xca, 0x86, 0x93, 0xd9, 0x18, 0x07, 0x6b, 0xfd, + 0x95, 0x32, 0xcf, 0x36, 0xf6, 0x0a, 0x63, 0x5a, + 0x4e, 0xd2, 0xa5, 0x07, 0xd5, 0x74, 0x7e, 0xa6, + 0x54, 0xa9, 0x6e, 0x0e, 0x78, 0xd0, 0x10, 0x33, + 0x45, 0x15, 0xec, 0x7e, 0x26, 0x66, 0x00, 0xdd, + 0xc7, 0x05, 0x67, 0xa5, 0x9a, 0xe2, 0x0f, 0x15, + 0x98, 0x65, 0xfb, 0x66, 0x02, 0x9a, 0xcb, 0xca, + 0x9d, 0xe8, 0x01, 0x3f, 0x7d, 0xa7, 0x2d, 0xa2, + 0x02, 0xed, 0xd7, 0xa1, 0x7f, 0xa6, 0x52, 0x91, + 0x51, 0xbb, 0xf2, 0x8e, 0xfd, 0x7d, 0x1e, 0xbf, + 0x76, 0xe0, 0x4e, 0xaa, 0x52, 0xc1, 0x4e, 0x37, + 0x90, 0x73, 0xae, 0xf1, 0x20, 0x32, 0x82, 0x91, + 0xe8, 0xfd, 0x2a, 0x14, 0x69, 0x04, 0xb3, 0x91, + 0xbf, 0x29, 0x9a, 0x70, 0x86, 0xa5, 0x29, 0x6a, + 0x59, 0x62, 0x9d, 0xd7, 0x98, 0x28, 0x0c, 0xc2, + 0x10, 0x29, 0x01, 0x3c, 0x25, 0x8c, 0xdb, 0x42, + 0x6a, 0xf4, 0x89, 0xd5, 0xff, 0x00, 0x8e, 0xa7, + 0x9d, 0x3f, 0x7f, 0x8a, 0x2d, 0xcf, 0xf9, 0xec, + 0x1b, 0xc1, 0x8c, 0x48, 0xc0, 0x40, 0x65, 0xa6, + 0x25, 0x23, 0x9c, 0x8a, 0x75, 0xe0, 0x1d, 0x71, + 0x1e, 0xa7, 0xcf, 0x78, 0xfa, 0x47, 0x7a, 0x2a, + 0xed, 0xbf, 0x89, 0x6e, 0x14, 0x6d, 0xce, 0xb5, + 0x61, 0xce, 0xfb, 0x4a, 0x8d, 0x7f, 0x83, 0x0e, + 0xbd, 0x2c, 0xfd, 0x45, 0x2a, 0x52, 0x03, 0xd4, + 0x6b, 0x01, 0x8b, 0xaa, 0x95, 0x6a, 0x56, 0xf7, + 0x1f, 0xda, 0x76, 0x7b, 0x41, 0x6e, 0x92, 0xd7, + 0x76, 0x5c, 0x8b, 0xf1, 0x2a, 0xdc, 0x06, 0xfb, + 0xb9, 0x45, 0x69, 0x4c, 0x6f, 0xbc, 0x10, 0x4d, + 0x9c, 0x5f, 0x1a, 0xed, 0xd8, 0x53, 0xc9, 0x2a, + 0x1b, 0x10, 0x74, 0x0a, 0x2e, 0xe8, 0x04, 0xac, + 0x6e, 0x16, 0x9d, 0xc8, 0x02, 0xca, 0x5c, 0x04, + 0x28, 0x0d, 0x62, 0x63, 0xba, 0xc2, 0xc4, 0x15, + 0x1b, 0x00, 0x5a, 0x55, 0x78, 0xcb, 0x13, 0x03, + 0x01, 0x05, 0x82, 0xe3, 0x45, 0x63, 0x8d, 0x09, + 0xc9, 0xa7, 0x99, 0x09, 0x07, 0xaa, 0x62, 0x9a, + 0x10, 0x17, 0x2d, 0xc5, 0x51, 0xa2, 0x80, 0x6f, + 0x06, 0x45, 0xa1, 0x6e, 0x70, 0x01, 0x9d, 0x7b, + 0xac, 0xf7, 0x8f, 0x0d, 0x77, 0x40, 0xc6, 0x8b, + 0x7d, 0x13, 0xd1, 0xf3, 0x14, 0x82, 0x37, 0x2a, + 0xe9, 0x06, 0x0f, 0xce, 0xa3, 0x97, 0xdc, 0x14, + 0xac, 0x2c, 0x34, 0x56, 0xab, 0xae, 0x85, 0xb1, + 0xc3, 0x90, 0x65, 0x6f, 0x14, 0xb3, 0xae, 0xec, + 0x4b, 0x95, 0x2a, 0x54, 0xa9, 0x6e, 0x5c, 0xf1, + 0x11, 0x51, 0x71, 0xc8, 0xfd, 0xa0, 0x95, 0x6a, + 0x17, 0x01, 0xfd, 0x16, 0x1f, 0x50, 0x42, 0x6c, + 0x3a, 0xff, 0x00, 0x7c, 0xb0, 0x3b, 0x59, 0x6f, + 0x7b, 0xf0, 0x28, 0x1f, 0xe4, 0x01, 0x28, 0x45, + 0xe6, 0x82, 0xf1, 0x89, 0x58, 0xce, 0x16, 0x43, + 0x8f, 0xee, 0x16, 0x38, 0x53, 0xac, 0xe7, 0xa0, + 0x61, 0xd7, 0x8d, 0xf2, 0x69, 0xab, 0x2c, 0xd5, + 0xd8, 0x8a, 0xcb, 0x24, 0x70, 0x11, 0xc9, 0xfa, + 0xae, 0x9d, 0xae, 0xf1, 0x89, 0x6c, 0x28, 0xa1, + 0x7c, 0x83, 0xb2, 0x59, 0x0d, 0x00, 0x17, 0x57, + 0x09, 0xc8, 0xe0, 0x58, 0xd9, 0x29, 0x19, 0x69, + 0x13, 0x98, 0x37, 0x34, 0x2b, 0x8e, 0x57, 0xfe, + 0x90, 0x70, 0x19, 0xc2, 0x1b, 0x41, 0x60, 0x5a, + 0xb0, 0xe0, 0x83, 0x3e, 0xe1, 0x3a, 0x3e, 0x63, + 0xe5, 0xda, 0x23, 0xf8, 0xfd, 0x53, 0x70, 0xea, + 0x2a, 0x3c, 0x52, 0xdf, 0x16, 0x8b, 0xba, 0xf5, + 0x95, 0x3d, 0x47, 0xe8, 0x10, 0x84, 0xdf, 0x1b, + 0x4b, 0xdc, 0xd8, 0xbf, 0x13, 0x8c, 0x3c, 0x5f, + 0x2b, 0x2b, 0xeb, 0x52, 0xbe, 0x86, 0xeb, 0x4c, + 0x4a, 0xe5, 0x64, 0x25, 0x31, 0xd2, 0x86, 0x0a, + 0x76, 0xf5, 0xfe, 0x54, 0x16, 0xf2, 0x96, 0x7e, + 0x74, 0x43, 0x81, 0xb0, 0x4a, 0xe2, 0x66, 0x89, + 0xed, 0x88, 0x37, 0x61, 0x5a, 0xb8, 0x38, 0xcc, + 0xa9, 0x18, 0x7d, 0xfe, 0xa4, 0xbd, 0x8b, 0xce, + 0x1c, 0x35, 0xa7, 0x1a, 0x84, 0x9a, 0x91, 0xf7, + 0x8c, 0x1f, 0xaf, 0x8a, 0xfa, 0x68, 0x18, 0x63, + 0x87, 0xcc, 0xbb, 0x3d, 0xe0, 0xfc, 0x41, 0x1e, + 0x19, 0xc8, 0xbd, 0x67, 0x82, 0x0b, 0x41, 0x1c, + 0x55, 0xf1, 0xfa, 0x25, 0xcb, 0xf3, 0x2a, 0xbe, + 0xe5, 0x2d, 0xf1, 0x07, 0x50, 0x3f, 0x03, 0xf3, + 0xb5, 0xe8, 0x12, 0xf8, 0x38, 0x8b, 0x7f, 0x51, + 0x40, 0x0f, 0x4c, 0x33, 0xee, 0x66, 0x65, 0x5e, + 0xd8, 0x85, 0x7a, 0x24, 0xb2, 0x8b, 0x38, 0x7e, + 0xca, 0x95, 0x2b, 0xe9, 0x7a, 0x5c, 0xd1, 0x35, + 0xca, 0xf0, 0x0e, 0x1e, 0x71, 0xda, 0x62, 0x06, + 0x40, 0x30, 0x55, 0x65, 0x85, 0x92, 0xaa, 0x82, + 0x36, 0x43, 0x19, 0xa0, 0xce, 0x6a, 0xf2, 0xa2, + 0x5c, 0xd4, 0xde, 0x1f, 0x8f, 0x2a, 0x7e, 0x52, + 0xec, 0x44, 0xd0, 0xbe, 0x81, 0x9d, 0xe7, 0x3a, + 0x98, 0xfc, 0x56, 0x4b, 0x3c, 0xbc, 0xeb, 0xda, + 0x01, 0x92, 0xbd, 0xf8, 0x79, 0xb7, 0x83, 0xda, + 0x08, 0xdb, 0xbd, 0xe9, 0x34, 0x7e, 0x23, 0x84, + 0x83, 0xa1, 0xbc, 0x72, 0x86, 0x5b, 0xe8, 0x9a, + 0x3e, 0x47, 0xa5, 0x4b, 0xe9, 0x75, 0xa6, 0xef, + 0x23, 0x62, 0xf8, 0x8a, 0x08, 0x4e, 0x39, 0xf7, + 0x33, 0x3a, 0xa2, 0x63, 0x7e, 0xf2, 0x55, 0x35, + 0xfa, 0x4a, 0x47, 0xc8, 0x43, 0xeb, 0xd1, 0x3f, + 0xe2, 0x08, 0xe9, 0xc4, 0x5a, 0x8a, 0x4d, 0x93, + 0x48, 0x4b, 0xb8, 0xfe, 0x67, 0xd2, 0x6c, 0x48, + 0xf6, 0x0c, 0x68, 0xbb, 0xd3, 0x5d, 0x78, 0xef, + 0x1c, 0xf2, 0x16, 0x15, 0xaf, 0x5d, 0x0a, 0xbf, + 0x7e, 0xf2, 0xad, 0x36, 0x6b, 0xb5, 0x0d, 0xb4, + 0xaa, 0xd5, 0x46, 0x43, 0x44, 0x51, 0x73, 0x61, + 0xfe, 0x40, 0x69, 0x19, 0xac, 0x6f, 0x75, 0x57, + 0x8d, 0x40, 0xa9, 0x41, 0x1d, 0xbd, 0xd4, 0x31, + 0x7c, 0xa1, 0x65, 0xf5, 0x66, 0x5a, 0xae, 0x65, + 0x36, 0x9e, 0xf0, 0x74, 0xd9, 0xd8, 0x95, 0xf4, + 0x2f, 0x56, 0x1d, 0x41, 0xe1, 0xf6, 0x2d, 0x46, + 0x2e, 0x5c, 0xbf, 0xb7, 0x1f, 0xcf, 0x10, 0x83, + 0x5f, 0x01, 0x99, 0x13, 0x5e, 0x22, 0xae, 0xd5, + 0x01, 0xdc, 0xcf, 0x13, 0xb8, 0xa8, 0xe8, 0x74, + 0xb0, 0xd9, 0xde, 0xff, 0x00, 0xd1, 0x5a, 0xab, + 0x61, 0x0f, 0x5f, 0x83, 0xae, 0x25, 0x5d, 0x89, + 0xbc, 0x2d, 0x99, 0x04, 0xbe, 0x65, 0x02, 0x81, + 0x28, 0x9c, 0x9d, 0xe1, 0x15, 0xe8, 0x12, 0xab, + 0xee, 0x69, 0x1f, 0xa3, 0x7f, 0x54, 0x80, 0x3f, + 0x53, 0xc9, 0x01, 0x52, 0x92, 0x62, 0xf1, 0x36, + 0x70, 0xe1, 0xf9, 0xa3, 0x37, 0x60, 0xf3, 0x01, + 0x87, 0xd0, 0x25, 0x7d, 0x15, 0xde, 0x0b, 0x43, + 0xe0, 0x7f, 0xc1, 0x07, 0xd6, 0x5f, 0xa1, 0xb8, + 0xb1, 0x52, 0xd1, 0x63, 0xc1, 0xfa, 0x55, 0xd0, + 0x86, 0x14, 0x3d, 0x20, 0x06, 0xbf, 0xe3, 0x71, + 0xe3, 0x44, 0x8b, 0x1b, 0xe8, 0x3f, 0xff, 0xda, + 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x10, 0x7f, 0xfe, 0xdf, 0xe3, + 0x76, 0x6c, 0x15, 0x75, 0x22, 0xdf, 0xf5, 0x91, + 0xb1, 0xfc, 0x1c, 0xb6, 0x1c, 0xd4, 0x00, 0x28, + 0xd7, 0xa9, 0xab, 0xc9, 0x89, 0xce, 0xed, 0x30, + 0x48, 0x18, 0x64, 0xc5, 0x01, 0xc4, 0xbb, 0x65, + 0xa3, 0xb3, 0x6c, 0x4e, 0x67, 0x7e, 0x32, 0x78, + 0x66, 0x9a, 0x4a, 0xdb, 0xd9, 0x97, 0x88, 0x9a, + 0xdd, 0x4f, 0x97, 0xec, 0x64, 0x1a, 0x29, 0x52, + 0x5e, 0x84, 0xe5, 0x6a, 0x12, 0xaa, 0x92, 0x48, + 0x66, 0x11, 0x19, 0x75, 0x99, 0xd1, 0x91, 0xc4, + 0xc9, 0x23, 0x92, 0x97, 0xc4, 0xe4, 0x6e, 0xa0, + 0x63, 0x37, 0x24, 0x90, 0x0f, 0x1b, 0x86, 0x17, + 0xba, 0x02, 0xa0, 0x38, 0x92, 0x49, 0x22, 0x23, + 0xfb, 0x5c, 0x8c, 0x49, 0x24, 0xee, 0x09, 0x20, + 0x18, 0x78, 0x23, 0xc2, 0x49, 0x24, 0x90, 0x16, + 0xa4, 0x12, 0x04, 0x6f, 0x26, 0x49, 0x24, 0x92, + 0x49, 0x33, 0x50, 0x00, 0x14, 0xa6, 0xdf, 0xa4, + 0x90, 0x40, 0x24, 0xc8, 0x39, 0x24, 0x47, 0x66, + 0xa5, 0x82, 0x09, 0x20, 0x07, 0x8f, 0xe4, 0x92, + 0x71, 0xbe, 0xd6, 0x41, 0x04, 0xcd, 0x7a, 0x3d, + 0x82, 0x40, 0x37, 0xa7, 0x6d, 0x25, 0xb1, 0x97, + 0x53, 0x60, 0x09, 0x04, 0xe8, 0xbf, 0xaf, 0x7b, + 0x70, 0x00, 0xb8, 0x02, 0x24, 0x92, 0xe7, 0xe7, + 0x23, 0x43, 0x88, 0xb2, 0x43, 0xf4, 0x92, 0x48, + 0x0b, 0x40, 0x47, 0x64, 0x92, 0x41, 0xe6, 0xda, + 0x6a, 0x27, 0xe0, 0x3f, 0xe4, 0x92, 0x40, 0x4c, + 0x7e, 0x35, 0xff, 0x00, 0x72, 0x59, 0x24, 0x92, + 0x49, 0x6b, 0x10, 0x3f, 0xff, 0xc4, 0x00, 0x28, + 0x11, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, + 0x05, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x11, 0x21, 0x31, 0x41, 0x51, + 0x61, 0x71, 0x81, 0x10, 0x91, 0xa1, 0x20, 0x30, + 0xb1, 0xc1, 0xd1, 0xf0, 0xe1, 0xf1, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, 0x10, + 0xfb, 0x37, 0x50, 0x6f, 0x49, 0x66, 0xb3, 0x16, + 0x9d, 0x82, 0xc0, 0x40, 0x1a, 0x14, 0x67, 0xc1, + 0x6c, 0x0f, 0x94, 0x16, 0x26, 0x89, 0x2f, 0xd1, + 0x97, 0xe9, 0x72, 0xe5, 0xcb, 0x97, 0xf4, 0x5b, + 0x2d, 0x2d, 0x83, 0x6d, 0x47, 0x0d, 0x31, 0x5a, + 0x0b, 0xda, 0x3f, 0x61, 0x18, 0x68, 0xb4, 0xcc, + 0xb5, 0x21, 0x2d, 0x54, 0x74, 0xa7, 0xde, 0x14, + 0xd4, 0x6a, 0xb1, 0x4e, 0xcc, 0x7c, 0x43, 0x10, + 0x0d, 0x5b, 0xbb, 0x2e, 0x17, 0xb4, 0x34, 0x8a, + 0x8c, 0x1a, 0xf2, 0xc7, 0x4a, 0xc9, 0xc9, 0x28, + 0xc5, 0x3f, 0xdd, 0x1f, 0x6f, 0x46, 0x27, 0xa5, + 0x7a, 0x54, 0xaf, 0x42, 0x5c, 0xb2, 0x05, 0x56, + 0x5d, 0xb3, 0xf8, 0x94, 0x9e, 0xf8, 0xaf, 0xcc, + 0x6d, 0x00, 0x1d, 0x6e, 0x25, 0x05, 0x91, 0xcf, + 0x13, 0x47, 0x42, 0x9e, 0x66, 0x0c, 0x00, 0x36, + 0x2b, 0x31, 0xb8, 0x16, 0x53, 0xd9, 0xfe, 0xff, + 0x00, 0x54, 0x77, 0x62, 0x64, 0xdc, 0x7e, 0x5b, + 0x45, 0xa5, 0x55, 0xbc, 0xb8, 0x14, 0x3a, 0xde, + 0x95, 0x4f, 0xcf, 0x1c, 0x40, 0xad, 0x1b, 0xbe, + 0xdb, 0x7e, 0x25, 0xbb, 0xba, 0xf5, 0x8b, 0x30, + 0x91, 0xf4, 0xd5, 0x2b, 0xd2, 0xa5, 0x4a, 0x81, + 0x16, 0x4a, 0x0b, 0x03, 0x7f, 0x31, 0xb9, 0xc6, + 0xd6, 0xda, 0xfb, 0x42, 0xef, 0xba, 0xe2, 0xe0, + 0xfc, 0x03, 0x0d, 0x45, 0x87, 0x4d, 0x71, 0x4b, + 0xe0, 0x84, 0x1b, 0xf8, 0x4f, 0xdc, 0x76, 0x1a, + 0x39, 0x18, 0xfc, 0x18, 0x96, 0xf0, 0x3b, 0x34, + 0xb9, 0xd3, 0x45, 0xb6, 0x60, 0x0a, 0xb9, 0x71, + 0x7e, 0x36, 0xe7, 0x2d, 0xc3, 0x74, 0x60, 0xbb, + 0x34, 0x6f, 0x6f, 0x10, 0xc1, 0x6c, 0xcb, 0xa1, + 0xb4, 0xd3, 0xac, 0xcb, 0x09, 0x41, 0x5b, 0x9d, + 0xa9, 0x81, 0x01, 0xcc, 0xa6, 0x7a, 0x83, 0x3d, + 0x0a, 0xb1, 0x39, 0xb8, 0xa5, 0xfe, 0xae, 0xe6, + 0xd2, 0xae, 0x23, 0xd2, 0xa8, 0xc5, 0x12, 0x89, + 0x44, 0xa2, 0x6e, 0x80, 0xf7, 0x37, 0x3c, 0xc6, + 0x9e, 0x7a, 0xa7, 0x52, 0x52, 0x11, 0xa3, 0xa4, + 0xdd, 0x5a, 0xf2, 0x9a, 0xf4, 0x89, 0x1a, 0xfa, + 0xcc, 0xc1, 0xa3, 0xaa, 0x59, 0x33, 0x4a, 0x1c, + 0xf4, 0xee, 0x4b, 0x8a, 0x46, 0xe8, 0x7e, 0x0a, + 0x7c, 0x46, 0x9f, 0x6c, 0x03, 0x3d, 0x5f, 0xf9, + 0xda, 0x5f, 0xc8, 0xef, 0xdd, 0xce, 0x7f, 0x90, + 0x1e, 0xe7, 0x3a, 0xa4, 0xcf, 0xb6, 0x93, 0x9c, + 0x91, 0x3b, 0x36, 0x69, 0xa6, 0x92, 0x9a, 0x5c, + 0xe8, 0xcc, 0x0d, 0x0e, 0x0d, 0x4f, 0x63, 0x5a, + 0xda, 0x18, 0x4b, 0x40, 0x56, 0x0b, 0xf3, 0x0b, + 0x13, 0x3b, 0x5d, 0xd7, 0x6e, 0x9d, 0x36, 0xf5, + 0x4b, 0x88, 0x8c, 0xe1, 0x2a, 0x54, 0x4b, 0x96, + 0x9c, 0x81, 0xdb, 0x73, 0xc6, 0xb3, 0x28, 0xfa, + 0x5d, 0xb9, 0x37, 0xad, 0xd8, 0x76, 0x8f, 0xf9, + 0xf3, 0x0c, 0xa2, 0x3c, 0xc5, 0xc2, 0xd4, 0xfc, + 0x92, 0xf4, 0xae, 0x9b, 0x6b, 0x96, 0x58, 0x86, + 0x0c, 0xad, 0xda, 0xf4, 0x65, 0x16, 0x56, 0xb5, + 0x6b, 0xd8, 0xc4, 0xb5, 0x11, 0x55, 0x96, 0x57, + 0x0e, 0xf1, 0x49, 0x90, 0x55, 0x16, 0xf5, 0x43, + 0x76, 0x3a, 0x2d, 0x2d, 0x53, 0xa5, 0x13, 0x18, + 0xa8, 0x65, 0x77, 0x62, 0x69, 0xd5, 0xcf, 0x66, + 0x5e, 0xa9, 0x63, 0xb6, 0x79, 0x4e, 0x6b, 0x7b, + 0x57, 0xee, 0x29, 0x76, 0x69, 0x30, 0xe5, 0xf4, + 0x24, 0xa9, 0x53, 0x75, 0x06, 0x94, 0xba, 0xf9, + 0xe9, 0xe6, 0x5a, 0x82, 0x78, 0xab, 0x4b, 0x59, + 0x57, 0x7a, 0x10, 0x9e, 0xd4, 0xa4, 0xc3, 0x5d, + 0x2b, 0x04, 0x24, 0x0a, 0x0d, 0x18, 0xa3, 0x12, + 0x9d, 0x81, 0x48, 0x84, 0xc3, 0x5c, 0xcb, 0xb5, + 0x52, 0xc2, 0xee, 0xd6, 0xc5, 0xcd, 0x78, 0x71, + 0x30, 0xe2, 0x54, 0x5a, 0x2b, 0xa9, 0xa2, 0x0b, + 0x02, 0x86, 0x9d, 0x5e, 0x0b, 0xf7, 0x40, 0x96, + 0x1e, 0xe0, 0x7e, 0x23, 0x25, 0xbb, 0x0e, 0x0f, + 0xfb, 0xff, 0x00, 0x2e, 0x0a, 0x03, 0x98, 0x03, + 0xb5, 0x30, 0x78, 0x89, 0x58, 0x66, 0x5d, 0x20, + 0x0f, 0xda, 0x5f, 0x5b, 0x7f, 0x4a, 0x4a, 0xa5, + 0x3a, 0x85, 0x66, 0xb6, 0xa6, 0xe6, 0xbe, 0xfa, + 0xf7, 0x83, 0x05, 0x54, 0xae, 0x99, 0xab, 0xf1, + 0x19, 0xe2, 0x8b, 0xcc, 0x38, 0x9b, 0xdc, 0xec, + 0x4a, 0x82, 0xd3, 0x21, 0xc7, 0x7e, 0x7c, 0x42, + 0x61, 0x96, 0x1b, 0xbf, 0xe4, 0x2e, 0xb1, 0xcc, + 0x75, 0xe1, 0x0e, 0xa7, 0x4f, 0x0e, 0xb1, 0x5a, + 0x83, 0xa2, 0xee, 0xba, 0x89, 0x82, 0xf8, 0xcb, + 0x71, 0xcd, 0x6a, 0xeb, 0x58, 0x86, 0x58, 0x5d, + 0x6e, 0xab, 0xf2, 0xc2, 0x91, 0x2f, 0x06, 0x62, + 0x11, 0xe3, 0xf1, 0x2e, 0xe5, 0xce, 0xbf, 0xaf, + 0x11, 0x58, 0xc2, 0x42, 0xc8, 0x0a, 0x04, 0xaa, + 0xd0, 0xd5, 0x3e, 0x9a, 0xf5, 0x19, 0x94, 0x96, + 0x4c, 0x6c, 0x80, 0x68, 0x3d, 0xf3, 0xf3, 0x1b, + 0x26, 0x39, 0xe4, 0xbd, 0xf5, 0x80, 0x80, 0xd3, + 0x82, 0xb1, 0xe2, 0x10, 0xff, 0x00, 0x01, 0x98, + 0x2b, 0x14, 0xc0, 0xa2, 0xed, 0x06, 0x81, 0xa5, + 0xb5, 0x78, 0xd7, 0xa2, 0x9e, 0x62, 0x8e, 0x0e, + 0x89, 0x42, 0xb7, 0xc9, 0x42, 0x70, 0xd5, 0xdc, + 0x28, 0xd3, 0x0d, 0x9b, 0x15, 0xae, 0xb4, 0x7f, + 0x36, 0x82, 0xc4, 0xac, 0xdd, 0x5a, 0xf8, 0x20, + 0x05, 0x6d, 0xda, 0x8f, 0xcb, 0xf9, 0x98, 0x58, + 0x7b, 0xf7, 0xdf, 0x48, 0x90, 0x90, 0x75, 0xe7, + 0xde, 0xf4, 0x84, 0xea, 0x47, 0x19, 0xbf, 0x3a, + 0x45, 0xad, 0x16, 0x6f, 0x44, 0x44, 0x11, 0x0a, + 0x7a, 0xbc, 0xf9, 0x89, 0x1d, 0x32, 0xf1, 0xf6, + 0x31, 0x50, 0x14, 0x17, 0x79, 0xee, 0x35, 0x3c, + 0x91, 0x57, 0xcc, 0x9b, 0x7f, 0x1d, 0x3d, 0xb7, + 0x8c, 0x99, 0x53, 0xa4, 0xe1, 0x34, 0x4b, 0xa5, + 0x56, 0x8e, 0xcc, 0xb8, 0x0d, 0x60, 0x60, 0x18, + 0xc1, 0xfe, 0xe6, 0x05, 0x65, 0xbc, 0xbf, 0xa8, + 0x6c, 0x1c, 0x2b, 0x30, 0x10, 0xdc, 0xbb, 0x7e, + 0x26, 0x30, 0xa3, 0xa4, 0x66, 0xda, 0xea, 0xc1, + 0xa9, 0x6f, 0x4d, 0x48, 0x48, 0x47, 0x5b, 0x1a, + 0x75, 0x8c, 0x20, 0x86, 0x86, 0xc7, 0x3e, 0xff, + 0x00, 0x61, 0x75, 0x60, 0x6e, 0x00, 0xdc, 0xa7, + 0xb3, 0x79, 0x3c, 0x31, 0x4c, 0x68, 0xe1, 0xef, + 0x31, 0x85, 0xde, 0x71, 0x9a, 0xe6, 0x14, 0x1d, + 0x30, 0xca, 0xa2, 0x55, 0xdf, 0x58, 0x29, 0xc4, + 0x55, 0x59, 0x37, 0xb6, 0x5f, 0x17, 0xc2, 0x2d, + 0x8b, 0x7f, 0x5b, 0xa1, 0xea, 0x84, 0x52, 0xb4, + 0x76, 0xbd, 0xd1, 0xe7, 0xde, 0x26, 0x2e, 0xcd, + 0x37, 0x6f, 0xf5, 0xaf, 0x21, 0x1a, 0x56, 0x67, + 0x61, 0xa7, 0x98, 0xcb, 0x88, 0x31, 0xdf, 0xfb, + 0x02, 0xa5, 0xa1, 0xa5, 0x6f, 0xde, 0xff, 0x00, + 0x51, 0xe1, 0xb9, 0x70, 0x7c, 0x1f, 0xed, 0xe5, + 0xae, 0x4b, 0xc4, 0xb1, 0x44, 0xd7, 0xed, 0x6b, + 0x2e, 0x4e, 0x77, 0x77, 0x9a, 0xc5, 0x5f, 0xbd, + 0x69, 0x9d, 0xe3, 0x1b, 0x6e, 0x6c, 0xec, 0xad, + 0x39, 0x2f, 0x69, 0x9a, 0x35, 0x01, 0xa2, 0x7f, + 0x7e, 0xba, 0xb7, 0xa4, 0xd2, 0x66, 0xb4, 0xd7, + 0x4c, 0x70, 0xe7, 0x95, 0xc0, 0xb5, 0x53, 0xbd, + 0x1a, 0x6f, 0x9b, 0x7b, 0x24, 0xb5, 0x7b, 0x53, + 0xbf, 0xcd, 0xcb, 0x2d, 0x89, 0x78, 0x9d, 0x4f, + 0xba, 0x60, 0x2b, 0xd8, 0x8b, 0xa7, 0xfd, 0xa4, + 0x27, 0x51, 0xad, 0xb4, 0x1e, 0x97, 0x9c, 0x56, + 0x47, 0xa8, 0x62, 0x0c, 0x19, 0x3e, 0x4e, 0x4e, + 0x8f, 0xd5, 0x69, 0x52, 0xe8, 0x31, 0xae, 0xf4, + 0x1a, 0x3f, 0xa7, 0x98, 0xa8, 0x91, 0x03, 0x4e, + 0x5e, 0x2c, 0xcd, 0x0e, 0x74, 0xad, 0x25, 0xd7, + 0x16, 0x38, 0xd6, 0x50, 0x11, 0xcb, 0x11, 0x30, + 0x27, 0xdc, 0x6f, 0x68, 0x9f, 0x26, 0x41, 0x5d, + 0x79, 0x4b, 0x75, 0x74, 0xe1, 0xde, 0x51, 0x99, + 0x2a, 0xf8, 0x3a, 0xf3, 0x9f, 0xec, 0x52, 0xa7, + 0x5f, 0xa7, 0x59, 0x61, 0x29, 0x88, 0xec, 0x87, + 0x93, 0x97, 0xbc, 0x44, 0xf7, 0x21, 0x18, 0xda, + 0x32, 0xa8, 0x6d, 0xb6, 0xf3, 0x4c, 0x7d, 0xab, + 0x26, 0xa4, 0x06, 0x8a, 0x7f, 0x07, 0x3f, 0xd8, + 0x5c, 0xed, 0xbd, 0x61, 0xf2, 0xe2, 0x65, 0xe0, + 0xba, 0x1b, 0xc7, 0x16, 0x63, 0xeb, 0x4d, 0x40, + 0xe3, 0x1e, 0xb8, 0x1e, 0xe7, 0x32, 0xc2, 0xb2, + 0x51, 0x7c, 0xd1, 0x51, 0x86, 0xe8, 0x8f, 0xc7, + 0xa4, 0x5d, 0x66, 0x0a, 0x7d, 0x77, 0x01, 0x28, + 0x46, 0x69, 0xe2, 0xf2, 0xa9, 0xf7, 0xff, 0x00, + 0x79, 0x60, 0xc2, 0x1c, 0x35, 0x7d, 0x8f, 0xec, + 0x39, 0xaa, 0x68, 0xb4, 0x6b, 0xd0, 0xfd, 0xcb, + 0x03, 0x4e, 0x2f, 0x1e, 0xda, 0x4a, 0xfa, 0x9d, + 0x25, 0xea, 0x27, 0x1e, 0x00, 0xee, 0x9b, 0x78, + 0x9f, 0x89, 0x8e, 0xd3, 0x0d, 0xb5, 0xe1, 0x2b, + 0x48, 0x6f, 0xb5, 0xe2, 0x62, 0xdd, 0xe2, 0xce, + 0x31, 0x57, 0xe2, 0xea, 0x22, 0xb7, 0xa5, 0xcb, + 0x1c, 0x10, 0x60, 0x22, 0xf5, 0xfb, 0x3e, 0x3f, + 0xb1, 0x56, 0x74, 0xd4, 0xdf, 0xe3, 0xf6, 0xcb, + 0x9a, 0xaf, 0x8d, 0x5f, 0x63, 0xf6, 0xc3, 0x7e, + 0x73, 0x47, 0xb1, 0x88, 0x4d, 0x80, 0xe0, 0xc1, + 0xed, 0x12, 0xad, 0x83, 0x74, 0x85, 0xd7, 0x4f, + 0xb1, 0x5a, 0xc8, 0xe0, 0xae, 0x3f, 0x03, 0x8b, + 0xf0, 0xc7, 0x1d, 0x09, 0x13, 0x3d, 0x75, 0x71, + 0x14, 0xab, 0x2f, 0x10, 0x41, 0x83, 0x6a, 0x6f, + 0xda, 0xb4, 0xeb, 0x05, 0x2a, 0xab, 0x1e, 0x06, + 0xea, 0x28, 0xd2, 0x2f, 0x43, 0xda, 0x5e, 0x1f, + 0xb4, 0x50, 0xbf, 0xf3, 0xfd, 0xe6, 0x16, 0x24, + 0x70, 0xd5, 0x7f, 0xce, 0xac, 0x49, 0x60, 0xec, + 0xaf, 0x63, 0x6e, 0xf3, 0x02, 0xa7, 0x03, 0x07, + 0xc4, 0x6f, 0x28, 0x8d, 0xa2, 0x3a, 0xb0, 0x26, + 0x00, 0xd3, 0xd7, 0x4f, 0xa9, 0x2c, 0x95, 0x42, + 0xf6, 0x8a, 0x8e, 0x8d, 0x9f, 0x1a, 0x41, 0x8c, + 0xc6, 0x03, 0x01, 0xdf, 0xfe, 0x11, 0xd6, 0x6a, + 0xd0, 0xc0, 0xff, 0x00, 0x0d, 0x3b, 0x4c, 0x12, + 0x50, 0xb2, 0x9e, 0x1a, 0x8a, 0x71, 0xae, 0x78, + 0x98, 0x0e, 0x86, 0xac, 0x7e, 0x1e, 0x25, 0x37, + 0x03, 0xb3, 0x6b, 0xf8, 0xfc, 0xca, 0x05, 0xce, + 0xfa, 0x3d, 0x8c, 0x4b, 0x16, 0x9c, 0x30, 0x0e, + 0xc4, 0xdd, 0x66, 0xc9, 0x29, 0xd5, 0xf4, 0x40, + 0x0f, 0xa2, 0xe2, 0xcb, 0x97, 0xf5, 0x5a, 0x5c, + 0x55, 0xb1, 0xa2, 0x72, 0x4b, 0x04, 0xd4, 0xa6, + 0x4a, 0x7a, 0xe2, 0x56, 0x08, 0x6d, 0xec, 0x1d, + 0xa1, 0xae, 0xb1, 0x77, 0x96, 0x85, 0xe6, 0xba, + 0x6d, 0x4d, 0x4c, 0x81, 0x38, 0x0d, 0x10, 0x7d, + 0xeb, 0x17, 0x78, 0x08, 0x16, 0x9f, 0x62, 0xe2, + 0xcb, 0x97, 0x2e, 0x5c, 0xbf, 0x54, 0x05, 0x33, + 0x4a, 0x98, 0x72, 0x14, 0x04, 0x32, 0xd9, 0xba, + 0xc0, 0x40, 0x0d, 0x3e, 0xc5, 0xc5, 0x45, 0xe6, + 0x5c, 0x52, 0x32, 0xe2, 0xc7, 0x30, 0x60, 0xb0, + 0x7d, 0x16, 0x5b, 0x02, 0xd0, 0xfb, 0x4c, 0x58, + 0xcb, 0xf4, 0xb6, 0x2d, 0xcf, 0xff, 0xc4, 0x00, + 0x27, 0x11, 0x01, 0x00, 0x02, 0x02, 0x01, 0x03, + 0x03, 0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x11, 0x21, 0x31, 0x41, + 0x10, 0x51, 0x61, 0x20, 0x30, 0x71, 0x81, 0x91, + 0xa1, 0xf0, 0xb1, 0xc1, 0xe1, 0xd1, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, 0x3f, 0x10, + 0xf5, 0xa5, 0xc4, 0xae, 0x82, 0x19, 0x97, 0xcc, + 0x32, 0xcc, 0x85, 0x73, 0x57, 0x82, 0xe5, 0x91, + 0xc9, 0xb3, 0xa9, 0xd2, 0xba, 0x54, 0xa8, 0x47, + 0xd7, 0xd8, 0x44, 0x77, 0x07, 0x66, 0x07, 0x4d, + 0x46, 0x66, 0x71, 0x02, 0xc9, 0x11, 0xce, 0xce, + 0x36, 0x81, 0x2e, 0x26, 0xc6, 0xf9, 0x87, 0x50, + 0x5f, 0x6d, 0xcb, 0x6e, 0xa0, 0x1f, 0x40, 0xe9, + 0x7d, 0x2e, 0x5c, 0xb9, 0x7d, 0x2b, 0xa2, 0x86, + 0x59, 0xa3, 0x62, 0x94, 0x56, 0x20, 0x51, 0xde, + 0xbe, 0x61, 0xba, 0x66, 0x30, 0x45, 0xae, 0x6c, + 0xc4, 0xef, 0xb9, 0x8a, 0xec, 0x81, 0xcf, 0x12, + 0x94, 0xd5, 0xbc, 0x46, 0x20, 0xe3, 0x2c, 0xf0, + 0x7c, 0x74, 0x11, 0x48, 0x27, 0x4b, 0x97, 0x2e, + 0x5c, 0xb8, 0x4a, 0x26, 0xda, 0xcf, 0x1f, 0x48, + 0x69, 0x12, 0x7c, 0x63, 0xf9, 0x8e, 0x10, 0xb3, + 0x0a, 0xac, 0x6e, 0x52, 0xbc, 0xe5, 0xe2, 0x7c, + 0x25, 0x7f, 0x73, 0x0c, 0xb3, 0xb2, 0x63, 0x60, + 0x6a, 0x06, 0xd0, 0xcc, 0x8d, 0xc6, 0x97, 0xca, + 0x1d, 0x65, 0x0d, 0x90, 0x9d, 0xcf, 0xe6, 0x59, + 0x72, 0x6b, 0xcc, 0x6a, 0x1b, 0x74, 0xb6, 0x12, + 0x4d, 0xe5, 0xcb, 0x97, 0x2e, 0x12, 0x3e, 0x62, + 0x7c, 0x89, 0xe3, 0x86, 0x29, 0x2c, 0x22, 0xbc, + 0x9c, 0x44, 0x3b, 0x91, 0xa6, 0x59, 0x6c, 0x88, + 0xa0, 0x05, 0xd4, 0xdc, 0xd5, 0xfc, 0x4c, 0x75, + 0xfd, 0x90, 0xf1, 0x5a, 0xfe, 0xf1, 0x06, 0x9a, + 0xed, 0x2d, 0x16, 0x65, 0x4d, 0xb5, 0x00, 0xb7, + 0x12, 0x9f, 0x9d, 0xfe, 0xee, 0x0e, 0x06, 0x51, + 0x4c, 0x97, 0xe8, 0x14, 0x84, 0x5c, 0xb9, 0x7d, + 0x31, 0xdd, 0x38, 0x83, 0x50, 0x8a, 0x8e, 0x37, + 0x00, 0xd2, 0xae, 0xa1, 0x24, 0xea, 0x18, 0x8b, + 0x2a, 0x08, 0x8d, 0x90, 0x2f, 0x98, 0x40, 0x0a, + 0x5c, 0x22, 0x32, 0xbe, 0x31, 0x0c, 0x5f, 0x18, + 0xea, 0xe4, 0xe2, 0x53, 0x38, 0x71, 0x29, 0x1f, + 0x10, 0x8a, 0x4b, 0x32, 0x6f, 0xcc, 0x53, 0xc4, + 0x54, 0x2c, 0xdc, 0x6a, 0xd4, 0x1e, 0x1b, 0xf4, + 0x0c, 0xbe, 0x94, 0x44, 0xba, 0xfb, 0x8b, 0x69, + 0x1d, 0x7e, 0xf8, 0x86, 0x1c, 0x81, 0xae, 0x23, + 0xd9, 0x9c, 0xcb, 0x32, 0xcf, 0x80, 0x20, 0xab, + 0x0a, 0xe1, 0xad, 0x4a, 0x37, 0x04, 0xca, 0xc8, + 0x3c, 0xee, 0x24, 0x14, 0x07, 0x27, 0xee, 0x62, + 0x3f, 0xe7, 0xd0, 0x91, 0xc5, 0xa9, 0x4a, 0x98, + 0x86, 0x43, 0x39, 0x8a, 0x1b, 0x81, 0xab, 0xf8, + 0x97, 0xbe, 0xa5, 0x8c, 0x74, 0xc4, 0x0d, 0xfa, + 0x65, 0x92, 0xb7, 0x28, 0x4e, 0x52, 0x91, 0x2b, + 0x87, 0xeb, 0x35, 0x29, 0xef, 0xde, 0x12, 0xb7, + 0x37, 0x83, 0x50, 0x2c, 0x30, 0xdc, 0x44, 0x2c, + 0x70, 0xf7, 0x8e, 0xf9, 0x7c, 0xc4, 0xb9, 0x6b, + 0xc4, 0xaf, 0x88, 0x2e, 0x77, 0x8a, 0x2c, 0x65, + 0x0e, 0xc1, 0x8b, 0xa4, 0xbc, 0x17, 0x0a, 0x19, + 0x23, 0x50, 0xbe, 0x9b, 0xea, 0xab, 0x5b, 0x2e, + 0x8f, 0x26, 0x26, 0x25, 0xc2, 0x7c, 0x91, 0xcb, + 0x36, 0x7e, 0x61, 0xb7, 0x0b, 0x0c, 0x1f, 0xce, + 0x5c, 0xdd, 0x83, 0x9f, 0xf0, 0xe2, 0x28, 0xe4, + 0x0f, 0xb7, 0xfb, 0x2c, 0x2f, 0x5f, 0xbd, 0xe1, + 0xa9, 0x38, 0xf3, 0x2b, 0x96, 0x30, 0xeb, 0xb8, + 0x9e, 0xe2, 0x00, 0xda, 0xc0, 0x34, 0x8b, 0x6f, + 0x2b, 0xfd, 0x25, 0x23, 0xd2, 0xfb, 0x14, 0x46, + 0x2b, 0xe0, 0x61, 0x2b, 0xef, 0x98, 0x5d, 0x03, + 0x88, 0xa8, 0x3b, 0x85, 0xc3, 0x8d, 0xcc, 0xb0, + 0xc1, 0x0b, 0x32, 0x86, 0x20, 0x04, 0x94, 0x38, + 0x44, 0x36, 0xb8, 0x89, 0x92, 0xcc, 0x22, 0x84, + 0x24, 0x64, 0xf8, 0x80, 0xf0, 0x1b, 0xb3, 0x5c, + 0xc4, 0x62, 0x52, 0xe0, 0xf6, 0x04, 0xb5, 0x3d, + 0x3b, 0xa5, 0x4e, 0x4d, 0x7c, 0x43, 0xcf, 0x2f, + 0xbe, 0x11, 0x55, 0x76, 0x83, 0xa9, 0x92, 0xba, + 0x70, 0xf4, 0x24, 0x04, 0x00, 0xd1, 0xea, 0x29, + 0x72, 0x9b, 0xe8, 0x93, 0x80, 0x8f, 0xe7, 0xd7, + 0x53, 0x28, 0xa3, 0xc6, 0xff, 0x00, 0xec, 0x08, + 0xed, 0x27, 0xce, 0x18, 0x85, 0x6c, 0x59, 0x2c, + 0x0b, 0x55, 0x01, 0x69, 0x80, 0x21, 0x8d, 0x7b, + 0x57, 0x07, 0x87, 0xe6, 0xa0, 0xac, 0xbf, 0xb6, + 0x18, 0x39, 0x30, 0x36, 0x7a, 0xc0, 0x4c, 0xc3, + 0x1e, 0x95, 0xfd, 0x36, 0x44, 0xd4, 0xc0, 0x81, + 0xdf, 0x4c, 0x25, 0x93, 0x30, 0x20, 0xdf, 0xb8, + 0x42, 0x88, 0xf8, 0x61, 0xf0, 0x59, 0xb7, 0xbc, + 0x0f, 0xad, 0xf5, 0x50, 0xc3, 0x3b, 0x0f, 0x0e, + 0xe4, 0x2b, 0xb5, 0xb8, 0xfd, 0x30, 0x04, 0x6d, + 0x6c, 0x6b, 0xc0, 0xca, 0xaf, 0x6d, 0x04, 0xa7, + 0x53, 0x3e, 0x6f, 0x8c, 0x71, 0x19, 0xd3, 0x6a, + 0x0d, 0xeb, 0xd2, 0x35, 0x18, 0xc2, 0x4b, 0xe3, + 0x5c, 0x9f, 0x11, 0x0d, 0xb4, 0x01, 0x30, 0x69, + 0x64, 0x21, 0xe6, 0x2b, 0x2b, 0xdb, 0x41, 0x0e, + 0xa8, 0x58, 0x44, 0x24, 0x6f, 0xbd, 0x3d, 0x4b, + 0x35, 0x1f, 0xc8, 0x9f, 0x4e, 0xd3, 0x62, 0xaa, + 0x0e, 0x11, 0x8c, 0x31, 0x2a, 0xaa, 0x00, 0x47, + 0xd6, 0xb5, 0x12, 0x20, 0x16, 0xb3, 0x4d, 0x2c, + 0x44, 0xf9, 0xd7, 0xf3, 0x98, 0xb7, 0xe0, 0x47, + 0x6c, 0xcb, 0xbf, 0x3e, 0xc3, 0xb2, 0x29, 0x45, + 0x8e, 0x47, 0xfa, 0x81, 0x0d, 0x87, 0x47, 0x69, + 0xb5, 0x9a, 0x7a, 0x10, 0xb6, 0xbc, 0xd7, 0xc4, + 0x59, 0xf4, 0x12, 0x41, 0x77, 0x1c, 0xa2, 0x23, + 0x49, 0xfd, 0x4c, 0xf7, 0xdb, 0x99, 0x3b, 0x1e, + 0xef, 0x45, 0x08, 0x87, 0xd8, 0x48, 0xd4, 0x3d, + 0x36, 0xe4, 0x40, 0x09, 0xa9, 0xc6, 0x02, 0x09, + 0xcb, 0x11, 0xbc, 0xde, 0xdb, 0x82, 0x98, 0x88, + 0xa8, 0x45, 0xac, 0x01, 0x8c, 0xc4, 0x51, 0x2b, + 0xbc, 0x5a, 0xfe, 0x99, 0x35, 0xd6, 0x7c, 0xc0, + 0x02, 0x88, 0x80, 0x89, 0x8a, 0x62, 0xaf, 0xb3, + 0x75, 0x1d, 0x26, 0x32, 0xbe, 0x1f, 0xe6, 0x50, + 0x3b, 0xa3, 0x97, 0xe9, 0xda, 0x10, 0x06, 0x5e, + 0x79, 0x18, 0xe2, 0x36, 0xdb, 0x3e, 0x3e, 0x21, + 0x15, 0x93, 0xcf, 0xfb, 0x32, 0x0e, 0xa0, 0xc6, + 0x3a, 0xed, 0x32, 0x76, 0x3d, 0xd9, 0x82, 0x24, + 0x9e, 0x31, 0x6f, 0xa8, 0x21, 0x2b, 0xd5, 0x4b, + 0x50, 0x95, 0x19, 0xd9, 0x2d, 0x78, 0x7f, 0x93, + 0x35, 0x3c, 0x92, 0x88, 0x95, 0xf1, 0xd4, 0x5e, + 0xcc, 0xe5, 0x98, 0x54, 0x45, 0x62, 0x29, 0x96, + 0x7d, 0x61, 0x03, 0xad, 0x4a, 0xf4, 0x86, 0x98, + 0xf1, 0x71, 0x25, 0x56, 0xc4, 0x11, 0xec, 0x8b, + 0x62, 0xdf, 0xb4, 0x09, 0x50, 0x2e, 0x57, 0x4a, + 0x95, 0x28, 0x88, 0x44, 0xe8, 0x20, 0xa8, 0xa7, + 0xdb, 0x0e, 0xa1, 0x72, 0x90, 0x2a, 0x7f, 0xff, + 0xc4, 0x00, 0x25, 0x10, 0x01, 0x01, 0x00, 0x03, + 0x01, 0x00, 0x02, 0x02, 0x03, 0x01, 0x00, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x21, + 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x10, 0x20, + 0x91, 0xa1, 0x30, 0xc1, 0xd1, 0xb1, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x3f, 0x10, + 0xfa, 0xf2, 0xa9, 0xac, 0xa4, 0xd6, 0x71, 0xc7, + 0x2d, 0x67, 0xd3, 0x9f, 0x4e, 0x72, 0xd6, 0x44, + 0x35, 0x97, 0x76, 0xb1, 0x50, 0x0f, 0xca, 0xe1, + 0x75, 0x45, 0x04, 0x74, 0x62, 0x53, 0x54, 0x75, + 0x85, 0xf1, 0x83, 0x11, 0x1e, 0x6c, 0x7f, 0xd7, + 0x01, 0xe2, 0x0c, 0xa3, 0x30, 0x76, 0x1b, 0xf0, + 0x57, 0x0f, 0x5b, 0xa0, 0x1b, 0xd1, 0x13, 0x3f, + 0x0c, 0x74, 0xe6, 0x5f, 0xcc, 0x89, 0x9f, 0x56, + 0x6c, 0xe6, 0x53, 0x1a, 0xf3, 0x0a, 0xf2, 0xe0, + 0x79, 0x8d, 0x98, 0xa4, 0xca, 0x4d, 0x67, 0xd5, + 0x92, 0x9a, 0xfe, 0x14, 0xb3, 0x10, 0x34, 0x54, + 0x51, 0x4d, 0x52, 0x7e, 0x53, 0x00, 0x35, 0x17, + 0x06, 0xe5, 0x9e, 0x26, 0xc7, 0xf2, 0x74, 0x70, + 0x2d, 0xb4, 0x28, 0x05, 0xfd, 0xe2, 0x00, 0x8a, + 0x93, 0xdd, 0xbc, 0xad, 0x1b, 0xb1, 0xb2, 0xdd, + 0x60, 0x5c, 0x56, 0x3b, 0xaf, 0x61, 0x01, 0x78, + 0xdc, 0x33, 0x9d, 0xc4, 0x13, 0x20, 0x6d, 0x8a, + 0x15, 0xea, 0x39, 0xf8, 0x79, 0x17, 0x25, 0x24, + 0x31, 0x4b, 0x23, 0xb7, 0x50, 0x5e, 0x8c, 0x98, + 0xde, 0x10, 0x01, 0x33, 0x49, 0xad, 0xbb, 0x0a, + 0xc7, 0xe7, 0x2f, 0xbb, 0xbe, 0xb1, 0x4a, 0x02, + 0xab, 0xa2, 0xc4, 0x73, 0xc9, 0xc2, 0x18, 0x10, + 0xc4, 0x9d, 0x42, 0x05, 0x6c, 0xca, 0xc5, 0x8a, + 0x0b, 0x31, 0x88, 0x3b, 0x11, 0x11, 0x1f, 0x8c, + 0xaf, 0x99, 0x7c, 0xaf, 0x97, 0x3e, 0xac, 0x8b, + 0xfc, 0x03, 0x58, 0x23, 0x00, 0x0e, 0x67, 0xc4, + 0x63, 0x33, 0x4e, 0x5a, 0x6b, 0x08, 0x54, 0x81, + 0xd5, 0xe1, 0x8e, 0x0d, 0xf4, 0x07, 0xf8, 0x53, + 0x8a, 0x47, 0x20, 0x29, 0x47, 0xaa, 0x4f, 0xf3, + 0x0b, 0xc4, 0xa2, 0xca, 0xeb, 0xc2, 0x3d, 0x00, + 0xe8, 0x56, 0x09, 0xc7, 0x91, 0x16, 0x2a, 0x4a, + 0x9b, 0x3d, 0x7a, 0x4b, 0xc2, 0x8c, 0x4e, 0x96, + 0x90, 0xd2, 0x06, 0xa7, 0x25, 0xe6, 0xf5, 0xa4, + 0x82, 0xed, 0x2c, 0x09, 0x68, 0x6d, 0xa1, 0x91, + 0xa1, 0xc3, 0xc0, 0xaf, 0x97, 0x5c, 0x02, 0xcd, + 0xe2, 0x3f, 0x75, 0xb9, 0x20, 0x1a, 0x68, 0xc6, + 0x8d, 0x8c, 0x66, 0x27, 0x78, 0x41, 0xa0, 0xe9, + 0x92, 0x5b, 0x7b, 0x75, 0x5e, 0x64, 0x2c, 0xb0, + 0x8e, 0xb3, 0x8a, 0x48, 0x14, 0xf0, 0x4b, 0xbb, + 0x87, 0x32, 0x36, 0x85, 0x0c, 0x14, 0x52, 0x05, + 0xd8, 0xcf, 0x58, 0x26, 0x13, 0x38, 0x4d, 0x44, + 0x2f, 0x51, 0x5d, 0xec, 0x15, 0x32, 0x19, 0xc8, + 0xbb, 0x4b, 0x4a, 0x29, 0x7b, 0xbe, 0xf5, 0x26, + 0x0a, 0xef, 0xa9, 0xae, 0x1f, 0x4d, 0x5b, 0x37, + 0x9c, 0x2a, 0xfd, 0x63, 0x7d, 0x61, 0x9d, 0x98, + 0xe0, 0xe0, 0xd7, 0xf0, 0x8c, 0x8d, 0xb0, 0x85, + 0x2c, 0xb1, 0x45, 0x42, 0x4e, 0x9d, 0xd5, 0x3c, + 0xf9, 0xc0, 0x10, 0xc9, 0x28, 0x4a, 0x41, 0xaa, + 0x11, 0xa7, 0xc3, 0x1d, 0x30, 0x06, 0x53, 0x69, + 0x4a, 0x7e, 0x2c, 0xd1, 0xb9, 0x90, 0x4f, 0x14, + 0x48, 0x09, 0xd4, 0x13, 0x6e, 0x90, 0xe9, 0x9e, + 0x61, 0xd5, 0x64, 0xff, 0x00, 0x65, 0x23, 0x74, + 0x9f, 0x21, 0x6c, 0x93, 0x29, 0xda, 0xd4, 0x48, + 0x54, 0x80, 0x68, 0x15, 0x43, 0x66, 0xeb, 0x4e, + 0x59, 0xc6, 0xd1, 0x0b, 0x5d, 0x3e, 0x8f, 0xd8, + 0xf3, 0x17, 0x41, 0x78, 0xf0, 0x2a, 0x2a, 0x9b, + 0x21, 0x7c, 0x41, 0xcb, 0x86, 0xd9, 0x53, 0x38, + 0x52, 0x42, 0x8c, 0xa1, 0x2d, 0xa3, 0x4b, 0x26, + 0xca, 0xfc, 0x22, 0x2a, 0x2d, 0x28, 0x5f, 0x1a, + 0xe9, 0xf5, 0xde, 0xaa, 0x20, 0x38, 0x06, 0x8e, + 0x0f, 0xcb, 0x34, 0x35, 0x11, 0x10, 0x01, 0x1f, + 0xb4, 0xb2, 0x3d, 0x1f, 0xac, 0xdc, 0x72, 0xe9, + 0xa2, 0xd0, 0x2e, 0x82, 0x24, 0x0d, 0x7e, 0x1c, + 0xac, 0xaf, 0xc9, 0x14, 0x3a, 0x6e, 0xc1, 0x49, + 0x14, 0xf1, 0x7b, 0x23, 0xa9, 0x94, 0xa1, 0x15, + 0xee, 0x9e, 0x09, 0xb1, 0x49, 0x51, 0x7b, 0x90, + 0x4b, 0x80, 0xa2, 0x88, 0x36, 0x0c, 0xc0, 0xc2, + 0x95, 0x7d, 0x06, 0xec, 0x43, 0x44, 0x06, 0xbf, + 0x06, 0x84, 0x7c, 0xd3, 0x82, 0x70, 0xc2, 0xd6, + 0x7f, 0xcc, 0x75, 0x43, 0xfe, 0x63, 0x3d, 0xe9, + 0x89, 0xf8, 0x99, 0xf8, 0xe6, 0xbe, 0x64, 0x7c, + 0x66, 0xee, 0x95, 0xa9, 0xf1, 0x27, 0x81, 0x88, + 0xf8, 0x83, 0x8b, 0x52, 0xc8, 0x5e, 0x80, 0xd7, + 0x13, 0x85, 0x09, 0xb9, 0x80, 0xe1, 0xc7, 0xa1, + 0x34, 0xcd, 0xfc, 0xf5, 0xce, 0x83, 0xb9, 0xde, + 0xd4, 0x08, 0x70, 0x50, 0xf8, 0x70, 0xca, 0x69, + 0x13, 0xb8, 0xd4, 0x8e, 0x8c, 0x1d, 0xd3, 0xf2, + 0x62, 0x1b, 0xf0, 0x34, 0x83, 0x83, 0x68, 0x10, + 0x5d, 0x05, 0xf1, 0xdb, 0x23, 0xb6, 0x55, 0x59, + 0x9a, 0x7d, 0x0d, 0xfb, 0xb4, 0x93, 0x0b, 0x70, + 0xf6, 0xd9, 0x77, 0x75, 0x4c, 0x88, 0x94, 0x69, + 0xad, 0xeb, 0xb2, 0x4a, 0x0c, 0x9a, 0x1f, 0x81, + 0xdc, 0x1b, 0xf2, 0x61, 0xaf, 0x55, 0xd8, 0xae, + 0x9b, 0xea, 0x1b, 0xa1, 0x77, 0xad, 0xd6, 0x27, + 0xd2, 0x87, 0x74, 0x10, 0x08, 0x41, 0xa0, 0x57, + 0x68, 0x0b, 0xcc, 0x0a, 0xa4, 0x44, 0x0d, 0xd7, + 0x08, 0xeb, 0x56, 0x6e, 0x5e, 0x56, 0xed, 0xe9, + 0x44, 0xd1, 0x22, 0x08, 0x8d, 0x95, 0x11, 0x85, + 0xa2, 0x19, 0x4c, 0x0e, 0x88, 0xa8, 0xb3, 0xf0, + 0x0d, 0x29, 0x92, 0xb2, 0x42, 0xd7, 0xd6, 0xa5, + 0x2c, 0x1a, 0x04, 0x6f, 0x79, 0x3e, 0x54, 0xd4, + 0x0d, 0xa7, 0xb3, 0xe4, 0xfc, 0x32, 0x61, 0x00, + 0x4c, 0x83, 0x01, 0xb0, 0x65, 0x6a, 0x9b, 0xb1, + 0x1d, 0xa1, 0x6a, 0x9d, 0xe2, 0x9a, 0x36, 0x35, + 0x57, 0xd1, 0x8f, 0x6e, 0x2c, 0x92, 0x46, 0x25, + 0x28, 0xf3, 0xf8, 0x48, 0x89, 0x81, 0x70, 0xc8, + 0xd8, 0x64, 0x7c, 0xcf, 0xc7, 0x3f, 0x1c, 0x05, + 0x6a, 0x9a, 0xc4, 0x25, 0x78, 0x69, 0xa2, 0x20, + 0xd5, 0x80, 0xb2, 0xe8, 0x36, 0xe7, 0x40, 0xe8, + 0xeb, 0x2c, 0x16, 0x72, 0xba, 0x2c, 0xb8, 0x0a, + 0x50, 0xa4, 0xf5, 0x44, 0x37, 0x59, 0x40, 0x9d, + 0x1e, 0xe4, 0x9d, 0x62, 0x0f, 0x4a, 0xa7, 0x52, + 0x57, 0x07, 0xf3, 0x87, 0x00, 0x4d, 0xc6, 0x3e, + 0x01, 0x9a, 0xf0, 0x3e, 0x30, 0xd3, 0xb4, 0xa1, + 0x6d, 0x34, 0x3f, 0x6e, 0xb5, 0x05, 0x30, 0xe1, + 0xbf, 0x4a, 0xb5, 0xa7, 0x4a, 0xfd, 0x17, 0x22, + 0x92, 0xd1, 0x40, 0x5d, 0x13, 0xfe, 0x11, 0x16, + 0xdf, 0x0c, 0x14, 0x8a, 0xd8, 0x29, 0xb6, 0x14, + 0xef, 0xc3, 0x1e, 0x69, 0xce, 0xaf, 0x3a, 0x0d, + 0x1a, 0x11, 0x2c, 0xe0, 0x27, 0xbc, 0x92, 0x41, + 0x1a, 0x93, 0x11, 0x7b, 0x0a, 0x3e, 0xc8, 0xad, + 0xc1, 0x56, 0x7a, 0xf8, 0xb9, 0x11, 0xb4, 0x31, + 0xc6, 0x9d, 0x1d, 0x15, 0x53, 0xc6, 0x13, 0x50, + 0x63, 0x70, 0x7d, 0xa3, 0xbe, 0x60, 0xa8, 0x26, + 0xb8, 0x86, 0xa0, 0xdb, 0x15, 0x1a, 0x55, 0xaf, + 0x70, 0x24, 0xc8, 0x2c, 0xb0, 0x2e, 0xfc, 0xf1, + 0xfd, 0xbc, 0xc7, 0xa4, 0xf8, 0x62, 0xc4, 0x14, + 0x0f, 0x48, 0xd3, 0x39, 0x5c, 0x67, 0xc0, 0xe5, + 0x2a, 0x76, 0x21, 0x0d, 0xfe, 0x5d, 0xcb, 0xa1, + 0x48, 0x14, 0xb6, 0x08, 0x61, 0x25, 0x0b, 0xc7, + 0x0c, 0xac, 0x34, 0x8d, 0xf4, 0x3c, 0x07, 0xfd, + 0xfe, 0x50, 0x70, 0x1e, 0x19, 0xf1, 0xbf, 0xe7, + 0xf1, 0xae, 0x29, 0x7e, 0x31, 0x37, 0xc3, 0x55, + 0x02, 0x27, 0xf8, 0xe3, 0x1f, 0x28, 0x66, 0x08, + 0x0a, 0x94, 0x19, 0x05, 0xdd, 0xb9, 0x25, 0x64, + 0xd2, 0x48, 0xba, 0x04, 0x76, 0xb4, 0xcf, 0x66, + 0xd6, 0x52, 0xc0, 0x1a, 0x68, 0x4c, 0x20, 0xae, + 0xfa, 0xbe, 0xc7, 0x58, 0xe0, 0xc9, 0xd8, 0x88, + 0x9c, 0x66, 0xc1, 0x18, 0xea, 0x58, 0x5b, 0x83, + 0x68, 0x06, 0x05, 0x4d, 0x63, 0x3b, 0xaf, 0x39, + 0xf5, 0x9a, 0xe7, 0x72, 0xa2, 0x14, 0x54, 0x3c, + 0x7c, 0x4d, 0xe0, 0x01, 0x8c, 0x9f, 0x45, 0x3d, + 0x45, 0x53, 0xa8, 0xaa, 0xd7, 0x26, 0x69, 0x22, + 0x88, 0x22, 0x34, 0x81, 0x74, 0x88, 0xf7, 0x0b, + 0xa4, 0x62, 0xc6, 0x83, 0xbc, 0x84, 0x04, 0x7e, + 0x56, 0x0b, 0x87, 0x10, 0x40, 0x51, 0xb8, 0xc4, + 0xb4, 0x82, 0x51, 0x88, 0xf2, 0x63, 0x51, 0x35, + 0x56, 0xa2, 0xf6, 0xb7, 0x6f, 0xeb, 0x11, 0x50, + 0x16, 0xbd, 0x3d, 0x1c, 0x83, 0x18, 0x3c, 0x2d, + 0xd4, 0x0c, 0xa6, 0xd0, 0x42, 0x6a, 0x3a, 0x88, + 0x8e, 0x82, 0x6c, 0x2f, 0x19, 0x70, 0x83, 0x64, + 0x91, 0xca, 0x4a, 0x42, 0xe9, 0x3b, 0x0b, 0x87, + 0xde, 0xe7, 0xa7, 0x80, 0x80, 0x74, 0x79, 0x0a, + 0x4f, 0x4a, 0x2a, 0x96, 0xfd, 0x7d, 0xe2, 0x9e, + 0x4e, 0x27, 0x8d, 0xbc, 0xcf, 0x30, 0x95, 0xa9, + 0xf6, 0x1f, 0xaf, 0xff, 0x00, 0x32, 0x7d, 0xcb, + 0x2c, 0x0e, 0xb1, 0xa1, 0x85, 0x0b, 0x4a, 0x37, + 0x5d, 0x69, 0x80, 0x51, 0x68, 0xd8, 0x66, 0xf5, + 0x7d, 0xe9, 0x7f, 0x90, 0x19, 0x73, 0x8d, 0x11, + 0x67, 0xc6, 0x00, 0x64, 0xa7, 0xf2, 0xc2, 0xa1, + 0xbf, 0x49, 0x71, 0xb0, 0x9a, 0x5f, 0x47, 0xbf, + 0x59, 0x30, 0x6f, 0x68, 0x6d, 0x14, 0x1a, 0x02, + 0xe8, 0x55, 0xdc, 0x98, 0x40, 0x91, 0xaa, 0x6c, + 0x0e, 0x82, 0x76, 0x25, 0x87, 0xe0, 0xc1, 0xd5, + 0x26, 0xca, 0x2b, 0x4c, 0xd6, 0xcc, 0x68, 0x59, + 0xc0, 0x62, 0x10, 0x59, 0x98, 0x05, 0x52, 0xd4, + 0x74, 0x51, 0x42, 0xb3, 0x72, 0xfc, 0xfd, 0xc0, + 0x1a, 0xad, 0x84, 0xd3, 0x47, 0xdd, 0xe4, 0xc0, + 0xfd, 0x2d, 0x67, 0x58, 0x2c, 0x4d, 0x09, 0x10, + 0x3e, 0x5c, 0x44, 0x40, 0x2f, 0x43, 0x2d, 0xb2, + 0xd8, 0xae, 0x85, 0xe1, 0x71, 0xe4, 0x82, 0xcc, + 0x6f, 0x2f, 0xa4, 0x45, 0xb0, 0x45, 0x51, 0x4b, + 0x11, 0xf0, 0x7f, 0x03, 0xba, 0x01, 0x1e, 0x36, + 0x96, 0x60, 0x75, 0x33, 0x48, 0x20, 0x44, 0x07, + 0xc1, 0xd3, 0xcb, 0x91, 0x3c, 0x4d, 0x05, 0x29, + 0x06, 0xa1, 0xa5, 0x23, 0xa7, 0x73, 0x77, 0x02, + 0xa0, 0x4a, 0x50, 0xfb, 0x29, 0xaf, 0xbd, 0xf7, + 0x36, 0xe4, 0x72, 0x86, 0xf8, 0x22, 0x13, 0x77, + 0x19, 0xdd, 0xe3, 0x20, 0xa2, 0x1a, 0x1d, 0x31, + 0xa4, 0x77, 0xef, 0x9e, 0xe0, 0xa1, 0x10, 0xa6, + 0x8d, 0x23, 0xca, 0x04, 0x74, 0x20, 0xd5, 0xc2, + 0x17, 0xa0, 0xcf, 0xc8, 0x4b, 0x3e, 0x76, 0x13, + 0xc7, 0x00, 0x98, 0x81, 0x12, 0xeb, 0xb3, 0xd1, + 0x25, 0x1d, 0x2e, 0x3a, 0xf1, 0x22, 0x70, 0xda, + 0x75, 0x93, 0x70, 0xee, 0x71, 0x5f, 0xe8, 0x69, + 0x9c, 0x01, 0x8b, 0x49, 0x9b, 0x58, 0xef, 0x32, + 0x24, 0x4c, 0x02, 0xb1, 0x49, 0xbd, 0xd8, 0x01, + 0x5e, 0x86, 0x82, 0x73, 0x20, 0x6a, 0x68, 0x34, + 0x38, 0x12, 0x3b, 0x50, 0x81, 0x29, 0x39, 0x25, + 0x2a, 0xb2, 0x38, 0xe8, 0x46, 0xec, 0x0d, 0x35, + 0x93, 0xdc, 0x78, 0xf6, 0x06, 0x02, 0x1b, 0x0d, + 0x88, 0x2d, 0xa0, 0x07, 0x4e, 0x36, 0xb8, 0xd9, + 0x60, 0x90, 0x19, 0xa1, 0xdf, 0x80, 0x0c, 0x50, + 0x53, 0x5c, 0xde, 0x2f, 0xc6, 0xb0, 0xc9, 0xd1, + 0x00, 0xb0, 0x13, 0x00, 0x2d, 0x81, 0x49, 0xf2, + 0xd9, 0x11, 0x7d, 0x0d, 0xdb, 0x58, 0xce, 0x0a, + 0x40, 0x03, 0xb3, 0x69, 0xbc, 0x8b, 0xcc, 0x90, + 0x34, 0x0f, 0x94, 0x14, 0x56, 0x17, 0x48, 0xbb, + 0x9e, 0x2d, 0x00, 0xd4, 0x61, 0x47, 0xe1, 0xa4, + 0xef, 0x15, 0x1d, 0xd5, 0xe0, 0x0b, 0x55, 0x7d, + 0x61, 0xb8, 0x29, 0x8f, 0x20, 0x1d, 0x14, 0x41, + 0x4f, 0x04, 0x3b, 0x65, 0x53, 0x56, 0xaa, 0x50, + 0x85, 0xb5, 0xa3, 0x36, 0xd6, 0x1a, 0x38, 0xa7, + 0x09, 0x6c, 0x82, 0x10, 0x51, 0x14, 0x11, 0x8a, + 0x72, 0x6f, 0x35, 0x02, 0x7e, 0x03, 0x3f, 0x11, + 0xc0, 0xaa, 0x29, 0x00, 0x07, 0x6d, 0x63, 0x6b, + 0xc1, 0xc5, 0xdc, 0xdc, 0x9e, 0x33, 0xb1, 0x45, + 0x8e, 0xd0, 0x8d, 0xdd, 0xc6, 0xb1, 0xaa, 0x57, + 0x18, 0x12, 0x5b, 0xaf, 0xdb, 0xb5, 0x21, 0x41, + 0xa1, 0x36, 0xb4, 0xa8, 0x7d, 0x7f, 0x55, 0x98, + 0xce, 0x1d, 0x84, 0x2f, 0xcb, 0x89, 0x12, 0x0d, + 0xb1, 0x5d, 0x21, 0xda, 0x6e, 0xa4, 0x05, 0x4d, + 0x11, 0x18, 0x9c, 0xc8, 0x26, 0x00, 0x12, 0x86, + 0xc2, 0xe8, 0x2d, 0xe6, 0x0a, 0xfe, 0xc5, 0x44, + 0xa6, 0x93, 0xd8, 0x02, 0xa6, 0xac, 0x71, 0xf7, + 0x04, 0x68, 0x02, 0xa1, 0x5d, 0xd8, 0x0f, 0x85, + 0x7b, 0x8d, 0x94, 0xce, 0xd0, 0x02, 0x90, 0x1c, + 0x1b, 0x34, 0x6e, 0xae, 0x49, 0xa7, 0x50, 0x4e, + 0x0a, 0x2a, 0xa6, 0x97, 0x69, 0xcc, 0x95, 0xc9, + 0x36, 0xa6, 0xa1, 0x23, 0x4a, 0xd2, 0x87, 0x66, + 0x9d, 0x4c, 0x64, 0x85, 0xbe, 0x7c, 0x3f, 0x50, + 0xc2, 0x41, 0x68, 0x6c, 0x55, 0x5d, 0x05, 0xdf, + 0x59, 0x03, 0xe3, 0x01, 0x9d, 0x61, 0x7e, 0x23, + 0x48, 0xfc, 0xd7, 0xf7, 0x91, 0xce, 0xd0, 0x26, + 0xfc, 0xc6, 0x7f, 0xa0, 0xfa, 0x61, 0x84, 0xa7, + 0x9b, 0xfb, 0x66, 0xe7, 0xe9, 0x59, 0xaf, 0x28, + 0x68, 0x7f, 0x88, 0x15, 0xfb, 0xb9, 0x09, 0xf2, + 0x83, 0xb7, 0xc0, 0xa3, 0xfa, 0x87, 0xeb, 0x34, + 0xf5, 0x14, 0xc2, 0x7c, 0x7f, 0xa0, 0x4b, 0x3e, + 0x36, 0xe8, 0x2f, 0xe1, 0x4c, 0xc3, 0x01, 0xcb, + 0xfe, 0x7f, 0x82, 0xe9, 0xa7, 0x47, 0xa8, 0x61, + 0xd4, 0xf7, 0xce, 0x9a, 0x26, 0x9a, 0x56, 0x1c, + 0xe1, 0xdc, 0x04, 0x11, 0x18, 0xc9, 0x05, 0x74, + 0x27, 0x68, 0x83, 0xad, 0xb7, 0xfa, 0x8c, 0xf3, + 0x01, 0x06, 0x47, 0xe7, 0x2c, 0x18, 0x58, 0xf3, + 0x7d, 0x31, 0xcb, 0xe2, 0x60, 0xca, 0xf2, 0x81, + 0x29, 0x68, 0x1b, 0xa0, 0xe7, 0x86, 0x31, 0x05, + 0x21, 0x5a, 0xba, 0x80, 0x0b, 0xdc, 0x24, 0x45, + 0xf6, 0x7d, 0x8e, 0x91, 0x53, 0x62, 0x47, 0xb8, + 0x30, 0x8e, 0xe9, 0x4d, 0x62, 0x90, 0x30, 0x14, + 0x2b, 0xd1, 0x8e, 0xe7, 0x58, 0xea, 0x48, 0x81, + 0x41, 0xb6, 0x7f, 0xed, 0x81, 0x0c, 0x62, 0x80, + 0x48, 0x6f, 0x91, 0xb2, 0x80, 0x66, 0xb1, 0xe5, + 0xb4, 0x55, 0xe0, 0x00, 0x0f, 0x0e, 0x92, 0xfc, + 0x65, 0xf3, 0x23, 0x63, 0x87, 0xac, 0x5f, 0x93, + 0xe1, 0xe6, 0x3b, 0xf5, 0x31, 0x31, 0x60, 0x4e, + 0xc4, 0xd2, 0x1a, 0x67, 0x97, 0x28, 0xa7, 0x21, + 0xfb, 0xcd, 0x60, 0x7e, 0x23, 0xfb, 0xcd, 0x5a, + 0xa1, 0x1c, 0xfe, 0x34, 0x47, 0xeb, 0x00, 0x08, + 0x68, 0xfe, 0xa6, 0x3a, 0x47, 0xc5, 0x10, 0x04, + 0x4a, 0x21, 0xbd, 0x2c, 0xf6, 0x09, 0xf0, 0xf3, + 0x12, 0x9a, 0x55, 0x2e, 0xa1, 0x0d, 0x91, 0xb8, + 0x3a, 0x7c, 0x8c, 0xfd, 0x5d, 0x27, 0xda, 0x6b, + 0xd3, 0x4e, 0x0d, 0xfe, 0x5c, 0xc9, 0xe3, 0x2e, + 0x0b, 0xa8, 0xdc, 0x1a, 0xa2, 0x12, 0x1d, 0x95, + 0x1d, 0x01, 0xd8, 0x20, 0xeb, 0x82, 0x1b, 0xe1, + 0xa8, 0x4d, 0x0d, 0x8a, 0x30, 0x75, 0x06, 0xe5, + 0xc8, 0x01, 0x23, 0xef, 0x88, 0x11, 0x58, 0xd4, + 0x76, 0x9d, 0xc8, 0x51, 0x30, 0x40, 0x31, 0x68, + 0xd2, 0xe9, 0x15, 0xda, 0xce, 0x30, 0x49, 0x84, + 0x2a, 0x02, 0x6a, 0x68, 0x2a, 0xf1, 0x31, 0x6f, + 0x19, 0x49, 0x43, 0x50, 0xf0, 0x48, 0x85, 0x57, + 0x43, 0x4a, 0x07, 0x3a, 0xdf, 0xe2, 0x7f, 0xa9, + 0xff, 0x00, 0xb6, 0x68, 0xc9, 0x0b, 0xbf, 0xed, + 0xdf, 0xfe, 0x14, 0x24, 0x40, 0xd1, 0x3a, 0x61, + 0x98, 0x72, 0xe1, 0xcc, 0x2e, 0xa3, 0x04, 0xa0, + 0x34, 0x3b, 0x9b, 0x37, 0x2f, 0xc9, 0x75, 0x2f, + 0x48, 0x25, 0x34, 0x11, 0x30, 0x58, 0xd5, 0x2b, + 0x4f, 0x4f, 0x9e, 0x83, 0xff, 0x00, 0xcf, 0xe7, + 0xa7, 0x1f, 0x5f, 0xc0, 0x45, 0x54, 0x47, 0x22, + 0x42, 0xb6, 0x25, 0x1f, 0x91, 0xc0, 0xaf, 0x7b, + 0xc4, 0xaa, 0x87, 0x40, 0x4a, 0x8b, 0x75, 0x9d, + 0xc2, 0xf4, 0x1b, 0x26, 0x10, 0x21, 0x04, 0xf4, + 0x1a, 0x79, 0xbb, 0xfe, 0xb4, 0x58, 0x22, 0x0d, + 0x31, 0x9a, 0x4f, 0x84, 0xca, 0x12, 0xd7, 0xd2, + 0x01, 0x20, 0x41, 0x3b, 0xe2, 0x61, 0xac, 0xb6, + 0x4e, 0x46, 0xdd, 0x05, 0x76, 0x7d, 0x35, 0x26, + 0x42, 0xf0, 0x00, 0x9b, 0x4f, 0xa4, 0x9f, 0x1c, + 0x44, 0xf3, 0xff, 0x00, 0x1c, 0x71, 0x44, 0x40, + 0xf1, 0xff, 0x00, 0xe9, 0xc4, 0xa3, 0xa7, 0x12, + 0xff, 0x00, 0x87, 0x1b, 0x7a, 0xee, 0x97, 0xd8, + 0x68, 0xf1, 0xc6, 0x1e, 0x8d, 0x15, 0x5d, 0xb2, + 0x47, 0xd0, 0x21, 0xeb, 0xbe, 0x57, 0x79, 0xfc, + 0x82, 0xf1, 0x3f, 0x8e, 0xb0, 0x79, 0x8e, 0xd8, + 0x6d, 0x81, 0x76, 0x08, 0x7d, 0xc4, 0x52, 0x74, + 0x8a, 0xa5, 0xd1, 0x36, 0x94, 0x66, 0x91, 0x8b, + 0xf3, 0xec, 0xb5, 0x6e, 0x40, 0xa0, 0x28, 0x21, + 0xe0, 0x30, 0x75, 0x2d, 0xa2, 0x29, 0xa6, 0x6e, + 0x1f, 0x0a, 0xf9, 0x43, 0xb8, 0x04, 0x85, 0x8d, + 0x4b, 0x26, 0xcc, 0x13, 0x45, 0xd7, 0xec, 0x15, + 0xa1, 0x57, 0x11, 0x02, 0x09, 0xa5, 0xb2, 0x87, + 0xa3, 0xf7, 0x65, 0x05, 0x50, 0x86, 0xbf, 0x60, + 0x88, 0xfb, 0x13, 0xfb, 0x01, 0x4c, 0x16, 0x15, + 0x9e, 0x18, 0xb2, 0x11, 0x08, 0x8f, 0x02, 0xe6, + 0x90, 0x71, 0x45, 0x2b, 0xb9, 0xda, 0x61, 0x98, + 0x83, 0xb1, 0x12, 0x23, 0x86, 0xd0, 0x36, 0xac, + 0x0f, 0x97, 0x0c, 0x86, 0x00, 0x53, 0xe1, 0x27, + 0x82, 0xa4, 0x40, 0xee, 0x2a, 0xb1, 0x64, 0x1b, + 0xa7, 0x45, 0xd0, 0xa6, 0x0f, 0x78, 0xde, 0xbf, + 0x10, 0x7c, 0x33, 0x22, 0x51, 0x00, 0x66, 0x8c, + 0x49, 0x31, 0x78, 0x3c, 0x90, 0x5d, 0x2d, 0x1d, + 0x21, 0x81, 0x74, 0xab, 0xe8, 0x42, 0x13, 0x21, + 0x1f, 0x69, 0x50, 0xbb, 0xc1, 0x46, 0xf1, 0x38, + 0x32, 0xbf, 0xc1, 0xb7, 0x93, 0x00, 0xda, 0x11, + 0xb8, 0xe3, 0x16, 0xa0, 0x6b, 0x16, 0x54, 0x6b, + 0x54, 0x4a, 0x41, 0xb8, 0xda, 0xf2, 0x7b, 0xc1, + 0x46, 0x5d, 0xc2, 0x56, 0x0f, 0x55, 0x49, 0x78, + 0x72, 0x58, 0x40, 0x43, 0x00, 0x53, 0xdc, 0x01, + 0x57, 0x08, 0xc1, 0x13, 0x3b, 0x5d, 0x1e, 0xd3, + 0xb3, 0xa5, 0xda, 0x98, 0xc9, 0x97, 0x81, 0x3d, + 0xc9, 0x11, 0x05, 0x57, 0xe4, 0x6a, 0x14, 0x41, + 0xa6, 0xc0, 0x68, 0xf0, 0xdc, 0x35, 0xc2, 0x6d, + 0x95, 0x92, 0x8a, 0x94, 0x07, 0xb1, 0x0a, 0xec, + 0x59, 0x29, 0x96, 0xd9, 0x33, 0xda, 0xcf, 0x1d, + 0xe4, 0x0c, 0x0b, 0xa3, 0x40, 0x18, 0x73, 0x39, + 0x0d, 0x4a, 0xa3, 0x7c, 0xe0, 0x25, 0x4d, 0x83, + 0xb6, 0x84, 0x5d, 0xea, 0x22, 0x27, 0x28, 0xa8, + 0x61, 0x35, 0x74, 0xea, 0xda, 0x0d, 0xdc, 0x83, + 0xa7, 0x2a, 0xd0, 0x06, 0x32, 0x74, 0x97, 0x25, + 0xd3, 0x2a, 0x86, 0x28, 0xbb, 0x40, 0xaf, 0x4d, + 0xf0, 0x30, 0x07, 0x02, 0xfa, 0x46, 0x94, 0x0f, + 0x69, 0x6a, 0x95, 0x4b, 0x0c, 0x58, 0x86, 0x45, + 0x5b, 0x2e, 0x12, 0xa2, 0xbb, 0xd3, 0x20, 0xc6, + 0xeb, 0x35, 0xbd, 0xe0, 0xf6, 0xc5, 0x13, 0xe7, + 0x99, 0x7c, 0x44, 0xc7, 0xda, 0x92, 0x7e, 0x5a, + 0x3f, 0x38, 0x56, 0xe5, 0xb5, 0x61, 0x03, 0x9b, + 0x41, 0xa8, 0xb4, 0x5d, 0x18, 0xc8, 0xd6, 0x0b, + 0x8d, 0xcc, 0x1d, 0x94, 0x44, 0x89, 0x83, 0x1a, + 0x48, 0xf4, 0x6c, 0x98, 0xb0, 0x3e, 0x80, 0xde, + 0xe5, 0x18, 0xe9, 0x89, 0x79, 0x81, 0x1d, 0xe1, + 0x82, 0xb6, 0x9c, 0x4e, 0xcc, 0x3e, 0x4b, 0xb9, + 0x53, 0x6b, 0xe4, 0x89, 0x39, 0x67, 0xc6, 0x5f, + 0xf4, 0x98, 0x20, 0x25, 0x83, 0xb3, 0x3f, 0xcd, + 0x86, 0xf6, 0x10, 0x0f, 0x05, 0x62, 0x9e, 0xbb, + 0xeb, 0xb5, 0xf9, 0xd8, 0x9b, 0x04, 0x9a, 0x98, + 0xf4, 0x0b, 0x60, 0x76, 0xf6, 0x09, 0x70, 0x02, + 0x3d, 0x60, 0x37, 0xa0, 0x6a, 0x2a, 0xd7, 0xe0, + 0xe0, 0x63, 0x50, 0xb4, 0x8e, 0x88, 0x87, 0x64, + 0x5b, 0x1d, 0xef, 0x49, 0x8b, 0x6c, 0xf3, 0x24, + 0x66, 0x98, 0x0f, 0x49, 0xd3, 0x89, 0x6e, 0x0f, + 0xf6, 0x63, 0xae, 0x8a, 0xa9, 0xfd, 0x04, 0x02, + 0x20, 0x3c, 0x34, 0x8a, 0x73, 0x36, 0xb2, 0xe7, + 0x68, 0xb4, 0x44, 0x90, 0x2a, 0x2a, 0x68, 0x7f, + 0x29, 0x26, 0xcb, 0x48, 0x82, 0x05, 0x68, 0x88, + 0x5c, 0x01, 0xfd, 0xdc, 0x14, 0x91, 0x42, 0xa2, + 0x94, 0xd9, 0x48, 0x2a, 0x23, 0x16, 0x6d, 0x2e, + 0x0d, 0x76, 0x26, 0xb4, 0xb8, 0x95, 0x00, 0x21, + 0x57, 0x09, 0x14, 0x89, 0x3f, 0x0e, 0x9f, 0xcf, + 0xfa, 0x65, 0xc1, 0xda, 0x3a, 0x9e, 0xea, 0xbf, + 0xa1, 0x7c, 0xc4, 0xa7, 0x60, 0x34, 0x56, 0x5a, + 0x2d, 0x70, 0x1f, 0x9e, 0xe3, 0x08, 0xe2, 0x05, + 0x77, 0x6b, 0xc0, 0xcd, 0x59, 0xbc, 0x79, 0x82, + 0x94, 0x83, 0xd3, 0xfc, 0x29, 0xff, 0x00, 0x06, + 0x14, 0x18, 0x51, 0x9d, 0xfb, 0xb3, 0x80, 0x0d, + 0x62, 0x4c, 0x4b, 0x91, 0x91, 0x81, 0x30, 0xc7, + 0xa3, 0x11, 0xc1, 0x95, 0x52, 0xa6, 0x6e, 0x84, + 0xa9, 0xca, 0x55, 0x12, 0x08, 0xa4, 0x35, 0x46, + 0x8d, 0xa0, 0x0f, 0xfd, 0x52, 0x85, 0x02, 0x40, + 0x18, 0x48, 0x88, 0x23, 0x9e, 0xf1, 0x2a, 0x6f, + 0x7a, 0xa4, 0x02, 0x44, 0xfd, 0x3c, 0x00, 0x38, + 0x8d, 0x14, 0x0b, 0x4f, 0x93, 0x76, 0x61, 0x65, + 0xf1, 0xd6, 0x94, 0xaa, 0x80, 0xde, 0x09, 0xa1, + 0x43, 0x2e, 0x83, 0x9b, 0x20, 0x5f, 0xac, 0xd2, + 0x5e, 0xa7, 0x75, 0xfc, 0x4c, 0x07, 0x5b, 0x23, + 0xc8, 0xe3, 0xfb, 0xc7, 0xb6, 0x32, 0x1c, 0xcf, + 0x95, 0xa3, 0xfb, 0xc0, 0xc6, 0xca, 0x2b, 0xfa, + 0x21, 0xfe, 0x6e, 0x4f, 0xef, 0x3f, 0x49, 0x95, + 0x40, 0xfd, 0x6f, 0xf3, 0x9a, 0xef, 0x1c, 0x78, + 0x69, 0xd0, 0x86, 0xcd, 0xb6, 0x43, 0x7b, 0xc2, + 0x77, 0xdb, 0x25, 0xbe, 0x55, 0xab, 0x7a, 0xf2, + 0x77, 0x98, 0xd0, 0x1a, 0x93, 0x47, 0x85, 0x21, + 0x6b, 0x9a, 0xee, 0xa3, 0x80, 0x95, 0x6f, 0x72, + 0xbf, 0x2a, 0x35, 0xfb, 0xc5, 0x52, 0x54, 0x76, + 0xad, 0x5c, 0x02, 0x81, 0xf8, 0xc5, 0x3f, 0xeb, + 0x6c, 0x30, 0x6e, 0x25, 0xfe, 0xa0, 0x2e, 0xe5, + 0xc1, 0xb4, 0xcb, 0x85, 0x85, 0xd4, 0x5a, 0x10, + 0x28, 0x76, 0x84, 0x44, 0x5b, 0x8a, 0xb4, 0x25, + 0x36, 0xd6, 0x95, 0x1a, 0x81, 0x1a, 0xab, 0x4d, + 0x42, 0x25, 0x41, 0x87, 0x41, 0x00, 0x19, 0x29, + 0xa8, 0x42, 0x1f, 0xf7, 0xb5, 0xae, 0x94, 0x28, + 0x91, 0x58, 0x37, 0xbd, 0x3d, 0x55, 0xea, 0x5d, + 0x53, 0x73, 0x66, 0x74, 0xaa, 0xfc, 0xe6, 0xf9, + 0x15, 0x64, 0xda, 0x09, 0x01, 0x0a, 0xdc, 0x36, + 0xf2, 0x0e, 0x5d, 0x9a, 0xa9, 0xaf, 0x9b, 0x2c, + 0x4f, 0x57, 0xb7, 0x07, 0xaf, 0x29, 0x10, 0xf5, + 0x28, 0xfd, 0x46, 0xbd, 0xb8, 0xaf, 0xe8, 0x00, + 0x79, 0x77, 0x83, 0xef, 0x57, 0x3e, 0x7d, 0xc4, + 0x2d, 0x6c, 0xc5, 0x77, 0x40, 0x4b, 0xba, 0x35, + 0xae, 0xf3, 0x03, 0x9b, 0x49, 0xa8, 0xd8, 0xba, + 0x86, 0xba, 0x01, 0x88, 0x04, 0x2c, 0x55, 0x7d, + 0x54, 0x7f, 0xea, 0x60, 0x93, 0x12, 0xda, 0xed, + 0x5c, 0x30, 0x38, 0x7d, 0x10, 0xc5, 0xc4, 0x4e, + 0x8e, 0xe1, 0x70, 0xae, 0xb8, 0x2a, 0x08, 0xf8, + 0x18, 0x01, 0xc2, 0x62, 0xcc, 0x19, 0x83, 0x7f, + 0xa8, 0xd2, 0x26, 0xa1, 0xca, 0xd6, 0xb2, 0xf9, + 0x31, 0xb4, 0x81, 0x10, 0xc0, 0xda, 0x5d, 0x54, + 0x82, 0xea, 0xaf, 0x33, 0x55, 0x3b, 0x79, 0xd4, + 0x82, 0xab, 0xa5, 0xd2, 0x35, 0xa6, 0x0c, 0x8e, + 0xe1, 0x4a, 0x80, 0x85, 0x56, 0x80, 0xed, 0x6b, + 0xa1, 0x3f, 0x03, 0x22, 0x03, 0x8a, 0x1c, 0x82, + 0xd2, 0x17, 0x41, 0x8f, 0xd1, 0xa5, 0x64, 0x01, + 0x62, 0x05, 0x50, 0xd3, 0x8d, 0x29, 0xbb, 0xd4, + 0xe5, 0x0d, 0x14, 0x16, 0xa3, 0xad, 0x47, 0x78, + 0x1d, 0xf2, 0x80, 0x16, 0x88, 0x14, 0x1a, 0x81, + 0x02, 0x6a, 0x61, 0x77, 0x45, 0x47, 0x43, 0xd5, + 0xb3, 0x7f, 0x13, 0x10, 0x29, 0xb5, 0x85, 0x57, + 0xed, 0xc4, 0x92, 0xdf, 0xdd, 0x73, 0xf3, 0x22, + 0xc0, 0x54, 0x5b, 0xc6, 0xe1, 0xa1, 0x87, 0x82, + 0x7f, 0x40, 0x18, 0x7c, 0xfe, 0x07, 0xcb, 0x00, + 0xff, 0x00, 0x5e, 0xfd, 0xda, 0xc3, 0xcc, 0xe7, + 0x80, 0xab, 0x96, 0xff, 0x00, 0x5b, 0xdf, 0xa5, + 0x3d, 0xc9, 0x56, 0xd2, 0xd0, 0xbb, 0xb8, 0x6d, + 0xf6, 0xe4, 0x8e, 0xb8, 0x26, 0x06, 0x67, 0x7a, + 0x05, 0x56, 0x08, 0xa7, 0xae, 0x82, 0x98, 0x54, + 0xaf, 0x8a, 0xa0, 0x50, 0xd5, 0x54, 0xa3, 0x54, + 0x6f, 0x11, 0xba, 0x0b, 0x72, 0xbb, 0x5a, 0xec, + 0xef, 0x99, 0xf9, 0x75, 0x83, 0x97, 0xc4, 0x74, + 0xf7, 0x09, 0xa4, 0xfc, 0xe3, 0x05, 0xc5, 0x7a, + 0x60, 0x22, 0x04, 0x3e, 0x0f, 0xeb, 0xcc, 0x31, + 0xdc, 0xb3, 0xdc, 0x41, 0xee, 0x4e, 0x35, 0xee, + 0x08, 0x7b, 0x7f, 0x18, 0x17, 0x79, 0xc0, 0x72, + 0xdf, 0xe0, 0x38, 0x14, 0x43, 0x8e, 0x36, 0x59, + 0xd3, 0xcc, 0x6b, 0xd4, 0xa8, 0xa9, 0x08, 0x71, + 0x78, 0x60, 0xae, 0xa8, 0xe0, 0x6d, 0xab, 0xd7, + 0x00, 0x91, 0xef, 0x4d, 0xc3, 0x62, 0x8f, 0x21, + 0xfd, 0xf9, 0x9d, 0x47, 0x04, 0xa5, 0x32, 0xf5, + 0xb8, 0x5f, 0x38, 0x07, 0xb8, 0xb3, 0x13, 0x20, + 0xee, 0x21, 0xbb, 0x81, 0xf7, 0x11, 0xd7, 0x11, + 0x3f, 0x81, 0x8b, 0xec, 0xb9, 0xae, 0x9f, 0xd8, + 0xc1, 0x60, 0x03, 0xeb, 0xff, 0x00, 0x0a, 0x83, + 0x08, 0x31, 0xe6, 0x6e, 0xef, 0x26, 0x5b, 0x92, + 0xf7, 0x29, 0xee, 0x6d, 0x6f, 0x3f, 0xff, 0xd9, + +}; + +static const uint8_t data_favicon_ico[] = +{ + /* /favicon.ico */ + 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, + 0x2e, 0x69, 0x63, 0x6f, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x10, 0x10, + 0x10, 0x00, 0x01, 0x00, 0x04, 0x00, 0x28, 0x01, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x68, 0x05, + 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x79, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x99, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x79, 0x99, 0x99, 0x70, 0x00, 0x00, 0x07, + 0x77, 0x99, 0x97, 0x79, 0x97, 0x00, 0x00, 0x09, + 0x99, 0x99, 0x7f, 0xf7, 0x99, 0x70, 0x00, 0x79, + 0x99, 0x99, 0xf9, 0x97, 0x99, 0x97, 0x07, 0x99, + 0x99, 0x99, 0xf9, 0x9f, 0x99, 0x99, 0x79, 0x99, + 0x99, 0x99, 0xf9, 0x9f, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x97, 0xf9, 0x9f, 0x79, 0x97, 0x00, 0x00, + 0x99, 0x97, 0xf7, 0x9f, 0x79, 0x90, 0x00, 0x00, + 0x99, 0x99, 0x7f, 0xf7, 0x99, 0x70, 0x00, 0x00, + 0x99, 0x99, 0x9f, 0x99, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x99, 0x90, 0x99, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x99, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8f, + 0xfc, 0xfd, 0xff, 0x0f, 0xfc, 0xfd, 0xfe, 0x0f, + 0xfc, 0xfd, 0xfc, 0x07, 0xfc, 0xfd, 0xe0, 0x03, + 0xfc, 0xfd, 0xe0, 0x01, 0xfc, 0xfd, 0xc0, 0x00, + 0xfc, 0xfd, 0x80, 0x00, 0xfc, 0xfd, 0x00, 0x00, + 0xfc, 0xfd, 0x00, 0x00, 0xfc, 0xfd, 0xf0, 0x01, + 0xfc, 0xfd, 0xf0, 0x01, 0xfc, 0xfd, 0xf0, 0x0f, + 0xfc, 0xfd, 0xf0, 0x4f, 0xfc, 0xfd, 0xf0, 0x7f, + 0xfc, 0xfd, 0xf0, 0xff, 0xfc, 0xfd, 0x28, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0xc0, 0xdc, + 0xc0, 0x00, 0xf0, 0xca, 0xa6, 0x00, 0xd4, 0xf0, + 0xff, 0x00, 0xb1, 0xe2, 0xff, 0x00, 0x8e, 0xd4, + 0xff, 0x00, 0x6b, 0xc6, 0xff, 0x00, 0x48, 0xb8, + 0xff, 0x00, 0x25, 0xaa, 0xff, 0x00, 0x00, 0xaa, + 0xff, 0x00, 0x00, 0x92, 0xdc, 0x00, 0x00, 0x7a, + 0xb9, 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0x4a, + 0x73, 0x00, 0x00, 0x32, 0x50, 0x00, 0xd4, 0xe3, + 0xff, 0x00, 0xb1, 0xc7, 0xff, 0x00, 0x8e, 0xab, + 0xff, 0x00, 0x6b, 0x8f, 0xff, 0x00, 0x48, 0x73, + 0xff, 0x00, 0x25, 0x57, 0xff, 0x00, 0x00, 0x55, + 0xff, 0x00, 0x00, 0x49, 0xdc, 0x00, 0x00, 0x3d, + 0xb9, 0x00, 0x00, 0x31, 0x96, 0x00, 0x00, 0x25, + 0x73, 0x00, 0x00, 0x19, 0x50, 0x00, 0xd4, 0xd4, + 0xff, 0x00, 0xb1, 0xb1, 0xff, 0x00, 0x8e, 0x8e, + 0xff, 0x00, 0x6b, 0x6b, 0xff, 0x00, 0x48, 0x48, + 0xff, 0x00, 0x25, 0x25, 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, + 0xb9, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x50, 0x00, 0xe3, 0xd4, + 0xff, 0x00, 0xc7, 0xb1, 0xff, 0x00, 0xab, 0x8e, + 0xff, 0x00, 0x8f, 0x6b, 0xff, 0x00, 0x73, 0x48, + 0xff, 0x00, 0x57, 0x25, 0xff, 0x00, 0x55, 0x00, + 0xff, 0x00, 0x49, 0x00, 0xdc, 0x00, 0x3d, 0x00, + 0xb9, 0x00, 0x31, 0x00, 0x96, 0x00, 0x25, 0x00, + 0x73, 0x00, 0x19, 0x00, 0x50, 0x00, 0xf0, 0xd4, + 0xff, 0x00, 0xe2, 0xb1, 0xff, 0x00, 0xd4, 0x8e, + 0xff, 0x00, 0xc6, 0x6b, 0xff, 0x00, 0xb8, 0x48, + 0xff, 0x00, 0xaa, 0x25, 0xff, 0x00, 0xaa, 0x00, + 0xff, 0x00, 0x92, 0x00, 0xdc, 0x00, 0x7a, 0x00, + 0xb9, 0x00, 0x62, 0x00, 0x96, 0x00, 0x4a, 0x00, + 0x73, 0x00, 0x32, 0x00, 0x50, 0x00, 0xff, 0xd4, + 0xff, 0x00, 0xff, 0xb1, 0xff, 0x00, 0xff, 0x8e, + 0xff, 0x00, 0xff, 0x6b, 0xff, 0x00, 0xff, 0x48, + 0xff, 0x00, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xdc, 0x00, 0xdc, 0x00, 0xb9, 0x00, + 0xb9, 0x00, 0x96, 0x00, 0x96, 0x00, 0x73, 0x00, + 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0xff, 0xd4, + 0xf0, 0x00, 0xff, 0xb1, 0xe2, 0x00, 0xff, 0x8e, + 0xd4, 0x00, 0xff, 0x6b, 0xc6, 0x00, 0xff, 0x48, + 0xb8, 0x00, 0xff, 0x25, 0xaa, 0x00, 0xff, 0x00, + 0xaa, 0x00, 0xdc, 0x00, 0x92, 0x00, 0xb9, 0x00, + 0x7a, 0x00, 0x96, 0x00, 0x62, 0x00, 0x73, 0x00, + 0x4a, 0x00, 0x50, 0x00, 0x32, 0x00, 0xff, 0xd4, + 0xe3, 0x00, 0xff, 0xb1, 0xc7, 0x00, 0xff, 0x8e, + 0xab, 0x00, 0xff, 0x6b, 0x8f, 0x00, 0xff, 0x48, + 0x73, 0x00, 0xff, 0x25, 0x57, 0x00, 0xff, 0x00, + 0x55, 0x00, 0xdc, 0x00, 0x49, 0x00, 0xb9, 0x00, + 0x3d, 0x00, 0x96, 0x00, 0x31, 0x00, 0x73, 0x00, + 0x25, 0x00, 0x50, 0x00, 0x19, 0x00, 0xff, 0xd4, + 0xd4, 0x00, 0xff, 0xb1, 0xb1, 0x00, 0xff, 0x8e, + 0x8e, 0x00, 0xff, 0x6b, 0x6b, 0x00, 0xff, 0x48, + 0x48, 0x00, 0xff, 0x25, 0x25, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xb9, 0x00, + 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xff, 0xe3, + 0xd4, 0x00, 0xff, 0xc7, 0xb1, 0x00, 0xff, 0xab, + 0x8e, 0x00, 0xff, 0x8f, 0x6b, 0x00, 0xff, 0x73, + 0x48, 0x00, 0xff, 0x57, 0x25, 0x00, 0xff, 0x55, + 0x00, 0x00, 0xdc, 0x49, 0x00, 0x00, 0xb9, 0x3d, + 0x00, 0x00, 0x96, 0x31, 0x00, 0x00, 0x73, 0x25, + 0x00, 0x00, 0x50, 0x19, 0x00, 0x00, 0xff, 0xf0, + 0xd4, 0x00, 0xff, 0xe2, 0xb1, 0x00, 0xff, 0xd4, + 0x8e, 0x00, 0xff, 0xc6, 0x6b, 0x00, 0xff, 0xb8, + 0x48, 0x00, 0xff, 0xaa, 0x25, 0x00, 0xff, 0xaa, + 0x00, 0x00, 0xdc, 0x92, 0x00, 0x00, 0xb9, 0x7a, + 0x00, 0x00, 0x96, 0x62, 0x00, 0x00, 0x73, 0x4a, + 0x00, 0x00, 0x50, 0x32, 0x00, 0x00, 0xff, 0xff, + 0xd4, 0x00, 0xff, 0xff, 0xb1, 0x00, 0xff, 0xff, + 0x8e, 0x00, 0xff, 0xff, 0x6b, 0x00, 0xff, 0xff, + 0x48, 0x00, 0xff, 0xff, 0x25, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xdc, 0xdc, 0x00, 0x00, 0xb9, 0xb9, + 0x00, 0x00, 0x96, 0x96, 0x00, 0x00, 0x73, 0x73, + 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, 0xf0, 0xff, + 0xd4, 0x00, 0xe2, 0xff, 0xb1, 0x00, 0xd4, 0xff, + 0x8e, 0x00, 0xc6, 0xff, 0x6b, 0x00, 0xb8, 0xff, + 0x48, 0x00, 0xaa, 0xff, 0x25, 0x00, 0xaa, 0xff, + 0x00, 0x00, 0x92, 0xdc, 0x00, 0x00, 0x7a, 0xb9, + 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0x4a, 0x73, + 0x00, 0x00, 0x32, 0x50, 0x00, 0x00, 0xe3, 0xff, + 0xd4, 0x00, 0xc7, 0xff, 0xb1, 0x00, 0xab, 0xff, + 0x8e, 0x00, 0x8f, 0xff, 0x6b, 0x00, 0x73, 0xff, + 0x48, 0x00, 0x57, 0xff, 0x25, 0x00, 0x55, 0xff, + 0x00, 0x00, 0x49, 0xdc, 0x00, 0x00, 0x3d, 0xb9, + 0x00, 0x00, 0x31, 0x96, 0x00, 0x00, 0x25, 0x73, + 0x00, 0x00, 0x19, 0x50, 0x00, 0x00, 0xd4, 0xff, + 0xd4, 0x00, 0xb1, 0xff, 0xb1, 0x00, 0x8e, 0xff, + 0x8e, 0x00, 0x6b, 0xff, 0x6b, 0x00, 0x48, 0xff, + 0x48, 0x00, 0x25, 0xff, 0x25, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xb9, + 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x73, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0xd4, 0xff, + 0xe3, 0x00, 0xb1, 0xff, 0xc7, 0x00, 0x8e, 0xff, + 0xab, 0x00, 0x6b, 0xff, 0x8f, 0x00, 0x48, 0xff, + 0x73, 0x00, 0x25, 0xff, 0x57, 0x00, 0x00, 0xff, + 0x55, 0x00, 0x00, 0xdc, 0x49, 0x00, 0x00, 0xb9, + 0x3d, 0x00, 0x00, 0x96, 0x31, 0x00, 0x00, 0x73, + 0x25, 0x00, 0x00, 0x50, 0x19, 0x00, 0xd4, 0xff, + 0xf0, 0x00, 0xb1, 0xff, 0xe2, 0x00, 0x8e, 0xff, + 0xd4, 0x00, 0x6b, 0xff, 0xc6, 0x00, 0x48, 0xff, + 0xb8, 0x00, 0x25, 0xff, 0xaa, 0x00, 0x00, 0xff, + 0xaa, 0x00, 0x00, 0xdc, 0x92, 0x00, 0x00, 0xb9, + 0x7a, 0x00, 0x00, 0x96, 0x62, 0x00, 0x00, 0x73, + 0x4a, 0x00, 0x00, 0x50, 0x32, 0x00, 0xd4, 0xff, + 0xff, 0x00, 0xb1, 0xff, 0xff, 0x00, 0x8e, 0xff, + 0xff, 0x00, 0x6b, 0xff, 0xff, 0x00, 0x48, 0xff, + 0xff, 0x00, 0x25, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xdc, 0xdc, 0x00, 0x00, 0xb9, + 0xb9, 0x00, 0x00, 0x96, 0x96, 0x00, 0x00, 0x73, + 0x73, 0x00, 0x00, 0x50, 0x50, 0x00, 0xf2, 0xf2, + 0xf2, 0x00, 0xe6, 0xe6, 0xe6, 0x00, 0xda, 0xda, + 0xda, 0x00, 0xce, 0xce, 0xce, 0x00, 0xc2, 0xc2, + 0xc2, 0x00, 0xb6, 0xb6, 0xb6, 0x00, 0xaa, 0xaa, + 0xaa, 0x00, 0x9e, 0x9e, 0x9e, 0x00, 0x92, 0x92, + 0x92, 0x00, 0x86, 0x86, 0x86, 0x00, 0x7a, 0x7a, + 0x7a, 0x00, 0x6e, 0x6e, 0x6e, 0x00, 0x62, 0x62, + 0x62, 0x00, 0x56, 0x56, 0x56, 0x00, 0x4a, 0x4a, + 0x4a, 0x00, 0x3e, 0x3e, 0x3e, 0x00, 0x32, 0x32, + 0x32, 0x00, 0x26, 0x26, 0x26, 0x00, 0x1a, 0x1a, + 0x1a, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0xf0, 0xfb, + 0xff, 0x00, 0xa4, 0xa0, 0xa0, 0x00, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, + 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x28, + 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x28, 0x28, + 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0x25, 0x25, 0x25, 0x28, 0x28, 0xf6, + 0xf6, 0x23, 0x28, 0x25, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, 0x23, + 0x23, 0xf6, 0x23, 0x28, 0x25, 0x00, 0x00, 0x00, + 0x25, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, 0x28, + 0x28, 0xf6, 0x28, 0x28, 0x28, 0x25, 0x00, 0x25, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, 0x28, + 0x28, 0xf6, 0x28, 0x28, 0x28, 0x28, 0x25, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0xf6, 0xf6, 0x28, + 0x28, 0xf6, 0xf6, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0xf6, 0xf6, 0x28, + 0x28, 0x23, 0xf6, 0x28, 0x28, 0x25, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x23, 0x23, + 0x28, 0x23, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, + 0x23, 0x23, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x23, + 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x25, 0x00, + 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8f, + 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x0f, + 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0xe0, 0x03, + 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, + 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xf0, 0x0f, + 0x00, 0x00, 0xf0, 0x4f, 0x00, 0x00, 0xf0, 0xff, + 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, +}; + +static const uint8_t data_index_htm[] = +{ + /* /index.htm */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x20, 0x20, + 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x3e, 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, 0x44, 0x65, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x4b, 0x69, 0x74, 0x3c, 0x2f, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, + 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, + 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, + 0x73, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, + 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, + 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, + 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x66, 0x61, 0x76, + 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, + 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x6a, 0x61, 0x76, + 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, + 0x6a, 0x73, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, + 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x31, 0x2e, 0x32, 0x22, 0x3e, 0x3c, 0x2f, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x25, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x22, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x74, 0x69, 0x2e, 0x6a, + 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, + 0x22, 0x54, 0x65, 0x78, 0x61, 0x73, 0x20, 0x49, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, + 0x31, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, + 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, + 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x68, 0x32, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x44, 0x4b, 0x2d, 0x54, 0x4d, + 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x76, 0x61, + 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x76, + 0x61, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x74, 0x6d, 0x34, 0x63, + 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, + 0x74, 0x3d, 0x22, 0x54, 0x4d, 0x34, 0x43, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, + 0x72, 0x3e, 0x3c, 0x68, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, + 0x65, 0x6e, 0x75, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x75, 0x6c, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x54, 0x49, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x6f, 0x76, 0x65, 0x72, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x22, 0x3e, 0x54, + 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x20, 0x4f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, + 0x3e, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, + 0x58, 0x4e, 0x43, 0x5a, 0x41, 0x44, 0x20, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, + 0x67, 0x72, 0x61, 0x6d, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x74, 0x6f, 0x6f, 0x6c, 0x2f, 0x64, 0x6b, 0x2d, + 0x74, 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, 0x78, + 0x22, 0x3e, 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x50, 0x61, + 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x3e, + 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x22, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x2d, 0x63, 0x22, 0x3e, 0x54, 0x69, + 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x3b, 0x20, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, + 0x39, 0x58, 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x20, 0x50, 0x61, 0x67, 0x65, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x64, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x73, 0x64, 0x22, 0x3e, 0x53, 0x44, + 0x20, 0x43, 0x61, 0x72, 0x64, 0x20, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x75, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x64, 0x6b, 0x2d, 0x74, + 0x6d, 0x34, 0x63, 0x31, 0x32, 0x39, 0x78, 0x2e, + 0x6a, 0x70, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, + 0x3d, 0x22, 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, + 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x68, 0x72, 0x3e, 0x3c, 0x68, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x20, 0x26, 0x63, 0x6f, 0x70, 0x79, + 0x3b, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x32, + 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, 0x61, + 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, 0x6e, + 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, + 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_javascript_js[] = +{ + /* /javascript.js */ + 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x2e, 0x6a, 0x73, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6f, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, + 0x28, 0x27, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x27, + 0x29, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x62, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x27, 0x6f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x27, 0x29, 0x2e, 0x6f, + 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x3d, + 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x76, 0x65, + 0x72, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x27, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x27, 0x29, 0x2e, 0x6f, 0x6e, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, + 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, + 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x61, 0x67, 0x65, 0x28, 0x22, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x2e, 0x68, 0x74, + 0x6d, 0x22, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x62, 0x6f, + 0x75, 0x74, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x61, 0x67, 0x65, 0x28, 0x22, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x29, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x76, 0x65, 0x72, + 0x76, 0x69, 0x65, 0x77, 0x28, 0x29, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x61, 0x67, 0x65, 0x28, 0x22, 0x6f, + 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x68, 0x74, 0x6d, 0x22, 0x29, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, + 0x0a, 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x29, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x61, 0x67, 0x65, 0x28, + 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, + 0x74, 0x6d, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, + 0x7d, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x61, 0x64, + 0x50, 0x61, 0x67, 0x65, 0x28, 0x70, 0x61, 0x67, + 0x65, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x2e, 0x58, 0x4d, 0x4c, 0x48, 0x74, + 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, + 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x58, + 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x29, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x68, 0x74, 0x74, 0x70, 0x20, 0x3d, 0x20, + 0x6e, 0x65, 0x77, 0x20, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x58, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x28, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, + 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x58, 0x4d, 0x4c, + 0x48, 0x54, 0x54, 0x50, 0x22, 0x29, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x68, 0x74, + 0x74, 0x70, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, + 0x22, 0x47, 0x45, 0x54, 0x22, 0x2c, 0x20, 0x70, + 0x61, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x2e, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x28, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x77, 0x77, 0x77, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x75, 0x72, + 0x6c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x2e, + 0x73, 0x65, 0x6e, 0x64, 0x28, 0x29, 0x3b, 0x0a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x6f, 0x6e, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, + 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x28, + 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, 0x70, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, + 0x20, 0x26, 0x26, 0x20, 0x28, 0x78, 0x6d, 0x6c, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x32, + 0x30, 0x30, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, + 0x49, 0x64, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x22, 0x29, 0x2e, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x3d, 0x20, 0x78, 0x6d, 0x6c, 0x68, 0x74, 0x74, + 0x70, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x7d, 0x0a, +}; + +static const uint8_t data_overview_htm[] = +{ + /* /overview.htm */ + 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x44, 0x4b, 0x2d, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x3c, + 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, + 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, + 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, + 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, + 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x66, + 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, + 0x63, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x3c, 0x2f, + 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x70, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x54, 0x69, 0x76, + 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x20, 0x4c, 0x69, 0x6e, 0x65, 0x3c, 0x2f, + 0x70, 0x3e, 0x0a, 0x3c, 0x68, 0x72, 0x3e, 0x0a, + 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x41, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, + 0x74, 0x20, 0x41, 0x52, 0x4d, 0x26, 0x72, 0x65, + 0x67, 0x3b, 0x20, 0x43, 0x6f, 0x72, 0x74, 0x65, + 0x78, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x2d, 0x4d, 0x34, 0x20, 0x6d, 0x69, 0x63, 0x72, + 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x6c, 0x65, 0x72, 0x73, 0x20, 0x28, 0x4d, 0x43, + 0x55, 0x73, 0x29, 0x20, 0x74, 0x6f, 0x20, 0x62, + 0x65, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, + 0x20, 0x54, 0x49, 0x27, 0x73, 0x20, 0x70, 0x72, + 0x6f, 0x70, 0x72, 0x69, 0x65, 0x74, 0x61, 0x72, + 0x79, 0x20, 0x36, 0x35, 0x2d, 0x6e, 0x6d, 0x20, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, + 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, 0x20, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x0a, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x73, + 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x20, + 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, + 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69, + 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x6f, + 0x75, 0x74, 0x20, 0x73, 0x61, 0x63, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x2c, 0x20, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, + 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x6f, + 0x77, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x20, 0x43, + 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x0a, + 0x4d, 0x43, 0x55, 0x20, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, + 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, + 0x63, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x68, 0x69, 0x67, 0x68, 0x2d, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, + 0x65, 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, + 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x73, + 0x74, 0x69, 0x6c, 0x6c, 0x0a, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6c, + 0x6f, 0x77, 0x2d, 0x70, 0x6f, 0x77, 0x65, 0x72, + 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x74, + 0x6f, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x20, + 0x61, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, + 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x20, 0x54, 0x6f, 0x64, 0x61, 0x79, + 0x27, 0x73, 0x0a, 0x65, 0x6e, 0x67, 0x69, 0x6e, + 0x65, 0x65, 0x72, 0x73, 0x20, 0x75, 0x6e, 0x64, + 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, + 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x65, 0x73, + 0x69, 0x67, 0x6e, 0x73, 0x20, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x68, + 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x20, + 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x2e, 0x20, 0x4f, + 0x66, 0x74, 0x65, 0x6e, 0x2c, 0x20, 0x74, 0x68, + 0x65, 0x0a, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, + 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x3c, 0x61, 0x20, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, + 0x5f, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x76, 0x61, 0x77, + 0x61, 0x72, 0x65, 0x22, 0x3e, 0x54, 0x69, 0x76, + 0x61, 0x57, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, + 0x73, 0x20, 0x61, 0x0a, 0x66, 0x72, 0x65, 0x65, + 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x20, 0x6f, 0x66, 0x20, 0x43, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, + 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x70, 0x65, + 0x72, 0x69, 0x70, 0x68, 0x65, 0x72, 0x61, 0x6c, + 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x61, + 0x6e, 0x64, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x20, 0x63, 0x6f, 0x64, + 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x52, 0x4f, 0x4d, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, 0x20, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x4d, + 0x43, 0x55, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, + 0x0a, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, + 0x67, 0x20, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x20, 0x55, 0x53, 0x42, 0x2c, 0x20, + 0x43, 0x41, 0x4e, 0x2c, 0x20, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x20, + 0x73, 0x6f, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x65, 0x72, 0x73, 0x20, 0x63, 0x61, 0x6e, + 0x20, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x69, 0x72, 0x20, 0x65, 0x66, 0x66, + 0x6f, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x20, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, + 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, + 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, + 0x69, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x20, + 0x70, 0x65, 0x72, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x61, 0x6c, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, 0x20, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, + 0x61, 0x6e, 0x0a, 0x65, 0x78, 0x63, 0x65, 0x6c, + 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x61, 0x73, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x68, 0x6f, 0x6d, 0x65, 0x2c, 0x20, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, + 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, + 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, + 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_styles_css[] = +{ + /* /styles.css */ + 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, + 0x63, 0x73, 0x73, 0x00, + 0x2f, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, + 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x32, 0x30, + 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, 0x61, 0x73, + 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, 0x6e, 0x63, + 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, + 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, + 0x53, 0x74, 0x79, 0x6c, 0x69, 0x6e, 0x67, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x20, 0x2a, 0x2f, 0x0a, 0x62, 0x6f, 0x64, 0x79, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, + 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, 0x65, 0x6c, + 0x2c, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, + 0x63, 0x61, 0x2c, 0x73, 0x61, 0x6e, 0x73, 0x2d, + 0x73, 0x65, 0x72, 0x69, 0x66, 0x3b, 0x0a, 0x7d, + 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x79, + 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x76, + 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, + 0x72, 0x3a, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, + 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, + 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x31, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, + 0x3a, 0x20, 0x32, 0x65, 0x6d, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, + 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x23, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x68, 0x32, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x2e, + 0x32, 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, + 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x23, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x68, 0x72, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, + 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, + 0x69, 0x64, 0x20, 0x23, 0x66, 0x66, 0x30, 0x30, + 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x74, + 0x6f, 0x70, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, + 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x20, 0x23, 0x66, + 0x66, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, 0x7d, + 0x0a, 0x0a, 0x23, 0x68, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x20, 0x61, 0x20, 0x69, 0x6d, 0x67, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x30, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, + 0x53, 0x74, 0x79, 0x6c, 0x69, 0x6e, 0x67, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x64, 0x69, 0x76, + 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x6d, 0x65, + 0x6e, 0x75, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, + 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, + 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, + 0x20, 0x31, 0x30, 0x70, 0x78, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3a, 0x20, 0x32, 0x32, 0x35, 0x70, 0x78, 0x3b, + 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x6d, 0x65, 0x6e, + 0x75, 0x20, 0x75, 0x6c, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x2d, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2d, 0x74, 0x79, + 0x70, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x30, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x3b, + 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x6d, 0x65, 0x6e, + 0x75, 0x20, 0x61, 0x3a, 0x6c, 0x69, 0x6e, 0x6b, + 0x2c, 0x20, 0x23, 0x6d, 0x65, 0x6e, 0x75, 0x20, + 0x61, 0x3a, 0x76, 0x69, 0x73, 0x69, 0x74, 0x65, + 0x64, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x3a, 0x20, 0x23, 0x66, 0x66, 0x30, 0x30, 0x30, + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, 0x64, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, + 0x74, 0x6f, 0x6d, 0x3a, 0x20, 0x32, 0x70, 0x78, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, + 0x3a, 0x20, 0x32, 0x70, 0x78, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, + 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x70, 0x78, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, + 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, 0x6f, + 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x32, + 0x30, 0x30, 0x70, 0x78, 0x3b, 0x0a, 0x7d, 0x0a, + 0x0a, 0x23, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x61, + 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x20, + 0x23, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x61, 0x3a, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x62, 0x66, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, + 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x74, + 0x79, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x69, + 0x76, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, + 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, + 0x6f, 0x6d, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, + 0x74, 0x3a, 0x20, 0x32, 0x32, 0x35, 0x70, 0x78, + 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, + 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, + 0x2e, 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, + 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x2f, 0x2a, 0x20, 0x53, 0x74, 0x79, 0x6c, 0x69, + 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6f, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x64, 0x69, 0x76, 0x2e, 0x20, + 0x2a, 0x2f, 0x0a, 0x23, 0x66, 0x6f, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x0a, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, + 0x20, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x2e, 0x37, + 0x35, 0x65, 0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x69, 0x74, 0x61, + 0x6c, 0x69, 0x63, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, + 0x66, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x68, 0x72, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, + 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x20, + 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, + 0x64, 0x20, 0x23, 0x66, 0x66, 0x30, 0x30, 0x30, + 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x74, 0x6f, + 0x70, 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, + 0x6f, 0x6c, 0x69, 0x64, 0x20, 0x23, 0x66, 0x66, + 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, + +}; + +static const uint8_t data_ti_jpg[] = +{ + /* /ti.jpg */ + 0x2f, 0x74, 0x69, 0x2e, 0x6a, 0x70, 0x67, 0x00, + + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x04, 0x05, 0x0a, 0x07, + 0x07, 0x06, 0x08, 0x0c, 0x0a, 0x0c, 0x0c, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0d, 0x0e, 0x12, 0x10, 0x0d, + 0x0e, 0x11, 0x0e, 0x0b, 0x0b, 0x10, 0x16, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0x0c, 0x0f, + 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, + 0x14, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x03, 0x04, + 0x04, 0x05, 0x04, 0x05, 0x09, 0x05, 0x05, 0x09, + 0x14, 0x0d, 0x0b, 0x0d, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc2, + 0x00, 0x11, 0x08, 0x00, 0x4b, 0x01, 0x16, 0x03, + 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x01, 0x00, + 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x07, 0x05, 0x08, 0x01, 0x02, 0x04, 0x03, 0xff, + 0xc4, 0x00, 0x1c, 0x01, 0x01, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, + 0x03, 0x04, 0x06, 0x07, 0x08, 0xff, 0xda, 0x00, + 0x0c, 0x03, 0x01, 0x00, 0x02, 0x10, 0x03, 0x10, + 0x00, 0x00, 0x01, 0xda, 0x90, 0x62, 0xec, 0xda, + 0x80, 0xea, 0x74, 0xb2, 0xbc, 0xf0, 0x92, 0x4c, + 0xf1, 0x5c, 0xab, 0xd8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, + 0xd6, 0xe8, 0x35, 0x63, 0x9d, 0xf6, 0x9b, 0xc2, + 0x67, 0xcd, 0x7d, 0x2d, 0x6b, 0x47, 0x7f, 0x91, + 0xf5, 0xd7, 0x0f, 0xda, 0xeb, 0x7e, 0x27, 0x53, + 0xb1, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x02, 0x90, 0xbd, 0x79, 0xfd, + 0x59, 0xe7, 0x3d, 0xb2, 0x67, 0xb9, 0xcd, 0xe4, + 0x32, 0xe9, 0xe1, 0xb0, 0xc8, 0xc9, 0x33, 0x45, + 0x6c, 0x64, 0xcf, 0x94, 0x54, 0x35, 0xae, 0xbc, + 0x96, 0x91, 0x35, 0x33, 0x86, 0x4c, 0xf2, 0x19, + 0x23, 0xd8, 0x60, 0x8f, 0x11, 0x63, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x16, 0xcd, 0xca, 0x32, + 0x23, 0xd2, 0x31, 0x96, 0x6e, 0xc1, 0x74, 0xba, + 0xad, 0x86, 0x9a, 0xf2, 0x3a, 0xff, 0x00, 0x53, + 0xa9, 0xf9, 0xd3, 0x2c, 0x6b, 0x5e, 0x5f, 0x6d, + 0x7a, 0x3f, 0x0d, 0xf4, 0x56, 0xdd, 0x47, 0x26, + 0x27, 0xb0, 0xb3, 0x8d, 0x50, 0x36, 0xa4, 0xad, + 0x48, 0xd9, 0x8f, 0x24, 0xe6, 0xc5, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x55, 0xb4, 0x74, 0x5f, + 0xa3, 0x53, 0x11, 0x5e, 0x8d, 0xc5, 0x69, 0x62, + 0xee, 0xf1, 0xbc, 0xd6, 0xea, 0xef, 0x43, 0xb0, + 0xeb, 0x75, 0x37, 0x2f, 0xa5, 0xf9, 0xf7, 0xdf, + 0x76, 0x0d, 0x36, 0x56, 0x74, 0x65, 0x8f, 0x69, + 0x16, 0x31, 0x06, 0x64, 0xaf, 0xcb, 0x80, 0xad, + 0x0d, 0xb8, 0x3e, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xe1, 0xb3, 0x2d, 0x3f, 0x1d, 0xdd, 0xfa, + 0xee, 0xc3, 0xf0, 0x64, 0x9d, 0xed, 0x73, 0x34, + 0x44, 0x57, 0xa6, 0x5d, 0xb2, 0x7e, 0x77, 0x37, + 0xda, 0xe7, 0xc6, 0xbe, 0x97, 0xf1, 0xc8, 0x39, + 0x38, 0x3b, 0x1c, 0x00, 0x77, 0x39, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc2, 0x9d, 0x29, 0x76, + 0xa6, 0x73, 0xde, 0xe1, 0x80, 0xc5, 0x2d, 0xb8, + 0x7d, 0x1f, 0x81, 0x64, 0xb2, 0x6a, 0xf2, 0x0d, + 0x47, 0x33, 0x25, 0x90, 0x57, 0x06, 0x54, 0x90, + 0x95, 0x69, 0x6c, 0x15, 0x31, 0x99, 0x3b, 0x1b, + 0x18, 0x51, 0x24, 0x54, 0xb4, 0x48, 0xe9, 0x0d, + 0x2e, 0x12, 0x86, 0x2e, 0xf3, 0x18, 0x56, 0xa4, + 0xf8, 0xe0, 0xb4, 0x89, 0x70, 0x01, 0x48, 0xde, + 0x09, 0x5a, 0x72, 0x37, 0xbc, 0xd8, 0x29, 0x8f, + 0x31, 0xfa, 0xd6, 0xd0, 0x35, 0x1c, 0xb3, 0xca, + 0xf8, 0xc9, 0x1f, 0x33, 0x2e, 0x47, 0x8d, 0x99, + 0x34, 0xd0, 0xce, 0x19, 0x53, 0x66, 0xca, 0x04, + 0x81, 0x12, 0xa3, 0x2c, 0x57, 0x26, 0xc4, 0x90, + 0xc2, 0x8d, 0x37, 0x00, 0xd7, 0xd3, 0x60, 0x0a, + 0x2c, 0x93, 0x97, 0xc0, 0x00, 0x00, 0x01, 0xc1, + 0x48, 0x92, 0x12, 0xc9, 0x2b, 0x53, 0x08, 0x4d, + 0xc8, 0x71, 0x66, 0x15, 0xf1, 0xd4, 0xfa, 0x98, + 0xa2, 0x6e, 0x7c, 0x4e, 0x86, 0x18, 0x8d, 0x12, + 0x33, 0xde, 0x4a, 0x8f, 0xb9, 0x58, 0x96, 0x01, + 0x5d, 0x13, 0xf2, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xff, 0xc4, 0x00, 0x2b, 0x10, 0x00, 0x01, + 0x04, 0x02, 0x01, 0x01, 0x06, 0x06, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, + 0x03, 0x04, 0x06, 0x01, 0x07, 0x00, 0x13, 0x10, + 0x11, 0x12, 0x36, 0x37, 0x40, 0x14, 0x15, 0x17, + 0x30, 0x31, 0x34, 0x16, 0x20, 0x50, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x05, 0x02, + 0xec, 0x26, 0x41, 0xb1, 0x70, 0xfe, 0xa1, 0x8d, + 0xe0, 0x53, 0xf1, 0xce, 0xa7, 0xbf, 0x98, 0xf7, + 0xf7, 0x1f, 0x2e, 0xf3, 0x5c, 0xaf, 0x09, 0x6a, + 0xd4, 0x24, 0x89, 0x32, 0x51, 0xfc, 0x11, 0x98, + 0x4b, 0x89, 0x56, 0x78, 0xa7, 0x50, 0x9c, 0xfc, + 0x43, 0x7c, 0x4b, 0xa8, 0x56, 0x7d, 0xcd, 0xc7, + 0xcb, 0xbc, 0xad, 0x8a, 0x91, 0x24, 0x9b, 0x39, + 0xc9, 0x7b, 0x9d, 0x85, 0x12, 0x72, 0x4e, 0x81, + 0x9c, 0xe4, 0xe7, 0x24, 0xeb, 0x68, 0x25, 0x48, + 0x2e, 0xb1, 0x0f, 0x1b, 0x28, 0xc0, 0x10, 0x34, + 0x59, 0xf8, 0xda, 0x21, 0x7c, 0x0f, 0x5e, 0x46, + 0xb0, 0x22, 0xbf, 0x68, 0x85, 0x66, 0x68, 0x75, + 0xc2, 0x19, 0x42, 0x47, 0xec, 0x90, 0x6b, 0x31, + 0x03, 0x19, 0x8a, 0x78, 0x79, 0xdb, 0x98, 0xca, + 0xf3, 0xc2, 0xaf, 0xe2, 0x0b, 0xcb, 0xfb, 0xe5, + 0x9e, 0x90, 0xc0, 0xef, 0xa8, 0x24, 0xb8, 0x46, + 0xe3, 0x38, 0x9c, 0x3e, 0x00, 0x3b, 0x13, 0x00, + 0x69, 0x7e, 0x06, 0xa7, 0xdb, 0xcf, 0x32, 0x69, + 0xc0, 0x85, 0x54, 0x1c, 0x8b, 0x2e, 0x75, 0x9a, + 0xe3, 0xbe, 0xb6, 0x6e, 0xaf, 0x2f, 0x0c, 0xbd, + 0xb4, 0x3a, 0xbb, 0x00, 0x74, 0x29, 0xa1, 0x55, + 0x3a, 0x7e, 0xb1, 0x39, 0x55, 0x04, 0xc8, 0x11, + 0x25, 0xa1, 0x26, 0xef, 0x72, 0xd4, 0x64, 0x57, + 0x02, 0x69, 0xf7, 0xc9, 0x52, 0x6f, 0x10, 0xb6, + 0x1d, 0x7a, 0xcd, 0x37, 0xd8, 0x5d, 0xeb, 0x8d, + 0xb0, 0xdf, 0x60, 0xc4, 0x2a, 0x3d, 0x4e, 0x0c, + 0x57, 0x63, 0xd5, 0x33, 0x8c, 0xa7, 0x3c, 0x83, + 0xfa, 0x7c, 0x70, 0x8c, 0x7c, 0xed, 0xad, 0xcd, + 0x21, 0xb7, 0x84, 0x86, 0xd8, 0x81, 0xe2, 0x03, + 0xfa, 0x88, 0xc3, 0x22, 0x23, 0x55, 0x22, 0x9d, + 0xa5, 0x50, 0xef, 0xd9, 0x1a, 0x16, 0x9b, 0x51, + 0x8c, 0x78, 0x49, 0xc8, 0x88, 0xa3, 0xde, 0xdb, + 0xd8, 0xa8, 0x83, 0x3a, 0xda, 0xec, 0x1b, 0xcc, + 0xf6, 0x51, 0xd3, 0x67, 0xef, 0xcc, 0x8a, 0x89, + 0xb1, 0xa1, 0xeb, 0xdc, 0xa2, 0x75, 0xb2, 0xab, + 0x19, 0x03, 0xea, 0x56, 0x31, 0xf0, 0x85, 0x2a, + 0xce, 0x2b, 0x09, 0x18, 0x0e, 0x55, 0x96, 0x68, + 0xda, 0x80, 0xe1, 0xfc, 0xc6, 0x31, 0x8c, 0x67, + 0xf0, 0xab, 0xc1, 0x24, 0x5a, 0x7c, 0x18, 0xce, + 0x3a, 0x68, 0xe7, 0x4d, 0x1c, 0xf0, 0x27, 0xbb, + 0xa6, 0x8e, 0x61, 0x29, 0x4f, 0x3c, 0x09, 0xcf, + 0x3c, 0x09, 0xee, 0x4a, 0x12, 0x8f, 0x66, 0xa4, + 0x61, 0x69, 0xb0, 0x0a, 0x50, 0x82, 0x6d, 0x23, + 0xaa, 0xe0, 0xe8, 0x4d, 0x8e, 0x87, 0xda, 0xef, + 0xad, 0x9b, 0x26, 0x61, 0x81, 0xa7, 0xe9, 0x96, + 0xe6, 0x6e, 0x22, 0x85, 0xd8, 0xa7, 0x09, 0xaa, + 0xd7, 0x82, 0x4f, 0xb0, 0x0d, 0xc0, 0xab, 0x2c, + 0x98, 0x07, 0x7e, 0x70, 0x26, 0xe0, 0xd0, 0x02, + 0xc2, 0xe4, 0xd0, 0xbe, 0x73, 0x70, 0xe3, 0x67, + 0xcc, 0xd5, 0x2e, 0xe5, 0xe5, 0xce, 0x6f, 0x66, + 0x11, 0x63, 0xac, 0x3e, 0xb4, 0xf4, 0xc2, 0x1a, + 0xf7, 0x5f, 0xdb, 0x49, 0xb3, 0x61, 0xd9, 0x07, + 0x25, 0x0e, 0x1d, 0xac, 0xdf, 0x96, 0x78, 0x0d, + 0x1f, 0x06, 0x2d, 0x92, 0x06, 0x82, 0x28, 0x28, + 0xc4, 0xcb, 0x49, 0xba, 0xd5, 0x96, 0xc8, 0x6d, + 0x05, 0x68, 0xf0, 0xc4, 0x17, 0x37, 0x0c, 0x5e, + 0x4c, 0x4f, 0xbb, 0x16, 0x9c, 0x62, 0x8a, 0x04, + 0x25, 0x7e, 0x79, 0x68, 0x15, 0x76, 0xc8, 0xb0, + 0x2f, 0xfa, 0x1a, 0x06, 0xc1, 0xb8, 0xd9, 0xa0, + 0x91, 0x65, 0xf6, 0xf1, 0x9c, 0x27, 0xb5, 0xdf, + 0x5b, 0x0e, 0xfa, 0x95, 0x75, 0xab, 0xc9, 0xaa, + 0x93, 0xa1, 0x3f, 0x06, 0x7d, 0x4a, 0x66, 0x9a, + 0xe9, 0x2f, 0x58, 0x1c, 0x24, 0xfc, 0xcb, 0x9f, + 0xaa, 0xd3, 0x3f, 0x53, 0x59, 0x0d, 0x27, 0x3d, + 0x14, 0x95, 0xc7, 0x6e, 0xee, 0x73, 0x3d, 0x3d, + 0xc7, 0x31, 0x58, 0x4c, 0x4a, 0x6f, 0xa5, 0x76, + 0x50, 0xeb, 0xc5, 0x24, 0x7b, 0xae, 0xda, 0x60, + 0x69, 0xcf, 0x2b, 0xeb, 0x80, 0x1f, 0x3c, 0x96, + 0x0a, 0xbd, 0x8a, 0xcc, 0x9a, 0xd4, 0x06, 0x09, + 0x9c, 0xb1, 0x8e, 0x23, 0x40, 0x55, 0x5b, 0xcb, + 0x35, 0xbf, 0x58, 0x2c, 0x4d, 0x8e, 0x95, 0x0a, + 0x5e, 0x9c, 0x72, 0x2a, 0xf5, 0x49, 0xf9, 0xc5, + 0x62, 0xfd, 0x9c, 0xfe, 0x33, 0xae, 0x1f, 0x51, + 0xd2, 0x35, 0x19, 0x53, 0xcf, 0xb8, 0xda, 0x5d, + 0x42, 0x68, 0x30, 0x9b, 0x07, 0x9a, 0x01, 0x06, + 0x31, 0x59, 0xaa, 0x43, 0xab, 0x45, 0x2b, 0xaf, + 0xde, 0x2c, 0x7a, 0x64, 0x59, 0x32, 0x06, 0xd4, + 0x68, 0x79, 0xa8, 0xc9, 0xb5, 0x6b, 0xc8, 0xf6, + 0x39, 0xa5, 0x68, 0x4d, 0x9e, 0x85, 0x9a, 0x01, + 0x29, 0x28, 0x95, 0x5a, 0x4f, 0xf1, 0xe1, 0xd5, + 0x8f, 0x86, 0xae, 0xaa, 0xab, 0xd3, 0xab, 0xd7, + 0x29, 0x2f, 0xd6, 0x20, 0x8f, 0xd5, 0xae, 0x8a, + 0x5c, 0x2a, 0x33, 0xed, 0x11, 0x01, 0x52, 0x90, + 0x0c, 0xa9, 0xc0, 0x91, 0xac, 0x03, 0x87, 0x40, + 0x50, 0xe1, 0x30, 0x35, 0xeb, 0xd0, 0x0f, 0xd8, + 0x81, 0x35, 0x63, 0x16, 0xba, 0x01, 0x2c, 0x26, + 0xb7, 0x59, 0x87, 0x57, 0x83, 0xfe, 0x1f, 0xff, + 0xc4, 0x00, 0x33, 0x11, 0x00, 0x01, 0x03, 0x03, + 0x02, 0x04, 0x03, 0x03, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, + 0x00, 0x05, 0x11, 0x12, 0x31, 0x06, 0x21, 0x40, + 0x41, 0x13, 0x14, 0x61, 0x50, 0x52, 0x71, 0x10, + 0x16, 0x22, 0x25, 0x32, 0x33, 0x35, 0x42, 0x51, + 0x60, 0x91, 0xb1, 0xe1, 0xff, 0xda, 0x00, 0x08, + 0x01, 0x03, 0x01, 0x01, 0x3f, 0x01, 0xf9, 0x22, + 0xc6, 0x5c, 0xc7, 0x43, 0x2d, 0xee, 0x6b, 0xe6, + 0xb5, 0xc0, 0x8c, 0x8d, 0x3f, 0xcf, 0xf9, 0x57, + 0x0b, 0x63, 0xd6, 0xd5, 0x25, 0x0f, 0x63, 0x9f, + 0xe9, 0x5b, 0xf6, 0xf6, 0x05, 0x87, 0xf1, 0x16, + 0xeb, 0xf2, 0xd7, 0x16, 0x65, 0x4e, 0xb6, 0xac, + 0x76, 0xab, 0x34, 0xc8, 0x71, 0x23, 0xa8, 0x3c, + 0x32, 0xa3, 0xe9, 0x4e, 0x6a, 0x75, 0xc2, 0xb4, + 0x8e, 0x46, 0x8a, 0x14, 0x9e, 0x6a, 0x1d, 0x75, + 0x84, 0xfd, 0x60, 0xdd, 0x76, 0xab, 0xc4, 0xe6, + 0x1b, 0x8c, 0xea, 0x0a, 0xc6, 0xac, 0x6d, 0x4b, + 0x4f, 0x91, 0xb3, 0x60, 0xfb, 0xbf, 0xdd, 0x59, + 0xd5, 0x1c, 0xc6, 0x43, 0x4d, 0xab, 0x24, 0x6f, + 0x5c, 0x4e, 0x94, 0xa6, 0x17, 0x2f, 0x7b, 0xac, + 0x86, 0x86, 0x9d, 0x7d, 0x08, 0x78, 0xe0, 0x1a, + 0x1c, 0x2d, 0x08, 0x8c, 0x85, 0x9c, 0x54, 0x4e, + 0x1e, 0x8f, 0x11, 0xe4, 0xbc, 0xda, 0x8e, 0x45, + 0x27, 0xb0, 0xab, 0x95, 0xbd, 0xff, 0x00, 0x3c, + 0x16, 0xe6, 0xcb, 0x55, 0x71, 0x06, 0xb5, 0xc7, + 0x6e, 0x22, 0x3e, 0xd2, 0x8e, 0x2a, 0xc3, 0x6b, + 0x76, 0xdc, 0x95, 0x99, 0x1b, 0x9a, 0xba, 0x43, + 0x4c, 0xd8, 0xab, 0x6e, 0x94, 0x9f, 0x0d, 0x65, + 0x1d, 0x5f, 0x3e, 0xd5, 0xc3, 0xb7, 0x65, 0xa9, + 0x5e, 0x55, 0xf3, 0xf0, 0xaf, 0x4a, 0x07, 0x35, + 0x39, 0x68, 0x72, 0xea, 0xca, 0x16, 0x79, 0x24, + 0x13, 0x52, 0x9e, 0x66, 0x45, 0xd5, 0x94, 0xea, + 0xfa, 0x29, 0x19, 0xa4, 0xa8, 0x29, 0x20, 0x8a, + 0x73, 0x48, 0x07, 0x34, 0xff, 0x00, 0xdf, 0x2b, + 0xe3, 0xd6, 0x32, 0xea, 0xa3, 0xb8, 0x97, 0x51, + 0xb8, 0xa7, 0xf8, 0xa0, 0xa9, 0x8d, 0x0d, 0x27, + 0x0b, 0x3d, 0xea, 0xcb, 0x7c, 0x79, 0x52, 0x43, + 0x52, 0x55, 0x90, 0x6a, 0xfd, 0x6a, 0x98, 0xec, + 0xb2, 0xeb, 0x69, 0xc8, 0x22, 0x85, 0xa6, 0x69, + 0x23, 0x2d, 0x9a, 0x97, 0x72, 0x66, 0xcc, 0xc2, + 0x59, 0x3c, 0xd5, 0x8d, 0xaa, 0x55, 0xfa, 0x64, + 0xb2, 0x46, 0xad, 0x23, 0xd3, 0xaf, 0x07, 0x49, + 0x04, 0x76, 0xab, 0x4c, 0xd1, 0x3e, 0x28, 0x20, + 0xf3, 0x1b, 0xd3, 0xae, 0x16, 0xdb, 0x2b, 0xa9, + 0x32, 0x17, 0x29, 0xe5, 0x3a, 0xbe, 0xfe, 0xc1, + 0xb7, 0xdc, 0x1d, 0xb7, 0xb9, 0xe2, 0x37, 0x47, + 0x89, 0xa2, 0x3a, 0xde, 0x95, 0xa4, 0xd2, 0xb0, + 0x49, 0x23, 0x6f, 0xdc, 0x7f, 0xff, 0xc4, 0x00, + 0x27, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x11, 0x04, + 0x12, 0x10, 0x21, 0x31, 0x40, 0x13, 0x14, 0x22, + 0x32, 0x41, 0x50, 0x61, 0x42, 0x60, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, 0x3f, 0x01, + 0xe0, 0xcc, 0x10, 0x64, 0xcf, 0x37, 0x5e, 0x25, + 0x76, 0xa5, 0xbc, 0xd7, 0xe8, 0x6f, 0xf6, 0x70, + 0xd2, 0x74, 0x9a, 0x94, 0x66, 0x71, 0xb4, 0xc1, + 0x85, 0x18, 0x80, 0x83, 0xdf, 0x5f, 0xec, 0xe1, + 0x45, 0x67, 0x3b, 0xa6, 0x4b, 0xdf, 0xf9, 0x2f, + 0xdc, 0x2c, 0x9a, 0x3c, 0xee, 0xef, 0x1c, 0x95, + 0x19, 0x10, 0xea, 0xdc, 0x46, 0xd4, 0xb3, 0xae, + 0x0c, 0x12, 0x9b, 0x57, 0xc3, 0x38, 0x9a, 0x4e, + 0xac, 0xe6, 0x6a, 0x2e, 0x5b, 0x71, 0x89, 0x43, + 0xec, 0x78, 0x0e, 0x46, 0x7b, 0xcd, 0x55, 0x3f, + 0xd0, 0x83, 0x82, 0x7a, 0x68, 0x62, 0x3e, 0x62, + 0xa9, 0x5a, 0x1b, 0x97, 0x59, 0xd3, 0x94, 0x1d, + 0x62, 0x72, 0x51, 0xde, 0x38, 0xdc, 0x31, 0x06, + 0x93, 0xd5, 0xf9, 0x35, 0x1a, 0x75, 0x0b, 0x94, + 0x9a, 0x7b, 0x50, 0x26, 0xd3, 0x0d, 0xf5, 0xe3, + 0xac, 0x5a, 0x9a, 0xe6, 0xcc, 0x4d, 0x3a, 0x2f, + 0xc7, 0x7e, 0x46, 0x79, 0x19, 0xa8, 0xaf, 0xc3, + 0x7e, 0x50, 0x28, 0x26, 0x22, 0xec, 0x50, 0x3e, + 0x86, 0xda, 0x85, 0x83, 0x13, 0xc9, 0xb2, 0xb0, + 0xc4, 0x1c, 0xbf, 0xd1, 0xff, 0x00, 0xff, 0xc4, + 0x00, 0x49, 0x10, 0x00, 0x01, 0x03, 0x02, 0x03, + 0x04, 0x04, 0x09, 0x06, 0x0a, 0x0b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, + 0x11, 0x05, 0x12, 0x21, 0x13, 0x31, 0x41, 0x51, + 0x14, 0x22, 0x32, 0x71, 0x06, 0x10, 0x15, 0x23, + 0x42, 0x61, 0x81, 0x91, 0xb1, 0x24, 0x33, 0x40, + 0x72, 0x73, 0xc1, 0x20, 0x43, 0x50, 0x74, 0x83, + 0x92, 0xb2, 0xc3, 0xd1, 0xf0, 0x16, 0x30, 0x34, + 0x52, 0x62, 0xa1, 0xc2, 0xd2, 0xe1, 0xe2, 0xf1, + 0xf2, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, + 0x06, 0x3f, 0x02, 0xf1, 0x2e, 0x4b, 0xa1, 0x45, + 0x08, 0xde, 0x11, 0xbe, 0xbe, 0x66, 0x4f, 0xea, + 0xa7, 0xf8, 0xd3, 0xa6, 0x3a, 0x5c, 0x4e, 0xcf, + 0x7e, 0xd0, 0x01, 0xf9, 0x06, 0x5f, 0x70, 0xf8, + 0xf8, 0xa6, 0xdc, 0x81, 0xd6, 0x4f, 0xdf, 0x49, + 0x31, 0xc8, 0x0d, 0x25, 0x36, 0xf9, 0xdb, 0x53, + 0x6d, 0x15, 0x81, 0x91, 0x20, 0x6a, 0x6b, 0x45, + 0x03, 0xdd, 0xe2, 0xb1, 0x5a, 0x41, 0xf5, 0x9a, + 0xf9, 0xc4, 0xfb, 0xea, 0xc1, 0x69, 0x27, 0xd4, + 0x7e, 0x95, 0x2f, 0xb8, 0x7c, 0x7c, 0x51, 0x1c, + 0xd8, 0xb9, 0xd1, 0xf3, 0xdc, 0xae, 0xdd, 0x5d, + 0x2a, 0xfb, 0xd3, 0xb7, 0xbf, 0xb1, 0x3f, 0xf9, + 0x4f, 0xbe, 0xeb, 0x4e, 0x34, 0x97, 0x16, 0x72, + 0x95, 0x0b, 0x5e, 0x95, 0xaf, 0xe2, 0x8f, 0x8a, + 0x4c, 0xec, 0x49, 0xd7, 0x64, 0x3e, 0xf2, 0xee, + 0x02, 0x15, 0x95, 0x29, 0x1c, 0x05, 0x27, 0x05, + 0x05, 0xde, 0x84, 0x57, 0xbb, 0x3e, 0xbd, 0x8b, + 0xef, 0xa8, 0x53, 0x52, 0xe4, 0xc8, 0x8b, 0x4a, + 0xee, 0x95, 0x6a, 0xe3, 0x6b, 0xe6, 0x93, 0xec, + 0xac, 0xdf, 0x2b, 0x29, 0xe7, 0xd1, 0xd5, 0x4c, + 0xe2, 0x7e, 0x7d, 0x50, 0x9d, 0xfc, 0x6a, 0x1b, + 0xbe, 0x53, 0x7b, 0x58, 0xf2, 0xa7, 0x5d, 0x83, + 0xb5, 0x53, 0x6d, 0x9b, 0x15, 0xad, 0x19, 0x45, + 0xe9, 0xc8, 0x2c, 0x35, 0x24, 0xc8, 0x68, 0xe5, + 0x72, 0xed, 0x68, 0xdf, 0x79, 0xa4, 0xc8, 0x9c, + 0xb2, 0x84, 0x29, 0x59, 0x46, 0x51, 0x72, 0x4d, + 0x37, 0x32, 0x22, 0x8a, 0xd8, 0x5e, 0xeb, 0x8b, + 0x1a, 0x4b, 0x12, 0x5c, 0x52, 0xe4, 0xab, 0x50, + 0xc3, 0x29, 0xce, 0xba, 0x6a, 0x23, 0x6e, 0x3a, + 0xdc, 0xa7, 0x0d, 0x92, 0xcb, 0xcd, 0x94, 0x9d, + 0xd7, 0xfa, 0x03, 0xee, 0x45, 0x48, 0x5b, 0xe9, + 0x17, 0x4a, 0x54, 0x37, 0xd7, 0xcd, 0xc7, 0xfd, + 0x53, 0xfc, 0x69, 0xc8, 0xee, 0xa1, 0x90, 0xda, + 0xf7, 0xe5, 0x49, 0xbf, 0xc7, 0xc4, 0xa6, 0x9a, + 0x2a, 0xcd, 0x15, 0x8c, 0xcb, 0xb8, 0xa9, 0x33, + 0x9f, 0xec, 0x47, 0x68, 0xa8, 0x9f, 0xe7, 0xdb, + 0x51, 0xfa, 0x39, 0x56, 0xcd, 0xb0, 0x7b, 0x42, + 0xda, 0xd3, 0x72, 0x00, 0xcc, 0x06, 0x8a, 0x1c, + 0xc5, 0x21, 0x63, 0x72, 0x85, 0xfc, 0x48, 0xfb, + 0x4f, 0xdd, 0x54, 0x3f, 0xce, 0x7f, 0xd2, 0x6a, + 0x2a, 0x3c, 0x93, 0x89, 0x2f, 0x65, 0x19, 0x23, + 0x30, 0x8d, 0xd4, 0x3d, 0x5e, 0x7c, 0xaa, 0xdd, + 0x15, 0xb4, 0x31, 0x39, 0xbd, 0xab, 0xac, 0xa7, + 0xb3, 0x75, 0x01, 0x7a, 0x9f, 0x87, 0x47, 0x75, + 0x0e, 0x33, 0x21, 0x1e, 0x6c, 0xad, 0x5a, 0x22, + 0xfd, 0x95, 0x77, 0x8a, 0x6d, 0xa4, 0x2f, 0x6e, + 0xeb, 0x9e, 0x71, 0xe9, 0x17, 0xbe, 0xd5, 0x47, + 0x8d, 0x3f, 0x01, 0xcd, 0x60, 0x61, 0xb1, 0xca, + 0x55, 0xf6, 0xab, 0x1f, 0xcf, 0xba, 0xb1, 0x2c, + 0x0a, 0x49, 0xb3, 0xad, 0xa8, 0xad, 0x09, 0x3c, + 0xc6, 0x8a, 0xfb, 0xaa, 0x6e, 0x32, 0x60, 0x74, + 0xc8, 0x92, 0x06, 0x8e, 0xf0, 0x03, 0x4e, 0x3c, + 0x0e, 0x95, 0x10, 0x4d, 0x8c, 0xb8, 0x72, 0xdb, + 0x70, 0x29, 0xa7, 0x97, 0xe8, 0x9f, 0xac, 0x3e, + 0x83, 0xd3, 0xe3, 0xa7, 0x2e, 0xbe, 0x75, 0x23, + 0x77, 0x7f, 0x8f, 0x10, 0x75, 0x29, 0x25, 0x6f, + 0xb8, 0x1a, 0x16, 0x15, 0x88, 0x39, 0xb2, 0x5e, + 0x77, 0x96, 0x94, 0x76, 0x75, 0xb5, 0x58, 0x8b, + 0x1f, 0x5f, 0x89, 0x8f, 0xa8, 0x3e, 0x1e, 0x24, + 0xcf, 0x0e, 0x7c, 0x8c, 0x39, 0x6d, 0xbd, 0xba, + 0xbd, 0x8b, 0x7c, 0x6a, 0x14, 0x64, 0x2b, 0x3b, + 0xfb, 0x5d, 0xa6, 0x44, 0xea, 0x72, 0xd8, 0xeb, + 0x50, 0xe3, 0x3e, 0x24, 0xe7, 0x6d, 0x84, 0xa1, + 0x69, 0xd8, 0x13, 0xc2, 0xa4, 0x4c, 0x4c, 0x55, + 0x34, 0xd0, 0xea, 0x42, 0x8e, 0x45, 0x96, 0xed, + 0xb8, 0xdb, 0x80, 0xa9, 0x53, 0xa7, 0x49, 0x6d, + 0x53, 0xe5, 0x1e, 0x92, 0xb9, 0x67, 0xf1, 0x6a, + 0xe0, 0x9e, 0xee, 0x15, 0x22, 0x1e, 0x22, 0x17, + 0x9a, 0x33, 0x64, 0xc6, 0x25, 0x27, 0xaf, 0xfe, + 0x0a, 0x38, 0x93, 0xf3, 0xa6, 0x22, 0x5c, 0x87, + 0x54, 0xb7, 0xd3, 0x1d, 0xf2, 0x8b, 0x1b, 0xee, + 0x35, 0x12, 0x44, 0x27, 0x5e, 0x94, 0x84, 0xd9, + 0x6f, 0x67, 0x39, 0xd6, 0x2f, 0xda, 0xb9, 0xee, + 0xa9, 0x4c, 0xce, 0x61, 0xd7, 0xa0, 0x85, 0x82, + 0xcc, 0xe6, 0x1b, 0xba, 0x72, 0xab, 0x50, 0x15, + 0x50, 0x63, 0xe0, 0x30, 0x54, 0xb9, 0x19, 0xee, + 0xec, 0x90, 0xce, 0x40, 0x07, 0xae, 0x90, 0x8b, + 0xdf, 0x28, 0xb5, 0xfe, 0x80, 0xe3, 0x0e, 0x0b, + 0xb6, 0xe0, 0xca, 0x6b, 0x34, 0x87, 0x83, 0x91, + 0x46, 0xb9, 0x46, 0xf5, 0x52, 0xa4, 0x43, 0x67, + 0x64, 0xb6, 0xb5, 0x52, 0x53, 0xc5, 0x34, 0x98, + 0xd2, 0x1c, 0xd8, 0xb8, 0x95, 0x1d, 0xe3, 0x43, + 0x47, 0xe5, 0x8d, 0x7b, 0xe9, 0xe7, 0x53, 0xd4, + 0x68, 0xac, 0x95, 0x3a, 0xa1, 0x40, 0xec, 0x76, + 0xee, 0x7f, 0x7d, 0xdd, 0x6a, 0xc3, 0x41, 0x5a, + 0x50, 0xc0, 0x3c, 0x9f, 0x0f, 0xa4, 0x95, 0x65, + 0xda, 0x66, 0x39, 0x37, 0x5e, 0xf4, 0x33, 0x04, + 0xe6, 0xae, 0xc8, 0xf7, 0x57, 0x64, 0x55, 0xac, + 0x2d, 0xca, 0xbb, 0x22, 0xb4, 0x00, 0x57, 0x64, + 0x55, 0xb2, 0x8b, 0x72, 0xae, 0xaa, 0x42, 0x7b, + 0xbe, 0x86, 0x41, 0xd4, 0x1d, 0x2d, 0x4e, 0x32, + 0x47, 0x9b, 0x3d, 0x66, 0xcf, 0x31, 0x48, 0x40, + 0xf4, 0x8d, 0xa9, 0xb8, 0xed, 0x0b, 0x25, 0x03, + 0xf0, 0x11, 0xf6, 0x9f, 0xba, 0xa8, 0xe9, 0xc2, + 0xa6, 0xcb, 0x1b, 0x66, 0x4b, 0xa5, 0x84, 0x2f, + 0x4e, 0xaf, 0x21, 0x4b, 0x42, 0xd5, 0xb1, 0x9c, + 0x84, 0xd9, 0xe4, 0x36, 0xab, 0x1f, 0xac, 0x9a, + 0xc7, 0x31, 0x37, 0x25, 0x3d, 0x36, 0x43, 0x32, + 0x8c, 0x66, 0x83, 0xeb, 0x25, 0x29, 0xd4, 0x6b, + 0x6f, 0x6d, 0x31, 0x88, 0x7f, 0x4a, 0xe5, 0x74, + 0xa7, 0x53, 0x9f, 0x23, 0x44, 0x14, 0xa0, 0xf2, + 0xcb, 0x4d, 0xe1, 0xee, 0xcf, 0x53, 0x2f, 0x09, + 0x4a, 0x53, 0x98, 0x83, 0x7b, 0xd4, 0xd5, 0xae, + 0x2c, 0x3b, 0xcd, 0xad, 0xea, 0xac, 0x3f, 0x07, + 0x47, 0x84, 0x13, 0x96, 0xdc, 0xac, 0x97, 0x71, + 0x4a, 0xd4, 0x66, 0x55, 0xa9, 0xd4, 0xbb, 0x8b, + 0xcb, 0xc4, 0x20, 0x3c, 0xc2, 0x81, 0x59, 0x5e, + 0x57, 0x18, 0x58, 0xd4, 0x1f, 0x8d, 0x4c, 0xda, + 0xf8, 0x41, 0x3a, 0x3e, 0xc3, 0x2d, 0xb2, 0x2a, + 0xf7, 0xbd, 0x46, 0xc2, 0x25, 0x62, 0x0a, 0xc5, + 0x22, 0xbe, 0x50, 0x2e, 0xe0, 0xeb, 0x0c, 0xd5, + 0x1f, 0x0a, 0x46, 0x27, 0x31, 0x10, 0x9e, 0x29, + 0x51, 0x6c, 0x3c, 0x79, 0x5e, 0xc2, 0x9e, 0x40, + 0x71, 0xc6, 0xba, 0x9a, 0x2d, 0xb5, 0x59, 0x43, + 0xdb, 0x53, 0xe7, 0xbd, 0x88, 0xcb, 0x54, 0xbb, + 0x38, 0xa4, 0xbb, 0xb5, 0x37, 0x4e, 0x4d, 0xd6, + 0xa6, 0xe1, 0x62, 0xf2, 0x5d, 0x79, 0x13, 0x1a, + 0x0a, 0x64, 0xbc, 0xab, 0xd8, 0x9d, 0x53, 0x6e, + 0xfa, 0x6a, 0x26, 0x1e, 0xb5, 0x37, 0x3a, 0x49, + 0x24, 0x29, 0x06, 0xc5, 0x28, 0x48, 0xba, 0x8d, + 0x4f, 0x91, 0x37, 0x10, 0x96, 0xeb, 0xa5, 0x45, + 0xa0, 0x76, 0xa7, 0xa8, 0x2c, 0x0d, 0xc7, 0xae, + 0xb1, 0x04, 0x3b, 0xe1, 0x04, 0xe6, 0x13, 0x18, + 0x80, 0x32, 0x2a, 0xf7, 0xdf, 0xfc, 0x29, 0xb2, + 0x71, 0x97, 0xb1, 0x48, 0xab, 0x41, 0x43, 0xcc, + 0xc8, 0x55, 0x94, 0xdf, 0x25, 0x8f, 0x75, 0xaa, + 0x63, 0x89, 0x93, 0x22, 0x76, 0x1b, 0x16, 0x46, + 0xc9, 0x48, 0x7d, 0x79, 0x85, 0x8f, 0x0f, 0xf9, + 0xa7, 0xf1, 0x5c, 0x32, 0x5b, 0xad, 0x14, 0x27, + 0x3a, 0x16, 0xca, 0xf2, 0x90, 0x79, 0x1a, 0xc2, + 0xf2, 0x62, 0xf2, 0xe1, 0xc7, 0xe8, 0xa9, 0x75, + 0xc7, 0xc2, 0xf3, 0x2d, 0xe7, 0x17, 0xad, 0xbb, + 0x85, 0x4a, 0xc0, 0xd5, 0xe1, 0x04, 0xe4, 0xb4, + 0xce, 0x7b, 0x3a, 0x15, 0xd6, 0x36, 0xac, 0x49, + 0x6e, 0xcb, 0x5e, 0x25, 0x75, 0xa3, 0xa2, 0xc9, + 0x7b, 0x7a, 0x6f, 0xbc, 0x1e, 0xeb, 0x54, 0x79, + 0xed, 0xf8, 0x5b, 0x29, 0x52, 0x9c, 0x40, 0x5f, + 0x56, 0xca, 0x6d, 0x27, 0x96, 0x5a, 0x0c, 0xe2, + 0x8a, 0xda, 0x4b, 0x69, 0x6a, 0x4e, 0xda, 0xf7, + 0xda, 0x0e, 0x0a, 0xfc, 0x1d, 0x9b, 0xa2, 0xca, + 0x1d, 0x95, 0x8d, 0xe2, 0x81, 0x69, 0xc6, 0x56, + 0x01, 0xb8, 0x55, 0xed, 0x43, 0x37, 0x6a, 0xda, + 0xfe, 0x02, 0x3e, 0xd3, 0xf7, 0x55, 0x80, 0x7d, + 0x83, 0x9f, 0x7d, 0x0f, 0x08, 0xf0, 0x5b, 0xa1, + 0xb0, 0xac, 0xcf, 0x34, 0x9f, 0x47, 0xfe, 0xa6, + 0xb1, 0x01, 0x8a, 0x84, 0xa6, 0x34, 0xc9, 0xaa, + 0x4a, 0x82, 0xbb, 0x37, 0x55, 0xad, 0xaf, 0x0a, + 0xdb, 0x61, 0x58, 0xa3, 0x91, 0xd7, 0xe8, 0x87, + 0x3f, 0xdc, 0x2b, 0x12, 0xc2, 0x71, 0x17, 0x4c, + 0x85, 0x43, 0xdc, 0xe2, 0x8e, 0x62, 0x35, 0xb1, + 0x17, 0xe3, 0x58, 0x0f, 0xe8, 0x7f, 0x6c, 0xd3, + 0xff, 0x00, 0x50, 0xfc, 0x2b, 0x12, 0xf2, 0x76, + 0x27, 0xe4, 0xe2, 0x9c, 0xb9, 0xbc, 0xd8, 0x56, + 0x6d, 0xf4, 0xfb, 0x38, 0xf2, 0x56, 0xee, 0x36, + 0x16, 0x43, 0x4f, 0xb8, 0xbb, 0xa7, 0x37, 0x77, + 0xc2, 0xb0, 0xe5, 0x2b, 0x40, 0x42, 0x2c, 0x7d, + 0x86, 0x9e, 0x24, 0xd8, 0x04, 0x1f, 0x85, 0x4e, + 0xd3, 0xd0, 0x91, 0xf0, 0x35, 0xe0, 0xee, 0x37, + 0x1a, 0xe1, 0xf8, 0x8d, 0x21, 0x2a, 0x50, 0xe5, + 0xe8, 0x9f, 0x7d, 0x63, 0x9e, 0x11, 0xc8, 0x46, + 0x54, 0x88, 0x66, 0x2c, 0x74, 0x9e, 0x1d, 0x5e, + 0xb9, 0xf7, 0xd4, 0xcf, 0xb7, 0x3f, 0xb2, 0x2b, + 0x16, 0xf9, 0x7c, 0xb8, 0x5b, 0x35, 0x0f, 0xec, + 0xae, 0x65, 0xcd, 0xa9, 0xdf, 0x53, 0x1f, 0x77, + 0x11, 0x76, 0x53, 0x4f, 0x84, 0x00, 0xa9, 0x6b, + 0xba, 0x81, 0x17, 0xd2, 0xfe, 0xda, 0xf0, 0xc2, + 0x34, 0x96, 0xc3, 0xac, 0xb8, 0xfa, 0x42, 0x92, + 0x7b, 0x8d, 0x4f, 0xc3, 0xd2, 0x4b, 0xb8, 0x56, + 0x20, 0x8b, 0x24, 0xab, 0x77, 0xff, 0x00, 0x42, + 0xb0, 0x9f, 0xcd, 0x5a, 0xfd, 0x91, 0x58, 0x9f, + 0xe9, 0x3e, 0xea, 0x4c, 0x2c, 0x4e, 0xdd, 0x1e, + 0x5a, 0xf6, 0x42, 0xfa, 0x75, 0xb7, 0x8d, 0x78, + 0x6e, 0xa2, 0xf6, 0x13, 0x8a, 0xb8, 0xcb, 0x9c, + 0x03, 0x9a, 0x1f, 0xd6, 0x15, 0x88, 0x44, 0x9e, + 0xe1, 0x7d, 0x70, 0xd6, 0x90, 0x97, 0x54, 0x6e, + 0x4d, 0xef, 0xa5, 0xf8, 0xf6, 0x7f, 0xab, 0x18, + 0xc9, 0xc6, 0x55, 0xe5, 0x00, 0xac, 0xd9, 0x84, + 0x71, 0x97, 0x75, 0xb7, 0x5e, 0x98, 0xc5, 0x46, + 0x2b, 0xb2, 0x76, 0x38, 0xca, 0xd2, 0x03, 0x00, + 0xa4, 0x0e, 0x37, 0xd7, 0x5b, 0xeb, 0x4a, 0x42, + 0xc0, 0x52, 0x54, 0x2c, 0x41, 0xe3, 0x58, 0x8e, + 0x14, 0xda, 0xd4, 0x88, 0xb2, 0xdd, 0xda, 0xa7, + 0x4f, 0x9b, 0xdd, 0xf7, 0x8a, 0xd8, 0xc2, 0xf0, + 0x9e, 0x6c, 0x78, 0x7b, 0x83, 0x2a, 0x4e, 0x72, + 0x07, 0xd6, 0xbd, 0x2d, 0xa8, 0xd9, 0x96, 0xe3, + 0x86, 0xee, 0x3c, 0xe6, 0xaa, 0x59, 0xa4, 0x62, + 0xcb, 0xc5, 0x8a, 0x24, 0xb4, 0x41, 0x67, 0x2b, + 0x02, 0xc8, 0xb1, 0xb8, 0xe3, 0xad, 0x29, 0x86, + 0xe4, 0x86, 0x64, 0x29, 0x39, 0x76, 0xfb, 0x3b, + 0xf7, 0x9c, 0xb7, 0xa7, 0x16, 0xc6, 0x22, 0xa7, + 0x9a, 0x77, 0xe7, 0x1a, 0x5b, 0x43, 0x5e, 0x5a, + 0xde, 0x9b, 0x9c, 0xd4, 0x95, 0xe1, 0xf3, 0xd3, + 0x6f, 0x3c, 0x84, 0xde, 0xf6, 0xdd, 0xa7, 0x3a, + 0x8e, 0x31, 0x19, 0x8b, 0x77, 0x11, 0x63, 0xb1, + 0x39, 0x94, 0x06, 0xd5, 0xea, 0xd2, 0xb6, 0x13, + 0x3c, 0x28, 0x99, 0x22, 0x19, 0xd1, 0x4d, 0x25, + 0xb0, 0x92, 0x47, 0x2b, 0xde, 0xbc, 0x91, 0x05, + 0xee, 0x82, 0xc6, 0x4d, 0x99, 0x56, 0x4c, 0xe7, + 0x2f, 0x1f, 0x69, 0xe7, 0x4e, 0x60, 0xf2, 0xa5, + 0x74, 0xc8, 0xe5, 0x05, 0xa4, 0x2b, 0x67, 0x94, + 0xa5, 0x36, 0xff, 0x00, 0x3a, 0x4e, 0x0b, 0x16, + 0x4f, 0x46, 0x6f, 0x26, 0xcd, 0x4e, 0xec, 0xee, + 0x48, 0xf4, 0xbd, 0xf5, 0x2a, 0x2c, 0x4c, 0x52, + 0xe8, 0x7b, 0x51, 0xb4, 0x60, 0x1c, 0x8a, 0xe7, + 0xbf, 0x97, 0x0a, 0x75, 0x50, 0xf1, 0xf9, 0x51, + 0xd4, 0xef, 0x6f, 0x66, 0x80, 0x2f, 0x4c, 0x4a, + 0x99, 0x8d, 0xca, 0xc4, 0x36, 0x17, 0x53, 0x6d, + 0x3c, 0x3a, 0xa1, 0x5c, 0x0d, 0x4a, 0x9a, 0x71, + 0x33, 0x27, 0xa5, 0x9c, 0xcf, 0xa0, 0xb2, 0x00, + 0x51, 0xf5, 0x6b, 0xa5, 0x3b, 0x0e, 0x5a, 0x73, + 0x36, 0xbe, 0x3c, 0x52, 0x79, 0x8a, 0x8d, 0x0d, + 0x2e, 0xe6, 0x53, 0x0c, 0xa5, 0xa0, 0xe1, 0x4f, + 0x21, 0x6b, 0xda, 0x8e, 0x30, 0x9c, 0x58, 0xaa, + 0x62, 0xcd, 0xdc, 0xbc, 0x71, 0x95, 0x57, 0xde, + 0x2d, 0x7d, 0x29, 0x70, 0x5e, 0x51, 0x42, 0x14, + 0xa4, 0xab, 0x32, 0x77, 0x8b, 0x1b, 0xd1, 0x61, + 0x8f, 0x0a, 0x26, 0xb7, 0x0b, 0x70, 0x69, 0x49, + 0xcc, 0xa0, 0x39, 0x66, 0xbd, 0x74, 0x68, 0x60, + 0xd8, 0x9c, 0xcb, 0x5a, 0xfb, 0x4b, 0x3e, 0xbf, + 0xc8, 0x9f, 0xff, 0xc4, 0x00, 0x2a, 0x10, 0x01, + 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x03, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x81, + 0x10, 0x71, 0xf0, 0x91, 0xa1, 0xb1, 0x30, 0x40, + 0xc1, 0xd1, 0x20, 0x50, 0xf1, 0xe1, 0xff, 0xda, + 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, 0x3f, 0x21, + 0xf4, 0xa0, 0xdb, 0x20, 0x1d, 0xab, 0x94, 0xf4, + 0x9a, 0x7d, 0x74, 0x1c, 0xe2, 0xf5, 0x4b, 0xd2, + 0x20, 0xde, 0x22, 0xbf, 0xdf, 0xfc, 0x07, 0x44, + 0xe2, 0x05, 0x28, 0xd0, 0x2e, 0xf1, 0x05, 0x3b, + 0xa7, 0x6a, 0xde, 0x71, 0x2e, 0xc2, 0xe4, 0x5c, + 0x12, 0x94, 0xff, 0x00, 0x45, 0x7e, 0x9d, 0x94, + 0x90, 0x13, 0xfe, 0x3e, 0x76, 0x72, 0x40, 0xfe, + 0xe2, 0xe5, 0xcf, 0x80, 0xe8, 0x9c, 0x4b, 0x25, + 0x57, 0x7f, 0x87, 0x77, 0x88, 0x2a, 0xd7, 0x32, + 0x0e, 0x38, 0xa2, 0xc1, 0xc7, 0xc8, 0x07, 0x4f, + 0x10, 0x41, 0x49, 0xca, 0xf7, 0x23, 0x98, 0xcc, + 0xe8, 0xdf, 0x5e, 0x06, 0xf0, 0x06, 0x61, 0xe0, + 0x14, 0xe9, 0x75, 0xf9, 0x10, 0x6e, 0x56, 0xa8, + 0x87, 0xba, 0x17, 0xe1, 0x89, 0x04, 0x49, 0x61, + 0xaa, 0xbd, 0xe3, 0xd4, 0xb6, 0x04, 0x80, 0xc0, + 0xed, 0x59, 0xcc, 0x10, 0x32, 0x48, 0x1d, 0x05, + 0xfc, 0xcc, 0x7d, 0x71, 0x17, 0x18, 0xf1, 0x12, + 0xb1, 0xb7, 0xf0, 0xc5, 0xeb, 0xc4, 0xb0, 0x38, + 0x8a, 0xa1, 0x1a, 0x44, 0xe2, 0x1f, 0x99, 0xb1, + 0xd1, 0xd6, 0x8d, 0x79, 0x88, 0x49, 0xf8, 0x8b, + 0xf0, 0x71, 0xd7, 0xf6, 0x19, 0x72, 0xce, 0x05, + 0x37, 0x8f, 0x6b, 0x95, 0xf6, 0x24, 0x34, 0xc1, + 0x91, 0x36, 0xf4, 0x64, 0x54, 0xf5, 0x25, 0xd5, + 0xfe, 0x62, 0x4c, 0xae, 0xf9, 0xdc, 0x40, 0xe3, + 0x2c, 0xb9, 0x0f, 0xf9, 0x3c, 0xc3, 0x1b, 0x77, + 0xfc, 0x43, 0xb5, 0x01, 0x37, 0xdf, 0xd3, 0xe0, + 0x77, 0x43, 0xf4, 0x71, 0xde, 0x45, 0x12, 0xf0, + 0x67, 0x3f, 0xaa, 0x62, 0x10, 0xb2, 0x09, 0x6a, + 0x1c, 0x78, 0xf7, 0xdc, 0x33, 0xa8, 0x72, 0x05, + 0x85, 0x38, 0xc9, 0x7d, 0x71, 0xda, 0x12, 0x7e, + 0x4c, 0x32, 0x9b, 0xf2, 0x67, 0x1d, 0xa3, 0x48, + 0xd4, 0xcd, 0x62, 0x0f, 0xb8, 0x43, 0x85, 0xc5, + 0x8e, 0x92, 0xb3, 0xee, 0xfa, 0xc4, 0x13, 0x99, + 0x87, 0x0b, 0x84, 0x6a, 0xc3, 0x3c, 0x4a, 0x9f, + 0x22, 0xd5, 0xc2, 0x6e, 0x07, 0x54, 0xe3, 0xac, + 0x3f, 0x5d, 0x2c, 0x89, 0x38, 0xff, 0x00, 0x50, + 0xfb, 0x3d, 0x73, 0x9d, 0x06, 0xb0, 0x65, 0xf1, + 0x96, 0x62, 0xe4, 0x50, 0x58, 0x13, 0x8f, 0xac, + 0x50, 0x82, 0xd9, 0xb4, 0x79, 0xc4, 0xf8, 0xbe, + 0x89, 0x74, 0x5c, 0xb8, 0x61, 0x50, 0x5d, 0xfd, + 0xf4, 0xd2, 0xe5, 0xe5, 0xa3, 0x5b, 0x42, 0xd3, + 0x8b, 0x62, 0x40, 0x56, 0x5c, 0xa1, 0x13, 0xbc, + 0x4f, 0x82, 0xd0, 0xd2, 0x94, 0x75, 0xb8, 0xf1, + 0x16, 0x6b, 0xb4, 0x27, 0x8b, 0x76, 0x0d, 0x8e, + 0xfd, 0x88, 0xdf, 0xee, 0x54, 0x83, 0x5a, 0x6e, + 0xea, 0xbb, 0x7b, 0x42, 0xd2, 0x68, 0x0b, 0xd4, + 0x15, 0xba, 0x79, 0xeb, 0x33, 0x44, 0x58, 0x64, + 0x01, 0xcc, 0xaa, 0xe3, 0x58, 0xa0, 0x0e, 0x55, + 0x9c, 0x20, 0xd6, 0x3a, 0x6a, 0x6c, 0x27, 0x4e, + 0x5a, 0xdb, 0x9e, 0x5b, 0x7a, 0x47, 0x6a, 0xd1, + 0xef, 0x51, 0xfa, 0xf5, 0x2d, 0x97, 0x23, 0xd9, + 0x84, 0xd5, 0x34, 0xb4, 0xe9, 0x0f, 0x48, 0x25, + 0xc7, 0x60, 0xd7, 0x37, 0x93, 0x70, 0x80, 0x30, + 0xcf, 0x97, 0x9b, 0x09, 0x43, 0xbe, 0x16, 0x8d, + 0xa7, 0x0a, 0x48, 0x46, 0x5b, 0xa3, 0xab, 0x06, + 0x60, 0x1f, 0x01, 0xa8, 0x28, 0x28, 0xc0, 0x1c, + 0x4b, 0xdf, 0x0b, 0xac, 0x5c, 0xb4, 0x9d, 0x1e, + 0xbb, 0x8d, 0x57, 0x55, 0xc4, 0x1c, 0x3a, 0x94, + 0xb5, 0xe9, 0x6d, 0x5c, 0x7d, 0xa6, 0x4f, 0x8d, + 0x62, 0x7f, 0xc1, 0x97, 0x99, 0x8e, 0x84, 0x5d, + 0x6a, 0xaf, 0x29, 0x33, 0xf3, 0x1d, 0x18, 0x87, + 0xd0, 0x4f, 0x45, 0x4c, 0x4b, 0x97, 0xe9, 0x72, + 0xfd, 0x2e, 0x5c, 0xb9, 0x7f, 0xe6, 0x97, 0x0c, + 0x70, 0x4a, 0x5c, 0x91, 0xf6, 0x09, 0x63, 0x97, + 0xfa, 0xd4, 0x5d, 0xa8, 0x4f, 0x96, 0xa6, 0x39, + 0x19, 0xee, 0xf2, 0xca, 0xf5, 0xf8, 0x1d, 0xd1, + 0x95, 0x29, 0xca, 0x6c, 0xdb, 0xec, 0x16, 0x93, + 0x2b, 0x44, 0x87, 0x4a, 0xed, 0x83, 0xf6, 0x71, + 0x07, 0xa7, 0x3b, 0x4a, 0x0e, 0xe6, 0xd3, 0x65, + 0xb8, 0x49, 0xb9, 0xdb, 0x8e, 0x98, 0x89, 0xfd, + 0x5b, 0xe0, 0x1c, 0x59, 0x7b, 0x07, 0x54, 0xb5, + 0xde, 0xe6, 0xb8, 0xa8, 0xd7, 0x13, 0x55, 0x09, + 0x64, 0x2e, 0x8e, 0x9a, 0x1e, 0x49, 0xaa, 0xcf, + 0x71, 0x8d, 0xdf, 0xb4, 0xa5, 0x33, 0xd7, 0x42, + 0xa1, 0xbe, 0xa3, 0xe1, 0x98, 0x33, 0x55, 0xa5, + 0xa4, 0x9c, 0x18, 0x96, 0xda, 0x5a, 0xdd, 0xc1, + 0x84, 0x81, 0x35, 0x02, 0x12, 0x06, 0x9d, 0x8f, + 0x3d, 0x65, 0x17, 0x9d, 0x08, 0x16, 0x2e, 0x83, + 0x1e, 0xf5, 0x37, 0x1f, 0x26, 0x87, 0x4e, 0x38, + 0x22, 0x64, 0x49, 0x15, 0x1d, 0x83, 0x6e, 0x66, + 0x73, 0xba, 0xaa, 0xee, 0xd7, 0x19, 0x80, 0x62, + 0x16, 0x5d, 0x5e, 0xfd, 0x0d, 0xd9, 0x75, 0x2f, + 0xf1, 0x2a, 0x6d, 0x04, 0xf0, 0xd6, 0xbb, 0x21, + 0x75, 0x7b, 0x0b, 0x50, 0x6b, 0xf7, 0xd4, 0x7b, + 0x27, 0x5f, 0x10, 0x72, 0x60, 0x7f, 0x3e, 0x66, + 0xff, 0x00, 0x1c, 0x1a, 0x05, 0x63, 0x5c, 0xca, + 0xed, 0x10, 0x56, 0x97, 0x0b, 0x7d, 0xc3, 0x86, + 0xc8, 0xfe, 0x98, 0x0d, 0x41, 0x6b, 0xb7, 0x1a, + 0xac, 0x6a, 0x33, 0x66, 0x1c, 0x0b, 0xec, 0x3c, + 0x35, 0xe3, 0xfc, 0x6e, 0x9b, 0x3b, 0x7f, 0xfe, + 0xbb, 0x43, 0x7a, 0x75, 0x34, 0x53, 0xd2, 0xa6, + 0x2b, 0x60, 0xc3, 0x57, 0xea, 0xcf, 0x81, 0xdd, + 0x10, 0xc2, 0x1b, 0xb4, 0x35, 0xc5, 0x9c, 0xb5, + 0xf5, 0x0e, 0x25, 0xf2, 0x2e, 0x80, 0x12, 0x1e, + 0xe6, 0x9e, 0xb5, 0x01, 0xc1, 0x72, 0x1c, 0x9d, + 0x34, 0xbf, 0x68, 0xe9, 0x0b, 0x6a, 0x07, 0xd2, + 0xd6, 0x62, 0x65, 0xee, 0x4c, 0x4f, 0x97, 0xb4, + 0xf7, 0xb3, 0x41, 0xe9, 0xbd, 0x7f, 0xec, 0xc2, + 0x9f, 0xea, 0xae, 0x0a, 0x6e, 0xb6, 0xfb, 0x10, + 0xb0, 0x9c, 0xa7, 0x36, 0x47, 0xde, 0x00, 0x84, + 0x2a, 0xf1, 0x01, 0x32, 0xb2, 0xc7, 0x78, 0x2c, + 0x5b, 0x6f, 0x4b, 0xdf, 0x83, 0xf3, 0x8a, 0x03, + 0xa5, 0x41, 0x60, 0xf7, 0x5b, 0xf7, 0xe9, 0xe9, + 0xd1, 0x4a, 0x5b, 0x77, 0xba, 0xf2, 0xb5, 0x2d, + 0x70, 0xad, 0x18, 0x3a, 0x14, 0xd2, 0x88, 0x21, + 0xfe, 0xbd, 0xff, 0x00, 0x24, 0x7a, 0x68, 0xdf, + 0x29, 0x13, 0xdb, 0x47, 0x73, 0xed, 0x25, 0x7c, + 0xde, 0xd1, 0x41, 0x00, 0x66, 0x8c, 0x5e, 0xe1, + 0xc1, 0xeb, 0x47, 0x35, 0x08, 0x45, 0x2c, 0x9e, + 0x0c, 0x3f, 0x89, 0x56, 0x95, 0x61, 0x32, 0xae, + 0x83, 0xb7, 0x7f, 0xd2, 0x0a, 0x81, 0xa7, 0x86, + 0x69, 0x67, 0x1b, 0xb6, 0x8e, 0x9d, 0x62, 0xae, + 0x3a, 0xc3, 0x29, 0xa2, 0xc7, 0x6d, 0x9f, 0x77, + 0x68, 0xa4, 0x58, 0x7d, 0x81, 0xd8, 0xca, 0x4e, + 0x80, 0x32, 0x7a, 0x86, 0x72, 0x1f, 0x45, 0xae, + 0xf1, 0x75, 0x07, 0x43, 0xe8, 0x85, 0x1f, 0x89, + 0x92, 0x1c, 0x6f, 0xf4, 0x87, 0x68, 0x67, 0x3e, + 0x29, 0x55, 0x34, 0xe8, 0x5e, 0x77, 0x05, 0xed, + 0x56, 0x18, 0xf0, 0x75, 0x33, 0xce, 0x2f, 0x98, + 0x0f, 0x1e, 0x81, 0x58, 0xbb, 0x1a, 0x2a, 0xe7, + 0x0c, 0x73, 0x2f, 0x31, 0xb1, 0x87, 0x51, 0x96, + 0x21, 0x2c, 0x2a, 0xbb, 0x0d, 0xdb, 0xaf, 0x7f, + 0xa4, 0xa0, 0x4a, 0xef, 0x47, 0xae, 0xfc, 0x46, + 0xef, 0x91, 0x2c, 0x31, 0x0e, 0x53, 0x67, 0xdd, + 0x1d, 0x91, 0xc0, 0x0e, 0xd0, 0x1c, 0xb6, 0x1c, + 0x8e, 0x38, 0x80, 0xd7, 0x8a, 0x83, 0xfc, 0x0b, + 0xc3, 0x6d, 0xe6, 0xa2, 0x28, 0x3d, 0xaa, 0x61, + 0x2b, 0xcf, 0x0f, 0xca, 0x64, 0x8b, 0x8b, 0xaa, + 0x73, 0x9e, 0xec, 0xb1, 0x63, 0x00, 0xc5, 0xa5, + 0x07, 0x35, 0x77, 0xfc, 0xc7, 0x13, 0x6d, 0xba, + 0x69, 0x46, 0x8b, 0x71, 0xed, 0x29, 0xea, 0xb0, + 0x3d, 0x87, 0x78, 0x80, 0x5b, 0x08, 0x62, 0x98, + 0xc9, 0xda, 0xea, 0xfc, 0xc4, 0xfe, 0x3c, 0x18, + 0xf2, 0x91, 0xf4, 0x94, 0xfb, 0x71, 0x5d, 0x0e, + 0x1f, 0x4a, 0xf3, 0x1d, 0x4a, 0xfb, 0x1c, 0x5f, + 0xe2, 0x26, 0x6e, 0xd1, 0x5f, 0x52, 0xbf, 0x8f, + 0xf4, 0x9f, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, + 0x91, 0x92, 0xac, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0xb8, 0xfb, + 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, + 0x92, 0x49, 0x26, 0xba, 0x16, 0x58, 0x80, 0x01, + 0x04, 0x00, 0x49, 0x24, 0x92, 0x49, 0x24, 0x90, + 0xd6, 0xc4, 0xe4, 0x40, 0x24, 0x02, 0x00, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x43, 0x1e, 0xf1, 0x31, + 0x60, 0x00, 0x09, 0x00, 0x92, 0x49, 0x24, 0x92, + 0x49, 0x20, 0x29, 0x33, 0x55, 0x92, 0x41, 0x04, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x24, 0x5a, 0x09, 0x20, 0x80, 0x00, 0x20, 0x92, + 0x09, 0x04, 0x92, 0x01, 0x24, 0x33, 0x19, 0x04, + 0x12, 0x40, 0x20, 0x12, 0x08, 0x20, 0x00, 0x01, + 0x20, 0x92, 0x49, 0x24, 0x80, 0x48, 0x20, 0x90, + 0x49, 0x20, 0x10, 0x00, 0x00, 0x82, 0x49, 0x24, + 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, + 0x24, 0x92, 0x49, 0x3f, 0xff, 0xc4, 0x00, 0x27, + 0x11, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, + 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x11, 0x21, 0x31, 0x41, 0x51, + 0x40, 0x61, 0x71, 0x81, 0x91, 0xb1, 0x10, 0x60, + 0xa1, 0xf1, 0xc1, 0xd1, 0xf0, 0xff, 0xda, 0x00, + 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, 0x10, 0xfa, + 0x53, 0x7f, 0x71, 0xa3, 0x9e, 0xf0, 0xb8, 0xa9, + 0xe5, 0xb4, 0x34, 0x29, 0x37, 0x95, 0xff, 0x00, + 0x04, 0x2f, 0x32, 0xd5, 0x33, 0xab, 0xd7, 0xe0, + 0xbd, 0xdf, 0x86, 0x15, 0x62, 0xb0, 0x67, 0xde, + 0x02, 0x49, 0x05, 0xb7, 0x88, 0xac, 0xac, 0x73, + 0x0e, 0x33, 0x0a, 0x35, 0x45, 0x28, 0xef, 0x32, + 0x40, 0x3c, 0x75, 0x9a, 0xb4, 0x4b, 0x0d, 0x60, + 0x7a, 0xef, 0xc3, 0x32, 0x34, 0xe6, 0xbf, 0x31, + 0xc2, 0x31, 0x1b, 0xad, 0xe2, 0x54, 0x88, 0x34, + 0x34, 0xcd, 0xfe, 0xd0, 0x32, 0x1c, 0xf0, 0x85, + 0x53, 0x94, 0x7b, 0x53, 0xd6, 0x5e, 0xf1, 0x52, + 0xf1, 0xfe, 0x65, 0xab, 0xf9, 0x63, 0xfa, 0x8c, + 0xd9, 0x66, 0xb5, 0x5a, 0x78, 0x82, 0xae, 0xdd, + 0x94, 0xac, 0x6a, 0x19, 0xcd, 0x5f, 0x1e, 0x20, + 0xcf, 0x87, 0xf6, 0x05, 0x42, 0xe8, 0xb8, 0xd3, + 0x38, 0x26, 0xfe, 0x75, 0x3c, 0xc7, 0x4b, 0x66, + 0xbd, 0xba, 0xb6, 0xc1, 0xa1, 0x8e, 0xae, 0x09, + 0xab, 0xe2, 0x50, 0x1d, 0x90, 0x94, 0xaa, 0x8a, + 0x0f, 0x39, 0xa8, 0x15, 0x22, 0xad, 0x7b, 0xd4, + 0x65, 0xae, 0xcd, 0x62, 0x19, 0x56, 0x18, 0x51, + 0x06, 0xcb, 0x7c, 0xc1, 0xbe, 0xab, 0x5c, 0xc7, + 0xa2, 0x96, 0xc9, 0xcf, 0x80, 0xe1, 0xde, 0x24, + 0x7c, 0x11, 0x6b, 0x0f, 0xa6, 0xce, 0x92, 0x8a, + 0xc1, 0xa4, 0x6a, 0xb9, 0x75, 0xef, 0x12, 0x40, + 0xf0, 0x1b, 0x79, 0x8d, 0x44, 0x9b, 0x61, 0xf9, + 0xd7, 0xe2, 0x5a, 0xb6, 0xcd, 0x3a, 0xc6, 0xe9, + 0x08, 0xd8, 0x53, 0xa2, 0x5b, 0x38, 0xa8, 0x6e, + 0x31, 0x5f, 0x80, 0x1f, 0x5a, 0x23, 0xa5, 0x6a, + 0x7f, 0x53, 0x3d, 0x7b, 0x0f, 0xaf, 0x93, 0x64, + 0x8a, 0xc5, 0x51, 0xc6, 0xd6, 0x91, 0xee, 0x49, + 0xab, 0xfb, 0x8f, 0xff, 0xc4, 0x00, 0x1f, 0x11, + 0x01, 0x01, 0x01, 0x00, 0x03, 0x01, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x11, 0x21, 0x31, 0x40, 0x41, 0x10, + 0x50, 0x51, 0x60, 0x81, 0xff, 0xda, 0x00, 0x08, + 0x01, 0x02, 0x01, 0x01, 0x3f, 0x10, 0xfc, 0x39, + 0xa0, 0xb9, 0x46, 0x4f, 0x5d, 0xb7, 0x3f, 0xe7, + 0xbf, 0xbe, 0xc3, 0x19, 0x06, 0x76, 0x08, 0xe0, + 0x88, 0x9b, 0x3a, 0x83, 0xec, 0xe6, 0xc8, 0xf3, + 0xb4, 0xea, 0x6e, 0x5d, 0x11, 0xb2, 0x31, 0xb3, + 0x64, 0x9e, 0xbe, 0xc6, 0xbd, 0xb2, 0x88, 0x93, + 0xa2, 0x87, 0x1b, 0x00, 0xbe, 0x24, 0x1f, 0x22, + 0x47, 0x0e, 0xb6, 0x5d, 0xfe, 0x46, 0x5e, 0xb1, + 0x99, 0x8c, 0x38, 0xd2, 0xe3, 0x21, 0xc7, 0x5b, + 0x60, 0xfb, 0x59, 0x6f, 0x2c, 0x5f, 0xc8, 0x63, + 0x1d, 0x04, 0x30, 0x7a, 0xde, 0x61, 0xdf, 0x19, + 0xa6, 0x62, 0x4c, 0x4b, 0x7a, 0xc0, 0x7f, 0x73, + 0x37, 0xd4, 0x30, 0xba, 0x63, 0x83, 0x0f, 0x69, + 0xa7, 0x76, 0x07, 0xa1, 0x87, 0x01, 0xc4, 0x7c, + 0x3e, 0xc6, 0x2f, 0xcb, 0x7f, 0x41, 0xa4, 0x42, + 0x47, 0xc1, 0x04, 0x62, 0xff, 0x00, 0x63, 0xff, + 0xc4, 0x00, 0x27, 0x10, 0x01, 0x01, 0x00, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x21, + 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xa1, + 0x10, 0x30, 0x40, 0xc1, 0x20, 0x50, 0xb1, 0xf0, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x01, + 0x3f, 0x10, 0xfe, 0x03, 0x67, 0xa4, 0x9a, 0x04, + 0x01, 0xca, 0x72, 0x99, 0xa0, 0xc6, 0x92, 0x53, + 0xe5, 0x14, 0xa3, 0x97, 0xe5, 0xcc, 0xc8, 0x94, + 0x2e, 0xac, 0xde, 0x02, 0x67, 0x8f, 0xf3, 0xde, + 0x4f, 0xfe, 0x98, 0x2f, 0x97, 0x00, 0x7c, 0x0c, + 0xd7, 0x79, 0x3c, 0xfa, 0x53, 0x77, 0xbd, 0x61, + 0x46, 0x15, 0x86, 0xc0, 0x56, 0xbb, 0xf9, 0xce, + 0xdf, 0x84, 0x2a, 0x7d, 0x7f, 0x0b, 0xc2, 0x39, + 0x69, 0xf8, 0x5c, 0xff, 0x00, 0xe5, 0xff, 0x00, + 0xde, 0x09, 0x68, 0xe1, 0xa3, 0xf4, 0x3f, 0xe4, + 0x48, 0x57, 0x59, 0x38, 0xae, 0x4f, 0xb0, 0x21, + 0x59, 0x8c, 0xa9, 0x14, 0x04, 0xca, 0xde, 0x1c, + 0xc7, 0xde, 0x56, 0xbe, 0x46, 0x84, 0xb3, 0xf4, + 0x35, 0x86, 0x28, 0xa6, 0xd7, 0x43, 0x69, 0xd0, + 0x7e, 0xcf, 0x39, 0x60, 0x4a, 0x88, 0x9c, 0x7c, + 0x7d, 0x65, 0x44, 0xd7, 0x9c, 0x0d, 0x83, 0x8d, + 0x60, 0x38, 0x53, 0x51, 0x3b, 0x6e, 0xa6, 0xb1, + 0xbc, 0x61, 0x09, 0x36, 0x63, 0x9c, 0xd5, 0x65, + 0x8e, 0x6e, 0x3a, 0xe7, 0x98, 0x10, 0xe4, 0x05, + 0xea, 0x8c, 0x87, 0x2f, 0xda, 0x14, 0x3f, 0x2d, + 0x24, 0xcb, 0x0e, 0xea, 0x50, 0x21, 0x35, 0x20, + 0x44, 0x69, 0xbd, 0xe1, 0xb1, 0xf3, 0x34, 0xcb, + 0xbd, 0x54, 0x22, 0xea, 0x69, 0xbc, 0x5c, 0x9b, + 0x35, 0x24, 0x4a, 0xbb, 0x89, 0x2a, 0xbd, 0x58, + 0xc2, 0x97, 0xe7, 0xeb, 0x28, 0x0e, 0xe0, 0x25, + 0x7a, 0xfb, 0x31, 0x47, 0xa3, 0x2a, 0x12, 0x0d, + 0xa1, 0x38, 0x7e, 0x78, 0xc2, 0xff, 0x00, 0xd7, + 0x21, 0xd8, 0xb5, 0x06, 0x32, 0x8b, 0x8d, 0x4d, + 0x09, 0xd5, 0x12, 0xd2, 0x08, 0xbd, 0x9c, 0x1a, + 0x5f, 0xef, 0xa2, 0x07, 0x82, 0xc0, 0x98, 0x45, + 0x78, 0x36, 0x6e, 0x62, 0xa4, 0x76, 0x23, 0x46, + 0x23, 0x32, 0x29, 0x90, 0x00, 0x20, 0x48, 0xa8, + 0xe4, 0x3a, 0x73, 0xe3, 0x9c, 0xba, 0x79, 0x5f, + 0xbe, 0x51, 0xed, 0xd8, 0xfa, 0xc8, 0xc5, 0xfc, + 0x2a, 0x3e, 0x81, 0xda, 0x9f, 0x90, 0x66, 0xef, + 0xd8, 0xd5, 0x40, 0xe1, 0xf5, 0xfb, 0x62, 0x3f, + 0x52, 0x5e, 0x78, 0x13, 0xdf, 0x23, 0xe3, 0xe7, + 0x07, 0x30, 0xd8, 0x6c, 0x00, 0x97, 0xde, 0xf3, + 0xac, 0xfd, 0x16, 0x45, 0xa6, 0x18, 0x56, 0xbb, + 0x40, 0x7e, 0x60, 0x22, 0xdd, 0xeb, 0x25, 0x66, + 0x2b, 0xdc, 0xca, 0x2c, 0x9e, 0x2a, 0xd6, 0xc1, + 0xb3, 0xb1, 0x70, 0x91, 0x98, 0xc5, 0x0e, 0x86, + 0x90, 0x12, 0x01, 0x24, 0xc1, 0x03, 0xe3, 0x54, + 0x7a, 0x5e, 0xd3, 0x4b, 0x78, 0x1c, 0xaa, 0xe0, + 0x7c, 0x60, 0xab, 0x75, 0x1c, 0x31, 0x27, 0x85, + 0xf9, 0x4c, 0xe9, 0x8d, 0x96, 0x0d, 0xbc, 0xea, + 0x1e, 0x0f, 0x0c, 0x0c, 0xa0, 0x13, 0xbc, 0x12, + 0x07, 0x00, 0x05, 0xe1, 0xa7, 0x1a, 0x82, 0x9a, + 0xc2, 0xf2, 0xc2, 0x4a, 0x84, 0x63, 0x8e, 0x07, + 0xf7, 0xea, 0xbc, 0xf9, 0xca, 0x12, 0xa4, 0x06, + 0x96, 0x01, 0x3d, 0xb4, 0xcd, 0x36, 0xe0, 0x5c, + 0x75, 0x2b, 0x0f, 0x33, 0x8c, 0x31, 0x7e, 0x8a, + 0xe7, 0xc2, 0x57, 0x86, 0xfc, 0x61, 0x89, 0x27, + 0x90, 0x71, 0xb1, 0x65, 0x70, 0xc7, 0xed, 0x05, + 0x03, 0xd8, 0x9d, 0x60, 0x50, 0x0b, 0x8c, 0x2a, + 0x7c, 0x4b, 0x93, 0x04, 0x3a, 0x60, 0x15, 0x5c, + 0xaf, 0x0d, 0x41, 0x57, 0xaa, 0x48, 0x42, 0xe0, + 0x6f, 0x0c, 0x55, 0x51, 0x04, 0xb6, 0x06, 0x20, + 0x05, 0xe7, 0x24, 0xb4, 0x3f, 0x0c, 0xfa, 0x81, + 0x47, 0x9d, 0x26, 0x58, 0x50, 0x1b, 0xa5, 0x62, + 0x8a, 0x9e, 0xa3, 0xee, 0x62, 0xc3, 0x2e, 0x40, + 0xd5, 0x08, 0x82, 0xfb, 0x7c, 0x1c, 0x84, 0x8c, + 0x96, 0x81, 0xd8, 0x70, 0x21, 0xf4, 0x62, 0xf0, + 0x44, 0xbb, 0xf0, 0xea, 0x4d, 0xb5, 0xad, 0x61, + 0x88, 0xe1, 0x2e, 0xf5, 0x8a, 0x16, 0x0a, 0x3b, + 0xae, 0x1f, 0x0c, 0xbc, 0xa4, 0x04, 0xe4, 0xaa, + 0x5e, 0x75, 0x54, 0x3d, 0x36, 0xf3, 0x89, 0x24, + 0x68, 0x88, 0x1a, 0xd0, 0x5b, 0x96, 0x66, 0xb2, + 0xee, 0x05, 0xfb, 0x9f, 0xdf, 0x19, 0xd5, 0xf8, + 0x46, 0x87, 0x4f, 0x4e, 0x38, 0x1b, 0x86, 0x75, + 0xe9, 0xc1, 0x39, 0x46, 0xb3, 0x52, 0xe8, 0x51, + 0x5e, 0x00, 0xbc, 0x15, 0xd0, 0xed, 0xcb, 0x27, + 0x66, 0x38, 0x1b, 0xf4, 0x0a, 0xa5, 0x80, 0x7a, + 0x47, 0xf7, 0x89, 0x12, 0x48, 0xa5, 0x53, 0x89, + 0x37, 0x97, 0x85, 0xb7, 0x25, 0x78, 0x7c, 0x09, + 0xa3, 0x46, 0xaf, 0x39, 0xc8, 0x15, 0xf9, 0x2f, + 0x93, 0x8f, 0xf1, 0x86, 0xe4, 0x20, 0x50, 0x07, + 0x00, 0x61, 0x87, 0x65, 0x1b, 0x25, 0xea, 0xce, + 0xb1, 0xe0, 0x7c, 0x11, 0xa7, 0x21, 0xa0, 0x6f, + 0x6a, 0x21, 0xc9, 0x80, 0x85, 0x11, 0x59, 0x7b, + 0x0b, 0xb9, 0x57, 0x0e, 0x8f, 0xc2, 0xc6, 0x61, + 0x88, 0x42, 0x9d, 0x0f, 0x26, 0x77, 0xc9, 0xb6, + 0x15, 0xf2, 0x62, 0xf3, 0xeb, 0xd7, 0x09, 0x02, + 0xaa, 0x84, 0x0b, 0xe7, 0x5e, 0xb1, 0x67, 0x31, + 0x02, 0xae, 0xbb, 0x7b, 0xcf, 0x9c, 0xb4, 0x6b, + 0xeb, 0x14, 0x6c, 0x02, 0x18, 0x7f, 0x19, 0x41, + 0xc9, 0xf9, 0xc8, 0xf2, 0x64, 0x79, 0x32, 0x9e, + 0x71, 0x04, 0xa9, 0xbe, 0x3d, 0xe4, 0x0c, 0xa5, + 0xca, 0x79, 0xc8, 0xf2, 0x64, 0x3d, 0x99, 0x1e, + 0x4c, 0x8f, 0x26, 0x52, 0xca, 0x5c, 0x11, 0xef, + 0x29, 0xe7, 0x04, 0x7b, 0xfe, 0x13, 0x14, 0x73, + 0x1e, 0xb0, 0x33, 0xac, 0xb4, 0x42, 0x23, 0xf5, + 0x8a, 0x66, 0x61, 0x69, 0x5a, 0x8f, 0x6f, 0x27, + 0xc0, 0xf7, 0xa5, 0x20, 0x1d, 0x9f, 0x20, 0x3f, + 0xf7, 0x0d, 0xd8, 0xbe, 0xdd, 0xc7, 0x95, 0x6b, + 0x73, 0x97, 0xf0, 0xe7, 0xe8, 0xb2, 0x52, 0x80, + 0x67, 0xec, 0xbe, 0x06, 0x46, 0xd8, 0xc3, 0x73, + 0x1d, 0x73, 0xf3, 0x81, 0xa0, 0x29, 0xa0, 0x74, + 0xee, 0xda, 0x45, 0x1d, 0x3a, 0x19, 0xed, 0xaa, + 0x22, 0x92, 0xf3, 0x03, 0x42, 0xe4, 0x43, 0x93, + 0x6a, 0x23, 0x59, 0x6b, 0x4a, 0x07, 0xa3, 0x26, + 0x5c, 0x46, 0xe8, 0xa8, 0xa3, 0x62, 0x40, 0xbd, + 0x80, 0xb2, 0xf8, 0x19, 0x9a, 0x4c, 0x35, 0x0a, + 0x2e, 0x21, 0xc1, 0xae, 0x04, 0xd9, 0xc3, 0x6a, + 0x03, 0x41, 0x13, 0x65, 0x16, 0x68, 0x14, 0x73, + 0x54, 0xb5, 0x0f, 0xdf, 0x07, 0x90, 0x40, 0xa7, + 0xb8, 0xd8, 0x6d, 0x8a, 0x87, 0x45, 0xd0, 0xda, + 0xef, 0x39, 0xbd, 0x95, 0x58, 0x0b, 0xa1, 0x87, + 0x06, 0x32, 0x6f, 0xde, 0x02, 0x00, 0xd8, 0xd0, + 0xdf, 0x7b, 0xbc, 0xe2, 0xdf, 0xb6, 0x32, 0x72, + 0x30, 0x4b, 0x33, 0xa5, 0xe0, 0x8b, 0xb2, 0x72, + 0x50, 0x69, 0xc2, 0x17, 0x3c, 0x1d, 0x65, 0xd0, + 0xe1, 0x1c, 0x87, 0xe8, 0x2c, 0x74, 0xb9, 0x09, + 0x79, 0xf6, 0x12, 0x0f, 0x23, 0xcf, 0x5a, 0xe1, + 0x6c, 0x41, 0x45, 0x71, 0x7a, 0x9f, 0x40, 0xe0, + 0xdd, 0x70, 0x51, 0x98, 0x92, 0x35, 0x06, 0xfe, + 0x70, 0x1a, 0x68, 0xc6, 0xd7, 0x34, 0x30, 0x95, + 0xf5, 0x89, 0xa1, 0xc8, 0xf8, 0xc0, 0xf9, 0xb4, + 0x54, 0x4e, 0xb7, 0x28, 0x5f, 0x60, 0x9d, 0x65, + 0xbb, 0xfd, 0x23, 0x51, 0x62, 0x24, 0xa7, 0x88, + 0x38, 0xe2, 0x58, 0xa6, 0x0c, 0xa4, 0xf2, 0xe4, + 0xfa, 0xeb, 0x13, 0x59, 0xbf, 0x4c, 0xa2, 0xb8, + 0x04, 0xe6, 0xd5, 0xb4, 0x2a, 0x00, 0x7d, 0x8e, + 0x26, 0xe3, 0x55, 0xd8, 0xb4, 0x71, 0x93, 0x9a, + 0x82, 0xd0, 0xb9, 0x08, 0x3a, 0x48, 0x26, 0xbe, + 0x3f, 0xe0, 0xf0, 0xe1, 0x65, 0x8c, 0xb3, 0xe1, + 0x5e, 0x57, 0x6b, 0x4e, 0x6d, 0xa0, 0x55, 0xa0, + 0x15, 0xbf, 0x07, 0x6f, 0xde, 0x05, 0x58, 0x02, + 0xe6, 0x8d, 0xcf, 0x56, 0xff, 0x00, 0x28, 0x0a, + 0xb0, 0xcd, 0xa3, 0xbd, 0x32, 0x01, 0x51, 0x1f, + 0x6e, 0x2d, 0xac, 0x02, 0xbe, 0xc8, 0xe9, 0xe2, + 0x94, 0x68, 0xf1, 0xb1, 0xa2, 0x7f, 0x30, 0x4e, + 0x7c, 0xe0, 0xa9, 0x39, 0x46, 0x65, 0x5c, 0x4b, + 0x9f, 0x28, 0x14, 0x3e, 0x7f, 0x6c, 0x42, 0xdf, + 0x17, 0x57, 0x05, 0xba, 0x8a, 0x7c, 0x3e, 0x60, + 0x84, 0x88, 0x9d, 0x58, 0xf0, 0x02, 0xe2, 0x53, + 0xc1, 0x10, 0x99, 0x79, 0x52, 0xb2, 0x8f, 0x18, + 0x60, 0x13, 0x09, 0x81, 0x08, 0xd1, 0x2b, 0x44, + 0x89, 0x12, 0x65, 0x54, 0x2b, 0x30, 0x51, 0x4f, + 0xbd, 0x3e, 0x71, 0x37, 0x36, 0xf0, 0x02, 0xaa, + 0xf5, 0x89, 0xef, 0x43, 0x38, 0x72, 0x1e, 0x4f, + 0x79, 0x40, 0xb8, 0x9d, 0x52, 0x7e, 0x69, 0x7c, + 0x7a, 0xe3, 0x3f, 0xc9, 0xa9, 0xaf, 0xdc, 0x69, + 0x00, 0xe6, 0x8c, 0x30, 0xa6, 0xae, 0x78, 0xd9, + 0xcc, 0xfa, 0x25, 0x3a, 0x70, 0xf9, 0x73, 0x97, + 0x94, 0xb6, 0x92, 0x62, 0x43, 0x00, 0x6a, 0x9b, + 0xd6, 0x5e, 0xa8, 0x7a, 0x03, 0xb0, 0xf0, 0x1d, + 0x89, 0xb1, 0x04, 0xcb, 0x85, 0x41, 0xdb, 0x01, + 0x9a, 0x31, 0x5d, 0x20, 0xec, 0xc4, 0xef, 0xe8, + 0xb2, 0x85, 0x0d, 0x93, 0x17, 0x2d, 0xb1, 0xe2, + 0x8d, 0x9f, 0x3e, 0x89, 0x45, 0x14, 0x26, 0x8a, + 0xe5, 0xd6, 0xea, 0x95, 0xbf, 0x3f, 0x86, 0x68, + 0xc3, 0x45, 0x17, 0xf2, 0x28, 0x8a, 0xb0, 0x97, + 0x47, 0xf5, 0x13, 0xa7, 0x11, 0x0a, 0x0f, 0x4c, + 0xef, 0x1c, 0xf0, 0x80, 0x84, 0xc0, 0x35, 0xe7, + 0x6c, 0x8b, 0xbb, 0xbc, 0x68, 0x63, 0x0c, 0x20, + 0xa3, 0x60, 0x4b, 0x44, 0x08, 0x76, 0x47, 0x7b, + 0x85, 0x15, 0x00, 0xe9, 0x13, 0x48, 0xf2, 0x62, + 0x29, 0xc9, 0x36, 0x64, 0xb7, 0x94, 0x0b, 0x34, + 0x6d, 0x2b, 0x80, 0x42, 0x25, 0x53, 0x73, 0x03, + 0x72, 0x18, 0x4f, 0x17, 0x27, 0x8e, 0x8a, 0x81, + 0xda, 0x80, 0x05, 0x60, 0xf3, 0xb5, 0x77, 0x8e, + 0xaf, 0x73, 0xde, 0xad, 0x3b, 0x0a, 0xfd, 0x06, + 0x00, 0x19, 0xb9, 0x50, 0x06, 0x00, 0x46, 0x82, + 0x84, 0x3a, 0x6c, 0xf0, 0x55, 0x02, 0x48, 0x34, + 0xb4, 0x97, 0x48, 0x9a, 0x87, 0x38, 0x9d, 0x46, + 0xcf, 0xce, 0x51, 0xe9, 0x21, 0x74, 0x44, 0x79, + 0xc1, 0x46, 0xe7, 0x83, 0x08, 0x84, 0x69, 0xb0, + 0x36, 0xa3, 0x53, 0x14, 0xf9, 0x46, 0x30, 0x93, + 0x71, 0x35, 0xb7, 0xaa, 0x4c, 0x2d, 0x4c, 0x01, + 0xf3, 0x90, 0x60, 0xaa, 0xbb, 0xd3, 0x7a, 0xa7, + 0xb1, 0x86, 0x70, 0x82, 0xa5, 0xb2, 0x20, 0x8c, + 0xa9, 0xd6, 0x00, 0xa2, 0x8d, 0x29, 0x1c, 0x9a, + 0x76, 0x68, 0x79, 0xc6, 0x15, 0x15, 0x03, 0xb4, + 0x04, 0xd0, 0xa8, 0x54, 0xad, 0x45, 0x5e, 0xa1, + 0x5b, 0x45, 0x1d, 0x3a, 0x61, 0xf2, 0xe1, 0x60, + 0xc1, 0x32, 0x5c, 0x2b, 0xb4, 0x0d, 0x36, 0x69, + 0x37, 0x00, 0xc6, 0x72, 0x76, 0xe1, 0x3c, 0x20, + 0x89, 0x1d, 0x5c, 0xdd, 0x56, 0xcc, 0x4e, 0x6e, + 0x74, 0xdf, 0xec, 0x74, 0xe4, 0xd0, 0x65, 0x55, + 0x83, 0xd6, 0xbf, 0x83, 0xf2, 0xc9, 0x79, 0xcb, + 0x2f, 0x10, 0x01, 0x01, 0x04, 0x6f, 0x2a, 0xe3, + 0x48, 0x94, 0x15, 0xf3, 0x1d, 0x0a, 0x2a, 0xea, + 0xb4, 0xf1, 0x82, 0xab, 0x64, 0x66, 0x48, 0xa2, + 0x4a, 0x50, 0x6a, 0x6b, 0x59, 0x27, 0x13, 0x7c, + 0xc9, 0x20, 0x1a, 0x34, 0x00, 0x03, 0xdd, 0x5f, + 0xfa, 0x3f, 0xff, 0xd9, +}; + +static const uint8_t data_tm4c_jpg[] = +{ + /* /tm4c.jpg */ + 0x2f, 0x74, 0x6d, 0x34, 0x63, 0x2e, 0x6a, 0x70, + 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, + 0x08, 0x05, 0x05, 0x04, 0x04, 0x05, 0x0a, 0x07, + 0x07, 0x06, 0x08, 0x0c, 0x0a, 0x0c, 0x0c, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0d, 0x0e, 0x12, 0x10, 0x0d, + 0x0e, 0x11, 0x0e, 0x0b, 0x0b, 0x10, 0x16, 0x10, + 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0x0c, 0x0f, + 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, + 0x14, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x03, 0x04, + 0x04, 0x05, 0x04, 0x05, 0x09, 0x05, 0x05, 0x09, + 0x14, 0x0d, 0x0b, 0x0d, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc2, + 0x00, 0x11, 0x08, 0x00, 0x4b, 0x00, 0x4b, 0x03, + 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x00, 0x02, + 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x04, 0x08, 0x01, 0x05, 0x07, 0x03, 0x02, 0xff, + 0xc4, 0x00, 0x19, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, + 0x03, 0x05, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x10, 0x03, 0x10, 0x00, 0x00, 0x01, + 0x50, 0xb1, 0x28, 0x0c, 0x81, 0x80, 0x18, 0x7d, + 0x3c, 0xfa, 0xff, 0x00, 0x6f, 0x2f, 0x59, 0xf9, + 0xfd, 0xb4, 0x67, 0x37, 0xa3, 0x2e, 0x0f, 0x01, + 0x50, 0x73, 0x27, 0x8f, 0x7d, 0x7c, 0xab, 0x5d, + 0x1e, 0x1d, 0x4f, 0xe7, 0xf7, 0x54, 0x5c, 0x6f, + 0x70, 0x48, 0x30, 0x49, 0x17, 0x07, 0x9e, 0x9e, + 0x7d, 0xe7, 0xb7, 0x97, 0x85, 0x9d, 0x8f, 0x87, + 0xae, 0xa5, 0xe7, 0x4e, 0xca, 0xb8, 0x41, 0x36, + 0x43, 0x0e, 0xb2, 0xc3, 0xd1, 0xe1, 0xa2, 0xd4, + 0x0e, 0xeb, 0xcb, 0xd1, 0x50, 0xf3, 0x55, 0x54, + 0x02, 0x55, 0x9d, 0x37, 0xdf, 0xc7, 0xda, 0xcc, + 0x81, 0x61, 0x79, 0xfd, 0xaa, 0x3c, 0xaa, 0xaa, + 0x19, 0x1e, 0x3d, 0x7c, 0xb6, 0x56, 0x00, 0x05, + 0x94, 0xf2, 0xf5, 0xa9, 0x51, 0x31, 0x54, 0x8d, + 0xbe, 0xb3, 0xb9, 0xd6, 0x40, 0x00, 0x2d, 0x16, + 0x37, 0x55, 0x25, 0xb2, 0x67, 0x30, 0x49, 0xda, + 0x9e, 0x68, 0x8e, 0x41, 0x3e, 0xc8, 0x85, 0xa8, + 0xce, 0xaa, 0x9a, 0xea, 0x4f, 0x1d, 0x67, 0xa1, + 0x46, 0xbc, 0xfb, 0x25, 0x10, 0x4d, 0x5d, 0x5a, + 0xbc, 0xd9, 0xaa, 0x8c, 0x80, 0x00, 0x18, 0x03, + 0xd8, 0xb1, 0x6b, 0xff, 0xc4, 0x00, 0x25, 0x10, + 0x00, 0x00, 0x06, 0x03, 0x00, 0x01, 0x05, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x01, 0x13, + 0x16, 0x36, 0x07, 0x10, 0x11, 0x15, 0x21, 0x12, + 0x14, 0x31, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, + 0x00, 0x01, 0x05, 0x02, 0xb8, 0x5f, 0x25, 0x73, + 0x60, 0xee, 0x26, 0x87, 0x71, 0x34, 0x3b, 0x89, + 0xa1, 0xdc, 0x4d, 0x0e, 0xe2, 0x68, 0x77, 0x13, + 0x42, 0x12, 0xc5, 0x39, 0x2c, 0xf3, 0xfb, 0xeb, + 0x88, 0x29, 0xa3, 0xbc, 0x8b, 0xb2, 0xe4, 0xa5, + 0xb5, 0xa7, 0x03, 0x02, 0xa4, 0x93, 0x8f, 0x4e, + 0xb4, 0x30, 0x96, 0xab, 0x47, 0xd7, 0x4a, 0xc6, + 0xbc, 0x59, 0x0b, 0x67, 0x1a, 0xcd, 0x9a, 0xce, + 0x3d, 0x3d, 0x66, 0xb2, 0x3f, 0x53, 0x11, 0x5e, + 0x26, 0xc1, 0x56, 0xcf, 0xcc, 0x2d, 0x85, 0x0c, + 0xb9, 0xb7, 0x66, 0x3e, 0x4d, 0x65, 0x9e, 0xc4, + 0xcc, 0xbd, 0x68, 0xdd, 0x79, 0x18, 0xb7, 0x2c, + 0xeb, 0xb2, 0xee, 0xd1, 0x9d, 0xfb, 0x38, 0x51, + 0x04, 0xfa, 0x40, 0x84, 0x55, 0xd9, 0xd6, 0x1b, + 0x05, 0x4f, 0xf6, 0x0a, 0x7d, 0x2c, 0x38, 0xb8, + 0xbb, 0xab, 0xe7, 0x41, 0x20, 0x1d, 0x13, 0x0a, + 0x56, 0xd5, 0xce, 0x33, 0x5a, 0x55, 0x32, 0x34, + 0xa3, 0x91, 0x54, 0x9f, 0xc7, 0x65, 0x89, 0x36, + 0x0d, 0x82, 0xa1, 0xfb, 0x5f, 0xb5, 0x79, 0x37, + 0xc7, 0xbb, 0x66, 0xd9, 0x72, 0xb2, 0x25, 0x2a, + 0x09, 0xff, 0x00, 0x31, 0xb0, 0x6c, 0x14, 0xdf, + 0x1d, 0xb5, 0x79, 0x37, 0xb7, 0xfa, 0x18, 0xa1, + 0x86, 0xa9, 0x6c, 0x1b, 0x06, 0xc1, 0xb0, 0x52, + 0xbc, 0x6a, 0xd5, 0xe4, 0xcd, 0x6a, 0x2f, 0x5e, + 0x40, 0x99, 0xb2, 0xa4, 0x51, 0xa3, 0x43, 0x22, + 0x6d, 0x83, 0x60, 0xd8, 0x36, 0x0d, 0x82, 0x8f, + 0xfb, 0x58, 0xb2, 0x1c, 0xa9, 0xdb, 0x63, 0xa6, + 0x61, 0xd4, 0x87, 0xf5, 0x05, 0xe4, 0x6b, 0xc7, + 0x12, 0x2e, 0xf1, 0xf6, 0x65, 0xd3, 0xf0, 0xf9, + 0xba, 0x8b, 0x3f, 0x49, 0x8b, 0xb7, 0x05, 0x24, + 0x73, 0xd5, 0x4c, 0xb2, 0x4b, 0x37, 0xc5, 0x13, + 0xc5, 0x6d, 0xa5, 0xc9, 0x2d, 0x11, 0x72, 0x8e, + 0xe1, 0x9e, 0x61, 0x5f, 0x8c, 0xad, 0x77, 0x72, + 0xb2, 0x98, 0xb4, 0x98, 0x8e, 0x17, 0xb4, 0xe5, + 0x75, 0xd4, 0xb9, 0xaa, 0xe5, 0x37, 0x16, 0xb5, + 0xdd, 0x62, 0x46, 0x67, 0x32, 0x29, 0xd0, 0x48, + 0x6e, 0x4a, 0xd9, 0x59, 0x8c, 0x7e, 0xfb, 0x8d, + 0x86, 0x1c, 0x6c, 0x38, 0xe3, 0x61, 0x87, 0x1b, + 0x0e, 0x38, 0xd8, 0x61, 0xc6, 0xc3, 0x8e, 0x36, + 0x1c, 0x23, 0x4c, 0x86, 0xda, 0xd5, 0xba, 0x4d, + 0x9b, 0x7f, 0xff, 0xc4, 0x00, 0x21, 0x11, 0x00, + 0x01, 0x04, 0x01, 0x03, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x02, 0x11, 0x20, 0x31, 0x10, 0x12, 0x21, + 0x13, 0x30, 0x32, 0x40, 0x51, 0xff, 0xda, 0x00, + 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, 0x01, 0xbb, + 0xdd, 0xb4, 0x2e, 0xa3, 0xd3, 0x4c, 0x89, 0xec, + 0x3e, 0x09, 0x50, 0x99, 0xe2, 0x2e, 0xf7, 0x7c, + 0xd2, 0x13, 0x71, 0x62, 0xa1, 0x42, 0x84, 0xdc, + 0x54, 0xf1, 0x51, 0x8a, 0x9e, 0x6a, 0x28, 0x6c, + 0x3d, 0xff, 0x00, 0xff, 0xc4, 0x00, 0x22, 0x11, + 0x00, 0x01, 0x04, 0x00, 0x05, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x02, 0x11, 0x20, 0x03, 0x10, 0x12, + 0x31, 0x32, 0x13, 0x21, 0x30, 0x40, 0x41, 0xff, + 0xda, 0x00, 0x08, 0x01, 0x02, 0x01, 0x01, 0x3f, + 0x01, 0xbe, 0x1b, 0x75, 0x95, 0xd2, 0x62, 0x70, + 0x83, 0x1e, 0x0c, 0x39, 0x01, 0x4a, 0x7f, 0x23, + 0x76, 0x37, 0xe9, 0xca, 0x53, 0xb9, 0x1b, 0x35, + 0x03, 0x9b, 0xb7, 0xa8, 0x13, 0x53, 0xbd, 0x47, + 0x6a, 0x9d, 0xe8, 0x2c, 0x7d, 0xff, 0x00, 0xff, + 0xc4, 0x00, 0x3f, 0x10, 0x00, 0x02, 0x01, 0x03, + 0x01, 0x03, 0x06, 0x0a, 0x09, 0x02, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, + 0x04, 0x11, 0x12, 0x13, 0x21, 0x31, 0x05, 0x22, + 0x34, 0x41, 0x51, 0xd1, 0x14, 0x20, 0x32, 0x61, + 0x71, 0x81, 0x91, 0x92, 0x93, 0xb3, 0x10, 0x15, + 0x23, 0x42, 0x52, 0x62, 0x72, 0x74, 0xa1, 0xa2, + 0xb2, 0x06, 0x24, 0x73, 0x83, 0x94, 0xb1, 0xf1, + 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x06, + 0x3f, 0x02, 0xbc, 0x8a, 0x0b, 0x87, 0xb7, 0x8a, + 0x09, 0x1a, 0x25, 0x58, 0xd8, 0x8e, 0x07, 0x1d, + 0x55, 0xd3, 0xe7, 0xf8, 0xad, 0xdf, 0x5d, 0x3e, + 0x7f, 0x8a, 0xdd, 0xf5, 0xd3, 0xe7, 0xf8, 0xad, + 0xdf, 0x5d, 0x3e, 0x7f, 0x8a, 0xdd, 0xf5, 0xd3, + 0xe7, 0xf8, 0xad, 0xdf, 0x5d, 0x3e, 0x7f, 0x8a, + 0xdd, 0xf4, 0x13, 0xc3, 0xee, 0x04, 0x4b, 0xbe, + 0x46, 0xda, 0xb7, 0x0f, 0x6d, 0x74, 0x8b, 0x8f, + 0xf9, 0x0f, 0xdf, 0x51, 0x49, 0x37, 0x3a, 0x4c, + 0xba, 0x96, 0xed, 0xc3, 0x11, 0x9f, 0xe2, 0xb9, + 0x48, 0xba, 0x97, 0x41, 0x79, 0x26, 0xa5, 0x07, + 0x19, 0x1a, 0xbb, 0x6b, 0x93, 0x60, 0x6b, 0x7b, + 0x98, 0x21, 0x9e, 0xc8, 0xdf, 0x4b, 0x27, 0x84, + 0x6a, 0xd2, 0xba, 0x18, 0xe9, 0xf2, 0x7c, 0xdc, + 0x6a, 0x18, 0x35, 0x37, 0xd6, 0xaf, 0x77, 0xa0, + 0xfe, 0x11, 0x0f, 0xda, 0x6f, 0xc7, 0x13, 0xba, + 0x22, 0xde, 0xba, 0xbb, 0xbc, 0xb9, 0xb5, 0xbb, + 0x9e, 0xd9, 0x4c, 0x09, 0x0c, 0x0e, 0xfb, 0x26, + 0xe7, 0xa6, 0x4b, 0x31, 0xc7, 0x68, 0x23, 0xd3, + 0x4b, 0xc9, 0xf1, 0xc3, 0x77, 0x15, 0xb6, 0x75, + 0xb2, 0x4e, 0x98, 0x99, 0x63, 0xc6, 0xa3, 0xbb, + 0xb7, 0x1c, 0x3d, 0x55, 0xca, 0xed, 0x3c, 0x32, + 0x34, 0x70, 0xac, 0x12, 0xdb, 0xc7, 0x3d, 0xca, + 0xdb, 0x73, 0x64, 0xce, 0xe6, 0x66, 0xeb, 0x1c, + 0x3d, 0x55, 0xca, 0x30, 0xd9, 0x34, 0xe6, 0xfe, + 0x3b, 0xbd, 0x94, 0x0b, 0x21, 0xf2, 0x97, 0x11, + 0xea, 0xf6, 0x6b, 0x27, 0x3d, 0x82, 0x9a, 0xde, + 0xd8, 0x31, 0x47, 0x4d, 0xa0, 0x67, 0x39, 0x66, + 0xcf, 0xd1, 0x1f, 0xfa, 0x92, 0xfc, 0xc6, 0xae, + 0x51, 0x85, 0x70, 0x1a, 0x4b, 0xd7, 0x51, 0x9e, + 0x1b, 0xde, 0x93, 0xc1, 0xee, 0x9a, 0x5d, 0x11, + 0x1b, 0x45, 0x32, 0xae, 0xcc, 0xe9, 0xe7, 0xa9, + 0x41, 0x9e, 0xac, 0x06, 0xff, 0x00, 0xdd, 0xd4, + 0xaf, 0x2d, 0xf4, 0x57, 0x30, 0xcc, 0x23, 0x7c, + 0x99, 0x78, 0x91, 0xa9, 0x17, 0xd3, 0x80, 0x0d, + 0x5d, 0xb1, 0xe5, 0x91, 0x67, 0x7b, 0x18, 0xd8, + 0xcd, 0x13, 0xf5, 0xec, 0xc0, 0x0a, 0x3c, 0xfd, + 0x95, 0x71, 0x7a, 0x2f, 0x31, 0x2d, 0xcc, 0x53, + 0x6d, 0xf3, 0xbd, 0x8f, 0x5e, 0x9c, 0xfe, 0x6c, + 0x1f, 0x61, 0xaf, 0xaa, 0x6e, 0x6e, 0x0b, 0x45, + 0xb2, 0x8f, 0x29, 0xd5, 0x8f, 0x2c, 0x0f, 0x51, + 0x63, 0x42, 0xea, 0x7b, 0x97, 0x33, 0x31, 0xd6, + 0xb9, 0xfb, 0xbc, 0xd0, 0xb9, 0xf4, 0xe9, 0x02, + 0x97, 0x5b, 0x6a, 0xd2, 0xa1, 0x47, 0xa3, 0xe8, + 0x87, 0xf5, 0xcb, 0xf3, 0x1a, 0xaf, 0xe2, 0x27, + 0x48, 0x7b, 0xd7, 0x52, 0x7b, 0x39, 0xf5, 0xb5, + 0x87, 0x95, 0xda, 0x59, 0x1f, 0x56, 0xe6, 0x97, + 0x9d, 0xa1, 0x74, 0xe8, 0x18, 0x1c, 0x58, 0x86, + 0xe1, 0xdb, 0x45, 0x53, 0x95, 0x63, 0x5d, 0x18, + 0xcf, 0xda, 0x32, 0xaa, 0xef, 0x6c, 0x67, 0xb3, + 0x78, 0xf6, 0x91, 0x52, 0xc9, 0x25, 0xd2, 0x8d, + 0x9e, 0x73, 0xb4, 0x07, 0x3b, 0x94, 0x1c, 0x7a, + 0x7c, 0xde, 0x63, 0x48, 0x91, 0xf2, 0x90, 0xc1, + 0xd6, 0xba, 0x06, 0x79, 0xcc, 0x0c, 0xb9, 0x0b, + 0xdb, 0xb9, 0x3f, 0xac, 0x76, 0xd2, 0x5c, 0x35, + 0xf4, 0x72, 0x98, 0x8b, 0x87, 0x05, 0xb2, 0x0e, + 0x8d, 0x38, 0xc7, 0x9b, 0x7d, 0x17, 0xdb, 0x24, + 0xa0, 0x4a, 0x62, 0xe6, 0xf6, 0x8f, 0xa6, 0x0f, + 0xd7, 0x27, 0xcc, 0x6a, 0xe5, 0x6f, 0xdd, 0x49, + 0xfd, 0xc7, 0xc4, 0x08, 0xbe, 0xb3, 0xd9, 0x4a, + 0x88, 0x30, 0xa3, 0xc4, 0xb6, 0xfd, 0x52, 0x7c, + 0xc6, 0xae, 0x55, 0xfd, 0xd4, 0x9f, 0xdc, 0x7c, + 0x4f, 0xce, 0x78, 0xf8, 0xb6, 0xbe, 0x99, 0x3e, + 0x63, 0x57, 0x2b, 0x7e, 0xea, 0x4f, 0xee, 0x35, + 0xf5, 0xb4, 0x6d, 0x0f, 0x83, 0xed, 0x84, 0x3a, + 0x0b, 0xe1, 0xf2, 0x48, 0x1d, 0x98, 0xc6, 0xfe, + 0xda, 0xd0, 0x51, 0xb5, 0x1e, 0x18, 0x1c, 0x7d, + 0x15, 0xae, 0x54, 0x2a, 0x7e, 0xe8, 0x61, 0xe3, + 0x5a, 0x7a, 0x64, 0xf9, 0x8d, 0x5c, 0xa4, 0xcf, + 0x18, 0x99, 0x16, 0xf1, 0xc9, 0x8c, 0x92, 0x03, + 0x0d, 0x5c, 0x37, 0x54, 0x76, 0xdf, 0xe1, 0xfb, + 0x7b, 0xa7, 0x68, 0x19, 0x6e, 0x9e, 0xce, 0x02, + 0x49, 0xc9, 0x07, 0x8e, 0xae, 0x20, 0x36, 0x9f, + 0xe2, 0xb9, 0x32, 0xda, 0xc6, 0x69, 0x66, 0x9a, + 0xca, 0x23, 0x04, 0xd2, 0x31, 0xf4, 0x61, 0x73, + 0xd6, 0x7c, 0xae, 0x14, 0xd9, 0xe4, 0xd9, 0x1e, + 0x65, 0xba, 0x96, 0x46, 0x46, 0xb6, 0x57, 0xda, + 0x0d, 0xaf, 0x93, 0x9d, 0xff, 0x00, 0xa7, 0xaf, + 0x7d, 0x48, 0x13, 0x91, 0x2e, 0xa4, 0xd5, 0x2e, + 0xd1, 0x1d, 0xad, 0x78, 0x11, 0xbb, 0x65, 0x81, + 0xc4, 0x63, 0x3b, 0xf3, 0xc7, 0xaa, 0x9b, 0xc1, + 0xec, 0xee, 0x15, 0x5f, 0xc9, 0x8c, 0xc5, 0xbf, + 0x3c, 0x0e, 0xe1, 0xf9, 0xb7, 0x56, 0xa8, 0xad, + 0x67, 0x95, 0x7b, 0x52, 0x32, 0x45, 0x15, 0x4b, + 0x3b, 0x87, 0x61, 0xc4, 0x2c, 0x4c, 0x71, 0x48, + 0x65, 0x8a, 0x48, 0x83, 0x8c, 0xae, 0xb5, 0x23, + 0x50, 0xf3, 0x55, 0x97, 0xfb, 0x9f, 0x31, 0xab, + 0x95, 0x41, 0x18, 0x3e, 0x13, 0x21, 0xfe, 0x69, + 0x6e, 0xac, 0xa6, 0x30, 0x4e, 0xbb, 0x83, 0x0a, + 0xcf, 0xae, 0x9f, 0xec, 0xd5, 0x63, 0x62, 0xcd, + 0xa7, 0xf0, 0x93, 0x21, 0x72, 0x41, 0xf5, 0xe3, + 0xcf, 0x81, 0x9a, 0xda, 0xa5, 0xb4, 0x49, 0x83, + 0x2f, 0x30, 0x0e, 0x6f, 0x3e, 0x21, 0x19, 0xdd, + 0xc3, 0xab, 0x34, 0x93, 0xec, 0x34, 0xca, 0xb8, + 0xc1, 0x57, 0xdd, 0xe5, 0x87, 0xff, 0x00, 0xb1, + 0xec, 0xa9, 0x16, 0x78, 0x51, 0xb6, 0x9c, 0x74, + 0xe0, 0x7d, 0xe0, 0xdb, 0x81, 0x04, 0x71, 0x1f, + 0xc9, 0xa4, 0x12, 0x22, 0xb0, 0x8d, 0x65, 0x55, + 0xed, 0xc3, 0xa6, 0x9c, 0x67, 0xcd, 0xd5, 0x56, + 0xea, 0xc8, 0x03, 0x44, 0x31, 0xaf, 0xef, 0x36, + 0xe0, 0x38, 0xf9, 0xb1, 0xd7, 0x9a, 0xb0, 0xdc, + 0x77, 0xeb, 0x3f, 0xd6, 0xd4, 0x27, 0x9e, 0xd1, + 0x5e, 0x52, 0x37, 0xb6, 0x48, 0xcf, 0xb2, 0xba, + 0x10, 0xf7, 0xdb, 0xbe, 0xba, 0x10, 0xf7, 0xdb, + 0xbe, 0xba, 0x10, 0xf7, 0xdb, 0xbe, 0xba, 0x10, + 0xf7, 0xdb, 0xbe, 0xba, 0x10, 0xf7, 0xdb, 0xbe, + 0xba, 0x10, 0xf7, 0xdb, 0xbe, 0xba, 0x10, 0xf7, + 0xdb, 0xbe, 0x97, 0xfc, 0x90, 0xe3, 0xf8, 0xdb, + 0xbe, 0xa3, 0x8a, 0x24, 0x09, 0x1a, 0xae, 0x15, + 0x47, 0x55, 0x7f, 0xff, 0xc4, 0x00, 0x24, 0x10, + 0x01, 0x00, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, + 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x11, 0x21, 0x00, 0x31, 0x41, 0x51, 0x61, + 0x71, 0x10, 0x20, 0x81, 0x30, 0x91, 0xa1, 0xc1, + 0xf0, 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, + 0x01, 0x3f, 0x21, 0x23, 0x87, 0x57, 0x86, 0x93, + 0x22, 0x56, 0x26, 0xfb, 0xeb, 0xee, 0xc9, 0x93, + 0x26, 0x4c, 0x99, 0x6b, 0xbd, 0xa5, 0x3d, 0x0e, + 0xcf, 0xfd, 0xaf, 0x8a, 0x64, 0x9d, 0x34, 0xaa, + 0xec, 0x3b, 0x49, 0x3e, 0x71, 0x65, 0x91, 0x2f, + 0x9b, 0x21, 0x06, 0x3d, 0xc3, 0x90, 0xa3, 0xe2, + 0x58, 0x28, 0x11, 0xd2, 0x5f, 0xe9, 0x18, 0xcd, + 0x33, 0xe3, 0x96, 0x34, 0x49, 0x24, 0x40, 0x8b, + 0x40, 0x04, 0xe0, 0x18, 0x99, 0xe9, 0x2c, 0xe7, + 0xa8, 0x10, 0xd1, 0x38, 0xcd, 0x38, 0x56, 0xc3, + 0x11, 0x13, 0xd1, 0xda, 0x69, 0x78, 0xb4, 0x62, + 0x80, 0x2e, 0x08, 0x82, 0x0f, 0x92, 0xb2, 0x2a, + 0x63, 0xe4, 0x0a, 0x06, 0x89, 0xa4, 0xe5, 0x2e, + 0x42, 0x96, 0x1b, 0x41, 0x52, 0x21, 0x06, 0xbc, + 0x71, 0xbb, 0x3e, 0x32, 0x1c, 0x26, 0xe5, 0x06, + 0x70, 0x14, 0x09, 0x72, 0x7e, 0x97, 0x37, 0x54, + 0x9b, 0x49, 0xcf, 0x55, 0x58, 0x2a, 0x93, 0x43, + 0x85, 0x08, 0x92, 0xda, 0x1e, 0x1e, 0x5c, 0x96, + 0x5f, 0x80, 0x6a, 0x8e, 0xc6, 0x68, 0xc5, 0x23, + 0x0f, 0x38, 0xd1, 0x86, 0x35, 0x14, 0x2e, 0xe5, + 0xa9, 0x1e, 0x6c, 0xb9, 0x3e, 0x40, 0x6d, 0xd9, + 0x49, 0x4f, 0xd5, 0x9c, 0xd0, 0x2f, 0x2a, 0x65, + 0xc5, 0x6c, 0x0f, 0x47, 0xbc, 0x46, 0x7d, 0xa7, + 0xc1, 0xd1, 0xf1, 0x52, 0x32, 0x3c, 0x22, 0xdc, + 0x4a, 0x27, 0x25, 0x55, 0x2e, 0xfc, 0x87, 0x71, + 0xac, 0x4c, 0xb0, 0x18, 0x7e, 0x9a, 0x40, 0x19, + 0x13, 0xe1, 0x2d, 0xf4, 0xb6, 0xd5, 0x76, 0xc1, + 0x94, 0xdc, 0x27, 0xa3, 0x5d, 0x3a, 0x32, 0x7a, + 0x42, 0x52, 0x20, 0x02, 0x6c, 0xac, 0x14, 0xa8, + 0x62, 0x21, 0x84, 0xf9, 0x01, 0xdf, 0xbb, 0xf0, + 0x32, 0x4b, 0x0d, 0xb2, 0x36, 0x4c, 0x4e, 0xca, + 0x75, 0xe3, 0xbc, 0xf6, 0xcf, 0x6c, 0x72, 0x7e, + 0x13, 0x24, 0x3a, 0xc8, 0x3a, 0xc8, 0x3a, 0xc2, + 0xda, 0x27, 0xf0, 0x77, 0x83, 0xd0, 0x30, 0x7d, + 0x23, 0x96, 0xfa, 0x27, 0x40, 0x50, 0x04, 0xaf, + 0x06, 0x5e, 0xbb, 0xdf, 0xfa, 0xfa, 0x83, 0x95, + 0xf8, 0xcc, 0x92, 0xff, 0x00, 0x81, 0x54, 0x15, + 0x6e, 0x19, 0x0b, 0x46, 0x10, 0xe2, 0xa4, 0x9e, + 0xfd, 0x8f, 0x26, 0x18, 0xda, 0xf0, 0x8f, 0xbf, + 0xb0, 0x14, 0xbc, 0x00, 0xec, 0x0a, 0x84, 0xe5, + 0x36, 0x27, 0x52, 0x5e, 0x04, 0xf6, 0xc7, 0xea, + 0x13, 0xe6, 0x90, 0xd3, 0x22, 0x72, 0x53, 0x82, + 0x29, 0x02, 0xc6, 0xa1, 0xb3, 0x4b, 0xdf, 0x5b, + 0xd5, 0x35, 0x92, 0x04, 0x6c, 0x89, 0x64, 0x94, + 0xa1, 0x95, 0x1e, 0x91, 0xac, 0xd9, 0x54, 0x86, + 0xfb, 0x11, 0x2d, 0x27, 0x26, 0x58, 0x09, 0x23, + 0x51, 0x81, 0xab, 0x8f, 0xc1, 0xbc, 0xaa, 0xd2, + 0xba, 0xb9, 0x86, 0xc3, 0x87, 0x2a, 0xb3, 0x2e, + 0x94, 0x1b, 0x03, 0xa4, 0xfe, 0xcc, 0x94, 0x08, + 0xb1, 0x7b, 0x25, 0xb3, 0xd6, 0x29, 0x4f, 0x38, + 0x16, 0x55, 0x11, 0xe9, 0x69, 0xfe, 0x1c, 0x33, + 0x3c, 0xc1, 0xb4, 0xec, 0x46, 0x93, 0xc3, 0x92, + 0x14, 0x95, 0x94, 0x54, 0xb8, 0xe1, 0x41, 0x16, + 0x55, 0xf2, 0x2a, 0x6e, 0x2c, 0x10, 0x18, 0xc0, + 0x12, 0x02, 0x08, 0xe9, 0x0f, 0x0a, 0x22, 0x25, + 0x68, 0x2b, 0x16, 0xa2, 0xf8, 0x80, 0x68, 0x11, + 0x5c, 0x57, 0x4a, 0x22, 0x87, 0x1a, 0xee, 0x11, + 0x82, 0x15, 0x48, 0x02, 0xcb, 0xad, 0xa5, 0x38, + 0xcb, 0x89, 0xd6, 0xb7, 0xae, 0x45, 0x9e, 0x93, + 0x1a, 0x8c, 0xbe, 0x8e, 0xf8, 0x42, 0x10, 0xc0, + 0x53, 0x4c, 0x91, 0x2d, 0xc4, 0x43, 0x5b, 0xd4, + 0xb8, 0x72, 0xa7, 0x0d, 0xb4, 0xfb, 0x48, 0x9f, + 0xe0, 0x8d, 0x9a, 0x36, 0x68, 0xd9, 0xb3, 0x22, + 0x57, 0x21, 0x4a, 0x98, 0x31, 0x3a, 0x26, 0x01, + 0xd6, 0x7f, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, + 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, + 0x12, 0x01, 0x27, 0x03, 0xc0, 0x00, 0x97, 0x81, + 0x20, 0x90, 0x83, 0xe8, 0x82, 0x2d, 0x20, 0xb2, + 0x48, 0xa9, 0x2c, 0xc8, 0x0e, 0xdb, 0x03, 0x20, + 0xff, 0x00, 0xfe, 0x20, 0x70, 0xe4, 0x93, 0x92, + 0x3c, 0x9f, 0x9c, 0x16, 0xd9, 0xb4, 0x8f, 0xff, + 0xc4, 0x00, 0x1e, 0x11, 0x00, 0x03, 0x00, 0x02, + 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x10, + 0x31, 0x20, 0x21, 0x30, 0x41, 0x51, 0x61, 0xff, + 0xda, 0x00, 0x08, 0x01, 0x03, 0x01, 0x01, 0x3f, + 0x10, 0x94, 0x84, 0x21, 0x08, 0x43, 0xb2, 0xf6, + 0x7e, 0xc4, 0x3f, 0xaf, 0x03, 0x50, 0xfc, 0x20, + 0xc6, 0xe3, 0x68, 0x69, 0xbd, 0xe1, 0xaf, 0x93, + 0xf5, 0x10, 0xe7, 0x26, 0x8e, 0x2d, 0x14, 0x7d, + 0xba, 0xc8, 0x42, 0x1a, 0xb8, 0xb5, 0x10, 0x84, + 0x21, 0xa2, 0xe0, 0xde, 0x89, 0x88, 0x42, 0x1a, + 0x65, 0xb9, 0x98, 0x42, 0x32, 0x0b, 0x59, 0x7d, + 0xf2, 0x82, 0xd6, 0x21, 0x08, 0x42, 0x10, 0x84, + 0xc7, 0xff, 0xc4, 0x00, 0x1f, 0x11, 0x00, 0x03, + 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x11, 0x20, 0x31, 0x10, 0x21, 0x41, 0x51, 0x61, + 0x30, 0x71, 0xff, 0xda, 0x00, 0x08, 0x01, 0x02, + 0x01, 0x01, 0x3f, 0x10, 0xb0, 0xbf, 0x0a, 0x5f, + 0x85, 0x29, 0x4e, 0x97, 0xc7, 0x93, 0xe6, 0x53, + 0xf4, 0xfc, 0x12, 0x45, 0xef, 0x87, 0x7f, 0xed, + 0x9a, 0xd2, 0x86, 0xc4, 0xd2, 0xd7, 0x07, 0xc8, + 0x44, 0xdd, 0x65, 0x4a, 0x53, 0x6e, 0x34, 0x41, + 0x44, 0xa2, 0x29, 0x4a, 0x6e, 0xc5, 0x60, 0xa5, + 0x29, 0x4d, 0x98, 0x27, 0x92, 0x94, 0xa5, 0x29, + 0xb7, 0x29, 0x5e, 0x69, 0x4a, 0x51, 0xef, 0x95, + 0xd6, 0x6f, 0x9a, 0x52, 0xe5, 0xff, 0xc4, 0x00, + 0x24, 0x10, 0x01, 0x01, 0x00, 0x02, 0x02, 0x03, + 0x00, 0x02, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x11, 0x00, 0x21, 0x31, 0x61, + 0x41, 0x51, 0x71, 0x20, 0xa1, 0x10, 0x81, 0x91, + 0xb1, 0xc1, 0xd1, 0xff, 0xda, 0x00, 0x08, 0x01, + 0x01, 0x00, 0x01, 0x3f, 0x10, 0x5a, 0xb8, 0xa5, + 0x42, 0x42, 0xd8, 0x10, 0xa2, 0x81, 0x80, 0x3f, + 0x28, 0x22, 0x64, 0xc9, 0x13, 0x35, 0x4f, 0x26, + 0x1c, 0xdf, 0x93, 0xd6, 0x43, 0xfa, 0xb1, 0x16, + 0x6b, 0x21, 0xa7, 0x08, 0x2e, 0x63, 0x96, 0x2d, + 0x37, 0x58, 0x08, 0x03, 0x00, 0x29, 0x80, 0x40, + 0x95, 0xe6, 0x00, 0x8f, 0xbc, 0x29, 0x43, 0x42, + 0xd8, 0xc9, 0x88, 0x86, 0x61, 0xbd, 0x45, 0xd7, + 0x64, 0x94, 0x18, 0xda, 0x72, 0xe7, 0xca, 0x3a, + 0x50, 0x08, 0x9b, 0x14, 0x29, 0x93, 0x16, 0xd8, + 0x5d, 0x6a, 0x61, 0xa8, 0x85, 0x97, 0x0b, 0xf9, + 0x93, 0x87, 0x26, 0x34, 0xa9, 0x03, 0x77, 0x8d, + 0x05, 0x05, 0xc1, 0x29, 0xa1, 0x52, 0x22, 0x11, + 0x83, 0x70, 0x27, 0x8a, 0x81, 0x6e, 0x9b, 0x90, + 0x88, 0x68, 0x42, 0xb8, 0xd4, 0x1f, 0xd0, 0xb7, + 0x16, 0x1b, 0x6c, 0x13, 0xba, 0xaf, 0x79, 0xd8, + 0xcf, 0x8d, 0x3a, 0xd9, 0xf9, 0x37, 0x80, 0xa9, + 0x5f, 0x06, 0x25, 0x2c, 0x49, 0x6d, 0x13, 0xa1, + 0x2c, 0x5d, 0x52, 0x45, 0x14, 0xaf, 0x43, 0x02, + 0xd1, 0x35, 0xa6, 0xc5, 0x1a, 0xdb, 0x72, 0x93, + 0x1d, 0xc8, 0x2e, 0x1a, 0x3b, 0x73, 0x42, 0xa6, + 0x0a, 0xbc, 0x4f, 0xe7, 0xa8, 0xb9, 0x46, 0x82, + 0xd3, 0x48, 0xf3, 0xaa, 0xcb, 0xb6, 0x94, 0x10, + 0x6e, 0x1a, 0x75, 0xac, 0x42, 0x4e, 0xf2, 0x80, + 0xd9, 0xa2, 0xab, 0xea, 0xf2, 0xe1, 0xb1, 0x34, + 0x5e, 0x36, 0x1f, 0x41, 0x9f, 0x59, 0xdc, 0xc9, + 0x9c, 0xe9, 0xe2, 0xa1, 0x4c, 0xdb, 0x5a, 0x1b, + 0xbc, 0xde, 0xe9, 0xf4, 0x8b, 0xf4, 0x40, 0xd9, + 0x82, 0x41, 0xa6, 0x0b, 0x7e, 0xa1, 0x16, 0x88, + 0x86, 0x91, 0x10, 0xe6, 0x97, 0x15, 0xad, 0x8e, + 0x12, 0x29, 0x48, 0xfd, 0xda, 0xa1, 0x0d, 0xea, + 0xe4, 0x11, 0x15, 0x2a, 0x85, 0x8b, 0xa3, 0x71, + 0x23, 0xaa, 0xd1, 0x8d, 0x31, 0x85, 0x79, 0x29, + 0x01, 0xc8, 0xb2, 0x02, 0x18, 0xe1, 0x70, 0xb4, + 0x72, 0x56, 0x80, 0x6d, 0x18, 0x3f, 0x8a, 0xed, + 0x25, 0xcf, 0x6c, 0x2b, 0xa1, 0xfd, 0xb3, 0x8b, + 0x4d, 0x71, 0xac, 0x0a, 0x40, 0x4e, 0xb0, 0x12, + 0x72, 0xa1, 0x41, 0xe5, 0x7f, 0xcf, 0x70, 0xc2, + 0xec, 0xa0, 0x85, 0x7d, 0xaf, 0xb5, 0x6a, 0xbe, + 0xdc, 0x09, 0xc4, 0x33, 0xeb, 0x3e, 0xf3, 0xb7, + 0x9b, 0xf0, 0xfd, 0x3b, 0x67, 0x40, 0x2a, 0xbe, + 0x8c, 0x93, 0x86, 0x23, 0x78, 0xf4, 0x3a, 0x3f, + 0xcd, 0xcf, 0xaf, 0xde, 0x7d, 0x7e, 0xf3, 0xeb, + 0xf7, 0x9f, 0x5f, 0xbc, 0xed, 0x86, 0xfe, 0x1d, + 0x57, 0x8f, 0x2d, 0x33, 0x02, 0x1b, 0x08, 0xe0, + 0xab, 0x26, 0x2d, 0x95, 0x2e, 0x48, 0xbb, 0x0a, + 0x6a, 0x52, 0x82, 0x6c, 0x66, 0x4b, 0xab, 0xa3, + 0x95, 0x4d, 0x5e, 0xc4, 0x3e, 0x39, 0xf5, 0x9f, + 0x59, 0xf5, 0x9f, 0x59, 0xf5, 0x9d, 0xa4, 0xf8, + 0xa8, 0x5a, 0xba, 0x86, 0xa8, 0x22, 0x29, 0x40, + 0x34, 0x46, 0x39, 0xce, 0xbf, 0x78, 0x07, 0x24, + 0x88, 0xcb, 0x87, 0x13, 0x18, 0x98, 0xab, 0x90, + 0x19, 0x1a, 0x8f, 0x53, 0xa9, 0x31, 0xbf, 0x01, + 0x9f, 0x79, 0x02, 0x52, 0x4c, 0x26, 0xc6, 0x60, + 0x24, 0xe2, 0x4d, 0x71, 0x84, 0x82, 0x52, 0x9e, + 0x25, 0x01, 0xdd, 0x5c, 0x48, 0x26, 0x49, 0x08, + 0x01, 0x45, 0x73, 0x74, 0x8a, 0xa0, 0x9f, 0x02, + 0x5a, 0x08, 0x80, 0xfa, 0x58, 0xe2, 0x8e, 0x75, + 0x09, 0x08, 0x11, 0x4d, 0xbd, 0xf8, 0x6f, 0x26, + 0x76, 0x3e, 0x2f, 0x81, 0x03, 0xed, 0x46, 0x76, + 0xc3, 0x62, 0x82, 0xf4, 0x0c, 0x69, 0x9f, 0x10, + 0x4e, 0x93, 0x05, 0xf4, 0x82, 0x09, 0x41, 0xca, + 0xbd, 0x09, 0x41, 0x94, 0x32, 0xc0, 0xa7, 0xa8, + 0x28, 0x6b, 0xa3, 0x47, 0xfa, 0xcd, 0x07, 0xc0, + 0x2f, 0x79, 0x3b, 0xae, 0x9a, 0x5c, 0xb3, 0xcc, + 0x2f, 0x1a, 0xb6, 0x1c, 0x42, 0xc0, 0x7c, 0x6a, + 0x14, 0xcf, 0x82, 0x5e, 0xd2, 0xe6, 0x50, 0x98, + 0x21, 0x50, 0x3f, 0x97, 0xcc, 0x68, 0x54, 0x93, + 0x4a, 0x98, 0xa0, 0x9b, 0x40, 0xb1, 0xde, 0xb9, + 0x29, 0x5a, 0x0b, 0x4a, 0x80, 0x3b, 0xf6, 0x3d, + 0x19, 0x9e, 0x5d, 0xae, 0x42, 0xb8, 0x61, 0xd2, + 0x50, 0x15, 0x15, 0x01, 0xf8, 0x88, 0x9f, 0x70, + 0xf5, 0xd8, 0x8f, 0x7a, 0x2b, 0x49, 0xdf, 0xe5, + 0x67, 0x6c, 0xdd, 0xb3, 0x4c, 0xda, 0xe6, 0xd0, + 0xed, 0x98, 0x58, 0xdf, 0x91, 0x94, 0xeb, 0x05, + 0x4f, 0xa5, 0x1c, 0xd0, 0x3c, 0x06, 0x7f, 0xff, + 0xd9, +}; + +const struct fsdata_file file_tm4c_jpg[] = +{ + { + NULL, + data_tm4c_jpg, + data_tm4c_jpg + 10, + sizeof(data_tm4c_jpg) - 10 + } +}; + +const struct fsdata_file file_ti_jpg[] = +{ + { + file_tm4c_jpg, + data_ti_jpg, + data_ti_jpg + 8, + sizeof(data_ti_jpg) - 8 + } +}; + +const struct fsdata_file file_styles_css[] = +{ + { + file_ti_jpg, + data_styles_css, + data_styles_css + 12, + sizeof(data_styles_css) - 12 + } +}; + +const struct fsdata_file file_overview_htm[] = +{ + { + file_styles_css, + data_overview_htm, + data_overview_htm + 14, + sizeof(data_overview_htm) - 14 + } +}; + +const struct fsdata_file file_javascript_js[] = +{ + { + file_overview_htm, + data_javascript_js, + data_javascript_js + 15, + sizeof(data_javascript_js) - 15 + } +}; + +const struct fsdata_file file_index_htm[] = +{ + { + file_javascript_js, + data_index_htm, + data_index_htm + 11, + sizeof(data_index_htm) - 11 + } +}; + +const struct fsdata_file file_favicon_ico[] = +{ + { + file_index_htm, + data_favicon_ico, + data_favicon_ico + 13, + sizeof(data_favicon_ico) - 13 + } +}; + +const struct fsdata_file file_dk_tm4c129x_jpg[] = +{ + { + file_favicon_ico, + data_dk_tm4c129x_jpg, + data_dk_tm4c129x_jpg + 17, + sizeof(data_dk_tm4c129x_jpg) - 17 + } +}; + +const struct fsdata_file file_block_jpg[] = +{ + { + file_dk_tm4c129x_jpg, + data_block_jpg, + data_block_jpg + 11, + sizeof(data_block_jpg) - 11 + } +}; + +const struct fsdata_file file_block_htm[] = +{ + { + file_block_jpg, + data_block_htm, + data_block_htm + 11, + sizeof(data_block_htm) - 11 + } +}; + +const struct fsdata_file file_about_htm[] = +{ + { + file_block_htm, + data_about_htm, + data_about_htm + 11, + sizeof(data_about_htm) - 11 + } +}; + +const struct fsdata_file file_404_htm[] = +{ + { + file_about_htm, + data_404_htm, + data_404_htm + 9, + sizeof(data_404_htm) - 9 + } +}; + +#define FS_ROOT file_404_htm + +#define FS_NUMFILES 12 + diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.c b/boards/dk-tm4c129x/enet_lwip/enet_lwip.c new file mode 100644 index 0000000..cb09eb5 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.c @@ -0,0 +1,455 @@ +//***************************************************************************** +// +// enet_lwip.c - Sample WebServer Application using lwIP. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "utils/locator.h" +#include "utils/lwiplib.h" +#include "utils/ustdlib.h" +#include "httpserver_raw/httpd.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "enet_fs.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Ethernet with lwIP (enet_lwip)

      +//! +//! This example application demonstrates the operation of the Tiva +//! Ethernet controller using the lwIP TCP/IP Stack configured to operate as +//! an HTTP file server (web server). DHCP is used to obtain an Ethernet +//! address. If DHCP times out without obtaining an address, AUTOIP will be +//! used to obtain a link-local address. The address that is selected will be +//! shown on the QVGA display. +//! +//! The file system code will first check to see if an SD card has been plugged +//! into the microSD slot. If so, all file requests from the web server will +//! be directed to the SD card. Otherwise, a default set of pages served up +//! by an internal file system will be used. Source files for the internal +//! file system image can be found in the ``fs'' directory. If any of these +//! files are changed, the file system image (enet_fsdata.h) should be +//! rebuilt using the command: +//! +//! ../../../../tools/bin/makefsfile -i fs -o enet_fsdata.h -r -h -q +//! +//! For additional details on lwIP, refer to the lwIP web page at: +//! http://savannah.nongnu.org/projects/lwip/ +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines for setting up the system clock. +// +//***************************************************************************** +#define SYSTICKHZ 100 +#define SYSTICKMS (1000 / SYSTICKHZ) + +//***************************************************************************** +// +// Interrupt priority definitions. The top 3 bits of these values are +// significant with lower values indicating higher priority interrupts. +// +//***************************************************************************** +#define SYSTICK_INT_PRIORITY 0x80 +#define ETHERNET_INT_PRIORITY 0xC0 + +//***************************************************************************** +// +// The positions of the circles in the animation used while waiting for an IP +// address. +// +//***************************************************************************** +const int32_t g_ppi32CirclePos[][2] = +{ + { + 12, 0 + }, + { + 8, -9 + }, + { + 0, -12 + }, + { + -8, -9 + }, + { + -12, 0 + }, + { + -8, 9 + }, + { + 0, 12 + }, + { + 8, 9 + } +}; + +//***************************************************************************** +// +// The colors of the circles in the animation used while waiting for an IP +// address. +// +//***************************************************************************** +const uint32_t g_pui32CircleColor[] = +{ + 0x111111, + 0x333333, + 0x555555, + 0x777777, + 0x999999, + 0xbbbbbb, + 0xdddddd, + 0xffffff, +}; + +//***************************************************************************** +// +// The current color index for the animation used while waiting for an IP +// address. +// +//***************************************************************************** +uint32_t g_ui32ColorIdx; + +//***************************************************************************** +// +// The current IP address. +// +//***************************************************************************** +uint32_t g_ui32IPAddress; + +//***************************************************************************** +// +// The application's graphics context. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The system clock frequency. Used by the SD card driver. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Display an lwIP type IP Address. +// +//***************************************************************************** +void +DisplayIPAddress(uint32_t ui32Addr, uint32_t ui32Col, uint32_t ui32Row) +{ + char pcBuf[16]; + + // + // Convert the IP Address into a string. + // + usprintf(pcBuf, "%d.%d.%d.%d", ui32Addr & 0xff, (ui32Addr >> 8) & 0xff, + (ui32Addr >> 16) & 0xff, (ui32Addr >> 24) & 0xff); + + // + // Display the string. + // + GrStringDraw(&g_sContext, pcBuf, -1, ui32Col, ui32Row, false); +} + +//***************************************************************************** +// +// Required by lwIP library to support any host-related timer functions. +// +//***************************************************************************** +void +lwIPHostTimerHandler(void) +{ + uint32_t ui32Idx, ui32NewIPAddress, ui32Width, ui32Height; + tRectangle sRect; + + // + // Get the width and height of the display. + // + ui32Width = GrContextDpyWidthGet(&g_sContext); + ui32Height = GrContextDpyHeightGet(&g_sContext); + + // + // Get the current IP address. + // + ui32NewIPAddress = lwIPLocalIPAddrGet(); + + // + // See if the IP address has changed. + // + if(ui32NewIPAddress != g_ui32IPAddress) + { + // + // Clear the display. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = ui32Width - 1; + sRect.i16YMax = ui32Height - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // See if there is an IP address assigned. + // + if(ui32NewIPAddress == 0xffffffff) + { + // + // Indicate that there is no link. + // + GrStringDrawCentered(&g_sContext, "Waiting for link", -1, + ui32Width / 2, (ui32Height / 2) - 18, false); + } + else if(ui32NewIPAddress == 0) + { + // + // There is no IP address, so indicate that the DHCP process is + // running. + // + GrStringDrawCentered(&g_sContext, "Waiting for IP address", -1, + ui32Width / 2, (ui32Height / 2) - 18, false); + } + else + { + // + // Display the new IP address information. + // + GrStringDraw(&g_sContext, "IP Address:", -1, (ui32Width / 2) - 110, + (ui32Height / 2) + 8 - 10 - 20, false); + GrStringDraw(&g_sContext, "Subnet Mask:", -1, + (ui32Width / 2) - 110, (ui32Height / 2) + 8 - 10, + false); + GrStringDraw(&g_sContext, "Gateway:", -1, (ui32Width / 2) - 110, + (ui32Height / 2) + 8 - 10 + 20, false); + DisplayIPAddress(ui32NewIPAddress, ui32Width / 2, + (ui32Height / 2) + 8 - 10 - 20); + DisplayIPAddress(lwIPLocalNetMaskGet(), ui32Width / 2, + (ui32Height / 2) + 8 - 10); + DisplayIPAddress(lwIPLocalGWAddrGet(), ui32Width / 2, + (ui32Height / 2) + 8 - 10 + 20); + } + + // + // Save the new IP address. + // + g_ui32IPAddress = ui32NewIPAddress; + } + + // + // If there is not an IP address, draw the animated circle. + // + if((ui32NewIPAddress == 0) || (ui32NewIPAddress == 0xffffffff)) + { + // + // Loop through the circles in the animation. + // + for(ui32Idx = 0; ui32Idx < 8; ui32Idx++) + { + // + // Draw this circle. + // + GrContextForegroundSet(&g_sContext, + g_pui32CircleColor[(g_ui32ColorIdx + + ui32Idx) & 7]); + GrCircleFill(&g_sContext, + (ui32Width / 2) + g_ppi32CirclePos[ui32Idx][0], + (ui32Height / 2) + g_ppi32CirclePos[ui32Idx][1] + 24, + 2); + } + + // + // Increment the color index. + // + g_ui32ColorIdx++; + } +} + +//***************************************************************************** +// +// The interrupt handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Call the lwIP timer handler. + // + lwIPTimer(SYSTICKMS); + + // + // Run the file system tick handler. + // + fs_tick(SYSTICKMS); +} + +//***************************************************************************** +// +// This example demonstrates the use of the Ethernet Controller. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32User0, ui32User1; + uint8_t pui8MACArray[8]; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "enet-lwip"); + + // + // Configure SysTick for a periodic interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / SYSTICKHZ); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Initialize the file system. + // + fs_init(); + + // + // Configure the hardware MAC address for Ethernet Controller filtering of + // incoming packets. The MAC address will be stored in the non-volatile + // USER0 and USER1 registers. + // + ROM_FlashUserGet(&ui32User0, &ui32User1); + if((ui32User0 == 0xffffffff) || (ui32User1 == 0xffffffff)) + { + // + // We should never get here. This is an error if the MAC address has + // not been programmed into the device. Exit the program. + // + GrContextForegroundSet(&g_sContext, ClrRed); + GrStringDrawCentered(&g_sContext, "MAC Address", -1, + GrContextDpyWidthGet(&g_sContext) / 2, + (GrContextDpyHeightGet(&g_sContext) / 2) - 4, + false); + GrStringDrawCentered(&g_sContext, "Not Programmed!", -1, + GrContextDpyWidthGet(&g_sContext) / 2, + (GrContextDpyHeightGet(&g_sContext) / 2) + 16, + false); + while(1) + { + } + } + + // + // Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC + // address needed to program the hardware registers, then program the MAC + // address into the Ethernet Controller registers. + // + pui8MACArray[0] = ((ui32User0 >> 0) & 0xff); + pui8MACArray[1] = ((ui32User0 >> 8) & 0xff); + pui8MACArray[2] = ((ui32User0 >> 16) & 0xff); + pui8MACArray[3] = ((ui32User1 >> 0) & 0xff); + pui8MACArray[4] = ((ui32User1 >> 8) & 0xff); + pui8MACArray[5] = ((ui32User1 >> 16) & 0xff); + + // + // Initialze the lwIP library, using DHCP. + // + lwIPInit(g_ui32SysClock, pui8MACArray, 0, 0, 0, IPADDR_USE_DHCP); + + // + // Setup the device locator service. + // + LocatorInit(); + LocatorMACAddrSet(pui8MACArray); + LocatorAppTitleSet("DK-TM4C129X enet_lwip"); + + // + // Initialize the sample httpd server. + // + httpd_init(); + + // + // Set the interrupt priorities. We set the SysTick interrupt to a higher + // priority than the Ethernet interrupt to ensure that the file system + // tick is processed if SysTick occurs while the Ethernet handler is being + // processed. This is very likely since all the TCP/IP and HTTP work is + // done in the context of the Ethernet interrupt. + // + ROM_IntPrioritySet(INT_EMAC0, ETHERNET_INT_PRIORITY); + ROM_IntPrioritySet(FAULT_SYSTICK, SYSTICK_INT_PRIORITY); + + // + // Loop forever. All the work is done in interrupt handlers. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.ewd b/boards/dk-tm4c129x/enet_lwip/enet_lwip.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.ewp b/boards/dk-tm4c129x/enet_lwip/enet_lwip.ewp new file mode 100644 index 0000000..1ba03ba --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.ewp @@ -0,0 +1,831 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\enet_fs.c + + + $PROJ_DIR$\enet_lwip.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\ff.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\utils\locator.c + + + $PROJ_DIR$\..\..\..\..\utils\lwiplib.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.icf b/boards/dk-tm4c129x/enet_lwip/enet_lwip.icf new file mode 100644 index 0000000..807a33b --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// enet_lwip.icf - Linker configuration file for enet_lwip. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.ld b/boards/dk-tm4c129x/enet_lwip/enet_lwip.ld new file mode 100644 index 0000000..baa4004 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * enet_lwip.ld - Linker configuration file for enet_lwip. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.sct b/boards/dk-tm4c129x/enet_lwip/enet_lwip.sct new file mode 100644 index 0000000..1013c6d --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; enet_lwip.sct - Linker configuration file for enet_lwip. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.uvopt b/boards/dk-tm4c129x/enet_lwip/enet_lwip.uvopt new file mode 100644 index 0000000..428b6c8 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.uvopt @@ -0,0 +1,443 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + enet_lwip + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\enet_fs.c + enet_fs.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\enet_lwip.c + enet_lwip.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\ff.c + ff.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + httpd.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\locator.c + locator.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\lwiplib.c + lwiplib.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + mmc-dk-tm4c129x.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 11 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 15 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip.uvproj b/boards/dk-tm4c129x/enet_lwip/enet_lwip.uvproj new file mode 100644 index 0000000..0116cfd --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + enet_lwip + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + enet_lwip + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\enet_lwip.bin .\rvmdk\enet_lwip.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + .;..;..\..\..\..;..\..\..\..\third_party\lwip-1.4.1\apps;..\..\..\..\third_party\lwip-1.4.1\ports\tiva-tm4c129\include;..\..\..\..\third_party\lwip-1.4.1\src\include;..\..\..\..\third_party\lwip-1.4.1\src\include\ipv4;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + enet_lwip.sct + + + --entry Reset_Handler + + + + + + + + Source + + + enet_fs.c + 1 + .\enet_fs.c + + + enet_lwip.c + 1 + .\enet_lwip.c + + + ff.c + 1 + ..\..\..\..\third_party\fatfs\src\ff.c + + + frame.c + 1 + ..\drivers\frame.c + + + httpd.c + 1 + ..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + locator.c + 1 + ..\..\..\..\utils\locator.c + + + lwiplib.c + 1 + ..\..\..\..\utils\lwiplib.c + + + mmc-dk-tm4c129x.c + 1 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/enet_lwip/enet_lwip_ccs.cmd b/boards/dk-tm4c129x/enet_lwip/enet_lwip_ccs.cmd new file mode 100644 index 0000000..8b42fbf --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/enet_lwip_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * enet_lwip_ccs.cmd - CCS linker configuration file for enet_lwip. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.bin b/boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.bin new file mode 100644 index 0000000..e42598f Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.bin differ diff --git a/boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.out b/boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.out new file mode 100644 index 0000000..7cc3450 Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/ewarm/Exe/enet_lwip.out differ diff --git a/boards/dk-tm4c129x/enet_lwip/fs/404.htm b/boards/dk-tm4c129x/enet_lwip/fs/404.htm new file mode 100644 index 0000000..bc5fdb0 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/404.htm @@ -0,0 +1,9 @@ + + + +
      +

      404 - file not found

      +

      Try here instead.

      +
      + + diff --git a/boards/dk-tm4c129x/enet_lwip/fs/about.htm b/boards/dk-tm4c129x/enet_lwip/fs/about.htm new file mode 100644 index 0000000..41528ca --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/about.htm @@ -0,0 +1,32 @@ + + + + +DK-TM4C129X Development Kit + + + + +

      About Texas Instruments

      +
      +
      +Texas Instruments (TI) is a global +analog +and digital +semiconductor IC design +and manufacturing company. In addition to analog technologies, +digital signal processing (DSP) +and +microcontroller (MCU) +semiconductors, TI designs and manufactures semiconductor solutions for analog +and digital embedded and application processing. In the microcontroller space, +TI offers the broadest range of embedded control products, from ultra-low-power +MSP430™ +MCUs and high-performance +TMS320C2000™ +real-time controllers, to the 32 bit general-purpose ARM®-based MCUs of the +Tiva™ C Series +product line. Read more about us on the web at +www.ti.com. + + diff --git a/boards/dk-tm4c129x/enet_lwip/fs/block.htm b/boards/dk-tm4c129x/enet_lwip/fs/block.htm new file mode 100644 index 0000000..f9d4c04 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/block.htm @@ -0,0 +1,17 @@ + + + + +DK-TM4C129X Development Kit + + + + +

      TM4C129XNCZAD Block Diagram

      +
      +
      +
      + +
      + + diff --git a/boards/dk-tm4c129x/enet_lwip/fs/block.jpg b/boards/dk-tm4c129x/enet_lwip/fs/block.jpg new file mode 100644 index 0000000..4a2504d Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/fs/block.jpg differ diff --git a/boards/dk-tm4c129x/enet_lwip/fs/dk-tm4c129x.jpg b/boards/dk-tm4c129x/enet_lwip/fs/dk-tm4c129x.jpg new file mode 100644 index 0000000..e59a70b Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/fs/dk-tm4c129x.jpg differ diff --git a/boards/dk-tm4c129x/enet_lwip/fs/favicon.ico b/boards/dk-tm4c129x/enet_lwip/fs/favicon.ico new file mode 100644 index 0000000..d14b5d9 Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/fs/favicon.ico differ diff --git a/boards/dk-tm4c129x/enet_lwip/fs/index.htm b/boards/dk-tm4c129x/enet_lwip/fs/index.htm new file mode 100644 index 0000000..f3e8e78 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/index.htm @@ -0,0 +1,54 @@ + + + + + DK-TM4C129X Development Kit + + + + + +
      + + + + + + +
      + + Texas Instruments + + +
      + Tiva™ C Series TM4C129X Development Kit +
      +
      + DK-TM4C129X +
      +
      + + TM4C + +
      +

      +
      + +
      +
      +
      +

      + Copyright © 2013-2014 Texas Instruments Incorporated. All rights reserved. +
      + + diff --git a/boards/dk-tm4c129x/enet_lwip/fs/javascript.js b/boards/dk-tm4c129x/enet_lwip/fs/javascript.js new file mode 100644 index 0000000..e492c23 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/javascript.js @@ -0,0 +1,53 @@ + + +window.onload = function() +{ + document.getElementById('about').onclick = loadAbout; + document.getElementById('overview').onclick = loadOverview; + document.getElementById('block').onclick = loadBlock; + + loadPage("about.htm"); +} + +function loadAbout() +{ + loadPage("about.htm"); + return false; +} + +function loadOverview() +{ + loadPage("overview.htm"); + return false; +} + +function loadBlock() +{ + loadPage("block.htm"); + return false; +} + +function loadPage(page) +{ + if(window.XMLHttpRequest) + { + xmlhttp = new XMLHttpRequest(); + } + else + { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + + xmlhttp.open("GET", page, true); + xmlhttp.setRequestHeader("Content-type", + "application/x-www-form-urlencoded"); + xmlhttp.send(); + + xmlhttp.onreadystatechange = function () + { + if((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) + { + document.getElementById("content").innerHTML = xmlhttp.responseText; + } + } +} diff --git a/boards/dk-tm4c129x/enet_lwip/fs/overview.htm b/boards/dk-tm4c129x/enet_lwip/fs/overview.htm new file mode 100644 index 0000000..b4f9094 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/overview.htm @@ -0,0 +1,29 @@ + + + + +DK-TM4C129X Development Kit + + + + +

      Tiva™ C Series Product Line

      +
      +
      +As the first ARM® Cortex™-M4 microcontrollers (MCUs) to be +implemented on TI's proprietary 65-nm process technology, the Tiva C Series +provides customers an opportunity to increase their connectivity integration +without sacrificing price, performance, or power consumption. Every C Series +MCU integrates a floating-point core and high-performance analog while still +providing low-power modes to offer a great set of functional options. Today's +engineers understand that designs require more than hardware alone. Often, the +greatest challenge is software and +TivaWare for C Series is a +free library of C files that include both peripheral-level and +application-level code in source and in ROM for every Tiva C Series MCU. This +offering delivers USB, CAN, graphics, and sensor application libraries so +customers can focus their efforts on building applications instead of +programming their connectivity peripherals. The Tiva C Series provides an +excellent baseline for home, building, and industrial applications. + + diff --git a/boards/dk-tm4c129x/enet_lwip/fs/styles.css b/boards/dk-tm4c129x/enet_lwip/fs/styles.css new file mode 100644 index 0000000..3403359 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/fs/styles.css @@ -0,0 +1,104 @@ +/* Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. */ + +/* Styling for the entire document. */ +body +{ + background-color: white; + color: black; + font-family: Ariel,Helvetica,sans-serif; +} + +/* Styling for the heading div. */ +#heading +{ + clear: both; + margin-bottom: 10px; +} + +#heading_h1 +{ + font-size: 2em; + font-weight: bold; + text-align: center; +} + +#heading_h2 +{ + font-size: 1.25em; + font-weight: bold; + text-align: center; +} + +#heading hr +{ + border-bottom: 1px solid #ff0000; + border-top: 1px solid #ff0000; +} + +#heading a img +{ + border: 0; +} + +/* Styling for the menu div. */ +#menu +{ + float: left; + margin-bottom: 10px; + width: 225px; +} + +#menu ul +{ + list-style-type: none; + margin: 0; + padding: 0; +} + +#menu a:link, #menu a:visited +{ + background-color: #ff0000; + color: #ffffff; + display: block; + font-weight: bold; + margin-bottom: 2px; + margin-top: 2px; + padding: 4px; + text-align: center; + text-decoration: none; + width: 200px; +} + +#menu a:hover, #menu a:active +{ + background-color: #bf0000; +} + +/* Styling for the content div. */ +#content +{ + margin-bottom: 10px; + margin-left: 225px; +} + +#content_heading +{ + font-size: 1.5em; + font-weight: bold; + text-align: center; +} + +/* Styling for the footing div. */ +#footing +{ + clear: both; + font-size: .75em; + font-style: italic; + text-align: right; +} + +#footing hr +{ + border-bottom: 1px solid #ff0000; + border-top: 1px solid #ff0000; +} diff --git a/boards/dk-tm4c129x/enet_lwip/fs/ti.jpg b/boards/dk-tm4c129x/enet_lwip/fs/ti.jpg new file mode 100644 index 0000000..5d1669c Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/fs/ti.jpg differ diff --git a/boards/dk-tm4c129x/enet_lwip/fs/tm4c.jpg b/boards/dk-tm4c129x/enet_lwip/fs/tm4c.jpg new file mode 100644 index 0000000..1672a1d Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/fs/tm4c.jpg differ diff --git a/boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.axf b/boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.axf new file mode 100644 index 0000000..636e57c Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.axf differ diff --git a/boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.bin b/boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.bin new file mode 100644 index 0000000..5f84444 Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/gcc/enet_lwip.bin differ diff --git a/boards/dk-tm4c129x/enet_lwip/lwipopts.h b/boards/dk-tm4c129x/enet_lwip/lwipopts.h new file mode 100644 index 0000000..314d1d1 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/lwipopts.h @@ -0,0 +1,439 @@ +//***************************************************************************** +// +// lwipopts.h - Configuration file for lwIP +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +// +// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h +// header file. +// +// For additional details, refer to the original "opt.h" file, and lwIP +// documentation. +// +//***************************************************************************** + +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +//***************************************************************************** +// +// ---------- Stellaris / lwIP Port Options ---------- +// +//***************************************************************************** +#define HOST_TMR_INTERVAL 100 // default is 0 +//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000) +//#define LWIP_HTTPD_SSI 1 +//#define LWIP_HTTPD_CGI 1 +#define LWIP_HTTPD_DYNAMIC_HEADERS 1 +//#define HTTPD_DEBUG LWIP_DBG_ON +#define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | \ + EMAC_PHY_AN_100B_T_FULL_DUPLEX) +#define PHY_PHYS_ADDR 0 +#define NUM_TX_DESCRIPTORS 24 +#define NUM_RX_DESCRIPTORS 8 + +//***************************************************************************** +// +// ---------- Platform specific locking ---------- +// +//***************************************************************************** +#define SYS_LIGHTWEIGHT_PROT 1 // default is 0 +#define NO_SYS 1 // default is 0 +//#define MEMCPY(dst,src,len) memcpy(dst,src,len) +//#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +//***************************************************************************** +// +// ---------- Memory options ---------- +// +//***************************************************************************** +//#define MEM_LIBC_MALLOC 0 +#define MEM_ALIGNMENT 4 +#define MEM_SIZE (64 * 1024) +//#define MEMP_OVERFLOW_CHECK 0 +//#define MEMP_SANITY_CHECK 0 +//#define MEM_USE_POOLS 0 +//#define MEMP_USE_CUSTOM_POOLS 0 + +//***************************************************************************** +// +// ---------- Internal Memory Pool Sizes ---------- +// +//***************************************************************************** +#define MEMP_NUM_PBUF 48 // Default 16 +//#define MEMP_NUM_RAW_PCB 4 +//#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 16 // Default 5 +//#define MEMP_NUM_TCP_PCB_LISTEN 8 +//#define MEMP_NUM_TCP_SEG 16 +//#define MEMP_NUM_REASSDATA 5 +//#define MEMP_NUM_ARP_QUEUE 30 +//#define MEMP_NUM_IGMP_GROUP 8 +#define MEMP_NUM_SYS_TIMEOUT 8 +//#define MEMP_NUM_NETBUF 2 +//#define MEMP_NUM_NETCONN 4 +//#define MEMP_NUM_TCPIP_MSG_API 8 +//#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 48 // Default 16 + +//***************************************************************************** +// +// ---------- ARP options ---------- +// +//***************************************************************************** +//#define LWIP_ARP 1 +//#define ARP_TABLE_SIZE 10 +//#define ARP_QUEUEING 1 +//#define ETHARP_TRUST_IP_MAC 1 + +//***************************************************************************** +// +// ---------- IP options ---------- +// +//***************************************************************************** +//#define IP_FORWARD 0 +//#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 0 // default is 1 +#define IP_FRAG 0 // default is 1 +//#define IP_REASS_MAXAGE 3 +//#define IP_REASS_MAX_PBUFS 10 +//#define IP_FRAG_USES_STATIC_BUF 1 +//#define IP_FRAG_MAX_MTU 1500 +//#define IP_DEFAULT_TTL 255 + +//***************************************************************************** +// +// ---------- ICMP options ---------- +// +//***************************************************************************** +//#define LWIP_ICMP 1 +//#define ICMP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- RAW options ---------- +// +//***************************************************************************** +//#define LWIP_RAW 1 +//#define RAW_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- DHCP options ---------- +// +//***************************************************************************** +#define LWIP_DHCP 1 // default is 0 +//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) + +//***************************************************************************** +// +// ---------- UPNP options ---------- +// +//***************************************************************************** +//#define LWIP_UPNP 0 + +//***************************************************************************** +// +// ---------- PTPD options ---------- +// +//***************************************************************************** +//#define LWIP_PTPD 0 + +//***************************************************************************** +// +// ---------- AUTOIP options ---------- +// +//***************************************************************************** +#define LWIP_AUTOIP 1 // default is 0 +#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP)) + // default is 0 +#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9 + +//***************************************************************************** +// +// ---------- SNMP options ---------- +// +//***************************************************************************** +//#define LWIP_SNMP 0 +//#define SNMP_CONCURRENT_REQUESTS 1 +//#define SNMP_TRAP_DESTINATIONS 1 +//#define SNMP_PRIVATE_MIB 0 +//#define SNMP_SAFE_REQUESTS 1 + +//***************************************************************************** +// +// ---------- IGMP options ---------- +// +//***************************************************************************** +//#define LWIP_IGMP 0 + +//***************************************************************************** +// +// ---------- DNS options ----------- +// +//***************************************************************************** +//#define LWIP_DNS 0 +//#define DNS_TABLE_SIZE 4 +//#define DNS_MAX_NAME_LENGTH 256 +//#define DNS_MAX_SERVERS 2 +//#define DNS_DOES_NAME_CHECK 1 +//#define DNS_USES_STATIC_BUF 1 +//#define DNS_MSG_SIZE 512 + +//***************************************************************************** +// +// ---------- UDP options ---------- +// +//***************************************************************************** +//#define LWIP_UDP 1 +//#define LWIP_UDPLITE 0 +//#define UDP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- TCP options ---------- +// +//***************************************************************************** +#define LWIP_TCP 1 +//#define TCP_TTL (IP_DEFAULT_TTL) +#define TCP_WND 4096 // default is 2048 +//#define TCP_MAXRTX 12 +//#define TCP_SYNMAXRTX 6 +//#define TCP_QUEUE_OOSEQ 1 +#define TCP_MSS 1500 // default is 128 +//#define TCP_CALCULATE_EFF_SEND_MSS 1 +#define TCP_SND_BUF (4 * TCP_MSS) + // default is 256, was 6 * +//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) +//#define TCP_SNDLOWAT (TCP_SND_BUF/2) +//#define TCP_LISTEN_BACKLOG 0 +//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff + +//***************************************************************************** +// +// ---------- API options ---------- +// +//***************************************************************************** +//#define LWIP_EVENT_API 0 +//#define LWIP_CALLBACK_API 1 + +//***************************************************************************** +// +// ---------- Pbuf options ---------- +// +//***************************************************************************** +#define PBUF_LINK_HLEN 16 // default is 14 +#define PBUF_POOL_BUFSIZE 512 + // default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#define ETH_PAD_SIZE 0 // default is 0 + +//***************************************************************************** +// +// ---------- Network Interfaces options ---------- +// +//***************************************************************************** +//#define LWIP_NETIF_HOSTNAME 0 +//#define LWIP_NETIF_API 0 +//#define LWIP_NETIF_STATUS_CALLBACK 0 +//#define LWIP_NETIF_LINK_CALLBACK 0 +//#define LWIP_NETIF_HWADDRHINT 0 + +//***************************************************************************** +// +// ---------- LOOPIF options ---------- +// +//***************************************************************************** +//#define LWIP_HAVE_LOOPIF 0 +//#define LWIP_LOOPIF_MULTITHREADING 1 + +//***************************************************************************** +// +// ---------- Thread options ---------- +// +//***************************************************************************** +//#define TCPIP_THREAD_NAME "tcpip_thread" +//#define TCPIP_THREAD_STACKSIZE 0 +//#define TCPIP_THREAD_PRIO 1 +//#define TCPIP_MBOX_SIZE 0 +//#define SLIPIF_THREAD_NAME "slipif_loop" +//#define SLIPIF_THREAD_STACKSIZE 0 +//#define SLIPIF_THREAD_PRIO 1 +//#define PPP_THREAD_NAME "pppMain" +//#define PPP_THREAD_STACKSIZE 0 +//#define PPP_THREAD_PRIO 1 +//#define DEFAULT_THREAD_NAME "lwIP" +//#define DEFAULT_THREAD_STACKSIZE 0 +//#define DEFAULT_THREAD_PRIO 1 +//#define DEFAULT_RAW_RECVMBOX_SIZE 0 +//#define DEFAULT_UDP_RECVMBOX_SIZE 0 +//#define DEFAULT_TCP_RECVMBOX_SIZE 0 +//#define DEFAULT_ACCEPTMBOX_SIZE 0 + +//***************************************************************************** +// +// ---------- Sequential layer options ---------- +// +//***************************************************************************** +//#define LWIP_TCPIP_CORE_LOCKING 0 +#define LWIP_NETCONN 0 // default is 1 + +//***************************************************************************** +// +// ---------- Socket Options ---------- +// +//***************************************************************************** +#define LWIP_SOCKET 0 // default is 1 +//#define LWIP_COMPAT_SOCKETS 1 +//#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +//#define LWIP_TCP_KEEPALIVE 0 +//#define LWIP_SO_RCVTIMEO 0 +//#define LWIP_SO_RCVBUF 0 +//#define SO_REUSE 0 + +//***************************************************************************** +// +// ---------- Statistics options ---------- +// +//***************************************************************************** +//#define LWIP_STATS 1 +//#define LWIP_STATS_DISPLAY 0 +//#define LINK_STATS 1 +//#define ETHARP_STATS (LWIP_ARP) +//#define IP_STATS 1 +//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +//#define ICMP_STATS 1 +//#define IGMP_STATS (LWIP_IGMP) +//#define UDP_STATS (LWIP_UDP) +//#define TCP_STATS (LWIP_TCP) +//#define MEM_STATS 1 +//#define MEMP_STATS 1 +//#define SYS_STATS 1 + +//***************************************************************************** +// +// ---------- PPP options ---------- +// +//***************************************************************************** +//#define PPP_SUPPORT 0 +//#define PPPOE_SUPPORT 0 +//#define PPPOS_SUPPORT PPP_SUPPORT + +#if PPP_SUPPORT +//#define NUM_PPP 1 +//#define PAP_SUPPORT 0 +//#define CHAP_SUPPORT 0 +//#define MSCHAP_SUPPORT 0 +//#define CBCP_SUPPORT 0 +//#define CCP_SUPPORT 0 +//#define VJ_SUPPORT 0 +//#define MD5_SUPPORT 0 +//#define FSM_DEFTIMEOUT 6 +//#define FSM_DEFMAXTERMREQS 2 +//#define FSM_DEFMAXCONFREQS 10 +//#define FSM_DEFMAXNAKLOOPS 5 +//#define UPAP_DEFTIMEOUT 6 +//#define UPAP_DEFREQTIME 30 +//#define CHAP_DEFTIMEOUT 6 +//#define CHAP_DEFTRANSMITS 10 +//#define LCP_ECHOINTERVAL 0 +//#define LCP_MAXECHOFAILS 3 +//#define PPP_MAXIDLEFLAG 100 + +//#define PPP_MAXMTU 1500 +//#define PPP_DEFMRU 296 +#endif + +//***************************************************************************** +// +// ---------- checksum options ---------- +// +//***************************************************************************** +#define CHECKSUM_GEN_IP 0 +#define CHECKSUM_GEN_ICMP 0 +#define CHECKSUM_GEN_UDP 0 +#define CHECKSUM_GEN_TCP 0 +#define CHECKSUM_CHECK_IP 0 +#define CHECKSUM_CHECK_UDP 0 +#define CHECKSUM_CHECK_TCP 0 + +//***************************************************************************** +// +// ---------- Debugging options ---------- +// +//***************************************************************************** +#if 0 +#define U8_F "c" +#define S8_F "c" +#define X8_F "x" +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" +extern void UARTprintf(const char *pcString, ...); +#define LWIP_DEBUG +#endif + +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE + +//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH) + +//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF +//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF +//#define PBUF_DEBUG LWIP_DBG_OFF +//#define API_LIB_DEBUG LWIP_DBG_OFF +//#define API_MSG_DEBUG LWIP_DBG_OFF +//#define SOCKETS_DEBUG LWIP_DBG_OFF +//#define ICMP_DEBUG LWIP_DBG_OFF +//#define IGMP_DEBUG LWIP_DBG_OFF +//#define INET_DEBUG LWIP_DBG_OFF +//#define IP_DEBUG LWIP_DBG_ON // default is OFF +//#define IP_REASS_DEBUG LWIP_DBG_OFF +//#define RAW_DEBUG LWIP_DBG_OFF +//#define MEM_DEBUG LWIP_DBG_OFF +//#define MEMP_DEBUG LWIP_DBG_OFF +//#define SYS_DEBUG LWIP_DBG_OFF +//#define TCP_DEBUG LWIP_DBG_OFF +//#define TCP_INPUT_DEBUG LWIP_DBG_OFF +//#define TCP_FR_DEBUG LWIP_DBG_OFF +//#define TCP_RTO_DEBUG LWIP_DBG_OFF +//#define TCP_CWND_DEBUG LWIP_DBG_OFF +//#define TCP_WND_DEBUG LWIP_DBG_OFF +//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +//#define TCP_RST_DEBUG LWIP_DBG_OFF +//#define TCP_QLEN_DEBUG LWIP_DBG_OFF +//#define UDP_DEBUG LWIP_DBG_ON // default is OFF +//#define TCPIP_DEBUG LWIP_DBG_OFF +//#define PPP_DEBUG LWIP_DBG_OFF +//#define SLIP_DEBUG LWIP_DBG_OFF +//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF +//#define AUTOIP_DEBUG LWIP_DBG_OFF +//#define SNMP_MSG_DEBUG LWIP_DBG_OFF +//#define SNMP_MIB_DEBUG LWIP_DBG_OFF +//#define DNS_DEBUG LWIP_DBG_OFF + +#endif /* __LWIPOPTS_H__ */ diff --git a/boards/dk-tm4c129x/enet_lwip/readme.txt b/boards/dk-tm4c129x/enet_lwip/readme.txt new file mode 100644 index 0000000..605aa1c --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/readme.txt @@ -0,0 +1,41 @@ +Ethernet with lwIP + +This example application demonstrates the operation of the Tiva +Ethernet controller using the lwIP TCP/IP Stack configured to operate as +an HTTP file server (web server). DHCP is used to obtain an Ethernet +address. If DHCP times out without obtaining an address, AUTOIP will be +used to obtain a link-local address. The address that is selected will be +shown on the QVGA display. + +The file system code will first check to see if an SD card has been plugged +into the microSD slot. If so, all file requests from the web server will +be directed to the SD card. Otherwise, a default set of pages served up +by an internal file system will be used. Source files for the internal +file system image can be found in the ``fs'' directory. If any of these +files are changed, the file system image (enet_fsdata.h) should be +rebuilt using the command: + + ../../../../tools/bin/makefsfile -i fs -o enet_fsdata.h -r -h -q + +For additional details on lwIP, refer to the lwIP web page at: +http://savannah.nongnu.org/projects/lwip/ + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.axf b/boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.axf new file mode 100644 index 0000000..ef7bd87 Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.axf differ diff --git a/boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.bin b/boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.bin new file mode 100644 index 0000000..3be1620 Binary files /dev/null and b/boards/dk-tm4c129x/enet_lwip/rvmdk/enet_lwip.bin differ diff --git a/boards/dk-tm4c129x/enet_lwip/startup_ccs.c b/boards/dk-tm4c129x/enet_lwip/startup_ccs.c new file mode 100644 index 0000000..09439c6 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_lwip/startup_ewarm.c b/boards/dk-tm4c129x/enet_lwip/startup_ewarm.c new file mode 100644 index 0000000..21174f2 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_lwip/startup_gcc.c b/boards/dk-tm4c129x/enet_lwip/startup_gcc.c new file mode 100644 index 0000000..7ba6b86 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_lwip/startup_rvmdk.S b/boards/dk-tm4c129x/enet_lwip/startup_rvmdk.S new file mode 100644 index 0000000..d0afaf0 --- /dev/null +++ b/boards/dk-tm4c129x/enet_lwip/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN lwIPEthernetIntHandler + EXTERN SysTickIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD lwIPEthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/enet_uip/Makefile b/boards/dk-tm4c129x/enet_uip/Makefile new file mode 100644 index 0000000..f0c0525 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/Makefile @@ -0,0 +1,106 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Ethernet with uIP. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=. +VPATH+=../../../../third_party/uip-1.0/apps/dhcpc +VPATH+=../drivers +VPATH+=../../../../third_party/uip-1.0/apps/httpd +VPATH+=../../../../third_party/uip-1.0/uip +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/uip-1.0/apps +IPATH+=../../../../third_party/uip-1.0/uip +IPATH+=../../../../third_party/uip-1.0 +IPATH+=../../../../utils + +# +# The default rule, which causes the Ethernet with uIP to be built. +# +all: ${COMPILER} +all: ${COMPILER}/enet_uip.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Ethernet with uIP. +# +${COMPILER}/enet_uip.axf: ${COMPILER}/dhcpc.o +${COMPILER}/enet_uip.axf: ${COMPILER}/enet_uip.o +${COMPILER}/enet_uip.axf: ${COMPILER}/frame.o +${COMPILER}/enet_uip.axf: ${COMPILER}/httpd.o +${COMPILER}/enet_uip.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/enet_uip.axf: ${COMPILER}/pinout.o +${COMPILER}/enet_uip.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/enet_uip.axf: ${COMPILER}/uartstdio.o +${COMPILER}/enet_uip.axf: ${COMPILER}/uip.o +${COMPILER}/enet_uip.axf: ${COMPILER}/uip_arp.o +${COMPILER}/enet_uip.axf: ${COMPILER}/uip_timer.o +${COMPILER}/enet_uip.axf: ${COMPILER}/ustdlib.o +${COMPILER}/enet_uip.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/enet_uip.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/enet_uip.axf: enet_uip.ld +SCATTERgcc_enet_uip=enet_uip.ld +ENTRY_enet_uip=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DDEBUG_OUTPUT -DUIP_OFFLOAD_ICMP_CHKSUM + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/enet_uip/ccs/.ccsimportspec b/boards/dk-tm4c129x/enet_uip/ccs/.ccsimportspec new file mode 100644 index 0000000..a415eb8 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_uip/ccs/.ccsproject b/boards/dk-tm4c129x/enet_uip/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_uip/ccs/.cproject b/boards/dk-tm4c129x/enet_uip/ccs/.cproject new file mode 100644 index 0000000..8fa2006 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/.cproject @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_uip/ccs/.project b/boards/dk-tm4c129x/enet_uip/ccs/.project new file mode 100644 index 0000000..ddf4617 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/.project @@ -0,0 +1,100 @@ + + + enet_uip + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + enet_uip.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_uip/enet_uip.c + + + enet_uip_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_uip/enet_uip_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/enet_uip/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/uip-1.0/uip/uip.c + 1 + SW_ROOT/third_party/uip-1.0/uip/uip.c + + + third_party/uip-1.0/uip/uip_arp.c + 1 + SW_ROOT/third_party/uip-1.0/uip/uip_arp.c + + + third_party/uip-1.0/uip/uip_timer.c + 1 + SW_ROOT/third_party/uip-1.0/uip/uip_timer.c + + + third_party/uip-1.0/apps/dhcpc/dhcpc.c + 1 + SW_ROOT/third_party/uip-1.0/apps/dhcpc/dhcpc.c + + + third_party/uip-1.0/apps/httpd/httpd.c + 1 + SW_ROOT/third_party/uip-1.0/apps/httpd/httpd.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/enet_uip/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/enet_uip/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.bin b/boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.bin new file mode 100644 index 0000000..f54b913 Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.bin differ diff --git a/boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.out b/boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.out new file mode 100644 index 0000000..ef573d9 Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/ccs/Debug/enet_uip.out differ diff --git a/boards/dk-tm4c129x/enet_uip/ccs/macros.ini_initial b/boards/dk-tm4c129x/enet_uip/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/enet_uip/ccs/target_config.ccxml b/boards/dk-tm4c129x/enet_uip/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/enet_uip/clock-arch.h b/boards/dk-tm4c129x/enet_uip/clock-arch.h new file mode 100644 index 0000000..f30285e --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/clock-arch.h @@ -0,0 +1,41 @@ +//***************************************************************************** +// +// clock-arch.h - uIP Project Specific Clock-Architecture header file. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +#include + +// +// Define how many clock ticks in one second. +// Note: This should match the value of SYSTICKHZ in the main program. +// +#define CLOCK_CONF_SECOND 100 + +// +// Define the clock type used for returning system ticks. +// +typedef uint32_t clock_time_t; + +#endif // __CLOCK_ARCH_H__ diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.c b/boards/dk-tm4c129x/enet_uip/enet_uip.c new file mode 100644 index 0000000..675f9af --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.c @@ -0,0 +1,1065 @@ +//***************************************************************************** +// +// enet_uip.c - Sample WebServer Application for Ethernet Demo +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_emac.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/emac.h" +#include "driverlib/flash.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "uip/uip.h" +#include "uip/uip_arp.h" +#include "httpd/httpd.h" +#include "dhcpc/dhcpc.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Ethernet with uIP (enet_uip)

      +//! +//! This example application demonstrates the operation of the Tiva C Series +//! Ethernet controller using the uIP TCP/IP Stack. DHCP is used to obtain +//! an Ethernet address. A basic web site is served over the Ethernet port. +//! The web site displays a few lines of text, and a counter that increments +//! each time the page is sent. +//! +//! UART0, connected to the ICDI virtual COM port and running at 115,200, +//! 8-N-1, is used to display messages from this application. +//! +//! For additional details on uIP, refer to the uIP web page at: +//! http://www.sics.se/~adam/uip/ +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines for setting up the system clock. +// +//***************************************************************************** +#define SYSTICKHZ CLOCK_CONF_SECOND +#define SYSTICKMS (1000 / SYSTICKHZ) +#define SYSTICKUS (1000000 / SYSTICKHZ) +#define SYSTICKNS (1000000000 / SYSTICKHZ) + +//***************************************************************************** +// +// Macro for accessing the Ethernet header information in the buffer. +// +//***************************************************************************** +u8_t g_pui8UIPBuffer[UIP_BUFSIZE + 2]; +u8_t *uip_buf = g_pui8UIPBuffer; + +#define BUF ((struct uip_eth_hdr *)uip_buf) + +//***************************************************************************** +// +// Ethernet DMA descriptors. +// +// Although uIP uses a single buffer, the MAC hardware needs a minimum of +// 3 receive descriptors to operate. +// +//***************************************************************************** +#define NUM_TX_DESCRIPTORS 3 +#define NUM_RX_DESCRIPTORS 3 +tEMACDMADescriptor g_psRxDescriptor[NUM_TX_DESCRIPTORS]; +tEMACDMADescriptor g_psTxDescriptor[NUM_RX_DESCRIPTORS]; + +uint32_t g_ui32RxDescIndex; +uint32_t g_ui32TxDescIndex; + +//***************************************************************************** +// +// Transmit and receive buffers. +// +//***************************************************************************** +#define RX_BUFFER_SIZE 1536 +#define TX_BUFFER_SIZE 1536 +uint8_t g_pui8RxBuffer[RX_BUFFER_SIZE]; +uint8_t g_pui8TxBuffer[TX_BUFFER_SIZE]; + +//***************************************************************************** +// +// A set of flags. The flag bits are defined as follows: +// +// 0 -> An indicator that a SysTick interrupt has occurred. +// 1 -> An RX Packet has been received. +// 2 -> A TX packet DMA transfer is pending. +// 3 -> A RX packet DMA transfer is pending. +// +//***************************************************************************** +#define FLAG_SYSTICK 0 +#define FLAG_RXPKT 1 +#define FLAG_TXPKT 2 +#define FLAG_RXPKTPEND 3 +static volatile uint32_t g_ui32Flags; + +//***************************************************************************** +// +// A system tick counter, incremented every SYSTICKMS. +// +//***************************************************************************** +volatile uint32_t g_ui32TickCounter = 0; + +//***************************************************************************** +// +// Default TCP/IP Settings for this application. +// +// Default to Link Local address ... (169.254.1.0 to 169.254.254.255). Note: +// This application does not implement the Zeroconf protocol. No ARP query is +// issued to determine if this static IP address is already in use. +// +// Uncomment the following #define statement to enable STATIC IP +// instead of DHCP. +// +//***************************************************************************** +//#define USE_STATIC_IP + +#ifndef DEFAULT_IPADDR0 +#define DEFAULT_IPADDR0 169 +#endif + +#ifndef DEFAULT_IPADDR1 +#define DEFAULT_IPADDR1 254 +#endif + +#ifndef DEFAULT_IPADDR2 +#define DEFAULT_IPADDR2 19 +#endif + +#ifndef DEFAULT_IPADDR3 +#define DEFAULT_IPADDR3 63 +#endif + +#ifndef DEFAULT_NETMASK0 +#define DEFAULT_NETMASK0 255 +#endif + +#ifndef DEFAULT_NETMASK1 +#define DEFAULT_NETMASK1 255 +#endif + +#ifndef DEFAULT_NETMASK2 +#define DEFAULT_NETMASK2 0 +#endif + +#ifndef DEFAULT_NETMASK3 +#define DEFAULT_NETMASK3 0 +#endif + +//***************************************************************************** +// +// UIP Timers (in MS) +// +//***************************************************************************** +#define UIP_PERIODIC_TIMER_MS 500 +#define UIP_ARP_TIMER_MS 10000 + +//***************************************************************************** +// +// The drawing context used to draw to the screen. +// +//***************************************************************************** +static tContext g_sContext; + +//***************************************************************************** +// +// The vertical position of the status string on the LCD display. +// +//***************************************************************************** +#define STATUS_Y 128 + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} + +//***************************************************************************** +// +// The interrupt handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Increment the system tick count. + // + g_ui32TickCounter++; + + // + // Indicate that a SysTick interrupt has occurred. + // + HWREGBITW(&g_ui32Flags, FLAG_SYSTICK) = 1; +} + +//***************************************************************************** +// +// When using the timer module in UIP, this function is required to return +// the number of ticks. Note that the file "clock-arch.h" must be provided +// by the application, and define CLOCK_CONF_SECONDS as the number of ticks +// per second, and must also define the typedef "clock_time_t". +// +//***************************************************************************** +clock_time_t +clock_time(void) +{ + return((clock_time_t)g_ui32TickCounter); +} + +//***************************************************************************** +// +// Display a status string on the LCD and also transmit it via the serial port. +// +//***************************************************************************** +void +UpdateStatus(char *pcStatus) +{ + tRectangle sRect; + + // + // Dump that status string to the serial port. + // + UARTprintf("%s\n", pcStatus); + + // + // Clear any previous status message. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = STATUS_Y - 16; + sRect.i16YMax = STATUS_Y + 16; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Display the new status string. + // + GrContextFontSet(&g_sContext, g_psFontCmss20); + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(&g_sContext, pcStatus, -1, + GrContextDpyWidthGet(&g_sContext) / 2, STATUS_Y, 0); +} + +//***************************************************************************** +// +// Display the current IP address on the screen and transmit it via the UART. +// +//***************************************************************************** +void +ShowIPAddress(const uip_ipaddr_t sIPAddr) +{ + char pcBuffer[24]; + + usprintf(pcBuffer, "IP: %d.%d.%d.%d", sIPAddr[0] & 0xff, + sIPAddr[0] >> 8, sIPAddr[1] & 0xff, sIPAddr[1] >> 8); + UpdateStatus(pcBuffer); +} + +//***************************************************************************** +// +// The interrupt handler for the Ethernet interrupt. +// +//***************************************************************************** +void +EthernetIntHandler(void) +{ + uint32_t ui32Temp; + + // + // Read and Clear the interrupt. + // + ui32Temp = ROM_EMACIntStatus(EMAC0_BASE, true); + ROM_EMACIntClear(EMAC0_BASE, ui32Temp); + + // + // Check to see if an RX Interrupt has occurred. + // + if(ui32Temp & EMAC_INT_RECEIVE) + { + // + // Indicate that a packet has been received. + // + HWREGBITW(&g_ui32Flags, FLAG_RXPKT) = 1; + } + + // + // Has the DMA finished transferring a packet to the transmitter? + // + if(ui32Temp & EMAC_INT_TRANSMIT) + { + // + // Indicate that a packet has been sent. + // + HWREGBITW(&g_ui32Flags, FLAG_TXPKT) = 0; + } +} + +//***************************************************************************** +// +// Callback for when DHCP client has been configured. +// +//***************************************************************************** +void +dhcpc_configured(const struct dhcpc_state *s) +{ + uip_sethostaddr(&s->ipaddr); + uip_setnetmask(&s->netmask); + uip_setdraddr(&s->default_router); + ShowIPAddress(s->ipaddr); +} + +//***************************************************************************** +// +// Read a packet from the DMA receive buffer into the uIP packet buffer. +// +//***************************************************************************** +int32_t +PacketReceive(uint32_t ui32Base, uint8_t *pui8Buf, int32_t i32BufLen) +{ + int_fast32_t i32FrameLen, i32Loop; + + // + // Check the arguments. + // + ASSERT(ui32Base == EMAC0_BASE); + ASSERT(pui8Buf != 0); + ASSERT(i32BufLen > 0); + + // + // By default, we assume we got a bad frame. + // + i32FrameLen = 0; + + // + // Make sure that we own the receive descriptor. + // + if(!(g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus & DES0_RX_CTRL_OWN)) + { + // + // We own the receive descriptor so check to see if it contains a valid + // frame. Look for a descriptor error, indicating that the incoming + // packet was truncated or, if this is the last frame in a packet, + // the receive error bit. + // + if(!(g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus & + DES0_RX_STAT_ERR)) + { + // + // We have a valid frame so copy the content to the supplied + // buffer. First check that the "last descriptor" flag is set. We + // sized the receive buffer such that it can always hold a valid + // frame so this flag should never be clear at this point but... + // + if(g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus & + DES0_RX_STAT_LAST_DESC) + { + i32FrameLen = + ((g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus & + DES0_RX_STAT_FRAME_LENGTH_M) >> + DES0_RX_STAT_FRAME_LENGTH_S); + + // + // Sanity check. This shouldn't be required since we sized the + // uIP buffer such that it's the same size as the DMA receive + // buffer but, just in case... + // + if(i32FrameLen > i32BufLen) + { + i32FrameLen = i32BufLen; + } + + // + // Copy the data from the DMA receive buffer into the provided + // frame buffer. + // + for(i32Loop = 0; i32Loop < i32FrameLen; i32Loop++) + { + pui8Buf[i32Loop] = g_pui8RxBuffer[i32Loop]; + } + } + } + + // + // Move on to the next descriptor in the chain. + // + g_ui32RxDescIndex++; + if(g_ui32RxDescIndex == NUM_RX_DESCRIPTORS) + { + g_ui32RxDescIndex = 0; + } + + // + // Mark the next descriptor in the ring as available for the receiver + // to write into. + // + g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus = DES0_RX_CTRL_OWN; + } + + // + // Return the Frame Length + // + return(i32FrameLen); +} + +//***************************************************************************** +// +// Transmit a packet from the supplied buffer. +// +//***************************************************************************** +static int32_t +PacketTransmit(uint32_t ui32Base, uint8_t *pui8Buf, int32_t i32BufLen) +{ + int_fast32_t i32Loop; + + // + // Indicate that a packet is being sent. + // + HWREGBITW(&g_ui32Flags, FLAG_TXPKT) = 1; + + // + // Wait for the previous packet to be transmitted. + // + while(g_psTxDescriptor[g_ui32TxDescIndex].ui32CtrlStatus & + DES0_TX_CTRL_OWN) + { + // + // Spin and waste time. + // + } + + // + // Check that we're not going to overflow the transmit buffer. This + // shouldn't be necessary since the uIP buffer is smaller than our DMA + // transmit buffer but, just in case... + // + if(i32BufLen > TX_BUFFER_SIZE) + { + i32BufLen = TX_BUFFER_SIZE; + } + + // + // Copy the packet data into the transmit buffer. + // + for(i32Loop = 0; i32Loop < i32BufLen; i32Loop++) + { + g_pui8TxBuffer[i32Loop] = pui8Buf[i32Loop]; + } + + // + // Move to the next descriptor. + // + g_ui32TxDescIndex++; + if(g_ui32TxDescIndex == NUM_TX_DESCRIPTORS) + { + g_ui32TxDescIndex = 0; + } + + // + // Fill in the packet size and tell the transmitter to start work. + // + g_psTxDescriptor[g_ui32TxDescIndex].ui32Count = (uint32_t)i32BufLen; + g_psTxDescriptor[g_ui32TxDescIndex].ui32CtrlStatus = + (DES0_TX_CTRL_LAST_SEG | DES0_TX_CTRL_FIRST_SEG | + DES0_TX_CTRL_INTERRUPT | DES0_TX_CTRL_IP_ALL_CKHSUMS | + DES0_TX_CTRL_CHAINED | DES0_TX_CTRL_OWN); + + // + // Tell the DMA to reacquire the descriptor now that we've filled it in. + // + ROM_EMACTxDMAPollDemand(EMAC0_BASE); + + // + // Return the number of bytes sent. + // + return(i32BufLen); +} + +//***************************************************************************** +// +// Initialize the transmit and receive DMA descriptors. We apparently need +// a minimum of 3 descriptors in each chain. This is overkill since uIP uses +// a single, common transmit and receive buffer so we tag each descriptor +// with the same buffer and will make sure we only hand the DMA one descriptor +// at a time. +// +//***************************************************************************** +void +InitDescriptors(uint32_t ui32Base) +{ + uint32_t ui32Loop; + + // + // Initialize each of the transmit descriptors. Note that we leave the OWN + // bit clear here since we have not set up any transmissions yet. + // + for(ui32Loop = 0; ui32Loop < NUM_TX_DESCRIPTORS; ui32Loop++) + { + g_psTxDescriptor[ui32Loop].ui32Count = + (DES1_TX_CTRL_SADDR_INSERT | + (TX_BUFFER_SIZE << DES1_TX_CTRL_BUFF1_SIZE_S)); + g_psTxDescriptor[ui32Loop].pvBuffer1 = g_pui8TxBuffer; + g_psTxDescriptor[ui32Loop].DES3.pLink = + (ui32Loop == (NUM_TX_DESCRIPTORS - 1)) ? + g_psTxDescriptor : &g_psTxDescriptor[ui32Loop + 1]; + g_psTxDescriptor[ui32Loop].ui32CtrlStatus = + (DES0_TX_CTRL_LAST_SEG | DES0_TX_CTRL_FIRST_SEG | + DES0_TX_CTRL_INTERRUPT | DES0_TX_CTRL_CHAINED | + DES0_TX_CTRL_IP_ALL_CKHSUMS); + } + + // + // Initialize each of the receive descriptors. We clear the OWN bit here + // to make sure that the receiver doesn't start writing anything + // immediately. + // + for(ui32Loop = 0; ui32Loop < NUM_RX_DESCRIPTORS; ui32Loop++) + { + g_psRxDescriptor[ui32Loop].ui32CtrlStatus = 0; + g_psRxDescriptor[ui32Loop].ui32Count = + (DES1_RX_CTRL_CHAINED | + (RX_BUFFER_SIZE << DES1_RX_CTRL_BUFF1_SIZE_S)); + g_psRxDescriptor[ui32Loop].pvBuffer1 = g_pui8RxBuffer; + g_psRxDescriptor[ui32Loop].DES3.pLink = + (ui32Loop == (NUM_RX_DESCRIPTORS - 1)) ? + g_psRxDescriptor : &g_psRxDescriptor[ui32Loop + 1]; + } + + // + // Set the descriptor pointers in the hardware. + // + ROM_EMACRxDMADescriptorListSet(ui32Base, g_psRxDescriptor); + ROM_EMACTxDMADescriptorListSet(ui32Base, g_psTxDescriptor); + + // + // Start from the beginning of both descriptor chains. We actually set + // the transmit descriptor index to the last descriptor in the chain + // since it will be incremented before use and this means the first + // transmission we perform will use the correct descriptor. + // + g_ui32RxDescIndex = 0; + g_ui32TxDescIndex = NUM_TX_DESCRIPTORS - 1; +} + +//***************************************************************************** +// +// This example demonstrates the use of the Ethernet Controller with the uIP +// TCP/IP stack. +// +//***************************************************************************** +int +main(void) +{ + uip_ipaddr_t sIPAddr; + static struct uip_eth_addr sTempAddr; + int32_t i32PeriodicTimer, i32ARPTimer; +#ifdef EXTERNAL_RMII_PHY + uint16_t ui16Val; +#endif + uint32_t ui32User0, ui32User1; + uint32_t ui32Temp, ui32PHYConfig, ui32SysClock; + uint8_t ui8PHYAddr; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "enet-uip"); + + // + // Initialize the UART. + // + UARTStdioConfig(0, 115200, ui32SysClock); + UARTprintf("Ethernet with uIP\n-----------------\n\n"); + +#ifdef EXTERNAL_RMII_PHY + UpdateStatus("Using RMII PHY."); + ui32PHYConfig = EMAC_PHY_TYPE_EXTERNAL_RMII; + ui8PHYAddr = 0; +#elif defined EXTERNAL_MII_PHY + UpdateStatus("Using MII PHY."); + ui32PHYConfig = EMAC_PHY_TYPE_EXTERNAL_MII; + ui8PHYAddr = 0; +#else + UpdateStatus("Using Internal PHY."); + ui32PHYConfig = (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | + EMAC_PHY_AN_100B_T_FULL_DUPLEX); + ui8PHYAddr = 0; +#endif + + // + // Read the MAC address from the user registers. + // + ROM_FlashUserGet(&ui32User0, &ui32User1); + if((ui32User0 == 0xffffffff) || (ui32User1 == 0xffffffff)) + { + // + // We should never get here. This is an error if the MAC address has + // not been programmed into the device. Exit the program. + // + UpdateStatus("MAC Address Not Programmed!"); + while(1) + { + } + } + + // + // Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC + // address needed to program the hardware registers, then program the MAC + // address into the Ethernet Controller registers. + // + sTempAddr.addr[0] = ((ui32User0 >> 0) & 0xff); + sTempAddr.addr[1] = ((ui32User0 >> 8) & 0xff); + sTempAddr.addr[2] = ((ui32User0 >> 16) & 0xff); + sTempAddr.addr[3] = ((ui32User1 >> 0) & 0xff); + sTempAddr.addr[4] = ((ui32User1 >> 8) & 0xff); + sTempAddr.addr[5] = ((ui32User1 >> 16) & 0xff); + + // + // Configure SysTick for a periodic interrupt. + // + ROM_SysTickPeriodSet(ui32SysClock / SYSTICKHZ); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Enable and reset the Ethernet modules. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_EMAC0); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_EPHY0); + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_EMAC0); + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_EPHY0); + + // + // Wait for the MAC to be ready. + // + UpdateStatus("Waiting for MAC to be ready..."); + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_EMAC0)) + { + } + + // + // Configure for use with the internal PHY. + // + MAP_EMACPHYConfigSet(EMAC0_BASE, ui32PHYConfig); + UpdateStatus("MAC ready."); + + // + // Reset the MAC. + // + ROM_EMACReset(EMAC0_BASE); + + // + // Initialize the MAC and set the DMA mode. + // + ROM_EMACInit(EMAC0_BASE, ui32SysClock, + EMAC_BCONFIG_MIXED_BURST | EMAC_BCONFIG_PRIORITY_FIXED, 4, 4, + 0); + +#ifdef EXTERNAL_RMII_PHY + // + // When using an external RMII PHY, we need to acquire link before we can + // determine how to configure the MAC. Unfortunately, the bit signalling + // on RMII changes depending upon whether the PHY is configured to use + // 10Mbps or 100Mbps and we need to tell the MAC which signalling method + // to use. + // + // With MII, the signalling is the same for both speeds so we don't need to + // include code to wait for the link to be acquired. + // + + // + // Write the PHY register that tells it to start auto-negotiation. + // + UpdateStatus("Starting autonegotiation..."); + ROM_EMACPHYWrite(EMAC0_BASE, ui8PHYAddr, EPHY_BMCR, + EPHY_BMCR_ANEN | EPHY_BMCR_RESTARTAN); + + // + // Poll, waiting for auto-negotiation to complete. + // + UpdateStatus("Waiting for autonegotiation to complete..."); + do + { + ui16Val = ROM_EMACPHYRead(EMAC0_BASE, ui8PHYAddr, EPHY_BMSR); + ROM_SysCtlDelay(ui32SysClock / (10 * 3)); + } + while(!(ui16Val & EPHY_BMSR_ANC)); + + // + // Wait for link to be acquired. + // + UpdateStatus("Waiting for link..."); + while(!(ui16Val & EPHY_BMSR_LINKSTAT)) + { + ui16Val = ROM_EMACPHYRead(EMAC0_BASE, ui8PHYAddr, EPHY_BMSR); + } + + UpdateStatus("Link acquired."); + + // + // What's the operating speed? + // + ui16Val = ROM_EMACPHYRead(EMAC0_BASE, ui8PHYAddr, EPHY_STS); + + // + // Set the MAC to PHY communication speed and duplex mode accordingly. + // + UARTprintf("Speed is 10%sMbps.\n", (ui16Val & EPHY_STS_SPEED) ? "" : "0"); + + ROM_EMACConfigSet(EMAC0_BASE, + (((ui16Val & EPHY_STS_SPEED) ? 0 : EMAC_CONFIG_100MBPS) | + ((ui16Val & EPHY_STS_DUPLEX) ? EMAC_CONFIG_FULL_DUPLEX : + 0) | + EMAC_CONFIG_FULL_DUPLEX | + EMAC_CONFIG_CHECKSUM_OFFLOAD | + EMAC_CONFIG_7BYTE_PREAMBLE | + EMAC_CONFIG_IF_GAP_96BITS | EMAC_CONFIG_USE_MACADDR0 | + EMAC_CONFIG_SA_FROM_DESCRIPTOR | + EMAC_CONFIG_BO_LIMIT_1024), + (EMAC_MODE_RX_STORE_FORWARD | + EMAC_MODE_TX_STORE_FORWARD | + EMAC_MODE_TX_THRESHOLD_64_BYTES | + EMAC_MODE_RX_THRESHOLD_64_BYTES), 0); +#else + // + // Set MAC configuration options. + // + ROM_EMACConfigSet(EMAC0_BASE, + (EMAC_CONFIG_FULL_DUPLEX | EMAC_CONFIG_CHECKSUM_OFFLOAD | + EMAC_CONFIG_7BYTE_PREAMBLE | EMAC_CONFIG_IF_GAP_96BITS | + EMAC_CONFIG_USE_MACADDR0 | + EMAC_CONFIG_SA_FROM_DESCRIPTOR | + EMAC_CONFIG_BO_LIMIT_1024), + (EMAC_MODE_RX_STORE_FORWARD | + EMAC_MODE_TX_STORE_FORWARD | + EMAC_MODE_TX_THRESHOLD_64_BYTES | + EMAC_MODE_RX_THRESHOLD_64_BYTES), 0); +#endif + + // + // Initialize the Ethernet DMA descriptors. + // + InitDescriptors(EMAC0_BASE); + + // + // Program the hardware with its MAC address (for filtering). + // + ROM_EMACAddrSet(EMAC0_BASE, 0, (uint8_t *)&sTempAddr); + +#ifndef EXTERNAL_RMII_PHY + // + // Wait for the link to become active. If we are using an external + // RMII PHY, we already waited for link to be acquired prior to + // configuring the MAC so don't wait again here. + // + UpdateStatus("Waiting for Link"); + while((ROM_EMACPHYRead(EMAC0_BASE, ui8PHYAddr, EPHY_BMSR) & + EPHY_BMSR_LINKSTAT) == 0) + { + } + UpdateStatus("Link Established"); +#endif + + // + // Set MAC filtering options. We receive all broadcast and multicast + // packets along with those addressed specifically for us. + // + ROM_EMACFrameFilterSet(EMAC0_BASE, (EMAC_FRMFILTER_SADDR | + EMAC_FRMFILTER_PASS_MULTICAST | + EMAC_FRMFILTER_PASS_NO_CTRL)); + + // + // Clear any pending interrupts. + // + ROM_EMACIntClear(EMAC0_BASE, EMACIntStatus(EMAC0_BASE, false)); + + // + // Initialize the uIP TCP/IP stack. + // + uip_init(); + + // + // Set the local MAC address (for uIP). + // + uip_setethaddr(sTempAddr); +#ifdef USE_STATIC_IP + uip_ipaddr(sIPAddr, DEFAULT_IPADDR0, DEFAULT_IPADDR1, DEFAULT_IPADDR2, + DEFAULT_IPADDR3); + uip_sethostaddr(sIPAddr); + ShowIPAddress(sIPAddr); + uip_ipaddr(sIPAddr, DEFAULT_NETMASK0, DEFAULT_NETMASK1, DEFAULT_NETMASK2, + DEFAULT_NETMASK3); + uip_setnetmask(sIPAddr); +#else + uip_ipaddr(sIPAddr, 0, 0, 0, 0); + uip_sethostaddr(sIPAddr); + UpdateStatus("Waiting for IP address..."); + uip_ipaddr(sIPAddr, 0, 0, 0, 0); + uip_setnetmask(sIPAddr); +#endif + + // + // Enable the Ethernet MAC transmitter and receiver. + // + ROM_EMACTxEnable(EMAC0_BASE); + ROM_EMACRxEnable(EMAC0_BASE); + + // + // Enable the Ethernet interrupt. + // + ROM_IntEnable(INT_EMAC0); + + // + // Enable the Ethernet RX Packet interrupt source. + // + ROM_EMACIntEnable(EMAC0_BASE, EMAC_INT_RECEIVE); + + // + // Mark the first receive descriptor as available to the DMA to start + // the receive processing. + // + g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus |= DES0_RX_CTRL_OWN; + + // + // Initialize the TCP/IP Application (e.g. web server). + // + httpd_init(); + +#ifndef USE_STATIC_IP + // + // Initialize the DHCP Client Application. + // + dhcpc_init(&sTempAddr.addr[0], 6); + dhcpc_request(); +#endif + + // + // Main Application Loop. + // + i32PeriodicTimer = 0; + i32ARPTimer = 0; + while(true) + { + // + // Wait for an event to occur. This can be either a System Tick event, + // or an RX Packet event. + // + while(!g_ui32Flags) + { + } + + // + // If SysTick, Clear the SysTick interrupt flag and increment the + // timers. + // + if(HWREGBITW(&g_ui32Flags, FLAG_SYSTICK) == 1) + { + HWREGBITW(&g_ui32Flags, FLAG_SYSTICK) = 0; + i32PeriodicTimer += SYSTICKMS; + i32ARPTimer += SYSTICKMS; + } + + // + // Check for an RX Packet and read it. + // + if(HWREGBITW(&g_ui32Flags, FLAG_RXPKT)) + { + // + // Clear the RX Packet event flag. + // + HWREGBITW(&g_ui32Flags, FLAG_RXPKT) = 0; + + // Get the packet and set uip_len for uIP stack usage. + // + uip_len = (unsigned short)PacketReceive(EMAC0_BASE, uip_buf, + sizeof(g_pui8UIPBuffer)); + + // + // Process incoming IP packets here. + // + if(BUF->type == htons(UIP_ETHTYPE_IP)) + { + uip_arp_ipin(); + uip_input(); + + // + // If the above function invocation resulted in data that + // should be sent out on the network, the global variable + // uip_len is set to a value > 0. + // + if(uip_len > 0) + { + uip_arp_out(); + PacketTransmit(EMAC0_BASE, uip_buf, uip_len); + uip_len = 0; + } + } + + // + // Process incoming ARP packets here. + // + else if(BUF->type == htons(UIP_ETHTYPE_ARP)) + { + uip_arp_arpin(); + + // + // If the above function invocation resulted in data that + // should be sent out on the network, the global variable + // uip_len is set to a value > 0. + // + if(uip_len > 0) + { + PacketTransmit(EMAC0_BASE, uip_buf, uip_len); + uip_len = 0; + } + } + } + + // + // Process TCP/IP Periodic Timer here. + // + if(i32PeriodicTimer > UIP_PERIODIC_TIMER_MS) + { + i32PeriodicTimer = 0; + for(ui32Temp = 0; ui32Temp < UIP_CONNS; ui32Temp++) + { + uip_periodic(ui32Temp); + + // + // If the above function invocation resulted in data that + // should be sent out on the network, the global variable + // uip_len is set to a value > 0. + // + if(uip_len > 0) + { + uip_arp_out(); + PacketTransmit(EMAC0_BASE, uip_buf, uip_len); + uip_len = 0; + } + } + +#if UIP_UDP + for(ui32Temp = 0; ui32Temp < UIP_UDP_CONNS; ui32Temp++) + { + uip_udp_periodic(ui32Temp); + + // + // If the above function invocation resulted in data that + // should be sent out on the network, the global variable + // uip_len is set to a value > 0. + // + if(uip_len > 0) + { + uip_arp_out(); + PacketTransmit(EMAC0_BASE, uip_buf, uip_len); + uip_len = 0; + } + } +#endif + } + + // + // Process ARP Timer here. + // + if(i32ARPTimer > UIP_ARP_TIMER_MS) + { + i32ARPTimer = 0; + uip_arp_timer(); + } + } +} + +#ifdef UIP_ARCH_IPCHKSUM +// +// Return the IP checksum for the packet in uip_buf. This is a dummy since +// the hardware calculates this for us. +// +u16_t +uip_ipchksum(void) +{ + // + // Dummy function - the hardware calculates and inserts all required + // checksums for us. + // + return(0xffff); +} + +u16_t +uip_chksum(u16_t *data, u16_t len) +{ + return(0xffff); +} + +u16_t +uip_icmp6chksum(void) +{ + return(0xffff); +} + +u16_t +uip_tcpchksum(void) +{ + return(0xffff); +} +#endif diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.ewd b/boards/dk-tm4c129x/enet_uip/enet_uip.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.ewp b/boards/dk-tm4c129x/enet_uip/enet_uip.ewp new file mode 100644 index 0000000..a4c24c1 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.ewp @@ -0,0 +1,831 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\third_party\uip-1.0\apps\dhcpc\dhcpc.c + + + $PROJ_DIR$\enet_uip.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\..\..\..\third_party\uip-1.0\apps\httpd\httpd.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\third_party\uip-1.0\uip\uip.c + + + $PROJ_DIR$\..\..\..\..\third_party\uip-1.0\uip\uip_arp.c + + + $PROJ_DIR$\..\..\..\..\third_party\uip-1.0\uip\uip_timer.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.icf b/boards/dk-tm4c129x/enet_uip/enet_uip.icf new file mode 100644 index 0000000..9255df7 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// enet_uip.icf - Linker configuration file for enet_uip. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.ld b/boards/dk-tm4c129x/enet_uip/enet_uip.ld new file mode 100644 index 0000000..beef25d --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * enet_uip.ld - Linker configuration file for enet_uip. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.sct b/boards/dk-tm4c129x/enet_uip/enet_uip.sct new file mode 100644 index 0000000..53e9515 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; enet_uip.sct - Linker configuration file for enet_uip. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.uvopt b/boards/dk-tm4c129x/enet_uip/enet_uip.uvopt new file mode 100644 index 0000000..d77228e --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.uvopt @@ -0,0 +1,443 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + enet_uip + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\uip-1.0\apps\dhcpc\dhcpc.c + dhcpc.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\enet_uip.c + enet_uip.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\uip-1.0\apps\httpd\httpd.c + httpd.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 7 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\uip-1.0\uip\uip.c + uip.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\uip-1.0\uip\uip_arp.c + uip_arp.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\uip-1.0\uip\uip_timer.c + uip_timer.c + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 15 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip.uvproj b/boards/dk-tm4c129x/enet_uip/enet_uip.uvproj new file mode 100644 index 0000000..5b5af9c --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + enet_uip + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + enet_uip + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\enet_uip.bin .\rvmdk\enet_uip.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 DEBUG_OUTPUT UIP_OFFLOAD_ICMP_CHKSUM + + .;..;..\..\..\..;..\..\..\..\third_party\uip-1.0\apps;..\..\..\..\third_party\uip-1.0\uip;..\..\..\..\third_party\uip-1.0;..\..\..\..\utils; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + enet_uip.sct + + + --entry Reset_Handler + + + + + + + + Source + + + dhcpc.c + 1 + ..\..\..\..\third_party\uip-1.0\apps\dhcpc\dhcpc.c + + + enet_uip.c + 1 + .\enet_uip.c + + + frame.c + 1 + ..\drivers\frame.c + + + httpd.c + 1 + ..\..\..\..\third_party\uip-1.0\apps\httpd\httpd.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + uip.c + 1 + ..\..\..\..\third_party\uip-1.0\uip\uip.c + + + uip_arp.c + 1 + ..\..\..\..\third_party\uip-1.0\uip\uip_arp.c + + + uip_timer.c + 1 + ..\..\..\..\third_party\uip-1.0\uip\uip_timer.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/enet_uip/enet_uip_ccs.cmd b/boards/dk-tm4c129x/enet_uip/enet_uip_ccs.cmd new file mode 100644 index 0000000..ed998cf --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/enet_uip_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * enet_uip_ccs.cmd - CCS linker configuration file for enet_uip. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.bin b/boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.bin new file mode 100644 index 0000000..9629b78 Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.bin differ diff --git a/boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.out b/boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.out new file mode 100644 index 0000000..0cb9e40 Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/ewarm/Exe/enet_uip.out differ diff --git a/boards/dk-tm4c129x/enet_uip/gcc/enet_uip.axf b/boards/dk-tm4c129x/enet_uip/gcc/enet_uip.axf new file mode 100644 index 0000000..8583dc1 Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/gcc/enet_uip.axf differ diff --git a/boards/dk-tm4c129x/enet_uip/gcc/enet_uip.bin b/boards/dk-tm4c129x/enet_uip/gcc/enet_uip.bin new file mode 100644 index 0000000..19eafcb Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/gcc/enet_uip.bin differ diff --git a/boards/dk-tm4c129x/enet_uip/readme.txt b/boards/dk-tm4c129x/enet_uip/readme.txt new file mode 100644 index 0000000..d8313dc --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/readme.txt @@ -0,0 +1,33 @@ +Ethernet with uIP + +This example application demonstrates the operation of the Tiva C Series +Ethernet controller using the uIP TCP/IP Stack. DHCP is used to obtain +an Ethernet address. A basic web site is served over the Ethernet port. +The web site displays a few lines of text, and a counter that increments +each time the page is sent. + +UART0, connected to the ICDI virtual COM port and running at 115,200, +8-N-1, is used to display messages from this application. + +For additional details on uIP, refer to the uIP web page at: +http://www.sics.se/~adam/uip/ + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.axf b/boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.axf new file mode 100644 index 0000000..fc04caf Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.axf differ diff --git a/boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.bin b/boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.bin new file mode 100644 index 0000000..f2799ca Binary files /dev/null and b/boards/dk-tm4c129x/enet_uip/rvmdk/enet_uip.bin differ diff --git a/boards/dk-tm4c129x/enet_uip/startup_ccs.c b/boards/dk-tm4c129x/enet_uip/startup_ccs.c new file mode 100644 index 0000000..d2bb22a --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void EthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + EthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_uip/startup_ewarm.c b/boards/dk-tm4c129x/enet_uip/startup_ewarm.c new file mode 100644 index 0000000..79a712c --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void EthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + EthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_uip/startup_gcc.c b/boards/dk-tm4c129x/enet_uip/startup_gcc.c new file mode 100644 index 0000000..2cfa08f --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void EthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + EthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/enet_uip/startup_rvmdk.S b/boards/dk-tm4c129x/enet_uip/startup_rvmdk.S new file mode 100644 index 0000000..043a697 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN EthernetIntHandler + EXTERN SysTickIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD EthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/enet_uip/uip-conf.h b/boards/dk-tm4c129x/enet_uip/uip-conf.h new file mode 100644 index 0000000..5176f49 --- /dev/null +++ b/boards/dk-tm4c129x/enet_uip/uip-conf.h @@ -0,0 +1,162 @@ +//***************************************************************************** +// +// uip-conf.h - uIP Project Specific Configuration File +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +// +// 8 bit datatype +// This typedef defines the 8-bit type used throughout uIP. +// +typedef unsigned char u8_t; + +// +// 16 bit datatype +// This typedef defines the 16-bit type used throughout uIP. +// +typedef unsigned short u16_t; + +// +// Statistics datatype +// This typedef defines the dataype used for keeping statistics in +// uIP. +// +typedef unsigned short uip_stats_t; + +// +// Ping IP address assignment +// Use first incoming "ping" packet to derive host IP address +// +#define UIP_CONF_PINGADDRCONF 0 + +// +// UDP support on or off +// +#define UIP_CONF_UDP 1 + +// +// UDP checksums on or off +// (not currently supported ... should be 0) +// +#define UIP_CONF_UDP_CHECKSUMS 0 + +// +// UDP Maximum Connections +// +#define UIP_CONF_UDP_CONNS 4 + +// +// Maximum number of TCP connections. +// +#define UIP_CONF_MAX_CONNECTIONS 2 + +// +// Maximum number of listening TCP ports. +// +#define UIP_CONF_MAX_LISTENPORTS 4 + +// +// Size of advertised receiver's window +// +//#define UIP_CONF_RECEIVE_WINDOW 400 + +// +// Size of ARP table +// +#define UIP_CONF_ARPTAB_SIZE 8 + +// +// uIP buffer size. +// +#define UIP_CONF_BUFFER_SIZE 1600 + +// +// uIP buffer is defined in the application. +// +#define UIP_CONF_EXTERNAL_BUFFER + +// +// uIP statistics on or off +// +#define UIP_CONF_STATISTICS 1 + +// +// Logging on or off +// +#define UIP_CONF_LOGGING 0 + +// +// Broadcast Support +// +#define UIP_CONF_BROADCAST 0 + +// +// Link-Level Header length +// +#define UIP_CONF_LLH_LEN 14 + +// +// CPU byte order. +// +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +// +// Offload checksum calculation to the hardware. +// +// TODO: Once things are working, turn on hardware checksum calculation and +// make sure the application source includes stubs for uip_ipchksum(), +// uip_tcpchksum() and uip_udpchksum(). uip_icmp6chksum() is also needed if +// IPv6 is in use. +// +#define UIP_ARCH_IPCHKSUM +#define UIP_ARCH_CHKSUM 1 + + +// +// Here we include the header file for the application we are using in +// this example +// +#include "httpd/httpd.h" + +// +// Define the uIP Application State type, based on the httpd.h state variable. +// +typedef struct httpd_state uip_tcp_appstate_t; + +// +// UIP_APPCALL: the name of the application function. This function +// must return void and take no arguments (i.e., C type "void +// appfunc(void)"). +// +#ifndef UIP_APPCALL +#define UIP_APPCALL httpd_appcall +#endif + +// +// Here we include the header file for the DPCP client we are using in +// this example +// +#include "dhcpc/dhcpc.h" + +#endif // __UIP_CONF_H_ diff --git a/boards/dk-tm4c129x/fontview/Makefile b/boards/dk-tm4c129x/fontview/Makefile new file mode 100644 index 0000000..b81e3a3 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/Makefile @@ -0,0 +1,102 @@ +#****************************************************************************** +# +# Makefile - Rules for building the FontView example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fonts/ofl/fonts +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../third_party/fatfs/src +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/fonts/ofl +IPATH+=../../../../third_party + +# +# The default rule, which causes the FontView example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/fontview.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the FontView example. +# +${COMPILER}/fontview.axf: ${COMPILER}/fatwrapper.o +${COMPILER}/fontview.axf: ${COMPILER}/ff.o +${COMPILER}/fontview.axf: ${COMPILER}/fontcjktest20pt.o +${COMPILER}/fontview.axf: ${COMPILER}/fontview.o +${COMPILER}/fontview.axf: ${COMPILER}/frame.o +${COMPILER}/fontview.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/fontview.axf: ${COMPILER}/mmc-dk-tm4c129x.o +${COMPILER}/fontview.axf: ${COMPILER}/pinout.o +${COMPILER}/fontview.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/fontview.axf: ${COMPILER}/touch.o +${COMPILER}/fontview.axf: ${COMPILER}/uartstdio.o +${COMPILER}/fontview.axf: ${COMPILER}/ustdlib.o +${COMPILER}/fontview.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/fontview.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/fontview.axf: fontview.ld +SCATTERgcc_fontview=fontview.ld +ENTRY_fontview=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DUART_BUFFERED + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/fontview/ccs/.ccsimportspec b/boards/dk-tm4c129x/fontview/ccs/.ccsimportspec new file mode 100644 index 0000000..eb59859 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/fontview/ccs/.ccsproject b/boards/dk-tm4c129x/fontview/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/fontview/ccs/.cproject b/boards/dk-tm4c129x/fontview/ccs/.cproject new file mode 100644 index 0000000..7c07c7f --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/.cproject @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/fontview/ccs/.project b/boards/dk-tm4c129x/fontview/ccs/.project new file mode 100644 index 0000000..eb1c68b --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/.project @@ -0,0 +1,100 @@ + + + fontview + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + fatwrapper.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/fontview/fatwrapper.c + + + fontview.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/fontview/fontview.c + + + fontview_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/fontview/fontview_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/fontview/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fatfs/port/mmc-dk-tm4c129x.c + 1 + SW_ROOT/third_party/fatfs/port/mmc-dk-tm4c129x.c + + + third_party/fatfs/src/ff.c + 1 + SW_ROOT/third_party/fatfs/src/ff.c + + + third_party/fonts/ofl/fonts/fontcjktest20pt.c + 1 + SW_ROOT/third_party/fonts/ofl/fonts/fontcjktest20pt.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/fontview/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/fontview/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/fontview/ccs/Debug/fontview.bin b/boards/dk-tm4c129x/fontview/ccs/Debug/fontview.bin new file mode 100644 index 0000000..1dca09f Binary files /dev/null and b/boards/dk-tm4c129x/fontview/ccs/Debug/fontview.bin differ diff --git a/boards/dk-tm4c129x/fontview/ccs/Debug/fontview.out b/boards/dk-tm4c129x/fontview/ccs/Debug/fontview.out new file mode 100644 index 0000000..ba55b15 Binary files /dev/null and b/boards/dk-tm4c129x/fontview/ccs/Debug/fontview.out differ diff --git a/boards/dk-tm4c129x/fontview/ccs/macros.ini_initial b/boards/dk-tm4c129x/fontview/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/fontview/ccs/target_config.ccxml b/boards/dk-tm4c129x/fontview/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.bin b/boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.bin new file mode 100644 index 0000000..bda8e93 Binary files /dev/null and b/boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.bin differ diff --git a/boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.out b/boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.out new file mode 100644 index 0000000..12f13cc Binary files /dev/null and b/boards/dk-tm4c129x/fontview/ewarm/Exe/fontview.out differ diff --git a/boards/dk-tm4c129x/fontview/fatwrapper.c b/boards/dk-tm4c129x/fontview/fatwrapper.c new file mode 100644 index 0000000..2d7607c --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fatwrapper.c @@ -0,0 +1,858 @@ +//***************************************************************************** +// +// fatwrapper.c - A simple wrapper allowing access to binary fonts stored in +// the FAT file system. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "third_party/fatfs/src/ff.h" +#include "third_party/fatfs/src/diskio.h" + +//***************************************************************************** +// +// The number of font block headers that we cache when a font is opened. +// +//***************************************************************************** +#define MAX_FONT_BLOCKS 16 + +//***************************************************************************** +// +// The amount of memory set aside to hold compressed data for a single glyph. +// Fonts for use with the graphics library limit compressed glyphs to 256 bytes. +// If you are sure your fonts contain small glyphs, you could reduce this to +// save space. +// +//***************************************************************************** +#define MAX_GLYPH_SIZE 256 + +//***************************************************************************** +// +// Instance data for a single loaded font. +// +//***************************************************************************** +typedef struct +{ + // + // The FATfs file object associated with the font. + // + FIL sFile; + + // + // The font header as read from the file. + // + tFontWide sFontHeader; + + // + // Storage for the font block table. + // + tFontBlock psBlocks[MAX_FONT_BLOCKS]; + + // + // A marker indicating whether or not the structure is in use. + // + bool bInUse; + + // + // The codepoint of the character whose glyph data is currently stored in + // pui8GlyphStore. + // + uint32_t ui32CurrentGlyph; + + // + // Storage for the compressed data of the latest glyph. In a more complex + // implementation, you would likely want to cache this data to reduce + // slow disk interaction. + // + uint8_t pui8GlyphStore[MAX_GLYPH_SIZE]; +} +tFontFile; + +//***************************************************************************** +// +// Workspace for FATfs. +// +//***************************************************************************** +FATFS g_sFatFs; + +//***************************************************************************** +// +// Instance data for a single loaded font. This implementation only supports +// a single font open at any one time. If you wanted to implement something +// more general, a memory manager could be used to allocate these structures +// dynamically in FATWrapperFontLoad(). +// +//***************************************************************************** +tFontFile g_sFontFile; + +//***************************************************************************** +// +// A structure that holds a mapping between an FRESULT numerical code, +// and a string represenation. FRESULT codes are returned from the FatFs +// FAT file system driver. +// +//***************************************************************************** +typedef struct +{ + FRESULT iFResult; + char *pcResultStr; +} +tFresultString; + +//***************************************************************************** +// +// A macro to make it easy to add result codes to the table. +// +//***************************************************************************** +#define FRESULT_ENTRY(f) { (f), (#f) } + +//***************************************************************************** +// +// A table that holds a mapping between the numerical FRESULT code and +// it's name as a string. This is used for looking up error codes for +// printing to the console. +// +//***************************************************************************** +tFresultString g_psFresultStrings[] = +{ + FRESULT_ENTRY(FR_OK), + FRESULT_ENTRY(FR_DISK_ERR), + FRESULT_ENTRY(FR_INT_ERR), + FRESULT_ENTRY(FR_NOT_READY), + FRESULT_ENTRY(FR_NO_FILE), + FRESULT_ENTRY(FR_NO_PATH), + FRESULT_ENTRY(FR_INVALID_NAME), + FRESULT_ENTRY(FR_DENIED), + FRESULT_ENTRY(FR_EXIST), + FRESULT_ENTRY(FR_INVALID_OBJECT), + FRESULT_ENTRY(FR_WRITE_PROTECTED), + FRESULT_ENTRY(FR_INVALID_DRIVE), + FRESULT_ENTRY(FR_NOT_ENABLED), + FRESULT_ENTRY(FR_NO_FILESYSTEM), + FRESULT_ENTRY(FR_MKFS_ABORTED), + FRESULT_ENTRY(FR_TIMEOUT), + FRESULT_ENTRY(FR_LOCKED), + FRESULT_ENTRY(FR_NOT_ENOUGH_CORE), + FRESULT_ENTRY(FR_TOO_MANY_OPEN_FILES), + FRESULT_ENTRY(FR_INVALID_PARAMETER), +}; + +//***************************************************************************** +// +// Error reasons returned by ChangeDirectory(). +// +//***************************************************************************** +#define NAME_TOO_LONG_ERROR 1 +#define OPENDIR_ERROR 2 + +//***************************************************************************** +// +// A macro that holds the number of result codes. +// +//***************************************************************************** +#define NUM_FRESULT_CODES (sizeof(g_psFresultStrings) / sizeof(tFresultString)) + +//***************************************************************************** +// +// Internal function prototypes. +// +//***************************************************************************** +static const char *StringFromFresult(FRESULT iFResult); +static void FATWrapperFontInfoGet(uint8_t *pui8FontID, + uint8_t *pui8Format, + uint8_t *pui8Width, + uint8_t *pui8Height, + uint8_t *pui8Baseline); +static const uint8_t *FATWrapperFontGlyphDataGet( + uint8_t *pui8FontID, + uint32_t ui32CodePoint, + uint8_t *pui8Width); +static uint16_t FATWrapperFontCodepageGet(uint8_t *pui8FontID); +static uint16_t FATWrapperFontNumBlocksGet(uint8_t *pui8FontID); +static uint32_t FATWrapperFontBlockCodepointsGet( + uint8_t *pui8FontID, + uint16_t ui16BlockIndex, + uint32_t *pui32Start); + +//***************************************************************************** +// +// Access function pointers required to complete the tFontWrapper structure +// for this font. +// +//***************************************************************************** +const tFontAccessFuncs g_sFATFontAccessFuncs = +{ + FATWrapperFontInfoGet, + FATWrapperFontGlyphDataGet, + FATWrapperFontCodepageGet, + FATWrapperFontNumBlocksGet, + FATWrapperFontBlockCodepointsGet +}; + +//***************************************************************************** +// +// This function returns a string representation of an error code +// that was returned from a function call to FatFs. It can be used +// for printing human readable error messages. +// +//***************************************************************************** +static const char * +StringFromFresult(FRESULT iFResult) +{ + uint32_t ui32Idx; + + // + // Enter a loop to search the error code table for a matching + // error code. + // + for(ui32Idx = 0; ui32Idx < NUM_FRESULT_CODES; ui32Idx++) + { + // + // If a match is found, then return the string name of the + // error code. + // + if(g_psFresultStrings[ui32Idx].iFResult == iFResult) + { + return(g_psFresultStrings[ui32Idx].pcResultStr); + } + } + + // + // At this point no matching code was found, so return a + // string indicating unknown error. + // + return("UNKNOWN ERROR CODE"); +} + +//***************************************************************************** +// +// Returns information about a font previously loaded using FATFontWrapperLoad. +// +//***************************************************************************** +static void +FATWrapperFontInfoGet(uint8_t *pui8FontID, uint8_t *pui8Format, + uint8_t *pui8Width, uint8_t *pui8Height, + uint8_t *pui8Baseline) +{ + tFontFile *psFont; + + // + // Parameter sanity check. + // + ASSERT(pui8FontID); + ASSERT(pui8Format); + ASSERT(pui8Width); + ASSERT(pui8Height); + ASSERT(pui8Baseline); + + // + // Get a pointer to our instance data. + // + psFont = (tFontFile *)pui8FontID; + + ASSERT(psFont->bInUse); + + // + // Return the requested information. + // + *pui8Format = psFont->sFontHeader.ui8Format; + *pui8Width = psFont->sFontHeader.ui8MaxWidth; + *pui8Height = psFont->sFontHeader.ui8Height; + *pui8Baseline = psFont->sFontHeader.ui8Baseline; +} + +//***************************************************************************** +// +// Returns the codepage used by the font whose handle is passed. +// +//***************************************************************************** +static uint16_t +FATWrapperFontCodepageGet(uint8_t *pui8FontID) +{ + tFontFile *psFont; + + // + // Parameter sanity check. + // + ASSERT(pui8FontID); + + // + // Get a pointer to our instance data. + // + psFont = (tFontFile *)pui8FontID; + + ASSERT(psFont->bInUse); + + // + // Return the codepage identifier from the font. + // + return(psFont->sFontHeader.ui16Codepage); +} + +//***************************************************************************** +// +// Returns the number of glyph blocks supported by a particular font. +// +//***************************************************************************** +static uint16_t +FATWrapperFontNumBlocksGet(uint8_t *pui8FontID) +{ + tFontFile *psFont; + + // + // Parameter sanity check. + // + ASSERT(pui8FontID); + + // + // Get a pointer to our instance data. + // + psFont = (tFontFile *)pui8FontID; + + ASSERT(psFont->bInUse); + + // + // Return the number of glyph blocks contained in the font. + // + return(psFont->sFontHeader.ui16NumBlocks); +} + +//***************************************************************************** +// +// Read a given font block header from the provided file. +// +//***************************************************************************** +static bool +FATWrapperFontBlockHeaderGet(FIL *psFile, tFontBlock *psBlock, + uint32_t ui32Index) +{ + FRESULT iFResult; + UINT uiRead; + + // + // Set the file pointer to the position of the block header we want. + // + iFResult = f_lseek(psFile, sizeof(tFontWide) + + (sizeof(tFontBlock) * ui32Index)); + if(iFResult == FR_OK) + { + // + // Now read the block header. + // + iFResult = f_read(psFile, psBlock, sizeof(tFontBlock), &uiRead); + if((iFResult == FR_OK) && (uiRead == sizeof(tFontBlock))) + { + return(true); + } + } + + // + // If we get here, we experienced an error so return a bad return code. + // + return(false); +} + +//***************************************************************************** +// +// Returns information on the glyphs contained within a given font block. +// +//***************************************************************************** +static uint32_t +FATWrapperFontBlockCodepointsGet(uint8_t *pui8FontID, + uint16_t ui16BlockIndex, + uint32_t *pui32Start) +{ + tFontBlock sBlock; + tFontFile *psFont; + bool bRetcode; + + // + // Parameter sanity check. + // + ASSERT(pui8FontID); + + // + // Get a pointer to our instance data. + // + psFont = (tFontFile *)pui8FontID; + + ASSERT(psFont->bInUse); + + // + // Have we been passed a valid block index? + // + if(ui16BlockIndex >= psFont->sFontHeader.ui16NumBlocks) + { + // + // No - return an error. + // + return(0); + } + + // + // Is this block header cached? + // + if(ui16BlockIndex < MAX_FONT_BLOCKS) + { + // + // Yes - return the information from our cached copy. + // + *pui32Start = psFont->psBlocks[ui16BlockIndex].ui32StartCodepoint; + return(psFont->psBlocks[ui16BlockIndex].ui32NumCodepoints); + } + else + { + // + // We don't have the block header cached so read it from the + // SDCard. First move the file pointer to the expected position. + // + bRetcode = FATWrapperFontBlockHeaderGet(&psFont->sFile, &sBlock, + ui16BlockIndex); + if(bRetcode) + { + *pui32Start = sBlock.ui32StartCodepoint; + return(sBlock.ui32NumCodepoints); + } + else + { + UARTprintf("Error reading block header!\n"); + } + } + + // + // If we get here, something horrible happened so return a failure. + // + *pui32Start = 0; + return(0); +} + +//***************************************************************************** +// +// Retrieves the data for a particular font glyph. This function returns +// a pointer to the glyph data in linear, random access memory if the glyph +// exists or NULL if not. +// +//***************************************************************************** +static const uint8_t * +FATWrapperFontGlyphDataGet(uint8_t *pui8FontID, + uint32_t ui32Codepoint, + uint8_t *pui8Width) +{ + tFontFile *psFont; + uint32_t ui32Loop, ui32GlyphOffset, ui32TableOffset; + UINT uiRead; + tFontBlock sBlock; + tFontBlock *psBlock; + bool bRetcode; + FRESULT iFResult; + + // + // Parameter sanity check. + // + ASSERT(pui8FontID); + ASSERT(pui8Width); + + // + // If passed a NULL codepoint, return immediately. + // + if(!ui32Codepoint) + { + return(0); + } + + // + // Get a pointer to our instance data. + // + psFont = (tFontFile *)pui8FontID; + + ASSERT(psFont->bInUse); + + // + // Look for the trivial case - do we have this glyph in our glyph store + // already? + // + if(psFont->ui32CurrentGlyph == ui32Codepoint) + { + // + // We struck gold - we already have this glyph in our buffer. Return + // the width (from the second byte of the data) and a pointer to the + // glyph data. + // + *pui8Width = psFont->pui8GlyphStore[1]; + return(psFont->pui8GlyphStore); + } + + // + // First find the block that contains the glyph we've been asked for. + // + for(ui32Loop = 0; ui32Loop < psFont->sFontHeader.ui16NumBlocks; ui32Loop++) + { + if(ui32Loop < MAX_FONT_BLOCKS) + { + psBlock = &psFont->psBlocks[ui32Loop]; + } + else + { + bRetcode = FATWrapperFontBlockHeaderGet(&psFont->sFile, &sBlock, + ui32Loop); + psBlock = &sBlock; + if(!bRetcode) + { + // + // We failed to read the block header so return an error. + // + return(0); + } + } + + // + // Does the requested character exist in this block? + // + if((ui32Codepoint >= (psBlock->ui32StartCodepoint)) && + ((ui32Codepoint < (psBlock->ui32StartCodepoint + + psBlock->ui32NumCodepoints)))) + { + // + // The glyph is in this block. Calculate the offset of it's + // glyph table entry in the file. + // + ui32TableOffset = psBlock->ui32GlyphTableOffset + + ((ui32Codepoint - psBlock->ui32StartCodepoint) * + sizeof(uint32_t)); + + // + // Move the file pointer to the offset position. + // + iFResult = f_lseek(&psFont->sFile, ui32TableOffset); + + if(iFResult != FR_OK) + { + return(0); + } + + // + // Read the glyph data offset. + // + iFResult = f_read(&psFont->sFile, &ui32GlyphOffset, + sizeof(uint32_t), &uiRead); + + // + // Return if there was an error or if the offset is 0 (which + // indicates that the character is not included in the font. + // + if((iFResult != FR_OK) || (uiRead != sizeof(uint32_t)) || + !ui32GlyphOffset) + { + return(0); + } + + // + // Move the file pointer to the start of the glyph data remembering + // that the glyph table offset is relative to the start of the + // block not the start of the file (so we add the table offset + // here). + // + iFResult = f_lseek(&psFont->sFile, (psBlock->ui32GlyphTableOffset + + ui32GlyphOffset)); + + if(iFResult != FR_OK) + { + return(0); + } + + // + // Read the first byte of the glyph data to find out how long it + // is. + // + iFResult = f_read(&psFont->sFile, psFont->pui8GlyphStore, 1, + &uiRead); + + if((iFResult != FR_OK) || !uiRead) + { + return(0); + } + + // + // Now read the glyph data. + // + iFResult = f_read(&psFont->sFile, psFont->pui8GlyphStore + 1, + psFont->pui8GlyphStore[0] - 1, &uiRead); + + if((iFResult != FR_OK) || + (uiRead != (psFont->pui8GlyphStore[0] - 1))) + { + return(0); + } + + // + // If we get here, things are good. Return a pointer to the glyph + // store data. + // + psFont->ui32CurrentGlyph = ui32Codepoint; + *pui8Width = psFont->pui8GlyphStore[1]; + return(psFont->pui8GlyphStore); + } + } + + // + // If we get here, the codepoint doesn't exist in the font so return an + // error. + // + return(0); +} + +//***************************************************************************** +// +// Prepares the FAT file system font wrapper for use. +// +// This function must be called before any attempt to use a font stored on the +// FAT file system. It initializes FATfs for use. +// +// \return Returns \b true on success or \b false on failure. +// +//***************************************************************************** +bool +FATFontWrapperInit(void) +{ + FRESULT iFResult; + + // + // Mount the file system, using logical disk 0. + // + iFResult = f_mount(0, &g_sFatFs); + if(iFResult != FR_OK) + { + // + // We failed to mount the volume. Tell the user and return an error. + // + UARTprintf("f_mount error: %s (%d)\n", StringFromFresult(iFResult), + iFResult); + return(false); + } + + // + // All is well so tell the caller. + // + return(true); +} + +//***************************************************************************** +// +// Provides the FATfs timer tick. +// +// This function must be called every 10mS or so by the application. It +// provides the time reference required by the FAT file system. +// +// \return None. +// +//***************************************************************************** +void +FATWrapperSysTickHandler(void) +{ + // + // Call the FatFs tick timer. + // + disk_timerproc(); +} + +//***************************************************************************** +// +// Prepares a font in the FATfs file system for use by the graphics library. +// +// This function must be called to prepare a font for use by the graphics +// library. It opens the font file whose name is passed and reads the +// header information. The value returned should be written into the +// pui8FontID field of the tFontWrapper structure that will be passed to +// graphics library. +// +// This is a very simple (and slow) implementation. More complex wrappers +// may also initialize a glyph cache here. +// +// \return On success, returns a non-zero pointer identifying the font. On +// error, zero is returned. +// +//***************************************************************************** +uint8_t * +FATFontWrapperLoad(char *pcFilename) +{ + FRESULT iFResult; + UINT uiRead, uiToRead; + + UARTprintf("Attempting to load font %s from FAT file system.\n", + pcFilename); + + // + // Make sure a font is not already open. + // + if(g_sFontFile.bInUse) + { + // + // Oops - someone tried to load a new font without unloading the + // previous one. + // + UARTprintf("Another font is already loaded!\n"); + return(0); + } + + // + // Try to open the file whose name we've been given. + // + iFResult = f_open(&g_sFontFile.sFile, pcFilename, FA_READ); + if(iFResult != FR_OK) + { + // + // We can't open the file. Either the file doesn't exist or there is + // no SDCard installed. Regardless, return an error. + // + UARTprintf("Error %s (%d) from f_open.\n", StringFromFresult(iFResult), + iFResult); + return(0); + } + + // + // We opened the file successfully. Does it seem to contain a valid + // font? Read the header and see. + // + iFResult = f_read(&g_sFontFile.sFile, &g_sFontFile.sFontHeader, + sizeof(tFontWide), &uiRead); + if((iFResult == FR_OK) && (uiRead == sizeof(tFontWide))) + { + // + // We read the font header. Is the format correct? We only support + // wide fonts via wrappers. + // + if((g_sFontFile.sFontHeader.ui8Format != FONT_FMT_WIDE_UNCOMPRESSED) && + (g_sFontFile.sFontHeader.ui8Format != FONT_FMT_WIDE_PIXEL_RLE)) + { + // + // This is not a supported font format. + // + UARTprintf("Unrecognized font format. Failing " + "FATFontWrapperLoad.\n"); + f_close(&g_sFontFile.sFile); + return(0); + } + + // + // The format seems to be correct so read as many block headers as we + // have storage for. + // + uiToRead = ((g_sFontFile.sFontHeader.ui16NumBlocks > MAX_FONT_BLOCKS) ? + MAX_FONT_BLOCKS * sizeof(tFontBlock) : + (g_sFontFile.sFontHeader.ui16NumBlocks * + sizeof(tFontBlock))); + + iFResult = f_read(&g_sFontFile.sFile, &g_sFontFile.psBlocks, uiToRead, + &uiRead); + if((iFResult == FR_OK) && (uiRead == uiToRead)) + { + // + // All is well. Tell the caller the font was opened successfully. + // + UARTprintf("Font %s opened successfully.\n", pcFilename); + g_sFontFile.bInUse = true; + return((uint8_t *)&g_sFontFile); + } + else + { + UARTprintf("Error %s (%d) reading block headers. Read %d, exp %d " + "bytes.\n", StringFromFresult(iFResult), iFResult, + uiRead, uiToRead); + f_close(&g_sFontFile.sFile); + return(0); + } + } + else + { + // + // We received an error while reading the file header so fail the call. + // + UARTprintf("Error %s (%d) reading font header.\n", + StringFromFresult(iFResult), iFResult); + f_close(&g_sFontFile.sFile); + return(0); + } +} + +//***************************************************************************** +// +// Frees a font and cleans up once an application has finished using it. +// +// This function releases all resources allocated during a previous call to +// FATFontWrapperLoad(). The caller must not make any further use of the +// font following this call unless another call to FATFontWrapperLoad() is +// made. +// +// \return None. +// +//***************************************************************************** +void FATFontWrapperUnload(uint8_t *pui8FontID) +{ + tFontFile *psFont; + FRESULT iFResult; + + // + // Parameter sanity check. + // + ASSERT(pui8FontID); + + // + // Get a pointer to our instance data. + // + psFont = (tFontFile *)pui8FontID; + + // + // Make sure a font is already open. If not, just return. + // + if(!psFont->bInUse) + { + return; + } + + // + // Close the font file. + // + UARTprintf("Unloading font... \n"); + iFResult = f_close(&psFont->sFile); + if(iFResult != FR_OK) + { + UARTprintf("Error %s (%d) from f_close.\n", StringFromFresult(iFResult), + iFResult); + } + + // + // Clean up our instance data. + // + psFont->bInUse = false; + psFont->ui32CurrentGlyph = 0; +} diff --git a/boards/dk-tm4c129x/fontview/fatwrapper.h b/boards/dk-tm4c129x/fontview/fatwrapper.h new file mode 100644 index 0000000..d021cc2 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fatwrapper.h @@ -0,0 +1,45 @@ +//***************************************************************************** +// +// fatwrapper.h - Prototypes for the FAT font wrapper module. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __FATWRAPPER_H__ +#define __FATWRAPPER_H__ + +//***************************************************************************** +// +// Exported globals. +// +//***************************************************************************** +extern const tFontAccessFuncs g_sFATFontAccessFuncs; + +//***************************************************************************** +// +// Public function prototypes. +// +//***************************************************************************** +extern void FATWrapperSysTickHandler(void); +extern bool FATFontWrapperInit(void); +extern unsigned char *FATFontWrapperLoad(char *pcFilename); +extern void FATFontWrapperUnload(unsigned char *pucFontId); + +#endif diff --git a/boards/dk-tm4c129x/fontview/fontview.c b/boards/dk-tm4c129x/fontview/fontview.c new file mode 100644 index 0000000..31aee18 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.c @@ -0,0 +1,705 @@ +//***************************************************************************** +// +// fonttest.c - Simple font testcase. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "third_party/fonts/ofl/ofl_fonts.h" +#include "fatwrapper.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Font Viewer (fontview)

      +//! +//! This example displays the contents of a TivaWare graphics library font +//! on the DK board's LCD touchscreen. By default, the application shows a +//! test font containing ASCII, the Japanese Hiragana and Katakana alphabets, +//! and a group of Korean Hangul characters. If an SDCard is installed and +//! the root directory contains a file named font.bin, this file is +//! opened and used as the display font instead. In this case, the graphics +//! library font wrapper feature is used to access the font from the file +//! system rather than from internal memory. +// +//***************************************************************************** + +//***************************************************************************** +// +// Change the following to set the font whose characters you want to view if +// no "font.bin" is found in the root directory of the SDCard. +// +//***************************************************************************** +#define FONT_TO_USE g_pFontCjktest20pt + +//***************************************************************************** +// +// A pointer to the font we intend to use. This will be set depending upon +// whether we are using a font from the SDCard or the internal font defined +// above. +// +//***************************************************************************** +const tFont *g_psFont; + +//***************************************************************************** +// +// The font wrapper structure used to describe the SDCard-based font to grlib. +// +//***************************************************************************** +tFontWrapper g_sFontWrapper = +{ + FONT_FMT_WRAPPED, + 0, + &g_sFATFontAccessFuncs +}; + +//***************************************************************************** +// +// The number of SysTick ticks per second. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 + +//***************************************************************************** +// +// Forward reference to various widget structures. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; +extern tCanvasWidget g_sBlockNumCanvas; +extern tCanvasWidget g_sCharNumCanvas; +extern tCanvasWidget g_sCharCanvas; +extern tPushButtonWidget g_sBlockIncBtn; +extern tPushButtonWidget g_sBlockDecBtn; +extern tPushButtonWidget g_sCharIncBtn; +extern tPushButtonWidget g_sCharDecBtn; + +//***************************************************************************** +// +// Buffers for various strings. +// +//***************************************************************************** +char g_pcBlocks[20]; +char g_pcStartChar[32]; + +//***************************************************************************** +// +// Forward reference to various handlers and internal functions. +// +//***************************************************************************** +void SetBlockNum(uint32_t ui32BlockNum); +void OnBlockButtonPress(tWidget *psWidget); +void OnCharButtonPress(tWidget *psWidget); +void PaintFontGlyphs(tWidget *psWidget, tContext *psContext); + +//***************************************************************************** +// +// The canvas widget acting as the background to the display. +// +//***************************************************************************** +Canvas(g_sBackground, WIDGET_ROOT, &g_sCharCanvas, &g_sBlockNumCanvas, + &g_sKentec320x240x16_SSD2119, 8, 24, 304, 208, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The canvas containing the rendered characters. +// +//***************************************************************************** +Canvas(g_sCharCanvas, WIDGET_ROOT, 0, 0, + &g_sKentec320x240x16_SSD2119, 8, 48, 304, 184, + CANVAS_STYLE_APP_DRAWN, + ClrDarkBlue, ClrWhite, ClrWhite, 0, 0, 0, PaintFontGlyphs); + +//***************************************************************************** +// +// The canvas widget displaying the maximum and current block number. +// +//***************************************************************************** +Canvas(g_sBlockNumCanvas, &g_sBackground, &g_sCharNumCanvas, 0, + &g_sKentec320x240x16_SSD2119, 8, 24, 200, 10, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT), + ClrBlack, 0, ClrWhite, + g_psFontFixed6x8, g_pcBlocks, 0, 0); + +//***************************************************************************** +// +// The canvas widget displaying the start codepoint for the block. +// +//***************************************************************************** +Canvas(g_sCharNumCanvas, &g_sBackground, &g_sBlockDecBtn, 0, + &g_sKentec320x240x16_SSD2119, 8, 34, 200, 10, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT), + ClrBlack, 0, ClrWhite, + g_psFontFixed6x8, g_pcStartChar, 0, 0); + +//***************************************************************************** +// +// The button used to decrement the block number. +// +//***************************************************************************** +RectangularButton(g_sBlockDecBtn, &g_sBackground, &g_sBlockIncBtn, 0, + &g_sKentec320x240x16_SSD2119, 200, 26, 20, 20, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL), + ClrDarkBlue, ClrRed, ClrWhite, ClrWhite, + g_psFontFixed6x8, "<", 0, 0, 0, 0, + OnBlockButtonPress); + +//***************************************************************************** +// +// The button used to increment the block number. +// +//***************************************************************************** +RectangularButton(g_sBlockIncBtn, &g_sBackground, &g_sCharDecBtn, 0, + &g_sKentec320x240x16_SSD2119, 230, 26, 20, 20, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL), + ClrDarkBlue, ClrRed, ClrWhite, ClrWhite, + g_psFontFixed6x8, ">", 0, 0, 0, 0, + OnBlockButtonPress); + +//***************************************************************************** +// +// The button used to decrement the character row number. +// +//***************************************************************************** +RectangularButton(g_sCharDecBtn, &g_sBackground, &g_sCharIncBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 26, 20, 20, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrRed, ClrWhite, ClrWhite, + g_psFontFixed6x8, "^", 0, 0, 70, 20, + OnCharButtonPress); + +//***************************************************************************** +// +// The button used to increment the character row number. +// +//***************************************************************************** +RectangularButton(g_sCharIncBtn, &g_sBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 290, 26, 20, 20, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrRed, ClrWhite, ClrWhite, + g_psFontFixed6x8, "v", 0, 0, 70, 20, + OnCharButtonPress); + +//***************************************************************************** +// +// Text codepage mapping functions. +// +//***************************************************************************** +tCodePointMap g_psCodepointMappings[] = +{ + {CODEPAGE_ISO8859_1, CODEPAGE_UNICODE, GrMapISO8859_1_Unicode}, + {CODEPAGE_UTF_8, CODEPAGE_UNICODE, GrMapUTF8_Unicode}, + {CODEPAGE_UNICODE, CODEPAGE_UNICODE, GrMapUnicode_Unicode} +}; + +#define NUM_CHAR_MAPPINGS (sizeof(g_psCodepointMappings)/sizeof(tCodePointMap)) + +//***************************************************************************** +// +// Default text rendering parameters. The only real difference between the +// grlib defaults and this set is the addition of a mapping function to allow +// 32 bit Unicode source. +// +//***************************************************************************** +tGrLibDefaults g_psGrLibSettingDefaults = +{ + GrDefaultStringRenderer, + g_psCodepointMappings, + CODEPAGE_UTF_8, + NUM_CHAR_MAPPINGS, + 0 +}; + +//***************************************************************************** +// +// Top left corner of the grid we use to draw the characters. +// +//***************************************************************************** +#define TOP 50 +#define LEFT 44 + +//***************************************************************************** +// +// The character cell size used when redrawing the display. +// +//***************************************************************************** +uint32_t g_ui32CellWidth; +uint32_t g_ui32CellHeight; +uint32_t g_ui32LinesPerPage; +uint32_t g_ui32CharsPerLine; +uint32_t g_ui32StartLine; +uint32_t g_ui32NumBlocks; +uint32_t g_ui32StartChar; +uint32_t g_ui32NumBlockChars; +uint32_t g_ui32BlockNum; + +//***************************************************************************** +// +// The system clock frequency in Hz. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// Macros used to derive the screen position given the character's X and Y +// coordinates in the grid. +// +//***************************************************************************** +#define POSX(x) (LEFT + (g_ui32CellWidth / 2) + (g_ui32CellWidth * (x))) +#define POSY(y) (TOP + (g_ui32CellHeight / 2) + (g_ui32CellHeight * (y))) + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This function is called by the graphics library widget manager in the +// context of WidgetMessageQueueProcess whenever the user releases the +// ">" or "<" button. +// +//***************************************************************************** +void +OnBlockButtonPress(tWidget *psWidget) +{ + bool bRedraw; + + // + // Assume no redraw until we determine otherwise. + // + bRedraw = false; + + // + // Are we incrementing or decrementing the block number? + // + if(psWidget == (tWidget *)&g_sBlockIncBtn) + { + // + // We are incrementing. Have we already reached the top block? + // + if((g_ui32BlockNum + 1) < g_ui32NumBlocks) + { + // + // No - increment the block number. + // + g_ui32BlockNum++; + bRedraw = true; + } + } + else + { + // + // We are decrementing. Are we already showing the first block? + // + if(g_ui32BlockNum) + { + // + // No - move back 1 block. + // + g_ui32BlockNum--; + bRedraw = true; + } + } + + // + // If we made a change, set things up to display the new block. + // + if(bRedraw) + { + SetBlockNum(g_ui32BlockNum); + } +} + +//***************************************************************************** +// +// This function is called by the graphics library widget manager in the +// context of WidgetMessageQueueProcess whenever the user releases the +// "^" or "v" button. +// +//***************************************************************************** +void +OnCharButtonPress(tWidget *psWidget) +{ + bool bRedraw; + + // + // Assume no redraw until we determine otherwise. + // + bRedraw = false; + + // + // Were we asked to scroll up or down? + // + if(psWidget == (tWidget *)&g_sCharIncBtn) + { + // + // Scroll down if there are more characters to display. + // + if(((g_ui32StartLine + g_ui32LinesPerPage) * g_ui32CharsPerLine) < + g_ui32NumBlockChars) + { + g_ui32StartLine++; + bRedraw = true; + } + } + else + { + // + // Scroll up if we're not already showing the first line. + // + if(g_ui32StartLine) + { + g_ui32StartLine--; + bRedraw = true; + } + } + + // + // If we made a change, redraw the character area. + // + if(bRedraw) + { + WidgetPaint((tWidget *)&g_sCharCanvas); + } +} + +//***************************************************************************** +// +// Update the display for a new font block. +// +//***************************************************************************** +void +SetBlockNum(uint32_t ui32BlockNum) +{ + uint32_t ui32Start, ui32Chars; + + // + // Set the new block number. + // + ui32Chars = GrFontBlockCodepointsGet(g_psFont, ui32BlockNum, &ui32Start); + + // + // If this block exists, update our state. + // + if(ui32Chars) + { + // + // Remember details of the new block. + // + g_ui32BlockNum = ui32BlockNum; + g_ui32StartChar = ui32Start; + g_ui32NumBlockChars = ui32Chars; + g_ui32StartLine = 0; + + // + // Update the valid block display and start character. + // + usnprintf(g_pcBlocks, sizeof(g_pcBlocks), "Block %d of %d ", + g_ui32BlockNum + 1, g_ui32NumBlocks); + usnprintf(g_pcStartChar, sizeof(g_pcStartChar), "%d chars from 0x%08x", + g_ui32NumBlockChars, g_ui32StartChar); + } + + // + // Repaint the display + // + WidgetPaint((tWidget *)WIDGET_ROOT); +} + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. FatFs requires a +// timer tick every 10 ms for internal timing purposes. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Call the FAT module to provide its tick. + // + FATWrapperSysTickHandler(); +} + +//***************************************************************************** +// +// Main entry function for the fontview application. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Height, ui32Width; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "fontview"); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(g_ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Configure SysTick for a 100Hz interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / TICKS_PER_SECOND); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the UART as a console for text I/O. + // + UARTStdioConfig(0, 115200, g_ui32SysClock); + UARTprintf("FontView example running...\n"); + + // + // Set graphics library text rendering defaults. + // + GrLibInit(&g_psGrLibSettingDefaults); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + + // + // Paint the widget tree to make sure they all appear on the display. + // + WidgetPaint(WIDGET_ROOT); + + // + // Initialize the FAT file system font wrapper. + // + if(!FATFontWrapperInit()) + { + UARTprintf("ERROR: Can't initialize FAT file system!\n"); + while(1) + { + // + // Hang. + // + } + } + + // + // See if there is a file called "font.bin" in the root directory of the + // SDCard. If there is, use this as the font to display rather than the + // one defined via FONT_TO_USE. + // + g_sFontWrapper.pui8FontId = FATFontWrapperLoad("/font.bin"); + if(g_sFontWrapper.pui8FontId) + { + UARTprintf("Using font from SDCard.\n"); + g_psFont = (tFont *)&g_sFontWrapper; + } + else + { + UARTprintf("No font found on SDCard. Displaying internal font.\n"); + g_psFont = FONT_TO_USE; + } + + // + // How big is the test font character cell? + // + ui32Height = GrFontHeightGet(g_psFont); + ui32Width = GrFontMaxWidthGet(g_psFont); + + // + // Determine the size of the character cell to use for this font. We + // limit the cell size such that we either get 8 or 16 characters per line. + // + g_ui32CharsPerLine = (ui32Width > ((320 - LEFT) / 16)) ? 8 : 16; + g_ui32CellWidth = (320 - LEFT) / g_ui32CharsPerLine; + g_ui32CellHeight = ui32Height + 4; + g_ui32LinesPerPage = (240 - TOP) / g_ui32CellHeight; + g_ui32StartLine = (0x20 / g_ui32CharsPerLine); + + // + // Get the number of blocks in the font and set up to display the content + // of the first. + // + g_ui32NumBlocks = GrFontNumBlocksGet(g_psFont); + SetBlockNum(0); + + // + // Loop forever, processing widget messages. + // + while(1) + { + // + // Process any messages from or for the widgets. + // + WidgetMessageQueueProcess(); + } +} + +//***************************************************************************** +// +// Paints the main font glyph section of the display. +// +//***************************************************************************** +void +PaintFontGlyphs(tWidget *psWidget, tContext *psContext) +{ + uint32_t ui32X, ui32Y, ui32Char; + tRectangle sRect; + tCanvasWidget *psCanvas; + char pcBuffer[6]; + + // + // Tell the graphics library we will be using UTF-8 text for now. + // + GrStringCodepageSet(psContext, CODEPAGE_UTF_8); + + // + // Erase the background. + // + psCanvas = (tCanvasWidget *)psWidget; + GrContextForegroundSet(psContext, psCanvas->ui32FillColor); + sRect = psCanvas->sBase.sPosition; + GrRectFill(psContext, &sRect); + + // + // Draw the character indices. + // + GrContextForegroundSet(psContext, ClrYellow); + GrContextFontSet(psContext, g_psFontFixed6x8); + + for(ui32Y = 0; ui32Y < g_ui32LinesPerPage; ui32Y++ ) + { + usprintf(pcBuffer, "%06x", g_ui32StartChar + ((ui32Y + g_ui32StartLine) * + g_ui32CharsPerLine) ); + GrStringDraw(psContext, pcBuffer, -1, 8, POSY(ui32Y), 0); + } + + // + // Tell the graphics library to render pure, 32 bit Unicode source + // text. + // + GrStringCodepageSet(psContext, CODEPAGE_UNICODE); + + // + // Draw the required characters at their positions in the grid. + // + GrContextFontSet(psContext, g_psFont); + GrContextForegroundSet(psContext, ClrWhite); + + for(ui32Y = 0; ui32Y < g_ui32LinesPerPage; ui32Y++) + { + for(ui32X = 0; ui32X < g_ui32CharsPerLine; ui32X++) + { + // + // Which character are we about to show? + // + ui32Char = g_ui32StartChar + + ((g_ui32StartLine + ui32Y) * g_ui32CharsPerLine) + ui32X; + + // + // Fill the character cell with the background color. + // + sRect.i16XMin = LEFT + (ui32X * g_ui32CellWidth); + sRect.i16YMin = TOP + (ui32Y * g_ui32CellHeight); + sRect.i16XMax = sRect.i16XMin + g_ui32CellWidth; + sRect.i16YMax = sRect.i16YMin + g_ui32CellHeight; + GrContextForegroundSet(psContext, psCanvas->ui32FillColor); + GrRectFill(psContext, &sRect); + GrContextForegroundSet(psContext, ClrWhite); + + // + // Have we run off the end of the end of the block? + // + if((ui32Char - g_ui32StartChar) < g_ui32NumBlockChars) + { + // + // No - display the character. + // + + GrStringDrawCentered(psContext, (char const *)&ui32Char, 4, + POSX(ui32X), POSY(ui32Y), 0); + } + } + } +} diff --git a/boards/dk-tm4c129x/fontview/fontview.ewd b/boards/dk-tm4c129x/fontview/fontview.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/fontview/fontview.ewp b/boards/dk-tm4c129x/fontview/fontview.ewp new file mode 100644 index 0000000..87f9f7b --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.ewp @@ -0,0 +1,824 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\fatwrapper.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\ff.c + + + $PROJ_DIR$\..\..\..\..\third_party\fonts\ofl\fonts\fontcjktest20pt.c + + + $PROJ_DIR$\fontview.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/fontview/fontview.icf b/boards/dk-tm4c129x/fontview/fontview.icf new file mode 100644 index 0000000..1c1b0de --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// fontview.icf - Linker configuration file for fontview. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/fontview/fontview.ld b/boards/dk-tm4c129x/fontview/fontview.ld new file mode 100644 index 0000000..c8300c5 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * fontview.ld - Linker configuration file for fontview. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/fontview/fontview.sct b/boards/dk-tm4c129x/fontview/fontview.sct new file mode 100644 index 0000000..43f6d57 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; fontview.sct - Linker configuration file for fontview. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/fontview/fontview.uvopt b/boards/dk-tm4c129x/fontview/fontview.uvopt new file mode 100644 index 0000000..89710ff --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.uvopt @@ -0,0 +1,443 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + fontview + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\fatwrapper.c + fatwrapper.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\ff.c + ff.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\ofl\fonts\fontcjktest20pt.c + fontcjktest20pt.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\fontview.c + fontview.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + mmc-dk-tm4c129x.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 9 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 15 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/fontview/fontview.uvproj b/boards/dk-tm4c129x/fontview/fontview.uvproj new file mode 100644 index 0000000..6a7914f --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + fontview + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + fontview + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\fontview.bin .\rvmdk\fontview.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 UART_BUFFERED + + ..;..\..\..\..;..\..\..\..\third_party\fonts\ofl;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + fontview.sct + + + --entry Reset_Handler + + + + + + + + Source + + + fatwrapper.c + 1 + .\fatwrapper.c + + + ff.c + 1 + ..\..\..\..\third_party\fatfs\src\ff.c + + + fontcjktest20pt.c + 1 + ..\..\..\..\third_party\fonts\ofl\fonts\fontcjktest20pt.c + + + fontview.c + 1 + .\fontview.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + mmc-dk-tm4c129x.c + 1 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/fontview/fontview_ccs.cmd b/boards/dk-tm4c129x/fontview/fontview_ccs.cmd new file mode 100644 index 0000000..eed371f --- /dev/null +++ b/boards/dk-tm4c129x/fontview/fontview_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * fontview_ccs.cmd - CCS linker configuration file for fontview. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/fontview/gcc/fontview.axf b/boards/dk-tm4c129x/fontview/gcc/fontview.axf new file mode 100644 index 0000000..7c8c960 Binary files /dev/null and b/boards/dk-tm4c129x/fontview/gcc/fontview.axf differ diff --git a/boards/dk-tm4c129x/fontview/gcc/fontview.bin b/boards/dk-tm4c129x/fontview/gcc/fontview.bin new file mode 100644 index 0000000..51ac45c Binary files /dev/null and b/boards/dk-tm4c129x/fontview/gcc/fontview.bin differ diff --git a/boards/dk-tm4c129x/fontview/readme.txt b/boards/dk-tm4c129x/fontview/readme.txt new file mode 100644 index 0000000..91f637a --- /dev/null +++ b/boards/dk-tm4c129x/fontview/readme.txt @@ -0,0 +1,30 @@ +Font Viewer + +This example displays the contents of a TivaWare graphics library font +on the DK board's LCD touchscreen. By default, the application shows a +test font containing ASCII, the Japanese Hiragana and Katakana alphabets, +and a group of Korean Hangul characters. If an SDCard is installed and +the root directory contains a file named font.bin, this file is +opened and used as the display font instead. In this case, the graphics +library font wrapper feature is used to access the font from the file +system rather than from internal memory. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/fontview/rvmdk/fontview.axf b/boards/dk-tm4c129x/fontview/rvmdk/fontview.axf new file mode 100644 index 0000000..c28d7f6 Binary files /dev/null and b/boards/dk-tm4c129x/fontview/rvmdk/fontview.axf differ diff --git a/boards/dk-tm4c129x/fontview/rvmdk/fontview.bin b/boards/dk-tm4c129x/fontview/rvmdk/fontview.bin new file mode 100644 index 0000000..d715927 Binary files /dev/null and b/boards/dk-tm4c129x/fontview/rvmdk/fontview.bin differ diff --git a/boards/dk-tm4c129x/fontview/startup_ccs.c b/boards/dk-tm4c129x/fontview/startup_ccs.c new file mode 100644 index 0000000..630b0c5 --- /dev/null +++ b/boards/dk-tm4c129x/fontview/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void UARTStdioIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/fontview/startup_ewarm.c b/boards/dk-tm4c129x/fontview/startup_ewarm.c new file mode 100644 index 0000000..3e79ade --- /dev/null +++ b/boards/dk-tm4c129x/fontview/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void UARTStdioIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/fontview/startup_gcc.c b/boards/dk-tm4c129x/fontview/startup_gcc.c new file mode 100644 index 0000000..0e4632c --- /dev/null +++ b/boards/dk-tm4c129x/fontview/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void UARTStdioIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/fontview/startup_rvmdk.S b/boards/dk-tm4c129x/fontview/startup_rvmdk.S new file mode 100644 index 0000000..3be1d1c --- /dev/null +++ b/boards/dk-tm4c129x/fontview/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickHandler + EXTERN UARTStdioIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UARTStdioIntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/freertos_demo/FreeRTOSConfig.h b/boards/dk-tm4c129x/freertos_demo/FreeRTOSConfig.h new file mode 100644 index 0000000..956d1b4 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/FreeRTOSConfig.h @@ -0,0 +1,107 @@ +/* + FreeRTOS V7.0.2 - Copyright (C) 2011 Real Time Engineers Ltd. + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + * + * See http://www.freertos.org/a00110.html. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 1 +#define configUSE_TICK_HOOK 0 +#define configCPU_CLOCK_HZ ( ( unsigned long ) 80000000 ) +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 200 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 20240 ) ) +#define configMAX_TASK_NAME_LEN ( 12 ) +#define configUSE_TRACE_FACILITY 1 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 0 +#define configUSE_CO_ROUTINES 0 +#define configUSE_MUTEXES 1 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configCHECK_FOR_STACK_OVERFLOW 2 + +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 16 ) +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) +#define configQUEUE_REGISTRY_SIZE 10 + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_uxTaskGetStackHighWaterMark 1 + +/* Be ENORMOUSLY careful if you want to modify these two values and make sure + * you read http://www.freertos.org/a00110.html#kernel_priority first! + */ +#define configKERNEL_INTERRUPT_PRIORITY ( 7 << 5 ) /* Priority 7, or 0xE0 as only the top three bits are implemented. This is the lowest priority. */ +#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( 5 << 5 ) /* Priority 5, or 0xA0 as only the top three bits are implemented. */ + +#endif /* FREERTOS_CONFIG_H */ diff --git a/boards/dk-tm4c129x/freertos_demo/Makefile b/boards/dk-tm4c129x/freertos_demo/Makefile new file mode 100644 index 0000000..e8d76d3 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/Makefile @@ -0,0 +1,124 @@ +#****************************************************************************** +# +# Makefile - Rules for building the FreeRTOS example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../../../../third_party/FreeRTOS/Source/portable/GCC/ARM_CM4F +VPATH+=../../../../third_party/FreeRTOS/Source/portable/MemMang/ +VPATH+=../../../../third_party/FreeRTOS/Source +VPATH+=../drivers +VPATH+=../../../../third_party/lwip-1.4.1/apps/httpserver_raw +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/FreeRTOS/Source/portable/GCC/ARM_CM4F +IPATH+=../../../../third_party/FreeRTOS +IPATH+=../../../../third_party/lwip-1.4.1/apps +IPATH+=../../../../third_party/FreeRTOS/Source/include +IPATH+=../../../../third_party/lwip-1.4.1/ports/tiva-tm4c129/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include/ipv4 +IPATH+=../../../../third_party + +# +# The default rule, which causes the FreeRTOS example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/freertos_demo.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the FreeRTOS example. +# +${COMPILER}/freertos_demo.axf: ${COMPILER}/cgifuncs.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/croutine.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/display_task.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/frame.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/freertos_demo.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/fs.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/heap_2.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/httpd.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/idle_task.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/images.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/led_task.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/list.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/locator.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/lwip_task.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/lwiplib.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/pinout.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/port.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/queue.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/random.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/spider_task.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/tasks.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/timers.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/touch.o +${COMPILER}/freertos_demo.axf: ${COMPILER}/ustdlib.o +${COMPILER}/freertos_demo.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/freertos_demo.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/freertos_demo.axf: freertos_demo.ld +SCATTERgcc_freertos_demo=freertos_demo.ld +ENTRY_freertos_demo=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DSNOWFLAKE + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/.ccsimportspec b/boards/dk-tm4c129x/freertos_demo/ccs/.ccsimportspec new file mode 100644 index 0000000..41907ca --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/.ccsimportspec @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/.ccsproject b/boards/dk-tm4c129x/freertos_demo/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/.cproject b/boards/dk-tm4c129x/freertos_demo/ccs/.cproject new file mode 100644 index 0000000..79942b5 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/.cproject @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/.project b/boards/dk-tm4c129x/freertos_demo/ccs/.project new file mode 100644 index 0000000..0a6affe --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/.project @@ -0,0 +1,175 @@ + + + freertos_demo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + cgifuncs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/cgifuncs.c + + + display_task.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/display_task.c + + + freertos_demo.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/freertos_demo.c + + + freertos_demo_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/freertos_demo_ccs.cmd + + + fs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/fs.c + + + idle_task.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/idle_task.c + + + images.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/images.c + + + led_task.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/led_task.c + + + lwip_task.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/lwip_task.c + + + random.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/random.c + + + spider_task.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/spider_task.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/freertos_demo/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/locator.c + 1 + SW_ROOT/utils/locator.c + + + utils/lwiplib.c + 1 + SW_ROOT/utils/lwiplib.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/FreeRTOS/Source/croutine.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/croutine.c + + + third_party/FreeRTOS/Source/list.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/list.c + + + third_party/FreeRTOS/Source/queue.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/queue.c + + + third_party/FreeRTOS/Source/tasks.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/tasks.c + + + third_party/FreeRTOS/Source/timers.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/timers.c + + + third_party/lwip-1.4.1/apps/httpserver_raw/httpd.c + 1 + SW_ROOT/third_party/lwip-1.4.1/apps/httpserver_raw/httpd.c + + + third_party/FreeRTOS/Source/portable/MemMang/heap_2.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/portable/MemMang/heap_2.c + + + third_party/FreeRTOS/Source/portable/CCS/ARM_CM4F/port.c + 1 + SW_ROOT/third_party/FreeRTOS/Source/portable/CCS/ARM_CM4F/port.c + + + third_party/FreeRTOS/Source/portable/CCS/ARM_CM4F/portasm.asm + 1 + SW_ROOT/third_party/FreeRTOS/Source/portable/CCS/ARM_CM4F/portasm.asm + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/freertos_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.bin b/boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.bin new file mode 100644 index 0000000..0caf86c Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.bin differ diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.out b/boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.out new file mode 100644 index 0000000..4276cdb Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/ccs/Debug/freertos_demo.out differ diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/macros.ini_initial b/boards/dk-tm4c129x/freertos_demo/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/freertos_demo/ccs/target_config.ccxml b/boards/dk-tm4c129x/freertos_demo/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/cgifuncs.c b/boards/dk-tm4c129x/freertos_demo/cgifuncs.c new file mode 100644 index 0000000..b6b8efd --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/cgifuncs.c @@ -0,0 +1,552 @@ +//***************************************************************************** +// +// cgifuncs.c - Helper functions related to CGI script parameter parsing. +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_types.h" +#include "utils/ustdlib.h" +#include "cgifuncs.h" + +//***************************************************************************** +// +// Searches the list of parameters passed to a CGI handler and returns the +// index of a given parameter within that list. +// +// \param pcToFind is a pointer to a string containing the name of the +// parameter that is to be found. +// \param pcParam is an array of character pointers, each containing the name +// of a single parameter as encoded in the URI requesting the CGI. +// \param i32NumParams is the number of elements in the pcParam array. +// +// This function searches an array of parameters to find the string passed in +// \e pcToFind. If the string is found, the index of that string within the +// \e pcParam array is returned, otherwise -1 is returned. +// +// \return Returns the index of string \e pcToFind within array \e pcParam +// or -1 if the string does not exist in the array. +// +//***************************************************************************** +int32_t +FindCGIParameter(const char *pcToFind, char *pcParam[], int32_t i32NumParams) +{ + int32_t i32Loop; + + // + // Scan through all the parameters in the array. + // + for(i32Loop = 0; i32Loop < i32NumParams; i32Loop++) + { + // + // Does the parameter name match the provided string? + // + if(strcmp(pcToFind, pcParam[i32Loop]) == 0) + { + // + // We found a match - return the index. + // + return(i32Loop); + } + } + + // + // If we drop out, the parameter was not found. + // + return(-1); +} + +//***************************************************************************** +// +// Determines whether a given character is a valid hexadecimal digit. +// +// \param cDigit is the ASCII character code to be checked for validity. +// +// This function checks the passed character to determime whether or not it is +// a valid hexadecimal digit. +// +// \return Returns \e true if the passed character is a valid hex digit or \e +// false otherwise +// +//***************************************************************************** +bool +IsValidHexDigit(const char cDigit) +{ + if(((cDigit >= '0') && (cDigit <= '9')) || + ((cDigit >= 'a') && (cDigit <= 'f')) || + ((cDigit >= 'A') && (cDigit <= 'F'))) + { + return(true); + } + else + { + return(false); + } +} + +//***************************************************************************** +// +// Converts an ASCII character to a hex digit value. +// +// \param cDigit is the ASCII character code to convert to a number. +// +// This function converts a passed ASCII character to a number assuming that +// the character is a valid hexadecimal digit. If the character is not a valid +// hex digit, the value 0xFF is returned. +// +// \return Returns the number represented by hex digit \e cDigit or 0xFF if +// the character passed is not valid hex. +// +//***************************************************************************** +uint8_t +HexDigit(const char cDigit) +{ + if((cDigit >= '0') && (cDigit <= '9')) + { + return(cDigit - '0'); + } + else + { + if((cDigit >= 'a') && (cDigit <= 'f')) + { + return((cDigit - 'a') + 10); + } + else + { + if((cDigit >= 'A') && (cDigit <= 'F')) + { + return((cDigit - 'A') + 10); + } + } + } + + // + // If we get here, we were passed an invalid hex digit so return 0xFF. + // + return(0xFF); +} + +//***************************************************************************** +// +// Decodes a single %xx escape sequence as an ASCII character. +// +// \param pcEncoded points to the ``%'' character at the start of a three +// character escape sequence which represents a single ASCII character. +// \param pcDecoded points to a byte which will be written with the decoded +// character assuming the escape sequence is valid. +// +// This function decodes a single escape sequence of the form ``%xy'' where +// x and y represent hexadecimal digits. If each digit is a valid hex digit, +// the function writes the decoded character to the pcDecoded buffer and +// returns true, else it returns false. +// +// \return Returns \b true on success or \b false if pcEncoded does not point +// to a valid escape sequence. +// +//***************************************************************************** +bool +DecodeHexEscape(const char *pcEncoded, char *pcDecoded) +{ + if((pcEncoded[0] != '%') || !IsValidHexDigit(pcEncoded[1]) || + !IsValidHexDigit(pcEncoded[2])) + { + return(false); + } + else + { + *pcDecoded = ((HexDigit(pcEncoded[1]) * 16) + + HexDigit(pcEncoded[2])); + return(true); + } +} + +//***************************************************************************** +// +// Encodes a string for use within an HTML tag, escaping non alphanumeric +// characters. +// +// \param pcDecoded is a pointer to a null terminated ASCII string. +// \param pcEncoded is a pointer to a storage for the encoded string. +// \param ui32Len is the number of bytes of storage pointed to by pcEncoded. +// +// This function encodes a string, adding escapes in place of any special, +// non-alphanumeric characters. If the encoded string is too long for the +// provided output buffer, the output will be truncated. +// +// \return Returns the number of characters written to the output buffer +// not including the terminating NULL. +// +//***************************************************************************** +uint32_t +EncodeFormString(const char *pcDecoded, char *pcEncoded, uint32_t ui32Len) +{ + uint32_t ui32Loop; + uint32_t ui32Count; + + // + // Make sure we were not passed a tiny buffer. + // + if(ui32Len <= 1) + { + return(0); + } + + // + // Initialize our output character counter. + // + ui32Count = 0; + + // + // Step through each character of the input until we run out of data or + // space to put our output in. + // + for(ui32Loop = 0; pcDecoded[ui32Loop] && (ui32Count < (ui32Len - 1)); + ui32Loop++) + { + switch(pcDecoded[ui32Loop]) + { + // + // Pass most characters without modification. + // + default: + { + pcEncoded[ui32Count++] = pcDecoded[ui32Loop]; + break; + } + + case '\'': + { + ui32Count += usnprintf(&pcEncoded[ui32Count], + (ui32Len - ui32Count), "'"); + break; + } + } + } + + return(ui32Count); +} + +//***************************************************************************** +// +// Decodes a string encoded as part of an HTTP URI. +// +// \param pcEncoded is a pointer to a null terminated string encoded as per +// RFC1738, section 2.2. +// \param pcDecoded is a pointer to storage for the decoded, null terminated +// string. +// \param ui32Len is the number of bytes of storage pointed to by pcDecoded. +// +// This function decodes a string which has been encoded using the method +// described in RFC1738, section 2.2 for URLs. If the decoded string is too +// long for the provided output buffer, the output will be truncated. +// +// \return Returns the number of character written to the output buffer, not +// including the terminating NULL. +// +//***************************************************************************** +uint32_t +DecodeFormString(const char *pcEncoded, char *pcDecoded, uint32_t ui32Len) +{ + uint32_t ui32Loop; + uint32_t ui32Count; + bool bValid; + + ui32Count = 0; + ui32Loop = 0; + + // + // Keep going until we run out of input or fill the output buffer. + // + while(pcEncoded[ui32Loop] && (ui32Count < (ui32Len - 1))) + { + switch(pcEncoded[ui32Loop]) + { + // + // '+' in the encoded data is decoded as a space. + // + case '+': + { + pcDecoded[ui32Count++] = ' '; + ui32Loop++; + break; + } + + // + // '%' in the encoded data indicates that the following 2 + // characters indicate the hex ASCII code of the decoded character. + // + case '%': + { + if(pcEncoded[ui32Loop + 1] && pcEncoded[ui32Loop + 2]) + { + // + // Decode the escape sequence. + // + bValid = DecodeHexEscape(&pcEncoded[ui32Loop], + &pcDecoded[ui32Count]); + + // + // If the escape sequence was valid, move to the next + // output character. + // + if(bValid) + { + ui32Count++; + } + + // + // Skip past the escape sequence in the encoded string. + // + ui32Loop += 3; + } + else + { + // + // We reached the end of the string partway through an + // escape sequence so just ignore it and return the number + // of decoded characters found so far. + // + pcDecoded[ui32Count] = '\0'; + return(ui32Count); + } + break; + } + + // + // For all other characters, just copy the input to the output. + // + default: + { + pcDecoded[ui32Count++] = pcEncoded[ui32Loop++]; + break; + } + } + } + + // + // Terminate the string and return the number of characters we decoded. + // + pcDecoded[ui32Count] = '\0'; + return(ui32Count); +} + +//***************************************************************************** +// +// Ensures that a string passed represents a valid decimal number and, +// if so, converts that number to a long. +// +// \param pcValue points to a null terminated string which should contain an +// ASCII representation of a decimal number. +// \param pi32Value points to storage which will receive the number represented +// by pcValue assuming the string is a valid decimal number. +// +// This function determines whether or not a given string represents a valid +// decimal number and, if it does, converts the string into a decimal number +// which is returned to the caller. +// +// \return Returns \b true if the string is a valid representation of a +// decimal number or \b false if not. + +//***************************************************************************** +bool +CheckDecimalParam(const char *pcValue, int32_t *pi32Value) +{ + uint32_t ui32Loop; + bool bStarted; + bool bFinished; + bool bNeg; + int32_t l32Accum; + + // + // Check that the string is a valid decimal number. + // + bStarted = false; + bFinished = false; + bNeg = false; + ui32Loop = 0; + l32Accum = 0; + + while(pcValue[ui32Loop]) + { + // + // Ignore whitespace before the string. + // + if(!bStarted) + { + if((pcValue[ui32Loop] == ' ') || (pcValue[ui32Loop] == '\t')) + { + ui32Loop++; + continue; + } + + // + // Ignore a + or - character as long as we have not started. + // + if((pcValue[ui32Loop] == '+') || (pcValue[ui32Loop] == '-')) + { + // + // If the string starts with a '-', remember to negate the + // result. + // + bNeg = (pcValue[ui32Loop] == '-') ? true : false; + bStarted = true; + ui32Loop++; + } + else + { + // + // We found something other than whitespace or a sign character + // so we start looking for numerals now. + // + bStarted = true; + } + } + + if(bStarted) + { + if(!bFinished) + { + // + // We expect to see nothing other than valid digit characters + // here. + // + if((pcValue[ui32Loop] >= '0') && (pcValue[ui32Loop] <= '9')) + { + l32Accum = (l32Accum * 10) + (pcValue[ui32Loop] - '0'); + } + else + { + // + // Have we hit whitespace? If so, check for no more + // characters until the end of the string. + // + if((pcValue[ui32Loop] == ' ') || + (pcValue[ui32Loop] == '\t')) + { + bFinished = true; + } + else + { + // + // We got something other than a digit or whitespace so + // this makes the string invalid as a decimal number. + // + return(false); + } + } + } + else + { + // + // We are scanning for whitespace until the end of the string. + // + if((pcValue[ui32Loop] != ' ') && (pcValue[ui32Loop] != '\t')) + { + // + // We found something other than whitespace so the string + // is not valid. + // + return(false); + } + } + + // + // Move on to the next character in the string. + // + ui32Loop++; + } + } + + // + // If we drop out of the loop, the string must be valid. All we need to do + // now is negate the accumulated value if the string started with a '-'. + // + *pi32Value = bNeg ? -l32Accum : l32Accum; + return(true); +} + +//***************************************************************************** +// +// Searches the list of parameters passed to a CGI handler for a parameter +// with the given name and, if found, reads the parameter value as a decimal +// number. +// +// \param pcName is a pointer to a string containing the name of the +// parameter that is to be found. +// \param pcParam is an array of character pointers, each containing the name +// of a single parameter as encoded in the URI requesting the CGI. +// \param i32NumParams is the number of elements in the pcParam array. +// \param pcValues is an array of values associated with each parameter from +// the pcParam array. +// \param pbError is a pointer that will be written to \b true if there is any +// error during the parameter parsing process (parameter not found, value is +// not a valid decimal number). +// +// This function searches an array of parameters to find the string passed in +// \e pcName. If the string is found, the corresponding parameter value is +// read from array pcValues and checked to make sure that it is a valid +// decimal number. If so, the number is returned. If any error is detected, +// parameter \e pbError is written to \b true. Note that \e pbError is NOT +// written if the parameter is successfully found and validated. This is to +// allow multiple parameters to be parsed without the caller needing to check +// return codes after each individual call. +// +// \return Returns the value of the parameter or 0 if an error is detected (in +// which case \e *pbError will be \b true). +// +//***************************************************************************** +int32_t +GetCGIParam(const char *pcName, char *pcParams[], char *pcValue[], + int32_t i32NumParams, bool *pbError) +{ + int32_t i32Param; + int32_t i32Value; + bool bRetcode; + + // + // Is the parameter we are looking for in the list? + // + i32Param = FindCGIParameter(pcName, pcParams, i32NumParams); + if(i32Param != -1) + { + // + // We found the parameter so now get its value. + // + bRetcode = CheckDecimalParam(pcValue[i32Param], &i32Value); + if(bRetcode) + { + // + // All is well - return the parameter value. + // + return(i32Value); + } + } + + // + // If we reach here, there was a problem so return 0 and set the error + // flag. + // + *pbError = true; + return(0); +} + diff --git a/boards/dk-tm4c129x/freertos_demo/cgifuncs.h b/boards/dk-tm4c129x/freertos_demo/cgifuncs.h new file mode 100644 index 0000000..32dfbf9 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/cgifuncs.h @@ -0,0 +1,46 @@ +//***************************************************************************** +// +// cgifuncs.c - Helper functions related to CGI script parameter parsing. +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __CGIFUNCS_H__ +#define __CGIFUNCS_H__ + +//***************************************************************************** +// +// Prototypes of functions exported by this module. +// +//***************************************************************************** +int32_t FindCGIParameter(const char *pcToFind, char *pcParam[], + int32_t i32NumParams); +bool IsValidHexDigit(const char cDigit); +uint8_t HexDigit(const char cDigit); +bool DecodeHexEscape(const char *pcEncoded, char *pcDecoded); +uint32_t EncodeFormString(const char *pcDecoded, char *pcEncoded, + uint32_t ui32Len); +uint32_t DecodeFormString(const char *pcEncoded, char *pcDecoded, + uint32_t ui32Len); +bool CheckDecimalParam(const char *pcValue, int32_t *pi32Value); +int32_t GetCGIParam(const char *pcName, char *pcParams[], char *pcValue[], + int32_t i32NumParams, bool *pbError); + +#endif // __CGIFUNCS_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/display_task.c b/boards/dk-tm4c129x/freertos_demo/display_task.c new file mode 100644 index 0000000..f2199ba --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/display_task.c @@ -0,0 +1,329 @@ +//***************************************************************************** +// +// display_task.c - Task to display text and images on the LCD. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "display_task.h" +#include "idle_task.h" +#include "priorities.h" +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "semphr.h" +//***************************************************************************** +// +// This structure defines the messages that are sent to the display task. +// +//***************************************************************************** +typedef struct +{ + uint32_t ui32Type; + uint16_t ui16X; + uint16_t ui16Y; + const char *pcMessage; +} + +tDisplayMessage; +xTaskHandle g_sDisplayTask; // FIXME +//***************************************************************************** +// +// The stack size for the display task. +// +//***************************************************************************** +#define STACKSIZE_DISPLAYTASK 128 + +//***************************************************************************** +// +// Defines to indicate the contents of the display message. +// +//***************************************************************************** +#define DISPLAY_IMAGE 1 +#define DISPLAY_STRING 2 +#define DISPLAY_MOVE 3 +#define DISPLAY_DRAW 4 + +//***************************************************************************** +// +// The item size, queue size, and memory size for the display message queue. +// +//***************************************************************************** +#define DISPLAY_ITEM_SIZE sizeof(tDisplayMessage) +#define DISPLAY_QUEUE_SIZE 10 + +//***************************************************************************** +// +// The queue that holds messages sent to the display task. +// +//***************************************************************************** +static xQueueHandle g_pDisplayQueue; + +//***************************************************************************** +// +// The most recent position of the display pen. +// +//***************************************************************************** +static uint32_t g_ui32DisplayX, g_ui32DisplayY; + +//***************************************************************************** +// +// This task receives messages from the other tasks and updates the display as +// directed. +// +//***************************************************************************** +static void +DisplayTask(void *pvParameters) +{ + tDisplayMessage sMessage; + tContext sContext; + + // + // Initialize the graphics library context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + GrContextForegroundSet(&sContext, ClrWhite); + GrContextBackgroundSet(&sContext, ClrBlack); + GrContextFontSet(&sContext, g_psFontFixed6x8); + + // + // Loop forever. + // + while(1) + { + // + // Read the next message from the queue. + // + if(xQueueReceive(g_pDisplayQueue, &sMessage, portMAX_DELAY) == pdPASS) + { + // + // Determine the message type. + // + switch(sMessage.ui32Type) + { + // + // The drawing of an image has been requested. + // + case DISPLAY_IMAGE: + { + // + // Draw this image on the display. + // + GrImageDraw(&sContext, (uint8_t *)sMessage.pcMessage, + sMessage.ui16X, sMessage.ui16Y); + + // + // This message has been handled. + // + break; + } + + // + // The drawing of a string has been requested. + // + case DISPLAY_STRING: + { + // + // Draw this string on the display. + // + GrStringDraw(&sContext, sMessage.pcMessage, -1, + sMessage.ui16X, sMessage.ui16Y, 1); + + // + // This message has been handled. + // + break; + } + + // + // A move of the pen has been requested. + // + case DISPLAY_MOVE: + { + // + // Save the new pen position. + // + g_ui32DisplayX = sMessage.ui16X; + g_ui32DisplayY = sMessage.ui16Y; + + // + // This message has been handled. + // + break; + } + + // + // A draw with the pen has been requested. + // + case DISPLAY_DRAW: + { + // + // Draw a line from the previous pen position to the new + // pen position. + // + GrLineDraw(&sContext, g_ui32DisplayX, g_ui32DisplayY, + sMessage.ui16X, sMessage.ui16Y); + + // + // Save the new pen position. + // + g_ui32DisplayX = sMessage.ui16X; + g_ui32DisplayY = sMessage.ui16Y; + + // + // This message has been handled. + // + break; + } + } + } + } +} + +//***************************************************************************** +// +// Sends a request to the display task to draw an image on the display. +// +//***************************************************************************** +void +DisplayImage(uint32_t ui16X, uint32_t ui16Y, const uint8_t *pui8Image) +{ + tDisplayMessage sMessage; + + // + // Construct the message to be sent. + // + sMessage.ui32Type = DISPLAY_IMAGE; + sMessage.ui16X = ui16X; + sMessage.ui16Y = ui16Y; + sMessage.pcMessage = (char *)pui8Image; + + // + // Send the image draw request to the display task. + // + xQueueSend(g_pDisplayQueue, &sMessage, portMAX_DELAY); +} + +//***************************************************************************** +// +// Sends a request to the display task to draw a string on the display. +// +//***************************************************************************** +void +DisplayString(uint32_t ui16X, uint32_t ui16Y, const char *pcString) +{ + tDisplayMessage sMessage; + + // + // Construct the message to be sent. + // + sMessage.ui32Type = DISPLAY_STRING; + sMessage.ui16X = ui16X; + sMessage.ui16Y = ui16Y; + sMessage.pcMessage = pcString; + + // + // Send the string draw request to the display task. + // + xQueueSend(g_pDisplayQueue, &sMessage, portMAX_DELAY); +} + +//***************************************************************************** +// +// Sends a request to the display task to move the pen. +// +//***************************************************************************** +void +DisplayMove(uint32_t ui16X, uint32_t ui16Y) +{ + tDisplayMessage sMessage; + + // + // Construct the message to be sent. + // + sMessage.ui32Type = DISPLAY_MOVE; + sMessage.ui16X = ui16X; + sMessage.ui16Y = ui16Y; + + // + // Send the pen move request to the display task. + // + xQueueSend(g_pDisplayQueue, &sMessage, portMAX_DELAY); +} + +//***************************************************************************** +// +// Sends a request to the display task to draw with the pen. +// +//***************************************************************************** +void +DisplayDraw(uint32_t ui16X, uint32_t ui16Y) +{ + tDisplayMessage sMessage; + + // + // Construct the message to be sent. + // + sMessage.ui32Type = DISPLAY_DRAW; + sMessage.ui16X = ui16X; + sMessage.ui16Y = ui16Y; + + // + // Send the pen draw request to the display task. + // + xQueueSend(g_pDisplayQueue, &sMessage, portMAX_DELAY); +} + +//***************************************************************************** +// +// Initializes the display task. +// +//***************************************************************************** +uint32_t +DisplayTaskInit(void) +{ + // + // Create a queue for sending messages to the display task. + // + g_pDisplayQueue = xQueueCreate(DISPLAY_QUEUE_SIZE, DISPLAY_ITEM_SIZE); + if(g_pDisplayQueue == NULL) + { + return(1); + } + + // + // Create the display task. + // + if(xTaskCreate(DisplayTask, (signed portCHAR *)"Display", + STACKSIZE_DISPLAYTASK, NULL, + tskIDLE_PRIORITY + PRIORITY_DISPLAY_TASK, &g_sDisplayTask) != pdTRUE) + { // FIXME + return(1); + } + + // + // Success. + // + return(0); +} diff --git a/boards/dk-tm4c129x/freertos_demo/display_task.h b/boards/dk-tm4c129x/freertos_demo/display_task.h new file mode 100644 index 0000000..29be2db --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/display_task.h @@ -0,0 +1,41 @@ +//***************************************************************************** +// +// display_task.h - Prototypes for the display task. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DISPLAY_TASK_H__ +#define __DISPLAY_TASK_H__ + +//***************************************************************************** +// +// Prototypes for the display task. +// +//***************************************************************************** +extern void DisplayImage(uint32_t ui16X, uint32_t ui16Y, + const uint8_t *pui8Image); +extern void DisplayString(uint32_t ui16X, uint32_t ui16Y, + const char *pcString); +extern void DisplayMove(uint32_t ui16X, uint32_t ui16Y); +extern void DisplayDraw(uint32_t ui16X, uint32_t ui16Y); +extern uint32_t DisplayTaskInit(void); + +#endif // __DISPLAY_TASK_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.bin b/boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.bin new file mode 100644 index 0000000..3890a67 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.bin differ diff --git a/boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.out b/boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.out new file mode 100644 index 0000000..41bbb25 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/ewarm/Exe/freertos_demo.out differ diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.c b/boards/dk-tm4c129x/freertos_demo/freertos_demo.c new file mode 100644 index 0000000..f54ebcf --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// freertos_demo.c - Simple FreeRTOS example. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "display_task.h" +#include "idle_task.h" +#include "led_task.h" +#include "lwip_task.h" +#include "spider_task.h" + +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "semphr.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      FreeRTOS Example (freertos_demo)

      +//! +//! This application utilizes FreeRTOS to perform a variety of tasks in a +//! concurrent fashion. The following tasks are created: +//! +//! * An lwIP task, which serves up web pages via the Ethernet interface. This +//! is actually two tasks, one which runs the lwIP stack and one which +//! manages the Ethernet interface (sending and receiving raw packets). +//! +//! * An LED task, which simply blinks the on-board LED at a user-controllable +//! rate (changed via the web interface). +//! +//! * A set of spider tasks, each of which controls a spider that crawls around +//! the LCD. The speed at which the spiders move is controllable via the web +//! interface. Up to thirty-two spider tasks can be run concurrently (an +//! application-imposed limit). +//! +//! * A spider control task, which manages presses on the touch screen and +//! determines if a spider task should be terminated (if the spider is +//! ``squished'') or if a new spider task should be created (if no spider is +//! ``squished''). +//! +//! * There is an automatically created idle task, which monitors changes in +//! the board's IP address and sends those changes to the user via a UART +//! message. +//! +//! Across the bottom of the LCD, several status items are displayed: the +//! amount of time the application has been running, the number of tasks that +//! are running, the IP address of the board, the number of Ethernet packets +//! that have been transmitted, and the number of Ethernet packets that have +//! been received. +//! +//! The finder application (in tools/finder) can also be used to discover the +//! IP address of the board. The finder application will search the network +//! for all boards that respond to its requests and display information about +//! them. +//! +//! The web site served by lwIP includes the ability to adjust the toggle rate +//! of the LED task and the update speed of the spiders (all spiders move at +//! the same speed). +//! +//! For additional details on FreeRTOS, refer to the FreeRTOS web page at: +//! http://www.freertos.org/ +//! +//! For additional details on lwIP, refer to the lwIP web page at: +//! http://savannah.nongnu.org/projects/lwip/ +// +//***************************************************************************** + +//***************************************************************************** +// +// System clock rate in Hz. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This hook is called by FreeRTOS when an stack overflow error is detected. +// +//***************************************************************************** +void +vApplicationStackOverflowHook(xTaskHandle *pxTask, signed char *pcTaskName) +{ + tContext sContext; + + // + // A fatal FreeRTOS error was detected, so display an error message. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + GrContextForegroundSet(&sContext, ClrRed); + GrContextBackgroundSet(&sContext, ClrBlack); + GrContextFontSet(&sContext, g_psFontCm20); + GrStringDrawCentered(&sContext, "Fatal FreeRTOS error!", -1, + GrContextDpyWidthGet(&sContext) / 2, + (((GrContextDpyHeightGet(&sContext) - 24) / 2) + + 24), 1); + + // + // This function can not return, so loop forever. Interrupts are disabled + // on entry to this function, so no processor interrupts will interrupt + // this loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// Initialize FreeRTOS and start the initial set of tasks. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), + configCPU_CLOCK_HZ); + + // + // Initialize the device pinout appropriately for this board. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "freertos-demo"); + + // + // Make sure the main oscillator is enabled because this is required by + // the PHY. The system must have a 25MHz crystal attached to the OSC + // pins. The SYSCTL_MOSC_HIGHFREQ parameter is used when the crystal + // frequency is 10MHz or higher. + // + SysCtlMOSCConfigSet(SYSCTL_MOSC_HIGHFREQ); + + // + // Create the display task. + // + if(DisplayTaskInit() != 0) + { + GrContextForegroundSet(&sContext, ClrRed); + GrStringDrawCentered(&sContext, "Failed to create display task!", -1, + GrContextDpyWidthGet(&sContext) / 2, + (((GrContextDpyHeightGet(&sContext) - 24) / 2) + + 24), 0); + while(1) + { + } + } + + // + // Create the spider task. + // + if(SpiderTaskInit() != 0) + { + GrContextForegroundSet(&sContext, ClrRed); + GrStringDrawCentered(&sContext, "Failed to create spider task!", -1, + GrContextDpyWidthGet(&sContext) / 2, + (((GrContextDpyHeightGet(&sContext) - 24) / 2) + + 24), 0); + while(1) + { + } + } + + // + // Create the LED task. + // + if(LEDTaskInit() != 0) + { + GrContextForegroundSet(&sContext, ClrRed); + GrStringDrawCentered(&sContext, "Failed to create LED task!", -1, + GrContextDpyWidthGet(&sContext) / 2, + (((GrContextDpyHeightGet(&sContext) - 24) / 2) + + 24), 0); + while(1) + { + } + } + + // + // Create the lwIP tasks. + // + if(lwIPTaskInit() != 0) + { + GrContextForegroundSet(&sContext, ClrRed); + GrStringDrawCentered(&sContext, "Failed to create lwIP tasks!", -1, + GrContextDpyWidthGet(&sContext) / 2, + (((GrContextDpyHeightGet(&sContext) - 24) / 2) + + 24), 0); + while(1) + { + } + } + + // + // Start the scheduler. This should not return. + // + vTaskStartScheduler(); + + // + // In case the scheduler returns for some reason, print an error and loop + // forever. + // + GrContextForegroundSet(&sContext, ClrRed); + GrStringDrawCentered(&sContext, "Failed to start scheduler!", -1, + GrContextDpyWidthGet(&sContext) / 2, + (((GrContextDpyHeightGet(&sContext) - 24) / 2) + 24), + 0); + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.ewd b/boards/dk-tm4c129x/freertos_demo/freertos_demo.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.ewp b/boards/dk-tm4c129x/freertos_demo/freertos_demo.ewp new file mode 100644 index 0000000..34a4eff --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.ewp @@ -0,0 +1,883 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\cgifuncs.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\croutine.c + + + $PROJ_DIR$\display_task.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\freertos_demo.c + + + $PROJ_DIR$\fs.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\portable\MemMang\heap_2.c + + + $PROJ_DIR$\..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + + + $PROJ_DIR$\idle_task.c + + + $PROJ_DIR$\images.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\led_task.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\list.c + + + $PROJ_DIR$\..\..\..\..\utils\locator.c + + + $PROJ_DIR$\lwip_task.c + + + $PROJ_DIR$\..\..\..\..\utils\lwiplib.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\portable\IAR\ARM_CM4F\port.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\portable\IAR\ARM_CM4F\portasm.S + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\queue.c + + + $PROJ_DIR$\random.c + + + $PROJ_DIR$\spider_task.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\tasks.c + + + $PROJ_DIR$\..\..\..\..\third_party\FreeRTOS\Source\timers.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.h b/boards/dk-tm4c129x/freertos_demo/freertos_demo.h new file mode 100644 index 0000000..60d162f --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.h @@ -0,0 +1,35 @@ +//***************************************************************************** +// +// freertos_demo.h - Prototypes for the freertos_demo. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __FREERTOS_DEMO_H__ +#define __FREERTOS_DEMO_H__ + +//***************************************************************************** +// +// System clock rate in Hz. +// +//***************************************************************************** +extern uint32_t g_ui32SysClock; + +#endif // __FREERTOS_DEMO_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.icf b/boards/dk-tm4c129x/freertos_demo/freertos_demo.icf new file mode 100644 index 0000000..612e7da --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// freertos_demo.icf - Linker configuration file for freertos_demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.ld b/boards/dk-tm4c129x/freertos_demo/freertos_demo.ld new file mode 100644 index 0000000..ea56396 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * freertos_demo.ld - Linker configuration file for freertos_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.sct b/boards/dk-tm4c129x/freertos_demo/freertos_demo.sct new file mode 100644 index 0000000..cb334f3 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; freertos_demo.sct - Linker configuration file for freertos_demo. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.uvopt b/boards/dk-tm4c129x/freertos_demo/freertos_demo.uvopt new file mode 100644 index 0000000..239b69c --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.uvopt @@ -0,0 +1,639 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + freertos_demo + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\cgifuncs.c + cgifuncs.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\croutine.c + croutine.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\display_task.c + display_task.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\freertos_demo.c + freertos_demo.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\fs.c + fs.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\portable\MemMang\heap_2.c + heap_2.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + httpd.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\idle_task.c + idle_task.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\images.c + images.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\led_task.c + led_task.c + + + 1 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\list.c + list.c + + + 1 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\locator.c + locator.c + + + 1 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\lwip_task.c + lwip_task.c + + + 1 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\lwiplib.c + lwiplib.c + + + 1 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c + port.c + + + 1 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\queue.c + queue.c + + + 1 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\random.c + random.c + + + 1 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\spider_task.c + spider_task.c + + + 1 + 22 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\tasks.c + tasks.c + + + 1 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\FreeRTOS\Source\timers.c + timers.c + + + 1 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 27 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 28 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 29 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo.uvproj b/boards/dk-tm4c129x/freertos_demo/freertos_demo.uvproj new file mode 100644 index 0000000..f77f89f --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo.uvproj @@ -0,0 +1,549 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + freertos_demo + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + freertos_demo + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\freertos_demo.bin .\rvmdk\freertos_demo.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 SNOWFLAKE + + .;..;..\..\..\..;..\..\..\..\third_party\FreeRTOS\Source\portable\RVDS\ARM_CM4F;..\..\..\..\third_party\FreeRTOS;..\..\..\..\third_party\lwip-1.4.1\apps;..\..\..\..\third_party\FreeRTOS\Source\include;..\..\..\..\third_party\lwip-1.4.1\ports\tiva-tm4c129\include;..\..\..\..\third_party\lwip-1.4.1\src\include;..\..\..\..\third_party\lwip-1.4.1\src\include\ipv4;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + freertos_demo.sct + + + --entry Reset_Handler + + + + + + + + Source + + + cgifuncs.c + 1 + .\cgifuncs.c + + + croutine.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\croutine.c + + + display_task.c + 1 + .\display_task.c + + + frame.c + 1 + ..\drivers\frame.c + + + freertos_demo.c + 1 + .\freertos_demo.c + + + fs.c + 1 + .\fs.c + + + heap_2.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\portable\MemMang\heap_2.c + + + httpd.c + 1 + ..\..\..\..\third_party\lwip-1.4.1\apps\httpserver_raw\httpd.c + + + idle_task.c + 1 + .\idle_task.c + + + images.c + 1 + .\images.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + led_task.c + 1 + .\led_task.c + + + list.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\list.c + + + locator.c + 1 + ..\..\..\..\utils\locator.c + + + lwip_task.c + 1 + .\lwip_task.c + + + lwiplib.c + 1 + ..\..\..\..\utils\lwiplib.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + port.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c + + + queue.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\queue.c + + + random.c + 1 + .\random.c + + + spider_task.c + 1 + .\spider_task.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + tasks.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\tasks.c + + + timers.c + 1 + ..\..\..\..\third_party\FreeRTOS\Source\timers.c + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/freertos_demo/freertos_demo_ccs.cmd b/boards/dk-tm4c129x/freertos_demo/freertos_demo_ccs.cmd new file mode 100644 index 0000000..14864ba --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/freertos_demo_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * freertos_demo_ccs.cmd - CCS linker configuration file for freertos_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 4096; diff --git a/boards/dk-tm4c129x/freertos_demo/fs.c b/boards/dk-tm4c129x/freertos_demo/fs.c new file mode 100644 index 0000000..78a86c1 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/fs.c @@ -0,0 +1,236 @@ +//***************************************************************************** +// +// fs.c - File System Processing for lwIP Web Server Apps. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "utils/lwiplib.h" +#include "httpserver_raw/httpd.h" +#include "httpserver_raw/fs.h" +#include "httpserver_raw/fsdata.h" + +//***************************************************************************** +// +// Include the file system data for this application. This file is generated +// by the makefsfile utility, using the following command: +// +// makefsfile -i fs -o htmldata.h -r -h +// +// If any changes are made to the static content of the web pages served by the +// application, this command must be used to regenerate lmi-fsdata.h in order +// for those changes to be picked up by the web server. +// +//***************************************************************************** +#include "htmldata.h" + +//***************************************************************************** +// +// Initialize the file system. +// +//***************************************************************************** +void +fs_init(void) +{ + // + // Nothing special to do for this application. Flash File System only. + // +} + +//***************************************************************************** +// +// File System tick handler. +// +//***************************************************************************** +void +fs_tick(uint32_t ui32TickMS) +{ + // + // Nothing special to do for this application. Flash File System only. + // +} + +//***************************************************************************** +// +// Open a file and return a handle to the file, if found. Otherwise, +// return NULL. +// +//***************************************************************************** +struct fs_file * +fs_open(const char *name) +{ + const struct fsdata_file *psTree; + struct fs_file *psFile = NULL; + + // + // Allocate memory for the file system structure. + // + psFile = mem_malloc(sizeof(struct fs_file)); + if(NULL == psFile) + { + return(NULL); + } + + // + // Initialize the file system tree pointer to the root of the linked list. + // + psTree = FS_ROOT; + + // + // Begin processing the linked list, looking for the requested file name. + // + while(NULL != psTree) + { + // + // Compare the requested file "name" to the file name in the + // current node. + // + if(strncmp(name, (char *)psTree->name, psTree->len) == 0) + { + // + // Fill in the data pointer and length values from the + // linked list node. + // + psFile->data = (char *)psTree->data; + psFile->len = psTree->len; + + // + // For now, we setup the read index to the end of the file, + // indicating that all data has been read. + // + psFile->index = psTree->len; + + // + // We are not using any file system extensions in this + // application, so set the pointer to NULL. + // + psFile->pextension = NULL; + + // + // Exit the loop and return the file system pointer. + // + break; + } + + // + // If we get here, we did not find the file at this node of the linked + // list. Get the next element in the list. + // + psTree = psTree->next; + } + + // + // If we didn't find the file, ptTee will be NULL. Make sure we + // return a NULL pointer if this happens. + // + if(NULL == psTree) + { + mem_free(psFile); + psFile = NULL; + } + + // + // Return the file system pointer. + // + return(psFile); +} + +//***************************************************************************** +// +// Close an opened file designated by the handle. +// +//***************************************************************************** +void +fs_close(struct fs_file *file) +{ + // + // If a Fat file was opened, free its object. + // + if(file->pextension) + { + mem_free(file->pextension); + } + + // + // Free the main file system object. + // + mem_free(file); +} + +//***************************************************************************** +// +// Read the next chunck of data from the file. Return the count of data +// that was read. Return 0 if no data is currently available. Return +// a -1 if at the end of file. +// +//***************************************************************************** +int +fs_read(struct fs_file *file, char *buffer, int count) +{ + int iAvailable; + + // + // Check to see if more data is available. + // + if(file->len == file->index) + { + // + // There is no remaining data. Return a -1 for EOF indication. + // + return(-1); + } + + // + // Determine how much data we can copy. The minimum of the 'count' + // parameter or the available data in the file system buffer. + // + iAvailable = file->len - file->index; + if(iAvailable > count) + { + iAvailable = count; + } + + // + // Copy the data. + // + memcpy(buffer, file->data + iAvailable, iAvailable); + file->index += iAvailable; + + // + // Return the count of data that we copied. + // + return(iAvailable); +} + +//***************************************************************************** +// +// Determine the number of bytes left to read from the file. +// +//***************************************************************************** +int fs_bytes_left(struct fs_file *file) +{ + // + // Return the number of bytes left to be read from this file. + // + return(file->len - file->index); +} diff --git a/boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.axf b/boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.axf new file mode 100644 index 0000000..96a6023 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.axf differ diff --git a/boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.bin b/boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.bin new file mode 100644 index 0000000..d7a1ef9 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/gcc/freertos_demo.bin differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/404.htm b/boards/dk-tm4c129x/freertos_demo/html/404.htm new file mode 100644 index 0000000..bb5af32 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/404.htm @@ -0,0 +1,9 @@ + + + +
      +

      404 - file not found

      +

      Try here instead.

      +
      + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/block.htm b/boards/dk-tm4c129x/freertos_demo/html/block.htm new file mode 100644 index 0000000..341751a --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/block.htm @@ -0,0 +1,27 @@ + + + + + +Tiva™ C Series Family Block Diagram + + + + +
      +

      Tiva C Series TM4C129x Family Block Diagram

      +
      +

      + TM4C129X Block Diagram +

      +

      +

      + + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/family.htm b/boards/dk-tm4c129x/freertos_demo/html/family.htm new file mode 100644 index 0000000..bc2dbb4 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/family.htm @@ -0,0 +1,45 @@ + + + + + + +About Tiva™ C Series + + + + +

      About Tiva C Series MCUs

      +
      + +

      +The Tiva C Series ARM® Cortex™-M MCU family is ideal for a variety of applications, with development and evaluation kits available for industrial needs, communications systems, automotive technologies, and more. Rich analog and digital peripherals for connecting and controlling a wide range of systems and devices make the Tiva C Series an excellent choice for many general-purpose applications and designs. +

      +Furthermore, with over 20 years of ARM architecture behind the part definition and design, the Tiva C Series enables robust on-chip integration for greater system functionality at reduced BOM costs. The Tiva C Series are manufactured in a 65-nm process to stretch the performance vector with over 200 MHz and faster clock rates for outstanding high performance. +

      +Learn more about the Tiva C Series at www.ti.com/tiva-c. +

      + + + + + +
      +
      + +
      +
      + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/favicon.ico b/boards/dk-tm4c129x/freertos_demo/html/favicon.ico new file mode 100644 index 0000000..36469ac Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/favicon.ico differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/footer.htm b/boards/dk-tm4c129x/freertos_demo/html/footer.htm new file mode 100644 index 0000000..7c343ff --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/footer.htm @@ -0,0 +1,38 @@ + + + + +Tiva® TM4C129x Development Kit Footer + + + + + + + + +
      +

      Copyright © 2013-2014 Texas Instruments Incorporated. All rights reserved.

      + diff --git a/boards/dk-tm4c129x/freertos_demo/html/freertos.htm b/boards/dk-tm4c129x/freertos_demo/html/freertos.htm new file mode 100644 index 0000000..adef089 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/freertos.htm @@ -0,0 +1,30 @@ + + + + + +About FreeRTOS™ + + + + + + + + + +

      About FreeRTOS™

      +
      + + + + +
      Developed by Real Time Engineers Ltd., FreeRTOS™ is a market leading Real-time Operating System. With support for multiple architectures and a huge user community, FreeRTOS is reliable and reduces the time to market for embedded developers.
      +

      Highlights:

      +
        +
      • Can be used as a general purpose operating system
      • +
      • Integrated hardware/software solution shortens the time to market and significantly reduces cost
      • +
      +

      For support, visit the Tiva™ C Series Microcontrollers page on the TI forums web site. + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/header.htm b/boards/dk-tm4c129x/freertos_demo/html/header.htm new file mode 100644 index 0000000..52ede56 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/header.htm @@ -0,0 +1,51 @@ + + + + +Tiva™ C Series TM4C129X Development Kit Header + + + + + + + + +
      + + +

      Tiva™ C Series TM4C129X Development Kit

      +

      DK-TM4C129X

      +
      + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/apps.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/apps.jpg new file mode 100644 index 0000000..aa86c97 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/apps.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-communicate-small.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-communicate-small.jpg new file mode 100644 index 0000000..7e5ae02 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-communicate-small.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-connect-small.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-connect-small.jpg new file mode 100644 index 0000000..38f450b Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-connect-small.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-control-small.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-control-small.jpg new file mode 100644 index 0000000..41fd6af Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/c-c-c-control-small.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/cortex.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/cortex.jpg new file mode 100644 index 0000000..abd19d1 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/cortex.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/freertos.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/freertos.jpg new file mode 100644 index 0000000..1eba80f Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/freertos.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/mcu_side-by-side.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/mcu_side-by-side.jpg new file mode 100644 index 0000000..89fa464 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/mcu_side-by-side.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/ti.gif b/boards/dk-tm4c129x/freertos_demo/html/images/ti.gif new file mode 100644 index 0000000..1a23a9b Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/ti.gif differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/ti_logo.gif b/boards/dk-tm4c129x/freertos_demo/html/images/ti_logo.gif new file mode 100644 index 0000000..2e89d74 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/ti_logo.gif differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/tiva.jpg b/boards/dk-tm4c129x/freertos_demo/html/images/tiva.jpg new file mode 100644 index 0000000..cee9030 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/tiva.jpg differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/images/tiva_globe-small.gif b/boards/dk-tm4c129x/freertos_demo/html/images/tiva_globe-small.gif new file mode 100644 index 0000000..6744092 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/html/images/tiva_globe-small.gif differ diff --git a/boards/dk-tm4c129x/freertos_demo/html/index.htm b/boards/dk-tm4c129x/freertos_demo/html/index.htm new file mode 100644 index 0000000..e48cf5c --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/index.htm @@ -0,0 +1,19 @@ + + + + +Tiva™ C Series TM4C129X Development Kit + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/io.ssi b/boards/dk-tm4c129x/freertos_demo/html/io.ssi new file mode 100644 index 0000000..d0c0d32 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/io.ssi @@ -0,0 +1,44 @@ + + + + + +I/O Control + + + +

      I/O Control

      +
      +The controls on this page provide interaction with the FreeRTOS tasks running +on the development board. +
        +
      • LED Toggle Rate +

        +This controls the rate at which the on-board LED toggles. +

        +Current toggle rate: milliseconds. +
        +
        +New toggle rate: + +milliseconds. + +
        +
      • Spider Speed +

        +This controls the rate at which the spiders crawl about the LCD. +

        +Current spider move rate: milliseconds. +
        +
        +New spider move rate: + +milliseconds. + +
        +Note: If there are a large number of spiders alive, it is possible that +decreasing the spider move rate will not make them move any faster (since the +processor is being fully consumed). +
      + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/lwipstat.ssi b/boards/dk-tm4c129x/freertos_demo/html/lwipstat.ssi new file mode 100644 index 0000000..75b37ae --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/lwipstat.ssi @@ -0,0 +1,110 @@ + + + + + + +lwIP Statistics + + + +

      lwIP Statistics

      +
      +Statistics collected by the lwIP stack. The display is automatically updated +every five seconds. +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Packet
      Type
      Packets
      Sent
      Packets
      Received
      Packets
      Dropped
      Checksum
      Errors
      Length
      Errors
      Memory
      Errors
      Routing
      Errors
      Protocol
      Errors
      Options
      Errors
      Other
      Errors
      Link
      ARP
      ICMP
      IP
      TCP
      UDP
      + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/perror.htm b/boards/dk-tm4c129x/freertos_demo/html/perror.htm new file mode 100644 index 0000000..155953c --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/perror.htm @@ -0,0 +1,25 @@ + + + + + +Form Parameter Error + + + +

      I/O Control

      +
      +
      +Parameter Error +

      +Oops - one of the parameters sent to the board was either missing, invalid or +out of range. +

      +Please try again! +

      + + + +
      + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/side.htm b/boards/dk-tm4c129x/freertos_demo/html/side.htm new file mode 100644 index 0000000..46f7d7c --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/side.htm @@ -0,0 +1,33 @@ + + + + +Side + + + +
      + + + diff --git a/boards/dk-tm4c129x/freertos_demo/html/styles.css b/boards/dk-tm4c129x/freertos_demo/html/styles.css new file mode 100644 index 0000000..f85f0df --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/styles.css @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. + */ + +BODY +{ + font-family: Arial; + background-color: white; + margin: 10px; + padding: 0px +} + +BODY.side +{ + font-family: Arial; + background-color: white; + margin: 10px; + padding: 0px +} + +H1 +{ + background-color: white; + color: black; + font-weight: normal; + font-family: Arial; + font-size: 24pt; + text-decoration: none; + text-align: center; + line-height: 50%; +} diff --git a/boards/dk-tm4c129x/freertos_demo/html/ti.htm b/boards/dk-tm4c129x/freertos_demo/html/ti.htm new file mode 100644 index 0000000..8f4ef9e --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/html/ti.htm @@ -0,0 +1,43 @@ + + + + + +About Texas Instruments + + + + + +

      About Texas Instruments

      +
      + +

      Texas Instruments (TI) is +a global analog and digital semiconductor IC design and manufacturing company. In addition to +analog technologies, +digital signal processing (DSP), and +microcontroller (MCU) semiconductors, TI designs and manufactures semiconductor solutions for analog and digital embedded and application-specific processing. +

      +In the microcontroller space, TI offers the broadest range of embedded control products, from the ultra-low-power +MSP430™ MCUs and high-performance +C2000™ real-time controllers, to the 32-bit, general-purpose ARM®-based MCUs of the +Tiva™ C Series line and the +Hercules™ Safety MCUs. +

      +Visit us on the web at www.ti.com. +
      +
      +
      + + + + diff --git a/boards/dk-tm4c129x/freertos_demo/htmldata.h b/boards/dk-tm4c129x/freertos_demo/htmldata.h new file mode 100644 index 0000000..f024f76 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/htmldata.h @@ -0,0 +1,46756 @@ +//*************************************************************************** +// +// File System Image. +// +// This file was automatically generated using the makefsfile utility. +// +//*************************************************************************** + +static const uint8_t data_404_htm[] = +{ + /* /404.htm */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, + 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x62, + 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, + 0x74, 0x65, 0x22, 0x3e, 0x0a, 0x3c, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, 0x3c, 0x68, + 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, + 0x68, 0x31, 0x3e, 0x0a, 0x3c, 0x68, 0x33, 0x3e, + 0x54, 0x72, 0x79, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, + 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, + 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, + 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x3c, + 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, + 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0x0a, +}; + +static const uint8_t data_block_htm[] = +{ + /* /block.htm */ + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, + 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x54, + 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x20, 0x46, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x20, 0x44, 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x0a, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x3e, + 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x0a, 0x20, 0x20, + 0x2e, 0x64, 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3a, 0x31, 0x30, 0x30, 0x25, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x2d, 0x2d, + 0x3e, 0x0a, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, + 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x0a, 0x3c, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x68, + 0x31, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, 0x20, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x54, + 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, 0x78, 0x20, + 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, + 0x67, 0x72, 0x61, 0x6d, 0x3c, 0x2f, 0x68, 0x31, + 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x68, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, + 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x20, + 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, 0x61, 0x67, + 0x72, 0x61, 0x6d, 0x22, 0x20, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3d, 0x22, 0x54, 0x69, 0x76, 0x61, + 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, + 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x44, + 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, + 0x20, 0x3c, 0x70, 0x3e, 0x0a, 0x3c, 0x2f, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x0a, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x0a, + +}; + +static const uint8_t data_connect_htm[] = +{ + /* /connect.htm */ + 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x2e, 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, + 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2c, 0x20, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x2c, 0x20, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x3c, 0x2f, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, + 0x63, 0x73, 0x73, 0x22, 0x3e, 0x0a, 0x3c, 0x21, + 0x2d, 0x2d, 0x0a, 0x20, 0x20, 0x2e, 0x63, 0x63, + 0x63, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x35, 0x25, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x3a, 0x20, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x23, 0x62, 0x6f, 0x6c, 0x64, 0x42, + 0x6c, 0x75, 0x65, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x62, + 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, + 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x30, 0x30, 0x25, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x3a, 0x20, 0x22, 0x61, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, + 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x23, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x52, + 0x65, 0x64, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x72, 0x65, + 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, + 0x3a, 0x20, 0x31, 0x33, 0x35, 0x25, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, + 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, + 0x20, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, + 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x2d, + 0x2d, 0x3e, 0x0a, 0x3c, 0x2f, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x65, + 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x3c, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x68, 0x31, 0x3e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2c, + 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3c, 0x2f, 0x68, + 0x31, 0x3e, 0x0a, 0x3c, 0x68, 0x72, 0x3e, 0x0a, + 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, + 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, + 0x2e, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, + 0x2f, 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x2d, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2d, 0x73, + 0x6d, 0x61, 0x6c, 0x6c, 0x2e, 0x6a, 0x70, 0x67, + 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x63, 0x63, 0x63, 0x22, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, + 0x74, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x73, 0x70, 0x61, + 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f, + 0x6c, 0x64, 0x42, 0x6c, 0x75, 0x65, 0x22, 0x3e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x3c, + 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x62, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x72, + 0x67, 0x65, 0x52, 0x65, 0x64, 0x22, 0x3e, 0x55, + 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, + 0x75, 0x6e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, + 0x65, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, + 0x63, 0x63, 0x22, 0x3e, 0x54, 0x68, 0x65, 0x20, + 0x62, 0x72, 0x65, 0x61, 0x64, 0x74, 0x68, 0x20, + 0x6f, 0x66, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, + 0x65, 0x72, 0x69, 0x70, 0x68, 0x65, 0x72, 0x61, + 0x6c, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x73, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, + 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, + 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, + 0x75, 0x74, 0x20, 0x73, 0x61, 0x63, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x2c, 0x20, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, + 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x6f, + 0x77, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, + 0x65, 0x72, 0x69, 0x70, 0x68, 0x65, 0x72, 0x61, + 0x6c, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x3a, 0x20, 0x45, 0x74, 0x68, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x20, 0x4d, 0x41, 0x43, + 0x20, 0x26, 0x20, 0x50, 0x48, 0x59, 0x2c, 0x20, + 0x43, 0x41, 0x4e, 0x2c, 0x20, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x50, 0x61, + 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x20, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x20, 0x28, 0x45, 0x50, 0x49, 0x29, 0x2c, 0x20, + 0x55, 0x53, 0x42, 0x20, 0x4f, 0x6e, 0x2d, 0x54, + 0x68, 0x65, 0x2d, 0x47, 0x6f, 0x2f, 0x48, 0x6f, + 0x73, 0x74, 0x2f, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x2c, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x20, + 0x53, 0x53, 0x49, 0x2f, 0x53, 0x50, 0x49, 0x2c, + 0x20, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x31, + 0x30, 0x20, 0x49, 0x32, 0x43, 0x73, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x75, 0x70, 0x20, 0x74, 0x6f, + 0x20, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x55, + 0x41, 0x52, 0x54, 0x53, 0x2e, 0x3c, 0x2f, 0x73, + 0x70, 0x61, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x62, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6d, + 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x2d, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x2e, + 0x6a, 0x70, 0x67, 0x22, 0x20, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x3d, 0x22, 0x63, 0x63, 0x63, 0x22, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x42, 0x6c, + 0x75, 0x65, 0x22, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3c, + 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x62, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x72, + 0x67, 0x65, 0x52, 0x65, 0x64, 0x22, 0x3e, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, + 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x73, + 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x22, + 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x63, 0x63, + 0x22, 0x3e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, + 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, + 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2c, + 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, + 0x67, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, + 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, + 0x67, 0x68, 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, + 0x2d, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x20, 0x73, 0x65, 0x63, 0x75, + 0x72, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x75, 0x73, + 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2d, 0x63, + 0x68, 0x69, 0x70, 0x20, 0x68, 0x61, 0x72, 0x64, + 0x77, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, + 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x73, 0x75, 0x69, + 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, + 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x28, 0x54, + 0x69, 0x76, 0x61, 0x57, 0x61, 0x72, 0x65, 0x26, + 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x29, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x73, 0x2c, 0x20, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0x2d, 0x74, + 0x6f, 0x2d, 0x72, 0x75, 0x6e, 0x20, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x54, + 0x69, 0x76, 0x61, 0x20, 0x65, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6b, + 0x69, 0x74, 0x73, 0x2e, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, + 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x74, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, + 0x2d, 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x2d, 0x73, 0x6d, 0x61, + 0x6c, 0x6c, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, + 0x63, 0x63, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, + 0x42, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3c, 0x2f, 0x73, + 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x62, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, + 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x72, 0x67, 0x65, + 0x52, 0x65, 0x64, 0x22, 0x3e, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x63, + 0x72, 0x6f, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, + 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, + 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x62, 0x72, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x63, 0x63, 0x63, 0x22, 0x3e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6e, 0x65, 0x65, + 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x2e, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x2c, + 0x20, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x6e, 0x67, + 0x2c, 0x20, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, + 0x2c, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x73, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x20, 0x61, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x61, 0x73, + 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x34, 0x30, 0x20, + 0x50, 0x57, 0x4d, 0x20, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x77, 0x6f, + 0x20, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x2c, 0x20, 0x74, 0x77, 0x6f, 0x20, + 0x66, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x61, 0x63, + 0x63, 0x75, 0x72, 0x61, 0x74, 0x65, 0x2c, 0x20, + 0x31, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x41, + 0x44, 0x43, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x6e, + 0x2d, 0x63, 0x68, 0x69, 0x70, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x73, 0x2c, 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, + 0x43, 0x20, 0x4d, 0x43, 0x55, 0x73, 0x20, 0x61, + 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, + 0x6c, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x77, 0x6f, + 0x72, 0x6c, 0x64, 0x2e, 0x3c, 0x2f, 0x73, 0x70, + 0x61, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x2f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_family_htm[] = +{ + /* /family.htm */ + 0x2f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x2e, + 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, + 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x50, 0x55, + 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, 0x2f, + 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, + 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, + 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, + 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x41, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x54, 0x69, 0x76, + 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x0a, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, + 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, + 0x3e, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x0a, 0x20, + 0x20, 0x2e, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x32, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x46, + 0x46, 0x46, 0x46, 0x46, 0x46, 0x0a, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x2e, 0x61, 0x70, 0x70, + 0x73, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x30, 0x30, + 0x25, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x2e, 0x74, 0x69, 0x76, 0x61, 0x47, 0x6c, + 0x6f, 0x62, 0x65, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x32, + 0x30, 0x25, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x0a, + 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x2f, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x3c, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x68, 0x31, + 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x54, + 0x69, 0x76, 0x61, 0x20, 0x43, 0x20, 0x53, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x20, 0x4d, 0x43, 0x55, + 0x73, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, 0x3c, + 0x68, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x2e, 0x2f, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x73, 0x2f, 0x74, 0x69, 0x76, 0x61, 0x5f, + 0x67, 0x6c, 0x6f, 0x62, 0x65, 0x2d, 0x73, 0x6d, + 0x61, 0x6c, 0x6c, 0x2e, 0x67, 0x69, 0x66, 0x22, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, + 0x74, 0x69, 0x76, 0x61, 0x47, 0x6c, 0x6f, 0x62, + 0x65, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x3e, 0x0a, 0x3c, 0x70, 0x3e, 0x0a, 0x54, 0x68, + 0x65, 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, + 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, + 0x41, 0x52, 0x4d, 0x26, 0x72, 0x65, 0x67, 0x3b, + 0x20, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x26, + 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x2d, 0x4d, + 0x20, 0x4d, 0x43, 0x55, 0x20, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x69, + 0x64, 0x65, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, + 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x6b, 0x69, 0x74, 0x73, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, + 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x2c, + 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2c, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x6f, 0x74, + 0x69, 0x76, 0x65, 0x20, 0x74, 0x65, 0x63, 0x68, + 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, + 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x6f, + 0x72, 0x65, 0x2e, 0x20, 0x52, 0x69, 0x63, 0x68, + 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x54, 0x69, 0x76, 0x61, + 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x63, + 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x70, + 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x2e, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, + 0x3e, 0x0a, 0x46, 0x75, 0x72, 0x74, 0x68, 0x65, + 0x72, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x32, 0x30, 0x20, 0x79, 0x65, 0x61, 0x72, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x41, 0x52, 0x4d, + 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x62, 0x65, + 0x68, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x73, + 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, 0x20, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x72, + 0x6f, 0x62, 0x75, 0x73, 0x74, 0x20, 0x6f, 0x6e, + 0x2d, 0x63, 0x68, 0x69, 0x70, 0x20, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x20, 0x61, 0x74, 0x20, 0x72, 0x65, + 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x42, 0x4f, + 0x4d, 0x20, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x2e, + 0x20, 0x54, 0x68, 0x65, 0x20, 0x54, 0x69, 0x76, + 0x61, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, + 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, + 0x20, 0x36, 0x35, 0x2d, 0x6e, 0x6d, 0x20, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, + 0x6f, 0x20, 0x73, 0x74, 0x72, 0x65, 0x74, 0x63, + 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, + 0x65, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x76, + 0x65, 0x72, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4d, + 0x48, 0x7a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, + 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6c, + 0x6f, 0x63, 0x6b, 0x20, 0x72, 0x61, 0x74, 0x65, + 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6f, 0x75, + 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x70, + 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, + 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x4c, 0x65, 0x61, + 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, 0x43, + 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, + 0x61, 0x74, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x2d, 0x63, 0x22, 0x3e, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x74, 0x69, 0x76, 0x61, 0x2d, 0x63, 0x3c, + 0x2f, 0x61, 0x3e, 0x2e, 0x0a, 0x3c, 0x2f, 0x70, + 0x3e, 0x0a, 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x22, 0x38, 0x30, 0x25, 0x22, 0x20, 0x62, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, + 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x31, 0x22, 0x20, + 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, 0x63, + 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x31, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6d, 0x67, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x61, + 0x70, 0x70, 0x73, 0x2e, 0x6a, 0x70, 0x67, 0x22, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, + 0x61, 0x70, 0x70, 0x73, 0x22, 0x3e, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x62, 0x72, + 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, + 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x3e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0a, + 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, + +}; + +static const uint8_t data_favicon_ico[] = +{ + /* /favicon.ico */ + 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, + 0x2e, 0x69, 0x63, 0x6f, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x10, 0x10, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x01, + 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x05, + 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x07, + 0x77, 0x70, 0x07, 0x78, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x77, 0x80, 0x70, 0x00, 0x70, + 0x00, 0x00, 0x70, 0x07, 0x00, 0x07, 0x07, 0x00, + 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x07, 0x70, 0x07, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x70, 0x08, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x77, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8f, + 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x0f, + 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0xe0, 0x03, + 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, + 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xf0, 0x0f, + 0x00, 0x00, 0xf0, 0x4f, 0x00, 0x00, 0xf0, 0xff, + 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0xc0, 0xdc, + 0xc0, 0x00, 0xf0, 0xca, 0xa6, 0x00, 0xd4, 0xf0, + 0xff, 0x00, 0xb1, 0xe2, 0xff, 0x00, 0x8e, 0xd4, + 0xff, 0x00, 0x6b, 0xc6, 0xff, 0x00, 0x48, 0xb8, + 0xff, 0x00, 0x25, 0xaa, 0xff, 0x00, 0x00, 0xaa, + 0xff, 0x00, 0x00, 0x92, 0xdc, 0x00, 0x00, 0x7a, + 0xb9, 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0x4a, + 0x73, 0x00, 0x00, 0x32, 0x50, 0x00, 0xd4, 0xe3, + 0xff, 0x00, 0xb1, 0xc7, 0xff, 0x00, 0x8e, 0xab, + 0xff, 0x00, 0x6b, 0x8f, 0xff, 0x00, 0x48, 0x73, + 0xff, 0x00, 0x25, 0x57, 0xff, 0x00, 0x00, 0x55, + 0xff, 0x00, 0x00, 0x49, 0xdc, 0x00, 0x00, 0x3d, + 0xb9, 0x00, 0x00, 0x31, 0x96, 0x00, 0x00, 0x25, + 0x73, 0x00, 0x00, 0x19, 0x50, 0x00, 0xd4, 0xd4, + 0xff, 0x00, 0xb1, 0xb1, 0xff, 0x00, 0x8e, 0x8e, + 0xff, 0x00, 0x6b, 0x6b, 0xff, 0x00, 0x48, 0x48, + 0xff, 0x00, 0x25, 0x25, 0xff, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, + 0xb9, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x50, 0x00, 0xe3, 0xd4, + 0xff, 0x00, 0xc7, 0xb1, 0xff, 0x00, 0xab, 0x8e, + 0xff, 0x00, 0x8f, 0x6b, 0xff, 0x00, 0x73, 0x48, + 0xff, 0x00, 0x57, 0x25, 0xff, 0x00, 0x55, 0x00, + 0xff, 0x00, 0x49, 0x00, 0xdc, 0x00, 0x3d, 0x00, + 0xb9, 0x00, 0x31, 0x00, 0x96, 0x00, 0x25, 0x00, + 0x73, 0x00, 0x19, 0x00, 0x50, 0x00, 0xf0, 0xd4, + 0xff, 0x00, 0xe2, 0xb1, 0xff, 0x00, 0xd4, 0x8e, + 0xff, 0x00, 0xc6, 0x6b, 0xff, 0x00, 0xb8, 0x48, + 0xff, 0x00, 0xaa, 0x25, 0xff, 0x00, 0xaa, 0x00, + 0xff, 0x00, 0x92, 0x00, 0xdc, 0x00, 0x7a, 0x00, + 0xb9, 0x00, 0x62, 0x00, 0x96, 0x00, 0x4a, 0x00, + 0x73, 0x00, 0x32, 0x00, 0x50, 0x00, 0xff, 0xd4, + 0xff, 0x00, 0xff, 0xb1, 0xff, 0x00, 0xff, 0x8e, + 0xff, 0x00, 0xff, 0x6b, 0xff, 0x00, 0xff, 0x48, + 0xff, 0x00, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xdc, 0x00, 0xdc, 0x00, 0xb9, 0x00, + 0xb9, 0x00, 0x96, 0x00, 0x96, 0x00, 0x73, 0x00, + 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0xff, 0xd4, + 0xf0, 0x00, 0xff, 0xb1, 0xe2, 0x00, 0xff, 0x8e, + 0xd4, 0x00, 0xff, 0x6b, 0xc6, 0x00, 0xff, 0x48, + 0xb8, 0x00, 0xff, 0x25, 0xaa, 0x00, 0xff, 0x00, + 0xaa, 0x00, 0xdc, 0x00, 0x92, 0x00, 0xb9, 0x00, + 0x7a, 0x00, 0x96, 0x00, 0x62, 0x00, 0x73, 0x00, + 0x4a, 0x00, 0x50, 0x00, 0x32, 0x00, 0xff, 0xd4, + 0xe3, 0x00, 0xff, 0xb1, 0xc7, 0x00, 0xff, 0x8e, + 0xab, 0x00, 0xff, 0x6b, 0x8f, 0x00, 0xff, 0x48, + 0x73, 0x00, 0xff, 0x25, 0x57, 0x00, 0xff, 0x00, + 0x55, 0x00, 0xdc, 0x00, 0x49, 0x00, 0xb9, 0x00, + 0x3d, 0x00, 0x96, 0x00, 0x31, 0x00, 0x73, 0x00, + 0x25, 0x00, 0x50, 0x00, 0x19, 0x00, 0xff, 0xd4, + 0xd4, 0x00, 0xff, 0xb1, 0xb1, 0x00, 0xff, 0x8e, + 0x8e, 0x00, 0xff, 0x6b, 0x6b, 0x00, 0xff, 0x48, + 0x48, 0x00, 0xff, 0x25, 0x25, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xb9, 0x00, + 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x73, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xff, 0xe3, + 0xd4, 0x00, 0xff, 0xc7, 0xb1, 0x00, 0xff, 0xab, + 0x8e, 0x00, 0xff, 0x8f, 0x6b, 0x00, 0xff, 0x73, + 0x48, 0x00, 0xff, 0x57, 0x25, 0x00, 0xff, 0x55, + 0x00, 0x00, 0xdc, 0x49, 0x00, 0x00, 0xb9, 0x3d, + 0x00, 0x00, 0x96, 0x31, 0x00, 0x00, 0x73, 0x25, + 0x00, 0x00, 0x50, 0x19, 0x00, 0x00, 0xff, 0xf0, + 0xd4, 0x00, 0xff, 0xe2, 0xb1, 0x00, 0xff, 0xd4, + 0x8e, 0x00, 0xff, 0xc6, 0x6b, 0x00, 0xff, 0xb8, + 0x48, 0x00, 0xff, 0xaa, 0x25, 0x00, 0xff, 0xaa, + 0x00, 0x00, 0xdc, 0x92, 0x00, 0x00, 0xb9, 0x7a, + 0x00, 0x00, 0x96, 0x62, 0x00, 0x00, 0x73, 0x4a, + 0x00, 0x00, 0x50, 0x32, 0x00, 0x00, 0xff, 0xff, + 0xd4, 0x00, 0xff, 0xff, 0xb1, 0x00, 0xff, 0xff, + 0x8e, 0x00, 0xff, 0xff, 0x6b, 0x00, 0xff, 0xff, + 0x48, 0x00, 0xff, 0xff, 0x25, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xdc, 0xdc, 0x00, 0x00, 0xb9, 0xb9, + 0x00, 0x00, 0x96, 0x96, 0x00, 0x00, 0x73, 0x73, + 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, 0xf0, 0xff, + 0xd4, 0x00, 0xe2, 0xff, 0xb1, 0x00, 0xd4, 0xff, + 0x8e, 0x00, 0xc6, 0xff, 0x6b, 0x00, 0xb8, 0xff, + 0x48, 0x00, 0xaa, 0xff, 0x25, 0x00, 0xaa, 0xff, + 0x00, 0x00, 0x92, 0xdc, 0x00, 0x00, 0x7a, 0xb9, + 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0x4a, 0x73, + 0x00, 0x00, 0x32, 0x50, 0x00, 0x00, 0xe3, 0xff, + 0xd4, 0x00, 0xc7, 0xff, 0xb1, 0x00, 0xab, 0xff, + 0x8e, 0x00, 0x8f, 0xff, 0x6b, 0x00, 0x73, 0xff, + 0x48, 0x00, 0x57, 0xff, 0x25, 0x00, 0x55, 0xff, + 0x00, 0x00, 0x49, 0xdc, 0x00, 0x00, 0x3d, 0xb9, + 0x00, 0x00, 0x31, 0x96, 0x00, 0x00, 0x25, 0x73, + 0x00, 0x00, 0x19, 0x50, 0x00, 0x00, 0xd4, 0xff, + 0xd4, 0x00, 0xb1, 0xff, 0xb1, 0x00, 0x8e, 0xff, + 0x8e, 0x00, 0x6b, 0xff, 0x6b, 0x00, 0x48, 0xff, + 0x48, 0x00, 0x25, 0xff, 0x25, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xb9, + 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x73, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0xd4, 0xff, + 0xe3, 0x00, 0xb1, 0xff, 0xc7, 0x00, 0x8e, 0xff, + 0xab, 0x00, 0x6b, 0xff, 0x8f, 0x00, 0x48, 0xff, + 0x73, 0x00, 0x25, 0xff, 0x57, 0x00, 0x00, 0xff, + 0x55, 0x00, 0x00, 0xdc, 0x49, 0x00, 0x00, 0xb9, + 0x3d, 0x00, 0x00, 0x96, 0x31, 0x00, 0x00, 0x73, + 0x25, 0x00, 0x00, 0x50, 0x19, 0x00, 0xd4, 0xff, + 0xf0, 0x00, 0xb1, 0xff, 0xe2, 0x00, 0x8e, 0xff, + 0xd4, 0x00, 0x6b, 0xff, 0xc6, 0x00, 0x48, 0xff, + 0xb8, 0x00, 0x25, 0xff, 0xaa, 0x00, 0x00, 0xff, + 0xaa, 0x00, 0x00, 0xdc, 0x92, 0x00, 0x00, 0xb9, + 0x7a, 0x00, 0x00, 0x96, 0x62, 0x00, 0x00, 0x73, + 0x4a, 0x00, 0x00, 0x50, 0x32, 0x00, 0xd4, 0xff, + 0xff, 0x00, 0xb1, 0xff, 0xff, 0x00, 0x8e, 0xff, + 0xff, 0x00, 0x6b, 0xff, 0xff, 0x00, 0x48, 0xff, + 0xff, 0x00, 0x25, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xdc, 0xdc, 0x00, 0x00, 0xb9, + 0xb9, 0x00, 0x00, 0x96, 0x96, 0x00, 0x00, 0x73, + 0x73, 0x00, 0x00, 0x50, 0x50, 0x00, 0xf2, 0xf2, + 0xf2, 0x00, 0xe6, 0xe6, 0xe6, 0x00, 0xda, 0xda, + 0xda, 0x00, 0xce, 0xce, 0xce, 0x00, 0xc2, 0xc2, + 0xc2, 0x00, 0xb6, 0xb6, 0xb6, 0x00, 0xaa, 0xaa, + 0xaa, 0x00, 0x9e, 0x9e, 0x9e, 0x00, 0x92, 0x92, + 0x92, 0x00, 0x86, 0x86, 0x86, 0x00, 0x7a, 0x7a, + 0x7a, 0x00, 0x6e, 0x6e, 0x6e, 0x00, 0x62, 0x62, + 0x62, 0x00, 0x56, 0x56, 0x56, 0x00, 0x4a, 0x4a, + 0x4a, 0x00, 0x3e, 0x3e, 0x3e, 0x00, 0x32, 0x32, + 0x32, 0x00, 0x26, 0x26, 0x26, 0x00, 0x1a, 0x1a, + 0x1a, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0xf0, 0xfb, + 0xff, 0x00, 0xa4, 0xa0, 0xa0, 0x00, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x00, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf7, 0xf7, 0xf7, 0xf7, 0x00, 0x00, 0xe6, + 0xe6, 0xf8, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xf7, + 0xf7, 0xe6, 0xf8, 0x00, 0xf7, 0x00, 0x00, 0x00, + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x00, 0xe6, 0x00, 0x00, 0x00, 0xf7, 0x00, 0xf7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x00, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0x00, + 0x00, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0x00, + 0x00, 0xf8, 0xe6, 0x00, 0x00, 0xf7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8f, + 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xfe, 0x0f, + 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xe0, 0x03, + 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, + 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xf0, 0x0f, + 0xff, 0xff, 0xf0, 0x4f, 0xff, 0xff, 0xf0, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, +}; + +static const uint8_t data_footer_htm[] = +{ + /* /footer.htm */ + 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, + 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, + 0x45, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, + 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, + 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, + 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x3e, 0x0a, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, + 0x2d, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, + 0x32, 0x30, 0x31, 0x33, 0x2d, 0x32, 0x30, 0x31, + 0x34, 0x20, 0x54, 0x65, 0x78, 0x61, 0x73, 0x20, + 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x20, 0x49, 0x6e, 0x63, 0x6f, + 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x20, + 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, + 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, + 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63, + 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x49, + 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, 0x2d, + 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x54, 0x69, 0x76, 0x61, 0x26, + 0x72, 0x65, 0x67, 0x3b, 0x20, 0x54, 0x4d, 0x34, + 0x43, 0x31, 0x32, 0x39, 0x78, 0x20, 0x44, 0x65, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x4b, 0x69, 0x74, 0x20, 0x46, 0x6f, + 0x6f, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, + 0x63, 0x73, 0x73, 0x22, 0x3e, 0x0a, 0x62, 0x6f, + 0x64, 0x79, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, + 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, + 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, + 0x6e, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x70, 0x78, + 0x0a, 0x7d, 0x0a, 0x68, 0x31, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x3a, 0x20, 0x23, 0x37, 0x43, 0x37, 0x33, 0x36, + 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, 0x61, 0x6c, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, + 0x31, 0x32, 0x70, 0x74, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x69, 0x74, 0x61, + 0x6c, 0x69, 0x63, 0x3b, 0x0a, 0x7d, 0x0a, 0x68, + 0x32, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x62, 0x6c, + 0x61, 0x63, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, + 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, + 0x3a, 0x20, 0x31, 0x32, 0x70, 0x74, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3a, 0x20, 0x62, + 0x6f, 0x6c, 0x64, 0x3b, 0x0a, 0x7d, 0x0a, 0x3c, + 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, + 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, + 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, + 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, + 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0x0a, 0x3c, + 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x74, + 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x3c, 0x68, + 0x31, 0x3e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x26, 0x63, 0x6f, 0x70, + 0x79, 0x3b, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, + 0x72, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_freertos_htm[] = +{ + /* /freertos.htm */ + 0x2f, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, + 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, + 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, + 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, + 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, + 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, + 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3b, 0x63, 0x68, 0x61, 0x72, 0x73, + 0x65, 0x74, 0x3d, 0x49, 0x53, 0x4f, 0x2d, 0x38, + 0x38, 0x36, 0x39, 0x2d, 0x31, 0x22, 0x3e, 0x0d, + 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2e, 0x2f, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, + 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, + 0x65, 0x74, 0x22, 0x20, 0x6d, 0x65, 0x64, 0x69, + 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x41, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, + 0x4f, 0x53, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x3b, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, + 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, + 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x37, 0x30, + 0x25, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x20, 0x63, 0x65, 0x6c, + 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, + 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, + 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x3c, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x64, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x37, 0x30, + 0x25, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, + 0x68, 0x31, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x3c, 0x2f, 0x64, + 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x22, 0x37, 0x30, 0x25, 0x22, 0x3e, 0x3c, 0x64, + 0x69, 0x76, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x73, 0x2f, 0x66, 0x72, 0x65, + 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6a, 0x70, + 0x67, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0d, + 0x0a, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x72, 0x3e, 0x0d, + 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, + 0x30, 0x30, 0x25, 0x22, 0x20, 0x62, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, + 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, 0x63, + 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, + 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x74, 0x72, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x22, 0x39, 0x31, 0x25, 0x22, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, + 0x70, 0x22, 0x3e, 0x44, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x52, 0x65, 0x61, 0x6c, 0x20, 0x54, 0x69, 0x6d, + 0x65, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, + 0x65, 0x72, 0x73, 0x20, 0x4c, 0x74, 0x64, 0x2e, + 0x2c, 0x20, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, + 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, + 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, + 0x65, 0x52, 0x54, 0x4f, 0x53, 0x3c, 0x2f, 0x61, + 0x3e, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, + 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x61, + 0x72, 0x6b, 0x65, 0x74, 0x20, 0x6c, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x65, 0x61, + 0x6c, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, + 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x73, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x68, + 0x75, 0x67, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x2c, 0x20, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x20, 0x69, 0x73, 0x20, + 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x64, + 0x75, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6d, 0x62, 0x65, + 0x64, 0x64, 0x65, 0x64, 0x20, 0x64, 0x65, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x2e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0d, 0x0a, + 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, + 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x65, 0x6d, + 0x3e, 0x3c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, + 0x3e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x73, 0x3a, 0x3c, 0x2f, 0x73, 0x74, + 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x65, + 0x6d, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, + 0x3c, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x3c, 0x6c, 0x69, 0x3e, 0x43, 0x61, 0x6e, 0x20, + 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, + 0x61, 0x73, 0x20, 0x61, 0x20, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x6c, 0x20, 0x70, 0x75, 0x72, + 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x3c, 0x2f, 0x6c, + 0x69, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x6c, + 0x69, 0x3e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x68, 0x61, 0x72, + 0x64, 0x77, 0x61, 0x72, 0x65, 0x2f, 0x73, 0x6f, + 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x6e, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x72, 0x65, + 0x64, 0x75, 0x63, 0x65, 0x73, 0x20, 0x63, 0x6f, + 0x73, 0x74, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0d, + 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, + 0x3c, 0x70, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, + 0x76, 0x69, 0x73, 0x69, 0x74, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, + 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x65, 0x32, 0x65, 0x2e, 0x74, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6d, 0x69, 0x63, + 0x72, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x2f, 0x74, 0x69, + 0x76, 0x61, 0x5f, 0x61, 0x72, 0x6d, 0x2f, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x61, + 0x73, 0x70, 0x78, 0x22, 0x3e, 0x20, 0x54, 0x69, + 0x76, 0x61, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x3b, 0x20, 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x20, 0x4d, 0x69, 0x63, 0x72, 0x6f, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, + 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x54, 0x49, 0x20, 0x66, + 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x20, 0x77, 0x65, + 0x62, 0x20, 0x73, 0x69, 0x74, 0x65, 0x2e, 0x0d, + 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, + 0x3e, 0x0d, 0x0a, +}; + +static const uint8_t data_header_htm[] = +{ + /* /header.htm */ + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, + 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x54, 0x69, 0x76, 0x61, + 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, + 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x20, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, + 0x58, 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, + 0x74, 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x0a, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x3e, + 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x20, + 0x41, 0x72, 0x69, 0x61, 0x6c, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x68, 0x69, 0x74, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x31, 0x30, + 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, + 0x30, 0x70, 0x78, 0x0a, 0x7d, 0x0a, 0x68, 0x31, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, + 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, + 0x20, 0x23, 0x37, 0x43, 0x37, 0x33, 0x36, 0x39, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x3a, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x3a, 0x20, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, + 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, + 0x34, 0x70, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, 0x63, + 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x3a, 0x20, 0x35, 0x30, 0x25, + 0x3b, 0x0a, 0x7d, 0x0a, 0x68, 0x32, 0x0a, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x68, + 0x69, 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x37, 0x43, 0x37, 0x33, 0x36, 0x39, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x20, + 0x41, 0x72, 0x69, 0x61, 0x6c, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, + 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x32, 0x32, 0x70, + 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6e, + 0x6f, 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3a, 0x20, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x6c, 0x69, + 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3a, 0x20, 0x35, 0x30, 0x25, 0x3b, 0x0a, + 0x7d, 0x0a, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, + 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, + 0x31, 0x30, 0x30, 0x25, 0x22, 0x20, 0x62, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, + 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, + 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, + 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, + 0x3e, 0x0a, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x20, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x0a, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x69, 0x5f, + 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x67, 0x69, 0x66, + 0x22, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x31, + 0x3e, 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x54, 0x4d, + 0x34, 0x43, 0x31, 0x32, 0x39, 0x58, 0x20, 0x44, + 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x20, 0x4b, 0x69, 0x74, 0x3c, 0x2f, + 0x68, 0x31, 0x3e, 0x0a, 0x3c, 0x68, 0x32, 0x3e, + 0x44, 0x4b, 0x2d, 0x54, 0x4d, 0x34, 0x43, 0x31, + 0x32, 0x39, 0x58, 0x3c, 0x2f, 0x68, 0x32, 0x3e, + 0x0a, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, + 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_images_apps_jpg[] = +{ + /* /images/apps.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2e, 0x6a, 0x70, 0x67, + 0x00, + 0xff, 0xd8, 0xff, 0xe1, 0x00, 0x18, 0x45, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2a, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xff, + 0xe1, 0x03, 0xb4, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, + 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, + 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, + 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, + 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, + 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, + 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, + 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x20, 0x35, 0x2e, 0x30, 0x2d, 0x63, 0x30, + 0x36, 0x30, 0x20, 0x36, 0x31, 0x2e, 0x31, 0x33, + 0x34, 0x37, 0x37, 0x37, 0x2c, 0x20, 0x32, 0x30, + 0x31, 0x30, 0x2f, 0x30, 0x32, 0x2f, 0x31, 0x32, + 0x2d, 0x31, 0x37, 0x3a, 0x33, 0x32, 0x3a, 0x30, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, + 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, + 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, + 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, + 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, + 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, + 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, + 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, + 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, + 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, + 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x37, + 0x38, 0x46, 0x46, 0x33, 0x45, 0x35, 0x32, 0x36, + 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, 0x39, 0x38, + 0x36, 0x34, 0x39, 0x31, 0x39, 0x45, 0x43, 0x44, + 0x30, 0x35, 0x30, 0x42, 0x36, 0x39, 0x22, 0x20, + 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, + 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, + 0x64, 0x3a, 0x37, 0x37, 0x38, 0x46, 0x46, 0x33, + 0x45, 0x36, 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, + 0x45, 0x33, 0x39, 0x38, 0x36, 0x34, 0x39, 0x31, + 0x39, 0x45, 0x43, 0x44, 0x30, 0x35, 0x30, 0x42, + 0x36, 0x39, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, + 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, + 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x53, 0x35, + 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, + 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, + 0x75, 0x75, 0x69, 0x64, 0x3a, 0x66, 0x61, 0x66, + 0x35, 0x62, 0x64, 0x64, 0x35, 0x2d, 0x62, 0x61, + 0x33, 0x64, 0x2d, 0x31, 0x31, 0x64, 0x61, 0x2d, + 0x61, 0x64, 0x33, 0x31, 0x2d, 0x64, 0x33, 0x33, + 0x64, 0x37, 0x35, 0x31, 0x38, 0x32, 0x66, 0x31, + 0x62, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, + 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, + 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x37, 0x38, + 0x46, 0x46, 0x33, 0x45, 0x34, 0x32, 0x36, 0x44, + 0x44, 0x31, 0x31, 0x45, 0x33, 0x39, 0x38, 0x36, + 0x34, 0x39, 0x31, 0x39, 0x45, 0x43, 0x44, 0x30, + 0x35, 0x30, 0x42, 0x36, 0x39, 0x22, 0x2f, 0x3e, + 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x3e, + 0x48, 0x61, 0x75, 0x67, 0x6c, 0x69, 0x65, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x3e, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, + 0x3e, 0x4a, 0x6f, 0x65, 0x3c, 0x2f, 0x72, 0x64, + 0x66, 0x3a, 0x6c, 0x69, 0x3e, 0x20, 0x3c, 0x2f, + 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, + 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x3e, 0x20, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, + 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xff, 0xed, 0x00, + 0x48, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, + 0x6f, 0x70, 0x20, 0x33, 0x2e, 0x30, 0x00, 0x38, + 0x42, 0x49, 0x4d, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x1c, 0x01, 0x5a, 0x00, 0x03, + 0x1b, 0x25, 0x47, 0x1c, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x00, 0x38, 0x42, 0x49, 0x4d, 0x04, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfc, + 0xe1, 0x1f, 0x89, 0xc8, 0xb7, 0xc9, 0x78, 0x2f, + 0x34, 0x62, 0x34, 0x07, 0x58, 0x77, 0xeb, 0xff, + 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, + 0xdb, 0x00, 0x84, 0x00, 0x0c, 0x08, 0x08, 0x08, + 0x09, 0x08, 0x0c, 0x09, 0x09, 0x0c, 0x11, 0x0b, + 0x0a, 0x0b, 0x11, 0x15, 0x0f, 0x0c, 0x0c, 0x0f, + 0x15, 0x18, 0x13, 0x13, 0x15, 0x13, 0x13, 0x18, + 0x17, 0x12, 0x14, 0x14, 0x14, 0x14, 0x12, 0x17, + 0x17, 0x1b, 0x1c, 0x1e, 0x1c, 0x1b, 0x17, 0x24, + 0x24, 0x27, 0x27, 0x24, 0x24, 0x35, 0x33, 0x33, + 0x33, 0x35, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x01, 0x0d, 0x0b, 0x0b, + 0x0d, 0x0e, 0x0d, 0x10, 0x0e, 0x0e, 0x10, 0x14, + 0x0e, 0x0f, 0x0e, 0x14, 0x14, 0x10, 0x11, 0x11, + 0x10, 0x14, 0x1d, 0x14, 0x14, 0x15, 0x14, 0x14, + 0x1d, 0x25, 0x1a, 0x17, 0x17, 0x17, 0x17, 0x1a, + 0x25, 0x20, 0x23, 0x1e, 0x1e, 0x1e, 0x23, 0x20, + 0x28, 0x28, 0x25, 0x25, 0x28, 0x28, 0x32, 0x32, + 0x30, 0x32, 0x32, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x02, 0x54, 0x05, 0x00, 0x03, 0x01, + 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, + 0xff, 0xc4, 0x00, 0xba, 0x00, 0x01, 0x00, 0x02, + 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, + 0x04, 0x05, 0x07, 0x03, 0x02, 0x08, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x10, 0x00, + 0x01, 0x03, 0x03, 0x01, 0x03, 0x05, 0x09, 0x0d, + 0x06, 0x06, 0x02, 0x02, 0x02, 0x01, 0x05, 0x01, + 0x00, 0x02, 0x03, 0x11, 0x04, 0x05, 0x06, 0x21, + 0x31, 0x12, 0x41, 0x51, 0x91, 0x13, 0x53, 0x61, + 0x71, 0xd1, 0x22, 0x14, 0x54, 0x15, 0x16, 0x07, + 0x81, 0xa1, 0xb1, 0x32, 0x52, 0x72, 0x63, 0x93, + 0xa3, 0x35, 0x26, 0x36, 0x17, 0x42, 0xb2, 0x23, + 0x33, 0x73, 0xb3, 0xf0, 0xc1, 0xe1, 0x62, 0x24, + 0x34, 0x92, 0x43, 0x82, 0x25, 0xf1, 0x44, 0xc2, + 0x64, 0xa2, 0x83, 0x84, 0x55, 0x11, 0x01, 0x00, + 0x02, 0x01, 0x01, 0x05, 0x05, 0x06, 0x04, 0x04, + 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x11, 0x02, 0x03, 0x21, 0x31, 0x41, 0x51, 0x61, + 0xf0, 0x81, 0xa1, 0x12, 0x04, 0x71, 0x91, 0xb1, + 0xc1, 0xd1, 0x13, 0xe1, 0x22, 0x32, 0x05, 0x52, + 0x62, 0x23, 0x53, 0x42, 0x82, 0xa2, 0xd2, 0x93, + 0x14, 0xf1, 0xe2, 0x15, 0xff, 0xda, 0x00, 0x0c, + 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, + 0x3f, 0x00, 0xea, 0xa8, 0x88, 0x80, 0xaa, 0xba, + 0xb6, 0xea, 0xf1, 0x97, 0x96, 0xb6, 0xb6, 0xf2, + 0x3a, 0x31, 0x2b, 0x6b, 0xe2, 0xb8, 0xb4, 0x97, + 0x17, 0x53, 0x69, 0x05, 0x5a, 0x95, 0x4f, 0x55, + 0xfd, 0xf5, 0x8f, 0xef, 0x0f, 0xee, 0x04, 0x18, + 0xfe, 0xaf, 0xea, 0x8e, 0xdd, 0xdf, 0x5e, 0xef, + 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, + 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, + 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, + 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, + 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, + 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, + 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, + 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, + 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, + 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, + 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, + 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, + 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, + 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, + 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, + 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, + 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, + 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, + 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, + 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, + 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, + 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, + 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, + 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, + 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, + 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, + 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, + 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, 0x1a, 0xa7, + 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, 0x80, 0xd5, + 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, 0x73, 0x44, + 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, + 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, + 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, + 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, + 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, + 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, + 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, + 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, + 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, + 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, + 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, + 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, + 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, + 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, + 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, + 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, + 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, + 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, + 0xd1, 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, + 0xd7, 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, + 0xbe, 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, + 0x40, 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, + 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, + 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, + 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, + 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, + 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, + 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, + 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, 0x1a, + 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, 0x80, + 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, 0x73, + 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, 0xdf, + 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, + 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, + 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, + 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, + 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, + 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, + 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, + 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, + 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, + 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, + 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, + 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, + 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, + 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, + 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, + 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, + 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, + 0x5c, 0xd1, 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, + 0x77, 0xd7, 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, + 0xbb, 0xbe, 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, + 0xcf, 0x40, 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, + 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, + 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, + 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, + 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, + 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, + 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, + 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, + 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, + 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, + 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, + 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, + 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, + 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, + 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, + 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, + 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, + 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, + 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, + 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, + 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, + 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, + 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, + 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, + 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, + 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, + 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, + 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, + 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, 0x1a, 0xa7, + 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, 0x80, 0xd5, + 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, 0x73, 0x44, + 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, + 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, + 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, + 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, + 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, + 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, + 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, + 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, + 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, + 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, + 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, + 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, + 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, + 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, + 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, + 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, + 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, + 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, + 0xd1, 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, + 0xd7, 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, + 0xbe, 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, + 0x40, 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, + 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, + 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, + 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, + 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, + 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, + 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, + 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, 0x1a, + 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, 0x80, + 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, 0x73, + 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, 0xdf, + 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, + 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, + 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, + 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, + 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, + 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, + 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, + 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, + 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, + 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, + 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, + 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, + 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, + 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, + 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, + 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, + 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, + 0x5c, 0xd1, 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, + 0x77, 0xd7, 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, + 0xbb, 0xbe, 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, + 0xcf, 0x40, 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, + 0x0a, 0x7a, 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, + 0x78, 0x55, 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, + 0x7b, 0x77, 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, + 0x53, 0xdb, 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, + 0x41, 0x4c, 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, + 0xee, 0xf0, 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, + 0xaf, 0x77, 0x85, 0x5c, 0xd1, 0x05, 0x33, 0xd0, + 0x1a, 0xa7, 0xb7, 0x77, 0xd7, 0xbb, 0xc2, 0x9e, + 0x80, 0xd5, 0x3d, 0xbb, 0xbe, 0xbd, 0xde, 0x15, + 0x73, 0x44, 0x14, 0xcf, 0x40, 0x6a, 0x9e, 0xdd, + 0xdf, 0x5e, 0xef, 0x0a, 0x7a, 0x03, 0x54, 0xf6, + 0xee, 0xfa, 0xf7, 0x78, 0x55, 0xcd, 0x10, 0x53, + 0x3d, 0x01, 0xaa, 0x7b, 0x77, 0x7d, 0x7b, 0xbc, + 0x29, 0xe8, 0x0d, 0x53, 0xdb, 0xbb, 0xeb, 0xdd, + 0xe1, 0x57, 0x34, 0x41, 0x4c, 0xf4, 0x06, 0xa9, + 0xed, 0xdd, 0xf5, 0xee, 0xf0, 0xa7, 0xa0, 0x35, + 0x4f, 0x6e, 0xef, 0xaf, 0x77, 0x85, 0x5c, 0xd1, + 0x05, 0x33, 0xd0, 0x1a, 0xa7, 0xb7, 0x77, 0xd7, + 0xbb, 0xc2, 0x9e, 0x80, 0xd5, 0x3d, 0xbb, 0xbe, + 0xbd, 0xde, 0x15, 0x73, 0x44, 0x14, 0xcf, 0x40, + 0x6a, 0x9e, 0xdd, 0xdf, 0x5e, 0xef, 0x0a, 0x7a, + 0x03, 0x54, 0xf6, 0xee, 0xfa, 0xf7, 0x78, 0x55, + 0xcd, 0x10, 0x53, 0x3d, 0x01, 0xaa, 0x7b, 0x77, + 0x7d, 0x7b, 0xbc, 0x29, 0xe8, 0x0d, 0x53, 0xdb, + 0xbb, 0xeb, 0xdd, 0xe1, 0x57, 0x34, 0x41, 0x4c, + 0xf4, 0x06, 0xa9, 0xed, 0xdd, 0xf5, 0xee, 0xf0, + 0xa7, 0xa0, 0x35, 0x4f, 0x6e, 0xef, 0xaf, 0x77, + 0x85, 0x5c, 0xd1, 0x05, 0x22, 0xdb, 0xd3, 0x18, + 0xec, 0xcd, 0xad, 0xb5, 0xd4, 0xef, 0x71, 0x91, + 0xed, 0xab, 0x4c, 0x8e, 0x78, 0xe1, 0x27, 0xbe, + 0xae, 0xe1, 0x55, 0x33, 0x7f, 0x9a, 0x6c, 0x3b, + 0xf1, 0xfe, 0xf2, 0xb5, 0x84, 0x12, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0xa7, 0xaa, + 0xfe, 0xfa, 0xc7, 0xf7, 0x87, 0xf7, 0x15, 0xb1, + 0x54, 0xf5, 0x5f, 0xdf, 0x58, 0xfe, 0xf3, 0x7f, + 0xb8, 0x10, 0x5a, 0xd4, 0xa8, 0xe5, 0x52, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x82, 0xa7, 0x9b, 0xfc, 0xd3, 0x63, 0xdf, 0x8f, + 0xf7, 0x95, 0xad, 0x55, 0x33, 0x7f, 0x9a, 0x6c, + 0x7b, 0xf1, 0xfe, 0xf2, 0xb5, 0xa0, 0x94, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x55, 0x3d, + 0x57, 0xf7, 0xd6, 0x3f, 0xbc, 0xdf, 0xee, 0x05, + 0x6c, 0x55, 0x3d, 0x57, 0xf7, 0xd6, 0x3f, 0xbc, + 0xdf, 0xee, 0x04, 0x16, 0xbe, 0x55, 0x2a, 0x39, + 0x54, 0xa0, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0xa9, 0xe6, 0xff, 0x00, 0x34, + 0xd8, 0xf7, 0xe3, 0xfd, 0xe5, 0x6b, 0x55, 0x4c, + 0xdf, 0xe6, 0x9b, 0x1e, 0xfc, 0x7f, 0xbc, 0xad, + 0x63, 0x95, 0x04, 0xa2, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0xa9, 0xea, 0xbf, 0xbe, 0xb1, + 0xfd, 0xe6, 0xff, 0x00, 0x70, 0x2b, 0x62, 0xa9, + 0xea, 0xbf, 0xbe, 0xb1, 0xfd, 0xe1, 0xfd, 0xc0, + 0x82, 0xd7, 0xca, 0xa5, 0x42, 0x94, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x5e, 0x57, 0x13, 0xc7, 0x6f, + 0x03, 0xe6, 0x93, 0x63, 0x23, 0x1c, 0x4e, 0xa6, + 0xdd, 0x8b, 0xd5, 0x60, 0xe6, 0x6b, 0xe8, 0xab, + 0xaa, 0x6f, 0xea, 0xcd, 0x11, 0x63, 0x7b, 0xd6, + 0x6b, 0xc8, 0x61, 0xb5, 0x37, 0x6f, 0x27, 0xaa, + 0x68, 0xe3, 0x24, 0x0d, 0xb4, 0x5e, 0xed, 0x70, + 0x73, 0x43, 0x86, 0xe2, 0x2a, 0x3d, 0xd5, 0x5a, + 0xbe, 0xb9, 0xcd, 0x1c, 0x2b, 0xd9, 0x25, 0x9c, + 0x6d, 0x87, 0xab, 0x15, 0x93, 0xac, 0xa9, 0xe1, + 0xd9, 0xb7, 0x86, 0x8b, 0x3a, 0xd6, 0x59, 0x3d, + 0x32, 0xe6, 0x71, 0x12, 0xc1, 0x6d, 0x19, 0x0d, + 0xae, 0xca, 0xf3, 0xd1, 0x19, 0xe1, 0x0d, 0xc2, + 0x55, 0x55, 0x67, 0x96, 0xe1, 0xf6, 0x8f, 0x68, + 0x95, 0xc1, 0xc7, 0x20, 0x23, 0x06, 0xa7, 0xe2, + 0xf3, 0x2f, 0x56, 0x63, 0x4f, 0x97, 0xdc, 0xd9, + 0x75, 0xf2, 0xf9, 0x33, 0x22, 0x64, 0xa0, 0x71, + 0xbb, 0x8b, 0x8c, 0xd7, 0xf6, 0x93, 0xb7, 0x85, + 0xaf, 0x6f, 0x1a, 0x59, 0x50, 0x9a, 0x2a, 0xdb, + 0x66, 0x8e, 0x6c, 0x3d, 0xa3, 0xef, 0xae, 0x5d, + 0x1c, 0x6d, 0x04, 0x39, 0x8c, 0x75, 0x24, 0x94, + 0xb7, 0x60, 0xa1, 0xad, 0x4a, 0xc5, 0x8a, 0xe5, + 0xed, 0xb2, 0xcb, 0x45, 0x6e, 0xf9, 0x99, 0x0c, + 0x4c, 0x6b, 0xa1, 0xeb, 0xab, 0xc6, 0xd2, 0x7b, + 0xfb, 0x79, 0x10, 0x8f, 0x9d, 0x78, 0xd2, 0xdd, + 0x54, 0x55, 0xb1, 0x0c, 0x96, 0x33, 0xe3, 0xee, + 0x5b, 0x34, 0x8f, 0x96, 0xe5, 0xed, 0x8e, 0x70, + 0xe7, 0x12, 0xd7, 0x07, 0x0a, 0xec, 0x69, 0xd8, + 0x16, 0xfe, 0xe4, 0x91, 0x6d, 0x29, 0x1b, 0x08, + 0x63, 0x88, 0xe8, 0x49, 0xd9, 0x77, 0xc2, 0xfc, + 0x0f, 0xa5, 0xbd, 0x6a, 0x95, 0x55, 0x18, 0xad, + 0x6e, 0x45, 0x8d, 0x85, 0xdb, 0x6e, 0x24, 0xf2, + 0x89, 0xe4, 0x11, 0xbc, 0x97, 0x92, 0xd2, 0xc3, + 0x5d, 0x9c, 0x2b, 0x3e, 0x06, 0x9b, 0x4b, 0xab, + 0xfb, 0x36, 0x5c, 0x3a, 0x28, 0x1b, 0x1b, 0x1e, + 0xd9, 0x64, 0x71, 0x77, 0x01, 0x77, 0xc6, 0x35, + 0x71, 0x49, 0xd9, 0xb3, 0xdb, 0xe0, 0x37, 0xf5, + 0x45, 0x52, 0x8a, 0x7b, 0x6b, 0x6c, 0x9d, 0x98, + 0xb0, 0x92, 0xe1, 0xe1, 0xef, 0x31, 0xcc, 0xf9, + 0x0b, 0x9d, 0x1b, 0xc5, 0x09, 0xab, 0x4b, 0x8d, + 0x39, 0x16, 0x7d, 0x85, 0xb4, 0xd7, 0xf2, 0x3b, + 0x24, 0x67, 0x7b, 0x25, 0x6c, 0xce, 0x6b, 0x40, + 0x27, 0x83, 0x81, 0xa7, 0x86, 0x85, 0x9b, 0x92, + 0x3b, 0x7c, 0x09, 0x6d, 0xe3, 0xbc, 0x86, 0x4b, + 0xa9, 0x6d, 0x5a, 0x49, 0x96, 0x10, 0x1c, 0xf1, + 0x4d, 0x94, 0x76, 0xed, 0xab, 0xee, 0x49, 0x9b, + 0x19, 0x60, 0x2d, 0x71, 0xeb, 0x0f, 0x08, 0xe1, + 0x15, 0xa6, 0xca, 0xed, 0xe6, 0x5a, 0x09, 0x6c, + 0x1b, 0x7b, 0x9e, 0xbd, 0x12, 0x48, 0xf6, 0x46, + 0xd8, 0xd8, 0x78, 0x58, 0xe2, 0xd2, 0x4f, 0x0e, + 0xc3, 0x50, 0xa2, 0xd2, 0xea, 0xe1, 0xd6, 0xd6, + 0x4c, 0x74, 0x8e, 0x3d, 0x5d, 0xdb, 0xa2, 0xad, + 0x76, 0xb9, 0xac, 0xe2, 0x03, 0x8b, 0x9d, 0x48, + 0x9d, 0x9d, 0xb9, 0xd1, 0x3d, 0xbd, 0xde, 0x65, + 0x92, 0xa8, 0xaa, 0xec, 0xb4, 0x92, 0xe6, 0xde, + 0xfa, 0xea, 0x49, 0xe5, 0xe3, 0xb7, 0x96, 0x43, + 0x6e, 0x1a, 0xe2, 0xd0, 0xde, 0x13, 0xb8, 0xf3, + 0xa8, 0xb9, 0xc9, 0x9b, 0x97, 0x5a, 0x5b, 0x5c, + 0x89, 0x9d, 0x13, 0xe0, 0x12, 0xcb, 0xe4, 0xe1, + 0xdc, 0x45, 0xfb, 0x37, 0x96, 0xee, 0x0a, 0xf1, + 0xaf, 0x67, 0x8e, 0xdf, 0x91, 0xdb, 0xdc, 0xb4, + 0xa9, 0x5a, 0x6c, 0x0d, 0xc4, 0x85, 0xf3, 0x40, + 0xd6, 0xcc, 0x2d, 0x98, 0x41, 0x80, 0xce, 0xd2, + 0x1d, 0x42, 0x36, 0x8a, 0xbb, 0x7a, 0xdc, 0x20, + 0x94, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x41, 0x53, 0xcd, 0xfe, 0x69, + 0xb0, 0xef, 0xc7, 0xfb, 0xca, 0xd6, 0x39, 0x55, + 0x53, 0x37, 0xf9, 0xa6, 0xc3, 0xbf, 0x1f, 0xef, + 0x2b, 0x58, 0xe5, 0x41, 0x28, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0xaa, 0x5a, 0xaf, 0xef, + 0xbc, 0x77, 0x79, 0xbf, 0xdc, 0x0a, 0xda, 0xaa, + 0x5a, 0xaf, 0xef, 0xbc, 0x77, 0x79, 0xbf, 0xdc, + 0x08, 0x2d, 0x9c, 0xaa, 0x54, 0x72, 0xa9, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x10, 0xb1, 0xb2, 0x30, + 0x49, 0x71, 0x63, 0x3c, 0x11, 0xfc, 0x79, 0x18, + 0x5a, 0xda, 0xf3, 0xac, 0xa4, 0x49, 0x8b, 0x1a, + 0xeb, 0xcb, 0x39, 0xa6, 0xc4, 0xbe, 0xd1, 0x83, + 0xf8, 0xa6, 0x30, 0xc1, 0x5d, 0xd5, 0x58, 0xf7, + 0x36, 0x79, 0x18, 0x2f, 0x59, 0x79, 0x67, 0x1b, + 0x66, 0x73, 0xa2, 0x11, 0x4b, 0x1b, 0xdd, 0xc2, + 0x05, 0x37, 0x10, 0x56, 0xe5, 0x13, 0x89, 0xcb, + 0xa2, 0xbd, 0x16, 0x1e, 0xfc, 0x40, 0xd6, 0xc8, + 0x1a, 0x5f, 0xe5, 0x82, 0xe1, 0xd4, 0x3f, 0xb3, + 0xca, 0xb3, 0xdb, 0x67, 0x38, 0xc8, 0xdc, 0xdc, + 0x50, 0x75, 0x72, 0xc2, 0xc6, 0x37, 0x9f, 0x89, + 0xb5, 0xaf, 0xc2, 0xb6, 0x4b, 0xca, 0xea, 0x57, + 0x43, 0x03, 0xe4, 0x68, 0x69, 0x2d, 0x15, 0x01, + 0xc7, 0x84, 0x74, 0xa4, 0xed, 0xed, 0xd2, 0x8e, + 0xde, 0x36, 0xd0, 0xc7, 0x89, 0xc8, 0xdb, 0x32, + 0xd2, 0x56, 0x43, 0x1d, 0xc4, 0xb0, 0x07, 0x35, + 0xd1, 0x3c, 0xd0, 0x0e, 0x23, 0xb1, 0xc0, 0xd0, + 0xa3, 0xf1, 0x59, 0x49, 0x9b, 0x90, 0x7c, 0xdc, + 0x3c, 0x77, 0xb1, 0x34, 0x31, 0xa0, 0xec, 0x69, + 0x6f, 0xec, 0x77, 0x7b, 0xeb, 0x74, 0xfb, 0xfb, + 0x48, 0x5b, 0x59, 0xe6, 0x64, 0x66, 0x80, 0xb8, + 0x17, 0x0d, 0x95, 0x58, 0xd9, 0x2c, 0xcd, 0xb5, + 0x9d, 0xb4, 0x53, 0xb5, 0xec, 0x7b, 0x66, 0x70, + 0x6b, 0x4f, 0x15, 0x01, 0x07, 0x94, 0x27, 0xfe, + 0x08, 0xdf, 0xec, 0xfa, 0xdb, 0xca, 0xea, 0xc2, + 0xe6, 0x51, 0x62, 0x18, 0x36, 0xdb, 0x4a, 0xc7, + 0xc9, 0xde, 0x00, 0xd6, 0x8b, 0x65, 0x33, 0x4b, + 0xe1, 0x7b, 0x1b, 0xbd, 0xcd, 0x20, 0x77, 0xc8, + 0x5f, 0x12, 0xdf, 0xd9, 0xc2, 0xc6, 0x3e, 0x69, + 0x99, 0x1b, 0x64, 0xda, 0xc7, 0x39, 0xc0, 0x03, + 0xde, 0x5f, 0x46, 0xe2, 0x01, 0x1b, 0x65, 0x2f, + 0x68, 0x8d, 0xdf, 0x15, 0xf5, 0xd8, 0x7d, 0xd5, + 0x32, 0xdb, 0x13, 0xd6, 0xfc, 0x48, 0xf9, 0x53, + 0x56, 0xcc, 0x65, 0xcb, 0x6c, 0x2c, 0x20, 0x20, + 0x71, 0xdb, 0x48, 0xd7, 0x49, 0xb7, 0x65, 0x00, + 0x21, 0x7c, 0x64, 0x31, 0x17, 0x57, 0x53, 0xde, + 0xbd, 0x94, 0xe1, 0x9e, 0x36, 0x36, 0x30, 0x79, + 0x4b, 0x4d, 0x48, 0x3d, 0xf5, 0xe9, 0x90, 0xd4, + 0x56, 0xd0, 0x3a, 0x16, 0x5a, 0x3e, 0x2b, 0x89, + 0x26, 0x77, 0x0e, 0xd7, 0x86, 0x80, 0x3b, 0xa5, + 0x67, 0x3b, 0x25, 0x67, 0x09, 0x11, 0xdc, 0xcd, + 0x1c, 0x53, 0x10, 0x09, 0x8c, 0xb8, 0x57, 0x6a, + 0xb3, 0xb6, 0xe7, 0x9c, 0xcf, 0x89, 0xcb, 0xb9, + 0xaa, 0x7d, 0x96, 0x5e, 0xe2, 0x5b, 0x37, 0xba, + 0x08, 0xad, 0xa2, 0xb4, 0x94, 0x3b, 0xa9, 0x61, + 0x04, 0x10, 0x41, 0x05, 0xdb, 0x85, 0x3b, 0xcb, + 0xda, 0x0b, 0x4c, 0xad, 0x9c, 0xce, 0xb6, 0xb7, + 0x6b, 0x4d, 0xa4, 0x92, 0x99, 0x3a, 0xf2, 0x7c, + 0x66, 0x87, 0x6d, 0x2d, 0xe0, 0x5b, 0x49, 0xae, + 0xed, 0xa0, 0x60, 0x92, 0x69, 0x1b, 0x1b, 0x1d, + 0xb0, 0x39, 0xc4, 0x00, 0x57, 0xd1, 0x9e, 0x16, + 0xc7, 0xd6, 0x97, 0xb4, 0x45, 0x4a, 0xf1, 0xd7, + 0xc5, 0xa7, 0x3d, 0x52, 0xfb, 0x77, 0xd8, 0xc0, + 0x86, 0xca, 0x76, 0x65, 0x2e, 0xee, 0x9c, 0x07, + 0x57, 0x33, 0x18, 0xd6, 0x1e, 0x5a, 0xb4, 0x51, + 0x62, 0xdb, 0xe2, 0xaf, 0x18, 0xc8, 0x5a, 0xe0, + 0x2b, 0x1d, 0xd3, 0xe7, 0x76, 0xdf, 0xd8, 0x77, + 0x15, 0x3e, 0x15, 0xb7, 0xb7, 0xbb, 0xb6, 0xb9, + 0x69, 0x75, 0xbc, 0xad, 0x94, 0x0d, 0xe5, 0x86, + 0xab, 0xd9, 0x4a, 0xed, 0xdf, 0x64, 0xed, 0xed, + 0xfc, 0xbe, 0x56, 0xa2, 0xdf, 0x1d, 0x73, 0x1d, + 0x9d, 0xec, 0x4e, 0x03, 0x8e, 0xe1, 0xf2, 0x39, + 0x80, 0x73, 0x38, 0x9a, 0x55, 0x78, 0x0c, 0x6e, + 0x42, 0xd5, 0xb6, 0x77, 0x36, 0xad, 0x6b, 0xee, + 0x21, 0x88, 0x43, 0x34, 0x4e, 0x34, 0x6b, 0x86, + 0xff, 0x00, 0x8d, 0xdc, 0x2b, 0x7c, 0x8a, 0xf1, + 0xbf, 0x67, 0x84, 0x4c, 0x7c, 0xc9, 0xfa, 0xf8, + 0xb0, 0xac, 0x06, 0x44, 0x87, 0xc9, 0x7d, 0xc2, + 0xd2, 0xf3, 0xe2, 0x42, 0xda, 0x10, 0xc0, 0x3f, + 0xdd, 0xcb, 0x55, 0x98, 0xa5, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x45, 0x50, 0x4a, 0x85, + 0x83, 0x7d, 0x9a, 0xc6, 0xd9, 0x3f, 0xaa, 0x9e, + 0x66, 0xf5, 0xe7, 0x68, 0x85, 0xa6, 0xaf, 0x3d, + 0xe6, 0xad, 0x3c, 0x9a, 0x93, 0x22, 0xe7, 0x9e, + 0x1b, 0x76, 0x41, 0x0d, 0x7c, 0x59, 0x1c, 0xfa, + 0xbc, 0x8e, 0xeb, 0x08, 0xd8, 0xac, 0x44, 0xce, + 0xe4, 0x99, 0x88, 0xde, 0xb3, 0x29, 0x55, 0xa9, + 0x75, 0x44, 0xec, 0x61, 0x30, 0x42, 0xc9, 0x9d, + 0x41, 0x40, 0xe7, 0x70, 0x6d, 0xe5, 0x5b, 0x5c, + 0x56, 0x66, 0xd3, 0x27, 0x17, 0x14, 0x47, 0x86, + 0x56, 0xff, 0x00, 0x32, 0x27, 0x6c, 0x70, 0xf7, + 0x39, 0x92, 0x71, 0x98, 0xdf, 0x04, 0x65, 0x12, + 0xd8, 0x22, 0x85, 0x2a, 0x28, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x83, 0xe1, 0xf2, + 0xc6, 0xc3, 0x47, 0x1a, 0x2f, 0x9f, 0x29, 0x83, + 0xe5, 0x85, 0xf3, 0x75, 0x6e, 0xd9, 0xa3, 0x20, + 0xfc, 0x60, 0x36, 0x15, 0x85, 0x67, 0x6b, 0x1c, + 0xa1, 0xcc, 0x93, 0xe3, 0xb4, 0xd0, 0xa0, 0xcf, + 0xf2, 0xa8, 0x3e, 0x58, 0x4f, 0x29, 0x83, 0xe5, + 0x85, 0xe3, 0xe8, 0xdb, 0x7e, 0xea, 0x7a, 0x36, + 0x0e, 0xea, 0x0f, 0x6f, 0x29, 0x83, 0xe5, 0x85, + 0x22, 0x78, 0x49, 0xa0, 0x78, 0xe9, 0x58, 0xfe, + 0x8d, 0x83, 0xba, 0xbc, 0xe6, 0xc7, 0x46, 0xc8, + 0x8b, 0x98, 0x48, 0x73, 0x45, 0x50, 0x67, 0x85, + 0x2b, 0xc2, 0xca, 0x43, 0x25, 0xbb, 0x5c, 0xed, + 0xfb, 0x97, 0xba, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x0a, 0x9e, 0x6f, + 0xf3, 0x4d, 0x87, 0x7e, 0x3f, 0xde, 0x56, 0xb1, + 0xca, 0xaa, 0x99, 0xbf, 0xcd, 0x36, 0x1d, 0xf8, + 0xff, 0x00, 0x79, 0x5a, 0xc7, 0x2a, 0x09, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0x52, + 0xd5, 0x7f, 0x7d, 0xe3, 0xbb, 0xcd, 0xfe, 0xe0, + 0x56, 0xd5, 0x52, 0xd5, 0x7f, 0x7d, 0x63, 0xbb, + 0xcd, 0xfe, 0xe0, 0x41, 0x6c, 0xe5, 0x52, 0xa3, + 0x95, 0x4a, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x2d, 0x7e, 0x70, 0xff, + 0x00, 0xf5, 0x57, 0x3f, 0x30, 0xfc, 0x21, 0x6c, + 0x16, 0x35, 0xf5, 0xaf, 0x95, 0xda, 0xc9, 0x6e, + 0x49, 0x68, 0x90, 0x53, 0x88, 0x72, 0x29, 0x27, + 0x16, 0x9a, 0xde, 0xd6, 0x09, 0xf3, 0x8e, 0xeb, + 0x9a, 0x24, 0x0d, 0xb5, 0x88, 0x06, 0xbb, 0x6b, + 0x76, 0x83, 0xc8, 0xb0, 0x9d, 0x14, 0x67, 0x16, + 0xe8, 0xdc, 0xd6, 0xb9, 0xb1, 0x5f, 0x16, 0x46, + 0x08, 0x06, 0x8d, 0xe6, 0x56, 0x08, 0x31, 0xbd, + 0x4d, 0xe3, 0xae, 0xb8, 0xc9, 0x2e, 0x89, 0xb1, + 0x70, 0xd3, 0xe4, 0x72, 0xac, 0x79, 0x30, 0x7c, + 0x56, 0x92, 0xdb, 0x89, 0x4b, 0x5d, 0x24, 0xc6, + 0x76, 0xc9, 0xc3, 0x5e, 0x17, 0x1e, 0x4a, 0x2b, + 0x7b, 0x7a, 0x7e, 0x27, 0x0f, 0x73, 0x02, 0x41, + 0x79, 0x26, 0x5a, 0xe5, 0x90, 0xd9, 0xc5, 0x75, + 0x1c, 0x2c, 0x63, 0x5a, 0xc9, 0x5d, 0xc0, 0xd6, + 0x02, 0x3f, 0x64, 0x50, 0xef, 0x5f, 0x33, 0x5a, + 0x5e, 0xb7, 0x1c, 0xd8, 0x2f, 0x18, 0xd8, 0x9a, + 0xfb, 0x96, 0x98, 0xd8, 0xd7, 0x71, 0xf0, 0xb4, + 0xd7, 0xc5, 0xaa, 0xd9, 0x4f, 0x88, 0xb9, 0x74, + 0xcd, 0xb9, 0xb7, 0xb9, 0xea, 0x2e, 0x78, 0x03, + 0x25, 0x93, 0x84, 0x10, 0xfa, 0x72, 0xf0, 0xaf, + 0x4f, 0x44, 0x93, 0x6d, 0x1c, 0x2f, 0x99, 0xd2, + 0x3d, 0x92, 0x09, 0x5f, 0x23, 0xb6, 0xd4, 0x8e, + 0x61, 0xc8, 0x97, 0xf2, 0xf8, 0xc8, 0xc3, 0xc8, + 0x59, 0x59, 0xb3, 0x25, 0x8e, 0x6b, 0x60, 0x8c, + 0x0e, 0x33, 0xb9, 0xa0, 0x2c, 0x4b, 0xe7, 0x43, + 0x38, 0xbb, 0x8e, 0xc2, 0xcb, 0xca, 0x1c, 0x38, + 0xfa, 0xf9, 0xe6, 0xf1, 0x78, 0x5c, 0x3e, 0x43, + 0x88, 0x3b, 0x96, 0xf6, 0xe6, 0xc4, 0x5c, 0x5c, + 0xdb, 0xce, 0x5c, 0x47, 0x93, 0x92, 0x78, 0x79, + 0xea, 0xb0, 0x9d, 0x82, 0x9c, 0x99, 0x62, 0x6d, + 0xd3, 0x99, 0x67, 0x33, 0x9c, 0xe7, 0xc0, 0x1b, + 0xb6, 0xae, 0xdf, 0x47, 0xef, 0x53, 0xe5, 0x36, + 0x47, 0x3f, 0x63, 0x07, 0x1c, 0xc6, 0xde, 0x4f, + 0x61, 0x0d, 0xc8, 0xeb, 0x22, 0x6d, 0x9f, 0x10, + 0x63, 0xb6, 0x82, 0xea, 0x81, 0x5d, 0xab, 0xdf, + 0x35, 0x14, 0x96, 0xf1, 0x58, 0xd8, 0xd9, 0xc6, + 0x24, 0x63, 0xa5, 0xfe, 0x53, 0xdd, 0x46, 0xb8, + 0x00, 0x4f, 0x09, 0x76, 0xd5, 0x91, 0xe8, 0x39, + 0x23, 0xb7, 0xb6, 0x6d, 0xb5, 0xc1, 0x8a, 0xe2, + 0xd9, 0x9d, 0x5b, 0x66, 0xe1, 0xe2, 0x25, 0x9c, + 0xc4, 0x15, 0xed, 0x36, 0x20, 0x4d, 0x62, 0xcb, + 0x67, 0xca, 0xee, 0xb5, 0x87, 0x8d, 0xb3, 0xf2, + 0x87, 0xfc, 0xaa, 0x2b, 0x3c, 0x24, 0xf9, 0xb1, + 0x2c, 0x6d, 0x72, 0x6c, 0xc8, 0xb6, 0x77, 0x5a, + 0x43, 0x67, 0x0f, 0x09, 0x6c, 0x8d, 0x8a, 0x4e, + 0x2a, 0x9e, 0x43, 0xc2, 0x1a, 0x16, 0xf1, 0x60, + 0x59, 0x63, 0xee, 0xa2, 0x98, 0xcf, 0x79, 0x74, + 0x6e, 0x5e, 0x1b, 0xc2, 0xc0, 0x1b, 0xc0, 0xd0, + 0x3b, 0xc3, 0x7a, 0xd8, 0x22, 0x08, 0x88, 0x8a, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x28, 0xaa, 0x09, 0x50, 0xb1, + 0x32, 0x39, 0x5b, 0x0c, 0x6c, 0x7d, 0x65, 0xec, + 0xec, 0x84, 0x1f, 0x8a, 0x1c, 0x40, 0x2e, 0x3c, + 0xcd, 0x07, 0x7a, 0xa8, 0x66, 0xb5, 0xa5, 0xfb, + 0xc1, 0xf2, 0x26, 0xb6, 0xd2, 0xcc, 0x6f, 0xba, + 0x94, 0xd1, 0xe4, 0x7f, 0xb5, 0x8e, 0xde, 0x89, + 0x6b, 0x65, 0xfe, 0x6f, 0x19, 0x8f, 0x3c, 0x37, + 0x77, 0x0c, 0x8e, 0x42, 0x2a, 0xd8, 0xea, 0x38, + 0xc8, 0xee, 0x35, 0x56, 0xee, 0x35, 0x06, 0x5f, + 0x22, 0xe7, 0x75, 0x0c, 0x65, 0x95, 0x80, 0x34, + 0x33, 0x17, 0x56, 0x57, 0x8f, 0x99, 0x4d, 0x9d, + 0x2b, 0x9d, 0x65, 0xb5, 0x5d, 0xb8, 0x9d, 0xcf, + 0xb3, 0x06, 0xe6, 0xe4, 0xfc, 0x6b, 0xa9, 0x86, + 0xe3, 0xfe, 0xc6, 0xbb, 0x72, 0xdb, 0xe9, 0x5b, + 0xb9, 0xee, 0xf1, 0x4e, 0x9e, 0xe1, 0xe5, 0xd2, + 0x3a, 0x53, 0x53, 0xee, 0x2d, 0xe1, 0x8c, 0x65, + 0x31, 0x0c, 0xe7, 0x94, 0xc4, 0x5b, 0x7d, 0xc7, + 0x6b, 0x0c, 0x8e, 0x7c, 0x0c, 0xe3, 0x95, 0xdf, + 0x1a, 0x79, 0x7c, 0x77, 0x93, 0xdc, 0xae, 0xe5, + 0xe4, 0xf7, 0xb9, 0xc4, 0xb9, 0xe4, 0xb8, 0x9e, + 0x75, 0xf0, 0x49, 0x50, 0x49, 0xde, 0xbb, 0xc4, + 0x44, 0x6c, 0x71, 0x99, 0x99, 0xde, 0x92, 0x76, + 0xd7, 0x97, 0x9d, 0x7c, 0xb6, 0xea, 0xe6, 0xce, + 0xe1, 0x97, 0xf6, 0x9b, 0x66, 0x8b, 0x6b, 0x99, + 0x5a, 0x07, 0xb7, 0x94, 0x39, 0x41, 0x2b, 0xe7, + 0x8a, 0x89, 0x94, 0x5e, 0xc5, 0x89, 0xa9, 0xb7, + 0x41, 0xc3, 0xe5, 0xed, 0xb2, 0xd6, 0x31, 0xdd, + 0xdb, 0x9d, 0x8f, 0x1e, 0x33, 0x79, 0x5a, 0xee, + 0x50, 0x56, 0x72, 0xe6, 0x18, 0xec, 0xb4, 0xb8, + 0x0c, 0x80, 0xba, 0x69, 0x2e, 0xb0, 0x98, 0x81, + 0x75, 0x1f, 0xc9, 0xae, 0xce, 0x30, 0xba, 0x55, + 0xbd, 0xc4, 0x57, 0x30, 0xb2, 0x78, 0x5c, 0x1f, + 0x14, 0x80, 0x39, 0xae, 0x1c, 0xa0, 0xaf, 0x36, + 0x78, 0xce, 0x32, 0xef, 0x8c, 0xf9, 0xa1, 0xec, + 0x88, 0x8a, 0x28, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0x17, + 0x8c, 0xb7, 0xb6, 0xb0, 0x9a, 0x49, 0x23, 0x5a, + 0x79, 0x89, 0x5f, 0x19, 0x1b, 0x9f, 0x25, 0xb3, + 0x96, 0x71, 0xbd, 0x8d, 0xd9, 0xdf, 0x55, 0x08, + 0xed, 0x9d, 0x75, 0x13, 0xee, 0x6e, 0x1e, 0x5c, + 0xe7, 0x54, 0x81, 0xcc, 0x90, 0x2e, 0x91, 0xdc, + 0x45, 0x33, 0x0b, 0xe3, 0x70, 0x73, 0x47, 0x28, + 0x58, 0xd6, 0x27, 0x8e, 0x69, 0xa4, 0x1b, 0x89, + 0xa5, 0x56, 0xa7, 0x07, 0x23, 0x99, 0x88, 0x73, + 0x1a, 0x7c, 0x67, 0xbc, 0x80, 0xb7, 0x76, 0xcc, + 0x10, 0xc4, 0x19, 0xcb, 0xca, 0x83, 0x25, 0x17, + 0x9f, 0x19, 0x4e, 0x32, 0x83, 0xd1, 0x78, 0x5d, + 0xbb, 0x86, 0xdd, 0xe7, 0x94, 0x8a, 0x05, 0xf7, + 0xc6, 0xb1, 0x6f, 0x1e, 0x64, 0x7c, 0x70, 0x0d, + 0xee, 0x35, 0x28, 0x22, 0xce, 0xf2, 0xd2, 0x28, + 0x5b, 0x1b, 0xe4, 0x6b, 0x5f, 0xca, 0x09, 0x59, + 0xad, 0x7b, 0x5e, 0x38, 0x98, 0x43, 0x87, 0x38, + 0xda, 0xa9, 0xb7, 0x56, 0x8c, 0x97, 0x2d, 0x3c, + 0x4e, 0x71, 0x1c, 0x3b, 0x8a, 0xcf, 0xd3, 0x77, + 0x33, 0x45, 0x77, 0x25, 0x84, 0xae, 0x2e, 0x14, + 0xab, 0x2a, 0x82, 0xca, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0xa7, 0x9b, + 0xfc, 0xd3, 0x61, 0xdf, 0x8f, 0xf7, 0x95, 0xac, + 0x72, 0xaa, 0xa6, 0x6f, 0xf3, 0x4d, 0x87, 0x7e, + 0x3f, 0xde, 0x56, 0xb1, 0xca, 0x82, 0x51, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x54, 0xf5, + 0x5f, 0xdf, 0x58, 0xfe, 0xf0, 0xfe, 0xe0, 0x56, + 0xc5, 0x53, 0xd5, 0x7f, 0x7d, 0x63, 0xfb, 0xcd, + 0xfe, 0xe0, 0x41, 0x6b, 0x52, 0xa3, 0x95, 0x4a, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x84, 0x12, 0xa2, 0xab, 0xc6, 0xee, + 0xfa, 0xd2, 0xca, 0x23, 0x35, 0xdc, 0xcc, 0x82, + 0x31, 0xbd, 0xcf, 0x20, 0x05, 0x57, 0xcc, 0xeb, + 0x39, 0x78, 0x4b, 0x30, 0xcd, 0x6b, 0xda, 0x3e, + 0x35, 0xdb, 0xcd, 0x18, 0xdf, 0x9b, 0xc8, 0x50, + 0x59, 0x6f, 0xb2, 0x76, 0x18, 0xf8, 0xc4, 0x97, + 0xb7, 0x11, 0xdb, 0xb5, 0xdf, 0x14, 0xc8, 0xe0, + 0xda, 0xf7, 0xaa, 0xaa, 0x59, 0x9d, 0x6b, 0x79, + 0x20, 0x73, 0x71, 0x2c, 0x6c, 0x50, 0x0d, 0x8e, + 0xbc, 0x98, 0xd0, 0x53, 0xfd, 0xa0, 0xec, 0x2a, + 0x91, 0x9d, 0xd5, 0x56, 0xaf, 0x93, 0x8e, 0x77, + 0x9c, 0x9d, 0xe0, 0x07, 0xe3, 0x0a, 0x44, 0xda, + 0xf3, 0x37, 0xe2, 0x95, 0x56, 0xc8, 0xe6, 0x6f, + 0xb2, 0x0e, 0xac, 0xf2, 0x11, 0x1e, 0xe1, 0x13, + 0x7c, 0x56, 0x8f, 0xfe, 0x23, 0x62, 0xa9, 0x6b, + 0x26, 0x67, 0x56, 0x5a, 0xf5, 0x80, 0xc6, 0x5d, + 0x7f, 0x76, 0x37, 0xcb, 0x28, 0xf1, 0x1a, 0x79, + 0x78, 0x5a, 0xea, 0x85, 0x57, 0xbe, 0xc9, 0x5e, + 0x5f, 0xc9, 0xc5, 0x71, 0x2b, 0x9c, 0x39, 0x19, + 0x5a, 0x34, 0x77, 0x9a, 0xb1, 0x92, 0x89, 0x6a, + 0x15, 0x7c, 0xd1, 0x87, 0xff, 0x00, 0xa4, 0xdd, + 0xff, 0x00, 0xb4, 0xfc, 0x0a, 0x86, 0x55, 0xeb, + 0x47, 0x1f, 0xfe, 0x97, 0x9b, 0xf8, 0x87, 0xe0, + 0x5d, 0x34, 0xbf, 0x53, 0x1a, 0xbf, 0xa5, 0xbd, + 0x25, 0x7c, 0x97, 0x2f, 0x92, 0xe5, 0xf2, 0x4a, + 0xea, 0xe3, 0x4f, 0xa7, 0x39, 0x7c, 0x97, 0x21, + 0x2b, 0xe3, 0x8b, 0x91, 0x15, 0x2e, 0x0d, 0x7b, + 0x4b, 0x1e, 0x01, 0x63, 0x85, 0x1c, 0x0f, 0x31, + 0x5e, 0xda, 0x67, 0x39, 0x79, 0x86, 0xcb, 0x43, + 0x8d, 0x9e, 0x4e, 0x2c, 0x7d, 0xc1, 0xe1, 0x85, + 0xce, 0x3b, 0x1b, 0x5f, 0xd9, 0x58, 0xf5, 0x5e, + 0x37, 0x56, 0xf1, 0xdc, 0xc2, 0x61, 0x7e, 0xc3, + 0x50, 0xe6, 0x38, 0x6c, 0x2d, 0x70, 0xdc, 0x41, + 0x59, 0xcf, 0x1b, 0x6b, 0x1c, 0xa9, 0xd7, 0x01, + 0x07, 0x68, 0xda, 0x0e, 0xe5, 0x2a, 0x99, 0xa0, + 0xb5, 0x0c, 0xb3, 0xc2, 0xfc, 0x46, 0x41, 0xdf, + 0xf3, 0x2d, 0x7e, 0x2b, 0x9c, 0x7e, 0x3b, 0x0e, + 0xe2, 0x15, 0xc9, 0x79, 0xe6, 0x29, 0xd9, 0x28, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x35, 0xba, 0x84, 0xff, 0x00, + 0xf5, 0x33, 0x77, 0x96, 0x82, 0xdc, 0xff, 0x00, + 0xc1, 0x00, 0x7c, 0x95, 0xbe, 0xd4, 0x5f, 0x74, + 0xcd, 0xde, 0x5a, 0x1b, 0x51, 0x5b, 0x36, 0x8e, + 0x76, 0xab, 0x03, 0x27, 0x09, 0xb2, 0xc9, 0x84, + 0xfc, 0x5e, 0x32, 0xb7, 0xdc, 0x4a, 0xa3, 0x0b, + 0xb2, 0x30, 0x45, 0xd4, 0x46, 0x07, 0x05, 0x78, + 0x82, 0xf7, 0x17, 0xf9, 0x80, 0x29, 0xb1, 0x05, + 0x9b, 0x88, 0xa7, 0x11, 0x55, 0x9f, 0x48, 0x66, + 0x3b, 0x9d, 0x09, 0xe9, 0x0c, 0xc7, 0x73, 0xa1, + 0x28, 0x59, 0xc3, 0x97, 0x8c, 0x7b, 0x6f, 0xdb, + 0xc5, 0xcc, 0x68, 0xab, 0xde, 0x90, 0xcc, 0x77, + 0x3a, 0x14, 0x0b, 0xdc, 0xb8, 0x94, 0x48, 0x3e, + 0x33, 0x52, 0x87, 0xdc, 0xa7, 0xff, 0x00, 0xbb, + 0xb8, 0xf7, 0x17, 0xa6, 0x23, 0xef, 0xf3, 0xf3, + 0x16, 0x3d, 0xbb, 0x2e, 0x5f, 0x74, 0xfb, 0x89, + 0xfe, 0x33, 0xfe, 0x15, 0x91, 0x88, 0xfb, 0xfc, + 0xfc, 0xc4, 0x16, 0xb4, 0x44, 0x50, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x05, 0x4f, 0x37, + 0xf9, 0xa6, 0xc3, 0xbf, 0x1f, 0xef, 0x2b, 0x58, + 0xe5, 0x55, 0x4c, 0xdf, 0xe6, 0x9b, 0x0e, 0xfc, + 0x7f, 0xbc, 0xad, 0x63, 0x95, 0x04, 0xa2, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0xa9, 0xea, + 0xbf, 0xbe, 0xb1, 0xfd, 0xe6, 0xff, 0x00, 0x70, + 0x2b, 0x62, 0xa9, 0x6a, 0xbf, 0xbe, 0xb1, 0xdd, + 0xe6, 0xff, 0x00, 0x70, 0x20, 0xb6, 0x72, 0xa9, + 0x51, 0xca, 0xa5, 0x01, 0x11, 0x10, 0x11, 0x17, + 0xcb, 0x9c, 0x1a, 0x2a, 0xe3, 0x40, 0x37, 0x92, + 0x82, 0x54, 0xad, 0x16, 0x4b, 0x54, 0xda, 0xdb, + 0x3f, 0xa9, 0xb6, 0x69, 0xb8, 0x9b, 0x77, 0x0b, + 0x56, 0x17, 0xad, 0x59, 0x1a, 0x7f, 0xd2, 0x77, + 0xbe, 0x82, 0xd4, 0x8a, 0xab, 0xeb, 0x6d, 0xe3, + 0x3c, 0x69, 0x6c, 0xdc, 0xd8, 0xc7, 0xc6, 0x3b, + 0x76, 0x05, 0x61, 0xb1, 0xbd, 0x86, 0xf6, 0xd9, + 0xb7, 0x10, 0x9a, 0xb5, 0xde, 0xf1, 0x41, 0x92, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0xaa, 0x3a, + 0xbf, 0x25, 0x96, 0xb7, 0xc8, 0xda, 0x5a, 0x63, + 0x5f, 0xc2, 0xf9, 0xc6, 0xee, 0xea, 0x0b, 0x72, + 0x2a, 0x2f, 0x53, 0xae, 0xfb, 0x46, 0xf4, 0xff, + 0x00, 0xa2, 0x83, 0x0e, 0xba, 0xed, 0x19, 0x41, + 0xcb, 0xfe, 0x02, 0x0b, 0xda, 0x2a, 0x28, 0x8b, + 0x5c, 0x8f, 0xfd, 0xac, 0xe9, 0x1e, 0x04, 0xea, + 0xb5, 0xc7, 0x6a, 0xce, 0x91, 0xe0, 0x41, 0x7a, + 0x45, 0x45, 0xea, 0xb5, 0xc7, 0x6a, 0xce, 0x91, + 0xe0, 0x4e, 0xab, 0x5c, 0x76, 0xac, 0xe9, 0x1e, + 0x04, 0x17, 0xa4, 0x54, 0x5e, 0xab, 0x5c, 0x76, + 0xac, 0xe9, 0x1e, 0x04, 0xea, 0xb5, 0xc7, 0x6a, + 0xce, 0x91, 0xe0, 0x41, 0x7a, 0x45, 0x45, 0xea, + 0xb5, 0xc7, 0x6a, 0xce, 0x91, 0xe0, 0x4e, 0xa7, + 0x5d, 0x76, 0x8c, 0x3f, 0xe3, 0xbc, 0x82, 0xf4, + 0xa1, 0x51, 0x7a, 0x9d, 0x77, 0x53, 0xfc, 0x46, + 0xff, 0x00, 0x8f, 0x71, 0x63, 0x64, 0x2e, 0xb5, + 0x96, 0x3a, 0xdc, 0x5d, 0x5c, 0xca, 0xde, 0xa8, + 0x10, 0x09, 0x1b, 0x7f, 0xc9, 0x07, 0x44, 0x45, + 0x89, 0x8b, 0x9a, 0x49, 0xf1, 0xf6, 0xf3, 0x48, + 0x6a, 0xf7, 0xb0, 0x17, 0x1e, 0xea, 0xcb, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x50, 0x82, 0x54, 0x55, 0x7c, 0xbe, 0x46, + 0x31, 0xa5, 0xef, 0x21, 0xad, 0x1b, 0xc9, 0x34, + 0x0a, 0xb5, 0x94, 0xd7, 0x16, 0x70, 0x4a, 0xfb, + 0x5c, 0x74, 0x4f, 0xbc, 0xb8, 0x66, 0xc7, 0x3c, + 0x0f, 0xe1, 0x0f, 0xff, 0x00, 0xc8, 0x10, 0x59, + 0x27, 0xb8, 0x82, 0xde, 0x33, 0x2c, 0xf2, 0x36, + 0x38, 0xc6, 0xf7, 0xb8, 0xd0, 0x0f, 0x75, 0x55, + 0x32, 0xda, 0xe5, 0x95, 0x7c, 0x18, 0x58, 0xfc, + 0xa5, 0xec, 0xd8, 0xfb, 0x87, 0x78, 0xb1, 0x0e, + 0xeb, 0x5d, 0xb8, 0xaa, 0x5e, 0xa0, 0xd4, 0x80, + 0xc9, 0xd6, 0xe4, 0xef, 0x3c, 0xb6, 0x60, 0x4f, + 0x05, 0x9c, 0x5e, 0x2b, 0x19, 0xfe, 0xd7, 0x16, + 0xef, 0xf7, 0x55, 0x4b, 0x25, 0xa8, 0xaf, 0xef, + 0xc7, 0x56, 0xda, 0x5a, 0xc0, 0x37, 0x45, 0x17, + 0x8a, 0x3d, 0xda, 0x6f, 0x56, 0x92, 0xe5, 0x67, + 0xce, 0xea, 0x78, 0xdc, 0xee, 0xb3, 0x25, 0x73, + 0xe9, 0x4b, 0xb6, 0xee, 0x85, 0xa0, 0x32, 0x16, + 0xf7, 0xc3, 0x76, 0x1a, 0x2a, 0xae, 0x4b, 0x39, + 0x7d, 0x90, 0x34, 0x73, 0xba, 0xa8, 0x5b, 0xba, + 0x18, 0xfc, 0x56, 0xf4, 0x36, 0x8b, 0x5c, 0x45, + 0x79, 0x6b, 0x5e, 0x52, 0x88, 0x03, 0xba, 0x88, + 0x8a, 0x5a, 0x88, 0x89, 0x44, 0x05, 0x78, 0xd2, + 0x24, 0x0c, 0x28, 0xfe, 0xa1, 0xf8, 0x15, 0x7b, + 0x4f, 0x69, 0x6c, 0xa6, 0xa3, 0x99, 0xd1, 0x58, + 0x34, 0x11, 0x16, 0xd7, 0xbd, 0xc6, 0x80, 0x2b, + 0x4e, 0x17, 0x1f, 0x73, 0x8c, 0xb5, 0x92, 0xc2, + 0xe9, 0xbc, 0x13, 0x43, 0x29, 0x0e, 0x1d, 0xca, + 0x0d, 0xab, 0xa6, 0x97, 0xea, 0x63, 0x53, 0x73, + 0x61, 0x5d, 0xa5, 0x45, 0x56, 0xc7, 0x0b, 0x85, + 0x9b, 0x2a, 0xe7, 0x10, 0x78, 0x20, 0x67, 0xc6, + 0x93, 0xfc, 0x82, 0xdb, 0xbb, 0x49, 0x58, 0xca, + 0xd7, 0x32, 0xda, 0xec, 0x19, 0x9b, 0xb8, 0x0a, + 0x72, 0x72, 0x15, 0xd2, 0x72, 0x8d, 0xde, 0xf7, + 0x38, 0x89, 0xfa, 0x35, 0xd8, 0x4c, 0x08, 0xc8, + 0x35, 0xd7, 0x57, 0x2e, 0xea, 0xed, 0x23, 0xf8, + 0xc7, 0x75, 0x69, 0xbf, 0x6a, 0xce, 0x96, 0x1d, + 0x21, 0x24, 0x12, 0x47, 0x11, 0x25, 0xd1, 0xee, + 0x2d, 0x24, 0x92, 0x7b, 0x9c, 0xeb, 0xd3, 0x19, + 0x7c, 0xcc, 0x33, 0x24, 0xc5, 0x65, 0x9b, 0xc2, + 0x0d, 0x4c, 0x72, 0x01, 0x56, 0xb8, 0x11, 0xb4, + 0x29, 0x76, 0x6b, 0x4d, 0xd8, 0x81, 0xe4, 0xd6, + 0xe1, 0xfb, 0x76, 0x78, 0xa3, 0xde, 0x2b, 0x13, + 0x33, 0x77, 0x53, 0x3e, 0xc6, 0xea, 0x22, 0x2a, + 0xe2, 0x15, 0x39, 0x41, 0x63, 0xc8, 0xa1, 0x02, + 0xa7, 0x86, 0xbb, 0x0d, 0x17, 0xc5, 0x55, 0xdb, + 0x21, 0x15, 0x8e, 0x63, 0x04, 0xfb, 0xd1, 0x17, + 0x52, 0x5a, 0xd2, 0xe6, 0x38, 0x8e, 0x13, 0xb1, + 0x51, 0x41, 0x22, 0x95, 0x5a, 0x8c, 0xae, 0x39, + 0x33, 0x31, 0x55, 0xc5, 0xf1, 0x2f, 0x94, 0x32, + 0x58, 0xef, 0x6d, 0x5d, 0xc1, 0x79, 0x6c, 0x43, + 0xa3, 0x70, 0x34, 0xe2, 0x03, 0x7b, 0x4a, 0xe9, + 0x7a, 0x73, 0x3d, 0x6d, 0x9c, 0xc7, 0x36, 0xe6, + 0x3d, 0x92, 0xb7, 0xc5, 0x9e, 0x23, 0xbd, 0xaf, + 0x1b, 0xd7, 0x37, 0xad, 0x0d, 0x54, 0xe3, 0xb2, + 0x93, 0x60, 0x32, 0x43, 0x25, 0x6e, 0xd2, 0xfb, + 0x79, 0x28, 0xdb, 0xd8, 0x41, 0x20, 0x10, 0x4f, + 0xf3, 0x00, 0xe7, 0x0b, 0x39, 0xe3, 0x7b, 0x61, + 0xac, 0x32, 0xad, 0x92, 0xeb, 0x8a, 0x57, 0x85, + 0x9d, 0xdd, 0xbd, 0xed, 0xb4, 0x77, 0x56, 0xcf, + 0x12, 0x43, 0x2b, 0x43, 0x9a, 0xe6, 0xed, 0x1b, + 0x57, 0xba, 0xe4, 0xe8, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x0d, 0x66, 0xa2, + 0xfb, 0xa6, 0x6e, 0xf2, 0xd0, 0xdb, 0x3d, 0xac, + 0xb3, 0x63, 0xde, 0x68, 0xc6, 0x8a, 0xb8, 0xad, + 0xf6, 0xa2, 0xfb, 0xaa, 0x6e, 0xf2, 0xad, 0x4f, + 0xf7, 0x1c, 0xbf, 0xd3, 0x3f, 0x02, 0x09, 0xf4, + 0xf6, 0x1f, 0xce, 0x07, 0x48, 0x4f, 0x4f, 0xe1, + 0xfc, 0xe0, 0x74, 0x85, 0xc8, 0x36, 0xd4, 0xf8, + 0xc7, 0x79, 0xe5, 0x53, 0xb7, 0xe5, 0x1e, 0x95, + 0x6d, 0x5d, 0x7b, 0xd3, 0xf8, 0x7f, 0x38, 0x1d, + 0x21, 0x3d, 0x3f, 0x87, 0xf3, 0x81, 0xd2, 0x17, + 0x21, 0xdb, 0xf2, 0x8f, 0x4a, 0x6d, 0xf9, 0x47, + 0xa5, 0x2c, 0xa7, 0x5e, 0xf4, 0xfe, 0x1f, 0xce, + 0x07, 0x48, 0x4f, 0x4f, 0xe1, 0xfc, 0xe0, 0x74, + 0x85, 0xc8, 0x76, 0xfc, 0xa3, 0xd2, 0x9b, 0x7e, + 0x51, 0xe9, 0x4b, 0x29, 0xd8, 0xed, 0xb2, 0x98, + 0xfb, 0xb9, 0x3a, 0xbb, 0x69, 0x43, 0xdf, 0x4a, + 0xd0, 0x15, 0xef, 0x88, 0xfb, 0xf8, 0xfc, 0xc5, + 0xce, 0xb4, 0x05, 0x46, 0x73, 0x79, 0x3e, 0x21, + 0xde, 0x57, 0x46, 0xc4, 0xfd, 0xfe, 0x7e, 0x62, + 0x22, 0xd4, 0x88, 0x8a, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0xa9, 0xe6, 0xff, 0x00, + 0x34, 0xd8, 0xf7, 0xe3, 0xfd, 0xe5, 0x6b, 0x1c, + 0xaa, 0xa9, 0x9b, 0xfc, 0xd3, 0x63, 0xdf, 0x8f, + 0xf7, 0x95, 0xac, 0x20, 0x94, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x55, 0x3d, 0x57, 0xf7, + 0xd6, 0x3f, 0xbc, 0xdf, 0xee, 0x05, 0x6c, 0x55, + 0x3d, 0x57, 0xf7, 0xd6, 0x3f, 0xbc, 0x3f, 0xb8, + 0x82, 0xd7, 0xca, 0xa5, 0x42, 0x94, 0x05, 0x08, + 0x48, 0x03, 0x6e, 0xc0, 0xab, 0xd9, 0x4d, 0x45, + 0x29, 0x91, 0xd6, 0x98, 0xb6, 0x19, 0xa7, 0xdc, + 0x5c, 0x36, 0x80, 0x83, 0x69, 0x92, 0xcb, 0xd9, + 0xe3, 0x62, 0x2f, 0x9d, 0xe3, 0x8b, 0x91, 0x83, + 0x7a, 0xd0, 0x9b, 0x8c, 0xce, 0x7d, 0xc5, 0x91, + 0x34, 0xdb, 0x5a, 0x13, 0x42, 0xf3, 0xb0, 0x91, + 0xdc, 0x5e, 0xd8, 0xdd, 0x35, 0x24, 0xb2, 0xf9, + 0x66, 0x55, 0xe6, 0x59, 0x4e, 0xd1, 0x19, 0xdc, + 0x15, 0x8e, 0x38, 0xd9, 0x1b, 0x43, 0x18, 0xd0, + 0xd6, 0x8d, 0x80, 0x04, 0x1a, 0xdc, 0x66, 0x9e, + 0xb1, 0xc7, 0x8e, 0x20, 0xde, 0xb6, 0x5e, 0x57, + 0xbb, 0x7a, 0xd8, 0xb9, 0xb0, 0xb1, 0xbc, 0x4e, + 0x0d, 0x68, 0x1b, 0xc9, 0xa2, 0xf4, 0x58, 0xf7, + 0xd6, 0xa6, 0xee, 0xd5, 0xf0, 0x71, 0x70, 0x71, + 0x8a, 0x71, 0x04, 0x1e, 0x37, 0x93, 0x63, 0xbc, + 0x9a, 0x4e, 0xb1, 0xd1, 0x96, 0xf0, 0x9a, 0x8a, + 0x85, 0xa9, 0xd2, 0x73, 0xc2, 0xcb, 0x29, 0xaa, + 0xf0, 0xd6, 0x75, 0x87, 0x80, 0x13, 0xc8, 0xbc, + 0x8e, 0x8b, 0x0e, 0x68, 0x6b, 0xae, 0x1c, 0x40, + 0xe4, 0x52, 0xdd, 0x18, 0xd6, 0x8a, 0x32, 0xe1, + 0xcd, 0x1c, 0xc1, 0x51, 0x62, 0xf2, 0xab, 0x6e, + 0xd5, 0x9d, 0x21, 0x3c, 0xae, 0xdb, 0xb5, 0x67, + 0x48, 0x55, 0xef, 0x53, 0xcf, 0x9c, 0xbb, 0xa4, + 0xa7, 0xa9, 0xe7, 0xce, 0x5d, 0xd2, 0x54, 0x16, + 0x1f, 0x2b, 0xb6, 0xed, 0x59, 0xd2, 0x14, 0xb6, + 0xe6, 0x07, 0x9a, 0x36, 0x46, 0xb8, 0xf3, 0x02, + 0xab, 0xbe, 0xa7, 0x9f, 0x39, 0x77, 0x49, 0x5e, + 0x17, 0x7a, 0x62, 0xea, 0xce, 0x17, 0x5c, 0xda, + 0xdc, 0xb8, 0xc9, 0x17, 0x8d, 0xb7, 0x98, 0x20, + 0xb7, 0x2a, 0x7e, 0xa5, 0xfc, 0xd3, 0x8a, 0xef, + 0xab, 0x06, 0x0e, 0xf5, 0xf7, 0xb8, 0xe8, 0xa6, + 0x93, 0xe3, 0xfc, 0x57, 0x77, 0xc2, 0xaf, 0xea, + 0x5f, 0xcd, 0x18, 0xbe, 0xfa, 0x0c, 0xeb, 0xdb, + 0x2c, 0xcb, 0xee, 0xa4, 0x74, 0x2f, 0xa3, 0x09, + 0x05, 0xa2, 0xbb, 0x28, 0xbc, 0x73, 0x8e, 0xbd, + 0xb4, 0xd3, 0x83, 0x8d, 0xe5, 0xb3, 0xf1, 0x8a, + 0xb8, 0x6f, 0xa1, 0x59, 0x77, 0x7a, 0x80, 0xdb, + 0xdc, 0xbe, 0x10, 0xc2, 0x43, 0x28, 0xb0, 0xf5, + 0x25, 0xd9, 0xbd, 0xd3, 0x7e, 0x51, 0xc3, 0xc3, + 0x57, 0x8a, 0x84, 0x14, 0xf1, 0x93, 0xc9, 0x53, + 0xfe, 0xc3, 0xba, 0x4a, 0x91, 0x92, 0xc9, 0x93, + 0x41, 0x3b, 0x89, 0xef, 0x95, 0x8c, 0xb2, 0x2c, + 0xa9, 0xe5, 0x01, 0x67, 0x3c, 0xbc, 0xb8, 0xce, + 0x5b, 0xfc, 0xb1, 0x6c, 0xe7, 0x97, 0x97, 0x19, + 0xcb, 0x92, 0x4e, 0x47, 0x28, 0xdd, 0x8e, 0x9d, + 0xe0, 0xf3, 0x54, 0xa7, 0xa4, 0xb2, 0x5e, 0x70, + 0xe5, 0xf5, 0x91, 0xa7, 0x5a, 0x3b, 0xcb, 0x14, + 0x10, 0xa6, 0x9e, 0x7e, 0x7c, 0x31, 0xcb, 0x9c, + 0x18, 0x65, 0xe6, 0xc3, 0x1c, 0xb9, 0xc2, 0x5f, + 0x9c, 0xc8, 0xb5, 0xc5, 0xbd, 0x7b, 0x8f, 0xba, + 0x54, 0x7a, 0x7b, 0x23, 0xdb, 0xbb, 0xa4, 0xac, + 0x19, 0xff, 0x00, 0x9a, 0x57, 0x9d, 0x16, 0xda, + 0x6c, 0xbd, 0x3f, 0x91, 0x03, 0xf9, 0xee, 0xe9, + 0x2a, 0xc7, 0xa1, 0xf2, 0x57, 0xb7, 0x97, 0xd7, + 0x0c, 0x96, 0x52, 0xfa, 0x46, 0x78, 0x41, 0xe7, + 0x54, 0xaa, 0x2b, 0x5f, 0xb3, 0xc3, 0xc3, 0x91, + 0xba, 0x77, 0x20, 0x8c, 0x9e, 0x84, 0x16, 0x07, + 0x63, 0xb3, 0x9c, 0x47, 0xf8, 0x86, 0x95, 0x34, + 0xdb, 0xc8, 0xb1, 0x35, 0x24, 0x17, 0x90, 0xe9, + 0x99, 0x5b, 0x76, 0xee, 0x27, 0x17, 0x8a, 0x74, + 0xad, 0x8b, 0xb5, 0x33, 0x9a, 0xe7, 0x37, 0xab, + 0xdc, 0x48, 0x5a, 0xfd, 0x4f, 0x7e, 0x6f, 0xf4, + 0xcc, 0xb2, 0x16, 0xf0, 0x90, 0xf1, 0xb3, 0xdd, + 0x41, 0x63, 0xc2, 0x7d, 0xd3, 0x6b, 0xfd, 0x36, + 0xac, 0xe5, 0x83, 0x84, 0xfb, 0xa6, 0xd7, 0xfa, + 0x6d, 0x59, 0xc8, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x8a, + 0x10, 0x4a, 0x28, 0x24, 0x0d, 0xa7, 0x70, 0x5a, + 0x2c, 0x96, 0xb0, 0xc5, 0x59, 0x97, 0x45, 0x03, + 0x8d, 0xe5, 0xc8, 0xa8, 0x11, 0x43, 0xe3, 0xd0, + 0xff, 0x00, 0xba, 0x9b, 0x90, 0x6f, 0x49, 0xa2, + 0xae, 0x65, 0x75, 0xb6, 0x3a, 0xce, 0x67, 0x5a, + 0x5b, 0x32, 0x4b, 0xcb, 0xa1, 0x51, 0x48, 0x9a, + 0x5c, 0xc6, 0x9f, 0xf7, 0xb8, 0x6e, 0x54, 0xec, + 0xf6, 0xaa, 0xb8, 0x9c, 0x39, 0xd9, 0x6b, 0x8f, + 0x26, 0x87, 0x7b, 0x6c, 0xad, 0x9f, 0x57, 0xec, + 0xe7, 0x78, 0xa3, 0x82, 0xa6, 0xe4, 0x35, 0x4d, + 0xc4, 0x95, 0x8b, 0x1e, 0xdf, 0x25, 0x80, 0xec, + 0x27, 0x7b, 0xdc, 0x3b, 0xae, 0xde, 0xaa, 0x2d, + 0x7a, 0x87, 0x53, 0x39, 0xf2, 0xf5, 0x99, 0x4b, + 0xce, 0x20, 0x3e, 0x2d, 0x8c, 0x0e, 0xa5, 0x3e, + 0x73, 0x9b, 0xe0, 0x55, 0x0c, 0x96, 0xa8, 0xbd, + 0xbc, 0x26, 0x3b, 0x60, 0x2d, 0x6d, 0xf7, 0x70, + 0xb0, 0xed, 0x3d, 0xd2, 0x56, 0x9d, 0xce, 0x73, + 0xdc, 0x5e, 0xe2, 0x5c, 0xf7, 0x1a, 0x92, 0x54, + 0x77, 0x39, 0x10, 0xa0, 0x9e, 0x22, 0x49, 0xda, + 0x4e, 0xf2, 0x77, 0x94, 0x44, 0x51, 0x4e, 0xef, + 0x22, 0x27, 0x2f, 0x75, 0x3e, 0x04, 0x04, 0x4f, + 0x85, 0x36, 0x7b, 0x9c, 0xe8, 0x09, 0xfe, 0x39, + 0x97, 0xa3, 0x6d, 0xae, 0xa4, 0x8c, 0xcb, 0x1c, + 0x2f, 0x74, 0x63, 0x7b, 0xc0, 0x24, 0x74, 0xab, + 0x47, 0xb3, 0xac, 0x56, 0x9f, 0xc9, 0xe5, 0x5f, + 0x6d, 0x98, 0xaf, 0x5b, 0x41, 0xd4, 0x46, 0x76, + 0x02, 0x7b, 0xa5, 0x06, 0x2e, 0x96, 0x3a, 0xaa, + 0xca, 0x3b, 0x8c, 0x9e, 0x11, 0xaf, 0x6c, 0x0c, + 0x69, 0x6c, 0xaf, 0xa5, 0x5a, 0x7d, 0xc3, 0xb3, + 0x62, 0xe8, 0x76, 0xda, 0x6e, 0x59, 0x74, 0xfb, + 0x72, 0x4d, 0xba, 0x37, 0xb7, 0x73, 0x0e, 0xbe, + 0x49, 0x37, 0x57, 0x66, 0xd6, 0x8e, 0xf2, 0xf5, + 0xd5, 0x12, 0xb7, 0x44, 0xe9, 0x57, 0xc1, 0x8d, + 0x60, 0x77, 0x5f, 0x21, 0x6b, 0x4b, 0x86, 0xc1, + 0xc5, 0xbf, 0x89, 0x60, 0x7b, 0x32, 0xce, 0xbd, + 0x96, 0x1e, 0x4b, 0x78, 0xfa, 0xb2, 0x69, 0x09, + 0x61, 0x3b, 0x81, 0x3c, 0x83, 0xb8, 0xb5, 0x8d, + 0xde, 0xc6, 0x72, 0xae, 0x2b, 0x1e, 0x9b, 0x6f, + 0x94, 0xe9, 0xf9, 0x60, 0x81, 0xdd, 0x5c, 0xce, + 0xe2, 0x69, 0x23, 0x61, 0x6b, 0x97, 0x83, 0x5b, + 0x89, 0xd3, 0x6d, 0xeb, 0x25, 0x94, 0xdc, 0x64, + 0x29, 0xb5, 0x81, 0xd5, 0x3e, 0xe8, 0x4c, 0xa0, + 0xb8, 0xd3, 0xd9, 0x0f, 0x48, 0x5a, 0xb7, 0x8a, + 0xc6, 0x73, 0xfc, 0x58, 0xc6, 0xe0, 0x79, 0xf6, + 0x2f, 0x49, 0x6f, 0x34, 0xa6, 0x51, 0xed, 0xb9, + 0xb9, 0xa3, 0x65, 0xa6, 0xde, 0x2f, 0x14, 0xf7, + 0x8f, 0x3a, 0xd7, 0xc2, 0x79, 0x27, 0x0a, 0xdd, + 0x4c, 0x2c, 0x94, 0x57, 0xd9, 0x8c, 0x73, 0xb2, + 0xf7, 0x1c, 0x31, 0xc1, 0x08, 0x2e, 0x86, 0x11, + 0xb6, 0xa0, 0x73, 0x95, 0xf5, 0x6d, 0xa8, 0xb0, + 0x4f, 0xb3, 0x8e, 0x1b, 0x9b, 0x40, 0xd7, 0xb0, + 0x0a, 0x35, 0xad, 0xa8, 0xaf, 0x3d, 0x57, 0x86, + 0xa0, 0xd4, 0x50, 0x4f, 0x6d, 0xe8, 0xec, 0x7b, + 0x78, 0x6d, 0xc5, 0x03, 0x9f, 0xba, 0xa0, 0x72, + 0x00, 0xab, 0x64, 0xab, 0x11, 0xcd, 0x26, 0x79, + 0x37, 0x99, 0xad, 0x4b, 0x25, 0xf4, 0x22, 0xce, + 0xde, 0x31, 0x05, 0xab, 0x76, 0x1a, 0x1d, 0xa4, + 0x73, 0x2d, 0x19, 0x2a, 0x38, 0x97, 0xc9, 0x2b, + 0x55, 0x10, 0xce, 0xd9, 0x49, 0x35, 0x5f, 0x24, + 0x82, 0xd2, 0x1d, 0xb4, 0x73, 0x14, 0x25, 0x41, + 0x22, 0x88, 0x53, 0x6f, 0xa3, 0x33, 0xe7, 0x0b, + 0x7c, 0x31, 0x97, 0x4f, 0xa6, 0x3a, 0xe9, 0xdf, + 0xc0, 0x71, 0x3b, 0x23, 0x93, 0xe4, 0xf7, 0x8a, + 0xe9, 0x80, 0x82, 0x2a, 0x0d, 0x41, 0xdc, 0xb8, + 0xbc, 0xd1, 0xb2, 0x66, 0x16, 0x3b, 0x97, 0x68, + 0x3c, 0xa0, 0xab, 0xbe, 0x85, 0xd4, 0xce, 0xba, + 0x8f, 0xd1, 0x19, 0x07, 0x8f, 0x2c, 0x80, 0x52, + 0x17, 0x1d, 0x9d, 0x64, 0x63, 0x77, 0x42, 0xe5, + 0x96, 0x35, 0x2e, 0x98, 0xce, 0xc5, 0xc9, 0x14, + 0x05, 0x2b, 0x2d, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x35, 0x9a, 0x8b, 0xee, 0x99, 0xbb, + 0xca, 0xb3, 0x3f, 0xdc, 0x72, 0xff, 0x00, 0x4c, + 0xfc, 0x0a, 0xcd, 0xa8, 0xbe, 0xe9, 0x9b, 0xbc, + 0xab, 0x33, 0x9a, 0x60, 0xe5, 0xfe, 0x99, 0xf8, + 0x10, 0x72, 0x3e, 0x53, 0xdf, 0x28, 0x95, 0x75, + 0x4e, 0xc3, 0xbc, 0xf2, 0x26, 0xdf, 0x92, 0x51, + 0x44, 0x4d, 0xbf, 0x24, 0xa9, 0xf1, 0xb9, 0x8a, + 0x08, 0x45, 0x3e, 0x37, 0x31, 0x51, 0xb7, 0xe4, + 0x94, 0x16, 0x5d, 0x03, 0xf7, 0xdf, 0xff, 0x00, + 0x02, 0xba, 0x36, 0x27, 0xef, 0xf3, 0xf3, 0x17, + 0x39, 0xf6, 0x7f, 0x53, 0x9c, 0x3b, 0x08, 0xf1, + 0x0a, 0xe8, 0xb8, 0x9f, 0xbf, 0xcf, 0xcc, 0x55, + 0x16, 0xb4, 0x44, 0x50, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x05, 0x4f, 0x37, 0xf9, 0xa6, + 0xc7, 0xbf, 0x1f, 0xef, 0x2b, 0x58, 0xe5, 0x55, + 0x4c, 0xdf, 0xe6, 0x9b, 0x1e, 0xfc, 0x7f, 0xbc, + 0xad, 0x68, 0x25, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x15, 0x4f, 0x55, 0xfd, 0xf5, 0x8f, + 0xef, 0x0f, 0xee, 0x05, 0x6c, 0x55, 0x2d, 0x57, + 0xf7, 0xd6, 0x3b, 0xbc, 0xdf, 0xee, 0x04, 0x16, + 0xc5, 0x2a, 0x14, 0xa0, 0xf3, 0x9f, 0xf9, 0x2f, + 0xf9, 0xa7, 0xe0, 0x55, 0xfd, 0x1d, 0x14, 0x62, + 0x2b, 0x99, 0x03, 0x7c, 0x7e, 0xb5, 0xc3, 0x8b, + 0x96, 0x95, 0x56, 0x19, 0xff, 0x00, 0x92, 0xff, + 0x00, 0x9a, 0x7e, 0x05, 0xa1, 0xd1, 0xff, 0x00, + 0xf5, 0xee, 0x3f, 0xaa, 0xe4, 0x16, 0x05, 0x28, + 0x88, 0x0a, 0x14, 0xa2, 0x0a, 0xed, 0xf6, 0xa7, + 0x9a, 0xd6, 0xee, 0x4b, 0x76, 0xdb, 0x39, 0xe1, + 0x9b, 0x38, 0x86, 0xe2, 0xbc, 0x3d, 0x6f, 0xb8, + 0xf3, 0x47, 0x7b, 0xea, 0xc6, 0xf6, 0xdb, 0x07, + 0x55, 0xe1, 0x95, 0xee, 0x81, 0x55, 0x14, 0xb3, + 0xe6, 0x8f, 0xa0, 0x20, 0xaf, 0x7a, 0xdf, 0x3f, + 0x9a, 0x3b, 0xdf, 0x5f, 0x0e, 0xd6, 0xae, 0x69, + 0x0d, 0x75, 0xb3, 0x9a, 0xe3, 0xb8, 0x1e, 0x55, + 0x64, 0xa5, 0x9f, 0x34, 0x7d, 0x01, 0x68, 0x75, + 0x5f, 0x91, 0x79, 0x3c, 0x42, 0x30, 0xdf, 0x29, + 0xe3, 0x1c, 0x01, 0xb4, 0xae, 0xfe, 0xe2, 0x0f, + 0x8f, 0x5b, 0xe7, 0xf3, 0x47, 0x74, 0x15, 0xe3, + 0x75, 0xa8, 0xf2, 0x37, 0xb0, 0xba, 0xd6, 0xda, + 0xd9, 0xcd, 0x92, 0x5f, 0x17, 0x88, 0x83, 0xb8, + 0xab, 0x2d, 0xac, 0x11, 0xf9, 0x3c, 0x7c, 0x71, + 0xb7, 0x8b, 0x84, 0x57, 0xc5, 0x0b, 0xd8, 0x43, + 0x13, 0x4d, 0x5a, 0xc6, 0x83, 0xce, 0x00, 0x41, + 0x87, 0x84, 0xb1, 0x75, 0x8e, 0x3e, 0x38, 0x1d, + 0xf1, 0xfe, 0x33, 0xfb, 0xe7, 0x7a, 0xaf, 0x6a, + 0x6f, 0xcd, 0x38, 0xaa, 0x73, 0xab, 0x82, 0xa8, + 0x6a, 0x53, 0x4d, 0x51, 0x8b, 0xef, 0x8f, 0x85, + 0x05, 0x8e, 0x48, 0x6c, 0x1c, 0xea, 0xc8, 0x18, + 0x5e, 0x69, 0xc5, 0x5d, 0xeb, 0x4f, 0xab, 0xdb, + 0x13, 0x70, 0x44, 0x42, 0x07, 0x07, 0x18, 0x1b, + 0x37, 0x2f, 0x5b, 0xcc, 0x1d, 0xdc, 0xf7, 0x32, + 0x4c, 0xc9, 0x68, 0x1f, 0xb8, 0x55, 0x62, 0x6a, + 0x1b, 0x67, 0xda, 0x69, 0xa1, 0x04, 0xa7, 0x89, + 0xc1, 0xe0, 0xd5, 0x05, 0x23, 0xba, 0xbd, 0xec, + 0x8f, 0xfc, 0x80, 0xb1, 0x9e, 0x4d, 0x02, 0xc8, + 0xb0, 0xfe, 0x7b, 0x57, 0x0d, 0x4d, 0x4b, 0xfb, + 0x98, 0x57, 0xe9, 0xc6, 0x6d, 0xdf, 0xd4, 0x7a, + 0x4c, 0xb1, 0xf4, 0x58, 0xfa, 0x99, 0xca, 0x2b, + 0x53, 0xcd, 0x8c, 0x63, 0xec, 0x7b, 0x5f, 0x8a, + 0xdc, 0x37, 0xba, 0xbe, 0x2e, 0x62, 0x63, 0x58, + 0x08, 0x14, 0x2b, 0xee, 0xfb, 0xfe, 0xc3, 0x3d, + 0xc5, 0x17, 0x7f, 0xcb, 0x0b, 0xd9, 0xe8, 0x22, + 0x27, 0xd1, 0x65, 0x33, 0x11, 0x78, 0xc7, 0xc5, + 0xf1, 0xa7, 0x2c, 0xa3, 0x53, 0xd2, 0xe3, 0x13, + 0x3e, 0x5c, 0xa3, 0x6c, 0x35, 0x72, 0xc3, 0x23, + 0x9e, 0x5c, 0x06, 0xc2, 0xbe, 0x3c, 0x9e, 0x5e, + 0x65, 0x9b, 0x47, 0x9f, 0xd9, 0x71, 0xe6, 0x34, + 0x4e, 0x19, 0x3e, 0x43, 0xba, 0x17, 0x28, 0x7d, + 0x2e, 0x32, 0xc2, 0xf2, 0x79, 0x39, 0x95, 0xa7, + 0xd9, 0xf4, 0x45, 0xb9, 0x29, 0xc3, 0xb9, 0x59, + 0x4a, 0x2d, 0x17, 0x03, 0xfe, 0x43, 0xba, 0x15, + 0x93, 0x43, 0x71, 0x0c, 0x9c, 0xa1, 0xc0, 0x8f, + 0x13, 0x95, 0x05, 0xd3, 0xd1, 0xf6, 0x64, 0x93, + 0xd5, 0x37, 0x69, 0xe6, 0x5a, 0x2d, 0x6d, 0x0c, + 0x50, 0xe9, 0xf9, 0x1b, 0x13, 0x43, 0x47, 0x10, + 0x26, 0x8a, 0xca, 0x15, 0x77, 0x5e, 0x7d, 0xc1, + 0x2f, 0x74, 0x84, 0x18, 0xb8, 0xdd, 0x75, 0xa6, + 0xed, 0xec, 0x20, 0x82, 0x5b, 0xa6, 0xb6, 0x48, + 0xd8, 0x1a, 0xe6, 0x9e, 0x42, 0x16, 0x4f, 0xea, + 0x06, 0x96, 0xf3, 0xc6, 0xf4, 0x85, 0xca, 0x4f, + 0xb3, 0x7d, 0x45, 0x76, 0x7c, 0xa2, 0x28, 0xc1, + 0x8e, 0x5f, 0x19, 0xa7, 0xb8, 0x53, 0xf4, 0xbb, + 0x53, 0x76, 0x43, 0xa5, 0x07, 0x56, 0xfd, 0x41, + 0xd2, 0xde, 0x78, 0xde, 0x90, 0x9f, 0xa8, 0x1a, + 0x5e, 0xbf, 0xf7, 0x1a, 0xb9, 0x4f, 0xe9, 0x76, + 0xa6, 0xec, 0x87, 0x4a, 0x7e, 0x97, 0x6a, 0x6e, + 0xc8, 0x74, 0xa0, 0xea, 0xdf, 0xa8, 0x3a, 0x5b, + 0xcf, 0x1b, 0xd2, 0x13, 0xf5, 0x07, 0x4b, 0x79, + 0xe3, 0x7a, 0x42, 0xe5, 0x3f, 0xa5, 0xda, 0x9b, + 0xb2, 0x1d, 0x29, 0xfa, 0x5d, 0xa9, 0xbb, 0x21, + 0xd2, 0x83, 0xab, 0x7e, 0xa0, 0xe9, 0x6f, 0x3c, + 0x6f, 0x48, 0x4f, 0xd4, 0x0d, 0x2d, 0xe7, 0x8d, + 0xe9, 0x0b, 0x94, 0xfe, 0x97, 0x6a, 0x6e, 0xc8, + 0x74, 0xa7, 0xe9, 0x76, 0xa6, 0xec, 0x87, 0x4a, + 0x0e, 0xad, 0xfa, 0x83, 0xa5, 0xbc, 0xf1, 0xbd, + 0x21, 0x07, 0xb4, 0x1d, 0x2e, 0x7f, 0xfd, 0xb6, + 0xae, 0x53, 0xfa, 0x5d, 0xa9, 0xbb, 0x21, 0xd2, + 0x9f, 0xa5, 0xda, 0x9b, 0xb2, 0x1d, 0x28, 0x3a, + 0xb7, 0xea, 0x0e, 0x96, 0xf3, 0xc6, 0xf4, 0x85, + 0x3f, 0xa8, 0x1a, 0x5b, 0xcf, 0x1a, 0xb9, 0x47, + 0xe9, 0x76, 0xa6, 0xec, 0x87, 0x4a, 0x7e, 0x97, + 0x6a, 0x6e, 0xc8, 0x74, 0xa0, 0xea, 0xdf, 0xa8, + 0x3a, 0x5b, 0xcf, 0x1b, 0xd2, 0x13, 0xf5, 0x07, + 0x4b, 0xf9, 0xe3, 0x7a, 0x42, 0xe5, 0x3f, 0xa5, + 0xda, 0x9b, 0xb2, 0x1d, 0x29, 0xfa, 0x5d, 0xa9, + 0xbb, 0x21, 0xd2, 0x83, 0xab, 0x7e, 0xa0, 0xe9, + 0x6f, 0x3c, 0x6f, 0x48, 0x4f, 0xd4, 0x1d, 0x2d, + 0xe7, 0x8d, 0xe9, 0x0b, 0x94, 0xfe, 0x97, 0x6a, + 0x6e, 0xc8, 0x74, 0xa7, 0xe9, 0x76, 0xa6, 0xec, + 0x87, 0x4a, 0x0e, 0xad, 0xfa, 0x83, 0xa5, 0xfc, + 0xed, 0xa9, 0xfa, 0x83, 0xa5, 0xbc, 0xf1, 0xbd, + 0x21, 0x72, 0x9f, 0xd2, 0xed, 0x4d, 0x4f, 0xe5, + 0x0e, 0x94, 0xfd, 0x2e, 0xd4, 0xdd, 0x90, 0xe9, + 0x41, 0xd5, 0xbf, 0x50, 0x74, 0xb7, 0x9e, 0x37, + 0xa4, 0x27, 0xea, 0x0e, 0x97, 0xf3, 0xc6, 0xf4, + 0x85, 0xca, 0x7f, 0x4b, 0xb5, 0x37, 0x64, 0x3a, + 0x53, 0xf4, 0xbb, 0x53, 0x76, 0x43, 0xa5, 0x07, + 0x56, 0xfd, 0x41, 0xd2, 0xde, 0x78, 0xde, 0x90, + 0x9f, 0xa8, 0x3a, 0x5b, 0xcf, 0x1b, 0xd2, 0x17, + 0x29, 0xfd, 0x2e, 0xd4, 0xdd, 0x90, 0xe9, 0x4f, + 0xd2, 0xed, 0x4d, 0xd9, 0x0e, 0x94, 0x1d, 0x5b, + 0xf5, 0x07, 0x4b, 0xf9, 0xdb, 0x53, 0xf5, 0x03, + 0x4b, 0xf9, 0xe3, 0x7d, 0xe5, 0xca, 0x7f, 0x4b, + 0xb5, 0x37, 0x64, 0x3a, 0x53, 0xf4, 0xbb, 0x53, + 0x76, 0x43, 0xa5, 0x07, 0x56, 0xfd, 0x41, 0xd2, + 0xde, 0x78, 0xde, 0x90, 0x9f, 0xa8, 0x1a, 0x5b, + 0xcf, 0x1b, 0xd2, 0x17, 0x29, 0xfd, 0x2e, 0xd4, + 0xdd, 0x90, 0xe9, 0x4f, 0xd2, 0xed, 0x4d, 0xd9, + 0x0e, 0x94, 0x1d, 0x5b, 0xf5, 0x07, 0x4b, 0x79, + 0xe3, 0x7a, 0x42, 0x7e, 0xa0, 0xe9, 0x6f, 0x3c, + 0x6f, 0x48, 0x5c, 0xa7, 0xf4, 0xbb, 0x53, 0x76, + 0x43, 0xa5, 0x3f, 0x4b, 0xb5, 0x37, 0x64, 0x3a, + 0x50, 0x75, 0x6f, 0xd4, 0x1d, 0x2d, 0xe7, 0x8d, + 0xe9, 0x09, 0xfa, 0x81, 0xa5, 0xfc, 0xf1, 0xab, + 0x94, 0xfe, 0x97, 0xea, 0x6e, 0xc8, 0x74, 0xad, + 0x7e, 0x43, 0x47, 0x64, 0x31, 0xd2, 0x08, 0xee, + 0x9c, 0xc1, 0x21, 0x34, 0x11, 0x34, 0xd5, 0xe7, + 0xbc, 0x10, 0x76, 0x6f, 0xd4, 0x1d, 0x2d, 0xe7, + 0x8d, 0x5f, 0x17, 0x3a, 0xff, 0x00, 0x04, 0xc8, + 0xdd, 0xe4, 0xcf, 0x37, 0x33, 0x7e, 0xcc, 0x4c, + 0x15, 0x26, 0xab, 0x93, 0x43, 0xa6, 0x6d, 0xed, + 0x61, 0x6d, 0xce, 0x4e, 0x41, 0x6b, 0x1f, 0x31, + 0xf8, 0xee, 0x1f, 0x34, 0xee, 0x51, 0x71, 0xa9, + 0xad, 0xed, 0x22, 0xf2, 0x5c, 0x34, 0x0d, 0x8d, + 0xa0, 0x70, 0xf9, 0x43, 0xc0, 0x2f, 0x3d, 0xe2, + 0x55, 0x4b, 0x5c, 0x73, 0x9a, 0xae, 0xf6, 0xea, + 0x27, 0x3f, 0x27, 0x28, 0xc7, 0xda, 0xd0, 0xf0, + 0xdb, 0xc2, 0xfa, 0xc8, 0xe0, 0x79, 0xc8, 0xa1, + 0x0a, 0x97, 0x75, 0xaa, 0x9d, 0x13, 0x1d, 0x06, + 0x1e, 0x3f, 0x26, 0x88, 0xef, 0x91, 0xdb, 0x64, + 0x77, 0xff, 0x00, 0x23, 0xb5, 0x68, 0xa7, 0x9e, + 0x7b, 0x87, 0xf1, 0xcf, 0x23, 0xa4, 0x71, 0xdb, + 0x57, 0x1a, 0xaf, 0x80, 0x97, 0x05, 0x3e, 0xa4, + 0x7b, 0xe4, 0x79, 0x7c, 0x8e, 0x2f, 0x79, 0xda, + 0x5c, 0xed, 0xa6, 0xab, 0xe5, 0x10, 0xa8, 0xa2, + 0x22, 0x20, 0x22, 0x14, 0x04, 0xf2, 0x20, 0xf5, + 0xb6, 0xb4, 0xb9, 0xbc, 0x9d, 0x96, 0xd6, 0xd1, + 0x99, 0x67, 0x79, 0xa3, 0x58, 0xdd, 0xa4, 0xab, + 0xee, 0x2b, 0xd8, 0xf6, 0x46, 0xe2, 0x16, 0xcb, + 0x7f, 0x72, 0x2d, 0x5c, 0xed, 0xa1, 0x8d, 0x01, + 0xc7, 0xdd, 0xaa, 0xcb, 0xf6, 0x33, 0x8f, 0xb5, + 0x96, 0x4b, 0xcb, 0xf7, 0xb4, 0x3a, 0x78, 0x48, + 0x64, 0x64, 0xf2, 0x02, 0x16, 0x36, 0xb2, 0xcb, + 0x6b, 0x8b, 0x9c, 0xf4, 0x96, 0xf6, 0x71, 0xcf, + 0x1c, 0x10, 0xb8, 0xb6, 0xdd, 0xb1, 0xb4, 0xd1, + 0xc3, 0x9e, 0xa3, 0x7a, 0x0d, 0x56, 0xa9, 0xf6, + 0x71, 0x95, 0xc0, 0xdb, 0xf9, 0x64, 0x6e, 0xf2, + 0x9b, 0x51, 0xfc, 0xc7, 0x0d, 0xed, 0xef, 0x81, + 0xc8, 0xb1, 0x74, 0x0e, 0x9a, 0x8b, 0x51, 0x66, + 0xc4, 0x17, 0x1f, 0xf5, 0x60, 0x6f, 0x59, 0x28, + 0x1f, 0xb4, 0x39, 0x95, 0x8a, 0x7c, 0x3f, 0xb4, + 0xcd, 0x47, 0x67, 0x1d, 0xb5, 0xcb, 0x84, 0x70, + 0x31, 0xb4, 0x2d, 0x79, 0xea, 0xcb, 0xbe, 0x75, + 0x17, 0xa6, 0x8b, 0xc6, 0x64, 0xb4, 0x6e, 0xa3, + 0x11, 0xe5, 0xa3, 0xe1, 0x83, 0x20, 0xce, 0xaa, + 0x39, 0xdb, 0xb5, 0x81, 0xd5, 0xd9, 0x52, 0x83, + 0x6f, 0x75, 0xac, 0x70, 0xd8, 0xdc, 0xab, 0x74, + 0xfe, 0x37, 0x16, 0xdb, 0xa8, 0xe2, 0x22, 0x39, + 0x0b, 0x1a, 0x0d, 0x0e, 0xee, 0x6d, 0xa9, 0xad, + 0x34, 0xbe, 0x25, 0xb6, 0xac, 0xce, 0xd9, 0xbd, + 0x98, 0xcc, 0x84, 0x40, 0x4a, 0xd0, 0x48, 0x60, + 0x71, 0xdf, 0xc3, 0x4e, 0x75, 0xb3, 0xd4, 0x9c, + 0x3a, 0x72, 0xde, 0x5b, 0xec, 0x36, 0x33, 0xca, + 0x6f, 0x6e, 0x9c, 0x4b, 0xa4, 0x68, 0xe2, 0x2d, + 0x27, 0x97, 0x72, 0xae, 0xe9, 0x4c, 0x36, 0x5b, + 0x52, 0xde, 0xcb, 0x97, 0xd5, 0x81, 0xee, 0xb6, + 0x88, 0x56, 0x28, 0x9f, 0x58, 0xdb, 0x51, 0xcb, + 0xc3, 0xb8, 0x80, 0x83, 0x79, 0x8c, 0xba, 0xb1, + 0xd7, 0xba, 0x55, 0xf6, 0xb7, 0x34, 0xf2, 0x96, + 0x0e, 0x17, 0xb4, 0x1d, 0xa1, 0xe0, 0x50, 0x3b, + 0xdd, 0x54, 0xfc, 0x6e, 0x3e, 0xeb, 0x11, 0x0b, + 0xac, 0x6e, 0x5a, 0x59, 0x35, 0xbc, 0xa6, 0x87, + 0x9c, 0x0d, 0xc5, 0xab, 0x55, 0x1e, 0xa7, 0x7e, + 0x9d, 0xd5, 0x97, 0x77, 0x78, 0xc0, 0x1d, 0x69, + 0xd6, 0x16, 0xf5, 0x20, 0xd1, 0xae, 0x68, 0x5b, + 0xb6, 0x67, 0x6e, 0xb3, 0xd1, 0x7a, 0x42, 0xec, + 0x06, 0xbd, 0xc4, 0xb5, 0xac, 0x68, 0xd8, 0x1b, + 0xc8, 0x2a, 0xb7, 0xa7, 0xbd, 0x9c, 0xf7, 0x2c, + 0x53, 0xea, 0xb3, 0x3e, 0x27, 0xc8, 0xa7, 0x84, + 0x4b, 0x29, 0x1c, 0x0e, 0x71, 0xf7, 0x8a, 0xae, + 0x38, 0x37, 0x71, 0x00, 0xfb, 0xe8, 0x48, 0x50, + 0x4f, 0x32, 0xe9, 0x51, 0x1b, 0x9c, 0xf7, 0xa4, + 0x9a, 0x50, 0x73, 0x28, 0xaa, 0x87, 0x15, 0xf3, + 0x5e, 0x64, 0x29, 0x24, 0xa8, 0x2e, 0xd8, 0xa0, + 0x92, 0xa0, 0x94, 0x52, 0xaa, 0x09, 0x50, 0x4a, + 0x8e, 0x25, 0x04, 0xd5, 0x7c, 0x38, 0xcf, 0x14, + 0xac, 0xbc, 0xb4, 0x77, 0x57, 0x77, 0x6e, 0x78, + 0xa2, 0x7f, 0x2e, 0xcf, 0xd9, 0xf7, 0x54, 0x92, + 0x54, 0x55, 0x49, 0xda, 0xb1, 0x6e, 0xa5, 0xa6, + 0x35, 0x0c, 0x39, 0xdc, 0x73, 0x67, 0x6f, 0x8b, + 0x71, 0x1f, 0x89, 0x71, 0x17, 0x2b, 0x5c, 0x16, + 0xe5, 0x71, 0x7c, 0x7e, 0x56, 0xeb, 0x05, 0x91, + 0x6e, 0x52, 0xd3, 0xc7, 0x67, 0xc5, 0xbb, 0x83, + 0x91, 0xec, 0xd9, 0xb7, 0xbe, 0x17, 0x5e, 0xc6, + 0xe4, 0x6d, 0x72, 0x76, 0x71, 0xde, 0x5a, 0xbc, + 0x3e, 0x29, 0x40, 0x20, 0x8e, 0x4e, 0xe1, 0x5c, + 0xe6, 0x2a, 0x5b, 0x89, 0x65, 0x22, 0x22, 0x8a, + 0x22, 0x2d, 0x5e, 0x7b, 0x50, 0xe3, 0xf0, 0x76, + 0x8e, 0xb8, 0xbc, 0x90, 0x02, 0x05, 0x5a, 0xca, + 0xed, 0x25, 0x06, 0xc9, 0xef, 0x6b, 0x05, 0x5c, + 0x40, 0x1c, 0xe5, 0x7c, 0x79, 0x4c, 0x1d, 0xa3, + 0x7a, 0x57, 0x08, 0xd4, 0x7a, 0xff, 0x00, 0x37, + 0x9c, 0xba, 0x2d, 0xb7, 0x7b, 0xa0, 0x82, 0xb4, + 0x8a, 0x36, 0x6c, 0x3e, 0xf2, 0xd5, 0x79, 0x6e, + 0xa8, 0xed, 0x2e, 0x7a, 0x5d, 0xe1, 0x41, 0xfa, + 0x33, 0xca, 0x60, 0xed, 0x1b, 0xd2, 0x9e, 0x53, + 0x07, 0x68, 0xde, 0x95, 0xf9, 0xcf, 0xcb, 0x75, + 0x47, 0xcb, 0xb9, 0xe9, 0x72, 0x79, 0x6e, 0xa8, + 0xf9, 0x77, 0x3d, 0x2e, 0x41, 0xfa, 0x33, 0xca, + 0x60, 0xed, 0x1b, 0xd2, 0x9e, 0x53, 0x07, 0x68, + 0xde, 0x95, 0xf9, 0xcf, 0xcb, 0x75, 0x47, 0xcb, + 0xb9, 0xe9, 0x72, 0x79, 0x6e, 0xa8, 0xf9, 0x77, + 0x3d, 0x2e, 0x41, 0xfa, 0x33, 0xca, 0x60, 0xed, + 0x1b, 0xd2, 0x9e, 0x53, 0x07, 0x68, 0xde, 0x95, + 0xf9, 0xcf, 0xcb, 0x75, 0x47, 0xcb, 0xb9, 0xe9, + 0x77, 0x85, 0x3c, 0xb7, 0x54, 0x76, 0x97, 0x3d, + 0x2e, 0xf0, 0xa0, 0xef, 0x99, 0xf9, 0x62, 0x7e, + 0x2a, 0x60, 0xd7, 0xb4, 0x9a, 0x6e, 0xaa, 0xd1, + 0x45, 0xc2, 0x31, 0xd5, 0x7b, 0x78, 0x98, 0x19, + 0x57, 0x0e, 0x75, 0xcc, 0x70, 0x17, 0x59, 0xe7, + 0xe4, 0xe2, 0x6d, 0xdb, 0xa7, 0x30, 0x9f, 0x8c, + 0x1e, 0x4d, 0x3d, 0xf5, 0xd3, 0x4f, 0xdd, 0x92, + 0x73, 0x75, 0x67, 0xe0, 0x56, 0x05, 0x41, 0xda, + 0xa7, 0x4e, 0x35, 0xee, 0x69, 0xb1, 0x15, 0x69, + 0xa1, 0xd8, 0xbd, 0x61, 0xcf, 0xe9, 0xe9, 0xad, + 0xe5, 0xb8, 0x16, 0x40, 0x08, 0x69, 0x51, 0x4e, + 0x75, 0x49, 0x93, 0xf9, 0xd2, 0x7c, 0xe2, 0xb3, + 0xec, 0x7e, 0xeb, 0xbd, 0xff, 0x00, 0xe2, 0xa4, + 0xaa, 0xc1, 0xeb, 0x56, 0x9b, 0xa5, 0x7c, 0x80, + 0x74, 0x2f, 0x49, 0x75, 0x26, 0x9d, 0x8f, 0x86, + 0xb6, 0x23, 0xc6, 0x15, 0x1b, 0x15, 0x24, 0x8f, + 0x15, 0x65, 0x5e, 0x6d, 0x11, 0x7c, 0xc0, 0x82, + 0xdb, 0x6b, 0xa8, 0xf4, 0xed, 0xc4, 0xed, 0x81, + 0xb6, 0x20, 0x17, 0x9a, 0x02, 0x42, 0xf9, 0x97, + 0x53, 0x69, 0xc8, 0xe5, 0x7c, 0x66, 0xc4, 0x7f, + 0x0c, 0x91, 0xbb, 0x99, 0x55, 0xf1, 0x1f, 0x79, + 0x42, 0xbc, 0x6f, 0x3f, 0xee, 0x4f, 0xf3, 0xdc, + 0x83, 0xa1, 0xe9, 0x9c, 0xb6, 0x27, 0x21, 0x76, + 0xf6, 0x59, 0x5b, 0x08, 0x64, 0x60, 0xda, 0xee, + 0xe2, 0xb0, 0xe2, 0x7e, 0xff, 0x00, 0x3f, 0x31, + 0x50, 0xbd, 0x9c, 0xfd, 0xe1, 0x3f, 0xcd, 0x57, + 0xdc, 0x47, 0xdf, 0xe7, 0xe6, 0x2a, 0x8b, 0x5a, + 0x22, 0x28, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x82, 0xa7, 0x9b, 0xfc, 0xd3, 0x61, 0xdf, + 0x8f, 0xf7, 0x95, 0xac, 0x2a, 0xa6, 0x6f, 0xf3, + 0x4d, 0x8f, 0x7e, 0x3f, 0xde, 0x56, 0xb1, 0xca, + 0x82, 0x51, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x54, 0xb5, 0x5f, 0xdf, 0x78, 0xee, 0xf3, + 0x7f, 0xb8, 0x15, 0xb5, 0x54, 0xf5, 0x5f, 0xdf, + 0x58, 0xfe, 0xf0, 0xfe, 0xe0, 0x41, 0x6b, 0xe5, + 0x52, 0xa1, 0x4a, 0x0f, 0x89, 0xff, 0x00, 0x92, + 0xff, 0x00, 0x9a, 0x7e, 0x05, 0xa1, 0xd1, 0xff, + 0x00, 0xf5, 0xee, 0x3f, 0xaa, 0xe5, 0xbe, 0x98, + 0x13, 0x13, 0xc0, 0xde, 0x5a, 0x55, 0x73, 0x49, + 0xdc, 0x45, 0x10, 0xb9, 0xb7, 0x91, 0xc1, 0x92, + 0x89, 0x49, 0xe1, 0x76, 0xc3, 0x4a, 0xa0, 0xb3, + 0x22, 0x8a, 0xa9, 0x40, 0x44, 0x44, 0x1a, 0x1c, + 0xae, 0x9f, 0xb9, 0xbd, 0xbb, 0x33, 0xc7, 0x72, + 0xe8, 0xda, 0x45, 0x38, 0x42, 0xc3, 0xf5, 0x4e, + 0xfb, 0xcf, 0x1f, 0xd3, 0xfe, 0xab, 0x7d, 0x93, + 0xbe, 0x36, 0x36, 0xa6, 0x7e, 0x03, 0x25, 0x3f, + 0x65, 0xbb, 0x4a, 0xd3, 0xfa, 0xda, 0xea, 0x7f, + 0xd4, 0x93, 0xa0, 0xa0, 0xd7, 0xe4, 0xb4, 0xf6, + 0x46, 0xca, 0xd1, 0xf7, 0x0c, 0xba, 0x73, 0xf8, + 0x36, 0x91, 0x53, 0xbb, 0xa5, 0x65, 0x69, 0xdc, + 0x1c, 0x57, 0x2d, 0x8b, 0x25, 0x71, 0x21, 0x95, + 0xdb, 0xda, 0xc3, 0xb4, 0x02, 0xbc, 0x6f, 0xf5, + 0x1c, 0xd9, 0x48, 0x4d, 0x85, 0x9c, 0x2e, 0xeb, + 0x64, 0xf1, 0x5f, 0xce, 0x01, 0x56, 0x3c, 0x3d, + 0x91, 0xb1, 0xb0, 0x8a, 0xdc, 0xfc, 0x66, 0x8f, + 0x1b, 0xbe, 0x83, 0x31, 0x4a, 0x22, 0x02, 0xa7, + 0xea, 0x5f, 0xcd, 0x18, 0xbe, 0xf8, 0xf8, 0x55, + 0xc1, 0x53, 0xf5, 0x37, 0xe6, 0x9c, 0x57, 0x7d, + 0x06, 0x7d, 0xe6, 0x6a, 0xfa, 0x1b, 0x97, 0xc7, + 0x1c, 0x64, 0xb5, 0xa6, 0x8d, 0xd9, 0xc9, 0x45, + 0x8b, 0xa8, 0x6e, 0x25, 0xbb, 0xd3, 0x5d, 0x74, + 0xcd, 0xe1, 0x79, 0x90, 0x6c, 0xf7, 0x56, 0xfa, + 0x4b, 0xdc, 0x7c, 0x6f, 0x2c, 0x91, 0xcd, 0xe3, + 0x6e, 0xf0, 0xb5, 0x3a, 0xba, 0x48, 0xe5, 0xc0, + 0x97, 0xc3, 0x42, 0xce, 0x36, 0xd2, 0x88, 0x39, + 0xf3, 0xf7, 0x0f, 0x71, 0x64, 0xd8, 0x7f, 0x39, + 0xbd, 0xf5, 0x8d, 0x25, 0x48, 0x14, 0x59, 0x16, + 0x26, 0x93, 0x34, 0x9d, 0x8b, 0xc9, 0x9c, 0x4f, + 0x9f, 0x5a, 0x6b, 0x7e, 0x3f, 0x27, 0xd3, 0xf5, + 0x93, 0x13, 0xfb, 0x36, 0x8c, 0x44, 0xc4, 0xe5, + 0x19, 0x65, 0xb2, 0xf6, 0xbd, 0xef, 0xbf, 0xec, + 0x33, 0xdc, 0x5f, 0x37, 0x9f, 0xca, 0x6f, 0x7c, + 0x29, 0xbd, 0x73, 0x4d, 0xc3, 0x48, 0x35, 0x1d, + 0xc5, 0xf3, 0x76, 0xf6, 0xba, 0x21, 0xc2, 0x6a, + 0x42, 0xfa, 0x1e, 0x82, 0x62, 0x3d, 0x1e, 0x71, + 0x3b, 0x26, 0xa2, 0xbb, 0x9f, 0x9a, 0x9c, 0x67, + 0xee, 0x7a, 0x59, 0x88, 0x9a, 0xc6, 0x25, 0x7a, + 0xc4, 0xc7, 0x87, 0x38, 0xe8, 0x0c, 0x9d, 0x5f, + 0x1f, 0x0f, 0x8d, 0x5a, 0x56, 0xab, 0x2f, 0xab, + 0xc2, 0x7d, 0x17, 0xbc, 0xb5, 0xd8, 0x3b, 0x4c, + 0x43, 0xf1, 0x90, 0x3a, 0x67, 0x37, 0xac, 0x23, + 0xc6, 0xab, 0xa8, 0x56, 0x71, 0xb2, 0xc2, 0x50, + 0xd0, 0xb3, 0x77, 0xca, 0x5c, 0xb8, 0x3e, 0x97, + 0x19, 0x7d, 0xf5, 0x78, 0x3a, 0xff, 0x00, 0xe9, + 0xe9, 0x0b, 0x16, 0x1f, 0x24, 0x66, 0x68, 0xf9, + 0x27, 0x0d, 0x04, 0x24, 0x90, 0xdd, 0xd5, 0x54, + 0x3c, 0x81, 0x2c, 0xbe, 0x9d, 0xb1, 0xc8, 0x7a, + 0xb0, 0xe2, 0x1b, 0x43, 0xc8, 0xb7, 0xba, 0x18, + 0xff, 0x00, 0xf6, 0x33, 0x39, 0xee, 0x2e, 0xa3, + 0x37, 0x93, 0x54, 0x1b, 0x67, 0xe7, 0xf2, 0x21, + 0xe4, 0x75, 0x46, 0x80, 0xd0, 0x6c, 0x58, 0x5a, + 0x92, 0xf6, 0x7b, 0xbd, 0x35, 0x2b, 0xe7, 0x6f, + 0x09, 0x12, 0x34, 0x0d, 0x94, 0xe5, 0x56, 0x53, + 0x7f, 0x8d, 0xad, 0x09, 0x6e, 0xcd, 0x9c, 0x8b, + 0x47, 0xad, 0x26, 0x82, 0x5c, 0x03, 0x8c, 0x04, + 0x16, 0xf1, 0xb6, 0xb4, 0xef, 0xa0, 0xde, 0xe1, + 0x7e, 0xea, 0xb5, 0xfe, 0x9b, 0x56, 0x6a, 0xc2, + 0xc3, 0x7d, 0xd7, 0x6d, 0xfd, 0x36, 0xfc, 0x0b, + 0x35, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x42, 0xc2, + 0xc9, 0x66, 0xb1, 0xb8, 0xb8, 0xf8, 0xef, 0x6e, + 0x19, 0x0d, 0x41, 0x2d, 0x6b, 0x88, 0x0e, 0x75, + 0x39, 0x1a, 0x0e, 0xf4, 0x19, 0xab, 0x5d, 0x95, + 0xcf, 0x63, 0x71, 0x51, 0xf1, 0x5d, 0x49, 0xe3, + 0x72, 0x44, 0xcf, 0x19, 0xe7, 0xbc, 0xd5, 0x55, + 0xc8, 0xeb, 0x5b, 0xfb, 0xcb, 0x69, 0x3c, 0x92, + 0x26, 0xd9, 0xda, 0x10, 0x43, 0xae, 0xa6, 0x77, + 0x0b, 0xe9, 0xfe, 0xd6, 0x11, 0xfe, 0x6a, 0x85, + 0x79, 0xa9, 0xac, 0xad, 0x1c, 0xf7, 0x59, 0x75, + 0x97, 0x57, 0x67, 0x7d, 0xcc, 0xc4, 0xb8, 0x03, + 0xce, 0xd0, 0x49, 0x0a, 0xd2, 0x5f, 0x25, 0xd7, + 0x2b, 0xac, 0xf2, 0x77, 0x9c, 0x7d, 0x43, 0xc6, + 0x2a, 0xc6, 0x86, 0x92, 0xcc, 0x07, 0x5a, 0xe1, + 0xf3, 0x1d, 0xbb, 0xa5, 0x51, 0xf2, 0x3a, 0xaa, + 0xde, 0x07, 0xba, 0x3c, 0x7b, 0x3a, 0xf9, 0x39, + 0x6f, 0x26, 0x3c, 0x4e, 0xaf, 0x38, 0x06, 0xb4, + 0x55, 0xfb, 0xdc, 0x95, 0xf5, 0xfc, 0x86, 0x4b, + 0xa9, 0x4c, 0x84, 0xf2, 0x72, 0x74, 0x2c, 0x7a, + 0x0e, 0x44, 0xba, 0x2b, 0x9b, 0xda, 0xea, 0xf2, + 0xea, 0xf2, 0x43, 0x25, 0xcc, 0x8e, 0x91, 0xc4, + 0xd7, 0x69, 0x24, 0x74, 0x2f, 0x0a, 0x29, 0x45, + 0x2d, 0x51, 0x45, 0x28, 0x9f, 0x02, 0x02, 0x21, + 0x34, 0xef, 0xaf, 0xa2, 0xc7, 0x86, 0x07, 0xf0, + 0x9e, 0x07, 0x1a, 0x07, 0xf2, 0x14, 0x1f, 0x3b, + 0x15, 0xa3, 0x4d, 0xfb, 0x3c, 0xce, 0xe7, 0xa3, + 0x6d, 0xc0, 0x02, 0xda, 0xd1, 0xdf, 0xfb, 0x1e, + 0x68, 0x48, 0xff, 0x00, 0x68, 0x2b, 0x5f, 0xa4, + 0x31, 0x31, 0xe6, 0x35, 0x15, 0x9d, 0x84, 0xdb, + 0x23, 0x91, 0xdc, 0x4f, 0x34, 0xe4, 0x6f, 0x8d, + 0xfe, 0x4b, 0xa9, 0xfb, 0x44, 0xd4, 0xef, 0xd2, + 0xf8, 0xa8, 0x2c, 0xb1, 0xac, 0x11, 0xcb, 0x70, + 0x0b, 0x63, 0x20, 0x6c, 0x63, 0x07, 0x32, 0x0d, + 0x24, 0x9e, 0xc5, 0xb8, 0x6d, 0xcf, 0x55, 0x90, + 0x2f, 0x9b, 0xe4, 0x96, 0x00, 0x07, 0xbb, 0x55, + 0x43, 0xd4, 0x3a, 0x6b, 0x27, 0xa7, 0xee, 0xc5, + 0xad, 0xfb, 0x29, 0xc4, 0x2b, 0x1c, 0x8d, 0x35, + 0x0e, 0x1d, 0xf5, 0x97, 0x8f, 0xd7, 0x3a, 0x92, + 0xc2, 0x7e, 0xb5, 0x97, 0x4e, 0x93, 0x69, 0x25, + 0xaf, 0xf1, 0x87, 0xbe, 0xb0, 0xaf, 0xf2, 0x59, + 0xbd, 0x45, 0x7b, 0xd6, 0x4e, 0x5f, 0x77, 0x3b, + 0x8f, 0x89, 0x1b, 0x01, 0x20, 0x03, 0xc8, 0x02, + 0x0c, 0xbd, 0x23, 0xaa, 0xee, 0xb4, 0xcd, 0xf1, + 0x9e, 0x36, 0xf5, 0xb6, 0xf2, 0x7f, 0x36, 0x22, + 0x69, 0x5e, 0xea, 0xe8, 0x4e, 0xf6, 0xc1, 0x84, + 0x2d, 0x0f, 0x6d, 0xb3, 0xdd, 0x30, 0x1b, 0x41, + 0x6e, 0xe3, 0xdc, 0x2b, 0x91, 0xcd, 0x0c, 0xb0, + 0x48, 0xe8, 0x66, 0x61, 0x8e, 0x56, 0x12, 0xd7, + 0x31, 0xc2, 0x84, 0x10, 0xba, 0x1f, 0xb3, 0x5b, + 0xbd, 0x1e, 0x2d, 0x5f, 0x6f, 0x91, 0x6b, 0x19, + 0x7c, 0xe1, 0x42, 0xf9, 0xe9, 0xc2, 0x5a, 0x7e, + 0x49, 0x28, 0x22, 0xef, 0xdb, 0x2e, 0x45, 0xd2, + 0x7f, 0xc5, 0xb5, 0x63, 0x23, 0xdd, 0xe3, 0x13, + 0x5f, 0x81, 0x5d, 0x6e, 0x67, 0x8f, 0x51, 0xe8, + 0x77, 0x5e, 0xdf, 0xc5, 0xe4, 0xee, 0x92, 0x13, + 0x30, 0x1b, 0x8b, 0x5c, 0xdd, 0xad, 0x20, 0xf7, + 0xc2, 0xd7, 0xb7, 0x49, 0x7b, 0x3f, 0xb1, 0xb8, + 0xf4, 0x83, 0xe6, 0x84, 0x31, 0xc4, 0xbc, 0x07, + 0xc8, 0x0b, 0x49, 0xee, 0x2a, 0xd6, 0xbc, 0xf6, + 0x87, 0x05, 0xe5, 0xab, 0xf0, 0x98, 0x50, 0x1b, + 0x69, 0xf1, 0x64, 0x99, 0xbb, 0x01, 0x68, 0xfd, + 0x96, 0xa0, 0xc2, 0xc2, 0xfb, 0x57, 0xcc, 0x63, + 0xed, 0xdb, 0x6b, 0x79, 0x0b, 0x6f, 0xa3, 0x6f, + 0x8a, 0x1c, 0xf3, 0xc2, 0x69, 0xdd, 0xa0, 0x35, + 0x5e, 0x7a, 0x8b, 0xda, 0x7e, 0x53, 0x2d, 0x6a, + 0x6c, 0xec, 0xe1, 0x6d, 0x84, 0x0e, 0xa8, 0x7f, + 0x03, 0xaa, 0x5c, 0x3d, 0xea, 0x2a, 0x5d, 0x10, + 0x0a, 0x20, 0x13, 0xca, 0x77, 0x9d, 0xea, 0xe5, + 0xa7, 0xab, 0xe8, 0x98, 0xfb, 0xe5, 0x53, 0x4e, + 0xe5, 0x71, 0xc0, 0x1a, 0x62, 0xa3, 0xef, 0x95, + 0xbc, 0x37, 0xb3, 0x9e, 0xe6, 0xc4, 0xa8, 0x27, + 0x99, 0x45, 0x54, 0x13, 0x55, 0xd1, 0x8a, 0x2a, + 0x6a, 0xa0, 0x9e, 0x65, 0x04, 0xd1, 0x45, 0x50, + 0x09, 0x29, 0xbf, 0x7a, 0x82, 0x57, 0xc9, 0x28, + 0x3e, 0x89, 0x5f, 0x35, 0x3b, 0x94, 0x12, 0xa0, + 0x95, 0x16, 0x93, 0x52, 0xbe, 0x49, 0x28, 0x4a, + 0xf9, 0x25, 0x49, 0x12, 0x68, 0x77, 0xf2, 0xef, + 0x0b, 0x3f, 0x4b, 0x6a, 0x49, 0x34, 0xde, 0x44, + 0x45, 0x29, 0xe2, 0xc6, 0x5d, 0x3b, 0xc6, 0x69, + 0xdd, 0x1b, 0x8f, 0x28, 0x5a, 0xe2, 0x76, 0xaf, + 0x89, 0x63, 0x8e, 0x58, 0xcc, 0x6f, 0x15, 0x6b, + 0x94, 0x9d, 0xab, 0x1b, 0x1d, 0xc2, 0x19, 0xe2, + 0x9e, 0x26, 0xcb, 0x13, 0x83, 0xd8, 0xf0, 0x0b, + 0x5c, 0x36, 0xec, 0x2b, 0xee, 0xa1, 0x73, 0x4f, + 0x67, 0x9a, 0x95, 0xf6, 0xb7, 0x0e, 0xc2, 0xe4, + 0xa5, 0x0d, 0x8d, 0x8d, 0x2e, 0x82, 0x47, 0x9a, + 0x02, 0xd1, 0xc9, 0x55, 0xe5, 0xae, 0x7d, 0xa6, + 0x88, 0xf8, 0xf1, 0xd8, 0x57, 0xd5, 0xc6, 0xad, + 0x92, 0x71, 0xb8, 0x77, 0x97, 0x39, 0x86, 0xe2, + 0x56, 0x2d, 0x5d, 0xed, 0x07, 0x1d, 0x81, 0x8d, + 0xd0, 0xc2, 0x45, 0xc5, 0xe1, 0x07, 0x85, 0x80, + 0xec, 0x07, 0xba, 0xb9, 0x15, 0xc5, 0xe6, 0x7b, + 0x57, 0xe5, 0x43, 0x49, 0x74, 0xd2, 0xc8, 0xef, + 0x15, 0x82, 0xbc, 0x2d, 0x0b, 0xef, 0x01, 0xa6, + 0x73, 0x3a, 0xa3, 0x22, 0x08, 0x0f, 0x2c, 0x79, + 0xac, 0x97, 0x0f, 0xad, 0x29, 0xcb, 0xb5, 0x76, + 0xbd, 0x33, 0xa4, 0x31, 0x7a, 0x7a, 0xd9, 0xac, + 0x81, 0x81, 0xd3, 0xd3, 0xc7, 0x98, 0x8d, 0xa4, + 0xa0, 0xd0, 0x68, 0xef, 0x66, 0x76, 0x78, 0xa2, + 0x2e, 0xf2, 0x54, 0xb8, 0xb9, 0xa0, 0x2d, 0x61, + 0xf8, 0xad, 0x3f, 0xe6, 0xae, 0xbe, 0x41, 0x65, + 0xe6, 0xf1, 0x7f, 0xe0, 0xdf, 0x02, 0xf7, 0x52, + 0x83, 0xc3, 0xc8, 0x6c, 0xbc, 0xde, 0x3f, 0xfc, + 0x1b, 0xe0, 0x4f, 0x21, 0xb2, 0xf3, 0x78, 0xff, + 0x00, 0xf0, 0x6f, 0x81, 0x7b, 0xa2, 0x0f, 0x0f, + 0x21, 0xb2, 0xf3, 0x78, 0xff, 0x00, 0xf0, 0x6f, + 0x81, 0x3c, 0x86, 0xcb, 0xcd, 0xe3, 0xff, 0x00, + 0xc1, 0xbe, 0x05, 0xee, 0x88, 0x3c, 0x3c, 0x86, + 0xcb, 0xcd, 0xe3, 0xff, 0x00, 0xc1, 0xbe, 0x04, + 0xf2, 0x1b, 0x2f, 0x37, 0x8f, 0xff, 0x00, 0x06, + 0xf8, 0x17, 0xba, 0x20, 0xd3, 0xe7, 0xed, 0x2d, + 0x23, 0xc5, 0xcc, 0xf6, 0x42, 0xc6, 0xb8, 0x0d, + 0x8e, 0x6b, 0x40, 0x3e, 0xf0, 0x5a, 0x46, 0x00, + 0x71, 0x8e, 0xe2, 0x34, 0x06, 0x33, 0x53, 0xee, + 0x2b, 0x06, 0xa2, 0xfb, 0xa6, 0x6e, 0xf2, 0xaf, + 0x37, 0x66, 0x29, 0xff, 0x00, 0xd3, 0x3f, 0x02, + 0xb0, 0x39, 0xa3, 0xed, 0x30, 0xa6, 0x47, 0xd6, + 0xe0, 0xd7, 0x88, 0xec, 0xa0, 0x59, 0x96, 0x96, + 0xb8, 0x81, 0x8f, 0xba, 0x6b, 0x67, 0x25, 0x86, + 0x9c, 0x46, 0x9b, 0x95, 0x7e, 0x40, 0x3a, 0xe9, + 0x36, 0x7e, 0xd1, 0x59, 0xf6, 0x20, 0x7a, 0x32, + 0xf7, 0x67, 0xc9, 0x52, 0x55, 0xf7, 0xe4, 0x78, + 0x40, 0xda, 0x79, 0x49, 0xa7, 0x78, 0x78, 0x56, + 0x45, 0xcd, 0xa6, 0x1c, 0xf5, 0x7c, 0x57, 0x04, + 0x51, 0xa2, 0x9b, 0x39, 0x16, 0x8a, 0x83, 0x85, + 0x65, 0x5e, 0x01, 0x48, 0xbe, 0x60, 0x41, 0xb5, + 0xc6, 0xda, 0x62, 0x05, 0xfc, 0x65, 0x97, 0x05, + 0xce, 0x1b, 0xb6, 0x05, 0xe5, 0x75, 0x69, 0x86, + 0x37, 0x33, 0x17, 0x5c, 0x10, 0xe2, 0xf2, 0x4e, + 0xc0, 0xb0, 0xb1, 0x00, 0x7a, 0x4a, 0x25, 0xe1, + 0x78, 0x07, 0x96, 0x4f, 0xcb, 0xe3, 0x94, 0x17, + 0x5d, 0x0d, 0x05, 0x84, 0x77, 0xb3, 0x3a, 0xd6, + 0x63, 0x23, 0xb8, 0x76, 0x83, 0xcc, 0xae, 0x18, + 0x8f, 0xbf, 0xcf, 0xcc, 0x54, 0x2f, 0x67, 0x34, + 0xf4, 0x8c, 0xfc, 0x9e, 0x2a, 0xbe, 0xe2, 0x7e, + 0xff, 0x00, 0x3f, 0x31, 0x54, 0x5a, 0xd1, 0x11, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x15, 0x3c, 0xdf, 0xe6, 0x9b, 0x1e, 0xfc, 0x7f, + 0xbc, 0xad, 0x63, 0x95, 0x55, 0x33, 0x7f, 0x9a, + 0x6c, 0x3b, 0xf1, 0xfe, 0xf2, 0xb5, 0x8e, 0x54, + 0x12, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x0a, 0xa7, 0xaa, 0xfe, 0xfa, 0xc7, 0xf7, 0x87, + 0xef, 0xab, 0x62, 0xa9, 0x6a, 0xbf, 0xbe, 0xf1, + 0xdd, 0xe6, 0xff, 0x00, 0x70, 0x20, 0xb6, 0x29, + 0x51, 0xca, 0xa5, 0x04, 0x15, 0xa4, 0xcc, 0x69, + 0xc6, 0x5e, 0x3f, 0xca, 0x2d, 0x9c, 0x61, 0xb9, + 0x1b, 0x78, 0x86, 0xc0, 0x56, 0xf1, 0x10, 0x54, + 0x5b, 0x77, 0xa9, 0x31, 0x5e, 0x24, 0xd1, 0x9b, + 0x88, 0xc7, 0xed, 0x0d, 0xab, 0x26, 0x2d, 0x65, + 0x08, 0x00, 0x5c, 0xc2, 0xe8, 0xdd, 0xcb, 0xb1, + 0x59, 0x0b, 0x41, 0xd8, 0x45, 0x47, 0x75, 0x63, + 0xcb, 0x8f, 0xb3, 0x96, 0xbc, 0x70, 0xb4, 0x93, + 0xcb, 0x40, 0x83, 0x5b, 0x1e, 0xac, 0xc5, 0x3b, + 0x7b, 0xe9, 0xdf, 0x5e, 0xe3, 0x51, 0xe2, 0x4f, + 0xfe, 0xe0, 0x92, 0x69, 0xdc, 0x5c, 0x84, 0xd6, + 0x10, 0x2b, 0xcc, 0xbc, 0x5d, 0xa5, 0x31, 0x47, + 0xff, 0x00, 0x5d, 0x3d, 0xd4, 0x1e, 0xaf, 0xd4, + 0x18, 0x77, 0x0a, 0x3a, 0x66, 0xb8, 0x73, 0x1a, + 0x15, 0xe2, 0xfd, 0x43, 0x82, 0x67, 0x2b, 0x0f, + 0xb8, 0x14, 0xfa, 0xa7, 0x8a, 0xf9, 0x1e, 0xfa, + 0xfb, 0x66, 0x98, 0xc5, 0x37, 0xff, 0x00, 0x50, + 0x28, 0x35, 0x78, 0x37, 0xc5, 0x7b, 0x9e, 0x9e, + 0xee, 0xd6, 0x3e, 0x1b, 0x70, 0xda, 0x57, 0x9c, + 0xf7, 0x15, 0xad, 0x78, 0x5b, 0x59, 0xdb, 0xda, + 0x33, 0x82, 0x06, 0x06, 0x37, 0xb8, 0xbd, 0xd0, + 0x11, 0x11, 0x01, 0x52, 0xf5, 0x64, 0xf1, 0x5b, + 0xea, 0x4c, 0x64, 0xd3, 0x10, 0xd8, 0xd8, 0x6a, + 0x49, 0x57, 0x45, 0xab, 0xcb, 0xe9, 0xeb, 0x0c, + 0xb3, 0xd8, 0xfb, 0xa6, 0xd4, 0xc6, 0x28, 0xd2, + 0x10, 0x69, 0xae, 0x64, 0xd3, 0xd7, 0x13, 0xba, + 0x63, 0x78, 0xd0, 0x5e, 0x6a, 0x47, 0x10, 0xf0, + 0xaf, 0xbb, 0x89, 0xf4, 0xf5, 0xc6, 0x33, 0xd1, + 0xce, 0xbc, 0x68, 0x65, 0x6b, 0xc5, 0xc4, 0x3c, + 0x2b, 0xdb, 0xd4, 0x4c, 0x2f, 0xc8, 0x3d, 0x25, + 0x06, 0x84, 0xc2, 0xfc, 0x83, 0xd2, 0x50, 0x69, + 0x7d, 0x0d, 0xa5, 0xbc, 0xfc, 0x6c, 0xee, 0x8f, + 0x0a, 0x0c, 0x46, 0x96, 0x1b, 0xaf, 0xda, 0x3f, + 0xf9, 0x0f, 0x0a, 0xdd, 0x7a, 0x8b, 0x84, 0xf9, + 0x0e, 0xe9, 0x2b, 0x51, 0xea, 0xbc, 0x72, 0xdc, + 0x4f, 0x1d, 0x9d, 0x93, 0x24, 0x8e, 0x07, 0x96, + 0x71, 0x3e, 0x52, 0xd2, 0x48, 0xee, 0x04, 0xd8, + 0x5e, 0xce, 0x90, 0xf8, 0xf4, 0x46, 0x97, 0xf3, + 0xf1, 0xff, 0x00, 0x97, 0xfa, 0xa7, 0xa2, 0x34, + 0xbf, 0x9f, 0x8f, 0xfc, 0x87, 0x85, 0x66, 0xd8, + 0x69, 0x6c, 0x1d, 0xd3, 0x1e, 0x25, 0x89, 0xd0, + 0xcf, 0x09, 0xe1, 0x99, 0x84, 0x9a, 0x02, 0x39, + 0x6b, 0xcc, 0xbe, 0xe1, 0xd3, 0x3a, 0x52, 0x69, + 0x3a, 0xa8, 0x65, 0x6c, 0x92, 0x01, 0x52, 0xd6, + 0xbe, 0xa7, 0x62, 0x46, 0xed, 0x9b, 0x89, 0xeb, + 0xfe, 0x1f, 0x06, 0x00, 0xc6, 0x69, 0xd0, 0x28, + 0xdc, 0x95, 0x1a, 0x37, 0x00, 0xef, 0xf5, 0x53, + 0xe8, 0xdd, 0x3d, 0xff, 0x00, 0xfd, 0x3f, 0xff, + 0x00, 0xbb, 0xfd, 0x57, 0xb6, 0x3f, 0x4e, 0xe9, + 0xeb, 0xd9, 0xae, 0x62, 0x00, 0x37, 0xc9, 0xdc, + 0x40, 0xa3, 0xab, 0x56, 0x8f, 0xda, 0x59, 0x10, + 0x69, 0x7d, 0x2b, 0x70, 0xfe, 0xae, 0x09, 0x5b, + 0x23, 0xfe, 0x4b, 0x5f, 0x53, 0xb3, 0xb8, 0x87, + 0x3e, 0x9b, 0xda, 0xff, 0x00, 0x44, 0x69, 0x83, + 0x52, 0x6f, 0xda, 0x49, 0xe5, 0xe2, 0x1e, 0x15, + 0x9f, 0x88, 0x6e, 0x9b, 0xc5, 0xcb, 0x24, 0x91, + 0xde, 0xb5, 0xc6, 0x56, 0xf0, 0xd3, 0x88, 0x6e, + 0x3e, 0xea, 0xcb, 0xf5, 0x13, 0x09, 0xf2, 0x0f, + 0x49, 0x53, 0xea, 0x26, 0x13, 0xe4, 0x1e, 0x92, + 0x83, 0x05, 0xcc, 0xd3, 0xa5, 0xc4, 0xf9, 0x6b, + 0x76, 0x92, 0x7e, 0x30, 0xf0, 0xac, 0x3d, 0x43, + 0x77, 0x89, 0x8f, 0x06, 0xeb, 0x4b, 0x4b, 0x81, + 0x2c, 0x8e, 0x78, 0x34, 0x06, 0xab, 0x72, 0x74, + 0x26, 0x17, 0xe4, 0x1e, 0x92, 0x83, 0x42, 0x61, + 0x41, 0x07, 0x80, 0xec, 0x35, 0xde, 0x83, 0x6f, + 0x87, 0xfb, 0xae, 0xdb, 0xfa, 0x6d, 0xf8, 0x16, + 0x6a, 0xf3, 0x82, 0x16, 0x41, 0x0b, 0x21, 0x67, + 0xc5, 0x60, 0xa0, 0x5e, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0xbc, 0xe6, 0x9a, + 0x38, 0x63, 0x74, 0xb2, 0xb8, 0x35, 0x8c, 0x1c, + 0x4e, 0x71, 0xe4, 0x03, 0x79, 0x41, 0xf6, 0x56, + 0x35, 0xf6, 0x46, 0xca, 0xc2, 0x2e, 0xb6, 0xee, + 0x76, 0x40, 0xce, 0x77, 0x90, 0x2b, 0x4e, 0x6a, + 0xaa, 0xb6, 0x47, 0x5c, 0xbe, 0x72, 0xe8, 0xf0, + 0xd1, 0x12, 0xc6, 0xd4, 0x3e, 0xee, 0x50, 0x5b, + 0x18, 0xee, 0xb4, 0xee, 0x2a, 0x87, 0x91, 0xd4, + 0x16, 0x76, 0xf3, 0x3e, 0x7b, 0x99, 0xce, 0x5a, + 0xf5, 0xd5, 0x3e, 0x33, 0xbf, 0x86, 0x0f, 0xcd, + 0xdd, 0xb1, 0x5a, 0x4b, 0x5d, 0xb2, 0xba, 0xda, + 0xf2, 0xe9, 0xa4, 0x61, 0xd8, 0x60, 0x80, 0x1f, + 0x1e, 0xee, 0x61, 0xc2, 0x3f, 0xf8, 0x83, 0xb0, + 0xaa, 0x3e, 0x5f, 0x54, 0x59, 0x45, 0x2f, 0x1f, + 0x19, 0xc9, 0x5f, 0x6f, 0x74, 0xaf, 0x1e, 0x23, + 0x4f, 0xfb, 0x46, 0xe5, 0x5c, 0xc9, 0x66, 0xf2, + 0x19, 0x17, 0x9e, 0xba, 0x42, 0xc8, 0xbf, 0x66, + 0x26, 0x6c, 0x68, 0xe8, 0x5a, 0xf0, 0x28, 0x83, + 0x33, 0x23, 0x96, 0xbe, 0xc8, 0xc9, 0xc5, 0x3c, + 0x87, 0x87, 0xf6, 0x58, 0xdd, 0x8d, 0x1e, 0xe0, + 0x58, 0x61, 0x13, 0xe1, 0x51, 0x44, 0x44, 0x40, + 0xff, 0x00, 0x15, 0x44, 0xf8, 0x13, 0xbe, 0x80, + 0x9b, 0x39, 0x77, 0x25, 0x57, 0xb5, 0xad, 0x95, + 0xe5, 0xe4, 0x82, 0x3b, 0x48, 0x1f, 0x3b, 0xcf, + 0xec, 0xb1, 0xa5, 0xc5, 0x05, 0x9f, 0x17, 0xa7, + 0xf0, 0xd0, 0x5a, 0x5b, 0x64, 0x6f, 0xe5, 0x37, + 0x71, 0x4b, 0x20, 0x8a, 0x76, 0x47, 0xb5, 0xb1, + 0x71, 0x0d, 0x9c, 0x4e, 0x0b, 0x77, 0x7d, 0x8c, + 0xc6, 0xc7, 0xa5, 0xe4, 0xb0, 0x99, 0xcc, 0xea, + 0xa2, 0x95, 0xee, 0xb5, 0x98, 0x01, 0xc4, 0xd2, + 0x49, 0xe1, 0x6b, 0x8f, 0x31, 0x1c, 0xea, 0xab, + 0x13, 0x73, 0x5a, 0x7a, 0xd2, 0xe2, 0x0c, 0x85, + 0x8c, 0x82, 0xce, 0xf9, 0x9c, 0x2e, 0x8e, 0x40, + 0x5a, 0x01, 0xe4, 0x75, 0x79, 0x08, 0x5a, 0xbb, + 0xac, 0x95, 0xe5, 0xdb, 0x5a, 0xd9, 0xa4, 0x71, + 0x68, 0x01, 0xbc, 0x23, 0x60, 0x21, 0xa3, 0x85, + 0xb5, 0x1d, 0xe4, 0x1b, 0x0d, 0x1f, 0x91, 0x66, + 0x27, 0x54, 0x59, 0xdd, 0x3c, 0x82, 0xc8, 0xe4, + 0x2c, 0x71, 0xae, 0xca, 0x3a, 0xac, 0xff, 0x00, + 0x35, 0xd4, 0xbd, 0xa7, 0xe9, 0xd7, 0xe6, 0xb0, + 0x8c, 0xbc, 0xb3, 0x1d, 0x64, 0xf6, 0xbe, 0x38, + 0xa6, 0xda, 0xb0, 0xf3, 0x74, 0xae, 0x25, 0x45, + 0xd4, 0xb4, 0x0f, 0xb4, 0x5b, 0x66, 0x59, 0xb3, + 0x13, 0x9b, 0x7d, 0x0b, 0x3c, 0x48, 0xe6, 0x75, + 0x28, 0x5b, 0xc8, 0x1d, 0x54, 0x1c, 0xb8, 0x82, + 0x09, 0x69, 0x14, 0x70, 0xd8, 0x41, 0xe4, 0x21, + 0x74, 0xcf, 0x63, 0x10, 0x87, 0xcd, 0x7c, 0xf7, + 0xc2, 0xd7, 0xb1, 0x9c, 0x25, 0x93, 0x91, 0x52, + 0x1d, 0xcc, 0x0a, 0xb2, 0x64, 0x34, 0x3e, 0x8b, + 0xcc, 0xdc, 0x0b, 0xc6, 0x96, 0x02, 0xf3, 0xc4, + 0xe3, 0x1b, 0xe8, 0x1d, 0xd0, 0xbe, 0x6f, 0xb5, + 0x0e, 0x93, 0xd0, 0xf8, 0xd3, 0x69, 0x8e, 0xe1, + 0x74, 0xb4, 0x3c, 0x10, 0xb0, 0xf1, 0x12, 0xee, + 0x42, 0xf2, 0x83, 0x9d, 0xfb, 0x4e, 0x8a, 0x08, + 0xf5, 0x7d, 0xcb, 0x60, 0x00, 0x02, 0xd6, 0xb9, + 0xd4, 0xf9, 0x44, 0x54, 0xaa, 0xa5, 0x48, 0x35, + 0x1b, 0x08, 0xe5, 0x59, 0x59, 0x1c, 0x84, 0xf9, + 0x2b, 0xe9, 0xaf, 0xae, 0x0d, 0x65, 0x9d, 0xc5, + 0xce, 0xaf, 0x75, 0x63, 0x55, 0x07, 0xdb, 0xa6, + 0x9a, 0x46, 0xf0, 0x3e, 0x47, 0x39, 0xa3, 0xf6, + 0x5c, 0x49, 0x1e, 0xfa, 0xf8, 0xa0, 0xdf, 0x4f, + 0x71, 0x36, 0x93, 0x40, 0x2b, 0x5d, 0x9d, 0x2b, + 0xde, 0x7b, 0x2b, 0xdb, 0x68, 0xdb, 0x2c, 0xf0, + 0x3e, 0x26, 0x3b, 0xe2, 0xb9, 0xc2, 0x80, 0xa0, + 0xf0, 0x44, 0x4a, 0xa0, 0x1d, 0xca, 0xe1, 0x82, + 0xd9, 0x8b, 0x8b, 0xdd, 0x54, 0xf3, 0xb9, 0x5b, + 0xb0, 0x9b, 0x31, 0x91, 0x0e, 0xfa, 0xde, 0x1b, + 0xd9, 0xcf, 0x73, 0x3c, 0x94, 0xaa, 0xf9, 0x25, + 0x2a, 0x28, 0xb6, 0xc0, 0x4a, 0x85, 0x15, 0x50, + 0x4a, 0x09, 0x25, 0x7c, 0x92, 0xa0, 0x90, 0xa1, + 0x4b, 0x54, 0xa8, 0x2a, 0x2a, 0xa2, 0xa1, 0x24, + 0x2a, 0xa0, 0xa8, 0x25, 0x45, 0x54, 0x12, 0x57, + 0xca, 0x12, 0xa0, 0x94, 0x57, 0x9d, 0xc4, 0x3d, + 0x6b, 0x41, 0x61, 0xe1, 0x95, 0x9b, 0x63, 0x7f, + 0x31, 0x5b, 0x2d, 0x31, 0xa6, 0x30, 0x7a, 0x82, + 0xe8, 0x49, 0x70, 0xe3, 0x05, 0xcc, 0x24, 0x79, + 0x45, 0xbf, 0xca, 0x3f, 0x28, 0x77, 0x0a, 0xc0, + 0x25, 0x7c, 0x47, 0x75, 0x73, 0x8e, 0xbd, 0x8f, + 0x25, 0x68, 0x48, 0x92, 0x12, 0x3a, 0xc6, 0x0d, + 0xcf, 0x6f, 0x31, 0x53, 0x25, 0x89, 0x77, 0x0c, + 0x7e, 0x3a, 0xcf, 0x1f, 0x6e, 0xdb, 0x7b, 0x48, + 0xdb, 0x1c, 0x6c, 0x14, 0x14, 0x1b, 0xd6, 0x52, + 0xd2, 0xe9, 0x8c, 0xf5, 0xb6, 0x66, 0xc1, 0x93, + 0xc6, 0xea, 0xb8, 0x81, 0xc4, 0x2b, 0xb4, 0x1e, + 0x65, 0xba, 0x58, 0x68, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x50, 0x48, 0x58, 0x76, + 0x39, 0x5b, 0x5b, 0xe9, 0x26, 0x8e, 0x1a, 0xf1, + 0x5b, 0xbb, 0x81, 0xe0, 0x8a, 0x6d, 0xee, 0x20, + 0xf8, 0xce, 0xc4, 0xe9, 0x71, 0x93, 0xb5, 0xa2, + 0xa7, 0x86, 0xbd, 0x0a, 0xb5, 0x6e, 0xe1, 0x3e, + 0x3d, 0xd1, 0x03, 0x47, 0x16, 0x96, 0xfb, 0xb4, + 0x56, 0x73, 0x93, 0xb4, 0x7d, 0xdc, 0xd6, 0x14, + 0x73, 0xa5, 0x8a, 0x3e, 0xb1, 0xed, 0x02, 0xa0, + 0xb4, 0xf2, 0x77, 0xd6, 0xae, 0x5d, 0x39, 0x1c, + 0xf4, 0x9e, 0xd5, 0xee, 0x84, 0x49, 0xe3, 0x16, + 0x1d, 0x94, 0xf7, 0x15, 0x81, 0xcd, 0xdd, 0xec, + 0xfa, 0xfc, 0xc8, 0xf7, 0x75, 0xad, 0xf1, 0x8d, + 0x46, 0xde, 0x75, 0x95, 0x6f, 0xa1, 0xaf, 0x62, + 0xb3, 0xb8, 0x80, 0xca, 0xde, 0x29, 0xa9, 0x4d, + 0xbc, 0xca, 0xf7, 0xea, 0xc5, 0xc7, 0x9c, 0x14, + 0xf5, 0x66, 0x7f, 0x38, 0x28, 0x39, 0xcf, 0xe9, + 0xe6, 0x42, 0x94, 0xeb, 0x5b, 0xd2, 0xbd, 0xa7, + 0xd0, 0x57, 0xd2, 0x70, 0x7f, 0x15, 0xbe, 0x2b, + 0x69, 0xbd, 0x74, 0x1f, 0x56, 0x27, 0xf3, 0x82, + 0x9e, 0xac, 0x5c, 0x79, 0xc1, 0x41, 0x40, 0xb1, + 0xd0, 0x77, 0xb6, 0xf7, 0x4c, 0x9d, 0xd2, 0xb6, + 0x8c, 0xde, 0x2a, 0xbc, 0xe7, 0xd0, 0x17, 0xf2, + 0x4f, 0x24, 0x82, 0x56, 0xd2, 0x42, 0x48, 0xda, + 0xba, 0x17, 0xab, 0x17, 0x1e, 0x70, 0x57, 0x9c, + 0x9a, 0x7a, 0x76, 0x3e, 0x36, 0xf5, 0xcf, 0x3d, + 0x61, 0xa0, 0x20, 0x54, 0x0a, 0x73, 0xa7, 0x41, + 0x59, 0xd2, 0xda, 0x62, 0x7c, 0x2d, 0xd4, 0xb3, + 0x4e, 0xf0, 0xe0, 0xf1, 0x41, 0x42, 0xac, 0x98, + 0x3f, 0xe3, 0x66, 0xdf, 0x23, 0x36, 0xb1, 0x8d, + 0xa1, 0x2b, 0xd4, 0xe9, 0x89, 0xce, 0xc7, 0x5c, + 0x1a, 0x1d, 0xeb, 0x63, 0x61, 0x0d, 0x96, 0x3a, + 0x76, 0xd8, 0xc4, 0x09, 0x9a, 0x46, 0x97, 0x97, + 0x73, 0x80, 0x97, 0x03, 0x6a, 0x8a, 0x2a, 0x95, + 0x0a, 0x09, 0x45, 0x15, 0x52, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x82, 0xa7, 0x9b, 0xfc, 0xd3, 0x61, + 0xdf, 0x8f, 0xf7, 0x95, 0xac, 0x72, 0xaa, 0xa6, + 0x6f, 0xf3, 0x4d, 0x87, 0x7e, 0x3f, 0xde, 0x56, + 0xb1, 0xca, 0x82, 0x51, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x54, 0xb5, 0x5f, 0xdf, 0x78, + 0xee, 0xf3, 0x7f, 0xb8, 0x15, 0xb5, 0x54, 0xf5, + 0x5f, 0xdf, 0x58, 0xfe, 0xf3, 0x7f, 0xb8, 0x10, + 0x5a, 0xf9, 0x54, 0xa8, 0xe5, 0x52, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x82, 0x0a, 0xd5, 0xe2, 0x7f, 0xec, + 0xdf, 0x7f, 0x5c, 0xfc, 0x0b, 0x68, 0xb5, 0x2f, + 0xc4, 0x5f, 0xb6, 0xe2, 0x69, 0x6d, 0x6f, 0xcc, + 0x0d, 0x9d, 0xdc, 0x6e, 0x67, 0x56, 0xd7, 0x50, + 0xf7, 0xc9, 0x43, 0x87, 0x7c, 0x31, 0xa6, 0x7d, + 0xbb, 0x32, 0x19, 0x27, 0xcd, 0x53, 0x6e, 0x22, + 0x67, 0x5a, 0x19, 0x5e, 0x22, 0x79, 0x85, 0x16, + 0x1c, 0xbd, 0x63, 0xaf, 0x31, 0xf2, 0xb2, 0xcd, + 0x96, 0x96, 0xfd, 0x70, 0x6c, 0x6f, 0x1e, 0x2c, + 0x8e, 0x6d, 0x0e, 0xc7, 0x36, 0x9c, 0xab, 0x72, + 0xcc, 0x24, 0x3e, 0x43, 0x2d, 0xac, 0x8f, 0x2f, + 0x92, 0x73, 0xc5, 0x2c, 0xe7, 0x61, 0x2e, 0xdf, + 0x5a, 0x77, 0x17, 0x87, 0xa0, 0xae, 0x24, 0x96, + 0x19, 0x6e, 0xef, 0x1d, 0x3c, 0x96, 0xef, 0x0f, + 0x88, 0xf0, 0x06, 0x80, 0x06, 0xca, 0x10, 0xd3, + 0xb6, 0xbc, 0xe9, 0x1b, 0x2b, 0xa1, 0x3f, 0xe2, + 0xfe, 0x68, 0x9f, 0x85, 0x31, 0x6d, 0x5b, 0x65, + 0x0b, 0x32, 0xb2, 0x5c, 0x32, 0x91, 0x75, 0xa4, + 0x3b, 0x80, 0x51, 0xd4, 0xae, 0xe6, 0xd1, 0x78, + 0x3b, 0xad, 0x39, 0x0c, 0x74, 0xad, 0xb3, 0x65, + 0xa5, 0xb9, 0x9b, 0x82, 0x37, 0x83, 0xc3, 0x23, + 0x9b, 0x43, 0xf1, 0xdb, 0x45, 0xb5, 0x7e, 0x0c, + 0x3d, 0xd7, 0x43, 0xaf, 0x22, 0x2b, 0xa2, 0x1d, + 0xd5, 0xf0, 0xfc, 0x57, 0x8f, 0xda, 0x06, 0xab, + 0xe3, 0xd0, 0x57, 0x12, 0x4d, 0x0c, 0xf7, 0x77, + 0xae, 0x9e, 0x4b, 0x67, 0x87, 0xc6, 0x78, 0x43, + 0x00, 0x00, 0x10, 0x45, 0x01, 0xf7, 0xd2, 0x37, + 0xc7, 0x48, 0x88, 0xf7, 0x2e, 0x53, 0x7e, 0x69, + 0xfe, 0x29, 0x99, 0x6e, 0x06, 0xe5, 0x2a, 0x06, + 0xe5, 0x28, 0x82, 0x28, 0x4a, 0x84, 0x12, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, + 0x0a, 0xa1, 0x6b, 0x1d, 0x42, 0xcb, 0x9b, 0xc9, + 0xb1, 0x81, 0xe5, 0x96, 0x36, 0x23, 0x8e, 0xfd, + 0xc3, 0x67, 0x1b, 0xbf, 0x66, 0x30, 0x55, 0xf4, + 0xae, 0x1b, 0xad, 0xa6, 0x74, 0x33, 0xe4, 0xa0, + 0x04, 0x87, 0xdc, 0x5e, 0xbc, 0xc8, 0x79, 0xda, + 0x00, 0xa2, 0x41, 0x2d, 0x26, 0x5f, 0x51, 0xde, + 0x5f, 0x13, 0x0c, 0x47, 0xa8, 0xb3, 0x6e, 0xc8, + 0xe2, 0x66, 0xcd, 0x9d, 0xd2, 0x16, 0xa4, 0x28, + 0x0a, 0x55, 0x04, 0x4f, 0x87, 0x91, 0x14, 0x04, + 0x44, 0xee, 0x73, 0xf2, 0x20, 0x14, 0x5b, 0xad, + 0x37, 0xa5, 0x6f, 0xb3, 0xb9, 0x66, 0xe3, 0xc1, + 0x10, 0x10, 0xd1, 0x24, 0x9c, 0x7b, 0x0f, 0x07, + 0x38, 0x07, 0x7a, 0xf7, 0xd6, 0xda, 0x62, 0x3d, + 0x37, 0x92, 0x65, 0xac, 0x32, 0xf5, 0xd1, 0xc8, + 0xca, 0x8e, 0x70, 0x7b, 0xa8, 0x2b, 0xca, 0x5a, + 0xc7, 0x48, 0xe0, 0xc6, 0x0e, 0x27, 0xb8, 0xd1, + 0xa0, 0x6d, 0x5b, 0x48, 0x34, 0xb6, 0x7e, 0x7c, + 0x7b, 0xb2, 0x51, 0x5a, 0x3c, 0xdb, 0x33, 0xf6, + 0x88, 0x35, 0x23, 0x9c, 0x2d, 0xb7, 0xb3, 0x39, + 0xad, 0xa2, 0xd5, 0x50, 0xc7, 0x75, 0x1b, 0x5e, + 0x24, 0x69, 0x63, 0x43, 0xda, 0x0d, 0x1f, 0xee, + 0xa0, 0xd6, 0x61, 0x74, 0xcd, 0xee, 0x4b, 0x39, + 0x6f, 0x88, 0x99, 0x86, 0x07, 0xca, 0x6a, 0xf2, + 0xee, 0x46, 0x6f, 0x25, 0x74, 0x9c, 0xfe, 0x6b, + 0x11, 0xec, 0xfe, 0x2b, 0x7c, 0x7e, 0x2a, 0xc5, + 0x92, 0xdc, 0xc8, 0x2a, 0x1c, 0xef, 0x8d, 0xcd, + 0xf1, 0xb7, 0xad, 0x77, 0xb4, 0x4b, 0xd9, 0xf4, + 0xee, 0xa9, 0xb4, 0xcc, 0xda, 0x30, 0x07, 0x18, + 0x8b, 0x47, 0x31, 0x3d, 0xd5, 0x95, 0x80, 0xc4, + 0x1c, 0x8d, 0x93, 0xb5, 0x96, 0xaa, 0x3e, 0x55, + 0x23, 0x58, 0x64, 0x82, 0x1a, 0x51, 0xad, 0x68, + 0xda, 0x36, 0x0d, 0xe8, 0x2d, 0x30, 0xc3, 0x1e, + 0xad, 0xd3, 0x0d, 0xf4, 0x8d, 0xbf, 0x52, 0xeb, + 0xb8, 0xcf, 0x8a, 0x77, 0xb4, 0xf2, 0x10, 0x57, + 0x0a, 0xcd, 0xe2, 0xae, 0x70, 0xd9, 0x39, 0xf1, + 0xf7, 0x0d, 0xa3, 0xa2, 0x71, 0xe1, 0x27, 0x67, + 0x13, 0x79, 0x0a, 0xe8, 0xba, 0x4f, 0x5b, 0xe5, + 0xf3, 0x9a, 0xc0, 0x46, 0xc8, 0xf8, 0x71, 0xae, + 0x6b, 0x98, 0x22, 0x02, 0x8d, 0x8d, 0x9c, 0x84, + 0xf4, 0x2c, 0xbf, 0x6a, 0xf8, 0x1c, 0x7d, 0xd5, + 0x98, 0xca, 0x36, 0x68, 0xe1, 0xbb, 0x84, 0x50, + 0xb5, 0xc6, 0x86, 0x41, 0xcc, 0x10, 0x72, 0x14, + 0x22, 0xa2, 0x87, 0x6a, 0x6d, 0x43, 0xdc, 0xdc, + 0x83, 0xda, 0x3b, 0xcb, 0xc8, 0x9b, 0xc3, 0x1c, + 0xf2, 0xb1, 0xbb, 0xa8, 0x1e, 0xe1, 0xf0, 0x15, + 0xe4, 0xf7, 0xb9, 0xef, 0xe2, 0x7b, 0x8b, 0x9c, + 0x77, 0xb9, 0xc4, 0x93, 0xd2, 0xb2, 0x31, 0xb8, + 0xfb, 0x9c, 0x9d, 0xe4, 0x56, 0x36, 0x8d, 0xe3, + 0x9e, 0x67, 0x06, 0xb0, 0x2b, 0xef, 0xe9, 0xfe, + 0x95, 0xb0, 0xe0, 0xb2, 0xcb, 0xe5, 0x43, 0x2f, + 0xe4, 0x02, 0xa3, 0x60, 0x0c, 0x71, 0xe4, 0xde, + 0x82, 0x91, 0x06, 0x13, 0x29, 0x71, 0x8e, 0x93, + 0x25, 0x0d, 0xbb, 0x9d, 0x69, 0x11, 0xf1, 0xe5, + 0xa6, 0xc5, 0x62, 0xf6, 0x70, 0xdc, 0x05, 0xdd, + 0xd5, 0xc6, 0x3b, 0x29, 0x13, 0x4c, 0xf7, 0x4c, + 0x2d, 0x82, 0x57, 0x1d, 0x82, 0xbc, 0x8b, 0x79, + 0xa5, 0xef, 0xec, 0x70, 0xb9, 0x8b, 0x8d, 0x23, + 0x35, 0xcb, 0x6f, 0x71, 0x97, 0x35, 0x11, 0xca, + 0x29, 0x40, 0xe7, 0x6c, 0xa2, 0xa9, 0xea, 0x9c, + 0x1d, 0xd6, 0x96, 0xcf, 0x8f, 0x27, 0xa8, 0x8c, + 0xbf, 0xad, 0xb5, 0x90, 0x6e, 0xdf, 0xb9, 0x05, + 0x8b, 0x4c, 0x69, 0xcb, 0x1c, 0x36, 0xad, 0xbd, + 0xb3, 0xca, 0x86, 0x36, 0x58, 0x62, 0x73, 0xf1, + 0xa2, 0x6a, 0x70, 0x39, 0xd5, 0xd8, 0x7c, 0x6d, + 0xfb, 0x16, 0xde, 0xf7, 0x19, 0x26, 0x76, 0x11, + 0x89, 0xc8, 0xe7, 0x2d, 0x8c, 0xb2, 0x92, 0x61, + 0xb7, 0x85, 0x91, 0xd4, 0x1e, 0x6e, 0x26, 0x8a, + 0xac, 0x6d, 0x67, 0x4c, 0x9e, 0x8a, 0xc6, 0xea, + 0x0b, 0xa6, 0x18, 0x32, 0x11, 0x11, 0xb3, 0xe2, + 0xbd, 0xe0, 0x9e, 0x12, 0x2b, 0xbf, 0x68, 0xda, + 0xb4, 0xd0, 0x6b, 0x6d, 0x3b, 0x60, 0xc6, 0x5e, + 0x58, 0x62, 0x80, 0xca, 0x31, 0x9c, 0x21, 0xef, + 0x79, 0x73, 0x41, 0xdd, 0xc4, 0x2a, 0x10, 0x55, + 0x33, 0x38, 0xc9, 0xb1, 0x39, 0x29, 0xf1, 0xf3, + 0x1e, 0x27, 0xc0, 0xee, 0x12, 0xe1, 0xcb, 0xcc, + 0xb0, 0x42, 0xc8, 0xbd, 0xbd, 0x9e, 0xfe, 0xee, + 0x5b, 0xdb, 0x87, 0x71, 0xcd, 0x33, 0x8b, 0x9c, + 0x4f, 0x75, 0x78, 0x04, 0x03, 0xba, 0xaa, 0xdd, + 0x86, 0xfb, 0xb6, 0x2e, 0xf2, 0xa8, 0x9f, 0xf2, + 0x56, 0xcc, 0x39, 0xa6, 0x36, 0x2e, 0xf7, 0xf9, + 0xad, 0x61, 0xbd, 0x9c, 0xd9, 0xc4, 0xaf, 0x92, + 0x54, 0x55, 0x41, 0x72, 0xe8, 0xcd, 0x27, 0x89, + 0x41, 0x2b, 0xe5, 0x09, 0x52, 0xc0, 0x95, 0x0a, + 0x09, 0x50, 0x4a, 0x82, 0x49, 0xdb, 0x45, 0x15, + 0x50, 0x4d, 0x14, 0x55, 0x04, 0x92, 0xbe, 0x6a, + 0xa0, 0x94, 0xaa, 0x01, 0x3b, 0xd4, 0x71, 0x21, + 0x2b, 0xe5, 0x15, 0x24, 0xa8, 0xe2, 0x21, 0x41, + 0x2b, 0xe4, 0x94, 0x29, 0x99, 0xa7, 0xb3, 0x73, + 0x69, 0xec, 0x9b, 0x65, 0x69, 0x3e, 0x43, 0x3b, + 0x87, 0x58, 0xdf, 0x92, 0xee, 0x75, 0xda, 0x2c, + 0x2f, 0x62, 0xbd, 0xb6, 0x64, 0xf1, 0x38, 0x39, + 0xaf, 0x15, 0xd8, 0xb8, 0x53, 0xc3, 0x5e, 0xd2, + 0xc7, 0x8a, 0xb5, 0xdb, 0x08, 0x56, 0xbf, 0x67, + 0x5a, 0xa1, 0xf6, 0x17, 0x43, 0x0b, 0x7f, 0x27, + 0xf0, 0x24, 0xff, 0x00, 0xad, 0x21, 0xe7, 0x3f, + 0xb2, 0x4a, 0xc4, 0xc3, 0x51, 0x2e, 0xa6, 0x8a, + 0x01, 0x04, 0x6c, 0xe5, 0x52, 0xa2, 0x88, 0x88, + 0x80, 0x88, 0x88, 0x3e, 0x4a, 0xad, 0xe2, 0x4b, + 0x6d, 0xaf, 0x5d, 0x39, 0xd8, 0xc9, 0x9f, 0x33, + 0x1e, 0x79, 0xdc, 0xd7, 0x13, 0xf0, 0x05, 0x65, + 0x5a, 0x29, 0x70, 0xd7, 0x6f, 0xc7, 0xbe, 0x16, + 0x16, 0xb2, 0x7e, 0xbd, 0xf2, 0xb0, 0xf2, 0x70, + 0xbd, 0xc7, 0x7f, 0xff, 0x00, 0x12, 0x9c, 0x57, + 0x7e, 0xce, 0xb6, 0xc6, 0x83, 0x8b, 0xcb, 0x67, + 0xb8, 0xa9, 0x0f, 0x96, 0xd6, 0x67, 0xf1, 0x72, + 0xd3, 0x8b, 0xc5, 0xf7, 0x94, 0xdb, 0xb1, 0xd9, + 0x47, 0x5b, 0x59, 0x4f, 0x23, 0xc4, 0x4c, 0xb6, + 0x12, 0x12, 0xd7, 0x16, 0xb8, 0xbc, 0xd0, 0x57, + 0x88, 0x6f, 0xde, 0xb6, 0x12, 0x62, 0xe6, 0x13, + 0xd6, 0x3a, 0x75, 0x62, 0xd1, 0xd6, 0xe0, 0xff, + 0x00, 0xb8, 0xee, 0x5e, 0x03, 0x1b, 0x92, 0xb4, + 0x16, 0xd7, 0x16, 0x6c, 0x63, 0xee, 0x19, 0x08, + 0x86, 0x58, 0xde, 0xee, 0x16, 0xec, 0xe5, 0x04, + 0x04, 0xfa, 0x24, 0xed, 0x8e, 0xf4, 0xe5, 0x60, + 0x99, 0x96, 0xd6, 0x36, 0xbd, 0x73, 0x89, 0x32, + 0x06, 0x3a, 0x40, 0x4b, 0x49, 0x6d, 0x3b, 0x8b, + 0xe2, 0x4b, 0x08, 0xa4, 0xbd, 0x8f, 0x14, 0xd7, + 0xc8, 0xdb, 0x48, 0x63, 0x33, 0x39, 0xbc, 0x6e, + 0xe2, 0x73, 0x8b, 0xb8, 0x47, 0x8f, 0x5a, 0xac, + 0xb9, 0xac, 0xaf, 0x66, 0x8e, 0xcc, 0xca, 0x5a, + 0xe9, 0x61, 0x7f, 0x1c, 0xa7, 0x93, 0x71, 0xd8, + 0x14, 0xdf, 0xda, 0xdf, 0x36, 0xed, 0x97, 0xd6, + 0x0d, 0x6c, 0x92, 0x86, 0x18, 0xa4, 0x89, 0xe7, + 0x85, 0xa5, 0xb5, 0xa8, 0x3c, 0x5b, 0x77, 0x14, + 0xe2, 0x7d, 0x29, 0xe7, 0x88, 0x73, 0xe0, 0xb9, + 0xb9, 0xc7, 0x17, 0x17, 0xc7, 0x6e, 0x5a, 0x61, + 0x73, 0x8d, 0x48, 0x6b, 0x85, 0x68, 0x4f, 0x2a, + 0xf1, 0xc8, 0x5a, 0xba, 0xf7, 0x39, 0x1d, 0xbb, + 0xe4, 0x7b, 0x6d, 0xfa, 0x82, 0xe9, 0x18, 0xd7, + 0x16, 0xd7, 0x6d, 0x06, 0xd6, 0xac, 0xcc, 0x65, + 0x8d, 0xc4, 0x2e, 0x9a, 0xea, 0xee, 0x9e, 0x53, + 0x72, 0x41, 0x7b, 0x5b, 0xb5, 0xad, 0x03, 0x60, + 0x00, 0xac, 0x1c, 0x89, 0xbe, 0x6e, 0xa0, 0x85, + 0xd6, 0x41, 0xaf, 0x78, 0x80, 0xd6, 0x37, 0x9e, + 0x10, 0xe1, 0x53, 0xfb, 0x4a, 0x71, 0xc6, 0x39, + 0xdf, 0xc0, 0xfe, 0x26, 0x3c, 0xcf, 0x9a, 0xda, + 0xd6, 0xfa, 0xc1, 0x92, 0x38, 0xb6, 0x07, 0xb3, + 0xa8, 0x71, 0x24, 0xb8, 0x35, 0xc4, 0x6c, 0x2e, + 0xdf, 0xca, 0xb2, 0x7c, 0x8d, 0xb6, 0x33, 0xe3, + 0xdb, 0x0b, 0xdf, 0x59, 0xa4, 0x73, 0xa5, 0xe2, + 0x7b, 0x9d, 0xc4, 0x78, 0x3b, 0xa5, 0x7d, 0x7a, + 0x26, 0xf2, 0x4b, 0x4b, 0x87, 0xcb, 0xc3, 0xe5, + 0x77, 0x4f, 0x63, 0x9c, 0xd0, 0x6a, 0xd6, 0x86, + 0x91, 0xb0, 0x1e, 0x5d, 0x8b, 0x32, 0xea, 0xce, + 0x59, 0x66, 0xb2, 0x7b, 0x29, 0x4b, 0x77, 0x17, + 0x3e, 0xbd, 0xd6, 0xf0, 0xec, 0x57, 0x76, 0xd5, + 0x8d, 0xf1, 0xc9, 0xa0, 0x8e, 0xd5, 0xf2, 0x62, + 0xae, 0x72, 0x12, 0x4d, 0x23, 0xa7, 0xb7, 0x7c, + 0x86, 0x02, 0x1e, 0xe0, 0x1a, 0x1a, 0x4e, 0xc2, + 0x01, 0xda, 0xb2, 0x4d, 0xbc, 0x12, 0xe6, 0x6d, + 0xae, 0xe4, 0xe2, 0x32, 0x3a, 0xd8, 0x4a, 0xea, + 0x38, 0x81, 0xc4, 0x07, 0x32, 0xcc, 0x8b, 0x15, + 0x74, 0xcc, 0x3d, 0xcd, 0x99, 0xe1, 0xeb, 0xa5, + 0xeb, 0x38, 0x4d, 0x76, 0x78, 0xc4, 0x90, 0xbe, + 0x8e, 0x3e, 0xf1, 0x97, 0x56, 0x92, 0xc6, 0xd6, + 0xbd, 0x8c, 0x84, 0x43, 0x38, 0x73, 0xa9, 0x4d, + 0x9b, 0x4b, 0x79, 0xd2, 0x3e, 0x1f, 0xed, 0xa6, + 0x78, 0x47, 0x6e, 0x2d, 0x2b, 0x2e, 0x9b, 0x72, + 0xc7, 0x5e, 0xba, 0x2b, 0xc3, 0x7c, 0x5c, 0xe3, + 0x13, 0xe3, 0x0e, 0xea, 0xb6, 0x13, 0xc2, 0x28, + 0x0d, 0x16, 0xc2, 0x48, 0x64, 0xc9, 0x64, 0x6d, + 0xe2, 0xb9, 0x32, 0x47, 0x1b, 0xad, 0xc3, 0xe5, + 0x88, 0x38, 0xb0, 0xf1, 0x57, 0xfd, 0xa4, 0x2f, + 0x78, 0xad, 0x73, 0x76, 0x4d, 0x7d, 0xa5, 0xa0, + 0x8d, 0xf6, 0xe5, 0xe4, 0xc7, 0x3b, 0xdd, 0x47, + 0x31, 0xae, 0x35, 0xf8, 0xb4, 0x35, 0xa2, 0xcb, + 0x65, 0x9d, 0xc0, 0xc9, 0xb2, 0xe5, 0xe4, 0x3d, + 0x8d, 0x84, 0x46, 0xe7, 0xee, 0x25, 0xc0, 0xef, + 0xa2, 0x72, 0x5e, 0x6c, 0xd6, 0x30, 0x31, 0x8d, + 0x60, 0xad, 0x1a, 0x00, 0x15, 0xda, 0x76, 0x2f, + 0xb5, 0x0a, 0x50, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x54, 0xf3, 0x7f, 0x9a, 0x6c, 0x3b, 0xf1, 0xfe, + 0xf2, 0xb5, 0x8e, 0x55, 0x54, 0xcd, 0xfe, 0x69, + 0xb0, 0xef, 0xc7, 0xfb, 0xca, 0xd6, 0x39, 0x50, + 0x4a, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x2a, 0x96, 0xab, 0xfb, 0xeb, 0x1d, 0xde, 0x6f, + 0xf7, 0x02, 0xb6, 0xaa, 0x9e, 0xab, 0xfb, 0xeb, + 0x1f, 0xde, 0x6f, 0xf7, 0x02, 0x0b, 0x5a, 0x95, + 0x0a, 0x50, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x45, 0x56, + 0xb6, 0xef, 0x3f, 0x67, 0x6b, 0x23, 0xe3, 0x31, + 0xcd, 0x28, 0x8b, 0xf9, 0x8f, 0x89, 0x9c, 0x4d, + 0x69, 0xee, 0x95, 0xb2, 0x3c, 0xaa, 0xbb, 0x75, + 0x35, 0xed, 0xe4, 0x57, 0x8f, 0x8a, 0x46, 0x59, + 0x59, 0xc2, 0x5e, 0xd7, 0xc8, 0x00, 0x73, 0xa4, + 0x70, 0x1f, 0xb4, 0x0e, 0xe5, 0x26, 0x6a, 0xfd, + 0x84, 0x36, 0x97, 0x19, 0x9b, 0x38, 0x20, 0x8a, + 0x6a, 0x3e, 0x51, 0x30, 0xac, 0x6c, 0x8d, 0xbc, + 0x4e, 0x23, 0x9e, 0x8b, 0xe8, 0xe5, 0x6d, 0x05, + 0x90, 0xbd, 0xa9, 0x31, 0x38, 0x55, 0xad, 0x03, + 0xc6, 0x27, 0xe4, 0xf0, 0xf3, 0xad, 0x26, 0x18, + 0xb7, 0xca, 0x31, 0x85, 0xfb, 0x5b, 0xe4, 0x8f, + 0xe0, 0x3c, 0x95, 0x24, 0x2c, 0xdc, 0xab, 0xa1, + 0xe3, 0xb1, 0x7b, 0x0b, 0x7c, 0x99, 0x97, 0x00, + 0x3c, 0xb6, 0x9c, 0x20, 0xed, 0xde, 0xae, 0xe9, + 0xaf, 0xe6, 0x98, 0xee, 0xba, 0x23, 0x6c, 0xb2, + 0xad, 0xf3, 0x96, 0x73, 0xcb, 0xd4, 0x06, 0xc9, + 0x1c, 0xdc, 0x2e, 0x79, 0x8e, 0x46, 0xf0, 0xb8, + 0x35, 0xbc, 0xa4, 0x55, 0x7d, 0x9c, 0xc5, 0x98, + 0xb0, 0x19, 0x03, 0xc5, 0xd4, 0x10, 0x08, 0x34, + 0xdb, 0xb4, 0xd3, 0x77, 0xba, 0xb0, 0x2e, 0xdd, + 0x01, 0xcf, 0x34, 0x34, 0x83, 0x2f, 0x92, 0xc9, + 0xc6, 0x06, 0xfa, 0x72, 0x55, 0x60, 0xc8, 0xf6, + 0x8d, 0x24, 0xd0, 0x48, 0x0e, 0xf1, 0x5b, 0xff, + 0x00, 0xc8, 0x38, 0x6c, 0x52, 0x3f, 0xdb, 0xe3, + 0x95, 0x2f, 0x6f, 0x06, 0xe9, 0xf9, 0x18, 0x20, + 0x9e, 0xe4, 0xcd, 0x29, 0xe0, 0x85, 0xad, 0x71, + 0x67, 0x08, 0xd9, 0xc5, 0xcc, 0x79, 0x6a, 0x96, + 0xf9, 0x8b, 0x7b, 0xa1, 0x23, 0x1a, 0xc9, 0x60, + 0x91, 0x8c, 0x2f, 0x0d, 0x95, 0x9c, 0x2e, 0x20, + 0x0f, 0x8c, 0xd1, 0x5d, 0xab, 0x5f, 0x3c, 0x16, + 0xf7, 0x17, 0x59, 0x08, 0x6e, 0x24, 0x11, 0x31, + 0xd1, 0xc3, 0xe3, 0x9f, 0xd9, 0x20, 0x6c, 0x28, + 0xc9, 0xef, 0xad, 0xee, 0x1f, 0x67, 0x7b, 0xc1, + 0x70, 0x5f, 0x14, 0x8e, 0x8a, 0xe1, 0xb4, 0x0f, + 0xe1, 0x03, 0x73, 0x82, 0x6d, 0xdb, 0xec, 0x9a, + 0xee, 0x4e, 0x11, 0xdd, 0x7d, 0xf5, 0xf5, 0x4b, + 0xb3, 0x6f, 0x17, 0x96, 0x11, 0x33, 0xad, 0x96, + 0x29, 0x9b, 0xc4, 0xf7, 0xf0, 0x53, 0x8a, 0xbb, + 0x8f, 0xb8, 0xb3, 0x63, 0xca, 0xc1, 0x15, 0xb4, + 0xd3, 0xcd, 0x2b, 0xa4, 0x6b, 0x25, 0x73, 0x00, + 0xe1, 0xa3, 0x89, 0x07, 0xe2, 0xb4, 0x72, 0xad, + 0x65, 0x99, 0xff, 0x00, 0x91, 0x89, 0xe7, 0xea, + 0x9c, 0xbe, 0x62, 0x2d, 0x12, 0xc2, 0xe9, 0x36, + 0x42, 0x2f, 0xe5, 0xe2, 0x27, 0x75, 0x49, 0x75, + 0x2a, 0xb5, 0x5b, 0x6b, 0x76, 0xfd, 0xbe, 0xc2, + 0x38, 0xf4, 0xa6, 0xe6, 0xd7, 0x31, 0x6b, 0x72, + 0x24, 0xa3, 0x64, 0x89, 0xf0, 0x8e, 0x27, 0xc7, + 0x2b, 0x78, 0x5f, 0x4e, 0x7a, 0x2f, 0x08, 0xf5, + 0x26, 0x3e, 0x57, 0x46, 0x1a, 0xd9, 0x7a, 0xb9, + 0x48, 0x0d, 0x98, 0xb3, 0xf8, 0x75, 0x3c, 0x9c, + 0x55, 0x5e, 0x19, 0x22, 0x0e, 0x5d, 0x81, 0x86, + 0x8e, 0x6d, 0xbb, 0xcc, 0xb4, 0xf9, 0x27, 0x75, + 0x56, 0x24, 0xac, 0x6b, 0x74, 0xbd, 0xbf, 0x08, + 0xa6, 0xd8, 0xce, 0xce, 0x7e, 0x26, 0xed, 0x53, + 0xaf, 0xb3, 0x67, 0x7d, 0x1f, 0x8f, 0xc2, 0xd6, + 0x3b, 0x89, 0x1d, 0x1d, 0xbc, 0x92, 0x30, 0x71, + 0x39, 0x8d, 0x2e, 0x0d, 0xe7, 0x20, 0x56, 0x8b, + 0x49, 0x88, 0xc9, 0x5d, 0xcd, 0x79, 0x1b, 0x5d, + 0x70, 0x2e, 0x59, 0x3b, 0x0b, 0xdf, 0x18, 0x00, + 0x75, 0x47, 0xe4, 0x9a, 0x2c, 0xfc, 0xc5, 0xc4, + 0xb0, 0x63, 0x9c, 0xf8, 0x8f, 0x0b, 0xdc, 0x5a, + 0xce, 0x2d, 0xe1, 0xbc, 0x44, 0x36, 0xbe, 0xfa, + 0xd1, 0xcd, 0xc5, 0x82, 0xbd, 0x8e, 0xda, 0xd5, + 0xec, 0x0d, 0xbf, 0x2d, 0x70, 0x91, 0xd4, 0xa8, + 0x75, 0x7c, 0x6f, 0x70, 0xa4, 0x6f, 0x9f, 0x04, + 0x9d, 0xd0, 0xb6, 0x55, 0x4a, 0xf9, 0x07, 0x62, + 0xfa, 0x45, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x04, 0x2e, 0x4f, 0xed, 0x77, + 0x0c, 0x6d, 0xa5, 0x66, 0x4a, 0x21, 0xfc, 0x29, + 0xe8, 0xc7, 0xb4, 0x72, 0x3b, 0xe5, 0x2e, 0xb2, + 0xb5, 0x3a, 0x9f, 0x0d, 0x1e, 0x6b, 0x0d, 0x71, + 0x64, 0xf0, 0x0b, 0x9e, 0xd3, 0xd5, 0x9e, 0x67, + 0x20, 0xfc, 0xe1, 0xca, 0xa5, 0x7a, 0xdd, 0xda, + 0x4f, 0x63, 0x77, 0x2d, 0xa5, 0xc3, 0x78, 0x65, + 0x85, 0xc5, 0x8e, 0x07, 0x9c, 0x2f, 0x24, 0x0f, + 0x87, 0x91, 0x39, 0x13, 0xe0, 0xe5, 0x56, 0x5d, + 0x05, 0x6f, 0x80, 0xba, 0xcd, 0xb6, 0xdf, 0x36, + 0xda, 0xb1, 0xc3, 0xf8, 0x35, 0x3c, 0x23, 0x8c, + 0x6e, 0xaa, 0x0c, 0x4c, 0x0e, 0x90, 0xcd, 0xe7, + 0x64, 0x68, 0xb5, 0xb7, 0x7b, 0x61, 0x77, 0xfe, + 0xf7, 0x82, 0x19, 0x4e, 0xfa, 0xe9, 0xd8, 0x3d, + 0x01, 0xa7, 0xb4, 0xc4, 0x5e, 0x5f, 0x97, 0x9d, + 0x93, 0x4a, 0x36, 0xf5, 0x93, 0x51, 0xad, 0x69, + 0xe6, 0x1c, 0xeb, 0xeb, 0x27, 0xed, 0x23, 0x4f, + 0x61, 0x25, 0x66, 0x3b, 0x1c, 0xc1, 0x37, 0x0b, + 0x83, 0x1d, 0xd5, 0xec, 0x8c, 0x72, 0x7c, 0x60, + 0xb7, 0x3a, 0x9b, 0x19, 0x06, 0xa5, 0xd3, 0x6f, + 0x64, 0x4e, 0xe2, 0x12, 0x30, 0x4b, 0x0b, 0x9b, + 0xb6, 0xa6, 0x95, 0x01, 0x07, 0x35, 0xd7, 0x1a, + 0xaf, 0x1d, 0x26, 0x62, 0x0b, 0xcd, 0x3a, 0x7a, + 0x9b, 0x88, 0x1a, 0x59, 0x25, 0xc3, 0x36, 0x07, + 0x0a, 0xec, 0xd8, 0x16, 0xf2, 0xc7, 0x40, 0x5b, + 0xe6, 0xb0, 0x12, 0x65, 0x65, 0xbd, 0x7d, 0xe6, + 0x42, 0xe2, 0x32, 0xf8, 0xe4, 0x76, 0xe6, 0xb8, + 0x6d, 0xa0, 0x15, 0x5c, 0xba, 0x68, 0x24, 0xb6, + 0x9d, 0xf6, 0xf3, 0x37, 0x85, 0xf1, 0x38, 0xb1, + 0xc0, 0xf2, 0x10, 0x57, 0x45, 0xf6, 0x49, 0xaa, + 0x04, 0x17, 0x0e, 0xc1, 0xdd, 0x3e, 0x8d, 0x97, + 0x6d, 0xbf, 0x11, 0xd9, 0xc4, 0x39, 0x3d, 0xd4, + 0x1b, 0x1d, 0x13, 0xaf, 0xa3, 0x0e, 0xf4, 0x06, + 0x74, 0x36, 0x09, 0xa2, 0x3d, 0x53, 0x1e, 0x40, + 0x6b, 0x4d, 0x36, 0x51, 0xc3, 0x72, 0xf4, 0xd4, + 0x7a, 0x25, 0xb6, 0x59, 0x6b, 0x6d, 0x4b, 0x83, + 0x67, 0x17, 0x04, 0xad, 0x7c, 0xd0, 0x33, 0x71, + 0x07, 0x65, 0x5b, 0x45, 0xa6, 0xf6, 0xaf, 0xa5, + 0xbc, 0x92, 0xed, 0xb9, 0xbb, 0x46, 0x90, 0xc9, + 0xcd, 0x25, 0xe1, 0x1b, 0x1a, 0xee, 0x75, 0x1a, + 0x13, 0xda, 0x43, 0xec, 0xdd, 0x1e, 0x2f, 0x32, + 0xfe, 0x3b, 0x63, 0x41, 0x14, 0xee, 0xfd, 0x9a, + 0xf2, 0x14, 0x1b, 0xaf, 0x6b, 0xd6, 0x4f, 0xba, + 0xc0, 0x5a, 0xde, 0xb5, 0x94, 0x30, 0xb8, 0x19, + 0x2b, 0xbc, 0x02, 0x16, 0x36, 0x86, 0xd7, 0xd8, + 0x93, 0x87, 0x6e, 0x1f, 0x32, 0x44, 0x7d, 0x4b, + 0x78, 0x1a, 0xe7, 0x7c, 0x57, 0x33, 0x90, 0x1a, + 0xac, 0xaf, 0x68, 0xfa, 0xc3, 0x03, 0x36, 0x16, + 0x7c, 0x54, 0x52, 0x79, 0x45, 0xc4, 0xe0, 0x70, + 0x16, 0x6d, 0x68, 0x3b, 0xf6, 0x95, 0xc8, 0x0f, + 0x49, 0x41, 0xd4, 0xf3, 0xba, 0xd7, 0x4d, 0x60, + 0xed, 0xa6, 0xb6, 0xd3, 0x51, 0x31, 0xd7, 0x57, + 0x2d, 0x20, 0xcc, 0xcd, 0xcd, 0xae, 0xcd, 0x85, + 0x73, 0x4b, 0x9c, 0x85, 0xf5, 0xe3, 0x40, 0xba, + 0x9d, 0xf3, 0x06, 0xee, 0x0e, 0x71, 0x34, 0xaa, + 0xf3, 0xb7, 0xb5, 0x9e, 0xe6, 0x4e, 0xaa, 0xdd, + 0x85, 0xef, 0x3c, 0x80, 0x2f, 0xab, 0xab, 0x3b, + 0xab, 0x39, 0x04, 0x77, 0x90, 0xbe, 0x12, 0x7c, + 0x6e, 0x17, 0x8a, 0x55, 0xbd, 0xc4, 0x1e, 0x35, + 0xe4, 0x57, 0x0f, 0x67, 0x9a, 0x42, 0xcb, 0x52, + 0x5c, 0x4e, 0xeb, 0xc9, 0x4b, 0x63, 0xb6, 0xa5, + 0x61, 0x1f, 0xb5, 0x5a, 0x6d, 0x57, 0x4d, 0x37, + 0xa7, 0x74, 0x6e, 0x53, 0x49, 0x87, 0x32, 0x21, + 0xc2, 0xf6, 0x52, 0x79, 0x4f, 0xc6, 0x6b, 0xf9, + 0xd6, 0xb3, 0x4c, 0x60, 0x2f, 0x74, 0xa6, 0xab, + 0xea, 0x78, 0x8c, 0xd6, 0x39, 0x18, 0xcb, 0x2d, + 0xae, 0x19, 0xb5, 0xb5, 0x3b, 0x5a, 0x4f, 0x42, + 0x0f, 0x0c, 0x3e, 0x0a, 0x3d, 0x2d, 0xed, 0x0e, + 0x28, 0xa5, 0x01, 0x96, 0xb3, 0x87, 0x79, 0x2c, + 0x87, 0x68, 0xdb, 0xc9, 0x52, 0xab, 0x1a, 0xff, + 0x00, 0x1d, 0x7d, 0x63, 0xa9, 0xae, 0x9d, 0x75, + 0xc4, 0x5b, 0x2b, 0xb8, 0xe1, 0x94, 0xd6, 0x85, + 0xa7, 0x6e, 0xc3, 0xdc, 0x57, 0xfb, 0xc8, 0xfd, + 0x66, 0xb1, 0xbc, 0xc6, 0x57, 0x87, 0x37, 0x87, + 0x93, 0x8e, 0x19, 0x3f, 0x68, 0xd3, 0x68, 0x21, + 0x69, 0x21, 0xd7, 0xf8, 0xcb, 0x9b, 0x71, 0x8f, + 0xd5, 0x76, 0x1d, 0x6d, 0xcd, 0x99, 0xe0, 0xeb, + 0x1a, 0x2a, 0xe3, 0x41, 0x4d, 0xa8, 0x35, 0x5a, + 0x7b, 0x4d, 0x59, 0xdc, 0x69, 0x3b, 0xec, 0xf4, + 0xae, 0x78, 0xbb, 0xb7, 0x35, 0x82, 0x4d, 0xa3, + 0x68, 0x35, 0xe2, 0xaf, 0x2a, 0xcc, 0xc7, 0xfb, + 0x4d, 0xb6, 0x92, 0xc1, 0x96, 0xf9, 0xbb, 0x06, + 0xde, 0x4b, 0x08, 0x1d, 0x5c, 0xa4, 0x02, 0x49, + 0x1c, 0xfb, 0x16, 0x16, 0xa8, 0xd7, 0x50, 0xdf, + 0xe3, 0x86, 0x1b, 0x0d, 0x07, 0x91, 0xe3, 0xbf, + 0x6f, 0x65, 0x0b, 0xa9, 0xb7, 0x6a, 0xa7, 0x0a, + 0x81, 0xcc, 0x79, 0x90, 0x6f, 0xf5, 0x56, 0xb0, + 0xbf, 0xd4, 0x72, 0xb2, 0x37, 0xb0, 0x5b, 0xd9, + 0xc3, 0xfc, 0x9b, 0x76, 0x7c, 0x51, 0xc9, 0x55, + 0xa0, 0x3b, 0x76, 0xa2, 0x7c, 0x28, 0x08, 0x88, + 0x80, 0x55, 0xaf, 0x12, 0x7f, 0xfa, 0xe8, 0x7b, + 0xdf, 0xe6, 0xaa, 0x87, 0xfc, 0x95, 0xa7, 0x15, + 0xf7, 0x7c, 0x3d, 0xef, 0xf3, 0x5a, 0xc5, 0x32, + 0x66, 0x55, 0x45, 0x52, 0xaa, 0x09, 0x5a, 0xb6, + 0x0a, 0x95, 0x04, 0x95, 0x04, 0xa8, 0xa9, 0x40, + 0x25, 0x09, 0x50, 0x4a, 0x8a, 0xa0, 0x9a, 0xa8, + 0x25, 0x45, 0x4a, 0x8a, 0xa0, 0x12, 0x57, 0xcd, + 0x4a, 0x13, 0xbd, 0x45, 0x50, 0x49, 0x25, 0x7c, + 0xd5, 0x09, 0xda, 0xa1, 0x14, 0x24, 0xaf, 0x92, + 0x54, 0x92, 0xbe, 0x4a, 0x82, 0x6a, 0xbc, 0xa5, + 0x61, 0x70, 0x0e, 0x69, 0xe0, 0x91, 0x87, 0x8a, + 0x37, 0x8d, 0xe0, 0x8d, 0xcb, 0xec, 0x95, 0x1c, + 0xb5, 0x49, 0x57, 0x55, 0xd0, 0x3a, 0xa9, 0xb9, + 0xab, 0x01, 0x69, 0x70, 0x78, 0x6f, 0xed, 0x47, + 0x0c, 0xad, 0xf9, 0x4d, 0x1b, 0x9c, 0x15, 0xb2, + 0xab, 0x82, 0x63, 0xf2, 0x37, 0x58, 0x9b, 0xf8, + 0xf2, 0x36, 0x6e, 0xe1, 0x96, 0x33, 0xe3, 0x8f, + 0x96, 0xcf, 0xda, 0x05, 0x76, 0xbc, 0x16, 0x6a, + 0xd3, 0x35, 0x8f, 0x8a, 0xfa, 0xd5, 0xd5, 0x6b, + 0xc7, 0x8c, 0xde, 0x56, 0xb8, 0x6f, 0x05, 0x66, + 0x9a, 0x6c, 0x51, 0x11, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x41, 0x0a, 0x51, 0x10, 0x11, 0x11, 0x04, + 0x2f, 0x13, 0x69, 0x09, 0xba, 0x6d, 0xd9, 0x6f, + 0xf1, 0x9a, 0xde, 0x00, 0xee, 0xe2, 0xf7, 0x44, + 0x10, 0xa5, 0x11, 0x04, 0x22, 0x94, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x41, 0x53, 0xcd, 0xfe, 0x69, 0xb0, 0xef, 0xc7, + 0xfb, 0xca, 0xd6, 0x39, 0x55, 0x53, 0x37, 0xf9, + 0xa6, 0xc3, 0xbf, 0x1f, 0xef, 0x2b, 0x58, 0xe5, + 0x41, 0x28, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0xaa, 0x7a, 0xaf, 0xef, 0xac, 0x7f, 0x79, + 0xbf, 0xdc, 0x0a, 0xd8, 0xaa, 0x7a, 0xaf, 0xef, + 0xac, 0x7f, 0x79, 0xbf, 0xdc, 0x08, 0x2d, 0x7c, + 0xaa, 0x54, 0x72, 0xa9, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x5a, 0xe7, 0xe0, 0xb1, 0xcf, 0xb8, 0x37, + 0x0e, 0x8c, 0x97, 0xb8, 0xd5, 0xcd, 0xe2, 0x3c, + 0x04, 0x9e, 0x76, 0xee, 0x5b, 0x05, 0xaa, 0x9b, + 0x52, 0xd8, 0x44, 0xe9, 0x1a, 0xe6, 0xca, 0x44, + 0x2e, 0x2c, 0x95, 0xe1, 0xb5, 0x6b, 0x48, 0xe7, + 0x28, 0x3d, 0xe4, 0xc2, 0xe3, 0xe4, 0xb5, 0x8e, + 0xd5, 0xcc, 0x22, 0x28, 0x8d, 0x59, 0xc2, 0xe2, + 0x1c, 0x2b, 0xfe, 0xe1, 0xb5, 0x7a, 0x1c, 0x75, + 0xa7, 0x91, 0xf9, 0x17, 0x07, 0xf0, 0x29, 0x4a, + 0x72, 0xf7, 0xeb, 0xce, 0xbc, 0xad, 0xb3, 0x56, + 0xb7, 0x37, 0x3e, 0x4c, 0xd6, 0xbd, 0x8e, 0xe1, + 0x2f, 0x6b, 0x9e, 0xda, 0x35, 0xcd, 0x1c, 0xad, + 0x3c, 0xab, 0xcf, 0xd3, 0xf6, 0x5d, 0x77, 0x57, + 0xc3, 0x27, 0x07, 0x17, 0x0f, 0x5f, 0xc3, 0xfc, + 0x2a, 0xfc, 0xf4, 0x18, 0xd0, 0x62, 0x63, 0xb3, + 0xcd, 0x44, 0xeb, 0x78, 0x9d, 0xd5, 0x18, 0x5e, + 0x1f, 0x23, 0x89, 0x76, 0xd2, 0x5b, 0x40, 0x49, + 0x59, 0x2e, 0xd3, 0xf8, 0xc7, 0xc8, 0xf7, 0x3a, + 0x33, 0xfc, 0x43, 0x57, 0x37, 0x88, 0xf0, 0xd6, + 0xb5, 0xd8, 0xdd, 0xc1, 0x7d, 0x5d, 0x67, 0x2d, + 0x2d, 0xae, 0x1d, 0x6c, 0x59, 0x24, 0xb3, 0x31, + 0xa1, 0xc5, 0x91, 0xb7, 0x88, 0xf0, 0xbb, 0x94, + 0x28, 0x76, 0x56, 0x19, 0x60, 0xb7, 0x9e, 0x27, + 0xb9, 0x8c, 0x96, 0x40, 0xda, 0x70, 0x82, 0xe3, + 0xb0, 0xd5, 0xa4, 0x72, 0x6e, 0x43, 0x8f, 0xb7, + 0xe9, 0x6c, 0x89, 0x31, 0xb6, 0x92, 0xf5, 0xdd, + 0x63, 0x2b, 0xd7, 0xb4, 0x36, 0x4d, 0xbb, 0xc3, + 0x77, 0x2f, 0x3b, 0x4c, 0x35, 0x8d, 0xa1, 0x79, + 0x89, 0xae, 0x26, 0x41, 0xc2, 0xe2, 0xf7, 0x17, + 0x1a, 0x1d, 0xf4, 0xe2, 0xdc, 0xb0, 0xf1, 0x59, + 0xb7, 0x4f, 0x25, 0xe1, 0xb8, 0x0f, 0x64, 0x70, + 0x38, 0xf0, 0xb9, 0xed, 0xe1, 0x68, 0x68, 0xe4, + 0xaf, 0x3a, 0xca, 0xb4, 0xce, 0x5a, 0xdd, 0x4c, + 0xd8, 0x43, 0x24, 0x89, 0xcf, 0x15, 0x8c, 0xc8, + 0xde, 0x10, 0xef, 0x9a, 0x79, 0x53, 0xf0, 0xf1, + 0x3a, 0x76, 0xd8, 0xfb, 0x7e, 0x22, 0xc5, 0xed, + 0x81, 0xa5, 0x84, 0x0b, 0x63, 0x58, 0x88, 0x24, + 0x11, 0x4e, 0xef, 0x2a, 0xfa, 0x76, 0x2e, 0xcd, + 0xd0, 0x49, 0x6e, 0xe6, 0x56, 0x39, 0x5c, 0x5e, + 0xe1, 0xb6, 0xbc, 0x4e, 0x35, 0xa8, 0x2b, 0xc1, + 0xf9, 0xbb, 0x67, 0x4b, 0x24, 0x11, 0x36, 0x57, + 0x39, 0x9c, 0x4d, 0x7c, 0x8c, 0x65, 0x5a, 0xc2, + 0xd0, 0x7e, 0x32, 0xf8, 0x19, 0xbb, 0x68, 0x21, + 0xb7, 0x12, 0x19, 0x26, 0x92, 0x76, 0x71, 0xb3, + 0x85, 0xbe, 0x33, 0xf7, 0x7e, 0xc8, 0x4d, 0xfd, + 0xff, 0x00, 0x31, 0x93, 0x6b, 0x89, 0xb2, 0xb4, + 0x64, 0x8d, 0x85, 0x87, 0xf8, 0xa2, 0x8f, 0x73, + 0x89, 0x73, 0x88, 0xa5, 0x29, 0x53, 0xb5, 0x7d, + 0x3b, 0x19, 0x66, 0xeb, 0x56, 0x59, 0x96, 0x1e, + 0xa1, 0x94, 0x2d, 0x6d, 0x7e, 0x49, 0xa8, 0xda, + 0xbc, 0xed, 0xf3, 0x36, 0x93, 0xdb, 0x49, 0x73, + 0xe3, 0x44, 0xd8, 0x76, 0x48, 0xd9, 0x07, 0x0b, + 0x81, 0xe6, 0xa2, 0xf1, 0x83, 0x51, 0x59, 0xcb, + 0x3c, 0x50, 0x18, 0xe5, 0x8e, 0x49, 0xcd, 0x23, + 0x6b, 0xdb, 0x4a, 0x8a, 0x57, 0x8b, 0xbc, 0x87, + 0x3e, 0x8d, 0x8c, 0x91, 0x47, 0x2c, 0x6e, 0x8a, + 0x46, 0x87, 0x31, 0xc2, 0x84, 0x1e, 0x65, 0x81, + 0x1e, 0x9e, 0xc5, 0xb0, 0x3b, 0xf8, 0x65, 0xc5, + 0xe2, 0x95, 0x7b, 0x8b, 0x88, 0x15, 0xaf, 0x8a, + 0x4e, 0xe5, 0xb3, 0x44, 0x1f, 0x2c, 0x63, 0x58, + 0xc0, 0xc6, 0xfc, 0x56, 0x8a, 0x0e, 0xf0, 0x5f, + 0x48, 0xb0, 0xf2, 0x19, 0x3b, 0x6b, 0x08, 0xb8, + 0xe6, 0x70, 0xe2, 0x3f, 0x15, 0xbc, 0xa5, 0x06, + 0x44, 0xd3, 0x45, 0x03, 0x0c, 0x92, 0xb8, 0x31, + 0xa3, 0x69, 0x25, 0x6a, 0xce, 0xa4, 0xb7, 0x2f, + 0x22, 0x38, 0xdc, 0xf6, 0x72, 0x38, 0x0d, 0x8b, + 0x57, 0x2b, 0xae, 0xb2, 0xf2, 0x09, 0x6e, 0x8f, + 0x55, 0x6c, 0x36, 0xb2, 0x31, 0xb2, 0xbd, 0xf5, + 0x92, 0xd6, 0x46, 0xc1, 0xc2, 0xc0, 0x00, 0x1c, + 0x88, 0x32, 0xfd, 0x62, 0x8f, 0xb1, 0x7f, 0x42, + 0x8f, 0x58, 0x99, 0xd8, 0xbf, 0xa1, 0x63, 0x51, + 0xbd, 0xc4, 0xa0, 0xe6, 0x08, 0x32, 0x7d, 0x62, + 0x67, 0x62, 0xfe, 0x84, 0xf5, 0x89, 0x9d, 0x8b, + 0xfa, 0x16, 0x35, 0x07, 0x30, 0x4a, 0x37, 0xb8, + 0x83, 0x27, 0xd6, 0x26, 0x76, 0x2f, 0xe8, 0x4f, + 0x58, 0xa3, 0xec, 0x5f, 0xd0, 0xb1, 0xa8, 0xde, + 0xe2, 0x51, 0xbd, 0xc4, 0x19, 0x5e, 0xb0, 0xc7, + 0xd8, 0xbf, 0xa1, 0x3d, 0x62, 0x8f, 0xb1, 0x7f, + 0x42, 0xc5, 0xa3, 0x7b, 0x89, 0x46, 0xf7, 0x10, + 0x64, 0xfa, 0xc5, 0x1f, 0x62, 0xfe, 0x84, 0xf5, + 0x8a, 0x3a, 0x54, 0xc4, 0xe0, 0x07, 0x29, 0x0b, + 0x0e, 0x69, 0xa1, 0x81, 0x86, 0x49, 0x5c, 0x1a, + 0xd0, 0xab, 0x19, 0x6c, 0xfc, 0x97, 0x0e, 0x30, + 0xdb, 0x78, 0x91, 0x6e, 0x24, 0x72, 0xa0, 0xb7, + 0xdb, 0xea, 0xdb, 0x0b, 0x8b, 0xb6, 0x5a, 0xb0, + 0x1e, 0xb1, 0xe6, 0x83, 0xbe, 0xb6, 0xd7, 0x57, + 0x76, 0xd6, 0x90, 0x99, 0xae, 0x5e, 0x22, 0x8c, + 0x6f, 0x73, 0x8d, 0x02, 0xe5, 0x36, 0x17, 0x91, + 0x63, 0xef, 0x63, 0xbf, 0x9b, 0x6b, 0x20, 0xab, + 0x9d, 0xdd, 0x5a, 0x1d, 0x5f, 0xae, 0x32, 0x1a, + 0x92, 0xe7, 0xc9, 0xe0, 0xe2, 0x8e, 0xcc, 0x3b, + 0xf8, 0x71, 0x36, 0xb5, 0x28, 0x3b, 0x08, 0xd5, + 0xfa, 0x77, 0xcf, 0x62, 0xff, 0x00, 0xc8, 0x29, + 0xf5, 0xbf, 0x4e, 0xf9, 0xf4, 0x5f, 0xf9, 0x05, + 0xc2, 0xd9, 0xa4, 0x75, 0x1c, 0x8c, 0x6b, 0xdb, + 0x6b, 0x21, 0x6b, 0x85, 0x46, 0xf5, 0x3e, 0xa6, + 0xea, 0x5f, 0x35, 0x93, 0xa0, 0xa0, 0xdf, 0xfb, + 0x50, 0x87, 0x11, 0x71, 0x7e, 0xcc, 0xae, 0x32, + 0x76, 0x4a, 0x66, 0x1c, 0x33, 0x31, 0x94, 0xd8, + 0x47, 0xed, 0x1a, 0x73, 0xd5, 0x52, 0x3b, 0xab, + 0x79, 0x0e, 0x90, 0xd4, 0x8c, 0x75, 0x1d, 0x6b, + 0x27, 0x03, 0xb6, 0x3b, 0x62, 0xd4, 0xdd, 0xda, + 0xcf, 0x67, 0x70, 0xfb, 0x6b, 0x86, 0x18, 0xe4, + 0x66, 0xce, 0x17, 0x0a, 0x20, 0xf1, 0x52, 0x0b, + 0x9a, 0x43, 0x9a, 0x48, 0x70, 0xdc, 0x46, 0xc2, + 0x14, 0x7c, 0x3c, 0xc8, 0x80, 0x6a, 0x6a, 0x4e, + 0xfe, 0x53, 0xca, 0xba, 0xd7, 0xb2, 0x5d, 0x51, + 0xe5, 0x16, 0xee, 0xc2, 0xdd, 0x3c, 0x75, 0x90, + 0xed, 0xb7, 0xa9, 0xda, 0x5b, 0xcd, 0xee, 0x2e, + 0x4a, 0xb3, 0xb0, 0xb9, 0x59, 0xb0, 0xf9, 0x38, + 0x32, 0x10, 0x1a, 0x3a, 0x27, 0x0a, 0xf7, 0x47, + 0x28, 0x41, 0x74, 0xf6, 0xaf, 0xa5, 0xdb, 0x63, + 0x76, 0xdc, 0xdd, 0xab, 0x69, 0x05, 0xc9, 0xa4, + 0xe0, 0x6e, 0x0f, 0xff, 0x00, 0x55, 0x41, 0xb6, + 0xb9, 0x96, 0xd6, 0xe2, 0x2b, 0x98, 0x0f, 0x0c, + 0x91, 0x38, 0x39, 0xa4, 0x6f, 0xd8, 0x6a, 0xbb, + 0xa6, 0x6f, 0x31, 0xa7, 0x73, 0x1a, 0x55, 0xd2, + 0x5e, 0xdc, 0x32, 0x38, 0x6e, 0x63, 0xe2, 0x60, + 0x24, 0x71, 0x07, 0xd3, 0x90, 0x73, 0xae, 0x12, + 0xf6, 0xb1, 0xb2, 0x3d, 0xac, 0x35, 0x8c, 0x38, + 0xf0, 0x3b, 0x9c, 0x72, 0x20, 0xec, 0x39, 0x2d, + 0x6d, 0xa6, 0xf2, 0x9a, 0x42, 0x99, 0x19, 0x1a, + 0x67, 0x9a, 0x3a, 0x3a, 0xdd, 0xa4, 0x17, 0x07, + 0x81, 0xbe, 0x8b, 0x8e, 0x3b, 0x86, 0xa4, 0x33, + 0xe2, 0xd7, 0xc5, 0xef, 0x28, 0xff, 0x00, 0x1b, + 0x53, 0x67, 0x7c, 0x72, 0xa0, 0x9a, 0x93, 0xbc, + 0xd4, 0xad, 0x9e, 0x03, 0x01, 0x7d, 0x9f, 0xbf, + 0x16, 0x56, 0x3c, 0x3c, 0x74, 0xe2, 0x71, 0x71, + 0xa5, 0x07, 0x2a, 0xb8, 0x69, 0x6f, 0x66, 0x56, + 0x99, 0x9c, 0x1f, 0xa4, 0x26, 0xba, 0x22, 0x69, + 0xdb, 0x58, 0x43, 0x69, 0x46, 0x9e, 0x4a, 0xac, + 0x5d, 0x27, 0x63, 0x90, 0xd2, 0x7a, 0xde, 0x1b, + 0x6c, 0x8c, 0x65, 0xad, 0x9a, 0xb1, 0x32, 0x4f, + 0xd9, 0x75, 0x79, 0x41, 0xe5, 0x41, 0x95, 0x63, + 0x81, 0x76, 0x94, 0xc9, 0xba, 0xce, 0xf0, 0xb0, + 0x99, 0x9b, 0xc6, 0xc9, 0xde, 0x68, 0xd7, 0xb4, + 0x7c, 0x68, 0xc1, 0xe7, 0x5a, 0x6d, 0x67, 0x7d, + 0x05, 0xc4, 0x50, 0xc3, 0xc4, 0x24, 0x98, 0x3e, + 0x42, 0xda, 0x6d, 0xe0, 0x67, 0x16, 0xc1, 0x5e, + 0x5d, 0x8b, 0xa1, 0x6a, 0x6b, 0x7b, 0x7d, 0x59, + 0x6b, 0x90, 0xc4, 0x00, 0x19, 0x91, 0xc6, 0x38, + 0x49, 0x11, 0xdc, 0xe2, 0x29, 0x5d, 0x8b, 0x8a, + 0xcd, 0x1c, 0x91, 0x4f, 0x24, 0x53, 0x54, 0x49, + 0x19, 0x2d, 0x78, 0x3b, 0xea, 0xdd, 0x85, 0x05, + 0xbf, 0xd9, 0xc6, 0xa7, 0x66, 0x33, 0x22, 0x71, + 0xb7, 0x87, 0xfe, 0x0d, 0xf7, 0xf0, 0xdc, 0x39, + 0x03, 0x9d, 0xb0, 0x15, 0x6c, 0x97, 0x39, 0x3e, + 0x8b, 0xcd, 0xb7, 0x1b, 0x91, 0x06, 0x7c, 0x44, + 0xc7, 0x8e, 0xca, 0x67, 0x6d, 0x31, 0xd7, 0x65, + 0x01, 0xee, 0x2e, 0x44, 0x0b, 0x9a, 0xe0, 0xf6, + 0x9a, 0x39, 0xa6, 0xad, 0x23, 0x92, 0x8b, 0x61, + 0x95, 0xcf, 0xe5, 0x72, 0xec, 0x85, 0x97, 0xf2, + 0xf5, 0x8d, 0xb7, 0x68, 0x6c, 0x60, 0xf7, 0x10, + 0x58, 0x73, 0xfa, 0xb2, 0x3b, 0x5d, 0x5b, 0x2e, + 0x5f, 0x4f, 0xca, 0x69, 0x23, 0x38, 0x5e, 0x48, + 0xd8, 0x49, 0xee, 0x2a, 0x9d, 0xd5, 0xcc, 0xd7, + 0x97, 0x32, 0x5c, 0xce, 0x43, 0xa5, 0x99, 0xdc, + 0x6f, 0x23, 0x65, 0x49, 0xee, 0x2f, 0x1a, 0x51, + 0x4d, 0x50, 0x11, 0x3e, 0x14, 0x40, 0x44, 0xaa, + 0x20, 0x22, 0x25, 0x50, 0x0e, 0xef, 0x71, 0x5a, + 0x31, 0x7f, 0x77, 0xc3, 0xde, 0xff, 0x00, 0x35, + 0x57, 0x3b, 0xaa, 0xac, 0xf8, 0xc3, 0xff, 0x00, + 0x02, 0x1e, 0xf7, 0xf9, 0xad, 0x62, 0x99, 0x32, + 0x89, 0x51, 0x54, 0x25, 0x45, 0x76, 0x2d, 0x30, + 0x55, 0x41, 0x2a, 0x2a, 0xa0, 0x94, 0x12, 0x4a, + 0x8a, 0xa8, 0x25, 0x45, 0x42, 0x01, 0x29, 0x55, + 0xf2, 0x4e, 0xd4, 0x45, 0x09, 0x50, 0xa0, 0x95, + 0x15, 0x41, 0x24, 0xaf, 0x9a, 0xa5, 0x57, 0xcd, + 0x54, 0x12, 0x4a, 0x82, 0x50, 0x95, 0x15, 0x45, + 0x09, 0x51, 0x54, 0x2a, 0x2a, 0xa0, 0x6c, 0x5b, + 0xbd, 0x1f, 0xa9, 0xa4, 0xd3, 0xd9, 0x20, 0x25, + 0x25, 0xd8, 0xfb, 0x92, 0x04, 0xad, 0x1b, 0x9a, + 0xe2, 0x69, 0xc4, 0xb4, 0x55, 0x5f, 0x2f, 0x00, + 0xb4, 0x82, 0x2a, 0x0e, 0xf0, 0xa2, 0xbf, 0x42, + 0xc3, 0x2c, 0x73, 0x44, 0xd9, 0x62, 0x70, 0x7b, + 0x1e, 0x2a, 0xd7, 0x0d, 0xa0, 0x82, 0xbd, 0x17, + 0x2f, 0xf6, 0x71, 0xab, 0x5d, 0x6d, 0x2b, 0x70, + 0x19, 0x07, 0xd6, 0x27, 0x6d, 0xb4, 0x95, 0xdc, + 0x9f, 0xec, 0x25, 0x74, 0xfa, 0xa8, 0xa9, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x15, 0x3c, 0xdf, 0xe6, 0x9b, 0x1e, + 0xfc, 0x7f, 0xbc, 0xad, 0x6a, 0xa9, 0x9b, 0xfc, + 0xd3, 0x63, 0xdf, 0x8f, 0xf7, 0x95, 0xac, 0x20, + 0x94, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x55, 0x3d, 0x57, 0xf7, 0xd6, 0x3f, 0xbc, 0xdf, + 0xee, 0x05, 0x6c, 0x55, 0x3d, 0x57, 0xf7, 0xd6, + 0x3f, 0xbc, 0xdf, 0xee, 0x04, 0x16, 0xbe, 0x55, + 0x2a, 0x14, 0xa0, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x8e, + 0x75, 0x58, 0x73, 0x1b, 0xe8, 0xac, 0xd1, 0x22, + 0xa5, 0xd3, 0x3c, 0x1e, 0xe8, 0x04, 0x2b, 0x3a, + 0xc5, 0xf4, 0x6d, 0xa7, 0x55, 0x34, 0x3c, 0x1e, + 0x25, 0xc3, 0x8b, 0xa5, 0x15, 0xde, 0x4a, 0x0d, + 0x4d, 0xeb, 0x78, 0x6f, 0x31, 0xec, 0x8f, 0x65, + 0x2d, 0xe5, 0x0d, 0x03, 0xbc, 0xd5, 0x0e, 0x7c, + 0x07, 0x4b, 0x86, 0x8a, 0x7f, 0x2d, 0xad, 0xa0, + 0xdf, 0xc7, 0x5f, 0x85, 0x6e, 0x9d, 0x65, 0x6e, + 0xe9, 0xa2, 0x98, 0xb2, 0xaf, 0x81, 0xa5, 0xb1, + 0x9e, 0x60, 0x7f, 0xfc, 0x2c, 0x61, 0x82, 0xc7, + 0x0b, 0x9f, 0x29, 0xea, 0xcf, 0x17, 0x17, 0x17, + 0x0f, 0x11, 0xe0, 0xaf, 0x3f, 0x06, 0xe4, 0x9d, + 0xbe, 0x3e, 0x2b, 0xcb, 0xa4, 0xdb, 0x07, 0x1a, + 0xc2, 0x33, 0x13, 0x97, 0x8a, 0xbc, 0x5b, 0x44, + 0x09, 0x3b, 0xf7, 0x2c, 0x3b, 0x61, 0x48, 0xa2, + 0x03, 0x70, 0xc8, 0xbf, 0x67, 0xfe, 0x4a, 0xc6, + 0x2c, 0xe0, 0x6d, 0xcb, 0xee, 0x5a, 0xda, 0x4b, + 0x23, 0x43, 0x5e, 0xe1, 0xca, 0x06, 0xe5, 0xe6, + 0xdc, 0x5d, 0x9b, 0x40, 0x02, 0x3d, 0x8d, 0x94, + 0xce, 0x36, 0xff, 0x00, 0xec, 0x3c, 0xaa, 0xc7, + 0x6f, 0x7d, 0xa7, 0x6f, 0xf4, 0xf9, 0x5a, 0x39, + 0x76, 0xd9, 0xe5, 0x79, 0x47, 0x5e, 0x0b, 0xbb, + 0xdc, 0x4b, 0x37, 0x2c, 0xe8, 0xdc, 0xcb, 0x01, + 0x0d, 0x0c, 0x86, 0x66, 0x18, 0xb8, 0x77, 0xf0, + 0xd3, 0x6d, 0x16, 0xc1, 0xb8, 0xcb, 0x46, 0x4f, + 0x2c, 0xe1, 0x9e, 0x34, 0xe2, 0x92, 0x8a, 0x92, + 0xd3, 0xff, 0x00, 0xc5, 0x79, 0xda, 0x61, 0x6c, + 0x6d, 0x26, 0xeb, 0xa2, 0x63, 0xb8, 0xe9, 0x46, + 0x97, 0x38, 0xb8, 0x01, 0xdc, 0x07, 0x72, 0x91, + 0xb3, 0xcb, 0xd3, 0xcb, 0xfe, 0x98, 0x38, 0xf7, + 0xe5, 0x3e, 0xf9, 0xb6, 0x16, 0x3d, 0xad, 0x10, + 0x64, 0x9c, 0x06, 0xd7, 0x3e, 0x5a, 0xf7, 0x69, + 0x55, 0x8d, 0x60, 0xd6, 0x9b, 0xbc, 0x4d, 0x40, + 0xd9, 0x6a, 0x48, 0xee, 0x6e, 0x5b, 0xd8, 0xec, + 0xed, 0xe3, 0x6c, 0xac, 0x6b, 0x68, 0x26, 0x24, + 0xc9, 0xdd, 0xe2, 0xde, 0xbe, 0x23, 0xc7, 0x5a, + 0x44, 0xf8, 0x5e, 0xc6, 0x51, 0xd0, 0x34, 0xc7, + 0x1e, 0xd3, 0xb1, 0xa5, 0x4a, 0xdd, 0xfe, 0x5f, + 0x03, 0x84, 0xf7, 0xf8, 0xb4, 0x17, 0x80, 0xf5, + 0xb9, 0x3d, 0x95, 0x60, 0x9a, 0x12, 0xf1, 0xdc, + 0xd8, 0xb3, 0x72, 0xae, 0xb7, 0x76, 0x53, 0x14, + 0x18, 0x41, 0x90, 0xc8, 0x4b, 0x48, 0xf9, 0x1c, + 0x25, 0x66, 0x5e, 0x5b, 0x36, 0xde, 0x1b, 0x99, + 0xe0, 0x83, 0xae, 0x96, 0x7a, 0x19, 0x58, 0x49, + 0xf1, 0x80, 0xd9, 0xb3, 0xdc, 0x5a, 0xbc, 0x7d, + 0x8c, 0x32, 0xdf, 0xc1, 0x25, 0xad, 0xb4, 0xd0, + 0x32, 0xd8, 0x97, 0x3d, 0xd7, 0x1c, 0x55, 0xa9, + 0x14, 0xe1, 0x67, 0x15, 0x76, 0x2b, 0x1b, 0xfd, + 0xde, 0x04, 0xf1, 0xeb, 0x6b, 0x22, 0x94, 0x44, + 0x10, 0xa9, 0x0e, 0xc5, 0x5d, 0x66, 0x72, 0xd7, + 0x72, 0x19, 0xcb, 0x45, 0xbb, 0xe8, 0xc6, 0x9d, + 0xca, 0xee, 0xab, 0x98, 0x0f, 0xfb, 0xf9, 0x2d, + 0xbf, 0xfb, 0x0a, 0x0c, 0x47, 0xe9, 0xcb, 0xf8, + 0xda, 0x5f, 0x25, 0xef, 0x0b, 0x07, 0x29, 0xa0, + 0x0b, 0x55, 0x33, 0xe3, 0x89, 0xfc, 0x1e, 0x5e, + 0x5c, 0x79, 0xf6, 0x2f, 0xad, 0x57, 0x9e, 0x92, + 0xe6, 0xe0, 0xd9, 0x40, 0xe2, 0xd8, 0x62, 0xd8, + 0xf7, 0x0e, 0x53, 0xcc, 0xab, 0x63, 0x6f, 0x75, + 0x72, 0xd4, 0xd7, 0xc3, 0x09, 0xa9, 0xde, 0xf7, + 0x7a, 0x3f, 0xdb, 0x35, 0xfd, 0x4e, 0x33, 0x9e, + 0x35, 0x8e, 0x1c, 0x32, 0xcb, 0x8a, 0xdf, 0x67, + 0x8b, 0x96, 0xf8, 0x56, 0xde, 0xfe, 0xa7, 0x98, + 0xd2, 0xab, 0x27, 0xd5, 0x9c, 0x97, 0x9d, 0x9f, + 0x79, 0x53, 0xac, 0xef, 0x67, 0xb3, 0x99, 0x93, + 0xc2, 0xe2, 0xd2, 0xd3, 0xb5, 0xbd, 0xc5, 0xd2, + 0xb1, 0x39, 0x16, 0x64, 0xec, 0x59, 0x70, 0xcd, + 0x8e, 0x3b, 0x1f, 0xdf, 0x5a, 0xd3, 0xd4, 0xc7, + 0x52, 0x2f, 0x19, 0x70, 0xf5, 0x5e, 0x97, 0x57, + 0xd3, 0x6a, 0x79, 0x35, 0x62, 0x23, 0x94, 0xde, + 0xf6, 0x99, 0xda, 0x6b, 0x22, 0xd6, 0x97, 0x3a, + 0xf7, 0x85, 0xa3, 0x79, 0x34, 0x5a, 0xab, 0x97, + 0x45, 0x04, 0x86, 0x33, 0x90, 0x2e, 0x23, 0x7d, + 0x28, 0x56, 0xcb, 0x31, 0x79, 0x77, 0x96, 0xc8, + 0xfa, 0x1e, 0xc1, 0xc5, 0x8c, 0x6f, 0xf3, 0xde, + 0x0f, 0x22, 0xda, 0xd9, 0x69, 0x2c, 0x55, 0xbc, + 0x21, 0x92, 0xc7, 0xd7, 0x49, 0xfb, 0x4f, 0x77, + 0x29, 0x5b, 0x70, 0x68, 0x6c, 0x2c, 0x1d, 0x90, + 0xd9, 0x6f, 0x91, 0xab, 0xbe, 0x4e, 0xc5, 0x99, + 0xea, 0xce, 0x4b, 0xcf, 0x0f, 0xbc, 0xa7, 0x33, + 0xa5, 0xfc, 0x94, 0x79, 0x7e, 0x24, 0x98, 0xa5, + 0x8b, 0xc6, 0x31, 0x8d, 0xc4, 0x05, 0xb1, 0xc1, + 0x65, 0xbd, 0x25, 0x60, 0x65, 0x76, 0xc9, 0xe2, + 0x05, 0xaf, 0x6f, 0x74, 0x20, 0xac, 0x65, 0xe3, + 0x9f, 0x18, 0xf1, 0x17, 0x95, 0x99, 0x67, 0x3f, + 0xfa, 0xdb, 0xb4, 0xa9, 0xc4, 0xc5, 0x3e, 0x4d, + 0xc6, 0x2f, 0x2b, 0x31, 0x4e, 0x3f, 0xf5, 0x9d, + 0x8b, 0x37, 0x4f, 0xdb, 0x36, 0xfa, 0xef, 0x23, + 0x7d, 0x2b, 0x44, 0xd7, 0x31, 0xb8, 0x88, 0xd8, + 0xee, 0x45, 0xae, 0x9a, 0xc2, 0xfb, 0x1d, 0x7b, + 0x6d, 0x90, 0x9c, 0x88, 0xe7, 0xb8, 0x97, 0xf9, + 0x4d, 0xe4, 0x04, 0xa0, 0xf0, 0xd4, 0x56, 0x77, + 0x76, 0x33, 0x32, 0xde, 0x79, 0x8c, 0xa1, 0xc2, + 0xab, 0x51, 0x41, 0x4a, 0x2b, 0x26, 0xb9, 0x35, + 0xbe, 0x80, 0x9d, 0xe5, 0x80, 0xf4, 0x85, 0x5b, + 0x41, 0xe3, 0x77, 0x6b, 0x2d, 0xdd, 0xbb, 0xad, + 0xa0, 0x6f, 0x1c, 0xb2, 0x78, 0xac, 0x6f, 0x74, + 0xab, 0x56, 0x88, 0xf6, 0x6b, 0x6b, 0x8c, 0x8d, + 0x97, 0xd9, 0x46, 0x89, 0xae, 0xdc, 0x2a, 0xd8, + 0xce, 0xe6, 0xad, 0x5e, 0x9f, 0x15, 0xcc, 0x5b, + 0x0d, 0xfe, 0x32, 0xb7, 0x6a, 0xcd, 0x6f, 0x8e, + 0xd3, 0xb0, 0xf0, 0xb8, 0x89, 0xae, 0x8f, 0xc5, + 0x88, 0x1d, 0xdd, 0xf4, 0x16, 0x31, 0x1c, 0x60, + 0x00, 0x1a, 0x00, 0x1b, 0x80, 0x0a, 0x78, 0x19, + 0xf2, 0x42, 0xe5, 0x9f, 0xad, 0x23, 0xcc, 0xfd, + 0xf4, 0xfd, 0x6a, 0x1e, 0x67, 0xef, 0x94, 0x1d, + 0x4c, 0xb1, 0x9f, 0x24, 0x74, 0x2e, 0x5f, 0xed, + 0x7b, 0x4d, 0x02, 0xd8, 0xb3, 0xb6, 0xcc, 0xda, + 0xd0, 0x23, 0xb8, 0x03, 0x98, 0x7c, 0x52, 0xbe, + 0x3f, 0x5a, 0x87, 0x99, 0xfb, 0xe5, 0x63, 0x64, + 0xbd, 0xac, 0xdb, 0x64, 0xec, 0xa4, 0xb2, 0xb9, + 0xb2, 0xac, 0x52, 0x8e, 0x13, 0xb7, 0x75, 0x79, + 0x50, 0x73, 0x91, 0xbb, 0xfc, 0xd1, 0x7d, 0xce, + 0xc6, 0x32, 0x67, 0x35, 0x9f, 0xcb, 0x26, 0xac, + 0xef, 0x1d, 0xcb, 0xe1, 0x01, 0x08, 0x1f, 0xe8, + 0x89, 0xf0, 0xa0, 0x93, 0x2c, 0xae, 0x8d, 0xb1, + 0x39, 0xee, 0x74, 0x6d, 0xf8, 0xac, 0x24, 0x90, + 0x3d, 0xc5, 0xf3, 0x5a, 0x6d, 0xe4, 0x5b, 0x1c, + 0x0e, 0x21, 0xf9, 0x9c, 0xac, 0x18, 0xd8, 0xde, + 0x23, 0xeb, 0x9c, 0x01, 0x71, 0xf7, 0xd5, 0xa7, + 0x57, 0x7b, 0x32, 0xba, 0xc3, 0xc0, 0xdb, 0xbc, + 0x73, 0x8d, 0xd4, 0x2d, 0x6f, 0xf1, 0x9b, 0x4f, + 0x19, 0xa6, 0x9b, 0xc0, 0x08, 0x3c, 0xb4, 0xdf, + 0xb3, 0xe1, 0x79, 0x62, 0xdc, 0xd6, 0x66, 0xe4, + 0x5a, 0xe3, 0x5a, 0x38, 0xc5, 0x36, 0x97, 0x34, + 0x72, 0x6d, 0xe7, 0x56, 0x7c, 0x2d, 0xfe, 0x86, + 0xcd, 0x5c, 0xbb, 0x4e, 0xda, 0x58, 0x8e, 0x10, + 0xd3, 0xd5, 0xce, 0x5a, 0x2a, 0xea, 0x0d, 0xfc, + 0x4b, 0x5b, 0xec, 0xd3, 0x39, 0x15, 0xed, 0xa5, + 0xc6, 0x96, 0xc9, 0x9a, 0xb2, 0x56, 0x91, 0x17, + 0x17, 0x77, 0x93, 0x6f, 0x32, 0xf6, 0xbb, 0xbd, + 0xd3, 0xde, 0xce, 0xae, 0xcd, 0xb5, 0x95, 0xab, + 0xae, 0xf2, 0x6e, 0x1c, 0x46, 0x59, 0x2a, 0xd6, + 0xf0, 0x38, 0xee, 0x6e, 0xfd, 0xc8, 0x27, 0x46, + 0xe5, 0x61, 0xc2, 0x6a, 0x1b, 0xdd, 0x2b, 0x2c, + 0xc5, 0xd6, 0xb2, 0x3d, 0xcd, 0xb6, 0x97, 0xe4, + 0x95, 0xb9, 0x7e, 0x56, 0xcc, 0x66, 0x1b, 0xa7, + 0xf5, 0x33, 0x07, 0x5f, 0x0b, 0xc4, 0x96, 0x17, + 0xbb, 0xb8, 0x87, 0xec, 0xed, 0xe4, 0x5a, 0x6c, + 0xe5, 0xa6, 0x23, 0x51, 0x60, 0x9b, 0xaa, 0x31, + 0x4e, 0x6d, 0x9d, 0xf5, 0xb1, 0xeb, 0x25, 0x6d, + 0x69, 0x57, 0x03, 0x5e, 0x15, 0x5b, 0xd5, 0x7a, + 0xce, 0x0d, 0x43, 0x63, 0x64, 0xde, 0xa0, 0xc7, + 0x7d, 0x6e, 0xd1, 0xd6, 0x4f, 0xbb, 0x6f, 0x2d, + 0x10, 0x59, 0xf5, 0x86, 0x69, 0xba, 0x6b, 0x5a, + 0xda, 0xe5, 0x2d, 0x88, 0x92, 0x29, 0xa1, 0xe1, + 0xb8, 0x63, 0x4d, 0x4b, 0x80, 0x23, 0x7a, 0xe7, + 0xfa, 0x93, 0x29, 0x6b, 0x96, 0xcc, 0x4f, 0x90, + 0xb6, 0x83, 0xc9, 0xe3, 0x98, 0xd7, 0x82, 0xbb, + 0x49, 0x3b, 0xca, 0xc1, 0x9e, 0xea, 0xe6, 0xe9, + 0xfd, 0x65, 0xc4, 0x8e, 0x95, 0xc0, 0x50, 0x17, + 0x1a, 0xd0, 0x73, 0x2f, 0x24, 0x04, 0x08, 0x9d, + 0xde, 0x5e, 0x64, 0x0a, 0x25, 0x11, 0x10, 0x11, + 0x39, 0x29, 0xc9, 0xce, 0x88, 0x14, 0x44, 0x4f, + 0x85, 0x01, 0x28, 0x88, 0x82, 0x0a, 0xb3, 0xe3, + 0x88, 0x16, 0x10, 0xf7, 0xbf, 0xcd, 0x56, 0x4e, + 0xe5, 0x66, 0xc7, 0xff, 0x00, 0xd1, 0x86, 0xbf, + 0x27, 0xfc, 0xd6, 0xb1, 0x4c, 0x99, 0x15, 0x0a, + 0x09, 0x0a, 0x2a, 0xa0, 0x95, 0xa6, 0x13, 0x55, + 0x04, 0x85, 0x15, 0xda, 0xa0, 0x94, 0x50, 0x95, + 0x15, 0x03, 0xdc, 0x50, 0x4a, 0x20, 0x12, 0xa2, + 0xa1, 0x41, 0x3c, 0xea, 0x2a, 0x82, 0x49, 0xe4, + 0xe5, 0x5f, 0x35, 0x4a, 0xa8, 0x2a, 0x28, 0x5d, + 0xb5, 0x45, 0x42, 0x82, 0x50, 0xee, 0x41, 0x35, + 0x0a, 0x09, 0x0b, 0xe4, 0x9a, 0xa5, 0x54, 0x54, + 0x14, 0xaa, 0x82, 0x4a, 0x8a, 0x94, 0x12, 0x4a, + 0xf9, 0x27, 0x95, 0x09, 0x5f, 0x35, 0x50, 0x09, + 0x75, 0x5a, 0xe6, 0x12, 0xd9, 0x1a, 0x6a, 0xc7, + 0x0d, 0xe0, 0x8d, 0xcb, 0xae, 0x7b, 0x3f, 0xd5, + 0xcd, 0xcd, 0x58, 0xf9, 0x1d, 0xdb, 0xc0, 0xc8, + 0xdb, 0x0a, 0x3d, 0xa7, 0xf6, 0x9b, 0xc8, 0xe0, + 0xb9, 0x11, 0x34, 0x5e, 0xf8, 0xfc, 0x8d, 0xd6, + 0x2e, 0xfe, 0x2c, 0x8d, 0x9b, 0xb8, 0x67, 0x80, + 0xee, 0xdc, 0x0b, 0x79, 0x41, 0x41, 0xfa, 0x15, + 0x4a, 0xd5, 0x69, 0xdc, 0xed, 0xa6, 0x77, 0x1b, + 0x15, 0xed, 0xb1, 0xf8, 0xc0, 0x09, 0x1a, 0x76, + 0x10, 0xfe, 0x50, 0xb6, 0xaa, 0x28, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0xa7, + 0x9b, 0xfc, 0xd3, 0x63, 0xdf, 0x8f, 0xf7, 0x95, + 0xad, 0x55, 0x33, 0x7f, 0x9a, 0x6c, 0x7b, 0xf1, + 0xfe, 0xf2, 0xb5, 0xa0, 0x94, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x55, 0x3d, 0x57, 0xf7, + 0xd6, 0x3f, 0xbc, 0x3f, 0xb8, 0x15, 0xb1, 0x54, + 0xf5, 0x5f, 0xdf, 0x58, 0xfe, 0xf3, 0x7f, 0xb8, + 0x10, 0x5a, 0xd4, 0xa8, 0xe5, 0x52, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x21, + 0x28, 0x54, 0xa2, 0x02, 0x22, 0x20, 0x85, 0x57, + 0xc5, 0xbc, 0xc7, 0x2e, 0x5d, 0xe3, 0x7b, 0x4b, + 0x8a, 0xb4, 0x2a, 0xd6, 0x1e, 0x21, 0x2d, 0xce, + 0x56, 0x3f, 0x96, 0xe2, 0x3a, 0x50, 0x69, 0xf1, + 0x98, 0x01, 0x96, 0xc3, 0x4f, 0x2b, 0x4f, 0xfc, + 0x97, 0xca, 0x48, 0x71, 0xee, 0x2c, 0x26, 0x68, + 0xdc, 0xc3, 0x9d, 0xc2, 0x40, 0x14, 0xe5, 0x56, + 0x0d, 0x1b, 0x37, 0x53, 0x2d, 0xde, 0x36, 0x4f, + 0x16, 0x48, 0x9f, 0xc4, 0xd0, 0x77, 0xd0, 0xab, + 0x49, 0x15, 0x5c, 0x75, 0x34, 0x30, 0xce, 0x7c, + 0xd3, 0x76, 0xf7, 0x7a, 0x5f, 0xdc, 0xfd, 0x47, + 0xa7, 0xd3, 0x9d, 0x2c, 0x2a, 0x71, 0xbf, 0x34, + 0x46, 0x51, 0x7b, 0x5c, 0xab, 0x29, 0x85, 0xbd, + 0xc5, 0x3c, 0x36, 0xe1, 0xb5, 0x6b, 0xb7, 0x3c, + 0x6e, 0x56, 0x2d, 0x09, 0x3b, 0x85, 0xbd, 0xd4, + 0x47, 0xe2, 0xb4, 0x12, 0x16, 0xd3, 0x59, 0xb2, + 0x2f, 0x43, 0xbd, 0xd2, 0x52, 0xad, 0xf8, 0xa4, + 0xf3, 0xac, 0x1d, 0x0d, 0x6a, 0xe6, 0x58, 0xcd, + 0x3b, 0xc1, 0x1d, 0x76, 0xc0, 0x14, 0xd2, 0xd2, + 0xf2, 0x67, 0x94, 0x63, 0xfa, 0x66, 0x21, 0xbf, + 0x5d, 0xeb, 0x3f, 0xec, 0xfa, 0x7d, 0x0c, 0xb3, + 0x88, 0x8d, 0x4c, 0x72, 0xcb, 0x19, 0x9e, 0x6f, + 0x3d, 0x21, 0x2c, 0x43, 0x27, 0x7a, 0xe9, 0x0f, + 0xf1, 0x24, 0x76, 0xc2, 0x77, 0xef, 0x57, 0x07, + 0x3d, 0xac, 0x05, 0xce, 0x21, 0xad, 0x1b, 0xc9, + 0x2b, 0x9b, 0x03, 0x25, 0x9e, 0x52, 0x78, 0x49, + 0x2c, 0x78, 0x7f, 0x13, 0x4e, 0xee, 0x55, 0xb0, + 0xb8, 0xca, 0x5f, 0x5c, 0x46, 0x22, 0x95, 0xfe, + 0x28, 0xd9, 0xb3, 0x95, 0x63, 0x3f, 0x55, 0xf6, + 0xf2, 0xcb, 0x1c, 0xa3, 0x6f, 0x07, 0xc6, 0xcf, + 0xd4, 0x4e, 0x19, 0x65, 0x8c, 0xc7, 0xb1, 0x67, + 0x93, 0x3f, 0x8f, 0x13, 0x75, 0x1c, 0x55, 0x0e, + 0xf1, 0x4b, 0xb9, 0x36, 0xf7, 0x56, 0x93, 0x4f, + 0x96, 0x41, 0xa8, 0x2f, 0xad, 0xe3, 0x20, 0xc0, + 0xf1, 0xc6, 0x07, 0x7d, 0x6a, 0x1d, 0xc2, 0xd6, + 0x92, 0x76, 0x00, 0x2b, 0x55, 0xb2, 0xd1, 0x90, + 0xbd, 0xf3, 0x5c, 0xe4, 0x1d, 0xb5, 0xb4, 0x21, + 0xa4, 0xf7, 0x15, 0xf4, 0xda, 0xd9, 0xea, 0x4e, + 0x5e, 0x6c, 0x6a, 0xa3, 0x62, 0x7a, 0x7d, 0x6c, + 0xb5, 0x27, 0x2b, 0x8a, 0xad, 0xcf, 0x3c, 0xc3, + 0x2e, 0x34, 0xf6, 0x41, 0xd9, 0x0b, 0x39, 0x1b, + 0xd5, 0xcd, 0xb5, 0xd1, 0x13, 0xfe, 0x49, 0x87, + 0x65, 0xce, 0xa0, 0xc8, 0x33, 0x23, 0x78, 0xf0, + 0x63, 0x83, 0x6b, 0x22, 0xaf, 0x2f, 0x79, 0x45, + 0x95, 0xb0, 0xcc, 0x5f, 0x5e, 0xe4, 0x2f, 0x2a, + 0xf8, 0x2d, 0x49, 0x0d, 0x8f, 0x9e, 0x8b, 0x5d, + 0x63, 0x35, 0xd5, 0x9e, 0x46, 0x2b, 0xf8, 0xd8, + 0xe8, 0x6d, 0x26, 0x93, 0x85, 0xac, 0x3b, 0x01, + 0x15, 0x5e, 0x97, 0xa5, 0x97, 0xae, 0x7e, 0xf0, + 0x8b, 0xb8, 0xd1, 0x45, 0x5b, 0x56, 0x5d, 0x72, + 0x6b, 0x7d, 0x0b, 0xb9, 0x1c, 0xc0, 0x7d, 0xd2, + 0xab, 0x4a, 0x48, 0xf8, 0xb8, 0xbd, 0x9a, 0xc6, + 0x17, 0xdd, 0x40, 0x78, 0x65, 0x8d, 0xa4, 0xb4, + 0xf3, 0x2a, 0xd6, 0x37, 0x13, 0x9c, 0xd5, 0x99, + 0x3a, 0xb7, 0x8a, 0x57, 0xc8, 0xef, 0x1e, 0x67, + 0x7c, 0x50, 0x3b, 0xe5, 0x5b, 0x6d, 0xb1, 0xec, + 0xc9, 0xdc, 0xc7, 0x60, 0xf2, 0x43, 0x26, 0x34, + 0x79, 0x1b, 0xe8, 0xba, 0x7e, 0x1f, 0x0b, 0x61, + 0x87, 0xb5, 0x65, 0xb5, 0x9c, 0x41, 0x81, 0xa3, + 0x6b, 0x80, 0xda, 0x7b, 0xaa, 0x8a, 0x2c, 0x5e, + 0xc6, 0xb1, 0xfd, 0x53, 0x7a, 0xdb, 0x97, 0x75, + 0x94, 0xf1, 0xa8, 0x36, 0x55, 0x7d, 0x7e, 0x8d, + 0x62, 0xfc, 0xe5, 0xdd, 0x0b, 0xa3, 0xa2, 0x0e, + 0x71, 0xfa, 0x35, 0x8b, 0xf3, 0x97, 0x74, 0x27, + 0xe8, 0xd6, 0x33, 0x92, 0xe5, 0xdd, 0x0b, 0xa3, + 0xa2, 0x0e, 0x37, 0xad, 0x3d, 0x9b, 0x3b, 0x0d, + 0x8c, 0x6d, 0xfd, 0x93, 0xcc, 0xec, 0x84, 0xd2, + 0x60, 0x46, 0xd0, 0xde, 0x75, 0x40, 0x06, 0xbe, + 0x15, 0xfa, 0x72, 0xf6, 0xd2, 0x1b, 0xdb, 0x49, + 0x6d, 0x26, 0x1c, 0x51, 0xcc, 0xd2, 0xc7, 0x03, + 0xcc, 0x57, 0xe7, 0x6d, 0x4b, 0x87, 0x97, 0x0d, + 0x99, 0xb8, 0xb1, 0x91, 0xbc, 0x2d, 0x6b, 0x89, + 0x8f, 0xba, 0xd3, 0xb9, 0x06, 0xb1, 0x3f, 0xc5, + 0x51, 0x10, 0x6d, 0x74, 0xa5, 0xc7, 0x93, 0xea, + 0x4c, 0x74, 0xc7, 0x60, 0x13, 0x36, 0xab, 0xb0, + 0x4b, 0x0e, 0xa0, 0x83, 0x56, 0x39, 0xf0, 0x06, + 0xcb, 0x88, 0xb8, 0x8c, 0x3a, 0xe0, 0xcc, 0xea, + 0x31, 0xa0, 0x0e, 0x45, 0xc3, 0xad, 0x66, 0x74, + 0x17, 0x50, 0xcc, 0xdf, 0x8c, 0xc7, 0xb4, 0x8e, + 0x95, 0xd2, 0xfd, 0xa6, 0xe7, 0x6e, 0x99, 0x8d, + 0xc7, 0x41, 0x69, 0x76, 0x18, 0xd9, 0xa3, 0x06, + 0x68, 0x98, 0xef, 0x1b, 0x93, 0x7a, 0x0c, 0xad, + 0x43, 0xa3, 0xe0, 0x17, 0x5e, 0xb1, 0x69, 0x79, + 0x58, 0xe9, 0x6d, 0xdd, 0xc7, 0x34, 0x4c, 0x76, + 0xca, 0x8d, 0xfb, 0x96, 0x87, 0xda, 0x16, 0xa0, + 0xc1, 0x67, 0x6c, 0x2c, 0xa5, 0x8a, 0xa3, 0x2b, + 0x18, 0xa4, 0xb4, 0x1b, 0xb6, 0x6d, 0x0e, 0xf7, + 0x55, 0x3e, 0xdb, 0x31, 0x94, 0xb5, 0x82, 0x4b, + 0x78, 0x2e, 0x5e, 0xc8, 0xa6, 0xfe, 0x63, 0x6a, + 0x76, 0xac, 0x53, 0xb4, 0x92, 0x77, 0x9d, 0xe7, + 0x9d, 0x07, 0xd3, 0x66, 0x99, 0xb1, 0x98, 0x99, + 0x23, 0x9b, 0x11, 0xda, 0xe6, 0x07, 0x1e, 0x13, + 0xdf, 0x0b, 0xe3, 0xfc, 0x55, 0x11, 0x01, 0x11, + 0x10, 0x13, 0xfc, 0x55, 0x11, 0x01, 0x11, 0x10, + 0x3f, 0xc5, 0x11, 0x39, 0x6a, 0x88, 0x09, 0xfe, + 0x2a, 0x89, 0xc9, 0x44, 0x04, 0x44, 0x40, 0x21, + 0x59, 0x2c, 0x49, 0x16, 0x50, 0xfc, 0xdf, 0xf3, + 0x55, 0xb2, 0xac, 0x76, 0x47, 0xfe, 0x24, 0x3f, + 0x37, 0xfc, 0xd5, 0xc5, 0x32, 0x7b, 0xd5, 0x45, + 0x51, 0x41, 0x5b, 0x64, 0xaa, 0x82, 0x54, 0x57, + 0x6a, 0x12, 0x80, 0x4a, 0xf9, 0x25, 0x41, 0x25, + 0x09, 0x50, 0x09, 0x51, 0x54, 0x50, 0x51, 0x4a, + 0xa8, 0x25, 0x45, 0x50, 0x94, 0x05, 0x04, 0xa8, + 0xa9, 0x50, 0x4a, 0x8a, 0x9a, 0xa8, 0x25, 0x45, + 0x54, 0x12, 0x81, 0x54, 0x25, 0x45, 0x6a, 0xa1, + 0x40, 0x25, 0x42, 0x82, 0x50, 0x94, 0x05, 0x15, + 0x45, 0xf2, 0x4a, 0x0d, 0xee, 0x90, 0xd5, 0x12, + 0x69, 0xcc, 0x9b, 0x5e, 0xf7, 0x13, 0x8f, 0x9c, + 0x81, 0x72, 0xc1, 0xb7, 0x84, 0xfc, 0xa0, 0x17, + 0x6f, 0xb6, 0xb8, 0x86, 0xe6, 0x06, 0x5c, 0x40, + 0xe0, 0xf8, 0xa5, 0x68, 0x73, 0x1c, 0x37, 0x10, + 0x57, 0xe7, 0x22, 0x45, 0x36, 0x8d, 0x9c, 0xaa, + 0xf5, 0xec, 0xdb, 0x57, 0x8b, 0x19, 0x9b, 0x83, + 0xbe, 0x79, 0x30, 0x4a, 0x69, 0x6a, 0xf2, 0x7e, + 0x29, 0xf9, 0x2a, 0x4a, 0xc3, 0xac, 0x22, 0x85, + 0x28, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0xbe, 0x24, 0x91, 0x91, 0xb0, 0xbd, 0xee, + 0x0d, 0x68, 0xde, 0x4e, 0xe4, 0x1f, 0x6b, 0xca, + 0x6b, 0x88, 0x20, 0x6f, 0x14, 0xcf, 0x6c, 0x6d, + 0xe7, 0x71, 0xa2, 0xaf, 0x65, 0xb5, 0x8d, 0xbc, + 0x04, 0xc1, 0x60, 0x3c, 0xa2, 0x73, 0xb0, 0x16, + 0xed, 0x00, 0xad, 0x2b, 0x6c, 0xb2, 0xf9, 0x69, + 0x04, 0xd9, 0x09, 0x1c, 0xc8, 0xb7, 0x88, 0xc6, + 0xc4, 0x17, 0x3f, 0x4c, 0xe2, 0xfc, 0xe6, 0x3f, + 0xfc, 0x82, 0x7a, 0x67, 0x17, 0xe7, 0x31, 0xff, + 0x00, 0xe4, 0x15, 0x63, 0xd5, 0xeb, 0x0a, 0x6f, + 0x77, 0x73, 0x6a, 0x7a, 0xbd, 0x61, 0xce, 0xee, + 0x94, 0x16, 0x7f, 0x4c, 0xe2, 0xfc, 0xe6, 0x3f, + 0xfc, 0x82, 0x7a, 0x67, 0x17, 0xe7, 0x31, 0xff, + 0x00, 0xe4, 0x15, 0x63, 0xd5, 0xdb, 0x0e, 0x77, + 0x74, 0xac, 0x6b, 0xbc, 0x76, 0x1a, 0xcd, 0xa4, + 0xcd, 0x21, 0xa8, 0xfd, 0x9a, 0xa0, 0xb8, 0x7a, + 0x63, 0x19, 0xe7, 0x31, 0xff, 0x00, 0xe4, 0x17, + 0xa4, 0x39, 0x1b, 0x29, 0xdf, 0xd5, 0xc3, 0x33, + 0x1e, 0xff, 0x00, 0x92, 0x0e, 0xd5, 0xcb, 0xe7, + 0x6b, 0x6e, 0xa5, 0xa5, 0x9b, 0x5c, 0xd6, 0x0f, + 0xda, 0x35, 0x5b, 0x4d, 0x27, 0x03, 0xa0, 0xd4, + 0x11, 0xc6, 0xe7, 0x17, 0x10, 0xc2, 0x4f, 0xbc, + 0x83, 0xa2, 0xa2, 0x80, 0xa5, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x05, 0x4f, + 0x37, 0xf9, 0xa6, 0xc3, 0xbf, 0x1f, 0xef, 0x2b, + 0x58, 0xe5, 0x55, 0x4c, 0xdf, 0xe6, 0x9b, 0x1e, + 0xfc, 0x7f, 0xbc, 0xad, 0x68, 0x25, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x15, 0x4b, 0x55, + 0xfd, 0xf7, 0x8e, 0xef, 0x37, 0xfb, 0x81, 0x5b, + 0x55, 0x4b, 0x55, 0xfd, 0xf7, 0x8e, 0xef, 0x37, + 0xfb, 0x81, 0x05, 0xb3, 0x95, 0x4a, 0x8e, 0x55, + 0x28, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0x15, + 0x73, 0x00, 0x7f, 0xfb, 0x0c, 0x95, 0x3b, 0x42, + 0xac, 0x6a, 0xb9, 0x81, 0xfb, 0xc3, 0x25, 0xfd, + 0x43, 0xf0, 0xa0, 0xf3, 0xce, 0x62, 0x2e, 0x7a, + 0xf1, 0x93, 0xc6, 0x1e, 0x0b, 0x96, 0x7c, 0x70, + 0x3f, 0x69, 0x63, 0x43, 0xac, 0x72, 0x30, 0x30, + 0xc5, 0x79, 0x66, 0xe7, 0x4a, 0x36, 0x54, 0x02, + 0xb7, 0x59, 0x3c, 0xc5, 0xb6, 0x2a, 0x26, 0xc9, + 0x31, 0xab, 0x9f, 0xf1, 0x59, 0xca, 0x56, 0x8d, + 0xd9, 0x9c, 0xc5, 0xd9, 0xeb, 0x6d, 0xf1, 0xe0, + 0xc6, 0x37, 0x12, 0x36, 0xd1, 0x07, 0x8c, 0x8d, + 0xcc, 0x6a, 0x6b, 0x88, 0xdb, 0x70, 0xce, 0xa2, + 0xc9, 0x86, 0xa4, 0x1e, 0x55, 0x6a, 0xb7, 0xb7, + 0x65, 0xac, 0x2d, 0x82, 0x21, 0x46, 0x30, 0x52, + 0x8b, 0x4b, 0x61, 0xaa, 0xa3, 0x33, 0x0b, 0x4b, + 0xd8, 0x4d, 0xac, 0xae, 0x21, 0xad, 0xa8, 0xa0, + 0x5b, 0xfa, 0x8a, 0x0e, 0x6e, 0x44, 0x2e, 0x7d, + 0xcd, 0x0e, 0xa3, 0xd3, 0xde, 0x5c, 0x05, 0xe5, + 0xaf, 0x8b, 0x72, 0xcd, 0xe3, 0x9d, 0x55, 0xdd, + 0x26, 0x42, 0xdc, 0x98, 0xee, 0x20, 0x77, 0x18, + 0xe5, 0x00, 0xed, 0x57, 0xcc, 0x8e, 0x4a, 0xdb, + 0x19, 0x07, 0x5d, 0x70, 0xea, 0x57, 0x73, 0x79, + 0x4a, 0xd0, 0x3f, 0x3b, 0x93, 0xbe, 0x77, 0x1d, + 0xa5, 0x80, 0x74, 0x5c, 0x8e, 0x70, 0xdf, 0xef, + 0x2c, 0x6a, 0x69, 0x61, 0xa9, 0x15, 0x9c, 0x5b, + 0x19, 0xe9, 0xe1, 0x9c, 0x56, 0x50, 0xd4, 0x59, + 0xe3, 0x32, 0x59, 0x69, 0x5b, 0x1f, 0x01, 0x86, + 0x0a, 0xf8, 0xce, 0x3c, 0xca, 0xf3, 0x63, 0x63, + 0x05, 0x8d, 0xa3, 0x6d, 0x61, 0x14, 0x68, 0x14, + 0x77, 0x74, 0x90, 0xb4, 0xb6, 0x5a, 0xa3, 0xaa, + 0x95, 0xb6, 0xd9, 0x18, 0x3c, 0x95, 0xc4, 0xd0, + 0x3a, 0x94, 0x0a, 0xc0, 0x0b, 0x48, 0x0e, 0x69, + 0xa8, 0x75, 0x0b, 0x4f, 0x3a, 0xd6, 0x18, 0x63, + 0x86, 0x3e, 0x5c, 0x62, 0x97, 0x1c, 0x31, 0xc6, + 0x2b, 0x18, 0xa5, 0x48, 0xcd, 0x77, 0xa7, 0x32, + 0x33, 0x38, 0xc4, 0x66, 0xb1, 0xb9, 0x25, 0xc4, + 0x0d, 0xbb, 0xd4, 0x32, 0x4b, 0x9d, 0x45, 0x92, + 0x80, 0xb2, 0x0e, 0xa2, 0xc6, 0xd8, 0xf1, 0x01, + 0x4a, 0x54, 0xad, 0xce, 0x5f, 0x3d, 0x8e, 0xb3, + 0x78, 0xb6, 0x99, 0x82, 0x79, 0x4f, 0xec, 0x52, + 0xa9, 0x88, 0xce, 0xe3, 0xef, 0x5f, 0xe4, 0xf0, + 0xb0, 0x5b, 0xca, 0x37, 0x30, 0x8a, 0x12, 0xab, + 0x4a, 0xfe, 0xb9, 0x03, 0xcb, 0xe1, 0x03, 0x70, + 0x6d, 0x02, 0xad, 0xab, 0x2e, 0xb9, 0xd9, 0x7f, + 0x17, 0xcd, 0x55, 0xa5, 0x24, 0x67, 0x61, 0x24, + 0x8e, 0x2c, 0xad, 0xbc, 0x92, 0x9e, 0x16, 0x31, + 0xd5, 0x73, 0xb7, 0x6c, 0x5f, 0x7a, 0xdb, 0xda, + 0x81, 0x8d, 0xee, 0xc7, 0xe1, 0x1d, 0xb5, 0xa6, + 0x8f, 0x9c, 0x7f, 0x92, 0xd2, 0xe4, 0xdc, 0xf1, + 0x61, 0x37, 0x05, 0x78, 0x88, 0xa0, 0xa6, 0xfd, + 0xa9, 0xa2, 0xfd, 0x9b, 0xde, 0xe5, 0x65, 0x8e, + 0xfb, 0x24, 0xd3, 0x15, 0x99, 0xf1, 0x9a, 0xd3, + 0xf1, 0x9c, 0xa8, 0xd2, 0xfa, 0xeb, 0xaa, 0x29, + 0xb2, 0x77, 0xd1, 0x4f, 0xae, 0xba, 0xa3, 0xb7, + 0x93, 0xdf, 0x5d, 0xbe, 0x3d, 0x29, 0x81, 0x8d, + 0x8d, 0x60, 0xb3, 0x65, 0x18, 0x28, 0x2a, 0x2b, + 0xb9, 0x7d, 0x7a, 0xaf, 0x82, 0xf3, 0x38, 0xfa, + 0x02, 0x0e, 0x1d, 0xeb, 0xb6, 0xa8, 0xed, 0xe4, + 0xf7, 0xd0, 0xeb, 0x6d, 0x51, 0xdb, 0xc9, 0xef, + 0xae, 0xe3, 0xea, 0xbe, 0x0b, 0xcc, 0xe3, 0xe8, + 0x09, 0xea, 0xbe, 0x0b, 0xcc, 0xe3, 0xe8, 0x08, + 0x38, 0x77, 0xae, 0xba, 0xa3, 0xb7, 0x93, 0xdf, + 0x5a, 0xfc, 0x86, 0x4a, 0xff, 0x00, 0x2a, 0x4c, + 0xb7, 0xb5, 0x7c, 0xb1, 0x8a, 0x89, 0x0e, 0xfa, + 0x73, 0x2f, 0xd0, 0x3e, 0xac, 0x60, 0xbc, 0xce, + 0x3e, 0x80, 0xbe, 0x65, 0xd2, 0x98, 0x19, 0x23, + 0x74, 0x66, 0xd1, 0x80, 0x3c, 0x50, 0x90, 0x02, + 0x0f, 0xce, 0x20, 0xa9, 0xff, 0x00, 0x14, 0x5b, + 0xad, 0x5f, 0xa7, 0xe4, 0xc0, 0x66, 0x65, 0xb4, + 0x22, 0x90, 0xb8, 0x97, 0x42, 0x4f, 0x28, 0x2b, + 0x4a, 0x80, 0x06, 0xd5, 0xf7, 0x24, 0xd3, 0x4c, + 0xee, 0x29, 0x9e, 0x64, 0x20, 0x50, 0x71, 0x12, + 0x68, 0x3d, 0xd5, 0xf0, 0x88, 0x1f, 0xe2, 0xa8, + 0x51, 0x0e, 0xd4, 0x10, 0xa5, 0x11, 0x01, 0x41, + 0x52, 0x94, 0x41, 0x01, 0x49, 0x4a, 0x22, 0x08, + 0xa2, 0x94, 0x44, 0x0f, 0x87, 0x9d, 0x13, 0xb9, + 0xc8, 0x88, 0x22, 0x8a, 0x42, 0x22, 0x05, 0x14, + 0x05, 0x29, 0x44, 0x03, 0xb9, 0x58, 0xac, 0xff, + 0x00, 0xea, 0x43, 0xde, 0xff, 0x00, 0x35, 0x5d, + 0x3b, 0x95, 0x82, 0xd3, 0x65, 0xac, 0x43, 0xb8, + 0xb5, 0x8a, 0x4b, 0xda, 0xbb, 0xd4, 0x72, 0x25, + 0x54, 0x12, 0xab, 0x25, 0x54, 0x12, 0x95, 0x50, + 0x4a, 0x28, 0x54, 0x55, 0x2a, 0xa0, 0x94, 0x05, + 0x05, 0x45, 0x54, 0x12, 0xa2, 0x95, 0x42, 0x8b, + 0xe4, 0x94, 0x12, 0xa0, 0x95, 0x15, 0x51, 0x55, + 0x04, 0xd4, 0x2f, 0x94, 0xaa, 0x82, 0x50, 0x2a, + 0xa0, 0xa2, 0xf9, 0x25, 0x04, 0xa8, 0x25, 0x45, + 0x54, 0x12, 0x80, 0x4a, 0x72, 0x28, 0xde, 0x68, + 0x01, 0x27, 0x90, 0x0e, 0x75, 0xb0, 0x76, 0x9d, + 0xce, 0x36, 0xc0, 0xe4, 0x1f, 0x67, 0x23, 0x6d, + 0xda, 0x76, 0x92, 0xdd, 0xa0, 0x7c, 0xaa, 0x73, + 0x20, 0xd7, 0x14, 0x04, 0xb5, 0xc1, 0xcd, 0x3c, + 0x2f, 0x69, 0x05, 0xae, 0x1c, 0x84, 0x6d, 0x0b, + 0xe6, 0xb5, 0x15, 0x50, 0x4a, 0x0e, 0xc5, 0xec, + 0xf3, 0x59, 0x7a, 0x66, 0xd7, 0xc8, 0x2f, 0xdf, + 0xff, 0x00, 0xd8, 0xdb, 0xec, 0x2e, 0x3f, 0xb6, + 0xde, 0x42, 0x15, 0xd5, 0x7e, 0x6d, 0xb2, 0xc8, + 0x5d, 0x63, 0xaf, 0x22, 0xbe, 0xb4, 0x79, 0x64, + 0xd0, 0xbb, 0x89, 0xb4, 0xe5, 0xe7, 0x07, 0xbe, + 0xbb, 0xbe, 0x94, 0xd4, 0xb6, 0xba, 0x8b, 0x17, + 0x1d, 0xdc, 0x44, 0x09, 0x80, 0xe1, 0x9e, 0x2f, + 0xda, 0x6b, 0x87, 0xf9, 0x28, 0xad, 0xda, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0xd1, 0x6a, 0x0d, + 0x4d, 0x0e, 0x21, 0xc2, 0x1e, 0x02, 0xf9, 0x9c, + 0x2a, 0xd0, 0x15, 0x32, 0xeb, 0x50, 0x5f, 0x64, + 0xe6, 0xa5, 0xdc, 0x8e, 0x8a, 0x0f, 0x92, 0xda, + 0x8d, 0x8a, 0xc1, 0x9c, 0x82, 0x29, 0xb5, 0x65, + 0xab, 0x25, 0x1c, 0x4c, 0x2c, 0xda, 0x14, 0xcf, + 0x91, 0xd2, 0x10, 0xba, 0x51, 0x23, 0x47, 0xf0, + 0x89, 0x0f, 0xd9, 0xba, 0x8a, 0xc0, 0xd4, 0xd9, + 0xe4, 0x70, 0x76, 0x7b, 0x63, 0x88, 0xb9, 0xe7, + 0x7b, 0x9d, 0xb5, 0x66, 0x7a, 0xd1, 0x63, 0xf2, + 0x4a, 0xf7, 0xb6, 0xcb, 0x68, 0xeb, 0xb8, 0xba, + 0xe8, 0x5a, 0x0b, 0x09, 0x2d, 0x06, 0x9c, 0xa2, + 0x8b, 0xca, 0xeb, 0x3d, 0xa2, 0x2d, 0x1c, 0xc6, + 0x4e, 0x03, 0x5d, 0x20, 0xab, 0x76, 0x0d, 0xc8, + 0x3e, 0x7d, 0x68, 0xb0, 0xf9, 0x25, 0x3d, 0x68, + 0xb1, 0xf9, 0x25, 0x64, 0xc7, 0x91, 0xd2, 0x12, + 0x46, 0x24, 0x63, 0x41, 0x69, 0xdc, 0x68, 0xbd, + 0x69, 0xa7, 0x6f, 0x20, 0xb9, 0x65, 0xa4, 0x60, + 0xcb, 0x14, 0x7c, 0x67, 0x66, 0xea, 0x8d, 0x88, + 0x34, 0x97, 0x7a, 0x86, 0xee, 0xe5, 0xe6, 0x3b, + 0x16, 0x51, 0x9c, 0xe5, 0x63, 0x36, 0xc5, 0xd2, + 0xbb, 0xac, 0xbb, 0x71, 0x7b, 0xce, 0xda, 0x57, + 0x60, 0x5f, 0x58, 0xe0, 0x05, 0xbe, 0xc1, 0xca, + 0x76, 0xac, 0x94, 0x06, 0x31, 0x8c, 0x1c, 0x2c, + 0x00, 0x05, 0xeb, 0xa7, 0x7f, 0x33, 0xb7, 0xe6, + 0x1f, 0xf2, 0x5e, 0x4b, 0xd7, 0x4e, 0xfe, 0x67, + 0x6f, 0xcc, 0x3f, 0xe4, 0x82, 0xfc, 0x14, 0xa8, + 0x45, 0x04, 0xa2, 0x84, 0x41, 0x28, 0xa1, 0x10, + 0x4a, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x0a, 0x9e, 0x6f, 0xf3, + 0x4d, 0x8f, 0x7e, 0x3f, 0xde, 0x56, 0xb1, 0xca, + 0xaa, 0x99, 0xbf, 0xcd, 0x36, 0x1d, 0xf8, 0xff, + 0x00, 0x79, 0x5a, 0xc7, 0x2a, 0x09, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0x52, 0xd5, + 0x7f, 0x7d, 0xe3, 0xbb, 0xcd, 0xfe, 0xe0, 0x56, + 0xd5, 0x52, 0xd5, 0x7f, 0x7d, 0xe3, 0xbb, 0xcd, + 0xfe, 0xe0, 0x41, 0x6c, 0xe5, 0x52, 0xa3, 0x95, + 0x4a, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x85, + 0x5c, 0xc1, 0x38, 0x36, 0xfb, 0x26, 0xe7, 0x6e, + 0x0f, 0x24, 0xfb, 0x8a, 0xc6, 0xaa, 0xd8, 0xea, + 0xf1, 0xe6, 0x29, 0xbe, 0xae, 0xa2, 0x0d, 0x3d, + 0xcd, 0xa5, 0xe6, 0xa0, 0xba, 0xbb, 0xbd, 0x88, + 0xd5, 0xb6, 0x86, 0x91, 0x33, 0x90, 0xd1, 0x59, + 0x34, 0xd6, 0x6e, 0x2b, 0xfb, 0x7f, 0x26, 0x95, + 0xa2, 0x1b, 0xa8, 0x7c, 0x47, 0x47, 0xba, 0xb4, + 0xd9, 0x55, 0xe1, 0xa1, 0xc3, 0x3d, 0x18, 0xfa, + 0x7c, 0x6e, 0xb0, 0xf1, 0x15, 0x9e, 0x70, 0x16, + 0xed, 0xcb, 0x33, 0x27, 0x11, 0xea, 0xdc, 0x05, + 0x1c, 0xc1, 0xb8, 0xa0, 0xf8, 0xd4, 0x58, 0x4b, + 0x7b, 0xfb, 0x27, 0xbd, 0xad, 0x0d, 0xb8, 0x88, + 0x17, 0x46, 0xf0, 0x28, 0x6a, 0x16, 0x3e, 0x97, + 0xbf, 0x75, 0xee, 0x38, 0xb6, 0x63, 0xfc, 0x5b, + 0x63, 0xc0, 0xef, 0x73, 0x62, 0xdf, 0xba, 0x9c, + 0x26, 0xbb, 0xa9, 0xb5, 0x54, 0xb4, 0xb9, 0x3e, + 0x5d, 0x94, 0xe0, 0xfe, 0x5f, 0x13, 0xa8, 0x10, + 0x78, 0xc3, 0x6e, 0xed, 0x45, 0xa8, 0x24, 0x74, + 0xdb, 0x6c, 0xec, 0xcd, 0x38, 0x79, 0x09, 0x57, + 0x18, 0xa1, 0x8a, 0x28, 0xc4, 0x71, 0xb4, 0x35, + 0xad, 0x14, 0x00, 0x05, 0x5c, 0xd1, 0x61, 0xa2, + 0x3b, 0xc3, 0xfb, 0x66, 0x63, 0x55, 0xbd, 0xbc, + 0xc8, 0xda, 0xd9, 0x96, 0x0b, 0x89, 0x03, 0x3a, + 0xc3, 0x46, 0xf3, 0x92, 0x83, 0x17, 0x39, 0x86, + 0xb6, 0xca, 0x5a, 0x3e, 0x37, 0x34, 0x09, 0x40, + 0xab, 0x1e, 0x06, 0xd0, 0x56, 0xab, 0x4a, 0x5f, + 0xcc, 0xfb, 0x69, 0xec, 0xee, 0x0d, 0x66, 0xb5, + 0xa8, 0x15, 0xee, 0x2b, 0x38, 0x20, 0xb6, 0xbc, + 0x85, 0x54, 0xf1, 0x00, 0x7a, 0xd7, 0x7d, 0xc1, + 0xb1, 0x94, 0xf1, 0x80, 0x41, 0xa7, 0xb7, 0xc7, + 0x5d, 0x64, 0xae, 0xae, 0x2f, 0xe1, 0xa4, 0x97, + 0x36, 0xf3, 0x7f, 0x2c, 0xf3, 0x2d, 0x96, 0xa3, + 0xb7, 0x8e, 0xce, 0xf7, 0x1f, 0x7d, 0x0b, 0x44, + 0x57, 0x2f, 0x73, 0x44, 0x8c, 0x6f, 0xbe, 0xbe, + 0xb2, 0x18, 0xcc, 0x9e, 0x33, 0x22, 0xfc, 0x86, + 0x27, 0xc6, 0x64, 0xbb, 0x64, 0x8d, 0x31, 0xd8, + 0xcc, 0xa6, 0x4b, 0x22, 0xcc, 0x86, 0x5b, 0xc5, + 0x64, 0x5b, 0x59, 0x1a, 0x0c, 0x1d, 0x71, 0xb6, + 0xfa, 0x03, 0xce, 0xc0, 0x7d, 0xe5, 0x5b, 0x56, + 0x4d, 0x73, 0xff, 0x00, 0x7e, 0x2e, 0x60, 0xc0, + 0x02, 0xad, 0xa9, 0x23, 0x37, 0x0d, 0x0c, 0x73, + 0xe5, 0x6d, 0xe2, 0x94, 0x07, 0x30, 0xbb, 0x68, + 0x3b, 0x97, 0x54, 0x63, 0x18, 0xc6, 0x86, 0x30, + 0x06, 0xb4, 0x0a, 0x00, 0x36, 0x05, 0xcb, 0xb4, + 0xff, 0x00, 0xdf, 0x36, 0xdf, 0x39, 0x75, 0x31, + 0xc8, 0xa8, 0x94, 0x44, 0x40, 0x44, 0x44, 0x05, + 0x0a, 0x51, 0x05, 0x1b, 0xda, 0x96, 0x9a, 0x39, + 0x4c, 0x47, 0x96, 0xdb, 0xb3, 0x8a, 0xe6, 0xd3, + 0xc6, 0x34, 0xde, 0x59, 0xca, 0x17, 0x14, 0x15, + 0xa6, 0xdd, 0xeb, 0xf5, 0x0c, 0xb1, 0xb2, 0x58, + 0xdd, 0x1b, 0xc5, 0x5a, 0xf0, 0x5a, 0xe1, 0xdc, + 0x3b, 0x17, 0xe7, 0xbd, 0x67, 0x80, 0x97, 0x07, + 0x9d, 0x9e, 0xdf, 0x87, 0x86, 0xda, 0x47, 0x71, + 0xdb, 0x9e, 0x4e, 0x03, 0xb9, 0x06, 0x89, 0x12, + 0xa8, 0x81, 0xdd, 0xe4, 0x44, 0xf8, 0x51, 0x01, + 0x3b, 0x9c, 0xa8, 0x9f, 0x02, 0x02, 0x27, 0x7d, + 0x10, 0x13, 0xe1, 0x44, 0xf8, 0x10, 0x11, 0x11, + 0x03, 0xbb, 0xc8, 0x89, 0xf0, 0xa2, 0x02, 0x7c, + 0x28, 0x9f, 0x02, 0x02, 0x22, 0x20, 0x15, 0x60, + 0xb5, 0x23, 0xc9, 0x62, 0xef, 0x2a, 0xf9, 0x5b, + 0xeb, 0x63, 0xff, 0x00, 0x1a, 0x21, 0xfe, 0xdf, + 0xf3, 0x5a, 0xc6, 0x53, 0x27, 0xaa, 0x82, 0xa1, + 0x41, 0x2a, 0xa2, 0x54, 0x56, 0xa9, 0x55, 0xf3, + 0x55, 0x07, 0xd1, 0x5f, 0x35, 0x42, 0x54, 0x12, + 0x11, 0x42, 0xa0, 0x95, 0x15, 0x0a, 0x14, 0x12, + 0x48, 0x5f, 0x24, 0xa1, 0x2a, 0x2a, 0x82, 0x57, + 0xcd, 0x46, 0xe4, 0x25, 0x42, 0x06, 0xe5, 0x07, + 0x7a, 0x12, 0xbe, 0x50, 0x49, 0x2a, 0x14, 0x12, + 0xa0, 0xa0, 0x92, 0x57, 0xdd, 0xbd, 0xbc, 0xf7, + 0x73, 0x32, 0xde, 0xda, 0x37, 0x4d, 0x2c, 0x86, + 0x8d, 0x63, 0x45, 0x49, 0x59, 0x16, 0x78, 0x7b, + 0xeb, 0xc8, 0x5f, 0x72, 0xd8, 0xcb, 0x2c, 0xe2, + 0x23, 0xad, 0x9c, 0x8d, 0x80, 0x12, 0x1b, 0x51, + 0xd2, 0xba, 0x36, 0x0e, 0xe3, 0x4b, 0x69, 0xfc, + 0xbb, 0x30, 0x0c, 0xf1, 0xaf, 0x26, 0x8c, 0x1f, + 0x2d, 0x70, 0x14, 0xab, 0xc5, 0x45, 0x09, 0x28, + 0x34, 0x3a, 0x73, 0x48, 0xdd, 0xe3, 0x75, 0x25, + 0xa0, 0xcb, 0xc4, 0xd7, 0x44, 0x5a, 0x5f, 0x19, + 0x1b, 0x59, 0xd6, 0x6c, 0xa3, 0x5e, 0xb2, 0x6e, + 0xf1, 0xfe, 0xd0, 0xf2, 0xf9, 0x69, 0xd8, 0xdf, + 0xf8, 0xd6, 0xfc, 0x45, 0x8d, 0x0e, 0x14, 0x8f, + 0xab, 0xaf, 0x8b, 0xc9, 0x42, 0xb4, 0x3a, 0xa2, + 0x0c, 0xf6, 0x9e, 0xcd, 0x49, 0x1c, 0x97, 0x32, + 0xb9, 0xb2, 0x3b, 0xac, 0xb7, 0x98, 0x92, 0x43, + 0x85, 0x6b, 0xb2, 0xa6, 0x8b, 0x35, 0xba, 0xff, + 0x00, 0x59, 0xdd, 0xd9, 0x16, 0xdb, 0x30, 0xc8, + 0xc6, 0x78, 0x92, 0x4c, 0xc6, 0xd6, 0x9d, 0xf4, + 0x18, 0x9a, 0x87, 0x41, 0x66, 0xf0, 0x96, 0xc6, + 0xf2, 0x5e, 0x1b, 0x88, 0x6b, 0x59, 0x1d, 0x1e, + 0xde, 0x1e, 0x7a, 0x80, 0xaa, 0xe4, 0x8a, 0x2e, + 0x93, 0xa4, 0xee, 0x73, 0xc3, 0x15, 0x96, 0xba, + 0xd4, 0x45, 0xc3, 0x1a, 0xe8, 0x5d, 0xc0, 0x27, + 0x14, 0xab, 0xc8, 0x34, 0xe1, 0x05, 0x73, 0x30, + 0xed, 0x9b, 0x37, 0x72, 0x20, 0x92, 0x76, 0x2d, + 0xce, 0x94, 0xd4, 0xb7, 0x3a, 0x77, 0x2a, 0xcb, + 0xa8, 0xcf, 0x15, 0xbc, 0x84, 0x36, 0xe2, 0x3e, + 0x42, 0xde, 0x7f, 0x71, 0x69, 0x6b, 0xca, 0xbe, + 0x09, 0xaa, 0x14, 0xfd, 0x2d, 0x8e, 0xc8, 0x5a, + 0xe4, 0x6c, 0xe2, 0xbc, 0xb4, 0x78, 0x7c, 0x32, + 0x8a, 0xb4, 0x8f, 0x81, 0x65, 0x2e, 0x65, 0xec, + 0x73, 0x2c, 0xe7, 0xc1, 0x77, 0x8a, 0x79, 0x27, + 0xab, 0x3d, 0x6c, 0x55, 0xe4, 0x69, 0xd8, 0x42, + 0xe9, 0xaa, 0x28, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x8b, 0xe4, 0xef, + 0x41, 0x54, 0xcc, 0x6d, 0xd5, 0xb6, 0xbf, 0xd2, + 0x3f, 0x02, 0xa0, 0xe5, 0xda, 0x38, 0xf2, 0x3b, + 0x3f, 0xf6, 0x3d, 0x5c, 0xb5, 0x5c, 0xf7, 0x30, + 0x6a, 0x18, 0x24, 0xb4, 0x6f, 0x1c, 0xc2, 0x3d, + 0x8d, 0x1d, 0xd5, 0x4f, 0xbb, 0x26, 0x47, 0x5c, + 0xf5, 0xbe, 0x29, 0x91, 0xc4, 0xcb, 0xdc, 0x27, + 0x7a, 0xc4, 0xea, 0xc6, 0x33, 0x55, 0x33, 0xec, + 0x87, 0xb3, 0x47, 0xd0, 0x6a, 0x6a, 0xe1, 0x19, + 0xe3, 0x96, 0x9c, 0x44, 0xff, 0x00, 0x16, 0x71, + 0x12, 0xc3, 0xd2, 0xe0, 0x7a, 0x25, 0x9f, 0xd4, + 0x93, 0xfc, 0x96, 0xb3, 0x56, 0x01, 0xe5, 0x36, + 0x9f, 0xd3, 0x1f, 0x0a, 0xdc, 0x62, 0xdb, 0x1c, + 0x36, 0x62, 0x3b, 0x53, 0xc7, 0x17, 0x13, 0x8f, + 0x17, 0x74, 0xd2, 0xab, 0x1f, 0x2d, 0x6d, 0x65, + 0x3c, 0x91, 0x1b, 0xb7, 0xf0, 0x39, 0x8d, 0xa3, + 0x07, 0x38, 0x53, 0xef, 0xc7, 0xf0, 0xe5, 0xee, + 0x74, 0xff, 0x00, 0xe5, 0x6b, 0x7f, 0x1e, 0x97, + 0xfc, 0x90, 0xcc, 0xb1, 0x6b, 0x7d, 0x1d, 0x1e, + 0xce, 0x45, 0x66, 0xd2, 0xe2, 0x97, 0x19, 0x0a, + 0x79, 0xa3, 0x7e, 0x05, 0x5b, 0x83, 0xc5, 0xb7, + 0x6b, 0x23, 0xdb, 0x1d, 0x36, 0x15, 0xb9, 0xd3, + 0xf7, 0x17, 0x4c, 0xba, 0xb8, 0x11, 0xb6, 0xad, + 0x7c, 0x3c, 0x32, 0x77, 0x00, 0x1b, 0x15, 0x8d, + 0x68, 0x99, 0x88, 0x88, 0x9e, 0xf8, 0x67, 0x3f, + 0xdb, 0x75, 0x71, 0xc7, 0x2c, 0xa7, 0x3d, 0x2a, + 0xc6, 0x2f, 0xf5, 0xc4, 0xbd, 0x31, 0xff, 0x00, + 0xc8, 0x3f, 0x38, 0xac, 0x95, 0x8f, 0x8f, 0xd9, + 0x01, 0xdb, 0x41, 0xc4, 0x76, 0xa9, 0x9e, 0xfa, + 0x18, 0x45, 0x01, 0xe2, 0x77, 0x30, 0x5d, 0x1e, + 0x16, 0x40, 0x5e, 0x38, 0xfc, 0x85, 0xbe, 0x3b, + 0x39, 0xe5, 0x52, 0x9a, 0xb1, 0xac, 0xa6, 0xcd, + 0xbb, 0x57, 0x8c, 0x36, 0xf9, 0x3c, 0x93, 0xa9, + 0x1b, 0x4c, 0x51, 0x9d, 0xee, 0x3b, 0x36, 0x2d, + 0xc5, 0x8e, 0x9c, 0xb5, 0xb7, 0x21, 0xf3, 0x9e, + 0xb5, 0xfd, 0xd4, 0x2d, 0xed, 0x26, 0xb9, 0xb9, + 0x2f, 0x3d, 0x4d, 0x99, 0x74, 0x7c, 0x8e, 0x35, + 0xda, 0xbe, 0x7d, 0x78, 0xbe, 0xf3, 0x23, 0xef, + 0xf8, 0x16, 0x78, 0x86, 0x06, 0x8a, 0x35, 0x8d, + 0x01, 0x4f, 0x55, 0x17, 0xc9, 0x6a, 0x83, 0x5f, + 0xeb, 0xc5, 0xf7, 0x99, 0x14, 0xf5, 0xe2, 0xfb, + 0xcc, 0x4f, 0xbf, 0xe0, 0x59, 0xd2, 0x79, 0x34, + 0x4d, 0xe2, 0x93, 0x85, 0xad, 0x1b, 0xeb, 0x45, + 0xa7, 0xbd, 0xd4, 0x56, 0xb1, 0x93, 0x1d, 0xac, + 0x62, 0x47, 0xf3, 0xd0, 0x10, 0xad, 0x0c, 0x97, + 0x6b, 0xab, 0xb6, 0x0a, 0xbe, 0xcf, 0x84, 0x77, + 0x57, 0xc1, 0xf6, 0x85, 0x25, 0x36, 0x5b, 0x0e, + 0x92, 0xb4, 0x8f, 0x6d, 0xf5, 0xfb, 0xb8, 0xa7, + 0x3c, 0x0c, 0xdf, 0xc2, 0x02, 0x8b, 0xbb, 0x38, + 0x60, 0xb4, 0x71, 0x68, 0xf1, 0x87, 0x2a, 0x50, + 0xe9, 0x58, 0xeb, 0xa3, 0x79, 0x67, 0x15, 0xc9, + 0x1c, 0x26, 0x46, 0xd6, 0x8b, 0x25, 0x6b, 0xf0, + 0x1f, 0x74, 0x5b, 0x1f, 0xf6, 0x05, 0xb0, 0x50, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x05, 0x4f, 0x37, 0xf9, 0xa6, 0xc3, 0xbf, + 0x1f, 0xef, 0x2b, 0x58, 0xe5, 0x55, 0x4c, 0xdf, + 0xe6, 0x9b, 0x0e, 0xfc, 0x7f, 0xbc, 0xad, 0x63, + 0x95, 0x04, 0xa2, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0xa9, 0x6a, 0xbf, 0xbe, 0xf1, 0xdd, + 0xe6, 0xff, 0x00, 0x70, 0x2b, 0x6a, 0xa9, 0x6a, + 0xbf, 0xbe, 0xf1, 0xdd, 0xe6, 0xff, 0x00, 0x70, + 0x20, 0xb6, 0x72, 0xa9, 0x51, 0xca, 0xa5, 0x01, + 0x42, 0x95, 0x08, 0x3e, 0x25, 0x9a, 0x38, 0x58, + 0x64, 0x91, 0xc1, 0x8c, 0x1b, 0xdc, 0x76, 0x05, + 0xf3, 0x2d, 0xd4, 0x10, 0xc6, 0x25, 0x95, 0xed, + 0x64, 0x6e, 0xa5, 0x1c, 0x4d, 0x01, 0xae, 0xe5, + 0xe5, 0x92, 0x83, 0xca, 0x2c, 0x67, 0x8a, 0x95, + 0x2e, 0x61, 0xa0, 0xee, 0x8d, 0xcb, 0x51, 0x74, + 0xc3, 0x91, 0xb2, 0xb3, 0xb7, 0x68, 0xdb, 0xd5, + 0xb9, 0xce, 0x1c, 0xc5, 0xad, 0xe1, 0x1e, 0xf8, + 0x4e, 0x63, 0x79, 0x25, 0xcc, 0x51, 0x06, 0x97, + 0xb9, 0xad, 0x0f, 0x20, 0x34, 0x93, 0xbc, 0x9e, + 0x65, 0x31, 0x4e, 0xc9, 0x87, 0x14, 0x6e, 0x0e, + 0x6e, 0xd1, 0x50, 0x6b, 0xb4, 0x6c, 0x2b, 0x4f, + 0xc6, 0x2f, 0x26, 0xc6, 0x36, 0x9c, 0x41, 0x81, + 0xd2, 0x3f, 0x9a, 0xac, 0x1c, 0x3f, 0x08, 0x5e, + 0x0d, 0xbe, 0xbf, 0x75, 0xa5, 0x9b, 0x60, 0x78, + 0x8e, 0x49, 0xe5, 0x92, 0x37, 0x38, 0x01, 0xb0, + 0x02, 0x45, 0x40, 0xee, 0x27, 0x33, 0x84, 0x76, + 0xe6, 0xb2, 0x2f, 0x39, 0x66, 0x8e, 0x20, 0x1d, + 0x23, 0x83, 0x1a, 0x48, 0x68, 0x27, 0x9c, 0xee, + 0x0b, 0x43, 0x77, 0x90, 0x96, 0x1b, 0x96, 0xe3, + 0xa4, 0xc8, 0x8b, 0x77, 0xc4, 0xc0, 0xf9, 0x2e, + 0x5e, 0x1a, 0x0b, 0xaa, 0x7e, 0x28, 0x69, 0xd8, + 0xbc, 0xe4, 0xc8, 0xf9, 0x65, 0x81, 0x8d, 0xd2, + 0xb6, 0x77, 0xdb, 0xdc, 0xc4, 0xd3, 0x33, 0x77, + 0x3c, 0x71, 0x0f, 0x19, 0x05, 0x96, 0xaa, 0x55, + 0x6e, 0x7c, 0xc1, 0x9e, 0xe6, 0x76, 0x37, 0x20, + 0xcb, 0x16, 0xdb, 0x3b, 0x80, 0x31, 0xc0, 0x12, + 0xf2, 0x05, 0x6a, 0x6b, 0xb9, 0x25, 0xce, 0x4b, + 0x71, 0x05, 0xa7, 0x0d, 0xc3, 0x6c, 0xdb, 0x3f, + 0x17, 0x59, 0x73, 0x40, 0xe0, 0x1c, 0xcd, 0x94, + 0x1c, 0x5b, 0x36, 0xa0, 0xb1, 0xa2, 0xd2, 0x5d, + 0x5e, 0xdf, 0xda, 0x63, 0x5a, 0x64, 0x99, 0xae, + 0x2f, 0x95, 0xac, 0x17, 0x6d, 0xa6, 0xc8, 0xdd, + 0xff, 0x00, 0xb0, 0x8d, 0xcb, 0x2b, 0x12, 0xeb, + 0xb7, 0x35, 0xc6, 0x4b, 0x96, 0xde, 0xc0, 0xea, + 0x18, 0xae, 0x05, 0x01, 0x3c, 0xe2, 0x8d, 0xd8, + 0x83, 0x64, 0x8b, 0x57, 0x93, 0xb9, 0xba, 0x75, + 0xd4, 0x16, 0x16, 0x92, 0x75, 0x12, 0x4c, 0x1c, + 0xf7, 0x4b, 0x40, 0xea, 0x06, 0x8a, 0xd2, 0x87, + 0x9d, 0x7c, 0xcf, 0x73, 0x91, 0xb5, 0xc7, 0x45, + 0x1c, 0x85, 0xae, 0xbd, 0x95, 0xe2, 0x16, 0xc8, + 0x37, 0x54, 0xfe, 0xdd, 0x10, 0x6d, 0x94, 0x2d, + 0x34, 0x73, 0xdf, 0xd8, 0x5e, 0x32, 0xda, 0xee, + 0xe3, 0xca, 0x5b, 0x72, 0xd7, 0x18, 0xde, 0x5a, + 0x1a, 0x5a, 0xe6, 0xf2, 0x78, 0xbd, 0xf5, 0x85, + 0x1d, 0xee, 0x67, 0xd1, 0xcd, 0xca, 0x49, 0x73, + 0x46, 0x46, 0xef, 0x1a, 0x00, 0xd1, 0x47, 0x34, + 0x1a, 0x56, 0xbc, 0xe5, 0x05, 0x99, 0x16, 0x92, + 0x69, 0xf2, 0x77, 0x39, 0x57, 0xda, 0x5b, 0xdc, + 0x0b, 0x78, 0x9b, 0x0b, 0x24, 0x2e, 0x00, 0x38, + 0x82, 0x6b, 0xb0, 0x07, 0x73, 0xaf, 0x0f, 0x4e, + 0x4f, 0x16, 0x38, 0x36, 0x79, 0x5a, 0xdb, 0x8e, + 0xb8, 0xdb, 0x19, 0xcd, 0x28, 0x0b, 0x7f, 0x6c, + 0x8d, 0xc8, 0x2c, 0x6a, 0x2a, 0xb4, 0x16, 0x99, + 0x81, 0x05, 0xc9, 0x81, 0xf7, 0xcc, 0xbf, 0x6c, + 0x8c, 0x2f, 0x0f, 0x68, 0x00, 0xb4, 0xb7, 0x90, + 0x86, 0xf3, 0xaf, 0x7c, 0x6b, 0xb2, 0xd3, 0x98, + 0xaf, 0x24, 0x98, 0x3a, 0xde, 0xe1, 0xa5, 0xc6, + 0x22, 0x00, 0x31, 0xd7, 0xe2, 0xf0, 0xd3, 0x7f, + 0xba, 0x89, 0x2d, 0x97, 0x96, 0x5b, 0x51, 0xee, + 0xeb, 0x1b, 0x48, 0x8d, 0x24, 0x35, 0xdc, 0x7b, + 0xab, 0xd8, 0x38, 0x38, 0x54, 0x6d, 0x07, 0x68, + 0x2a, 0xab, 0x6d, 0xe5, 0x76, 0xd1, 0x65, 0xa7, + 0xeb, 0xfa, 0xc2, 0xd9, 0x0f, 0x8a, 0xe6, 0x8a, + 0x13, 0x51, 0xb7, 0xa1, 0x6c, 0xed, 0xf2, 0x13, + 0xc5, 0x3d, 0xdc, 0x57, 0x0e, 0xab, 0x63, 0x8d, + 0xb2, 0x43, 0xb0, 0x0d, 0x84, 0x6d, 0x09, 0xc3, + 0xb9, 0x78, 0xd7, 0x5a, 0x6c, 0xdd, 0x71, 0x1b, + 0x24, 0x11, 0xb9, 0xc0, 0x3c, 0x82, 0x43, 0x49, + 0xda, 0x40, 0xde, 0xa6, 0x19, 0xe3, 0x9d, 0xbc, + 0x71, 0x38, 0x3d, 0x87, 0x73, 0x86, 0xe5, 0xa0, + 0x8a, 0xe6, 0xfa, 0x71, 0x6e, 0xd9, 0x64, 0xe0, + 0x92, 0xe2, 0xda, 0x49, 0x0b, 0xb8, 0x47, 0x10, + 0xda, 0x29, 0xf0, 0xaf, 0x1c, 0x5c, 0xd7, 0xb6, + 0x36, 0x36, 0x72, 0x99, 0xfa, 0xc8, 0x24, 0x9b, + 0xab, 0x91, 0xa5, 0xa0, 0x50, 0x1e, 0xf2, 0x9d, + 0xbc, 0x4e, 0xde, 0x0b, 0x4a, 0x2d, 0x7d, 0xb5, + 0xd4, 0xd3, 0xe4, 0xae, 0x23, 0x07, 0xf8, 0x10, + 0x35, 0xad, 0xa7, 0x3b, 0x9c, 0x2a, 0x76, 0xf7, + 0x16, 0xc1, 0x50, 0x44, 0x44, 0x04, 0x44, 0x41, + 0x0a, 0xb7, 0x82, 0x68, 0x7d, 0xee, 0x4d, 0x87, + 0x73, 0x9e, 0x41, 0x56, 0x45, 0x50, 0xc7, 0xe5, + 0xac, 0x6c, 0x32, 0x59, 0x06, 0x5c, 0xbf, 0x80, + 0xba, 0x43, 0x4e, 0x94, 0x11, 0x89, 0xb9, 0x6e, + 0x07, 0x33, 0x3d, 0x85, 0xc9, 0xe0, 0x82, 0xe5, + 0xdc, 0x50, 0xb8, 0xee, 0xa9, 0x2a, 0xde, 0x1c, + 0x08, 0xa8, 0x35, 0x07, 0x71, 0x55, 0x3c, 0xbd, + 0xee, 0x9f, 0xca, 0xc2, 0x19, 0x24, 0xbc, 0x32, + 0x37, 0xe2, 0x49, 0xb2, 0xa1, 0x68, 0x46, 0x43, + 0x21, 0x69, 0xfc, 0x18, 0x2f, 0x4b, 0xe2, 0xdc, + 0x09, 0x3c, 0x88, 0x2e, 0xda, 0x83, 0x31, 0x06, + 0x36, 0xc9, 0xfe, 0x30, 0x33, 0xbc, 0x16, 0xc4, + 0xc0, 0x76, 0x92, 0x56, 0x1e, 0x96, 0xc7, 0xba, + 0xd2, 0xc5, 0xd2, 0xcd, 0xb2, 0x5b, 0x92, 0x5c, + 0xfa, 0xf7, 0x55, 0x7f, 0x1c, 0xdc, 0x6b, 0xae, + 0x5b, 0x79, 0x95, 0xba, 0xeb, 0xe5, 0x6e, 0xd0, + 0xd2, 0x6a, 0x07, 0xb8, 0xac, 0x9e, 0xb3, 0xe1, + 0xa9, 0x4e, 0xb6, 0x80, 0x6e, 0x08, 0x34, 0xd1, + 0x5e, 0x1d, 0x35, 0x99, 0x9d, 0xb3, 0x83, 0xe4, + 0x97, 0x3e, 0x30, 0x3d, 0xd5, 0xef, 0x8e, 0xb3, + 0x9b, 0x51, 0xdf, 0xfa, 0x4e, 0xf0, 0x91, 0x69, + 0x11, 0xfe, 0x04, 0x7b, 0xab, 0x45, 0xef, 0x93, + 0xc9, 0xe9, 0xdc, 0xa5, 0xb1, 0x86, 0x79, 0x07, + 0x10, 0xf8, 0xae, 0xe5, 0x0a, 0xb8, 0x2e, 0xee, + 0xb1, 0xd5, 0x8a, 0xc2, 0xee, 0xb0, 0x7e, 0xc8, + 0xee, 0x20, 0xbd, 0x66, 0x72, 0xd6, 0xf8, 0x9b, + 0x27, 0x48, 0xf7, 0x0e, 0x3a, 0x52, 0x36, 0x72, + 0x93, 0xb8, 0x2d, 0x46, 0x93, 0xb4, 0x95, 0xac, + 0x9b, 0x25, 0x70, 0x3f, 0x8d, 0x74, 0x6a, 0x3b, + 0xcb, 0x47, 0x64, 0x2c, 0x6e, 0x27, 0x6d, 0xce, + 0x62, 0xeb, 0xad, 0xe1, 0xda, 0xd8, 0xeb, 0xca, + 0xac, 0xc3, 0x52, 0x61, 0x18, 0xd0, 0xc6, 0x49, + 0x46, 0xb7, 0x60, 0x01, 0x06, 0xd4, 0x1a, 0x6c, + 0x4a, 0xf2, 0x2d, 0x5f, 0xac, 0xd8, 0x6e, 0xd7, + 0xe0, 0x4f, 0x59, 0xf0, 0xdd, 0xae, 0xe4, 0x15, + 0xed, 0x73, 0xff, 0x00, 0x7e, 0x2f, 0x9a, 0xab, + 0x4b, 0x79, 0xab, 0x32, 0x16, 0xb9, 0x0b, 0xc8, + 0x9f, 0x6a, 0x78, 0xc7, 0x0d, 0x28, 0x17, 0xb6, + 0x0f, 0x48, 0x5c, 0xde, 0x16, 0xcd, 0x78, 0x0c, + 0x70, 0x6f, 0xe1, 0xe5, 0x21, 0x49, 0x18, 0x9a, + 0x5a, 0xc2, 0xe6, 0xeb, 0x29, 0x14, 0xd1, 0xb0, + 0xf5, 0x51, 0x1a, 0xb9, 0xfc, 0x8b, 0xa6, 0x05, + 0xe1, 0x67, 0x65, 0x6f, 0x65, 0x0b, 0x61, 0xb7, + 0x60, 0x63, 0x5b, 0xb3, 0x62, 0xc8, 0x54, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x53, + 0x7d, 0xa6, 0x69, 0xc6, 0xe5, 0xf0, 0x8f, 0xb8, + 0x89, 0xb5, 0xba, 0xb4, 0x05, 0xec, 0xa7, 0x28, + 0xe5, 0x57, 0x25, 0xf2, 0xf6, 0xb5, 0xed, 0x73, + 0x5c, 0x2a, 0xd7, 0x02, 0x08, 0xee, 0x14, 0x1f, + 0x97, 0x47, 0x37, 0x2a, 0x2b, 0x2f, 0xb4, 0x1d, + 0x3e, 0x70, 0x7a, 0x82, 0x56, 0x46, 0xd2, 0x2d, + 0x6e, 0x7f, 0x8b, 0x09, 0xa5, 0x05, 0x4f, 0xc6, + 0x1e, 0xe2, 0xad, 0x04, 0x0e, 0xe7, 0x2a, 0x27, + 0xc0, 0x85, 0x01, 0x10, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x0a, 0xa0, 0x77, 0x39, + 0x51, 0x39, 0x3b, 0x88, 0x80, 0x88, 0x88, 0x09, + 0x54, 0x50, 0x10, 0x49, 0x5b, 0xdb, 0x63, 0x4b, + 0x78, 0xfe, 0x6a, 0xd1, 0x1e, 0x45, 0xbc, 0x83, + 0xfe, 0xbc, 0x7f, 0x35, 0x5c, 0x52, 0x5e, 0x84, + 0xa8, 0x42, 0x54, 0x6d, 0x54, 0x2a, 0xa1, 0x14, + 0x12, 0x81, 0x55, 0x05, 0x41, 0x4d, 0xaa, 0x08, + 0x4a, 0xa8, 0x35, 0x51, 0x54, 0x12, 0x4a, 0xf9, + 0xaa, 0x28, 0x28, 0x04, 0xa1, 0x3b, 0x14, 0x12, + 0xa0, 0x94, 0x02, 0x54, 0x55, 0x41, 0x24, 0xec, + 0x5e, 0xf6, 0x36, 0x17, 0xd9, 0x2b, 0x86, 0xda, + 0xd8, 0xc4, 0x65, 0x99, 0xdb, 0x80, 0x1b, 0xbb, + 0xa5, 0x06, 0x3b, 0x9c, 0x00, 0xdb, 0xee, 0x05, + 0x65, 0xc7, 0xfb, 0x3d, 0xd4, 0x59, 0x0c, 0x79, + 0xbe, 0x89, 0xac, 0x63, 0x5c, 0x2b, 0x1c, 0x6f, + 0x34, 0x71, 0x0b, 0x3d, 0xf8, 0xcd, 0x31, 0xa5, + 0x6d, 0xcc, 0x79, 0xca, 0xe4, 0x72, 0x93, 0x36, + 0x86, 0xde, 0x33, 0xb2, 0x30, 0x7e, 0x6a, 0x9d, + 0x27, 0xaa, 0xfd, 0x1d, 0x96, 0x93, 0x1e, 0x24, + 0x96, 0x3c, 0x7d, 0xe8, 0x02, 0xdf, 0xae, 0xad, + 0x62, 0x2e, 0x1e, 0x29, 0x15, 0x3b, 0x90, 0x78, + 0x61, 0xe7, 0xcc, 0xe9, 0xd9, 0x5d, 0x8d, 0xce, + 0xda, 0xc9, 0xe8, 0x7b, 0xa0, 0x63, 0x94, 0x16, + 0xf8, 0xa2, 0xa7, 0xe3, 0x87, 0x72, 0xd0, 0xad, + 0x3e, 0xac, 0xc6, 0xdd, 0xe2, 0xf2, 0xa3, 0x8e, + 0x53, 0x24, 0x0f, 0x0d, 0x75, 0x95, 0xc8, 0x3b, + 0xe3, 0x1b, 0x58, 0x2b, 0xce, 0x15, 0xc6, 0xef, + 0x5e, 0xe4, 0x70, 0xd7, 0xef, 0xc6, 0xea, 0x0b, + 0x36, 0x5e, 0x43, 0xbe, 0x3b, 0x80, 0x01, 0x2e, + 0x63, 0xb7, 0x10, 0x37, 0x2f, 0x6c, 0xae, 0x4f, + 0x49, 0x6a, 0xec, 0x37, 0x91, 0x5b, 0xca, 0xdb, + 0x6b, 0x98, 0x45, 0x6d, 0x9b, 0x2d, 0x1a, 0x43, + 0xa9, 0xf1, 0x54, 0x56, 0x3e, 0x36, 0xe6, 0xd7, + 0x5e, 0x69, 0xb7, 0x63, 0x2f, 0x08, 0x6e, 0x62, + 0xc4, 0x7f, 0x09, 0xe7, 0x79, 0xa6, 0xe2, 0x3b, + 0xea, 0x99, 0x6d, 0x73, 0x9b, 0xd2, 0x59, 0x3f, + 0xe2, 0x33, 0xaa, 0x95, 0xa7, 0xf8, 0x90, 0xbc, + 0x55, 0xaf, 0x6f, 0xba, 0xbc, 0x31, 0x59, 0x4b, + 0xbd, 0x3d, 0x93, 0x92, 0x78, 0x40, 0x37, 0x11, + 0x07, 0xc4, 0x0d, 0x68, 0x01, 0x3b, 0x2b, 0xdd, + 0x58, 0x57, 0x97, 0xd7, 0x77, 0xd7, 0x0f, 0xb9, + 0xbb, 0x90, 0xcb, 0x2b, 0xcd, 0x49, 0x76, 0xdd, + 0xea, 0xa3, 0x3f, 0x39, 0xaa, 0x73, 0x19, 0xb2, + 0x5b, 0x77, 0x2d, 0x2d, 0xf8, 0x8b, 0x9b, 0x6e, + 0xcd, 0x8d, 0x00, 0xed, 0xa6, 0xc5, 0xa8, 0x27, + 0xb8, 0xa0, 0xa8, 0x28, 0x05, 0x41, 0x2a, 0x0b, + 0x94, 0x54, 0xa2, 0xaf, 0x5e, 0xc8, 0x8c, 0x9e, + 0xb1, 0xbc, 0x37, 0xe2, 0xf5, 0x47, 0x8b, 0xbc, + 0xbb, 0x4a, 0xe6, 0x5e, 0xc6, 0x71, 0xd1, 0xf9, + 0x2d, 0xe6, 0x48, 0xff, 0x00, 0x31, 0xce, 0x11, + 0x37, 0xe6, 0xd2, 0xab, 0xa6, 0xa8, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x8a, 0x16, + 0x16, 0x43, 0x31, 0x63, 0x60, 0xda, 0xcf, 0x28, + 0x07, 0x91, 0xb5, 0xda, 0x83, 0x39, 0x6a, 0xf2, + 0x9a, 0x83, 0x1f, 0x8d, 0x69, 0xeb, 0x64, 0x0e, + 0x93, 0x91, 0x83, 0x69, 0xaa, 0xaf, 0x5e, 0xea, + 0x3c, 0xb6, 0x4c, 0x98, 0xb1, 0x91, 0x98, 0xe2, + 0x3b, 0x0c, 0x87, 0x62, 0xf3, 0xb3, 0xd3, 0xcc, + 0x6b, 0x84, 0xf7, 0xcf, 0x33, 0xca, 0x76, 0xed, + 0xe7, 0x41, 0xea, 0x75, 0x6e, 0x66, 0xe1, 0xc5, + 0xf6, 0xb6, 0xdf, 0xc1, 0xfd, 0x9a, 0x84, 0xf5, + 0x97, 0x51, 0x79, 0xb0, 0xff, 0x00, 0x1e, 0xe2, + 0xd9, 0x35, 0x8c, 0x63, 0x78, 0x18, 0x00, 0x68, + 0xdc, 0x02, 0x9f, 0x70, 0x20, 0xd6, 0x0d, 0x49, + 0xa8, 0xcf, 0xff, 0x00, 0xac, 0x3f, 0xc7, 0xb8, + 0x9e, 0xb2, 0x6a, 0x2f, 0x36, 0x1f, 0xe3, 0xdc, + 0x5b, 0x27, 0xbd, 0xac, 0x69, 0x73, 0xc8, 0x6b, + 0x47, 0x2a, 0xd5, 0x5e, 0xea, 0x2b, 0x68, 0x6a, + 0xdb, 0x7f, 0xe2, 0xcb, 0xc9, 0x4e, 0x74, 0x13, + 0x26, 0xa8, 0xcf, 0xc6, 0xd2, 0xf9, 0x2d, 0xc3, + 0x5a, 0x37, 0x93, 0xff, 0x00, 0xe1, 0x62, 0x7a, + 0xf9, 0x91, 0xaf, 0xf2, 0xdb, 0xbe, 0x8b, 0x06, + 0x77, 0x64, 0x72, 0x2f, 0xe2, 0x9d, 0xdc, 0x11, + 0xfc, 0x91, 0xb3, 0x62, 0xf8, 0xba, 0xb6, 0x86, + 0x0b, 0x42, 0x1a, 0x36, 0xd7, 0x7a, 0x40, 0xdf, + 0x4f, 0x70, 0xeb, 0x8d, 0x43, 0x61, 0x3b, 0x80, + 0x0e, 0x92, 0x02, 0x48, 0xe4, 0xdc, 0xa9, 0x59, + 0x6d, 0x92, 0x64, 0x77, 0x7c, 0x77, 0x2b, 0x7b, + 0x47, 0xff, 0x00, 0x73, 0x8c, 0xe7, 0x30, 0x2d, + 0x46, 0x47, 0x49, 0xe6, 0x66, 0x92, 0xf0, 0xb2, + 0x3a, 0x89, 0x9e, 0xe2, 0xcd, 0x9c, 0x89, 0x22, + 0xb9, 0xa5, 0xcd, 0x71, 0x2d, 0x3f, 0x49, 0x25, + 0x7d, 0xe5, 0xac, 0xd5, 0x67, 0xfe, 0x45, 0xa7, + 0xf4, 0x87, 0xc2, 0xad, 0xb8, 0x1d, 0x1f, 0x9b, + 0xb5, 0xc7, 0x36, 0x29, 0x62, 0x2d, 0x7f, 0x1b, + 0xcd, 0x3b, 0x86, 0x94, 0x58, 0x3a, 0x83, 0x42, + 0xea, 0x0b, 0xb9, 0xad, 0xdd, 0x04, 0x45, 0xc2, + 0x36, 0x06, 0xb8, 0xf3, 0x10, 0x87, 0x74, 0x7b, + 0x9f, 0x16, 0x14, 0x18, 0xe8, 0xfe, 0x6a, 0xb3, + 0x69, 0x8a, 0x75, 0xf9, 0x0d, 0x9f, 0xfe, 0xab, + 0x7e, 0x02, 0xb0, 0x6d, 0x34, 0x96, 0x69, 0x96, + 0x6c, 0x89, 0xd1, 0x9e, 0x30, 0x28, 0xb7, 0x58, + 0x6c, 0x3d, 0xf5, 0x83, 0xaf, 0xa6, 0xb9, 0x69, + 0x6b, 0x1f, 0x6e, 0x1a, 0x0f, 0x74, 0x02, 0xb4, + 0x34, 0x1c, 0x4f, 0xf2, 0x56, 0xb1, 0x87, 0x87, + 0x8d, 0xe5, 0xb5, 0xf7, 0x56, 0xe2, 0x3d, 0x0d, + 0x72, 0xf6, 0xb2, 0x4e, 0xb4, 0x55, 0xc0, 0x38, + 0x54, 0xf3, 0xad, 0x30, 0xfe, 0x44, 0x5f, 0xd5, + 0xff, 0x00, 0x35, 0xd2, 0xed, 0xff, 0x00, 0xeb, + 0x43, 0xf3, 0x07, 0xc0, 0xa0, 0xab, 0xb7, 0x4a, + 0xe5, 0x98, 0xde, 0x16, 0xdd, 0x00, 0x39, 0x81, + 0x53, 0xea, 0xb6, 0x67, 0xce, 0xfd, 0xf5, 0x6b, + 0x51, 0xb5, 0x41, 0x55, 0xf5, 0x5b, 0x31, 0xe7, + 0x5e, 0xfa, 0x7a, 0xad, 0x98, 0xf3, 0xbf, 0x7d, + 0x5a, 0x89, 0x21, 0x48, 0xde, 0x15, 0x81, 0xce, + 0x6f, 0x6d, 0x2e, 0xe3, 0xc8, 0x1b, 0x1b, 0x89, + 0xcb, 0xc3, 0x06, 0xdd, 0xab, 0xda, 0x1b, 0x58, + 0x21, 0x03, 0x85, 0xa0, 0x91, 0xca, 0xbd, 0xf3, + 0x5f, 0x99, 0x25, 0xef, 0x21, 0x40, 0xae, 0xca, + 0x2c, 0x5c, 0x89, 0xff, 0x00, 0x88, 0xf5, 0x92, + 0xb1, 0xb2, 0x3f, 0xf5, 0x1e, 0x82, 0xf9, 0xa7, + 0xcf, 0xff, 0x00, 0x4f, 0x6d, 0xf3, 0x02, 0xd8, + 0x2d, 0x76, 0x03, 0xee, 0x7b, 0x6f, 0x98, 0x16, + 0xc3, 0x6a, 0x83, 0xe9, 0x17, 0xcd, 0x4a, 0x54, + 0xa0, 0xfa, 0x45, 0xf3, 0x52, 0x95, 0xff, 0x00, + 0xf2, 0x83, 0xe9, 0x79, 0xbe, 0x78, 0x98, 0xf6, + 0xc6, 0xe7, 0x80, 0xf7, 0xfc, 0x56, 0x9e, 0x55, + 0xa9, 0xca, 0x6a, 0x2b, 0x7b, 0x4f, 0xe0, 0x5b, + 0x9e, 0xba, 0xe8, 0xec, 0x6b, 0x07, 0x39, 0x58, + 0x58, 0xac, 0x2e, 0x46, 0xe6, 0xed, 0xb9, 0x2c, + 0x93, 0xcb, 0x5e, 0xd3, 0x56, 0x47, 0xcc, 0x82, + 0xcc, 0xa5, 0x42, 0x94, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x41, 0x53, 0xcd, 0xfe, 0x69, + 0xb0, 0xef, 0xc7, 0xfb, 0xca, 0xd6, 0x39, 0x55, + 0x53, 0x37, 0xf9, 0xa6, 0xc7, 0xbf, 0x1f, 0xef, + 0x2b, 0x58, 0xe5, 0x41, 0x28, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0xaa, 0x7a, 0xaf, 0xef, + 0xac, 0x7f, 0x79, 0xbf, 0xdc, 0x0a, 0xd8, 0xaa, + 0x7a, 0xaf, 0xef, 0xac, 0x7f, 0x78, 0x7f, 0x70, + 0x20, 0xb5, 0xf2, 0xa9, 0x50, 0xa5, 0x01, 0x11, + 0x10, 0x41, 0x15, 0x04, 0x73, 0xad, 0x1e, 0x12, + 0xd2, 0xe2, 0x3b, 0xdb, 0x83, 0x33, 0x0b, 0x19, + 0x10, 0xea, 0xa2, 0x27, 0x71, 0x05, 0xc5, 0xf5, + 0x1d, 0x2b, 0x7a, 0xa2, 0x88, 0x34, 0xb8, 0x8b, + 0x4b, 0x88, 0x6f, 0x6e, 0x3a, 0xe6, 0x91, 0x1c, + 0x23, 0xab, 0x84, 0x9d, 0xc4, 0x13, 0xc7, 0x51, + 0xd2, 0xbc, 0x6d, 0x6d, 0x6e, 0x59, 0x1d, 0x80, + 0x74, 0x4e, 0xac, 0x73, 0x4a, 0x5e, 0x29, 0xb8, + 0x13, 0xb2, 0xaa, 0xc1, 0x44, 0xe1, 0x52, 0x2f, + 0xb7, 0xb4, 0x68, 0xef, 0xa2, 0x36, 0x99, 0x47, + 0x5e, 0x3a, 0xd4, 0xdd, 0xdb, 0xce, 0xc0, 0xc7, + 0x06, 0xb4, 0x3d, 0xcd, 0x73, 0x6a, 0x77, 0x1e, + 0x75, 0x13, 0x89, 0xee, 0xb1, 0xed, 0x73, 0x2d, + 0x3c, 0x9d, 0xa6, 0x78, 0xcb, 0x23, 0x68, 0xa3, + 0xb8, 0x01, 0xda, 0x5c, 0xd5, 0xbd, 0x45, 0x45, + 0x78, 0x30, 0xe3, 0x2e, 0xae, 0x1b, 0x35, 0x89, + 0xba, 0x8e, 0x77, 0x75, 0x90, 0xc8, 0xc6, 0x07, + 0x90, 0x48, 0x03, 0x85, 0xd5, 0x59, 0x17, 0x33, + 0x48, 0xcb, 0x58, 0x45, 0xce, 0x3c, 0x49, 0x14, + 0xa0, 0xf5, 0xb1, 0x44, 0xde, 0x22, 0xca, 0xee, + 0xa0, 0x5b, 0x94, 0x41, 0x5e, 0xb2, 0x8e, 0x7b, + 0x3b, 0x29, 0xa6, 0x8a, 0xd5, 0xd2, 0x5b, 0x49, + 0x28, 0x2d, 0xb5, 0x92, 0xa5, 0xcd, 0x8f, 0x94, + 0xd1, 0xdc, 0xab, 0xd3, 0x09, 0x6a, 0x1b, 0x7d, + 0x35, 0xcd, 0xbc, 0x32, 0x5a, 0xda, 0xbd, 0xa0, + 0x75, 0x52, 0x54, 0x12, 0xfd, 0xb5, 0x3c, 0x27, + 0x60, 0x5b, 0xda, 0x25, 0x13, 0xaf, 0x4a, 0x4e, + 0x9d, 0x6d, 0xaa, 0xc9, 0xb2, 0x5b, 0x7b, 0xeb, + 0x7c, 0x8c, 0x71, 0xba, 0x66, 0xc6, 0x1c, 0xc9, + 0x18, 0xc1, 0x57, 0x51, 0xc3, 0x61, 0x01, 0x7c, + 0x5d, 0xf9, 0x65, 0xdd, 0x84, 0x57, 0x6d, 0x84, + 0xb2, 0x68, 0x25, 0x13, 0x36, 0x13, 0x5e, 0x22, + 0xd6, 0xf2, 0x53, 0x9c, 0xad, 0xc2, 0x51, 0x15, + 0xa3, 0x06, 0xe3, 0x29, 0x7b, 0x14, 0xfd, 0x44, + 0x96, 0xf0, 0xda, 0xb5, 0xe7, 0xf8, 0x83, 0x85, + 0xce, 0x7b, 0x80, 0xa5, 0x07, 0xb8, 0xbc, 0xbc, + 0x92, 0xe7, 0xd5, 0xa7, 0x5b, 0xf5, 0x6e, 0xeb, + 0x8f, 0xfe, 0xba, 0x6d, 0xde, 0xac, 0x34, 0x51, + 0xc2, 0x14, 0xdb, 0xf0, 0xf0, 0x92, 0x37, 0xb5, + 0x36, 0xb0, 0x4c, 0xdc, 0xcc, 0xb2, 0xb9, 0x84, + 0x46, 0xe8, 0x23, 0x68, 0x71, 0xdd, 0x50, 0x0d, + 0x42, 0xc0, 0x38, 0xeb, 0xaf, 0x26, 0x92, 0x61, + 0x0f, 0x1b, 0xe0, 0xbc, 0x7c, 0xe2, 0x17, 0x8f, + 0x8e, 0xc2, 0xac, 0xd4, 0x4a, 0x2b, 0xf8, 0x7c, + 0x6c, 0xe1, 0x4d, 0x35, 0xbb, 0xc5, 0xf3, 0x9f, + 0x14, 0x56, 0x3e, 0x4b, 0x19, 0x61, 0x0f, 0x92, + 0x46, 0x06, 0x3b, 0x88, 0xee, 0xe1, 0xa6, 0xf4, + 0xc5, 0x5d, 0x5d, 0xc6, 0xd8, 0x71, 0xee, 0xb6, + 0x7b, 0x4c, 0x23, 0x86, 0x59, 0x9c, 0x28, 0xca, + 0x37, 0xe4, 0x9e, 0x55, 0xb9, 0xa2, 0x51, 0x3e, + 0x02, 0xb7, 0x2d, 0xbd, 0xc8, 0x66, 0x52, 0xdb, + 0xa9, 0x79, 0x33, 0x3b, 0x8e, 0x37, 0x81, 0xe2, + 0x90, 0x48, 0xdc, 0xbe, 0xf3, 0xb8, 0xfb, 0xa9, + 0xbc, 0x99, 0xf6, 0xcd, 0x25, 0xd2, 0x34, 0x41, + 0x35, 0x39, 0x1a, 0x48, 0x35, 0x3d, 0xea, 0x2b, + 0x0d, 0x12, 0x8a, 0x6e, 0xae, 0x95, 0xe0, 0x7e, + 0x2d, 0x4c, 0xf6, 0xaf, 0x19, 0x28, 0x3a, 0xb6, + 0x1e, 0xa9, 0x96, 0xef, 0x67, 0x17, 0x20, 0xa9, + 0x14, 0x0b, 0x1a, 0xda, 0xde, 0x47, 0xe0, 0xa6, + 0xb6, 0x92, 0x37, 0x45, 0x24, 0x3c, 0x44, 0x17, + 0x0a, 0x0a, 0xb4, 0xf1, 0x02, 0xde, 0x85, 0xbe, + 0xe0, 0x0b, 0x1e, 0xfa, 0xd2, 0x4b, 0x98, 0x84, + 0x6c, 0x98, 0xc2, 0x0b, 0x81, 0x7d, 0x00, 0x3c, + 0x4d, 0xe5, 0x6e, 0xde, 0x74, 0xad, 0x93, 0x1c, + 0xfe, 0xb6, 0x47, 0x0e, 0x9f, 0x4a, 0x62, 0x69, + 0xd8, 0xe4, 0xf4, 0x78, 0xb8, 0x98, 0x7f, 0x16, + 0xe1, 0xc6, 0x47, 0xf7, 0x89, 0xf1, 0x7d, 0xe5, + 0xb5, 0x5f, 0x11, 0x46, 0xd8, 0xe3, 0x6c, 0x6c, + 0x14, 0x6b, 0x40, 0x0d, 0x1d, 0xc0, 0xbe, 0xd5, + 0x9d, 0xe0, 0x8b, 0xca, 0x79, 0xe3, 0x82, 0x33, + 0x24, 0x8e, 0x0d, 0x60, 0xde, 0x4a, 0x98, 0xa6, + 0x12, 0xc6, 0xd9, 0x1b, 0xb5, 0xae, 0xda, 0x0a, + 0x2d, 0x4d, 0x79, 0xab, 0x65, 0xd5, 0xbd, 0x11, + 0x11, 0x10, 0x5a, 0xb9, 0xf4, 0xe6, 0x26, 0xe2, + 0x67, 0x4d, 0x2c, 0x20, 0xc8, 0xed, 0xae, 0x35, + 0x5b, 0x44, 0x41, 0xa8, 0xf5, 0x5b, 0x0d, 0xd8, + 0x0e, 0x95, 0x3e, 0xac, 0x61, 0xc7, 0xfe, 0x8f, + 0x7d, 0x6d, 0x91, 0x06, 0xa3, 0xd5, 0x6c, 0x2d, + 0x6b, 0xd4, 0x0e, 0x94, 0xf5, 0x5f, 0x0d, 0xd8, + 0x0e, 0x95, 0xb7, 0x44, 0x1a, 0x8f, 0x55, 0xb0, + 0xdd, 0x80, 0xe9, 0x53, 0xea, 0xbe, 0x1e, 0x94, + 0xea, 0x3d, 0xf5, 0xb6, 0x44, 0x1a, 0x8f, 0x55, + 0xf0, 0xdd, 0x80, 0xe9, 0x4f, 0x55, 0xb0, 0xdd, + 0x80, 0xe9, 0x5b, 0x74, 0x41, 0xa8, 0xf5, 0x5b, + 0x0d, 0xd8, 0x0e, 0x94, 0xf5, 0x5b, 0x0d, 0xd8, + 0x0e, 0x95, 0xb7, 0x44, 0x1a, 0xb8, 0xb4, 0xde, + 0x26, 0x19, 0x04, 0x8c, 0x80, 0x71, 0x37, 0x75, + 0x76, 0xad, 0x9b, 0x40, 0x68, 0xa0, 0xd8, 0x06, + 0xe0, 0xa5, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x05, + 0x57, 0xda, 0x16, 0x9c, 0x8f, 0x37, 0x82, 0x95, + 0xcd, 0x6d, 0x6e, 0xad, 0x41, 0x92, 0x22, 0x06, + 0xdd, 0x9c, 0x8b, 0x82, 0x90, 0xe6, 0x92, 0xd7, + 0x0a, 0x39, 0xa6, 0x84, 0x1e, 0x70, 0xbf, 0x51, + 0x39, 0xa1, 0xcd, 0x2d, 0x3b, 0x41, 0xd8, 0x42, + 0xe1, 0x7e, 0xd2, 0xb4, 0xdb, 0x70, 0xb9, 0xa3, + 0x3c, 0x2d, 0xa5, 0xad, 0xe5, 0x5e, 0xda, 0x6e, + 0x0e, 0xe6, 0x41, 0x51, 0x42, 0x9c, 0x9d, 0xd4, + 0x41, 0x14, 0x52, 0x89, 0xf0, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x7c, 0x08, 0x08, 0x88, 0x81, 0xc9, + 0x5f, 0x79, 0x13, 0xe1, 0xe6, 0x44, 0x04, 0xee, + 0x22, 0x7c, 0x1c, 0xe8, 0x08, 0x02, 0x22, 0x01, + 0xe4, 0x5b, 0xb8, 0x3f, 0x91, 0x1f, 0xcd, 0x5a, + 0x43, 0xc8, 0xb7, 0x50, 0xff, 0x00, 0x25, 0x9d, + 0xe5, 0x61, 0x25, 0xf7, 0x55, 0x04, 0xa8, 0xaa, + 0x55, 0x50, 0xaa, 0x82, 0x51, 0x45, 0x42, 0x80, + 0x4a, 0xc9, 0xc6, 0xe3, 0xae, 0xb2, 0x97, 0xb1, + 0x58, 0xda, 0x8a, 0xcb, 0x29, 0xa5, 0x79, 0x00, + 0xe5, 0x25, 0x67, 0x59, 0x69, 0x2c, 0xd5, 0xfe, + 0x36, 0x4c, 0x9d, 0xbc, 0x5c, 0x50, 0xb0, 0x55, + 0xad, 0xfd, 0xa7, 0x0f, 0xf6, 0x85, 0xed, 0xa1, + 0xb2, 0xb6, 0xd8, 0x9d, 0x42, 0x1f, 0x7c, 0x0c, + 0x6d, 0x95, 0xa6, 0x17, 0x17, 0x6c, 0xe0, 0x27, + 0x66, 0xd4, 0x19, 0xf7, 0x58, 0x5d, 0x1d, 0x8a, + 0x8a, 0x5b, 0x0b, 0xdb, 0xf7, 0x4b, 0x91, 0x70, + 0xd9, 0x33, 0x40, 0xa4, 0x6e, 0x1f, 0xb2, 0x68, + 0x55, 0x46, 0x4e, 0x01, 0x23, 0xda, 0xc7, 0xf5, + 0x8d, 0x69, 0x34, 0x78, 0xe5, 0x1c, 0xeb, 0xa6, + 0x8d, 0x0b, 0xa4, 0xe0, 0xb8, 0x97, 0x23, 0x7b, + 0x78, 0x26, 0x8a, 0x57, 0x19, 0x38, 0x5e, 0x40, + 0x1b, 0x76, 0xef, 0xaa, 0xf3, 0xbc, 0xc0, 0xe8, + 0xfd, 0x43, 0x63, 0x71, 0x0e, 0x08, 0xb6, 0x3b, + 0xeb, 0x46, 0xf1, 0x34, 0xb4, 0xf3, 0x77, 0x2b, + 0xca, 0x83, 0x99, 0xd5, 0x0a, 0x82, 0x08, 0x25, + 0xae, 0xa8, 0x2d, 0x24, 0x1e, 0xf8, 0x50, 0x4a, + 0x05, 0x54, 0x56, 0xbb, 0x11, 0xa0, 0xb9, 0xed, + 0x8d, 0x80, 0xba, 0x47, 0x7c, 0x56, 0x8d, 0xe5, + 0x5c, 0x74, 0xe7, 0xb3, 0x89, 0xb3, 0x16, 0x0f, + 0xbb, 0x9e, 0xe5, 0xb1, 0x97, 0x0f, 0xe0, 0x31, + 0x9e, 0x35, 0x0f, 0xfb, 0x90, 0x57, 0xb4, 0xfe, + 0x20, 0xe6, 0xb2, 0xd0, 0xe3, 0x9b, 0x20, 0x88, + 0xcb, 0x52, 0x5e, 0x79, 0x86, 0xf0, 0xad, 0x39, + 0xc8, 0x6f, 0x74, 0x16, 0x5e, 0xd6, 0x7c, 0x6b, + 0x69, 0x8f, 0x91, 0xad, 0x6c, 0xb2, 0x10, 0x09, + 0x73, 0x87, 0xc6, 0x15, 0xa6, 0xca, 0xaa, 0xff, + 0x00, 0xa3, 0xf2, 0xba, 0x4f, 0x3f, 0x6b, 0x35, + 0xf4, 0x65, 0xad, 0x86, 0x61, 0x49, 0x5b, 0xf1, + 0x1c, 0xd3, 0xb3, 0x7a, 0xe9, 0x57, 0x8e, 0xb6, + 0xd4, 0x4e, 0xc8, 0x69, 0x9c, 0x95, 0x3c, 0xa1, + 0xad, 0x13, 0x5a, 0xbf, 0xe5, 0x31, 0xe3, 0xc5, + 0x70, 0xef, 0x20, 0xd6, 0x67, 0x34, 0xbe, 0x17, + 0x53, 0x75, 0x1a, 0x98, 0x4f, 0xd5, 0x5a, 0xf5, + 0x7c, 0x77, 0x9c, 0x3b, 0x49, 0x03, 0x93, 0xb8, + 0xa9, 0x5a, 0xaf, 0x35, 0x87, 0xca, 0xba, 0x08, + 0x31, 0x96, 0xdd, 0x41, 0xb3, 0xe1, 0x86, 0x09, + 0xea, 0x6a, 0xf6, 0x8d, 0x82, 0xab, 0x73, 0xa4, + 0x32, 0xd3, 0x69, 0xdc, 0xcc, 0xda, 0x5f, 0x34, + 0x0b, 0xac, 0xee, 0x1c, 0x58, 0xd0, 0xed, 0xd5, + 0x26, 0x83, 0xdc, 0x2b, 0x2b, 0x23, 0xa7, 0xb4, + 0xae, 0x93, 0xbf, 0x9b, 0x25, 0x91, 0x9b, 0xca, + 0x89, 0x7f, 0x59, 0x65, 0x60, 0xda, 0x12, 0x09, + 0xda, 0x2b, 0x42, 0x83, 0xca, 0x6b, 0x3f, 0x4d, + 0x60, 0xe4, 0xb0, 0xcd, 0x48, 0xdb, 0x5c, 0x96, + 0x1d, 0xad, 0x31, 0xdd, 0x3b, 0x73, 0xe3, 0x78, + 0xf1, 0x5a, 0x6b, 0xdc, 0x5c, 0xfe, 0x46, 0x86, + 0x48, 0x78, 0x1d, 0x5e, 0x12, 0x78, 0x5e, 0x36, + 0x54, 0x0e, 0x55, 0xb0, 0xcf, 0x67, 0xaf, 0x33, + 0x99, 0x09, 0xaf, 0x66, 0xfe, 0x13, 0x64, 0xa0, + 0x10, 0xb3, 0x63, 0x68, 0xdd, 0x8d, 0xa8, 0xe5, + 0x5a, 0xb2, 0x69, 0xb1, 0x0a, 0x49, 0x24, 0xed, + 0xad, 0x49, 0xde, 0x4e, 0xd3, 0x55, 0xf2, 0x49, + 0x51, 0x5a, 0x28, 0xe2, 0x49, 0x21, 0x24, 0x95, + 0xf3, 0x52, 0x85, 0x7d, 0xdb, 0xdb, 0x5c, 0xdd, + 0xcc, 0xd8, 0x2d, 0x63, 0x74, 0xd3, 0x3c, 0xd1, + 0xac, 0x68, 0xa9, 0x25, 0x15, 0xe7, 0xb4, 0x90, + 0x06, 0xda, 0x9a, 0x0a, 0x73, 0xab, 0xce, 0x8d, + 0xf6, 0x6b, 0x7b, 0x96, 0x74, 0x77, 0xb9, 0x56, + 0x98, 0x2c, 0x89, 0xa8, 0x8c, 0xd7, 0x89, 0xca, + 0xc5, 0xa2, 0x3d, 0x99, 0x41, 0x68, 0xd8, 0xf2, + 0x39, 0xa6, 0x75, 0x97, 0x27, 0x6b, 0x2d, 0xce, + 0xe6, 0x77, 0xd7, 0x46, 0x6b, 0x1a, 0xc6, 0x86, + 0xb0, 0x06, 0xb5, 0xa2, 0x80, 0x05, 0x06, 0x36, + 0x3b, 0x1b, 0x67, 0x8c, 0xb6, 0x6d, 0xad, 0x94, + 0x42, 0x28, 0x98, 0x00, 0x0d, 0x1d, 0xce, 0x75, + 0x96, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x35, 0x9a, 0x8a, 0xe6, 0x6b, 0x6c, + 0x44, 0xf3, 0x42, 0x68, 0xf6, 0xb7, 0x61, 0x54, + 0x68, 0x34, 0xee, 0x67, 0x27, 0x13, 0x6f, 0x1c, + 0xe3, 0x20, 0x93, 0x6e, 0xd3, 0x5d, 0xea, 0xe9, + 0xaa, 0xbe, 0xe4, 0xb8, 0xf9, 0xaa, 0xad, 0x7b, + 0x99, 0xbe, 0xc6, 0x62, 0x31, 0xe2, 0xd5, 0xfc, + 0x22, 0x46, 0x12, 0xee, 0xed, 0x10, 0x7d, 0xb3, + 0x01, 0xa8, 0xe2, 0x6f, 0x04, 0x6e, 0x0c, 0x68, + 0xdc, 0x05, 0x3c, 0x0a, 0x7d, 0x0b, 0xaa, 0x3b, + 0x4f, 0xf1, 0xd0, 0xab, 0xae, 0xd7, 0x39, 0xe1, + 0xa8, 0x21, 0xb3, 0xeb, 0x7f, 0x82, 0xf0, 0x09, + 0x1d, 0xf0, 0xb3, 0xef, 0x35, 0x7e, 0x66, 0x2b, + 0x39, 0x24, 0x6c, 0x9e, 0x33, 0x58, 0xe7, 0x03, + 0xb3, 0x78, 0x28, 0x36, 0x9e, 0x85, 0xd5, 0x1f, + 0x2d, 0x41, 0xc2, 0x6a, 0x83, 0xb3, 0x8d, 0x56, + 0x74, 0xe6, 0xbc, 0xd4, 0x17, 0x92, 0xb5, 0xb3, + 0xcb, 0xc4, 0x0b, 0xa8, 0xb7, 0x4c, 0xd5, 0x59, + 0x63, 0x14, 0x64, 0xc9, 0xb5, 0xc6, 0x87, 0xff, + 0x00, 0x22, 0x10, 0x78, 0xdf, 0x41, 0x96, 0x8e, + 0xe5, 0xb6, 0x37, 0x72, 0xd0, 0x91, 0x5a, 0x0e, + 0x65, 0xeb, 0x05, 0x9c, 0x10, 0x6e, 0x15, 0x77, + 0x39, 0x59, 0x99, 0xf2, 0x5d, 0x9c, 0x85, 0xc7, + 0x7b, 0xa2, 0x69, 0x3e, 0xe8, 0x5e, 0x44, 0x6d, + 0x41, 0x15, 0x58, 0xd9, 0x1f, 0xfa, 0xa7, 0xbe, + 0x16, 0x55, 0x16, 0x2e, 0x47, 0xfe, 0xa9, 0xef, + 0x84, 0x1b, 0x46, 0xfd, 0xf5, 0x8a, 0x1f, 0x42, + 0xae, 0x05, 0xce, 0x07, 0x7a, 0xa7, 0xb4, 0x8f, + 0x4d, 0xe2, 0x89, 0xd8, 0x04, 0x22, 0xa5, 0x6f, + 0x32, 0x7a, 0x87, 0x1b, 0x60, 0x0f, 0x13, 0xc4, + 0x92, 0x0d, 0xcd, 0x6a, 0xb0, 0x36, 0x75, 0x27, + 0x69, 0xe9, 0x2b, 0x0a, 0xfb, 0x37, 0x63, 0x60, + 0xd2, 0xe9, 0xa5, 0x04, 0x8d, 0xcd, 0x07, 0x7a, + 0xac, 0xcd, 0x97, 0xcd, 0xe6, 0x1f, 0xc1, 0x6a, + 0xd3, 0x04, 0x3f, 0x28, 0xf3, 0x2f, 0x5b, 0x5d, + 0x3d, 0x18, 0x77, 0x5d, 0x79, 0x21, 0x9a, 0x43, + 0xbc, 0x13, 0x50, 0x83, 0xd6, 0x4d, 0x72, 0xf2, + 0xe3, 0xd5, 0x5b, 0x39, 0xcc, 0xe4, 0x3b, 0x57, + 0x8c, 0xfa, 0xca, 0x69, 0xed, 0xe4, 0x84, 0xda, + 0xbb, 0xf8, 0x8d, 0x2d, 0xaf, 0x7d, 0x6d, 0x1b, + 0x6d, 0x6e, 0xc6, 0xf0, 0xb1, 0x8d, 0x00, 0x72, + 0x50, 0x2f, 0xae, 0xa6, 0x1a, 0x53, 0x85, 0xbd, + 0x01, 0x05, 0x1b, 0xac, 0x9f, 0xab, 0x63, 0x3a, + 0xa7, 0x78, 0x8f, 0xe3, 0xdc, 0xac, 0xb1, 0xeb, + 0x29, 0x99, 0x13, 0x19, 0xe4, 0x8e, 0x3c, 0x20, + 0x37, 0xa1, 0x6c, 0x5c, 0xdb, 0x66, 0x0e, 0x27, + 0x86, 0x35, 0xbc, 0xa4, 0xd1, 0x6a, 0x2f, 0xb3, + 0xd6, 0x30, 0x13, 0x1d, 0xb4, 0x62, 0x59, 0x07, + 0x28, 0x08, 0x3d, 0xce, 0xb6, 0x95, 0xbb, 0x5d, + 0x6a, 0x5a, 0x07, 0x3d, 0x42, 0xf9, 0xf5, 0xf4, + 0x76, 0x0b, 0x4d, 0x23, 0xaf, 0xaf, 0xc9, 0x74, + 0xb4, 0x8a, 0x33, 0xfb, 0x34, 0x0b, 0xe2, 0xea, + 0xce, 0x28, 0x2d, 0x1c, 0x46, 0xd7, 0x73, 0xa0, + 0xe8, 0x76, 0x77, 0x1e, 0x55, 0x69, 0x1d, 0xcd, + 0x29, 0xd6, 0x0a, 0xd1, 0x7b, 0x8d, 0xe1, 0x60, + 0xe1, 0x7e, 0xe9, 0xb6, 0xf9, 0x81, 0x67, 0x0d, + 0xe1, 0x05, 0x1f, 0x35, 0xf9, 0x92, 0x4e, 0xf2, + 0x82, 0xa7, 0x33, 0xf9, 0x8e, 0x4e, 0xf2, 0x8a, + 0x20, 0x85, 0x8d, 0x91, 0xff, 0x00, 0xa8, 0xf5, + 0x95, 0x45, 0x8b, 0x91, 0x1f, 0xf1, 0x1e, 0x82, + 0xc7, 0x89, 0xd4, 0xd8, 0xfb, 0x7c, 0x75, 0xbc, + 0x32, 0x02, 0x1c, 0xc6, 0x80, 0x56, 0x6f, 0xad, + 0xb8, 0xbe, 0x73, 0xd0, 0x98, 0x4c, 0x55, 0x84, + 0xb8, 0xab, 0x77, 0xbe, 0x16, 0x97, 0x39, 0xa0, + 0x92, 0xb3, 0xbd, 0x0d, 0x8c, 0xec, 0x1a, 0x83, + 0x07, 0xd6, 0xdc, 0x5f, 0x39, 0xe8, 0x4f, 0x5b, + 0x31, 0x7c, 0xe5, 0x67, 0x7a, 0x1b, 0x19, 0xd8, + 0x37, 0xa1, 0x61, 0xe4, 0x61, 0xc0, 0xe3, 0xe2, + 0x32, 0xdc, 0x44, 0xda, 0xf2, 0x37, 0x94, 0xa0, + 0x8f, 0x5a, 0xf1, 0x5f, 0x28, 0x85, 0x81, 0x7f, + 0x9d, 0xb9, 0xca, 0x3c, 0x58, 0xe2, 0x5a, 0x68, + 0xfd, 0x8f, 0x97, 0xfd, 0x56, 0x15, 0xb6, 0x25, + 0xf9, 0xdb, 0x9e, 0xb9, 0xb1, 0x79, 0x35, 0xa3, + 0x77, 0x6c, 0xde, 0xad, 0xb6, 0x18, 0xdb, 0x5b, + 0x18, 0x84, 0x70, 0x30, 0x36, 0x9b, 0xcf, 0x29, + 0x28, 0x30, 0x30, 0xfa, 0x72, 0xde, 0xc7, 0xf8, + 0xd3, 0xff, 0x00, 0x1a, 0xe9, 0xdb, 0x4b, 0xdd, + 0xb6, 0x85, 0x6e, 0x51, 0x4a, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, + 0xa7, 0x9b, 0xfc, 0xd3, 0x63, 0xdf, 0x8f, 0xf7, + 0x95, 0xac, 0x72, 0xaa, 0xa6, 0x6f, 0xf3, 0x4d, + 0x8f, 0x7e, 0x3f, 0xde, 0x56, 0xb4, 0x12, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0xa7, + 0xaa, 0xfe, 0xfa, 0xc7, 0xf7, 0x9b, 0xfd, 0xc0, + 0xad, 0x8a, 0xa7, 0xaa, 0xfe, 0xfa, 0xc7, 0xf7, + 0x9b, 0xfd, 0xc0, 0x82, 0xd7, 0xca, 0xa5, 0x47, + 0x2a, 0x94, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x45, 0x15, 0x41, 0x28, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0xa2, 0xaa, 0x57, 0xc1, 0xde, 0x83, + 0x45, 0xa9, 0x0b, 0xee, 0x6e, 0x2d, 0x31, 0xcc, + 0x34, 0x13, 0xbe, 0xaf, 0xa7, 0xc9, 0x01, 0x67, + 0xde, 0xdd, 0x0c, 0x7d, 0xac, 0x6c, 0x85, 0xb5, + 0x75, 0x43, 0x23, 0x67, 0xbc, 0xb5, 0xf3, 0x78, + 0xfa, 0xa6, 0x16, 0x9d, 0xd1, 0xc7, 0x51, 0xd0, + 0x56, 0x46, 0x49, 0xc1, 0xf9, 0x6b, 0x18, 0x4e, + 0xea, 0x97, 0x15, 0xce, 0xff, 0x00, 0x54, 0xf5, + 0xf2, 0xbd, 0xde, 0x58, 0x9f, 0xfa, 0xf8, 0x4c, + 0x7e, 0x58, 0xd2, 0x9d, 0x5c, 0xa3, 0x9c, 0xcd, + 0xcb, 0x68, 0xc9, 0x47, 0x0b, 0x43, 0xc8, 0x6b, + 0xdc, 0x07, 0x8b, 0x55, 0xe8, 0x16, 0xae, 0xa6, + 0x5c, 0xc9, 0x61, 0x3e, 0x2c, 0x2c, 0xad, 0x3b, + 0xa5, 0x7b, 0xdc, 0x65, 0xb1, 0xd6, 0x92, 0x75, + 0x57, 0x13, 0xb2, 0x37, 0xf3, 0x38, 0xd1, 0x6e, + 0x26, 0xef, 0xa4, 0xd3, 0xc9, 0x9e, 0x1e, 0x5f, + 0x2f, 0xf3, 0x63, 0x19, 0x7b, 0xd9, 0xc8, 0xbe, + 0x22, 0x96, 0x39, 0x63, 0x6c, 0x91, 0xb8, 0x39, + 0x8e, 0x15, 0x6b, 0x86, 0xe2, 0xbe, 0xd5, 0x60, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x05, 0x5d, 0xd7, 0x1a, 0x72, + 0x3c, 0xfe, 0x12, 0x58, 0x00, 0x1e, 0x51, 0x08, + 0x32, 0x40, 0xee, 0x67, 0x01, 0xb9, 0x58, 0x94, + 0x11, 0x50, 0x83, 0xf2, 0xeb, 0x98, 0xe6, 0x3d, + 0xd1, 0xbc, 0x70, 0xbd, 0x84, 0xb4, 0x83, 0xbe, + 0xa1, 0x42, 0xbb, 0xfb, 0x52, 0xd3, 0x2d, 0xc5, + 0x65, 0x86, 0x42, 0xdd, 0xbc, 0x36, 0xd7, 0x86, + 0xa6, 0x9b, 0x83, 0xb9, 0x55, 0x21, 0x01, 0x3f, + 0xc5, 0x11, 0x10, 0x11, 0x11, 0x01, 0x3f, 0xc5, + 0x11, 0x3b, 0xfb, 0xd0, 0x11, 0x2a, 0x88, 0x1d, + 0xcf, 0x7d, 0x11, 0x10, 0x13, 0xfc, 0x51, 0x13, + 0xbd, 0xbd, 0x01, 0x11, 0x10, 0x0f, 0x22, 0xdc, + 0x45, 0xfc, 0x96, 0x77, 0x96, 0x9c, 0x8d, 0xcb, + 0x6d, 0x1b, 0x9a, 0xd8, 0xe3, 0x04, 0xed, 0xe1, + 0xdc, 0xaa, 0x4b, 0xd1, 0x41, 0x42, 0x79, 0x69, + 0xb2, 0x95, 0x59, 0x98, 0xbc, 0x5b, 0x2f, 0xae, + 0xa3, 0x8e, 0xee, 0x76, 0xd8, 0xdb, 0x3f, 0xff, + 0x00, 0x7c, 0xa7, 0x84, 0x1f, 0x9b, 0x54, 0x18, + 0x91, 0x44, 0xf9, 0xe5, 0x6c, 0x31, 0xd3, 0x8d, + 0xe4, 0x34, 0x54, 0xf2, 0x95, 0xb5, 0xd4, 0x1a, + 0x78, 0xe0, 0xa0, 0xb4, 0x13, 0x4a, 0x24, 0xb9, + 0xba, 0x05, 0xee, 0x0d, 0xda, 0xd0, 0xde, 0x4a, + 0x2b, 0x6e, 0x63, 0xd9, 0xe4, 0x37, 0x18, 0xcb, + 0x77, 0x69, 0xe9, 0x98, 0xf3, 0x05, 0x5c, 0x5d, + 0x5f, 0xe6, 0x12, 0x37, 0xf1, 0x2d, 0x2e, 0xbe, + 0x82, 0xe6, 0xde, 0xdf, 0x0a, 0x2e, 0x58, 0x5a, + 0xf8, 0xe0, 0x2c, 0x96, 0xbc, 0x87, 0x6a, 0x0d, + 0xae, 0x99, 0xd4, 0xf7, 0x18, 0xed, 0x1a, 0x6e, + 0x23, 0x67, 0x5d, 0xe4, 0x12, 0x81, 0x3b, 0x3e, + 0x8c, 0xac, 0xbc, 0xae, 0x9c, 0xc3, 0x6b, 0x2c, + 0x77, 0xa5, 0xf0, 0x8e, 0x11, 0x5e, 0x52, 0xa4, + 0x0d, 0x80, 0xbb, 0x99, 0xca, 0xbf, 0xec, 0xf1, + 0xf6, 0xd7, 0x52, 0xdf, 0x61, 0xee, 0xbc, 0x6b, + 0x7b, 0xb8, 0x89, 0x23, 0x9e, 0x83, 0x91, 0x7c, + 0xdd, 0x6b, 0xb9, 0xec, 0x2e, 0x19, 0x67, 0x80, + 0x88, 0x59, 0xd8, 0xda, 0x49, 0xc0, 0xe6, 0x10, + 0x2a, 0xfd, 0xbb, 0x78, 0x90, 0x62, 0x58, 0xe9, + 0x2c, 0xbe, 0x46, 0x49, 0x71, 0xef, 0xba, 0x10, + 0x5e, 0xc0, 0xea, 0x1b, 0x59, 0xde, 0x5b, 0x51, + 0xf2, 0x9b, 0xbf, 0x62, 0xdd, 0xd9, 0x41, 0x8d, + 0xd0, 0xd6, 0x97, 0x37, 0x73, 0x5d, 0x32, 0xe7, + 0x2b, 0x72, 0xc3, 0x14, 0x70, 0xc4, 0x78, 0x83, + 0x68, 0x3f, 0xd5, 0x79, 0xea, 0xad, 0x75, 0x69, + 0x74, 0xc6, 0x33, 0x1d, 0x10, 0xf2, 0xc2, 0xc1, + 0xd6, 0x5d, 0x0d, 0x84, 0x13, 0xbc, 0x0a, 0x6f, + 0x54, 0x49, 0x1e, 0xe7, 0xbc, 0xcb, 0x2b, 0x8b, + 0x9c, 0x77, 0x97, 0x12, 0x76, 0xfb, 0xa8, 0x24, + 0xb8, 0x97, 0x12, 0xef, 0x8c, 0xe2, 0x49, 0xf7, + 0x57, 0xdd, 0xbd, 0xad, 0xcd, 0xd0, 0x91, 0xd6, + 0xf1, 0x97, 0xb2, 0x16, 0xf1, 0x4a, 0xfe, 0x46, + 0x8e, 0xe9, 0x5b, 0x2c, 0x6e, 0x92, 0xd4, 0x59, + 0x48, 0x7a, 0xfb, 0x4b, 0x67, 0x18, 0x7f, 0x65, + 0xee, 0x04, 0x57, 0xbc, 0xae, 0x7a, 0x46, 0xee, + 0xd6, 0x58, 0xee, 0x74, 0x8e, 0x52, 0xd1, 0xb6, + 0x37, 0x2e, 0x61, 0x68, 0x3f, 0xb5, 0x25, 0x7f, + 0x6a, 0xa5, 0x05, 0x5b, 0x45, 0xe6, 0xb1, 0x98, + 0xec, 0x8b, 0x19, 0x90, 0xb6, 0x6c, 0x8c, 0xb8, + 0x3c, 0x1e, 0x52, 0xed, 0xf1, 0xd7, 0x96, 0x87, + 0x62, 0xda, 0xd9, 0x5d, 0x5d, 0x68, 0xbd, 0x4d, + 0x25, 0x9d, 0xc4, 0x8e, 0x7e, 0x2e, 0xff, 0x00, + 0x6c, 0x73, 0x56, 0xad, 0xe1, 0x7f, 0xc5, 0x23, + 0xbc, 0xaa, 0xba, 0x83, 0x0d, 0x71, 0x85, 0xc9, + 0xcd, 0x8f, 0xb8, 0x07, 0xc4, 0x3c, 0x51, 0xbb, + 0x90, 0xb6, 0xbb, 0xc2, 0xb3, 0x62, 0xa7, 0x8f, + 0x56, 0xe9, 0xc9, 0x70, 0x97, 0x66, 0xb9, 0x2c, + 0x7b, 0x4c, 0xb6, 0x52, 0xf2, 0x96, 0x0d, 0xbc, + 0x28, 0x2c, 0x57, 0x59, 0xdb, 0x01, 0x73, 0xe8, + 0x0d, 0x52, 0xc6, 0xba, 0xda, 0x71, 0x5b, 0x2b, + 0xfd, 0x9c, 0x2e, 0x69, 0xda, 0xd2, 0x5d, 0xb2, + 0x94, 0x5a, 0xdd, 0x7f, 0x1b, 0xf0, 0x97, 0x78, + 0x6c, 0xe6, 0x2d, 0xe5, 0xcc, 0x8d, 0xa2, 0x1e, + 0xb0, 0x1a, 0xf1, 0x34, 0x7c, 0x4a, 0x9e, 0x5a, + 0x85, 0xab, 0xc3, 0x3e, 0xdb, 0x52, 0x69, 0xdb, + 0x9c, 0x66, 0x66, 0x61, 0x6f, 0x3e, 0x2b, 0x6c, + 0x37, 0x4e, 0xdf, 0x41, 0xfb, 0x3b, 0x7b, 0xca, + 0xb3, 0x71, 0x97, 0xbd, 0xf2, 0x27, 0xe2, 0x0d, + 0xc7, 0x94, 0x58, 0xb6, 0x40, 0xe8, 0xcb, 0xb6, + 0xee, 0xae, 0xd6, 0x95, 0x15, 0x6e, 0xd7, 0x5a, + 0x93, 0x4f, 0xde, 0xf9, 0x24, 0xf6, 0xf1, 0xf1, + 0xe6, 0x1a, 0xd6, 0xbc, 0xca, 0xc3, 0xe2, 0xb0, + 0xf3, 0x1e, 0xea, 0xa3, 0x5e, 0x5f, 0x5d, 0x5f, + 0x5c, 0x3e, 0xe6, 0xf2, 0x53, 0x2c, 0xaf, 0x35, + 0x25, 0xdf, 0xe4, 0xbc, 0x09, 0xdb, 0x53, 0xb4, + 0x9e, 0x55, 0xf2, 0x4a, 0x0f, 0xa2, 0x57, 0xc9, + 0x28, 0x4a, 0xf9, 0x25, 0x5b, 0x02, 0xbe, 0x6a, + 0x39, 0x50, 0x9a, 0x2b, 0x4e, 0x8a, 0xd0, 0xb7, + 0xba, 0x8a, 0xe5, 0xb3, 0xcc, 0x0c, 0x38, 0xe6, + 0x9a, 0xbe, 0x42, 0x36, 0xba, 0x9c, 0x8d, 0x50, + 0x6a, 0x70, 0x3a, 0x77, 0x27, 0x9f, 0xba, 0x6d, + 0xb5, 0x8c, 0x45, 0xcd, 0xad, 0x25, 0x9a, 0x9e, + 0x2b, 0x07, 0x74, 0xae, 0xd7, 0xa4, 0xf4, 0x3e, + 0x33, 0x4e, 0xc2, 0x1c, 0xd1, 0xd7, 0xde, 0x11, + 0xe3, 0xce, 0xe0, 0x2b, 0x5e, 0xe0, 0x5b, 0x9c, + 0x56, 0x22, 0xc3, 0x13, 0x6a, 0xcb, 0x5b, 0x28, + 0x9b, 0x1c, 0x6c, 0x14, 0xa8, 0x1b, 0x4f, 0x74, + 0x95, 0x9a, 0x82, 0x14, 0xa2, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0xd3, 0xea, 0xaf, 0xb9, 0x2e, 0x3e, 0x6a, 0xa2, + 0x66, 0xe7, 0x86, 0x5c, 0x66, 0x39, 0xb1, 0xb8, + 0x39, 0xcc, 0x8d, 0xc1, 0xcd, 0x07, 0x71, 0xda, + 0xaf, 0x7a, 0xab, 0xee, 0x5b, 0x8f, 0x9a, 0xb9, + 0xf6, 0x4f, 0x1b, 0x15, 0xa5, 0x8d, 0x9c, 0xec, + 0x71, 0x2e, 0xb8, 0x61, 0x73, 0x81, 0xe4, 0xa7, + 0x32, 0xce, 0x53, 0x96, 0xcf, 0x2c, 0x44, 0xfb, + 0x5e, 0x8f, 0x4f, 0x87, 0xa5, 0xca, 0x32, 0x9f, + 0x51, 0xa9, 0x96, 0x15, 0xba, 0x31, 0xc6, 0x65, + 0x5c, 0x7c, 0x52, 0x1d, 0x4f, 0x0c, 0xc1, 0xbf, + 0xc3, 0x6b, 0x5b, 0x57, 0xf2, 0x6e, 0x5b, 0x3b, + 0xfa, 0x3e, 0xc2, 0x56, 0x8d, 0xae, 0x31, 0x38, + 0x00, 0x39, 0xea, 0x56, 0x0b, 0xaf, 0x1e, 0x33, + 0x91, 0x58, 0x00, 0x3a, 0xb7, 0x80, 0x4b, 0xb9, + 0x76, 0x8a, 0xac, 0xcb, 0xb1, 0xd4, 0xda, 0xbe, + 0x56, 0x9a, 0x96, 0xc6, 0xe7, 0x0e, 0xf8, 0x59, + 0xbd, 0x6e, 0x50, 0xf4, 0x7d, 0x9f, 0xdb, 0x7f, + 0xbf, 0xa9, 0xff, 0x00, 0x1f, 0xe2, 0xd4, 0xe9, + 0x58, 0x64, 0x86, 0x56, 0xba, 0x56, 0x96, 0x00, + 0xfa, 0xd4, 0xab, 0x04, 0x6f, 0x6f, 0x55, 0x10, + 0x27, 0x68, 0x71, 0xdf, 0xf3, 0x8a, 0xd2, 0xe0, + 0x6f, 0xe4, 0xc8, 0x48, 0x1b, 0x20, 0x0d, 0x05, + 0xd4, 0xd8, 0xb6, 0xed, 0x81, 0xaf, 0x89, 0x8e, + 0x24, 0xd5, 0xc6, 0x87, 0xa6, 0x89, 0x7a, 0xbc, + 0xa0, 0x8d, 0x1f, 0xdb, 0x6e, 0x23, 0xef, 0xea, + 0x6d, 0xdf, 0xfd, 0x39, 0x58, 0xf3, 0x52, 0x47, + 0x26, 0x5a, 0xd9, 0xf1, 0x9e, 0x26, 0x98, 0x5b, + 0xb4, 0x77, 0x94, 0x15, 0xf1, 0x93, 0xb6, 0x65, + 0xa6, 0x4a, 0xda, 0x06, 0x12, 0x40, 0x88, 0x1a, + 0x9e, 0xe8, 0x5f, 0x44, 0x6d, 0x2b, 0xa3, 0xc1, + 0x97, 0x97, 0xcd, 0x3e, 0x59, 0xbc, 0x6f, 0x64, + 0xf4, 0x42, 0xc6, 0xc8, 0xff, 0x00, 0xd5, 0x3d, + 0xf0, 0xb2, 0x80, 0x2b, 0x17, 0x25, 0x51, 0x6a, + 0x7b, 0xe1, 0x54, 0x7d, 0xe7, 0x9f, 0x2b, 0x66, + 0xc7, 0xf5, 0x4e, 0xe1, 0x7b, 0xa2, 0x6b, 0x6b, + 0xcd, 0x55, 0x92, 0x34, 0x45, 0xfc, 0xb4, 0x99, + 0xd2, 0xf1, 0x17, 0x0a, 0xd4, 0x9e, 0x75, 0x39, + 0xeb, 0x13, 0xe4, 0xf8, 0xbb, 0xea, 0xd4, 0x10, + 0xd6, 0x51, 0x5d, 0x21, 0x6b, 0xba, 0x88, 0xfe, + 0x68, 0xf8, 0x14, 0x15, 0x46, 0x69, 0x8c, 0xdb, + 0x07, 0x0b, 0x2e, 0x03, 0x47, 0x30, 0x53, 0xea, + 0xd6, 0x73, 0xce, 0x55, 0xb3, 0x85, 0xc9, 0xc2, + 0xe5, 0x45, 0x4b, 0xd5, 0xac, 0xef, 0x9c, 0xa9, + 0xf5, 0x6b, 0x3b, 0xe7, 0x2a, 0xd6, 0x6a, 0x39, + 0x54, 0xb4, 0xed, 0xde, 0x83, 0x9c, 0xdd, 0xc1, + 0x7c, 0xdb, 0xe7, 0x58, 0x5c, 0x4c, 0x4f, 0x00, + 0xa9, 0xa1, 0x5e, 0xd0, 0xd9, 0x41, 0x08, 0x1c, + 0x2d, 0xab, 0xb9, 0xca, 0xf5, 0xcb, 0x57, 0xd6, + 0x49, 0x7e, 0x68, 0xaa, 0xfa, 0x49, 0x0d, 0x94, + 0xd9, 0xb9, 0x62, 0xe4, 0xbf, 0xea, 0x3b, 0xbe, + 0x16, 0x55, 0x76, 0x2c, 0x6c, 0x97, 0xfd, 0x47, + 0x77, 0xd0, 0x5d, 0x30, 0xbf, 0x74, 0xdb, 0x7c, + 0xc0, 0xb3, 0x86, 0xf0, 0xb0, 0x70, 0xbf, 0x74, + 0xdb, 0x7c, 0xc0, 0xb3, 0x86, 0xf0, 0x90, 0x28, + 0xf9, 0xaf, 0xcc, 0x92, 0x77, 0x94, 0x26, 0x6b, + 0xf3, 0x1c, 0x9d, 0xe5, 0x08, 0x25, 0x63, 0x64, + 0xbf, 0xea, 0x3f, 0xdc, 0x5e, 0xef, 0x91, 0x8c, + 0x6f, 0x13, 0xcf, 0x08, 0xee, 0xac, 0x61, 0x15, + 0xde, 0x5e, 0x4f, 0x25, 0xb2, 0x61, 0x2c, 0x26, + 0x8e, 0x7d, 0x36, 0x20, 0xbd, 0xe0, 0x3e, 0xe7, + 0xb6, 0xf9, 0x81, 0x6c, 0x16, 0x25, 0x94, 0x4d, + 0xc7, 0x63, 0xa2, 0x8a, 0x67, 0x81, 0xd5, 0x36, + 0x8e, 0x71, 0x5a, 0x3c, 0x86, 0x76, 0xf3, 0x21, + 0x2f, 0x91, 0xe2, 0x1a, 0xe2, 0xd3, 0xb1, 0xd3, + 0x72, 0x28, 0x33, 0x72, 0xba, 0x92, 0x1b, 0x47, + 0xf9, 0x3d, 0xa8, 0xeb, 0xee, 0x4e, 0xc0, 0xd1, + 0xb7, 0x6a, 0xc4, 0xb1, 0xc0, 0x5c, 0xdf, 0xcc, + 0x2f, 0xf2, 0xae, 0x24, 0x93, 0xc4, 0xd8, 0xb9, + 0x02, 0xcf, 0xc3, 0x69, 0xdb, 0x7b, 0x11, 0xd7, + 0x4b, 0xfc, 0x6b, 0x97, 0x6d, 0x73, 0xdd, 0xb6, + 0x84, 0xad, 0xc5, 0x10, 0x7c, 0xc5, 0x14, 0x71, + 0x30, 0x32, 0x36, 0x86, 0xb4, 0x6e, 0x01, 0x7d, + 0xa2, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x0a, 0x9e, + 0x6f, 0xf3, 0x4d, 0x87, 0x7e, 0x3f, 0xde, 0x56, + 0xb1, 0xca, 0xaa, 0x99, 0xbf, 0xcd, 0x36, 0x3d, + 0xf8, 0xff, 0x00, 0x79, 0x5a, 0xd0, 0x4a, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x2a, 0x96, + 0xab, 0xfb, 0xeb, 0x1d, 0xde, 0x6f, 0xf7, 0x02, + 0xb6, 0xaa, 0x9e, 0xab, 0xfb, 0xeb, 0x1f, 0xde, + 0x6f, 0xf7, 0x02, 0x0b, 0x5f, 0x2a, 0x95, 0x1c, + 0xaa, 0x50, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x41, 0x20, 0x0a, + 0x93, 0x41, 0xce, 0x50, 0x10, 0x45, 0x46, 0xd0, + 0x80, 0xa0, 0x9a, 0x0e, 0xf2, 0x95, 0xab, 0x92, + 0xee, 0x78, 0x73, 0x0d, 0x82, 0x43, 0x58, 0x27, + 0x6f, 0x88, 0x39, 0x9c, 0x14, 0x99, 0xaa, 0x6b, + 0x0c, 0x32, 0xce, 0xe3, 0x1d, 0xf1, 0x13, 0x97, + 0xb9, 0x99, 0x6f, 0x7d, 0x05, 0xc3, 0xe4, 0x64, + 0x6e, 0xab, 0xa2, 0x34, 0x70, 0xe5, 0x0b, 0x4d, + 0x93, 0xca, 0xdc, 0xe3, 0xb3, 0x96, 0xec, 0x94, + 0xff, 0x00, 0xc2, 0xb9, 0x1c, 0x15, 0xe6, 0x72, + 0xf8, 0x9a, 0xb8, 0xcd, 0x49, 0x1b, 0x98, 0x7f, + 0x85, 0x7c, 0x28, 0xf1, 0xfe, 0xe0, 0xbd, 0x35, + 0x8d, 0xa8, 0x9f, 0x0f, 0x24, 0xc0, 0x7f, 0x12, + 0xdc, 0xf5, 0x8c, 0x3d, 0xe5, 0x8c, 0xb2, 0x9f, + 0x2e, 0x53, 0x1b, 0x3c, 0xb2, 0xf6, 0x68, 0xe9, + 0x69, 0x63, 0xaf, 0xa5, 0x19, 0x7e, 0x6d, 0x2f, + 0x51, 0x8d, 0x5c, 0xef, 0xc6, 0x67, 0x67, 0x84, + 0xb7, 0xed, 0x35, 0xa1, 0xad, 0x45, 0x17, 0xd2, + 0xd6, 0xe9, 0xfb, 0xb3, 0x79, 0x8a, 0xb7, 0x9c, + 0xed, 0x71, 0x6d, 0x1c, 0x7b, 0xa3, 0x62, 0xd9, + 0x2e, 0x91, 0x37, 0x16, 0xf1, 0xea, 0x61, 0x3a, + 0x79, 0xe5, 0x86, 0x5b, 0xf0, 0xca, 0x71, 0x9e, + 0xe1, 0x11, 0x11, 0x91, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x17, 0xc9, 0x01, 0x7d, 0x2f, + 0x94, 0x1a, 0x1b, 0xbf, 0xe0, 0xea, 0x6b, 0x69, + 0x0e, 0xc1, 0x33, 0x4b, 0x07, 0x42, 0xf6, 0xc9, + 0x0e, 0x0c, 0xad, 0x94, 0xee, 0xf8, 0xa0, 0x90, + 0x4f, 0x7d, 0x7c, 0xea, 0x4b, 0x29, 0xe4, 0x8a, + 0x1b, 0xbb, 0x61, 0x59, 0xed, 0x5c, 0x1e, 0x07, + 0x38, 0xe5, 0x59, 0x53, 0xc0, 0xec, 0x8e, 0x3e, + 0x3a, 0x83, 0x1c, 0x9b, 0x1e, 0x39, 0xc1, 0x0b, + 0x9d, 0x4f, 0xe6, 0x8f, 0xf3, 0x3d, 0xbe, 0x7c, + 0x67, 0x1d, 0x0d, 0x4b, 0xff, 0x00, 0x04, 0xe8, + 0xe7, 0xd3, 0x7d, 0x4f, 0xb9, 0xe6, 0x2b, 0x1e, + 0x71, 0xe4, 0xee, 0x99, 0x80, 0x03, 0xde, 0x54, + 0x6d, 0x6c, 0xc1, 0x26, 0x7a, 0x6a, 0xfe, 0xcc, + 0x60, 0x80, 0x3b, 0xcb, 0xa3, 0xb6, 0xd9, 0xa7, + 0xab, 0x7c, 0x83, 0x8a, 0x58, 0xc6, 0xc7, 0x2e, + 0x75, 0xac, 0xfe, 0xfe, 0x9f, 0x9f, 0xab, 0x1f, + 0x02, 0xdc, 0x43, 0xcd, 0xa9, 0x94, 0x65, 0x38, + 0xff, 0x00, 0x2e, 0x31, 0x8f, 0xb9, 0x7a, 0xd3, + 0xbf, 0x72, 0xda, 0x7f, 0x4c, 0x2d, 0x9a, 0xd6, + 0x69, 0xdf, 0xb9, 0x6d, 0x3f, 0xa6, 0x16, 0xcd, + 0x57, 0x31, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x06, + 0x8f, 0x57, 0xe0, 0x21, 0xcf, 0x61, 0x66, 0xb5, + 0x70, 0xfe, 0x23, 0x41, 0x74, 0x4e, 0xe6, 0x70, + 0x5f, 0x9e, 0xe7, 0x86, 0x4b, 0x7b, 0x89, 0x2d, + 0xe5, 0x14, 0x92, 0x17, 0x16, 0x38, 0x77, 0x5b, + 0xb1, 0x7e, 0x9f, 0xee, 0xae, 0x33, 0xed, 0x5f, + 0x4c, 0x8c, 0x76, 0x44, 0x65, 0xad, 0x9b, 0x48, + 0x2f, 0x09, 0xeb, 0x40, 0x1b, 0x04, 0x9f, 0xea, + 0x82, 0x84, 0x4a, 0x26, 0xde, 0x5f, 0x71, 0x10, + 0x11, 0x3b, 0xe8, 0x80, 0x88, 0x9d, 0xed, 0xc8, + 0x14, 0x44, 0x44, 0x0f, 0x83, 0x99, 0x13, 0x97, + 0xba, 0x88, 0x15, 0x44, 0x44, 0x04, 0xaa, 0x2d, + 0xe6, 0x8c, 0xc3, 0xe3, 0xf3, 0x39, 0xc8, 0xed, + 0x32, 0x12, 0x18, 0xed, 0xc0, 0x2f, 0x75, 0x3f, + 0x6a, 0x9c, 0x88, 0x3c, 0x74, 0xfe, 0x98, 0xca, + 0xea, 0x0b, 0x96, 0xc3, 0x67, 0x0b, 0xba, 0xaa, + 0xf8, 0xf3, 0x91, 0xe2, 0xb4, 0x2b, 0xec, 0x90, + 0x69, 0x3d, 0x2f, 0x0f, 0xa2, 0x1f, 0x11, 0xc9, + 0xe4, 0xa5, 0x01, 0x93, 0x50, 0x56, 0x84, 0xf2, + 0x2f, 0x8b, 0x6f, 0x68, 0xf8, 0xec, 0x66, 0x62, + 0x1c, 0x4e, 0x2e, 0xd1, 0x90, 0xe2, 0x22, 0x7f, + 0x55, 0x24, 0xbb, 0x9c, 0x69, 0xb2, 0xab, 0xeb, + 0xda, 0x46, 0x00, 0x47, 0x24, 0x7a, 0x8e, 0xc0, + 0x93, 0x1c, 0xa0, 0x09, 0x8b, 0x77, 0xf7, 0x1c, + 0x83, 0xca, 0xdb, 0x47, 0xe3, 0x71, 0x76, 0xb2, + 0xe7, 0x73, 0x8d, 0x73, 0x2c, 0xa3, 0x3c, 0x70, + 0xda, 0x6d, 0xae, 0xdd, 0xa0, 0x15, 0xae, 0xc9, + 0xea, 0x59, 0xb5, 0x14, 0x52, 0xe3, 0xed, 0xb1, + 0xd1, 0x0b, 0x78, 0x98, 0x5f, 0x10, 0x61, 0x21, + 0xcd, 0x63, 0x45, 0x78, 0xaa, 0x39, 0x95, 0x83, + 0x43, 0xe6, 0x22, 0xcf, 0x62, 0xe6, 0xd3, 0xb9, + 0x67, 0x75, 0xb2, 0x39, 0xa4, 0xb1, 0xee, 0xda, + 0x4b, 0x4f, 0x81, 0x62, 0x64, 0xaf, 0xb1, 0x7a, + 0x18, 0xbb, 0x15, 0x8e, 0xb7, 0x33, 0xde, 0xca, + 0xdf, 0xe2, 0xdc, 0x4a, 0x36, 0x16, 0x1e, 0x41, + 0xbf, 0x91, 0x54, 0x55, 0x30, 0xda, 0x87, 0x2b, + 0x88, 0x95, 0xaf, 0xb2, 0xb8, 0x73, 0x59, 0x50, + 0x0c, 0x6e, 0x3c, 0x43, 0xa0, 0xae, 0x97, 0x99, + 0xd5, 0x38, 0x48, 0xee, 0xa0, 0xc5, 0xe7, 0x60, + 0x0e, 0x65, 0xc4, 0x0d, 0x93, 0xae, 0x22, 0xa2, + 0xae, 0xdf, 0xb5, 0x73, 0x5b, 0x4c, 0x4c, 0xf9, + 0x48, 0xaf, 0xb2, 0x36, 0xcc, 0x2c, 0x8e, 0xd8, + 0x87, 0xf0, 0x37, 0x68, 0x2e, 0x71, 0xdc, 0x09, + 0x5b, 0xaf, 0x68, 0x12, 0xe2, 0xa5, 0x92, 0xcb, + 0xab, 0xb8, 0x2f, 0xbf, 0x86, 0x06, 0x47, 0x2c, + 0x4d, 0x00, 0xb4, 0x6c, 0xae, 0xd3, 0xcf, 0xb5, + 0x06, 0xf6, 0xe7, 0x05, 0xa5, 0xf4, 0xd5, 0xec, + 0x1a, 0x8e, 0xde, 0xec, 0xc1, 0x05, 0x0b, 0x9b, + 0x6c, 0x28, 0x7a, 0xc0, 0x77, 0x06, 0xd5, 0x50, + 0x73, 0x99, 0x0b, 0x6c, 0x8e, 0x4a, 0x5b, 0xab, + 0x68, 0x05, 0xbc, 0x6f, 0x3b, 0x18, 0x39, 0x7b, + 0xa5, 0x63, 0x5d, 0x5e, 0xdd, 0x5e, 0x38, 0x3a, + 0xe6, 0x57, 0x49, 0xd5, 0x8e, 0x16, 0x34, 0xec, + 0x00, 0x0e, 0x40, 0x06, 0xc5, 0x91, 0x84, 0xc3, + 0x5e, 0xe7, 0x2f, 0x05, 0x9d, 0x9d, 0x2a, 0x05, + 0x5e, 0xf3, 0xfb, 0x2d, 0x41, 0x89, 0x04, 0x32, + 0xdc, 0x4c, 0xd8, 0x2d, 0xd8, 0x65, 0x96, 0x43, + 0xb1, 0x8d, 0xda, 0x49, 0x57, 0x5d, 0x0f, 0xa5, + 0xb1, 0x73, 0xe4, 0x5d, 0x1e, 0x61, 0xdf, 0xf3, + 0xa1, 0xf1, 0x99, 0x62, 0xed, 0x87, 0x67, 0x29, + 0x5b, 0xfc, 0x56, 0x02, 0xc7, 0x0d, 0x85, 0xba, + 0xb9, 0xc2, 0x3a, 0x3b, 0xec, 0xb5, 0xbb, 0x48, + 0x74, 0x86, 0x8e, 0xe1, 0x70, 0xdf, 0x41, 0xb5, + 0x73, 0xf9, 0x75, 0x8e, 0x6e, 0x4b, 0xdb, 0x7b, + 0xdb, 0x9e, 0x1f, 0x2d, 0xb4, 0x90, 0x9e, 0xb4, + 0x00, 0xd7, 0x16, 0xfe, 0xd3, 0x1d, 0xc2, 0x36, + 0xa0, 0xb0, 0xe6, 0x75, 0x86, 0xa6, 0xc7, 0x6a, + 0x9f, 0x21, 0x63, 0x7a, 0x8b, 0x78, 0xa4, 0x0c, + 0x86, 0xd5, 0x8d, 0x14, 0x73, 0x39, 0xc6, 0xe5, + 0xf7, 0xed, 0x42, 0xea, 0x4b, 0x4c, 0xc6, 0x3b, + 0x23, 0x6a, 0xd3, 0x1d, 0xdc, 0x0c, 0x12, 0x3d, + 0xe0, 0x6c, 0xae, 0xc3, 0xc2, 0x4a, 0xb4, 0xcf, + 0x7b, 0x8f, 0xca, 0xe1, 0x1b, 0xaa, 0xb1, 0xf6, + 0x8c, 0xbb, 0xc8, 0x43, 0x11, 0x11, 0xb5, 0xdb, + 0x4b, 0x5c, 0x37, 0x82, 0x3b, 0x8a, 0xbf, 0x85, + 0xf6, 0x8f, 0x8a, 0xca, 0x31, 0xd6, 0x7a, 0x92, + 0xd5, 0x8c, 0x7b, 0xea, 0xd3, 0x2d, 0x01, 0x1d, + 0xd0, 0x49, 0xdc, 0xa2, 0xb2, 0xaf, 0x6c, 0xac, + 0xbd, 0xa1, 0x60, 0x60, 0xbb, 0xb4, 0x91, 0x8c, + 0xca, 0xdb, 0x8a, 0x3c, 0x6e, 0xa9, 0xe5, 0x6b, + 0xbb, 0xeb, 0x57, 0x8a, 0xc3, 0xc5, 0xa1, 0xe1, + 0xb8, 0xcb, 0x66, 0x27, 0x63, 0xaf, 0xdf, 0x1b, + 0xa3, 0xb6, 0xb6, 0x61, 0xa9, 0xf1, 0x82, 0xd6, + 0xea, 0x79, 0x34, 0xb6, 0x2a, 0xaf, 0xd3, 0x53, + 0xc8, 0xcb, 0xa9, 0x5c, 0x09, 0xea, 0x9c, 0x4b, + 0x03, 0x76, 0xf1, 0x72, 0xaa, 0x8d, 0xcd, 0xd5, + 0xcd, 0xd3, 0xfa, 0xcb, 0x99, 0x5f, 0x33, 0xc6, + 0xe2, 0xf2, 0x4d, 0x3b, 0xc8, 0x12, 0x4f, 0x2c, + 0x8e, 0x95, 0xc5, 0xc5, 0xa2, 0x77, 0x17, 0xc8, + 0xd0, 0x76, 0x12, 0x57, 0x96, 0xed, 0x81, 0x45, + 0x50, 0x95, 0x44, 0x1e, 0x75, 0x04, 0xa1, 0x2b, + 0xe4, 0x95, 0x04, 0x97, 0x72, 0x28, 0x6f, 0x13, + 0x9c, 0x18, 0xc0, 0x5c, 0xe7, 0x1a, 0x34, 0x0d, + 0xa6, 0xab, 0x23, 0x1f, 0x8e, 0xbd, 0xc9, 0xdc, + 0xb6, 0xd2, 0xc6, 0x23, 0x2c, 0xcf, 0xd9, 0x41, + 0xb8, 0x57, 0x94, 0xae, 0xc3, 0xa2, 0xbd, 0x9b, + 0xd9, 0x61, 0xdb, 0x1d, 0xee, 0x49, 0xad, 0xb8, + 0xbf, 0xde, 0x39, 0x5a, 0xcf, 0x73, 0x95, 0x05, + 0x77, 0x44, 0x7b, 0x2f, 0x92, 0xe4, 0xb3, 0x23, + 0x9c, 0x6f, 0x0c, 0x26, 0x8e, 0x8a, 0xdb, 0x94, + 0xfc, 0xe5, 0xd5, 0xe0, 0xb7, 0x82, 0xde, 0x26, + 0xc5, 0x03, 0x1b, 0x1c, 0x6d, 0x14, 0x0d, 0x68, + 0xa0, 0x5e, 0x80, 0x00, 0x29, 0x4a, 0x01, 0xc8, + 0xa5, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x14, 0x25, 0x42, 0x09, + 0x44, 0x44, 0x1a, 0x7d, 0x57, 0xf7, 0x25, 0xc7, + 0xcd, 0x54, 0x7c, 0xf9, 0xff, 0x00, 0xea, 0xb1, + 0x95, 0xec, 0xdd, 0xfe, 0x6a, 0xf3, 0xaa, 0xb6, + 0xe1, 0x2e, 0x3e, 0x6a, 0xd6, 0xe3, 0x31, 0x16, + 0x39, 0x1c, 0x35, 0xa1, 0xba, 0x6f, 0x11, 0x63, + 0x48, 0x69, 0xee, 0x14, 0x1c, 0xa1, 0xe6, 0xba, + 0xb2, 0x0e, 0xf3, 0x7e, 0x05, 0xb6, 0xc8, 0xd0, + 0x63, 0xe6, 0xfe, 0x93, 0xfe, 0x12, 0xba, 0x19, + 0xd1, 0x78, 0x03, 0x74, 0xdb, 0xce, 0xab, 0xf8, + 0xec, 0xd8, 0x0f, 0x79, 0x7a, 0xc9, 0xa5, 0x70, + 0xd2, 0xc4, 0xe8, 0x9f, 0x1f, 0x8a, 0x41, 0x69, + 0x1d, 0xc3, 0xbd, 0x51, 0xc7, 0x34, 0x81, 0xfe, + 0x33, 0x7e, 0x7a, 0xb2, 0x44, 0xea, 0xc3, 0x17, + 0xce, 0xff, 0x00, 0xf9, 0x15, 0x78, 0xb6, 0xd1, + 0x7a, 0x73, 0x1e, 0xd3, 0x24, 0x51, 0x70, 0xb5, + 0x9e, 0x31, 0x25, 0x6a, 0xb2, 0x77, 0x5a, 0x6a, + 0xc9, 0xbd, 0x4d, 0xb4, 0x7d, 0x6b, 0xdb, 0xb8, + 0xf3, 0x1a, 0xd5, 0x41, 0xf1, 0x9e, 0xd9, 0x98, + 0xb7, 0x27, 0x60, 0x10, 0xb7, 0x69, 0xef, 0x2c, + 0x49, 0xf2, 0x10, 0xc6, 0x68, 0xdf, 0x1d, 0xfc, + 0xc3, 0x6a, 0xf8, 0x2e, 0x93, 0x31, 0x70, 0x2e, + 0x2e, 0x66, 0x10, 0xb4, 0x00, 0xd0, 0x3b, 0x81, + 0x6d, 0x2d, 0x2c, 0xf0, 0x56, 0xa4, 0x38, 0xc8, + 0x24, 0x78, 0xfd, 0xa2, 0x83, 0x57, 0x1c, 0x39, + 0x6b, 0xc1, 0xc7, 0x13, 0x0b, 0x19, 0xc8, 0xa6, + 0x4c, 0x3e, 0x66, 0x46, 0xf0, 0xb8, 0x54, 0x15, + 0x64, 0x19, 0x1c, 0x7b, 0x40, 0x0d, 0x94, 0x34, + 0x0e, 0x40, 0x9e, 0x94, 0xb1, 0xed, 0x87, 0xbc, + 0xa8, 0xd1, 0x4f, 0x65, 0x9f, 0xb8, 0x82, 0x2b, + 0x79, 0x68, 0x63, 0x84, 0xd6, 0x3e, 0xfa, 0xf7, + 0x0e, 0xd5, 0x2d, 0x01, 0xa1, 0xfb, 0x00, 0xa0, + 0x5b, 0x63, 0x95, 0xb0, 0x6b, 0x4b, 0xba, 0xd1, + 0x41, 0xbf, 0x72, 0xd4, 0x5e, 0x6a, 0x69, 0x1e, + 0x7a, 0xbb, 0x16, 0x13, 0xc9, 0xc4, 0xa0, 0x89, + 0x6e, 0xb5, 0x24, 0x0d, 0xe2, 0x96, 0x50, 0xd6, + 0x8e, 0x72, 0xb0, 0x3d, 0x63, 0xcc, 0xf1, 0x16, + 0xb6, 0x4e, 0x22, 0x39, 0x97, 0xd3, 0xa2, 0xbd, + 0xbb, 0x3c, 0x57, 0x72, 0x9a, 0x7c, 0x90, 0xbd, + 0x9b, 0x6b, 0x0c, 0x4c, 0x3c, 0x2d, 0xdb, 0x43, + 0xb5, 0x51, 0xbf, 0xd2, 0x17, 0xf7, 0x77, 0xd6, + 0xd3, 0x3e, 0xe9, 0xdc, 0x4e, 0x61, 0xd8, 0xb7, + 0xe3, 0x7a, 0xac, 0xe8, 0x8f, 0xe4, 0x5d, 0x7c, + 0xe5, 0x67, 0x1b, 0xc2, 0x0a, 0x26, 0x5b, 0xf3, + 0x2c, 0xbd, 0xe0, 0xbe, 0x97, 0xce, 0x5b, 0xf3, + 0x24, 0xbd, 0xe0, 0xbe, 0x92, 0x44, 0x2c, 0x7c, + 0x97, 0xfd, 0x47, 0x77, 0xd6, 0x42, 0xc7, 0xc9, + 0x0a, 0xda, 0xbb, 0xbe, 0x82, 0xe9, 0x85, 0xfb, + 0xa6, 0xdb, 0xe6, 0x05, 0x9c, 0x39, 0x15, 0x57, + 0x1d, 0xac, 0x2c, 0xad, 0xac, 0x62, 0x81, 0xf1, + 0x38, 0xba, 0x36, 0x80, 0x56, 0x40, 0xd6, 0xd8, + 0xfe, 0xc9, 0xc2, 0x9d, 0xc4, 0x1a, 0x8c, 0xcd, + 0x7d, 0x63, 0x90, 0x77, 0x16, 0x3d, 0xcd, 0xdc, + 0x56, 0xe2, 0x84, 0xf1, 0x3c, 0xee, 0x68, 0x5e, + 0x77, 0xf7, 0x73, 0x64, 0xf3, 0x0e, 0x9a, 0xc6, + 0x33, 0xc7, 0x25, 0x03, 0x76, 0x2b, 0x2e, 0x13, + 0x48, 0x45, 0x1b, 0x5b, 0x75, 0x92, 0xfe, 0x25, + 0xc6, 0xf0, 0x0e, 0xe0, 0xa0, 0xd3, 0xe2, 0x74, + 0xfd, 0xee, 0x66, 0x41, 0x3d, 0xd5, 0x62, 0xb5, + 0x1b, 0x9b, 0xce, 0x15, 0xb2, 0x59, 0x71, 0x7a, + 0x7e, 0xca, 0xb4, 0x6b, 0x03, 0x46, 0xc6, 0x8f, + 0x8c, 0x56, 0x2e, 0x6b, 0x51, 0xdb, 0xe3, 0xa3, + 0xea, 0x2d, 0x68, 0xe9, 0x40, 0xe4, 0xdc, 0x15, + 0x62, 0xc2, 0x0b, 0xbc, 0xfd, 0xdb, 0xae, 0x6f, + 0x9e, 0x4d, 0xbb, 0x0f, 0xc5, 0xe4, 0x2a, 0x8f, + 0x8c, 0xa6, 0xa3, 0xbc, 0xca, 0xcd, 0xe2, 0xb5, + 0xc2, 0xdc, 0x1d, 0x8c, 0x6d, 0x77, 0x2d, 0xde, + 0x13, 0x54, 0x62, 0x61, 0x0c, 0xb5, 0x31, 0x1b, + 0x62, 0x05, 0x0b, 0x88, 0xa5, 0x4a, 0xcb, 0x82, + 0xca, 0xce, 0x06, 0x06, 0x47, 0x10, 0xa0, 0xd8, + 0x2a, 0x17, 0x9d, 0xde, 0x26, 0xc2, 0xf2, 0x32, + 0xd9, 0x23, 0x0d, 0x77, 0x21, 0x02, 0x89, 0x22, + 0xcb, 0x1c, 0x8c, 0x91, 0xa1, 0xec, 0x21, 0xcd, + 0x70, 0xa8, 0x21, 0x7d, 0xaa, 0x6e, 0x9f, 0xc9, + 0xdc, 0xe3, 0x72, 0x47, 0x0f, 0x78, 0xe2, 0xe8, + 0x9c, 0x7f, 0x80, 0xf3, 0xf0, 0x2b, 0x8a, 0x82, + 0x51, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x54, + 0xf3, 0x7f, 0x9a, 0x6c, 0x7b, 0xf1, 0xfe, 0xf2, + 0xb5, 0xaa, 0xa6, 0x6f, 0xf3, 0x4d, 0x8f, 0x7e, + 0x3f, 0xde, 0x56, 0xb1, 0xca, 0x82, 0x51, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x54, 0xf5, + 0x5f, 0xdf, 0x58, 0xfe, 0xf0, 0xfe, 0xe0, 0x56, + 0xc5, 0x53, 0xd5, 0x7f, 0x7d, 0x63, 0xfb, 0xcd, + 0xfe, 0xe0, 0x41, 0x6b, 0x52, 0xa3, 0x95, 0x4a, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0xf8, + 0x92, 0x58, 0xe2, 0x6f, 0x14, 0x8e, 0x0c, 0x1c, + 0xe4, 0xd1, 0x07, 0xd5, 0x56, 0x0e, 0x4b, 0x33, + 0x63, 0x8d, 0x8f, 0x8e, 0xe1, 0xe0, 0x1e, 0x46, + 0x8d, 0xeb, 0x45, 0x9a, 0xd6, 0x4d, 0x8c, 0xba, + 0xdb, 0x1c, 0xde, 0xb2, 0x4d, 0xdc, 0x7c, 0x80, + 0xaa, 0xd9, 0x8a, 0x7b, 0xa9, 0x3c, 0xa2, 0xf5, + 0xe6, 0x47, 0x9d, 0xb4, 0xe4, 0x08, 0x36, 0x19, + 0x8d, 0x4d, 0x7f, 0x93, 0x6b, 0xa2, 0xb2, 0x06, + 0x28, 0x07, 0xed, 0x72, 0x95, 0x65, 0xd2, 0x59, + 0x1f, 0x2d, 0xc5, 0x30, 0x39, 0xd5, 0x92, 0x1f, + 0x11, 0xea, 0xa4, 0x1a, 0xd6, 0x37, 0x85, 0xa2, + 0x81, 0x66, 0xe9, 0x1b, 0xaf, 0x23, 0xcb, 0xc9, + 0x66, 0xe3, 0xe2, 0x4e, 0x2a, 0xd1, 0xdd, 0x41, + 0x79, 0x3b, 0xd6, 0x9b, 0x35, 0xb2, 0xfe, 0xc0, + 0xb7, 0xe3, 0x71, 0x9e, 0x85, 0xba, 0xa2, 0xd3, + 0xdc, 0xb5, 0xf7, 0x59, 0xa8, 0x59, 0xc2, 0x78, + 0x2d, 0x81, 0x71, 0x77, 0x25, 0x4a, 0xce, 0x7b, + 0xa2, 0x3a, 0xbb, 0x7a, 0x69, 0x88, 0xce, 0x72, + 0x9d, 0xd8, 0xe3, 0x9f, 0x8c, 0x31, 0x35, 0x37, + 0x8b, 0x7b, 0x8e, 0x7f, 0x2f, 0x59, 0x4a, 0xf7, + 0xd6, 0xd3, 0x32, 0xd0, 0xec, 0x45, 0xcb, 0x48, + 0xad, 0x62, 0x3f, 0x02, 0xd5, 0xe6, 0xbf, 0xe4, + 0xe6, 0xec, 0x2d, 0x46, 0xd2, 0xc3, 0xc6, 0xee, + 0xe2, 0xd8, 0xe7, 0xa5, 0x10, 0xe1, 0xee, 0x9e, + 0x4d, 0x07, 0x56, 0x45, 0x7b, 0xeb, 0x3f, 0xdc, + 0x7a, 0x26, 0x26, 0xbd, 0x16, 0x3c, 0x67, 0x6f, + 0x76, 0x59, 0xec, 0x60, 0xe8, 0x77, 0x97, 0x60, + 0xa3, 0x07, 0x91, 0xce, 0x03, 0xa5, 0x58, 0x56, + 0x83, 0x45, 0xc4, 0xe8, 0xf0, 0x70, 0xd4, 0x53, + 0x88, 0xb9, 0xdd, 0x2b, 0x7e, 0xae, 0x9f, 0xe8, + 0xc7, 0xd8, 0xe5, 0xeb, 0xe6, 0x27, 0xd5, 0xeb, + 0xd7, 0xf7, 0x33, 0xf8, 0x88, 0x88, 0xb6, 0xf3, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x20, 0x80, 0x77, 0xa0, 0x00, 0x6e, + 0x45, 0x8d, 0x7b, 0x91, 0xb3, 0xb1, 0x8c, 0xc9, + 0x73, 0x28, 0x8c, 0x0e, 0x42, 0x76, 0xa0, 0xc9, + 0x5c, 0xcf, 0x5a, 0x7d, 0xfd, 0x3f, 0xf4, 0xc7, + 0xc0, 0xae, 0x1e, 0xb9, 0xe0, 0xe9, 0xfc, 0xd3, + 0xef, 0x78, 0x55, 0x1b, 0x53, 0x64, 0x6d, 0xaf, + 0xb2, 0xf2, 0xdc, 0x5b, 0x92, 0xe8, 0xdc, 0xc0, + 0xd0, 0x7b, 0xb4, 0x41, 0xd0, 0xf4, 0xef, 0xdc, + 0xb6, 0x9f, 0xd3, 0x0b, 0x66, 0xaa, 0x78, 0x6d, + 0x5b, 0x86, 0xb6, 0xc6, 0x5b, 0xc1, 0x2c, 0x84, + 0x48, 0xc6, 0x00, 0x45, 0x06, 0xfe, 0x95, 0x9c, + 0x75, 0xa6, 0x0c, 0x6f, 0x94, 0xf4, 0x20, 0xdf, + 0x22, 0xf0, 0xb3, 0xbb, 0x86, 0xf2, 0x06, 0xdc, + 0x42, 0x6b, 0x1b, 0xf7, 0x12, 0xbd, 0xd0, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x69, 0xf5, 0x56, 0x0a, 0x3c, + 0xe6, 0x1e, 0x6b, 0x27, 0x8f, 0x1c, 0x8a, 0xc4, + 0x79, 0x9c, 0x16, 0xe1, 0x42, 0x0f, 0xcc, 0x57, + 0x96, 0x72, 0xd9, 0x5d, 0xcd, 0x69, 0x30, 0xe1, + 0x92, 0x17, 0x16, 0xba, 0xbd, 0xc5, 0xe3, 0xc9, + 0xfe, 0x4b, 0xa2, 0xfb, 0x5b, 0xd3, 0x5e, 0x4d, + 0x76, 0xdc, 0xd4, 0x0c, 0xa4, 0x53, 0x1e, 0x19, + 0x88, 0x1b, 0x9c, 0x79, 0x4a, 0xe7, 0x5f, 0x0a, + 0x02, 0x27, 0x79, 0x10, 0x11, 0x13, 0xe1, 0x40, + 0x44, 0x5b, 0x8d, 0x3b, 0xa5, 0x72, 0xf9, 0xfb, + 0x81, 0x1d, 0xa4, 0x45, 0xb1, 0x57, 0xc7, 0x99, + 0xc2, 0x8d, 0x03, 0xbe, 0x83, 0x4f, 0xf0, 0xf3, + 0xaf, 0x6b, 0x1b, 0x2b, 0x9c, 0x85, 0xd4, 0x76, + 0x96, 0x8c, 0x32, 0x4d, 0x29, 0xa3, 0x5a, 0x3e, + 0x15, 0xd9, 0xe1, 0xf6, 0x63, 0x88, 0xb5, 0xc0, + 0xcd, 0x64, 0x2b, 0x35, 0xdc, 0x8c, 0xaf, 0x94, + 0x11, 0xb7, 0x8e, 0x9c, 0x8b, 0x92, 0xda, 0x4b, + 0x73, 0xa7, 0x73, 0xf1, 0xc9, 0x23, 0x4b, 0x65, + 0xb4, 0x96, 0x8f, 0x1b, 0x89, 0x68, 0x28, 0x33, + 0x35, 0x4e, 0x90, 0xbd, 0xd3, 0x4c, 0xb5, 0x75, + 0xd3, 0xb8, 0xfc, 0xa5, 0xb5, 0x24, 0x6e, 0x6b, + 0xbe, 0x4a, 0xd6, 0xe2, 0xb0, 0xd9, 0x1c, 0xcd, + 0xc8, 0xb6, 0xb0, 0x88, 0xc8, 0xe2, 0x68, 0xe7, + 0x01, 0xb0, 0x77, 0x4a, 0xbe, 0xea, 0x89, 0x73, + 0xba, 0xcb, 0x1a, 0xfc, 0x84, 0x56, 0xbd, 0x46, + 0x2e, 0xc8, 0x19, 0x59, 0xc6, 0x28, 0xf9, 0x28, + 0x28, 0xea, 0x2b, 0xde, 0x8d, 0xb0, 0xc3, 0xdb, + 0xe1, 0x2d, 0x67, 0xc6, 0x46, 0xd6, 0xb2, 0x58, + 0xc3, 0x9c, 0xf0, 0x36, 0x97, 0x53, 0xc6, 0xdb, + 0xdf, 0x41, 0xc5, 0x75, 0x56, 0x93, 0xbe, 0xd3, + 0x53, 0x45, 0x1d, 0xc9, 0x0f, 0x6c, 0xcc, 0x04, + 0x3c, 0x73, 0xf3, 0x2d, 0x45, 0xbd, 0xc4, 0xf6, + 0xd2, 0x75, 0xb0, 0x3f, 0xab, 0x79, 0x14, 0xa8, + 0xe6, 0x5f, 0xa0, 0x75, 0x96, 0x9b, 0x8f, 0x50, + 0xe1, 0xe4, 0xb5, 0xa0, 0xf2, 0x86, 0xf8, 0xd0, + 0x3c, 0xf2, 0x15, 0xc1, 0xf2, 0x78, 0x5c, 0x9e, + 0x26, 0x67, 0x43, 0x7d, 0x03, 0xe2, 0x2c, 0x24, + 0x71, 0x91, 0xe2, 0x9e, 0xe8, 0x41, 0x84, 0x76, + 0x9d, 0xa4, 0x92, 0x4d, 0x6b, 0xdd, 0x5d, 0x83, + 0x40, 0x65, 0xe0, 0xce, 0xe1, 0x64, 0xc0, 0x64, + 0x48, 0x73, 0xe3, 0x67, 0x0b, 0x03, 0xb7, 0x96, + 0xfb, 0xab, 0x8f, 0x1a, 0x9a, 0x73, 0x55, 0x6f, + 0xb0, 0xf9, 0x2b, 0x8c, 0x55, 0xed, 0xbd, 0xfc, + 0x04, 0x87, 0x44, 0x41, 0x2d, 0x1f, 0xb5, 0xdc, + 0x41, 0x9b, 0x79, 0x6d, 0x90, 0xd2, 0x5a, 0x87, + 0x85, 0xae, 0x2d, 0x92, 0x07, 0xf1, 0xc4, 0xff, + 0x00, 0x95, 0x19, 0x2b, 0xa0, 0x66, 0x71, 0xd8, + 0x2d, 0x59, 0x89, 0xb2, 0xce, 0x5c, 0xce, 0x2d, + 0x04, 0x63, 0x8a, 0x49, 0x36, 0x02, 0x47, 0xed, + 0x35, 0x61, 0xeb, 0xf9, 0x74, 0xe5, 0xf6, 0x2a, + 0xde, 0xfa, 0xf6, 0x43, 0x15, 0xfb, 0xa3, 0x0e, + 0x89, 0x8c, 0xda, 0xed, 0xa3, 0x71, 0x15, 0x5c, + 0xee, 0x7c, 0x95, 0xfc, 0xb6, 0x71, 0x59, 0x49, + 0x23, 0x9b, 0x6b, 0x10, 0xab, 0x22, 0x1e, 0x2d, + 0x6b, 0xca, 0x68, 0xaa, 0x2c, 0x39, 0xbd, 0x5d, + 0x6e, 0xdb, 0x47, 0x61, 0x74, 0xec, 0x5e, 0x4d, + 0x60, 0x36, 0x3e, 0x62, 0x3c, 0x69, 0x08, 0xdf, + 0xb5, 0x55, 0x49, 0x24, 0xf1, 0x38, 0xf1, 0x13, + 0xfb, 0x47, 0x69, 0x3f, 0xe6, 0xa3, 0x89, 0xb4, + 0xa5, 0x7a, 0x05, 0x15, 0xaf, 0x48, 0x61, 0x30, + 0xb9, 0x4b, 0x4b, 0xb8, 0xcb, 0xcb, 0xb3, 0x06, + 0x27, 0x75, 0x31, 0x3f, 0x63, 0x41, 0xa7, 0xec, + 0x94, 0x1e, 0x3a, 0x77, 0x49, 0xdb, 0xdf, 0xd9, + 0xbf, 0x2f, 0x97, 0x9f, 0xc9, 0x31, 0xd1, 0x1a, + 0x35, 0xdc, 0xaf, 0x23, 0xbe, 0xb3, 0xa7, 0xcd, + 0x69, 0x3c, 0x5c, 0x8f, 0xbc, 0xc0, 0xc8, 0xf8, + 0xe6, 0x10, 0xba, 0xdd, 0xcc, 0x70, 0xa0, 0x7f, + 0x10, 0xa7, 0x1e, 0xf5, 0xb4, 0xc1, 0xe3, 0x2d, + 0x35, 0x36, 0x92, 0x8f, 0x01, 0x34, 0xc6, 0xce, + 0xee, 0xc2, 0x42, 0x25, 0x67, 0x2d, 0x41, 0x3b, + 0x68, 0x56, 0xc2, 0x2d, 0x21, 0xa1, 0x74, 0xec, + 0x55, 0xc9, 0xcb, 0x1c, 0x92, 0x90, 0x01, 0x7c, + 0xa6, 0x87, 0xff, 0x00, 0x10, 0x52, 0xca, 0x51, + 0xf4, 0x3e, 0xa6, 0x7e, 0x0f, 0x32, 0x0c, 0xee, + 0x2e, 0xb3, 0xbd, 0x77, 0x0c, 0xfc, 0x44, 0x90, + 0x2b, 0xfb, 0x4b, 0x61, 0xed, 0x1f, 0x4d, 0x36, + 0xc2, 0xf1, 0xb9, 0x8b, 0x21, 0xc5, 0x63, 0x7d, + 0xe3, 0x12, 0xdd, 0xcd, 0x71, 0xdb, 0xc9, 0xc8, + 0x54, 0x6b, 0xdd, 0x2d, 0x8d, 0xb1, 0xb7, 0x8b, + 0x31, 0x86, 0x70, 0x75, 0x8d, 0xc1, 0xa3, 0x83, + 0x4d, 0x43, 0x4f, 0x38, 0x2b, 0x3b, 0x09, 0xab, + 0x31, 0xbe, 0xa4, 0xc9, 0x6b, 0xa8, 0x1a, 0x2e, + 0x9a, 0xc7, 0x98, 0x60, 0x8b, 0x7b, 0xde, 0x00, + 0x14, 0xef, 0x21, 0x4d, 0x77, 0xb3, 0x8d, 0x46, + 0xec, 0x65, 0xfc, 0xd6, 0x97, 0x2f, 0x02, 0xc2, + 0x66, 0x17, 0x48, 0x1c, 0x76, 0x02, 0xde, 0x6e, + 0xe9, 0x5a, 0x3d, 0x55, 0x7b, 0x83, 0xbd, 0xc9, + 0xc9, 0x26, 0x16, 0xdc, 0xc1, 0x01, 0x71, 0x2e, + 0x26, 0xbe, 0x33, 0xab, 0xb5, 0xd4, 0x2b, 0x59, + 0x71, 0x2c, 0x52, 0x5c, 0x49, 0x24, 0x0c, 0xea, + 0x62, 0x79, 0x3c, 0x11, 0xd6, 0xb4, 0x6f, 0x32, + 0xf1, 0xaa, 0x14, 0x10, 0x37, 0xa8, 0x25, 0x0a, + 0xf9, 0x45, 0x37, 0xa8, 0x25, 0x09, 0x51, 0x5e, + 0x6d, 0xb5, 0xd8, 0x80, 0x4a, 0xdb, 0x69, 0xed, + 0x2d, 0x97, 0xd4, 0x17, 0x2d, 0x8e, 0xce, 0x27, + 0x08, 0x49, 0xf1, 0xe7, 0x23, 0xc5, 0x68, 0xef, + 0xab, 0x06, 0x8c, 0xf6, 0x6d, 0x7d, 0x98, 0x7b, + 0x6f, 0x72, 0x4d, 0x36, 0xf6, 0x00, 0x82, 0x1a, + 0x76, 0x3d, 0xfe, 0xe7, 0x32, 0xec, 0x58, 0xec, + 0x65, 0x8e, 0x32, 0xd5, 0xb6, 0x96, 0x51, 0x08, + 0xa1, 0x60, 0xa0, 0x68, 0xff, 0x00, 0x32, 0xa0, + 0xd5, 0xe9, 0x6d, 0x1f, 0x8b, 0xd3, 0x96, 0xad, + 0x6d, 0xb4, 0x61, 0xd7, 0x2e, 0x03, 0xad, 0x9c, + 0xed, 0x24, 0xf7, 0x16, 0xf9, 0x4a, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x85, 0xe5, 0x3d, + 0xdd, 0xbd, 0xbb, 0x4b, 0xa6, 0x91, 0xac, 0x03, + 0x69, 0xa9, 0x41, 0xea, 0xb1, 0x2f, 0xf2, 0xb6, + 0x56, 0x11, 0x97, 0xdc, 0xc8, 0x1b, 0x4f, 0xd9, + 0xe5, 0xe8, 0x55, 0xcc, 0xa6, 0xb0, 0x96, 0x67, + 0x9b, 0x6c, 0x4c, 0x46, 0x47, 0x13, 0x43, 0x27, + 0x20, 0x58, 0x10, 0x61, 0x2e, 0x6f, 0x24, 0xf2, + 0x9c, 0xa4, 0xdc, 0x6e, 0x3b, 0x99, 0x5a, 0xa0, + 0xce, 0xb8, 0xd6, 0x17, 0x97, 0x52, 0x70, 0x62, + 0xe0, 0xe2, 0x03, 0x7b, 0xdd, 0x5d, 0xab, 0xe3, + 0xd3, 0xda, 0x9b, 0x67, 0xf0, 0x01, 0xff, 0x00, + 0x1d, 0xe5, 0x9d, 0x05, 0xbc, 0x16, 0xec, 0xe0, + 0x81, 0xad, 0x68, 0x1c, 0xa1, 0x7a, 0x54, 0xf7, + 0x10, 0x6b, 0xbd, 0x3d, 0xa9, 0xbb, 0x01, 0xfe, + 0x3d, 0xc5, 0x07, 0x3b, 0xa9, 0x87, 0xfe, 0x91, + 0xfe, 0x3d, 0xc5, 0xb2, 0x26, 0x80, 0x92, 0x56, + 0x0d, 0xee, 0x6a, 0xd2, 0xcc, 0x50, 0xbc, 0x3e, + 0x4e, 0x46, 0x84, 0x1e, 0x67, 0x3f, 0xa9, 0x1a, + 0x2a, 0xe8, 0x5a, 0x00, 0xde, 0x4f, 0xff, 0x00, + 0x85, 0x85, 0x26, 0xb6, 0xca, 0xc7, 0x27, 0x56, + 0x58, 0x0b, 0x87, 0x36, 0xe5, 0x85, 0x73, 0x91, + 0xc9, 0x64, 0x5e, 0x5a, 0xda, 0xc5, 0x0f, 0x37, + 0x3a, 0x98, 0x6c, 0xa3, 0x84, 0x55, 0xde, 0x33, + 0xf9, 0x49, 0x41, 0xb8, 0x19, 0xab, 0x8c, 0xbe, + 0x9c, 0xc8, 0x3e, 0xe1, 0xa1, 0xae, 0x8f, 0x60, + 0xa7, 0x75, 0x6e, 0x34, 0xe7, 0xdc, 0x96, 0xdd, + 0xe5, 0x59, 0xc5, 0x7e, 0x5d, 0xca, 0xfc, 0xef, + 0x02, 0xb3, 0x69, 0xcf, 0xb9, 0x2d, 0xbb, 0xdf, + 0xe4, 0x83, 0x60, 0x8a, 0x68, 0x85, 0x5b, 0x18, + 0x99, 0x73, 0x4c, 0x55, 0xcf, 0xcc, 0x3b, 0x55, + 0x5f, 0x03, 0xa5, 0xac, 0xb2, 0x38, 0xf1, 0x73, + 0x2b, 0xbc, 0x77, 0x12, 0xac, 0xf9, 0x8f, 0xba, + 0xae, 0xbe, 0x62, 0xc1, 0xd2, 0x1f, 0x72, 0xb3, + 0xe7, 0x1f, 0x85, 0x2c, 0x78, 0x7a, 0x91, 0x61, + 0xc9, 0x21, 0x1d, 0xca, 0xff, 0x00, 0xaa, 0x7a, + 0x93, 0x8f, 0xf9, 0x6e, 0xe9, 0xff, 0x00, 0x55, + 0x61, 0xaa, 0x28, 0x2b, 0xde, 0xa4, 0xe3, 0xcf, + 0xfe, 0xc3, 0xd3, 0xfe, 0xa9, 0xea, 0x45, 0x87, + 0x68, 0x7a, 0x7f, 0xd5, 0x58, 0x6a, 0x95, 0x54, + 0x51, 0x35, 0x1e, 0x02, 0xdb, 0x16, 0x20, 0x31, + 0x39, 0xce, 0xeb, 0x1d, 0x47, 0x02, 0xa2, 0x28, + 0x62, 0x89, 0xa0, 0x31, 0xb4, 0x5b, 0x3d, 0x73, + 0xf1, 0x6d, 0x7e, 0x7a, 0xd7, 0x8d, 0xc3, 0xbc, + 0x10, 0x7d, 0x2f, 0x97, 0xfc, 0x47, 0x77, 0x8a, + 0x9a, 0xa8, 0x7f, 0xc4, 0x3d, 0xe2, 0x83, 0x67, + 0xa2, 0x3f, 0xeb, 0xdc, 0xfc, 0xe5, 0x66, 0x1b, + 0xc2, 0xac, 0xe8, 0x8f, 0xe4, 0x5d, 0x7c, 0xe5, + 0x66, 0x1b, 0xc2, 0x0a, 0x2e, 0x5b, 0xf3, 0x2c, + 0xbd, 0xe0, 0xbe, 0x97, 0xce, 0x5b, 0xf3, 0x24, + 0xdf, 0x34, 0x2f, 0xaa, 0x24, 0x85, 0x16, 0x36, + 0x4b, 0xfe, 0xab, 0xa9, 0xce, 0xb2, 0x1c, 0xf6, + 0xb0, 0x55, 0xc6, 0x83, 0x9d, 0x61, 0x91, 0x75, + 0x94, 0x90, 0x5a, 0x59, 0xc6, 0x5c, 0x09, 0xda, + 0xfe, 0x44, 0x17, 0x4c, 0x36, 0x27, 0x1b, 0x26, + 0x2e, 0xdd, 0xef, 0x81, 0xae, 0x71, 0x60, 0xa9, + 0xa2, 0xcc, 0xf4, 0x2e, 0x2b, 0xcd, 0xdb, 0xd0, + 0xbd, 0x71, 0xd6, 0xce, 0xb5, 0xb1, 0x86, 0xdd, + 0xfb, 0x5d, 0x1b, 0x40, 0x27, 0xba, 0xbe, 0x32, + 0x19, 0x3b, 0x4c, 0x7c, 0x45, 0xf3, 0xbc, 0x57, + 0x91, 0xa3, 0x7d, 0x54, 0x01, 0x67, 0x8c, 0xb0, + 0xad, 0xc0, 0x8d, 0x91, 0x70, 0x8f, 0x8c, 0xab, + 0xf9, 0x4d, 0x49, 0x35, 0xe3, 0xcd, 0xae, 0x38, + 0x51, 0x9b, 0x9d, 0x2f, 0x71, 0x6b, 0xef, 0x2f, + 0xaf, 0xf3, 0x32, 0x92, 0xe2, 0x63, 0xb6, 0x07, + 0x63, 0x79, 0xc2, 0xf5, 0x86, 0x18, 0xe0, 0x67, + 0x0c, 0x62, 0x9c, 0xe5, 0x06, 0xb2, 0xfe, 0xdf, + 0xc9, 0xed, 0x2a, 0x49, 0x74, 0xd3, 0x3a, 0x84, + 0x9e, 0xea, 0xb2, 0xe2, 0xed, 0x19, 0x69, 0x8f, + 0x86, 0x36, 0xef, 0x23, 0x89, 0xde, 0xea, 0xd0, + 0x66, 0x29, 0xd6, 0x5b, 0x57, 0x77, 0x18, 0x56, + 0x86, 0xd3, 0x81, 0xa0, 0x6e, 0xe1, 0x1f, 0x02, + 0xa2, 0x51, 0x11, 0x41, 0xa7, 0xd4, 0xd0, 0x7f, + 0x06, 0x2b, 0xf8, 0xc5, 0x24, 0xb7, 0x78, 0x3c, + 0x43, 0x9a, 0xaa, 0xd9, 0x8d, 0xb9, 0xf2, 0xab, + 0x18, 0x67, 0xf9, 0x6d, 0x04, 0xaa, 0xe6, 0x7e, + 0x9e, 0x89, 0x9e, 0xbc, 0xcb, 0x6f, 0xa6, 0x09, + 0x38, 0x3b, 0x5e, 0x2f, 0x92, 0x83, 0x6a, 0x8a, + 0x01, 0x52, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x2a, + 0x79, 0xbf, 0xcd, 0x36, 0x1d, 0xf8, 0xff, 0x00, + 0x79, 0x5a, 0xd5, 0x53, 0x37, 0xf9, 0xa6, 0xc3, + 0xbf, 0x1f, 0xef, 0x2b, 0x58, 0xe5, 0x41, 0x28, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0xaa, + 0x5a, 0xaf, 0xef, 0xbc, 0x77, 0x79, 0xbf, 0xdc, + 0x0a, 0xda, 0xaa, 0x5a, 0xaf, 0xef, 0xbc, 0x77, + 0x79, 0xbf, 0xdc, 0x08, 0x2d, 0x9c, 0xaa, 0x54, + 0x72, 0xa9, 0x40, 0x44, 0x50, 0x82, 0x54, 0x2c, + 0x7b, 0xdb, 0xfb, 0x6b, 0x18, 0x4c, 0xb7, 0x0f, + 0x0c, 0x01, 0x53, 0xb2, 0x5a, 0xc2, 0xf2, 0xf5, + 0xef, 0xb7, 0xc6, 0xb7, 0x82, 0x3d, 0xc6, 0x44, + 0x16, 0x3c, 0xbe, 0xa4, 0xb0, 0xc6, 0xb0, 0x82, + 0xf0, 0xf9, 0xb9, 0x18, 0xdd, 0xa6, 0xbd, 0xd5, + 0x4c, 0xbc, 0xc9, 0x64, 0xf2, 0xf2, 0x71, 0xca, + 0xf3, 0x15, 0xbf, 0xc8, 0x0b, 0xca, 0x3b, 0x31, + 0xc7, 0xd6, 0xdc, 0x38, 0xcb, 0x29, 0xda, 0x49, + 0xe7, 0x59, 0x04, 0x86, 0x8f, 0x1b, 0xc5, 0x1c, + 0x88, 0x3e, 0x22, 0x82, 0x38, 0x85, 0x1a, 0x36, + 0xf2, 0x92, 0xa5, 0xf2, 0x35, 0x82, 0xae, 0x20, + 0x0a, 0xd1, 0x7c, 0x5c, 0xbd, 0xf1, 0xc2, 0x5e, + 0xc1, 0x57, 0x05, 0xf2, 0xc0, 0xcb, 0xb8, 0x18, + 0xf7, 0x6f, 0x1b, 0xc7, 0x75, 0x4c, 0xa6, 0xa2, + 0x67, 0x96, 0xd4, 0x99, 0xa8, 0x99, 0xe4, 0x8b, + 0xb9, 0x9f, 0x13, 0x1a, 0xf6, 0xfc, 0x53, 0xbc, + 0xa9, 0xeb, 0x8c, 0x17, 0x36, 0xd7, 0xd1, 0x9f, + 0x8a, 0xe1, 0x5a, 0x73, 0x15, 0xf7, 0x34, 0x21, + 0xf0, 0xba, 0x3e, 0xe6, 0xcf, 0x71, 0x63, 0xc5, + 0x1b, 0xdf, 0x64, 0xf8, 0x9f, 0xbd, 0xa0, 0xd1, + 0x30, 0xfc, 0xf8, 0x79, 0xe3, 0x74, 0x45, 0xcf, + 0x48, 0x66, 0x35, 0x31, 0x9f, 0x2e, 0xda, 0x9c, + 0xb7, 0x5b, 0xa7, 0xc1, 0x33, 0x67, 0x85, 0x92, + 0xb7, 0x6b, 0x5e, 0xd0, 0x47, 0xba, 0xa7, 0x81, + 0xa0, 0x97, 0x01, 0xb4, 0xef, 0x2b, 0x47, 0xa3, + 0x72, 0x1e, 0x55, 0x8a, 0x11, 0x38, 0xd6, 0x4b, + 0x73, 0xc0, 0x7b, 0xcb, 0x7e, 0xab, 0x6d, 0x35, + 0x96, 0x36, 0xe0, 0x65, 0x6e, 0x32, 0x17, 0x02, + 0xae, 0x77, 0x8b, 0x0b, 0x79, 0x9a, 0xb0, 0x75, + 0x9d, 0xd1, 0x75, 0x9c, 0x58, 0xe8, 0xf6, 0xcd, + 0x74, 0xf0, 0xd2, 0xd1, 0xbc, 0x05, 0x66, 0x5a, + 0xeb, 0x8c, 0x34, 0x17, 0x19, 0x38, 0xf2, 0x12, + 0x12, 0xe7, 0xc4, 0x28, 0xc6, 0xf2, 0x0e, 0xea, + 0xc4, 0xe3, 0xf9, 0x7c, 0xb1, 0xc7, 0x7c, 0xbd, + 0x5a, 0x3e, 0xa2, 0x3e, 0xfe, 0x3a, 0xba, 0xbb, + 0x7e, 0xde, 0x31, 0xe5, 0xc6, 0x37, 0x7e, 0x5f, + 0xd3, 0x0f, 0x7c, 0x6d, 0xbf, 0x93, 0x59, 0xc3, + 0x6e, 0x05, 0x38, 0x18, 0x01, 0xef, 0xd1, 0x65, + 0xaf, 0x90, 0x28, 0x57, 0xd2, 0xd4, 0x45, 0x44, + 0x47, 0x27, 0x9b, 0x2c, 0xa7, 0x29, 0x9c, 0xa7, + 0x7e, 0x53, 0x33, 0x3d, 0xe2, 0x22, 0x2a, 0x82, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x82, 0xe0, + 0xd0, 0x49, 0xd8, 0x06, 0xda, 0xa0, 0x95, 0xe7, + 0x34, 0xf0, 0xc0, 0xc3, 0x24, 0xcf, 0x0c, 0x60, + 0xde, 0x4a, 0xae, 0xe6, 0x75, 0xa5, 0x9d, 0x9b, + 0x8d, 0xbd, 0x98, 0xf2, 0x9b, 0x8d, 0xd4, 0x6e, + 0xd0, 0x0a, 0xd4, 0x7a, 0x37, 0x39, 0xa8, 0x18, + 0xeb, 0xac, 0x8c, 0x86, 0xde, 0x00, 0x2a, 0xd8, + 0x46, 0xca, 0xa0, 0xcd, 0xcb, 0x6b, 0x47, 0xc9, + 0x29, 0xb3, 0xc2, 0xc6, 0x67, 0x97, 0x71, 0x78, + 0xdc, 0x16, 0x15, 0x96, 0x9b, 0xb8, 0xbb, 0x73, + 0xae, 0xb3, 0x77, 0x25, 0xee, 0xa5, 0x5b, 0x0d, + 0x76, 0x02, 0xbe, 0x71, 0x97, 0x13, 0xe2, 0x9a, + 0x63, 0xb5, 0xb3, 0xa9, 0x1b, 0x38, 0xc8, 0xda, + 0xbd, 0x64, 0xc8, 0x65, 0xa4, 0x24, 0xf5, 0x24, + 0x39, 0xc8, 0x35, 0xb7, 0x98, 0xe1, 0x6c, 0x5c, + 0xe7, 0xc6, 0xd0, 0xd0, 0x68, 0xd1, 0xdc, 0x5e, + 0x96, 0xd8, 0xd6, 0xdf, 0xc9, 0x11, 0x6c, 0x02, + 0x28, 0x9b, 0x4e, 0x23, 0xcf, 0x45, 0x98, 0x2c, + 0xb8, 0x58, 0x6e, 0xf2, 0x52, 0x54, 0x0d, 0xbc, + 0x24, 0xec, 0x5a, 0xdb, 0xcd, 0x43, 0x3d, 0xcd, + 0x6d, 0xb1, 0xad, 0xe0, 0x8b, 0x77, 0x18, 0x41, + 0x97, 0x9e, 0xba, 0xc0, 0x5a, 0x37, 0xc9, 0x6c, + 0xad, 0xdb, 0x2d, 0xd3, 0x85, 0x09, 0x1b, 0x81, + 0x5a, 0x1b, 0x6c, 0x73, 0x5c, 0xee, 0x39, 0x5b, + 0x57, 0x3c, 0xec, 0x60, 0x5e, 0x8e, 0x16, 0x96, + 0x11, 0xba, 0xe2, 0xe5, 0xf5, 0x7e, 0xf2, 0xe7, + 0x6f, 0x58, 0x96, 0x1e, 0xd1, 0x31, 0xf6, 0x53, + 0x39, 0xee, 0xb5, 0xeb, 0x88, 0xd8, 0xd2, 0x77, + 0x20, 0xea, 0xda, 0x7a, 0x17, 0x41, 0x8a, 0x86, + 0x37, 0xb7, 0x80, 0x81, 0xb9, 0x6c, 0x57, 0x2d, + 0xfd, 0x67, 0x88, 0x6e, 0xb5, 0x21, 0x3f, 0x5a, + 0x23, 0xf3, 0x52, 0x83, 0xa9, 0x22, 0xe5, 0xbf, + 0xad, 0x11, 0xf9, 0xa9, 0x4f, 0xd6, 0x88, 0xfc, + 0xd4, 0xa0, 0xea, 0x48, 0xb9, 0x6f, 0xeb, 0x44, + 0x7e, 0x6a, 0x53, 0xf5, 0xa2, 0x3f, 0x35, 0x28, + 0x3a, 0x92, 0x2e, 0x5b, 0xfa, 0xd1, 0x1f, 0x9a, + 0x94, 0xfd, 0x68, 0x8f, 0xcd, 0x4a, 0x0e, 0xa4, + 0x8b, 0x96, 0xfe, 0xb4, 0x47, 0xe6, 0xa5, 0x3f, + 0x5a, 0x23, 0xf3, 0x52, 0x83, 0xa9, 0x22, 0xe5, + 0xbf, 0xad, 0x11, 0xf9, 0xa9, 0x4f, 0xd6, 0x88, + 0xfc, 0xd4, 0xa0, 0xea, 0x48, 0xb9, 0x6f, 0xeb, + 0x44, 0x7e, 0x6a, 0x53, 0xf5, 0xa2, 0x3f, 0x35, + 0x28, 0x3a, 0x92, 0x2e, 0x5b, 0xfa, 0xd1, 0x1f, + 0x9a, 0x94, 0xfd, 0x68, 0x8f, 0xcd, 0x4a, 0x0e, + 0xa4, 0x8b, 0x96, 0xfe, 0xb4, 0x47, 0xe6, 0xa5, + 0x3f, 0x5a, 0x23, 0xf3, 0x52, 0x83, 0xa9, 0x22, + 0xe5, 0xbf, 0xad, 0x11, 0xf9, 0xa9, 0x4f, 0xd6, + 0x88, 0xfc, 0xd4, 0xa0, 0xea, 0x4a, 0x57, 0x2c, + 0xfd, 0x68, 0x8f, 0xcd, 0x4a, 0x7e, 0xb3, 0xc5, + 0xe6, 0xa5, 0x07, 0x52, 0x45, 0xcb, 0x7f, 0x5a, + 0x23, 0xf3, 0x52, 0x9f, 0xad, 0x11, 0xf9, 0xa9, + 0x41, 0xd4, 0x91, 0x72, 0xdf, 0xd6, 0x88, 0xfc, + 0xd4, 0xa7, 0xeb, 0x44, 0x7e, 0x6a, 0x50, 0x74, + 0x1d, 0x43, 0x89, 0x8b, 0x31, 0x89, 0xb8, 0xb1, + 0x90, 0x03, 0xd6, 0x34, 0xf0, 0xd7, 0xe5, 0x53, + 0x62, 0xfc, 0xe9, 0x7d, 0x65, 0x71, 0x61, 0x77, + 0x25, 0xa5, 0xc3, 0x78, 0x65, 0x89, 0xc5, 0xa6, + 0xbb, 0x37, 0x2e, 0x97, 0xfa, 0xd1, 0x17, 0x9a, + 0x9f, 0x7d, 0x53, 0xb5, 0x66, 0x72, 0xdb, 0x52, + 0x5c, 0xfa, 0x4a, 0x08, 0x7a, 0x99, 0x18, 0x29, + 0x28, 0xdd, 0x51, 0xce, 0x82, 0xbc, 0x88, 0xa0, + 0xa0, 0x94, 0x44, 0xf8, 0x10, 0x41, 0xaf, 0x21, + 0x5d, 0xa3, 0xd9, 0x3e, 0x7a, 0xda, 0xf3, 0x0f, + 0xe8, 0xce, 0x16, 0xb2, 0xe6, 0xd2, 0xa5, 0xd4, + 0xde, 0xe6, 0x93, 0xf1, 0x97, 0x18, 0xa2, 0xdb, + 0x69, 0x6c, 0xec, 0xd8, 0x2c, 0xcc, 0x37, 0xb1, + 0x3a, 0x8c, 0xe2, 0x0d, 0x98, 0x73, 0xb0, 0x9d, + 0xb5, 0x41, 0xfa, 0x35, 0x55, 0xb3, 0x7a, 0x03, + 0x0f, 0x95, 0xbe, 0x9b, 0x21, 0x33, 0x4f, 0x5a, + 0xf8, 0xcb, 0x43, 0x46, 0xee, 0x2a, 0x7c, 0x65, + 0x63, 0xb2, 0xbb, 0x86, 0xf2, 0xd6, 0x3b, 0xa8, + 0x1d, 0xc5, 0x14, 0xcd, 0x0e, 0x69, 0x1c, 0xc5, + 0x78, 0xe6, 0x2e, 0xe6, 0xb3, 0xc6, 0x5c, 0xdd, + 0x5b, 0xb3, 0xac, 0x9a, 0x26, 0x17, 0x31, 0xbc, + 0xe4, 0x04, 0x15, 0xbd, 0x01, 0x33, 0x6e, 0x70, + 0x57, 0x38, 0x4b, 0x91, 0xfc, 0x4b, 0x19, 0x1f, + 0x6d, 0x23, 0x4e, 0xf2, 0xc7, 0x6d, 0x06, 0x9d, + 0xe2, 0xa8, 0x17, 0xba, 0x97, 0x39, 0xa6, 0x32, + 0x0d, 0xc0, 0x32, 0x53, 0x15, 0x95, 0x95, 0xc7, + 0x15, 0x39, 0x5d, 0x19, 0x77, 0x1d, 0x3d, 0xf5, + 0x95, 0xec, 0xf7, 0x54, 0xdc, 0x3f, 0x59, 0x4e, + 0xfb, 0xd7, 0x70, 0xbf, 0x26, 0x38, 0x1e, 0xde, + 0x40, 0xf1, 0xb4, 0x7c, 0x0a, 0xc5, 0xae, 0x70, + 0x78, 0xf1, 0xaa, 0x71, 0x59, 0x2b, 0xd8, 0xf8, + 0xed, 0x6e, 0x5f, 0xd4, 0xcc, 0x37, 0x0e, 0x3f, + 0xd9, 0xaa, 0x0b, 0xe5, 0x8d, 0xcb, 0x2e, 0xed, + 0x21, 0xb9, 0x8f, 0xe2, 0xca, 0xc6, 0xb9, 0xbe, + 0xe8, 0xaa, 0xd7, 0xea, 0x6c, 0x0d, 0xb6, 0x6f, + 0x15, 0x3d, 0xac, 0x8c, 0x06, 0x47, 0x34, 0xf5, + 0x6f, 0xa6, 0xd0, 0xe5, 0xb4, 0x82, 0x38, 0xa1, + 0x85, 0x91, 0xc2, 0xd0, 0xd8, 0xda, 0x00, 0x60, + 0x1b, 0x80, 0x1b, 0x97, 0xd9, 0xd8, 0x10, 0x7e, + 0x64, 0xbf, 0xb2, 0x9f, 0x1f, 0x79, 0x2d, 0x9d, + 0xc0, 0xa4, 0x90, 0xbb, 0x84, 0xd7, 0xb9, 0xb9, + 0x65, 0x03, 0xe2, 0xb7, 0xbc, 0xb7, 0xbe, 0xd4, + 0x6f, 0x31, 0x77, 0x3a, 0x8d, 0xc2, 0xc5, 0xa3, + 0xac, 0x84, 0x70, 0xdc, 0x3d, 0xbc, 0xae, 0x0b, + 0x40, 0x0f, 0x88, 0xde, 0xf0, 0x55, 0x25, 0x67, + 0xd1, 0xf6, 0x58, 0x5c, 0xae, 0x5a, 0x33, 0x9c, + 0xb9, 0x73, 0xe5, 0xa8, 0x6c, 0x10, 0x38, 0xf8, + 0xa6, 0x9b, 0x82, 0xc8, 0xf6, 0x89, 0x83, 0x36, + 0x19, 0xf8, 0xa6, 0x70, 0xea, 0xf1, 0xf7, 0x01, + 0xad, 0x63, 0xdb, 0xfb, 0x14, 0xe4, 0x55, 0x16, + 0x49, 0x24, 0x52, 0x32, 0x58, 0xcf, 0x0c, 0x91, + 0x9e, 0x26, 0x38, 0x6f, 0x04, 0x2e, 0xb3, 0x66, + 0xfb, 0x5d, 0x77, 0xa4, 0x5d, 0x6b, 0x39, 0x06, + 0xf6, 0x16, 0x80, 0xf3, 0xca, 0x1e, 0x37, 0x1f, + 0x75, 0x07, 0x8e, 0x2b, 0x46, 0x68, 0x8c, 0x86, + 0x9f, 0x64, 0x91, 0x3b, 0x8e, 0x31, 0xf1, 0xee, + 0x5c, 0x68, 0xee, 0x2f, 0xf7, 0x2c, 0x09, 0x3d, + 0x9a, 0xe4, 0xf1, 0x37, 0x91, 0x64, 0xf0, 0x17, + 0x42, 0x6e, 0xa8, 0xf1, 0x35, 0x8f, 0x3c, 0x35, + 0x1c, 0xdb, 0x37, 0xad, 0x1e, 0x8f, 0xc9, 0x9c, + 0x66, 0x42, 0xe7, 0x4e, 0x65, 0xc9, 0x65, 0xa5, + 0xc9, 0x31, 0x3d, 0xa7, 0x67, 0x0b, 0xce, 0xc6, + 0xb9, 0x79, 0xdd, 0xe6, 0x35, 0x3e, 0x8f, 0xcb, + 0x49, 0x61, 0x1d, 0xd3, 0x9f, 0x0b, 0x4d, 0x61, + 0x0f, 0xf1, 0x83, 0xa3, 0xde, 0xdd, 0xae, 0xaa, + 0x83, 0x6b, 0xaf, 0x30, 0x99, 0x1b, 0x67, 0x5b, + 0xe7, 0xed, 0x2b, 0x67, 0x25, 0xc8, 0x6b, 0x6f, + 0x18, 0xd2, 0x5a, 0x1a, 0xf2, 0x77, 0x95, 0xa8, + 0x1a, 0x0f, 0x56, 0x64, 0xa5, 0x8d, 0xcf, 0xa4, + 0xb1, 0xcf, 0x42, 0x27, 0x2f, 0x2e, 0x65, 0x0f, + 0x2a, 0xdd, 0xc3, 0xed, 0x3e, 0xcf, 0x27, 0x66, + 0xfc, 0x7e, 0x7e, 0xd2, 0x91, 0xca, 0xde, 0x07, + 0x3e, 0x3d, 0xbb, 0x7e, 0x51, 0xae, 0xe5, 0x52, + 0xb8, 0xd4, 0x79, 0x28, 0x6d, 0xa4, 0xc4, 0xd9, + 0x5d, 0xbc, 0xe3, 0x9a, 0xfa, 0xc4, 0xea, 0xd1, + 0xfc, 0x3c, 0xd5, 0x08, 0xab, 0x06, 0xb3, 0xbd, + 0xb3, 0xc5, 0xe0, 0x2c, 0xb4, 0x9d, 0xac, 0xde, + 0x53, 0x2c, 0x14, 0x75, 0xd4, 0x95, 0xa8, 0x04, + 0x6d, 0xa5, 0x55, 0x18, 0xff, 0x00, 0xad, 0x14, + 0x12, 0x49, 0x25, 0xc4, 0xb8, 0x9d, 0xee, 0x3b, + 0x49, 0x2b, 0xe4, 0x93, 0x54, 0x02, 0x54, 0x55, + 0x09, 0x5f, 0x24, 0xa0, 0x95, 0xf3, 0x54, 0xa9, + 0x5b, 0x2c, 0x1e, 0x9e, 0xc9, 0xe7, 0xae, 0xc5, + 0xb6, 0x3e, 0x3a, 0xd3, 0xe3, 0xc8, 0x76, 0x35, + 0xbd, 0xf5, 0x6c, 0x6b, 0xe1, 0x86, 0x59, 0xe5, + 0x6c, 0x30, 0xb0, 0xc9, 0x2b, 0xcd, 0x1a, 0xc6, + 0xed, 0x24, 0x95, 0xd5, 0x74, 0x3f, 0xb3, 0x08, + 0xed, 0xc3, 0x32, 0x59, 0xd6, 0x07, 0xcc, 0x68, + 0xe8, 0xad, 0xce, 0xe6, 0x9f, 0xf7, 0x2b, 0x06, + 0x93, 0xf6, 0x7f, 0x8a, 0xc0, 0xb1, 0x93, 0xbd, + 0x82, 0x6b, 0xf0, 0x3c, 0x69, 0x9d, 0xb4, 0x02, + 0x79, 0x86, 0xe5, 0x6b, 0xa2, 0x82, 0x18, 0xc6, + 0xc6, 0xc0, 0xc6, 0x0e, 0x16, 0xb4, 0x50, 0x01, + 0xb8, 0x05, 0xf4, 0x88, 0x80, 0x88, 0xbc, 0xdf, + 0x33, 0x18, 0x0d, 0x4e, 0xed, 0xa8, 0x3e, 0xd2, + 0xa3, 0x9d, 0x55, 0x32, 0x3a, 0xe6, 0x08, 0x1e, + 0xf8, 0x60, 0x8c, 0xb9, 0xec, 0x34, 0x26, 0x8b, + 0x0a, 0xd3, 0x57, 0x65, 0xaf, 0xee, 0x44, 0x30, + 0x30, 0x34, 0x52, 0xae, 0x71, 0xdc, 0x07, 0x39, + 0x41, 0x78, 0x52, 0xab, 0x51, 0xe7, 0xaf, 0xad, + 0x26, 0x8c, 0xde, 0x81, 0x2d, 0xa4, 0xa7, 0x84, + 0x4e, 0xcd, 0xa0, 0x1e, 0xea, 0xb1, 0xb1, 0xc1, + 0xec, 0x0e, 0x6e, 0xd0, 0xe1, 0x51, 0xde, 0x42, + 0x62, 0x62, 0x6a, 0x62, 0xa6, 0x12, 0xed, 0x80, + 0xae, 0x77, 0x3e, 0x3f, 0x25, 0x9c, 0xca, 0xdd, + 0xc4, 0xc9, 0xcf, 0x0c, 0x2e, 0x22, 0x84, 0xd0, + 0x51, 0x74, 0x47, 0x7c, 0x53, 0xde, 0x54, 0x3b, + 0x5b, 0xa9, 0x6c, 0xe4, 0xcd, 0x5c, 0x43, 0xb2, + 0x46, 0x3b, 0x67, 0xba, 0x50, 0x44, 0x3a, 0x3f, + 0x33, 0x00, 0xa4, 0x52, 0x35, 0xbd, 0xd0, 0x57, + 0xa7, 0xab, 0x3a, 0x86, 0xbf, 0xf6, 0x3d, 0xf5, + 0x5e, 0xcf, 0xeb, 0x8c, 0xed, 0x9d, 0x9c, 0x73, + 0x42, 0xf0, 0x1c, 0xe7, 0x50, 0xad, 0xaf, 0xad, + 0x59, 0x63, 0x61, 0x6f, 0x3f, 0x1f, 0x8c, 0xf8, + 0x98, 0xe3, 0xdf, 0x71, 0x1e, 0x14, 0x19, 0xbe, + 0xac, 0x6a, 0x1f, 0x38, 0x1d, 0x2a, 0x3d, 0x59, + 0xd4, 0x1e, 0x70, 0x3a, 0x55, 0x46, 0x5f, 0x68, + 0x7a, 0x81, 0xb9, 0x79, 0x6d, 0x5a, 0xf1, 0xc0, + 0xd7, 0x10, 0x3d, 0xc5, 0x62, 0x8f, 0x55, 0xe5, + 0xdc, 0x48, 0x2e, 0xff, 0x00, 0xd6, 0xd7, 0x7b, + 0xa5, 0x50, 0xca, 0xe2, 0xf3, 0x78, 0xdb, 0x71, + 0x3c, 0xd7, 0x15, 0x61, 0x3c, 0x3b, 0x0f, 0x3a, + 0xc7, 0xb6, 0xb1, 0x8c, 0x01, 0x24, 0xbe, 0x3b, + 0xdd, 0xb6, 0xa7, 0x6a, 0xd8, 0xde, 0xe4, 0x2e, + 0x32, 0x1a, 0x5b, 0xca, 0x2e, 0x0d, 0x5e, 0x27, + 0x2c, 0xf7, 0x01, 0x58, 0xd1, 0xff, 0x00, 0x29, + 0x9d, 0xe0, 0xa0, 0xfb, 0x14, 0x1b, 0x85, 0x10, + 0xee, 0x2a, 0x14, 0xbb, 0x71, 0x41, 0x38, 0xa0, + 0x4e, 0x9e, 0xca, 0x81, 0xb7, 0xc6, 0xdd, 0xd0, + 0xbd, 0xf1, 0x1a, 0xb6, 0xde, 0xcf, 0x1d, 0x15, + 0xb3, 0xe2, 0x71, 0x74, 0x63, 0x69, 0xa6, 0xc5, + 0x97, 0xa1, 0x58, 0xd9, 0x21, 0xbc, 0x63, 0xc7, + 0x13, 0x5c, 0xfa, 0x10, 0x77, 0x6e, 0x0a, 0xc3, + 0x3d, 0x96, 0x2a, 0xde, 0x27, 0x4b, 0x2c, 0x51, + 0xb2, 0x36, 0x0a, 0xb9, 0xc4, 0x01, 0x44, 0x1a, + 0x01, 0xad, 0xed, 0x7b, 0x17, 0x74, 0x2f, 0x93, + 0xae, 0x6c, 0x46, 0xf6, 0x10, 0xab, 0x3a, 0xb3, + 0xda, 0x26, 0x2e, 0xdb, 0xac, 0xb2, 0xc3, 0x40, + 0xc9, 0x1f, 0xb4, 0x3a, 0x6a, 0x0a, 0x7b, 0x8a, + 0x97, 0x87, 0xc6, 0x67, 0xb5, 0x0d, 0xe7, 0x0d, + 0xa0, 0x7b, 0x84, 0x86, 0xaf, 0x93, 0x90, 0x0a, + 0xed, 0x41, 0xd4, 0xef, 0xf5, 0xa5, 0x95, 0xcd, + 0x94, 0xd6, 0xcc, 0x69, 0xe3, 0x91, 0xb4, 0x0b, + 0x65, 0xa4, 0x3e, 0xe5, 0x67, 0x7c, 0xad, 0x4e, + 0x3f, 0x42, 0x5a, 0x60, 0xf1, 0x33, 0xdc, 0x4e, + 0xf3, 0x3d, 0xd9, 0x8c, 0xf1, 0x38, 0xee, 0x07, + 0xb8, 0xb6, 0xfa, 0x43, 0x6e, 0x15, 0xbf, 0x38, + 0xa0, 0xdc, 0x9e, 0x45, 0x0a, 0x4a, 0x84, 0x12, + 0x11, 0x42, 0x9a, 0xaa, 0x2a, 0xda, 0xe7, 0xe2, + 0xda, 0xfc, 0xf5, 0xaf, 0x1f, 0x14, 0x77, 0x82, + 0xd8, 0x6b, 0x9f, 0x8b, 0x6b, 0xf3, 0xd6, 0xbc, + 0x7c, 0x51, 0xde, 0x08, 0x08, 0xef, 0x88, 0xee, + 0xf2, 0x23, 0xbe, 0x23, 0xbb, 0xc8, 0x36, 0x7a, + 0x23, 0xf9, 0x17, 0x5f, 0x39, 0x59, 0xc6, 0xf0, + 0xa8, 0xda, 0x6f, 0x3d, 0x69, 0x8c, 0x8e, 0x78, + 0xe7, 0x04, 0x97, 0xb8, 0xd2, 0x8b, 0x74, 0x35, + 0xa6, 0x36, 0xbf, 0xcb, 0x77, 0x42, 0x0d, 0x1e, + 0x5b, 0xf3, 0x24, 0xbf, 0x34, 0x2f, 0x3b, 0x8b, + 0xa8, 0xed, 0xdb, 0x57, 0x1a, 0xbb, 0x91, 0xab, + 0xc2, 0xfa, 0xee, 0x4c, 0x86, 0x61, 0xf3, 0x58, + 0xc6, 0xe7, 0x19, 0x76, 0x34, 0x00, 0xac, 0x78, + 0x6d, 0x1e, 0xc6, 0xf0, 0xdd, 0x64, 0x8f, 0x1c, + 0xbb, 0xf8, 0x0e, 0xe0, 0x92, 0x35, 0x38, 0x9c, + 0x0d, 0xf6, 0x6a, 0x41, 0x35, 0xc5, 0x62, 0xb5, + 0x69, 0xdd, 0xb8, 0x95, 0x77, 0xb1, 0xc6, 0xda, + 0x58, 0x44, 0x23, 0xb7, 0x60, 0x68, 0x68, 0xda, + 0xee, 0x52, 0xbd, 0x64, 0x7c, 0x16, 0xb0, 0x71, + 0x38, 0x88, 0xa2, 0x60, 0xef, 0x2a, 0x86, 0x53, + 0x54, 0xde, 0x5f, 0xca, 0xeb, 0x2c, 0x4b, 0x4f, + 0x0e, 0xe7, 0x48, 0x14, 0x1b, 0x8c, 0xd6, 0xa3, + 0x86, 0xce, 0xb6, 0xf6, 0xd4, 0x96, 0xe0, 0xec, + 0x14, 0xda, 0x01, 0x2a, 0xb8, 0xcb, 0x59, 0xae, + 0x64, 0xf2, 0x8b, 0xe7, 0x97, 0xb8, 0xed, 0xe1, + 0x5e, 0x0c, 0xc0, 0x65, 0xda, 0x7a, 0xe2, 0xea, + 0xc9, 0xbc, 0xd5, 0x19, 0x91, 0xba, 0xb5, 0x9b, + 0xa8, 0xbf, 0x61, 0x6d, 0x76, 0x07, 0x72, 0x20, + 0xd9, 0x80, 0x1a, 0x28, 0xdd, 0x80, 0x6e, 0xa2, + 0x20, 0xa1, 0x00, 0x8d, 0xa0, 0x8a, 0x82, 0xa4, + 0x04, 0x1a, 0xfc, 0xd4, 0x65, 0xd6, 0xa2, 0x46, + 0x8a, 0xba, 0x37, 0x07, 0x7b, 0x8b, 0x7d, 0x8d, + 0xb9, 0x6d, 0xd5, 0x84, 0x53, 0x34, 0xef, 0x68, + 0x07, 0xbe, 0x16, 0xbd, 0xec, 0x0f, 0x63, 0x98, + 0xe1, 0x56, 0xb8, 0x50, 0xac, 0x0c, 0x75, 0xf4, + 0x98, 0x5b, 0xb3, 0x6d, 0x3e, 0xdb, 0x59, 0x0d, + 0x5a, 0x4f, 0x22, 0x0b, 0x42, 0x2f, 0x98, 0xe6, + 0x86, 0x66, 0x87, 0x44, 0xf0, 0x5a, 0x76, 0x85, + 0xe5, 0x77, 0x7f, 0x6b, 0x67, 0x19, 0x92, 0x57, + 0x81, 0x4d, 0xc3, 0x9c, 0xa0, 0xd6, 0xea, 0x99, + 0xc3, 0x2d, 0x23, 0xb6, 0x07, 0xc7, 0x9d, 0xc0, + 0x1e, 0xf1, 0x5e, 0xce, 0xcb, 0xcc, 0x2d, 0x60, + 0xc4, 0xe2, 0x5b, 0xc7, 0x23, 0x58, 0x1a, 0xf9, + 0x06, 0xe0, 0x68, 0xb5, 0x96, 0xb8, 0xdc, 0x8e, + 0xa3, 0xbe, 0xf2, 0xa7, 0x83, 0x1d, 0xab, 0x4d, + 0x1a, 0x4f, 0x37, 0x71, 0x5d, 0x31, 0x78, 0x7b, + 0x4c, 0x74, 0x5c, 0x10, 0xb6, 0xae, 0x3f, 0x19, + 0xe7, 0x79, 0x28, 0x3e, 0xf1, 0x50, 0x5d, 0x41, + 0x66, 0xc8, 0xee, 0xdf, 0xc7, 0x30, 0x1e, 0x31, + 0xde, 0xb3, 0x14, 0x29, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x15, 0x3c, 0xdf, 0xe6, 0x9b, 0x0e, 0xfc, + 0x7f, 0xbc, 0xad, 0x63, 0x95, 0x55, 0x33, 0x7f, + 0x9a, 0x6c, 0x7b, 0xf1, 0xfe, 0xf2, 0xb5, 0x8e, + 0x54, 0x12, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x0a, 0xa5, 0xaa, 0xfe, 0xfb, 0xc7, 0x77, + 0x9b, 0xfd, 0xc0, 0xad, 0xaa, 0xa5, 0xaa, 0xfe, + 0xfa, 0xc7, 0x77, 0x9b, 0xfd, 0xc0, 0x82, 0xd9, + 0xca, 0xa5, 0x42, 0x94, 0x1f, 0x2f, 0x70, 0x6b, + 0x4b, 0x9c, 0x68, 0x06, 0xd2, 0x4a, 0xae, 0xe5, + 0xf5, 0x7d, 0xad, 0xaf, 0x14, 0x16, 0x9f, 0xc6, + 0x9c, 0xec, 0x14, 0xdc, 0x0a, 0xde, 0x5f, 0xc0, + 0x6e, 0x2c, 0xe5, 0x84, 0x1a, 0x17, 0xb4, 0x80, + 0x42, 0xe6, 0xb6, 0x70, 0x88, 0x64, 0x9a, 0x27, + 0x8f, 0xe2, 0xc6, 0xe2, 0x09, 0x3b, 0x77, 0x20, + 0xf4, 0x9d, 0xf7, 0xf9, 0x39, 0x7a, 0xeb, 0xe9, + 0x09, 0x6e, 0xf0, 0xca, 0xec, 0x5e, 0xac, 0x8d, + 0xb1, 0xb7, 0x85, 0xa0, 0x00, 0x39, 0x57, 0xcd, + 0xc5, 0xc4, 0x56, 0xec, 0xe3, 0x94, 0xd0, 0x2d, + 0x45, 0xcd, 0xe6, 0x42, 0xee, 0x29, 0x24, 0xb6, + 0x89, 0xcd, 0xb5, 0x67, 0xc6, 0x91, 0x06, 0x7d, + 0xd6, 0x5a, 0xda, 0xdc, 0x11, 0x5e, 0x37, 0xf3, + 0x05, 0xa3, 0xba, 0xc9, 0x5c, 0xcf, 0x23, 0x5e, + 0x4f, 0x0b, 0x5a, 0x6b, 0xc2, 0x16, 0x2d, 0x49, + 0xda, 0x4d, 0x4f, 0x3a, 0x20, 0xb6, 0xdb, 0xbd, + 0xb7, 0x36, 0xcd, 0x70, 0xda, 0x1c, 0x36, 0xf7, + 0xd7, 0x8d, 0x89, 0xea, 0xe4, 0x7d, 0xbb, 0xb7, + 0x8d, 0xa1, 0x63, 0x60, 0x67, 0x2f, 0x85, 0xd0, + 0x1d, 0xec, 0xdc, 0xbd, 0x6f, 0x78, 0xa1, 0xb9, + 0x8e, 0x71, 0xb8, 0xec, 0x2b, 0x39, 0xe5, 0x18, + 0xc5, 0xce, 0xd8, 0xe2, 0xef, 0xe9, 0xb4, 0x3e, + 0xfe, 0x73, 0xa7, 0x75, 0x78, 0xcc, 0xfb, 0x6b, + 0x6d, 0x33, 0xea, 0xbe, 0x3e, 0x2b, 0xfb, 0x87, + 0x62, 0xfa, 0x1b, 0x40, 0x23, 0x95, 0x43, 0x9a, + 0x48, 0xd8, 0xb5, 0xe8, 0xb3, 0x8c, 0x35, 0x33, + 0xd1, 0xca, 0x76, 0x65, 0xb3, 0xbb, 0x2d, 0xde, + 0xe7, 0xcb, 0xd7, 0xd3, 0xca, 0x30, 0x9a, 0x8f, + 0xea, 0x68, 0xe5, 0xf7, 0x74, 0xe3, 0x9f, 0x3c, + 0x59, 0x9a, 0x56, 0xec, 0xd8, 0xe6, 0x9f, 0x6c, + 0xed, 0x91, 0xdc, 0x8d, 0x9d, 0xf5, 0x7c, 0x5c, + 0xc6, 0x72, 0xe8, 0x66, 0x82, 0xe9, 0xa6, 0x8e, + 0x89, 0xe0, 0x92, 0x39, 0x97, 0x49, 0xb5, 0x99, + 0xb3, 0xdb, 0xc7, 0x2b, 0x4d, 0x43, 0xda, 0x0a, + 0xb3, 0xbd, 0xec, 0x89, 0xb8, 0x89, 0xe7, 0x0f, + 0x65, 0x14, 0x52, 0x8a, 0x2a, 0x28, 0xa5, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x79, 0xcf, 0x28, 0x86, 0x17, 0xca, 0x76, 0x86, + 0x02, 0x69, 0xde, 0x5c, 0xc7, 0x31, 0xab, 0x72, + 0x99, 0x39, 0x5d, 0x0b, 0x38, 0xa0, 0xb7, 0xe2, + 0xa5, 0x06, 0xc3, 0x45, 0xd3, 0xe5, 0x01, 0xd1, + 0xb8, 0x1d, 0xa0, 0x83, 0x50, 0xaa, 0xc7, 0x1d, + 0x05, 0x4f, 0xfc, 0x7d, 0xe7, 0x99, 0x06, 0x82, + 0xc2, 0xff, 0x00, 0x4f, 0xd8, 0xc4, 0xd2, 0x21, + 0x2f, 0xb8, 0x3f, 0x1e, 0x43, 0xb7, 0x6a, 0xcf, + 0xf5, 0xb2, 0xc6, 0x94, 0xa3, 0xa9, 0xcd, 0xb5, + 0x67, 0xfa, 0x36, 0xdf, 0xcd, 0xfd, 0xe5, 0x1e, + 0x8c, 0xb7, 0xf3, 0x71, 0xd0, 0x83, 0x03, 0xd6, + 0x9c, 0x7f, 0xc8, 0x3d, 0x08, 0xed, 0x59, 0x64, + 0xd6, 0x92, 0xd6, 0x12, 0x46, 0xe1, 0x45, 0xb0, + 0x18, 0xdb, 0x7f, 0x37, 0x1d, 0x0b, 0xe2, 0x5c, + 0x7d, 0xbf, 0x56, 0xfe, 0x1b, 0x7d, 0xb4, 0xd9, + 0xb1, 0x05, 0x5a, 0xee, 0xea, 0xf7, 0x2d, 0x2f, + 0x1c, 0xa4, 0xb2, 0xdf, 0x91, 0xab, 0x69, 0x88, + 0xd3, 0xf7, 0x17, 0x34, 0x10, 0x33, 0xab, 0x88, + 0x7e, 0xd9, 0x5b, 0x4c, 0x36, 0x98, 0x92, 0x67, + 0x75, 0xd7, 0x63, 0x82, 0x20, 0x6a, 0xd8, 0xf9, + 0xfb, 0xea, 0xdb, 0x14, 0x31, 0xc2, 0xc1, 0x1c, + 0x6d, 0x0d, 0x68, 0xe4, 0x0a, 0x8e, 0x77, 0x93, + 0xf6, 0x57, 0x73, 0x91, 0x98, 0xbe, 0x5b, 0xd2, + 0x19, 0xfb, 0x2d, 0x1b, 0x96, 0x17, 0xe8, 0xb0, + 0xf3, 0xb3, 0xef, 0x2e, 0xaa, 0x8a, 0x0e, 0x55, + 0xfa, 0x2c, 0x3c, 0xec, 0xfb, 0xc9, 0xfa, 0x2d, + 0xff, 0x00, 0xf5, 0x67, 0xde, 0x5d, 0x55, 0x10, + 0x72, 0xaf, 0xd1, 0x61, 0xe7, 0x67, 0xde, 0x4f, + 0xd1, 0x61, 0xe7, 0x67, 0xde, 0x5d, 0x55, 0x10, + 0x72, 0xaf, 0xd1, 0x61, 0xe7, 0x67, 0xde, 0x4f, + 0xd1, 0x61, 0xe7, 0x67, 0xde, 0x5d, 0x55, 0x10, + 0x72, 0xaf, 0xd1, 0x61, 0xe7, 0x67, 0xde, 0x4f, + 0xd1, 0x6f, 0xff, 0x00, 0xab, 0x3e, 0xf2, 0xea, + 0xa8, 0x83, 0x95, 0x7e, 0x8b, 0x0f, 0x3b, 0x3e, + 0xf2, 0x7e, 0x8b, 0x0f, 0x3b, 0x3e, 0xf2, 0xea, + 0xa8, 0x83, 0x95, 0x7e, 0x8b, 0x0f, 0x3b, 0x3e, + 0xf2, 0x7e, 0x8b, 0x0f, 0x3b, 0x3e, 0xf2, 0xea, + 0xa8, 0x83, 0x95, 0x7e, 0x8b, 0x0f, 0x3b, 0x3e, + 0xf2, 0x7e, 0x8b, 0x7f, 0xfd, 0x59, 0xf7, 0x97, + 0x55, 0x44, 0x1c, 0xab, 0xf4, 0x58, 0x79, 0xd9, + 0xf7, 0x93, 0xf4, 0x58, 0x79, 0xd9, 0xf7, 0x97, + 0x55, 0x44, 0x1c, 0xab, 0xf4, 0x58, 0x79, 0xd9, + 0xf7, 0x93, 0xf4, 0x58, 0x79, 0xd9, 0xf7, 0x97, + 0x55, 0x44, 0x1c, 0xab, 0xf4, 0x58, 0x79, 0xd9, + 0xf7, 0x93, 0xf4, 0x58, 0x79, 0xd9, 0xf7, 0x97, + 0x55, 0x44, 0x1c, 0xab, 0xf4, 0x58, 0x79, 0xd9, + 0xf7, 0x93, 0xf4, 0x58, 0x79, 0xd9, 0xf7, 0x97, + 0x55, 0x44, 0x1c, 0xab, 0xf4, 0x58, 0x79, 0xd9, + 0xf7, 0x93, 0xf4, 0x58, 0x79, 0xd9, 0xf7, 0x97, + 0x55, 0x44, 0x1c, 0xab, 0xf4, 0x58, 0x79, 0xd9, + 0xf7, 0x93, 0xf4, 0x5b, 0xff, 0x00, 0xea, 0xcf, + 0xbc, 0xba, 0xaa, 0x20, 0xe5, 0x5f, 0xa2, 0xc3, + 0xce, 0xcf, 0xbc, 0xa4, 0x7b, 0x1a, 0x31, 0x82, + 0xe6, 0xdd, 0x9d, 0xdb, 0xb6, 0x50, 0xae, 0xa8, + 0xa0, 0xa0, 0xfc, 0xcd, 0x93, 0xc7, 0xcd, 0x8d, + 0xbf, 0x9a, 0xca, 0x66, 0xd1, 0xd1, 0x38, 0x8f, + 0x71, 0x62, 0xd1, 0x75, 0x2f, 0x6b, 0xfa, 0x75, + 0x9c, 0x30, 0xe6, 0x6d, 0x99, 0xc2, 0x58, 0x0b, + 0x6e, 0x28, 0x36, 0x1a, 0x9d, 0xe5, 0x72, 0xda, + 0xa0, 0x22, 0x27, 0xc2, 0x80, 0x84, 0x04, 0x5b, + 0xbd, 0x37, 0xa4, 0x72, 0xda, 0x86, 0x76, 0x8b, + 0x66, 0x16, 0x5b, 0xd7, 0xc7, 0x99, 0xdb, 0x05, + 0x39, 0x68, 0x82, 0xfb, 0xec, 0x8f, 0x53, 0x19, + 0xa0, 0x7e, 0x12, 0xe1, 0xc5, 0xcf, 0x8a, 0xa6, + 0x13, 0xfe, 0xd5, 0xd2, 0x64, 0x8d, 0xb2, 0x46, + 0xe8, 0xdd, 0xb5, 0xaf, 0x05, 0xa7, 0xdd, 0x5a, + 0x1d, 0x2d, 0xa3, 0x71, 0x7a, 0x72, 0x11, 0xd4, + 0x33, 0x8e, 0xe8, 0x8f, 0xe2, 0x4c, 0x77, 0x9a, + 0xf3, 0x2b, 0x02, 0x0e, 0x71, 0xa8, 0xf4, 0x2d, + 0x8e, 0x17, 0x15, 0x26, 0x5b, 0x1a, 0x09, 0xbd, + 0xb6, 0x9c, 0x5c, 0xf1, 0xff, 0x00, 0xb6, 0xbb, + 0x5a, 0x16, 0xf7, 0x3d, 0x1b, 0x35, 0x1e, 0x8b, + 0xf2, 0xbb, 0x62, 0x1d, 0x2f, 0x54, 0xdb, 0x98, + 0x5d, 0xcc, 0xf6, 0x00, 0xef, 0xf2, 0x56, 0x5b, + 0xbb, 0x78, 0xee, 0xad, 0xa5, 0xb6, 0x94, 0x55, + 0x93, 0x34, 0xb1, 0xc3, 0xb8, 0x45, 0x17, 0x13, + 0xc9, 0x6a, 0xbc, 0xce, 0x0a, 0xca, 0xe3, 0x4a, + 0x44, 0x3a, 0xa6, 0x5b, 0xc8, 0xf6, 0xf5, 0xbf, + 0xb5, 0xd5, 0xb8, 0x92, 0x07, 0xbe, 0x82, 0xf9, + 0x80, 0xf6, 0x8b, 0x88, 0xb9, 0x8f, 0x1f, 0x8f, + 0x79, 0x71, 0xbc, 0x95, 0xa2, 0x39, 0x39, 0x9a, + 0xe6, 0x8a, 0x1a, 0xad, 0xbe, 0xb5, 0xce, 0x0c, + 0x2e, 0x9e, 0xb9, 0xbb, 0x69, 0xfe, 0x2b, 0x9b, + 0xd5, 0xc5, 0xf3, 0x9d, 0xb2, 0xab, 0x87, 0x69, + 0xdc, 0x5e, 0x57, 0x25, 0x94, 0x83, 0xd1, 0xd1, + 0xba, 0x49, 0x19, 0x23, 0x5e, 0x64, 0xa6, 0xc1, + 0xb4, 0x12, 0x4a, 0xe8, 0x1e, 0xd7, 0xee, 0x2e, + 0x22, 0xc3, 0xe3, 0xad, 0x24, 0x35, 0x2e, 0x3f, + 0xc5, 0xa6, 0xe2, 0x43, 0x42, 0x0e, 0x5b, 0x23, + 0xdf, 0x24, 0x8e, 0x95, 0xe4, 0xb9, 0xef, 0x71, + 0x73, 0x9c, 0x77, 0x92, 0x77, 0xac, 0xc0, 0x7c, + 0x41, 0xde, 0x58, 0x27, 0xde, 0x59, 0xa0, 0xf8, + 0xa1, 0x54, 0x94, 0xd5, 0x6f, 0x74, 0x5e, 0xa3, + 0x93, 0x03, 0x99, 0x8e, 0x42, 0x7f, 0xe2, 0xce, + 0x78, 0x27, 0x15, 0xd9, 0x43, 0xcb, 0xee, 0x2d, + 0x01, 0xde, 0xbe, 0x5d, 0xb4, 0x20, 0xe8, 0xfe, + 0xd3, 0xb4, 0xe8, 0x91, 0xb1, 0x6a, 0x5c, 0x68, + 0xe2, 0x69, 0x0d, 0xeb, 0xb8, 0x39, 0x8e, 0xd0, + 0xf5, 0x83, 0x92, 0xbe, 0xc3, 0x66, 0x74, 0x85, + 0xad, 0xde, 0x6e, 0x4e, 0xaf, 0x27, 0x6d, 0x58, + 0xe1, 0x0d, 0xda, 0xf7, 0x8a, 0x6c, 0xaa, 0x8b, + 0x4f, 0x68, 0x4e, 0xc6, 0xe9, 0x58, 0x71, 0xac, + 0xa5, 0xdd, 0xf3, 0x81, 0x6f, 0xf1, 0x28, 0x5a, + 0xc6, 0x72, 0x57, 0xba, 0xa8, 0xf7, 0x13, 0xc9, + 0x71, 0x2b, 0xa7, 0x94, 0xd5, 0xee, 0x35, 0xa6, + 0xe0, 0x2b, 0xcc, 0x02, 0x0f, 0x82, 0x6b, 0xbf, + 0x6a, 0x82, 0x42, 0x82, 0x54, 0x55, 0x15, 0x24, + 0xec, 0x50, 0x4a, 0x8a, 0x85, 0x15, 0xa2, 0x90, + 0x04, 0xaf, 0x92, 0x68, 0xbe, 0x98, 0xd9, 0x25, + 0x7b, 0x63, 0x8d, 0xa5, 0xcf, 0x79, 0x01, 0xad, + 0x02, 0xa4, 0x92, 0xb2, 0xef, 0xb1, 0x59, 0x1c, + 0x3c, 0xb1, 0xba, 0xf6, 0x17, 0x44, 0xe3, 0x47, + 0xb7, 0x8d, 0xbb, 0x39, 0xd2, 0x46, 0xfb, 0x47, + 0xe8, 0x1c, 0x8e, 0xa1, 0x91, 0x97, 0x32, 0x8e, + 0xa3, 0x1e, 0xd3, 0xe3, 0x3d, 0xdb, 0x1c, 0xe1, + 0xfe, 0xd0, 0xbb, 0x4e, 0x1b, 0x09, 0x8f, 0xc3, + 0x5a, 0x32, 0xd2, 0xc2, 0x26, 0xc5, 0x1b, 0x06, + 0xd2, 0x37, 0x9e, 0xe9, 0x3b, 0xd5, 0x6b, 0x41, + 0x6b, 0x7c, 0x7e, 0x5e, 0xd1, 0x96, 0x52, 0x06, + 0x5b, 0xdd, 0xc4, 0xd0, 0x38, 0x05, 0x1a, 0x1d, + 0xdd, 0x14, 0x57, 0x4a, 0xa0, 0x29, 0x44, 0x40, + 0x5f, 0x12, 0xc8, 0xd8, 0xda, 0x5c, 0xef, 0x71, + 0x25, 0x91, 0x91, 0x30, 0xbd, 0xe6, 0x8d, 0x6e, + 0xd2, 0xb4, 0xd7, 0x19, 0x68, 0x9e, 0xea, 0x8d, + 0xad, 0x1b, 0x82, 0x0c, 0xa9, 0x2e, 0x25, 0x79, + 0xdf, 0xc2, 0x17, 0x93, 0xdd, 0x46, 0x39, 0xc4, + 0xd6, 0x80, 0x9d, 0xbd, 0xe5, 0x82, 0xfc, 0xa1, + 0x1f, 0x15, 0xab, 0xc2, 0x4b, 0xe9, 0xa4, 0xa8, + 0xdc, 0xd3, 0xb0, 0x84, 0x14, 0x9b, 0x97, 0x89, + 0x2e, 0xa6, 0x7f, 0x3b, 0x8f, 0xc2, 0xb7, 0x5a, + 0x6a, 0xdc, 0xdc, 0x59, 0xdf, 0x45, 0x03, 0x83, + 0x6e, 0x9e, 0xca, 0x30, 0x72, 0xd1, 0x6b, 0xf2, + 0xf6, 0x26, 0xda, 0x77, 0x48, 0xd1, 0xe2, 0x3b, + 0x6f, 0x4a, 0xc6, 0xb4, 0xbd, 0x9a, 0xc6, 0xe5, + 0x97, 0x30, 0x3b, 0x85, 0xec, 0x3b, 0x7b, 0xa1, + 0x49, 0x8b, 0x89, 0x8e, 0x6d, 0x69, 0xe7, 0x38, + 0x67, 0x8e, 0x71, 0x11, 0x33, 0x8c, 0xf9, 0xa2, + 0xfa, 0x36, 0x58, 0x8b, 0xfb, 0x8b, 0x29, 0x9f, + 0x88, 0xc9, 0xb4, 0xba, 0x19, 0x2a, 0xde, 0x13, + 0xb6, 0x8e, 0xe4, 0x21, 0x74, 0x0c, 0x33, 0x89, + 0xc7, 0xc6, 0xda, 0xd4, 0xb7, 0x67, 0x42, 0xaf, + 0xc3, 0x77, 0x81, 0xcd, 0x44, 0xdb, 0xf9, 0x8b, + 0x62, 0xba, 0xb7, 0x04, 0xb8, 0x1d, 0xe4, 0xd1, + 0x6e, 0xf4, 0xfb, 0x9c, 0xfc, 0x73, 0x25, 0x23, + 0xe3, 0x92, 0x47, 0x79, 0x63, 0x4f, 0x1c, 0xb1, + 0xb8, 0x99, 0xb8, 0x7a, 0xbd, 0x7f, 0xa9, 0xd2, + 0xf5, 0x39, 0x61, 0xab, 0x86, 0x1f, 0x6f, 0x3c, + 0xa3, 0xfa, 0x91, 0x55, 0x16, 0xd9, 0x1a, 0xd0, + 0xf7, 0x97, 0x3a, 0x9e, 0xe6, 0x08, 0xbd, 0x35, + 0x0b, 0xdd, 0xc3, 0x24, 0xae, 0xf1, 0x07, 0x3d, + 0x17, 0x45, 0x35, 0xe1, 0x3b, 0x17, 0x36, 0xb9, + 0xb0, 0x82, 0xe2, 0x5c, 0xbd, 0xcb, 0xff, 0x00, + 0x99, 0x03, 0x87, 0x0f, 0xba, 0x56, 0xb2, 0xf3, + 0x57, 0xe5, 0xae, 0xf7, 0x0f, 0x4f, 0x8e, 0x84, + 0xe7, 0xfd, 0x79, 0xcb, 0x1c, 0x6b, 0x67, 0x93, + 0x7d, 0xaa, 0x7a, 0x8e, 0x19, 0x2e, 0x6c, 0x23, + 0x8e, 0x11, 0xc6, 0xe0, 0xfa, 0x90, 0x39, 0x96, + 0xe0, 0x4a, 0xcf, 0x46, 0xdb, 0x47, 0x5f, 0x1d, + 0x91, 0x46, 0x08, 0xe6, 0x20, 0xb6, 0xab, 0x53, + 0x9d, 0xb8, 0x92, 0xca, 0xc5, 0x93, 0x42, 0x7c, + 0x67, 0x3a, 0x85, 0x6c, 0xc4, 0x0c, 0xf2, 0x18, + 0x27, 0xdb, 0xc5, 0x2c, 0x6c, 0x71, 0xff, 0x00, + 0xe4, 0x5a, 0xb1, 0x7a, 0xdc, 0xb1, 0x7a, 0xfe, + 0xdf, 0xed, 0xbf, 0xdc, 0xd6, 0xf7, 0x42, 0xb5, + 0x2d, 0x95, 0xc3, 0xb3, 0x93, 0x4e, 0x19, 0x58, + 0xdc, 0xe3, 0x47, 0x77, 0x08, 0x56, 0x88, 0x64, + 0x60, 0x24, 0x93, 0x41, 0xd5, 0x30, 0x7b, 0xa0, + 0xaa, 0xe4, 0xb9, 0x4b, 0x86, 0xe5, 0xe4, 0xb4, + 0x07, 0xf8, 0x6c, 0x71, 0x03, 0xdc, 0x0a, 0xc1, + 0x15, 0xbb, 0x1e, 0x4d, 0x79, 0x18, 0xd7, 0x7b, + 0xa5, 0x2f, 0x5b, 0x96, 0x27, 0xdb, 0xfd, 0xb7, + 0xfb, 0x9a, 0xde, 0xe8, 0x6e, 0x19, 0x3c, 0x4e, + 0xd2, 0xce, 0x80, 0x1f, 0xe2, 0x36, 0x72, 0xe2, + 0xde, 0xe1, 0x25, 0x7a, 0x45, 0xfc, 0xa6, 0x77, + 0x82, 0xc7, 0x86, 0xd2, 0x38, 0xf4, 0xd3, 0xee, + 0x9b, 0xfc, 0xc7, 0xcd, 0xc0, 0x7b, 0xc0, 0xac, + 0x98, 0xb6, 0xc4, 0xce, 0xf0, 0x5d, 0x31, 0xba, + 0x8b, 0xde, 0xf1, 0xeb, 0x46, 0x94, 0x67, 0x3f, + 0x66, 0x66, 0x74, 0xf8, 0x79, 0xb7, 0xa5, 0x49, + 0xdc, 0x54, 0x29, 0x3b, 0x8a, 0xae, 0x68, 0xc1, + 0xea, 0x4c, 0x6e, 0x9f, 0xb4, 0xbb, 0x9a, 0xf5, + 0xe1, 0xae, 0x73, 0x89, 0x8d, 0x9c, 0xae, 0x54, + 0xad, 0x53, 0xaf, 0xb2, 0xba, 0x8a, 0x57, 0x5a, + 0xdb, 0xd6, 0x2b, 0x57, 0x1a, 0x36, 0x36, 0x56, + 0xa5, 0x33, 0x78, 0x8b, 0xfc, 0xc6, 0x4e, 0x2b, + 0x5b, 0x28, 0xdd, 0x23, 0x89, 0x35, 0x3c, 0x83, + 0xbe, 0xaf, 0xfa, 0x3b, 0xd9, 0xad, 0x8e, 0x1c, + 0x32, 0xee, 0xfc, 0x0b, 0x8b, 0xcd, 0x86, 0x84, + 0x6c, 0x69, 0x41, 0x4c, 0xd2, 0x9e, 0xcc, 0x72, + 0x59, 0x27, 0xc7, 0x71, 0x91, 0x06, 0x0b, 0x5d, + 0x8e, 0xe1, 0x3b, 0xdc, 0x17, 0x5f, 0xc5, 0xe1, + 0xec, 0x31, 0x36, 0xcd, 0xb6, 0xb3, 0x88, 0x46, + 0xc6, 0x8a, 0x54, 0x0d, 0xa7, 0xbe, 0xb3, 0x1a, + 0x00, 0x00, 0x01, 0x40, 0x37, 0x05, 0xf4, 0x83, + 0x03, 0x35, 0xf7, 0x55, 0xd7, 0xf4, 0xdd, 0xf0, + 0x2d, 0x56, 0x90, 0xd9, 0x85, 0x6f, 0xce, 0x2b, + 0x6b, 0x9b, 0x70, 0x18, 0xab, 0xa2, 0x4d, 0x3f, + 0x86, 0x7e, 0x05, 0xaa, 0xd2, 0x1f, 0x73, 0x37, + 0xe7, 0x14, 0x1b, 0x92, 0xa1, 0x4a, 0x84, 0x13, + 0x44, 0xa2, 0x85, 0x21, 0x58, 0x15, 0x6d, 0x73, + 0xf1, 0x2d, 0x7e, 0x7a, 0xd7, 0x8f, 0x8a, 0x3b, + 0xc1, 0x6c, 0x35, 0xcf, 0xc4, 0xb5, 0xf9, 0xeb, + 0x5e, 0xdd, 0xc3, 0xbc, 0x10, 0x11, 0xff, 0x00, + 0x15, 0xc4, 0xf3, 0x28, 0x91, 0xec, 0x8d, 0xbc, + 0x4f, 0x34, 0x01, 0x63, 0xc2, 0xcb, 0xdc, 0xb4, + 0xe2, 0xde, 0xcd, 0xa5, 0xb1, 0x9f, 0x8d, 0x26, + 0xe1, 0x44, 0x1b, 0x9d, 0x15, 0x63, 0x67, 0x75, + 0x05, 0xc3, 0xa7, 0x8d, 0xb2, 0x38, 0x3f, 0x61, + 0x21, 0x59, 0x7d, 0x0f, 0x8b, 0xe5, 0xb7, 0x6f, + 0x42, 0xf1, 0xc0, 0xe1, 0x62, 0xc3, 0xda, 0x98, + 0x9a, 0xee, 0x27, 0xbb, 0x6b, 0xc9, 0xe5, 0x2b, + 0x65, 0xb0, 0x0a, 0x9d, 0x8a, 0x0c, 0x78, 0x71, + 0xd6, 0x30, 0x3b, 0x8a, 0x18, 0x5a, 0xd7, 0x73, + 0x80, 0xbc, 0xb2, 0x39, 0x7b, 0x4c, 0x7b, 0x38, + 0xa7, 0x78, 0xe3, 0x3f, 0x15, 0x83, 0x7a, 0xc0, + 0xcc, 0xea, 0x58, 0x6c, 0xc1, 0x82, 0xdb, 0xf8, + 0xb7, 0x07, 0x9b, 0x70, 0x55, 0xd8, 0xad, 0xe6, + 0xbb, 0x9b, 0xca, 0xef, 0x9c, 0x5c, 0xf7, 0x6d, + 0xe1, 0xe6, 0x54, 0x78, 0xe6, 0xf2, 0xf9, 0x0c, + 0xb4, 0xcc, 0x85, 0xb5, 0x8e, 0x39, 0x0d, 0x18, + 0xc1, 0xca, 0x16, 0xf7, 0x15, 0x8c, 0x87, 0x1d, + 0x6e, 0xd6, 0x34, 0x03, 0x29, 0x00, 0xb9, 0xdd, + 0xd5, 0xa9, 0xc7, 0xc6, 0x27, 0xcf, 0x56, 0x9e, + 0x24, 0x2d, 0xd8, 0x3b, 0xaa, 0xc8, 0x77, 0xa0, + 0x54, 0xef, 0xaa, 0xc4, 0xc8, 0xe3, 0xa1, 0xc8, + 0x5b, 0xba, 0x29, 0x00, 0x0f, 0xa5, 0x58, 0xfe, + 0x50, 0x56, 0x52, 0x54, 0x8d, 0xc9, 0x02, 0xa7, + 0x8d, 0x6e, 0x4e, 0x59, 0x64, 0xb1, 0x87, 0x6c, + 0x90, 0x6f, 0xaf, 0x32, 0xd8, 0xfa, 0x2f, 0x50, + 0x0d, 0x9d, 0x5d, 0x57, 0xdc, 0x35, 0xb3, 0xd5, + 0xb1, 0x39, 0x9b, 0x1b, 0x72, 0x28, 0xe1, 0xcf, + 0x55, 0x74, 0x0a, 0x48, 0xa4, 0x7a, 0x33, 0x50, + 0x76, 0x4b, 0xca, 0xe3, 0x07, 0x9a, 0xb9, 0x67, + 0x04, 0xd0, 0x82, 0x39, 0x09, 0xe4, 0x57, 0xb7, + 0xc8, 0xc8, 0xda, 0x5d, 0x23, 0x83, 0x5a, 0x37, + 0x93, 0xb1, 0x56, 0x72, 0x5a, 0x82, 0x7b, 0xd9, + 0x8e, 0x3f, 0x12, 0x0b, 0x9e, 0xe3, 0x47, 0x4a, + 0x37, 0x04, 0x15, 0x29, 0x2d, 0x32, 0x36, 0x53, + 0xf9, 0x33, 0x24, 0x26, 0x4a, 0xd3, 0x84, 0x12, + 0xb7, 0xd8, 0x7d, 0x1f, 0x71, 0x72, 0xf6, 0xdc, + 0xe5, 0x1e, 0x4b, 0x06, 0xd1, 0x19, 0x5b, 0xcc, + 0x36, 0x9d, 0x8a, 0xce, 0x93, 0xdc, 0x9e, 0xba, + 0xe8, 0xed, 0x2e, 0x77, 0x21, 0x5b, 0xa5, 0x64, + 0x7c, 0x41, 0x04, 0x56, 0xf1, 0xb6, 0x28, 0x9a, + 0x1a, 0xc6, 0x8a, 0x00, 0x17, 0xa2, 0x22, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0xa7, + 0x9b, 0xfc, 0xd3, 0x61, 0xdf, 0x8f, 0xf7, 0x95, + 0xac, 0x72, 0xaa, 0xa6, 0x6f, 0xf3, 0x4d, 0x87, + 0x7e, 0x3f, 0xde, 0x56, 0xb1, 0xca, 0x82, 0x51, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x54, + 0xf5, 0x5f, 0xdf, 0x58, 0xfe, 0xf0, 0xfe, 0xe0, + 0x56, 0xc5, 0x52, 0xd5, 0x7f, 0x7d, 0x63, 0xbb, + 0xcd, 0xfe, 0xe0, 0x41, 0x6c, 0x52, 0xa3, 0x95, + 0x4a, 0x02, 0xa0, 0xea, 0x3b, 0x5f, 0x22, 0xce, + 0xf5, 0x8d, 0x1c, 0x31, 0xdc, 0x8a, 0xfb, 0xaa, + 0xfa, 0xab, 0x3a, 0xe2, 0xc4, 0xcb, 0x65, 0x1d, + 0xe3, 0x07, 0x8f, 0x6e, 0xed, 0xbd, 0xe4, 0x15, + 0x2c, 0xcd, 0xbb, 0xa7, 0xb2, 0x75, 0x37, 0xb3, + 0x6a, 0xdf, 0x68, 0x89, 0xad, 0xb2, 0x78, 0x19, + 0xf1, 0x8f, 0x6b, 0x7a, 0xc8, 0xc1, 0x6b, 0x87, + 0x2d, 0x0f, 0x2a, 0xd5, 0xc6, 0xe1, 0x3c, 0x00, + 0xf2, 0x3c, 0x50, 0xf4, 0x2c, 0x1d, 0x35, 0x76, + 0xec, 0x3e, 0xa5, 0x6c, 0x44, 0xd2, 0x29, 0x8f, + 0x03, 0xb9, 0x90, 0x69, 0x6f, 0xad, 0x24, 0xb2, + 0xbe, 0x9a, 0xd1, 0xe2, 0x8e, 0x8d, 0xe4, 0x01, + 0xcb, 0x4e, 0x45, 0xb3, 0xc2, 0xe9, 0x4c, 0xa6, + 0x55, 0xe1, 0xdc, 0x1d, 0x4c, 0x1c, 0xaf, 0x76, + 0xc5, 0xb8, 0xf6, 0x81, 0x69, 0x6f, 0x6d, 0x93, + 0xb7, 0xc8, 0xc6, 0x43, 0x9e, 0xf2, 0x0c, 0x91, + 0xf3, 0xd1, 0x78, 0x5f, 0x6a, 0x9c, 0xee, 0x42, + 0xd5, 0xb1, 0xe3, 0xad, 0x9d, 0x0d, 0xbd, 0x29, + 0xd6, 0x46, 0xde, 0x6d, 0x88, 0x35, 0x2e, 0x84, + 0x62, 0x33, 0x6e, 0xb4, 0x0f, 0x12, 0x35, 0xa4, + 0x37, 0x8c, 0x6e, 0x2b, 0x6f, 0x77, 0x10, 0x9a, + 0xdd, 0xcd, 0x1b, 0xc6, 0xd6, 0xaa, 0xcc, 0xb6, + 0xf9, 0x2e, 0x2e, 0xb2, 0x68, 0x5f, 0xc5, 0x5a, + 0x97, 0x10, 0xac, 0x98, 0xfb, 0x8f, 0x28, 0xb4, + 0x63, 0xc7, 0xc6, 0x02, 0x85, 0x4c, 0xa2, 0x32, + 0x89, 0xc6, 0x77, 0x65, 0x14, 0xde, 0x96, 0xa6, + 0x5a, 0x7a, 0x98, 0xea, 0x63, 0xbf, 0x09, 0xf3, + 0x47, 0x77, 0x04, 0xd9, 0xf5, 0x8d, 0xb6, 0x68, + 0x90, 0x78, 0xc1, 0x7b, 0x92, 0x1a, 0x38, 0x9d, + 0xb0, 0x0e, 0x55, 0x8d, 0x79, 0x7f, 0x0d, 0xa3, + 0x7c, 0x73, 0x57, 0x7c, 0x91, 0xbd, 0x68, 0xaf, + 0x32, 0xb3, 0xdc, 0x8e, 0x11, 0xe2, 0xb0, 0xf2, + 0x26, 0x38, 0xc4, 0x57, 0x3a, 0xab, 0x4d, 0x5c, + 0xfe, 0xe6, 0xa6, 0x5a, 0x93, 0x8c, 0x44, 0xe7, + 0x37, 0x51, 0xba, 0x2d, 0xbf, 0x32, 0x43, 0x77, + 0x14, 0x8d, 0x8c, 0xf1, 0x53, 0x62, 0xb6, 0x68, + 0xab, 0xff, 0x00, 0x28, 0xc6, 0x9b, 0x77, 0x9a, + 0xc9, 0x6e, 0xee, 0x13, 0xde, 0x5c, 0xeb, 0x07, + 0x72, 0x22, 0xb9, 0x30, 0x9f, 0x8b, 0x22, 0xb3, + 0xe9, 0xab, 0xaf, 0x47, 0xe7, 0x0c, 0x4e, 0x34, + 0x8e, 0xe4, 0x6e, 0xee, 0xaa, 0xcb, 0xa0, 0x22, + 0x85, 0x28, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x22, 0x8a, 0x38, 0x1b, + 0xcc, 0x17, 0xd2, 0x20, 0x8e, 0x16, 0xf3, 0x05, + 0x1c, 0x2d, 0xe6, 0x0b, 0xe9, 0x10, 0x7c, 0xf0, + 0x37, 0x98, 0x74, 0x27, 0x56, 0xcf, 0x92, 0x3a, + 0x17, 0xd2, 0x20, 0x80, 0x00, 0xdc, 0xa5, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x62, 0x64, + 0xf1, 0xb6, 0xf9, 0x3b, 0x19, 0x6c, 0xae, 0x47, + 0x14, 0x52, 0x8e, 0x13, 0x55, 0xf9, 0xd3, 0x3d, + 0x8c, 0x76, 0x27, 0x2f, 0x73, 0x60, 0x47, 0x8b, + 0x0b, 0xdc, 0x18, 0x4f, 0x2b, 0x6b, 0xb1, 0x7e, + 0x95, 0x2b, 0x9a, 0x7b, 0x56, 0xd2, 0xac, 0x7d, + 0xb3, 0xb3, 0x70, 0x7c, 0x78, 0xe8, 0x1e, 0xd0, + 0x37, 0x84, 0x1c, 0x9d, 0x3f, 0xc5, 0x50, 0x12, + 0x88, 0x3d, 0x6d, 0xa5, 0x8e, 0x1b, 0x88, 0xa5, + 0x95, 0xbc, 0x71, 0xb1, 0xc0, 0xbd, 0x87, 0x94, + 0x0e, 0x4d, 0x8b, 0xb9, 0xe9, 0x9d, 0x61, 0xa5, + 0x27, 0xb0, 0x8a, 0x3b, 0x69, 0x63, 0xb3, 0x70, + 0x00, 0x18, 0x5d, 0x46, 0x90, 0x79, 0x57, 0x07, + 0x50, 0x09, 0x06, 0xa0, 0x91, 0xde, 0xd8, 0x83, + 0xf5, 0x0c, 0x33, 0xc5, 0x33, 0x04, 0x90, 0xbd, + 0xb2, 0x30, 0xee, 0x73, 0x4d, 0x42, 0xfb, 0x24, + 0x00, 0x49, 0xd8, 0x06, 0xda, 0xaf, 0xcf, 0xba, + 0x5b, 0x5a, 0xe5, 0x74, 0xf5, 0xc8, 0x22, 0x47, + 0x4f, 0x6a, 0x7e, 0x3c, 0x2e, 0x24, 0xf4, 0x55, + 0x74, 0x9b, 0xcf, 0x6a, 0x1a, 0x76, 0x5c, 0x24, + 0xd3, 0x45, 0x21, 0x17, 0x2f, 0x8c, 0xb5, 0x90, + 0x7e, 0xd7, 0x11, 0x08, 0x32, 0x1d, 0xed, 0x47, + 0x4e, 0x47, 0x94, 0x7e, 0x3e, 0x57, 0x3d, 0x81, + 0x8f, 0xea, 0xcc, 0xd4, 0x1c, 0x15, 0x1c, 0xe6, + 0xaa, 0x73, 0x7a, 0x07, 0x01, 0xaa, 0x2e, 0xd9, + 0x97, 0x13, 0x10, 0x64, 0x00, 0xb9, 0xd1, 0x50, + 0x87, 0x80, 0x29, 0xbe, 0xab, 0x86, 0xc8, 0xe3, + 0x23, 0xdf, 0x23, 0xbe, 0x33, 0xc9, 0x71, 0xf7, + 0x4d, 0x55, 0x8f, 0x49, 0xeb, 0xac, 0xae, 0x9d, + 0x90, 0x30, 0x38, 0xdc, 0x59, 0x13, 0xe3, 0x42, + 0xee, 0x4e, 0xeb, 0x50, 0x76, 0xfc, 0x36, 0x07, + 0x19, 0x85, 0xb6, 0x16, 0xf8, 0xf8, 0x44, 0x4d, + 0x1b, 0xcf, 0x29, 0x3d, 0xd2, 0xaa, 0xfe, 0xd5, + 0xb0, 0x93, 0x64, 0x70, 0x62, 0xe6, 0x06, 0xf1, + 0xcb, 0x6a, 0x78, 0x8f, 0xcd, 0xa2, 0xdd, 0x60, + 0xb5, 0xae, 0x0b, 0x37, 0x0b, 0x5f, 0x05, 0xc3, + 0x63, 0x94, 0xef, 0x85, 0xe4, 0x07, 0x02, 0xb6, + 0x57, 0xf9, 0x0c, 0x65, 0xbd, 0xb3, 0x9f, 0x7b, + 0x34, 0x6c, 0x80, 0xb4, 0x97, 0x71, 0x9d, 0x84, + 0x20, 0xfc, 0xd1, 0xcb, 0x4d, 0xcb, 0x2c, 0x1a, + 0x00, 0xb2, 0x35, 0x35, 0xce, 0x2e, 0xe7, 0x35, + 0x71, 0x2e, 0x29, 0x9d, 0x5d, 0xa1, 0x77, 0x8b, + 0xdd, 0xee, 0xac, 0x50, 0x76, 0x05, 0x52, 0x92, + 0x4a, 0xf9, 0x25, 0x09, 0x2a, 0x09, 0x41, 0x1b, + 0x2b, 0xb0, 0x77, 0xca, 0x82, 0xe4, 0xa9, 0x50, + 0x8a, 0x12, 0xbe, 0x6a, 0x95, 0x2b, 0xe4, 0x9a, + 0x6f, 0x4b, 0x13, 0x55, 0x97, 0x8b, 0xc5, 0x5f, + 0x65, 0xee, 0x9b, 0x69, 0x63, 0x11, 0x96, 0x57, + 0x73, 0x6e, 0x03, 0x9c, 0xad, 0x96, 0x96, 0xd1, + 0xf9, 0x3d, 0x45, 0x72, 0xd6, 0xc4, 0xc7, 0x45, + 0x69, 0x5f, 0x1e, 0x72, 0x36, 0x53, 0xb8, 0xbb, + 0x66, 0x9b, 0xd2, 0xd8, 0xed, 0x3f, 0x6a, 0xd8, + 0xad, 0x5a, 0x1d, 0x2d, 0x28, 0xf9, 0x48, 0xf1, + 0x89, 0xe5, 0x50, 0x69, 0xb4, 0x67, 0xb3, 0xcb, + 0x1c, 0x13, 0x1b, 0x73, 0x77, 0x4b, 0x8b, 0xe7, + 0x00, 0x5d, 0xc4, 0x01, 0x6b, 0x0f, 0x30, 0x5b, + 0xec, 0xfe, 0x9d, 0xc7, 0xe7, 0x6c, 0xdd, 0x6d, + 0x77, 0x18, 0x2e, 0x22, 0x8c, 0x92, 0x9b, 0x5a, + 0x79, 0x16, 0xd5, 0x10, 0x7e, 0x76, 0xcf, 0xe0, + 0x32, 0xfa, 0x53, 0x28, 0x0d, 0x5c, 0xc0, 0x1d, + 0x58, 0x67, 0x6e, 0xe2, 0x3b, 0xa5, 0x74, 0xed, + 0x03, 0xed, 0x02, 0x0c, 0xb4, 0x0c, 0xb0, 0xc8, + 0x3c, 0x47, 0x7c, 0xc0, 0x03, 0x49, 0xdc, 0xf1, + 0xdf, 0x56, 0x9c, 0xe6, 0x0e, 0xc7, 0x35, 0x66, + 0xfb, 0x4b, 0xc6, 0x07, 0x07, 0x0f, 0x15, 0xfc, + 0xad, 0x3d, 0xc5, 0xc3, 0xb5, 0x46, 0x95, 0xca, + 0xe9, 0x4c, 0x80, 0x91, 0xa5, 0xdd, 0x48, 0x77, + 0x14, 0x17, 0x0d, 0xff, 0x00, 0x34, 0x1f, 0xa0, + 0xaa, 0xa5, 0x73, 0xbd, 0x05, 0xed, 0x1a, 0x2c, + 0x8b, 0x59, 0x8d, 0xca, 0xbc, 0x47, 0x74, 0x00, + 0x6b, 0x24, 0x3b, 0x9c, 0xba, 0x18, 0xdc, 0x83, + 0xce, 0xe6, 0x11, 0x3c, 0x0f, 0x88, 0xec, 0xe2, + 0x14, 0x5a, 0x28, 0xb0, 0x32, 0xb6, 0x4e, 0x19, + 0x5d, 0xe2, 0x73, 0x85, 0x61, 0x2b, 0xca, 0x43, + 0x57, 0x50, 0x72, 0x20, 0xd2, 0xcb, 0x87, 0x8a, + 0x3a, 0x78, 0xc4, 0xd5, 0x7c, 0xc7, 0x8c, 0x87, + 0xac, 0x6b, 0x1c, 0xed, 0xeb, 0x3e, 0x57, 0x71, + 0x3c, 0xf7, 0x16, 0xb6, 0xf3, 0x25, 0x05, 0x94, + 0xcd, 0x9a, 0x63, 0xe2, 0xb4, 0xec, 0x68, 0xde, + 0x50, 0x66, 0x4d, 0xa6, 0xac, 0xa7, 0x88, 0xc7, + 0x21, 0x24, 0x15, 0x86, 0xcd, 0x0b, 0x8b, 0x6e, + 0xf7, 0x39, 0xdb, 0x79, 0x56, 0xfe, 0xd2, 0xe0, + 0x5c, 0xc0, 0xc9, 0x83, 0x4b, 0x43, 0xc5, 0x40, + 0x76, 0xf5, 0xec, 0x83, 0x47, 0x0e, 0x90, 0xc3, + 0xc4, 0xee, 0x20, 0xc2, 0x7b, 0x95, 0x5b, 0x98, + 0xe2, 0x64, 0x4c, 0x6c, 0x71, 0x8e, 0x16, 0x34, + 0x50, 0x00, 0xbe, 0xd1, 0x04, 0x3b, 0xe2, 0x9e, + 0xf2, 0xe7, 0xae, 0x34, 0x8f, 0x3a, 0x4f, 0xca, + 0xff, 0x00, 0x35, 0xd0, 0x8e, 0xe2, 0xa9, 0xb8, + 0x28, 0x22, 0xb9, 0xca, 0x65, 0x60, 0x98, 0x56, + 0x37, 0xbb, 0xc6, 0x08, 0x39, 0xb6, 0xab, 0x70, + 0xf4, 0x64, 0x23, 0x9d, 0xeb, 0x7c, 0x08, 0xf4, + 0x55, 0xa7, 0xf4, 0x22, 0xaf, 0x4b, 0x55, 0xf6, + 0xe7, 0x4a, 0x60, 0xee, 0x63, 0x11, 0xcd, 0x08, + 0x73, 0x41, 0xa8, 0x5e, 0xa3, 0x4f, 0x62, 0xba, + 0xb6, 0xc5, 0xd5, 0x0e, 0x06, 0x00, 0xd6, 0x8e, + 0xe3, 0x77, 0x20, 0xe1, 0x93, 0xb9, 0xa3, 0x51, + 0x4d, 0xb7, 0x61, 0x73, 0xa8, 0x55, 0xc6, 0x02, + 0x03, 0x8e, 0xdf, 0xfd, 0x4c, 0x57, 0x93, 0xa3, + 0x74, 0xf9, 0x9c, 0xce, 0x60, 0x06, 0x47, 0x6f, + 0x34, 0xe7, 0x59, 0x23, 0x4f, 0xe2, 0x86, 0xe8, + 0xe9, 0xb0, 0x37, 0xdc, 0x1b, 0x95, 0xb1, 0x54, + 0x69, 0x1e, 0xa8, 0x7f, 0xfe, 0xc1, 0xf8, 0x4a, + 0xfa, 0x8b, 0x64, 0x4c, 0xef, 0x05, 0xb7, 0xd5, + 0x16, 0x56, 0xf6, 0x78, 0x41, 0x15, 0xbb, 0x78, + 0x58, 0x64, 0x06, 0x9d, 0xd2, 0x56, 0xa2, 0x3f, + 0xe5, 0x33, 0xbc, 0x12, 0xc7, 0xd2, 0x82, 0x76, + 0x1e, 0xf2, 0x29, 0x3b, 0x8a, 0x83, 0x67, 0xa0, + 0xa3, 0x8c, 0xf9, 0x5c, 0x85, 0xa3, 0x8c, 0x3e, + 0x81, 0xdc, 0xb4, 0xde, 0xad, 0xea, 0xa5, 0xa0, + 0x7e, 0x25, 0xdf, 0xcf, 0xff, 0x00, 0x20, 0xad, + 0xa8, 0x25, 0x62, 0xdf, 0x64, 0x2d, 0xac, 0x61, + 0x32, 0xdc, 0x3c, 0x34, 0x0d, 0xc3, 0x94, 0xac, + 0x2c, 0xc6, 0xa0, 0xb6, 0xc7, 0xb7, 0xab, 0x61, + 0xeb, 0x6e, 0x1d, 0xb1, 0xb1, 0xb7, 0x69, 0xaa, + 0xd6, 0x5a, 0xe1, 0x2f, 0x32, 0xd2, 0x8b, 0xdc, + 0xa3, 0x88, 0x65, 0x78, 0x99, 0x0f, 0x30, 0x41, + 0x83, 0x91, 0xb9, 0xca, 0x66, 0xe0, 0x9e, 0x76, + 0x56, 0x1b, 0x18, 0x9a, 0x69, 0x5d, 0x95, 0x5b, + 0x4d, 0x21, 0x51, 0x84, 0x60, 0xee, 0x9f, 0x85, + 0x6c, 0xf2, 0x36, 0xad, 0x6e, 0x26, 0x6b, 0x6b, + 0x66, 0x53, 0xc4, 0x21, 0xad, 0x01, 0x54, 0xf1, + 0x79, 0x0c, 0xe6, 0x3a, 0xd0, 0x5a, 0xb6, 0xcd, + 0xce, 0x6b, 0x49, 0x20, 0xd1, 0x05, 0xc9, 0x15, + 0x63, 0xd6, 0x1c, 0xff, 0x00, 0x99, 0x3b, 0xa1, + 0x3d, 0x60, 0xcf, 0xf9, 0x8b, 0xba, 0x15, 0xb1, + 0x66, 0x52, 0xab, 0x1e, 0xb0, 0xe7, 0xfc, 0xc9, + 0xdd, 0x09, 0xeb, 0x0e, 0x7f, 0xcc, 0x9d, 0xd0, + 0x52, 0xc7, 0xce, 0xb9, 0xf8, 0xb6, 0x9f, 0x3d, + 0x69, 0xee, 0x2f, 0x23, 0xb7, 0x68, 0x1f, 0x1a, + 0x42, 0x36, 0x34, 0x6f, 0xdc, 0xb2, 0x73, 0x12, + 0x66, 0xf3, 0x3d, 0x54, 0x6e, 0xb4, 0x74, 0x65, + 0x8e, 0xd8, 0xea, 0x2d, 0xde, 0x0f, 0x48, 0xc3, + 0x6c, 0xe6, 0xdc, 0xdf, 0x1e, 0xba, 0x6d, 0xe1, + 0xa7, 0x68, 0x09, 0x63, 0x51, 0x86, 0xd3, 0x97, + 0xb9, 0x57, 0x8b, 0x8b, 0xfa, 0xc5, 0x6c, 0x36, + 0xb5, 0x9c, 0xa5, 0x5d, 0x6d, 0x2c, 0x6d, 0x6c, + 0xa2, 0x11, 0x5b, 0xc6, 0x18, 0x06, 0xf2, 0x17, + 0xbb, 0x5a, 0xd6, 0x80, 0xd6, 0x8a, 0x01, 0xb8, + 0x05, 0x85, 0x93, 0xcb, 0x5b, 0x63, 0x61, 0x2f, + 0x94, 0xd5, 0xe7, 0xe2, 0xb0, 0x6f, 0x4b, 0x19, + 0x53, 0x4d, 0x14, 0x31, 0x99, 0x26, 0x70, 0x6b, + 0x06, 0xda, 0x95, 0x52, 0xca, 0xea, 0x3b, 0x9b, + 0xe9, 0x0d, 0xb6, 0x3e, 0xac, 0x8b, 0x73, 0xa4, + 0xe5, 0x2b, 0x1a, 0xee, 0xf2, 0xff, 0x00, 0x30, + 0xfe, 0x29, 0x09, 0x8a, 0xdf, 0xe4, 0xf7, 0x17, + 0xa4, 0x50, 0xc7, 0x0b, 0x78, 0x63, 0x14, 0x03, + 0x95, 0x07, 0x9d, 0xbd, 0x9c, 0x71, 0x8e, 0x37, + 0xf8, 0xf2, 0x1d, 0xee, 0x3b, 0x57, 0xb8, 0x00, + 0x9d, 0xa8, 0x8a, 0x0c, 0x6c, 0x41, 0x11, 0xe7, + 0x26, 0x69, 0xde, 0xe6, 0xec, 0x56, 0x12, 0x6a, + 0xaa, 0xd7, 0x92, 0x9b, 0x1b, 0xf8, 0x2f, 0x87, + 0xc5, 0x27, 0x86, 0x4e, 0xf1, 0x56, 0x86, 0x3d, + 0x92, 0xc6, 0xd9, 0x63, 0x35, 0x63, 0x80, 0x23, + 0xdd, 0x54, 0x4a, 0x7c, 0x08, 0x95, 0x6b, 0x5a, + 0x64, 0x79, 0xa3, 0x5b, 0xb4, 0x94, 0x81, 0xa5, + 0xb9, 0xfe, 0x2e, 0xa9, 0xb2, 0x63, 0x76, 0x96, + 0x6f, 0xf7, 0x15, 0xb2, 0xff, 0x00, 0x25, 0x6b, + 0x61, 0x11, 0x92, 0xe1, 0xe1, 0xbc, 0xcd, 0xe5, + 0x25, 0x51, 0x2c, 0xf2, 0xa1, 0xb9, 0xa9, 0xaf, + 0x9a, 0xc3, 0x24, 0x86, 0xad, 0x85, 0xa3, 0x9d, + 0x6f, 0xec, 0xf0, 0x37, 0x39, 0x19, 0x5b, 0x7d, + 0x96, 0x71, 0xa9, 0xf1, 0x9b, 0x0f, 0x20, 0x52, + 0x46, 0x3b, 0x5d, 0x92, 0xd4, 0x93, 0x12, 0x38, + 0xad, 0xec, 0x5a, 0x7b, 0xc4, 0x85, 0x63, 0xb0, + 0xc6, 0xda, 0x58, 0x44, 0x19, 0x03, 0x40, 0x34, + 0xda, 0xee, 0x52, 0xbc, 0xf2, 0x87, 0xc8, 0xb1, + 0x17, 0x0f, 0xb7, 0x02, 0x33, 0x14, 0x64, 0xb7, + 0x84, 0x52, 0x94, 0x0b, 0x99, 0xe0, 0xc6, 0xbe, + 0xcf, 0x5a, 0xbe, 0xf2, 0xce, 0xf0, 0x36, 0x2e, + 0x32, 0xd0, 0x1c, 0x76, 0xec, 0xf7, 0x10, 0x75, + 0xba, 0x84, 0xaa, 0xe6, 0x9e, 0x80, 0xf6, 0x95, + 0xe7, 0xac, 0xe9, 0xff, 0x00, 0x44, 0xf4, 0x07, + 0xb4, 0xaf, 0x3e, 0x67, 0x4f, 0xfa, 0x20, 0xe9, + 0x75, 0x09, 0x50, 0xb9, 0xa7, 0xa0, 0x3d, 0xa5, + 0x79, 0xeb, 0x3a, 0x7f, 0xd1, 0x3d, 0x01, 0xed, + 0x2b, 0xcf, 0x59, 0xd3, 0xfe, 0x88, 0x3a, 0x5d, + 0x42, 0x54, 0x2e, 0x69, 0xe8, 0x0f, 0x69, 0x5e, + 0x7a, 0xce, 0x9f, 0xf4, 0x4f, 0x40, 0x7b, 0x4a, + 0xf3, 0xd6, 0x74, 0xff, 0x00, 0xa2, 0x0e, 0x97, + 0x50, 0x95, 0x0b, 0x9a, 0x7a, 0x03, 0xda, 0x57, + 0x9e, 0xb3, 0xa7, 0xfd, 0x13, 0xd0, 0x1e, 0xd2, + 0xbc, 0xf5, 0x9d, 0x3f, 0xe8, 0x83, 0xa5, 0xd5, + 0x2a, 0x17, 0x34, 0xf4, 0x07, 0xb4, 0xaf, 0x3d, + 0x67, 0x4f, 0xfa, 0x27, 0xa0, 0x3d, 0xa5, 0x79, + 0xeb, 0x3a, 0x7f, 0xd1, 0x07, 0x4b, 0xa8, 0x4a, + 0x85, 0xcd, 0x3d, 0x01, 0xed, 0x2b, 0xcf, 0x59, + 0xd3, 0xfe, 0x89, 0xe8, 0x0f, 0x69, 0x5e, 0x7a, + 0xce, 0x9f, 0xf4, 0x41, 0xd2, 0xea, 0x11, 0x72, + 0xbc, 0x8e, 0x3b, 0xda, 0x2e, 0x3e, 0xc6, 0x6b, + 0xd9, 0xaf, 0x5a, 0x63, 0x81, 0xbc, 0x4e, 0x00, + 0xed, 0x20, 0x7b, 0x8a, 0xe5, 0xa0, 0x72, 0x37, + 0x59, 0x2d, 0x37, 0x6f, 0x77, 0x76, 0xee, 0x39, + 0x9f, 0x5e, 0x27, 0x1e, 0xe2, 0x0b, 0x1a, 0x22, + 0x20, 0xa9, 0xe6, 0xff, 0x00, 0x34, 0xd8, 0x77, + 0xe3, 0xfd, 0xe5, 0x6b, 0x1c, 0xaa, 0xa9, 0x9b, + 0xfc, 0xd3, 0x61, 0xdf, 0x8f, 0xf7, 0x95, 0xac, + 0x72, 0xa0, 0x94, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x55, 0x2d, 0x57, 0xf7, 0xd6, 0x3b, + 0xbc, 0xdf, 0xee, 0x05, 0x6d, 0x55, 0x3d, 0x57, + 0xf7, 0xd6, 0x3f, 0xbc, 0xdf, 0xee, 0x04, 0x16, + 0xbe, 0x55, 0x2a, 0x39, 0x54, 0xa0, 0x2c, 0x6c, + 0x85, 0xb3, 0x6e, 0xac, 0xe5, 0x81, 0xdb, 0x9e, + 0xd3, 0x4e, 0xfa, 0xc9, 0x50, 0x50, 0x73, 0x1b, + 0x30, 0xe8, 0x5d, 0x25, 0xb3, 0xf6, 0x3a, 0x27, + 0x11, 0x45, 0xaf, 0xce, 0xc2, 0x5a, 0x59, 0x77, + 0x1e, 0xc7, 0x37, 0x94, 0x72, 0x2b, 0x0e, 0xa4, + 0xb4, 0xf2, 0x2c, 0xf7, 0x5b, 0x4a, 0x47, 0x72, + 0xda, 0xfb, 0xab, 0x5f, 0x7d, 0x07, 0x5d, 0x69, + 0x24, 0x74, 0xe4, 0xa8, 0x41, 0x58, 0x9e, 0xea, + 0xe6, 0xe8, 0x97, 0x5c, 0x48, 0x64, 0x24, 0x50, + 0x54, 0xab, 0x06, 0x1b, 0x59, 0xbf, 0x17, 0x64, + 0xdb, 0x31, 0x00, 0x91, 0xad, 0x3b, 0xc8, 0x55, + 0xb2, 0x38, 0x7c, 0x53, 0xbc, 0x1a, 0x51, 0x7d, + 0x47, 0x1c, 0x93, 0x3b, 0x82, 0x36, 0x97, 0x14, + 0x16, 0xf9, 0xb5, 0xfd, 0xb4, 0xd0, 0x49, 0x14, + 0x96, 0x63, 0x89, 0xed, 0x2d, 0xad, 0x39, 0xd6, + 0xaf, 0x02, 0x65, 0x0d, 0x90, 0x39, 0xa4, 0x31, + 0xc7, 0x89, 0xb5, 0x4b, 0x1c, 0x34, 0x71, 0x81, + 0x2d, 0xc5, 0x0b, 0xc7, 0xec, 0xad, 0xf5, 0x8e, + 0x32, 0xe6, 0xf2, 0x8d, 0x81, 0x9c, 0x2c, 0x1f, + 0xb5, 0xc8, 0x82, 0xb5, 0xa8, 0x20, 0x3d, 0x63, + 0x27, 0x1b, 0x9d, 0xb0, 0x85, 0xa9, 0xe4, 0x56, + 0x8c, 0xe5, 0xa3, 0xbc, 0x9e, 0x48, 0xdd, 0xfc, + 0xc8, 0x8a, 0xab, 0x84, 0x1f, 0x51, 0x3f, 0xab, + 0x95, 0xaf, 0x1b, 0x08, 0x20, 0xd5, 0x59, 0x67, + 0x79, 0x0d, 0x82, 0xf2, 0x33, 0xe3, 0x30, 0x87, + 0x12, 0x3b, 0x8a, 0xb1, 0xb0, 0x85, 0xbe, 0xc3, + 0xca, 0x2e, 0x2c, 0x5f, 0x6e, 0xef, 0x8c, 0xca, + 0xef, 0x41, 0xd4, 0xb1, 0xf7, 0x22, 0xea, 0xca, + 0x19, 0xc1, 0xaf, 0x1b, 0x41, 0x3d, 0xf5, 0x92, + 0xab, 0x5a, 0x22, 0xfb, 0xad, 0xc7, 0xba, 0xd1, + 0xe7, 0xf8, 0x96, 0xee, 0x22, 0x9d, 0xc5, 0x65, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x05, 0x0a, 0x54, 0x14, 0x90, 0xa8, + 0x4e, 0x20, 0xb5, 0x96, 0x2e, 0x71, 0xca, 0x5f, + 0x82, 0x49, 0x00, 0xb2, 0x83, 0x9b, 0xc5, 0x58, + 0x92, 0x4b, 0x72, 0xc1, 0x96, 0x74, 0x04, 0x97, + 0xb5, 0xec, 0xa0, 0x1b, 0x68, 0xde, 0x11, 0xc5, + 0x4f, 0x71, 0x27, 0xe5, 0x67, 0x1a, 0x6f, 0xb8, + 0x87, 0x3a, 0x71, 0x0e, 0x75, 0x5c, 0xb5, 0xb5, + 0xc7, 0xca, 0xf8, 0xa6, 0xc3, 0xdc, 0x0f, 0x2b, + 0x61, 0x6b, 0xa6, 0x0e, 0x7b, 0x8d, 0x5a, 0x7e, + 0x30, 0x2d, 0x71, 0xd8, 0xbc, 0xae, 0x1b, 0x87, + 0x93, 0x37, 0x7a, 0x32, 0x92, 0xf0, 0x70, 0xf0, + 0x75, 0x6d, 0x2f, 0x73, 0x47, 0xc5, 0x15, 0xf8, + 0xa5, 0x39, 0x75, 0x39, 0xf4, 0x5a, 0x2a, 0x12, + 0xa1, 0x6a, 0x34, 0xeb, 0x9a, 0x60, 0x99, 0xb0, + 0xbf, 0xac, 0xb5, 0x6c, 0x84, 0x5b, 0xed, 0x26, + 0x8d, 0xe6, 0xdb, 0xb5, 0x66, 0xe4, 0x6f, 0x45, + 0x95, 0xb3, 0xa6, 0xa7, 0x13, 0xaa, 0x1a, 0xc6, + 0xf3, 0xb9, 0xc6, 0x81, 0x39, 0x7b, 0x0e, 0x6c, + 0xa4, 0xaa, 0xd7, 0x5a, 0xdf, 0xdd, 0xb6, 0x19, + 0xdf, 0x91, 0x84, 0x42, 0x60, 0x1c, 0x5c, 0x4c, + 0xda, 0xd2, 0xda, 0x57, 0x65, 0x56, 0x33, 0x33, + 0x17, 0xec, 0xea, 0xae, 0x2e, 0xad, 0xd9, 0x1d, + 0x94, 0xee, 0x0d, 0x6b, 0x81, 0x25, 0xe3, 0x88, + 0xd1, 0xa5, 0xc3, 0xba, 0x9f, 0x22, 0xdb, 0xaa, + 0xa5, 0x56, 0x96, 0x5c, 0xbe, 0x45, 0xf7, 0x77, + 0x36, 0xf6, 0x56, 0xec, 0x7f, 0x92, 0xd0, 0xb9, + 0xd2, 0x12, 0x01, 0x69, 0x15, 0xd9, 0x4e, 0x54, + 0x9b, 0x3d, 0x2f, 0x93, 0xd9, 0x4b, 0x6f, 0x0f, + 0x58, 0xfb, 0xc7, 0x39, 0x81, 0xa7, 0xf6, 0x5c, + 0x07, 0xc1, 0x54, 0x38, 0xb7, 0x55, 0x4a, 0xad, + 0x4d, 0xb6, 0x62, 0x66, 0x3a, 0xea, 0x2c, 0x8c, + 0x6d, 0x8a, 0x5b, 0x56, 0x75, 0x87, 0xab, 0x35, + 0x69, 0x61, 0xe6, 0xaa, 0xf9, 0x8f, 0x2d, 0x7e, + 0xc7, 0x45, 0x35, 0xd4, 0x31, 0xb2, 0xd2, 0x72, + 0x1a, 0xc7, 0x31, 0xd5, 0x78, 0xe2, 0xf8, 0xbc, + 0x41, 0x06, 0xe2, 0xaa, 0x3a, 0xc6, 0xee, 0xaa, + 0xd4, 0xc9, 0x96, 0xbc, 0x7d, 0xd3, 0xdb, 0x69, + 0x03, 0x66, 0xb6, 0x85, 0xed, 0x8e, 0x67, 0x57, + 0xc6, 0xa9, 0xdf, 0xc2, 0x16, 0x34, 0x92, 0x5f, + 0x7a, 0xc4, 0xd6, 0xb5, 0xad, 0x30, 0xf5, 0x3b, + 0x89, 0x20, 0xf0, 0xf2, 0x9a, 0x73, 0xa7, 0xd2, + 0x7c, 0x0e, 0x13, 0xec, 0xf9, 0xc2, 0xc0, 0x1c, + 0x0a, 0x54, 0x2d, 0x2e, 0x3b, 0x27, 0x43, 0x6b, + 0x0f, 0x54, 0x19, 0x0d, 0xc8, 0x93, 0x85, 0xd5, + 0x24, 0x82, 0xd2, 0x76, 0x54, 0xa8, 0xba, 0xc9, + 0x99, 0x1f, 0x23, 0x4c, 0x41, 0xd1, 0xc3, 0x72, + 0xc8, 0x5a, 0xee, 0x22, 0x2a, 0xef, 0x73, 0xbe, + 0x9c, 0x4e, 0x7d, 0x1b, 0xba, 0x84, 0xaa, 0xac, + 0xdb, 0xdf, 0x64, 0xed, 0x6e, 0x72, 0x77, 0x0f, + 0x89, 0x8f, 0x64, 0x4e, 0xe2, 0x73, 0x43, 0x89, + 0x20, 0x01, 0xc8, 0xb7, 0x12, 0xe4, 0x69, 0x35, + 0xa4, 0x51, 0x34, 0x3d, 0xd7, 0x40, 0xbb, 0xbc, + 0xd0, 0x01, 0x25, 0x11, 0x9c, 0xa5, 0x42, 0x94, + 0x51, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x16, 0x1e, 0x5b, + 0x1f, 0x1e, 0x46, 0xc2, 0x6b, 0x49, 0x05, 0x5b, + 0x23, 0x48, 0x1d, 0xfa, 0x6c, 0x59, 0x75, 0x55, + 0x2d, 0x61, 0xaf, 0xb1, 0xf8, 0x18, 0xdd, 0x04, + 0x4e, 0x12, 0xde, 0x91, 0xb1, 0x83, 0x6d, 0x3b, + 0xa5, 0x07, 0x1e, 0xd4, 0xb8, 0x1b, 0x9c, 0x16, + 0x56, 0x4b, 0x3b, 0x81, 0x4a, 0x9e, 0x38, 0xc8, + 0xdd, 0x42, 0xb5, 0x4b, 0x77, 0x7f, 0x90, 0xc8, + 0x6a, 0x6e, 0xbe, 0xea, 0x6e, 0x29, 0x6e, 0x63, + 0x3c, 0x6d, 0x00, 0x6e, 0x6f, 0x32, 0xd1, 0x8d, + 0xbb, 0x50, 0x4a, 0x25, 0x11, 0x03, 0xfc, 0x55, + 0x28, 0x2b, 0x5a, 0x27, 0xc0, 0x88, 0x08, 0x12, + 0x89, 0xde, 0xde, 0x82, 0x58, 0xf9, 0x23, 0x35, + 0x8d, 0xce, 0x61, 0xe7, 0x69, 0x23, 0xe0, 0x5f, + 0x6f, 0xba, 0xbb, 0x91, 0xbc, 0x32, 0xcd, 0x23, + 0xda, 0x79, 0x0b, 0x89, 0x0b, 0xcd, 0x2a, 0x80, + 0x05, 0x28, 0xbd, 0xce, 0xe0, 0xbc, 0x39, 0x42, + 0xf5, 0x25, 0x2c, 0x49, 0x21, 0x7c, 0x92, 0x95, + 0x50, 0x4f, 0x2a, 0xa0, 0xbe, 0x49, 0xd8, 0x84, + 0xaf, 0x4b, 0x6b, 0x79, 0xee, 0xe7, 0x6d, 0xbd, + 0xb3, 0x0c, 0x92, 0xbc, 0xd0, 0x34, 0x6d, 0x29, + 0x63, 0xcf, 0x69, 0x21, 0xa3, 0x69, 0x26, 0x80, + 0x77, 0x55, 0xeb, 0x45, 0xfb, 0x36, 0xbb, 0xcb, + 0x3a, 0x3b, 0xec, 0x98, 0x30, 0xd9, 0x83, 0x51, + 0x19, 0xd8, 0xe7, 0x2b, 0x16, 0x89, 0xf6, 0x65, + 0x0d, 0x9f, 0x06, 0x43, 0x30, 0x04, 0x97, 0x3b, + 0x1d, 0x1c, 0x5c, 0x8d, 0xef, 0xae, 0x8a, 0xc6, + 0x35, 0x8d, 0x0d, 0x68, 0x01, 0xa3, 0x70, 0x1b, + 0x02, 0x83, 0xc2, 0xc3, 0x1f, 0x69, 0x8f, 0xb7, + 0x6d, 0xb5, 0xa4, 0x62, 0x28, 0x99, 0xb8, 0x05, + 0x92, 0x88, 0x80, 0x88, 0x88, 0x0b, 0x0b, 0x2b, + 0x89, 0xb3, 0xcb, 0x5a, 0x3e, 0xd2, 0xf2, 0x30, + 0xf6, 0x3c, 0x11, 0x52, 0x36, 0x8e, 0xf2, 0xcd, + 0x44, 0x1f, 0x9f, 0xf5, 0x6e, 0x8f, 0xc8, 0xe9, + 0x9b, 0xf7, 0x4b, 0x10, 0x71, 0xb5, 0xad, 0x62, + 0x9d, 0xb5, 0xd9, 0xdc, 0xaa, 0xd9, 0x63, 0x3d, + 0xac, 0xe6, 0x6c, 0xed, 0x23, 0xb7, 0x91, 0x82, + 0x63, 0x18, 0x00, 0x3c, 0x9d, 0xb4, 0x0b, 0xb2, + 0xe4, 0x31, 0xf6, 0xb9, 0x1b, 0x57, 0xda, 0xdd, + 0x30, 0x49, 0x13, 0xc5, 0x0b, 0x48, 0xe7, 0x54, + 0xe3, 0xec, 0x8b, 0x4d, 0x12, 0x4f, 0x8e, 0x2b, + 0xc9, 0x53, 0xe1, 0x41, 0x58, 0xb6, 0xf6, 0xbb, + 0x98, 0xb8, 0xb8, 0x8e, 0x06, 0x40, 0xde, 0x29, + 0x1c, 0x1a, 0x3d, 0xd5, 0xd5, 0x22, 0x7b, 0xdd, + 0x6f, 0x1c, 0x92, 0x6c, 0x7b, 0xd8, 0x1c, 0xe1, + 0xdd, 0x21, 0x55, 0xed, 0x3d, 0x96, 0x69, 0xdb, + 0x3b, 0x98, 0xee, 0xa3, 0xe2, 0x2f, 0x85, 0xc1, + 0xed, 0x04, 0xec, 0xa8, 0x56, 0xa9, 0x8d, 0x18, + 0x7a, 0x02, 0x0c, 0x19, 0xe6, 0x64, 0x51, 0x49, + 0x3c, 0xa7, 0x85, 0x8c, 0x05, 0xce, 0x71, 0xdc, + 0x00, 0x5c, 0xaf, 0x27, 0xed, 0x04, 0x37, 0x2e, + 0xe9, 0x61, 0x8c, 0x4d, 0x04, 0x24, 0x88, 0xda, + 0x77, 0x77, 0xd7, 0x53, 0xb8, 0xc7, 0xb3, 0x25, + 0x6f, 0x25, 0x94, 0xa4, 0x88, 0xa5, 0x6d, 0x1f, + 0x45, 0x5f, 0xfd, 0x22, 0xd3, 0x7c, 0xbc, 0x67, + 0xdd, 0x3e, 0x14, 0x15, 0x4f, 0xd6, 0x3c, 0xa0, + 0xd8, 0x20, 0x68, 0x1d, 0xc4, 0xfd, 0x63, 0xca, + 0xf6, 0x2d, 0xe9, 0x56, 0xbf, 0xd2, 0x2d, 0x35, + 0xfe, 0xfe, 0x92, 0x9f, 0xa4, 0x5a, 0x6b, 0xfd, + 0xfd, 0x25, 0x05, 0x53, 0xf5, 0x8f, 0x2b, 0xd8, + 0x37, 0xa5, 0x3f, 0x59, 0x32, 0xbd, 0x83, 0x55, + 0xaf, 0xf4, 0x8b, 0x4d, 0x7f, 0xbf, 0xa4, 0xa7, + 0xe9, 0x16, 0x9a, 0xff, 0x00, 0x7f, 0x49, 0x41, + 0x55, 0x1e, 0xd8, 0xf2, 0xa7, 0x67, 0x52, 0xdd, + 0xaa, 0xd5, 0xa0, 0xee, 0xdf, 0x7f, 0x2d, 0xcd, + 0xf3, 0xf6, 0x3e, 0xe3, 0xc6, 0x20, 0x27, 0xe9, + 0x16, 0x9a, 0x1b, 0x7c, 0x7e, 0x95, 0xeb, 0xa3, + 0x6d, 0x59, 0x65, 0x7d, 0x7b, 0x67, 0x17, 0xf2, + 0xe0, 0x3c, 0x2d, 0xef, 0x20, 0xb4, 0xa2, 0x9a, + 0x14, 0xa1, 0x41, 0x08, 0xa6, 0x85, 0x28, 0x55, + 0xa1, 0xa1, 0xd6, 0x7f, 0x74, 0x8f, 0x9e, 0x16, + 0x8a, 0x2f, 0xe4, 0xb3, 0xbc, 0x16, 0xf7, 0x5a, + 0x7d, 0xd0, 0x3e, 0x78, 0x55, 0xfe, 0xba, 0x38, + 0x2d, 0xda, 0xe9, 0x0f, 0x20, 0xa7, 0x42, 0x50, + 0xf5, 0x24, 0x34, 0x55, 0xc4, 0x01, 0xce, 0x56, + 0xaf, 0x29, 0x9a, 0xb7, 0xb6, 0x61, 0x1c, 0x60, + 0x0e, 0x72, 0x77, 0xad, 0x86, 0x3f, 0x17, 0x90, + 0xcd, 0xcc, 0x0b, 0x41, 0x8a, 0xd0, 0x1d, 0xaf, + 0x3b, 0x2a, 0xb6, 0xb7, 0x3e, 0xcc, 0x30, 0x97, + 0x6e, 0x0e, 0x9d, 0xcf, 0x3b, 0x36, 0x8a, 0x9a, + 0x7c, 0x2a, 0x0a, 0x06, 0x37, 0xda, 0x45, 0xde, + 0x29, 0xd2, 0xc7, 0x67, 0x10, 0x7b, 0x64, 0x35, + 0xa9, 0xde, 0x4a, 0xb6, 0xe2, 0x35, 0x8e, 0xa4, + 0xcb, 0x30, 0xb3, 0xc9, 0xc3, 0x0c, 0x9b, 0x1b, + 0x4d, 0xe2, 0xbc, 0xab, 0xcf, 0x33, 0xec, 0xe7, + 0x4f, 0x62, 0x6d, 0xdb, 0x71, 0x08, 0x71, 0x9b, + 0x88, 0x06, 0x03, 0xce, 0xae, 0x3a, 0x7f, 0x15, + 0x15, 0x8d, 0x94, 0x64, 0xb4, 0x75, 0xcf, 0x15, + 0x27, 0xb8, 0xa8, 0xc6, 0xc3, 0x69, 0xb6, 0xc0, + 0xef, 0x2b, 0xbe, 0x3d, 0x75, 0xcb, 0xb6, 0xf8, + 0xdb, 0x40, 0x5b, 0xe1, 0xbb, 0x9b, 0xb8, 0xa5, + 0x10, 0x14, 0x51, 0xbf, 0x24, 0x29, 0x44, 0xa1, + 0x14, 0x6f, 0xc9, 0x09, 0x46, 0xfc, 0x90, 0xa5, + 0x12, 0x84, 0x51, 0xbf, 0x24, 0x25, 0x1b, 0xf2, + 0x42, 0x94, 0x4a, 0x11, 0x41, 0xf2, 0x42, 0x95, + 0x0b, 0x55, 0xa9, 0xb2, 0x7e, 0x8e, 0xc6, 0x3d, + 0xec, 0x3f, 0xc6, 0x93, 0xc5, 0x8f, 0xbe, 0x54, + 0x18, 0x59, 0xdd, 0x4e, 0x2d, 0xdf, 0xe4, 0x78, + 0xe6, 0xf5, 0xf7, 0x27, 0x63, 0xb8, 0x76, 0xf0, + 0xaa, 0xe4, 0xb8, 0x7c, 0xdd, 0xfb, 0x8d, 0xcd, + 0xc3, 0xbc, 0x72, 0x76, 0x34, 0xd6, 0x81, 0x6d, + 0x70, 0x18, 0xc1, 0x6d, 0x07, 0x95, 0xcf, 0xe3, + 0xdc, 0xcf, 0xe3, 0x12, 0x77, 0xed, 0x5b, 0x7a, + 0x9e, 0x74, 0x15, 0x1e, 0xbb, 0x27, 0x8e, 0x70, + 0x65, 0xdc, 0x65, 0xd0, 0x8d, 0x85, 0xc1, 0x67, + 0xb6, 0xf2, 0xd9, 0xed, 0x0e, 0x6b, 0xc5, 0x0a, + 0xde, 0x4d, 0x13, 0x27, 0x8d, 0xd1, 0x48, 0x38, + 0x9a, 0xe1, 0x42, 0xab, 0x16, 0x58, 0xab, 0x78, + 0x73, 0x87, 0x1f, 0x78, 0x4f, 0x53, 0x28, 0x26, + 0x22, 0xac, 0x8c, 0xcf, 0x29, 0xb7, 0xf9, 0x61, + 0x48, 0xba, 0xb7, 0xf9, 0x61, 0x6e, 0x7d, 0x4d, + 0xc6, 0x1d, 0xb5, 0x72, 0x7a, 0x9b, 0x8c, 0xe7, + 0x72, 0x83, 0x43, 0x72, 0xeb, 0x3b, 0x98, 0x5d, + 0x13, 0xde, 0x28, 0x77, 0x6d, 0x58, 0x98, 0xcc, + 0xcc, 0xb8, 0xb7, 0x9b, 0x69, 0xcf, 0x59, 0x6e, + 0x36, 0x34, 0xef, 0xa2, 0xb4, 0xfa, 0x99, 0x8c, + 0xf9, 0x4e, 0x58, 0x79, 0x2d, 0x3f, 0x82, 0xb0, + 0x85, 0xd2, 0x5c, 0x38, 0xff, 0x00, 0xb5, 0xb5, + 0xda, 0x4a, 0x58, 0xf8, 0xf5, 0x83, 0x17, 0xc1, + 0xc4, 0x1e, 0x39, 0xf8, 0x55, 0x77, 0x50, 0x6a, + 0xd8, 0x5d, 0x19, 0x89, 0xaf, 0x11, 0x42, 0x7a, + 0x4a, 0xce, 0xc5, 0xe9, 0x97, 0xe4, 0xa7, 0xeb, + 0x78, 0x0c, 0x36, 0x80, 0xd4, 0x13, 0xca, 0x16, + 0x7d, 0xd7, 0xb2, 0xec, 0x15, 0xd4, 0x9d, 0x64, + 0xce, 0x79, 0xee, 0x54, 0xd3, 0xe1, 0x41, 0xcf, + 0xac, 0x3d, 0xa1, 0x3f, 0x19, 0x23, 0x8c, 0x16, + 0xed, 0x92, 0x87, 0xc5, 0x2e, 0xf8, 0x56, 0xc3, + 0xf5, 0x8f, 0x2b, 0xd8, 0x35, 0x5a, 0xff, 0x00, + 0x48, 0xb4, 0xd7, 0xfb, 0xfd, 0xf4, 0xfd, 0x22, + 0xd3, 0x5f, 0xef, 0xe9, 0x28, 0x29, 0xd7, 0xbe, + 0xd6, 0xb2, 0x57, 0x76, 0x92, 0xdb, 0x3a, 0x16, + 0x81, 0x2b, 0x4b, 0x49, 0xaf, 0x3e, 0xc5, 0x74, + 0xf6, 0x4d, 0x53, 0xa6, 0x89, 0x3c, 0xb2, 0x12, + 0x3d, 0xd2, 0x4a, 0xc1, 0xca, 0xfb, 0x2b, 0xd3, + 0xd6, 0xb8, 0xeb, 0x9b, 0x88, 0xb8, 0xba, 0xc8, + 0xa3, 0x2e, 0x6f, 0x7c, 0x05, 0x9f, 0xec, 0x9f, + 0x66, 0x9c, 0x70, 0xe6, 0x95, 0xc3, 0xa0, 0x90, + 0x82, 0xec, 0x88, 0x88, 0x08, 0x88, 0x80, 0x8a, + 0x2a, 0xb1, 0xee, 0xb2, 0x16, 0x96, 0x8c, 0x2f, + 0x9e, 0x56, 0xb0, 0x0e, 0x72, 0x83, 0x21, 0x1c, + 0xe0, 0xd1, 0x52, 0x68, 0x3b, 0xaa, 0xab, 0x90, + 0xd7, 0x36, 0xcc, 0x0e, 0x65, 0x93, 0x0c, 0xae, + 0xe4, 0x77, 0x20, 0x55, 0xf7, 0x66, 0xf2, 0x59, + 0x7b, 0x91, 0x0d, 0xcd, 0xc1, 0xb7, 0x8c, 0xf3, + 0x6c, 0x41, 0x7f, 0x7e, 0x5b, 0x1b, 0x19, 0x21, + 0xf7, 0x0c, 0x04, 0x6f, 0x15, 0x58, 0x33, 0xea, + 0xdc, 0x3c, 0x4f, 0xe1, 0xeb, 0x43, 0x8f, 0x38, + 0xdc, 0xb5, 0x50, 0x68, 0xbb, 0x17, 0xb0, 0x48, + 0xe9, 0xcc, 0xa5, 0xdf, 0xb4, 0x0a, 0xc4, 0xc8, + 0x68, 0x52, 0xc6, 0x19, 0x2c, 0xdf, 0xc4, 0x46, + 0xd2, 0xd4, 0x16, 0xbb, 0x2c, 0xd6, 0x3a, 0xf8, + 0xf0, 0xc1, 0x33, 0x5c, 0xef, 0x93, 0x5d, 0xab, + 0x39, 0x73, 0x2b, 0x6b, 0x47, 0xba, 0x43, 0x0b, + 0x09, 0xb5, 0xc8, 0x41, 0xf1, 0x05, 0x68, 0x1c, + 0xad, 0xfa, 0x63, 0x3a, 0xfb, 0xf6, 0x3a, 0xd2, + 0xec, 0x70, 0x5e, 0xc1, 0xb1, 0xc0, 0xf2, 0x81, + 0xca, 0x83, 0xd7, 0x58, 0x7e, 0x5a, 0xc8, 0x7f, + 0x45, 0xdf, 0x02, 0xd6, 0x7b, 0x2f, 0xfc, 0xa1, + 0x69, 0xee, 0xad, 0x9e, 0xb0, 0xfc, 0xb5, 0x90, + 0xfe, 0x8b, 0xbe, 0x05, 0xac, 0xf6, 0x5f, 0xf9, + 0x42, 0xd3, 0xdd, 0x41, 0x6d, 0x44, 0x44, 0x15, + 0x3c, 0xdf, 0xe6, 0x9b, 0x1e, 0xfc, 0x7f, 0xbc, + 0xad, 0x6a, 0xa9, 0x9b, 0xfc, 0xd3, 0x63, 0xdf, + 0x8f, 0xf7, 0x95, 0xad, 0x04, 0xa2, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0xa9, 0xea, 0xbf, + 0xbe, 0xb1, 0xfd, 0xe1, 0xfb, 0xea, 0xd8, 0xaa, + 0x7a, 0xaf, 0xef, 0xac, 0x7f, 0x78, 0x7f, 0x71, + 0x05, 0xad, 0x4a, 0x85, 0x28, 0x08, 0x88, 0x82, + 0xb7, 0xad, 0xed, 0x7a, 0xcc, 0x73, 0x2e, 0x5a, + 0x2a, 0xf8, 0x1c, 0x0d, 0x7b, 0x8a, 0xb3, 0x13, + 0x83, 0xe2, 0x6b, 0xf7, 0x87, 0x0d, 0xab, 0xa0, + 0xe4, 0x2d, 0x5b, 0x77, 0x67, 0x35, 0xbb, 0x85, + 0x43, 0xda, 0x47, 0xbb, 0xc8, 0xb9, 0xcd, 0xa7, + 0x14, 0x4f, 0x96, 0xd5, 0xfb, 0x1d, 0x0b, 0x88, + 0x03, 0xb9, 0x54, 0x1a, 0xe9, 0x70, 0x8e, 0x96, + 0xf5, 0xce, 0xd8, 0xd8, 0x89, 0xad, 0x56, 0xd6, + 0xcb, 0x1e, 0xc6, 0x1e, 0xae, 0xd6, 0x3e, 0x27, + 0x9d, 0x87, 0x95, 0x6c, 0xb1, 0x98, 0xb7, 0xdf, + 0xb9, 0xde, 0x38, 0x6c, 0x4c, 0xf8, 0xeb, 0x6a, + 0x6f, 0xb1, 0xb8, 0xb1, 0xd4, 0xd9, 0xc7, 0xd7, + 0xdc, 0x6e, 0x24, 0x0a, 0xed, 0x41, 0xe5, 0x67, + 0x82, 0xb7, 0xb7, 0x67, 0x94, 0x64, 0xdc, 0x05, + 0x36, 0xf0, 0x2f, 0xa7, 0xe5, 0x2e, 0x6e, 0x08, + 0xb5, 0xc3, 0xc5, 0xc1, 0x1e, 0xe3, 0x22, 0x91, + 0x8d, 0xbb, 0xbe, 0x77, 0x95, 0x65, 0x25, 0xea, + 0xe1, 0xde, 0x23, 0xdd, 0xb3, 0x99, 0x7c, 0x5c, + 0x67, 0x2d, 0x2c, 0xe3, 0xf2, 0x6c, 0x73, 0x06, + 0xcd, 0x85, 0xe8, 0x30, 0xf2, 0xf8, 0x91, 0x6b, + 0x6e, 0x1f, 0x2c, 0x82, 0x49, 0xa5, 0xd9, 0x20, + 0xe6, 0x2b, 0x9f, 0xdd, 0x43, 0xd4, 0xdc, 0x3e, + 0x3e, 0x40, 0x76, 0x2b, 0x94, 0xf7, 0x13, 0x5c, + 0x3c, 0xc9, 0x33, 0x8b, 0x9c, 0x77, 0x8e, 0x45, + 0xa6, 0xbf, 0xc4, 0xbe, 0xe6, 0xe8, 0x48, 0xd3, + 0xc2, 0xdd, 0xce, 0x41, 0xa3, 0x6b, 0x1c, 0xf7, + 0x06, 0xc6, 0x38, 0x9c, 0x79, 0x16, 0xf7, 0x0f, + 0x8e, 0x96, 0xd9, 0xc6, 0x59, 0x4d, 0x38, 0x86, + 0xd6, 0xac, 0xbb, 0x6b, 0x0b, 0x7b, 0x66, 0xf8, + 0xad, 0xa9, 0xa6, 0xf2, 0x97, 0x39, 0x18, 0x2d, + 0xf6, 0x57, 0x8d, 0xfc, 0x8d, 0x1b, 0xea, 0x83, + 0x3b, 0x01, 0x79, 0xe8, 0xfc, 0xe8, 0x0f, 0x77, + 0x0c, 0x57, 0x3b, 0x0f, 0x7d, 0x5f, 0x7c, 0xaa, + 0xdf, 0xb4, 0x6f, 0x4a, 0xe7, 0x56, 0x3a, 0x6b, + 0x2b, 0x98, 0x22, 0xe6, 0x52, 0x6d, 0xe2, 0xfd, + 0x83, 0xb8, 0xd1, 0x6c, 0x7d, 0x48, 0xbf, 0xf3, + 0xd7, 0xf4, 0xa0, 0xba, 0x79, 0x55, 0xbf, 0x68, + 0xde, 0x94, 0xf2, 0xab, 0x7e, 0xd1, 0xbd, 0x2a, + 0x97, 0xea, 0x45, 0xff, 0x00, 0x9e, 0xbf, 0xa4, + 0xa7, 0xa9, 0x17, 0xfe, 0x7a, 0xfe, 0x92, 0x82, + 0xe9, 0xe5, 0x56, 0xfd, 0xa3, 0x7a, 0x53, 0xca, + 0xad, 0xfb, 0x46, 0xf4, 0xaa, 0x5f, 0xa9, 0x17, + 0xfe, 0x7a, 0xfe, 0x92, 0xa3, 0xd4, 0x8b, 0xff, + 0x00, 0x3d, 0x7f, 0x49, 0x41, 0x75, 0xf2, 0xab, + 0x7e, 0xd1, 0xbd, 0x29, 0xe5, 0x56, 0xfd, 0xa3, + 0x7a, 0x55, 0x2b, 0xd4, 0x9b, 0xff, 0x00, 0x3d, + 0x7f, 0x49, 0x4f, 0x52, 0x6f, 0xfc, 0xf5, 0xfd, + 0x25, 0x05, 0xd7, 0xca, 0xad, 0xfb, 0x46, 0xf4, + 0xa7, 0x95, 0x5b, 0xf6, 0x8d, 0xe9, 0x54, 0xbf, + 0x51, 0xef, 0xeb, 0x4f, 0x2d, 0x7f, 0x4a, 0xd2, + 0x66, 0xac, 0x5d, 0x8b, 0x22, 0x26, 0x5f, 0x3e, + 0x69, 0xc9, 0xda, 0xd0, 0x6b, 0x44, 0x1d, 0x3f, + 0xca, 0xad, 0xf7, 0x75, 0x8d, 0xe9, 0x5e, 0x80, + 0xd5, 0x72, 0x0b, 0x4f, 0x2e, 0xe3, 0x63, 0xe4, + 0x99, 0xd4, 0xe2, 0x06, 0x95, 0x3c, 0xeb, 0xad, + 0x5a, 0x12, 0x6d, 0xa2, 0x24, 0xd4, 0xf0, 0x0d, + 0xbe, 0xe2, 0x0f, 0x64, 0x44, 0x40, 0x44, 0x44, + 0x05, 0x05, 0x4a, 0x84, 0x1a, 0x6f, 0x2a, 0xb7, + 0xc7, 0x65, 0xae, 0x4d, 0xdb, 0xc4, 0x51, 0xdc, + 0x06, 0xbe, 0x39, 0x1d, 0xbb, 0x60, 0xe1, 0xa2, + 0xf3, 0x82, 0xe2, 0x76, 0x45, 0x7d, 0x91, 0x82, + 0x2e, 0xb5, 0x92, 0xc8, 0xd7, 0x35, 0x87, 0xf6, + 0x98, 0xd1, 0xc2, 0x48, 0x5b, 0xa9, 0x21, 0x8a, + 0x4f, 0xe6, 0x31, 0xaf, 0xa6, 0xee, 0x20, 0x0f, + 0xc2, 0xbe, 0x9a, 0xc6, 0xb5, 0xbc, 0x2d, 0x00, + 0x34, 0x6e, 0x03, 0x60, 0x43, 0x8a, 0xb7, 0x90, + 0x97, 0x15, 0x77, 0xd4, 0xc9, 0x8e, 0xe1, 0x39, + 0x00, 0xe6, 0x70, 0x32, 0x3a, 0xb5, 0xc0, 0x71, + 0x02, 0xee, 0x26, 0x8a, 0x2f, 0xb8, 0xee, 0xb1, + 0xb0, 0x66, 0x6f, 0xbc, 0xbd, 0xf1, 0xb5, 0xce, + 0xea, 0xf8, 0x7a, 0xc1, 0x5f, 0xd9, 0x1b, 0xaa, + 0x16, 0xfd, 0xb6, 0xf0, 0x35, 0xdc, 0x4d, 0x8d, + 0x8d, 0x77, 0xca, 0x0d, 0x00, 0xf4, 0xa3, 0xed, + 0xe0, 0x79, 0x25, 0xf1, 0xb1, 0xce, 0x3c, 0xa5, + 0xa0, 0x9f, 0x7d, 0x06, 0xab, 0x06, 0xd6, 0x3a, + 0xe2, 0xf2, 0xe2, 0xdc, 0x01, 0x69, 0x2b, 0xc7, + 0x53, 0x4d, 0x80, 0xd0, 0x0a, 0x91, 0xee, 0xaf, + 0x4d, 0x41, 0x1b, 0xcd, 0xa3, 0x25, 0x68, 0xe2, + 0x10, 0xc8, 0xc9, 0x1c, 0x3f, 0xda, 0x1c, 0x2a, + 0x7d, 0xc5, 0xb2, 0x64, 0x6d, 0x63, 0x43, 0x58, + 0x03, 0x5a, 0x37, 0x00, 0x28, 0x14, 0x96, 0x82, + 0x08, 0x22, 0xa0, 0xf2, 0x15, 0x26, 0x2e, 0xba, + 0x1c, 0xda, 0xb9, 0xaf, 0x20, 0xc9, 0xd9, 0x5d, + 0x43, 0x64, 0x4c, 0x94, 0x8c, 0xf8, 0xe3, 0xe2, + 0x92, 0x47, 0xc5, 0x58, 0x37, 0x39, 0x08, 0x2f, + 0x71, 0xd0, 0x58, 0x40, 0x78, 0xae, 0x9e, 0x58, + 0xc7, 0xc5, 0xca, 0xde, 0x13, 0x47, 0x17, 0x2b, + 0x0c, 0x71, 0x47, 0x18, 0x22, 0x36, 0x35, 0x80, + 0xf2, 0x34, 0x01, 0xf0, 0x28, 0x10, 0x44, 0xd7, + 0x71, 0xb6, 0x36, 0x87, 0x9d, 0xee, 0x00, 0x03, + 0xd2, 0xaf, 0x3e, 0xa4, 0x46, 0xee, 0x8d, 0x46, + 0x39, 0xa5, 0x97, 0xb9, 0x36, 0xf3, 0x16, 0x8a, + 0xf3, 0xd1, 0x80, 0x2d, 0x7d, 0x98, 0x22, 0x3c, + 0x3e, 0xfd, 0x93, 0x4d, 0xfe, 0x6a, 0xd1, 0xd5, + 0xb4, 0x12, 0x40, 0x00, 0xbb, 0x79, 0xe7, 0xef, + 0xa8, 0x10, 0xb0, 0x52, 0x8d, 0x6f, 0x8b, 0xf1, + 0x76, 0x0d, 0x9d, 0xe4, 0x89, 0xdb, 0x1d, 0x28, + 0xbf, 0x8a, 0xbf, 0x91, 0xb7, 0x92, 0xe7, 0x25, + 0x91, 0x8a, 0x30, 0x4b, 0x9d, 0x68, 0xde, 0x11, + 0xce, 0x43, 0x8e, 0xc5, 0xe3, 0x69, 0x0e, 0x9a, + 0x7b, 0x60, 0x6b, 0x63, 0x7c, 0x97, 0x24, 0xb5, + 0xa6, 0x00, 0xf7, 0x97, 0x35, 0xc0, 0xd0, 0x97, + 0x02, 0xea, 0x6c, 0x56, 0x80, 0xc6, 0x82, 0x5d, + 0x41, 0xc4, 0x45, 0x0b, 0xb9, 0x68, 0xbe, 0x5b, + 0x04, 0x2d, 0x77, 0x1b, 0x63, 0x68, 0x7f, 0xca, + 0x00, 0x03, 0xd2, 0x83, 0x49, 0x65, 0x7d, 0x6f, + 0x8c, 0x9e, 0xee, 0xda, 0xe0, 0x91, 0x23, 0xe6, + 0xe2, 0x85, 0x9c, 0xaf, 0x6b, 0x80, 0x02, 0x8b, + 0xd2, 0x79, 0x23, 0x8f, 0x3f, 0x19, 0x90, 0xf0, + 0x09, 0x20, 0xe1, 0x65, 0x79, 0xcd, 0x76, 0x2d, + 0xc3, 0xa1, 0x89, 0xce, 0x0f, 0x73, 0x1a, 0xe7, + 0x0d, 0xce, 0x20, 0x13, 0xd2, 0x8e, 0x8d, 0x8e, + 0x21, 0xce, 0x68, 0x25, 0xbb, 0x89, 0x02, 0xa3, + 0xbc, 0x82, 0xb6, 0x58, 0xf6, 0x60, 0x60, 0xbc, + 0x8d, 0xa4, 0xc9, 0x69, 0x21, 0x92, 0x9f, 0xed, + 0xe2, 0x3c, 0x41, 0x7d, 0x32, 0x17, 0x45, 0x86, + 0xb4, 0x7b, 0xc5, 0x65, 0x9a, 0xe6, 0x39, 0x64, + 0xef, 0xb8, 0xab, 0x17, 0x56, 0xde, 0x1e, 0x1e, + 0x11, 0xc3, 0xf2, 0x69, 0xb1, 0x3a, 0xb6, 0xd0, + 0x0e, 0x11, 0x41, 0xb8, 0x72, 0x0a, 0x27, 0x3e, + 0xe3, 0x97, 0x7b, 0x4b, 0x64, 0x21, 0x93, 0x23, + 0x92, 0xb5, 0x94, 0xf8, 0xd3, 0x1f, 0x89, 0xca, + 0x5a, 0x46, 0xf5, 0xe5, 0xa7, 0xc4, 0xb2, 0xdd, + 0xcb, 0xd7, 0x34, 0xd2, 0xc1, 0xbd, 0x43, 0x09, + 0xe7, 0x24, 0xf1, 0x7b, 0xcb, 0x77, 0x3b, 0x1e, + 0x18, 0xf9, 0x20, 0x63, 0x0d, 0xc5, 0x3c, 0x42, + 0xed, 0x80, 0x9e, 0xe9, 0x1b, 0x57, 0x8e, 0x36, + 0xcd, 0xf6, 0xd0, 0xb8, 0xca, 0x1b, 0xd7, 0xcc, + 0xe3, 0x24, 0xbc, 0x3b, 0xb8, 0x8f, 0x32, 0x73, + 0x4e, 0x0c, 0xc5, 0x2a, 0x14, 0xa2, 0x88, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0xa1, + 0x04, 0xaf, 0x39, 0xa6, 0x8a, 0x08, 0xdd, 0x2c, + 0xae, 0x0c, 0x63, 0x45, 0x4b, 0x8a, 0xc1, 0xcd, + 0xe7, 0x71, 0xf8, 0x5b, 0x47, 0x5d, 0xde, 0xc8, + 0x18, 0x1a, 0x3c, 0x56, 0xfe, 0xd1, 0x3d, 0xc5, + 0xc7, 0x35, 0x7f, 0xb4, 0x3c, 0x86, 0x7a, 0x43, + 0x6b, 0x67, 0xc5, 0x0d, 0xa5, 0x68, 0x1a, 0xdf, + 0x8c, 0xee, 0xfa, 0x0b, 0x0e, 0xb4, 0xf6, 0xa4, + 0xe0, 0xe7, 0xd8, 0x61, 0x0f, 0xfb, 0x5f, 0x3f, + 0xc3, 0x45, 0x4e, 0xc0, 0x69, 0x8c, 0xce, 0xab, + 0xbe, 0x32, 0x9e, 0x2e, 0x07, 0xba, 0xb2, 0xdc, + 0x3b, 0x98, 0xf3, 0x55, 0x6e, 0xf4, 0x7f, 0xb3, + 0x1b, 0xdc, 0x91, 0x8e, 0xf3, 0x27, 0x58, 0x2d, + 0x89, 0xe2, 0x0c, 0x3f, 0x19, 0xc1, 0x75, 0xfc, + 0x76, 0x36, 0xcf, 0x1b, 0x6c, 0xcb, 0x5b, 0x38, + 0xc4, 0x51, 0x30, 0x50, 0x00, 0x36, 0xfb, 0xa8, + 0x34, 0xf8, 0x3d, 0x17, 0x8b, 0xc2, 0x63, 0x9f, + 0x6f, 0x6f, 0x18, 0x74, 0xf2, 0x30, 0xb1, 0xf2, + 0xbb, 0x69, 0x35, 0x14, 0x5c, 0x43, 0x51, 0x62, + 0x66, 0xc4, 0x65, 0x25, 0xb6, 0x91, 0xa5, 0xad, + 0xe2, 0x3c, 0x35, 0xdd, 0x4a, 0xf2, 0x2f, 0xd2, + 0x4b, 0x9f, 0x7b, 0x5a, 0xc4, 0xb6, 0xe3, 0x15, + 0x1d, 0xc4, 0x50, 0xd6, 0x56, 0x3a, 0xae, 0x90, + 0x0d, 0xb4, 0xee, 0xa0, 0xe3, 0x9d, 0xd4, 0x4d, + 0xbc, 0xa3, 0x68, 0xd8, 0x42, 0x20, 0x77, 0x7d, + 0xe4, 0x4f, 0x85, 0x3e, 0x04, 0x04, 0xee, 0x7b, + 0xe8, 0x9d, 0xce, 0x44, 0x04, 0x44, 0x40, 0xee, + 0xaf, 0xba, 0xd5, 0x7c, 0x29, 0xaa, 0x09, 0x2a, + 0x0e, 0xe5, 0x04, 0xd1, 0x59, 0xf4, 0x96, 0x84, + 0xc9, 0xea, 0x29, 0x84, 0xae, 0x69, 0x82, 0xc4, + 0x6d, 0x74, 0xae, 0x1f, 0x18, 0x73, 0x35, 0x06, + 0xa3, 0x09, 0x81, 0xc9, 0xe6, 0xee, 0x85, 0xbd, + 0x8c, 0x45, 0xf5, 0x3e, 0x33, 0xf9, 0x1a, 0x39, + 0xd7, 0x6a, 0xd2, 0x1a, 0x13, 0x1d, 0xa7, 0x61, + 0x6b, 0xc8, 0xeb, 0xef, 0x1c, 0x01, 0x7c, 0xae, + 0x03, 0x61, 0xe6, 0x6a, 0xdb, 0xe0, 0xf4, 0xfe, + 0x3b, 0x07, 0x68, 0xdb, 0x6b, 0x18, 0xc3, 0x00, + 0x03, 0x8d, 0xdc, 0xae, 0x3c, 0xe4, 0xad, 0x9a, + 0x08, 0x52, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x83, 0xe2, 0x43, + 0x46, 0xd1, 0x61, 0xdc, 0x9d, 0xcd, 0x59, 0x32, + 0x3b, 0x6d, 0x39, 0x96, 0x14, 0xce, 0xab, 0xcf, + 0x73, 0x72, 0x0c, 0x9b, 0x16, 0xf8, 0xae, 0x77, + 0x3a, 0xca, 0x5e, 0x50, 0x34, 0x36, 0x26, 0xd3, + 0x97, 0x6a, 0xf5, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x41, 0x07, 0x71, 0xef, 0x2e, 0x7f, 0x6f, 0x95, + 0x9b, 0x11, 0x96, 0xbe, 0x77, 0x93, 0xba, 0x41, + 0x23, 0x8d, 0x08, 0x0b, 0xa0, 0xaf, 0x23, 0x6b, + 0x6e, 0xe3, 0x53, 0x1b, 0x49, 0xe7, 0xa0, 0x41, + 0x51, 0xf5, 0xd2, 0x5f, 0x32, 0x7f, 0x41, 0x4f, + 0x5d, 0x25, 0xf3, 0x27, 0xf4, 0x15, 0x6d, 0xf2, + 0x4b, 0x6e, 0xc9, 0xbd, 0x01, 0x3c, 0x92, 0xdb, + 0xb2, 0x6f, 0x40, 0x41, 0x52, 0x3a, 0xd2, 0x5f, + 0x32, 0x7f, 0x41, 0x52, 0x35, 0xa4, 0xbe, 0x64, + 0xfe, 0x82, 0xad, 0x9e, 0x49, 0x6d, 0xd9, 0x37, + 0xa0, 0x27, 0x92, 0x5b, 0x76, 0x4d, 0xe8, 0x08, + 0x28, 0x59, 0xcd, 0x41, 0x36, 0x52, 0xcc, 0x5b, + 0x36, 0xd5, 0xcd, 0x77, 0x15, 0x6b, 0x45, 0x9b, + 0x81, 0xd2, 0x52, 0x5c, 0x86, 0x5c, 0xe5, 0x2b, + 0xc3, 0xbd, 0xb1, 0x77, 0x15, 0xc3, 0xc8, 0xed, + 0xbb, 0x26, 0x74, 0x05, 0xea, 0x00, 0x02, 0x83, + 0x70, 0x41, 0xe7, 0x04, 0x11, 0x41, 0x10, 0x8a, + 0x16, 0x86, 0x31, 0xbb, 0x80, 0x5e, 0x85, 0x4a, + 0x84, 0x15, 0xed, 0x46, 0x3a, 0xec, 0x85, 0x85, + 0xb9, 0xf8, 0xa5, 0xfc, 0x45, 0x6f, 0xc0, 0x00, + 0x01, 0xcc, 0x28, 0xb4, 0x1a, 0x80, 0xf5, 0x79, + 0x4c, 0x7c, 0xc7, 0xe2, 0x87, 0x53, 0xa5, 0x58, + 0x2b, 0x5d, 0xbc, 0xea, 0x88, 0x52, 0x8a, 0x10, + 0x4a, 0x28, 0x52, 0x82, 0x14, 0xa2, 0x20, 0x22, + 0x22, 0x08, 0x55, 0x1d, 0x58, 0x5d, 0x73, 0x98, + 0xb2, 0xb3, 0x3f, 0x10, 0x1e, 0x22, 0x15, 0xbd, + 0x54, 0x35, 0x11, 0xea, 0xf5, 0x35, 0x9b, 0xdd, + 0xb1, 0xae, 0x14, 0x05, 0x49, 0x1b, 0x42, 0xd0, + 0x36, 0x0d, 0xc3, 0x72, 0x29, 0x76, 0xf5, 0x08, + 0x0b, 0x4b, 0xa9, 0x99, 0xd5, 0x3a, 0xd6, 0xf1, + 0xbb, 0x1f, 0x1c, 0x83, 0x6a, 0xdd, 0x2d, 0x3e, + 0xaa, 0x70, 0xf2, 0x48, 0x63, 0xde, 0xe7, 0xbc, + 0x51, 0x05, 0xc2, 0xda, 0x4e, 0xb2, 0x08, 0xe4, + 0x3f, 0xb4, 0xd0, 0x57, 0xa1, 0x20, 0x0a, 0x93, + 0x4a, 0x2c, 0x48, 0x26, 0x8e, 0xdb, 0x1f, 0x13, + 0xa6, 0x70, 0x6b, 0x59, 0x18, 0xa9, 0x3d, 0xc0, + 0xb4, 0x57, 0x79, 0x8b, 0xdc, 0xc3, 0xfc, 0x97, + 0x12, 0xd2, 0xd8, 0x89, 0xa3, 0xe7, 0x28, 0x32, + 0xf3, 0x3a, 0x8d, 0xb6, 0xc7, 0xc9, 0xac, 0x87, + 0x5d, 0x74, 0xed, 0x80, 0x0d, 0xb4, 0x25, 0x78, + 0x63, 0xb0, 0x17, 0x17, 0x72, 0xf9, 0x66, 0x61, + 0xc6, 0x47, 0x9d, 0xad, 0x8b, 0x90, 0x2c, 0xdc, + 0x36, 0x9e, 0xb7, 0xc7, 0x8e, 0xb5, 0xe7, 0xad, + 0xb8, 0x76, 0xd7, 0x3d, 0xdb, 0x68, 0xb6, 0xe1, + 0x04, 0x47, 0x1b, 0x23, 0x68, 0x63, 0x00, 0x6b, + 0x46, 0xe0, 0x17, 0xd2, 0x22, 0x02, 0x22, 0x20, + 0xd7, 0x6a, 0x0f, 0xb9, 0x6f, 0x3f, 0xa4, 0xef, + 0x81, 0x56, 0xbd, 0x94, 0x7e, 0x5d, 0x7f, 0xf5, + 0x9f, 0xf0, 0x95, 0x65, 0xd4, 0x3f, 0x72, 0xde, + 0x7f, 0x49, 0xdf, 0x02, 0xad, 0x7b, 0x28, 0xfc, + 0xbc, 0xff, 0x00, 0xeb, 0x3f, 0xe1, 0x28, 0x2e, + 0xca, 0x2a, 0xbc, 0x6f, 0xae, 0x9b, 0x69, 0x6b, + 0x2d, 0xcb, 0xb6, 0xb6, 0x36, 0xf1, 0x51, 0x52, + 0x6f, 0x35, 0xb6, 0x4a, 0x70, 0x7c, 0x92, 0x02, + 0xc6, 0x6d, 0x01, 0xf4, 0xaa, 0x0b, 0xc4, 0xb7, + 0x10, 0xc4, 0x2b, 0x24, 0x81, 0x83, 0xba, 0x56, + 0x93, 0x23, 0xac, 0xb1, 0x76, 0x95, 0x6b, 0x1d, + 0xd6, 0xbc, 0x72, 0x05, 0x46, 0x96, 0xf7, 0x23, + 0x76, 0xfa, 0xdd, 0xba, 0x42, 0x0e, 0xf0, 0x36, + 0x2f, 0xb6, 0xf9, 0x18, 0x02, 0xb0, 0x3c, 0x91, + 0xca, 0x42, 0x0d, 0x85, 0xfe, 0xb6, 0xc9, 0x5d, + 0x3c, 0x8b, 0x7a, 0x40, 0xcf, 0xf1, 0xce, 0xb4, + 0x73, 0xdd, 0xdc, 0x5c, 0xb8, 0xba, 0x79, 0x0b, + 0xc9, 0xe4, 0xae, 0xc5, 0x9b, 0xc5, 0x67, 0xbc, + 0x40, 0xfe, 0x85, 0x15, 0xb4, 0xec, 0x1f, 0xd0, + 0xa8, 0xc3, 0xb7, 0xb8, 0x7d, 0xbb, 0xf8, 0xa3, + 0x00, 0xd7, 0x7d, 0x56, 0xf6, 0xcd, 0xd8, 0xcc, + 0xa3, 0x7a, 0xb9, 0x18, 0x22, 0x9f, 0x9c, 0x6c, + 0x5a, 0x99, 0xa0, 0x81, 0xf0, 0x3a, 0xe2, 0x1a, + 0x80, 0xc3, 0x42, 0xd2, 0xb1, 0xa3, 0x92, 0x48, + 0xe4, 0x6b, 0xe2, 0x27, 0x8d, 0xbb, 0xa8, 0x82, + 0xc7, 0x0d, 0xde, 0x4b, 0x4f, 0xdc, 0x34, 0x17, + 0x19, 0x6c, 0x89, 0xe5, 0xe4, 0x0a, 0xdd, 0x16, + 0x46, 0xd1, 0xf6, 0xed, 0xba, 0x12, 0x34, 0x46, + 0xf1, 0x5d, 0xea, 0xa3, 0x26, 0x40, 0xdd, 0x58, + 0xf5, 0x72, 0xc7, 0xf1, 0x85, 0x1c, 0x0e, 0xfa, + 0xaf, 0x0c, 0x5c, 0x0f, 0xb8, 0x95, 0x98, 0xd0, + 0xe7, 0x07, 0x0d, 0xa0, 0x3b, 0x60, 0x1e, 0xe2, + 0x0c, 0xed, 0x47, 0x75, 0x69, 0x7d, 0x2c, 0x72, + 0xd9, 0x80, 0xc9, 0xe1, 0x35, 0xeb, 0xb7, 0x15, + 0x83, 0x67, 0x79, 0x25, 0xb6, 0x46, 0x0c, 0x9b, + 0x08, 0x73, 0x0b, 0x84, 0x73, 0xbf, 0x9d, 0x5a, + 0xac, 0xb4, 0xfd, 0xa4, 0x2d, 0xa4, 0xff, 0x00, + 0xc6, 0x91, 0xc3, 0x69, 0x3c, 0x8a, 0x9d, 0x74, + 0x3c, 0x9c, 0x5e, 0xda, 0x57, 0x64, 0x72, 0x87, + 0xb1, 0x41, 0x74, 0xd5, 0xae, 0x0f, 0xd2, 0xf7, + 0xef, 0x1b, 0x9d, 0x03, 0x88, 0xf7, 0x42, 0xd6, + 0xfb, 0x2f, 0xfc, 0xa1, 0x69, 0xee, 0xac, 0x9c, + 0xeb, 0x8b, 0xb4, 0x55, 0xc3, 0x9d, 0xbc, 0xda, + 0x9a, 0xff, 0x00, 0xe2, 0xb1, 0xbd, 0x97, 0xfe, + 0x50, 0xb4, 0xf7, 0x50, 0x5b, 0x51, 0x11, 0x05, + 0x4f, 0x37, 0xf9, 0xa6, 0xc7, 0xbf, 0x1f, 0xef, + 0x2b, 0x5a, 0xaa, 0x66, 0xff, 0x00, 0x34, 0xd8, + 0xf7, 0xe3, 0xfd, 0xe5, 0x6b, 0x41, 0x28, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0xaa, 0x7a, + 0xaf, 0xef, 0xac, 0x7f, 0x79, 0xbf, 0xdc, 0x0a, + 0xd8, 0xaa, 0x7a, 0xaf, 0xef, 0xac, 0x7f, 0x79, + 0xbf, 0xdc, 0x08, 0x2d, 0x7c, 0xaa, 0x54, 0x72, + 0xa9, 0x40, 0x44, 0x44, 0x10, 0xa8, 0x1a, 0x96, + 0xd1, 0xd6, 0x59, 0xde, 0xb1, 0xa2, 0x91, 0xdc, + 0xed, 0xee, 0x55, 0x74, 0x05, 0x5c, 0xd6, 0xb6, + 0x46, 0x7c, 0x68, 0xb8, 0x68, 0xf1, 0xad, 0xcf, + 0x11, 0xef, 0x20, 0xd0, 0x5b, 0xcd, 0x2b, 0x1d, + 0xd5, 0xc6, 0xf3, 0x1b, 0x65, 0x21, 0xae, 0xef, + 0x2d, 0xf8, 0x93, 0x13, 0x86, 0x88, 0x39, 0xb4, + 0x9e, 0xe5, 0xc3, 0x67, 0x29, 0xa9, 0x55, 0x88, + 0x9f, 0xd6, 0x44, 0xd7, 0x8d, 0xe4, 0x2d, 0xe6, + 0x18, 0x62, 0xe3, 0x81, 0xd7, 0x77, 0x87, 0x8a, + 0x56, 0x9a, 0x06, 0x9d, 0xbd, 0x08, 0x3e, 0xdb, + 0x06, 0x53, 0x34, 0xfe, 0xb2, 0x62, 0x60, 0xb6, + 0xe6, 0x3b, 0x36, 0x2c, 0x7c, 0xcd, 0xae, 0x3e, + 0xd5, 0x91, 0xc5, 0x6a, 0xe0, 0xf9, 0x47, 0xc6, + 0x21, 0x32, 0x39, 0xeb, 0x8b, 0xa3, 0xd5, 0xc1, + 0xfc, 0x28, 0x46, 0xca, 0x0d, 0xe4, 0x2d, 0x60, + 0xa9, 0x35, 0x24, 0x9e, 0xe9, 0x41, 0x15, 0xe7, + 0x5f, 0x2f, 0x7b, 0x23, 0x6f, 0x13, 0xcf, 0x0b, + 0x46, 0xf2, 0xb1, 0xee, 0xef, 0xe2, 0xb6, 0x04, + 0x03, 0xc5, 0x29, 0xd8, 0x1a, 0x37, 0xaf, 0x7c, + 0x56, 0x9b, 0xc9, 0x66, 0x24, 0x6c, 0xf7, 0xb5, + 0x86, 0xdb, 0x7f, 0x09, 0xe5, 0x08, 0x30, 0xbc, + 0xa2, 0xee, 0xfe, 0x5f, 0x27, 0xc7, 0x46, 0xe7, + 0xf1, 0x6c, 0x2f, 0xe4, 0x0a, 0xd1, 0x82, 0xd1, + 0xb6, 0xf6, 0x84, 0x5c, 0xdf, 0x91, 0x35, 0xc1, + 0xda, 0x41, 0xe4, 0x2b, 0x77, 0x67, 0x61, 0x65, + 0x8e, 0x84, 0x47, 0x6e, 0xc0, 0xd0, 0xd1, 0x42, + 0xf3, 0x4a, 0xac, 0x7b, 0xcc, 0xbb, 0x59, 0x58, + 0xe1, 0xf1, 0x9c, 0x3f, 0x69, 0x06, 0x64, 0xf7, + 0x50, 0x5b, 0x33, 0xc6, 0x21, 0xa0, 0x6e, 0x60, + 0x5a, 0xf3, 0x9d, 0x20, 0x9a, 0x33, 0x67, 0x22, + 0xd6, 0x3e, 0x47, 0xc8, 0x4b, 0x9e, 0x49, 0x27, + 0x9d, 0x7c, 0xa0, 0xda, 0x7a, 0x74, 0xfc, 0x95, + 0x3e, 0x9c, 0xff, 0x00, 0x6a, 0xd5, 0x2c, 0xab, + 0x2b, 0x29, 0x6e, 0x5c, 0x0d, 0x29, 0x18, 0xda, + 0x4a, 0xb6, 0x33, 0xe0, 0xca, 0xcb, 0x70, 0xf0, + 0xc6, 0x47, 0x5d, 0xbb, 0x4a, 0xd8, 0x8a, 0xec, + 0xaa, 0xd7, 0xba, 0xf6, 0xd6, 0xc6, 0x91, 0x44, + 0xde, 0x2a, 0x6f, 0x2a, 0x1b, 0x99, 0x0f, 0x70, + 0x6b, 0x58, 0x4b, 0x8f, 0x22, 0x58, 0xd8, 0x9d, + 0x8a, 0x1c, 0xf6, 0xc6, 0xde, 0x39, 0x1c, 0x18, + 0xc1, 0xbd, 0xc7, 0x60, 0x58, 0xf7, 0x79, 0x0b, + 0x6b, 0x1b, 0x6f, 0x28, 0xbb, 0x77, 0x06, 0xca, + 0x86, 0x9d, 0xe4, 0xaa, 0x1e, 0x67, 0x50, 0x5e, + 0x66, 0xe6, 0x31, 0xc0, 0x4c, 0x56, 0x8d, 0x34, + 0x14, 0xe5, 0x50, 0x6d, 0x75, 0x1e, 0xaf, 0x24, + 0x9b, 0x1c, 0x51, 0xa9, 0x3b, 0x1f, 0x28, 0x55, + 0xb8, 0x6d, 0x88, 0x26, 0x59, 0xdc, 0x64, 0x9d, + 0xdb, 0x6a, 0x79, 0xca, 0xf5, 0xb6, 0xb5, 0x20, + 0x88, 0xa1, 0x69, 0x7c, 0x8e, 0x3c, 0x83, 0x6d, + 0x55, 0xc7, 0x03, 0xa5, 0x84, 0x45, 0xb7, 0x57, + 0xbb, 0x5f, 0xbc, 0x46, 0x79, 0x3b, 0xe8, 0x35, + 0x78, 0x5d, 0x37, 0x73, 0x7f, 0x23, 0x66, 0x9d, + 0xbd, 0x5c, 0x0d, 0x20, 0x8a, 0xf2, 0xab, 0xd4, + 0x6c, 0x11, 0xb1, 0xac, 0x6e, 0xe6, 0x80, 0x07, + 0xb8, 0xa5, 0xad, 0x0d, 0x14, 0x68, 0x00, 0x0e, + 0x40, 0xbe, 0x90, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x7c, 0xbd, 0xed, 0x8d, 0xa5, 0xef, + 0x21, 0xad, 0x68, 0xab, 0x89, 0xdc, 0x00, 0x41, + 0x25, 0x56, 0x75, 0x66, 0xb9, 0xc6, 0xe9, 0xfb, + 0x77, 0x00, 0xf1, 0x35, 0xd9, 0xd8, 0xc8, 0x9b, + 0xb6, 0x87, 0xba, 0xab, 0x1a, 0xe7, 0xda, 0x6b, + 0x20, 0x2f, 0xc7, 0x61, 0x5e, 0x1d, 0x21, 0xf1, + 0x64, 0x9c, 0x6e, 0x1d, 0xe5, 0x43, 0xc2, 0x60, + 0x33, 0x5a, 0xb3, 0x20, 0x78, 0x4b, 0x9f, 0x53, + 0x59, 0x67, 0x75, 0x68, 0x36, 0xa0, 0xf8, 0xc9, + 0x65, 0x73, 0x9a, 0xaf, 0x25, 0x47, 0x71, 0x4c, + 0xf9, 0x1d, 0xe2, 0x42, 0xdd, 0xa1, 0xb5, 0x2b, + 0xa3, 0xe8, 0xaf, 0x66, 0x36, 0xf6, 0x21, 0x97, + 0xd9, 0x76, 0x89, 0x6e, 0x4e, 0xd6, 0xc4, 0x77, + 0x0e, 0x5d, 0xaa, 0xc9, 0xa5, 0xf4, 0x66, 0x2f, + 0x4f, 0xdb, 0x35, 0xb1, 0xb0, 0x49, 0x70, 0x69, + 0xc7, 0x29, 0x1b, 0x6b, 0xdc, 0x56, 0x14, 0x10, + 0xd6, 0xb5, 0x8d, 0x0d, 0x68, 0xa3, 0x46, 0xc0, + 0x07, 0x20, 0x5f, 0x48, 0x88, 0x0b, 0x1e, 0xf6, + 0xca, 0xde, 0xfa, 0xdd, 0xd6, 0xf7, 0x0d, 0x0f, + 0x8d, 0xfb, 0xc1, 0x59, 0x08, 0x83, 0x81, 0xfb, + 0x41, 0xd3, 0x07, 0x03, 0x98, 0x71, 0x85, 0xa4, + 0x5a, 0x5c, 0xf8, 0xd1, 0x3b, 0x90, 0x1e, 0x65, + 0x57, 0x5f, 0xa0, 0x35, 0xde, 0x9d, 0x8b, 0x3b, + 0x83, 0x96, 0x33, 0xb2, 0x6b, 0x76, 0x99, 0x62, + 0x23, 0x7d, 0x5a, 0x2b, 0x45, 0xf9, 0xfc, 0x87, + 0x35, 0xc5, 0x8e, 0x04, 0x3d, 0x86, 0x8e, 0x07, + 0x9c, 0x20, 0x77, 0x39, 0x51, 0x39, 0x3b, 0x88, + 0x80, 0x88, 0x9d, 0xed, 0xe8, 0x08, 0x8a, 0x36, + 0xa0, 0x95, 0x2d, 0x0e, 0x73, 0xc3, 0x1a, 0x38, + 0x9c, 0xe3, 0x46, 0x81, 0xb4, 0xd5, 0x64, 0x63, + 0xf1, 0xb7, 0xd9, 0x3b, 0x86, 0xdb, 0x59, 0x44, + 0xe9, 0xa4, 0x71, 0x1b, 0x1a, 0x2b, 0x4e, 0xfa, + 0xec, 0x7a, 0x2b, 0xd9, 0xcd, 0x9e, 0x15, 0xad, + 0xbd, 0xbd, 0x1d, 0x7d, 0xeb, 0x85, 0x78, 0x5c, + 0x2a, 0xd6, 0x20, 0xae, 0x68, 0xaf, 0x65, 0xd2, + 0x4e, 0x59, 0x91, 0xce, 0xb7, 0x86, 0x27, 0x51, + 0xd1, 0xdb, 0xf2, 0x9f, 0x9c, 0xba, 0xad, 0xb5, + 0xac, 0x16, 0xb0, 0xb6, 0x0b, 0x76, 0x08, 0xe3, + 0x60, 0xa3, 0x5a, 0xd1, 0x4d, 0x81, 0x7a, 0x80, + 0x37, 0x72, 0x29, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x51, 0x5a, + 0x6f, 0x45, 0xa6, 0xd5, 0x0e, 0x8c, 0x58, 0xc5, + 0xd7, 0x3b, 0x86, 0x23, 0x33, 0x04, 0x86, 0xa4, + 0x78, 0xbd, 0xf0, 0x9c, 0xba, 0xcd, 0x0d, 0xcd, + 0x41, 0xdc, 0x42, 0x55, 0x56, 0x60, 0xf4, 0x4b, + 0x32, 0x56, 0x83, 0x0d, 0x38, 0x74, 0x8e, 0x75, + 0x25, 0x68, 0x79, 0x70, 0x2c, 0xe5, 0xde, 0x56, + 0x7d, 0xe5, 0xfe, 0x62, 0x37, 0x4b, 0x25, 0xb5, + 0xb4, 0x66, 0xde, 0x1e, 0x59, 0x5c, 0x43, 0x9d, + 0x4d, 0xfc, 0x20, 0x27, 0x0b, 0x29, 0xb1, 0x95, + 0xae, 0x00, 0xb9, 0x60, 0x96, 0xbc, 0x93, 0xb1, + 0x79, 0x4d, 0x99, 0xb8, 0x73, 0x2c, 0xfc, 0x96, + 0x20, 0xf7, 0xde, 0xb0, 0x96, 0x87, 0x92, 0x00, + 0x22, 0x9b, 0xe8, 0xb6, 0x4c, 0x73, 0xd9, 0x6d, + 0xd6, 0xdc, 0x86, 0xb6, 0x46, 0xb4, 0x99, 0x03, + 0x36, 0x8d, 0x82, 0xbb, 0x2a, 0x9c, 0xfa, 0x4d, + 0x7b, 0x8e, 0x5d, 0x5f, 0x16, 0x46, 0x41, 0x56, + 0x3b, 0x70, 0xdc, 0x56, 0x5a, 0xd4, 0xd8, 0x64, + 0x6f, 0xee, 0x65, 0x8d, 0xef, 0xb7, 0x02, 0xce, + 0x70, 0x4c, 0x32, 0xb4, 0x92, 0xea, 0x0d, 0xdc, + 0x63, 0x91, 0x7c, 0xcd, 0x95, 0xc9, 0x3d, 0xf3, + 0x3e, 0xc6, 0xdd, 0x92, 0x5b, 0x5b, 0x92, 0xd7, + 0xb9, 0xe4, 0x87, 0x38, 0xb7, 0xe3, 0x70, 0x01, + 0xcc, 0x83, 0x6e, 0x95, 0xda, 0xb5, 0x52, 0xe6, + 0x24, 0x99, 0xb6, 0xec, 0xc7, 0x31, 0xb2, 0xcf, + 0x70, 0xde, 0x30, 0xd9, 0x09, 0x0d, 0x0c, 0x1b, + 0xeb, 0x4e, 0xea, 0xc1, 0xc7, 0xe4, 0x65, 0x86, + 0xe3, 0x29, 0x71, 0x78, 0xd2, 0xc7, 0xc6, 0xe8, + 0xda, 0x58, 0x09, 0x20, 0x9e, 0x1a, 0x78, 0xb5, + 0xe7, 0x29, 0xdb, 0xc6, 0xbe, 0x62, 0xc8, 0x8b, + 0x53, 0x06, 0x47, 0x21, 0x1c, 0xd1, 0x36, 0xfe, + 0x28, 0xe3, 0x8a, 0x73, 0xc3, 0x1b, 0xa3, 0x71, + 0x24, 0x13, 0xb4, 0x71, 0x57, 0xb8, 0xb6, 0xa8, + 0x25, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x42, 0x94, 0x41, 0xa3, 0xd5, + 0x76, 0xb2, 0x4d, 0x8f, 0x13, 0x44, 0x2b, 0x25, + 0xbb, 0x83, 0xc7, 0x78, 0x2c, 0xcc, 0x3d, 0xfc, + 0x77, 0xd6, 0x31, 0xcc, 0xd3, 0x52, 0x00, 0x0f, + 0x1c, 0xa0, 0x85, 0x9c, 0xf6, 0xb5, 0xed, 0x2d, + 0x70, 0xab, 0x5c, 0x28, 0x47, 0x70, 0xaa, 0x9d, + 0xcd, 0xb5, 0xee, 0x9e, 0xbd, 0x37, 0x76, 0xa0, + 0xbe, 0xc6, 0x43, 0xe3, 0xb3, 0x9a, 0xaa, 0x8b, + 0x62, 0x85, 0xa8, 0xb6, 0xd5, 0x38, 0xb9, 0x9a, + 0x1c, 0xe7, 0xf0, 0x3b, 0x94, 0x39, 0x7b, 0x7a, + 0xc3, 0x8a, 0xed, 0x87, 0x4a, 0x0d, 0x92, 0x2d, + 0x77, 0xa7, 0xf1, 0x5d, 0xb3, 0x7a, 0x54, 0xfa, + 0x7b, 0x16, 0x7f, 0xf7, 0x37, 0xa5, 0x06, 0xc1, + 0x16, 0xbf, 0xd3, 0xb8, 0xbe, 0xd8, 0x74, 0xa9, + 0xf4, 0xde, 0x33, 0xb7, 0x6f, 0x4a, 0x0c, 0xf4, + 0x58, 0x3e, 0x9a, 0xc6, 0x76, 0xed, 0xe9, 0x41, + 0x99, 0xc6, 0xf6, 0xed, 0x41, 0x9a, 0xab, 0x5a, + 0xd6, 0xd2, 0x47, 0x5b, 0xc3, 0x7f, 0x08, 0xab, + 0xad, 0x9c, 0x0b, 0xb9, 0xe9, 0x55, 0xb9, 0xf4, + 0xc6, 0x3b, 0xb7, 0x6f, 0x4a, 0xf9, 0x9b, 0x23, + 0x8a, 0xb8, 0x89, 0xf0, 0xc9, 0x33, 0x5c, 0xc7, + 0x8a, 0x38, 0x77, 0xd0, 0x6b, 0x6c, 0xae, 0x62, + 0xbb, 0xb5, 0x64, 0xf1, 0xb8, 0x10, 0xe0, 0x38, + 0xa9, 0xc8, 0x57, 0xb2, 0xac, 0x3a, 0x7f, 0x57, + 0xef, 0xde, 0xd8, 0x24, 0xeb, 0xec, 0xa5, 0x35, + 0x00, 0x6d, 0xa6, 0xd5, 0xb6, 0x87, 0x50, 0xe2, + 0xe5, 0x6f, 0x11, 0x90, 0x37, 0xb8, 0x52, 0x86, + 0xc8, 0x0a, 0xf8, 0x55, 0x63, 0x33, 0x91, 0x82, + 0x5c, 0xbc, 0x0c, 0x27, 0x8a, 0x2b, 0x72, 0x1c, + 0xea, 0x6d, 0xa9, 0x0b, 0xde, 0xff, 0x00, 0x52, + 0x75, 0xc7, 0xc9, 0x71, 0x8c, 0x2f, 0x96, 0x4f, + 0x14, 0x10, 0xb6, 0x3a, 0x7f, 0x49, 0x36, 0x1a, + 0x5d, 0xe4, 0x3c, 0x79, 0x9d, 0xe3, 0x70, 0x9e, + 0x7e, 0xea, 0x83, 0xe1, 0x96, 0x99, 0x3d, 0x43, + 0x3f, 0x59, 0x71, 0x58, 0x2c, 0x9a, 0x7c, 0x56, + 0x6e, 0xa8, 0x56, 0x6b, 0x2b, 0x1b, 0x6b, 0x28, + 0x44, 0x30, 0x30, 0x35, 0xad, 0xd8, 0xbd, 0x98, + 0xc6, 0xb1, 0xa1, 0xad, 0x00, 0x01, 0xc8, 0xbe, + 0x90, 0x42, 0x94, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x1a, 0xed, 0x43, 0xf7, 0x2d, 0xe7, 0xf4, + 0x9d, 0xf0, 0x2a, 0xd7, 0xb2, 0x8f, 0xcb, 0xcf, + 0xfe, 0xb3, 0xfe, 0x12, 0xac, 0xba, 0x87, 0xee, + 0x5b, 0xcf, 0xe9, 0x3b, 0xe0, 0x55, 0xaf, 0x65, + 0x1f, 0x97, 0x9f, 0xfd, 0x67, 0xfc, 0x25, 0x05, + 0x9b, 0x3f, 0xf7, 0x3d, 0xd7, 0xcc, 0x2a, 0x93, + 0x6a, 0x6e, 0x9a, 0xdb, 0x36, 0x43, 0x08, 0x74, + 0x2e, 0x1e, 0x3b, 0xa9, 0xd3, 0x55, 0x75, 0xcf, + 0xfd, 0xcf, 0x75, 0xf3, 0x0a, 0xa9, 0xbb, 0x20, + 0xfb, 0x5c, 0x05, 0xb4, 0x10, 0x6d, 0xb8, 0xb8, + 0xf1, 0x59, 0xce, 0x2b, 0xb1, 0x06, 0x4e, 0x43, + 0x2d, 0x8f, 0xb7, 0x7f, 0x51, 0x6d, 0x00, 0x9e, + 0x7a, 0x0a, 0x86, 0x8a, 0xed, 0x58, 0x7e, 0x57, + 0x96, 0x24, 0x49, 0xe8, 0xef, 0x13, 0x9a, 0x8b, + 0xec, 0x39, 0xb8, 0x96, 0xc7, 0x63, 0x63, 0x17, + 0x95, 0x65, 0x67, 0x15, 0x99, 0xe7, 0x6f, 0x09, + 0x2b, 0x23, 0xd0, 0xba, 0xa4, 0xb0, 0xcf, 0xd7, + 0x80, 0xf3, 0xb7, 0xab, 0x3f, 0x02, 0x09, 0xc7, + 0xe5, 0xac, 0x2e, 0x24, 0xea, 0x2e, 0xad, 0xc5, + 0xbc, 0xdc, 0x81, 0xc2, 0x8a, 0x33, 0x4d, 0x9a, + 0x2b, 0x88, 0x5b, 0x6b, 0x00, 0x74, 0x4e, 0x1e, + 0x33, 0x80, 0xd9, 0x45, 0x85, 0x79, 0x70, 0xcb, + 0xb8, 0x24, 0xb6, 0xca, 0xc6, 0x2d, 0x72, 0x36, + 0xc2, 0xb1, 0x48, 0x36, 0x71, 0x2c, 0xed, 0x3d, + 0x93, 0x75, 0xed, 0x8b, 0xe1, 0x97, 0x6c, 0xd0, + 0x82, 0x2a, 0x79, 0x40, 0x41, 0xa0, 0x64, 0x61, + 0xf0, 0x5c, 0xb0, 0x0d, 0x9d, 0x66, 0xd0, 0x17, + 0x94, 0x93, 0x43, 0x69, 0x48, 0xe2, 0x8e, 0xaf, + 0x23, 0xe3, 0x3b, 0x7a, 0xd8, 0xe2, 0x68, 0x65, + 0xb9, 0xaf, 0xcb, 0xe5, 0x5a, 0xfc, 0xde, 0xcb, + 0xdf, 0x71, 0x5a, 0x19, 0x18, 0x1b, 0x91, 0x35, + 0xf1, 0x65, 0xc7, 0x8d, 0xc4, 0x3c, 0x5a, 0xad, + 0x85, 0xef, 0xfc, 0x4c, 0xf5, 0x9d, 0xc3, 0x3c, + 0x5e, 0x32, 0x1a, 0xea, 0x2d, 0x1e, 0x29, 0xc5, + 0xb9, 0x18, 0x88, 0xe7, 0x5b, 0xdc, 0xbf, 0x8f, + 0x92, 0xb1, 0x63, 0x77, 0xf1, 0x82, 0x82, 0xe9, + 0x5d, 0xce, 0x1b, 0xa9, 0x52, 0x57, 0x38, 0xbf, + 0x71, 0xbb, 0xce, 0xcb, 0x04, 0x22, 0xa6, 0x69, + 0x00, 0xd9, 0xdc, 0x57, 0x8c, 0xce, 0x42, 0x3c, + 0x6e, 0x39, 0xf2, 0xb8, 0x80, 0xf2, 0xde, 0x16, + 0x37, 0x96, 0xb4, 0x5a, 0x6d, 0x1f, 0x81, 0x93, + 0xad, 0x39, 0x7b, 0xb1, 0xe3, 0x4b, 0x53, 0x1b, + 0x4f, 0x25, 0x52, 0x46, 0xd3, 0x53, 0x45, 0xd4, + 0xe9, 0x1b, 0xc8, 0xbe, 0x45, 0xb1, 0x6f, 0x43, + 0x56, 0x07, 0xb2, 0xff, 0x00, 0xca, 0x16, 0x9e, + 0xea, 0xd9, 0xeb, 0x0f, 0xcb, 0x59, 0x0f, 0xe8, + 0xbb, 0xe0, 0x5a, 0xcf, 0x65, 0xff, 0x00, 0x94, + 0x2d, 0x3d, 0xd5, 0x05, 0xb5, 0x11, 0x10, 0x54, + 0xf3, 0x7f, 0x9a, 0x6c, 0x7b, 0xf1, 0xfe, 0xf2, + 0xb5, 0x85, 0x54, 0xcd, 0xfe, 0x69, 0xb1, 0xef, + 0xc7, 0xfb, 0xca, 0xd6, 0x82, 0x51, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x54, 0xb5, 0x5f, + 0xdf, 0x58, 0xee, 0xf3, 0x7f, 0xb8, 0x15, 0xb5, + 0x54, 0xf5, 0x5f, 0xdf, 0x58, 0xfe, 0xf3, 0x7f, + 0xb8, 0x10, 0x5a, 0xf9, 0x54, 0xa8, 0xe5, 0x52, + 0x80, 0x88, 0x88, 0x0b, 0x1e, 0xfe, 0xd9, 0xb7, + 0x76, 0x72, 0xdb, 0xbb, 0x74, 0x8d, 0x21, 0x64, + 0x28, 0x28, 0x39, 0x85, 0xa0, 0x30, 0xbe, 0x5b, + 0x57, 0xfc, 0x68, 0x9c, 0x40, 0xef, 0x2c, 0x93, + 0xbb, 0xb9, 0xcc, 0xb2, 0x35, 0x2d, 0xa9, 0xb0, + 0xce, 0x75, 0xc0, 0x52, 0x2b, 0x9d, 0xbd, 0xca, + 0xad, 0x6d, 0xce, 0x42, 0x18, 0x6a, 0xd6, 0x83, + 0x24, 0x87, 0x63, 0x5a, 0xdd, 0xa8, 0x32, 0x24, + 0x7b, 0x22, 0x6f, 0x13, 0xcd, 0x02, 0xc2, 0x8a, + 0x5b, 0xec, 0xa4, 0xfe, 0x4f, 0x8e, 0x65, 0x41, + 0xd8, 0xe9, 0x29, 0xb9, 0x67, 0xe3, 0xb4, 0xbe, + 0x4f, 0x2d, 0x2b, 0x66, 0xbd, 0x26, 0x1b, 0x63, + 0xb7, 0x83, 0xb8, 0xae, 0x96, 0x18, 0xdb, 0x4c, + 0x6c, 0x22, 0x1b, 0x58, 0xc3, 0x68, 0x28, 0x5d, + 0x41, 0x52, 0x83, 0x4b, 0x86, 0xd1, 0xb6, 0xb6, + 0x65, 0xb7, 0x17, 0xa7, 0xaf, 0xb9, 0x3b, 0x4d, + 0x76, 0x80, 0x56, 0xf6, 0xe2, 0xe6, 0x1b, 0x58, + 0xf6, 0x90, 0x1a, 0x07, 0x8a, 0xc0, 0xbd, 0x1e, + 0xd9, 0x0b, 0x4f, 0x01, 0xa3, 0x8f, 0x2a, 0xd6, + 0xcb, 0x88, 0x9e, 0x67, 0x71, 0x49, 0x25, 0x4a, + 0x0c, 0x4b, 0xac, 0x94, 0xd7, 0x1e, 0x28, 0x3c, + 0x2c, 0x3c, 0x9c, 0xab, 0x0e, 0x9d, 0x27, 0x95, + 0x6d, 0x3d, 0x05, 0x27, 0xcb, 0x50, 0x70, 0x52, + 0xfc, 0xb4, 0x1a, 0xc4, 0xe5, 0xa0, 0xda, 0x4a, + 0xd9, 0x1c, 0x1c, 0xfc, 0x8e, 0x0b, 0x26, 0xcf, + 0x10, 0xd8, 0x49, 0x7c, 0xbe, 0x3b, 0xb9, 0x10, + 0x62, 0xd8, 0x62, 0xcc, 0x94, 0x92, 0x61, 0x41, + 0xc8, 0xd5, 0x97, 0x76, 0xdb, 0x90, 0xce, 0xa6, + 0xd5, 0xa1, 0xad, 0xe7, 0x0b, 0x3f, 0x84, 0xd2, + 0x9b, 0x28, 0x14, 0x1a, 0x30, 0x17, 0x3d, 0xc1, + 0xad, 0x1b, 0xc9, 0xe4, 0x41, 0xa1, 0x6e, 0x2a, + 0xed, 0xce, 0x15, 0x1b, 0xf7, 0x95, 0xf1, 0x90, + 0xca, 0xe3, 0xb0, 0x11, 0x11, 0xb2, 0x5b, 0xc2, + 0x36, 0x34, 0x6d, 0xa1, 0x5e, 0x19, 0xdd, 0x65, + 0x14, 0x41, 0xd6, 0xb8, 0xcf, 0xe2, 0x4c, 0x76, + 0x17, 0x8e, 0x45, 0x53, 0x6c, 0x0f, 0x92, 0x43, + 0x71, 0x74, 0xe3, 0x24, 0xae, 0x35, 0xdb, 0xb5, + 0x07, 0xad, 0xed, 0xd5, 0xfe, 0x62, 0x6f, 0x28, + 0xbc, 0x79, 0x0c, 0xde, 0xd6, 0x03, 0xb3, 0xa1, + 0x7d, 0xdb, 0xb2, 0xdf, 0xad, 0x65, 0xbb, 0xa4, + 0x6c, 0x35, 0xe5, 0xdd, 0x45, 0x17, 0x36, 0xf9, + 0x48, 0xed, 0xfa, 0xcb, 0x6b, 0x67, 0x4a, 0x5c, + 0x3c, 0x4d, 0x8a, 0xab, 0x79, 0xa7, 0x75, 0x6d, + 0xe4, 0xc6, 0x69, 0x20, 0x90, 0x1e, 0x40, 0x2a, + 0x28, 0xac, 0x8e, 0xb3, 0x88, 0x76, 0x9a, 0xc6, + 0x80, 0xff, 0x00, 0x29, 0x8d, 0xf3, 0x11, 0xb5, + 0xc4, 0xd5, 0x6d, 0xbd, 0x63, 0xc2, 0xf9, 0xd4, + 0x7d, 0x2b, 0x85, 0x7a, 0xa5, 0xaa, 0xbb, 0x19, + 0x3a, 0x4a, 0x8f, 0x54, 0xb5, 0x57, 0x61, 0x2f, + 0x49, 0x50, 0x77, 0x6f, 0x59, 0x30, 0xde, 0x75, + 0x1f, 0x4a, 0x7a, 0xc9, 0x86, 0xf3, 0xa8, 0xfa, + 0x57, 0x09, 0xf5, 0x4b, 0x55, 0x76, 0x12, 0xf4, + 0x94, 0xf5, 0x4f, 0x54, 0xf6, 0x32, 0xf4, 0x94, + 0x1d, 0xdb, 0xd6, 0x4c, 0x37, 0x9d, 0x47, 0xd2, + 0x9e, 0xb2, 0x61, 0xbc, 0xea, 0x3e, 0x95, 0xc2, + 0x7d, 0x52, 0xd5, 0x5d, 0x84, 0xbd, 0x25, 0x3d, + 0x52, 0xd5, 0x5d, 0x84, 0xbd, 0x25, 0x07, 0x76, + 0xf5, 0x93, 0x0d, 0xe7, 0x51, 0xf4, 0xa7, 0xac, + 0x98, 0x6f, 0x3a, 0x8f, 0xa5, 0x70, 0x9f, 0x54, + 0xf5, 0x4f, 0x63, 0x2f, 0x49, 0x4f, 0x54, 0xb5, + 0x57, 0x63, 0x2f, 0x49, 0x41, 0xdd, 0xbd, 0x64, + 0xc3, 0x79, 0xd4, 0x7d, 0x29, 0xeb, 0x26, 0x1b, + 0xce, 0xa3, 0xe9, 0x5c, 0x27, 0xd5, 0x2d, 0x55, + 0xd8, 0x4b, 0xd2, 0x53, 0xd5, 0x3d, 0x55, 0xd8, + 0xcb, 0xd2, 0x50, 0x77, 0x6f, 0x59, 0x30, 0xde, + 0x75, 0x1f, 0x4a, 0x7a, 0xc9, 0x86, 0xf3, 0xa8, + 0xfa, 0x57, 0x09, 0xf5, 0x4b, 0x55, 0x76, 0x12, + 0xf4, 0x94, 0xf5, 0x4b, 0x55, 0x76, 0x12, 0xf4, + 0x94, 0x1d, 0xdb, 0xd6, 0x4c, 0x37, 0x9d, 0x47, + 0xd2, 0x9e, 0xb2, 0x61, 0xbc, 0xea, 0x3e, 0x95, + 0xc2, 0x7d, 0x53, 0xd5, 0x3d, 0x8c, 0xbd, 0x25, + 0x3d, 0x52, 0xd5, 0x5d, 0x84, 0xbd, 0x25, 0x07, + 0x76, 0xf5, 0x93, 0x0d, 0xe7, 0x51, 0xf4, 0xa7, + 0xac, 0x98, 0x6f, 0x3a, 0x8f, 0xa5, 0x70, 0x9f, + 0x54, 0xb5, 0x57, 0x61, 0x2f, 0x49, 0x4f, 0x54, + 0xf5, 0x57, 0x63, 0x2f, 0x49, 0x41, 0xdd, 0xbd, + 0x64, 0xc3, 0x79, 0xd4, 0x7d, 0x29, 0xeb, 0x26, + 0x1b, 0xce, 0xa3, 0xe9, 0x5c, 0x27, 0xd5, 0x2d, + 0x55, 0xd8, 0x4b, 0xd2, 0x53, 0xd5, 0x2d, 0x55, + 0xd8, 0x4b, 0xd2, 0x50, 0x77, 0x6f, 0x59, 0x30, + 0xde, 0x75, 0x1f, 0x4a, 0x7a, 0xc9, 0x86, 0xf3, + 0xa8, 0xfa, 0x57, 0x09, 0xf5, 0x4f, 0x54, 0xf6, + 0x32, 0xf4, 0x94, 0xf5, 0x4f, 0x54, 0xf6, 0x32, + 0xf4, 0x94, 0x1d, 0xdb, 0xd6, 0x4c, 0x37, 0x9d, + 0x47, 0xd2, 0x9e, 0xb2, 0x61, 0xbc, 0xea, 0x3e, + 0x95, 0xc2, 0x7d, 0x52, 0xd5, 0x5d, 0x84, 0xbd, + 0x25, 0x3d, 0x52, 0xd5, 0x5d, 0x84, 0xbd, 0x25, + 0x07, 0x76, 0xf5, 0x93, 0x0d, 0xe7, 0x51, 0xf4, + 0xa7, 0xac, 0x98, 0x6f, 0x3a, 0x8f, 0xa5, 0x70, + 0x9f, 0x54, 0xf5, 0x4f, 0x63, 0x2f, 0x49, 0x4f, + 0x54, 0xf5, 0x57, 0x63, 0x2f, 0x49, 0x41, 0xdd, + 0xbd, 0x64, 0xc3, 0x79, 0xd4, 0x7d, 0x29, 0xeb, + 0x26, 0x1b, 0xce, 0xa3, 0xe9, 0x5c, 0x27, 0xd5, + 0x2d, 0x55, 0xd8, 0x4b, 0xd2, 0x53, 0xd5, 0x3d, + 0x53, 0xd8, 0xcb, 0xd2, 0x50, 0x77, 0x6f, 0x59, + 0x30, 0xde, 0x75, 0x1f, 0x4a, 0x7a, 0xc9, 0x86, + 0xf3, 0xa8, 0xfa, 0x57, 0x09, 0xf5, 0x4b, 0x55, + 0x76, 0x12, 0xf4, 0x94, 0xf5, 0x4b, 0x55, 0x76, + 0x12, 0xf4, 0x94, 0x1d, 0xdb, 0xd6, 0x4c, 0x37, + 0x9d, 0x47, 0xd2, 0x9e, 0xb2, 0x61, 0xbc, 0xea, + 0x3e, 0x95, 0xc2, 0x7d, 0x53, 0xd5, 0x3d, 0x8c, + 0xbd, 0x25, 0x3d, 0x53, 0xd5, 0x3d, 0x8c, 0xbd, + 0x25, 0x07, 0x76, 0xf5, 0x93, 0x0d, 0xe7, 0x51, + 0xf4, 0xa7, 0xac, 0x98, 0x6f, 0x3a, 0x8f, 0xa5, + 0x70, 0x9f, 0x54, 0xb5, 0x57, 0x61, 0x2f, 0x49, + 0x4f, 0x54, 0xf5, 0x4f, 0x63, 0x2f, 0x49, 0x41, + 0xdd, 0xbd, 0x64, 0xc3, 0x79, 0xd4, 0x7d, 0x29, + 0xeb, 0x26, 0x1b, 0xce, 0xa3, 0xe9, 0x5c, 0x27, + 0xd5, 0x2d, 0x55, 0xd8, 0xcb, 0xd2, 0x53, 0xd5, + 0x2d, 0x55, 0xd8, 0x4b, 0xd2, 0x50, 0x77, 0x1b, + 0xad, 0x57, 0x82, 0xb6, 0x81, 0xf3, 0xc9, 0x74, + 0xce, 0x16, 0x0a, 0x90, 0x0e, 0xd5, 0xc9, 0x75, + 0x7f, 0xb4, 0x7c, 0x8e, 0x69, 0xf2, 0x5a, 0x59, + 0x38, 0xc3, 0x66, 0x4d, 0x00, 0x6e, 0xf7, 0x05, + 0xa8, 0x3a, 0x43, 0x54, 0x3c, 0x70, 0x18, 0x24, + 0x20, 0xec, 0xa1, 0x26, 0x8a, 0xfd, 0xa2, 0xbd, + 0x98, 0x47, 0x6d, 0xc1, 0x7d, 0x99, 0x1c, 0x72, + 0xef, 0x64, 0x07, 0x70, 0x23, 0x9d, 0x05, 0x73, + 0x45, 0xfb, 0x38, 0xbb, 0xcd, 0x38, 0x5f, 0x64, + 0x41, 0x8a, 0xd2, 0xb5, 0x00, 0xef, 0x72, 0xec, + 0x18, 0x9c, 0x3d, 0x86, 0x22, 0xd5, 0xb6, 0xb6, + 0x51, 0x08, 0xd8, 0xd1, 0x4d, 0x9b, 0xcf, 0x7d, + 0x65, 0xc7, 0x1c, 0x71, 0xb0, 0x32, 0x36, 0x86, + 0xb5, 0xa2, 0x80, 0x0d, 0x80, 0x2f, 0xb4, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0x04, + 0x02, 0x28, 0x76, 0x83, 0xbc, 0x2e, 0x1d, 0xed, + 0x37, 0x4d, 0x3b, 0x13, 0x99, 0x7d, 0xec, 0x11, + 0x86, 0x59, 0x5e, 0x10, 0x5b, 0x4d, 0xc1, 0xf4, + 0xf1, 0x87, 0xba, 0xbb, 0x92, 0xd3, 0x6a, 0x9d, + 0x3d, 0x6f, 0x9f, 0xc4, 0xc9, 0x65, 0x33, 0x41, + 0x78, 0xf1, 0xa1, 0x77, 0x33, 0xc6, 0xe4, 0x1f, + 0x9d, 0x3b, 0xbe, 0xf2, 0x2c, 0x8b, 0xfb, 0x0b, + 0x8c, 0x7d, 0xe4, 0xb6, 0xb7, 0x0d, 0x2d, 0x92, + 0x27, 0x16, 0x9a, 0xf2, 0xd3, 0x95, 0x63, 0xa0, + 0x22, 0x20, 0x0e, 0x71, 0x0d, 0x68, 0x24, 0x9d, + 0xc0, 0x20, 0x12, 0x39, 0x56, 0xef, 0x4c, 0xe9, + 0x1c, 0xa6, 0xa1, 0xb8, 0x0d, 0xb6, 0x69, 0x6c, + 0x0d, 0x23, 0xac, 0x95, 0xdb, 0x00, 0x1d, 0xc5, + 0xbf, 0xd1, 0x9e, 0xcd, 0xae, 0xf2, 0xae, 0x6d, + 0xee, 0x4c, 0x18, 0x2d, 0x5a, 0x41, 0x6b, 0x08, + 0xa1, 0x70, 0xf7, 0x57, 0x60, 0xc7, 0xe3, 0xac, + 0xf1, 0xd6, 0xed, 0xb7, 0xb3, 0x89, 0xb1, 0x46, + 0xd1, 0x4a, 0x01, 0xcc, 0x83, 0x59, 0xa6, 0x74, + 0x96, 0x2f, 0x4f, 0x5b, 0x06, 0x5b, 0x44, 0x0c, + 0xc4, 0x0e, 0xb2, 0x53, 0xbc, 0x9f, 0x75, 0x6f, + 0x51, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x04, 0x2d, + 0x3e, 0xa5, 0x74, 0x6c, 0xb4, 0x81, 0xf2, 0xd0, + 0x46, 0xd9, 0xd8, 0x5c, 0x5d, 0xba, 0x9d, 0xd5, + 0xb8, 0x50, 0xe8, 0xd8, 0xf1, 0xc2, 0xf0, 0x1c, + 0x39, 0x88, 0xa8, 0x4e, 0x5d, 0x24, 0x68, 0x2f, + 0x27, 0xc7, 0x5f, 0x4f, 0x69, 0x1e, 0x35, 0xd1, + 0xc9, 0x3b, 0x25, 0x0f, 0x26, 0x3d, 0x94, 0x60, + 0xdf, 0x5a, 0x51, 0x61, 0xdd, 0x3e, 0xda, 0xe9, + 0xf7, 0x5e, 0x91, 0x99, 0xd2, 0xdc, 0x46, 0x5e, + 0xdb, 0x6b, 0x21, 0xe2, 0xb8, 0x0f, 0xd9, 0x2d, + 0xe1, 0xa5, 0x55, 0xa5, 0x90, 0x42, 0xc3, 0xc4, + 0xc6, 0x35, 0xa7, 0x9c, 0x00, 0x0f, 0xbc, 0x86, + 0x08, 0x4b, 0xb8, 0xcb, 0x1a, 0x5d, 0xf2, 0xa8, + 0x2b, 0xd2, 0x9c, 0x28, 0x57, 0xb1, 0xd4, 0x3e, + 0x87, 0xd9, 0xba, 0x17, 0x8d, 0xbc, 0x86, 0xa1, + 0x6f, 0x6f, 0x23, 0x74, 0xb6, 0x92, 0xc6, 0xcf, + 0x8c, 0xe6, 0x10, 0x3b, 0xf4, 0x5e, 0xa2, 0x36, + 0x0a, 0x50, 0x01, 0x4d, 0xd4, 0x1b, 0xaa, 0xbe, + 0xa8, 0x93, 0xb7, 0xdf, 0x7e, 0xf2, 0x37, 0xf7, + 0x34, 0xd8, 0x7c, 0x95, 0xb1, 0xb6, 0xb6, 0xc7, + 0x82, 0x4d, 0xd3, 0x18, 0x19, 0x2c, 0x6d, 0xfd, + 0x82, 0xd1, 0x42, 0x5c, 0xbc, 0x6d, 0xf2, 0x16, + 0xf8, 0xf8, 0xae, 0xed, 0x6e, 0x9d, 0xd5, 0xcf, + 0xd6, 0x48, 0xe8, 0xd8, 0x77, 0xbc, 0x3f, 0xe2, + 0xf0, 0xad, 0xe8, 0x8a, 0x26, 0xb8, 0xbd, 0xac, + 0x68, 0x71, 0xde, 0xe0, 0x05, 0x7a, 0x51, 0xd0, + 0xc4, 0xe7, 0x07, 0x39, 0x8d, 0x73, 0x86, 0xe2, + 0x40, 0x25, 0x4a, 0xf1, 0x15, 0xab, 0x38, 0xdd, + 0x89, 0xb8, 0xb4, 0xb9, 0xbb, 0x1d, 0x5c, 0x2f, + 0x85, 0xd1, 0xbd, 0xe7, 0x73, 0x1c, 0xe2, 0xd7, + 0x00, 0x7a, 0x17, 0x8c, 0xd4, 0xca, 0x37, 0x2c, + 0xe8, 0x58, 0x5c, 0xce, 0x28, 0x48, 0x1f, 0x29, + 0xad, 0x1b, 0x48, 0xa2, 0xb6, 0x3e, 0x36, 0x3c, + 0x70, 0xbd, 0xa1, 0xc3, 0x99, 0xc0, 0x11, 0xef, + 0xa8, 0x6c, 0x71, 0xb7, 0xe2, 0xb4, 0x36, 0xbb, + 0xe8, 0x00, 0x56, 0xfb, 0x78, 0x9f, 0x35, 0x72, + 0xce, 0x2d, 0x35, 0x24, 0xf6, 0xfe, 0x4f, 0x19, + 0x96, 0xe0, 0x90, 0xee, 0x10, 0xf7, 0x38, 0xb0, + 0xf3, 0xb8, 0x17, 0x2b, 0x28, 0x1b, 0x17, 0xcb, + 0x21, 0x89, 0x86, 0xac, 0x63, 0x5a, 0x4e, 0xf2, + 0x00, 0x1f, 0x02, 0xfb, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x50, 0xe7, 0x35, 0xa2, 0xae, 0x20, 0x01, 0xca, + 0x50, 0x16, 0x26, 0x46, 0xfa, 0xce, 0xd6, 0x07, + 0x3a, 0xe4, 0x82, 0xdf, 0x90, 0x79, 0x56, 0xb7, + 0x2d, 0xa9, 0xed, 0xed, 0x81, 0x8e, 0xd8, 0xf5, + 0xb3, 0x6e, 0xd9, 0xc8, 0xaa, 0x57, 0x57, 0x77, + 0x37, 0x72, 0x19, 0x67, 0x79, 0x71, 0x3c, 0x87, + 0x70, 0x55, 0x1e, 0x5a, 0x82, 0xf6, 0x19, 0x6b, + 0x3d, 0xb4, 0x7d, 0x50, 0xae, 0xc0, 0xb4, 0x5e, + 0x5d, 0x39, 0xe5, 0x5b, 0x1c, 0xa6, 0xcb, 0x5f, + 0x76, 0x8b, 0x4c, 0x8a, 0xc8, 0xf2, 0xf9, 0xb9, + 0xd3, 0xcb, 0xa6, 0xe7, 0x58, 0xe8, 0xa5, 0x8c, + 0x8f, 0x2f, 0x9d, 0x3c, 0xba, 0x7e, 0x75, 0x8e, + 0x89, 0x63, 0x20, 0x5f, 0xcf, 0xcf, 0xf0, 0xa9, + 0xf2, 0xf9, 0xfe, 0x52, 0xc6, 0x44, 0xb1, 0x91, + 0xe5, 0xf7, 0x1f, 0x29, 0x4f, 0x97, 0xdc, 0xfc, + 0xa5, 0x8c, 0x89, 0x63, 0x6b, 0x88, 0x95, 0xf7, + 0xb9, 0x28, 0x2d, 0x26, 0x35, 0x8e, 0x53, 0x47, + 0x2b, 0xef, 0xa8, 0xd8, 0x6a, 0xd4, 0x34, 0x8e, + 0xe5, 0x57, 0x3f, 0xd3, 0x5f, 0x7e, 0xda, 0xfc, + 0xe5, 0xd8, 0x86, 0xe4, 0xb1, 0xad, 0xc6, 0xe9, + 0xfc, 0x6e, 0x38, 0xf1, 0x41, 0x18, 0xe3, 0xe4, + 0x71, 0xde, 0x16, 0xc9, 0x4a, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0xd7, 0x6a, 0x1f, 0xb9, 0x6f, 0x3f, 0xa4, 0xef, + 0x81, 0x56, 0xbd, 0x94, 0x7e, 0x5e, 0x7f, 0xf5, + 0x9f, 0xf0, 0x95, 0x65, 0xd4, 0x3f, 0x72, 0xde, + 0x7f, 0x49, 0xdf, 0x02, 0xad, 0x7b, 0x28, 0xfc, + 0xbc, 0xff, 0x00, 0xeb, 0x3f, 0xe1, 0x28, 0x2c, + 0xd9, 0xe1, 0x5c, 0x45, 0xd7, 0xcc, 0x2a, 0x91, + 0x85, 0x02, 0xe7, 0x23, 0x6e, 0x24, 0xdb, 0x1d, + 0xac, 0x4e, 0x7f, 0x0f, 0x74, 0x54, 0xab, 0xbe, + 0x7b, 0x66, 0x22, 0xeb, 0xe6, 0x15, 0x43, 0xc3, + 0xce, 0x2d, 0x2e, 0xdb, 0x21, 0x1c, 0x4c, 0x96, + 0x22, 0xda, 0xf2, 0x02, 0x50, 0x59, 0x34, 0x9d, + 0xac, 0x72, 0x1b, 0x9c, 0xb4, 0xf4, 0x32, 0xcb, + 0x21, 0x0d, 0x71, 0xe4, 0x68, 0x24, 0x2f, 0x7c, + 0xbe, 0xad, 0xb4, 0xb3, 0xac, 0x36, 0xdf, 0xc7, + 0xb8, 0x3b, 0x1a, 0xd1, 0xce, 0xab, 0xb8, 0xd7, + 0x64, 0x2e, 0x23, 0x7e, 0x36, 0xda, 0x4a, 0x34, + 0x3c, 0xb8, 0xb0, 0x6c, 0xa0, 0x25, 0x59, 0xb0, + 0xfa, 0x66, 0xde, 0xd1, 0xcd, 0xb9, 0xb8, 0x02, + 0x4b, 0x8e, 0x42, 0x79, 0x10, 0x55, 0xb2, 0xd6, + 0x39, 0x29, 0x61, 0x66, 0x67, 0x22, 0x38, 0x5c, + 0xe7, 0xb4, 0x75, 0x7b, 0xb6, 0x55, 0x66, 0x45, + 0x14, 0x76, 0x99, 0xc6, 0x88, 0x47, 0x0c, 0x57, + 0x30, 0x71, 0xd3, 0xba, 0x42, 0xd9, 0x6b, 0x5b, + 0x86, 0xba, 0x0b, 0x7c, 0x74, 0x7b, 0x65, 0x9e, + 0x41, 0x46, 0x8d, 0xe0, 0x02, 0xb0, 0x5d, 0x47, + 0xea, 0x06, 0xc4, 0xdd, 0xbe, 0x49, 0x6e, 0x18, + 0xee, 0xfd, 0x10, 0x6b, 0x71, 0x3f, 0xcd, 0xba, + 0xf9, 0xeb, 0x03, 0x39, 0xff, 0x00, 0x77, 0xdc, + 0x59, 0xf8, 0x9f, 0xe6, 0xdd, 0x7c, 0xf5, 0x81, + 0x9b, 0xff, 0x00, 0xbb, 0xee, 0x2a, 0x90, 0x8c, + 0x2c, 0x7d, 0x66, 0x46, 0x2e, 0x61, 0xe3, 0x15, + 0x99, 0x77, 0x92, 0xa6, 0x6c, 0x4e, 0xc6, 0xf5, + 0x9d, 0x48, 0xa3, 0x07, 0x25, 0x42, 0xd6, 0xd9, + 0x49, 0x71, 0x13, 0x9c, 0x61, 0x1e, 0x33, 0x85, + 0x2b, 0xcb, 0xb7, 0x99, 0x59, 0x30, 0x7a, 0x5e, + 0x6b, 0x82, 0x26, 0xb8, 0x1c, 0x11, 0x9d, 0xa6, + 0xbb, 0xdc, 0xa4, 0xab, 0x1e, 0x2b, 0x3c, 0x96, + 0xa2, 0xb9, 0x0e, 0xb8, 0x24, 0xb4, 0x1f, 0x1a, + 0x9b, 0x9a, 0x15, 0xf6, 0xde, 0x16, 0xc1, 0x03, + 0x21, 0x66, 0xc6, 0xb0, 0x06, 0x8f, 0x71, 0x7c, + 0xda, 0xda, 0x43, 0x69, 0x10, 0x8a, 0x16, 0x86, + 0xb4, 0x73, 0x2f, 0x74, 0x1a, 0x5d, 0x61, 0xf9, + 0x6b, 0x21, 0xfd, 0x17, 0x7c, 0x0b, 0x59, 0xec, + 0xbf, 0xf2, 0x85, 0xa7, 0xba, 0xb6, 0x7a, 0xc3, + 0xf2, 0xd6, 0x43, 0xfa, 0x2e, 0xf8, 0x16, 0xb3, + 0xd9, 0x7f, 0xe5, 0x0b, 0x4f, 0x75, 0x05, 0xb5, + 0x11, 0x10, 0x54, 0xf3, 0x7f, 0x9a, 0x6c, 0x3b, + 0xf1, 0xfe, 0xf2, 0xb5, 0x85, 0x54, 0xcd, 0xfe, + 0x69, 0xb0, 0xef, 0xc7, 0xfb, 0xca, 0xd6, 0x10, + 0x4a, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x2a, 0x9e, 0xab, 0xfb, 0xeb, 0x1f, 0xde, 0x1f, + 0xdc, 0x56, 0xc5, 0x52, 0xd5, 0x7f, 0x7d, 0xe3, + 0xbb, 0xcd, 0xfe, 0xe0, 0x41, 0x6c, 0x52, 0xa3, + 0x95, 0x4a, 0x02, 0x22, 0x20, 0x28, 0x52, 0x88, + 0x2b, 0xba, 0xd3, 0x17, 0x25, 0xf6, 0x38, 0x3a, + 0x01, 0x59, 0xa2, 0x35, 0x05, 0x51, 0xe0, 0xc0, + 0xe6, 0x21, 0x90, 0x4e, 0xd6, 0x83, 0x26, 0xc2, + 0x09, 0xda, 0xba, 0x9d, 0xe3, 0x1c, 0xfb, 0x77, + 0xb5, 0xa2, 0xa4, 0x8d, 0x81, 0x69, 0x45, 0xa5, + 0xd5, 0x3f, 0x96, 0x7a, 0x10, 0x56, 0x04, 0x9a, + 0xbc, 0x00, 0xd1, 0x20, 0x00, 0x6e, 0x01, 0x4f, + 0x5b, 0xac, 0x3b, 0x45, 0x66, 0xf2, 0x4b, 0xae, + 0xcc, 0xf4, 0x27, 0x92, 0x5d, 0x7c, 0x83, 0xd0, + 0x82, 0xb3, 0xd6, 0xeb, 0x0e, 0xd5, 0x3a, 0xdd, + 0x61, 0xda, 0xab, 0x37, 0x92, 0x5d, 0x7c, 0x83, + 0xd0, 0x9e, 0x49, 0x75, 0xd9, 0x9e, 0x84, 0x15, + 0x9e, 0xb7, 0x58, 0x76, 0xa9, 0xd6, 0xeb, 0x0e, + 0xd5, 0x59, 0xbc, 0x92, 0xeb, 0xe4, 0x1e, 0x84, + 0xf2, 0x4b, 0xae, 0xcc, 0xf4, 0x20, 0xac, 0xf5, + 0xba, 0xc3, 0xb5, 0x4e, 0xb3, 0x57, 0xf6, 0x8a, + 0xcd, 0xe4, 0x97, 0x5d, 0x99, 0xe8, 0x4f, 0x24, + 0xba, 0xf9, 0x07, 0xa1, 0x05, 0x67, 0xad, 0xd6, + 0x1d, 0xaa, 0xf0, 0xbc, 0x3a, 0xa6, 0x4b, 0x77, + 0x36, 0xe2, 0x5a, 0x44, 0x7e, 0x35, 0x15, 0xb7, + 0xc9, 0x2e, 0xbb, 0x33, 0xd0, 0xbc, 0x2f, 0x31, + 0xb7, 0xb3, 0xdb, 0xba, 0x16, 0x30, 0x87, 0x3b, + 0x60, 0x28, 0x29, 0x76, 0xd6, 0xac, 0x8e, 0x8d, + 0x60, 0x2f, 0x7b, 0xb9, 0x77, 0x9a, 0xab, 0x6e, + 0x0b, 0x4a, 0x17, 0x70, 0xdc, 0xdf, 0x8d, 0x9b, + 0x0b, 0x63, 0x5b, 0x3c, 0x2e, 0x9b, 0xb7, 0xb0, + 0x60, 0x92, 0x61, 0xd6, 0x4e, 0x76, 0x92, 0x79, + 0x0a, 0xdd, 0x81, 0x4d, 0xc8, 0x3e, 0x19, 0x0c, + 0x4c, 0x68, 0x63, 0x58, 0x03, 0x5b, 0xb0, 0x0a, + 0x2f, 0xae, 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, + 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, + 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, + 0x3e, 0x48, 0xe8, 0x4e, 0x06, 0x7c, 0x91, 0xd0, + 0xbe, 0x91, 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, + 0x4e, 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, + 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, 0x7c, + 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, 0x3e, + 0x48, 0xe8, 0x4e, 0x06, 0x7c, 0x91, 0xd0, 0xbe, + 0x91, 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, + 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, + 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, 0x7c, 0x91, + 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, 0x3e, 0x48, + 0xe8, 0x4e, 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, + 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, + 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, + 0x3e, 0x48, 0xe8, 0x4e, 0x06, 0x7c, 0x91, 0xd0, + 0xbe, 0x91, 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, + 0x4e, 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, + 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, 0x7c, + 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, 0x3e, + 0x48, 0xe8, 0x4e, 0x06, 0x7c, 0x91, 0xd0, 0xbe, + 0x91, 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, + 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, + 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, 0x7c, 0x91, + 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, 0x3e, 0x48, + 0xe8, 0x4e, 0x06, 0x7c, 0x91, 0xd0, 0xbe, 0x91, + 0x07, 0xcf, 0x03, 0x3e, 0x48, 0xe8, 0x4e, 0x06, + 0x7c, 0x91, 0xd0, 0xbe, 0x91, 0x07, 0xcf, 0x03, + 0x3e, 0x48, 0xe8, 0x5f, 0x48, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x0a, 0x14, 0xa2, 0x0a, 0x56, 0xbe, 0xd0, 0x91, + 0xe7, 0x61, 0x37, 0x96, 0x6d, 0x0c, 0xbf, 0x8c, + 0x6c, 0x3f, 0x2a, 0x9c, 0x8b, 0x97, 0x5b, 0x68, + 0x6d, 0x4d, 0x71, 0x1c, 0xaf, 0x65, 0x9b, 0xff, + 0x00, 0x82, 0xee, 0x07, 0x0a, 0x6f, 0x3d, 0xc5, + 0xfa, 0x15, 0x40, 0x68, 0x1b, 0x80, 0x15, 0xdf, + 0x44, 0x1c, 0x22, 0xc7, 0xd9, 0x9e, 0xa8, 0xbb, + 0x90, 0x46, 0xe8, 0x04, 0x03, 0x95, 0xf2, 0x54, + 0x0f, 0xf3, 0x5d, 0x07, 0x4b, 0x7b, 0x31, 0xc6, + 0x62, 0x1e, 0xdb, 0xab, 0xc3, 0xe5, 0x57, 0x34, + 0xf8, 0xae, 0x1e, 0x23, 0x4f, 0x71, 0x5d, 0xe8, + 0x88, 0x21, 0xad, 0x6b, 0x5a, 0x1a, 0xd0, 0x00, + 0x1b, 0x80, 0xd8, 0xbe, 0x91, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x14, 0x1d, 0xca, + 0x54, 0x14, 0x15, 0xd6, 0x5e, 0x5f, 0x5c, 0xde, + 0xcc, 0xd6, 0x5e, 0x88, 0x2e, 0x62, 0x95, 0xcd, + 0x65, 0x8b, 0xc0, 0x0d, 0x73, 0x5b, 0xca, 0x5d, + 0xbf, 0x68, 0x59, 0x17, 0x12, 0xe4, 0xaf, 0x6f, + 0xa6, 0x82, 0xce, 0x7f, 0x27, 0x16, 0x8d, 0x69, + 0xa0, 0x00, 0x87, 0xb9, 0xdb, 0x78, 0x5d, 0x50, + 0xb1, 0xb2, 0x8c, 0x96, 0xf0, 0xbe, 0xda, 0x4c, + 0x7c, 0x9e, 0x52, 0x1f, 0xff, 0x00, 0x1e, 0xea, + 0x31, 0x46, 0x01, 0xc8, 0xe7, 0x3d, 0x7b, 0x52, + 0xf3, 0x15, 0x77, 0x23, 0xd9, 0x04, 0x97, 0x62, + 0xe1, 0x8c, 0x00, 0xc6, 0x38, 0xa8, 0xf6, 0xef, + 0xe2, 0x48, 0xe0, 0x73, 0x65, 0xe4, 0x7c, 0xb8, + 0xc3, 0x19, 0xf2, 0x86, 0xd9, 0xc6, 0xc1, 0xc5, + 0x71, 0x30, 0xda, 0x45, 0x39, 0x1a, 0x1d, 0xb2, + 0x8b, 0x53, 0x06, 0x5e, 0xef, 0xc8, 0xf2, 0x22, + 0x3b, 0xa1, 0x74, 0xeb, 0x50, 0xd3, 0x0d, 0xc5, + 0x29, 0x5e, 0x2e, 0x42, 0x02, 0xca, 0xca, 0xc5, + 0x3b, 0xae, 0x6d, 0x2e, 0x2e, 0x6d, 0xa4, 0xba, + 0x85, 0x8c, 0x3c, 0x70, 0xc3, 0xe3, 0x11, 0x21, + 0xa6, 0xda, 0x6c, 0xaa, 0xc4, 0xf2, 0x4b, 0xf9, + 0x1b, 0x93, 0x77, 0x92, 0x98, 0x85, 0xcb, 0x23, + 0x30, 0xb1, 0xa3, 0x90, 0x72, 0x1a, 0x7e, 0xd7, + 0x3a, 0x91, 0xbe, 0x7b, 0xfd, 0xf7, 0x04, 0x70, + 0xe9, 0x31, 0x2c, 0xb8, 0xe5, 0xc9, 0xdb, 0x5c, + 0x59, 0x4b, 0x71, 0x72, 0x66, 0x65, 0xe9, 0xe0, + 0x7c, 0x34, 0x01, 0xac, 0x24, 0x57, 0xc5, 0x23, + 0x6a, 0xf2, 0x12, 0x65, 0xee, 0x45, 0xec, 0xcc, + 0xbb, 0x30, 0xb2, 0xd2, 0x47, 0x88, 0xd8, 0x00, + 0x3c, 0x41, 0xbb, 0x68, 0xfa, 0xff, 0x00, 0x92, + 0xcc, 0xbb, 0xb6, 0x9d, 0xc7, 0x17, 0xc3, 0x1b, + 0x8f, 0x53, 0x23, 0x4c, 0x9f, 0xed, 0x01, 0xa7, + 0x69, 0x51, 0x69, 0x6b, 0x70, 0xcb, 0x6c, 0x93, + 0x5d, 0x1b, 0x83, 0xa5, 0x92, 0x57, 0x46, 0x3e, + 0x50, 0x3b, 0xa8, 0xac, 0xf1, 0xf6, 0x65, 0xf1, + 0xd8, 0x47, 0x0f, 0x16, 0x2d, 0xce, 0x70, 0xc8, + 0xdb, 0x48, 0x4d, 0xc8, 0xb2, 0x74, 0xf1, 0x09, + 0xa4, 0x9e, 0x95, 0xa7, 0x27, 0x08, 0x07, 0x66, + 0xda, 0xa4, 0x59, 0x89, 0x8d, 0x9d, 0xe4, 0x70, + 0xdc, 0x0b, 0xa9, 0x2d, 0xc0, 0x74, 0x57, 0x1f, + 0x2b, 0x88, 0xf2, 0x8d, 0x83, 0x66, 0xe5, 0xf0, + 0xdb, 0x2b, 0x9b, 0x46, 0x58, 0x5e, 0x1b, 0x67, + 0x5c, 0x70, 0x41, 0xd4, 0xcf, 0x00, 0x6f, 0x13, + 0xc1, 0x34, 0xda, 0x01, 0xef, 0x2c, 0xa7, 0xf9, + 0x4d, 0xde, 0x3e, 0xe7, 0x86, 0xcc, 0xdb, 0x87, + 0x50, 0x45, 0x19, 0x68, 0x6c, 0x86, 0x87, 0x6f, + 0x13, 0x42, 0x4f, 0x6f, 0x7c, 0x8c, 0xec, 0x5c, + 0x57, 0x6d, 0x8b, 0xad, 0xba, 0xb8, 0x74, 0xce, + 0x98, 0x07, 0x06, 0x10, 0x00, 0x65, 0x79, 0x05, + 0x16, 0x6a, 0xf8, 0xb7, 0x05, 0xb0, 0x46, 0xd2, + 0x28, 0x43, 0x40, 0x23, 0xdc, 0x5e, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0xa1, + 0x09, 0x00, 0x54, 0x9a, 0x05, 0xa2, 0xcb, 0xea, + 0x68, 0x2d, 0x2b, 0x15, 0xbd, 0x25, 0x9b, 0x76, + 0xcd, 0xc1, 0x06, 0xda, 0xee, 0xfa, 0xda, 0xd2, + 0x33, 0x24, 0xcf, 0x0d, 0x00, 0x6e, 0xe5, 0x54, + 0xfc, 0xc6, 0xa3, 0x9e, 0xf4, 0x98, 0xad, 0xcf, + 0x57, 0x08, 0xe9, 0x2b, 0x5b, 0x75, 0x79, 0x73, + 0x79, 0x21, 0x92, 0xe2, 0x42, 0xe3, 0xc8, 0x39, + 0x02, 0xf0, 0xa0, 0xae, 0xc5, 0x61, 0x24, 0xf7, + 0xfb, 0xa5, 0x11, 0x10, 0x62, 0x65, 0x7f, 0xea, + 0x9e, 0xfa, 0xd3, 0x2d, 0xc6, 0x54, 0xff, 0x00, + 0xc5, 0xf7, 0x56, 0x9d, 0x01, 0x14, 0xed, 0xe7, + 0x51, 0xb5, 0x45, 0x11, 0x4d, 0x0f, 0x3a, 0x50, + 0xa0, 0x84, 0x4d, 0xaa, 0x76, 0xa0, 0x84, 0x53, + 0x43, 0xce, 0x9b, 0x50, 0x6c, 0x74, 0xd7, 0xdf, + 0xb6, 0xbf, 0x39, 0x76, 0x20, 0xb8, 0xee, 0x9b, + 0xfb, 0xf6, 0xd7, 0xe7, 0x2e, 0xc4, 0x82, 0x51, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x06, 0xbb, 0x50, 0xfd, 0xcb, + 0x79, 0xfd, 0x27, 0x7c, 0x0a, 0xb5, 0xec, 0xa3, + 0xf2, 0xf3, 0xff, 0x00, 0xac, 0xff, 0x00, 0x84, + 0xab, 0x2e, 0xa1, 0xfb, 0x96, 0xf3, 0xfa, 0x4e, + 0xf8, 0x15, 0x6b, 0xd9, 0x47, 0xe5, 0xe7, 0xff, + 0x00, 0x59, 0xff, 0x00, 0x09, 0x41, 0x66, 0xcf, + 0x9a, 0x61, 0xee, 0xbe, 0x61, 0x54, 0x58, 0xf1, + 0xb7, 0x67, 0x0e, 0xdb, 0xb8, 0xb7, 0x03, 0x52, + 0xc1, 0xb6, 0xa0, 0x15, 0x79, 0xcf, 0xfd, 0xcf, + 0x75, 0xf3, 0x0a, 0xa8, 0xd9, 0x65, 0xe6, 0xb5, + 0x8a, 0xd2, 0xd1, 0xb1, 0xf1, 0xb2, 0x51, 0xe3, + 0x38, 0xf7, 0x4a, 0x40, 0x45, 0x0b, 0xe7, 0x6c, + 0x79, 0x6c, 0x1b, 0xc3, 0x2e, 0x58, 0xda, 0x5c, + 0x5b, 0x93, 0xb4, 0x90, 0xb3, 0x7d, 0x6e, 0xcc, + 0x75, 0x7d, 0x4f, 0x90, 0x3b, 0xaf, 0xa5, 0x38, + 0xb6, 0xd1, 0x45, 0xe6, 0x9e, 0x95, 0xb3, 0x1b, + 0xac, 0x6c, 0x86, 0x09, 0x5d, 0xb4, 0xb7, 0x91, + 0x63, 0x18, 0xb5, 0x4d, 0x78, 0x2a, 0xda, 0xfc, + 0xaa, 0x04, 0x0e, 0x29, 0x6d, 0x1c, 0xec, 0xd6, + 0x64, 0x87, 0x5d, 0x38, 0x11, 0x6d, 0x00, 0xda, + 0x41, 0x3d, 0xc5, 0x91, 0x80, 0xb4, 0x97, 0xaa, + 0xb8, 0xc8, 0x5c, 0x8f, 0xf9, 0x17, 0x35, 0x77, + 0xb8, 0x42, 0x59, 0x69, 0xf9, 0x5d, 0x28, 0xb9, + 0xc9, 0xc8, 0x67, 0x94, 0x7c, 0x56, 0x9d, 0xd5, + 0x5e, 0xd9, 0x5c, 0x94, 0xf6, 0x53, 0x45, 0x6f, + 0x14, 0x7c, 0x4c, 0x90, 0x52, 0xbc, 0xca, 0x8d, + 0x1e, 0x35, 0xed, 0x88, 0xdd, 0xc8, 0x7e, 0x2b, + 0x5e, 0x49, 0x58, 0x37, 0x05, 0xf9, 0x2b, 0xd6, + 0x98, 0x62, 0x27, 0x8b, 0x60, 0xd8, 0xbd, 0xa2, + 0x9a, 0x38, 0xa0, 0xbc, 0x0f, 0x34, 0x2f, 0x71, + 0xa0, 0xe5, 0x2a, 0xe9, 0xa5, 0x2c, 0xe2, 0x6e, + 0x26, 0x09, 0x5f, 0x10, 0x6c, 0xa6, 0xa6, 0xa4, + 0x6d, 0x49, 0x48, 0x78, 0x60, 0x74, 0xb4, 0x56, + 0xcd, 0x6c, 0xf7, 0x43, 0x8a, 0x4e, 0x46, 0x72, + 0x05, 0x64, 0x00, 0x34, 0x00, 0x05, 0x00, 0xdc, + 0x11, 0x4a, 0x8a, 0x22, 0x22, 0x0d, 0x2e, 0xb0, + 0xfc, 0xb5, 0x90, 0xfe, 0x8b, 0xbe, 0x05, 0xac, + 0xf6, 0x5f, 0xf9, 0x42, 0xd3, 0xdd, 0x5b, 0x3d, + 0x61, 0xf9, 0x6b, 0x21, 0xfd, 0x17, 0x7c, 0x0b, + 0x59, 0xec, 0xbf, 0xf2, 0x85, 0xa7, 0xba, 0x82, + 0xda, 0x88, 0x88, 0x2a, 0x79, 0xbf, 0xcd, 0x36, + 0x1d, 0xf8, 0xff, 0x00, 0x79, 0x5a, 0xc7, 0x2a, + 0xaa, 0x66, 0xff, 0x00, 0x34, 0xd8, 0x77, 0xe3, + 0xfd, 0xe5, 0x6b, 0x1c, 0xa8, 0x25, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x15, 0x4b, 0x55, + 0xfd, 0xf7, 0x8e, 0xef, 0x37, 0xfb, 0x81, 0x5b, + 0x55, 0x4b, 0x55, 0xfd, 0xf7, 0x8e, 0xef, 0x37, + 0xfb, 0x81, 0x05, 0xb3, 0x95, 0x4a, 0x85, 0x28, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0x28, 0x14, + 0xa2, 0x08, 0xa0, 0x4a, 0x05, 0x28, 0x82, 0x28, + 0x12, 0x81, 0x4a, 0x20, 0x8a, 0x04, 0xa0, 0x52, + 0x88, 0x22, 0x81, 0x28, 0x14, 0xa2, 0x08, 0xa0, + 0x4a, 0x05, 0x28, 0x82, 0x14, 0xa2, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x8a, 0x25, 0x02, 0x94, + 0x41, 0x09, 0x40, 0xa5, 0x10, 0x45, 0x12, 0x8a, + 0x51, 0x04, 0x51, 0x28, 0x14, 0xa2, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x0c, 0x1c, 0x8d, 0x9c, 0xf7, 0x71, 0xf5, 0x71, + 0xc9, 0xd5, 0xb4, 0xef, 0x23, 0x7a, 0xd2, 0xfa, + 0x99, 0x1d, 0x49, 0xeb, 0x09, 0x27, 0x79, 0x2a, + 0xd0, 0x88, 0x2a, 0xfe, 0xa6, 0x45, 0xda, 0x27, + 0xa9, 0x91, 0x76, 0x8a, 0xd0, 0x8a, 0xda, 0x52, + 0xaf, 0xea, 0x64, 0x5d, 0xa2, 0x7a, 0x99, 0x17, + 0x68, 0xad, 0x08, 0x96, 0x52, 0xa3, 0x77, 0xa1, + 0x21, 0xb8, 0x8b, 0xab, 0xeb, 0x29, 0xb5, 0x61, + 0x8f, 0x66, 0xb0, 0xd3, 0xf9, 0xca, 0xf4, 0x8a, + 0x2a, 0x8b, 0xfa, 0x6b, 0x07, 0x6c, 0xa4, 0xfb, + 0x35, 0x83, 0xb6, 0x57, 0x94, 0x41, 0x45, 0xfd, + 0x35, 0x83, 0xb6, 0x4f, 0xd3, 0x58, 0x3b, 0x65, + 0x7a, 0x44, 0x14, 0x6f, 0xd3, 0x58, 0x3b, 0x65, + 0x07, 0xd9, 0xac, 0x1d, 0xb2, 0xbd, 0x22, 0x0a, + 0x2f, 0xe9, 0xac, 0x1d, 0xb2, 0x7e, 0x9a, 0xc1, + 0xdb, 0x2b, 0xd2, 0x20, 0xa7, 0x63, 0x74, 0x0c, + 0x36, 0x37, 0xf1, 0x5d, 0x89, 0xaa, 0x62, 0x35, + 0xa7, 0x3a, 0xb8, 0xa2, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x0d, 0x76, 0xa1, 0xfb, 0x96, 0xf3, 0xfa, + 0x4e, 0xf8, 0x15, 0x6b, 0xd9, 0x47, 0xe5, 0xe7, + 0xff, 0x00, 0x59, 0xff, 0x00, 0x09, 0x56, 0x5d, + 0x41, 0xf7, 0x2d, 0xe7, 0xf4, 0x9d, 0xf0, 0x2a, + 0x37, 0xb3, 0x8d, 0x4b, 0x85, 0xc6, 0xe1, 0x1f, + 0x05, 0xe5, 0xcb, 0x22, 0x93, 0xad, 0x71, 0xe1, + 0x71, 0xa1, 0xde, 0x50, 0x74, 0x0c, 0x9d, 0xb3, + 0xee, 0xec, 0x66, 0xb7, 0x67, 0xc6, 0x91, 0xbc, + 0x22, 0xaa, 0xa1, 0x1e, 0x93, 0xcd, 0xc6, 0xc6, + 0xb4, 0x48, 0xcf, 0x13, 0x71, 0xe6, 0x5b, 0xaf, + 0x5e, 0x34, 0xcf, 0x9e, 0xc7, 0xd2, 0x9e, 0xbc, + 0xe9, 0x9f, 0x3d, 0x8f, 0xa5, 0x06, 0xb3, 0xd5, + 0xfd, 0x49, 0xe7, 0x2d, 0xe9, 0x29, 0xe8, 0x1d, + 0x4b, 0xe7, 0x2d, 0xe9, 0x5b, 0x3f, 0x5e, 0x74, + 0xc7, 0x9e, 0xc7, 0xd2, 0x9e, 0xbc, 0xe9, 0x9f, + 0x3d, 0x8f, 0xa5, 0x06, 0xb3, 0xd0, 0x1a, 0x94, + 0x9f, 0xfb, 0x23, 0xa5, 0x7c, 0x3f, 0x4d, 0x67, + 0xe4, 0x20, 0xc9, 0x33, 0x1c, 0x46, 0xe2, 0x56, + 0xdb, 0xd7, 0x9d, 0x33, 0xe7, 0xb1, 0xf4, 0xa7, + 0xaf, 0x3a, 0x63, 0xcf, 0x63, 0xe9, 0x41, 0xac, + 0xc5, 0x68, 0x87, 0xb2, 0xeb, 0xaf, 0xc8, 0x3c, + 0x3c, 0x34, 0x87, 0x06, 0x8d, 0xc4, 0xab, 0x83, + 0x18, 0xc8, 0xd8, 0x18, 0xc1, 0xc2, 0xd6, 0xec, + 0x00, 0x2d, 0x17, 0xaf, 0x3a, 0x67, 0xcf, 0x63, + 0xe9, 0x4f, 0x5e, 0x74, 0xc7, 0x9e, 0xc7, 0xd2, + 0x83, 0x7e, 0x8b, 0x41, 0xeb, 0xce, 0x98, 0xf3, + 0xd8, 0xfa, 0x53, 0xd7, 0x9d, 0x33, 0xe7, 0xb1, + 0xf4, 0xa0, 0xdf, 0xa2, 0xd0, 0x7a, 0xf3, 0xa6, + 0x7c, 0xf6, 0x3e, 0x94, 0xf5, 0xe7, 0x4c, 0xf9, + 0xec, 0x7d, 0x28, 0x3d, 0x75, 0x87, 0xe5, 0xac, + 0x87, 0xf4, 0x5d, 0xf0, 0x2d, 0x67, 0xb2, 0xff, + 0x00, 0xca, 0x16, 0x9e, 0xef, 0xc2, 0xbc, 0x75, + 0x3e, 0xb0, 0xd3, 0xd7, 0x38, 0x0b, 0xe8, 0x21, + 0xbb, 0x63, 0xa4, 0x92, 0x27, 0x35, 0xad, 0x07, + 0x69, 0x24, 0x2f, 0x6f, 0x65, 0xff, 0x00, 0x94, + 0x2d, 0x3d, 0xdf, 0x85, 0x05, 0xb5, 0x11, 0x10, + 0x54, 0xf3, 0x7f, 0x9a, 0x6c, 0x7b, 0xf1, 0xfe, + 0xf2, 0xb5, 0x8e, 0x55, 0x54, 0xcd, 0xfe, 0x69, + 0xb0, 0xef, 0xc7, 0xfb, 0xca, 0xd6, 0x39, 0x50, + 0x4a, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x2a, 0x9e, 0xab, 0xfb, 0xeb, 0x1f, 0xde, 0x1f, + 0xdc, 0x0a, 0xd8, 0xaa, 0x7a, 0xaf, 0xef, 0xac, + 0x7f, 0x78, 0x7f, 0x71, 0x05, 0xad, 0x4a, 0x85, + 0x28, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x83, 0xc6, 0xe6, 0xde, 0x3b, + 0x98, 0x1f, 0x04, 0xa2, 0xac, 0x90, 0x16, 0xb8, + 0x77, 0x0a, 0xa9, 0x9f, 0x65, 0x9a, 0x59, 0xce, + 0x24, 0xc4, 0x76, 0x92, 0x77, 0x9e, 0x5f, 0x75, + 0x5c, 0x56, 0x90, 0x5f, 0xdd, 0xb3, 0x51, 0xc9, + 0x6e, 0xf7, 0xd6, 0xd1, 0xc1, 0xac, 0x63, 0x36, + 0x6c, 0x79, 0x6f, 0x15, 0x7d, 0xe4, 0x8d, 0xa3, + 0x53, 0xfa, 0x57, 0xa5, 0xbb, 0x27, 0x74, 0x9f, + 0x0a, 0x7e, 0x95, 0xe9, 0x6e, 0xc9, 0xdd, 0x27, + 0xc2, 0xb7, 0x17, 0xb7, 0xf7, 0x4d, 0xce, 0x5a, + 0x5b, 0xc2, 0xfe, 0x1b, 0x72, 0xe2, 0xc9, 0x9b, + 0xce, 0x78, 0x4b, 0x87, 0xbc, 0x17, 0xb4, 0xf9, + 0xe8, 0x22, 0x95, 0xf1, 0x88, 0x65, 0x96, 0x38, + 0xc8, 0x12, 0x4c, 0xc1, 0x56, 0x34, 0xf7, 0x4a, + 0x13, 0xb1, 0xa1, 0xfd, 0x2c, 0xd2, 0xbd, 0x93, + 0xba, 0x4f, 0x85, 0x3f, 0x4a, 0xf4, 0xb7, 0x64, + 0xee, 0x93, 0xe1, 0x5b, 0x7b, 0x9c, 0xac, 0xad, + 0xcd, 0x5a, 0xc1, 0x13, 0x24, 0x7c, 0x12, 0x32, + 0xb5, 0x68, 0x05, 0xa6, 0xbb, 0x9d, 0xee, 0x2f, + 0x69, 0xf3, 0xf0, 0x45, 0x2b, 0x9a, 0x22, 0x96, + 0x48, 0xa3, 0x70, 0x6c, 0x93, 0xb0, 0x02, 0xc6, + 0x9e, 0xe9, 0x48, 0xdb, 0x11, 0xd5, 0x6b, 0x6c, + 0xc7, 0x26, 0x8b, 0xf4, 0xaf, 0x4b, 0x76, 0x4e, + 0xe9, 0x3e, 0x14, 0xfd, 0x2a, 0xd2, 0xbd, 0x93, + 0xba, 0x4f, 0x85, 0x58, 0x6e, 0xf3, 0x30, 0x5b, + 0x3e, 0x38, 0xc3, 0x1f, 0x3b, 0xe6, 0x67, 0x1c, + 0x4d, 0x88, 0x02, 0x5c, 0x3b, 0x9f, 0x0a, 0xcc, + 0x13, 0x8e, 0xa3, 0xaf, 0x90, 0x18, 0x9b, 0xc3, + 0xc4, 0xe0, 0xed, 0xed, 0xef, 0xa2, 0x2a, 0x5f, + 0xa5, 0x7a, 0x5b, 0xb2, 0x77, 0x49, 0xf0, 0xa7, + 0xe9, 0x56, 0x95, 0xec, 0x9d, 0xd2, 0x7c, 0x2a, + 0xc3, 0x67, 0x99, 0x86, 0xee, 0x73, 0x00, 0x8a, + 0x48, 0x89, 0x1c, 0x51, 0xbd, 0xe2, 0x8d, 0x78, + 0x06, 0x95, 0x69, 0x5e, 0x72, 0xe7, 0xed, 0xe3, + 0x95, 0xcc, 0x11, 0x4b, 0x24, 0x4c, 0x77, 0x0c, + 0x97, 0x0c, 0x00, 0xc6, 0xd3, 0xdd, 0x29, 0xf3, + 0x1a, 0x2f, 0xd2, 0xad, 0x2d, 0xd9, 0x3b, 0xa4, + 0xf8, 0x53, 0xf4, 0xaf, 0x4b, 0x76, 0x4e, 0xe9, + 0x3e, 0x15, 0x60, 0xbb, 0xcd, 0xdb, 0xdb, 0xcc, + 0xc8, 0x03, 0x1f, 0x34, 0xb2, 0x30, 0x49, 0x1b, + 0x23, 0x15, 0x2e, 0x69, 0xe6, 0xf8, 0x56, 0x26, + 0x4b, 0x3a, 0xe3, 0x8a, 0x75, 0xcd, 0xa3, 0x25, + 0x6c, 0x81, 0xe1, 0x8f, 0x6d, 0x07, 0x13, 0x08, + 0x3b, 0x9d, 0xdf, 0x4e, 0x16, 0x35, 0x3f, 0xa5, + 0x9a, 0x5b, 0xb2, 0x77, 0x49, 0xf0, 0xa9, 0xfd, + 0x2b, 0xd2, 0xdd, 0x93, 0xba, 0x4f, 0x85, 0x6f, + 0x1f, 0x9b, 0x8e, 0x16, 0xc2, 0xc7, 0x41, 0x33, + 0xe7, 0x96, 0x30, 0xf6, 0xc4, 0xd6, 0x8e, 0x2a, + 0x74, 0xaf, 0xab, 0x8c, 0xe4, 0x50, 0x3c, 0xb1, + 0xb0, 0x4d, 0x33, 0x9a, 0xd0, 0xe9, 0x44, 0x60, + 0x1e, 0x0a, 0xfc, 0xbd, 0xa9, 0x27, 0xd2, 0xda, + 0x1f, 0xd2, 0xbd, 0x2b, 0xd9, 0x1e, 0xee, 0xd3, + 0xe1, 0x56, 0x5c, 0x4e, 0x26, 0xd3, 0x11, 0x64, + 0xcb, 0x1b, 0x36, 0xf0, 0xc3, 0x1f, 0xc5, 0x0b, + 0xc2, 0x6c, 0x81, 0x7d, 0xd6, 0x3c, 0xdb, 0xbe, + 0xb0, 0x5c, 0x17, 0xf1, 0x53, 0x96, 0x8d, 0xa8, + 0x5b, 0x44, 0xe0, 0x08, 0x88, 0x82, 0xa7, 0x9b, + 0xfc, 0xd3, 0x61, 0xdf, 0x8f, 0xf7, 0x95, 0xac, + 0x72, 0xaa, 0xa6, 0x6f, 0xf3, 0x4d, 0x8f, 0x7e, + 0x3f, 0xde, 0x56, 0xb4, 0x12, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x0a, 0xa7, 0xaa, 0xfe, + 0xfa, 0xc7, 0xf7, 0x9b, 0xfd, 0xc0, 0xad, 0x8a, + 0xa5, 0xaa, 0xfe, 0xfa, 0xc7, 0x77, 0x9b, 0xfd, + 0xc0, 0x82, 0xd9, 0xca, 0xa5, 0x47, 0x2a, 0x94, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x41, 0x0a, 0xbb, 0x78, 0x29, 0x7b, + 0x7f, 0x70, 0x37, 0xdb, 0xba, 0x19, 0x07, 0x7b, + 0x84, 0x71, 0x7b, 0xd5, 0x56, 0x25, 0xe2, 0x6c, + 0xad, 0xcb, 0xa5, 0x71, 0x60, 0x26, 0x71, 0xc3, + 0x29, 0xe7, 0x14, 0xa2, 0x9c, 0x7b, 0x86, 0x81, + 0xaf, 0x37, 0x17, 0x36, 0x57, 0x83, 0xff, 0x00, + 0xd8, 0xb9, 0x71, 0x67, 0xcd, 0x6b, 0x1c, 0xd6, + 0xfb, 0xcb, 0x26, 0xc2, 0x58, 0x1b, 0x87, 0xbb, + 0x6c, 0x84, 0x02, 0xd7, 0x4c, 0x24, 0x07, 0x7d, + 0x49, 0x34, 0xe9, 0x5b, 0x46, 0xd8, 0x5a, 0xb5, + 0xb0, 0xb5, 0xac, 0x01, 0xb6, 0xc6, 0xb1, 0x0f, + 0x92, 0x69, 0x45, 0xe3, 0x36, 0x17, 0x1d, 0x3d, + 0xc7, 0x94, 0xcb, 0x10, 0x32, 0xec, 0x24, 0xd4, + 0x80, 0x48, 0xdd, 0x50, 0x0d, 0x16, 0xa6, 0x78, + 0x73, 0xa3, 0xab, 0x53, 0x62, 0x1c, 0xdb, 0xac, + 0x63, 0x5f, 0xb0, 0xf5, 0x0e, 0xe1, 0x07, 0x90, + 0x13, 0xe2, 0xaf, 0x7b, 0x09, 0x60, 0x66, 0x16, + 0xe9, 0xb2, 0x10, 0x1c, 0xc7, 0x4c, 0x24, 0x07, + 0x7d, 0x49, 0x75, 0x3a, 0x56, 0xd6, 0xe3, 0x1f, + 0x6b, 0x70, 0xf8, 0xa4, 0x95, 0x80, 0xba, 0x13, + 0x58, 0xc8, 0xd9, 0x4e, 0x85, 0xe3, 0x36, 0x17, + 0x1d, 0x35, 0xc7, 0x94, 0x49, 0x10, 0x32, 0xd4, + 0x12, 0x41, 0x20, 0x12, 0x39, 0xc5, 0x68, 0xa7, + 0x0a, 0xf6, 0x9c, 0x6f, 0xac, 0x35, 0x98, 0xb8, + 0xdc, 0x2e, 0xf1, 0xfd, 0x60, 0xf1, 0x85, 0xb1, + 0x22, 0xbb, 0xc0, 0x27, 0x62, 0xda, 0x66, 0x1a, + 0xe7, 0x63, 0x2e, 0x03, 0x77, 0xf0, 0x1e, 0x85, + 0x93, 0xe4, 0xd0, 0x99, 0x9b, 0x39, 0x68, 0xeb, + 0x1a, 0x38, 0x5a, 0xee, 0x61, 0xcc, 0xbd, 0x0b, + 0x41, 0x14, 0x3b, 0x8e, 0xf4, 0x99, 0x99, 0x18, + 0x16, 0x33, 0x5b, 0x9b, 0x3b, 0x66, 0x35, 0xcd, + 0xeb, 0x5f, 0x10, 0x11, 0xb7, 0x97, 0x63, 0x76, + 0xad, 0x7d, 0x8c, 0xb6, 0xed, 0xd3, 0xd7, 0x2d, + 0x90, 0x8e, 0x26, 0xf5, 0xc2, 0x46, 0xf2, 0xf1, + 0x17, 0x3a, 0x9d, 0x35, 0x5b, 0x4b, 0x5c, 0x4d, + 0x8d, 0xa4, 0xce, 0x9e, 0x08, 0xf8, 0x24, 0x7e, + 0xc2, 0x6a, 0x4f, 0x2d, 0x76, 0x57, 0x72, 0xf9, + 0x97, 0x0b, 0x8e, 0x96, 0xe3, 0xca, 0x64, 0x88, + 0x19, 0x6a, 0x1c, 0x4d, 0x48, 0x04, 0x8e, 0x71, + 0xb9, 0x39, 0xf5, 0x23, 0x67, 0x73, 0x53, 0x8b, + 0x63, 0xdb, 0x92, 0xb3, 0x6c, 0x83, 0xc7, 0x16, + 0x83, 0x7e, 0xf0, 0x09, 0xd8, 0xbc, 0x66, 0xa0, + 0xb4, 0xca, 0x01, 0xe7, 0x4c, 0xff, 0x00, 0xf8, + 0xab, 0x21, 0xb4, 0x83, 0xaf, 0x17, 0x1c, 0x20, + 0x4a, 0x1b, 0xc0, 0x1d, 0xfe, 0xde, 0x65, 0xe4, + 0x71, 0x96, 0x8e, 0x8e, 0x58, 0x8b, 0x01, 0x65, + 0xc1, 0xe2, 0x94, 0x7c, 0xa3, 0x4a, 0x27, 0x2f, + 0x65, 0x78, 0xc4, 0x93, 0xbf, 0xbe, 0xfc, 0x25, + 0x82, 0xd0, 0xd3, 0x9a, 0x85, 0xdb, 0xc8, 0xb6, + 0x14, 0x3c, 0xdb, 0x4a, 0xfa, 0xc6, 0xbe, 0x28, + 0xee, 0x72, 0x22, 0x52, 0x1a, 0xf1, 0x2f, 0x13, + 0xab, 0xf2, 0x78, 0x46, 0xd5, 0x9b, 0x16, 0x3e, + 0xda, 0x17, 0x31, 0xd1, 0xb6, 0x8e, 0x8d, 0xbd, + 0x5b, 0x0e, 0xd3, 0x46, 0xd6, 0xb4, 0x5e, 0x77, + 0x58, 0x6b, 0x0b, 0xc9, 0x04, 0x97, 0x11, 0xf1, + 0xbc, 0x0a, 0x54, 0x12, 0x2a, 0x3b, 0xb4, 0x3b, + 0x54, 0xe3, 0xdd, 0x3f, 0x14, 0xff, 0x00, 0xd7, + 0xc2, 0x1a, 0x4c, 0x70, 0x7f, 0x59, 0x8e, 0x27, + 0x63, 0x1d, 0x34, 0xe6, 0x31, 0xfe, 0xda, 0x2b, + 0x4a, 0xf0, 0x36, 0x76, 0xe5, 0xd1, 0x3b, 0x80, + 0x56, 0xde, 0xbd, 0x55, 0x3f, 0x66, 0xa2, 0x8b, + 0xdd, 0x5e, 0x11, 0x0b, 0x3b, 0xec, 0x44, 0x44, + 0x15, 0x3c, 0xdf, 0xe6, 0x9b, 0x1e, 0xfc, 0x7f, + 0xbc, 0xad, 0x63, 0x95, 0x55, 0x33, 0x7f, 0x9a, + 0x6c, 0x7b, 0xf1, 0xfe, 0xf2, 0xb5, 0x84, 0x12, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, + 0xa7, 0xaa, 0xfe, 0xfa, 0xc7, 0xf7, 0x9b, 0xfd, + 0xc0, 0xad, 0x8a, 0xa7, 0xaa, 0xfe, 0xfa, 0xc7, + 0xf7, 0x9b, 0xfd, 0xc0, 0x82, 0xd7, 0xca, 0xa5, + 0x42, 0x94, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x15, 0x3c, 0xdf, 0xe6, 0x9b, + 0x1e, 0xfc, 0x7f, 0xbc, 0xad, 0x6a, 0xa9, 0x9b, + 0xfc, 0xd3, 0x61, 0xdf, 0x8f, 0xf7, 0x95, 0xac, + 0x72, 0xa0, 0x94, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x55, 0x3d, 0x57, 0xf7, 0xd6, 0x3f, + 0xbc, 0x3f, 0xb8, 0x15, 0xb1, 0x54, 0x75, 0x7c, + 0x82, 0x2c, 0xb5, 0x8c, 0xae, 0x04, 0xb5, 0x8d, + 0xe2, 0x34, 0xee, 0x3e, 0xa8, 0x2d, 0xaa, 0x55, + 0x7b, 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, 0xf0, + 0xa9, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, + 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, + 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, + 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, + 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, + 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, + 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xae, 0x33, 0xb3, + 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, + 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, + 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, + 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, + 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, + 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, + 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, + 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, + 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, + 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, + 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, + 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, 0xeb, 0x8c, + 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, 0xd7, 0x19, + 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, + 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, + 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, + 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, + 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, + 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, + 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, + 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, + 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, + 0xe8, 0x1e, 0x14, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, + 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, + 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x75, + 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, + 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, + 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, + 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, + 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, + 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, + 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, + 0x14, 0xf5, 0xd7, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, + 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, + 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, + 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, + 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, + 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, + 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, + 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, + 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, + 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, + 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, + 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, + 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, + 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, + 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, + 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, + 0x8a, 0xbf, 0xeb, 0xae, 0x33, 0xb3, 0x97, 0xa0, + 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, + 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, + 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, 0xd3, 0x19, + 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, + 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, + 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, + 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, 0xb8, 0xce, + 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, + 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, + 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, + 0xd7, 0x5c, 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, + 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, + 0xe8, 0x1e, 0x14, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, + 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, + 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, + 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, + 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, + 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, + 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xae, + 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, + 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, + 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, + 0x14, 0xf5, 0xd7, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, + 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, + 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, + 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, + 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, + 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, + 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, + 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x5c, 0x67, 0x67, + 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, + 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, + 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, + 0x08, 0xab, 0xfe, 0xba, 0xe3, 0x3b, 0x39, 0x7a, + 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, + 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, + 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, + 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, + 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, + 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, + 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, + 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, 0xd7, 0x19, + 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, + 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, + 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, + 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, 0xb8, 0xce, + 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, + 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, + 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, + 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, + 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, + 0xe8, 0x1e, 0x14, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, + 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, + 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x75, + 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, + 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, + 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, + 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, + 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, + 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, + 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, + 0x14, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, + 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, + 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, + 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, + 0x00, 0xae, 0xb8, 0xce, 0xce, 0x5e, 0x81, 0xe1, + 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, + 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, + 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x5c, 0x67, 0x67, + 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, + 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, + 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, + 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, + 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, + 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, + 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, + 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, + 0x8a, 0xbf, 0xeb, 0xae, 0x33, 0xb3, 0x97, 0xa0, + 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, + 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, + 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, 0xd7, 0x19, + 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, + 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, + 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, + 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, + 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, + 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, + 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, + 0xd7, 0x5c, 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, + 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, 0xec, 0xe5, + 0xe8, 0x1e, 0x14, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, + 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, + 0xe3, 0x3b, 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, + 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, + 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, 0xce, 0x5e, + 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, + 0x03, 0xc2, 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, + 0x33, 0xb3, 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, + 0x67, 0x67, 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, + 0xaf, 0xfa, 0xeb, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, + 0x14, 0xf5, 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, + 0x28, 0x2c, 0x08, 0xab, 0xfe, 0xba, 0x63, 0x3b, + 0x39, 0x7a, 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, + 0x72, 0xf4, 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, + 0x00, 0xae, 0xb8, 0xce, 0xce, 0x5e, 0x81, 0xe1, + 0x4f, 0x5d, 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, + 0x82, 0xc0, 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, + 0x97, 0xa0, 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, + 0x2f, 0x40, 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, + 0xe9, 0x8c, 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, + 0xd3, 0x19, 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, + 0x08, 0xab, 0xfe, 0xba, 0xe3, 0x3b, 0x39, 0x7a, + 0x07, 0x85, 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, + 0x0f, 0x0a, 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, + 0x98, 0xce, 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, + 0x31, 0x9d, 0x9c, 0xbd, 0x03, 0xc2, 0x82, 0xc0, + 0x8a, 0xbf, 0xeb, 0xa6, 0x33, 0xb3, 0x97, 0xa0, + 0x78, 0x53, 0xd7, 0x4c, 0x67, 0x67, 0x2f, 0x40, + 0xf0, 0xa0, 0xb0, 0x22, 0xaf, 0xfa, 0xe9, 0x8c, + 0xec, 0xe5, 0xe8, 0x1e, 0x14, 0xf5, 0xd3, 0x19, + 0xd9, 0xcb, 0xd0, 0x3c, 0x28, 0x2c, 0x08, 0xab, + 0xfe, 0xba, 0x63, 0x3b, 0x39, 0x7a, 0x07, 0x85, + 0x3d, 0x74, 0xc6, 0x76, 0x72, 0xf4, 0x0f, 0x0a, + 0x0b, 0x02, 0x2a, 0xff, 0x00, 0xae, 0x98, 0xce, + 0xce, 0x5e, 0x81, 0xe1, 0x4f, 0x5d, 0x31, 0x9d, + 0x9c, 0xbd, 0x03, 0xc2, 0x83, 0x0f, 0x37, 0xf9, + 0xa6, 0xc7, 0xbf, 0x1f, 0xef, 0x2b, 0x58, 0x54, + 0x99, 0xf2, 0x50, 0xe4, 0xf5, 0x0d, 0x95, 0xc4, + 0x0d, 0x73, 0x58, 0x1c, 0xc6, 0x90, 0xe1, 0x43, + 0x50, 0x55, 0xd8, 0x72, 0xa0, 0x94, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x5a, 0xbc, 0xc7, + 0xa0, 0xbf, 0x87, 0xe9, 0x6e, 0x0d, 0xdf, 0xc3, + 0xe2, 0xe2, 0xf7, 0xb8, 0x51, 0x10, 0x6b, 0x3f, + 0x03, 0x7d, 0x17, 0xda, 0x27, 0xe0, 0x6f, 0xa3, + 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xff, 0x00, 0x47, + 0xf6, 0x89, 0xf8, 0x1f, 0xe8, 0xfe, 0xd1, 0x11, + 0x03, 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, 0x07, + 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0d, 0xf4, + 0x5f, 0x68, 0x9f, 0x81, 0xbe, 0x8f, 0xed, 0x11, + 0x10, 0x3f, 0x03, 0xfd, 0x1f, 0xda, 0x27, 0xe0, + 0x7f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xff, + 0x00, 0x47, 0xf6, 0x89, 0xf8, 0x1f, 0xe8, 0xfe, + 0xd1, 0x11, 0x03, 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, + 0x7e, 0x07, 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, + 0x0f, 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xfe, 0x8f, + 0xed, 0x11, 0x10, 0x3f, 0x03, 0x7d, 0x17, 0xda, + 0x27, 0xe0, 0x6f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, + 0xc0, 0xdf, 0x47, 0xf6, 0x89, 0xf8, 0x1f, 0xe8, + 0xfe, 0xd1, 0x11, 0x03, 0xf0, 0x3f, 0xd1, 0xfd, + 0xa2, 0x7e, 0x07, 0xfa, 0x3f, 0xb4, 0x44, 0x40, + 0xfc, 0x0f, 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xfe, + 0x8f, 0xed, 0x11, 0x10, 0x3f, 0x03, 0xfd, 0x1f, + 0xda, 0x27, 0xe0, 0x7f, 0xa3, 0xfb, 0x44, 0x44, + 0x0f, 0xc0, 0xff, 0x00, 0x47, 0xf6, 0x89, 0xf8, + 0x1b, 0xe8, 0xbe, 0xd1, 0x11, 0x03, 0xf0, 0x3f, + 0xd1, 0xfd, 0xa2, 0x7e, 0x07, 0xfa, 0x3f, 0xb4, + 0x44, 0x40, 0xfc, 0x0f, 0xf4, 0x7f, 0x68, 0x9f, + 0x81, 0xfe, 0x8f, 0xed, 0x11, 0x10, 0x3f, 0x03, + 0xfd, 0x1f, 0xda, 0x27, 0xe0, 0x6f, 0xa2, 0xfb, + 0x44, 0x44, 0x0f, 0xc0, 0xff, 0x00, 0x47, 0xf6, + 0x89, 0xf8, 0x1f, 0xe8, 0xfe, 0xd1, 0x11, 0x03, + 0xf0, 0x37, 0xd1, 0xfd, 0xa2, 0x7e, 0x06, 0xfa, + 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0f, 0xf4, 0x7f, + 0x68, 0x9f, 0x81, 0xfe, 0x8f, 0xed, 0x11, 0x10, + 0x3f, 0x03, 0xfd, 0x1f, 0xda, 0x27, 0xe0, 0x7f, + 0xa3, 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xdf, 0x47, + 0xf6, 0x89, 0xf8, 0x1b, 0xe8, 0xfe, 0xd1, 0x11, + 0x03, 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, 0x07, + 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0d, 0xf4, + 0x5f, 0x68, 0x9f, 0x81, 0xfe, 0x8f, 0xed, 0x11, + 0x10, 0x3f, 0x03, 0xfd, 0x1f, 0xda, 0x27, 0xe0, + 0x7f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xff, + 0x00, 0x47, 0xf6, 0x89, 0xf8, 0x1f, 0xe8, 0xfe, + 0xd1, 0x11, 0x03, 0xf0, 0x37, 0xd1, 0x7d, 0xa2, + 0x7e, 0x07, 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, + 0x0f, 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xbe, 0x8b, + 0xed, 0x11, 0x10, 0x3f, 0x03, 0xfd, 0x1f, 0xda, + 0x27, 0xe0, 0x7f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, + 0xc0, 0xff, 0x00, 0x47, 0xf6, 0x89, 0xf8, 0x1f, + 0xe8, 0xfe, 0xd1, 0x11, 0x03, 0xf0, 0x3f, 0xd1, + 0xfd, 0xa2, 0x7e, 0x06, 0xfa, 0x3f, 0xb4, 0x44, + 0x40, 0xfc, 0x0d, 0xf4, 0x7f, 0x68, 0x9f, 0x81, + 0xfe, 0x8f, 0xed, 0x11, 0x10, 0x3f, 0x03, 0x7d, + 0x1f, 0xda, 0x27, 0xe0, 0x6f, 0xa3, 0xfb, 0x44, + 0x44, 0x0f, 0xc0, 0xff, 0x00, 0x47, 0xf6, 0x89, + 0xf8, 0x1f, 0xe8, 0xfe, 0xd1, 0x11, 0x03, 0xf0, + 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, 0x07, 0xfa, 0x3f, + 0xb4, 0x44, 0x40, 0xfc, 0x0f, 0xf4, 0x7f, 0x68, + 0x9f, 0x81, 0xbe, 0x8f, 0xed, 0x11, 0x10, 0x3f, + 0x03, 0x7d, 0x1f, 0xda, 0x27, 0xe0, 0x7f, 0xa3, + 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xdf, 0x47, 0xf6, + 0x89, 0xf8, 0x1b, 0xe8, 0xfe, 0xd1, 0x11, 0x03, + 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, 0x07, 0xfa, + 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0f, 0xf4, 0x7f, + 0x68, 0x9f, 0x81, 0xfe, 0x8f, 0xed, 0x11, 0x10, + 0x3f, 0x03, 0xfd, 0x1f, 0xda, 0x27, 0xe0, 0x6f, + 0xa2, 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xff, 0x00, + 0x47, 0xf6, 0x89, 0xf8, 0x1f, 0xe8, 0xfe, 0xd1, + 0x11, 0x03, 0xf0, 0x37, 0xd1, 0x7d, 0xa2, 0x7e, + 0x07, 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0f, + 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xfe, 0x8f, 0xed, + 0x11, 0x10, 0x3f, 0x03, 0xfd, 0x1f, 0xda, 0x27, + 0xe0, 0x7f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, 0xc0, + 0xdf, 0x47, 0xf6, 0x89, 0xf8, 0x1b, 0xe8, 0xfe, + 0xd1, 0x11, 0x03, 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, + 0x7e, 0x06, 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, + 0x0d, 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xfe, 0x8f, + 0xed, 0x11, 0x10, 0x3f, 0x03, 0xfd, 0x1f, 0xda, + 0x27, 0xe0, 0x7f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, + 0xc0, 0xff, 0x00, 0x47, 0xf6, 0x89, 0xf8, 0x1f, + 0xe8, 0xfe, 0xd1, 0x11, 0x03, 0xf0, 0x37, 0xd1, + 0x7d, 0xa2, 0x7e, 0x06, 0xfa, 0x3f, 0xb4, 0x44, + 0x40, 0xfc, 0x0f, 0xf4, 0x7f, 0x68, 0x9f, 0x81, + 0xbe, 0x8b, 0xed, 0x11, 0x10, 0x3f, 0x03, 0xfd, + 0x1f, 0xda, 0x27, 0xe0, 0x7f, 0xa3, 0xfb, 0x44, + 0x44, 0x0f, 0xc0, 0xff, 0x00, 0x47, 0xf6, 0x89, + 0xf8, 0x1f, 0xe8, 0xfe, 0xd1, 0x11, 0x03, 0xf0, + 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, 0x07, 0xfa, 0x3f, + 0xb4, 0x44, 0x40, 0xfc, 0x0d, 0xf4, 0x5f, 0x68, + 0x9f, 0x81, 0xfe, 0x8f, 0xed, 0x11, 0x10, 0x3f, + 0x03, 0x7d, 0x1f, 0xda, 0x27, 0xe0, 0x6f, 0xa2, + 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xff, 0x00, 0x47, + 0xf6, 0x89, 0xf8, 0x1f, 0xe8, 0xfe, 0xd1, 0x11, + 0x03, 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, 0x07, + 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0d, 0xf4, + 0x7f, 0x68, 0x9f, 0x81, 0xbe, 0x8f, 0xed, 0x11, + 0x10, 0x3f, 0x03, 0xfd, 0x1f, 0xda, 0x27, 0xe0, + 0x7f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, 0xc0, 0xdf, + 0x47, 0xf6, 0x89, 0xf8, 0x1b, 0xe8, 0xfe, 0xd1, + 0x11, 0x03, 0xf0, 0x3f, 0xd1, 0xfd, 0xa2, 0x7e, + 0x07, 0xfa, 0x3f, 0xb4, 0x44, 0x40, 0xfc, 0x0f, + 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xfe, 0x8f, 0xed, + 0x11, 0x10, 0x3f, 0x03, 0x7d, 0x1f, 0xda, 0x27, + 0xe0, 0x6f, 0xa3, 0xfb, 0x44, 0x44, 0x0f, 0xc0, + 0xff, 0x00, 0x47, 0xf6, 0x89, 0xf8, 0x1f, 0xe8, + 0xfe, 0xd1, 0x11, 0x03, 0xf0, 0x37, 0xd1, 0x7d, + 0xa2, 0x7e, 0x07, 0xfa, 0x3f, 0xb4, 0x44, 0x40, + 0xfc, 0x0f, 0xf4, 0x7f, 0x68, 0x9f, 0x81, 0xfe, + 0x8f, 0xed, 0x11, 0x10, 0x3f, 0x03, 0xfd, 0x1f, + 0xda, 0x27, 0xe0, 0x7f, 0xa3, 0xfb, 0x44, 0x44, + 0x0f, 0xc0, 0xdf, 0x45, 0xf6, 0x89, 0xf8, 0x1f, + 0xe8, 0xfe, 0xd1, 0x11, 0x03, 0xf0, 0x3f, 0xd1, + 0xfd, 0xa2, 0x7e, 0x07, 0xfa, 0x3f, 0xb4, 0x44, + 0x40, 0xfc, 0x0f, 0xf4, 0x7f, 0x68, 0x9f, 0x81, + 0xfe, 0x8f, 0xed, 0x11, 0x10, 0x3f, 0x03, 0xfd, + 0x1f, 0xda, 0x27, 0xe0, 0x7f, 0xa3, 0xfb, 0x44, + 0x44, 0x0f, 0xc0, 0xff, 0x00, 0x47, 0xf6, 0x89, + 0xf8, 0x1b, 0xe8, 0xfe, 0xd1, 0x11, 0x03, 0xf0, + 0x37, 0xd1, 0xfd, 0xa2, 0x7e, 0x06, 0xfa, 0x2f, + 0xb4, 0x44, 0x41, 0x91, 0x63, 0xea, 0x97, 0x95, + 0x33, 0xc8, 0xba, 0xbf, 0x28, 0xaf, 0x89, 0x4e, + 0x3a, 0xd7, 0xff, 0x00, 0x92, 0xdf, 0xa2, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0xff, 0xd9, +}; + +static const uint8_t data_images_c_c_c_communicate_small_jpg[] = +{ + /* /images/c-c-c-communicate-small.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x2d, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x2e, + 0x6a, 0x70, 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe1, 0x00, 0x18, 0x45, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2a, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xff, + 0xe1, 0x03, 0x29, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, + 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, + 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, + 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, + 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, + 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, + 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, + 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x20, 0x35, 0x2e, 0x30, 0x2d, 0x63, 0x30, + 0x36, 0x30, 0x20, 0x36, 0x31, 0x2e, 0x31, 0x33, + 0x34, 0x37, 0x37, 0x37, 0x2c, 0x20, 0x32, 0x30, + 0x31, 0x30, 0x2f, 0x30, 0x32, 0x2f, 0x31, 0x32, + 0x2d, 0x31, 0x37, 0x3a, 0x33, 0x32, 0x3a, 0x30, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, + 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, + 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, + 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, + 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, + 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, + 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, + 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, + 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, + 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, + 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, + 0x20, 0x43, 0x53, 0x35, 0x20, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x73, 0x22, 0x20, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, + 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, + 0x33, 0x34, 0x31, 0x30, 0x31, 0x36, 0x37, 0x33, + 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, + 0x38, 0x34, 0x42, 0x46, 0x38, 0x34, 0x37, 0x30, + 0x45, 0x44, 0x31, 0x39, 0x41, 0x30, 0x46, 0x45, + 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, + 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, + 0x64, 0x69, 0x64, 0x3a, 0x33, 0x34, 0x31, 0x30, + 0x31, 0x36, 0x37, 0x34, 0x32, 0x36, 0x44, 0x44, + 0x31, 0x31, 0x45, 0x33, 0x38, 0x34, 0x42, 0x46, + 0x38, 0x34, 0x37, 0x30, 0x45, 0x44, 0x31, 0x39, + 0x41, 0x30, 0x46, 0x45, 0x22, 0x3e, 0x20, 0x3c, + 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, + 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, + 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, + 0x69, 0x69, 0x64, 0x3a, 0x33, 0x34, 0x31, 0x30, + 0x31, 0x36, 0x37, 0x31, 0x32, 0x36, 0x44, 0x44, + 0x31, 0x31, 0x45, 0x33, 0x38, 0x34, 0x42, 0x46, + 0x38, 0x34, 0x37, 0x30, 0x45, 0x44, 0x31, 0x39, + 0x41, 0x30, 0x46, 0x45, 0x22, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, + 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, + 0x33, 0x34, 0x31, 0x30, 0x31, 0x36, 0x37, 0x32, + 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, + 0x38, 0x34, 0x42, 0x46, 0x38, 0x34, 0x37, 0x30, + 0x45, 0x44, 0x31, 0x39, 0x41, 0x30, 0x46, 0x45, + 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, + 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, + 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, + 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, + 0x3f, 0x3e, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, + 0x6f, 0x62, 0x65, 0x00, 0x64, 0xc0, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x0c, + 0x08, 0x08, 0x08, 0x09, 0x08, 0x0c, 0x09, 0x09, + 0x0c, 0x11, 0x0b, 0x0a, 0x0b, 0x11, 0x15, 0x0f, + 0x0c, 0x0c, 0x0f, 0x15, 0x18, 0x13, 0x13, 0x15, + 0x13, 0x13, 0x18, 0x17, 0x12, 0x14, 0x14, 0x14, + 0x14, 0x12, 0x17, 0x17, 0x1b, 0x1c, 0x1e, 0x1c, + 0x1b, 0x17, 0x24, 0x24, 0x27, 0x27, 0x24, 0x24, + 0x35, 0x33, 0x33, 0x33, 0x35, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x01, + 0x0d, 0x0b, 0x0b, 0x0d, 0x0e, 0x0d, 0x10, 0x0e, + 0x0e, 0x10, 0x14, 0x0e, 0x0f, 0x0e, 0x14, 0x14, + 0x10, 0x11, 0x11, 0x10, 0x14, 0x1d, 0x14, 0x14, + 0x15, 0x14, 0x14, 0x1d, 0x25, 0x1a, 0x17, 0x17, + 0x17, 0x17, 0x1a, 0x25, 0x20, 0x23, 0x1e, 0x1e, + 0x1e, 0x23, 0x20, 0x28, 0x28, 0x25, 0x25, 0x28, + 0x28, 0x32, 0x32, 0x30, 0x32, 0x32, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xf5, 0x00, + 0xbf, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, + 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x8a, 0x00, + 0x00, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x03, 0x04, 0x06, 0x02, 0x01, 0x07, + 0x01, 0x01, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x04, 0x03, 0x05, 0x10, + 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x02, + 0x03, 0x05, 0x08, 0x01, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x21, 0x12, + 0x05, 0x31, 0x41, 0x51, 0x61, 0x22, 0x13, 0x71, + 0x32, 0x81, 0x23, 0x14, 0x91, 0xa1, 0xb1, 0xc1, + 0x42, 0xf0, 0xd1, 0xe1, 0x52, 0x62, 0x24, 0x15, + 0x06, 0x33, 0x72, 0x82, 0xa2, 0x43, 0x63, 0x11, + 0x01, 0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x11, 0x03, 0x21, 0x04, 0x31, + 0x41, 0x12, 0x51, 0x22, 0x71, 0x61, 0x62, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, + 0x03, 0x11, 0x00, 0x3f, 0x00, 0xfa, 0xad, 0x14, + 0x51, 0x40, 0x51, 0x45, 0x14, 0x05, 0x14, 0x51, + 0x40, 0x51, 0x45, 0x14, 0x05, 0x14, 0x57, 0x94, + 0x1e, 0xd1, 0x5e, 0x16, 0x51, 0xd4, 0x81, 0xf5, + 0xaf, 0x0c, 0x91, 0xa8, 0xbb, 0x30, 0x03, 0xc9, + 0x22, 0x83, 0xaa, 0x2b, 0x81, 0x34, 0x27, 0xa3, + 0xa9, 0xfc, 0x45, 0x7a, 0x24, 0x8d, 0xba, 0x30, + 0x3f, 0x42, 0x28, 0x3a, 0xa2, 0x8a, 0x28, 0x0a, + 0x28, 0xa2, 0x80, 0xa2, 0x8a, 0x28, 0x0a, 0x28, + 0xa2, 0x80, 0xa2, 0x8a, 0x28, 0x0a, 0x28, 0xa2, + 0x80, 0xa2, 0x8a, 0x28, 0x0a, 0x28, 0xa2, 0x80, + 0xa2, 0xaa, 0xe7, 0x65, 0xae, 0x34, 0x57, 0xbf, + 0xbc, 0xfd, 0xa2, 0x93, 0x8c, 0xbe, 0x43, 0x25, + 0xf6, 0xc6, 0xc7, 0xdd, 0xa3, 0x20, 0x1a, 0x50, + 0x39, 0x9f, 0x90, 0xc6, 0x83, 0x46, 0x6b, 0x9f, + 0x02, 0x95, 0x64, 0x67, 0xf2, 0x33, 0xb2, 0x9c, + 0x7f, 0x6a, 0x31, 0xd1, 0x57, 0xaf, 0xed, 0xa9, + 0x3f, 0xe2, 0x19, 0xe3, 0x1f, 0x33, 0x04, 0x5b, + 0xdc, 0x82, 0x6e, 0x48, 0xf5, 0xed, 0x56, 0x21, + 0x93, 0x0b, 0x06, 0x3f, 0x8e, 0x2d, 0x40, 0xd6, + 0xe7, 0xd7, 0xd6, 0x99, 0x4c, 0x44, 0xcf, 0x88, + 0x2d, 0x68, 0xf3, 0xe4, 0x25, 0xa7, 0x0c, 0x41, + 0x17, 0xb1, 0xb9, 0x36, 0xa3, 0x0b, 0x8b, 0xc8, + 0x98, 0x12, 0xcb, 0xb4, 0x1b, 0xb0, 0xdd, 0xd2, + 0xf7, 0xd3, 0x43, 0x4c, 0x24, 0xe5, 0x96, 0xf6, + 0x05, 0x40, 0xf5, 0x1f, 0xdf, 0x5c, 0x49, 0xc9, + 0xb2, 0x25, 0xd5, 0x81, 0xfa, 0x0a, 0x8f, 0xa8, + 0x5e, 0x34, 0xde, 0x7d, 0x21, 0x97, 0x87, 0x9a, + 0x38, 0xc1, 0x07, 0x7e, 0xc1, 0x6d, 0xaa, 0x2e, + 0x5a, 0xe7, 0xae, 0xb5, 0x51, 0x21, 0xc9, 0x81, + 0xfe, 0x50, 0xac, 0xbf, 0x11, 0xf6, 0x93, 0xa0, + 0xb0, 0xd7, 0x5b, 0x53, 0x18, 0xf9, 0x62, 0x63, + 0x2e, 0x5c, 0x54, 0xcb, 0xc8, 0x23, 0x47, 0x77, + 0xda, 0x6e, 0x6d, 0xa8, 0xa7, 0xd4, 0x22, 0x75, + 0x5e, 0x3d, 0x2a, 0x2f, 0x35, 0x90, 0x80, 0x06, + 0x01, 0xbb, 0x5c, 0xf7, 0x3e, 0x2a, 0xfe, 0x3f, + 0x29, 0x04, 0xb6, 0x0e, 0x42, 0x31, 0x00, 0xf5, + 0xd3, 0x5a, 0xe1, 0xa2, 0xc1, 0xc9, 0x8f, 0x6b, + 0x28, 0x03, 0xd2, 0xa2, 0x6e, 0x25, 0x1c, 0x7e, + 0x5c, 0x83, 0x68, 0xe8, 0x2d, 0xaf, 0xed, 0xa9, + 0xca, 0xb3, 0x13, 0x1e, 0x60, 0xc5, 0x26, 0x89, + 0xcd, 0x91, 0xc3, 0x7d, 0x0d, 0xea, 0x4a, 0xcd, + 0xcd, 0x8f, 0x95, 0x81, 0x28, 0x75, 0x27, 0x5e, + 0xe0, 0x5c, 0x69, 0xda, 0x98, 0xe1, 0xf2, 0xc2, + 0x56, 0x11, 0xca, 0xbb, 0x4d, 0xba, 0xf6, 0xa2, + 0x0c, 0xe8, 0xaf, 0x2b, 0xda, 0x02, 0x8a, 0x28, + 0xa0, 0x28, 0xa2, 0x8a, 0x02, 0x8a, 0x28, 0xa0, + 0x28, 0xa2, 0x8a, 0x0f, 0x29, 0x66, 0x6f, 0x2c, + 0xd1, 0xc9, 0xf0, 0xe3, 0x81, 0xbc, 0x1b, 0x33, + 0x30, 0xe9, 0xf4, 0xab, 0x79, 0x79, 0x6b, 0x0a, + 0x10, 0xa4, 0x19, 0x48, 0x3b, 0x56, 0xff, 0x00, + 0xbe, 0x92, 0xe2, 0xc2, 0x67, 0xc9, 0x0f, 0x6b, + 0xed, 0x3b, 0xa5, 0xdd, 0xd7, 0x5e, 0xb4, 0x1c, + 0xfc, 0x19, 0x59, 0xd2, 0x31, 0x90, 0x5d, 0xfb, + 0x49, 0xa8, 0xd2, 0x9b, 0x47, 0x2c, 0x38, 0xb1, + 0x88, 0x97, 0x57, 0x03, 0xdc, 0xd6, 0xef, 0x55, + 0xf3, 0x79, 0x14, 0x8d, 0x4a, 0x46, 0x02, 0xa8, + 0xd3, 0x75, 0xed, 0x48, 0xf3, 0x33, 0xa4, 0x8a, + 0x19, 0x64, 0x37, 0x07, 0xa0, 0xd6, 0xab, 0x6b, + 0xe1, 0xa3, 0x57, 0x5e, 0xd7, 0xf2, 0xbb, 0x99, + 0xcb, 0x92, 0xff, 0x00, 0x71, 0xbd, 0xfd, 0xb4, + 0xa3, 0x2f, 0x94, 0x95, 0x3d, 0xcd, 0xb8, 0x5e, + 0x96, 0x26, 0x71, 0x63, 0x2c, 0xac, 0x2f, 0xf1, + 0xad, 0xed, 0x7e, 0xf5, 0x51, 0xb3, 0xa5, 0xc8, + 0xc2, 0x99, 0xe4, 0x37, 0xda, 0x7d, 0xbe, 0x84, + 0xf6, 0xae, 0x16, 0xbe, 0x5e, 0x86, 0xbe, 0xac, + 0x47, 0xa5, 0xd7, 0xe5, 0xda, 0xfd, 0x4d, 0xaf, + 0xe2, 0xb8, 0x4e, 0x66, 0x65, 0x04, 0x07, 0x36, + 0xa5, 0xd8, 0xf8, 0x8f, 0x91, 0x0b, 0x4a, 0x24, + 0x00, 0xa8, 0x24, 0xad, 0xfc, 0x55, 0x2f, 0x92, + 0xc4, 0x82, 0x6f, 0xad, 0x57, 0xea, 0x5a, 0x23, + 0x4d, 0x63, 0xd3, 0x4d, 0x8b, 0xcb, 0x23, 0x21, + 0x8a, 0x56, 0x2b, 0x73, 0x70, 0xd5, 0x60, 0xf3, + 0x01, 0x9d, 0x62, 0x87, 0x71, 0x03, 0xbf, 0x9a, + 0xc9, 0xfc, 0x87, 0xc9, 0xbf, 0xd6, 0xa4, 0x8b, + 0x25, 0xe3, 0x70, 0xea, 0x7d, 0xc3, 0x51, 0xad, + 0x4f, 0xd4, 0x93, 0xd7, 0xac, 0xc7, 0x10, 0xdd, + 0x41, 0xca, 0x18, 0xe0, 0x05, 0xc9, 0x05, 0xda, + 0xda, 0xf8, 0xa6, 0xb8, 0x5c, 0x88, 0x29, 0xbc, + 0xb1, 0xb1, 0xd0, 0x56, 0x08, 0x73, 0x4d, 0x24, + 0x7b, 0x26, 0x5b, 0xb0, 0xe8, 0xc0, 0xda, 0x9a, + 0xe0, 0x66, 0xbc, 0xf8, 0xea, 0x23, 0x36, 0x65, + 0x6f, 0x75, 0xdb, 0xb5, 0x5a, 0xbb, 0x19, 0xb6, + 0xf4, 0xf8, 0xce, 0x1b, 0x94, 0x96, 0x2c, 0x88, + 0xf6, 0xc8, 0xb7, 0x56, 0xea, 0x0d, 0x2a, 0xe4, + 0xb8, 0xc1, 0x04, 0x7f, 0x24, 0x2c, 0x44, 0x40, + 0xea, 0x09, 0xbd, 0x89, 0x35, 0x52, 0x1e, 0x51, + 0x55, 0x96, 0x30, 0x6e, 0x10, 0x58, 0xeb, 0xde, + 0x9c, 0x45, 0x3a, 0x4f, 0x08, 0x49, 0x06, 0xe0, + 0xdd, 0x8f, 0x8a, 0xed, 0x5b, 0x44, 0xbc, 0xfd, + 0xba, 0x2d, 0x49, 0x79, 0xc7, 0x72, 0x2a, 0xe0, + 0x41, 0x39, 0x02, 0x45, 0x1e, 0xd6, 0x3d, 0x18, + 0x0a, 0x62, 0x18, 0x30, 0xb8, 0x37, 0x1e, 0x45, + 0x21, 0xca, 0xe3, 0xde, 0x2d, 0xcf, 0x12, 0x99, + 0x13, 0xaa, 0x91, 0xa9, 0x00, 0xd4, 0xfc, 0x3e, + 0x77, 0xb8, 0xe3, 0xc9, 0xa5, 0xc9, 0xf8, 0xfd, + 0x2d, 0xd4, 0x55, 0x9c, 0x0e, 0x28, 0xa2, 0x8a, + 0x02, 0x8a, 0x28, 0xa0, 0x28, 0xa2, 0x8a, 0x02, + 0xab, 0x67, 0xe5, 0x0c, 0x6c, 0x66, 0x92, 0xe3, + 0x77, 0x45, 0x07, 0xcd, 0x59, 0xac, 0xff, 0x00, + 0x23, 0x24, 0x93, 0x66, 0xb4, 0x68, 0x77, 0x6d, + 0xd1, 0x57, 0xb0, 0xbf, 0x7a, 0x0f, 0x70, 0xb0, + 0x9f, 0x2a, 0x52, 0xf3, 0x83, 0xb0, 0xea, 0xda, + 0xf5, 0xa9, 0x39, 0x0c, 0xb8, 0x60, 0x42, 0x91, + 0x58, 0x28, 0xd0, 0x9e, 0xe6, 0xac, 0x3b, 0xae, + 0x16, 0x22, 0xe3, 0x86, 0xf7, 0xed, 0xbb, 0x93, + 0xae, 0x86, 0xb3, 0x1c, 0x97, 0x24, 0x25, 0x8e, + 0x51, 0xd3, 0x60, 0xba, 0x9a, 0xa5, 0xed, 0x86, + 0x8e, 0xbe, 0x99, 0xbc, 0xe5, 0x47, 0x92, 0xe4, + 0xfb, 0x29, 0x1e, 0x82, 0xf4, 0xa2, 0x4e, 0x62, + 0x70, 0xa5, 0x2e, 0x1d, 0x4e, 0x96, 0x35, 0xc4, + 0x91, 0xe4, 0xe6, 0x6e, 0x68, 0xac, 0xc0, 0x1d, + 0x74, 0xb7, 0xed, 0xa5, 0x72, 0x12, 0xac, 0x54, + 0xfd, 0xc0, 0xd8, 0xfe, 0x15, 0x9e, 0xd6, 0xcb, + 0xd9, 0xd5, 0xaa, 0xb1, 0x06, 0x18, 0x73, 0x2c, + 0x8b, 0x34, 0x0e, 0xc1, 0x3e, 0x51, 0x70, 0x7b, + 0x57, 0x39, 0x72, 0x47, 0x14, 0x0b, 0x89, 0x13, + 0x6f, 0x7b, 0xde, 0x46, 0x1e, 0x7c, 0x52, 0xe2, + 0xd7, 0xb9, 0x27, 0x4a, 0x12, 0x52, 0x8e, 0x1c, + 0x75, 0x06, 0xf5, 0x57, 0x5c, 0x18, 0x62, 0x93, + 0x16, 0x1e, 0x44, 0xe6, 0xe0, 0xb0, 0xd8, 0xbf, + 0x53, 0xd6, 0xb9, 0xe3, 0xe1, 0x47, 0x67, 0x96, + 0x5d, 0x62, 0x84, 0x6e, 0x23, 0xc9, 0xf1, 0x5d, + 0xb7, 0x23, 0x8d, 0x91, 0x01, 0x8a, 0x64, 0xd8, + 0x46, 0xa0, 0xaf, 0x42, 0x6b, 0x9c, 0x50, 0xd2, + 0x71, 0xb3, 0x2c, 0x43, 0x73, 0x92, 0x2e, 0x07, + 0x52, 0x28, 0x89, 0x84, 0xb9, 0x5f, 0x04, 0xd8, + 0x9f, 0xa9, 0x89, 0x04, 0x65, 0x5b, 0x6b, 0x01, + 0xe0, 0xf4, 0xaa, 0x83, 0x1f, 0x20, 0xa7, 0xca, + 0x10, 0xec, 0x3d, 0x1a, 0xa6, 0xca, 0xbe, 0x36, + 0x0c, 0x50, 0x1d, 0x19, 0xce, 0xf7, 0x07, 0xa8, + 0xae, 0xf1, 0xb2, 0xe6, 0x4e, 0x32, 0x62, 0xe7, + 0xd9, 0xf6, 0xc7, 0xf5, 0xa2, 0xd5, 0xe1, 0x4b, + 0x7d, 0xb4, 0xed, 0xfc, 0xea, 0x58, 0x72, 0xa4, + 0x8c, 0xdd, 0x4e, 0xdb, 0xf5, 0xb5, 0x73, 0x85, + 0x8b, 0xfa, 0x97, 0x66, 0x76, 0xd9, 0x0a, 0x0b, + 0xc8, 0xfe, 0x2b, 0xac, 0xdc, 0x58, 0xf1, 0xd5, + 0x25, 0x85, 0xf7, 0xc5, 0x25, 0xec, 0x7d, 0x45, + 0x57, 0x97, 0x5f, 0xe6, 0x78, 0x9f, 0x26, 0xbc, + 0x77, 0x26, 0x21, 0x94, 0x3b, 0x80, 0xcb, 0xdc, + 0x5f, 0x5d, 0x6b, 0x53, 0x8b, 0xca, 0xe3, 0x48, + 0xaa, 0xf1, 0xb8, 0x1b, 0x6c, 0x36, 0x9e, 0xd5, + 0xf3, 0xa4, 0x98, 0xad, 0xad, 0xdf, 0xaf, 0xd2, + 0x9a, 0x61, 0x66, 0x95, 0x61, 0xee, 0xe9, 0xe9, + 0x57, 0xad, 0xe6, 0x19, 0xf7, 0xf5, 0x62, 0xf1, + 0x98, 0x7d, 0x4f, 0x0f, 0x28, 0x32, 0x27, 0x42, + 0xad, 0xde, 0xaa, 0xf2, 0x58, 0x46, 0x29, 0x53, + 0x2e, 0x12, 0x15, 0x41, 0xb9, 0x1e, 0xa7, 0xc5, + 0x26, 0xe2, 0x39, 0x72, 0x51, 0x54, 0x30, 0x23, + 0xcd, 0x68, 0xe2, 0x68, 0xf3, 0x20, 0x68, 0x24, + 0xd4, 0x30, 0xeb, 0x5a, 0xab, 0x6c, 0xc3, 0xc3, + 0xdf, 0xa6, 0x69, 0x3e, 0x12, 0xe1, 0x67, 0x45, + 0x93, 0x18, 0xb1, 0xb4, 0x80, 0x5d, 0x94, 0xf5, + 0xfa, 0xda, 0xad, 0x56, 0x73, 0x1b, 0x76, 0x26, + 0x78, 0x8e, 0xc5, 0x8a, 0xb1, 0x56, 0x23, 0xc0, + 0xd0, 0x9d, 0x6b, 0x44, 0x08, 0x3a, 0x8a, 0xb3, + 0x3b, 0xda, 0x28, 0xa2, 0x80, 0xa2, 0x8a, 0xf2, + 0x82, 0x9f, 0x23, 0x9d, 0xfa, 0x64, 0xd8, 0x82, + 0xf2, 0xbf, 0xdb, 0xe8, 0x3c, 0xd2, 0xee, 0x35, + 0x54, 0xcb, 0x26, 0x5c, 0xba, 0xa4, 0x4a, 0x08, + 0x1e, 0x5c, 0xd1, 0xce, 0x4e, 0xa6, 0x74, 0x45, + 0x36, 0x64, 0xb1, 0xd2, 0xf7, 0x35, 0x06, 0x63, + 0x8c, 0x6c, 0x25, 0x86, 0xfe, 0xe7, 0x1b, 0xdc, + 0x1d, 0x0e, 0xbd, 0x07, 0xe1, 0x51, 0x33, 0x88, + 0x5a, 0x95, 0x9b, 0x5a, 0x22, 0x3d, 0xab, 0x67, + 0xf2, 0x06, 0x57, 0x95, 0x4b, 0x10, 0xee, 0x0e, + 0xdd, 0x6b, 0x2d, 0xc9, 0xe4, 0x3e, 0x3e, 0x33, + 0x23, 0xb5, 0xe5, 0x90, 0xd8, 0x8f, 0x41, 0x5e, + 0x72, 0xb9, 0xa7, 0x79, 0xb1, 0xb1, 0xec, 0x6f, + 0x6a, 0x45, 0x3c, 0xec, 0xf2, 0x06, 0x63, 0xba, + 0xde, 0x4d, 0x66, 0xbd, 0xb3, 0x2f, 0x6f, 0xaf, + 0xa7, 0xe6, 0x21, 0x6f, 0x8f, 0x99, 0xd4, 0xcf, + 0x31, 0x62, 0x16, 0x35, 0xd4, 0x76, 0xb9, 0xaa, + 0x98, 0xb1, 0x7e, 0xab, 0x23, 0x69, 0xd0, 0x1b, + 0xb3, 0xb7, 0xa5, 0x5d, 0x4c, 0xac, 0x19, 0xb1, + 0x9e, 0x10, 0x3e, 0x16, 0x6e, 0xb6, 0xef, 0x6a, + 0xab, 0x82, 0x76, 0xc1, 0x94, 0x53, 0x56, 0x0b, + 0x60, 0x7b, 0xda, 0xa8, 0xd7, 0x8e, 0x12, 0xe4, + 0xc1, 0x87, 0x24, 0x0f, 0x2e, 0x2d, 0xf7, 0x45, + 0xa3, 0x5e, 0x97, 0x80, 0xc4, 0x5c, 0x0b, 0xd5, + 0xc8, 0xd4, 0xc1, 0xc5, 0xc8, 0x58, 0x59, 0xa6, + 0x60, 0x05, 0xfc, 0x0a, 0x9f, 0x8b, 0xca, 0x61, + 0x04, 0xa8, 0xe8, 0xa6, 0x34, 0x52, 0xc0, 0x91, + 0xad, 0xcd, 0x10, 0x59, 0xa8, 0x17, 0xa9, 0x20, + 0xc9, 0x9a, 0x06, 0x2d, 0x1b, 0x15, 0x26, 0xbc, + 0x86, 0x29, 0x32, 0x66, 0xdb, 0x18, 0xb9, 0x62, + 0x49, 0x07, 0x4b, 0x0a, 0x97, 0x33, 0x02, 0x5c, + 0x55, 0x0e, 0x58, 0x3a, 0x13, 0x6b, 0x8f, 0x34, + 0x1c, 0xac, 0xcb, 0x2e, 0x40, 0x93, 0x28, 0x96, + 0x52, 0x7d, 0xf4, 0xc3, 0x2d, 0x31, 0xe4, 0xe3, + 0xc0, 0xc5, 0x90, 0x6d, 0x88, 0x96, 0x65, 0x63, + 0x63, 0xaf, 0x8a, 0x4a, 0x4d, 0xe8, 0xdc, 0x47, + 0x43, 0x60, 0x7b, 0x54, 0x2f, 0x8c, 0xe0, 0xcb, + 0x77, 0xc5, 0xc4, 0x12, 0x07, 0xfe, 0x69, 0x2c, + 0xe7, 0xd0, 0x0d, 0x05, 0x19, 0xb6, 0x8b, 0x8e, + 0xc6, 0x81, 0xbe, 0xe2, 0x4c, 0x96, 0xf4, 0x35, + 0x0e, 0x0f, 0x24, 0xb8, 0xd1, 0x98, 0xe4, 0x8c, + 0x4b, 0x1d, 0xf7, 0x00, 0x7c, 0xd7, 0x85, 0xe4, + 0xe4, 0xb2, 0xfd, 0xcc, 0x23, 0x24, 0x59, 0x6f, + 0xd0, 0x0a, 0x7a, 0x4c, 0x47, 0x32, 0xbc, 0x66, + 0xc6, 0x7e, 0x1d, 0xa4, 0x30, 0x84, 0x75, 0xb4, + 0x61, 0xbc, 0xd5, 0x5e, 0x3e, 0x29, 0xf2, 0x1f, + 0x6c, 0x20, 0x9b, 0x6a, 0x4f, 0x6a, 0x97, 0x94, + 0x82, 0x5c, 0x5c, 0x2c, 0x78, 0x00, 0xba, 0x2f, + 0xb9, 0x9c, 0x74, 0xb9, 0xd2, 0xbc, 0x32, 0x1c, + 0x5e, 0x2a, 0x3d, 0xa7, 0x6b, 0xe5, 0x31, 0x25, + 0x97, 0xfc, 0xa2, 0xa0, 0x89, 0x9c, 0x49, 0xc6, + 0x1c, 0xd3, 0x62, 0xca, 0xb1, 0x49, 0xb8, 0x30, + 0xfe, 0xda, 0x56, 0xbb, 0x8a, 0xce, 0xdc, 0x16, + 0xc4, 0x93, 0xa5, 0x60, 0xe7, 0x9d, 0x84, 0x78, + 0x82, 0x42, 0x4b, 0x94, 0xf7, 0x1b, 0xeb, 0x63, + 0xd2, 0xb4, 0xdc, 0x7c, 0x90, 0x26, 0x3a, 0x4b, + 0x1b, 0x92, 0xac, 0x6d, 0x6b, 0xf7, 0xae, 0xda, + 0xed, 0x86, 0x1e, 0xde, 0xa8, 0xb4, 0x67, 0x0d, + 0x47, 0x21, 0x87, 0xfa, 0x80, 0x32, 0xa1, 0x21, + 0x5c, 0x0b, 0x48, 0x0f, 0x71, 0xfe, 0x15, 0xef, + 0x11, 0x99, 0x23, 0x31, 0xc6, 0x92, 0xe4, 0x75, + 0x8c, 0x9e, 0xb6, 0xf0, 0x6b, 0xae, 0x3e, 0x71, + 0x22, 0x6c, 0x3d, 0x1c, 0x74, 0xbd, 0xff, 0x00, + 0x75, 0x51, 0xc3, 0x95, 0xb1, 0x79, 0x0d, 0xac, + 0x34, 0x63, 0xb4, 0xdc, 0x1d, 0x3e, 0x95, 0xa2, + 0x27, 0x30, 0xf1, 0x2f, 0x5f, 0x99, 0xc3, 0x43, + 0x45, 0x79, 0x5e, 0xd4, 0xaa, 0x2a, 0xbe, 0x74, + 0xe6, 0x0c, 0x67, 0x90, 0x75, 0x03, 0x4a, 0xb1, + 0x4a, 0x79, 0xdc, 0xa8, 0xe3, 0x48, 0xe0, 0x63, + 0x6d, 0xed, 0xee, 0xb6, 0xba, 0x50, 0x53, 0xc0, + 0x46, 0xca, 0xc9, 0x49, 0x27, 0x6b, 0xac, 0x63, + 0x7b, 0x77, 0x06, 0xdd, 0x29, 0x57, 0x33, 0x94, + 0x67, 0x9c, 0xaa, 0xda, 0xee, 0x74, 0xfe, 0xc2, + 0x9b, 0x63, 0x27, 0xc7, 0x8d, 0x3c, 0xd7, 0xda, + 0x1f, 0xf2, 0xe3, 0xfd, 0x9a, 0xd6, 0x67, 0x2e, + 0x72, 0x25, 0x99, 0xaf, 0x73, 0x1a, 0x92, 0x2c, + 0x2f, 0xad, 0x73, 0xd9, 0x3c, 0x61, 0xb3, 0xa5, + 0xaf, 0x36, 0x9b, 0x13, 0x72, 0x98, 0xc8, 0x56, + 0x46, 0x8e, 0x40, 0xee, 0x9f, 0x70, 0x14, 0x85, + 0xcd, 0xcf, 0xaf, 0x6a, 0x69, 0x1b, 0x11, 0x8f, + 0x93, 0x3b, 0x13, 0xef, 0x1b, 0x47, 0xd6, 0xf5, + 0x17, 0x14, 0xd0, 0xb1, 0x31, 0x4b, 0x10, 0x71, + 0x62, 0xc5, 0x8f, 0x60, 0x2b, 0x3c, 0xbd, 0xaa, + 0x46, 0x20, 0xb0, 0xdf, 0xc6, 0x83, 0x4d, 0x2a, + 0x5c, 0x5c, 0xa9, 0x71, 0xdf, 0x7c, 0x7d, 0xc5, + 0x88, 0x35, 0xc4, 0xbf, 0x99, 0x33, 0x08, 0xc5, + 0xb7, 0x1b, 0x28, 0x1d, 0xea, 0x59, 0xb0, 0xb2, + 0x20, 0x40, 0xf2, 0x2d, 0x81, 0xa8, 0x5a, 0x5d, + 0x4d, 0x97, 0x26, 0x5c, 0xa9, 0xf2, 0x9d, 0xa8, + 0x0d, 0xac, 0x3a, 0x0a, 0xbe, 0xd8, 0x9f, 0x1e, + 0x04, 0xa3, 0x19, 0xc4, 0xac, 0xe4, 0x16, 0xf4, + 0x51, 0x49, 0x89, 0xbf, 0xf7, 0x57, 0x49, 0x34, + 0x91, 0xe8, 0x8c, 0x56, 0xfa, 0x1f, 0xa5, 0x10, + 0xbf, 0x82, 0xdf, 0x0e, 0x26, 0x4c, 0xe3, 0xee, + 0xb6, 0xc5, 0x3e, 0x2f, 0x5e, 0x5c, 0xaf, 0x10, + 0x4b, 0x92, 0x77, 0xbd, 0x97, 0xf9, 0xd4, 0x78, + 0x39, 0x50, 0x44, 0x92, 0x43, 0x90, 0xa5, 0xa3, + 0x93, 0xad, 0xa8, 0xcb, 0xc8, 0x19, 0x4f, 0x1e, + 0x36, 0x32, 0xed, 0x8d, 0x7d, 0xa8, 0x3c, 0xdf, + 0xb9, 0xa0, 0xb1, 0x8b, 0x8f, 0x81, 0x36, 0x0c, + 0x8e, 0xd7, 0x12, 0xc4, 0xb7, 0x63, 0xdb, 0xd2, + 0x95, 0xa8, 0x67, 0x60, 0xa8, 0x37, 0x13, 0xf6, + 0x81, 0x4c, 0x66, 0x8a, 0x4c, 0x3e, 0x31, 0x91, + 0xc5, 0x9e, 0x67, 0xf7, 0x7d, 0x05, 0x47, 0x82, + 0xe3, 0x17, 0x0e, 0x5c, 0xd2, 0x01, 0x96, 0xe1, + 0x23, 0xbf, 0x6b, 0xf7, 0xa2, 0xd5, 0x9c, 0x29, + 0x4b, 0x14, 0x91, 0x36, 0xc9, 0x54, 0xa1, 0x23, + 0xbd, 0x78, 0x09, 0x1a, 0x83, 0x6f, 0x5a, 0x61, + 0x9b, 0x2b, 0xe4, 0x71, 0xb0, 0x4f, 0x2d, 0xbe, + 0x4d, 0xe4, 0x6e, 0xf2, 0x2b, 0x83, 0xc4, 0xb0, + 0xc3, 0x39, 0x42, 0x55, 0x20, 0x0b, 0x95, 0x06, + 0xa1, 0x7f, 0xa8, 0x40, 0x73, 0x72, 0x4c, 0x26, + 0x16, 0x90, 0xb4, 0x67, 0xb1, 0xd6, 0xaf, 0x63, + 0xe4, 0x60, 0x4f, 0x8b, 0x14, 0x79, 0x44, 0xab, + 0x63, 0x5c, 0x8f, 0x0c, 0x3c, 0x52, 0x90, 0x68, + 0xbd, 0x8f, 0xf2, 0xa8, 0x4c, 0xe2, 0x7c, 0x18, + 0xcb, 0x2c, 0xb9, 0xd9, 0x4c, 0xd0, 0xad, 0xd5, + 0x40, 0x01, 0x47, 0x60, 0x29, 0xf4, 0x79, 0x03, + 0x1d, 0x31, 0xf1, 0xb4, 0x52, 0x8b, 0xb9, 0xaf, + 0xd6, 0xe6, 0xb2, 0xd8, 0xb9, 0x53, 0x63, 0x49, + 0xbe, 0x26, 0xd8, 0x7b, 0xfa, 0x8a, 0x6a, 0xbc, + 0xb1, 0xc9, 0x55, 0xf9, 0x50, 0x7c, 0xab, 0xae, + 0xfe, 0xf6, 0xab, 0x44, 0xf2, 0xe5, 0xb6, 0xb9, + 0x8c, 0x3e, 0x8d, 0xc4, 0xe4, 0x88, 0xe0, 0x88, + 0x9b, 0x6f, 0x6f, 0x76, 0xb5, 0x77, 0x93, 0xc4, + 0x43, 0x22, 0x66, 0x26, 0x9d, 0xcf, 0xa1, 0xf3, + 0x48, 0x78, 0x89, 0x84, 0xc9, 0x0c, 0x81, 0xfd, + 0xa1, 0x40, 0x61, 0xfe, 0x15, 0xa2, 0x9f, 0x21, + 0x5b, 0x01, 0x9a, 0xd7, 0x00, 0x8f, 0x4b, 0x0a, + 0xd3, 0xae, 0x78, 0x78, 0x3d, 0xba, 0x62, 0xd9, + 0x4f, 0xc6, 0x66, 0x9c, 0xa8, 0x8e, 0xe1, 0xee, + 0x4d, 0x2e, 0x3a, 0x1a, 0xbb, 0x4a, 0x38, 0x62, + 0xa2, 0x57, 0xdb, 0xd5, 0x96, 0xec, 0x3b, 0x75, + 0xb0, 0x34, 0xde, 0xba, 0x32, 0xbc, 0xa4, 0x3c, + 0xbc, 0xb1, 0x9c, 0x86, 0x56, 0x8c, 0xc8, 0xe8, + 0x2c, 0xa3, 0xeb, 0xde, 0x9f, 0x1a, 0x49, 0xcc, + 0xba, 0x0c, 0x80, 0x06, 0x8e, 0x40, 0x00, 0x81, + 0xd7, 0xf1, 0xa0, 0xad, 0xca, 0x17, 0xc6, 0xe3, + 0x71, 0xe0, 0x63, 0xf9, 0x9b, 0x4b, 0xb5, 0xbc, + 0x9e, 0xd5, 0x88, 0xcd, 0xcd, 0x68, 0x72, 0x19, + 0xc0, 0x2c, 0x08, 0x21, 0x94, 0x9d, 0x2d, 0x5b, + 0x0f, 0xfb, 0x33, 0xd9, 0xc2, 0x1d, 0x4a, 0x22, + 0xaf, 0xe3, 0x6a, 0xc1, 0x72, 0x71, 0x4c, 0x8c, + 0x5d, 0x90, 0x85, 0x6e, 0xf7, 0xb8, 0xae, 0x1b, + 0x67, 0x97, 0xad, 0xd0, 0xa7, 0xf1, 0x13, 0xfa, + 0xab, 0x9d, 0x9c, 0x72, 0x76, 0xc5, 0x1a, 0x08, + 0xa2, 0xbf, 0x41, 0xd0, 0x93, 0x53, 0xc7, 0x85, + 0x2e, 0x26, 0x24, 0xf2, 0x68, 0xec, 0xea, 0x15, + 0x76, 0xeb, 0xa1, 0xa5, 0x6e, 0x6b, 0xa8, 0xb3, + 0x32, 0x21, 0xfb, 0x1f, 0x4f, 0x15, 0xc5, 0xe9, + 0x63, 0x85, 0x8e, 0x2d, 0x42, 0xbc, 0xd3, 0xb6, + 0xa2, 0x15, 0xb8, 0x07, 0xb1, 0xa9, 0x22, 0x9a, + 0x49, 0x70, 0xb2, 0x5a, 0x66, 0xdc, 0xbd, 0xaf, + 0xe4, 0xf8, 0xa8, 0x70, 0x27, 0x85, 0x4c, 0xa9, + 0x39, 0x21, 0x66, 0x16, 0x36, 0xec, 0x6b, 0xac, + 0xb9, 0x60, 0x8f, 0x1c, 0x61, 0x62, 0x93, 0x20, + 0x2d, 0x77, 0x6f, 0x24, 0xf4, 0xa2, 0x1e, 0xe0, + 0x60, 0x63, 0xe5, 0x46, 0x77, 0x4b, 0xb6, 0x41, + 0x7f, 0x65, 0xbb, 0x0e, 0xf5, 0x45, 0x80, 0x0e, + 0x42, 0x9b, 0x80, 0x6c, 0x0f, 0x4b, 0xd5, 0xfc, + 0x35, 0x6c, 0x7c, 0x5c, 0x99, 0xe4, 0x05, 0x5a, + 0xdb, 0x16, 0xfe, 0xb5, 0x17, 0x1b, 0x14, 0x6e, + 0xf2, 0x4d, 0x35, 0x8c, 0x70, 0xae, 0xe6, 0xbf, + 0x9e, 0xd4, 0x15, 0x08, 0x61, 0xf7, 0x0b, 0x57, + 0x81, 0xd9, 0x08, 0x64, 0xb8, 0x61, 0xd0, 0xd3, + 0x29, 0xe6, 0x5c, 0xcc, 0x09, 0x26, 0x64, 0x08, + 0xf1, 0x30, 0xb1, 0x1e, 0x0d, 0x55, 0x8b, 0x8e, + 0xcb, 0x9a, 0x1f, 0x9e, 0x30, 0x0c, 0x7a, 0x9f, + 0x5d, 0x28, 0x3a, 0xff, 0x00, 0x95, 0xc9, 0x68, + 0x5a, 0x19, 0x6d, 0x22, 0x11, 0x6b, 0x9e, 0xa2, + 0xa6, 0xc3, 0x58, 0xf2, 0xf0, 0x3f, 0x4a, 0x65, + 0x11, 0x48, 0x8f, 0xb8, 0x13, 0xdc, 0x52, 0xbe, + 0x9a, 0x74, 0x23, 0xad, 0x17, 0x23, 0x51, 0xde, + 0x8b, 0x79, 0x5f, 0xe4, 0xa6, 0x8d, 0x8c, 0x78, + 0xb0, 0x5d, 0x92, 0x01, 0x6b, 0x8e, 0x84, 0xf7, + 0xae, 0xe4, 0x63, 0x07, 0x10, 0x88, 0x4f, 0xbb, + 0x21, 0xaf, 0xff, 0x00, 0xb5, 0x7a, 0x55, 0x2c, + 0x7c, 0x96, 0xc6, 0x94, 0x4a, 0xa0, 0x1b, 0x69, + 0x63, 0x57, 0x73, 0x79, 0x0c, 0x5c, 0xcc, 0x70, + 0x19, 0x0c, 0x73, 0x26, 0x89, 0xb7, 0xed, 0xa1, + 0x2f, 0x30, 0x52, 0x08, 0x31, 0x5b, 0x3a, 0x74, + 0x12, 0x6b, 0xb2, 0x28, 0xcf, 0x73, 0xdc, 0xd1, + 0xc9, 0x47, 0x11, 0x58, 0x32, 0x21, 0x5d, 0x82, + 0x75, 0xfb, 0x7d, 0x6f, 0x52, 0x36, 0x3c, 0xb9, + 0x5c, 0x6e, 0x2a, 0x40, 0x37, 0x00, 0xc4, 0x3f, + 0xa1, 0x3e, 0x6a, 0x1e, 0x5a, 0x45, 0x12, 0x45, + 0x8e, 0x8d, 0xa4, 0x0b, 0x6d, 0x3c, 0xf7, 0xa8, + 0xc2, 0x72, 0x86, 0x4c, 0x2c, 0xb8, 0x93, 0xe5, + 0x78, 0xc8, 0x5e, 0xa0, 0xd7, 0xb0, 0x48, 0x43, + 0x03, 0x57, 0x32, 0xf2, 0x25, 0x5e, 0x2a, 0x08, + 0xa4, 0x62, 0x5e, 0x66, 0xdf, 0x6f, 0xf4, 0x8e, + 0x95, 0xc7, 0x1d, 0x89, 0x01, 0x88, 0xe4, 0xe5, + 0xbe, 0xc8, 0x6f, 0x64, 0x03, 0xb9, 0xa6, 0x11, + 0x96, 0x83, 0x82, 0xc8, 0x61, 0x61, 0x76, 0x00, + 0x9e, 0x95, 0xbb, 0xe3, 0xc7, 0xea, 0x71, 0x9a, + 0x23, 0x7f, 0x7a, 0xe8, 0x4e, 0xa3, 0x4a, 0xf9, + 0xf6, 0x1c, 0x6b, 0x8f, 0x90, 0x15, 0x08, 0x64, + 0x20, 0x32, 0xb5, 0xf5, 0xb1, 0xad, 0xd7, 0x08, + 0xe4, 0x7c, 0x7e, 0x7a, 0x5e, 0xfe, 0x47, 0x8a, + 0xef, 0xae, 0x5e, 0x4f, 0x7a, 0xbe, 0x65, 0xd7, + 0x19, 0x93, 0xf0, 0xe5, 0xec, 0x90, 0x80, 0xac, + 0x76, 0x1f, 0xfd, 0x5e, 0x4d, 0x68, 0x2b, 0x31, + 0x91, 0x14, 0xb1, 0x66, 0x03, 0x28, 0xd8, 0x37, + 0x7d, 0xc7, 0x41, 0xd7, 0xbd, 0x69, 0x3f, 0xfa, + 0xfa, 0xf6, 0xeb, 0xf8, 0x57, 0x77, 0x98, 0xe8, + 0xd6, 0x77, 0x37, 0x23, 0x7e, 0x5c, 0xab, 0xb4, + 0x9b, 0x3e, 0xd3, 0xf4, 0x1a, 0x56, 0x88, 0xd2, + 0x18, 0xd0, 0x49, 0xc9, 0x3a, 0x69, 0x63, 0x23, + 0x5e, 0xdd, 0x4d, 0x8f, 0x7a, 0x05, 0xbc, 0xc6, + 0xd6, 0xcc, 0x6d, 0xc4, 0x6d, 0x8c, 0x5f, 0x5f, + 0x40, 0x2b, 0x23, 0x3e, 0x4b, 0xe4, 0x7e, 0xa9, + 0x5d, 0x81, 0x8c, 0x29, 0x20, 0x01, 0xa0, 0x3d, + 0xab, 0x59, 0xcd, 0xc8, 0x8b, 0x99, 0x32, 0xb1, + 0xb2, 0xb6, 0xe5, 0xb8, 0xed, 0x58, 0xde, 0x4d, + 0xe3, 0xc5, 0x81, 0xe1, 0x46, 0xde, 0xf2, 0x91, + 0xb8, 0xfa, 0x56, 0x6d, 0x9e, 0x65, 0xed, 0xf4, + 0xa3, 0xf8, 0x8f, 0xf2, 0x0b, 0xb0, 0xb0, 0x17, + 0x2c, 0x1f, 0xcd, 0x08, 0xc0, 0xdb, 0x69, 0xaa, + 0x52, 0xa7, 0xc7, 0x2b, 0x25, 0xf7, 0x6d, 0x24, + 0x5c, 0x55, 0xee, 0x39, 0x7e, 0x36, 0x9b, 0x21, + 0x85, 0xbe, 0x14, 0x3a, 0x9d, 0x35, 0x35, 0x5f, + 0x0e, 0x11, 0x93, 0x95, 0xef, 0xfb, 0x45, 0xdd, + 0xcd, 0x73, 0x6d, 0x57, 0xbe, 0x9a, 0x57, 0x8a, + 0xc4, 0x10, 0x41, 0xb5, 0xb5, 0x14, 0xd2, 0x46, + 0xc6, 0xcb, 0x82, 0x51, 0x1c, 0x7f, 0x19, 0x87, + 0x55, 0x3e, 0x45, 0x2f, 0x8b, 0x13, 0x22, 0x65, + 0x2f, 0x12, 0x16, 0x50, 0x6d, 0xa5, 0x15, 0x5c, + 0x4e, 0x58, 0xc9, 0x09, 0x87, 0x25, 0x03, 0xa9, + 0x1a, 0x69, 0xad, 0xe8, 0xe3, 0xd0, 0xcf, 0x8d, + 0x91, 0x04, 0x76, 0x12, 0x49, 0x62, 0x80, 0x9e, + 0xa0, 0x76, 0xa5, 0xc6, 0xea, 0x6c, 0x74, 0x20, + 0xd8, 0x8a, 0x03, 0xba, 0x36, 0xe4, 0x25, 0x58, + 0x74, 0x23, 0xf7, 0xd1, 0x26, 0x19, 0x9f, 0xed, + 0x70, 0x93, 0x10, 0xb0, 0xf9, 0x5c, 0xef, 0x90, + 0x0e, 0xde, 0x94, 0x61, 0x4c, 0xf1, 0x71, 0xd9, + 0x32, 0xee, 0x3b, 0x5a, 0xd1, 0xa0, 0xf5, 0x3d, + 0x6a, 0x82, 0x4b, 0xb6, 0x51, 0x24, 0x9e, 0xf1, + 0x7b, 0x90, 0x7a, 0x9a, 0x65, 0x3e, 0x4f, 0x1f, + 0x95, 0x84, 0x62, 0x8c, 0xfc, 0x05, 0x49, 0x7d, + 0xbe, 0x4d, 0x05, 0x4c, 0x0c, 0x54, 0x99, 0x9a, + 0x49, 0x4d, 0xa1, 0x84, 0x6e, 0x73, 0xde, 0xbb, + 0xce, 0xc7, 0xc5, 0xf8, 0x23, 0xca, 0xc4, 0xb8, + 0x47, 0x3b, 0x48, 0x35, 0xd4, 0x41, 0xbf, 0xe1, + 0xe4, 0x08, 0x09, 0x67, 0x70, 0x1a, 0xde, 0x28, + 0xcc, 0x1f, 0xa7, 0xe3, 0xe0, 0x80, 0xfd, 0xec, + 0x4c, 0x8e, 0x3b, 0x8a, 0x26, 0x25, 0x43, 0x63, + 0x81, 0x7d, 0xa6, 0xc3, 0xbd, 0xab, 0xcd, 0x29, + 0xba, 0x66, 0x49, 0xff, 0x00, 0x0d, 0x26, 0xf5, + 0x5b, 0x12, 0x12, 0x33, 0x6d, 0x4d, 0x50, 0xc2, + 0xc3, 0x93, 0x29, 0x8d, 0x8e, 0xc4, 0x41, 0x77, + 0x73, 0xd0, 0x50, 0xcb, 0x88, 0xb2, 0xa7, 0x81, + 0x48, 0x89, 0xca, 0x86, 0xea, 0x05, 0x49, 0x87, + 0x2e, 0x38, 0x94, 0x9c, 0xa0, 0x59, 0x4f, 0x56, + 0x1d, 0x75, 0xaf, 0x33, 0x70, 0xdf, 0x15, 0xd4, + 0x12, 0x1d, 0x1c, 0x5d, 0x18, 0x77, 0x15, 0x5b, + 0x4b, 0x79, 0xa1, 0x93, 0x6e, 0x5d, 0x60, 0x96, + 0x38, 0xe7, 0xc7, 0x98, 0x18, 0xd1, 0x42, 0x2c, + 0x7d, 0xc5, 0xab, 0xdc, 0xa0, 0xe6, 0x1c, 0x3c, + 0x78, 0xc1, 0x2a, 0x54, 0x1d, 0x35, 0xb9, 0x34, + 0xa4, 0x9b, 0x1f, 0xe3, 0x4c, 0x71, 0x39, 0x59, + 0xa1, 0x84, 0x43, 0xb4, 0x3e, 0xcf, 0xfc, 0x6c, + 0x45, 0xc8, 0xa1, 0x93, 0xb4, 0x95, 0x53, 0x32, + 0x34, 0x16, 0x3f, 0x0a, 0x2a, 0xd8, 0xf9, 0x15, + 0xbc, 0xe2, 0xe4, 0x5d, 0x90, 0x31, 0x01, 0x49, + 0x20, 0xf4, 0xaf, 0x9e, 0xf0, 0x91, 0x8c, 0x99, + 0x4b, 0x3c, 0x9b, 0x5c, 0x90, 0x7a, 0x75, 0xad, + 0xfe, 0x00, 0x61, 0x22, 0x0b, 0x9d, 0xa2, 0xc0, + 0x10, 0x2e, 0x2b, 0xae, 0xb7, 0x9d, 0xdd, 0xf1, + 0x29, 0x79, 0x97, 0x0f, 0x93, 0xec, 0xbb, 0x04, + 0xb6, 0xe0, 0x3a, 0x78, 0xe8, 0x7a, 0xd3, 0xbb, + 0xff, 0x00, 0xb7, 0xbf, 0xfa, 0x2f, 0x6f, 0xc2, + 0x92, 0x72, 0xd1, 0xfc, 0x19, 0x0c, 0xff, 0x00, + 0x78, 0x3e, 0xf0, 0x0f, 0x91, 0xda, 0x9d, 0x6e, + 0xff, 0x00, 0x6d, 0xbe, 0xdf, 0xd1, 0x7b, 0x7e, + 0x15, 0xa1, 0xe4, 0x25, 0xac, 0xf4, 0xa5, 0xcf, + 0x2b, 0xb5, 0x00, 0x56, 0x0f, 0x60, 0x47, 0x7d, + 0x6b, 0x42, 0x69, 0x1e, 0x51, 0x5c, 0x7e, 0x48, + 0xb8, 0x36, 0x2c, 0xc0, 0xb7, 0x9b, 0x1f, 0xe5, + 0x40, 0x87, 0xfe, 0xce, 0xbf, 0xee, 0x65, 0x1a, + 0xe8, 0x4f, 0xa5, 0x61, 0x73, 0x6e, 0xae, 0x4e, + 0xbd, 0x7a, 0x9d, 0x6b, 0xe8, 0xdf, 0xf6, 0x6c, + 0x78, 0xa6, 0x92, 0x52, 0xb6, 0x2c, 0x46, 0xe0, + 0x6f, 0xa1, 0xb8, 0xaf, 0x9d, 0xe6, 0xa3, 0x6f, + 0x60, 0xab, 0xdf, 0x5b, 0x6b, 0x59, 0xb6, 0x79, + 0x97, 0xb5, 0xd2, 0x9f, 0xe2, 0x3f, 0xc8, 0x76, + 0xbc, 0xac, 0x6f, 0x09, 0x83, 0x26, 0x31, 0xb1, + 0x85, 0x89, 0x5e, 0xba, 0x54, 0x1c, 0x70, 0xde, + 0x72, 0x12, 0x3f, 0xbd, 0xd0, 0x84, 0xf5, 0x15, + 0x49, 0x86, 0xd3, 0x63, 0xf4, 0xae, 0x52, 0x47, + 0x8d, 0xf7, 0x21, 0x20, 0x8e, 0x84, 0x57, 0x36, + 0xe3, 0x0d, 0x8f, 0x87, 0xc7, 0xb8, 0x94, 0x5a, + 0x59, 0xb4, 0x0b, 0xdc, 0x0a, 0x38, 0x79, 0xa5, + 0x87, 0xe5, 0x7d, 0xc4, 0x45, 0x1a, 0x16, 0x20, + 0x77, 0x3d, 0x2a, 0x8b, 0xcf, 0x24, 0xd2, 0x09, + 0x25, 0x62, 0xf6, 0x3a, 0xdc, 0xf6, 0xa6, 0x91, + 0x9c, 0x09, 0x31, 0x24, 0x8b, 0x19, 0xfe, 0x27, + 0x93, 0x53, 0xbb, 0xc0, 0xea, 0x28, 0x8f, 0x65, + 0xb0, 0x42, 0xd9, 0x79, 0x3b, 0x47, 0xf5, 0x12, + 0xcc, 0x4f, 0x61, 0x56, 0x72, 0xb0, 0xb1, 0x97, + 0x1d, 0xa5, 0xc6, 0x93, 0x7f, 0xc4, 0x6c, 0xf5, + 0xe6, 0x00, 0xf8, 0xf1, 0xf2, 0xdd, 0x45, 0xdd, + 0x56, 0xc2, 0xde, 0xb5, 0xe4, 0x60, 0xc7, 0xc5, + 0x48, 0xe7, 0xee, 0x9d, 0x82, 0xa8, 0xfa, 0x50, + 0x50, 0x37, 0xaf, 0x0d, 0xbf, 0x0a, 0x6d, 0xc5, + 0x4e, 0x9f, 0xa7, 0x99, 0x24, 0x89, 0x19, 0x62, + 0x52, 0xdb, 0xc8, 0x04, 0xdf, 0xb5, 0x2d, 0x86, + 0x19, 0x32, 0x66, 0x11, 0xc6, 0x3d, 0xcd, 0xa8, + 0xf0, 0x3c, 0xd0, 0x77, 0x89, 0x9f, 0x3e, 0x25, + 0xfe, 0x3d, 0x43, 0x75, 0x43, 0x5e, 0xac, 0xcb, + 0x93, 0x95, 0xbb, 0x2d, 0xc8, 0x56, 0xd0, 0xb0, + 0xe8, 0x28, 0xcc, 0xc0, 0x9b, 0x16, 0xc5, 0xc8, + 0x65, 0x3d, 0x18, 0x79, 0xaa, 0xda, 0x0e, 0xff, + 0x00, 0x85, 0x03, 0x9e, 0x47, 0x18, 0x2f, 0x1f, + 0x12, 0xe3, 0xb2, 0xc9, 0x14, 0x57, 0x2c, 0x41, + 0xb1, 0x24, 0xd5, 0x77, 0x6f, 0x8b, 0x88, 0x8d, + 0x17, 0xac, 0xee, 0x4b, 0x5b, 0xfd, 0x3d, 0xaa, + 0x86, 0xf7, 0x03, 0x6e, 0xe3, 0x63, 0xdb, 0xb5, + 0x5d, 0xc5, 0xcf, 0x81, 0x20, 0x10, 0x64, 0xc5, + 0xf2, 0x2a, 0x9d, 0xd1, 0x90, 0x7b, 0xd0, 0x75, + 0xc8, 0xfe, 0x5e, 0x2e, 0x24, 0x4d, 0xf7, 0x05, + 0x2c, 0xdf, 0x43, 0xd2, 0xa5, 0xc8, 0x4c, 0x06, + 0xe2, 0x86, 0x44, 0x71, 0x6c, 0x91, 0x98, 0x28, + 0x3f, 0x4e, 0xb5, 0x56, 0xd3, 0x72, 0x79, 0x6d, + 0xb6, 0xca, 0x6d, 0xa0, 0x3d, 0x2c, 0x3b, 0x0a, + 0x9f, 0x96, 0x89, 0xf1, 0xf1, 0xf1, 0xf1, 0x88, + 0xb2, 0xc6, 0xbb, 0x98, 0xf6, 0x24, 0xd0, 0xca, + 0x9c, 0x18, 0xd3, 0xe4, 0x31, 0x58, 0x53, 0x71, + 0xb7, 0xf6, 0xbd, 0x0d, 0x1c, 0x90, 0xc8, 0x52, + 0x45, 0x2a, 0xc3, 0xa8, 0xab, 0xa6, 0x57, 0xc2, + 0xe3, 0xa2, 0x10, 0x9d, 0xb2, 0xe4, 0x1d, 0xcc, + 0xc3, 0x43, 0x6e, 0xd5, 0xef, 0x24, 0x37, 0xc9, + 0x8c, 0x64, 0xd2, 0x47, 0x8d, 0x4c, 0x86, 0x87, + 0xa5, 0x9e, 0x2f, 0xee, 0x1d, 0x7f, 0x03, 0x5f, + 0x42, 0xe0, 0xd9, 0xd9, 0x10, 0x12, 0x48, 0x0c, + 0x07, 0x5a, 0xc5, 0xe2, 0x71, 0xf1, 0x43, 0x1a, + 0x4d, 0x1c, 0x81, 0x95, 0x88, 0x02, 0xb6, 0xdc, + 0x0a, 0x5c, 0xc6, 0x08, 0x1a, 0xb0, 0x3a, 0xff, + 0x00, 0x75, 0x76, 0xd6, 0xf3, 0xbb, 0xb3, 0x18, + 0x95, 0x9e, 0x53, 0x29, 0x5f, 0x25, 0xfd, 0xdb, + 0x44, 0x63, 0x40, 0x4f, 0x52, 0x29, 0xdd, 0xff, + 0x00, 0xda, 0x5f, 0xff, 0x00, 0xce, 0xff, 0x00, + 0xfc, 0x69, 0x1e, 0x42, 0xa4, 0x99, 0xf2, 0xc6, + 0x00, 0x1b, 0xdc, 0x16, 0x72, 0x2f, 0xa7, 0x4b, + 0x53, 0xfd, 0xa3, 0xe3, 0xdb, 0xda, 0xd6, 0xfd, + 0xd5, 0xdd, 0xe4, 0xba, 0xa5, 0x1c, 0xc4, 0x7f, + 0x98, 0x92, 0x00, 0x2f, 0x6e, 0xa6, 0xc6, 0x9b, + 0x9a, 0x59, 0xcc, 0xa8, 0xb4, 0x5b, 0xbe, 0xdb, + 0x90, 0x7f, 0x1a, 0x04, 0xfc, 0xaa, 0x32, 0xe2, + 0x2c, 0xc4, 0x01, 0xbe, 0x2d, 0xa3, 0xd4, 0x82, + 0x45, 0xeb, 0x17, 0x0c, 0x8e, 0x99, 0x2c, 0x9e, + 0xd3, 0x1e, 0xac, 0xf7, 0x5f, 0x02, 0xb7, 0x19, + 0xc4, 0x64, 0xf1, 0x2b, 0xa9, 0xdd, 0x03, 0x10, + 0xc3, 0xbd, 0x9b, 0xa1, 0xfd, 0xd5, 0x94, 0xcb, + 0xc3, 0x0b, 0x1c, 0xcd, 0x03, 0x97, 0x91, 0xd6, + 0xc1, 0x7a, 0x75, 0xae, 0x1b, 0x63, 0x97, 0xab, + 0xd0, 0xb6, 0x69, 0x11, 0xf9, 0xc3, 0x27, 0x28, + 0x6c, 0x8c, 0xa6, 0xd8, 0x35, 0x77, 0x3b, 0x40, + 0xe9, 0x52, 0x64, 0x71, 0xb2, 0x43, 0x09, 0x90, + 0x30, 0x6d, 0xbf, 0x78, 0x1d, 0xaa, 0x7c, 0x14, + 0xf8, 0xa5, 0x9a, 0x56, 0xbd, 0xe1, 0x56, 0xd3, + 0xd7, 0xa5, 0x47, 0x8b, 0xbb, 0xf4, 0x99, 0x73, + 0x39, 0xd1, 0x86, 0xdf, 0xa9, 0x35, 0xc5, 0xe9, + 0xc7, 0x82, 0xee, 0xba, 0x01, 0xd2, 0x86, 0x37, + 0x34, 0xc7, 0x8a, 0x8b, 0x0a, 0x5d, 0xd1, 0x4e, + 0x84, 0xbe, 0xad, 0xb8, 0x78, 0x15, 0x42, 0x40, + 0xad, 0x33, 0x08, 0xc6, 0x97, 0xb2, 0x8a, 0x23, + 0x09, 0x31, 0x32, 0xdf, 0x15, 0xcb, 0x28, 0x0c, + 0x1b, 0xee, 0x53, 0xde, 0xba, 0xc8, 0xcc, 0x7c, + 0xc9, 0x50, 0x48, 0x44, 0x71, 0x83, 0x60, 0xa3, + 0xa0, 0xf5, 0xa8, 0xe6, 0xc5, 0xc8, 0x85, 0x43, + 0x3a, 0x15, 0x53, 0xdc, 0xd4, 0x17, 0xb1, 0xfd, + 0xf4, 0x0e, 0x5f, 0x08, 0xc1, 0xc6, 0xc8, 0xb8, + 0xec, 0x25, 0xf9, 0x18, 0x16, 0x23, 0xfc, 0xa2, + 0xab, 0x61, 0x7e, 0x46, 0x0e, 0x4e, 0x4f, 0xf5, + 0x1b, 0x46, 0x87, 0xc5, 0xea, 0x9a, 0x4f, 0x32, + 0x02, 0xb1, 0xb9, 0x17, 0xea, 0x3b, 0x55, 0x8c, + 0x1c, 0x9c, 0x75, 0x8e, 0x48, 0x32, 0x81, 0xf8, + 0xdf, 0x5b, 0x8d, 0x75, 0x14, 0x46, 0x79, 0x48, + 0xfb, 0x87, 0x0e, 0x3e, 0x43, 0x72, 0xf2, 0x7b, + 0x6f, 0xd7, 0x4e, 0xb5, 0xde, 0x3e, 0x36, 0x04, + 0xb8, 0x0f, 0x29, 0xdd, 0xf2, 0xc4, 0xb7, 0x6f, + 0x17, 0x3d, 0x05, 0x41, 0x95, 0x30, 0xcc, 0x78, + 0xf1, 0xf1, 0xd4, 0x88, 0xd3, 0x44, 0x1d, 0xc9, + 0xf3, 0x53, 0xcf, 0x0c, 0x98, 0x7c, 0x5f, 0xc6, + 0xea, 0x56, 0x49, 0xa4, 0xf7, 0x7d, 0x07, 0x4a, + 0x24, 0xb5, 0x11, 0x9d, 0xb6, 0xa0, 0x2c, 0x6f, + 0xa0, 0x15, 0xec, 0x91, 0xbc, 0x6c, 0x44, 0x8a, + 0x55, 0xbb, 0x82, 0x2d, 0x57, 0xf0, 0xed, 0x8b, + 0x85, 0x2e, 0x65, 0xaf, 0x23, 0x1f, 0x8e, 0x2f, + 0x42, 0x75, 0x26, 0x8c, 0xf7, 0x33, 0xe0, 0xe3, + 0x4f, 0x2e, 0xb2, 0xb1, 0x23, 0x77, 0x90, 0x28, + 0x17, 0xab, 0x32, 0xb0, 0x65, 0x24, 0x11, 0xd0, + 0x8d, 0x2a, 0x79, 0x33, 0xf2, 0x66, 0x83, 0xe1, + 0x91, 0xb7, 0x25, 0xfb, 0xf5, 0xfd, 0xb5, 0x3b, + 0xf1, 0x4e, 0x98, 0x67, 0x29, 0x65, 0x52, 0xa0, + 0x02, 0x40, 0x3a, 0xeb, 0xda, 0xa8, 0x74, 0xa2, + 0x0d, 0xe2, 0x6c, 0x2c, 0xac, 0x78, 0x1f, 0x21, + 0xf6, 0x3e, 0x36, 0x85, 0x7f, 0xcd, 0x50, 0x4c, + 0xf2, 0x66, 0x64, 0xb3, 0xa0, 0x3b, 0x46, 0x8b, + 0xde, 0xc3, 0xa5, 0x50, 0xef, 0xd2, 0xfd, 0xaa, + 0xff, 0x00, 0x1b, 0x91, 0x36, 0x3c, 0xbb, 0xe2, + 0x3d, 0x7e, 0xe1, 0x6b, 0x83, 0x52, 0x4f, 0x86, + 0x8f, 0x1a, 0x30, 0x9f, 0xa7, 0xc6, 0x04, 0x7b, + 0x14, 0x6e, 0x16, 0xee, 0x7b, 0xd6, 0xf3, 0x82, + 0x88, 0x22, 0x46, 0x2e, 0x37, 0x10, 0x58, 0xfa, + 0x0a, 0xc6, 0x71, 0xd3, 0x0c, 0xa2, 0xae, 0x63, + 0x2b, 0x2d, 0xfd, 0xc7, 0xb1, 0xad, 0xc4, 0x12, + 0xfe, 0x97, 0x11, 0xa6, 0x00, 0x96, 0xda, 0x15, + 0x17, 0xd6, 0xbb, 0x6b, 0x87, 0x97, 0xdd, 0xb7, + 0x95, 0x78, 0x63, 0x69, 0x79, 0x0f, 0x84, 0x1b, + 0xa8, 0x20, 0xb1, 0xb6, 0xba, 0x1b, 0x9f, 0xe1, + 0x4f, 0xe9, 0x37, 0x15, 0x03, 0xcb, 0x90, 0x32, + 0x18, 0xfd, 0xb7, 0xb8, 0x1a, 0x75, 0xe9, 0x4e, + 0xab, 0xb3, 0xcd, 0x15, 0x5b, 0x3a, 0x04, 0x9e, + 0x07, 0x56, 0x00, 0x90, 0x09, 0x52, 0x7b, 0x11, + 0x56, 0x6b, 0xc3, 0xd0, 0xd0, 0x66, 0xb1, 0xa3, + 0x2e, 0x65, 0xc7, 0xea, 0x26, 0x8c, 0xec, 0xf3, + 0x74, 0xf7, 0x2d, 0xeb, 0x23, 0xcb, 0xc2, 0xe8, + 0xe4, 0xa5, 0xd4, 0xfa, 0x1a, 0xd8, 0xef, 0x18, + 0xf9, 0x42, 0x4b, 0x6d, 0x31, 0x39, 0x27, 0xe8, + 0x4f, 0x4a, 0x51, 0xff, 0x00, 0x62, 0xc5, 0x89, + 0xa4, 0x67, 0x88, 0x86, 0x89, 0xfd, 0xe9, 0xf8, + 0xf5, 0x15, 0xcf, 0x65, 0x73, 0x0d, 0x7d, 0x2d, + 0x9f, 0x37, 0x9a, 0xfe, 0xf2, 0xc2, 0x47, 0x3a, + 0xe3, 0x4e, 0xe5, 0x94, 0xb2, 0x38, 0x21, 0xef, + 0xea, 0x6a, 0x2c, 0xbc, 0x98, 0xa4, 0x41, 0x8d, + 0x8c, 0xa5, 0x22, 0x06, 0xe6, 0xfd, 0xd8, 0xd5, + 0x8e, 0x43, 0x1c, 0xa4, 0x97, 0x20, 0x0a, 0x5a, + 0xcb, 0xae, 0x9a, 0x5b, 0xa5, 0x66, 0x98, 0x7b, + 0x75, 0x9c, 0xc4, 0x18, 0x41, 0x89, 0x36, 0x16, + 0x34, 0xf3, 0x48, 0xbe, 0xf2, 0xbb, 0x52, 0xda, + 0xf5, 0xaa, 0xfc, 0x62, 0x28, 0x79, 0x67, 0x93, + 0xa4, 0x2b, 0x7d, 0x7c, 0xd7, 0x31, 0x72, 0x39, + 0x50, 0x8d, 0xbb, 0xb7, 0x21, 0x16, 0xda, 0x75, + 0xfe, 0x35, 0xd6, 0x04, 0xb1, 0xb1, 0x9a, 0x19, + 0x58, 0x20, 0x98, 0x68, 0x4f, 0x4b, 0xd1, 0x74, + 0x8b, 0x3c, 0xb9, 0x18, 0x39, 0x2d, 0x29, 0xdc, + 0x05, 0x8a, 0x9f, 0x15, 0x16, 0x17, 0x1a, 0x99, + 0x71, 0x16, 0xf9, 0x82, 0x30, 0x04, 0xec, 0xf4, + 0x15, 0xd6, 0x5b, 0xc3, 0x06, 0x30, 0xc3, 0x81, + 0x84, 0x8c, 0x4e, 0xe7, 0x23, 0xbd, 0x18, 0x68, + 0xd8, 0xf8, 0x99, 0x39, 0x04, 0x59, 0x88, 0xd8, + 0x01, 0xd3, 0xad, 0x10, 0x5c, 0xc0, 0x02, 0x47, + 0x5b, 0x1b, 0x5e, 0xbc, 0x20, 0x8a, 0xbb, 0xc7, + 0x40, 0x8c, 0xcf, 0x3c, 0xa2, 0xe9, 0x02, 0xee, + 0x20, 0xf7, 0x35, 0x2e, 0x54, 0x91, 0x65, 0xe0, + 0xb6, 0x40, 0x8c, 0x46, 0xf1, 0xb8, 0x1a, 0x77, + 0x06, 0x88, 0xc4, 0x17, 0x2b, 0x32, 0x90, 0xca, + 0x6c, 0xc3, 0xa1, 0xab, 0x87, 0x95, 0xc8, 0x7c, + 0x76, 0x82, 0x60, 0x24, 0x0d, 0xa6, 0xe3, 0xd4, + 0x57, 0x11, 0xf1, 0xb9, 0x72, 0x42, 0x67, 0x44, + 0xbc, 0x43, 0x5d, 0xdf, 0x4a, 0xaa, 0x47, 0xf1, + 0xa2, 0x0c, 0xf1, 0x52, 0x2c, 0xbc, 0x0f, 0xd3, + 0x99, 0x56, 0x37, 0x8d, 0xf7, 0x0b, 0xf7, 0x1d, + 0xea, 0x2e, 0x46, 0x58, 0xdd, 0xd3, 0x1e, 0x1d, + 0x52, 0x05, 0xda, 0x08, 0xee, 0x6a, 0x90, 0x24, + 0x74, 0xa9, 0x71, 0xb2, 0x0e, 0x34, 0xc2, 0x45, + 0x50, 0xc7, 0xb8, 0x34, 0x16, 0xe5, 0x26, 0x0e, + 0x26, 0x38, 0xb5, 0xdf, 0x3b, 0x96, 0x23, 0xfd, + 0x22, 0x8c, 0x28, 0xa0, 0x83, 0x15, 0xb3, 0x72, + 0x10, 0x38, 0xdd, 0xb6, 0x25, 0xf2, 0x7b, 0xd7, + 0xb9, 0xd9, 0xf8, 0x99, 0x98, 0xe3, 0xd8, 0x52, + 0x64, 0xd1, 0x40, 0xe9, 0x6a, 0xed, 0xe0, 0x97, + 0x2b, 0x03, 0x11, 0x60, 0x1b, 0x95, 0x4b, 0x07, + 0xf4, 0x27, 0xb9, 0xa2, 0x51, 0x72, 0x30, 0xc4, + 0x4c, 0x33, 0xc0, 0xa5, 0x04, 0xeb, 0x7d, 0x9e, + 0xa0, 0xd4, 0xf8, 0xbc, 0x7c, 0xe9, 0x66, 0x92, + 0x22, 0xa3, 0xc9, 0xef, 0x51, 0xf2, 0x2c, 0xbf, + 0x2c, 0x50, 0x21, 0xd2, 0x05, 0x0b, 0x71, 0xfe, + 0x6e, 0xb4, 0xff, 0x00, 0x18, 0x4c, 0xf8, 0x30, + 0x24, 0xa4, 0x3b, 0x48, 0x49, 0xd7, 0xae, 0xda, + 0xb4, 0x29, 0xb2, 0xd1, 0x11, 0x26, 0x7c, 0x0e, + 0x2e, 0x83, 0x4e, 0xbd, 0xaf, 0x5a, 0xec, 0xc5, + 0x48, 0x38, 0xf8, 0xd4, 0xe8, 0xec, 0x77, 0x6a, + 0x75, 0xa5, 0xdc, 0x0f, 0x1e, 0xa5, 0x50, 0xb0, + 0x16, 0x3d, 0xaa, 0xde, 0x72, 0x7e, 0xab, 0x38, + 0xc6, 0x3d, 0xc4, 0x15, 0x45, 0xb7, 0x65, 0x07, + 0x5a, 0xd1, 0x48, 0xe1, 0xe2, 0x76, 0xaf, 0xf5, + 0x65, 0xfe, 0x17, 0x58, 0x5c, 0xdc, 0x10, 0x5b, + 0xdb, 0x6d, 0x6d, 0xa5, 0x31, 0xa8, 0x71, 0xb1, + 0xd3, 0x1e, 0x21, 0x12, 0x74, 0x15, 0x35, 0x5d, + 0x98, 0x51, 0x45, 0x14, 0x0a, 0x39, 0x9c, 0x60, + 0xb1, 0x1c, 0x85, 0x6b, 0x6a, 0x03, 0x0e, 0xda, + 0xf7, 0xaa, 0x2b, 0x8e, 0xb9, 0x58, 0x6c, 0x8d, + 0xf7, 0xc1, 0xef, 0x20, 0x01, 0xaa, 0x9e, 0xb5, + 0xa0, 0xc9, 0x88, 0x4d, 0x03, 0xc4, 0x40, 0x3b, + 0x81, 0x16, 0x35, 0x9f, 0xc6, 0x33, 0x71, 0xb3, + 0x15, 0x74, 0xb0, 0xbf, 0xbc, 0x1e, 0xe0, 0xff, + 0x00, 0x2a, 0x4c, 0x65, 0x35, 0xb4, 0xd6, 0x62, + 0xd1, 0xe9, 0x95, 0xe5, 0x61, 0x12, 0xa4, 0xca, + 0xc8, 0x00, 0x41, 0x74, 0x21, 0x7c, 0x56, 0x64, + 0x71, 0x99, 0x33, 0x82, 0x62, 0x00, 0xd8, 0xdb, + 0xc5, 0xfc, 0xd7, 0xd0, 0x79, 0x6c, 0x68, 0xce, + 0x3c, 0x92, 0xc3, 0x7d, 0xb3, 0x1f, 0x6f, 0xa0, + 0xee, 0x3f, 0x0a, 0xca, 0x26, 0x3b, 0x43, 0x2c, + 0x92, 0x0d, 0xc1, 0x63, 0x53, 0xaf, 0x6b, 0xd6, + 0x5b, 0xd7, 0x0f, 0x77, 0xab, 0xba, 0x2f, 0x58, + 0x98, 0xf6, 0xcc, 0xc8, 0x8c, 0x8e, 0xca, 0x7a, + 0x83, 0x63, 0x51, 0x90, 0x45, 0xaa, 0xfc, 0x58, + 0xcd, 0x93, 0x92, 0x55, 0x89, 0x0a, 0x49, 0x67, + 0x3e, 0x9d, 0x6b, 0xb9, 0xf1, 0xf0, 0xe5, 0xc7, + 0x91, 0xb1, 0xae, 0xad, 0x09, 0xb1, 0xbf, 0x7a, + 0xa3, 0x5e, 0x0b, 0x51, 0x8a, 0xb0, 0x61, 0xd4, + 0x1b, 0xd3, 0x13, 0xcb, 0x24, 0xf8, 0xe6, 0x1c, + 0x98, 0x81, 0xef, 0x75, 0xd2, 0xe6, 0x97, 0x88, + 0xe4, 0x6d, 0x55, 0x49, 0x15, 0xc1, 0x3f, 0xdd, + 0x45, 0x70, 0x61, 0x83, 0x1b, 0xcd, 0x85, 0x91, + 0x04, 0x22, 0xf2, 0x31, 0x04, 0x2f, 0x72, 0x2b, + 0xcc, 0xc5, 0xfd, 0x2e, 0x0c, 0x78, 0x84, 0xde, + 0x46, 0x3b, 0xe4, 0x03, 0xb7, 0x81, 0x54, 0xa3, + 0x92, 0x48, 0x9b, 0x74, 0x6c, 0x51, 0xbc, 0x8a, + 0xf5, 0x25, 0x1f, 0x30, 0x92, 0x6b, 0xb8, 0x06, + 0xec, 0x0d, 0x05, 0xfc, 0x29, 0x9e, 0x1e, 0x37, + 0x22, 0x42, 0xc7, 0x6b, 0x5a, 0x34, 0x5b, 0xe9, + 0x73, 0x55, 0xb0, 0x31, 0x52, 0x72, 0xd2, 0x4c, + 0x76, 0xc3, 0x10, 0xbb, 0x9f, 0xe5, 0x57, 0x32, + 0x24, 0xc0, 0xc8, 0xc1, 0xd9, 0x03, 0x7c, 0x3b, + 0x09, 0x60, 0x9e, 0x6a, 0x18, 0xf7, 0x0e, 0x21, + 0xf6, 0x0b, 0xef, 0x90, 0x5e, 0xdf, 0xce, 0x89, + 0x71, 0x9f, 0x8d, 0x8e, 0x21, 0x8f, 0x27, 0x14, + 0x9f, 0x8d, 0xce, 0xdb, 0x1e, 0xa2, 0xa9, 0xed, + 0x70, 0x2f, 0xb4, 0xdb, 0xcd, 0xaa, 0xfe, 0x62, + 0xfc, 0x3c, 0x7e, 0x3c, 0x07, 0xef, 0x62, 0x64, + 0x6f, 0xc6, 0xa7, 0x5c, 0xa6, 0x6e, 0x1a, 0x43, + 0x22, 0x2f, 0x50, 0x88, 0x7b, 0xd1, 0x13, 0x04, + 0xe0, 0xff, 0x00, 0x8d, 0x58, 0x83, 0x2b, 0x22, + 0x15, 0x29, 0x13, 0x94, 0x56, 0xd4, 0x81, 0x5e, + 0xe1, 0x60, 0xc9, 0x96, 0xe4, 0x03, 0xb5, 0x53, + 0xee, 0x7a, 0x9a, 0x6e, 0x39, 0xf1, 0xe4, 0x0a, + 0x4d, 0xd5, 0xb5, 0x0c, 0x2a, 0x55, 0xc2, 0x7e, + 0x2d, 0x20, 0x33, 0x13, 0x93, 0xb8, 0xab, 0x69, + 0x70, 0x2f, 0xad, 0x6c, 0xf1, 0x70, 0xe3, 0x90, + 0xc5, 0x24, 0x4d, 0x74, 0x50, 0x14, 0x2d, 0xb5, + 0xac, 0xe7, 0x13, 0x82, 0xcd, 0x6b, 0x86, 0xd7, + 0x4d, 0x6b, 0x77, 0xc1, 0xf1, 0xa7, 0x72, 0x0b, + 0x30, 0x1d, 0x49, 0xed, 0x61, 0x5d, 0x29, 0x5c, + 0xcb, 0x1f, 0x67, 0x74, 0x44, 0x49, 0xc6, 0x38, + 0x8f, 0x13, 0x0f, 0xe4, 0x27, 0xdc, 0x16, 0xca, + 0x3a, 0x1d, 0x6a, 0x0e, 0x1c, 0x09, 0x72, 0xde, + 0x62, 0x09, 0xb0, 0xd1, 0x89, 0xef, 0x7a, 0xaf, + 0xc8, 0x48, 0xaf, 0x3b, 0x2c, 0x69, 0xb9, 0x81, + 0xd8, 0x87, 0xb0, 0xfe, 0x9e, 0x94, 0xef, 0x0b, + 0x18, 0x63, 0x40, 0xb1, 0xf5, 0x60, 0x3d, 0xc7, + 0xc9, 0xad, 0x11, 0x18, 0x78, 0xf6, 0xb6, 0x67, + 0x2b, 0x14, 0x51, 0x45, 0x10, 0x28, 0xa2, 0x8a, + 0x02, 0x97, 0x73, 0x10, 0x07, 0xc7, 0xf9, 0x15, + 0x77, 0x48, 0x9f, 0x6d, 0x31, 0xae, 0x5d, 0x03, + 0xa1, 0x53, 0xd0, 0xd0, 0x67, 0x70, 0xe2, 0x49, + 0x90, 0xe2, 0xca, 0xc0, 0x96, 0xd4, 0x1b, 0xf4, + 0x7b, 0x7f, 0x03, 0x49, 0xf9, 0x6c, 0x18, 0xd5, + 0x24, 0x82, 0x44, 0xf8, 0xdb, 0xa3, 0x11, 0xe9, + 0x4f, 0xb3, 0xf8, 0xe9, 0x71, 0xaf, 0x36, 0x3b, + 0x7b, 0x06, 0xbe, 0xaa, 0x7e, 0xb7, 0xae, 0x26, + 0x68, 0x39, 0x3c, 0x72, 0x1c, 0x08, 0xf2, 0xd0, + 0x5b, 0x71, 0xd4, 0x1f, 0xa9, 0xaa, 0x5e, 0x9f, + 0x50, 0xd1, 0xd6, 0xdf, 0x3a, 0xed, 0xff, 0x00, + 0x99, 0x7c, 0xe9, 0x71, 0x8c, 0x69, 0x94, 0x15, + 0x46, 0xf0, 0xb6, 0x52, 0x35, 0xd2, 0xa8, 0x7c, + 0x7f, 0xa7, 0xe3, 0xa4, 0x67, 0x1b, 0x5e, 0x73, + 0x65, 0x07, 0xc0, 0xad, 0x57, 0x21, 0xc7, 0xcd, + 0x8f, 0x21, 0x64, 0x50, 0xae, 0xba, 0x10, 0x47, + 0xf1, 0xac, 0xe7, 0x20, 0x92, 0xcf, 0x28, 0xf9, + 0x98, 0x05, 0xe9, 0x61, 0xa0, 0x15, 0x9a, 0xd5, + 0x98, 0x7b, 0x9a, 0xb6, 0xc5, 0xa2, 0x11, 0x71, + 0x19, 0x12, 0x45, 0x1c, 0xc0, 0xd8, 0x47, 0x1a, + 0x96, 0xd4, 0x77, 0xa5, 0xd0, 0xc0, 0xf9, 0x53, + 0xec, 0x4f, 0xea, 0x24, 0x9f, 0xa5, 0x3a, 0x6c, + 0x28, 0xd7, 0x06, 0x58, 0xf1, 0x65, 0x0e, 0xcf, + 0x62, 0x6f, 0xe0, 0x55, 0x0c, 0x2f, 0xc9, 0xc5, + 0xc9, 0x9a, 0xd6, 0x6b, 0x05, 0x5f, 0x4a, 0xab, + 0xb6, 0x10, 0xe5, 0xf1, 0xdf, 0x04, 0x5f, 0x2a, + 0x38, 0x91, 0x2f, 0x66, 0x23, 0xcd, 0x52, 0xb8, + 0xf3, 0xf8, 0x53, 0x15, 0x1b, 0x38, 0x99, 0x19, + 0x8d, 0x8c, 0x8f, 0xed, 0x1f, 0x4a, 0x93, 0x8f, + 0x5c, 0x29, 0x31, 0x65, 0xf9, 0x62, 0xf7, 0xc4, + 0x85, 0x8b, 0xff, 0x00, 0x0a, 0x94, 0x60, 0xaa, + 0xe3, 0xe9, 0x7a, 0xb3, 0x87, 0x9f, 0x36, 0x2d, + 0xc2, 0x58, 0xa9, 0xea, 0x0f, 0x4a, 0x85, 0x22, + 0x79, 0x5c, 0x22, 0x0b, 0xb3, 0x1d, 0x05, 0x49, + 0x91, 0x89, 0x3e, 0x39, 0x02, 0x54, 0xdb, 0xbb, + 0xa5, 0x0c, 0x3a, 0x12, 0x0c, 0xcc, 0xa0, 0xd9, + 0x32, 0x6c, 0x0d, 0xa6, 0xee, 0xc2, 0xaf, 0xf2, + 0x18, 0x9b, 0x38, 0xf8, 0x96, 0x16, 0x12, 0x43, + 0x1d, 0xd9, 0xdc, 0x1e, 0xac, 0x7a, 0x69, 0x4a, + 0x42, 0x9e, 0xc6, 0xac, 0x46, 0xb2, 0x15, 0xdb, + 0xbb, 0x43, 0xd4, 0x7d, 0x28, 0xac, 0xf0, 0xb6, + 0xa8, 0x63, 0xe2, 0x63, 0x0b, 0xa3, 0x64, 0x39, + 0xb9, 0x1e, 0x05, 0x34, 0x18, 0x44, 0xe3, 0x62, + 0x23, 0x0d, 0xcd, 0x6d, 0xcd, 0xae, 0xb6, 0x3d, + 0x2b, 0xce, 0x2a, 0x28, 0xcc, 0x2b, 0x04, 0xf1, + 0x89, 0x02, 0x35, 0xd2, 0xd5, 0xa6, 0xe3, 0xf8, + 0xe6, 0xc8, 0x98, 0x35, 0x80, 0x36, 0xd1, 0x6d, + 0xd8, 0x74, 0xab, 0xd6, 0xb9, 0x66, 0xdf, 0xba, + 0x2b, 0x0b, 0x1c, 0x5f, 0x17, 0x01, 0x81, 0x1a, + 0x38, 0xac, 0xe4, 0x80, 0x2e, 0x69, 0xe3, 0x64, + 0x2e, 0x10, 0xfd, 0x3c, 0x6a, 0x37, 0xb0, 0xf7, + 0xb5, 0xfa, 0x7a, 0x0a, 0x94, 0x44, 0x98, 0x18, + 0x9b, 0x98, 0x2f, 0xcb, 0x6f, 0xcb, 0x51, 0xe4, + 0xd5, 0x3e, 0x33, 0x19, 0x32, 0x27, 0x06, 0x42, + 0xc5, 0x80, 0xdc, 0xe7, 0xb9, 0x3e, 0x0d, 0x68, + 0xad, 0x70, 0xf1, 0xf7, 0xed, 0x9b, 0xcf, 0xfc, + 0x4d, 0x81, 0x82, 0xf3, 0xc9, 0xfa, 0x87, 0xba, + 0xa6, 0xeb, 0x80, 0x7b, 0xfa, 0x8a, 0x74, 0x28, + 0x00, 0x00, 0x00, 0xd0, 0x0e, 0x95, 0xed, 0x59, + 0xc4, 0x51, 0x45, 0x14, 0x05, 0x14, 0x51, 0x40, + 0x51, 0x45, 0x14, 0x1e, 0x10, 0x08, 0xb1, 0xd4, + 0x1a, 0x43, 0xcb, 0xe1, 0x1c, 0x6f, 0xcf, 0x85, + 0x7f, 0x2c, 0xe8, 0xe0, 0x0e, 0xc7, 0xb5, 0x3f, + 0xae, 0x24, 0x8d, 0x64, 0x42, 0x8c, 0x2e, 0x18, + 0x58, 0xd0, 0x25, 0x68, 0xb1, 0x79, 0x2c, 0x74, + 0x46, 0x61, 0x1e, 0x48, 0x16, 0x56, 0x36, 0x37, + 0xb7, 0x63, 0x59, 0xae, 0x5b, 0x84, 0x92, 0x27, + 0x64, 0x65, 0x23, 0xf0, 0xd3, 0xeb, 0x7a, 0xd1, + 0xe4, 0x60, 0x4b, 0x8c, 0xcc, 0xea, 0x3f, 0x29, + 0x41, 0x6b, 0xaf, 0x5d, 0x3a, 0x54, 0x71, 0x72, + 0x4f, 0x2a, 0x14, 0xca, 0x41, 0x3c, 0x1a, 0x82, + 0x06, 0x8e, 0xb6, 0xaa, 0xda, 0x91, 0x67, 0x7d, + 0x1d, 0x9b, 0x6a, 0x9f, 0xda, 0xfe, 0x3e, 0x77, + 0x93, 0xc7, 0xcb, 0x1d, 0xc8, 0x24, 0x5b, 0xad, + 0x87, 0x6a, 0xa7, 0x8e, 0x7f, 0x4d, 0xbd, 0x65, + 0x8c, 0xc9, 0x1c, 0x82, 0xce, 0x0e, 0x95, 0xf4, + 0x89, 0xb8, 0x4c, 0x6c, 0xe8, 0xcc, 0xd8, 0x2d, + 0xbe, 0xfd, 0x63, 0x6d, 0x18, 0x1f, 0xe7, 0x59, + 0xfc, 0xef, 0xfa, 0xf4, 0xb1, 0x12, 0xaf, 0x1b, + 0x29, 0x3e, 0x74, 0xac, 0xf6, 0xd5, 0x30, 0xf5, + 0xb4, 0xf7, 0x69, 0x68, 0xf2, 0xc8, 0xe5, 0x39, + 0xcb, 0x74, 0x82, 0x24, 0xf8, 0xa2, 0x4d, 0x11, + 0x4d, 0x58, 0x97, 0x06, 0x6c, 0x3e, 0x31, 0xd3, + 0x6d, 0xda, 0x56, 0xf7, 0x15, 0xd7, 0xda, 0x35, + 0xab, 0xf2, 0xf0, 0x8c, 0xa6, 0xd6, 0x23, 0xc1, + 0xd2, 0xf5, 0xea, 0xe2, 0x65, 0xa4, 0x65, 0x09, + 0x2c, 0x84, 0x5b, 0x69, 0xf5, 0xaa, 0xfc, 0xcb, + 0x4c, 0x6e, 0xac, 0xfb, 0x28, 0xc1, 0x5f, 0x83, + 0x0e, 0x7c, 0xa0, 0x3f, 0x33, 0x48, 0xd3, 0xf1, + 0xeb, 0x6a, 0xed, 0xd6, 0x69, 0x38, 0xb5, 0x69, + 0x6e, 0xcd, 0xf2, 0x59, 0x58, 0xf5, 0xb5, 0x39, + 0xc3, 0xe2, 0xd1, 0xe0, 0x7c, 0x69, 0xae, 0xa0, + 0xb6, 0xe5, 0x6a, 0xb2, 0xfc, 0x4f, 0xcc, 0x63, + 0x86, 0x15, 0x63, 0x1c, 0x5a, 0x0b, 0x77, 0x3e, + 0x69, 0x15, 0x94, 0x5b, 0x75, 0x60, 0x97, 0x1b, + 0x85, 0x82, 0x5c, 0x53, 0x90, 0x24, 0x3b, 0x94, + 0x5d, 0x96, 0xd5, 0x6b, 0x0b, 0x88, 0x77, 0x75, + 0xd0, 0xeb, 0xe9, 0x5a, 0x7c, 0x2e, 0x09, 0xd7, + 0x17, 0xe3, 0x08, 0xc5, 0xe5, 0x22, 0xe3, 0xae, + 0x82, 0x9e, 0xf1, 0xfc, 0x24, 0x78, 0xea, 0x65, + 0xc8, 0xfc, 0xbd, 0x3b, 0x91, 0x71, 0x6a, 0xe9, + 0x5d, 0x72, 0xc5, 0xbf, 0xb9, 0x58, 0x8f, 0x24, + 0x9c, 0x5f, 0x0a, 0xec, 0x47, 0xb4, 0x96, 0xec, + 0x2d, 0x5a, 0x15, 0x18, 0xdc, 0x54, 0x5b, 0xdc, + 0x87, 0x98, 0xe8, 0x2d, 0xd0, 0x54, 0x79, 0x99, + 0xaa, 0xad, 0xfa, 0x7c, 0x33, 0xb7, 0x68, 0x0d, + 0x23, 0x77, 0x37, 0xe8, 0x2f, 0x5d, 0x62, 0x71, + 0x72, 0x64, 0x01, 0x2e, 0x49, 0x2a, 0xa7, 0x50, + 0xbd, 0x0d, 0x76, 0xad, 0x70, 0xf3, 0x36, 0xee, + 0xb5, 0xe7, 0xf2, 0x10, 0x6c, 0xcb, 0xe4, 0xa7, + 0x2a, 0x1b, 0x45, 0x3b, 0x8b, 0x1e, 0x83, 0xfd, + 0x34, 0xeb, 0x17, 0x11, 0x31, 0x92, 0xcb, 0xab, + 0x1f, 0xb9, 0xbc, 0x9a, 0xee, 0x0c, 0x68, 0x60, + 0x5b, 0x44, 0xbb, 0x7c, 0x9e, 0xf5, 0x2d, 0x59, + 0xc8, 0x51, 0x45, 0x14, 0x05, 0x14, 0x51, 0x40, + 0x51, 0x45, 0x14, 0x05, 0x14, 0x51, 0x40, 0x51, + 0x45, 0x14, 0x1e, 0x10, 0x0e, 0x87, 0x5a, 0xaf, + 0x91, 0x81, 0x8d, 0x3d, 0xcb, 0x25, 0x9c, 0xff, + 0x00, 0x5a, 0xe8, 0x6a, 0xcd, 0x14, 0x19, 0xd9, + 0xb0, 0xb3, 0x30, 0x67, 0x0e, 0x97, 0x68, 0xb5, + 0xb3, 0xa8, 0xd4, 0x77, 0xd6, 0xb9, 0x6c, 0xec, + 0x90, 0x9f, 0x9e, 0x09, 0x7f, 0xbb, 0x63, 0x81, + 0x62, 0x3d, 0x2b, 0x47, 0x6a, 0x8e, 0x6c, 0x78, + 0x66, 0x52, 0xb2, 0x20, 0x61, 0xeb, 0x40, 0x93, + 0x6f, 0x0d, 0x3a, 0xde, 0x68, 0x7e, 0x36, 0xee, + 0x54, 0xd8, 0x51, 0x2f, 0x17, 0xc3, 0x6d, 0x2c, + 0xa5, 0xcd, 0xbb, 0x0d, 0x7a, 0xd5, 0xc6, 0xe0, + 0x60, 0x3a, 0x09, 0x19, 0x56, 0xf7, 0x20, 0x5b, + 0x5f, 0x4a, 0x8c, 0xf0, 0x2e, 0x5c, 0xb7, 0xea, + 0x5b, 0x69, 0xb5, 0x94, 0x2e, 0x80, 0x0e, 0xdd, + 0x6a, 0x31, 0x1f, 0x8b, 0xc6, 0xdb, 0xc7, 0x8b, + 0x4a, 0x8a, 0x62, 0x70, 0xe0, 0x82, 0xc1, 0xc0, + 0x22, 0xed, 0xa8, 0x16, 0xb1, 0xef, 0x56, 0xd1, + 0x78, 0x5c, 0x78, 0xfe, 0x48, 0xd7, 0x78, 0xd4, + 0xa9, 0x62, 0x6d, 0xa5, 0x4a, 0x38, 0x08, 0x2d, + 0x66, 0x72, 0x75, 0x3a, 0x81, 0x63, 0xaf, 0xad, + 0xea, 0x55, 0xe1, 0xb1, 0xbd, 0xa1, 0xcb, 0x32, + 0xa0, 0xb2, 0xad, 0xec, 0x3f, 0x1b, 0x53, 0x11, + 0xf8, 0x4e, 0xcb, 0xcf, 0x9b, 0x4a, 0x8c, 0x99, + 0xb3, 0x2d, 0x99, 0x3d, 0x9a, 0x68, 0xab, 0xd2, + 0xe7, 0xa5, 0xea, 0x0d, 0xd9, 0x79, 0xee, 0x07, + 0xb8, 0xb7, 0x91, 0xf6, 0xf8, 0x23, 0x5a, 0xd0, + 0x0c, 0x5c, 0x75, 0x5d, 0xa1, 0x05, 0xbf, 0xba, + 0xbb, 0x48, 0xd1, 0x05, 0x95, 0x40, 0xb7, 0x8a, + 0x95, 0x0b, 0xf0, 0xf8, 0x85, 0x8d, 0x84, 0xb2, + 0x7d, 0xfa, 0x12, 0x3b, 0x5c, 0x53, 0x2a, 0xf6, + 0x8a, 0x02, 0x8a, 0x28, 0xa0, 0x28, 0xa2, 0x8a, + 0x02, 0x8a, 0x28, 0xa0, 0x28, 0xa2, 0x8a, 0x02, + 0x8a, 0x28, 0xa0, 0x28, 0xa2, 0x8a, 0x02, 0x8a, + 0x28, 0xa0, 0x28, 0xa2, 0x8a, 0x02, 0x8a, 0x28, + 0xa0, 0x28, 0xa2, 0x8a, 0x02, 0x8a, 0x28, 0xa0, + 0x28, 0xa2, 0x8a, 0x02, 0x8a, 0x28, 0xa0, 0x28, + 0xa2, 0x8a, 0x02, 0x8a, 0x28, 0xa0, 0xff, 0xd9, + +}; + +static const uint8_t data_images_c_c_c_connect_small_jpg[] = +{ + /* /images/c-c-c-connect-small.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2d, 0x73, 0x6d, + 0x61, 0x6c, 0x6c, 0x2e, 0x6a, 0x70, 0x67, 0x00, + + 0xff, 0xd8, 0xff, 0xe1, 0x00, 0x18, 0x45, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2a, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xff, + 0xe1, 0x03, 0x29, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, + 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, + 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, + 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, + 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, + 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, + 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, + 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x20, 0x35, 0x2e, 0x30, 0x2d, 0x63, 0x30, + 0x36, 0x30, 0x20, 0x36, 0x31, 0x2e, 0x31, 0x33, + 0x34, 0x37, 0x37, 0x37, 0x2c, 0x20, 0x32, 0x30, + 0x31, 0x30, 0x2f, 0x30, 0x32, 0x2f, 0x31, 0x32, + 0x2d, 0x31, 0x37, 0x3a, 0x33, 0x32, 0x3a, 0x30, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, + 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, + 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, + 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, + 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, + 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, + 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, + 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, + 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, + 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, + 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, + 0x20, 0x43, 0x53, 0x35, 0x20, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x73, 0x22, 0x20, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, + 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, + 0x30, 0x45, 0x46, 0x41, 0x33, 0x30, 0x31, 0x45, + 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, + 0x38, 0x44, 0x44, 0x43, 0x38, 0x35, 0x45, 0x30, + 0x32, 0x43, 0x35, 0x38, 0x32, 0x34, 0x41, 0x31, + 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, + 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, + 0x64, 0x69, 0x64, 0x3a, 0x30, 0x45, 0x46, 0x41, + 0x33, 0x30, 0x31, 0x46, 0x32, 0x36, 0x44, 0x44, + 0x31, 0x31, 0x45, 0x33, 0x38, 0x44, 0x44, 0x43, + 0x38, 0x35, 0x45, 0x30, 0x32, 0x43, 0x35, 0x38, + 0x32, 0x34, 0x41, 0x31, 0x22, 0x3e, 0x20, 0x3c, + 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, + 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, + 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, + 0x69, 0x69, 0x64, 0x3a, 0x30, 0x45, 0x46, 0x41, + 0x33, 0x30, 0x31, 0x43, 0x32, 0x36, 0x44, 0x44, + 0x31, 0x31, 0x45, 0x33, 0x38, 0x44, 0x44, 0x43, + 0x38, 0x35, 0x45, 0x30, 0x32, 0x43, 0x35, 0x38, + 0x32, 0x34, 0x41, 0x31, 0x22, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, + 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, + 0x30, 0x45, 0x46, 0x41, 0x33, 0x30, 0x31, 0x44, + 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, + 0x38, 0x44, 0x44, 0x43, 0x38, 0x35, 0x45, 0x30, + 0x32, 0x43, 0x35, 0x38, 0x32, 0x34, 0x41, 0x31, + 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, + 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, + 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, + 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, + 0x3f, 0x3e, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, + 0x6f, 0x62, 0x65, 0x00, 0x64, 0xc0, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x0c, + 0x08, 0x08, 0x08, 0x09, 0x08, 0x0c, 0x09, 0x09, + 0x0c, 0x11, 0x0b, 0x0a, 0x0b, 0x11, 0x15, 0x0f, + 0x0c, 0x0c, 0x0f, 0x15, 0x18, 0x13, 0x13, 0x15, + 0x13, 0x13, 0x18, 0x17, 0x12, 0x14, 0x14, 0x14, + 0x14, 0x12, 0x17, 0x17, 0x1b, 0x1c, 0x1e, 0x1c, + 0x1b, 0x17, 0x24, 0x24, 0x27, 0x27, 0x24, 0x24, + 0x35, 0x33, 0x33, 0x33, 0x35, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x01, + 0x0d, 0x0b, 0x0b, 0x0d, 0x0e, 0x0d, 0x10, 0x0e, + 0x0e, 0x10, 0x14, 0x0e, 0x0f, 0x0e, 0x14, 0x14, + 0x10, 0x11, 0x11, 0x10, 0x14, 0x1d, 0x14, 0x14, + 0x15, 0x14, 0x14, 0x1d, 0x25, 0x1a, 0x17, 0x17, + 0x17, 0x17, 0x1a, 0x25, 0x20, 0x23, 0x1e, 0x1e, + 0x1e, 0x23, 0x20, 0x28, 0x28, 0x25, 0x25, 0x28, + 0x28, 0x32, 0x32, 0x30, 0x32, 0x32, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xdf, 0x00, + 0xb5, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, + 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x8e, 0x00, + 0x00, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x03, 0x04, 0x06, 0x01, 0x02, 0x07, + 0x01, 0x01, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x10, + 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x04, + 0x04, 0x04, 0x06, 0x01, 0x05, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x21, 0x12, + 0x05, 0x31, 0x41, 0x51, 0x61, 0x22, 0x13, 0x71, + 0x32, 0x14, 0x06, 0x81, 0x91, 0x42, 0x23, 0xa1, + 0xb1, 0xc1, 0x15, 0xf0, 0xd1, 0x62, 0x72, 0x33, + 0x24, 0x52, 0xe1, 0xb2, 0xc2, 0x43, 0x34, 0x07, + 0x11, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, + 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x11, 0x02, 0x21, 0x03, 0x31, + 0x12, 0x41, 0x04, 0x51, 0x61, 0x71, 0x22, 0x13, + 0x32, 0x72, 0x14, 0xff, 0xda, 0x00, 0x0c, 0x03, + 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, + 0x00, 0xfa, 0xad, 0x14, 0x51, 0x40, 0x14, 0x51, + 0x45, 0x00, 0x51, 0x45, 0x57, 0xcc, 0xca, 0x5c, + 0x68, 0x77, 0x9f, 0x98, 0xe8, 0xa3, 0xc6, 0x80, + 0x9e, 0xa1, 0x9f, 0x37, 0x1e, 0x0f, 0x9d, 0xc5, + 0xfc, 0x05, 0x25, 0xfe, 0xe3, 0x9f, 0x33, 0x6d, + 0x8c, 0xe8, 0xda, 0x32, 0x01, 0xfc, 0x74, 0xd6, + 0xa5, 0x1c, 0x44, 0xf3, 0x20, 0xf7, 0x3d, 0x22, + 0xf7, 0x3b, 0x8f, 0xa8, 0x8a, 0x03, 0x99, 0x3c, + 0xa6, 0x7c, 0x8c, 0xbf, 0x4e, 0xbb, 0x51, 0x8e, + 0x96, 0xd4, 0xdb, 0xf1, 0xa8, 0x1a, 0x4e, 0x42, + 0x62, 0x5a, 0x6d, 0xc1, 0x48, 0xb8, 0x06, 0xe0, + 0xdb, 0xca, 0xd4, 0xdf, 0x17, 0x1f, 0x1b, 0x0e, + 0x20, 0x8b, 0xea, 0xb1, 0x27, 0x73, 0x6a, 0x6f, + 0x52, 0x3e, 0x4c, 0x64, 0x74, 0x1f, 0x8e, 0xb4, + 0x02, 0x3c, 0x3c, 0x1c, 0xbc, 0x90, 0x77, 0x6e, + 0xdb, 0xf3, 0x00, 0xe4, 0xda, 0xf7, 0xb0, 0xd0, + 0xd4, 0xd2, 0xf1, 0x79, 0x31, 0x46, 0xac, 0x4d, + 0xf6, 0x8b, 0x10, 0xa0, 0x92, 0x49, 0x3e, 0x44, + 0x53, 0x13, 0x9a, 0x83, 0xa1, 0x02, 0x81, 0x9c, + 0xa4, 0xda, 0xe0, 0xf8, 0xd0, 0x98, 0x62, 0x58, + 0xfe, 0xa6, 0x17, 0xf7, 0x06, 0xe5, 0xf6, 0x8f, + 0x4e, 0x80, 0xdb, 0xc6, 0xaf, 0x2f, 0x39, 0x22, + 0x00, 0x24, 0x50, 0xc7, 0x5d, 0x7a, 0x5f, 0xca, + 0xaf, 0x7d, 0x44, 0x4f, 0x70, 0xc1, 0x58, 0x1d, + 0x2a, 0x39, 0x70, 0xb0, 0xa7, 0x4d, 0x85, 0x76, + 0xf7, 0xd2, 0x84, 0x12, 0xe3, 0xf2, 0x38, 0xf3, + 0x00, 0x09, 0xd8, 0xc4, 0x5f, 0x69, 0x3e, 0x3e, + 0x75, 0x64, 0x48, 0x8c, 0x6c, 0xac, 0x0f, 0xc0, + 0xd2, 0xb6, 0xe1, 0xdb, 0x4d, 0x8e, 0x36, 0x81, + 0x61, 0xe3, 0x6f, 0x88, 0xaa, 0x2e, 0x99, 0x5c, + 0x7c, 0xc1, 0xae, 0x45, 0xfb, 0x01, 0x71, 0x61, + 0xfc, 0x28, 0x0d, 0x25, 0x14, 0xbb, 0x0f, 0x96, + 0x8e, 0x76, 0x11, 0xba, 0x95, 0x6d, 0x3c, 0xc5, + 0x31, 0xa0, 0x0a, 0x28, 0xa2, 0x80, 0x28, 0xa2, + 0x8a, 0x00, 0xa2, 0x8a, 0x28, 0x02, 0x8a, 0x28, + 0xa0, 0x0a, 0x28, 0xa8, 0x32, 0xb2, 0x96, 0x08, + 0xcf, 0x43, 0x25, 0x89, 0x55, 0xef, 0x40, 0x54, + 0xcc, 0xe5, 0xbd, 0xa7, 0xf6, 0xa0, 0x01, 0xe4, + 0xbd, 0x8d, 0xfa, 0x0a, 0x58, 0xc9, 0x95, 0x9f, + 0x23, 0x17, 0x07, 0x78, 0x36, 0x0c, 0x09, 0x02, + 0xde, 0x42, 0xbd, 0x63, 0xc3, 0xf5, 0x39, 0x41, + 0xc0, 0xdd, 0xea, 0xdd, 0x2e, 0xba, 0x8b, 0xd3, + 0x99, 0x24, 0x8a, 0x11, 0x64, 0xb2, 0x81, 0xe5, + 0x40, 0x18, 0xf1, 0xc5, 0x8d, 0x12, 0x8b, 0x0d, + 0xf6, 0xf5, 0xb7, 0x9d, 0x41, 0x3e, 0x6a, 0xa8, + 0xd5, 0x85, 0x8d, 0x53, 0xcb, 0xe4, 0xd1, 0x49, + 0xf5, 0x0f, 0xca, 0xb3, 0xd9, 0xfc, 0xcd, 0x8b, + 0x0d, 0xc0, 0x81, 0xd2, 0xab, 0x6b, 0x1b, 0x6b, + 0xd2, 0xec, 0xc7, 0x79, 0x5c, 0xaa, 0xa0, 0xb5, + 0xc7, 0x9d, 0x2b, 0xc8, 0xe7, 0x95, 0x01, 0x5b, + 0x82, 0x4f, 0x85, 0x66, 0x72, 0x39, 0x66, 0x76, + 0x36, 0x7d, 0x3b, 0x52, 0xd9, 0xf9, 0x19, 0x84, + 0xbb, 0xee, 0x08, 0x6d, 0x3e, 0x17, 0xac, 0xdd, + 0xce, 0xb5, 0xeb, 0x42, 0xe0, 0xd4, 0x3f, 0xdc, + 0x2b, 0xb3, 0xd2, 0xc0, 0xdb, 0xad, 0x7a, 0x8b, + 0x9e, 0x52, 0x01, 0xdc, 0x3d, 0x5a, 0x5f, 0xc6, + 0xb1, 0x3f, 0x5b, 0x21, 0x95, 0xd1, 0x8f, 0xcd, + 0xd2, 0xe3, 0xc6, 0xb9, 0x0e, 0x6c, 0x80, 0xb2, + 0x1d, 0x08, 0xd4, 0x0f, 0x85, 0x5d, 0x16, 0x5a, + 0x17, 0x94, 0x6f, 0xa0, 0xfb, 0x81, 0x77, 0x2d, + 0xca, 0xf8, 0x1f, 0x2e, 0xd4, 0xdb, 0x1b, 0x99, + 0x46, 0xb6, 0xa3, 0x4f, 0x9a, 0xbe, 0x62, 0x99, + 0x72, 0x2b, 0x96, 0xdd, 0xa0, 0x1b, 0x85, 0xc7, + 0xf0, 0xa6, 0x18, 0xfc, 0xbb, 0x26, 0xd0, 0xcf, + 0x7b, 0xea, 0xde, 0x74, 0x4c, 0xca, 0xfe, 0xb4, + 0x2e, 0x0f, 0xac, 0x45, 0x92, 0x86, 0x30, 0xc1, + 0xb4, 0x35, 0x39, 0xf6, 0x72, 0x10, 0xa3, 0xd9, + 0x81, 0xff, 0x00, 0x1a, 0x56, 0x1f, 0x88, 0xe7, + 0x25, 0x9b, 0x19, 0x94, 0xb8, 0x0b, 0x18, 0xbe, + 0xbd, 0x6d, 0x4f, 0xb0, 0x79, 0x34, 0x7b, 0x1d, + 0xe0, 0xe9, 0xb8, 0xfc, 0x6a, 0xe7, 0x35, 0xf5, + 0xb4, 0xcf, 0x5c, 0x87, 0x1a, 0xf8, 0xc9, 0xee, + 0x44, 0xe7, 0xda, 0x1e, 0x27, 0x5f, 0xc6, 0xaf, + 0xf1, 0xdc, 0x80, 0x99, 0x44, 0x32, 0x9d, 0xb3, + 0x28, 0xea, 0x7f, 0x50, 0xf1, 0xa9, 0x37, 0x45, + 0x93, 0x0e, 0xc7, 0xf5, 0x29, 0xeb, 0x4a, 0xb2, + 0xf0, 0x24, 0xc7, 0x25, 0x94, 0x33, 0xa0, 0xf9, + 0x58, 0x76, 0x07, 0xe1, 0x43, 0x26, 0x68, 0x01, + 0x07, 0xa5, 0x76, 0x94, 0xf1, 0x19, 0xdb, 0x89, + 0xc7, 0x90, 0xd8, 0xdc, 0xfb, 0x77, 0xf2, 0xea, + 0x29, 0xb5, 0x00, 0x51, 0x45, 0x14, 0x01, 0x45, + 0x14, 0x50, 0x05, 0x14, 0x51, 0x40, 0x57, 0xcd, + 0xc8, 0x18, 0xf8, 0xcf, 0x2f, 0x71, 0xa0, 0x17, + 0xb6, 0xa6, 0x93, 0xe2, 0xe2, 0x4b, 0x99, 0x29, + 0x79, 0xb7, 0x6c, 0x6d, 0x5a, 0xff, 0x00, 0xd2, + 0xbb, 0xca, 0x4b, 0x24, 0xd9, 0x86, 0x25, 0x3b, + 0x82, 0xe8, 0xa9, 0xe6, 0x7b, 0xd3, 0x28, 0x54, + 0x62, 0x62, 0x2c, 0x64, 0xdd, 0xed, 0x76, 0x34, + 0x07, 0x1f, 0xd9, 0xc7, 0x1e, 0x81, 0x6e, 0xc4, + 0xf7, 0x34, 0xa3, 0x3f, 0x92, 0xda, 0x1a, 0xcd, + 0xf1, 0xd2, 0x8e, 0x53, 0x90, 0x09, 0x1b, 0x10, + 0xc4, 0x11, 0xf8, 0x56, 0x53, 0x91, 0xe4, 0x59, + 0xc9, 0x00, 0x9f, 0x13, 0xfe, 0x75, 0x5b, 0x3c, + 0x1d, 0x5a, 0x34, 0xcb, 0xca, 0x0e, 0x4b, 0x94, + 0x2d, 0x70, 0x1a, 0x91, 0xe4, 0x67, 0xbb, 0x5e, + 0xcc, 0x4d, 0xff, 0x00, 0xc5, 0xeb, 0xc6, 0x4c, + 0xe5, 0x87, 0xa8, 0x9e, 0xb6, 0xb9, 0xd2, 0xa9, + 0x48, 0xf6, 0x42, 0xcd, 0xdb, 0xad, 0x62, 0xe6, + 0x61, 0x9e, 0x8d, 0x35, 0xd6, 0xaa, 0x5e, 0x20, + 0x93, 0x7b, 0xb7, 0x4a, 0xf1, 0x22, 0x5d, 0x4a, + 0xb5, 0xcd, 0xfb, 0xd4, 0x31, 0x72, 0x58, 0xd6, + 0x2a, 0xd2, 0x6d, 0x6e, 0xda, 0x57, 0xb5, 0x74, + 0x91, 0xc1, 0x59, 0x03, 0xf9, 0x29, 0xf1, 0xad, + 0x55, 0x30, 0x66, 0xbd, 0xda, 0x76, 0x75, 0x7c, + 0x22, 0xbc, 0xa1, 0xb6, 0x90, 0x75, 0x78, 0xcd, + 0xaf, 0xe5, 0x41, 0x63, 0x64, 0x94, 0x75, 0xe8, + 0xd4, 0xd6, 0x3c, 0x2c, 0x39, 0x19, 0x15, 0x98, + 0xa4, 0x92, 0xfa, 0x5a, 0xfd, 0xaa, 0x33, 0xc2, + 0x4e, 0x21, 0x65, 0x42, 0x1f, 0x73, 0x6d, 0x4b, + 0x75, 0x24, 0x77, 0xa8, 0x1f, 0xbe, 0xad, 0xe1, + 0xa8, 0x2a, 0xdf, 0xf2, 0x1f, 0xc8, 0xd7, 0x94, + 0x24, 0xe8, 0x7a, 0xa9, 0xb5, 0xfc, 0x45, 0x58, + 0x97, 0x8d, 0xcc, 0x87, 0x76, 0xe4, 0x24, 0x27, + 0xa0, 0x91, 0xdc, 0xd5, 0x73, 0x1c, 0x8a, 0xe4, + 0xb2, 0x9b, 0x85, 0xf5, 0x7c, 0x69, 0x2b, 0xe5, + 0x17, 0xef, 0x56, 0xb9, 0x45, 0x94, 0xce, 0x95, + 0x65, 0xdb, 0xb8, 0xa8, 0x1a, 0x69, 0xe1, 0x5a, + 0x0c, 0x0e, 0x5c, 0xc5, 0xb5, 0x43, 0x5d, 0x98, + 0x6b, 0xda, 0xb2, 0xc5, 0x49, 0x65, 0x24, 0x58, + 0x81, 0x76, 0xfc, 0x2a, 0xce, 0x3c, 0xad, 0xbe, + 0xf7, 0xd4, 0x9e, 0x9e, 0x55, 0x1d, 0xdc, 0x4a, + 0x2a, 0xf5, 0x56, 0xc7, 0xd4, 0x38, 0xae, 0x5c, + 0xb2, 0x14, 0x2d, 0xd0, 0x75, 0x3f, 0xc8, 0xd3, + 0xbc, 0x5c, 0x91, 0x20, 0xb7, 0x50, 0x6b, 0xe7, + 0x1c, 0x6e, 0x73, 0x25, 0x89, 0x73, 0x73, 0xf3, + 0x5f, 0xa5, 0x6b, 0x38, 0xde, 0x47, 0x76, 0xd3, + 0x73, 0xea, 0xed, 0x57, 0x56, 0xac, 0x28, 0x38, + 0x77, 0x7a, 0xfd, 0x5b, 0x2f, 0x72, 0x18, 0x4d, + 0x04, 0xe9, 0x95, 0x05, 0x82, 0x02, 0x49, 0x1e, + 0x67, 0xc2, 0xde, 0x74, 0xc7, 0x0f, 0x32, 0x2c, + 0x98, 0xc3, 0x2b, 0x0d, 0xd6, 0xf5, 0x2f, 0x7f, + 0x8d, 0xab, 0xc6, 0xd4, 0xcb, 0x81, 0xa1, 0x7b, + 0xd9, 0x86, 0x87, 0xa1, 0x07, 0xc6, 0x94, 0x62, + 0x16, 0xc4, 0xcf, 0x54, 0x37, 0x66, 0x04, 0xab, + 0x5b, 0x5d, 0x07, 0xf4, 0xab, 0x1c, 0xa6, 0x8e, + 0x8a, 0xe0, 0x37, 0xd4, 0x57, 0x68, 0x02, 0x8a, + 0x28, 0xa0, 0x0a, 0xa7, 0xc8, 0x67, 0x0c, 0x64, + 0xda, 0xa2, 0xf2, 0xb8, 0xf4, 0x8f, 0xeb, 0x57, + 0x29, 0x17, 0x3b, 0x32, 0xfb, 0xc8, 0x8a, 0x40, + 0x75, 0xb1, 0x3e, 0x7e, 0x54, 0x01, 0xc5, 0xc3, + 0xef, 0x65, 0x36, 0x43, 0xea, 0x88, 0xa0, 0xfc, + 0x5c, 0xd4, 0xbc, 0x86, 0x56, 0xc4, 0x62, 0x6f, + 0xfe, 0x55, 0xea, 0x08, 0xfe, 0x9f, 0x08, 0x1f, + 0xd4, 0xfe, 0xa3, 0xdb, 0xe1, 0x48, 0xb9, 0x7c, + 0xcb, 0x5c, 0x0d, 0x1b, 0xe3, 0x7a, 0xab, 0x66, + 0xda, 0x75, 0xbb, 0x31, 0x37, 0x37, 0x9e, 0x77, + 0x90, 0xa4, 0xd9, 0x81, 0xe9, 0xe3, 0x59, 0xc7, + 0xca, 0x69, 0x57, 0xd2, 0xd6, 0x61, 0xdc, 0xd4, + 0x9c, 0xbe, 0x41, 0x32, 0x2b, 0x80, 0x40, 0x53, + 0x63, 0xaf, 0x8d, 0x2c, 0x8d, 0x8d, 0xe4, 0x56, + 0xec, 0x6f, 0x59, 0xd9, 0x4a, 0x3d, 0x3d, 0x3a, + 0xd5, 0x5a, 0x45, 0x89, 0x72, 0x1e, 0x46, 0x2a, + 0xda, 0x81, 0xa7, 0xc2, 0x95, 0x72, 0xb9, 0x1b, + 0x57, 0xd8, 0x4d, 0x6f, 0xf3, 0x1a, 0xb5, 0x95, + 0x38, 0xc7, 0x88, 0xb9, 0xd4, 0x9e, 0x82, 0x93, + 0xc6, 0xad, 0x93, 0x96, 0xaa, 0xed, 0xb7, 0xdc, + 0x60, 0x0b, 0x1e, 0xc0, 0xd5, 0x92, 0x76, 0x7d, + 0x99, 0x97, 0xbb, 0xbd, 0x56, 0xbd, 0x13, 0xcb, + 0x26, 0x9b, 0x86, 0xe4, 0xe1, 0x85, 0x67, 0x93, + 0x1a, 0x4f, 0x69, 0xc5, 0xd6, 0x4b, 0x5c, 0x11, + 0x54, 0xf5, 0x1d, 0x4d, 0x8f, 0xf1, 0xd3, 0xc6, + 0xb7, 0x70, 0x66, 0x2c, 0xf2, 0xae, 0x2c, 0x39, + 0x2d, 0xfd, 0xbb, 0x0c, 0x26, 0x2c, 0x11, 0xab, + 0x58, 0xcb, 0x2b, 0xe8, 0x5a, 0xa9, 0xe6, 0x7d, + 0x9d, 0x03, 0xe7, 0x4b, 0x1c, 0x53, 0x30, 0x63, + 0x25, 0xac, 0x3d, 0x56, 0xbf, 0x62, 0x7c, 0x4d, + 0x68, 0x79, 0x66, 0x5a, 0x2c, 0xcc, 0xb8, 0x7f, + 0xe3, 0x95, 0xd6, 0xde, 0x75, 0x6e, 0x1e, 0x7b, + 0x36, 0x22, 0xa6, 0xe2, 0xe0, 0xdc, 0x11, 0xa1, + 0xbf, 0xc6, 0xae, 0x9e, 0x0b, 0x0b, 0x1f, 0x3f, + 0x23, 0x8f, 0x9f, 0x21, 0x4c, 0x91, 0x39, 0x41, + 0x2a, 0xf4, 0xd0, 0x5e, 0xd6, 0xf8, 0xe9, 0x5e, + 0x23, 0xfb, 0x63, 0x22, 0x67, 0x3b, 0x26, 0x8d, + 0x61, 0x52, 0x13, 0xde, 0x73, 0x60, 0xce, 0x7b, + 0x2f, 0xc2, 0x98, 0xf2, 0x59, 0x36, 0xb8, 0x27, + 0xc5, 0xfb, 0xba, 0x48, 0xc0, 0x59, 0x56, 0xe8, + 0x1b, 0x75, 0x9b, 0xd4, 0x4b, 0x55, 0xf5, 0xfb, + 0x93, 0x8b, 0xc9, 0x64, 0x33, 0xc6, 0xaa, 0x77, + 0xef, 0x7b, 0x8e, 0xa3, 0xc2, 0xb3, 0x79, 0x3c, + 0x36, 0x7e, 0x3e, 0x7c, 0x98, 0x1e, 0xd9, 0x7c, + 0x88, 0xce, 0xaa, 0xba, 0xe9, 0xe3, 0x55, 0x67, + 0x82, 0x6c, 0x79, 0x0c, 0x53, 0xa3, 0x46, 0xe3, + 0x52, 0xac, 0x35, 0xaa, 0x3d, 0x69, 0xf0, 0x89, + 0x5b, 0x2c, 0x6d, 0x55, 0xb8, 0x6c, 0xc7, 0x76, + 0x0e, 0x11, 0xa5, 0x7b, 0xaa, 0xa9, 0xd0, 0x25, + 0x49, 0xfd, 0xab, 0x1c, 0x89, 0x65, 0x81, 0xc3, + 0x15, 0x70, 0x91, 0xa7, 0x72, 0x2b, 0x06, 0x18, + 0x8e, 0x84, 0x8b, 0xfe, 0x74, 0xc3, 0x8c, 0xfe, + 0xef, 0x93, 0x30, 0x8b, 0x12, 0x47, 0x02, 0xe3, + 0x71, 0xb9, 0xdb, 0xf8, 0xd5, 0x5e, 0x94, 0xf8, + 0x6d, 0x17, 0x5e, 0xc5, 0xeb, 0xe4, 0xd7, 0x45, + 0x8b, 0x97, 0x14, 0x84, 0x01, 0x74, 0x43, 0x67, + 0x23, 0xb5, 0x3c, 0xc3, 0x9f, 0x26, 0x39, 0x15, + 0x59, 0x59, 0x4a, 0x8b, 0xdb, 0xc0, 0x1a, 0xa3, + 0xc6, 0x63, 0x3c, 0x18, 0xe6, 0x3c, 0x87, 0xf7, + 0x1d, 0x88, 0x2e, 0x57, 0x4d, 0x47, 0xf3, 0xab, + 0xd9, 0x39, 0xc3, 0x1e, 0x07, 0x9c, 0x92, 0x77, + 0x59, 0x58, 0x37, 0x5b, 0x74, 0xd0, 0xd5, 0xff, + 0x00, 0x55, 0xe9, 0x5e, 0x30, 0x4f, 0xfa, 0x9d, + 0xb0, 0xd9, 0xa9, 0xe3, 0xb2, 0xf7, 0x04, 0xea, + 0x74, 0xf8, 0x8a, 0x9b, 0x92, 0xc2, 0x69, 0x48, + 0xca, 0x82, 0xc1, 0x88, 0xb4, 0x8a, 0x74, 0xb8, + 0xbf, 0x5b, 0xd2, 0x9e, 0x3f, 0x37, 0x0e, 0x68, + 0x52, 0x78, 0xbd, 0x0a, 0x00, 0x54, 0x50, 0x75, + 0xb8, 0xa7, 0xd8, 0x8f, 0xee, 0x46, 0xc8, 0xc3, + 0x47, 0x1d, 0xe8, 0x9e, 0x0a, 0x6c, 0x5e, 0x51, + 0x07, 0x13, 0x9c, 0xee, 0x4e, 0x3c, 0xa4, 0x92, + 0x35, 0x8d, 0x8f, 0x87, 0x81, 0xa6, 0xb5, 0x9f, + 0xc2, 0x97, 0xe9, 0xb9, 0x0d, 0xae, 0x2f, 0xb8, + 0xed, 0xb9, 0xed, 0xda, 0x9f, 0xd5, 0x8c, 0xce, + 0xd1, 0x45, 0x14, 0x04, 0x19, 0xb3, 0xfd, 0x3e, + 0x33, 0xca, 0x3a, 0x81, 0xa5, 0x24, 0xc1, 0x8e, + 0x4c, 0xdc, 0xb8, 0xde, 0x76, 0xba, 0xa0, 0xdc, + 0x7b, 0xde, 0xde, 0x75, 0x77, 0x9c, 0xc9, 0x89, + 0x22, 0x48, 0x1c, 0xdb, 0xdc, 0x61, 0xbb, 0xfd, + 0xb5, 0x17, 0x13, 0x01, 0x1e, 0xec, 0xc3, 0x45, + 0xd1, 0x13, 0xf2, 0xd6, 0x81, 0x1d, 0xe5, 0xa7, + 0x54, 0x43, 0x60, 0x2b, 0x11, 0x9f, 0x95, 0xef, + 0xca, 0xca, 0x6c, 0x81, 0x7a, 0xdc, 0xf6, 0xad, + 0x7f, 0x39, 0x8f, 0x20, 0xc4, 0x69, 0xd2, 0xc5, + 0x93, 0x5b, 0x79, 0x57, 0xcf, 0x39, 0x1c, 0x8c, + 0x71, 0x39, 0xb1, 0x1b, 0x18, 0x80, 0xe4, 0x75, + 0x04, 0xf5, 0xab, 0xeb, 0xa5, 0x2d, 0x64, 0xac, + 0xf1, 0x28, 0xec, 0xf5, 0xb0, 0xd0, 0xab, 0x94, + 0x95, 0x04, 0x8d, 0x1a, 0x7a, 0xfc, 0xfe, 0x15, + 0x59, 0x18, 0x09, 0x54, 0x9d, 0x03, 0xae, 0xbf, + 0x1a, 0x61, 0xcd, 0xc9, 0x0c, 0x2c, 0xb8, 0xd1, + 0x40, 0x02, 0xad, 0x8b, 0x48, 0x7e, 0x6b, 0x1e, + 0xf4, 0xaf, 0x36, 0x45, 0x8f, 0x17, 0x7e, 0xe1, + 0xbc, 0x36, 0xd5, 0x1d, 0xec, 0x6a, 0x77, 0xea, + 0xae, 0xbd, 0x8e, 0x3f, 0x8c, 0xe0, 0xec, 0xb6, + 0xd5, 0x44, 0xef, 0xf1, 0x82, 0x86, 0x76, 0x4f, + 0xbd, 0x2e, 0xd1, 0xa2, 0xae, 0x9a, 0xf8, 0xd3, + 0xce, 0x3f, 0x8c, 0xe0, 0x25, 0xc1, 0x8d, 0x24, + 0x95, 0x5f, 0x20, 0xc8, 0x3d, 0xd6, 0x27, 0x69, + 0x02, 0xd7, 0xda, 0x2b, 0x33, 0xd7, 0x53, 0xaf, + 0x8d, 0x17, 0x22, 0xc4, 0x12, 0x3c, 0x2d, 0x59, + 0x9e, 0x56, 0xcb, 0xbb, 0x5d, 0xd9, 0xb9, 0x93, + 0x65, 0x93, 0xf6, 0x9c, 0x31, 0xa2, 0xe5, 0x61, + 0x65, 0x98, 0x11, 0x5c, 0x9d, 0x5a, 0xe1, 0x76, + 0x81, 0x6b, 0x37, 0x89, 0x26, 0xab, 0x62, 0xe5, + 0x7d, 0xc3, 0x80, 0xf3, 0x47, 0x83, 0x2a, 0xe6, + 0x2c, 0x64, 0x4b, 0x23, 0x91, 0xbf, 0xf7, 0x1b, + 0x4d, 0x09, 0xef, 0x59, 0xc3, 0x9d, 0x98, 0x62, + 0x30, 0x99, 0x98, 0xc4, 0x7a, 0xa9, 0x34, 0xcb, + 0x87, 0xfb, 0x9b, 0x27, 0x8a, 0x89, 0xa1, 0x48, + 0x96, 0x45, 0x73, 0x76, 0x27, 0xa9, 0x3e, 0x74, + 0x28, 0x50, 0xca, 0xc6, 0xe4, 0x12, 0x59, 0x24, + 0xc9, 0x8d, 0xc4, 0x85, 0xbf, 0x70, 0x9b, 0xfc, + 0xc7, 0x5d, 0x6b, 0x41, 0x26, 0x77, 0x05, 0x99, + 0xc5, 0x60, 0x26, 0x44, 0xd2, 0x44, 0xd8, 0x48, + 0xca, 0xf8, 0xe8, 0x2c, 0x5e, 0x4e, 0xcd, 0x7a, + 0xf4, 0xbf, 0x70, 0x71, 0xf9, 0x99, 0x2d, 0x24, + 0xae, 0xd1, 0x34, 0x91, 0xfa, 0x96, 0x41, 0xfb, + 0x62, 0x40, 0x2d, 0x7e, 0xf5, 0x4f, 0x99, 0x87, + 0x87, 0xfe, 0xdd, 0x1e, 0x46, 0x2b, 0xde, 0x6d, + 0x14, 0x0e, 0x9b, 0x87, 0x76, 0x22, 0x80, 0x75, + 0xf6, 0xac, 0x6c, 0x62, 0x7c, 0xb9, 0xdf, 0xdf, + 0x8f, 0x90, 0xfd, 0xb9, 0xe4, 0xdf, 0x69, 0xa1, + 0x55, 0xf9, 0x5a, 0xf5, 0x63, 0x37, 0xed, 0xcc, + 0x5e, 0x46, 0x6f, 0xa8, 0xe4, 0x33, 0x3d, 0xd2, + 0xea, 0xc3, 0x1e, 0x54, 0x16, 0x02, 0x34, 0xd1, + 0x19, 0xfc, 0x49, 0xac, 0x1e, 0x38, 0xc9, 0x73, + 0xed, 0x40, 0x5b, 0xd7, 0xd5, 0x57, 0xbf, 0xc6, + 0xb5, 0xfc, 0x42, 0x67, 0x62, 0xe3, 0xc7, 0x1e, + 0x44, 0xc6, 0x45, 0x4b, 0x14, 0x84, 0xfc, 0xab, + 0x6d, 0x45, 0x4a, 0x4d, 0x90, 0xda, 0x0c, 0x4f, + 0xff, 0x00, 0x9d, 0xbb, 0xc9, 0x19, 0x97, 0x20, + 0x11, 0xb4, 0x49, 0x34, 0x4b, 0xf3, 0x6d, 0xeb, + 0x4f, 0x23, 0xe0, 0xff, 0x00, 0xb7, 0xc0, 0x4c, + 0x10, 0xfb, 0x70, 0x82, 0x06, 0xbd, 0x75, 0xe9, + 0xba, 0xbb, 0x07, 0x35, 0x34, 0x4d, 0x23, 0xb2, + 0x87, 0x79, 0x99, 0x4b, 0xb7, 0x4f, 0x48, 0x37, + 0xda, 0x05, 0x31, 0x1c, 0xec, 0x13, 0xe4, 0x01, + 0xb9, 0xa2, 0x8d, 0x8e, 0xf6, 0x2d, 0xe2, 0x3e, + 0x55, 0xb7, 0x85, 0x5d, 0x27, 0x5e, 0x11, 0x59, + 0x91, 0x73, 0x89, 0x63, 0xb7, 0xb8, 0x85, 0x6f, + 0xd2, 0xf5, 0x98, 0xfb, 0xa3, 0x95, 0x2d, 0x2a, + 0x60, 0xa1, 0xba, 0xa8, 0xdd, 0x20, 0xbf, 0x7a, + 0xd5, 0x7d, 0xc7, 0xcb, 0x63, 0x88, 0xb7, 0xc6, + 0xc1, 0x96, 0x25, 0x2f, 0x25, 0xbe, 0x5d, 0xc7, + 0xad, 0xab, 0xe6, 0xaa, 0x64, 0xe4, 0x33, 0x89, + 0x6b, 0xb1, 0x99, 0xb5, 0xb7, 0x85, 0x2f, 0xb2, + 0x2a, 0xc9, 0xd7, 0x59, 0x68, 0xd6, 0x7d, 0xab, + 0xc8, 0x3a, 0x38, 0x46, 0x36, 0x03, 0xb6, 0xed, + 0x3f, 0x2a, 0xfa, 0x57, 0x15, 0x94, 0x19, 0x14, + 0x8b, 0x1e, 0xfd, 0x6c, 0x6b, 0x09, 0x85, 0xc1, + 0xf1, 0x49, 0xc7, 0x9c, 0x88, 0x1c, 0xc5, 0x9b, + 0x11, 0xd6, 0x29, 0x34, 0xdc, 0x3f, 0xd3, 0x5a, + 0x0e, 0x03, 0x24, 0x94, 0x5b, 0x81, 0xbb, 0xf2, + 0xac, 0x55, 0x95, 0xa2, 0x0e, 0xae, 0xb1, 0x58, + 0x7c, 0x9a, 0x1e, 0x4f, 0x10, 0x7b, 0xb1, 0xe5, + 0xa1, 0xb0, 0xea, 0x45, 0xf4, 0x06, 0xae, 0xf1, + 0xb9, 0xbf, 0x55, 0x11, 0xb8, 0xb3, 0x26, 0x84, + 0xf6, 0x3e, 0x62, 0xa1, 0xc8, 0x95, 0x7f, 0xb7, + 0x92, 0x7d, 0x5a, 0x8e, 0x9e, 0x15, 0x17, 0x0c, + 0x54, 0x48, 0xfb, 0x4e, 0xae, 0xbb, 0x98, 0x76, + 0xd0, 0xd8, 0x1a, 0xb1, 0xce, 0x37, 0xa2, 0x8a, + 0x28, 0x04, 0x1c, 0xcc, 0xb1, 0x1c, 0x82, 0x19, + 0x0b, 0xba, 0x0b, 0x01, 0xf1, 0xef, 0x56, 0xe1, + 0xdd, 0x8b, 0x81, 0x02, 0xc8, 0x40, 0x6b, 0x6e, + 0x6f, 0x89, 0xaa, 0xfc, 0xd3, 0x22, 0xe4, 0x0b, + 0x1d, 0xb2, 0x30, 0x00, 0x1b, 0x75, 0x3d, 0xb5, + 0xa9, 0xb9, 0x27, 0xdb, 0x12, 0xa9, 0x6d, 0x55, + 0x40, 0x24, 0xeb, 0xad, 0x09, 0x5c, 0x8b, 0x3e, + 0xe2, 0xcb, 0x92, 0x38, 0xd6, 0x48, 0x9c, 0x6c, + 0x61, 0x66, 0x07, 0xa5, 0x7c, 0xcf, 0x98, 0xdc, + 0x99, 0x22, 0x55, 0x22, 0xcc, 0x49, 0x20, 0x74, + 0xb8, 0xd6, 0xb4, 0xff, 0x00, 0x71, 0x67, 0xe4, + 0x49, 0x01, 0x85, 0x18, 0xdc, 0x6a, 0x74, 0xbd, + 0x65, 0x1d, 0xa6, 0x78, 0x8a, 0x4a, 0xbe, 0xe0, + 0xbe, 0x97, 0xeb, 0x7a, 0xb7, 0x68, 0x58, 0xe4, + 0xed, 0xd1, 0x57, 0x3f, 0x62, 0x7c, 0xac, 0xc4, + 0xce, 0x49, 0xb2, 0x9d, 0x7f, 0x74, 0xc6, 0x15, + 0x6d, 0xa0, 0x01, 0x7a, 0xde, 0xb3, 0x39, 0x99, + 0x1f, 0x51, 0x36, 0xe0, 0x2c, 0xaa, 0x2c, 0xa3, + 0xe1, 0x4c, 0x39, 0x2c, 0x95, 0x83, 0x1f, 0xe9, + 0x23, 0x52, 0x92, 0xb9, 0xbb, 0xf9, 0x2f, 0x85, + 0x27, 0xa3, 0xbb, 0xb4, 0x36, 0x65, 0xec, 0xec, + 0x4d, 0xaa, 0xf8, 0x0f, 0xf0, 0x68, 0xa2, 0x8a, + 0xa9, 0xcc, 0x14, 0x51, 0x5d, 0x55, 0x2c, 0x6c, + 0xba, 0x9f, 0x0a, 0x03, 0x95, 0x73, 0x07, 0x8d, + 0x9b, 0x2d, 0x85, 0xbd, 0x31, 0xf7, 0x73, 0xd8, + 0x79, 0x55, 0xac, 0x0e, 0x27, 0xa3, 0xe4, 0x7c, + 0x42, 0x7f, 0x9d, 0x39, 0x4d, 0xaa, 0xa1, 0x50, + 0x59, 0x45, 0x59, 0x22, 0x24, 0x30, 0xb0, 0xf1, + 0xf0, 0xd0, 0x2c, 0x43, 0xd5, 0xfa, 0x9c, 0xf5, + 0xab, 0x7b, 0xea, 0xb6, 0xfa, 0xf4, 0x1e, 0xae, + 0x9c, 0x15, 0x2c, 0x87, 0xae, 0x87, 0x3d, 0xea, + 0xbe, 0xfa, 0xe3, 0xcc, 0x23, 0x8d, 0xa4, 0x26, + 0xc1, 0x45, 0xe8, 0x98, 0x81, 0x67, 0xdc, 0xf9, + 0xf6, 0x8d, 0x31, 0x11, 0xb5, 0x6f, 0x54, 0x9f, + 0x0f, 0x0a, 0xf1, 0xf6, 0xa6, 0x12, 0x64, 0x66, + 0x85, 0x69, 0x86, 0x3b, 0x49, 0x61, 0x1b, 0xb6, + 0xa3, 0x75, 0x28, 0xc9, 0x95, 0xb3, 0x73, 0x19, + 0xcf, 0xff, 0x00, 0x61, 0xb0, 0x27, 0xa0, 0x1d, + 0xab, 0x6b, 0xc2, 0xe3, 0x2f, 0x0f, 0xc6, 0x99, + 0xf9, 0x8c, 0x61, 0x2e, 0x0c, 0xeb, 0xb6, 0x3c, + 0x98, 0xf5, 0x28, 0xfd, 0x89, 0x35, 0xcf, 0xba, + 0xf3, 0x83, 0xa3, 0x4d, 0x63, 0x2c, 0x9f, 0x9f, + 0xcf, 0x98, 0xe5, 0x45, 0xc6, 0xe4, 0x22, 0x26, + 0x5e, 0x20, 0xb2, 0xce, 0x9d, 0x24, 0x1d, 0xab, + 0x43, 0xf6, 0xf4, 0x70, 0xcf, 0x04, 0x4c, 0x92, + 0xed, 0xc8, 0x61, 0xfb, 0xb1, 0x30, 0xb5, 0x8d, + 0x61, 0x61, 0x59, 0x73, 0x39, 0x25, 0xc6, 0xf7, + 0xec, 0xee, 0x77, 0xe3, 0x4e, 0xe7, 0x42, 0x06, + 0xa0, 0x13, 0x5b, 0xce, 0x1e, 0x79, 0x18, 0xac, + 0x7c, 0x9c, 0x2a, 0x92, 0x2d, 0x80, 0xc8, 0x8f, + 0xb9, 0x1d, 0x2f, 0x6a, 0xca, 0x8e, 0x20, 0xbd, + 0x9b, 0x6c, 0xd4, 0x2c, 0x0d, 0x2e, 0x33, 0xc0, + 0xd6, 0x0c, 0x41, 0xb0, 0xed, 0x71, 0x54, 0xb8, + 0xbc, 0x81, 0x0e, 0x5e, 0xc9, 0x08, 0x55, 0x6f, + 0x45, 0xfb, 0xee, 0x1e, 0x35, 0x7f, 0x1a, 0x60, + 0xcc, 0xaa, 0x8f, 0xbc, 0x01, 0xa1, 0xa5, 0x13, + 0xc7, 0x2c, 0x79, 0xa3, 0x7a, 0xec, 0x05, 0xb5, + 0x6e, 0x83, 0xf1, 0xae, 0x84, 0x61, 0x6e, 0x4d, + 0x35, 0x15, 0xcf, 0xd1, 0x6f, 0x2e, 0xbf, 0x85, + 0x14, 0x20, 0xcf, 0xe7, 0xe4, 0x87, 0xcb, 0x91, + 0x6c, 0x58, 0x07, 0xd8, 0x47, 0x5d, 0x06, 0x9f, + 0x85, 0x4f, 0xc9, 0x13, 0xed, 0x8b, 0x12, 0x00, + 0x5b, 0x7f, 0x0a, 0x8d, 0x10, 0x4b, 0xc8, 0xc8, + 0x96, 0x16, 0x32, 0x35, 0xec, 0x75, 0x36, 0x35, + 0x27, 0x29, 0xa6, 0xe0, 0x2f, 0xa7, 0x4b, 0x74, + 0xa8, 0x7c, 0x16, 0xa7, 0x26, 0x13, 0x97, 0x95, + 0xd6, 0x47, 0x0b, 0x7b, 0xb5, 0x67, 0x98, 0x24, + 0x66, 0x4c, 0xac, 0x89, 0x0a, 0x2a, 0x02, 0x54, + 0x81, 0xa6, 0xe0, 0x2e, 0x05, 0x68, 0x79, 0x82, + 0xe5, 0xc8, 0xd4, 0xea, 0x75, 0x1d, 0x2b, 0x19, + 0xcc, 0x65, 0xcd, 0x21, 0x38, 0x43, 0xe4, 0x0c, + 0x0e, 0xd1, 0xd0, 0xb7, 0x8d, 0x56, 0xab, 0x27, + 0x75, 0xee, 0xa9, 0xab, 0x1c, 0xb1, 0x6e, 0x44, + 0xf2, 0x64, 0x4a, 0xf2, 0xc8, 0x6e, 0xce, 0x6f, + 0x73, 0x51, 0x79, 0xf8, 0xf4, 0xad, 0x57, 0xda, + 0x9f, 0x67, 0x66, 0x72, 0x1c, 0xda, 0x45, 0xc8, + 0xc0, 0xf0, 0x61, 0xc2, 0x04, 0xb3, 0xbc, 0x80, + 0x85, 0x2b, 0xe1, 0xb8, 0xe9, 0xad, 0x7b, 0xfb, + 0xbf, 0xed, 0xd8, 0xe0, 0xc9, 0xca, 0xca, 0xe3, + 0xe1, 0x64, 0xc5, 0x89, 0x82, 0xae, 0xcf, 0x52, + 0xec, 0xb6, 0xae, 0x48, 0xab, 0x9e, 0x7b, 0x72, + 0xe4, 0xc9, 0xff, 0x00, 0x4a, 0xe5, 0x77, 0x6d, + 0xb5, 0xed, 0xdb, 0xce, 0xad, 0x63, 0x61, 0x34, + 0x96, 0x69, 0x34, 0x5e, 0xb6, 0xa0, 0x21, 0x87, + 0x1e, 0x59, 0x9a, 0xc8, 0x34, 0xee, 0x69, 0xbe, + 0x26, 0x1c, 0x58, 0xe0, 0x5c, 0x5d, 0xfc, 0x68, + 0x8c, 0x24, 0x60, 0x2a, 0x0b, 0x0a, 0x90, 0x3d, + 0x4a, 0x40, 0xb0, 0x1f, 0xc6, 0xbb, 0xbe, 0xa0, + 0x0d, 0x5e, 0x83, 0x55, 0xb8, 0x2a, 0x4f, 0xbb, + 0xce, 0xbd, 0x6f, 0xaa, 0xfb, 0xeb, 0xd6, 0xfa, + 0x48, 0x27, 0x0d, 0x4b, 0xb9, 0xcc, 0xcd, 0x90, + 0x08, 0x14, 0xfa, 0xa4, 0xeb, 0xe4, 0x2a, 0xde, + 0xfb, 0x29, 0x62, 0x6d, 0x6a, 0xcf, 0xe4, 0xca, + 0xf9, 0x79, 0x64, 0x8d, 0x4b, 0x1d, 0xaa, 0x2a, + 0x1b, 0xc1, 0x29, 0x65, 0x17, 0x38, 0x4c, 0x14, + 0x9a, 0x51, 0x2c, 0xb1, 0x34, 0xd0, 0x6e, 0xda, + 0xe1, 0x01, 0x2c, 0x3c, 0xeb, 0x4d, 0xf7, 0x26, + 0x5c, 0x7c, 0x7e, 0x14, 0x58, 0xdc, 0x66, 0x47, + 0xd4, 0x71, 0x99, 0x0a, 0x04, 0xb0, 0xb6, 0xa6, + 0x37, 0xa9, 0x7e, 0xcc, 0xe3, 0x32, 0xb0, 0xf1, + 0x65, 0xe4, 0xf0, 0xe6, 0x8e, 0x51, 0x08, 0x3e, + 0xfe, 0x33, 0x75, 0xe9, 0xa8, 0xa4, 0xd9, 0x07, + 0x13, 0x3f, 0x90, 0xc9, 0xcb, 0x04, 0x45, 0x8a, + 0xe7, 0xf7, 0x63, 0x1d, 0x01, 0x27, 0x5b, 0x57, + 0x25, 0xad, 0x36, 0x67, 0x52, 0xac, 0x54, 0xb9, + 0xc5, 0xc4, 0x98, 0xd8, 0x9e, 0xcf, 0x21, 0x86, + 0xf2, 0xc5, 0x3f, 0xaf, 0x13, 0x29, 0x35, 0xda, + 0x07, 0xc2, 0xb6, 0x1c, 0x00, 0x9b, 0x17, 0x0f, + 0x76, 0xff, 0x00, 0x7a, 0x09, 0x35, 0x0a, 0xe6, + 0xec, 0x2b, 0x3d, 0x85, 0x0e, 0x66, 0x24, 0x61, + 0x70, 0x72, 0x97, 0x37, 0x01, 0x0d, 0x92, 0x30, + 0x77, 0x30, 0x53, 0xe5, 0x4e, 0xb1, 0xa3, 0x8f, + 0x25, 0x8b, 0x61, 0xab, 0xc5, 0x18, 0x00, 0x30, + 0x63, 0xa5, 0xfb, 0xda, 0xad, 0x5a, 0xcb, 0xfb, + 0x32, 0x63, 0x10, 0x6a, 0xb8, 0xb6, 0x24, 0x2b, + 0x58, 0x8b, 0x9f, 0x0d, 0x3a, 0xd4, 0x5c, 0xcb, + 0x86, 0xc9, 0xf4, 0x12, 0xc1, 0x6c, 0x58, 0x0b, + 0x11, 0xff, 0x00, 0xad, 0x7a, 0xe2, 0x18, 0x88, + 0x55, 0x08, 0x3a, 0x1b, 0x5e, 0xbc, 0xf2, 0xb1, + 0xfb, 0x19, 0x0c, 0xe7, 0xd6, 0x0f, 0xad, 0x47, + 0x98, 0xed, 0x5b, 0x98, 0x5f, 0x91, 0xdd, 0xc7, + 0xd3, 0xee, 0xff, 0x00, 0x45, 0xed, 0xf8, 0x51, + 0x46, 0xff, 0x00, 0xfa, 0xdb, 0xed, 0xfa, 0x2f, + 0x6f, 0xc2, 0x8a, 0x14, 0x10, 0xca, 0x5f, 0xfb, + 0xb5, 0xa3, 0x1b, 0x58, 0x39, 0x00, 0x8e, 0xa4, + 0xde, 0xac, 0x72, 0xaa, 0x75, 0xd0, 0x9b, 0x77, + 0xaf, 0x39, 0x7b, 0x71, 0xf9, 0x32, 0xe0, 0xd8, + 0xb3, 0x06, 0x3e, 0x40, 0xd4, 0xfc, 0x9a, 0xac, + 0x82, 0xe3, 0xd5, 0x71, 0xa1, 0x07, 0xc6, 0x8c, + 0xb5, 0x1e, 0x4f, 0x9e, 0x73, 0x93, 0x1c, 0x72, + 0xf2, 0x08, 0xc9, 0x62, 0x19, 0x45, 0xf4, 0x1a, + 0x8f, 0x0a, 0xc1, 0xc8, 0xe1, 0x32, 0x44, 0x8d, + 0x72, 0x15, 0x83, 0x35, 0xba, 0xe8, 0x6f, 0x5b, + 0x5f, 0xba, 0x01, 0x33, 0xba, 0x9d, 0x42, 0x74, + 0xd6, 0xb1, 0x39, 0x40, 0xef, 0x23, 0xa0, 0xbf, + 0x63, 0x50, 0x94, 0x17, 0xd9, 0x7e, 0xce, 0x3e, + 0x0f, 0xad, 0x4b, 0xf7, 0x64, 0x7c, 0x8f, 0x01, + 0x8d, 0xed, 0x62, 0x4a, 0xd0, 0xe4, 0xb7, 0xd3, + 0xbb, 0x2d, 0xf4, 0x08, 0x00, 0xd4, 0x8f, 0x13, + 0x4b, 0xbe, 0xf5, 0xcc, 0xc1, 0xe3, 0x7e, 0xde, + 0x6e, 0x3f, 0x03, 0x20, 0x4d, 0x97, 0xc8, 0x3a, + 0x7b, 0xaa, 0x8c, 0x1b, 0x6a, 0x81, 0xf2, 0xe9, + 0xd0, 0x56, 0x3e, 0x2f, 0xbb, 0x33, 0x53, 0xed, + 0xa5, 0xe0, 0x60, 0xfd, 0x95, 0x12, 0x16, 0x69, + 0x53, 0xa9, 0x5f, 0x0a, 0xf1, 0xc0, 0x61, 0xa6, + 0x46, 0x43, 0x64, 0x4f, 0xea, 0x86, 0x01, 0x77, + 0x63, 0xdd, 0x8e, 0x8a, 0xb7, 0xa9, 0xf0, 0x64, + 0x38, 0xc4, 0xe2, 0xe0, 0x5e, 0x25, 0x61, 0xcb, + 0x8d, 0x0c, 0x90, 0xa7, 0xb8, 0xf2, 0x90, 0x01, + 0x52, 0xdf, 0x22, 0x0f, 0x1d, 0x35, 0x34, 0xb3, + 0x23, 0x8a, 0xca, 0xc7, 0x48, 0xe4, 0x51, 0xee, + 0x47, 0x2a, 0x87, 0x8c, 0x8e, 0xa4, 0x13, 0xa5, + 0xbc, 0x69, 0x8e, 0x56, 0x2f, 0x2d, 0x0b, 0x4b, + 0x15, 0x97, 0x23, 0x1c, 0x3e, 0xf0, 0x18, 0xdb, + 0x56, 0x1d, 0x77, 0x77, 0xf2, 0xaf, 0x70, 0xf3, + 0x50, 0xae, 0x4e, 0x19, 0xce, 0x85, 0xe1, 0x30, + 0x28, 0x45, 0x24, 0x7a, 0x40, 0x1f, 0xa9, 0x45, + 0x4a, 0x02, 0x16, 0xdc, 0xa4, 0x86, 0x04, 0x11, + 0xa1, 0xb8, 0xb1, 0x06, 0x8d, 0xd4, 0xe7, 0x97, + 0xca, 0xc4, 0xfe, 0xdf, 0xb6, 0x36, 0x47, 0x9d, + 0xe4, 0x6d, 0xc4, 0x00, 0x4b, 0x29, 0x25, 0x83, + 0xdf, 0xa8, 0xb7, 0x4a, 0x42, 0x18, 0x69, 0x52, + 0x41, 0x30, 0x7a, 0xf4, 0x1a, 0xa1, 0xdd, 0x5d, + 0x0d, 0x49, 0x04, 0xe1, 0xab, 0xbb, 0xea, 0x1d, + 0xd5, 0xe8, 0x3e, 0x97, 0xa2, 0x04, 0x5c, 0x96, + 0x46, 0xcc, 0x72, 0x80, 0xd9, 0xdf, 0x4a, 0x93, + 0xed, 0x6e, 0x36, 0x4c, 0xac, 0x96, 0x9a, 0x34, + 0xf7, 0x5a, 0x1b, 0x10, 0x9d, 0x89, 0xbf, 0x4a, + 0x55, 0x95, 0x29, 0x9a, 0x72, 0x7a, 0x81, 0xe9, + 0x1f, 0x9d, 0x6e, 0x7e, 0xd5, 0xe1, 0xdd, 0x31, + 0x99, 0x71, 0x32, 0x96, 0x0c, 0xf8, 0xc7, 0xbf, + 0xb2, 0xff, 0x00, 0x35, 0xba, 0x2d, 0x65, 0xba, + 0xd8, 0x8f, 0x93, 0x5d, 0x55, 0xf3, 0xf0, 0x4d, + 0xce, 0x64, 0x61, 0x61, 0xf1, 0xdb, 0x78, 0xe0, + 0x70, 0xf9, 0x24, 0xff, 0x00, 0xf4, 0xc1, 0x7b, + 0x6e, 0x1d, 0xf4, 0xac, 0xff, 0x00, 0x1a, 0xb9, + 0x51, 0xb3, 0xf2, 0xb0, 0x40, 0xb9, 0x18, 0x72, + 0x7a, 0x72, 0x60, 0x61, 0xf2, 0x93, 0xe5, 0x5e, + 0x7e, 0xe0, 0xe4, 0xe7, 0xe5, 0x73, 0x8e, 0x71, + 0x8f, 0x6e, 0x5e, 0x39, 0xd9, 0x34, 0x60, 0x7c, + 0xd6, 0xd0, 0x9a, 0x63, 0xc6, 0x62, 0xa4, 0xd0, + 0xfd, 0x6f, 0x15, 0x97, 0xb5, 0xd8, 0x01, 0x36, + 0x23, 0x74, 0x27, 0xc0, 0x0a, 0xc6, 0xab, 0xad, + 0x67, 0xc9, 0xab, 0x63, 0x0e, 0x1b, 0x17, 0x0d, + 0xef, 0x99, 0xc7, 0xb8, 0xc5, 0x91, 0x41, 0xf7, + 0x22, 0x6d, 0x2c, 0x2d, 0xe1, 0x57, 0xf8, 0x0c, + 0xe6, 0x93, 0x29, 0xd2, 0x4e, 0x87, 0xc3, 0xa5, + 0xc7, 0x95, 0x2f, 0xca, 0x48, 0x13, 0x0d, 0xa3, + 0x9b, 0x1d, 0xa1, 0xcf, 0x90, 0xda, 0xfd, 0xb4, + 0xeb, 0x5d, 0xe1, 0x20, 0x95, 0x25, 0x0e, 0x14, + 0x81, 0x7b, 0x06, 0xbd, 0x5e, 0x94, 0x7d, 0x7f, + 0xb3, 0x34, 0xeb, 0xf8, 0xc9, 0xf4, 0x4c, 0x44, + 0x5b, 0xab, 0x28, 0x22, 0xfa, 0xf5, 0xaa, 0xdc, + 0xae, 0x4a, 0xbe, 0x4b, 0xfa, 0xac, 0xb1, 0x0d, + 0x01, 0x3d, 0x48, 0xab, 0x5c, 0x74, 0x2c, 0x61, + 0x86, 0x46, 0xf9, 0x9a, 0xd7, 0xaa, 0x73, 0xa4, + 0x52, 0x67, 0xcb, 0x1d, 0x85, 0xdd, 0xc1, 0x67, + 0x3a, 0xe9, 0xd3, 0x4a, 0xd5, 0x28, 0x50, 0x72, + 0x5f, 0x91, 0xe5, 0xff, 0x00, 0xeb, 0x5f, 0xfd, + 0x1f, 0xfc, 0x68, 0xaf, 0x7b, 0x07, 0xb7, 0xb3, + 0xb5, 0xad, 0xfc, 0x2d, 0x45, 0x49, 0x51, 0x5f, + 0x35, 0x1f, 0xee, 0x47, 0x20, 0x00, 0x9b, 0x5a, + 0xf6, 0xe9, 0xfc, 0x68, 0x51, 0xff, 0x00, 0x56, + 0x27, 0x75, 0x06, 0xe3, 0x4f, 0x3b, 0x54, 0x9c, + 0xc8, 0x1b, 0x62, 0xdd, 0xf2, 0xdc, 0x83, 0xfd, + 0x2a, 0x3c, 0x39, 0x84, 0xd8, 0x3b, 0x7a, 0xb4, + 0x46, 0xc4, 0x1f, 0x03, 0x42, 0x57, 0x26, 0x07, + 0xee, 0xb8, 0x3f, 0x7d, 0xd8, 0x28, 0xb3, 0x5c, + 0xd8, 0xf4, 0xac, 0x0e, 0x52, 0xed, 0x90, 0x92, + 0x00, 0x07, 0xc2, 0xbe, 0xb3, 0xcc, 0x71, 0x2f, + 0x9f, 0x39, 0x44, 0xb5, 0x80, 0x24, 0xd7, 0xce, + 0xb9, 0x8e, 0x1f, 0x26, 0x12, 0xd2, 0x28, 0x05, + 0x19, 0xca, 0x25, 0x87, 0x53, 0x7e, 0xd5, 0x5e, + 0xc9, 0x3c, 0xb2, 0xfd, 0x1b, 0xe0, 0x44, 0x1f, + 0xc0, 0x8d, 0x3b, 0xd5, 0xbc, 0x5e, 0x4f, 0x2b, + 0x1e, 0x26, 0x86, 0x37, 0xb4, 0x6e, 0x6e, 0x56, + 0xdd, 0xed, 0x6b, 0xd5, 0x79, 0xf0, 0x72, 0x62, + 0x2c, 0xcf, 0x19, 0x16, 0xee, 0x05, 0x57, 0x1b, + 0x87, 0x98, 0xf0, 0xa9, 0x4d, 0x32, 0x9d, 0x5a, + 0xe5, 0x1a, 0xac, 0x6f, 0xba, 0x03, 0xc5, 0xed, + 0xe4, 0x5f, 0x7b, 0xc6, 0x31, 0xde, 0xff, 0x00, + 0x2e, 0xd1, 0xa2, 0xb7, 0xc4, 0x53, 0x6e, 0x3f, + 0x2b, 0x17, 0x30, 0x3a, 0x4a, 0xeb, 0x24, 0x4a, + 0x04, 0x38, 0xd1, 0xb0, 0x04, 0x90, 0xa2, 0xec, + 0xe7, 0xe3, 0x58, 0x11, 0x25, 0xb4, 0xfe, 0x75, + 0x2a, 0x4c, 0xe8, 0x77, 0x23, 0x14, 0x23, 0xa5, + 0x8d, 0xbf, 0x95, 0x58, 0x83, 0x55, 0x97, 0xc4, + 0x62, 0xcd, 0xc8, 0x0c, 0x6c, 0x7b, 0xc5, 0x60, + 0x0c, 0x97, 0xe8, 0x19, 0xcf, 0xa5, 0x35, 0xf0, + 0x15, 0x53, 0x23, 0x81, 0xe4, 0x22, 0x92, 0x65, + 0x44, 0x2e, 0x91, 0x48, 0x62, 0x0c, 0x3f, 0x51, + 0x02, 0xf7, 0x15, 0x4a, 0x1f, 0xb8, 0x33, 0xd1, + 0x95, 0xa4, 0x61, 0x21, 0x4b, 0x15, 0x66, 0x02, + 0xf7, 0x1e, 0x7d, 0xe9, 0xfc, 0x1f, 0x75, 0x63, + 0xe4, 0xc6, 0x4c, 0xa4, 0x2e, 0x46, 0xd2, 0x02, + 0xb5, 0xf6, 0x97, 0x6f, 0x99, 0xb4, 0xf2, 0xe9, + 0x4e, 0x08, 0x83, 0x3a, 0xeb, 0x2c, 0x4d, 0xb6, + 0x44, 0x28, 0xc3, 0xaa, 0xb6, 0x84, 0x57, 0x37, + 0x7f, 0x0a, 0xd2, 0x89, 0xf8, 0xd9, 0x78, 0xd9, + 0xd3, 0x20, 0x24, 0xb2, 0xe3, 0x32, 0x4a, 0x35, + 0xb9, 0x72, 0xfa, 0x04, 0x07, 0xad, 0x85, 0x43, + 0x2f, 0x07, 0x85, 0x90, 0xef, 0x0e, 0x29, 0x68, + 0xf2, 0x20, 0x8d, 0x64, 0x9d, 0x7a, 0x80, 0x4e, + 0xbb, 0x40, 0x1e, 0x14, 0x02, 0x2d, 0xe3, 0xe3, + 0x51, 0x65, 0x4d, 0xb2, 0x23, 0x63, 0xea, 0x6d, + 0x07, 0xc2, 0xbd, 0xcc, 0x9e, 0xd4, 0xaf, 0x1d, + 0xc3, 0x6c, 0x24, 0x5c, 0x79, 0x55, 0x1c, 0x99, + 0x0c, 0x92, 0x5b, 0xb2, 0xe9, 0xf8, 0xd2, 0x60, + 0x24, 0x4f, 0xc4, 0xe1, 0x49, 0x99, 0x9b, 0x1c, + 0x51, 0xa9, 0x76, 0xbe, 0xeb, 0x0e, 0xf6, 0xad, + 0xa6, 0x7c, 0xf8, 0x53, 0xf1, 0x9e, 0xda, 0xc6, + 0xdc, 0x7f, 0x3d, 0x8d, 0xf2, 0x81, 0x75, 0x2c, + 0xa2, 0x95, 0xfd, 0xa3, 0xc0, 0x64, 0x65, 0xcc, + 0x5b, 0x17, 0x2c, 0x63, 0x66, 0xa2, 0xfb, 0x89, + 0x19, 0x1a, 0x90, 0x35, 0xfe, 0x35, 0xcf, 0xb9, + 0x39, 0x5c, 0xae, 0x4f, 0x21, 0x4c, 0xf1, 0x88, + 0xb9, 0x1c, 0x11, 0xb5, 0xec, 0x2d, 0xbe, 0xda, + 0x76, 0xae, 0x7b, 0xe6, 0xdf, 0x63, 0xa6, 0xaa, + 0x2b, 0xf5, 0x2a, 0xf1, 0x6f, 0x9d, 0x3e, 0x40, + 0xce, 0xc3, 0x8d, 0x66, 0xca, 0xc6, 0x07, 0xea, + 0x21, 0x3f, 0xad, 0x7b, 0x9b, 0x77, 0xa7, 0x9c, + 0x0e, 0x2a, 0x64, 0x64, 0xb4, 0xeb, 0x6c, 0x3c, + 0x98, 0xc9, 0x92, 0xcc, 0x36, 0x8b, 0xdf, 0xa5, + 0x8d, 0x53, 0xc0, 0xc5, 0xc3, 0x78, 0xa0, 0xe4, + 0x78, 0xac, 0xaf, 0x67, 0x38, 0x03, 0xf5, 0x10, + 0xb7, 0x52, 0x69, 0xea, 0x4d, 0x8a, 0xb8, 0xbf, + 0xf7, 0xd0, 0x8c, 0xb6, 0xb9, 0x69, 0x17, 0x4b, + 0xf8, 0x55, 0x5b, 0x96, 0x91, 0x35, 0xac, 0xb2, + 0x87, 0x2b, 0x99, 0x95, 0x2e, 0x77, 0xb7, 0x92, + 0xca, 0xc5, 0x7f, 0x58, 0xf1, 0x34, 0xd7, 0x87, + 0xb3, 0x05, 0x1b, 0x76, 0xed, 0x01, 0x7c, 0xbe, + 0x35, 0x99, 0x86, 0x32, 0xd9, 0x2c, 0xae, 0xd7, + 0x0c, 0x7d, 0x05, 0xae, 0x6b, 0x5f, 0xf6, 0xfe, + 0x23, 0x30, 0x3b, 0x88, 0x01, 0x7b, 0xf6, 0xad, + 0x95, 0x9b, 0x84, 0xbc, 0x1d, 0x1b, 0x17, 0x5a, + 0x9b, 0x1e, 0x37, 0x71, 0x89, 0x46, 0x96, 0x51, + 0xd4, 0x55, 0x08, 0x63, 0x79, 0x79, 0x01, 0x0d, + 0xc1, 0x00, 0x82, 0xcd, 0x6b, 0x1d, 0x0d, 0xcf, + 0xf2, 0xab, 0x89, 0x2f, 0xd1, 0x61, 0xb3, 0xd8, + 0x31, 0xb5, 0x94, 0x01, 0xdc, 0xd4, 0x3c, 0x54, + 0x2f, 0x2e, 0x40, 0xc9, 0x27, 0xe5, 0xbd, 0xc0, + 0xd3, 0x53, 0xd2, 0xae, 0x79, 0xf6, 0xe4, 0x73, + 0x45, 0x76, 0x8a, 0x10, 0x57, 0xce, 0xc7, 0x49, + 0xf1, 0xd9, 0x58, 0x02, 0x40, 0x25, 0x49, 0xec, + 0x45, 0x27, 0xe2, 0xd8, 0xae, 0x53, 0x45, 0x7b, + 0xac, 0xaa, 0x76, 0x9f, 0xf6, 0xeb, 0xad, 0x3f, + 0x35, 0x9d, 0xde, 0x31, 0xb2, 0xc4, 0x96, 0xda, + 0x62, 0x72, 0x4f, 0x98, 0xbf, 0x4a, 0x02, 0x4c, + 0xa2, 0xd1, 0x3b, 0xb0, 0xb1, 0x2c, 0xa4, 0x74, + 0xb7, 0x5a, 0xcd, 0x49, 0x91, 0x82, 0xd9, 0x78, + 0x71, 0xe4, 0xa0, 0x11, 0xc4, 0xb2, 0x13, 0x71, + 0xd5, 0xfb, 0x56, 0xc9, 0xe3, 0x86, 0x7b, 0x49, + 0x1b, 0x6e, 0x8c, 0xfa, 0x89, 0x15, 0x96, 0xe5, + 0x78, 0xa3, 0xfb, 0x33, 0xa8, 0x37, 0x79, 0x8a, + 0xa8, 0xb7, 0xe9, 0x6a, 0xcb, 0x65, 0x65, 0xc9, + 0xb6, 0xbb, 0x89, 0x1b, 0x8d, 0x87, 0x33, 0x1b, + 0x09, 0x23, 0x65, 0x32, 0x66, 0xce, 0xe5, 0xff, + 0x00, 0xd2, 0x82, 0xf4, 0x8b, 0x37, 0xed, 0x68, + 0x99, 0x32, 0x72, 0x54, 0x6c, 0x8a, 0x29, 0xbe, + 0x9e, 0x3d, 0xbd, 0xd8, 0x9b, 0x5e, 0xac, 0x64, + 0xc3, 0xc8, 0xf1, 0xd9, 0x12, 0xcd, 0x0b, 0x37, + 0xb5, 0x81, 0x3e, 0xd3, 0xe0, 0x37, 0xe9, 0x5c, + 0x4e, 0x67, 0x27, 0x1f, 0x1b, 0xd8, 0x98, 0x6f, + 0x48, 0x32, 0xd6, 0x69, 0x01, 0xeb, 0xb5, 0x8d, + 0xc1, 0xac, 0xbf, 0x2a, 0xbc, 0x1b, 0x62, 0xdc, + 0x88, 0xb3, 0xfe, 0xdb, 0xcb, 0xc4, 0x92, 0x54, + 0x5f, 0xdc, 0x10, 0x80, 0x5f, 0xc4, 0x03, 0x4a, + 0x5e, 0x29, 0x23, 0x0a, 0x59, 0x4a, 0x86, 0xd5, + 0x4d, 0x7d, 0x09, 0xf9, 0x8c, 0x0c, 0xcc, 0x6e, + 0x5d, 0x98, 0x6c, 0x9f, 0x22, 0x48, 0xd5, 0x01, + 0xd3, 0xf6, 0xcd, 0xb5, 0xa9, 0xb2, 0xf8, 0x4e, + 0x2f, 0x27, 0x32, 0x48, 0x53, 0x69, 0x8b, 0x07, + 0x0d, 0x64, 0xbf, 0x6b, 0xb5, 0x5e, 0xbb, 0x23, + 0x93, 0x3b, 0x6a, 0x4f, 0x83, 0xe6, 0xdb, 0x88, + 0x15, 0xe8, 0x38, 0xed, 0xd6, 0xb4, 0xb9, 0x5f, + 0x6a, 0xc8, 0xf1, 0xe0, 0xac, 0x40, 0x7b, 0xf9, + 0xb7, 0x65, 0xb7, 0x4d, 0xa3, 0x5a, 0x59, 0x3f, + 0xdb, 0xbc, 0x8c, 0x6d, 0x21, 0x58, 0xcb, 0x45, + 0x11, 0xda, 0x5c, 0x78, 0x8a, 0xd5, 0x6d, 0xab, + 0x33, 0x7a, 0xac, 0xbe, 0xa5, 0x28, 0x72, 0x24, + 0x89, 0x83, 0xa3, 0x58, 0xa9, 0x04, 0x7c, 0x47, + 0x4a, 0x6d, 0x85, 0xf7, 0x16, 0x46, 0x33, 0xb4, + 0xcd, 0x1a, 0xcb, 0x90, 0xc4, 0xb7, 0xba, 0x49, + 0x06, 0xe4, 0x5b, 0x5b, 0x68, 0x69, 0x34, 0x98, + 0xf9, 0x10, 0x9b, 0x48, 0x8c, 0xbe, 0x64, 0x54, + 0x61, 0xfc, 0x7a, 0x8a, 0xb2, 0x69, 0xf9, 0x28, + 0xd3, 0x5c, 0xa2, 0xd4, 0xb3, 0x93, 0xb9, 0xcf, + 0x56, 0x24, 0xe9, 0xe2, 0x7b, 0xd7, 0x9e, 0x3f, + 0x14, 0xe5, 0x65, 0x47, 0x10, 0x04, 0x92, 0x6e, + 0x6d, 0x50, 0x5d, 0x9c, 0xd9, 0x45, 0xef, 0x56, + 0xb0, 0x79, 0x09, 0xb8, 0xd7, 0xf7, 0x51, 0x2d, + 0x2d, 0xc3, 0x29, 0x3e, 0x15, 0x5b, 0xb9, 0x4d, + 0x22, 0x68, 0x9c, 0xc9, 0xb5, 0xb7, 0x16, 0xfc, + 0x4c, 0x92, 0x40, 0x1b, 0x03, 0x9c, 0xc3, 0xff, + 0x00, 0x8c, 0x5c, 0x82, 0xea, 0x29, 0x0e, 0x12, + 0xf2, 0x39, 0xd9, 0x03, 0x92, 0x82, 0x3f, 0x7f, + 0x27, 0x18, 0xee, 0xc9, 0x8b, 0xff, 0x00, 0x25, + 0xef, 0x53, 0xf3, 0xbc, 0xec, 0x7c, 0xfa, 0xc1, + 0x9b, 0x02, 0x08, 0xb2, 0x60, 0x40, 0x26, 0x0b, + 0xa5, 0xed, 0x56, 0xb8, 0xbc, 0x3c, 0xb8, 0x23, + 0x87, 0x96, 0xe1, 0x72, 0x83, 0x4f, 0x2a, 0x91, + 0x91, 0x8c, 0x6d, 0x7b, 0x0e, 0xba, 0x56, 0x1c, + 0x1b, 0xcc, 0x97, 0x70, 0xa0, 0xe3, 0xb9, 0x5c, + 0xe5, 0x6c, 0x48, 0x0e, 0x16, 0x5b, 0x5d, 0xe4, + 0x46, 0xd1, 0x7d, 0x3d, 0xab, 0xbc, 0xde, 0x76, + 0x5a, 0x13, 0x8d, 0x99, 0x12, 0x83, 0xd9, 0xd7, + 0xc2, 0xa7, 0x83, 0x33, 0x17, 0x28, 0x7b, 0xb9, + 0xa8, 0x70, 0xf3, 0x56, 0xea, 0xce, 0xa2, 0xca, + 0x47, 0x9d, 0x2b, 0xc9, 0x90, 0xe4, 0x65, 0x6d, + 0x67, 0x32, 0xc6, 0x6e, 0xaa, 0x4f, 0x80, 0xab, + 0x6b, 0x53, 0x93, 0x7d, 0x35, 0xc9, 0x37, 0x1b, + 0x0e, 0xf6, 0x0a, 0x35, 0x07, 0x55, 0x36, 0xd6, + 0xb7, 0x3c, 0x3c, 0x04, 0x22, 0x37, 0x4d, 0xda, + 0x11, 0x6b, 0x8a, 0xcd, 0xf0, 0x98, 0x84, 0xa8, + 0x1a, 0xdd, 0x0f, 0x87, 0x6a, 0xdc, 0x71, 0xb8, + 0xdb, 0x42, 0x80, 0x74, 0x26, 0xf6, 0xb5, 0xaa, + 0xf5, 0x99, 0x94, 0x47, 0xb5, 0x7f, 0x04, 0x9c, + 0x9e, 0xd8, 0xf1, 0x10, 0x5f, 0xd4, 0x4d, 0xc7, + 0x8f, 0xe5, 0x52, 0x70, 0xd7, 0x30, 0xb9, 0xb8, + 0x20, 0xb6, 0x96, 0x37, 0xaa, 0x39, 0xe9, 0xf5, + 0x79, 0xcd, 0x1e, 0xa4, 0x82, 0xa8, 0x2d, 0xd9, + 0x41, 0xf5, 0x53, 0x9c, 0x6c, 0x68, 0xf1, 0xe2, + 0x11, 0x27, 0x41, 0xd6, 0xb4, 0x38, 0x09, 0xa8, + 0xa2, 0x8a, 0x00, 0xa5, 0x1c, 0xce, 0x28, 0x58, + 0x8e, 0x42, 0xb5, 0xae, 0x40, 0x61, 0x6d, 0x35, + 0xef, 0x4d, 0xea, 0x2c, 0x98, 0x84, 0xd0, 0x3c, + 0x44, 0x5f, 0x70, 0x22, 0xc6, 0x80, 0x5b, 0xc3, + 0xb8, 0x68, 0x5e, 0x16, 0x1a, 0xa8, 0xbd, 0x87, + 0x81, 0xa9, 0x32, 0xa2, 0x56, 0x28, 0x08, 0xb8, + 0x8c, 0x6e, 0x17, 0xe8, 0x0f, 0x8d, 0x2e, 0xc5, + 0x69, 0xb8, 0xc9, 0xc8, 0x74, 0xb0, 0xbf, 0xac, + 0x79, 0x1a, 0x65, 0xef, 0x47, 0x93, 0x06, 0xf4, + 0xbe, 0xd7, 0xfe, 0x9d, 0xaf, 0x55, 0xb2, 0x94, + 0x4d, 0x5c, 0x33, 0x29, 0xcb, 0x70, 0x32, 0x4d, + 0x88, 0xe5, 0x1f, 0xf6, 0xe4, 0x97, 0xdc, 0x9b, + 0x77, 0xea, 0x20, 0xe8, 0x05, 0x2b, 0xe5, 0x38, + 0x60, 0x31, 0x79, 0x3c, 0xe9, 0x94, 0x6e, 0x9a, + 0x05, 0x48, 0x54, 0x0e, 0x8d, 0xdb, 0xf1, 0xad, + 0x66, 0x70, 0x03, 0xa9, 0x2a, 0x91, 0x8d, 0x14, + 0xf4, 0x26, 0x97, 0xcd, 0x0a, 0x1c, 0x5c, 0x54, + 0x94, 0x93, 0x23, 0xcf, 0xbf, 0x69, 0xe9, 0xb7, + 0xcf, 0xe1, 0x5c, 0xf6, 0xad, 0x93, 0x93, 0xa5, + 0x39, 0x46, 0x1f, 0x2f, 0x80, 0x99, 0x73, 0xe3, + 0xc6, 0xf9, 0x5a, 0x7c, 0x11, 0x2c, 0xa4, 0xf6, + 0x65, 0xaa, 0x91, 0x49, 0x99, 0x1a, 0x63, 0xe4, + 0x5d, 0x91, 0x33, 0xa2, 0x6c, 0x6f, 0xf7, 0x14, + 0xe9, 0x5b, 0xcc, 0xec, 0x53, 0x29, 0xe4, 0xa6, + 0x5b, 0x49, 0x2f, 0xa6, 0x25, 0x91, 0x7f, 0x4c, + 0x64, 0x58, 0xda, 0x94, 0x9e, 0x18, 0x1e, 0x47, + 0x8d, 0xc7, 0xb6, 0xcc, 0x6e, 0x39, 0x0c, 0x8f, + 0xbb, 0xa3, 0x77, 0xb8, 0xa8, 0xec, 0xa7, 0x39, + 0x25, 0x60, 0x51, 0x85, 0xce, 0xe4, 0x43, 0x2f, + 0x1b, 0x3c, 0xd6, 0x73, 0x86, 0x1f, 0x1f, 0x60, + 0x1a, 0x86, 0x3e, 0x91, 0x56, 0x70, 0x79, 0x3c, + 0x4c, 0x8e, 0x2f, 0x1f, 0x1a, 0x73, 0xb2, 0x7f, + 0xae, 0x3e, 0xf9, 0xbd, 0xbd, 0x2c, 0xd7, 0xb5, + 0x55, 0xcc, 0xe3, 0xb6, 0x71, 0xd3, 0x4e, 0x8b, + 0x79, 0xb3, 0x33, 0x43, 0x63, 0x81, 0xd7, 0x6d, + 0xfa, 0xda, 0x8e, 0x43, 0x84, 0x23, 0x90, 0xe4, + 0xa1, 0x83, 0x4f, 0x62, 0x14, 0xc9, 0xf8, 0x3a, + 0x80, 0x4d, 0x59, 0x40, 0xec, 0xc6, 0x3c, 0xde, + 0x36, 0x3c, 0xcd, 0xc9, 0x1f, 0x41, 0xc7, 0xc3, + 0x55, 0x28, 0x00, 0xf5, 0x1b, 0x8a, 0xc6, 0xf2, + 0x5c, 0x76, 0x2e, 0x27, 0xb4, 0xcc, 0x4e, 0xd9, + 0x17, 0x78, 0x1d, 0xec, 0x7b, 0x53, 0x9b, 0xe7, + 0x16, 0x2d, 0x62, 0xbf, 0xdd, 0x31, 0xfe, 0x43, + 0xad, 0xd9, 0x69, 0x47, 0x2e, 0xad, 0x91, 0x87, + 0x8d, 0x29, 0x3e, 0xa5, 0xfd, 0xb9, 0x3c, 0x88, + 0xd2, 0xd5, 0x35, 0x79, 0x22, 0xf9, 0x52, 0x51, + 0x92, 0x4c, 0x7c, 0x66, 0x59, 0x21, 0x3b, 0xdb, + 0x50, 0x54, 0xf8, 0x55, 0x5c, 0x9c, 0xd9, 0x72, + 0x0a, 0xef, 0xb7, 0xa0, 0x58, 0x58, 0x57, 0x87, + 0x88, 0x05, 0xdf, 0x7b, 0xd1, 0x14, 0x46, 0x42, + 0x14, 0x75, 0x35, 0xba, 0xc6, 0x4c, 0x3f, 0x26, + 0xfa, 0xa5, 0xc9, 0x73, 0x8b, 0x94, 0xe3, 0xca, + 0x92, 0x68, 0xc8, 0x4f, 0xee, 0x2f, 0x88, 0xad, + 0xce, 0x37, 0x17, 0x83, 0x92, 0x46, 0x5f, 0x0a, + 0xcc, 0x92, 0x15, 0xdc, 0x60, 0xbf, 0x7f, 0xd5, + 0x58, 0x98, 0x78, 0xf2, 0x7c, 0x40, 0xf1, 0xa7, + 0x3c, 0x4c, 0xb9, 0xfc, 0x74, 0xde, 0xee, 0x24, + 0xc6, 0xea, 0x2d, 0x63, 0xe1, 0x59, 0x5d, 0x2b, + 0x1d, 0x74, 0xf5, 0xee, 0x96, 0x51, 0xa6, 0xcd, + 0xcb, 0xc6, 0x92, 0x3f, 0x6b, 0x2a, 0x03, 0x14, + 0xec, 0x36, 0x86, 0xed, 0x71, 0x54, 0x30, 0x70, + 0xcb, 0x3b, 0x20, 0xdd, 0xa1, 0xba, 0x90, 0x35, + 0xaf, 0x53, 0xe6, 0xe4, 0x72, 0xb1, 0x21, 0x95, + 0x3d, 0x48, 0xd7, 0xd2, 0xda, 0xe9, 0x4f, 0xb8, + 0x7e, 0x3e, 0xe6, 0x36, 0x20, 0x9b, 0x8b, 0x10, + 0x35, 0xa9, 0xaa, 0x85, 0x06, 0xb2, 0xa9, 0x59, + 0xf2, 0x33, 0xe2, 0x30, 0x76, 0x95, 0x36, 0x60, + 0x18, 0x75, 0xad, 0x2e, 0xf4, 0xc5, 0xc7, 0x67, + 0x26, 0xe4, 0x0b, 0x2f, 0x89, 0xaa, 0xf8, 0x18, + 0x81, 0x40, 0xb5, 0xc5, 0xb4, 0x3a, 0xd5, 0x1e, + 0x46, 0x51, 0x26, 0x43, 0x85, 0x52, 0xcc, 0x0e, + 0xc4, 0x37, 0xd0, 0x76, 0xe9, 0xf1, 0xad, 0x17, + 0x07, 0x06, 0xdb, 0xbb, 0x32, 0xc7, 0x0e, 0xa2, + 0x5c, 0xb9, 0x26, 0x20, 0x9b, 0x0b, 0xdc, 0x9b, + 0x8b, 0xde, 0x9d, 0xd5, 0x7c, 0x2c, 0x51, 0x8d, + 0x02, 0xc7, 0xd5, 0x80, 0xf5, 0x9f, 0x13, 0x56, + 0x2a, 0x4c, 0xc2, 0x8a, 0x28, 0xa0, 0x0a, 0x28, + 0xa2, 0x80, 0x5f, 0xcc, 0x42, 0x1f, 0x1b, 0xdc, + 0x0b, 0xba, 0x45, 0xf9, 0x6a, 0x8f, 0x10, 0xfb, + 0x5f, 0xd8, 0x76, 0x07, 0x7f, 0x5f, 0x26, 0xa7, + 0x6e, 0x81, 0xd4, 0xa9, 0xe8, 0x74, 0x34, 0x93, + 0x90, 0xe3, 0xa5, 0xc5, 0xfd, 0xfc, 0x76, 0xf4, + 0x0d, 0x6f, 0xdd, 0x48, 0xf3, 0xa0, 0x26, 0xce, + 0xc4, 0x0e, 0xac, 0x36, 0xf4, 0xd4, 0x6b, 0x59, + 0xcc, 0xf4, 0xc9, 0x8f, 0x76, 0xd0, 0x6e, 0xab, + 0xe9, 0xb9, 0xe9, 0x5a, 0x6c, 0x6e, 0x42, 0x2c, + 0x98, 0xf6, 0xca, 0x36, 0x4a, 0xa0, 0x06, 0xf0, + 0x3f, 0x8d, 0x45, 0x99, 0x82, 0xaf, 0x73, 0xb4, + 0x74, 0xb0, 0x35, 0x0d, 0x1a, 0xd2, 0xf1, 0xc9, + 0x91, 0x8b, 0x90, 0xf6, 0x71, 0x12, 0x13, 0x75, + 0x2e, 0xf7, 0x9e, 0xfa, 0xdc, 0x0a, 0xb2, 0x9c, + 0xc6, 0x3e, 0x4a, 0x64, 0x64, 0xcd, 0x62, 0x91, + 0xa1, 0x82, 0x18, 0xae, 0x01, 0x35, 0xce, 0x47, + 0x89, 0xb1, 0x1e, 0x80, 0x59, 0x6f, 0xf8, 0x0a, + 0xcf, 0x64, 0xe0, 0xc9, 0x19, 0xda, 0x16, 0xc0, + 0x9d, 0xe7, 0x5e, 0xd5, 0x9d, 0xb5, 0xd7, 0x93, + 0xa9, 0x25, 0x65, 0x2b, 0x91, 0xfe, 0x36, 0x1c, + 0x2c, 0x38, 0xd8, 0x0d, 0xdf, 0x28, 0x6e, 0x3b, + 0x6d, 0xa0, 0x06, 0xe7, 0xf9, 0xd5, 0x1c, 0x95, + 0xc8, 0x8b, 0x07, 0x92, 0xca, 0xdb, 0xff, 0x00, + 0x61, 0xa4, 0xf6, 0x65, 0x73, 0xff, 0x00, 0x8f, + 0x4a, 0xa5, 0xc6, 0x72, 0x99, 0xd8, 0xb9, 0x4d, + 0x98, 0xc2, 0xe1, 0x14, 0xa2, 0x13, 0xda, 0xac, + 0x9e, 0x7e, 0x39, 0x70, 0x13, 0x0f, 0x6f, 0xaf, + 0x26, 0x5d, 0xd3, 0x93, 0xd2, 0xd7, 0xb9, 0xaa, + 0x3d, 0x6f, 0xc0, 0x7a, 0xec, 0xbc, 0x11, 0x71, + 0xd1, 0x9c, 0x9e, 0x63, 0x10, 0x29, 0x06, 0x3e, + 0x3a, 0x32, 0xcc, 0x0f, 0x89, 0x1f, 0xca, 0xa9, + 0x66, 0x70, 0x8d, 0xfd, 0x8f, 0x37, 0x22, 0x4b, + 0x03, 0x26, 0x43, 0x49, 0x1a, 0xf8, 0x0b, 0xeb, + 0x6a, 0xd3, 0xe0, 0x4f, 0xc6, 0x4d, 0x95, 0x3c, + 0xa0, 0x20, 0x86, 0x08, 0xf6, 0x3e, 0xdd, 0x09, + 0xd3, 0xfc, 0xea, 0x97, 0x38, 0x12, 0x3e, 0x1a, + 0x19, 0x05, 0xd5, 0x4b, 0xb6, 0xd5, 0xf1, 0x07, + 0x51, 0x55, 0x4a, 0xea, 0xcb, 0x1e, 0x48, 0x54, + 0x6d, 0xc3, 0x3e, 0x6e, 0x70, 0xcc, 0xac, 0xaa, + 0xbf, 0x2a, 0x8b, 0x1f, 0x8d, 0x5c, 0xc7, 0xc1, + 0x58, 0x6c, 0xdb, 0x77, 0x5e, 0xae, 0xfd, 0x39, + 0x40, 0xcf, 0xb4, 0x01, 0x6f, 0xe3, 0x5d, 0x30, + 0x64, 0x04, 0x55, 0x81, 0x37, 0xbb, 0x10, 0x34, + 0xf1, 0x35, 0xac, 0xbe, 0xd9, 0xe0, 0xb5, 0xe8, + 0xb5, 0xa9, 0x8c, 0xbe, 0x0e, 0x08, 0xe4, 0x63, + 0x64, 0x16, 0x1e, 0x15, 0x77, 0x0f, 0x0d, 0x9a, + 0xca, 0x54, 0xde, 0xfd, 0x69, 0xaf, 0x05, 0xf6, + 0x7e, 0x77, 0xb2, 0xf9, 0x59, 0xa6, 0xd7, 0x04, + 0x84, 0xf8, 0x53, 0x5c, 0x0e, 0x1e, 0xf2, 0xea, + 0xa3, 0x4e, 0xf5, 0x31, 0x2e, 0x50, 0xa7, 0xb0, + 0xd7, 0x2c, 0xad, 0xc5, 0xf1, 0x56, 0x90, 0x8d, + 0xa6, 0xcd, 0xa8, 0x15, 0xad, 0xe3, 0x30, 0x04, + 0x68, 0x01, 0x4b, 0x5b, 0xa6, 0xb4, 0x60, 0xf1, + 0xe1, 0x4a, 0xb1, 0x51, 0x71, 0x4c, 0x66, 0x64, + 0xc3, 0xc6, 0x66, 0x00, 0x7b, 0x84, 0x1d, 0x8b, + 0xe7, 0x57, 0x48, 0xe7, 0xdd, 0xb6, 0x5b, 0x22, + 0xc9, 0xcf, 0x18, 0xed, 0xec, 0x46, 0xbe, 0xa2, + 0x3d, 0x4d, 0x7e, 0x9e, 0x55, 0x5f, 0x8f, 0xc1, + 0x79, 0xe4, 0xfa, 0x87, 0xdc, 0xa9, 0xba, 0xe0, + 0x1e, 0xfe, 0x62, 0xa1, 0xe3, 0x31, 0x93, 0x22, + 0x70, 0x64, 0x62, 0x58, 0x0d, 0xce, 0x7b, 0x93, + 0xe0, 0x6b, 0x42, 0x00, 0x02, 0xc3, 0x40, 0x3a, + 0x54, 0x9c, 0xe0, 0x2b, 0xb4, 0x51, 0x40, 0x14, + 0x51, 0x45, 0x00, 0x51, 0x45, 0x14, 0x01, 0x5c, + 0x20, 0x11, 0x63, 0xa8, 0xf0, 0xae, 0xd1, 0x40, + 0x20, 0xe5, 0xf0, 0xfe, 0x96, 0xd9, 0x10, 0xa0, + 0x11, 0x9d, 0x1c, 0x01, 0xd0, 0x1e, 0xd5, 0x77, + 0x0f, 0x2a, 0x0c, 0x88, 0x92, 0x37, 0x60, 0x24, + 0xb7, 0x7b, 0x12, 0x40, 0xab, 0xf2, 0xc6, 0xb2, + 0x21, 0x46, 0x17, 0x56, 0xd0, 0x8a, 0x47, 0x91, + 0xc7, 0xcb, 0x8a, 0xc5, 0xd0, 0x7e, 0xd0, 0x05, + 0xae, 0x3a, 0xf9, 0x50, 0x17, 0x32, 0x70, 0x95, + 0xaf, 0x70, 0x35, 0xd2, 0xe4, 0x52, 0x4c, 0xee, + 0x1d, 0x49, 0x3a, 0x0d, 0x45, 0xba, 0x55, 0xfc, + 0x6e, 0x6b, 0x20, 0x7f, 0xcc, 0xa2, 0x58, 0xba, + 0x1b, 0x68, 0xcb, 0xf1, 0xa6, 0x10, 0xbe, 0x36, + 0x6c, 0x45, 0xe1, 0x6d, 0xde, 0x2a, 0x6d, 0x71, + 0x51, 0x06, 0x94, 0xd8, 0xea, 0x60, 0xb2, 0xb8, + 0x76, 0x0a, 0x40, 0x00, 0x05, 0xbf, 0x6d, 0x3f, + 0x85, 0x2a, 0x9b, 0x89, 0x75, 0x99, 0x2c, 0xa3, + 0x6d, 0xb4, 0xbf, 0x89, 0xaf, 0xa6, 0xe4, 0x60, + 0x23, 0x2d, 0xac, 0x2d, 0xf0, 0xa5, 0xd3, 0x70, + 0xea, 0xcb, 0xad, 0x81, 0x1e, 0x55, 0x19, 0x47, + 0x4d, 0x7d, 0x9f, 0x93, 0xe7, 0x4b, 0x85, 0x93, + 0x12, 0xca, 0x8a, 0xd6, 0xf8, 0x1e, 0xa2, 0xa4, + 0xc8, 0xfa, 0xdc, 0x9c, 0x68, 0xa3, 0x91, 0xb7, + 0x2c, 0x47, 0x45, 0xd6, 0xb7, 0x0d, 0xc2, 0x29, + 0x90, 0xb1, 0x03, 0x5e, 0xba, 0x57, 0x95, 0xe0, + 0x52, 0xc1, 0x48, 0x1e, 0x93, 0xdc, 0x54, 0xc9, + 0x77, 0xbe, 0xb8, 0x66, 0x3d, 0x78, 0xd7, 0x91, + 0x35, 0x51, 0xdb, 0xc6, 0xb4, 0x7f, 0x6f, 0xe2, + 0xc7, 0x8c, 0xe4, 0xcd, 0x18, 0x60, 0x6c, 0x55, + 0x88, 0xe8, 0x45, 0x37, 0x8f, 0x87, 0x5d, 0xc0, + 0xe9, 0xf9, 0x55, 0xf8, 0x38, 0xd4, 0x43, 0xa0, + 0x1f, 0x95, 0x43, 0x53, 0xc9, 0x9e, 0xfd, 0xfd, + 0xcf, 0x2c, 0xfb, 0xd0, 0xa4, 0x60, 0x58, 0x8b, + 0x5e, 0xbd, 0xe2, 0x61, 0x04, 0x1d, 0x06, 0xbe, + 0x55, 0x6d, 0x60, 0x48, 0xd6, 0xee, 0x42, 0x2a, + 0xeb, 0xaf, 0x95, 0x50, 0xcf, 0xe4, 0x89, 0x7f, + 0x63, 0x11, 0xb6, 0x85, 0x00, 0xb9, 0x1d, 0xef, + 0xda, 0xa5, 0x28, 0x39, 0x5d, 0x8b, 0x79, 0x39, + 0x58, 0xf8, 0x31, 0xdd, 0xac, 0x5c, 0xe8, 0x00, + 0xf1, 0xa5, 0xbb, 0x72, 0xf9, 0x19, 0xca, 0x06, + 0xd1, 0x4e, 0xe2, 0xfd, 0x87, 0xfa, 0x7f, 0x0a, + 0x9b, 0x17, 0x8b, 0x93, 0x24, 0x09, 0x72, 0x49, + 0x55, 0x3a, 0x85, 0xe8, 0x69, 0xb4, 0x18, 0xb0, + 0x40, 0x2d, 0x12, 0xed, 0xf1, 0xa9, 0x2a, 0x78, + 0xc5, 0xc5, 0x4c, 0x74, 0xb0, 0xd5, 0x8f, 0xcc, + 0xde, 0x26, 0xac, 0x51, 0x45, 0x00, 0x51, 0x45, + 0x14, 0x01, 0x45, 0x14, 0x50, 0x05, 0x14, 0x51, + 0x40, 0x14, 0x51, 0x45, 0x00, 0x57, 0x08, 0x07, + 0xad, 0x76, 0x8a, 0x02, 0xb6, 0x46, 0x06, 0x34, + 0xf7, 0x2c, 0xb6, 0x73, 0xfa, 0xd7, 0x43, 0x49, + 0xa6, 0xc2, 0xcc, 0xc1, 0x9c, 0x32, 0x6e, 0x68, + 0xb5, 0xb3, 0xa0, 0xb9, 0x1f, 0x1a, 0xd1, 0x57, + 0x28, 0x0c, 0xef, 0xf7, 0x0c, 0xb8, 0xd7, 0x74, + 0x85, 0xbd, 0xc3, 0xae, 0xd6, 0x1a, 0x11, 0xe1, + 0xf9, 0x55, 0xf8, 0xb9, 0x4c, 0x67, 0x4f, 0xdc, + 0x05, 0x48, 0xeb, 0x6e, 0x95, 0x77, 0x25, 0x71, + 0x19, 0x36, 0xe4, 0x94, 0x00, 0xf4, 0x2e, 0x40, + 0xfc, 0x89, 0xa5, 0x8f, 0xc6, 0xf1, 0x6c, 0x34, + 0xcb, 0x55, 0x5b, 0xdc, 0xd9, 0x97, 0xa7, 0x85, + 0x01, 0x6d, 0xf2, 0x71, 0x15, 0x4b, 0x29, 0x2d, + 0x6b, 0x68, 0x05, 0xfa, 0xf4, 0xa8, 0x47, 0x23, + 0x88, 0x6c, 0x48, 0x60, 0x08, 0xb9, 0xf2, 0xf8, + 0xd4, 0x07, 0x8b, 0x80, 0xb9, 0x6f, 0xaf, 0x50, + 0xa6, 0xdb, 0x57, 0xd3, 0x60, 0x3b, 0x7e, 0xaa, + 0xe8, 0xe3, 0x78, 0xcb, 0x6d, 0x6c, 0xb4, 0x27, + 0x5d, 0x43, 0x00, 0x7f, 0xf7, 0x50, 0x99, 0x65, + 0xb6, 0xe4, 0x30, 0x92, 0x3f, 0x71, 0x4e, 0xe0, + 0x6f, 0x62, 0x7a, 0x69, 0x54, 0xa6, 0xcf, 0xc8, + 0xd1, 0xc1, 0xb1, 0xb6, 0x8a, 0x3a, 0x5c, 0xf4, + 0xa9, 0xc6, 0x07, 0x14, 0x02, 0x19, 0x27, 0x56, + 0x8d, 0x41, 0x0a, 0x0b, 0x80, 0x08, 0xbf, 0x7d, + 0x75, 0xab, 0xa1, 0x30, 0x76, 0x58, 0x18, 0xf6, + 0xe9, 0xdc, 0x50, 0x81, 0x16, 0xec, 0xbc, 0xf7, + 0xdb, 0xea, 0x2c, 0x3a, 0x9f, 0xd3, 0xe0, 0x46, + 0xb4, 0xcf, 0x13, 0x88, 0x58, 0xd8, 0x4b, 0x21, + 0xf5, 0xe8, 0x48, 0x1d, 0x2e, 0x2a, 0xfc, 0x62, + 0x00, 0x00, 0x8b, 0x6d, 0xbb, 0x6d, 0xb5, 0x49, + 0x40, 0x14, 0x51, 0x45, 0x00, 0x51, 0x45, 0x14, + 0x01, 0x45, 0x14, 0x50, 0x05, 0x14, 0x51, 0x40, + 0x7f, 0xff, 0xd9, +}; + +static const uint8_t data_images_c_c_c_control_small_jpg[] = +{ + /* /images/c-c-c-control-small.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x2d, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2d, 0x73, 0x6d, + 0x61, 0x6c, 0x6c, 0x2e, 0x6a, 0x70, 0x67, 0x00, + + 0xff, 0xd8, 0xff, 0xe1, 0x00, 0x18, 0x45, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2a, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xff, + 0xe1, 0x03, 0x29, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, + 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, + 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, + 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, + 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, + 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, + 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, + 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x20, 0x35, 0x2e, 0x30, 0x2d, 0x63, 0x30, + 0x36, 0x30, 0x20, 0x36, 0x31, 0x2e, 0x31, 0x33, + 0x34, 0x37, 0x37, 0x37, 0x2c, 0x20, 0x32, 0x30, + 0x31, 0x30, 0x2f, 0x30, 0x32, 0x2f, 0x31, 0x32, + 0x2d, 0x31, 0x37, 0x3a, 0x33, 0x32, 0x3a, 0x30, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, + 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, + 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, + 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, + 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, + 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, + 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, + 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, + 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, + 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, + 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, + 0x20, 0x43, 0x53, 0x35, 0x20, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x73, 0x22, 0x20, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, + 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, + 0x35, 0x46, 0x35, 0x41, 0x42, 0x44, 0x32, 0x33, + 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, + 0x38, 0x34, 0x41, 0x32, 0x46, 0x31, 0x42, 0x32, + 0x42, 0x37, 0x35, 0x32, 0x38, 0x37, 0x33, 0x46, + 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, + 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, + 0x64, 0x69, 0x64, 0x3a, 0x35, 0x46, 0x35, 0x41, + 0x42, 0x44, 0x32, 0x34, 0x32, 0x36, 0x44, 0x44, + 0x31, 0x31, 0x45, 0x33, 0x38, 0x34, 0x41, 0x32, + 0x46, 0x31, 0x42, 0x32, 0x42, 0x37, 0x35, 0x32, + 0x38, 0x37, 0x33, 0x46, 0x22, 0x3e, 0x20, 0x3c, + 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, + 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, + 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, + 0x69, 0x69, 0x64, 0x3a, 0x35, 0x46, 0x35, 0x41, + 0x42, 0x44, 0x32, 0x31, 0x32, 0x36, 0x44, 0x44, + 0x31, 0x31, 0x45, 0x33, 0x38, 0x34, 0x41, 0x32, + 0x46, 0x31, 0x42, 0x32, 0x42, 0x37, 0x35, 0x32, + 0x38, 0x37, 0x33, 0x46, 0x22, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, + 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, + 0x35, 0x46, 0x35, 0x41, 0x42, 0x44, 0x32, 0x32, + 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, + 0x38, 0x34, 0x41, 0x32, 0x46, 0x31, 0x42, 0x32, + 0x42, 0x37, 0x35, 0x32, 0x38, 0x37, 0x33, 0x46, + 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, + 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, + 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, + 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, + 0x3f, 0x3e, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, + 0x6f, 0x62, 0x65, 0x00, 0x64, 0xc0, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x0c, + 0x08, 0x08, 0x08, 0x09, 0x08, 0x0c, 0x09, 0x09, + 0x0c, 0x11, 0x0b, 0x0a, 0x0b, 0x11, 0x15, 0x0f, + 0x0c, 0x0c, 0x0f, 0x15, 0x18, 0x13, 0x13, 0x15, + 0x13, 0x13, 0x18, 0x17, 0x12, 0x14, 0x14, 0x14, + 0x14, 0x12, 0x17, 0x17, 0x1b, 0x1c, 0x1e, 0x1c, + 0x1b, 0x17, 0x24, 0x24, 0x27, 0x27, 0x24, 0x24, + 0x35, 0x33, 0x33, 0x33, 0x35, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x01, + 0x0d, 0x0b, 0x0b, 0x0d, 0x0e, 0x0d, 0x10, 0x0e, + 0x0e, 0x10, 0x14, 0x0e, 0x0f, 0x0e, 0x14, 0x14, + 0x10, 0x11, 0x11, 0x10, 0x14, 0x1d, 0x14, 0x14, + 0x15, 0x14, 0x14, 0x1d, 0x25, 0x1a, 0x17, 0x17, + 0x17, 0x17, 0x1a, 0x25, 0x20, 0x23, 0x1e, 0x1e, + 0x1e, 0x23, 0x20, 0x28, 0x28, 0x25, 0x25, 0x28, + 0x28, 0x32, 0x32, 0x30, 0x32, 0x32, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xf5, 0x00, + 0xbf, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, + 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x96, 0x00, + 0x00, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x03, 0x04, 0x06, 0x02, 0x07, 0x01, + 0x01, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x10, 0x00, 0x01, 0x03, 0x03, 0x03, 0x02, 0x05, + 0x02, 0x02, 0x09, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x02, 0x03, 0x11, 0x21, 0x04, + 0x31, 0x12, 0x05, 0x41, 0x51, 0x61, 0x22, 0x32, + 0x13, 0x06, 0x71, 0x81, 0x91, 0x14, 0xa1, 0xb1, + 0x42, 0x52, 0x23, 0x33, 0x53, 0x15, 0x07, 0xf0, + 0xd1, 0x62, 0x24, 0xc1, 0x72, 0x16, 0x25, 0x11, + 0x00, 0x02, 0x02, 0x01, 0x04, 0x01, 0x03, 0x02, + 0x06, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x11, 0x02, 0x03, 0x21, 0x31, 0x12, + 0x04, 0x13, 0x41, 0x51, 0x61, 0x22, 0x32, 0x71, + 0x91, 0x42, 0x62, 0x23, 0x14, 0x81, 0xf0, 0xa1, + 0x43, 0x34, 0x05, 0xff, 0xda, 0x00, 0x0c, 0x03, + 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, + 0x00, 0xf5, 0x54, 0x21, 0x08, 0x01, 0x08, 0x42, + 0x00, 0x42, 0x10, 0x80, 0x10, 0x84, 0x20, 0x04, + 0x21, 0x70, 0xe9, 0xa2, 0x61, 0xa3, 0x9e, 0xd0, + 0x75, 0xa1, 0x21, 0x01, 0xda, 0x15, 0x39, 0x39, + 0x6c, 0x18, 0xfd, 0x4f, 0xb7, 0x7a, 0x1a, 0x28, + 0xcf, 0x37, 0x84, 0x08, 0x0d, 0xdc, 0xf0, 0x69, + 0x76, 0x8b, 0x54, 0xe8, 0x35, 0xd5, 0x00, 0xc1, + 0x0a, 0x87, 0xf7, 0xac, 0x31, 0xa8, 0x7d, 0x41, + 0xa5, 0x28, 0xa7, 0xc6, 0xce, 0xc7, 0xca, 0x24, + 0x44, 0xea, 0x96, 0xea, 0x0d, 0x90, 0x16, 0x10, + 0x84, 0x20, 0x04, 0x21, 0x08, 0x01, 0x08, 0x42, + 0x00, 0x42, 0x10, 0x80, 0x10, 0x84, 0x20, 0x04, + 0x21, 0x08, 0x01, 0x08, 0x42, 0x00, 0x42, 0x17, + 0xc7, 0x38, 0x34, 0x17, 0x38, 0xd0, 0x0d, 0x4a, + 0x00, 0x24, 0x01, 0x53, 0x60, 0xa1, 0x9b, 0x37, + 0x1e, 0x16, 0x6e, 0x73, 0x81, 0xae, 0x80, 0x75, + 0x4a, 0x33, 0xf9, 0x03, 0x95, 0x2f, 0xb5, 0x8c, + 0xe2, 0x03, 0x6c, 0x3a, 0x6e, 0x21, 0x77, 0x8b, + 0xc3, 0xcc, 0xef, 0x3c, 0xa7, 0xdb, 0x07, 0xf6, + 0x75, 0xfb, 0xd3, 0x44, 0x07, 0xcc, 0xbe, 0x69, + 0xce, 0x3e, 0xd3, 0x3f, 0x86, 0x0e, 0xae, 0x17, + 0x34, 0x51, 0xb7, 0x86, 0xca, 0x91, 0xce, 0x7e, + 0xf2, 0xd0, 0xee, 0xae, 0xbd, 0xb5, 0x4c, 0x99, + 0x87, 0x8b, 0x0b, 0xb7, 0x86, 0xef, 0x7d, 0x28, + 0x4b, 0xae, 0xa4, 0x7e, 0x4d, 0x2c, 0xa5, 0x55, + 0xb2, 0x1d, 0x92, 0x15, 0x3f, 0x84, 0xc8, 0xd8, + 0x18, 0xd7, 0x0b, 0x9b, 0xb8, 0x9a, 0xe8, 0xae, + 0x45, 0xc3, 0xe3, 0x88, 0x9a, 0xd9, 0x49, 0x73, + 0x81, 0x24, 0x10, 0x74, 0xec, 0xa4, 0x76, 0x50, + 0x5c, 0x7e, 0x68, 0x2b, 0x78, 0xd9, 0x5e, 0x68, + 0x8b, 0x27, 0x86, 0x06, 0xbf, 0x97, 0xda, 0x2b, + 0x73, 0xba, 0xe4, 0xba, 0xba, 0xaa, 0xcf, 0xe3, + 0xb2, 0xb1, 0xc0, 0x2c, 0x04, 0xd6, 0xc7, 0x6f, + 0xe3, 0x74, 0xc1, 0xb9, 0x00, 0xa9, 0x19, 0x90, + 0x8e, 0x8c, 0x9e, 0x68, 0x54, 0xdc, 0xbc, 0xe8, + 0x72, 0x1a, 0xc7, 0xb9, 0xcd, 0xa9, 0x07, 0xc0, + 0x83, 0xd0, 0xfd, 0x15, 0xe8, 0xf9, 0xa8, 0xc3, + 0x7f, 0x8e, 0xc2, 0xd7, 0x75, 0xa2, 0xb4, 0x44, + 0x52, 0xfa, 0xda, 0x0a, 0x8d, 0xfc, 0x66, 0x23, + 0xda, 0x43, 0x41, 0x69, 0x26, 0xa4, 0xd6, 0xbf, + 0xad, 0x55, 0xa8, 0x2d, 0x24, 0xb8, 0xd9, 0xb0, + 0xe4, 0xb4, 0x3a, 0x33, 0xaf, 0x43, 0xaa, 0xb0, + 0xb3, 0x73, 0x63, 0x64, 0xf1, 0xf2, 0xef, 0x69, + 0xda, 0xd3, 0x66, 0xb8, 0x57, 0x4e, 0x81, 0x31, + 0xe3, 0xb9, 0x23, 0x2b, 0x84, 0x13, 0x38, 0x7b, + 0xa7, 0x4a, 0x78, 0x28, 0x03, 0x34, 0x21, 0x08, + 0x01, 0x08, 0x42, 0x00, 0x42, 0x10, 0x80, 0x10, + 0x84, 0x20, 0x04, 0x21, 0x71, 0x2c, 0xd1, 0xc2, + 0xc2, 0xf9, 0x0e, 0xd6, 0x8d, 0x4a, 0x03, 0x8c, + 0xa9, 0xc4, 0x10, 0x3e, 0x5b, 0x79, 0x45, 0x6e, + 0x91, 0x17, 0xe5, 0x72, 0x12, 0x38, 0x07, 0x38, + 0x9f, 0xd9, 0x68, 0x24, 0x00, 0x55, 0x8c, 0xcc, + 0xd3, 0x96, 0x5a, 0xc8, 0x6b, 0x40, 0x49, 0x0d, + 0x23, 0x5a, 0x75, 0x53, 0xe0, 0x42, 0xec, 0x66, + 0x3a, 0x57, 0xd9, 0xf2, 0x0b, 0xb4, 0xf4, 0xfb, + 0xa0, 0x38, 0xc6, 0xc0, 0x10, 0x3d, 0x92, 0xe4, + 0x3b, 0x73, 0xd9, 0xa0, 0x37, 0xbf, 0x75, 0x24, + 0xf9, 0xe0, 0x56, 0xa6, 0x8a, 0xbe, 0x6e, 0x78, + 0x6f, 0xed, 0x57, 0xb2, 0x43, 0x9d, 0x9f, 0x5a, + 0xf9, 0xae, 0x80, 0x65, 0x93, 0xcc, 0x6c, 0x24, + 0x6e, 0xd3, 0x45, 0x4a, 0x4e, 0x74, 0x8b, 0xd7, + 0xc1, 0x25, 0x9b, 0x2d, 0xce, 0xa8, 0x2e, 0x55, + 0x1d, 0x29, 0x23, 0x55, 0x6a, 0xd9, 0xa2, 0xae, + 0xb2, 0x68, 0x47, 0x3e, 0xd3, 0xad, 0x54, 0x8c, + 0xe6, 0xe0, 0x76, 0xae, 0x20, 0xac, 0xb9, 0x71, + 0xea, 0xb9, 0x0f, 0x25, 0x5d, 0x64, 0x68, 0xab, + 0xc6, 0x8d, 0xb4, 0x19, 0xd0, 0xca, 0x40, 0x0f, + 0xfc, 0x4a, 0xb4, 0xd9, 0xb6, 0x9a, 0x6e, 0xaa, + 0xc1, 0xb6, 0x69, 0x1b, 0x76, 0x38, 0xd4, 0x68, + 0xa7, 0x8f, 0x90, 0xca, 0x69, 0x15, 0x90, 0xa9, + 0xf2, 0xcf, 0xa1, 0x1e, 0x3f, 0x93, 0x7d, 0x14, + 0xa5, 0xda, 0x54, 0xab, 0x51, 0x48, 0x49, 0xa6, + 0x8b, 0x0f, 0x89, 0xcf, 0xe5, 0xc2, 0x36, 0xee, + 0xaf, 0xd5, 0x31, 0x6f, 0x3b, 0x31, 0xa7, 0x98, + 0x02, 0x55, 0x5d, 0x93, 0xf4, 0x2c, 0x93, 0x5e, + 0xa6, 0xb9, 0xc6, 0x37, 0x37, 0x6b, 0xe8, 0x41, + 0xd4, 0x24, 0x7c, 0x86, 0x23, 0x31, 0xb2, 0x04, + 0x91, 0xd5, 0xad, 0x37, 0x0e, 0xec, 0x51, 0x8b, + 0xc8, 0x97, 0x9b, 0xb9, 0x32, 0x0f, 0x8f, 0x22, + 0x32, 0xc7, 0x80, 0xe0, 0x46, 0x8b, 0x32, 0xe4, + 0x78, 0x7c, 0xb3, 0x1c, 0xc0, 0xc9, 0xea, 0x24, + 0x07, 0x6e, 0xee, 0x87, 0xc5, 0x31, 0x06, 0xa9, + 0x16, 0x6f, 0x19, 0x3c, 0x4c, 0x32, 0x44, 0x43, + 0x98, 0x07, 0x4d, 0x7b, 0x2b, 0xbc, 0x4e, 0x67, + 0xbc, 0xc7, 0x40, 0xef, 0x54, 0x56, 0x07, 0xa9, + 0x08, 0x06, 0x28, 0x42, 0x10, 0x02, 0x10, 0x84, + 0x00, 0x84, 0x21, 0x01, 0xf0, 0x90, 0x2e, 0x52, + 0x5e, 0x53, 0x24, 0x4f, 0x3b, 0x20, 0x8d, 0xf4, + 0x63, 0x4d, 0x1c, 0x6d, 0x42, 0xee, 0xde, 0x29, + 0xa6, 0x64, 0xad, 0x8b, 0x1d, 0xee, 0x71, 0xa5, + 0x41, 0x03, 0xea, 0x52, 0x6e, 0x2f, 0x1c, 0x4d, + 0x2f, 0xbc, 0xff, 0x00, 0xe5, 0xc5, 0x72, 0x35, + 0xbf, 0x8a, 0x01, 0x8e, 0x26, 0x33, 0x31, 0x21, + 0xa9, 0x00, 0xc8, 0xeb, 0xe8, 0xa1, 0xc9, 0xc9, + 0xac, 0x6f, 0x16, 0xa8, 0xba, 0x8b, 0x90, 0xe5, + 0x31, 0xe2, 0xab, 0x9e, 0xea, 0x34, 0x2c, 0xde, + 0x67, 0xca, 0xb8, 0xd8, 0x9e, 0xed, 0xf2, 0x12, + 0x0e, 0xbd, 0x94, 0x37, 0xa9, 0x64, 0x94, 0x1d, + 0x72, 0x19, 0xae, 0x04, 0xd1, 0x23, 0x9b, 0x29, + 0xee, 0x71, 0xe8, 0xaa, 0x66, 0x7c, 0x9f, 0x89, + 0x73, 0xce, 0xd9, 0x69, 0x5e, 0xea, 0x83, 0xf9, + 0xfe, 0x30, 0xe9, 0x35, 0xd5, 0x8a, 0xc0, 0xd4, + 0x3e, 0xa3, 0xfd, 0x7d, 0x57, 0x20, 0xdf, 0x5b, + 0x25, 0x6c, 0xe7, 0xf8, 0xd1, 0xea, 0x98, 0x2f, + 0xa7, 0xe4, 0x1c, 0x5d, 0x2d, 0x30, 0x51, 0x28, + 0x6a, 0x32, 0x24, 0xf4, 0x5d, 0x8d, 0x12, 0xcf, + 0xfe, 0x87, 0x8b, 0xa7, 0xf3, 0x51, 0xff, 0x00, + 0xd0, 0x71, 0x46, 0xc6, 0x55, 0x3c, 0x90, 0x81, + 0x90, 0xa8, 0xb1, 0x08, 0xad, 0xd5, 0x37, 0xfc, + 0x93, 0x86, 0x73, 0x5a, 0x1b, 0x25, 0x08, 0x17, + 0xb2, 0x8c, 0x73, 0xfc, 0x5d, 0x7f, 0x9b, 0xfa, + 0x13, 0x92, 0x23, 0x8a, 0x1a, 0x35, 0xf4, 0x20, + 0x77, 0x56, 0x84, 0x84, 0x1a, 0x76, 0x48, 0x87, + 0xc8, 0x38, 0xa0, 0xf0, 0x4c, 0xb6, 0x0a, 0x43, + 0xf2, 0x5e, 0x28, 0x93, 0xfc, 0x5f, 0xd0, 0x92, + 0x87, 0x13, 0x53, 0x87, 0x96, 0xe0, 0x40, 0x34, + 0xa2, 0x79, 0x85, 0x98, 0x49, 0x0b, 0xcf, 0xe1, + 0xf9, 0x37, 0x16, 0xd3, 0xfc, 0xdb, 0xa6, 0xfc, + 0x6f, 0xc8, 0xf8, 0xd9, 0x64, 0x6b, 0x59, 0x25, + 0x0f, 0x7e, 0x89, 0x2b, 0xd0, 0x98, 0x3d, 0x0f, + 0x1e, 0x40, 0xf6, 0x9d, 0xd7, 0x69, 0xd7, 0xb2, + 0x59, 0x98, 0xc6, 0xf1, 0xd9, 0x82, 0x58, 0x6d, + 0xee, 0x1d, 0xd7, 0xd3, 0xb1, 0xa2, 0x8e, 0x2e, + 0x4a, 0x13, 0xb6, 0x28, 0x8e, 0xe2, 0x40, 0x24, + 0x8f, 0x14, 0xca, 0x78, 0xc6, 0x56, 0x1b, 0x9b, + 0x4a, 0xbd, 0x83, 0x73, 0x0e, 0x86, 0xa1, 0x40, + 0x82, 0x7c, 0x3c, 0xc8, 0xf2, 0xe2, 0xf7, 0x1a, + 0x0b, 0x48, 0xb1, 0x69, 0xe8, 0xac, 0x24, 0x5c, + 0x3e, 0x40, 0x8a, 0x57, 0x36, 0x47, 0x80, 0xd7, + 0xd8, 0x34, 0xea, 0x08, 0x3d, 0x7e, 0xe9, 0xea, + 0x00, 0x42, 0x10, 0x80, 0x10, 0x85, 0x1c, 0xb2, + 0xb6, 0x36, 0x17, 0x38, 0xd3, 0xb7, 0x89, 0x40, + 0x23, 0xe4, 0x32, 0xe5, 0x97, 0x20, 0xb4, 0xfa, + 0x62, 0x20, 0x35, 0x83, 0xa8, 0x3d, 0x4f, 0xe0, + 0xa5, 0x73, 0xe3, 0xc3, 0xe3, 0x99, 0x08, 0x77, + 0x99, 0xc0, 0xbe, 0x4e, 0xe4, 0x9b, 0xaa, 0xd0, + 0x46, 0xfc, 0xbe, 0x41, 0xce, 0x73, 0x6a, 0xd0, + 0x6a, 0xf3, 0x5a, 0x8a, 0x6a, 0xa6, 0xe4, 0x04, + 0x92, 0x31, 0xc5, 0xad, 0x0e, 0x68, 0xd6, 0x9d, + 0x14, 0xd5, 0x4b, 0x21, 0xb8, 0x31, 0xbc, 0xff, + 0x00, 0x24, 0x46, 0xe0, 0x1c, 0x69, 0x7b, 0x1b, + 0xfe, 0x85, 0x81, 0xe4, 0x72, 0x5c, 0xf7, 0xbb, + 0xcc, 0x48, 0xf1, 0xe8, 0xbd, 0x0f, 0x96, 0xe3, + 0x72, 0x89, 0x76, 0xe8, 0x85, 0xa8, 0x49, 0xa7, + 0x42, 0x68, 0x2a, 0xb3, 0xd3, 0x7c, 0x7f, 0x32, + 0x57, 0xca, 0x19, 0x8d, 0x53, 0x09, 0xa3, 0xf4, + 0x14, 0x3a, 0xfd, 0xd6, 0xeb, 0xad, 0x2b, 0xee, + 0x45, 0x3c, 0xb1, 0xa4, 0x33, 0x0e, 0xf7, 0x38, + 0x9b, 0xd7, 0xf4, 0xa8, 0xe8, 0xe5, 0xb3, 0x6f, + 0xc5, 0x39, 0x29, 0x1a, 0xd7, 0xb7, 0x0e, 0xad, + 0x78, 0x2e, 0x69, 0xb6, 0x81, 0x57, 0x87, 0x85, + 0x96, 0x56, 0xef, 0x8f, 0x1f, 0x7b, 0x6a, 0x5a, + 0x08, 0xee, 0xdd, 0x55, 0xd7, 0x52, 0x7f, 0x52, + 0x23, 0xcd, 0xf0, 0xcc, 0xa6, 0xd7, 0x23, 0x6b, + 0x96, 0xc4, 0xf0, 0x19, 0x51, 0xc2, 0xc9, 0x9d, + 0x89, 0xe4, 0x90, 0x80, 0xdd, 0x2b, 0x57, 0x58, + 0x7e, 0x2b, 0xb6, 0x7c, 0x7f, 0x2d, 0xd2, 0x7b, + 0x6d, 0xc3, 0x25, 0xe5, 0xe6, 0x3a, 0x53, 0xf6, + 0x80, 0xa9, 0x0a, 0x7f, 0xa7, 0xfb, 0xd1, 0x1e, + 0x6f, 0x83, 0x17, 0x47, 0x76, 0x45, 0x0f, 0x65, + 0xae, 0x67, 0x07, 0x91, 0x36, 0x53, 0xf1, 0x63, + 0xc6, 0x06, 0x58, 0xfd, 0x62, 0xd6, 0xfa, 0x95, + 0xd3, 0x3e, 0x39, 0x9a, 0xf1, 0x21, 0x6e, 0x2d, + 0x44, 0x44, 0x87, 0x9b, 0x74, 0xec, 0x9f, 0xd2, + 0xfd, 0xe8, 0x79, 0xbe, 0x0c, 0x75, 0x0a, 0x28, + 0x7b, 0x15, 0xb3, 0x87, 0xe3, 0x79, 0xb2, 0x3c, + 0x35, 0xb8, 0x9e, 0x62, 0xd0, 0xe0, 0x28, 0x34, + 0x71, 0xa0, 0x2a, 0x79, 0x3e, 0x33, 0x99, 0x04, + 0x7e, 0xe4, 0xb8, 0x94, 0x6e, 0xed, 0x95, 0xa0, + 0x37, 0xd2, 0x8a, 0xcb, 0xa2, 0x9f, 0xfc, 0x88, + 0x87, 0xd8, 0xfd, 0xac, 0xc2, 0xd0, 0xf6, 0x2b, + 0xed, 0x0f, 0x62, 0xb6, 0xf3, 0xfc, 0x7f, 0x23, + 0x1c, 0xd2, 0x5c, 0x50, 0x06, 0xd2, 0xfa, 0xdb, + 0x41, 0xaa, 0xa3, 0xf9, 0x6c, 0x6f, 0xe9, 0xb5, + 0x59, 0x7f, 0xe7, 0x37, 0xb5, 0xd3, 0x23, 0xfb, + 0x29, 0x7a, 0x33, 0x30, 0xdd, 0xda, 0x50, 0xfd, + 0x95, 0xdc, 0x49, 0xde, 0xc7, 0x0b, 0x91, 0x4b, + 0xda, 0xc9, 0xd0, 0xc5, 0xc7, 0xfe, 0x9b, 0x52, + 0xee, 0x59, 0xb1, 0xc4, 0xf8, 0xf6, 0x34, 0x36, + 0xa2, 0xe1, 0x53, 0x37, 0x49, 0xe3, 0xa3, 0xbf, + 0x2d, 0x99, 0x6c, 0x79, 0xd5, 0xed, 0x06, 0xeb, + 0xe2, 0x1c, 0x9f, 0xbc, 0x28, 0xf7, 0xee, 0x7b, + 0x29, 0x4a, 0xaf, 0x40, 0xc1, 0xc9, 0xad, 0x0e, + 0xea, 0x9f, 0x15, 0xe4, 0x3f, 0x0c, 0xc9, 0x22, + 0x47, 0x8d, 0xc3, 0x4a, 0xaf, 0x48, 0xe3, 0x32, + 0xb4, 0x15, 0x0b, 0xce, 0x76, 0xfa, 0xa0, 0xec, + 0x55, 0x9a, 0x48, 0xcb, 0x94, 0xc2, 0x89, 0x95, + 0xc9, 0x65, 0x84, 0x9e, 0xa1, 0xd2, 0xba, 0x93, + 0xfa, 0x15, 0xde, 0x26, 0x59, 0x25, 0xc5, 0x1e, + 0xe1, 0xdd, 0xb4, 0xed, 0x0e, 0xee, 0x02, 0xe2, + 0x76, 0xbb, 0x23, 0x05, 0xed, 0xd4, 0x81, 0xb8, + 0x7d, 0x95, 0x5e, 0x0f, 0x20, 0x89, 0x1f, 0x8e, + 0x4d, 0x85, 0xc0, 0xbd, 0x96, 0x86, 0x23, 0xa4, + 0x21, 0x08, 0x01, 0x25, 0xe7, 0x65, 0x77, 0xb9, + 0x14, 0x40, 0x90, 0xdd, 0x4d, 0x3f, 0x14, 0xe4, + 0xac, 0xd6, 0x5e, 0x4c, 0x93, 0x67, 0xca, 0x0b, + 0x28, 0x0f, 0x91, 0x8e, 0x3e, 0x08, 0x0b, 0xd8, + 0x2d, 0x8e, 0x2c, 0x17, 0x3d, 0xa3, 0xcd, 0x23, + 0xaf, 0xd2, 0xc3, 0x45, 0x46, 0x6e, 0x4e, 0x28, + 0x22, 0x92, 0x37, 0xf9, 0x5c, 0xe3, 0xa8, 0xbd, + 0x15, 0xec, 0xa6, 0xb7, 0x1b, 0x19, 0x90, 0xf4, + 0x63, 0x40, 0x3f, 0x55, 0x90, 0xe5, 0xa7, 0xf3, + 0x3b, 0x5f, 0xa2, 0xdf, 0x0d, 0x13, 0xdc, 0xca, + 0xf6, 0x82, 0xe6, 0x4f, 0xc8, 0x30, 0x61, 0x96, + 0x47, 0xb8, 0x17, 0x89, 0x28, 0x1c, 0x28, 0x06, + 0x82, 0xa3, 0xaf, 0x74, 0x9f, 0x2b, 0x9a, 0xe3, + 0xb2, 0xa7, 0x6c, 0xd2, 0x3e, 0x48, 0x8c, 0x2f, + 0x13, 0x80, 0xd1, 0xeb, 0x25, 0xa0, 0x16, 0xba, + 0xfd, 0xc2, 0x4f, 0x93, 0x2e, 0xea, 0xf4, 0x07, + 0xba, 0xaa, 0xe0, 0xc3, 0xa9, 0x0b, 0xb6, 0xb8, + 0xab, 0xee, 0x60, 0xed, 0x69, 0x1e, 0x63, 0x7c, + 0x83, 0x08, 0x02, 0x25, 0x2e, 0x63, 0x8c, 0x6f, + 0x69, 0xa0, 0xdd, 0x42, 0xe7, 0x6e, 0xb0, 0x55, + 0xb8, 0x8e, 0x7b, 0x1b, 0x07, 0x15, 0xd8, 0xef, + 0x1b, 0xf7, 0x3d, 0xee, 0x73, 0x8b, 0x41, 0x34, + 0x70, 0xa0, 0xa7, 0x64, 0x8e, 0x69, 0x22, 0x15, + 0xf3, 0x05, 0x59, 0xd9, 0x31, 0x7e, 0xf5, 0x55, + 0xb8, 0x63, 0x5b, 0xb1, 0x36, 0x35, 0x8c, 0xe6, + 0xb8, 0xd6, 0x49, 0xf9, 0xa2, 0xf9, 0x1d, 0x24, + 0xbe, 0xd8, 0x92, 0x22, 0x3c, 0xad, 0xf6, 0xe9, + 0x71, 0x7e, 0xe1, 0x5c, 0x1f, 0x2c, 0xe3, 0xa5, + 0x92, 0x37, 0x39, 0xae, 0x65, 0x1c, 0x5e, 0xf2, + 0x1a, 0x0f, 0x99, 0xc0, 0x82, 0x56, 0x20, 0x65, + 0x45, 0xf5, 0x5f, 0x46, 0x4c, 0x7a, 0x80, 0x9c, + 0x31, 0xfa, 0x39, 0x26, 0x59, 0xa0, 0xc6, 0xc8, + 0xc7, 0x96, 0x4c, 0xd8, 0xa4, 0x74, 0x8d, 0x83, + 0x29, 0xcd, 0x2d, 0x9d, 0x8d, 0xd0, 0xb4, 0xd7, + 0x4f, 0x15, 0x77, 0x12, 0x6c, 0x56, 0x36, 0x12, + 0xe7, 0x4c, 0x0e, 0x23, 0x9c, 0xe8, 0xfc, 0xbf, + 0xcc, 0x07, 0xf7, 0xae, 0xb3, 0xd8, 0xbc, 0xd4, + 0xd8, 0xd1, 0xfb, 0x51, 0x1d, 0xad, 0x37, 0x20, + 0x8a, 0xab, 0x27, 0xe4, 0xb9, 0x4e, 0xa5, 0x5d, + 0xa5, 0xb4, 0xee, 0xa7, 0x8d, 0x64, 0x89, 0x66, + 0x99, 0xfc, 0xd4, 0x2e, 0xc6, 0x2c, 0x92, 0x27, + 0xb1, 0xe3, 0xdb, 0xf6, 0xdd, 0x4b, 0xf9, 0x5d, + 0x57, 0x35, 0x70, 0xee, 0x7e, 0x16, 0x62, 0x88, + 0xbd, 0xb7, 0xd4, 0x4a, 0x64, 0x2e, 0xdb, 0xa8, + 0x71, 0x36, 0xfd, 0x2b, 0x3c, 0xff, 0x00, 0x92, + 0x65, 0xbd, 0xad, 0x04, 0xd9, 0xb7, 0x16, 0x5c, + 0x0f, 0x90, 0xe5, 0x8b, 0xee, 0xa7, 0xd9, 0x4f, + 0x8e, 0x84, 0x72, 0x63, 0xc8, 0xf3, 0x30, 0x63, + 0x8d, 0xd8, 0xa0, 0xcd, 0x24, 0x72, 0x89, 0x1c, + 0xe7, 0xb9, 0xb7, 0x69, 0x78, 0xb3, 0x40, 0x59, + 0xb7, 0x53, 0x71, 0x6b, 0x4d, 0x81, 0x37, 0x22, + 0x9a, 0x29, 0xc7, 0x3f, 0x93, 0x5a, 0xfb, 0x80, + 0x7d, 0x95, 0x5f, 0x7e, 0x39, 0x1c, 0x5d, 0xbc, + 0x54, 0x9a, 0x95, 0xb6, 0x24, 0xab, 0xea, 0x56, + 0xf3, 0x1b, 0x1d, 0x51, 0x28, 0xe7, 0x3d, 0x71, + 0x04, 0xdf, 0x7b, 0x0e, 0x8e, 0x09, 0x37, 0x3a, + 0x41, 0x7c, 0x74, 0x35, 0xa0, 0x59, 0xf7, 0x5a, + 0x78, 0x1c, 0x3f, 0x52, 0xdd, 0x7f, 0xbd, 0x68, + 0x38, 0xf8, 0x2c, 0x12, 0x64, 0xe4, 0xca, 0xc6, + 0x0b, 0xb5, 0xb5, 0x2b, 0xd0, 0x30, 0x8b, 0xa1, + 0x76, 0xc7, 0x6a, 0x35, 0xba, 0xc1, 0x7f, 0x8f, + 0xd9, 0x90, 0xec, 0xa9, 0x5d, 0x01, 0x35, 0xb0, + 0x75, 0x3b, 0x2d, 0x94, 0x6f, 0x2d, 0xc9, 0x78, + 0x71, 0x35, 0x05, 0x7c, 0xfd, 0xf4, 0xb4, 0x9e, + 0xb6, 0x27, 0xca, 0xae, 0xbe, 0xc6, 0xd3, 0x8f, + 0xc8, 0x2e, 0x8d, 0xad, 0x20, 0x53, 0x45, 0x53, + 0x90, 0x88, 0xe2, 0xce, 0x5f, 0x0f, 0x94, 0x9f, + 0x33, 0x68, 0x69, 0x45, 0x1f, 0x1b, 0x28, 0x2c, + 0x1a, 0xa9, 0xf9, 0x59, 0x1c, 0x64, 0x8b, 0xf7, + 0x48, 0xe9, 0xe0, 0xb4, 0xab, 0x93, 0x0b, 0xa8, + 0x63, 0x4c, 0x49, 0x4c, 0xd8, 0xd1, 0xca, 0x6e, + 0x5c, 0x2a, 0x68, 0xa6, 0x55, 0x38, 0xcb, 0xe2, + 0xb4, 0xd3, 0x6d, 0x49, 0xf2, 0xf6, 0xba, 0xb6, + 0xac, 0x54, 0xe6, 0x40, 0xe2, 0xc7, 0x06, 0xfa, + 0xa8, 0x68, 0xb3, 0xf8, 0xf1, 0xcb, 0x93, 0x9b, + 0x13, 0x25, 0x21, 0x8c, 0x6b, 0xb7, 0x96, 0x75, + 0x25, 0xab, 0x42, 0xe3, 0x46, 0x93, 0xd8, 0x24, + 0x58, 0x4e, 0x0e, 0xe4, 0x83, 0xdc, 0x03, 0x40, + 0x0e, 0x2c, 0x70, 0x35, 0x04, 0xa0, 0x39, 0xe5, + 0xf2, 0x29, 0xbc, 0x83, 0x7a, 0xe8, 0xb0, 0xdc, + 0xb4, 0xef, 0x25, 0xd4, 0x75, 0x07, 0x55, 0xb3, + 0xe6, 0x03, 0xfd, 0xb2, 0xe2, 0x00, 0x07, 0x42, + 0xb1, 0x1c, 0x99, 0x71, 0xa8, 0x00, 0x2d, 0x71, + 0xe5, 0xaa, 0xdd, 0xc1, 0x8e, 0x4b, 0x24, 0x67, + 0xe7, 0x74, 0x8e, 0x79, 0x05, 0xc5, 0x7c, 0x6c, + 0x20, 0x8a, 0x9a, 0x95, 0x2b, 0xd8, 0x4b, 0x8d, + 0x6d, 0xf5, 0x53, 0x35, 0x80, 0x35, 0x74, 0xe3, + 0xb2, 0xb2, 0x94, 0xe4, 0xcd, 0x34, 0xc5, 0xb9, + 0x11, 0x8b, 0xd9, 0x53, 0x2c, 0xf3, 0x68, 0x99, + 0xcf, 0x1d, 0x49, 0x55, 0xdb, 0x09, 0x73, 0xc3, + 0x5a, 0x2a, 0xe3, 0x60, 0xaf, 0x1f, 0xe6, 0x4b, + 0x4c, 0x29, 0xf6, 0x22, 0x86, 0x22, 0xe2, 0x05, + 0x80, 0xea, 0xa6, 0x2c, 0x63, 0x6b, 0xe5, 0xaf, + 0x8a, 0x65, 0x27, 0x0e, 0xe8, 0xf1, 0x43, 0xdb, + 0x79, 0x45, 0xc8, 0x4b, 0xde, 0x2b, 0xa8, 0xf3, + 0x2d, 0x38, 0x3a, 0xee, 0x8a, 0x2c, 0x8a, 0xdb, + 0x11, 0xf9, 0x0f, 0x41, 0x6e, 0xa2, 0xeb, 0x82, + 0xd2, 0xd7, 0x01, 0x62, 0x0e, 0x85, 0x7d, 0x35, + 0x02, 0xba, 0x1e, 0x8a, 0x30, 0x6a, 0x6a, 0x7a, + 0xa3, 0x89, 0x64, 0xa7, 0xfe, 0x4b, 0x31, 0xb4, + 0x10, 0xbb, 0x73, 0x5b, 0x4d, 0x17, 0x11, 0xb8, + 0x05, 0xd3, 0x9d, 0x55, 0x2b, 0x61, 0xaf, 0xb2, + 0x21, 0x2c, 0x15, 0x5d, 0x06, 0x0a, 0x54, 0x8d, + 0x17, 0x61, 0xbd, 0x57, 0x2e, 0x70, 0x08, 0x4e, + 0x87, 0x0f, 0x60, 0x4b, 0x39, 0x21, 0x47, 0xb2, + 0xfd, 0x13, 0x42, 0xe4, 0xaf, 0x94, 0xf5, 0x33, + 0xe8, 0x56, 0x5d, 0x87, 0xfc, 0x6d, 0x16, 0xc5, + 0xbf, 0xa1, 0xb1, 0xff, 0x00, 0x15, 0x9f, 0xfb, + 0x39, 0x67, 0xb3, 0x42, 0xd0, 0x3e, 0x50, 0x33, + 0x64, 0xad, 0xbc, 0xc5, 0x67, 0xff, 0x00, 0xc5, + 0x72, 0x41, 0x14, 0xb9, 0x6e, 0x99, 0xdb, 0x41, + 0x00, 0x0f, 0xaa, 0x79, 0x90, 0xd1, 0xf9, 0xd7, + 0x96, 0x10, 0xe0, 0x5d, 0x55, 0xe3, 0xe5, 0x7a, + 0x9e, 0x87, 0x5b, 0xf5, 0x3f, 0x73, 0x49, 0xc5, + 0xcb, 0x61, 0x7b, 0x69, 0x54, 0xd7, 0x3e, 0x21, + 0x26, 0x11, 0x90, 0x54, 0xbe, 0x2b, 0xb4, 0xf7, + 0xaa, 0x45, 0xc5, 0x3a, 0x94, 0xd1, 0x68, 0xcc, + 0x26, 0x7c, 0x57, 0x47, 0x5d, 0xb6, 0xad, 0x7e, + 0x8a, 0xf8, 0xf6, 0x29, 0x99, 0x6a, 0x56, 0xe0, + 0xf2, 0x7d, 0x58, 0xdd, 0x07, 0x99, 0xa4, 0x9b, + 0xf8, 0xd5, 0x38, 0x48, 0x78, 0x80, 0x22, 0xe4, + 0x1d, 0x19, 0x25, 0xc6, 0x86, 0x8e, 0x1a, 0x0f, + 0x02, 0x9f, 0x2d, 0x0c, 0x4a, 0xf9, 0xef, 0x73, + 0x30, 0xe6, 0x7b, 0x7d, 0x41, 0x86, 0x89, 0x2e, + 0x07, 0xbc, 0x67, 0xde, 0xe1, 0xe5, 0xd8, 0x6d, + 0xd5, 0x39, 0xe4, 0x01, 0x38, 0x53, 0x06, 0x82, + 0x4e, 0xdb, 0x00, 0x97, 0x71, 0x8e, 0x8c, 0xc3, + 0x38, 0xa9, 0xdf, 0x4a, 0x1a, 0xd8, 0xd1, 0x00, + 0xb7, 0x9d, 0xcc, 0x27, 0x1f, 0xdb, 0xa5, 0x00, + 0x58, 0x3c, 0xdc, 0xf7, 0xc2, 0xf7, 0x6c, 0x14, + 0x26, 0xba, 0xad, 0xb7, 0x3b, 0x10, 0x31, 0x38, + 0x82, 0x6b, 0xf8, 0x2c, 0x16, 0x76, 0x2c, 0xaf, + 0x71, 0xdb, 0x57, 0x5c, 0xad, 0xe9, 0xd3, 0x77, + 0xd6, 0x39, 0x18, 0x64, 0x55, 0xf5, 0x2a, 0xfb, + 0xe6, 0x59, 0x0b, 0x9f, 0xea, 0x2a, 0x76, 0xb8, + 0x51, 0x55, 0x38, 0xf2, 0x45, 0xe6, 0x75, 0xbf, + 0x5a, 0xe8, 0x4a, 0x7a, 0x68, 0x17, 0x45, 0x70, + 0x78, 0xbe, 0x98, 0xe2, 0xcc, 0xd7, 0x1f, 0x43, + 0xa9, 0xe8, 0x01, 0xa5, 0xcf, 0x45, 0x7b, 0x8b, + 0xc0, 0xf6, 0xff, 0x00, 0xec, 0x48, 0x3c, 0xe7, + 0xd2, 0x0f, 0x40, 0xa3, 0xe3, 0xf1, 0x0c, 0xcf, + 0x13, 0x48, 0x3c, 0x83, 0xd2, 0x3b, 0xa6, 0xc0, + 0x50, 0x51, 0x75, 0xe0, 0xc5, 0x2b, 0x93, 0xfc, + 0x8e, 0x6c, 0xf9, 0xbf, 0x4a, 0x7f, 0x88, 0x1a, + 0x10, 0x6a, 0xa8, 0x9e, 0x3d, 0xad, 0xcd, 0x64, + 0xad, 0x15, 0x61, 0xae, 0xe6, 0xfd, 0x95, 0xf0, + 0x8a, 0xae, 0x8b, 0x55, 0x36, 0xa5, 0x1c, 0xf5, + 0xbb, 0xac, 0xeb, 0xb8, 0x8f, 0x9e, 0x89, 0x8d, + 0x31, 0xed, 0x68, 0x6d, 0x7b, 0x24, 0xfb, 0x48, + 0x3e, 0x1a, 0x27, 0xfc, 0xdb, 0x09, 0xf6, 0xdc, + 0x05, 0x87, 0x54, 0x8d, 0xe2, 0x84, 0x1f, 0xba, + 0xe4, 0xcf, 0xa3, 0x6e, 0xbe, 0xc7, 0x76, 0x1b, + 0x7f, 0x1a, 0xd7, 0x54, 0x33, 0xc5, 0xc4, 0x84, + 0x46, 0xd0, 0x5b, 0xb9, 0xc5, 0x34, 0xc7, 0xe1, + 0x9a, 0x6a, 0x5d, 0x01, 0xa0, 0xd7, 0xee, 0xad, + 0x7c, 0x7f, 0x86, 0x87, 0x32, 0x16, 0x4f, 0x23, + 0xf6, 0xd3, 0x40, 0x13, 0x5c, 0xdc, 0xe8, 0xb1, + 0xf2, 0x5d, 0x14, 0x8c, 0x75, 0x63, 0x35, 0x69, + 0x16, 0x0e, 0x04, 0x0d, 0x57, 0xcc, 0x76, 0x32, + 0x66, 0x9b, 0x37, 0x92, 0xd5, 0x53, 0xa1, 0xcd, + 0xda, 0xeb, 0xe6, 0xc6, 0xb9, 0xdd, 0xda, 0xb5, + 0xb6, 0xd0, 0x22, 0xc9, 0xe2, 0xe1, 0x61, 0xd9, + 0xec, 0x90, 0x75, 0xb2, 0x5a, 0xee, 0x35, 0xe5, + 0xc6, 0x90, 0x1b, 0x1a, 0x2d, 0x1b, 0xf9, 0xa8, + 0x63, 0xcb, 0x64, 0xde, 0xdf, 0xb8, 0xd6, 0xb4, + 0x82, 0x09, 0xd6, 0xaa, 0x23, 0xce, 0xc2, 0xe9, + 0x7d, 0xd3, 0x09, 0x0e, 0x04, 0xf9, 0x41, 0xf2, + 0x9d, 0xc6, 0xb5, 0xfb, 0x2a, 0xd3, 0x25, 0xe1, + 0x4e, 0x5b, 0x7e, 0x66, 0x38, 0x62, 0x35, 0xc9, + 0x61, 0x27, 0xf6, 0xb6, 0x31, 0x85, 0xd2, 0x42, + 0x5a, 0x01, 0xa5, 0x4f, 0x74, 0x83, 0xe4, 0x91, + 0x45, 0x1c, 0x91, 0x08, 0xdb, 0x4a, 0x83, 0xfa, + 0xd6, 0xc7, 0x92, 0xe5, 0xe3, 0x9f, 0x17, 0xf2, + 0xec, 0x8c, 0xb5, 0xc1, 0xe5, 0xc0, 0x9d, 0x4e, + 0x9a, 0xac, 0x67, 0xc8, 0xdd, 0x59, 0x62, 0x3d, + 0x68, 0x7f, 0x5a, 0xd7, 0x0e, 0x4c, 0x96, 0xc8, + 0x93, 0xb3, 0x75, 0x83, 0xa7, 0xab, 0x3f, 0xd8, + 0x5f, 0x53, 0x6a, 0x0b, 0xdf, 0x0f, 0x15, 0x8e, + 0x7a, 0x57, 0xd4, 0x34, 0x5a, 0xac, 0x73, 0x47, + 0x01, 0x77, 0x55, 0x65, 0x3e, 0x23, 0xbb, 0xd9, + 0x9c, 0x0f, 0xde, 0x0b, 0x55, 0x8e, 0x4b, 0x5c, + 0x0b, 0x8e, 0xab, 0x4c, 0xdf, 0x79, 0xf4, 0x58, + 0x52, 0xf1, 0x26, 0x68, 0xf8, 0xa1, 0x5e, 0x9d, + 0x74, 0x5a, 0x68, 0x24, 0xf6, 0xe1, 0x73, 0xb6, + 0xe8, 0xdd, 0x16, 0x67, 0x8a, 0x70, 0x34, 0xba, + 0xd4, 0x62, 0xb5, 0x8f, 0x69, 0x69, 0xf3, 0x34, + 0xb6, 0x85, 0x69, 0x8f, 0x63, 0x0c, 0xe2, 0xce, + 0x30, 0x38, 0xf2, 0x4d, 0x78, 0xa7, 0x98, 0x1d, + 0xc0, 0x0a, 0x50, 0x5e, 0x94, 0x5a, 0x04, 0x87, + 0x05, 0xae, 0x8f, 0x93, 0x63, 0x18, 0x7c, 0x80, + 0xba, 0xb7, 0xe9, 0xb6, 0xdf, 0x82, 0x7c, 0xb5, + 0x30, 0x20, 0xce, 0xaf, 0xe5, 0x25, 0xda, 0x68, + 0x76, 0x1a, 0x14, 0x9f, 0x88, 0x8c, 0x9f, 0x76, + 0x57, 0x1a, 0xf9, 0x4d, 0x3c, 0x6b, 0xd5, 0x3d, + 0x91, 0x81, 0xec, 0x73, 0x0d, 0xc3, 0x81, 0x04, + 0x7d, 0x52, 0x3c, 0x09, 0x84, 0x59, 0x2f, 0x63, + 0x98, 0x40, 0x78, 0x2d, 0xfb, 0xff, 0x00, 0xb2, + 0x02, 0x87, 0x3f, 0x23, 0x3f, 0x2e, 0x06, 0xea, + 0x91, 0xaa, 0xc1, 0xe5, 0x72, 0x4f, 0x81, 0xce, + 0xd9, 0x4b, 0x9e, 0xab, 0x7d, 0xce, 0xe2, 0x3c, + 0xc2, 0xe7, 0x01, 0x41, 0x4a, 0x2f, 0x3e, 0xe4, + 0xb0, 0xa6, 0x73, 0xdd, 0xb5, 0xa3, 0xc6, 0x8b, + 0xd0, 0xc1, 0x7c, 0xc9, 0x2f, 0x19, 0x8d, 0xeb, + 0x57, 0xb9, 0x42, 0x7c, 0xe7, 0x64, 0x03, 0xb8, + 0x5c, 0xdd, 0x77, 0x85, 0x13, 0x66, 0x9d, 0xb1, + 0xbb, 0x4d, 0x4a, 0xab, 0x34, 0x12, 0x42, 0x2a, + 0xea, 0x7d, 0x15, 0x8e, 0x1e, 0x42, 0x73, 0x98, + 0x3c, 0x0a, 0xd2, 0xcf, 0x25, 0xb2, 0x55, 0x65, + 0xfb, 0x9b, 0x32, 0xb2, 0xaa, 0xa5, 0x9d, 0x7d, + 0x13, 0x63, 0xe3, 0x2c, 0x70, 0x06, 0x47, 0xa5, + 0x6c, 0x14, 0xb4, 0xbd, 0x0d, 0x95, 0xac, 0x4e, + 0x3d, 0x99, 0x51, 0x4b, 0x2b, 0xa8, 0x7d, 0xa1, + 0x50, 0xa4, 0xe2, 0x46, 0x2b, 0xa4, 0x2d, 0x9e, + 0x37, 0x4a, 0xf7, 0x90, 0x18, 0xc1, 0xfa, 0xd5, + 0xf0, 0xf7, 0x15, 0xf2, 0xf6, 0x71, 0xa5, 0xa7, + 0x5e, 0xd5, 0xae, 0x9f, 0x28, 0xe6, 0xcb, 0x86, + 0xbe, 0x2e, 0xbd, 0xd3, 0xfa, 0xaf, 0x59, 0xb1, + 0x40, 0x50, 0xaf, 0xb4, 0x3f, 0x4a, 0x27, 0xb1, + 0x62, 0x71, 0x9e, 0xe6, 0x46, 0x38, 0x61, 0x91, + 0xd1, 0xee, 0x71, 0x94, 0xd9, 0xad, 0xa6, 0x81, + 0x56, 0xc6, 0x18, 0x8f, 0x64, 0xd9, 0xf9, 0x0c, + 0xdf, 0x1c, 0x54, 0x63, 0x23, 0x16, 0xa9, 0x3d, + 0x56, 0xcb, 0xb1, 0xa3, 0x70, 0xf4, 0x32, 0x78, + 0xb6, 0x42, 0x79, 0xe1, 0x64, 0xd1, 0x98, 0xdc, + 0x2b, 0xfe, 0xeb, 0x2d, 0x92, 0xdf, 0x6d, 0xee, + 0x61, 0xd1, 0xa6, 0x8b, 0x6b, 0x9d, 0x26, 0x24, + 0x8f, 0x0e, 0xc5, 0x61, 0x8c, 0x11, 0xe6, 0x69, + 0xef, 0xe0, 0xb0, 0xf9, 0xce, 0xa6, 0x5c, 0xa0, + 0xfe, 0xf2, 0xa6, 0x7d, 0x68, 0x9c, 0x6e, 0x6f, + 0xd4, 0x71, 0x66, 0xb7, 0x83, 0x75, 0xf1, 0x8c, + 0x96, 0x47, 0x8f, 0x11, 0xd9, 0xbe, 0x83, 0x45, + 0x5b, 0xe6, 0x7e, 0xe8, 0xc8, 0x87, 0x26, 0x3a, + 0xc6, 0xd9, 0x5a, 0x5a, 0x40, 0xf0, 0x51, 0xfc, + 0x62, 0x70, 0xec, 0x76, 0x80, 0x68, 0x45, 0x93, + 0xfe, 0x69, 0xf8, 0x6c, 0xe3, 0x59, 0x3e, 0x5c, + 0x7b, 0xe2, 0x63, 0x80, 0xb0, 0xa9, 0x15, 0x0b, + 0xc4, 0xe9, 0xaa, 0xff, 0x00, 0x69, 0x53, 0x2d, + 0x79, 0xcd, 0x9c, 0x23, 0xda, 0xed, 0xd1, 0x5f, + 0x06, 0xbe, 0x89, 0x7c, 0x98, 0x1d, 0xf9, 0x4f, + 0xbe, 0xe7, 0x56, 0xcb, 0xaa, 0x4f, 0x4b, 0x3d, + 0xd4, 0xd4, 0x55, 0x68, 0x31, 0xf9, 0x3e, 0x19, + 0xb5, 0xf7, 0x28, 0xfd, 0xed, 0x21, 0x9e, 0x5f, + 0x4d, 0x48, 0xa0, 0x52, 0xbf, 0x93, 0xf8, 0xfb, + 0x8b, 0x5d, 0xb0, 0x82, 0xd0, 0xe2, 0xe0, 0x1b, + 0xd5, 0xc1, 0x7b, 0xff, 0x00, 0xd6, 0xeb, 0xcf, + 0xfd, 0x6f, 0xf6, 0x3c, 0x57, 0x54, 0xb6, 0x83, + 0x27, 0x31, 0x9b, 0xab, 0xcd, 0x7c, 0x12, 0x4e, + 0x60, 0xbc, 0xca, 0xcd, 0xc6, 0xb6, 0x3f, 0xad, + 0x69, 0xb9, 0xa9, 0x31, 0x1f, 0x95, 0xbf, 0x10, + 0xd6, 0x32, 0xd6, 0x8a, 0x69, 0x42, 0x05, 0x16, + 0x67, 0x96, 0xfe, 0x6b, 0x07, 0x81, 0x54, 0xee, + 0xf5, 0x30, 0xd7, 0xad, 0xe4, 0xad, 0x15, 0x2d, + 0xf4, 0xe9, 0xf8, 0x9b, 0xe0, 0x51, 0x75, 0xa2, + 0xd8, 0x6f, 0xf1, 0x13, 0x48, 0x27, 0xff, 0x00, + 0xd9, 0xab, 0x61, 0x81, 0x0c, 0x99, 0x0e, 0x6b, + 0x1b, 0xaf, 0x52, 0xb2, 0x1f, 0x11, 0x6e, 0xe8, + 0x27, 0x1f, 0xf2, 0x0b, 0x7d, 0x0c, 0xb1, 0xf1, + 0xb8, 0x4d, 0x70, 0x15, 0x9e, 0x5f, 0x4f, 0x7b, + 0xaf, 0x9b, 0xc8, 0xa6, 0xe7, 0xad, 0x4b, 0xc6, + 0x38, 0x1d, 0xf1, 0xdc, 0x71, 0x8c, 0x8d, 0xce, + 0x04, 0xa7, 0x40, 0xbe, 0x1c, 0x79, 0x1e, 0x35, + 0x6b, 0x49, 0x0b, 0x29, 0xc5, 0x4b, 0x94, 0x65, + 0x0f, 0x73, 0x8b, 0x89, 0xbd, 0x2a, 0xb5, 0x4f, + 0x93, 0xfe, 0x8b, 0xdc, 0xe1, 0x42, 0x5b, 0xb7, + 0xf1, 0x5b, 0x51, 0x18, 0x64, 0xb3, 0x62, 0xde, + 0x2d, 0xce, 0x76, 0x74, 0x27, 0x69, 0x1b, 0xb7, + 0x38, 0xb8, 0x8a, 0x02, 0x08, 0x34, 0x5a, 0x14, + 0x97, 0x87, 0x04, 0xe4, 0x56, 0x50, 0x7d, 0xcd, + 0x94, 0x17, 0xb0, 0x00, 0xa7, 0x4a, 0xe6, 0x60, + 0x90, 0x4e, 0xc0, 0xde, 0x43, 0x68, 0x34, 0xf3, + 0x82, 0x0d, 0xe8, 0x2e, 0x9f, 0xa4, 0x1c, 0x9e, + 0xf8, 0xf2, 0xdf, 0x6f, 0x53, 0x9a, 0xe6, 0x93, + 0xa7, 0xd8, 0xa0, 0x24, 0xe6, 0xdc, 0x3f, 0x2c, + 0xf8, 0x76, 0x9b, 0x1f, 0x57, 0xd1, 0x79, 0xdf, + 0x27, 0x92, 0xf8, 0x1e, 0xe2, 0xc6, 0xda, 0xb7, + 0x2b, 0xd1, 0x72, 0xc0, 0xca, 0xc4, 0x64, 0xc0, + 0x91, 0xbd, 0xb7, 0x1e, 0x22, 0xc5, 0x61, 0xf9, + 0x9e, 0x36, 0x47, 0x17, 0x10, 0x68, 0x3c, 0x02, + 0xea, 0xc1, 0x7c, 0x89, 0x7d, 0x1f, 0xe9, 0x99, + 0xdd, 0x2f, 0x53, 0x1f, 0x99, 0x96, 0xf9, 0x89, + 0xae, 0xb7, 0x52, 0x70, 0x87, 0xff, 0x00, 0xd0, + 0x65, 0x7c, 0x51, 0x9f, 0x84, 0xf8, 0x3c, 0xce, + 0x14, 0x1a, 0x0b, 0x23, 0x85, 0x15, 0xe4, 0x19, + 0x4b, 0x8a, 0x15, 0xd4, 0xed, 0x95, 0xe5, 0xa5, + 0xb2, 0x25, 0x3a, 0x7e, 0x46, 0x37, 0x4b, 0xc5, + 0x6e, 0x3e, 0xd0, 0x6f, 0x38, 0x99, 0x62, 0x66, + 0x2e, 0x4e, 0xfb, 0xb8, 0xb4, 0xd0, 0xfd, 0x94, + 0x5c, 0x57, 0x21, 0x06, 0x0b, 0xdf, 0x24, 0x91, + 0x7b, 0xae, 0x20, 0x86, 0xdf, 0x41, 0xd5, 0x50, + 0x6b, 0xdc, 0xd0, 0x40, 0x36, 0x3a, 0xaf, 0x9a, + 0x75, 0x51, 0xd6, 0xea, 0x3a, 0xf6, 0x3b, 0x77, + 0xbf, 0xd9, 0x9a, 0xf5, 0x6a, 0x3e, 0x13, 0x38, + 0x1e, 0x4b, 0x25, 0x5a, 0xa5, 0xf6, 0x28, 0xd4, + 0x6e, 0xce, 0x5f, 0x0a, 0x3c, 0x79, 0x60, 0x6e, + 0x39, 0xfe, 0x31, 0x24, 0xba, 0xb7, 0xba, 0xab, + 0x81, 0x9d, 0x1e, 0x3b, 0x65, 0x86, 0x68, 0xfd, + 0xc8, 0x25, 0xf5, 0x32, 0xba, 0x78, 0x85, 0x48, + 0x6b, 0x54, 0x1f, 0x12, 0xba, 0xd6, 0x1c, 0x4a, + 0xae, 0xba, 0xc6, 0xfb, 0x95, 0xf2, 0x64, 0x6d, + 0x3d, 0x0b, 0x19, 0xb3, 0xc1, 0x34, 0x80, 0xe3, + 0xc7, 0xed, 0x46, 0xd1, 0x40, 0x3b, 0xac, 0x2e, + 0x70, 0x27, 0x32, 0x5f, 0xfd, 0x8a, 0xd9, 0x1e, + 0xeb, 0x1f, 0x9b, 0x4f, 0xcd, 0xcb, 0xd7, 0xcc, + 0xb3, 0xec, 0x25, 0xc6, 0xa9, 0x49, 0xd1, 0xd6, + 0x99, 0xb3, 0x70, 0x3b, 0xf8, 0xac, 0xc5, 0xae, + 0x2d, 0x71, 0xb0, 0x2b, 0x6f, 0x3c, 0x31, 0xf2, + 0x5c, 0x4c, 0xf8, 0x7f, 0xb4, 0xf6, 0x92, 0xd3, + 0xe2, 0x2e, 0x17, 0x9f, 0xf0, 0xb2, 0x7b, 0x72, + 0x90, 0x35, 0x21, 0x6e, 0xb8, 0x59, 0x69, 0x13, + 0x1c, 0x6f, 0x53, 0xe6, 0x5e, 0x17, 0x66, 0x70, + 0x77, 0x25, 0x69, 0xc6, 0x2c, 0x7b, 0xf8, 0x92, + 0xcb, 0xd7, 0xd7, 0xd8, 0xf3, 0x92, 0x27, 0x8a, + 0x47, 0x46, 0xf1, 0x47, 0x30, 0xd0, 0x8f, 0x10, + 0xac, 0x40, 0xc9, 0xb2, 0x24, 0x6c, 0x43, 0xf6, + 0x8d, 0xd6, 0xab, 0x96, 0xe2, 0x78, 0xd8, 0xf9, + 0x19, 0x1f, 0x92, 0xdf, 0x6e, 0x37, 0x52, 0x40, + 0xe2, 0x7d, 0x44, 0xfa, 0x87, 0xd9, 0x51, 0xc3, + 0x8b, 0x05, 0xd9, 0xcd, 0x76, 0x20, 0xfe, 0x15, + 0x00, 0xaf, 0x8a, 0xf6, 0xfb, 0x5d, 0xfa, 0xe3, + 0xea, 0xd7, 0x25, 0x5d, 0xb9, 0x5d, 0x24, 0x9f, + 0xc9, 0xe7, 0x61, 0xea, 0xab, 0xe6, 0x86, 0xb4, + 0xae, 0xac, 0x65, 0x81, 0xf0, 0xec, 0x4c, 0x98, + 0x07, 0xba, 0x0e, 0xe3, 0xd5, 0x60, 0xbe, 0x6b, + 0xc4, 0xc9, 0xc4, 0xf2, 0xc7, 0x15, 0xd7, 0x8e, + 0x9b, 0xa2, 0x3f, 0xf1, 0x2b, 0xd9, 0xf8, 0xd0, + 0x0c, 0x62, 0x83, 0xb2, 0xc0, 0x7f, 0x96, 0xf0, + 0xa4, 0x97, 0x37, 0x12, 0x78, 0xa2, 0x73, 0x83, + 0x58, 0x44, 0x8f, 0x02, 0xa0, 0x5d, 0x78, 0xf5, + 0xee, 0x65, 0xc9, 0x57, 0x5c, 0x97, 0x93, 0xaf, + 0x2e, 0x2a, 0x4c, 0xd1, 0x43, 0x46, 0x6f, 0xe2, + 0xaf, 0x73, 0x62, 0x90, 0x81, 0x5f, 0x3b, 0x6b, + 0xf4, 0x5a, 0xfe, 0x4e, 0x56, 0xcf, 0x95, 0x0b, + 0x5b, 0x52, 0xd6, 0xb4, 0x58, 0x2c, 0xbf, 0xc3, + 0x9a, 0xd3, 0x0c, 0xd5, 0xa7, 0xa8, 0x54, 0x2d, + 0x56, 0x36, 0x37, 0xbb, 0x9c, 0xda, 0xd6, 0x96, + 0x58, 0x5a, 0x39, 0x32, 0xc9, 0x7d, 0x0b, 0xdc, + 0xd2, 0xf1, 0x38, 0xc0, 0x96, 0x9d, 0xa6, 0x94, + 0x4f, 0xf2, 0x5a, 0xd6, 0xe0, 0x3a, 0xa2, 0xba, + 0x10, 0x0f, 0x71, 0xf4, 0x50, 0x60, 0xc0, 0xd6, + 0x01, 0x4b, 0x58, 0x28, 0xb9, 0x69, 0x5e, 0x64, + 0x6c, 0x01, 0xd4, 0x8d, 0xb7, 0x70, 0xd0, 0x9a, + 0xad, 0x6a, 0x63, 0x72, 0x5e, 0x0a, 0x36, 0x86, + 0x48, 0xf2, 0x6a, 0xef, 0x4e, 0xb5, 0x34, 0xa9, + 0x29, 0xb2, 0xab, 0x81, 0x8e, 0xc8, 0x60, 0x1b, + 0x45, 0x0b, 0xfc, 0xc7, 0xee, 0xad, 0x2b, 0x15, + 0x04, 0xbb, 0x99, 0x88, 0x3f, 0x1c, 0x3e, 0x95, + 0x2d, 0x34, 0xfb, 0x3a, 0xc9, 0x8a, 0xaf, 0x9f, + 0x1b, 0xa4, 0xc5, 0x7b, 0x5b, 0xad, 0x2b, 0xf8, + 0x20, 0x16, 0x71, 0xfe, 0x7c, 0x39, 0x23, 0xfe, + 0x93, 0xed, 0x5d, 0x76, 0x94, 0x93, 0x98, 0x33, + 0xc6, 0x09, 0x61, 0xee, 0x6c, 0x9a, 0xe3, 0x65, + 0xbb, 0x1a, 0x7a, 0xb9, 0x9b, 0x84, 0x9e, 0x57, + 0x81, 0xaa, 0x8b, 0x98, 0xc7, 0x6b, 0xda, 0xe2, + 0x19, 0x5a, 0x8b, 0xf5, 0x5a, 0x63, 0xc8, 0xe8, + 0xf4, 0x21, 0xd6, 0x4f, 0x36, 0xe7, 0x32, 0x32, + 0x26, 0xb4, 0xae, 0x04, 0x0b, 0x84, 0x8e, 0x39, + 0x1f, 0x13, 0xf7, 0x34, 0xd1, 0xc3, 0xa8, 0x5a, + 0x3e, 0x77, 0x1d, 0xad, 0x73, 0xbc, 0xba, 0x56, + 0xab, 0x2d, 0x3c, 0xac, 0x8d, 0xe7, 0x5f, 0x1f, + 0xaa, 0xda, 0xd9, 0xdd, 0xdc, 0xb7, 0xac, 0x41, + 0x9f, 0x8d, 0x6c, 0x34, 0x87, 0x37, 0x27, 0xac, + 0xae, 0x57, 0x19, 0x9b, 0x20, 0x6d, 0x4b, 0xca, + 0xce, 0x0e, 0x46, 0x36, 0x53, 0x5a, 0xf5, 0x0b, + 0xbf, 0xee, 0xf1, 0xf8, 0xab, 0xf9, 0xdc, 0x6e, + 0x51, 0xe2, 0x5e, 0xc3, 0xb9, 0x79, 0x09, 0x74, + 0x0f, 0x2a, 0x0f, 0xcf, 0xe4, 0x7f, 0x54, 0xa4, + 0xce, 0xe4, 0xd8, 0x4f, 0x55, 0xd0, 0xce, 0x63, + 0x85, 0xaa, 0x9e, 0x77, 0xee, 0x3c, 0x35, 0xf6, + 0x19, 0x3f, 0x90, 0xc9, 0x3a, 0x4a, 0xe1, 0xf7, + 0x54, 0xe4, 0x90, 0xb9, 0xc5, 0xc4, 0xd4, 0x9d, + 0x4a, 0xaa, 0x73, 0x59, 0x52, 0xb8, 0x76, 0x5b, + 0x3c, 0x51, 0xe6, 0x9d, 0xdc, 0x92, 0xb1, 0xc6, + 0xcb, 0x71, 0xb7, 0x1d, 0x97, 0xb7, 0x2d, 0x80, + 0xda, 0xb6, 0x5e, 0x8b, 0xc3, 0x3c, 0x7b, 0x71, + 0xd3, 0xbd, 0xc2, 0xf2, 0x36, 0x65, 0xb5, 0x92, + 0x31, 0xe3, 0x50, 0x42, 0xf4, 0xdf, 0x8e, 0x65, + 0x89, 0x62, 0x63, 0xab, 0xa8, 0x04, 0x2f, 0x3f, + 0xbf, 0x7e, 0x59, 0x39, 0xbd, 0x65, 0x1e, 0x87, + 0x51, 0xff, 0x00, 0x1d, 0xab, 0xf3, 0xa1, 0x27, + 0xf9, 0x17, 0x0d, 0xdf, 0x91, 0xc7, 0xce, 0x60, + 0x27, 0xdb, 0xab, 0x1d, 0x4e, 0x81, 0xcb, 0x39, + 0xf1, 0x49, 0xc4, 0x85, 0xcc, 0xea, 0xc3, 0x5a, + 0xaf, 0x4c, 0xc9, 0xc5, 0x87, 0x91, 0xe3, 0x1f, + 0x8d, 0x38, 0x0e, 0x6b, 0xdb, 0xa7, 0x6b, 0x2c, + 0x5f, 0x1f, 0xc0, 0x7f, 0x6b, 0x9e, 0x48, 0xd9, + 0x76, 0xb8, 0xd6, 0xab, 0x3c, 0xb9, 0x6d, 0x7c, + 0x35, 0xc6, 0xdc, 0xaa, 0xec, 0x6b, 0x86, 0xaa, + 0xb7, 0xb5, 0xbd, 0x6d, 0xbb, 0x35, 0xbc, 0x3c, + 0xa4, 0x80, 0xd2, 0xbb, 0xe4, 0xc3, 0x25, 0x99, + 0xac, 0x7b, 0x43, 0x9a, 0x41, 0x04, 0x1b, 0x8a, + 0x2a, 0x5c, 0x6b, 0x8c, 0x73, 0xb0, 0x77, 0x57, + 0xb2, 0x1a, 0x4c, 0xdb, 0x8f, 0x45, 0x95, 0x5c, + 0x24, 0x4b, 0x4b, 0x97, 0xe2, 0x62, 0x73, 0xf8, + 0x1f, 0xec, 0xd9, 0xb2, 0xbb, 0x1e, 0x83, 0x1f, + 0x24, 0x87, 0xc7, 0xe1, 0xe0, 0x9d, 0x70, 0x50, + 0x3d, 0xd2, 0x87, 0xbe, 0x87, 0xc4, 0x26, 0x7c, + 0xce, 0x18, 0xc9, 0xc7, 0x86, 0xa2, 0xb4, 0x75, + 0x3e, 0x80, 0xa9, 0xf8, 0xbc, 0x16, 0x40, 0x40, + 0x02, 0xaa, 0xe9, 0xbb, 0x33, 0x9a, 0xcf, 0x8d, + 0xbe, 0x07, 0x98, 0xf1, 0xd2, 0x9d, 0xa9, 0xaa, + 0x51, 0x9f, 0x94, 0xcc, 0x8c, 0xda, 0x32, 0xae, + 0x17, 0x60, 0xa7, 0x5a, 0x5a, 0xa1, 0x36, 0x95, + 0xcd, 0x87, 0x0e, 0x47, 0x93, 0xb6, 0xad, 0xa0, + 0x54, 0xb8, 0x7c, 0x76, 0xca, 0xf3, 0x3b, 0x80, + 0x2d, 0x60, 0x0d, 0x68, 0xf1, 0xa9, 0x3f, 0xf9, + 0x5d, 0x09, 0x42, 0x32, 0x6e, 0x46, 0xb0, 0x37, + 0x6c, 0x2c, 0x6d, 0xec, 0xd0, 0x2f, 0xaa, 0x91, + 0x7c, 0x5f, 0x54, 0x90, 0x0b, 0xe1, 0x15, 0x14, + 0x5f, 0x50, 0x80, 0xcf, 0xf3, 0x50, 0xc7, 0x8f, + 0x92, 0xc9, 0x40, 0xd9, 0x1b, 0xc7, 0xa8, 0x77, + 0x1a, 0xe8, 0xac, 0xec, 0x19, 0x38, 0x0c, 0x90, + 0x83, 0xb8, 0x0a, 0x38, 0x0d, 0x6d, 0xa2, 0xb9, + 0xc8, 0x61, 0x0c, 0xc8, 0x76, 0x07, 0x6d, 0x70, + 0x35, 0x69, 0xe8, 0x93, 0x47, 0x93, 0x93, 0x81, + 0x23, 0xa3, 0x37, 0x15, 0x01, 0xed, 0xed, 0xd2, + 0xc5, 0x01, 0x9c, 0xe7, 0xb8, 0xad, 0xc1, 0xc0, + 0x35, 0xde, 0x24, 0x85, 0x80, 0xe4, 0xb8, 0xa9, + 0x58, 0xf3, 0x46, 0xb8, 0x9e, 0xe4, 0x1a, 0x2f, + 0x77, 0x91, 0xac, 0x96, 0x30, 0xe1, 0x42, 0xd7, + 0x0a, 0xa4, 0xf9, 0xb8, 0xd1, 0x54, 0xff, 0x00, + 0x0d, 0xbf, 0x80, 0x55, 0x76, 0x82, 0x52, 0x93, + 0xc1, 0xe4, 0xc4, 0x9d, 0xa4, 0x8f, 0x6d, 0xdf, + 0x81, 0x51, 0x9c, 0x49, 0xff, 0x00, 0x71, 0xc3, + 0xec, 0xbd, 0x83, 0x2b, 0x1a, 0x10, 0xe2, 0x76, + 0x33, 0xec, 0x02, 0x5f, 0x97, 0x1c, 0x2f, 0x8f, + 0x60, 0x63, 0x41, 0x07, 0xb2, 0xa7, 0x94, 0xd5, + 0x63, 0xd0, 0xf2, 0xf3, 0x89, 0x93, 0xfd, 0x37, + 0x7e, 0x0a, 0xff, 0x00, 0x15, 0xc1, 0x66, 0xe7, + 0xb8, 0xb5, 0xa0, 0xb1, 0x83, 0xd4, 0x4d, 0x96, + 0xea, 0x66, 0x44, 0xc8, 0xaa, 0xd8, 0xc1, 0xfb, + 0x2f, 0x98, 0x79, 0x90, 0xc3, 0xfc, 0x37, 0x37, + 0x61, 0x26, 0xb5, 0x1e, 0x28, 0xf2, 0x38, 0xd0, + 0x56, 0x8b, 0x92, 0xe5, 0xb0, 0x80, 0xfc, 0x14, + 0xec, 0xb4, 0xd5, 0x77, 0x64, 0x9f, 0x94, 0xf8, + 0xee, 0x5f, 0x1f, 0x57, 0x38, 0x6f, 0x67, 0x70, + 0xbd, 0x02, 0x69, 0xc8, 0x7b, 0x5c, 0xd7, 0x6e, + 0x6b, 0xae, 0x48, 0x50, 0xe7, 0x46, 0xcc, 0xb8, + 0x08, 0x37, 0xb7, 0x55, 0x9a, 0xcb, 0x65, 0xb9, + 0xd3, 0xe0, 0xc6, 0xd6, 0x9b, 0x9e, 0x65, 0xed, + 0x48, 0x74, 0x69, 0xfc, 0x16, 0xe7, 0xe2, 0x99, + 0x32, 0x37, 0x05, 0x84, 0xd4, 0x39, 0xb6, 0x35, + 0xf0, 0x54, 0xc4, 0x4c, 0x63, 0x8b, 0x4b, 0x06, + 0xe6, 0x78, 0x26, 0x3c, 0x69, 0x69, 0x8d, 0xd4, + 0x1b, 0x68, 0x74, 0x4c, 0x96, 0x56, 0xaa, 0xf8, + 0x33, 0xc3, 0x47, 0x4c, 0x9c, 0x5f, 0xb1, 0xbd, + 0xe2, 0x32, 0xfd, 0xe8, 0x6e, 0x54, 0x7c, 0x84, + 0x6d, 0x69, 0x2e, 0x02, 0xe7, 0xaa, 0xa3, 0xc0, + 0xcb, 0xe4, 0x0d, 0x1a, 0xa6, 0xf9, 0xb1, 0x07, + 0x46, 0x1c, 0x2e, 0xa8, 0xb5, 0x46, 0xaf, 0x46, + 0x2f, 0xc6, 0x6e, 0xc7, 0xb5, 0xd5, 0xad, 0xc2, + 0x6c, 0xf6, 0x6e, 0x15, 0x1e, 0x09, 0x6c, 0x30, + 0x1d, 0x8e, 0x77, 0x63, 0xa2, 0x73, 0x8c, 0xd2, + 0xf8, 0xda, 0x75, 0xb2, 0x9a, 0xa6, 0x46, 0x4b, + 0x2d, 0x19, 0xcb, 0x31, 0x84, 0xf0, 0x16, 0x1d, + 0x46, 0x8a, 0x5c, 0x4c, 0x7d, 0x9e, 0xaa, 0xdb, + 0x52, 0xac, 0xe3, 0xc3, 0xb4, 0x54, 0xaf, 0xb9, + 0x8f, 0x6c, 0x38, 0xd2, 0x3b, 0x47, 0x10, 0x43, + 0x57, 0x45, 0x2b, 0x07, 0x26, 0x47, 0x2c, 0x5d, + 0xc9, 0x67, 0xb6, 0x66, 0xb6, 0x1c, 0x73, 0x50, + 0x0d, 0x0d, 0xa9, 0x53, 0xd8, 0x26, 0x5c, 0x6c, + 0x2f, 0x87, 0x11, 0x8c, 0x78, 0xa3, 0xae, 0x48, + 0xfa, 0xa5, 0x3c, 0x74, 0x47, 0x27, 0x35, 0xae, + 0x94, 0x87, 0x47, 0x10, 0x2e, 0x03, 0xfe, 0x5a, + 0x0f, 0xaa, 0xd0, 0x2b, 0x99, 0x82, 0x10, 0x84, + 0x00, 0x84, 0x21, 0x00, 0x24, 0xbc, 0xe6, 0x3d, + 0x64, 0x64, 0xc7, 0xd0, 0x35, 0x03, 0xa9, 0xf1, + 0x4e, 0x97, 0x0f, 0x8d, 0x92, 0x0d, 0xaf, 0x01, + 0xc3, 0xb1, 0x40, 0x2d, 0xe2, 0xe6, 0x64, 0xb1, + 0x98, 0x09, 0xa3, 0xbd, 0x4d, 0x07, 0x5a, 0x75, + 0x0b, 0xee, 0x56, 0x31, 0x70, 0x36, 0x15, 0xea, + 0xab, 0x66, 0xf1, 0xf3, 0x62, 0x4a, 0xdc, 0x8c, + 0x52, 0xed, 0xa0, 0xda, 0x97, 0xa7, 0x85, 0xd5, + 0x9c, 0x5e, 0x41, 0xb9, 0x5b, 0x23, 0x94, 0x6d, + 0x91, 0xd5, 0x1f, 0x71, 0xd1, 0x1a, 0x92, 0x53, + 0x81, 0x16, 0x76, 0x19, 0xbd, 0xa9, 0xdd, 0x24, + 0xc8, 0x85, 0xcd, 0x24, 0x10, 0xb6, 0xd9, 0x58, + 0xa0, 0xd6, 0xd7, 0x48, 0xb3, 0xf0, 0x85, 0x6b, + 0xb0, 0xac, 0xad, 0x43, 0x5a, 0xdc, 0xcd, 0xb8, + 0x01, 0xd3, 0xec, 0xa1, 0x7c, 0x6c, 0x2e, 0xa9, + 0x6d, 0xd3, 0x19, 0xe1, 0x00, 0x9f, 0x21, 0xb2, + 0xa8, 0xe6, 0x53, 0xa5, 0x02, 0xa7, 0x16, 0x5e, + 0x53, 0x38, 0x8e, 0x8d, 0x14, 0x22, 0xad, 0x3d, + 0x17, 0x42, 0xad, 0x24, 0x1f, 0x4d, 0x2c, 0xa1, + 0x93, 0x22, 0x38, 0xe9, 0xb8, 0xae, 0xe0, 0x9e, + 0x29, 0x7c, 0x83, 0x53, 0xe9, 0x55, 0xb5, 0x19, + 0xa6, 0x3b, 0x25, 0xa0, 0xb7, 0x35, 0x82, 0x39, + 0x3d, 0xc0, 0x3c, 0x4a, 0xb5, 0x89, 0xed, 0x3d, + 0xa1, 0xd1, 0x68, 0xe1, 0x71, 0xe2, 0xba, 0xcb, + 0xc7, 0x26, 0xad, 0x23, 0xc1, 0x45, 0xc4, 0x62, + 0xc8, 0xc6, 0xbc, 0x10, 0x7d, 0x46, 0x8a, 0xab, + 0x4d, 0x19, 0xad, 0xa1, 0xb5, 0x64, 0x6a, 0x38, + 0x96, 0xfb, 0x6c, 0x0e, 0xf1, 0xba, 0x7c, 0x08, + 0x7c, 0x74, 0x1d, 0x6f, 0x44, 0x9b, 0x8a, 0x8c, + 0xec, 0xda, 0x41, 0xba, 0x75, 0x85, 0x13, 0x87, + 0x94, 0xff, 0x00, 0xa0, 0xad, 0x54, 0x67, 0x7b, + 0x1d, 0x41, 0x8d, 0xe4, 0x26, 0x9a, 0xea, 0xaf, + 0xe2, 0xc5, 0xb6, 0x20, 0x17, 0x51, 0x45, 0x4b, + 0x74, 0x53, 0xb1, 0xad, 0x63, 0x4d, 0x6c, 0x05, + 0xc9, 0x5b, 0x56, 0xa7, 0x3d, 0xef, 0x27, 0x13, + 0x4d, 0x1e, 0x3c, 0x26, 0x47, 0x9a, 0x01, 0xd7, + 0xc5, 0x26, 0x12, 0xe5, 0xe7, 0xb8, 0xb1, 0xae, + 0xa9, 0x71, 0xf2, 0x83, 0x60, 0x07, 0xd1, 0x49, + 0xca, 0xe5, 0x37, 0x22, 0x46, 0xc2, 0xcb, 0xb6, + 0x23, 0xb8, 0x8f, 0xde, 0xb5, 0xa8, 0xaf, 0xf1, + 0x70, 0x7b, 0x78, 0xfb, 0xdc, 0xc0, 0xd7, 0xbe, + 0xe4, 0xf5, 0x21, 0x68, 0x63, 0x24, 0xb8, 0x78, + 0x71, 0xe3, 0x32, 0x80, 0x79, 0x8e, 0xa7, 0xc5, + 0x59, 0x42, 0x10, 0x02, 0x10, 0x84, 0x00, 0x84, + 0x21, 0x00, 0x21, 0x08, 0x40, 0x7c, 0x73, 0x43, + 0x9a, 0x5a, 0x6e, 0x0d, 0x88, 0x59, 0xfc, 0xec, + 0x69, 0x70, 0xb3, 0x44, 0xf1, 0xd4, 0xc4, 0xfb, + 0xf7, 0xa1, 0x5a, 0x15, 0x1c, 0xf0, 0x32, 0x66, + 0x16, 0x3c, 0x54, 0x14, 0x05, 0x4c, 0x6c, 0xe8, + 0xb2, 0xc6, 0xc7, 0x8d, 0x8f, 0xe9, 0x5b, 0x54, + 0x2e, 0x72, 0x30, 0xda, 0xed, 0x6f, 0x55, 0x4f, + 0x2b, 0x8a, 0xca, 0x8c, 0x7f, 0xd6, 0x06, 0x40, + 0x49, 0x26, 0xf4, 0x20, 0x78, 0x28, 0x61, 0xe4, + 0x33, 0x30, 0xc6, 0xc7, 0x56, 0x48, 0xeb, 0xfc, + 0xb9, 0x2c, 0xe6, 0x8f, 0xa9, 0x40, 0x45, 0x99, + 0xc6, 0x34, 0xd6, 0x96, 0xee, 0x94, 0x65, 0x71, + 0x20, 0xd8, 0x56, 0xeb, 0x63, 0x1c, 0xd8, 0xb9, + 0x2c, 0xdc, 0xd7, 0x6c, 0x77, 0xed, 0x35, 0xdd, + 0x14, 0x6f, 0xc4, 0x63, 0xee, 0xd2, 0x1d, 0xf4, + 0x51, 0x08, 0x99, 0x3c, 0xfa, 0x7e, 0x1a, 0xa7, + 0x53, 0x55, 0xf6, 0x2e, 0x21, 0xed, 0xa1, 0x60, + 0x75, 0x7e, 0x8b, 0x74, 0xee, 0x35, 0xa4, 0xfa, + 0x41, 0xfb, 0x2e, 0xe3, 0xe3, 0x58, 0x2e, 0x40, + 0x50, 0xea, 0x5b, 0x99, 0x93, 0x7f, 0x16, 0xf9, + 0x22, 0x6b, 0x88, 0x21, 0xc3, 0x55, 0x2e, 0x27, + 0x12, 0x18, 0xd0, 0x68, 0x42, 0xd6, 0xfe, 0x42, + 0x3d, 0xb4, 0x14, 0x5f, 0x19, 0x86, 0x05, 0x80, + 0xd1, 0x53, 0xc6, 0x69, 0xe6, 0xd0, 0x5b, 0x85, + 0x85, 0xb0, 0x5d, 0x36, 0x8b, 0x1c, 0x34, 0xd4, + 0x2e, 0xa3, 0x11, 0x0a, 0x82, 0xe1, 0x56, 0xeb, + 0x75, 0x0c, 0xfc, 0xb6, 0x2c, 0x35, 0x6c, 0x67, + 0x7b, 0x86, 0xb4, 0xe9, 0x6a, 0xab, 0xaa, 0xc1, + 0x9d, 0xae, 0xd9, 0x66, 0x49, 0xa1, 0x80, 0x56, + 0x47, 0x00, 0x7b, 0x75, 0xfc, 0x12, 0x8c, 0xde, + 0x49, 0xf9, 0x12, 0x18, 0x58, 0xd2, 0x62, 0xa6, + 0x83, 0x53, 0xe0, 0x54, 0x38, 0xf0, 0xe4, 0x72, + 0x33, 0x7b, 0x8e, 0xb1, 0x7d, 0xe4, 0xae, 0x80, + 0x54, 0xd3, 0xf4, 0x27, 0x98, 0xd8, 0x38, 0xf8, + 0xed, 0x01, 0x8d, 0xab, 0x87, 0xed, 0x1d, 0x55, + 0x8a, 0x14, 0xb8, 0xee, 0x2d, 0xa0, 0x37, 0x22, + 0x7a, 0xba, 0x53, 0xd3, 0x41, 0xe0, 0x9a, 0x01, + 0x4d, 0x10, 0xbe, 0xa0, 0x04, 0x21, 0x08, 0x01, + 0x08, 0x42, 0x00, 0x42, 0x10, 0x80, 0x10, 0x84, + 0x20, 0x04, 0x21, 0x08, 0x01, 0x43, 0x91, 0x8b, + 0x0e, 0x43, 0x0b, 0x25, 0x6d, 0x6b, 0xa1, 0xea, + 0x14, 0xc8, 0x40, 0x20, 0x7f, 0x07, 0x97, 0x1b, + 0x9c, 0xd8, 0x9e, 0xd7, 0x30, 0x9a, 0x87, 0x1a, + 0x82, 0x3c, 0x0a, 0x89, 0xee, 0xcd, 0xc3, 0x98, + 0x39, 0xcd, 0x31, 0xd0, 0x50, 0xd2, 0xa4, 0x1e, + 0xab, 0x48, 0xb8, 0x92, 0x36, 0x48, 0xdd, 0xb2, + 0x34, 0x39, 0xa7, 0xa1, 0x40, 0x2a, 0x8b, 0x9c, + 0x25, 0xcd, 0x64, 0x8c, 0x04, 0xb8, 0x56, 0xdf, + 0x4a, 0xae, 0x66, 0xe6, 0x6c, 0xd7, 0x46, 0x19, + 0x4e, 0xa3, 0x53, 0xe2, 0x13, 0x07, 0x71, 0xb8, + 0x2e, 0xdd, 0x58, 0x5b, 0xe7, 0x14, 0x71, 0x16, + 0x24, 0x7d, 0x97, 0x2d, 0xe2, 0x38, 0xe6, 0x59, + 0xb0, 0x81, 0x6a, 0x6a, 0x7f, 0xdd, 0x00, 0xbe, + 0x3e, 0x75, 0xe1, 0xdb, 0x5c, 0xc0, 0xe2, 0xe3, + 0x40, 0x34, 0x3f, 0x55, 0xdc, 0xdc, 0x94, 0x93, + 0xcb, 0xf9, 0x78, 0xc1, 0x14, 0x27, 0x76, 0xdf, + 0x0e, 0x85, 0x32, 0xfc, 0x96, 0x2e, 0xbe, 0xd3, + 0x7e, 0xaa, 0x48, 0xe1, 0x8a, 0x3a, 0xfb, 0x6d, + 0x0d, 0xad, 0xcd, 0x06, 0xa5, 0x01, 0x9f, 0x97, + 0x17, 0x36, 0xa3, 0x6b, 0x1c, 0x2a, 0x77, 0x78, + 0x9a, 0xda, 0xea, 0xce, 0x1f, 0x0e, 0xf2, 0xe1, + 0x26, 0x49, 0xa3, 0x86, 0xa0, 0x75, 0xfa, 0xa7, + 0x34, 0x5f, 0x50, 0x11, 0x43, 0x04, 0x50, 0x8a, + 0x46, 0xd0, 0xde, 0x96, 0x52, 0xa1, 0x08, 0x01, + 0x08, 0x42, 0x00, 0x42, 0x10, 0x80, 0x10, 0x84, + 0x20, 0x04, 0x21, 0x08, 0x01, 0x08, 0x42, 0x00, + 0x42, 0x10, 0x80, 0x10, 0x84, 0x20, 0x04, 0x21, + 0x08, 0x01, 0x08, 0x42, 0x00, 0x42, 0x10, 0x80, + 0x10, 0x84, 0x20, 0x04, 0x21, 0x08, 0x01, 0x08, + 0x42, 0x00, 0x42, 0x10, 0x80, 0x10, 0x84, 0x20, + 0x3f, 0xff, 0xd9, +}; + +static const uint8_t data_images_cortex_jpg[] = +{ + /* /images/cortex.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x2e, 0x6a, + 0x70, 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x05, 0x03, 0x04, 0x04, 0x04, 0x03, 0x05, + 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, + 0x0c, 0x08, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0b, + 0x0b, 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, + 0x0f, 0x11, 0x11, 0x13, 0x16, 0x1c, 0x17, 0x13, + 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, + 0x1a, 0x1d, 0x1d, 0x1f, 0x1f, 0x1f, 0x13, 0x17, + 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, + 0x1e, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x05, 0x05, + 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08, 0x08, 0x0e, + 0x1e, 0x14, 0x11, 0x14, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xff, 0xc0, + 0x00, 0x11, 0x08, 0x00, 0x3e, 0x00, 0xc7, 0x03, + 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1f, 0x00, 0x00, 0x01, + 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, + 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, + 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, + 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, + 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, + 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, + 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, + 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, + 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, + 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, + 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, 0x00, 0x03, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, + 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, + 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, + 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, + 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, + 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, + 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, + 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, + 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, + 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xf7, + 0xaf, 0x8e, 0x5f, 0x15, 0x6e, 0x3e, 0x1b, 0xdd, + 0x69, 0x50, 0x41, 0xa2, 0xc5, 0xa8, 0x8b, 0xe4, + 0x91, 0xc9, 0x7b, 0x83, 0x1e, 0xcd, 0x85, 0x47, + 0x65, 0x39, 0xce, 0xea, 0xf3, 0x6f, 0xf8, 0x6a, + 0x1b, 0xff, 0x00, 0xfa, 0x13, 0xad, 0xbf, 0xf0, + 0x39, 0xbf, 0xf8, 0x8a, 0x3f, 0x6d, 0x7f, 0xf9, + 0x0a, 0x78, 0x63, 0xfe, 0xb8, 0xdc, 0x7f, 0xe8, + 0x51, 0xd7, 0xcf, 0x15, 0xec, 0x61, 0x70, 0xb4, + 0xa7, 0x49, 0x4a, 0x4b, 0x53, 0xe3, 0x73, 0x4c, + 0xd3, 0x15, 0x43, 0x15, 0x3a, 0x74, 0xe7, 0x64, + 0xad, 0xd1, 0x76, 0x5e, 0x47, 0xd0, 0xff, 0x00, + 0xf0, 0xd4, 0x37, 0xff, 0x00, 0xf4, 0x27, 0x5b, + 0x7f, 0xe0, 0x73, 0x7f, 0xf1, 0x14, 0x7f, 0xc3, + 0x50, 0xdf, 0xff, 0x00, 0xd0, 0x9d, 0x6d, 0xff, + 0x00, 0x81, 0xcd, 0xff, 0x00, 0xc4, 0x57, 0xcf, + 0x14, 0x57, 0x47, 0xd4, 0xa8, 0x7f, 0x2f, 0xe6, + 0x70, 0x7f, 0x6d, 0x63, 0x7f, 0xe7, 0xe7, 0xe0, + 0xbf, 0xc8, 0xfa, 0x1f, 0xfe, 0x1a, 0x86, 0xff, + 0x00, 0xfe, 0x84, 0xeb, 0x6f, 0xfc, 0x0e, 0x6f, + 0xfe, 0x22, 0x8f, 0xf8, 0x6a, 0x1b, 0xff, 0x00, + 0xfa, 0x13, 0xad, 0xbf, 0xf0, 0x39, 0xbf, 0xf8, + 0x8a, 0xf9, 0xe2, 0x8a, 0x3e, 0xa5, 0x43, 0xf9, + 0x7f, 0x30, 0xfe, 0xda, 0xc6, 0xff, 0x00, 0xcf, + 0xcf, 0xc1, 0x7f, 0x91, 0xf4, 0x3f, 0xfc, 0x35, + 0x0d, 0xff, 0x00, 0xfd, 0x09, 0xd6, 0xdf, 0xf8, + 0x1c, 0xdf, 0xfc, 0x45, 0x7a, 0x5f, 0x81, 0x7e, + 0x2b, 0xb7, 0x88, 0x3e, 0x1e, 0x4d, 0xe2, 0xbb, + 0x8d, 0x0a, 0x48, 0x9d, 0x35, 0x1f, 0xb0, 0xa5, + 0xad, 0xbc, 0x86, 0x42, 0xc7, 0x6a, 0x10, 0x73, + 0xb7, 0x3c, 0xee, 0xc6, 0x30, 0x72, 0x70, 0x07, + 0x26, 0xbe, 0x7e, 0xd1, 0x2d, 0xee, 0x8e, 0x91, + 0x64, 0x89, 0xa3, 0xea, 0x0f, 0x68, 0x61, 0x82, + 0x29, 0x22, 0x40, 0x9f, 0x66, 0x98, 0xcb, 0x1b, + 0x36, 0xf6, 0x26, 0x32, 0x4f, 0xdd, 0x3b, 0x9b, + 0x39, 0x53, 0x8c, 0x1e, 0x06, 0x3d, 0x9b, 0xf6, + 0x40, 0x8e, 0x39, 0x7e, 0x14, 0x5e, 0xc7, 0x2a, + 0x2b, 0xa3, 0x6a, 0xd3, 0x06, 0x56, 0x19, 0x04, + 0x79, 0x51, 0x75, 0x15, 0xc5, 0x89, 0xa3, 0x4a, + 0x34, 0xdb, 0x8a, 0xb3, 0x3d, 0xbc, 0xb3, 0x19, + 0x89, 0xa9, 0x88, 0x8c, 0x6a, 0xce, 0xe9, 0xa7, + 0xd1, 0x23, 0xd7, 0xb4, 0x4d, 0x42, 0x3d, 0x53, + 0x4a, 0xb7, 0xd4, 0x22, 0x42, 0x89, 0x3a, 0x6e, + 0x00, 0x90, 0x7f, 0x22, 0x38, 0x23, 0xd0, 0x8e, + 0x08, 0xc1, 0x1d, 0x6a, 0xe5, 0x00, 0x00, 0x30, + 0x06, 0x00, 0xaf, 0x2d, 0xf8, 0xd7, 0xf1, 0xc7, + 0xc2, 0x1f, 0x0c, 0x31, 0x63, 0x78, 0x65, 0xd5, + 0x75, 0xd7, 0x4d, 0xf1, 0xe9, 0x96, 0x84, 0x6f, + 0x55, 0x23, 0x86, 0x95, 0xcf, 0x11, 0xa9, 0xf7, + 0xcb, 0x1e, 0xa1, 0x48, 0x07, 0x1e, 0x61, 0xf4, + 0xc7, 0xa9, 0x51, 0x5f, 0x12, 0xea, 0xff, 0x00, + 0xb6, 0x07, 0x8f, 0x64, 0xba, 0x67, 0xd2, 0xfc, + 0x39, 0xe1, 0x8b, 0x1b, 0x62, 0x7e, 0x58, 0xae, + 0x96, 0x7b, 0x87, 0x1f, 0x57, 0x59, 0x23, 0x07, + 0xfe, 0xf9, 0x15, 0xe8, 0x1f, 0xb3, 0xc7, 0xed, + 0x13, 0xe2, 0xef, 0x88, 0x3f, 0x10, 0x6c, 0xfc, + 0x27, 0xac, 0xf8, 0x6b, 0x48, 0x64, 0xb8, 0x8a, + 0x59, 0x64, 0xbc, 0xb0, 0x79, 0x22, 0x16, 0xea, + 0x88, 0x5b, 0x71, 0x47, 0x2f, 0xb8, 0x16, 0xda, + 0xbf, 0x78, 0x63, 0x70, 0x3d, 0xb1, 0x40, 0x58, + 0xfa, 0x6a, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0xf9, + 0xcf, 0xe2, 0xfc, 0xff, 0x00, 0x13, 0xd3, 0xe2, + 0x66, 0xaa, 0xbe, 0x1f, 0x1e, 0x2e, 0xfe, 0xca, + 0x0d, 0x07, 0x91, 0xf6, 0x28, 0xa7, 0x30, 0x63, + 0xc9, 0x8f, 0x76, 0xd2, 0xa3, 0x6f, 0xde, 0xdd, + 0x9c, 0x77, 0xcd, 0x7d, 0x19, 0x5d, 0x15, 0xa8, + 0x7b, 0x38, 0xc6, 0x57, 0xbd, 0xff, 0x00, 0x03, + 0x83, 0x09, 0x8e, 0xfa, 0xcd, 0x5a, 0x94, 0xf9, + 0x1a, 0xe4, 0x76, 0xbb, 0xeb, 0xbe, 0xdf, 0x70, + 0x51, 0x5f, 0x1e, 0x7e, 0xd4, 0x37, 0x7f, 0x1b, + 0x62, 0xf8, 0xb7, 0xaa, 0xc7, 0xe0, 0x91, 0xf1, + 0x07, 0xfb, 0x1f, 0xec, 0xb0, 0x79, 0x1f, 0xd9, + 0x16, 0xf7, 0x6d, 0x6f, 0xbf, 0xca, 0x1b, 0xb6, + 0x98, 0xd4, 0xae, 0x77, 0x75, 0xc7, 0x7a, 0xfa, + 0x8b, 0x5b, 0xf1, 0x97, 0x86, 0x3c, 0x3b, 0x6e, + 0xa3, 0x5d, 0xd7, 0xac, 0xad, 0x27, 0x48, 0xd4, + 0xbc, 0x2f, 0x26, 0xe9, 0xb9, 0x19, 0xcf, 0x96, + 0x32, 0xe7, 0xf2, 0xac, 0x63, 0x19, 0x49, 0xda, + 0x2a, 0xe7, 0x65, 0x4a, 0x90, 0xa7, 0x1e, 0x69, + 0xb4, 0x97, 0x99, 0xd0, 0xd1, 0x5f, 0x3d, 0xfc, + 0x6a, 0xd4, 0xbc, 0x7d, 0x7b, 0xe2, 0x9b, 0x5b, + 0xef, 0x05, 0x37, 0x8a, 0x64, 0xd1, 0xee, 0x74, + 0xc8, 0x26, 0x89, 0xf4, 0xf8, 0x6e, 0x3c, 0xa6, + 0x2d, 0xb8, 0xe7, 0xe5, 0x1c, 0x36, 0x0a, 0xe4, + 0x1e, 0x7a, 0x66, 0xbd, 0xe3, 0x42, 0x33, 0x9d, + 0x0e, 0xc0, 0xdd, 0x79, 0x9e, 0x79, 0xb6, 0x8f, + 0xcd, 0xf3, 0x01, 0x0f, 0xbb, 0x68, 0xce, 0x73, + 0xce, 0x73, 0xd6, 0xb6, 0xab, 0x87, 0xf6, 0x70, + 0x8c, 0x9b, 0xdf, 0xf0, 0x38, 0xf0, 0xb8, 0xf5, + 0x88, 0xad, 0x3a, 0x4a, 0x2d, 0x72, 0xf5, 0xe8, + 0xfd, 0x0b, 0x94, 0x57, 0xca, 0xbf, 0xb5, 0xdd, + 0xd7, 0xc5, 0xf8, 0x3e, 0x26, 0xd8, 0xaf, 0x80, + 0x47, 0x8e, 0x0e, 0x94, 0x74, 0x58, 0x8c, 0x9f, + 0xd8, 0x90, 0x5c, 0xbc, 0x1e, 0x7f, 0x9d, 0x3e, + 0xec, 0x98, 0x94, 0xae, 0xfd, 0xbb, 0x33, 0xdf, + 0x1b, 0x7d, 0xab, 0xe8, 0xaf, 0x86, 0xad, 0xa9, + 0x3f, 0xc3, 0x9f, 0x0c, 0xbe, 0xb3, 0xf6, 0xbf, + 0xed, 0x36, 0xd2, 0x2d, 0x0d, 0xe7, 0xda, 0xc3, + 0x09, 0xbc, 0xef, 0x25, 0x77, 0xf9, 0x81, 0xb9, + 0x0f, 0xbb, 0x39, 0xcf, 0x39, 0xce, 0x6b, 0x9c, + 0xef, 0x3c, 0x2f, 0xf6, 0xc2, 0xf8, 0x9b, 0xe3, + 0xef, 0x01, 0xf8, 0x8f, 0xc3, 0xd6, 0x9e, 0x0e, + 0xd6, 0x1e, 0xc2, 0x0b, 0xbb, 0x39, 0xa4, 0xb8, + 0x55, 0xb2, 0x86, 0x6d, 0xcc, 0xae, 0xa0, 0x1c, + 0xc8, 0x8c, 0x47, 0x04, 0xf4, 0xc5, 0x64, 0xea, + 0x7f, 0x16, 0x3e, 0x23, 0xc3, 0xe1, 0xff, 0x00, + 0x0b, 0x5d, 0x45, 0xae, 0x3a, 0xcd, 0x7d, 0xa0, + 0x5b, 0x5d, 0xdd, 0x37, 0xd8, 0x60, 0x3b, 0xe6, + 0x72, 0xfb, 0x9b, 0x1e, 0x5f, 0x19, 0xc0, 0xe0, + 0x60, 0x7b, 0x57, 0xa0, 0xfe, 0xd1, 0x63, 0xc7, + 0x27, 0x58, 0xd2, 0x3f, 0xe1, 0x12, 0xff, 0x00, + 0x84, 0x8f, 0xc9, 0xfb, 0x3c, 0x9e, 0x7f, 0xf6, + 0x5f, 0x9d, 0xb7, 0x76, 0xe1, 0x8d, 0xde, 0x5f, + 0x19, 0xc6, 0x7a, 0xd7, 0x89, 0x7c, 0x6c, 0x5f, + 0x8e, 0x87, 0x57, 0xd1, 0x3f, 0xe1, 0x1c, 0xff, + 0x00, 0x85, 0x93, 0xe4, 0xff, 0x00, 0xc2, 0x3d, + 0x6b, 0xf6, 0x8f, 0xec, 0xf3, 0x7b, 0xb7, 0xed, + 0x39, 0x93, 0x7e, 0xfd, 0x9c, 0x79, 0x9f, 0x77, + 0x39, 0xe7, 0xa6, 0x6b, 0xba, 0x94, 0x63, 0x42, + 0x31, 0xad, 0x24, 0xa5, 0x7e, 0x87, 0x89, 0x8a, + 0xa9, 0x53, 0x1f, 0x52, 0x78, 0x3a, 0x6e, 0x54, + 0xdc, 0x6c, 0xf9, 0x97, 0x5f, 0x25, 0xaa, 0xef, + 0xdc, 0xfb, 0x2b, 0x42, 0x9e, 0x5b, 0x9d, 0x12, + 0xc2, 0xe2, 0x76, 0xdd, 0x2c, 0xb6, 0xd1, 0xbb, + 0xb6, 0x31, 0x96, 0x2a, 0x09, 0x38, 0x1e, 0xf4, + 0x54, 0x3e, 0x15, 0xfb, 0x57, 0xfc, 0x23, 0x1a, + 0x57, 0xdb, 0xbc, 0xef, 0xb5, 0x7d, 0x8a, 0x1f, + 0x3f, 0xce, 0xcf, 0x99, 0xbf, 0x60, 0xdd, 0xbb, + 0x3c, 0xee, 0xce, 0x73, 0x9e, 0x73, 0x45, 0x71, + 0x37, 0x76, 0x7b, 0x51, 0x56, 0x49, 0x33, 0xe7, + 0x7f, 0xdb, 0x5f, 0xfe, 0x42, 0x9e, 0x18, 0xff, + 0x00, 0xae, 0x37, 0x1f, 0xfa, 0x14, 0x75, 0xf3, + 0xc5, 0x7d, 0x0f, 0xfb, 0x6b, 0xff, 0x00, 0xc8, + 0x53, 0xc3, 0x1f, 0xf5, 0xc6, 0xe3, 0xff, 0x00, + 0x42, 0x8e, 0xbe, 0x78, 0xaf, 0x7f, 0x05, 0xfc, + 0x08, 0xff, 0x00, 0x5d, 0x4f, 0xcf, 0xf3, 0xaf, + 0xf7, 0xea, 0x9f, 0x2f, 0xc9, 0x05, 0x14, 0x51, + 0x5d, 0x47, 0x96, 0x14, 0x51, 0x45, 0x00, 0x7a, + 0x66, 0x9b, 0x73, 0x64, 0x3c, 0x39, 0x6f, 0xa7, + 0x45, 0x6d, 0x3c, 0x57, 0xa5, 0x2d, 0xa2, 0x8d, + 0xfe, 0xc1, 0x14, 0xaa, 0x1a, 0x68, 0xdd, 0xb0, + 0x59, 0xa6, 0x1b, 0xb7, 0x90, 0x18, 0x31, 0x5f, + 0x90, 0x2e, 0x3b, 0xd7, 0xb6, 0xfe, 0xc7, 0x7f, + 0xf2, 0x4b, 0x2e, 0xff, 0x00, 0xec, 0x2f, 0x2f, + 0xfe, 0x8a, 0x8a, 0xbc, 0x73, 0xc3, 0xd3, 0x5d, + 0x5d, 0x78, 0x11, 0x05, 0xbd, 0xf6, 0xad, 0x78, + 0x90, 0x5a, 0xb2, 0xc9, 0x15, 0x8c, 0xf3, 0xda, + 0x08, 0x06, 0x0f, 0x0d, 0x24, 0x92, 0x79, 0x4c, + 0x07, 0x70, 0xb1, 0x92, 0x7d, 0x6b, 0xd8, 0xff, + 0x00, 0x63, 0xbf, 0xf9, 0x25, 0x97, 0x7f, 0xf6, + 0x17, 0x97, 0xff, 0x00, 0x45, 0x45, 0x5e, 0x66, + 0x2f, 0xf8, 0x52, 0xf5, 0x3e, 0xa3, 0x29, 0x5f, + 0xed, 0x50, 0xff, 0x00, 0x0b, 0xfd, 0x0f, 0x48, + 0xf8, 0x91, 0xe2, 0x58, 0xfc, 0x1d, 0xe0, 0x1d, + 0x73, 0xc5, 0x12, 0x46, 0xb2, 0xff, 0x00, 0x66, + 0x58, 0xcb, 0x70, 0x91, 0xb1, 0xc0, 0x92, 0x40, + 0xa7, 0x62, 0x67, 0xb6, 0xe6, 0xda, 0x3f, 0x1a, + 0xfc, 0xec, 0xf0, 0x26, 0x81, 0xae, 0x7c, 0x58, + 0xf8, 0xaf, 0x6b, 0xa5, 0xdd, 0x6a, 0x0f, 0x26, + 0xa5, 0xad, 0xdd, 0xbc, 0xf7, 0xf7, 0xd2, 0x2e, + 0xe2, 0x8a, 0x01, 0x79, 0x64, 0xc7, 0x4e, 0x14, + 0x10, 0xab, 0xc0, 0xce, 0xd5, 0xe0, 0x57, 0xdc, + 0x1f, 0xb5, 0x9c, 0x33, 0x4f, 0xfb, 0x3d, 0x78, + 0xad, 0x20, 0x04, 0xb2, 0xc3, 0x04, 0x8d, 0x8f, + 0xee, 0x2d, 0xc4, 0x4c, 0xdf, 0xf8, 0xe8, 0x35, + 0xf2, 0xcf, 0xec, 0x4d, 0x7d, 0x6b, 0x67, 0xf1, + 0xee, 0xce, 0x1b, 0x92, 0x03, 0xde, 0xe9, 0xd7, + 0x56, 0xd6, 0xf9, 0xff, 0x00, 0x9e, 0x98, 0x59, + 0x3f, 0xf4, 0x18, 0xde, 0xbc, 0x83, 0xeb, 0x8f, + 0xaf, 0xfc, 0x19, 0xf0, 0x8b, 0xe1, 0xc7, 0x84, + 0xf4, 0xb8, 0xac, 0xb4, 0xbf, 0x09, 0x69, 0x52, + 0x3a, 0x2e, 0x1e, 0xee, 0xee, 0xd9, 0x27, 0xb9, + 0x94, 0xf7, 0x2f, 0x23, 0x82, 0x4e, 0x4f, 0x38, + 0x18, 0x51, 0x9e, 0x00, 0x1c, 0x56, 0xde, 0x8d, + 0xe0, 0xaf, 0x08, 0x68, 0xba, 0xf3, 0xeb, 0xba, + 0x37, 0x86, 0x74, 0x8d, 0x37, 0x53, 0x92, 0x06, + 0xb7, 0x92, 0xe6, 0xce, 0xd1, 0x21, 0x79, 0x23, + 0x66, 0x56, 0x2a, 0xdb, 0x40, 0xdd, 0xca, 0x29, + 0xe7, 0xd2, 0xb7, 0xeb, 0xcf, 0xff, 0x00, 0x68, + 0xdd, 0x7e, 0xf3, 0xc3, 0x1f, 0x04, 0x3c, 0x55, + 0xac, 0x69, 0xf2, 0xbc, 0x37, 0x69, 0x67, 0xe4, + 0x43, 0x2a, 0x12, 0x1a, 0x26, 0x99, 0xd6, 0x10, + 0xea, 0x47, 0x42, 0xbe, 0x66, 0x41, 0xf5, 0x14, + 0x08, 0xf3, 0x2f, 0x8b, 0x9f, 0xb5, 0x4e, 0x83, + 0xe1, 0x8d, 0x62, 0xe3, 0x43, 0xf0, 0x8e, 0x91, + 0xff, 0x00, 0x09, 0x15, 0xdd, 0xb3, 0xb4, 0x57, + 0x17, 0x92, 0x5c, 0x79, 0x56, 0xb1, 0xb8, 0xe0, + 0x84, 0x20, 0x16, 0x97, 0x04, 0x10, 0x71, 0xb5, + 0x7d, 0x18, 0xd7, 0x07, 0xa0, 0xfe, 0xd8, 0xda, + 0xf8, 0xbd, 0x07, 0x59, 0xf0, 0x7e, 0x93, 0x77, + 0x69, 0xbb, 0x0e, 0x2c, 0x6e, 0x9e, 0x29, 0x14, + 0x7a, 0x8d, 0xdb, 0x83, 0x1f, 0x6f, 0x97, 0x3e, + 0xa2, 0xbc, 0xef, 0xf6, 0x4a, 0xf0, 0x7e, 0x93, + 0xe3, 0x0f, 0x8c, 0xf6, 0x1a, 0x7e, 0xb3, 0x69, + 0x0d, 0xde, 0x9d, 0xa7, 0xda, 0x4b, 0x7f, 0x25, + 0xac, 0xab, 0x98, 0xe6, 0x31, 0xed, 0x44, 0x56, + 0x1d, 0xd4, 0x34, 0x8a, 0xd8, 0xe8, 0x76, 0xe0, + 0xe4, 0x12, 0x0f, 0xd1, 0xdf, 0xb6, 0xb7, 0x82, + 0xf4, 0x1b, 0xcf, 0x83, 0xb7, 0x5e, 0x26, 0x4d, + 0x3e, 0xde, 0x0d, 0x53, 0x44, 0x96, 0xdc, 0xc1, + 0x3c, 0x51, 0x2a, 0xb3, 0x45, 0x24, 0xc9, 0x13, + 0x44, 0x48, 0xea, 0x98, 0x93, 0x70, 0x1e, 0xaa, + 0x3d, 0xe9, 0x0c, 0xf5, 0x4f, 0x02, 0xf8, 0xfb, + 0x40, 0xf1, 0xcf, 0x81, 0xcf, 0x8a, 0xfc, 0x2f, + 0x39, 0xba, 0xb7, 0x08, 0xe1, 0xe1, 0x94, 0x6c, + 0x96, 0x19, 0x95, 0x72, 0x61, 0x90, 0x73, 0xb5, + 0x86, 0x47, 0xa8, 0x20, 0x82, 0x09, 0x04, 0x13, + 0xe1, 0x3f, 0x0f, 0xbf, 0x6b, 0x5b, 0x7d, 0x6f, + 0x56, 0x95, 0x3c, 0x45, 0xe1, 0x58, 0x34, 0x6d, + 0x36, 0x1b, 0x09, 0xae, 0xe4, 0xb9, 0x8b, 0x50, + 0x33, 0xb9, 0x28, 0xb9, 0x58, 0xd5, 0x0c, 0x6a, + 0x0b, 0x31, 0xc2, 0x81, 0x91, 0xc9, 0x15, 0xe7, + 0xbf, 0xb0, 0xd6, 0xb3, 0x77, 0x6b, 0xf1, 0x03, + 0xc4, 0x5a, 0x12, 0xc8, 0x7e, 0xc5, 0xa8, 0x68, + 0x52, 0xdc, 0x48, 0x9d, 0xbc, 0xd8, 0x5d, 0x02, + 0x37, 0xb7, 0xcb, 0x2c, 0x83, 0xdf, 0x8f, 0x4a, + 0xf1, 0x5f, 0x86, 0xde, 0x1f, 0xff, 0x00, 0x84, + 0xaf, 0xc6, 0x3e, 0x1d, 0xf0, 0xd1, 0x9c, 0xdb, + 0xae, 0xa7, 0x79, 0x05, 0xb3, 0xcc, 0xa0, 0x13, + 0x1a, 0x31, 0x01, 0x98, 0x03, 0xc6, 0x42, 0xe4, + 0x8c, 0xf7, 0xc5, 0x01, 0x63, 0xeb, 0x4f, 0x86, + 0x7f, 0xb4, 0xbe, 0xb3, 0xe3, 0x3f, 0x18, 0xea, + 0xf6, 0x5f, 0xf0, 0x8b, 0x58, 0x59, 0x69, 0x76, + 0x7a, 0x35, 0xde, 0xa3, 0x0a, 0x1b, 0x96, 0x79, + 0xd8, 0xc2, 0xa0, 0x85, 0x67, 0xc0, 0x51, 0xbb, + 0x3c, 0xe1, 0x78, 0xf5, 0x3d, 0xfc, 0xe7, 0xc7, + 0xfe, 0x22, 0x6f, 0x16, 0xf8, 0xbe, 0xff, 0x00, + 0xc4, 0x4f, 0x66, 0xb6, 0x6d, 0x79, 0xe5, 0xe6, + 0x15, 0x93, 0x78, 0x5d, 0x91, 0xaa, 0x7d, 0xec, + 0x0c, 0xe7, 0x6e, 0x7a, 0x77, 0xaf, 0xa7, 0xbc, + 0x11, 0xf0, 0x5f, 0xe1, 0xaf, 0x83, 0x6e, 0x56, + 0xef, 0x43, 0xf0, 0xdc, 0x69, 0x77, 0xf6, 0x67, + 0xb5, 0x92, 0x79, 0xe7, 0x96, 0x66, 0x9a, 0x37, + 0x00, 0x38, 0x70, 0xec, 0x54, 0x86, 0xc7, 0x23, + 0x18, 0xf4, 0x00, 0x71, 0x5f, 0x3d, 0x7c, 0x75, + 0xb3, 0xb3, 0xd3, 0xfe, 0x2b, 0x6b, 0x96, 0x76, + 0x16, 0xb0, 0x5a, 0x5b, 0x46, 0x60, 0xf2, 0xe1, + 0x82, 0x30, 0x88, 0xb9, 0xb7, 0x8c, 0x9c, 0x28, + 0xe0, 0x72, 0x49, 0xfa, 0x9a, 0xf6, 0x72, 0x77, + 0x1e, 0x79, 0x2b, 0x6b, 0x6d, 0xfc, 0xb4, 0x3e, + 0x3b, 0x8b, 0xe1, 0x57, 0xd8, 0x42, 0x4a, 0x5e, + 0xed, 0xf6, 0xf3, 0xb3, 0xd7, 0xee, 0x3d, 0x63, + 0xe0, 0xc7, 0xc5, 0x99, 0xb5, 0xad, 0x53, 0x46, + 0xf0, 0x6b, 0xe8, 0x71, 0x5b, 0xc7, 0x15, 0x9f, + 0x94, 0x6e, 0xbe, 0xd6, 0x58, 0x9f, 0x2a, 0x2e, + 0xbb, 0x76, 0x0e, 0xbb, 0x7d, 0x78, 0xcf, 0x7a, + 0x67, 0x8e, 0x3e, 0x3f, 0xd9, 0xd8, 0xdf, 0xcb, + 0x63, 0xe1, 0x6d, 0x32, 0x3d, 0x45, 0x63, 0x6d, + 0xa6, 0xf6, 0xe2, 0x42, 0xb1, 0x31, 0xff, 0x00, + 0x61, 0x47, 0x2c, 0xbf, 0xed, 0x64, 0x7b, 0x02, + 0x30, 0x69, 0xde, 0x3e, 0xb4, 0xd1, 0xf4, 0x1f, + 0x80, 0x36, 0x7a, 0x9e, 0x9d, 0xa3, 0xe9, 0xd6, + 0xba, 0x9d, 0xee, 0x9d, 0x6b, 0x6c, 0x6e, 0xe2, + 0xb5, 0x45, 0x97, 0x12, 0xa2, 0xf9, 0xb9, 0x60, + 0x33, 0xf3, 0x26, 0xf0, 0x79, 0xfe, 0x2a, 0xf2, + 0x6f, 0x84, 0xde, 0x31, 0xd3, 0x3c, 0x13, 0xac, + 0xdc, 0x6a, 0xd7, 0x9a, 0x0f, 0xf6, 0xad, 0xd9, + 0x8c, 0x47, 0x6a, 0xde, 0x70, 0x4f, 0x23, 0x39, + 0xde, 0x46, 0x54, 0xf2, 0x46, 0xd1, 0x91, 0x82, + 0x06, 0xe1, 0xdc, 0xd6, 0xb4, 0xf0, 0xd4, 0xab, + 0x73, 0x55, 0x8c, 0x2f, 0x6d, 0x2d, 0x7d, 0xdf, + 0x73, 0x96, 0xbe, 0x65, 0x8a, 0xc2, 0x7b, 0x3c, + 0x2d, 0x4a, 0xc9, 0x5d, 0x5d, 0xca, 0xdb, 0x2b, + 0x68, 0xad, 0x6f, 0x2f, 0xc5, 0x6a, 0x7a, 0x57, + 0x85, 0x3f, 0x68, 0x56, 0x7d, 0x41, 0x2d, 0xfc, + 0x51, 0xa2, 0xc3, 0x05, 0xbb, 0x3e, 0xd7, 0xb9, + 0xb3, 0x66, 0x26, 0x1f, 0x73, 0x1b, 0x64, 0xb0, + 0xf5, 0xc1, 0xce, 0x33, 0x80, 0x4f, 0x15, 0xd5, + 0x7c, 0x51, 0xf8, 0xa9, 0xa9, 0x78, 0x2f, 0x50, + 0xb4, 0x31, 0x78, 0x7a, 0xd7, 0x53, 0xd2, 0xaf, + 0xe1, 0x13, 0x59, 0x5f, 0x47, 0x7c, 0x42, 0xc8, + 0x30, 0x32, 0x38, 0x42, 0x33, 0xc8, 0x23, 0x04, + 0x82, 0x18, 0x11, 0xdc, 0x0f, 0x0f, 0xf8, 0xbb, + 0xe3, 0x7d, 0x3f, 0xc7, 0x5a, 0x95, 0x96, 0xa3, + 0x6d, 0xa0, 0xff, 0x00, 0x66, 0x5d, 0x43, 0x1b, + 0x47, 0x71, 0x21, 0x98, 0x48, 0x67, 0x5e, 0x36, + 0x67, 0x0a, 0x3e, 0xef, 0xcd, 0xff, 0x00, 0x7d, + 0x7b, 0x57, 0xaf, 0x7c, 0x34, 0xd0, 0xe0, 0xf1, + 0xff, 0x00, 0xec, 0xfb, 0x6f, 0xa1, 0x6a, 0x6c, + 0x43, 0xc3, 0x24, 0xb1, 0xda, 0xdc, 0x30, 0xdc, + 0xd0, 0xba, 0x3b, 0x18, 0xd8, 0x7b, 0x00, 0xdb, + 0x70, 0x31, 0x95, 0xc8, 0xef, 0x4a, 0xb6, 0x1a, + 0x8d, 0x25, 0x1a, 0xb3, 0x85, 0x93, 0xd1, 0xab, + 0xfe, 0x26, 0x98, 0x2c, 0xc7, 0x17, 0x89, 0x95, + 0x5c, 0x2d, 0x2a, 0xdc, 0xcd, 0x2b, 0xc6, 0x56, + 0xb5, 0xf6, 0xd1, 0xa6, 0xbc, 0xfe, 0x4f, 0xad, + 0x8e, 0xcf, 0xe1, 0x97, 0xc4, 0x0d, 0x3b, 0xc6, + 0x5e, 0x14, 0x9f, 0x59, 0x91, 0x62, 0xd3, 0xe5, + 0xb3, 0x66, 0x5b, 0xd8, 0x5a, 0x60, 0xc2, 0x00, + 0x06, 0x43, 0xee, 0x20, 0x7c, 0xa5, 0x79, 0xc9, + 0x03, 0x90, 0xc3, 0xb5, 0x79, 0xfd, 0x87, 0xc7, + 0x8d, 0x47, 0x58, 0xf1, 0x1c, 0x7a, 0x3e, 0x83, + 0xe0, 0xe1, 0x78, 0xf7, 0x37, 0x06, 0x2b, 0x4d, + 0xf7, 0xa5, 0x19, 0xd7, 0x27, 0x0c, 0xc0, 0x21, + 0xdb, 0xf2, 0xfc, 0xc7, 0x92, 0x14, 0x67, 0x9e, + 0x33, 0x5e, 0x1b, 0x1d, 0xf6, 0xb1, 0xe1, 0xe7, + 0xd6, 0xb4, 0x58, 0x6e, 0xcc, 0x3f, 0x69, 0x56, + 0xb1, 0xbe, 0x48, 0xa4, 0xdc, 0x92, 0x04, 0x93, + 0x90, 0x08, 0xe0, 0xf2, 0xa4, 0x67, 0xba, 0xb3, + 0x0e, 0x84, 0xd7, 0xbe, 0x7e, 0xcc, 0x1e, 0x0d, + 0xb4, 0xb3, 0xd0, 0x4f, 0x8c, 0x6e, 0x1a, 0x29, + 0xef, 0x6f, 0xb7, 0x45, 0x6d, 0xb5, 0xb7, 0x7d, + 0x9e, 0x25, 0x62, 0xac, 0x3d, 0x03, 0xb1, 0x5e, + 0x7d, 0x00, 0x03, 0x8c, 0xb0, 0xa5, 0x5b, 0x09, + 0x43, 0x0f, 0x19, 0x54, 0x92, 0xba, 0x7b, 0x20, + 0xc1, 0x66, 0xd8, 0xdc, 0xc6, 0xad, 0x3c, 0x3d, + 0x37, 0xca, 0xd5, 0xf9, 0xdd, 0x97, 0x47, 0xe9, + 0xfd, 0x37, 0xd8, 0xf5, 0x97, 0x9b, 0x57, 0x5d, + 0x52, 0xd6, 0x21, 0x63, 0x6d, 0x25, 0x93, 0xc7, + 0xfe, 0x91, 0x38, 0x9c, 0xab, 0xc4, 0xf8, 0x3d, + 0x13, 0x6f, 0xcc, 0x09, 0xc0, 0xea, 0x31, 0x9e, + 0xf4, 0x56, 0x85, 0x15, 0xe2, 0x1f, 0x6c, 0x7c, + 0xcb, 0xfb, 0x6b, 0xff, 0x00, 0xc8, 0x53, 0xc3, + 0x1f, 0xf5, 0xc6, 0xe3, 0xff, 0x00, 0x42, 0x8e, + 0xbe, 0x78, 0xaf, 0xa1, 0xff, 0x00, 0x6d, 0x7f, + 0xf9, 0x0a, 0x78, 0x63, 0xfe, 0xb8, 0xdc, 0x7f, + 0xe8, 0x51, 0xd2, 0xfc, 0x16, 0xf0, 0x1f, 0x83, + 0x4f, 0x81, 0x74, 0xc9, 0xbc, 0x65, 0x63, 0x14, + 0xda, 0x87, 0x8a, 0x6e, 0xa5, 0x87, 0x4e, 0x2f, + 0xc3, 0x44, 0x8b, 0x1b, 0x60, 0x8e, 0x78, 0xc9, + 0x42, 0x41, 0xf5, 0x64, 0xaf, 0x6e, 0x85, 0x55, + 0x4b, 0x0f, 0x16, 0xcf, 0x88, 0xc7, 0x61, 0x27, + 0x8a, 0xcc, 0x6a, 0x42, 0x2e, 0xdb, 0x6f, 0xe8, + 0xbf, 0x53, 0xe7, 0x7a, 0x2b, 0xd9, 0x3e, 0x03, + 0x78, 0x26, 0xc2, 0x5f, 0x8c, 0x7a, 0xc7, 0x85, + 0xbc, 0x55, 0xa6, 0xc3, 0x7c, 0xb6, 0x16, 0x93, + 0xab, 0x47, 0x2a, 0x9d, 0xbb, 0xd2, 0x58, 0xd4, + 0x38, 0xfa, 0x82, 0x48, 0xf6, 0x35, 0xd3, 0x78, + 0xcb, 0xc1, 0x9e, 0x1d, 0xb9, 0xf8, 0x5d, 0xe2, + 0x0d, 0x6f, 0x57, 0xf0, 0x2c, 0x7e, 0x09, 0xd4, + 0x74, 0xe7, 0xc5, 0x84, 0x89, 0x74, 0x4f, 0xda, + 0x4f, 0x61, 0xb4, 0xf0, 0x77, 0x1e, 0x3a, 0x67, + 0xd0, 0xf0, 0x6b, 0x69, 0x62, 0x63, 0x19, 0xf2, + 0xfa, 0x7e, 0x27, 0x1d, 0x3c, 0xb2, 0xa5, 0x4a, + 0x4e, 0xa5, 0xed, 0x6b, 0xe9, 0xaf, 0x4d, 0xfa, + 0x59, 0x7c, 0xcf, 0x9d, 0x68, 0xaf, 0xa3, 0xf4, + 0x5f, 0x85, 0x5e, 0x1b, 0xf1, 0x5f, 0xc0, 0xfd, + 0x0a, 0x5b, 0x38, 0xad, 0x74, 0xff, 0x00, 0x13, + 0x5d, 0x42, 0xd2, 0x5b, 0x5c, 0x16, 0xda, 0x6e, + 0x64, 0x52, 0xe4, 0xc6, 0xde, 0xa0, 0xa8, 0xed, + 0xc8, 0xc6, 0x7a, 0x02, 0x0c, 0x9a, 0x77, 0xc2, + 0x3d, 0x07, 0xc3, 0x7f, 0x07, 0xfc, 0x47, 0x71, + 0xaf, 0x5b, 0xda, 0xde, 0xf8, 0xa2, 0x2d, 0x2e, + 0x4b, 0xb9, 0x01, 0x7d, 0xc6, 0xc4, 0xf9, 0x6e, + 0x63, 0x55, 0xc1, 0xeb, 0x95, 0x24, 0x9e, 0xe4, + 0x1c, 0x70, 0x05, 0x4f, 0xd7, 0x29, 0xed, 0xd6, + 0xf6, 0x34, 0x59, 0x3d, 0x77, 0x67, 0xa5, 0x9a, + 0xbd, 0xfe, 0x57, 0xb7, 0xa9, 0xe7, 0x26, 0x6d, + 0x3a, 0xdf, 0xc1, 0x7a, 0x65, 0xd6, 0xac, 0x9b, + 0xec, 0x96, 0x24, 0x8f, 0xec, 0x8d, 0x63, 0x14, + 0xf2, 0xee, 0x2a, 0x7f, 0xe5, 0xb7, 0x9d, 0xe6, + 0x44, 0x1f, 0x0c, 0xca, 0x4a, 0xa8, 0x00, 0x1d, + 0xa1, 0xb6, 0xf3, 0xed, 0x9f, 0xb1, 0xdf, 0xfc, + 0x92, 0xcb, 0xbf, 0xfb, 0x0b, 0xcb, 0xff, 0x00, + 0xa2, 0xa2, 0xaf, 0x99, 0x61, 0xd7, 0x3c, 0x4e, + 0xba, 0x50, 0xb3, 0x46, 0x95, 0xac, 0xb6, 0x28, + 0xc1, 0xb4, 0x46, 0x05, 0x54, 0x10, 0xa7, 0x25, + 0x72, 0x70, 0x09, 0x00, 0xe7, 0x80, 0x4d, 0x7d, + 0x35, 0xfb, 0x1d, 0xff, 0x00, 0xc9, 0x2c, 0xbb, + 0xff, 0x00, 0xb0, 0xbc, 0xbf, 0xfa, 0x2a, 0x2a, + 0xc7, 0x19, 0x17, 0x1a, 0x2e, 0xfd, 0xce, 0xdc, + 0x9a, 0xa2, 0x9e, 0x2e, 0x36, 0xec, 0xcf, 0x5a, + 0xf1, 0x0e, 0x93, 0x65, 0xaf, 0x68, 0x1a, 0x86, + 0x87, 0xa9, 0x46, 0x65, 0xb2, 0xd4, 0x2d, 0xa4, + 0xb5, 0xb8, 0x40, 0x70, 0x5a, 0x39, 0x14, 0xab, + 0x0c, 0xf6, 0xe0, 0x9e, 0x6b, 0xf3, 0x7b, 0xe2, + 0x37, 0x82, 0xfc, 0x57, 0xf0, 0x8b, 0xc7, 0xd1, + 0xd9, 0xdd, 0xc9, 0x71, 0x6d, 0x71, 0x6b, 0x71, + 0xf6, 0x8d, 0x27, 0x55, 0x89, 0x76, 0xad, 0xca, + 0xa3, 0x02, 0x92, 0xa1, 0xe4, 0x6e, 0x1f, 0x2e, + 0xe4, 0xe7, 0x69, 0xe0, 0xe4, 0x10, 0x4f, 0xe9, + 0x7d, 0x67, 0x78, 0x8b, 0x42, 0xd1, 0x7c, 0x47, + 0xa5, 0xc9, 0xa5, 0xeb, 0xfa, 0x4d, 0x96, 0xa9, + 0x63, 0x21, 0x05, 0xad, 0xee, 0xe0, 0x59, 0x50, + 0x91, 0xd0, 0xe1, 0x81, 0xc1, 0x1d, 0x8f, 0x51, + 0x5e, 0x31, 0xf6, 0x47, 0xcb, 0x3e, 0x0d, 0xfd, + 0xb0, 0x64, 0x87, 0x4d, 0x8a, 0xdf, 0xc5, 0xde, + 0x10, 0x7b, 0x9b, 0xc8, 0xd4, 0x06, 0xba, 0xd3, + 0x6e, 0x15, 0x56, 0x63, 0xea, 0x62, 0x7f, 0xb9, + 0xf8, 0x31, 0x1f, 0x4e, 0x95, 0xb9, 0xa7, 0x7c, + 0x5d, 0xb1, 0xfd, 0xa0, 0xe3, 0xf1, 0x0f, 0xc2, + 0xcb, 0x6f, 0x0f, 0x36, 0x8a, 0xba, 0x86, 0x89, + 0x3c, 0xd6, 0x77, 0x97, 0x57, 0x81, 0xc9, 0xb9, + 0x8d, 0xa3, 0x31, 0x06, 0x45, 0x4e, 0x14, 0x13, + 0xb8, 0x90, 0xc4, 0xe1, 0x08, 0xc5, 0x77, 0x17, + 0xdf, 0xb3, 0x2f, 0xc1, 0xcb, 0x99, 0xcc, 0xa9, + 0xe1, 0xbb, 0xab, 0x5c, 0x9c, 0x95, 0x83, 0x53, + 0xb9, 0x0a, 0x7f, 0x02, 0xe4, 0x0f, 0xa0, 0xc5, + 0x74, 0xbe, 0x01, 0xf8, 0x39, 0xf0, 0xdf, 0xc0, + 0xba, 0xa2, 0xea, 0xbe, 0x1a, 0xf0, 0xd4, 0x56, + 0xda, 0x8a, 0xa9, 0x55, 0xba, 0x9a, 0xe2, 0x59, + 0xe4, 0x50, 0x46, 0x0e, 0xd3, 0x23, 0x36, 0xdc, + 0x8e, 0x0e, 0xdc, 0x50, 0x33, 0xe1, 0x6f, 0x85, + 0x5e, 0x2a, 0xd5, 0x7e, 0x0f, 0xfc, 0x5d, 0x83, + 0x53, 0xd5, 0x74, 0xab, 0x94, 0x9f, 0x4e, 0x92, + 0x4b, 0x3d, 0x57, 0x4f, 0x6c, 0x2c, 0xbe, 0x5b, + 0x0c, 0x3a, 0x8c, 0xf1, 0x90, 0x76, 0xba, 0xf3, + 0x86, 0xda, 0xbc, 0xe0, 0xe6, 0xbd, 0x5f, 0xf6, + 0x98, 0xfd, 0xa1, 0x74, 0x1f, 0x1e, 0xf8, 0x11, + 0x7c, 0x21, 0xe1, 0x2b, 0x2d, 0x45, 0x61, 0xbc, + 0x9a, 0x29, 0xb5, 0x0b, 0x8b, 0xd8, 0x96, 0x30, + 0x12, 0x36, 0x0e, 0xb1, 0xa2, 0x86, 0x24, 0xb6, + 0xf5, 0x52, 0x5b, 0x80, 0x02, 0xe0, 0x6e, 0xdd, + 0x95, 0xfa, 0x7f, 0xe2, 0x17, 0xc2, 0xff, 0x00, + 0x01, 0xf8, 0xf9, 0xa3, 0x93, 0xc5, 0x7e, 0x1c, + 0xb5, 0xbe, 0xb8, 0x8d, 0x76, 0x25, 0xd2, 0xb3, + 0xc3, 0x3a, 0xa8, 0xc9, 0x0b, 0xe6, 0xc6, 0x55, + 0xf6, 0xe4, 0x93, 0xb4, 0x9c, 0x72, 0x78, 0xae, + 0x5b, 0x41, 0xfd, 0x9c, 0x7e, 0x0f, 0xe9, 0x17, + 0xa9, 0x78, 0x9e, 0x14, 0x17, 0xd2, 0xa3, 0x65, + 0x56, 0xfe, 0xee, 0x6b, 0x88, 0xc7, 0xb1, 0x8d, + 0xd8, 0xa3, 0x0f, 0xf7, 0x94, 0xd2, 0x03, 0xc7, + 0x7f, 0x62, 0x0f, 0x02, 0x6a, 0x16, 0xf6, 0x5a, + 0xff, 0x00, 0xc4, 0x5b, 0xf8, 0x24, 0x82, 0xda, + 0xe3, 0x4f, 0x7b, 0x0d, 0x33, 0x78, 0xc7, 0x9e, + 0x84, 0x87, 0x96, 0x50, 0x0f, 0xf0, 0xe6, 0x38, + 0xd4, 0x1e, 0xe7, 0x7f, 0xa7, 0x3e, 0x17, 0xfb, + 0x3a, 0x7f, 0xc9, 0x67, 0xf0, 0x3f, 0xfd, 0x85, + 0x20, 0xaf, 0xd2, 0xc3, 0x6f, 0x0f, 0xd9, 0x7e, + 0xca, 0x23, 0x55, 0x83, 0x67, 0x97, 0xb1, 0x46, + 0x00, 0x5c, 0x63, 0x03, 0x1d, 0x06, 0x2b, 0xce, + 0x3c, 0x3b, 0xf0, 0x1f, 0xe1, 0x3f, 0x87, 0xb5, + 0xab, 0x1d, 0x67, 0x47, 0xf0, 0x9a, 0xda, 0xdf, + 0x58, 0x4a, 0xb2, 0xdb, 0x4b, 0xf6, 0xeb, 0x97, + 0xf2, 0xdd, 0x7a, 0x1c, 0x34, 0x84, 0x1f, 0xc4, + 0x1a, 0x61, 0x73, 0xd2, 0xeb, 0xe4, 0xaf, 0xda, + 0x46, 0xc6, 0x7b, 0x5f, 0x8b, 0x5a, 0x94, 0xf2, + 0xae, 0x12, 0xf6, 0x18, 0x27, 0x88, 0xfa, 0xa8, + 0x89, 0x63, 0x3f, 0xf8, 0xf4, 0x6d, 0x5f, 0x5a, + 0xd6, 0x27, 0x8b, 0xbc, 0x27, 0xe1, 0xef, 0x16, + 0x59, 0xc7, 0x6b, 0xaf, 0xe9, 0x91, 0x5e, 0x24, + 0x44, 0x98, 0x98, 0x92, 0x8f, 0x19, 0x38, 0xce, + 0xd7, 0x52, 0x18, 0x67, 0x03, 0x23, 0x38, 0x38, + 0x19, 0xe9, 0x5d, 0x78, 0x2c, 0x4a, 0xc3, 0xd5, + 0xe6, 0x6b, 0x4d, 0x8f, 0x1f, 0x3a, 0xcb, 0xa5, + 0x98, 0x61, 0xbd, 0x94, 0x1d, 0x9a, 0x77, 0x57, + 0xdb, 0xfa, 0xd4, 0xf0, 0xeb, 0x2f, 0x16, 0xc1, + 0xf1, 0x1b, 0xe1, 0xbc, 0x3f, 0x0e, 0x6d, 0x74, + 0xbb, 0x98, 0xf5, 0xcb, 0x7d, 0x3d, 0x1a, 0x09, + 0x4b, 0x21, 0x8a, 0x47, 0xb7, 0x0a, 0x40, 0x07, + 0x20, 0x82, 0xea, 0xa4, 0x72, 0x30, 0x0b, 0x75, + 0xc0, 0xcd, 0x79, 0xf7, 0xc3, 0x8f, 0x11, 0x69, + 0x3e, 0x15, 0xd7, 0x6e, 0x53, 0xc4, 0xde, 0x16, + 0xb4, 0xd6, 0x2d, 0x25, 0xc4, 0x53, 0xc3, 0x75, + 0x6a, 0x8d, 0x35, 0xbb, 0xa9, 0x3c, 0xa8, 0x90, + 0x70, 0x79, 0x20, 0xa9, 0xc6, 0x78, 0xc9, 0xe2, + 0xbe, 0x9c, 0xf0, 0x8f, 0xc3, 0x2f, 0x07, 0x78, + 0x5b, 0x55, 0x5d, 0x57, 0x48, 0xd3, 0xa5, 0x8e, + 0xf5, 0x55, 0x91, 0x65, 0x92, 0xe6, 0x47, 0xda, + 0x18, 0x60, 0x8c, 0x16, 0xc7, 0xe9, 0x56, 0x7c, + 0x57, 0xf0, 0xfb, 0xc1, 0xde, 0x28, 0xb9, 0xfb, + 0x56, 0xb5, 0xa1, 0xc1, 0x3d, 0xd1, 0xeb, 0x3c, + 0x6c, 0xd1, 0x48, 0xd8, 0x18, 0x1b, 0x99, 0x08, + 0x2d, 0x81, 0xd3, 0x39, 0xae, 0xd8, 0xe3, 0xa8, + 0x45, 0xca, 0x0a, 0x2f, 0x91, 0xfd, 0xf7, 0xfb, + 0xcf, 0x22, 0x79, 0x1e, 0x36, 0xa2, 0x85, 0x69, + 0x4e, 0x3e, 0xd6, 0x3a, 0x79, 0x35, 0xd2, 0xfa, + 0x6f, 0xbf, 0x43, 0xc9, 0x6e, 0x7e, 0x25, 0xfc, + 0x19, 0x48, 0x0b, 0x41, 0xf0, 0xe6, 0x29, 0x65, + 0xc7, 0xca, 0x8d, 0xa3, 0xda, 0x28, 0xcf, 0xa1, + 0x3b, 0x8e, 0x3f, 0x00, 0x6b, 0x7b, 0xe2, 0x97, + 0x8e, 0xf4, 0xaf, 0x0a, 0x7c, 0x36, 0xd3, 0xec, + 0xfc, 0x25, 0x6d, 0x6d, 0xa6, 0xdd, 0xeb, 0x96, + 0xab, 0x3d, 0xac, 0x56, 0x88, 0xb1, 0x7d, 0x96, + 0x19, 0x00, 0x66, 0x97, 0x0a, 0x06, 0x18, 0xe7, + 0x0a, 0x78, 0xe7, 0x27, 0xf8, 0x48, 0xae, 0x8a, + 0xd3, 0xe0, 0xbf, 0xc3, 0x9b, 0x79, 0x04, 0x87, + 0x42, 0x79, 0x98, 0x1c, 0x8f, 0x36, 0xf2, 0x66, + 0x1f, 0x96, 0xec, 0x1f, 0xc6, 0xb4, 0x35, 0x7f, + 0x85, 0xde, 0x04, 0xd5, 0xaf, 0x05, 0xd5, 0xfe, + 0x80, 0x92, 0x48, 0xb1, 0x24, 0x28, 0x16, 0xe6, + 0x68, 0xd1, 0x11, 0x14, 0x2a, 0xaa, 0xa2, 0xb8, + 0x55, 0x50, 0x07, 0x40, 0x00, 0xea, 0x7a, 0x93, + 0x59, 0x3a, 0xf8, 0x5e, 0x78, 0xbb, 0x49, 0xa5, + 0xdf, 0xfe, 0x1c, 0xea, 0x8e, 0x0b, 0x34, 0xf6, + 0x53, 0x8d, 0xe0, 0xa4, 0xd5, 0x95, 0x95, 0xad, + 0xdf, 0xa1, 0xf3, 0x97, 0x82, 0xbe, 0x1b, 0xea, + 0x3e, 0x24, 0xf0, 0x0e, 0xb9, 0xe2, 0x4b, 0x65, + 0x97, 0xcc, 0xb2, 0xc0, 0xb1, 0x85, 0x47, 0xfc, + 0x7c, 0x95, 0xf9, 0xa5, 0x18, 0xc6, 0x4e, 0x17, + 0x01, 0x71, 0xd5, 0xb2, 0x3b, 0x56, 0xe7, 0xec, + 0xdf, 0xe3, 0x91, 0xe1, 0xff, 0x00, 0x11, 0x1f, + 0x0f, 0x6a, 0x13, 0x05, 0xd2, 0xf5, 0x59, 0x00, + 0x8d, 0x8f, 0x48, 0x6e, 0x30, 0x02, 0x9f, 0xa3, + 0xf0, 0xa7, 0xdc, 0x29, 0xe0, 0x03, 0x5f, 0x4b, + 0x68, 0x5a, 0x4e, 0x9d, 0xa1, 0x69, 0x36, 0xfa, + 0x4e, 0x93, 0x6a, 0x96, 0xb6, 0x56, 0xea, 0x56, + 0x28, 0x94, 0x92, 0x14, 0x12, 0x49, 0xe4, 0xe4, + 0x92, 0x49, 0x24, 0x93, 0xc9, 0x26, 0xb9, 0x2b, + 0xaf, 0x84, 0x3f, 0x0e, 0xae, 0x6e, 0x26, 0x9e, + 0x5f, 0x0d, 0xc7, 0xbe, 0x67, 0x67, 0x7d, 0x97, + 0x33, 0x22, 0xe4, 0x9c, 0x9c, 0x28, 0x70, 0x00, + 0xe7, 0xa0, 0x00, 0x0e, 0xd5, 0xa4, 0xb3, 0x18, + 0x55, 0x53, 0x85, 0x54, 0xec, 0xf6, 0xf2, 0x39, + 0x69, 0xf0, 0xf5, 0x6c, 0x2c, 0xa8, 0xd5, 0xc2, + 0xc9, 0x73, 0xc7, 0xe2, 0xbd, 0xec, 0xff, 0x00, + 0x07, 0xe9, 0xe9, 0x6e, 0xa7, 0x75, 0x45, 0x36, + 0x18, 0xd6, 0x28, 0x52, 0x25, 0x2e, 0x55, 0x14, + 0x28, 0x2e, 0xe5, 0x9b, 0x03, 0xd4, 0x9c, 0x92, + 0x7d, 0xcf, 0x34, 0x57, 0x90, 0x7d, 0x71, 0xf3, + 0x77, 0xed, 0x8f, 0x1d, 0xbc, 0xbe, 0x22, 0xf0, + 0x84, 0x57, 0x73, 0xfd, 0x9e, 0xdd, 0xd6, 0x65, + 0x96, 0x6d, 0xa5, 0xbc, 0xb4, 0x2f, 0x1e, 0x5b, + 0x03, 0x93, 0x81, 0x93, 0x81, 0x59, 0x5e, 0x3c, + 0xf8, 0xd9, 0xa6, 0x59, 0xea, 0xda, 0x4d, 0x9f, + 0x83, 0x7c, 0x3f, 0xa0, 0x6a, 0x7a, 0x56, 0x91, + 0x6f, 0x1a, 0xd9, 0x4f, 0xa9, 0xd8, 0x3b, 0x4b, + 0x04, 0x83, 0x8f, 0xdd, 0x12, 0xca, 0x53, 0x01, + 0x53, 0x9c, 0x67, 0x23, 0x39, 0xe9, 0x5e, 0xf1, + 0xf1, 0x0f, 0xe1, 0xc7, 0x86, 0x7c, 0x79, 0x35, + 0x9c, 0xbe, 0x20, 0x8a, 0xe9, 0xda, 0xcd, 0x5d, + 0x62, 0xf2, 0x66, 0x29, 0x80, 0xc4, 0x13, 0x9f, + 0x5e, 0x82, 0xb9, 0x5f, 0xf8, 0x67, 0x9f, 0x87, + 0x1f, 0xf3, 0xed, 0xa9, 0x7f, 0xe0, 0x61, 0xff, + 0x00, 0x0a, 0xf4, 0x29, 0x57, 0xa2, 0xa1, 0x15, + 0x3b, 0xe9, 0x73, 0xe7, 0xb1, 0x58, 0x1c, 0x6b, + 0xaf, 0x52, 0x74, 0x1a, 0x4a, 0x56, 0xd7, 0xae, + 0x88, 0xe2, 0x6c, 0xfe, 0x25, 0xfc, 0x3a, 0xb7, + 0xf8, 0xce, 0x3c, 0x71, 0x0e, 0xa3, 0x3c, 0x30, + 0x5f, 0x68, 0xad, 0x6f, 0x7a, 0x9f, 0x64, 0x90, + 0xb2, 0x5c, 0x07, 0x8f, 0x6f, 0x41, 0xce, 0x51, + 0x71, 0x91, 0xc7, 0xc9, 0xee, 0x2b, 0x91, 0xf0, + 0xd7, 0xc4, 0x2d, 0x1f, 0x5b, 0xf0, 0x17, 0x89, + 0x3c, 0x21, 0xe3, 0xcd, 0x52, 0xe6, 0x54, 0x95, + 0xcc, 0xfa, 0x3d, 0xe4, 0xd1, 0xbc, 0xef, 0x14, + 0x9c, 0x90, 0x09, 0x19, 0x60, 0x01, 0x0a, 0x7e, + 0x8c, 0xc3, 0xda, 0xbd, 0x93, 0xfe, 0x19, 0xe7, + 0xe1, 0xc7, 0xfc, 0xfb, 0x6a, 0x5f, 0xf8, 0x18, + 0x7f, 0xc2, 0x8f, 0xf8, 0x67, 0x9f, 0x87, 0x1f, + 0xf3, 0xed, 0xa9, 0x7f, 0xe0, 0x61, 0xff, 0x00, + 0x0a, 0xa5, 0x5b, 0x0e, 0xbb, 0xf4, 0xfc, 0x0c, + 0xa5, 0x82, 0xcc, 0x64, 0xfe, 0xcd, 0xb5, 0xba, + 0xd6, 0xce, 0xfb, 0xdf, 0xf3, 0xf5, 0x3c, 0x47, + 0xc4, 0x9e, 0x3f, 0xd3, 0x7f, 0xe1, 0x4f, 0xf8, + 0x33, 0x47, 0xd0, 0xf5, 0x29, 0xe1, 0xd7, 0xf4, + 0x5b, 0xb1, 0x3c, 0x9b, 0x63, 0x65, 0xf2, 0x88, + 0x12, 0x60, 0x86, 0x23, 0x07, 0xef, 0x0a, 0x97, + 0xc1, 0x1f, 0x11, 0xec, 0x87, 0x83, 0xbe, 0x21, + 0x27, 0x8a, 0x75, 0x49, 0xe5, 0xd6, 0xbc, 0x41, + 0x6e, 0x56, 0x02, 0x62, 0x66, 0xf3, 0x1f, 0xca, + 0x91, 0x40, 0xc8, 0x18, 0x50, 0x37, 0x28, 0x03, + 0x80, 0x07, 0xd2, 0xbd, 0xa7, 0xfe, 0x19, 0xe7, + 0xe1, 0xc7, 0xfc, 0xfb, 0x6a, 0x5f, 0xf8, 0x18, + 0x7f, 0xc2, 0x8f, 0xf8, 0x67, 0x9f, 0x87, 0x1f, + 0xf3, 0xed, 0xa9, 0x7f, 0xe0, 0x61, 0xff, 0x00, + 0x0a, 0xbf, 0xac, 0xe1, 0xed, 0x6d, 0x7f, 0xa7, + 0x73, 0x35, 0x96, 0xe6, 0x2a, 0x6a, 0x57, 0x8e, + 0x8a, 0xd6, 0xbb, 0xb6, 0xd6, 0xfb, 0xec, 0x72, + 0xbe, 0x1c, 0xf8, 0xbf, 0xe0, 0x4b, 0x3f, 0x83, + 0xd6, 0xbe, 0x1c, 0xb8, 0xd4, 0xe7, 0x5d, 0x46, + 0x3d, 0x18, 0xda, 0x34, 0x62, 0xd6, 0x42, 0x04, + 0x9e, 0x51, 0x5c, 0x6e, 0xc6, 0x3a, 0xf7, 0xad, + 0xcf, 0xd8, 0xef, 0xfe, 0x49, 0x65, 0xdf, 0xfd, + 0x85, 0xe5, 0xff, 0x00, 0xd1, 0x51, 0x55, 0xef, + 0xf8, 0x67, 0x9f, 0x87, 0x1f, 0xf3, 0xed, 0xa9, + 0x7f, 0xe0, 0x61, 0xff, 0x00, 0x0a, 0xee, 0xbc, + 0x05, 0xe0, 0xfd, 0x17, 0xc1, 0x3a, 0x2c, 0x9a, + 0x46, 0x84, 0x93, 0xa5, 0xab, 0xce, 0xd3, 0xb0, + 0x96, 0x4d, 0xe7, 0x79, 0x0a, 0x0f, 0x3e, 0x98, + 0x51, 0x5c, 0xf5, 0x6a, 0xd1, 0xe4, 0x6a, 0x17, + 0xbb, 0x77, 0xd4, 0xf4, 0x30, 0x98, 0x6c, 0x5a, + 0xaf, 0x09, 0xd7, 0xb5, 0xa2, 0x9a, 0x56, 0xb9, + 0x1f, 0xc4, 0xbd, 0x46, 0xf7, 0x4a, 0xf0, 0x84, + 0xd7, 0xba, 0x75, 0xc9, 0xb6, 0xb9, 0x5b, 0xab, + 0x48, 0xc4, 0x81, 0x55, 0xb0, 0xaf, 0x73, 0x12, + 0x30, 0xc3, 0x02, 0x39, 0x56, 0x23, 0xf1, 0xae, + 0x32, 0xf7, 0xe2, 0xa6, 0xb6, 0x20, 0x93, 0xec, + 0x7e, 0x17, 0xd3, 0x8c, 0xd2, 0xde, 0x41, 0x05, + 0x88, 0x9f, 0x56, 0x65, 0x59, 0x51, 0xf5, 0x21, + 0x60, 0xc6, 0x42, 0xb0, 0x93, 0x19, 0xde, 0xc8, + 0xc0, 0x00, 0xf9, 0x56, 0x39, 0xe5, 0x76, 0xb7, + 0xa9, 0xdc, 0xc1, 0x05, 0xcc, 0x26, 0x1b, 0x98, + 0x63, 0x9a, 0x32, 0x43, 0x14, 0x91, 0x43, 0x2e, + 0x41, 0x04, 0x1c, 0x1f, 0x42, 0x01, 0xfa, 0x8a, + 0xa5, 0x77, 0xa0, 0xe8, 0x57, 0x96, 0x92, 0xd9, + 0xdd, 0xe8, 0xba, 0x6d, 0xc5, 0xb4, 0xd1, 0xb4, + 0x72, 0xc3, 0x2d, 0xaa, 0x32, 0x3a, 0x33, 0x6f, + 0x65, 0x2a, 0x46, 0x08, 0x2d, 0xf3, 0x10, 0x7a, + 0x9e, 0x7a, 0xd7, 0x11, 0xed, 0x1e, 0x69, 0xa9, + 0xfc, 0x4e, 0xd4, 0xef, 0xe5, 0x9a, 0xd7, 0x4e, + 0xd2, 0xa6, 0xd3, 0xe1, 0x87, 0x5f, 0xb5, 0xb0, + 0x4b, 0xe0, 0x59, 0xc3, 0x88, 0xf5, 0x8b, 0x6b, + 0x2b, 0x98, 0xdc, 0x3c, 0x41, 0x06, 0xf1, 0x23, + 0xec, 0x31, 0xb4, 0x87, 0x6e, 0x4b, 0x79, 0x4d, + 0xb5, 0x4e, 0x6f, 0x85, 0x3e, 0x2a, 0x6b, 0xe9, + 0xe0, 0x8d, 0x22, 0xe1, 0xf4, 0xc9, 0xbc, 0x43, + 0xac, 0x5d, 0xd9, 0x58, 0xf1, 0x24, 0x9e, 0x52, + 0x4d, 0x33, 0xe9, 0xd0, 0x5c, 0x38, 0x5f, 0x26, + 0x07, 0x21, 0xdc, 0xc8, 0xc4, 0x29, 0x5d, 0xbf, + 0x2b, 0x92, 0xc8, 0x00, 0x07, 0xd6, 0x93, 0xc3, + 0x9e, 0x1e, 0x4b, 0xf9, 0xb5, 0x04, 0xd0, 0xb4, + 0xb5, 0xbc, 0x9f, 0xca, 0xf3, 0x6e, 0x05, 0xa4, + 0x62, 0x49, 0x3c, 0xa2, 0xa6, 0x3d, 0xcd, 0x8c, + 0x9d, 0x85, 0x14, 0xae, 0x7a, 0x15, 0x18, 0xc6, + 0x05, 0x73, 0xbe, 0x36, 0xf8, 0x63, 0xe1, 0x9f, + 0x15, 0x45, 0x65, 0x14, 0xe9, 0x2e, 0x9c, 0x96, + 0x71, 0xbc, 0x71, 0x2d, 0x8c, 0x50, 0xa8, 0x50, + 0xc8, 0x88, 0x19, 0x43, 0xc6, 0xc1, 0x24, 0x55, + 0x8d, 0x55, 0x25, 0x4d, 0xb2, 0x20, 0xc8, 0x56, + 0x50, 0x4d, 0x00, 0x62, 0xc3, 0xf1, 0x52, 0xfe, + 0xea, 0x7b, 0x94, 0xb2, 0xf0, 0xa1, 0x78, 0xdb, + 0x53, 0x3a, 0x75, 0x84, 0xd3, 0x5d, 0xc9, 0x0c, + 0x73, 0x3a, 0xdd, 0x1b, 0x67, 0xf3, 0x19, 0xa1, + 0xc2, 0x10, 0xe3, 0x38, 0x8f, 0xcd, 0xe3, 0x21, + 0xb6, 0xb0, 0xda, 0x75, 0x7c, 0x03, 0xe3, 0x8d, + 0x4f, 0xc5, 0x1e, 0x20, 0x7b, 0x47, 0xd1, 0xac, + 0x2c, 0xac, 0x53, 0x49, 0xb6, 0xbd, 0x69, 0x06, + 0xa0, 0xd2, 0x4e, 0xb3, 0x4b, 0x24, 0xf1, 0x98, + 0xc2, 0x79, 0x41, 0x59, 0x03, 0x5b, 0x4b, 0x87, + 0xdc, 0x09, 0x01, 0x4e, 0xdf, 0x98, 0x84, 0xea, + 0x61, 0xf0, 0xfe, 0x83, 0x0e, 0xa1, 0x71, 0xa8, + 0xc5, 0xa2, 0xe9, 0xa9, 0x7b, 0x72, 0xe9, 0x25, + 0xc5, 0xca, 0xda, 0xa0, 0x96, 0x56, 0x4f, 0xb8, + 0xce, 0xf8, 0xcb, 0x15, 0xec, 0x49, 0xe2, 0x9f, + 0x0e, 0x8b, 0xa3, 0x43, 0x7f, 0x0e, 0xa1, 0x0e, + 0x93, 0x61, 0x1d, 0xe4, 0x11, 0x34, 0x11, 0x5c, + 0x25, 0xb2, 0x09, 0x23, 0x8d, 0x9b, 0x73, 0x22, + 0xb0, 0x19, 0x0a, 0x4f, 0x24, 0x0e, 0x09, 0xe6, + 0x80, 0x3c, 0x87, 0x43, 0xf1, 0x67, 0x8e, 0xec, + 0xaf, 0x35, 0x0f, 0x11, 0xdd, 0x9b, 0xed, 0x4f, + 0x44, 0x1a, 0xed, 0xe6, 0x8c, 0xb6, 0xd7, 0x72, + 0x5a, 0xc5, 0x0b, 0xcc, 0xfa, 0xda, 0xd8, 0xda, + 0x9b, 0x73, 0x12, 0x19, 0x55, 0x63, 0x8c, 0xbf, + 0x98, 0x65, 0xfb, 0xc4, 0x2e, 0xd0, 0x72, 0x58, + 0x6f, 0x5f, 0xfc, 0x55, 0xb9, 0xd2, 0x05, 0xd5, + 0xd6, 0xb7, 0xe1, 0xd8, 0x62, 0xb0, 0xb2, 0x96, + 0x7b, 0x3b, 0xa6, 0xb3, 0xd4, 0x7c, 0xfb, 0x91, + 0x77, 0x05, 0x93, 0xdd, 0xca, 0x89, 0x0b, 0x46, + 0x9b, 0xa2, 0xd9, 0x1b, 0x05, 0x72, 0xca, 0xed, + 0x95, 0x63, 0x1a, 0xa1, 0xdc, 0x3d, 0x1b, 0xfb, + 0x3f, 0x4f, 0xfb, 0x37, 0xd9, 0xbe, 0xc3, 0x6b, + 0xe4, 0x79, 0xff, 0x00, 0x68, 0xf2, 0xfc, 0xa5, + 0xdb, 0xe6, 0xf9, 0x9e, 0x6f, 0x99, 0x8c, 0x63, + 0x77, 0x99, 0xf3, 0xee, 0xeb, 0xbb, 0x9e, 0xbc, + 0xd4, 0x4b, 0xa3, 0xe9, 0x0b, 0xad, 0x36, 0xb6, + 0xba, 0x5d, 0x88, 0xd5, 0x1a, 0x2f, 0x25, 0xaf, + 0x45, 0xba, 0xf9, 0xe6, 0x3c, 0xe7, 0x61, 0x93, + 0x1b, 0xb6, 0xe7, 0xb6, 0x71, 0x40, 0x1c, 0x1d, + 0xef, 0xc4, 0x8d, 0x6b, 0x4f, 0xd4, 0x34, 0x8d, + 0x36, 0xf3, 0xc2, 0xd6, 0xb3, 0x5e, 0x5e, 0xc2, + 0x6f, 0x27, 0x5d, 0x3f, 0x51, 0x92, 0xea, 0x38, + 0xed, 0x43, 0xc6, 0xbb, 0xd1, 0xc5, 0xb8, 0x0e, + 0xe0, 0x4a, 0x18, 0x86, 0xd8, 0x80, 0x63, 0xf7, + 0x87, 0x72, 0xe5, 0x96, 0x9f, 0x14, 0x6f, 0x65, + 0x9e, 0xd2, 0x2b, 0xaf, 0x0f, 0xda, 0x59, 0xf9, + 0x9a, 0xd7, 0xf6, 0x6d, 0xd9, 0x97, 0x50, 0x90, + 0xfd, 0x89, 0x18, 0xc4, 0x21, 0x77, 0xc4, 0x07, + 0x2d, 0x2f, 0x9a, 0x36, 0x15, 0xcc, 0x07, 0x2a, + 0x3c, 0xfc, 0xba, 0x83, 0xd9, 0x45, 0xe1, 0x0f, + 0x09, 0x43, 0x05, 0xb5, 0xbc, 0x5e, 0x17, 0xd1, + 0x23, 0x86, 0xd6, 0xe4, 0xdd, 0x5b, 0xc6, 0xb6, + 0x11, 0x05, 0x86, 0x73, 0xd6, 0x54, 0x1b, 0x70, + 0xaf, 0xc0, 0xf9, 0x87, 0x34, 0xe8, 0x7c, 0x27, + 0xe1, 0x68, 0x5a, 0x16, 0x8b, 0xc3, 0x5a, 0x34, + 0x6d, 0x05, 0xd3, 0x5e, 0x42, 0x56, 0xc6, 0x20, + 0x63, 0xb8, 0x6c, 0x6e, 0x99, 0x7e, 0x5e, 0x24, + 0x38, 0x19, 0x61, 0xc9, 0xc7, 0x5a, 0x00, 0xe1, + 0x2d, 0x3e, 0x2d, 0xdc, 0xdc, 0x59, 0x58, 0xdd, + 0x2f, 0x86, 0xe0, 0xc6, 0xb1, 0x05, 0xa5, 0xd6, + 0x8e, 0x8b, 0xa9, 0xee, 0x66, 0x82, 0xe2, 0xf2, + 0x0b, 0x50, 0x6e, 0x87, 0x97, 0xfe, 0x8f, 0x20, + 0x6b, 0x94, 0x25, 0x07, 0x98, 0x0e, 0xd9, 0x00, + 0x62, 0x50, 0x8a, 0xe9, 0xbc, 0x29, 0xe2, 0xbd, + 0x4b, 0x53, 0xf1, 0x56, 0xa3, 0xe1, 0xed, 0x63, + 0x46, 0xb5, 0xd2, 0xae, 0x6d, 0x2d, 0xe2, 0x9a, + 0x3d, 0x97, 0xaf, 0x37, 0xda, 0x72, 0xaa, 0x25, + 0x68, 0xc9, 0x89, 0x15, 0xa3, 0x49, 0x09, 0x8f, + 0x70, 0x62, 0xd9, 0x03, 0x7a, 0x47, 0xb9, 0x41, + 0xdc, 0xb5, 0xd0, 0x34, 0x2b, 0x59, 0xae, 0xe6, + 0xb6, 0xd1, 0x74, 0xd8, 0x25, 0xbc, 0x9d, 0x6e, + 0x6e, 0x9e, 0x3b, 0x54, 0x56, 0x9e, 0x65, 0x6d, + 0xcb, 0x23, 0x90, 0x3e, 0x67, 0x0d, 0xc8, 0x63, + 0x92, 0x0f, 0x35, 0x35, 0xa6, 0x95, 0xa5, 0xda, + 0x6a, 0x37, 0x7a, 0x95, 0xa6, 0x9b, 0x67, 0x6f, + 0x7d, 0x7b, 0xb7, 0xed, 0x57, 0x31, 0x40, 0xab, + 0x2c, 0xfb, 0x46, 0x17, 0x7b, 0x01, 0x96, 0xc0, + 0xe0, 0x67, 0x38, 0xa0, 0x0f, 0x24, 0xd0, 0x3e, + 0x2e, 0x6a, 0x3a, 0x57, 0x87, 0x6d, 0xee, 0x7c, + 0x59, 0xa5, 0x0b, 0x98, 0x22, 0xb6, 0x4b, 0xcb, + 0x9b, 0xfb, 0x3b, 0x9f, 0x3e, 0x51, 0x6a, 0xf2, + 0x4b, 0x10, 0x95, 0xe0, 0x58, 0x94, 0xab, 0xf9, + 0xab, 0x1a, 0xec, 0x19, 0x05, 0x59, 0xdb, 0x77, + 0xee, 0xd9, 0x6b, 0xa6, 0xf8, 0x97, 0xe2, 0x6d, + 0x72, 0xc7, 0xc0, 0xba, 0x55, 0xbd, 0xa2, 0x4f, + 0xa3, 0x78, 0x9f, 0x5e, 0x78, 0x6d, 0x91, 0x2d, + 0xad, 0x8e, 0xa2, 0xfa, 0x7b, 0x15, 0xdf, 0x71, + 0x20, 0x44, 0x5c, 0xca, 0x22, 0x45, 0x93, 0x07, + 0x6e, 0x0b, 0x6c, 0x07, 0x01, 0xab, 0x7e, 0xf3, + 0xc1, 0x5e, 0x1c, 0x9a, 0x34, 0x8a, 0xdf, 0x4d, + 0xb7, 0xd3, 0xe1, 0x3a, 0x8c, 0x5a, 0x95, 0xd4, + 0x76, 0x50, 0x47, 0x08, 0xbc, 0x9a, 0x26, 0xde, + 0x86, 0x6c, 0x2e, 0x58, 0x09, 0x02, 0x3f, 0x50, + 0x49, 0x41, 0x92, 0x46, 0x41, 0xdd, 0x7b, 0x7b, + 0x77, 0xba, 0x8e, 0xed, 0xe0, 0x89, 0xae, 0x22, + 0x46, 0x8e, 0x39, 0x4a, 0x02, 0xe8, 0xac, 0x54, + 0xb2, 0x83, 0xd4, 0x02, 0x55, 0x72, 0x3b, 0xed, + 0x1e, 0x82, 0x80, 0x3c, 0x17, 0x5f, 0xf8, 0x95, + 0xe2, 0x9b, 0xe6, 0xd0, 0x75, 0x8d, 0x36, 0x6d, + 0x43, 0x4a, 0x85, 0x34, 0xd8, 0xae, 0x35, 0x9b, + 0x75, 0x8a, 0x13, 0x6d, 0x61, 0x34, 0x77, 0xab, + 0x05, 0xdf, 0xda, 0x84, 0xa8, 0x66, 0xf2, 0x63, + 0xdb, 0x2a, 0x93, 0x1e, 0x08, 0x0b, 0xb8, 0x94, + 0x19, 0x75, 0xb5, 0xe3, 0x5f, 0x14, 0x7c, 0x51, + 0xb5, 0xf0, 0xe7, 0xc4, 0x5b, 0xed, 0x16, 0xfa, + 0xc7, 0xfb, 0x3f, 0x4d, 0x6d, 0x42, 0x6b, 0x7d, + 0x46, 0x48, 0x93, 0xce, 0xd2, 0xc5, 0xac, 0x02, + 0x4f, 0x25, 0x63, 0xc6, 0x26, 0xf3, 0x0e, 0xdd, + 0xac, 0xc3, 0xe4, 0xcc, 0x85, 0x8b, 0xe1, 0x10, + 0xfb, 0x48, 0xd2, 0xf4, 0xc1, 0x2c, 0xf2, 0x8d, + 0x3a, 0xcc, 0x49, 0x70, 0xac, 0xb3, 0xbf, 0x90, + 0xb9, 0x94, 0x36, 0x37, 0x06, 0x38, 0xf9, 0x81, + 0xc0, 0xce, 0x7a, 0xe2, 0x85, 0xd2, 0xb4, 0xb5, + 0xd3, 0xe7, 0xd3, 0x97, 0x4d, 0xb3, 0x16, 0x57, + 0x08, 0x52, 0x6b, 0x71, 0x02, 0xf9, 0x72, 0x29, + 0x5d, 0xa4, 0x32, 0xe3, 0x04, 0x15, 0xe0, 0x83, + 0xdb, 0x8a, 0x00, 0x4d, 0x26, 0x0d, 0x42, 0x05, + 0xb9, 0xfe, 0xd0, 0xbd, 0x5b, 0xa2, 0xf7, 0x0e, + 0xf0, 0xed, 0x8c, 0x27, 0x97, 0x11, 0xfb, 0xa9, + 0xc7, 0x5c, 0x73, 0xc9, 0xe7, 0x9e, 0xfd, 0x68, + 0xab, 0xb4, 0x50, 0x07, 0xff, 0xd9, +}; + +static const uint8_t data_images_freertos_jpg[] = +{ + /* /images/freertos.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, + 0x2e, 0x6a, 0x70, 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, + 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x60, + 0x00, 0x60, 0x00, 0x00, 0xff, 0xe1, 0x00, 0x16, + 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, + 0x2a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, + 0x07, 0x07, 0x07, 0x09, 0x09, 0x08, 0x0a, 0x0c, + 0x14, 0x0d, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, + 0x13, 0x0f, 0x14, 0x1d, 0x1a, 0x1f, 0x1e, 0x1d, + 0x1a, 0x1c, 0x1c, 0x20, 0x24, 0x2e, 0x27, 0x20, + 0x22, 0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, + 0x2c, 0x30, 0x31, 0x34, 0x34, 0x34, 0x1f, 0x27, + 0x39, 0x3d, 0x38, 0x32, 0x3c, 0x2e, 0x33, 0x34, + 0x32, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x09, 0x09, + 0x09, 0x0c, 0x0b, 0x0c, 0x18, 0x0d, 0x0d, 0x18, + 0x32, 0x21, 0x1c, 0x21, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0xff, 0xc0, + 0x00, 0x11, 0x08, 0x00, 0x3e, 0x00, 0xc2, 0x03, + 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, + 0x01, 0xff, 0xc4, 0x00, 0x1f, 0x00, 0x00, 0x01, + 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, + 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, + 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, + 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, + 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, + 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, + 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, + 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, + 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, + 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, + 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, + 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, + 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, 0x00, 0x03, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, + 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, + 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, + 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, + 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, + 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, + 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, + 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, + 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, + 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xf7, + 0xea, 0xad, 0x7b, 0x77, 0x0d, 0x85, 0x9c, 0xb7, + 0x53, 0xb6, 0xd8, 0xe3, 0x19, 0x27, 0xfa, 0x55, + 0x9a, 0xe7, 0xb5, 0xe3, 0xf6, 0xfd, 0x53, 0x4f, + 0xd2, 0x01, 0xca, 0xbb, 0xf9, 0xf3, 0x8f, 0xf6, + 0x17, 0xa0, 0x3f, 0x53, 0xfc, 0xaa, 0x27, 0x2e, + 0x54, 0x44, 0xe5, 0xca, 0xae, 0x5d, 0x7b, 0x59, + 0xf5, 0x3b, 0x48, 0x9d, 0xee, 0xee, 0x2d, 0x37, + 0xae, 0xe3, 0x1c, 0x25, 0x46, 0x33, 0xd8, 0x9c, + 0x67, 0x35, 0x58, 0x78, 0x6d, 0xd7, 0xee, 0xeb, + 0x3a, 0x98, 0xfa, 0xcc, 0x0f, 0xf4, 0xad, 0xd0, + 0x31, 0xd2, 0xbc, 0x27, 0xe2, 0x9f, 0x8c, 0x36, + 0xf8, 0x83, 0x59, 0xd1, 0x75, 0x1d, 0x47, 0x52, + 0xd3, 0x12, 0xda, 0x08, 0x06, 0x9c, 0x96, 0xac, + 0xc8, 0x97, 0x0f, 0x27, 0xdf, 0x96, 0x46, 0x51, + 0x96, 0x54, 0x07, 0x85, 0xef, 0xb4, 0xf7, 0xa4, + 0xe9, 0xc5, 0xea, 0xc1, 0xc1, 0x3d, 0x59, 0xeb, + 0x5f, 0xd8, 0x17, 0x23, 0xa6, 0xb9, 0x7f, 0xf8, + 0xb2, 0x9f, 0xe9, 0x47, 0xf6, 0x25, 0xf7, 0x6d, + 0x76, 0xf3, 0xf1, 0x0b, 0xfe, 0x15, 0xcb, 0xf8, + 0x42, 0xfe, 0xf6, 0x48, 0x35, 0x5d, 0x6c, 0x35, + 0xdc, 0x5a, 0x0a, 0x5b, 0xc3, 0x6d, 0xa5, 0x41, + 0x74, 0x58, 0x34, 0x81, 0x17, 0x0d, 0x31, 0x56, + 0xe9, 0xb9, 0xb1, 0xf5, 0xc6, 0x69, 0xb6, 0x77, + 0x1a, 0xad, 0xed, 0xca, 0xdb, 0xc1, 0x79, 0x70, + 0x64, 0x6c, 0xe3, 0x33, 0x30, 0x15, 0xcd, 0x5a, + 0xac, 0x29, 0x49, 0x46, 0xcd, 0xb7, 0xe6, 0x67, + 0x35, 0x18, 0xbb, 0x5b, 0xf1, 0x3a, 0xaf, 0xec, + 0x6d, 0x53, 0xb6, 0xbf, 0x3f, 0xe3, 0x12, 0x9a, + 0x4f, 0xec, 0x8d, 0x64, 0x7d, 0xdf, 0x10, 0x49, + 0xf8, 0xdb, 0xa1, 0xac, 0x1b, 0xc1, 0xaf, 0x69, + 0xa8, 0x24, 0x9e, 0xe2, 0x61, 0x1e, 0x71, 0xb8, + 0x49, 0xb8, 0x66, 0xaf, 0xf8, 0x77, 0x5b, 0xbb, + 0xba, 0xbd, 0xfb, 0x2d, 0xcb, 0x79, 0xa1, 0x94, + 0x95, 0x6c, 0x72, 0x31, 0x51, 0x1a, 0xf0, 0x73, + 0x50, 0x92, 0x69, 0xfa, 0x92, 0xb9, 0x6f, 0xca, + 0xef, 0xf7, 0x97, 0xce, 0x97, 0xae, 0xf6, 0xf1, + 0x0f, 0xfe, 0x4a, 0x25, 0x1f, 0xd9, 0xbe, 0x20, + 0x1d, 0x35, 0xe4, 0x3f, 0x5b, 0x55, 0xaa, 0xba, + 0xb4, 0xda, 0xef, 0xf6, 0x84, 0x9f, 0x62, 0x59, + 0x56, 0xdd, 0x40, 0x0b, 0xb5, 0x41, 0xcf, 0xa9, + 0xac, 0x56, 0xf1, 0x0e, 0xb1, 0x1b, 0xb2, 0x35, + 0xd1, 0x0c, 0xa7, 0x04, 0x14, 0x5f, 0xf0, 0xa5, + 0x52, 0xbd, 0x3a, 0x6e, 0xcd, 0x48, 0x25, 0xc9, + 0x17, 0xad, 0xfe, 0xf3, 0xa4, 0x16, 0x3e, 0x22, + 0x1d, 0x35, 0x88, 0x0f, 0xd6, 0xd8, 0x7f, 0x8d, + 0x1f, 0x64, 0xf1, 0x18, 0xe9, 0xa9, 0x5a, 0x1f, + 0xac, 0x07, 0xfc, 0x6b, 0x15, 0x35, 0x6f, 0x11, + 0x15, 0x0c, 0x12, 0x66, 0x52, 0x32, 0x0f, 0xd9, + 0xf8, 0x23, 0xf2, 0xae, 0x93, 0xfb, 0x48, 0x58, + 0xe9, 0x30, 0xdc, 0x6a, 0x0f, 0x89, 0x59, 0x41, + 0x2b, 0x8c, 0x12, 0x7d, 0x00, 0xad, 0x29, 0xd5, + 0x84, 0xef, 0xba, 0xb7, 0x71, 0xc7, 0x95, 0xf7, + 0xfb, 0xca, 0xbe, 0x47, 0x89, 0x87, 0x4b, 0xcb, + 0x03, 0xf5, 0x89, 0xbf, 0xc6, 0x93, 0xcb, 0xf1, + 0x40, 0xe9, 0x3e, 0x9a, 0x7e, 0xa8, 0xf5, 0x97, + 0x71, 0xe3, 0x0b, 0xa7, 0x7c, 0x5b, 0x5b, 0xc6, + 0x8b, 0xdb, 0x7e, 0x58, 0xfe, 0x95, 0x13, 0x78, + 0x97, 0x58, 0x87, 0x0d, 0x2c, 0x6a, 0x01, 0xe9, + 0xbe, 0x22, 0x33, 0x50, 0xf1, 0x54, 0xba, 0x36, + 0x2e, 0x68, 0x77, 0x66, 0xc6, 0x3c, 0x54, 0x3f, + 0x8b, 0x4b, 0x3f, 0x83, 0xd2, 0x6e, 0xf1, 0x58, + 0xfe, 0x1d, 0x2c, 0xff, 0x00, 0xdf, 0x75, 0x16, + 0x9b, 0xe2, 0xc4, 0x9e, 0x45, 0x86, 0xee, 0x21, + 0x13, 0x37, 0x01, 0xd4, 0xfc, 0xb9, 0xf7, 0xf4, + 0xae, 0x8d, 0xdd, 0x23, 0x8d, 0x9d, 0xd8, 0x2a, + 0x81, 0x92, 0x4f, 0x40, 0x2b, 0x6a, 0x72, 0x85, + 0x45, 0x78, 0xc9, 0x97, 0x18, 0xa9, 0x6a, 0xa4, + 0xcc, 0x1f, 0x37, 0xc5, 0x23, 0xfe, 0x5d, 0xf4, + 0xe3, 0xf4, 0x76, 0xa5, 0xfb, 0x4f, 0x89, 0xc7, + 0x5b, 0x0b, 0x26, 0xfa, 0x4a, 0x45, 0x43, 0x77, + 0xe2, 0xfb, 0x78, 0x9c, 0xad, 0xb4, 0x0d, 0x36, + 0x3f, 0x89, 0x8e, 0xd1, 0x54, 0xff, 0x00, 0xe1, + 0x33, 0x9f, 0x3f, 0xf1, 0xe9, 0x1e, 0x3f, 0xdf, + 0x35, 0x9c, 0xb1, 0x14, 0xa2, 0xed, 0xce, 0xc9, + 0xbc, 0x57, 0xda, 0x66, 0x97, 0xdb, 0x7c, 0x4a, + 0x3a, 0xe9, 0x56, 0xcd, 0xf4, 0x9e, 0xa4, 0x87, + 0x50, 0xd7, 0x37, 0x8f, 0x3f, 0x45, 0x1b, 0x3b, + 0x98, 0xee, 0x14, 0x9f, 0xc8, 0xd3, 0x34, 0x8f, + 0x11, 0x9d, 0x4e, 0xef, 0xec, 0xe6, 0xd4, 0xa1, + 0xda, 0x5b, 0x70, 0x7c, 0x80, 0x3f, 0x2a, 0xde, + 0xed, 0x5b, 0x53, 0x6a, 0x6b, 0x9a, 0x32, 0x76, + 0x2e, 0x2a, 0xfa, 0xa9, 0x32, 0x0b, 0x5b, 0xa8, + 0xae, 0xd5, 0x9a, 0x26, 0xc9, 0x56, 0x2a, 0xea, + 0x7a, 0xab, 0x0e, 0xa0, 0xfb, 0xd5, 0x8a, 0xe1, + 0xfc, 0x2b, 0x77, 0x2c, 0x9e, 0x34, 0xd6, 0x61, + 0x0c, 0x4c, 0x2c, 0xa6, 0x46, 0x1f, 0xed, 0x07, + 0xc0, 0xfd, 0x09, 0xae, 0xe2, 0xb5, 0xa7, 0x2e, + 0x78, 0xdc, 0x74, 0xa7, 0xcf, 0x1b, 0x85, 0x14, + 0x51, 0x56, 0x68, 0x14, 0x51, 0x45, 0x00, 0x21, + 0x35, 0xcf, 0x68, 0x23, 0xfb, 0x43, 0x54, 0xd4, + 0x35, 0x66, 0xe5, 0x59, 0xfc, 0x88, 0x0f, 0xfb, + 0x0b, 0xd4, 0x8f, 0xa9, 0xab, 0x7e, 0x22, 0xbe, + 0x36, 0x1a, 0x2c, 0xef, 0x1e, 0x7c, 0xe9, 0x07, + 0x95, 0x18, 0x1d, 0x77, 0x37, 0x1f, 0xfd, 0x7f, + 0xc2, 0xac, 0xe9, 0x36, 0x4b, 0xa7, 0x69, 0x76, + 0xf6, 0x8b, 0xff, 0x00, 0x2c, 0xd0, 0x06, 0xf7, + 0x3d, 0xff, 0x00, 0x5a, 0xc9, 0xfb, 0xd3, 0x4b, + 0xb1, 0x93, 0xf7, 0xa6, 0x97, 0x62, 0x0f, 0x11, + 0xeb, 0x70, 0x78, 0x6f, 0xc3, 0xb7, 0xfa, 0xcd, + 0xca, 0x97, 0x8e, 0xd2, 0x23, 0x21, 0x45, 0xe0, + 0xb1, 0xec, 0xbf, 0x89, 0xc0, 0xaf, 0x2c, 0xb8, + 0xf1, 0x97, 0x88, 0x2d, 0xef, 0x35, 0x5b, 0xfd, + 0x52, 0xff, 0x00, 0x47, 0x9e, 0x2b, 0x3d, 0x2d, + 0x27, 0xb7, 0xb3, 0x82, 0xdc, 0x3a, 0x7d, 0xaa, + 0x6c, 0xf9, 0x31, 0x6e, 0x3f, 0x33, 0x90, 0x06, + 0x4e, 0xd2, 0x3a, 0x8a, 0xde, 0xf8, 0xad, 0xe3, + 0x0b, 0x3d, 0x0b, 0xfb, 0x2f, 0x4a, 0xbd, 0x6b, + 0x39, 0x2c, 0x75, 0x09, 0x42, 0x6a, 0x50, 0xcc, + 0x8c, 0xee, 0x2d, 0x89, 0xc1, 0x65, 0x55, 0x23, + 0xdf, 0x9e, 0xa3, 0x1d, 0x0d, 0x54, 0xf0, 0x2f, + 0x87, 0x7e, 0x15, 0xc9, 0xad, 0x8b, 0x9f, 0x0c, + 0x18, 0x6f, 0x6f, 0xe1, 0x53, 0x2a, 0x87, 0x92, + 0x49, 0x0c, 0x43, 0x23, 0xe6, 0x01, 0xf8, 0x1c, + 0x91, 0xcf, 0x5a, 0xd4, 0xd4, 0xe8, 0x75, 0xbb, + 0xeb, 0xc6, 0xd0, 0x74, 0xcb, 0x7b, 0xf1, 0x1a, + 0x5f, 0x4b, 0x0a, 0x49, 0x74, 0x91, 0x02, 0x15, + 0x5f, 0x03, 0x20, 0x03, 0xdb, 0x76, 0x7f, 0x2a, + 0xc8, 0xd3, 0x75, 0x09, 0x74, 0xc9, 0xcd, 0xc4, + 0x51, 0x23, 0x92, 0x36, 0xe5, 0xc1, 0xc0, 0xa9, + 0x35, 0xcb, 0xbf, 0xb6, 0x6a, 0xf3, 0xc8, 0x0e, + 0x55, 0x4e, 0xc5, 0xfa, 0x0a, 0xec, 0xb4, 0x7b, + 0x15, 0xb7, 0xd1, 0x21, 0x86, 0x44, 0x04, 0xba, + 0xee, 0x70, 0x47, 0x52, 0x7b, 0x7f, 0x4a, 0xf1, + 0xf9, 0x65, 0x88, 0xc4, 0x4a, 0x51, 0x76, 0xb1, + 0xcb, 0x67, 0x39, 0xb6, 0x8e, 0x4a, 0xf3, 0x58, + 0xbb, 0xd6, 0x9a, 0x3b, 0x69, 0x5a, 0x18, 0x90, + 0xb7, 0x18, 0xc8, 0x19, 0xf7, 0x3c, 0xd7, 0x4f, + 0xa1, 0xe8, 0x4b, 0xa5, 0x86, 0x96, 0x46, 0x12, + 0x4e, 0xe3, 0x04, 0x8e, 0x8a, 0x3d, 0x05, 0x70, + 0xb3, 0x27, 0x95, 0x3c, 0x91, 0xff, 0x00, 0x75, + 0x8a, 0xd7, 0xa7, 0xdb, 0x49, 0xe7, 0x5a, 0xc5, + 0x27, 0xf7, 0xd0, 0x37, 0xe6, 0x2a, 0xf0, 0x5f, + 0xbc, 0xa8, 0xe5, 0x3d, 0x5a, 0x1d, 0x2f, 0x79, + 0xb6, 0xf7, 0x19, 0x7d, 0x70, 0x2d, 0x2c, 0xa7, + 0xb8, 0x38, 0xf9, 0x10, 0xb0, 0xf7, 0x35, 0xe6, + 0xd6, 0xf1, 0x35, 0xd5, 0xe4, 0x51, 0x64, 0xee, + 0x95, 0xc2, 0x93, 0xf5, 0x35, 0xd9, 0x78, 0xb6, + 0xe7, 0xc9, 0xd2, 0xd6, 0x10, 0x79, 0x99, 0xc0, + 0xfc, 0x07, 0x3f, 0xe1, 0x58, 0x3e, 0x17, 0xb7, + 0xf3, 0xf5, 0xa4, 0x72, 0x38, 0x89, 0x4b, 0xff, + 0x00, 0x41, 0xfc, 0xe8, 0xc5, 0xbf, 0x69, 0x5e, + 0x34, 0xc2, 0xaf, 0xbd, 0x35, 0x13, 0xbb, 0x55, + 0x11, 0xa2, 0xaa, 0x8c, 0x05, 0x18, 0x02, 0xbc, + 0xf7, 0x5d, 0xbf, 0x6b, 0xfd, 0x52, 0x56, 0xcf, + 0xee, 0xe3, 0x25, 0x10, 0x7b, 0x0e, 0xff, 0x00, + 0x8d, 0x7a, 0x21, 0xe8, 0x6b, 0xca, 0xe6, 0x8d, + 0xa2, 0x9e, 0x48, 0xe4, 0xfb, 0xe8, 0xc4, 0x37, + 0xd6, 0xab, 0x31, 0x6d, 0x41, 0x45, 0x6c, 0x3a, + 0xee, 0xc9, 0x23, 0xb4, 0xf0, 0xc6, 0x97, 0x1d, + 0xbd, 0x92, 0x5d, 0xc8, 0xa0, 0xcf, 0x28, 0xc8, + 0x24, 0x7d, 0xd5, 0xed, 0x8a, 0xdb, 0x9e, 0x08, + 0xee, 0x21, 0x78, 0xa5, 0x40, 0xc8, 0xc3, 0x04, + 0x11, 0x54, 0x34, 0x2b, 0xb8, 0xae, 0x74, 0x9b, + 0x70, 0x8c, 0x0b, 0x46, 0x8a, 0x8c, 0xbd, 0xc1, + 0x03, 0x14, 0x6b, 0x5a, 0xb4, 0x5a, 0x75, 0xa3, + 0xe1, 0xc1, 0xb8, 0x61, 0x88, 0xd4, 0x1e, 0x73, + 0xeb, 0x5d, 0x34, 0xfd, 0x9c, 0x28, 0xa7, 0xd2, + 0xc6, 0x8b, 0x96, 0x30, 0x3c, 0xfa, 0x45, 0xd9, + 0x23, 0xa0, 0x39, 0x0a, 0x48, 0xcd, 0x75, 0xda, + 0x84, 0x93, 0xcd, 0xe0, 0xc8, 0x5c, 0x64, 0x92, + 0xa9, 0xe6, 0x1f, 0x6f, 0xf3, 0x8a, 0xe4, 0xed, + 0xe0, 0x92, 0xea, 0xe1, 0x20, 0x89, 0x77, 0x48, + 0xed, 0x80, 0x2b, 0xd3, 0x20, 0xb7, 0x8e, 0x0b, + 0x48, 0xed, 0xb8, 0x2a, 0xa8, 0x13, 0x07, 0xb8, + 0x03, 0x15, 0xc1, 0x82, 0xa6, 0xe6, 0xa7, 0xd1, + 0x3d, 0x0c, 0x69, 0x46, 0xf7, 0x3c, 0xd2, 0xdd, + 0xe3, 0x8e, 0xe6, 0x37, 0x96, 0x3f, 0x32, 0x35, + 0x60, 0x59, 0x3d, 0x47, 0xa5, 0x76, 0xb6, 0x9a, + 0xae, 0x85, 0x70, 0x81, 0x02, 0xc1, 0x11, 0xfe, + 0xe4, 0x91, 0x85, 0xff, 0x00, 0xeb, 0x51, 0x77, + 0xe1, 0x5b, 0x0b, 0x82, 0x5e, 0x2d, 0xd0, 0x31, + 0xfe, 0xe7, 0xdd, 0xfc, 0xab, 0x95, 0xd5, 0xb4, + 0x99, 0x74, 0xa9, 0x95, 0x1d, 0xd6, 0x44, 0x70, + 0x76, 0xb0, 0xe3, 0x38, 0xf6, 0xa1, 0x46, 0xae, + 0x11, 0x37, 0x64, 0xd0, 0xad, 0x2a, 0x67, 0x79, + 0x6f, 0x61, 0x65, 0x04, 0xdf, 0x68, 0xb7, 0x82, + 0x34, 0x66, 0x5d, 0xbb, 0x90, 0x63, 0x23, 0xf0, + 0xab, 0x4c, 0x70, 0x84, 0xfb, 0x57, 0x17, 0xe1, + 0x3b, 0xd9, 0x96, 0xff, 0x00, 0xec, 0x9b, 0x89, + 0x85, 0xd4, 0x9d, 0xa7, 0xf8, 0x48, 0xef, 0x5d, + 0x75, 0xeb, 0xf9, 0x76, 0x33, 0xbf, 0xa4, 0x6c, + 0x7f, 0x4a, 0xf4, 0x28, 0x55, 0x8d, 0x4a, 0x7c, + 0xd1, 0x56, 0x37, 0x8c, 0x93, 0x8d, 0xd1, 0xc3, + 0x78, 0x04, 0xf9, 0xde, 0x24, 0xd7, 0x25, 0xf4, + 0x48, 0xf9, 0xfa, 0xb3, 0xff, 0x00, 0x85, 0x7a, + 0x0d, 0x70, 0x5f, 0x0d, 0x93, 0x32, 0x6b, 0x13, + 0x77, 0x69, 0x23, 0x4f, 0xc8, 0x13, 0xff, 0x00, + 0xb3, 0x57, 0x7b, 0x57, 0x43, 0xf8, 0x68, 0xcf, + 0x0b, 0xfc, 0x24, 0x14, 0x51, 0x45, 0x6c, 0x74, + 0x05, 0x14, 0x51, 0x40, 0x1c, 0xdd, 0xf9, 0xfe, + 0xd2, 0xf1, 0x55, 0x9d, 0x90, 0xe6, 0x1b, 0x35, + 0xfb, 0x44, 0xbe, 0x9b, 0x8f, 0xdd, 0x1f, 0x5e, + 0xff, 0x00, 0x8d, 0x73, 0xdf, 0x17, 0x35, 0x2d, + 0x67, 0x4e, 0xd0, 0x34, 0xef, 0xec, 0x98, 0x35, + 0x17, 0x8d, 0xef, 0xa3, 0xfb, 0x63, 0xe9, 0xe5, + 0x84, 0xab, 0x0a, 0xf2, 0x40, 0x2b, 0xca, 0xe7, + 0x18, 0xcf, 0xf8, 0xd6, 0xc6, 0x85, 0x7f, 0x67, + 0x6d, 0x75, 0xa9, 0x4d, 0x7f, 0x77, 0x14, 0x77, + 0xb2, 0xdc, 0xb2, 0xb2, 0xbb, 0x00, 0x55, 0x57, + 0x85, 0x1c, 0xfb, 0x56, 0xff, 0x00, 0xf6, 0x8e, + 0x9f, 0x70, 0x8c, 0x82, 0xf2, 0xdd, 0x95, 0x86, + 0x08, 0x12, 0x8f, 0xf1, 0xac, 0x69, 0x49, 0x6a, + 0xdb, 0xd5, 0x98, 0x52, 0x92, 0x69, 0xca, 0xfb, + 0x9e, 0x1f, 0x1f, 0xc6, 0x5f, 0x0c, 0x6a, 0x97, + 0xd7, 0xb7, 0x1e, 0x26, 0xf0, 0xcb, 0x5c, 0x59, + 0x3b, 0xaa, 0xd8, 0xb3, 0x69, 0xf1, 0x4a, 0xcb, + 0x18, 0x07, 0x3b, 0xd9, 0x9b, 0x93, 0x9c, 0xf0, + 0x3a, 0x57, 0x7f, 0xa2, 0x78, 0x83, 0xc0, 0xfa, + 0x57, 0x83, 0xe6, 0xf1, 0x8e, 0x9d, 0xa5, 0xc5, + 0xa5, 0x69, 0x92, 0x1f, 0x2d, 0xe4, 0x8e, 0xcd, + 0x63, 0x79, 0x30, 0xfb, 0x7e, 0xea, 0x75, 0xf9, + 0x89, 0xfc, 0x8d, 0x75, 0xda, 0x65, 0x9e, 0x97, + 0xa5, 0xe9, 0xf1, 0xd8, 0x69, 0xb1, 0x5b, 0xc1, + 0x69, 0x1e, 0x76, 0x45, 0x16, 0x36, 0xae, 0x4e, + 0x4f, 0xea, 0x4d, 0x5a, 0x92, 0xde, 0xde, 0x78, + 0xbc, 0xa9, 0x22, 0x8a, 0x48, 0xba, 0xec, 0x65, + 0x04, 0x7e, 0x55, 0xad, 0xd1, 0xb5, 0xcf, 0x30, + 0x5f, 0x89, 0xff, 0x00, 0x0b, 0x24, 0x20, 0xb5, + 0xe9, 0x4f, 0xad, 0xa4, 0xff, 0x00, 0xd1, 0x6b, + 0xa2, 0xb7, 0xf8, 0xad, 0xe0, 0x5b, 0x85, 0x1e, + 0x5f, 0x88, 0xed, 0x14, 0x7f, 0xd3, 0x40, 0xc9, + 0xff, 0x00, 0xa1, 0x01, 0x5b, 0x57, 0x3e, 0x13, + 0xf0, 0xdd, 0xe7, 0xfc, 0x7c, 0xe8, 0x1a, 0x54, + 0xdf, 0xf5, 0xd2, 0xd2, 0x36, 0xfe, 0x95, 0x46, + 0x4f, 0x87, 0x5e, 0x0c, 0x93, 0xef, 0x78, 0x63, + 0x4a, 0x1f, 0xee, 0xdb, 0x2a, 0xff, 0x00, 0x2a, + 0x51, 0x8c, 0x63, 0xb2, 0x04, 0x92, 0xd8, 0xc7, + 0x7d, 0x6f, 0xe1, 0xe5, 0xd4, 0xad, 0x27, 0xfc, + 0x24, 0xda, 0x6a, 0xb3, 0x92, 0xc7, 0x37, 0xa8, + 0x39, 0xfc, 0x4d, 0x74, 0x9a, 0x7f, 0x88, 0xbc, + 0x3a, 0xf6, 0xb1, 0x43, 0x67, 0xaf, 0x69, 0xb3, + 0xa2, 0x28, 0x55, 0x29, 0x79, 0x1b, 0x1c, 0x0f, + 0xa1, 0xac, 0x3b, 0x9f, 0x84, 0x1e, 0x03, 0xba, + 0xfb, 0xfe, 0x1e, 0x85, 0x7f, 0xeb, 0x94, 0xb2, + 0x47, 0xff, 0x00, 0xa0, 0xb0, 0xaa, 0x2f, 0xf0, + 0x3b, 0xc0, 0x4f, 0xf7, 0x74, 0xa9, 0x93, 0xfd, + 0xdb, 0xb9, 0x7f, 0xab, 0x52, 0x8d, 0x38, 0x45, + 0xde, 0x2a, 0xc2, 0x51, 0x4b, 0x63, 0xa8, 0xd4, + 0xec, 0xec, 0x35, 0xb7, 0x89, 0xff, 0x00, 0xb4, + 0x63, 0x1b, 0x01, 0x00, 0x23, 0xa9, 0x1c, 0xff, + 0x00, 0xfa, 0xaa, 0x7d, 0x1b, 0x46, 0x8b, 0x4a, + 0xf3, 0x59, 0x26, 0xf3, 0x4c, 0x98, 0xe7, 0x1d, + 0x31, 0x5c, 0x15, 0xc7, 0xec, 0xff, 0x00, 0xe0, + 0xb9, 0x94, 0x88, 0xce, 0xa5, 0x6e, 0x7d, 0x63, + 0xb8, 0x07, 0xff, 0x00, 0x42, 0x53, 0x55, 0x13, + 0xf6, 0x7c, 0xd0, 0xad, 0xdb, 0x75, 0x9e, 0xbb, + 0xad, 0xc0, 0xde, 0xa2, 0x58, 0xf3, 0xfa, 0x28, + 0xa9, 0xf6, 0x30, 0xe7, 0xe7, 0xb6, 0xa1, 0xca, + 0xaf, 0x73, 0xd7, 0xab, 0x0f, 0x57, 0xf0, 0xe4, + 0x3a, 0x8c, 0x86, 0x78, 0xdf, 0xca, 0x9c, 0x8e, + 0x4e, 0x32, 0x1b, 0xeb, 0x5e, 0x7f, 0x27, 0xc1, + 0x4b, 0xf8, 0xd7, 0x16, 0x3e, 0x3f, 0xd7, 0x60, + 0x3d, 0xb7, 0x33, 0x37, 0xf2, 0x75, 0xa8, 0xe3, + 0xf8, 0x4f, 0xe3, 0x6b, 0x56, 0xdd, 0x6f, 0xf1, + 0x3f, 0x52, 0x27, 0xd1, 0xc4, 0xa4, 0x7e, 0x46, + 0x53, 0x55, 0x52, 0x9c, 0x6a, 0x2e, 0x59, 0x20, + 0x94, 0x54, 0x95, 0x99, 0xd3, 0x37, 0x85, 0xb5, + 0x48, 0x9b, 0xe4, 0xf2, 0xdb, 0xdd, 0x1f, 0x1f, + 0xce, 0x96, 0x2f, 0x09, 0xea, 0x32, 0x3e, 0x65, + 0x68, 0xa3, 0x1d, 0xc9, 0x6c, 0x9f, 0xd2, 0xb9, + 0xd6, 0xf0, 0x3f, 0xc5, 0x48, 0x07, 0xfa, 0x37, + 0xc4, 0x18, 0xa4, 0x3d, 0xbc, 0xe8, 0x7f, 0xfb, + 0x16, 0xa8, 0x17, 0x41, 0xf8, 0xdf, 0x6e, 0xd9, + 0x5f, 0x14, 0x69, 0x13, 0x81, 0xd8, 0xa2, 0xf3, + 0xf9, 0xc2, 0x2b, 0x97, 0xea, 0x14, 0xbc, 0xcc, + 0xfd, 0x8c, 0x4f, 0x4e, 0xd2, 0xb4, 0x3b, 0x6d, + 0x2d, 0x77, 0x2e, 0x64, 0x98, 0x8c, 0x19, 0x1b, + 0xfa, 0x7a, 0x56, 0x67, 0x89, 0xad, 0x75, 0x2b, + 0x8b, 0xa8, 0x64, 0xb5, 0x89, 0xcc, 0x71, 0x2f, + 0x0c, 0x8d, 0x83, 0xb8, 0xf5, 0xf7, 0xf4, 0xae, + 0x29, 0x9f, 0xe3, 0x7d, 0xb2, 0xf1, 0x1e, 0x85, + 0x76, 0x47, 0xa6, 0xd0, 0x4f, 0xea, 0xb5, 0x5f, + 0xfe, 0x12, 0x2f, 0x8d, 0xf0, 0x9f, 0x9f, 0xc2, + 0x7a, 0x54, 0x98, 0xf4, 0x2a, 0x7f, 0x94, 0xd5, + 0xb4, 0xa8, 0x45, 0xc3, 0xd9, 0xad, 0x11, 0x6e, + 0x09, 0xae, 0x53, 0xa6, 0x5b, 0xef, 0x10, 0x40, + 0x36, 0xe6, 0xec, 0x7f, 0xbf, 0x19, 0x3f, 0xcc, + 0x54, 0x12, 0x5a, 0xea, 0xfa, 0x9c, 0xe1, 0xa4, + 0x86, 0xe2, 0x57, 0xe8, 0x0b, 0xa9, 0x00, 0x7f, + 0x41, 0x58, 0xcb, 0xe3, 0xbf, 0x8a, 0x56, 0xeb, + 0xfe, 0x95, 0xf0, 0xf5, 0x25, 0x23, 0xaf, 0x90, + 0xe7, 0xff, 0x00, 0x8a, 0x6a, 0x85, 0xbe, 0x2e, + 0xf8, 0xca, 0xdd, 0x88, 0xb8, 0xf8, 0x63, 0xa9, + 0xe4, 0x75, 0xdb, 0xe6, 0x81, 0xff, 0x00, 0xa2, + 0x8d, 0x73, 0xbc, 0x0f, 0x36, 0x92, 0x9b, 0x68, + 0xcf, 0xd9, 0x5f, 0x76, 0x7a, 0x37, 0x87, 0xf4, + 0x26, 0xd3, 0x4b, 0x4f, 0x39, 0x06, 0x77, 0x1b, + 0x70, 0x3a, 0x28, 0xff, 0x00, 0x38, 0xab, 0xfa, + 0xe4, 0x9e, 0x56, 0x87, 0x78, 0xfe, 0x91, 0x37, + 0xf2, 0xae, 0x7f, 0xc0, 0xbe, 0x33, 0xbd, 0xf1, + 0x7c, 0x37, 0x8f, 0x7b, 0xe1, 0xdb, 0xbd, 0x1d, + 0xad, 0x8a, 0x28, 0x5b, 0x96, 0x27, 0xcc, 0xdd, + 0x9e, 0x99, 0x55, 0xe9, 0x8f, 0xd6, 0xb5, 0x7c, + 0x57, 0x27, 0x97, 0xe1, 0xab, 0xb3, 0xea, 0xa0, + 0x7e, 0xa2, 0xba, 0x3d, 0x9c, 0x69, 0x52, 0x6a, + 0x25, 0x4d, 0x28, 0x53, 0x76, 0x30, 0xbe, 0x19, + 0x29, 0xfe, 0xcb, 0xd4, 0xe4, 0x3f, 0xc5, 0x7c, + 0x40, 0xfa, 0x08, 0xd3, 0xfc, 0x4d, 0x77, 0x15, + 0xc9, 0x7c, 0x39, 0x4c, 0x78, 0x58, 0xc9, 0xff, + 0x00, 0x3d, 0x2e, 0x65, 0x6f, 0xc9, 0xb6, 0xff, + 0x00, 0x4a, 0xeb, 0x6a, 0xe9, 0x2b, 0x41, 0x13, + 0x86, 0x56, 0xa5, 0x1f, 0x40, 0xa2, 0x8a, 0x2b, + 0x43, 0x70, 0xa2, 0x8a, 0x28, 0x03, 0x9a, 0xd6, + 0xfc, 0x19, 0xa7, 0xeb, 0x57, 0x5f, 0x6b, 0x32, + 0x4d, 0x6d, 0x72, 0xc3, 0x0c, 0xf0, 0xb6, 0x37, + 0xfa, 0x64, 0x1a, 0xc5, 0x7f, 0x86, 0x8d, 0x9f, + 0xdd, 0x6b, 0x73, 0x01, 0xe8, 0xf0, 0xa9, 0xfe, + 0xb5, 0xdf, 0x51, 0x59, 0xca, 0x8c, 0x25, 0xab, + 0x46, 0x12, 0xc3, 0x52, 0x93, 0xbb, 0x89, 0xe7, + 0x4d, 0xf0, 0xeb, 0x53, 0x4f, 0xf5, 0x3a, 0xc4, + 0x4d, 0xfe, 0xf4, 0x24, 0x7f, 0x23, 0x51, 0x7f, + 0xc2, 0x15, 0xe2, 0x78, 0x7f, 0xd5, 0x6a, 0x36, + 0xad, 0xf4, 0x77, 0x5a, 0xf4, 0xac, 0xd1, 0x51, + 0xf5, 0x6a, 0x7d, 0x88, 0x78, 0x3a, 0x7f, 0xd3, + 0x3c, 0xd7, 0xfb, 0x07, 0xc6, 0xd0, 0x0f, 0xdd, + 0xce, 0xaf, 0xfe, 0xed, 0xd1, 0x1f, 0xce, 0x93, + 0xca, 0xf1, 0xec, 0x1f, 0xf2, 0xc6, 0x66, 0xff, + 0x00, 0x76, 0xe1, 0x5a, 0xbd, 0x2e, 0x8a, 0x9f, + 0xab, 0xc1, 0x6c, 0xd8, 0xbe, 0xa9, 0x1e, 0x92, + 0x6b, 0xe6, 0x79, 0x99, 0xd5, 0xbc, 0x6f, 0x6f, + 0xf7, 0xec, 0x6f, 0x1b, 0xe9, 0x12, 0x37, 0xf2, + 0xa3, 0xfe, 0x12, 0xff, 0x00, 0x14, 0x41, 0xfe, + 0xbb, 0x4e, 0xb9, 0x1f, 0xef, 0x5a, 0x1f, 0xe9, + 0x5e, 0x97, 0x9a, 0x5e, 0x29, 0xfb, 0x07, 0xd2, + 0x4c, 0x3e, 0xad, 0x2e, 0x93, 0x67, 0x99, 0x0f, + 0x88, 0xda, 0x8c, 0x47, 0x13, 0x5a, 0x28, 0x3f, + 0xed, 0x42, 0xe2, 0xa6, 0x4f, 0x89, 0xe4, 0x7f, + 0xac, 0xb5, 0x8b, 0xfe, 0xfa, 0x2b, 0xfd, 0x2b, + 0xd1, 0x88, 0x56, 0xea, 0x01, 0xfa, 0xd4, 0x32, + 0x59, 0x5a, 0xcb, 0xfe, 0xb2, 0xda, 0x16, 0xff, + 0x00, 0x79, 0x01, 0xa3, 0xd8, 0xd4, 0x5b, 0x48, + 0x3d, 0x8d, 0x6e, 0x95, 0x3f, 0x03, 0x89, 0x8f, + 0xe2, 0x6d, 0xa9, 0xfb, 0xd6, 0xab, 0xf8, 0x4c, + 0x3f, 0xc2, 0xad, 0x47, 0xf1, 0x1b, 0x4e, 0x7f, + 0xbd, 0x6f, 0x28, 0xff, 0x00, 0x75, 0x94, 0xd7, + 0x44, 0xfa, 0x06, 0x8f, 0x2f, 0xdf, 0xd2, 0xec, + 0xce, 0x7d, 0x61, 0x5f, 0xf0, 0xaa, 0x92, 0xf8, + 0x3b, 0xc3, 0xb2, 0xfd, 0xed, 0x26, 0xdb, 0xfe, + 0x02, 0xbb, 0x7f, 0x95, 0x2e, 0x4a, 0xdd, 0x24, + 0x1c, 0x98, 0x85, 0xb4, 0x97, 0xdc, 0x52, 0x4f, + 0x1e, 0xe9, 0x0d, 0xd5, 0x67, 0x5f, 0xf8, 0x08, + 0x3f, 0xd6, 0xac, 0xa7, 0x8d, 0x74, 0x57, 0xeb, + 0x3b, 0xaf, 0xd6, 0x33, 0x50, 0xbf, 0xc3, 0xff, + 0x00, 0x0d, 0xb7, 0x4b, 0x02, 0x9f, 0xee, 0x4a, + 0xc3, 0xfa, 0xd5, 0x59, 0x3e, 0x1c, 0x68, 0x4d, + 0xf7, 0x1a, 0xf2, 0x3f, 0xf7, 0x27, 0x3f, 0xd6, + 0x8b, 0x57, 0x5d, 0x50, 0x7f, 0xb5, 0x2e, 0xc6, + 0xba, 0x78, 0xaf, 0x45, 0x7e, 0x97, 0xc8, 0x3e, + 0xa0, 0x8a, 0xb0, 0x9a, 0xfe, 0x95, 0x27, 0xdd, + 0xbf, 0x80, 0xff, 0x00, 0xc0, 0xc0, 0xae, 0x62, + 0x4f, 0x86, 0x96, 0x1f, 0xf2, 0xcb, 0x51, 0xbe, + 0x4f, 0xab, 0x06, 0xfe, 0x95, 0x5d, 0xfe, 0x19, + 0xb7, 0x58, 0xb5, 0xc9, 0x80, 0xf4, 0x78, 0x41, + 0xfe, 0xb4, 0x73, 0x57, 0xec, 0x85, 0xcf, 0x89, + 0x5b, 0xc5, 0x7d, 0xe7, 0x6e, 0x9a, 0x95, 0x93, + 0xfd, 0xdb, 0xb8, 0x0f, 0xd2, 0x41, 0x53, 0x2c, + 0xd1, 0x37, 0x2b, 0x22, 0x1f, 0xa1, 0xaf, 0x39, + 0x93, 0xe1, 0xce, 0xa2, 0x99, 0xf2, 0xf5, 0x88, + 0x9b, 0xfd, 0xf8, 0x48, 0xfe, 0xb5, 0x59, 0xfc, + 0x13, 0xaf, 0xc1, 0x92, 0xb7, 0xf6, 0x4c, 0x07, + 0xfb, 0xe3, 0xfa, 0x52, 0xf6, 0xb5, 0x56, 0xf1, + 0xfc, 0x49, 0x78, 0x9a, 0x91, 0xf8, 0xa1, 0xf8, + 0x9e, 0xa3, 0x9c, 0xf7, 0xae, 0x6b, 0xc7, 0x77, + 0x09, 0x6f, 0xe1, 0x89, 0x59, 0x98, 0x00, 0x5d, + 0x41, 0x39, 0xfc, 0x6b, 0x83, 0xb8, 0xb1, 0xd7, + 0xec, 0x4e, 0x3e, 0xd7, 0x06, 0x7f, 0xd9, 0x99, + 0xc7, 0xf4, 0xad, 0xbd, 0x1f, 0xc1, 0x9a, 0x86, + 0xb0, 0xd1, 0x4f, 0xe2, 0x3d, 0x4f, 0xed, 0x36, + 0x68, 0x43, 0xad, 0x9c, 0x4c, 0xc5, 0x5c, 0xf6, + 0xdc, 0x4f, 0xf2, 0xa1, 0x54, 0x75, 0x53, 0x85, + 0xac, 0x4f, 0xd6, 0x5d, 0x6b, 0xd3, 0x51, 0xb3, + 0x67, 0x4b, 0xe0, 0x3b, 0x76, 0xb6, 0xf0, 0x66, + 0x9c, 0x18, 0x10, 0x64, 0x56, 0x9b, 0x9e, 0xb8, + 0x77, 0x2e, 0x3f, 0x46, 0x15, 0xd1, 0xd3, 0x51, + 0x42, 0x28, 0x55, 0x00, 0x00, 0x30, 0x00, 0xed, + 0x4e, 0xae, 0x94, 0xac, 0xac, 0x77, 0x42, 0x3c, + 0xb1, 0x51, 0xec, 0x14, 0x51, 0x45, 0x32, 0x82, + 0x8a, 0x28, 0xa0, 0x0f, 0xff, 0xd9, +}; + +static const uint8_t data_images_mcu_side_by_side_jpg[] = +{ + /* /images/mcu_side-by-side.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x6d, 0x63, 0x75, 0x5f, 0x73, 0x69, 0x64, 0x65, + 0x2d, 0x62, 0x79, 0x2d, 0x73, 0x69, 0x64, 0x65, + 0x2e, 0x6a, 0x70, 0x67, 0x00, + 0xff, 0xd8, 0xff, 0xe1, 0x00, 0x18, 0x45, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2a, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xff, + 0xe1, 0x03, 0xb4, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, + 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, + 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, + 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, + 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, + 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, + 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, + 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x20, 0x35, 0x2e, 0x30, 0x2d, 0x63, 0x30, + 0x36, 0x30, 0x20, 0x36, 0x31, 0x2e, 0x31, 0x33, + 0x34, 0x37, 0x37, 0x37, 0x2c, 0x20, 0x32, 0x30, + 0x31, 0x30, 0x2f, 0x30, 0x32, 0x2f, 0x31, 0x32, + 0x2d, 0x31, 0x37, 0x3a, 0x33, 0x32, 0x3a, 0x30, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, + 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, + 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, + 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, + 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, + 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, + 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, + 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, + 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, + 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, + 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x42, 0x45, + 0x43, 0x38, 0x43, 0x41, 0x39, 0x45, 0x32, 0x36, + 0x44, 0x43, 0x31, 0x31, 0x45, 0x33, 0x41, 0x39, + 0x46, 0x38, 0x45, 0x44, 0x36, 0x42, 0x43, 0x36, + 0x32, 0x38, 0x31, 0x30, 0x38, 0x41, 0x22, 0x20, + 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, + 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, + 0x64, 0x3a, 0x42, 0x45, 0x43, 0x38, 0x43, 0x41, + 0x39, 0x46, 0x32, 0x36, 0x44, 0x43, 0x31, 0x31, + 0x45, 0x33, 0x41, 0x39, 0x46, 0x38, 0x45, 0x44, + 0x36, 0x42, 0x43, 0x36, 0x32, 0x38, 0x31, 0x30, + 0x38, 0x41, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, + 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, + 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x53, 0x35, + 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, + 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, + 0x75, 0x75, 0x69, 0x64, 0x3a, 0x66, 0x61, 0x66, + 0x35, 0x62, 0x64, 0x64, 0x35, 0x2d, 0x62, 0x61, + 0x33, 0x64, 0x2d, 0x31, 0x31, 0x64, 0x61, 0x2d, + 0x61, 0x64, 0x33, 0x31, 0x2d, 0x64, 0x33, 0x33, + 0x64, 0x37, 0x35, 0x31, 0x38, 0x32, 0x66, 0x31, + 0x62, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, + 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, + 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x42, 0x45, 0x43, + 0x38, 0x43, 0x41, 0x39, 0x44, 0x32, 0x36, 0x44, + 0x43, 0x31, 0x31, 0x45, 0x33, 0x41, 0x39, 0x46, + 0x38, 0x45, 0x44, 0x36, 0x42, 0x43, 0x36, 0x32, + 0x38, 0x31, 0x30, 0x38, 0x41, 0x22, 0x2f, 0x3e, + 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x3e, + 0x48, 0x61, 0x75, 0x67, 0x6c, 0x69, 0x65, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x3e, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, + 0x3e, 0x4a, 0x6f, 0x65, 0x3c, 0x2f, 0x72, 0x64, + 0x66, 0x3a, 0x6c, 0x69, 0x3e, 0x20, 0x3c, 0x2f, + 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, + 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x3e, 0x20, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, + 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xff, 0xed, 0x00, + 0x48, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, + 0x6f, 0x70, 0x20, 0x33, 0x2e, 0x30, 0x00, 0x38, + 0x42, 0x49, 0x4d, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x1c, 0x01, 0x5a, 0x00, 0x03, + 0x1b, 0x25, 0x47, 0x1c, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x00, 0x38, 0x42, 0x49, 0x4d, 0x04, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfc, + 0xe1, 0x1f, 0x89, 0xc8, 0xb7, 0xc9, 0x78, 0x2f, + 0x34, 0x62, 0x34, 0x07, 0x58, 0x77, 0xeb, 0xff, + 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, + 0xdb, 0x00, 0x84, 0x00, 0x0c, 0x08, 0x08, 0x08, + 0x09, 0x08, 0x0c, 0x09, 0x09, 0x0c, 0x11, 0x0b, + 0x0a, 0x0b, 0x11, 0x15, 0x0f, 0x0c, 0x0c, 0x0f, + 0x15, 0x18, 0x13, 0x13, 0x15, 0x13, 0x13, 0x18, + 0x17, 0x12, 0x14, 0x14, 0x14, 0x14, 0x12, 0x17, + 0x17, 0x1b, 0x1c, 0x1e, 0x1c, 0x1b, 0x17, 0x24, + 0x24, 0x27, 0x27, 0x24, 0x24, 0x35, 0x33, 0x33, + 0x33, 0x35, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x01, 0x0d, 0x0b, 0x0b, + 0x0d, 0x0e, 0x0d, 0x10, 0x0e, 0x0e, 0x10, 0x14, + 0x0e, 0x0f, 0x0e, 0x14, 0x14, 0x10, 0x11, 0x11, + 0x10, 0x14, 0x1d, 0x14, 0x14, 0x15, 0x14, 0x14, + 0x1d, 0x25, 0x1a, 0x17, 0x17, 0x17, 0x17, 0x1a, + 0x25, 0x20, 0x23, 0x1e, 0x1e, 0x1e, 0x23, 0x20, + 0x28, 0x28, 0x25, 0x25, 0x28, 0x28, 0x32, 0x32, + 0x30, 0x32, 0x32, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x02, 0xb7, 0x05, 0x00, 0x03, 0x01, + 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, + 0xff, 0xc4, 0x00, 0xc5, 0x00, 0x01, 0x00, 0x02, + 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, + 0x03, 0x04, 0x07, 0x01, 0x02, 0x08, 0x01, 0x01, + 0x00, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x10, 0x00, + 0x01, 0x03, 0x03, 0x01, 0x03, 0x03, 0x0d, 0x0c, + 0x09, 0x04, 0x01, 0x03, 0x03, 0x02, 0x07, 0x01, + 0x00, 0x02, 0x03, 0x11, 0x04, 0x05, 0x06, 0x21, + 0x31, 0x12, 0x41, 0x71, 0x13, 0x51, 0x61, 0x91, + 0xb1, 0x22, 0x32, 0x72, 0xb2, 0x73, 0x14, 0x34, + 0x35, 0x07, 0x81, 0xa1, 0xc1, 0x42, 0x82, 0xc2, + 0xd2, 0x33, 0xb3, 0x54, 0x15, 0x16, 0x52, 0x62, + 0x92, 0xa2, 0x23, 0x83, 0x55, 0x36, 0x37, 0xd1, + 0x53, 0x93, 0x17, 0x74, 0x43, 0x63, 0x24, 0xe1, + 0xc3, 0x25, 0xa3, 0x75, 0x56, 0xf1, 0xe2, 0x64, + 0x84, 0x26, 0x44, 0x11, 0x01, 0x00, 0x01, 0x02, + 0x01, 0x08, 0x03, 0x0d, 0x08, 0x03, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, + 0x04, 0x11, 0x31, 0x71, 0xb1, 0x32, 0x72, 0x33, + 0x34, 0x21, 0x51, 0x61, 0x41, 0x81, 0x91, 0xa1, + 0x12, 0x82, 0x92, 0x73, 0x14, 0x24, 0x05, 0x15, + 0x25, 0xf0, 0xc1, 0x62, 0xa2, 0xb2, 0x13, 0x74, + 0x35, 0x52, 0x23, 0xa3, 0x22, 0x42, 0xf1, 0xff, + 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, + 0x03, 0x11, 0x00, 0x3f, 0x00, 0xea, 0xa8, 0x88, + 0x80, 0xb5, 0x72, 0x1b, 0x2c, 0xae, 0x7c, 0x9b, + 0xfc, 0x52, 0xb6, 0x96, 0xae, 0x43, 0xd0, 0xae, + 0x7c, 0x93, 0xfc, 0x52, 0xa6, 0x9c, 0xf0, 0xad, + 0xcd, 0x8a, 0xb4, 0x4e, 0xa5, 0x3f, 0x1b, 0x8c, + 0xba, 0xc8, 0xb1, 0xef, 0x8e, 0x70, 0xc1, 0x19, + 0x00, 0xf1, 0x17, 0x6d, 0xa8, 0xaf, 0x22, 0xdc, + 0xfc, 0xb3, 0x90, 0xfb, 0xd3, 0x7b, 0x2e, 0x59, + 0xf4, 0x9f, 0xa3, 0xdc, 0x78, 0x6d, 0xf1, 0x54, + 0xf2, 0xe9, 0xbb, 0x7e, 0xba, 0x6e, 0x4c, 0x44, + 0xc6, 0x48, 0xec, 0x79, 0xf8, 0x4c, 0x15, 0x9b, + 0x96, 0x28, 0xae, 0xa8, 0x99, 0xaa, 0x63, 0xa7, + 0xff, 0x00, 0x53, 0xd6, 0xad, 0x7e, 0x58, 0xc8, + 0x7d, 0xe5, 0xbd, 0x97, 0x27, 0xe5, 0x8c, 0x87, + 0xde, 0x5b, 0xd9, 0x72, 0xb2, 0xa2, 0xcf, 0xda, + 0x6e, 0x75, 0xc7, 0x81, 0xbf, 0xcb, 0xf0, 0xfd, + 0x55, 0x7a, 0x52, 0xad, 0x7e, 0x58, 0xc8, 0x7d, + 0xe5, 0xbd, 0x97, 0x27, 0xe5, 0x8c, 0x87, 0xde, + 0x5b, 0xd9, 0x72, 0xb2, 0xa2, 0x7b, 0x4d, 0xce, + 0xb8, 0xf0, 0x1f, 0x2f, 0xc3, 0xf5, 0x55, 0xe9, + 0x4a, 0xb5, 0xf9, 0x63, 0x21, 0xf7, 0x96, 0xf6, + 0x5c, 0x9f, 0x96, 0x32, 0x1f, 0x79, 0x6f, 0x65, + 0xca, 0xca, 0x89, 0xed, 0x37, 0x3a, 0xe3, 0xc0, + 0x7c, 0xbf, 0x0f, 0xd5, 0x57, 0xa5, 0x2a, 0xd7, + 0xe5, 0x8c, 0x87, 0xde, 0x5b, 0xd9, 0x72, 0x7e, + 0x58, 0xc8, 0x7d, 0xe5, 0xbd, 0x97, 0x2b, 0x2a, + 0x27, 0xb4, 0xdc, 0xeb, 0x8f, 0x01, 0xf2, 0xfc, + 0x3f, 0x55, 0x5e, 0x94, 0xab, 0x5f, 0x96, 0x32, + 0x1f, 0x79, 0x6f, 0x65, 0xc9, 0xf9, 0x63, 0x21, + 0xf7, 0x96, 0xf6, 0x5c, 0xac, 0xa8, 0x9e, 0xd3, + 0x73, 0xae, 0x3c, 0x07, 0xcb, 0xf0, 0xfd, 0x55, + 0x7a, 0x52, 0xad, 0x7e, 0x58, 0xc8, 0x7d, 0xe5, + 0xbd, 0x97, 0x27, 0xe5, 0x8c, 0x87, 0xde, 0x5b, + 0xd9, 0x72, 0xb2, 0xa2, 0x7b, 0x4d, 0xce, 0xb8, + 0xf0, 0x1f, 0x2f, 0xc3, 0xf5, 0x55, 0xe9, 0x4a, + 0xb5, 0xf9, 0x63, 0x21, 0xf7, 0x96, 0xf6, 0x5c, + 0x9f, 0x96, 0x32, 0x1f, 0x79, 0x6f, 0x65, 0xca, + 0xca, 0x89, 0xed, 0x37, 0x3a, 0xe3, 0xc0, 0x7c, + 0xbf, 0x0f, 0xd5, 0x57, 0xa5, 0x2a, 0xd7, 0xe5, + 0x8c, 0x87, 0xde, 0x5b, 0xd9, 0x72, 0x7e, 0x58, + 0xc8, 0x7d, 0xe5, 0xbd, 0x97, 0x2b, 0x2a, 0x27, + 0xb4, 0xdc, 0xeb, 0x8f, 0x01, 0xf2, 0xfc, 0x3f, + 0x55, 0x5e, 0x94, 0xab, 0x5f, 0x96, 0x32, 0x1f, + 0x79, 0x6f, 0x65, 0xc9, 0xf9, 0x63, 0x21, 0xf7, + 0x96, 0xf6, 0x5c, 0xac, 0xa8, 0x9e, 0xd3, 0x73, + 0xae, 0x3c, 0x07, 0xcb, 0xf0, 0xfd, 0x55, 0x7a, + 0x52, 0xad, 0x7e, 0x58, 0xc8, 0x7d, 0xe5, 0xbd, + 0x97, 0x27, 0xe5, 0x8c, 0x87, 0xde, 0x5b, 0xd9, + 0x72, 0xb2, 0xa2, 0x7b, 0x4d, 0xce, 0xb8, 0xf0, + 0x1f, 0x2f, 0xc3, 0xf5, 0x55, 0xe9, 0x4a, 0xb5, + 0xf9, 0x63, 0x21, 0xf7, 0x96, 0xf6, 0x5c, 0x9f, + 0x96, 0x32, 0x1f, 0x79, 0x6f, 0x65, 0xca, 0xca, + 0x89, 0xed, 0x37, 0x3a, 0xe3, 0xc0, 0x7c, 0xbf, + 0x0f, 0xd5, 0x57, 0xa5, 0x2a, 0xd7, 0xe5, 0x8c, + 0x87, 0xde, 0x5b, 0xd9, 0x72, 0x7e, 0x58, 0xc8, + 0x7d, 0xe5, 0xbd, 0x97, 0x2b, 0x2a, 0x27, 0xb4, + 0xdc, 0xeb, 0x8f, 0x01, 0xf2, 0xfc, 0x3f, 0x55, + 0x5e, 0x94, 0xab, 0x5f, 0x96, 0x32, 0x1f, 0x79, + 0x6f, 0x65, 0xc9, 0xf9, 0x63, 0x21, 0xf7, 0x96, + 0xf6, 0x5c, 0xac, 0xa8, 0x9e, 0xd3, 0x73, 0xae, + 0x3c, 0x07, 0xcb, 0xf0, 0xfd, 0x55, 0x7a, 0x52, + 0xad, 0x7e, 0x58, 0xc8, 0x7d, 0xe5, 0xbd, 0x97, + 0x27, 0xe5, 0x8c, 0x87, 0xde, 0x5b, 0xd9, 0x72, + 0xb2, 0xa2, 0x7b, 0x4d, 0xce, 0xb8, 0xf0, 0x1f, + 0x2f, 0xc3, 0xf5, 0x55, 0xe9, 0x4a, 0xb5, 0xf9, + 0x63, 0x21, 0xf7, 0x96, 0xf6, 0x5c, 0x9f, 0x96, + 0x32, 0x1f, 0x79, 0x6f, 0x65, 0xca, 0xca, 0x89, + 0xed, 0x37, 0x3a, 0xe3, 0xc0, 0x7c, 0xbf, 0x0f, + 0xd5, 0x57, 0xa5, 0x2a, 0xd7, 0xe5, 0x8c, 0x87, + 0xde, 0x5b, 0xd9, 0x72, 0x7e, 0x58, 0xc8, 0x7d, + 0xe5, 0xbd, 0x97, 0x2b, 0x2a, 0x27, 0xb4, 0xdc, + 0xeb, 0x8f, 0x01, 0xf2, 0xfc, 0x3f, 0x55, 0x5e, + 0x94, 0xab, 0x5f, 0x96, 0x32, 0x1f, 0x79, 0x6f, + 0x65, 0xcb, 0x0d, 0xee, 0x0e, 0xf6, 0xce, 0xd9, + 0xf7, 0x0f, 0xb8, 0x0e, 0x6b, 0x29, 0x50, 0xd2, + 0xea, 0xed, 0x34, 0xe5, 0x56, 0xb5, 0x1f, 0xa8, + 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0xb5, 0x17, + 0xee, 0x4d, 0x51, 0x13, 0x31, 0xd3, 0x3d, 0x4c, + 0xef, 0x60, 0x6c, 0x53, 0x6a, 0xba, 0xa2, 0x2a, + 0xcb, 0x4d, 0x35, 0x4c, 0x7f, 0xea, 0x7b, 0x90, + 0xfa, 0xd2, 0xc4, 0x9c, 0x4b, 0x09, 0x24, 0x9e, + 0x37, 0xef, 0xe7, 0x52, 0xaf, 0xdc, 0xa2, 0x74, + 0xaf, 0xaa, 0x1b, 0xe1, 0xbf, 0xb6, 0xa5, 0x9f, + 0xb9, 0x67, 0x77, 0x8b, 0x5e, 0xf4, 0xba, 0x70, + 0xdc, 0x0b, 0x7b, 0x90, 0xe5, 0xba, 0x8e, 0xd6, + 0xe2, 0xff, 0x00, 0x5b, 0xdc, 0x58, 0x43, 0x29, + 0x8d, 0xf3, 0xbd, 0x8d, 0x69, 0x24, 0x86, 0x8f, + 0xe1, 0x34, 0xf2, 0x2d, 0xa1, 0xec, 0xf3, 0x39, + 0xf7, 0xf8, 0xbb, 0x32, 0x7f, 0xa2, 0xfa, 0xba, + 0xff, 0x00, 0x27, 0x8f, 0x2a, 0xcf, 0xb1, 0x0a, + 0xfe, 0xb8, 0x6d, 0xda, 0xa2, 0xb9, 0xae, 0x6a, + 0x8c, 0xbf, 0xfa, 0x98, 0xce, 0xfa, 0x3c, 0x66, + 0x3e, 0xfe, 0x1a, 0xde, 0x16, 0x8b, 0x33, 0x4d, + 0x34, 0xd5, 0x87, 0xb7, 0x54, 0xe5, 0xa6, 0x27, + 0xa7, 0x37, 0x75, 0xcf, 0xff, 0x00, 0xeb, 0xcc, + 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x53, 0xfe, + 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, + 0x74, 0x04, 0x5a, 0x7b, 0x35, 0xae, 0xa9, 0xf0, + 0xb8, 0xfe, 0x73, 0x8d, 0xff, 0x00, 0x3a, 0x7d, + 0x0a, 0x5c, 0xff, 0x00, 0xfe, 0xbc, 0xcd, 0xfd, + 0xfe, 0x2e, 0xcc, 0x9f, 0x45, 0x3f, 0xeb, 0xcc, + 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x57, 0x40, + 0x44, 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x3e, 0x73, + 0x8d, 0xff, 0x00, 0x3a, 0x7d, 0x0a, 0x5c, 0xff, + 0x00, 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, + 0x9f, 0x45, 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, + 0xec, 0xc9, 0xf4, 0x57, 0x40, 0x44, 0xf6, 0x6b, + 0x5d, 0x53, 0xe1, 0x3e, 0x73, 0x8d, 0xff, 0x00, + 0x3a, 0x7d, 0x0a, 0x5c, 0xff, 0x00, 0xfe, 0xbc, + 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, 0x3f, + 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, + 0x57, 0x40, 0x44, 0xf6, 0x6b, 0x5d, 0x53, 0xe1, + 0x3e, 0x73, 0x8d, 0xff, 0x00, 0x3a, 0x7d, 0x0a, + 0x5c, 0xff, 0x00, 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, + 0x2e, 0xcc, 0x9f, 0x45, 0x3f, 0xeb, 0xcc, 0xdf, + 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x57, 0x40, 0x44, + 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x3e, 0x73, 0x8d, + 0xff, 0x00, 0x3a, 0x7d, 0x0a, 0x5c, 0xff, 0x00, + 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, + 0x45, 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, 0xec, + 0xc9, 0xf4, 0x57, 0x40, 0x44, 0xf6, 0x6b, 0x5d, + 0x53, 0xe1, 0x3e, 0x73, 0x8d, 0xff, 0x00, 0x3a, + 0x7d, 0x0a, 0x5c, 0xff, 0x00, 0xfe, 0xbc, 0xcd, + 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, 0x3f, 0xeb, + 0xcc, 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x57, + 0x40, 0x44, 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x3e, + 0x73, 0x8d, 0xff, 0x00, 0x3a, 0x7d, 0x0a, 0x5c, + 0xff, 0x00, 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, + 0xcc, 0x9f, 0x45, 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, + 0xe2, 0xec, 0xc9, 0xf4, 0x57, 0x40, 0x44, 0xf6, + 0x6b, 0x5d, 0x53, 0xe1, 0x3e, 0x73, 0x8d, 0xff, + 0x00, 0x3a, 0x7d, 0x0a, 0x5c, 0xff, 0x00, 0xfe, + 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, + 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, 0xec, 0xc9, + 0xf4, 0x57, 0x40, 0x44, 0xf6, 0x6b, 0x5d, 0x53, + 0xe1, 0x3e, 0x73, 0x8d, 0xff, 0x00, 0x3a, 0x7d, + 0x0a, 0x5c, 0xff, 0x00, 0xfe, 0xbc, 0xcd, 0xfd, + 0xfe, 0x2e, 0xcc, 0x9f, 0x45, 0x3f, 0xeb, 0xcc, + 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x57, 0x40, + 0x44, 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x3e, 0x73, + 0x8d, 0xff, 0x00, 0x3a, 0x7d, 0x0a, 0x5c, 0xff, + 0x00, 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, + 0x9f, 0x45, 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, + 0xec, 0xc9, 0xf4, 0x57, 0x40, 0x44, 0xf6, 0x6b, + 0x5d, 0x53, 0xe1, 0x3e, 0x73, 0x8d, 0xff, 0x00, + 0x3a, 0x7d, 0x0a, 0x5c, 0xff, 0x00, 0xfe, 0xbc, + 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, 0x3f, + 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, + 0x57, 0x40, 0x44, 0xf6, 0x6b, 0x5d, 0x53, 0xe1, + 0x3e, 0x73, 0x8d, 0xff, 0x00, 0x3a, 0x7d, 0x0a, + 0x5c, 0xff, 0x00, 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, + 0x2e, 0xcc, 0x9f, 0x45, 0x3f, 0xeb, 0xcc, 0xdf, + 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x57, 0x40, 0x44, + 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x3e, 0x73, 0x8d, + 0xff, 0x00, 0x3a, 0x7d, 0x0a, 0x5c, 0xff, 0x00, + 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, + 0x45, 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, 0xe2, 0xec, + 0xc9, 0xf4, 0x57, 0x40, 0x44, 0xf6, 0x6b, 0x5d, + 0x53, 0xe1, 0x3e, 0x73, 0x8d, 0xff, 0x00, 0x3a, + 0x7d, 0x0a, 0x5c, 0xff, 0x00, 0xfe, 0xbc, 0xcd, + 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, 0x3f, 0xeb, + 0xcc, 0xdf, 0xdf, 0xe2, 0xec, 0xc9, 0xf4, 0x57, + 0x40, 0x44, 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x3e, + 0x73, 0x8d, 0xff, 0x00, 0x3a, 0x7d, 0x0a, 0x5c, + 0xff, 0x00, 0xfe, 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, + 0xcc, 0x9f, 0x45, 0x3f, 0xeb, 0xcc, 0xdf, 0xdf, + 0xe2, 0xec, 0xc9, 0xf4, 0x57, 0x40, 0x44, 0xf6, + 0x6b, 0x5d, 0x53, 0xe1, 0x3e, 0x73, 0x8d, 0xff, + 0x00, 0x3a, 0x7d, 0x0a, 0x5c, 0xff, 0x00, 0xfe, + 0xbc, 0xcd, 0xfd, 0xfe, 0x2e, 0xcc, 0x9f, 0x45, + 0x3f, 0xeb, 0xbc, 0xd9, 0xd9, 0xe7, 0xf1, 0x76, + 0x64, 0xff, 0x00, 0x45, 0xd0, 0x10, 0x6f, 0x09, + 0xec, 0xd6, 0xba, 0xa7, 0xc2, 0x7c, 0xe7, 0x1b, + 0xfe, 0x74, 0xfa, 0x14, 0xb9, 0xe6, 0x81, 0x64, + 0xb0, 0xea, 0xa9, 0xad, 0xe4, 0x79, 0x79, 0x86, + 0x39, 0x98, 0x4d, 0x49, 0x04, 0xb1, 0xcd, 0x6d, + 0x45, 0x57, 0x4c, 0x5c, 0xdf, 0x46, 0xff, 0x00, + 0x7c, 0x5f, 0x73, 0x5c, 0x7d, 0xa0, 0x5d, 0x21, + 0x30, 0xdb, 0x1e, 0x74, 0xad, 0xf1, 0xa9, 0xcb, + 0x8a, 0x89, 0xeb, 0xb5, 0x6e, 0x67, 0x27, 0x5e, + 0x44, 0x5e, 0x68, 0x91, 0x04, 0x74, 0x34, 0xee, + 0xcf, 0x68, 0xad, 0x48, 0xf1, 0xd7, 0x12, 0x46, + 0xd9, 0x04, 0x80, 0x07, 0x0a, 0x8d, 0xeb, 0x6f, + 0x37, 0xf5, 0x31, 0xf8, 0x7f, 0x01, 0x59, 0xad, + 0x3d, 0x1a, 0x2f, 0x04, 0x76, 0x97, 0x97, 0x5e, + 0x1a, 0xde, 0x27, 0xe2, 0x37, 0xa9, 0xbb, 0x96, + 0x62, 0x9b, 0x74, 0x4c, 0x64, 0x99, 0x8e, 0x9e, + 0xf3, 0x9a, 0x9b, 0xb5, 0x5b, 0xc3, 0xd1, 0x34, + 0xe4, 0xcb, 0x35, 0x4c, 0x74, 0xc6, 0x56, 0x87, + 0xe1, 0x57, 0x3f, 0xee, 0x8f, 0x7d, 0x3f, 0x0a, + 0xb9, 0xff, 0x00, 0x74, 0x7b, 0xea, 0x51, 0x17, + 0x47, 0xc9, 0xb0, 0x7d, 0x55, 0xfa, 0x72, 0xaf, + 0xb5, 0xdd, 0xec, 0xf4, 0x51, 0x7f, 0x85, 0x5c, + 0xff, 0x00, 0xba, 0x3d, 0xf4, 0xfc, 0x2a, 0xe7, + 0xfd, 0xd1, 0xef, 0xa9, 0x44, 0x4f, 0x93, 0x60, + 0xfa, 0xab, 0xf4, 0xe4, 0xf6, 0xbb, 0xbd, 0x9e, + 0x04, 0x5f, 0xe1, 0x57, 0x3f, 0xee, 0x8f, 0x7d, + 0x3f, 0x0a, 0xb9, 0xff, 0x00, 0x74, 0x7b, 0xea, + 0x51, 0x13, 0xe4, 0xd8, 0x3e, 0xaa, 0xfd, 0x39, + 0x3d, 0xae, 0xef, 0x67, 0x81, 0x17, 0xf8, 0x55, + 0xcf, 0xfb, 0xa3, 0xdf, 0x4f, 0xc2, 0xae, 0x7f, + 0xdd, 0x1e, 0xfa, 0x94, 0x44, 0xf9, 0x36, 0x0f, + 0xaa, 0xbf, 0x4e, 0x4f, 0x6b, 0xbb, 0xd9, 0xe0, + 0x45, 0xfe, 0x15, 0x73, 0xfe, 0xe8, 0xf7, 0xd3, + 0xf0, 0xab, 0x9f, 0xf7, 0x47, 0xbe, 0xa5, 0x11, + 0x3e, 0x4d, 0x83, 0xea, 0xaf, 0xd3, 0x93, 0xda, + 0xee, 0xf6, 0x78, 0x11, 0x7f, 0x85, 0x5c, 0xff, + 0x00, 0xba, 0x3d, 0xf4, 0xfc, 0x2a, 0xe7, 0xfd, + 0xd1, 0xef, 0xa9, 0x44, 0x4f, 0x93, 0x60, 0xfa, + 0xab, 0xf4, 0xe4, 0xf6, 0xbb, 0xbd, 0x9e, 0x04, + 0x5f, 0xe1, 0x57, 0x3f, 0xee, 0x8f, 0x7d, 0x3f, + 0x0a, 0xb9, 0xff, 0x00, 0x74, 0x7b, 0xea, 0x51, + 0x13, 0xe4, 0xd8, 0x3e, 0xaa, 0xfd, 0x39, 0x3d, + 0xae, 0xef, 0x67, 0x81, 0x17, 0xf8, 0x55, 0xcf, + 0xfb, 0xa3, 0xdf, 0x4f, 0xc2, 0xae, 0x7f, 0xdd, + 0x1e, 0xfa, 0x94, 0x44, 0xf9, 0x36, 0x0f, 0xaa, + 0xbf, 0x4e, 0x4f, 0x6b, 0xbb, 0xd9, 0xe0, 0x45, + 0xfe, 0x15, 0x73, 0xfe, 0xe8, 0xf7, 0xd3, 0xf0, + 0xab, 0x9f, 0xf7, 0x47, 0xbe, 0xa5, 0x11, 0x3e, + 0x4d, 0x83, 0xea, 0xaf, 0xd3, 0x93, 0xda, 0xee, + 0xf6, 0x78, 0x11, 0x7f, 0x85, 0x5c, 0xff, 0x00, + 0xba, 0x3d, 0xf4, 0xfc, 0x2a, 0xe7, 0xfd, 0xd1, + 0xef, 0xa9, 0x44, 0x4f, 0x93, 0x60, 0xfa, 0xab, + 0xf4, 0xe4, 0xf6, 0xbb, 0xbd, 0x9e, 0x04, 0x5f, + 0xe1, 0x57, 0x3f, 0xee, 0x8f, 0x7d, 0x3f, 0x0a, + 0xb9, 0xff, 0x00, 0x74, 0x7b, 0xea, 0x51, 0x13, + 0xe4, 0xd8, 0x3e, 0xaa, 0xfd, 0x39, 0x3d, 0xae, + 0xef, 0x67, 0x81, 0x17, 0xf8, 0x55, 0xcf, 0xfb, + 0xa3, 0xdf, 0x4f, 0xc2, 0xae, 0x7f, 0xdd, 0x1e, + 0xfa, 0x94, 0x44, 0xf9, 0x36, 0x0f, 0xaa, 0xbf, + 0x4e, 0x4f, 0x6b, 0xbb, 0xd9, 0xe0, 0x45, 0xfe, + 0x15, 0x73, 0xfe, 0xe8, 0xf7, 0xd3, 0xf0, 0xab, + 0x9f, 0xf7, 0x47, 0xbe, 0xa5, 0x11, 0x3e, 0x4d, + 0x83, 0xea, 0xaf, 0xd3, 0x93, 0xda, 0xee, 0xf6, + 0x78, 0x11, 0x7f, 0x85, 0x5c, 0xff, 0x00, 0xba, + 0x3d, 0xf4, 0xfc, 0x2a, 0xe7, 0xfd, 0xd1, 0xef, + 0xa9, 0x44, 0x4f, 0x93, 0x60, 0xfa, 0xab, 0xf4, + 0xe4, 0xf6, 0xbb, 0xbd, 0x9e, 0x04, 0x5f, 0xe1, + 0x57, 0x3f, 0xee, 0x8f, 0x7d, 0x3f, 0x0a, 0xb9, + 0xff, 0x00, 0x74, 0x7b, 0xea, 0x51, 0x13, 0xe4, + 0xd8, 0x3e, 0xaa, 0xfd, 0x39, 0x3d, 0xae, 0xef, + 0x67, 0x81, 0x17, 0xf8, 0x55, 0xcf, 0xfb, 0xa3, + 0xdf, 0x4f, 0xc2, 0xae, 0x7f, 0xdd, 0x1e, 0xfa, + 0x94, 0x44, 0xf9, 0x36, 0x0f, 0xaa, 0xbf, 0x4e, + 0x4f, 0x6b, 0xbb, 0xd9, 0xe0, 0x45, 0xfe, 0x15, + 0x73, 0xfe, 0xe8, 0xf7, 0xd3, 0xf0, 0xab, 0x9f, + 0xf7, 0x47, 0xbe, 0xa5, 0x11, 0x3e, 0x4d, 0x83, + 0xea, 0xaf, 0xd3, 0x93, 0xda, 0xee, 0xf6, 0x78, + 0x10, 0x97, 0x36, 0xf2, 0xdb, 0x3d, 0x8d, 0x73, + 0xea, 0x5d, 0xb7, 0x61, 0x2a, 0xc4, 0xce, 0xf4, + 0x73, 0x28, 0x5c, 0xb7, 0xd7, 0x43, 0xcc, 0x7b, + 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x54, 0xf8, 0x6d, + 0xaa, 0x6d, 0x62, 0xb1, 0x96, 0xe8, 0xcb, 0xe4, + 0xd1, 0xfb, 0x51, 0x19, 0x67, 0x2f, 0x72, 0x53, + 0x88, 0xaa, 0x6a, 0xb7, 0x6a, 0xa9, 0xcf, 0x3e, + 0x56, 0x56, 0x1b, 0xbf, 0x45, 0x9b, 0xc9, 0xbb, + 0xc5, 0x2b, 0x9d, 0xe1, 0xb0, 0xf7, 0xb9, 0x71, + 0x2f, 0x43, 0x70, 0x23, 0xe8, 0x78, 0x78, 0xb8, + 0xcb, 0xb6, 0xf1, 0x57, 0x75, 0x39, 0x97, 0x44, + 0xbc, 0xf4, 0x59, 0xbc, 0x9b, 0xfc, 0x52, 0xaa, + 0x5a, 0x13, 0x75, 0xe7, 0xf2, 0xbe, 0x7a, 0xf6, + 0x68, 0x9c, 0x94, 0xd5, 0x31, 0xd8, 0xf3, 0xae, + 0xd3, 0x15, 0x5c, 0xb7, 0x4c, 0xe6, 0x9c, 0xac, + 0x5f, 0x92, 0xf2, 0x9f, 0x7c, 0x67, 0xef, 0xa7, + 0xe4, 0xbc, 0xa7, 0xdf, 0x19, 0xfb, 0xea, 0xe0, + 0x8a, 0x3f, 0x76, 0xbe, 0xcf, 0x02, 0xde, 0xcd, + 0x6b, 0xaa, 0x7c, 0x2a, 0x7f, 0xe4, 0xbc, 0xa7, + 0xdf, 0x19, 0xfb, 0xe9, 0xf9, 0x2f, 0x29, 0xf7, + 0xc6, 0x7e, 0xfa, 0xb8, 0x22, 0x7e, 0xed, 0x7d, + 0x9e, 0x03, 0xd9, 0xad, 0x75, 0x4f, 0x85, 0x4f, + 0xfc, 0x97, 0x94, 0xfb, 0xe3, 0x3f, 0x7d, 0x3f, + 0x25, 0xe5, 0x3e, 0xf8, 0xcf, 0xdf, 0x57, 0x04, + 0x4f, 0xdd, 0xaf, 0xb3, 0xc0, 0x7b, 0x35, 0xae, + 0xa9, 0xf0, 0xa9, 0xff, 0x00, 0x92, 0xf2, 0x9f, + 0x7c, 0x67, 0xef, 0xa7, 0xe4, 0xbc, 0xa7, 0xdf, + 0x19, 0xfb, 0xea, 0xe0, 0x89, 0xfb, 0xb5, 0xf6, + 0x78, 0x0f, 0x66, 0xb5, 0xd5, 0x3e, 0x15, 0x3f, + 0xf2, 0x5e, 0x53, 0xef, 0x8c, 0xfd, 0xf4, 0xfc, + 0x97, 0x94, 0xfb, 0xe3, 0x3f, 0x7d, 0x5c, 0x11, + 0x3f, 0x76, 0xbe, 0xcf, 0x01, 0xec, 0xd6, 0xba, + 0xa7, 0xc2, 0xa7, 0xfe, 0x4b, 0xca, 0x7d, 0xf1, + 0x9f, 0xbe, 0x9f, 0x92, 0xf2, 0x9f, 0x7c, 0x67, + 0xef, 0xab, 0x82, 0x27, 0xee, 0xd7, 0xd9, 0xe0, + 0x3d, 0x9a, 0xd7, 0x54, 0xf8, 0x54, 0xff, 0x00, + 0xc9, 0x79, 0x4f, 0xbe, 0x33, 0xf7, 0xd3, 0xf2, + 0x5e, 0x53, 0xef, 0x8c, 0xfd, 0xf5, 0x70, 0x44, + 0xfd, 0xda, 0xfb, 0x3c, 0x07, 0xb3, 0x5a, 0xea, + 0x9f, 0x0a, 0x9f, 0xf9, 0x2f, 0x29, 0xf7, 0xc6, + 0x7e, 0xfa, 0x7e, 0x4b, 0xca, 0x7d, 0xf1, 0x9f, + 0xbe, 0xae, 0x08, 0x9f, 0xbb, 0x5f, 0x67, 0x80, + 0xf6, 0x6b, 0x5d, 0x53, 0xe1, 0x53, 0xff, 0x00, + 0x25, 0xe5, 0x3e, 0xf8, 0xcf, 0xdf, 0x4f, 0xc9, + 0x79, 0x4f, 0xbe, 0x33, 0xf7, 0xd5, 0xc1, 0x13, + 0xf7, 0x6b, 0xec, 0xf0, 0x1e, 0xcd, 0x6b, 0xaa, + 0x7c, 0x2a, 0x7f, 0xe4, 0xbc, 0xa7, 0xdf, 0x19, + 0xfb, 0xe9, 0xf9, 0x2f, 0x29, 0xf7, 0xc6, 0x7e, + 0xfa, 0xb8, 0x22, 0x7e, 0xed, 0x7d, 0x9e, 0x03, + 0xd9, 0xad, 0x75, 0x4f, 0x85, 0x4f, 0xfc, 0x97, + 0x94, 0xfb, 0xe3, 0x3f, 0x7d, 0x3f, 0x25, 0xe5, + 0x3e, 0xf8, 0xcf, 0xdf, 0x57, 0x04, 0x4f, 0xdd, + 0xaf, 0xb3, 0xc0, 0x7b, 0x35, 0xae, 0xa9, 0xf0, + 0xa9, 0xff, 0x00, 0x92, 0xf2, 0x9f, 0x7c, 0x67, + 0xef, 0xa7, 0xe4, 0xbc, 0xa7, 0xdf, 0x19, 0xfb, + 0xea, 0xe0, 0x89, 0xfb, 0xb5, 0xf6, 0x78, 0x0f, + 0x66, 0xb5, 0xd5, 0x3e, 0x15, 0x3f, 0xf2, 0x5e, + 0x53, 0xef, 0x8c, 0xfd, 0xf4, 0xfc, 0x97, 0x94, + 0xfb, 0xe3, 0x3f, 0x7d, 0x5c, 0x11, 0x3f, 0x76, + 0xbe, 0xcf, 0x01, 0xec, 0xd6, 0xba, 0xa7, 0xc2, + 0xa7, 0xfe, 0x4b, 0xca, 0x7d, 0xf1, 0x9f, 0xbe, + 0x9f, 0x92, 0xf2, 0x9f, 0x7c, 0x67, 0xef, 0xab, + 0x82, 0x27, 0xee, 0xd7, 0xd9, 0xe0, 0x3d, 0x9a, + 0xd7, 0x54, 0xf8, 0x54, 0xff, 0x00, 0xc9, 0x79, + 0x4f, 0xbe, 0x33, 0xf7, 0xd3, 0xf2, 0x5e, 0x53, + 0xef, 0x8c, 0xfd, 0xf5, 0x70, 0x44, 0xfd, 0xda, + 0xfb, 0x3c, 0x07, 0xb3, 0x5a, 0xea, 0x9f, 0x0a, + 0x9f, 0xf9, 0x2f, 0x29, 0xf7, 0xc6, 0x7e, 0xfa, + 0x7e, 0x4b, 0xca, 0x7d, 0xf1, 0x9f, 0xbe, 0xae, + 0x08, 0x9f, 0xbb, 0x5f, 0x67, 0x80, 0xf6, 0x6b, + 0x5d, 0x53, 0xe1, 0x53, 0xff, 0x00, 0x25, 0xe5, + 0x3e, 0xf8, 0xcf, 0xdf, 0x4f, 0xc9, 0x79, 0x4f, + 0xbe, 0x33, 0xf7, 0xd5, 0xc1, 0x13, 0xf7, 0x6b, + 0xec, 0xf0, 0x1e, 0xcd, 0x6b, 0xaa, 0x7c, 0x2a, + 0x45, 0xfe, 0x97, 0xc8, 0xd9, 0x59, 0xcb, 0x76, + 0xfb, 0xa6, 0xbd, 0x90, 0xb7, 0x88, 0xb5, 0xa5, + 0xf5, 0x3b, 0x69, 0xb2, 0xaa, 0x7f, 0x43, 0xb9, + 0xce, 0xc3, 0xb8, 0xb8, 0x92, 0x7a, 0x67, 0x8a, + 0x93, 0x5e, 0x46, 0xac, 0xfa, 0x8f, 0xd4, 0x77, + 0x9e, 0x4f, 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, + 0x3b, 0xcb, 0xbf, 0xb4, 0xd5, 0x69, 0xaa, 0x6a, + 0xa2, 0x66, 0x7a, 0xd4, 0xa6, 0x8a, 0x68, 0xbf, + 0x11, 0x4e, 0x69, 0xa2, 0x56, 0x24, 0x44, 0x59, + 0x3a, 0x44, 0x44, 0x40, 0x44, 0x44, 0x05, 0xab, + 0x90, 0xf4, 0x2b, 0x9f, 0x24, 0xff, 0x00, 0x14, + 0xad, 0xa5, 0xab, 0x90, 0xf4, 0x2b, 0x9f, 0x24, + 0xff, 0x00, 0x14, 0xa9, 0xa7, 0x3c, 0x2b, 0x73, + 0x62, 0xad, 0x13, 0xa9, 0x05, 0xa4, 0xfd, 0x1e, + 0xe3, 0xc3, 0x6f, 0x8a, 0xa7, 0x94, 0x0e, 0x93, + 0xf4, 0x7b, 0x8f, 0x0d, 0xbe, 0x2a, 0x9e, 0x5a, + 0x62, 0x38, 0xb5, 0x69, 0xfb, 0x98, 0x60, 0x79, + 0x6b, 0x7a, 0x27, 0x58, 0x88, 0x8b, 0x27, 0x48, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0x3f, 0x50, + 0x7a, 0xa6, 0x7f, 0x93, 0xe3, 0x05, 0x20, 0xa3, + 0xf5, 0x07, 0xaa, 0x67, 0xf9, 0x3e, 0x30, 0x57, + 0xb7, 0xb7, 0x4e, 0x98, 0x65, 0x89, 0xe0, 0x5d, + 0xdc, 0xaf, 0x53, 0xdd, 0x2b, 0xea, 0x86, 0xf8, + 0x6f, 0xed, 0xa9, 0x67, 0xee, 0x51, 0x3a, 0x57, + 0xd5, 0x0d, 0xf0, 0xdf, 0xdb, 0x52, 0xcf, 0xdc, + 0xa6, 0xef, 0x16, 0xbd, 0xe9, 0x46, 0x1b, 0x81, + 0x6f, 0x76, 0x1c, 0xe6, 0xeb, 0xfc, 0x9e, 0x3c, + 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xa0, 0x5d, 0x7f, + 0x93, 0xc7, 0x95, 0x67, 0xd8, 0x85, 0x7f, 0x5c, + 0xb6, 0x73, 0xd7, 0xbf, 0x2f, 0x63, 0xe2, 0x99, + 0xb0, 0x7f, 0xc6, 0xb6, 0x22, 0x22, 0xd9, 0xe6, + 0x88, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x83, 0x78, + 0x44, 0x1b, 0xc2, 0x0a, 0x06, 0x8d, 0xfe, 0xf8, + 0xbe, 0xe6, 0xb8, 0xfb, 0x40, 0xba, 0x42, 0xe6, + 0xfa, 0x37, 0xfb, 0xe2, 0xfb, 0x9a, 0xe3, 0xed, + 0x02, 0xe9, 0x0b, 0x1c, 0x3e, 0xc7, 0x9d, 0x2f, + 0x4f, 0xe3, 0x3c, 0xcd, 0x3e, 0xaa, 0xde, 0xa4, + 0x5e, 0x6f, 0xea, 0x63, 0xf0, 0xfe, 0x02, 0xb3, + 0x5a, 0x7a, 0x34, 0x5e, 0x08, 0xed, 0x2c, 0x39, + 0xbf, 0xa9, 0x8f, 0xc3, 0xf8, 0x0a, 0xcd, 0x69, + 0xe8, 0xd1, 0x78, 0x23, 0xb4, 0xb8, 0xac, 0xff, + 0x00, 0x67, 0x88, 0xf5, 0x54, 0x38, 0xea, 0xe5, + 0xed, 0xef, 0xcb, 0x2a, 0x22, 0x2f, 0x4d, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, + 0x33, 0x2d, 0xf5, 0xd0, 0xf3, 0x1e, 0xda, 0x9b, + 0x6f, 0x7a, 0x39, 0x94, 0x26, 0x5b, 0xeb, 0xa1, + 0xe6, 0x3d, 0xb5, 0x36, 0xde, 0xf4, 0x73, 0x2f, + 0x3b, 0x07, 0xcf, 0x63, 0xb4, 0xda, 0xfd, 0x32, + 0xe8, 0xbb, 0xc1, 0xb3, 0xa2, 0xad, 0x6c, 0x37, + 0x9e, 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, + 0x42, 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x56, 0xdb, + 0xcf, 0x45, 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, + 0xa1, 0x37, 0x5e, 0x7f, 0x2b, 0xe7, 0xaf, 0x56, + 0x9d, 0x8a, 0xbb, 0xce, 0x1a, 0xf8, 0xd6, 0xbc, + 0xe5, 0xad, 0x11, 0x16, 0x6d, 0x84, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x11, 0xda, 0x8f, + 0xd4, 0x77, 0x9e, 0x4f, 0xe7, 0x35, 0x6b, 0xe8, + 0x6f, 0x53, 0x3b, 0xcb, 0xbf, 0xb4, 0xd5, 0xb1, + 0xa8, 0xfd, 0x47, 0x79, 0xe4, 0xfe, 0x73, 0x56, + 0xbe, 0x86, 0xf5, 0x33, 0xbc, 0xbb, 0xfb, 0x4d, + 0x57, 0x8e, 0x1c, 0xe9, 0x63, 0x3c, 0xc5, 0x3b, + 0x93, 0xad, 0x62, 0x44, 0x45, 0x46, 0xc2, 0x22, + 0x20, 0x22, 0x22, 0x02, 0xd5, 0xc8, 0x7a, 0x15, + 0xcf, 0x92, 0x7f, 0x8a, 0x56, 0xd2, 0xd5, 0xc8, + 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, 0x54, 0xd3, + 0x9e, 0x15, 0xb9, 0xb1, 0x56, 0x89, 0xd4, 0x82, + 0xd2, 0x7e, 0x8f, 0x71, 0xe1, 0xb7, 0xc5, 0x53, + 0xca, 0x07, 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, + 0x15, 0x4f, 0x2d, 0x31, 0x1c, 0x5a, 0xb4, 0xfd, + 0xcc, 0x30, 0x3c, 0xb5, 0xbd, 0x13, 0xac, 0x44, + 0x45, 0x93, 0xa4, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x45, 0xe1, 0x73, 0x46, 0xf2, 0x07, 0x3a, 0x0f, + 0x51, 0x61, 0x92, 0xf2, 0xda, 0x33, 0x47, 0x3c, + 0x6c, 0xdf, 0x4d, 0xab, 0x11, 0xca, 0x59, 0x06, + 0xf1, 0x35, 0xfc, 0x75, 0x34, 0x01, 0x82, 0xa6, + 0xa8, 0x36, 0xd1, 0x6a, 0x0c, 0xa5, 0xa1, 0x00, + 0xd5, 0xc2, 0xbb, 0xaa, 0x3a, 0x8b, 0xd6, 0x64, + 0xad, 0x1e, 0x40, 0x0e, 0x20, 0x9d, 0xd5, 0x14, + 0x41, 0xb4, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, + 0x7f, 0x93, 0xe3, 0x05, 0x20, 0xa3, 0xf5, 0x07, + 0xaa, 0x67, 0xf9, 0x3e, 0x30, 0x57, 0xb7, 0xb7, + 0x4e, 0x98, 0x65, 0x89, 0xe0, 0x5d, 0xdc, 0xaf, + 0x53, 0xdd, 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, + 0xa9, 0x67, 0xee, 0x51, 0x3a, 0x57, 0xd5, 0x0d, + 0xf0, 0xdf, 0xdb, 0x52, 0xcf, 0xdc, 0xa6, 0xef, + 0x16, 0xbd, 0xe9, 0x46, 0x1b, 0x81, 0x6f, 0x76, + 0x1c, 0xe6, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, 0x3e, + 0xc4, 0x2b, 0xfa, 0xa0, 0x5d, 0x7f, 0x93, 0xc7, + 0x95, 0x67, 0xd8, 0x85, 0x7f, 0x5c, 0xb6, 0x73, + 0xd7, 0xbf, 0x2f, 0x63, 0xe2, 0x99, 0xb0, 0x7f, + 0xc6, 0xb6, 0x22, 0x22, 0xd9, 0xe6, 0x88, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x9b, 0x37, 0xa0, 0x22, + 0xc7, 0x24, 0xf0, 0xc6, 0x2a, 0xe7, 0x8d, 0xbb, + 0x85, 0x56, 0x2f, 0xc4, 0xac, 0xab, 0xc3, 0xd2, + 0x8e, 0x2e, 0xa2, 0x0d, 0x94, 0x5a, 0x6d, 0xca, + 0xda, 0xba, 0xb4, 0xe3, 0xa0, 0x15, 0xaf, 0x0f, + 0x26, 0xea, 0xaf, 0x7f, 0x14, 0xb3, 0xad, 0x38, + 0x8f, 0x3d, 0x36, 0x20, 0xdb, 0x45, 0xf1, 0x14, + 0xb1, 0xcc, 0xce, 0x38, 0xcf, 0x13, 0x4a, 0xfb, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x41, 0xbc, 0x22, 0x0d, 0xe1, 0x05, 0x03, 0x46, + 0xff, 0x00, 0x7c, 0x5f, 0x73, 0x5c, 0x7d, 0xa0, + 0x5d, 0x21, 0x73, 0x7d, 0x1b, 0xfd, 0xf1, 0x7d, + 0xcd, 0x71, 0xf6, 0x81, 0x74, 0x85, 0x8e, 0x1f, + 0x63, 0xce, 0x97, 0xa7, 0xf1, 0x9e, 0x66, 0x9f, + 0x55, 0x6f, 0x52, 0x2f, 0x37, 0xf5, 0x31, 0xf8, + 0x7f, 0x01, 0x59, 0xad, 0x3d, 0x1a, 0x2f, 0x04, + 0x76, 0x96, 0x1c, 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, + 0x05, 0x66, 0xb4, 0xf4, 0x68, 0xbc, 0x11, 0xda, + 0x5c, 0x56, 0x7f, 0xb3, 0xc4, 0x7a, 0xaa, 0x1c, + 0x75, 0x72, 0xf6, 0xf7, 0xe5, 0x95, 0x11, 0x17, + 0xa6, 0xc0, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x45, 0xe1, 0x7b, 0x1b, 0x5a, 0xb8, 0x0a, + 0x6f, 0xa9, 0x5a, 0xee, 0xc8, 0x59, 0xb3, 0xbf, + 0x90, 0x01, 0xd5, 0xe4, 0x41, 0xb2, 0x8b, 0x51, + 0xd9, 0x5b, 0x36, 0x9a, 0x02, 0xe7, 0x6c, 0xad, + 0x5a, 0x2a, 0x07, 0x3a, 0x1c, 0x9d, 0xa0, 0xad, + 0x4b, 0x81, 0x1b, 0x08, 0xa6, 0xd4, 0x1b, 0x68, + 0xb0, 0x43, 0x79, 0x6f, 0x33, 0xb8, 0x58, 0xee, + 0xeb, 0x7d, 0x0a, 0xce, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x23, 0x32, + 0xdf, 0x5d, 0x0f, 0x31, 0xed, 0xa9, 0xb6, 0xf7, + 0xa3, 0x99, 0x42, 0x65, 0xbe, 0xba, 0x1e, 0x63, + 0xdb, 0x53, 0x6d, 0xef, 0x47, 0x32, 0xf3, 0xb0, + 0x7c, 0xf6, 0x3b, 0x4d, 0xaf, 0xd3, 0x2e, 0x8b, + 0xbc, 0x1b, 0x3a, 0x2a, 0xd6, 0xc3, 0x79, 0xe8, + 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, 0xb4, 0x26, + 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0x6d, 0xbc, 0xf4, + 0x59, 0xbc, 0x9b, 0xfc, 0x52, 0xaa, 0x5a, 0x13, + 0x75, 0xe7, 0xf2, 0xbe, 0x7a, 0xf5, 0x69, 0xd8, + 0xab, 0xbc, 0xe1, 0xaf, 0x8d, 0x6b, 0xce, 0x5a, + 0xd1, 0x11, 0x66, 0xd8, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x45, 0xe1, 0x20, 0x6f, 0x20, + 0x73, 0xac, 0x52, 0x5d, 0xdb, 0x47, 0xb1, 0xcf, + 0x1b, 0x37, 0xd3, 0x6a, 0x0c, 0xc8, 0xb5, 0x0e, + 0x52, 0xc8, 0x37, 0x88, 0x3f, 0x8f, 0x6d, 0x28, + 0xd1, 0x53, 0x5e, 0x64, 0x19, 0x4b, 0x52, 0x01, + 0xab, 0x85, 0x6b, 0x4a, 0x8e, 0xa6, 0xc4, 0x1b, + 0x68, 0xb5, 0x5b, 0x93, 0xb4, 0x71, 0x03, 0x88, + 0x82, 0x77, 0x54, 0x51, 0x6d, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x08, + 0xed, 0x47, 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, + 0xb5, 0xf4, 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, + 0x6a, 0xd8, 0xd4, 0x7e, 0xa3, 0xbc, 0xf2, 0x7f, + 0x39, 0xab, 0x5f, 0x43, 0x7a, 0x99, 0xde, 0x5d, + 0xfd, 0xa6, 0xab, 0xc7, 0x0e, 0x74, 0xb1, 0x9e, + 0x62, 0x9d, 0xc9, 0xd6, 0xb1, 0x22, 0x22, 0xa3, + 0x61, 0x11, 0x10, 0x11, 0x11, 0x01, 0x6a, 0xe4, + 0x3d, 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2b, 0x69, + 0x6a, 0xe4, 0x3d, 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, + 0x2a, 0x69, 0xcf, 0x0a, 0xdc, 0xd8, 0xab, 0x44, + 0xea, 0x41, 0x69, 0x3f, 0x47, 0xb8, 0xf0, 0xdb, + 0xe2, 0xa9, 0xe5, 0x03, 0xa4, 0xfd, 0x1e, 0xe3, + 0xc3, 0x6f, 0x8a, 0xa7, 0x96, 0x98, 0x8e, 0x2d, + 0x5a, 0x7e, 0xe6, 0x18, 0x1e, 0x5a, 0xde, 0x89, + 0xd6, 0x22, 0x22, 0xc9, 0xd2, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x72, 0x73, + 0x20, 0x6c, 0x1b, 0xd7, 0xc4, 0x92, 0xc7, 0x13, + 0x78, 0x9e, 0x68, 0x14, 0x75, 0xf5, 0xeb, 0x9c, + 0xe2, 0xdb, 0x73, 0x50, 0xcd, 0xe4, 0x72, 0xaa, + 0xf6, 0x53, 0x52, 0xe3, 0xb1, 0x83, 0xf8, 0xf2, + 0x9b, 0x87, 0x3b, 0x6b, 0x2d, 0xd8, 0x43, 0x8e, + 0xce, 0x57, 0x1f, 0x8a, 0x91, 0x13, 0x22, 0xc9, + 0x73, 0x96, 0x6b, 0x47, 0x0c, 0x62, 0x84, 0xee, + 0x71, 0x50, 0x19, 0x1c, 0xde, 0x3e, 0xd2, 0x52, + 0xfb, 0x8b, 0xe6, 0x71, 0x80, 0x48, 0x60, 0xab, + 0x9d, 0x52, 0x29, 0xb9, 0xab, 0x4e, 0xd9, 0xda, + 0xa7, 0x3e, 0x1b, 0x25, 0xa5, 0xa3, 0x71, 0xf6, + 0x8e, 0x14, 0xe9, 0xee, 0x36, 0x54, 0x75, 0x5a, + 0x29, 0xc4, 0x7b, 0x0b, 0x7a, 0xcf, 0xd9, 0xae, + 0x1d, 0x8f, 0x33, 0xe4, 0x66, 0x96, 0xf6, 0x67, + 0x1e, 0x27, 0x80, 0x7a, 0x28, 0xea, 0x7a, 0xcd, + 0xee, 0xbd, 0xf5, 0x6c, 0x91, 0x1b, 0x53, 0xde, + 0x84, 0x65, 0x9e, 0xe3, 0x4e, 0x3d, 0x55, 0x84, + 0x11, 0x39, 0xfe, 0x72, 0x5d, 0xc8, 0x18, 0x45, + 0x3b, 0x1d, 0x45, 0xa3, 0x73, 0xad, 0x2d, 0xad, + 0xc3, 0x5b, 0x69, 0x03, 0xae, 0x9e, 0xf1, 0xdd, + 0x92, 0x4b, 0x69, 0xcc, 0x40, 0x25, 0x5d, 0xed, + 0x34, 0xee, 0x06, 0xcc, 0x0f, 0x36, 0xb0, 0x81, + 0x84, 0x7c, 0x62, 0xc0, 0xe3, 0xfb, 0x4f, 0xa9, + 0x5b, 0xed, 0x8e, 0x36, 0x6c, 0x63, 0x1a, 0xd1, + 0xd4, 0x00, 0x0e, 0xd2, 0x65, 0xa7, 0xaa, 0x7c, + 0x27, 0x4b, 0x9a, 0xdb, 0xeb, 0xa8, 0xcc, 0x8d, + 0x6d, 0xd5, 0x91, 0x89, 0x8d, 0x04, 0x35, 0xe1, + 0xee, 0xd9, 0xee, 0x51, 0x4a, 0xda, 0x6a, 0x2c, + 0x35, 0xd1, 0x73, 0x9b, 0x38, 0x67, 0xe8, 0x07, + 0x72, 0x72, 0xab, 0xb3, 0x98, 0xc7, 0x0a, 0x39, + 0xad, 0x70, 0xea, 0x10, 0x0a, 0xd2, 0xb9, 0xc1, + 0x61, 0x6e, 0xeb, 0xe7, 0x16, 0x30, 0x49, 0x5e, + 0x5e, 0x06, 0x83, 0xfb, 0x4d, 0xa1, 0x4c, 0xb4, + 0xcf, 0x73, 0x21, 0x92, 0x7a, 0xd1, 0x76, 0xf9, + 0x5e, 0x92, 0x32, 0xfb, 0x79, 0x84, 0xac, 0x14, + 0x2e, 0xe1, 0x3b, 0x68, 0xb7, 0xed, 0xb2, 0x6f, + 0xe1, 0x69, 0x97, 0xbb, 0x04, 0x90, 0x48, 0x1b, + 0x42, 0x8b, 0xba, 0xd0, 0x18, 0xb3, 0x57, 0xe3, + 0x66, 0x9b, 0x1f, 0x29, 0xdd, 0xc2, 0xe2, 0xf6, + 0x57, 0xc1, 0x7e, 0xdf, 0x7d, 0x44, 0x5f, 0xc1, + 0xad, 0x70, 0x90, 0x9e, 0x06, 0x33, 0x23, 0x6c, + 0xdd, 0xbd, 0x2c, 0x60, 0xb8, 0x80, 0x3f, 0x4a, + 0x3e, 0xfb, 0xb6, 0x9e, 0x4c, 0x4e, 0x69, 0x3a, + 0x57, 0x56, 0xe4, 0x6d, 0x5c, 0xe0, 0xd0, 0xed, + 0xa4, 0xd3, 0x6a, 0xd9, 0x04, 0x11, 0x50, 0xb9, + 0xee, 0x2b, 0x57, 0x58, 0x5f, 0xb9, 0xb1, 0x5c, + 0x8f, 0x34, 0xbb, 0xaf, 0x0b, 0x45, 0x7f, 0x86, + 0x4e, 0xed, 0xe7, 0xbd, 0x2a, 0xd1, 0x6d, 0x7d, + 0x71, 0x08, 0x11, 0xf0, 0xf1, 0x37, 0x75, 0x0e, + 0xd3, 0xd9, 0x51, 0x31, 0x31, 0x9d, 0x31, 0x39, + 0x53, 0x48, 0xb1, 0xc1, 0x33, 0x66, 0x67, 0x13, + 0x79, 0x36, 0x11, 0x5a, 0xd0, 0xac, 0x8a, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x47, 0xea, 0x0f, 0x54, 0xcf, 0xf2, + 0x7c, 0x60, 0xa4, 0x14, 0x7e, 0xa0, 0xf5, 0x4c, + 0xff, 0x00, 0x27, 0xc6, 0x0a, 0xf6, 0xf6, 0xe9, + 0xd3, 0x0c, 0xb1, 0x3c, 0x0b, 0xbb, 0x95, 0xea, + 0x7b, 0xa5, 0x7d, 0x50, 0xdf, 0x0d, 0xfd, 0xb5, + 0x2c, 0xfd, 0xca, 0x27, 0x4a, 0xfa, 0xa1, 0xbe, + 0x1b, 0xfb, 0x6a, 0x59, 0xfb, 0x94, 0xdd, 0xe2, + 0xd7, 0xbd, 0x28, 0xc3, 0x70, 0x2d, 0xee, 0xc3, + 0x9c, 0xdd, 0x7f, 0x93, 0xc7, 0x95, 0x67, 0xd8, + 0x85, 0x7f, 0x54, 0x0b, 0xaf, 0xf2, 0x78, 0xf2, + 0xac, 0xfb, 0x10, 0xaf, 0xeb, 0x96, 0xce, 0x7a, + 0xf7, 0xe5, 0xec, 0x7c, 0x53, 0x36, 0x0f, 0xf8, + 0xd6, 0xc4, 0x44, 0x5b, 0x3c, 0xd1, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x2a, 0x3b, 0x1b, 0xd6, 0xb5, 0xed, 0xd3, 0x20, + 0x67, 0x08, 0x3f, 0xc4, 0x76, 0xe0, 0xa0, 0x2f, + 0x32, 0xb1, 0x5b, 0x35, 0xd2, 0xdd, 0x5c, 0x88, + 0x7a, 0x3e, 0xf8, 0x93, 0xb4, 0x81, 0xd4, 0x6f, + 0x29, 0x41, 0x3b, 0x36, 0x4a, 0x08, 0x81, 0xa7, + 0x77, 0x4d, 0xf4, 0x50, 0x99, 0x5c, 0xd4, 0x0d, + 0x8f, 0xa4, 0xb8, 0xb8, 0x11, 0x03, 0xde, 0xb0, + 0x75, 0x37, 0x2d, 0x7b, 0x39, 0xb2, 0xd9, 0x86, + 0x7f, 0xf8, 0xfb, 0x23, 0x69, 0x66, 0xed, 0xad, + 0xbb, 0xbb, 0xee, 0x78, 0xba, 0xec, 0x88, 0x77, + 0x47, 0xb4, 0xb7, 0xdb, 0xa3, 0x31, 0x73, 0x3d, + 0x93, 0x65, 0x0b, 0xb2, 0x13, 0x37, 0x70, 0x7f, + 0x71, 0x10, 0x27, 0xa8, 0xc6, 0x7c, 0x25, 0x4e, + 0x48, 0x8c, 0xe2, 0x06, 0xdf, 0x54, 0xe2, 0xe5, + 0xb8, 0xe8, 0x8c, 0xee, 0x1c, 0x34, 0x6b, 0x4b, + 0x01, 0x35, 0x00, 0x75, 0x96, 0xd4, 0xb9, 0x29, + 0x5f, 0xd2, 0x49, 0x6d, 0x63, 0x75, 0x73, 0xc2, + 0xdf, 0xe1, 0xb5, 0xb0, 0xba, 0x8e, 0x3e, 0xe8, + 0x56, 0xcb, 0x5b, 0x0b, 0x2b, 0x36, 0x86, 0x5a, + 0x5b, 0xc5, 0x03, 0x46, 0xe1, 0x1b, 0x1a, 0xde, + 0xd0, 0x59, 0xea, 0x53, 0x2c, 0x77, 0x21, 0x1d, + 0x2e, 0x74, 0xec, 0xae, 0xae, 0xab, 0x9c, 0x70, + 0xb3, 0xf0, 0xbc, 0x50, 0xd2, 0x37, 0x1d, 0x83, + 0x72, 0xdd, 0x6e, 0x6e, 0x2e, 0x16, 0x36, 0xf2, + 0xda, 0x7b, 0x47, 0x9e, 0xff, 0x00, 0x8e, 0x39, + 0x03, 0x40, 0xea, 0x55, 0xca, 0xf0, 0x95, 0x24, + 0x50, 0xed, 0x1d, 0x44, 0xcb, 0x1d, 0x46, 0x4e, + 0xd5, 0x5a, 0xd7, 0x2f, 0x64, 0xe7, 0xf0, 0xda, + 0xdc, 0xb0, 0x9a, 0xd4, 0x36, 0xb4, 0xde, 0xa4, + 0x2d, 0xf2, 0x57, 0x1d, 0x21, 0x6b, 0x8d, 0x4b, + 0x41, 0xa8, 0x3b, 0x41, 0x23, 0xa9, 0xce, 0xb6, + 0x6f, 0x30, 0x18, 0x6b, 0xed, 0xb7, 0x36, 0x71, + 0xb9, 0xff, 0x00, 0xee, 0x34, 0x70, 0x3f, 0xf6, + 0x99, 0xc2, 0x54, 0x4c, 0xfa, 0x56, 0xfa, 0xce, + 0xb2, 0x61, 0x2f, 0x48, 0x3b, 0xc5, 0xbd, 0xd7, + 0x76, 0xd3, 0xd6, 0x12, 0x0d, 0xa3, 0xdd, 0x09, + 0xd0, 0x74, 0xa6, 0xd9, 0x93, 0xb7, 0x2d, 0x05, + 0xf5, 0x6b, 0xb9, 0x41, 0x0b, 0x62, 0x29, 0xa3, + 0x99, 0xa1, 0xcc, 0x35, 0x05, 0x73, 0xb9, 0xf5, + 0x1e, 0x67, 0x15, 0x76, 0x2d, 0xf3, 0xf6, 0x3d, + 0x0b, 0x1c, 0x76, 0x48, 0xc1, 0xb0, 0xf5, 0xda, + 0xf1, 0x50, 0xe5, 0x61, 0xc6, 0x64, 0x9b, 0x2c, + 0x4d, 0xb9, 0xb3, 0x77, 0x1c, 0x4f, 0xd8, 0xd2, + 0x76, 0xd2, 0x9c, 0x84, 0x0e, 0x54, 0x9a, 0x66, + 0x3a, 0x53, 0x95, 0x66, 0x45, 0xa9, 0x67, 0x7b, + 0xd3, 0x51, 0xaf, 0x1c, 0x2f, 0x3b, 0x85, 0x77, + 0xd1, 0x6d, 0xa8, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x1b, 0xc2, + 0x20, 0xde, 0x10, 0x50, 0x34, 0x6f, 0xf7, 0xc5, + 0xf7, 0x35, 0xc7, 0xda, 0x05, 0xd2, 0x17, 0x37, + 0xd1, 0xbf, 0xdf, 0x17, 0xdc, 0xd7, 0x1f, 0x68, + 0x17, 0x48, 0x58, 0xe1, 0xf6, 0x3c, 0xe9, 0x7a, + 0x7f, 0x19, 0xe6, 0x69, 0xf5, 0x56, 0xf5, 0x22, + 0xf3, 0x7f, 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, + 0xd3, 0xd1, 0xa2, 0xf0, 0x47, 0x69, 0x61, 0xcd, + 0xfd, 0x4c, 0x7e, 0x1f, 0xc0, 0x56, 0x6b, 0x4f, + 0x46, 0x8b, 0xc1, 0x1d, 0xa5, 0xc5, 0x67, 0xfb, + 0x3c, 0x47, 0xaa, 0xa1, 0xc7, 0x57, 0x2f, 0x6f, + 0x7e, 0x59, 0x51, 0x11, 0x7a, 0x6c, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0xa8, 0xff, 0x00, 0x45, 0xf3, 0x24, 0x8c, + 0x8d, 0x85, 0xef, 0x3c, 0x2d, 0x1c, 0xa5, 0x42, + 0x5e, 0x5f, 0xbc, 0x92, 0xf7, 0x3f, 0x82, 0x13, + 0xb8, 0x93, 0x4a, 0x75, 0xd0, 0x4c, 0x4d, 0x75, + 0x14, 0x3d, 0xf9, 0xdb, 0xc8, 0x02, 0x8d, 0xba, + 0xcb, 0x35, 0xd5, 0x67, 0x10, 0x85, 0x8d, 0xaf, + 0x1b, 0x9c, 0x69, 0x4e, 0x75, 0x5c, 0xb8, 0xd5, + 0x30, 0xb6, 0xe8, 0x59, 0x58, 0xc3, 0x26, 0x56, + 0xf8, 0x6c, 0xe1, 0x84, 0x71, 0x35, 0xbd, 0x6e, + 0x21, 0x5a, 0xf6, 0x96, 0xc3, 0x74, 0xd6, 0xa0, + 0xcb, 0x31, 0xc3, 0x25, 0x2c, 0x78, 0xfb, 0x69, + 0x37, 0xc1, 0x10, 0xe9, 0x25, 0xa1, 0xe4, 0x27, + 0x63, 0x42, 0x9c, 0x9d, 0x7d, 0x08, 0x99, 0x6b, + 0xdc, 0xea, 0x4c, 0x4d, 0xb3, 0x8b, 0x1f, 0x78, + 0x24, 0x73, 0x8d, 0x1d, 0xc0, 0x0b, 0xb7, 0x75, + 0xd7, 0x93, 0x6a, 0xac, 0x30, 0x89, 0xad, 0x65, + 0xc1, 0x91, 0xce, 0xa1, 0x3d, 0x51, 0xce, 0xa6, + 0x2c, 0x7d, 0x9f, 0xe9, 0x8b, 0x30, 0x38, 0xad, + 0xdd, 0x76, 0xf1, 0xf1, 0xe7, 0x71, 0x70, 0xfd, + 0x96, 0xf0, 0xb5, 0x4c, 0xc1, 0x8a, 0xc5, 0xdb, + 0x0e, 0x1b, 0x7b, 0x38, 0x22, 0x03, 0xf4, 0x23, + 0x68, 0xf8, 0x14, 0xff, 0x00, 0xe7, 0xb4, 0xe9, + 0xec, 0x73, 0xcb, 0x9d, 0x77, 0x0c, 0x72, 0x3a, + 0x2b, 0x7b, 0x33, 0x2c, 0x4c, 0x35, 0x6c, 0x8e, + 0x71, 0x61, 0x24, 0x6e, 0x34, 0x0d, 0x2b, 0x35, + 0xae, 0xba, 0xc6, 0xcd, 0xc7, 0xe7, 0x56, 0xee, + 0xb6, 0x71, 0x3c, 0x8f, 0x2f, 0x07, 0xdc, 0xa3, + 0x57, 0x45, 0x11, 0xc6, 0x36, 0x06, 0x36, 0x9d, + 0x4a, 0x05, 0x8a, 0x5b, 0x0b, 0x09, 0xc1, 0x13, + 0x5b, 0x43, 0x20, 0x3b, 0xf8, 0xe3, 0x69, 0xed, + 0x84, 0xcb, 0x4f, 0xf8, 0xf8, 0xcc, 0x93, 0xd6, + 0xaa, 0x5a, 0xe7, 0x31, 0x6f, 0x6b, 0x64, 0x6d, + 0xcb, 0x5a, 0xf2, 0x76, 0xd7, 0x61, 0xdb, 0xb2, + 0x8a, 0x51, 0x99, 0x39, 0xc3, 0x5a, 0xe6, 0x3f, + 0x89, 0x84, 0x77, 0x2e, 0x69, 0x04, 0x57, 0x96, + 0xab, 0xea, 0xf3, 0x44, 0xe9, 0xab, 0xb0, 0x6b, + 0x66, 0x20, 0x71, 0xf8, 0xf6, 0xe4, 0xc6, 0x7b, + 0x0d, 0xee, 0x7d, 0xe5, 0x09, 0x73, 0xa0, 0xf2, + 0x76, 0x47, 0xa5, 0xc2, 0x64, 0x0b, 0xc3, 0x76, + 0x8b, 0x7b, 0x8e, 0xe4, 0xf3, 0x09, 0x1b, 0xb3, + 0xb2, 0x13, 0x25, 0x33, 0xdd, 0xc9, 0xa4, 0xcb, + 0x2b, 0x4c, 0x59, 0x26, 0x83, 0xc3, 0x30, 0xdc, + 0x01, 0x0e, 0x03, 0x7d, 0x56, 0x78, 0xaf, 0x6d, + 0xe5, 0x77, 0x0b, 0x1d, 0x52, 0xb9, 0xd4, 0xda, + 0xa3, 0x3f, 0x87, 0xb9, 0x64, 0x19, 0xbb, 0x03, + 0xc0, 0x36, 0x6d, 0xee, 0x4b, 0x87, 0x55, 0x8f, + 0x15, 0x6b, 0x94, 0xf6, 0x3b, 0x2b, 0x8f, 0xc9, + 0x37, 0xa6, 0xc6, 0xca, 0x5e, 0xe0, 0x03, 0xa5, + 0x84, 0xd1, 0x92, 0x33, 0x9d, 0xbb, 0x76, 0x73, + 0x6c, 0x49, 0xa6, 0x60, 0x89, 0x5b, 0x91, 0x45, + 0xdb, 0x64, 0xa5, 0xa8, 0x6c, 0xad, 0x1c, 0x20, + 0x6d, 0x76, 0xe5, 0x26, 0xd7, 0x07, 0x34, 0x38, + 0x6d, 0x07, 0x68, 0x55, 0x4b, 0xd4, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x41, 0x19, 0x96, 0xfa, 0xe8, 0x79, 0x8f, + 0x6d, 0x4d, 0xb7, 0xbd, 0x1c, 0xca, 0x13, 0x2d, + 0xf5, 0xd0, 0xf3, 0x1e, 0xda, 0x9b, 0x6f, 0x7a, + 0x39, 0x97, 0x9d, 0x83, 0xe7, 0xb1, 0xda, 0x6d, + 0x7e, 0x99, 0x74, 0x5d, 0xe0, 0xd9, 0xd1, 0x56, + 0xb6, 0x1b, 0xcf, 0x45, 0x9b, 0xc9, 0xbf, 0xc5, + 0x2a, 0xa5, 0xa1, 0x37, 0x5e, 0x7f, 0x2b, 0xe7, + 0xab, 0x6d, 0xe7, 0xa2, 0xcd, 0xe4, 0xdf, 0xe2, + 0x95, 0x52, 0xd0, 0x9b, 0xaf, 0x3f, 0x95, 0xf3, + 0xd7, 0xab, 0x4e, 0xc5, 0x5d, 0xe7, 0x0d, 0x7c, + 0x6b, 0x5e, 0x72, 0xd6, 0x88, 0x8b, 0x36, 0xc2, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x6c, 0xe5, 0x45, 0x19, 0x7d, 0x7c, + 0xe2, 0xfe, 0x0b, 0x77, 0x57, 0x83, 0x79, 0x1d, + 0x54, 0x12, 0x32, 0x4a, 0xc8, 0xdb, 0xc4, 0xf3, + 0x40, 0xb4, 0x2e, 0x72, 0xcc, 0x60, 0xa4, 0x63, + 0x69, 0xef, 0x5c, 0x55, 0x77, 0x29, 0xa8, 0xf1, + 0xf8, 0xc6, 0xd6, 0xe6, 0x63, 0x33, 0x9d, 0xde, + 0xdb, 0xb0, 0x87, 0x3a, 0xa3, 0xf4, 0xbf, 0x44, + 0x05, 0xa3, 0x6f, 0x79, 0xa9, 0xb5, 0x05, 0x1f, + 0x8d, 0xb1, 0x16, 0xb6, 0xc7, 0x67, 0x9c, 0x4f, + 0xdc, 0xb6, 0x9d, 0x50, 0x48, 0xab, 0xbd, 0xc0, + 0xa6, 0x29, 0x99, 0xe9, 0xcd, 0xa5, 0x13, 0x29, + 0x6c, 0x8e, 0x56, 0xca, 0xda, 0x41, 0x2d, 0xd5, + 0xf4, 0x6c, 0x34, 0xe2, 0x0d, 0x71, 0xab, 0xab, + 0x4a, 0x77, 0xad, 0xda, 0xb4, 0x63, 0xd5, 0x18, + 0x30, 0xc7, 0x38, 0x5d, 0x97, 0x91, 0xf1, 0x78, + 0x48, 0xaf, 0x35, 0x56, 0x4b, 0x4f, 0x66, 0x56, + 0x6e, 0x90, 0xdc, 0x65, 0xaf, 0x24, 0xb8, 0x95, + 0xe6, 0xaf, 0x64, 0x23, 0xa3, 0x6d, 0x7c, 0x27, + 0x71, 0x38, 0xfb, 0xca, 0x72, 0xd7, 0x46, 0xe9, + 0x8b, 0x50, 0x3a, 0x3c, 0x7c, 0x4f, 0x70, 0xf8, + 0xd2, 0xd6, 0x43, 0xfb, 0xe4, 0xa9, 0xff, 0x00, + 0xc4, 0x75, 0xc9, 0xd2, 0xa8, 0xcd, 0xad, 0xf1, + 0x96, 0x81, 0xbd, 0x1c, 0x4e, 0xb9, 0x7b, 0x81, + 0xe2, 0xa3, 0x83, 0x29, 0xee, 0x9a, 0xaf, 0x98, + 0x35, 0xfe, 0x31, 0xee, 0x64, 0x72, 0x59, 0xc9, + 0x13, 0x5b, 0x50, 0xd7, 0xf4, 0xa1, 0xc0, 0x7b, + 0x81, 0xa0, 0xae, 0x81, 0x1e, 0x2f, 0x19, 0x18, + 0xa4, 0x76, 0x76, 0xed, 0x03, 0x75, 0x22, 0x67, + 0xfa, 0x2f, 0x24, 0xc5, 0x62, 0xa5, 0x14, 0x92, + 0xca, 0xdd, 0xe3, 0xa8, 0x62, 0x67, 0xd1, 0x4c, + 0xb4, 0x75, 0x49, 0x92, 0x7a, 0xd5, 0x2b, 0x5d, + 0x43, 0x87, 0xbb, 0x71, 0x22, 0x6e, 0x01, 0xf1, + 0x03, 0xc1, 0xde, 0x7b, 0x2a, 0x56, 0xdb, 0x29, + 0xd2, 0x46, 0x5f, 0x6d, 0x30, 0x99, 0xa2, 0x85, + 0xdc, 0x27, 0x6f, 0x22, 0xd8, 0xb9, 0xd1, 0xba, + 0x62, 0xe4, 0x1e, 0x2b, 0x08, 0xe3, 0x27, 0xe3, + 0x43, 0x58, 0xcf, 0xee, 0x10, 0x14, 0x2d, 0xdf, + 0xb3, 0x86, 0xc4, 0x4c, 0x98, 0x7c, 0x84, 0x96, + 0xef, 0xe4, 0x8e, 0x7e, 0xed, 0xbf, 0xb6, 0xca, + 0x1f, 0x79, 0x32, 0x53, 0x3d, 0xd9, 0x8d, 0x27, + 0x4a, 0xc1, 0x6f, 0x94, 0x93, 0x84, 0x19, 0x7b, + 0xb6, 0x92, 0x41, 0x20, 0x6d, 0x0b, 0x6c, 0x64, + 0x6d, 0x0b, 0x83, 0x78, 0xf6, 0x93, 0x4d, 0xcb, + 0x9e, 0xde, 0xde, 0xeb, 0x1d, 0x3b, 0x1f, 0x0d, + 0xf5, 0xb0, 0x9e, 0xdc, 0x50, 0x74, 0xe2, 0xaf, + 0x8c, 0xd3, 0xf5, 0xdb, 0xb5, 0xbe, 0xea, 0x92, + 0xc5, 0x6a, 0x7c, 0x4e, 0x58, 0x35, 0x81, 0xc6, + 0xd2, 0xf7, 0x67, 0x0c, 0x12, 0x11, 0xc2, 0xe3, + 0xfa, 0x92, 0x6c, 0x69, 0xe6, 0xd8, 0x52, 0x69, + 0x98, 0xe9, 0xcf, 0xa0, 0xcb, 0x0b, 0xc0, 0x20, + 0x8a, 0x8d, 0xcb, 0xd5, 0x09, 0x6f, 0x7b, 0x71, + 0x07, 0xf0, 0xcb, 0x4b, 0x80, 0x34, 0xa1, 0xda, + 0xee, 0xca, 0x97, 0x82, 0x66, 0xcc, 0xce, 0x20, + 0x76, 0x8d, 0x84, 0x75, 0xd5, 0x52, 0xc8, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x23, 0xb5, 0x1f, 0xa8, 0xef, + 0x3c, 0x9f, 0xce, 0x6a, 0xd7, 0xd0, 0xde, 0xa6, + 0x77, 0x97, 0x7f, 0x69, 0xab, 0x63, 0x51, 0xfa, + 0x8e, 0xf3, 0xc9, 0xfc, 0xe6, 0xad, 0x7d, 0x0d, + 0xea, 0x67, 0x79, 0x77, 0xf6, 0x9a, 0xaf, 0x1c, + 0x39, 0xd2, 0xc6, 0x79, 0x8a, 0x77, 0x27, 0x5a, + 0xc4, 0x88, 0x8a, 0x8d, 0x84, 0x44, 0x40, 0x44, + 0x44, 0x05, 0xab, 0x90, 0xf4, 0x2b, 0x9f, 0x24, + 0xff, 0x00, 0x14, 0xad, 0xa5, 0xab, 0x90, 0xf4, + 0x2b, 0x9f, 0x24, 0xff, 0x00, 0x14, 0xa9, 0xa7, + 0x3c, 0x2b, 0x73, 0x62, 0xad, 0x13, 0xa9, 0x05, + 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, 0x6f, 0x8a, 0xa7, + 0x94, 0x0e, 0x93, 0xf4, 0x7b, 0x8f, 0x0d, 0xbe, + 0x2a, 0x9e, 0x5a, 0x62, 0x38, 0xb5, 0x69, 0xfb, + 0x98, 0x60, 0x79, 0x6b, 0x7a, 0x27, 0x58, 0x88, + 0x8b, 0x27, 0x48, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x84, 0x80, 0x2a, 0x4d, 0x00, 0xde, 0x50, + 0x62, 0xb8, 0x9d, 0xb0, 0x44, 0x64, 0x70, 0x26, + 0x9d, 0x45, 0x11, 0x73, 0x90, 0xb8, 0x92, 0x37, + 0xbb, 0x8d, 0xac, 0x8c, 0x1d, 0x8d, 0x34, 0x00, + 0xf3, 0x92, 0xb3, 0xe4, 0xae, 0x5b, 0x27, 0x08, + 0x27, 0xf8, 0x3b, 0xc1, 0xdc, 0x09, 0xeb, 0xaa, + 0x9d, 0xe6, 0x2e, 0xf7, 0x52, 0xe4, 0x9b, 0x61, + 0x67, 0x29, 0x8f, 0x1b, 0x6f, 0xe9, 0x73, 0x8e, + 0xf6, 0xbb, 0xc0, 0x6f, 0xe9, 0x38, 0x8e, 0x4e, + 0xca, 0x98, 0x8c, 0xb3, 0xd2, 0x89, 0x96, 0x6c, + 0x8c, 0xf7, 0x59, 0x19, 0x1d, 0x8b, 0xc1, 0xb0, + 0x49, 0x74, 0xf1, 0x49, 0xa7, 0x61, 0xe1, 0x8e, + 0x36, 0x93, 0xb4, 0xb9, 0xdb, 0x94, 0xb6, 0x9f, + 0xd0, 0xb8, 0xbc, 0x4f, 0x0d, 0xc5, 0xcd, 0x2f, + 0xaf, 0xf7, 0x99, 0xa4, 0x15, 0x63, 0x4f, 0xea, + 0x30, 0xd7, 0xb2, 0x76, 0xa9, 0xac, 0x66, 0x2e, + 0xcb, 0x15, 0x68, 0xdb, 0x4b, 0x28, 0xc4, 0x71, + 0x37, 0x79, 0xde, 0xe7, 0x1f, 0xd2, 0x7b, 0xb9, + 0x4a, 0xdb, 0x53, 0x35, 0x77, 0x23, 0x31, 0x93, + 0xac, 0x44, 0x45, 0x54, 0x88, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x82, 0x03, 0x50, 0x68, 0xbc, + 0x4e, 0x6c, 0x3a, 0x52, 0xdf, 0x35, 0xbd, 0x3b, + 0xae, 0x62, 0x03, 0x69, 0xff, 0x00, 0xdc, 0x6e, + 0xc0, 0xee, 0xda, 0xa6, 0x9b, 0xac, 0xfe, 0x96, + 0xbd, 0x6d, 0x96, 0x59, 0x8e, 0xb9, 0xb5, 0x93, + 0xb9, 0x8e, 0x61, 0x57, 0x02, 0xdf, 0xfd, 0xb7, + 0xf5, 0x7f, 0x54, 0xae, 0xa2, 0xb0, 0x5f, 0x58, + 0xda, 0x64, 0x2d, 0x5f, 0x69, 0x79, 0x18, 0x96, + 0x19, 0x37, 0xb4, 0xf2, 0x1e, 0xa8, 0x3b, 0xc1, + 0x1d, 0x50, 0xad, 0x15, 0x75, 0xf4, 0xc2, 0x26, + 0x3a, 0xba, 0x10, 0xf8, 0xeb, 0xce, 0x80, 0x74, + 0xac, 0x3c, 0x50, 0xc9, 0xb5, 0xc3, 0x94, 0x05, + 0x39, 0x1c, 0xd1, 0x49, 0x4e, 0x07, 0x03, 0x5d, + 0xa2, 0x8a, 0x8f, 0x35, 0xb5, 0xe6, 0x97, 0xbc, + 0x64, 0x53, 0xb9, 0xd7, 0x18, 0x99, 0x9d, 0xc3, + 0x0d, 0xc1, 0xde, 0xc2, 0x7e, 0x24, 0x9d, 0x43, + 0xdb, 0x52, 0xf6, 0x77, 0xf1, 0x3c, 0xb2, 0x7b, + 0x47, 0xb6, 0x48, 0x9c, 0xed, 0x8f, 0x69, 0xa8, + 0xa0, 0x1b, 0x42, 0x89, 0x8c, 0x89, 0x59, 0x11, + 0x7c, 0x43, 0x2b, 0x26, 0x8d, 0xb2, 0x30, 0xd5, + 0xae, 0x5f, 0x6a, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x14, 0x7e, 0xa0, 0xf5, 0x4c, + 0xff, 0x00, 0x27, 0xc6, 0x0a, 0x41, 0x47, 0xea, + 0x0f, 0x54, 0xcf, 0xf2, 0x7c, 0x60, 0xaf, 0x6f, + 0x6e, 0x9d, 0x30, 0xcb, 0x13, 0xc0, 0xbb, 0xb9, + 0x5e, 0xa7, 0xba, 0x57, 0xd5, 0x0d, 0xf0, 0xdf, + 0xdb, 0x52, 0xcf, 0xdc, 0xa2, 0x74, 0xaf, 0xaa, + 0x1b, 0xe1, 0xbf, 0xb6, 0xa5, 0x9f, 0xb9, 0x4d, + 0xde, 0x2d, 0x7b, 0xd2, 0x8c, 0x37, 0x02, 0xde, + 0xec, 0x39, 0xcd, 0xd7, 0xf9, 0x3c, 0x79, 0x56, + 0x7d, 0x88, 0x57, 0xf5, 0x40, 0xba, 0xff, 0x00, + 0x27, 0x8f, 0x2a, 0xcf, 0xb1, 0x0a, 0xfe, 0xb9, + 0x6c, 0xe7, 0xaf, 0x7e, 0x5e, 0xc7, 0xc5, 0x33, + 0x60, 0xff, 0x00, 0x8d, 0x6c, 0x44, 0x45, 0xb3, + 0xcd, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x45, 0xdc, 0xe4, 0xe4, 0x2f, 0xe8, 0xe0, + 0x3c, 0x14, 0x24, 0x39, 0xc7, 0x7f, 0xb8, 0xb6, + 0xef, 0x2e, 0x7a, 0x38, 0xdc, 0xd6, 0x1e, 0xee, + 0x9b, 0x69, 0xbc, 0x05, 0x5d, 0xbd, 0x82, 0x6b, + 0xd6, 0x9b, 0x3c, 0x7b, 0x83, 0x6e, 0x64, 0x1f, + 0x58, 0x6a, 0x44, 0x60, 0xef, 0x7b, 0xfe, 0x04, + 0x1f, 0x72, 0xdc, 0x19, 0x9e, 0x62, 0x63, 0x45, + 0xcd, 0xd3, 0xaa, 0x18, 0xc6, 0x11, 0xc4, 0x7a, + 0xee, 0x3f, 0x14, 0x0e, 0xba, 0xcf, 0x8b, 0xd2, + 0x36, 0x91, 0x5c, 0x9c, 0x8e, 0x4e, 0x97, 0xb7, + 0xce, 0x3c, 0x4c, 0x0f, 0xdb, 0x14, 0x5d, 0x41, + 0x1b, 0x0e, 0xfa, 0x7e, 0x91, 0x52, 0x18, 0x4c, + 0x1d, 0x96, 0x1a, 0xd7, 0xa0, 0xb6, 0x05, 0xf2, + 0x3b, 0xba, 0x9e, 0xe1, 0xfb, 0x64, 0x91, 0xdc, + 0xa5, 0xc7, 0xb4, 0x14, 0x8a, 0x9c, 0xb9, 0x33, + 0x02, 0x22, 0x28, 0x04, 0x44, 0x40, 0x44, 0xda, + 0xbd, 0x0d, 0x71, 0xe4, 0x41, 0xe2, 0x2f, 0xae, + 0x8c, 0xf2, 0xaf, 0x43, 0x02, 0x0d, 0x6b, 0xbb, + 0x4b, 0x5b, 0xd8, 0x1d, 0x6d, 0x77, 0x13, 0x27, + 0x85, 0xfd, 0xf4, 0x6f, 0x15, 0x05, 0x51, 0xb3, + 0x1a, 0x3b, 0x29, 0x84, 0x2f, 0xbf, 0xd3, 0x72, + 0x3e, 0x5b, 0x60, 0x78, 0xe5, 0xb1, 0x27, 0x89, + 0xc0, 0x0d, 0xb5, 0x67, 0xe9, 0x8f, 0x7f, 0x9d, + 0x74, 0x17, 0x3e, 0x18, 0xc5, 0x5e, 0xe6, 0xb4, + 0x75, 0x49, 0x01, 0x69, 0xcd, 0x9e, 0xc5, 0x41, + 0xb1, 0xd3, 0x87, 0x11, 0xf1, 0x63, 0xab, 0xcf, + 0x61, 0xaa, 0x62, 0xa9, 0x84, 0x4c, 0x2a, 0x7a, + 0x7f, 0x30, 0xec, 0x9c, 0x42, 0xe6, 0x86, 0x29, + 0xe3, 0x34, 0x70, 0xdc, 0x09, 0x1d, 0x45, 0x6c, + 0xb5, 0xbe, 0x8e, 0x66, 0x77, 0x64, 0x36, 0x46, + 0xf7, 0xcd, 0x2a, 0x03, 0x2b, 0x88, 0x82, 0xfb, + 0x8b, 0x37, 0xa7, 0x1e, 0x0d, 0xd3, 0x4d, 0x6e, + 0x6d, 0x9b, 0xb0, 0x4b, 0xd5, 0xee, 0x4d, 0x38, + 0x64, 0xed, 0xac, 0x38, 0xec, 0xbd, 0xa5, 0xeb, + 0x18, 0x1a, 0x43, 0x6e, 0x80, 0xfe, 0x2c, 0x0e, + 0x34, 0x78, 0xa6, 0xc3, 0x50, 0x76, 0xa4, 0xf5, + 0xc6, 0x62, 0x16, 0xf4, 0x5a, 0x58, 0xcb, 0xbe, + 0x96, 0x21, 0x13, 0xcf, 0xf1, 0x1a, 0xd0, 0x7d, + 0xc2, 0xb7, 0x54, 0x24, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x1b, 0xc2, 0x20, 0xde, + 0x10, 0x50, 0x34, 0x6f, 0xf7, 0xc5, 0xf7, 0x35, + 0xc7, 0xda, 0x05, 0xd2, 0x17, 0x37, 0xd1, 0xbf, + 0xdf, 0x17, 0xdc, 0xd7, 0x1f, 0x68, 0x17, 0x48, + 0x58, 0xe1, 0xf6, 0x3c, 0xe9, 0x7a, 0x7f, 0x19, + 0xe6, 0x69, 0xf5, 0x56, 0xf5, 0x22, 0xf3, 0x7f, + 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, + 0xa2, 0xf0, 0x47, 0x69, 0x61, 0xcd, 0xfd, 0x4c, + 0x7e, 0x1f, 0xc0, 0x56, 0x6b, 0x4f, 0x46, 0x8b, + 0xc1, 0x1d, 0xa5, 0xc5, 0x67, 0xfb, 0x3c, 0x47, + 0xaa, 0xa1, 0xc7, 0x57, 0x2f, 0x6f, 0x7e, 0x59, + 0x51, 0x11, 0x7a, 0x6c, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x5a, 0xb7, 0xb7, 0xa2, + 0xdc, 0x70, 0x81, 0x57, 0x91, 0xb2, 0xbb, 0x96, + 0xc4, 0x92, 0x32, 0x36, 0xf1, 0x38, 0x80, 0x39, + 0x3a, 0xe5, 0x41, 0x64, 0x2e, 0x62, 0xe2, 0x7c, + 0xb7, 0x04, 0x37, 0x87, 0x70, 0x71, 0xd9, 0x4e, + 0x40, 0x29, 0xca, 0x83, 0xe2, 0xee, 0xfd, 0xd4, + 0x0e, 0xba, 0x95, 0x9d, 0x1d, 0x09, 0x70, 0x7d, + 0x00, 0x00, 0x0d, 0xe0, 0x28, 0xc7, 0xe0, 0x2e, + 0xf5, 0x24, 0x8c, 0xe3, 0x73, 0xac, 0x71, 0x0c, + 0x25, 0xc4, 0x8d, 0x92, 0x4d, 0xc9, 0xdc, 0xb4, + 0xee, 0x6f, 0x5c, 0xad, 0x8c, 0x36, 0x94, 0x37, + 0x57, 0xc7, 0x31, 0x99, 0xac, 0x80, 0x3a, 0xb6, + 0x56, 0x6f, 0xdc, 0xc6, 0xf2, 0x3a, 0x41, 0xfa, + 0x5d, 0x65, 0x6d, 0x56, 0xcd, 0x99, 0x0d, 0x3c, + 0x5e, 0x1f, 0x1b, 0x88, 0x83, 0xcd, 0xf1, 0xf0, + 0x36, 0x16, 0x7c, 0x67, 0x01, 0x57, 0xbb, 0xae, + 0xe7, 0x9d, 0xa5, 0x6e, 0x22, 0x2a, 0xa4, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x18, 0x6e, + 0xad, 0x2d, 0x6f, 0x20, 0x75, 0xbd, 0xdc, 0x4c, + 0x9e, 0x17, 0xec, 0x73, 0x24, 0x1c, 0x43, 0xdf, + 0x54, 0x3c, 0xf7, 0xb3, 0xfb, 0xab, 0x09, 0x0e, + 0x4b, 0x4d, 0xc8, 0xfa, 0xc7, 0x57, 0x1b, 0x6e, + 0x2f, 0xe2, 0x37, 0xc9, 0x3f, 0xe3, 0x78, 0x27, + 0xdf, 0x5d, 0x09, 0x14, 0xc5, 0x53, 0x08, 0x98, + 0xca, 0xe7, 0x5a, 0x7f, 0x53, 0x0c, 0x87, 0xff, + 0x00, 0x8f, 0xc8, 0x30, 0xc3, 0x7a, 0xca, 0xd2, + 0x46, 0x8e, 0x16, 0xbc, 0x8d, 0xe1, 0xed, 0xf8, + 0xae, 0xf7, 0x95, 0xc7, 0x1f, 0x7b, 0xd1, 0x06, + 0xc1, 0x33, 0xaa, 0xc3, 0xde, 0x3f, 0xe0, 0x51, + 0xfa, 0xa3, 0x46, 0xc7, 0x95, 0x06, 0xfa, 0xc2, + 0x96, 0xf9, 0x46, 0x6d, 0xe3, 0xdc, 0xd9, 0x69, + 0xf1, 0x64, 0xeb, 0xf5, 0x1c, 0xa0, 0x70, 0xb9, + 0xe2, 0xc7, 0xbf, 0x1f, 0x97, 0xff, 0x00, 0xe3, + 0xdd, 0x40, 0x43, 0x0f, 0x4b, 0xdc, 0xd1, 0xe3, + 0x67, 0x09, 0xaf, 0x2f, 0x51, 0x4c, 0xc4, 0x4f, + 0x4c, 0x78, 0x11, 0x97, 0x27, 0x44, 0xba, 0x0b, + 0x5c, 0xd7, 0x77, 0xa4, 0x10, 0x3a, 0x8b, 0xd5, + 0x0d, 0x63, 0x76, 0x60, 0x98, 0xb6, 0x41, 0xc2, + 0xca, 0x00, 0x47, 0x5c, 0xd6, 0x85, 0x4c, 0xaa, + 0xac, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x8c, 0xcb, 0x7d, 0x74, 0x3c, + 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, 0x09, + 0x96, 0xfa, 0xe8, 0x79, 0x8f, 0x6d, 0x4d, 0xb7, + 0xbd, 0x1c, 0xcb, 0xce, 0xc1, 0xf3, 0xd8, 0xed, + 0x36, 0xbf, 0x4c, 0xba, 0x2e, 0xf0, 0x6c, 0xe8, + 0xab, 0x5b, 0x0d, 0xe7, 0xa2, 0xcd, 0xe4, 0xdf, + 0xe2, 0x95, 0x52, 0xd0, 0x9b, 0xaf, 0x3f, 0x95, + 0xf3, 0xd5, 0xb6, 0xf3, 0xd1, 0x66, 0xf2, 0x6f, + 0xf1, 0x4a, 0xa9, 0x68, 0x4d, 0xd7, 0x9f, 0xca, + 0xf9, 0xeb, 0xd5, 0xa7, 0x62, 0xae, 0xf3, 0x86, + 0xbe, 0x35, 0xaf, 0x39, 0x6b, 0x44, 0x45, 0x9b, + 0x61, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x16, 0x3b, 0x89, 0x9b, 0x04, 0x66, 0x47, 0x56, + 0x83, 0xa8, 0xb2, 0x6e, 0xdb, 0xd4, 0x51, 0x79, + 0x2b, 0x96, 0x3c, 0x35, 0x9b, 0xe1, 0xdf, 0x5e, + 0x42, 0x42, 0x0c, 0x17, 0x39, 0x0b, 0x89, 0x18, + 0xf7, 0x07, 0xb5, 0x91, 0x8e, 0x43, 0x4a, 0x1e, + 0x72, 0x77, 0x28, 0x0c, 0x8d, 0xd5, 0xcd, 0xeb, + 0xce, 0x33, 0x0a, 0xce, 0x96, 0xf6, 0x56, 0xd1, + 0xf2, 0x46, 0x68, 0xc8, 0xc1, 0xd8, 0x4b, 0x9d, + 0xb8, 0x2c, 0x59, 0x0c, 0x75, 0xe6, 0xa3, 0xc8, + 0x33, 0x1f, 0x63, 0x2f, 0x47, 0x63, 0x09, 0xad, + 0xe4, 0xe0, 0x77, 0x02, 0xbb, 0x83, 0x7f, 0x49, + 0xc7, 0xa8, 0xae, 0x78, 0xac, 0x45, 0x86, 0x22, + 0xd1, 0xb6, 0x96, 0x31, 0xf0, 0x30, 0x77, 0xce, + 0x3b, 0x5e, 0xf3, 0xfa, 0x4f, 0x77, 0x29, 0x56, + 0xe8, 0x8e, 0x9e, 0xea, 0x33, 0xa0, 0xb0, 0x1a, + 0x03, 0x19, 0x8d, 0xe1, 0xb9, 0xbf, 0xa5, 0xfd, + 0xf6, 0xf2, 0xe7, 0x8a, 0xc4, 0xd3, 0xfa, 0xac, + 0x3b, 0xf9, 0xdc, 0xad, 0x3b, 0x85, 0x06, 0xe1, + 0xb8, 0x22, 0x28, 0x99, 0x99, 0xce, 0x98, 0x8c, + 0x82, 0x22, 0x28, 0x04, 0x44, 0x40, 0x45, 0xe8, + 0x04, 0xf2, 0x2f, 0x44, 0x6e, 0xea, 0x20, 0xf8, + 0x20, 0x10, 0x5a, 0x40, 0x20, 0xec, 0x20, 0xed, + 0x04, 0x75, 0xd5, 0x4b, 0x50, 0xfb, 0x3c, 0xc7, + 0x64, 0x03, 0xae, 0x31, 0x9c, 0x36, 0x37, 0x7b, + 0xcb, 0x07, 0xd4, 0xbc, 0xf5, 0xda, 0x3b, 0xc3, + 0xd7, 0x1d, 0x85, 0x71, 0xe8, 0xfa, 0xa5, 0x7d, + 0x70, 0x34, 0x6d, 0xdf, 0xd7, 0x2a, 0x62, 0x66, + 0x33, 0x19, 0x32, 0xb9, 0x3d, 0x8e, 0x77, 0x2b, + 0x82, 0xbc, 0xfc, 0x2b, 0x3f, 0x0c, 0x8e, 0x68, + 0x01, 0xad, 0x90, 0xed, 0x95, 0x8d, 0xdd, 0xc4, + 0xc7, 0x7f, 0xea, 0x31, 0x5d, 0x6c, 0x2e, 0x84, + 0x04, 0xcb, 0x13, 0xba, 0x48, 0x5f, 0xb4, 0xd3, + 0xf4, 0x77, 0xd5, 0x48, 0x66, 0xb1, 0x38, 0x7c, + 0xe4, 0x06, 0xc6, 0xec, 0xb0, 0xc8, 0x36, 0xc4, + 0xf6, 0x91, 0xd2, 0xc6, 0xef, 0xd2, 0x67, 0x2a, + 0xa2, 0x34, 0xe4, 0xb4, 0xa6, 0x49, 0xb8, 0xec, + 0x91, 0x32, 0xd9, 0xca, 0x6b, 0x05, 0xc0, 0xd8, + 0xd7, 0x37, 0xab, 0xd6, 0x23, 0x94, 0x2b, 0x74, + 0x55, 0x9b, 0x3e, 0xb4, 0x66, 0x74, 0x68, 0xe7, + 0x8a, 0x56, 0x87, 0x31, 0xc0, 0xf1, 0x6d, 0x1d, + 0x55, 0xf6, 0xab, 0x76, 0x97, 0x91, 0xbc, 0x47, + 0x71, 0x68, 0xe6, 0xbe, 0x27, 0xb8, 0x70, 0x48, + 0xd3, 0x56, 0x9a, 0x56, 0xa3, 0x62, 0xb0, 0xc1, + 0x33, 0x27, 0x89, 0xb2, 0x33, 0x71, 0x54, 0x4b, + 0xed, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x04, 0x76, 0xa3, 0xf5, 0x1d, 0xe7, + 0x93, 0xf9, 0xcd, 0x5a, 0xfa, 0x1b, 0xd4, 0xce, + 0xf2, 0xef, 0xed, 0x35, 0x6c, 0x6a, 0x3f, 0x51, + 0xde, 0x79, 0x3f, 0x9c, 0xd5, 0xaf, 0xa1, 0xbd, + 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x55, 0xe3, 0x87, + 0x3a, 0x58, 0xcf, 0x31, 0x4e, 0xe4, 0xeb, 0x58, + 0x91, 0x11, 0x51, 0xb0, 0x88, 0x88, 0x08, 0x88, + 0x80, 0xb5, 0x72, 0x1e, 0x85, 0x73, 0xe4, 0x9f, + 0xe2, 0x95, 0xb4, 0xb5, 0x72, 0x1e, 0x85, 0x73, + 0xe4, 0x9f, 0xe2, 0x95, 0x34, 0xe7, 0x85, 0x6e, + 0x6c, 0x55, 0xa2, 0x75, 0x20, 0xb4, 0x9f, 0xa3, + 0xdc, 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0x81, 0xd2, + 0x7e, 0x8f, 0x71, 0xe1, 0xb7, 0xc5, 0x53, 0xcb, + 0x4c, 0x47, 0x16, 0xad, 0x3f, 0x73, 0x0c, 0x0f, + 0x2d, 0x6f, 0x44, 0xeb, 0x11, 0x11, 0x64, 0xe9, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x14, 0x3e, 0x46, + 0xe9, 0xf2, 0x4a, 0xe8, 0xc5, 0x44, 0x71, 0x6d, + 0x71, 0x07, 0x67, 0xba, 0xb7, 0xb2, 0x13, 0x3e, + 0x2b, 0x7a, 0xb0, 0xd1, 0xc7, 0x67, 0xb9, 0xd5, + 0x54, 0xbd, 0x4f, 0x7d, 0x75, 0x1c, 0x10, 0xd8, + 0xd9, 0x02, 0x6e, 0xf2, 0x0f, 0x31, 0x46, 0xc1, + 0xb4, 0xba, 0xb4, 0xee, 0xbb, 0x25, 0x4c, 0x46, + 0x59, 0xc8, 0x4b, 0x5e, 0x3b, 0xcc, 0x9e, 0xa0, + 0xce, 0xbb, 0x1f, 0x8a, 0x79, 0x8a, 0xd5, 0x8d, + 0x2d, 0xbb, 0x9e, 0x80, 0x80, 0xca, 0xed, 0x3c, + 0xe7, 0x70, 0x57, 0xeb, 0x0b, 0x0b, 0x5c, 0x75, + 0xa4, 0x76, 0x96, 0xac, 0xe0, 0x8a, 0x31, 0xb3, + 0xaa, 0x49, 0xde, 0xe7, 0x1e, 0x52, 0x79, 0x56, + 0x96, 0x9a, 0xc0, 0x41, 0x82, 0xc6, 0x32, 0xd5, + 0x94, 0x7c, 0xef, 0xee, 0xee, 0x66, 0x1f, 0x1e, + 0x43, 0xbf, 0xdc, 0x1b, 0x82, 0x95, 0x4a, 0xa7, + 0x2f, 0x44, 0x66, 0x84, 0x44, 0x75, 0x88, 0x88, + 0xa1, 0x22, 0x22, 0x20, 0x22, 0x22, 0x02, 0x2f, + 0x43, 0x5c, 0x79, 0x17, 0xa2, 0x37, 0x73, 0x20, + 0xf9, 0x45, 0x90, 0x46, 0x39, 0x4a, 0x1e, 0x89, + 0x82, 0xae, 0x20, 0x0e, 0xa9, 0x34, 0x41, 0x8c, + 0x0a, 0xaf, 0x43, 0x1c, 0x79, 0x16, 0xbc, 0xf9, + 0xac, 0x5d, 0xbe, 0xc9, 0x2e, 0x19, 0x5e, 0xa3, + 0x4d, 0x4f, 0xbc, 0xb0, 0x45, 0xa9, 0xf1, 0x32, + 0x4c, 0x22, 0x2f, 0x7c, 0x5c, 0x44, 0x06, 0xbe, + 0x46, 0x16, 0xb0, 0x93, 0xb8, 0x71, 0x1d, 0x89, + 0x90, 0xca, 0xdb, 0xba, 0xb1, 0x82, 0xf2, 0xda, + 0x4b, 0x5b, 0xa6, 0x36, 0x58, 0x65, 0x69, 0x6b, + 0xe3, 0x76, 0xe2, 0x0a, 0xe6, 0x57, 0x36, 0xf7, + 0x9a, 0x27, 0x34, 0x22, 0x71, 0x74, 0xd8, 0x9b, + 0xa2, 0x4c, 0x4f, 0x3d, 0x4e, 0x50, 0x7a, 0x8f, + 0x6a, 0xea, 0xc0, 0x82, 0x2a, 0x37, 0x15, 0x17, + 0x9d, 0xc3, 0x5a, 0xe6, 0xb1, 0xf3, 0x58, 0x5c, + 0x8a, 0x07, 0xed, 0x8e, 0x4e, 0x56, 0x3c, 0x77, + 0xaf, 0x1c, 0xca, 0xd4, 0xce, 0x4e, 0x89, 0xcd, + 0x28, 0x98, 0xcb, 0x99, 0xab, 0x89, 0xbb, 0x11, + 0x47, 0x1b, 0x1e, 0xe0, 0x59, 0x20, 0xe2, 0x63, + 0x86, 0xd1, 0x43, 0xcb, 0xd8, 0x53, 0x00, 0x83, + 0xb4, 0x6d, 0x0b, 0x9d, 0x69, 0xab, 0x9b, 0xbb, + 0x6b, 0x89, 0xf4, 0xfe, 0x46, 0xad, 0xb8, 0xb1, + 0xa8, 0x65, 0x4f, 0x7c, 0xc1, 0xd4, 0xae, 0xf1, + 0xca, 0x3a, 0xca, 0xf1, 0x8a, 0x98, 0x49, 0x01, + 0x65, 0x76, 0xc6, 0x69, 0xb5, 0x45, 0x51, 0x92, + 0x53, 0x0d, 0xd4, 0x44, 0x50, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, 0x7f, + 0x93, 0xe3, 0x05, 0x20, 0xa3, 0xf5, 0x07, 0xaa, + 0x67, 0xf9, 0x3e, 0x30, 0x57, 0xb7, 0xb7, 0x4e, + 0x98, 0x65, 0x89, 0xe0, 0x5d, 0xdc, 0xaf, 0x53, + 0xdd, 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, 0xa9, + 0x67, 0xee, 0x51, 0x3a, 0x57, 0xd5, 0x0d, 0xf0, + 0xdf, 0xdb, 0x52, 0xcf, 0xdc, 0xa6, 0xef, 0x16, + 0xbd, 0xe9, 0x46, 0x1b, 0x81, 0x6f, 0x76, 0x1c, + 0xe6, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, 0x3e, 0xc4, + 0x2b, 0xfa, 0xa0, 0x5d, 0x7f, 0x93, 0xc7, 0x95, + 0x67, 0xd8, 0x85, 0x7f, 0x5c, 0xb6, 0x73, 0xd7, + 0xbf, 0x2f, 0x63, 0xe2, 0x99, 0xb0, 0x7f, 0xc6, + 0xb6, 0x22, 0x22, 0xd9, 0xe6, 0x88, 0x88, 0x80, + 0x88, 0x88, 0x0b, 0x53, 0x23, 0x72, 0xe8, 0x22, + 0x01, 0x9b, 0x5e, 0xf3, 0x41, 0x43, 0xb5, 0x6d, + 0x13, 0x40, 0x4e, 0xea, 0x0d, 0xea, 0xb9, 0x92, + 0xbc, 0x2c, 0x8e, 0x7b, 0x99, 0x8d, 0x04, 0x4c, + 0x73, 0xb8, 0xb6, 0x77, 0x21, 0xa0, 0xf2, 0x20, + 0x89, 0xcc, 0x5e, 0x5d, 0xcb, 0x3c, 0x58, 0xab, + 0x00, 0xe7, 0xdf, 0x5c, 0xba, 0x8c, 0xaf, 0xc5, + 0xa7, 0x7c, 0xf7, 0x9e, 0x46, 0xb7, 0x95, 0x5b, + 0xf1, 0xb8, 0xf6, 0xd8, 0xc0, 0x1a, 0xe7, 0xf4, + 0xd7, 0x0f, 0x00, 0xcf, 0x39, 0x14, 0x2f, 0x77, + 0x57, 0xac, 0x3a, 0x81, 0x45, 0xe9, 0x2c, 0x24, + 0xd6, 0xf0, 0xbf, 0x2b, 0x7e, 0xda, 0x64, 0x6f, + 0x80, 0x71, 0x07, 0x7c, 0x51, 0x6f, 0x64, 0x7d, + 0x63, 0xca, 0xe5, 0x62, 0x11, 0x8e, 0x52, 0xa6, + 0x7a, 0xa1, 0x10, 0xf8, 0x45, 0x90, 0x31, 0xbc, + 0xeb, 0x1c, 0xd7, 0x16, 0xd6, 0xed, 0x2e, 0x9a, + 0x46, 0x44, 0x06, 0xf2, 0xe2, 0x07, 0x6d, 0x42, + 0x5e, 0x80, 0x4f, 0x22, 0xf4, 0x30, 0xa8, 0xdb, + 0x9d, 0x53, 0x85, 0x80, 0x13, 0xd3, 0xf4, 0xb4, + 0xff, 0x00, 0x6c, 0x17, 0x0e, 0xce, 0xe5, 0x05, + 0x7f, 0xed, 0x37, 0x11, 0x6f, 0x5e, 0x8c, 0x36, + 0xa3, 0xfd, 0xc7, 0x8a, 0xfe, 0xcb, 0x38, 0x90, + 0x5c, 0x44, 0x63, 0x95, 0x0b, 0x58, 0xd1, 0xfe, + 0xab, 0x95, 0xdf, 0xfb, 0x5b, 0x95, 0xc0, 0x8b, + 0x6a, 0x8f, 0x26, 0xc0, 0x3f, 0x7a, 0x42, 0x7b, + 0x4a, 0xb9, 0x7d, 0xed, 0x0b, 0x33, 0x75, 0x51, + 0x57, 0x50, 0xee, 0x32, 0x3c, 0x9f, 0xdd, 0x6f, + 0x08, 0x41, 0xdb, 0xae, 0x32, 0x98, 0xeb, 0x51, + 0xfc, 0x7b, 0x88, 0xe3, 0xa7, 0x21, 0x70, 0xaf, + 0x61, 0x45, 0x5d, 0xeb, 0x6c, 0x2d, 0xb0, 0x24, + 0x3d, 0xd2, 0x53, 0x94, 0x0e, 0x11, 0xd9, 0x7d, + 0x17, 0x0d, 0x9b, 0x3f, 0x97, 0x98, 0x9e, 0x2b, + 0x82, 0xc0, 0x77, 0x88, 0xc0, 0x6f, 0x69, 0x68, + 0xc9, 0x24, 0x92, 0x1e, 0x29, 0x1e, 0xe7, 0x93, + 0xca, 0xe2, 0x4f, 0x6d, 0x4a, 0x1d, 0x7e, 0xff, + 0x00, 0xda, 0xbd, 0x8c, 0x55, 0x6c, 0x1d, 0x18, + 0x3c, 0xe6, 0x43, 0xfb, 0x82, 0x9e, 0xfa, 0xae, + 0x5f, 0xfb, 0x56, 0xc8, 0x4d, 0x56, 0xc3, 0xc7, + 0x4e, 0x42, 0x38, 0x63, 0x1f, 0x38, 0xaa, 0x0a, + 0xcb, 0x6b, 0x6d, 0x25, 0xd5, 0xcc, 0x76, 0xf1, + 0xf7, 0xd2, 0xb8, 0x37, 0xfd, 0x4a, 0x41, 0x2e, + 0x83, 0x80, 0xcb, 0x64, 0x32, 0x56, 0xcf, 0xbe, + 0xbd, 0x01, 0xcd, 0x7b, 0xb8, 0x61, 0x6b, 0x8b, + 0x9f, 0xbb, 0x7b, 0xbb, 0xa3, 0x45, 0x28, 0x6e, + 0x64, 0xa5, 0x03, 0x8b, 0x40, 0xe4, 0x6f, 0x72, + 0x3d, 0xe5, 0xa5, 0x6d, 0x14, 0x76, 0xb6, 0xf1, + 0xdb, 0xc4, 0x28, 0xc8, 0x9a, 0x1a, 0x3d, 0xc5, + 0xf6, 0x5e, 0xba, 0x29, 0x88, 0x88, 0x86, 0x13, + 0x33, 0x33, 0x95, 0x2f, 0x80, 0xbd, 0x7c, 0x39, + 0xbb, 0x6a, 0x9e, 0xe6, 0xe7, 0x8a, 0x19, 0x3a, + 0xe6, 0x84, 0xb2, 0xbc, 0xcb, 0xef, 0x5d, 0x69, + 0x79, 0x78, 0x8e, 0xa2, 0xc4, 0x37, 0x82, 0xf2, + 0x0e, 0xea, 0xea, 0x36, 0x7c, 0x76, 0x8f, 0xfd, + 0x41, 0xfa, 0xc0, 0x6f, 0xea, 0x85, 0x0a, 0xdb, + 0x87, 0x41, 0x24, 0x57, 0x0d, 0xdf, 0x6f, 0x23, + 0x25, 0x1f, 0x24, 0xed, 0xf7, 0x97, 0x4f, 0x0e, + 0x6c, 0x91, 0x87, 0x0d, 0xad, 0x70, 0xa8, 0xe6, + 0x2b, 0x2a, 0xff, 0x00, 0xf3, 0x56, 0x58, 0xee, + 0xb4, 0xa3, 0xa6, 0x26, 0x14, 0x9d, 0x31, 0x9b, + 0x39, 0x0b, 0x71, 0x7a, 0x28, 0x24, 0x84, 0x06, + 0x4e, 0xd1, 0xd5, 0x1b, 0x6b, 0x4e, 0xa1, 0x0a, + 0xdf, 0x0c, 0xcc, 0x99, 0x81, 0xec, 0x35, 0x07, + 0x93, 0x94, 0x2e, 0x7d, 0x9d, 0xb0, 0x7e, 0x93, + 0xcf, 0x36, 0xfe, 0xd4, 0x53, 0x13, 0x91, 0x77, + 0x0c, 0xac, 0x1b, 0xa3, 0x79, 0xda, 0xe6, 0xfc, + 0x2d, 0xec, 0x2b, 0x56, 0x36, 0x76, 0x47, 0x70, + 0xda, 0x1a, 0xb6, 0x51, 0xbc, 0x6e, 0x3d, 0x7d, + 0x8a, 0xb5, 0x47, 0x76, 0x33, 0x4a, 0xf1, 0xd4, + 0x9b, 0x44, 0x45, 0x54, 0x88, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x37, 0x84, 0x41, 0xbc, 0x20, 0xa0, + 0x68, 0xdf, 0xef, 0x8b, 0xee, 0x6b, 0x8f, 0xb4, + 0x0b, 0xa4, 0x2e, 0x6f, 0xa3, 0x7f, 0xbe, 0x2f, + 0xb9, 0xae, 0x3e, 0xd0, 0x2e, 0x90, 0xb1, 0xc3, + 0xec, 0x79, 0xd2, 0xf4, 0xfe, 0x33, 0xcc, 0xd3, + 0xea, 0xad, 0xea, 0x45, 0xe6, 0xfe, 0xa6, 0x3f, + 0x0f, 0xe0, 0x2b, 0x35, 0xa7, 0xa3, 0x45, 0xe0, + 0x8e, 0xd2, 0xc3, 0x9b, 0xfa, 0x98, 0xfc, 0x3f, + 0x80, 0xac, 0xd6, 0x9e, 0x8d, 0x17, 0x82, 0x3b, + 0x4b, 0x8a, 0xcf, 0xf6, 0x78, 0x8f, 0x55, 0x43, + 0x8e, 0xae, 0x5e, 0xde, 0xfc, 0xb2, 0xa2, 0x22, + 0xf4, 0xd8, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0b, + 0xe5, 0xee, 0x0c, 0x61, 0x79, 0xf8, 0xa2, 0xab, + 0xe9, 0x46, 0x65, 0xa7, 0x78, 0x70, 0x88, 0x1e, + 0xe3, 0x7b, 0x86, 0xea, 0xf5, 0x90, 0x45, 0xe5, + 0x72, 0x7d, 0x0c, 0x2f, 0xbc, 0x98, 0x96, 0xb1, + 0xa0, 0xf0, 0xd7, 0x68, 0xd9, 0xd4, 0x58, 0xb4, + 0x9e, 0x36, 0xf2, 0xf6, 0x2f, 0xc5, 0x32, 0x75, + 0xf3, 0x77, 0xbf, 0xa5, 0xb1, 0xb5, 0x78, 0xda, + 0x2b, 0xba, 0x57, 0xf3, 0xfc, 0x51, 0xee, 0xad, + 0x68, 0xb1, 0xb2, 0x67, 0xb3, 0x6e, 0xb7, 0x9a, + 0xbf, 0x85, 0xe3, 0x8b, 0x1d, 0x70, 0xde, 0x47, + 0xca, 0x40, 0x73, 0x61, 0xe6, 0x1b, 0xdc, 0xae, + 0xa0, 0x00, 0x28, 0x36, 0x01, 0xb0, 0x05, 0x6c, + 0xdd, 0x1d, 0xd4, 0x77, 0x44, 0x44, 0x55, 0x48, + 0x89, 0x43, 0xd4, 0x5f, 0x5c, 0x0e, 0xea, 0x20, + 0xf9, 0x45, 0xf6, 0x23, 0xea, 0x95, 0xe3, 0xdd, + 0x0c, 0x42, 0xb2, 0x38, 0x34, 0x7e, 0xb1, 0x01, + 0x07, 0xca, 0xf4, 0x34, 0x9d, 0xc1, 0x68, 0xdc, + 0x6a, 0x3c, 0x25, 0xad, 0x43, 0xee, 0x58, 0x48, + 0xf8, 0xac, 0xee, 0x8f, 0xbc, 0xa1, 0xaf, 0xbd, + 0xa3, 0x61, 0xed, 0x41, 0xe0, 0x05, 0xdd, 0x42, + 0xf7, 0x06, 0x0f, 0x7f, 0x6a, 0x0b, 0x40, 0x8d, + 0xdc, 0xcb, 0xd1, 0x18, 0xe5, 0x2b, 0x9a, 0x5f, + 0xfb, 0x5b, 0x02, 0xa2, 0xdb, 0x81, 0xbd, 0x4e, + 0x06, 0x97, 0x9e, 0xc9, 0xa0, 0x55, 0xcb, 0xef, + 0x69, 0x59, 0x7b, 0x9a, 0x86, 0xba, 0x4a, 0x75, + 0xdd, 0xc0, 0x3b, 0x0c, 0x41, 0xda, 0xa5, 0xba, + 0xb2, 0xb7, 0x15, 0x9a, 0x66, 0x33, 0xc2, 0x70, + 0x5a, 0x32, 0x6a, 0x4c, 0x53, 0x2a, 0x22, 0x73, + 0xa7, 0x3d, 0x48, 0x9a, 0x4f, 0xbe, 0xb8, 0x9d, + 0x8e, 0x5f, 0x31, 0x97, 0xc8, 0xc5, 0x6f, 0xd2, + 0x06, 0xb5, 0xce, 0xab, 0xc8, 0x15, 0x21, 0xa3, + 0x69, 0xda, 0xea, 0xab, 0xb9, 0x99, 0xe4, 0x06, + 0x97, 0x1a, 0x01, 0x40, 0x2b, 0xc8, 0x16, 0x94, + 0x5b, 0xf2, 0xba, 0x72, 0xa9, 0x5d, 0x7e, 0x4a, + 0xd8, 0xdd, 0x5b, 0x6c, 0xd9, 0x29, 0x3d, 0xb4, + 0xb1, 0xc3, 0xcb, 0x2f, 0x72, 0x68, 0x3a, 0xae, + 0x68, 0x3c, 0x4b, 0x47, 0x59, 0xe9, 0x5b, 0x7d, + 0x43, 0x64, 0x32, 0x18, 0xfe, 0x13, 0x7f, 0x1b, + 0x38, 0xa2, 0x7b, 0x77, 0x4c, 0xcd, 0xe1, 0x84, + 0xf5, 0x7f, 0x44, 0xaa, 0xf8, 0x78, 0x05, 0x5b, + 0xb4, 0x6c, 0xfd, 0x26, 0x28, 0xc2, 0x77, 0xdb, + 0x4a, 0xe8, 0xe9, 0xd4, 0x1b, 0xc2, 0x57, 0x47, + 0x91, 0x92, 0x62, 0x51, 0x4d, 0x5e, 0x57, 0x44, + 0xaa, 0x5a, 0x53, 0x3b, 0x2d, 0xf4, 0x67, 0x0f, + 0x78, 0x78, 0x6f, 0xe0, 0x14, 0x81, 0xf2, 0x6c, + 0x2f, 0x6c, 0x7b, 0xd8, 0xef, 0xd7, 0x60, 0x0a, + 0xf3, 0x61, 0x76, 0xd7, 0xb7, 0xa2, 0x79, 0xfe, + 0x23, 0x36, 0x6d, 0xe5, 0x54, 0xcf, 0x68, 0x7a, + 0x76, 0x4b, 0x59, 0xdb, 0xa9, 0x31, 0xb5, 0x8d, + 0xed, 0x73, 0x4d, 0xd0, 0x66, 0xca, 0x3a, 0xbd, + 0xcc, 0xdf, 0x03, 0x96, 0xe6, 0x0f, 0x2a, 0xcc, + 0x95, 0x83, 0x2f, 0x2b, 0x49, 0x1a, 0x69, 0x33, + 0x45, 0x09, 0x6b, 0xdb, 0xbf, 0xb3, 0xc8, 0xab, + 0x54, 0x65, 0xff, 0x00, 0xd4, 0x77, 0x57, 0x8e, + 0xa5, 0xcd, 0x16, 0x3b, 0x79, 0x04, 0xb0, 0xb1, + 0xe3, 0xe3, 0x0f, 0x7d, 0x64, 0x55, 0x48, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x23, 0x32, + 0xdf, 0x5d, 0x0f, 0x31, 0xed, 0xa9, 0xb6, 0xf7, + 0xa3, 0x99, 0x42, 0x65, 0xbe, 0xba, 0x1e, 0x63, + 0xdb, 0x53, 0x6d, 0xef, 0x47, 0x32, 0xf3, 0xb0, + 0x7c, 0xf6, 0x3b, 0x4d, 0xaf, 0xd3, 0x2e, 0x8b, + 0xbc, 0x1b, 0x3a, 0x2a, 0xd6, 0xc3, 0x79, 0xe8, + 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, 0xb4, 0x26, + 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0x6d, 0xbc, 0xf4, + 0x59, 0xbc, 0x9b, 0xfc, 0x52, 0xaa, 0x5a, 0x13, + 0x75, 0xe7, 0xf2, 0xbe, 0x7a, 0xf5, 0x69, 0xd8, + 0xab, 0xbc, 0xe1, 0xaf, 0x8d, 0x6b, 0xce, 0x5a, + 0xd1, 0x11, 0x66, 0xd8, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x5a, 0xf7, 0xf2, 0xba, 0x2b, 0x72, + 0xe6, 0x1a, 0x3b, 0x75, 0x7a, 0x9d, 0x74, 0x1a, + 0x39, 0x2b, 0xa7, 0x3a, 0x47, 0x44, 0x2a, 0x19, + 0x18, 0xab, 0x88, 0x3d, 0xbe, 0xa0, 0x55, 0x16, + 0x5d, 0x64, 0xf3, 0xb9, 0xdf, 0xc3, 0xf1, 0x52, + 0x18, 0xad, 0xe2, 0x69, 0x6d, 0xdd, 0xc5, 0x07, + 0x0b, 0x58, 0x77, 0x9f, 0x08, 0xee, 0x0b, 0x6b, + 0x51, 0xde, 0x5d, 0xc7, 0x04, 0x36, 0xb6, 0x40, + 0xba, 0xf2, 0xfe, 0x4e, 0x8a, 0x26, 0xb7, 0x6f, + 0x11, 0x23, 0x6b, 0xbd, 0xc5, 0x67, 0xd3, 0x7a, + 0x7e, 0x2c, 0x1e, 0x35, 0x96, 0x91, 0x8e, 0x39, + 0xdd, 0xdd, 0xdc, 0xcd, 0xca, 0xf9, 0x0e, 0xff, + 0x00, 0x70, 0x6e, 0x0a, 0xd1, 0xd1, 0x19, 0x7b, + 0xbd, 0xc8, 0x46, 0x79, 0x6d, 0xd8, 0x58, 0x5a, + 0xe3, 0xed, 0x19, 0x69, 0x6a, 0xce, 0x08, 0xa3, + 0xec, 0x92, 0x77, 0xb9, 0xc7, 0x94, 0x95, 0xb0, + 0xbe, 0xc4, 0x67, 0x97, 0x62, 0xf4, 0x46, 0x39, + 0x76, 0xaa, 0xa5, 0x8d, 0x00, 0x27, 0x72, 0xfb, + 0x73, 0xa1, 0x88, 0x71, 0x3d, 0xc1, 0x83, 0xaa, + 0xe2, 0x07, 0x6d, 0x69, 0x4f, 0xa8, 0x70, 0xf6, + 0xf5, 0x0f, 0xb9, 0x61, 0x23, 0x91, 0x9d, 0xd1, + 0xf7, 0x90, 0x6e, 0x06, 0x38, 0xf2, 0x2f, 0x44, + 0x67, 0x94, 0xd1, 0x56, 0x6f, 0xfd, 0xa1, 0xe1, + 0xed, 0x47, 0x72, 0x0b, 0x8f, 0x55, 0xe4, 0x30, + 0x7b, 0xea, 0xbd, 0x7f, 0xed, 0x6e, 0x16, 0x82, + 0x2d, 0xb8, 0x01, 0xfd, 0x50, 0x5e, 0x7f, 0xd1, + 0x07, 0x48, 0x11, 0xb7, 0x97, 0x6a, 0xf9, 0x96, + 0x7b, 0x68, 0x07, 0x14, 0x8f, 0x64, 0x60, 0x72, + 0xb8, 0x80, 0xb8, 0xbd, 0xef, 0xb5, 0x0c, 0xb4, + 0xf5, 0x11, 0x99, 0x0e, 0xfa, 0x55, 0xc1, 0x83, + 0xb0, 0xda, 0xa8, 0x1b, 0x9d, 0x57, 0x98, 0xb8, + 0x35, 0x32, 0x06, 0x75, 0x29, 0x57, 0x1e, 0xcb, + 0xaa, 0x88, 0x77, 0x6b, 0x9d, 0x4f, 0x85, 0xb7, + 0xd8, 0xeb, 0x80, 0xf3, 0xd4, 0x60, 0x2e, 0xed, + 0x28, 0x5b, 0xef, 0x69, 0x38, 0x8b, 0x6d, 0x8d, + 0x03, 0x9d, 0xef, 0x6b, 0x7d, 0xe1, 0x52, 0xb8, + 0x9c, 0xd9, 0x0b, 0xe9, 0xf6, 0x4d, 0x71, 0x23, + 0xc1, 0xe4, 0xe2, 0x20, 0x76, 0x02, 0xd7, 0xa0, + 0x53, 0xd0, 0x74, 0xba, 0x95, 0xef, 0xb5, 0xc2, + 0xe3, 0xc1, 0x6a, 0xd1, 0xc4, 0x4d, 0x07, 0x46, + 0xc2, 0xed, 0xa7, 0xae, 0xfe, 0x15, 0x20, 0x72, + 0xd7, 0xb3, 0x44, 0xc7, 0x5c, 0x4b, 0x2b, 0xa4, + 0x20, 0x17, 0xb4, 0xbf, 0x85, 0xb5, 0x3c, 0x94, + 0x60, 0x1d, 0xb5, 0xcd, 0xb4, 0xae, 0x3c, 0x5d, + 0x64, 0x84, 0xf2, 0x0a, 0xc5, 0x6b, 0xfc, 0x47, + 0x57, 0x71, 0x77, 0xc5, 0x0a, 0xf4, 0x5f, 0x5d, + 0xab, 0x4b, 0x74, 0xc6, 0x49, 0x99, 0x85, 0x2e, + 0x55, 0x39, 0x72, 0x44, 0xb3, 0x71, 0x44, 0x5e, + 0x1f, 0xd1, 0xb5, 0xae, 0x1b, 0x9e, 0xda, 0x87, + 0x8e, 0x67, 0xd6, 0xaa, 0xcb, 0x61, 0x0c, 0x1a, + 0x9f, 0x4f, 0xcb, 0x65, 0x94, 0x1d, 0x2b, 0xa3, + 0x7b, 0xa2, 0x32, 0xee, 0x70, 0x73, 0x7b, 0xc9, + 0x1a, 0x79, 0x1c, 0xaa, 0x45, 0xea, 0xc5, 0xa2, + 0x2e, 0x29, 0x79, 0x7b, 0x6c, 0x4f, 0xd6, 0x35, + 0x93, 0x34, 0x73, 0x77, 0x25, 0x4d, 0xca, 0x62, + 0x23, 0x2c, 0x46, 0x49, 0x8e, 0xa4, 0x5b, 0x99, + 0xcb, 0x92, 0x65, 0x53, 0xb4, 0x9a, 0xfb, 0x46, + 0xe6, 0x9f, 0x8b, 0xc9, 0x12, 0xfb, 0x09, 0x5d, + 0xc5, 0xc6, 0x06, 0xca, 0x1d, 0x8d, 0x9e, 0x3e, + 0xd3, 0x82, 0xbf, 0x63, 0x6e, 0x3c, 0xda, 0x91, + 0xc8, 0xe6, 0xba, 0x39, 0x7b, 0xa6, 0x39, 0xa6, + 0xad, 0x20, 0xed, 0x04, 0x1e, 0x62, 0x9a, 0xbb, + 0x4e, 0x43, 0x9e, 0xc6, 0x98, 0x68, 0x1b, 0x77, + 0x10, 0x2e, 0xb5, 0x94, 0xf2, 0x3f, 0xf4, 0x4f, + 0xea, 0xbb, 0x71, 0x54, 0xad, 0x21, 0x94, 0x9f, + 0x89, 0xf8, 0x5b, 0xde, 0x26, 0x4d, 0x6d, 0xc4, + 0x22, 0x6b, 0xb7, 0x80, 0xd3, 0x47, 0x47, 0xb7, + 0x95, 0xaa, 0x93, 0xff, 0x00, 0xa8, 0xcb, 0xdd, + 0x8c, 0xed, 0x23, 0xa2, 0x72, 0x3a, 0x58, 0x20, + 0x8a, 0x83, 0x50, 0x77, 0x10, 0xbd, 0x5a, 0x18, + 0x99, 0x83, 0xe1, 0x74, 0x7b, 0x7b, 0x82, 0xb7, + 0xd5, 0x12, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x08, 0xed, 0x47, 0xea, 0x3b, 0xcf, 0x27, + 0xf3, 0x9a, 0xb5, 0xf4, 0x37, 0xa9, 0x9d, 0xe5, + 0xdf, 0xda, 0x6a, 0xd8, 0xd4, 0x7e, 0xa3, 0xbc, + 0xf2, 0x7f, 0x39, 0xab, 0x5f, 0x43, 0x7a, 0x99, + 0xde, 0x5d, 0xfd, 0xa6, 0xab, 0xc7, 0x0e, 0x74, + 0xb1, 0x9e, 0x62, 0x9d, 0xc9, 0xd6, 0xb1, 0x22, + 0x22, 0xa3, 0x61, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x6a, 0xe4, 0x3d, 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, + 0x2b, 0x69, 0x6a, 0xe4, 0x3d, 0x0a, 0xe7, 0xc9, + 0x3f, 0xc5, 0x2a, 0x69, 0xcf, 0x0a, 0xdc, 0xd8, + 0xab, 0x44, 0xea, 0x41, 0x69, 0x3f, 0x47, 0xb8, + 0xf0, 0xdb, 0xe2, 0xa9, 0xe5, 0x03, 0xa4, 0xfd, + 0x1e, 0xe3, 0xc3, 0x6f, 0x8a, 0xa7, 0x96, 0x98, + 0x8e, 0x2d, 0x5a, 0x7e, 0xe6, 0x18, 0x1e, 0x5a, + 0xde, 0x89, 0xd6, 0x22, 0x22, 0xc9, 0xd2, 0x22, + 0x22, 0x02, 0xf1, 0xce, 0x6b, 0x41, 0x73, 0x8d, + 0x00, 0xde, 0x57, 0xab, 0x05, 0xf1, 0x68, 0xb6, + 0x78, 0x76, 0xe3, 0xb2, 0x9d, 0x54, 0x11, 0x79, + 0x2b, 0xc6, 0xcc, 0xd7, 0xbb, 0x68, 0x8a, 0x21, + 0x5e, 0xb6, 0xcd, 0xee, 0xf7, 0x14, 0x4e, 0x8f, + 0xb6, 0x97, 0x2d, 0x7f, 0x2e, 0xa6, 0xbb, 0x6d, + 0x18, 0xde, 0x2b, 0x7c, 0x6c, 0x67, 0xe2, 0xb0, + 0x6c, 0x7c, 0x9c, 0xe7, 0x77, 0x65, 0x79, 0x92, + 0x7c, 0x93, 0xc5, 0x1e, 0x3e, 0x31, 0xff, 0x00, + 0xc8, 0xbe, 0x77, 0x40, 0xd1, 0xd4, 0x07, 0xbe, + 0x75, 0x3a, 0x81, 0xaa, 0xdd, 0x65, 0x63, 0x1d, + 0x9d, 0xa4, 0x36, 0x96, 0xed, 0xe1, 0x86, 0x06, + 0x08, 0xd8, 0x3a, 0xcd, 0x0a, 0x72, 0xe4, 0x89, + 0xed, 0x47, 0x75, 0x91, 0x17, 0xd8, 0x8c, 0xf2, + 0x9a, 0x2f, 0x44, 0x6d, 0xe7, 0x50, 0x96, 0x34, + 0x00, 0x9d, 0xc1, 0x7d, 0x49, 0x3d, 0xac, 0x22, + 0xb2, 0xbd, 0x91, 0x8e, 0xab, 0x88, 0x0a, 0x36, + 0xe7, 0x55, 0x61, 0x2d, 0xea, 0x0d, 0xc0, 0x7b, + 0x87, 0x24, 0x63, 0x8b, 0xb4, 0x82, 0x48, 0x46, + 0xe3, 0xd6, 0x5f, 0x5d, 0x17, 0x54, 0xaa, 0x85, + 0xff, 0x00, 0xb4, 0xbc, 0x55, 0xb5, 0x43, 0x19, + 0xb4, 0x72, 0xc8, 0xe0, 0xdf, 0x7b, 0x7a, 0xae, + 0x5f, 0xfb, 0x5b, 0x90, 0xd4, 0x40, 0x40, 0xea, + 0x74, 0x6c, 0x27, 0xf7, 0x9f, 0x44, 0x1d, 0x4f, + 0x81, 0x83, 0x69, 0xda, 0xb0, 0x4f, 0x91, 0xc7, + 0xdb, 0x0a, 0xcd, 0x3c, 0x71, 0xd3, 0xaa, 0xe0, + 0xb8, 0x8d, 0xf7, 0xb4, 0x5c, 0xc5, 0xd5, 0x47, + 0x13, 0xc8, 0x3f, 0xa4, 0xf2, 0x07, 0x61, 0x94, + 0x50, 0xb7, 0x1a, 0x83, 0x2b, 0x39, 0x24, 0xcd, + 0xc1, 0x5f, 0xd1, 0x1b, 0x7b, 0x26, 0xa5, 0x4e, + 0x44, 0x65, 0x77, 0x3b, 0xad, 0x69, 0x83, 0x80, + 0x1a, 0x48, 0xe9, 0x48, 0xfd, 0x01, 0xb3, 0xb2, + 0x54, 0x05, 0xff, 0x00, 0xb5, 0x4c, 0x7c, 0x35, + 0x10, 0xb5, 0x80, 0xfe, 0xb3, 0xf8, 0x8f, 0xec, + 0xb2, 0xab, 0x8e, 0xcb, 0x71, 0x71, 0x31, 0xac, + 0xd2, 0xbe, 0x43, 0xfa, 0xce, 0x25, 0x63, 0x50, + 0x97, 0x44, 0xbf, 0xf6, 0xb1, 0x7b, 0x25, 0x44, + 0x0e, 0x70, 0x1f, 0xfb, 0x6d, 0x0d, 0x1f, 0xb4, + 0xed, 0xaa, 0x22, 0xdf, 0x55, 0x66, 0xb3, 0x59, + 0x08, 0xed, 0x81, 0x3c, 0x2f, 0x35, 0x79, 0x7b, + 0x9c, 0xea, 0x34, 0x6f, 0xd9, 0xb0, 0x2a, 0x92, + 0xb7, 0x68, 0xeb, 0x11, 0x1c, 0x0f, 0xbe, 0x78, + 0xee, 0xa5, 0x3c, 0x11, 0xf8, 0x23, 0x7a, 0xb5, + 0x11, 0x96, 0xa8, 0x56, 0xa9, 0xc9, 0x0b, 0x67, + 0x4e, 0xe6, 0x8a, 0x32, 0x8c, 0x1f, 0xaa, 0x00, + 0x5f, 0x0e, 0x90, 0xb8, 0x16, 0xb8, 0x92, 0x1c, + 0x28, 0xe0, 0x76, 0xd4, 0x1e, 0xaa, 0xc2, 0x5e, + 0xbc, 0x2f, 0x5d, 0x1d, 0x0c, 0x7b, 0xeb, 0xde, + 0x94, 0xbb, 0x37, 0x38, 0x58, 0x78, 0xdc, 0x5c, + 0xf8, 0x78, 0xa2, 0x71, 0x3b, 0x4f, 0x70, 0x68, + 0x3d, 0xe5, 0x27, 0x20, 0xee, 0xb9, 0xd5, 0x63, + 0x42, 0xdc, 0x7a, 0x6d, 0xa9, 0x3b, 0x9e, 0xd9, + 0x5a, 0x3a, 0xcf, 0x14, 0x3e, 0xfa, 0xb4, 0x49, + 0xc8, 0x57, 0x35, 0x51, 0x92, 0x66, 0x1b, 0xc6, + 0x68, 0x53, 0xf5, 0xc6, 0x35, 0xd0, 0x98, 0x35, + 0x25, 0xa3, 0x6b, 0x71, 0x63, 0x46, 0xdd, 0x34, + 0x7c, 0x78, 0x4e, 0xca, 0xfc, 0x8a, 0xf6, 0x16, + 0x5c, 0x2e, 0x69, 0x97, 0x56, 0xcc, 0xba, 0xb4, + 0x25, 0xd1, 0x8a, 0x35, 0xd1, 0x9e, 0x43, 0xca, + 0xde, 0x75, 0x66, 0x96, 0x38, 0xe5, 0x89, 0xf1, + 0x4a, 0xd0, 0xf8, 0xe4, 0x69, 0x6b, 0xda, 0x77, + 0x16, 0xb8, 0x50, 0x83, 0xee, 0x2e, 0x77, 0x80, + 0xb4, 0x9b, 0x0d, 0x9d, 0xc9, 0x61, 0x1e, 0x4f, + 0x03, 0x07, 0x49, 0x6e, 0x4f, 0xc6, 0x69, 0x3d, + 0xcb, 0x87, 0xc9, 0x2a, 0x63, 0xa6, 0x9e, 0xd8, + 0x3b, 0xae, 0x87, 0x14, 0xac, 0x9a, 0x31, 0x23, + 0x3b, 0xd7, 0x0a, 0xaf, 0xb5, 0xa7, 0x8b, 0x91, + 0x8e, 0xb7, 0xa3, 0x45, 0x1c, 0x36, 0xbc, 0x75, + 0xca, 0xdc, 0x55, 0x48, 0x88, 0x88, 0x08, 0x88, + 0x80, 0xa3, 0xf5, 0x07, 0xaa, 0x67, 0xf9, 0x3e, + 0x30, 0x52, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, 0x7f, + 0x93, 0xe3, 0x05, 0x7b, 0x7b, 0x74, 0xe9, 0x86, + 0x58, 0x9e, 0x05, 0xdd, 0xca, 0xf5, 0x3d, 0xd2, + 0xbe, 0xa8, 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, + 0xe5, 0x13, 0xa5, 0x7d, 0x50, 0xdf, 0x0d, 0xfd, + 0xb5, 0x2c, 0xfd, 0xca, 0x6e, 0xf1, 0x6b, 0xde, + 0x94, 0x61, 0xb8, 0x16, 0xf7, 0x61, 0xce, 0x6e, + 0xbf, 0xc9, 0xe3, 0xca, 0xb3, 0xec, 0x42, 0xbf, + 0xaa, 0x05, 0xd7, 0xf9, 0x3c, 0x79, 0x56, 0x7d, + 0x88, 0x57, 0xf5, 0xcb, 0x67, 0x3d, 0x7b, 0xf2, + 0xf6, 0x3e, 0x29, 0x9b, 0x07, 0xfc, 0x6b, 0x62, + 0x22, 0x2d, 0x9e, 0x68, 0x88, 0x88, 0x08, 0x88, + 0x83, 0x4a, 0xfe, 0xf5, 0xac, 0x1d, 0x0c, 0x67, + 0xbb, 0x76, 0xf2, 0x39, 0x02, 0x83, 0xb4, 0xb7, + 0x7e, 0x4f, 0x2f, 0xe6, 0x2e, 0x6f, 0xff, 0x00, + 0x06, 0xcc, 0xb6, 0xe2, 0xee, 0xa3, 0xbf, 0x7d, + 0x6b, 0x0c, 0x5e, 0xf7, 0x1b, 0x96, 0xc5, 0xfc, + 0xcc, 0x8e, 0x79, 0x5e, 0x7e, 0xae, 0x85, 0xce, + 0x3d, 0x70, 0x6a, 0xa4, 0xb1, 0xf6, 0x4f, 0xb6, + 0xc5, 0x48, 0x40, 0xe1, 0xb9, 0xb9, 0x6b, 0xa5, + 0x90, 0xf2, 0xf1, 0xb9, 0xb4, 0x02, 0xbf, 0xaa, + 0x00, 0x0a, 0x60, 0x69, 0x65, 0xb5, 0xb6, 0x27, + 0x1a, 0xf7, 0x46, 0x4f, 0x4a, 0xe6, 0x1e, 0x12, + 0xee, 0x20, 0xd6, 0x54, 0x72, 0x54, 0xef, 0xf7, + 0x02, 0xac, 0x5f, 0xfb, 0x5b, 0x81, 0xb5, 0x6d, + 0xbf, 0x00, 0x3f, 0xaa, 0xd7, 0x48, 0x7b, 0x27, + 0x84, 0x2e, 0x63, 0x95, 0xb8, 0xb8, 0x9e, 0xfa, + 0x53, 0x39, 0x25, 0xd1, 0xb8, 0xb0, 0x34, 0xf2, + 0x70, 0x9a, 0x2d, 0x45, 0x02, 0xed, 0x7f, 0xed, + 0x43, 0x2b, 0x70, 0x08, 0x8c, 0xc9, 0xee, 0xbb, + 0x80, 0x7e, 0xcc, 0x60, 0x28, 0x0b, 0xad, 0x53, + 0x98, 0xb8, 0x35, 0x32, 0x06, 0x75, 0xda, 0x2a, + 0x7f, 0x69, 0xd5, 0x2a, 0x21, 0x14, 0xe5, 0x46, + 0x46, 0x69, 0xef, 0x2e, 0xee, 0x0d, 0x66, 0x9d, + 0xf2, 0x73, 0xb8, 0xd1, 0x61, 0xa0, 0x52, 0x38, + 0xcd, 0x3b, 0x9b, 0xcb, 0x46, 0xf9, 0x71, 0xd6, + 0x72, 0x5c, 0x46, 0xcd, 0x8e, 0x7b, 0x46, 0xca, + 0xf5, 0x2a, 0x56, 0xf6, 0x13, 0x49, 0xcb, 0x90, + 0x6d, 0xe4, 0xf9, 0x09, 0xc6, 0x32, 0xcf, 0x1c, + 0x43, 0x6e, 0xa6, 0x95, 0xa6, 0xa1, 0xc7, 0xe2, + 0x86, 0xf5, 0x54, 0x25, 0x00, 0xbd, 0x00, 0x93, + 0x40, 0x09, 0x27, 0x70, 0x1b, 0xd5, 0xeb, 0x1b, + 0xec, 0xfe, 0xde, 0x2c, 0xbf, 0x1d, 0xe4, 0xa3, + 0x21, 0x88, 0x16, 0xaf, 0xbc, 0x86, 0x58, 0x4f, + 0x0f, 0x4c, 0xd6, 0x8e, 0xf7, 0xad, 0xd7, 0x58, + 0xa7, 0x8b, 0x17, 0x71, 0x80, 0x3a, 0xa3, 0x4d, + 0x5b, 0x9c, 0x65, 0xee, 0x36, 0x6e, 0x8e, 0xe6, + 0x1a, 0xf4, 0x8d, 0xe1, 0x70, 0xd8, 0xf1, 0xc4, + 0x82, 0xb1, 0x6d, 0x81, 0xcc, 0xdd, 0x57, 0xa0, + 0xb2, 0x99, 0xf4, 0x61, 0x90, 0xf7, 0x24, 0x77, + 0x2d, 0xde, 0x45, 0x56, 0x69, 0x34, 0xde, 0x46, + 0x2c, 0x03, 0x33, 0xef, 0xe1, 0x16, 0x92, 0x49, + 0xd1, 0x06, 0xd7, 0xbb, 0x04, 0x1a, 0x54, 0x85, + 0x6d, 0x93, 0x58, 0xc1, 0x0e, 0x7a, 0xcb, 0x28, + 0xeb, 0xd2, 0x63, 0xba, 0xc6, 0xf4, 0x57, 0x0d, + 0x6e, 0xde, 0x8a, 0x6e, 0x1a, 0x6d, 0x6f, 0x85, + 0xb5, 0x45, 0x66, 0x35, 0xad, 0xad, 0xf6, 0x3a, + 0x6c, 0x7c, 0x36, 0xa6, 0x38, 0x6e, 0x21, 0x01, + 0xcc, 0x04, 0x06, 0xb6, 0xe3, 0x8c, 0xbd, 0xd2, + 0xb4, 0x75, 0x0a, 0x0a, 0x96, 0xca, 0x0e, 0xaf, + 0x2a, 0xb1, 0xe9, 0x0b, 0x3f, 0xe2, 0x4b, 0x7c, + 0xf1, 0xde, 0xf7, 0x11, 0xd7, 0xaa, 0x7b, 0xe2, + 0xab, 0xad, 0x69, 0x73, 0x83, 0x5b, 0xb5, 0xce, + 0x34, 0x03, 0xae, 0x55, 0xf3, 0x1d, 0x6c, 0x2c, + 0xec, 0xa2, 0xb7, 0x1b, 0xd8, 0xde, 0xeb, 0xc2, + 0x3b, 0x4a, 0xbd, 0xb8, 0xe9, 0xcb, 0x3d, 0xc5, + 0x2b, 0x9e, 0x8c, 0x91, 0xdd, 0x6f, 0x71, 0x2f, + 0x38, 0x96, 0x2e, 0x35, 0xe7, 0x1a, 0xd7, 0x2b, + 0x3c, 0x8c, 0x8e, 0x3c, 0x6d, 0x2c, 0x3b, 0x9c, + 0x08, 0x5d, 0x1f, 0x4e, 0xdd, 0x79, 0xde, 0x12, + 0xce, 0x67, 0x6d, 0x77, 0x44, 0x18, 0xff, 0x00, + 0x09, 0x9d, 0xc1, 0xed, 0x2e, 0x67, 0xc6, 0xae, + 0xda, 0x06, 0xeb, 0xa4, 0xc6, 0xcf, 0x6a, 0x77, + 0xdb, 0xcc, 0x48, 0x1f, 0xab, 0x20, 0xe2, 0x1e, + 0xfd, 0x55, 0x2e, 0x66, 0x85, 0xed, 0xf7, 0x52, + 0xd9, 0xac, 0x54, 0x19, 0x7c, 0x6c, 0xf8, 0xf9, + 0xf6, 0x36, 0x51, 0xdc, 0x3b, 0x95, 0xaf, 0x1b, + 0x58, 0xf1, 0xcc, 0x55, 0x33, 0x4d, 0xe5, 0xa4, + 0x8e, 0x53, 0x86, 0xbb, 0xac, 0x59, 0x1b, 0x52, + 0x61, 0x23, 0xf4, 0x83, 0x3a, 0x85, 0x74, 0x17, + 0x0d, 0xaa, 0x81, 0xaf, 0x71, 0xee, 0xc7, 0xe6, + 0x2c, 0x75, 0x05, 0xb0, 0xe1, 0x12, 0xbd, 0xb1, + 0x5c, 0x91, 0xfa, 0x6d, 0xef, 0x5d, 0xf2, 0x9b, + 0xb3, 0xdc, 0x54, 0xa7, 0xa7, 0xa3, 0xc0, 0xbc, + 0xf5, 0xae, 0x58, 0xfb, 0xde, 0x9d, 0x9d, 0x1b, + 0xfe, 0xb1, 0xbc, 0xbc, 0x84, 0x75, 0x56, 0xe2, + 0x86, 0xc6, 0xcb, 0x18, 0xba, 0xee, 0xb7, 0x38, + 0x7f, 0x0c, 0x8d, 0xdb, 0x7f, 0xfa, 0x29, 0x95, + 0x54, 0x88, 0x88, 0x80, 0x88, 0x88, 0x08, 0x37, + 0x84, 0x41, 0xbc, 0x20, 0xa0, 0x68, 0xdf, 0xef, + 0x8b, 0xee, 0x6b, 0x8f, 0xb4, 0x0b, 0xa4, 0x2e, + 0x6f, 0xa3, 0x7f, 0xbe, 0x2f, 0xb9, 0xae, 0x3e, + 0xd0, 0x2e, 0x90, 0xb1, 0xc3, 0xec, 0x79, 0xd2, + 0xf4, 0xfe, 0x33, 0xcc, 0xd3, 0xea, 0xad, 0xea, + 0x45, 0xe6, 0xfe, 0xa6, 0x3f, 0x0f, 0xe0, 0x2b, + 0x35, 0xa7, 0xa3, 0x45, 0xe0, 0x8e, 0xd2, 0xc3, + 0x9b, 0xfa, 0x98, 0xfc, 0x3f, 0x80, 0xac, 0xd6, + 0x9e, 0x8d, 0x17, 0x82, 0x3b, 0x4b, 0x8a, 0xcf, + 0xf6, 0x78, 0x8f, 0x55, 0x43, 0x8e, 0xae, 0x5e, + 0xde, 0xfc, 0xb2, 0xa2, 0x22, 0xf4, 0xd8, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x31, 0xcf, 0x3c, 0x70, + 0x46, 0x5e, 0xf3, 0xcc, 0x3a, 0xaa, 0xb7, 0x96, + 0xbd, 0xb8, 0x60, 0x6c, 0xb0, 0x33, 0xa5, 0xba, + 0x99, 0xc2, 0x1b, 0x78, 0xce, 0xee, 0x91, 0xe7, + 0x85, 0xa0, 0xf5, 0x86, 0xf2, 0xa5, 0xb3, 0x2e, + 0xa3, 0x19, 0x41, 0x57, 0xb7, 0x68, 0x14, 0xaa, + 0xc3, 0x86, 0xb6, 0x6d, 0xcd, 0xe9, 0xba, 0x70, + 0xab, 0x2d, 0x49, 0x11, 0x9f, 0xfd, 0xc7, 0x8e, + 0xe8, 0xfb, 0x8d, 0x34, 0xf7, 0x50, 0x6f, 0xe2, + 0xb1, 0xa3, 0x1d, 0x65, 0x1d, 0xab, 0x4f, 0x1b, + 0x85, 0x5f, 0x34, 0xa7, 0x7b, 0xe4, 0x76, 0xd7, + 0xbc, 0xf3, 0x95, 0xb9, 0xd1, 0xf5, 0x48, 0x55, + 0x4d, 0x43, 0xed, 0x0b, 0x1f, 0x89, 0x9d, 0xd6, + 0xf1, 0xf0, 0xbd, 0xcc, 0x25, 0xae, 0x7b, 0xcd, + 0x1b, 0xc4, 0x37, 0x86, 0x81, 0x52, 0x68, 0xaa, + 0x37, 0xfe, 0xd6, 0x6f, 0x1e, 0x48, 0xb7, 0x25, + 0xa3, 0xa9, 0x1b, 0x38, 0x7f, 0x79, 0xff, 0x00, + 0xe8, 0x88, 0x75, 0x92, 0xd6, 0x34, 0x55, 0xc7, + 0xb3, 0xb1, 0x6a, 0xdc, 0x65, 0xf1, 0x36, 0xa3, + 0xf8, 0xd7, 0x31, 0xb4, 0x8e, 0x4a, 0xd4, 0xfb, + 0xcb, 0x87, 0x5e, 0xeb, 0xbc, 0xc5, 0xd1, 0x35, + 0x71, 0xa1, 0xfd, 0x37, 0xb9, 0xde, 0xf3, 0x78, + 0x42, 0x89, 0x9b, 0x35, 0x94, 0x9a, 0xa5, 0xd3, + 0x96, 0x03, 0xbc, 0x30, 0x06, 0xfb, 0xe3, 0x6a, + 0x91, 0xdc, 0x6f, 0x35, 0xde, 0x12, 0xd8, 0x12, + 0xd2, 0xe9, 0x3a, 0xe0, 0x06, 0xb7, 0xb2, 0xea, + 0x2a, 0xf5, 0xff, 0x00, 0xb5, 0x8b, 0x58, 0xea, + 0x20, 0x6c, 0x60, 0xf2, 0x6d, 0x32, 0x1f, 0xdd, + 0xd8, 0xb9, 0x1b, 0xe4, 0x7c, 0x86, 0xb2, 0x38, + 0xbc, 0xf5, 0x5c, 0x49, 0x3e, 0xfa, 0xf9, 0x50, + 0x95, 0xf2, 0xff, 0x00, 0xda, 0xa6, 0x4e, 0x7a, + 0x88, 0x9d, 0x20, 0x1c, 0x9c, 0x34, 0x8c, 0x7c, + 0xe2, 0xab, 0xf7, 0x9a, 0xc3, 0x31, 0x74, 0x49, + 0x2e, 0x02, 0xbc, 0xae, 0x25, 0xe7, 0xf7, 0x8d, + 0x3d, 0xe5, 0x19, 0x0e, 0x36, 0xf6, 0x7b, 0x19, + 0xf2, 0x11, 0x47, 0xc5, 0x6b, 0x6a, 0x5a, 0xd9, + 0x9e, 0x08, 0xee, 0x4b, 0xbb, 0xdd, 0x9b, 0xd7, + 0xc1, 0xb1, 0xbe, 0x16, 0xec, 0xb9, 0xf3, 0x79, + 0x3a, 0x09, 0x0d, 0x19, 0x2f, 0x09, 0xe1, 0x24, + 0xf2, 0x07, 0x6e, 0x53, 0x95, 0x19, 0x19, 0x26, + 0xc9, 0xe4, 0x26, 0xfa, 0xcb, 0x87, 0x90, 0x79, + 0x01, 0xe1, 0x1f, 0xbb, 0x45, 0xab, 0xbf, 0x69, + 0xdb, 0xd7, 0xde, 0xa7, 0x4e, 0x9d, 0xc9, 0xe1, + 0xba, 0x2c, 0x95, 0xfc, 0x30, 0xbe, 0x18, 0x1c, + 0xc7, 0x5c, 0x5a, 0xb9, 0xed, 0x74, 0x81, 0xaf, + 0x3b, 0x9f, 0x1d, 0x6b, 0xb4, 0x2f, 0x72, 0x7a, + 0x97, 0x1f, 0x73, 0x8e, 0x92, 0xc6, 0xdb, 0x1f, + 0x1c, 0x6e, 0x92, 0x9c, 0x57, 0x1b, 0x1a, 0xe3, + 0xc0, 0x4f, 0x01, 0xe1, 0x1d, 0x62, 0xa1, 0x28, + 0x1a, 0xa6, 0xf5, 0x8a, 0xa4, 0xad, 0x8b, 0x5b, + 0x67, 0xdc, 0x4d, 0x1d, 0xbb, 0x3b, 0xe9, 0x1c, + 0x1b, 0xd9, 0x41, 0x6b, 0xd1, 0xd6, 0x22, 0x2b, + 0x67, 0xdf, 0x3c, 0x77, 0x73, 0x1e, 0x18, 0xfc, + 0x11, 0xbd, 0x58, 0x8b, 0xd6, 0xb5, 0xbc, 0x6c, + 0xb7, 0x82, 0x38, 0x19, 0xb1, 0xb1, 0x34, 0x34, + 0x7b, 0x8b, 0xec, 0xb9, 0x74, 0xd3, 0x19, 0x23, + 0x23, 0x09, 0x9c, 0xb3, 0x95, 0x97, 0x8d, 0x58, + 0xb4, 0x45, 0xc0, 0x6d, 0xed, 0xe5, 0xbd, 0x7e, + 0xb1, 0xad, 0x95, 0xa3, 0xae, 0x3b, 0x92, 0xaa, + 0xe5, 0xca, 0x4b, 0x4c, 0xdc, 0xf4, 0x19, 0xfb, + 0x47, 0x13, 0x46, 0xcd, 0xc5, 0x0b, 0xbe, 0x50, + 0xa8, 0x54, 0xb9, 0xd3, 0x12, 0xb5, 0x19, 0xdd, + 0x06, 0xea, 0x18, 0xa7, 0x89, 0xf0, 0xcc, 0xd1, + 0x24, 0x52, 0xb4, 0xb2, 0x46, 0x1d, 0xc5, 0xa4, + 0x50, 0x85, 0xcb, 0x21, 0x0e, 0xd2, 0x5a, 0x8e, + 0x7c, 0x65, 0xc5, 0x4d, 0x9c, 0xce, 0x6b, 0xa1, + 0x90, 0xf2, 0xb0, 0x9f, 0xe1, 0xbc, 0xf3, 0x6e, + 0x2b, 0xab, 0xbc, 0x77, 0x2a, 0x9d, 0xed, 0x1f, + 0x08, 0x2f, 0xb0, 0xe3, 0x21, 0x13, 0x6b, 0x3e, + 0x3e, 0xae, 0x75, 0x37, 0x98, 0x5d, 0xdf, 0x8f, + 0x93, 0xdf, 0x76, 0x56, 0x74, 0xcf, 0x72, 0x73, + 0x4b, 0x49, 0xeb, 0xea, 0x4b, 0x59, 0xdf, 0x49, + 0x0c, 0x8d, 0x64, 0xd5, 0x2c, 0x7e, 0xc2, 0x4e, + 0xf0, 0x79, 0x0a, 0x97, 0x06, 0xa2, 0xa3, 0x71, + 0x54, 0x8d, 0x35, 0x93, 0x7d, 0xfe, 0x22, 0xde, + 0x49, 0x8f, 0x14, 0x90, 0xff, 0x00, 0x06, 0x67, + 0x72, 0x90, 0xca, 0x06, 0x9f, 0xd9, 0x57, 0x48, + 0x5c, 0xd7, 0xc4, 0xd7, 0x33, 0xbd, 0xa6, 0xc5, + 0x59, 0x8c, 0x93, 0x92, 0x53, 0x0f, 0xb4, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0x19, 0x96, + 0xfa, 0xe8, 0x79, 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, + 0x1c, 0xca, 0x13, 0x2d, 0xf5, 0xd0, 0xf3, 0x1e, + 0xda, 0x9b, 0x6f, 0x7a, 0x39, 0x97, 0x9d, 0x83, + 0xe7, 0xb1, 0xda, 0x6d, 0x7e, 0x99, 0x74, 0x5d, + 0xe0, 0xd9, 0xd1, 0x56, 0xb6, 0x1b, 0xcf, 0x45, + 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, + 0x5e, 0x7f, 0x2b, 0xe7, 0xab, 0x6d, 0xe7, 0xa2, + 0xcd, 0xe4, 0xdf, 0xe2, 0x95, 0x52, 0xd0, 0x9b, + 0xaf, 0x3f, 0x95, 0xf3, 0xd7, 0xab, 0x4e, 0xc5, + 0x5d, 0xe7, 0x0d, 0x7c, 0x6b, 0x5e, 0x72, 0xd6, + 0x88, 0x8b, 0x36, 0xc2, 0x22, 0x20, 0x22, 0x22, + 0x0f, 0x09, 0x0d, 0x04, 0x9d, 0x80, 0x6f, 0x2a, + 0x23, 0x27, 0x79, 0x1c, 0xe1, 0xc1, 0x95, 0xe8, + 0xe3, 0x15, 0xdb, 0xb8, 0x9e, 0x53, 0xee, 0x29, + 0x2b, 0xb2, 0xd1, 0x6e, 0xfe, 0x2d, 0xc4, 0x2a, + 0xcd, 0xc8, 0x92, 0xe0, 0x47, 0x63, 0x18, 0xa4, + 0xf7, 0x4e, 0xe8, 0x1a, 0x77, 0x51, 0xa7, 0x6b, + 0x9f, 0xee, 0x35, 0x07, 0xce, 0x9a, 0x31, 0x5c, + 0x4d, 0x2e, 0xaa, 0xc9, 0xb8, 0x45, 0x6e, 0xce, + 0x2b, 0x7c, 0x63, 0x5d, 0xc9, 0x18, 0x34, 0x7c, + 0x80, 0x72, 0xb9, 0xe7, 0x62, 0x92, 0xbc, 0xd7, + 0x78, 0x5b, 0x66, 0x92, 0x0b, 0x9e, 0x47, 0x56, + 0x8c, 0x1f, 0xbc, 0x55, 0x3f, 0xda, 0x95, 0xe5, + 0xce, 0x21, 0xb6, 0x18, 0xeb, 0x21, 0xd0, 0xda, + 0x32, 0x1e, 0x08, 0x38, 0x79, 0x38, 0x7b, 0x92, + 0x79, 0xe8, 0xb9, 0x8b, 0xde, 0xf9, 0x0f, 0x14, + 0x8e, 0x2f, 0x27, 0x95, 0xc4, 0x9e, 0xda, 0x99, + 0x9c, 0xb2, 0x43, 0xaf, 0x5f, 0xfb, 0x58, 0xb4, + 0x8e, 0xa2, 0x0e, 0x8c, 0x73, 0x56, 0x43, 0xef, + 0x50, 0x2a, 0xe5, 0xf7, 0xb5, 0x5c, 0x8c, 0xc4, + 0xf4, 0x46, 0x4a, 0x6d, 0x14, 0x14, 0x8c, 0x7b, + 0xdb, 0x55, 0x09, 0x14, 0x23, 0x22, 0x7a, 0xef, + 0x59, 0xe6, 0x6e, 0x4d, 0x78, 0xc3, 0x79, 0xc9, + 0x79, 0xec, 0x95, 0x17, 0x36, 0x57, 0x23, 0x3f, + 0xd6, 0xdc, 0x3c, 0xf5, 0x81, 0xe1, 0x1e, 0xf2, + 0xd5, 0x59, 0x62, 0xb4, 0xba, 0x9a, 0x19, 0x67, + 0x8a, 0x27, 0xc9, 0x0c, 0x02, 0xb3, 0x48, 0xd1, + 0x56, 0xb4, 0x1f, 0xd2, 0x2a, 0x72, 0x99, 0x18, + 0x8f, 0x74, 0x6a, 0xe2, 0x49, 0xea, 0x9d, 0xa5, + 0x15, 0x87, 0x0b, 0xa3, 0x6e, 0xb2, 0x56, 0x03, + 0x25, 0x75, 0x75, 0x06, 0x32, 0xc5, 0xee, 0xe0, + 0x8a, 0x6b, 0x87, 0x53, 0xa4, 0x70, 0xfd, 0x10, + 0xb4, 0xb5, 0x06, 0x9f, 0xbc, 0xc0, 0xde, 0x36, + 0xda, 0xe5, 0xd1, 0xca, 0xc9, 0x5a, 0x1f, 0x04, + 0xf1, 0x38, 0x39, 0x8f, 0x61, 0xe5, 0x0a, 0x12, + 0x8b, 0x5f, 0x51, 0xc5, 0x2c, 0xae, 0xe1, 0x89, + 0x8e, 0x91, 0xdd, 0x46, 0x34, 0xb8, 0xfb, 0xca, + 0xed, 0xa2, 0xb0, 0x7a, 0x76, 0xe7, 0x05, 0x75, + 0x7d, 0x9c, 0x65, 0x7a, 0x7b, 0x86, 0xd9, 0xda, + 0xcd, 0xb7, 0xf8, 0x6e, 0x78, 0xd8, 0xed, 0xfd, + 0x55, 0x23, 0xa2, 0x31, 0xd9, 0x0c, 0x55, 0xf6, + 0x7f, 0x4f, 0x17, 0xb6, 0xde, 0xfd, 0xb1, 0x74, + 0x96, 0xd7, 0x44, 0x0a, 0x0a, 0x6c, 0x0f, 0x06, + 0x87, 0x61, 0x08, 0x28, 0x7f, 0x82, 0xe5, 0x84, + 0xd0, 0x43, 0x25, 0xac, 0x90, 0xbe, 0xe9, 0xc1, + 0x90, 0x99, 0x5a, 0x58, 0x1c, 0x4e, 0xed, 0xae, + 0xa2, 0xdc, 0xca, 0xe9, 0x2c, 0xc6, 0x1f, 0x21, + 0x6b, 0x61, 0x91, 0x60, 0x8a, 0x4b, 0xc2, 0xd1, + 0x1b, 0xda, 0x78, 0xdb, 0xdd, 0x1e, 0x1d, 0xe3, + 0x94, 0x2b, 0xb5, 0xcc, 0xd7, 0x93, 0xe8, 0xfb, + 0xb6, 0x33, 0x29, 0x16, 0x76, 0xf2, 0xc6, 0xe1, + 0x97, 0x13, 0x3c, 0x6c, 0x30, 0x31, 0xa6, 0xa7, + 0x80, 0x9d, 0xfb, 0x94, 0xec, 0xe6, 0xdf, 0x3d, + 0x95, 0xb3, 0xb0, 0xbf, 0x77, 0x08, 0x7c, 0x50, + 0x64, 0xb1, 0xd3, 0x80, 0x2a, 0x0b, 0x29, 0xd2, + 0xc7, 0x5e, 0xba, 0x0d, 0x5c, 0x66, 0x90, 0xb3, + 0xd3, 0x26, 0x3b, 0x77, 0x4b, 0xe7, 0x32, 0x4e, + 0x38, 0xf8, 0xdc, 0x03, 0x6a, 0xe1, 0xbf, 0x84, + 0x75, 0x86, 0xe0, 0xb0, 0xe6, 0x4c, 0x02, 0x48, + 0xdd, 0x18, 0x6b, 0x64, 0x70, 0x25, 0xc1, 0xbb, + 0x0f, 0x0f, 0xc4, 0x2e, 0x03, 0x73, 0x96, 0xe6, + 0x6e, 0xf2, 0x2b, 0xdc, 0x5c, 0x8e, 0x74, 0x83, + 0xa7, 0xb7, 0xbc, 0x78, 0x63, 0x49, 0xee, 0xb8, + 0x0e, 0xcd, 0x8a, 0xba, 0x5f, 0xff, 0x00, 0xf3, + 0x5b, 0x53, 0xd1, 0x0c, 0xaa, 0xe9, 0x96, 0x5e, + 0x25, 0x27, 0xa6, 0x2e, 0xba, 0x0d, 0x41, 0x6b, + 0xb6, 0x8d, 0x9c, 0x3e, 0x17, 0x7b, 0xa2, 0xa1, + 0x43, 0x17, 0xaf, 0xa8, 0x2e, 0x4d, 0xbd, 0xc4, + 0x37, 0x0d, 0x34, 0x30, 0x4a, 0xc7, 0xfb, 0x95, + 0xa1, 0xed, 0xa9, 0xab, 0x34, 0xa2, 0x9c, 0xf0, + 0xeb, 0x32, 0x0d, 0x9c, 0xcb, 0x9f, 0x6b, 0xdc, + 0x53, 0xf1, 0xd9, 0x0b, 0x7d, 0x4f, 0x64, 0xdd, + 0x9c, 0x6d, 0x65, 0xe3, 0x47, 0xe9, 0x6e, 0x6b, + 0xcf, 0x84, 0x3b, 0x92, 0xba, 0x08, 0x70, 0x7b, + 0x03, 0x86, 0xd0, 0xe1, 0x51, 0xee, 0xed, 0x5a, + 0x97, 0xf6, 0x30, 0x64, 0x2c, 0xa6, 0xb2, 0xb8, + 0x15, 0x86, 0xe1, 0x85, 0x8e, 0xeb, 0x57, 0x71, + 0x1c, 0xdb, 0xd6, 0x34, 0xce, 0x49, 0x6b, 0x31, + 0x96, 0x15, 0xec, 0x36, 0x5f, 0xce, 0xac, 0xe3, + 0xbc, 0xb5, 0xa9, 0x88, 0xf7, 0x25, 0xa7, 0xf4, + 0x87, 0x7c, 0xde, 0x75, 0x64, 0x82, 0x66, 0x4f, + 0x18, 0x91, 0x9b, 0x8a, 0xe6, 0x9a, 0x49, 0xd7, + 0x58, 0xdc, 0xa5, 0xfe, 0x0a, 0xe3, 0x63, 0xa3, + 0x25, 0xc0, 0x72, 0x74, 0x8c, 0xee, 0x78, 0x87, + 0x84, 0xd5, 0xd0, 0xb1, 0x52, 0x31, 0xd0, 0x16, + 0x8a, 0x87, 0x83, 0x57, 0x8e, 0xba, 0x55, 0x19, + 0x27, 0x21, 0x13, 0x95, 0xba, 0x88, 0x8a, 0x12, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x8e, 0xd4, 0x7e, + 0xa3, 0xbc, 0xf2, 0x7f, 0x39, 0xab, 0x5f, 0x43, + 0x7a, 0x99, 0xde, 0x5d, 0xfd, 0xa6, 0xad, 0x8d, + 0x47, 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, + 0xf4, 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, + 0xbc, 0x70, 0xe7, 0x4b, 0x19, 0xe6, 0x29, 0xdc, + 0x9d, 0x6b, 0x12, 0x22, 0x2a, 0x36, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x16, 0xae, 0x43, 0xd0, 0xae, + 0x7c, 0x93, 0xfc, 0x52, 0xb6, 0x96, 0xae, 0x43, + 0xd0, 0xae, 0x7c, 0x93, 0xfc, 0x52, 0xa6, 0x9c, + 0xf0, 0xad, 0xcd, 0x8a, 0xb4, 0x4e, 0xa4, 0x16, + 0x93, 0xf4, 0x7b, 0x8f, 0x0d, 0xbe, 0x2a, 0x9e, + 0x50, 0x3a, 0x4f, 0xd1, 0xee, 0x3c, 0x36, 0xf8, + 0xaa, 0x79, 0x69, 0x88, 0xe2, 0xd5, 0xa7, 0xee, + 0x61, 0x81, 0xe5, 0xad, 0xe8, 0x9d, 0x62, 0x22, + 0x2c, 0x9d, 0x22, 0x22, 0x20, 0x28, 0x8c, 0x8d, + 0xeb, 0x65, 0x2f, 0x80, 0x6d, 0x0d, 0xa6, 0xd0, + 0x68, 0x7a, 0xea, 0x56, 0x47, 0x06, 0xb1, 0xce, + 0x3b, 0x28, 0x2b, 0x55, 0x59, 0xbe, 0x95, 0xb0, + 0xdb, 0x4f, 0x3c, 0xa7, 0x86, 0x37, 0x35, 0xce, + 0x27, 0xf4, 0x47, 0x09, 0x41, 0xf1, 0xa4, 0x78, + 0x72, 0x59, 0x7b, 0xac, 0x97, 0x05, 0x2d, 0xec, + 0x07, 0x9a, 0xdb, 0xb8, 0xfc, 0x69, 0x1d, 0xb6, + 0x47, 0xf6, 0x36, 0x7b, 0xaa, 0x47, 0x31, 0xad, + 0xb1, 0x38, 0xb9, 0x5d, 0x09, 0x3d, 0x2c, 0x8c, + 0x34, 0x7d, 0x08, 0x0d, 0x0e, 0x1c, 0x9c, 0x4e, + 0xe5, 0x59, 0x74, 0x96, 0x2c, 0xe3, 0xb4, 0xd5, + 0xb4, 0x03, 0x64, 0xd2, 0xb1, 0xd3, 0x48, 0x79, + 0x78, 0xe5, 0xee, 0xfd, 0xe1, 0x45, 0xc1, 0xb3, + 0x33, 0xdc, 0x4b, 0x91, 0x9d, 0x97, 0x04, 0x97, + 0xc5, 0x23, 0x98, 0x41, 0xe4, 0x21, 0xc7, 0x8b, + 0xb2, 0x54, 0xd5, 0x9c, 0x74, 0xbb, 0xff, 0x00, + 0x6b, 0x71, 0x36, 0xa2, 0xdc, 0x46, 0xd3, 0xd6, + 0xac, 0x87, 0xde, 0xd9, 0xef, 0xaa, 0xe5, 0xff, + 0x00, 0xb4, 0xfc, 0xad, 0xc5, 0x44, 0x6f, 0x92, + 0x87, 0x66, 0xf1, 0x18, 0xfd, 0xda, 0x95, 0x4f, + 0x82, 0xca, 0xf2, 0xe5, 0xaf, 0x75, 0xb4, 0x12, + 0x4c, 0xd8, 0x87, 0x14, 0x85, 0x8d, 0x2e, 0x0d, + 0x1d, 0x57, 0x10, 0x36, 0x2d, 0xec, 0x7e, 0x9a, + 0xcb, 0x64, 0x71, 0x77, 0x59, 0x6b, 0x58, 0xda, + 0xeb, 0x3b, 0x30, 0x4c, 0xcf, 0x2e, 0x00, 0xec, + 0x15, 0xa3, 0x5b, 0xbc, 0xa8, 0x46, 0x46, 0x4b, + 0xad, 0x55, 0x97, 0xb9, 0x24, 0x97, 0x86, 0xd7, + 0x97, 0x6b, 0xcf, 0x65, 0xe4, 0xa8, 0xe9, 0xaf, + 0xef, 0x66, 0xd9, 0x2c, 0xef, 0x70, 0xea, 0x71, + 0x10, 0x3b, 0x02, 0x81, 0x59, 0xbf, 0x24, 0x58, + 0x5b, 0xdb, 0xc2, 0xdc, 0x9e, 0x59, 0xb6, 0x97, + 0xb7, 0x50, 0x79, 0xc4, 0x51, 0x98, 0x9c, 0xe8, + 0x83, 0x48, 0xe2, 0x6b, 0x5f, 0x28, 0xd8, 0x0a, + 0x94, 0xc5, 0x69, 0xbc, 0x1b, 0x71, 0x18, 0xbb, + 0xd8, 0xf1, 0x33, 0x66, 0x65, 0xbe, 0x7b, 0xa3, + 0xb9, 0x70, 0x94, 0xb5, 0x91, 0x16, 0x3b, 0x84, + 0x9a, 0x34, 0x0d, 0x9c, 0xbb, 0x51, 0x2e, 0x7d, + 0x4d, 0xbd, 0x52, 0x56, 0xe5, 0x8e, 0x1f, 0x2b, + 0x91, 0x64, 0x8f, 0xb1, 0xb4, 0x96, 0xe5, 0x91, + 0x7d, 0x63, 0xa3, 0x69, 0x70, 0x1c, 0xeb, 0xa1, + 0x69, 0xcd, 0x2f, 0x67, 0x8e, 0xd4, 0xd7, 0xd7, + 0x96, 0xb0, 0x1c, 0x85, 0x94, 0x13, 0xb6, 0xd2, + 0x06, 0x6c, 0x7f, 0x01, 0x94, 0x56, 0x57, 0x38, + 0xee, 0xa4, 0x61, 0x60, 0x86, 0xdb, 0x50, 0xe0, + 0xef, 0xc5, 0xab, 0xad, 0x25, 0xb8, 0xc4, 0xe3, + 0xef, 0x5d, 0x2f, 0x05, 0x8b, 0xc0, 0x95, 0xcf, + 0x90, 0xd5, 0x9d, 0x2f, 0x09, 0xa9, 0x6d, 0x39, + 0x0a, 0x0a, 0xb6, 0x27, 0x46, 0x65, 0xb2, 0x96, + 0xc2, 0xe5, 0x8f, 0x86, 0xd9, 0xaf, 0x7b, 0xa2, + 0xb7, 0x65, 0xc3, 0xf8, 0x1f, 0x2c, 0x8d, 0xde, + 0xc8, 0xc1, 0x1b, 0x4a, 0xd8, 0xb4, 0xc6, 0x69, + 0x7b, 0x76, 0x34, 0x66, 0x26, 0x9a, 0x1b, 0x98, + 0xea, 0x27, 0x86, 0xa0, 0x90, 0xf8, 0xdd, 0x47, + 0x33, 0x85, 0xbb, 0x68, 0xe1, 0xb8, 0xab, 0x6e, + 0x7a, 0xd2, 0x1b, 0xd9, 0x63, 0xc7, 0x41, 0x7f, + 0x0c, 0x57, 0xf8, 0xab, 0xff, 0x00, 0x3c, 0x71, + 0x9d, 0xcd, 0x8a, 0x91, 0x4f, 0x49, 0x1d, 0xd6, + 0xe2, 0x61, 0xde, 0x15, 0x0f, 0x5b, 0x5e, 0x5a, + 0x5e, 0xea, 0x8b, 0xfb, 0x9b, 0x37, 0x09, 0x20, + 0x92, 0x4d, 0x92, 0x37, 0xbd, 0x71, 0x00, 0x02, + 0xe1, 0xce, 0x50, 0x45, 0xde, 0xba, 0x01, 0x79, + 0x30, 0xb4, 0x71, 0x75, 0xb7, 0x1b, 0xba, 0x12, + 0x76, 0x1e, 0x0a, 0xf7, 0x3e, 0xf2, 0xc1, 0xc4, + 0x4a, 0xf1, 0x7a, 0xd1, 0x52, 0x83, 0x3d, 0xad, + 0xbb, 0xe7, 0x9a, 0x38, 0x18, 0x3b, 0xa9, 0x1c, + 0x1b, 0xd9, 0x5d, 0x16, 0xde, 0x26, 0x5b, 0xc1, + 0x1c, 0x0c, 0xd8, 0xd8, 0x9a, 0x1a, 0x3d, 0xc5, + 0x57, 0xd2, 0x96, 0x5c, 0x53, 0x3e, 0xf5, 0xe3, + 0xb9, 0x8f, 0xb9, 0x8f, 0x9c, 0xef, 0x3e, 0xe2, + 0xb3, 0x71, 0x2d, 0x6d, 0xc6, 0x48, 0xcb, 0xd6, + 0xce, 0xb9, 0xe9, 0xc8, 0xca, 0x5c, 0xbc, 0x2f, + 0x58, 0xb8, 0x97, 0x9c, 0x4a, 0xf9, 0x54, 0xc8, + 0x9d, 0xd2, 0x17, 0x5d, 0x0e, 0x79, 0x8c, 0x26, + 0x8d, 0xb9, 0x89, 0xd1, 0xfc, 0xa6, 0xf7, 0x41, + 0x74, 0x07, 0x8a, 0xb7, 0x99, 0x72, 0x9c, 0x7d, + 0xdf, 0x9a, 0xe4, 0x6d, 0x2e, 0x2b, 0x41, 0x14, + 0xcd, 0x24, 0xf5, 0x9c, 0x78, 0x4a, 0xea, 0xd5, + 0x04, 0x6c, 0xdc, 0x56, 0x35, 0xe7, 0xd2, 0xd6, + 0x8c, 0xcc, 0x4a, 0xa3, 0xae, 0x22, 0xf3, 0x0b, + 0xac, 0x7e, 0xa1, 0x6b, 0x49, 0x6c, 0x0f, 0xf3, + 0x6b, 0xba, 0x0d, 0xa6, 0x27, 0xed, 0x69, 0xf7, + 0x0d, 0x7b, 0x2a, 0xdc, 0xb4, 0x33, 0xf8, 0xe1, + 0x93, 0xc3, 0x5e, 0x58, 0x91, 0x57, 0x4d, 0x13, + 0xb8, 0x3a, 0xcf, 0x6f, 0x74, 0xcf, 0xde, 0x0a, + 0x29, 0x9c, 0x93, 0x19, 0x56, 0x9c, 0xcd, 0x1c, + 0x45, 0xdc, 0x4d, 0x68, 0x9d, 0xae, 0x0f, 0x82, + 0x6a, 0x16, 0x3d, 0xa3, 0x90, 0xa9, 0xd0, 0x41, + 0x00, 0x8d, 0xa0, 0xee, 0x2b, 0x9e, 0x68, 0x9b, + 0x97, 0xdc, 0x62, 0x5f, 0x6c, 0xfa, 0xb4, 0xc0, + 0xfa, 0x0a, 0xf5, 0xf9, 0x3d, 0xc5, 0x7c, 0xb3, + 0x2e, 0x36, 0xcc, 0x0e, 0x14, 0x73, 0x45, 0x0a, + 0x55, 0x19, 0x26, 0x60, 0x86, 0x74, 0x44, 0x50, + 0x08, 0x88, 0x80, 0xa3, 0xf5, 0x07, 0xaa, 0x67, + 0xf9, 0x3e, 0x30, 0x52, 0x0a, 0x3f, 0x50, 0x7a, + 0xa6, 0x7f, 0x93, 0xe3, 0x05, 0x7b, 0x7b, 0x74, + 0xe9, 0x86, 0x58, 0x9e, 0x05, 0xdd, 0xca, 0xf5, + 0x3d, 0xd2, 0xbe, 0xa8, 0x6f, 0x86, 0xfe, 0xda, + 0x96, 0x7e, 0xe5, 0x13, 0xa5, 0x7d, 0x50, 0xdf, + 0x0d, 0xfd, 0xb5, 0x2c, 0xfd, 0xca, 0x6e, 0xf1, + 0x6b, 0xde, 0x94, 0x61, 0xb8, 0x16, 0xf7, 0x61, + 0xce, 0x6e, 0xbf, 0xc9, 0xe3, 0xca, 0xb3, 0xec, + 0x42, 0xbf, 0xaa, 0x05, 0xd7, 0xf9, 0x3c, 0x79, + 0x56, 0x7d, 0x88, 0x57, 0xf5, 0xcb, 0x67, 0x3d, + 0x7b, 0xf2, 0xf6, 0x3e, 0x29, 0x9b, 0x07, 0xfc, + 0x6b, 0x62, 0x22, 0x2d, 0x9e, 0x68, 0x88, 0x88, + 0x0b, 0x56, 0xfe, 0xf1, 0xb6, 0xcc, 0x00, 0xf7, + 0xce, 0x34, 0xf7, 0x16, 0xd2, 0x89, 0xc9, 0x93, + 0x25, 0xc8, 0x0d, 0x3b, 0x22, 0xef, 0xbd, 0xde, + 0x44, 0x11, 0x71, 0x86, 0xdd, 0x66, 0x60, 0xb2, + 0xe0, 0x27, 0x8e, 0xb7, 0x13, 0xd4, 0xd4, 0x36, + 0x38, 0xce, 0xcf, 0xda, 0x71, 0x01, 0x5b, 0x9a, + 0x6a, 0xcd, 0xbb, 0x94, 0x06, 0x9f, 0xb5, 0x8c, + 0xdd, 0x5e, 0x64, 0x45, 0x4b, 0xa5, 0xe0, 0xb7, + 0x04, 0xf2, 0x08, 0xc7, 0x13, 0x80, 0xf9, 0x4e, + 0x53, 0xac, 0xe5, 0x53, 0x23, 0xf3, 0xee, 0xb7, + 0xb1, 0x36, 0x3a, 0xa3, 0x21, 0x05, 0x28, 0xd3, + 0x29, 0x91, 0xbc, 0xcf, 0xee, 0x97, 0x9a, 0x53, + 0x4d, 0xfe, 0x3d, 0x79, 0x28, 0x9a, 0x61, 0x6d, + 0x65, 0x67, 0x19, 0x9a, 0xee, 0x73, 0xb7, 0x85, + 0x83, 0x90, 0x75, 0xca, 0xb2, 0x7b, 0x61, 0xb1, + 0xe8, 0x73, 0x76, 0xf7, 0x80, 0x50, 0x5c, 0xc5, + 0x47, 0x1f, 0xd6, 0x61, 0xff, 0x00, 0xea, 0xa3, + 0xbd, 0x9e, 0xe5, 0x2c, 0x20, 0xb8, 0xbf, 0xc4, + 0xe4, 0x25, 0x16, 0xf0, 0x65, 0xa0, 0x30, 0xb6, + 0x63, 0xb9, 0xaf, 0xe4, 0xa9, 0xf7, 0x54, 0x0f, + 0x32, 0x58, 0xcd, 0x07, 0x71, 0x8d, 0xb8, 0x9f, + 0x0f, 0x7f, 0x2c, 0x17, 0x96, 0xa2, 0xa2, 0x2b, + 0x91, 0xb2, 0x61, 0xbb, 0xb8, 0xa2, 0xb0, 0xe1, + 0x2f, 0x71, 0x32, 0x64, 0x2c, 0x70, 0x38, 0x8b, + 0x1b, 0x6b, 0xcc, 0x61, 0xb7, 0x0f, 0xca, 0xdc, + 0xbd, 0x95, 0x70, 0x24, 0x55, 0xee, 0x74, 0x87, + 0x77, 0x0a, 0x8e, 0xc6, 0xe8, 0x9b, 0x1c, 0x1c, + 0xd7, 0x37, 0xfa, 0x96, 0x7b, 0x69, 0xf1, 0xf6, + 0xf1, 0x3b, 0xa0, 0x8e, 0x39, 0x38, 0x9d, 0x2b, + 0xfe, 0x25, 0x1a, 0xd5, 0xf1, 0x87, 0xd4, 0x5a, + 0x36, 0xc3, 0x4c, 0xbe, 0xc6, 0xe1, 0x97, 0x1e, + 0x73, 0x79, 0x23, 0x9f, 0x77, 0x1d, 0xb7, 0x72, + 0xe2, 0xca, 0xf7, 0x11, 0x99, 0x0f, 0xc5, 0xa2, + 0x0d, 0xac, 0xf5, 0xc8, 0xb6, 0xd1, 0x96, 0x57, + 0x3a, 0x7a, 0x57, 0xc5, 0x6d, 0x61, 0x7f, 0x2b, + 0x5f, 0xd1, 0x9a, 0x54, 0xf1, 0x12, 0xc7, 0x3a, + 0x9b, 0xc2, 0x9d, 0xc9, 0xb1, 0x99, 0x9b, 0x3b, + 0xac, 0x73, 0x78, 0x23, 0xbd, 0xce, 0x63, 0xe2, + 0xbd, 0x89, 0x86, 0x8d, 0xe3, 0x9a, 0x30, 0x01, + 0x1c, 0xe6, 0x8a, 0x8f, 0x16, 0xb3, 0x18, 0xfb, + 0xa9, 0x19, 0xa7, 0xec, 0x19, 0x16, 0x3a, 0x66, + 0x01, 0x2d, 0x85, 0xc7, 0xf1, 0xda, 0xe7, 0x37, + 0xff, 0x00, 0x52, 0x9d, 0x55, 0x1d, 0x95, 0xc8, + 0x6a, 0x0c, 0xc6, 0x4d, 0xb7, 0x93, 0xb2, 0x43, + 0x74, 0xd6, 0x37, 0xa1, 0x6c, 0x0d, 0x2d, 0x0c, + 0x67, 0xc4, 0xe0, 0x0d, 0xdc, 0x10, 0x5e, 0x2d, + 0x72, 0x6e, 0xd2, 0x98, 0x1c, 0x1c, 0x79, 0xa8, + 0xcb, 0x27, 0x12, 0xcd, 0x14, 0xd6, 0xf5, 0x05, + 0xe2, 0xde, 0x40, 0x5a, 0x4d, 0x14, 0x45, 0xe5, + 0xee, 0x9b, 0xc0, 0xe0, 0xf2, 0xb6, 0x78, 0xab, + 0xff, 0x00, 0xc4, 0x64, 0xcc, 0x11, 0xd1, 0x46, + 0x1a, 0x40, 0x8a, 0x3d, 0xfd, 0xdd, 0x7e, 0x37, + 0x22, 0x82, 0x66, 0x9c, 0xd4, 0xf9, 0x3b, 0x87, + 0x89, 0xe2, 0x94, 0xcd, 0x1b, 0x5a, 0x4b, 0xae, + 0x5c, 0x6a, 0x43, 0xbb, 0xc0, 0xd2, 0xea, 0xef, + 0x50, 0xb2, 0x46, 0xf8, 0xa4, 0x7c, 0x52, 0x0e, + 0x17, 0xc6, 0x4b, 0x5c, 0xd3, 0xc8, 0x41, 0xa1, + 0x08, 0x3e, 0x42, 0x22, 0x20, 0x93, 0xd3, 0xf6, + 0x82, 0xe2, 0xfc, 0x3d, 0xc2, 0xac, 0x80, 0x71, + 0x9e, 0x7e, 0x45, 0x6e, 0x2f, 0x51, 0x18, 0x1b, + 0x7f, 0x36, 0xb1, 0x0f, 0x70, 0xa3, 0xe6, 0xee, + 0x8f, 0x37, 0xc5, 0x52, 0x3c, 0x6b, 0x5a, 0x63, + 0x24, 0x33, 0xab, 0x3b, 0x21, 0x7a, 0xf3, 0x8d, + 0x63, 0xe3, 0x5f, 0x3c, 0x4a, 0x72, 0xa1, 0x90, + 0xb9, 0x59, 0xb4, 0x0d, 0xd0, 0x66, 0x5a, 0xe2, + 0xdc, 0x9a, 0x0b, 0x98, 0x43, 0x80, 0xfd, 0x68, + 0xcf, 0xfa, 0x39, 0x55, 0x38, 0x94, 0x8e, 0x9b, + 0xbc, 0xf3, 0x5c, 0xf5, 0x94, 0xc7, 0x60, 0x32, + 0x74, 0x4e, 0x3d, 0x69, 0x07, 0x0a, 0x8a, 0xba, + 0x62, 0x56, 0x8e, 0x89, 0x75, 0x67, 0x8d, 0xc5, + 0x45, 0xea, 0x2c, 0x58, 0xcb, 0x61, 0x6e, 0xac, + 0x69, 0xfc, 0x47, 0xb3, 0x8a, 0x13, 0xd4, 0x91, + 0x9d, 0xd3, 0x3d, 0xf0, 0xa5, 0x1d, 0xb4, 0x2f, + 0x95, 0x97, 0x6f, 0x52, 0xea, 0x36, 0x96, 0xc9, + 0xb6, 0xfe, 0xd2, 0x11, 0x50, 0x2e, 0x6d, 0x68, + 0xcb, 0x86, 0x38, 0x77, 0x5b, 0x37, 0x15, 0x74, + 0xb7, 0x9d, 0x93, 0xc7, 0xc4, 0xdd, 0xe3, 0xbe, + 0x1b, 0x88, 0x5c, 0xe9, 0xb1, 0x7e, 0x0b, 0xaf, + 0xee, 0x2d, 0x58, 0x29, 0x05, 0xe3, 0x8b, 0x98, + 0x36, 0xd0, 0x36, 0x61, 0xc6, 0x37, 0x75, 0x1d, + 0x55, 0x77, 0xc5, 0x34, 0xb2, 0x47, 0x8d, 0xed, + 0x76, 0xe7, 0x72, 0xd4, 0x75, 0x55, 0xaa, 0x8c, + 0x93, 0xd1, 0x9a, 0x7a, 0x51, 0x09, 0x34, 0x44, + 0x55, 0x48, 0x88, 0x88, 0x08, 0x37, 0x84, 0x41, + 0xbc, 0x20, 0xa0, 0x68, 0xdf, 0xef, 0x8b, 0xee, + 0x6b, 0x8f, 0xb4, 0x0b, 0xa4, 0x2e, 0x6f, 0xa3, + 0x7f, 0xbe, 0x2f, 0xb9, 0xae, 0x3e, 0xd0, 0x2e, + 0x90, 0xb1, 0xc3, 0xec, 0x79, 0xd2, 0xf4, 0xfe, + 0x33, 0xcc, 0xd3, 0xea, 0xad, 0xea, 0x45, 0xe6, + 0xfe, 0xa6, 0x3f, 0x0f, 0xe0, 0x2b, 0x35, 0xa7, + 0xa3, 0x45, 0xe0, 0x8e, 0xd2, 0xc3, 0x9b, 0xfa, + 0x98, 0xfc, 0x3f, 0x80, 0xac, 0xd6, 0x9e, 0x8d, + 0x17, 0x82, 0x3b, 0x4b, 0x8a, 0xcf, 0xf6, 0x78, + 0x8f, 0x55, 0x43, 0x8e, 0xae, 0x5e, 0xde, 0xfc, + 0xb2, 0xa2, 0x22, 0xf4, 0xd8, 0x08, 0x88, 0x80, + 0xbe, 0x64, 0x7b, 0x63, 0x61, 0x7b, 0xb6, 0x06, + 0xef, 0x5f, 0x4b, 0x57, 0x22, 0xfe, 0x1b, 0x62, + 0xde, 0x57, 0x9e, 0x10, 0x39, 0xd0, 0x41, 0xe5, + 0xf2, 0x2c, 0x74, 0x26, 0xe9, 0xcd, 0x24, 0x47, + 0xb9, 0xad, 0x3b, 0xdd, 0x5a, 0x35, 0xbe, 0xea, + 0xb0, 0xe3, 0x6d, 0x0d, 0xad, 0x84, 0x70, 0x38, + 0x01, 0x27, 0x0f, 0x14, 0x94, 0xfd, 0x37, 0x6d, + 0x77, 0xbe, 0x54, 0x0c, 0x76, 0x8d, 0xb9, 0xbc, + 0xb5, 0xb6, 0x97, 0xba, 0x11, 0x3d, 0xb3, 0xb8, + 0x72, 0x11, 0x17, 0x75, 0xe3, 0x51, 0x59, 0xda, + 0x6a, 0xd0, 0xa7, 0xb8, 0x3f, 0x38, 0xea, 0x36, + 0xcf, 0x1e, 0x6e, 0xf2, 0x09, 0xc9, 0x2f, 0x82, + 0x67, 0xc7, 0xb7, 0xa8, 0x1c, 0x56, 0xb5, 0xb6, + 0x3a, 0xfa, 0xea, 0x0b, 0x8b, 0x9b, 0x78, 0x5d, + 0x24, 0x36, 0x8d, 0x0f, 0xb8, 0x78, 0xdc, 0xc0, + 0x77, 0x55, 0x59, 0x7d, 0xa9, 0x58, 0x0b, 0x4d, + 0x5f, 0x70, 0xf6, 0x8a, 0x32, 0xe9, 0x8c, 0x98, + 0x73, 0x91, 0xc2, 0xef, 0x7d, 0xab, 0xeb, 0xd9, + 0xa4, 0xd0, 0x9c, 0xa5, 0xf6, 0x3e, 0x78, 0xc4, + 0xd1, 0x5e, 0xd9, 0xc8, 0x3a, 0x12, 0x68, 0x1e, + 0x59, 0xdd, 0x86, 0xd4, 0x28, 0x15, 0xf9, 0x30, + 0x77, 0x8c, 0xc2, 0xc1, 0x99, 0x05, 0xaf, 0xb7, + 0xb9, 0x94, 0xc0, 0xc6, 0x36, 0xa5, 0xe1, 0xe3, + 0xf4, 0x85, 0x39, 0x79, 0x16, 0xc7, 0xe5, 0x0d, + 0x42, 0xd9, 0x2d, 0x99, 0x35, 0xa9, 0x81, 0xb7, + 0x6f, 0x6c, 0x4c, 0x91, 0xe4, 0x70, 0xb5, 0xcf, + 0xef, 0x43, 0xe9, 0xde, 0xd7, 0xae, 0xad, 0x56, + 0x3a, 0x9b, 0x15, 0x3e, 0x0a, 0xe6, 0x27, 0x59, + 0xdb, 0x63, 0x86, 0x26, 0xea, 0x2b, 0x98, 0x2d, + 0x18, 0xee, 0xea, 0x4e, 0x17, 0x77, 0x60, 0x71, + 0xef, 0x76, 0xc4, 0xcd, 0xeb, 0x1c, 0x47, 0x41, + 0x75, 0x36, 0x3e, 0xed, 0xa7, 0xcf, 0x24, 0x8e, + 0x76, 0x5a, 0x43, 0x09, 0x6b, 0xc3, 0xd8, 0xe0, + 0xfa, 0xcf, 0x24, 0x95, 0xa9, 0x1c, 0x9c, 0x28, + 0x22, 0x1b, 0xa1, 0x99, 0x6b, 0x2d, 0xc9, 0xca, + 0xdf, 0x30, 0x45, 0x8e, 0x87, 0xa5, 0xbf, 0x65, + 0xb7, 0x76, 0xf6, 0x38, 0xbb, 0x85, 0x91, 0xf2, + 0x0a, 0x9a, 0xaf, 0xab, 0x7d, 0x2f, 0x83, 0xbc, + 0xb0, 0xca, 0x49, 0x8c, 0x96, 0x7b, 0xb9, 0x20, + 0xb7, 0x65, 0xcd, 0x9b, 0xde, 0xc3, 0x19, 0xdf, + 0x49, 0x58, 0x5b, 0xf1, 0xa9, 0xd6, 0x5a, 0xd7, + 0x3a, 0xd4, 0xb7, 0x50, 0x5f, 0x65, 0x2c, 0x6d, + 0x9a, 0xeb, 0x4c, 0x8b, 0x78, 0x2e, 0x6c, 0xee, + 0x7b, 0xa6, 0x3c, 0x53, 0x6f, 0x17, 0x0f, 0x5f, + 0x6a, 0xc4, 0xdd, 0x4f, 0xa9, 0x2f, 0xf2, 0x50, + 0xc9, 0x88, 0x67, 0x9a, 0xc9, 0x6d, 0x0b, 0xa3, + 0x82, 0xda, 0xd1, 0xbd, 0xcb, 0x22, 0xde, 0xfe, + 0xe4, 0xd6, 0xbe, 0xea, 0x0b, 0x8c, 0x38, 0xbb, + 0x48, 0xec, 0xbc, 0xda, 0x28, 0x05, 0xb4, 0x19, + 0x8c, 0x40, 0x99, 0xd1, 0x1d, 0x9f, 0xc7, 0xb6, + 0x75, 0x5e, 0x4f, 0x17, 0x29, 0x0b, 0xeb, 0x2b, + 0x9e, 0xc5, 0x3b, 0x1f, 0x3d, 0xc5, 0xa5, 0xcd, + 0xb3, 0x6c, 0xa7, 0xb4, 0x6b, 0x04, 0x4f, 0x95, + 0xcf, 0x78, 0x91, 0xad, 0x00, 0x47, 0x1d, 0xb0, + 0x00, 0x35, 0xc1, 0xdf, 0x19, 0x51, 0x5f, 0x69, + 0xa8, 0xf2, 0xd6, 0xcd, 0xc9, 0xdd, 0x4f, 0x24, + 0x90, 0xbe, 0x49, 0x22, 0x64, 0x92, 0x3c, 0x9e, + 0xec, 0x0e, 0x27, 0x35, 0xad, 0x1b, 0xaa, 0xb1, + 0x5a, 0xe9, 0x5c, 0xb4, 0xe6, 0x2e, 0x26, 0xb2, + 0x06, 0xcc, 0xd2, 0xf6, 0xba, 0x57, 0x86, 0xd1, + 0xa1, 0xbc, 0x75, 0x73, 0x77, 0x8e, 0xe4, 0x57, + 0x72, 0x0b, 0x35, 0xde, 0xb4, 0xc4, 0xdc, 0x61, + 0xe7, 0x8a, 0xf2, 0x47, 0xe4, 0xae, 0x6e, 0x2d, + 0xc4, 0x4d, 0x8e, 0x6b, 0x78, 0xda, 0xe8, 0xe5, + 0x02, 0x9c, 0x66, 0x76, 0xed, 0x34, 0xe4, 0x54, + 0x15, 0x67, 0xb4, 0xd1, 0x62, 0x79, 0x19, 0x11, + 0xbd, 0x61, 0x93, 0x85, 0x93, 0x4a, 0xd6, 0xb4, + 0xf0, 0x88, 0x64, 0x77, 0x08, 0x73, 0x5e, 0x68, + 0xd2, 0x76, 0xee, 0x5b, 0xb6, 0xba, 0x7b, 0x15, + 0x19, 0x7b, 0x9f, 0x6b, 0x21, 0x94, 0xf0, 0x86, + 0x5a, 0xde, 0xc8, 0xd8, 0x89, 0x60, 0x71, 0x6c, + 0xb2, 0xb4, 0xb6, 0x9b, 0xb9, 0x10, 0x53, 0xed, + 0xe0, 0x96, 0xe2, 0x66, 0x43, 0x0b, 0x0b, 0xe5, + 0x79, 0xa3, 0x18, 0x37, 0x93, 0xd4, 0x0a, 0xd1, + 0xa4, 0xb0, 0x77, 0xb2, 0x5c, 0x49, 0x74, 0x6d, + 0xdf, 0x58, 0x89, 0x8d, 0x95, 0x69, 0x03, 0x8b, + 0xe3, 0x6f, 0xea, 0x2d, 0xc3, 0x94, 0xc2, 0x63, + 0xe4, 0x8e, 0x1c, 0x77, 0x47, 0xfc, 0x38, 0xcf, + 0x47, 0x23, 0x18, 0x0c, 0x9e, 0x71, 0x14, 0xb5, + 0x8d, 0xdc, 0x7b, 0xfb, 0xb6, 0x6c, 0x56, 0x1f, + 0xc6, 0x21, 0x8a, 0x26, 0x45, 0x18, 0x7c, 0xd1, + 0xbb, 0xa5, 0xe9, 0x9b, 0x21, 0xa5, 0x44, 0xe7, + 0x89, 0xc3, 0x67, 0x2b, 0x4a, 0xb5, 0x11, 0x39, + 0x72, 0xa2, 0xa9, 0xc8, 0xcb, 0x1e, 0x16, 0x67, + 0x5b, 0xb9, 0xce, 0x25, 0xb3, 0x8a, 0x81, 0x11, + 0x1c, 0xa0, 0xb7, 0x97, 0x99, 0xd5, 0x59, 0x1d, + 0x84, 0x64, 0x0c, 0x96, 0x59, 0xa6, 0x2e, 0x6c, + 0x2d, 0x24, 0xb1, 0x83, 0xba, 0xe2, 0x6d, 0x2a, + 0x36, 0xf2, 0x2d, 0x39, 0x33, 0xd7, 0x24, 0x70, + 0x44, 0x04, 0x71, 0xb4, 0x06, 0xb1, 0xbd, 0xf1, + 0x0d, 0x0d, 0xe0, 0xdf, 0xcc, 0xb5, 0x26, 0xc9, + 0x5e, 0x4e, 0x00, 0x96, 0x67, 0x38, 0x01, 0x4d, + 0x9b, 0x2a, 0x3a, 0xf4, 0xde, 0xb4, 0xe9, 0x67, + 0xd0, 0x90, 0xcb, 0xd9, 0x5b, 0x5b, 0xc1, 0x0c, + 0xd6, 0xf5, 0x0d, 0x79, 0xe1, 0x21, 0xe7, 0xba, + 0x3b, 0x2b, 0x5a, 0x6e, 0xec, 0x28, 0xe8, 0xae, + 0x4c, 0x13, 0x45, 0x70, 0x37, 0xc3, 0x23, 0x1f, + 0xee, 0x03, 0xb5, 0x60, 0x2f, 0x27, 0x79, 0x27, + 0x9f, 0x6a, 0xf8, 0x26, 0xad, 0x2d, 0xea, 0x82, + 0x13, 0xb8, 0x77, 0x72, 0xbb, 0x23, 0x1e, 0x24, + 0x8c, 0x3d, 0xbb, 0x5a, 0xf0, 0x1c, 0x3d, 0xd1, + 0x55, 0x8a, 0x48, 0xe3, 0x96, 0x37, 0x45, 0x2b, + 0x78, 0xa3, 0x91, 0xa5, 0x8f, 0x69, 0xe5, 0x6b, + 0x85, 0x08, 0x5a, 0x7a, 0x6e, 0xec, 0x5d, 0xe0, + 0xec, 0xe6, 0xad, 0x49, 0x8c, 0x34, 0xf3, 0xb7, + 0xb9, 0x5b, 0xc7, 0x7d, 0x16, 0x39, 0x9a, 0xb9, + 0x86, 0x0a, 0xb8, 0x5d, 0x41, 0x7b, 0xa7, 0xe7, + 0x3b, 0x1c, 0xf2, 0xdb, 0x77, 0x11, 0x50, 0x48, + 0xee, 0x99, 0xfb, 0x4d, 0x2a, 0xff, 0x00, 0x8c, + 0x9d, 0xad, 0x63, 0x60, 0x93, 0x63, 0xf7, 0x82, + 0x37, 0x15, 0x49, 0xf6, 0x95, 0x6a, 0xfb, 0x2c, + 0xbd, 0x86, 0x6a, 0x01, 0x47, 0x3c, 0x06, 0xb8, + 0x8f, 0xf7, 0x21, 0x21, 0xcd, 0xec, 0xb4, 0xfb, + 0xca, 0xcf, 0x04, 0x8d, 0xb9, 0x30, 0x5d, 0xc3, + 0xb5, 0xb2, 0x35, 0xb2, 0x35, 0xb5, 0xf8, 0xae, + 0xdb, 0xf0, 0xab, 0x55, 0xd3, 0x92, 0xae, 0xb4, + 0x47, 0x76, 0x3a, 0x93, 0xe8, 0x80, 0xd4, 0x57, + 0xaa, 0x8a, 0xa9, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x46, 0x65, 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, + 0x6d, 0xef, 0x47, 0x32, 0x84, 0xcb, 0x7d, 0x74, + 0x3c, 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, + 0xe7, 0x60, 0xf9, 0xec, 0x76, 0x9b, 0x5f, 0xa6, + 0x5d, 0x17, 0x78, 0x36, 0x74, 0x55, 0xad, 0x86, + 0xf3, 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, 0xa9, + 0x68, 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xea, 0xdb, + 0x79, 0xe8, 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, + 0xb4, 0x26, 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0xea, + 0xd3, 0xb1, 0x57, 0x79, 0xc3, 0x5f, 0x1a, 0xd7, + 0x9c, 0xb5, 0xa2, 0x22, 0xcd, 0xb0, 0x88, 0x88, + 0x08, 0x8b, 0xc7, 0x10, 0xd6, 0x92, 0x79, 0x02, + 0x08, 0xac, 0x8d, 0xeb, 0x64, 0x73, 0xed, 0xda, + 0x2b, 0x4a, 0x6e, 0x34, 0x3d, 0x75, 0xa5, 0xa5, + 0x03, 0x6f, 0x6f, 0xee, 0xaf, 0xc3, 0x7f, 0x85, + 0x68, 0x7c, 0xd6, 0xdd, 0xe7, 0x7b, 0x9f, 0xb0, + 0xcc, 0xfe, 0xd0, 0x5f, 0x17, 0x72, 0xb6, 0x28, + 0xe6, 0xb9, 0x90, 0xd2, 0x37, 0x02, 0xe3, 0xd5, + 0x02, 0x87, 0x6a, 0x96, 0xd3, 0x38, 0xf1, 0x8d, + 0xc3, 0xda, 0xda, 0xfc, 0x7e, 0x02, 0xf9, 0x49, + 0xde, 0x5f, 0x21, 0xe3, 0x71, 0x3d, 0x95, 0x3d, + 0xc9, 0x47, 0x75, 0x55, 0xf6, 0xc7, 0x61, 0xd3, + 0x61, 0x2d, 0xaf, 0x40, 0xa9, 0xb6, 0x96, 0x84, + 0xf5, 0x9e, 0xb9, 0x04, 0x11, 0x89, 0x66, 0x8e, + 0x22, 0xf6, 0xc6, 0x24, 0x70, 0x69, 0x7b, 0xbb, + 0xd6, 0xd4, 0xd2, 0xae, 0xeb, 0x2f, 0xd0, 0x5a, + 0xe6, 0xc3, 0xcf, 0xf4, 0xb5, 0xfc, 0x20, 0x71, + 0x39, 0xb1, 0x99, 0x18, 0x3a, 0xed, 0xda, 0xbf, + 0x3d, 0x28, 0x4a, 0xf1, 0x0e, 0x83, 0xc0, 0x41, + 0x8d, 0x9b, 0x2b, 0x90, 0xcd, 0x89, 0xed, 0x6d, + 0x9c, 0x19, 0x37, 0x99, 0x33, 0x8e, 0x8e, 0x76, + 0xe1, 0x52, 0xb6, 0xf1, 0x7a, 0x27, 0x4f, 0x65, + 0xf4, 0x93, 0xee, 0xec, 0x5c, 0xf1, 0x93, 0x92, + 0x49, 0x19, 0x6a, 0xf9, 0x1d, 0xdf, 0x96, 0x1a, + 0x86, 0x70, 0xee, 0x04, 0xb5, 0x46, 0xe8, 0x89, + 0xad, 0xe7, 0xc1, 0xe7, 0xf1, 0x37, 0x12, 0x32, + 0x36, 0xcd, 0x6f, 0xd3, 0x45, 0xc6, 0x43, 0x47, + 0x1b, 0x37, 0x52, 0xab, 0x0e, 0x03, 0x51, 0xdb, + 0x58, 0x69, 0x6b, 0xdb, 0x27, 0xcc, 0x62, 0xbe, + 0x86, 0xe2, 0x3b, 0x9b, 0x0a, 0x54, 0xd5, 0xed, + 0x3d, 0xd0, 0xaf, 0x22, 0x0b, 0x2e, 0x1b, 0x17, + 0x8f, 0x3a, 0x06, 0x4c, 0x74, 0xd0, 0x35, 0xb9, + 0x2b, 0xb8, 0x2e, 0x26, 0x0f, 0x2d, 0x1c, 0x7f, + 0xc2, 0x77, 0x7b, 0xc5, 0xbf, 0x91, 0x6c, 0xe9, + 0x9d, 0x3b, 0x7b, 0x0e, 0x00, 0xe1, 0x7a, 0x06, + 0xf4, 0x19, 0x4b, 0x27, 0xcf, 0x71, 0x74, 0xe2, + 0x00, 0x33, 0x3c, 0x7f, 0x09, 0x83, 0x6d, 0x68, + 0xd1, 0xbd, 0x41, 0x64, 0xbd, 0xa4, 0xdb, 0xcb, + 0x96, 0xb1, 0xc8, 0x5a, 0x59, 0xf7, 0x10, 0x5b, + 0x49, 0x14, 0xf6, 0xee, 0xa3, 0x5a, 0xe7, 0xcb, + 0xdf, 0xd2, 0x9c, 0x8a, 0xab, 0x69, 0xa8, 0x72, + 0xb6, 0x37, 0xed, 0xbe, 0xb5, 0x9d, 0xed, 0x7c, + 0x45, 0xdd, 0x13, 0x1e, 0xe2, 0xf6, 0xb5, 0xae, + 0xd9, 0xc2, 0x1a, 0x76, 0x52, 0x88, 0x2d, 0xf9, + 0x8c, 0x25, 0xf6, 0x6b, 0x4a, 0xe3, 0x6d, 0x71, + 0x7c, 0x37, 0x57, 0x58, 0x47, 0x3e, 0xda, 0xf6, + 0xd6, 0x27, 0x03, 0xdd, 0x57, 0xbf, 0x6f, 0x54, + 0x28, 0x0d, 0x4b, 0xa7, 0xa1, 0xc2, 0x63, 0x71, + 0xcc, 0xb9, 0x9d, 0xee, 0xcc, 0x4e, 0xd2, 0xeb, + 0x8b, 0x62, 0xe0, 0xe6, 0xc4, 0xcf, 0x8a, 0x3a, + 0xcb, 0x06, 0x33, 0x15, 0xa8, 0xae, 0x00, 0xbe, + 0xc7, 0x3c, 0xc6, 0xeb, 0xa3, 0x23, 0x9a, 0x63, + 0x93, 0x81, 0xcf, 0x2c, 0x1c, 0x6f, 0x01, 0xa0, + 0xac, 0x59, 0x0c, 0x2e, 0x46, 0xdf, 0x29, 0x1c, + 0x19, 0x07, 0x3e, 0x57, 0xcc, 0xd8, 0xe4, 0x96, + 0x61, 0x57, 0x96, 0xb2, 0x4a, 0x77, 0xd5, 0xe5, + 0x6f, 0x2a, 0x09, 0xdb, 0x1d, 0x57, 0x69, 0x85, + 0xd1, 0xb6, 0xb6, 0x56, 0x42, 0x1b, 0x9c, 0x8c, + 0x97, 0x0f, 0x9a, 0x68, 0xe6, 0x67, 0x18, 0x88, + 0x7c, 0x53, 0xb7, 0x65, 0x57, 0xd3, 0xfd, 0xa4, + 0x3a, 0x59, 0xed, 0x32, 0x52, 0xd9, 0x35, 0xf9, + 0x58, 0x22, 0x7d, 0xbd, 0xc4, 0xa0, 0xf0, 0xc7, + 0x2c, 0x6f, 0x1b, 0x01, 0x03, 0xa8, 0xb6, 0xc7, + 0xb3, 0xec, 0x6d, 0xbd, 0xce, 0x42, 0x39, 0x25, + 0x75, 0xc5, 0xb9, 0x84, 0x0c, 0x64, 0xe0, 0xd2, + 0xb3, 0xb8, 0x57, 0x81, 0xc1, 0xbc, 0xa1, 0x45, + 0xea, 0x0c, 0x05, 0x85, 0xa6, 0x9a, 0xb3, 0xba, + 0xb5, 0x74, 0x26, 0x7b, 0x77, 0x88, 0xee, 0x9e, + 0xc7, 0x87, 0x3e, 0x57, 0x4a, 0xde, 0x3d, 0xa0, + 0x6e, 0xe1, 0xdc, 0x82, 0x0e, 0xc7, 0x3b, 0x7f, + 0x8d, 0x96, 0xee, 0x4b, 0x07, 0x08, 0x5b, 0x7a, + 0xd7, 0x32, 0x56, 0x11, 0xc4, 0x38, 0x1c, 0x6b, + 0xc3, 0xb5, 0x58, 0xb0, 0x32, 0x5e, 0x1b, 0x08, + 0xa6, 0xba, 0x99, 0xef, 0x75, 0x38, 0x20, 0x04, + 0xf7, 0x91, 0x0e, 0x46, 0xf5, 0x2a, 0xaa, 0x76, + 0x56, 0xce, 0xba, 0xba, 0x8e, 0x06, 0xfc, 0x73, + 0xdd, 0x1e, 0xa0, 0xe5, 0x57, 0x56, 0x86, 0x31, + 0x8d, 0x63, 0x36, 0x35, 0xa0, 0x35, 0xa3, 0xac, + 0x15, 0xe8, 0x8e, 0x9c, 0xaa, 0xd5, 0x3d, 0xc6, + 0x62, 0xed, 0xb5, 0x3b, 0xfa, 0xab, 0xc2, 0xf5, + 0x88, 0xb9, 0x78, 0x5c, 0xb4, 0x51, 0x94, 0xbd, + 0x7c, 0xbc, 0xd5, 0xae, 0x1d, 0x50, 0x42, 0xc7, + 0xc4, 0xbc, 0xe3, 0xdb, 0x55, 0x03, 0xac, 0x69, + 0xdb, 0xbf, 0x3c, 0xc2, 0x59, 0xcf, 0x5a, 0x93, + 0x10, 0x6b, 0xa9, 0xd5, 0x6f, 0x72, 0x56, 0xe9, + 0xde, 0x42, 0xad, 0xfb, 0x3d, 0xba, 0xe9, 0x30, + 0xd2, 0x5b, 0x13, 0x53, 0x6d, 0x33, 0x80, 0xe6, + 0x77, 0x74, 0x15, 0x95, 0xfd, 0xf2, 0xc5, 0xac, + 0x66, 0x73, 0xfd, 0x75, 0x01, 0xc5, 0x67, 0x6c, + 0x75, 0x04, 0x4d, 0xfe, 0x1c, 0xbf, 0xc1, 0xb9, + 0x03, 0x94, 0xb0, 0x6c, 0xec, 0xb3, 0xb4, 0xac, + 0x38, 0x8b, 0xa8, 0xda, 0x05, 0xcb, 0x48, 0x75, + 0xbc, 0xc0, 0x18, 0xdc, 0xd1, 0xf1, 0x4f, 0x2a, + 0xfa, 0xd6, 0x78, 0xdf, 0xc4, 0x74, 0xe5, 0xe4, + 0x40, 0x56, 0x48, 0x5b, 0xd3, 0xc5, 0xd5, 0xe2, + 0x8b, 0xba, 0xf7, 0xdb, 0x50, 0xab, 0x5a, 0x26, + 0xef, 0xce, 0xf0, 0x66, 0xd9, 0xc6, 0x86, 0xd6, + 0x4e, 0x11, 0xbf, 0x6b, 0x5f, 0xdd, 0x37, 0xb0, + 0x6a, 0xad, 0x3d, 0x34, 0xe5, 0xea, 0xe8, 0x44, + 0x67, 0xc8, 0xbf, 0x82, 0x1c, 0x01, 0x1b, 0x41, + 0xda, 0x0a, 0xf5, 0x6b, 0xd8, 0xf1, 0x79, 0xb3, + 0x1a, 0xe1, 0x47, 0x37, 0x61, 0x0b, 0x61, 0x55, + 0x22, 0x22, 0x20, 0x22, 0x22, 0x08, 0xed, 0x47, + 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, 0xf4, + 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, 0xd8, + 0xd4, 0x7e, 0xa3, 0xbc, 0xf2, 0x7f, 0x39, 0xab, + 0x5f, 0x43, 0x7a, 0x99, 0xde, 0x5d, 0xfd, 0xa6, + 0xab, 0xc7, 0x0e, 0x74, 0xb1, 0x9e, 0x62, 0x9d, + 0xc9, 0xd6, 0xb1, 0x22, 0x22, 0xa3, 0x61, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x6a, 0xe4, 0x3d, 0x0a, + 0xe7, 0xc9, 0x3f, 0xc5, 0x2b, 0x69, 0x6a, 0xe4, + 0x3d, 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2a, 0x69, + 0xcf, 0x0a, 0xdc, 0xd8, 0xab, 0x44, 0xea, 0x41, + 0x69, 0x3f, 0x47, 0xb8, 0xf0, 0xdb, 0xe2, 0xa9, + 0xe5, 0x03, 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, 0x6f, + 0x8a, 0xa7, 0x96, 0x98, 0x8e, 0x2d, 0x5a, 0x7e, + 0xe6, 0x18, 0x1e, 0x5a, 0xde, 0x89, 0xd6, 0x22, + 0x22, 0xc9, 0xd2, 0x22, 0x22, 0x0d, 0x4c, 0x9f, + 0x48, 0x6d, 0x9c, 0xc8, 0xcd, 0x0b, 0xb6, 0x2a, + 0x86, 0x79, 0x92, 0x48, 0xcb, 0x5c, 0x40, 0x77, + 0x13, 0xef, 0x6e, 0x62, 0x84, 0x90, 0x6b, 0xdc, + 0x13, 0x57, 0xfb, 0xc1, 0x5b, 0x32, 0x91, 0x17, + 0x46, 0xc7, 0x87, 0x70, 0xd0, 0xd1, 0xd4, 0xea, + 0x15, 0x55, 0xb4, 0x8a, 0x49, 0xf5, 0xb5, 0x8c, + 0x4e, 0x1f, 0xc2, 0xb5, 0x8a, 0x5b, 0x96, 0xf2, + 0x9a, 0xd3, 0xa3, 0x04, 0xfb, 0xa5, 0x4d, 0x39, + 0xd1, 0x2b, 0xeb, 0x28, 0x18, 0x03, 0x45, 0x1a, + 0x05, 0x00, 0xea, 0x01, 0xb1, 0x70, 0x0f, 0x68, + 0x36, 0x1e, 0x63, 0xab, 0xf2, 0x11, 0x81, 0x46, + 0x4a, 0xf1, 0x33, 0x39, 0xa4, 0x1c, 0x5d, 0xb5, + 0xdf, 0xa3, 0xef, 0x69, 0xd4, 0x5c, 0x8f, 0xdb, + 0x35, 0x87, 0x45, 0x96, 0xb2, 0xbf, 0x03, 0x65, + 0xc4, 0x46, 0x37, 0x1f, 0xd6, 0x8c, 0xd7, 0xb4, + 0xe5, 0x09, 0x6a, 0x7b, 0x2f, 0xca, 0x9b, 0x27, + 0x66, 0x21, 0xe1, 0x12, 0x83, 0x6d, 0xd3, 0xf4, + 0x27, 0xe3, 0x08, 0xcf, 0x76, 0x3f, 0x64, 0xab, + 0x35, 0xa3, 0x71, 0x78, 0xcb, 0x6b, 0x5c, 0x75, + 0xac, 0xad, 0xfc, 0x33, 0x51, 0xba, 0xea, 0x46, + 0x17, 0x10, 0x1a, 0xd6, 0xbe, 0x2a, 0xb1, 0x8f, + 0x27, 0x95, 0xae, 0xd8, 0xb9, 0x76, 0x17, 0xf1, + 0x47, 0x64, 0xe2, 0xb7, 0xc4, 0xca, 0x62, 0xbb, + 0xba, 0xac, 0x0d, 0x20, 0xf0, 0xd4, 0x3c, 0x50, + 0xb4, 0x93, 0xd5, 0x52, 0x36, 0xba, 0x53, 0x2b, + 0x75, 0x6f, 0x72, 0x6e, 0xe6, 0x31, 0x8c, 0x74, + 0xec, 0xb7, 0x7d, 0xbb, 0x89, 0x2e, 0xac, 0x86, + 0x84, 0xc6, 0x1c, 0x69, 0x4a, 0xd1, 0x05, 0xa7, + 0x0f, 0x9e, 0x8e, 0xda, 0xd6, 0xcc, 0x49, 0xa8, + 0xe3, 0xf3, 0x7b, 0x5f, 0xe1, 0xde, 0x59, 0x5d, + 0x42, 0x24, 0x78, 0x0c, 0x3d, 0xe4, 0x45, 0xa0, + 0xf1, 0x03, 0xc8, 0x54, 0x2e, 0x5f, 0x5a, 0xda, + 0x4d, 0x89, 0xbf, 0xc6, 0x63, 0x5b, 0x35, 0xb0, + 0x9a, 0xf9, 0xd7, 0x36, 0xce, 0x8c, 0xf0, 0x34, + 0x44, 0xe1, 0x47, 0x35, 0xd4, 0x35, 0xdb, 0xd4, + 0x51, 0x71, 0xe9, 0x39, 0x4c, 0xd0, 0xc3, 0x73, + 0x75, 0x15, 0xbc, 0xb3, 0xbc, 0x06, 0x42, 0xee, + 0x23, 0x27, 0x46, 0x5d, 0xc1, 0xd2, 0x1a, 0x0a, + 0x7b, 0xea, 0x42, 0x0d, 0x25, 0x8b, 0x73, 0x0f, + 0x14, 0xb3, 0xbd, 0x80, 0x4a, 0x5d, 0x76, 0x03, + 0x5b, 0x14, 0x66, 0x07, 0x06, 0xb9, 0x92, 0x37, + 0x78, 0x2e, 0xe7, 0x41, 0x59, 0xb6, 0xc9, 0xe4, + 0x2d, 0x76, 0x5b, 0xdc, 0x49, 0x1b, 0x78, 0xc4, + 0x85, 0xad, 0x71, 0x00, 0xb8, 0x72, 0x90, 0x37, + 0xa9, 0x16, 0xe7, 0x35, 0x2d, 0xee, 0x42, 0x6b, + 0xe8, 0x27, 0x99, 0x97, 0x37, 0x44, 0x36, 0x69, + 0x20, 0x05, 0x8d, 0x35, 0xee, 0x47, 0x17, 0x06, + 0xc5, 0x39, 0x25, 0xbe, 0x13, 0x1f, 0x33, 0x9e, + 0xd1, 0x69, 0x6a, 0xe7, 0x31, 0xec, 0xb0, 0x98, + 0xb8, 0xdc, 0x03, 0xb9, 0xcd, 0x96, 0x56, 0xf7, + 0x54, 0xea, 0x6e, 0xf7, 0x17, 0x97, 0x7a, 0xb3, + 0x19, 0x6d, 0xc1, 0x6d, 0x64, 0xd7, 0x18, 0x58, + 0xe9, 0x5b, 0x3b, 0x62, 0x1c, 0x11, 0xc8, 0x25, + 0x60, 0xab, 0x87, 0x33, 0xf6, 0x84, 0x10, 0xf3, + 0x69, 0x2d, 0x44, 0xeb, 0xc9, 0x59, 0x71, 0x1f, + 0xf1, 0x1b, 0x27, 0x47, 0x24, 0xd2, 0x3c, 0x50, + 0xbe, 0x9c, 0x5d, 0xf1, 0x24, 0x9e, 0xe7, 0x6a, + 0x93, 0xc6, 0x68, 0xfb, 0x77, 0x5a, 0x97, 0xdc, + 0x39, 0xb7, 0x0e, 0x96, 0xbd, 0x04, 0xd0, 0xb8, + 0x98, 0xdc, 0x1e, 0xc7, 0x06, 0x38, 0x6c, 0x06, + 0xad, 0x92, 0x95, 0x51, 0xf7, 0x5a, 0xba, 0xe1, + 0xfd, 0x1b, 0xed, 0xa3, 0xe8, 0xa6, 0x64, 0x91, + 0xcc, 0xe9, 0x1c, 0x78, 0xab, 0x23, 0x19, 0xd1, + 0x38, 0xf0, 0xee, 0xa3, 0xdb, 0xbc, 0x2d, 0x69, + 0xb5, 0x2e, 0x52, 0x7a, 0x08, 0x9e, 0x2d, 0x62, + 0x63, 0x43, 0x59, 0x0c, 0x03, 0x81, 0x8d, 0x00, + 0xf1, 0xec, 0x03, 0xf5, 0xb6, 0xa0, 0xb1, 0xc5, + 0xa4, 0x70, 0x96, 0x82, 0x19, 0x2e, 0x9e, 0xf9, + 0x8f, 0x05, 0x5c, 0xc7, 0x1e, 0x18, 0xe4, 0x73, + 0xa3, 0xe9, 0x1b, 0x47, 0xd0, 0x52, 0x84, 0x52, + 0x95, 0x5a, 0x39, 0x66, 0xe0, 0xe7, 0xc1, 0x40, + 0xfb, 0x28, 0xe1, 0xb6, 0xba, 0xab, 0x43, 0x61, + 0x8c, 0x87, 0xbd, 0xcf, 0x24, 0x87, 0x87, 0x3b, + 0x63, 0x87, 0x57, 0x6a, 0xae, 0x3e, 0xe2, 0x79, + 0x1a, 0xd6, 0xc9, 0x23, 0xde, 0xd6, 0x54, 0xb5, + 0xa4, 0x92, 0x01, 0x3d, 0x45, 0xbf, 0xa7, 0xed, + 0x04, 0xf7, 0x9d, 0x2b, 0x85, 0x59, 0x00, 0xe2, + 0x3e, 0x17, 0x22, 0x98, 0x8c, 0xb2, 0x4a, 0xcd, + 0x8e, 0xb7, 0x6d, 0x9d, 0x9c, 0x50, 0x0d, 0xed, + 0x15, 0x77, 0x5d, 0xc7, 0x7a, 0xd8, 0x2f, 0x58, + 0xb8, 0xd7, 0x9c, 0x6b, 0x56, 0x4c, 0x85, 0xeb, + 0xce, 0x25, 0x8c, 0xb9, 0x7c, 0x97, 0x26, 0x51, + 0x91, 0xee, 0x25, 0xae, 0xa6, 0xfa, 0x54, 0x7b, + 0x9b, 0x57, 0x5b, 0xc4, 0xdc, 0x8b, 0xbc, 0x6d, + 0xad, 0xc0, 0x35, 0xe9, 0x22, 0x69, 0x27, 0xaf, + 0x4a, 0x15, 0xc7, 0xf8, 0x97, 0x47, 0xd0, 0x57, + 0x5d, 0x36, 0x05, 0x91, 0x13, 0x53, 0x6d, 0x23, + 0xa3, 0xf7, 0x37, 0x85, 0x4a, 0xfb, 0x92, 0xbd, + 0x29, 0xf7, 0x0a, 0x12, 0xbc, 0x1b, 0x0d, 0x57, + 0xd3, 0xc6, 0xda, 0xaf, 0x95, 0x45, 0x94, 0xbc, + 0x73, 0x1b, 0x65, 0x95, 0xc9, 0x63, 0xc5, 0x18, + 0xd8, 0xa7, 0x74, 0x8c, 0x1f, 0xab, 0x27, 0x76, + 0x2b, 0xd6, 0xda, 0xad, 0x58, 0xe7, 0x87, 0xda, + 0x82, 0x0f, 0x16, 0xd3, 0x57, 0x75, 0x4a, 0xab, + 0x66, 0x6d, 0x9f, 0x16, 0xb8, 0x8e, 0x76, 0x1e, + 0x16, 0x5d, 0x59, 0x1e, 0x92, 0xbb, 0x89, 0x61, + 0x2c, 0xff, 0x00, 0x45, 0x39, 0x88, 0x99, 0xfd, + 0x33, 0xa3, 0xf8, 0xae, 0x1b, 0x47, 0x25, 0x47, + 0x51, 0x4d, 0x5d, 0xce, 0xd8, 0xca, 0x88, 0x4b, + 0xa2, 0x22, 0x84, 0x88, 0x88, 0x80, 0xa3, 0xf5, + 0x07, 0xaa, 0x67, 0xf9, 0x3e, 0x30, 0x52, 0x0a, + 0x3f, 0x50, 0x7a, 0xa6, 0x7f, 0x93, 0xe3, 0x05, + 0x7b, 0x7b, 0x74, 0xe9, 0x86, 0x58, 0x9e, 0x05, + 0xdd, 0xca, 0xf5, 0x3d, 0xd2, 0xbe, 0xa8, 0x6f, + 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x13, 0xa5, + 0x7d, 0x50, 0xdf, 0x0d, 0xfd, 0xb5, 0x2c, 0xfd, + 0xca, 0x6e, 0xf1, 0x6b, 0xde, 0x94, 0x61, 0xb8, + 0x16, 0xf7, 0x61, 0xce, 0x6e, 0xbf, 0xc9, 0xe3, + 0xca, 0xb3, 0xec, 0x42, 0xbf, 0xaa, 0x05, 0xd7, + 0xf9, 0x3c, 0x79, 0x56, 0x7d, 0x88, 0x57, 0xf5, + 0xcb, 0x67, 0x3d, 0x7b, 0xf2, 0xf6, 0x3e, 0x29, + 0x9b, 0x07, 0xfc, 0x6b, 0x62, 0x22, 0x2d, 0x9e, + 0x68, 0x88, 0x88, 0x3c, 0x71, 0xa3, 0x49, 0x55, + 0xcb, 0xb2, 0xf8, 0x1f, 0x2d, 0xd4, 0xcf, 0xee, + 0x09, 0x35, 0x15, 0xdb, 0x41, 0xd6, 0x56, 0x29, + 0x19, 0xc7, 0x1b, 0x9b, 0xba, 0xa3, 0x7a, 0xa6, + 0xea, 0x18, 0xe7, 0xf3, 0x33, 0x1b, 0x0f, 0x14, + 0x92, 0xb9, 0xb0, 0xb8, 0x92, 0x76, 0x09, 0x1c, + 0x23, 0xd8, 0x3e, 0x52, 0x98, 0xce, 0x2c, 0x7a, + 0x7a, 0x17, 0x45, 0x86, 0xb4, 0xe3, 0xfa, 0xc9, + 0x59, 0xd3, 0x49, 0xe1, 0x4a, 0x7a, 0x43, 0xe3, + 0x29, 0x26, 0xef, 0x5f, 0x2d, 0x63, 0x63, 0x68, + 0x8d, 0xbd, 0xeb, 0x00, 0x68, 0xe6, 0x1b, 0x17, + 0xa3, 0x7a, 0x8e, 0xe8, 0xa2, 0xfb, 0x61, 0xb0, + 0xe9, 0xb0, 0x70, 0x5e, 0x01, 0xdd, 0x5b, 0x4d, + 0x42, 0x7f, 0x55, 0xe2, 0x8b, 0x91, 0xd9, 0xda, + 0xba, 0xf2, 0xf2, 0x1b, 0x46, 0x38, 0x31, 0xd3, + 0xbd, 0xb1, 0xb5, 0xce, 0xef, 0x41, 0x71, 0xa5, + 0x4a, 0xef, 0xda, 0xd6, 0xc3, 0xf1, 0x0d, 0x31, + 0x7f, 0x00, 0x15, 0x77, 0x44, 0x5e, 0xce, 0x76, + 0x77, 0x41, 0x7e, 0x7d, 0x8e, 0x47, 0x45, 0x23, + 0x25, 0x61, 0xa3, 0xa3, 0x70, 0x70, 0x3d, 0x42, + 0x0d, 0x50, 0x5a, 0x2e, 0x74, 0x1d, 0xf0, 0x92, + 0x08, 0x61, 0xba, 0x13, 0x3d, 0xf2, 0xbe, 0x07, + 0x87, 0xb1, 0xec, 0x0c, 0x31, 0x8e, 0x27, 0x39, + 0xbc, 0x5d, 0xf3, 0x69, 0xd4, 0x59, 0xf1, 0xba, + 0x1e, 0x33, 0x34, 0xa2, 0xe2, 0xe7, 0xa4, 0x74, + 0x44, 0x18, 0x5d, 0x18, 0xac, 0x4e, 0x3c, 0x3d, + 0x23, 0x43, 0x89, 0xea, 0xd2, 0x94, 0x5a, 0x92, + 0x6a, 0x7d, 0x4d, 0x93, 0xc8, 0x38, 0xd9, 0x35, + 0xec, 0x93, 0x20, 0xf6, 0x3e, 0x08, 0xc0, 0x2e, + 0xa3, 0xe3, 0x6f, 0x0d, 0x62, 0x2e, 0xdd, 0x5e, + 0x55, 0xab, 0x34, 0x1a, 0xaa, 0xf2, 0xe9, 0xd1, + 0x56, 0x57, 0xcd, 0x33, 0x2b, 0x24, 0x51, 0xbb, + 0x84, 0x06, 0xb0, 0xf0, 0xd1, 0xc0, 0x51, 0xa2, + 0x85, 0x04, 0xac, 0x97, 0x58, 0x3c, 0x3e, 0xa4, + 0x6d, 0xfb, 0x36, 0xf4, 0x8f, 0x6b, 0x8c, 0x0c, + 0x60, 0x74, 0x2c, 0x86, 0x56, 0x52, 0x41, 0xbf, + 0x78, 0xae, 0xe5, 0x92, 0xe3, 0x57, 0x63, 0xb1, + 0xec, 0xe8, 0xb1, 0xaf, 0x7c, 0xb2, 0xb0, 0xc6, + 0x7a, 0x68, 0xdb, 0xd1, 0xb5, 0xdd, 0x13, 0xf6, + 0x03, 0xcb, 0x43, 0x19, 0xa1, 0x51, 0x16, 0x9a, + 0x3f, 0x21, 0x2b, 0x1b, 0x3d, 0xe4, 0x91, 0xda, + 0x41, 0xd1, 0xba, 0x67, 0x97, 0x1e, 0x39, 0x04, + 0x6c, 0x3c, 0x25, 0xfd, 0x1b, 0x2a, 0x4e, 0xdd, + 0x8a, 0x47, 0xf2, 0x4c, 0x36, 0xf6, 0xe4, 0xdc, + 0x49, 0x25, 0xc4, 0x85, 0xc6, 0xb2, 0x40, 0x5a, + 0xd6, 0x45, 0x10, 0x68, 0x94, 0x3e, 0x50, 0xfd, + 0xa3, 0x89, 0xa7, 0x72, 0x0d, 0x37, 0x6b, 0x8c, + 0x93, 0x18, 0x21, 0xb7, 0x63, 0x19, 0x08, 0x2e, + 0xa3, 0x64, 0xee, 0xc9, 0x05, 0xfd, 0x23, 0x01, + 0xaf, 0x2b, 0x39, 0x14, 0x60, 0xc4, 0xe6, 0xaf, + 0x78, 0x2f, 0x19, 0x6b, 0x2c, 0xc2, 0xf5, 0xcf, + 0x31, 0xc8, 0xd6, 0xd4, 0x3d, 0xc0, 0xf7, 0x7b, + 0xba, 0x8a, 0xd9, 0x23, 0xf4, 0xa6, 0x33, 0x8e, + 0x58, 0x44, 0x0d, 0x7b, 0x99, 0x24, 0x76, 0x92, + 0xb0, 0xf4, 0xc5, 0xcd, 0x0c, 0xe2, 0x8e, 0x59, + 0x1a, 0x7b, 0xd7, 0x71, 0xec, 0x5a, 0xb2, 0x6b, + 0xab, 0x66, 0x37, 0x86, 0x1b, 0x79, 0x0f, 0x0f, + 0x77, 0x1b, 0x5a, 0xe1, 0x1c, 0x6d, 0x74, 0x91, + 0x74, 0x53, 0xb3, 0x84, 0x72, 0x13, 0xb4, 0x51, + 0x04, 0x76, 0x2b, 0x47, 0xde, 0x5c, 0x4f, 0x17, + 0x9f, 0xb7, 0xa1, 0x81, 0xe0, 0xf1, 0x35, 0xae, + 0x69, 0x95, 0xb5, 0xa8, 0x8c, 0xb9, 0x9c, 0x8d, + 0x73, 0xb6, 0x55, 0x4d, 0x43, 0xa0, 0x31, 0xf3, + 0xca, 0x65, 0x13, 0xc9, 0x15, 0xbb, 0x84, 0x6e, + 0x8d, 0xa2, 0x8e, 0x20, 0x16, 0x92, 0xe7, 0x3a, + 0xbc, 0x9c, 0x4d, 0xa2, 0xae, 0x9d, 0x57, 0x94, + 0xf3, 0x46, 0xdb, 0x47, 0xc1, 0x1b, 0xd8, 0x1a, + 0xcf, 0x39, 0x03, 0xf8, 0xc5, 0x91, 0xbb, 0x8e, + 0x36, 0x17, 0x57, 0x73, 0x4a, 0xd8, 0xc4, 0x5d, + 0x5f, 0x4e, 0x64, 0xbb, 0xb8, 0x9e, 0x47, 0xb8, + 0x8e, 0x8d, 0xb5, 0x24, 0x0e, 0x1a, 0xd4, 0x8d, + 0x8a, 0x63, 0x3a, 0x25, 0x79, 0x85, 0xba, 0x7e, + 0xd6, 0x77, 0x5b, 0xf0, 0xc4, 0x21, 0xe8, 0x63, + 0x2c, 0x99, 0xce, 0xe3, 0x24, 0x38, 0x77, 0x54, + 0x14, 0xa5, 0x42, 0xad, 0xc8, 0xe6, 0x09, 0x1c, + 0x23, 0x24, 0xb2, 0xa7, 0x84, 0x9d, 0x84, 0x8e, + 0x45, 0x87, 0x89, 0x79, 0xc4, 0xaf, 0x1d, 0x0a, + 0xb2, 0x17, 0x2f, 0x38, 0xd6, 0x3e, 0x25, 0xf3, + 0xc4, 0xa7, 0x28, 0xca, 0x5e, 0x8d, 0x95, 0xd1, + 0xb9, 0xb2, 0xb7, 0xbe, 0x8d, 0xc1, 0xed, 0xe7, + 0x69, 0xe2, 0x58, 0x78, 0x97, 0x9c, 0x7c, 0x8a, + 0xb2, 0x3b, 0x85, 0xa4, 0xed, 0xb9, 0xb4, 0x8a, + 0x76, 0x9a, 0x89, 0x58, 0xd7, 0x83, 0xe1, 0x0a, + 0xaf, 0xa5, 0x0b, 0xa2, 0x2f, 0x3c, 0xeb, 0x4d, + 0xda, 0x54, 0xd5, 0xd0, 0x83, 0x0b, 0xb9, 0xd8, + 0x68, 0x3d, 0xe5, 0x36, 0x77, 0xaa, 0x2e, 0xa8, + 0x6a, 0xe8, 0xdb, 0x6b, 0x9e, 0xc5, 0xe4, 0x68, + 0x07, 0x4a, 0xd7, 0xdb, 0x39, 0xc7, 0xf5, 0x4f, + 0x13, 0x7c, 0x62, 0xa6, 0x31, 0x92, 0x37, 0xce, + 0x03, 0x78, 0xaa, 0x78, 0x76, 0x37, 0xb6, 0x4a, + 0x8b, 0xf6, 0x93, 0x6c, 0x65, 0xd3, 0xa2, 0x66, + 0x77, 0xf6, 0xd7, 0x11, 0xbc, 0x1e, 0xa7, 0x15, + 0x63, 0xf8, 0x57, 0xdd, 0x9c, 0xb2, 0xc6, 0xc8, + 0x1f, 0xc5, 0x57, 0xf0, 0xb0, 0x92, 0x37, 0xd7, + 0x84, 0x56, 0xb5, 0x56, 0x9c, 0xd1, 0x3d, 0xe4, + 0x77, 0x65, 0x67, 0x45, 0xe3, 0x1c, 0x5c, 0xd0, + 0x4f, 0x28, 0x05, 0x7a, 0xaa, 0x91, 0x11, 0x10, + 0x10, 0x6f, 0x08, 0x83, 0x78, 0x41, 0x40, 0xd1, + 0xbf, 0xdf, 0x17, 0xdc, 0xd7, 0x1f, 0x68, 0x17, + 0x48, 0x5c, 0xdf, 0x46, 0xff, 0x00, 0x7c, 0x5f, + 0x73, 0x5c, 0x7d, 0xa0, 0x5d, 0x21, 0x63, 0x87, + 0xd8, 0xf3, 0xa5, 0xe9, 0xfc, 0x67, 0x99, 0xa7, + 0xd5, 0x5b, 0xd4, 0x8b, 0xcd, 0xfd, 0x4c, 0x7e, + 0x1f, 0xc0, 0x56, 0x6b, 0x4f, 0x46, 0x8b, 0xc1, + 0x1d, 0xa5, 0x87, 0x37, 0xf5, 0x31, 0xf8, 0x7f, + 0x01, 0x59, 0xad, 0x3d, 0x1a, 0x2f, 0x04, 0x76, + 0x97, 0x15, 0x9f, 0xec, 0xf1, 0x1e, 0xaa, 0x87, + 0x1d, 0x5c, 0xbd, 0xbd, 0xf9, 0x65, 0x44, 0x45, + 0xe9, 0xb0, 0x11, 0x11, 0x01, 0x45, 0x65, 0xe3, + 0x96, 0x69, 0x18, 0xd6, 0x3f, 0x85, 0xad, 0xa9, + 0x3b, 0x69, 0xb4, 0x29, 0x55, 0x0d, 0x96, 0x89, + 0xc2, 0x57, 0x10, 0xee, 0xe5, 0xcd, 0x04, 0x36, + 0xb4, 0xda, 0x81, 0x82, 0x1d, 0x2d, 0xd5, 0xcd, + 0xc5, 0x6b, 0xd1, 0x35, 0x90, 0x83, 0xfa, 0xc6, + 0xaf, 0x7f, 0xcd, 0x53, 0x91, 0x9e, 0x45, 0x0d, + 0xa6, 0x19, 0x20, 0xc5, 0xf4, 0xb2, 0x80, 0x1f, + 0x3c, 0xd2, 0xbc, 0xd3, 0x75, 0x03, 0xba, 0x36, + 0xd3, 0xdc, 0x6a, 0x98, 0x66, 0xf4, 0x91, 0xcc, + 0x3d, 0xb4, 0xe3, 0xe8, 0x71, 0xd9, 0x16, 0x8d, + 0xfc, 0x70, 0x3c, 0xfe, 0xfb, 0x7e, 0x15, 0xcd, + 0x6d, 0x99, 0x70, 0xfb, 0xa8, 0xa3, 0xb5, 0x71, + 0x64, 0xf2, 0xb8, 0x46, 0xc7, 0x34, 0xf0, 0x9a, + 0xbc, 0xf0, 0xef, 0xf7, 0x57, 0x6d, 0xf6, 0xa9, + 0x8f, 0xf3, 0xbd, 0x25, 0x34, 0xa0, 0x55, 0xd6, + 0x8f, 0x64, 0xc3, 0x98, 0x1e, 0x17, 0x7b, 0xc5, + 0x70, 0xda, 0xf0, 0x90, 0xea, 0x57, 0x84, 0x83, + 0x4e, 0x64, 0x13, 0x77, 0xda, 0x46, 0xea, 0xde, + 0xea, 0x2b, 0x56, 0xdc, 0x47, 0x2c, 0xf2, 0x3d, + 0xcc, 0x90, 0x38, 0x39, 0x9c, 0x0e, 0x68, 0xab, + 0x89, 0x2f, 0x02, 0xa3, 0xae, 0x16, 0xfd, 0xbe, + 0x89, 0x69, 0x89, 0x96, 0xd7, 0x12, 0x86, 0xdf, + 0x1b, 0x80, 0xc7, 0xf0, 0x92, 0xe0, 0x22, 0x31, + 0x99, 0x5a, 0x5b, 0xb2, 0x84, 0xb8, 0x02, 0xb0, + 0x4b, 0xad, 0xdc, 0xd8, 0xd8, 0xdb, 0x5b, 0x62, + 0x3b, 0xb1, 0x23, 0xdb, 0x71, 0x23, 0xa6, 0x68, + 0xa3, 0x4b, 0x38, 0x63, 0x0e, 0xda, 0xd0, 0x6a, + 0xa3, 0x72, 0x1a, 0x9f, 0x2b, 0x7e, 0xe6, 0x97, + 0xc8, 0x22, 0x6b, 0x38, 0x38, 0x1b, 0x10, 0xe1, + 0xa7, 0x47, 0x5e, 0x0d, 0xbb, 0xea, 0x2a, 0x82, + 0xc6, 0xfd, 0x3b, 0x80, 0xb3, 0xc7, 0x39, 0xb3, + 0xb1, 0xf7, 0x05, 0x92, 0xc7, 0x24, 0x97, 0x00, + 0xf4, 0x72, 0x32, 0x09, 0x43, 0x99, 0x5e, 0x1f, + 0x8d, 0xc0, 0xe6, 0xed, 0x5a, 0xad, 0x9e, 0xcf, + 0x4b, 0x6a, 0xeb, 0x61, 0x0b, 0xf8, 0x63, 0xb6, + 0x85, 0xac, 0xb8, 0x95, 0xbb, 0x43, 0x9c, 0xf6, + 0x54, 0xba, 0x9e, 0xe8, 0x55, 0x79, 0x6f, 0xef, + 0x27, 0x9f, 0xce, 0x26, 0x99, 0xf2, 0x4b, 0xb3, + 0xbb, 0x71, 0xa9, 0xd9, 0xb9, 0x7c, 0x5c, 0xdc, + 0xcf, 0x75, 0x3b, 0xee, 0x2e, 0x1e, 0x64, 0x9a, + 0x43, 0x57, 0xbd, 0xdb, 0xc9, 0x41, 0x6d, 0x9f, + 0x59, 0xd8, 0x47, 0x1c, 0x71, 0xd9, 0xdb, 0xbc, + 0x31, 0xae, 0x13, 0xb9, 0x9b, 0x03, 0x7a, 0x72, + 0xf2, 0x64, 0x2d, 0xfd, 0x57, 0x35, 0x46, 0x5c, + 0x6a, 0xb9, 0x1e, 0xf1, 0x3c, 0x36, 0xb1, 0x47, + 0x79, 0xb1, 0xaf, 0xb9, 0x3d, 0xd3, 0x9c, 0xc6, + 0x82, 0xc6, 0xb7, 0x84, 0xec, 0x1d, 0xc9, 0xa1, + 0xea, 0xa8, 0x14, 0x41, 0x21, 0xf8, 0xd6, 0x52, + 0x4b, 0x3f, 0x31, 0x75, 0xc3, 0xbc, 0xd8, 0x52, + 0x8c, 0x14, 0x1b, 0x01, 0xa8, 0x15, 0xdf, 0x41, + 0xd4, 0x5a, 0xf3, 0x4d, 0x34, 0xef, 0xe3, 0x9e, + 0x47, 0x4a, 0xea, 0x53, 0x89, 0xe4, 0xb8, 0xd0, + 0x72, 0x6d, 0x58, 0x99, 0xb9, 0x7d, 0x20, 0x94, + 0xd3, 0xf6, 0x82, 0x6b, 0xce, 0x99, 0xc2, 0xac, + 0x80, 0x57, 0xad, 0xc4, 0x77, 0x2b, 0x41, 0x7a, + 0x8c, 0xc4, 0x5b, 0xf9, 0xad, 0x93, 0x41, 0xd8, + 0xf9, 0x3b, 0xb7, 0xf3, 0x9d, 0xcb, 0x74, 0xb9, + 0x6b, 0x4f, 0x44, 0x29, 0x57, 0x4c, 0xb2, 0x71, + 0xaf, 0x0b, 0xd6, 0x2e, 0x25, 0xe7, 0x12, 0x94, + 0x64, 0x65, 0x2f, 0x5f, 0x3c, 0x6b, 0x1f, 0x12, + 0xf9, 0xe2, 0x51, 0x94, 0x74, 0x6f, 0x67, 0x97, + 0x5d, 0x26, 0x2a, 0x6b, 0x62, 0x76, 0xdb, 0xcc, + 0x69, 0xe0, 0xbf, 0x6a, 0xb3, 0xbc, 0x6d, 0x5c, + 0xff, 0x00, 0xd9, 0xcd, 0xe7, 0x06, 0x52, 0xe2, + 0xd4, 0x9a, 0x09, 0xe2, 0x0f, 0x03, 0xf5, 0x98, + 0x7f, 0xd1, 0x74, 0x17, 0x6e, 0x59, 0xce, 0x75, + 0xe3, 0x32, 0xb1, 0xed, 0x06, 0xcc, 0x5c, 0xe9, + 0xb9, 0x66, 0xa5, 0x5d, 0x67, 0x23, 0x27, 0x1c, + 0xc0, 0xf0, 0x3b, 0xde, 0x72, 0xd5, 0xc1, 0xdd, + 0xb6, 0x6c, 0x6c, 0x12, 0x71, 0x86, 0x8e, 0x10, + 0xc3, 0x4e, 0x4a, 0x6c, 0xa0, 0x56, 0x4c, 0xb5, + 0xa8, 0xbc, 0xc5, 0x5e, 0x5a, 0x91, 0x5e, 0x9a, + 0x09, 0x18, 0x07, 0x5c, 0xb4, 0xd3, 0xdf, 0x54, + 0x1d, 0x0a, 0xe9, 0x3f, 0x0c, 0x9b, 0x89, 0xc0, + 0xb5, 0xb3, 0x02, 0xd6, 0x9e, 0xbb, 0x76, 0xa9, + 0xff, 0x00, 0xe6, 0x7b, 0x24, 0xee, 0xba, 0x43, + 0x08, 0x2c, 0x69, 0x1b, 0x88, 0x14, 0x5e, 0xad, + 0x2c, 0x54, 0xaf, 0x92, 0xda, 0x8e, 0x24, 0xf0, + 0x6c, 0x04, 0xd2, 0xb4, 0x5b, 0xaa, 0xa9, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x46, 0x65, 0xbe, 0xba, + 0x1e, 0x63, 0xdb, 0x53, 0x6d, 0xef, 0x47, 0x32, + 0x84, 0xcb, 0x7d, 0x74, 0x3c, 0xc7, 0xb6, 0xa6, + 0xdb, 0xde, 0x8e, 0x65, 0xe7, 0x60, 0xf9, 0xec, + 0x76, 0x9b, 0x5f, 0xa6, 0x5d, 0x17, 0x78, 0x36, + 0x74, 0x55, 0xad, 0x86, 0xf3, 0xd1, 0x66, 0xf2, + 0x6f, 0xf1, 0x4a, 0xa9, 0x68, 0x4d, 0xd7, 0x9f, + 0xca, 0xf9, 0xea, 0xdb, 0x79, 0xe8, 0xb3, 0x79, + 0x37, 0xf8, 0xa5, 0x54, 0xb4, 0x26, 0xeb, 0xcf, + 0xe5, 0x7c, 0xf5, 0xea, 0xd3, 0xb1, 0x57, 0x79, + 0xc3, 0x5f, 0x1a, 0xd7, 0x9c, 0xb5, 0xa2, 0x22, + 0xcd, 0xb0, 0x88, 0x88, 0x0b, 0x57, 0x23, 0xc6, + 0x6d, 0x5c, 0xd6, 0x1a, 0x39, 0xdb, 0x01, 0x5b, + 0x4b, 0x4b, 0x29, 0x1b, 0x9d, 0x0b, 0x5c, 0xd7, + 0x70, 0xf0, 0xbb, 0x6f, 0x31, 0x41, 0x5c, 0xbf, + 0x89, 0xef, 0x75, 0xae, 0x2d, 0xce, 0xe3, 0x75, + 0xd5, 0xc4, 0x71, 0xb8, 0x83, 0x5f, 0xe1, 0x83, + 0xd2, 0x49, 0xfb, 0xad, 0x57, 0x10, 0x47, 0x15, + 0x46, 0xc5, 0x51, 0xc6, 0xc5, 0x24, 0xda, 0xae, + 0x00, 0xe0, 0x3a, 0x2b, 0x6b, 0x79, 0x67, 0x6e, + 0xda, 0x92, 0xe7, 0x11, 0x08, 0x27, 0xb2, 0x55, + 0xb5, 0x4c, 0xf7, 0x07, 0xd5, 0xcc, 0x4d, 0x9e, + 0xde, 0x58, 0x5c, 0x2a, 0xd9, 0x18, 0xe6, 0x11, + 0xd6, 0x22, 0x8b, 0xf3, 0x56, 0x46, 0xd8, 0xda, + 0x5f, 0xdc, 0x5b, 0x38, 0x50, 0xc3, 0x2b, 0xd9, + 0x4e, 0x62, 0xbf, 0x4c, 0x03, 0xb0, 0x15, 0xc1, + 0x7d, 0xa4, 0x58, 0x79, 0x96, 0xad, 0xbc, 0x00, + 0x51, 0x93, 0x91, 0x2b, 0x7e, 0x50, 0xda, 0xa0, + 0x47, 0x62, 0x70, 0xb6, 0xf7, 0x56, 0x53, 0x64, + 0x72, 0x17, 0x5e, 0x65, 0x63, 0x13, 0xdb, 0x0f, + 0x48, 0x1a, 0x64, 0x73, 0xa4, 0x70, 0xa8, 0x1c, + 0x23, 0x92, 0x83, 0x6a, 0xd9, 0xb7, 0xd2, 0x52, + 0xdc, 0xb4, 0xba, 0x2b, 0xc8, 0x8b, 0x66, 0x95, + 0xf1, 0x58, 0x92, 0x1c, 0x3a, 0x73, 0x18, 0xe2, + 0x77, 0x0e, 0xce, 0xe7, 0x66, 0xea, 0xad, 0x4c, + 0x46, 0x6e, 0x4b, 0x18, 0x26, 0xb2, 0x96, 0xd9, + 0x97, 0xf6, 0x57, 0x0e, 0x12, 0x3e, 0xda, 0x4a, + 0xd3, 0x8d, 0xbb, 0x9e, 0xd2, 0xdd, 0xa0, 0xad, + 0xf6, 0x67, 0x75, 0x55, 0xd9, 0x9a, 0xe2, 0xd5, + 0x9c, 0x16, 0xf7, 0x2e, 0xe1, 0x69, 0x6b, 0x1a, + 0x23, 0x8c, 0xb5, 0xb4, 0xe1, 0x89, 0xce, 0xef, + 0x4f, 0x0f, 0x51, 0x04, 0xa4, 0x3a, 0x63, 0x05, + 0x14, 0x37, 0x78, 0xd7, 0xf4, 0x97, 0x39, 0x13, + 0x6d, 0x1d, 0xdc, 0x72, 0x9a, 0x46, 0x1a, 0xd2, + 0x47, 0x18, 0x8f, 0x6e, 0xda, 0x0a, 0xd5, 0x6c, + 0x5c, 0x5a, 0xe9, 0x1c, 0x55, 0xf5, 0xb4, 0x8e, + 0x8e, 0x19, 0x2c, 0xcf, 0x17, 0x48, 0x4b, 0xb8, + 0xcc, 0xb1, 0x35, 0xa1, 0xcd, 0x7b, 0x5a, 0x37, + 0x3c, 0xbb, 0x62, 0xa7, 0x32, 0xd3, 0x37, 0x7c, + 0x62, 0x95, 0x91, 0x5c, 0x4f, 0xc5, 0xfc, 0x08, + 0x64, 0xa3, 0xa8, 0x69, 0xf1, 0x1a, 0xe5, 0xb8, + 0xcd, 0x1f, 0x9a, 0x74, 0x4f, 0x79, 0x64, 0x71, + 0xc8, 0xde, 0x2e, 0x08, 0x1c, 0xf1, 0xd2, 0x3f, + 0x83, 0x6b, 0xf8, 0x00, 0xdf, 0xc3, 0xca, 0x83, + 0xe6, 0xfb, 0x35, 0x3c, 0x17, 0x93, 0x7e, 0x19, + 0x75, 0x5b, 0x69, 0x25, 0x37, 0x11, 0xb9, 0xac, + 0xe0, 0x2d, 0x74, 0x82, 0x85, 0xb4, 0xe4, 0xa0, + 0xd9, 0xb1, 0x69, 0x0c, 0xbe, 0x51, 0xa2, 0x5a, + 0x5d, 0xc9, 0xfc, 0x70, 0x1b, 0x29, 0x2e, 0xda, + 0xe0, 0x36, 0xd0, 0x9e, 0xa2, 0x9f, 0x83, 0x45, + 0xc0, 0x2f, 0xd9, 0x69, 0x71, 0x76, 0xe9, 0x1f, + 0x1b, 0x4b, 0xae, 0xa2, 0x8d, 0x85, 0xbd, 0xd7, + 0x07, 0x48, 0xd8, 0xa3, 0x91, 0xdd, 0xc9, 0x73, + 0xb7, 0x2d, 0xd6, 0xe1, 0xf4, 0xd6, 0x31, 0x9d, + 0x25, 0xd4, 0x1d, 0x21, 0x91, 0xf0, 0x19, 0x20, + 0xba, 0x79, 0x6c, 0xb0, 0xc3, 0x3d, 0x5a, 0xea, + 0xb5, 0xb4, 0xab, 0x98, 0x76, 0xa0, 0xaf, 0x5c, + 0x6a, 0x2c, 0xfc, 0xa4, 0x35, 0xd3, 0x3e, 0x2e, + 0x22, 0xc9, 0x5a, 0xc6, 0x37, 0x87, 0xba, 0x63, + 0x38, 0x1a, 0xf1, 0xf2, 0x57, 0x98, 0xec, 0x0e, + 0x4b, 0x21, 0x37, 0x46, 0xf0, 0xfb, 0x76, 0xc9, + 0x1b, 0xee, 0x18, 0xf9, 0x5a, 0xe0, 0xd9, 0x03, + 0x3b, 0xa7, 0x70, 0xf2, 0x13, 0x4d, 0xca, 0xcb, + 0x7d, 0xa9, 0xb1, 0xb1, 0xd9, 0x3d, 0xb0, 0xce, + 0xc3, 0x73, 0x1d, 0xb3, 0xac, 0xe3, 0x0c, 0x8c, + 0x12, 0xd3, 0x13, 0xeb, 0x1c, 0x8d, 0x71, 0x1b, + 0x9c, 0xcd, 0x8b, 0x59, 0xfa, 0xd9, 0xb2, 0xba, + 0x3f, 0x35, 0xb6, 0x91, 0xd3, 0xcf, 0x23, 0x0c, + 0xd1, 0x4a, 0xfa, 0xc4, 0xde, 0x16, 0x18, 0xcb, + 0x61, 0x03, 0xbd, 0x0e, 0xaa, 0x0d, 0x8c, 0x3e, + 0x8b, 0xbb, 0xb7, 0x9e, 0xee, 0x66, 0xc8, 0xc7, + 0x47, 0x19, 0x11, 0xdb, 0xc8, 0xfe, 0xe4, 0xc8, + 0x0b, 0x04, 0xa4, 0xb7, 0x90, 0x6c, 0x2a, 0x72, + 0xdf, 0x03, 0x64, 0x6e, 0x5d, 0x6b, 0x34, 0xef, + 0x92, 0x66, 0xc7, 0x1c, 0x9c, 0x2c, 0x69, 0x6b, + 0x7f, 0x89, 0xbb, 0xba, 0xa1, 0xdd, 0xca, 0xa2, + 0xff, 0x00, 0x1f, 0xc8, 0x88, 0xc4, 0x4d, 0x73, + 0x5a, 0xc0, 0xc6, 0xb0, 0x0e, 0x1e, 0x2a, 0x70, + 0x8e, 0x1e, 0x21, 0x5f, 0x8d, 0x45, 0xa6, 0xeb, + 0xcb, 0x97, 0xbc, 0x3d, 0xd2, 0xbc, 0xbc, 0x34, + 0x30, 0x3a, 0xa4, 0x1e, 0x11, 0xb8, 0x2b, 0xc6, + 0x58, 0x8c, 0x8a, 0x4e, 0x49, 0x96, 0x4b, 0x86, + 0x18, 0x27, 0x92, 0x17, 0x10, 0x5d, 0x13, 0xcb, + 0x09, 0x06, 0xa3, 0x61, 0xea, 0xac, 0x5c, 0x4b, + 0x1f, 0x1a, 0xf0, 0xb9, 0x5b, 0x2a, 0x19, 0x0b, + 0x97, 0x85, 0xcb, 0x1f, 0x12, 0xf9, 0xe2, 0x4c, + 0xa9, 0x5c, 0xfd, 0x9c, 0x5e, 0x70, 0xe4, 0xae, + 0xad, 0x09, 0xfa, 0xe8, 0x9b, 0x23, 0x47, 0x5d, + 0x86, 0x86, 0x8b, 0xa0, 0x3f, 0x91, 0x72, 0x4d, + 0x21, 0x79, 0xe6, 0xba, 0x8e, 0xc9, 0xe4, 0xd1, + 0xb2, 0x38, 0xc4, 0xee, 0x67, 0x85, 0xd7, 0x1d, + 0xb9, 0x67, 0x56, 0x75, 0xa3, 0x33, 0x19, 0x6b, + 0x5c, 0x0b, 0x5c, 0x2a, 0xd7, 0x0a, 0x38, 0x75, + 0x8e, 0xc2, 0xb9, 0xf6, 0x98, 0x68, 0xb1, 0xbb, + 0xbe, 0xc5, 0x9a, 0x34, 0xdb, 0x4e, 0xf6, 0xd3, + 0xaa, 0x1a, 0x48, 0x15, 0xf7, 0x17, 0x41, 0x5c, + 0xfb, 0x21, 0x6d, 0x25, 0xbf, 0xb4, 0x59, 0x0c, + 0x67, 0x81, 0x97, 0x30, 0x89, 0x5f, 0xd4, 0x3c, + 0x4c, 0xe1, 0x3f, 0xbc, 0xd5, 0x34, 0xf4, 0xc4, + 0xc7, 0x66, 0x5f, 0x01, 0x3d, 0xc5, 0xdb, 0x18, + 0xf6, 0xbe, 0xda, 0xa1, 0xc5, 0xdd, 0xd1, 0xab, + 0xba, 0xeb, 0x6d, 0x43, 0xe2, 0x66, 0x78, 0x9c, + 0xc7, 0x5e, 0xe5, 0xc0, 0x54, 0x72, 0x6c, 0x1b, + 0xc2, 0x98, 0x55, 0x48, 0x88, 0x88, 0x08, 0x88, + 0x82, 0x3b, 0x51, 0xfa, 0x8e, 0xf3, 0xc9, 0xfc, + 0xe6, 0xad, 0x7d, 0x0d, 0xea, 0x67, 0x79, 0x77, + 0xf6, 0x9a, 0xb6, 0x35, 0x1f, 0xa8, 0xef, 0x3c, + 0x9f, 0xce, 0x6a, 0xd7, 0xd0, 0xde, 0xa6, 0x77, + 0x97, 0x7f, 0x69, 0xaa, 0xf1, 0xc3, 0x9d, 0x2c, + 0x67, 0x98, 0xa7, 0x72, 0x75, 0xac, 0x48, 0x88, + 0xa8, 0xd8, 0x44, 0x44, 0x04, 0x44, 0x40, 0x5a, + 0xb9, 0x0f, 0x42, 0xb9, 0xf2, 0x4f, 0xf1, 0x4a, + 0xda, 0x5a, 0xb9, 0x0f, 0x42, 0xb9, 0xf2, 0x4f, + 0xf1, 0x4a, 0x9a, 0x73, 0xc2, 0xb7, 0x36, 0x2a, + 0xd1, 0x3a, 0x90, 0x5a, 0x4f, 0xd1, 0xee, 0x3c, + 0x36, 0xf8, 0xaa, 0x79, 0x40, 0xe9, 0x3f, 0x47, + 0xb8, 0xf0, 0xdb, 0xe2, 0xa9, 0xe5, 0xa6, 0x23, + 0x8b, 0x56, 0x9f, 0xb9, 0x86, 0x07, 0x96, 0xb7, + 0xa2, 0x75, 0x88, 0x88, 0xb2, 0x74, 0x88, 0x88, + 0x83, 0x4f, 0x26, 0xe7, 0x74, 0x6d, 0x63, 0x49, + 0x05, 0xc7, 0x61, 0x02, 0xbb, 0x94, 0x16, 0x0e, + 0xd6, 0x4f, 0xcd, 0x77, 0x97, 0x2f, 0xda, 0x05, + 0x9c, 0x6c, 0x69, 0xdd, 0xb5, 0xcf, 0xa9, 0xf1, + 0x54, 0xa6, 0x5c, 0x48, 0x67, 0x8c, 0x0d, 0x8d, + 0xe1, 0x35, 0x3c, 0x83, 0x69, 0x5a, 0x7a, 0x69, + 0xf1, 0xc9, 0x93, 0xc9, 0xf0, 0x48, 0x25, 0xe8, + 0x84, 0x31, 0x97, 0x0d, 0xbb, 0x68, 0xe3, 0xc8, + 0xa6, 0x3b, 0xa8, 0x95, 0x92, 0x33, 0xb6, 0x8a, + 0x8f, 0xed, 0x86, 0xc0, 0xcf, 0xa7, 0x22, 0xbb, + 0x68, 0xdb, 0x69, 0x3b, 0x49, 0xf0, 0x5e, 0x38, + 0x0a, 0xbb, 0x34, 0xd1, 0xc1, 0x46, 0x6b, 0x0b, + 0x11, 0x7f, 0xa6, 0x72, 0x36, 0xb4, 0xa9, 0x74, + 0x0e, 0x73, 0x7c, 0x26, 0x0e, 0x31, 0xda, 0x50, + 0x97, 0xe7, 0xcb, 0x0b, 0xb7, 0x58, 0xdf, 0x5b, + 0x5e, 0xb7, 0x69, 0xb7, 0x95, 0x92, 0x53, 0xab, + 0xc2, 0x41, 0xa2, 0x9c, 0xbf, 0xd7, 0x13, 0x4c, + 0xe7, 0x79, 0xbd, 0xb8, 0x67, 0x11, 0x93, 0x89, + 0xee, 0x35, 0x73, 0xda, 0xee, 0x1e, 0x8c, 0xbe, + 0x9f, 0x19, 0x9c, 0x21, 0x57, 0x0e, 0xd0, 0xb1, + 0x20, 0x99, 0xb8, 0xd5, 0x79, 0x79, 0xd8, 0xf6, + 0x17, 0xb5, 0x9c, 0x64, 0x9e, 0x26, 0xb4, 0x07, + 0xb4, 0x12, 0x1c, 0x5a, 0xd7, 0xef, 0x0d, 0xa8, + 0xdc, 0xa3, 0x5f, 0x7b, 0x77, 0x20, 0x90, 0x3a, + 0x67, 0x91, 0x33, 0x8b, 0xe5, 0x6f, 0x11, 0xa3, + 0x9c, 0x76, 0xd4, 0x85, 0x81, 0x10, 0x11, 0x11, + 0x01, 0x7d, 0xb3, 0x72, 0xf8, 0x59, 0x1b, 0xde, + 0x84, 0x1e, 0xab, 0x56, 0x1e, 0xdb, 0xcd, 0xac, + 0x9a, 0x0f, 0x7f, 0x27, 0x76, 0xff, 0x00, 0x77, + 0x72, 0xaf, 0xe3, 0x6d, 0xbc, 0xe6, 0xed, 0x8c, + 0x3d, 0xe3, 0x7b, 0xa7, 0xf3, 0x05, 0x68, 0xe2, + 0x56, 0xa5, 0x5a, 0x99, 0x38, 0x97, 0x85, 0xeb, + 0x19, 0x72, 0xf9, 0x2e, 0x57, 0xca, 0xab, 0x29, + 0x7a, 0xf0, 0xb9, 0x62, 0x2e, 0x5e, 0x71, 0x28, + 0x4b, 0x21, 0x72, 0xba, 0x7b, 0x36, 0xbc, 0xfe, + 0x35, 0xed, 0x99, 0x3d, 0xf0, 0x6c, 0xcd, 0x1f, + 0xba, 0x55, 0x18, 0xb9, 0x4f, 0xe8, 0x6b, 0xc1, + 0x6f, 0xa8, 0xed, 0xda, 0x4d, 0x05, 0xc3, 0x5d, + 0x11, 0xe7, 0x22, 0xa1, 0x44, 0xe6, 0x23, 0x3b, + 0xaa, 0x3f, 0x68, 0xaa, 0xf8, 0x59, 0x1d, 0xb9, + 0x63, 0x54, 0x5d, 0x4e, 0xd7, 0xb7, 0x72, 0xe3, + 0xef, 0x71, 0x17, 0xd1, 0x35, 0xae, 0xab, 0xa4, + 0x86, 0x40, 0xed, 0xa0, 0xb4, 0xf0, 0x1a, 0x76, + 0xd4, 0xae, 0x2d, 0xd1, 0x8b, 0xd6, 0xf4, 0x42, + 0xac, 0x7b, 0x78, 0xaa, 0xed, 0xe2, 0xa2, 0xa2, + 0x8b, 0x47, 0x5f, 0x59, 0x32, 0xf2, 0x0c, 0x64, + 0x6e, 0x77, 0x00, 0xf3, 0xba, 0x71, 0x73, 0xb0, + 0xff, 0x00, 0xa2, 0xdf, 0xc6, 0xc4, 0x5b, 0x77, + 0x18, 0x6b, 0x8d, 0x18, 0xda, 0x3a, 0xbb, 0x6a, + 0x00, 0xa0, 0x56, 0x9d, 0x98, 0xef, 0xa3, 0xbb, + 0x29, 0xb4, 0x44, 0x55, 0x48, 0x88, 0x88, 0x0a, + 0x3f, 0x50, 0x7a, 0xa6, 0x7f, 0x93, 0xe3, 0x05, + 0x20, 0xa3, 0xf5, 0x07, 0xaa, 0x67, 0xf9, 0x3e, + 0x30, 0x57, 0xb7, 0xb7, 0x4e, 0x98, 0x65, 0x89, + 0xe0, 0x5d, 0xdc, 0xaf, 0x53, 0xdd, 0x2b, 0xea, + 0x86, 0xf8, 0x6f, 0xed, 0xa9, 0x67, 0xee, 0x51, + 0x3a, 0x57, 0xd5, 0x0d, 0xf0, 0xdf, 0xdb, 0x52, + 0xcf, 0xdc, 0xa6, 0xef, 0x16, 0xbd, 0xe9, 0x46, + 0x1b, 0x81, 0x6f, 0x76, 0x1c, 0xe6, 0xeb, 0xfc, + 0x9e, 0x3c, 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xa0, + 0x5d, 0x7f, 0x93, 0xc7, 0x95, 0x67, 0xd8, 0x85, + 0x7f, 0x5c, 0xb6, 0x73, 0xd7, 0xbf, 0x2f, 0x63, + 0xe2, 0x99, 0xb0, 0x7f, 0xc6, 0xb6, 0x22, 0x22, + 0xd9, 0xe6, 0x88, 0x88, 0x83, 0xe6, 0x47, 0x70, + 0xc6, 0xe7, 0x75, 0x01, 0x55, 0xab, 0xbb, 0x79, + 0x2e, 0x2e, 0x6c, 0xda, 0xe3, 0x56, 0x79, 0xdc, + 0x2f, 0x20, 0x8a, 0x10, 0x1a, 0xee, 0x2d, 0xbd, + 0x85, 0x3f, 0x90, 0xe2, 0xf3, 0x39, 0x78, 0x6b, + 0x5a, 0x0d, 0xdc, 0xe1, 0x41, 0xc2, 0xe0, 0xdc, + 0x9d, 0x8c, 0x6e, 0x90, 0x74, 0x8f, 0x90, 0xd2, + 0x2e, 0x5e, 0xe5, 0x8e, 0x72, 0x40, 0xb2, 0x22, + 0x22, 0x04, 0xb1, 0xb6, 0x68, 0x1f, 0x13, 0xb6, + 0xb6, 0x46, 0x96, 0x91, 0xce, 0x28, 0xbf, 0x36, + 0xe5, 0x6d, 0x1d, 0x67, 0x92, 0xba, 0xb5, 0x70, + 0xa1, 0x86, 0x57, 0xb3, 0xdc, 0x07, 0x62, 0xfd, + 0x28, 0xd3, 0xb3, 0x99, 0x70, 0xcf, 0x69, 0x76, + 0x1e, 0x67, 0xaa, 0xee, 0x8b, 0x45, 0x19, 0x70, + 0x1b, 0x28, 0xf9, 0x42, 0x87, 0xdf, 0x41, 0x21, + 0x84, 0xd5, 0xb8, 0x7b, 0x2c, 0x1e, 0x39, 0x97, + 0x63, 0x8a, 0xf7, 0x1f, 0xd3, 0x1b, 0x77, 0x30, + 0x77, 0x6c, 0x93, 0xe2, 0x13, 0xfa, 0xae, 0xaa, + 0xd3, 0xbd, 0xd6, 0xf6, 0x92, 0x97, 0xc6, 0xcb, + 0x2e, 0x9a, 0x09, 0x4b, 0xfa, 0x56, 0xbd, 0xdc, + 0x04, 0xb5, 0xfc, 0x2f, 0xe1, 0x05, 0xbb, 0x45, + 0x1e, 0xda, 0xaa, 0x82, 0x20, 0x97, 0xb8, 0xd5, + 0x19, 0x49, 0x26, 0x8a, 0x58, 0x0b, 0x6d, 0x0d, + 0xb9, 0x7f, 0x42, 0x21, 0x14, 0xe1, 0x64, 0x87, + 0x6b, 0x09, 0x3b, 0xc2, 0x8f, 0x9e, 0xfa, 0xf2, + 0xe2, 0x59, 0x25, 0x9a, 0x67, 0xbd, 0xf3, 0x7d, + 0x69, 0x2e, 0x3d, 0xd7, 0x3a, 0xc0, 0x88, 0x08, + 0x88, 0x83, 0xea, 0x38, 0xdd, 0x2c, 0x8d, 0x8d, + 0x82, 0xae, 0x71, 0xa0, 0x56, 0x6b, 0x76, 0x36, + 0x08, 0x19, 0x13, 0x77, 0x34, 0x51, 0x45, 0x61, + 0xa1, 0x15, 0x7d, 0xc3, 0xb9, 0x3b, 0x86, 0x7c, + 0x2a, 0x4f, 0x89, 0x5a, 0x3a, 0x15, 0x96, 0x52, + 0xe5, 0xe1, 0x72, 0xc4, 0x5c, 0xbc, 0x2e, 0x53, + 0x95, 0x0c, 0x85, 0xcb, 0xce, 0x25, 0x8c, 0xb9, + 0x78, 0x5c, 0x89, 0x64, 0xe2, 0x5e, 0x17, 0x2c, + 0x45, 0xcb, 0xc2, 0xe4, 0x1d, 0x1f, 0xd9, 0x7d, + 0xe7, 0x15, 0xb5, 0xed, 0x91, 0x3f, 0x57, 0x20, + 0x95, 0xa3, 0xac, 0xf1, 0x43, 0xef, 0x85, 0x77, + 0x3b, 0xd7, 0x2a, 0xf6, 0x71, 0x7a, 0x20, 0xd4, + 0x5d, 0x09, 0x34, 0x6d, 0xd4, 0x4e, 0x67, 0xba, + 0xde, 0xe8, 0x2e, 0xaa, 0x55, 0x65, 0x68, 0x42, + 0x6b, 0x28, 0xfa, 0x4d, 0x31, 0x90, 0xa6, 0xf6, + 0x44, 0x24, 0x1c, 0xec, 0x73, 0x5d, 0xf0, 0x28, + 0x0d, 0x39, 0x7d, 0xe7, 0xd8, 0x68, 0x6e, 0x26, + 0x00, 0x5c, 0x46, 0xf3, 0x11, 0xa0, 0x3c, 0x26, + 0x9b, 0x89, 0x56, 0x9d, 0x42, 0xce, 0x3c, 0x0e, + 0x45, 0x9d, 0x5b, 0x69, 0x7c, 0x42, 0x55, 0x53, + 0x4b, 0x5a, 0x36, 0xdf, 0x09, 0x18, 0x6c, 0x8e, + 0x7f, 0x4a, 0xe3, 0x26, 0xca, 0x6c, 0x27, 0x67, + 0xc0, 0xa7, 0xff, 0x00, 0x89, 0xd2, 0x8e, 0xea, + 0xf1, 0x09, 0xe2, 0x85, 0x86, 0x94, 0xab, 0x46, + 0xc1, 0xbb, 0x72, 0xfb, 0x58, 0xed, 0xc1, 0x6c, + 0x11, 0x87, 0x1a, 0x90, 0xd0, 0x09, 0xea, 0xec, + 0x59, 0x15, 0x52, 0x22, 0x22, 0x02, 0x0d, 0xe1, + 0x10, 0x6f, 0x08, 0x28, 0x1a, 0x37, 0xfb, 0xe2, + 0xfb, 0x9a, 0xe3, 0xed, 0x02, 0xe9, 0x0b, 0x9b, + 0xe8, 0xdf, 0xef, 0x8b, 0xee, 0x6b, 0x8f, 0xb4, + 0x0b, 0xa4, 0x2c, 0x70, 0xfb, 0x1e, 0x74, 0xbd, + 0x3f, 0x8c, 0xf3, 0x34, 0xfa, 0xab, 0x7a, 0x91, + 0x79, 0xbf, 0xa9, 0x8f, 0xc3, 0xf8, 0x0a, 0xcd, + 0x69, 0xe8, 0xd1, 0x78, 0x23, 0xb4, 0xb0, 0xe6, + 0xfe, 0xa6, 0x3f, 0x0f, 0xe0, 0x2b, 0x35, 0xa7, + 0xa3, 0x45, 0xe0, 0x8e, 0xd2, 0xe2, 0xb3, 0xfd, + 0x9e, 0x23, 0xd5, 0x50, 0xe3, 0xab, 0x97, 0xb7, + 0xbf, 0x2c, 0xa8, 0x88, 0xbd, 0x36, 0x02, 0x22, + 0x20, 0x28, 0x9c, 0x9b, 0x9e, 0xf9, 0xc8, 0x69, + 0xa0, 0x68, 0xa1, 0xa8, 0xa8, 0x2a, 0x59, 0x57, + 0xaf, 0xc9, 0x13, 0x5c, 0x3e, 0x49, 0x04, 0x4d, + 0x0e, 0x71, 0x0e, 0x71, 0xe4, 0x15, 0xea, 0xa0, + 0x96, 0xc4, 0xc5, 0xd0, 0xe3, 0x2d, 0xa2, 0xfd, + 0x18, 0xc5, 0x79, 0xce, 0xd3, 0xef, 0x95, 0xb8, + 0x37, 0xac, 0x36, 0x80, 0x8b, 0x58, 0xab, 0xfa, + 0x0d, 0xed, 0x2c, 0xa8, 0x35, 0xb3, 0x96, 0x62, + 0xfb, 0x0f, 0x7b, 0x66, 0x45, 0x7a, 0x78, 0x1e, + 0xca, 0x75, 0xcb, 0x4d, 0x3d, 0xf5, 0xf9, 0xb5, + 0xed, 0x2d, 0x25, 0xa7, 0x78, 0x24, 0x1e, 0x70, + 0xbf, 0x4f, 0x8d, 0xa3, 0x6a, 0xfc, 0xe9, 0xaa, + 0xec, 0xbc, 0xc3, 0x51, 0xe4, 0x6d, 0x40, 0xa3, + 0x59, 0x3b, 0xcb, 0x7c, 0x17, 0x1e, 0x31, 0xdb, + 0x41, 0x0a, 0x88, 0x76, 0x14, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x41, 0x91, 0xbb, 0x82, 0xdb, 0xc6, + 0x5b, 0x0b, 0x8b, 0xb6, 0x35, 0xdb, 0x58, 0xde, + 0xe9, 0xfc, 0xc1, 0x6a, 0x37, 0x72, 0x9e, 0xc3, + 0xc1, 0xd1, 0x5b, 0x99, 0x08, 0xee, 0xe5, 0xdb, + 0xee, 0x05, 0x30, 0x89, 0x4a, 0x71, 0x2f, 0x0b, + 0x96, 0x3e, 0x25, 0xe1, 0x72, 0xba, 0xac, 0x85, + 0xcb, 0xce, 0x25, 0x88, 0xb9, 0x38, 0x90, 0x64, + 0xe2, 0x5e, 0x71, 0x2c, 0x7c, 0x4b, 0xe7, 0x89, + 0x46, 0x51, 0x39, 0xa4, 0xef, 0x45, 0xa6, 0xa1, + 0xb2, 0x90, 0x9a, 0x35, 0xef, 0x31, 0x38, 0xf5, + 0x9e, 0x28, 0xba, 0xe3, 0xb7, 0x2e, 0x13, 0x0c, + 0xe6, 0x29, 0x99, 0x28, 0x34, 0x31, 0xbd, 0xaf, + 0x07, 0xc1, 0x35, 0x5d, 0xca, 0xda, 0x51, 0x71, + 0x6d, 0x1c, 0xc3, 0x68, 0x95, 0x8d, 0x70, 0xf7, + 0x45, 0x55, 0x6a, 0x5a, 0x1f, 0x60, 0x6d, 0xa1, + 0xe5, 0xd8, 0xb9, 0x96, 0x90, 0x94, 0xc7, 0x98, + 0xc8, 0xe2, 0xa6, 0xfa, 0xa8, 0xfa, 0x57, 0x36, + 0x83, 0x68, 0x73, 0x24, 0xe1, 0xf8, 0x57, 0x4c, + 0x1b, 0xd7, 0x37, 0xc4, 0xdb, 0x70, 0x6b, 0x2c, + 0xb4, 0xad, 0x7f, 0x09, 0x64, 0x93, 0x37, 0x80, + 0x72, 0x87, 0xba, 0xaa, 0x69, 0xcd, 0x54, 0x76, + 0x65, 0x27, 0x3c, 0x2e, 0xf8, 0x47, 0x03, 0x0c, + 0x80, 0x01, 0x46, 0x9d, 0x87, 0x96, 0x9d, 0x75, + 0x22, 0xa3, 0xb0, 0xcd, 0x2d, 0x64, 0xb4, 0x24, + 0xb4, 0xbb, 0xb9, 0x07, 0x7a, 0x91, 0x55, 0x48, + 0x88, 0x88, 0x08, 0x88, 0x82, 0x33, 0x2d, 0xf5, + 0xd0, 0xf3, 0x1e, 0xda, 0x9b, 0x6f, 0x7a, 0x39, + 0x94, 0x26, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, 0xb5, + 0x36, 0xde, 0xf4, 0x73, 0x2f, 0x3b, 0x07, 0xcf, + 0x63, 0xb4, 0xda, 0xfd, 0x32, 0xe8, 0xbb, 0xc1, + 0xb3, 0xa2, 0xad, 0x6c, 0x37, 0x9e, 0x8b, 0x37, + 0x93, 0x7f, 0x8a, 0x55, 0x4b, 0x42, 0x6e, 0xbc, + 0xfe, 0x57, 0xcf, 0x56, 0xdb, 0xcf, 0x45, 0x9b, + 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, 0x5e, + 0x7f, 0x2b, 0xe7, 0xaf, 0x56, 0x9d, 0x8a, 0xbb, + 0xce, 0x1a, 0xf8, 0xd6, 0xbc, 0xe5, 0xad, 0x11, + 0x16, 0x6d, 0x84, 0x44, 0x40, 0x5a, 0x99, 0x27, + 0x3b, 0xa1, 0x0d, 0x69, 0x21, 0xce, 0x3b, 0x08, + 0x15, 0xa2, 0xdb, 0x51, 0x99, 0x8e, 0x3e, 0x38, + 0xb8, 0x76, 0x0a, 0x1a, 0x9e, 0x41, 0xb5, 0x06, + 0xa6, 0x0e, 0xd9, 0xe3, 0x31, 0x79, 0x72, 0xf3, + 0x5a, 0xc1, 0x14, 0x6d, 0x3b, 0xb7, 0xba, 0x47, + 0x1a, 0x7b, 0xca, 0x79, 0x43, 0xe9, 0xf7, 0x31, + 0xd2, 0xde, 0x96, 0xc8, 0x24, 0xe0, 0x7b, 0x18, + 0x5c, 0x36, 0xed, 0xe0, 0xad, 0x36, 0x73, 0xa9, + 0x85, 0x33, 0x9c, 0x64, 0x8c, 0x8e, 0x1e, 0x65, + 0xca, 0x3d, 0xb3, 0x58, 0x06, 0x5f, 0x58, 0xdf, + 0x81, 0xb2, 0x56, 0x18, 0x9f, 0xce, 0xd3, 0x50, + 0xba, 0xab, 0x37, 0xd1, 0x53, 0x3d, 0xad, 0xd8, + 0xf9, 0xc6, 0x99, 0x17, 0x00, 0x55, 0xd6, 0xb2, + 0xb5, 0xde, 0xe3, 0xbb, 0x92, 0xa0, 0x73, 0x1d, + 0x13, 0x7d, 0x15, 0x86, 0xa4, 0xb5, 0x9a, 0x6e, + 0x0e, 0x8d, 0xdc, 0x4c, 0x71, 0x96, 0x9c, 0x1d, + 0xd0, 0xa6, 0xda, 0xab, 0x2c, 0x9a, 0x97, 0x4e, + 0x5a, 0x58, 0x32, 0xc6, 0xdd, 0xc3, 0xa2, 0x32, + 0x8b, 0xd3, 0x10, 0x1c, 0x5c, 0x12, 0x99, 0x29, + 0x24, 0x43, 0xad, 0xc1, 0x5a, 0x2e, 0x7a, 0x88, + 0x2d, 0xd2, 0xeb, 0x0c, 0x7c, 0x66, 0x29, 0xad, + 0x22, 0x9c, 0xcd, 0x68, 0xe6, 0xb6, 0xde, 0x2e, + 0x3e, 0x0b, 0x7e, 0x16, 0x3c, 0xbd, 0xb2, 0x16, + 0x0d, 0xbc, 0x54, 0x34, 0x51, 0xbf, 0x9b, 0xf2, + 0x4d, 0x6c, 0xac, 0x8d, 0x91, 0x80, 0xe7, 0xca, + 0xf8, 0x1e, 0xe6, 0xf1, 0x49, 0x08, 0x9f, 0xeb, + 0x04, 0x6e, 0x3d, 0x55, 0x06, 0x88, 0x37, 0x6e, + 0x33, 0x59, 0x6b, 0xa8, 0x22, 0xb7, 0xb8, 0xba, + 0x92, 0x48, 0xa0, 0x35, 0x8c, 0x13, 0xb8, 0x8d, + 0x80, 0xd4, 0x6d, 0x34, 0x5a, 0x92, 0x49, 0x24, + 0xaf, 0x2f, 0x95, 0xc5, 0xef, 0x76, 0xd2, 0xe7, + 0x1a, 0x93, 0xce, 0xbe, 0x51, 0x01, 0x49, 0x61, + 0x20, 0xe2, 0x99, 0xd7, 0x0e, 0x1b, 0x23, 0xd8, + 0xcf, 0x08, 0xa8, 0xde, 0xb0, 0xde, 0x76, 0x05, + 0x62, 0xb4, 0x88, 0x5b, 0xdb, 0x32, 0x21, 0xbc, + 0x0a, 0xbb, 0x9c, 0xa9, 0x84, 0x4b, 0x6f, 0x89, + 0x79, 0xc4, 0xb1, 0x71, 0x2f, 0x38, 0x95, 0xb2, + 0xaa, 0xc9, 0xc4, 0xbc, 0x2e, 0x58, 0xf8, 0x97, + 0x85, 0xc9, 0x94, 0x64, 0x2f, 0x5e, 0x71, 0x2c, + 0x65, 0xc1, 0x79, 0xc4, 0x89, 0x6c, 0x5b, 0xdc, + 0x3a, 0x0b, 0x88, 0xa7, 0x6e, 0xc3, 0x13, 0xda, + 0xfd, 0x9d, 0x62, 0xbb, 0x9c, 0x32, 0x36, 0x68, + 0x23, 0x95, 0xbb, 0xa4, 0x60, 0x70, 0xf9, 0x42, + 0xab, 0x81, 0x13, 0x5d, 0x9d, 0x55, 0xd9, 0xf4, + 0x75, 0xe7, 0x9e, 0x69, 0xbb, 0x29, 0x6b, 0x57, + 0x35, 0x9d, 0x1b, 0xb9, 0xd9, 0xb1, 0x56, 0x53, + 0x09, 0x55, 0x41, 0xd7, 0xf7, 0x32, 0x63, 0xb5, + 0x06, 0x32, 0xfa, 0x20, 0x0f, 0x49, 0x11, 0x63, + 0xc3, 0x85, 0x41, 0x0d, 0x93, 0x6f, 0xbc, 0xf5, + 0x7f, 0x70, 0xa1, 0x54, 0x8f, 0x68, 0xd6, 0x6d, + 0xba, 0xb8, 0xc3, 0xb5, 0xce, 0xe0, 0xe2, 0x92, + 0x56, 0x71, 0x7e, 0xc1, 0x53, 0x46, 0x7d, 0x3d, + 0x05, 0x59, 0x93, 0x76, 0x06, 0x36, 0x64, 0x40, + 0x88, 0x55, 0xae, 0xda, 0x78, 0xab, 0xcb, 0xfa, + 0x2a, 0x6d, 0x41, 0xd8, 0x46, 0xef, 0x3c, 0x88, + 0x87, 0x13, 0xc2, 0x3b, 0xa2, 0x77, 0x10, 0x05, + 0x02, 0x9c, 0x55, 0x48, 0x88, 0x88, 0x08, 0x88, + 0x82, 0x3b, 0x51, 0xfa, 0x8e, 0xf3, 0xc9, 0xfc, + 0xe6, 0xad, 0x7d, 0x0d, 0xea, 0x67, 0x79, 0x77, + 0xf6, 0x9a, 0xb6, 0x35, 0x1f, 0xa8, 0xef, 0x3c, + 0x9f, 0xce, 0x6a, 0xd7, 0xd0, 0xde, 0xa6, 0x77, + 0x97, 0x7f, 0x69, 0xaa, 0xf1, 0xc3, 0x9d, 0x2c, + 0x67, 0x98, 0xa7, 0x72, 0x75, 0xac, 0x48, 0x88, + 0xa8, 0xd8, 0x44, 0x44, 0x04, 0x44, 0x40, 0x5a, + 0xb9, 0x0f, 0x42, 0xb9, 0xf2, 0x4f, 0xf1, 0x4a, + 0xda, 0x5a, 0xb9, 0x0f, 0x42, 0xb9, 0xf2, 0x4f, + 0xf1, 0x4a, 0x9a, 0x73, 0xc2, 0xb7, 0x36, 0x2a, + 0xd1, 0x3a, 0x90, 0x5a, 0x4f, 0xd1, 0xee, 0x3c, + 0x36, 0xf8, 0xaa, 0x79, 0x40, 0xe9, 0x3f, 0x47, + 0xb8, 0xf0, 0xdb, 0xe2, 0xa9, 0xe5, 0xa6, 0x23, + 0x8b, 0x56, 0x9f, 0xb9, 0x86, 0x07, 0x96, 0xb7, + 0xa2, 0x75, 0x88, 0x88, 0xb2, 0x74, 0x88, 0x88, + 0x82, 0x27, 0x34, 0x08, 0x7b, 0x5d, 0xc2, 0x48, + 0x0c, 0x22, 0xa0, 0xf2, 0x9a, 0xa8, 0x6d, 0x03, + 0x04, 0xb0, 0x5c, 0xe6, 0x99, 0x2b, 0x0b, 0x1c, + 0x66, 0x89, 0xc0, 0x1e, 0x50, 0x5a, 0xfa, 0x15, + 0x33, 0x9a, 0xe3, 0x32, 0x44, 0x1a, 0x4e, 0xd1, + 0xb8, 0x72, 0x90, 0x54, 0x4e, 0x8f, 0xbc, 0x7d, + 0xc6, 0x6b, 0x32, 0xd7, 0xec, 0xe0, 0x10, 0x70, + 0x81, 0xc8, 0x00, 0x78, 0x56, 0x8c, 0xd2, 0x89, + 0xcf, 0x0b, 0x62, 0xc8, 0xe6, 0xb6, 0x46, 0x16, + 0x3b, 0x6b, 0x5e, 0x08, 0x3c, 0xc5, 0x63, 0x59, + 0x1a, 0x76, 0x2a, 0xa5, 0xf9, 0xaf, 0x31, 0x66, + 0x6c, 0x72, 0xb7, 0x96, 0x67, 0xff, 0x00, 0x42, + 0x67, 0xb0, 0x73, 0x07, 0x1a, 0x28, 0xe3, 0xbd, + 0x5c, 0x7d, 0xa7, 0xe3, 0xfc, 0xcf, 0x57, 0x5c, + 0xbc, 0x0a, 0x32, 0xe9, 0xac, 0x9d, 0xbe, 0xe8, + 0xe1, 0x77, 0xbe, 0xd5, 0x4f, 0x7e, 0xf4, 0x1e, + 0x22, 0x22, 0x02, 0x25, 0x0a, 0xf7, 0x84, 0xf5, + 0x10, 0x78, 0xb2, 0x34, 0xec, 0x5f, 0x3c, 0x05, + 0x67, 0xb6, 0x84, 0xcd, 0x33, 0x22, 0x1f, 0x18, + 0xed, 0xe6, 0x1b, 0xd0, 0x4c, 0xe1, 0x60, 0xe8, + 0xad, 0xcc, 0xae, 0x1d, 0xd4, 0xbe, 0x28, 0x52, + 0x05, 0xcb, 0x0b, 0x68, 0xd6, 0x86, 0x8d, 0xc0, + 0x50, 0x27, 0x12, 0xbc, 0x2b, 0x2c, 0x85, 0xcb, + 0xc2, 0xe5, 0x8c, 0xb9, 0x78, 0x5c, 0x99, 0x50, + 0xc8, 0x5c, 0xbc, 0xe2, 0x58, 0xcb, 0x97, 0x9c, + 0x48, 0x32, 0x17, 0x2c, 0xf8, 0xfb, 0xa3, 0x6d, + 0x7f, 0x6d, 0x70, 0x0d, 0x0c, 0x52, 0xb1, 0xd5, + 0xe6, 0x3b, 0x56, 0x99, 0x72, 0xf3, 0x8b, 0x7d, + 0x37, 0xd1, 0x42, 0x61, 0xdf, 0x9a, 0xe0, 0xf6, + 0x07, 0x0d, 0xce, 0x00, 0x8e, 0x63, 0xb5, 0x7c, + 0x2d, 0x0d, 0x33, 0x79, 0xe7, 0xb8, 0x1b, 0x2b, + 0x8a, 0xd4, 0xba, 0x20, 0x1d, 0xce, 0xde, 0xe4, + 0xf6, 0x94, 0x83, 0x85, 0x0a, 0xaa, 0xca, 0x77, + 0xb4, 0xe7, 0xb9, 0x98, 0x8b, 0x37, 0x34, 0x96, + 0xb8, 0x5d, 0xb4, 0xb4, 0x8d, 0x94, 0x21, 0xae, + 0x5b, 0xf8, 0x57, 0x49, 0x23, 0xad, 0x24, 0x2f, + 0x0e, 0x25, 0xa0, 0xbc, 0xf5, 0x6a, 0xc5, 0xad, + 0xae, 0xe3, 0x86, 0x71, 0x89, 0xb6, 0x9b, 0xbc, + 0x7d, 0xd1, 0x71, 0x6f, 0x57, 0x85, 0x87, 0xfd, + 0x56, 0xf6, 0x3b, 0x65, 0xd5, 0xbb, 0x5b, 0x19, + 0x63, 0x36, 0x90, 0x77, 0x0e, 0x1a, 0x1a, 0x2b, + 0x4e, 0xcd, 0x28, 0xee, 0xca, 0x71, 0x11, 0x15, + 0x52, 0x22, 0x22, 0x02, 0x8f, 0xd4, 0x1e, 0xa9, + 0x9f, 0xe4, 0xf8, 0xc1, 0x48, 0x28, 0xfd, 0x41, + 0xea, 0x99, 0xfe, 0x4f, 0x8c, 0x15, 0xed, 0xed, + 0xd3, 0xa6, 0x19, 0x62, 0x78, 0x17, 0x77, 0x2b, + 0xd4, 0xf7, 0x4a, 0xfa, 0xa1, 0xbe, 0x1b, 0xfb, + 0x6a, 0x59, 0xfb, 0x94, 0x4e, 0x95, 0xf5, 0x43, + 0x7c, 0x37, 0xf6, 0xd4, 0xb3, 0xf7, 0x29, 0xbb, + 0xc5, 0xaf, 0x7a, 0x51, 0x86, 0xe0, 0x5b, 0xdd, + 0x87, 0x39, 0xba, 0xff, 0x00, 0x27, 0x8f, 0x2a, + 0xcf, 0xb1, 0x0a, 0xfe, 0xa8, 0x17, 0x5f, 0xe4, + 0xf1, 0xe5, 0x59, 0xf6, 0x21, 0x5f, 0xd7, 0x2d, + 0x9c, 0xf5, 0xef, 0xcb, 0xd8, 0xf8, 0xa6, 0x6c, + 0x1f, 0xf1, 0xad, 0x88, 0x88, 0xb6, 0x79, 0xa2, + 0x22, 0x20, 0xd7, 0xbf, 0x05, 0xd6, 0x92, 0x35, + 0xa2, 0xa4, 0xd2, 0x83, 0xdd, 0x0a, 0xa9, 0x14, + 0x12, 0x9d, 0x5b, 0x8d, 0x9c, 0x31, 0xdd, 0x13, + 0x4c, 0xac, 0x2e, 0x3b, 0x76, 0x98, 0x9d, 0x4a, + 0xab, 0x65, 0xf5, 0x7c, 0xd2, 0x5e, 0x1d, 0x86, + 0x9b, 0x0f, 0xba, 0xaa, 0xa6, 0xf2, 0x48, 0x73, + 0x58, 0xa8, 0x37, 0x32, 0x6b, 0x9a, 0x17, 0x1e, + 0x5a, 0xb1, 0xe0, 0x53, 0xb2, 0xa6, 0x11, 0x2b, + 0x8a, 0x22, 0x28, 0x4b, 0xd6, 0xae, 0x5f, 0xed, + 0x9a, 0xc2, 0x93, 0x58, 0x64, 0x1a, 0x3b, 0xe6, + 0xba, 0x17, 0x9e, 0x6e, 0xe8, 0x2e, 0xa0, 0x37, + 0xaa, 0x8f, 0xb5, 0x3b, 0x1f, 0x3a, 0xd2, 0xb2, + 0x4a, 0x05, 0x5d, 0x6b, 0x23, 0x65, 0x1c, 0xdd, + 0xe9, 0xed, 0xa0, 0xe2, 0x05, 0x17, 0xa5, 0x78, + 0x80, 0x88, 0x88, 0x0b, 0xd0, 0x0b, 0x88, 0x68, + 0xde, 0x76, 0x0f, 0x75, 0x78, 0xb6, 0xb1, 0xd1, + 0x71, 0xcd, 0xd2, 0x1e, 0xf6, 0x3d, 0xbe, 0xea, + 0x40, 0x95, 0x86, 0x31, 0x0c, 0x2d, 0x88, 0x7c, + 0x51, 0xb7, 0x9f, 0x95, 0x7d, 0x71, 0x2c, 0x65, + 0xcb, 0xce, 0x25, 0x65, 0x59, 0x0b, 0x97, 0x9c, + 0x4b, 0x19, 0x76, 0xc5, 0xe7, 0x12, 0x65, 0x4b, + 0x21, 0x72, 0xf0, 0xb9, 0x62, 0xe2, 0x5e, 0x71, + 0xa0, 0xca, 0x5c, 0xbe, 0x4b, 0x96, 0x3e, 0x35, + 0xe1, 0x72, 0x81, 0x29, 0x81, 0xbd, 0xf3, 0x2c, + 0xd5, 0x95, 0xcd, 0x68, 0x23, 0x99, 0x95, 0xe6, + 0x71, 0xe1, 0x3d, 0xb5, 0xdd, 0x2b, 0x50, 0x0f, + 0x57, 0x68, 0xf7, 0x57, 0xe7, 0x7e, 0x32, 0x0d, + 0x41, 0xa1, 0x1b, 0x97, 0x7b, 0xc2, 0x5d, 0x8b, + 0xec, 0x45, 0x9d, 0xd0, 0x35, 0xe9, 0x62, 0x6b, + 0x8f, 0x3d, 0x12, 0x48, 0x7c, 0xe7, 0x48, 0x18, + 0x3c, 0x81, 0x3b, 0xbc, 0xda, 0x6f, 0x11, 0xca, + 0x8f, 0xa1, 0x5c, 0xe7, 0x62, 0x25, 0x05, 0xfd, + 0xec, 0xbc, 0x2c, 0x69, 0x3b, 0x81, 0x6a, 0xb9, + 0x6a, 0x99, 0x04, 0x7a, 0x6f, 0x26, 0xf3, 0xb3, + 0xff, 0x00, 0x8e, 0xf1, 0xfb, 0x43, 0x87, 0xe1, + 0x55, 0xad, 0x2f, 0x0c, 0x56, 0xf8, 0x68, 0x84, + 0x2c, 0x2e, 0xe2, 0x69, 0x7b, 0xdc, 0x39, 0x5c, + 0xee, 0x55, 0x3f, 0xfc, 0xce, 0x98, 0x3b, 0xab, + 0xa5, 0xa7, 0x17, 0x9a, 0xc5, 0xc4, 0x6a, 0xee, + 0x06, 0xd4, 0xf5, 0xe8, 0xb2, 0xac, 0x56, 0x95, + 0xf3, 0x58, 0x6b, 0xb0, 0xf0, 0x36, 0xa3, 0xdc, + 0x59, 0x55, 0x52, 0x22, 0x22, 0x02, 0x0d, 0xe1, + 0x10, 0x6f, 0x08, 0x28, 0x1a, 0x37, 0xfb, 0xe2, + 0xfb, 0x9a, 0xe3, 0xed, 0x02, 0xe9, 0x0b, 0x9b, + 0xe8, 0xdf, 0xef, 0x8b, 0xee, 0x6b, 0x8f, 0xb4, + 0x0b, 0xa4, 0x2c, 0x70, 0xfb, 0x1e, 0x74, 0xbd, + 0x3f, 0x8c, 0xf3, 0x34, 0xfa, 0xab, 0x7a, 0x91, + 0x79, 0xbf, 0xa9, 0x8f, 0xc3, 0xf8, 0x0a, 0xcd, + 0x69, 0xe8, 0xd1, 0x78, 0x23, 0xb4, 0xb0, 0xe6, + 0xfe, 0xa6, 0x3f, 0x0f, 0xe0, 0x2b, 0x35, 0xa7, + 0xa3, 0x45, 0xe0, 0x8e, 0xd2, 0xe2, 0xb3, 0xfd, + 0x9e, 0x23, 0xd5, 0x50, 0xe3, 0xab, 0x97, 0xb7, + 0xbf, 0x2c, 0xa8, 0x88, 0xbd, 0x36, 0x02, 0x22, + 0x20, 0x2a, 0x96, 0xa5, 0x82, 0x59, 0x60, 0xb9, + 0x89, 0x91, 0xb8, 0xbe, 0x42, 0xee, 0x10, 0x0e, + 0xce, 0x5a, 0x2b, 0x6a, 0xac, 0xe6, 0x66, 0x92, + 0x09, 0x2e, 0x26, 0x6f, 0x74, 0x63, 0x0e, 0x20, + 0x13, 0x40, 0x39, 0x45, 0x52, 0x33, 0x8b, 0x1c, + 0x3f, 0x51, 0x1f, 0x80, 0xde, 0xd0, 0x5f, 0x6b, + 0x0d, 0x94, 0x82, 0x4b, 0x3b, 0x79, 0x06, 0xe7, + 0xc4, 0xc7, 0x76, 0x5a, 0x0a, 0xcc, 0x83, 0xed, + 0xbb, 0x97, 0x17, 0xf6, 0xb9, 0x61, 0xe6, 0xda, + 0x99, 0xb7, 0x4d, 0x14, 0x6d, 0xe4, 0x2d, 0x75, + 0x7f, 0x59, 0x84, 0xb0, 0xfc, 0x0b, 0xb3, 0xb0, + 0xef, 0x0b, 0x9d, 0x7b, 0x67, 0xb1, 0xe9, 0x31, + 0xd6, 0x17, 0xed, 0x1b, 0x61, 0x95, 0xd1, 0x38, + 0xf5, 0x9e, 0x2a, 0x3d, 0xf6, 0xa0, 0xe4, 0x4f, + 0x1b, 0x57, 0x8b, 0x21, 0x68, 0x3b, 0xd3, 0x84, + 0x20, 0xc6, 0x9c, 0x27, 0xa8, 0xb2, 0xd1, 0x10, + 0x7c, 0x70, 0x15, 0xef, 0x07, 0x54, 0xaf, 0xa4, + 0x41, 0x92, 0xda, 0x13, 0x34, 0xec, 0x88, 0x72, + 0x9d, 0xbc, 0xca, 0xc6, 0x08, 0x6b, 0x43, 0x5b, + 0xb8, 0x6c, 0x0a, 0x2b, 0x13, 0x0d, 0x03, 0xa7, + 0x76, 0xf3, 0xb1, 0xbc, 0xdc, 0xaa, 0x44, 0xb9, + 0x5a, 0x15, 0x96, 0x4e, 0x25, 0xe1, 0x72, 0xc7, + 0xc4, 0xbc, 0xe2, 0x52, 0x3e, 0xcb, 0x97, 0x85, + 0xcb, 0x19, 0x72, 0xf0, 0xb9, 0x0c, 0x8c, 0x9c, + 0x4b, 0xce, 0x25, 0xf1, 0xc4, 0xbe, 0x78, 0x94, + 0x0c, 0x9c, 0x55, 0xd9, 0xd5, 0xd8, 0xbb, 0x1e, + 0x8a, 0xbc, 0x37, 0x7a, 0x6e, 0xcd, 0xe4, 0xd5, + 0xd1, 0xb4, 0xc6, 0x79, 0xda, 0x68, 0xb8, 0xb9, + 0x72, 0xe9, 0x7e, 0xca, 0xef, 0x7a, 0x4c, 0x7d, + 0xdd, 0x91, 0x3b, 0x61, 0x90, 0x3d, 0xa3, 0xac, + 0xf0, 0xa2, 0x53, 0x0b, 0xb1, 0xde, 0xb9, 0x95, + 0x91, 0xaf, 0xb4, 0x5c, 0x83, 0x78, 0xb8, 0x5a, + 0xe9, 0x2e, 0x2b, 0xb6, 0x83, 0x63, 0x76, 0x7b, + 0xeb, 0xa7, 0x1d, 0xe1, 0x73, 0x4c, 0x43, 0x63, + 0x97, 0x56, 0xe5, 0xee, 0xb6, 0x99, 0x04, 0xd2, + 0xb1, 0x94, 0xe4, 0xe2, 0x7f, 0x05, 0x7d, 0xe5, + 0x34, 0xe6, 0xab, 0x41, 0x39, 0xe1, 0x78, 0xc3, + 0x87, 0x7f, 0x18, 0x93, 0x50, 0x78, 0x68, 0x3a, + 0x94, 0x05, 0x49, 0x28, 0xec, 0x41, 0x25, 0xd3, + 0xd5, 0xa5, 0x80, 0x16, 0x80, 0x0f, 0x58, 0x15, + 0x22, 0xaa, 0x91, 0x11, 0x10, 0x11, 0x11, 0x04, + 0x66, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, 0xb5, 0x36, + 0xde, 0xf4, 0x73, 0x28, 0x4c, 0xb7, 0xd7, 0x43, + 0xcc, 0x7b, 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x5e, + 0x76, 0x0f, 0x9e, 0xc7, 0x69, 0xb5, 0xfa, 0x65, + 0xd1, 0x77, 0x83, 0x67, 0x45, 0x5a, 0xd8, 0x6f, + 0x3d, 0x16, 0x6f, 0x26, 0xff, 0x00, 0x14, 0xaa, + 0x96, 0x84, 0xdd, 0x79, 0xfc, 0xaf, 0x9e, 0xad, + 0xb7, 0x9e, 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, + 0x4b, 0x42, 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x5e, + 0xad, 0x3b, 0x15, 0x77, 0x9c, 0x35, 0xf1, 0xad, + 0x79, 0xcb, 0x5a, 0x22, 0x2c, 0xdb, 0x08, 0x88, + 0x80, 0xa2, 0xf3, 0x40, 0x8e, 0x07, 0x50, 0x90, + 0x1a, 0x40, 0x23, 0x7d, 0x49, 0x52, 0x8a, 0x2f, + 0x37, 0xc5, 0x48, 0xc0, 0x3b, 0x0d, 0x76, 0x75, + 0x4a, 0x08, 0xfd, 0x13, 0x04, 0x90, 0x45, 0x92, + 0x6c, 0x8c, 0x2c, 0x2e, 0xba, 0xe3, 0x00, 0xf5, + 0x1d, 0x1b, 0x48, 0x56, 0x45, 0x01, 0xa5, 0xae, + 0xdf, 0x71, 0x3e, 0x4d, 0x8f, 0xd9, 0xd0, 0xcb, + 0x18, 0x6b, 0x6b, 0x5a, 0x02, 0xcf, 0xf5, 0x0a, + 0x7d, 0x4c, 0xe7, 0x44, 0x66, 0x7a, 0xde, 0xf9, + 0x47, 0x6a, 0x9b, 0x2f, 0x3f, 0xd3, 0xd7, 0xf6, + 0xb4, 0xa9, 0x7c, 0x2e, 0x2d, 0x1d, 0x76, 0x8a, + 0x85, 0x20, 0x16, 0x47, 0xb4, 0x3d, 0x85, 0x87, + 0xbd, 0x70, 0x20, 0xfb, 0xbb, 0x14, 0x25, 0xf9, + 0x7c, 0x82, 0x09, 0x07, 0x93, 0x61, 0x45, 0x21, + 0x9f, 0xb3, 0x36, 0x39, 0xab, 0xdb, 0x53, 0xff, + 0x00, 0xa5, 0x33, 0xc0, 0xe6, 0xad, 0x54, 0x7a, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x0d, 0xac, 0x6c, + 0x3d, 0x25, 0xc8, 0x73, 0xb6, 0xb6, 0x3e, 0xe8, + 0xf3, 0xf2, 0x29, 0x92, 0xe5, 0xa7, 0x61, 0x1f, + 0x43, 0x6e, 0x3f, 0x49, 0xfd, 0xd3, 0x96, 0x7e, + 0x25, 0x68, 0x44, 0xb2, 0x17, 0x2f, 0x38, 0x96, + 0x3e, 0x25, 0xe1, 0x72, 0x21, 0x93, 0x89, 0x79, + 0xc4, 0xb1, 0xf1, 0x2f, 0x0b, 0x93, 0x2a, 0x59, + 0x0b, 0x97, 0xc9, 0x72, 0xf8, 0xe2, 0x5e, 0x17, + 0x26, 0x51, 0x93, 0x89, 0x74, 0xef, 0x65, 0x97, + 0xbd, 0x2e, 0x2a, 0xe6, 0xd1, 0xc7, 0x6d, 0xbc, + 0xdc, 0x43, 0x99, 0xe2, 0xab, 0x95, 0x97, 0x2b, + 0xaf, 0xb2, 0xcb, 0xe1, 0x1e, 0x6a, 0x7b, 0x52, + 0x68, 0x2e, 0x61, 0xa8, 0x1f, 0xac, 0xc3, 0x55, + 0x03, 0xa9, 0xbf, 0x7a, 0xa1, 0xfb, 0x55, 0x71, + 0x6d, 0xae, 0x31, 0xcd, 0x34, 0x70, 0x9a, 0x42, + 0x08, 0xd8, 0x47, 0x72, 0xd5, 0x7c, 0x7e, 0xea, + 0xaa, 0x47, 0xb4, 0x38, 0xe2, 0xb8, 0xbc, 0xc2, + 0xda, 0xca, 0x7b, 0x87, 0xc9, 0x23, 0x9c, 0x3a, + 0xbd, 0xe0, 0xa2, 0x9a, 0x36, 0xa0, 0xab, 0x32, + 0x57, 0x17, 0xc6, 0xe7, 0xd9, 0xb8, 0x38, 0x1a, + 0xb5, 0x8e, 0x71, 0xae, 0xfa, 0xb0, 0x54, 0x2b, + 0x02, 0x82, 0xb0, 0x24, 0x5c, 0x5b, 0x86, 0xb0, + 0xb5, 0xbc, 0x55, 0x07, 0x70, 0xe1, 0xa6, 0xc5, + 0x3a, 0xaa, 0x91, 0x11, 0x10, 0x11, 0x11, 0x04, + 0x76, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, 0xf9, 0xcd, + 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, 0xef, 0xed, + 0x35, 0x6c, 0x6a, 0x3f, 0x51, 0xde, 0x79, 0x3f, + 0x9c, 0xd5, 0xaf, 0xa1, 0xbd, 0x4c, 0xef, 0x2e, + 0xfe, 0xd3, 0x55, 0xe3, 0x87, 0x3a, 0x58, 0xcf, + 0x31, 0x4e, 0xe4, 0xeb, 0x58, 0x91, 0x11, 0x51, + 0xb0, 0x88, 0x88, 0x08, 0x88, 0x80, 0xb5, 0x72, + 0x1e, 0x85, 0x73, 0xe4, 0x9f, 0xe2, 0x95, 0xb4, + 0xb5, 0x72, 0x1e, 0x85, 0x73, 0xe4, 0x9f, 0xe2, + 0x95, 0x34, 0xe7, 0x85, 0x6e, 0x6c, 0x55, 0xa2, + 0x75, 0x20, 0xb4, 0x9f, 0xa3, 0xdc, 0x78, 0x6d, + 0xf1, 0x54, 0xf2, 0x81, 0xd2, 0x7e, 0x8f, 0x71, + 0xe1, 0xb7, 0xc5, 0x53, 0xcb, 0x4c, 0x47, 0x16, + 0xad, 0x3f, 0x73, 0x0c, 0x0f, 0x2d, 0x6f, 0x44, + 0xeb, 0x11, 0x11, 0x64, 0xe9, 0x11, 0x11, 0x06, + 0x8e, 0x59, 0xad, 0xe8, 0x9a, 0xf2, 0x2b, 0x43, + 0x42, 0x47, 0x27, 0x2a, 0xad, 0xe9, 0x6b, 0x3b, + 0x8b, 0x1d, 0x51, 0x78, 0x64, 0xa7, 0x45, 0x7b, + 0x6f, 0xc7, 0x19, 0x04, 0x6f, 0x63, 0xc6, 0xc2, + 0x39, 0x8a, 0xb5, 0x5f, 0x33, 0x8a, 0xd9, 0xdc, + 0x84, 0x6d, 0x05, 0x56, 0xdf, 0x76, 0x2d, 0x75, + 0x06, 0x24, 0x97, 0x13, 0xe7, 0x2f, 0x92, 0x02, + 0x6b, 0xfa, 0x4c, 0xd9, 0xb7, 0x9e, 0x8a, 0x63, + 0xab, 0xad, 0x13, 0xdc, 0x5b, 0x17, 0xd3, 0x39, + 0x57, 0xca, 0xfa, 0x61, 0xda, 0xa1, 0x2e, 0x5f, + 0xed, 0xa6, 0xc7, 0xbb, 0xc7, 0x64, 0x00, 0xd8, + 0x43, 0xe0, 0x71, 0xfd, 0xf6, 0xfc, 0x2b, 0x98, + 0x16, 0x55, 0x77, 0x2f, 0x6a, 0x96, 0x22, 0xef, + 0x49, 0x4d, 0x28, 0x15, 0x7d, 0xa4, 0x8c, 0x98, + 0x1e, 0xb5, 0x78, 0x5d, 0xef, 0x15, 0xc3, 0x90, + 0x7c, 0xf0, 0x05, 0xed, 0x02, 0xf5, 0x10, 0x11, + 0x11, 0x01, 0x49, 0x62, 0x62, 0x00, 0x3a, 0x77, + 0x6f, 0x3d, 0xcb, 0x7e, 0x15, 0x1c, 0xd6, 0x97, + 0xb8, 0x34, 0x6f, 0x71, 0xa2, 0x9c, 0x8d, 0x8d, + 0x8a, 0x36, 0xb0, 0x7c, 0x51, 0x45, 0x30, 0x89, + 0x66, 0xe2, 0x5e, 0x71, 0x2c, 0x7c, 0x4b, 0xce, + 0x25, 0x28, 0x64, 0x2e, 0x5e, 0x17, 0x2c, 0x7c, + 0x4b, 0xc2, 0xf4, 0x19, 0x0b, 0x97, 0x9c, 0x4b, + 0x19, 0x72, 0xf0, 0xb9, 0x06, 0x42, 0xe5, 0xe7, + 0x12, 0xc6, 0x5c, 0xbe, 0x78, 0x90, 0x75, 0xaf, + 0x66, 0x37, 0xbd, 0x3e, 0x05, 0xf6, 0xe4, 0xd5, + 0xd6, 0xb2, 0xb9, 0xbf, 0x25, 0xdb, 0x42, 0xb7, + 0x3f, 0x7a, 0xe6, 0x7e, 0xca, 0x2f, 0x43, 0x72, + 0x17, 0x96, 0x64, 0xfd, 0x6c, 0x61, 0xed, 0x1d, + 0x76, 0x95, 0xd3, 0x1d, 0xb9, 0x56, 0x56, 0x85, + 0x3f, 0x57, 0x09, 0x2e, 0x35, 0x0e, 0x0e, 0xd6, + 0x3a, 0x7f, 0x0c, 0xcb, 0x71, 0x25, 0x77, 0x70, + 0x8e, 0x11, 0xf0, 0x29, 0xac, 0x65, 0x5d, 0x30, + 0x7c, 0xb5, 0x12, 0x70, 0xee, 0xe4, 0xd8, 0xaa, + 0xf9, 0x9b, 0xf9, 0x5f, 0xed, 0x06, 0x38, 0xa2, + 0x01, 0xcd, 0xb7, 0x81, 0xb1, 0x3a, 0xbc, 0x9c, + 0x55, 0x90, 0x9f, 0xde, 0x56, 0xbc, 0x44, 0x67, + 0x85, 0xd2, 0xb8, 0x92, 0xee, 0xf7, 0x6f, 0x5c, + 0xf1, 0x15, 0x69, 0xcd, 0x4e, 0x84, 0x47, 0x75, + 0x22, 0x88, 0x8a, 0xa9, 0x11, 0x11, 0x01, 0x47, + 0xea, 0x0f, 0x54, 0xcf, 0xf2, 0x7c, 0x60, 0xa4, + 0x14, 0x7e, 0xa0, 0xf5, 0x4c, 0xff, 0x00, 0x27, + 0xc6, 0x0a, 0xf6, 0xf6, 0xe9, 0xd3, 0x0c, 0xb1, + 0x3c, 0x0b, 0xbb, 0x95, 0xea, 0x7b, 0xa5, 0x7d, + 0x50, 0xdf, 0x0d, 0xfd, 0xb5, 0x2c, 0xfd, 0xca, + 0x27, 0x4a, 0xfa, 0xa1, 0xbe, 0x1b, 0xfb, 0x6a, + 0x59, 0xfb, 0x94, 0xdd, 0xe2, 0xd7, 0xbd, 0x28, + 0xc3, 0x70, 0x2d, 0xee, 0xc3, 0x9c, 0xdd, 0x7f, + 0x93, 0xc7, 0x95, 0x67, 0xd8, 0x85, 0x7f, 0x54, + 0x0b, 0xaf, 0xf2, 0x78, 0xf2, 0xac, 0xfb, 0x10, + 0xaf, 0xeb, 0x96, 0xce, 0x7a, 0xf7, 0xe5, 0xec, + 0x7c, 0x53, 0x36, 0x0f, 0xf8, 0xd6, 0xc4, 0x44, + 0x5b, 0x3c, 0xd1, 0x11, 0x10, 0x7c, 0xca, 0xd0, + 0xf8, 0x9e, 0xc2, 0x2a, 0x08, 0x22, 0x8a, 0x97, + 0x96, 0xb4, 0x99, 0xd7, 0xf6, 0x57, 0xf0, 0xd0, + 0x0b, 0x3b, 0x88, 0xe4, 0x94, 0x3b, 0x63, 0x80, + 0xe2, 0x1c, 0x54, 0xf7, 0x15, 0xd9, 0x56, 0xf3, + 0x23, 0xa3, 0xb7, 0xbb, 0xee, 0xbb, 0xc6, 0x3d, + 0xc0, 0x0d, 0xbb, 0x85, 0x77, 0x29, 0x8c, 0xe8, + 0x95, 0x90, 0xef, 0x45, 0xaf, 0x8e, 0xb9, 0x6d, + 0xde, 0x3e, 0xda, 0xe9, 0xa6, 0xad, 0x9e, 0x26, + 0x48, 0x3e, 0x53, 0x41, 0x5b, 0x0a, 0x25, 0x22, + 0xd3, 0xce, 0xd9, 0x8b, 0xec, 0x35, 0xed, 0xa1, + 0x15, 0x12, 0xc2, 0xf1, 0x4e, 0xbd, 0x2a, 0x3d, + 0xf5, 0xb8, 0xbd, 0xd8, 0x45, 0x0e, 0xed, 0xc8, + 0x3f, 0x32, 0x3d, 0xa5, 0xae, 0x73, 0x5d, 0xdf, + 0x34, 0x90, 0x47, 0x5c, 0x2f, 0x90, 0x09, 0x20, + 0x01, 0x52, 0x76, 0x00, 0x14, 0xb6, 0xa9, 0xb1, + 0xf3, 0x0d, 0x43, 0x7f, 0x6b, 0x4a, 0x35, 0x93, + 0x3b, 0x87, 0x98, 0x9a, 0x85, 0x17, 0x18, 0x93, + 0x8d, 0xa6, 0x20, 0xe7, 0x3c, 0x10, 0x5a, 0x1a, + 0x09, 0x35, 0x1c, 0xc8, 0x37, 0xae, 0x74, 0xfe, + 0x6a, 0xd2, 0xde, 0x3b, 0xab, 0xab, 0x29, 0x61, + 0x86, 0x67, 0x88, 0xe3, 0x7b, 0xdb, 0x4e, 0x27, + 0x1d, 0xc0, 0x2d, 0x5b, 0xbb, 0x3b, 0xab, 0x2b, + 0x87, 0xdb, 0x5d, 0x44, 0xe8, 0xa7, 0x8e, 0x9c, + 0x71, 0xbb, 0x78, 0xa8, 0xae, 0xda, 0x2e, 0xd7, + 0xa8, 0xe6, 0xb5, 0xbe, 0xd0, 0xd6, 0xb7, 0x57, + 0xd6, 0xf2, 0x4a, 0xe9, 0x1b, 0x0b, 0x98, 0xd6, + 0x82, 0x1c, 0xc9, 0x4d, 0x07, 0x1b, 0xb9, 0x40, + 0x1c, 0xab, 0xe7, 0x0d, 0x84, 0xb4, 0xba, 0xb9, + 0xcc, 0xd8, 0xba, 0xc6, 0x31, 0x03, 0xc0, 0x63, + 0x2f, 0x9d, 0xdd, 0xbc, 0xba, 0x48, 0xdb, 0x56, + 0x82, 0xea, 0x9d, 0x9b, 0xd0, 0x71, 0xdc, 0x6e, + 0x17, 0x2b, 0x95, 0x71, 0x6e, 0x3e, 0xd9, 0xf3, + 0x96, 0x90, 0x09, 0x6e, 0xea, 0x9d, 0xc2, 0xa5, + 0x4b, 0x37, 0x4f, 0xe5, 0x6d, 0x1a, 0xd8, 0x04, + 0x1d, 0x34, 0x86, 0xa5, 0xfd, 0x01, 0x12, 0x06, + 0xb8, 0x6f, 0x6b, 0xc8, 0xdc, 0x47, 0x51, 0x6b, + 0x8b, 0x7b, 0xed, 0x3f, 0xa8, 0xc5, 0x93, 0xe4, + 0x27, 0xcc, 0x2e, 0x5a, 0xf7, 0x06, 0x92, 0x1a, + 0xea, 0x38, 0x50, 0xd3, 0xae, 0x15, 0xba, 0xe2, + 0xeb, 0x1f, 0x6c, 0xfc, 0xc5, 0x93, 0xe6, 0xb7, + 0x11, 0x9b, 0xb6, 0x5d, 0xd9, 0x74, 0xcf, 0x77, + 0x46, 0x44, 0x8d, 0xac, 0x83, 0xf8, 0x7b, 0xe9, + 0xd4, 0x41, 0x5d, 0x76, 0x17, 0x23, 0x1c, 0x3e, + 0x71, 0x3b, 0x04, 0x10, 0x98, 0x9d, 0x3b, 0x65, + 0x79, 0xab, 0x4b, 0x1a, 0x68, 0x40, 0x2d, 0xf8, + 0xd5, 0xe4, 0x5b, 0x0c, 0xd3, 0xee, 0x16, 0xd6, + 0x17, 0xb7, 0x17, 0x0d, 0x65, 0xa5, 0xd3, 0xda, + 0xdb, 0xa7, 0x0e, 0xfa, 0xdc, 0x3f, 0x6b, 0x3a, + 0x4f, 0x0a, 0x9b, 0xd6, 0x48, 0x33, 0x58, 0xdb, + 0x4b, 0x19, 0x71, 0x3d, 0xde, 0x52, 0xce, 0xe9, + 0xef, 0x7d, 0xcb, 0x03, 0x5c, 0xde, 0x1f, 0xd0, + 0x30, 0xf2, 0x8a, 0x1d, 0xab, 0x34, 0x79, 0x4d, + 0x49, 0x2b, 0x5f, 0x2d, 0x95, 0x8b, 0x86, 0x35, + 0xd0, 0xb2, 0x16, 0x45, 0x70, 0xd6, 0xf4, 0x7c, + 0x2c, 0xef, 0x5f, 0xc4, 0x69, 0xc4, 0xe5, 0x28, + 0x6a, 0x67, 0xb1, 0x0d, 0xb0, 0x8e, 0x2b, 0x9b, + 0x66, 0xb7, 0xcd, 0x1e, 0xe3, 0x19, 0x91, 0x93, + 0xb6, 0x71, 0xc7, 0xbc, 0x54, 0xb7, 0xbd, 0x24, + 0x72, 0x28, 0x6e, 0x25, 0x62, 0xb9, 0xc3, 0xe7, + 0x6f, 0x0b, 0x2d, 0xef, 0x67, 0xb5, 0x82, 0x28, + 0xa5, 0x8c, 0x4f, 0x0c, 0x00, 0x0e, 0x89, 0xd3, + 0xec, 0x64, 0x8f, 0x63, 0x29, 0xc5, 0x5a, 0xad, + 0x4c, 0x5e, 0x1a, 0xc6, 0x4b, 0xcb, 0x88, 0x2f, + 0xdd, 0x23, 0xbc, 0xce, 0xed, 0xb6, 0xf3, 0xb2, + 0x32, 0x1b, 0x58, 0xdc, 0x4b, 0x78, 0xc7, 0x5e, + 0xa1, 0x32, 0x99, 0x10, 0xc5, 0xe0, 0x6f, 0x5e, + 0xc6, 0xc9, 0xa6, 0x21, 0xb0, 0xc6, 0xf9, 0x49, + 0xda, 0x03, 0x1a, 0x4e, 0xc0, 0xad, 0xd1, 0xe9, + 0xfc, 0x75, 0x95, 0xa5, 0xf9, 0x8c, 0x0b, 0xa9, + 0xa5, 0x6b, 0xae, 0xb1, 0x73, 0x3b, 0x69, 0x10, + 0xc0, 0xe1, 0xd2, 0x31, 0xcd, 0xfd, 0x2d, 0xe0, + 0xad, 0xac, 0x8d, 0xe0, 0xb4, 0xcb, 0x5b, 0xde, + 0xc5, 0x38, 0xb6, 0xb4, 0x69, 0x6c, 0xad, 0x79, + 0x95, 0x81, 0x8d, 0x12, 0xc7, 0xc2, 0x59, 0x14, + 0x2c, 0x15, 0xee, 0x49, 0xa9, 0xaa, 0x65, 0x32, + 0x2a, 0x96, 0x18, 0x3c, 0x9e, 0x43, 0xa3, 0x74, + 0x2c, 0x63, 0x23, 0x99, 0xc5, 0x91, 0xc9, 0x2b, + 0xc3, 0x1a, 0x5c, 0x0d, 0x38, 0x45, 0x76, 0xd6, + 0xbc, 0x8b, 0x7e, 0xd3, 0x49, 0xcb, 0x3f, 0x9c, + 0x13, 0x72, 0x27, 0xf3, 0x77, 0x88, 0x9e, 0xcb, + 0x46, 0xf4, 0x8f, 0x0f, 0xe5, 0xe2, 0x6b, 0x8b, + 0x68, 0x02, 0xc3, 0x92, 0xd4, 0xb6, 0xd7, 0x76, + 0xf0, 0x0e, 0x88, 0x45, 0x7f, 0x67, 0x79, 0xd3, + 0x9b, 0x88, 0x45, 0x23, 0x98, 0x02, 0x3b, 0xbe, + 0x1f, 0x8a, 0xe3, 0xc2, 0x39, 0xd6, 0xac, 0xfa, + 0x82, 0xd7, 0xf1, 0x6b, 0xcb, 0xf8, 0x2c, 0xc3, + 0x99, 0x74, 0xf1, 0x2b, 0x59, 0x23, 0xdc, 0xd7, + 0x31, 0xdb, 0xce, 0xd8, 0xc8, 0xa8, 0x27, 0x91, + 0x40, 0xd0, 0x99, 0xaf, 0x82, 0x69, 0x21, 0x95, + 0xa5, 0x8f, 0x8d, 0xc5, 0xae, 0x6b, 0x85, 0x08, + 0x23, 0xaa, 0x0a, 0xec, 0x1e, 0xcc, 0x6f, 0x85, + 0xd6, 0x99, 0x64, 0x55, 0xab, 0xad, 0x64, 0x74, + 0x67, 0x9a, 0xbc, 0x43, 0xb6, 0xb8, 0xe5, 0xfe, + 0x42, 0xe3, 0x21, 0x79, 0x2d, 0xed, 0xc9, 0x06, + 0x69, 0xdd, 0xc4, 0xfa, 0x6c, 0x1d, 0x4a, 0x0e, + 0x60, 0xba, 0x27, 0xb1, 0xcb, 0x89, 0x48, 0xc8, + 0xdb, 0xd2, 0xb1, 0x02, 0xc7, 0xd7, 0x90, 0x38, + 0xec, 0xa2, 0x91, 0x69, 0xd7, 0xf3, 0xf4, 0x3a, + 0x56, 0xf0, 0x72, 0xcc, 0x63, 0x88, 0x75, 0xf8, + 0x9e, 0x2b, 0xef, 0x05, 0xa5, 0xa7, 0xed, 0xe6, + 0xb7, 0xc4, 0x5a, 0x5b, 0xcd, 0xb8, 0x46, 0xc7, + 0x38, 0x8d, 0x9b, 0x49, 0xe2, 0xa7, 0x61, 0x6b, + 0xfb, 0x53, 0xbb, 0xe8, 0xf1, 0xb6, 0x56, 0x8d, + 0x3d, 0xd4, 0xd3, 0x19, 0x08, 0xeb, 0x46, 0xdf, + 0xf5, 0x7a, 0x94, 0xc5, 0xc7, 0x24, 0x8c, 0xb4, + 0x8e, 0x5e, 0xe7, 0xf8, 0x51, 0x87, 0x81, 0xba, + 0xb4, 0x0e, 0x2a, 0x67, 0x62, 0x3b, 0x64, 0xee, + 0xca, 0xc2, 0xc0, 0x03, 0x40, 0x1b, 0x80, 0x14, + 0xaa, 0xf5, 0x11, 0x55, 0x22, 0x22, 0x20, 0x20, + 0xde, 0x11, 0x06, 0xf0, 0x82, 0x81, 0xa3, 0x7f, + 0xbe, 0x2f, 0xb9, 0xae, 0x3e, 0xd0, 0x2e, 0x90, + 0xb9, 0xbe, 0x8d, 0xfe, 0xf8, 0xbe, 0xe6, 0xb8, + 0xfb, 0x40, 0xba, 0x42, 0xc7, 0x0f, 0xb1, 0xe7, + 0x4b, 0xd3, 0xf8, 0xcf, 0x33, 0x4f, 0xaa, 0xb7, + 0xa9, 0x17, 0x9b, 0xfa, 0x98, 0xfc, 0x3f, 0x80, + 0xac, 0xd6, 0x9e, 0x8d, 0x17, 0x82, 0x3b, 0x4b, + 0x0e, 0x6f, 0xea, 0x63, 0xf0, 0xfe, 0x02, 0xb3, + 0x5a, 0x7a, 0x34, 0x5e, 0x08, 0xed, 0x2e, 0x2b, + 0x3f, 0xd9, 0xe2, 0x3d, 0x55, 0x0e, 0x3a, 0xb9, + 0x7b, 0x7b, 0xf2, 0xca, 0x88, 0x8b, 0xd3, 0x60, + 0x22, 0x22, 0x02, 0x80, 0xd4, 0x16, 0xc2, 0x61, + 0x24, 0x2d, 0x14, 0x74, 0xad, 0xee, 0x49, 0xdc, + 0x49, 0xd8, 0x6a, 0xa7, 0xd4, 0x76, 0x59, 0xb4, + 0x0c, 0x78, 0x34, 0x3b, 0x8e, 0xda, 0x55, 0x20, + 0x7d, 0xe0, 0xf8, 0xdb, 0x88, 0xb4, 0x8e, 0x4f, + 0xac, 0x8a, 0x26, 0xc6, 0xfa, 0x7e, 0x93, 0x07, + 0x09, 0xed, 0x2d, 0xe5, 0x1f, 0x85, 0x94, 0x3e, + 0x19, 0x98, 0x0d, 0x4c, 0x32, 0x96, 0x91, 0xce, + 0x03, 0xfe, 0x72, 0x90, 0x49, 0x1e, 0xb7, 0x7a, + 0xae, 0xfb, 0x44, 0xb2, 0xf3, 0xdd, 0x21, 0x7c, + 0xc0, 0x38, 0x9f, 0x0b, 0x44, 0xcd, 0xe7, 0x8c, + 0xd7, 0xb4, 0xac, 0x21, 0x7c, 0x5e, 0xdb, 0xb6, + 0xea, 0xce, 0x7b, 0x57, 0x8a, 0xb6, 0x78, 0xdd, + 0x19, 0x1e, 0x10, 0x21, 0x07, 0xe6, 0x64, 0x59, + 0x2e, 0x20, 0x75, 0xbc, 0xf2, 0xc0, 0xfd, 0x8e, + 0x89, 0xee, 0x63, 0x87, 0x5d, 0xa6, 0x8b, 0x1a, + 0x02, 0x27, 0x32, 0x20, 0x2f, 0x5a, 0xd2, 0xf7, + 0x06, 0x8d, 0xee, 0x34, 0x0b, 0xc5, 0xbb, 0x61, + 0x6d, 0x26, 0xdb, 0x97, 0x31, 0xc2, 0x36, 0x6c, + 0xe3, 0xa1, 0xe1, 0xa9, 0xeb, 0xee, 0x41, 0xbf, + 0x18, 0x11, 0xc6, 0xd8, 0xc6, 0xe6, 0x8a, 0x2f, + 0x4b, 0x97, 0xc7, 0x11, 0x77, 0x7a, 0x09, 0xe6, + 0xda, 0xb6, 0x61, 0xc6, 0xe4, 0x67, 0x13, 0xf4, + 0x56, 0xef, 0x71, 0xb5, 0x67, 0x49, 0x38, 0xa6, + 0xd6, 0x37, 0xaa, 0x42, 0xb2, 0x18, 0x0b, 0x97, + 0x9c, 0x4b, 0x78, 0xe1, 0xae, 0x1b, 0x8f, 0x65, + 0xf4, 0x8f, 0x0c, 0x12, 0xb0, 0xcb, 0x14, 0x7c, + 0x2e, 0x25, 0xcc, 0x06, 0x95, 0xe2, 0x68, 0x2d, + 0x1e, 0xea, 0x8c, 0xe2, 0xd8, 0x83, 0x27, 0x12, + 0xf0, 0xb9, 0x63, 0xe2, 0x5e, 0x71, 0xa0, 0xc8, + 0x5c, 0xbc, 0x2e, 0x58, 0xcb, 0x96, 0x48, 0xed, + 0x6f, 0x26, 0x69, 0x7c, 0x30, 0x49, 0x23, 0x5a, + 0x2a, 0x5c, 0xd6, 0x92, 0x29, 0xcf, 0x45, 0x03, + 0xce, 0x25, 0x71, 0xf6, 0x5d, 0x7a, 0x22, 0xcf, + 0x49, 0x6c, 0x4e, 0xcb, 0x98, 0x48, 0x03, 0xaa, + 0x58, 0x6a, 0xaa, 0x77, 0x98, 0xdb, 0xeb, 0x28, + 0xda, 0xfb, 0xa6, 0x08, 0xf8, 0x8d, 0x38, 0x78, + 0x9a, 0x5c, 0x09, 0x15, 0xa3, 0x9a, 0x0d, 0x5b, + 0xee, 0xad, 0xbd, 0x29, 0x7d, 0xe6, 0x7a, 0x8a, + 0xc2, 0x7a, 0xd0, 0x09, 0x9a, 0xd7, 0x73, 0x3b, + 0x62, 0x0e, 0xee, 0x48, 0x6f, 0x74, 0x77, 0x37, + 0x69, 0xf7, 0x36, 0xae, 0x63, 0xa2, 0x9b, 0x3c, + 0xb7, 0xd9, 0x1c, 0x8b, 0x36, 0x89, 0x1f, 0x46, + 0xf5, 0x49, 0x73, 0xcb, 0xcf, 0xbc, 0xba, 0x06, + 0x7a, 0xec, 0x59, 0xe1, 0x2f, 0xee, 0x6b, 0x4e, + 0x8a, 0x09, 0x0b, 0x4f, 0x5c, 0xb7, 0x85, 0xbe, + 0xf9, 0x54, 0x5d, 0x06, 0xc9, 0x06, 0x1e, 0xe5, + 0xc6, 0xb4, 0x7c, 0xc1, 0x8c, 0x23, 0x7e, 0xc0, + 0x0b, 0xbb, 0x6a, 0x63, 0x66, 0xa9, 0xd0, 0x4e, + 0x78, 0x5e, 0xf1, 0xa1, 0xa2, 0x17, 0x52, 0xa4, + 0x97, 0x1a, 0xd5, 0x6e, 0x2c, 0x16, 0x4c, 0x0c, + 0xb7, 0x6f, 0x29, 0x7d, 0x5c, 0x4f, 0x5c, 0xac, + 0xea, 0xa9, 0x11, 0x11, 0x01, 0x11, 0x10, 0x46, + 0x65, 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, 0x6d, + 0xef, 0x47, 0x32, 0x84, 0xcb, 0x7d, 0x74, 0x3c, + 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, 0xe7, + 0x60, 0xf9, 0xec, 0x76, 0x9b, 0x5f, 0xa6, 0x5d, + 0x17, 0x78, 0x36, 0x74, 0x55, 0xad, 0x86, 0xf3, + 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, 0xa9, 0x68, + 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xea, 0xdb, 0x79, + 0xe8, 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, 0xb4, + 0x26, 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0xea, 0xd3, + 0xb1, 0x57, 0x79, 0xc3, 0x5f, 0x1a, 0xd7, 0x9c, + 0xb5, 0xa2, 0x22, 0xcd, 0xb0, 0x88, 0x88, 0x0b, + 0x4b, 0x2a, 0xd6, 0xf4, 0x01, 0xe4, 0x1d, 0x86, + 0x84, 0x8d, 0xe0, 0x15, 0xba, 0xb0, 0xde, 0x37, + 0x8a, 0xd9, 0xfb, 0x69, 0x4d, 0xa0, 0xa0, 0xaf, + 0x69, 0x6b, 0x59, 0xad, 0x32, 0xb9, 0x1e, 0x3a, + 0x74, 0x77, 0x6d, 0x8e, 0x58, 0x88, 0xfd, 0x42, + 0xe6, 0x9a, 0x8f, 0x94, 0xac, 0xea, 0xbf, 0x69, + 0x3b, 0x61, 0xcb, 0xda, 0x31, 0xce, 0xa9, 0xb8, + 0x12, 0xc6, 0x39, 0x76, 0xb5, 0xbd, 0x26, 0xff, + 0x00, 0x92, 0xac, 0x0a, 0x64, 0x16, 0x40, 0x76, + 0x05, 0x8d, 0x7d, 0xc7, 0xb9, 0x40, 0xe2, 0x3e, + 0xd5, 0x2c, 0x3c, 0xd7, 0x55, 0xcb, 0x28, 0x14, + 0x65, 0xd3, 0x1b, 0x28, 0xe7, 0xdc, 0x55, 0x39, + 0x75, 0x2f, 0x6c, 0xf6, 0x15, 0x6e, 0x3f, 0x20, + 0xd1, 0xb8, 0xba, 0x17, 0x1f, 0x7c, 0x2e, 0x5a, + 0x80, 0x9b, 0x17, 0x48, 0xf6, 0x3d, 0x06, 0x32, + 0xed, 0xf7, 0xd0, 0x5d, 0xdb, 0x45, 0x3d, 0xc4, + 0x7c, 0x32, 0x46, 0xe7, 0xb4, 0x38, 0x86, 0x9d, + 0x84, 0x0a, 0xa5, 0xfe, 0x9d, 0xc5, 0x5a, 0xbb, + 0x2b, 0x04, 0xd7, 0x2d, 0x76, 0x3f, 0xcf, 0xe1, + 0x13, 0xba, 0x28, 0xc1, 0x91, 0x9d, 0x25, 0x4f, + 0x46, 0x1d, 0xc9, 0x44, 0x1c, 0xdd, 0x66, 0xb5, + 0x81, 0xd3, 0xca, 0x00, 0x69, 0x73, 0x1b, 0xb5, + 0xf4, 0x04, 0x8a, 0x05, 0x6c, 0xd7, 0xba, 0x4a, + 0xdf, 0x4d, 0x5e, 0x59, 0x5d, 0xe3, 0xe2, 0x74, + 0x98, 0xf9, 0x5a, 0x0f, 0x14, 0xa7, 0x88, 0x19, + 0x06, 0xde, 0x17, 0x73, 0x85, 0xb9, 0x8d, 0xcb, + 0xcb, 0x75, 0xa7, 0xa1, 0xbb, 0x7b, 0x63, 0x8c, + 0x43, 0x90, 0x6c, 0x57, 0x91, 0xc4, 0xc6, 0xc6, + 0xd7, 0xc1, 0x30, 0xa3, 0x5a, 0xee, 0x0a, 0x6c, + 0x09, 0x02, 0xb5, 0xd2, 0x37, 0xaa, 0xb3, 0x41, + 0x67, 0x79, 0x73, 0x2b, 0x61, 0xb7, 0x81, 0xf2, + 0xca, 0xf0, 0x5c, 0xc6, 0x01, 0xb5, 0xcd, 0x6e, + 0xd2, 0xe1, 0xd5, 0x0a, 0xd5, 0x71, 0x05, 0xcd, + 0x96, 0x6c, 0x43, 0x65, 0x03, 0x3c, 0xde, 0x29, + 0x5d, 0x0d, 0xc7, 0x49, 0x03, 0x62, 0x87, 0xa0, + 0x70, 0xaf, 0x0f, 0x48, 0x7b, 0xf3, 0xc3, 0xca, + 0xb0, 0x4b, 0x91, 0xc4, 0xda, 0xdd, 0x4b, 0x9a, + 0xb5, 0xbb, 0xab, 0x3c, 0xd8, 0x41, 0x65, 0x62, + 0x1c, 0x59, 0x3c, 0x45, 0xae, 0x03, 0x82, 0xbb, + 0x47, 0x0e, 0xca, 0xd5, 0x59, 0x08, 0x3b, 0x7c, + 0x45, 0xdc, 0xf6, 0x9e, 0x7a, 0xe7, 0x32, 0x08, + 0x0b, 0xdd, 0x1b, 0x0c, 0xbc, 0x55, 0x73, 0xd9, + 0xdf, 0x34, 0x70, 0x83, 0x4a, 0x75, 0xd4, 0x7f, + 0x1a, 0xb4, 0x37, 0x54, 0xe3, 0xdb, 0x76, 0x6e, + 0xb1, 0xad, 0xbd, 0x63, 0xee, 0x0b, 0x66, 0xb9, + 0xb3, 0x82, 0x86, 0x13, 0x2d, 0x3b, 0xb1, 0x42, + 0x1d, 0xb1, 0xc7, 0x7d, 0x15, 0x76, 0xe5, 0x97, + 0x77, 0x32, 0xbe, 0xf9, 0xd0, 0x74, 0x10, 0xdd, + 0x4e, 0x5a, 0xd3, 0x4e, 0x18, 0xda, 0xf7, 0x1e, + 0xf0, 0x73, 0x28, 0x18, 0x38, 0x97, 0x85, 0xca, + 0x4e, 0x6d, 0x31, 0x96, 0x8a, 0xcd, 0xf7, 0x94, + 0x63, 0xd9, 0x14, 0xfe, 0x6f, 0x2b, 0x18, 0xee, + 0x27, 0x31, 0xd5, 0x02, 0xae, 0x1f, 0xa3, 0xb5, + 0x4b, 0xfe, 0x52, 0xc7, 0xda, 0xcd, 0x79, 0x15, + 0xc4, 0xc6, 0xe9, 0xf6, 0xb0, 0xc5, 0x3b, 0x0f, + 0x18, 0x86, 0x27, 0xb2, 0x4d, 0x8e, 0x25, 0xd4, + 0xd9, 0xc2, 0x53, 0x28, 0xaa, 0x17, 0x05, 0xeb, + 0x44, 0x8f, 0x04, 0xc6, 0xc7, 0xbc, 0x34, 0x55, + 0xc5, 0xad, 0x24, 0x01, 0xd7, 0x20, 0x2b, 0x35, + 0x9d, 0xa6, 0x9b, 0x10, 0x5b, 0x4b, 0x38, 0xf3, + 0x49, 0x05, 0xdb, 0xa3, 0x6d, 0xe5, 0x4c, 0xb0, + 0x10, 0xd2, 0x08, 0x64, 0xa0, 0x8e, 0xf5, 0xc3, + 0x73, 0x97, 0xb7, 0x79, 0x2b, 0x96, 0xd8, 0x66, + 0x6c, 0x9b, 0x70, 0xc8, 0x24, 0xb0, 0xb9, 0x8e, + 0x4b, 0x31, 0x19, 0x6b, 0x43, 0xa2, 0xad, 0x0b, + 0x19, 0x4e, 0xf8, 0x53, 0x6a, 0x65, 0x32, 0x2b, + 0xd7, 0x16, 0x17, 0xf6, 0xb0, 0xb2, 0x7b, 0x98, + 0x1d, 0x14, 0x52, 0x6c, 0x63, 0x9d, 0x4d, 0xb5, + 0xdb, 0xba, 0xaa, 0x43, 0x47, 0x5f, 0xf9, 0x96, + 0xa5, 0xb0, 0x96, 0xb4, 0x6b, 0xa4, 0xe8, 0xdc, + 0x7a, 0xcf, 0xd8, 0xb3, 0xe5, 0xf3, 0x78, 0xab, + 0xdc, 0x64, 0xc6, 0xe5, 0xd6, 0xf7, 0x59, 0x09, + 0x9a, 0xc7, 0x45, 0x2c, 0x11, 0x3a, 0x29, 0x5a, + 0xff, 0x00, 0x8c, 0x66, 0xf8, 0xbb, 0xb6, 0x2a, + 0xd5, 0xbd, 0xc1, 0x86, 0x78, 0xe6, 0x6e, 0xf8, + 0xde, 0xd7, 0x8f, 0x92, 0x6a, 0x83, 0xf4, 0x9b, + 0xb6, 0x82, 0xa8, 0x7a, 0xcd, 0xaf, 0xba, 0xd5, + 0xd8, 0x6b, 0x48, 0xcf, 0xd4, 0xb3, 0xa5, 0x79, + 0x3b, 0x80, 0x2f, 0xa9, 0xf7, 0x98, 0xae, 0x98, + 0xfb, 0x96, 0xdd, 0xd8, 0x5b, 0xdc, 0xb7, 0x68, + 0x9a, 0x36, 0xbb, 0xb2, 0x15, 0x07, 0x23, 0x78, + 0xf9, 0xfd, 0xa4, 0x16, 0xc6, 0x03, 0x9b, 0x03, + 0x5b, 0x0b, 0xab, 0xba, 0x8d, 0x67, 0x13, 0xbd, + 0xf7, 0x29, 0xa3, 0x3f, 0x7a, 0x49, 0x5b, 0x71, + 0xbc, 0x4e, 0xb8, 0x6b, 0xe5, 0xa8, 0x7f, 0x09, + 0x00, 0x6e, 0x1b, 0x0a, 0x96, 0x51, 0x98, 0x88, + 0xeb, 0xc7, 0x2b, 0x89, 0x2e, 0x15, 0x02, 0xbb, + 0xfb, 0xa3, 0x5a, 0xfb, 0xca, 0x4d, 0x55, 0x22, + 0x22, 0x20, 0x22, 0x22, 0x08, 0xed, 0x47, 0xea, + 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, 0xf4, 0x37, + 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, 0xd8, 0xd4, + 0x7e, 0xa3, 0xbc, 0xf2, 0x7f, 0x39, 0xab, 0x5f, + 0x43, 0x7a, 0x99, 0xde, 0x5d, 0xfd, 0xa6, 0xab, + 0xc7, 0x0e, 0x74, 0xb1, 0x9e, 0x62, 0x9d, 0xc9, + 0xd6, 0xb1, 0x22, 0x22, 0xa3, 0x61, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x6a, 0xe4, 0x3d, 0x0a, 0xe7, + 0xc9, 0x3f, 0xc5, 0x2b, 0x69, 0x6a, 0xe4, 0x3d, + 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2a, 0x69, 0xcf, + 0x0a, 0xdc, 0xd8, 0xab, 0x44, 0xea, 0x41, 0x69, + 0x3f, 0x47, 0xb8, 0xf0, 0xdb, 0xe2, 0xa9, 0xe5, + 0x03, 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, 0x6f, 0x8a, + 0xa7, 0x96, 0x98, 0x8e, 0x2d, 0x5a, 0x7e, 0xe6, + 0x18, 0x1e, 0x5a, 0xde, 0x89, 0xd6, 0x22, 0x22, + 0xc9, 0xd2, 0x22, 0x22, 0x0c, 0x57, 0x60, 0x9b, + 0x69, 0x00, 0x34, 0xd9, 0xbd, 0x52, 0xf5, 0x43, + 0x5c, 0x2d, 0x22, 0xbe, 0x80, 0x7f, 0x17, 0x1f, + 0x2c, 0x77, 0x2d, 0xa7, 0xea, 0x9e, 0xec, 0x2b, + 0xc9, 0x00, 0x8a, 0x1d, 0xa1, 0x57, 0xf2, 0x96, + 0x6c, 0x26, 0x68, 0x3e, 0x23, 0x9a, 0x43, 0x9b, + 0xb0, 0x0e, 0x12, 0x36, 0x01, 0xd7, 0x53, 0x13, + 0xd2, 0x4a, 0x7a, 0x29, 0x59, 0x34, 0x4c, 0x9a, + 0x33, 0x56, 0x4a, 0xd0, 0xf6, 0x9e, 0xb3, 0x85, + 0x42, 0xfa, 0x1b, 0xd4, 0x0e, 0x8a, 0xbd, 0xf3, + 0x8c, 0x13, 0x2d, 0xde, 0x6b, 0x36, 0x3d, 0xef, + 0xb4, 0x92, 0xbb, 0xff, 0x00, 0x86, 0x7b, 0x82, + 0x7e, 0x49, 0x0a, 0x79, 0x27, 0xa3, 0xa0, 0x6a, + 0xe7, 0x6c, 0x45, 0xfe, 0x1a, 0xf6, 0xc8, 0x8a, + 0xf4, 0xf0, 0x3d, 0x80, 0x75, 0xcb, 0x4d, 0x3d, + 0xf5, 0xf9, 0xb9, 0xcd, 0x73, 0x5c, 0x5a, 0xed, + 0xed, 0x34, 0x23, 0xae, 0x36, 0x2f, 0xd3, 0xe3, + 0x68, 0x5f, 0x9d, 0x35, 0x4d, 0x89, 0xc7, 0xea, + 0x2c, 0x85, 0xa5, 0x28, 0x23, 0x9d, 0xe5, 0xa3, + 0xf5, 0x5c, 0x78, 0x9b, 0xef, 0x15, 0x02, 0x29, + 0x11, 0x75, 0xbc, 0x6e, 0x89, 0xd3, 0xf9, 0x4d, + 0x0e, 0xdb, 0xab, 0x1b, 0x66, 0x47, 0x7f, 0x73, + 0x6e, 0x1c, 0x2e, 0x1e, 0x49, 0x2d, 0x90, 0x77, + 0xdc, 0xdb, 0x90, 0x72, 0x44, 0x5d, 0x16, 0xd3, + 0x41, 0xd8, 0x65, 0xae, 0xac, 0x6d, 0xa7, 0x9e, + 0x2c, 0x7b, 0x9d, 0x68, 0xd7, 0xb5, 0xb0, 0x77, + 0x4e, 0x98, 0x82, 0x43, 0x9f, 0xdd, 0xf2, 0xaa, + 0x7d, 0xdd, 0xb3, 0x30, 0x19, 0xab, 0xbb, 0x5b, + 0xab, 0x51, 0x75, 0xe6, 0xee, 0x73, 0x22, 0x64, + 0xd5, 0x0d, 0x3b, 0x7b, 0x97, 0x90, 0x37, 0xec, + 0x41, 0xa9, 0x8f, 0x8c, 0x3a, 0x43, 0x21, 0xf8, + 0x9b, 0xb9, 0xca, 0x90, 0x2f, 0x1d, 0x5d, 0xaa, + 0xea, 0x6d, 0x2c, 0x2e, 0xee, 0x2d, 0xac, 0xdb, + 0x6f, 0x0c, 0x56, 0x77, 0x98, 0xff, 0x00, 0x3c, + 0x82, 0x26, 0x0e, 0x01, 0xd3, 0xc4, 0x2a, 0xf0, + 0xe7, 0x81, 0xc5, 0x45, 0xa3, 0x8a, 0xfc, 0x2d, + 0xd7, 0x53, 0x47, 0x75, 0x6d, 0x10, 0xc7, 0x32, + 0x36, 0xcd, 0xe7, 0xd0, 0xb5, 0xd4, 0x8e, 0x46, + 0x91, 0xb0, 0x17, 0xed, 0x20, 0xbb, 0x78, 0x53, + 0x08, 0x56, 0x9a, 0xc9, 0x5c, 0xc7, 0xbd, 0xac, + 0x71, 0x6c, 0x62, 0xaf, 0x20, 0x1a, 0x34, 0x75, + 0x4f, 0x51, 0x67, 0x7e, 0x36, 0xf1, 0x96, 0x82, + 0xee, 0x40, 0xc6, 0x46, 0xe6, 0x87, 0xb1, 0xae, + 0x70, 0x0f, 0x2c, 0x26, 0x9c, 0x41, 0x87, 0x6d, + 0x15, 0x9a, 0x0b, 0x98, 0xb0, 0x2e, 0xba, 0x39, + 0x49, 0x5b, 0x33, 0x72, 0x17, 0x1c, 0x13, 0x32, + 0x02, 0xd7, 0x35, 0xf6, 0xee, 0x6e, 0xc2, 0x46, + 0xce, 0x10, 0x2b, 0xef, 0x2d, 0x69, 0x33, 0xf8, + 0xab, 0x38, 0x9f, 0x67, 0xe7, 0x5f, 0x89, 0x5a, + 0x32, 0x37, 0xc5, 0x0c, 0x4f, 0xb7, 0x6f, 0x17, + 0x09, 0xaf, 0x47, 0x49, 0x8f, 0x74, 0x38, 0x54, + 0x8a, 0xb7, 0x12, 0xf3, 0x89, 0x7b, 0x0d, 0xb5, + 0xcc, 0xf2, 0xb2, 0x28, 0xa2, 0x73, 0xa4, 0x97, + 0xea, 0xdb, 0x4e, 0xfa, 0x9f, 0xa3, 0x5d, 0xeb, + 0x75, 0xba, 0x7b, 0x2c, 0x64, 0xb2, 0x6c, 0x91, + 0x74, 0x6c, 0xc8, 0xbb, 0x82, 0xde, 0x52, 0x41, + 0x61, 0xea, 0xd4, 0x8d, 0xd4, 0x50, 0x34, 0x0b, + 0xd7, 0xc9, 0x7a, 0xb2, 0x33, 0x48, 0xb6, 0x38, + 0xee, 0x5d, 0x3c, 0x8f, 0x9a, 0x4b, 0x5b, 0x81, + 0x6d, 0x24, 0x70, 0xf0, 0xb0, 0x0a, 0xb7, 0x89, + 0xb2, 0x17, 0xc8, 0x69, 0xc2, 0xb3, 0xe2, 0xf0, + 0xb8, 0x0b, 0xa7, 0x63, 0x9d, 0x1c, 0x82, 0x3b, + 0xa9, 0x83, 0xba, 0x4b, 0x7b, 0xa3, 0xfc, 0x29, + 0x83, 0x5c, 0x58, 0x43, 0x1e, 0x37, 0x3c, 0x75, + 0x10, 0x55, 0x38, 0x89, 0xdd, 0xb5, 0x64, 0xb8, + 0xb5, 0xbc, 0xb6, 0x63, 0x5f, 0x71, 0x0c, 0x90, + 0xb6, 0x4e, 0xf0, 0xbd, 0xa5, 0xb5, 0xe6, 0xaa, + 0xb1, 0x9c, 0x9d, 0xdb, 0x34, 0xfc, 0xb2, 0xc2, + 0xc8, 0xa0, 0x9b, 0x1d, 0x7c, 0x23, 0x95, 0xad, + 0x63, 0x40, 0x74, 0x5f, 0x14, 0x38, 0x6f, 0x70, + 0x04, 0x2c, 0x3a, 0x86, 0xff, 0x00, 0x15, 0x75, + 0x8f, 0x9a, 0x59, 0x44, 0x03, 0x20, 0xf7, 0xb1, + 0xf0, 0x1b, 0x59, 0x5e, 0xf0, 0xee, 0x2f, 0xac, + 0x32, 0x31, 0xdd, 0xcb, 0x76, 0x20, 0xf8, 0xd0, + 0x77, 0xde, 0x69, 0xaa, 0x2c, 0x9c, 0x4d, 0x1b, + 0x2b, 0x8c, 0x4e, 0xe6, 0x70, 0x5d, 0xb8, 0xd0, + 0x03, 0x5d, 0xdc, 0xab, 0xf3, 0x85, 0x8d, 0xdb, + 0xad, 0xaf, 0x20, 0xb8, 0x69, 0xa1, 0x8a, 0x46, + 0xbc, 0x1e, 0x62, 0x17, 0x73, 0xd4, 0xb9, 0x96, + 0xd9, 0xe9, 0x6b, 0x8c, 0x83, 0x1d, 0x47, 0xcf, + 0x08, 0x64, 0x27, 0xf5, 0xe6, 0x1c, 0x22, 0x9c, + 0xd5, 0x25, 0x33, 0x8a, 0xd6, 0x16, 0xd5, 0xf7, + 0x99, 0x6b, 0xdc, 0xf3, 0xc9, 0xad, 0xd4, 0xef, + 0x10, 0x72, 0xd1, 0x80, 0xf0, 0xb7, 0xde, 0x57, + 0x5b, 0x08, 0x04, 0x31, 0x1a, 0x7c, 0x73, 0xc5, + 0xee, 0x72, 0x2a, 0x8e, 0x98, 0xb7, 0xb8, 0xb7, + 0xc4, 0xc0, 0xcb, 0x97, 0xf7, 0x52, 0x0e, 0x26, + 0x07, 0x6e, 0x68, 0x3d, 0xea, 0xba, 0x43, 0xf5, + 0x4c, 0xad, 0x0d, 0x00, 0xdd, 0xb9, 0x2a, 0xce, + 0x44, 0x3e, 0xd1, 0x11, 0x42, 0x44, 0x44, 0x40, + 0x51, 0xfa, 0x83, 0xd5, 0x33, 0xfc, 0x9f, 0x18, + 0x29, 0x05, 0x1f, 0xa8, 0x3d, 0x53, 0x3f, 0xc9, + 0xf1, 0x82, 0xbd, 0xbd, 0xba, 0x74, 0xc3, 0x2c, + 0x4f, 0x02, 0xee, 0xe5, 0x7a, 0x9e, 0xe9, 0x5f, + 0x54, 0x37, 0xc3, 0x7f, 0x6d, 0x4b, 0x3f, 0x72, + 0x89, 0xd2, 0xbe, 0xa8, 0x6f, 0x86, 0xfe, 0xda, + 0x96, 0x7e, 0xe5, 0x37, 0x78, 0xb5, 0xef, 0x4a, + 0x30, 0xdc, 0x0b, 0x7b, 0xb0, 0xe7, 0x37, 0x5f, + 0xe4, 0xf1, 0xe5, 0x59, 0xf6, 0x21, 0x5f, 0xd5, + 0x02, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, 0x3e, 0xc4, + 0x2b, 0xfa, 0xe5, 0xb3, 0x9e, 0xbd, 0xf9, 0x7b, + 0x1f, 0x14, 0xcd, 0x83, 0xfe, 0x35, 0xb1, 0x11, + 0x16, 0xcf, 0x34, 0x44, 0x44, 0x05, 0x07, 0x91, + 0x6b, 0x1d, 0x2c, 0xd1, 0xbc, 0x71, 0x71, 0x1a, + 0x10, 0x37, 0xf0, 0x91, 0x47, 0x05, 0x38, 0xa3, + 0xf2, 0xb0, 0x34, 0xb1, 0xb2, 0x8d, 0x8e, 0xad, + 0x2a, 0x06, 0xd2, 0x7e, 0x2f, 0xbe, 0x83, 0x4b, + 0x46, 0x48, 0xe1, 0x85, 0xf3, 0x29, 0x0d, 0x64, + 0xc7, 0x4b, 0x25, 0xb1, 0xf0, 0x41, 0xe3, 0x8f, + 0xf7, 0x5c, 0xa7, 0x55, 0x5b, 0x0d, 0x70, 0x2c, + 0xf5, 0x2c, 0xb6, 0x8e, 0x34, 0x6e, 0x46, 0x1e, + 0x91, 0xb4, 0xef, 0x4c, 0xb0, 0x6f, 0xa7, 0x3b, + 0x1d, 0xef, 0x2b, 0x4a, 0x99, 0xce, 0x88, 0x17, + 0xa1, 0x78, 0xbd, 0x0a, 0x12, 0xe3, 0x3e, 0xd6, + 0xec, 0x3c, 0xdf, 0x52, 0x36, 0xe4, 0x0a, 0x36, + 0xee, 0x16, 0xba, 0xbd, 0x76, 0xf7, 0x27, 0xb4, + 0xa2, 0x34, 0x7e, 0xac, 0x97, 0x4e, 0x5f, 0x71, + 0xba, 0x18, 0xe7, 0xb4, 0x99, 0xc3, 0xa7, 0x6b, + 0x9a, 0x0b, 0x80, 0xfd, 0x26, 0x3b, 0x90, 0xab, + 0xd7, 0xb6, 0x3b, 0x1e, 0x93, 0x1b, 0x65, 0x7e, + 0x06, 0xd8, 0x64, 0x31, 0xb8, 0xf5, 0x9c, 0x2b, + 0xf0, 0x2e, 0x4c, 0x50, 0x76, 0xab, 0xfd, 0x7f, + 0xa7, 0xf2, 0xef, 0x7e, 0x06, 0xca, 0x5e, 0xee, + 0xf6, 0x1e, 0x18, 0x6e, 0x5d, 0xb2, 0x21, 0x2b, + 0x87, 0x73, 0x1b, 0xba, 0x8b, 0x46, 0xe3, 0x25, + 0xaa, 0x34, 0x7e, 0x2e, 0xfb, 0x27, 0x97, 0x74, + 0x0f, 0x9a, 0xf1, 0xcd, 0x65, 0xa5, 0xbc, 0x5b, + 0x5a, 0xd9, 0x69, 0xc3, 0xc6, 0xe3, 0xe0, 0x85, + 0xc8, 0x81, 0x2d, 0x20, 0xb7, 0x61, 0x1b, 0x41, + 0x1c, 0x85, 0x4d, 0xdf, 0x6b, 0x0c, 0xf6, 0x4f, + 0x14, 0xcc, 0x45, 0xf4, 0xcd, 0x9e, 0xda, 0x32, + 0x0b, 0x5c, 0xf6, 0x83, 0x27, 0x73, 0xbb, 0xbb, + 0x41, 0xad, 0x73, 0x7f, 0x79, 0x90, 0xb8, 0x96, + 0xfe, 0xf6, 0x43, 0x2d, 0xd5, 0xc1, 0xe2, 0x7c, + 0x87, 0xad, 0xb9, 0x5b, 0xfc, 0xdb, 0x11, 0x7d, + 0x05, 0x95, 0xf5, 0xed, 0xb1, 0x96, 0x2b, 0x8c, + 0x6b, 0x89, 0x10, 0x77, 0x0e, 0x6c, 0xb6, 0xee, + 0xe1, 0x91, 0xcd, 0xa6, 0xca, 0xd3, 0x6e, 0xd5, + 0x46, 0xe3, 0xea, 0x2d, 0x91, 0x99, 0xc9, 0x32, + 0xda, 0x2b, 0x48, 0xee, 0x1d, 0x1c, 0x10, 0x71, + 0x74, 0x4d, 0x6d, 0x05, 0x3a, 0x4e, 0xff, 0x00, + 0x6e, 0xfd, 0xaa, 0x50, 0xbb, 0xc0, 0xfc, 0x75, + 0xb5, 0xbc, 0x22, 0xc4, 0xc7, 0x79, 0x05, 0xc4, + 0x2d, 0x26, 0xe6, 0x09, 0x19, 0x6b, 0x30, 0xe8, + 0xdc, 0x45, 0x1d, 0xc7, 0xca, 0x45, 0x38, 0x82, + 0x87, 0xca, 0xe4, 0x31, 0xe2, 0xd7, 0x31, 0x8d, + 0x6d, 0xfb, 0xe7, 0x69, 0x96, 0x29, 0xac, 0x64, + 0x75, 0x5c, 0x78, 0xda, 0x3b, 0xb6, 0x02, 0xde, + 0xe6, 0x82, 0xbb, 0xd5, 0x4c, 0xb8, 0x1d, 0xfb, + 0x50, 0x17, 0x13, 0x40, 0x09, 0xe6, 0x50, 0x95, + 0xb2, 0xf7, 0x5a, 0x32, 0x70, 0xc8, 0x8d, 0xb9, + 0x9a, 0x17, 0x41, 0x13, 0x65, 0x6b, 0xa9, 0x1b, + 0xc5, 0xc4, 0x23, 0xb9, 0x99, 0x8f, 0x6d, 0x49, + 0xf7, 0x54, 0x65, 0xde, 0xa8, 0xbd, 0x9c, 0xc8, + 0xf8, 0xe2, 0x86, 0xda, 0x79, 0xde, 0xd9, 0x2e, + 0x67, 0x89, 0xa7, 0x8e, 0x47, 0xb0, 0xd5, 0xa5, + 0xd5, 0x34, 0x1b, 0x76, 0xec, 0x51, 0xf0, 0xe3, + 0x72, 0x37, 0x1f, 0x55, 0x03, 0xdc, 0x0f, 0x2d, + 0x28, 0xa4, 0xed, 0x74, 0x6e, 0x66, 0xe3, 0xbe, + 0x68, 0x8c, 0x75, 0xf6, 0xa0, 0x8b, 0x97, 0x23, + 0x7b, 0x2b, 0xdd, 0x24, 0x93, 0xbc, 0xb9, 0xe5, + 0xc4, 0xd0, 0xf0, 0x8e, 0xec, 0xd5, 0xd4, 0x03, + 0xaa, 0xb5, 0x8b, 0x81, 0x35, 0x3b, 0x4f, 0x54, + 0xed, 0x57, 0x8b, 0x2f, 0x67, 0x0e, 0x75, 0x0d, + 0xc4, 0x8e, 0x3d, 0x50, 0x05, 0x15, 0x86, 0xc3, + 0xd9, 0xfe, 0x32, 0x1a, 0x13, 0x00, 0x7b, 0xb7, + 0xd5, 0xdb, 0x7b, 0x68, 0x39, 0x4c, 0x50, 0xdc, + 0x4c, 0x69, 0x0c, 0x6e, 0x90, 0x9d, 0xdc, 0x20, + 0x95, 0x29, 0x69, 0xa4, 0xb5, 0x05, 0xdd, 0x0b, + 0x2d, 0x8b, 0x01, 0xe5, 0x79, 0xe1, 0x5d, 0x7e, + 0xd7, 0x03, 0x6f, 0x08, 0x02, 0x28, 0xda, 0xd1, + 0xbb, 0xb9, 0x00, 0x76, 0x96, 0xf3, 0x2c, 0x1a, + 0xd0, 0xea, 0x0d, 0xad, 0xdc, 0x3a, 0xa8, 0x39, + 0x7d, 0x9f, 0xb3, 0x3b, 0xe9, 0x28, 0x6e, 0xae, + 0x9b, 0x18, 0xe5, 0x6b, 0x07, 0x11, 0x5d, 0x0b, + 0x4a, 0x62, 0xad, 0x30, 0x36, 0xc2, 0xc6, 0xd9, + 0x95, 0x12, 0x1a, 0xc9, 0x31, 0xef, 0xdc, 0xee, + 0xa9, 0x52, 0x7d, 0x04, 0x61, 0x9b, 0x00, 0xae, + 0xcd, 0xcb, 0xe4, 0xf0, 0x40, 0xc7, 0x4f, 0x21, + 0xe1, 0x8e, 0x20, 0x5e, 0xf3, 0xd4, 0x6b, 0x45, + 0x4a, 0x0a, 0x86, 0xab, 0x85, 0xd9, 0xbd, 0x61, + 0x0d, 0x8b, 0x4f, 0xf0, 0x31, 0xf1, 0x37, 0xa4, + 0xa7, 0xe9, 0x3b, 0xf8, 0xae, 0x1e, 0x28, 0x56, + 0xcc, 0x74, 0x1c, 0x72, 0x36, 0x57, 0x1a, 0xf0, + 0x72, 0x75, 0x39, 0x00, 0x0a, 0x8d, 0xa5, 0x66, + 0xba, 0xc8, 0xe6, 0x32, 0x59, 0x79, 0x1e, 0x5b, + 0x1c, 0x8e, 0x2e, 0x2d, 0xea, 0xb9, 0xe6, 0xad, + 0x1f, 0x25, 0xaa, 0xff, 0x00, 0x89, 0xef, 0x1e, + 0x41, 0x04, 0x13, 0xb0, 0x0e, 0x45, 0x6a, 0xf3, + 0xc4, 0x75, 0x42, 0x23, 0xad, 0xbe, 0x88, 0x8a, + 0xa9, 0x11, 0x11, 0x01, 0x06, 0xf0, 0x88, 0x37, + 0x84, 0x14, 0x0d, 0x1b, 0xfd, 0xf1, 0x7d, 0xcd, + 0x71, 0xf6, 0x81, 0x74, 0x85, 0xcd, 0xf4, 0x6f, + 0xf7, 0xc5, 0xf7, 0x35, 0xc7, 0xda, 0x05, 0xd2, + 0x16, 0x38, 0x7d, 0x8f, 0x3a, 0x5e, 0x9f, 0xc6, + 0x79, 0x9a, 0x7d, 0x55, 0xbd, 0x48, 0xbc, 0xdf, + 0xd4, 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, 0xf4, + 0x68, 0xbc, 0x11, 0xda, 0x58, 0x73, 0x7f, 0x53, + 0x1f, 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, 0xa2, + 0xf0, 0x47, 0x69, 0x71, 0x59, 0xfe, 0xcf, 0x11, + 0xea, 0xa8, 0x71, 0xd5, 0xcb, 0xdb, 0xdf, 0x96, + 0x54, 0x44, 0x5e, 0x9b, 0x01, 0x11, 0x10, 0x16, + 0x8e, 0x53, 0x63, 0x23, 0x26, 0x9c, 0x21, 0xdb, + 0x41, 0xe5, 0xaa, 0xde, 0x58, 0xe7, 0x89, 0xb2, + 0xc4, 0xe6, 0x38, 0x56, 0xa3, 0x66, 0xca, 0xed, + 0x41, 0x11, 0x85, 0x77, 0x47, 0x91, 0xb8, 0x8f, + 0x73, 0x6e, 0x23, 0x6b, 0xc0, 0xfd, 0x68, 0x8f, + 0x01, 0xa7, 0xc9, 0x73, 0x54, 0xda, 0xae, 0x74, + 0xad, 0xb3, 0xb9, 0x86, 0xe4, 0x9f, 0xe1, 0xc7, + 0x20, 0x6b, 0x8f, 0x51, 0xaf, 0xee, 0x1f, 0x5e, + 0xb6, 0xd5, 0x63, 0xa5, 0x10, 0x17, 0xd8, 0xdc, + 0xbe, 0x17, 0xd3, 0x50, 0x70, 0x0d, 0x79, 0x61, + 0xe6, 0x1a, 0xb3, 0x21, 0x10, 0x14, 0x6c, 0x92, + 0x74, 0xcc, 0xe6, 0x90, 0x07, 0x28, 0x05, 0xd0, + 0x7d, 0xb1, 0xd8, 0xf4, 0x59, 0xab, 0x4b, 0xe0, + 0x36, 0x5c, 0x43, 0xc0, 0xe3, 0xfa, 0xd1, 0x9f, + 0xf4, 0x2a, 0xa1, 0xa7, 0x9d, 0x82, 0x19, 0x26, + 0x0c, 0xf3, 0x24, 0x7d, 0x93, 0x85, 0x09, 0x88, + 0xd0, 0xb4, 0xd7, 0xbe, 0x3d, 0x50, 0x83, 0xa9, + 0xe9, 0x4c, 0x46, 0x17, 0x2d, 0xa0, 0x01, 0x30, + 0xc3, 0x6f, 0x2c, 0xb0, 0xbe, 0x29, 0xee, 0x78, + 0x45, 0x43, 0x98, 0x48, 0x2e, 0x25, 0x43, 0xd8, + 0xe9, 0x7c, 0x1e, 0x42, 0x6c, 0x35, 0x9e, 0x56, + 0x62, 0xe6, 0x4b, 0x6e, 0xe1, 0x69, 0xd0, 0x37, + 0xa3, 0xe9, 0x0b, 0x5f, 0xb4, 0xbd, 0xcd, 0xdf, + 0xb1, 0x5e, 0xb1, 0xf6, 0x7a, 0x63, 0x1d, 0x87, + 0x8b, 0x1f, 0x6a, 0xe8, 0xe3, 0xc7, 0xe4, 0x01, + 0x10, 0xb1, 0xcf, 0xfa, 0xde, 0x31, 0xb7, 0x84, + 0x9e, 0xaa, 0xac, 0x69, 0xfc, 0xd5, 0x95, 0xbe, + 0x6a, 0xdb, 0x1b, 0xe6, 0x53, 0x35, 0x96, 0x2c, + 0x9a, 0xdd, 0xf3, 0xbd, 0x94, 0x8a, 0x1e, 0x17, + 0x39, 0xf5, 0x0e, 0x23, 0x75, 0x02, 0x0a, 0x06, + 0x7f, 0x1f, 0x73, 0xa5, 0x35, 0x25, 0xc4, 0x31, + 0x40, 0x38, 0x01, 0x71, 0xb3, 0x32, 0x8e, 0x30, + 0x63, 0x77, 0x7a, 0xe1, 0x5d, 0xe5, 0x5c, 0xa0, + 0x9f, 0xf1, 0x19, 0xb0, 0xc2, 0x7e, 0x17, 0x5b, + 0xe4, 0xac, 0xa4, 0x6b, 0xa2, 0xe1, 0xfe, 0x18, + 0xb9, 0x88, 0x12, 0x1c, 0x58, 0xda, 0x54, 0xd4, + 0x2a, 0xf6, 0xbe, 0xd5, 0x16, 0x3a, 0x97, 0x2f, + 0x0b, 0xac, 0xe2, 0x22, 0x1b, 0x10, 0xe8, 0xc4, + 0xe7, 0xff, 0x00, 0x50, 0x57, 0x78, 0x1c, 0x81, + 0x64, 0xc7, 0x45, 0x2d, 0xee, 0x9d, 0x85, 0xf1, + 0xdd, 0xc9, 0x04, 0x96, 0x77, 0x8c, 0x81, 0xa7, + 0x67, 0x04, 0x6d, 0x9f, 0xe3, 0x8e, 0x11, 0xc5, + 0xb4, 0xf5, 0xd4, 0xc2, 0x25, 0x21, 0x63, 0x70, + 0xeb, 0x6b, 0xb9, 0x5f, 0x7b, 0x07, 0x49, 0x88, + 0x11, 0x17, 0x5c, 0xb5, 0xf1, 0x36, 0x17, 0x39, + 0xf1, 0x9d, 0x9d, 0x13, 0x77, 0xd6, 0xbb, 0x96, + 0x31, 0x97, 0xb0, 0xc2, 0x4f, 0x71, 0x79, 0x0d, + 0xdb, 0x72, 0x53, 0x5d, 0xce, 0xc9, 0x38, 0x5a, + 0xe2, 0xd3, 0xd0, 0x90, 0x78, 0x9b, 0x28, 0xa1, + 0x1b, 0x2b, 0x4a, 0x2c, 0x0e, 0xd2, 0xce, 0x8e, + 0x69, 0x26, 0xcc, 0xdd, 0xba, 0x4b, 0x58, 0xe4, + 0x60, 0x17, 0x8c, 0x79, 0x7c, 0x4e, 0x6b, 0x89, + 0x06, 0xae, 0x35, 0x2d, 0x70, 0x70, 0xa1, 0x59, + 0xac, 0xec, 0x2c, 0x2d, 0x2f, 0xec, 0x24, 0x6d, + 0xad, 0xa5, 0xcd, 0x95, 0xed, 0xc7, 0x9b, 0x3a, + 0x68, 0xe4, 0x37, 0x01, 0xaf, 0xa1, 0xa0, 0x1c, + 0x5b, 0x41, 0xea, 0xa0, 0xc7, 0x1e, 0xa5, 0xb5, + 0xb6, 0x95, 0xed, 0xc3, 0x47, 0x7b, 0x2d, 0xbf, + 0x76, 0x59, 0x6a, 0xe7, 0x56, 0x0e, 0xec, 0x6e, + 0x73, 0x00, 0x26, 0x82, 0xaa, 0xbc, 0xcc, 0x75, + 0xf4, 0x8f, 0xb6, 0x06, 0x2e, 0x8c, 0x5f, 0x3b, + 0x86, 0xdd, 0xcf, 0xee, 0x5a, 0xe3, 0x5a, 0x6c, + 0x27, 0xae, 0xad, 0x58, 0xdc, 0xb3, 0x6d, 0x6c, + 0xef, 0xbf, 0x11, 0x26, 0x39, 0xb1, 0x57, 0xec, + 0x77, 0x05, 0xb9, 0x6c, 0x2e, 0x7b, 0x3b, 0xc3, + 0xdc, 0xfc, 0x60, 0x38, 0x6a, 0x42, 0xd3, 0xcb, + 0xe5, 0x70, 0xf7, 0x22, 0x28, 0xe5, 0xc8, 0x55, + 0xf6, 0xd7, 0x6f, 0xbb, 0xb7, 0x9a, 0x08, 0xcb, + 0x81, 0x8e, 0x43, 0xc6, 0x63, 0xe1, 0xee, 0x78, + 0x5c, 0xd2, 0x83, 0x43, 0xf2, 0xa6, 0x4b, 0xa1, + 0xb4, 0xb8, 0xe2, 0x63, 0xa0, 0xba, 0x9b, 0xa0, + 0x73, 0xd8, 0x6a, 0x62, 0x70, 0x3c, 0x27, 0x8c, + 0x7b, 0x8a, 0x51, 0xfa, 0x5f, 0x19, 0x66, 0xdb, + 0xf3, 0x2b, 0xc4, 0xce, 0xb0, 0x96, 0x21, 0xc7, + 0x34, 0x9d, 0x14, 0x46, 0x29, 0x86, 0xc9, 0x3b, + 0x8d, 0xbb, 0xf7, 0x28, 0xb9, 0x35, 0x94, 0xb1, + 0x74, 0xc2, 0xcd, 0x8e, 0x60, 0x99, 0xd3, 0x82, + 0xd7, 0x11, 0xc3, 0xd1, 0xcd, 0xde, 0xf7, 0x3c, + 0x8e, 0x69, 0xda, 0xb5, 0x66, 0xd6, 0x19, 0x57, + 0xd4, 0x30, 0x45, 0x1f, 0x1c, 0x51, 0xc1, 0x27, + 0x70, 0x1d, 0xc6, 0xc8, 0xbb, 0xce, 0x2e, 0x3a, + 0xed, 0x08, 0x27, 0xb1, 0xcd, 0xd3, 0xa2, 0x2c, + 0x74, 0x97, 0x31, 0xf9, 0x8c, 0xc6, 0x67, 0xb1, + 0xb7, 0x80, 0x17, 0xc2, 0xf2, 0xd7, 0x77, 0x93, + 0x35, 0xdc, 0x8e, 0x69, 0xd8, 0xe5, 0xaf, 0x75, + 0x95, 0xb8, 0xfc, 0x23, 0x25, 0x6a, 0xfb, 0xc0, + 0xcb, 0x8b, 0x1b, 0xd6, 0xc9, 0x6b, 0xc2, 0xf0, + 0xde, 0x26, 0x0a, 0x8e, 0x18, 0xc0, 0xde, 0x06, + 0xc2, 0xaa, 0xb7, 0x59, 0x3b, 0xdb, 0xb2, 0x7c, + 0xe6, 0x67, 0x4b, 0x53, 0xc5, 0x42, 0x76, 0x56, + 0x94, 0xd8, 0x37, 0x6e, 0x5a, 0xc5, 0xfe, 0xea, + 0x0b, 0x6e, 0x5f, 0x50, 0xe3, 0xef, 0x31, 0xb3, + 0xc7, 0x3b, 0xa2, 0xbc, 0xbc, 0x98, 0x30, 0xc5, + 0x2b, 0x2d, 0xfa, 0x19, 0x18, 0xf1, 0xdf, 0x3a, + 0x49, 0x2b, 0xdd, 0x6c, 0x55, 0x98, 0xa7, 0x74, + 0x72, 0x36, 0x46, 0x9a, 0x39, 0x84, 0x38, 0x1e, + 0xb8, 0x35, 0x58, 0x58, 0x24, 0x79, 0xa3, 0x1a, + 0x5c, 0x7a, 0xc2, 0xaa, 0x4b, 0x19, 0xa7, 0xb2, + 0x17, 0xd7, 0x31, 0xc7, 0x23, 0x0d, 0xbc, 0x0e, + 0x70, 0xe9, 0x26, 0x78, 0xa0, 0x6b, 0x79, 0x4d, + 0x10, 0x75, 0x2d, 0x67, 0x94, 0xe9, 0xb4, 0x75, + 0xa3, 0x62, 0x35, 0x93, 0x28, 0x62, 0x68, 0x1d, + 0x56, 0xb4, 0x74, 0x8f, 0xf7, 0xda, 0x16, 0x4d, + 0x37, 0x8d, 0x7d, 0x9e, 0x32, 0x0b, 0x27, 0x13, + 0x52, 0x0b, 0xdf, 0xb3, 0x7b, 0xdf, 0xb7, 0xde, + 0x55, 0xfd, 0x52, 0xf6, 0x5c, 0xe6, 0xb1, 0x38, + 0x2c, 0x6c, 0x95, 0x86, 0xc6, 0x38, 0xe3, 0x64, + 0x83, 0x77, 0x13, 0xe8, 0x5c, 0xef, 0x71, 0x80, + 0x2b, 0x9d, 0x9d, 0x3c, 0xe5, 0x8d, 0x6b, 0x85, + 0x58, 0x79, 0x79, 0x40, 0x53, 0x3d, 0x14, 0xc4, + 0x75, 0xf4, 0x91, 0x9d, 0x33, 0x14, 0x62, 0x38, + 0x9b, 0x18, 0xdc, 0xd0, 0x02, 0xfb, 0x44, 0x55, + 0x48, 0x88, 0x88, 0x08, 0x88, 0x82, 0x33, 0x2d, + 0xf5, 0xd0, 0xf3, 0x1e, 0xda, 0x9b, 0x6f, 0x7a, + 0x39, 0x94, 0x26, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, + 0xb5, 0x36, 0xde, 0xf4, 0x73, 0x2f, 0x3b, 0x07, + 0xcf, 0x63, 0xb4, 0xda, 0xfd, 0x32, 0xe8, 0xbb, + 0xc1, 0xb3, 0xa2, 0xad, 0x6c, 0x37, 0x9e, 0x8b, + 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, 0x42, 0x6e, + 0xbc, 0xfe, 0x57, 0xcf, 0x56, 0xdb, 0xcf, 0x45, + 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, + 0x5e, 0x7f, 0x2b, 0xe7, 0xaf, 0x56, 0x9d, 0x8a, + 0xbb, 0xce, 0x1a, 0xf8, 0xd6, 0xbc, 0xe5, 0xad, + 0x11, 0x16, 0x6d, 0x84, 0x44, 0x40, 0x58, 0xee, + 0x41, 0x36, 0xf2, 0x00, 0x68, 0x4b, 0x4e, 0xd5, + 0x91, 0x0e, 0xee, 0xaa, 0x0a, 0x9e, 0x45, 0xdd, + 0x1b, 0xad, 0xaf, 0x58, 0x36, 0xd9, 0xcd, 0x1c, + 0xc6, 0x9b, 0xb8, 0x41, 0xe0, 0x94, 0x7e, 0xc3, + 0x95, 0xb3, 0xdf, 0xeb, 0xa8, 0x1c, 0x9d, 0xab, + 0x3a, 0x49, 0x62, 0x1d, 0xe3, 0xc1, 0xe2, 0x6e, + 0xc0, 0x38, 0x4f, 0x20, 0x5b, 0xd8, 0x1b, 0xbf, + 0x3b, 0xc5, 0x42, 0xf2, 0x6b, 0x24, 0x40, 0xc1, + 0x2d, 0x77, 0xf1, 0xc4, 0x78, 0x0d, 0x7b, 0x15, + 0x53, 0xdc, 0x12, 0x0b, 0xe9, 0x9b, 0xd7, 0xca, + 0xf4, 0x6f, 0x50, 0x2a, 0xfe, 0xd3, 0xac, 0x4d, + 0xe6, 0x93, 0xb8, 0x70, 0x15, 0x7d, 0xb3, 0x9b, + 0x2b, 0x7d, 0xc3, 0xb5, 0x70, 0xd8, 0x4c, 0x4d, + 0x99, 0x8e, 0x99, 0x86, 0x48, 0x83, 0x81, 0x7b, + 0x01, 0xa1, 0x73, 0x79, 0x40, 0x3c, 0x8b, 0xf4, + 0x8e, 0x66, 0xd1, 0xb7, 0xb8, 0x9b, 0xbb, 0x57, + 0x0a, 0x89, 0x62, 0x7b, 0x69, 0xee, 0x2f, 0xcd, + 0xd2, 0xb0, 0xc7, 0x23, 0xa3, 0x70, 0xa1, 0x63, + 0x8b, 0x4f, 0xb8, 0x68, 0x83, 0xb5, 0xe8, 0x83, + 0xa1, 0xed, 0xf1, 0x72, 0x66, 0xb1, 0x2d, 0x16, + 0x61, 0x8d, 0xe0, 0xbb, 0x74, 0xcf, 0x25, 0xec, + 0xa7, 0x23, 0xaa, 0xa2, 0xb3, 0x97, 0xb0, 0x58, + 0x65, 0xa4, 0x6e, 0x3b, 0x1f, 0x2d, 0xec, 0x17, + 0xf3, 0x5b, 0xde, 0xc6, 0xe8, 0x1b, 0xc5, 0x13, + 0xcb, 0x6b, 0xc4, 0x4b, 0xba, 0xb5, 0x5c, 0xa1, + 0xb2, 0xca, 0xd6, 0x3a, 0x36, 0xbd, 0xcd, 0x63, + 0xe9, 0xc6, 0xc0, 0x48, 0x0e, 0xa6, 0xea, 0x8e, + 0x55, 0x71, 0xd1, 0x5e, 0xd1, 0x67, 0xd3, 0xb0, + 0x1b, 0x0b, 0xc8, 0x9d, 0x77, 0x63, 0x52, 0x62, + 0xa1, 0xa3, 0xe3, 0x27, 0x78, 0x6d, 0x79, 0x10, + 0x4d, 0x7b, 0x4e, 0xd6, 0x16, 0x37, 0xf1, 0x7e, + 0x5e, 0xb7, 0x8b, 0xa4, 0x95, 0x8e, 0x6b, 0xe7, + 0x94, 0x9d, 0x91, 0xb8, 0x0a, 0xf0, 0x37, 0xaa, + 0x76, 0xed, 0x55, 0xdd, 0x3a, 0x0d, 0xc5, 0xa6, + 0x52, 0xc0, 0x48, 0xf6, 0x70, 0xdb, 0x9b, 0xa8, + 0xe3, 0x61, 0x01, 0xaf, 0x74, 0x5f, 0xa5, 0xca, + 0x68, 0x36, 0xa8, 0x2b, 0xdb, 0x98, 0x2e, 0x72, + 0x37, 0x57, 0x90, 0x35, 0xcd, 0x8a, 0xe2, 0x57, + 0x3d, 0x8d, 0x90, 0xd5, 0xc0, 0x38, 0xd7, 0x69, + 0x0b, 0x6b, 0x09, 0x97, 0x18, 0xac, 0x83, 0x6f, + 0x1d, 0x19, 0x99, 0x82, 0x39, 0x23, 0x7c, 0x40, + 0xd3, 0x88, 0x48, 0xde, 0x1a, 0x55, 0x10, 0xb0, + 0xbb, 0x4c, 0x5d, 0x5c, 0x8e, 0x9e, 0xe2, 0xfe, + 0x4c, 0x85, 0xb1, 0xb7, 0x13, 0x74, 0x91, 0xb8, + 0xf1, 0xc4, 0xe2, 0xd0, 0xfa, 0x4b, 0x1b, 0xb7, + 0x0a, 0x6e, 0x21, 0x7b, 0x35, 0x86, 0x26, 0xce, + 0x3f, 0xc4, 0x71, 0xd0, 0x5a, 0xe4, 0x2d, 0x6d, + 0xdc, 0xc6, 0xcc, 0x5f, 0x23, 0x9e, 0xf0, 0xc7, + 0x90, 0x38, 0xe4, 0x89, 0xe0, 0x50, 0xf3, 0x15, + 0x5f, 0x7e, 0xa3, 0xbc, 0x6c, 0xd0, 0x4d, 0x69, + 0xff, 0x00, 0xc5, 0x7c, 0x10, 0xf9, 0xb9, 0x2d, + 0x35, 0xe9, 0x23, 0xdb, 0x41, 0x20, 0xdc, 0x76, + 0x6c, 0x5a, 0xf7, 0x79, 0xcc, 0x9d, 0xdc, 0x22, + 0xde, 0x79, 0xcb, 0xa1, 0x6d, 0x0f, 0x03, 0x40, + 0x68, 0x3c, 0x3d, 0xef, 0x17, 0x0e, 0xfa, 0x21, + 0xd0, 0xbc, 0x79, 0xe3, 0x2d, 0x72, 0xd9, 0xcc, + 0x74, 0xfc, 0x30, 0x5b, 0xb2, 0x16, 0xcd, 0x66, + 0x60, 0xe1, 0x85, 0xe5, 0xa0, 0x87, 0x86, 0x31, + 0xfd, 0x52, 0x0d, 0x14, 0x76, 0x67, 0x2f, 0x84, + 0xc9, 0x5b, 0x5c, 0x43, 0x2d, 0xe9, 0x6c, 0x77, + 0xb2, 0x47, 0x75, 0x6e, 0xf6, 0xc6, 0x4b, 0xe1, + 0x7b, 0x1a, 0x18, 0xf8, 0xe5, 0x68, 0xe5, 0x34, + 0xef, 0x86, 0xf5, 0x4c, 0x92, 0x57, 0xc8, 0x78, + 0xa4, 0x71, 0x79, 0xea, 0xb8, 0x92, 0x7d, 0xf5, + 0xf2, 0xd2, 0xe7, 0x1a, 0x34, 0x17, 0x1e, 0xa0, + 0x15, 0x44, 0xe4, 0x5a, 0xdd, 0xac, 0xbc, 0xda, + 0xe6, 0x49, 0xac, 0xa3, 0x71, 0x77, 0x48, 0x0b, + 0x7a, 0x4a, 0x70, 0xbe, 0x3e, 0x8f, 0xa3, 0x7f, + 0x1b, 0x7f, 0x58, 0xf7, 0x4b, 0x40, 0x6a, 0xec, + 0xa4, 0x6d, 0x8f, 0xa2, 0x11, 0xb4, 0xc7, 0x01, + 0xb6, 0x2e, 0x73, 0x78, 0xcb, 0xe3, 0x2e, 0xe3, + 0xee, 0xc3, 0xba, 0x85, 0x47, 0xdb, 0xe1, 0xb2, + 0xd7, 0x47, 0xf8, 0x36, 0xb2, 0x38, 0x1e, 0x52, + 0x28, 0x3d, 0xf5, 0x2d, 0x69, 0xa0, 0xf3, 0x77, + 0x06, 0xb2, 0x70, 0xc2, 0x3a, 0xe6, 0xa7, 0xde, + 0x41, 0x11, 0x79, 0x95, 0xbf, 0xbd, 0x04, 0x5c, + 0xcc, 0x5e, 0xd2, 0x41, 0xe0, 0x00, 0x06, 0x54, + 0x6c, 0x14, 0x68, 0xd8, 0xb5, 0x0b, 0xc1, 0xdf, + 0xef, 0xab, 0xed, 0x9f, 0xb3, 0x16, 0x1a, 0x1b, + 0xab, 0x87, 0xbb, 0xaa, 0x1a, 0x28, 0xa7, 0x6c, + 0x74, 0x06, 0x12, 0xde, 0x84, 0xc1, 0xd2, 0xb8, + 0x72, 0xbf, 0x6a, 0x0e, 0x4f, 0x1b, 0x26, 0x94, + 0xd2, 0x36, 0x39, 0xe7, 0xa8, 0xd0, 0x4a, 0x99, + 0xc4, 0x69, 0x2c, 0xce, 0x46, 0xe6, 0x36, 0x3e, + 0x07, 0x5b, 0xc0, 0x48, 0xe9, 0x26, 0x90, 0x50, + 0x06, 0xf2, 0xae, 0xb9, 0x6b, 0x82, 0xb4, 0xb7, + 0xee, 0x62, 0x85, 0x91, 0x90, 0x39, 0x1a, 0x02, + 0xdc, 0xf3, 0x4e, 0x07, 0x70, 0xec, 0x34, 0xea, + 0x20, 0xdf, 0xb1, 0x65, 0xbd, 0xa5, 0x84, 0x51, + 0xc4, 0xea, 0xc1, 0x6f, 0x18, 0x68, 0x77, 0x59, + 0x83, 0x95, 0x73, 0xfd, 0x33, 0x6b, 0x2d, 0xde, + 0x46, 0xf3, 0x3f, 0x21, 0x21, 0xd7, 0x52, 0xc9, + 0xd1, 0x1e, 0xa0, 0x79, 0x26, 0xbd, 0x85, 0x62, + 0xd5, 0x59, 0x11, 0x8b, 0xd2, 0xf7, 0xa5, 0xa7, + 0x86, 0x49, 0xc0, 0xb7, 0x8b, 0x9e, 0x5e, 0xe4, + 0xf6, 0x1b, 0x55, 0x15, 0xa5, 0x60, 0x9a, 0xdf, + 0x0f, 0x00, 0x9d, 0xfb, 0x65, 0x05, 0xcc, 0x69, + 0xdc, 0xd6, 0x9e, 0xf7, 0xfd, 0x55, 0xa3, 0xa2, + 0x99, 0x9e, 0xb4, 0x67, 0x95, 0xbf, 0x1f, 0x6e, + 0xd8, 0x63, 0x2e, 0x1b, 0x7a, 0x43, 0x5f, 0x71, + 0x6d, 0x2c, 0x76, 0xf5, 0xe8, 0x58, 0x09, 0xa9, + 0x00, 0x02, 0x42, 0xc8, 0xaa, 0x91, 0x11, 0x10, + 0x11, 0x11, 0x04, 0x76, 0xa3, 0xf5, 0x1d, 0xe7, + 0x93, 0xf9, 0xcd, 0x5a, 0xfa, 0x1b, 0xd4, 0xce, + 0xf2, 0xef, 0xed, 0x35, 0x6c, 0x6a, 0x3f, 0x51, + 0xde, 0x79, 0x3f, 0x9c, 0xd5, 0xaf, 0xa1, 0xbd, + 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x55, 0xe3, 0x87, + 0x3a, 0x58, 0xcf, 0x31, 0x4e, 0xe4, 0xeb, 0x58, + 0x91, 0x11, 0x51, 0xb0, 0x88, 0x88, 0x08, 0x88, + 0x80, 0xb5, 0x72, 0x1e, 0x85, 0x73, 0xe4, 0x9f, + 0xe2, 0x95, 0xb4, 0xb5, 0x72, 0x1e, 0x85, 0x73, + 0xe4, 0x9f, 0xe2, 0x95, 0x34, 0xe7, 0x85, 0x6e, + 0x6c, 0x55, 0xa2, 0x75, 0x20, 0xb4, 0x9f, 0xa3, + 0xdc, 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0x81, 0xd2, + 0x7e, 0x8f, 0x71, 0xe1, 0xb7, 0xc5, 0x53, 0xcb, + 0x4c, 0x47, 0x16, 0xad, 0x3f, 0x73, 0x0c, 0x0f, + 0x2d, 0x6f, 0x44, 0xeb, 0x11, 0x11, 0x64, 0xe9, + 0x11, 0x11, 0x01, 0x45, 0xe5, 0x03, 0x7a, 0x5a, + 0x96, 0xd6, 0xad, 0xa0, 0xe7, 0x0a, 0x51, 0x60, + 0xba, 0xb7, 0xe9, 0xd9, 0x40, 0x68, 0xe1, 0xde, + 0x9a, 0x55, 0x05, 0x53, 0x05, 0xd2, 0xe2, 0x75, + 0x4d, 0xc4, 0x0e, 0xf4, 0x2c, 0xb0, 0xe2, 0x8d, + 0xc0, 0xec, 0x13, 0xb2, 0xa6, 0x9e, 0xe8, 0xaa, + 0xb9, 0x2a, 0x96, 0x42, 0x17, 0xc9, 0x6f, 0x2b, + 0xc5, 0x1b, 0x34, 0x1f, 0xc5, 0x8a, 0x4e, 0xa3, + 0xe3, 0xda, 0x3b, 0x4a, 0xc1, 0x86, 0xc9, 0xc3, + 0x96, 0xc6, 0x41, 0x90, 0x86, 0x9c, 0x33, 0x37, + 0xba, 0x6f, 0xe8, 0xbc, 0x6c, 0x7b, 0x7d, 0xc2, + 0xa6, 0x7a, 0x63, 0x28, 0x90, 0x69, 0xd8, 0xb8, + 0xb7, 0xb5, 0xab, 0x1f, 0x37, 0xd5, 0x02, 0xe0, + 0x0a, 0x36, 0xee, 0x16, 0xba, 0xbf, 0xac, 0xce, + 0xe0, 0xfc, 0x0b, 0xb4, 0x35, 0x73, 0xaf, 0x6c, + 0xd6, 0x21, 0xf8, 0xfb, 0x0c, 0x83, 0x46, 0xd8, + 0x65, 0x74, 0x4e, 0x3f, 0xaa, 0xf1, 0x51, 0xef, + 0xb5, 0x40, 0xe7, 0x9a, 0x66, 0xc3, 0x0b, 0x90, + 0xc8, 0x8b, 0x6c, 0xc5, 0xe3, 0xac, 0x61, 0x7d, + 0x04, 0x72, 0x34, 0x54, 0x17, 0x7e, 0x8b, 0x8f, + 0x22, 0xee, 0x36, 0x5a, 0x6f, 0x1d, 0x61, 0xa7, + 0x4e, 0x06, 0x19, 0x9e, 0xfb, 0x69, 0x18, 0xf0, + 0xd7, 0x97, 0x0e, 0x32, 0x1f, 0xdd, 0x77, 0x24, + 0x2f, 0xcf, 0x0a, 0x4c, 0xea, 0x6c, 0xeb, 0x8d, + 0x9b, 0x9d, 0x79, 0x21, 0x38, 0xff, 0x00, 0x45, + 0xa9, 0xef, 0x7f, 0xd5, 0x07, 0x4e, 0xd2, 0xf9, + 0x6d, 0x3b, 0x26, 0x6a, 0xc6, 0xd3, 0x8f, 0xa4, + 0xbc, 0xb2, 0xb3, 0x74, 0x11, 0xb9, 0xc0, 0xff, + 0x00, 0x08, 0xc6, 0xe7, 0x17, 0x87, 0x3b, 0x77, + 0x7a, 0xaa, 0x5e, 0xd1, 0x33, 0x38, 0x9c, 0xe6, + 0xa1, 0x8e, 0x6c, 0x6d, 0x5e, 0x2d, 0x98, 0x62, + 0x9a, 0x52, 0x28, 0xd7, 0xb8, 0x13, 0x4e, 0x1e, + 0xaa, 0x9b, 0x97, 0x5b, 0xe9, 0x9c, 0x8e, 0x95, + 0xbc, 0x8e, 0x91, 0xe3, 0x33, 0x33, 0x42, 0xe6, + 0x3f, 0x86, 0x3a, 0x17, 0xbc, 0xef, 0x2d, 0x73, + 0x07, 0xc6, 0x5c, 0xe2, 0x1e, 0xe5, 0x9d, 0x73, + 0xbd, 0x05, 0xce, 0xc8, 0xe5, 0x2e, 0x30, 0xf8, + 0xbb, 0xab, 0x1b, 0x86, 0x32, 0xe2, 0xde, 0x77, + 0x58, 0xc1, 0xc4, 0xde, 0x1e, 0x0e, 0x90, 0x17, + 0x77, 0x4f, 0x24, 0xd7, 0x8b, 0x99, 0x7c, 0xfe, + 0x09, 0x9b, 0xba, 0xb9, 0x75, 0xbe, 0x62, 0xed, + 0xf6, 0xe5, 0x92, 0x08, 0xdf, 0x19, 0xa0, 0x6b, + 0x9a, 0xe0, 0x5c, 0xd2, 0xc7, 0x0a, 0x30, 0xf1, + 0x11, 0x40, 0xa3, 0x30, 0xd9, 0xcb, 0x5b, 0x3c, + 0x45, 0xdd, 0x9d, 0xcb, 0x9c, 0x24, 0x74, 0xf0, + 0xdc, 0x5a, 0xf0, 0xb6, 0xbd, 0xdc, 0x46, 0xae, + 0xaf, 0x52, 0xa1, 0x27, 0xd5, 0xb7, 0x3d, 0x1d, + 0xcd, 0x9b, 0x1b, 0xe7, 0x18, 0xf9, 0x65, 0x13, + 0x43, 0x15, 0xcd, 0x1c, 0xe8, 0xc8, 0x35, 0xa0, + 0x23, 0x90, 0xf5, 0x14, 0xa1, 0x2f, 0x69, 0x80, + 0xb0, 0xb6, 0xc9, 0xda, 0xda, 0xdf, 0x59, 0x4c, + 0x45, 0xf7, 0x13, 0x61, 0x92, 0x69, 0x1a, 0x58, + 0x1e, 0xd6, 0x92, 0x1b, 0x58, 0x4d, 0x1d, 0xb5, + 0x6c, 0xe0, 0xae, 0x71, 0xa3, 0x1b, 0xe7, 0x97, + 0x10, 0xc5, 0x62, 0x2c, 0xef, 0xba, 0x0b, 0xc6, + 0xb6, 0x21, 0x28, 0x73, 0x1e, 0x28, 0x1a, 0xf2, + 0xfd, 0xad, 0x6d, 0x55, 0x4a, 0x6d, 0x47, 0x7e, + 0xef, 0x36, 0x6d, 0xbf, 0x05, 0x9c, 0x76, 0x6e, + 0x32, 0x5b, 0xc7, 0x00, 0xa0, 0x6b, 0xdd, 0xbd, + 0xd5, 0x75, 0x4d, 0x56, 0x84, 0xb7, 0x97, 0x12, + 0x39, 0xee, 0x7c, 0x8e, 0x26, 0x53, 0xc5, 0x26, + 0xde, 0xf9, 0xdd, 0x52, 0x10, 0x5d, 0xb2, 0x72, + 0xdb, 0x19, 0x31, 0xce, 0x7d, 0xdd, 0xb5, 0xb4, + 0xf8, 0xb9, 0xde, 0x4b, 0x43, 0xf8, 0x98, 0xeb, + 0x77, 0x3f, 0xa4, 0x61, 0x88, 0xb2, 0xbc, 0x5d, + 0xce, 0xca, 0x2d, 0x23, 0xac, 0x63, 0x82, 0xd5, + 0xf6, 0xf6, 0xe1, 0xd2, 0xb1, 0xdd, 0x33, 0x63, + 0x6b, 0x87, 0xd5, 0x97, 0x38, 0x98, 0xa5, 0x61, + 0x3c, 0xb4, 0x71, 0xaa, 0xa8, 0x17, 0x85, 0xeb, + 0x1b, 0x2c, 0x86, 0x8c, 0x6b, 0x9c, 0x7a, 0xc2, + 0xaa, 0x05, 0x92, 0xfb, 0x59, 0x3a, 0xe3, 0xce, + 0x1a, 0x2c, 0xa2, 0x74, 0x77, 0x62, 0x1e, 0x99, + 0x92, 0x92, 0xf0, 0x5f, 0x00, 0xe1, 0x0f, 0xd9, + 0x4d, 0xa7, 0x95, 0x43, 0xde, 0x65, 0xef, 0x2f, + 0x03, 0x1b, 0x29, 0x6b, 0x63, 0x89, 0xc5, 0xf1, + 0x47, 0x1b, 0x43, 0x03, 0x09, 0xa5, 0x78, 0x78, + 0x79, 0x97, 0x90, 0x61, 0xb2, 0x73, 0x9e, 0xe6, + 0x12, 0x01, 0xe5, 0x76, 0xc5, 0x23, 0x6d, 0xa3, + 0xef, 0xa5, 0xfa, 0xd7, 0x86, 0x75, 0x80, 0xaa, + 0x08, 0x47, 0xcc, 0xf7, 0x12, 0x5c, 0xe2, 0x49, + 0x35, 0x71, 0x27, 0x79, 0xea, 0x95, 0xf1, 0xc6, + 0x2a, 0xae, 0x96, 0xba, 0x1e, 0xd8, 0x6d, 0x94, + 0xba, 0x43, 0xcb, 0x53, 0x40, 0xa6, 0x6d, 0x34, + 0xc5, 0x84, 0x14, 0xe8, 0xe0, 0x68, 0x3d, 0x52, + 0x2a, 0x51, 0x39, 0x14, 0x1c, 0x4e, 0x22, 0xf7, + 0x2b, 0x7b, 0x15, 0xac, 0x2c, 0x2c, 0x6c, 0x8e, + 0x01, 0xd2, 0xbf, 0xb9, 0x63, 0x47, 0x29, 0x24, + 0xae, 0x9d, 0xa9, 0x5f, 0x05, 0xc6, 0x5b, 0x0d, + 0xa5, 0xd8, 0xf0, 0xfb, 0x7b, 0x46, 0xb6, 0x6b, + 0x93, 0x5d, 0x8e, 0x21, 0xbd, 0xc0, 0x3e, 0xe7, + 0x6d, 0x79, 0x2d, 0xb4, 0x16, 0x56, 0xb2, 0x4f, + 0x20, 0x0d, 0x8a, 0x26, 0x97, 0x3a, 0x9b, 0x37, + 0x72, 0x7b, 0xaa, 0x33, 0x49, 0x5a, 0xc9, 0x75, + 0x77, 0x71, 0x97, 0xba, 0xaf, 0x13, 0xc9, 0x0c, + 0xe5, 0xdf, 0xb3, 0x97, 0xf4, 0x42, 0xb5, 0x39, + 0xa6, 0xae, 0xa8, 0x44, 0xf5, 0x2e, 0xf6, 0x16, + 0x31, 0x4b, 0x37, 0x15, 0x29, 0x1c, 0x6d, 0x6d, + 0x36, 0x72, 0xf2, 0xef, 0xeb, 0xa9, 0x9e, 0xb2, + 0xd6, 0xc7, 0x30, 0x32, 0xd1, 0x87, 0x6d, 0x5d, + 0xb4, 0xd5, 0x6c, 0xaa, 0xa4, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x51, 0xfa, 0x83, 0xd5, 0x33, 0xfc, + 0x9f, 0x18, 0x29, 0x05, 0x1f, 0xa8, 0x3d, 0x53, + 0x3f, 0xc9, 0xf1, 0x82, 0xbd, 0xbd, 0xba, 0x74, + 0xc3, 0x2c, 0x4f, 0x02, 0xee, 0xe5, 0x7a, 0x9e, + 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, 0x6d, 0x4b, + 0x3f, 0x72, 0x89, 0xd2, 0xbe, 0xa8, 0x6f, 0x86, + 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x37, 0x78, 0xb5, + 0xef, 0x4a, 0x30, 0xdc, 0x0b, 0x7b, 0xb0, 0xe7, + 0x37, 0x5f, 0xe4, 0xf1, 0xe5, 0x59, 0xf6, 0x21, + 0x5f, 0xd5, 0x02, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, + 0x3e, 0xc4, 0x2b, 0xfa, 0xe5, 0xb3, 0x9e, 0xbd, + 0xf9, 0x7b, 0x1f, 0x14, 0xcd, 0x83, 0xfe, 0x35, + 0xb1, 0x11, 0x16, 0xcf, 0x34, 0x44, 0x44, 0x05, + 0xaf, 0x7e, 0x2b, 0x6c, 0xe1, 0x4a, 0xee, 0x3d, + 0x8d, 0xab, 0x61, 0x78, 0xe6, 0xf1, 0x34, 0xb4, + 0xf2, 0xa0, 0xa5, 0x67, 0xa0, 0x9d, 0x8e, 0xb5, + 0xca, 0x58, 0xb6, 0xb7, 0x18, 0xf9, 0x44, 0xcd, + 0x8c, 0x6c, 0x2e, 0x65, 0x07, 0x1b, 0x7d, 0xd6, + 0xab, 0x94, 0x13, 0xc5, 0x73, 0x04, 0x77, 0x10, + 0x9e, 0x28, 0xe5, 0x68, 0x7b, 0x0f, 0x58, 0x8a, + 0xa8, 0x6c, 0x84, 0x0e, 0x86, 0x61, 0x1e, 0xc7, + 0xb1, 0xc2, 0xa1, 0xb4, 0xa6, 0xcd, 0xcb, 0x1e, + 0x9b, 0xbf, 0x8e, 0x2b, 0xbb, 0x9c, 0x1b, 0x9d, + 0xdd, 0xdb, 0xff, 0x00, 0x1e, 0xdc, 0x75, 0x62, + 0x7e, 0xd7, 0x37, 0xe4, 0x3b, 0xb6, 0xa7, 0x3c, + 0x68, 0x16, 0x14, 0x44, 0x50, 0x2b, 0xfa, 0xfb, + 0x1c, 0x72, 0x1a, 0x56, 0xf6, 0x26, 0xb7, 0x89, + 0xf1, 0xb4, 0x4a, 0xc0, 0x37, 0xd5, 0x86, 0xbb, + 0x3d, 0xc5, 0xc1, 0x28, 0xbf, 0x4d, 0x38, 0x54, + 0x10, 0x76, 0x83, 0xb0, 0x85, 0x45, 0xca, 0xe8, + 0x1d, 0x3f, 0x73, 0x90, 0x7c, 0xed, 0xb7, 0x30, + 0xd4, 0xd5, 0xec, 0x63, 0x88, 0x69, 0x3c, 0xa6, + 0x9c, 0x88, 0x38, 0xf0, 0xdb, 0xb9, 0x6c, 0x5b, + 0xd8, 0xdf, 0x4e, 0x69, 0x04, 0x12, 0x49, 0x5e, + 0xa3, 0x4a, 0xec, 0x16, 0xba, 0x43, 0x0b, 0x6d, + 0x4e, 0x8a, 0xd6, 0x30, 0x47, 0x29, 0x15, 0x3e, + 0xfa, 0x94, 0x87, 0x15, 0x0b, 0x48, 0x64, 0x6c, + 0x03, 0xac, 0x05, 0x10, 0x72, 0x0b, 0x6d, 0x1f, + 0x9e, 0xb8, 0xa1, 0xe8, 0x7a, 0x20, 0x7f, 0x48, + 0xd3, 0xde, 0x52, 0xd6, 0xbe, 0xce, 0x6f, 0x1f, + 0x43, 0x3c, 0xd4, 0xea, 0x86, 0x8f, 0x84, 0xae, + 0xa6, 0x6c, 0x44, 0x4e, 0xe1, 0x2d, 0x1c, 0xeb, + 0x2c, 0x51, 0x35, 0xae, 0x69, 0xa6, 0xca, 0xa0, + 0xa0, 0x59, 0xfb, 0x37, 0xb2, 0x69, 0x1d, 0x20, + 0x32, 0x1f, 0xd6, 0x3f, 0xe8, 0xa7, 0x6d, 0x34, + 0x5e, 0x3e, 0xdd, 0xbc, 0x4d, 0x85, 0xa0, 0x0d, + 0xfb, 0x02, 0xb4, 0x86, 0x10, 0x7b, 0x96, 0xed, + 0x04, 0xed, 0xeb, 0x15, 0xef, 0x01, 0x22, 0x9b, + 0x00, 0xeb, 0x20, 0x8b, 0x83, 0x05, 0x6b, 0x1b, + 0xb8, 0x43, 0x40, 0x34, 0xa8, 0x34, 0xd8, 0xb6, + 0xdb, 0x67, 0x04, 0x60, 0xd0, 0x02, 0x40, 0xa8, + 0xe7, 0x5b, 0x41, 0x82, 0x95, 0x24, 0x9e, 0xb2, + 0xf4, 0xb1, 0xb4, 0xa0, 0x1e, 0xea, 0x0c, 0x2d, + 0x63, 0x1a, 0x36, 0x37, 0x6e, 0xf1, 0xce, 0xbe, + 0x85, 0x40, 0x14, 0x14, 0xa0, 0xe1, 0x59, 0x38, + 0x17, 0xd7, 0x02, 0x0c, 0x21, 0xa7, 0x68, 0x06, + 0x80, 0xef, 0x5f, 0x41, 0x9d, 0x55, 0x94, 0x35, + 0x7a, 0x1a, 0x83, 0x10, 0x60, 0x55, 0x8f, 0x68, + 0x59, 0x41, 0x61, 0x83, 0x36, 0x8c, 0x34, 0x9a, + 0xfc, 0xf4, 0x62, 0x9b, 0xfa, 0x36, 0xf7, 0x52, + 0x1e, 0xd0, 0xf7, 0x55, 0xb2, 0x94, 0xeb, 0x53, + 0x79, 0x5c, 0xc2, 0xfa, 0x63, 0xab, 0x35, 0x7d, + 0x45, 0x4e, 0x36, 0xd3, 0x63, 0x5d, 0xc9, 0xd0, + 0xc6, 0x7b, 0xa3, 0xfc, 0xc7, 0x2b, 0x51, 0x1d, + 0x39, 0x67, 0xb8, 0x89, 0xcc, 0x9f, 0xd3, 0x78, + 0xb8, 0xed, 0xf1, 0x16, 0xb0, 0x06, 0xff, 0x00, + 0x16, 0x60, 0xd9, 0x24, 0xea, 0xf7, 0x7d, 0xd3, + 0xbd, 0xea, 0x2b, 0x75, 0xbc, 0x0c, 0xb7, 0x88, + 0x46, 0xdf, 0x77, 0x9d, 0x47, 0x62, 0x98, 0xd7, + 0xdc, 0x39, 0xe2, 0xbd, 0xc8, 0xdd, 0xc9, 0xd4, + 0x52, 0xca, 0xb3, 0x39, 0x53, 0x93, 0x20, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x83, 0x78, 0x44, 0x1b, + 0xc2, 0x0a, 0x06, 0x8d, 0xfe, 0xf8, 0xbe, 0xe6, + 0xb8, 0xfb, 0x40, 0xba, 0x42, 0xe6, 0xfa, 0x37, + 0xfb, 0xe2, 0xfb, 0x9a, 0xe3, 0xed, 0x02, 0xe9, + 0x0b, 0x1c, 0x3e, 0xc7, 0x9d, 0x2f, 0x4f, 0xe3, + 0x3c, 0xcd, 0x3e, 0xaa, 0xde, 0xa4, 0x5e, 0x6f, + 0xea, 0x63, 0xf0, 0xfe, 0x02, 0xb3, 0x5a, 0x7a, + 0x34, 0x5e, 0x08, 0xed, 0x2c, 0x39, 0xbf, 0xa9, + 0x8f, 0xc3, 0xf8, 0x0a, 0xcd, 0x69, 0xe8, 0xd1, + 0x78, 0x23, 0xb4, 0xb8, 0xac, 0xff, 0x00, 0x67, + 0x88, 0xf5, 0x54, 0x38, 0xea, 0xe5, 0xed, 0xef, + 0xcb, 0x2a, 0x22, 0x2f, 0x4d, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x82, 0xbf, 0x91, 0xb7, 0x8e, 0x76, + 0xcf, 0x03, 0x87, 0x0f, 0x49, 0xc4, 0x09, 0xea, + 0x07, 0x02, 0xa4, 0xb0, 0xb7, 0x32, 0x5c, 0x63, + 0xa1, 0x13, 0xfa, 0x4c, 0x43, 0xa2, 0x98, 0x56, + 0xbd, 0xd3, 0x36, 0x71, 0x7c, 0xa1, 0xdd, 0x2f, + 0x9c, 0x95, 0xb9, 0xe8, 0xdd, 0x3b, 0x48, 0x04, + 0x77, 0xdb, 0x37, 0x85, 0xa5, 0x8e, 0xb9, 0x8e, + 0xd6, 0xea, 0x36, 0xca, 0x43, 0x05, 0xd3, 0x84, + 0x43, 0xa8, 0x5e, 0x2b, 0xc3, 0xd9, 0xdc, 0x82, + 0x75, 0x7a, 0xd5, 0xe2, 0x04, 0x14, 0x6f, 0x6b, + 0xf6, 0x1d, 0x3e, 0x9e, 0x82, 0xf0, 0x0e, 0xea, + 0xd2, 0x71, 0x53, 0xfa, 0xb2, 0x0e, 0x13, 0xef, + 0xd1, 0x71, 0xc2, 0xbf, 0x42, 0x6b, 0x2b, 0x0f, + 0xc4, 0x34, 0xc6, 0x46, 0xda, 0x95, 0x77, 0x42, + 0xe7, 0xb3, 0xc2, 0x67, 0x76, 0x3b, 0x4b, 0xf3, + 0xda, 0x0c, 0xa6, 0xee, 0xe8, 0xb2, 0x26, 0x3a, + 0x67, 0x96, 0xdb, 0x9a, 0xc2, 0x0b, 0x8d, 0x18, + 0x6b, 0x5e, 0xe7, 0xa8, 0xba, 0x0d, 0xbf, 0xb4, + 0xfb, 0x5b, 0xcd, 0x35, 0x73, 0x8a, 0xcc, 0x45, + 0x28, 0xbc, 0x92, 0x07, 0x42, 0x2e, 0x61, 0x00, + 0xf1, 0xd4, 0x50, 0x17, 0x75, 0x3a, 0xeb, 0x9c, + 0xa0, 0xde, 0x83, 0x3c, 0x5d, 0xc3, 0x39, 0xd4, + 0xbe, 0x27, 0x39, 0x15, 0x85, 0x85, 0xfd, 0x9c, + 0xb1, 0xba, 0x51, 0x78, 0xd8, 0xcb, 0x38, 0x48, + 0x1c, 0x12, 0x46, 0xee, 0x26, 0xb9, 0x42, 0x71, + 0xd1, 0x7d, 0xb2, 0x1b, 0x89, 0x7e, 0xae, 0x37, + 0x3b, 0x98, 0x14, 0x42, 0x5e, 0x4d, 0x4d, 0x90, + 0x6c, 0xb7, 0x46, 0xd5, 0xdd, 0x05, 0xbd, 0xe3, + 0x83, 0xe4, 0xb7, 0x27, 0x8d, 0x9c, 0x62, 0x87, + 0x88, 0x71, 0x6e, 0x35, 0x0b, 0x52, 0xef, 0x35, + 0x91, 0xbb, 0x11, 0x89, 0x66, 0xa3, 0x62, 0x3c, + 0x51, 0xb5, 0x80, 0x31, 0xa1, 0xc7, 0x7b, 0x80, + 0x65, 0x36, 0xa4, 0x38, 0x1c, 0xa4, 0xd4, 0xa4, + 0x5c, 0x03, 0xaa, 0xe5, 0x23, 0x6f, 0xa3, 0xae, + 0x9f, 0x4e, 0x95, 0xf4, 0xeb, 0x34, 0x22, 0x72, + 0x20, 0x5f, 0x2b, 0x9e, 0xe2, 0xe7, 0xb8, 0xb9, + 0xc4, 0xd4, 0xb8, 0x9a, 0x92, 0x57, 0xcf, 0x11, + 0xae, 0xcd, 0xbc, 0xca, 0xe9, 0x6d, 0xa2, 0x6d, + 0xc5, 0x0b, 0xc3, 0x9f, 0xe1, 0x15, 0x2f, 0x6d, + 0xa5, 0xed, 0x22, 0x23, 0x86, 0x26, 0x8f, 0x71, + 0x0c, 0x8e, 0x75, 0x15, 0x95, 0xec, 0xdb, 0x23, + 0x85, 0xce, 0xf7, 0x28, 0xb7, 0xa0, 0xd3, 0x39, + 0x39, 0xbb, 0xe6, 0x88, 0xc1, 0xea, 0xed, 0x5d, + 0x26, 0x1c, 0x34, 0x4d, 0xd9, 0xc2, 0xb7, 0x61, + 0xc5, 0x54, 0xd1, 0x8c, 0xa9, 0xdf, 0xb9, 0x0c, + 0x8e, 0x7b, 0x6d, 0xa2, 0x5c, 0xea, 0x19, 0xa4, + 0x71, 0xea, 0x86, 0x8a, 0x29, 0x7b, 0x4d, 0x1d, + 0x61, 0x15, 0x0b, 0xa2, 0xe3, 0x23, 0x95, 0xdb, + 0x55, 0xd9, 0xb8, 0xb2, 0xd0, 0xde, 0x2e, 0x16, + 0xd4, 0x54, 0x54, 0xed, 0xa2, 0xcc, 0xdc, 0x6d, + 0x1a, 0xf7, 0x1f, 0x88, 0x69, 0xce, 0x82, 0xb7, + 0x6d, 0x85, 0x82, 0x10, 0x04, 0x71, 0xb5, 0xbc, + 0xc0, 0x2d, 0xa9, 0x2d, 0xe2, 0xb6, 0x82, 0x49, + 0xe5, 0xd9, 0x1c, 0x2d, 0x2f, 0x71, 0xeb, 0x34, + 0x55, 0x58, 0xd9, 0x63, 0x1b, 0x64, 0x6f, 0x03, + 0x6a, 0x1c, 0xda, 0x8e, 0x2e, 0xaf, 0x55, 0x55, + 0x3d, 0xa2, 0x64, 0x19, 0x04, 0x10, 0xe2, 0x6d, + 0xc7, 0xf1, 0xee, 0x00, 0x7c, 0xfc, 0x23, 0xe2, + 0x03, 0xdc, 0x8a, 0x7e, 0xb3, 0xbb, 0x4a, 0x69, + 0x8c, 0xb3, 0x10, 0x4a, 0x37, 0x45, 0xdb, 0x36, + 0xf7, 0x21, 0x77, 0x94, 0xb9, 0x1b, 0x1a, 0x40, + 0x6f, 0x3c, 0x86, 0xae, 0xa7, 0x33, 0x45, 0x17, + 0x41, 0xc5, 0xd9, 0xb5, 0x8d, 0xe9, 0xdc, 0x3b, + 0xb7, 0x56, 0x83, 0xa8, 0xab, 0xd8, 0x0c, 0x63, + 0x71, 0xd8, 0xfb, 0x7b, 0x43, 0x5e, 0x98, 0xd1, + 0xf3, 0x53, 0xfd, 0xc7, 0x77, 0xc3, 0xdc, 0x1b, + 0x15, 0xc5, 0xad, 0x0d, 0x68, 0x68, 0xdc, 0x05, + 0x12, 0xa9, 0xcb, 0x28, 0x88, 0xe8, 0x7a, 0x88, + 0x8a, 0x12, 0x22, 0x22, 0x02, 0x22, 0x20, 0x8c, + 0xcb, 0x7d, 0x74, 0x3c, 0xc7, 0xb6, 0xa6, 0xdb, + 0xde, 0x8e, 0x65, 0x09, 0x96, 0xfa, 0xe8, 0x79, + 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, 0x1c, 0xcb, 0xce, + 0xc1, 0xf3, 0xd8, 0xed, 0x36, 0xbf, 0x4c, 0xba, + 0x2e, 0xf0, 0x6c, 0xe8, 0xab, 0x5b, 0x0d, 0xe7, + 0xa2, 0xcd, 0xe4, 0xdf, 0xe2, 0x95, 0x52, 0xd0, + 0x9b, 0xaf, 0x3f, 0x95, 0xf3, 0xd5, 0xb6, 0xf3, + 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, 0xa9, 0x68, + 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xeb, 0xd5, 0xa7, + 0x62, 0xae, 0xf3, 0x86, 0xbe, 0x35, 0xaf, 0x39, + 0x6b, 0x44, 0x45, 0x9b, 0x61, 0x11, 0x10, 0x11, + 0x11, 0x04, 0x6e, 0x51, 0xad, 0xe9, 0x1a, 0xe7, + 0x0a, 0xd5, 0xa5, 0xb5, 0xeb, 0xa8, 0xec, 0x01, + 0x7d, 0x96, 0x56, 0xf2, 0xd5, 0xc6, 0xb6, 0xf7, + 0x94, 0xb8, 0x85, 0xd5, 0xdd, 0x28, 0x01, 0xb2, + 0xb2, 0x9d, 0x71, 0x43, 0xee, 0x29, 0xdb, 0x9b, + 0x71, 0x3b, 0x38, 0x77, 0x11, 0xb8, 0xef, 0x50, + 0x12, 0xf1, 0xb1, 0xee, 0x94, 0x50, 0xc9, 0x6e, + 0x78, 0xda, 0xee, 0xbb, 0x77, 0x8f, 0x77, 0x72, + 0x0b, 0x2a, 0x2c, 0x36, 0x97, 0x50, 0xde, 0x5a, + 0xc5, 0x75, 0x6e, 0xee, 0x38, 0x66, 0x60, 0x7b, + 0x1c, 0x3a, 0x85, 0x66, 0x41, 0x90, 0x11, 0xee, + 0x15, 0xf9, 0xdf, 0x57, 0xd8, 0xf9, 0x86, 0xa4, + 0xbf, 0xb6, 0xa5, 0x03, 0x66, 0x73, 0x9b, 0xc9, + 0xb1, 0xdd, 0xd0, 0x5f, 0xa1, 0x86, 0xe5, 0x49, + 0xd7, 0x7a, 0x06, 0xdb, 0x37, 0x27, 0xe2, 0x50, + 0x4e, 0x2d, 0xaf, 0x29, 0xc2, 0xf0, 0xe1, 0x56, + 0xc8, 0x06, 0xef, 0x75, 0x07, 0x17, 0x45, 0x7b, + 0xb4, 0xf6, 0x5f, 0x31, 0xa1, 0xbb, 0xba, 0x00, + 0x7e, 0x8c, 0x6d, 0xdb, 0xd9, 0x2a, 0x62, 0xd3, + 0xd9, 0xbe, 0x1a, 0x2a, 0x74, 0x81, 0xf3, 0x11, + 0xbf, 0x8d, 0xdf, 0x00, 0xa2, 0x0e, 0x5e, 0xd3, + 0xb9, 0xa3, 0x6f, 0x58, 0x2d, 0x98, 0x31, 0xb9, + 0x2b, 0x9a, 0x74, 0x16, 0xd2, 0x3e, 0xbc, 0xa1, + 0xbf, 0xea, 0xbb, 0x05, 0xae, 0x96, 0xc5, 0x5b, + 0xd3, 0xa2, 0xb6, 0x8d, 0xb4, 0xe5, 0xe1, 0x15, + 0x52, 0x51, 0x63, 0x60, 0x67, 0x7a, 0xd0, 0x39, + 0x90, 0x72, 0x2b, 0x6d, 0x15, 0x9d, 0xb8, 0xa7, + 0x14, 0x6d, 0x84, 0x1e, 0x57, 0x1d, 0xbd, 0x80, + 0xa6, 0x2d, 0x3d, 0x9a, 0x4c, 0xea, 0x1b, 0x9b, + 0x83, 0xd7, 0x0c, 0x14, 0xed, 0xae, 0xa3, 0x1d, + 0x8c, 0x7c, 0x2d, 0x23, 0x67, 0x10, 0x3e, 0xe1, + 0x0b, 0x33, 0x60, 0x89, 0xb4, 0xa6, 0xd3, 0xca, + 0x50, 0x50, 0xec, 0xfd, 0x9d, 0x62, 0xa2, 0xa1, + 0x7b, 0x0c, 0xa7, 0x94, 0xbc, 0xd5, 0x4e, 0xda, + 0x69, 0x5b, 0x0b, 0x71, 0x48, 0xad, 0xda, 0xda, + 0x0a, 0xd7, 0x84, 0x05, 0x62, 0xe8, 0xc5, 0x1d, + 0xdc, 0xec, 0x7d, 0x36, 0x0d, 0xcb, 0x27, 0x03, + 0x88, 0xe1, 0xd8, 0x28, 0x29, 0xd5, 0x41, 0x17, + 0x1e, 0x2a, 0x26, 0x1a, 0x50, 0x02, 0xdd, 0xe3, + 0xac, 0x56, 0xd3, 0x2c, 0xa2, 0x61, 0xa1, 0xd8, + 0x68, 0x76, 0x76, 0x96, 0x7e, 0x02, 0x4d, 0x4f, + 0x65, 0x7d, 0x06, 0x20, 0xc4, 0x23, 0x8c, 0x01, + 0x40, 0x37, 0x0a, 0xf3, 0xaf, 0xae, 0x16, 0xd0, + 0xb4, 0x37, 0xb9, 0xad, 0x7d, 0xd5, 0x90, 0x31, + 0x7d, 0x06, 0xa0, 0xc5, 0x42, 0x4d, 0x77, 0x1d, + 0xc5, 0x3a, 0x3e, 0xae, 0xf5, 0x98, 0x34, 0x2d, + 0x7c, 0x95, 0xf4, 0x18, 0xdb, 0x09, 0xef, 0xee, + 0x0f, 0xf0, 0xad, 0xd8, 0x5e, 0x47, 0x54, 0xfc, + 0x56, 0x8e, 0xb9, 0x3b, 0x10, 0x52, 0x35, 0x8d, + 0xc3, 0x32, 0x7a, 0x97, 0x1d, 0x82, 0x06, 0xb0, + 0xc0, 0xe1, 0x25, 0xcf, 0x53, 0x89, 0xfb, 0x68, + 0x79, 0x98, 0x3d, 0xf5, 0x66, 0xb0, 0xb1, 0x8a, + 0x59, 0x45, 0x05, 0x23, 0x89, 0xa0, 0x6e, 0xd9, + 0x5e, 0x55, 0x4c, 0xd2, 0x96, 0xf3, 0x5f, 0x5f, + 0xdd, 0xe7, 0x6f, 0x6b, 0xd2, 0x4a, 0xe7, 0x06, + 0x9f, 0xd6, 0x79, 0xee, 0xbf, 0x64, 0x6c, 0x5d, + 0x17, 0x17, 0x18, 0x6d, 0xa3, 0x4e, 0xda, 0xbf, + 0x69, 0xaa, 0xb5, 0x7d, 0x19, 0x23, 0xa9, 0x11, + 0xdd, 0x96, 0xc8, 0x14, 0x14, 0x1b, 0x91, 0x11, + 0x55, 0x22, 0x22, 0x20, 0x22, 0x22, 0x08, 0xed, + 0x47, 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, + 0xf4, 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, + 0xd8, 0xd4, 0x7e, 0xa3, 0xbc, 0xf2, 0x7f, 0x39, + 0xab, 0x5f, 0x43, 0x7a, 0x99, 0xde, 0x5d, 0xfd, + 0xa6, 0xab, 0xc7, 0x0e, 0x74, 0xb1, 0x9e, 0x62, + 0x9d, 0xc9, 0xd6, 0xb1, 0x22, 0x22, 0xa3, 0x61, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x6a, 0xe4, 0x3d, + 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2b, 0x69, 0x6a, + 0xe4, 0x3d, 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2a, + 0x69, 0xcf, 0x0a, 0xdc, 0xd8, 0xab, 0x44, 0xea, + 0x41, 0x69, 0x3f, 0x47, 0xb8, 0xf0, 0xdb, 0xe2, + 0xa9, 0xe5, 0x03, 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, + 0x6f, 0x8a, 0xa7, 0x96, 0x98, 0x8e, 0x2d, 0x5a, + 0x7e, 0xe6, 0x18, 0x1e, 0x5a, 0xde, 0x89, 0xd6, + 0x22, 0x22, 0xc9, 0xd2, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x81, 0xc9, 0xda, 0x01, 0x74, 0xe0, 0x41, + 0x11, 0x4b, 0xdf, 0x0f, 0x8a, 0x49, 0x50, 0xba, + 0x59, 0xf7, 0x38, 0x1c, 0xa4, 0xb6, 0x37, 0x3d, + 0xce, 0x33, 0x20, 0xfa, 0xdb, 0x3c, 0x9e, 0xf2, + 0x6d, 0xc1, 0xb4, 0xe4, 0x0e, 0xdd, 0xd8, 0x57, + 0x59, 0xa2, 0x64, 0xb1, 0x96, 0x3c, 0x54, 0x1e, + 0xda, 0xac, 0xe4, 0x2c, 0x5b, 0x74, 0xe9, 0x2d, + 0x5f, 0xb4, 0x7f, 0xb9, 0xd4, 0x77, 0x54, 0x73, + 0x29, 0x89, 0xf1, 0x8b, 0x50, 0xde, 0xab, 0x9e, + 0xd1, 0x6c, 0x3c, 0xfb, 0x48, 0xdf, 0x34, 0x0a, + 0xbe, 0x00, 0x27, 0x6f, 0x3c, 0x66, 0xa7, 0xde, + 0x5f, 0x7a, 0x53, 0x50, 0x7e, 0x25, 0x14, 0xb6, + 0x17, 0x4e, 0xa6, 0x4a, 0xc0, 0x98, 0xe6, 0x07, + 0x7b, 0xd8, 0x0f, 0x0b, 0x65, 0x1c, 0xfc, 0xaa, + 0x72, 0xee, 0xda, 0x3b, 0xbb, 0x59, 0xad, 0x65, + 0xfa, 0xb9, 0xe3, 0x74, 0x6f, 0xe6, 0x70, 0xe1, + 0xf8, 0x54, 0x4c, 0x64, 0xce, 0x43, 0xf3, 0x32, + 0x2b, 0x16, 0x7b, 0x43, 0xe6, 0xf0, 0xf7, 0x8e, + 0x80, 0xc3, 0xd3, 0xc2, 0x49, 0xe8, 0x66, 0x61, + 0x07, 0x89, 0xbd, 0x71, 0xc8, 0x56, 0xac, 0x3a, + 0x57, 0x2d, 0x2d, 0x38, 0x98, 0x23, 0x1f, 0xac, + 0x76, 0xa0, 0x87, 0x1b, 0xf6, 0xee, 0x59, 0x38, + 0xd5, 0x96, 0xdf, 0x44, 0x4a, 0x68, 0x66, 0x97, + 0xdc, 0x68, 0xff, 0x00, 0x55, 0x2b, 0x6b, 0xa2, + 0x6c, 0xdb, 0xb5, 0xcc, 0x2f, 0xeb, 0xb9, 0x05, + 0x16, 0xae, 0x71, 0xee, 0x41, 0x3c, 0xcb, 0x3c, + 0x38, 0xfb, 0xf9, 0xbe, 0xae, 0x17, 0x1a, 0xf2, + 0xd2, 0x8b, 0xa4, 0x5b, 0x69, 0xab, 0x58, 0xa8, + 0x19, 0x1b, 0x47, 0x30, 0x0a, 0x42, 0x2c, 0x44, + 0x4d, 0xdc, 0xd4, 0x1c, 0xda, 0x0d, 0x2f, 0x92, + 0x98, 0x8e, 0x2a, 0x30, 0x76, 0x4a, 0x92, 0xb6, + 0xd1, 0x25, 0xc4, 0x74, 0xaf, 0x73, 0xba, 0xc3, + 0x62, 0xe8, 0x90, 0x62, 0x4b, 0xbb, 0xd6, 0x7b, + 0xbb, 0x96, 0xcb, 0x71, 0x85, 0xac, 0x2f, 0x20, + 0x0e, 0x13, 0x47, 0x0e, 0x50, 0x50, 0x52, 0x6d, + 0x74, 0x6d, 0x9c, 0x74, 0x3d, 0x10, 0x71, 0x1c, + 0xa7, 0x6a, 0x96, 0xb7, 0xc0, 0x41, 0x18, 0x1c, + 0x2c, 0x02, 0x9d, 0x40, 0xad, 0x6d, 0xc5, 0x31, + 0xb5, 0x26, 0xa4, 0x00, 0x08, 0xa7, 0x29, 0x2b, + 0x30, 0xb4, 0x85, 0xaf, 0x2d, 0x0c, 0xef, 0x28, + 0x41, 0xdf, 0x54, 0x15, 0xc8, 0xb1, 0x51, 0x8d, + 0xcc, 0xaa, 0xdd, 0x8b, 0x12, 0xf1, 0x43, 0xc1, + 0xc3, 0x5d, 0xd5, 0xd8, 0xa7, 0x99, 0x04, 0x51, + 0x9e, 0x1a, 0x01, 0x56, 0x9a, 0x91, 0xd7, 0x43, + 0x13, 0x5c, 0x1b, 0x5a, 0x71, 0x01, 0x4a, 0xf2, + 0xec, 0x41, 0x10, 0xcc, 0x71, 0x0d, 0x73, 0xe9, + 0xb1, 0x87, 0x84, 0xad, 0x91, 0x8f, 0x8d, 0xb2, + 0xf0, 0xd3, 0x8c, 0x16, 0xd5, 0xbc, 0x9d, 0x95, + 0x20, 0x40, 0x3b, 0x29, 0xdc, 0xd3, 0x68, 0xeb, + 0xf5, 0x54, 0x56, 0xa2, 0xcd, 0x7e, 0x15, 0x6a, + 0xd6, 0x41, 0x47, 0x5f, 0xdc, 0x7f, 0x0e, 0xd2, + 0x3d, 0xfb, 0x77, 0x17, 0xbb, 0xf5, 0x5a, 0x82, + 0x07, 0x39, 0x71, 0x6b, 0x7b, 0x9f, 0xb7, 0xc0, + 0x42, 0x6b, 0x14, 0x7f, 0xc5, 0xbc, 0x2d, 0x3b, + 0x38, 0xda, 0x38, 0x83, 0x3d, 0xce, 0x5e, 0xba, + 0x9b, 0xc7, 0x59, 0xc0, 0xeb, 0x86, 0xc1, 0x03, + 0x69, 0x0b, 0x7b, 0xb7, 0x54, 0x53, 0xde, 0x50, + 0x1a, 0x6b, 0x03, 0x35, 0x90, 0x92, 0xf6, 0xf9, + 0xdc, 0x57, 0xd7, 0x0f, 0x3b, 0x4e, 0xd3, 0xb4, + 0xd4, 0x9a, 0xf5, 0x4a, 0xb8, 0xe3, 0x6d, 0x9f, + 0x15, 0x5f, 0x20, 0xa3, 0x9d, 0x4a, 0xab, 0x55, + 0x31, 0x9a, 0x33, 0x22, 0x3a, 0xdb, 0xf4, 0x01, + 0xb4, 0x02, 0x80, 0x6e, 0x0b, 0xc5, 0xf4, 0xbe, + 0x55, 0x52, 0x22, 0x22, 0x02, 0x22, 0x20, 0x28, + 0xfd, 0x41, 0xea, 0x99, 0xfe, 0x4f, 0x8c, 0x14, + 0x82, 0x8f, 0xd4, 0x1e, 0xa9, 0x9f, 0xe4, 0xf8, + 0xc1, 0x5e, 0xde, 0xdd, 0x3a, 0x61, 0x96, 0x27, + 0x81, 0x77, 0x72, 0xbd, 0x4f, 0x74, 0xaf, 0xaa, + 0x1b, 0xe1, 0xbf, 0xb6, 0xa5, 0x9f, 0xb9, 0x44, + 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, 0x6d, 0x4b, + 0x3f, 0x72, 0x9b, 0xbc, 0x5a, 0xf7, 0xa5, 0x18, + 0x6e, 0x05, 0xbd, 0xd8, 0x73, 0x9b, 0xaf, 0xf2, + 0x78, 0xf2, 0xac, 0xfb, 0x10, 0xaf, 0xea, 0x81, + 0x75, 0xfe, 0x4f, 0x1e, 0x55, 0x9f, 0x62, 0x15, + 0xfd, 0x72, 0xd9, 0xcf, 0x5e, 0xfc, 0xbd, 0x8f, + 0x8a, 0x66, 0xc1, 0xff, 0x00, 0x1a, 0xd8, 0x88, + 0x8b, 0x67, 0x9a, 0x22, 0x22, 0x02, 0x22, 0x20, + 0xd0, 0xcc, 0x5b, 0x99, 0x60, 0x6b, 0xd8, 0x0f, + 0x1b, 0x0e, 0xc2, 0xdd, 0xe2, 0xaa, 0x9f, 0x94, + 0xb2, 0xbf, 0xb7, 0xc8, 0xda, 0x66, 0x71, 0x6d, + 0xe2, 0xb9, 0xb5, 0xdb, 0x2b, 0x49, 0xd8, 0xf6, + 0x6e, 0x73, 0x4f, 0x38, 0x57, 0xf5, 0x0d, 0x96, + 0x81, 0xb1, 0x10, 0xe6, 0x0d, 0x92, 0x1d, 0x8c, + 0x1d, 0x5d, 0xc5, 0x4c, 0x4e, 0x41, 0x25, 0x63, + 0x7d, 0x05, 0xfd, 0xa4, 0x57, 0x76, 0xe6, 0xb1, + 0xcc, 0x2a, 0x3a, 0xa0, 0xee, 0x2d, 0x3d, 0x70, + 0x76, 0x2c, 0xea, 0x97, 0x6b, 0x95, 0x66, 0x9c, + 0xcb, 0xc5, 0x6d, 0x72, 0x78, 0x71, 0xb9, 0x2d, + 0xbc, 0x47, 0x63, 0x61, 0x9b, 0x75, 0x7c, 0x17, + 0x72, 0xab, 0xa2, 0x4c, 0x78, 0xc1, 0x69, 0xdc, + 0x45, 0xfc, 0x52, 0xee, 0xaa, 0xdc, 0x5f, 0x12, + 0x36, 0xb4, 0x2a, 0x06, 0xa3, 0x20, 0xe2, 0x20, + 0x6e, 0xeb, 0xad, 0x96, 0xc2, 0xd6, 0x02, 0x5a, + 0x6a, 0x79, 0x10, 0x34, 0x2f, 0xa6, 0x8a, 0x6c, + 0x41, 0xe3, 0x40, 0x1b, 0xf6, 0xd7, 0xaa, 0xbe, + 0x4b, 0x41, 0x75, 0x77, 0x05, 0xf7, 0xc2, 0xbd, + 0xe1, 0x41, 0xf1, 0x4f, 0x7d, 0x28, 0xb2, 0x51, + 0x00, 0x41, 0xf1, 0xc2, 0xbd, 0xe1, 0x5f, 0x69, + 0x44, 0x1f, 0x3c, 0x2b, 0xda, 0x2f, 0x51, 0x07, + 0x80, 0x2f, 0x51, 0x68, 0xe6, 0x72, 0xf6, 0xb8, + 0x7c, 0x7c, 0x97, 0xd7, 0x47, 0xb9, 0x66, 0xc6, + 0x30, 0x77, 0xcf, 0x79, 0xef, 0x58, 0xde, 0x74, + 0x8e, 0x9e, 0x81, 0x01, 0xed, 0x0b, 0x51, 0x0c, + 0x6e, 0x3b, 0xf0, 0xeb, 0x77, 0x52, 0xf2, 0xf5, + 0xa4, 0x3a, 0x9b, 0xd9, 0x0e, 0xe7, 0x3b, 0x9d, + 0xdb, 0x87, 0xba, 0xb0, 0xe1, 0x6c, 0x20, 0xb0, + 0xc6, 0xc2, 0xd8, 0xda, 0x5b, 0x71, 0x2b, 0x5a, + 0x5c, 0xda, 0x72, 0xbb, 0x70, 0x25, 0x42, 0xe1, + 0x71, 0x97, 0x79, 0xcc, 0xd1, 0xcf, 0x65, 0xc8, + 0x7c, 0x64, 0xf4, 0xac, 0x8f, 0x78, 0x2e, 0x1f, + 0x56, 0xca, 0x7e, 0x83, 0x15, 0xd2, 0xc6, 0xde, + 0x49, 0x64, 0x6c, 0xbb, 0x0b, 0x01, 0xa8, 0x77, + 0x5c, 0x75, 0x95, 0xaa, 0x9c, 0x91, 0x11, 0x1d, + 0xf4, 0x47, 0x4f, 0x4f, 0x81, 0x25, 0x67, 0x6c, + 0x2d, 0xe1, 0x6b, 0x69, 0x47, 0xd2, 0xae, 0xe7, + 0x2b, 0x3a, 0x22, 0xaa, 0x44, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x1b, 0xc2, 0x20, 0xde, 0x10, 0x50, + 0x34, 0x6f, 0xf7, 0xc5, 0xf7, 0x35, 0xc7, 0xda, + 0x05, 0xd2, 0x17, 0x37, 0xd1, 0xbf, 0xdf, 0x17, + 0xdc, 0xd7, 0x1f, 0x68, 0x17, 0x48, 0x58, 0xe1, + 0xf6, 0x3c, 0xe9, 0x7a, 0x7f, 0x19, 0xe6, 0x69, + 0xf5, 0x56, 0xf5, 0x22, 0xf3, 0x7f, 0x53, 0x1f, + 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, 0xa2, 0xf0, + 0x47, 0x69, 0x61, 0xcd, 0xfd, 0x4c, 0x7e, 0x1f, + 0xc0, 0x56, 0x6b, 0x4f, 0x46, 0x8b, 0xc1, 0x1d, + 0xa5, 0xc5, 0x67, 0xfb, 0x3c, 0x47, 0xaa, 0xa1, + 0xc7, 0x57, 0x2f, 0x6f, 0x7e, 0x59, 0x51, 0x11, + 0x7a, 0x6c, 0x04, 0x44, 0x40, 0x44, 0x44, 0x1f, + 0x32, 0x31, 0xb2, 0x46, 0xe6, 0x38, 0x54, 0x38, + 0x10, 0x42, 0xa9, 0x65, 0x31, 0xf2, 0x4d, 0x6f, + 0x2c, 0x15, 0x73, 0x64, 0x69, 0x0e, 0x84, 0xf2, + 0xb1, 0xcd, 0x35, 0x6b, 0x87, 0x31, 0x56, 0xf5, + 0xad, 0x7f, 0x03, 0x65, 0x88, 0xbf, 0x73, 0x98, + 0x09, 0xe2, 0xe5, 0xa2, 0x0c, 0x38, 0x6b, 0xf9, + 0x6f, 0x2c, 0xd9, 0xe7, 0x4d, 0x11, 0xde, 0xc6, + 0x03, 0x6e, 0x63, 0x04, 0x11, 0xc6, 0x3e, 0x33, + 0x69, 0xc8, 0xed, 0xe1, 0x6f, 0xaa, 0xbb, 0x6e, + 0x9d, 0x8f, 0x2f, 0xc8, 0x86, 0x9e, 0x8e, 0x21, + 0x49, 0x98, 0x37, 0xba, 0x30, 0x77, 0xf3, 0x8d, + 0xe1, 0x59, 0x61, 0x9a, 0x29, 0xe1, 0x64, 0xf0, + 0xbc, 0x49, 0x14, 0xad, 0x0f, 0x8d, 0xed, 0xda, + 0x0b, 0x4e, 0xd0, 0x42, 0x0f, 0xb9, 0x18, 0xd9, + 0x23, 0x73, 0x1e, 0x2a, 0xd7, 0x82, 0xd7, 0x0e, + 0xa8, 0x3b, 0x0a, 0xe2, 0xda, 0xa3, 0xd9, 0xe5, + 0xde, 0x36, 0xfc, 0xf9, 0x8c, 0x8c, 0x9a, 0xda, + 0x62, 0x5d, 0x13, 0x09, 0xa3, 0xda, 0x3a, 0x8e, + 0x0b, 0xb4, 0xaa, 0xde, 0x6e, 0xcc, 0xc9, 0x91, + 0x73, 0xdd, 0xb4, 0x16, 0x8e, 0x1e, 0x64, 0x1c, + 0xa6, 0x0d, 0x17, 0x7e, 0xff, 0x00, 0xae, 0x7b, + 0x58, 0x3a, 0x83, 0x69, 0x52, 0x56, 0xfa, 0x22, + 0x01, 0x4e, 0x95, 0xcf, 0x93, 0xaa, 0x37, 0x05, + 0x7a, 0x65, 0x8f, 0x59, 0x67, 0x65, 0x90, 0xea, + 0x20, 0xaa, 0x5b, 0x69, 0x2b, 0x18, 0xa9, 0x48, + 0x5b, 0x51, 0xca, 0x76, 0xa9, 0x28, 0x70, 0x90, + 0xb3, 0x73, 0x40, 0x0a, 0xc4, 0xdc, 0x7b, 0xda, + 0xc0, 0xf2, 0xda, 0x35, 0xdb, 0xba, 0xab, 0x2b, + 0x6d, 0x02, 0x08, 0x58, 0xb1, 0x4d, 0x02, 0xa1, + 0x9b, 0xb9, 0x68, 0xb7, 0x21, 0xc5, 0x92, 0x2b, + 0x40, 0xd0, 0x79, 0x4e, 0xc5, 0x36, 0xd8, 0x9a, + 0x58, 0xc0, 0xed, 0x80, 0xb4, 0xb5, 0xde, 0xe2, + 0xfa, 0xee, 0x2a, 0x08, 0x6e, 0xd0, 0x28, 0xde, + 0xb0, 0x41, 0x14, 0x31, 0x61, 0xad, 0x79, 0x77, + 0x7d, 0x1d, 0x3b, 0x9e, 0xad, 0x56, 0xd3, 0x31, + 0xd0, 0xb4, 0x71, 0x01, 0xc5, 0x56, 0x02, 0xd0, + 0x4f, 0x2f, 0x2a, 0xdb, 0x0d, 0xef, 0xb6, 0x57, + 0x8b, 0x7d, 0x57, 0xd8, 0x63, 0xe8, 0x06, 0xc0, + 0x39, 0x39, 0x90, 0x6b, 0x79, 0xb3, 0x03, 0xcb, + 0x03, 0x40, 0x6d, 0x01, 0x69, 0x03, 0x6d, 0x47, + 0x5d, 0x67, 0x0d, 0x8d, 0xae, 0x6e, 0xcd, 0x9b, + 0x49, 0x3c, 0xeb, 0xeb, 0x83, 0xab, 0xb5, 0x7a, + 0x18, 0x83, 0x17, 0x0b, 0x78, 0x43, 0x7a, 0x82, + 0x8b, 0xeb, 0xba, 0x34, 0xd9, 0xb2, 0x94, 0xa2, + 0xcb, 0xc0, 0xbd, 0x0d, 0x41, 0xa7, 0x7d, 0x79, + 0x0d, 0x85, 0x94, 0xb7, 0x97, 0x4e, 0xe0, 0x82, + 0xdd, 0xa5, 0xce, 0xa7, 0xbc, 0xd1, 0xd7, 0x27, + 0x62, 0xa2, 0x69, 0xb7, 0x7e, 0x35, 0x91, 0xbd, + 0xcd, 0x5f, 0x83, 0xc6, 0x5e, 0x03, 0x29, 0xb6, + 0x9f, 0xa2, 0xc6, 0xd7, 0xf4, 0x45, 0x16, 0x4d, + 0x59, 0x91, 0xb8, 0xd4, 0x97, 0xff, 0x00, 0x83, + 0xe2, 0x9c, 0x0d, 0xa5, 0xab, 0xab, 0x2c, 0x95, + 0xee, 0x64, 0x94, 0x6c, 0xad, 0x47, 0xc5, 0x67, + 0x22, 0xb0, 0x63, 0xf1, 0x91, 0x58, 0xdb, 0xc3, + 0x61, 0x66, 0x2a, 0x23, 0x6d, 0x5c, 0x48, 0xa3, + 0x9c, 0xe2, 0x7b, 0xa7, 0x93, 0xd7, 0x2a, 0xfb, + 0x34, 0xf6, 0xca, 0x33, 0xcf, 0x62, 0x43, 0x15, + 0x0f, 0x48, 0xe7, 0x5c, 0x16, 0xf7, 0x00, 0xf0, + 0xc7, 0x5d, 0xfb, 0x14, 0xb2, 0xc3, 0x6b, 0x17, + 0x45, 0x03, 0x63, 0xea, 0x2c, 0xca, 0x89, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x04, 0x66, + 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, 0xb5, 0x36, 0xde, + 0xf4, 0x73, 0x28, 0x4c, 0xb7, 0xd7, 0x43, 0xcc, + 0x7b, 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x5e, 0x76, + 0x0f, 0x9e, 0xc7, 0x69, 0xb5, 0xfa, 0x65, 0xd1, + 0x77, 0x83, 0x67, 0x45, 0x5a, 0xd8, 0x6f, 0x3d, + 0x16, 0x6f, 0x26, 0xff, 0x00, 0x14, 0xaa, 0x96, + 0x84, 0xdd, 0x79, 0xfc, 0xaf, 0x9e, 0xad, 0xb7, + 0x9e, 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, + 0x42, 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x5e, 0xad, + 0x3b, 0x15, 0x77, 0x9c, 0x35, 0xf1, 0xad, 0x79, + 0xcb, 0x5a, 0x22, 0x2c, 0xdb, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x0a, 0x0b, 0x29, 0x6b, 0xc3, 0x74, + 0x5c, 0x01, 0x11, 0xcb, 0xb5, 0xc3, 0xe2, 0x92, + 0x54, 0xea, 0xf9, 0x92, 0x36, 0x4a, 0xc2, 0xc7, + 0x8a, 0x82, 0x82, 0xb3, 0xa5, 0x64, 0xb8, 0xc7, + 0x4d, 0x36, 0x2e, 0xe0, 0x52, 0xd2, 0x49, 0x0c, + 0x96, 0x0f, 0x27, 0x71, 0x3b, 0x64, 0x88, 0x8e, + 0x7d, 0xa1, 0x5a, 0x15, 0x6e, 0xee, 0xd8, 0x9b, + 0x83, 0x00, 0x24, 0x3d, 0x87, 0x89, 0xb2, 0x0f, + 0x8a, 0xe1, 0xb8, 0xb7, 0x99, 0x49, 0xe1, 0x32, + 0xd1, 0xe4, 0xa0, 0x90, 0x1a, 0x36, 0xea, 0xd5, + 0xe6, 0x2b, 0xa8, 0xfa, 0x8e, 0x1b, 0x9c, 0x3f, + 0x55, 0xc3, 0x68, 0x53, 0x3d, 0x22, 0x4d, 0xbd, + 0x75, 0xab, 0x90, 0x8f, 0xa4, 0x63, 0x4f, 0x50, + 0xad, 0x96, 0xef, 0x5e, 0x48, 0xd0, 0xe6, 0x10, + 0x54, 0x08, 0xc1, 0x0d, 0x02, 0xca, 0xcb, 0x57, + 0x38, 0x02, 0x06, 0xc3, 0xca, 0xb6, 0x3a, 0x30, + 0xb2, 0x35, 0xc4, 0x10, 0x39, 0x10, 0x7c, 0x74, + 0x2c, 0xe1, 0xe8, 0xf8, 0x76, 0x72, 0xbb, 0x95, + 0x7c, 0xbe, 0xdd, 0xac, 0x00, 0x83, 0x55, 0x99, + 0xd4, 0xae, 0xce, 0x54, 0x20, 0x9d, 0xe8, 0x31, + 0xb5, 0x9d, 0xc5, 0x0f, 0x56, 0xab, 0xde, 0x1a, + 0x1d, 0x81, 0x64, 0xe1, 0x5e, 0xf0, 0xa0, 0xc7, + 0x4d, 0xab, 0xda, 0x15, 0xf7, 0x4a, 0x20, 0x08, + 0x3e, 0x43, 0x57, 0xbc, 0x2b, 0xeb, 0x62, 0xf2, + 0xa1, 0x00, 0x35, 0x28, 0x9c, 0x49, 0x52, 0x81, + 0x45, 0x47, 0xd5, 0x99, 0x68, 0xf2, 0x99, 0xeb, + 0x5d, 0x37, 0x13, 0xab, 0x04, 0x4f, 0x12, 0x5e, + 0x10, 0x77, 0xc8, 0x05, 0x5a, 0xcf, 0x90, 0x3d, + 0xf5, 0x3d, 0xa9, 0xf3, 0xdf, 0x84, 0x59, 0x06, + 0x41, 0x47, 0x64, 0x2e, 0xab, 0x1d, 0xa4, 0x7b, + 0xe8, 0x79, 0x64, 0x70, 0xea, 0x37, 0xb6, 0xab, + 0x1a, 0x6b, 0x01, 0x25, 0x90, 0x96, 0xfe, 0xfd, + 0xdc, 0x57, 0xb3, 0xbe, 0x8d, 0x2e, 0xee, 0xb6, + 0x38, 0xd4, 0xba, 0xbd, 0x57, 0x15, 0x68, 0x8c, + 0x91, 0x96, 0x7b, 0xc8, 0x9e, 0xa4, 0xfd, 0x8d, + 0x9c, 0x0e, 0x99, 0x96, 0xd6, 0xed, 0x22, 0x06, + 0xf7, 0x6f, 0xa8, 0xa0, 0xea, 0x6c, 0x56, 0x11, + 0x46, 0xb4, 0x35, 0xa2, 0x80, 0x72, 0x2d, 0x1c, + 0x6d, 0xbb, 0xe2, 0xe2, 0x7b, 0xc5, 0x1c, 0xe0, + 0x01, 0xe6, 0x0b, 0x79, 0x55, 0x22, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x8e, 0xd4, 0x7e, + 0xa3, 0xbc, 0xf2, 0x7f, 0x39, 0xab, 0x5f, 0x43, + 0x7a, 0x99, 0xde, 0x5d, 0xfd, 0xa6, 0xad, 0x8d, + 0x47, 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, + 0xf4, 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, + 0xbc, 0x70, 0xe7, 0x4b, 0x19, 0xe6, 0x29, 0xdc, + 0x9d, 0x6b, 0x12, 0x22, 0x2a, 0x36, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x16, 0xae, 0x43, 0xd0, 0xae, + 0x7c, 0x93, 0xfc, 0x52, 0xb6, 0x96, 0xae, 0x43, + 0xd0, 0xae, 0x7c, 0x93, 0xfc, 0x52, 0xa6, 0x9c, + 0xf0, 0xad, 0xcd, 0x8a, 0xb4, 0x4e, 0xa4, 0x16, + 0x93, 0xf4, 0x7b, 0x8f, 0x0d, 0xbe, 0x2a, 0x9e, + 0x50, 0x3a, 0x4f, 0xd1, 0xee, 0x3c, 0x36, 0xf8, + 0xaa, 0x79, 0x69, 0x88, 0xe2, 0xd5, 0xa7, 0xee, + 0x61, 0x81, 0xe5, 0xad, 0xe8, 0x9d, 0x62, 0x22, + 0x2c, 0x9d, 0x22, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x8d, 0xbf, 0xb2, 0x95, 0xc4, 0xc9, 0x15, 0x48, + 0x1b, 0x4b, 0x46, 0xf2, 0xa4, 0x91, 0x07, 0x3c, + 0xcf, 0x59, 0xde, 0xdb, 0x5f, 0x47, 0x9b, 0xc5, + 0x55, 0x97, 0xb6, 0xfd, 0xf8, 0xa1, 0x3d, 0x23, + 0x79, 0x43, 0x80, 0xde, 0x08, 0xde, 0xae, 0x1a, + 0x77, 0x50, 0x5a, 0xe7, 0xac, 0x45, 0xc4, 0x43, + 0xa3, 0x9d, 0x94, 0x6d, 0xc5, 0xb9, 0xef, 0x98, + 0xef, 0xa2, 0x79, 0x0a, 0xc9, 0x7d, 0x8e, 0x6c, + 0x95, 0x96, 0x32, 0x5a, 0xee, 0x50, 0xde, 0xda, + 0xab, 0x65, 0x62, 0xba, 0xb6, 0x71, 0xcb, 0xe2, + 0xbf, 0x87, 0x91, 0xb5, 0x14, 0x91, 0x80, 0x77, + 0x33, 0x30, 0x1e, 0xe9, 0xaf, 0x6f, 0x2d, 0x42, + 0xb4, 0x4e, 0x58, 0xc9, 0x3d, 0xe9, 0x46, 0x6e, + 0x94, 0x86, 0x6a, 0xd5, 0xf3, 0x64, 0xa4, 0x73, + 0xf6, 0x81, 0x40, 0xce, 0x6a, 0x2d, 0x66, 0x58, + 0x0e, 0xa2, 0xd9, 0xc5, 0x6a, 0x0b, 0x0d, 0x44, + 0x03, 0xe3, 0x1d, 0x05, 0xeb, 0x1b, 0x49, 0xed, + 0x5d, 0xdf, 0x02, 0x39, 0x5b, 0xfa, 0x4d, 0x52, + 0x8c, 0xb5, 0x1d, 0x45, 0x59, 0x8c, 0x89, 0x89, + 0xca, 0x89, 0x65, 0x95, 0x39, 0x16, 0xcb, 0x2c, + 0x5c, 0x1a, 0x1c, 0x5b, 0xdc, 0x9d, 0xc5, 0x49, + 0xc7, 0x6a, 0x2a, 0x36, 0x6f, 0x2b, 0x69, 0xed, + 0x64, 0x80, 0x32, 0x94, 0xa1, 0xd8, 0x82, 0x21, + 0xb6, 0x7d, 0x65, 0xbc, 0xdb, 0x66, 0x39, 0xad, + 0x14, 0x0d, 0x0e, 0x6e, 0xde, 0x70, 0x56, 0x6e, + 0x83, 0x87, 0xae, 0x17, 0xd8, 0x65, 0x5a, 0x01, + 0xdc, 0x10, 0x62, 0xe0, 0x88, 0x90, 0x68, 0x36, + 0x0a, 0x34, 0x72, 0x6c, 0xe5, 0x4e, 0x06, 0xf7, + 0x55, 0xab, 0x8b, 0xb7, 0xac, 0xdc, 0x0d, 0xea, + 0x2f, 0xae, 0x1a, 0x6e, 0x08, 0x31, 0x70, 0x9e, + 0x41, 0x4d, 0x94, 0xaf, 0x59, 0x79, 0xc0, 0x6b, + 0x53, 0xbf, 0x72, 0xcd, 0x45, 0xed, 0x02, 0x0c, + 0x42, 0x35, 0xf4, 0x18, 0xbe, 0xc3, 0x54, 0x56, + 0xa0, 0xd4, 0x98, 0xec, 0x05, 0xb7, 0x4b, 0x74, + 0xee, 0x29, 0xdc, 0x3f, 0x81, 0x6c, 0xd2, 0x38, + 0xde, 0x7e, 0x01, 0xd7, 0x28, 0x3e, 0xf3, 0x59, + 0x8b, 0x1c, 0x25, 0x8b, 0xef, 0x2f, 0x1d, 0xb0, + 0x6c, 0x8e, 0x31, 0xdf, 0x48, 0xff, 0x00, 0xd1, + 0x68, 0xed, 0xf5, 0x15, 0x47, 0x04, 0xeb, 0xac, + 0xc5, 0xc4, 0xb9, 0xcb, 0xed, 0x93, 0xc9, 0x56, + 0xc2, 0xdd, 0xe2, 0x38, 0xc1, 0xa0, 0x6b, 0x01, + 0x5a, 0xac, 0xc6, 0x65, 0x75, 0x1d, 0xf4, 0x79, + 0x7c, 0xf9, 0xe8, 0x6d, 0x08, 0xac, 0x36, 0xe3, + 0x67, 0x0c, 0x7b, 0xda, 0x03, 0x79, 0x2b, 0xd7, + 0xda, 0x55, 0xb2, 0xc2, 0xcb, 0xa5, 0x6b, 0x58, + 0xd8, 0xfa, 0x26, 0x47, 0xdc, 0xf2, 0x8e, 0xe4, + 0x7c, 0x55, 0x79, 0xc9, 0x11, 0x92, 0x3a, 0x66, + 0x51, 0x1d, 0x2d, 0xfb, 0x0b, 0x1e, 0x16, 0x89, + 0x26, 0x68, 0x2e, 0xde, 0xde, 0x55, 0xbe, 0x05, + 0x17, 0x8c, 0x01, 0xac, 0x0d, 0x1b, 0x9a, 0x28, + 0x17, 0xaa, 0x89, 0x7a, 0xbc, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x51, 0xfa, 0x83, 0xd5, + 0x33, 0xfc, 0x9f, 0x18, 0x29, 0x05, 0x1f, 0xa8, + 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0xbd, 0xbd, + 0xba, 0x74, 0xc3, 0x2c, 0x4f, 0x02, 0xee, 0xe5, + 0x7a, 0x9e, 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, + 0x6d, 0x4b, 0x3f, 0x72, 0x89, 0xd2, 0xbe, 0xa8, + 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x37, + 0x78, 0xb5, 0xef, 0x4a, 0x30, 0xdc, 0x0b, 0x7b, + 0xb0, 0xe7, 0x37, 0x5f, 0xe4, 0xf1, 0xe5, 0x59, + 0xf6, 0x21, 0x5f, 0xd5, 0x02, 0xeb, 0xfc, 0x9e, + 0x3c, 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xe5, 0xb3, + 0x9e, 0xbd, 0xf9, 0x7b, 0x1f, 0x14, 0xcd, 0x83, + 0xfe, 0x35, 0xb1, 0x11, 0x16, 0xcf, 0x34, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x5a, 0xf7, 0x76, 0xe6, + 0x68, 0xe8, 0xdd, 0x8f, 0xe4, 0x3d, 0x45, 0xb0, + 0x88, 0x2a, 0x39, 0xdc, 0x48, 0xbb, 0xb3, 0x92, + 0xca, 0xe5, 0xa6, 0xa4, 0xd5, 0x8e, 0x3b, 0x43, + 0x4f, 0x23, 0x85, 0x0a, 0xd4, 0xd2, 0x3a, 0x96, + 0x7b, 0x19, 0x9b, 0xa7, 0xf3, 0x64, 0xb4, 0xb0, + 0xf0, 0x59, 0xdd, 0x3e, 0xa0, 0x11, 0xb8, 0x46, + 0xe7, 0x1f, 0xdd, 0x3e, 0xe2, 0xb9, 0xdc, 0xda, + 0xc7, 0x72, 0xce, 0x17, 0x6c, 0x3f, 0x15, 0xdc, + 0xa1, 0x57, 0x72, 0xb8, 0xcb, 0x79, 0xa3, 0x7d, + 0x95, 0xdb, 0x78, 0x99, 0x2f, 0x78, 0xe2, 0x3b, + 0xa6, 0x91, 0xca, 0x15, 0xa2, 0x7a, 0x32, 0x4e, + 0x64, 0x4c, 0x2d, 0x08, 0x55, 0x0f, 0x09, 0xac, + 0x27, 0xc3, 0x5e, 0x1c, 0x2e, 0xa0, 0x24, 0xc0, + 0xc7, 0x70, 0xdb, 0x5f, 0x1a, 0x92, 0x1b, 0xf1, + 0x44, 0x9d, 0x56, 0xd3, 0xe3, 0x72, 0x2b, 0xd3, + 0x1e, 0xc9, 0x18, 0xd9, 0x23, 0x70, 0x7c, 0x6f, + 0x1c, 0x4c, 0x7b, 0x4d, 0x41, 0x07, 0x94, 0x10, + 0xa2, 0x69, 0x98, 0x22, 0x72, 0xbd, 0x01, 0x7b, + 0x44, 0x45, 0x09, 0x28, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x8b, 0x43, 0x33, 0x9c, + 0xc7, 0x61, 0x6d, 0x4d, 0xcd, 0xf4, 0x81, 0x80, + 0xd7, 0xa3, 0x88, 0x6d, 0x91, 0xe4, 0x72, 0x31, + 0xa9, 0x9c, 0x67, 0xbf, 0xbf, 0xb5, 0xc7, 0x5a, + 0x49, 0x79, 0x79, 0x20, 0x8a, 0x08, 0x85, 0x5c, + 0xe3, 0xda, 0x03, 0x94, 0x9e, 0x40, 0xb9, 0xac, + 0x99, 0x0b, 0xdd, 0x63, 0x9b, 0xe9, 0x9e, 0xc7, + 0x33, 0x1d, 0x69, 0xf5, 0x71, 0x7c, 0x56, 0x83, + 0xbb, 0x88, 0xee, 0x2f, 0x7a, 0xf8, 0x9e, 0x7c, + 0xde, 0xb9, 0xc8, 0x71, 0x3b, 0xff, 0x00, 0x8d, + 0x8c, 0xb7, 0x76, 0xc6, 0xef, 0x64, 0x75, 0xf1, + 0xe4, 0x2a, 0xdb, 0x63, 0x61, 0x6d, 0x69, 0x04, + 0x58, 0xfb, 0x28, 0xa9, 0x6e, 0xd1, 0xdd, 0x0d, + 0xe4, 0xc9, 0xf1, 0x9c, 0xf2, 0x39, 0x55, 0xfa, + 0x29, 0x8f, 0xc4, 0x8c, 0xed, 0xdc, 0x7d, 0x89, + 0x71, 0x0c, 0x6f, 0x08, 0x85, 0x94, 0x04, 0x6e, + 0x00, 0x75, 0x00, 0x0a, 0x69, 0x8c, 0x6c, 0x6d, + 0x0d, 0x60, 0xa3, 0x46, 0xe0, 0x16, 0xbd, 0x95, + 0xaf, 0x9b, 0xb3, 0x69, 0xab, 0x9d, 0xb5, 0xc5, + 0x6c, 0xaa, 0x24, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x1b, 0xc2, 0x20, 0xde, 0x10, + 0x50, 0x34, 0x6f, 0xf7, 0xc5, 0xf7, 0x35, 0xc7, + 0xda, 0x05, 0xd2, 0x17, 0x37, 0xd1, 0xbf, 0xdf, + 0x17, 0xdc, 0xd7, 0x1f, 0x68, 0x17, 0x48, 0x58, + 0xe1, 0xf6, 0x3c, 0xe9, 0x7a, 0x7f, 0x19, 0xe6, + 0x69, 0xf5, 0x56, 0xf5, 0x22, 0xf3, 0x7f, 0x53, + 0x1f, 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, 0xa2, + 0xf0, 0x47, 0x69, 0x61, 0xcd, 0xfd, 0x4c, 0x7e, + 0x1f, 0xc0, 0x56, 0x6b, 0x4f, 0x46, 0x8b, 0xc1, + 0x1d, 0xa5, 0xc5, 0x67, 0xfb, 0x3c, 0x47, 0xaa, + 0xa1, 0xc7, 0x57, 0x2f, 0x6f, 0x7e, 0x59, 0x51, + 0x11, 0x7a, 0x6c, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x05, 0xe3, 0xda, 0x1c, 0xd2, 0xd3, 0xb8, 0xaf, + 0x51, 0x04, 0x2d, 0xe5, 0x9c, 0xd1, 0x38, 0xc8, + 0x41, 0x74, 0x66, 0xa3, 0x67, 0x20, 0xea, 0x15, + 0x09, 0x89, 0xca, 0x3b, 0x4f, 0x5e, 0x1b, 0x4b, + 0x90, 0x7f, 0x07, 0xb9, 0x79, 0x31, 0xbe, 0x87, + 0xff, 0x00, 0x8d, 0x23, 0xb9, 0x0f, 0x51, 0x8e, + 0x3d, 0x85, 0x74, 0x73, 0x43, 0x81, 0x6b, 0x85, + 0x41, 0xde, 0x0a, 0x88, 0xbf, 0xb0, 0x10, 0x56, + 0x56, 0x55, 0xcc, 0xda, 0x4b, 0x08, 0x05, 0xa4, + 0x72, 0x82, 0xa7, 0x29, 0x29, 0x80, 0x41, 0x00, + 0x82, 0x08, 0x3b, 0x41, 0x1b, 0x41, 0x5a, 0x77, + 0xf6, 0xe1, 0xee, 0x6b, 0xe9, 0xc9, 0x45, 0x5f, + 0x66, 0x77, 0xf0, 0x19, 0x23, 0x6c, 0xed, 0x74, + 0x98, 0x89, 0x89, 0xee, 0xdb, 0xdd, 0x3a, 0xd8, + 0x9d, 0xdb, 0x37, 0x98, 0xfb, 0x4a, 0xce, 0xc9, + 0x61, 0xba, 0xb7, 0x64, 0xf0, 0x3d, 0xb2, 0xc5, + 0x20, 0x0e, 0x64, 0x8c, 0x35, 0x69, 0x07, 0x94, + 0x10, 0x93, 0x13, 0x9c, 0x68, 0xb6, 0xdc, 0x75, + 0x16, 0x56, 0x5b, 0x1a, 0x83, 0x4d, 0x8b, 0x63, + 0xa3, 0x0b, 0x28, 0xd8, 0x00, 0x50, 0x3e, 0x1c, + 0x38, 0xfb, 0x82, 0x3b, 0x91, 0xb2, 0xab, 0xe0, + 0xc0, 0x1b, 0xb4, 0x6d, 0x0b, 0x2d, 0x12, 0x95, + 0x41, 0xf0, 0x18, 0x29, 0x45, 0xf5, 0xc3, 0xd4, + 0x0b, 0xea, 0x89, 0x44, 0x1f, 0x34, 0x5e, 0xd1, + 0x7d, 0x51, 0x10, 0x79, 0x45, 0xed, 0x11, 0x10, + 0x28, 0xa8, 0xfa, 0xe7, 0x57, 0x18, 0xb8, 0xb0, + 0x78, 0x97, 0x17, 0xdd, 0x4b, 0xfc, 0x3b, 0x99, + 0x63, 0xda, 0x58, 0x0e, 0xce, 0x89, 0x94, 0xf8, + 0xe7, 0x97, 0xa8, 0x9a, 0xa7, 0x5c, 0x3d, 0xf2, + 0x9c, 0x3e, 0x9d, 0x26, 0x7b, 0xa9, 0x4f, 0x46, + 0xfb, 0x98, 0xf6, 0xd0, 0x9d, 0x9c, 0x31, 0x75, + 0x4f, 0xeb, 0x72, 0x2d, 0x7d, 0x3d, 0xa6, 0x9b, + 0x89, 0x06, 0xf2, 0xee, 0x92, 0xe4, 0x9d, 0xf5, + 0x74, 0x35, 0x0c, 0xaf, 0x7d, 0x43, 0xca, 0xee, + 0xa9, 0x57, 0x88, 0x88, 0xe9, 0xab, 0xbd, 0x08, + 0xec, 0x6f, 0x69, 0xfc, 0x3f, 0x99, 0x5a, 0x47, + 0x0b, 0x00, 0x13, 0x3e, 0x9d, 0x26, 0xea, 0x93, + 0xd4, 0xaf, 0x50, 0x2b, 0x5d, 0xad, 0xab, 0x60, + 0x65, 0x48, 0x1d, 0x21, 0xef, 0x88, 0x5a, 0x56, + 0x16, 0x44, 0xb8, 0x4c, 0xe1, 0xc0, 0x37, 0x86, + 0xed, 0x1b, 0x7a, 0xaa, 0x51, 0x56, 0x67, 0x2c, + 0xe5, 0x48, 0x88, 0x8a, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x46, 0x65, 0xbe, 0xba, + 0x1e, 0x63, 0xdb, 0x53, 0x6d, 0xef, 0x47, 0x32, + 0x84, 0xcb, 0x7d, 0x74, 0x3c, 0xc7, 0xb6, 0xa6, + 0xdb, 0xde, 0x8e, 0x65, 0xe7, 0x60, 0xf9, 0xec, + 0x76, 0x9b, 0x5f, 0xa6, 0x5d, 0x17, 0x78, 0x36, + 0x74, 0x55, 0xad, 0x86, 0xf3, 0xd1, 0x66, 0xf2, + 0x6f, 0xf1, 0x4a, 0xa9, 0x68, 0x4d, 0xd7, 0x9f, + 0xca, 0xf9, 0xea, 0xdb, 0x79, 0xe8, 0xb3, 0x79, + 0x37, 0xf8, 0xa5, 0x54, 0xb4, 0x26, 0xeb, 0xcf, + 0xe5, 0x7c, 0xf5, 0xea, 0xd3, 0xb1, 0x57, 0x79, + 0xc3, 0x5f, 0x1a, 0xd7, 0x9c, 0xb5, 0xa2, 0x22, + 0xcd, 0xb0, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x23, 0xb2, 0x16, 0x32, 0xc9, 0x59, 0x22, + 0xda, 0x37, 0x96, 0x83, 0xb4, 0xaa, 0xc5, 0xf9, + 0xbd, 0xc7, 0xe4, 0x19, 0x98, 0xc7, 0xb0, 0x99, + 0xe3, 0x6f, 0x0d, 0xcc, 0x26, 0xbf, 0xc6, 0x8b, + 0x95, 0xa6, 0x9c, 0xa3, 0x90, 0xf2, 0x2b, 0xc2, + 0xd1, 0xbe, 0xc7, 0xb2, 0x5a, 0xcb, 0x19, 0x2c, + 0x7f, 0x28, 0x68, 0xdf, 0xcc, 0xa6, 0x27, 0x20, + 0xc9, 0x8b, 0xc9, 0xda, 0x65, 0x2c, 0xd9, 0x79, + 0x68, 0xea, 0xc6, 0xfd, 0x85, 0xae, 0xd8, 0xe6, + 0x38, 0x77, 0xcc, 0x78, 0xe4, 0x21, 0x6e, 0xaa, + 0x85, 0xc4, 0xf7, 0x38, 0xf7, 0xbe, 0xfe, 0xc5, + 0xa1, 0xd7, 0x10, 0x8a, 0x4f, 0x6f, 0xb9, 0xb3, + 0xb1, 0xa7, 0xc6, 0x03, 0x71, 0x53, 0xf8, 0x6c, + 0xe6, 0x3f, 0x33, 0x6b, 0xe7, 0x16, 0x6f, 0xee, + 0x9b, 0xb2, 0x68, 0x5d, 0xb2, 0x48, 0xdd, 0xfa, + 0x2f, 0x6a, 0x8c, 0x9d, 0x19, 0x60, 0x6f, 0x70, + 0xa7, 0x0a, 0xf6, 0xab, 0xca, 0xa0, 0x51, 0x7b, + 0xb1, 0x7c, 0xd4, 0xa2, 0x0f, 0x6a, 0x10, 0xb9, + 0x78, 0x88, 0x3d, 0xa9, 0x5e, 0x55, 0x11, 0x01, + 0x11, 0x10, 0x16, 0x86, 0x6b, 0x35, 0x65, 0x84, + 0xb1, 0x7d, 0xed, 0xe3, 0xa8, 0xd1, 0xb2, 0x38, + 0xc7, 0x7d, 0x23, 0xf9, 0x18, 0xd0, 0xb1, 0xe7, + 0xb5, 0x0e, 0x3b, 0x05, 0x69, 0xd3, 0xde, 0x3e, + 0xb2, 0x38, 0x1e, 0x86, 0xdd, 0xbd, 0xfc, 0x87, + 0xac, 0x39, 0x07, 0x54, 0xaa, 0x33, 0x71, 0xd9, + 0x6d, 0x51, 0x7d, 0x1e, 0x5b, 0x36, 0x7a, 0x0b, + 0x13, 0xb6, 0x28, 0x07, 0xc5, 0x8b, 0xa8, 0xd6, + 0xf2, 0x57, 0xaa, 0x77, 0xab, 0x45, 0x3d, 0xd9, + 0xe8, 0x84, 0x4c, 0xb6, 0x70, 0x4e, 0xba, 0xcd, + 0xde, 0x4b, 0x9d, 0xbf, 0xfa, 0xd7, 0x92, 0xd8, + 0x1b, 0xbd, 0xb1, 0xb1, 0xbb, 0x9a, 0xc0, 0x79, + 0xfe, 0x15, 0x73, 0xc7, 0xd8, 0xd1, 0xa2, 0x59, + 0x9a, 0x09, 0xde, 0xce, 0x5f, 0x75, 0x47, 0xe3, + 0xec, 0xba, 0x46, 0xb6, 0x26, 0x47, 0xd1, 0x47, + 0x18, 0xe1, 0x6e, 0xf0, 0x38, 0x47, 0x22, 0x9e, + 0x8d, 0x82, 0x38, 0xda, 0xc1, 0xb9, 0xa2, 0x8a, + 0x2a, 0x9c, 0xb3, 0xd8, 0x44, 0x3e, 0x91, 0x11, + 0x42, 0x44, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x41, 0x1d, 0xa8, 0xfd, 0x47, 0x79, 0xe4, 0xfe, + 0x73, 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, 0xbb, + 0xfb, 0x4d, 0x5b, 0x1a, 0x8f, 0xd4, 0x77, 0x9e, + 0x4f, 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, 0x3b, + 0xcb, 0xbf, 0xb4, 0xd5, 0x78, 0xe1, 0xce, 0x96, + 0x33, 0xcc, 0x53, 0xb9, 0x3a, 0xd6, 0x24, 0x44, + 0x54, 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, 0x2d, + 0x5c, 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, 0xa5, + 0x6d, 0x2d, 0x5c, 0x87, 0xa1, 0x5c, 0xf9, 0x27, + 0xf8, 0xa5, 0x4d, 0x39, 0xe1, 0x5b, 0x9b, 0x15, + 0x68, 0x9d, 0x48, 0x2d, 0x27, 0xe8, 0xf7, 0x1e, + 0x1b, 0x7c, 0x55, 0x3c, 0xa0, 0x74, 0x9f, 0xa3, + 0xdc, 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0xd3, 0x11, + 0xc5, 0xab, 0x4f, 0xdc, 0xc3, 0x03, 0xcb, 0x5b, + 0xd1, 0x3a, 0xc4, 0x44, 0x59, 0x3a, 0x44, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x51, 0x39, + 0x0b, 0x1e, 0x09, 0x8d, 0xcc, 0x20, 0x0e, 0x2e, + 0xf8, 0x52, 0xa3, 0xb0, 0xa5, 0x97, 0x84, 0x03, + 0xbc, 0x55, 0x07, 0x3e, 0xcb, 0x69, 0x76, 0x4b, + 0x27, 0xe2, 0x18, 0xd9, 0x4d, 0xad, 0xdb, 0x0f, + 0x13, 0x5e, 0xd3, 0xc2, 0x38, 0x87, 0x52, 0x9b, + 0x96, 0xc6, 0x2b, 0x5a, 0xdc, 0xd9, 0xb9, 0xb6, + 0x7a, 0x9a, 0x07, 0x44, 0x46, 0xc6, 0xdf, 0x46, + 0xda, 0xb4, 0xf5, 0xe4, 0x0d, 0xed, 0xb7, 0xb0, + 0xad, 0xb7, 0x38, 0xa6, 0x4d, 0x4e, 0x8d, 0xe6, + 0x22, 0xda, 0x91, 0x41, 0xb2, 0xa7, 0xaa, 0xa3, + 0x6f, 0xb1, 0x92, 0x36, 0x27, 0x09, 0x98, 0x1e, + 0xc7, 0x53, 0x8c, 0x80, 0x1c, 0xd3, 0xce, 0x0a, + 0xb7, 0x95, 0xd1, 0x92, 0x7a, 0x51, 0x93, 0xa9, + 0x35, 0x69, 0x75, 0x6b, 0x75, 0x03, 0x67, 0xb4, + 0x95, 0x93, 0xc2, 0xee, 0xf6, 0x48, 0xc8, 0x73, + 0x4f, 0x61, 0x65, 0xa2, 0xe6, 0xae, 0xd3, 0xb9, + 0x3b, 0x2b, 0xc7, 0x5d, 0xe9, 0xeb, 0xc3, 0x68, + 0xd7, 0x1a, 0xb9, 0x9c, 0x45, 0xa0, 0x75, 0x6a, + 0x36, 0x82, 0x14, 0xdd, 0xbe, 0xa1, 0xd5, 0x56, + 0x2d, 0x6b, 0x72, 0x36, 0x31, 0xdf, 0x36, 0x9f, + 0x5b, 0x01, 0xe0, 0x79, 0xa7, 0x5b, 0x6b, 0x4f, + 0x61, 0x3c, 0x9e, 0xa9, 0xca, 0x65, 0xec, 0x5b, + 0xce, 0xd4, 0x01, 0x55, 0x6d, 0xbd, 0xa5, 0x69, + 0xc9, 0x76, 0x5c, 0x09, 0xed, 0x1e, 0x36, 0x11, + 0x24, 0x7c, 0x40, 0x1e, 0x78, 0xcb, 0x94, 0x84, + 0x7a, 0xd7, 0x4b, 0xcb, 0xde, 0xe4, 0x62, 0x15, + 0xe4, 0x70, 0x7b, 0x4f, 0xef, 0x35, 0x47, 0x93, + 0x3d, 0x46, 0x58, 0x4d, 0xd1, 0x36, 0x0d, 0xea, + 0x16, 0x4d, 0x63, 0xa6, 0x23, 0x69, 0x73, 0xb2, + 0x11, 0xd0, 0x75, 0x03, 0xcf, 0x69, 0xa5, 0x47, + 0xdd, 0x7b, 0x49, 0xd3, 0x30, 0x83, 0xd1, 0x3e, + 0x6b, 0x97, 0x0e, 0x48, 0xe3, 0x20, 0x76, 0x64, + 0xe1, 0x4f, 0x26, 0x7a, 0xa4, 0xcb, 0x0b, 0x55, + 0x57, 0xc4, 0xd3, 0xc3, 0x6f, 0x13, 0xa6, 0x9e, + 0x46, 0xc3, 0x13, 0x05, 0x5d, 0x23, 0xc8, 0x6b, + 0x47, 0x39, 0x2a, 0xa4, 0x35, 0x4e, 0xa2, 0xc9, + 0xc2, 0xd7, 0xe2, 0x6c, 0x19, 0x6b, 0x14, 0xdf, + 0x57, 0x35, 0xc1, 0xe3, 0x77, 0x58, 0xf0, 0x8e, + 0x11, 0xdb, 0x50, 0x12, 0x60, 0x35, 0x16, 0x62, + 0x7e, 0x9b, 0x39, 0x78, 0xe7, 0xc6, 0xc3, 0xf5, + 0x6d, 0x70, 0x76, 0xe3, 0xf1, 0x18, 0xde, 0xe4, + 0x29, 0x8a, 0x7a, 0xe7, 0x21, 0x97, 0xa9, 0x39, + 0x95, 0xd7, 0xdd, 0x3c, 0xff, 0x00, 0x87, 0xe9, + 0xb8, 0xfc, 0xee, 0xe5, 0xd5, 0x06, 0xe9, 0xc3, + 0xf8, 0x6d, 0xeb, 0xb5, 0xa7, 0xbe, 0xe7, 0x3b, + 0x16, 0x9d, 0x96, 0x98, 0x85, 0xd7, 0x03, 0x21, + 0x95, 0x95, 0xf9, 0x1c, 0x83, 0xcf, 0x11, 0xe9, + 0x2b, 0xc0, 0x0f, 0x27, 0x61, 0x6f, 0xe3, 0x30, + 0x96, 0x96, 0x6d, 0x63, 0x6c, 0x21, 0xe1, 0xee, + 0x89, 0x92, 0x4d, 0xef, 0x34, 0xf8, 0xae, 0x56, + 0x3b, 0x2b, 0x28, 0xe1, 0x6f, 0x48, 0x45, 0x64, + 0x76, 0xfe, 0xa0, 0x49, 0x98, 0xcd, 0x04, 0x47, + 0x5b, 0x4e, 0xdb, 0x19, 0x3b, 0xc0, 0x33, 0x6c, + 0x6d, 0x78, 0x8b, 0x5d, 0xcb, 0xd4, 0xf7, 0x02, + 0x97, 0x6b, 0x43, 0x40, 0x00, 0x52, 0x9b, 0x36, + 0x2f, 0x51, 0x55, 0x22, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x8f, 0xd4, + 0x1e, 0xa9, 0x9f, 0xe4, 0xf8, 0xc1, 0x48, 0x28, + 0xfd, 0x41, 0xea, 0x99, 0xfe, 0x4f, 0x8c, 0x15, + 0xed, 0xed, 0xd3, 0xa6, 0x19, 0x62, 0x78, 0x17, + 0x77, 0x2b, 0xd4, 0xf7, 0x4a, 0xfa, 0xa1, 0xbe, + 0x1b, 0xfb, 0x6a, 0x59, 0xfb, 0x94, 0x4e, 0x95, + 0xf5, 0x43, 0x7c, 0x37, 0xf6, 0xd4, 0xb3, 0xf7, + 0x29, 0xbb, 0xc5, 0xaf, 0x7a, 0x51, 0x86, 0xe0, + 0x5b, 0xdd, 0x87, 0x39, 0xba, 0xff, 0x00, 0x27, + 0x8f, 0x2a, 0xcf, 0xb1, 0x0a, 0xfe, 0xa8, 0x17, + 0x5f, 0xe4, 0xf1, 0xe5, 0x59, 0xf6, 0x21, 0x5f, + 0xd7, 0x2d, 0x9c, 0xf5, 0xef, 0xcb, 0xd8, 0xf8, + 0xa6, 0x6c, 0x1f, 0xf1, 0xad, 0x88, 0x88, 0xb6, + 0x79, 0xa2, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x2d, 0x5c, 0x85, 0x9b, 0x2e, 0xa1, 0xa1, + 0xd8, 0xf6, 0xed, 0x6b, 0x96, 0xd2, 0x20, 0xa8, + 0xe5, 0x30, 0xd6, 0xb9, 0x38, 0x85, 0xbd, 0xe0, + 0xfe, 0x23, 0x41, 0xe8, 0xde, 0xd0, 0x03, 0x9b, + 0xfe, 0xaa, 0xbd, 0x6b, 0x71, 0xa9, 0x74, 0x8c, + 0xc5, 0xb6, 0xa7, 0xcf, 0xf1, 0xb5, 0xa9, 0x87, + 0x6b, 0x9a, 0x39, 0xa9, 0xb5, 0x87, 0x99, 0x74, + 0x89, 0xed, 0x22, 0x98, 0x1f, 0x8a, 0xe2, 0x29, + 0xc4, 0x37, 0x8a, 0xa8, 0xf9, 0x31, 0x32, 0xc7, + 0xde, 0x3b, 0xa6, 0x68, 0x35, 0x6d, 0x76, 0x3c, + 0x7f, 0xaa, 0xb4, 0x55, 0x92, 0x32, 0x67, 0x84, + 0x4c, 0x30, 0x61, 0x35, 0xae, 0x13, 0x2e, 0x1b, + 0x18, 0x97, 0xcd, 0x6e, 0xce, 0xc7, 0x5b, 0x4e, + 0x43, 0x4d, 0x7f, 0x55, 0xdd, 0xeb, 0x94, 0xf2, + 0xa0, 0x66, 0xb4, 0xc5, 0x9e, 0x44, 0xd4, 0x9f, + 0x37, 0xbc, 0x07, 0xeb, 0x38, 0x76, 0x3b, 0xc2, + 0x68, 0xeb, 0xac, 0x16, 0x36, 0x9a, 0xdf, 0x0e, + 0xd2, 0xdb, 0x3b, 0xc1, 0x71, 0x0c, 0x7f, 0xfa, + 0x2e, 0x3d, 0x23, 0x29, 0xd6, 0x12, 0x6d, 0x1e, + 0xe1, 0x4c, 0x94, 0xce, 0x69, 0xc9, 0xd9, 0x26, + 0x5c, 0x8e, 0x8c, 0x8a, 0x86, 0xef, 0x68, 0xd9, + 0x0c, 0x7c, 0x8d, 0x87, 0x2f, 0x8c, 0x01, 0xc4, + 0x02, 0x1f, 0x13, 0xcb, 0x2a, 0x3a, 0xbc, 0x2f, + 0xe2, 0x1e, 0xfa, 0xdc, 0x87, 0xda, 0x86, 0x01, + 0xe3, 0xf8, 0x90, 0xdc, 0xc4, 0x7a, 0x9c, 0x2d, + 0x70, 0xf7, 0x9e, 0x9e, 0x45, 0x5d, 0x47, 0x95, + 0x0b, 0x82, 0x2a, 0xb1, 0xf6, 0x8f, 0xa7, 0x29, + 0x56, 0x8b, 0x97, 0x73, 0x45, 0xff, 0x00, 0xf5, + 0x2d, 0x3b, 0x8f, 0x6a, 0x98, 0x98, 0xea, 0x20, + 0xb3, 0x9e, 0x47, 0x0d, 0xdc, 0x65, 0x91, 0x8e, + 0xdb, 0x93, 0xc8, 0xab, 0xa8, 0xcb, 0x0b, 0xaa, + 0xf8, 0x9e, 0x78, 0x2d, 0xa2, 0x33, 0x5c, 0x48, + 0xd8, 0x62, 0x6e, 0xd7, 0x49, 0x23, 0x83, 0x5a, + 0x3d, 0xd2, 0xb9, 0xfc, 0x7a, 0xe7, 0x53, 0xe6, + 0x9e, 0xf8, 0xb1, 0x16, 0x91, 0xdb, 0x34, 0x0a, + 0x99, 0x28, 0x65, 0x20, 0x73, 0xbe, 0x8d, 0xf7, + 0x96, 0xa4, 0xda, 0x57, 0x3f, 0x95, 0xb8, 0x6c, + 0xb9, 0x9c, 0x8d, 0x5a, 0x47, 0x10, 0x0f, 0x26, + 0x47, 0x0e, 0xb3, 0x23, 0xd8, 0xd0, 0x9e, 0x46, + 0x4c, 0xf3, 0x90, 0xcb, 0xd4, 0x98, 0xce, 0xfb, + 0x4a, 0xb4, 0x83, 0x8a, 0xdf, 0x08, 0xcf, 0x3b, + 0x9c, 0x9e, 0x11, 0x70, 0xf0, 0x44, 0x40, 0xfe, + 0xa3, 0x7b, 0xe7, 0x95, 0x0d, 0x65, 0xa7, 0x2f, + 0xb3, 0x17, 0x1f, 0x88, 0xea, 0x29, 0xa5, 0x2e, + 0x75, 0x0f, 0x44, 0x7b, 0xf2, 0x37, 0x81, 0xfa, + 0x83, 0xac, 0x14, 0xe6, 0x2b, 0x07, 0x8c, 0xc5, + 0x1f, 0xfe, 0x1c, 0x1c, 0x57, 0x6d, 0x04, 0x0b, + 0x89, 0xbb, 0xa7, 0x93, 0x4d, 0x85, 0x9c, 0x8d, + 0xf7, 0x14, 0xe5, 0x86, 0x3c, 0xbf, 0x84, 0xdc, + 0x54, 0xf0, 0x00, 0x76, 0xef, 0x27, 0x7e, 0xd4, + 0xf2, 0xa2, 0x3a, 0x29, 0xe8, 0xed, 0x46, 0x4c, + 0xb9, 0xda, 0xd6, 0x78, 0xe2, 0x1b, 0x1c, 0x56, + 0x71, 0x08, 0x2d, 0xa2, 0x14, 0x63, 0x1b, 0xb1, + 0xa3, 0xae, 0x7a, 0xea, 0x62, 0xce, 0xd5, 0xb6, + 0xd1, 0xf0, 0x6c, 0x2e, 0x3b, 0x5c, 0x7a, 0xeb, + 0x38, 0x01, 0xa2, 0x80, 0x50, 0x0e, 0x40, 0xbd, + 0x55, 0x58, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x41, 0xbc, 0x22, 0x0d, + 0xe1, 0x05, 0x03, 0x46, 0xff, 0x00, 0x7c, 0x5f, + 0x73, 0x5c, 0x7d, 0xa0, 0x5d, 0x21, 0x73, 0x7d, + 0x1b, 0xfd, 0xf1, 0x7d, 0xcd, 0x71, 0xf6, 0x81, + 0x74, 0x85, 0x8e, 0x1f, 0x63, 0xce, 0x97, 0xa7, + 0xf1, 0x9e, 0x66, 0x9f, 0x55, 0x6f, 0x52, 0x2f, + 0x37, 0xf5, 0x31, 0xf8, 0x7f, 0x01, 0x59, 0xad, + 0x3d, 0x1a, 0x2f, 0x04, 0x76, 0x96, 0x1c, 0xdf, + 0xd4, 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, 0xf4, + 0x68, 0xbc, 0x11, 0xda, 0x5c, 0x56, 0x7f, 0xb3, + 0xc4, 0x7a, 0xaa, 0x1c, 0x75, 0x72, 0xf6, 0xf7, + 0xe5, 0x95, 0x11, 0x17, 0xa6, 0xc0, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0xe3, 0x9a, + 0xd7, 0xb4, 0xb5, 0xc2, 0xad, 0x3b, 0x08, 0x5e, + 0xa2, 0x0a, 0xed, 0xf6, 0x35, 0x8c, 0x12, 0x42, + 0xfa, 0x18, 0x1f, 0x5d, 0xe2, 0xbe, 0xe5, 0x54, + 0x1c, 0x36, 0xd9, 0x9d, 0x39, 0x29, 0x97, 0x0e, + 0xf1, 0x3d, 0xa3, 0xcf, 0x14, 0x98, 0xf9, 0x4f, + 0x72, 0x6b, 0xca, 0xcf, 0xd1, 0x77, 0x32, 0xbd, + 0xc9, 0x14, 0x72, 0x34, 0xb5, 0xe2, 0xa0, 0xad, + 0x09, 0xf1, 0x25, 0xcf, 0x32, 0xc5, 0x26, 0xd3, + 0xbe, 0x37, 0x77, 0xb4, 0xea, 0x29, 0x89, 0xc8, + 0x64, 0x6b, 0xe1, 0xf5, 0x56, 0x2f, 0x26, 0xe1, + 0x01, 0x2e, 0xb3, 0xbd, 0xf8, 0xd6, 0x97, 0x1d, + 0xc3, 0xeb, 0xfa, 0x84, 0xec, 0x7f, 0xb8, 0xa6, + 0xa9, 0x4d, 0xea, 0xab, 0x96, 0xc4, 0x43, 0x3c, + 0x7d, 0x0d, 0xec, 0x7f, 0xc3, 0xa7, 0x72, 0x77, + 0xd0, 0xfe, 0x93, 0x5d, 0xbc, 0x28, 0xcc, 0x67, + 0xe7, 0x2c, 0x63, 0x84, 0x76, 0xf7, 0x71, 0xdd, + 0xda, 0x0d, 0x8c, 0x8a, 0xea, 0xae, 0x34, 0xea, + 0x35, 0xdd, 0xf7, 0xbe, 0xa7, 0x24, 0x4f, 0x77, + 0x22, 0x3a, 0x57, 0xd4, 0x55, 0xa7, 0x6b, 0x19, + 0x6c, 0xa3, 0x73, 0xb2, 0xf8, 0xe9, 0x60, 0x6c, + 0x74, 0x0f, 0x96, 0x02, 0x25, 0x60, 0xaf, 0x2e, + 0xde, 0x12, 0xb3, 0x5b, 0xeb, 0xcd, 0x29, 0x38, + 0x07, 0xcf, 0x84, 0x44, 0xf2, 0x4a, 0xc7, 0xb4, + 0xf8, 0xb4, 0x51, 0xe4, 0xcf, 0x56, 0x53, 0x2a, + 0x7d, 0x14, 0x53, 0x75, 0x5e, 0x9a, 0x70, 0xab, + 0x72, 0x56, 0xe7, 0xe5, 0x2c, 0x13, 0xeb, 0x6d, + 0x2f, 0x07, 0x7f, 0x7e, 0xc7, 0x1e, 0xa3, 0x1a, + 0xf7, 0x1f, 0x79, 0xa9, 0x92, 0x7a, 0xa5, 0x39, + 0x53, 0x88, 0xa9, 0xd7, 0x5e, 0xd3, 0x71, 0x01, + 0xc2, 0x3b, 0x0b, 0x69, 0xee, 0xe5, 0x71, 0xe1, + 0x65, 0x40, 0x8d, 0xa4, 0x9d, 0xdb, 0xea, 0xef, + 0x79, 0x6b, 0x64, 0x72, 0x3a, 0xe7, 0x21, 0x04, + 0x9e, 0x6e, 0x23, 0xc7, 0x46, 0x00, 0x3c, 0x2c, + 0x34, 0x79, 0x07, 0xff, 0x00, 0x71, 0xff, 0x00, + 0x05, 0x14, 0xf9, 0x33, 0xdd, 0xe8, 0x47, 0x94, + 0xb4, 0xe6, 0x35, 0x06, 0x27, 0x0d, 0x17, 0x1d, + 0xfc, 0xe1, 0x8f, 0x22, 0xad, 0x81, 0xbd, 0xd4, + 0xae, 0xe6, 0x60, 0xdb, 0xee, 0xee, 0x54, 0x7b, + 0xcc, 0xf6, 0x73, 0x57, 0xc8, 0xfb, 0x4b, 0x20, + 0x6c, 0x31, 0x40, 0xf0, 0xc8, 0x46, 0xd7, 0x38, + 0x1e, 0x49, 0x1c, 0x3c, 0x50, 0xbe, 0x2c, 0x74, + 0x5b, 0x04, 0x9e, 0x73, 0x98, 0x95, 0xd7, 0x52, + 0x3e, 0xa4, 0xb5, 0x84, 0x91, 0xc5, 0xfa, 0xf2, + 0x1e, 0xe8, 0xab, 0x55, 0x9e, 0x3c, 0x34, 0x88, + 0xe0, 0x89, 0xb1, 0x5b, 0x00, 0xd6, 0xb1, 0x8c, + 0x1d, 0xc8, 0x1b, 0xeb, 0xce, 0x54, 0xf4, 0x53, + 0x9b, 0xa6, 0x7c, 0x47, 0x4c, 0xa3, 0x70, 0xfa, + 0x6e, 0xc7, 0x1a, 0x08, 0xb3, 0x63, 0xa5, 0xb9, + 0x70, 0xa3, 0xae, 0x1f, 0xdf, 0x01, 0xd4, 0x67, + 0x51, 0x59, 0x2c, 0xf1, 0xce, 0x8d, 0xed, 0x96, + 0x6a, 0x12, 0xd1, 0x46, 0x83, 0xc8, 0xb6, 0xed, + 0xed, 0xa3, 0xb7, 0x60, 0x63, 0x06, 0xed, 0xe4, + 0xef, 0x59, 0x55, 0x26, 0x72, 0xf4, 0xca, 0x44, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x41, 0x19, 0x96, 0xfa, 0xe8, + 0x79, 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, 0x1c, 0xca, + 0x13, 0x2d, 0xf5, 0xd0, 0xf3, 0x1e, 0xda, 0x9b, + 0x6f, 0x7a, 0x39, 0x97, 0x9d, 0x83, 0xe7, 0xb1, + 0xda, 0x6d, 0x7e, 0x99, 0x74, 0x5d, 0xe0, 0xd9, + 0xd1, 0x56, 0xb6, 0x1b, 0xcf, 0x45, 0x9b, 0xc9, + 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, 0x5e, 0x7f, + 0x2b, 0xe7, 0xab, 0x6d, 0xe7, 0xa2, 0xcd, 0xe4, + 0xdf, 0xe2, 0x95, 0x52, 0xd0, 0x9b, 0xaf, 0x3f, + 0x95, 0xf3, 0xd7, 0xab, 0x4e, 0xc5, 0x5d, 0xe7, + 0x0d, 0x7c, 0x6b, 0x5e, 0x72, 0xd6, 0x88, 0x8b, + 0x36, 0xc2, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x08, 0x9c, 0x95, 0x80, 0x12, + 0xf9, 0xcc, 0x40, 0x54, 0xf7, 0xe2, 0x95, 0x1d, + 0x85, 0x5a, 0xba, 0xc2, 0xcd, 0x0d, 0xcf, 0xe2, + 0x78, 0x8b, 0x8f, 0x34, 0xbc, 0x6d, 0x41, 0x78, + 0xa0, 0x6b, 0xba, 0xad, 0x73, 0x77, 0x11, 0xce, + 0xaf, 0x44, 0x07, 0x0a, 0x1d, 0xa1, 0x69, 0xdc, + 0xe2, 0xe3, 0x98, 0x00, 0xc7, 0x98, 0xa9, 0x53, + 0xb3, 0x94, 0xf5, 0xd4, 0xc4, 0xe4, 0x10, 0xd8, + 0xbd, 0x66, 0xc2, 0xe6, 0xda, 0xe7, 0x61, 0x38, + 0xfb, 0xae, 0xf4, 0x4f, 0x42, 0x6d, 0xde, 0x7a, + 0xcf, 0xf8, 0x84, 0xf5, 0x0a, 0xb2, 0xb4, 0xb5, + 0xcd, 0x0e, 0x69, 0x0e, 0x6b, 0x85, 0x5a, 0xe1, + 0xb4, 0x11, 0xd5, 0x05, 0x40, 0xde, 0x63, 0x65, + 0x6c, 0x4e, 0x6c, 0xac, 0x0f, 0x6b, 0x87, 0x76, + 0x46, 0xd6, 0x90, 0x3a, 0xad, 0x3d, 0x55, 0x5e, + 0x8e, 0xcb, 0x39, 0x8d, 0xba, 0x73, 0xf0, 0x17, + 0x7d, 0x15, 0xb1, 0xda, 0xeb, 0x59, 0x4f, 0x14, + 0x20, 0xf2, 0xf7, 0x2e, 0xdc, 0x39, 0x93, 0xa2, + 0x7b, 0x11, 0xd2, 0xe8, 0x08, 0xab, 0xb0, 0x6a, + 0x2c, 0xac, 0x01, 0xad, 0xc9, 0x63, 0xf8, 0xeb, + 0xff, 0x00, 0xab, 0x68, 0xee, 0x20, 0x69, 0xfa, + 0x8f, 0xa1, 0xf7, 0xd6, 0x48, 0x35, 0xce, 0x97, + 0x98, 0xf0, 0xba, 0xf3, 0xcd, 0xde, 0x36, 0x16, + 0x4e, 0xc7, 0x46, 0x41, 0xf7, 0x45, 0x3d, 0xf4, + 0xf2, 0x67, 0xff, 0x00, 0xc3, 0x2a, 0x79, 0x14, + 0x7c, 0x7a, 0x83, 0x03, 0x28, 0x05, 0x99, 0x1b, + 0x67, 0x57, 0x77, 0xf1, 0x5b, 0xf0, 0x95, 0xec, + 0x99, 0xfc, 0x1c, 0x43, 0x8a, 0x4c, 0x85, 0xbb, + 0x40, 0xe5, 0xe9, 0x1b, 0xf0, 0x14, 0xc9, 0x3d, + 0x52, 0x9c, 0xad, 0xf4, 0x55, 0xfb, 0xad, 0x7b, + 0xa5, 0x6d, 0x81, 0xff, 0x00, 0xe6, 0x74, 0xee, + 0xfd, 0x18, 0x58, 0xe7, 0xd7, 0xdd, 0xa0, 0x1e, + 0xfa, 0xd6, 0x1a, 0xb3, 0x29, 0x91, 0x85, 0xb2, + 0x61, 0xb1, 0xe5, 0xb1, 0xca, 0x68, 0xcb, 0x8b, + 0xa3, 0x41, 0xcf, 0xc0, 0xcf, 0xf5, 0x4f, 0x26, + 0x51, 0x95, 0x68, 0x7b, 0xd9, 0x1b, 0x1d, 0x24, + 0x8e, 0x0c, 0x63, 0x45, 0x5c, 0xf7, 0x10, 0x00, + 0x1d, 0x72, 0x55, 0x4b, 0x2d, 0xaf, 0x22, 0x74, + 0xdf, 0x87, 0x69, 0xe6, 0x79, 0xfd, 0xeb, 0xaa, + 0x3a, 0x6a, 0x7f, 0x05, 0x9d, 0x71, 0xfa, 0x74, + 0xec, 0x28, 0x1b, 0xac, 0x4e, 0xaa, 0xcd, 0xcc, + 0x4e, 0x66, 0xec, 0xf4, 0x0c, 0x27, 0xf8, 0x31, + 0x91, 0xc1, 0xb3, 0xf4, 0x63, 0x6e, 0xce, 0xca, + 0x9b, 0xc5, 0xe0, 0xac, 0xec, 0x83, 0x7c, 0xc6, + 0x2e, 0xeb, 0x8a, 0xaf, 0x90, 0xed, 0x7d, 0x07, + 0x21, 0xea, 0x2b, 0x64, 0xa6, 0x3b, 0xb9, 0x64, + 0xe9, 0x96, 0x8d, 0xa6, 0x9a, 0x64, 0xf7, 0x23, + 0x23, 0x99, 0x99, 0xf9, 0x0b, 0xf9, 0x08, 0x25, + 0xae, 0xef, 0x01, 0xe4, 0x1c, 0xc3, 0xa8, 0xac, + 0xd6, 0xd8, 0xc9, 0xe4, 0x1f, 0xc5, 0xee, 0x63, + 0x24, 0x12, 0xd3, 0xd4, 0x1c, 0x83, 0xac, 0xb7, + 0x2c, 0x6c, 0x59, 0x13, 0x44, 0xaf, 0x15, 0x91, + 0xdb, 0xc7, 0x20, 0x5b, 0xaa, 0xb3, 0x33, 0x39, + 0xd2, 0xf1, 0x8d, 0x0c, 0x68, 0x68, 0xd8, 0x07, + 0x51, 0x7a, 0x88, 0xa0, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x47, 0x6a, + 0x3f, 0x51, 0xde, 0x79, 0x3f, 0x9c, 0xd5, 0xaf, + 0xa1, 0xbd, 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x56, + 0xc6, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, 0xf9, 0xcd, + 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, 0xef, 0xed, + 0x35, 0x5e, 0x38, 0x73, 0xa5, 0x8c, 0xf3, 0x14, + 0xee, 0x4e, 0xb5, 0x89, 0x11, 0x15, 0x1b, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x0b, 0x57, 0x21, 0xe8, + 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x5b, 0x4b, 0x57, + 0x21, 0xe8, 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x53, + 0x4e, 0x78, 0x56, 0xe6, 0xc5, 0x5a, 0x27, 0x52, + 0x0b, 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, 0x15, + 0x4f, 0x28, 0x1d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, + 0x7c, 0x55, 0x3c, 0xb4, 0xc4, 0x71, 0x6a, 0xd3, + 0xf7, 0x30, 0xc0, 0xf2, 0xd6, 0xf4, 0x4e, 0xb1, + 0x11, 0x16, 0x4e, 0x91, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x02, 0xa5, 0x0e, + 0xd1, 0x43, 0xb4, 0x1d, 0xe0, 0xa2, 0x20, 0xd1, + 0x97, 0x11, 0x6e, 0xf7, 0x39, 0xcc, 0x26, 0x30, + 0xfe, 0xf9, 0xa3, 0x71, 0xa1, 0xaa, 0xd5, 0xb9, + 0xc6, 0x5c, 0x30, 0x71, 0x31, 0xdd, 0x23, 0x19, + 0xb4, 0x0e, 0x5d, 0x8a, 0x61, 0x10, 0x53, 0xef, + 0x30, 0x78, 0xeb, 0xa7, 0x0e, 0x9e, 0xcc, 0x3a, + 0x69, 0x0f, 0x7c, 0x01, 0x07, 0x9e, 0xa2, 0x83, + 0xb2, 0xb5, 0xe2, 0xd3, 0xba, 0x6e, 0x3b, 0x8e, + 0x92, 0x3b, 0x62, 0x64, 0x8d, 0xc2, 0x83, 0x88, + 0x96, 0xd7, 0xa9, 0x43, 0xbd, 0x5e, 0x17, 0x9c, + 0x2d, 0xea, 0x0e, 0xc2, 0x9f, 0x2a, 0x7a, 0xc5, + 0x53, 0xf0, 0xbb, 0x57, 0x47, 0x4f, 0x33, 0x63, + 0xda, 0x41, 0x69, 0x1c, 0x20, 0x95, 0xf1, 0x6f, + 0xa6, 0xb1, 0x71, 0x46, 0xc3, 0x1e, 0x3d, 0x8f, + 0x99, 0xe4, 0x9a, 0x10, 0x48, 0x1d, 0x4a, 0x82, + 0x55, 0xbe, 0x83, 0xa8, 0x89, 0x96, 0x7a, 0xc4, + 0x5c, 0x78, 0xe9, 0xba, 0x06, 0x32, 0x82, 0x3e, + 0x16, 0xec, 0x68, 0xe4, 0x3d, 0x60, 0x17, 0xcc, + 0x58, 0x77, 0x71, 0xf1, 0x3d, 0xf4, 0x68, 0x35, + 0x0d, 0x1e, 0xfa, 0x96, 0x45, 0x03, 0x1c, 0x50, + 0x47, 0x10, 0xa3, 0x05, 0x16, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x51, 0xfa, 0x83, 0xd5, + 0x33, 0xfc, 0x9f, 0x18, 0x29, 0x05, 0x1f, 0xa8, + 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0xbd, 0xbd, + 0xba, 0x74, 0xc3, 0x2c, 0x4f, 0x02, 0xee, 0xe5, + 0x7a, 0x9e, 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, + 0x6d, 0x4b, 0x3f, 0x72, 0x89, 0xd2, 0xbe, 0xa8, + 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x37, + 0x78, 0xb5, 0xef, 0x4a, 0x30, 0xdc, 0x0b, 0x7b, + 0xb0, 0xe7, 0x37, 0x5f, 0xe4, 0xf1, 0xe5, 0x59, + 0xf6, 0x21, 0x5f, 0xd5, 0x02, 0xeb, 0xfc, 0x9e, + 0x3c, 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xe5, 0xb3, + 0x9e, 0xbd, 0xf9, 0x7b, 0x1f, 0x14, 0xcd, 0x83, + 0xfe, 0x35, 0xb1, 0x11, 0x16, 0xcf, 0x34, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x1a, 0xf7, 0x56, 0x30, 0x5c, + 0xd1, 0xcf, 0x1c, 0x2f, 0x1b, 0x9c, 0xdd, 0x85, + 0x6a, 0x3f, 0x12, 0xf6, 0x82, 0x61, 0x94, 0x97, + 0x9d, 0xa7, 0x8b, 0x71, 0x2a, 0x4d, 0x10, 0x57, + 0x66, 0xb4, 0x21, 0xa6, 0x2b, 0x98, 0x5b, 0x2c, + 0x6c, 0xae, 0xc7, 0xb7, 0x8c, 0x7b, 0xe0, 0xfb, + 0xcb, 0x41, 0xf8, 0x6d, 0x3e, 0x5a, 0xd3, 0x73, + 0x8d, 0x88, 0x3a, 0x42, 0x48, 0x0d, 0x61, 0x6b, + 0x88, 0xf9, 0x24, 0x2b, 0x8a, 0xf0, 0x80, 0x77, + 0x80, 0x99, 0x64, 0x54, 0xe1, 0xc5, 0x63, 0x98, + 0xc1, 0x1d, 0xb5, 0x9b, 0x3a, 0x30, 0xda, 0x34, + 0x38, 0x57, 0x71, 0xea, 0x95, 0x96, 0xdf, 0x15, + 0x64, 0xd9, 0xdd, 0x21, 0xc7, 0xc2, 0x0b, 0x5b, + 0x5e, 0x27, 0x44, 0xd2, 0x49, 0xa7, 0x21, 0x20, + 0xab, 0x3d, 0x07, 0x50, 0x2f, 0x54, 0xe5, 0x9e, + 0xb1, 0x11, 0x6d, 0x6b, 0x73, 0x25, 0x49, 0x8c, + 0x44, 0xca, 0x51, 0x82, 0x81, 0xb4, 0xf7, 0x02, + 0xf6, 0x4c, 0x4c, 0xaf, 0x7f, 0x7e, 0x07, 0x5f, + 0xad, 0x4d, 0xaa, 0x59, 0x14, 0x0d, 0x5b, 0x6c, + 0x7c, 0x50, 0x01, 0x5e, 0xe9, 0xc3, 0x94, 0xad, + 0xa4, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x41, + 0xbc, 0x22, 0x0d, 0xe1, 0x05, 0x03, 0x46, 0xff, + 0x00, 0x7c, 0x5f, 0x73, 0x5c, 0x7d, 0xa0, 0x5d, + 0x21, 0x73, 0x7d, 0x1b, 0xfd, 0xf1, 0x7d, 0xcd, + 0x71, 0xf6, 0x81, 0x74, 0x85, 0x8e, 0x1f, 0x63, + 0xce, 0x97, 0xa7, 0xf1, 0x9e, 0x66, 0x9f, 0x55, + 0x6f, 0x52, 0x2f, 0x37, 0xf5, 0x31, 0xf8, 0x7f, + 0x01, 0x59, 0xad, 0x3d, 0x1a, 0x2f, 0x04, 0x76, + 0x96, 0x1c, 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, 0x05, + 0x66, 0xb4, 0xf4, 0x68, 0xbc, 0x11, 0xda, 0x5c, + 0x56, 0x7f, 0xb3, 0xc4, 0x7a, 0xaa, 0x1c, 0x75, + 0x72, 0xf6, 0xf7, 0xe5, 0x95, 0x11, 0x17, 0xa6, + 0xc0, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x1f, 0x12, 0xc4, + 0xc9, 0x58, 0x59, 0x20, 0xe2, 0x69, 0xe4, 0x2b, + 0x44, 0xe1, 0xa2, 0x1d, 0xe4, 0x8e, 0x6f, 0x0d, + 0x4b, 0x07, 0x50, 0x95, 0x22, 0x88, 0x20, 0xae, + 0xf1, 0xf7, 0x0c, 0xaf, 0x1b, 0x44, 0xac, 0x70, + 0xe1, 0xd9, 0x52, 0x08, 0xdf, 0xb4, 0x28, 0x69, + 0x74, 0xce, 0x16, 0x49, 0x5c, 0xe9, 0x2d, 0x78, + 0x5a, 0xc0, 0x7a, 0x47, 0x0a, 0x80, 0x2b, 0xcf, + 0xca, 0xae, 0xc9, 0x40, 0xa6, 0x26, 0x63, 0x34, + 0x8a, 0x4d, 0x9e, 0x0b, 0x07, 0x6e, 0x1c, 0xfb, + 0x5b, 0x62, 0x5e, 0xf0, 0x2a, 0x5f, 0xdd, 0x6e, + 0x3c, 0x80, 0xac, 0xf7, 0x58, 0x4b, 0x3b, 0x88, + 0xfa, 0x39, 0x2c, 0x58, 0xe0, 0x48, 0x20, 0x86, + 0xee, 0xec, 0x51, 0x5b, 0xb8, 0x5b, 0xd4, 0x1d, + 0x85, 0xee, 0xe4, 0xf2, 0xa7, 0xac, 0x56, 0x6d, + 0xf0, 0x36, 0x50, 0x4c, 0x1b, 0x65, 0x62, 0xc6, + 0x96, 0x70, 0x93, 0x29, 0x6d, 0x4f, 0xb8, 0xe7, + 0x72, 0xa9, 0x39, 0x71, 0xb3, 0x3c, 0x12, 0x48, + 0xdb, 0xbc, 0x75, 0x94, 0x9a, 0x28, 0x11, 0xb6, + 0xb8, 0x90, 0xc3, 0xc5, 0x2b, 0xb8, 0xc9, 0xe4, + 0xe4, 0x52, 0x0c, 0x63, 0x58, 0x28, 0xd1, 0x40, + 0x17, 0xd2, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x8c, 0xcb, 0x7d, 0x74, 0x3c, 0xc7, + 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, 0x09, 0x96, + 0xfa, 0xe8, 0x79, 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, + 0x1c, 0xcb, 0xce, 0xc1, 0xf3, 0xd8, 0xed, 0x36, + 0xbf, 0x4c, 0xba, 0x2e, 0xf0, 0x6c, 0xe8, 0xab, + 0x5b, 0x0d, 0xe7, 0xa2, 0xcd, 0xe4, 0xdf, 0xe2, + 0x95, 0x52, 0xd0, 0x9b, 0xaf, 0x3f, 0x95, 0xf3, + 0xd5, 0xb6, 0xf3, 0xd1, 0x66, 0xf2, 0x6f, 0xf1, + 0x4a, 0xa9, 0x68, 0x4d, 0xd7, 0x9f, 0xca, 0xf9, + 0xeb, 0xd5, 0xa7, 0x62, 0xae, 0xf3, 0x86, 0xbe, + 0x35, 0xaf, 0x39, 0x6b, 0x44, 0x45, 0x9b, 0x61, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x08, 0xa8, 0xa1, 0xdc, + 0x56, 0x8c, 0xd8, 0x9b, 0x79, 0x1e, 0x5c, 0xc2, + 0x63, 0xe2, 0xd8, 0xe0, 0x37, 0x11, 0x55, 0xbc, + 0x88, 0x22, 0x2e, 0x31, 0x77, 0x0c, 0x6f, 0xf0, + 0xdf, 0xc6, 0xc6, 0xed, 0x00, 0x9d, 0xa2, 0x8a, + 0x12, 0xfb, 0x03, 0x61, 0x76, 0xee, 0x29, 0xed, + 0xab, 0x34, 0x8e, 0xa7, 0x13, 0x41, 0xa9, 0xf7, + 0xbb, 0x6a, 0xe4, 0x89, 0x13, 0x31, 0x98, 0xc8, + 0xa2, 0xc7, 0xa6, 0xb4, 0xec, 0x57, 0x3c, 0x62, + 0xdc, 0xba, 0x48, 0xdc, 0x08, 0x15, 0x3c, 0x21, + 0xc3, 0x90, 0xf5, 0x56, 0xf0, 0xc5, 0xda, 0x16, + 0x50, 0x59, 0x31, 0xcd, 0xda, 0xda, 0x70, 0x82, + 0x55, 0xaf, 0x85, 0xbd, 0x41, 0xd8, 0x5e, 0xd0, + 0x75, 0x14, 0xf9, 0x52, 0x64, 0x53, 0x6d, 0xf4, + 0xbe, 0x2e, 0x38, 0xda, 0xf6, 0xd8, 0xf1, 0xca, + 0xf7, 0x1a, 0x30, 0x83, 0x41, 0xd4, 0xd8, 0xa7, + 0x60, 0xc6, 0xcc, 0xdb, 0x76, 0x46, 0x1a, 0xd8, + 0x43, 0x05, 0x03, 0x47, 0x27, 0x58, 0x29, 0x54, + 0x49, 0x99, 0x91, 0x13, 0x1e, 0x1d, 0xfc, 0x75, + 0x7b, 0xa8, 0x06, 0xda, 0x0e, 0x53, 0xca, 0xa4, + 0xa2, 0xb7, 0x8a, 0x11, 0x46, 0x36, 0x8b, 0x22, + 0x28, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x11, 0xda, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, 0xe7, + 0x35, 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, 0xbf, + 0xb4, 0xd5, 0xb1, 0xa8, 0xfd, 0x47, 0x79, 0xe4, + 0xfe, 0x73, 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, + 0xbb, 0xfb, 0x4d, 0x57, 0x8e, 0x1c, 0xe9, 0x63, + 0x3c, 0xc5, 0x3b, 0x93, 0xad, 0x62, 0x44, 0x45, + 0x46, 0xc2, 0x22, 0x20, 0x22, 0x22, 0x02, 0xd5, + 0xc8, 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, 0x56, + 0xd2, 0xd5, 0xc8, 0x7a, 0x15, 0xcf, 0x92, 0x7f, + 0x8a, 0x54, 0xd3, 0x9e, 0x15, 0xb9, 0xb1, 0x56, + 0x89, 0xd4, 0x82, 0xd2, 0x7e, 0x8f, 0x71, 0xe1, + 0xb7, 0xc5, 0x53, 0xca, 0x07, 0x49, 0xfa, 0x3d, + 0xc7, 0x86, 0xdf, 0x15, 0x4f, 0x2d, 0x31, 0x1c, + 0x5a, 0xb4, 0xfd, 0xcc, 0x30, 0x3c, 0xb5, 0xbd, + 0x13, 0xac, 0x44, 0x45, 0x93, 0xa4, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x05, 0x1f, 0xa8, 0x3d, 0x53, + 0x3f, 0xc9, 0xf1, 0x82, 0x90, 0x51, 0xfa, 0x83, + 0xd5, 0x33, 0xfc, 0x9f, 0x18, 0x2b, 0xdb, 0xdb, + 0xa7, 0x4c, 0x32, 0xc4, 0xf0, 0x2e, 0xee, 0x57, + 0xa9, 0xee, 0x95, 0xf5, 0x43, 0x7c, 0x37, 0xf6, + 0xd4, 0xb3, 0xf7, 0x28, 0x9d, 0x2b, 0xea, 0x86, + 0xf8, 0x6f, 0xed, 0xa9, 0x67, 0xee, 0x53, 0x77, + 0x8b, 0x5e, 0xf4, 0xa3, 0x0d, 0xc0, 0xb7, 0xbb, + 0x0e, 0x73, 0x75, 0xfe, 0x4f, 0x1e, 0x55, 0x9f, + 0x62, 0x15, 0xfd, 0x50, 0x2e, 0xbf, 0xc9, 0xe3, + 0xca, 0xb3, 0xec, 0x42, 0xbf, 0xae, 0x5b, 0x39, + 0xeb, 0xdf, 0x97, 0xb1, 0xf1, 0x4c, 0xd8, 0x3f, + 0xe3, 0x5b, 0x11, 0x11, 0x6c, 0xf3, 0x44, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x41, 0xbc, 0x22, 0x0d, + 0xe1, 0x05, 0x03, 0x46, 0xff, 0x00, 0x7c, 0x5f, + 0x73, 0x5c, 0x7d, 0xa0, 0x5d, 0x21, 0x73, 0x7d, + 0x1b, 0xfd, 0xf1, 0x7d, 0xcd, 0x71, 0xf6, 0x81, + 0x74, 0x85, 0x8e, 0x1f, 0x63, 0xce, 0x97, 0xa7, + 0xf1, 0x9e, 0x66, 0x9f, 0x55, 0x6f, 0x52, 0x2f, + 0x37, 0xf5, 0x31, 0xf8, 0x7f, 0x01, 0x59, 0xad, + 0x3d, 0x1a, 0x2f, 0x04, 0x76, 0x96, 0x1c, 0xdf, + 0xd4, 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, 0xf4, + 0x68, 0xbc, 0x11, 0xda, 0x5c, 0x56, 0x7f, 0xb3, + 0xc4, 0x7a, 0xaa, 0x1c, 0x75, 0x72, 0xf6, 0xf7, + 0xe5, 0x95, 0x11, 0x17, 0xa6, 0xc0, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0x19, 0x96, + 0xfa, 0xe8, 0x79, 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, + 0x1c, 0xca, 0x13, 0x2d, 0xf5, 0xd0, 0xf3, 0x1e, + 0xda, 0x9b, 0x6f, 0x7a, 0x39, 0x97, 0x9d, 0x83, + 0xe7, 0xb1, 0xda, 0x6d, 0x7e, 0x99, 0x74, 0x5d, + 0xe0, 0xd9, 0xd1, 0x56, 0xb6, 0x1b, 0xcf, 0x45, + 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, + 0x5e, 0x7f, 0x2b, 0xe7, 0xab, 0x6d, 0xe7, 0xa2, + 0xcd, 0xe4, 0xdf, 0xe2, 0x95, 0x52, 0xd0, 0x9b, + 0xaf, 0x3f, 0x95, 0xf3, 0xd7, 0xab, 0x4e, 0xc5, + 0x5d, 0xe7, 0x0d, 0x7c, 0x6b, 0x5e, 0x72, 0xd6, + 0x88, 0x8b, 0x36, 0xc2, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x08, 0xed, 0x47, 0xea, 0x3b, + 0xcf, 0x27, 0xf3, 0x9a, 0xb5, 0xf4, 0x37, 0xa9, + 0x9d, 0xe5, 0xdf, 0xda, 0x6a, 0xd8, 0xd4, 0x7e, + 0xa3, 0xbc, 0xf2, 0x7f, 0x39, 0xab, 0x5f, 0x43, + 0x7a, 0x99, 0xde, 0x5d, 0xfd, 0xa6, 0xab, 0xc7, + 0x0e, 0x74, 0xb1, 0x9e, 0x62, 0x9d, 0xc9, 0xd6, + 0xb1, 0x22, 0x22, 0xa3, 0x61, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x6a, 0xe4, 0x3d, 0x0a, 0xe7, 0xc9, + 0x3f, 0xc5, 0x2b, 0x69, 0x6a, 0xe4, 0x3d, 0x0a, + 0xe7, 0xc9, 0x3f, 0xc5, 0x2a, 0x69, 0xcf, 0x0a, + 0xdc, 0xd8, 0xab, 0x44, 0xea, 0x41, 0x69, 0x3f, + 0x47, 0xb8, 0xf0, 0xdb, 0xe2, 0xa9, 0xe5, 0x03, + 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, 0x6f, 0x8a, 0xa7, + 0x96, 0x98, 0x8e, 0x2d, 0x5a, 0x7e, 0xe6, 0x18, + 0x1e, 0x5a, 0xde, 0x89, 0xd6, 0x22, 0x22, 0xc9, + 0xd2, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x8f, + 0xd4, 0x1e, 0xa9, 0x9f, 0xe4, 0xf8, 0xc1, 0x48, + 0x28, 0xfd, 0x41, 0xea, 0x99, 0xfe, 0x4f, 0x8c, + 0x15, 0xed, 0xed, 0xd3, 0xa6, 0x19, 0x62, 0x78, + 0x17, 0x77, 0x2b, 0xd4, 0xf7, 0x4a, 0xfa, 0xa1, + 0xbe, 0x1b, 0xfb, 0x6a, 0x59, 0xfb, 0x94, 0x4e, + 0x95, 0xf5, 0x43, 0x7c, 0x37, 0xf6, 0xd4, 0xb3, + 0xf7, 0x29, 0xbb, 0xc5, 0xaf, 0x7a, 0x51, 0x86, + 0xe0, 0x5b, 0xdd, 0x87, 0x39, 0xba, 0xff, 0x00, + 0x27, 0x8f, 0x2a, 0xcf, 0xb1, 0x0a, 0xfe, 0xa8, + 0x17, 0x5f, 0xe4, 0xf1, 0xe5, 0x59, 0xf6, 0x21, + 0x5f, 0xd7, 0x2d, 0x9c, 0xf5, 0xef, 0xcb, 0xd8, + 0xf8, 0xa6, 0x6c, 0x1f, 0xf1, 0xad, 0x88, 0x88, + 0xb6, 0x79, 0xa2, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x20, 0xde, 0x11, 0x06, 0xf0, 0x82, 0x81, 0xa3, + 0x7f, 0xbe, 0x2f, 0xb9, 0xae, 0x3e, 0xd0, 0x2e, + 0x90, 0xb9, 0xbe, 0x8d, 0xfe, 0xf8, 0xbe, 0xe6, + 0xb8, 0xfb, 0x40, 0xba, 0x42, 0xc7, 0x0f, 0xb1, + 0xe7, 0x4b, 0xd3, 0xf8, 0xcf, 0x33, 0x4f, 0xaa, + 0xb7, 0xa9, 0x17, 0x9b, 0xfa, 0x98, 0xfc, 0x3f, + 0x80, 0xac, 0xd6, 0x9e, 0x8d, 0x17, 0x82, 0x3b, + 0x4b, 0x0e, 0x6f, 0xea, 0x63, 0xf0, 0xfe, 0x02, + 0xb3, 0x5a, 0x7a, 0x34, 0x5e, 0x08, 0xed, 0x2e, + 0x2b, 0x3f, 0xd9, 0xe2, 0x3d, 0x55, 0x0e, 0x3a, + 0xb9, 0x7b, 0x7b, 0xf2, 0xca, 0x88, 0x8b, 0xd3, + 0x60, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x8c, 0xcb, 0x7d, 0x74, 0x3c, 0xc7, 0xb6, + 0xa6, 0xdb, 0xde, 0x8e, 0x65, 0x09, 0x96, 0xfa, + 0xe8, 0x79, 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, 0x1c, + 0xcb, 0xce, 0xc1, 0xf3, 0xd8, 0xed, 0x36, 0xbf, + 0x4c, 0xba, 0x2e, 0xf0, 0x6c, 0xe8, 0xab, 0x5b, + 0x0d, 0xe7, 0xa2, 0xcd, 0xe4, 0xdf, 0xe2, 0x95, + 0x52, 0xd0, 0x9b, 0xaf, 0x3f, 0x95, 0xf3, 0xd5, + 0xb6, 0xf3, 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, + 0xa9, 0x68, 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xeb, + 0xd5, 0xa7, 0x62, 0xae, 0xf3, 0x86, 0xbe, 0x35, + 0xaf, 0x39, 0x6b, 0x44, 0x45, 0x9b, 0x61, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x04, 0x76, + 0xa3, 0xf5, 0x1d, 0xe7, 0x93, 0xf9, 0xcd, 0x5a, + 0xfa, 0x1b, 0xd4, 0xce, 0xf2, 0xef, 0xed, 0x35, + 0x6c, 0x6a, 0x3f, 0x51, 0xde, 0x79, 0x3f, 0x9c, + 0xd5, 0xaf, 0xa1, 0xbd, 0x4c, 0xef, 0x2e, 0xfe, + 0xd3, 0x55, 0xe3, 0x87, 0x3a, 0x58, 0xcf, 0x31, + 0x4e, 0xe4, 0xeb, 0x58, 0x91, 0x11, 0x51, 0xb0, + 0x88, 0x88, 0x08, 0x88, 0x80, 0xb5, 0x72, 0x1e, + 0x85, 0x73, 0xe4, 0x9f, 0xe2, 0x95, 0xb4, 0xb5, + 0x72, 0x1e, 0x85, 0x73, 0xe4, 0x9f, 0xe2, 0x95, + 0x34, 0xe7, 0x85, 0x6e, 0x6c, 0x55, 0xa2, 0x75, + 0x20, 0xb4, 0x9f, 0xa3, 0xdc, 0x78, 0x6d, 0xf1, + 0x54, 0xf2, 0x81, 0xd2, 0x7e, 0x8f, 0x71, 0xe1, + 0xb7, 0xc5, 0x53, 0xcb, 0x4c, 0x47, 0x16, 0xad, + 0x3f, 0x73, 0x0c, 0x0f, 0x2d, 0x6f, 0x44, 0xeb, + 0x11, 0x11, 0x64, 0xe9, 0x11, 0x11, 0x01, 0x17, + 0x8e, 0x73, 0x5a, 0xd2, 0xe7, 0x1a, 0x35, 0xa0, + 0x97, 0x13, 0xc8, 0x06, 0xd2, 0x54, 0x67, 0xe6, + 0x9d, 0x37, 0x4f, 0x59, 0xdb, 0x7f, 0xc8, 0x10, + 0x4a, 0x22, 0xf1, 0xae, 0x6b, 0xda, 0x1c, 0xd2, + 0x1c, 0xd7, 0x00, 0x5a, 0x46, 0xe2, 0x0e, 0xe2, + 0xb4, 0xae, 0xf3, 0x98, 0x6b, 0x29, 0x8d, 0xbd, + 0xe5, 0xec, 0x36, 0xf3, 0x00, 0x09, 0x8e, 0x47, + 0x86, 0xb8, 0x03, 0xb8, 0xd1, 0x06, 0xf2, 0x2d, + 0x7b, 0x2c, 0x85, 0x85, 0xfb, 0x1d, 0x25, 0x8d, + 0xc4, 0x77, 0x31, 0xb0, 0xf0, 0xb9, 0xd1, 0xbb, + 0x88, 0x03, 0xbe, 0x86, 0x8b, 0xdb, 0xcb, 0xeb, + 0x2b, 0x18, 0xba, 0x6b, 0xc9, 0xe3, 0xb7, 0x8b, + 0x77, 0x1c, 0x8e, 0x0d, 0x15, 0xeb, 0x57, 0x7a, + 0x0c, 0xe8, 0xa1, 0x99, 0xac, 0xb4, 0xbb, 0xdf, + 0xc0, 0x32, 0x50, 0xd7, 0x75, 0x4f, 0x10, 0x1d, + 0x92, 0xda, 0x29, 0x68, 0xa6, 0x86, 0x78, 0xdb, + 0x2c, 0x2f, 0x6c, 0xb1, 0x3f, 0x6b, 0x5e, 0xc2, + 0x1c, 0xd2, 0x3a, 0xc4, 0x20, 0xfb, 0x45, 0xab, + 0x7b, 0x95, 0xc6, 0x63, 0xcb, 0x05, 0xf5, 0xd4, + 0x56, 0xc6, 0x4a, 0x96, 0x09, 0x5c, 0x1b, 0xc5, + 0x4d, 0xf4, 0xaa, 0xd6, 0xfc, 0xd1, 0xa6, 0xff, + 0x00, 0xa9, 0xdb, 0x7f, 0xc8, 0x10, 0x49, 0xa2, + 0xd5, 0xb4, 0xca, 0x63, 0x6f, 0x49, 0x6d, 0x9d, + 0xd4, 0x37, 0x0e, 0x1b, 0x78, 0x63, 0x7b, 0x5c, + 0xee, 0xc0, 0x35, 0x5b, 0x48, 0x08, 0x8b, 0x46, + 0xd7, 0x39, 0x86, 0xbc, 0xb9, 0x36, 0xb6, 0x97, + 0xb0, 0xcf, 0x70, 0x2a, 0x4c, 0x4c, 0x75, 0x5d, + 0xdc, 0xf7, 0xdd, 0x84, 0x1b, 0xc8, 0x8a, 0x3a, + 0x4d, 0x47, 0xa7, 0xe2, 0x97, 0xa1, 0x93, 0x23, + 0x6c, 0xd9, 0x2b, 0x42, 0xde, 0x91, 0xbb, 0xfa, + 0x9d, 0x44, 0x12, 0x28, 0xbc, 0x63, 0xd8, 0xf6, + 0x07, 0xb1, 0xc1, 0xec, 0x70, 0xab, 0x5c, 0xd3, + 0x50, 0x47, 0x54, 0x10, 0x8f, 0x7b, 0x58, 0xc2, + 0xf7, 0xb8, 0x31, 0xad, 0x15, 0x73, 0x9c, 0x40, + 0x00, 0x75, 0x49, 0x28, 0x3d, 0x58, 0xee, 0x6e, + 0x22, 0xb5, 0xb7, 0x96, 0xe6, 0x73, 0xc3, 0x14, + 0x2c, 0x32, 0x48, 0xea, 0x56, 0x8d, 0x68, 0xa9, + 0x34, 0x0b, 0x4e, 0x2d, 0x45, 0x81, 0x9a, 0x61, + 0x04, 0x59, 0x0b, 0x77, 0xca, 0x4d, 0x03, 0x04, + 0x8d, 0xa9, 0x3d, 0x6e, 0x45, 0xbe, 0xe6, 0xb5, + 0xcd, 0x2d, 0x70, 0x05, 0xa7, 0x61, 0x69, 0x15, + 0x04, 0x75, 0xc2, 0x0a, 0xe8, 0xf6, 0x83, 0xa5, + 0x08, 0xa8, 0xbb, 0x75, 0x3c, 0x93, 0xfe, 0x8a, + 0xda, 0x8b, 0x58, 0x69, 0xf9, 0x71, 0xf3, 0x64, + 0x99, 0x70, 0x4d, 0xad, 0xbb, 0xdb, 0x1c, 0xaf, + 0xe0, 0x75, 0x43, 0x9f, 0xde, 0x8e, 0x1a, 0x55, + 0x41, 0x6a, 0xcb, 0x6b, 0x66, 0x6a, 0xcd, 0x3a, + 0xc6, 0x44, 0xc6, 0xb1, 0xf2, 0x77, 0x6d, 0x0d, + 0x00, 0x3b, 0xf8, 0x8d, 0xde, 0x00, 0xda, 0xb7, + 0xbd, 0xa0, 0x43, 0x0c, 0x3a, 0x4e, 0xe4, 0x43, + 0x1b, 0x23, 0x06, 0x58, 0x49, 0x0c, 0x68, 0x6d, + 0x7b, 0xbe, 0xb2, 0x09, 0xcc, 0x6e, 0x63, 0x1f, + 0x94, 0xb3, 0x75, 0xed, 0x94, 0x9c, 0x76, 0xed, + 0x2e, 0x6b, 0x9e, 0x41, 0x6d, 0x0b, 0x45, 0x5d, + 0x50, 0xea, 0x72, 0x2d, 0x6c, 0x4e, 0xa7, 0xc3, + 0x66, 0x67, 0x7d, 0xbe, 0x3e, 0x63, 0x2c, 0xb1, + 0xb7, 0x8d, 0xc0, 0xb1, 0xcd, 0xee, 0x6b, 0x4a, + 0xd5, 0xc3, 0xae, 0xa8, 0xf6, 0x59, 0x03, 0x81, + 0xc6, 0x6a, 0x0c, 0x77, 0x17, 0x09, 0x92, 0x08, + 0xa6, 0xb5, 0xff, 0x00, 0xfc, 0x86, 0xb5, 0x86, + 0x9e, 0xe3, 0xc2, 0xdc, 0xd0, 0x96, 0x27, 0x1f, + 0xa9, 0xae, 0xed, 0x0e, 0xc7, 0x32, 0xca, 0x22, + 0xff, 0x00, 0x09, 0xe2, 0x27, 0xbb, 0xdf, 0x72, + 0x0e, 0x82, 0x88, 0x88, 0x08, 0x88, 0x80, 0xa3, + 0xf5, 0x07, 0xaa, 0x67, 0xf9, 0x3e, 0x30, 0x52, + 0x0a, 0x3f, 0x50, 0x7a, 0xa6, 0x7f, 0x93, 0xe3, + 0x05, 0x7b, 0x7b, 0x74, 0xe9, 0x86, 0x58, 0x9e, + 0x05, 0xdd, 0xca, 0xf5, 0x3d, 0xd2, 0xbe, 0xa8, + 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x13, + 0xa5, 0x7d, 0x50, 0xdf, 0x0d, 0xfd, 0xb5, 0x2c, + 0xfd, 0xca, 0x6e, 0xf1, 0x6b, 0xde, 0x94, 0x61, + 0xb8, 0x16, 0xf7, 0x61, 0xce, 0x6e, 0xbf, 0xc9, + 0xe3, 0xca, 0xb3, 0xec, 0x42, 0xbf, 0xaa, 0x05, + 0xd7, 0xf9, 0x3c, 0x79, 0x56, 0x7d, 0x88, 0x57, + 0xf5, 0xcb, 0x67, 0x3d, 0x7b, 0xf2, 0xf6, 0x3e, + 0x29, 0x9b, 0x07, 0xfc, 0x6b, 0x62, 0x22, 0x2d, + 0x9e, 0x68, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0xb4, 0x72, 0x19, 0xdc, 0x3e, 0x35, + 0xdc, 0x17, 0xf7, 0x91, 0x40, 0xff, 0x00, 0xd0, + 0x73, 0xbb, 0xaf, 0xd9, 0x6d, 0x4a, 0xc7, 0x65, + 0xa9, 0x30, 0x37, 0xf2, 0x08, 0xad, 0x2f, 0xa1, + 0x96, 0x53, 0xba, 0x3a, 0xf0, 0xb8, 0xf3, 0x07, + 0x81, 0x54, 0x12, 0x48, 0x8b, 0x0d, 0xd5, 0xed, + 0x9d, 0x94, 0x7d, 0x2d, 0xe4, 0xf1, 0xdb, 0xc7, + 0xc8, 0xe9, 0x1c, 0x1a, 0x3d, 0xca, 0xa0, 0xcc, + 0x8b, 0x46, 0xd3, 0x39, 0x86, 0xbe, 0x93, 0xa2, + 0xb3, 0xbe, 0x82, 0x79, 0x0e, 0xe6, 0x31, 0xe0, + 0xb8, 0xf3, 0x05, 0xbc, 0x80, 0x8b, 0x56, 0xf7, + 0x2b, 0x8c, 0xc7, 0x80, 0x6f, 0xae, 0xa2, 0xb6, + 0xe2, 0xef, 0x44, 0x8f, 0x0d, 0x27, 0x98, 0x6f, + 0x5f, 0x76, 0x77, 0xf6, 0x37, 0xf1, 0x99, 0x6c, + 0xae, 0x23, 0xb9, 0x60, 0xde, 0xe8, 0x9c, 0x1d, + 0x4e, 0x7a, 0x6e, 0x41, 0x9d, 0x11, 0x68, 0xdd, + 0xe7, 0x70, 0xb6, 0x52, 0xf4, 0x17, 0x77, 0xd0, + 0x43, 0x30, 0xdf, 0x1b, 0x9e, 0x38, 0x87, 0x38, + 0xe4, 0x41, 0xbc, 0x8b, 0xe2, 0x19, 0xe1, 0x9e, + 0x36, 0xcd, 0x04, 0x8d, 0x96, 0x27, 0xf7, 0xb2, + 0x30, 0x87, 0x34, 0xf3, 0x16, 0xaf, 0xb2, 0x68, + 0x2b, 0xc8, 0x37, 0xa0, 0x2f, 0x1c, 0x43, 0x41, + 0x71, 0xdc, 0x05, 0x4f, 0xb8, 0xa3, 0xce, 0xa3, + 0xc0, 0x09, 0xba, 0x03, 0x91, 0xb6, 0xe9, 0x6b, + 0x4e, 0x1e, 0x91, 0xbb, 0xfa, 0x95, 0xdc, 0xa4, + 0x36, 0x11, 0x51, 0xb4, 0x1f, 0x74, 0x10, 0x50, + 0x57, 0x7f, 0xec, 0x1d, 0x29, 0xf7, 0xb7, 0x6c, + 0xff, 0x00, 0xda, 0x7f, 0xfa, 0x2d, 0xab, 0x4d, + 0x61, 0xa7, 0xef, 0x20, 0xba, 0xb8, 0xb7, 0xb8, + 0x2f, 0x8e, 0xc9, 0x82, 0x5b, 0x83, 0xc0, 0xe1, + 0xc2, 0xc2, 0x68, 0x0e, 0xd1, 0xb5, 0x40, 0xfb, + 0x46, 0xb6, 0xb6, 0x8a, 0x0c, 0x5f, 0x45, 0x0c, + 0x71, 0xf1, 0x5d, 0x51, 0xdc, 0x0d, 0x0d, 0xa8, + 0xa0, 0xdf, 0x40, 0xa7, 0x75, 0x55, 0xb5, 0xbc, + 0x3a, 0x67, 0x28, 0x61, 0x89, 0x91, 0x93, 0x6e, + 0x41, 0x2c, 0x68, 0x6d, 0x76, 0x8d, 0xf4, 0x08, + 0x36, 0xf1, 0x19, 0xdc, 0x66, 0x69, 0x92, 0x3f, + 0x1d, 0x29, 0x94, 0x42, 0xe0, 0xd9, 0x2a, 0xd2, + 0xd2, 0x0b, 0x85, 0x47, 0x7d, 0x45, 0x82, 0xcf, + 0x54, 0xe1, 0x2f, 0xb2, 0x27, 0x1b, 0x6b, 0x39, + 0x92, 0xed, 0xa5, 0xe0, 0xb3, 0x81, 0xc0, 0x56, + 0x3a, 0xf1, 0x77, 0x44, 0x53, 0x91, 0x52, 0x34, + 0xc5, 0xf8, 0xd3, 0xf2, 0xcd, 0x23, 0xcd, 0x22, + 0xbe, 0xc5, 0xf9, 0xdc, 0x75, 0xe5, 0x96, 0x3e, + 0x2a, 0x01, 0xee, 0x82, 0xbc, 0xd1, 0xb6, 0x6e, + 0xb5, 0xd4, 0xf8, 0xb7, 0x3f, 0xeb, 0x2e, 0xac, + 0xe4, 0xb9, 0x7d, 0x7f, 0xf7, 0x3a, 0x4a, 0x7e, + 0xe8, 0x08, 0x3a, 0x72, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x20, 0xde, 0x11, 0x06, 0xf0, + 0x82, 0x81, 0xa3, 0x7f, 0xbe, 0x2f, 0xb9, 0xae, + 0x3e, 0xd0, 0x2e, 0x90, 0xb9, 0xbe, 0x8d, 0xfe, + 0xf8, 0xbe, 0xe6, 0xb8, 0xfb, 0x40, 0xba, 0x42, + 0xc7, 0x0f, 0xb1, 0xe7, 0x4b, 0xd3, 0xf8, 0xcf, + 0x33, 0x4f, 0xaa, 0xb7, 0xa9, 0x17, 0x9b, 0xfa, + 0x98, 0xfc, 0x3f, 0x80, 0xac, 0xd6, 0x9e, 0x8d, + 0x17, 0x82, 0x3b, 0x4b, 0x0e, 0x6f, 0xea, 0x63, + 0xf0, 0xfe, 0x02, 0xb3, 0x5a, 0x7a, 0x34, 0x5e, + 0x08, 0xed, 0x2e, 0x2b, 0x3f, 0xd9, 0xe2, 0x3d, + 0x55, 0x0e, 0x3a, 0xb9, 0x7b, 0x7b, 0xf2, 0xca, + 0x88, 0x8b, 0xd3, 0x60, 0x22, 0x22, 0x02, 0x2c, + 0x37, 0x57, 0x76, 0xb6, 0x70, 0x99, 0xee, 0xe5, + 0x64, 0x10, 0x82, 0x01, 0x92, 0x42, 0x1a, 0xda, + 0x9d, 0xc2, 0xa5, 0x79, 0x67, 0x7f, 0x63, 0x7c, + 0xc7, 0x49, 0x65, 0x71, 0x1d, 0xcb, 0x18, 0x78, + 0x5c, 0xe8, 0xdc, 0x1c, 0x01, 0xdf, 0x43, 0x44, + 0x19, 0xd1, 0x7c, 0x4d, 0x34, 0x50, 0x44, 0xf9, + 0xa7, 0x78, 0x8e, 0x28, 0xc7, 0x13, 0xde, 0xe3, + 0x46, 0xb4, 0x0e, 0x52, 0x56, 0x0b, 0x3c, 0xae, + 0x32, 0xf9, 0xce, 0x65, 0x95, 0xd4, 0x57, 0x2e, + 0x60, 0xab, 0xc4, 0x4e, 0x0e, 0x20, 0x1e, 0x53, + 0x44, 0x1b, 0x48, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x8b, + 0xe6, 0x49, 0x23, 0x8a, 0x37, 0x4b, 0x2b, 0x83, + 0x23, 0x60, 0x2e, 0x7b, 0xdd, 0xb0, 0x00, 0x36, + 0x92, 0x56, 0xbd, 0x9e, 0x57, 0x19, 0x7c, 0xe7, + 0x32, 0xca, 0xea, 0x2b, 0x97, 0x30, 0x71, 0x3d, + 0xb1, 0x3c, 0x38, 0x81, 0xba, 0xa6, 0x88, 0x36, + 0x91, 0x11, 0x01, 0x11, 0x10, 0x16, 0x86, 0x5b, + 0x3b, 0x8b, 0xc3, 0x32, 0x37, 0xe4, 0xa6, 0xe8, + 0x1b, 0x31, 0x2d, 0x8c, 0xf0, 0xb9, 0xd5, 0x2d, + 0x15, 0x3d, 0xe8, 0x2b, 0x7d, 0x63, 0x96, 0xda, + 0xde, 0xe3, 0x84, 0x4f, 0x13, 0x26, 0x0d, 0x35, + 0x68, 0x91, 0xa1, 0xd4, 0xfd, 0xa0, 0x82, 0x08, + 0xeb, 0xed, 0x28, 0x05, 0x4d, 0xed, 0x07, 0x93, + 0x93, 0xe8, 0xad, 0xab, 0xdd, 0x59, 0x80, 0xb0, + 0x74, 0x2d, 0xba, 0xba, 0xe8, 0xcd, 0xcc, 0x4d, + 0x9e, 0x2e, 0xe1, 0xe6, 0xb1, 0xbf, 0xbd, 0x76, + 0xc6, 0xf2, 0xaa, 0xf6, 0x8e, 0xb3, 0xb4, 0x97, + 0x50, 0xea, 0x16, 0x4b, 0x04, 0x72, 0x32, 0x39, + 0xa8, 0xc6, 0xb9, 0x8d, 0x70, 0x6f, 0x77, 0x20, + 0xee, 0x41, 0x1b, 0x16, 0x9e, 0xba, 0xc7, 0x8b, + 0xdd, 0x49, 0x0d, 0xa3, 0x05, 0x0f, 0xe1, 0xcf, + 0x74, 0x6d, 0x6e, 0xc0, 0x0c, 0x62, 0x57, 0xb4, + 0x01, 0xee, 0x51, 0x05, 0xe3, 0x25, 0x96, 0xc7, + 0xe2, 0xad, 0x45, 0xdd, 0xfc, 0xbd, 0x14, 0x0e, + 0x70, 0x63, 0x5d, 0x42, 0xea, 0xb9, 0xc0, 0x90, + 0x28, 0xd0, 0x4f, 0x22, 0xfb, 0xc7, 0xe4, 0x6c, + 0xf2, 0x56, 0x8d, 0xbc, 0xb2, 0x7f, 0x4b, 0x6e, + 0xf2, 0x43, 0x5f, 0x42, 0xda, 0x96, 0x9a, 0x1d, + 0x8e, 0xa1, 0xde, 0xb9, 0xe6, 0x4b, 0x20, 0x73, + 0xf8, 0xec, 0x15, 0x80, 0x77, 0x17, 0x47, 0x6b, + 0x35, 0xcd, 0xd6, 0xdd, 0xb5, 0x81, 0x8e, 0x60, + 0xaf, 0xfc, 0x7e, 0xfa, 0xb4, 0xfb, 0x3d, 0xa9, + 0xd2, 0x96, 0x84, 0xfe, 0x94, 0xbe, 0x39, 0x41, + 0x63, 0x44, 0x44, 0x04, 0x44, 0x41, 0x19, 0x96, + 0xfa, 0xe8, 0x79, 0x8f, 0x6d, 0x4d, 0xb7, 0xbd, + 0x1c, 0xca, 0x13, 0x2d, 0xf5, 0xd0, 0xf3, 0x1e, + 0xda, 0x9b, 0x6f, 0x7a, 0x39, 0x97, 0x9d, 0x83, + 0xe7, 0xb1, 0xda, 0x6d, 0x7e, 0x99, 0x74, 0x5d, + 0xe0, 0xd9, 0xd1, 0x56, 0xb6, 0x1b, 0xcf, 0x45, + 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, + 0x5e, 0x7f, 0x2b, 0xe7, 0xab, 0x6d, 0xe7, 0xa2, + 0xcd, 0xe4, 0xdf, 0xe2, 0x95, 0x52, 0xd0, 0x9b, + 0xaf, 0x3f, 0x95, 0xf3, 0xd7, 0xab, 0x4e, 0xc5, + 0x5d, 0xe7, 0x0d, 0x7c, 0x6b, 0x5e, 0x72, 0xd6, + 0x88, 0x8b, 0x36, 0xc2, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x2d, 0x5b, + 0xdc, 0xae, 0x33, 0x1e, 0x58, 0xdb, 0xeb, 0xa8, + 0xad, 0x8c, 0x80, 0x96, 0x09, 0x5c, 0x1b, 0xc4, + 0x06, 0xfa, 0x55, 0x6b, 0x7e, 0x68, 0xd3, 0x7f, + 0xd4, 0xed, 0xbf, 0xe4, 0x08, 0x24, 0xd1, 0x46, + 0x7e, 0x68, 0xd3, 0x7f, 0xd4, 0xed, 0xbf, 0xe4, + 0x0b, 0x3f, 0xe3, 0x38, 0x9f, 0x33, 0xf3, 0xff, + 0x00, 0x3c, 0x87, 0xcc, 0xc3, 0xb8, 0x0d, 0xc7, + 0x18, 0xe0, 0xe2, 0xdd, 0xc3, 0xc5, 0xd5, 0x41, + 0xb8, 0x8b, 0x05, 0x9d, 0xfd, 0x8d, 0xfc, 0x66, + 0x5b, 0x29, 0xe3, 0xb9, 0x8d, 0xa7, 0x85, 0xcf, + 0x8d, 0xdc, 0x40, 0x3b, 0x7d, 0x36, 0x2c, 0xe8, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x22, 0x72, 0xba, + 0xab, 0x07, 0x87, 0xb9, 0x16, 0xb9, 0x09, 0xcc, + 0x53, 0x39, 0x82, 0x40, 0xd0, 0xc7, 0x3b, 0xb9, + 0x24, 0x80, 0x6a, 0xd1, 0xd6, 0x5a, 0xb1, 0x6b, + 0xcd, 0x2f, 0x34, 0xcc, 0x85, 0x97, 0x4e, 0x32, + 0x48, 0xe0, 0xc6, 0x03, 0x1b, 0xc5, 0x5c, 0xe3, + 0x41, 0xc8, 0xa5, 0x72, 0x36, 0xb6, 0xd2, 0xda, + 0x5c, 0x3e, 0x48, 0x63, 0x7b, 0xc4, 0x32, 0x51, + 0xce, 0x68, 0x71, 0xd8, 0xd3, 0xca, 0x42, 0xad, + 0x7b, 0x35, 0xb6, 0xb6, 0x93, 0x4e, 0x09, 0x24, + 0x89, 0x8f, 0x90, 0x5c, 0x49, 0x47, 0xb9, 0xa0, + 0xbb, 0x60, 0x65, 0x36, 0x90, 0x82, 0x6c, 0xea, + 0x8c, 0x23, 0x72, 0xbf, 0x83, 0x99, 0xc8, 0xbe, + 0xe9, 0x3a, 0x2e, 0x8f, 0x81, 0xd4, 0xe3, 0x22, + 0xb4, 0xe2, 0xa5, 0x17, 0xde, 0x5f, 0x51, 0xe2, + 0x30, 0xae, 0x8d, 0x99, 0x19, 0x8c, 0x4e, 0x98, + 0x17, 0x46, 0x03, 0x5c, 0xea, 0x86, 0x9a, 0x13, + 0xdc, 0x8d, 0x8b, 0x9d, 0xe7, 0xe2, 0x91, 0xba, + 0x8b, 0x37, 0x92, 0x8a, 0xbd, 0x2e, 0x36, 0xe2, + 0x09, 0xc7, 0x31, 0x73, 0x5a, 0x7d, 0xfa, 0x2c, + 0x9a, 0xc6, 0xe1, 0x99, 0x9b, 0xfc, 0x85, 0xf4, + 0x67, 0x8a, 0xdf, 0x1d, 0x6b, 0x6e, 0xc8, 0xc8, + 0xdd, 0xc7, 0x33, 0x9a, 0xe3, 0xe3, 0x14, 0x1d, + 0x3e, 0x19, 0xa3, 0x9e, 0x18, 0xe7, 0x88, 0xd6, + 0x39, 0x5a, 0x1e, 0xc3, 0xba, 0xad, 0x70, 0xe2, + 0x1e, 0xf1, 0x5f, 0x6b, 0x57, 0x13, 0xea, 0xab, + 0x2f, 0xfc, 0x78, 0xbc, 0x46, 0xad, 0xa4, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x11, 0xda, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, + 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, + 0xbf, 0xb4, 0xd5, 0xb1, 0xa8, 0xfd, 0x47, 0x79, + 0xe4, 0xfe, 0x73, 0x56, 0xbe, 0x86, 0xf5, 0x33, + 0xbc, 0xbb, 0xfb, 0x4d, 0x57, 0x8e, 0x1c, 0xe9, + 0x63, 0x3c, 0xc5, 0x3b, 0x93, 0xad, 0x62, 0x44, + 0x45, 0x46, 0xc2, 0x22, 0x20, 0x22, 0x22, 0x02, + 0xd5, 0xc8, 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, + 0x56, 0xd2, 0xd5, 0xc8, 0x7a, 0x15, 0xcf, 0x92, + 0x7f, 0x8a, 0x54, 0xd3, 0x9e, 0x15, 0xb9, 0xb1, + 0x56, 0x89, 0xd4, 0x82, 0xd2, 0x7e, 0x8f, 0x71, + 0xe1, 0xb7, 0xc5, 0x53, 0xca, 0x07, 0x49, 0xfa, + 0x3d, 0xc7, 0x86, 0xdf, 0x15, 0x4f, 0x2d, 0x31, + 0x1c, 0x5a, 0xb4, 0xfd, 0xcc, 0x30, 0x3c, 0xb5, + 0xbd, 0x13, 0xac, 0x44, 0x45, 0x93, 0xa4, 0x44, + 0x44, 0x18, 0x6f, 0x7d, 0x0a, 0xe7, 0xc8, 0xc9, + 0xe2, 0x95, 0xc2, 0x59, 0x13, 0xdf, 0x13, 0xde, + 0xd1, 0x56, 0xc6, 0x01, 0x7f, 0x58, 0x38, 0xf0, + 0x8f, 0x7d, 0x77, 0x6b, 0xdf, 0x42, 0xb9, 0xf2, + 0x32, 0x78, 0xa5, 0x72, 0x3d, 0x2b, 0x63, 0xe7, + 0xf1, 0xe5, 0xad, 0x80, 0xab, 0x8d, 0x83, 0xde, + 0xcf, 0x0a, 0x37, 0xb2, 0x46, 0xf6, 0x90, 0x74, + 0x9d, 0x1b, 0x7d, 0xe7, 0xfa, 0x72, 0xc6, 0x52, + 0x6a, 0xf8, 0xd9, 0xd0, 0x3c, 0xf5, 0xe2, 0x3c, + 0x1d, 0xaa, 0x2e, 0x5f, 0xa8, 0xae, 0x9d, 0x93, + 0xce, 0xe4, 0x6e, 0xd9, 0xdd, 0x46, 0xd7, 0xba, + 0x87, 0xa9, 0x1b, 0x08, 0x89, 0xbf, 0x02, 0xb0, + 0x68, 0x8c, 0xe8, 0xb0, 0xd3, 0xf9, 0xa8, 0xdc, + 0x68, 0xeb, 0x68, 0xfc, 0xe6, 0x11, 0xd7, 0x78, + 0xe8, 0xb6, 0x7c, 0xae, 0x15, 0x0d, 0x8b, 0xb2, + 0xae, 0x97, 0xcd, 0x64, 0x1f, 0xb4, 0x8e, 0x82, + 0x06, 0x3b, 0xae, 0x64, 0x6c, 0x8f, 0xed, 0x04, + 0x16, 0xef, 0x65, 0x82, 0xb8, 0x9b, 0xc1, 0xff, + 0x00, 0xf7, 0x23, 0xc4, 0x6a, 0xab, 0xe4, 0xa4, + 0x9f, 0x52, 0xea, 0xf3, 0x6b, 0x75, 0x38, 0x82, + 0x37, 0xce, 0xeb, 0x78, 0x4b, 0xfb, 0xd8, 0xd8, + 0xc2, 0x45, 0x00, 0x34, 0xda, 0x78, 0x7b, 0x2a, + 0xd1, 0xec, 0xb7, 0xd5, 0x17, 0xbf, 0xf9, 0x23, + 0xc4, 0x0b, 0x53, 0x56, 0xe8, 0x2b, 0xcb, 0x8b, + 0xd9, 0x72, 0x58, 0x70, 0x24, 0xe9, 0xc9, 0x7c, + 0xd6, 0xc4, 0x86, 0xb8, 0x3c, 0xef, 0x74, 0x64, + 0xd0, 0x1a, 0xf5, 0x10, 0x6c, 0x5d, 0xfb, 0x2d, + 0xb1, 0x16, 0xcf, 0xf3, 0x4b, 0xb9, 0x85, 0xc8, + 0x69, 0x2c, 0x32, 0x06, 0x96, 0x39, 0xc3, 0x90, + 0x86, 0x80, 0x45, 0x56, 0x87, 0xb3, 0xef, 0xc7, + 0x71, 0xf9, 0x53, 0x67, 0x3d, 0xad, 0xc3, 0x2c, + 0x2e, 0x5a, 0xee, 0x3e, 0x36, 0x38, 0x31, 0x92, + 0x34, 0x55, 0xae, 0x04, 0x8a, 0x0a, 0xd2, 0x8a, + 0x1d, 0x99, 0x9d, 0x67, 0x80, 0x22, 0x39, 0x24, + 0xb9, 0x81, 0x8d, 0xd8, 0x23, 0xb9, 0x69, 0x7c, + 0x7b, 0x3a, 0x9d, 0x20, 0x23, 0xb0, 0x55, 0xc3, + 0x49, 0xeb, 0xbf, 0xc6, 0x2e, 0x06, 0x3a, 0xfe, + 0x36, 0xc3, 0x78, 0xe0, 0x4c, 0x52, 0x32, 0xbc, + 0x12, 0x10, 0x2a, 0x5b, 0x43, 0xde, 0xba, 0x88, + 0x22, 0xfd, 0xab, 0x7d, 0x7e, 0x37, 0xc0, 0x97, + 0xb6, 0xc5, 0x8b, 0x09, 0xec, 0xee, 0xd7, 0x29, + 0x88, 0xb5, 0xc8, 0x3e, 0xfa, 0x48, 0x9f, 0x72, + 0xce, 0x33, 0x18, 0x63, 0x48, 0x1b, 0x48, 0xde, + 0x4f, 0x59, 0x65, 0xf6, 0xad, 0xf5, 0xf8, 0xdf, + 0x02, 0x5e, 0xdb, 0x56, 0x8e, 0x23, 0xda, 0x2c, + 0xd8, 0xbc, 0x65, 0xbe, 0x3d, 0xb6, 0x51, 0xcb, + 0xe6, 0xcc, 0xe0, 0x0f, 0x74, 0x84, 0x13, 0xb4, + 0x9d, 0xa3, 0x87, 0xae, 0x82, 0x37, 0x51, 0x69, + 0xfb, 0xcd, 0x2d, 0x91, 0x80, 0xc5, 0x70, 0x5f, + 0xc6, 0x3a, 0x4b, 0x6b, 0x96, 0x77, 0x0f, 0x05, + 0xa7, 0x68, 0x23, 0x6d, 0x08, 0x5d, 0x4f, 0x01, + 0x90, 0x7e, 0x4f, 0x0d, 0x67, 0x7d, 0x20, 0x02, + 0x49, 0xe3, 0x06, 0x4a, 0x6e, 0xe2, 0x1d, 0xcb, + 0xa9, 0xee, 0x85, 0xcb, 0x32, 0x59, 0x3c, 0xce, + 0xb0, 0xc9, 0xc4, 0xd6, 0x40, 0x1d, 0x23, 0x47, + 0x47, 0x0c, 0x10, 0x82, 0x5a, 0xc0, 0x4d, 0x5c, + 0x5c, 0xe3, 0xef, 0x92, 0xba, 0x4f, 0x4b, 0x6b, + 0xa4, 0xf4, 0xcc, 0x42, 0xe1, 0xdc, 0x6d, 0xb2, + 0x88, 0x30, 0x01, 0xff, 0x00, 0xa9, 0x29, 0xf8, + 0xad, 0xe7, 0x71, 0xec, 0x20, 0x8c, 0xd7, 0xda, + 0x90, 0xe3, 0x6c, 0xff, 0x00, 0x0c, 0xb4, 0x77, + 0xff, 0x00, 0x3a, 0xf1, 0xb4, 0x71, 0x6e, 0xf6, + 0x44, 0x76, 0x13, 0xce, 0xed, 0xc1, 0x55, 0xbd, + 0x9b, 0x8a, 0x6a, 0x76, 0x83, 0xc9, 0x04, 0xbb, + 0x3b, 0x0a, 0x4b, 0x46, 0xe2, 0x6e, 0xb3, 0xd9, + 0x69, 0xb5, 0x36, 0x50, 0x74, 0x8c, 0x63, 0xc9, + 0x84, 0x11, 0xdc, 0xba, 0x50, 0x36, 0x53, 0xf5, + 0x63, 0x1e, 0xfa, 0x8f, 0xf6, 0x79, 0x5f, 0xcd, + 0x8e, 0xf2, 0x53, 0xf6, 0xc2, 0x0b, 0x6e, 0xbd, + 0x6e, 0x76, 0x6c, 0x63, 0x2d, 0x31, 0x10, 0x4b, + 0x2b, 0x66, 0x71, 0x37, 0x4e, 0x87, 0xbe, 0x0c, + 0x6e, 0xe6, 0x6f, 0xaf, 0x74, 0x77, 0xd1, 0x57, + 0xed, 0x3d, 0x9b, 0x35, 0xf8, 0x3f, 0x3c, 0xb9, + 0xb9, 0x7c, 0x17, 0xee, 0x88, 0xca, 0x21, 0xe1, + 0x01, 0x8c, 0xa0, 0xe2, 0x0c, 0x7d, 0x76, 0xee, + 0xde, 0xba, 0x32, 0xa5, 0xeb, 0x86, 0xea, 0xdb, + 0x89, 0xa4, 0x83, 0x17, 0x1c, 0xae, 0xc5, 0xf4, + 0x03, 0xa7, 0xe8, 0xb8, 0x6a, 0xf2, 0x6a, 0x5e, + 0x3f, 0x4c, 0xec, 0xde, 0x02, 0x08, 0xef, 0x65, + 0xf9, 0x4b, 0x9f, 0x3c, 0x9f, 0x16, 0xe7, 0x17, + 0x5b, 0x18, 0x8c, 0xec, 0x69, 0x35, 0x0c, 0x73, + 0x4b, 0x5a, 0x78, 0x7a, 0x81, 0xdc, 0x49, 0xed, + 0x37, 0x33, 0x33, 0xae, 0xe2, 0xc3, 0x44, 0xe2, + 0x21, 0x63, 0x04, 0xb3, 0xb4, 0x1e, 0xfd, 0xef, + 0xef, 0x1a, 0x7a, 0xc0, 0x2d, 0x8f, 0x66, 0x97, + 0x58, 0x46, 0x74, 0xb6, 0xb1, 0x87, 0xb3, 0x2b, + 0x2b, 0x6a, 0xf7, 0x49, 0x4a, 0x3d, 0x8d, 0xf8, + 0xb1, 0x53, 0x75, 0x37, 0x90, 0x76, 0xa8, 0x1d, + 0x68, 0x78, 0xf5, 0x9d, 0xc0, 0x76, 0xe1, 0x24, + 0x0d, 0xf7, 0x38, 0x63, 0x41, 0xbd, 0x9a, 0xf6, + 0x7e, 0x31, 0xba, 0x7f, 0xf1, 0x26, 0xdc, 0x3a, + 0x4b, 0x98, 0x5a, 0xd7, 0xdc, 0x42, 0x40, 0x0c, + 0xa3, 0xa8, 0x1c, 0x19, 0xcb, 0xdc, 0xd7, 0x95, + 0x58, 0x7d, 0x9d, 0x66, 0xa6, 0xc8, 0x62, 0xa4, + 0xb4, 0xb9, 0x79, 0x92, 0x6b, 0x17, 0x06, 0xb5, + 0xce, 0xda, 0x4c, 0x6f, 0x07, 0x86, 0xbc, 0xd4, + 0x21, 0x4c, 0x6a, 0xa0, 0x0e, 0x9b, 0xc9, 0x8e, + 0x4f, 0x36, 0x93, 0xde, 0x0a, 0x9b, 0xec, 0xa9, + 0xc7, 0xcf, 0xb2, 0x0d, 0xe4, 0x30, 0xb0, 0x9e, + 0x70, 0xff, 0x00, 0xfe, 0xa8, 0x2c, 0x9a, 0x83, + 0x07, 0x90, 0xbf, 0xd4, 0x18, 0x6b, 0xfb, 0x66, + 0xb4, 0xdb, 0xd8, 0x3f, 0x8a, 0xe0, 0xb9, 0xc1, + 0xa4, 0x0e, 0x30, 0xed, 0x83, 0x97, 0x60, 0x5b, + 0x1a, 0xc3, 0x15, 0x79, 0x97, 0xc0, 0xcd, 0x63, + 0x64, 0x1a, 0xe9, 0xe4, 0x7c, 0x6e, 0x68, 0x7b, + 0x83, 0x45, 0x1a, 0xea, 0x9d, 0xa5, 0x4d, 0x22, + 0x0a, 0x46, 0x77, 0x45, 0x5f, 0x64, 0x72, 0x58, + 0xb9, 0xe2, 0x0c, 0xe8, 0x63, 0x86, 0x08, 0x6f, + 0xea, 0xe0, 0x0f, 0xf0, 0x88, 0x07, 0x84, 0x7c, + 0x6e, 0xe5, 0x4b, 0xd8, 0x61, 0x6f, 0xad, 0xf5, + 0x7e, 0x4b, 0x2d, 0x23, 0x5a, 0x2c, 0xee, 0xa2, + 0x6b, 0x21, 0x21, 0xc0, 0xba, 0xa0, 0x47, 0xbd, + 0xbc, 0x9d, 0xe9, 0x56, 0x04, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x51, 0xfa, 0x83, 0xd5, 0x33, + 0xfc, 0x9f, 0x18, 0x29, 0x05, 0x1f, 0xa8, 0x3d, + 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0xbd, 0xbd, 0xba, + 0x74, 0xc3, 0x2c, 0x4f, 0x02, 0xee, 0xe5, 0x7a, + 0x9e, 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, 0x6d, + 0x4b, 0x3f, 0x72, 0x89, 0xd2, 0xbe, 0xa8, 0x6f, + 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x37, 0x78, + 0xb5, 0xef, 0x4a, 0x30, 0xdc, 0x0b, 0x7b, 0xb0, + 0xe7, 0x37, 0x5f, 0xe4, 0xf1, 0xe5, 0x59, 0xf6, + 0x21, 0x5f, 0xd5, 0x02, 0xeb, 0xfc, 0x9e, 0x3c, + 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xe5, 0xb3, 0x9e, + 0xbd, 0xf9, 0x7b, 0x1f, 0x14, 0xcd, 0x83, 0xfe, + 0x35, 0xb1, 0x11, 0x16, 0xcf, 0x34, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x55, 0xcd, 0x6f, 0xa8, 0xa5, + 0xc2, 0x63, 0x1a, 0xdb, 0x53, 0xc3, 0x7b, 0x76, + 0x4b, 0x21, 0x76, 0xfe, 0x06, 0xb4, 0x77, 0x72, + 0x73, 0x8a, 0x80, 0x15, 0x8d, 0x73, 0x6f, 0x6a, + 0x4f, 0x71, 0xca, 0xd9, 0x33, 0xe2, 0xb6, 0xdc, + 0x90, 0x3a, 0xe5, 0xe6, 0xbd, 0xa4, 0x1a, 0xda, + 0x63, 0x44, 0xcf, 0x9f, 0x89, 0xd9, 0x3b, 0xeb, + 0x87, 0x43, 0x6f, 0x23, 0x88, 0x6b, 0x80, 0xe2, + 0x96, 0x52, 0x3b, 0xe7, 0x55, 0xdc, 0x95, 0xe5, + 0x5f, 0x5a, 0xa3, 0x41, 0x3f, 0x0f, 0x6b, 0xf8, + 0x85, 0x8c, 0xcf, 0xb9, 0x82, 0x32, 0x04, 0xac, + 0x78, 0xa4, 0x8d, 0xa9, 0xa0, 0x73, 0x4b, 0x77, + 0x8a, 0xab, 0xe6, 0x95, 0x63, 0x59, 0xa6, 0xb1, + 0x81, 0xbb, 0xbc, 0xd9, 0x87, 0xdd, 0x70, 0xa9, + 0xf7, 0xd4, 0xa2, 0x0a, 0xde, 0x85, 0xc8, 0xe5, + 0x2e, 0xf1, 0x26, 0x3c, 0xa4, 0x52, 0xb6, 0x4b, + 0x67, 0x06, 0xc5, 0x3c, 0xad, 0x70, 0x32, 0x46, + 0x46, 0xcd, 0xae, 0xef, 0x8b, 0x77, 0x2a, 0x61, + 0xb0, 0xcb, 0x6a, 0xbd, 0x50, 0x59, 0x7c, 0x25, + 0xb6, 0x8e, 0x47, 0x3d, 0xc1, 0xd2, 0x31, 0xc0, + 0x45, 0x0b, 0x37, 0x35, 0x81, 0xc0, 0x0a, 0xd3, + 0xdf, 0x5d, 0x5e, 0xb5, 0x5f, 0x32, 0xcd, 0x1c, + 0x51, 0x3e, 0x59, 0x9e, 0x23, 0x8a, 0x30, 0x5c, + 0xf7, 0xb8, 0xd1, 0xad, 0x03, 0x79, 0x25, 0x07, + 0x2e, 0xd5, 0xda, 0x36, 0x2d, 0x3d, 0x05, 0xbd, + 0xf5, 0x9d, 0xcb, 0xe5, 0x8d, 0xf2, 0x74, 0x6e, + 0x0f, 0xa0, 0x7b, 0x5f, 0x42, 0xf6, 0xb9, 0xa5, + 0xb4, 0xfd, 0x15, 0x70, 0xd3, 0xba, 0x82, 0x59, + 0xb4, 0x87, 0xe2, 0xd7, 0xa7, 0x8e, 0x5b, 0x48, + 0xe5, 0x12, 0xb8, 0xfc, 0x73, 0x0d, 0x68, 0x4f, + 0x5d, 0xdb, 0x15, 0x3b, 0x55, 0x6a, 0x19, 0xf5, + 0x4e, 0x4a, 0x0c, 0x76, 0x32, 0x37, 0x3e, 0xda, + 0x37, 0xf0, 0xdb, 0xb4, 0x0e, 0xea, 0x59, 0x0e, + 0xce, 0x90, 0x8e, 0x41, 0x4d, 0xdd, 0x6d, 0xaa, + 0xd3, 0x96, 0xc6, 0x0c, 0x2f, 0xb3, 0xfb, 0x8c, + 0x7b, 0x4f, 0x13, 0xa3, 0x84, 0x09, 0x5c, 0x37, + 0x17, 0xbd, 0xed, 0x32, 0x1e, 0x6a, 0x94, 0x15, + 0x0d, 0x3d, 0x88, 0xb8, 0xd6, 0x19, 0x8b, 0x99, + 0xef, 0xee, 0x1e, 0xd0, 0xd6, 0xf4, 0xb3, 0xc8, + 0x28, 0x5d, 0x57, 0x1a, 0x35, 0x8d, 0xae, 0xc0, + 0x17, 0xcd, 0xc4, 0x77, 0x3a, 0x2b, 0x54, 0xb4, + 0x43, 0x2b, 0xa4, 0x89, 0x9c, 0x0f, 0x24, 0xec, + 0xe9, 0x20, 0x7f, 0x7c, 0xd7, 0x81, 0xb3, 0xab, + 0xee, 0x85, 0x39, 0xec, 0xa8, 0x0a, 0xe4, 0xdd, + 0xcb, 0xfc, 0x11, 0xee, 0x77, 0x6b, 0x43, 0xda, + 0x88, 0x1f, 0x8e, 0x40, 0x79, 0x4d, 0xab, 0x6b, + 0xee, 0x3d, 0xe8, 0x2e, 0x5a, 0xcb, 0x34, 0xfc, + 0x5e, 0x9e, 0x92, 0xe6, 0xd5, 0xd4, 0x9e, 0xe3, + 0x86, 0x2b, 0x77, 0x8d, 0xe0, 0xc8, 0x09, 0xe2, + 0x1d, 0x70, 0xd0, 0x55, 0x2b, 0x4a, 0x68, 0x96, + 0x67, 0xec, 0x66, 0xc8, 0x5d, 0x5c, 0xbe, 0x10, + 0x64, 0x74, 0x70, 0xf0, 0x80, 0xe2, 0x5c, 0x05, + 0x5c, 0xf7, 0x97, 0x6f, 0xda, 0x54, 0x8e, 0xbc, + 0x91, 0xee, 0xd2, 0xb8, 0x3a, 0xfc, 0x60, 0xc2, + 0x79, 0xc4, 0x21, 0x4e, 0x7b, 0x3b, 0x00, 0x69, + 0x5b, 0x72, 0x39, 0x65, 0x98, 0x9f, 0xdb, 0x28, + 0x2a, 0x9a, 0x23, 0x21, 0x75, 0x87, 0xd4, 0x8e, + 0xc3, 0x4c, 0xe3, 0xd0, 0xcf, 0x23, 0xed, 0xe5, + 0x8f, 0xe2, 0x89, 0x59, 0x50, 0xd7, 0xb7, 0x9e, + 0x94, 0x53, 0x3e, 0xd3, 0x33, 0x33, 0x5a, 0xdb, + 0x5b, 0xe2, 0xe0, 0x79, 0x67, 0x9d, 0x07, 0x49, + 0x70, 0x46, 0xc2, 0x63, 0x69, 0xe1, 0x0d, 0xe6, + 0x26, 0xb5, 0xe6, 0x55, 0xcb, 0xc2, 0x63, 0xf6, + 0x82, 0xe2, 0xdd, 0xff, 0x00, 0x88, 0xb7, 0xdf, + 0x7b, 0x6a, 0xb6, 0x7d, 0xa8, 0x38, 0x9d, 0x40, + 0xc6, 0xf2, 0x36, 0xd5, 0x94, 0xf7, 0x5c, 0xf4, + 0x19, 0x23, 0xf6, 0x7d, 0xc7, 0xa6, 0x3f, 0x14, + 0xe9, 0xdc, 0x2f, 0x1d, 0x0f, 0x9c, 0xb6, 0x0e, + 0x11, 0xc1, 0xc1, 0x4e, 0x2e, 0x0e, 0xad, 0x78, + 0x54, 0x97, 0xb3, 0x2c, 0xd4, 0xd3, 0xc7, 0x3e, + 0x22, 0x67, 0x17, 0xb6, 0x06, 0x89, 0xad, 0x89, + 0xda, 0x43, 0x09, 0xe1, 0x7b, 0x39, 0x81, 0x20, + 0x85, 0x6d, 0xb7, 0x6b, 0x46, 0x0a, 0x36, 0xfc, + 0x5f, 0x33, 0x68, 0xf7, 0x3a, 0x25, 0xce, 0x3d, + 0x99, 0xb8, 0x8d, 0x48, 0x1a, 0x37, 0x3a, 0xda, + 0x5a, 0xfb, 0x9c, 0x25, 0x05, 0xcb, 0x59, 0xe0, + 0xf2, 0x19, 0x88, 0xac, 0x1b, 0x62, 0xd6, 0xb8, + 0xdb, 0xcf, 0xd2, 0xc9, 0xc6, 0xe0, 0xce, 0xe6, + 0x83, 0x75, 0x54, 0xa6, 0xa0, 0xb3, 0x9e, 0xff, + 0x00, 0x0b, 0x7b, 0x65, 0x6c, 0x01, 0x9e, 0xe2, + 0x22, 0xc8, 0xc3, 0x8d, 0x05, 0x4d, 0x37, 0x95, + 0xbe, 0x88, 0x28, 0x59, 0x9d, 0x11, 0x96, 0xbd, + 0xc3, 0x61, 0xa0, 0x81, 0xb1, 0xf9, 0xdd, 0x94, + 0x4e, 0x82, 0xea, 0xaf, 0x00, 0x06, 0xb8, 0xf1, + 0x0e, 0x17, 0x72, 0xd3, 0x6a, 0x98, 0x66, 0x9e, + 0xbc, 0x87, 0x56, 0x59, 0xe4, 0x62, 0x6b, 0x7f, + 0x0f, 0xb5, 0xb3, 0x16, 0xdc, 0x5c, 0x40, 0x3b, + 0x89, 0xad, 0x73, 0x7b, 0xcd, 0xfc, 0xaa, 0xca, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x83, 0x78, 0x44, 0x1b, 0xc2, 0x0a, 0x06, + 0x8d, 0xfe, 0xf8, 0xbe, 0xe6, 0xb8, 0xfb, 0x40, + 0xba, 0x42, 0xe6, 0xfa, 0x37, 0xfb, 0xe2, 0xfb, + 0x9a, 0xe3, 0xed, 0x02, 0xe9, 0x0b, 0x1c, 0x3e, + 0xc7, 0x9d, 0x2f, 0x4f, 0xe3, 0x3c, 0xcd, 0x3e, + 0xaa, 0xde, 0xa4, 0x5e, 0x6f, 0xea, 0x63, 0xf0, + 0xfe, 0x02, 0xb3, 0x5a, 0x7a, 0x34, 0x5e, 0x08, + 0xed, 0x2c, 0x39, 0xbf, 0xa9, 0x8f, 0xc3, 0xf8, + 0x0a, 0xcd, 0x69, 0xe8, 0xd1, 0x78, 0x23, 0xb4, + 0xb8, 0xac, 0xff, 0x00, 0x67, 0x88, 0xf5, 0x54, + 0x38, 0xea, 0xe5, 0xed, 0xef, 0xcb, 0x2a, 0x22, + 0x2f, 0x4d, 0x80, 0x88, 0x88, 0x2b, 0x3e, 0xd1, + 0xbf, 0xb5, 0xe5, 0xf2, 0xd1, 0x78, 0xcb, 0x43, + 0xd9, 0x67, 0xaa, 0xaf, 0x7f, 0xf2, 0x07, 0x88, + 0x16, 0xff, 0x00, 0xb4, 0x6f, 0xed, 0x79, 0x7c, + 0xb4, 0x5e, 0x32, 0xa2, 0x69, 0xec, 0x96, 0xaa, + 0xb3, 0xb7, 0x95, 0x98, 0x36, 0x48, 0xf8, 0x5e, + 0xfa, 0xcb, 0xd1, 0xc2, 0x25, 0x1c, 0x74, 0xa6, + 0xf2, 0xd3, 0x4d, 0x88, 0x3a, 0x6e, 0xa9, 0xfe, + 0xdb, 0xc9, 0xff, 0x00, 0xe3, 0xbf, 0xb4, 0xa9, + 0x9e, 0xca, 0xfd, 0x61, 0x7f, 0xe4, 0x59, 0xe3, + 0xad, 0x1c, 0x86, 0x6b, 0x5e, 0xcd, 0x63, 0x3c, + 0x57, 0xd1, 0x4c, 0xdb, 0x47, 0xb0, 0x89, 0xcb, + 0xad, 0xc3, 0x47, 0x01, 0xdf, 0x57, 0x70, 0xec, + 0x5b, 0xde, 0xca, 0xbd, 0x61, 0x7f, 0xe4, 0x59, + 0xe3, 0xa0, 0xe8, 0x57, 0x37, 0x56, 0xd6, 0x90, + 0xba, 0x7b, 0xa9, 0x59, 0x04, 0x2d, 0xdf, 0x24, + 0x8e, 0x0d, 0x6f, 0x64, 0xa8, 0xfb, 0x7d, 0x57, + 0xa7, 0x2e, 0x65, 0x10, 0xc3, 0x90, 0x85, 0xd2, + 0x38, 0xd1, 0xad, 0x24, 0xb6, 0xa7, 0xac, 0x5e, + 0x00, 0x5c, 0xff, 0x00, 0x54, 0x5f, 0x4d, 0x9f, + 0xd5, 0x63, 0x1a, 0xe9, 0x84, 0x36, 0x90, 0xcc, + 0x2d, 0xa2, 0x2f, 0x34, 0x63, 0x28, 0x69, 0x24, + 0xa7, 0x92, 0xb5, 0xaa, 0xdf, 0xd4, 0x1a, 0x43, + 0x4d, 0x5b, 0x61, 0xe5, 0xb8, 0xc6, 0xdf, 0x35, + 0xd7, 0x56, 0xcd, 0xe3, 0x2d, 0x74, 0xcc, 0x7f, + 0x4a, 0x07, 0x7c, 0x38, 0x46, 0xe3, 0xcc, 0x83, + 0xa3, 0x2d, 0x18, 0x73, 0xb8, 0x59, 0xe6, 0x74, + 0x10, 0xdf, 0x41, 0x24, 0xcc, 0x0e, 0x2f, 0x8d, + 0xaf, 0x15, 0x01, 0x9d, 0xf9, 0x3d, 0x4e, 0x1e, + 0x55, 0x01, 0xec, 0xdb, 0x31, 0x3d, 0xfe, 0x36, + 0x4b, 0x3b, 0x87, 0x19, 0x24, 0xb1, 0x7b, 0x5b, + 0x1b, 0x9c, 0x6a, 0x7a, 0x27, 0x83, 0xc2, 0x0f, + 0x82, 0x41, 0x54, 0x2b, 0x5b, 0x29, 0xf2, 0x1a, + 0x85, 0xf8, 0xe8, 0x1e, 0x62, 0x75, 0xe5, 0xc4, + 0x90, 0xb9, 0xc3, 0x77, 0x01, 0x73, 0x8b, 0xeb, + 0xd5, 0x14, 0x1b, 0x90, 0x75, 0x9b, 0x1d, 0x43, + 0x84, 0xc8, 0x5c, 0x1b, 0x6b, 0x2b, 0xd8, 0xa7, + 0x9c, 0x54, 0xf4, 0x6d, 0x26, 0xa6, 0x9b, 0xe9, + 0x50, 0x2b, 0xee, 0x2c, 0xf7, 0xf9, 0x4c, 0x6e, + 0x35, 0x81, 0xf7, 0xf7, 0x31, 0xdb, 0x35, 0xdd, + 0xef, 0x48, 0xea, 0x13, 0xcc, 0xdd, 0xe5, 0x41, + 0x61, 0xf4, 0x7e, 0x3b, 0x4d, 0x5c, 0x4f, 0x95, + 0x64, 0xf2, 0x5c, 0x08, 0xad, 0xdf, 0xdc, 0xc8, + 0x1a, 0x0b, 0x69, 0xdd, 0xbd, 0xc0, 0xb7, 0xaa, + 0x05, 0x15, 0x2f, 0x0b, 0x65, 0x71, 0xac, 0xf5, + 0x14, 0x8f, 0xbf, 0x99, 0xc1, 0xa5, 0xae, 0x9a, + 0x67, 0x37, 0x78, 0x60, 0x34, 0x6c, 0x71, 0xd6, + 0xa0, 0x6f, 0x41, 0xd2, 0x2c, 0xb5, 0x2e, 0x02, + 0xfe, 0x51, 0x05, 0xa5, 0xf4, 0x32, 0x4c, 0xed, + 0x8d, 0x8e, 0xbc, 0x2e, 0x3c, 0xc1, 0xf4, 0xaa, + 0xdf, 0xb8, 0x9e, 0x0b, 0x68, 0x5f, 0x3d, 0xc4, + 0x8d, 0x8a, 0x18, 0xc5, 0x5f, 0x23, 0xcd, 0x1a, + 0x07, 0x54, 0x95, 0x43, 0xcf, 0x7b, 0x35, 0xe1, + 0xe8, 0x5f, 0x81, 0x2e, 0x73, 0xb8, 0xa9, 0x2c, + 0x73, 0xc8, 0x07, 0x08, 0x1b, 0x43, 0xda, 0xfa, + 0x05, 0x37, 0x96, 0x87, 0x23, 0x06, 0x83, 0xba, + 0x87, 0x28, 0xf6, 0x49, 0x79, 0x15, 0xb9, 0x64, + 0x92, 0x30, 0x97, 0x07, 0x51, 0xc0, 0x34, 0x92, + 0x40, 0xdb, 0x4d, 0xe8, 0x26, 0xec, 0xb2, 0x98, + 0xdc, 0x87, 0x1f, 0x98, 0xdc, 0xc7, 0x73, 0xd1, + 0xd3, 0x8f, 0xa2, 0x70, 0x77, 0x0d, 0x77, 0x56, + 0x89, 0x7b, 0x95, 0xc6, 0x63, 0xf8, 0x3c, 0xfa, + 0xea, 0x2b, 0x63, 0x25, 0x7a, 0x3e, 0x95, 0xc1, + 0xbc, 0x54, 0xdf, 0x4a, 0xaa, 0x57, 0xb2, 0xad, + 0xd9, 0x3f, 0xe4, 0xfc, 0xf5, 0xf3, 0xed, 0x56, + 0x9d, 0x2e, 0x37, 0xc1, 0x97, 0xb6, 0xc4, 0x16, + 0xfc, 0xbc, 0xf0, 0xdc, 0x69, 0xeb, 0xd9, 0xe0, + 0x7b, 0x65, 0x86, 0x4b, 0x59, 0x5c, 0xc9, 0x1a, + 0x6a, 0xd7, 0x02, 0xc3, 0xb4, 0x15, 0x49, 0xf6, + 0x57, 0xeb, 0x1b, 0xef, 0xfc, 0x76, 0xf8, 0xe1, + 0x59, 0x2c, 0x7f, 0xc7, 0xcc, 0xff, 0x00, 0xf6, + 0xe7, 0xf8, 0x8e, 0x55, 0xbf, 0x65, 0x5e, 0xb2, + 0xbe, 0xff, 0x00, 0xc7, 0x6f, 0x8e, 0x10, 0x74, + 0x2b, 0xab, 0xcb, 0x4b, 0x28, 0x4c, 0xf7, 0x73, + 0x32, 0xde, 0x16, 0xec, 0x32, 0x48, 0x43, 0x45, + 0x7a, 0x9b, 0x56, 0x85, 0xae, 0xa9, 0xd3, 0xb7, + 0x73, 0x08, 0x60, 0xc8, 0x42, 0xe9, 0x5c, 0x68, + 0xd6, 0x92, 0x5b, 0x53, 0xd6, 0xe3, 0x02, 0xab, + 0x9e, 0xea, 0x0b, 0xc9, 0x75, 0x1e, 0xad, 0xf3, + 0x19, 0x67, 0x10, 0x59, 0xc7, 0x31, 0xb7, 0x89, + 0xcf, 0x34, 0x64, 0x6d, 0x61, 0xa3, 0xe4, 0xdb, + 0x41, 0x53, 0x42, 0xb7, 0xf5, 0x26, 0x92, 0xd3, + 0x76, 0x98, 0x99, 0x2e, 0xb1, 0x77, 0xad, 0x75, + 0xcd, 0xb8, 0x0e, 0x74, 0x6e, 0x99, 0x92, 0x74, + 0x8d, 0xa8, 0x06, 0x8d, 0x1b, 0x8f, 0x2e, 0xc4, + 0x1d, 0x21, 0x68, 0x5f, 0xe7, 0xf0, 0xb8, 0xd7, + 0xf4, 0x77, 0xd7, 0xb1, 0x41, 0x27, 0xfb, 0x64, + 0xd5, 0xff, 0x00, 0xb2, 0xda, 0x95, 0x5f, 0xd0, + 0xb9, 0xab, 0xcb, 0xdd, 0x3b, 0x75, 0x13, 0x9c, + 0x65, 0xbb, 0xc7, 0x87, 0x36, 0x17, 0x3b, 0x69, + 0x70, 0x2c, 0x2e, 0x88, 0x1e, 0xad, 0x08, 0xa2, + 0xa3, 0x60, 0xe6, 0xc1, 0xcb, 0x90, 0x96, 0x5d, + 0x4a, 0x67, 0x7b, 0x24, 0x04, 0xf1, 0xb0, 0x92, + 0x7a, 0x42, 0x7b, 0xa3, 0x25, 0x3b, 0xae, 0xc2, + 0x0e, 0xaf, 0x63, 0xa8, 0xb0, 0x79, 0x09, 0x04, + 0x36, 0x57, 0xd1, 0x4d, 0x29, 0xdd, 0x18, 0x34, + 0x71, 0xe6, 0x6b, 0xa8, 0x4a, 0x91, 0xe5, 0x5c, + 0xe4, 0xe9, 0x0d, 0x3d, 0x96, 0xbb, 0x8a, 0x4d, + 0x39, 0x96, 0x8e, 0x06, 0x81, 0x57, 0x44, 0xe7, + 0x17, 0xca, 0xd7, 0x03, 0x56, 0xba, 0x30, 0x78, + 0x5c, 0xba, 0x15, 0xbb, 0x25, 0x8e, 0x08, 0xe3, + 0x9a, 0x4e, 0x9a, 0x56, 0x34, 0x36, 0x49, 0x69, + 0xc3, 0xc4, 0xe0, 0x28, 0x5d, 0x4e, 0x4a, 0xa0, + 0x80, 0xd3, 0x58, 0x4c, 0x86, 0x3b, 0x33, 0x99, + 0xbb, 0xba, 0x63, 0x5b, 0x0d, 0xf4, 0xbc, 0x76, + 0xe5, 0xae, 0x0e, 0x24, 0x71, 0xbd, 0xdb, 0x40, + 0xdd, 0xb1, 0xcb, 0xea, 0xf7, 0x0b, 0x7d, 0x3e, + 0xb2, 0xb1, 0xcb, 0x35, 0x8d, 0x75, 0x8c, 0x16, + 0xee, 0x8a, 0x67, 0x17, 0x0e, 0x2a, 0x9e, 0x93, + 0x67, 0x0e, 0xf3, 0xdf, 0x2b, 0x0a, 0x20, 0xa3, + 0x60, 0x74, 0x5e, 0x43, 0x1d, 0x77, 0x95, 0x96, + 0x56, 0xb3, 0x82, 0x5b, 0x79, 0xad, 0xec, 0x28, + 0xf0, 0x6b, 0xd2, 0xd4, 0x0e, 0x2f, 0xd1, 0xd9, + 0x45, 0x60, 0xd2, 0x18, 0xcb, 0xcc, 0x56, 0x02, + 0xde, 0xc6, 0xf5, 0xa1, 0x97, 0x11, 0x97, 0x97, + 0x06, 0xb8, 0x38, 0x77, 0x4e, 0x24, 0x6d, 0x0a, + 0x65, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x46, + 0x65, 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, 0x6d, + 0xef, 0x47, 0x32, 0x84, 0xcb, 0x7d, 0x74, 0x3c, + 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, 0xe7, + 0x60, 0xf9, 0xec, 0x76, 0x9b, 0x5f, 0xa6, 0x5d, + 0x17, 0x78, 0x36, 0x74, 0x55, 0xad, 0x86, 0xf3, + 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, 0xa9, 0x68, + 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xea, 0xdb, 0x79, + 0xe8, 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, 0xb4, + 0x26, 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0xea, 0xd3, + 0xb1, 0x57, 0x79, 0xc3, 0x5f, 0x1a, 0xd7, 0x9c, + 0xb5, 0xa2, 0x22, 0xcd, 0xb0, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0x07, + 0x53, 0xe9, 0x28, 0x35, 0x14, 0x96, 0xef, 0x96, + 0xe5, 0xf6, 0xfe, 0x6c, 0xd7, 0x34, 0x06, 0x34, + 0x3a, 0xbc, 0x44, 0x1e, 0x53, 0xd6, 0x54, 0x4d, + 0x5f, 0xa4, 0xa0, 0xd3, 0xb1, 0x5a, 0xc9, 0x15, + 0xcb, 0xee, 0x0d, 0xc3, 0x9e, 0xd2, 0x1e, 0xd0, + 0xda, 0x70, 0x80, 0x79, 0x0f, 0x5d, 0x75, 0x95, + 0x44, 0xf6, 0xab, 0xe8, 0xd8, 0xdf, 0x29, 0x2f, + 0x8a, 0xd4, 0x11, 0xfa, 0x77, 0x40, 0x5b, 0x66, + 0x71, 0x10, 0xe4, 0x64, 0xbc, 0x92, 0x17, 0x4c, + 0x5c, 0x0c, 0x6d, 0x63, 0x48, 0x1c, 0x2e, 0x2d, + 0xde, 0x4f, 0x59, 0x4f, 0xde, 0xe9, 0x6c, 0x75, + 0x86, 0x93, 0x76, 0x1e, 0xe7, 0x22, 0x2d, 0xed, + 0xba, 0x71, 0x29, 0xbc, 0x95, 0xa0, 0x51, 0xc4, + 0xd4, 0x36, 0x95, 0xa6, 0xd5, 0xb7, 0xa0, 0x7f, + 0xb5, 0x2c, 0xf9, 0xe4, 0xfb, 0x47, 0x2c, 0x3e, + 0xd1, 0xbf, 0xb5, 0xa5, 0xf2, 0xd0, 0xf8, 0xc5, + 0x07, 0xde, 0x94, 0xb7, 0xc3, 0xe1, 0x30, 0xd7, + 0x0f, 0x87, 0x27, 0x1d, 0xdd, 0x9b, 0x65, 0x2f, + 0x96, 0xe8, 0x51, 0xac, 0x61, 0x21, 0xad, 0xe1, + 0x34, 0x25, 0x4c, 0xd8, 0xe5, 0xb1, 0x99, 0x1e, + 0x3f, 0x30, 0xba, 0x8a, 0xe7, 0xa2, 0xa7, 0x49, + 0xd1, 0xbb, 0x8b, 0x86, 0xbb, 0xab, 0xcf, 0x45, + 0x55, 0xf6, 0x75, 0x6d, 0x15, 0xde, 0x98, 0xbd, + 0xb5, 0x98, 0x71, 0x45, 0x3c, 0xd2, 0x46, 0xf1, + 0xd6, 0x74, 0x6c, 0x0a, 0x03, 0x48, 0x4f, 0x2e, + 0x03, 0x57, 0x3b, 0x1b, 0x72, 0x78, 0x5b, 0x2b, + 0x9d, 0x67, 0x2d, 0x76, 0x0e, 0x2a, 0xd6, 0x27, + 0x7b, 0xa6, 0x9d, 0x94, 0x1d, 0x3a, 0xee, 0xf2, + 0xd2, 0xca, 0x03, 0x71, 0x79, 0x33, 0x2d, 0xe0, + 0x69, 0x01, 0xd2, 0x48, 0x68, 0xd0, 0x49, 0xa0, + 0xdb, 0xd7, 0x5f, 0x16, 0x39, 0x2b, 0x0c, 0x8b, + 0x1d, 0x25, 0x85, 0xc4, 0x77, 0x2c, 0x61, 0xe1, + 0x73, 0xa3, 0x3c, 0x40, 0x12, 0x2b, 0x45, 0x48, + 0xf6, 0xa3, 0x94, 0xf4, 0x5c, 0x4b, 0x0e, 0xef, + 0xfe, 0x44, 0xe3, 0xb2, 0xd8, 0xc7, 0x6c, 0xab, + 0x06, 0x13, 0x05, 0x73, 0x65, 0xa4, 0x9b, 0x8e, + 0xb6, 0x90, 0x5a, 0xdf, 0x5c, 0x44, 0x5e, 0xf9, + 0xc8, 0xaf, 0x04, 0x92, 0xed, 0x27, 0x67, 0x2b, + 0x5b, 0xb1, 0x06, 0xe5, 0xee, 0xa8, 0xd3, 0xf6, + 0x12, 0x98, 0x6e, 0xaf, 0xe2, 0x8e, 0x56, 0xec, + 0x73, 0x01, 0x2f, 0x20, 0xf5, 0xf8, 0x03, 0xa8, + 0xb2, 0xe3, 0xf3, 0xd8, 0x6c, 0x9b, 0x8b, 0x2c, + 0x2f, 0x22, 0x9e, 0x40, 0x2a, 0x63, 0x69, 0xa3, + 0xa9, 0xd5, 0xe1, 0x75, 0x0a, 0xa6, 0xd9, 0x68, + 0x2c, 0x3e, 0x38, 0xca, 0xfd, 0x49, 0x7f, 0x11, + 0xdb, 0xfc, 0x20, 0xc9, 0x7a, 0x2d, 0x9c, 0xae, + 0x77, 0x15, 0x1c, 0x4d, 0x55, 0x66, 0xff, 0x00, + 0xf0, 0xfc, 0x76, 0xa1, 0x63, 0xf0, 0x57, 0x0e, + 0x9a, 0xda, 0x19, 0x23, 0x7c, 0x33, 0x57, 0x68, + 0x35, 0x1c, 0x4d, 0xe2, 0xa0, 0xa8, 0xe4, 0x41, + 0xd8, 0xee, 0x63, 0x74, 0x96, 0xd3, 0x44, 0xce, + 0xfa, 0x48, 0xde, 0xc6, 0xd7, 0x66, 0xd7, 0x34, + 0x80, 0xa1, 0x74, 0x56, 0x1e, 0xfb, 0x0d, 0x85, + 0xf3, 0x2b, 0xf6, 0xb5, 0xb3, 0xf4, 0xcf, 0x7d, + 0x18, 0xe0, 0xe1, 0x47, 0x06, 0xd3, 0x68, 0xe6, + 0x53, 0xd5, 0xae, 0xde, 0xaa, 0x20, 0xa9, 0xfe, + 0x57, 0xbe, 0x9b, 0x27, 0xa8, 0xa5, 0x9d, 0xac, + 0x16, 0xd9, 0x58, 0x78, 0x2d, 0x9d, 0xc4, 0x09, + 0xe2, 0x1b, 0x5b, 0xc4, 0xde, 0x4d, 0xa1, 0x46, + 0xda, 0xe8, 0x9c, 0xbc, 0x3a, 0x4e, 0xfe, 0xc1, + 0xcc, 0x8f, 0xf1, 0x1b, 0xc9, 0xa3, 0x70, 0x6f, + 0x18, 0xe1, 0xe8, 0xe2, 0x22, 0x9d, 0xde, 0xee, + 0x52, 0xaf, 0xc8, 0x83, 0x05, 0x84, 0x2f, 0x82, + 0xc2, 0xda, 0x09, 0x36, 0x49, 0x14, 0x31, 0xb1, + 0xe0, 0x6d, 0x1c, 0x4d, 0x68, 0x69, 0x59, 0xd1, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x47, 0x6a, 0x3f, 0x51, 0xde, + 0x79, 0x3f, 0x9c, 0xd5, 0xaf, 0xa1, 0xbd, 0x4c, + 0xef, 0x2e, 0xfe, 0xd3, 0x56, 0xc6, 0xa3, 0xf5, + 0x1d, 0xe7, 0x93, 0xf9, 0xcd, 0x5a, 0xfa, 0x1b, + 0xd4, 0xce, 0xf2, 0xef, 0xed, 0x35, 0x5e, 0x38, + 0x73, 0xa5, 0x8c, 0xf3, 0x14, 0xee, 0x4e, 0xb5, + 0x89, 0x11, 0x15, 0x1b, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x0b, 0x57, 0x21, 0xe8, 0x57, 0x3e, 0x49, + 0xfe, 0x29, 0x5b, 0x4b, 0x57, 0x21, 0xe8, 0x57, + 0x3e, 0x49, 0xfe, 0x29, 0x53, 0x4e, 0x78, 0x56, + 0xe6, 0xc5, 0x5a, 0x27, 0x52, 0x0b, 0x49, 0xfa, + 0x3d, 0xc7, 0x86, 0xdf, 0x15, 0x4f, 0x28, 0x1d, + 0x27, 0xe8, 0xf7, 0x1e, 0x1b, 0x7c, 0x55, 0x3c, + 0xb4, 0xc4, 0x71, 0x6a, 0xd3, 0xf7, 0x30, 0xc0, + 0xf2, 0xd6, 0xf4, 0x4e, 0xb1, 0x11, 0x16, 0x4e, + 0x91, 0x11, 0x10, 0x61, 0xbd, 0xf4, 0x2b, 0x9f, + 0x23, 0x27, 0x8a, 0x57, 0x36, 0xf6, 0x5e, 0x01, + 0xce, 0x4e, 0x0e, 0xd0, 0x6d, 0x48, 0x23, 0xad, + 0xc6, 0xc5, 0xd3, 0x26, 0x8c, 0x4b, 0x0c, 0x91, + 0x13, 0x41, 0x23, 0x5c, 0xc2, 0x47, 0x20, 0x70, + 0xa2, 0x80, 0xd3, 0x9a, 0x2e, 0xd3, 0x4f, 0xde, + 0x3e, 0xee, 0x1b, 0xa9, 0x67, 0x73, 0xe3, 0x31, + 0x16, 0xc8, 0xd6, 0x81, 0x42, 0x41, 0xaf, 0x73, + 0xcc, 0x83, 0x99, 0x65, 0x60, 0x97, 0x19, 0x93, + 0xbf, 0xb0, 0x69, 0x2d, 0x6b, 0x64, 0x74, 0x4e, + 0x1f, 0xa4, 0xc0, 0xfe, 0x36, 0x76, 0x81, 0x56, + 0xd7, 0x58, 0xf9, 0xa7, 0xb2, 0xe7, 0x12, 0x28, + 0xfb, 0xa7, 0x32, 0xe1, 0xdf, 0x2e, 0x56, 0x86, + 0xfe, 0xe8, 0x0a, 0x6b, 0x39, 0xa0, 0x6c, 0x33, + 0x39, 0x19, 0x72, 0x12, 0x5d, 0x4b, 0x6e, 0xf9, + 0x83, 0x43, 0xd8, 0xc6, 0xb4, 0x82, 0x5a, 0x38, + 0x78, 0xaa, 0xee, 0xa8, 0x52, 0xb9, 0x2c, 0x15, + 0xbe, 0x43, 0x09, 0xf8, 0x31, 0x91, 0xd0, 0xc0, + 0x1b, 0x1b, 0x1a, 0xf6, 0x00, 0x5c, 0x04, 0x5c, + 0x34, 0xd8, 0x76, 0x7c, 0x54, 0x15, 0xdf, 0x65, + 0xe0, 0x9c, 0x35, 0xf0, 0x69, 0xe1, 0x71, 0xb8, + 0xa0, 0x3d, 0x43, 0xd1, 0x8d, 0xaa, 0x1f, 0x1b, + 0xad, 0xb3, 0x76, 0x19, 0xfe, 0x83, 0x3d, 0x70, + 0xf9, 0x2d, 0xa2, 0x7b, 0xe1, 0xb9, 0x8f, 0x81, + 0xa3, 0x80, 0xee, 0x0f, 0xa3, 0x5a, 0x0e, 0xcd, + 0xfc, 0xca, 0xed, 0xa6, 0xf4, 0xe4, 0x1a, 0x7e, + 0xd6, 0x6b, 0x68, 0x26, 0x7c, 0xed, 0x9a, 0x4e, + 0x90, 0xba, 0x40, 0x1a, 0x41, 0xe1, 0xe1, 0xa7, + 0x72, 0xb0, 0x6a, 0x0d, 0x1b, 0x89, 0xce, 0x49, + 0xe7, 0x12, 0xf1, 0x5b, 0xdd, 0xd0, 0x03, 0x3c, + 0x54, 0xab, 0x80, 0xdd, 0xc6, 0xd3, 0xb1, 0xd4, + 0x41, 0xb5, 0x36, 0xa4, 0xd3, 0x66, 0xd5, 0xd2, + 0x4d, 0x7f, 0x6d, 0x24, 0x04, 0x6d, 0x69, 0x70, + 0x7d, 0x47, 0x53, 0x83, 0x69, 0x3c, 0xd4, 0x5c, + 0xcb, 0x00, 0xc6, 0xdd, 0xeb, 0x3b, 0x67, 0xe3, + 0xa3, 0x31, 0xc0, 0x6e, 0xcc, 0xd1, 0xc7, 0xfa, + 0x10, 0xb5, 0xc5, 0xfb, 0x7a, 0x94, 0x6a, 0xb2, + 0x37, 0xd9, 0x4c, 0x5c, 0x75, 0x39, 0x27, 0x70, + 0x75, 0xa1, 0x15, 0xec, 0xf1, 0xab, 0x36, 0x03, + 0x4b, 0x62, 0xf0, 0x2d, 0x71, 0xb4, 0x6b, 0xa4, + 0xb8, 0x90, 0x70, 0xc9, 0x71, 0x25, 0x0b, 0xc8, + 0xea, 0x0a, 0x6c, 0x68, 0xe6, 0x41, 0x54, 0xf6, + 0xad, 0xf5, 0xf8, 0xdf, 0x02, 0x5e, 0xdb, 0x55, + 0x87, 0x48, 0x63, 0xec, 0x24, 0xd3, 0x58, 0xe9, + 0x24, 0xb6, 0x85, 0xef, 0x74, 0x55, 0x73, 0xdd, + 0x1b, 0x49, 0x27, 0x89, 0xdb, 0xc9, 0x0b, 0x26, + 0xa5, 0xd2, 0x76, 0xda, 0x89, 0xf6, 0xef, 0x9e, + 0xe2, 0x4b, 0x7f, 0x36, 0x0e, 0x6b, 0x44, 0x6d, + 0x6b, 0xab, 0xc4, 0x41, 0xdb, 0xc5, 0xcc, 0xa4, + 0xb1, 0x38, 0xe6, 0x62, 0xf1, 0xd6, 0xf8, 0xf8, + 0xde, 0xe9, 0x59, 0x6c, 0xce, 0x06, 0xbd, 0xc0, + 0x02, 0x76, 0x93, 0xb4, 0x0e, 0x74, 0x1b, 0x11, + 0x43, 0x0c, 0x23, 0x86, 0x18, 0xdb, 0x18, 0x3b, + 0xc3, 0x1a, 0x1a, 0x3d, 0xe5, 0x5a, 0xd7, 0x98, + 0x1c, 0xa6, 0x6a, 0xda, 0xce, 0x2c, 0x73, 0x1b, + 0x21, 0x86, 0x47, 0xbe, 0x40, 0xe7, 0x86, 0x0a, + 0x16, 0xd0, 0x77, 0xdb, 0xd5, 0xa1, 0x10, 0x72, + 0xf8, 0xb4, 0x96, 0xbe, 0x82, 0x21, 0x14, 0x32, + 0x3e, 0x28, 0x98, 0x3b, 0x96, 0x32, 0xeb, 0x85, + 0xa0, 0x75, 0x80, 0x72, 0x81, 0xc2, 0xd9, 0x65, + 0xef, 0x72, 0x26, 0xdf, 0x12, 0xe7, 0x32, 0xf3, + 0x85, 0xe6, 0xad, 0x93, 0xa2, 0x3c, 0x23, 0xbf, + 0xee, 0xea, 0x17, 0x6e, 0x3b, 0x95, 0x6f, 0x05, + 0xa1, 0xed, 0x30, 0x99, 0x3f, 0xc4, 0x62, 0xbb, + 0x96, 0x67, 0x96, 0xbd, 0xbd, 0x1b, 0xda, 0xd0, + 0x3b, 0xbe, 0xbb, 0x7a, 0x88, 0x35, 0xb3, 0x9a, + 0x8f, 0x2b, 0xa6, 0x31, 0x98, 0xd8, 0xdf, 0x6a, + 0xcb, 0x99, 0x24, 0x84, 0x32, 0x69, 0xa4, 0x7b, + 0x8d, 0x26, 0x63, 0x5b, 0xc4, 0x09, 0x6d, 0x6b, + 0x5d, 0xf5, 0xaa, 0x94, 0xc5, 0xea, 0xbc, 0x45, + 0xe6, 0x2a, 0x3c, 0x84, 0xd7, 0x50, 0xc0, 0xe0, + 0xc0, 0x6e, 0x22, 0x73, 0xc0, 0x73, 0x1e, 0x07, + 0x74, 0xde, 0x13, 0xdd, 0x1e, 0xb7, 0x55, 0x6f, + 0xe4, 0xf1, 0x96, 0x59, 0x4b, 0x47, 0xd9, 0xdf, + 0x47, 0xd2, 0xc2, 0xfd, 0xb4, 0xdc, 0x5a, 0xe1, + 0xb9, 0xcd, 0x3c, 0x84, 0x2a, 0x74, 0x9e, 0xca, + 0xad, 0x4c, 0xb5, 0x8b, 0x22, 0xf6, 0xc7, 0xfa, + 0x2e, 0x8d, 0xae, 0x70, 0xf9, 0x5c, 0x40, 0x7b, + 0xc8, 0x20, 0x34, 0xa0, 0x75, 0xf6, 0xb6, 0x8a, + 0xe2, 0xd5, 0xa5, 0x91, 0xf4, 0xf2, 0xdc, 0x10, + 0x3e, 0x2c, 0x47, 0x88, 0xed, 0xec, 0xd1, 0x66, + 0xf6, 0x8b, 0x6b, 0x25, 0xae, 0xa5, 0x17, 0x60, + 0x77, 0x17, 0x31, 0xc7, 0x23, 0x0f, 0x55, 0xd1, + 0xf7, 0x0e, 0x1e, 0xf0, 0x57, 0xfc, 0x0e, 0x9b, + 0xc6, 0xe0, 0x61, 0x73, 0x2c, 0xda, 0x5d, 0x2c, + 0x9f, 0x5b, 0x3c, 0x9b, 0x5e, 0xea, 0x72, 0x6c, + 0xdc, 0x3a, 0xcb, 0x26, 0x6f, 0x03, 0x8f, 0xce, + 0x5a, 0x79, 0xb5, 0xeb, 0x4f, 0x72, 0x78, 0xa2, + 0x95, 0x9b, 0x1e, 0xc7, 0x6e, 0xab, 0x4f, 0xc0, + 0x82, 0x17, 0x54, 0x6a, 0x4c, 0x5c, 0xda, 0x4a, + 0x69, 0x60, 0xb8, 0x8e, 0x49, 0x2f, 0xe2, 0x11, + 0xc7, 0x13, 0x5c, 0x0b, 0xea, 0xfa, 0x71, 0xd5, + 0xbb, 0xc7, 0x08, 0xad, 0x54, 0x7f, 0xb2, 0xcb, + 0x27, 0xb6, 0x0b, 0xeb, 0xf7, 0x0a, 0x36, 0x47, + 0x32, 0x18, 0xcf, 0x57, 0x82, 0xae, 0x77, 0x8c, + 0x17, 0xb1, 0x7b, 0x2b, 0xb4, 0x13, 0x07, 0x4b, + 0x90, 0x91, 0xd1, 0x57, 0xbd, 0x6c, 0x6d, 0x6b, + 0x88, 0xea, 0x71, 0x54, 0xf6, 0x95, 0xce, 0xc6, + 0xc6, 0xd7, 0x1f, 0x69, 0x1d, 0x9d, 0xa4, 0x62, + 0x28, 0x21, 0x14, 0x63, 0x07, 0x6c, 0xf5, 0x49, + 0x41, 0x9d, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x47, 0xea, 0x0f, 0x54, + 0xcf, 0xf2, 0x7c, 0x60, 0xa4, 0x14, 0x7e, 0xa0, + 0xf5, 0x4c, 0xff, 0x00, 0x27, 0xc6, 0x0a, 0xf6, + 0xf6, 0xe9, 0xd3, 0x0c, 0xb1, 0x3c, 0x0b, 0xbb, + 0x95, 0xea, 0x7b, 0xa5, 0x7d, 0x50, 0xdf, 0x0d, + 0xfd, 0xb5, 0x2c, 0xfd, 0xca, 0x27, 0x4a, 0xfa, + 0xa1, 0xbe, 0x1b, 0xfb, 0x6a, 0x59, 0xfb, 0x94, + 0xdd, 0xe2, 0xd7, 0xbd, 0x28, 0xc3, 0x70, 0x2d, + 0xee, 0xc3, 0x9c, 0xdd, 0x7f, 0x93, 0xc7, 0x95, + 0x67, 0xd8, 0x85, 0x7f, 0x54, 0x0b, 0xaf, 0xf2, + 0x78, 0xf2, 0xac, 0xfb, 0x10, 0xaf, 0xeb, 0x96, + 0xce, 0x7a, 0xf7, 0xe5, 0xec, 0x7c, 0x53, 0x36, + 0x0f, 0xf8, 0xd6, 0xc4, 0x44, 0x5b, 0x3c, 0xd1, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x52, 0x7d, 0xa6, + 0xe2, 0x65, 0xb8, 0xb3, 0xb7, 0xca, 0x44, 0xd2, + 0xef, 0x34, 0xe2, 0x8e, 0x7a, 0x72, 0x46, 0xfd, + 0xa1, 0xde, 0xe3, 0xbb, 0x6a, 0xec, 0xbc, 0x7b, + 0x18, 0xf6, 0x39, 0x8f, 0x68, 0x73, 0x1c, 0x08, + 0x73, 0x48, 0xa8, 0x20, 0xef, 0x04, 0x20, 0xa4, + 0xe8, 0x7d, 0x5f, 0x8c, 0x66, 0x2e, 0x3c, 0x5e, + 0x42, 0x76, 0xdb, 0x4f, 0x6b, 0x56, 0xc4, 0xf9, + 0x0d, 0x18, 0xf6, 0x13, 0x56, 0xf7, 0x5b, 0xaa, + 0x16, 0x4d, 0x65, 0xad, 0x2c, 0xa1, 0xb0, 0x75, + 0x9e, 0x26, 0xe8, 0x49, 0x79, 0x31, 0x00, 0xcd, + 0x03, 0xaa, 0x23, 0x60, 0x35, 0x27, 0x8c, 0x7c, + 0x63, 0x4a, 0x6c, 0x5f, 0x59, 0x2f, 0x66, 0x78, + 0x9b, 0x99, 0x5d, 0x2d, 0x94, 0xef, 0xb2, 0xe2, + 0x35, 0x31, 0x00, 0x24, 0x8c, 0x78, 0x20, 0x90, + 0x47, 0x65, 0x7c, 0x58, 0x7b, 0x2f, 0xc6, 0x43, + 0x28, 0x7d, 0xed, 0xd4, 0x97, 0x6d, 0x69, 0xfa, + 0xa6, 0xb4, 0x44, 0xd3, 0xe1, 0x10, 0x5c, 0xe4, + 0x1b, 0xda, 0x0e, 0xfb, 0x39, 0x91, 0xc6, 0x49, + 0x75, 0x94, 0x97, 0xa6, 0x8d, 0xcf, 0xe0, 0xb5, + 0x73, 0x9a, 0x03, 0x88, 0x6f, 0x7e, 0xe2, 0x45, + 0x2a, 0x2b, 0xb1, 0x54, 0xf5, 0xc6, 0xab, 0x93, + 0x29, 0x76, 0xfc, 0x65, 0xa3, 0xf8, 0x71, 0xf6, + 0xef, 0xe1, 0x71, 0x06, 0x9d, 0x2b, 0xda, 0x68, + 0x5c, 0x7f, 0x54, 0x1d, 0xdd, 0x95, 0xd3, 0x7c, + 0xda, 0x36, 0xda, 0x9b, 0x58, 0x29, 0x03, 0x04, + 0x66, 0x38, 0xf8, 0x05, 0x38, 0x05, 0x38, 0x47, + 0x08, 0xeb, 0x2a, 0x6f, 0xfd, 0x57, 0x8e, 0xfe, + 0xa1, 0x3f, 0xec, 0x31, 0x07, 0xce, 0x94, 0x9f, + 0x46, 0xe0, 0x6d, 0xc4, 0x8f, 0xc8, 0xc3, 0x36, + 0x46, 0x56, 0xff, 0x00, 0x1a, 0x6a, 0x3a, 0x8d, + 0x07, 0xff, 0x00, 0x4e, 0x3e, 0xe7, 0x77, 0x57, + 0xaa, 0xac, 0x39, 0x39, 0x2d, 0x73, 0xfa, 0x6a, + 0xf9, 0xb8, 0xe9, 0x45, 0xc3, 0x26, 0x89, 0xed, + 0x8d, 0xed, 0xae, 0xd7, 0xb3, 0x6d, 0x36, 0xd3, + 0x94, 0x28, 0x0f, 0xfa, 0xaf, 0x1d, 0xfd, 0x42, + 0x7f, 0xd8, 0x62, 0xb3, 0x60, 0x30, 0xb1, 0x60, + 0xf1, 0xc2, 0xc2, 0x19, 0x5d, 0x33, 0x1a, 0xf7, + 0x3c, 0x48, 0xf0, 0x01, 0xab, 0xcd, 0x7e, 0x2a, + 0x0a, 0x1f, 0xb3, 0x4c, 0xad, 0xad, 0x95, 0xfd, + 0xd5, 0xad, 0xd4, 0x8d, 0x84, 0x5c, 0xb1, 0xa6, + 0x37, 0x3c, 0x86, 0x8e, 0x38, 0xc9, 0xee, 0x49, + 0x34, 0xe4, 0x72, 0xd4, 0xd7, 0x17, 0x91, 0x66, + 0x75, 0x38, 0x82, 0xc1, 0xc2, 0x70, 0xd6, 0xc7, + 0x6c, 0xc7, 0x30, 0xd4, 0x39, 0xe4, 0x9a, 0xd0, + 0x8d, 0xfb, 0x5d, 0x45, 0x6b, 0xcd, 0xfb, 0x3a, + 0xc6, 0x64, 0xae, 0x9f, 0x77, 0x6d, 0x33, 0xac, + 0x65, 0x94, 0x97, 0x48, 0xc6, 0xb4, 0x3e, 0x32, + 0xe3, 0xbd, 0xc1, 0xb5, 0x6f, 0x0d, 0x7a, 0xc5, + 0x6c, 0x69, 0xed, 0x09, 0x8d, 0xc2, 0x5c, 0x0b, + 0xc7, 0x48, 0xeb, 0xbb, 0xa6, 0x7d, 0x5b, 0xde, + 0x03, 0x5a, 0xca, 0xf2, 0xb5, 0x82, 0xbb, 0x7a, + 0xe4, 0xa0, 0xd4, 0xf6, 0x83, 0x8d, 0x77, 0xe5, + 0x78, 0x04, 0x63, 0x8b, 0xf0, 0xe7, 0xc5, 0xc5, + 0x4f, 0xd0, 0xe1, 0xe8, 0x89, 0xed, 0x2c, 0x5e, + 0xcf, 0x33, 0x78, 0xe8, 0x70, 0x52, 0x5a, 0x5d, + 0x5c, 0x47, 0x04, 0x96, 0xb2, 0xbd, 0xe4, 0x48, + 0xe0, 0xda, 0xc6, 0xfa, 0x3b, 0x88, 0x57, 0x7e, + 0xda, 0xab, 0x94, 0xb0, 0xc5, 0x34, 0x4f, 0x86, + 0x66, 0x87, 0xc5, 0x23, 0x4b, 0x1e, 0xc7, 0x0a, + 0x82, 0xd3, 0xb0, 0x82, 0x15, 0x2e, 0xf7, 0xd9, + 0x6e, 0x3e, 0x59, 0xcb, 0xec, 0xef, 0x1f, 0x6f, + 0x11, 0x35, 0x11, 0x3d, 0x82, 0x4e, 0x1e, 0xb3, + 0x5d, 0xc4, 0xd3, 0xd9, 0x41, 0x5d, 0xc2, 0xb4, + 0xe6, 0xb5, 0xdb, 0x6e, 0x62, 0x04, 0xc4, 0xfb, + 0xa7, 0xdd, 0x13, 0xd4, 0x8d, 0x84, 0xbc, 0x1e, + 0xd2, 0x93, 0xf6, 0xa7, 0x64, 0xe1, 0x7d, 0x67, + 0x7d, 0x4f, 0xe1, 0xcb, 0x13, 0xa1, 0x71, 0xfd, + 0x66, 0x3b, 0x88, 0x0e, 0xc3, 0x95, 0xbb, 0x4f, + 0x69, 0x7c, 0x76, 0x02, 0x27, 0x8b, 0x6e, 0x29, + 0x6e, 0x25, 0x00, 0x4b, 0x71, 0x25, 0x38, 0x88, + 0x1f, 0x14, 0x01, 0xde, 0x85, 0xbb, 0x94, 0xc5, + 0xd9, 0x65, 0xac, 0x9f, 0x65, 0x7c, 0xce, 0x92, + 0x17, 0xed, 0xd9, 0xb1, 0xcd, 0x70, 0xdc, 0xe6, + 0x9e, 0x42, 0x10, 0x41, 0x41, 0xaa, 0x31, 0x63, + 0x47, 0x0b, 0x97, 0x5c, 0x46, 0x27, 0x65, 0xaf, + 0x42, 0x60, 0xe2, 0x1d, 0x27, 0x4a, 0x19, 0xd1, + 0xf0, 0xf0, 0x6f, 0xde, 0xab, 0xbe, 0xcb, 0xac, + 0x5e, 0xfc, 0x95, 0xd5, 0xe9, 0x07, 0xa3, 0x82, + 0x1e, 0x88, 0x1f, 0xd7, 0x90, 0x8d, 0x9d, 0x86, + 0xad, 0xf3, 0xec, 0xaa, 0xd7, 0xa7, 0xe2, 0x19, + 0x19, 0x04, 0x35, 0xef, 0x7a, 0x36, 0xf1, 0xd3, + 0xa9, 0xc5, 0xc5, 0x4f, 0x79, 0x5b, 0xf1, 0x38, + 0x8b, 0x1c, 0x3d, 0x93, 0x6c, 0xac, 0x99, 0xc1, + 0x13, 0x4d, 0x5c, 0x4e, 0xd7, 0x39, 0xc7, 0x7b, + 0x9c, 0x79, 0x4a, 0x0d, 0xc4, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x41, 0xbc, 0x22, 0x0d, 0xe1, 0x05, 0x03, + 0x46, 0xff, 0x00, 0x7c, 0x5f, 0x73, 0x5c, 0x7d, + 0xa0, 0x5d, 0x21, 0x73, 0x7d, 0x1b, 0xfd, 0xf1, + 0x7d, 0xcd, 0x71, 0xf6, 0x81, 0x74, 0x85, 0x8e, + 0x1f, 0x63, 0xce, 0x97, 0xa7, 0xf1, 0x9e, 0x66, + 0x9f, 0x55, 0x6f, 0x52, 0x2f, 0x37, 0xf5, 0x31, + 0xf8, 0x7f, 0x01, 0x59, 0xad, 0x3d, 0x1a, 0x2f, + 0x04, 0x76, 0x96, 0x1c, 0xdf, 0xd4, 0xc7, 0xe1, + 0xfc, 0x05, 0x66, 0xb4, 0xf4, 0x68, 0xbc, 0x11, + 0xda, 0x5c, 0x56, 0x7f, 0xb3, 0xc4, 0x7a, 0xaa, + 0x1c, 0x75, 0x72, 0xf6, 0xf7, 0xe5, 0x95, 0x11, + 0x17, 0xa6, 0xc0, 0x44, 0x44, 0x15, 0x9f, 0x68, + 0xdf, 0xda, 0xf2, 0xf9, 0x68, 0xbc, 0x65, 0xa1, + 0xec, 0xb3, 0xd5, 0x57, 0xbf, 0xf9, 0x03, 0xc4, + 0x0a, 0xc9, 0x9f, 0xc2, 0xc5, 0x9b, 0xc6, 0xbb, + 0x1f, 0x34, 0xae, 0x85, 0x8e, 0x7b, 0x5f, 0xc6, + 0xc0, 0x09, 0xab, 0x0d, 0x7e, 0x32, 0xc3, 0xa6, + 0xf4, 0xe4, 0x1a, 0x7a, 0xda, 0x6b, 0x78, 0x27, + 0x7d, 0xc0, 0x99, 0xfd, 0x21, 0x74, 0x80, 0x34, + 0x82, 0x1b, 0xc3, 0x4e, 0xe5, 0x07, 0xde, 0xa9, + 0xfe, 0xdb, 0xc9, 0x7f, 0xe3, 0xbf, 0xb4, 0xa9, + 0x9e, 0xca, 0xbd, 0x63, 0x7f, 0xe4, 0x59, 0xe3, + 0xab, 0xf6, 0x4a, 0xc9, 0xb9, 0x0c, 0x7d, 0xc5, + 0x8b, 0xde, 0x63, 0x65, 0xcc, 0x66, 0x37, 0x3d, + 0xb4, 0x24, 0x07, 0x72, 0x8a, 0xa8, 0x9d, 0x35, + 0xa4, 0x2d, 0xb4, 0xf4, 0xf3, 0xcd, 0x05, 0xcc, + 0x97, 0x06, 0x76, 0x06, 0x11, 0x23, 0x5a, 0xd0, + 0x00, 0x3c, 0x55, 0x1c, 0x28, 0x39, 0xe6, 0x5e, + 0xca, 0xde, 0xd7, 0x58, 0x5c, 0x5b, 0xe5, 0x38, + 0x9b, 0x66, 0xfb, 0xa2, 0xe9, 0x9c, 0xdd, 0x87, + 0xa2, 0x94, 0xf1, 0x07, 0x03, 0xcc, 0xe5, 0x65, + 0xca, 0x69, 0x3d, 0x0b, 0x8b, 0xb0, 0xfc, 0x42, + 0x69, 0xa6, 0x92, 0x23, 0x4e, 0x8c, 0x45, 0x33, + 0x1c, 0xe7, 0xf1, 0x7e, 0x80, 0xa6, 0xd5, 0x64, + 0xd4, 0x3a, 0x57, 0x19, 0x9f, 0x6b, 0x5d, 0x73, + 0xc5, 0x15, 0xcc, 0x63, 0x86, 0x3b, 0x88, 0xe9, + 0xc4, 0x07, 0xe8, 0xb8, 0x1d, 0x8e, 0x0a, 0xbd, + 0x0f, 0xb2, 0xab, 0x51, 0x28, 0x33, 0x64, 0x24, + 0x7c, 0x40, 0xf7, 0xac, 0x8d, 0xad, 0x71, 0x1e, + 0x11, 0x73, 0xbb, 0x48, 0x24, 0xf4, 0x25, 0xbe, + 0x9d, 0x0d, 0xb9, 0xb9, 0xc1, 0x79, 0xc7, 0x0b, + 0xdc, 0xc8, 0xe7, 0xf3, 0x8e, 0xab, 0x6a, 0xe0, + 0x1b, 0xb2, 0x9c, 0xbb, 0x55, 0x3b, 0x49, 0x0a, + 0xeb, 0x98, 0xeb, 0xc9, 0x35, 0xc1, 0xf7, 0xa4, + 0x5d, 0x3f, 0x1b, 0x8e, 0xb3, 0xc5, 0xda, 0x47, + 0x67, 0x65, 0x18, 0x8e, 0x18, 0xbb, 0xd6, 0xef, + 0x24, 0xf2, 0xb9, 0xc7, 0x94, 0x95, 0x05, 0x8b, + 0xd0, 0xb6, 0x98, 0xdc, 0xc8, 0xcb, 0x32, 0xee, + 0x59, 0x24, 0x0e, 0x91, 0xfd, 0x13, 0x9a, 0xd0, + 0xdf, 0xe2, 0x71, 0x54, 0x54, 0x6d, 0xd9, 0xc4, + 0x82, 0x7b, 0x21, 0x6e, 0xeb, 0xac, 0x7d, 0xd5, + 0xb3, 0x7b, 0xe9, 0xa1, 0x92, 0x36, 0xf3, 0xb9, + 0xa4, 0x05, 0xcc, 0x34, 0x06, 0x4a, 0xdf, 0x13, + 0x9e, 0x7c, 0x77, 0xee, 0x16, 0xed, 0x9e, 0x37, + 0x40, 0xe7, 0x3f, 0x60, 0x6c, 0x81, 0xc0, 0x80, + 0xe3, 0xc9, 0xb5, 0xb4, 0x5d, 0x5d, 0x56, 0xb3, + 0xfa, 0x0f, 0x15, 0x98, 0xb8, 0x75, 0xdb, 0x1e, + 0xeb, 0x3b, 0xa9, 0x3e, 0xb1, 0xf1, 0x80, 0xe6, + 0xbc, 0xf5, 0x5c, 0xc3, 0xcb, 0xd7, 0x08, 0x3e, + 0xb5, 0x36, 0xb3, 0xb2, 0xc2, 0xc7, 0x0f, 0x9b, + 0x98, 0xef, 0xae, 0x25, 0x76, 0xd8, 0x59, 0x20, + 0xee, 0x58, 0x06, 0xd7, 0x17, 0x37, 0x8a, 0x9b, + 0x77, 0x2c, 0x77, 0xf9, 0x39, 0x33, 0x7a, 0x16, + 0xf6, 0xff, 0x00, 0xcd, 0xdd, 0x6e, 0x26, 0x85, + 0xe5, 0xb1, 0x93, 0xc4, 0x4b, 0x58, 0xee, 0xf8, + 0x10, 0x06, 0xcd, 0x8b, 0x42, 0xc7, 0xd9, 0x76, + 0x3a, 0x19, 0x9a, 0xfb, 0xdb, 0xb9, 0x2e, 0x58, + 0xd3, 0x5e, 0x89, 0x8d, 0x11, 0xb5, 0xde, 0x11, + 0xab, 0x8a, 0xb9, 0x0b, 0x78, 0x04, 0x1e, 0x6c, + 0x23, 0x68, 0x83, 0x83, 0xa3, 0xe8, 0x80, 0xee, + 0x78, 0x29, 0xc3, 0xc3, 0x4e, 0xa5, 0x10, 0x73, + 0xef, 0x65, 0xd7, 0x96, 0xd0, 0xdc, 0x5f, 0xdb, + 0x4b, 0x23, 0x63, 0x92, 0x66, 0xc6, 0xe8, 0xda, + 0xe2, 0x07, 0x17, 0x07, 0x10, 0x75, 0x2b, 0xd4, + 0xaa, 0xc1, 0xed, 0x2f, 0x25, 0x69, 0x77, 0x90, + 0xb4, 0xb6, 0xb6, 0x95, 0xb2, 0xba, 0xd5, 0x8f, + 0xe9, 0x8b, 0x0d, 0x40, 0x73, 0xc8, 0xee, 0x6a, + 0x39, 0x68, 0x36, 0xa9, 0x5b, 0xbf, 0x65, 0xb8, + 0xf9, 0x67, 0x2e, 0xb5, 0xbc, 0x92, 0x08, 0x5c, + 0x6b, 0xd1, 0x39, 0x82, 0x4e, 0x1e, 0xb3, 0x5d, + 0x56, 0xfb, 0xeb, 0x6a, 0x7f, 0x66, 0xd8, 0x67, + 0xd9, 0xc3, 0x6b, 0x0c, 0xd2, 0xc2, 0xe8, 0xdc, + 0x5f, 0x24, 0xe0, 0x35, 0xcf, 0x90, 0x91, 0x4e, + 0xea, 0xbb, 0x00, 0x1c, 0x80, 0x20, 0xd9, 0xb1, + 0xff, 0x00, 0x1f, 0x33, 0xff, 0x00, 0xdb, 0x9f, + 0xe2, 0x39, 0x56, 0xfd, 0x95, 0x6c, 0xc9, 0x5f, + 0x79, 0x06, 0x78, 0xe1, 0x5e, 0x21, 0xc3, 0xc5, + 0x16, 0x0c, 0x61, 0x44, 0x8e, 0x31, 0x08, 0x0d, + 0xbf, 0x4a, 0x40, 0xe2, 0xa1, 0x04, 0x71, 0x53, + 0x75, 0x76, 0xa8, 0xfd, 0x35, 0xa3, 0xed, 0x74, + 0xf4, 0xf3, 0x4f, 0x05, 0xcc, 0x97, 0x06, 0x76, + 0x08, 0xcb, 0x64, 0x6b, 0x40, 0x00, 0x1e, 0x2a, + 0x8e, 0x14, 0x1c, 0xee, 0xf2, 0xc6, 0xd2, 0xdf, + 0x56, 0x4d, 0x67, 0x96, 0xe2, 0x65, 0x99, 0xba, + 0x77, 0x4c, 0xe6, 0x9a, 0x11, 0x1c, 0x84, 0xb9, + 0x8f, 0x06, 0x9b, 0xbb, 0xa0, 0x55, 0x9b, 0x2d, + 0xa5, 0x74, 0x2e, 0x26, 0xc8, 0x5e, 0xcf, 0x2c, + 0xd2, 0x46, 0xe2, 0x04, 0x6d, 0x86, 0x66, 0xbd, + 0xef, 0xe2, 0xe5, 0x60, 0xa0, 0xad, 0x06, 0xd5, + 0x63, 0xd4, 0x3a, 0x4b, 0x19, 0x9e, 0xe1, 0x92, + 0x7e, 0x28, 0x6e, 0x98, 0x38, 0x5b, 0x71, 0x1d, + 0x38, 0xb8, 0x7f, 0x45, 0xc0, 0xec, 0x70, 0x50, + 0x10, 0xfb, 0x2b, 0xb4, 0x6c, 0x80, 0xcd, 0x90, + 0x91, 0xf1, 0x7e, 0x83, 0x23, 0x0c, 0x24, 0x75, + 0x38, 0x8b, 0x9d, 0xda, 0x41, 0x21, 0xa4, 0xbf, + 0x2d, 0xd9, 0x63, 0x6f, 0xb2, 0x78, 0x71, 0x74, + 0xeb, 0x76, 0x01, 0xe7, 0x22, 0x56, 0x92, 0xea, + 0xc6, 0x0b, 0xe8, 0xc0, 0x37, 0xec, 0x3b, 0x68, + 0xa2, 0x63, 0x83, 0x43, 0xea, 0xdc, 0x84, 0xcc, + 0xb7, 0x6c, 0xb8, 0xfb, 0xb7, 0x0e, 0x90, 0x49, + 0x56, 0xc6, 0x25, 0x24, 0xf7, 0x44, 0x46, 0x4b, + 0x9a, 0x4f, 0x29, 0xdc, 0xaf, 0x16, 0x16, 0x16, + 0x98, 0xeb, 0x48, 0xec, 0xac, 0xe3, 0x11, 0x5b, + 0xc4, 0x28, 0xd6, 0x6f, 0xdf, 0xbc, 0xba, 0xbb, + 0xc9, 0xe5, 0x55, 0x8c, 0xaf, 0xb3, 0x5c, 0x4d, + 0xe4, 0xee, 0x9e, 0xce, 0x67, 0xd8, 0x97, 0x9e, + 0x27, 0x46, 0xd0, 0x1f, 0x18, 0x24, 0xfc, 0x50, + 0x68, 0x47, 0x65, 0x05, 0x3f, 0x54, 0xe9, 0x88, + 0xf4, 0xf4, 0xb0, 0x18, 0x2f, 0x9b, 0x72, 0x65, + 0x24, 0xb5, 0xa0, 0x70, 0xca, 0xce, 0x1a, 0x77, + 0x47, 0x85, 0xc7, 0xb2, 0xba, 0x4e, 0x94, 0xbb, + 0xba, 0xbd, 0xd3, 0xb6, 0x37, 0x37, 0x84, 0xba, + 0x77, 0xc7, 0xdd, 0x3d, 0xdb, 0xdc, 0x03, 0x8b, + 0x5a, 0xe3, 0xce, 0x02, 0x81, 0xb1, 0xf6, 0x5f, + 0x8d, 0x86, 0x61, 0x2d, 0xed, 0xdc, 0x97, 0x6d, + 0x06, 0xa6, 0x20, 0xd1, 0x1b, 0x5d, 0x4e, 0x47, + 0x1a, 0xb9, 0xd4, 0x57, 0x28, 0xe3, 0x64, 0x6c, + 0x6c, 0x71, 0xb4, 0x31, 0x8c, 0x01, 0xad, 0x6b, + 0x76, 0x00, 0x06, 0xc0, 0x02, 0x0f, 0xa4, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x11, 0x99, 0x6f, 0xae, 0x87, 0x98, 0xf6, 0xd4, + 0xdb, 0x7b, 0xd1, 0xcc, 0xa1, 0x32, 0xdf, 0x5d, + 0x0f, 0x31, 0xed, 0xa9, 0xb6, 0xf7, 0xa3, 0x99, + 0x79, 0xd8, 0x3e, 0x7b, 0x1d, 0xa6, 0xd7, 0xe9, + 0x97, 0x45, 0xde, 0x0d, 0x9d, 0x15, 0x6b, 0x61, + 0xbc, 0xf4, 0x59, 0xbc, 0x9b, 0xfc, 0x52, 0xaa, + 0x5a, 0x13, 0x75, 0xe7, 0xf2, 0xbe, 0x7a, 0xb6, + 0xde, 0x7a, 0x2c, 0xde, 0x4d, 0xfe, 0x29, 0x55, + 0x2d, 0x09, 0xba, 0xf3, 0xf9, 0x5f, 0x3d, 0x7a, + 0xb4, 0xec, 0x55, 0xde, 0x70, 0xd7, 0xc6, 0xb5, + 0xe7, 0x2d, 0x68, 0x88, 0xb3, 0x6c, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x2a, 0x27, 0xb5, 0x5f, 0x46, 0xc6, 0xf9, 0x49, + 0x7c, 0x56, 0xab, 0xda, 0x85, 0xd4, 0xba, 0x62, + 0xdf, 0x50, 0xc7, 0x6f, 0x1c, 0xf3, 0xbe, 0xdc, + 0x5b, 0xb9, 0xce, 0x69, 0x8d, 0xa1, 0xd5, 0xe2, + 0x00, 0x6d, 0xe2, 0xe6, 0x41, 0x83, 0x40, 0xff, + 0x00, 0x6a, 0x59, 0xf3, 0xc9, 0xf6, 0x8e, 0x58, + 0x7d, 0xa3, 0xff, 0x00, 0x6b, 0x4b, 0xe5, 0xa1, + 0xf1, 0x8a, 0x98, 0xc2, 0x62, 0x63, 0xc3, 0xe3, + 0x22, 0xc7, 0x45, 0x23, 0xa6, 0x64, 0x25, 0xc4, + 0x3d, 0xe0, 0x07, 0x1e, 0x27, 0x17, 0x72, 0x6c, + 0xe5, 0x5f, 0x39, 0xfc, 0x2c, 0x59, 0xcc, 0x6b, + 0xb1, 0xf3, 0x4a, 0xe8, 0x58, 0xe7, 0xb5, 0xe5, + 0xec, 0x00, 0x9a, 0xb0, 0xd7, 0xe3, 0x20, 0x80, + 0xf6, 0x5f, 0xea, 0x1b, 0x8f, 0xfc, 0x97, 0x78, + 0x8c, 0x51, 0x1e, 0xd2, 0xb1, 0x8e, 0xb5, 0xc9, + 0x5b, 0x66, 0x20, 0x1c, 0x3e, 0x70, 0x03, 0x24, + 0x70, 0xe4, 0x96, 0x2d, 0xad, 0x77, 0xba, 0xde, + 0xd2, 0xb9, 0x69, 0xcd, 0x3f, 0x0e, 0x02, 0xca, + 0x4b, 0x38, 0x66, 0x7c, 0xed, 0x92, 0x43, 0x29, + 0x73, 0xc0, 0x04, 0x12, 0x03, 0x69, 0xdc, 0xf3, + 0x2c, 0xb9, 0xdc, 0x2d, 0xb6, 0x6f, 0x1a, 0xfb, + 0x0b, 0x87, 0x18, 0xda, 0xe7, 0x35, 0xcd, 0x91, + 0xa0, 0x17, 0x35, 0xcd, 0x35, 0x04, 0x57, 0xb0, + 0x83, 0x9c, 0x62, 0x44, 0xba, 0xb3, 0x59, 0x36, + 0xea, 0xe1, 0xbf, 0xc2, 0xe2, 0x13, 0xcc, 0xdd, + 0xe1, 0xb1, 0xc4, 0x1a, 0x1a, 0xdf, 0x74, 0xd1, + 0x5f, 0x35, 0x9e, 0x4e, 0xeb, 0x19, 0xa7, 0xae, + 0x6e, 0x6d, 0x09, 0x64, 0xe4, 0xb2, 0x36, 0xc8, + 0x37, 0xb3, 0x8c, 0xf0, 0x97, 0x0e, 0xbf, 0x51, + 0x79, 0xa6, 0xb4, 0x9d, 0x9e, 0x9e, 0x33, 0xba, + 0x09, 0x9f, 0x71, 0x25, 0xc7, 0x08, 0x73, 0xe4, + 0x01, 0xa4, 0x35, 0xbf, 0x14, 0x70, 0xf5, 0xcd, + 0x54, 0xad, 0xf5, 0x95, 0xb5, 0xfd, 0xa4, 0xb6, + 0x77, 0x4c, 0xe9, 0x20, 0x99, 0xbc, 0x2f, 0x67, + 0x5b, 0xac, 0x79, 0x08, 0xde, 0x83, 0x9b, 0xe8, + 0xad, 0x37, 0x89, 0xcf, 0xb6, 0xe6, 0xef, 0x2b, + 0x3b, 0xe5, 0x9a, 0x27, 0x80, 0x61, 0xe9, 0x38, + 0x49, 0x14, 0xaf, 0x48, 0xf7, 0x1e, 0xe8, 0xd5, + 0x45, 0x6a, 0x58, 0xf1, 0x30, 0x6a, 0x17, 0x41, + 0x89, 0x0d, 0x16, 0x70, 0x98, 0xd9, 0x56, 0x12, + 0xe6, 0x97, 0x8a, 0x71, 0x9e, 0x22, 0x4d, 0x76, + 0xab, 0x5b, 0xbd, 0x96, 0x5a, 0x74, 0xf5, 0x8f, + 0x23, 0x2b, 0x60, 0x3f, 0x14, 0xb0, 0x17, 0xd3, + 0xa9, 0xc5, 0xc4, 0x07, 0xbc, 0xb6, 0xae, 0xfd, + 0x99, 0xe1, 0xa6, 0x6c, 0x2d, 0xb6, 0x9a, 0x5b, + 0x51, 0x13, 0x38, 0x5c, 0x5b, 0xc2, 0xf3, 0x23, + 0xab, 0x5e, 0x37, 0x17, 0x72, 0xf3, 0x20, 0xb7, + 0x8d, 0xc3, 0x99, 0x17, 0xc4, 0x2c, 0x74, 0x70, + 0xc7, 0x1b, 0xde, 0x64, 0x73, 0x1a, 0x1a, 0xe7, + 0x91, 0x42, 0xe2, 0x05, 0x38, 0x8f, 0x3a, 0xfb, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, + 0x1d, 0xa8, 0xfd, 0x47, 0x79, 0xe4, 0xfe, 0x73, + 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, 0xbb, 0xfb, + 0x4d, 0x5b, 0x1a, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, + 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, + 0xbf, 0xb4, 0xd5, 0x78, 0xe1, 0xce, 0x96, 0x33, + 0xcc, 0x53, 0xb9, 0x3a, 0xd6, 0x24, 0x44, 0x54, + 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, 0x2d, 0x5c, + 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, 0xa5, 0x6d, + 0x2d, 0x5c, 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, + 0xa5, 0x4d, 0x39, 0xe1, 0x5b, 0x9b, 0x15, 0x68, + 0x9d, 0x48, 0x2d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, + 0x7c, 0x55, 0x3c, 0xa0, 0x74, 0x9f, 0xa3, 0xdc, + 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0xd3, 0x11, 0xc5, + 0xab, 0x4f, 0xdc, 0xc3, 0x03, 0xcb, 0x5b, 0xd1, + 0x3a, 0xc4, 0x44, 0x59, 0x3a, 0x44, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x51, 0x7a, 0x97, 0x2f, 0x26, + 0x17, 0x0f, 0x2e, 0x46, 0x28, 0xdb, 0x33, 0xe2, + 0x73, 0x1a, 0x23, 0x79, 0x20, 0x1e, 0x37, 0x06, + 0xef, 0x1c, 0xeb, 0x36, 0x0f, 0x20, 0xfc, 0x9e, + 0x22, 0xd7, 0x21, 0x23, 0x04, 0x4f, 0xb9, 0x67, + 0x1b, 0x98, 0xd2, 0x48, 0x1b, 0x48, 0xd8, 0x4f, + 0x32, 0x0d, 0xe4, 0x40, 0x2a, 0x40, 0x55, 0xdd, + 0x33, 0xaa, 0x2e, 0x33, 0x79, 0x0b, 0xfb, 0x49, + 0x6d, 0xd9, 0x0b, 0x6c, 0x8d, 0x1a, 0xe6, 0x38, + 0x92, 0xee, 0xed, 0xcc, 0xdb, 0xc5, 0xcc, 0x82, + 0xc4, 0x8a, 0x01, 0xba, 0x96, 0x77, 0x6a, 0xf7, + 0x69, 0xee, 0x81, 0x9d, 0x0b, 0x63, 0xe3, 0xe9, + 0xea, 0x78, 0xab, 0xd1, 0x89, 0x29, 0x4d, 0xcb, + 0x6f, 0x33, 0xa8, 0x6c, 0x70, 0xf2, 0xda, 0xc1, + 0x38, 0x73, 0xe7, 0xbd, 0x90, 0x47, 0x04, 0x6d, + 0x1d, 0x57, 0x06, 0x17, 0x17, 0x6e, 0x00, 0x55, + 0x04, 0xa2, 0x21, 0xdf, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x45, 0x82, 0xfa, 0xe1, 0xd6, + 0xb6, 0x57, 0x17, 0x4d, 0x68, 0x71, 0x82, 0x27, + 0xc8, 0x1a, 0x77, 0x12, 0xc6, 0x97, 0x53, 0xde, + 0x51, 0xda, 0x53, 0x3b, 0x2e, 0x7b, 0x15, 0xe7, + 0xf3, 0x42, 0xd8, 0x1d, 0xd2, 0x3a, 0x3e, 0x06, + 0x12, 0x45, 0x1b, 0x4d, 0xbd, 0xd7, 0x3a, 0x09, + 0x84, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, + 0x1f, 0xa8, 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, + 0x90, 0x51, 0xfa, 0x83, 0xd5, 0x33, 0xfc, 0x9f, + 0x18, 0x2b, 0xdb, 0xdb, 0xa7, 0x4c, 0x32, 0xc4, + 0xf0, 0x2e, 0xee, 0x57, 0xa9, 0xee, 0x95, 0xf5, + 0x43, 0x7c, 0x37, 0xf6, 0xd4, 0xb3, 0xf7, 0x28, + 0x9d, 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, 0xa9, + 0x67, 0xee, 0x53, 0x77, 0x8b, 0x5e, 0xf4, 0xa3, + 0x0d, 0xc0, 0xb7, 0xbb, 0x0e, 0x73, 0x75, 0xfe, + 0x4f, 0x1e, 0x55, 0x9f, 0x62, 0x15, 0xfd, 0x50, + 0x2e, 0xbf, 0xc9, 0xe3, 0xca, 0xb3, 0xec, 0x42, + 0xbf, 0xae, 0x5b, 0x39, 0xeb, 0xdf, 0x97, 0xb1, + 0xf1, 0x4c, 0xd8, 0x3f, 0xe3, 0x5b, 0x11, 0x11, + 0x6c, 0xf3, 0x44, 0x44, 0x40, 0x44, 0x55, 0xbd, + 0x5d, 0xaa, 0xae, 0xb4, 0xfb, 0xec, 0xd9, 0x6f, + 0x6c, 0xcb, 0x93, 0x77, 0xc7, 0x5e, 0x37, 0x39, + 0xb4, 0x2d, 0x2d, 0x02, 0x9c, 0x3d, 0x5e, 0x24, + 0x16, 0x44, 0x54, 0xdf, 0xcd, 0x5a, 0xd7, 0xff, + 0x00, 0xe1, 0xb7, 0x7f, 0xfa, 0x8b, 0x1c, 0x9a, + 0xff, 0x00, 0x2f, 0x61, 0x23, 0x3f, 0x19, 0xc2, + 0x49, 0x6b, 0x13, 0xcd, 0x38, 0xda, 0x5c, 0x3b, + 0x1c, 0x6d, 0xa1, 0x3d, 0x6a, 0xa0, 0xbb, 0x22, + 0xc1, 0x63, 0x7b, 0x6d, 0x7f, 0x69, 0x15, 0xe5, + 0xa3, 0xfa, 0x48, 0x26, 0x68, 0x73, 0x1d, 0xbb, + 0xdc, 0x23, 0xaa, 0x39, 0x56, 0x74, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x50, 0x7a, 0xbb, 0x50, + 0xcd, 0xa7, 0xec, 0x22, 0xbb, 0x86, 0x16, 0x5c, + 0x3a, 0x59, 0x7a, 0x22, 0xd7, 0x92, 0xd0, 0x07, + 0x0b, 0x9d, 0x5e, 0xe7, 0x99, 0x4c, 0xc3, 0x21, + 0x92, 0x18, 0xe4, 0x22, 0x85, 0xec, 0x6b, 0x88, + 0xea, 0x71, 0x0a, 0xa0, 0xfb, 0x44, 0x55, 0x3c, + 0xa6, 0xa8, 0xd4, 0xf6, 0x99, 0x1b, 0x8b, 0x6b, + 0x5c, 0x23, 0xae, 0x6d, 0xe2, 0x79, 0x6c, 0x53, + 0x81, 0x25, 0x1e, 0xdf, 0xd2, 0xee, 0x45, 0x10, + 0x5b, 0x11, 0x50, 0x65, 0xf6, 0x85, 0xa8, 0x21, + 0xb9, 0x65, 0xa4, 0xb8, 0x66, 0xc7, 0x73, 0x2d, + 0x3a, 0x38, 0x5c, 0x64, 0x0f, 0x75, 0x77, 0x51, + 0xb4, 0xeb, 0x2d, 0x8f, 0xce, 0x5a, 0xbf, 0xff, + 0x00, 0xe1, 0xd7, 0x76, 0x25, 0xff, 0x00, 0x44, + 0x17, 0x64, 0x50, 0x31, 0xea, 0x1b, 0xe7, 0x6a, + 0x81, 0x84, 0x36, 0x80, 0x5b, 0x18, 0x84, 0x86, + 0xeb, 0xba, 0xad, 0x4c, 0x62, 0x4e, 0x1d, 0xdc, + 0x3b, 0xcd, 0x14, 0xf2, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x20, 0xde, 0x11, 0x06, 0xf0, 0x82, 0x81, + 0xa3, 0x7f, 0xbe, 0x2f, 0xb9, 0xae, 0x3e, 0xd0, + 0x2e, 0x90, 0xb9, 0xbe, 0x8d, 0xfe, 0xf8, 0xbe, + 0xe6, 0xb8, 0xfb, 0x40, 0xba, 0x42, 0xc7, 0x0f, + 0xb1, 0xe7, 0x4b, 0xd3, 0xf8, 0xcf, 0x33, 0x4f, + 0xaa, 0xb7, 0xa9, 0x17, 0x9b, 0xfa, 0x98, 0xfc, + 0x3f, 0x80, 0xac, 0xd6, 0x9e, 0x8d, 0x17, 0x82, + 0x3b, 0x4b, 0x0e, 0x6f, 0xea, 0x63, 0xf0, 0xfe, + 0x02, 0xb3, 0x5a, 0x7a, 0x34, 0x5e, 0x08, 0xed, + 0x2e, 0x2b, 0x3f, 0xd9, 0xe2, 0x3d, 0x55, 0x0e, + 0x3a, 0xb9, 0x7b, 0x7b, 0xf2, 0xca, 0x88, 0x8b, + 0xd3, 0x60, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0xad, 0x6a, 0x3d, + 0x60, 0xec, 0x65, 0xe3, 0x31, 0x58, 0xdb, 0x63, + 0x7d, 0x93, 0x90, 0x0f, 0xe1, 0x8a, 0xf0, 0xb7, + 0x8b, 0xbd, 0x04, 0x37, 0x69, 0x3c, 0xb4, 0x51, + 0xe7, 0x27, 0xed, 0x31, 0x83, 0xa6, 0x38, 0xe8, + 0x5c, 0xc1, 0xb4, 0xc4, 0x1a, 0xd2, 0xea, 0x73, + 0x09, 0x78, 0x90, 0x5d, 0x51, 0x57, 0x74, 0xc6, + 0xaf, 0x87, 0x37, 0x24, 0x96, 0x77, 0x10, 0x9b, + 0x3c, 0x8c, 0x00, 0x97, 0xc0, 0x49, 0xa3, 0x80, + 0x34, 0x71, 0x6f, 0x16, 0xda, 0x8e, 0x50, 0x55, + 0x89, 0x01, 0x11, 0x10, 0x11, 0x56, 0x75, 0x66, + 0xa9, 0xbe, 0xc5, 0x5d, 0x5a, 0xe3, 0x31, 0x50, + 0x36, 0x7b, 0xfb, 0xca, 0x16, 0xf1, 0x8a, 0x80, + 0x0b, 0xb8, 0x1a, 0x03, 0x41, 0x15, 0x24, 0xf5, + 0xd6, 0xf6, 0x9d, 0x97, 0x53, 0x48, 0xc9, 0xff, + 0x00, 0x30, 0x45, 0x14, 0x4f, 0x05, 0xbd, 0x00, + 0x8a, 0x9b, 0x41, 0xaf, 0x15, 0x78, 0x5c, 0xe1, + 0xb3, 0x62, 0x09, 0x84, 0x44, 0x40, 0x45, 0x13, + 0xa8, 0xb5, 0x1d, 0xb6, 0x06, 0x18, 0x5f, 0x34, + 0x6e, 0x9a, 0x5b, 0x97, 0xf0, 0x43, 0x1b, 0x76, + 0x02, 0x45, 0x2a, 0x5c, 0xee, 0x40, 0x2a, 0xa5, + 0x90, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x46, 0x65, 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, + 0x6d, 0xef, 0x47, 0x32, 0x84, 0xcb, 0x7d, 0x74, + 0x3c, 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, + 0xe7, 0x60, 0xf9, 0xec, 0x76, 0x9b, 0x5f, 0xa6, + 0x5d, 0x17, 0x78, 0x36, 0x74, 0x55, 0xad, 0x86, + 0xf3, 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, 0xa9, + 0x68, 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xea, 0xdb, + 0x79, 0xe8, 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, + 0xb4, 0x26, 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0xea, + 0xd3, 0xb1, 0x57, 0x79, 0xc3, 0x5f, 0x1a, 0xd7, + 0x9c, 0xb5, 0xa2, 0x22, 0xcd, 0xb0, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x8b, 0x1d, 0xc4, + 0xf1, 0xdb, 0xdb, 0xcb, 0x71, 0x29, 0xa4, 0x70, + 0xb1, 0xd2, 0x3c, 0xfe, 0xab, 0x47, 0x11, 0x41, + 0x92, 0x84, 0xa6, 0xed, 0xea, 0x9f, 0x23, 0x2e, + 0x6f, 0x6e, 0x2d, 0x4e, 0x46, 0x01, 0x7d, 0x71, + 0x7d, 0x03, 0xae, 0xd9, 0x6d, 0x25, 0xc3, 0xad, + 0xed, 0xe0, 0x8c, 0x16, 0x86, 0xc6, 0xd6, 0xb5, + 0xa7, 0x89, 0xf4, 0x70, 0xab, 0x8a, 0xcf, 0x8d, + 0xba, 0x16, 0x90, 0x5a, 0xe4, 0x6c, 0xfa, 0x48, + 0xf1, 0x97, 0x13, 0xf9, 0xa5, 0xdd, 0x94, 0xb2, + 0x19, 0x9b, 0x0c, 0x85, 0xe6, 0x26, 0xcb, 0x04, + 0x84, 0x93, 0xc3, 0xc7, 0xb0, 0xed, 0xa1, 0x05, + 0x05, 0xa5, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x47, 0x6a, + 0x3f, 0x51, 0xde, 0x79, 0x3f, 0x9c, 0xd5, 0xaf, + 0xa1, 0xbd, 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x56, + 0xc6, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, 0xf9, 0xcd, + 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, 0xef, 0xed, + 0x35, 0x5e, 0x38, 0x73, 0xa5, 0x8c, 0xf3, 0x14, + 0xee, 0x4e, 0xb5, 0x89, 0x11, 0x15, 0x1b, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x0b, 0x57, 0x21, 0xe8, + 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x5b, 0x4b, 0x57, + 0x21, 0xe8, 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x53, + 0x4e, 0x78, 0x56, 0xe6, 0xc5, 0x5a, 0x27, 0x52, + 0x0b, 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, 0x15, + 0x4f, 0x28, 0x1d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, + 0x7c, 0x55, 0x3c, 0xb4, 0xc4, 0x71, 0x6a, 0xd3, + 0xf7, 0x30, 0xc0, 0xf2, 0xd6, 0xf4, 0x4e, 0xb1, + 0x11, 0x16, 0x4e, 0x91, 0x11, 0x10, 0x11, 0x11, + 0x05, 0x73, 0xda, 0x17, 0xf6, 0xa5, 0xd7, 0x87, + 0x0f, 0xda, 0x35, 0x6d, 0x68, 0xef, 0xed, 0x6c, + 0x67, 0x91, 0xf9, 0xce, 0x5a, 0xde, 0xd0, 0x01, + 0x3a, 0x52, 0xea, 0x9c, 0x8f, 0x84, 0xff, 0x00, + 0xfa, 0x8d, 0x5b, 0x3a, 0x34, 0x83, 0xa5, 0xb1, + 0xb4, 0xe4, 0x86, 0x87, 0x9c, 0x39, 0xc8, 0x26, + 0x9b, 0xdf, 0x0e, 0x75, 0x42, 0xf6, 0x77, 0xeb, + 0xcc, 0xdf, 0x85, 0xff, 0x00, 0xdd, 0x7a, 0xbe, + 0xb7, 0xbe, 0x1c, 0xea, 0x83, 0xec, 0xe4, 0xf1, + 0x66, 0x73, 0x6f, 0x1d, 0xe9, 0x70, 0xdb, 0xcf, + 0x2b, 0xca, 0x0c, 0xb1, 0x7f, 0x94, 0xe4, 0xf2, + 0x07, 0xec, 0x02, 0x8d, 0xd6, 0xf7, 0x79, 0x97, + 0xe7, 0xac, 0x7a, 0x7b, 0x36, 0xc6, 0x2d, 0xe6, + 0x23, 0x1f, 0x47, 0x57, 0xa7, 0x02, 0x46, 0x16, + 0xd7, 0x6f, 0x73, 0x53, 0x45, 0x25, 0x17, 0xf9, + 0x4e, 0x4f, 0x20, 0x7e, 0xc0, 0x27, 0xb4, 0x0f, + 0x5e, 0xe0, 0x3c, 0xaf, 0xff, 0x00, 0x76, 0x34, + 0x13, 0x33, 0x67, 0x33, 0x36, 0x9a, 0x72, 0xef, + 0x2b, 0x91, 0xb1, 0x65, 0xb5, 0xe5, 0xb1, 0xee, + 0x2d, 0xb8, 0xb8, 0x9a, 0xe6, 0x97, 0x35, 0xa1, + 0xc5, 0xcd, 0x27, 0xf4, 0x94, 0x21, 0xd7, 0x79, + 0xeb, 0xe8, 0xa3, 0x7e, 0x17, 0x17, 0xe7, 0x3d, + 0x14, 0x6d, 0x75, 0xe3, 0xc3, 0x5e, 0xf6, 0xb6, + 0x43, 0xb4, 0xb1, 0xb4, 0x23, 0x70, 0x53, 0xfa, + 0xe7, 0xfb, 0x5b, 0x25, 0xe0, 0x37, 0xed, 0x18, + 0xb1, 0xe8, 0x38, 0x59, 0x0e, 0x95, 0xb2, 0x2c, + 0x14, 0x32, 0xf1, 0xc8, 0xf3, 0xd5, 0x73, 0x9e, + 0x76, 0xf6, 0x02, 0x0f, 0x9c, 0xc6, 0xad, 0x18, + 0x7c, 0x65, 0x9c, 0xd7, 0x56, 0xc5, 0xd9, 0x2b, + 0xd6, 0x02, 0xcb, 0x16, 0x13, 0xb1, 0xc4, 0x0a, + 0xd5, 0xd4, 0xad, 0x01, 0x34, 0xdd, 0x5a, 0xad, + 0x07, 0xe6, 0xbd, 0xa1, 0xf4, 0x66, 0xe0, 0x61, + 0xa1, 0x11, 0x01, 0xc5, 0xd1, 0x56, 0xb2, 0x53, + 0x9b, 0xa4, 0xaf, 0xbc, 0xb7, 0xf5, 0x3d, 0xf6, + 0x99, 0xc6, 0xcf, 0x6d, 0x7f, 0x96, 0x84, 0x4f, + 0x7f, 0x16, 0xdb, 0x46, 0xb4, 0x17, 0x49, 0xdc, + 0x9a, 0xd7, 0x78, 0x00, 0x02, 0x79, 0x56, 0x8b, + 0x35, 0xae, 0x6e, 0xf6, 0x9f, 0x85, 0xe9, 0xfb, + 0x89, 0x38, 0xbb, 0xd7, 0xca, 0x4b, 0x5b, 0xe2, + 0x81, 0xef, 0xa0, 0x93, 0xd2, 0xba, 0xa2, 0x2d, + 0x41, 0x6f, 0x2d, 0x61, 0x36, 0xf7, 0x56, 0xc4, + 0x09, 0xe1, 0xad, 0x47, 0x75, 0xb9, 0xcd, 0x27, + 0x93, 0x61, 0xde, 0xa7, 0x15, 0x0b, 0xd9, 0xe3, + 0xa7, 0x76, 0xa0, 0xcd, 0x1b, 0x86, 0x08, 0xa7, + 0x76, 0xd9, 0x63, 0x6e, 0xd0, 0xd7, 0xf4, 0xae, + 0xe2, 0x68, 0xe6, 0x2b, 0x3c, 0xfe, 0xd1, 0xa7, + 0x86, 0x79, 0x22, 0xfc, 0x1e, 0x57, 0x74, 0x6f, + 0x73, 0x38, 0x83, 0xdd, 0x43, 0xc2, 0x69, 0x5f, + 0xab, 0xe5, 0x41, 0x6a, 0xcc, 0xfa, 0x9e, 0xff, + 0x00, 0xff, 0x00, 0x1a, 0x6f, 0x11, 0xca, 0x03, + 0xd9, 0x9f, 0xf6, 0xd7, 0xff, 0x00, 0xe4, 0x49, + 0xda, 0x6a, 0xcf, 0x67, 0xa8, 0x1f, 0x9d, 0xd3, + 0xd9, 0x59, 0xdf, 0x68, 0xeb, 0x33, 0x0c, 0x32, + 0xc6, 0x18, 0xf2, 0x49, 0x35, 0x89, 0xce, 0xae, + 0xd6, 0xb5, 0x45, 0x68, 0xf9, 0xa4, 0xb7, 0xd0, + 0x17, 0xf3, 0xc7, 0xb1, 0xf1, 0xf9, 0xcb, 0x9a, + 0x46, 0xf0, 0x78, 0x05, 0x10, 0x6d, 0xde, 0xeb, + 0x4b, 0xeb, 0x9c, 0x8c, 0x98, 0xcd, 0x35, 0x62, + 0x32, 0x12, 0xc3, 0x51, 0x2d, 0xc3, 0xcf, 0xf0, + 0xc1, 0x06, 0x84, 0x8a, 0x16, 0xec, 0x07, 0x94, + 0x95, 0x88, 0xeb, 0x2c, 0xee, 0x22, 0xe6, 0x38, + 0xf5, 0x36, 0x35, 0xb0, 0x5b, 0xcc, 0x68, 0xdb, + 0x98, 0x0d, 0x40, 0xfd, 0xe7, 0x03, 0x4e, 0xa5, + 0x6a, 0xb3, 0x7b, 0x32, 0xb6, 0x8a, 0x3d, 0x3c, + 0xf9, 0xda, 0x07, 0x49, 0x3c, 0xef, 0xe9, 0x1d, + 0xcb, 0x46, 0x51, 0xad, 0x0a, 0x4f, 0x59, 0x5b, + 0x45, 0x71, 0xa6, 0x32, 0x02, 0x50, 0x0f, 0x47, + 0x11, 0x95, 0x9d, 0x67, 0x30, 0x87, 0x34, 0x8e, + 0xd2, 0x0c, 0x3a, 0xa7, 0x52, 0xdc, 0x61, 0x6c, + 0x2d, 0x72, 0x16, 0x90, 0xc7, 0x77, 0x6d, 0x3b, + 0xc3, 0x5e, 0xf2, 0x48, 0xa3, 0x5c, 0x38, 0x9a, + 0xe6, 0xf0, 0xf5, 0x40, 0x2a, 0x70, 0x5c, 0x42, + 0x6d, 0xc5, 0xcf, 0x17, 0xf0, 0x4b, 0x3a, 0x5e, + 0x2f, 0xd4, 0xa7, 0x1d, 0x7b, 0x0a, 0x99, 0x8d, + 0xb4, 0x93, 0x31, 0xec, 0xd5, 0xd6, 0xce, 0xee, + 0xe4, 0x89, 0xb2, 0x18, 0x2b, 0xb4, 0xd6, 0x17, + 0x97, 0xb7, 0xde, 0xd8, 0xb1, 0x33, 0x3f, 0x4f, + 0x66, 0x6e, 0x97, 0x8b, 0xf8, 0xed, 0x69, 0xb0, + 0x1d, 0x5a, 0x93, 0xc2, 0x3f, 0xfd, 0x32, 0x82, + 0x4b, 0x49, 0xeb, 0x49, 0x73, 0xf7, 0xd7, 0x16, + 0x93, 0x40, 0xc8, 0x3a, 0x36, 0x74, 0x90, 0x96, + 0x12, 0x4b, 0x9a, 0x1d, 0x43, 0x5e, 0x2e, 0xb1, + 0x0b, 0x73, 0x55, 0x6a, 0x49, 0xb0, 0x82, 0xce, + 0x2b, 0x48, 0x19, 0x73, 0x75, 0x7b, 0x2f, 0x46, + 0xc8, 0x9e, 0x48, 0x14, 0xd8, 0x2b, 0xdc, 0xed, + 0xef, 0x9c, 0x02, 0xab, 0xdb, 0x58, 0xfe, 0x5b, + 0xd4, 0x1a, 0x76, 0x72, 0x38, 0x19, 0x7b, 0x6e, + 0xd8, 0x6e, 0x3a, 0x9c, 0x6f, 0xa8, 0x75, 0x7f, + 0x6d, 0xaa, 0x4a, 0x71, 0xf8, 0xc7, 0xb4, 0x68, + 0xe2, 0xef, 0xa0, 0xc3, 0x44, 0x1c, 0xee, 0xa7, + 0x48, 0x3b, 0xaf, 0x1d, 0xe3, 0xb0, 0x82, 0xe6, + 0x03, 0x80, 0x01, 0xd4, 0xe2, 0xa0, 0xe2, 0xa6, + 0xea, 0xf5, 0x97, 0xa8, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, 0x7f, + 0x93, 0xe3, 0x05, 0x20, 0xa3, 0xf5, 0x07, 0xaa, + 0x67, 0xf9, 0x3e, 0x30, 0x57, 0xb7, 0xb7, 0x4e, + 0x98, 0x65, 0x89, 0xe0, 0x5d, 0xdc, 0xaf, 0x53, + 0xdd, 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, 0xa9, + 0x67, 0xee, 0x51, 0x3a, 0x57, 0xd5, 0x0d, 0xf0, + 0xdf, 0xdb, 0x52, 0xcf, 0xdc, 0xa6, 0xef, 0x16, + 0xbd, 0xe9, 0x46, 0x1b, 0x81, 0x6f, 0x76, 0x1c, + 0xe6, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, 0x3e, 0xc4, + 0x2b, 0xfa, 0xa0, 0x5d, 0x7f, 0x93, 0xc7, 0x95, + 0x67, 0xd8, 0x85, 0x7f, 0x5c, 0xb6, 0x73, 0xd7, + 0xbf, 0x2f, 0x63, 0xe2, 0x99, 0xb0, 0x7f, 0xc6, + 0xb6, 0x22, 0x22, 0xd9, 0xe6, 0x88, 0x88, 0x80, + 0xa8, 0x5e, 0xd3, 0x3d, 0x33, 0x0d, 0xe1, 0x3f, + 0xc7, 0x89, 0x5f, 0x55, 0x07, 0xda, 0x83, 0x38, + 0xee, 0x31, 0x2c, 0xad, 0x38, 0xcc, 0x8d, 0xa8, + 0xe4, 0xab, 0xa3, 0x08, 0x3a, 0x03, 0x81, 0xe2, + 0x3c, 0xea, 0x03, 0x5a, 0x5e, 0x63, 0xe0, 0xd3, + 0xd7, 0x91, 0x5e, 0x39, 0x9c, 0x53, 0x46, 0x59, + 0x04, 0x44, 0x8e, 0x27, 0x48, 0x7b, 0xd2, 0xd1, + 0xbf, 0x66, 0xf5, 0x0d, 0x27, 0xb3, 0x08, 0x43, + 0x5c, 0x23, 0xca, 0xdc, 0x07, 0x8a, 0xf0, 0x97, + 0x00, 0x45, 0x7a, 0xf4, 0x70, 0x55, 0xfc, 0x56, + 0x27, 0x17, 0x61, 0xa8, 0x4e, 0x2f, 0x54, 0xc4, + 0xf7, 0xcb, 0xc4, 0x04, 0x13, 0x74, 0x87, 0xa1, + 0x75, 0x7b, 0xce, 0x2e, 0x5e, 0x17, 0x75, 0x6b, + 0xce, 0x82, 0xdf, 0xec, 0xe6, 0x29, 0xe3, 0xd3, + 0x11, 0x99, 0x41, 0x0d, 0x96, 0x69, 0x1f, 0x08, + 0x3f, 0xa0, 0x48, 0x02, 0x9c, 0xe4, 0x15, 0xf1, + 0x92, 0xd6, 0x57, 0x72, 0x64, 0x9f, 0x88, 0xd3, + 0x96, 0x7f, 0x88, 0x5d, 0x44, 0x48, 0x96, 0x57, + 0x1f, 0xe1, 0xb4, 0xb7, 0x61, 0xdc, 0x46, 0xed, + 0xd5, 0x25, 0x58, 0x2f, 0xdf, 0xe6, 0x78, 0xbb, + 0x97, 0xc0, 0xd1, 0x1f, 0x9b, 0xdb, 0xc8, 0x63, + 0x6b, 0x45, 0x00, 0xe0, 0x61, 0xe1, 0x00, 0x0e, + 0x65, 0xce, 0xb4, 0x56, 0x5b, 0x2d, 0x8d, 0xb1, + 0x9d, 0xd6, 0x18, 0x69, 0x32, 0x3e, 0x71, 0x25, + 0x64, 0xb9, 0x61, 0x3b, 0xda, 0x3b, 0xcd, 0x8d, + 0x3b, 0xab, 0x5f, 0x75, 0x04, 0xf3, 0xb5, 0x86, + 0x7f, 0x11, 0x3c, 0x6d, 0xd4, 0xd8, 0xd6, 0xc3, + 0x6b, 0x29, 0xe1, 0x17, 0x36, 0xe6, 0xa1, 0xa7, + 0x9b, 0x89, 0xc0, 0xf3, 0x56, 0xaa, 0xd5, 0x2d, + 0xed, 0xac, 0x36, 0x4e, 0xbe, 0x7c, 0x83, 0xcd, + 0x59, 0x1f, 0x4c, 0x65, 0x1b, 0x47, 0x05, 0x38, + 0xaa, 0x15, 0x2f, 0x37, 0x98, 0xd4, 0x79, 0x8c, + 0x5c, 0xf8, 0xe9, 0x74, 0xe4, 0xec, 0x13, 0x01, + 0xc2, 0xfe, 0xe9, 0xdc, 0x2e, 0x69, 0x0e, 0x6b, + 0x80, 0xe0, 0x1b, 0xa8, 0xa5, 0xf0, 0x10, 0x36, + 0x3d, 0x18, 0xcb, 0x7d, 0x43, 0x17, 0x45, 0x0c, + 0x0d, 0x91, 0xb3, 0xc7, 0x70, 0x08, 0xa4, 0x4d, + 0x79, 0x2d, 0xe2, 0x1b, 0xfa, 0x94, 0x41, 0xa3, + 0x0e, 0xac, 0xd5, 0x19, 0x8e, 0x39, 0x74, 0xfe, + 0x29, 0x86, 0xd1, 0x8e, 0x2d, 0x6c, 0xd7, 0x0e, + 0xef, 0x88, 0xf9, 0x4c, 0x1d, 0x8a, 0xaf, 0xab, + 0x0d, 0x67, 0x94, 0x83, 0x2d, 0x16, 0x2b, 0x51, + 0x58, 0x0b, 0x39, 0x2e, 0x08, 0x6c, 0x53, 0x30, + 0x9e, 0x1a, 0xbb, 0x63, 0x49, 0x04, 0xb8, 0x16, + 0x93, 0xb2, 0xa0, 0xac, 0x56, 0x9a, 0xde, 0xc6, + 0x18, 0x85, 0x8e, 0x9d, 0xc3, 0xdc, 0xdd, 0x5b, + 0xc1, 0x56, 0xc7, 0xc0, 0x0b, 0x59, 0xb4, 0xd4, + 0xee, 0x0f, 0x76, 0xf3, 0xca, 0xa1, 0x75, 0x2e, + 0x43, 0x35, 0x7f, 0x93, 0xc4, 0xcd, 0x94, 0xc7, + 0x8c, 0x73, 0x44, 0xb4, 0xb7, 0x69, 0x35, 0x7b, + 0x87, 0x1c, 0x7c, 0x5c, 0x5c, 0xdb, 0x39, 0x10, + 0x4e, 0xfb, 0x52, 0xf5, 0x1d, 0xb7, 0xfe, 0x4f, + 0xcc, 0x7a, 0xb6, 0xda, 0x7a, 0x24, 0x1e, 0x49, + 0x9e, 0x28, 0x55, 0x3f, 0x6a, 0x9e, 0xa5, 0xb6, + 0xff, 0x00, 0xca, 0xf9, 0x8f, 0x52, 0x79, 0xbd, + 0x42, 0xfc, 0x0e, 0x36, 0xc6, 0x56, 0x5a, 0x3e, + 0xf7, 0xa7, 0x68, 0x61, 0x6b, 0x09, 0x1c, 0x3c, + 0x2c, 0x69, 0xa9, 0xa3, 0x5c, 0x82, 0x79, 0x2a, + 0x55, 0x2e, 0xd7, 0xda, 0x2c, 0xf7, 0x17, 0x50, + 0xdb, 0x9c, 0x44, 0xb1, 0x89, 0xa4, 0x6c, 0x7c, + 0x65, 0xc6, 0x83, 0x88, 0x86, 0xd7, 0xea, 0xf9, + 0x15, 0xd1, 0x05, 0x0f, 0x52, 0xff, 0x00, 0x91, + 0x30, 0xfc, 0xd0, 0xf8, 0xef, 0x57, 0xca, 0x95, + 0x43, 0xd4, 0xbf, 0xe4, 0x4c, 0x3f, 0x34, 0x3e, + 0x3b, 0xd5, 0xf0, 0xa0, 0xaf, 0x8d, 0x4d, 0x73, + 0xf9, 0xbc, 0xe9, 0xde, 0x85, 0x9d, 0x00, 0x8f, + 0x8f, 0xa6, 0xa9, 0xe3, 0xaf, 0x46, 0x24, 0xef, + 0x77, 0x2c, 0x3a, 0x87, 0x58, 0xfe, 0x05, 0x98, + 0x82, 0xca, 0x68, 0x5a, 0xfb, 0x49, 0x21, 0x32, + 0xc9, 0x28, 0x27, 0xa4, 0x07, 0xba, 0x01, 0xad, + 0x6e, 0xed, 0xe0, 0x6f, 0x51, 0xad, 0xff, 0x00, + 0x2a, 0x3b, 0xc8, 0x7f, 0xf6, 0x02, 0xf8, 0xd5, + 0x70, 0xb2, 0x7d, 0x7b, 0x85, 0x8a, 0x41, 0xc4, + 0xc7, 0x08, 0xaa, 0x0e, 0xe3, 0x49, 0x1e, 0xef, + 0x81, 0x06, 0x5b, 0xbd, 0x55, 0xad, 0x61, 0x80, + 0xe4, 0x8e, 0x15, 0x91, 0x63, 0xda, 0x38, 0xc8, + 0x90, 0x92, 0xf0, 0xcf, 0xd2, 0x75, 0x1c, 0x08, + 0xfd, 0x95, 0xb0, 0x35, 0xc5, 0xce, 0x46, 0x18, + 0x62, 0xd3, 0xf8, 0xf7, 0x5d, 0xdf, 0xc8, 0xce, + 0x3b, 0x86, 0x3c, 0xd2, 0x38, 0x36, 0xd2, 0x8e, + 0x77, 0x72, 0x0d, 0x79, 0x36, 0x85, 0x65, 0xc9, + 0x80, 0xec, 0x6d, 0xd8, 0x76, 0xd0, 0x60, 0x96, + 0xbf, 0xb0, 0xe5, 0x56, 0xf6, 0x5d, 0x13, 0x06, + 0x0a, 0x79, 0x40, 0xee, 0xe4, 0xb8, 0x21, 0xc7, + 0xaa, 0x1a, 0xc6, 0xd3, 0xb6, 0x83, 0xeb, 0x19, + 0xac, 0x72, 0xd1, 0xe6, 0x62, 0xc3, 0xea, 0x1b, + 0x16, 0xda, 0x4d, 0x70, 0x40, 0x8a, 0x46, 0x54, + 0x0a, 0xbb, 0xbd, 0xae, 0xd7, 0x02, 0x09, 0xd9, + 0x50, 0x55, 0x87, 0x37, 0x9a, 0xb3, 0xc2, 0x58, + 0xba, 0xf6, 0xf0, 0x92, 0xd0, 0x78, 0x63, 0x8d, + 0xbd, 0xf3, 0xde, 0x77, 0x35, 0xaa, 0xad, 0xaf, + 0x28, 0x35, 0x0e, 0x9f, 0x70, 0xde, 0x64, 0xa5, + 0x79, 0xa5, 0x8d, 0x60, 0xf6, 0x93, 0x2c, 0xaf, + 0xcd, 0x62, 0xad, 0x44, 0x66, 0xe1, 0x80, 0x19, + 0x1b, 0x6e, 0x3f, 0xf5, 0x1c, 0xe9, 0x38, 0x78, + 0x3d, 0xd0, 0xda, 0x20, 0xdd, 0x87, 0x51, 0x6b, + 0xab, 0xe8, 0xbc, 0xf6, 0xcb, 0x0f, 0x10, 0xb4, + 0x70, 0xe2, 0x8d, 0xb2, 0x13, 0xd2, 0x39, 0xbd, + 0x51, 0x57, 0xb4, 0x9e, 0xc2, 0x95, 0xd3, 0x5a, + 0xaa, 0x0c, 0xe7, 0x4b, 0x6d, 0x24, 0x46, 0xd3, + 0x23, 0x6d, 0xf5, 0xf6, 0xcf, 0xea, 0x03, 0x42, + 0x5b, 0x5a, 0x1d, 0x87, 0x78, 0x3b, 0x94, 0x77, + 0xe6, 0xcd, 0x50, 0x36, 0x0d, 0x33, 0x30, 0x1c, + 0x80, 0x39, 0xdf, 0x41, 0x46, 0x58, 0x33, 0x3d, + 0x75, 0xad, 0xad, 0xb3, 0x12, 0x62, 0x67, 0xb0, + 0x8e, 0x5f, 0xe1, 0xdc, 0xd4, 0x12, 0xda, 0x70, + 0x16, 0x97, 0x39, 0xd4, 0x1d, 0x64, 0x1d, 0x05, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x06, 0xf0, 0x88, + 0x37, 0x84, 0x14, 0x0d, 0x1b, 0xfd, 0xf1, 0x7d, + 0xcd, 0x71, 0xf6, 0x81, 0x74, 0x85, 0xcd, 0xf4, + 0x6f, 0xf7, 0xc5, 0xf7, 0x35, 0xc7, 0xda, 0x05, + 0xd2, 0x16, 0x38, 0x7d, 0x8f, 0x3a, 0x5e, 0x9f, + 0xc6, 0x79, 0x9a, 0x7d, 0x55, 0xbd, 0x48, 0xbc, + 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, + 0xf4, 0x68, 0xbc, 0x11, 0xda, 0x58, 0x73, 0x7f, + 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, + 0xa2, 0xf0, 0x47, 0x69, 0x71, 0x59, 0xfe, 0xcf, + 0x11, 0xea, 0xa8, 0x71, 0xd5, 0xcb, 0xdb, 0xdf, + 0x96, 0x54, 0x44, 0x5e, 0x9b, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x07, + 0x3c, 0xbc, 0xbc, 0x1a, 0x6b, 0x5e, 0xdc, 0x64, + 0x72, 0x31, 0x39, 0xf6, 0xb7, 0xad, 0x77, 0x45, + 0x33, 0x45, 0x48, 0x6b, 0xc3, 0x45, 0x5b, 0xd5, + 0xe1, 0x2d, 0xa1, 0x0a, 0xe3, 0x63, 0xa9, 0x30, + 0x39, 0x0a, 0x0b, 0x5b, 0xe8, 0x5c, 0xe7, 0x6e, + 0x8d, 0xce, 0xe0, 0x7f, 0xec, 0xbf, 0x84, 0xaf, + 0x19, 0x75, 0x80, 0xd4, 0x0d, 0x9e, 0xcd, 0xae, + 0x86, 0xfd, 0x90, 0x1a, 0x4d, 0x19, 0x15, 0xe1, + 0x26, 0xa3, 0xe3, 0x0d, 0xfb, 0x0e, 0xe5, 0x0d, + 0x7d, 0xec, 0xd7, 0x4f, 0xdc, 0xd5, 0xd6, 0xc6, + 0x5b, 0x37, 0x9f, 0xd0, 0x77, 0x1b, 0x3f, 0x66, + 0x4a, 0x9f, 0x7d, 0x04, 0x9b, 0xb4, 0xb5, 0x99, + 0xd4, 0x6d, 0xd4, 0x2c, 0x96, 0x48, 0xe7, 0x03, + 0x6c, 0x4d, 0xe1, 0x11, 0xbb, 0xb9, 0x2c, 0x24, + 0xf2, 0xed, 0x0b, 0xe7, 0x54, 0x6a, 0x78, 0xb0, + 0x10, 0x44, 0x1b, 0x17, 0x9c, 0xde, 0x5d, 0x38, + 0xb6, 0xde, 0x0a, 0xd2, 0xb4, 0xa0, 0xe2, 0x75, + 0x36, 0xd2, 0xa4, 0x6e, 0xde, 0xab, 0x18, 0xe9, + 0xb3, 0x1a, 0x43, 0x50, 0xdb, 0x61, 0xee, 0xee, + 0x0d, 0xd6, 0x36, 0xf4, 0x80, 0xc2, 0x49, 0x20, + 0x07, 0x1e, 0x10, 0xf6, 0x87, 0x54, 0xb4, 0x87, + 0x6f, 0x0a, 0xc5, 0xaa, 0x72, 0xf8, 0x0c, 0x4b, + 0xad, 0xe7, 0xc8, 0xdb, 0x36, 0xee, 0xf8, 0x1a, + 0xda, 0x46, 0x1a, 0x0c, 0x83, 0x84, 0xf7, 0xc1, + 0xc7, 0xbd, 0x1c, 0x48, 0x23, 0xcd, 0xc7, 0xb4, + 0xd7, 0xc7, 0xd3, 0xb6, 0xda, 0xd1, 0x80, 0x8a, + 0xf9, 0xbf, 0x72, 0x5f, 0xcd, 0xb5, 0xdb, 0xfd, + 0xd5, 0xbd, 0xa5, 0x35, 0x4c, 0xb9, 0xc6, 0xdc, + 0xdb, 0x5d, 0x40, 0x2d, 0xf2, 0x16, 0x7f, 0x58, + 0xc1, 0x5e, 0x17, 0x6d, 0xe1, 0xad, 0x1d, 0xb5, + 0xa4, 0x3b, 0x61, 0x0b, 0x4d, 0x9a, 0x9f, 0x58, + 0xde, 0xd3, 0xcc, 0x30, 0x06, 0x36, 0xbb, 0xbd, + 0x92, 0xe1, 0xc4, 0x0e, 0x73, 0xc5, 0xd1, 0xa8, + 0xed, 0x0d, 0xe7, 0x67, 0x56, 0xe6, 0x3c, 0xf4, + 0x34, 0x5d, 0x16, 0x38, 0xce, 0x23, 0xef, 0x43, + 0xfa, 0x56, 0xf1, 0x70, 0xfb, 0xa8, 0x23, 0xf2, + 0xd3, 0xea, 0x87, 0x6a, 0xec, 0x73, 0xee, 0xed, + 0xad, 0xd9, 0x95, 0x6b, 0x5b, 0xe6, 0xb0, 0xb1, + 0xdf, 0xc3, 0x70, 0xe2, 0x7d, 0x38, 0x8f, 0x11, + 0xe5, 0xaf, 0x2a, 0xba, 0xb3, 0x33, 0x79, 0x8c, + 0xc1, 0xc9, 0x91, 0xd4, 0x91, 0xc7, 0x04, 0xf1, + 0xb9, 0xc3, 0xa2, 0x80, 0xd4, 0x38, 0x1d, 0x91, + 0xb5, 0xbd, 0xd3, 0xbb, 0xa3, 0xce, 0xa0, 0x75, + 0x07, 0xf9, 0x17, 0x0b, 0xe0, 0x33, 0xc6, 0x95, + 0x79, 0xed, 0x4e, 0x47, 0xf9, 0xa6, 0x3a, 0x06, + 0xf7, 0x92, 0x4b, 0x23, 0x9c, 0x3a, 0xa5, 0xad, + 0x68, 0x6f, 0x8c, 0x50, 0x65, 0xb5, 0xcc, 0xeb, + 0xec, 0xc4, 0x7e, 0x7b, 0x8d, 0xb4, 0xb6, 0xb5, + 0xb3, 0x7d, 0x4c, 0x22, 0x63, 0xdd, 0x3c, 0x73, + 0xb8, 0xd4, 0xf3, 0xd0, 0x2d, 0xed, 0x3f, 0xaa, + 0xee, 0x6e, 0xb2, 0x0f, 0xc2, 0xe6, 0xad, 0xc5, + 0x96, 0x52, 0x31, 0x56, 0x81, 0xde, 0x48, 0x00, + 0xae, 0xcd, 0xf4, 0x34, 0xda, 0x36, 0xd0, 0xad, + 0x58, 0xb3, 0x1a, 0xf2, 0x28, 0x99, 0x14, 0x78, + 0x08, 0x83, 0x23, 0x68, 0x63, 0x00, 0x7e, 0xc0, + 0x1a, 0x28, 0x3e, 0x3a, 0x8d, 0xbb, 0xb4, 0xd6, + 0x19, 0x3c, 0xfe, 0x3b, 0x29, 0x71, 0x89, 0xf3, + 0x57, 0x5a, 0x3d, 0x81, 0xcf, 0x8d, 0xcd, 0x35, + 0x60, 0x7d, 0x49, 0x75, 0x5f, 0xc8, 0x09, 0x41, + 0x8b, 0xda, 0x24, 0x99, 0xa3, 0x7b, 0x6c, 0xcb, + 0x88, 0xa2, 0x6d, 0x9b, 0x26, 0x3e, 0x61, 0x23, + 0x4f, 0x76, 0xf3, 0x46, 0x57, 0xa4, 0xee, 0x8d, + 0x36, 0xa9, 0xeb, 0xec, 0xbe, 0xaf, 0xc7, 0xe0, + 0x2e, 0x32, 0x37, 0x96, 0xd6, 0xac, 0xba, 0xb7, + 0x95, 0xbf, 0xc3, 0x6d, 0x5e, 0xc3, 0x01, 0xee, + 0x4b, 0xbb, 0x97, 0xef, 0x0e, 0x3d, 0x85, 0xa3, + 0xed, 0x3a, 0x9f, 0xfe, 0x22, 0x9f, 0xef, 0xbf, + 0xff, 0x00, 0xb6, 0xae, 0x77, 0x56, 0xd1, 0x5d, + 0xdb, 0xcd, 0x6b, 0x38, 0xac, 0x53, 0xb1, 0xd1, + 0xbc, 0x7e, 0xab, 0x85, 0x0a, 0x0d, 0x5c, 0x26, + 0x4d, 0xb9, 0x6c, 0x4d, 0xad, 0xfb, 0x68, 0x0c, + 0xec, 0x05, 0xed, 0x1b, 0x9a, 0xf1, 0xb1, 0xed, + 0xf7, 0x08, 0x51, 0x79, 0xcd, 0x47, 0x7d, 0x6d, + 0xa8, 0x31, 0xf8, 0x4c, 0x6b, 0x23, 0x92, 0x6b, + 0xaa, 0x3a, 0xe1, 0xd2, 0x02, 0x78, 0x18, 0x4e, + 0xf1, 0xc2, 0xe1, 0xf1, 0x41, 0x2a, 0x33, 0xd9, + 0xf5, 0xcc, 0x96, 0x32, 0xe4, 0xf4, 0xfd, 0xe3, + 0xb8, 0x5f, 0x65, 0x23, 0xa5, 0x6d, 0x76, 0x77, + 0x35, 0xe1, 0x93, 0xe0, 0x77, 0xba, 0xbc, 0xd1, + 0xcd, 0x39, 0x9d, 0x45, 0x94, 0xd4, 0x92, 0x0a, + 0xc6, 0x1c, 0x60, 0xb5, 0x27, 0x90, 0x1e, 0xa7, + 0x34, 0x60, 0x76, 0x50, 0x5d, 0x91, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x04, 0x66, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, + 0xb5, 0x36, 0xde, 0xf4, 0x73, 0x28, 0x4c, 0xb7, + 0xd7, 0x43, 0xcc, 0x7b, 0x6a, 0x6d, 0xbd, 0xe8, + 0xe6, 0x5e, 0x76, 0x0f, 0x9e, 0xc7, 0x69, 0xb5, + 0xfa, 0x65, 0xd1, 0x77, 0x83, 0x67, 0x45, 0x5a, + 0xd8, 0x6f, 0x3d, 0x16, 0x6f, 0x26, 0xff, 0x00, + 0x14, 0xaa, 0x96, 0x84, 0xdd, 0x79, 0xfc, 0xaf, + 0x9e, 0xad, 0xb7, 0x9e, 0x8b, 0x37, 0x93, 0x7f, + 0x8a, 0x55, 0x4b, 0x42, 0x6e, 0xbc, 0xfe, 0x57, + 0xcf, 0x5e, 0xad, 0x3b, 0x15, 0x77, 0x9c, 0x35, + 0xf1, 0xad, 0x79, 0xcb, 0x5a, 0x22, 0x2c, 0xdb, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x0b, 0x0d, 0xed, 0xdc, 0x56, 0x56, + 0x73, 0x5e, 0x4c, 0x69, 0x15, 0xbb, 0x1d, 0x23, + 0xb9, 0x9a, 0x2b, 0x45, 0x99, 0x54, 0x3d, 0xa3, + 0xe4, 0x1f, 0x1e, 0x3a, 0xdf, 0x13, 0x6f, 0xb6, + 0xe3, 0x23, 0x20, 0x1c, 0x23, 0x79, 0x63, 0x48, + 0xd9, 0xf2, 0x9e, 0x42, 0x08, 0x4c, 0x0e, 0xa7, + 0xce, 0xc5, 0x96, 0xb0, 0xbc, 0xca, 0xdc, 0xc8, + 0xfc, 0x76, 0x51, 0xf2, 0x31, 0xac, 0x79, 0xee, + 0x1b, 0xdd, 0x70, 0x54, 0x75, 0x38, 0x5c, 0x47, + 0xb8, 0xba, 0x57, 0x59, 0x53, 0xb5, 0x6e, 0x9b, + 0x64, 0x7a, 0x36, 0x08, 0x20, 0x1f, 0xc5, 0xc4, + 0x35, 0xaf, 0x0e, 0x1b, 0xc8, 0xa5, 0x26, 0x3d, + 0x93, 0xc4, 0xa6, 0xf4, 0xb6, 0x5b, 0xf1, 0x7c, + 0x1d, 0xb5, 0xdb, 0x8d, 0x66, 0x0d, 0xe8, 0xa7, + 0xf2, 0x8c, 0xee, 0x5d, 0xd9, 0xde, 0x82, 0x07, + 0xda, 0x1e, 0x53, 0x2b, 0x63, 0x3e, 0x36, 0x2c, + 0x7d, 0xd4, 0x96, 0xbe, 0x71, 0xd2, 0x35, 0xfd, + 0x19, 0xa0, 0x27, 0x8a, 0x30, 0xd2, 0x79, 0xaa, + 0xbe, 0xbf, 0x2c, 0x6b, 0x9a, 0xff, 0x00, 0x71, + 0x1f, 0xdf, 0xff, 0x00, 0x45, 0xa7, 0xed, 0x39, + 0xc1, 0xb7, 0x78, 0x77, 0x38, 0xd1, 0xad, 0x32, + 0x12, 0x7a, 0xc1, 0xd1, 0x12, 0xac, 0x07, 0x5d, + 0xe9, 0x42, 0x49, 0x17, 0xe3, 0xfe, 0x39, 0x3e, + 0x82, 0x08, 0x0c, 0x94, 0x3a, 0xff, 0x00, 0x4f, + 0xdb, 0x9c, 0x87, 0xe2, 0x42, 0xfe, 0xde, 0x2d, + 0xb3, 0x34, 0x8e, 0x2a, 0x37, 0xaa, 0xe6, 0xbd, + 0xb5, 0xe1, 0xea, 0xd0, 0xab, 0x66, 0x9d, 0xcc, + 0x45, 0x9b, 0xc5, 0xc1, 0x7e, 0xc6, 0xf0, 0x39, + 0xf5, 0x6c, 0xb1, 0xfe, 0x8b, 0xda, 0x68, 0xe1, + 0xcd, 0xd4, 0x55, 0xad, 0x4b, 0xae, 0xb0, 0xf7, + 0x18, 0xc9, 0xf1, 0xf8, 0xb7, 0x3a, 0xee, 0xe6, + 0xf1, 0xa6, 0x21, 0x46, 0x38, 0x34, 0x07, 0x6c, + 0x27, 0xba, 0x00, 0x93, 0xd4, 0x00, 0x29, 0x9d, + 0x0f, 0x89, 0xb9, 0xc4, 0xe0, 0x61, 0x82, 0xe8, + 0x70, 0x4f, 0x2b, 0xdd, 0x3b, 0xe3, 0x3b, 0xd9, + 0xc7, 0x4a, 0x34, 0xf5, 0xe8, 0x36, 0xa0, 0xa2, + 0xfe, 0x6b, 0xcf, 0xda, 0xe6, 0xa4, 0x9a, 0x4b, + 0xc9, 0xa4, 0xb1, 0xb6, 0xbb, 0x2d, 0x96, 0x22, + 0x6a, 0xce, 0x8f, 0xa4, 0x70, 0xe1, 0xfd, 0x90, + 0x69, 0xcc, 0xba, 0xb3, 0x5c, 0xd7, 0x34, 0x39, + 0xa6, 0xad, 0x70, 0x05, 0xa7, 0xaa, 0x0e, 0xd0, + 0x57, 0x2d, 0xc6, 0xe3, 0x3f, 0x13, 0x6e, 0xaa, + 0xb7, 0x6b, 0x78, 0xa4, 0x61, 0x33, 0x44, 0x3f, + 0x5e, 0x39, 0x64, 0x77, 0xbe, 0x2a, 0x15, 0xd7, + 0x43, 0xe4, 0xbf, 0x11, 0xd3, 0x96, 0xcf, 0x73, + 0xb8, 0xa5, 0xb6, 0xad, 0xbc, 0x95, 0xdf, 0x58, + 0xfb, 0xd2, 0x79, 0xdb, 0x44, 0x1f, 0x5a, 0xcf, + 0x2d, 0x2e, 0x2b, 0x03, 0x2c, 0xb6, 0xef, 0x2c, + 0xba, 0x99, 0xcd, 0x86, 0xdd, 0xcd, 0xef, 0x83, + 0x9d, 0xbc, 0x8e, 0x66, 0x82, 0xa0, 0xf4, 0x2d, + 0xee, 0x47, 0x35, 0x06, 0x5a, 0xcf, 0x2b, 0x73, + 0x2d, 0xc3, 0x78, 0x1b, 0x15, 0x24, 0x35, 0x2d, + 0xe3, 0x12, 0x31, 0xd4, 0x5b, 0x19, 0xcf, 0xff, + 0x00, 0x33, 0xad, 0x71, 0x98, 0x71, 0xdd, 0x5b, + 0xe3, 0x87, 0x9d, 0xdd, 0x0e, 0x4e, 0x2e, 0xf8, + 0x03, 0xfb, 0xa3, 0xdd, 0x5a, 0xbe, 0xcd, 0x8d, + 0x6f, 0x73, 0x67, 0xff, 0x00, 0x75, 0xbe, 0x3c, + 0x88, 0x36, 0x4b, 0x31, 0xd3, 0x5d, 0xdb, 0x5a, + 0xea, 0x6e, 0x86, 0x17, 0xd9, 0x5a, 0xbe, 0xd1, + 0xec, 0xb8, 0xee, 0x5b, 0x2d, 0x4b, 0x38, 0x27, + 0x82, 0x43, 0xdc, 0xed, 0x6b, 0x7a, 0xb5, 0x05, + 0x67, 0xb1, 0x73, 0xf2, 0x36, 0xf6, 0x98, 0x7b, + 0x79, 0x1b, 0x77, 0x69, 0x67, 0x33, 0x64, 0xb8, + 0xc8, 0x44, 0xd2, 0xd8, 0x8c, 0x50, 0x3b, 0x8e, + 0x18, 0x81, 0xa0, 0x0e, 0x91, 0xc4, 0x0e, 0x2e, + 0x1d, 0x8a, 0xd0, 0xf6, 0x32, 0x46, 0xf0, 0xc8, + 0xd0, 0xf6, 0xf5, 0x1c, 0x01, 0x1e, 0xfa, 0xf4, + 0x00, 0x00, 0x68, 0x00, 0x01, 0xb8, 0x0d, 0x80, + 0x20, 0xf5, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x47, 0x6a, + 0x3f, 0x51, 0xde, 0x79, 0x3f, 0x9c, 0xd5, 0xaf, + 0xa1, 0xbd, 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x56, + 0xc6, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, 0xf9, 0xcd, + 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, 0xef, 0xed, + 0x35, 0x5e, 0x38, 0x73, 0xa5, 0x8c, 0xf3, 0x14, + 0xee, 0x4e, 0xb5, 0x89, 0x11, 0x15, 0x1b, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x0b, 0x57, 0x21, 0xe8, + 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x5b, 0x4b, 0x57, + 0x21, 0xe8, 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x53, + 0x4e, 0x78, 0x56, 0xe6, 0xc5, 0x5a, 0x27, 0x52, + 0x0b, 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, 0x15, + 0x4f, 0x28, 0x1d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, + 0x7c, 0x55, 0x3c, 0xb4, 0xc4, 0x71, 0x6a, 0xd3, + 0xf7, 0x30, 0xc0, 0xf2, 0xd6, 0xf4, 0x4e, 0xb1, + 0x11, 0x16, 0x4e, 0x91, 0x11, 0x10, 0x11, 0x11, + 0x06, 0x96, 0x6b, 0x1a, 0xdc, 0xa6, 0x26, 0xeb, + 0x1e, 0xe3, 0xc2, 0x6e, 0x23, 0x2d, 0x6b, 0xba, + 0x8e, 0x1b, 0x5a, 0x7b, 0x21, 0x51, 0xf0, 0x1a, + 0xaa, 0xe3, 0x4b, 0x46, 0xec, 0x26, 0x7a, 0xd6, + 0x56, 0x32, 0x17, 0x38, 0xc3, 0x23, 0x00, 0x24, + 0x02, 0x6a, 0x40, 0xe2, 0x20, 0x39, 0xb5, 0xda, + 0x08, 0x2b, 0xa2, 0xaf, 0x89, 0xa0, 0x82, 0x76, + 0xf0, 0x4f, 0x1b, 0x25, 0x6f, 0xe8, 0xbd, 0xa1, + 0xc3, 0xf7, 0xaa, 0x82, 0x99, 0x92, 0xf6, 0x95, + 0x63, 0x24, 0x0f, 0x83, 0x0f, 0x04, 0xd3, 0x5e, + 0x4a, 0x0b, 0x22, 0x2f, 0x6d, 0x03, 0x49, 0x14, + 0xaf, 0x0b, 0x4b, 0x9c, 0xe2, 0x3a, 0x8a, 0x43, + 0x41, 0xe0, 0x2e, 0x70, 0xf8, 0xd9, 0x65, 0xbd, + 0x6f, 0x05, 0xdd, 0xeb, 0x83, 0xdf, 0x19, 0xde, + 0xd6, 0x37, 0xbd, 0x0e, 0xeb, 0xed, 0x24, 0xab, + 0x04, 0x16, 0x56, 0x76, 0xe7, 0x8a, 0xde, 0xde, + 0x28, 0x5d, 0xd5, 0x8d, 0x8d, 0x61, 0xec, 0xb4, + 0x05, 0x99, 0x05, 0x1e, 0x22, 0x3f, 0xed, 0x49, + 0x36, 0xff, 0x00, 0xe8, 0x1f, 0xb0, 0x09, 0xed, + 0x20, 0x49, 0x05, 0xde, 0x1f, 0x25, 0xd1, 0xb9, + 0xd0, 0x5b, 0x4a, 0x7a, 0x42, 0x37, 0x02, 0x1c, + 0xc7, 0x81, 0x5f, 0xd6, 0x03, 0x62, 0xbb, 0xf0, + 0x33, 0x8b, 0x8f, 0x85, 0xbc, 0x7f, 0xa5, 0x41, + 0x5e, 0xca, 0x39, 0x8c, 0x7b, 0x4b, 0x1e, 0xd0, + 0xf6, 0x9d, 0xed, 0x70, 0xa8, 0x3e, 0xe1, 0x41, + 0x53, 0xce, 0x67, 0xec, 0x33, 0xba, 0x2f, 0x29, + 0x77, 0x65, 0xc6, 0x23, 0x8f, 0x86, 0x37, 0x09, + 0x00, 0x6b, 0x83, 0xb8, 0xe3, 0x77, 0x21, 0x3d, + 0x55, 0x23, 0xa2, 0x4f, 0xff, 0x00, 0xea, 0xb8, + 0xff, 0x00, 0x01, 0xde, 0x3b, 0x94, 0xcb, 0x20, + 0x82, 0x36, 0x16, 0x32, 0x26, 0x31, 0x87, 0x7b, + 0x1a, 0xd0, 0x1a, 0x79, 0xc0, 0x14, 0x5f, 0x41, + 0xad, 0x68, 0xa3, 0x40, 0x68, 0x1b, 0x80, 0x14, + 0x08, 0x28, 0x1a, 0xc0, 0x3b, 0x19, 0xac, 0x6c, + 0x73, 0x77, 0xb0, 0xba, 0x7c, 0x6b, 0x43, 0x06, + 0xc1, 0x50, 0x0b, 0x38, 0x81, 0x1d, 0x4a, 0x82, + 0x78, 0x80, 0xe5, 0x53, 0x53, 0xfb, 0x43, 0xc2, + 0x18, 0xc3, 0x71, 0xdd, 0x2e, 0x42, 0xf1, 0xfb, + 0x21, 0xb6, 0x8e, 0x37, 0x02, 0x5d, 0xc9, 0xc5, + 0x51, 0xb3, 0xae, 0xac, 0xaf, 0x63, 0x24, 0x61, + 0x64, 0x8d, 0x0f, 0x63, 0xb7, 0xb5, 0xc0, 0x10, + 0x79, 0xc1, 0x58, 0xe0, 0xb4, 0xb4, 0xb7, 0x24, + 0xdb, 0xc1, 0x14, 0x24, 0xef, 0x31, 0xb1, 0xac, + 0xf1, 0x40, 0x41, 0x43, 0xf6, 0x7e, 0xeb, 0x88, + 0x75, 0x2e, 0x56, 0xda, 0xfc, 0x08, 0xef, 0x5f, + 0x1f, 0x1c, 0xb1, 0x92, 0x2b, 0xc5, 0xc6, 0x1c, + 0xef, 0x19, 0x74, 0x2e, 0x27, 0x75, 0x4a, 0xf8, + 0xe0, 0x8c, 0x3b, 0x8c, 0x35, 0xa1, 0xdf, 0xa5, + 0x41, 0x5e, 0xca, 0xfa, 0x41, 0xa7, 0x9a, 0xa9, + 0xc3, 0xdf, 0xd7, 0xee, 0xd3, 0x78, 0x8e, 0x55, + 0xbf, 0x67, 0x70, 0xc5, 0x73, 0xa4, 0x65, 0xb7, + 0x93, 0x6c, 0x73, 0xcb, 0x34, 0x6f, 0xa7, 0x51, + 0xcd, 0x0d, 0x2a, 0xe0, 0x40, 0x22, 0x87, 0x68, + 0xea, 0x2f, 0x1a, 0xd6, 0x34, 0x51, 0x8d, 0x0d, + 0x1d, 0x46, 0x80, 0x07, 0xbc, 0x83, 0x9f, 0x60, + 0x72, 0xf2, 0xe8, 0xbb, 0x99, 0xf0, 0xd9, 0xc8, + 0x9e, 0x2d, 0x1e, 0xf3, 0x25, 0xbd, 0xd3, 0x1a, + 0x5c, 0xd3, 0xc9, 0x51, 0xd5, 0x0e, 0x03, 0x93, + 0x68, 0x2b, 0x36, 0xa3, 0xd5, 0xb1, 0x67, 0xed, + 0xbf, 0x03, 0xd3, 0xd1, 0x4b, 0x77, 0x2d, 0xd9, + 0x0d, 0x96, 0x4e, 0x12, 0xd0, 0x18, 0x0d, 0x48, + 0x15, 0xea, 0xf2, 0x93, 0xb2, 0x8a, 0xf3, 0x2c, + 0x30, 0xcc, 0xce, 0x8e, 0x68, 0xdb, 0x2b, 0x0f, + 0xc5, 0x7b, 0x43, 0x87, 0x61, 0xcb, 0xc8, 0x2d, + 0xad, 0xad, 0xc1, 0x6d, 0xbc, 0x4c, 0x84, 0x1d, + 0xe2, 0x36, 0x86, 0x57, 0xf6, 0x40, 0x41, 0xa7, + 0x80, 0xc5, 0x8c, 0x46, 0x1e, 0xdb, 0x1e, 0x48, + 0x7b, 0xa1, 0x67, 0xf1, 0x48, 0xdc, 0x5e, 0xe2, + 0x5c, 0xff, 0x00, 0x72, 0xa5, 0x73, 0x67, 0xe3, + 0xe7, 0x66, 0xa3, 0x3a, 0x53, 0xff, 0x00, 0xf9, + 0x5f, 0x91, 0x6c, 0xe1, 0xbf, 0xa9, 0x4a, 0xd7, + 0x9b, 0xa3, 0x2b, 0xac, 0xaf, 0x9e, 0x8e, 0x3e, + 0x2e, 0x3e, 0x06, 0xf1, 0xfe, 0x95, 0x05, 0x7b, + 0x28, 0x2a, 0xde, 0xd1, 0xed, 0x0c, 0x98, 0x48, + 0xaf, 0x63, 0x14, 0x93, 0x1f, 0x3b, 0x24, 0x69, + 0x1c, 0x8d, 0x77, 0x73, 0xdb, 0xe1, 0x58, 0xfd, + 0x9d, 0x41, 0x2c, 0xd6, 0xd7, 0xd9, 0xbb, 0x8e, + 0xea, 0x7c, 0x8c, 0xe7, 0xba, 0xea, 0xb5, 0x84, + 0x93, 0x4e, 0xb7, 0x13, 0x8a, 0xb7, 0x10, 0xd7, + 0x0a, 0x38, 0x07, 0x03, 0xbc, 0x11, 0x50, 0x8d, + 0x6b, 0x5a, 0x28, 0xd0, 0x1a, 0x3a, 0x80, 0x50, + 0x7b, 0xc8, 0x3d, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x05, 0x1f, 0xa8, 0x3d, 0x53, 0x3f, + 0xc9, 0xf1, 0x82, 0x90, 0x51, 0xfa, 0x83, 0xd5, + 0x33, 0xfc, 0x9f, 0x18, 0x2b, 0xdb, 0xdb, 0xa7, + 0x4c, 0x32, 0xc4, 0xf0, 0x2e, 0xee, 0x57, 0xa9, + 0xee, 0x95, 0xf5, 0x43, 0x7c, 0x37, 0xf6, 0xd4, + 0xb3, 0xf7, 0x28, 0x9d, 0x2b, 0xea, 0x86, 0xf8, + 0x6f, 0xed, 0xa9, 0x67, 0xee, 0x53, 0x77, 0x8b, + 0x5e, 0xf4, 0xa3, 0x0d, 0xc0, 0xb7, 0xbb, 0x0e, + 0x73, 0x75, 0xfe, 0x4f, 0x1e, 0x55, 0x9f, 0x62, + 0x15, 0xfd, 0x50, 0x2e, 0xbf, 0xc9, 0xe3, 0xca, + 0xb3, 0xec, 0x42, 0xbf, 0xae, 0x5b, 0x39, 0xeb, + 0xdf, 0x97, 0xb1, 0xf1, 0x4c, 0xd8, 0x3f, 0xe3, + 0x5b, 0x11, 0x11, 0x6c, 0xf3, 0x44, 0x44, 0x40, + 0x54, 0x2f, 0x69, 0xa4, 0x0b, 0xcc, 0x35, 0x7f, + 0x49, 0xfe, 0x3c, 0x4a, 0xfa, 0xbe, 0x5d, 0x1c, + 0x6e, 0xa7, 0x1b, 0x1a, 0xea, 0x6e, 0xe2, 0x00, + 0xd3, 0xb2, 0x83, 0xed, 0xdd, 0xf1, 0xe7, 0x55, + 0xad, 0x73, 0xa7, 0x06, 0x67, 0x19, 0xd3, 0xdb, + 0xb6, 0xb7, 0xd6, 0x60, 0xbe, 0x2a, 0x6f, 0x7b, + 0x37, 0xbe, 0x3f, 0x84, 0x75, 0xd5, 0x91, 0x10, + 0x55, 0x74, 0x46, 0x7e, 0x3c, 0xee, 0x21, 0xf8, + 0xeb, 0xc7, 0x71, 0x5e, 0x5b, 0x33, 0xa2, 0x98, + 0x1d, 0xf2, 0x44, 0x47, 0x00, 0x7f, 0x3f, 0x21, + 0x50, 0xd8, 0x6c, 0x8c, 0xda, 0x1e, 0xfa, 0xe7, + 0x17, 0x97, 0x89, 0xe7, 0x1f, 0x33, 0xfa, 0x4b, + 0x7b, 0x96, 0x36, 0xa3, 0xa8, 0x1c, 0x3a, 0xb5, + 0x6d, 0x2a, 0x37, 0x82, 0xba, 0x0b, 0x62, 0x89, + 0xa6, 0xac, 0x63, 0x5a, 0x7a, 0xa0, 0x00, 0x7d, + 0xe4, 0x92, 0x28, 0xa5, 0x61, 0x64, 0xac, 0x6c, + 0x8c, 0x3b, 0xda, 0xf0, 0x1c, 0x3b, 0x05, 0x05, + 0x2b, 0x37, 0xaf, 0x23, 0xbc, 0x84, 0x58, 0x69, + 0x8e, 0x96, 0xe2, 0xfe, 0xe0, 0x80, 0x25, 0x6b, + 0x08, 0xe0, 0x15, 0xdb, 0xc2, 0x1d, 0xbc, 0x9e, + 0x6a, 0x05, 0xbb, 0xa8, 0xb1, 0x99, 0xab, 0x8d, + 0x14, 0x6d, 0xa6, 0x90, 0xdd, 0xe4, 0x58, 0x19, + 0x2d, 0xcf, 0x08, 0x15, 0x7f, 0x0b, 0xb8, 0xdc, + 0xc6, 0x86, 0x80, 0x0f, 0x0f, 0xc0, 0xac, 0xb0, + 0x5a, 0x5a, 0x5b, 0x57, 0xcd, 0xe0, 0x8e, 0x1a, + 0xef, 0xe8, 0xd8, 0xd6, 0x57, 0xf6, 0x40, 0x59, + 0x6a, 0x82, 0x93, 0xa6, 0x75, 0xbe, 0x9c, 0xb0, + 0xc1, 0xdb, 0xd9, 0x5c, 0xbd, 0xd6, 0x93, 0xdb, + 0x33, 0x82, 0x58, 0xc3, 0x1c, 0x78, 0x9c, 0x37, + 0xbc, 0x16, 0x8f, 0x8d, 0xd7, 0x50, 0x7a, 0xb3, + 0x33, 0x73, 0x94, 0xbf, 0xc7, 0xe5, 0x4d, 0xb4, + 0x96, 0xd8, 0xa8, 0x65, 0x11, 0xda, 0xc9, 0x30, + 0xe1, 0x32, 0x10, 0xe1, 0x23, 0xdf, 0x4e, 0xa5, + 0x02, 0xe9, 0x6e, 0xb1, 0xb1, 0x7c, 0x9d, 0x2b, + 0xad, 0xa1, 0x74, 0xbb, 0xf8, 0xcc, 0x6d, 0x2e, + 0xaf, 0x3d, 0x16, 0x67, 0x31, 0x8f, 0x00, 0x3d, + 0xad, 0x70, 0x1b, 0x83, 0x80, 0x23, 0xdf, 0x41, + 0x4d, 0xf6, 0xa4, 0xe6, 0xbb, 0x07, 0x6a, 0xe0, + 0x45, 0x1d, 0x73, 0x50, 0x7a, 0xa0, 0xb1, 0xea, + 0xdd, 0x68, 0x4f, 0x9a, 0x41, 0x4f, 0xf6, 0x99, + 0xe2, 0x85, 0xf6, 0xe6, 0x46, 0xe1, 0x47, 0x35, + 0xae, 0x03, 0x70, 0x20, 0x11, 0xef, 0xaf, 0xa4, + 0x1e, 0xf1, 0x3b, 0xaa, 0x57, 0x88, 0x88, 0x28, + 0x7a, 0x94, 0x8f, 0xfb, 0x13, 0x0f, 0xcd, 0x0f, + 0x8e, 0xf5, 0x7c, 0x5f, 0x25, 0x91, 0x97, 0x07, + 0x16, 0xb4, 0xb8, 0x6e, 0x71, 0x00, 0x91, 0xee, + 0xaf, 0xa4, 0x14, 0x76, 0x91, 0xff, 0x00, 0x6a, + 0xb8, 0x7f, 0xec, 0x7f, 0xf6, 0x42, 0x6a, 0x42, + 0x3f, 0xec, 0x3c, 0x25, 0x7f, 0x46, 0x3f, 0x1a, + 0x45, 0x77, 0xe0, 0x67, 0x17, 0x1f, 0x0b, 0x78, + 0xff, 0x00, 0x4a, 0x82, 0xbd, 0x94, 0x2c, 0x61, + 0x70, 0x71, 0x6b, 0x4b, 0x86, 0xe7, 0x10, 0x2a, + 0x39, 0x8a, 0x0c, 0x19, 0x1d, 0x98, 0xeb, 0xbf, + 0x21, 0x2f, 0x88, 0xe5, 0x57, 0xf6, 0x5e, 0x7f, + 0xff, 0x00, 0x5e, 0x96, 0x9b, 0x7f, 0xf9, 0x2f, + 0xf1, 0x58, 0xae, 0x04, 0x02, 0x28, 0x76, 0x83, + 0xbd, 0x78, 0xd6, 0x31, 0x82, 0x8c, 0x68, 0x68, + 0xea, 0x34, 0x00, 0x3d, 0xe4, 0x14, 0x8d, 0x7c, + 0x47, 0xe6, 0x0d, 0x3f, 0xb7, 0xff, 0x00, 0x53, + 0xff, 0x00, 0xbb, 0x1a, 0xdd, 0xd7, 0xd8, 0x4b, + 0xdb, 0xc8, 0xad, 0xb2, 0xb8, 0xe6, 0x97, 0xdd, + 0xe3, 0x9c, 0x5d, 0xc0, 0xd1, 0x57, 0x16, 0x54, + 0x3e, 0xad, 0x1c, 0xa5, 0xae, 0x1b, 0x95, 0xa5, + 0xcc, 0x63, 0x88, 0x2e, 0x6b, 0x5c, 0x46, 0xe2, + 0x40, 0x24, 0x73, 0x55, 0x7d, 0x20, 0xa9, 0xd9, + 0xfb, 0x49, 0xc0, 0xbe, 0xd8, 0x3e, 0xf8, 0xc9, + 0x6d, 0x74, 0xd1, 0xfc, 0x58, 0x78, 0x0b, 0xbb, + 0xa1, 0xbf, 0x84, 0x8f, 0x85, 0x7c, 0x69, 0xcc, + 0xae, 0xa0, 0xcf, 0x67, 0x25, 0xc8, 0x34, 0xc9, + 0x6b, 0x81, 0x60, 0xa4, 0x70, 0xb8, 0x0a, 0x3c, + 0x81, 0x46, 0x80, 0x48, 0xda, 0x6b, 0xdd, 0x3a, + 0x87, 0xac, 0xad, 0x12, 0x58, 0x58, 0xcb, 0x27, + 0x49, 0x2d, 0xb4, 0x32, 0x49, 0xfa, 0x6e, 0x8d, + 0xae, 0x77, 0x64, 0x85, 0x9c, 0x00, 0x00, 0x00, + 0x50, 0x0d, 0x80, 0x0d, 0x81, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x06, 0xf0, 0x88, 0x37, 0x84, + 0x14, 0x0d, 0x1b, 0xfd, 0xf1, 0x7d, 0xcd, 0x71, + 0xf6, 0x81, 0x74, 0x85, 0xcd, 0xf4, 0x6f, 0xf7, + 0xc5, 0xf7, 0x35, 0xc7, 0xda, 0x05, 0xd2, 0x16, + 0x38, 0x7d, 0x8f, 0x3a, 0x5e, 0x9f, 0xc6, 0x79, + 0x9a, 0x7d, 0x55, 0xbd, 0x48, 0xbc, 0xdf, 0xd4, + 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, 0xf4, 0x68, + 0xbc, 0x11, 0xda, 0x58, 0x73, 0x7f, 0x53, 0x1f, + 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, 0xa2, 0xf0, + 0x47, 0x69, 0x71, 0x59, 0xfe, 0xcf, 0x11, 0xea, + 0xa8, 0x71, 0xd5, 0xcb, 0xdb, 0xdf, 0x96, 0x54, + 0x44, 0x5e, 0x9b, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x13, 0x76, 0xd4, 0x44, 0x14, + 0x0c, 0x96, 0x3b, 0x35, 0xa5, 0x33, 0xb3, 0xe6, + 0xb1, 0x30, 0x1b, 0xac, 0x7d, 0xd5, 0x4c, 0xf1, + 0x34, 0x13, 0xc2, 0x1c, 0x78, 0x9c, 0xd7, 0x06, + 0xed, 0x14, 0x3b, 0x5a, 0xe5, 0xb4, 0xdf, 0x6a, + 0x38, 0xfe, 0x0a, 0x3a, 0xc2, 0xe0, 0x4f, 0xfe, + 0xd8, 0x2d, 0x22, 0xbc, 0xfb, 0xfd, 0xe5, 0x75, + 0x5f, 0x3d, 0x1c, 0x75, 0xe2, 0xe0, 0x6f, 0x17, + 0x56, 0x82, 0xa8, 0x28, 0xb8, 0xcb, 0x4c, 0xc6, + 0xaa, 0xd4, 0x16, 0xf9, 0xcc, 0x8d, 0xb1, 0xb3, + 0xc7, 0x59, 0x50, 0xdb, 0xc4, 0xea, 0x82, 0xe2, + 0xd3, 0xc4, 0xd0, 0x38, 0xa8, 0x5d, 0xdd, 0x6d, + 0x73, 0xa9, 0xd6, 0x5f, 0x5a, 0xda, 0xde, 0xee, + 0xc7, 0x51, 0xe3, 0xf5, 0x17, 0x9b, 0xba, 0xee, + 0xce, 0xdc, 0x30, 0x4a, 0xd6, 0x8a, 0xf0, 0xb9, + 0x8e, 0x26, 0x87, 0x7d, 0x2a, 0x0d, 0x41, 0xea, + 0xab, 0xd5, 0x4a, 0x20, 0xaa, 0x1f, 0x68, 0x76, + 0x17, 0x0d, 0xe0, 0xc4, 0xd9, 0xdd, 0x5e, 0xde, + 0xbf, 0x64, 0x70, 0x74, 0x74, 0x1c, 0x5f, 0xae, + 0xea, 0x9d, 0x8a, 0x27, 0x44, 0xc7, 0x7f, 0x67, + 0xab, 0xf2, 0x10, 0xe4, 0xd8, 0x59, 0x77, 0x3c, + 0x4e, 0x73, 0xf6, 0x77, 0x25, 0xe5, 0xcd, 0x94, + 0x80, 0xed, 0xdb, 0x8a, 0xe8, 0x0d, 0x6b, 0x5b, + 0x5e, 0x10, 0x1b, 0x5d, 0xf4, 0x00, 0x76, 0x97, + 0xbc, 0x94, 0xe4, 0x41, 0x49, 0xd4, 0x0c, 0x79, + 0xf6, 0x87, 0x85, 0x78, 0x69, 0x2c, 0x0c, 0x65, + 0x5c, 0x01, 0xa0, 0xee, 0xa5, 0xde, 0x54, 0xbe, + 0xb4, 0xc0, 0x49, 0x9c, 0xc4, 0x74, 0x76, 0xf4, + 0xf3, 0xbb, 0x77, 0x74, 0xb0, 0x03, 0xb3, 0x8b, + 0x65, 0x1c, 0xca, 0xf2, 0x54, 0x6e, 0x53, 0xf5, + 0x44, 0x14, 0x9c, 0x77, 0xb4, 0x18, 0xec, 0xad, + 0x99, 0x69, 0x9e, 0xb5, 0xb8, 0x82, 0xfa, 0xdd, + 0xa2, 0x37, 0x90, 0xce, 0xff, 0x00, 0x87, 0x65, + 0x48, 0x71, 0x6d, 0x0a, 0xf7, 0x15, 0x7f, 0xa8, + 0x35, 0x26, 0xa0, 0x8f, 0x21, 0x0f, 0x4f, 0x8e, + 0xc2, 0x5b, 0xd2, 0xac, 0x24, 0xb4, 0x4a, 0x1b, + 0xb7, 0x84, 0x8f, 0x8c, 0x5c, 0x77, 0xd3, 0x70, + 0x57, 0x47, 0x35, 0x8e, 0xef, 0x9a, 0x1d, 0x4d, + 0xd5, 0x00, 0xf6, 0xd7, 0xa8, 0x29, 0xbe, 0xd2, + 0xed, 0x2e, 0xa5, 0xb2, 0xb1, 0xbb, 0x82, 0x37, + 0x4a, 0xdb, 0x49, 0x9c, 0xe9, 0x78, 0x45, 0x68, + 0x1c, 0x05, 0x09, 0xa7, 0x25, 0x5a, 0xa6, 0xf4, + 0xee, 0xa4, 0x83, 0x50, 0x41, 0x34, 0xd0, 0xc1, + 0x25, 0xb9, 0x81, 0xcd, 0x6b, 0xdb, 0x25, 0x37, + 0xb8, 0x56, 0xad, 0xa7, 0x22, 0x97, 0x5a, 0x99, + 0x5b, 0xf6, 0x63, 0x31, 0xd3, 0xdf, 0x3a, 0x27, + 0x4a, 0xcb, 0x76, 0xf1, 0xba, 0x38, 0xe8, 0x1c, + 0x45, 0x40, 0x34, 0xec, 0xa0, 0xa3, 0x6b, 0xf8, + 0x6e, 0x31, 0x19, 0x86, 0xe5, 0xed, 0x3b, 0x91, + 0x91, 0xb7, 0x92, 0xda, 0x62, 0x3f, 0x4b, 0x87, + 0xa3, 0x3e, 0xe9, 0x61, 0x1d, 0x85, 0x6e, 0xd2, + 0xb8, 0xaf, 0xc2, 0x70, 0x36, 0x96, 0x8e, 0x14, + 0x94, 0xb7, 0xa4, 0x9b, 0xc3, 0x93, 0xba, 0x3d, + 0x8d, 0xca, 0xad, 0x1d, 0xd4, 0xfa, 0xe3, 0x3f, + 0x66, 0xf6, 0xdb, 0x3e, 0x0c, 0x46, 0x34, 0xf4, + 0xb2, 0x74, 0x9f, 0x19, 0xd5, 0xad, 0x0d, 0x36, + 0x55, 0xdc, 0x20, 0x53, 0xa9, 0x55, 0x7f, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x11, 0x99, 0x6f, 0xae, + 0x87, 0x98, 0xf6, 0xd4, 0xdb, 0x7b, 0xd1, 0xcc, + 0xa1, 0x32, 0xdf, 0x5d, 0x0f, 0x31, 0xed, 0xa9, + 0xb6, 0xf7, 0xa3, 0x99, 0x79, 0xd8, 0x3e, 0x7b, + 0x1d, 0xa6, 0xd7, 0xe9, 0x97, 0x45, 0xde, 0x0d, + 0x9d, 0x15, 0x6b, 0x61, 0xbc, 0xf4, 0x59, 0xbc, + 0x9b, 0xfc, 0x52, 0xaa, 0x5a, 0x13, 0x75, 0xe7, + 0xf2, 0xbe, 0x7a, 0xb6, 0xde, 0x7a, 0x2c, 0xde, + 0x4d, 0xfe, 0x29, 0x55, 0x2d, 0x09, 0xba, 0xf3, + 0xf9, 0x5f, 0x3d, 0x7a, 0xb4, 0xec, 0x55, 0xde, + 0x70, 0xd7, 0xc6, 0xb5, 0xe7, 0x2d, 0x68, 0x88, + 0xb3, 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x0d, 0xa6, 0x8b, 0x9a, + 0xde, 0xbb, 0x2f, 0xa8, 0xb5, 0x8d, 0xc5, 0xce, + 0x18, 0x46, 0xe7, 0x62, 0xe8, 0xd8, 0x5d, 0x29, + 0x1c, 0x00, 0x46, 0x78, 0x6b, 0xb7, 0x61, 0xab, + 0xc9, 0x21, 0x5f, 0xf2, 0xcf, 0xbd, 0x66, 0x32, + 0xe4, 0xe3, 0xe3, 0x33, 0x5e, 0x18, 0xdc, 0x20, + 0x60, 0x20, 0x77, 0x6e, 0xee, 0x41, 0xab, 0x88, + 0x1b, 0x2b, 0x55, 0x0b, 0xa1, 0x30, 0x17, 0x38, + 0x6c, 0x64, 0xa6, 0xf9, 0x9d, 0x1d, 0xed, 0xd4, + 0x85, 0xd2, 0x34, 0x90, 0xe2, 0x1a, 0xde, 0xe5, + 0x82, 0xad, 0x24, 0x75, 0x4a, 0x0d, 0x19, 0x6d, + 0xbd, 0xa6, 0xcb, 0x1b, 0xe2, 0x92, 0x4b, 0x37, + 0x32, 0x46, 0x96, 0xbd, 0xa4, 0x47, 0xb5, 0xae, + 0x14, 0x23, 0xbd, 0x5a, 0x1a, 0x06, 0x7b, 0x9c, + 0x36, 0x72, 0xf3, 0x4e, 0x5f, 0x51, 0x8f, 0x93, + 0xba, 0x63, 0x6b, 0x51, 0xd2, 0x30, 0x57, 0xb9, + 0x3d, 0x47, 0x30, 0xfb, 0xcb, 0xa1, 0x2a, 0x6e, + 0xae, 0xd3, 0xf9, 0x69, 0x33, 0x96, 0x59, 0xcc, + 0x24, 0x26, 0x6b, 0x88, 0xb8, 0x7a, 0x66, 0x87, + 0x35, 0xbb, 0x63, 0x35, 0x61, 0xee, 0xcb, 0x6b, + 0x56, 0x9e, 0x14, 0x1a, 0x7e, 0xd3, 0x80, 0x75, + 0xe6, 0x1d, 0xae, 0x15, 0x05, 0xd2, 0x02, 0x0f, + 0x28, 0x2f, 0x8a, 0xaa, 0xcf, 0x2e, 0x90, 0xd3, + 0x0f, 0x6b, 0x98, 0x71, 0xb0, 0x00, 0x6a, 0x2a, + 0xd6, 0xf0, 0x91, 0xcc, 0x41, 0x50, 0xda, 0xe3, + 0x0b, 0x96, 0xcb, 0xcf, 0x8a, 0x9a, 0xc6, 0xd8, + 0xc8, 0x20, 0x2e, 0x74, 0xed, 0xe2, 0x60, 0x2c, + 0xe2, 0x74, 0x6e, 0xa1, 0xe2, 0x70, 0xae, 0xe3, + 0xb9, 0x5c, 0x0e, 0xf2, 0x83, 0x9c, 0x38, 0x4d, + 0xa0, 0xf3, 0xed, 0xac, 0x62, 0xe3, 0x11, 0x76, + 0x6a, 0xc9, 0x1c, 0xd6, 0x99, 0x1a, 0xdf, 0x8d, + 0xc2, 0xfa, 0x57, 0x89, 0x9d, 0x4e, 0x50, 0xba, + 0x34, 0x32, 0xc7, 0x33, 0x23, 0x9a, 0x27, 0x07, + 0xc7, 0x20, 0x0f, 0x63, 0xc6, 0xe2, 0xd7, 0x6d, + 0x04, 0x28, 0xdd, 0x45, 0x85, 0x87, 0x37, 0x8a, + 0x96, 0xc9, 0xf4, 0x6c, 0x9d, 0xfd, 0xbc, 0x87, + 0xe2, 0x48, 0x3b, 0xd3, 0xcd, 0xc8, 0x54, 0x66, + 0x86, 0x83, 0x50, 0x63, 0xed, 0x1d, 0x8d, 0xcb, + 0xdb, 0x3a, 0x28, 0x61, 0x3c, 0x56, 0xb3, 0x17, + 0x31, 0xc3, 0x84, 0x9e, 0xea, 0x3e, 0xe5, 0xc4, + 0xec, 0x3b, 0x42, 0x08, 0xaf, 0x67, 0xfe, 0xbf, + 0xcf, 0x79, 0x43, 0xf6, 0xd2, 0x2c, 0x9a, 0x61, + 0xed, 0xc0, 0xea, 0x8c, 0xbe, 0x16, 0x53, 0xc1, + 0x6d, 0x20, 0x37, 0x50, 0x13, 0xbb, 0x85, 0xa3, + 0x8f, 0xc4, 0x77, 0xbc, 0xb6, 0xb4, 0x6e, 0x13, + 0x29, 0x8e, 0xcb, 0xe5, 0xee, 0x6f, 0x60, 0x30, + 0xc3, 0x74, 0xf2, 0x60, 0x79, 0x73, 0x4f, 0x10, + 0xe9, 0x1e, 0xef, 0x8a, 0x49, 0xdc, 0x79, 0x56, + 0x1d, 0x77, 0xa7, 0x32, 0xb7, 0xf7, 0x76, 0xd7, + 0xf8, 0x78, 0x8c, 0x93, 0xf4, 0x6f, 0x82, 0x7e, + 0x17, 0x35, 0xa7, 0x84, 0xf7, 0xbb, 0x5c, 0x46, + 0xf0, 0xe7, 0x35, 0x06, 0x6d, 0x07, 0x1b, 0xef, + 0xa7, 0xc9, 0xea, 0x39, 0x87, 0x77, 0x90, 0x9c, + 0xb2, 0x1a, 0xf2, 0x46, 0xc3, 0xb8, 0x7b, 0xc3, + 0xdc, 0x5a, 0x5e, 0xcd, 0x7d, 0x37, 0x35, 0xe5, + 0x1b, 0xe3, 0x48, 0xad, 0xb8, 0x4c, 0x73, 0x71, + 0x78, 0xab, 0x4b, 0x06, 0xff, 0x00, 0xe8, 0x46, + 0xd0, 0xf3, 0xd5, 0x79, 0xda, 0xf3, 0xfb, 0x44, + 0xa8, 0x0d, 0x0d, 0x84, 0xca, 0x62, 0xee, 0x72, + 0x92, 0x5f, 0xc0, 0x60, 0x65, 0xcb, 0xda, 0x61, + 0x25, 0xcd, 0x77, 0x10, 0x0e, 0x79, 0xf8, 0xae, + 0x3f, 0xa4, 0x82, 0xd8, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x82, 0x3b, 0x51, 0xfa, 0x8e, 0xf3, + 0xc9, 0xfc, 0xe6, 0xad, 0x7d, 0x0d, 0xea, 0x67, + 0x79, 0x77, 0xf6, 0x9a, 0xb6, 0x35, 0x1f, 0xa8, + 0xef, 0x3c, 0x9f, 0xce, 0x6a, 0xd7, 0xd0, 0xde, + 0xa6, 0x77, 0x97, 0x7f, 0x69, 0xaa, 0xf1, 0xc3, + 0x9d, 0x2c, 0x67, 0x98, 0xa7, 0x72, 0x75, 0xac, + 0x48, 0x88, 0xa8, 0xd8, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x5a, 0xb9, 0x0f, 0x42, 0xb9, 0xf2, 0x4f, + 0xf1, 0x4a, 0xda, 0x5a, 0xb9, 0x0f, 0x42, 0xb9, + 0xf2, 0x4f, 0xf1, 0x4a, 0x9a, 0x73, 0xc2, 0xb7, + 0x36, 0x2a, 0xd1, 0x3a, 0x90, 0x5a, 0x4f, 0xd1, + 0xee, 0x3c, 0x36, 0xf8, 0xaa, 0x79, 0x40, 0xe9, + 0x3f, 0x47, 0xb8, 0xf0, 0xdb, 0xe2, 0xa9, 0xe5, + 0xa6, 0x23, 0x8b, 0x56, 0x9f, 0xb9, 0x86, 0x07, + 0x96, 0xb7, 0xa2, 0x75, 0x88, 0x88, 0xb2, 0x74, + 0x88, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x94, 0x28, 0xa8, 0x7e, 0xd3, 0xdd, 0x27, 0x4b, + 0x8a, 0x63, 0x1e, 0xe6, 0x71, 0xba, 0x46, 0x92, + 0xd2, 0x46, 0xf2, 0xc1, 0xc9, 0xce, 0x82, 0xfb, + 0xc2, 0xee, 0xa1, 0x42, 0x08, 0xde, 0x28, 0xa9, + 0x1f, 0xf5, 0x9b, 0x7f, 0xab, 0xdc, 0x7e, 0xcf, + 0xff, 0x00, 0xd6, 0xa3, 0xf2, 0xf8, 0x5c, 0xfe, + 0x91, 0x89, 0xb9, 0x4c, 0x76, 0x4e, 0x4b, 0x8b, + 0x76, 0x3d, 0xad, 0x96, 0x39, 0x2b, 0x41, 0xc4, + 0x68, 0x38, 0x98, 0x5c, 0xe6, 0xb9, 0xa7, 0x72, + 0x0e, 0x8c, 0x8b, 0x53, 0x11, 0x91, 0x66, 0x53, + 0x17, 0x6d, 0x90, 0x60, 0xe1, 0x17, 0x11, 0x87, + 0x96, 0xf5, 0x1d, 0xb9, 0xc3, 0xdc, 0x2b, 0x69, + 0xcf, 0x63, 0x05, 0x5e, 0xe0, 0xc0, 0x77, 0x17, + 0x10, 0x3b, 0x68, 0x3d, 0x44, 0x1b, 0x45, 0x46, + 0xd0, 0x77, 0x14, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x45, 0xf2, 0xd7, 0xb1, 0xfd, 0xe3, 0x9a, + 0xea, 0x6f, 0xe1, 0x20, 0xf6, 0x97, 0xd2, 0x02, + 0x23, 0x88, 0x68, 0xab, 0x88, 0x68, 0x1b, 0xc9, + 0x34, 0x08, 0x08, 0x22, 0xa0, 0xd4, 0x1d, 0xc4, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x28, 0xfd, 0x41, 0xea, 0x99, + 0xfe, 0x4f, 0x8c, 0x14, 0x82, 0x8f, 0xd4, 0x1e, + 0xa9, 0x9f, 0xe4, 0xf8, 0xc1, 0x5e, 0xde, 0xdd, + 0x3a, 0x61, 0x96, 0x27, 0x81, 0x77, 0x72, 0xbd, + 0x4f, 0x74, 0xaf, 0xaa, 0x1b, 0xe1, 0xbf, 0xb6, + 0xa5, 0x9f, 0xb9, 0x44, 0xe9, 0x5f, 0x54, 0x37, + 0xc3, 0x7f, 0x6d, 0x4b, 0x3f, 0x72, 0x9b, 0xbc, + 0x5a, 0xf7, 0xa5, 0x18, 0x6e, 0x05, 0xbd, 0xd8, + 0x73, 0x9b, 0xaf, 0xf2, 0x78, 0xf2, 0xac, 0xfb, + 0x10, 0xaf, 0xea, 0x81, 0x75, 0xfe, 0x4f, 0x1e, + 0x55, 0x9f, 0x62, 0x15, 0xfd, 0x72, 0xd9, 0xcf, + 0x5e, 0xfc, 0xbd, 0x8f, 0x8a, 0x66, 0xc1, 0xff, + 0x00, 0x1a, 0xd8, 0x88, 0x8b, 0x67, 0x9a, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x50, + 0x9d, 0xcb, 0xe2, 0x59, 0x63, 0x86, 0x27, 0xcd, + 0x2b, 0x83, 0x23, 0x8d, 0xa5, 0xef, 0x71, 0xdc, + 0x1a, 0xd1, 0x52, 0x55, 0x0a, 0x3b, 0x9c, 0xee, + 0xb8, 0xbd, 0x9d, 0x96, 0xb7, 0x0e, 0xc7, 0x61, + 0x20, 0x77, 0x09, 0x2d, 0xef, 0x9d, 0xd4, 0xad, + 0x08, 0xe2, 0x71, 0x1b, 0x69, 0x5a, 0x04, 0x17, + 0xf0, 0xf6, 0x13, 0xc2, 0x1c, 0xd2, 0xef, 0xd1, + 0x04, 0x57, 0xb0, 0xbd, 0x54, 0xb9, 0x3d, 0x98, + 0x63, 0x84, 0x75, 0xb7, 0xbf, 0xb9, 0x8e, 0xe0, + 0x77, 0xb2, 0xbb, 0x84, 0x8a, 0xf5, 0xc3, 0x78, + 0x4f, 0xbe, 0xbe, 0x74, 0xc6, 0x77, 0x2b, 0x8f, + 0xcd, 0x3b, 0x4b, 0xe7, 0x64, 0x32, 0xc8, 0x36, + 0x5a, 0xce, 0xe3, 0x52, 0x4d, 0x38, 0x9a, 0x38, + 0x8e, 0xd7, 0x35, 0xcd, 0xef, 0x6a, 0x82, 0xec, + 0x88, 0xbe, 0x78, 0xe3, 0xe2, 0xe0, 0xe2, 0x6f, + 0x1f, 0xe8, 0xd4, 0x57, 0xb0, 0x83, 0xe9, 0x11, + 0x28, 0x80, 0x8b, 0xc0, 0xf6, 0x17, 0x70, 0x07, + 0x02, 0xef, 0xd1, 0x04, 0x57, 0xb0, 0xbe, 0x9a, + 0x2a, 0x47, 0x3a, 0x0f, 0x11, 0x55, 0x74, 0x86, + 0x6b, 0x23, 0x95, 0xcc, 0x66, 0x5b, 0x77, 0x27, + 0x14, 0x76, 0xcf, 0x11, 0xc1, 0x13, 0x45, 0x18, + 0xc0, 0x1f, 0x23, 0x76, 0x0e, 0xa9, 0x03, 0x69, + 0x2a, 0xd4, 0x80, 0x8b, 0xc0, 0xe6, 0x92, 0x5a, + 0x1c, 0x0b, 0x9b, 0xbc, 0x02, 0x09, 0x1c, 0xeb, + 0xd2, 0x40, 0x1c, 0x44, 0xd0, 0x0d, 0xe4, 0xec, + 0x08, 0x08, 0xbc, 0x6b, 0x9a, 0xf1, 0x56, 0x38, + 0x38, 0x75, 0x5a, 0x41, 0x1e, 0xf2, 0x8c, 0xd5, + 0x04, 0x8d, 0x39, 0x92, 0x73, 0x49, 0x04, 0x5b, + 0xbc, 0x82, 0x36, 0x14, 0x12, 0x9d, 0x64, 0x55, + 0xdf, 0x67, 0xee, 0x73, 0xf4, 0xb5, 0xab, 0x9e, + 0xe2, 0xe7, 0x17, 0xcd, 0x52, 0x4d, 0x4f, 0xd6, + 0x3b, 0x94, 0xab, 0x12, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x20, 0xde, 0x11, 0x06, + 0xf0, 0x82, 0x81, 0xa3, 0x7f, 0xbe, 0x2f, 0xb9, + 0xae, 0x3e, 0xd0, 0x2e, 0x90, 0xb9, 0xbe, 0x8d, + 0xfe, 0xf8, 0xbe, 0xe6, 0xb8, 0xfb, 0x40, 0xba, + 0x42, 0xc7, 0x0f, 0xb1, 0xe7, 0x4b, 0xd3, 0xf8, + 0xcf, 0x33, 0x4f, 0xaa, 0xb7, 0xa9, 0x17, 0x9b, + 0xfa, 0x98, 0xfc, 0x3f, 0x80, 0xac, 0xd6, 0x9e, + 0x8d, 0x17, 0x82, 0x3b, 0x4b, 0x0e, 0x6f, 0xea, + 0x63, 0xf0, 0xfe, 0x02, 0xb3, 0x5a, 0x7a, 0x34, + 0x5e, 0x08, 0xed, 0x2e, 0x2b, 0x3f, 0xd9, 0xe2, + 0x3d, 0x55, 0x0e, 0x3a, 0xb9, 0x7b, 0x7b, 0xf2, + 0xca, 0x88, 0x8b, 0xd3, 0x60, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x2d, 0x5c, 0x86, 0x4e, 0xc7, 0x19, 0x07, 0x9c, + 0xdf, 0xcc, 0xd8, 0x21, 0x2e, 0x0c, 0x0f, 0x75, + 0x7b, 0xe3, 0xb8, 0x6c, 0x07, 0xa8, 0x83, 0x69, + 0x16, 0x0b, 0x2b, 0xdb, 0x5b, 0xfb, 0x66, 0x5d, + 0xd9, 0xc8, 0x26, 0x82, 0x4a, 0xf0, 0x48, 0xda, + 0xd0, 0xd0, 0xd0, 0xef, 0xeb, 0xac, 0xfb, 0xf6, + 0x20, 0x22, 0x85, 0x7e, 0xb3, 0xd2, 0xf1, 0xbd, + 0xd1, 0xbf, 0x21, 0x18, 0x7b, 0x09, 0x6b, 0x85, + 0x1f, 0xb0, 0x83, 0x43, 0xf1, 0x57, 0x83, 0x5b, + 0x69, 0x5f, 0xea, 0x31, 0xf6, 0x1f, 0xf4, 0x10, + 0x4d, 0xa2, 0xd5, 0xb1, 0xca, 0x63, 0xb2, 0x2c, + 0x2f, 0xb0, 0xb9, 0x8e, 0xe5, 0xad, 0xef, 0xba, + 0x37, 0x02, 0x47, 0x38, 0xde, 0x17, 0xb9, 0x0c, + 0x95, 0x8e, 0x32, 0xdc, 0x5c, 0xdf, 0xcc, 0x20, + 0x84, 0xb8, 0x30, 0x3d, 0xd5, 0x23, 0x88, 0xd6, + 0x83, 0xb9, 0x07, 0xa8, 0x83, 0x65, 0x16, 0xa6, + 0x37, 0x2d, 0x8e, 0xca, 0x44, 0xf9, 0xb1, 0xf3, + 0xb6, 0xe2, 0x38, 0xdd, 0xc0, 0xf7, 0x36, 0xa2, + 0x8e, 0xa5, 0x69, 0xdd, 0x01, 0xc8, 0x56, 0xda, + 0x02, 0xc5, 0x77, 0x75, 0x6d, 0x67, 0x6e, 0xfb, + 0x9b, 0xa9, 0x1b, 0x14, 0x11, 0x8a, 0xbd, 0xef, + 0xd8, 0x07, 0x27, 0xbf, 0xd4, 0x5a, 0x79, 0x2d, + 0x43, 0x86, 0xc5, 0x4a, 0xd8, 0x72, 0x17, 0x4c, + 0xb7, 0x91, 0xed, 0xe3, 0x6b, 0x5c, 0x1c, 0x49, + 0x6d, 0x69, 0x5e, 0xe4, 0x15, 0xaf, 0x76, 0x62, + 0xbd, 0xce, 0xe2, 0xa3, 0x79, 0x0f, 0xb5, 0xe8, + 0x66, 0xbc, 0x88, 0x1e, 0xf5, 0xf2, 0xb7, 0xa3, + 0x6c, 0x6e, 0xdb, 0xfa, 0x2d, 0x79, 0x70, 0x41, + 0xf4, 0x35, 0x14, 0x0c, 0x67, 0x48, 0xeb, 0x1b, + 0xd8, 0xed, 0x37, 0xf9, 0xc1, 0xb7, 0x21, 0x94, + 0xfd, 0x22, 0xd1, 0xdd, 0x81, 0xf2, 0x54, 0x9c, + 0x13, 0xc1, 0x73, 0x0b, 0x27, 0xb7, 0x7b, 0x65, + 0x86, 0x41, 0xc4, 0xc9, 0x18, 0x6a, 0xd2, 0x0f, + 0x28, 0x2a, 0x99, 0x85, 0x9a, 0xf9, 0xf2, 0x62, + 0x48, 0x75, 0xd4, 0x33, 0xdc, 0x48, 0xf7, 0xc9, + 0x75, 0x3d, 0xc1, 0x7c, 0x13, 0xc7, 0x19, 0x77, + 0x49, 0x1b, 0x22, 0xe2, 0x77, 0x74, 0x46, 0xe1, + 0x41, 0xd5, 0x56, 0x0c, 0x3b, 0x1b, 0x6f, 0x94, + 0xcb, 0xd9, 0xc2, 0x29, 0x6d, 0x1c, 0xb1, 0x4c, + 0xc6, 0x0e, 0xf5, 0x92, 0x4c, 0xce, 0x39, 0x5a, + 0xde, 0xa6, 0xd1, 0xc5, 0xee, 0xa0, 0x97, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x11, 0x99, 0x6f, 0xae, 0x87, + 0x98, 0xf6, 0xd4, 0xdb, 0x7b, 0xd1, 0xcc, 0xa1, + 0x32, 0xdf, 0x5d, 0x0f, 0x31, 0xed, 0xa9, 0xb6, + 0xf7, 0xa3, 0x99, 0x79, 0xd8, 0x3e, 0x7b, 0x1d, + 0xa6, 0xd7, 0xe9, 0x97, 0x45, 0xde, 0x0d, 0x9d, + 0x15, 0x6b, 0x61, 0xbc, 0xf4, 0x59, 0xbc, 0x9b, + 0xfc, 0x52, 0xaa, 0x5a, 0x13, 0x75, 0xe7, 0xf2, + 0xbe, 0x7a, 0xb6, 0xde, 0x7a, 0x2c, 0xde, 0x4d, + 0xfe, 0x29, 0x55, 0x2d, 0x09, 0xba, 0xf3, 0xf9, + 0x5f, 0x3d, 0x7a, 0xb4, 0xec, 0x55, 0xde, 0x70, + 0xd7, 0xc6, 0xb5, 0xe7, 0x2d, 0x68, 0x88, 0xb3, + 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x72, + 0x54, 0xee, 0x1b, 0xcf, 0x22, 0xf1, 0xae, 0x6b, + 0xfb, 0xc7, 0x07, 0x53, 0x7f, 0x09, 0x07, 0xb4, + 0x83, 0xd4, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x55, 0xac, 0xae, 0x47, 0x56, 0x63, 0x9d, + 0x6e, 0x5c, 0x6c, 0x1e, 0xcb, 0xbb, 0x96, 0xdb, + 0x44, 0x03, 0x65, 0xa8, 0x32, 0x57, 0x84, 0xbb, + 0xba, 0xeb, 0x2c, 0x99, 0x5c, 0x9e, 0xa3, 0xc4, + 0xe1, 0xe5, 0xbb, 0xb8, 0x16, 0x93, 0x5d, 0x74, + 0xb1, 0x45, 0x6e, 0xc8, 0x9a, 0xf0, 0xc3, 0xd2, + 0x3b, 0x84, 0xf1, 0x71, 0x3a, 0xb5, 0xae, 0xea, + 0x20, 0xb0, 0xa2, 0xd0, 0xc7, 0x65, 0xa2, 0xbb, + 0xc2, 0xc5, 0x95, 0x92, 0x91, 0xb0, 0xc4, 0x64, + 0x98, 0x7e, 0x89, 0x60, 0x3d, 0x23, 0x7d, 0xc2, + 0xd2, 0xb4, 0xf4, 0xa6, 0x6e, 0xf7, 0x33, 0x69, + 0x73, 0x35, 0xe4, 0x4c, 0x85, 0xf0, 0xcd, 0xd1, + 0xb5, 0x8c, 0x04, 0x77, 0x25, 0xad, 0x7b, 0x78, + 0xaa, 0x4e, 0xda, 0x39, 0x04, 0xda, 0x22, 0x00, + 0x4e, 0xe4, 0x04, 0x4a, 0x22, 0x02, 0x20, 0x04, + 0xee, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x11, + 0xda, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, 0xe7, 0x35, + 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, 0xbf, 0xb4, + 0xd5, 0xb1, 0xa8, 0xfd, 0x47, 0x79, 0xe4, 0xfe, + 0x73, 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, 0xbb, + 0xfb, 0x4d, 0x57, 0x8e, 0x1c, 0xe9, 0x63, 0x3c, + 0xc5, 0x3b, 0x93, 0xad, 0x62, 0x44, 0x45, 0x46, + 0xc2, 0x22, 0x20, 0x22, 0x22, 0x02, 0xd5, 0xc8, + 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, 0x56, 0xd2, + 0xd5, 0xc8, 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, + 0x54, 0xd3, 0x9e, 0x15, 0xb9, 0xb1, 0x56, 0x89, + 0xd4, 0x82, 0xd2, 0x7e, 0x8f, 0x71, 0xe1, 0xb7, + 0xc5, 0x53, 0xca, 0x07, 0x49, 0xfa, 0x3d, 0xc7, + 0x86, 0xdf, 0x15, 0x4f, 0x2d, 0x31, 0x1c, 0x5a, + 0xb4, 0xfd, 0xcc, 0x30, 0x3c, 0xb5, 0xbd, 0x13, + 0xac, 0x44, 0x45, 0x93, 0xa4, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x05, 0x42, 0xf6, 0xa0, + 0xe0, 0xd9, 0xb1, 0x2e, 0x71, 0xa0, 0x6b, 0xa4, + 0x24, 0xf5, 0x81, 0x8c, 0xab, 0xea, 0xa1, 0x7b, + 0x4f, 0x01, 0xd3, 0xe2, 0x1a, 0x76, 0x82, 0xf9, + 0x01, 0x1d, 0x6a, 0xc6, 0x82, 0x77, 0xf3, 0xf6, + 0x94, 0xfb, 0xef, 0xff, 0x00, 0xa7, 0x27, 0xd1, + 0x55, 0xed, 0x5d, 0xac, 0x2c, 0xb3, 0x36, 0x43, + 0x0d, 0x86, 0x6c, 0x97, 0x32, 0xdd, 0x3d, 0x81, + 0xce, 0xe0, 0x22, 0xa1, 0xa7, 0x88, 0x35, 0x8d, + 0x3b, 0x49, 0x25, 0x5b, 0x0e, 0x94, 0xd3, 0x3f, + 0xd3, 0x2d, 0xbf, 0x60, 0x2d, 0xbb, 0x3c, 0x56, + 0x2e, 0xc0, 0xd6, 0xca, 0xd2, 0x1b, 0x72, 0x76, + 0x17, 0x46, 0xc6, 0xb4, 0xf6, 0x69, 0x54, 0x10, + 0x73, 0x5c, 0x3f, 0x48, 0x68, 0xc8, 0xb8, 0xa8, + 0xfb, 0xa8, 0x23, 0x6c, 0x6c, 0x1b, 0xdb, 0xd3, + 0x4a, 0x4b, 0xbb, 0x0d, 0x24, 0xf6, 0x14, 0x56, + 0x1b, 0x45, 0x1c, 0xdd, 0xab, 0x32, 0xda, 0x8a, + 0xea, 0x79, 0xee, 0x2e, 0xc0, 0x91, 0x91, 0xb5, + 0xdc, 0x3c, 0x2c, 0x76, 0xd6, 0xd6, 0xa0, 0xef, + 0xea, 0x0d, 0xcb, 0x7b, 0xda, 0x6c, 0x52, 0x3f, + 0x4e, 0xb1, 0xed, 0x04, 0x88, 0xee, 0x18, 0x5f, + 0xcc, 0x5a, 0xe6, 0x83, 0xd9, 0x2a, 0xc1, 0x85, + 0x9a, 0x29, 0xf0, 0xf6, 0x33, 0x42, 0x41, 0x8d, + 0xd6, 0xf1, 0xd2, 0x9d, 0x66, 0x81, 0x4f, 0x79, + 0x05, 0x2e, 0xe5, 0x97, 0xba, 0x13, 0x2b, 0x6c, + 0xe8, 0x6e, 0x24, 0xb9, 0xc2, 0x5e, 0x3b, 0x85, + 0xf1, 0x48, 0x6a, 0x5b, 0x4a, 0x71, 0x75, 0xb8, + 0x80, 0x35, 0x04, 0x6f, 0x5b, 0x5a, 0x99, 0xc7, + 0x13, 0xac, 0xb1, 0x39, 0x86, 0xbc, 0x8b, 0x6b, + 0xba, 0x45, 0x35, 0x09, 0xe1, 0x34, 0xee, 0x0e, + 0xcd, 0xdd, 0xe3, 0xc1, 0x4f, 0x6a, 0x72, 0x30, + 0xe3, 0xec, 0x6d, 0x86, 0xd9, 0xa5, 0x9d, 0xce, + 0x63, 0x79, 0x68, 0x1b, 0xc3, 0xdb, 0x70, 0x5b, + 0xda, 0xeb, 0x18, 0xeb, 0x9d, 0x28, 0x1d, 0x4f, + 0xe3, 0xe3, 0xc4, 0x73, 0x03, 0xca, 0x38, 0x40, + 0x64, 0x9e, 0xf1, 0xaa, 0x0c, 0xbe, 0xd0, 0x2f, + 0x5f, 0x6b, 0xa7, 0xdd, 0x6f, 0x11, 0x22, 0x6b, + 0xe9, 0x59, 0x6e, 0xca, 0x6f, 0xa1, 0x3c, 0x4e, + 0xa7, 0xb8, 0xd5, 0xa9, 0xec, 0xe2, 0xe6, 0x5f, + 0x30, 0xbd, 0xc6, 0x5c, 0x13, 0xd3, 0xd8, 0x5c, + 0x10, 0x43, 0x8d, 0x48, 0x0f, 0xde, 0x3d, 0xc7, + 0x34, 0xa8, 0xf9, 0x2f, 0xc6, 0xa4, 0xcd, 0xe9, + 0x9b, 0x6a, 0xf1, 0x32, 0x38, 0x45, 0xdd, 0xc8, + 0xfd, 0x76, 0xf7, 0xd5, 0xf7, 0x63, 0xf7, 0xd6, + 0x47, 0x5e, 0x33, 0x4e, 0x6b, 0x8c, 0x9c, 0xb2, + 0x77, 0x36, 0xf7, 0xb6, 0xaf, 0xb9, 0x6d, 0x77, + 0x17, 0x86, 0xf4, 0xa0, 0x7b, 0xae, 0x6b, 0x82, + 0x0c, 0xf6, 0x4e, 0x7e, 0x63, 0xda, 0x1d, 0xcc, + 0xe1, 0xc4, 0xda, 0xe2, 0x23, 0xe8, 0xda, 0x01, + 0x3c, 0x25, 0xe0, 0x70, 0x6e, 0xf0, 0x9c, 0xee, + 0xc2, 0xc1, 0x79, 0x26, 0x43, 0x58, 0xea, 0x2b, + 0x8c, 0x4c, 0x17, 0x0f, 0xb6, 0xc4, 0x63, 0xc9, + 0x13, 0x98, 0xce, 0xd7, 0x96, 0x9e, 0x1d, 0xbd, + 0x52, 0xe7, 0x6e, 0xaf, 0x22, 0x90, 0xf6, 0x6f, + 0x66, 0xf8, 0xf1, 0x32, 0xe4, 0xa6, 0xfa, 0xec, + 0x8c, 0xee, 0x91, 0xce, 0x3b, 0xcb, 0x5a, 0x68, + 0x3f, 0x7b, 0x88, 0xaa, 0xc6, 0x9b, 0xc0, 0x7e, + 0x27, 0x98, 0xca, 0x59, 0xcb, 0x7d, 0x3d, 0x85, + 0xc5, 0xbb, 0xdc, 0xea, 0x42, 0x68, 0x5e, 0x03, + 0xdc, 0xd7, 0x71, 0x6d, 0x1d, 0xee, 0xce, 0xca, + 0x09, 0xdc, 0x97, 0xb3, 0xe8, 0x71, 0xf6, 0xaf, + 0xbe, 0xc0, 0xdc, 0xdc, 0x5b, 0xdf, 0x5b, 0x34, + 0xc8, 0xda, 0xbe, 0xbc, 0x7c, 0x22, 0xa4, 0x54, + 0x06, 0xd0, 0xf5, 0x14, 0xc6, 0x96, 0xce, 0xbf, + 0x39, 0x80, 0x37, 0x53, 0x50, 0x5c, 0xc4, 0x1f, + 0x15, 0xc5, 0x36, 0x02, 0xe0, 0xda, 0x87, 0x01, + 0xfa, 0xc0, 0xd5, 0x45, 0xc9, 0xa0, 0x44, 0x71, + 0xbe, 0x49, 0x73, 0xb7, 0xad, 0x8d, 0x8d, 0x2e, + 0x7b, 0x8b, 0xb6, 0x06, 0x81, 0x57, 0x13, 0xdd, + 0x75, 0x16, 0xee, 0x91, 0xc7, 0x62, 0x6c, 0x31, + 0x97, 0x83, 0x15, 0x7f, 0xf8, 0x8c, 0x12, 0xb8, + 0xb9, 0xf2, 0x50, 0x0e, 0x17, 0x06, 0x53, 0x87, + 0x67, 0x59, 0x05, 0x3f, 0x49, 0xe0, 0xef, 0x35, + 0x2d, 0xa4, 0x96, 0x73, 0xdd, 0xbe, 0x0c, 0x6d, + 0xa3, 0xfa, 0x47, 0x06, 0xf7, 0x4e, 0x7c, 0xb2, + 0x34, 0x0a, 0x77, 0x5b, 0x36, 0x35, 0xbc, 0xab, + 0xa1, 0x69, 0xfc, 0x23, 0x30, 0x78, 0xe1, 0x62, + 0xc9, 0x9d, 0x70, 0x03, 0xdc, 0xfe, 0x91, 0xfb, + 0x0f, 0x75, 0xb8, 0x52, 0xa6, 0x94, 0x0a, 0xb9, + 0xec, 0xb0, 0x7f, 0xf8, 0x8b, 0xc3, 0xff, 0x00, + 0xf7, 0x03, 0xc4, 0x0a, 0xea, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0xa3, 0xf5, 0x07, 0xaa, 0x67, 0xf9, 0x3e, 0x30, + 0x52, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, 0x7f, 0x93, + 0xe3, 0x05, 0x7b, 0x7b, 0x74, 0xe9, 0x86, 0x58, + 0x9e, 0x05, 0xdd, 0xca, 0xf5, 0x3d, 0xd2, 0xbe, + 0xa8, 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, + 0x13, 0xa5, 0x7d, 0x50, 0xdf, 0x0d, 0xfd, 0xb5, + 0x2c, 0xfd, 0xca, 0x6e, 0xf1, 0x6b, 0xde, 0x94, + 0x61, 0xb8, 0x16, 0xf7, 0x61, 0xce, 0x6e, 0xbf, + 0xc9, 0xe3, 0xca, 0xb3, 0xec, 0x42, 0xbf, 0xaa, + 0x05, 0xd7, 0xf9, 0x3c, 0x79, 0x56, 0x7d, 0x88, + 0x57, 0xf5, 0xcb, 0x67, 0x3d, 0x7b, 0xf2, 0xf6, + 0x3e, 0x29, 0x9b, 0x07, 0xfc, 0x6b, 0x62, 0x22, + 0x2d, 0x9e, 0x68, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x20, 0x75, 0xd4, 0xcf, 0x87, 0x4a, + 0xdf, 0x16, 0x1a, 0x19, 0x03, 0x23, 0x27, 0xac, + 0xf7, 0xb4, 0x1f, 0x79, 0x7c, 0x68, 0x2b, 0x76, + 0x41, 0xa5, 0xac, 0xdc, 0xd1, 0xb6, 0x72, 0xf9, + 0x5e, 0x7a, 0xa4, 0xbd, 0xcd, 0xed, 0x34, 0x2d, + 0xdd, 0x4f, 0x8f, 0x7e, 0x47, 0x01, 0x7b, 0x69, + 0x18, 0xac, 0xaf, 0x8f, 0x8a, 0x31, 0xd5, 0x7b, + 0x08, 0x7b, 0x47, 0xbb, 0xc2, 0xa2, 0x3d, 0x9b, + 0xe4, 0xe2, 0xb9, 0xc1, 0x0b, 0x1a, 0xd2, 0x7b, + 0x17, 0xb9, 0xae, 0x61, 0xdf, 0xc0, 0xf3, 0xc4, + 0xd7, 0x76, 0x49, 0x08, 0x2d, 0x6b, 0x11, 0xb5, + 0xb5, 0x33, 0xf9, 0xc1, 0x86, 0x33, 0x3d, 0x03, + 0x44, 0xa5, 0xa3, 0x8e, 0x83, 0x70, 0xe2, 0xa5, + 0x56, 0x55, 0x59, 0xba, 0xd5, 0xb3, 0x8d, 0x57, + 0x0e, 0x06, 0xc6, 0x08, 0xee, 0x63, 0x77, 0x0b, + 0x6e, 0x24, 0x24, 0x82, 0xc7, 0x6d, 0x73, 0xe8, + 0x46, 0xce, 0xe1, 0xbb, 0xd0, 0x6a, 0x6b, 0x0c, + 0xb6, 0x4a, 0xe7, 0x2d, 0x6b, 0xa6, 0x31, 0x12, + 0x18, 0x25, 0xb9, 0x01, 0xd7, 0x33, 0x34, 0xd1, + 0xc1, 0xae, 0xa9, 0x0d, 0xa8, 0xda, 0x00, 0x68, + 0xe2, 0x34, 0x43, 0xec, 0xcf, 0x13, 0xd0, 0x51, + 0x97, 0x77, 0x0d, 0xbc, 0x02, 0xa2, 0xe8, 0xb8, + 0x53, 0x8b, 0xab, 0xc1, 0x4d, 0xde, 0xea, 0xd6, + 0x9c, 0x8b, 0x6f, 0x6a, 0x51, 0x3a, 0x73, 0x46, + 0xdc, 0x44, 0xd1, 0x13, 0x8f, 0x55, 0xd1, 0x70, + 0x0a, 0x7c, 0xa1, 0x45, 0x7a, 0x41, 0x50, 0xd1, + 0x79, 0x9c, 0x88, 0xbe, 0xbb, 0xd3, 0x99, 0x77, + 0x99, 0x6e, 0xac, 0xaa, 0x62, 0x95, 0xc6, 0xae, + 0x2d, 0x69, 0xa1, 0x69, 0x3c, 0xbb, 0xc1, 0x1d, + 0x65, 0x0f, 0x71, 0x16, 0x52, 0xf3, 0x5e, 0xe4, + 0xf1, 0xd6, 0x17, 0x2e, 0xb5, 0xf3, 0xae, 0xe2, + 0x79, 0x81, 0x24, 0xb2, 0x26, 0xb1, 0x8f, 0x7f, + 0x06, 0xdd, 0x84, 0xd2, 0x8b, 0x77, 0x14, 0xe1, + 0x73, 0xed, 0x36, 0xfe, 0x68, 0x3b, 0xa8, 0xe2, + 0x8e, 0x46, 0xbc, 0x8d, 0xd5, 0x0d, 0x64, 0x67, + 0xf7, 0x97, 0xd6, 0x27, 0xfc, 0x9b, 0x94, 0xf2, + 0x6e, 0xf1, 0x62, 0x41, 0x8f, 0x35, 0xec, 0xfa, + 0xce, 0xc7, 0x19, 0x36, 0x43, 0x1d, 0x75, 0x70, + 0xdb, 0xcb, 0x46, 0x19, 0x8b, 0x9e, 0xe0, 0x78, + 0xb8, 0x07, 0x11, 0xda, 0xd0, 0xd2, 0xd2, 0xa5, + 0xb4, 0xfb, 0x9d, 0xaa, 0x74, 0x8b, 0x20, 0xc8, + 0x49, 0x27, 0x14, 0x84, 0xc3, 0x34, 0xd1, 0x9e, + 0x17, 0x9e, 0x89, 0xc0, 0x87, 0x56, 0x9b, 0xc8, + 0xa5, 0x54, 0xbe, 0x7b, 0xd4, 0x79, 0x1f, 0xfc, + 0x59, 0xbe, 0xcd, 0xca, 0x1b, 0xd9, 0xa7, 0xf6, + 0xd3, 0x3f, 0xf2, 0x25, 0xf9, 0xa8, 0x2b, 0x1a, + 0x47, 0x4d, 0x59, 0x64, 0xf2, 0x79, 0x28, 0xa7, + 0x96, 0x76, 0x0c, 0x7c, 0xa0, 0x44, 0x63, 0x78, + 0x69, 0x77, 0x0c, 0x8f, 0x1d, 0xde, 0xc3, 0x5e, + 0xf5, 0x6f, 0xeb, 0x89, 0xef, 0xe3, 0xd5, 0xd8, + 0xe6, 0xe3, 0xde, 0x59, 0x75, 0x2c, 0x22, 0x38, + 0x4d, 0x4d, 0x03, 0xa4, 0x73, 0xe3, 0xe2, 0xa7, + 0x5b, 0x89, 0x6c, 0x7b, 0x3e, 0xf5, 0xc6, 0x7f, + 0xcb, 0x7f, 0xf7, 0x65, 0x4d, 0x48, 0x2b, 0xed, + 0x07, 0x07, 0x5e, 0xa4, 0x7e, 0x3b, 0xd0, 0x6e, + 0xe1, 0xf4, 0x35, 0xbe, 0x12, 0xfd, 0x99, 0x59, + 0x2f, 0xe5, 0x9d, 0xf0, 0xb1, 0xee, 0x9c, 0x38, + 0x51, 0xae, 0x3c, 0x26, 0xae, 0xa8, 0x35, 0x20, + 0x6d, 0x3b, 0x54, 0x46, 0x3a, 0xd6, 0xfb, 0x5d, + 0xdf, 0x5c, 0xde, 0x5f, 0xdc, 0x49, 0x6f, 0x88, + 0xb7, 0x7f, 0x04, 0x36, 0xf1, 0x1a, 0x56, 0xbb, + 0x40, 0xea, 0x57, 0x86, 0x9c, 0x4e, 0x2a, 0xf3, + 0x93, 0x8d, 0xf2, 0xe3, 0x6e, 0xe2, 0x8f, 0xbf, + 0x7c, 0x12, 0x35, 0xbc, 0xe5, 0x84, 0x05, 0x57, + 0xf6, 0x5f, 0x34, 0x6e, 0xc1, 0x4f, 0x00, 0x3f, + 0xc4, 0x8a, 0xe0, 0x97, 0x8e, 0x5a, 0x3d, 0xad, + 0xe1, 0xed, 0x14, 0x1a, 0x79, 0xbd, 0x25, 0x26, + 0x9c, 0xb6, 0x76, 0x67, 0x4e, 0xdd, 0xcd, 0x13, + 0xad, 0x68, 0xe9, 0xe1, 0x7b, 0xb8, 0x83, 0x99, + 0x5d, 0xa7, 0x70, 0xaf, 0x5c, 0x15, 0x31, 0x75, + 0x96, 0x6e, 0x67, 0x42, 0x5d, 0x64, 0x00, 0x0c, + 0x74, 0xb6, 0xaf, 0x12, 0xb0, 0x6e, 0x6b, 0xdb, + 0xdc, 0xbc, 0x0e, 0xb5, 0x77, 0x29, 0x1d, 0x51, + 0x34, 0x50, 0x69, 0xdc, 0x8c, 0x92, 0x90, 0x1a, + 0x6d, 0xde, 0xc1, 0x5e, 0x57, 0x3c, 0x70, 0x34, + 0x76, 0x4a, 0xac, 0x60, 0xe3, 0x7c, 0x7e, 0xcc, + 0xef, 0x8b, 0xbf, 0xf5, 0x1b, 0x70, 0xf6, 0xf3, + 0x54, 0x37, 0xe0, 0x41, 0x31, 0xec, 0xf7, 0xfb, + 0x52, 0xd7, 0xc3, 0x9b, 0xed, 0x1c, 0xac, 0x6a, + 0xb9, 0xec, 0xf7, 0xfb, 0x52, 0xd7, 0xc3, 0x9b, + 0xed, 0x1c, 0xac, 0x68, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x83, 0x78, 0x44, 0x1b, + 0xc2, 0x0a, 0x06, 0x8d, 0xfe, 0xf8, 0xbe, 0xe6, + 0xb8, 0xfb, 0x40, 0xba, 0x42, 0xe6, 0xfa, 0x37, + 0xfb, 0xe2, 0xfb, 0x9a, 0xe3, 0xed, 0x02, 0xe9, + 0x0b, 0x1c, 0x3e, 0xc7, 0x9d, 0x2f, 0x4f, 0xe3, + 0x3c, 0xcd, 0x3e, 0xaa, 0xde, 0xa4, 0x5e, 0x6f, + 0xea, 0x63, 0xf0, 0xfe, 0x02, 0xb3, 0x5a, 0x7a, + 0x34, 0x5e, 0x08, 0xed, 0x2c, 0x39, 0xbf, 0xa9, + 0x8f, 0xc3, 0xf8, 0x0a, 0xcd, 0x69, 0xe8, 0xd1, + 0x78, 0x23, 0xb4, 0xb8, 0xac, 0xff, 0x00, 0x67, + 0x88, 0xf5, 0x54, 0x38, 0xea, 0xe5, 0xed, 0xef, + 0xcb, 0x2a, 0x22, 0x2f, 0x4d, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0xa8, 0xfa, 0xb1, 0xdf, 0x8d, 0xea, 0xbc, 0x66, + 0x9d, 0x6f, 0x75, 0x04, 0x27, 0xa6, 0xbb, 0x03, + 0xae, 0x38, 0x9d, 0xd8, 0x60, 0xf7, 0xd5, 0xd2, + 0xe2, 0x78, 0xad, 0xa0, 0x92, 0xe6, 0x63, 0xc3, + 0x14, 0x2c, 0x74, 0x8f, 0x3f, 0xaa, 0xd1, 0x52, + 0xa8, 0x7a, 0x1e, 0xf2, 0xca, 0x6c, 0x9e, 0x4b, + 0x50, 0x64, 0xae, 0x61, 0x86, 0xe2, 0xe1, 0xe5, + 0x90, 0xb2, 0x59, 0x1a, 0xd7, 0x06, 0xb8, 0xf1, + 0x38, 0x80, 0xe2, 0x36, 0x53, 0x85, 0xa8, 0x36, + 0xb4, 0x15, 0xcc, 0x98, 0xfc, 0x8e, 0x4b, 0x4d, + 0x5c, 0x9e, 0xee, 0xde, 0x47, 0x49, 0x05, 0x79, + 0x40, 0x3c, 0x2f, 0xa7, 0x38, 0xe1, 0x72, 0xbb, + 0xb7, 0xbe, 0x1c, 0xeb, 0x9d, 0x6a, 0xbb, 0xeb, + 0x3c, 0x76, 0xa7, 0xc7, 0xea, 0x0c, 0x75, 0xc4, + 0x53, 0x83, 0x46, 0xdd, 0x36, 0x17, 0xb5, 0xe7, + 0xb8, 0xee, 0x4d, 0x43, 0x49, 0xef, 0xa3, 0x34, + 0xf7, 0x17, 0x43, 0x86, 0x48, 0xe5, 0x11, 0xcb, + 0x19, 0xe2, 0x8e, 0x40, 0xd7, 0x31, 0xc3, 0x94, + 0x1d, 0xa0, 0xa0, 0xe7, 0x1a, 0x1f, 0x15, 0x8d, + 0xc9, 0x65, 0xb3, 0x0d, 0xbf, 0xb7, 0x65, 0xcb, + 0x62, 0x7d, 0x63, 0x12, 0x0a, 0xf0, 0x93, 0x23, + 0xc1, 0xa2, 0xb8, 0x9d, 0x23, 0xa6, 0x08, 0x23, + 0xf0, 0xc8, 0x36, 0xf5, 0x1a, 0x47, 0x68, 0xaa, + 0x0e, 0x9b, 0xba, 0xd4, 0x76, 0xd9, 0x4c, 0xa1, + 0xc0, 0xda, 0xb2, 0xe9, 0xee, 0x90, 0x89, 0xc4, + 0x94, 0xee, 0x40, 0x91, 0xfc, 0x34, 0xab, 0xd9, + 0xbf, 0x6a, 0x93, 0xc9, 0xea, 0xed, 0x75, 0x8b, + 0x63, 0x5d, 0x7f, 0x63, 0x0d, 0xb3, 0x24, 0x3c, + 0x2d, 0x94, 0xc6, 0x5c, 0xda, 0xf5, 0x38, 0x84, + 0x8e, 0x1d, 0x94, 0x18, 0x32, 0xb6, 0x11, 0x69, + 0x5d, 0x61, 0x8e, 0x93, 0x14, 0x4b, 0x21, 0xbb, + 0x2d, 0xe3, 0x82, 0xa4, 0xd1, 0xae, 0x7f, 0x44, + 0xf6, 0x6d, 0xdb, 0xc2, 0x77, 0x8a, 0xa9, 0xef, + 0x69, 0xbb, 0x34, 0xe0, 0xeb, 0x5d, 0x47, 0xda, + 0x7a, 0xd5, 0xd3, 0xfa, 0x6a, 0xfb, 0x25, 0x91, + 0x87, 0x52, 0xe6, 0xef, 0x23, 0xbb, 0x76, 0xc7, + 0xdb, 0x47, 0x09, 0x0e, 0x65, 0x47, 0x7b, 0x52, + 0x28, 0x00, 0x6f, 0xe8, 0x8e, 0x55, 0xb3, 0xed, + 0x33, 0xfb, 0x6d, 0xbf, 0xf9, 0x31, 0xf8, 0xaf, + 0x41, 0x11, 0xa1, 0x24, 0x7e, 0x27, 0x3d, 0x26, + 0x2a, 0x52, 0x7a, 0x3c, 0x8d, 0xb4, 0x57, 0x10, + 0x93, 0xca, 0xee, 0x01, 0x28, 0xf7, 0x9c, 0xe1, + 0xee, 0x2e, 0x86, 0xb9, 0xee, 0xa2, 0x89, 0xf6, + 0x16, 0x3a, 0x6f, 0x51, 0xc0, 0x3b, 0xab, 0x48, + 0xe0, 0x8a, 0x6a, 0x72, 0xb7, 0x80, 0x3d, 0xb5, + 0xfd, 0xe0, 0xad, 0xba, 0x87, 0x2f, 0x1d, 0x86, + 0x9d, 0xb9, 0xc9, 0x44, 0xe0, 0x78, 0xa2, 0x1e, + 0x6e, 0x7a, 0xae, 0x94, 0x51, 0x9d, 0xba, 0xa0, + 0xe6, 0xda, 0xb6, 0x59, 0x32, 0xb7, 0xb9, 0x1c, + 0xb8, 0x35, 0xb6, 0x82, 0x76, 0x59, 0x41, 0xd4, + 0x3c, 0x2d, 0x7e, 0xef, 0xd9, 0xaf, 0xba, 0xba, + 0x47, 0xe1, 0xa2, 0xfb, 0x13, 0x8f, 0x74, 0x72, + 0x9b, 0x7b, 0xbb, 0x68, 0xe2, 0x96, 0xd6, 0xe5, + 0xa0, 0x12, 0xc7, 0x74, 0x61, 0xa4, 0x16, 0x9e, + 0xf9, 0xae, 0x06, 0x8e, 0x0a, 0x91, 0x9d, 0xc6, + 0x1c, 0x6f, 0xb3, 0xec, 0x74, 0x6f, 0x14, 0x9a, + 0xe2, 0xe0, 0x5c, 0x4d, 0x5d, 0xfc, 0x52, 0x31, + 0xe4, 0x57, 0x99, 0xb4, 0x5d, 0x13, 0x19, 0xea, + 0xdb, 0x4f, 0x21, 0x17, 0x88, 0xd4, 0x11, 0x07, + 0x1d, 0x9c, 0x36, 0xb0, 0xd8, 0x0b, 0x4c, 0x7c, + 0x71, 0xdb, 0xbc, 0x49, 0x0d, 0xc0, 0x7c, 0xa5, + 0xac, 0x7b, 0x49, 0x70, 0x91, 0x90, 0xf0, 0x83, + 0xc5, 0x52, 0x76, 0x71, 0xa9, 0x5c, 0x66, 0x39, + 0x98, 0xfb, 0x77, 0x47, 0xd2, 0x3a, 0x79, 0xa5, + 0x79, 0x96, 0xe2, 0xe1, 0xfd, 0xf4, 0x92, 0x3b, + 0x7b, 0x8d, 0x37, 0x75, 0x00, 0xe4, 0x0b, 0x6d, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x04, 0x66, 0x5b, + 0xeb, 0xa1, 0xe6, 0x3d, 0xb5, 0x36, 0xde, 0xf4, + 0x73, 0x28, 0x4c, 0xb7, 0xd7, 0x43, 0xcc, 0x7b, + 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x5e, 0x76, 0x0f, + 0x9e, 0xc7, 0x69, 0xb5, 0xfa, 0x65, 0xd1, 0x77, + 0x83, 0x67, 0x45, 0x5a, 0xd8, 0x6f, 0x3d, 0x16, + 0x6f, 0x26, 0xff, 0x00, 0x14, 0xaa, 0x96, 0x84, + 0xdd, 0x79, 0xfc, 0xaf, 0x9e, 0xad, 0xb7, 0x9e, + 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, 0x42, + 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x5e, 0xad, 0x3b, + 0x15, 0x77, 0x9c, 0x35, 0xf1, 0xad, 0x79, 0xcb, + 0x5a, 0x22, 0x2c, 0xdb, 0x08, 0x88, 0x80, 0xa3, + 0xf3, 0xf9, 0x98, 0x30, 0x98, 0xb9, 0x6f, 0xe6, + 0x1c, 0x65, 0xb4, 0x6c, 0x51, 0xd6, 0x85, 0xf2, + 0x3b, 0xbd, 0x6a, 0x90, 0x54, 0x3f, 0x6a, 0x32, + 0x3d, 0xff, 0x00, 0x85, 0xda, 0x56, 0x8c, 0x91, + 0xf2, 0x38, 0xf3, 0xf7, 0x0c, 0x1e, 0x31, 0x41, + 0xf1, 0x8f, 0xc0, 0x67, 0x35, 0x6c, 0x63, 0x27, + 0x9c, 0xbe, 0x92, 0xde, 0xd2, 0x5e, 0xea, 0xde, + 0xda, 0x2d, 0x95, 0x6f, 0x54, 0x34, 0xf7, 0x2d, + 0x6f, 0x52, 0xb5, 0x25, 0x67, 0xbc, 0xf6, 0x77, + 0x25, 0x94, 0x66, 0xeb, 0x01, 0x7f, 0x3c, 0x77, + 0x91, 0x0e, 0x26, 0x31, 0xce, 0x03, 0x88, 0x8e, + 0x40, 0xe6, 0x70, 0xd0, 0xf3, 0x85, 0x75, 0x8a, + 0x26, 0x41, 0x0c, 0x70, 0x46, 0x28, 0xc8, 0x9a, + 0xd6, 0x34, 0x0d, 0xc0, 0x34, 0x50, 0x2f, 0xb4, + 0x15, 0xad, 0x13, 0xa9, 0xa5, 0xcd, 0xda, 0x4b, + 0x6f, 0x79, 0x41, 0x90, 0xb3, 0x21, 0xb3, 0x50, + 0x53, 0x8d, 0xa7, 0x60, 0x77, 0x0f, 0x21, 0xa8, + 0xa1, 0x56, 0x5f, 0x81, 0x62, 0x82, 0xd2, 0xda, + 0x07, 0x38, 0xc1, 0x14, 0x71, 0x17, 0x92, 0x5e, + 0x58, 0xd0, 0xd2, 0xe2, 0x4d, 0x49, 0x71, 0x1b, + 0xd5, 0x16, 0x57, 0xdf, 0xeb, 0x5c, 0xf5, 0xcd, + 0x83, 0x2e, 0x5f, 0x6b, 0x85, 0xb0, 0x24, 0x3f, + 0xa3, 0xd8, 0x5f, 0x43, 0xc3, 0x5e, 0xb9, 0x71, + 0x06, 0x95, 0xdc, 0x10, 0x5f, 0x9a, 0xf6, 0x3e, + 0xbc, 0x0e, 0x6b, 0xa9, 0xbf, 0x84, 0x83, 0xda, + 0x5e, 0xaa, 0x46, 0x53, 0x40, 0xc7, 0x8f, 0xb5, + 0x7d, 0xfe, 0x9f, 0xba, 0xb8, 0x82, 0xf6, 0xd9, + 0xa6, 0x40, 0xd2, 0xfa, 0xf1, 0x86, 0xed, 0x20, + 0x10, 0x1b, 0x43, 0xef, 0x29, 0x7d, 0x2f, 0x9e, + 0x7e, 0x77, 0x4f, 0xc9, 0x71, 0x35, 0x05, 0xd4, + 0x2d, 0x7c, 0x53, 0xf0, 0xec, 0x05, 0xc1, 0xb5, + 0x0f, 0x03, 0x93, 0x88, 0x14, 0x16, 0x07, 0x10, + 0xd1, 0x57, 0x10, 0xd0, 0x37, 0x93, 0xb0, 0x28, + 0x6d, 0x5d, 0x94, 0xbb, 0xc5, 0xe0, 0x27, 0xbd, + 0xb2, 0x73, 0x5b, 0x30, 0x2c, 0x6b, 0x1e, 0x40, + 0x70, 0x01, 0xee, 0xe1, 0x24, 0x72, 0x2a, 0x26, + 0x93, 0xc1, 0x5e, 0x6a, 0x5b, 0x27, 0xda, 0x5c, + 0x5d, 0xbe, 0x0c, 0x6d, 0xa3, 0xf8, 0xc8, 0x6f, + 0x74, 0xe7, 0xcd, 0x20, 0x1b, 0xf8, 0xb6, 0x77, + 0x21, 0xaa, 0x43, 0x53, 0xe8, 0xdb, 0x3c, 0x46, + 0x9c, 0xf3, 0x91, 0x73, 0x34, 0xf3, 0x5b, 0x39, + 0xac, 0x6f, 0x11, 0xa3, 0x0b, 0x64, 0x93, 0x95, + 0x9b, 0x77, 0x0e, 0xa1, 0x41, 0x74, 0xd3, 0xb3, + 0x4d, 0x3e, 0x03, 0x1f, 0x71, 0x3b, 0xcc, 0x92, + 0xcb, 0x6f, 0x1b, 0xe4, 0x91, 0xdb, 0x4b, 0x9c, + 0x45, 0x49, 0x2a, 0x40, 0x90, 0x05, 0x49, 0xa0, + 0x1b, 0xc9, 0xd8, 0x15, 0x5b, 0x46, 0xe0, 0xec, + 0x71, 0xb8, 0xc8, 0x73, 0x22, 0x69, 0x8c, 0x97, + 0x36, 0x8d, 0x7c, 0xcd, 0x7b, 0x81, 0x8d, 0xa2, + 0x9d, 0x23, 0xb8, 0x1b, 0x41, 0x4d, 0xca, 0x1f, + 0x1b, 0x67, 0x7b, 0xae, 0xef, 0x2e, 0x2f, 0xaf, + 0xee, 0x25, 0x83, 0x11, 0x03, 0xfa, 0x38, 0x2d, + 0x62, 0x34, 0xa9, 0xdf, 0x4e, 0xa6, 0xee, 0xf8, + 0xa0, 0xe8, 0x0d, 0x73, 0x5e, 0x2a, 0xc7, 0x07, + 0x0e, 0xab, 0x48, 0x23, 0xde, 0x5e, 0xaa, 0x1e, + 0x6f, 0x4b, 0xcd, 0xa5, 0xad, 0xff, 0x00, 0x1b, + 0xd3, 0xf7, 0x33, 0x47, 0xe6, 0xc4, 0x1b, 0x88, + 0x24, 0x3c, 0x4d, 0x73, 0x09, 0x02, 0xbb, 0x85, + 0x47, 0x54, 0x15, 0x61, 0x92, 0x2b, 0x6d, 0x5b, + 0xa6, 0xa3, 0x79, 0x26, 0x1f, 0x3b, 0x8c, 0x49, + 0x1b, 0x9a, 0x4d, 0x63, 0x95, 0xb5, 0x1b, 0x29, + 0xd4, 0x70, 0xa7, 0x32, 0x09, 0xb4, 0xa1, 0xde, + 0xa8, 0x9a, 0x67, 0x53, 0x9c, 0x25, 0xbd, 0xe6, + 0x1b, 0x3e, 0xe2, 0xc9, 0xb1, 0x81, 0xce, 0x84, + 0x93, 0x57, 0x3d, 0xa3, 0xff, 0x00, 0x49, 0xa4, + 0xef, 0xdf, 0x56, 0xf5, 0x8f, 0x59, 0x65, 0xd2, + 0x56, 0x17, 0xb9, 0xcc, 0x94, 0x9a, 0xab, 0x2a, + 0x5c, 0x18, 0xe7, 0x11, 0x63, 0x05, 0x4f, 0x0e, + 0xcd, 0x81, 0xc0, 0x75, 0x19, 0xb8, 0x75, 0xf6, + 0xa0, 0x98, 0xd5, 0x9b, 0xb1, 0x1f, 0xfe, 0xe7, + 0x6f, 0xf3, 0x97, 0xba, 0xcf, 0xd4, 0xcc, 0xff, + 0x00, 0xcc, 0xb5, 0xfb, 0x50, 0xa6, 0x27, 0xb6, + 0xb7, 0xb8, 0xe8, 0xfa, 0x78, 0xdb, 0x2f, 0x44, + 0xf1, 0x24, 0x7c, 0x42, 0xbc, 0x2f, 0x6f, 0x7a, + 0xe1, 0xd7, 0x09, 0x71, 0x6d, 0x6f, 0x75, 0x1f, + 0x45, 0x71, 0x1b, 0x65, 0x8c, 0x38, 0x3c, 0x35, + 0xe2, 0xa3, 0x89, 0xa6, 0xad, 0x77, 0x38, 0x28, + 0x2a, 0x77, 0x41, 0xf0, 0xde, 0x5e, 0xe9, 0x46, + 0xd4, 0x0c, 0x8d, 0xe3, 0x26, 0x86, 0x9c, 0x96, + 0xb3, 0xd6, 0x5b, 0x9a, 0x73, 0x18, 0xdc, 0x3d, + 0xd5, 0x29, 0xa6, 0x00, 0x17, 0x59, 0xc0, 0x05, + 0x00, 0xc8, 0xbc, 0x00, 0x39, 0x00, 0x63, 0x28, + 0xa6, 0x1d, 0x69, 0x6c, 0xeb, 0x96, 0xde, 0x3a, + 0x26, 0xba, 0xe6, 0x36, 0x96, 0x32, 0x62, 0x07, + 0x18, 0x6b, 0x8d, 0x4b, 0x43, 0xba, 0x8b, 0xd8, + 0x6d, 0xad, 0xe0, 0x74, 0xae, 0x82, 0x36, 0xc6, + 0xe9, 0xde, 0x64, 0x94, 0xb4, 0x50, 0xbd, 0xe4, + 0x53, 0x89, 0xdd, 0x74, 0x19, 0x15, 0x53, 0xda, + 0x53, 0xde, 0xcd, 0x3a, 0xc7, 0x31, 0xc5, 0xa7, + 0xce, 0x23, 0xda, 0xd2, 0x41, 0xdc, 0xee, 0xa2, + 0xb6, 0x50, 0xf5, 0x15, 0x4b, 0xda, 0x6f, 0xf6, + 0xe3, 0x7f, 0xf2, 0x63, 0xed, 0x3d, 0x04, 0x7f, + 0xb3, 0x8b, 0xeb, 0x88, 0x2e, 0xef, 0x30, 0xf7, + 0x6e, 0x71, 0x7b, 0x98, 0xcb, 0x98, 0x78, 0x89, + 0x3b, 0x08, 0x1c, 0x54, 0xaf, 0x55, 0xae, 0x69, + 0x57, 0xc5, 0xcf, 0x32, 0x1f, 0xfe, 0x1b, 0x27, + 0xa6, 0xf3, 0xcd, 0xd9, 0x0c, 0xf6, 0xf0, 0xc1, + 0x72, 0x47, 0x59, 0x81, 0x86, 0xbf, 0x21, 0xde, + 0xf2, 0xbc, 0xe5, 0x6f, 0xe3, 0xc7, 0x63, 0x6e, + 0x6f, 0x9e, 0x47, 0x0d, 0xbc, 0x6e, 0x78, 0xeb, + 0x91, 0xde, 0x8f, 0x74, 0xd1, 0x07, 0x32, 0xd7, + 0x99, 0x2b, 0x9b, 0xdc, 0xd5, 0xd3, 0xa0, 0x7b, + 0x85, 0xad, 0x87, 0x0d, 0xad, 0x5a, 0xe2, 0x07, + 0x19, 0x0e, 0x73, 0xb7, 0x75, 0xc1, 0xec, 0x2e, + 0x9f, 0x8d, 0xdb, 0x8d, 0xb4, 0x27, 0x79, 0x82, + 0x2a, 0xfe, 0xc3, 0x57, 0x30, 0xc9, 0x58, 0x3e, + 0xdf, 0x42, 0x41, 0x7b, 0x3e, 0xdb, 0x8c, 0x95, + 0xe9, 0xb8, 0x91, 0xc7, 0x79, 0x05, 0x92, 0x06, + 0x7c, 0x27, 0xdd, 0x5d, 0x3b, 0x1b, 0xea, 0xdb, + 0x3f, 0xfc, 0x78, 0xbc, 0x46, 0xa0, 0xd9, 0x44, + 0x44, 0x04, 0x44, 0x41, 0x1d, 0xa8, 0xfd, 0x47, + 0x79, 0xe4, 0xfe, 0x73, 0x56, 0xbe, 0x86, 0xf5, + 0x33, 0xbc, 0xbb, 0xfb, 0x4d, 0x5b, 0x1a, 0x8f, + 0xd4, 0x77, 0x9e, 0x4f, 0xe7, 0x35, 0x6b, 0xe8, + 0x6f, 0x53, 0x3b, 0xcb, 0xbf, 0xb4, 0xd5, 0x78, + 0xe1, 0xce, 0x96, 0x33, 0xcc, 0x53, 0xb9, 0x3a, + 0xd6, 0x24, 0x44, 0x54, 0x6c, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x2d, 0x5c, 0x87, 0xa1, 0x5c, 0xf9, + 0x27, 0xf8, 0xa5, 0x6d, 0x2d, 0x5c, 0x87, 0xa1, + 0x5c, 0xf9, 0x27, 0xf8, 0xa5, 0x4d, 0x39, 0xe1, + 0x5b, 0x9b, 0x15, 0x68, 0x9d, 0x48, 0x2d, 0x27, + 0xe8, 0xf7, 0x1e, 0x1b, 0x7c, 0x55, 0x3c, 0xa0, + 0x74, 0x9f, 0xa3, 0xdc, 0x78, 0x6d, 0xf1, 0x54, + 0xf2, 0xd3, 0x11, 0xc5, 0xab, 0x4f, 0xdc, 0xc3, + 0x03, 0xcb, 0x5b, 0xd1, 0x3a, 0xc4, 0x44, 0x59, + 0x3a, 0x44, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x55, 0x9d, 0x63, 0xa6, 0xaf, 0xf3, 0xb2, + 0xd8, 0x3e, 0xd1, 0xf1, 0x30, 0x5a, 0x39, 0xc6, + 0x4e, 0x94, 0x91, 0x5e, 0x22, 0xc3, 0xdc, 0xf0, + 0xb5, 0xdf, 0xa2, 0xac, 0xc8, 0x80, 0x88, 0x88, + 0x30, 0x5f, 0x59, 0x5b, 0x64, 0x2d, 0x25, 0xb2, + 0xba, 0x6f, 0x1c, 0x13, 0xb4, 0xb5, 0xed, 0xf8, + 0x47, 0x5c, 0x6f, 0x0a, 0xa3, 0x6d, 0xa7, 0xb5, + 0xa6, 0x07, 0x8e, 0xdf, 0x09, 0x79, 0x0d, 0xcd, + 0x8b, 0x89, 0x74, 0x71, 0xdc, 0x50, 0x16, 0xd7, + 0x7e, 0xc7, 0x0d, 0x9e, 0xe1, 0xf7, 0x15, 0xd5, + 0x10, 0x54, 0xb1, 0xba, 0x43, 0x23, 0x71, 0x95, + 0x66, 0x67, 0x52, 0xdd, 0x36, 0xee, 0xe2, 0x22, + 0x0c, 0x36, 0xf1, 0xfd, 0x5b, 0x4b, 0x76, 0xb6, + 0xbb, 0x00, 0xa0, 0xdf, 0x40, 0x15, 0xa6, 0xe2, + 0x08, 0xee, 0x6d, 0xe5, 0xb7, 0x94, 0x71, 0x47, + 0x33, 0x1c, 0xc7, 0x8e, 0xb3, 0x81, 0x05, 0x64, + 0x44, 0x15, 0x0d, 0x1b, 0xa3, 0x6f, 0x30, 0x59, + 0x09, 0xee, 0xef, 0x64, 0x8a, 0x5e, 0x28, 0xfa, + 0x28, 0x3a, 0x32, 0x49, 0x00, 0xbb, 0x89, 0xc4, + 0xf1, 0x34, 0x53, 0x70, 0x59, 0x75, 0xae, 0x92, + 0xbb, 0xcf, 0xcb, 0x6b, 0x3d, 0x8b, 0xe2, 0x8e, + 0x68, 0x5a, 0xe8, 0xe4, 0x32, 0x97, 0x0a, 0xb4, + 0x90, 0xe6, 0xd3, 0x85, 0xae, 0xdc, 0x6a, 0xad, + 0x48, 0x83, 0x5f, 0x1d, 0x66, 0xcb, 0x0b, 0x0b, + 0x7b, 0x28, 0xfb, 0xcb, 0x78, 0xdb, 0x18, 0x3d, + 0x5a, 0x0d, 0xa7, 0xdd, 0x3b, 0x55, 0x7b, 0x3d, + 0xa4, 0x2e, 0xa7, 0xc9, 0x0c, 0xde, 0x0e, 0xe4, + 0x59, 0x64, 0x87, 0xd6, 0x03, 0x50, 0xc7, 0x9a, + 0x52, 0xbb, 0x2b, 0x4a, 0x8d, 0xe0, 0x8a, 0x15, + 0x69, 0x44, 0x14, 0xab, 0xbc, 0x3f, 0xb4, 0x0c, + 0xbc, 0x3e, 0x63, 0x90, 0xba, 0xb6, 0xb6, 0xb4, + 0x7e, 0xc9, 0x9d, 0x15, 0x2a, 0xe6, 0xf3, 0x34, + 0x54, 0xf3, 0x54, 0x2b, 0x36, 0x27, 0x0d, 0x6d, + 0x88, 0xc5, 0x8c, 0x75, 0xa5, 0x4b, 0x43, 0x5d, + 0x57, 0xbb, 0xbe, 0x73, 0xdc, 0x3b, 0xa7, 0xba, + 0x9d, 0x55, 0xbe, 0x88, 0x2b, 0xda, 0x2f, 0x4f, + 0xde, 0xe0, 0x2c, 0x27, 0xb6, 0xbc, 0x7c, 0x6f, + 0x7c, 0xb2, 0x89, 0x1a, 0x62, 0x24, 0x8a, 0x06, + 0x86, 0xed, 0xe2, 0x6b, 0x55, 0x85, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x47, 0xea, 0x0f, 0x54, 0xcf, 0xf2, + 0x7c, 0x60, 0xa4, 0x14, 0x7e, 0xa0, 0xf5, 0x4c, + 0xff, 0x00, 0x27, 0xc6, 0x0a, 0xf6, 0xf6, 0xe9, + 0xd3, 0x0c, 0xb1, 0x3c, 0x0b, 0xbb, 0x95, 0xea, + 0x7b, 0xa5, 0x7d, 0x50, 0xdf, 0x0d, 0xfd, 0xb5, + 0x2c, 0xfd, 0xca, 0x27, 0x4a, 0xfa, 0xa1, 0xbe, + 0x1b, 0xfb, 0x6a, 0x59, 0xfb, 0x94, 0xdd, 0xe2, + 0xd7, 0xbd, 0x28, 0xc3, 0x70, 0x2d, 0xee, 0xc3, + 0x9c, 0xdd, 0x7f, 0x93, 0xc7, 0x95, 0x67, 0xd8, + 0x85, 0x7f, 0x54, 0x0b, 0xaf, 0xf2, 0x78, 0xf2, + 0xac, 0xfb, 0x10, 0xaf, 0xeb, 0x96, 0xce, 0x7a, + 0xf7, 0xe5, 0xec, 0x7c, 0x53, 0x36, 0x0f, 0xf8, + 0xd6, 0xc4, 0x44, 0x5b, 0x3c, 0xd1, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x15, 0x43, 0x33, + 0xa1, 0xe7, 0x39, 0x03, 0x96, 0xd3, 0xd7, 0x5f, + 0x87, 0xde, 0x38, 0x97, 0x3e, 0x3a, 0x96, 0xb0, + 0xb8, 0xf7, 0xc5, 0xa5, 0xbb, 0xab, 0xca, 0x08, + 0xa2, 0xb7, 0xa2, 0x0a, 0x4b, 0xf1, 0xfe, 0xd3, + 0x6e, 0x19, 0xe6, 0xf2, 0xde, 0xc1, 0x0c, 0x67, + 0x63, 0xa6, 0x63, 0x98, 0xd7, 0x53, 0x9d, 0x8c, + 0xe2, 0xec, 0x29, 0x7d, 0x31, 0xa4, 0x6d, 0x70, + 0x2d, 0x7c, 0xef, 0x93, 0xce, 0xaf, 0xe6, 0x14, + 0x92, 0xe0, 0x8a, 0x00, 0x0e, 0xd2, 0xd6, 0x03, + 0x53, 0xb7, 0x94, 0xef, 0x2a, 0x7d, 0x10, 0x41, + 0x6a, 0x8d, 0x2d, 0x16, 0x7a, 0x28, 0xa4, 0x8e, + 0x4f, 0x36, 0xbf, 0xb6, 0xdb, 0x05, 0xc0, 0xad, + 0x29, 0xbf, 0x85, 0xd4, 0xdb, 0x4a, 0xed, 0x04, + 0x6e, 0x51, 0x46, 0xcb, 0xda, 0x5b, 0xe1, 0xf3, + 0x33, 0x77, 0x6a, 0x18, 0x47, 0x09, 0xbb, 0x04, + 0x74, 0x94, 0xea, 0xd7, 0x86, 0xb5, 0xf7, 0x15, + 0xc9, 0x10, 0x42, 0x69, 0x8d, 0x31, 0x6d, 0xa7, + 0xed, 0xde, 0x03, 0xcd, 0xc5, 0xe5, 0xc5, 0x0d, + 0xc5, 0xc1, 0x14, 0xad, 0x3e, 0x2b, 0x41, 0xe4, + 0x1e, 0xfa, 0xd7, 0xb1, 0xd3, 0x97, 0xd6, 0xfa, + 0xc6, 0xf3, 0x3a, 0xf7, 0xc6, 0x6d, 0x6e, 0x58, + 0x5a, 0xc6, 0x02, 0x7a, 0x40, 0x48, 0x60, 0xda, + 0x38, 0x69, 0xf1, 0x7a, 0xaa, 0xc6, 0x88, 0x35, + 0xb2, 0x76, 0xd2, 0x5d, 0xe3, 0x6e, 0xed, 0x63, + 0x20, 0x49, 0x3c, 0x32, 0x44, 0xc2, 0xed, 0x80, + 0x17, 0xb4, 0xb4, 0x57, 0xb2, 0xa3, 0xb4, 0x86, + 0x1a, 0xeb, 0x07, 0x87, 0x16, 0x37, 0x4e, 0x8d, + 0xf2, 0x89, 0x5f, 0x25, 0x63, 0x24, 0xb6, 0x8e, + 0xa5, 0x37, 0x81, 0xd4, 0x53, 0x48, 0x82, 0x90, + 0xfd, 0x27, 0xaa, 0x31, 0xb9, 0x8b, 0xab, 0xdc, + 0x05, 0xdc, 0x4c, 0x82, 0xf1, 0xe5, 0xef, 0x6b, + 0xcd, 0x0d, 0x0b, 0x8b, 0xf8, 0x5c, 0x0b, 0x1c, + 0x0d, 0x09, 0x3b, 0x42, 0x94, 0xca, 0xe9, 0xdb, + 0xeb, 0xed, 0x51, 0x8d, 0xcc, 0x46, 0xf8, 0x9b, + 0x6f, 0x64, 0x1a, 0x25, 0x6b, 0x89, 0xe3, 0x25, + 0xa5, 0xc4, 0xf0, 0x80, 0xda, 0x72, 0xf5, 0x55, + 0x8d, 0x10, 0x15, 0x42, 0xf7, 0x48, 0x65, 0xac, + 0x32, 0x92, 0x65, 0x34, 0xbd, 0xcb, 0x2d, 0xdd, + 0x3d, 0x4c, 0xd6, 0xb2, 0xf7, 0x84, 0x93, 0x52, + 0x06, 0xc2, 0x08, 0xae, 0xda, 0x1d, 0xca, 0xde, + 0x88, 0x29, 0x57, 0x1a, 0x6b, 0x57, 0x67, 0xdf, + 0x1c, 0x5a, 0x82, 0xf2, 0x28, 0x2c, 0x63, 0x70, + 0x71, 0x82, 0xda, 0x84, 0xb8, 0x8e, 0xb0, 0x14, + 0xaf, 0x5c, 0x95, 0x63, 0xc8, 0x62, 0x5a, 0xfd, + 0x3f, 0x3e, 0x1e, 0xc1, 0xad, 0x89, 0xae, 0x80, + 0xc1, 0x03, 0x5d, 0xb1, 0xad, 0xd9, 0xb2, 0xa7, + 0x69, 0x52, 0x48, 0x82, 0x27, 0x4b, 0x62, 0x6e, + 0x70, 0xf8, 0x48, 0x71, 0xf7, 0x4e, 0x63, 0xe6, + 0x89, 0xd2, 0x39, 0xc6, 0x32, 0x4b, 0x68, 0xf7, + 0x17, 0x0a, 0x17, 0x01, 0xd5, 0x52, 0xc8, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x83, 0x78, 0x44, 0x1b, 0xc2, 0x0a, 0x06, 0x8d, + 0xfe, 0xf8, 0xbe, 0xe6, 0xb8, 0xfb, 0x40, 0xba, + 0x42, 0xe6, 0xfa, 0x37, 0xfb, 0xe2, 0xfb, 0x9a, + 0xe3, 0xed, 0x02, 0xe9, 0x0b, 0x1c, 0x3e, 0xc7, + 0x9d, 0x2f, 0x4f, 0xe3, 0x3c, 0xcd, 0x3e, 0xaa, + 0xde, 0xa4, 0x5e, 0x6f, 0xea, 0x63, 0xf0, 0xfe, + 0x02, 0xb3, 0x5a, 0x7a, 0x34, 0x5e, 0x08, 0xed, + 0x2c, 0x39, 0xbf, 0xa9, 0x8f, 0xc3, 0xf8, 0x0a, + 0xcd, 0x69, 0xe8, 0xd1, 0x78, 0x23, 0xb4, 0xb8, + 0xac, 0xff, 0x00, 0x67, 0x88, 0xf5, 0x54, 0x38, + 0xea, 0xe5, 0xed, 0xef, 0xcb, 0x2a, 0x22, 0x2f, + 0x4d, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x82, 0xa7, 0xed, 0x1f, 0x28, + 0x6d, 0x30, 0xad, 0xb1, 0x88, 0xff, 0x00, 0x1b, + 0x20, 0xf0, 0xca, 0x0d, 0xfd, 0x1b, 0x28, 0xe7, + 0x76, 0x4d, 0x02, 0xf7, 0x1f, 0xec, 0xef, 0x4f, + 0x8b, 0x1b, 0x71, 0x7d, 0x03, 0xe4, 0xbb, 0xe8, + 0xda, 0x67, 0x77, 0x48, 0xe1, 0xdd, 0x91, 0x57, + 0x6c, 0x07, 0x91, 0x49, 0xe4, 0xb4, 0xbe, 0x3f, + 0x29, 0x93, 0xb7, 0xc9, 0x5d, 0xbe, 0x57, 0x49, + 0x69, 0xc3, 0xd1, 0x44, 0x1c, 0x04, 0x5d, 0xcb, + 0xb8, 0xf6, 0xb7, 0x86, 0xbb, 0x4e, 0xfd, 0xaa, + 0x61, 0x05, 0x3f, 0x35, 0xec, 0xfb, 0x06, 0xcc, + 0x55, 0xd4, 0x98, 0xd8, 0x1c, 0xcb, 0xc8, 0xe3, + 0x2f, 0x84, 0xf4, 0x8e, 0x75, 0x4b, 0x7b, 0xae, + 0x1a, 0x13, 0x4d, 0xa0, 0x51, 0x6c, 0x7b, 0x39, + 0xcb, 0xf9, 0xfe, 0x11, 0xb6, 0xaf, 0x35, 0x9b, + 0x1e, 0xe1, 0x11, 0xae, 0xfe, 0x8c, 0xf7, 0x51, + 0x9f, 0x83, 0xdc, 0x56, 0x85, 0x0f, 0x87, 0xd2, + 0xd8, 0xec, 0x35, 0xfc, 0xf7, 0xd6, 0x4f, 0x99, + 0xae, 0xb9, 0x04, 0x49, 0x13, 0x9c, 0x0c, 0x7b, + 0x5d, 0xc7, 0xb1, 0xa1, 0xa0, 0xec, 0x3b, 0xb6, + 0xa0, 0xad, 0x7b, 0x38, 0xf5, 0xc6, 0x6f, 0xc2, + 0x1f, 0x69, 0x22, 0xbb, 0x5f, 0x59, 0x5b, 0x5f, + 0xda, 0x4b, 0x67, 0x74, 0xce, 0x92, 0x09, 0x9a, + 0x5a, 0xf6, 0xfc, 0x23, 0xa8, 0x46, 0xf0, 0xb4, + 0x30, 0xda, 0x6b, 0x1f, 0x85, 0xb9, 0xba, 0xb9, + 0xb4, 0x74, 0xae, 0x7d, 0xe1, 0xac, 0xa2, 0x47, + 0x02, 0x07, 0x74, 0x5d, 0xdc, 0xd1, 0xa3, 0xf4, + 0x94, 0xb2, 0x0e, 0x75, 0xa7, 0xaf, 0x6e, 0x74, + 0x8e, 0xa2, 0x97, 0x01, 0x90, 0x79, 0xf3, 0x1b, + 0x87, 0x8e, 0x8a, 0x47, 0x6c, 0x68, 0x2e, 0xfa, + 0xb9, 0x47, 0x50, 0x3b, 0xbd, 0x77, 0x5d, 0x4c, + 0xfb, 0x4c, 0xfe, 0xdb, 0x6f, 0xfe, 0x4c, 0x7e, + 0x2b, 0xd4, 0xae, 0x7f, 0x4b, 0xe3, 0x33, 0xe2, + 0x2f, 0x3d, 0xe3, 0x63, 0xe0, 0xaf, 0x04, 0x91, + 0x10, 0xd7, 0x51, 0xdb, 0xda, 0x49, 0x0e, 0xa8, + 0xe5, 0x5f, 0x59, 0x2d, 0x3b, 0x69, 0x93, 0xc4, + 0xc5, 0x8a, 0xbc, 0x96, 0x67, 0xc3, 0x09, 0x61, + 0x12, 0xf1, 0x0e, 0x95, 0xc5, 0x80, 0xb5, 0xbc, + 0x4e, 0xe1, 0xa1, 0xd8, 0x7a, 0x88, 0x35, 0x27, + 0xc6, 0x8c, 0xa6, 0x88, 0x8a, 0xc8, 0x0a, 0xbd, + 0xf6, 0x51, 0x3a, 0x2f, 0x28, 0xc6, 0x35, 0xec, + 0xf7, 0xc2, 0xa7, 0x59, 0xe4, 0x24, 0xd4, 0x36, + 0x58, 0x1d, 0x35, 0x52, 0x4c, 0x53, 0x3b, 0xcf, + 0x2b, 0xfe, 0xdc, 0x5d, 0xe5, 0x79, 0x99, 0x55, + 0xd3, 0x2d, 0x2d, 0xd9, 0x69, 0x6d, 0x0d, 0xb4, + 0x44, 0x96, 0x5b, 0xb1, 0xb1, 0xb0, 0xbb, 0x69, + 0xa3, 0x00, 0x68, 0xaf, 0x61, 0x45, 0x62, 0xf4, + 0x9e, 0x2b, 0x17, 0x93, 0x9b, 0x27, 0x6b, 0xd2, + 0x74, 0xf3, 0xf1, 0x8e, 0x17, 0x10, 0x58, 0xd1, + 0x21, 0xe2, 0x77, 0x00, 0xe1, 0x14, 0xec, 0xa0, + 0x88, 0xf6, 0xa2, 0x00, 0xd3, 0xf6, 0xe0, 0x0a, + 0x01, 0x70, 0xd0, 0x07, 0x50, 0x70, 0x3d, 0x5a, + 0x31, 0x9e, 0xad, 0xb4, 0xf2, 0x11, 0x78, 0x8d, + 0x5a, 0xd9, 0xdc, 0x0d, 0x96, 0x7a, 0xd1, 0x96, + 0x97, 0xae, 0x91, 0xb1, 0xb1, 0xe2, 0x40, 0x62, + 0x21, 0xa6, 0xa0, 0x16, 0xfc, 0x66, 0xbb, 0xaa, + 0xb7, 0xe0, 0x89, 0xb0, 0x43, 0x1c, 0x0c, 0x24, + 0xb6, 0x26, 0xb5, 0x8d, 0x27, 0x7d, 0x1a, 0x28, + 0x2a, 0x83, 0xed, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x04, 0x66, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, + 0xb5, 0x36, 0xde, 0xf4, 0x73, 0x28, 0x4c, 0xb7, + 0xd7, 0x43, 0xcc, 0x7b, 0x6a, 0x6d, 0xbd, 0xe8, + 0xe6, 0x5e, 0x76, 0x0f, 0x9e, 0xc7, 0x69, 0xb5, + 0xfa, 0x65, 0xd1, 0x77, 0x83, 0x67, 0x45, 0x5a, + 0xd8, 0x6f, 0x3d, 0x16, 0x6f, 0x26, 0xff, 0x00, + 0x14, 0xaa, 0x96, 0x84, 0xdd, 0x79, 0xfc, 0xaf, + 0x9e, 0xad, 0xb7, 0x9e, 0x8b, 0x37, 0x93, 0x7f, + 0x8a, 0x55, 0x4b, 0x42, 0x6e, 0xbc, 0xfe, 0x57, + 0xcf, 0x5e, 0xad, 0x3b, 0x15, 0x77, 0x9c, 0x35, + 0xf1, 0xad, 0x79, 0xcb, 0x5a, 0x22, 0x2c, 0xdb, + 0x08, 0x88, 0x80, 0xa9, 0x9e, 0xd3, 0xac, 0x64, + 0x97, 0x17, 0x6d, 0x90, 0x88, 0x54, 0xd9, 0x4a, + 0x43, 0xfa, 0xcd, 0x92, 0x94, 0x3f, 0xb4, 0xd0, + 0xae, 0x6b, 0x1d, 0xc5, 0xbc, 0x37, 0x30, 0x49, + 0x6f, 0x70, 0xc1, 0x24, 0x32, 0xb4, 0xb2, 0x46, + 0x3b, 0x71, 0x69, 0xde, 0x10, 0x6b, 0x61, 0xb2, + 0x50, 0x65, 0x31, 0x96, 0xf7, 0xd0, 0x3b, 0x89, + 0xb2, 0xb0, 0x71, 0x8e, 0x56, 0xbc, 0x0a, 0x3d, + 0xa7, 0xae, 0x0a, 0xdc, 0x73, 0xd8, 0xc6, 0xb9, + 0xef, 0x70, 0x63, 0x1a, 0x0b, 0x9c, 0xe3, 0xb0, + 0x00, 0x37, 0x92, 0xa9, 0x27, 0x46, 0x6a, 0x2c, + 0x35, 0xcb, 0xe6, 0xd3, 0x19, 0x10, 0xd8, 0x24, + 0x35, 0x36, 0xf3, 0x1a, 0x7b, 0x86, 0xa1, 0xcc, + 0x75, 0x3a, 0xbb, 0xd7, 0xcd, 0xce, 0x9d, 0xd7, + 0x99, 0x91, 0xe6, 0xd9, 0x6b, 0xf8, 0xa0, 0xb4, + 0x3f, 0x58, 0xc8, 0x88, 0xee, 0x87, 0x81, 0x1b, + 0x5b, 0xc5, 0xee, 0x94, 0x12, 0x9a, 0x5f, 0x55, + 0x5d, 0x67, 0xf2, 0x37, 0xb0, 0xb6, 0xdd, 0x8d, + 0xb1, 0xb6, 0x24, 0xc5, 0x72, 0xd2, 0x43, 0x88, + 0x73, 0xb8, 0x63, 0x04, 0x1d, 0x95, 0x23, 0x6a, + 0x8a, 0xf6, 0x6a, 0xe1, 0x15, 0xde, 0x62, 0xca, + 0x4d, 0x97, 0x0d, 0x91, 0xae, 0x73, 0x4e, 0xfa, + 0x35, 0xcf, 0x63, 0xbb, 0x05, 0x5a, 0xf0, 0xb8, + 0x5b, 0x2c, 0x2d, 0x8b, 0x6c, 0xac, 0xc1, 0xe1, + 0x07, 0x8a, 0x49, 0x1d, 0xdf, 0x3d, 0xe7, 0x7b, + 0x9c, 0xa1, 0x33, 0x7a, 0x46, 0xf1, 0xd9, 0x4f, + 0xc6, 0xf4, 0xfd, 0xcb, 0x6c, 0xf2, 0x07, 0x6c, + 0xac, 0x76, 0xc6, 0x3c, 0xee, 0x27, 0x71, 0xdf, + 0xca, 0x08, 0xa2, 0x0b, 0x2d, 0xdc, 0xd1, 0xc1, + 0x6b, 0x34, 0xd2, 0x90, 0xd8, 0xe3, 0x8d, 0xce, + 0x79, 0x3c, 0x80, 0x02, 0x4a, 0xa5, 0xfb, 0x34, + 0x8d, 0xe3, 0x09, 0x94, 0x98, 0x8a, 0x32, 0x49, + 0x08, 0x67, 0xc9, 0x8f, 0x6f, 0x6d, 0x65, 0xba, + 0xc1, 0xeb, 0xac, 0xdc, 0x62, 0xcf, 0x2d, 0x77, + 0x6f, 0x6b, 0x64, 0x4f, 0xf1, 0x7a, 0x01, 0x52, + 0xf0, 0x3a, 0xa1, 0xbb, 0xf9, 0x89, 0xa2, 0xb3, + 0xe3, 0xf1, 0x36, 0xb8, 0xcc, 0x58, 0xc7, 0x59, + 0x8e, 0x18, 0xd8, 0xc7, 0x34, 0x17, 0x6f, 0x73, + 0x9c, 0x36, 0xb9, 0xc7, 0xaa, 0x4a, 0x0a, 0xc7, + 0xb2, 0xcf, 0x53, 0x5d, 0xff, 0x00, 0xe4, 0x7c, + 0xc6, 0xa9, 0x0f, 0x68, 0x5f, 0xda, 0xd7, 0x1e, + 0x52, 0x2f, 0x1c, 0x2c, 0x9a, 0x2f, 0x4f, 0x5e, + 0xe0, 0x31, 0xf3, 0xdb, 0x5e, 0x3e, 0x37, 0xbe, + 0x59, 0x7a, 0x46, 0x98, 0x89, 0x22, 0x9c, 0x21, + 0xbb, 0x78, 0x9a, 0xde, 0xa2, 0xdf, 0xd4, 0x18, + 0x91, 0x99, 0xc4, 0x4f, 0x8e, 0xe3, 0x11, 0x3a, + 0x50, 0x0b, 0x24, 0x22, 0xa0, 0x39, 0xa4, 0x39, + 0xb5, 0x1d, 0x4d, 0x88, 0x34, 0x71, 0xd1, 0x3e, + 0x5d, 0x0b, 0x0c, 0x51, 0xed, 0x7b, 0xf1, 0xa5, + 0xad, 0x03, 0xaa, 0x62, 0x34, 0x55, 0x0d, 0x19, + 0xa6, 0x99, 0x99, 0xc6, 0xcb, 0x2b, 0x32, 0x77, + 0x36, 0x6f, 0x86, 0x5e, 0x17, 0xc1, 0x09, 0xa3, + 0x76, 0xb4, 0x16, 0xb8, 0x8a, 0x8d, 0xfb, 0x7b, + 0x0a, 0xd1, 0xa5, 0x31, 0x5a, 0xa7, 0x17, 0x20, + 0xb6, 0xc9, 0xdc, 0x45, 0x2e, 0x36, 0x18, 0x8c, + 0x70, 0x46, 0xc3, 0x52, 0x1d, 0x51, 0xc3, 0x4e, + 0xe0, 0x1a, 0x52, 0xbb, 0xca, 0xd4, 0xbb, 0xd2, + 0x19, 0x6c, 0x76, 0x4e, 0x4c, 0x9e, 0x97, 0xba, + 0x65, 0xb9, 0x9c, 0x93, 0x2d, 0xa4, 0xbd, 0xe6, + 0xd3, 0x52, 0x06, 0xc2, 0x08, 0xae, 0xe0, 0x77, + 0x20, 0xc5, 0x7f, 0xa1, 0xad, 0x2d, 0xad, 0x24, + 0x9b, 0x21, 0x9e, 0xbb, 0x65, 0xab, 0x40, 0x12, + 0xba, 0x53, 0x56, 0xd0, 0x9a, 0x50, 0x8a, 0x9e, + 0x55, 0x62, 0xd3, 0x36, 0x76, 0x56, 0x58, 0x58, + 0x2d, 0xec, 0x2e, 0x7c, 0xf2, 0xd5, 0xa5, 0xee, + 0x8e, 0xe3, 0x60, 0x0e, 0xe2, 0x71, 0x27, 0x76, + 0xcd, 0x8a, 0xbb, 0x73, 0xa6, 0xb5, 0x86, 0x7d, + 0xf1, 0xc5, 0x9f, 0xbc, 0x86, 0xde, 0xc6, 0x37, + 0x07, 0x3a, 0x1b, 0x7d, 0xa5, 0xc4, 0x72, 0xd0, + 0x0a, 0x57, 0xae, 0x4e, 0xc5, 0x3b, 0x99, 0xc5, + 0x64, 0x1d, 0x83, 0x18, 0x9c, 0x09, 0x8a, 0xd9, + 0xa5, 0xa2, 0x12, 0xf9, 0x1c, 0x5b, 0xc3, 0x10, + 0x14, 0x21, 0xbc, 0x2d, 0x3b, 0x5d, 0xd5, 0x41, + 0x48, 0xd4, 0xfd, 0x2e, 0xaa, 0xcc, 0xdd, 0x49, + 0x88, 0x80, 0x4b, 0x0e, 0x2e, 0x02, 0x25, 0x9d, + 0xbb, 0xe5, 0xe0, 0x3c, 0x9d, 0x5e, 0x50, 0xd1, + 0xd4, 0x57, 0x6d, 0x23, 0x9c, 0xb5, 0xcc, 0x61, + 0xa1, 0x7c, 0x2d, 0x6c, 0x52, 0x5b, 0x35, 0xb0, + 0xcd, 0x03, 0x76, 0x06, 0x16, 0x8d, 0x9c, 0x23, + 0xf4, 0x5c, 0x36, 0x85, 0x97, 0x4d, 0x60, 0x61, + 0xc0, 0xe2, 0xe3, 0xb3, 0x65, 0x1f, 0x33, 0xbb, + 0xbb, 0x99, 0x47, 0xc6, 0x90, 0xf5, 0x3a, 0xc3, + 0x70, 0x51, 0x50, 0xe9, 0x6c, 0x8e, 0x33, 0x53, + 0x3b, 0x29, 0x87, 0x92, 0x26, 0xd8, 0x5c, 0xfa, + 0x55, 0xa4, 0x8e, 0x73, 0x4d, 0x1c, 0x7b, 0xb0, + 0xce, 0x16, 0xb8, 0x6f, 0xee, 0x9b, 0xd8, 0x41, + 0x6a, 0x44, 0x44, 0x05, 0xa5, 0x9a, 0xb2, 0xb9, + 0xbf, 0xc6, 0x4f, 0x69, 0x6b, 0x39, 0xb5, 0x9e, + 0x50, 0x03, 0x27, 0x15, 0x05, 0xb4, 0x70, 0x3f, + 0x16, 0x85, 0x6e, 0xa2, 0x0a, 0x37, 0xe4, 0x5d, + 0x51, 0xff, 0x00, 0xf1, 0x03, 0xff, 0x00, 0x6a, + 0x6f, 0xa6, 0xb3, 0x6b, 0xf8, 0x25, 0xb6, 0xd1, + 0xd6, 0xd6, 0xf3, 0x49, 0xd3, 0x4b, 0x0c, 0x90, + 0xb1, 0xf2, 0x9a, 0xd5, 0xce, 0x6b, 0x1c, 0x0b, + 0xb6, 0xed, 0xda, 0xae, 0x6a, 0x0f, 0x58, 0x60, + 0xee, 0xf3, 0x98, 0x91, 0x65, 0x68, 0xe8, 0xd9, + 0x20, 0x95, 0xb2, 0x56, 0x52, 0x43, 0x68, 0xd0, + 0xe1, 0xf1, 0x43, 0xba, 0xa8, 0x34, 0x33, 0x98, + 0xcf, 0xc4, 0x74, 0x14, 0x2d, 0x68, 0xac, 0xb6, + 0xf6, 0xd1, 0x5c, 0x45, 0xd5, 0xab, 0x18, 0x38, + 0x87, 0xba, 0xda, 0xa8, 0x6c, 0x96, 0x66, 0x4c, + 0xde, 0x99, 0xc2, 0x62, 0x61, 0x7d, 0x6e, 0xb2, + 0x32, 0xb6, 0x1b, 0x8a, 0x6f, 0x02, 0x02, 0x1a, + 0x49, 0xe7, 0xd8, 0xe5, 0x7b, 0xb0, 0xb5, 0x75, + 0xbe, 0x3a, 0xda, 0xce, 0x6a, 0x39, 0xd1, 0x42, + 0xc8, 0xa4, 0xa6, 0xd6, 0x9a, 0x34, 0x35, 0xd4, + 0xeb, 0x2a, 0xb6, 0x9b, 0xd0, 0xd7, 0x18, 0x9c, + 0xf3, 0xb2, 0x13, 0xc9, 0x1c, 0x96, 0xd0, 0xf4, + 0x9e, 0x66, 0xc6, 0x97, 0x17, 0x02, 0xf3, 0x40, + 0x5c, 0x0b, 0x40, 0x14, 0x6f, 0x51, 0x07, 0xcf, + 0xb4, 0xb8, 0x63, 0xb7, 0xd3, 0x56, 0x76, 0xf1, + 0x0a, 0x47, 0x0c, 0xec, 0x8d, 0x83, 0xf5, 0x5b, + 0x13, 0xda, 0x15, 0xaf, 0x1b, 0xea, 0xdb, 0x3f, + 0xfc, 0x78, 0xbc, 0x46, 0xa8, 0x9d, 0x69, 0x81, + 0xbc, 0xcf, 0x63, 0x22, 0xb3, 0xb3, 0x7c, 0x6c, + 0x91, 0x93, 0x09, 0x09, 0x94, 0x90, 0x29, 0xc2, + 0xe6, 0xfc, 0x56, 0xbb, 0xf4, 0x94, 0xd5, 0xa4, + 0x4e, 0x82, 0xd2, 0x08, 0x1e, 0x41, 0x74, 0x51, + 0x32, 0x37, 0x11, 0xba, 0xad, 0x68, 0x69, 0xa7, + 0x61, 0x06, 0x54, 0x44, 0x40, 0x44, 0x44, 0x11, + 0xda, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, 0xe7, 0x35, + 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, 0xbf, 0xb4, + 0xd5, 0xb1, 0xa8, 0xfd, 0x47, 0x79, 0xe4, 0xfe, + 0x73, 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, 0xbb, + 0xfb, 0x4d, 0x57, 0x8e, 0x1c, 0xe9, 0x63, 0x3c, + 0xc5, 0x3b, 0x93, 0xad, 0x62, 0x44, 0x45, 0x46, + 0xc2, 0x22, 0x20, 0x22, 0x22, 0x02, 0xd5, 0xc8, + 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, 0x56, 0xd2, + 0xd5, 0xc8, 0x7a, 0x15, 0xcf, 0x92, 0x7f, 0x8a, + 0x54, 0xd3, 0x9e, 0x15, 0xb9, 0xb1, 0x56, 0x89, + 0xd4, 0x82, 0xd2, 0x7e, 0x8f, 0x71, 0xe1, 0xb7, + 0xc5, 0x53, 0xca, 0x07, 0x49, 0xfa, 0x3d, 0xc7, + 0x86, 0xdf, 0x15, 0x4f, 0x2d, 0x31, 0x1c, 0x5a, + 0xb4, 0xfd, 0xcc, 0x30, 0x3c, 0xb5, 0xbd, 0x13, + 0xac, 0x44, 0x45, 0x93, 0xa4, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x05, 0x1f, 0xa8, 0x3d, 0x53, 0x3f, + 0xc9, 0xf1, 0x82, 0x90, 0x51, 0xfa, 0x83, 0xd5, + 0x33, 0xfc, 0x9f, 0x18, 0x2b, 0xdb, 0xdb, 0xa7, + 0x4c, 0x32, 0xc4, 0xf0, 0x2e, 0xee, 0x57, 0xa9, + 0xee, 0x95, 0xf5, 0x43, 0x7c, 0x37, 0xf6, 0xd4, + 0xb3, 0xf7, 0x28, 0x9d, 0x2b, 0xea, 0x86, 0xf8, + 0x6f, 0xed, 0xa9, 0x67, 0xee, 0x53, 0x77, 0x8b, + 0x5e, 0xf4, 0xa3, 0x0d, 0xc0, 0xb7, 0xbb, 0x0e, + 0x73, 0x75, 0xfe, 0x4f, 0x1e, 0x55, 0x9f, 0x62, + 0x15, 0xfd, 0x50, 0x2e, 0xbf, 0xc9, 0xe3, 0xca, + 0xb3, 0xec, 0x42, 0xbf, 0xae, 0x5b, 0x39, 0xeb, + 0xdf, 0x97, 0xb1, 0xf1, 0x4c, 0xd8, 0x3f, 0xe3, + 0x5b, 0x11, 0x11, 0x6c, 0xf3, 0x44, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x41, 0xbc, 0x22, 0x0d, 0xe1, + 0x05, 0x03, 0x46, 0xff, 0x00, 0x7c, 0x5f, 0x73, + 0x5c, 0x7d, 0xa0, 0x5d, 0x21, 0x73, 0x7d, 0x1b, + 0xfd, 0xf1, 0x7d, 0xcd, 0x71, 0xf6, 0x81, 0x74, + 0x85, 0x8e, 0x1f, 0x63, 0xce, 0x97, 0xa7, 0xf1, + 0x9e, 0x66, 0x9f, 0x55, 0x6f, 0x52, 0x2f, 0x37, + 0xf5, 0x31, 0xf8, 0x7f, 0x01, 0x59, 0xad, 0x3d, + 0x1a, 0x2f, 0x04, 0x76, 0x96, 0x1c, 0xdf, 0xd4, + 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, 0xf4, 0x68, + 0xbc, 0x11, 0xda, 0x5c, 0x56, 0x7f, 0xb3, 0xc4, + 0x7a, 0xaa, 0x1c, 0x75, 0x72, 0xf6, 0xf7, 0xe5, + 0x95, 0x11, 0x17, 0xa6, 0xc0, 0x44, 0x44, 0x04, + 0x45, 0xf3, 0x24, 0x91, 0xc4, 0xc7, 0x49, 0x23, + 0x83, 0x23, 0x60, 0x2e, 0x7b, 0xdc, 0x68, 0x00, + 0x1b, 0xc9, 0x25, 0x07, 0xd2, 0x2a, 0x95, 0xe7, + 0xb4, 0x7c, 0x63, 0x27, 0x30, 0x63, 0x6d, 0x66, + 0xc8, 0xb9, 0xbb, 0xdd, 0x18, 0xe1, 0x6f, 0xb9, + 0xb0, 0xb8, 0x8f, 0x71, 0x79, 0x69, 0xed, 0x1f, + 0x1c, 0xeb, 0x81, 0x6f, 0x92, 0xb4, 0x9b, 0x1c, + 0xe7, 0x7c, 0x79, 0x07, 0x13, 0x47, 0x85, 0xb0, + 0x38, 0x0e, 0xbd, 0x10, 0x5b, 0x91, 0x78, 0xc7, + 0xb2, 0x46, 0x36, 0x48, 0xdc, 0x1e, 0xc7, 0x80, + 0xe6, 0xb9, 0xa6, 0xa0, 0x83, 0xb4, 0x10, 0x57, + 0xa8, 0x08, 0x88, 0x80, 0x88, 0xb5, 0x32, 0x79, + 0x5b, 0x0c, 0x55, 0xb7, 0x9c, 0xdf, 0xcc, 0x21, + 0x8e, 0xbc, 0x2d, 0xae, 0xd7, 0x39, 0xdf, 0xa2, + 0xd6, 0x8d, 0xa4, 0xa0, 0xdb, 0x45, 0xe0, 0x3c, + 0x4d, 0x0e, 0x1b, 0x88, 0xa8, 0xf7, 0x57, 0xa8, + 0x08, 0x88, 0x80, 0xbc, 0x73, 0x9a, 0xd6, 0x97, + 0x38, 0x86, 0xb5, 0xa2, 0xa5, 0xc7, 0x60, 0x00, + 0x72, 0x95, 0xea, 0xf9, 0x92, 0x36, 0x48, 0xc7, + 0x47, 0x23, 0x43, 0xd8, 0xf0, 0x5a, 0xf6, 0x9d, + 0xa0, 0x83, 0xb0, 0x82, 0x83, 0x07, 0xe2, 0x78, + 0xcd, 0xfe, 0x79, 0x07, 0xfc, 0xac, 0xfa, 0x4b, + 0xec, 0x5e, 0xd9, 0x96, 0xb5, 0xe2, 0xe2, 0x22, + 0xc9, 0x0f, 0x0b, 0x1d, 0xc6, 0xda, 0x39, 0xdf, + 0xa2, 0xd3, 0x5d, 0xa5, 0x56, 0xaf, 0xf0, 0x78, + 0x66, 0x6a, 0x9c, 0x45, 0xbb, 0x2c, 0x6d, 0xdb, + 0x0c, 0xb0, 0xdc, 0x99, 0x23, 0x11, 0xb7, 0x85, + 0xc5, 0xad, 0x05, 0xbc, 0x42, 0x9c, 0x8b, 0x16, + 0xaf, 0xc2, 0xdb, 0x4b, 0xf8, 0x46, 0x32, 0xca, + 0x26, 0x5b, 0x36, 0x49, 0xae, 0x0c, 0x2c, 0x88, + 0x06, 0x81, 0x20, 0x85, 0xcf, 0x61, 0xa0, 0xfd, + 0x66, 0x84, 0x16, 0xf2, 0xe6, 0xb4, 0x17, 0x38, + 0xf0, 0xb5, 0xa2, 0xa4, 0x9d, 0x80, 0x00, 0xbc, + 0x8e, 0x58, 0xe5, 0x60, 0x92, 0x27, 0xb6, 0x46, + 0x1d, 0xcf, 0x69, 0x0e, 0x07, 0x98, 0x8d, 0x8a, + 0xbd, 0x79, 0x92, 0x7e, 0x57, 0x4d, 0xd9, 0x47, + 0x11, 0xe1, 0xb8, 0xcd, 0x18, 0xed, 0x9c, 0x06, + 0xf6, 0xef, 0xf3, 0x9f, 0xd9, 0x6b, 0x1c, 0xb3, + 0x68, 0x86, 0xb5, 0xba, 0x62, 0xcd, 0xad, 0x14, + 0x6b, 0x4c, 0xa0, 0x0e, 0xb0, 0x96, 0x44, 0x13, + 0xa8, 0x8a, 0x17, 0x52, 0x6a, 0x8b, 0x5d, 0x3c, + 0xdb, 0x77, 0x5c, 0x41, 0x24, 0xe2, 0xe4, 0xb8, + 0x37, 0xa3, 0x20, 0x53, 0x82, 0x9b, 0xf8, 0xb9, + 0xd0, 0x4d, 0x22, 0xa6, 0xff, 0x00, 0xd9, 0x96, + 0x3f, 0xd3, 0x6e, 0xff, 0x00, 0x75, 0x7d, 0xc3, + 0xed, 0x33, 0x0a, 0xe9, 0x03, 0x2e, 0x6d, 0xae, + 0x6d, 0x41, 0xf8, 0xce, 0x68, 0x70, 0x1d, 0x72, + 0x01, 0xaf, 0xbc, 0x82, 0xde, 0x8b, 0x1d, 0xbc, + 0xf0, 0xdc, 0xc0, 0xcb, 0x8b, 0x77, 0xb6, 0x58, + 0x65, 0x68, 0x74, 0x72, 0x34, 0xd4, 0x16, 0x9d, + 0xc4, 0x2c, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x23, 0x32, 0xdf, 0x5d, 0x0f, 0x31, 0xed, 0xa9, + 0xb6, 0xf7, 0xa3, 0x99, 0x42, 0x65, 0xbe, 0xba, + 0x1e, 0x63, 0xdb, 0x53, 0x6d, 0xef, 0x47, 0x32, + 0xf3, 0xb0, 0x7c, 0xf6, 0x3b, 0x4d, 0xaf, 0xd3, + 0x2e, 0x8b, 0xbc, 0x1b, 0x3a, 0x2a, 0xd6, 0xc3, + 0x79, 0xe8, 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, + 0xb4, 0x26, 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0x6d, + 0xbc, 0xf4, 0x59, 0xbc, 0x9b, 0xfc, 0x52, 0xaa, + 0x5a, 0x13, 0x75, 0xe7, 0xf2, 0xbe, 0x7a, 0xf5, + 0x69, 0xd8, 0xab, 0xbc, 0xe1, 0xaf, 0x8d, 0x6b, + 0xce, 0x5a, 0xd1, 0x11, 0x66, 0xd8, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0x1d, 0xa8, + 0xfd, 0x47, 0x79, 0xe4, 0xfe, 0x73, 0x56, 0xbe, + 0x86, 0xf5, 0x33, 0xbc, 0xbb, 0xfb, 0x4d, 0x5b, + 0x1a, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, 0xe7, 0x35, + 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, 0xbf, 0xb4, + 0xd5, 0x78, 0xe1, 0xce, 0x96, 0x33, 0xcc, 0x53, + 0xb9, 0x3a, 0xd6, 0x24, 0x44, 0x54, 0x6c, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x2d, 0x5c, 0x87, 0xa1, + 0x5c, 0xf9, 0x27, 0xf8, 0xa5, 0x6d, 0x2d, 0x5c, + 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, 0xa5, 0x4d, + 0x39, 0xe1, 0x5b, 0x9b, 0x15, 0x68, 0x9d, 0x48, + 0x2d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, 0x7c, 0x55, + 0x3c, 0xa0, 0x74, 0x9f, 0xa3, 0xdc, 0x78, 0x6d, + 0xf1, 0x54, 0xf2, 0xd3, 0x11, 0xc5, 0xab, 0x4f, + 0xdc, 0xc3, 0x03, 0xcb, 0x5b, 0xd1, 0x3a, 0xc4, + 0x44, 0x59, 0x3a, 0x44, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x51, 0xfa, 0x83, 0xd5, 0x33, 0xfc, 0x9f, + 0x18, 0x29, 0x05, 0x1f, 0xa8, 0x3d, 0x53, 0x3f, + 0xc9, 0xf1, 0x82, 0xbd, 0xbd, 0xba, 0x74, 0xc3, + 0x2c, 0x4f, 0x02, 0xee, 0xe5, 0x7a, 0x9e, 0xe9, + 0x5f, 0x54, 0x37, 0xc3, 0x7f, 0x6d, 0x4b, 0x3f, + 0x72, 0x89, 0xd2, 0xbe, 0xa8, 0x6f, 0x86, 0xfe, + 0xda, 0x96, 0x7e, 0xe5, 0x37, 0x78, 0xb5, 0xef, + 0x4a, 0x30, 0xdc, 0x0b, 0x7b, 0xb0, 0xe7, 0x37, + 0x5f, 0xe4, 0xf1, 0xe5, 0x59, 0xf6, 0x21, 0x5f, + 0xd5, 0x02, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, 0x3e, + 0xc4, 0x2b, 0xfa, 0xe5, 0xb3, 0x9e, 0xbd, 0xf9, + 0x7b, 0x1f, 0x14, 0xcd, 0x83, 0xfe, 0x35, 0xb1, + 0x11, 0x16, 0xcf, 0x34, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x1b, 0xc2, 0x20, 0xde, 0x10, 0x50, + 0x34, 0x6f, 0xf7, 0xc5, 0xf7, 0x35, 0xc7, 0xda, + 0x05, 0xd2, 0x17, 0x37, 0xd1, 0xbf, 0xdf, 0x17, + 0xdc, 0xd7, 0x1f, 0x68, 0x17, 0x48, 0x58, 0xe1, + 0xf6, 0x3c, 0xe9, 0x7a, 0x7f, 0x19, 0xe6, 0x69, + 0xf5, 0x56, 0xf5, 0x22, 0xf3, 0x7f, 0x53, 0x1f, + 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, 0xa2, 0xf0, + 0x47, 0x69, 0x61, 0xcd, 0xfd, 0x4c, 0x7e, 0x1f, + 0xc0, 0x56, 0x6b, 0x4f, 0x46, 0x8b, 0xc1, 0x1d, + 0xa5, 0xc5, 0x67, 0xfb, 0x3c, 0x47, 0xaa, 0xa1, + 0xc7, 0x57, 0x2f, 0x6f, 0x7e, 0x59, 0x51, 0x11, + 0x7a, 0x6c, 0x04, 0x44, 0x40, 0x54, 0x7f, 0x68, + 0xb7, 0xf7, 0x33, 0xcf, 0x63, 0xa7, 0xad, 0x5d, + 0x43, 0x7a, 0xe6, 0xbe, 0x5a, 0x72, 0xd5, 0xdc, + 0x11, 0xb4, 0xf5, 0xab, 0x52, 0x55, 0xe1, 0x50, + 0x75, 0x3f, 0xf0, 0xbd, 0xa1, 0xe2, 0x65, 0x93, + 0x64, 0x6e, 0xe8, 0x28, 0x79, 0x3b, 0xf7, 0x37, + 0xb6, 0x82, 0xe3, 0x88, 0xc3, 0xd9, 0x61, 0xec, + 0xd9, 0x69, 0x67, 0x18, 0x60, 0x68, 0xa3, 0xe4, + 0xf8, 0xcf, 0x77, 0x2b, 0x9c, 0x79, 0x6a, 0xb1, + 0xe7, 0xf0, 0xb6, 0xd9, 0xac, 0x74, 0xb6, 0x93, + 0xb4, 0x19, 0x0b, 0x49, 0x82, 0x52, 0x3b, 0xa6, + 0x48, 0x07, 0x72, 0xe0, 0x79, 0xf7, 0xa9, 0x14, + 0x41, 0x0b, 0xa4, 0x71, 0x59, 0x3c, 0x46, 0x24, + 0x58, 0xe4, 0x65, 0x8e, 0x52, 0xc7, 0x13, 0x08, + 0x8c, 0x93, 0xc0, 0xc3, 0xb7, 0x80, 0x97, 0x01, + 0xb8, 0xd6, 0x8b, 0x57, 0x31, 0xae, 0x2c, 0x6c, + 0x2f, 0x0e, 0x3a, 0xce, 0x09, 0x72, 0x57, 0xc0, + 0xd1, 0xd1, 0x41, 0xb9, 0xa7, 0xf4, 0x4b, 0xa8, + 0x6a, 0x7a, 0xa0, 0x05, 0x31, 0x90, 0xbe, 0x64, + 0x58, 0xbb, 0xbb, 0xcb, 0x77, 0xb6, 0x43, 0x0c, + 0x32, 0x48, 0xc7, 0x30, 0x87, 0x0e, 0x26, 0xb4, + 0xd3, 0x68, 0xeb, 0xaa, 0xcf, 0xb3, 0x2b, 0x28, + 0x86, 0x2a, 0x7c, 0x9b, 0x80, 0x75, 0xd5, 0xcc, + 0xce, 0x63, 0xa4, 0x3b, 0x5d, 0xc2, 0xc0, 0x0d, + 0x2b, 0xd7, 0x71, 0x24, 0xa0, 0xcf, 0x6b, 0xed, + 0x02, 0xdc, 0x5d, 0x32, 0xd7, 0x31, 0x63, 0x3e, + 0x29, 0xd2, 0x77, 0xb2, 0x4b, 0xb5, 0x9b, 0x7a, + 0xb5, 0x6b, 0x48, 0x1d, 0x75, 0x61, 0xc9, 0xe4, + 0x23, 0xc7, 0x63, 0xa7, 0xc8, 0x3d, 0xa6, 0x58, + 0xed, 0xe3, 0xe9, 0x0b, 0x58, 0x45, 0x5c, 0x3a, + 0xc7, 0x77, 0x2a, 0x8d, 0xd6, 0xb6, 0x10, 0x5f, + 0x69, 0xbb, 0xc3, 0x2b, 0x43, 0x9f, 0x6d, 0x19, + 0x9e, 0x17, 0x1d, 0xed, 0x73, 0x36, 0xec, 0x3d, + 0x71, 0xb1, 0x42, 0x58, 0xdd, 0xcb, 0x75, 0xec, + 0xc6, 0xe1, 0xd2, 0x9e, 0x27, 0x43, 0x0c, 0x90, + 0x82, 0x77, 0xf0, 0xb1, 0xfd, 0xcf, 0x60, 0x6c, + 0x41, 0x96, 0xeb, 0xda, 0x55, 0x8c, 0x70, 0xc0, + 0xeb, 0x5b, 0x39, 0x2e, 0x25, 0x95, 0x9d, 0x24, + 0xb1, 0x87, 0x01, 0xd1, 0x02, 0x48, 0xe1, 0x73, + 0x80, 0x35, 0x3b, 0x2a, 0xa1, 0x35, 0xc6, 0xa1, + 0x39, 0x6b, 0x4b, 0x26, 0x0b, 0x19, 0xed, 0x98, + 0xd7, 0x36, 0x76, 0x4b, 0x28, 0xee, 0x5e, 0x24, + 0x60, 0x3c, 0x2d, 0x23, 0x97, 0x6a, 0xb2, 0xfb, + 0x3a, 0xb3, 0x86, 0x0d, 0x37, 0x1d, 0xc3, 0x5a, + 0x3a, 0x5b, 0xa9, 0x24, 0x74, 0x8f, 0xa6, 0xd2, + 0x1a, 0xe2, 0xc6, 0x8e, 0x61, 0x45, 0xa3, 0xed, + 0x44, 0x01, 0x8e, 0xc7, 0x81, 0xb0, 0x0b, 0x83, + 0x41, 0xc9, 0xde, 0x20, 0xb0, 0xe9, 0xfc, 0xdb, + 0xb2, 0xf0, 0x48, 0xe7, 0x59, 0xcf, 0x63, 0xd0, + 0x16, 0xb2, 0x97, 0x02, 0x85, 0xf5, 0x6d, 0x78, + 0x9b, 0xb0, 0x6c, 0x14, 0x51, 0x77, 0xda, 0xf6, + 0xd5, 0xb7, 0x6f, 0xb2, 0xc4, 0x59, 0xcd, 0x95, + 0x9a, 0x3a, 0x87, 0xba, 0x1e, 0xf0, 0x53, 0x7d, + 0x08, 0x0e, 0x27, 0x9e, 0x94, 0x5b, 0xda, 0xba, + 0xf2, 0x5b, 0x3d, 0x2b, 0x77, 0x34, 0x4e, 0x2d, + 0x90, 0xc4, 0xd8, 0xda, 0xe1, 0xbc, 0x74, 0x85, + 0xac, 0x34, 0xf7, 0x09, 0x55, 0x3d, 0x29, 0xab, + 0x31, 0x18, 0x3c, 0x4b, 0x2d, 0xbc, 0xca, 0xe5, + 0xf7, 0x0f, 0x25, 0xf3, 0xcd, 0x13, 0x1a, 0x5a, + 0xf3, 0x5e, 0xe6, 0x87, 0x8b, 0x70, 0x1b, 0x10, + 0x59, 0x31, 0x1a, 0xde, 0xca, 0xf6, 0xf4, 0x63, + 0x6f, 0xad, 0xa5, 0xc6, 0x5e, 0xbb, 0x63, 0x23, + 0x9f, 0x73, 0x8f, 0x50, 0x12, 0x1a, 0x41, 0x3d, + 0x70, 0xb7, 0x35, 0x16, 0x7f, 0xf0, 0x0b, 0x66, + 0x5d, 0xc9, 0x69, 0x25, 0xcc, 0x0e, 0x77, 0x03, + 0xdf, 0x1b, 0x9a, 0x38, 0x09, 0xef, 0x78, 0xb8, + 0xb9, 0x0a, 0xa4, 0x6b, 0x1d, 0x49, 0x8f, 0xce, + 0xda, 0xc0, 0x6d, 0x2c, 0xee, 0x61, 0xbe, 0xb6, + 0x90, 0x39, 0x93, 0xbd, 0x80, 0x77, 0x14, 0x35, + 0x6d, 0x5a, 0x49, 0xdf, 0x42, 0x17, 0x40, 0xb6, + 0x6c, 0x79, 0x6c, 0x1c, 0x2d, 0xbd, 0x67, 0x1b, + 0x2f, 0x2d, 0xd8, 0x67, 0x61, 0xea, 0xb9, 0xa0, + 0x9f, 0x76, 0xa8, 0x33, 0x59, 0x5f, 0xda, 0xdf, + 0x58, 0xc7, 0x7f, 0x6e, 0xf0, 0x6d, 0xe5, 0x67, + 0x18, 0x79, 0xd9, 0x41, 0xcb, 0xc5, 0xd4, 0xe1, + 0xe5, 0x51, 0x78, 0x4d, 0x55, 0x06, 0x6e, 0xfa, + 0xe2, 0xde, 0xca, 0xda, 0x43, 0x6d, 0x6d, 0x5e, + 0x2b, 0xc7, 0x10, 0x23, 0x3f, 0xa3, 0xc2, 0xdd, + 0xfd, 0xd7, 0x69, 0x50, 0xaf, 0x1f, 0x96, 0xc3, + 0x4d, 0x77, 0xa3, 0xa0, 0xb9, 0x61, 0xb7, 0xba, + 0x99, 0x81, 0xb2, 0xb9, 0xd4, 0xe1, 0x6c, 0x94, + 0xd8, 0xe3, 0xf1, 0x78, 0x81, 0x1c, 0x63, 0xfd, + 0x57, 0x4a, 0xc2, 0x61, 0xad, 0x70, 0xb8, 0xe8, + 0xac, 0x2d, 0xc5, 0x43, 0x36, 0xc9, 0x27, 0x2b, + 0xde, 0x7b, 0xe7, 0x94, 0x18, 0xaf, 0x71, 0xf7, + 0x53, 0x6a, 0x1c, 0x6e, 0x41, 0x80, 0x1b, 0x7b, + 0x48, 0xee, 0x19, 0x31, 0x26, 0x8e, 0x06, 0x56, + 0x80, 0xca, 0x0e, 0x54, 0xca, 0x63, 0xee, 0xae, + 0x72, 0x98, 0x8b, 0xa8, 0x40, 0x31, 0x58, 0xcf, + 0x24, 0x93, 0xd4, 0xd0, 0x86, 0xba, 0x37, 0x30, + 0x70, 0x8e, 0x5d, 0xa5, 0x4a, 0x22, 0x0a, 0xfe, + 0x33, 0x03, 0x77, 0x6b, 0x9c, 0xb8, 0xb8, 0x90, + 0xb4, 0xe3, 0xa2, 0x32, 0xc9, 0x8f, 0x60, 0x3b, + 0x5b, 0x25, 0xd7, 0x09, 0x9a, 0xa3, 0x92, 0x9c, + 0x26, 0x9c, 0xeb, 0x73, 0x4d, 0x58, 0x5c, 0xe3, + 0x70, 0xb0, 0x59, 0x5d, 0x06, 0xb6, 0x68, 0xcc, + 0x85, 0xc1, 0xa7, 0x88, 0x77, 0x52, 0x39, 0xe3, + 0x6f, 0x31, 0x52, 0x8a, 0x37, 0x3b, 0x9e, 0xb1, + 0xc0, 0xda, 0xb2, 0xea, 0xf4, 0x3d, 0xd1, 0xc8, + 0xfe, 0x89, 0xa2, 0x30, 0x09, 0xe2, 0x20, 0xbb, + 0x94, 0x8e, 0xa2, 0x09, 0x25, 0x44, 0xf6, 0xa5, + 0xde, 0xe2, 0xbc, 0xa4, 0xbf, 0xfd, 0xb5, 0xbc, + 0xdf, 0x69, 0xba, 0x75, 0xee, 0x6b, 0x1a, 0xcb, + 0x8a, 0xb8, 0x86, 0x8e, 0xe1, 0xbb, 0xce, 0xcf, + 0xd3, 0x5a, 0x1e, 0xd4, 0xc1, 0xe0, 0xc5, 0x81, + 0xbf, 0xa4, 0x94, 0x03, 0xd7, 0xfe, 0x1a, 0x0b, + 0xdb, 0x4f, 0x72, 0x39, 0x82, 0x87, 0xd5, 0xf6, + 0xd8, 0xf9, 0xb4, 0xfd, 0xeb, 0xaf, 0x9a, 0xde, + 0x18, 0xe2, 0x73, 0xa2, 0x90, 0x81, 0xc4, 0xd9, + 0x00, 0xee, 0x38, 0x0e, 0xfa, 0xf1, 0x28, 0x27, + 0x69, 0x6d, 0x70, 0x19, 0x56, 0x6a, 0x17, 0x38, + 0xd3, 0x63, 0x4b, 0xa4, 0x6d, 0x7a, 0xd5, 0xda, + 0xa0, 0x2c, 0xac, 0xa6, 0xc9, 0x66, 0xff, 0x00, + 0x07, 0xd5, 0x79, 0x0b, 0xa8, 0xa7, 0x8d, 0xe0, + 0x47, 0x13, 0xdd, 0xc4, 0xc7, 0xb8, 0xee, 0x02, + 0x47, 0x1a, 0x37, 0x8b, 0x90, 0xd3, 0x6a, 0x0b, + 0x57, 0xb3, 0x47, 0xce, 0xed, 0x38, 0xe1, 0x25, + 0x78, 0x1b, 0x70, 0xf1, 0x0d, 0x7f, 0x46, 0x8d, + 0x26, 0x9f, 0x28, 0x95, 0x6b, 0x58, 0x6c, 0xec, + 0xad, 0xac, 0x2d, 0x63, 0xb3, 0xb4, 0x8c, 0x45, + 0x04, 0x23, 0x85, 0x8c, 0x1c, 0x9f, 0xfd, 0x4a, + 0xcc, 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0x33, + 0x2d, 0xf5, 0xd0, 0xf3, 0x1e, 0xda, 0x9b, 0x6f, + 0x7a, 0x39, 0x94, 0x26, 0x5b, 0xeb, 0xa1, 0xe6, + 0x3d, 0xb5, 0x36, 0xde, 0xf4, 0x73, 0x2f, 0x3b, + 0x07, 0xcf, 0x63, 0xb4, 0xda, 0xfd, 0x32, 0xe8, + 0xbb, 0xc1, 0xb3, 0xa2, 0xad, 0x6c, 0x37, 0x9e, + 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, 0x42, + 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x56, 0xdb, 0xcf, + 0x45, 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, + 0x37, 0x5e, 0x7f, 0x2b, 0xe7, 0xaf, 0x56, 0x9d, + 0x8a, 0xbb, 0xce, 0x1a, 0xf8, 0xd6, 0xbc, 0xe5, + 0xad, 0x11, 0x16, 0x6d, 0x84, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x11, 0xda, 0x8f, 0xd4, + 0x77, 0x9e, 0x4f, 0xe7, 0x35, 0x6b, 0xe8, 0x6f, + 0x53, 0x3b, 0xcb, 0xbf, 0xb4, 0xd5, 0xb1, 0xa8, + 0xfd, 0x47, 0x79, 0xe4, 0xfe, 0x73, 0x56, 0xbe, + 0x86, 0xf5, 0x33, 0xbc, 0xbb, 0xfb, 0x4d, 0x57, + 0x8e, 0x1c, 0xe9, 0x63, 0x3c, 0xc5, 0x3b, 0x93, + 0xad, 0x62, 0x44, 0x45, 0x46, 0xc2, 0x22, 0x20, + 0x22, 0x22, 0x02, 0xd5, 0xc8, 0x7a, 0x15, 0xcf, + 0x92, 0x7f, 0x8a, 0x56, 0xd2, 0xd5, 0xc8, 0x7a, + 0x15, 0xcf, 0x92, 0x7f, 0x8a, 0x54, 0xd3, 0x9e, + 0x15, 0xb9, 0xb1, 0x56, 0x89, 0xd4, 0x82, 0xd2, + 0x7e, 0x8f, 0x71, 0xe1, 0xb7, 0xc5, 0x53, 0xca, + 0x07, 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, 0x15, + 0x4f, 0x2d, 0x31, 0x1c, 0x5a, 0xb4, 0xfd, 0xcc, + 0x30, 0x3c, 0xb5, 0xbd, 0x13, 0xac, 0x44, 0x45, + 0x93, 0xa4, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, + 0x1f, 0xa8, 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, + 0x90, 0x51, 0xfa, 0x83, 0xd5, 0x33, 0xfc, 0x9f, + 0x18, 0x2b, 0xdb, 0xdb, 0xa7, 0x4c, 0x32, 0xc4, + 0xf0, 0x2e, 0xee, 0x57, 0xa9, 0xee, 0x95, 0xf5, + 0x43, 0x7c, 0x37, 0xf6, 0xd4, 0xb3, 0xf7, 0x28, + 0x9d, 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, 0xa9, + 0x67, 0xee, 0x53, 0x77, 0x8b, 0x5e, 0xf4, 0xa3, + 0x0d, 0xc0, 0xb7, 0xbb, 0x0e, 0x73, 0x75, 0xfe, + 0x4f, 0x1e, 0x55, 0x9f, 0x62, 0x15, 0xfd, 0x50, + 0x2e, 0xbf, 0xc9, 0xe3, 0xca, 0xb3, 0xec, 0x42, + 0xbf, 0xae, 0x5b, 0x39, 0xeb, 0xdf, 0x97, 0xb1, + 0xf1, 0x4c, 0xd8, 0x3f, 0xe3, 0x5b, 0x11, 0x11, + 0x6c, 0xf3, 0x44, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x41, 0xbc, 0x22, 0x0d, 0xe1, 0x05, 0x03, 0x46, + 0xff, 0x00, 0x7c, 0x5f, 0x73, 0x5c, 0x7d, 0xa0, + 0x5d, 0x21, 0x73, 0x7d, 0x1b, 0xfd, 0xf1, 0x7d, + 0xcd, 0x71, 0xf6, 0x81, 0x74, 0x85, 0x8e, 0x1f, + 0x63, 0xce, 0x97, 0xa7, 0xf1, 0x9e, 0x66, 0x9f, + 0x55, 0x6f, 0x52, 0x2f, 0x37, 0xf5, 0x31, 0xf8, + 0x7f, 0x01, 0x59, 0xad, 0x3d, 0x1a, 0x2f, 0x04, + 0x76, 0x96, 0x1c, 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, + 0x05, 0x66, 0xb4, 0xf4, 0x68, 0xbc, 0x11, 0xda, + 0x5c, 0x56, 0x7f, 0xb3, 0xc4, 0x7a, 0xaa, 0x1c, + 0x75, 0x72, 0xf6, 0xf7, 0xe5, 0x95, 0x11, 0x17, + 0xa6, 0xc0, 0x44, 0x44, 0x05, 0x56, 0xd7, 0xb8, + 0x0b, 0x8c, 0x9d, 0x8c, 0x57, 0xb6, 0x2d, 0x2e, + 0xbe, 0xb0, 0x25, 0xed, 0x6b, 0x7b, 0xe7, 0x30, + 0xd0, 0x90, 0xde, 0xbb, 0x48, 0xe2, 0x0a, 0xd2, + 0x88, 0x2a, 0x98, 0x4f, 0x68, 0x38, 0x8b, 0xab, + 0x76, 0xc7, 0x94, 0x93, 0xcc, 0xaf, 0x58, 0x38, + 0x65, 0xe3, 0x07, 0x81, 0xce, 0x1b, 0x0b, 0x83, + 0x80, 0x34, 0xe6, 0x2b, 0x16, 0xa2, 0xd7, 0xd8, + 0xc8, 0xed, 0x24, 0xb5, 0xc3, 0xc9, 0xe7, 0x97, + 0xd3, 0x83, 0x1c, 0x6e, 0x8c, 0x1e, 0x16, 0x71, + 0x6c, 0xe2, 0xa9, 0x1d, 0xd3, 0xba, 0x80, 0x29, + 0xfb, 0xed, 0x3b, 0x82, 0xc8, 0x48, 0x65, 0xbc, + 0xb1, 0x86, 0x59, 0x0e, 0xf9, 0x38, 0x78, 0x5c, + 0x79, 0xdc, 0xda, 0x12, 0xbd, 0xb0, 0xd3, 0xf8, + 0x4c, 0x6b, 0xfa, 0x4b, 0x2b, 0x28, 0xa1, 0x90, + 0x6e, 0x90, 0x0a, 0xb8, 0x73, 0x39, 0xd5, 0x28, + 0x21, 0xb4, 0x7e, 0x97, 0x7d, 0x86, 0x02, 0xe2, + 0x0b, 0xd6, 0xf0, 0x5c, 0xe4, 0xda, 0xee, 0x99, + 0x87, 0x7b, 0x18, 0x5a, 0x5a, 0xd6, 0x9e, 0xbe, + 0xda, 0x95, 0x13, 0xa3, 0xb3, 0x50, 0xe9, 0xc9, + 0x6e, 0xb4, 0xf6, 0x70, 0xf9, 0xa3, 0xd9, 0x29, + 0x7c, 0x52, 0xbc, 0x1e, 0x03, 0x50, 0x01, 0xdb, + 0xd4, 0x75, 0x2a, 0x0a, 0xbf, 0xad, 0x4c, 0x86, + 0x27, 0x19, 0x92, 0x68, 0x6d, 0xfd, 0xac, 0x77, + 0x21, 0xbd, 0xe9, 0x7b, 0x6a, 0xe1, 0xcc, 0xed, + 0xe1, 0x05, 0x5f, 0x58, 0x6a, 0xdc, 0x74, 0xb8, + 0xc9, 0x31, 0x58, 0xc9, 0x45, 0xed, 0xdd, 0xf0, + 0x11, 0x52, 0x1e, 0xe8, 0x35, 0xa4, 0xed, 0xda, + 0x37, 0x93, 0xb8, 0x05, 0x9e, 0x4c, 0x5c, 0x98, + 0x9f, 0x67, 0x77, 0x16, 0x53, 0x0a, 0x4c, 0xdb, + 0x77, 0xbe, 0x60, 0x39, 0x1e, 0xf7, 0x71, 0x11, + 0xee, 0x56, 0x8a, 0x73, 0x1f, 0xa7, 0xf0, 0x98, + 0xd7, 0xf4, 0x96, 0x36, 0x51, 0x41, 0x26, 0xee, + 0x90, 0x0a, 0xbb, 0xdc, 0x73, 0xaa, 0x42, 0xdc, + 0x9e, 0xde, 0x0b, 0x98, 0x1f, 0x6f, 0x70, 0xc6, + 0xcb, 0x0c, 0x83, 0x85, 0xf1, 0xbc, 0x55, 0xae, + 0x1d, 0x42, 0x10, 0x41, 0x68, 0x1f, 0xed, 0x4b, + 0x3e, 0x79, 0x7e, 0xd1, 0xea, 0x33, 0xda, 0x93, + 0x1d, 0xf8, 0x55, 0x8c, 0x80, 0x55, 0xac, 0xb9, + 0x3c, 0x47, 0xa9, 0x56, 0x1a, 0x76, 0x95, 0xbe, + 0xd6, 0xd2, 0xda, 0xce, 0x06, 0xdb, 0xda, 0x44, + 0xd8, 0x20, 0x65, 0x78, 0x63, 0x60, 0xa3, 0x45, + 0x4d, 0x4d, 0x07, 0x3a, 0x5c, 0xda, 0xdb, 0x5d, + 0xc2, 0xeb, 0x7b, 0xa8, 0x99, 0x3c, 0x2f, 0xef, + 0xa3, 0x90, 0x07, 0x34, 0xfb, 0x85, 0x04, 0x1d, + 0xd5, 0xce, 0x3b, 0x55, 0xe9, 0xdb, 0xcb, 0x3c, + 0x64, 0xed, 0x9a, 0x4e, 0x89, 0xa2, 0x94, 0x2d, + 0xe1, 0x90, 0x0e, 0x36, 0x35, 0xdc, 0x40, 0x6f, + 0x2d, 0xa2, 0x8a, 0xd1, 0x9a, 0xaa, 0xc6, 0xcf, + 0x1e, 0x30, 0xb9, 0x79, 0x05, 0x8d, 0xdd, 0x93, + 0x9c, 0xc6, 0xf4, 0xdd, 0xcb, 0x4b, 0x6a, 0x4f, + 0x0d, 0x79, 0x1c, 0xdd, 0xdb, 0x55, 0xae, 0xc3, + 0x11, 0x8c, 0xc6, 0xf1, 0xfe, 0x1f, 0x6d, 0x1d, + 0xb7, 0x4b, 0x4e, 0x93, 0xa3, 0x14, 0xe2, 0xa6, + 0xea, 0xd5, 0x63, 0xc8, 0x60, 0x70, 0xd9, 0x37, + 0x71, 0xdf, 0x59, 0xc5, 0x3c, 0x9b, 0xba, 0x47, + 0x0a, 0x3a, 0x9e, 0x13, 0x68, 0x50, 0x57, 0xf3, + 0xba, 0xe1, 0xde, 0x73, 0x6d, 0x8f, 0xd3, 0x46, + 0x3b, 0xeb, 0xd9, 0x9f, 0x47, 0xb8, 0x34, 0xbe, + 0x30, 0x3f, 0x44, 0x11, 0x4a, 0xf5, 0xcf, 0x20, + 0x52, 0xba, 0x93, 0x50, 0x0c, 0x06, 0x1f, 0xce, + 0x66, 0x2c, 0x7d, 0xf4, 0x8d, 0x0c, 0x85, 0x8d, + 0xef, 0x5d, 0x2d, 0x3b, 0xa7, 0x53, 0xf4, 0x5b, + 0xbd, 0x6e, 0xe3, 0xf0, 0x98, 0x8c, 0x65, 0x4d, + 0x85, 0xa4, 0x56, 0xee, 0x70, 0xa3, 0x9e, 0xc1, + 0xdd, 0x11, 0xe1, 0x1a, 0x95, 0xf5, 0x77, 0x89, + 0xc6, 0x5f, 0x4a, 0xc9, 0xaf, 0x2d, 0x62, 0xb8, + 0x92, 0x2d, 0x91, 0xbe, 0x46, 0x87, 0x16, 0xed, + 0xae, 0xca, 0xf5, 0xd0, 0x52, 0xf1, 0xfa, 0x12, + 0x4c, 0x86, 0x9f, 0xb8, 0xbb, 0xbf, 0x24, 0xe6, + 0x6f, 0xcf, 0x9c, 0x42, 0xf7, 0xef, 0x67, 0xc6, + 0x6b, 0x5d, 0xe5, 0x2b, 0xdd, 0x7b, 0x9d, 0x45, + 0x2d, 0xa1, 0xf5, 0x14, 0xb7, 0xf6, 0xee, 0xc5, + 0x64, 0x09, 0x6e, 0x4e, 0xc3, 0xb8, 0x70, 0x7f, + 0x7c, 0xf6, 0x34, 0xf0, 0xd4, 0xfe, 0xb3, 0x77, + 0x3b, 0xb2, 0xad, 0x2b, 0x50, 0x62, 0x71, 0x82, + 0xf7, 0xf1, 0x01, 0x6b, 0x10, 0xbd, 0x26, 0xa6, + 0xe4, 0x34, 0x09, 0x2a, 0x47, 0x09, 0xee, 0xb9, + 0x90, 0x6d, 0xa2, 0x22, 0x02, 0xc7, 0x35, 0xbd, + 0xbd, 0xc3, 0x43, 0x2e, 0x22, 0x64, 0xcd, 0x06, + 0xa1, 0xb2, 0x34, 0x3c, 0x03, 0xd5, 0xa3, 0x81, + 0x59, 0x11, 0x06, 0xaf, 0xe1, 0x78, 0xb0, 0x6a, + 0x2c, 0xed, 0xc1, 0xf2, 0x4c, 0xfa, 0x2a, 0x9d, + 0xed, 0x4b, 0xbd, 0xc5, 0x79, 0x49, 0x7f, 0xfb, + 0x6a, 0xf6, 0xb5, 0xaf, 0x71, 0x98, 0xec, 0x87, + 0x07, 0x9f, 0x5b, 0x47, 0x73, 0xd1, 0x12, 0x63, + 0xe9, 0x5a, 0x1d, 0xc2, 0x4d, 0x2b, 0x4a, 0xf3, + 0x20, 0xd8, 0x1d, 0xe8, 0xe6, 0x0a, 0xab, 0xaf, + 0xb4, 0xe9, 0xc9, 0xd8, 0x0c, 0x85, 0xab, 0x7f, + 0xf9, 0xd6, 0x23, 0x8b, 0xb9, 0xef, 0x9f, 0x10, + 0xda, 0x5b, 0xce, 0xdd, 0xe1, 0x5a, 0xd1, 0x05, + 0x7b, 0x45, 0x6a, 0x21, 0x9b, 0xc5, 0x86, 0xcc, + 0xea, 0xdf, 0x5a, 0x80, 0xcb, 0x8e, 0xab, 0x87, + 0xc5, 0x93, 0xe5, 0x72, 0xf5, 0xd5, 0x85, 0x69, + 0xda, 0x61, 0xf1, 0x36, 0x53, 0x3a, 0xe2, 0xce, + 0xce, 0x1b, 0x79, 0x9e, 0x08, 0x74, 0x91, 0xb4, + 0x34, 0x90, 0x4d, 0x48, 0x34, 0x5b, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x23, 0x32, 0xdf, 0x5d, + 0x0f, 0x31, 0xed, 0xa9, 0xb6, 0xf7, 0xa3, 0x99, + 0x42, 0x65, 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, + 0x6d, 0xef, 0x47, 0x32, 0xf3, 0xb0, 0x7c, 0xf6, + 0x3b, 0x4d, 0xaf, 0xd3, 0x2e, 0x8b, 0xbc, 0x1b, + 0x3a, 0x2a, 0xd6, 0xc3, 0x79, 0xe8, 0xb3, 0x79, + 0x37, 0xf8, 0xa5, 0x54, 0xb4, 0x26, 0xeb, 0xcf, + 0xe5, 0x7c, 0xf5, 0x6d, 0xbc, 0xf4, 0x59, 0xbc, + 0x9b, 0xfc, 0x52, 0xaa, 0x5a, 0x13, 0x75, 0xe7, + 0xf2, 0xbe, 0x7a, 0xf5, 0x69, 0xd8, 0xab, 0xbc, + 0xe1, 0xaf, 0x8d, 0x6b, 0xce, 0x5a, 0xd1, 0x11, + 0x66, 0xd8, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x41, 0x1d, 0xa8, 0xfd, 0x47, 0x79, 0xe4, + 0xfe, 0x73, 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, + 0xbb, 0xfb, 0x4d, 0x5b, 0x1a, 0x8f, 0xd4, 0x77, + 0x9e, 0x4f, 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, + 0x3b, 0xcb, 0xbf, 0xb4, 0xd5, 0x78, 0xe1, 0xce, + 0x96, 0x33, 0xcc, 0x53, 0xb9, 0x3a, 0xd6, 0x24, + 0x44, 0x54, 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x2d, 0x5c, 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, + 0xa5, 0x6d, 0x2d, 0x5c, 0x87, 0xa1, 0x5c, 0xf9, + 0x27, 0xf8, 0xa5, 0x4d, 0x39, 0xe1, 0x5b, 0x9b, + 0x15, 0x68, 0x9d, 0x48, 0x2d, 0x27, 0xe8, 0xf7, + 0x1e, 0x1b, 0x7c, 0x55, 0x3c, 0xa0, 0x74, 0x9f, + 0xa3, 0xdc, 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0xd3, + 0x11, 0xc5, 0xab, 0x4f, 0xdc, 0xc3, 0x03, 0xcb, + 0x5b, 0xd1, 0x3a, 0xc4, 0x44, 0x59, 0x3a, 0x44, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x51, 0xfa, 0x83, + 0xd5, 0x33, 0xfc, 0x9f, 0x18, 0x29, 0x05, 0x1f, + 0xa8, 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0xbd, + 0xbd, 0xba, 0x74, 0xc3, 0x2c, 0x4f, 0x02, 0xee, + 0xe5, 0x7a, 0x9e, 0xe9, 0x5f, 0x54, 0x37, 0xc3, + 0x7f, 0x6d, 0x4b, 0x3f, 0x72, 0x89, 0xd2, 0xbe, + 0xa8, 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, + 0x37, 0x78, 0xb5, 0xef, 0x4a, 0x30, 0xdc, 0x0b, + 0x7b, 0xb0, 0xe7, 0x37, 0x5f, 0xe4, 0xf1, 0xe5, + 0x59, 0xf6, 0x21, 0x5f, 0xd5, 0x02, 0xeb, 0xfc, + 0x9e, 0x3c, 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xe5, + 0xb3, 0x9e, 0xbd, 0xf9, 0x7b, 0x1f, 0x14, 0xcd, + 0x83, 0xfe, 0x35, 0xb1, 0x11, 0x16, 0xcf, 0x34, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x1b, 0xc2, + 0x20, 0xde, 0x10, 0x50, 0x34, 0x6f, 0xf7, 0xc5, + 0xf7, 0x35, 0xc7, 0xda, 0x05, 0xd2, 0x17, 0x37, + 0xd1, 0xbf, 0xdf, 0x17, 0xdc, 0xd7, 0x1f, 0x68, + 0x17, 0x48, 0x58, 0xe1, 0xf6, 0x3c, 0xe9, 0x7a, + 0x7f, 0x19, 0xe6, 0x69, 0xf5, 0x56, 0xf5, 0x22, + 0xf3, 0x7f, 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, + 0xd3, 0xd1, 0xa2, 0xf0, 0x47, 0x69, 0x61, 0xcd, + 0xfd, 0x4c, 0x7e, 0x1f, 0xc0, 0x56, 0x6b, 0x4f, + 0x46, 0x8b, 0xc1, 0x1d, 0xa5, 0xc5, 0x67, 0xfb, + 0x3c, 0x47, 0xaa, 0xa1, 0xc7, 0x57, 0x2f, 0x6f, + 0x7e, 0x59, 0x51, 0x11, 0x7a, 0x6c, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x11, 0x99, + 0x6f, 0xae, 0x87, 0x98, 0xf6, 0xd4, 0xdb, 0x7b, + 0xd1, 0xcc, 0xa1, 0x32, 0xdf, 0x5d, 0x0f, 0x31, + 0xed, 0xa9, 0xb6, 0xf7, 0xa3, 0x99, 0x79, 0xd8, + 0x3e, 0x7b, 0x1d, 0xa6, 0xd7, 0xe9, 0x97, 0x45, + 0xde, 0x0d, 0x9d, 0x15, 0x6b, 0x61, 0xbc, 0xf4, + 0x59, 0xbc, 0x9b, 0xfc, 0x52, 0xaa, 0x5a, 0x13, + 0x75, 0xe7, 0xf2, 0xbe, 0x7a, 0xb6, 0xde, 0x7a, + 0x2c, 0xde, 0x4d, 0xfe, 0x29, 0x55, 0x2d, 0x09, + 0xba, 0xf3, 0xf9, 0x5f, 0x3d, 0x7a, 0xb4, 0xec, + 0x55, 0xde, 0x70, 0xd7, 0xc6, 0xb5, 0xe7, 0x2d, + 0x68, 0x88, 0xb3, 0x6c, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x8e, 0xd4, 0x7e, 0xa3, + 0xbc, 0xf2, 0x7f, 0x39, 0xab, 0x5f, 0x43, 0x7a, + 0x99, 0xde, 0x5d, 0xfd, 0xa6, 0xad, 0x8d, 0x47, + 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, 0xf4, + 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, 0xbc, + 0x70, 0xe7, 0x4b, 0x19, 0xe6, 0x29, 0xdc, 0x9d, + 0x6b, 0x12, 0x22, 0x2a, 0x36, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x16, 0xae, 0x43, 0xd0, 0xae, 0x7c, + 0x93, 0xfc, 0x52, 0xb6, 0x96, 0xae, 0x43, 0xd0, + 0xae, 0x7c, 0x93, 0xfc, 0x52, 0xa6, 0x9c, 0xf0, + 0xad, 0xcd, 0x8a, 0xb4, 0x4e, 0xa4, 0x16, 0x93, + 0xf4, 0x7b, 0x8f, 0x0d, 0xbe, 0x2a, 0x9e, 0x50, + 0x3a, 0x4f, 0xd1, 0xee, 0x3c, 0x36, 0xf8, 0xaa, + 0x79, 0x69, 0x88, 0xe2, 0xd5, 0xa7, 0xee, 0x61, + 0x81, 0xe5, 0xad, 0xe8, 0x9d, 0x62, 0x22, 0x2c, + 0x9d, 0x22, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x28, + 0xfd, 0x41, 0xea, 0x99, 0xfe, 0x4f, 0x8c, 0x14, + 0x82, 0x8f, 0xd4, 0x1e, 0xa9, 0x9f, 0xe4, 0xf8, + 0xc1, 0x5e, 0xde, 0xdd, 0x3a, 0x61, 0x96, 0x27, + 0x81, 0x77, 0x72, 0xbd, 0x4f, 0x74, 0xaf, 0xaa, + 0x1b, 0xe1, 0xbf, 0xb6, 0xa5, 0x9f, 0xb9, 0x44, + 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, 0x6d, 0x4b, + 0x3f, 0x72, 0x9b, 0xbc, 0x5a, 0xf7, 0xa5, 0x18, + 0x6e, 0x05, 0xbd, 0xd8, 0x73, 0x9b, 0xaf, 0xf2, + 0x78, 0xf2, 0xac, 0xfb, 0x10, 0xaf, 0xea, 0x81, + 0x75, 0xfe, 0x4f, 0x1e, 0x55, 0x9f, 0x62, 0x15, + 0xfd, 0x72, 0xd9, 0xcf, 0x5e, 0xfc, 0xbd, 0x8f, + 0x8a, 0x66, 0xc1, 0xff, 0x00, 0x1a, 0xd8, 0x88, + 0x8b, 0x67, 0x9a, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x0d, 0xe1, 0x10, 0x6f, 0x08, 0x28, 0x1a, + 0x37, 0xfb, 0xe2, 0xfb, 0x9a, 0xe3, 0xed, 0x02, + 0xe9, 0x0b, 0x9b, 0xe8, 0xdf, 0xef, 0x8b, 0xee, + 0x6b, 0x8f, 0xb4, 0x0b, 0xa4, 0x2c, 0x70, 0xfb, + 0x1e, 0x74, 0xbd, 0x3f, 0x8c, 0xf3, 0x34, 0xfa, + 0xab, 0x7a, 0x91, 0x79, 0xbf, 0xa9, 0x8f, 0xc3, + 0xf8, 0x0a, 0xcd, 0x69, 0xe8, 0xd1, 0x78, 0x23, + 0xb4, 0xb0, 0xe6, 0xfe, 0xa6, 0x3f, 0x0f, 0xe0, + 0x2b, 0x35, 0xa7, 0xa3, 0x45, 0xe0, 0x8e, 0xd2, + 0xe2, 0xb3, 0xfd, 0x9e, 0x23, 0xd5, 0x50, 0xe3, + 0xab, 0x97, 0xb7, 0xbf, 0x2c, 0xa8, 0x88, 0xbd, + 0x36, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x08, 0xcc, 0xb7, 0xd7, 0x43, 0xcc, 0x7b, + 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x50, 0x99, 0x6f, + 0xae, 0x87, 0x98, 0xf6, 0xd4, 0xdb, 0x7b, 0xd1, + 0xcc, 0xbc, 0xec, 0x1f, 0x3d, 0x8e, 0xd3, 0x6b, + 0xf4, 0xcb, 0xa2, 0xef, 0x06, 0xce, 0x8a, 0xb5, + 0xb0, 0xde, 0x7a, 0x2c, 0xde, 0x4d, 0xfe, 0x29, + 0x55, 0x2d, 0x09, 0xba, 0xf3, 0xf9, 0x5f, 0x3d, + 0x5b, 0x6f, 0x3d, 0x16, 0x6f, 0x26, 0xff, 0x00, + 0x14, 0xaa, 0x96, 0x84, 0xdd, 0x79, 0xfc, 0xaf, + 0x9e, 0xbd, 0x5a, 0x76, 0x2a, 0xef, 0x38, 0x6b, + 0xe3, 0x5a, 0xf3, 0x96, 0xb4, 0x44, 0x59, 0xb6, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x47, 0x6a, 0x3f, 0x51, 0xde, 0x79, 0x3f, 0x9c, + 0xd5, 0xaf, 0xa1, 0xbd, 0x4c, 0xef, 0x2e, 0xfe, + 0xd3, 0x56, 0xc6, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, + 0xf9, 0xcd, 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, + 0xef, 0xed, 0x35, 0x5e, 0x38, 0x73, 0xa5, 0x8c, + 0xf3, 0x14, 0xee, 0x4e, 0xb5, 0x89, 0x11, 0x15, + 0x1b, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0b, 0x57, + 0x21, 0xe8, 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x5b, + 0x4b, 0x57, 0x21, 0xe8, 0x57, 0x3e, 0x49, 0xfe, + 0x29, 0x53, 0x4e, 0x78, 0x56, 0xe6, 0xc5, 0x5a, + 0x27, 0x52, 0x0b, 0x49, 0xfa, 0x3d, 0xc7, 0x86, + 0xdf, 0x15, 0x4f, 0x28, 0x1d, 0x27, 0xe8, 0xf7, + 0x1e, 0x1b, 0x7c, 0x55, 0x3c, 0xb4, 0xc4, 0x71, + 0x6a, 0xd3, 0xf7, 0x30, 0xc0, 0xf2, 0xd6, 0xf4, + 0x4e, 0xb1, 0x11, 0x16, 0x4e, 0x91, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x14, 0x7e, 0xa0, 0xf5, 0x4c, + 0xff, 0x00, 0x27, 0xc6, 0x0a, 0x41, 0x47, 0xea, + 0x0f, 0x54, 0xcf, 0xf2, 0x7c, 0x60, 0xaf, 0x6f, + 0x6e, 0x9d, 0x30, 0xcb, 0x13, 0xc0, 0xbb, 0xb9, + 0x5e, 0xa7, 0xba, 0x57, 0xd5, 0x0d, 0xf0, 0xdf, + 0xdb, 0x52, 0xcf, 0xdc, 0xa2, 0x74, 0xaf, 0xaa, + 0x1b, 0xe1, 0xbf, 0xb6, 0xa5, 0x9f, 0xb9, 0x4d, + 0xde, 0x2d, 0x7b, 0xd2, 0x8c, 0x37, 0x02, 0xde, + 0xec, 0x39, 0xcd, 0xd7, 0xf9, 0x3c, 0x79, 0x56, + 0x7d, 0x88, 0x57, 0xf5, 0x40, 0xba, 0xff, 0x00, + 0x27, 0x8f, 0x2a, 0xcf, 0xb1, 0x0a, 0xfe, 0xb9, + 0x6c, 0xe7, 0xaf, 0x7e, 0x5e, 0xc7, 0xc5, 0x33, + 0x60, 0xff, 0x00, 0x8d, 0x6c, 0x44, 0x45, 0xb3, + 0xcd, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x06, + 0xf0, 0x88, 0x37, 0x84, 0x14, 0x0d, 0x1b, 0xfd, + 0xf1, 0x7d, 0xcd, 0x71, 0xf6, 0x81, 0x74, 0x85, + 0xcd, 0xf4, 0x6f, 0xf7, 0xc5, 0xf7, 0x35, 0xc7, + 0xda, 0x05, 0xd2, 0x16, 0x38, 0x7d, 0x8f, 0x3a, + 0x5e, 0x9f, 0xc6, 0x79, 0x9a, 0x7d, 0x55, 0xbd, + 0x48, 0xbc, 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, 0x05, + 0x66, 0xb4, 0xf4, 0x68, 0xbc, 0x11, 0xda, 0x58, + 0x73, 0x7f, 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, + 0xd3, 0xd1, 0xa2, 0xf0, 0x47, 0x69, 0x71, 0x59, + 0xfe, 0xcf, 0x11, 0xea, 0xa8, 0x71, 0xd5, 0xcb, + 0xdb, 0xdf, 0x96, 0x54, 0x44, 0x5e, 0x9b, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x04, + 0x66, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, 0xb5, 0x36, + 0xde, 0xf4, 0x73, 0x28, 0x4c, 0xb7, 0xd7, 0x43, + 0xcc, 0x7b, 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x5e, + 0x76, 0x0f, 0x9e, 0xc7, 0x69, 0xb5, 0xfa, 0x65, + 0xd1, 0x77, 0x83, 0x67, 0x45, 0x5a, 0xd8, 0x6f, + 0x3d, 0x16, 0x6f, 0x26, 0xff, 0x00, 0x14, 0xaa, + 0x96, 0x84, 0xdd, 0x79, 0xfc, 0xaf, 0x9e, 0xad, + 0xb7, 0x9e, 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, + 0x4b, 0x42, 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x5e, + 0xad, 0x3b, 0x15, 0x77, 0x9c, 0x35, 0xf1, 0xad, + 0x79, 0xcb, 0x5a, 0x22, 0x2c, 0xdb, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x23, 0xb5, + 0x1f, 0xa8, 0xef, 0x3c, 0x9f, 0xce, 0x6a, 0xd7, + 0xd0, 0xde, 0xa6, 0x77, 0x97, 0x7f, 0x69, 0xab, + 0x63, 0x51, 0xfa, 0x8e, 0xf3, 0xc9, 0xfc, 0xe6, + 0xad, 0x7d, 0x0d, 0xea, 0x67, 0x79, 0x77, 0xf6, + 0x9a, 0xaf, 0x1c, 0x39, 0xd2, 0xc6, 0x79, 0x8a, + 0x77, 0x27, 0x5a, 0xc4, 0x88, 0x8a, 0x8d, 0x84, + 0x44, 0x40, 0x44, 0x44, 0x05, 0xab, 0x90, 0xf4, + 0x2b, 0x9f, 0x24, 0xff, 0x00, 0x14, 0xad, 0xa5, + 0xab, 0x90, 0xf4, 0x2b, 0x9f, 0x24, 0xff, 0x00, + 0x14, 0xa9, 0xa7, 0x3c, 0x2b, 0x73, 0x62, 0xad, + 0x13, 0xa9, 0x05, 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, + 0x6f, 0x8a, 0xa7, 0x94, 0x0e, 0x93, 0xf4, 0x7b, + 0x8f, 0x0d, 0xbe, 0x2a, 0x9e, 0x5a, 0x62, 0x38, + 0xb5, 0x69, 0xfb, 0x98, 0x60, 0x79, 0x6b, 0x7a, + 0x27, 0x58, 0x88, 0x8b, 0x27, 0x48, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, + 0x7f, 0x93, 0xe3, 0x05, 0x20, 0xa3, 0xf5, 0x07, + 0xaa, 0x67, 0xf9, 0x3e, 0x30, 0x57, 0xb7, 0xb7, + 0x4e, 0x98, 0x65, 0x89, 0xe0, 0x5d, 0xdc, 0xaf, + 0x53, 0xdd, 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, + 0xa9, 0x67, 0xee, 0x51, 0x3a, 0x57, 0xd5, 0x0d, + 0xf0, 0xdf, 0xdb, 0x52, 0xcf, 0xdc, 0xa6, 0xef, + 0x16, 0xbd, 0xe9, 0x46, 0x1b, 0x81, 0x6f, 0x76, + 0x1c, 0xe6, 0xeb, 0xfc, 0x9e, 0x3c, 0xab, 0x3e, + 0xc4, 0x2b, 0xfa, 0xa0, 0x5d, 0x7f, 0x93, 0xc7, + 0x95, 0x67, 0xd8, 0x85, 0x7f, 0x5c, 0xb6, 0x73, + 0xd7, 0xbf, 0x2f, 0x63, 0xe2, 0x99, 0xb0, 0x7f, + 0xc6, 0xb6, 0x22, 0x22, 0xd9, 0xe6, 0x88, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x83, 0x78, 0x44, 0x1b, + 0xc2, 0x0a, 0x06, 0x8d, 0xfe, 0xf8, 0xbe, 0xe6, + 0xb8, 0xfb, 0x40, 0xba, 0x42, 0xe6, 0xfa, 0x37, + 0xfb, 0xe2, 0xfb, 0x9a, 0xe3, 0xed, 0x02, 0xe9, + 0x0b, 0x1c, 0x3e, 0xc7, 0x9d, 0x2f, 0x4f, 0xe3, + 0x3c, 0xcd, 0x3e, 0xaa, 0xde, 0xa4, 0x5e, 0x6f, + 0xea, 0x63, 0xf0, 0xfe, 0x02, 0xb3, 0x5a, 0x7a, + 0x34, 0x5e, 0x08, 0xed, 0x2c, 0x39, 0xbf, 0xa9, + 0x8f, 0xc3, 0xf8, 0x0a, 0xcd, 0x69, 0xe8, 0xd1, + 0x78, 0x23, 0xb4, 0xb8, 0xac, 0xff, 0x00, 0x67, + 0x88, 0xf5, 0x54, 0x38, 0xea, 0xe5, 0xed, 0xef, + 0xcb, 0x2a, 0x22, 0x2f, 0x4d, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0x33, 0x2d, + 0xf5, 0xd0, 0xf3, 0x1e, 0xda, 0x9b, 0x6f, 0x7a, + 0x39, 0x94, 0x26, 0x5b, 0xeb, 0xa1, 0xe6, 0x3d, + 0xb5, 0x36, 0xde, 0xf4, 0x73, 0x2f, 0x3b, 0x07, + 0xcf, 0x63, 0xb4, 0xda, 0xfd, 0x32, 0xe8, 0xbb, + 0xc1, 0xb3, 0xa2, 0xad, 0x6c, 0x37, 0x9e, 0x8b, + 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, 0x42, 0x6e, + 0xbc, 0xfe, 0x57, 0xcf, 0x56, 0xdb, 0xcf, 0x45, + 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, 0xa5, 0xa1, 0x37, + 0x5e, 0x7f, 0x2b, 0xe7, 0xaf, 0x56, 0x9d, 0x8a, + 0xbb, 0xce, 0x1a, 0xf8, 0xd6, 0xbc, 0xe5, 0xad, + 0x11, 0x16, 0x6d, 0x84, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x11, 0xda, 0x8f, 0xd4, 0x77, + 0x9e, 0x4f, 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, + 0x3b, 0xcb, 0xbf, 0xb4, 0xd5, 0xb1, 0xa8, 0xfd, + 0x47, 0x79, 0xe4, 0xfe, 0x73, 0x56, 0xbe, 0x86, + 0xf5, 0x33, 0xbc, 0xbb, 0xfb, 0x4d, 0x57, 0x8e, + 0x1c, 0xe9, 0x63, 0x3c, 0xc5, 0x3b, 0x93, 0xad, + 0x62, 0x44, 0x45, 0x46, 0xc2, 0x22, 0x20, 0x22, + 0x22, 0x02, 0xd5, 0xc8, 0x7a, 0x15, 0xcf, 0x92, + 0x7f, 0x8a, 0x56, 0xd2, 0xd5, 0xc8, 0x7a, 0x15, + 0xcf, 0x92, 0x7f, 0x8a, 0x54, 0xd3, 0x9e, 0x15, + 0xb9, 0xb1, 0x56, 0x89, 0xd4, 0x82, 0xd2, 0x7e, + 0x8f, 0x71, 0xe1, 0xb7, 0xc5, 0x53, 0xca, 0x07, + 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, 0x15, 0x4f, + 0x2d, 0x31, 0x1c, 0x5a, 0xb4, 0xfd, 0xcc, 0x30, + 0x3c, 0xb5, 0xbd, 0x13, 0xac, 0x44, 0x45, 0x93, + 0xa4, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0x1f, + 0xa8, 0x3d, 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0x90, + 0x51, 0xfa, 0x83, 0xd5, 0x33, 0xfc, 0x9f, 0x18, + 0x2b, 0xdb, 0xdb, 0xa7, 0x4c, 0x32, 0xc4, 0xf0, + 0x2e, 0xee, 0x57, 0xa9, 0xee, 0x95, 0xf5, 0x43, + 0x7c, 0x37, 0xf6, 0xd4, 0xb3, 0xf7, 0x28, 0x9d, + 0x2b, 0xea, 0x86, 0xf8, 0x6f, 0xed, 0xa9, 0x67, + 0xee, 0x53, 0x77, 0x8b, 0x5e, 0xf4, 0xa3, 0x0d, + 0xc0, 0xb7, 0xbb, 0x0e, 0x73, 0x75, 0xfe, 0x4f, + 0x1e, 0x55, 0x9f, 0x62, 0x15, 0xfd, 0x50, 0x2e, + 0xbf, 0xc9, 0xe3, 0xca, 0xb3, 0xec, 0x42, 0xbf, + 0xae, 0x5b, 0x39, 0xeb, 0xdf, 0x97, 0xb1, 0xf1, + 0x4c, 0xd8, 0x3f, 0xe3, 0x5b, 0x11, 0x11, 0x6c, + 0xf3, 0x44, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x41, + 0xbc, 0x22, 0x0d, 0xe1, 0x05, 0x03, 0x46, 0xff, + 0x00, 0x7c, 0x5f, 0x73, 0x5c, 0x7d, 0xa0, 0x5d, + 0x21, 0x73, 0x7d, 0x1b, 0xfd, 0xf1, 0x7d, 0xcd, + 0x71, 0xf6, 0x81, 0x74, 0x85, 0x8e, 0x1f, 0x63, + 0xce, 0x97, 0xa7, 0xf1, 0x9e, 0x66, 0x9f, 0x55, + 0x6f, 0x52, 0x2f, 0x37, 0xf5, 0x31, 0xf8, 0x7f, + 0x01, 0x59, 0xad, 0x3d, 0x1a, 0x2f, 0x04, 0x76, + 0x96, 0x1c, 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, 0x05, + 0x66, 0xb4, 0xf4, 0x68, 0xbc, 0x11, 0xda, 0x5c, + 0x56, 0x7f, 0xb3, 0xc4, 0x7a, 0xaa, 0x1c, 0x75, + 0x72, 0xf6, 0xf7, 0xe5, 0x95, 0x11, 0x17, 0xa6, + 0xc0, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x41, 0x19, 0x96, 0xfa, 0xe8, 0x79, 0x8f, 0x6d, + 0x4d, 0xb7, 0xbd, 0x1c, 0xca, 0x13, 0x2d, 0xf5, + 0xd0, 0xf3, 0x1e, 0xda, 0x9b, 0x6f, 0x7a, 0x39, + 0x97, 0x9d, 0x83, 0xe7, 0xb1, 0xda, 0x6d, 0x7e, + 0x99, 0x74, 0x5d, 0xe0, 0xd9, 0xd1, 0x56, 0xb6, + 0x1b, 0xcf, 0x45, 0x9b, 0xc9, 0xbf, 0xc5, 0x2a, + 0xa5, 0xa1, 0x37, 0x5e, 0x7f, 0x2b, 0xe7, 0xab, + 0x6d, 0xe7, 0xa2, 0xcd, 0xe4, 0xdf, 0xe2, 0x95, + 0x52, 0xd0, 0x9b, 0xaf, 0x3f, 0x95, 0xf3, 0xd7, + 0xab, 0x4e, 0xc5, 0x5d, 0xe7, 0x0d, 0x7c, 0x6b, + 0x5e, 0x72, 0xd6, 0x88, 0x8b, 0x36, 0xc2, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x08, 0xed, + 0x47, 0xea, 0x3b, 0xcf, 0x27, 0xf3, 0x9a, 0xb5, + 0xf4, 0x37, 0xa9, 0x9d, 0xe5, 0xdf, 0xda, 0x6a, + 0xd8, 0xd4, 0x7e, 0xa3, 0xbc, 0xf2, 0x7f, 0x39, + 0xab, 0x5f, 0x43, 0x7a, 0x99, 0xde, 0x5d, 0xfd, + 0xa6, 0xab, 0xc7, 0x0e, 0x74, 0xb1, 0x9e, 0x62, + 0x9d, 0xc9, 0xd6, 0xb1, 0x22, 0x22, 0xa3, 0x61, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x6a, 0xe4, 0x3d, + 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2b, 0x69, 0x6a, + 0xe4, 0x3d, 0x0a, 0xe7, 0xc9, 0x3f, 0xc5, 0x2a, + 0x69, 0xcf, 0x0a, 0xdc, 0xd8, 0xab, 0x44, 0xea, + 0x41, 0x69, 0x3f, 0x47, 0xb8, 0xf0, 0xdb, 0xe2, + 0xa9, 0xe5, 0x03, 0xa4, 0xfd, 0x1e, 0xe3, 0xc3, + 0x6f, 0x8a, 0xa7, 0x96, 0x98, 0x8e, 0x2d, 0x5a, + 0x7e, 0xe6, 0x18, 0x1e, 0x5a, 0xde, 0x89, 0xd6, + 0x22, 0x22, 0xc9, 0xd2, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x8f, 0xd4, 0x1e, 0xa9, 0x9f, 0xe4, + 0xf8, 0xc1, 0x48, 0x28, 0xfd, 0x41, 0xea, 0x99, + 0xfe, 0x4f, 0x8c, 0x15, 0xed, 0xed, 0xd3, 0xa6, + 0x19, 0x62, 0x78, 0x17, 0x77, 0x2b, 0xd4, 0xf7, + 0x4a, 0xfa, 0xa1, 0xbe, 0x1b, 0xfb, 0x6a, 0x59, + 0xfb, 0x94, 0x4e, 0x95, 0xf5, 0x43, 0x7c, 0x37, + 0xf6, 0xd4, 0xb3, 0xf7, 0x29, 0xbb, 0xc5, 0xaf, + 0x7a, 0x51, 0x86, 0xe0, 0x5b, 0xdd, 0x87, 0x39, + 0xba, 0xff, 0x00, 0x27, 0x8f, 0x2a, 0xcf, 0xb1, + 0x0a, 0xfe, 0xa8, 0x17, 0x5f, 0xe4, 0xf1, 0xe5, + 0x59, 0xf6, 0x21, 0x5f, 0xd7, 0x2d, 0x9c, 0xf5, + 0xef, 0xcb, 0xd8, 0xf8, 0xa6, 0x6c, 0x1f, 0xf1, + 0xad, 0x88, 0x88, 0xb6, 0x79, 0xa2, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x20, 0xde, 0x11, 0x06, 0xf0, + 0x82, 0x81, 0xa3, 0x7f, 0xbe, 0x2f, 0xb9, 0xae, + 0x3e, 0xd0, 0x2e, 0x90, 0xb9, 0xbe, 0x8d, 0xfe, + 0xf8, 0xbe, 0xe6, 0xb8, 0xfb, 0x40, 0xba, 0x42, + 0xc7, 0x0f, 0xb1, 0xe7, 0x4b, 0xd3, 0xf8, 0xcf, + 0x33, 0x4f, 0xaa, 0xb7, 0xa9, 0x17, 0x9b, 0xfa, + 0x98, 0xfc, 0x3f, 0x80, 0xac, 0xd6, 0x9e, 0x8d, + 0x17, 0x82, 0x3b, 0x4b, 0x0e, 0x6f, 0xea, 0x63, + 0xf0, 0xfe, 0x02, 0xb3, 0x5a, 0x7a, 0x34, 0x5e, + 0x08, 0xed, 0x2e, 0x2b, 0x3f, 0xd9, 0xe2, 0x3d, + 0x55, 0x0e, 0x3a, 0xb9, 0x7b, 0x7b, 0xf2, 0xca, + 0x88, 0x8b, 0xd3, 0x60, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x8c, 0xcb, 0x7d, 0x74, + 0x3c, 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, + 0x09, 0x96, 0xfa, 0xe8, 0x79, 0x8f, 0x6d, 0x4d, + 0xb7, 0xbd, 0x1c, 0xcb, 0xce, 0xc1, 0xf3, 0xd8, + 0xed, 0x36, 0xbf, 0x4c, 0xba, 0x2e, 0xf0, 0x6c, + 0xe8, 0xab, 0x5b, 0x0d, 0xe7, 0xa2, 0xcd, 0xe4, + 0xdf, 0xe2, 0x95, 0x52, 0xd0, 0x9b, 0xaf, 0x3f, + 0x95, 0xf3, 0xd5, 0xb6, 0xf3, 0xd1, 0x66, 0xf2, + 0x6f, 0xf1, 0x4a, 0xa9, 0x68, 0x4d, 0xd7, 0x9f, + 0xca, 0xf9, 0xeb, 0xd5, 0xa7, 0x62, 0xae, 0xf3, + 0x86, 0xbe, 0x35, 0xaf, 0x39, 0x6b, 0x44, 0x45, + 0x9b, 0x61, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x04, 0x76, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, + 0xf9, 0xcd, 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, + 0xef, 0xed, 0x35, 0x6c, 0x6a, 0x3f, 0x51, 0xde, + 0x79, 0x3f, 0x9c, 0xd5, 0xaf, 0xa1, 0xbd, 0x4c, + 0xef, 0x2e, 0xfe, 0xd3, 0x55, 0xe3, 0x87, 0x3a, + 0x58, 0xcf, 0x31, 0x4e, 0xe4, 0xeb, 0x58, 0x91, + 0x11, 0x51, 0xb0, 0x88, 0x88, 0x08, 0x88, 0x80, + 0xb5, 0x72, 0x1e, 0x85, 0x73, 0xe4, 0x9f, 0xe2, + 0x95, 0xb4, 0xb5, 0x72, 0x1e, 0x85, 0x73, 0xe4, + 0x9f, 0xe2, 0x95, 0x34, 0xe7, 0x85, 0x6e, 0x6c, + 0x55, 0xa2, 0x75, 0x20, 0xb4, 0x9f, 0xa3, 0xdc, + 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0x81, 0xd2, 0x7e, + 0x8f, 0x71, 0xe1, 0xb7, 0xc5, 0x53, 0xcb, 0x4c, + 0x47, 0x16, 0xad, 0x3f, 0x73, 0x0c, 0x0f, 0x2d, + 0x6f, 0x44, 0xeb, 0x11, 0x11, 0x64, 0xe9, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x47, 0xea, 0x0f, + 0x54, 0xcf, 0xf2, 0x7c, 0x60, 0xa4, 0x14, 0x7e, + 0xa0, 0xf5, 0x4c, 0xff, 0x00, 0x27, 0xc6, 0x0a, + 0xf6, 0xf6, 0xe9, 0xd3, 0x0c, 0xb1, 0x3c, 0x0b, + 0xbb, 0x95, 0xea, 0x7b, 0xa5, 0x7d, 0x50, 0xdf, + 0x0d, 0xfd, 0xb5, 0x2c, 0xfd, 0xca, 0x27, 0x4a, + 0xfa, 0xa1, 0xbe, 0x1b, 0xfb, 0x6a, 0x59, 0xfb, + 0x94, 0xdd, 0xe2, 0xd7, 0xbd, 0x28, 0xc3, 0x70, + 0x2d, 0xee, 0xc3, 0x9c, 0xdd, 0x7f, 0x93, 0xc7, + 0x95, 0x67, 0xd8, 0x85, 0x7f, 0x54, 0x0b, 0xaf, + 0xf2, 0x78, 0xf2, 0xac, 0xfb, 0x10, 0xaf, 0xeb, + 0x96, 0xce, 0x7a, 0xf7, 0xe5, 0xec, 0x7c, 0x53, + 0x36, 0x0f, 0xf8, 0xd6, 0xc4, 0x44, 0x5b, 0x3c, + 0xd1, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x10, 0x6f, + 0x08, 0x83, 0x78, 0x41, 0x40, 0xd1, 0xbf, 0xdf, + 0x17, 0xdc, 0xd7, 0x1f, 0x68, 0x17, 0x48, 0x5c, + 0xdf, 0x46, 0xff, 0x00, 0x7c, 0x5f, 0x73, 0x5c, + 0x7d, 0xa0, 0x5d, 0x21, 0x63, 0x87, 0xd8, 0xf3, + 0xa5, 0xe9, 0xfc, 0x67, 0x99, 0xa7, 0xd5, 0x5b, + 0xd4, 0x8b, 0xcd, 0xfd, 0x4c, 0x7e, 0x1f, 0xc0, + 0x56, 0x6b, 0x4f, 0x46, 0x8b, 0xc1, 0x1d, 0xa5, + 0x87, 0x37, 0xf5, 0x31, 0xf8, 0x7f, 0x01, 0x59, + 0xad, 0x3d, 0x1a, 0x2f, 0x04, 0x76, 0x97, 0x15, + 0x9f, 0xec, 0xf1, 0x1e, 0xaa, 0x87, 0x1d, 0x5c, + 0xbd, 0xbd, 0xf9, 0x65, 0x44, 0x45, 0xe9, 0xb0, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x46, 0x65, 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, + 0x6d, 0xef, 0x47, 0x32, 0x84, 0xcb, 0x7d, 0x74, + 0x3c, 0xc7, 0xb6, 0xa6, 0xdb, 0xde, 0x8e, 0x65, + 0xe7, 0x60, 0xf9, 0xec, 0x76, 0x9b, 0x5f, 0xa6, + 0x5d, 0x17, 0x78, 0x36, 0x74, 0x55, 0xad, 0x86, + 0xf3, 0xd1, 0x66, 0xf2, 0x6f, 0xf1, 0x4a, 0xa9, + 0x68, 0x4d, 0xd7, 0x9f, 0xca, 0xf9, 0xea, 0xdb, + 0x79, 0xe8, 0xb3, 0x79, 0x37, 0xf8, 0xa5, 0x54, + 0xb4, 0x26, 0xeb, 0xcf, 0xe5, 0x7c, 0xf5, 0xea, + 0xd3, 0xb1, 0x57, 0x79, 0xc3, 0x5f, 0x1a, 0xd7, + 0x9c, 0xb5, 0xa2, 0x22, 0xcd, 0xb0, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x82, 0x3b, 0x51, + 0xfa, 0x8e, 0xf3, 0xc9, 0xfc, 0xe6, 0xad, 0x7d, + 0x0d, 0xea, 0x67, 0x79, 0x77, 0xf6, 0x9a, 0xb6, + 0x35, 0x1f, 0xa8, 0xef, 0x3c, 0x9f, 0xce, 0x6a, + 0xd7, 0xd0, 0xde, 0xa6, 0x77, 0x97, 0x7f, 0x69, + 0xaa, 0xf1, 0xc3, 0x9d, 0x2c, 0x67, 0x98, 0xa7, + 0x72, 0x75, 0xac, 0x48, 0x88, 0xa8, 0xd8, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x5a, 0xb9, 0x0f, 0x42, + 0xb9, 0xf2, 0x4f, 0xf1, 0x4a, 0xda, 0x5a, 0xb9, + 0x0f, 0x42, 0xb9, 0xf2, 0x4f, 0xf1, 0x4a, 0x9a, + 0x73, 0xc2, 0xb7, 0x36, 0x2a, 0xd1, 0x3a, 0x90, + 0x5a, 0x4f, 0xd1, 0xee, 0x3c, 0x36, 0xf8, 0xaa, + 0x79, 0x40, 0xe9, 0x3f, 0x47, 0xb8, 0xf0, 0xdb, + 0xe2, 0xa9, 0xe5, 0xa6, 0x23, 0x8b, 0x56, 0x9f, + 0xb9, 0x86, 0x07, 0x96, 0xb7, 0xa2, 0x75, 0x88, + 0x88, 0xb2, 0x74, 0x88, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0xa3, 0xf5, 0x07, 0xaa, 0x67, 0xf9, 0x3e, + 0x30, 0x52, 0x0a, 0x3f, 0x50, 0x7a, 0xa6, 0x7f, + 0x93, 0xe3, 0x05, 0x7b, 0x7b, 0x74, 0xe9, 0x86, + 0x58, 0x9e, 0x05, 0xdd, 0xca, 0xf5, 0x3d, 0xd2, + 0xbe, 0xa8, 0x6f, 0x86, 0xfe, 0xda, 0x96, 0x7e, + 0xe5, 0x13, 0xa5, 0x7d, 0x50, 0xdf, 0x0d, 0xfd, + 0xb5, 0x2c, 0xfd, 0xca, 0x6e, 0xf1, 0x6b, 0xde, + 0x94, 0x61, 0xb8, 0x16, 0xf7, 0x61, 0xce, 0x6e, + 0xbf, 0xc9, 0xe3, 0xca, 0xb3, 0xec, 0x42, 0xbf, + 0xaa, 0x05, 0xd7, 0xf9, 0x3c, 0x79, 0x56, 0x7d, + 0x88, 0x57, 0xf5, 0xcb, 0x67, 0x3d, 0x7b, 0xf2, + 0xf6, 0x3e, 0x29, 0x9b, 0x07, 0xfc, 0x6b, 0x62, + 0x22, 0x2d, 0x9e, 0x68, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x37, 0x84, 0x41, 0xbc, 0x20, 0xa0, + 0x68, 0xdf, 0xef, 0x8b, 0xee, 0x6b, 0x8f, 0xb4, + 0x0b, 0xa4, 0x2e, 0x6f, 0xa3, 0x7f, 0xbe, 0x2f, + 0xb9, 0xae, 0x3e, 0xd0, 0x2e, 0x90, 0xb1, 0xc3, + 0xec, 0x79, 0xd2, 0xf4, 0xfe, 0x33, 0xcc, 0xd3, + 0xea, 0xad, 0xea, 0x45, 0xe6, 0xfe, 0xa6, 0x3f, + 0x0f, 0xe0, 0x2b, 0x35, 0xa7, 0xa3, 0x45, 0xe0, + 0x8e, 0xd2, 0xc3, 0x9b, 0xfa, 0x98, 0xfc, 0x3f, + 0x80, 0xac, 0xd6, 0x9e, 0x8d, 0x17, 0x82, 0x3b, + 0x4b, 0x8a, 0xcf, 0xf6, 0x78, 0x8f, 0x55, 0x43, + 0x8e, 0xae, 0x5e, 0xde, 0xfc, 0xb2, 0xa2, 0x22, + 0xf4, 0xd8, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x23, 0x32, 0xdf, 0x5d, 0x0f, 0x31, + 0xed, 0xa9, 0xb6, 0xf7, 0xa3, 0x99, 0x42, 0x65, + 0xbe, 0xba, 0x1e, 0x63, 0xdb, 0x53, 0x6d, 0xef, + 0x47, 0x32, 0xf3, 0xb0, 0x7c, 0xf6, 0x3b, 0x4d, + 0xaf, 0xd3, 0x2e, 0x8b, 0xbc, 0x1b, 0x3a, 0x2a, + 0xd6, 0xc3, 0x79, 0xe8, 0xb3, 0x79, 0x37, 0xf8, + 0xa5, 0x54, 0xb4, 0x26, 0xeb, 0xcf, 0xe5, 0x7c, + 0xf5, 0x6d, 0xbc, 0xf4, 0x59, 0xbc, 0x9b, 0xfc, + 0x52, 0xaa, 0x5a, 0x13, 0x75, 0xe7, 0xf2, 0xbe, + 0x7a, 0xf5, 0x69, 0xd8, 0xab, 0xbc, 0xe1, 0xaf, + 0x8d, 0x6b, 0xce, 0x5a, 0xd1, 0x11, 0x66, 0xd8, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, + 0x1d, 0xa8, 0xfd, 0x47, 0x79, 0xe4, 0xfe, 0x73, + 0x56, 0xbe, 0x86, 0xf5, 0x33, 0xbc, 0xbb, 0xfb, + 0x4d, 0x5b, 0x1a, 0x8f, 0xd4, 0x77, 0x9e, 0x4f, + 0xe7, 0x35, 0x6b, 0xe8, 0x6f, 0x53, 0x3b, 0xcb, + 0xbf, 0xb4, 0xd5, 0x78, 0xe1, 0xce, 0x96, 0x33, + 0xcc, 0x53, 0xb9, 0x3a, 0xd6, 0x24, 0x44, 0x54, + 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, 0x2d, 0x5c, + 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, 0xa5, 0x6d, + 0x2d, 0x5c, 0x87, 0xa1, 0x5c, 0xf9, 0x27, 0xf8, + 0xa5, 0x4d, 0x39, 0xe1, 0x5b, 0x9b, 0x15, 0x68, + 0x9d, 0x48, 0x2d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, + 0x7c, 0x55, 0x3c, 0xa0, 0x74, 0x9f, 0xa3, 0xdc, + 0x78, 0x6d, 0xf1, 0x54, 0xf2, 0xd3, 0x11, 0xc5, + 0xab, 0x4f, 0xdc, 0xc3, 0x03, 0xcb, 0x5b, 0xd1, + 0x3a, 0xc4, 0x44, 0x59, 0x3a, 0x44, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x51, 0xfa, 0x83, 0xd5, 0x33, + 0xfc, 0x9f, 0x18, 0x29, 0x05, 0x1f, 0xa8, 0x3d, + 0x53, 0x3f, 0xc9, 0xf1, 0x82, 0xbd, 0xbd, 0xba, + 0x74, 0xc3, 0x2c, 0x4f, 0x02, 0xee, 0xe5, 0x7a, + 0x9e, 0xe9, 0x5f, 0x54, 0x37, 0xc3, 0x7f, 0x6d, + 0x4b, 0x3f, 0x72, 0x89, 0xd2, 0xbe, 0xa8, 0x6f, + 0x86, 0xfe, 0xda, 0x96, 0x7e, 0xe5, 0x37, 0x78, + 0xb5, 0xef, 0x4a, 0x30, 0xdc, 0x0b, 0x7b, 0xb0, + 0xe7, 0x37, 0x5f, 0xe4, 0xf1, 0xe5, 0x59, 0xf6, + 0x21, 0x5f, 0xd5, 0x02, 0xeb, 0xfc, 0x9e, 0x3c, + 0xab, 0x3e, 0xc4, 0x2b, 0xfa, 0xe5, 0xb3, 0x9e, + 0xbd, 0xf9, 0x7b, 0x1f, 0x14, 0xcd, 0x83, 0xfe, + 0x35, 0xb1, 0x11, 0x16, 0xcf, 0x34, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x1b, 0xc2, 0x20, 0xde, + 0x10, 0x50, 0x34, 0x6f, 0xf7, 0xc5, 0xf7, 0x35, + 0xc7, 0xda, 0x05, 0xd2, 0x17, 0x37, 0xd1, 0xbf, + 0xdf, 0x17, 0xdc, 0xd7, 0x1f, 0x68, 0x17, 0x48, + 0x58, 0xe1, 0xf6, 0x3c, 0xe9, 0x7a, 0x7f, 0x19, + 0xe6, 0x69, 0xf5, 0x56, 0xf5, 0x22, 0xf3, 0x7f, + 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, + 0xa2, 0xf0, 0x47, 0x69, 0x61, 0xcd, 0xfd, 0x4c, + 0x7e, 0x1f, 0xc0, 0x56, 0x6b, 0x4f, 0x46, 0x8b, + 0xc1, 0x1d, 0xa5, 0xc5, 0x67, 0xfb, 0x3c, 0x47, + 0xaa, 0xa1, 0xc7, 0x57, 0x2f, 0x6f, 0x7e, 0x59, + 0x51, 0x11, 0x7a, 0x6c, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x11, 0x99, 0x6f, 0xae, + 0x87, 0x98, 0xf6, 0xd4, 0xdb, 0x7b, 0xd1, 0xcc, + 0xa1, 0x32, 0xdf, 0x5d, 0x0f, 0x31, 0xed, 0xa9, + 0xb6, 0xf7, 0xa3, 0x99, 0x79, 0xd8, 0x3e, 0x7b, + 0x1d, 0xa6, 0xd7, 0xe9, 0x97, 0x45, 0xde, 0x0d, + 0x9d, 0x15, 0x6b, 0x61, 0xbc, 0xf4, 0x59, 0xbc, + 0x9b, 0xfc, 0x52, 0xaa, 0x5a, 0x13, 0x75, 0xe7, + 0xf2, 0xbe, 0x7a, 0xb6, 0xde, 0x7a, 0x2c, 0xde, + 0x4d, 0xfe, 0x29, 0x55, 0x2d, 0x09, 0xba, 0xf3, + 0xf9, 0x5f, 0x3d, 0x7a, 0xb4, 0xec, 0x55, 0xde, + 0x70, 0xd7, 0xc6, 0xb5, 0xe7, 0x2d, 0x68, 0x88, + 0xb3, 0x6c, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x8e, 0xd4, 0x7e, 0xa3, 0xbc, 0xf2, + 0x7f, 0x39, 0xab, 0x5f, 0x43, 0x7a, 0x99, 0xde, + 0x5d, 0xfd, 0xa6, 0xad, 0x8d, 0x47, 0xea, 0x3b, + 0xcf, 0x27, 0xf3, 0x9a, 0xb5, 0xf4, 0x37, 0xa9, + 0x9d, 0xe5, 0xdf, 0xda, 0x6a, 0xbc, 0x70, 0xe7, + 0x4b, 0x19, 0xe6, 0x29, 0xdc, 0x9d, 0x6b, 0x12, + 0x22, 0x2a, 0x36, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x16, 0xae, 0x43, 0xd0, 0xae, 0x7c, 0x93, 0xfc, + 0x52, 0xb6, 0x96, 0xae, 0x43, 0xd0, 0xae, 0x7c, + 0x93, 0xfc, 0x52, 0xa6, 0x9c, 0xf0, 0xad, 0xcd, + 0x8a, 0xb4, 0x4e, 0xa4, 0x16, 0x93, 0xf4, 0x7b, + 0x8f, 0x0d, 0xbe, 0x2a, 0x9e, 0x50, 0x3a, 0x4f, + 0xd1, 0xee, 0x3c, 0x36, 0xf8, 0xaa, 0x79, 0x69, + 0x88, 0xe2, 0xd5, 0xa7, 0xee, 0x61, 0x81, 0xe5, + 0xad, 0xe8, 0x9d, 0x62, 0x22, 0x2c, 0x9d, 0x22, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x28, 0xfd, 0x41, + 0xea, 0x99, 0xfe, 0x4f, 0x8c, 0x14, 0x82, 0x8f, + 0xd4, 0x1e, 0xa9, 0x9f, 0xe4, 0xf8, 0xc1, 0x5e, + 0xde, 0xdd, 0x3a, 0x61, 0x96, 0x27, 0x81, 0x77, + 0x72, 0xbd, 0x4f, 0x74, 0xaf, 0xaa, 0x1b, 0xe1, + 0xbf, 0xb6, 0xa5, 0x9f, 0xb9, 0x44, 0xe9, 0x5f, + 0x54, 0x37, 0xc3, 0x7f, 0x6d, 0x4b, 0x3f, 0x72, + 0x9b, 0xbc, 0x5a, 0xf7, 0xa5, 0x18, 0x6e, 0x05, + 0xbd, 0xd8, 0x73, 0x9b, 0xaf, 0xf2, 0x78, 0xf2, + 0xac, 0xfb, 0x10, 0xaf, 0xea, 0x81, 0x75, 0xfe, + 0x4f, 0x1e, 0x55, 0x9f, 0x62, 0x15, 0xfd, 0x72, + 0xd9, 0xcf, 0x5e, 0xfc, 0xbd, 0x8f, 0x8a, 0x66, + 0xc1, 0xff, 0x00, 0x1a, 0xd8, 0x88, 0x8b, 0x67, + 0x9a, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x0d, + 0xe1, 0x10, 0x6f, 0x08, 0x28, 0x1a, 0x37, 0xfb, + 0xe2, 0xfb, 0x9a, 0xe3, 0xed, 0x02, 0xe9, 0x0b, + 0x9b, 0xe8, 0xdf, 0xef, 0x8b, 0xee, 0x6b, 0x8f, + 0xb4, 0x0b, 0xa4, 0x2c, 0x70, 0xfb, 0x1e, 0x74, + 0xbd, 0x3f, 0x8c, 0xf3, 0x34, 0xfa, 0xab, 0x7a, + 0x91, 0x79, 0xbf, 0xa9, 0x8f, 0xc3, 0xf8, 0x0a, + 0xcd, 0x69, 0xe8, 0xd1, 0x78, 0x23, 0xb4, 0xb0, + 0xe6, 0xfe, 0xa6, 0x3f, 0x0f, 0xe0, 0x2b, 0x35, + 0xa7, 0xa3, 0x45, 0xe0, 0x8e, 0xd2, 0xe2, 0xb3, + 0xfd, 0x9e, 0x23, 0xd5, 0x50, 0xe3, 0xab, 0x97, + 0xb7, 0xbf, 0x2c, 0xa8, 0x88, 0xbd, 0x36, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x08, + 0xcc, 0xb7, 0xd7, 0x43, 0xcc, 0x7b, 0x6a, 0x6d, + 0xbd, 0xe8, 0xe6, 0x50, 0x99, 0x6f, 0xae, 0x87, + 0x98, 0xf6, 0xd4, 0xdb, 0x7b, 0xd1, 0xcc, 0xbc, + 0xec, 0x1f, 0x3d, 0x8e, 0xd3, 0x6b, 0xf4, 0xcb, + 0xa2, 0xef, 0x06, 0xce, 0x8a, 0xb5, 0xb0, 0xde, + 0x7a, 0x2c, 0xde, 0x4d, 0xfe, 0x29, 0x55, 0x2d, + 0x09, 0xba, 0xf3, 0xf9, 0x5f, 0x3d, 0x5b, 0x6f, + 0x3d, 0x16, 0x6f, 0x26, 0xff, 0x00, 0x14, 0xaa, + 0x96, 0x84, 0xdd, 0x79, 0xfc, 0xaf, 0x9e, 0xbd, + 0x5a, 0x76, 0x2a, 0xef, 0x38, 0x6b, 0xe3, 0x5a, + 0xf3, 0x96, 0xb4, 0x44, 0x59, 0xb6, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x47, 0x6a, + 0x3f, 0x51, 0xde, 0x79, 0x3f, 0x9c, 0xd5, 0xaf, + 0xa1, 0xbd, 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x56, + 0xc6, 0xa3, 0xf5, 0x1d, 0xe7, 0x93, 0xf9, 0xcd, + 0x5a, 0xfa, 0x1b, 0xd4, 0xce, 0xf2, 0xef, 0xed, + 0x35, 0x5e, 0x38, 0x73, 0xa5, 0x8c, 0xf3, 0x14, + 0xee, 0x4e, 0xb5, 0x89, 0x11, 0x15, 0x1b, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x0b, 0x57, 0x21, 0xe8, + 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x5b, 0x4b, 0x57, + 0x21, 0xe8, 0x57, 0x3e, 0x49, 0xfe, 0x29, 0x53, + 0x4e, 0x78, 0x56, 0xe6, 0xc5, 0x5a, 0x27, 0x52, + 0x0b, 0x49, 0xfa, 0x3d, 0xc7, 0x86, 0xdf, 0x15, + 0x4f, 0x28, 0x1d, 0x27, 0xe8, 0xf7, 0x1e, 0x1b, + 0x7c, 0x55, 0x3c, 0xb4, 0xc4, 0x71, 0x6a, 0xd3, + 0xf7, 0x30, 0xc0, 0xf2, 0xd6, 0xf4, 0x4e, 0xb1, + 0x11, 0x16, 0x4e, 0x91, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x14, 0x7e, 0xa0, 0xf5, 0x4c, 0xff, 0x00, + 0x27, 0xc6, 0x0a, 0x41, 0x47, 0xea, 0x0f, 0x54, + 0xcf, 0xf2, 0x7c, 0x60, 0xaf, 0x6f, 0x6e, 0x9d, + 0x30, 0xcb, 0x13, 0xc0, 0xbb, 0xb9, 0x5e, 0xa7, + 0xba, 0x57, 0xd5, 0x0d, 0xf0, 0xdf, 0xdb, 0x52, + 0xcf, 0xdc, 0xa2, 0x74, 0xaf, 0xaa, 0x1b, 0xe1, + 0xbf, 0xb6, 0xa5, 0x9f, 0xb9, 0x4d, 0xde, 0x2d, + 0x7b, 0xd2, 0x8c, 0x37, 0x02, 0xde, 0xec, 0x39, + 0xcd, 0xd7, 0xf9, 0x3c, 0x79, 0x56, 0x7d, 0x88, + 0x57, 0xf5, 0x40, 0xba, 0xff, 0x00, 0x27, 0x8f, + 0x2a, 0xcf, 0xb1, 0x0a, 0xfe, 0xb9, 0x6c, 0xe7, + 0xaf, 0x7e, 0x5e, 0xc7, 0xc5, 0x33, 0x60, 0xff, + 0x00, 0x8d, 0x6c, 0x44, 0x45, 0xb3, 0xcd, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x06, 0xf0, 0x88, + 0x37, 0x84, 0x14, 0x0d, 0x1b, 0xfd, 0xf1, 0x7d, + 0xcd, 0x71, 0xf6, 0x81, 0x74, 0x85, 0xcd, 0xf4, + 0x6f, 0xf7, 0xc5, 0xf7, 0x35, 0xc7, 0xda, 0x05, + 0xd2, 0x16, 0x38, 0x7d, 0x8f, 0x3a, 0x5e, 0x9f, + 0xc6, 0x79, 0x9a, 0x7d, 0x55, 0xbd, 0x48, 0xbc, + 0xdf, 0xd4, 0xc7, 0xe1, 0xfc, 0x05, 0x66, 0xb4, + 0xf4, 0x68, 0xbc, 0x11, 0xda, 0x58, 0x73, 0x7f, + 0x53, 0x1f, 0x87, 0xf0, 0x15, 0x9a, 0xd3, 0xd1, + 0xa2, 0xf0, 0x47, 0x69, 0x71, 0x59, 0xfe, 0xcf, + 0x11, 0xea, 0xa8, 0x71, 0xd5, 0xcb, 0xdb, 0xdf, + 0x96, 0x54, 0x44, 0x5e, 0x9b, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x04, 0x66, 0x5b, + 0xeb, 0xa1, 0xe6, 0x3d, 0xb5, 0x36, 0xde, 0xf4, + 0x73, 0x28, 0x4c, 0xb7, 0xd7, 0x43, 0xcc, 0x7b, + 0x6a, 0x6d, 0xbd, 0xe8, 0xe6, 0x5e, 0x76, 0x0f, + 0x9e, 0xc7, 0x69, 0xb5, 0xfa, 0x65, 0xd1, 0x77, + 0x83, 0x67, 0x45, 0x5a, 0xd8, 0x6f, 0x3d, 0x16, + 0x6f, 0x26, 0xff, 0x00, 0x14, 0xaa, 0x96, 0x84, + 0xdd, 0x79, 0xfc, 0xaf, 0x9e, 0xad, 0xb7, 0x9e, + 0x8b, 0x37, 0x93, 0x7f, 0x8a, 0x55, 0x4b, 0x42, + 0x6e, 0xbc, 0xfe, 0x57, 0xcf, 0x5e, 0xad, 0x3b, + 0x15, 0x77, 0x9c, 0x35, 0xf1, 0xad, 0x79, 0xcb, + 0x5a, 0x22, 0x2c, 0xdb, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x23, 0xb5, 0x1f, 0xa8, + 0xef, 0x3c, 0x9f, 0xce, 0x6a, 0xd7, 0xd0, 0xde, + 0xa6, 0x77, 0x97, 0x7f, 0x69, 0xab, 0x63, 0x51, + 0xfa, 0x8e, 0xf3, 0xc9, 0xfc, 0xe6, 0xad, 0x7d, + 0x0d, 0xea, 0x67, 0x79, 0x77, 0xf6, 0x9a, 0xaf, + 0x1c, 0x39, 0xd2, 0xc6, 0x79, 0x8a, 0x77, 0x27, + 0x5a, 0xc4, 0x88, 0x8a, 0x8d, 0x84, 0x44, 0x40, + 0x44, 0x44, 0x05, 0xab, 0x91, 0xa7, 0x98, 0xdc, + 0xf9, 0x27, 0xf8, 0xa5, 0x11, 0x4d, 0x39, 0xe3, + 0x4a, 0xb5, 0xec, 0x55, 0xa2, 0x55, 0x3c, 0x35, + 0xfd, 0xed, 0xa4, 0x72, 0x36, 0xda, 0xd5, 0xd7, + 0x21, 0xe4, 0x17, 0x10, 0x1c, 0x68, 0x40, 0xdd, + 0xdc, 0x82, 0xa4, 0x7f, 0x1a, 0xcb, 0xff, 0x00, + 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x17, 0x75, + 0x7e, 0xcf, 0xe5, 0x4f, 0x95, 0xb5, 0xdd, 0xce, + 0xf1, 0xec, 0x7b, 0x77, 0xed, 0xd3, 0xfb, 0x59, + 0x7f, 0x6f, 0xff, 0x00, 0x9d, 0x8c, 0xc7, 0xe3, + 0x59, 0x7f, 0xe9, 0xaf, 0xfd, 0x99, 0x3e, 0x8a, + 0x7e, 0x35, 0x97, 0xfe, 0x9a, 0xff, 0x00, 0xd9, + 0x93, 0xe8, 0xa2, 0x2a, 0x7b, 0xaf, 0xdb, 0x2b, + 0x4f, 0xa9, 0x76, 0xfe, 0x43, 0xf1, 0xac, 0xbf, + 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, 0x45, 0x3f, 0x1a, + 0xcb, 0xff, 0x00, 0x4d, 0x7f, 0xec, 0xc9, 0xf4, + 0x51, 0x13, 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, 0x76, + 0xfe, 0x43, 0xf1, 0xac, 0xbf, 0xf4, 0xd7, 0xfe, + 0xcc, 0x9f, 0x45, 0x3f, 0x1a, 0xcb, 0xff, 0x00, + 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x13, 0xdd, + 0x7e, 0xd9, 0x4f, 0xa9, 0x76, 0xfe, 0x43, 0xf1, + 0xac, 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, 0x45, + 0x3f, 0x1a, 0xcb, 0xff, 0x00, 0x4d, 0x7f, 0xec, + 0xc9, 0xf4, 0x51, 0x13, 0xdd, 0x7e, 0xd9, 0x4f, + 0xa9, 0x76, 0xfe, 0x43, 0xf1, 0xac, 0xbf, 0xf4, + 0xd7, 0xfe, 0xcc, 0x9f, 0x45, 0x3f, 0x1a, 0xcb, + 0xff, 0x00, 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, + 0x13, 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, 0x76, 0xfe, + 0x43, 0xf1, 0xac, 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, + 0x9f, 0x45, 0x3f, 0x1a, 0xcb, 0xff, 0x00, 0x4d, + 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x13, 0xdd, 0x7e, + 0xd9, 0x4f, 0xa9, 0x76, 0xfe, 0x43, 0xf1, 0xac, + 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, 0x45, 0x3f, + 0x1a, 0xcb, 0xff, 0x00, 0x4d, 0x7f, 0xec, 0xc9, + 0xf4, 0x51, 0x13, 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, + 0x76, 0xfe, 0x43, 0xf1, 0xac, 0xbf, 0xf4, 0xd7, + 0xfe, 0xcc, 0x9f, 0x45, 0x3f, 0x1a, 0xcb, 0xff, + 0x00, 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x13, + 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, 0x76, 0xfe, 0x43, + 0xf1, 0xac, 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, + 0x45, 0x3f, 0x1a, 0xcb, 0xff, 0x00, 0x4d, 0x7f, + 0xec, 0xc9, 0xf4, 0x51, 0x13, 0xdd, 0x7e, 0xd9, + 0x4f, 0xa9, 0x76, 0xfe, 0x43, 0xf1, 0xac, 0xbf, + 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, 0x45, 0x3f, 0x1a, + 0xcb, 0xff, 0x00, 0x4d, 0x7f, 0xec, 0xc9, 0xf4, + 0x51, 0x13, 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, 0x76, + 0xfe, 0x43, 0xf1, 0xac, 0xbf, 0xf4, 0xd7, 0xfe, + 0xcc, 0x9f, 0x45, 0x3f, 0x1a, 0xcb, 0xff, 0x00, + 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x13, 0xdd, + 0x7e, 0xd9, 0x4f, 0xa9, 0x76, 0xfe, 0x43, 0xf1, + 0xac, 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, 0x45, + 0x3f, 0x1a, 0xcb, 0xff, 0x00, 0x4d, 0x7f, 0xec, + 0xc9, 0xf4, 0x51, 0x13, 0xdd, 0x7e, 0xd9, 0x4f, + 0xa9, 0x76, 0xfe, 0x43, 0xf1, 0xac, 0xbf, 0xf4, + 0xd7, 0xfe, 0xcc, 0x9f, 0x45, 0x3f, 0x1a, 0xcb, + 0xff, 0x00, 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, + 0x13, 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, 0x76, 0xfe, + 0x43, 0xf1, 0xac, 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, + 0x9f, 0x45, 0x3f, 0x1a, 0xcb, 0xff, 0x00, 0x4d, + 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x13, 0xdd, 0x7e, + 0xd9, 0x4f, 0xa9, 0x76, 0xfe, 0x43, 0xf1, 0xac, + 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, 0x45, 0x3f, + 0x1a, 0xcb, 0xff, 0x00, 0x4d, 0x7f, 0xec, 0xc9, + 0xf4, 0x51, 0x13, 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, + 0x76, 0xfe, 0x43, 0xf1, 0xac, 0xbf, 0xf4, 0xd7, + 0xfe, 0xcc, 0x9f, 0x45, 0x3f, 0x1a, 0xcb, 0xff, + 0x00, 0x4d, 0x7f, 0xec, 0xc9, 0xf4, 0x51, 0x13, + 0xdd, 0x7e, 0xd9, 0x4f, 0xa9, 0x76, 0xfe, 0x43, + 0xf1, 0xac, 0xbf, 0xf4, 0xd7, 0xfe, 0xcc, 0x9f, + 0x45, 0x6b, 0x64, 0xb2, 0x99, 0x1b, 0x8b, 0x29, + 0x22, 0x9e, 0xc9, 0xd0, 0xc6, 0xea, 0x71, 0x48, + 0x43, 0xc5, 0x28, 0x41, 0xf8, 0xc2, 0x88, 0x8a, + 0xd4, 0xfb, 0x37, 0x95, 0x19, 0x33, 0xe5, 0xe8, + 0xce, 0xa5, 0xdf, 0x98, 0x79, 0x15, 0x79, 0x59, + 0x7c, 0x9c, 0x93, 0xe5, 0x6c, 0xe6, 0xee, 0xe6, + 0x4b, 0x69, 0x5f, 0x54, 0xb7, 0xc3, 0x7f, 0x6d, + 0x4b, 0x39, 0x11, 0x72, 0xde, 0xe2, 0x57, 0xbd, + 0x2f, 0x4f, 0x0d, 0xc0, 0xb7, 0xbb, 0x0e, 0x5f, + 0x9d, 0xba, 0xb8, 0xb4, 0xd7, 0xd2, 0xdc, 0xdb, + 0x42, 0x6e, 0x6e, 0x23, 0x91, 0x85, 0x90, 0x34, + 0x12, 0x5c, 0x7a, 0x26, 0x8a, 0x00, 0xdd, 0xaa, + 0x5f, 0xf3, 0x7e, 0xa9, 0xfe, 0x81, 0x2f, 0xfc, + 0x73, 0x7d, 0x04, 0x45, 0xe6, 0xff, 0x00, 0xbb, + 0xca, 0xaf, 0xf6, 0xf3, 0x79, 0x53, 0xd5, 0x9d, + 0xf5, 0xd5, 0x7c, 0xb7, 0xf6, 0x70, 0xde, 0xd9, + 0x93, 0xf7, 0x3f, 0x62, 0xdf, 0x93, 0x97, 0xcb, + 0xd9, 0xc9, 0xd8, 0x7e, 0x6f, 0xd5, 0x3f, 0xd0, + 0x25, 0xff, 0x00, 0x8e, 0x6f, 0xa0, 0x9f, 0x9b, + 0xf5, 0x4f, 0xf4, 0x09, 0x7f, 0xe3, 0x9b, 0xe8, + 0x22, 0x29, 0xf7, 0xae, 0xdf, 0x13, 0x3f, 0xa1, + 0x7e, 0x1f, 0xfa, 0x1f, 0x9b, 0xf5, 0x4f, 0xf4, + 0x09, 0x7f, 0xe3, 0x9b, 0xe8, 0x27, 0xe6, 0xfd, + 0x53, 0xfd, 0x02, 0x5f, 0xf8, 0xe6, 0xfa, 0x08, + 0x89, 0xef, 0x5d, 0xbe, 0x23, 0xe8, 0x5f, 0x87, + 0xfe, 0x87, 0xe6, 0xfd, 0x53, 0xfd, 0x02, 0x5f, + 0xf8, 0xe6, 0xfa, 0x09, 0xf9, 0xbf, 0x54, 0xff, + 0x00, 0x40, 0x97, 0xfe, 0x39, 0xbe, 0x82, 0x22, + 0x7b, 0xd7, 0x6f, 0x88, 0xfa, 0x17, 0xe1, 0xff, + 0x00, 0xa1, 0xf9, 0xbf, 0x54, 0xff, 0x00, 0x40, + 0x97, 0xfe, 0x39, 0xbe, 0x82, 0x7e, 0x6f, 0xd5, + 0x3f, 0xd0, 0x25, 0xff, 0x00, 0x8e, 0x6f, 0xa0, + 0x88, 0x9e, 0xf5, 0xdb, 0xe2, 0x3e, 0x85, 0xf8, + 0x7f, 0xe8, 0x7e, 0x6f, 0xd5, 0x3f, 0xd0, 0x25, + 0xff, 0x00, 0x8e, 0x6f, 0xa0, 0x9f, 0x9b, 0xf5, + 0x4f, 0xf4, 0x09, 0x7f, 0xe3, 0x9b, 0xe8, 0x22, + 0x27, 0xbd, 0x76, 0xf8, 0x8f, 0xa1, 0x7e, 0x1f, + 0xfa, 0x1f, 0x9b, 0xf5, 0x4f, 0xf4, 0x09, 0x7f, + 0xe3, 0x9b, 0xe8, 0x27, 0xe6, 0xfd, 0x53, 0xfd, + 0x02, 0x5f, 0xf8, 0xe6, 0xfa, 0x08, 0x89, 0xef, + 0x5d, 0xbe, 0x23, 0xe8, 0x5f, 0x87, 0xfe, 0x87, + 0xe6, 0xfd, 0x53, 0xfd, 0x02, 0x5f, 0xf8, 0xe6, + 0xfa, 0x09, 0xf9, 0xbf, 0x54, 0xff, 0x00, 0x40, + 0x97, 0xfe, 0x39, 0xbe, 0x82, 0x22, 0x7b, 0xd7, + 0x6f, 0x88, 0xfa, 0x17, 0xe1, 0xff, 0x00, 0xa1, + 0xf9, 0xbf, 0x54, 0xff, 0x00, 0x40, 0x97, 0xfe, + 0x39, 0xbe, 0x82, 0x7e, 0x6f, 0xd5, 0x3f, 0xd0, + 0x25, 0xff, 0x00, 0x8e, 0x6f, 0xa0, 0x88, 0x9e, + 0xf5, 0xdb, 0xe2, 0x3e, 0x85, 0xf8, 0x7f, 0xe8, + 0x7e, 0x6f, 0xd5, 0x3f, 0xd0, 0x25, 0xff, 0x00, + 0x8e, 0x6f, 0xa0, 0x9f, 0x9b, 0xf5, 0x4f, 0xf4, + 0x09, 0x7f, 0xe3, 0x9b, 0xe8, 0x22, 0x27, 0xbd, + 0x76, 0xf8, 0x8f, 0xa1, 0x7e, 0x1f, 0xfa, 0x1f, + 0x9b, 0xf5, 0x4f, 0xf4, 0x09, 0x7f, 0xe3, 0x9b, + 0xe8, 0x27, 0xe6, 0xfd, 0x53, 0xfd, 0x02, 0x5f, + 0xf8, 0xe6, 0xfa, 0x08, 0x89, 0xef, 0x5d, 0xbe, + 0x23, 0xe8, 0x5f, 0x87, 0xfe, 0x87, 0xe6, 0xfd, + 0x53, 0xfd, 0x02, 0x5f, 0xf8, 0xe6, 0xfa, 0x09, + 0xf9, 0xbf, 0x54, 0xff, 0x00, 0x40, 0x97, 0xfe, + 0x39, 0xbe, 0x82, 0x22, 0x7b, 0xd7, 0x6f, 0x88, + 0xfa, 0x17, 0xe1, 0xff, 0x00, 0xa1, 0xf9, 0xbf, + 0x54, 0xff, 0x00, 0x40, 0x97, 0xfe, 0x39, 0xbe, + 0x82, 0x7e, 0x6f, 0xd5, 0x3f, 0xd0, 0x25, 0xff, + 0x00, 0x8e, 0x6f, 0xa0, 0x88, 0x9e, 0xf5, 0xdb, + 0xe2, 0x3e, 0x85, 0xf8, 0x7f, 0xe8, 0x7e, 0x6f, + 0xd5, 0x3f, 0xd0, 0x25, 0xff, 0x00, 0x8e, 0x6f, + 0xa0, 0x9f, 0x9b, 0xf5, 0x4f, 0xf4, 0x09, 0x7f, + 0xe3, 0x9b, 0xe8, 0x22, 0x27, 0xbd, 0x76, 0xf8, + 0x8f, 0xa1, 0x7e, 0x1f, 0xfa, 0x1f, 0x9b, 0xf5, + 0x4f, 0xf4, 0x09, 0x7f, 0xe3, 0x9b, 0xe8, 0x27, + 0xe6, 0xfd, 0x53, 0xfd, 0x02, 0x5f, 0xf8, 0xe6, + 0xfa, 0x08, 0x89, 0xef, 0x5d, 0xbe, 0x23, 0xe8, + 0x5f, 0x87, 0xfe, 0x87, 0xe6, 0xfd, 0x53, 0xfd, + 0x02, 0x5f, 0xf8, 0xe6, 0xfa, 0x09, 0xf9, 0xbf, + 0x54, 0xff, 0x00, 0x40, 0x97, 0xfe, 0x39, 0xbe, + 0x82, 0x22, 0x7b, 0xd7, 0x6f, 0x88, 0xfa, 0x17, + 0xe1, 0xff, 0x00, 0xa1, 0xf9, 0xbf, 0x54, 0xff, + 0x00, 0x40, 0x97, 0xfe, 0x39, 0xbe, 0x82, 0x7e, + 0x6f, 0xd5, 0x3f, 0xd0, 0x25, 0xff, 0x00, 0x8e, + 0x6f, 0xa0, 0x88, 0x9e, 0xf5, 0xdb, 0xe2, 0x3e, + 0x85, 0xf8, 0x7f, 0xe8, 0x7e, 0x6f, 0xd5, 0x3f, + 0xd0, 0x25, 0xff, 0x00, 0x8e, 0x6f, 0xa0, 0x9f, + 0x9b, 0xf5, 0x57, 0x26, 0x02, 0x5a, 0xf2, 0x7f, + 0x0e, 0x6f, 0xa0, 0x88, 0x9e, 0xf5, 0xdb, 0xe2, + 0x3e, 0x83, 0xf8, 0x7f, 0xe8, 0x8d, 0xd0, 0x92, + 0x49, 0x2e, 0xae, 0xb8, 0x96, 0x56, 0x18, 0xe4, + 0x92, 0x39, 0x9c, 0xf8, 0xcf, 0xc5, 0x25, 0xed, + 0x25, 0xbb, 0x7a, 0x8b, 0xa6, 0xa2, 0x2d, 0xb0, + 0xd9, 0x7f, 0x6f, 0xa7, 0xae, 0x5e, 0x7f, 0xc7, + 0x3c, 0x9f, 0x6b, 0x8f, 0x27, 0x2f, 0x93, 0xfb, + 0x76, 0xfc, 0x9c, 0xbd, 0x59, 0x11, 0x79, 0xba, + 0x74, 0x11, 0xf8, 0x7f, 0x01, 0x58, 0x21, 0xbc, + 0xba, 0x6c, 0x4c, 0x6b, 0x2d, 0xdc, 0xe6, 0x80, + 0x00, 0x75, 0x1d, 0xb7, 0xde, 0x44, 0x5e, 0x2e, + 0x2f, 0xdb, 0x3d, 0xbe, 0xef, 0xb2, 0x65, 0xf2, + 0xbc, 0x8a, 0x3c, 0xac, 0x9e, 0x4e, 0x6c, 0x9f, + 0x89, 0x8d, 0x9f, 0xda, 0xfd, 0x9a, 0x7f, 0x77, + 0x37, 0x95, 0x39, 0x1f, 0x7e, 0x7d, 0x79, 0xf7, + 0x67, 0x76, 0x1d, 0xfe, 0x89, 0xe7, 0xd7, 0x9f, + 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x88, 0xab, 0xf5, + 0xcf, 0xc5, 0xf9, 0x16, 0xf7, 0x3e, 0xcf, 0x19, + 0xe7, 0xd7, 0x9f, 0x75, 0x77, 0x61, 0xdf, 0xe8, + 0x9e, 0x7d, 0x79, 0xf7, 0x57, 0x76, 0x1d, 0xfe, + 0x88, 0x89, 0xf5, 0xcf, 0xc5, 0xf9, 0x0f, 0x73, + 0xec, 0xf1, 0x9e, 0x7d, 0x79, 0xf7, 0x57, 0x76, + 0x1d, 0xfe, 0x89, 0xe7, 0xd7, 0x9f, 0x75, 0x77, + 0x61, 0xdf, 0xe8, 0x88, 0x9f, 0x5c, 0xfc, 0x5f, + 0x90, 0xf7, 0x3e, 0xcf, 0x19, 0xe7, 0xd7, 0x9f, + 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x9e, 0x7d, 0x79, + 0xf7, 0x57, 0x76, 0x1d, 0xfe, 0x88, 0x89, 0xf5, + 0xcf, 0xc5, 0xf9, 0x0f, 0x73, 0xec, 0xf1, 0x9e, + 0x7d, 0x79, 0xf7, 0x57, 0x76, 0x1d, 0xfe, 0x89, + 0xe7, 0xd7, 0x9f, 0x75, 0x77, 0x61, 0xdf, 0xe8, + 0x88, 0x9f, 0x5c, 0xfc, 0x5f, 0x90, 0xf7, 0x3e, + 0xcf, 0x19, 0xe7, 0xd7, 0x9f, 0x75, 0x77, 0x61, + 0xdf, 0xe8, 0x9e, 0x7d, 0x79, 0xf7, 0x57, 0x76, + 0x1d, 0xfe, 0x88, 0x89, 0xf5, 0xcf, 0xc5, 0xf9, + 0x0f, 0x73, 0xec, 0xf1, 0x9e, 0x7d, 0x79, 0xf7, + 0x57, 0x76, 0x1d, 0xfe, 0x89, 0xe7, 0xd7, 0x9f, + 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x88, 0x9f, 0x5c, + 0xfc, 0x5f, 0x90, 0xf7, 0x3e, 0xcf, 0x19, 0xe7, + 0xd7, 0x9f, 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x9e, + 0x7d, 0x79, 0xf7, 0x57, 0x76, 0x1d, 0xfe, 0x88, + 0x89, 0xf5, 0xcf, 0xc5, 0xf9, 0x0f, 0x73, 0xec, + 0xf1, 0x9e, 0x7d, 0x79, 0xf7, 0x57, 0x76, 0x1d, + 0xfe, 0x89, 0xe7, 0xd7, 0x9f, 0x75, 0x77, 0x61, + 0xdf, 0xe8, 0x88, 0x9f, 0x5c, 0xfc, 0x5f, 0x90, + 0xf7, 0x3e, 0xcf, 0x19, 0xe7, 0xd7, 0x9f, 0x75, + 0x77, 0x61, 0xdf, 0xe8, 0x9e, 0x7d, 0x79, 0xf7, + 0x57, 0x76, 0x1d, 0xfe, 0x88, 0x89, 0xf5, 0xcf, + 0xc5, 0xf9, 0x0f, 0x73, 0xec, 0xf1, 0x9e, 0x7d, + 0x79, 0xf7, 0x57, 0x76, 0x1d, 0xfe, 0x89, 0xe7, + 0xd7, 0x9f, 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x88, + 0x9f, 0x5c, 0xfc, 0x5f, 0x90, 0xf7, 0x3e, 0xcf, + 0x19, 0xe7, 0xd7, 0x9f, 0x75, 0x77, 0x61, 0xdf, + 0xe8, 0x9e, 0x7d, 0x79, 0xf7, 0x57, 0x76, 0x1d, + 0xfe, 0x88, 0x89, 0xf5, 0xcf, 0xc5, 0xf9, 0x0f, + 0x73, 0xec, 0xf1, 0x9e, 0x7d, 0x79, 0xf7, 0x57, + 0x76, 0x1d, 0xfe, 0x89, 0xe7, 0xd7, 0x9f, 0x75, + 0x77, 0x61, 0xdf, 0xe8, 0x88, 0x9f, 0x5c, 0xfc, + 0x5f, 0x90, 0xf7, 0x3e, 0xcf, 0x19, 0xe7, 0xd7, + 0x9f, 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x9e, 0x7d, + 0x79, 0xf7, 0x57, 0x76, 0x1d, 0xfe, 0x88, 0x89, + 0xf5, 0xcf, 0xc5, 0xf9, 0x0f, 0x73, 0xec, 0xf1, + 0x9e, 0x7d, 0x79, 0xf7, 0x57, 0x76, 0x1d, 0xfe, + 0x89, 0xe7, 0xd7, 0x9f, 0x75, 0x77, 0x61, 0xdf, + 0xe8, 0x88, 0x9f, 0x5c, 0xfc, 0x5f, 0x90, 0xf7, + 0x3e, 0xcf, 0x19, 0xe7, 0xd7, 0x9f, 0x75, 0x77, + 0x61, 0xdf, 0xe8, 0x9e, 0x7d, 0x79, 0xf7, 0x57, + 0x76, 0x1d, 0xfe, 0x88, 0x89, 0xf5, 0xcf, 0xc5, + 0xf9, 0x0f, 0x73, 0xec, 0xf1, 0x9e, 0x7d, 0x79, + 0xf7, 0x57, 0x76, 0x1d, 0xfe, 0x89, 0xe7, 0xd7, + 0x9f, 0x75, 0x77, 0x61, 0xdf, 0xe8, 0x88, 0x9f, + 0x5c, 0xfc, 0x5f, 0x90, 0xf7, 0x3e, 0xcf, 0x1b, + 0x52, 0xf2, 0x69, 0xa6, 0x91, 0x86, 0x58, 0xcc, + 0x64, 0x6c, 0x00, 0xd4, 0x57, 0x6f, 0x5d, 0x58, + 0x59, 0xde, 0x8e, 0x64, 0x45, 0xd3, 0xf0, 0x7f, + 0xdf, 0xfd, 0xec, 0x57, 0xb4, 0x71, 0x7f, 0xd7, + 0xe5, 0xf5, 0xe6, 0x9c, 0x99, 0xba, 0x19, 0x62, + 0xbc, 0x8f, 0x22, 0xdf, 0x91, 0xb3, 0xff, 0x00, + 0xac, 0x8c, 0x77, 0x9e, 0x8b, 0x37, 0x93, 0x77, + 0x8a, 0x57, 0x3e, 0xd3, 0xb9, 0x2b, 0xfb, 0x11, + 0x3f, 0x99, 0xd9, 0xba, 0xf3, 0xa4, 0x0c, 0xe3, + 0xe1, 0x0e, 0x3c, 0x34, 0xad, 0x3b, 0xc0, 0x77, + 0xd5, 0x11, 0x7b, 0xf6, 0xb2, 0x64, 0xab, 0xca, + 0xd9, 0x79, 0x78, 0x8f, 0x2f, 0xcb, 0xa3, 0xc8, + 0xda, 0xe9, 0xc8, 0x99, 0xfc, 0xc7, 0x9f, 0xfe, + 0x8f, 0x27, 0xec, 0xcb, 0xf4, 0x53, 0xf3, 0x1e, + 0x7f, 0xfa, 0x3c, 0x9f, 0xb3, 0x2f, 0xd1, 0x44, + 0x57, 0xff, 0x00, 0x47, 0xdb, 0x2b, 0x3f, 0x7a, + 0xed, 0xf1, 0x1f, 0x98, 0xf3, 0xff, 0x00, 0xd1, + 0xe4, 0xfd, 0x99, 0x7e, 0x8a, 0x7e, 0x63, 0xcf, + 0xff, 0x00, 0x47, 0x93, 0xf6, 0x65, 0xfa, 0x28, + 0x89, 0xfe, 0x8f, 0xb6, 0x53, 0xde, 0xbb, 0x7c, + 0x47, 0xe6, 0x3c, 0xff, 0x00, 0xf4, 0x79, 0x3f, + 0x66, 0x5f, 0xa2, 0x9f, 0x98, 0xf3, 0xff, 0x00, + 0xd1, 0xe4, 0xfd, 0x99, 0x7e, 0x8a, 0x22, 0x7f, + 0xa3, 0xed, 0x94, 0xf7, 0xae, 0xdf, 0x11, 0xf9, + 0x8f, 0x3f, 0xfd, 0x1e, 0x4f, 0xd9, 0x97, 0xe8, + 0xa7, 0xe6, 0x3c, 0xff, 0x00, 0xf4, 0x79, 0x3f, + 0x66, 0x5f, 0xa2, 0x88, 0x9f, 0xe8, 0xfb, 0x65, + 0x3d, 0xeb, 0xb7, 0xc4, 0x7e, 0x63, 0xcf, 0xff, + 0x00, 0x47, 0x93, 0xf6, 0x65, 0xfa, 0x29, 0xf9, + 0x8f, 0x3f, 0xfd, 0x1e, 0x4f, 0xd9, 0x97, 0xe8, + 0xa2, 0x27, 0xfa, 0x3e, 0xd9, 0x4f, 0x7a, 0xed, + 0xf1, 0x1f, 0x98, 0xf3, 0xff, 0x00, 0xd1, 0xe4, + 0xfd, 0x99, 0x7e, 0x8a, 0x7e, 0x63, 0xcf, 0xff, + 0x00, 0x47, 0x93, 0xf6, 0x65, 0xfa, 0x28, 0x89, + 0xfe, 0x8f, 0xb6, 0x53, 0xde, 0xbb, 0x7c, 0x47, + 0xe6, 0x3c, 0xff, 0x00, 0xf4, 0x79, 0x3f, 0x66, + 0x5f, 0xa2, 0x9f, 0x98, 0xf3, 0xff, 0x00, 0xd1, + 0xe4, 0xfd, 0x99, 0x7e, 0x8a, 0x22, 0x7f, 0xa3, + 0xed, 0x94, 0xf7, 0xae, 0xdf, 0x11, 0xf9, 0x8f, + 0x3f, 0xfd, 0x1e, 0x4f, 0xd9, 0x97, 0xe8, 0xa7, + 0xe6, 0x3c, 0xff, 0x00, 0xf4, 0x79, 0x3f, 0x66, + 0x5f, 0xa2, 0x88, 0x9f, 0xe8, 0xfb, 0x65, 0x3d, + 0xeb, 0xb7, 0xc4, 0x7e, 0x63, 0xcf, 0xff, 0x00, + 0x47, 0x93, 0xf6, 0x65, 0xfa, 0x29, 0xf9, 0x8f, + 0x3f, 0xfd, 0x1e, 0x4f, 0xd9, 0x97, 0xe8, 0xa2, + 0x27, 0xfa, 0x3e, 0xd9, 0x4f, 0x7a, 0xed, 0xf1, + 0x1f, 0x98, 0xf3, 0xff, 0x00, 0xd1, 0xe4, 0xfd, + 0x99, 0x7e, 0x8a, 0x7e, 0x63, 0xcf, 0xff, 0x00, + 0x47, 0x93, 0xf6, 0x65, 0xfa, 0x28, 0x89, 0xfe, + 0x8f, 0xb6, 0x53, 0xde, 0xbb, 0x7c, 0x47, 0xe6, + 0x3c, 0xff, 0x00, 0xf4, 0x79, 0x3f, 0x66, 0x5f, + 0xa2, 0x9f, 0x98, 0xf3, 0xff, 0x00, 0xd1, 0xe4, + 0xfd, 0x99, 0x7e, 0x8a, 0x22, 0x7f, 0xa3, 0xed, + 0x94, 0xf7, 0xae, 0xdf, 0x11, 0xf9, 0x8f, 0x3f, + 0xfd, 0x1e, 0x4f, 0xd9, 0x97, 0xe8, 0xa7, 0xe6, + 0x3c, 0xff, 0x00, 0xf4, 0x79, 0x3f, 0x66, 0x5f, + 0xa2, 0x88, 0x9f, 0xe8, 0xfb, 0x65, 0x3d, 0xeb, + 0xb7, 0xc4, 0x7e, 0x63, 0xcf, 0xff, 0x00, 0x47, + 0x93, 0xf6, 0x65, 0xfa, 0x29, 0xf9, 0x8f, 0x3f, + 0xfd, 0x1e, 0x4f, 0xd9, 0x97, 0xe8, 0xa2, 0x27, + 0xfa, 0x3e, 0xd9, 0x4f, 0x7a, 0xed, 0xf1, 0x1f, + 0x98, 0xf3, 0xff, 0x00, 0xd1, 0xe4, 0xfd, 0x99, + 0x7e, 0x8a, 0x7e, 0x63, 0xcf, 0xff, 0x00, 0x47, + 0x93, 0xf6, 0x65, 0xfa, 0x28, 0x89, 0xfe, 0x8f, + 0xb6, 0x53, 0xde, 0xbb, 0x7c, 0x47, 0xe6, 0x3c, + 0xff, 0x00, 0xf4, 0x79, 0x3f, 0x66, 0x5f, 0xa2, + 0x9f, 0x98, 0xf3, 0xff, 0x00, 0xd1, 0xe4, 0xfd, + 0x99, 0x7e, 0x8a, 0x22, 0x7f, 0xa3, 0xed, 0x94, + 0xf7, 0xae, 0xdf, 0x11, 0xf9, 0x8f, 0x3f, 0xfd, + 0x1e, 0x4f, 0xd9, 0x97, 0xe8, 0xa7, 0xe6, 0x3c, + 0xff, 0x00, 0xf4, 0x79, 0x3f, 0x66, 0x5f, 0xa2, + 0x88, 0x9f, 0xe8, 0xfb, 0x65, 0x3d, 0xeb, 0xb7, + 0xc4, 0x7e, 0x63, 0xcf, 0xff, 0x00, 0x47, 0x93, + 0xf6, 0x65, 0xfa, 0x29, 0xf9, 0x8f, 0x3f, 0xfd, + 0x1e, 0x4f, 0xd9, 0x97, 0xe8, 0xa2, 0x27, 0xfa, + 0x3e, 0xd9, 0x4f, 0x7a, 0xed, 0xf1, 0x35, 0x72, + 0x99, 0xcc, 0xc5, 0xc6, 0x3e, 0x78, 0x27, 0xc6, + 0x3e, 0x08, 0xa4, 0x6d, 0x1f, 0x29, 0x6c, 0x80, + 0x34, 0x54, 0x6d, 0xee, 0x9b, 0x45, 0x2d, 0xa1, + 0xbd, 0x4c, 0xef, 0x2e, 0xfe, 0xd3, 0x51, 0x15, + 0x6b, 0xf2, 0x7c, 0x89, 0xf2, 0x33, 0x65, 0x4d, + 0xaf, 0xdc, 0xfd, 0xe8, 0xfd, 0xcc, 0xfe, 0x4c, + 0xe4, 0xd0, 0xb1, 0x22, 0x22, 0xc5, 0xd8, 0x22, + 0x22, 0x0f, 0xff, 0xd9, +}; + +static const uint8_t data_images_ti_gif[] = +{ + /* /images/ti.gif */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x74, 0x69, 0x2e, 0x67, 0x69, 0x66, 0x00, + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x50, 0x00, + 0x4c, 0x00, 0xb3, 0x00, 0x00, 0xf2, 0x54, 0x5a, + 0x25, 0x25, 0x25, 0xa3, 0xa3, 0xa3, 0xf5, 0x87, + 0x8b, 0x62, 0x62, 0x62, 0x83, 0x83, 0x83, 0x48, + 0x48, 0x48, 0xfa, 0xf7, 0xf8, 0xd4, 0xd4, 0xd4, + 0xbf, 0xbf, 0xbf, 0xea, 0xe7, 0xe7, 0xf9, 0xaf, + 0xb2, 0xfb, 0xce, 0xd0, 0xed, 0x1c, 0x24, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x4c, 0x00, 0x00, 0x04, + 0xfe, 0xf0, 0xc9, 0x49, 0xab, 0x5d, 0x2d, 0xeb, + 0xcd, 0x33, 0xb0, 0x60, 0x28, 0x8e, 0xe4, 0x88, + 0x75, 0xa8, 0xf6, 0x95, 0x6c, 0xeb, 0x5e, 0x69, + 0xbc, 0xbe, 0x74, 0x1d, 0x9e, 0x71, 0x37, 0xdb, + 0xbc, 0x8d, 0xe7, 0x9b, 0x5d, 0xe5, 0x00, 0x28, + 0x1a, 0x1b, 0x8b, 0x9e, 0xf2, 0x07, 0xf4, 0x88, + 0x18, 0x28, 0x86, 0xb2, 0xc7, 0x6c, 0x0a, 0x29, + 0xd5, 0xc6, 0x94, 0xda, 0xe4, 0x5c, 0x27, 0x03, + 0xdd, 0x96, 0x97, 0xcd, 0x7d, 0x25, 0x80, 0xce, + 0x60, 0xec, 0xeb, 0x06, 0x43, 0x0a, 0x54, 0x92, + 0x4d, 0x2b, 0xcb, 0x42, 0xd0, 0x8e, 0x94, 0xfe, + 0xb2, 0xa7, 0xce, 0x0a, 0x0b, 0x82, 0x83, 0x0b, + 0x07, 0x7c, 0x7d, 0x6e, 0x2a, 0x87, 0x8b, 0x12, + 0x7e, 0x28, 0x67, 0x8c, 0x4b, 0x89, 0x2a, 0x46, + 0x6b, 0x0f, 0x07, 0x03, 0x46, 0x46, 0x7b, 0x0b, + 0x9a, 0x9e, 0x9e, 0x96, 0x63, 0x8e, 0x40, 0x96, + 0x79, 0x1c, 0x7b, 0x69, 0x5d, 0x90, 0x35, 0xa3, + 0x39, 0x73, 0x59, 0x86, 0x0f, 0xa9, 0x56, 0x74, + 0xad, 0x31, 0x0a, 0x12, 0x61, 0x5e, 0x12, 0x71, + 0x6e, 0xab, 0x75, 0x93, 0xbb, 0x68, 0x6a, 0x8d, + 0x89, 0xbf, 0x88, 0xc1, 0x8a, 0x97, 0x72, 0xb9, + 0xc6, 0xb5, 0xc9, 0x1a, 0xa5, 0x51, 0xc3, 0xbe, + 0xcf, 0xd0, 0x48, 0xc5, 0x1d, 0xb1, 0xb3, 0xb4, + 0x6c, 0xb6, 0xd3, 0x0f, 0xba, 0x6f, 0x0f, 0xa6, + 0xaa, 0xd6, 0xbe, 0x9a, 0xdb, 0xc4, 0xe4, 0x0d, + 0x9a, 0x40, 0xc7, 0x2e, 0xdf, 0xa1, 0x14, 0xbd, + 0x1c, 0x73, 0xb1, 0xbc, 0xef, 0xe7, 0x4d, 0x7b, + 0x15, 0xe5, 0x1a, 0xfd, 0x28, 0xfc, 0x13, 0xe3, + 0x2d, 0x11, 0x2e, 0x18, 0xda, 0x40, 0x88, 0xbb, + 0x55, 0xd0, 0x9c, 0x42, 0x82, 0x16, 0xb8, 0xa5, + 0x98, 0x33, 0xe1, 0x80, 0xc5, 0x8b, 0x18, 0x33, + 0x66, 0x7c, 0x60, 0xeb, 0x8c, 0xc4, 0x06, 0xfe, + 0xf3, 0x28, 0x7c, 0x84, 0x48, 0xed, 0x5a, 0x97, + 0x90, 0x12, 0x0e, 0x30, 0xb3, 0xa0, 0xb2, 0x0b, + 0x45, 0x59, 0x26, 0xdd, 0xbc, 0x9c, 0x30, 0xb0, + 0x41, 0xc0, 0x09, 0xdf, 0xf0, 0x2d, 0x8c, 0x19, + 0x03, 0x1f, 0x16, 0x14, 0x3e, 0xc1, 0x18, 0x3b, + 0x58, 0x93, 0xa7, 0xbd, 0x01, 0x48, 0x07, 0xc4, + 0xda, 0xd9, 0x2e, 0x65, 0xd2, 0x01, 0x9d, 0x82, + 0x2d, 0x35, 0x5a, 0xad, 0x64, 0x34, 0x09, 0x45, + 0x13, 0xc5, 0x6a, 0x49, 0x55, 0xdf, 0xb2, 0x0e, + 0x73, 0x98, 0x4a, 0xa5, 0xd9, 0x95, 0x14, 0x56, + 0x70, 0x23, 0x27, 0xf9, 0xcc, 0x5a, 0xf6, 0x15, + 0x0a, 0x5c, 0x5c, 0x4d, 0x06, 0x65, 0x4b, 0xf5, + 0x20, 0xd3, 0x15, 0x74, 0xbb, 0x04, 0x7d, 0x50, + 0xaf, 0xac, 0x32, 0x98, 0x1c, 0x2c, 0x7d, 0xeb, + 0x09, 0x82, 0x88, 0x5f, 0x65, 0x71, 0x35, 0x84, + 0x35, 0xba, 0x37, 0xe5, 0xe1, 0x0c, 0xd2, 0xf4, + 0x58, 0xbd, 0xd6, 0xf8, 0xec, 0x61, 0xb7, 0x09, + 0x01, 0xc7, 0xac, 0xdc, 0xcc, 0xef, 0x9e, 0xbb, + 0x96, 0x79, 0x72, 0xe6, 0x7b, 0x78, 0xc2, 0x47, + 0xc1, 0x54, 0x47, 0x6b, 0x36, 0xba, 0x22, 0x71, + 0x06, 0xcc, 0xa2, 0x49, 0x0c, 0x36, 0xcb, 0x4e, + 0x32, 0x69, 0xc6, 0x25, 0xd2, 0x26, 0xbb, 0xc7, + 0xa0, 0xb7, 0x6f, 0x06, 0xf8, 0x0e, 0xf4, 0xc6, + 0x44, 0xb9, 0x84, 0x58, 0x68, 0x37, 0x59, 0x1c, + 0x37, 0x83, 0xb2, 0xb0, 0x95, 0xa4, 0x77, 0x6a, + 0xe8, 0xd6, 0x51, 0xe8, 0xc5, 0x72, 0x9b, 0x14, + 0x0c, 0x93, 0x6c, 0xd1, 0x57, 0x46, 0x75, 0x1b, + 0x69, 0x0f, 0x66, 0x3f, 0xcd, 0xea, 0x5d, 0x72, + 0x1a, 0xdd, 0x33, 0x9c, 0xaf, 0x3d, 0xce, 0xba, + 0x8c, 0xf5, 0x35, 0xb4, 0xab, 0x1f, 0xc1, 0x54, + 0x7c, 0x8b, 0xb4, 0xcd, 0xa7, 0x04, 0x02, 0x4e, + 0xc2, 0x35, 0x3c, 0x91, 0x3a, 0xd8, 0x82, 0x17, + 0x09, 0x09, 0x77, 0xf1, 0x57, 0x42, 0x7a, 0xf9, + 0x0d, 0x18, 0x82, 0x6b, 0x94, 0x00, 0xf0, 0xd4, + 0x83, 0x99, 0x04, 0xa6, 0x20, 0x0d, 0xd7, 0x4d, + 0x32, 0xd3, 0x84, 0x07, 0x52, 0x95, 0x20, 0x86, + 0x22, 0x54, 0xd8, 0x0d, 0x87, 0x2f, 0xe4, 0x05, + 0x84, 0x6a, 0x20, 0x82, 0x30, 0x1d, 0x10, 0x17, + 0x96, 0x58, 0x82, 0x88, 0x8f, 0xa8, 0x08, 0x1e, + 0x34, 0x29, 0xba, 0x48, 0x02, 0x8b, 0x1c, 0x90, + 0x28, 0x63, 0x44, 0xc1, 0xfc, 0x77, 0x23, 0x3d, + 0xc1, 0x6c, 0xb8, 0x63, 0x08, 0x1e, 0x6e, 0xe0, + 0xe3, 0x8f, 0x26, 0x26, 0x32, 0x24, 0x91, 0xfe, + 0x18, 0x89, 0x24, 0x0d, 0x2c, 0x1e, 0xb9, 0xe4, + 0x4f, 0x1f, 0x3e, 0xd9, 0x82, 0x88, 0x02, 0x4a, + 0x49, 0x82, 0x02, 0x27, 0xc6, 0x68, 0xa5, 0x08, + 0x7e, 0xe8, 0xb8, 0xa5, 0x53, 0x23, 0x39, 0xf9, + 0xe5, 0x10, 0x0c, 0x0c, 0x52, 0xa5, 0x0d, 0x11, + 0x00, 0x00, 0x3b, +}; + +static const uint8_t data_images_tiva_jpg[] = +{ + /* /images/tiva.jpg */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x74, 0x69, 0x76, 0x61, 0x2e, 0x6a, 0x70, 0x67, + 0x00, + 0xff, 0xd8, 0xff, 0xe1, 0x00, 0x18, 0x45, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2a, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xff, + 0xe1, 0x03, 0xb4, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, + 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, + 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, + 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, + 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, + 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, + 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, + 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, + 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, + 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x20, 0x35, 0x2e, 0x30, 0x2d, 0x63, 0x30, + 0x36, 0x30, 0x20, 0x36, 0x31, 0x2e, 0x31, 0x33, + 0x34, 0x37, 0x37, 0x37, 0x2c, 0x20, 0x32, 0x30, + 0x31, 0x30, 0x2f, 0x30, 0x32, 0x2f, 0x31, 0x32, + 0x2d, 0x31, 0x37, 0x3a, 0x33, 0x32, 0x3a, 0x30, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, + 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, + 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, + 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, + 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, + 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, + 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, + 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, + 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, + 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, + 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x38, 0x33, + 0x46, 0x43, 0x44, 0x30, 0x31, 0x31, 0x32, 0x36, + 0x44, 0x44, 0x31, 0x31, 0x45, 0x33, 0x42, 0x36, + 0x37, 0x30, 0x45, 0x30, 0x37, 0x37, 0x32, 0x32, + 0x37, 0x34, 0x33, 0x30, 0x42, 0x36, 0x22, 0x20, + 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, + 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, + 0x64, 0x3a, 0x38, 0x33, 0x46, 0x43, 0x44, 0x30, + 0x31, 0x32, 0x32, 0x36, 0x44, 0x44, 0x31, 0x31, + 0x45, 0x33, 0x42, 0x36, 0x37, 0x30, 0x45, 0x30, + 0x37, 0x37, 0x32, 0x32, 0x37, 0x34, 0x33, 0x30, + 0x42, 0x36, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, + 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, + 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x53, 0x35, + 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, + 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, + 0x75, 0x75, 0x69, 0x64, 0x3a, 0x66, 0x61, 0x66, + 0x35, 0x62, 0x64, 0x64, 0x35, 0x2d, 0x62, 0x61, + 0x33, 0x64, 0x2d, 0x31, 0x31, 0x64, 0x61, 0x2d, + 0x61, 0x64, 0x33, 0x31, 0x2d, 0x64, 0x33, 0x33, + 0x64, 0x37, 0x35, 0x31, 0x38, 0x32, 0x66, 0x31, + 0x62, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, + 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, + 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x38, 0x33, 0x46, + 0x43, 0x44, 0x30, 0x31, 0x30, 0x32, 0x36, 0x44, + 0x44, 0x31, 0x31, 0x45, 0x33, 0x42, 0x36, 0x37, + 0x30, 0x45, 0x30, 0x37, 0x37, 0x32, 0x32, 0x37, + 0x34, 0x33, 0x30, 0x42, 0x36, 0x22, 0x2f, 0x3e, + 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x3e, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x3e, + 0x48, 0x61, 0x75, 0x67, 0x6c, 0x69, 0x65, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x3e, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, + 0x3e, 0x4a, 0x6f, 0x65, 0x3c, 0x2f, 0x72, 0x64, + 0x66, 0x3a, 0x6c, 0x69, 0x3e, 0x20, 0x3c, 0x2f, + 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, + 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x3e, 0x20, 0x3c, + 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, + 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, + 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xff, 0xed, 0x00, + 0x48, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, + 0x6f, 0x70, 0x20, 0x33, 0x2e, 0x30, 0x00, 0x38, + 0x42, 0x49, 0x4d, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x1c, 0x01, 0x5a, 0x00, 0x03, + 0x1b, 0x25, 0x47, 0x1c, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x00, 0x38, 0x42, 0x49, 0x4d, 0x04, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfc, + 0xe1, 0x1f, 0x89, 0xc8, 0xb7, 0xc9, 0x78, 0x2f, + 0x34, 0x62, 0x34, 0x07, 0x58, 0x77, 0xeb, 0xff, + 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, + 0xdb, 0x00, 0x84, 0x00, 0x0c, 0x08, 0x08, 0x08, + 0x09, 0x08, 0x0c, 0x09, 0x09, 0x0c, 0x11, 0x0b, + 0x0a, 0x0b, 0x11, 0x15, 0x0f, 0x0c, 0x0c, 0x0f, + 0x15, 0x18, 0x13, 0x13, 0x15, 0x13, 0x13, 0x18, + 0x17, 0x12, 0x14, 0x14, 0x14, 0x14, 0x12, 0x17, + 0x17, 0x1b, 0x1c, 0x1e, 0x1c, 0x1b, 0x17, 0x24, + 0x24, 0x27, 0x27, 0x24, 0x24, 0x35, 0x33, 0x33, + 0x33, 0x35, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x01, 0x0d, 0x0b, 0x0b, + 0x0d, 0x0e, 0x0d, 0x10, 0x0e, 0x0e, 0x10, 0x14, + 0x0e, 0x0f, 0x0e, 0x14, 0x14, 0x10, 0x11, 0x11, + 0x10, 0x14, 0x1d, 0x14, 0x14, 0x15, 0x14, 0x14, + 0x1d, 0x25, 0x1a, 0x17, 0x17, 0x17, 0x17, 0x1a, + 0x25, 0x20, 0x23, 0x1e, 0x1e, 0x1e, 0x23, 0x20, + 0x28, 0x28, 0x25, 0x25, 0x28, 0x28, 0x32, 0x32, + 0x30, 0x32, 0x32, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x04, 0x95, 0x05, 0x00, 0x03, 0x01, + 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, + 0xff, 0xc4, 0x00, 0xce, 0x00, 0x01, 0x00, 0x02, + 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, + 0x01, 0x03, 0x04, 0x02, 0x07, 0x08, 0x01, 0x01, + 0x00, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x04, 0x03, 0x05, 0x06, 0x10, 0x00, + 0x01, 0x03, 0x02, 0x02, 0x03, 0x08, 0x0d, 0x07, + 0x08, 0x08, 0x06, 0x02, 0x01, 0x02, 0x07, 0x01, + 0x00, 0x02, 0x03, 0x11, 0x04, 0x12, 0x05, 0x21, + 0x31, 0x06, 0x41, 0x51, 0x91, 0xd1, 0x92, 0x13, + 0x54, 0x15, 0x61, 0x71, 0x81, 0xa1, 0xb1, 0x22, + 0x32, 0x72, 0xd2, 0x53, 0x14, 0x34, 0x16, 0xc1, + 0x52, 0xa2, 0xb2, 0x73, 0x55, 0x07, 0xf0, 0x42, + 0xe2, 0x23, 0x33, 0x93, 0xd3, 0x35, 0xe1, 0x62, + 0x82, 0xc2, 0x63, 0x25, 0x36, 0x17, 0x43, 0xa3, + 0xb3, 0x24, 0x74, 0x94, 0xf1, 0x26, 0x83, 0x37, + 0x44, 0x64, 0xf2, 0xc3, 0xe3, 0x84, 0x45, 0x27, + 0x11, 0x01, 0x00, 0x02, 0x01, 0x02, 0x04, 0x03, + 0x06, 0x02, 0x08, 0x06, 0x01, 0x02, 0x06, 0x03, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x11, 0x12, 0x21, + 0x51, 0x52, 0x13, 0x31, 0x04, 0x14, 0x41, 0x61, + 0x71, 0x91, 0x22, 0x32, 0x81, 0x53, 0xb1, 0x42, + 0x72, 0xa2, 0x33, 0x05, 0x15, 0x06, 0xa1, 0xc1, + 0x62, 0x23, 0x93, 0x16, 0xd1, 0xe1, 0x92, 0xf1, + 0xb2, 0xc2, 0x43, 0x83, 0x24, 0x82, 0x63, 0x44, + 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, + 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xb7, 0xda, + 0xdb, 0x5c, 0xde, 0xdc, 0xdc, 0xb5, 0xb7, 0x2f, + 0x8c, 0x44, 0xf2, 0x35, 0x9f, 0x9c, 0x7b, 0x2b, + 0xab, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x6b, + 0x19, 0x2f, 0xbd, 0x5e, 0xf9, 0xe7, 0xeb, 0x15, + 0x2e, 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, + 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, + 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, + 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, + 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, + 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, + 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, + 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, + 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, + 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, + 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, + 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, + 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, + 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, + 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, + 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, + 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, + 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, + 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, + 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, + 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, + 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, + 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, + 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, + 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, + 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, + 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, + 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, + 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, + 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, + 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, + 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, + 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, + 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, + 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, + 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, + 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, + 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, + 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, + 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, + 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, + 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, + 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, + 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, + 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, + 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, + 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, + 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, + 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, + 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, + 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, + 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, + 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, + 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, + 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, + 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, + 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, + 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, + 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, + 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, + 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, + 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, + 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, + 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, + 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, + 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, + 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, + 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, + 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, + 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, + 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, + 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, + 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, + 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, + 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, + 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, + 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, + 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, + 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, + 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, + 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, + 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, + 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, + 0x82, 0x27, 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, + 0x69, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, + 0x2c, 0x88, 0x22, 0x7a, 0x9a, 0xeb, 0xa6, 0xbf, + 0xbf, 0xc6, 0x9d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, + 0xe3, 0x52, 0xc8, 0x82, 0x27, 0xa9, 0xae, 0xba, + 0x6b, 0xfb, 0xfc, 0x69, 0xd4, 0xd7, 0x5d, 0x35, + 0xfd, 0xfe, 0x35, 0x2c, 0x88, 0x22, 0x7a, 0x9a, + 0xeb, 0xa6, 0xbf, 0xbf, 0xc6, 0x9d, 0x4d, 0x75, + 0xd3, 0x5f, 0xdf, 0xe3, 0x52, 0xc8, 0x82, 0x27, + 0xa9, 0xae, 0xba, 0x6b, 0xfb, 0xfc, 0x69, 0xd4, + 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, 0x2b, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x44, 0x11, + 0x5d, 0x4d, 0x75, 0xd3, 0x5f, 0xdf, 0xe3, 0x4e, + 0xa6, 0xba, 0xe9, 0xaf, 0xef, 0xf1, 0xa9, 0x54, + 0x41, 0x15, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, + 0x34, 0xea, 0x6b, 0xae, 0x9a, 0xfe, 0xff, 0x00, + 0x1a, 0x95, 0x44, 0x11, 0x5d, 0x4d, 0x75, 0xd3, + 0x5f, 0xdf, 0xe3, 0x4e, 0xa6, 0xba, 0xe9, 0xaf, + 0xef, 0xf1, 0xa9, 0x54, 0x41, 0x15, 0xd4, 0xd7, + 0x5d, 0x35, 0xfd, 0xfe, 0x34, 0xea, 0x6b, 0xae, + 0x9a, 0xfe, 0xff, 0x00, 0x1a, 0x95, 0x59, 0x41, + 0x13, 0xd4, 0xd7, 0x5d, 0x35, 0xfd, 0xfe, 0x35, + 0xcd, 0x71, 0x6f, 0x75, 0x65, 0x71, 0x6c, 0x0d, + 0xcb, 0xe5, 0x12, 0xbc, 0x6b, 0x24, 0x01, 0x42, + 0x3b, 0x2a, 0x7d, 0x44, 0xe7, 0x3e, 0xf3, 0x65, + 0xe7, 0xfc, 0xa1, 0x06, 0x32, 0x5f, 0x7a, 0xbd, + 0xf3, 0xcf, 0xd6, 0x2a, 0x5d, 0x44, 0x64, 0xbe, + 0xf5, 0x7b, 0xe7, 0x9f, 0xac, 0x54, 0xba, 0x02, + 0x22, 0x20, 0xe7, 0xbc, 0xbf, 0xb1, 0xb0, 0x8c, + 0x4b, 0x7b, 0x71, 0x15, 0xac, 0x6e, 0x38, 0x5a, + 0xf9, 0x9e, 0xd8, 0xda, 0x4e, 0xba, 0x55, 0xe4, + 0x2e, 0x4f, 0x89, 0xf6, 0x6b, 0xef, 0x6b, 0x1f, + 0xfd, 0x98, 0xbd, 0x35, 0x59, 0xfc, 0x5c, 0xb4, + 0xba, 0xba, 0xd9, 0xfb, 0x58, 0xed, 0x61, 0x92, + 0x77, 0x8b, 0xa0, 0x4b, 0x63, 0x69, 0x79, 0x03, + 0x03, 0x86, 0xa6, 0x82, 0xbe, 0x46, 0x72, 0x3c, + 0xe8, 0xea, 0xcb, 0xee, 0x7f, 0x73, 0x27, 0xa2, + 0x83, 0xf4, 0x17, 0xc4, 0xfb, 0x35, 0xf7, 0xb5, + 0x8f, 0xfe, 0xcc, 0x5e, 0x9a, 0x7c, 0x4f, 0xb3, + 0x5f, 0x7b, 0x58, 0xff, 0x00, 0xec, 0xc5, 0xe9, + 0xaf, 0xce, 0x97, 0x16, 0x97, 0x56, 0xaf, 0x0c, + 0xba, 0x85, 0xf0, 0x3c, 0x8a, 0x86, 0x48, 0xd2, + 0xc3, 0x4e, 0xd3, 0xa8, 0x96, 0xf6, 0x97, 0x57, + 0x4e, 0x2d, 0xb5, 0x85, 0xf3, 0xb8, 0x0a, 0x96, + 0xc6, 0xd7, 0x3c, 0x81, 0xda, 0x6d, 0x50, 0x7e, + 0x8b, 0xf8, 0x9f, 0x66, 0xbe, 0xf6, 0xb1, 0xff, + 0x00, 0xd9, 0x8b, 0xd3, 0x5d, 0x96, 0x77, 0xd6, + 0x57, 0xf1, 0x73, 0xd6, 0x37, 0x11, 0x5d, 0x44, + 0x0e, 0x12, 0xf8, 0x5e, 0xd9, 0x1a, 0x0e, 0xf5, + 0x58, 0x48, 0x5f, 0x9c, 0x3a, 0x8f, 0x3b, 0xfb, + 0xbe, 0xe7, 0xf7, 0x32, 0x7a, 0x2b, 0xec, 0x3f, + 0x84, 0xb6, 0x97, 0x36, 0xdb, 0x37, 0x2b, 0x2e, + 0x22, 0x7c, 0x0f, 0x37, 0x2f, 0x21, 0xb2, 0x34, + 0xb4, 0xea, 0x68, 0x1a, 0x1c, 0x2a, 0x82, 0xc9, + 0x2e, 0xd1, 0x6c, 0xfc, 0x32, 0x3a, 0x29, 0x73, + 0x3b, 0x38, 0xe4, 0x61, 0x2d, 0x7b, 0x1f, 0x71, + 0x13, 0x5c, 0xd2, 0x35, 0x82, 0xd7, 0x38, 0x15, + 0x86, 0xed, 0x2e, 0xce, 0x39, 0xc1, 0xad, 0xcd, + 0x6c, 0x9c, 0xe3, 0xa0, 0x01, 0x71, 0x11, 0x24, + 0xf2, 0xd7, 0xc0, 0xb6, 0x9f, 0xfd, 0x47, 0x9a, + 0x7f, 0xe5, 0xcc, 0x6b, 0xd8, 0xe7, 0x1c, 0xa3, + 0x5a, 0x5c, 0xd2, 0x1c, 0xd3, 0x47, 0x03, 0x50, + 0x46, 0xe1, 0x1a, 0x50, 0x7e, 0xa1, 0x58, 0x24, + 0x0d, 0x27, 0x40, 0xdd, 0x27, 0x42, 0xe1, 0xc8, + 0x73, 0x01, 0x99, 0xe4, 0xb6, 0x59, 0x80, 0x38, + 0x8d, 0xcc, 0x0c, 0x7b, 0x8f, 0xf5, 0xb0, 0x80, + 0xff, 0x00, 0xa4, 0x0a, 0x67, 0xb9, 0x80, 0xcb, + 0x32, 0x6b, 0xdc, 0xc1, 0xda, 0xad, 0xa0, 0x7c, + 0x83, 0xb2, 0xe0, 0xd3, 0x84, 0x77, 0x4e, 0x84, + 0x1e, 0x1f, 0xb4, 0xbb, 0x3a, 0xc7, 0x16, 0x3f, + 0x35, 0xb3, 0x6b, 0xda, 0x48, 0x73, 0x5d, 0x71, + 0x10, 0x20, 0x8d, 0x60, 0x82, 0xf5, 0x96, 0x6d, + 0x1e, 0xcf, 0x48, 0xf6, 0xc7, 0x1e, 0x69, 0x67, + 0x24, 0x8f, 0x34, 0x63, 0x1b, 0x71, 0x11, 0x24, + 0x9d, 0x00, 0x00, 0x1e, 0xbf, 0x37, 0x3d, 0xce, + 0x7b, 0x9c, 0xf7, 0x1a, 0xb9, 0xc6, 0xae, 0x27, + 0x74, 0x9d, 0x6a, 0x4b, 0x66, 0x08, 0xf8, 0x93, + 0x2a, 0xdf, 0xf6, 0xb8, 0x3f, 0xea, 0x35, 0x07, + 0xe9, 0x04, 0x45, 0x82, 0x68, 0x2b, 0xbc, 0x83, + 0x2a, 0x32, 0xe3, 0x69, 0xf6, 0x76, 0xda, 0x69, + 0x20, 0xb8, 0xcc, 0xad, 0xa2, 0x96, 0x23, 0x49, + 0x23, 0x74, 0xac, 0x0e, 0x07, 0x5d, 0x28, 0x4a, + 0x8e, 0xdb, 0xad, 0xaa, 0x66, 0xce, 0x64, 0xce, + 0x92, 0x32, 0x0d, 0xfd, 0xcd, 0x62, 0xb4, 0x66, + 0xb3, 0x8b, 0x75, 0xe4, 0x6f, 0x37, 0xc2, 0xbe, + 0x07, 0x2c, 0xd2, 0x4b, 0x23, 0xa4, 0x94, 0x97, + 0xc8, 0xf2, 0x5c, 0xf7, 0x9d, 0x24, 0x92, 0x74, + 0x92, 0x50, 0x7e, 0x9b, 0xb7, 0xb9, 0x82, 0xea, + 0x06, 0x5c, 0x5b, 0x48, 0xd9, 0xa0, 0x90, 0x62, + 0x8e, 0x46, 0x10, 0x5a, 0xe1, 0xbe, 0x08, 0x5b, + 0x54, 0x0e, 0xc2, 0x7f, 0xa3, 0xb2, 0x9f, 0xfc, + 0x71, 0xe1, 0x72, 0x9d, 0xae, 0xfe, 0x8e, 0xca, + 0x05, 0x54, 0x76, 0x61, 0xb4, 0x99, 0x0e, 0x58, + 0xec, 0x17, 0xf7, 0xf0, 0x41, 0x20, 0xd7, 0x1b, + 0x9e, 0x0b, 0xc7, 0xf6, 0x1b, 0x57, 0x77, 0x97, + 0xcd, 0xf6, 0xfb, 0xf1, 0x22, 0xe6, 0x6b, 0x89, + 0x32, 0x9c, 0x8a, 0x53, 0x0d, 0xb4, 0x64, 0xb2, + 0x7b, 0xb6, 0x1a, 0x3a, 0x47, 0x0f, 0x29, 0xb1, + 0xbb, 0x71, 0xa3, 0xbe, 0xbe, 0x7d, 0x6d, 0x67, + 0x7d, 0x7f, 0x36, 0x0b, 0x58, 0xa4, 0xba, 0x9d, + 0xda, 0x4b, 0x23, 0x6b, 0x9e, 0xf3, 0xd9, 0xd0, + 0x0a, 0x0f, 0xbd, 0xc5, 0xb7, 0xfb, 0x1b, 0x2b, + 0xf0, 0x33, 0x35, 0x87, 0x11, 0xf9, 0xc1, 0xed, + 0x1c, 0x2e, 0x60, 0x0a, 0x6a, 0xd6, 0xf2, 0xd2, + 0xf2, 0x21, 0x35, 0xa4, 0xd1, 0xdc, 0x42, 0x75, + 0x4b, 0x13, 0x83, 0xdb, 0xc2, 0xd2, 0x57, 0xe7, + 0x5b, 0xcd, 0x99, 0xda, 0x1b, 0x18, 0x79, 0xfb, + 0xcc, 0xba, 0xe2, 0x18, 0x86, 0xb9, 0x1f, 0x1b, + 0xb0, 0x8e, 0xd9, 0xa6, 0x85, 0xe7, 0x27, 0xcf, + 0xf3, 0x4c, 0x92, 0xed, 0xb7, 0x79, 0x74, 0xee, + 0x85, 0xe0, 0xd5, 0xcc, 0x1a, 0x58, 0xe1, 0xbc, + 0xf6, 0xea, 0x21, 0x07, 0xe9, 0x24, 0x50, 0x7b, + 0x21, 0xb5, 0x16, 0xdb, 0x4b, 0x94, 0xb6, 0xf2, + 0x36, 0xf3, 0x57, 0x11, 0x9c, 0x17, 0x50, 0x56, + 0xb8, 0x1f, 0x4a, 0xe8, 0xaf, 0xe6, 0xbb, 0x71, + 0x4d, 0xd5, 0x01, 0x71, 0xdf, 0xe7, 0x59, 0x46, + 0x5a, 0xf6, 0xb3, 0x30, 0xbc, 0x86, 0xd1, 0xef, + 0x05, 0xcc, 0x6c, 0xaf, 0x0d, 0x24, 0x0d, 0x64, + 0x57, 0x71, 0x63, 0x37, 0xce, 0x72, 0xdc, 0x9a, + 0xc9, 0xf7, 0xb9, 0x8c, 0xc2, 0x18, 0x1a, 0x34, + 0x57, 0x5b, 0xcf, 0xcd, 0x60, 0xfc, 0xe2, 0x57, + 0xc1, 0x36, 0xb7, 0x69, 0x6e, 0x76, 0x8f, 0x39, + 0x96, 0xfe, 0x50, 0x59, 0x17, 0x91, 0x6d, 0x09, + 0xfc, 0xc8, 0xc6, 0xa1, 0xdb, 0x3a, 0xca, 0x0f, + 0xbf, 0x58, 0x66, 0xb9, 0x6e, 0x65, 0x1b, 0xa4, + 0xcb, 0xee, 0x63, 0xba, 0x63, 0x0e, 0x17, 0x3a, + 0x27, 0x07, 0x80, 0xed, 0x74, 0xf1, 0x7b, 0x6b, + 0xad, 0x7c, 0xef, 0xf0, 0x5f, 0x4e, 0x47, 0x7e, + 0x7f, 0xfe, 0x2e, 0xbf, 0xf2, 0xd8, 0x3e, 0x55, + 0xf4, 0x34, 0x0a, 0x85, 0xcb, 0x79, 0x9b, 0x65, + 0x56, 0x04, 0x0b, 0xeb, 0xc8, 0x2d, 0x49, 0xd4, + 0xd9, 0xa4, 0x6c, 0x64, 0xf6, 0x83, 0x88, 0x2a, + 0x8d, 0xf8, 0x99, 0xb7, 0x17, 0x59, 0x53, 0xc6, + 0x4b, 0x95, 0x49, 0xcd, 0xdd, 0xc8, 0xc0, 0xfb, + 0x99, 0xda, 0x68, 0xe8, 0xda, 0xef, 0x25, 0xac, + 0xde, 0x2e, 0x1a, 0x49, 0x5f, 0x2c, 0xb6, 0xb2, + 0xcd, 0x33, 0x6b, 0x97, 0x36, 0xda, 0x29, 0x6f, + 0xae, 0x9f, 0xe3, 0x3f, 0x00, 0x74, 0x8f, 0x3f, + 0xd6, 0x71, 0xd2, 0x83, 0xf4, 0x3d, 0xae, 0xd0, + 0x64, 0x57, 0x8f, 0x11, 0xda, 0x66, 0x16, 0xd3, + 0xbc, 0xea, 0x63, 0x25, 0x61, 0x27, 0xb9, 0x89, + 0x77, 0xd4, 0x70, 0xf8, 0x37, 0xd7, 0xe6, 0xab, + 0xfc, 0x9f, 0x35, 0xca, 0x9e, 0xd1, 0x98, 0x5a, + 0x4b, 0x6a, 0xe7, 0x79, 0x06, 0x56, 0x39, 0x80, + 0xf9, 0xa6, 0x94, 0x3d, 0xc5, 0x7a, 0xfc, 0x37, + 0xdb, 0xcb, 0xd6, 0x5f, 0xc3, 0x91, 0x66, 0x92, + 0xba, 0x6b, 0x6b, 0x82, 0x23, 0xb4, 0x99, 0xe4, + 0x97, 0xc7, 0x27, 0xe6, 0xb4, 0xbb, 0x75, 0xae, + 0xd5, 0xd8, 0x41, 0xf5, 0xba, 0xa3, 0x9c, 0xd6, + 0x34, 0xb9, 0xe4, 0x35, 0xa3, 0x5b, 0x9c, 0x68, + 0x3b, 0xeb, 0x5d, 0xcd, 0xc4, 0x36, 0xb6, 0xf2, + 0xdc, 0xdc, 0x3f, 0x9b, 0x86, 0x16, 0xba, 0x49, + 0x5e, 0x77, 0x1a, 0xdf, 0x19, 0xdd, 0xe0, 0xbe, + 0x0f, 0xb5, 0xfb, 0x73, 0x99, 0x6d, 0x1d, 0xdb, + 0xd8, 0x1e, 0xe8, 0x32, 0xd6, 0x9a, 0x43, 0x6a, + 0xd2, 0x43, 0x4b, 0x46, 0xa7, 0x49, 0x4f, 0x29, + 0xc5, 0x07, 0xda, 0x5d, 0xb5, 0x1b, 0x36, 0xc9, + 0x39, 0xb7, 0x66, 0xb6, 0x8d, 0x7e, 0xaa, 0x19, + 0xe3, 0xf4, 0x94, 0x84, 0x33, 0xc3, 0x3c, 0x62, + 0x58, 0x1e, 0xd9, 0x63, 0x70, 0xab, 0x5f, 0x1b, + 0x83, 0x9a, 0x47, 0x60, 0xb4, 0x95, 0xf9, 0xc9, + 0x9b, 0x39, 0x9f, 0xc9, 0x67, 0xed, 0xf1, 0xe5, + 0xf7, 0x0e, 0xb4, 0x22, 0xbc, 0xf0, 0x89, 0xc5, + 0xb4, 0xf9, 0xda, 0xb5, 0x76, 0x56, 0xed, 0x9d, + 0xda, 0x9c, 0xdf, 0x67, 0x6e, 0xc4, 0xf6, 0x32, + 0x9e, 0x6c, 0xba, 0xb3, 0x5b, 0x38, 0x93, 0x1c, + 0x80, 0x7c, 0xe6, 0xef, 0xf6, 0x75, 0xa0, 0xfd, + 0x17, 0xd8, 0xdd, 0x45, 0x1f, 0x90, 0xe7, 0x36, + 0x99, 0xe6, 0x55, 0x06, 0x67, 0x69, 0xa2, 0x39, + 0xc5, 0x4b, 0x09, 0xd2, 0xc7, 0x8d, 0x0f, 0x69, + 0xed, 0x15, 0x20, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x0b, 0x9b, 0x31, 0x95, 0xf0, 0xd8, + 0x5c, 0xcb, 0x19, 0xc2, 0xf8, 0xe2, 0x7b, 0xd8, + 0xed, 0xd0, 0x43, 0x49, 0xaf, 0x79, 0x74, 0xae, + 0x3c, 0xdf, 0xf9, 0x5d, 0xef, 0xd8, 0x49, 0xf5, + 0x1c, 0x83, 0xe7, 0x99, 0x3d, 0xe7, 0xe2, 0x1e, + 0x73, 0x6c, 0xeb, 0x9b, 0x2c, 0xc2, 0xb1, 0xb1, + 0xd8, 0x1d, 0x8f, 0x9b, 0x69, 0xa8, 0x15, 0xf5, + 0x45, 0x77, 0xfb, 0x17, 0xe2, 0x87, 0xde, 0x0c, + 0xe5, 0x47, 0xfc, 0x15, 0xd1, 0xf8, 0x6a, 0x3f, + 0xc8, 0xe7, 0xfb, 0x73, 0xf5, 0x55, 0xb7, 0xb8, + 0x10, 0x52, 0xbd, 0x8b, 0xf1, 0x43, 0xef, 0x06, + 0x72, 0xa3, 0xfe, 0x0a, 0x7b, 0x17, 0xe2, 0x87, + 0xde, 0x0c, 0xe5, 0x47, 0xfc, 0x15, 0x75, 0xee, + 0x04, 0xee, 0x04, 0x14, 0xaf, 0x62, 0xfc, 0x50, + 0xfb, 0xc1, 0x9c, 0xa8, 0xff, 0x00, 0x82, 0x9e, + 0xc5, 0xf8, 0xa1, 0xf7, 0x83, 0x39, 0x51, 0xff, + 0x00, 0x05, 0x5d, 0x7b, 0x81, 0x38, 0x10, 0x52, + 0xbd, 0x8b, 0xf1, 0x43, 0xef, 0x06, 0x72, 0xa3, + 0xfe, 0x0a, 0x7b, 0x17, 0xe2, 0x87, 0xde, 0x0c, + 0xe5, 0x47, 0xfc, 0x15, 0x70, 0xf6, 0x9b, 0x6a, + 0xfe, 0xd6, 0x3e, 0x50, 0xe3, 0x4f, 0x69, 0xb6, + 0xd5, 0xce, 0xc7, 0x53, 0xb9, 0x88, 0x6f, 0x76, + 0xd0, 0x53, 0xfd, 0x8b, 0xf1, 0x43, 0xef, 0x06, + 0x72, 0xa3, 0xfe, 0x0a, 0x7b, 0x17, 0xe2, 0x87, + 0xde, 0x0c, 0xe5, 0x47, 0xfc, 0x15, 0x75, 0xa7, + 0x60, 0x27, 0x70, 0x20, 0xa5, 0x7b, 0x17, 0xe2, + 0x87, 0xde, 0x0c, 0xe5, 0x47, 0xfc, 0x14, 0xf6, + 0x2f, 0xc5, 0x0f, 0xbc, 0x19, 0xca, 0x8f, 0xf8, + 0x2a, 0xeb, 0xdc, 0x09, 0xdc, 0x08, 0x29, 0x5e, + 0xc5, 0xf8, 0xa1, 0xf7, 0x83, 0x39, 0x51, 0xff, + 0x00, 0x05, 0x3d, 0x8b, 0xf1, 0x43, 0xef, 0x06, + 0x72, 0xa3, 0xfe, 0x0a, 0xba, 0xf7, 0x02, 0x77, + 0x02, 0x0a, 0x57, 0xb1, 0x7e, 0x28, 0x7d, 0xe0, + 0xce, 0x54, 0x7f, 0xc1, 0x4f, 0x62, 0xfc, 0x50, + 0xfb, 0xc1, 0x9c, 0xa8, 0xff, 0x00, 0x82, 0xae, + 0xbd, 0xc0, 0x9d, 0xc0, 0x82, 0x95, 0xec, 0x5f, + 0x8a, 0x1f, 0x78, 0x33, 0x95, 0x1f, 0xf0, 0x53, + 0xd8, 0xbf, 0x14, 0x3e, 0xf0, 0x67, 0x2a, 0x3f, + 0xe0, 0xab, 0xaf, 0x70, 0x27, 0x70, 0x20, 0xa5, + 0x7b, 0x17, 0xe2, 0x87, 0xde, 0x0c, 0xe5, 0x47, + 0xfc, 0x14, 0xf6, 0x2f, 0xc5, 0x0f, 0xbc, 0x19, + 0xca, 0x8f, 0xf8, 0x2a, 0xeb, 0xdc, 0x09, 0xdc, + 0x08, 0x29, 0x5e, 0xc5, 0xf8, 0xa1, 0xf7, 0x83, + 0x39, 0x51, 0xff, 0x00, 0x05, 0x3d, 0x8b, 0xf1, + 0x43, 0xef, 0x06, 0x72, 0xa3, 0xfe, 0x0a, 0xba, + 0xf0, 0x25, 0x3b, 0x01, 0x05, 0x2b, 0xd8, 0xbf, + 0x14, 0x3e, 0xf0, 0x67, 0x2a, 0x3f, 0xe0, 0xa7, + 0xb1, 0x7e, 0x28, 0x7d, 0xe0, 0xce, 0x54, 0x7f, + 0xc1, 0x57, 0x5e, 0xe0, 0x4e, 0xe0, 0x41, 0x4a, + 0xf6, 0x2f, 0xc5, 0x0f, 0xbc, 0x19, 0xca, 0x8f, + 0xf8, 0x29, 0xec, 0x5f, 0x8a, 0x1f, 0x78, 0x33, + 0x95, 0x1f, 0xf0, 0x55, 0xd7, 0xb8, 0x13, 0xb8, + 0x10, 0x52, 0xbd, 0x8b, 0xf1, 0x43, 0xef, 0x06, + 0x72, 0xa3, 0xfe, 0x0a, 0x7b, 0x17, 0xe2, 0x87, + 0xde, 0x0c, 0xe5, 0x47, 0xfc, 0x15, 0x75, 0xee, + 0x04, 0xee, 0x04, 0x14, 0xaf, 0x62, 0xfc, 0x50, + 0xfb, 0xc1, 0x9c, 0xa8, 0xff, 0x00, 0x82, 0x9e, + 0xc5, 0xf8, 0xa1, 0xf7, 0x83, 0x39, 0x51, 0xff, + 0x00, 0x05, 0x5d, 0x7b, 0x81, 0x3b, 0x81, 0x05, + 0x2b, 0xd8, 0xbf, 0x14, 0x3e, 0xf0, 0x67, 0x2a, + 0x3f, 0xe0, 0xa7, 0xb1, 0x7e, 0x28, 0x7d, 0xe0, + 0xce, 0x54, 0x7f, 0xc1, 0x57, 0x5e, 0xe0, 0x4e, + 0xe0, 0x41, 0x4a, 0xf6, 0x2f, 0xc5, 0x0f, 0xbc, + 0x19, 0xca, 0x8f, 0xf8, 0x29, 0xec, 0x5f, 0x8a, + 0x1f, 0x78, 0x33, 0x95, 0x1f, 0xf0, 0x55, 0xd7, + 0xb8, 0x13, 0xb8, 0x10, 0x7c, 0xe0, 0xe6, 0x5b, + 0x7e, 0x33, 0xb1, 0x91, 0xf5, 0x8f, 0xfd, 0xf3, + 0x80, 0x20, 0x7e, 0xaf, 0x06, 0x96, 0xe3, 0xf2, + 0xb9, 0xad, 0xe3, 0xbc, 0xa5, 0x3a, 0xb7, 0xf1, + 0x4f, 0xef, 0x08, 0xf9, 0x51, 0xff, 0x00, 0x05, + 0x78, 0x77, 0xff, 0x00, 0xaa, 0x31, 0x79, 0xad, + 0xff, 0x00, 0xa2, 0xd5, 0x7e, 0xe0, 0xdc, 0xf0, + 0x20, 0xa2, 0x75, 0x6f, 0xe2, 0x9f, 0xde, 0x11, + 0xf2, 0xa3, 0xfe, 0x0a, 0x75, 0x6f, 0xe2, 0x9f, + 0xde, 0x11, 0xf2, 0xa3, 0xfe, 0x0a, 0xbd, 0xf7, + 0x02, 0x77, 0x02, 0x0a, 0x27, 0x56, 0xfe, 0x29, + 0xfd, 0xe1, 0x1f, 0x2a, 0x3f, 0xe0, 0xa7, 0x56, + 0xfe, 0x29, 0xfd, 0xe1, 0x1f, 0x2a, 0x3f, 0xe0, + 0xab, 0xdd, 0x3b, 0x01, 0x29, 0xda, 0x41, 0x44, + 0xea, 0xdf, 0xc5, 0x3f, 0xbc, 0x23, 0xe5, 0x47, + 0xfc, 0x14, 0xea, 0xdf, 0xc5, 0x3f, 0xbc, 0x23, + 0xe5, 0x47, 0xfc, 0x15, 0x7b, 0xa1, 0xd1, 0xa0, + 0x25, 0x3b, 0x5c, 0x08, 0x28, 0x9d, 0x5b, 0xf8, + 0xa7, 0xf7, 0x84, 0x7c, 0xa8, 0xff, 0x00, 0x82, + 0x9d, 0x5b, 0xf8, 0xa7, 0xf7, 0x84, 0x7c, 0xa8, + 0xff, 0x00, 0x82, 0xaf, 0x74, 0xd3, 0x4a, 0x77, + 0x68, 0x56, 0x3b, 0x81, 0x05, 0x17, 0xab, 0x7f, + 0x14, 0xfe, 0xf0, 0x8f, 0x95, 0x1f, 0xf0, 0x53, + 0xab, 0x7f, 0x14, 0xfe, 0xf0, 0x8f, 0x95, 0x1f, + 0xf0, 0x55, 0xeb, 0x46, 0xed, 0x07, 0x6d, 0x66, + 0x9d, 0x80, 0x82, 0x89, 0xd5, 0xbf, 0x8a, 0x7f, + 0x78, 0x47, 0xca, 0x8f, 0xf8, 0x29, 0xd5, 0xbf, + 0x8a, 0x7f, 0x78, 0x47, 0xca, 0x8f, 0xf8, 0x2a, + 0xf7, 0xdc, 0x09, 0xdc, 0x08, 0x3e, 0x6f, 0x9b, + 0xcb, 0xf8, 0x8d, 0x93, 0xd9, 0x9b, 0xdb, 0xdc, + 0xc0, 0x08, 0x43, 0x9a, 0xcf, 0x10, 0xc6, 0xe3, + 0x57, 0x6a, 0xd1, 0xcd, 0x05, 0xd1, 0x67, 0x6f, + 0xf8, 0x9b, 0x79, 0x6b, 0x0d, 0xdc, 0x19, 0x83, + 0x79, 0xab, 0x86, 0x36, 0x58, 0xf1, 0x3a, 0x30, + 0x70, 0xbc, 0x62, 0x15, 0x1c, 0xca, 0x96, 0xfc, + 0x49, 0xff, 0x00, 0x4c, 0x11, 0xff, 0x00, 0xf1, + 0x10, 0xf8, 0x4a, 0x99, 0xd9, 0xc1, 0xff, 0x00, + 0xd7, 0xb2, 0xcf, 0xfc, 0x48, 0x7e, 0xa0, 0xe3, + 0x41, 0x55, 0xea, 0xdf, 0xc5, 0x3f, 0xbc, 0x23, + 0xe5, 0x47, 0xfc, 0x14, 0xea, 0xdf, 0xc5, 0x3f, + 0xbc, 0x23, 0xe5, 0x47, 0xfc, 0x15, 0x7b, 0xee, + 0x04, 0xa7, 0x60, 0x70, 0x20, 0xa2, 0x75, 0x6f, + 0xe2, 0x9f, 0xde, 0x11, 0xf2, 0xa3, 0xfe, 0x0a, + 0x75, 0x6f, 0xe2, 0x9f, 0xde, 0x11, 0xf2, 0xa3, + 0xfe, 0x0a, 0xbd, 0xd3, 0xb0, 0x12, 0x9d, 0x8e, + 0xf2, 0x0a, 0x27, 0x56, 0xfe, 0x29, 0xfd, 0xe1, + 0x1f, 0x2a, 0x3f, 0xe0, 0xa7, 0x56, 0xfe, 0x29, + 0xfd, 0xe1, 0x1f, 0x2a, 0x3f, 0xe0, 0xab, 0xd7, + 0x70, 0x76, 0x53, 0x80, 0xf6, 0x90, 0x51, 0x7a, + 0xb7, 0xf1, 0x4f, 0xef, 0x08, 0xf9, 0x51, 0xff, + 0x00, 0x05, 0x3a, 0xb7, 0xf1, 0x4f, 0xef, 0x08, + 0xf9, 0x51, 0xff, 0x00, 0x05, 0x5e, 0xe9, 0xda, + 0x4a, 0x76, 0x07, 0x02, 0x0a, 0x27, 0x56, 0xfe, + 0x29, 0xfd, 0xe1, 0x1f, 0x2a, 0x3f, 0xe0, 0xa7, + 0x56, 0xfe, 0x29, 0xfd, 0xe1, 0x1f, 0x2a, 0x3f, + 0xe0, 0xab, 0xdd, 0x3b, 0x14, 0xed, 0xac, 0x77, + 0x02, 0x0a, 0x2f, 0x56, 0xfe, 0x29, 0xfd, 0xe1, + 0x1f, 0x2a, 0x3f, 0xe0, 0xa7, 0x56, 0xfe, 0x29, + 0xfd, 0xe1, 0x1f, 0x2a, 0x3f, 0xe0, 0xab, 0xd8, + 0x15, 0xdc, 0x1d, 0xc4, 0xe0, 0x41, 0x44, 0xea, + 0xdf, 0xc5, 0x2f, 0xbc, 0x23, 0xe5, 0x47, 0xfc, + 0x15, 0xd9, 0xf8, 0x7b, 0x9c, 0x66, 0xf9, 0x9f, + 0x58, 0x37, 0x33, 0xb8, 0x75, 0xc3, 0xa0, 0x2c, + 0x0c, 0xc4, 0x1a, 0x30, 0xd6, 0xb5, 0xf2, 0x1a, + 0xd5, 0x6f, 0x03, 0x4f, 0xe5, 0xbe, 0xa8, 0xdf, + 0x86, 0x3f, 0xb5, 0xcd, 0xfe, 0xd1, 0x9e, 0x17, + 0x20, 0xbe, 0x28, 0x9c, 0xe7, 0xde, 0x6c, 0xbc, + 0xff, 0x00, 0x94, 0x29, 0x65, 0x13, 0x9c, 0xfb, + 0xcd, 0x97, 0x9f, 0xf2, 0x84, 0x18, 0xc9, 0x7d, + 0xea, 0xf7, 0xcf, 0x3f, 0x58, 0xa9, 0x75, 0x11, + 0x92, 0xfb, 0xd5, 0xef, 0x9e, 0x7e, 0xb1, 0x52, + 0xe8, 0x08, 0x88, 0x83, 0x09, 0x4a, 0x0a, 0x2c, + 0xa2, 0x0f, 0x8e, 0x7e, 0x33, 0x7f, 0xa8, 0x6d, + 0x7f, 0xf1, 0x47, 0xd6, 0x72, 0xf5, 0xf8, 0x30, + 0x7f, 0xcf, 0x2f, 0x69, 0xd1, 0x7f, 0xbe, 0x17, + 0x9f, 0xc6, 0x7f, 0xf5, 0x0d, 0xa7, 0xfe, 0x28, + 0xfa, 0xce, 0x59, 0xfc, 0x17, 0xfe, 0x79, 0x7b, + 0xff, 0x00, 0x8b, 0xfd, 0xf0, 0x83, 0xec, 0x2b, + 0x22, 0xb5, 0xee, 0xa2, 0x0d, 0x61, 0x07, 0xe6, + 0xfd, 0xa6, 0xff, 0x00, 0x52, 0xe6, 0x7f, 0xf9, + 0x73, 0x7d, 0x72, 0xb5, 0xe6, 0x59, 0x71, 0xb5, + 0xb5, 0xcb, 0xee, 0x47, 0x91, 0x7b, 0x6f, 0xce, + 0x8f, 0x39, 0xaf, 0x74, 0x6e, 0xf0, 0x2d, 0x9b, + 0x4f, 0xfe, 0xa4, 0xcd, 0x3f, 0xf2, 0xe6, 0xfa, + 0xe5, 0x58, 0xf3, 0xec, 0xbb, 0x9c, 0xfc, 0x38, + 0xd9, 0xfc, 0xc8, 0x0f, 0x77, 0x92, 0x58, 0x64, + 0x3b, 0xb8, 0x64, 0x73, 0x9c, 0xde, 0xfb, 0x0a, + 0x0b, 0xaf, 0xe1, 0x16, 0x65, 0xed, 0x5b, 0x32, + 0xeb, 0x37, 0x12, 0x5f, 0x61, 0x3b, 0x99, 0xa7, + 0xe6, 0xc9, 0xe3, 0xb6, 0x9d, 0x8d, 0x69, 0xf8, + 0xb9, 0x99, 0x8b, 0x5d, 0x96, 0x6d, 0xab, 0x0d, + 0x1f, 0x98, 0x4c, 0xd6, 0x53, 0x7d, 0x8c, 0xfd, + 0x63, 0xbb, 0xe1, 0xaa, 0xa9, 0xf8, 0x37, 0x98, + 0xf3, 0x19, 0xed, 0xce, 0x5e, 0xe3, 0x46, 0xde, + 0x43, 0x89, 0xba, 0x74, 0x63, 0x88, 0xd7, 0xc0, + 0x4a, 0xf5, 0xf8, 0xc9, 0x98, 0x89, 0xb3, 0xbb, + 0x4c, 0xb8, 0x1f, 0x16, 0xce, 0x0c, 0x4e, 0x1b, + 0x98, 0xa5, 0x35, 0xfa, 0xa0, 0x20, 0xa5, 0xe5, + 0xf9, 0x71, 0xba, 0xb6, 0xbf, 0xb9, 0xa1, 0xc1, + 0x63, 0x00, 0x98, 0x9d, 0xca, 0xba, 0x48, 0xe2, + 0x03, 0xe9, 0x93, 0xdc, 0x5b, 0x36, 0x63, 0xfd, + 0x49, 0x95, 0x7f, 0xe5, 0xc1, 0xff, 0x00, 0x51, + 0xaa, 0xc7, 0x90, 0x65, 0xdc, 0xd7, 0xe1, 0xc6, + 0xd0, 0xe6, 0x4e, 0x14, 0x33, 0xbe, 0xde, 0x16, + 0x79, 0xb1, 0xcd, 0x19, 0x77, 0xd6, 0x55, 0xcd, + 0x98, 0xff, 0x00, 0x52, 0x65, 0x5f, 0xf9, 0x70, + 0x7f, 0xd4, 0x6a, 0x0f, 0xd2, 0x3b, 0xab, 0x4d, + 0xdd, 0xdd, 0xbd, 0x9d, 0xac, 0xb7, 0x57, 0x2f, + 0xe6, 0xe0, 0x85, 0xa5, 0xef, 0x79, 0xd1, 0x46, + 0x81, 0x55, 0xb8, 0xee, 0xaf, 0x93, 0x7e, 0x2b, + 0xed, 0x77, 0xb4, 0x4c, 0x36, 0x76, 0xc9, 0xff, + 0x00, 0xa9, 0x84, 0x87, 0x5f, 0x3d, 0xa7, 0x43, + 0xa4, 0x1e, 0x4c, 0x5f, 0xd9, 0xd6, 0xee, 0xcf, + 0x69, 0x05, 0x4f, 0x69, 0xb3, 0xcb, 0xdd, 0xac, + 0xcf, 0xcc, 0xed, 0x6b, 0x9c, 0x25, 0x70, 0x86, + 0xc6, 0xdc, 0x69, 0xc2, 0xca, 0xd1, 0x83, 0xb6, + 0xed, 0xd5, 0x0d, 0x75, 0x04, 0x96, 0xd3, 0xcb, + 0x6f, 0x28, 0xa4, 0x90, 0xb9, 0xd1, 0xbc, 0x6f, + 0x39, 0xa7, 0x0b, 0x87, 0x08, 0x5f, 0x4c, 0xfc, + 0x25, 0xd9, 0x20, 0xe2, 0x36, 0x92, 0xf5, 0x95, + 0x00, 0x96, 0x58, 0x31, 0xc3, 0x74, 0x79, 0x73, + 0x7c, 0x81, 0x7c, 0xeb, 0x3a, 0x24, 0xe6, 0xf7, + 0xe3, 0x7a, 0xe6, 0x6a, 0x7e, 0xf1, 0xc8, 0x3e, + 0xf3, 0xb0, 0x7f, 0xe8, 0xec, 0xa7, 0xff, 0x00, + 0x1c, 0x7d, 0x67, 0x2e, 0x7f, 0xc4, 0x5c, 0xea, + 0x4c, 0x9f, 0x65, 0xee, 0x65, 0x85, 0xd8, 0x6e, + 0x2e, 0x48, 0xb6, 0x80, 0xee, 0x83, 0x27, 0x96, + 0x79, 0x00, 0xae, 0x8d, 0x83, 0xff, 0x00, 0x47, + 0x65, 0x3f, 0xf8, 0xe3, 0xeb, 0x39, 0x54, 0xbf, + 0x1b, 0x26, 0x73, 0x6c, 0xb2, 0xa8, 0x41, 0xf1, + 0x5f, 0x2c, 0xcf, 0x70, 0xec, 0xb5, 0xb1, 0xb4, + 0x7d, 0x62, 0x83, 0xe5, 0xd6, 0x56, 0x93, 0x5f, + 0x5e, 0x41, 0x67, 0x08, 0xac, 0xb7, 0x32, 0x36, + 0x26, 0x57, 0xe7, 0x3c, 0xe1, 0x0b, 0xf4, 0x3e, + 0xcf, 0x6c, 0xe6, 0x5f, 0xb3, 0xd9, 0x74, 0x76, + 0x36, 0x4c, 0x00, 0x80, 0x0c, 0xf3, 0x7e, 0x7c, + 0x92, 0x53, 0x4b, 0x9c, 0xe1, 0xde, 0x0b, 0xe2, + 0xdf, 0x87, 0x11, 0x09, 0xb6, 0xd3, 0x2d, 0x63, + 0x80, 0x34, 0x7b, 0xe4, 0x1d, 0xb6, 0x46, 0xf7, + 0x8e, 0xf8, 0x5f, 0x7e, 0xed, 0x20, 0xc1, 0x68, + 0x70, 0x2d, 0x70, 0x04, 0x3b, 0x58, 0x3a, 0x8f, + 0x6e, 0xab, 0xe4, 0x7b, 0x71, 0xf8, 0x75, 0x7c, + 0x73, 0xb6, 0x4b, 0xb3, 0xb6, 0x4e, 0x96, 0xd6, + 0xf1, 0xb8, 0xdf, 0x1b, 0x08, 0x6b, 0x23, 0x78, + 0x3e, 0x30, 0xab, 0x88, 0x00, 0x15, 0xf5, 0xd5, + 0x8a, 0x0a, 0xd5, 0x05, 0x03, 0xf0, 0xe7, 0x63, + 0x36, 0x8b, 0x67, 0x6f, 0x67, 0xb8, 0xbf, 0x7c, + 0x2d, 0xb6, 0xb9, 0x88, 0x31, 0xf0, 0x31, 0xe5, + 0xee, 0xc4, 0xd2, 0x0b, 0x5c, 0x48, 0x18, 0x74, + 0x0a, 0x8d, 0x7b, 0xaa, 0xd3, 0xb5, 0x59, 0xa5, + 0xc6, 0x51, 0xb3, 0xd7, 0xb9, 0x95, 0xb0, 0x69, + 0x9e, 0xde, 0x30, 0xe8, 0xc3, 0xc5, 0x5b, 0x52, + 0xe0, 0xdd, 0x3c, 0x2a, 0x5a, 0x9d, 0xd5, 0xc3, + 0x9e, 0xe5, 0x31, 0x67, 0x59, 0x55, 0xc6, 0x57, + 0x34, 0x8e, 0x8a, 0x3b, 0x96, 0xe1, 0x74, 0x8d, + 0xa1, 0x70, 0x00, 0x83, 0xa2, 0xba, 0x37, 0x10, + 0x7c, 0x03, 0x30, 0xcd, 0x73, 0xcd, 0xa5, 0xbf, + 0x6b, 0xee, 0xe5, 0x96, 0xf6, 0xee, 0x53, 0x86, + 0x18, 0x9a, 0x34, 0x0a, 0xee, 0x32, 0x31, 0xa0, + 0x77, 0x17, 0x3e, 0x75, 0x93, 0xde, 0x64, 0xb7, + 0xc6, 0xc2, 0xf9, 0xa1, 0x97, 0x0d, 0x63, 0x1e, + 0xf6, 0x03, 0x5c, 0x38, 0xda, 0x1f, 0x84, 0x9d, + 0xf1, 0x5d, 0x2b, 0xef, 0x9b, 0x3f, 0xb2, 0x39, + 0x16, 0xcf, 0x47, 0x4c, 0xbe, 0xdc, 0x09, 0x8e, + 0x87, 0xdc, 0x48, 0x43, 0xe5, 0x3a, 0x37, 0x5d, + 0xb9, 0x5e, 0xc2, 0xf9, 0x17, 0xe2, 0xa7, 0xfa, + 0xd6, 0xf0, 0x7f, 0x52, 0x1f, 0xfa, 0x6d, 0x41, + 0x73, 0xfc, 0x16, 0xfe, 0x45, 0x7f, 0xff, 0x00, + 0x95, 0xfd, 0xc8, 0xd7, 0xd1, 0x02, 0xf9, 0xdf, + 0xe0, 0xb7, 0xf2, 0x2b, 0xff, 0x00, 0xfc, 0xaf, + 0xee, 0x46, 0xbe, 0x88, 0x83, 0xe3, 0xfb, 0x55, + 0xf8, 0x7d, 0xb6, 0x19, 0x96, 0x79, 0x7d, 0x99, + 0x32, 0x08, 0xe6, 0x8a, 0xe2, 0x57, 0x3e, 0x3c, + 0x32, 0xb6, 0xb8, 0x7f, 0x34, 0x78, 0xd4, 0xdc, + 0x0a, 0xe9, 0xf8, 0x73, 0xb3, 0x93, 0xe4, 0x79, + 0x16, 0x1b, 0xd8, 0x3d, 0x9f, 0x31, 0x9e, 0x47, + 0x3e, 0xe0, 0x12, 0xd7, 0x3b, 0x08, 0x38, 0x62, + 0x15, 0x61, 0x70, 0xa5, 0x3b, 0x2a, 0xd7, 0x44, + 0x41, 0x5d, 0xfc, 0x40, 0xb4, 0xb5, 0xb8, 0xd8, + 0xfc, 0xcb, 0xda, 0x40, 0x3c, 0xcc, 0x46, 0x58, + 0x9c, 0xed, 0x34, 0x91, 0xbe, 0x4d, 0x3b, 0x7a, + 0x97, 0xc1, 0xec, 0x5c, 0xf6, 0xdf, 0x5b, 0xbe, + 0x32, 0x44, 0x8d, 0x95, 0x85, 0xa7, 0xb3, 0x88, + 0x2f, 0xa1, 0xfe, 0x29, 0x6d, 0xb4, 0x37, 0x6d, + 0x76, 0xcf, 0x65, 0xaf, 0x12, 0x46, 0xc7, 0x03, + 0x7d, 0x3b, 0x75, 0x17, 0x33, 0x54, 0x4d, 0xdf, + 0xa1, 0xd6, 0xab, 0x9f, 0x87, 0x7b, 0x3d, 0x26, + 0x73, 0xb4, 0x70, 0x39, 0xec, 0x26, 0xd2, 0xc5, + 0xc2, 0x7b, 0x87, 0x53, 0x47, 0x8a, 0x6a, 0xc6, + 0x76, 0xdc, 0xe4, 0x1f, 0x4d, 0xfc, 0x52, 0xbb, + 0x96, 0xdf, 0x63, 0xae, 0x43, 0x4e, 0x17, 0x5c, + 0xbe, 0x28, 0x9d, 0x4d, 0xe2, 0xe0, 0xe7, 0x8e, + 0xed, 0x28, 0xbe, 0x45, 0xb2, 0x56, 0x11, 0x66, + 0x5b, 0x4b, 0x96, 0xd9, 0xce, 0xdc, 0x51, 0x4d, + 0x3b, 0x39, 0xc1, 0xbe, 0xd1, 0xe3, 0x11, 0xdd, + 0xa2, 0xfb, 0x1f, 0xe2, 0x4e, 0x5f, 0x2d, 0xfe, + 0xc8, 0x5e, 0xb6, 0x31, 0x8a, 0x58, 0x30, 0x5c, + 0x01, 0xbe, 0x23, 0x75, 0x5d, 0xf4, 0x4a, 0xf8, + 0xbe, 0xce, 0xe6, 0x4c, 0xca, 0x73, 0xdb, 0x0c, + 0xc5, 0xe2, 0xb1, 0xdb, 0x4e, 0xc7, 0xbc, 0x0d, + 0x65, 0xb5, 0xa3, 0xbb, 0xc8, 0x3f, 0x47, 0x86, + 0xb4, 0x00, 0xd0, 0x00, 0x68, 0x18, 0x43, 0x77, + 0x00, 0xde, 0xa2, 0xf8, 0x4f, 0xe2, 0x66, 0x4f, + 0x6f, 0x94, 0xed, 0x44, 0xad, 0xb6, 0x60, 0x8e, + 0x0b, 0xb8, 0xdb, 0x72, 0xc6, 0x0d, 0x40, 0xb8, + 0x96, 0xba, 0x9d, 0x8c, 0x4d, 0x2b, 0xee, 0x16, + 0xf7, 0x96, 0xb7, 0x36, 0xed, 0xba, 0xb7, 0x95, + 0x92, 0xdb, 0xc8, 0x31, 0x32, 0x50, 0xe1, 0x84, + 0xb4, 0xee, 0xd5, 0x7c, 0x3b, 0xf1, 0x2f, 0x3a, + 0xb6, 0xcd, 0xf6, 0xa2, 0x47, 0xda, 0x3c, 0x4b, + 0x05, 0xac, 0x6d, 0xb7, 0x64, 0x83, 0x53, 0x8b, + 0x6a, 0xe7, 0x11, 0xfd, 0xa7, 0x14, 0x16, 0x8f, + 0xc1, 0x7c, 0xcd, 0xc5, 0xb9, 0x8e, 0x56, 0xe2, + 0x4e, 0x12, 0xcb, 0x98, 0xdb, 0xbd, 0x5a, 0xc7, + 0x25, 0x3e, 0x82, 0x9e, 0xda, 0x5f, 0xc4, 0x88, + 0x76, 0x73, 0x32, 0x75, 0x85, 0xe6, 0x59, 0x33, + 0xc1, 0x68, 0x7c, 0x33, 0xb2, 0x46, 0x60, 0x91, + 0xa7, 0xf3, 0x9b, 0xa3, 0x7f, 0x42, 0xa4, 0xfe, + 0x0e, 0x48, 0x59, 0xb5, 0x13, 0x30, 0x6a, 0x92, + 0xd2, 0x40, 0x7b, 0x8e, 0x63, 0xbe, 0x45, 0xf4, + 0x5d, 0xb6, 0xd9, 0x48, 0xb6, 0x97, 0x28, 0x74, + 0x0d, 0xa3, 0x6f, 0xad, 0xeb, 0x25, 0x9c, 0xa7, + 0xe7, 0x53, 0x4b, 0x0f, 0x61, 0xfe, 0x14, 0x1c, + 0x1b, 0x33, 0xf8, 0x9b, 0x95, 0x6d, 0x06, 0x68, + 0xcc, 0xb1, 0xb6, 0xf2, 0x59, 0xcb, 0x2b, 0x49, + 0x89, 0xd2, 0xb9, 0xa4, 0x39, 0xc3, 0x4e, 0x01, + 0x4a, 0x69, 0x23, 0x52, 0xb7, 0x4d, 0x3c, 0x50, + 0x42, 0xf9, 0xe7, 0x78, 0x8e, 0x28, 0xda, 0x5e, + 0xf7, 0x9d, 0x41, 0xad, 0x15, 0x27, 0xbc, 0xbf, + 0x34, 0x34, 0xdd, 0x58, 0x5d, 0xb5, 0xcd, 0x2e, + 0x82, 0xee, 0xda, 0x4a, 0xe9, 0xd0, 0xe6, 0x3d, + 0x87, 0xc2, 0x08, 0x57, 0x5d, 0xaf, 0xfc, 0x47, + 0x76, 0x77, 0x90, 0x5a, 0x65, 0xd6, 0xc0, 0xc5, + 0x2d, 0xc3, 0x03, 0xb3, 0x42, 0x34, 0x02, 0xf6, + 0xf8, 0xb8, 0x1b, 0xd8, 0x71, 0x18, 0x90, 0x58, + 0xa5, 0xfc, 0x68, 0xca, 0x5b, 0x23, 0x9b, 0x1e, + 0x5d, 0x3c, 0x8d, 0x04, 0x86, 0x3f, 0x1b, 0x46, + 0x20, 0x35, 0x1a, 0x53, 0x45, 0x42, 0xb6, 0xec, + 0xce, 0x7e, 0xed, 0xa0, 0xcb, 0x86, 0x62, 0x2c, + 0xe4, 0xb2, 0x86, 0x47, 0x11, 0x08, 0x95, 0xc1, + 0xc6, 0x46, 0x8d, 0x6f, 0x18, 0x75, 0x0a, 0xaf, + 0x8a, 0x6c, 0x46, 0xca, 0xcd, 0xb4, 0xb9, 0xbb, + 0x60, 0x20, 0xb6, 0xca, 0xde, 0x92, 0x5e, 0x49, + 0xbc, 0xca, 0xf9, 0x03, 0xfa, 0xce, 0xd4, 0x17, + 0xdf, 0xa0, 0x82, 0x1b, 0x78, 0x59, 0x04, 0x0c, + 0x11, 0xc5, 0x13, 0x43, 0x18, 0xc0, 0x28, 0x03, + 0x40, 0xa0, 0x68, 0xec, 0x20, 0xd8, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0b, + 0x8f, 0x37, 0xfe, 0x57, 0x7b, 0xf6, 0x12, 0x7d, + 0x47, 0x2e, 0xc5, 0xc7, 0x9b, 0xff, 0x00, 0x2b, + 0xbd, 0xfb, 0x09, 0x3e, 0xa3, 0x90, 0x55, 0x3f, + 0x0d, 0x7f, 0x91, 0xcf, 0xf6, 0xe7, 0xea, 0xab, + 0x62, 0xa9, 0xfe, 0x1a, 0xff, 0x00, 0x23, 0x9f, + 0xed, 0xcf, 0xd5, 0x56, 0xc4, 0x04, 0x44, 0x40, + 0x42, 0x2a, 0x0f, 0x67, 0x46, 0xff, 0x00, 0x79, + 0x11, 0x07, 0xcd, 0x76, 0x9b, 0x62, 0xa3, 0xca, + 0x2c, 0x24, 0xcc, 0x5b, 0x76, 0xe9, 0x89, 0x94, + 0x0c, 0x0e, 0x65, 0x07, 0x8e, 0x4e, 0xef, 0x61, + 0x7a, 0xd9, 0x9d, 0x8a, 0x66, 0x6b, 0x97, 0x43, + 0x9a, 0x1b, 0xb7, 0x42, 0x79, 0xd7, 0x7e, 0xaf, + 0x03, 0x48, 0xfd, 0x5b, 0xb4, 0x69, 0x3b, 0x86, + 0x8a, 0xc7, 0xf8, 0x85, 0xfe, 0x9c, 0x7d, 0x34, + 0x7e, 0xb6, 0x3f, 0x0a, 0x8c, 0xca, 0x2e, 0x24, + 0xb7, 0xfc, 0x36, 0xb8, 0x99, 0x86, 0x8e, 0xfd, + 0x73, 0x6a, 0x3f, 0xac, 0xf0, 0xdf, 0x95, 0x04, + 0xc5, 0xde, 0xdd, 0xec, 0xe5, 0xbd, 0xc1, 0x87, + 0x9e, 0x7c, 0x94, 0x24, 0x17, 0xc6, 0xca, 0xb0, + 0x69, 0xdf, 0xa8, 0xd5, 0xd8, 0x52, 0x4d, 0xce, + 0xf2, 0xc7, 0xe5, 0xa7, 0x35, 0x64, 0xc1, 0xf6, + 0x6d, 0x18, 0x8c, 0x8d, 0xd3, 0x4a, 0x10, 0x08, + 0x23, 0x7f, 0x4a, 0xf9, 0xce, 0xcf, 0x66, 0x7b, + 0x3b, 0x67, 0x94, 0xdd, 0x5b, 0xe6, 0x56, 0xcf, + 0x9e, 0xea, 0xe0, 0x90, 0xd9, 0x04, 0x6d, 0x7e, + 0x11, 0x4a, 0x34, 0x35, 0xee, 0x70, 0xc3, 0xd9, + 0xa2, 0xf7, 0x90, 0x4c, 0xff, 0x00, 0x85, 0xb3, + 0xfb, 0x67, 0x57, 0x03, 0x19, 0x1b, 0xc0, 0xdc, + 0xab, 0xcd, 0x1d, 0x4e, 0x4a, 0x0b, 0x9c, 0x9b, + 0x6f, 0xb3, 0x91, 0xdb, 0x36, 0xe3, 0xda, 0x1c, + 0xf6, 0xbd, 0xc5, 0xad, 0x63, 0x18, 0xe2, 0xf2, + 0x5b, 0xe5, 0x78, 0xa6, 0x9a, 0x17, 0xb3, 0xb6, + 0x3b, 0x3e, 0x2c, 0x05, 0xff, 0x00, 0xb4, 0x56, + 0x27, 0x38, 0xc6, 0xd6, 0x61, 0x3c, 0xe1, 0x70, + 0xd3, 0x87, 0x07, 0x69, 0x55, 0xb6, 0x47, 0x26, + 0xcb, 0x6e, 0xb6, 0x6f, 0x34, 0xba, 0xba, 0xb7, + 0x6c, 0xb3, 0xb7, 0x1b, 0x19, 0x23, 0x86, 0x96, + 0x86, 0xb3, 0x10, 0xc3, 0xbd, 0xa5, 0x78, 0xfc, + 0x3c, 0xca, 0xac, 0x33, 0x07, 0x5f, 0xba, 0xf6, + 0x06, 0xce, 0x23, 0x63, 0x1a, 0xc0, 0xfd, 0x20, + 0x63, 0xc5, 0x88, 0xd3, 0x7f, 0xc5, 0x08, 0x2e, + 0xd9, 0x4e, 0xd0, 0x65, 0x59, 0xc4, 0x52, 0xcb, + 0x63, 0x23, 0x8f, 0x31, 0xa6, 0x56, 0x3d, 0xb8, + 0x5e, 0xd1, 0xbe, 0x5b, 0xa5, 0x71, 0x0d, 0xb8, + 0xd9, 0xa3, 0x04, 0x97, 0x0d, 0xba, 0x25, 0x91, + 0x61, 0xc4, 0xdc, 0x04, 0x3c, 0x97, 0xd7, 0x08, + 0x68, 0x3a, 0xf5, 0x2a, 0xa6, 0xc0, 0x8e, 0x6f, + 0x39, 0xcc, 0xa2, 0x66, 0x86, 0x0b, 0x69, 0x80, + 0x1d, 0x86, 0xc8, 0xda, 0x2d, 0x7f, 0x87, 0x99, + 0x65, 0x96, 0x61, 0x7b, 0x3b, 0xef, 0x22, 0x6c, + 0xcc, 0xb7, 0x88, 0x16, 0x31, 0xfa, 0x5a, 0x1c, + 0xf3, 0xae, 0x9d, 0xa6, 0xa0, 0xbe, 0x65, 0x1b, + 0x41, 0x95, 0xe7, 0x2d, 0x90, 0xd8, 0xc8, 0x4b, + 0xe2, 0xfd, 0xa4, 0x4f, 0x18, 0x5e, 0xda, 0xea, + 0x34, 0xd3, 0xa1, 0x73, 0xe6, 0xbb, 0x5d, 0x91, + 0xe5, 0x53, 0x9b, 0x6b, 0x99, 0x9c, 0xe9, 0xdb, + 0x4c, 0x71, 0xc4, 0xdc, 0x65, 0x84, 0xea, 0xc4, + 0x6a, 0x07, 0x73, 0x5a, 0xa7, 0xec, 0xf3, 0x5b, + 0x95, 0xed, 0xcd, 0xcd, 0xa4, 0x1e, 0x2c, 0x2c, + 0xf6, 0x88, 0xda, 0xd1, 0xab, 0x0b, 0x58, 0xe9, + 0x40, 0xfa, 0x2b, 0x87, 0x66, 0xb3, 0x7c, 0xa2, + 0xdb, 0x33, 0xb9, 0xbf, 0xce, 0x60, 0x75, 0xdf, + 0x3b, 0x53, 0x18, 0xe6, 0xc4, 0xa0, 0x39, 0xee, + 0x35, 0x25, 0xae, 0xa0, 0xae, 0xf1, 0x41, 0xf4, + 0x8c, 0xaf, 0x3c, 0xcb, 0x33, 0x68, 0x5f, 0x35, + 0x8c, 0xb8, 0xdb, 0x1f, 0x96, 0xc7, 0x02, 0xd7, + 0xb6, 0xba, 0x45, 0x5a, 0xb8, 0xdb, 0xb6, 0x7b, + 0x3a, 0xe8, 0x66, 0x9c, 0x5c, 0x9c, 0x10, 0x53, + 0x1d, 0x58, 0xe0, 0x6a, 0xea, 0x80, 0xd6, 0x82, + 0x34, 0x9a, 0xaa, 0x86, 0xc8, 0x5c, 0xc4, 0xdd, + 0xa8, 0xba, 0xf6, 0x56, 0xba, 0x3b, 0x2b, 0xa8, + 0xe7, 0x0d, 0x8d, 0xe3, 0x0f, 0x89, 0x87, 0x1b, + 0x41, 0xd3, 0xb8, 0xb9, 0xb6, 0x2b, 0x23, 0xb2, + 0xce, 0x33, 0x39, 0xd9, 0x7b, 0x57, 0xc5, 0x03, + 0x31, 0x96, 0x37, 0x45, 0x49, 0x76, 0x16, 0x82, + 0x77, 0x82, 0x0b, 0xfc, 0xdb, 0x4d, 0x93, 0x5b, + 0xe5, 0xb0, 0x66, 0x73, 0xca, 0xe8, 0xa0, 0xba, + 0x05, 0xd0, 0x30, 0xb7, 0xf5, 0x8e, 0xa6, 0xe6, + 0x15, 0xcd, 0x97, 0xed, 0xae, 0xcf, 0xdf, 0xdc, + 0x36, 0xda, 0x39, 0x9f, 0x1c, 0x8f, 0x38, 0x59, + 0xce, 0xb0, 0xb4, 0x38, 0xef, 0x02, 0x31, 0x6e, + 0xa8, 0xcd, 0xa4, 0xc8, 0x36, 0x76, 0xdd, 0xd6, + 0x32, 0x5f, 0xde, 0xfb, 0x15, 0xa5, 0x9c, 0x6d, + 0x86, 0x1b, 0x3a, 0x63, 0xc6, 0xd6, 0xbb, 0x16, + 0xad, 0x2e, 0xd2, 0xab, 0x1b, 0x4f, 0x99, 0xe5, + 0x59, 0x8e, 0x65, 0x6f, 0x3e, 0x53, 0x6d, 0xec, + 0xd0, 0x30, 0x35, 0xa5, 0xd8, 0x04, 0x61, 0xee, + 0x6b, 0xab, 0x50, 0xd6, 0xe8, 0xd1, 0x5e, 0xda, + 0x09, 0x8f, 0xc4, 0x5c, 0xde, 0x37, 0xcf, 0x05, + 0x95, 0xa4, 0xef, 0x6d, 0xc5, 0xa3, 0xa4, 0x17, + 0x0d, 0x61, 0x73, 0x28, 0x5c, 0x19, 0x87, 0x7a, + 0xaa, 0x7b, 0x2d, 0xda, 0xbc, 0x92, 0x3c, 0x96, + 0x09, 0xe5, 0xb8, 0x38, 0x61, 0xe6, 0xed, 0xe6, + 0x71, 0x6b, 0x89, 0xe7, 0x70, 0xd4, 0x83, 0xaf, + 0x79, 0x40, 0x7e, 0x24, 0xdb, 0x5b, 0xc7, 0x1d, + 0x85, 0xcc, 0x71, 0xb5, 0x93, 0xcf, 0x8c, 0xcd, + 0x2b, 0x45, 0x1c, 0xfa, 0x36, 0x2a, 0x62, 0x3d, + 0x8a, 0xaf, 0x7b, 0x57, 0x67, 0x69, 0x6f, 0xb1, + 0xd9, 0x7b, 0xa0, 0x89, 0xb1, 0x3a, 0x59, 0x21, + 0x74, 0x85, 0xa3, 0x4b, 0x9d, 0xcd, 0x3f, 0x49, + 0xec, 0xa0, 0xb7, 0x9c, 0xeb, 0x2e, 0x19, 0x58, + 0xcd, 0x8c, 0x84, 0x59, 0x16, 0x87, 0x07, 0xe1, + 0x35, 0xa1, 0x34, 0xf2, 0x75, 0xad, 0x2c, 0xda, + 0x6c, 0x99, 0xf9, 0x6b, 0xf3, 0x56, 0xcc, 0x7d, + 0x8a, 0x37, 0xf3, 0x6e, 0x93, 0x09, 0xd0, 0xe3, + 0x4d, 0xce, 0xea, 0xaf, 0x49, 0xff, 0x00, 0xe9, + 0x93, 0x7e, 0xc5, 0xbf, 0xf5, 0x3f, 0xa5, 0x44, + 0x5b, 0x7f, 0xfa, 0x71, 0x79, 0xff, 0x00, 0x96, + 0xce, 0xf3, 0xe3, 0x1f, 0x22, 0x0b, 0x91, 0xdb, + 0x1c, 0x83, 0x05, 0xb3, 0x99, 0x3b, 0xa5, 0x37, + 0x67, 0x0c, 0x4d, 0x63, 0x0d, 0x47, 0x8d, 0x82, + 0xaf, 0xaf, 0x92, 0x2a, 0xbd, 0xe6, 0xfb, 0x57, + 0x92, 0x64, 0xf3, 0x9b, 0x6b, 0xc9, 0x89, 0xb8, + 0x1a, 0x5d, 0x14, 0x63, 0x13, 0x85, 0x75, 0x62, + 0xd4, 0x3b, 0xea, 0xb9, 0xb0, 0xfb, 0x35, 0x95, + 0x5e, 0x65, 0xd1, 0xe6, 0x97, 0x8c, 0x74, 0xd7, + 0x02, 0x57, 0x18, 0x85, 0x48, 0x0c, 0xc0, 0x46, + 0x9a, 0x6f, 0xd4, 0x15, 0x07, 0x93, 0x66, 0xf9, + 0x74, 0x3b, 0x41, 0x77, 0x98, 0x67, 0x31, 0x3a, + 0xe5, 0xaf, 0x74, 0x98, 0x18, 0x18, 0x24, 0xf1, + 0xf1, 0xf8, 0xa5, 0xcc, 0x73, 0x86, 0xa0, 0x29, + 0xa9, 0x07, 0xd1, 0xb2, 0x8c, 0xff, 0x00, 0x2b, + 0xce, 0x5a, 0xe3, 0x61, 0x36, 0x27, 0x47, 0xfb, + 0x48, 0x9e, 0x0b, 0x64, 0x6f, 0x6d, 0xbc, 0x4b, + 0x8b, 0x30, 0xdb, 0x5d, 0x9f, 0xcb, 0xee, 0x1d, + 0x6d, 0x2c, 0xce, 0x96, 0x56, 0x1a, 0x48, 0x21, + 0x6e, 0x30, 0xd2, 0x35, 0x8a, 0xd4, 0x05, 0x50, + 0xd9, 0xcb, 0x98, 0x5f, 0xb6, 0x6f, 0x76, 0x56, + 0xd7, 0x41, 0x6b, 0x77, 0xcf, 0x36, 0x26, 0x38, + 0x61, 0x2d, 0x0e, 0x61, 0x2d, 0x14, 0xa9, 0xd4, + 0xed, 0x2b, 0x9b, 0x23, 0xbc, 0xb0, 0xc8, 0xb3, + 0x3b, 0xa8, 0x36, 0x82, 0xc4, 0xcd, 0x8c, 0x16, + 0x3b, 0x1b, 0x5a, 0xe2, 0xc3, 0xac, 0xb8, 0x07, + 0xe8, 0x38, 0xb7, 0xc2, 0x0f, 0xa4, 0x65, 0x79, + 0xc6, 0x5f, 0x9b, 0x42, 0x67, 0xb0, 0x97, 0x9d, + 0x6b, 0x0e, 0x19, 0x1b, 0x4a, 0x3d, 0xa4, 0xee, + 0x39, 0xab, 0xb5, 0x55, 0xf6, 0x37, 0x2b, 0xc9, + 0xed, 0xdd, 0x71, 0x7b, 0x94, 0xdf, 0xba, 0xea, + 0x39, 0x80, 0x6b, 0xe1, 0x70, 0x0c, 0xc1, 0xa7, + 0x13, 0x6a, 0x06, 0x91, 0x4d, 0x41, 0x5a, 0x0e, + 0xb3, 0xdb, 0xaf, 0x0e, 0x94, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x14, 0x97, 0x7f, 0xfa, 0xa3, 0x17, + 0x9a, 0xdf, 0xfa, 0x2d, 0x57, 0xef, 0xe8, 0xf0, + 0x2a, 0x0b, 0xbf, 0xfd, 0x51, 0x8b, 0xcd, 0x6f, + 0xfd, 0x16, 0xab, 0xf7, 0xf4, 0x78, 0x10, 0x13, + 0x4e, 0xe6, 0xee, 0x81, 0xdb, 0x44, 0x1a, 0xc1, + 0xd6, 0x41, 0xa8, 0x41, 0x54, 0x7e, 0xd0, 0xed, + 0x06, 0x6b, 0x99, 0xdd, 0x59, 0xec, 0xfc, 0x56, + 0xed, 0xb7, 0xb0, 0x76, 0x09, 0x6e, 0x6e, 0x74, + 0x87, 0x3f, 0x4f, 0x8a, 0xd1, 0xb9, 0xa9, 0x76, + 0xec, 0xe6, 0xd0, 0xdd, 0x66, 0x33, 0xde, 0x65, + 0xb9, 0x9c, 0x0d, 0x83, 0x32, 0xb0, 0x20, 0x4a, + 0xd6, 0x1a, 0xb1, 0xcd, 0x3a, 0x31, 0x35, 0x41, + 0x58, 0xe6, 0x51, 0xec, 0x96, 0x77, 0x99, 0x58, + 0xca, 0xc7, 0x5e, 0xc3, 0x74, 0xee, 0x7e, 0x37, + 0x5a, 0xd2, 0x49, 0x19, 0xaf, 0xc4, 0x91, 0xb5, + 0xf1, 0x75, 0xae, 0xdd, 0x8d, 0x8f, 0xac, 0x73, + 0x5c, 0xcb, 0x68, 0x8b, 0x9a, 0xc1, 0x76, 0x79, + 0x98, 0xad, 0xc3, 0x81, 0x7c, 0x6d, 0x04, 0x1a, + 0xc9, 0xbc, 0x4e, 0x00, 0x83, 0xd5, 0xce, 0xd1, + 0x6d, 0x34, 0xd9, 0xbd, 0xf5, 0x86, 0x4f, 0x63, + 0x05, 0xcc, 0x36, 0x2f, 0x6b, 0x24, 0x7b, 0xdc, + 0x5a, 0x74, 0x8a, 0xee, 0x9d, 0xf5, 0x27, 0x91, + 0xdd, 0xed, 0x3d, 0xc5, 0xc4, 0x8c, 0xce, 0x6c, + 0xa1, 0xb4, 0x88, 0x36, 0xb1, 0x3e, 0x37, 0x07, + 0x12, 0xec, 0x54, 0xa7, 0x94, 0x77, 0x15, 0x73, + 0x25, 0xcc, 0x33, 0x91, 0x98, 0xe7, 0x6f, 0xca, + 0x2c, 0x1b, 0x79, 0x2c, 0xf7, 0x6e, 0x73, 0xe5, + 0x99, 0xfc, 0xdc, 0x6d, 0x6b, 0x4b, 0xb0, 0x8d, + 0xf2, 0x74, 0x9d, 0x0a, 0x7f, 0x67, 0x76, 0x96, + 0x4c, 0xce, 0xe2, 0xe2, 0xc6, 0xf6, 0xdf, 0xd8, + 0xb3, 0x3b, 0x33, 0x59, 0xa0, 0x06, 0xad, 0x2d, + 0x24, 0xb6, 0xad, 0x27, 0xb2, 0x50, 0x70, 0x47, + 0x9c, 0xed, 0x6e, 0x77, 0x25, 0xcd, 0xd6, 0x40, + 0xcb, 0x48, 0xb2, 0xfb, 0x59, 0x5f, 0x0c, 0x1e, + 0xd4, 0x1c, 0xf9, 0x2e, 0x1d, 0x11, 0xc2, 0xfa, + 0x16, 0x9f, 0x10, 0x13, 0xa0, 0x29, 0x4c, 0xa3, + 0x69, 0x61, 0xbe, 0xc8, 0x0e, 0x73, 0x73, 0x1f, + 0xb3, 0x73, 0x02, 0x41, 0x77, 0x15, 0x71, 0x16, + 0x3e, 0x12, 0x5b, 0x23, 0x41, 0xde, 0xa8, 0xd0, + 0xa2, 0xdb, 0x91, 0xed, 0x66, 0x4f, 0x2d, 0xcd, + 0xbe, 0xcf, 0xdc, 0x5a, 0x1c, 0xba, 0xea, 0x57, + 0xcb, 0x1b, 0x6e, 0xc3, 0x84, 0x96, 0xcf, 0x90, + 0xd5, 0xf8, 0x03, 0x74, 0x38, 0x6f, 0x02, 0xb9, + 0xf3, 0xfc, 0xac, 0x64, 0x1b, 0x03, 0x71, 0x62, + 0xc9, 0x4c, 0xd2, 0x3d, 0xc0, 0xdc, 0xce, 0x74, + 0x19, 0x24, 0x96, 0x4c, 0x4f, 0x75, 0x10, 0x7a, + 0xb1, 0xba, 0xdb, 0x7c, 0xfe, 0xdc, 0xe6, 0x76, + 0x57, 0x10, 0x65, 0xd6, 0xaf, 0x24, 0xda, 0xc2, + 0xe6, 0x62, 0x2e, 0x03, 0x40, 0x2f, 0x3b, 0xc4, + 0xa9, 0x2d, 0x94, 0xda, 0x0b, 0xac, 0xcc, 0x5d, + 0x58, 0xe6, 0x51, 0xb6, 0x1c, 0xc6, 0xc1, 0xf8, + 0x26, 0x0c, 0xa8, 0x6b, 0x85, 0x70, 0xe2, 0x68, + 0xed, 0x8f, 0x02, 0x91, 0xc8, 0x22, 0x6c, 0x59, + 0x1e, 0x5e, 0xc6, 0xea, 0x6d, 0xbc, 0x43, 0xe8, + 0x85, 0xb2, 0xdf, 0x29, 0xcb, 0xad, 0xaf, 0x66, + 0xbf, 0x82, 0x06, 0xb2, 0xee, 0xe7, 0x44, 0xf3, + 0x02, 0x6a, 0xfd, 0x38, 0xb4, 0xd4, 0xd3, 0x58, + 0x41, 0xd6, 0x88, 0x88, 0x2a, 0xbf, 0x89, 0x3f, + 0xe9, 0xae, 0xdd, 0xc4, 0x5f, 0x2a, 0x99, 0xd9, + 0xcf, 0xf4, 0xfe, 0x58, 0x3f, 0xfe, 0x12, 0x1f, + 0xa8, 0x38, 0x94, 0x2f, 0xe2, 0x51, 0x23, 0x66, + 0xbf, 0xff, 0x00, 0x22, 0x2f, 0x95, 0x4d, 0xec, + 0xf6, 0x8c, 0x87, 0x2e, 0xec, 0x5a, 0xc2, 0x3e, + 0x80, 0x41, 0x21, 0xe1, 0x5c, 0x19, 0x9e, 0x7d, + 0x94, 0x65, 0x58, 0x7a, 0xc2, 0xe9, 0x90, 0x38, + 0x8c, 0x41, 0xa7, 0x16, 0x22, 0x3b, 0x0d, 0x68, + 0x25, 0x77, 0xad, 0x13, 0xe5, 0xf6, 0x17, 0x4f, + 0x6b, 0xae, 0xad, 0xa2, 0x9d, 0xcc, 0x18, 0x58, + 0xe9, 0x58, 0xd7, 0x96, 0x83, 0xb8, 0xdc, 0x40, + 0xd1, 0x04, 0x46, 0xc9, 0xed, 0x04, 0xd9, 0xeb, + 0x6f, 0xe6, 0x70, 0x68, 0x82, 0x19, 0xf0, 0x5b, + 0x50, 0x50, 0xf3, 0x64, 0x13, 0x57, 0x69, 0x2b, + 0xd6, 0xd2, 0x6d, 0x04, 0xd9, 0x63, 0xad, 0x6c, + 0x6c, 0x61, 0x17, 0x39, 0x95, 0xfb, 0xb0, 0xdb, + 0xc4, 0xe2, 0x43, 0x40, 0x1a, 0xdc, 0xe2, 0x14, + 0x6f, 0xe1, 0xe3, 0x1a, 0xd6, 0x66, 0xed, 0x60, + 0x0d, 0x68, 0xbc, 0x34, 0x68, 0x14, 0x03, 0x43, + 0xb5, 0x05, 0xe6, 0xec, 0xf3, 0xdf, 0x89, 0x76, + 0x8c, 0x76, 0x91, 0x0d, 0x99, 0x73, 0x3b, 0x0e, + 0xf1, 0xf4, 0xa0, 0xd8, 0x76, 0x87, 0x68, 0xb2, + 0x7b, 0xeb, 0x58, 0xb6, 0x86, 0x1b, 0x77, 0xd9, + 0xde, 0xbb, 0x9b, 0x8e, 0xe6, 0xdb, 0x47, 0x36, + 0xf3, 0xe4, 0x87, 0x70, 0xa9, 0x0d, 0xab, 0xcf, + 0x6f, 0xb2, 0x88, 0xec, 0x99, 0x97, 0xc4, 0xcb, + 0x8b, 0xab, 0xc9, 0xf9, 0x96, 0x47, 0x25, 0x68, + 0x6a, 0x2b, 0x5d, 0x0b, 0x83, 0xf1, 0x31, 0x80, + 0xec, 0xd7, 0x38, 0x75, 0xc7, 0x71, 0x19, 0x69, + 0xec, 0x9a, 0x85, 0xcd, 0xb5, 0x37, 0x92, 0x8c, + 0xd7, 0x66, 0xdc, 0xd8, 0x5f, 0x76, 0xf1, 0x8e, + 0x71, 0x6f, 0x1e, 0x82, 0xe7, 0x61, 0x01, 0xa2, + 0xbb, 0x9a, 0x4a, 0x0e, 0xb8, 0xf3, 0x1d, 0xbf, + 0x32, 0xb0, 0x49, 0x95, 0x5b, 0xb6, 0x3c, 0x43, + 0x1b, 0x84, 0x82, 0xa1, 0xb5, 0xd2, 0x7c, 0xad, + 0xe5, 0xdb, 0xb4, 0x19, 0xd6, 0x67, 0x6d, 0x77, + 0x65, 0x94, 0x64, 0xf0, 0xb2, 0x5c, 0xce, 0xfd, + 0xae, 0x7e, 0x39, 0xea, 0x22, 0x8a, 0x28, 0xe9, + 0x8e, 0x47, 0xd3, 0x5e, 0x93, 0xa0, 0x2e, 0x09, + 0x36, 0xb3, 0x3a, 0xcb, 0x2f, 0x20, 0x6e, 0x7f, + 0x96, 0xb2, 0xda, 0xca, 0xe5, 0xc1, 0xac, 0xb9, + 0x85, 0xe6, 0x40, 0xd2, 0x7e, 0x7d, 0x7b, 0x1a, + 0x4a, 0xee, 0xda, 0x0c, 0x93, 0x30, 0xbc, 0xba, + 0xb2, 0xcd, 0xb2, 0x7b, 0x86, 0x5b, 0xe6, 0x76, + 0x01, 0xcc, 0x67, 0x3c, 0x0b, 0xa2, 0x96, 0x39, + 0x00, 0x2f, 0x8e, 0x4a, 0x6a, 0xd4, 0x28, 0x83, + 0x4e, 0x55, 0x9b, 0xe7, 0x96, 0xf9, 0xcb, 0x72, + 0x3c, 0xfd, 0x90, 0x3a, 0x5b, 0x98, 0x9d, 0x3d, + 0x95, 0xe5, 0xa8, 0x2d, 0x64, 0x81, 0x94, 0xc6, + 0xd7, 0xb1, 0xda, 0x5a, 0x45, 0x56, 0xbc, 0xeb, + 0x3d, 0xcd, 0xee, 0x33, 0xa6, 0xe4, 0x1b, 0x3f, + 0x81, 0xb7, 0x0c, 0x6f, 0x39, 0x75, 0x77, 0x20, + 0xc4, 0x23, 0x04, 0x56, 0x80, 0x6f, 0xd1, 0x6d, + 0xca, 0xb2, 0x4c, 0xea, 0x6c, 0xe5, 0xb9, 0xee, + 0xd0, 0x4b, 0x09, 0xb8, 0x82, 0x27, 0x41, 0x67, + 0x69, 0x6b, 0x88, 0xc7, 0x10, 0x93, 0xcb, 0x71, + 0x7b, 0xf4, 0xb9, 0xc5, 0x47, 0xec, 0x77, 0xeb, + 0x76, 0xa3, 0x68, 0xae, 0x1f, 0xa5, 0xe2, 0x63, + 0x1d, 0x4e, 0xf0, 0x7b, 0x87, 0x81, 0xa1, 0x02, + 0x4c, 0xe7, 0x69, 0xb6, 0x77, 0x31, 0xb5, 0x8f, + 0x3c, 0x9a, 0x2b, 0xfc, 0xba, 0xf1, 0xe2, 0x2e, + 0x7e, 0x36, 0x16, 0x18, 0xdc, 0x75, 0x93, 0xbb, + 0xa2, 0xb5, 0xed, 0x2b, 0x90, 0x24, 0xeb, 0x5c, + 0x99, 0x8e, 0x53, 0x97, 0x66, 0x91, 0x32, 0x1c, + 0xc2, 0x06, 0xdc, 0x47, 0x19, 0xc4, 0xc6, 0xb8, + 0x91, 0x47, 0x52, 0x95, 0xab, 0x48, 0x3a, 0x97, + 0x5a, 0x00, 0xd7, 0xf9, 0x6f, 0xaa, 0x37, 0xe1, + 0x8f, 0xed, 0x73, 0x7f, 0xb4, 0x67, 0x85, 0xca, + 0xf2, 0x35, 0xfe, 0x5b, 0xea, 0x8d, 0xf8, 0x63, + 0xfb, 0x5c, 0xdf, 0xed, 0x19, 0xe1, 0x72, 0x0b, + 0xe2, 0x89, 0xce, 0x7d, 0xe6, 0xcb, 0xcf, 0xf9, + 0x42, 0x96, 0x51, 0x39, 0xcf, 0xbc, 0xd9, 0x79, + 0xff, 0x00, 0x28, 0x41, 0x8c, 0x97, 0xde, 0xaf, + 0x7c, 0xf3, 0xf5, 0x8a, 0x97, 0x51, 0x19, 0x37, + 0xbd, 0x5e, 0xf9, 0xe7, 0xeb, 0x15, 0x2c, 0x83, + 0x28, 0xb0, 0x88, 0x32, 0x8b, 0x08, 0x83, 0xe3, + 0xbf, 0x8c, 0xff, 0x00, 0xea, 0x1b, 0x4f, 0xfc, + 0x51, 0xf5, 0x9c, 0xb3, 0xf8, 0x2f, 0xfc, 0xf2, + 0xf7, 0xff, 0x00, 0x17, 0xfb, 0xe1, 0x79, 0xfc, + 0x66, 0xff, 0x00, 0x50, 0xda, 0x7f, 0xe2, 0x8f, + 0xac, 0xe5, 0xeb, 0xf0, 0x5f, 0xf9, 0xe5, 0xef, + 0xfe, 0x2f, 0xf7, 0xc2, 0x0f, 0xb1, 0x20, 0xd6, + 0x16, 0x10, 0x6b, 0x08, 0x3f, 0x38, 0x6d, 0x3f, + 0xfa, 0x93, 0x34, 0xff, 0x00, 0xcb, 0x9b, 0xeb, + 0x95, 0xf4, 0xbb, 0x0c, 0xbb, 0xac, 0x7f, 0x07, + 0xb9, 0x80, 0x2a, 0xf6, 0x43, 0x24, 0xf1, 0x8d, + 0xdc, 0x50, 0xc8, 0xe9, 0x28, 0x3b, 0x60, 0x51, + 0x7c, 0xd3, 0x69, 0xff, 0x00, 0xd4, 0x79, 0x9f, + 0xfe, 0x5c, 0xdf, 0x5c, 0xaf, 0xb3, 0xfe, 0x1d, + 0x31, 0xb2, 0x6c, 0x45, 0x84, 0x6f, 0xd2, 0xd7, + 0xb6, 0x46, 0x90, 0x77, 0x8b, 0xdc, 0x10, 0x7c, + 0x73, 0x64, 0xf3, 0x21, 0x95, 0xed, 0x26, 0x5d, + 0x7c, 0x5d, 0x85, 0x91, 0x4e, 0xc1, 0x29, 0x3f, + 0x31, 0xff, 0x00, 0xab, 0x79, 0xee, 0x35, 0xc5, + 0x7a, 0xdb, 0x0c, 0xcb, 0xac, 0xf6, 0x9b, 0x31, + 0xbc, 0x06, 0xac, 0x74, 0xce, 0x63, 0x0e, 0xb1, + 0x85, 0x9e, 0x23, 0x69, 0xc9, 0xaa, 0xe1, 0xcd, + 0xec, 0x9d, 0x97, 0x66, 0x97, 0x76, 0x2e, 0xa8, + 0x36, 0xd3, 0x3e, 0x2d, 0x3b, 0xcd, 0x71, 0x03, + 0xbc, 0x99, 0x4d, 0x94, 0x99, 0x86, 0x65, 0x6b, + 0x64, 0xcd, 0x2e, 0xb9, 0x99, 0x91, 0x8f, 0xed, + 0x3a, 0x85, 0x07, 0xd4, 0xaf, 0x32, 0xde, 0xad, + 0xfc, 0x1c, 0x7c, 0x0e, 0x18, 0x5f, 0x24, 0x31, + 0xcf, 0x20, 0xfe, 0xb4, 0xb3, 0x46, 0xff, 0x00, + 0x01, 0x0b, 0xe6, 0x9b, 0x33, 0xfe, 0xa4, 0xca, + 0xbf, 0xf3, 0x20, 0xff, 0x00, 0xa8, 0xd5, 0xf6, + 0x7f, 0xc4, 0x58, 0xd9, 0x16, 0xc2, 0xe6, 0x11, + 0xc6, 0x30, 0xb2, 0x38, 0xe1, 0x63, 0x06, 0xf3, + 0x5b, 0x2c, 0x60, 0x0e, 0x00, 0xbe, 0x31, 0xb3, + 0x3f, 0xea, 0x3c, 0xab, 0xff, 0x00, 0x2e, 0x0f, + 0xfa, 0x8d, 0x41, 0xf7, 0x0d, 0xbb, 0xda, 0x29, + 0x36, 0x77, 0x67, 0xe5, 0xbd, 0x85, 0xb8, 0xae, + 0x25, 0x78, 0x82, 0xdc, 0xee, 0x35, 0xef, 0x0e, + 0x38, 0x88, 0xfe, 0xa8, 0x07, 0xba, 0xbe, 0x17, + 0x96, 0x8b, 0x3b, 0xbc, 0xd6, 0x2e, 0xb6, 0xb8, + 0x30, 0xda, 0x4b, 0x26, 0x3b, 0xa9, 0xe8, 0xe7, + 0x38, 0xb4, 0x9c, 0x4e, 0xa0, 0x6d, 0x4e, 0x27, + 0x6a, 0x5f, 0x67, 0xfc, 0x4b, 0xc9, 0x33, 0x5c, + 0xef, 0x22, 0x8a, 0xd3, 0x2c, 0x83, 0xda, 0x27, + 0x6d, 0xcb, 0x64, 0x73, 0x43, 0x9a, 0xd3, 0x81, + 0xac, 0x78, 0x26, 0xaf, 0x2d, 0x1e, 0x53, 0x97, + 0xcc, 0x7f, 0xdb, 0x4d, 0xb6, 0xfb, 0xb4, 0xfe, + 0xf6, 0x2f, 0xe2, 0x20, 0xfa, 0x65, 0xb7, 0xe2, + 0x4e, 0xc3, 0x5a, 0x41, 0x15, 0xbc, 0x17, 0x4e, + 0x8e, 0x18, 0x5a, 0x23, 0x8e, 0x31, 0x14, 0x94, + 0x0d, 0x68, 0xa0, 0x1e, 0x4a, 0xf8, 0xae, 0x67, + 0x34, 0x77, 0x19, 0x8d, 0xdd, 0xc4, 0x46, 0xb1, + 0xcd, 0x34, 0x8f, 0x61, 0xdf, 0x6b, 0x9e, 0x48, + 0xf0, 0xa9, 0xef, 0xf6, 0xd3, 0x6d, 0xbe, 0xed, + 0x77, 0x63, 0xf5, 0xb0, 0xff, 0x00, 0x11, 0x57, + 0x26, 0x86, 0x48, 0x26, 0x92, 0x09, 0x9b, 0x86, + 0x58, 0x9e, 0x58, 0xf6, 0xe8, 0x34, 0x73, 0x4d, + 0x1c, 0x34, 0x20, 0xfb, 0x06, 0xc6, 0xed, 0xe6, + 0xcd, 0x5a, 0xe4, 0x59, 0x5e, 0x55, 0x3d, 0xcb, + 0x9b, 0x78, 0xc8, 0xdb, 0x09, 0x8c, 0x31, 0xc4, + 0x63, 0x2e, 0x22, 0x98, 0x86, 0x8d, 0xd5, 0xc9, + 0xf8, 0xd7, 0x6e, 0xf7, 0x65, 0xf9, 0x5d, 0xc0, + 0xd2, 0xd8, 0xa5, 0x96, 0x37, 0x9e, 0xcb, 0xda, + 0xd2, 0x3e, 0xa1, 0x55, 0x0d, 0x9f, 0xd8, 0x8d, + 0xa8, 0xb9, 0x9b, 0x2f, 0xcd, 0x2d, 0xec, 0x8b, + 0xec, 0x9f, 0x24, 0x72, 0xb6, 0x6e, 0x72, 0x30, + 0x30, 0x07, 0x8a, 0x9c, 0x25, 0xf8, 0xb7, 0x17, + 0xd5, 0xf6, 0xef, 0x23, 0x76, 0x7d, 0xb3, 0x57, + 0x56, 0xb0, 0xb7, 0x15, 0xc4, 0x7f, 0xaf, 0xb6, + 0x03, 0x59, 0x91, 0x80, 0xf8, 0xbf, 0xda, 0x6e, + 0x20, 0x83, 0xe3, 0xff, 0x00, 0x87, 0xd7, 0x2d, + 0xb6, 0xdb, 0x2c, 0xae, 0x47, 0x9a, 0x34, 0xcc, + 0x63, 0xaf, 0xda, 0xb5, 0xd1, 0xff, 0x00, 0x79, + 0x7e, 0x81, 0x1a, 0x05, 0x17, 0xe6, 0x28, 0xa6, + 0x96, 0xda, 0xe1, 0x93, 0xc4, 0x4b, 0x26, 0x85, + 0xe1, 0xcc, 0x3a, 0x8b, 0x5c, 0xc3, 0x51, 0xe0, + 0x5f, 0x7a, 0xd9, 0x3d, 0xb6, 0xcb, 0x36, 0x8a, + 0xcd, 0x94, 0x95, 0x90, 0xe6, 0x0d, 0x68, 0x13, + 0xda, 0xbc, 0x80, 0xec, 0x40, 0x79, 0x4c, 0xdf, + 0x69, 0xef, 0x20, 0xb2, 0x77, 0xd4, 0x7e, 0x65, + 0x9f, 0x65, 0x19, 0x4c, 0xb0, 0x47, 0x99, 0x5d, + 0xc7, 0x6a, 0x6e, 0xab, 0xcc, 0xf3, 0x86, 0x80, + 0xe1, 0xa5, 0x6a, 0x75, 0x37, 0x58, 0xd6, 0xb7, + 0x5e, 0xe6, 0x36, 0x36, 0x16, 0xef, 0xb9, 0xbd, + 0x9e, 0x38, 0x20, 0x67, 0x94, 0xf9, 0x1d, 0x41, + 0xda, 0xec, 0xaf, 0x85, 0x6d, 0xde, 0xd3, 0x7c, + 0x49, 0x9d, 0x3a, 0xe6, 0x20, 0x45, 0x9d, 0xb8, + 0xe6, 0x6d, 0x5a, 0xed, 0x04, 0xb4, 0x1a, 0x97, + 0x11, 0xbe, 0xe2, 0x6a, 0x83, 0xef, 0x70, 0xcf, + 0x14, 0xf1, 0x89, 0x61, 0x7b, 0x65, 0x8d, 0xc2, + 0xad, 0x7b, 0x08, 0x73, 0x48, 0xec, 0x38, 0x1a, + 0x15, 0xb1, 0x7c, 0x9b, 0xf0, 0x6b, 0x2d, 0xbb, + 0x7d, 0xdd, 0xe6, 0x64, 0x5e, 0xf6, 0xda, 0x42, + 0xce, 0x69, 0x8c, 0x04, 0x86, 0x3e, 0x57, 0x78, + 0xc4, 0x96, 0xee, 0xe1, 0x6b, 0x7b, 0xeb, 0xea, + 0xe0, 0x9e, 0x24, 0x1e, 0xbf, 0x2e, 0xf1, 0x5f, + 0x09, 0xfc, 0x55, 0xff, 0x00, 0x5a, 0xde, 0x79, + 0x90, 0xff, 0x00, 0xd3, 0x6a, 0xfb, 0xa6, 0xff, + 0x00, 0xe5, 0xb8, 0x57, 0xc2, 0xbf, 0x15, 0x3f, + 0xd6, 0xb7, 0x9e, 0x64, 0x3f, 0xf4, 0xda, 0x82, + 0xe7, 0xf8, 0x2d, 0xfc, 0x8a, 0xff, 0x00, 0xff, + 0x00, 0x2b, 0xfb, 0x91, 0xaf, 0xa2, 0x2f, 0x9d, + 0xfe, 0x0b, 0x7f, 0x22, 0xbf, 0xff, 0x00, 0xca, + 0xfe, 0xe4, 0x6b, 0xe8, 0x68, 0x32, 0xbe, 0x5d, + 0xf8, 0x89, 0xf8, 0x8a, 0x5a, 0x65, 0xc8, 0xf2, + 0x39, 0x7c, 0x6d, 0x2c, 0xbc, 0xbc, 0x66, 0xe1, + 0xdd, 0x8e, 0x22, 0x38, 0x09, 0xe0, 0x52, 0x1f, + 0x89, 0xfb, 0x65, 0x2e, 0x55, 0x6e, 0x72, 0x4c, + 0xbe, 0x52, 0xdb, 0xeb, 0xa6, 0x62, 0xb8, 0x91, + 0xa7, 0x4c, 0x51, 0x3b, 0x71, 0xa7, 0xe7, 0x3f, + 0xbc, 0x3b, 0x6b, 0xe4, 0xf9, 0x6d, 0x93, 0xb3, + 0x0b, 0xf8, 0x6c, 0xc4, 0x91, 0xc3, 0xcf, 0x3e, + 0x86, 0x69, 0x9c, 0x18, 0xc6, 0x8f, 0xce, 0x73, + 0x9c, 0xea, 0x68, 0x01, 0x07, 0x4e, 0x41, 0x90, + 0xe6, 0x19, 0xfe, 0x60, 0xcb, 0x1b, 0x08, 0xf1, + 0xbd, 0xda, 0x64, 0x90, 0xf9, 0x11, 0xb3, 0x75, + 0xef, 0x3d, 0x85, 0xf7, 0x9d, 0x98, 0xd9, 0xcb, + 0x0d, 0x9d, 0xcb, 0x1b, 0x63, 0x66, 0x0b, 0x9d, + 0x5c, 0x53, 0xce, 0xef, 0x2a, 0x49, 0x29, 0x42, + 0xe3, 0xbc, 0x37, 0x82, 0x8d, 0xd9, 0xa6, 0xec, + 0x76, 0xce, 0x65, 0xed, 0xb3, 0xb2, 0xcc, 0x6c, + 0xcb, 0x8f, 0x8d, 0x3d, 0xc3, 0xa6, 0x8f, 0x1c, + 0xaf, 0xf9, 0xce, 0xf1, 0xb7, 0x37, 0x06, 0xe2, + 0x97, 0x1b, 0x45, 0x90, 0x12, 0x03, 0x73, 0x2b, + 0x42, 0x49, 0xa0, 0x02, 0x78, 0xeb, 0x53, 0xb8, + 0x06, 0x24, 0x12, 0x0e, 0x6b, 0x1c, 0x0b, 0x1e, + 0x31, 0x35, 0xf5, 0x0e, 0x69, 0xd4, 0x41, 0xd6, + 0x0f, 0x6e, 0xab, 0xe4, 0x1b, 0x61, 0xf8, 0x5f, + 0x98, 0x5a, 0x5d, 0x49, 0x7b, 0x90, 0xc6, 0x6e, + 0xac, 0xa4, 0x25, 0xc6, 0xd9, 0x9a, 0x65, 0x8e, + 0xba, 0xc3, 0x5a, 0x7c, 0xa6, 0xaf, 0xa9, 0xe7, + 0x19, 0x9f, 0x55, 0xe5, 0x57, 0x39, 0x97, 0x34, + 0x6e, 0x1b, 0x6d, 0x19, 0x97, 0x9a, 0x61, 0x00, + 0xb9, 0xa0, 0x54, 0xe9, 0x21, 0x7c, 0xff, 0x00, + 0xfd, 0xe8, 0x8d, 0xf3, 0x46, 0xd6, 0x65, 0x9c, + 0xdc, 0x2e, 0x73, 0x43, 0xdf, 0x24, 0xb5, 0x21, + 0xa4, 0x80, 0x4f, 0x8a, 0xd1, 0xb8, 0x82, 0x85, + 0x06, 0x4d, 0xb5, 0x2f, 0x26, 0xca, 0xde, 0xca, + 0xf8, 0x07, 0x9a, 0x3a, 0x16, 0xb2, 0x56, 0x8f, + 0xed, 0x36, 0x80, 0x70, 0xad, 0x9b, 0x47, 0xb2, + 0xf7, 0x9b, 0x3b, 0x1d, 0x9b, 0x6f, 0xdc, 0x05, + 0xd5, 0xdb, 0x1d, 0x23, 0xad, 0xdb, 0xa7, 0x9b, + 0x60, 0x20, 0x34, 0x39, 0xdf, 0x38, 0x9a, 0xaf, + 0xd0, 0x6c, 0x95, 0x92, 0xc6, 0x26, 0x89, 0xe1, + 0xd0, 0xbd, 0xa1, 0xed, 0x90, 0x6a, 0x20, 0xe9, + 0x05, 0x7c, 0x33, 0xf1, 0x33, 0x3b, 0x87, 0x38, + 0xda, 0x79, 0x1d, 0x6c, 0xf1, 0x25, 0xbd, 0x9c, + 0x6d, 0xb6, 0x8e, 0x41, 0xa8, 0x96, 0x92, 0xe7, + 0x9e, 0x53, 0x8a, 0x09, 0x0f, 0xc1, 0xb8, 0x9c, + 0xfd, 0xa7, 0x9e, 0x41, 0xe4, 0xc7, 0x68, 0xf2, + 0x7f, 0xb4, 0xe6, 0x00, 0xbe, 0xcd, 0xa8, 0x57, + 0x7b, 0x71, 0x7c, 0xd7, 0xf0, 0x67, 0x2b, 0x74, + 0x56, 0x97, 0xd9, 0xac, 0x8d, 0xa0, 0xb8, 0x73, + 0x60, 0x84, 0x9d, 0xd6, 0xb3, 0x4b, 0xfe, 0x93, + 0x87, 0x02, 0xfa, 0x1d, 0xed, 0xed, 0xbd, 0x8d, + 0xa4, 0xd7, 0x97, 0x52, 0x08, 0xad, 0xe0, 0x61, + 0x7c, 0xaf, 0x3b, 0x8d, 0x08, 0x3e, 0x59, 0xf8, + 0xc3, 0x91, 0xd8, 0xda, 0xdd, 0x5b, 0xe7, 0x30, + 0x39, 0xb1, 0x5d, 0x5e, 0x38, 0xc7, 0x3c, 0x02, + 0x95, 0x79, 0x68, 0xaf, 0x3c, 0x07, 0x78, 0xaf, + 0x9b, 0x82, 0x77, 0xd4, 0xd6, 0xd5, 0x6d, 0x1d, + 0xc6, 0xd1, 0xe7, 0x32, 0xdf, 0xcb, 0xe2, 0xc5, + 0xe4, 0x5b, 0xc4, 0x4d, 0x43, 0x23, 0xdc, 0x1d, + 0xb3, 0xac, 0xf6, 0x57, 0x2e, 0x63, 0x91, 0xe6, + 0x59, 0x6d, 0xad, 0x95, 0xe5, 0xdc, 0x06, 0x38, + 0x6f, 0xe3, 0x32, 0x40, 0xe3, 0xba, 0x01, 0xa5, + 0x1d, 0xbc, 0x77, 0x7b, 0x44, 0x20, 0xfb, 0x9e, + 0xc3, 0x64, 0xf9, 0x66, 0x55, 0xb3, 0xb6, 0x83, + 0x2f, 0x7b, 0x67, 0x17, 0x0d, 0x13, 0xcb, 0x74, + 0xdd, 0x1c, 0xe3, 0xdc, 0x34, 0x9e, 0xc0, 0x1a, + 0x80, 0xdc, 0x53, 0xf4, 0xa6, 0x85, 0xf2, 0x1f, + 0xc2, 0x9d, 0xaf, 0xf6, 0x1b, 0xae, 0xa0, 0xbe, + 0x7d, 0x2d, 0x6e, 0x5d, 0x5b, 0x57, 0x9d, 0x38, + 0x25, 0x3a, 0xd9, 0xda, 0x7f, 0x87, 0xb6, 0xbe, + 0xba, 0x10, 0x7a, 0x45, 0xe5, 0x65, 0x06, 0x51, + 0x61, 0x10, 0x65, 0x16, 0x11, 0x06, 0x51, 0x61, + 0x10, 0x65, 0x16, 0x11, 0x06, 0x51, 0x61, 0x10, + 0x65, 0x16, 0x11, 0x06, 0x51, 0x61, 0x10, 0x65, + 0x16, 0x11, 0x06, 0x51, 0x61, 0x10, 0x65, 0x16, + 0x11, 0x06, 0x51, 0x61, 0x10, 0x65, 0x16, 0x11, + 0x06, 0x51, 0x61, 0x10, 0x65, 0x16, 0x11, 0x06, + 0x51, 0x61, 0x10, 0x65, 0x16, 0x11, 0x06, 0x51, + 0x61, 0x10, 0x65, 0x16, 0x11, 0x06, 0x51, 0x61, + 0x10, 0x65, 0x16, 0x11, 0x06, 0x51, 0x61, 0x10, + 0x65, 0x16, 0x11, 0x06, 0x57, 0x1e, 0x6f, 0xfc, + 0xae, 0xf7, 0xec, 0x24, 0xfa, 0x8e, 0x5d, 0x6b, + 0x93, 0x36, 0xfe, 0x55, 0x7b, 0xf6, 0x12, 0x7d, + 0x47, 0x20, 0xaa, 0x7e, 0x1a, 0xff, 0x00, 0x23, + 0x9f, 0xed, 0xcf, 0xd5, 0x56, 0xc5, 0x53, 0xfc, + 0x35, 0xfe, 0x47, 0x3f, 0xdb, 0x9f, 0xaa, 0xad, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x2b, 0x5f, + 0x88, 0x5f, 0xe9, 0xc7, 0xfd, 0xac, 0x7e, 0x15, + 0xc1, 0x90, 0xd9, 0xc9, 0x7d, 0xf8, 0x77, 0x35, + 0xb4, 0x3a, 0x64, 0x7f, 0x3f, 0x84, 0x6f, 0x96, + 0xbb, 0x18, 0x1d, 0xe5, 0x71, 0x9a, 0x08, 0x2e, + 0x19, 0xcd, 0xcf, 0x13, 0x26, 0x66, 0xbc, 0x12, + 0x34, 0x3d, 0xb5, 0x1d, 0x87, 0x02, 0x12, 0x18, + 0x21, 0xb7, 0x67, 0x37, 0x04, 0x6c, 0x86, 0x31, + 0xa4, 0x32, 0x36, 0x86, 0x36, 0xa7, 0xb0, 0xda, + 0x04, 0x1f, 0x3b, 0xd9, 0x5d, 0xa8, 0xcb, 0xf2, + 0x7c, 0xa2, 0xf2, 0xd6, 0xec, 0x16, 0x5d, 0xb5, + 0xee, 0x7d, 0xbb, 0x0b, 0x6b, 0x89, 0xc5, 0xb4, + 0xc2, 0x77, 0xa8, 0x42, 0xed, 0x8b, 0x33, 0xcd, + 0xf3, 0x5d, 0x8c, 0xcd, 0x6f, 0x73, 0x2c, 0x18, + 0x5c, 0xd0, 0xd8, 0x0b, 0x18, 0x19, 0x88, 0x37, + 0x09, 0x2e, 0xd1, 0x5d, 0x1a, 0x55, 0xba, 0x6c, + 0x97, 0x28, 0xb8, 0x94, 0xcd, 0x3d, 0x94, 0x32, + 0x4a, 0x75, 0xb8, 0xb0, 0x12, 0x7b, 0x74, 0xd6, + 0xba, 0x5d, 0x04, 0x0e, 0x87, 0x98, 0x74, 0x4c, + 0x74, 0x34, 0xa7, 0x34, 0x5a, 0x0b, 0x29, 0xbd, + 0x86, 0x94, 0x41, 0x4b, 0xd8, 0x83, 0x5d, 0x92, + 0xcc, 0xf7, 0x7c, 0x79, 0x7f, 0xe9, 0xad, 0x5f, + 0x85, 0xc6, 0xad, 0xcc, 0x7b, 0x51, 0x78, 0x1e, + 0xae, 0xf1, 0x5a, 0x5a, 0xc3, 0x1b, 0xa2, 0x86, + 0x08, 0xe2, 0x8d, 0xfe, 0x54, 0x6c, 0x63, 0x5a, + 0xd3, 0x5d, 0x1a, 0x5a, 0xd0, 0x01, 0x48, 0x2c, + 0xed, 0x2d, 0xb1, 0x7b, 0x34, 0x11, 0x41, 0x8b, + 0xca, 0xe6, 0x98, 0xd6, 0x56, 0x9b, 0xf8, 0x40, + 0x41, 0xf3, 0xcd, 0x84, 0x23, 0xaf, 0x73, 0x2f, + 0xfc, 0x79, 0xff, 0x00, 0xea, 0x35, 0x71, 0x6c, + 0x46, 0x7b, 0x6b, 0x92, 0x5d, 0x4d, 0x35, 0xd8, + 0x7f, 0x31, 0x34, 0x61, 0x8e, 0x7b, 0x1b, 0x8b, + 0x0b, 0x81, 0xab, 0x6a, 0x3b, 0x3a, 0x57, 0xd3, + 0x3d, 0x86, 0xca, 0x16, 0x4c, 0xfb, 0x7b, 0x78, + 0xa1, 0x91, 0xf1, 0xbd, 0xa5, 0xd1, 0xc6, 0xd6, + 0xb9, 0xd5, 0x15, 0xa7, 0x8a, 0x01, 0x35, 0x2a, + 0x95, 0xb0, 0x39, 0x2d, 0xc3, 0x64, 0xbd, 0x8f, + 0x34, 0xb1, 0x7b, 0x61, 0x96, 0x26, 0x00, 0xcb, + 0x88, 0xdc, 0x1a, 0xe3, 0x52, 0x7c, 0x5c, 0x43, + 0x7b, 0x75, 0x07, 0x36, 0xc9, 0x35, 0xf9, 0xc6, + 0xd7, 0xdc, 0xe6, 0x2d, 0x61, 0x6c, 0x47, 0x9e, + 0x90, 0x9d, 0xc1, 0xce, 0xb4, 0xc6, 0xd1, 0xdb, + 0xc2, 0xe5, 0xa7, 0x65, 0x73, 0x0b, 0x5d, 0x9c, + 0xce, 0xaf, 0x6d, 0xb3, 0x60, 0x62, 0x69, 0x06, + 0x30, 0xec, 0x18, 0x88, 0x2c, 0x35, 0x65, 0x06, + 0xbd, 0x21, 0x7d, 0x1e, 0xd6, 0xca, 0xce, 0xce, + 0x3e, 0x6e, 0xd2, 0x06, 0x41, 0x19, 0xd2, 0x5a, + 0xc6, 0x81, 0x5d, 0xea, 0xd3, 0x5a, 0xd7, 0x77, + 0x95, 0xe5, 0xb7, 0xce, 0x0e, 0xbc, 0xb6, 0x8a, + 0x77, 0x0d, 0x4e, 0x7b, 0x41, 0x76, 0x8d, 0xcc, + 0x5a, 0xd0, 0x56, 0x76, 0x67, 0x68, 0x73, 0x6c, + 0xef, 0x32, 0xbe, 0x7e, 0x16, 0x33, 0x2c, 0x8a, + 0x39, 0x0c, 0x64, 0x33, 0x0b, 0xaa, 0xe3, 0xfa, + 0xb6, 0x99, 0x3c, 0x2a, 0x33, 0xf0, 0xd2, 0x9d, + 0x67, 0x7d, 0x4f, 0x54, 0x3e, 0xba, 0xbf, 0xc1, + 0x6d, 0x6d, 0x6d, 0x17, 0x33, 0x6f, 0x13, 0x61, + 0x8b, 0x5e, 0x06, 0x34, 0x35, 0xb5, 0xed, 0x05, + 0xe6, 0x0b, 0x2b, 0x2b, 0x67, 0x17, 0x5b, 0xdb, + 0xc5, 0x03, 0x9d, 0xa1, 0xce, 0x8e, 0x36, 0xb0, + 0x91, 0xd9, 0xc2, 0x02, 0x0f, 0x9f, 0xed, 0xc1, + 0x10, 0xed, 0x65, 0xac, 0xb7, 0xc0, 0xbe, 0xc0, + 0x36, 0x2d, 0x06, 0xb4, 0x2c, 0x04, 0x63, 0xef, + 0xd6, 0xab, 0x93, 0x6c, 0xb3, 0x8c, 0xbb, 0x34, + 0xbe, 0xb3, 0x7e, 0x5c, 0xdf, 0xfb, 0x48, 0x1b, + 0x80, 0x49, 0x87, 0x03, 0x0b, 0x8b, 0x83, 0x8b, + 0x5a, 0x3b, 0x0b, 0xe9, 0x57, 0x96, 0x16, 0x37, + 0xad, 0x0c, 0xbc, 0x81, 0x93, 0x86, 0x69, 0x6e, + 0x36, 0x83, 0x4a, 0xef, 0x6f, 0x2f, 0x27, 0x2c, + 0xcb, 0x0c, 0x4c, 0x88, 0xda, 0x40, 0x63, 0x8a, + 0xb8, 0x23, 0x74, 0x6c, 0x70, 0x6d, 0x75, 0xd3, + 0x13, 0x74, 0x55, 0x05, 0x3b, 0xf1, 0x2d, 0xae, + 0x75, 0x96, 0x58, 0xf0, 0x2a, 0xcf, 0x1c, 0x12, + 0x35, 0x55, 0xcd, 0x8f, 0x0e, 0x9f, 0xec, 0xae, + 0x6c, 0xf3, 0x33, 0xb7, 0xcd, 0xb6, 0x2e, 0x0f, + 0x64, 0x0f, 0xad, 0x84, 0x90, 0xb6, 0xe7, 0x13, + 0x7c, 0x9f, 0xd5, 0xb9, 0xba, 0x29, 0xdb, 0x57, + 0xf9, 0xad, 0xad, 0xae, 0x22, 0xe6, 0x27, 0x89, + 0x92, 0xc3, 0xa3, 0xf5, 0x6f, 0x68, 0x73, 0x74, + 0x6a, 0xd0, 0x45, 0x16, 0xb8, 0xec, 0x32, 0xf8, + 0x61, 0x7c, 0x11, 0x5a, 0xc5, 0x1c, 0x32, 0x7e, + 0xd2, 0x36, 0xb0, 0x06, 0x3b, 0xce, 0x00, 0x69, + 0x41, 0xf3, 0xc7, 0x6d, 0x2d, 0x9c, 0x9b, 0x16, + 0x32, 0x58, 0xe3, 0x91, 0xd7, 0xac, 0x66, 0x17, + 0xd0, 0x7e, 0xad, 0xac, 0x6b, 0xc3, 0xcb, 0xcb, + 0xbb, 0x4b, 0x16, 0xe4, 0x7f, 0xb7, 0x17, 0x9f, + 0xf9, 0x6d, 0xfa, 0xec, 0x5f, 0x40, 0x83, 0x27, + 0xca, 0xa0, 0x6c, 0x8c, 0x86, 0xce, 0x08, 0xdb, + 0x28, 0xa4, 0x80, 0x31, 0xa6, 0xa0, 0xee, 0x69, + 0x1a, 0x96, 0xd1, 0x63, 0x62, 0x21, 0x36, 0xe2, + 0xda, 0x11, 0x03, 0x8d, 0x5d, 0x0f, 0x36, 0xcc, + 0x04, 0xef, 0x96, 0x52, 0x88, 0x20, 0xff, 0x00, + 0x0f, 0x29, 0xf0, 0xd4, 0x23, 0x73, 0x9d, 0x97, + 0xeb, 0x95, 0x57, 0xc8, 0xee, 0xa0, 0xd9, 0x9d, + 0xa9, 0xbc, 0x8b, 0x35, 0x0e, 0x64, 0x4e, 0x12, + 0x46, 0x5c, 0x5b, 0x5a, 0x02, 0xe6, 0xca, 0xd7, + 0xd3, 0x74, 0x1a, 0x2f, 0xa4, 0x43, 0x04, 0x16, + 0xf1, 0xf3, 0x70, 0x46, 0xc8, 0x63, 0x1a, 0x43, + 0x23, 0x68, 0x63, 0x74, 0xf6, 0x1a, 0x00, 0x5a, + 0x6e, 0xf2, 0xdc, 0xba, 0xfb, 0x0f, 0xb6, 0x5b, + 0x47, 0x70, 0x5a, 0x3c, 0x52, 0xf6, 0xd5, 0xc0, + 0x6f, 0x62, 0x41, 0x58, 0xc8, 0x76, 0x93, 0x38, + 0xce, 0x73, 0xcb, 0xb6, 0x5a, 0x35, 0x83, 0x2d, + 0x89, 0x92, 0xbe, 0x2a, 0xc6, 0x01, 0xf2, 0x70, + 0xc3, 0x89, 0xd5, 0xf9, 0xd4, 0x24, 0x6f, 0x28, + 0xfb, 0x0d, 0xac, 0xb1, 0xbe, 0xf6, 0x9b, 0x6d, + 0xaf, 0x86, 0x27, 0x3a, 0x2a, 0x08, 0x9c, 0xc8, + 0x48, 0x70, 0x2d, 0xc5, 0x8d, 0xb8, 0x9a, 0x6a, + 0x1d, 0x4a, 0x51, 0x5e, 0xed, 0xad, 0x2d, 0xad, + 0x23, 0x31, 0x5a, 0xc2, 0xc8, 0x23, 0x3a, 0x70, + 0x46, 0xd0, 0xd1, 0x5d, 0xf2, 0xb4, 0x5d, 0x64, + 0xf9, 0x55, 0xdc, 0x9c, 0xed, 0xd5, 0xa4, 0x33, + 0x4a, 0x7c, 0xa9, 0x1c, 0xd0, 0x5c, 0x4f, 0x64, + 0xeb, 0x28, 0x29, 0x3f, 0x86, 0xf0, 0xca, 0x73, + 0x4b, 0xd9, 0xe1, 0x0e, 0x16, 0x62, 0x32, 0xcf, + 0x18, 0xd6, 0xa5, 0xcf, 0x0e, 0x60, 0xec, 0xbb, + 0x0a, 0xfa, 0x16, 0x9e, 0x2e, 0xea, 0xf1, 0x0c, + 0x30, 0xdb, 0xc6, 0xd8, 0x60, 0x8d, 0x90, 0xc6, + 0xdf, 0x26, 0x38, 0xc0, 0x6b, 0x47, 0x71, 0xab, + 0xda, 0x02, 0x22, 0x20, 0x22, 0x22, 0x0a, 0x4b, + 0xbf, 0xfd, 0x51, 0x8b, 0xcd, 0x6f, 0xfd, 0x16, + 0xab, 0xf7, 0xf4, 0x78, 0x15, 0x05, 0xdf, 0xfe, + 0xa8, 0xc5, 0xe6, 0xb7, 0xfe, 0x8b, 0x55, 0xfb, + 0xfa, 0x3c, 0x08, 0x0b, 0xcc, 0x85, 0xc2, 0x37, + 0x96, 0xe9, 0x70, 0x69, 0xc2, 0x3b, 0x34, 0xd0, + 0xbd, 0x27, 0x67, 0x55, 0x34, 0xd5, 0x05, 0x47, + 0xf0, 0xe0, 0x31, 0xf9, 0x7d, 0xed, 0xcb, 0xe8, + 0xeb, 0xc9, 0x2e, 0xde, 0x27, 0x71, 0xf2, 0xc6, + 0x86, 0x96, 0xf7, 0x2b, 0x55, 0xe6, 0xd6, 0x90, + 0xfe, 0x23, 0xdc, 0xc7, 0x68, 0x29, 0x14, 0xf6, + 0xd8, 0xee, 0xda, 0xdd, 0xd7, 0x81, 0x88, 0x38, + 0xf6, 0x6a, 0xbb, 0x2e, 0x76, 0x39, 0xec, 0xbd, + 0x9a, 0xf7, 0x25, 0xcc, 0x66, 0xca, 0xdf, 0x71, + 0xa6, 0x78, 0xa3, 0x0d, 0x7c, 0x6e, 0x3b, 0xa4, + 0x03, 0xc4, 0xbb, 0x72, 0x2d, 0x9b, 0xb6, 0xc9, + 0x9f, 0x35, 0xc7, 0x3d, 0x25, 0xdd, 0xed, 0xc9, + 0x06, 0x7b, 0xb9, 0xa9, 0x88, 0xf6, 0x34, 0x6a, + 0x08, 0x36, 0xe4, 0x99, 0xed, 0x96, 0x77, 0x0c, + 0xd3, 0x5a, 0x07, 0xb7, 0x98, 0x94, 0xc3, 0x23, + 0x64, 0x14, 0x21, 0xc3, 0x76, 0x9d, 0xd5, 0x03, + 0x6f, 0x49, 0x3f, 0x12, 0xe6, 0x30, 0x9a, 0xb6, + 0x2b, 0x4c, 0x37, 0x07, 0xfa, 0xd8, 0x45, 0x01, + 0xec, 0x8d, 0x01, 0x76, 0x5d, 0x6c, 0x73, 0x9b, + 0x7f, 0x35, 0xf6, 0x4d, 0x98, 0xcd, 0x95, 0xc9, + 0x73, 0xfb, 0x78, 0xe3, 0x0d, 0x74, 0x6e, 0xec, + 0xf8, 0xcb, 0xbb, 0x21, 0xd9, 0xdb, 0x5c, 0x99, + 0xb2, 0xc8, 0xd9, 0x1f, 0x73, 0x77, 0x72, 0x71, + 0x5c, 0x5d, 0x4b, 0xa5, 0xee, 0x3b, 0xc8, 0x25, + 0x94, 0x16, 0xdc, 0x5b, 0x3e, 0xe7, 0x65, 0xaf, + 0x9a, 0xc1, 0x88, 0xc6, 0xd6, 0xcb, 0x41, 0xa4, + 0x9c, 0x0e, 0x05, 0x4e, 0xac, 0x3d, 0x8d, 0x7b, + 0x1c, 0xc7, 0x80, 0xe6, 0x38, 0x16, 0xbd, 0xa7, + 0x51, 0x04, 0x50, 0x84, 0x11, 0x9b, 0x2f, 0x74, + 0xcb, 0xbd, 0x9e, 0xcb, 0xe6, 0x61, 0x0e, 0xfd, + 0x4b, 0x18, 0xfa, 0x7c, 0xf6, 0x8c, 0x0e, 0x1d, + 0x8d, 0x21, 0x72, 0x64, 0xb9, 0xed, 0xe6, 0x67, + 0xb4, 0x19, 0x9d, 0x88, 0x0c, 0x36, 0x16, 0x14, + 0x6b, 0x24, 0x68, 0xf1, 0x8b, 0xea, 0x34, 0x17, + 0x6a, 0xdf, 0x5c, 0x8e, 0xd8, 0x59, 0x6d, 0xdf, + 0x23, 0x72, 0x9c, 0xda, 0xe6, 0xc2, 0xd6, 0x62, + 0x5c, 0xeb, 0x76, 0xd0, 0xb5, 0xb5, 0xd7, 0x80, + 0xee, 0x29, 0xac, 0x8f, 0x23, 0xb2, 0xc8, 0xed, + 0x3d, 0x96, 0xd6, 0xae, 0xc4, 0x71, 0xc9, 0x23, + 0xf4, 0xb9, 0xef, 0x3f, 0x9c, 0x4a, 0x09, 0x01, + 0xa9, 0x13, 0xb6, 0x88, 0x2a, 0x7f, 0x89, 0x9f, + 0xe9, 0xaf, 0xff, 0x00, 0x3c, 0x6a, 0x77, 0x67, + 0xff, 0x00, 0x90, 0xe5, 0xdf, 0xf8, 0xd1, 0x7d, + 0x40, 0xa0, 0xff, 0x00, 0x12, 0xff, 0x00, 0xd3, + 0x7f, 0xfe, 0x78, 0xfe, 0x55, 0x39, 0x90, 0x7f, + 0x23, 0xcb, 0xff, 0x00, 0xf1, 0xa2, 0xfa, 0x81, + 0x07, 0x7a, 0xc8, 0xd6, 0xb0, 0x81, 0x05, 0x4b, + 0xf0, 0xfb, 0x4b, 0x73, 0x7f, 0xfc, 0xd3, 0xe0, + 0x2b, 0xc6, 0x61, 0xff, 0x00, 0x6b, 0xf8, 0x93, + 0x61, 0x33, 0xce, 0x18, 0xee, 0xad, 0x4c, 0x4c, + 0x71, 0xf9, 0xde, 0x3a, 0x9d, 0xc8, 0xf2, 0x18, + 0x72, 0x61, 0x75, 0xcc, 0xcc, 0xf9, 0xbd, 0xb2, + 0x5e, 0x79, 0xc5, 0xe0, 0x0a, 0x1d, 0x3a, 0x06, + 0x1e, 0xda, 0xc6, 0x7d, 0xb3, 0xd6, 0x99, 0xdc, + 0x31, 0x09, 0x1e, 0xfb, 0x7b, 0x9b, 0x77, 0x62, + 0xb7, 0xb9, 0x8b, 0x43, 0xd8, 0x50, 0x43, 0xfe, + 0x25, 0x3c, 0x9c, 0x86, 0x2b, 0x5f, 0xf8, 0xd7, + 0x37, 0x31, 0xb6, 0x36, 0x6b, 0x24, 0x8a, 0xea, + 0xee, 0xa9, 0x67, 0x67, 0x56, 0x36, 0x59, 0x95, + 0x9e, 0x47, 0x30, 0x78, 0xb8, 0x9e, 0x21, 0xcc, + 0xc9, 0x41, 0xcd, 0x9a, 0x02, 0x29, 0x8a, 0xba, + 0x0e, 0x85, 0xc7, 0x67, 0xb2, 0x0f, 0xf6, 0xf8, + 0x6f, 0xf3, 0x7c, 0xc2, 0x6c, 0xd6, 0x5b, 0x4d, + 0x36, 0xd1, 0xc8, 0x03, 0x58, 0xd3, 0xf3, 0xa8, + 0xdd, 0x65, 0x76, 0xe7, 0xfb, 0x3b, 0x69, 0x9d, + 0xb2, 0x27, 0x4b, 0x23, 0xed, 0xee, 0xad, 0x9c, + 0x5d, 0x6d, 0x75, 0x11, 0xa3, 0xd8, 0x4e, 0xba, + 0x55, 0x04, 0x57, 0xe2, 0x4b, 0xa1, 0x1b, 0x35, + 0x81, 0xc0, 0x19, 0x1f, 0x3c, 0x7c, 0xd3, 0x74, + 0x54, 0x9d, 0x38, 0xa9, 0xdc, 0x56, 0x4b, 0x21, + 0x23, 0x6c, 0xe0, 0x6c, 0x84, 0x97, 0x88, 0x98, + 0x1e, 0x7f, 0xac, 0x1a, 0x2b, 0x5e, 0xca, 0x80, + 0x83, 0x63, 0x5f, 0x25, 0xec, 0x37, 0x79, 0xce, + 0x63, 0x36, 0x68, 0x6d, 0x4d, 0x60, 0x85, 0xe0, + 0x35, 0x8d, 0x70, 0xfc, 0xe2, 0x1b, 0xa0, 0xab, + 0x2a, 0x00, 0xdc, 0x07, 0x52, 0xa6, 0xec, 0xb9, + 0xf6, 0x3d, 0xb2, 0xcf, 0x6c, 0x65, 0xf1, 0x64, + 0xb8, 0x3c, 0xfc, 0x60, 0xfe, 0x76, 0x23, 0x8f, + 0xc5, 0xe5, 0x2b, 0x90, 0x50, 0xb9, 0xee, 0xca, + 0xdb, 0x66, 0xf3, 0xc7, 0x7d, 0x14, 0xf2, 0x58, + 0xe6, 0x10, 0x8c, 0x31, 0xdd, 0xc0, 0x74, 0x96, + 0xef, 0x39, 0x06, 0xbd, 0xaf, 0xcf, 0x6f, 0x32, + 0x6b, 0x6b, 0x61, 0x62, 0xd6, 0x3e, 0xf2, 0xee, + 0x61, 0x14, 0x71, 0xc8, 0x2a, 0x08, 0x23, 0x78, + 0x76, 0x54, 0xe8, 0xae, 0x11, 0x5d, 0x74, 0x15, + 0x55, 0xec, 0xbb, 0x63, 0xdb, 0x06, 0x60, 0xcc, + 0xcb, 0x33, 0xbd, 0x97, 0x34, 0xba, 0x87, 0xf6, + 0x1c, 0xf5, 0x03, 0x18, 0x7e, 0x75, 0x15, 0x88, + 0xe8, 0xd0, 0x80, 0x35, 0xfe, 0x5b, 0xea, 0x8d, + 0xf8, 0x63, 0xfb, 0x5c, 0xdf, 0xed, 0x19, 0xe1, + 0x72, 0xbc, 0x8d, 0x7f, 0x96, 0xfa, 0xa2, 0xfe, + 0x18, 0xfe, 0xd7, 0x36, 0xfb, 0x46, 0x78, 0x5c, + 0x82, 0xfa, 0xa2, 0x73, 0x9f, 0x79, 0xb2, 0xf3, + 0xfe, 0x50, 0xa5, 0x54, 0x56, 0x73, 0xef, 0x36, + 0x5e, 0x7f, 0xca, 0x10, 0x63, 0x26, 0xf7, 0xab, + 0xdf, 0x3c, 0xfd, 0x62, 0xa5, 0x54, 0x56, 0x4d, + 0xef, 0x57, 0xbe, 0x79, 0xfa, 0xc5, 0x4a, 0xa0, + 0x22, 0x22, 0x02, 0x22, 0x20, 0xf8, 0xf7, 0xe3, + 0x23, 0x1e, 0xed, 0xa0, 0xb5, 0xc2, 0xd2, 0x7f, + 0xed, 0x46, 0xa1, 0x5f, 0xce, 0x72, 0xf7, 0xf8, + 0x34, 0xc7, 0xb7, 0x3b, 0xbd, 0x2e, 0x69, 0x03, + 0xd9, 0xb7, 0x45, 0x3f, 0x3c, 0x2f, 0xaf, 0x69, + 0xd2, 0x01, 0xd7, 0xad, 0x2a, 0x4e, 0x9d, 0x35, + 0x02, 0x9a, 0x7b, 0x28, 0x0b, 0x23, 0x58, 0x58, + 0x43, 0xab, 0xfa, 0x68, 0x83, 0xf3, 0x96, 0xd3, + 0x47, 0x23, 0xb6, 0x8b, 0x33, 0x21, 0xa4, 0x83, + 0x75, 0x31, 0x04, 0x03, 0xf3, 0xca, 0xfb, 0x47, + 0xe1, 0xc0, 0x3f, 0x06, 0x65, 0xed, 0x20, 0xd6, + 0x8f, 0xa8, 0xdd, 0xf2, 0xdd, 0xf2, 0x2b, 0x2f, + 0x8d, 0xb8, 0x68, 0x7f, 0x2e, 0xca, 0x6b, 0xd3, + 0xab, 0x7b, 0xb0, 0x83, 0xe2, 0x1f, 0x8a, 0xd9, + 0x63, 0xed, 0xb6, 0xb6, 0x59, 0xd8, 0xc2, 0x59, + 0x7b, 0x1b, 0x26, 0x04, 0x54, 0xf8, 0xd4, 0xc0, + 0xef, 0xaa, 0xb1, 0xf8, 0x59, 0x95, 0xbe, 0xeb, + 0x6b, 0x21, 0x99, 0xec, 0x3c, 0xdd, 0x9c, 0x6f, + 0x9c, 0xd4, 0x1a, 0x54, 0x0c, 0x0d, 0x1d, 0xba, + 0xba, 0xbd, 0xc5, 0xf7, 0x01, 0x51, 0xa8, 0xf0, + 0x26, 0x93, 0xac, 0x93, 0xf9, 0x6a, 0x41, 0x59, + 0xfc, 0x47, 0x05, 0xdb, 0x17, 0x99, 0x80, 0x2a, + 0x4b, 0x63, 0xa0, 0x1f, 0x6a, 0xc2, 0xbe, 0x31, + 0xb3, 0x51, 0x4b, 0xf1, 0x16, 0x56, 0x70, 0x3a, + 0x82, 0xee, 0x12, 0x4d, 0x0e, 0xe4, 0x8d, 0x25, + 0x7e, 0x8d, 0xd3, 0xc5, 0xbb, 0xc4, 0x9a, 0x69, + 0x4a, 0xf0, 0x9f, 0x0a, 0x0c, 0x9d, 0x6b, 0x08, + 0x88, 0x32, 0x35, 0x85, 0xf9, 0xaf, 0x39, 0x8a, + 0x5e, 0xb8, 0xbf, 0x38, 0x1d, 0xef, 0x13, 0x6e, + 0x1f, 0x9e, 0xe5, 0xfa, 0x4d, 0x2a, 0x46, 0xad, + 0x1d, 0xe4, 0x10, 0x7b, 0x0a, 0x08, 0xd8, 0xfc, + 0xa4, 0x11, 0x42, 0x20, 0x00, 0x83, 0xbf, 0x57, + 0x29, 0xce, 0xf1, 0xd5, 0xa3, 0x72, 0x9a, 0x6a, + 0x88, 0x83, 0xe7, 0x3b, 0x77, 0xf8, 0x68, 0xfb, + 0xe9, 0xe4, 0xcd, 0xf2, 0x16, 0xb5, 0xb7, 0x0f, + 0x25, 0xd7, 0x16, 0x55, 0x0d, 0xc6, 0xef, 0x9f, + 0x11, 0xd5, 0x88, 0xee, 0xb4, 0xaf, 0x95, 0xde, + 0x58, 0xdf, 0x58, 0x5c, 0x3a, 0x1b, 0xc8, 0x24, + 0xb7, 0x99, 0x87, 0x4b, 0x24, 0x69, 0x61, 0xe0, + 0x20, 0x2f, 0xd3, 0x4b, 0x5c, 0xd6, 0xd0, 0x5c, + 0x33, 0x9b, 0xb8, 0x8d, 0x93, 0x33, 0xe6, 0x48, + 0xd6, 0xb8, 0x77, 0x71, 0x02, 0x83, 0xf3, 0x2b, + 0xe5, 0x96, 0x62, 0x31, 0xbd, 0xd2, 0x11, 0xa0, + 0x62, 0x25, 0xd4, 0xed, 0x55, 0x58, 0xb6, 0x67, + 0x60, 0xb3, 0xdc, 0xfa, 0x66, 0x38, 0x42, 0xeb, + 0x5b, 0x1a, 0x8e, 0x72, 0xee, 0x56, 0x96, 0x8c, + 0x3f, 0xd4, 0x07, 0xcb, 0x3d, 0xa5, 0xf7, 0x28, + 0xb2, 0xac, 0xae, 0x07, 0x07, 0x43, 0x67, 0x6f, + 0x13, 0xc6, 0xa7, 0xb2, 0x26, 0x35, 0xdc, 0x2d, + 0x01, 0x75, 0x69, 0xdd, 0xd3, 0x4e, 0x0e, 0xe2, + 0x0e, 0x2c, 0x9f, 0x29, 0xb3, 0xc9, 0xb2, 0xf8, + 0x72, 0xeb, 0x16, 0x60, 0x82, 0x01, 0x41, 0xbe, + 0xe7, 0x1f, 0x29, 0xce, 0x3b, 0xa4, 0xee, 0xae, + 0xd4, 0x44, 0x0f, 0xcb, 0xc2, 0xbe, 0x19, 0xf8, + 0xa4, 0xc7, 0xbb, 0x6d, 0x2f, 0x0b, 0x5a, 0x48, + 0x2c, 0x87, 0x48, 0x15, 0xff, 0x00, 0x86, 0xd5, + 0xf7, 0x3f, 0x0e, 0xe2, 0x02, 0x46, 0xad, 0x1d, + 0xa4, 0x1f, 0x3e, 0xfc, 0x18, 0x6b, 0x9b, 0x91, + 0x5f, 0x87, 0x02, 0x09, 0xb9, 0xa8, 0x07, 0x46, + 0x8c, 0x0c, 0x0b, 0xe8, 0x25, 0xcd, 0x63, 0x4b, + 0x9d, 0xe4, 0xb4, 0x12, 0xee, 0xd0, 0xd2, 0x50, + 0x92, 0x75, 0xe9, 0x44, 0x1f, 0x9c, 0x36, 0x82, + 0xf6, 0xeb, 0x35, 0xce, 0x6f, 0x33, 0x09, 0x5a, + 0xe7, 0x3a, 0xe2, 0x57, 0x38, 0x68, 0x3a, 0x1b, + 0x5a, 0x34, 0x72, 0x42, 0x8e, 0xe6, 0xa5, 0xf9, + 0x8e, 0xe0, 0x2b, 0xf5, 0x0d, 0x5d, 0xbf, 0xa3, + 0xb6, 0x98, 0x9d, 0xbe, 0x78, 0x50, 0x7e, 0x5e, + 0xe6, 0xa5, 0xf9, 0x8e, 0xe0, 0x2b, 0x6d, 0xac, + 0x32, 0xfb, 0x4c, 0x5e, 0x23, 0xbc, 0xb6, 0xee, + 0x1d, 0xf5, 0xfa, 0x73, 0x13, 0xb7, 0xcf, 0x0a, + 0xc1, 0x2e, 0xdf, 0x3b, 0xdb, 0xe8, 0x35, 0xba, + 0x38, 0xe6, 0xb7, 0xe6, 0x64, 0x68, 0x7c, 0x72, + 0x47, 0x85, 0xcd, 0x3a, 0x88, 0x22, 0x84, 0x77, + 0x41, 0x5f, 0x07, 0xdb, 0x0d, 0x89, 0xcc, 0xb6, + 0x7a, 0xf6, 0x57, 0x36, 0x27, 0xcb, 0x96, 0xb9, + 0xc4, 0xdb, 0xdc, 0xb4, 0x54, 0x06, 0x9d, 0x4d, + 0x92, 0x9e, 0x49, 0xed, 0xaf, 0xbe, 0x0a, 0xee, + 0xac, 0x16, 0x83, 0x50, 0x74, 0x82, 0x35, 0x7c, + 0x88, 0x3f, 0x35, 0xb3, 0x37, 0xcd, 0x23, 0xb6, + 0xf6, 0x36, 0x5e, 0x4e, 0xcb, 0x6a, 0x53, 0x98, + 0x12, 0x3c, 0x32, 0x87, 0x58, 0xc1, 0x5a, 0x69, + 0x52, 0xfb, 0x2f, 0xb1, 0x19, 0xc6, 0xd1, 0x5c, + 0x34, 0xc5, 0x13, 0xad, 0xec, 0x6b, 0xfa, 0xcb, + 0xb9, 0x01, 0x0d, 0x0d, 0xfe, 0xa5, 0x7c, 0xa7, + 0x76, 0x97, 0xdc, 0x86, 0x4f, 0x94, 0x35, 0xfc, + 0xe0, 0xb0, 0xb5, 0x0f, 0xf9, 0xe2, 0x18, 0xf1, + 0x70, 0xe1, 0x0b, 0xac, 0x0a, 0x0a, 0x0d, 0x5b, + 0xdc, 0x48, 0x39, 0x72, 0xcc, 0xb6, 0xd7, 0x2a, + 0xb0, 0x83, 0x2e, 0xb3, 0x66, 0x1b, 0x7b, 0x76, + 0xe0, 0x63, 0x4e, 0xb3, 0xba, 0x5c, 0xe3, 0xbe, + 0x4a, 0xf9, 0x7f, 0xe2, 0xa6, 0xd5, 0x3e, 0xf6, + 0xe3, 0xa8, 0x6c, 0x6a, 0x6d, 0xad, 0x9c, 0x1d, + 0x76, 0xf6, 0xd6, 0x92, 0x48, 0x34, 0xb5, 0x9a, + 0x35, 0x86, 0x77, 0xcf, 0x69, 0x7d, 0x6d, 0x3c, + 0x6a, 0xeb, 0xee, 0x1d, 0x35, 0x28, 0x3e, 0x13, + 0xf8, 0x7f, 0xb2, 0x2f, 0xcf, 0xf3, 0x96, 0xba, + 0xea, 0x33, 0xd5, 0xd6, 0x74, 0x92, 0xe4, 0x91, + 0x40, 0xf2, 0x34, 0xb6, 0x2e, 0xef, 0x81, 0x7d, + 0x7b, 0x6a, 0x36, 0x72, 0xdb, 0x68, 0x32, 0x59, + 0xb2, 0xd7, 0x80, 0xc7, 0xd0, 0x3e, 0xd6, 0x4a, + 0x7e, 0xce, 0x46, 0x8f, 0x10, 0x8e, 0xc7, 0xe6, + 0x9e, 0xc2, 0x98, 0xd7, 0xaf, 0x73, 0xb3, 0x54, + 0x41, 0xf9, 0x9e, 0xe2, 0xca, 0xf2, 0xca, 0xee, + 0x4b, 0x79, 0xa3, 0x7c, 0x73, 0xdb, 0xbc, 0xb5, + 0xc2, 0x86, 0xa1, 0xcd, 0x3a, 0xc1, 0x5f, 0x6d, + 0xfc, 0x3e, 0xda, 0xb7, 0x67, 0xf9, 0x48, 0x86, + 0xea, 0xa3, 0x30, 0xb3, 0x01, 0x93, 0xd7, 0x41, + 0x7b, 0x47, 0x93, 0x28, 0xee, 0x6b, 0x1b, 0xea, + 0xd9, 0x57, 0x6f, 0x9e, 0x15, 0x8a, 0x9a, 0xef, + 0xf6, 0xf7, 0x7b, 0x08, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x12, 0xa8, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0xb9, + 0x73, 0x6f, 0xe5, 0x77, 0x9f, 0x61, 0x27, 0xd4, + 0x72, 0xea, 0x5a, 0x2f, 0xe1, 0x7c, 0xf6, 0x37, + 0x10, 0x47, 0x4c, 0x73, 0x44, 0xf6, 0x36, 0xba, + 0x05, 0x5c, 0xd2, 0x05, 0x78, 0x50, 0x54, 0x7f, + 0x0d, 0x48, 0xea, 0x39, 0xfe, 0xdc, 0xfd, 0x50, + 0xad, 0x8a, 0x85, 0x61, 0xb2, 0x7b, 0x7d, 0x96, + 0xc2, 0xe8, 0x2c, 0x2f, 0x22, 0xb7, 0x89, 0xce, + 0xc6, 0xe6, 0x32, 0x41, 0x42, 0x48, 0xa7, 0xe7, + 0x46, 0xe5, 0xd3, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0xbf, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0b, 0xa2, 0x2a, + 0x5f, 0x52, 0xfe, 0x26, 0xfd, 0xe6, 0xcf, 0xde, + 0x37, 0xf8, 0x29, 0xd4, 0xbf, 0x89, 0x9f, 0x79, + 0xb3, 0xf7, 0x8d, 0xfe, 0x0a, 0x0f, 0x2e, 0xff, + 0x00, 0xf5, 0x46, 0x3e, 0xc3, 0x5b, 0xff, 0x00, + 0x45, 0xaa, 0xfd, 0xfd, 0x0b, 0xe6, 0xff, 0x00, + 0x07, 0xed, 0xd7, 0x59, 0x0c, 0xc8, 0xdc, 0xc2, + 0x6f, 0x86, 0x83, 0x73, 0xce, 0x0a, 0xd0, 0x0c, + 0x1e, 0xae, 0x9a, 0x86, 0xf2, 0xed, 0xea, 0x8f, + 0xc5, 0x0f, 0xbd, 0x19, 0xab, 0xd6, 0x37, 0xf8, + 0x28, 0x2f, 0x68, 0xa8, 0x9d, 0x51, 0xf8, 0xa1, + 0xf7, 0x9b, 0x3f, 0x78, 0xdf, 0xe0, 0xa7, 0x54, + 0x7e, 0x28, 0x7d, 0xe6, 0xcf, 0xde, 0x37, 0xf8, + 0x28, 0x2f, 0x68, 0xa8, 0x9d, 0x51, 0xf8, 0xa1, + 0xf7, 0x9b, 0x3f, 0x78, 0xdf, 0xe0, 0xa7, 0x54, + 0x7e, 0x28, 0x7d, 0xe6, 0xcf, 0xde, 0x37, 0xf8, + 0x28, 0x2f, 0x68, 0xa8, 0x9d, 0x51, 0xf8, 0xa1, + 0xf7, 0x9b, 0x3f, 0x78, 0xdf, 0xe0, 0xa7, 0x54, + 0x7e, 0x28, 0x7d, 0xe6, 0xcf, 0xde, 0x37, 0xf8, + 0x28, 0x2f, 0x68, 0xa8, 0x9d, 0x51, 0xf8, 0xa1, + 0xf7, 0x9b, 0x3f, 0x78, 0xdf, 0xe0, 0xa7, 0x54, + 0x7e, 0x28, 0x7d, 0xe6, 0xcf, 0xde, 0x37, 0xf8, + 0x28, 0x2f, 0x68, 0xa8, 0x9d, 0x51, 0xf8, 0xa1, + 0xf7, 0x9b, 0x3f, 0x78, 0xdf, 0xe0, 0xa7, 0x54, + 0x7e, 0x28, 0x7d, 0xe6, 0xcf, 0xde, 0x37, 0xf8, + 0x28, 0x2f, 0x68, 0xa8, 0x9d, 0x51, 0xf8, 0xa1, + 0xf7, 0x9b, 0x3f, 0x78, 0xdf, 0xe0, 0xac, 0xf5, + 0x47, 0xe2, 0x87, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, + 0x82, 0x83, 0xbb, 0xf1, 0x33, 0xfd, 0x3a, 0xde, + 0xc5, 0xc3, 0x2b, 0xdf, 0x53, 0xb9, 0x0f, 0xf2, + 0x4c, 0xbf, 0xff, 0x00, 0x1a, 0x2f, 0xa8, 0x15, + 0x2e, 0xff, 0x00, 0x65, 0x76, 0xff, 0x00, 0x32, + 0x80, 0x5b, 0xe6, 0x17, 0xb1, 0x5c, 0x42, 0x1c, + 0x1d, 0xcd, 0xbe, 0x41, 0x4a, 0x8d, 0x03, 0xc9, + 0x89, 0xab, 0x74, 0x39, 0x17, 0xe2, 0x5c, 0x10, + 0xb2, 0x18, 0xb3, 0x18, 0xd9, 0x1c, 0x4d, 0x6b, + 0x23, 0x60, 0x78, 0x00, 0x06, 0xf8, 0xa0, 0x7e, + 0xcb, 0x78, 0x20, 0xbe, 0xa2, 0xa2, 0x75, 0x47, + 0xe2, 0x87, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, 0x82, + 0x9d, 0x51, 0xf8, 0xa1, 0xf7, 0x9b, 0x3f, 0x78, + 0xdf, 0xe0, 0xa0, 0xbd, 0xa2, 0xa2, 0x75, 0x47, + 0xe2, 0x87, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, 0x82, + 0x9d, 0x51, 0xf8, 0xa1, 0xf7, 0x9b, 0x3f, 0x78, + 0xdf, 0xe0, 0xa0, 0xbd, 0xa2, 0xa2, 0x75, 0x47, + 0xe2, 0x87, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, 0x82, + 0x9d, 0x51, 0xf8, 0xa1, 0xf7, 0x9b, 0x3f, 0x78, + 0xdf, 0xe0, 0xa0, 0xbd, 0xa2, 0xa2, 0x75, 0x47, + 0xe2, 0x87, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, 0x82, + 0x9d, 0x51, 0xf8, 0xa1, 0xf7, 0x9b, 0x3f, 0x78, + 0xdf, 0xe0, 0xa0, 0xbd, 0xa2, 0xa2, 0x75, 0x47, + 0xe2, 0x87, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, 0x82, + 0x9d, 0x51, 0xf8, 0x9f, 0xf7, 0x9b, 0x3f, 0x78, + 0xdf, 0xe0, 0xa0, 0xbd, 0xa2, 0xa2, 0x75, 0x47, + 0xe2, 0x7f, 0xde, 0x6c, 0xfd, 0xe3, 0x7f, 0x82, + 0x9d, 0x51, 0xf8, 0xa1, 0xf7, 0x9b, 0x3f, 0x78, + 0xdf, 0xe0, 0xa0, 0xbd, 0x8d, 0x7f, 0x96, 0xfa, + 0xa2, 0xfe, 0x18, 0xfe, 0xd7, 0x36, 0xfb, 0x46, + 0x78, 0x5c, 0x9d, 0x4f, 0xf8, 0x9f, 0xf7, 0x9b, + 0x0e, 0xf8, 0xe7, 0x1b, 0xdb, 0xf5, 0x2a, 0x4b, + 0x62, 0x36, 0x73, 0x33, 0xc9, 0x3d, 0xb0, 0xe6, + 0x1c, 0xd9, 0x75, 0xc1, 0x69, 0x69, 0x8d, 0xd8, + 0xb4, 0x8a, 0xd4, 0x9f, 0x15, 0xa8, 0x2d, 0x2a, + 0x2b, 0x38, 0xf7, 0xab, 0x2f, 0x3f, 0xe5, 0x0a, + 0x55, 0x45, 0x67, 0x1e, 0xf5, 0x65, 0xe7, 0xfc, + 0xa1, 0x03, 0x26, 0xf7, 0xab, 0xdf, 0x3c, 0xfd, + 0x62, 0xa5, 0x54, 0x56, 0x4d, 0xef, 0x57, 0xbe, + 0x79, 0xfa, 0xc5, 0x4a, 0xa0, 0x22, 0x22, 0x02, + 0x22, 0xd7, 0x73, 0x75, 0x6d, 0x67, 0x04, 0x97, + 0x37, 0x4f, 0x11, 0xc3, 0x13, 0x71, 0x39, 0xc7, + 0x70, 0x21, 0x11, 0x33, 0x31, 0x11, 0x1a, 0xcd, + 0xa7, 0x48, 0x88, 0xf1, 0xd5, 0xb6, 0x83, 0x4e, + 0x2d, 0x41, 0x72, 0x5c, 0xe7, 0x39, 0x25, 0xa1, + 0x2d, 0xb8, 0xbd, 0x86, 0x37, 0x0d, 0x6d, 0x73, + 0xdb, 0x8b, 0x82, 0xb5, 0x5f, 0x3d, 0xda, 0x0d, + 0xbb, 0xcc, 0x73, 0x12, 0xf8, 0x2c, 0xab, 0x67, + 0x6a, 0x49, 0xd2, 0xd3, 0xfa, 0xd7, 0x0f, 0xeb, + 0x38, 0x6a, 0xee, 0x2a, 0xb9, 0xad, 0x4b, 0x8e, + 0x92, 0xed, 0x24, 0x9d, 0x75, 0x59, 0x6f, 0xe6, + 0xe2, 0x27, 0x4a, 0xc6, 0xaf, 0x77, 0xca, 0xff, + 0x00, 0x6f, 0xe5, 0xbd, 0x77, 0x79, 0x8b, 0x4e, + 0x3d, 0x7f, 0x52, 0xba, 0x4c, 0xfe, 0x2f, 0xb0, + 0xfc, 0x57, 0xb3, 0x1d, 0x3a, 0x3e, 0x13, 0xc4, + 0xb3, 0xf1, 0x56, 0xcc, 0xf4, 0xe8, 0xfb, 0xfc, + 0x4b, 0xe3, 0x9a, 0x53, 0xba, 0xa9, 0xea, 0xed, + 0xd2, 0xd5, 0xff, 0x00, 0x5d, 0xc1, 0xf9, 0xb9, + 0x3f, 0x1d, 0xaf, 0xb1, 0xfc, 0x55, 0xb3, 0x3d, + 0x3a, 0x3e, 0xff, 0x00, 0x12, 0x7c, 0x55, 0xb3, + 0x3d, 0x3a, 0x3e, 0xff, 0x00, 0x12, 0xf8, 0xe7, + 0x75, 0x3b, 0xa9, 0xea, 0xef, 0xd3, 0x07, 0xfd, + 0x77, 0x07, 0xe6, 0xdf, 0xf7, 0x5f, 0x63, 0xf8, + 0xab, 0x66, 0x7a, 0x74, 0x7d, 0xfe, 0x24, 0xf8, + 0xab, 0x66, 0x7a, 0x74, 0x7d, 0xfe, 0x25, 0xf1, + 0xce, 0xea, 0x77, 0x53, 0xd5, 0xdf, 0xa6, 0x0f, + 0xfa, 0xee, 0x0f, 0xcd, 0xbf, 0xee, 0xbe, 0xc7, + 0xf1, 0x56, 0xcc, 0xf4, 0xe8, 0xfb, 0xfc, 0x49, + 0xf1, 0x56, 0xcc, 0xf4, 0xe8, 0xfb, 0xfc, 0x4b, + 0xe3, 0x9d, 0xd4, 0xee, 0xa7, 0xab, 0xbf, 0x4c, + 0x1f, 0xf5, 0xdc, 0x1f, 0x9b, 0x7f, 0xdd, 0x7d, + 0x8f, 0xe2, 0xad, 0x99, 0xe9, 0xd1, 0xf7, 0xf8, + 0x93, 0xe2, 0xad, 0x99, 0xe9, 0xd1, 0xf7, 0xf8, + 0x97, 0xc7, 0x3b, 0xa9, 0xdd, 0x4f, 0x57, 0x7e, + 0x98, 0x3f, 0xeb, 0xb8, 0x3f, 0x36, 0xff, 0x00, + 0xba, 0xfb, 0x1f, 0xc5, 0x5b, 0x33, 0xd3, 0xa3, + 0xef, 0xf1, 0x27, 0xc5, 0x5b, 0x33, 0xd3, 0xa3, + 0xef, 0xf1, 0x2f, 0x8e, 0x77, 0x53, 0xba, 0x9e, + 0xae, 0xfd, 0x30, 0x7f, 0xd7, 0x70, 0x7e, 0x6d, + 0xff, 0x00, 0x75, 0xf6, 0x3f, 0x8a, 0xb6, 0x67, + 0xa7, 0x47, 0xdf, 0xe2, 0x4f, 0x8a, 0xb6, 0x67, + 0xa7, 0x47, 0xdf, 0xe2, 0x5f, 0x1c, 0xee, 0xa7, + 0x75, 0x3d, 0x5d, 0xfa, 0x60, 0xff, 0x00, 0xae, + 0xe0, 0xfc, 0xdb, 0xfe, 0xeb, 0xec, 0x7f, 0x15, + 0x6c, 0xcf, 0x4e, 0x8f, 0xbf, 0xc4, 0x9f, 0x15, + 0x6c, 0xcf, 0x4e, 0x8f, 0xbf, 0xc4, 0xbe, 0x39, + 0xdd, 0x4e, 0xea, 0x7a, 0xbb, 0xf4, 0xc1, 0xff, + 0x00, 0x5d, 0xc1, 0xf9, 0xb7, 0xfd, 0xd7, 0xd8, + 0xfe, 0x2a, 0xd9, 0x9e, 0x9d, 0x1f, 0x7f, 0x89, + 0x3e, 0x2a, 0xd9, 0x9e, 0x9d, 0x1f, 0x7f, 0x89, + 0x7c, 0x73, 0xba, 0x9d, 0xd4, 0xf5, 0x77, 0xe9, + 0x83, 0xfe, 0xbb, 0x83, 0xf3, 0x6f, 0xfb, 0xaf, + 0xb1, 0xfc, 0x55, 0xb3, 0x3d, 0x3a, 0x3e, 0xff, + 0x00, 0x12, 0x7c, 0x55, 0xb3, 0x3d, 0x3a, 0x3e, + 0xff, 0x00, 0x12, 0xf8, 0xe7, 0x75, 0x3b, 0xa9, + 0xea, 0xef, 0xd3, 0x07, 0xfd, 0x77, 0x07, 0xe6, + 0xdf, 0xf7, 0x5f, 0x63, 0xf8, 0xab, 0x66, 0x7a, + 0x74, 0x7d, 0xfe, 0x24, 0xf8, 0xab, 0x66, 0x7a, + 0x74, 0x7d, 0xfe, 0x25, 0xf1, 0xce, 0xea, 0x77, + 0x53, 0xd5, 0xdf, 0xa6, 0x0f, 0xfa, 0xee, 0x0f, + 0xcd, 0xbf, 0xee, 0xbe, 0xc7, 0xf1, 0x56, 0xcc, + 0xf4, 0xe8, 0xfb, 0xfc, 0x49, 0xf1, 0x56, 0xcc, + 0xf4, 0xe8, 0xfb, 0xfc, 0x4b, 0xe3, 0x9d, 0xd4, + 0xee, 0xa7, 0xab, 0xbf, 0x4c, 0x1f, 0xf5, 0xdc, + 0x1f, 0x9b, 0x7f, 0xdd, 0x7d, 0x8f, 0xe2, 0xad, + 0x99, 0xe9, 0xd1, 0xf7, 0xf8, 0x93, 0xe2, 0xad, + 0x99, 0xe9, 0xd1, 0xf7, 0xf8, 0x97, 0xc7, 0x3b, + 0xa9, 0xdd, 0x4f, 0x57, 0x7e, 0x98, 0x3f, 0xeb, + 0xb8, 0x3f, 0x36, 0xff, 0x00, 0xba, 0xfb, 0x1f, + 0xc5, 0x5b, 0x33, 0xd3, 0xa3, 0xef, 0xf1, 0x27, + 0xc5, 0x5b, 0x33, 0xd3, 0xa3, 0xef, 0xf1, 0x2f, + 0x8e, 0x77, 0x53, 0xba, 0x9e, 0xae, 0xfd, 0x30, + 0x7f, 0xd7, 0x70, 0x7e, 0x6d, 0xff, 0x00, 0x75, + 0xf6, 0x3f, 0x8a, 0xb6, 0x67, 0xa7, 0x47, 0xdf, + 0xe2, 0x4f, 0x8a, 0xb6, 0x67, 0xa7, 0x47, 0xdf, + 0xe2, 0x5f, 0x1c, 0xee, 0xa7, 0x75, 0x3d, 0x5d, + 0xfa, 0x60, 0xff, 0x00, 0xae, 0xe0, 0xfc, 0xdb, + 0xfe, 0xeb, 0xec, 0x7f, 0x15, 0x6c, 0xcf, 0x4e, + 0x8f, 0xbf, 0xc4, 0x9f, 0x15, 0x6c, 0xcf, 0x4e, + 0x8f, 0xbf, 0xc4, 0xbe, 0x39, 0xdd, 0x4e, 0xea, + 0x7a, 0xbb, 0xf4, 0xc1, 0xff, 0x00, 0x5d, 0xc1, + 0xf9, 0xb7, 0xfd, 0xd7, 0xd8, 0xfe, 0x2a, 0xd9, + 0x9e, 0x9d, 0x1f, 0x7f, 0x89, 0x3e, 0x2a, 0xd9, + 0x9e, 0x9d, 0x1f, 0x7f, 0x89, 0x7c, 0x73, 0xba, + 0x9d, 0xd4, 0xf5, 0x77, 0xe9, 0x83, 0xfe, 0xbb, + 0x83, 0xf3, 0x6f, 0xfb, 0xaf, 0xb1, 0xfc, 0x55, + 0xb3, 0x3d, 0x3a, 0x3e, 0xff, 0x00, 0x12, 0x7c, + 0x55, 0xb3, 0x3d, 0x3a, 0x3e, 0xff, 0x00, 0x12, + 0xf8, 0xe7, 0x75, 0x3b, 0xa9, 0xea, 0xef, 0xd3, + 0x07, 0xfd, 0x77, 0x07, 0xe6, 0xdf, 0xf7, 0x5f, + 0x63, 0xf8, 0xab, 0x66, 0x7a, 0x74, 0x7d, 0xfe, + 0x24, 0xf8, 0xab, 0x66, 0x7a, 0x74, 0x7d, 0xfe, + 0x25, 0xf1, 0xce, 0xea, 0x77, 0x53, 0xd5, 0xdf, + 0xa6, 0x0f, 0xfa, 0xee, 0x0f, 0xcd, 0xbf, 0xee, + 0xbe, 0xc7, 0xf1, 0x56, 0xcc, 0xf4, 0xe8, 0xfb, + 0xfc, 0x49, 0xf1, 0x56, 0xcc, 0xf4, 0xe8, 0xfb, + 0xfc, 0x4b, 0xe3, 0x9d, 0xd4, 0xee, 0xa7, 0xab, + 0xbf, 0x4c, 0x1f, 0xf5, 0xdc, 0x1f, 0x9b, 0x7f, + 0xdd, 0x7d, 0x8f, 0xe2, 0xad, 0x99, 0xe9, 0xd1, + 0xf7, 0xf8, 0x96, 0x0e, 0xd5, 0xec, 0xc0, 0x15, + 0x37, 0xd1, 0xf0, 0x9e, 0x25, 0xf1, 0xde, 0xea, + 0x0e, 0xdd, 0x53, 0xd5, 0xdf, 0xa6, 0x0f, 0xfa, + 0xee, 0x0f, 0xcd, 0xbf, 0xee, 0xbe, 0xd1, 0x6f, + 0x9f, 0x64, 0x17, 0x4e, 0x0d, 0x82, 0xf6, 0x17, + 0x39, 0xda, 0x9b, 0xce, 0x36, 0xbc, 0x15, 0x5d, + 0xa2, 0x87, 0x4b, 0x4d, 0x47, 0x61, 0x7c, 0x2e, + 0xb5, 0xd6, 0x2a, 0xa7, 0x36, 0x7f, 0x6b, 0xb3, + 0x4c, 0xa2, 0x46, 0xc6, 0xe7, 0x9b, 0x8b, 0x2a, + 0x80, 0xf8, 0x1e, 0x6a, 0x43, 0x7f, 0xa8, 0x77, + 0x15, 0xe9, 0xe6, 0xe3, 0x5f, 0xaa, 0xba, 0x7b, + 0xd9, 0xfc, 0xcf, 0xf6, 0xf5, 0xeb, 0x5d, 0x70, + 0x5e, 0x6f, 0x31, 0x1f, 0x6d, 0xa3, 0x4d, 0x7f, + 0x17, 0xd6, 0x2a, 0x10, 0x2e, 0x6c, 0xbb, 0x32, + 0xb3, 0xcd, 0x2c, 0x99, 0x79, 0x66, 0xec, 0x71, + 0xbf, 0xb8, 0x41, 0xf9, 0xa7, 0xb2, 0xba, 0x46, + 0xa5, 0xa6, 0x27, 0xf1, 0x78, 0x36, 0xac, 0xd6, + 0xd3, 0x5b, 0x46, 0xdb, 0x57, 0x85, 0xab, 0x3c, + 0xc4, 0x45, 0x87, 0xbd, 0xac, 0x61, 0x73, 0xcd, + 0x1a, 0x06, 0x95, 0x28, 0x1c, 0xf6, 0xb5, 0xb8, + 0x9c, 0x40, 0x68, 0xd6, 0x4a, 0xe1, 0x9b, 0x35, + 0x63, 0x49, 0x6c, 0x2d, 0xc4, 0x77, 0xdd, 0xa9, + 0x71, 0xdd, 0x5d, 0xbe, 0xe1, 0xfa, 0xe9, 0x1b, + 0x4d, 0x1a, 0x38, 0xd6, 0x80, 0x1c, 0xe3, 0x84, + 0x0c, 0x44, 0xea, 0x03, 0x5a, 0x68, 0x78, 0xf0, + 0x74, 0x3b, 0x30, 0xbb, 0x71, 0xfd, 0xa1, 0x68, + 0xdc, 0x01, 0x78, 0xf6, 0xab, 0xad, 0xd9, 0x5c, + 0xba, 0x63, 0xcb, 0x5a, 0xc6, 0x73, 0xb7, 0x92, + 0x08, 0x99, 0xac, 0xb7, 0x8c, 0xaf, 0x26, 0xf3, + 0x22, 0x8f, 0x43, 0x58, 0x65, 0x1f, 0x38, 0x54, + 0x8f, 0x08, 0x53, 0x15, 0xb4, 0xf8, 0x42, 0x96, + 0xc9, 0x4a, 0xfd, 0xd7, 0x88, 0xf7, 0x34, 0x7b, + 0x55, 0xcf, 0xad, 0x77, 0x0a, 0x7b, 0x55, 0xcf, + 0xad, 0x77, 0x0a, 0xdf, 0xd6, 0x19, 0x27, 0xa8, + 0x77, 0x07, 0xe9, 0x27, 0x58, 0x64, 0x9e, 0xa1, + 0xdc, 0x1f, 0xa4, 0xad, 0xdb, 0xc9, 0xd3, 0x2a, + 0xfa, 0x8c, 0x3d, 0x70, 0xd1, 0xed, 0x57, 0x3e, + 0xb5, 0xdc, 0x29, 0xed, 0x57, 0x3e, 0xb5, 0xdc, + 0x2b, 0x7f, 0x58, 0x64, 0x9e, 0xa1, 0xdc, 0x1f, + 0xa4, 0x9d, 0x61, 0x92, 0x7a, 0x87, 0x70, 0x7e, + 0x92, 0x76, 0xf2, 0x74, 0x49, 0xea, 0x30, 0xf5, + 0xc3, 0x47, 0xb5, 0x5c, 0xfa, 0xd7, 0x70, 0xa7, + 0xb5, 0x5c, 0xfa, 0xd7, 0x70, 0xad, 0xfd, 0x61, + 0x92, 0x7a, 0x87, 0x70, 0x7e, 0x92, 0x75, 0x86, + 0x49, 0xea, 0x1d, 0xc1, 0xfa, 0x49, 0xdb, 0xc9, + 0xd1, 0x27, 0xa8, 0xc3, 0xd7, 0x0d, 0x1e, 0xd5, + 0x73, 0xeb, 0x5d, 0xc2, 0x9e, 0xd5, 0x73, 0xeb, + 0x5d, 0xc2, 0xb7, 0xf5, 0x86, 0x49, 0xea, 0x1d, + 0xc1, 0xfa, 0x49, 0xd6, 0x19, 0x27, 0xa8, 0x77, + 0x07, 0xe9, 0x27, 0x6f, 0x27, 0x44, 0x9e, 0xa3, + 0x0f, 0x5c, 0x34, 0x7b, 0x55, 0xcf, 0xad, 0x77, + 0x0a, 0x7b, 0x55, 0xcf, 0xad, 0x77, 0x0a, 0xdf, + 0xd6, 0x19, 0x27, 0xa8, 0x77, 0x07, 0xe9, 0x27, + 0x58, 0x64, 0x9e, 0xa1, 0xdc, 0x1f, 0xa4, 0x9d, + 0xbc, 0x9d, 0x12, 0x7a, 0x8c, 0x3d, 0x70, 0xd1, + 0xed, 0x57, 0x3e, 0xb5, 0xdc, 0x29, 0xed, 0x57, + 0x3e, 0xb5, 0xdc, 0x2b, 0x7f, 0x58, 0x64, 0x9e, + 0xa1, 0xdc, 0x1f, 0xa4, 0x9d, 0x61, 0x92, 0x7a, + 0x87, 0x70, 0x7e, 0x92, 0x76, 0xf2, 0x74, 0x49, + 0xea, 0x30, 0xf5, 0xc3, 0x47, 0xb5, 0x5c, 0xfa, + 0xd7, 0x70, 0xa7, 0xb5, 0x5c, 0xfa, 0xd7, 0x70, + 0xad, 0xfd, 0x61, 0x92, 0x7a, 0x87, 0x70, 0x7e, + 0x92, 0x75, 0x86, 0x49, 0xea, 0x1d, 0xc1, 0xfa, + 0x49, 0xdb, 0xc9, 0xd1, 0x27, 0xa8, 0xc3, 0xd7, + 0x0d, 0x1e, 0xd5, 0x73, 0xeb, 0x5d, 0xc2, 0x9e, + 0xd5, 0x73, 0xeb, 0x5d, 0xc2, 0xb7, 0xf5, 0x86, + 0x49, 0xea, 0x1d, 0xc1, 0xfa, 0x49, 0xd6, 0x19, + 0x27, 0xa8, 0x77, 0x07, 0xe9, 0x27, 0x6f, 0x27, + 0x44, 0x9e, 0xa3, 0x0f, 0x5c, 0x34, 0x7b, 0x55, + 0xcf, 0xad, 0x77, 0x0a, 0x7b, 0x55, 0xcf, 0xad, + 0x77, 0x0a, 0xdf, 0xd6, 0x19, 0x27, 0xa8, 0x77, + 0x07, 0xe9, 0x27, 0x58, 0x64, 0x9e, 0xa1, 0xdc, + 0x1f, 0xa4, 0x9d, 0xbc, 0x9d, 0x12, 0x7a, 0x8c, + 0x3d, 0x70, 0xd1, 0xed, 0x57, 0x3e, 0xb5, 0xdc, + 0x29, 0xed, 0x57, 0x3e, 0xb5, 0xdc, 0x2b, 0x7f, + 0x58, 0x64, 0x9e, 0xa1, 0xdc, 0x1f, 0xa4, 0x9d, + 0x61, 0x92, 0x7a, 0x87, 0x70, 0x7e, 0x92, 0x76, + 0xf2, 0x74, 0x49, 0xea, 0x30, 0xf5, 0xc3, 0x47, + 0xb5, 0x5c, 0xfa, 0xd7, 0x70, 0xa7, 0xb5, 0x5c, + 0xfa, 0xd7, 0x70, 0xad, 0xfd, 0x61, 0x92, 0x7a, + 0x87, 0x70, 0x7e, 0x92, 0x75, 0x86, 0x49, 0xea, + 0x1d, 0xc1, 0xfa, 0x49, 0xdb, 0xc9, 0xd1, 0x27, + 0xa8, 0xc3, 0xd7, 0x0d, 0x1e, 0xd5, 0x73, 0xeb, + 0x5d, 0xc2, 0x9e, 0xd5, 0x73, 0xeb, 0x5d, 0xc2, + 0xb7, 0xf5, 0x86, 0x49, 0xea, 0x1d, 0xc1, 0xfa, + 0x49, 0xd6, 0x19, 0x27, 0xa8, 0x77, 0x07, 0xe9, + 0x27, 0x6f, 0x27, 0x44, 0x9e, 0xa3, 0x0f, 0x5c, + 0x34, 0x7b, 0x55, 0xcf, 0xad, 0x77, 0x0a, 0x7b, + 0x55, 0xcf, 0xad, 0x77, 0x0a, 0xdf, 0xd6, 0x19, + 0x27, 0xa8, 0x77, 0x07, 0xe9, 0x27, 0x58, 0x64, + 0x9e, 0xa1, 0xdc, 0x1f, 0xa4, 0x9d, 0xbc, 0x9d, + 0x12, 0x7a, 0x8c, 0x3d, 0x70, 0xd1, 0xed, 0x57, + 0x3e, 0xb5, 0xdc, 0x29, 0xed, 0x57, 0x3e, 0xb5, + 0xdc, 0x2b, 0x7f, 0x58, 0x64, 0x9e, 0xa1, 0xdc, + 0x1f, 0xa4, 0x9d, 0x61, 0x92, 0x7a, 0x87, 0x70, + 0x7e, 0x92, 0x76, 0xf2, 0x74, 0x49, 0xea, 0x30, + 0xf5, 0xc3, 0x47, 0xb5, 0x5c, 0xfa, 0xd7, 0x70, + 0xa7, 0xb5, 0x5c, 0xfa, 0xd7, 0x70, 0xad, 0xfd, + 0x61, 0x92, 0x7a, 0x87, 0x70, 0x7e, 0x92, 0x75, + 0x86, 0x49, 0xea, 0x1d, 0xc1, 0xfa, 0x49, 0xdb, + 0xc9, 0xd1, 0x27, 0xa8, 0xc3, 0xd7, 0x0d, 0x1e, + 0xd5, 0x73, 0xeb, 0x5d, 0xc2, 0x9e, 0xd5, 0x73, + 0xeb, 0x5d, 0xc2, 0xb7, 0xf5, 0x86, 0x49, 0xea, + 0x1d, 0xc1, 0xfa, 0x49, 0xd6, 0x19, 0x27, 0xa8, + 0x77, 0x07, 0xe9, 0x27, 0x6f, 0x27, 0x44, 0x9e, + 0xa3, 0x0f, 0x5c, 0x34, 0x7b, 0x55, 0xcf, 0xad, + 0x77, 0x0a, 0x7b, 0x55, 0xcf, 0xad, 0x77, 0x0a, + 0xdf, 0xd6, 0x19, 0x27, 0xa8, 0x77, 0x07, 0xe9, + 0x27, 0x58, 0x64, 0x9e, 0xa1, 0xdc, 0x1f, 0xa4, + 0x9d, 0xbc, 0x9d, 0x12, 0x7a, 0x8c, 0x3d, 0x70, + 0xd1, 0xed, 0x57, 0x3e, 0xb5, 0xdc, 0x29, 0xed, + 0x57, 0x3e, 0xb5, 0xdc, 0x2b, 0x7f, 0x58, 0x64, + 0x9e, 0xa1, 0xdc, 0x1f, 0xa4, 0x9d, 0x61, 0x92, + 0x7a, 0x87, 0x70, 0x7e, 0x92, 0x76, 0xf2, 0x74, + 0x49, 0xea, 0x30, 0xf5, 0xc3, 0x47, 0xb5, 0x5c, + 0xfa, 0xd7, 0x70, 0xa7, 0xb5, 0x5c, 0xfa, 0xd7, + 0x70, 0xad, 0xfd, 0x61, 0x92, 0x7a, 0x87, 0x70, + 0x7e, 0x92, 0x75, 0x86, 0x49, 0xea, 0x1d, 0xc1, + 0xfa, 0x49, 0xdb, 0xc9, 0xd1, 0x27, 0xa8, 0xc3, + 0xd7, 0x0d, 0x1e, 0xd5, 0x73, 0xeb, 0x5d, 0xc2, + 0x9e, 0xd5, 0x73, 0xeb, 0x5d, 0xc2, 0xb7, 0xf5, + 0x86, 0x49, 0xea, 0x1d, 0xc1, 0xfa, 0x49, 0xd6, + 0x19, 0x27, 0xa8, 0x77, 0x07, 0xe9, 0x27, 0x6f, + 0x27, 0x44, 0x9e, 0xa3, 0x0f, 0x5c, 0x34, 0x7b, + 0x55, 0xcf, 0xad, 0x77, 0x0a, 0x7b, 0x55, 0xcf, + 0xad, 0x77, 0x0a, 0xdf, 0xd6, 0x19, 0x27, 0xa8, + 0x77, 0x07, 0xe9, 0x27, 0x58, 0x64, 0x9e, 0xa1, + 0xdc, 0x1f, 0xa4, 0x9d, 0xbc, 0x9d, 0x12, 0x7a, + 0x8c, 0x3d, 0x70, 0xe7, 0xf6, 0xab, 0x9f, 0x58, + 0xee, 0x14, 0xf6, 0xab, 0x9f, 0x58, 0xee, 0x15, + 0xd3, 0xed, 0xd9, 0x13, 0xcd, 0x1d, 0x19, 0x67, + 0x64, 0x82, 0x17, 0xb3, 0x97, 0xdb, 0x4e, 0xce, + 0x72, 0xc6, 0x50, 0xf1, 0xb8, 0xd2, 0x74, 0x28, + 0x9a, 0x5a, 0x3c, 0x6b, 0x30, 0xb5, 0x72, 0xe3, + 0xb7, 0xdb, 0x78, 0x97, 0x1f, 0xb5, 0x5c, 0xfa, + 0xc7, 0x70, 0xa7, 0xb5, 0x5c, 0xfa, 0xc7, 0x70, + 0xaf, 0x0f, 0x63, 0xe3, 0x71, 0x63, 0xc5, 0x1c, + 0x35, 0x8d, 0xe5, 0x85, 0x55, 0xdb, 0x3d, 0xaa, + 0xe7, 0xd6, 0x3b, 0x85, 0x3d, 0xaa, 0xe7, 0xd6, + 0x3b, 0x85, 0x6b, 0x4d, 0x24, 0x80, 0x01, 0x24, + 0xea, 0xa2, 0x0d, 0x9e, 0xd5, 0x73, 0xeb, 0x1c, + 0xb3, 0xed, 0x57, 0x3e, 0xb1, 0xdc, 0x2b, 0xa6, + 0x1c, 0xb0, 0x06, 0x73, 0xb7, 0x6f, 0x11, 0x33, + 0x5d, 0x2b, 0x4e, 0x12, 0xb0, 0x6e, 0xf2, 0x38, + 0xfc, 0x50, 0xd3, 0x29, 0x1b, 0xa0, 0x13, 0xc4, + 0xa6, 0x2b, 0x33, 0xe1, 0x0a, 0x5b, 0x25, 0x29, + 0xf7, 0xda, 0x2a, 0xe7, 0xf6, 0xab, 0x9f, 0x5a, + 0xee, 0x14, 0xf6, 0xab, 0x9f, 0x5a, 0xee, 0x15, + 0xbf, 0xac, 0x32, 0x4f, 0x50, 0xee, 0x0f, 0xd2, + 0x4e, 0xb0, 0xc9, 0x3d, 0x43, 0xb8, 0x3f, 0x49, + 0x5b, 0xb7, 0x93, 0xa2, 0x55, 0xf5, 0x18, 0x7a, + 0xe1, 0xa3, 0xda, 0xae, 0x7d, 0x6b, 0xb8, 0x53, + 0xda, 0xae, 0x7d, 0x6b, 0xb8, 0x56, 0xfe, 0xb0, + 0xc9, 0x3d, 0x43, 0xb8, 0x3f, 0x49, 0x3a, 0xc3, + 0x24, 0xf5, 0x0e, 0xe0, 0xfd, 0x24, 0xed, 0xe4, + 0xe8, 0x93, 0xd4, 0x61, 0xeb, 0x86, 0x8f, 0x6a, + 0xb9, 0xf5, 0xae, 0xe1, 0x4f, 0x6a, 0xb9, 0xf5, + 0xae, 0xe1, 0x5b, 0xfa, 0xc3, 0x24, 0xf5, 0x0e, + 0xe0, 0xfd, 0x24, 0xeb, 0x0c, 0x93, 0xd4, 0x3b, + 0x83, 0xf4, 0x93, 0xb7, 0x93, 0xa2, 0x4f, 0x51, + 0x87, 0xae, 0x1a, 0x3d, 0xaa, 0xe7, 0xd6, 0xbb, + 0x85, 0x3d, 0xaa, 0xe7, 0xd6, 0xbb, 0x85, 0x6f, + 0xeb, 0x0c, 0x93, 0xd4, 0x3b, 0x83, 0xf4, 0x93, + 0xac, 0x32, 0x4f, 0x50, 0xee, 0x0f, 0xd2, 0x4e, + 0xde, 0x4e, 0x89, 0x3d, 0x46, 0x1e, 0xb8, 0x68, + 0xf6, 0xab, 0x9f, 0x5a, 0xee, 0x14, 0xf6, 0xab, + 0x9f, 0x5a, 0xee, 0x15, 0xbf, 0xac, 0x32, 0x4f, + 0x50, 0xee, 0x0f, 0xd2, 0x4e, 0xb0, 0xc9, 0x3d, + 0x43, 0xb8, 0x3f, 0x49, 0x3b, 0x79, 0x3a, 0x24, + 0xf5, 0x18, 0x7a, 0xe1, 0xa3, 0xda, 0xae, 0x7d, + 0x6b, 0xb8, 0x53, 0xda, 0xae, 0x7d, 0x6b, 0xb8, + 0x56, 0xfe, 0xb0, 0xc9, 0x3d, 0x43, 0xb8, 0x3f, + 0x49, 0x3a, 0xc3, 0x24, 0xf5, 0x0e, 0xe0, 0xfd, + 0x24, 0xed, 0xe4, 0xe8, 0x93, 0xd4, 0x61, 0xeb, + 0x86, 0x8f, 0x6a, 0xb9, 0xf5, 0xae, 0xe1, 0x4f, + 0x6a, 0xb9, 0xf5, 0xae, 0xe1, 0x5b, 0xfa, 0xc3, + 0x24, 0xf5, 0x0e, 0xe0, 0xfd, 0x24, 0xeb, 0x0c, + 0x93, 0xd4, 0x3b, 0x83, 0xf4, 0x93, 0xb7, 0x93, + 0xa2, 0x4f, 0x51, 0x87, 0xae, 0x1a, 0x3d, 0xaa, + 0xe7, 0xd6, 0xbb, 0x85, 0x3d, 0xaa, 0xe7, 0xd6, + 0xbb, 0x85, 0x6f, 0xeb, 0x0c, 0x93, 0xd4, 0x3b, + 0x83, 0xf4, 0x93, 0xac, 0x32, 0x4f, 0x50, 0xee, + 0x0f, 0xd2, 0x4e, 0xde, 0x4e, 0x89, 0x3d, 0x46, + 0x1e, 0xb8, 0x68, 0xf6, 0xab, 0x9f, 0x5a, 0xee, + 0x14, 0xf6, 0xab, 0x9f, 0x5a, 0xee, 0x15, 0xbf, + 0xac, 0x32, 0x4f, 0x50, 0xee, 0x0f, 0xd2, 0x4e, + 0xb0, 0xc9, 0x3d, 0x43, 0xb8, 0x3f, 0x49, 0x3b, + 0x79, 0x3a, 0x24, 0xf5, 0x18, 0x7a, 0xe1, 0xa3, + 0xda, 0xae, 0x7d, 0x6b, 0xb8, 0x53, 0xda, 0xae, + 0x7d, 0x6b, 0xb8, 0x56, 0xfe, 0xb0, 0xc9, 0x3d, + 0x43, 0xb8, 0x3f, 0x49, 0x3a, 0xc3, 0x24, 0xf5, + 0x0e, 0xe0, 0xfd, 0x24, 0xed, 0xe4, 0xe8, 0x93, + 0xd4, 0x61, 0xeb, 0x86, 0x8f, 0x6a, 0xb9, 0xf5, + 0xae, 0xe1, 0x4f, 0x6a, 0xb9, 0xf5, 0xae, 0xe1, + 0x5b, 0xfa, 0xc3, 0x24, 0xf5, 0x0e, 0xe0, 0xfd, + 0x24, 0xeb, 0x0c, 0x93, 0xd4, 0x3b, 0x83, 0xf4, + 0x93, 0xb7, 0x93, 0xa2, 0x4f, 0x51, 0x87, 0xae, + 0x1a, 0x3d, 0xaa, 0xe7, 0xd6, 0xbb, 0x85, 0x3d, + 0xaa, 0xe7, 0xd6, 0xbb, 0x85, 0x6f, 0xeb, 0x0c, + 0x93, 0xd4, 0x3b, 0x83, 0xf4, 0x93, 0xac, 0x32, + 0x4f, 0x50, 0xee, 0x0f, 0xd2, 0x4e, 0xde, 0x4e, + 0x89, 0x3d, 0x46, 0x1e, 0xb8, 0x68, 0xf6, 0xab, + 0x9f, 0x5a, 0xee, 0x14, 0xf6, 0xab, 0x9f, 0x5a, + 0xee, 0x15, 0xbf, 0xac, 0x32, 0x4f, 0x50, 0xee, + 0x0f, 0xd2, 0x4e, 0xb0, 0xc9, 0x3d, 0x43, 0xb8, + 0x3f, 0x49, 0x3b, 0x79, 0x3a, 0x24, 0xf5, 0x18, + 0x7a, 0xe1, 0xa3, 0xda, 0xae, 0x7d, 0x6b, 0xb8, + 0x53, 0xda, 0xae, 0x7d, 0x6b, 0xb8, 0x56, 0xfe, + 0xb0, 0xc9, 0x3d, 0x43, 0xb8, 0x3f, 0x49, 0x3a, + 0xc3, 0x24, 0xf5, 0x0e, 0xe0, 0xfd, 0x24, 0xed, + 0xe4, 0xe8, 0x93, 0xd4, 0x61, 0xeb, 0x86, 0x8f, + 0x6a, 0xb9, 0xf5, 0xae, 0xe1, 0x4f, 0x6a, 0xb9, + 0xf5, 0xae, 0xe1, 0x5b, 0xfa, 0xc3, 0x24, 0xf5, + 0x0e, 0xe0, 0xfd, 0x24, 0xeb, 0x0c, 0x93, 0xd4, + 0x3b, 0x83, 0xf4, 0x93, 0xb7, 0x93, 0xa2, 0x4f, + 0x51, 0x87, 0xae, 0x1a, 0x3d, 0xaa, 0xe7, 0xd6, + 0xbb, 0x85, 0x3d, 0xaa, 0xe7, 0xd6, 0xbb, 0x85, + 0x6f, 0xeb, 0x0c, 0x93, 0xd4, 0x3b, 0x83, 0xf4, + 0x93, 0xac, 0x32, 0x4f, 0x50, 0xee, 0x0f, 0xd2, + 0x4e, 0xde, 0x4e, 0x89, 0x3d, 0x46, 0x1e, 0xb8, + 0x68, 0xf6, 0xab, 0x9f, 0x5a, 0xee, 0x14, 0xf6, + 0xab, 0x9f, 0x5a, 0xee, 0x15, 0xbf, 0xac, 0x32, + 0x4f, 0x50, 0xee, 0x0f, 0xd2, 0x4e, 0xb0, 0xc9, + 0x3d, 0x43, 0xb8, 0x3f, 0x49, 0x3b, 0x79, 0x3a, + 0x24, 0xf5, 0x18, 0x7a, 0xe1, 0xa3, 0xda, 0xae, + 0x7d, 0x6b, 0xb8, 0x53, 0xda, 0xae, 0x7d, 0x6b, + 0xb8, 0x56, 0xfe, 0xb0, 0xc9, 0x3d, 0x43, 0xb8, + 0x3f, 0x49, 0x3a, 0xc3, 0x24, 0xf5, 0x0e, 0xe0, + 0xfd, 0x24, 0xed, 0xe4, 0xe8, 0x93, 0xd4, 0x61, + 0xeb, 0x86, 0x8f, 0x6a, 0xb9, 0xf5, 0xae, 0xe1, + 0x4f, 0x6a, 0xb9, 0xf5, 0xae, 0xe1, 0x5b, 0xfa, + 0xc3, 0x24, 0xf5, 0x0e, 0xe0, 0xfd, 0x24, 0xeb, + 0x0c, 0x93, 0xd4, 0x3b, 0x83, 0xf4, 0x93, 0xb7, + 0x93, 0xa2, 0x4f, 0x51, 0x87, 0xae, 0x1a, 0x3d, + 0xaa, 0xe7, 0xd6, 0xbb, 0x85, 0x3d, 0xaa, 0xe7, + 0xd6, 0xbb, 0x85, 0x6f, 0xeb, 0x0c, 0x93, 0xd4, + 0x3b, 0x83, 0xf4, 0x93, 0xac, 0x32, 0x4f, 0x50, + 0xee, 0x0f, 0xd2, 0x4e, 0xde, 0x4e, 0x89, 0x3d, + 0x46, 0x1e, 0xb8, 0x68, 0xf6, 0xab, 0x9f, 0x5a, + 0xee, 0x14, 0xf6, 0xab, 0x9f, 0x5a, 0xee, 0x15, + 0xbf, 0xac, 0x32, 0x4f, 0x50, 0xee, 0x0f, 0xd2, + 0x4e, 0xb0, 0xc9, 0x3d, 0x43, 0xb8, 0x3f, 0x49, + 0x3b, 0x79, 0x3a, 0x24, 0xf5, 0x18, 0x7a, 0xe1, + 0xa3, 0xda, 0xae, 0x7d, 0x6b, 0x97, 0xb6, 0x66, + 0x17, 0x4c, 0x35, 0xc7, 0x8b, 0xb0, 0x56, 0xc1, + 0x7d, 0x91, 0xb8, 0xd0, 0xc4, 0xe6, 0x8d, 0xd2, + 0x41, 0xf4, 0x96, 0xcf, 0x61, 0xb4, 0xb9, 0x66, + 0x3b, 0x19, 0x83, 0xbf, 0xaa, 0x74, 0x8e, 0x30, + 0xa2, 0x69, 0x68, 0xf1, 0x8d, 0x16, 0xae, 0x5c, + 0x76, 0x9e, 0x17, 0x89, 0x6d, 0x83, 0x33, 0x8e, + 0x4d, 0x12, 0x8c, 0x0e, 0x3b, 0xbb, 0x85, 0x76, + 0x02, 0x08, 0x04, 0x69, 0xae, 0xae, 0xca, 0x80, + 0x92, 0x29, 0x22, 0x79, 0x8e, 0x56, 0xe1, 0x70, + 0xdc, 0x3f, 0x22, 0xe9, 0xb2, 0xbe, 0x74, 0x0e, + 0xc3, 0x21, 0xac, 0x67, 0x5e, 0xf8, 0x55, 0x5d, + 0x2e, 0x88, 0x08, 0x20, 0x16, 0xe9, 0x07, 0x51, + 0x44, 0x05, 0x15, 0x9c, 0x7b, 0xd5, 0x97, 0x9f, + 0xf2, 0x85, 0x2a, 0xa2, 0xb3, 0x8f, 0x7a, 0xb2, + 0xf3, 0xfe, 0x50, 0x81, 0x93, 0x7b, 0xd5, 0xef, + 0x9e, 0x7e, 0xb1, 0x52, 0xaa, 0x2b, 0x26, 0xf7, + 0xab, 0xdf, 0x3c, 0xfd, 0x62, 0xa5, 0x50, 0x11, + 0x11, 0x00, 0x54, 0x91, 0xa3, 0xb8, 0xbe, 0x75, + 0xf8, 0x87, 0x9e, 0xbe, 0xe6, 0xfc, 0x65, 0x51, + 0x3a, 0x90, 0x5a, 0x90, 0x65, 0x03, 0x53, 0xa4, + 0xa5, 0x40, 0x3e, 0x6d, 0x57, 0xd1, 0xdb, 0xae, + 0xbb, 0xcb, 0xe2, 0x79, 0xbc, 0xce, 0x9b, 0x35, + 0xbc, 0x98, 0x9a, 0x99, 0x26, 0x91, 0xd5, 0xec, + 0x17, 0x1a, 0x77, 0x96, 0x7f, 0x35, 0x79, 0x8a, + 0x56, 0xb1, 0xe3, 0x6f, 0x17, 0xb1, 0xfd, 0xbf, + 0xe5, 0xab, 0x93, 0x3d, 0xaf, 0x7f, 0xab, 0xb5, + 0x48, 0xd3, 0xf6, 0xa6, 0x7c, 0x5c, 0x84, 0xf0, + 0xac, 0x22, 0x2c, 0x2f, 0xac, 0x12, 0xa5, 0x11, + 0x02, 0xa5, 0x2a, 0x51, 0x10, 0x2a, 0x52, 0xa5, + 0x11, 0x02, 0xa5, 0x2a, 0x51, 0x10, 0x2a, 0x52, + 0xa5, 0x11, 0x02, 0xa5, 0x2a, 0x51, 0x10, 0x2a, + 0x52, 0xa5, 0x11, 0x02, 0xa5, 0x2a, 0x51, 0x10, + 0x2a, 0x52, 0xa5, 0x11, 0x02, 0xa5, 0x2a, 0x51, + 0x10, 0x2a, 0x52, 0xa5, 0x11, 0x02, 0xa5, 0x2a, + 0x51, 0x10, 0x2a, 0x52, 0xa5, 0x11, 0x02, 0xa5, + 0x2a, 0x51, 0x10, 0x2a, 0x52, 0xa5, 0x11, 0x02, + 0xa5, 0x2a, 0x51, 0x10, 0x2a, 0x52, 0xa5, 0x11, + 0x02, 0xa5, 0x2a, 0x51, 0x10, 0x2a, 0x52, 0xa5, + 0x11, 0x02, 0xa5, 0x2a, 0x51, 0x10, 0x2a, 0x52, + 0xa5, 0x11, 0x06, 0x6a, 0x56, 0x5a, 0x6a, 0x57, + 0x95, 0x90, 0x68, 0x54, 0x1c, 0xb8, 0xfb, 0x61, + 0x65, 0xd8, 0x6c, 0xee, 0x5c, 0xbf, 0x37, 0x65, + 0xb3, 0xdf, 0x4b, 0x5b, 0xc7, 0x08, 0xde, 0xd2, + 0x74, 0x07, 0x9f, 0x25, 0xe3, 0x7b, 0x79, 0x7d, + 0x45, 0xc2, 0x9d, 0xd5, 0xf0, 0xc8, 0xe4, 0x74, + 0x52, 0x09, 0x1a, 0x2a, 0x63, 0x21, 0xe3, 0xb6, + 0xd2, 0x0f, 0xc8, 0xbe, 0xe5, 0x1c, 0x82, 0x5b, + 0x68, 0xa5, 0x06, 0xb8, 0xd8, 0xd7, 0x54, 0x76, + 0x45, 0x56, 0xef, 0x29, 0x6d, 0x6b, 0x6a, 0xf2, + 0x97, 0xcb, 0xff, 0x00, 0x70, 0xf9, 0x78, 0xa6, + 0x6c, 0x79, 0x63, 0xff, 0x00, 0xb9, 0x16, 0x8b, + 0x7b, 0xed, 0x5f, 0x68, 0xa3, 0x73, 0x49, 0xea, + 0x44, 0x0d, 0xd1, 0xf9, 0xce, 0xed, 0xa9, 0x25, + 0x03, 0x72, 0xe2, 0xf9, 0xe4, 0x71, 0xf9, 0xda, + 0x16, 0x97, 0x86, 0xd7, 0x5d, 0xd2, 0xa4, 0x20, + 0xe6, 0x6c, 0x6d, 0x0d, 0xec, 0xc3, 0xc6, 0x77, + 0x90, 0x37, 0x74, 0xea, 0x5c, 0x30, 0xb3, 0x9c, + 0x99, 0x8c, 0xf9, 0xce, 0x00, 0xf0, 0xa6, 0xd3, + 0x4e, 0x7d, 0xa2, 0x3b, 0x60, 0x68, 0xd6, 0x37, + 0x15, 0x06, 0xf9, 0xfe, 0x85, 0x7c, 0x75, 0xdd, + 0x78, 0x87, 0x1f, 0x31, 0x97, 0xb7, 0x8e, 0x6d, + 0x1e, 0x3e, 0x0e, 0x1b, 0xbb, 0xe9, 0xef, 0x25, + 0xe7, 0x25, 0x76, 0x8d, 0x6d, 0x60, 0xd4, 0xd5, + 0xa3, 0x12, 0xd7, 0x89, 0x31, 0x2d, 0xd1, 0x11, + 0x1c, 0x21, 0xe2, 0xda, 0x66, 0xd3, 0x33, 0x6e, + 0x33, 0x2d, 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, + 0x29, 0x46, 0x90, 0xd9, 0x89, 0x31, 0x2d, 0x78, + 0x93, 0x12, 0x1a, 0x43, 0x66, 0x24, 0xc4, 0xb5, + 0xe2, 0x4c, 0x48, 0x69, 0x0d, 0x98, 0x93, 0x12, + 0xd7, 0x89, 0x31, 0x21, 0xa4, 0x36, 0x62, 0x4c, + 0x4b, 0x5e, 0x24, 0xc4, 0x86, 0x90, 0xd9, 0x89, + 0x31, 0x2d, 0x78, 0x93, 0x12, 0x1a, 0x43, 0x66, + 0x24, 0xc4, 0xb5, 0xe2, 0x52, 0x8c, 0xd9, 0xfc, + 0xc1, 0xec, 0x0f, 0x6e, 0x0f, 0x1b, 0x48, 0xab, + 0xb7, 0x08, 0x55, 0xb5, 0xe2, 0xbe, 0x32, 0xb5, + 0x31, 0x5a, 0xff, 0x00, 0x65, 0x77, 0x7b, 0x91, + 0xf8, 0x93, 0x12, 0x5c, 0x43, 0x25, 0xbc, 0xce, + 0x86, 0x5a, 0x62, 0x61, 0xa3, 0xa8, 0xbb, 0x6d, + 0xf2, 0x4b, 0xfb, 0x88, 0x59, 0x33, 0x30, 0x61, + 0x90, 0x54, 0x54, 0xd0, 0xa4, 0xde, 0xb1, 0xa4, + 0xcc, 0xf0, 0x94, 0xd7, 0x0d, 0xed, 0x33, 0x58, + 0x8d, 0x66, 0x3c, 0x5c, 0x58, 0x93, 0x12, 0xf7, + 0x79, 0x6b, 0x35, 0x9c, 0xdc, 0xcc, 0xd4, 0xc7, + 0x40, 0xef, 0x14, 0xd4, 0x50, 0xad, 0x18, 0x94, + 0xeb, 0xaf, 0x84, 0xea, 0xac, 0xd3, 0x6c, 0xcc, + 0x4c, 0x69, 0x31, 0xe2, 0xd9, 0x89, 0x31, 0x2d, + 0x78, 0x93, 0x12, 0x94, 0x69, 0x0d, 0x98, 0x93, + 0x12, 0xd7, 0x89, 0x31, 0x21, 0xa4, 0x36, 0x62, + 0x4c, 0x4b, 0x5e, 0x24, 0xc4, 0x86, 0x90, 0xd9, + 0x89, 0x31, 0x2d, 0x78, 0x93, 0x12, 0x1a, 0x43, + 0x66, 0x24, 0xc4, 0xb5, 0xe2, 0x4c, 0x48, 0x69, + 0x0d, 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, 0x21, + 0xa4, 0x36, 0x62, 0x4c, 0x4b, 0x5e, 0x24, 0xc4, + 0x86, 0x90, 0xd9, 0x89, 0x31, 0x2d, 0x78, 0x93, + 0x12, 0x1a, 0x43, 0x66, 0x24, 0xc4, 0xb5, 0xe2, + 0x4c, 0x48, 0x69, 0x0d, 0x98, 0x93, 0x12, 0xd7, + 0x89, 0x31, 0x21, 0xa4, 0x36, 0x62, 0x4c, 0x4b, + 0x5e, 0x24, 0xc4, 0x86, 0x90, 0xd9, 0x89, 0x31, + 0x2d, 0x78, 0x93, 0x12, 0x1a, 0x43, 0x66, 0x22, + 0x35, 0x2d, 0x90, 0xdc, 0xcd, 0x04, 0x82, 0x48, + 0x5c, 0x58, 0xfd, 0xd3, 0xbf, 0xdb, 0x5c, 0xf8, + 0x93, 0x12, 0x8f, 0x1f, 0x1e, 0x30, 0x98, 0xd6, + 0xbc, 0x6b, 0xc2, 0x61, 0x68, 0x64, 0x90, 0xe6, + 0xd6, 0x46, 0x56, 0x0c, 0x37, 0x11, 0x79, 0x43, + 0x76, 0xa3, 0xe4, 0x51, 0xde, 0x1d, 0xd5, 0xab, + 0x20, 0xb9, 0x31, 0x66, 0x4c, 0x65, 0x7c, 0x59, + 0x46, 0x03, 0xc1, 0xa3, 0xbe, 0xbb, 0x73, 0x08, + 0xc4, 0x77, 0x92, 0x34, 0x0a, 0x02, 0x71, 0x01, + 0xd8, 0x21, 0x61, 0xcb, 0x4d, 0xb6, 0x98, 0xe7, + 0xc5, 0xec, 0xf9, 0x6c, 0xbd, 0xcc, 0x71, 0x33, + 0xec, 0xfa, 0x5c, 0xde, 0x0d, 0xd5, 0x23, 0x66, + 0xc8, 0xad, 0x2d, 0xdd, 0x7f, 0x70, 0x34, 0x01, + 0xe2, 0x8f, 0x02, 0xe0, 0x63, 0x71, 0x3d, 0xad, + 0xf9, 0xc4, 0x05, 0xb7, 0x69, 0x67, 0x31, 0x98, + 0x2d, 0x1b, 0xa1, 0xad, 0x18, 0xdc, 0x3b, 0xca, + 0x29, 0x5d, 0xd6, 0x88, 0x5b, 0x3e, 0x58, 0xc7, + 0x49, 0xbf, 0x2e, 0x1f, 0x8a, 0x3e, 0xfb, 0x30, + 0x9e, 0xf2, 0x52, 0xf9, 0x4f, 0x8b, 0xf9, 0xb1, + 0xee, 0x0e, 0xe2, 0xe6, 0x2e, 0xae, 0xbd, 0x3d, + 0xb5, 0xaf, 0x12, 0x62, 0x5b, 0xeb, 0x1b, 0x78, + 0x47, 0x0d, 0x1e, 0x25, 0xa6, 0xd6, 0x9d, 0xd7, + 0x9d, 0x6d, 0xef, 0x6c, 0xc4, 0x98, 0x96, 0xbc, + 0x49, 0x89, 0x4a, 0x34, 0x86, 0xcc, 0x49, 0x89, + 0x6b, 0xc4, 0xb7, 0xd9, 0xda, 0x4f, 0x7b, 0x29, + 0x8a, 0x1a, 0x63, 0x03, 0x17, 0x8c, 0x69, 0xa0, + 0x28, 0x99, 0xd3, 0x8c, 0xca, 0x62, 0x9a, 0xce, + 0x91, 0x1a, 0xcc, 0xbc, 0x62, 0x4c, 0x4a, 0x43, + 0xe1, 0xdc, 0xcb, 0xfc, 0x3e, 0x57, 0xf4, 0x2e, + 0x5b, 0xcc, 0xba, 0xee, 0xc8, 0x07, 0x4e, 0xcc, + 0x2c, 0xf9, 0xc0, 0x82, 0x38, 0x42, 0x8e, 0xed, + 0x3d, 0x93, 0xaa, 0xf3, 0x83, 0x2c, 0x46, 0xb3, + 0x4d, 0x1a, 0x71, 0x26, 0x25, 0xaf, 0x12, 0x62, + 0x56, 0x73, 0x88, 0xf6, 0xb6, 0x62, 0x4c, 0x4b, + 0x5e, 0x24, 0xc4, 0x86, 0x90, 0xd9, 0x89, 0x31, + 0x2d, 0x78, 0x93, 0x12, 0x1a, 0x43, 0x66, 0x24, + 0xc4, 0xb5, 0xe2, 0x4c, 0x48, 0x69, 0x0d, 0x98, + 0x93, 0x12, 0xd7, 0x89, 0x31, 0x21, 0xa4, 0x36, + 0x62, 0x29, 0x88, 0xad, 0x78, 0x96, 0x5b, 0x57, + 0xb8, 0x35, 0x80, 0x97, 0x38, 0xd1, 0xad, 0x1a, + 0x49, 0x4d, 0x4d, 0xaf, 0x78, 0x93, 0x12, 0xee, + 0x6e, 0x43, 0x99, 0x39, 0x98, 0xf0, 0x35, 0xba, + 0x2a, 0x1a, 0xe7, 0x69, 0x5c, 0x37, 0x10, 0xcb, + 0x6f, 0x21, 0x8a, 0x66, 0x16, 0x3c, 0x6e, 0x1f, + 0x91, 0x44, 0x5e, 0xb3, 0x3a, 0x44, 0xf1, 0x5a, + 0xd8, 0x6f, 0x5e, 0x36, 0xac, 0xc4, 0x18, 0x93, + 0x12, 0xd7, 0x89, 0x31, 0x57, 0x47, 0xff, 0x00, + 0x2a, 0x75, 0x57, 0x46, 0xcc, 0x49, 0x89, 0x77, + 0xdb, 0x64, 0x17, 0xf3, 0x46, 0x24, 0x38, 0x63, + 0x0e, 0x15, 0x01, 0xc7, 0x4f, 0x02, 0xd7, 0x79, + 0x93, 0xde, 0xd9, 0xc7, 0xce, 0x3c, 0x07, 0xc6, + 0x35, 0xb9, 0x9a, 0x68, 0x3b, 0x2a, 0x9d, 0xda, + 0x6b, 0xa6, 0xbc, 0x5d, 0x27, 0xcb, 0x65, 0x88, + 0xd6, 0x6b, 0xc3, 0x9b, 0x93, 0x12, 0x62, 0x5b, + 0xac, 0xb2, 0xfb, 0x8b, 0xec, 0x7e, 0xcf, 0x84, + 0xf3, 0x74, 0xae, 0x23, 0x4a, 0xd5, 0x6a, 0xb9, + 0x85, 0xf6, 0xd3, 0x3e, 0x09, 0x29, 0x8d, 0x87, + 0x4d, 0x34, 0x8d, 0x4a, 0xd1, 0x78, 0x99, 0xdb, + 0x13, 0xc5, 0x49, 0xc7, 0x68, 0x8d, 0xdb, 0x7e, + 0x9e, 0x6c, 0x62, 0x4c, 0x4b, 0x5e, 0x24, 0xc4, + 0xa5, 0x1a, 0x43, 0x66, 0x24, 0xc4, 0xb5, 0xe2, + 0x4c, 0x48, 0x69, 0x0d, 0x98, 0x93, 0x12, 0xdb, + 0x63, 0x63, 0x71, 0x7c, 0xe7, 0xb6, 0x0c, 0x35, + 0x8c, 0x02, 0xec, 0x46, 0x9a, 0xca, 0xd7, 0x73, + 0x04, 0xb6, 0xd3, 0xba, 0xde, 0x5a, 0x63, 0x66, + 0xbc, 0x3a, 0x6b, 0x5a, 0x1f, 0x02, 0x88, 0xb4, + 0x4d, 0xb6, 0xeb, 0xc5, 0x6e, 0xd5, 0xb4, 0x8b, + 0xcc, 0x7d, 0x36, 0x9d, 0xb0, 0xc6, 0x24, 0xc4, + 0xb5, 0xe2, 0xa6, 0x95, 0x21, 0x26, 0x4d, 0x77, + 0x15, 0xa1, 0xbb, 0x71, 0x61, 0x89, 0xad, 0x0f, + 0x22, 0xa6, 0xb4, 0x3f, 0xd9, 0x49, 0xb4, 0x44, + 0xe9, 0x33, 0xa6, 0xa5, 0x71, 0x5a, 0xda, 0xed, + 0x8d, 0x76, 0xc6, 0xb2, 0xe3, 0xc4, 0x98, 0x96, + 0xb2, 0x53, 0x12, 0x95, 0x74, 0x86, 0xcc, 0x49, + 0x89, 0x6b, 0xc4, 0x98, 0x90, 0xd2, 0x1b, 0x31, + 0x26, 0x25, 0xaf, 0x12, 0x62, 0x43, 0x48, 0x6c, + 0xc4, 0x98, 0x96, 0xbc, 0x49, 0x89, 0x0d, 0x21, + 0xb3, 0x11, 0x5e, 0xe2, 0xb8, 0x92, 0x29, 0x04, + 0x91, 0xb8, 0xb1, 0xe3, 0x53, 0x86, 0xb5, 0xa3, + 0x12, 0x62, 0x51, 0x31, 0xac, 0x69, 0x29, 0xaf, + 0x0b, 0x6e, 0x8e, 0x0b, 0x3d, 0xbc, 0xf1, 0xe7, + 0x16, 0x8e, 0x04, 0x06, 0xdc, 0xc4, 0x3b, 0xfc, + 0x45, 0x47, 0x90, 0x41, 0xd3, 0xac, 0x68, 0xa6, + 0xf5, 0x17, 0x36, 0x4b, 0x72, 0xe8, 0x73, 0x18, + 0x8d, 0x68, 0x24, 0x38, 0x1c, 0x37, 0xeb, 0xab, + 0xbe, 0xa4, 0xf3, 0x38, 0xc4, 0x77, 0x8f, 0xa6, + 0xa7, 0x51, 0xdc, 0x2b, 0x16, 0x6a, 0xc5, 0x6d, + 0xc3, 0xc2, 0x7c, 0x1e, 0xc7, 0x95, 0xcb, 0x39, + 0x31, 0xf1, 0x9d, 0x6d, 0x13, 0xa4, 0xba, 0x72, + 0xb9, 0xcb, 0xa3, 0x74, 0x07, 0x49, 0x6e, 0x96, + 0xd7, 0x79, 0x77, 0xa8, 0x5c, 0xbd, 0xf8, 0x2e, + 0xd9, 0xfd, 0x6d, 0x05, 0x4d, 0x2e, 0x6d, 0x02, + 0x8a, 0xce, 0x3d, 0xea, 0xcb, 0xcf, 0xf9, 0x42, + 0x95, 0x51, 0x59, 0xc7, 0xbd, 0x59, 0x79, 0xff, + 0x00, 0x28, 0x40, 0xc9, 0xbd, 0xea, 0xf7, 0xcf, + 0x3f, 0x58, 0xa9, 0x55, 0x15, 0x93, 0x7b, 0xd5, + 0xef, 0x9e, 0x7e, 0xb1, 0x52, 0xa8, 0x08, 0x88, + 0x83, 0x23, 0x51, 0x5f, 0x0e, 0xbd, 0xf7, 0xc9, + 0xfe, 0xd1, 0xff, 0x00, 0x58, 0xaf, 0xb8, 0x8d, + 0x45, 0x7c, 0x3a, 0xf7, 0xdf, 0x2e, 0x3e, 0xd5, + 0xff, 0x00, 0x58, 0xac, 0x9e, 0x6f, 0xc2, 0x8f, + 0xa0, 0xfe, 0xdb, 0xfb, 0xfc, 0xc7, 0xc3, 0x1f, + 0xf9, 0xb4, 0xa2, 0x22, 0xc8, 0xfa, 0x41, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x16, 0x42, 0xc2, 0xc8, 0x41, + 0x90, 0x4d, 0x42, 0xfb, 0x5e, 0x51, 0xa3, 0x24, + 0xb1, 0xa7, 0xa8, 0x8f, 0xea, 0x85, 0xf1, 0x31, + 0xe5, 0x35, 0x7d, 0xb3, 0x29, 0xfe, 0x49, 0x65, + 0xf6, 0x11, 0xfd, 0x50, 0xb4, 0xf9, 0x4f, 0xba, + 0xdf, 0x07, 0xcf, 0xff, 0x00, 0x71, 0xff, 0x00, + 0x0f, 0x07, 0xed, 0x5f, 0xf4, 0x43, 0xa8, 0x6b, + 0x0a, 0xba, 0xe3, 0x57, 0x1e, 0xd9, 0x56, 0x21, + 0xad, 0x57, 0x1d, 0xe5, 0x1e, 0xd9, 0x5b, 0x5f, + 0x36, 0xdd, 0x65, 0xef, 0x90, 0xf9, 0xcb, 0x8b, + 0x68, 0xcf, 0xf9, 0xa3, 0xfb, 0x0d, 0x6f, 0x80, + 0xae, 0xdb, 0x2f, 0x7b, 0x87, 0xce, 0x0a, 0x3f, + 0x69, 0x4d, 0x33, 0x69, 0x3c, 0xd6, 0x78, 0x0a, + 0xed, 0xe5, 0xfe, 0xf6, 0x4f, 0x3f, 0xfc, 0x28, + 0xfd, 0xa4, 0x75, 0x52, 0xab, 0x5e, 0x24, 0xc4, + 0xb5, 0x3c, 0xc6, 0xca, 0xa5, 0x56, 0xbc, 0x49, + 0x89, 0x06, 0xca, 0xa5, 0x56, 0xbc, 0x49, 0x89, + 0x06, 0xca, 0xa5, 0x56, 0xbc, 0x49, 0x89, 0x06, + 0xca, 0xa5, 0x56, 0xbc, 0x49, 0x89, 0x06, 0xca, + 0xa5, 0x56, 0xbc, 0x49, 0x89, 0x06, 0xca, 0xa5, + 0x56, 0xbc, 0x49, 0x89, 0x06, 0xca, 0xab, 0xdb, + 0x24, 0x6c, 0x76, 0xf0, 0x97, 0x6a, 0x70, 0x63, + 0x6b, 0xd9, 0x23, 0x42, 0xa0, 0x62, 0x57, 0x1c, + 0xd2, 0x43, 0x16, 0x4c, 0xd9, 0x5b, 0xe5, 0x46, + 0x22, 0x70, 0xed, 0x82, 0xd2, 0xb8, 0x67, 0xe3, + 0xb6, 0x3d, 0xed, 0x9e, 0x4a, 0xdb, 0x7b, 0x96, + 0xe9, 0x8a, 0xca, 0x1f, 0x68, 0xe1, 0x74, 0x79, + 0x9d, 0x40, 0xfd, 0xab, 0x1b, 0x43, 0xbe, 0xea, + 0xe1, 0x2a, 0xcb, 0x0d, 0x21, 0x6c, 0x16, 0xe3, + 0x41, 0xc1, 0xab, 0xb4, 0x02, 0x8e, 0xcd, 0xad, + 0x9b, 0x75, 0x77, 0x96, 0x4c, 0xdf, 0x18, 0x3e, + 0x4a, 0x1f, 0x36, 0x9c, 0xe7, 0xf7, 0x56, 0xe7, + 0x4e, 0x1d, 0xb4, 0x0d, 0x80, 0x7f, 0xc3, 0xb7, + 0x24, 0xff, 0x00, 0x68, 0x8e, 0x25, 0xce, 0xd3, + 0xad, 0x6b, 0x1d, 0x31, 0x2d, 0x18, 0xeb, 0x18, + 0xf2, 0x64, 0x9e, 0xbc, 0x95, 0xd3, 0xf1, 0x84, + 0x2e, 0xd1, 0xe2, 0x76, 0x6d, 0x81, 0xa3, 0x13, + 0x8b, 0x1a, 0x00, 0x1b, 0xa4, 0xd6, 0x8b, 0x74, + 0x3b, 0x31, 0x72, 0xf8, 0xc3, 0xe6, 0x95, 0xb0, + 0xb8, 0xfe, 0x65, 0x0b, 0xbb, 0x85, 0x74, 0x5c, + 0x31, 0xb2, 0x6d, 0x5c, 0x41, 0xda, 0x99, 0x1b, + 0x5c, 0x07, 0x64, 0x07, 0x2d, 0xd9, 0xed, 0x8e, + 0x65, 0x7a, 0xf8, 0x45, 0xa3, 0xa8, 0xc6, 0x02, + 0x5c, 0x31, 0x61, 0xd2, 0x75, 0x1e, 0xe2, 0xbf, + 0x72, 0xda, 0x52, 0xb1, 0x31, 0x4e, 0x1e, 0x32, + 0xe3, 0xd8, 0xad, 0xa7, 0x2e, 0x5b, 0x44, 0xde, + 0x77, 0xda, 0xb1, 0x58, 0x42, 0xe6, 0x59, 0x4d, + 0xc6, 0x5e, 0x03, 0xe4, 0xa3, 0xe2, 0x71, 0xa0, + 0x91, 0xbb, 0x87, 0x70, 0x10, 0xb6, 0xc3, 0x90, + 0x5d, 0xcd, 0x68, 0xdb, 0xa8, 0xde, 0xc7, 0x07, + 0xb7, 0x10, 0x66, 0x90, 0x4f, 0x61, 0x4d, 0x66, + 0xb1, 0x3c, 0xe4, 0x4f, 0x6c, 0xd4, 0x32, 0xb2, + 0x36, 0x97, 0x1d, 0x7e, 0x30, 0xa5, 0x4a, 0xcd, + 0x94, 0xae, 0x8f, 0x20, 0x64, 0xac, 0x3e, 0x33, + 0x2d, 0xdc, 0xe0, 0x7b, 0x20, 0x12, 0x13, 0xbb, + 0x6d, 0xbe, 0x3e, 0xdd, 0x0f, 0x49, 0x4e, 0xe5, + 0xa2, 0x6b, 0x3b, 0x3b, 0x5a, 0xfe, 0x28, 0xc6, + 0xec, 0xb5, 0xc9, 0x8c, 0x38, 0xcc, 0xd6, 0xbe, + 0x95, 0xc1, 0x84, 0x91, 0xda, 0x2e, 0x5a, 0xad, + 0x36, 0x72, 0xf2, 0x7c, 0x46, 0x52, 0x20, 0x0c, + 0x71, 0x1a, 0x46, 0x22, 0x69, 0xf2, 0x2e, 0x9d, + 0x95, 0xba, 0x9e, 0x69, 0x2e, 0x44, 0xb2, 0x3a, + 0x40, 0x03, 0x5e, 0x03, 0x89, 0x34, 0x24, 0x9a, + 0xd2, 0xab, 0x4e, 0x63, 0x7d, 0x74, 0x36, 0x89, + 0x91, 0x09, 0x5c, 0x18, 0xc9, 0x23, 0x60, 0x60, + 0x24, 0x0a, 0x3a, 0x84, 0xd4, 0x77, 0x54, 0xef, + 0xc9, 0x13, 0x6a, 0xeb, 0x1c, 0x21, 0x1d, 0xbf, + 0x2f, 0xb2, 0xb9, 0x36, 0xcc, 0xeb, 0xf4, 0x68, + 0xe2, 0xcc, 0xf2, 0xc9, 0xf2, 0xe7, 0x34, 0x4a, + 0xe6, 0xbd, 0x8f, 0xf2, 0x64, 0x15, 0x1d, 0xb1, + 0x45, 0xbe, 0xc3, 0x21, 0xba, 0xbd, 0x88, 0x4c, + 0x5c, 0xd8, 0x63, 0x77, 0x93, 0x8a, 0xa4, 0x91, + 0xbe, 0xa4, 0xb6, 0xa9, 0xa1, 0xf6, 0x90, 0x8d, + 0xf9, 0x30, 0xf0, 0x85, 0xb7, 0x3e, 0x90, 0xdb, + 0xe4, 0xee, 0x64, 0x47, 0x05, 0x4b, 0x63, 0x04, + 0x68, 0x34, 0xee, 0x76, 0x93, 0xbb, 0x69, 0xad, + 0x62, 0x38, 0x5a, 0x64, 0xb7, 0x95, 0xc7, 0x17, + 0xc9, 0x33, 0x13, 0xb7, 0x1d, 0x77, 0x6d, 0xd7, + 0x8a, 0x2e, 0xef, 0x67, 0x2e, 0xe0, 0x88, 0xcb, + 0x1c, 0x8d, 0x98, 0x34, 0x55, 0xcd, 0x03, 0x09, + 0xa0, 0xde, 0x5c, 0xb9, 0x6e, 0x59, 0x36, 0x62, + 0x64, 0x11, 0x3d, 0xac, 0xe6, 0xf0, 0xd7, 0x15, + 0x77, 0x54, 0xd6, 0xcb, 0xce, 0xf9, 0xac, 0xa5, + 0x64, 0x87, 0x10, 0x8e, 0x4a, 0x0a, 0xe9, 0xd0, + 0xe1, 0x8a, 0x8b, 0xc6, 0xcf, 0x33, 0x9b, 0xbf, + 0xcc, 0x23, 0x1a, 0x9a, 0xfa, 0x0e, 0xd5, 0x4d, + 0x13, 0xb9, 0x78, 0x8c, 0x91, 0x36, 0x8d, 0x63, + 0x8a, 0x3d, 0x3e, 0x2b, 0x4e, 0x2b, 0x44, 0x4e, + 0xdc, 0x91, 0xf6, 0xb8, 0xa2, 0xd9, 0xbb, 0xb7, + 0x99, 0x79, 0xc9, 0x04, 0x6d, 0x8c, 0x90, 0xd7, + 0x52, 0xb8, 0xb4, 0x69, 0xa6, 0xf2, 0xd6, 0xdc, + 0x8a, 0xe1, 0xf6, 0x5e, 0xd8, 0xc9, 0x58, 0xe8, + 0xf0, 0x73, 0x81, 0xa2, 0xb5, 0x20, 0x0a, 0x90, + 0xb7, 0x67, 0x99, 0xd5, 0xf4, 0x57, 0xf2, 0xdb, + 0x41, 0x27, 0x37, 0x1c, 0x54, 0x69, 0xa5, 0x2a, + 0x49, 0x6e, 0x2d, 0xd5, 0xdf, 0xb3, 0x33, 0x8b, + 0x8c, 0xb1, 0xf0, 0x38, 0xd5, 0xd1, 0x38, 0xb7, + 0xfb, 0x2e, 0xd2, 0x12, 0x6f, 0x96, 0x29, 0x17, + 0x9d, 0x34, 0xe1, 0xe0, 0x9a, 0xe2, 0xc1, 0x6c, + 0x93, 0x8a, 0x22, 0x75, 0x88, 0xb4, 0xfc, 0x90, + 0x59, 0x76, 0x5f, 0x36, 0x63, 0x23, 0xd9, 0x13, + 0x9a, 0xdc, 0x0d, 0x0e, 0x24, 0x8d, 0x0b, 0xc5, + 0xed, 0xb3, 0xac, 0xee, 0x0d, 0xbb, 0xdc, 0xd7, + 0xb9, 0x80, 0x12, 0x5b, 0xd9, 0xdc, 0x53, 0xbb, + 0x31, 0x6f, 0xcc, 0x7b, 0x63, 0x9d, 0xa0, 0xb6, + 0x43, 0x17, 0x71, 0xaa, 0xbb, 0x7d, 0x70, 0x6e, + 0x2f, 0x27, 0x9f, 0xd6, 0x3c, 0x91, 0xe6, 0x8d, + 0x01, 0x5a, 0xb9, 0x2d, 0x37, 0x9d, 0x3c, 0x1c, + 0x72, 0xe2, 0xa5, 0x30, 0xd2, 0xda, 0x69, 0x36, + 0xb3, 0xc5, 0x52, 0xab, 0x5e, 0x24, 0xc4, 0xba, + 0xea, 0xe1, 0xa3, 0x65, 0x52, 0xab, 0x5e, 0x24, + 0xc4, 0x83, 0x65, 0x52, 0xab, 0x5e, 0x24, 0xc4, + 0x83, 0x65, 0x52, 0xab, 0x5e, 0x24, 0xc4, 0x83, + 0x65, 0x52, 0xab, 0x5e, 0x24, 0xc4, 0x83, 0x65, + 0x52, 0xab, 0x5e, 0x24, 0xc4, 0x83, 0x65, 0x53, + 0x12, 0xd7, 0x89, 0x31, 0x20, 0xef, 0xca, 0x9d, + 0xfe, 0x65, 0x6d, 0xf6, 0x8d, 0xf0, 0xa9, 0xbc, + 0xdb, 0xdf, 0x5d, 0xe6, 0xb7, 0xc0, 0xa0, 0x32, + 0x93, 0xfe, 0x67, 0x6b, 0xf6, 0xad, 0xf0, 0xa9, + 0xfc, 0xd7, 0xdf, 0x1d, 0xda, 0x6f, 0x81, 0x65, + 0xf3, 0x1f, 0x74, 0x7c, 0x1e, 0x97, 0x90, 0xfe, + 0x1d, 0xfe, 0x2d, 0x16, 0xde, 0xf1, 0x10, 0xfe, + 0xb8, 0xf0, 0xad, 0x1b, 0x50, 0x69, 0x98, 0x34, + 0x7f, 0x86, 0x3c, 0x25, 0x6f, 0xb6, 0xf7, 0x88, + 0xbc, 0xf6, 0xf8, 0x57, 0x2e, 0xd5, 0x9a, 0x66, + 0x4d, 0xfb, 0x31, 0xe1, 0x29, 0x83, 0xf8, 0x91, + 0xf0, 0x5f, 0xcf, 0x7f, 0x03, 0xf1, 0x84, 0x55, + 0x52, 0xab, 0x5e, 0x24, 0xc4, 0xb5, 0x3c, 0xa6, + 0xca, 0xa5, 0x56, 0xbc, 0x49, 0x89, 0x06, 0xca, + 0xa9, 0x7d, 0x97, 0x35, 0xcc, 0x8f, 0xd9, 0xbb, + 0xc2, 0x14, 0x26, 0x25, 0x31, 0xb2, 0xc6, 0xb9, + 0x99, 0xfb, 0x37, 0x78, 0x42, 0xa6, 0x4f, 0xb2, + 0xdf, 0x07, 0x5f, 0x2f, 0xfc, 0x6a, 0x7b, 0x38, + 0xa4, 0x36, 0x83, 0x33, 0xbd, 0xb3, 0xbb, 0x8a, + 0x3b, 0x79, 0x30, 0xb4, 0xc6, 0x1c, 0x5a, 0x45, + 0x41, 0x38, 0x8a, 0xed, 0x6b, 0xfa, 0xc3, 0x26, + 0xe7, 0x65, 0xd7, 0x34, 0x55, 0x3a, 0x35, 0x1a, + 0x71, 0xaf, 0x39, 0x9e, 0x5b, 0x97, 0x5d, 0xce, + 0xd9, 0x6e, 0xe4, 0xc0, 0xe6, 0xb6, 0x80, 0x62, + 0xc3, 0x50, 0x09, 0x5c, 0xb9, 0xae, 0x71, 0x65, + 0x67, 0x64, 0xeb, 0x5b, 0x37, 0xb5, 0xf2, 0x60, + 0xc0, 0xd6, 0xb0, 0xd4, 0x34, 0x53, 0x59, 0x59, + 0xe2, 0x62, 0xd1, 0x48, 0xac, 0x7d, 0x51, 0x3e, + 0x2d, 0xf3, 0x16, 0xa5, 0xf3, 0x5e, 0xf7, 0x8d, + 0x96, 0x8e, 0x11, 0x3e, 0xc4, 0x56, 0x5b, 0x93, + 0x5d, 0x66, 0x0c, 0xe7, 0x5a, 0x44, 0x70, 0xd6, + 0x8d, 0x7b, 0xab, 0xa7, 0xb4, 0x02, 0xea, 0x9f, + 0x66, 0x2e, 0x99, 0x19, 0x92, 0x29, 0x59, 0x31, + 0x02, 0xb8, 0x70, 0x96, 0x93, 0x4d, 0xea, 0x55, + 0x49, 0x4c, 0x7d, 0x8b, 0x67, 0x7f, 0x52, 0x68, + 0x5b, 0x00, 0x0d, 0x23, 0x46, 0x97, 0x53, 0x4a, + 0xe3, 0xd9, 0x2b, 0x87, 0xbd, 0xb7, 0x30, 0xbd, + 0xc5, 0xcd, 0x61, 0x69, 0x6d, 0x49, 0x3a, 0x5d, + 0x8b, 0x12, 0xbc, 0xde, 0xfa, 0x4d, 0xa3, 0xc2, + 0x27, 0x4d, 0x1c, 0x63, 0x06, 0x08, 0xb5, 0x31, + 0xcc, 0x4c, 0xdb, 0x2d, 0x66, 0xd1, 0x28, 0xec, + 0xbb, 0x29, 0x9b, 0x30, 0x12, 0x18, 0xe4, 0x6c, + 0x6e, 0x88, 0x86, 0xb9, 0xae, 0xad, 0x6a, 0xb5, + 0x45, 0x61, 0x3c, 0x99, 0x81, 0xb0, 0x05, 0xa2, + 0x56, 0xb8, 0xb4, 0xb8, 0xea, 0xd1, 0x53, 0x5e, + 0xf2, 0x9a, 0xcb, 0x8b, 0x60, 0xda, 0x1b, 0xdb, + 0x61, 0xa1, 0xb2, 0x8c, 0x63, 0xce, 0xf2, 0xbe, + 0x52, 0xbd, 0xdb, 0xdb, 0xff, 0x00, 0xf6, 0x69, + 0xdf, 0x4a, 0x34, 0x44, 0x1f, 0xdd, 0x78, 0x03, + 0x8d, 0x4f, 0x76, 0xda, 0xcc, 0xcf, 0x4f, 0x05, + 0x23, 0xcb, 0x52, 0x6b, 0x8e, 0x63, 0x58, 0x9e, + 0xee, 0xdb, 0x22, 0x33, 0x0c, 0xa2, 0xe2, 0xc2, + 0x26, 0xc9, 0x23, 0xda, 0xf0, 0xe7, 0x61, 0x18, + 0x6b, 0xbd, 0x55, 0xea, 0x0c, 0x96, 0xe2, 0x5b, + 0x3f, 0x6c, 0x12, 0x31, 0xb1, 0x96, 0x97, 0x50, + 0xd6, 0xba, 0x14, 0xbe, 0x76, 0xf6, 0x5d, 0xe4, + 0xb3, 0xcd, 0x1e, 0x9e, 0x69, 0xf5, 0x1f, 0xfe, + 0x37, 0x61, 0x2b, 0x19, 0x8b, 0xfd, 0x8b, 0x66, + 0xc4, 0x60, 0xd0, 0x98, 0xd9, 0x18, 0xed, 0xba, + 0x8a, 0x23, 0x2d, 0xa6, 0xb5, 0xf8, 0xad, 0x6f, + 0x2d, 0x8e, 0x2d, 0x7d, 0x7e, 0xca, 0xd2, 0x2d, + 0xf8, 0xcc, 0xcf, 0xfe, 0x10, 0xd9, 0x6e, 0x4f, + 0x75, 0x98, 0x34, 0xc8, 0xc2, 0x23, 0x87, 0xd6, + 0x38, 0x6b, 0xed, 0x05, 0xd5, 0x3e, 0xcd, 0x5d, + 0x47, 0x13, 0x9f, 0x0c, 0xad, 0x98, 0x8d, 0x6d, + 0xa1, 0x69, 0xee, 0x69, 0x52, 0xf0, 0x41, 0x23, + 0x72, 0x36, 0x41, 0x6d, 0x46, 0xcc, 0xf8, 0x46, + 0x03, 0xab, 0xc6, 0x70, 0xaa, 0xd7, 0x90, 0xd8, + 0xdf, 0x59, 0x09, 0x59, 0x76, 0xec, 0x41, 0xf8, + 0x4b, 0x34, 0x97, 0x69, 0xa1, 0xc4, 0xa2, 0x72, + 0xdb, 0x8c, 0xee, 0xf0, 0x9f, 0x04, 0xc7, 0x94, + 0xc7, 0xf4, 0xd2, 0x69, 0x6b, 0x4d, 0xa3, 0x76, + 0xf8, 0x9e, 0x10, 0xaf, 0xe5, 0xd9, 0x74, 0xb7, + 0xf2, 0x49, 0x14, 0x6e, 0x6b, 0x1d, 0x10, 0x05, + 0xd8, 0xab, 0xae, 0xb4, 0x5d, 0xb0, 0xec, 0xd5, + 0xdb, 0xe5, 0x91, 0x8f, 0x91, 0xac, 0x63, 0x0e, + 0x89, 0x29, 0x5c, 0x5a, 0x34, 0x80, 0x3b, 0x0b, + 0xb7, 0x28, 0x60, 0x66, 0x79, 0x7e, 0xd6, 0x8a, + 0x37, 0x58, 0x1d, 0x82, 0x6a, 0xb9, 0xb3, 0xfc, + 0xe6, 0xf6, 0xde, 0xfd, 0xd6, 0xd6, 0xef, 0xe6, + 0x99, 0x18, 0x6d, 0x48, 0xa5, 0x49, 0x23, 0x16, + 0xea, 0xbc, 0xe4, 0xbd, 0xaf, 0xa5, 0x66, 0x38, + 0xd7, 0x55, 0x63, 0x0e, 0x0a, 0xe3, 0x9b, 0xdf, + 0x59, 0xdb, 0x69, 0x8d, 0x63, 0xda, 0x83, 0x3e, + 0x2b, 0x8b, 0x75, 0xd0, 0xd3, 0x81, 0x48, 0x6c, + 0xf3, 0x99, 0xd6, 0x71, 0x63, 0x3a, 0xc3, 0x83, + 0x6b, 0xf3, 0xa9, 0xa1, 0x45, 0x17, 0x92, 0x6a, + 0x75, 0x9d, 0x25, 0x49, 0x64, 0xb9, 0x6c, 0xf7, + 0xd7, 0x01, 0xed, 0x71, 0x8a, 0x38, 0x48, 0x73, + 0xa5, 0x6e, 0xba, 0xeb, 0x00, 0x2e, 0x99, 0x3f, + 0x87, 0x3a, 0xf0, 0xe0, 0xcf, 0x82, 0x27, 0xbb, + 0x8f, 0x48, 0xd7, 0x8a, 0x6e, 0xfb, 0xad, 0x7a, + 0xe2, 0x06, 0xdb, 0xb9, 0xdc, 0xc3, 0xa8, 0x48, + 0x1e, 0x48, 0x03, 0xca, 0xc4, 0xb9, 0x36, 0xa9, + 0xd1, 0xe3, 0xb7, 0x03, 0xf6, 0x80, 0x3a, 0xbe, + 0x6d, 0x45, 0x14, 0xf8, 0x9a, 0x37, 0x99, 0x22, + 0x89, 0xed, 0x33, 0x46, 0x28, 0x45, 0x75, 0x13, + 0xaa, 0xaa, 0xa6, 0x32, 0xcc, 0xcf, 0x30, 0xbf, + 0xb9, 0x64, 0xaf, 0x02, 0x78, 0xc8, 0xc6, 0xe7, + 0x54, 0x0a, 0x1f, 0x27, 0x0d, 0x16, 0x7c, 0x53, + 0x13, 0x68, 0x99, 0xe1, 0xb2, 0x38, 0xb7, 0x79, + 0x88, 0xb6, 0xcd, 0xb5, 0xd6, 0xd3, 0x96, 0x74, + 0xe3, 0xc7, 0x4f, 0x82, 0x3a, 0xab, 0xbb, 0x25, + 0x85, 0xb7, 0x19, 0x9c, 0x31, 0xbb, 0x4b, 0x41, + 0x2f, 0x20, 0xee, 0xe1, 0x15, 0x5c, 0x57, 0x50, + 0xba, 0xda, 0xe1, 0xf6, 0xef, 0x70, 0x73, 0xa3, + 0x34, 0x24, 0x57, 0xe5, 0x52, 0x1b, 0x32, 0x6b, + 0x9b, 0x33, 0xcc, 0x7f, 0x81, 0x68, 0xbc, 0xfd, + 0x16, 0x98, 0xe4, 0xc1, 0x86, 0x9a, 0xe6, 0xa4, + 0x4f, 0xb2, 0xd0, 0x96, 0xda, 0x3b, 0xfb, 0x9b, + 0x56, 0xc3, 0x14, 0x0f, 0x31, 0x97, 0xe2, 0x2e, + 0x73, 0x75, 0xd1, 0xb4, 0x5b, 0xf2, 0xbb, 0xc6, + 0x5d, 0xe5, 0xed, 0xf6, 0xa7, 0xb7, 0x1e, 0x96, + 0x3e, 0xa4, 0x0a, 0x8d, 0x55, 0x2a, 0x2f, 0x6b, + 0x8d, 0x2e, 0xe0, 0x1f, 0xd4, 0x3e, 0x15, 0x04, + 0x01, 0x3a, 0x43, 0x49, 0xec, 0x80, 0xb9, 0x57, + 0x1e, 0xec, 0x75, 0x98, 0xe1, 0x3c, 0xda, 0xf2, + 0x67, 0x9a, 0x67, 0xbf, 0xeb, 0x57, 0xc3, 0x6c, + 0xf8, 0x7c, 0x96, 0x4d, 0x97, 0xd0, 0xfb, 0xb0, + 0x35, 0x02, 0xd0, 0x29, 0xbd, 0x57, 0x28, 0xec, + 0xdd, 0x92, 0x4b, 0x9b, 0xcd, 0x1c, 0x4d, 0xc4, + 0xf7, 0xb9, 0xa1, 0xad, 0x1b, 0xa4, 0x85, 0xdf, + 0xb2, 0x07, 0xde, 0xab, 0xfd, 0x4f, 0xef, 0x2f, + 0x76, 0xd1, 0x36, 0x4d, 0xa9, 0xb8, 0x71, 0xff, + 0x00, 0x84, 0x0b, 0x80, 0xee, 0x35, 0xaa, 0x37, + 0x6d, 0xc9, 0x79, 0xe5, 0x08, 0x8a, 0x6e, 0xf2, + 0xf8, 0xe9, 0x3f, 0xad, 0x6d, 0x3e, 0x6d, 0x31, + 0xec, 0xb5, 0xc9, 0x6d, 0x64, 0x9d, 0x91, 0xb8, + 0xfe, 0x68, 0x05, 0xdd, 0xf3, 0x45, 0xc1, 0x98, + 0xe5, 0x77, 0x39, 0x7b, 0x9a, 0x65, 0xa3, 0xd8, + 0xfd, 0x02, 0x46, 0xd7, 0x0d, 0x77, 0x8d, 0x57, + 0x56, 0xd3, 0x5d, 0xca, 0xcc, 0xc2, 0x30, 0xc7, + 0x96, 0x88, 0x98, 0xd7, 0x36, 0x84, 0x8d, 0x3a, + 0x54, 0xa6, 0x78, 0x04, 0xd9, 0x13, 0xe4, 0x76, + 0x97, 0x06, 0xb5, 0xfd, 0xdd, 0x0a, 0x6b, 0x7b, + 0xc4, 0xd6, 0x6d, 0xe1, 0x28, 0xb6, 0x0c, 0x33, + 0x19, 0x6b, 0x5a, 0xcd, 0x27, 0x0f, 0xb6, 0x65, + 0x09, 0x97, 0x64, 0xd7, 0x77, 0xed, 0x32, 0x34, + 0xb6, 0x38, 0x81, 0xa0, 0x7b, 0xaa, 0x6b, 0xda, + 0x01, 0x74, 0xdc, 0xec, 0xd5, 0xdc, 0x31, 0x19, + 0x23, 0x90, 0x4d, 0x41, 0x52, 0xd0, 0x30, 0x9e, + 0xe2, 0x94, 0xba, 0xc5, 0x65, 0x90, 0x9e, 0x60, + 0xe1, 0x7b, 0x22, 0x68, 0x69, 0xec, 0x9a, 0x55, + 0x44, 0x64, 0xf9, 0xfb, 0x6c, 0xa2, 0x92, 0x3b, + 0xa3, 0x24, 0xa1, 0xce, 0x0e, 0x61, 0x1e, 0x31, + 0xd5, 0xa7, 0xca, 0x29, 0xbb, 0x24, 0xeb, 0x35, + 0xf0, 0x89, 0x27, 0x0e, 0x0a, 0x69, 0x4b, 0xeb, + 0xba, 0xf5, 0xdd, 0xbf, 0xd8, 0xe8, 0xd9, 0x32, + 0x4c, 0xd7, 0x00, 0xee, 0x35, 0xa2, 0x9d, 0xa2, + 0x57, 0x36, 0x6f, 0x04, 0xb7, 0x19, 0xec, 0xb6, + 0xf0, 0x8a, 0xbd, 0xe5, 0xbd, 0xc1, 0x80, 0x54, + 0xae, 0xcd, 0x9b, 0x92, 0x39, 0x73, 0x0b, 0xe9, + 0x22, 0x05, 0xac, 0x79, 0xc4, 0xd6, 0x9d, 0xc0, + 0x5c, 0x74, 0x29, 0x58, 0xec, 0x63, 0x8e, 0xfa, + 0xe2, 0xf5, 0xc3, 0x14, 0x92, 0xe1, 0x03, 0xb0, + 0xd0, 0x06, 0x8e, 0xe9, 0x55, 0xb5, 0xf6, 0xe4, + 0xb5, 0xa7, 0x93, 0xa5, 0x30, 0xc6, 0x4c, 0x14, + 0xa4, 0x4e, 0xb1, 0xbe, 0x74, 0x95, 0x63, 0x31, + 0xca, 0x64, 0xcb, 0xe2, 0x12, 0x4d, 0x33, 0x1d, + 0x88, 0xd1, 0x8c, 0x15, 0xa9, 0x52, 0x17, 0x50, + 0x67, 0x03, 0x2a, 0x73, 0xe5, 0xb8, 0x63, 0xad, + 0xc4, 0x60, 0x98, 0xc3, 0x74, 0xe1, 0xd1, 0x41, + 0x55, 0x0f, 0x9a, 0xdf, 0xcb, 0x79, 0x76, 0xf7, + 0xc9, 0xe2, 0x86, 0xd5, 0x8c, 0x8f, 0xe6, 0x81, + 0xb9, 0xdb, 0x56, 0x6b, 0xff, 0x00, 0xf4, 0xe3, + 0xfe, 0xc1, 0xbf, 0x22, 0xb5, 0xad, 0x3a, 0x53, + 0x77, 0xb6, 0x63, 0x8b, 0x96, 0x3a, 0x63, 0xb7, + 0x7a, 0x69, 0xba, 0x29, 0x58, 0x9e, 0x3a, 0xfb, + 0x90, 0x96, 0x59, 0x25, 0xcd, 0xe5, 0xb7, 0xb4, + 0x47, 0x23, 0x69, 0xa6, 0x8d, 0x35, 0xa9, 0xa6, + 0xe2, 0xe9, 0x8b, 0x66, 0x2e, 0x9f, 0x18, 0x7c, + 0x92, 0xb6, 0x27, 0x1d, 0x4c, 0xa5, 0x78, 0x54, + 0x96, 0xcd, 0x1f, 0xf2, 0xa6, 0x79, 0xce, 0xf0, + 0xa8, 0xbd, 0x9f, 0xbe, 0xb9, 0x9b, 0x36, 0x73, + 0x66, 0x95, 0xcf, 0x6b, 0xda, 0xec, 0x4d, 0x24, + 0x90, 0x08, 0xd5, 0x40, 0xa2, 0x72, 0x5e, 0x66, + 0xda, 0x4f, 0x0a, 0xaf, 0x5c, 0x38, 0x22, 0x31, + 0xee, 0xac, 0xce, 0xfe, 0x1b, 0xbd, 0x88, 0xdb, + 0xab, 0x59, 0xad, 0x27, 0x75, 0xbc, 0xa2, 0xaf, + 0x14, 0xa1, 0x1f, 0x9d, 0x5d, 0x54, 0x52, 0x71, + 0x6c, 0xc5, 0xd3, 0xe1, 0x0f, 0x74, 0xad, 0x63, + 0xce, 0x90, 0xc2, 0xd2, 0x78, 0x56, 0xfc, 0xd9, + 0xac, 0x76, 0xd1, 0xd9, 0xb0, 0xea, 0x70, 0x69, + 0x23, 0xb4, 0x5c, 0x7e, 0x45, 0xef, 0x6a, 0xae, + 0xa6, 0x86, 0x28, 0x23, 0x89, 0xee, 0x8f, 0x1b, + 0x9c, 0xe7, 0x16, 0x92, 0x09, 0xc2, 0x34, 0x0a, + 0x85, 0x33, 0x92, 0xd3, 0xb2, 0x23, 0x84, 0xab, + 0xe9, 0xf1, 0xd3, 0xbb, 0x6c, 0x9e, 0x18, 0xfc, + 0x34, 0xf7, 0xb8, 0x4e, 0xce, 0xde, 0x36, 0x07, + 0xcc, 0xf7, 0xb5, 0xb8, 0x03, 0x9c, 0x59, 0xa6, + 0xbe, 0x2d, 0x78, 0x94, 0x4e, 0x20, 0xad, 0xf6, + 0x93, 0xbe, 0xe3, 0x20, 0x12, 0xbc, 0xd5, 0xe6, + 0x07, 0x87, 0x1e, 0xcb, 0x43, 0x9b, 0xf2, 0x2a, + 0x60, 0x76, 0x85, 0x6c, 0x57, 0xb4, 0xcd, 0xa2, + 0xd3, 0xe1, 0x2e, 0x7e, 0x67, 0x16, 0x3a, 0x6c, + 0x9a, 0x44, 0xfd, 0x75, 0xdc, 0xd9, 0x54, 0xaa, + 0xd7, 0x89, 0x31, 0x2e, 0xac, 0xed, 0x95, 0x4a, + 0xad, 0x78, 0x93, 0x12, 0x0e, 0xab, 0x22, 0x7d, + 0xba, 0xde, 0x9e, 0xb5, 0x9f, 0x58, 0x2b, 0x1e, + 0x72, 0x07, 0xb5, 0x8f, 0x30, 0x7c, 0xaa, 0xb3, + 0x62, 0xef, 0xfb, 0xeb, 0x6f, 0xb5, 0x67, 0xd6, + 0x0a, 0xcd, 0x9c, 0xfb, 0xd0, 0xf3, 0x38, 0xd6, + 0x5f, 0x33, 0xe3, 0x57, 0xa1, 0xfc, 0xbf, 0xec, + 0xbf, 0xc5, 0xcb, 0x6d, 0xef, 0x11, 0x79, 0xcd, + 0xef, 0x95, 0x3c, 0xa0, 0x6d, 0xff, 0x00, 0x6f, + 0x17, 0x9e, 0xdf, 0x0a, 0x9e, 0x5c, 0x5b, 0x85, + 0x15, 0x9c, 0x7b, 0xd5, 0x97, 0x9f, 0xf2, 0x85, + 0x2a, 0xa2, 0xb3, 0x8f, 0x7a, 0xb2, 0xf3, 0xfe, + 0x50, 0x81, 0x93, 0x7b, 0xd5, 0xef, 0x9e, 0x7e, + 0xb1, 0x52, 0xaa, 0x2b, 0x26, 0xf7, 0xab, 0xdf, + 0x3c, 0xfd, 0x62, 0xa5, 0x50, 0x11, 0x11, 0x06, + 0x46, 0xa2, 0xbe, 0x1d, 0x7b, 0xef, 0x97, 0x1f, + 0x6a, 0xff, 0x00, 0xac, 0x57, 0xdc, 0x46, 0xa2, + 0xbe, 0x1d, 0x7b, 0xef, 0x97, 0x1f, 0x6a, 0xff, + 0x00, 0xac, 0x56, 0x4f, 0x37, 0xe1, 0x47, 0xd0, + 0x7f, 0x6d, 0xfd, 0xfe, 0x63, 0xe1, 0x8f, 0xfc, + 0xda, 0x51, 0x11, 0x64, 0x7d, 0x20, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x94, 0x28, + 0x0a, 0xf5, 0xb0, 0xbb, 0x37, 0x97, 0xdf, 0x65, + 0xf3, 0x5f, 0x66, 0x16, 0xed, 0x9f, 0x9c, 0x7f, + 0x37, 0x00, 0x75, 0x74, 0x35, 0x9e, 0x51, 0x14, + 0xa6, 0xb2, 0xa8, 0xcd, 0x6b, 0x9c, 0x68, 0xd1, + 0x52, 0x4d, 0x38, 0x57, 0xd4, 0x6f, 0xae, 0x1d, + 0xb2, 0xbb, 0x23, 0x03, 0x23, 0xf1, 0x67, 0x67, + 0x36, 0xc0, 0x4e, 0xeb, 0xdc, 0x71, 0xc9, 0xab, + 0xb1, 0x55, 0xdf, 0xcb, 0x56, 0x26, 0xd3, 0x6b, + 0x7d, 0xb5, 0xf1, 0x79, 0x3f, 0xce, 0xb3, 0x5e, + 0x31, 0xe2, 0xc1, 0x8a, 0xda, 0x64, 0xf3, 0x19, + 0x22, 0xb1, 0xb6, 0x74, 0x9d, 0x23, 0xdb, 0xaf, + 0xb3, 0x8a, 0xa3, 0xb6, 0xf9, 0x3d, 0xbe, 0x55, + 0x9a, 0xb7, 0xd9, 0x63, 0x11, 0x5a, 0x5c, 0x46, + 0x1f, 0x13, 0x1b, 0xa9, 0xa4, 0x78, 0xae, 0x1f, + 0x2a, 0x87, 0xc9, 0xa2, 0x8e, 0x7c, 0xda, 0xce, + 0xde, 0x56, 0x87, 0xc5, 0x34, 0xf1, 0xb1, 0xed, + 0x3a, 0x8b, 0x5c, 0xe0, 0x0a, 0xbf, 0x6d, 0xed, + 0xa4, 0x79, 0x8e, 0xcf, 0x43, 0x9a, 0x40, 0x2b, + 0xcc, 0x96, 0xc8, 0xd3, 0xbb, 0xcd, 0xcb, 0x40, + 0xe1, 0xdc, 0x24, 0x15, 0x46, 0xc8, 0x29, 0xd7, + 0x59, 0x79, 0xff, 0x00, 0xf8, 0x98, 0xfe, 0xb0, + 0x51, 0x92, 0x91, 0x19, 0x63, 0x48, 0xfa, 0x6f, + 0x6d, 0x61, 0x6f, 0x21, 0xe6, 0x2d, 0x97, 0xf9, + 0x7d, 0xa6, 0x66, 0x7b, 0x98, 0x69, 0x7a, 0x5a, + 0x7f, 0x5b, 0x5a, 0xc7, 0x0f, 0xf0, 0x7d, 0x1e, + 0xef, 0x67, 0xb6, 0x2e, 0xc7, 0x09, 0xbb, 0xb6, + 0xb6, 0xb6, 0x0f, 0xa8, 0x67, 0x3a, 0xec, 0x18, + 0xa9, 0x4a, 0xd2, 0xae, 0x0b, 0x54, 0x59, 0x0e, + 0xc3, 0xde, 0x93, 0x15, 0xb4, 0x76, 0xcf, 0x92, + 0x95, 0xa4, 0x12, 0x55, 0xdd, 0xe7, 0x15, 0xc7, + 0xf8, 0x93, 0x67, 0x79, 0x75, 0x0d, 0x8f, 0xb3, + 0x40, 0xf9, 0xb0, 0x3a, 0x4c, 0x61, 0x8d, 0x2e, + 0xc3, 0x50, 0xca, 0x56, 0x8a, 0xb9, 0xb3, 0x19, + 0x0e, 0x76, 0x33, 0xcb, 0x49, 0xbd, 0x96, 0x58, + 0x23, 0x86, 0x46, 0xc9, 0x24, 0x8f, 0x69, 0x60, + 0xc0, 0xd3, 0x88, 0x8a, 0xba, 0x9e, 0x56, 0xa5, + 0xde, 0xf3, 0x11, 0x92, 0x29, 0x18, 0xf5, 0xd7, + 0xdb, 0xa3, 0xc8, 0xf2, 0xd8, 0x26, 0xde, 0x4f, + 0xd4, 0x4f, 0x9d, 0xbd, 0x32, 0x46, 0xe9, 0x8c, + 0x7d, 0xcd, 0x3c, 0x3f, 0x16, 0x9d, 0xad, 0xd9, + 0xd3, 0x91, 0xdf, 0x06, 0x42, 0xf2, 0xfb, 0x5b, + 0x86, 0x97, 0xc0, 0x5d, 0xa5, 0xc0, 0x8d, 0x6d, + 0x27, 0x42, 0xba, 0x64, 0x3b, 0x2f, 0xb3, 0xf7, + 0x39, 0x35, 0x95, 0xc4, 0xf6, 0x31, 0xbe, 0x69, + 0x62, 0x6b, 0x9e, 0xf3, 0x5a, 0xd4, 0xff, 0x00, + 0x69, 0x45, 0x7e, 0x27, 0x4d, 0x11, 0x36, 0x10, + 0x57, 0xf5, 0xa3, 0x9c, 0x79, 0x1b, 0xa1, 0xae, + 0xc2, 0xd1, 0xdf, 0x05, 0x4f, 0x65, 0xd7, 0x9e, + 0xc5, 0xb2, 0x96, 0x17, 0x24, 0xf8, 0xac, 0x65, + 0xb8, 0x77, 0x9a, 0xe7, 0xb5, 0xa7, 0x86, 0xa9, + 0x8a, 0x95, 0x8c, 0xd7, 0x8d, 0x23, 0x48, 0x8f, + 0x05, 0xfc, 0xd7, 0x98, 0xf3, 0x19, 0x3f, 0x97, + 0xf9, 0x4b, 0x6e, 0xbd, 0x72, 0x5f, 0x25, 0xa9, + 0x33, 0x16, 0xd2, 0x6d, 0x11, 0xe1, 0x2f, 0x9d, + 0xed, 0x46, 0x5f, 0x1e, 0x5b, 0x9f, 0x5d, 0x5b, + 0x44, 0xd0, 0xc8, 0x9a, 0xe0, 0xe8, 0xd8, 0x35, + 0x06, 0x3c, 0x02, 0x02, 0xb9, 0xec, 0xbe, 0xca, + 0xe4, 0xd7, 0x19, 0x0d, 0xad, 0xcd, 0xed, 0xa3, + 0x26, 0xb9, 0x98, 0x19, 0x0c, 0x8e, 0xad, 0x68, + 0xe3, 0xe2, 0x8d, 0x63, 0x50, 0x51, 0x5f, 0x89, + 0x76, 0x24, 0xe6, 0xd6, 0x73, 0xb0, 0x53, 0xda, + 0x63, 0xe6, 0xea, 0x37, 0x5c, 0xd7, 0x53, 0xc0, + 0xe0, 0xae, 0x4c, 0x73, 0x6c, 0x65, 0xcb, 0x32, + 0xc6, 0x68, 0xf1, 0x1c, 0x0f, 0x64, 0x44, 0xc0, + 0x3c, 0x25, 0x57, 0x0e, 0x3a, 0xc6, 0x4b, 0xcd, + 0xa3, 0x87, 0xb3, 0xf1, 0x5b, 0xcf, 0xf9, 0xcc, + 0x97, 0xf2, 0x3e, 0x52, 0x29, 0x79, 0xae, 0x4b, + 0xc4, 0xde, 0xd6, 0xac, 0xf1, 0xff, 0x00, 0x6e, + 0xba, 0x4e, 0xb2, 0xf9, 0xae, 0xd7, 0xd8, 0x5b, + 0xd9, 0x67, 0xf2, 0x5a, 0xda, 0x44, 0x23, 0x66, + 0x18, 0xcb, 0x63, 0x65, 0x69, 0x57, 0x34, 0x56, + 0x9d, 0xd2, 0xa5, 0xa1, 0xc9, 0xb2, 0x0d, 0x9b, + 0xb6, 0x8a, 0xe7, 0x68, 0x01, 0xba, 0xbd, 0x9c, + 0x62, 0x8e, 0xc9, 0xba, 0x9a, 0x3b, 0x22, 0xa3, + 0x84, 0xa9, 0x29, 0xac, 0xa3, 0xba, 0xfc, 0x43, + 0x92, 0x59, 0x45, 0x62, 0xb3, 0x81, 0x97, 0x2e, + 0xec, 0xe0, 0x63, 0x5a, 0xdd, 0x1d, 0x82, 0x6a, + 0xb8, 0xf6, 0x72, 0xfe, 0x3c, 0xce, 0xef, 0x3c, + 0xcd, 0x6f, 0x20, 0x65, 0xd1, 0x8d, 0x8d, 0x96, + 0x26, 0x48, 0xd0, 0xe0, 0x1b, 0xfa, 0xcc, 0x2d, + 0x15, 0xd5, 0xa0, 0x05, 0x59, 0xa4, 0x77, 0x2d, + 0x3a, 0x7d, 0xd6, 0x9d, 0x38, 0x6b, 0xe1, 0xe3, + 0xc3, 0xda, 0xeb, 0x3e, 0x63, 0x25, 0xfc, 0xae, + 0x28, 0xd6, 0xd3, 0x5c, 0x38, 0x71, 0x5f, 0x2c, + 0xd2, 0x76, 0xe4, 0xc9, 0x39, 0x3e, 0x9a, 0x57, + 0x7f, 0xf8, 0xcc, 0xb4, 0xb7, 0x68, 0xf6, 0x3e, + 0xec, 0x9b, 0x7b, 0xcc, 0x99, 0xb0, 0x42, 0xed, + 0x02, 0x48, 0xe8, 0xe7, 0x0a, 0xee, 0xf8, 0xb8, + 0x4a, 0x8b, 0xda, 0x3d, 0x9e, 0x66, 0x5a, 0xc8, + 0xaf, 0xac, 0x25, 0xf6, 0x9c, 0xae, 0xe7, 0x4c, + 0x52, 0x03, 0x57, 0x34, 0x9f, 0xcd, 0x71, 0xdd, + 0x56, 0x0c, 0xa6, 0xef, 0x2a, 0xda, 0x78, 0x6e, + 0xec, 0xe6, 0xcb, 0x21, 0xb5, 0x74, 0x51, 0x19, + 0x19, 0x3c, 0x4d, 0x1a, 0x08, 0xd5, 0xe3, 0x50, + 0x69, 0x51, 0x7b, 0x2d, 0x2b, 0x6f, 0xf2, 0xfc, + 0xcb, 0x20, 0xb8, 0x38, 0x98, 0xf8, 0x8c, 0xd6, + 0xa7, 0x58, 0x6b, 0xd9, 0xf3, 0x7b, 0x7a, 0x0a, + 0x9b, 0x44, 0x5b, 0x48, 0x9d, 0x2d, 0xba, 0x3e, + 0x89, 0xac, 0x6d, 0xf0, 0xf7, 0x2f, 0x8f, 0x24, + 0xe0, 0xb6, 0x4c, 0x94, 0x8c, 0x98, 0xbd, 0x3d, + 0xab, 0x5c, 0xf8, 0x72, 0x5f, 0xbb, 0x13, 0x8e, + 0xfe, 0x16, 0x8b, 0x47, 0x84, 0xc7, 0x8c, 0xfb, + 0x95, 0x52, 0x29, 0xaf, 0x5a, 0xc2, 0xf4, 0xea, + 0xee, 0x8a, 0x1a, 0x69, 0x0b, 0x07, 0xb0, 0xb2, + 0x3d, 0xee, 0x1f, 0x26, 0x11, 0x11, 0x48, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0xc8, 0x58, 0x59, 0x0a, + 0x06, 0x46, 0xb0, 0xbe, 0xd7, 0x94, 0xff, 0x00, + 0x25, 0xb2, 0xfb, 0x08, 0xfe, 0xa8, 0x5f, 0x14, + 0x1e, 0x53, 0x7b, 0x8b, 0xed, 0x99, 0x57, 0xf2, + 0x5b, 0x2f, 0xb1, 0x8f, 0xea, 0x85, 0xab, 0xca, + 0x7d, 0xd7, 0xf8, 0x3e, 0x7f, 0xfb, 0x8f, 0xf8, + 0x78, 0x3f, 0x6a, 0xff, 0x00, 0xa2, 0x1d, 0x23, + 0x5a, 0xae, 0x3b, 0xca, 0x3d, 0xb2, 0xac, 0x63, + 0x5a, 0xae, 0x3b, 0xca, 0x3d, 0xb2, 0xb6, 0xbe, + 0x6d, 0xba, 0xcb, 0xdf, 0x21, 0xf3, 0x82, 0x8c, + 0xda, 0x83, 0x4c, 0xde, 0x4f, 0x35, 0x9e, 0x02, + 0xa4, 0xec, 0xbd, 0xee, 0x1f, 0x38, 0x28, 0x9d, + 0xab, 0x34, 0xce, 0x1f, 0xe6, 0xb3, 0xc0, 0x57, + 0x5c, 0x1f, 0x7b, 0x2f, 0x9d, 0xfe, 0x14, 0x7e, + 0xd2, 0x33, 0x12, 0x62, 0x5a, 0xaa, 0x52, 0xa5, + 0x69, 0x79, 0xb1, 0x0d, 0xb8, 0x93, 0x12, 0xd5, + 0x52, 0x95, 0x28, 0x9d, 0x1b, 0x71, 0x26, 0x25, + 0xaa, 0xa5, 0x2a, 0x50, 0xd1, 0xb7, 0x12, 0x62, + 0x5a, 0xaa, 0x52, 0xa5, 0x0d, 0x1b, 0x71, 0x26, + 0x25, 0xaa, 0xa5, 0x2a, 0x50, 0xd1, 0xb7, 0x12, + 0x62, 0x5a, 0xaa, 0x52, 0xa5, 0x0d, 0x1b, 0x71, + 0x26, 0x25, 0xaa, 0xa5, 0x2a, 0x50, 0xd1, 0xb7, + 0x12, 0xb9, 0x67, 0x7a, 0x36, 0x79, 0xce, 0xfe, + 0xa4, 0x7f, 0x22, 0xa4, 0xd4, 0xa9, 0x5b, 0xcd, + 0xa3, 0xba, 0xbb, 0xb0, 0x36, 0x4f, 0x8a, 0x36, + 0xb0, 0x86, 0xb7, 0x13, 0x6b, 0x5a, 0x36, 0x9b, + 0xea, 0x97, 0xac, 0xcc, 0xd7, 0x4e, 0x6e, 0xd8, + 0xad, 0x5a, 0xd3, 0x2c, 0x4c, 0xcc, 0x6f, 0xae, + 0xd5, 0xa3, 0x25, 0x7c, 0x77, 0x19, 0x65, 0xb4, + 0x8e, 0xd2, 0x63, 0x18, 0x47, 0x60, 0xb2, 0xac, + 0xf0, 0x28, 0xdc, 0xb2, 0x7e, 0x7f, 0x69, 0x6e, + 0xdf, 0xf9, 0xad, 0x6b, 0x98, 0x06, 0xf0, 0x66, + 0x16, 0xa8, 0x8c, 0xb7, 0x68, 0xae, 0xb2, 0xeb, + 0x73, 0x04, 0x71, 0xb2, 0x46, 0x17, 0x17, 0xf8, + 0xd5, 0xae, 0x9d, 0xcd, 0x0b, 0x9f, 0x2e, 0xcd, + 0x66, 0xcb, 0xee, 0x5f, 0x72, 0xc6, 0xb6, 0x59, + 0x24, 0x69, 0x6b, 0x83, 0xab, 0x4d, 0x26, 0xb5, + 0xd6, 0xa9, 0x18, 0xed, 0xad, 0x9d, 0xbb, 0xf5, + 0x9e, 0xc4, 0x44, 0xcc, 0x6c, 0x98, 0xdd, 0xf0, + 0x88, 0x58, 0xae, 0x26, 0x6c, 0x7b, 0x5b, 0x15, + 0x75, 0x3a, 0x20, 0xda, 0xf6, 0x48, 0x72, 0xd7, + 0xb5, 0x2f, 0xbe, 0x8a, 0x68, 0x1f, 0x6c, 0xe9, + 0x1a, 0xc7, 0x02, 0xd2, 0x18, 0x48, 0xab, 0x81, + 0x14, 0xd4, 0xa0, 0x2f, 0xf3, 0x39, 0xef, 0xaf, + 0x05, 0xe3, 0x80, 0x8a, 0x46, 0x86, 0x81, 0x82, + 0xb4, 0xf1, 0x77, 0x74, 0xf6, 0xd4, 0xac, 0x1b, + 0x65, 0x74, 0xc8, 0xc3, 0x26, 0x81, 0xb2, 0xb8, + 0x7e, 0x78, 0x25, 0xb5, 0xed, 0xe8, 0x4d, 0x96, + 0x8d, 0xb3, 0x11, 0x13, 0xa4, 0x22, 0x32, 0x52, + 0xd1, 0x7a, 0x4c, 0xcd, 0x2b, 0x6b, 0xcd, 0xe2, + 0x63, 0xde, 0xd9, 0x98, 0x65, 0x97, 0x56, 0xd9, + 0x61, 0xb8, 0x9e, 0xf6, 0x57, 0x92, 0xd6, 0x87, + 0x42, 0xe3, 0xa0, 0xb8, 0xd0, 0x96, 0xeb, 0x52, + 0x96, 0xc4, 0x0d, 0x99, 0x15, 0xe8, 0xcf, 0xfa, + 0xae, 0x55, 0x7c, 0xd7, 0x3c, 0xba, 0xcc, 0xf0, + 0xb6, 0x40, 0x22, 0x85, 0xa6, 0xa2, 0x36, 0xee, + 0x9d, 0xf7, 0x2d, 0xcc, 0xda, 0x4b, 0xa6, 0x65, + 0xfe, 0xc0, 0x22, 0x8c, 0xc7, 0xcd, 0x98, 0xb1, + 0x1c, 0x58, 0xa8, 0xe1, 0x86, 0xba, 0xd2, 0x69, + 0x69, 0xac, 0x7c, 0x75, 0x4d, 0x73, 0x63, 0x8b, + 0xdf, 0x49, 0xb6, 0xd9, 0xae, 0x91, 0xc3, 0xda, + 0xef, 0xd8, 0xe3, 0x59, 0xae, 0x8e, 0xf3, 0x18, + 0xb9, 0xf3, 0x2a, 0x7c, 0x50, 0x3e, 0xde, 0x1f, + 0x0b, 0x17, 0x06, 0x55, 0x9c, 0x4f, 0x96, 0x3e, + 0x47, 0xc3, 0x1b, 0x5e, 0x65, 0xa0, 0x38, 0xeb, + 0xa2, 0x84, 0xea, 0xa2, 0xf1, 0x3e, 0x65, 0x24, + 0xf9, 0x88, 0xcc, 0x1e, 0xc6, 0xb6, 0x4c, 0x4c, + 0x79, 0x68, 0xad, 0x2a, 0xca, 0x68, 0xd7, 0xd8, + 0x57, 0xdb, 0x6e, 0xe5, 0xa7, 0x9d, 0x5c, 0xfb, + 0x95, 0x9c, 0x34, 0xaf, 0xb6, 0xb6, 0x8d, 0xdf, + 0x05, 0x9f, 0x6b, 0x5c, 0x19, 0x67, 0x03, 0xb5, + 0xd2, 0x5a, 0xd3, 0xb8, 0xb6, 0xed, 0x04, 0x7e, + 0xd3, 0x92, 0xb9, 0xf1, 0x78, 0xf4, 0x2c, 0x90, + 0x61, 0xd3, 0x51, 0xab, 0x73, 0xb0, 0x55, 0x6b, + 0x33, 0xcf, 0xae, 0x73, 0x28, 0x5b, 0x0c, 0xb1, + 0xb1, 0x81, 0x8e, 0xc6, 0x0b, 0x2b, 0xae, 0x9a, + 0xb4, 0xad, 0xd9, 0x6e, 0xd3, 0xdd, 0xd8, 0xc0, + 0x2d, 0xdc, 0xc1, 0x3c, 0x4c, 0xd0, 0xc2, 0x4d, + 0x1c, 0x06, 0xf2, 0xe7, 0xdb, 0xb6, 0xda, 0xcf, + 0xb6, 0x27, 0xc1, 0xd6, 0x73, 0xe3, 0xb5, 0xef, + 0x13, 0xac, 0x46, 0x4a, 0xed, 0xd5, 0x33, 0xb2, + 0x90, 0xba, 0x2b, 0x19, 0x64, 0x90, 0x16, 0x89, + 0x1f, 0x89, 0xa0, 0x8a, 0x78, 0xad, 0x68, 0x0b, + 0xc6, 0xce, 0x4a, 0x26, 0xbf, 0xcc, 0xa4, 0x06, + 0xb8, 0xa4, 0xa8, 0x3d, 0x8c, 0x4e, 0xa2, 0x8c, + 0xbf, 0xda, 0xab, 0xbb, 0xa8, 0x5d, 0x0c, 0x51, + 0xb6, 0x06, 0xbc, 0x51, 0xce, 0x04, 0x97, 0x53, + 0xb1, 0xa9, 0x71, 0xe5, 0x59, 0xd4, 0xf9, 0x59, + 0x90, 0xc5, 0x1b, 0x24, 0xe7, 0x69, 0x5c, 0x75, + 0xd1, 0x4e, 0xd1, 0x4e, 0xdd, 0xa6, 0x2f, 0x33, + 0x11, 0x1a, 0x91, 0x97, 0x1d, 0x6d, 0x86, 0x91, + 0x33, 0x35, 0xc7, 0xed, 0xf6, 0x36, 0xe7, 0xee, + 0xff, 0x00, 0x39, 0xba, 0x1f, 0xd6, 0x03, 0xe8, + 0xb5, 0x75, 0xec, 0x9d, 0xd0, 0x65, 0xfb, 0xe0, + 0x27, 0x44, 0xcc, 0x21, 0xb5, 0xf9, 0xcc, 0x35, + 0x3e, 0x15, 0x0d, 0x7b, 0x76, 0xfb, 0xdb, 0xa9, + 0x2e, 0xa4, 0x01, 0xae, 0x94, 0x82, 0x58, 0xdd, + 0x5b, 0x83, 0xc0, 0x14, 0x86, 0x41, 0x61, 0x7f, + 0x25, 0xed, 0xbd, 0xdc, 0x4c, 0x3c, 0xc3, 0x1f, + 0xe3, 0x4a, 0x69, 0x4c, 0x23, 0xca, 0x1d, 0xd5, + 0xd2, 0xfc, 0x31, 0xe9, 0x33, 0xe1, 0x0e, 0x14, + 0x9b, 0x4e, 0x79, 0xb5, 0x62, 0x67, 0x5b, 0x7b, + 0x39, 0x4f, 0xb5, 0x68, 0xcc, 0x39, 0xbb, 0x0c, + 0xb6, 0xf2, 0x56, 0x1a, 0x19, 0x0b, 0x9c, 0x3c, + 0xf9, 0x28, 0xdf, 0x0a, 0xa2, 0xe2, 0x14, 0xd7, + 0xa5, 0x59, 0xf6, 0xc2, 0xec, 0x32, 0xd6, 0x1b, + 0x50, 0x7c, 0x69, 0x5d, 0x8d, 0xdd, 0xa6, 0x8d, + 0x1c, 0x35, 0x55, 0x4a, 0xaa, 0xe1, 0x8d, 0x2b, + 0x3f, 0x15, 0xfc, 0xec, 0xc4, 0xdf, 0x6c, 0x78, + 0x56, 0x1b, 0x31, 0x26, 0x25, 0xaa, 0xa5, 0x2a, + 0x57, 0x56, 0x6d, 0x1b, 0x71, 0x26, 0x25, 0xaa, + 0xa5, 0x2a, 0x50, 0xd1, 0xb7, 0x12, 0x62, 0x5a, + 0xaa, 0x52, 0xa5, 0x0d, 0x1b, 0x71, 0x26, 0x25, + 0xaa, 0xa5, 0x2a, 0x50, 0xd1, 0xb7, 0x12, 0x62, + 0x5a, 0xaa, 0x52, 0xa5, 0x0d, 0x1b, 0x71, 0x26, + 0x25, 0xaa, 0xa5, 0x2a, 0x50, 0xd1, 0xb7, 0x12, + 0x62, 0x5a, 0xaa, 0x52, 0xa8, 0x68, 0x90, 0xca, + 0x0f, 0xf9, 0xa5, 0xa7, 0xda, 0xb7, 0xc2, 0xac, + 0x79, 0xb7, 0xbe, 0xbb, 0xcd, 0x6f, 0x81, 0x56, + 0x32, 0x63, 0x5c, 0xda, 0xd3, 0xed, 0x5b, 0xe1, + 0x56, 0x7c, 0xd7, 0xdf, 0x5d, 0xe6, 0xb7, 0xc0, + 0xb3, 0xf9, 0x8f, 0xba, 0x3e, 0x0f, 0x43, 0xc8, + 0xfd, 0x96, 0xf8, 0xb4, 0x5b, 0x7b, 0xc4, 0x5e, + 0x70, 0xf0, 0xae, 0x2d, 0xad, 0x34, 0xcd, 0x1b, + 0xf6, 0x63, 0xc2, 0x57, 0x6d, 0xb7, 0xbc, 0x45, + 0xe7, 0x0f, 0x0a, 0xe0, 0xdb, 0x03, 0xfe, 0x68, + 0xd3, 0xfe, 0x18, 0xf0, 0x95, 0x18, 0x3f, 0x89, + 0x1f, 0x05, 0xfc, 0xef, 0xf0, 0x7f, 0x18, 0x43, + 0xe2, 0x4c, 0x4b, 0x55, 0x52, 0xa5, 0x69, 0x79, + 0x8d, 0xb8, 0x93, 0x12, 0xd5, 0x52, 0x95, 0x28, + 0x68, 0xdb, 0x89, 0x4c, 0xec, 0x99, 0xff, 0x00, + 0x34, 0x3f, 0x64, 0xef, 0x08, 0x50, 0x35, 0x2b, + 0xaf, 0x2c, 0xcc, 0xa5, 0xcb, 0xae, 0x0c, 0xf1, + 0xb1, 0xaf, 0x71, 0x69, 0x65, 0x1d, 0x5a, 0x50, + 0x91, 0xa7, 0x42, 0x8b, 0xc4, 0xcd, 0x66, 0x23, + 0xdb, 0x0b, 0xe1, 0x9d, 0xb9, 0x2b, 0x69, 0xf0, + 0x89, 0x4b, 0x6d, 0x85, 0x3a, 0xc2, 0x1f, 0xb1, + 0x1f, 0x59, 0xca, 0x08, 0x91, 0x42, 0x0e, 0xad, + 0xde, 0x02, 0x3e, 0x55, 0xd1, 0x9a, 0x66, 0x93, + 0x66, 0x53, 0x32, 0x69, 0x58, 0xd6, 0x39, 0x8c, + 0xc1, 0x46, 0x56, 0x9a, 0xc9, 0xdd, 0xed, 0xae, + 0x40, 0xea, 0x69, 0xdd, 0x1a, 0x92, 0x91, 0x31, + 0x4a, 0xc4, 0xf8, 0xea, 0x66, 0x9d, 0xd9, 0x6d, + 0x68, 0x8e, 0x52, 0xbc, 0x5c, 0x87, 0xde, 0x6c, + 0xe9, 0x30, 0x8c, 0x4e, 0x7c, 0x00, 0x80, 0x34, + 0x9a, 0x80, 0x34, 0x77, 0x97, 0x16, 0xc7, 0xc2, + 0xfc, 0x37, 0x33, 0x39, 0xa4, 0x31, 0xc5, 0x8d, + 0x6d, 0x45, 0x34, 0xb7, 0x15, 0x7c, 0x2a, 0x27, + 0x2a, 0xda, 0x1b, 0xbc, 0xba, 0x3e, 0x62, 0x82, + 0x68, 0x2b, 0x50, 0xd7, 0x12, 0x0b, 0x77, 0xe8, + 0x42, 0xe9, 0xba, 0xda, 0xfb, 0xc9, 0x62, 0x2c, + 0x82, 0x26, 0xc2, 0x5d, 0x50, 0x5e, 0x49, 0x2e, + 0x00, 0xfc, 0xdd, 0x0b, 0x8c, 0xd2, 0xf1, 0x16, + 0xac, 0x78, 0x4c, 0xb5, 0x46, 0x5c, 0x53, 0x7a, + 0x65, 0x9b, 0x5b, 0x75, 0x2b, 0xa6, 0xd6, 0x7d, + 0xb9, 0xa3, 0x6a, 0x8c, 0xc0, 0xf8, 0xbc, 0xef, + 0x36, 0x4e, 0xe5, 0x29, 0x85, 0x59, 0xdd, 0x1b, + 0x62, 0x96, 0x6b, 0xc3, 0xaf, 0x9a, 0x03, 0x90, + 0x5c, 0xef, 0x95, 0x7c, 0xe9, 0xb2, 0x39, 0xb2, + 0x09, 0x2a, 0x4b, 0x83, 0x83, 0xea, 0x75, 0x92, + 0x0d, 0x74, 0xa9, 0xab, 0x8d, 0xac, 0xbe, 0x9e, + 0x09, 0x20, 0x31, 0x46, 0xd1, 0x2b, 0x4b, 0x0b, + 0x86, 0x2a, 0x8a, 0xee, 0x85, 0x39, 0x31, 0x4c, + 0xcd, 0x74, 0xf6, 0x78, 0xa3, 0x06, 0x7a, 0x56, + 0x2d, 0xba, 0x67, 0x8d, 0xb7, 0x47, 0x0e, 0x69, + 0x3d, 0x9d, 0x73, 0x2f, 0xb2, 0xbb, 0x9b, 0x77, + 0x9d, 0x06, 0x47, 0x13, 0xda, 0x7f, 0x8e, 0xb5, + 0xed, 0x7c, 0xc1, 0x96, 0xf6, 0xd6, 0xc3, 0x46, + 0x22, 0x5e, 0x47, 0x61, 0x82, 0x9f, 0x2a, 0x85, + 0xca, 0xb3, 0xa9, 0xf2, 0xc1, 0x27, 0x34, 0xc6, + 0xc8, 0x25, 0xa5, 0x43, 0xeb, 0xa3, 0x0e, 0xad, + 0x4b, 0x5e, 0x67, 0x9a, 0xcf, 0x99, 0x4c, 0xd9, + 0x66, 0x6b, 0x5b, 0x81, 0xb8, 0x5a, 0xd6, 0xd6, + 0x9a, 0xeb, 0x5d, 0x2a, 0x7b, 0x73, 0xdc, 0xd7, + 0xf5, 0x75, 0x52, 0x73, 0x57, 0xd3, 0xed, 0x8d, + 0x77, 0xda, 0x34, 0x9d, 0x79, 0x6a, 0xb6, 0x87, + 0x4d, 0x71, 0xb3, 0xa1, 0xd6, 0xd5, 0xe7, 0x5d, + 0x6e, 0x30, 0x61, 0xd7, 0x88, 0x0d, 0xc5, 0x0f, + 0x93, 0xd9, 0xe6, 0x59, 0x8c, 0x52, 0x48, 0xfb, + 0xa9, 0xa2, 0x6b, 0x48, 0x0d, 0x20, 0x9d, 0x27, + 0x4e, 0x2d, 0x7b, 0xcb, 0x87, 0x2b, 0xda, 0x0b, + 0xbc, 0xb9, 0x86, 0x26, 0x81, 0x2c, 0x24, 0xd7, + 0x0b, 0xb7, 0x09, 0xd7, 0x84, 0xae, 0xbb, 0xad, + 0xaf, 0xbb, 0x96, 0x37, 0x47, 0x04, 0x2d, 0x84, + 0xb8, 0x53, 0x9c, 0x27, 0x11, 0x03, 0x77, 0x71, + 0x46, 0xdb, 0xc6, 0xb1, 0x11, 0x13, 0xac, 0xba, + 0x77, 0x71, 0x5e, 0x2b, 0x33, 0x6b, 0x56, 0x6b, + 0x5d, 0x34, 0x76, 0x6c, 0xd8, 0x2d, 0xcd, 0xaf, + 0x98, 0x64, 0x33, 0x16, 0x0c, 0x3c, 0xe3, 0xb5, + 0x9a, 0x3a, 0x9a, 0x54, 0x66, 0xd3, 0xbb, 0xfc, + 0xe6, 0x71, 0xd8, 0x8f, 0xea, 0xae, 0x6c, 0xaf, + 0x38, 0x9f, 0x2c, 0x96, 0x49, 0x22, 0x63, 0x65, + 0x32, 0x0a, 0x1c, 0x75, 0xdf, 0xae, 0xe1, 0x5a, + 0x73, 0x0b, 0xe9, 0x2f, 0xee, 0x9f, 0x75, 0x23, + 0x43, 0x1c, 0xf0, 0x01, 0x63, 0x6b, 0x4d, 0x02, + 0x9b, 0xaa, 0xf1, 0x5b, 0x46, 0x49, 0xb7, 0x28, + 0x72, 0xbe, 0x5a, 0xdb, 0x05, 0x6b, 0x1a, 0xeb, + 0x37, 0xd7, 0x8f, 0x8f, 0xc6, 0x5a, 0xf1, 0x2b, + 0x7e, 0xca, 0x3e, 0x33, 0x97, 0x39, 0xad, 0xa6, + 0x26, 0xc8, 0x71, 0xf7, 0x75, 0x2a, 0x65, 0x57, + 0x5e, 0x5b, 0x9a, 0xdd, 0x65, 0xb2, 0x99, 0x20, + 0x20, 0x87, 0x68, 0x7b, 0x1d, 0xa8, 0xa6, 0x4a, + 0xee, 0xae, 0x8a, 0x79, 0x7c, 0x91, 0x8e, 0xf1, + 0x6b, 0x44, 0xf8, 0x68, 0x94, 0xb5, 0x87, 0x38, + 0xb2, 0xce, 0x4c, 0x82, 0x19, 0x24, 0x2f, 0x79, + 0x12, 0x10, 0x0e, 0x07, 0xb0, 0x9f, 0x9d, 0xa9, + 0x5a, 0x65, 0x22, 0x18, 0xe4, 0x9c, 0x33, 0x13, + 0x9a, 0xca, 0xd1, 0xa3, 0x49, 0xc3, 0xa8, 0x76, + 0x55, 0x69, 0xdb, 0x69, 0x71, 0x82, 0x8d, 0xb6, + 0x68, 0x7d, 0x35, 0x97, 0x1a, 0x57, 0xb4, 0xb9, + 0xad, 0xf6, 0xb3, 0x32, 0x8d, 0xd2, 0x19, 0x43, + 0x26, 0xe7, 0x0d, 0x40, 0x75, 0x40, 0x6f, 0x61, + 0xb4, 0xdc, 0x5c, 0xad, 0x4b, 0xce, 0x9a, 0xd6, + 0x38, 0x34, 0xe3, 0xcb, 0x86, 0x9a, 0xd6, 0xb6, + 0xb7, 0xd5, 0x33, 0x6f, 0x0e, 0x08, 0xb9, 0xa7, + 0x7c, 0xd3, 0x3e, 0x59, 0x3f, 0x69, 0x23, 0x8b, + 0x9f, 0xdb, 0x2b, 0xbb, 0x20, 0xb8, 0x64, 0x39, + 0xb4, 0x0e, 0x79, 0x00, 0x3e, 0xb1, 0xd4, 0xff, + 0x00, 0x58, 0x28, 0xfb, 0x9b, 0x8f, 0x68, 0x9d, + 0xf3, 0x08, 0xdb, 0x16, 0x33, 0x88, 0xb1, 0x95, + 0xc3, 0x53, 0xac, 0x8a, 0xef, 0xad, 0x61, 0xc4, + 0x1a, 0x8d, 0x04, 0x69, 0x04, 0x6b, 0x05, 0x77, + 0xd3, 0x5a, 0xed, 0xf7, 0x31, 0xd6, 0xdb, 0x6f, + 0x16, 0xe3, 0x6d, 0x2d, 0xbb, 0x8a, 0xd9, 0xb5, + 0x96, 0x73, 0xca, 0x20, 0x9e, 0x26, 0x39, 0xe1, + 0x98, 0x98, 0xec, 0x20, 0x93, 0x43, 0x4d, 0xe5, + 0xdb, 0xb3, 0xf0, 0x3a, 0xd7, 0x2a, 0x06, 0x71, + 0x80, 0x97, 0x3a, 0x52, 0xd3, 0xb8, 0x3f, 0xf8, + 0x0a, 0x12, 0xd3, 0x6b, 0xef, 0x21, 0x89, 0xb1, + 0xcf, 0x13, 0x66, 0x2d, 0x14, 0x0f, 0xa9, 0x07, + 0xba, 0xb4, 0xe6, 0x3b, 0x4f, 0x79, 0x7b, 0x13, + 0xa0, 0x63, 0x44, 0x11, 0x3f, 0xcb, 0xa1, 0xc4, + 0xe2, 0x3e, 0x6e, 0x9d, 0xc2, 0xb8, 0xed, 0xbc, + 0xd7, 0x67, 0xb2, 0x27, 0x56, 0xb8, 0xcb, 0x86, + 0xb7, 0xb6, 0x58, 0x9b, 0x4d, 0xed, 0x1e, 0x1a, + 0x78, 0x4a, 0x53, 0x65, 0x65, 0xe7, 0x67, 0xbe, + 0x93, 0xe7, 0x3d, 0xa7, 0xbe, 0xe5, 0x9b, 0x39, + 0x9a, 0xdd, 0xab, 0xb9, 0x61, 0xd7, 0x23, 0x70, + 0x8e, 0xe0, 0x6b, 0x94, 0x16, 0x55, 0x9c, 0xcd, + 0x95, 0x89, 0x04, 0x31, 0xb1, 0xe2, 0x5c, 0x35, + 0xc7, 0x88, 0x52, 0x9d, 0xa2, 0x56, 0x89, 0xb3, + 0x2b, 0x89, 0x6f, 0xcd, 0xf8, 0xa4, 0x53, 0x17, + 0x07, 0x8c, 0x3a, 0x43, 0x48, 0xd1, 0xba, 0xad, + 0x38, 0xe6, 0x6d, 0x6f, 0x83, 0x9d, 0x72, 0xd6, + 0x31, 0xe3, 0xd6, 0x66, 0x66, 0xb6, 0xdd, 0x29, + 0x8d, 0xaa, 0xb6, 0x99, 0xd9, 0x94, 0x45, 0x8d, + 0x2e, 0x13, 0x31, 0xac, 0x65, 0x01, 0x3e, 0x35, + 0x5d, 0xa1, 0x4a, 0xe7, 0xee, 0x10, 0x64, 0x2f, + 0x8d, 0xde, 0x53, 0x9a, 0xd8, 0xe9, 0xba, 0x4e, + 0x85, 0x17, 0x1e, 0xd9, 0xce, 0x18, 0x04, 0xd6, + 0xcd, 0x73, 0xf7, 0xda, 0xe2, 0x07, 0x01, 0x0a, + 0x2f, 0x34, 0xce, 0x6e, 0xb3, 0x37, 0x37, 0x9d, + 0xa4, 0x71, 0xb3, 0xc8, 0x8d, 0xb5, 0x2d, 0x15, + 0xdd, 0x35, 0xdd, 0x51, 0x15, 0xb5, 0xb6, 0xc4, + 0xf0, 0x88, 0x5e, 0xd9, 0x30, 0xc4, 0x65, 0xb5, + 0x66, 0xd3, 0x6c, 0xde, 0x31, 0xa7, 0x05, 0xaa, + 0xf8, 0x1b, 0xcd, 0x9f, 0x2e, 0x8b, 0xc6, 0x73, + 0xe2, 0x6b, 0x85, 0x34, 0x9d, 0x14, 0x25, 0x43, + 0xe4, 0x19, 0x2c, 0x37, 0xf0, 0x4b, 0x2d, 0xd3, + 0x5e, 0x1a, 0x0b, 0x5b, 0x1d, 0x09, 0x6e, 0xa1, + 0xe3, 0x6e, 0x2e, 0x4c, 0xaf, 0x68, 0xee, 0xb2, + 0xf8, 0xcc, 0x38, 0x04, 0xd0, 0xd4, 0x96, 0xb1, + 0xc4, 0x87, 0x36, 0xbb, 0x80, 0xef, 0x2e, 0x8b, + 0xcd, 0xad, 0xba, 0x9a, 0x23, 0x14, 0x11, 0x36, + 0x0c, 0x42, 0x85, 0xf5, 0xa9, 0x03, 0x76, 0x8a, + 0x36, 0xde, 0x35, 0x88, 0xf0, 0x99, 0x44, 0xdf, + 0x0d, 0xb6, 0xde, 0xfa, 0xcd, 0xa9, 0x5d, 0xbb, + 0x7d, 0x8e, 0xfd, 0x9a, 0x64, 0x31, 0xe6, 0x59, + 0x84, 0x50, 0x9a, 0xc7, 0x19, 0xc2, 0xd2, 0x4d, + 0x74, 0x07, 0x10, 0xba, 0xdd, 0x9d, 0x60, 0xcf, + 0x5d, 0x97, 0x48, 0x03, 0x62, 0xc2, 0x00, 0x77, + 0xf5, 0xdd, 0xe3, 0x0e, 0xf2, 0xab, 0x65, 0x59, + 0xcc, 0xf9, 0x5b, 0xe4, 0x7c, 0x4c, 0x6c, 0x9c, + 0xe8, 0x00, 0xe3, 0xae, 0x8d, 0x35, 0xdc, 0x2b, + 0x55, 0xee, 0x61, 0x2d, 0xe5, 0xeb, 0xaf, 0x5c, + 0x04, 0x72, 0x9a, 0x10, 0x1b, 0xb8, 0x5a, 0x00, + 0x04, 0x76, 0x55, 0xa7, 0x16, 0xb7, 0x9d, 0xdc, + 0x63, 0x4f, 0x12, 0x3c, 0xc5, 0x69, 0x8e, 0xb1, + 0x4d, 0x63, 0x4b, 0x4f, 0x0d, 0x3c, 0x21, 0x2d, + 0xb5, 0x36, 0x1c, 0xc5, 0xc7, 0xb6, 0x46, 0x29, + 0x1d, 0xc7, 0xed, 0x3b, 0x0f, 0x1a, 0xcf, 0x75, + 0x4c, 0xe6, 0x1a, 0x36, 0x69, 0xff, 0x00, 0x60, + 0xdf, 0xee, 0xaa, 0xed, 0xee, 0xd2, 0x5c, 0x5f, + 0x5a, 0xba, 0xd6, 0x78, 0x22, 0x2c, 0x78, 0x1e, + 0x30, 0xc5, 0x50, 0x46, 0xee, 0xb4, 0x9b, 0x69, + 0x6e, 0xa6, 0xb1, 0x75, 0x8b, 0xa2, 0x60, 0x8d, + 0xcc, 0x0c, 0xc4, 0x31, 0x62, 0xa0, 0xa6, 0x9d, + 0x7d, 0x85, 0x1b, 0x2f, 0x31, 0x58, 0x9f, 0xd5, + 0x98, 0x93, 0x7e, 0x38, 0xb6, 0x59, 0xac, 0xce, + 0x99, 0x62, 0x7e, 0x6b, 0x16, 0xcc, 0x9f, 0xf2, + 0x76, 0x79, 0xcf, 0xf0, 0xa8, 0x3d, 0x96, 0x35, + 0xce, 0x47, 0x99, 0x22, 0xd1, 0x97, 0xed, 0x25, + 0xd5, 0x85, 0xab, 0x6d, 0x59, 0x13, 0x1e, 0xd6, + 0x92, 0x71, 0x12, 0x6b, 0xa4, 0xae, 0x4c, 0xbb, + 0x32, 0x9a, 0xc2, 0xeb, 0xda, 0xa3, 0x68, 0x7b, + 0xf0, 0x91, 0x47, 0x13, 0x4f, 0x1a, 0x95, 0xd4, + 0xa6, 0x29, 0x6f, 0xaf, 0xfd, 0x48, 0xb6, 0x6a, + 0xff, 0x00, 0xb3, 0xff, 0x00, 0xf5, 0xcf, 0xd4, + 0xb0, 0xe7, 0x32, 0xb6, 0x2d, 0xa3, 0xb2, 0x7b, + 0xf4, 0x34, 0x06, 0x8d, 0x3d, 0x92, 0xe6, 0xfc, + 0xab, 0x76, 0xd3, 0xe5, 0xd7, 0x37, 0x91, 0xc3, + 0x25, 0xb3, 0x4c, 0x8e, 0x61, 0x21, 0xcc, 0x07, + 0x71, 0xdb, 0xaa, 0xbd, 0x75, 0x7d, 0x3e, 0x73, + 0x7f, 0x0e, 0x30, 0xc8, 0x64, 0x70, 0x11, 0xb0, + 0x82, 0x43, 0x41, 0xd7, 0x5d, 0x35, 0x53, 0x77, + 0x33, 0xed, 0x36, 0x5d, 0x6a, 0xd6, 0x96, 0xc7, + 0x74, 0x7c, 0x91, 0x24, 0x6d, 0x73, 0x9c, 0x3c, + 0xe1, 0x45, 0x5d, 0xb3, 0x5d, 0x9c, 0x62, 0x27, + 0xde, 0xbc, 0x5a, 0x2f, 0x39, 0x63, 0x49, 0x9a, + 0x4e, 0x9a, 0x6d, 0x8d, 0x78, 0xa4, 0x60, 0xb6, + 0x7d, 0xa6, 0x42, 0xe8, 0x1f, 0xe5, 0xb6, 0x07, + 0xe2, 0xed, 0xb8, 0x39, 0xc7, 0xc2, 0xa8, 0xc1, + 0xda, 0x02, 0xbb, 0x36, 0x49, 0xed, 0xf6, 0x7e, + 0x47, 0xdf, 0x13, 0xcf, 0xf3, 0x52, 0x17, 0x97, + 0x6b, 0xab, 0xcb, 0x88, 0x1d, 0xf5, 0x45, 0xaa, + 0xb6, 0x1f, 0xd6, 0xf8, 0xa9, 0xe6, 0xf4, 0xff, + 0x00, 0x6e, 0x23, 0x5e, 0x15, 0xf0, 0x9f, 0x63, + 0x6e, 0x24, 0xc4, 0xb5, 0x54, 0xa5, 0x4a, 0xea, + 0xcb, 0xa3, 0x6e, 0x24, 0xc4, 0xb5, 0x54, 0xa5, + 0x50, 0x76, 0x65, 0xe4, 0x7b, 0x7d, 0xb7, 0xdb, + 0x47, 0xf5, 0x82, 0xb5, 0xe7, 0x3e, 0xf4, 0x3c, + 0xc1, 0xf2, 0xaa, 0x86, 0x5c, 0x7f, 0xcc, 0x2d, + 0xab, 0xeb, 0xa3, 0xfa, 0xc1, 0x5b, 0xb3, 0x93, + 0xff, 0x00, 0x76, 0x3c, 0xc1, 0xf2, 0xac, 0xfe, + 0x63, 0xc6, 0xad, 0xfe, 0x47, 0xec, 0xbf, 0xc5, + 0xcb, 0x6f, 0xfb, 0x78, 0xbc, 0xf6, 0xf8, 0x54, + 0xf2, 0x81, 0xb7, 0xfd, 0xbc, 0x7e, 0x7b, 0x7c, + 0x2a, 0x79, 0x71, 0x96, 0xc1, 0x45, 0x67, 0x1e, + 0xf5, 0x65, 0xe7, 0xfc, 0xa1, 0x4a, 0xa8, 0xac, + 0xe3, 0xde, 0xac, 0xbc, 0xff, 0x00, 0x94, 0x20, + 0x64, 0xde, 0xf5, 0x7b, 0xe7, 0x9f, 0xac, 0x54, + 0xaa, 0x8a, 0xc9, 0xbd, 0xea, 0xf7, 0xcf, 0x3f, + 0x58, 0xa9, 0x54, 0x04, 0x44, 0x41, 0x91, 0xa8, + 0xaf, 0x87, 0x5e, 0xfb, 0xe5, 0xc7, 0xda, 0xbf, + 0xeb, 0x15, 0xf7, 0x11, 0xa8, 0xaf, 0x87, 0x5e, + 0xfb, 0xe5, 0xc7, 0xda, 0xbf, 0xeb, 0x15, 0x93, + 0xcd, 0xf8, 0x51, 0xf4, 0x1f, 0xdb, 0x7f, 0x7f, + 0x98, 0xf8, 0x63, 0xff, 0x00, 0x36, 0x94, 0x44, + 0x59, 0x1f, 0x48, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x2c, 0xea, 0x00, 0xac, 0x2c, 0x8d, + 0x3a, 0x10, 0xf8, 0x78, 0xcf, 0x87, 0xc5, 0x33, + 0xb2, 0x39, 0x79, 0xbf, 0xcf, 0xed, 0x23, 0x22, + 0xb1, 0xc6, 0x4c, 0xf2, 0xf9, 0xb1, 0xf8, 0xda, + 0x7b, 0x66, 0x81, 0x5e, 0xf6, 0xc7, 0x20, 0xcc, + 0x73, 0xd1, 0x6d, 0x1d, 0xac, 0xb1, 0x47, 0x0c, + 0x25, 0xce, 0x78, 0x90, 0x91, 0x57, 0x1a, 0x00, + 0x74, 0x34, 0xea, 0x15, 0x51, 0x3f, 0x86, 0x76, + 0x00, 0x47, 0x77, 0x98, 0xb8, 0x53, 0x11, 0x10, + 0x46, 0x4e, 0xe8, 0x1e, 0x3b, 0xe9, 0xdd, 0x51, + 0xb9, 0x9e, 0xde, 0x67, 0x8c, 0xcc, 0x6e, 0x59, + 0x69, 0x2b, 0x1b, 0x6e, 0xd9, 0x5c, 0xc8, 0xaa, + 0xc6, 0xbb, 0x40, 0xd1, 0xac, 0x8e, 0xc2, 0xd5, + 0x4d, 0x94, 0xc3, 0xf5, 0xc7, 0xdf, 0x3e, 0xc7, + 0xcf, 0x79, 0x9f, 0x51, 0xe6, 0x3f, 0x99, 0x4c, + 0xf9, 0x59, 0xa7, 0xff, 0x00, 0xa9, 0x11, 0x11, + 0x39, 0x3e, 0xdd, 0xd6, 0xf1, 0xff, 0x00, 0x15, + 0xd3, 0x2e, 0xca, 0x2e, 0x63, 0xd9, 0xc1, 0x94, + 0x5f, 0xbd, 0x92, 0x3f, 0x9a, 0x7c, 0x38, 0x98, + 0x49, 0x05, 0xa6, 0xa1, 0xbe, 0x50, 0x0b, 0xe6, + 0x59, 0x3c, 0x32, 0x5b, 0xed, 0x05, 0xa4, 0x12, + 0x0a, 0x49, 0x0d, 0xdb, 0x23, 0x70, 0x3b, 0xed, + 0x78, 0x0a, 0xdd, 0xb1, 0xbb, 0x5b, 0x98, 0xe6, + 0x39, 0xab, 0xac, 0x73, 0x19, 0x5a, 0xf1, 0x24, + 0x65, 0xd0, 0xd1, 0xa1, 0xbe, 0x33, 0x74, 0x91, + 0xa3, 0xb1, 0xa5, 0x70, 0xe7, 0xf9, 0x78, 0xb2, + 0xdb, 0x9b, 0x49, 0x9a, 0x3f, 0x57, 0x79, 0x34, + 0x33, 0xb6, 0x80, 0xf9, 0x58, 0xc3, 0x5f, 0xdf, + 0x0a, 0x6f, 0xb6, 0xd5, 0xc7, 0x6a, 0x7e, 0xad, + 0xa3, 0xe4, 0xaf, 0x93, 0xee, 0xf9, 0x6f, 0x33, + 0xe6, 0xbc, 0xb6, 0x79, 0xae, 0xec, 0xd8, 0xaf, + 0x93, 0xe9, 0xfb, 0x66, 0xfa, 0x71, 0xd1, 0x6a, + 0xda, 0x7d, 0xa4, 0x6e, 0xcf, 0x8b, 0x77, 0xba, + 0x03, 0x70, 0x2e, 0x4b, 0xc7, 0x8a, 0xec, 0x25, + 0xb8, 0x69, 0xa7, 0x51, 0xae, 0xb5, 0xba, 0x0c, + 0xd1, 0xd9, 0xbe, 0x50, 0x6f, 0x32, 0x77, 0x37, + 0x9d, 0x7b, 0x7f, 0x56, 0xd9, 0x86, 0x80, 0xf1, + 0xf9, 0xae, 0xc2, 0x55, 0x6f, 0xf1, 0x44, 0x8e, + 0x67, 0x2e, 0xdd, 0x18, 0xe5, 0x07, 0x81, 0x8a, + 0x2b, 0x60, 0x73, 0xd7, 0x58, 0xe6, 0x26, 0xc2, + 0x63, 0xff, 0x00, 0x6d, 0x7b, 0x40, 0xda, 0xea, + 0x6c, 0xa3, 0x51, 0xec, 0x62, 0x0a, 0xf3, 0x9b, + 0x4c, 0xdb, 0x67, 0xed, 0xb4, 0x70, 0xe7, 0xc5, + 0x93, 0x1f, 0xf2, 0xea, 0x64, 0xfe, 0x5b, 0x5f, + 0x35, 0x8e, 0x35, 0xcd, 0x49, 0x99, 0xb4, 0x6b, + 0xc2, 0x6b, 0x59, 0xe4, 0x81, 0xcd, 0x6e, 0xaf, + 0xee, 0xaf, 0xe5, 0x93, 0x30, 0x7b, 0x9d, 0x75, + 0x8b, 0x0c, 0xb8, 0x85, 0x28, 0x41, 0xa6, 0x10, + 0x37, 0x00, 0xec, 0x2b, 0xf6, 0x62, 0x4b, 0x7f, + 0x0d, 0xd8, 0xf6, 0xe8, 0x2d, 0xb7, 0x85, 0xc3, + 0xb6, 0xd7, 0xb4, 0x85, 0x17, 0xf8, 0x8b, 0x92, + 0xf3, 0x53, 0xc5, 0x9c, 0xc6, 0x28, 0xd9, 0x69, + 0x1c, 0xf4, 0xf9, 0xc0, 0x78, 0xae, 0x3d, 0xb1, + 0xa1, 0x49, 0x66, 0x67, 0xff, 0x00, 0xf9, 0xcb, + 0x1b, 0xb9, 0xec, 0xf0, 0xe9, 0xfe, 0xdb, 0x4a, + 0xa6, 0x3a, 0x4d, 0x2f, 0x96, 0x3c, 0x74, 0xae, + 0xb1, 0xf0, 0x6d, 0xcf, 0x9b, 0x1f, 0x98, 0xc5, + 0xfc, 0xba, 0xf5, 0x8a, 0xd2, 0x2d, 0x9e, 0xb5, + 0x9a, 0xd7, 0x84, 0x57, 0x4f, 0x18, 0x48, 0xde, + 0xd8, 0x75, 0xe5, 0xae, 0x49, 0x78, 0x00, 0x78, + 0x8a, 0x58, 0xa7, 0x79, 0xfe, 0xae, 0x03, 0x8b, + 0xbf, 0x45, 0xaa, 0xe6, 0xef, 0x9c, 0xdb, 0xdb, + 0x4b, 0x5a, 0xd5, 0xb6, 0xf6, 0x92, 0x12, 0x3f, + 0xac, 0xff, 0x00, 0x1b, 0xc0, 0x16, 0xcd, 0x84, + 0xbd, 0x37, 0x3b, 0x39, 0x6e, 0xd1, 0xa4, 0xc0, + 0x5d, 0x09, 0x1b, 0xb4, 0x69, 0xf1, 0x7b, 0xca, + 0x0b, 0x28, 0xbc, 0x17, 0x9f, 0x88, 0x77, 0x33, + 0x56, 0xa0, 0x09, 0x58, 0xc3, 0xfd, 0x56, 0x34, + 0x30, 0x2b, 0xeb, 0xc3, 0x1c, 0xfe, 0x65, 0xab, + 0xfe, 0x0c, 0x18, 0xf1, 0x4e, 0xff, 0x00, 0x37, + 0x4b, 0x6b, 0xb7, 0xca, 0x62, 0xcd, 0xb3, 0xe3, + 0x79, 0xe1, 0xf3, 0x48, 0x87, 0x34, 0xed, 0xde, + 0x63, 0x6f, 0x5f, 0x1a, 0xe6, 0xc0, 0x46, 0xcf, + 0x3b, 0x0b, 0x1d, 0xe0, 0x0a, 0x1b, 0x61, 0x0b, + 0xec, 0xa2, 0xce, 0x9c, 0xf6, 0x87, 0x3e, 0xde, + 0x16, 0xe2, 0x63, 0xbc, 0x92, 0x63, 0xe7, 0x2a, + 0x1d, 0xd8, 0xaa, 0xd5, 0xb5, 0x77, 0xf3, 0x65, + 0xbb, 0x6b, 0xed, 0xd0, 0x8a, 0xc9, 0x03, 0x61, + 0x7d, 0x35, 0x02, 0x30, 0x00, 0x41, 0xed, 0x8d, + 0x0a, 0x4a, 0xe6, 0xda, 0xee, 0xee, 0x2b, 0x9c, + 0xe7, 0x65, 0x5d, 0x1c, 0xb1, 0x66, 0x6c, 0xc3, + 0x7b, 0x6a, 0x40, 0xc6, 0x1c, 0x2b, 0x8b, 0x0d, + 0x69, 0xa7, 0xc6, 0xd2, 0x15, 0x35, 0xff, 0x00, + 0x73, 0xdf, 0x8e, 0xd7, 0x9d, 0x3f, 0xd3, 0x2d, + 0x5b, 0x27, 0xd2, 0x56, 0xb7, 0xd2, 0xb8, 0xfc, + 0xe6, 0x2c, 0x35, 0x8b, 0xde, 0x74, 0xac, 0x5b, + 0x15, 0xb8, 0xc5, 0xa7, 0xd9, 0x16, 0xa9, 0xd6, + 0xb7, 0x59, 0xde, 0xca, 0xdd, 0xbb, 0x2c, 0x63, + 0x2c, 0xae, 0xed, 0xfd, 0xee, 0xda, 0x16, 0x80, + 0x1f, 0x19, 0x06, 0xb8, 0x0f, 0x64, 0x78, 0x14, + 0x3e, 0xc1, 0xc7, 0x4b, 0xfb, 0xab, 0xc7, 0x7e, + 0xca, 0xda, 0xd5, 0xee, 0x7b, 0xf7, 0x2a, 0xea, + 0x06, 0x8e, 0xed, 0x0a, 0xd7, 0x90, 0x58, 0xed, + 0x6d, 0x8d, 0xd3, 0xc6, 0x5d, 0x69, 0x24, 0x6e, + 0x99, 0xbc, 0xdc, 0xa6, 0xe1, 0x84, 0x46, 0x5a, + 0x0d, 0x74, 0xe3, 0xa0, 0xd0, 0xbb, 0x73, 0x89, + 0xad, 0x76, 0x7b, 0x26, 0x93, 0x23, 0xb6, 0x91, + 0xb2, 0xe6, 0x37, 0xc7, 0x1d, 0xfc, 0x8c, 0xd0, + 0xd6, 0xb4, 0xfe, 0x60, 0xde, 0x1b, 0x81, 0x56, + 0x35, 0xd2, 0x97, 0xb7, 0x0d, 0x91, 0x3a, 0xfe, + 0x2d, 0x13, 0x4a, 0xd3, 0xbd, 0xe4, 0xf0, 0x4d, + 0x32, 0x57, 0xcd, 0x5e, 0xbb, 0x3b, 0x73, 0xba, + 0x69, 0x4f, 0xd7, 0x9b, 0xcf, 0x28, 0x8f, 0x05, + 0x3d, 0xce, 0xc4, 0xe7, 0x3b, 0xe7, 0x57, 0xbe, + 0xbc, 0xac, 0xd4, 0x56, 0xbb, 0x8b, 0x0b, 0x37, + 0x37, 0xbd, 0x11, 0xa0, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0xb2, 0x16, 0x16, 0x42, 0x00, + 0xf2, 0x9b, 0xdc, 0x5f, 0x6d, 0xca, 0xff, 0x00, + 0x93, 0x59, 0x7d, 0x8c, 0x7f, 0x54, 0x2f, 0x89, + 0x01, 0xa5, 0xab, 0xed, 0xb9, 0x60, 0xa6, 0x4f, + 0x66, 0x3f, 0xc1, 0x8f, 0xea, 0x85, 0xa7, 0xca, + 0x7d, 0xd6, 0xf8, 0x3e, 0x7f, 0xfb, 0x8f, 0xf8, + 0x78, 0x3f, 0x6a, 0xff, 0x00, 0xa2, 0xae, 0x91, + 0xad, 0x57, 0x1d, 0xe5, 0x1e, 0xd9, 0x56, 0x31, + 0xad, 0x57, 0x1d, 0xe5, 0x1e, 0xd9, 0x5b, 0x5f, + 0x36, 0xf5, 0x13, 0xf9, 0xb9, 0x58, 0xff, 0x00, + 0x9a, 0xe0, 0x7b, 0xeb, 0x93, 0x6c, 0xed, 0xcb, + 0x2e, 0xe2, 0xbc, 0x03, 0xc4, 0x99, 0x98, 0x0b, + 0xb7, 0x31, 0x37, 0x4f, 0x81, 0x74, 0xae, 0xc6, + 0xc5, 0x06, 0x69, 0x62, 0x72, 0xeb, 0x93, 0xe3, + 0x34, 0x7e, 0xad, 0xdb, 0xa2, 0x9e, 0x49, 0xee, + 0x2b, 0x52, 0xdb, 0x6d, 0xab, 0x96, 0x7a, 0x6f, + 0xa4, 0xd6, 0x14, 0x8c, 0x5c, 0x3b, 0xc9, 0x89, + 0x6e, 0xcc, 0x72, 0xeb, 0xbc, 0xb6, 0x63, 0x0d, + 0xcb, 0x48, 0x1f, 0x99, 0x20, 0xd2, 0xd7, 0x0f, + 0xea, 0x9f, 0x91, 0x72, 0x62, 0xa6, 0x82, 0xb5, + 0xc4, 0xc4, 0xc6, 0xaf, 0x32, 0x6b, 0x31, 0x3a, + 0x4f, 0x0d, 0x1b, 0x71, 0x26, 0x25, 0xab, 0x1a, + 0xce, 0x2f, 0xcb, 0x42, 0x94, 0x36, 0x62, 0x4c, + 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, 0xfc, 0xb4, + 0x21, 0xab, 0x66, 0x24, 0xc4, 0xb5, 0xe2, 0xfc, + 0xb4, 0x26, 0x2f, 0xcb, 0x42, 0x1a, 0xb6, 0x62, + 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, 0xfc, + 0xb4, 0x21, 0xab, 0x66, 0x24, 0xc4, 0xb5, 0xe2, + 0xfc, 0xb4, 0x26, 0x2f, 0xcb, 0x42, 0x1a, 0xb6, + 0x62, 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, + 0xfc, 0xb4, 0x21, 0xab, 0x66, 0x24, 0xc4, 0xb5, + 0xe2, 0xfc, 0xb4, 0x26, 0x2f, 0xcb, 0x42, 0x1a, + 0xb6, 0x62, 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, + 0x62, 0xfc, 0xb4, 0x21, 0xab, 0x66, 0x24, 0xc4, + 0xb5, 0xe2, 0xfc, 0xb4, 0x26, 0x2f, 0xcb, 0x42, + 0x1a, 0xb6, 0x62, 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, + 0x42, 0x62, 0xfc, 0xb4, 0x21, 0xab, 0x66, 0x24, + 0xc4, 0xb5, 0xe2, 0xfc, 0xb4, 0x26, 0x2f, 0xcb, + 0x42, 0x1a, 0xb6, 0x62, 0x4c, 0x4b, 0x5e, 0x2f, + 0xcb, 0x42, 0x62, 0xfc, 0xb4, 0x21, 0xab, 0x66, + 0x24, 0xc4, 0xb5, 0xe2, 0xfc, 0xb4, 0x26, 0x2f, + 0xcb, 0x42, 0x1a, 0xb6, 0x62, 0x52, 0x36, 0x3b, + 0x43, 0x98, 0x58, 0x5b, 0xfb, 0x3d, 0xb9, 0x60, + 0x65, 0x4b, 0xaa, 0xe6, 0xd4, 0xd5, 0xca, 0x2b, + 0x17, 0xe5, 0xa1, 0x63, 0x17, 0xe5, 0xa1, 0x44, + 0xc4, 0x4c, 0x69, 0x29, 0xad, 0xa6, 0xb3, 0xad, + 0x67, 0x47, 0x5d, 0xdd, 0xf5, 0xcd, 0xe4, 0xe6, + 0x7b, 0x97, 0xe3, 0x91, 0xda, 0x09, 0xdc, 0x1d, + 0x80, 0x16, 0x9c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, + 0x62, 0xfc, 0xb4, 0x29, 0x8d, 0x23, 0x84, 0x22, + 0x66, 0x66, 0x66, 0x66, 0x75, 0x99, 0x6c, 0xc4, + 0x98, 0x96, 0xbc, 0x5f, 0x96, 0x84, 0xc5, 0xf9, + 0x68, 0x43, 0x56, 0xcc, 0x49, 0x89, 0x6b, 0xc5, + 0xf9, 0x68, 0x4c, 0x5f, 0x96, 0x84, 0x35, 0x6c, + 0xc4, 0x98, 0x96, 0xbc, 0x5f, 0x96, 0x84, 0xc5, + 0xf9, 0x68, 0x43, 0x56, 0xcc, 0x49, 0x89, 0x6b, + 0xc5, 0xf9, 0x68, 0x4c, 0x5f, 0x96, 0x84, 0x35, + 0x6c, 0xc4, 0x98, 0x96, 0xbc, 0x5f, 0x96, 0x84, + 0xc5, 0xf9, 0x68, 0x43, 0x56, 0xcc, 0x49, 0x89, + 0x6b, 0xc5, 0xf9, 0x68, 0x4c, 0x5f, 0x96, 0x84, + 0x35, 0x6c, 0xc4, 0x98, 0x96, 0xac, 0x6b, 0x75, + 0xa5, 0xb5, 0xcd, 0xe4, 0xc2, 0x0b, 0x58, 0xcc, + 0x92, 0x1d, 0xc1, 0xa8, 0x76, 0x49, 0xdc, 0x09, + 0xae, 0x9e, 0x3e, 0x06, 0x93, 0x6e, 0x11, 0xe2, + 0x96, 0xd9, 0x5b, 0x67, 0x5c, 0x66, 0xd1, 0xbc, + 0x8f, 0x16, 0x00, 0x64, 0x27, 0xb8, 0x43, 0x7b, + 0xea, 0x73, 0x30, 0x90, 0x4b, 0x79, 0x23, 0x86, + 0x90, 0x0d, 0x07, 0x71, 0x7b, 0xb3, 0xb3, 0x8b, + 0x23, 0xcb, 0xf9, 0xa0, 0x43, 0xae, 0xe6, 0xd3, + 0x23, 0x87, 0xe5, 0xa8, 0x2e, 0x4a, 0x9d, 0xd5, + 0x93, 0x25, 0xb7, 0x5b, 0x57, 0xa7, 0xe5, 0xf1, + 0xf6, 0xe9, 0xa7, 0x39, 0xd5, 0x96, 0x3b, 0x0b, + 0xda, 0xef, 0x9a, 0x41, 0x5a, 0x76, 0xca, 0xdd, + 0xce, 0x36, 0xb7, 0xcd, 0xd3, 0x1b, 0x87, 0x36, + 0xe2, 0x35, 0x69, 0xd2, 0x38, 0x56, 0xd5, 0xdd, + 0x6e, 0x2d, 0xef, 0xec, 0xdf, 0x96, 0xdd, 0x79, + 0x2e, 0x14, 0x61, 0xe2, 0xec, 0x85, 0x15, 0x9d, + 0xb6, 0x89, 0xf9, 0xad, 0x96, 0x9b, 0xe9, 0x31, + 0xf2, 0x51, 0x83, 0xb4, 0x26, 0x25, 0xd3, 0x9a, + 0xe5, 0x77, 0x99, 0x64, 0xe6, 0x3b, 0x86, 0x92, + 0xd2, 0x7c, 0x49, 0x40, 0xf1, 0x5c, 0x3b, 0x1b, + 0xcb, 0x8b, 0x17, 0xe4, 0x56, 0xc8, 0x98, 0x9e, + 0x30, 0xf2, 0xed, 0x59, 0xac, 0xe9, 0x31, 0xa6, + 0x9c, 0x1b, 0x31, 0x26, 0x25, 0xaf, 0x17, 0xe5, + 0xa1, 0x31, 0x7e, 0x5a, 0x11, 0x1a, 0xb6, 0x62, + 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, 0xfc, + 0xb4, 0x21, 0xab, 0x66, 0x24, 0xc4, 0xb5, 0xe2, + 0xfc, 0xb4, 0x26, 0x2f, 0xcb, 0x42, 0x1a, 0xb6, + 0x62, 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, + 0xfc, 0xb4, 0x21, 0xab, 0x66, 0x24, 0xc4, 0xb5, + 0xe2, 0xfc, 0xb4, 0x26, 0x2f, 0xcb, 0x42, 0x1a, + 0xb6, 0x62, 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, + 0x62, 0xfc, 0xb4, 0x21, 0xab, 0x66, 0x24, 0xc4, + 0xb5, 0xe2, 0xfc, 0xb4, 0x26, 0x2f, 0xcb, 0x42, + 0x1a, 0xb6, 0x62, 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, + 0x42, 0x62, 0xfc, 0xb4, 0x21, 0xab, 0x66, 0x24, + 0xc4, 0xb5, 0xe2, 0xfc, 0xb4, 0x26, 0x2f, 0xcb, + 0x42, 0x1a, 0xb6, 0x62, 0x4c, 0x4b, 0x5e, 0x2f, + 0xcb, 0x42, 0x62, 0xfc, 0xb4, 0x21, 0xab, 0x66, + 0x24, 0xc4, 0xb5, 0xe2, 0xfc, 0xb4, 0x26, 0x2f, + 0xcb, 0x42, 0x1a, 0xb6, 0x62, 0x4c, 0x4b, 0x5e, + 0x2f, 0xcb, 0x42, 0x62, 0xfc, 0xb4, 0x21, 0xab, + 0x66, 0x24, 0xc4, 0xb5, 0xe2, 0xfc, 0xb4, 0x26, + 0x2f, 0xcb, 0x42, 0x1a, 0xb6, 0x62, 0x4c, 0x4b, + 0x5e, 0x2f, 0xcb, 0x42, 0x62, 0xfc, 0xb4, 0x21, + 0xab, 0x66, 0x24, 0xc4, 0xb5, 0xe2, 0xfc, 0xb4, + 0x26, 0x2f, 0xcb, 0x42, 0x1a, 0xb6, 0x62, 0x4c, + 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, 0xfc, 0xb4, + 0x21, 0xab, 0x66, 0x24, 0xc4, 0xb5, 0xe2, 0xfc, + 0xb4, 0x26, 0x2f, 0xcb, 0x42, 0x1a, 0xb6, 0x62, + 0x4c, 0x4b, 0x5e, 0x2f, 0xcb, 0x42, 0x62, 0xfc, + 0xb4, 0x20, 0xd8, 0x1e, 0x41, 0xa8, 0x34, 0x53, + 0x36, 0xfb, 0x5d, 0x9a, 0xc3, 0x18, 0x63, 0xb0, + 0x4b, 0x41, 0x40, 0xe7, 0x0d, 0x34, 0xec, 0xd0, + 0xe9, 0x50, 0x38, 0xbf, 0x2d, 0x0b, 0x38, 0xbf, + 0x2d, 0x0a, 0xb3, 0x58, 0x9f, 0x1e, 0x2b, 0x52, + 0xf6, 0xa7, 0xdb, 0x64, 0x96, 0x61, 0x9e, 0xe6, + 0x19, 0x88, 0x0d, 0xb8, 0x78, 0xe6, 0x86, 0x9e, + 0x69, 0xa3, 0x08, 0x27, 0xb2, 0xb8, 0x71, 0x2d, + 0x78, 0xbf, 0x2d, 0x09, 0x8b, 0xf2, 0xd0, 0xa6, + 0x22, 0x23, 0xc2, 0x34, 0x45, 0xad, 0x36, 0x9d, + 0xd3, 0x3a, 0xcb, 0x66, 0x24, 0xc4, 0xb5, 0xe2, + 0xfc, 0xb4, 0x26, 0x25, 0x28, 0xd5, 0xb3, 0x12, + 0x62, 0x5a, 0xf1, 0x2f, 0x76, 0xf0, 0x4f, 0x75, + 0x28, 0x86, 0xde, 0x33, 0x2c, 0xa4, 0xe8, 0x0d, + 0xf9, 0x6b, 0x4a, 0x28, 0x9e, 0x69, 0x88, 0xd6, + 0x74, 0x84, 0x9e, 0xce, 0xdb, 0x3a, 0xeb, 0x37, + 0x85, 0xa0, 0x55, 0xb1, 0x1e, 0x75, 0xfd, 0x80, + 0xdd, 0x5d, 0xf5, 0x63, 0xcc, 0xe4, 0xe7, 0x2f, + 0x1f, 0x4f, 0xcd, 0xa3, 0x78, 0x13, 0x2d, 0xb1, + 0x66, 0x45, 0x60, 0xe2, 0xe2, 0x1f, 0x79, 0x37, + 0x94, 0x75, 0xd0, 0xef, 0x0e, 0xc0, 0x5c, 0xa4, + 0x92, 0x49, 0x3a, 0x49, 0x3a, 0x56, 0x6c, 0xb6, + 0xdd, 0x3f, 0x0f, 0x07, 0xa3, 0xe5, 0xb1, 0x6c, + 0xc7, 0xc7, 0x85, 0xad, 0x3a, 0xb6, 0x5b, 0xfe, + 0xde, 0x3f, 0x3d, 0xbe, 0x15, 0x3c, 0xa0, 0x6d, + 0xff, 0x00, 0x6f, 0x1f, 0x9e, 0xdf, 0x0a, 0x9e, + 0x5c, 0xdd, 0xc5, 0x15, 0x9c, 0x7b, 0xd5, 0x97, + 0x9f, 0xf2, 0x85, 0x2a, 0xa2, 0xb3, 0x8f, 0x7a, + 0xb2, 0xf3, 0xfe, 0x50, 0x81, 0x93, 0x7b, 0xcd, + 0xef, 0xda, 0x1f, 0xac, 0x54, 0xad, 0x54, 0x56, + 0x51, 0xef, 0x37, 0xbf, 0x68, 0x7e, 0xb1, 0x52, + 0x94, 0x41, 0x9a, 0xa5, 0x56, 0x28, 0x94, 0x41, + 0xe8, 0x6a, 0x2b, 0xe1, 0xd7, 0xbe, 0xf9, 0x71, + 0xf6, 0xaf, 0xfa, 0xc5, 0x7d, 0xc5, 0xbe, 0x49, + 0x5f, 0x0e, 0xbd, 0xf7, 0xcb, 0x8f, 0xb5, 0x7f, + 0xd6, 0x2b, 0x27, 0x9b, 0xf0, 0xa3, 0xe8, 0x3f, + 0xb6, 0xfe, 0xff, 0x00, 0x31, 0xf0, 0xc7, 0xfe, + 0x6d, 0x28, 0x88, 0xb2, 0x3e, 0x90, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x45, 0x9d, 0x47, 0x4a, 0x68, 0xde, 0x43, 0x58, + 0x8f, 0x19, 0xd1, 0x84, 0x4a, 0x8d, 0xe4, 0x43, + 0x58, 0xf6, 0x71, 0x16, 0x69, 0xa2, 0xab, 0x08, + 0xa0, 0xfc, 0x35, 0x77, 0xda, 0x67, 0x99, 0xcd, + 0x9c, 0x02, 0xda, 0xd6, 0xf2, 0x48, 0x2d, 0xc5, + 0x69, 0x1b, 0x48, 0x03, 0xc6, 0xd7, 0xb8, 0xb8, + 0x49, 0xa9, 0x25, 0x62, 0xa9, 0x55, 0x33, 0x33, + 0x3e, 0xd5, 0x2b, 0x87, 0x1d, 0x26, 0x76, 0xd2, + 0x2b, 0xbf, 0x8d, 0xad, 0x1e, 0x33, 0x2d, 0xd6, + 0xd7, 0x57, 0x16, 0xb3, 0xb2, 0xe2, 0xda, 0x43, + 0x0c, 0xd1, 0x9a, 0xb1, 0xed, 0xd6, 0x2a, 0x29, + 0xa1, 0x74, 0xdc, 0xe7, 0x99, 0xad, 0xdc, 0xb1, + 0x4d, 0x73, 0x75, 0x24, 0xd2, 0xdb, 0xb8, 0xbe, + 0x07, 0xba, 0x84, 0xb1, 0xc6, 0x86, 0xad, 0xd1, + 0xd8, 0x0b, 0x81, 0x67, 0x4a, 0x6e, 0xb6, 0x9a, + 0x6b, 0xc0, 0x9c, 0x54, 0xb5, 0xa2, 0xf6, 0xa5, + 0x66, 0xd1, 0xc3, 0x74, 0xc6, 0xb3, 0xa4, 0xba, + 0xef, 0xb3, 0x7c, 0xcf, 0x31, 0x6b, 0x05, 0xfd, + 0xcb, 0xee, 0x79, 0xb2, 0x4b, 0x39, 0xca, 0x1c, + 0x35, 0xd7, 0x4a, 0x0e, 0xc2, 0xe5, 0x0e, 0xa1, + 0x04, 0x68, 0x20, 0xd4, 0x1d, 0xda, 0x8d, 0x2b, + 0x07, 0x4a, 0xc2, 0x4c, 0xcc, 0xf1, 0x99, 0x4d, + 0x31, 0xd6, 0x95, 0xd9, 0x5a, 0xd6, 0x29, 0xe1, + 0xb6, 0x23, 0x48, 0x48, 0xdc, 0x6d, 0x06, 0x75, + 0x75, 0x0b, 0xad, 0xee, 0xef, 0x65, 0x9e, 0x07, + 0xd3, 0x14, 0x6f, 0x20, 0xb7, 0x41, 0xa8, 0xdc, + 0x5e, 0x5f, 0x9d, 0xe6, 0x92, 0x59, 0xfb, 0x04, + 0x97, 0x52, 0x3a, 0xcc, 0x00, 0xd1, 0x01, 0xa6, + 0x10, 0x06, 0xa1, 0xa9, 0x70, 0x57, 0x71, 0x66, + 0xa6, 0x94, 0x53, 0xbe, 0xde, 0x3a, 0xce, 0xb3, + 0xc3, 0xf0, 0x73, 0xaf, 0x96, 0xc3, 0x5d, 0x22, + 0x31, 0xd3, 0x6d, 0x67, 0x7d, 0x7e, 0x9f, 0x0b, + 0x73, 0x76, 0xd9, 0x67, 0x59, 0xb6, 0x5f, 0x19, + 0x8a, 0xc2, 0xee, 0x4b, 0x66, 0x38, 0xe2, 0x73, + 0x59, 0x40, 0x0b, 0xb5, 0x57, 0x52, 0xd5, 0x6f, + 0x98, 0x5e, 0xda, 0x5c, 0x1b, 0xab, 0x59, 0xdd, + 0x0d, 0xc9, 0xc5, 0x8a, 0x56, 0xd2, 0xa7, 0x17, + 0x94, 0xb9, 0xc0, 0xd0, 0x49, 0xd5, 0xbf, 0xb8, + 0x9e, 0x2e, 0xba, 0x8e, 0x14, 0xdd, 0x6d, 0x3c, + 0x67, 0x4a, 0x78, 0x27, 0xb5, 0x8b, 0xeb, 0xfa, + 0x2b, 0xae, 0x5a, 0xe9, 0x7e, 0x1a, 0x6b, 0x10, + 0xdf, 0x75, 0x7b, 0x79, 0x7f, 0x39, 0xb8, 0xbb, + 0x99, 0xd3, 0xcc, 0x40, 0x05, 0xef, 0xd7, 0x41, + 0xab, 0x52, 0xf7, 0x61, 0x99, 0xdf, 0x65, 0xb2, + 0x99, 0x6c, 0xa7, 0x7c, 0x12, 0x1d, 0x04, 0xb4, + 0xe8, 0x23, 0xfa, 0xc3, 0x75, 0x73, 0x55, 0xa6, + 0x9a, 0x40, 0x25, 0x60, 0x16, 0xe9, 0xae, 0xb0, + 0x91, 0x36, 0x89, 0xdd, 0xac, 0xea, 0x4e, 0x3c, + 0x53, 0x58, 0xa6, 0xda, 0xcd, 0x74, 0xd2, 0x22, + 0x78, 0xd7, 0x4d, 0x3a, 0x7d, 0x89, 0xdb, 0x8d, + 0xb4, 0xda, 0x5b, 0x88, 0x8c, 0x46, 0xf3, 0x08, + 0x3a, 0xcc, 0x6c, 0x6b, 0x1d, 0xca, 0x02, 0xaa, + 0x09, 0xce, 0x2e, 0x24, 0xb8, 0x92, 0xe2, 0x6a, + 0xe2, 0x74, 0xd4, 0xa1, 0x26, 0xa9, 0xe0, 0x09, + 0x37, 0xb5, 0xbe, 0xe9, 0x9b, 0x23, 0x0f, 0x97, + 0xc3, 0x8b, 0xf8, 0x58, 0xeb, 0x8f, 0x5f, 0x1d, + 0xb1, 0xe2, 0xc2, 0x2c, 0xd4, 0x6f, 0x27, 0x6d, + 0x47, 0x1e, 0x4e, 0xd1, 0x31, 0x3e, 0x13, 0x12, + 0xc2, 0x2c, 0xd4, 0x6f, 0x2c, 0x1a, 0x6e, 0x21, + 0xac, 0x7b, 0x27, 0xc0, 0x44, 0x0b, 0x3a, 0x37, + 0x42, 0x1a, 0xc7, 0x3d, 0x18, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x59, + 0x1a, 0xd6, 0x16, 0x46, 0xb4, 0x19, 0x1a, 0xc2, + 0xfb, 0x6e, 0x5c, 0x29, 0x94, 0x5a, 0x7d, 0x8c, + 0x7f, 0x54, 0x2f, 0x89, 0x0d, 0x61, 0x7d, 0xb7, + 0x2f, 0xd1, 0x94, 0xda, 0x7d, 0x8c, 0x7f, 0x54, + 0x2d, 0x3e, 0x4f, 0xee, 0xb3, 0xe7, 0xff, 0x00, + 0xb8, 0xfe, 0xcc, 0x1f, 0xb5, 0x7f, 0xd1, 0x56, + 0xf0, 0x74, 0xaa, 0xf3, 0xbc, 0xa3, 0xdb, 0x2a, + 0xc1, 0x4d, 0x2a, 0xbe, 0xef, 0x28, 0xf6, 0xca, + 0xda, 0xf9, 0xb6, 0x17, 0xa8, 0x49, 0x13, 0xc6, + 0x6b, 0xa9, 0xcd, 0xec, 0x6e, 0xaf, 0x2b, 0xd4, + 0x5f, 0xb5, 0x67, 0x9c, 0xdf, 0x08, 0x43, 0xde, + 0xec, 0xce, 0x73, 0x6b, 0x3b, 0x6b, 0x96, 0xd9, + 0x5f, 0x5b, 0xf3, 0xf0, 0x48, 0xcc, 0x44, 0x80, + 0x1d, 0x4a, 0x92, 0x34, 0xb4, 0xf6, 0x94, 0x51, + 0xb1, 0xd8, 0xab, 0x8f, 0x19, 0xb2, 0x98, 0x2b, + 0xf9, 0x81, 0xce, 0x6d, 0x3f, 0xb2, 0x42, 0xf3, + 0xb6, 0x3f, 0xcc, 0xe2, 0xfb, 0x21, 0xf5, 0x9c, + 0xa0, 0x54, 0xee, 0x95, 0x6d, 0x4a, 0xdb, 0xc6, + 0xb1, 0x2b, 0x07, 0x54, 0x6c, 0x87, 0x4c, 0x77, + 0x2c, 0xfa, 0x29, 0xd5, 0x1b, 0x21, 0xd2, 0xdd, + 0xcb, 0xfd, 0x15, 0x5f, 0x45, 0x3b, 0xed, 0xcd, + 0x5e, 0xc6, 0x3e, 0x88, 0x58, 0x3a, 0xa3, 0x64, + 0x3a, 0x5b, 0xb9, 0x7f, 0xa2, 0x9d, 0x51, 0xb2, + 0x1d, 0x2d, 0xdc, 0xbf, 0xd1, 0x55, 0xf4, 0x4d, + 0xf6, 0xe6, 0x76, 0x71, 0xf4, 0x42, 0xc1, 0xd5, + 0x1b, 0x21, 0xd2, 0xdd, 0xcb, 0xfd, 0x14, 0xea, + 0x8d, 0x90, 0xe9, 0x6e, 0xe5, 0xfe, 0x8a, 0xaf, + 0xa2, 0x6f, 0xb7, 0x33, 0xb3, 0x8f, 0xa2, 0x16, + 0x0e, 0xa8, 0xd9, 0x0e, 0x96, 0xee, 0x5f, 0xe8, + 0xa7, 0x54, 0x6c, 0x87, 0x4b, 0x77, 0x2f, 0xf4, + 0x55, 0x7d, 0x37, 0xf7, 0xd3, 0x7d, 0xb9, 0x9d, + 0x9c, 0x7d, 0x10, 0xb0, 0x75, 0x46, 0xc8, 0x74, + 0xb7, 0x72, 0xff, 0x00, 0x45, 0x3a, 0xa3, 0x64, + 0x3a, 0x5b, 0xb9, 0x7f, 0xa2, 0xa0, 0x9d, 0x0c, + 0xcd, 0x8d, 0xb2, 0xb9, 0x8e, 0x11, 0x38, 0xd1, + 0xaf, 0x20, 0xd0, 0xf7, 0x56, 0x21, 0x86, 0x79, + 0x8e, 0x18, 0x98, 0xe9, 0x1d, 0x4a, 0x90, 0xd1, + 0x5d, 0x1a, 0xea, 0x9b, 0xed, 0xcc, 0xec, 0xe3, + 0xe8, 0x84, 0xf7, 0x54, 0x6c, 0x87, 0x4b, 0x77, + 0x2f, 0xf4, 0x53, 0xaa, 0x36, 0x43, 0xa5, 0xbb, + 0x97, 0xfa, 0x2a, 0xbf, 0xc3, 0xdd, 0x44, 0xdf, + 0x6e, 0x67, 0x67, 0x1f, 0x44, 0x2c, 0x1d, 0x51, + 0xb2, 0x1d, 0x2d, 0xdc, 0xbf, 0xd1, 0x4e, 0xa8, + 0xd9, 0x0e, 0x96, 0xee, 0x5f, 0xe8, 0xaa, 0xfa, + 0xcb, 0x5a, 0xe2, 0x09, 0xa1, 0x20, 0x6b, 0x23, + 0x50, 0xed, 0xa6, 0xfb, 0x73, 0x3b, 0x38, 0xfa, + 0x21, 0x3f, 0xd5, 0x1b, 0x21, 0xd2, 0xdd, 0xcb, + 0xfd, 0x14, 0xea, 0x8d, 0x90, 0xe9, 0x6e, 0xe5, + 0xfe, 0x8a, 0xaf, 0xfe, 0x5d, 0xa4, 0x4d, 0xf6, + 0xe6, 0x76, 0x71, 0xf4, 0x42, 0xc1, 0xd5, 0x1b, + 0x21, 0xd2, 0xdd, 0xcb, 0xfd, 0x14, 0xea, 0x8d, + 0x90, 0xe9, 0x6e, 0xe5, 0xfe, 0x8a, 0xaf, 0xa6, + 0xfe, 0x9d, 0x49, 0xbe, 0xdc, 0xce, 0xce, 0x3e, + 0x88, 0x58, 0x3a, 0xa3, 0x64, 0x3a, 0x5b, 0xb9, + 0x7f, 0xa2, 0x9d, 0x51, 0xb2, 0x1d, 0x2d, 0xdc, + 0xbf, 0xd1, 0x50, 0x0f, 0x64, 0x8c, 0x34, 0x70, + 0x2d, 0x34, 0xaf, 0x8c, 0x08, 0xd1, 0xbf, 0xa5, + 0x61, 0x37, 0xdb, 0x99, 0xd9, 0xc7, 0xd1, 0x0b, + 0x07, 0x54, 0x6c, 0x87, 0x4b, 0x77, 0x2f, 0xf4, + 0x53, 0xaa, 0x36, 0x43, 0xa5, 0xbb, 0x97, 0xfa, + 0x2a, 0x11, 0x96, 0xb7, 0x52, 0x47, 0xce, 0x47, + 0x13, 0xdd, 0x1e, 0xb2, 0xf0, 0x09, 0x1a, 0x3b, + 0x2b, 0x51, 0xd1, 0xbb, 0xd9, 0xec, 0xa6, 0xfb, + 0x73, 0x3b, 0x38, 0xfa, 0x21, 0x60, 0xea, 0x8d, + 0x90, 0xe9, 0x6e, 0xe5, 0xfe, 0x8a, 0x75, 0x46, + 0xc8, 0x74, 0xb7, 0x72, 0xff, 0x00, 0x45, 0x42, + 0x3a, 0xd2, 0xe9, 0xb1, 0x73, 0xa6, 0x27, 0x88, + 0xe8, 0x1c, 0x5e, 0x5a, 0x69, 0x43, 0xab, 0x4a, + 0xcb, 0x2c, 0xaf, 0x24, 0x60, 0x7c, 0x70, 0xc8, + 0xf6, 0x3b, 0x4b, 0x5c, 0xd6, 0x92, 0x0e, 0xe2, + 0x6f, 0xb7, 0x33, 0xb3, 0x8f, 0xa2, 0x13, 0x5d, + 0x51, 0xb2, 0x1d, 0x2d, 0xdc, 0xbf, 0xd1, 0x4e, + 0xa8, 0xd9, 0x0e, 0x96, 0xee, 0x5f, 0xe8, 0xa8, + 0x39, 0x6d, 0xee, 0x21, 0xfd, 0xb4, 0x6e, 0x8e, + 0xba, 0xb1, 0x82, 0xd1, 0xc2, 0xb5, 0xa6, 0xfb, + 0x73, 0x3b, 0x38, 0xfa, 0x21, 0x60, 0xea, 0x8d, + 0x90, 0xe9, 0x6e, 0xe5, 0xfe, 0x8a, 0x75, 0x46, + 0xc8, 0x74, 0xb7, 0x72, 0xff, 0x00, 0x45, 0x41, + 0xc5, 0x6b, 0x75, 0x30, 0x2e, 0x8a, 0x27, 0xc8, + 0xd0, 0x68, 0x4b, 0x5a, 0x4e, 0x9e, 0xe2, 0xf6, + 0x72, 0xfb, 0xf0, 0x2a, 0x6d, 0xe5, 0x00, 0x6b, + 0x25, 0xa5, 0x37, 0xdb, 0x99, 0xd9, 0xc7, 0xd1, + 0x09, 0x9e, 0xa8, 0xd9, 0x0e, 0x96, 0xee, 0x5f, + 0xe8, 0xa7, 0x54, 0x6c, 0x87, 0x4b, 0x77, 0x2f, + 0xf4, 0x54, 0x11, 0x86, 0x66, 0xc4, 0xd9, 0x5c, + 0xc7, 0x08, 0xdf, 0xa1, 0xaf, 0x23, 0x41, 0x3b, + 0xab, 0xc2, 0x6f, 0xb7, 0x33, 0xb3, 0x8f, 0xa2, + 0x16, 0x0e, 0xa8, 0xd9, 0x0e, 0x96, 0xee, 0x5f, + 0xe8, 0xa7, 0x54, 0x6c, 0x87, 0x4b, 0x77, 0x2f, + 0xf4, 0x55, 0x7d, 0x13, 0x7d, 0xb9, 0x9d, 0x9c, + 0x7d, 0x10, 0xb0, 0x75, 0x46, 0xc8, 0x74, 0xb7, + 0x72, 0xff, 0x00, 0x45, 0x3a, 0xa3, 0x64, 0x3a, + 0x5b, 0xb9, 0x7f, 0xa2, 0xa0, 0xa2, 0x86, 0x69, + 0x89, 0x6c, 0x4c, 0x74, 0x84, 0x0a, 0x90, 0xd1, + 0x5a, 0x0e, 0xcf, 0x0a, 0xf0, 0x9b, 0xed, 0xcc, + 0xec, 0xe3, 0xe8, 0x85, 0x83, 0xaa, 0x36, 0x43, + 0xa5, 0xbb, 0x97, 0xfa, 0x29, 0xd5, 0x1b, 0x21, + 0xd2, 0xdd, 0xcb, 0xfd, 0x15, 0x5f, 0x44, 0xdf, + 0x6e, 0x67, 0x67, 0x1f, 0x44, 0x2c, 0x1d, 0x51, + 0xb2, 0x1d, 0x2d, 0xdc, 0xbf, 0xd1, 0x4e, 0xa8, + 0xd9, 0x0e, 0x96, 0xee, 0x5f, 0xe8, 0xaa, 0xfa, + 0x26, 0xfb, 0x73, 0x3b, 0x38, 0xfa, 0x21, 0x60, + 0xea, 0x8d, 0x90, 0xe9, 0x6e, 0xe5, 0xfe, 0x8a, + 0x75, 0x46, 0xc8, 0x74, 0xb7, 0x72, 0xff, 0x00, + 0x45, 0x57, 0xd1, 0x37, 0xdb, 0x99, 0xd9, 0xc7, + 0xd1, 0x0b, 0x07, 0x54, 0x6c, 0x87, 0x4b, 0x77, + 0x2f, 0xf4, 0x53, 0xaa, 0x36, 0x43, 0xa5, 0xbb, + 0x97, 0xfa, 0x2a, 0xbe, 0x89, 0xbe, 0xdc, 0xce, + 0xce, 0x3e, 0x88, 0x58, 0x46, 0x5d, 0xb1, 0xb1, + 0xf8, 0xcf, 0xb8, 0x74, 0x83, 0x7b, 0x1b, 0x8f, + 0xd5, 0x0b, 0xbb, 0x2b, 0xce, 0x32, 0xb1, 0x7b, + 0x16, 0x5f, 0x96, 0x5b, 0x73, 0x71, 0xc8, 0x4e, + 0x27, 0xd0, 0x37, 0x53, 0x49, 0xae, 0xf9, 0x55, + 0x05, 0x29, 0xb3, 0x5f, 0xce, 0xed, 0xbf, 0xb5, + 0xf5, 0x0a, 0x89, 0x99, 0x9f, 0x6c, 0xa6, 0xb8, + 0xeb, 0x5f, 0xb6, 0xb1, 0x09, 0xbc, 0xc6, 0xa6, + 0xf6, 0x5a, 0x9a, 0xd0, 0xd0, 0x76, 0xa8, 0x34, + 0x2e, 0x75, 0xd1, 0x98, 0x7b, 0xec, 0xbe, 0x77, + 0xc8, 0x17, 0x3a, 0x85, 0xc5, 0x96, 0x12, 0x1e, + 0x08, 0x34, 0x20, 0x82, 0x38, 0x56, 0x11, 0xbe, + 0x50, 0xfc, 0xb7, 0x50, 0x48, 0x67, 0x59, 0xb5, + 0xad, 0x9c, 0xb1, 0xdb, 0x5e, 0x41, 0xcf, 0xc1, + 0x3b, 0x31, 0x3b, 0x51, 0xa5, 0x0d, 0x35, 0x15, + 0x10, 0x6c, 0xf6, 0x2e, 0xe4, 0x97, 0x36, 0x57, + 0x40, 0x75, 0x96, 0xe2, 0x73, 0x69, 0xd8, 0xd3, + 0x50, 0xbd, 0x6d, 0x9f, 0xbc, 0x5b, 0x7d, 0x91, + 0xf0, 0xaa, 0xea, 0x98, 0x99, 0x8f, 0x6a, 0xb6, + 0xa5, 0x6d, 0xe3, 0x10, 0xb0, 0x75, 0x46, 0xc8, + 0x74, 0xb7, 0x72, 0xff, 0x00, 0x45, 0x3a, 0xa3, + 0x64, 0x3a, 0x5b, 0xb9, 0x7f, 0xa2, 0xab, 0xe8, + 0xa7, 0x7d, 0xb9, 0xab, 0xd9, 0xc7, 0xd1, 0x0b, + 0x07, 0x54, 0x6c, 0x87, 0x4b, 0x77, 0x2f, 0xf4, + 0x53, 0xaa, 0x36, 0x43, 0xa5, 0xbb, 0x97, 0xfa, + 0x2a, 0xbe, 0x89, 0xbe, 0xdc, 0xce, 0xce, 0x3e, + 0x88, 0x58, 0x3a, 0xa3, 0x64, 0x3a, 0x5b, 0xb9, + 0x7f, 0xa2, 0x9d, 0x51, 0xb2, 0x1d, 0x2d, 0xdc, + 0xbf, 0xd1, 0x55, 0xf4, 0x4d, 0xf6, 0xe6, 0x76, + 0x71, 0xf4, 0x42, 0xc1, 0xd5, 0x1b, 0x21, 0xd2, + 0xdd, 0xcb, 0xfd, 0x14, 0xea, 0x8d, 0x90, 0xe9, + 0x6e, 0xe5, 0xfe, 0x8a, 0xaf, 0xa2, 0x6f, 0xb7, + 0x33, 0xb3, 0x8f, 0xa2, 0x16, 0x0e, 0xa8, 0xd9, + 0x0e, 0x96, 0xee, 0x5f, 0xe8, 0xa7, 0x54, 0x6c, + 0x87, 0x4b, 0x77, 0x2f, 0xf4, 0x55, 0x7d, 0x13, + 0x7d, 0xb9, 0x9d, 0x9c, 0x7d, 0x10, 0xb0, 0x75, + 0x46, 0xc8, 0x74, 0xb7, 0x72, 0xff, 0x00, 0x45, + 0x3a, 0xa3, 0x64, 0x3a, 0x5b, 0xb9, 0x7f, 0xa2, + 0xab, 0xe8, 0x9b, 0xed, 0xcc, 0xec, 0xe3, 0xe8, + 0x85, 0x83, 0xaa, 0x36, 0x43, 0xa5, 0xbb, 0x97, + 0xfa, 0x29, 0xd5, 0x1b, 0x21, 0xd2, 0xdd, 0xcb, + 0xfd, 0x15, 0x5f, 0x44, 0xdf, 0x6e, 0x67, 0x67, + 0x1f, 0x44, 0x2c, 0x1d, 0x51, 0xb2, 0x1d, 0x2d, + 0xdc, 0xbf, 0xd1, 0x4e, 0xa8, 0xd9, 0x0e, 0x96, + 0xee, 0x5f, 0xe8, 0xaa, 0xfa, 0x26, 0xfb, 0x73, + 0x3b, 0x38, 0xfa, 0x21, 0x60, 0xea, 0x8d, 0x90, + 0xe9, 0x6e, 0xe5, 0xfe, 0x8a, 0x75, 0x46, 0xc8, + 0x74, 0xb7, 0x72, 0xff, 0x00, 0x45, 0x57, 0xd1, + 0x37, 0xdb, 0x99, 0xd9, 0xc7, 0xd1, 0x0b, 0x07, + 0x54, 0x6c, 0x87, 0x4b, 0x77, 0x2f, 0xf4, 0x53, + 0xaa, 0x36, 0x43, 0xa5, 0xbb, 0x97, 0xfa, 0x2a, + 0xbe, 0x89, 0xbe, 0xdc, 0xce, 0xce, 0x3e, 0x88, + 0x58, 0x3a, 0xa3, 0x64, 0x3a, 0x5b, 0xb9, 0x7f, + 0xa2, 0x9d, 0x51, 0xb2, 0x1d, 0x2d, 0xdc, 0xbf, + 0xd1, 0x55, 0xf4, 0x4d, 0xf6, 0xe6, 0x76, 0x71, + 0xf4, 0x42, 0xc1, 0xd5, 0x1b, 0x21, 0xd2, 0xdd, + 0xcb, 0xfd, 0x14, 0xea, 0x8d, 0x90, 0xe9, 0x6e, + 0xe5, 0xfe, 0x8a, 0xaf, 0xa2, 0x6f, 0xb7, 0x33, + 0xb3, 0x8f, 0xa2, 0x16, 0x0e, 0xa8, 0xd9, 0x0e, + 0x96, 0xee, 0x5f, 0xe8, 0xa7, 0x54, 0x6c, 0x87, + 0x4b, 0x77, 0x2f, 0xf4, 0x55, 0x7d, 0x13, 0x7d, + 0xb9, 0x9d, 0x9c, 0x7d, 0x10, 0xb0, 0x75, 0x46, + 0xc8, 0x74, 0xb7, 0x72, 0xff, 0x00, 0x45, 0x3a, + 0xa3, 0x64, 0x3a, 0x5b, 0xb9, 0x7f, 0xa2, 0xab, + 0xe8, 0x9b, 0xed, 0xcc, 0xec, 0xe3, 0xe8, 0x85, + 0x83, 0xaa, 0x36, 0x43, 0xa5, 0xbb, 0x97, 0xfa, + 0x29, 0xd5, 0x1b, 0x21, 0xd2, 0xdd, 0xcb, 0xfd, + 0x15, 0x5f, 0x44, 0xdf, 0x6e, 0x67, 0x67, 0x1f, + 0x44, 0x2c, 0x1d, 0x51, 0xb2, 0x1d, 0x2d, 0xdc, + 0xbf, 0xd1, 0x4e, 0xa8, 0xd9, 0x0e, 0x96, 0xee, + 0x5f, 0xe8, 0xaa, 0xfa, 0x26, 0xfb, 0x73, 0x3b, + 0x38, 0xfa, 0x21, 0x60, 0xea, 0x8d, 0x90, 0xe9, + 0x6e, 0xe5, 0xfe, 0x8a, 0x75, 0x46, 0xc8, 0x74, + 0xb7, 0x72, 0xff, 0x00, 0x45, 0x57, 0xd1, 0x37, + 0xdb, 0x99, 0xd9, 0xc7, 0xd1, 0x0b, 0x07, 0x54, + 0x6c, 0x87, 0x4b, 0x77, 0x2f, 0xf4, 0x53, 0xaa, + 0x36, 0x43, 0xa5, 0xbb, 0x97, 0xfa, 0x2a, 0xbe, + 0x89, 0xbe, 0xdc, 0xce, 0xce, 0x3e, 0x88, 0x58, + 0x3a, 0xa3, 0x64, 0x3a, 0x5b, 0xb9, 0x7f, 0xa2, + 0x9d, 0x51, 0xb2, 0x1d, 0x2d, 0xdc, 0xbf, 0xd1, + 0x55, 0xf4, 0x4d, 0xf6, 0xe6, 0x76, 0x71, 0xf4, + 0x42, 0xc1, 0xd5, 0x1b, 0x21, 0xd2, 0xdd, 0xcb, + 0xfd, 0x14, 0xea, 0x8d, 0x90, 0xe9, 0x6e, 0xe5, + 0xfe, 0x8a, 0xaf, 0xa2, 0x6f, 0xb7, 0x33, 0xb3, + 0x8f, 0xa2, 0x16, 0x0e, 0xa8, 0xd9, 0x0e, 0x96, + 0xee, 0x5f, 0xe8, 0xa1, 0xca, 0x36, 0x42, 0x9e, + 0xf6, 0xee, 0x5f, 0xe8, 0xaa, 0xfa, 0x26, 0xfb, + 0x73, 0x3b, 0x38, 0xfa, 0x21, 0x60, 0x19, 0x66, + 0xc6, 0xc7, 0xe3, 0x3a, 0xe5, 0xcf, 0x03, 0x58, + 0xc6, 0xe3, 0x5e, 0x48, 0x5d, 0x99, 0x7e, 0x71, + 0x93, 0xc5, 0x75, 0x0d, 0x8e, 0x57, 0x6d, 0x85, + 0xb2, 0xbb, 0x0b, 0xa5, 0x20, 0x34, 0x53, 0xeb, + 0x15, 0x53, 0x5d, 0xd9, 0x19, 0x3d, 0x71, 0x69, + 0xa7, 0xfe, 0x27, 0xc8, 0x54, 0x4d, 0xa6, 0x7c, + 0x65, 0x35, 0xc7, 0x4a, 0xcf, 0x0a, 0xc4, 0x2c, + 0x99, 0xa5, 0x4d, 0xeb, 0xeb, 0xb8, 0x00, 0x1d, + 0xa5, 0xc8, 0xba, 0xb3, 0x3f, 0x7d, 0x93, 0xb9, + 0xe0, 0x5c, 0xaa, 0x17, 0x6c, 0xb7, 0xfd, 0xbc, + 0x7e, 0x7b, 0x7c, 0x2a, 0x7a, 0xaa, 0x02, 0xdc, + 0xff, 0x00, 0xdc, 0x47, 0xe7, 0x37, 0xc2, 0xa7, + 0xa8, 0x83, 0x35, 0x51, 0x59, 0xc7, 0xbd, 0x59, + 0x79, 0xff, 0x00, 0x28, 0x52, 0x94, 0x51, 0x79, + 0xbf, 0xbc, 0xd9, 0x79, 0xff, 0x00, 0x28, 0x40, + 0xca, 0x3d, 0xe6, 0xf7, 0xed, 0x0f, 0xd6, 0x2a, + 0x51, 0x45, 0xe5, 0x1e, 0xf3, 0x7b, 0xf6, 0x87, + 0xeb, 0x15, 0x28, 0x80, 0x88, 0x88, 0x3d, 0x37, + 0xc9, 0x2b, 0xe1, 0xd7, 0xbe, 0xf9, 0x71, 0xf6, + 0xaf, 0xfa, 0xc5, 0x7d, 0xc5, 0xbe, 0x49, 0x5f, + 0x0e, 0xbd, 0xf7, 0xcb, 0x8f, 0xb5, 0x7f, 0xd6, + 0x2b, 0x27, 0x9b, 0xf0, 0xa3, 0xe8, 0x3f, 0xb6, + 0xfe, 0xff, 0x00, 0x31, 0xf0, 0xc7, 0xfe, 0x6d, + 0x28, 0x88, 0xb2, 0x3e, 0x90, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0x91, + 0x52, 0xa5, 0x72, 0xad, 0x9a, 0xce, 0x73, 0x58, + 0xf9, 0xdb, 0x4b, 0x73, 0xcc, 0x9d, 0x53, 0x3f, + 0xc5, 0x61, 0xed, 0x13, 0xad, 0x63, 0x66, 0xf2, + 0xbe, 0xb6, 0xce, 0x21, 0xb3, 0x70, 0xfd, 0x55, + 0x71, 0xcd, 0xf6, 0x6d, 0xd7, 0xca, 0x3a, 0x15, + 0xeb, 0x6a, 0x36, 0xa1, 0xbb, 0x3a, 0x21, 0xb1, + 0xb0, 0x89, 0x8f, 0xb8, 0x2d, 0xa8, 0x63, 0xbc, + 0x88, 0xd9, 0xa8, 0x54, 0x05, 0xdb, 0x16, 0x2a, + 0xcd, 0x66, 0xf9, 0x27, 0x4a, 0xc3, 0xcc, 0xf3, + 0xde, 0x7f, 0x35, 0x33, 0x63, 0xf2, 0xfe, 0x56, + 0x91, 0x93, 0x3d, 0xe2, 0x6d, 0x69, 0x9f, 0xd5, + 0x88, 0x52, 0xf3, 0x2d, 0x8f, 0xcf, 0xf2, 0xe8, + 0x5d, 0x71, 0x35, 0xb0, 0x92, 0x16, 0x0a, 0xb9, + 0xf1, 0x1c, 0x74, 0x1d, 0x91, 0xad, 0x42, 0x9d, + 0x41, 0x7d, 0x2f, 0x65, 0xb6, 0xd1, 0xd9, 0xbd, + 0xc3, 0xac, 0xf3, 0x06, 0x32, 0x39, 0xc3, 0x4b, + 0xe3, 0x7b, 0x74, 0x31, 0xc0, 0x79, 0x40, 0xe2, + 0x3a, 0xd5, 0x37, 0x6b, 0x6d, 0x2c, 0xad, 0x73, + 0xc9, 0xdb, 0x62, 0xf6, 0x3a, 0x09, 0x4f, 0x38, + 0x04, 0x64, 0x10, 0xd7, 0x3b, 0xcb, 0x6e, 0x8e, + 0xca, 0x64, 0xc7, 0x8f, 0x64, 0x5e, 0x93, 0xf4, + 0xfb, 0xd1, 0xe4, 0xbc, 0xef, 0x99, 0xb7, 0x98, + 0xbf, 0x96, 0xf3, 0x74, 0x8a, 0xe4, 0xad, 0x77, + 0x44, 0xd7, 0xed, 0x94, 0x2a, 0x2e, 0xdb, 0x0c, + 0xa7, 0x33, 0xcc, 0x4b, 0x85, 0x8d, 0xb4, 0x97, + 0x18, 0x7c, 0xa7, 0x35, 0xbe, 0x28, 0xfe, 0xd1, + 0xd0, 0xbd, 0x5f, 0xe4, 0x99, 0xa6, 0x5a, 0xd0, + 0x6f, 0x6d, 0x9f, 0x0b, 0x4e, 0x80, 0xf2, 0x01, + 0x6f, 0x29, 0xab, 0x94, 0x52, 0xd3, 0x1a, 0xe9, + 0x3a, 0x37, 0xfa, 0x8c, 0x3d, 0xce, 0xd7, 0x72, + 0xbd, 0xce, 0x9d, 0xdc, 0x75, 0xe4, 0xe0, 0x45, + 0xbe, 0xda, 0xd6, 0xe6, 0xea, 0x61, 0x05, 0xb4, + 0x4e, 0x9a, 0x53, 0x52, 0xd8, 0xd8, 0x0b, 0x9d, + 0xa3, 0x59, 0xd0, 0xba, 0xe0, 0xd9, 0xfc, 0xe2, + 0xe2, 0xe1, 0xf6, 0xf1, 0x59, 0xca, 0x67, 0x88, + 0x03, 0x23, 0x1c, 0x30, 0x96, 0x82, 0x2a, 0xda, + 0xe2, 0xd5, 0x54, 0x8a, 0x5a, 0x7c, 0x22, 0x67, + 0x54, 0xdf, 0x3e, 0x3a, 0x6b, 0xba, 0xf5, 0xac, + 0xd6, 0x35, 0x98, 0xb5, 0xb4, 0x98, 0x8e, 0x68, + 0xe0, 0x09, 0x20, 0x01, 0x52, 0x75, 0x01, 0xa4, + 0xaf, 0x72, 0x47, 0x24, 0x52, 0x3a, 0x29, 0x1a, + 0x5a, 0xf6, 0x1a, 0x38, 0x1d, 0x60, 0x85, 0x78, + 0xd8, 0x0c, 0x86, 0x58, 0xaf, 0x2e, 0x2e, 0x33, + 0x0b, 0x27, 0x31, 0xd0, 0x86, 0x88, 0x1d, 0x33, + 0x08, 0xa3, 0xea, 0x71, 0x16, 0xe2, 0xdd, 0x0a, + 0xbf, 0xb5, 0xb9, 0x7d, 0xec, 0x19, 0xcd, 0xed, + 0xd4, 0xd0, 0x3e, 0x38, 0x25, 0x9d, 0xdc, 0xd4, + 0xae, 0x69, 0x0d, 0x77, 0x9a, 0x55, 0xe7, 0x14, + 0xc5, 0x37, 0x4e, 0xbf, 0x0d, 0x3c, 0x19, 0x71, + 0xff, 0x00, 0x31, 0xa5, 0xfc, 0xe5, 0xbc, 0xbd, + 0x26, 0xb3, 0xb2, 0xb1, 0x3b, 0xb7, 0x70, 0xb5, + 0xa7, 0xd9, 0x54, 0x1a, 0x2e, 0xeb, 0x0c, 0x9b, + 0x34, 0xcc, 0xc1, 0x75, 0x8d, 0xb3, 0xe6, 0x6b, + 0x74, 0x17, 0x80, 0x03, 0x6b, 0xdb, 0x3a, 0xd7, + 0x9b, 0xec, 0xaf, 0x31, 0xcb, 0xde, 0x23, 0xbe, + 0xb7, 0x7d, 0xb9, 0x76, 0x96, 0xe3, 0x6d, 0x1a, + 0x7b, 0x4e, 0xd4, 0xa9, 0xb6, 0xda, 0x6e, 0xd2, + 0x74, 0x6a, 0xef, 0xe2, 0x9c, 0x9d, 0xa8, 0xc9, + 0x59, 0xc9, 0xec, 0xae, 0xee, 0x2e, 0x34, 0x5d, + 0xb6, 0x99, 0x3e, 0x6b, 0x78, 0xce, 0x7a, 0xd2, + 0xd2, 0x5b, 0x88, 0xab, 0x4c, 0x71, 0xb7, 0x10, + 0xa8, 0xed, 0x6a, 0x5a, 0x05, 0xb4, 0xef, 0x9f, + 0xd9, 0xc4, 0x6e, 0xe7, 0xf1, 0x60, 0xe6, 0xa8, + 0x71, 0x62, 0xde, 0xc2, 0x34, 0xa4, 0xc6, 0x91, + 0x13, 0xc7, 0x8f, 0x87, 0x04, 0xd7, 0x2d, 0x26, + 0x6d, 0x58, 0xb5, 0x77, 0x53, 0xee, 0xae, 0xbc, + 0x63, 0xe3, 0xc9, 0xef, 0x2f, 0xbb, 0x75, 0x95, + 0xe4, 0x57, 0x42, 0x36, 0xca, 0x62, 0x76, 0x31, + 0x1c, 0x82, 0xac, 0x75, 0x37, 0x08, 0x0a, 0xef, + 0x3e, 0xd1, 0xbe, 0x2d, 0x99, 0xb6, 0xce, 0x4e, + 0x5f, 0x66, 0x67, 0x9e, 0xe1, 0xd0, 0xb9, 0x9c, + 0xdf, 0x8a, 0x00, 0xc7, 0xa4, 0x7e, 0x77, 0xe6, + 0xaa, 0x65, 0xde, 0x55, 0x99, 0x59, 0x47, 0x8e, + 0xee, 0xd6, 0x5b, 0x78, 0xcf, 0x8a, 0x1d, 0x23, + 0x4b, 0x41, 0x3f, 0xda, 0x53, 0x77, 0x9a, 0x36, + 0x02, 0xc0, 0xef, 0xde, 0x38, 0x53, 0xb9, 0x2a, + 0xeb, 0x8e, 0xd6, 0xa4, 0x5e, 0x3c, 0x38, 0x7b, + 0x5e, 0x6f, 0x9e, 0xc5, 0x83, 0x3d, 0xbc, 0xbd, + 0xe7, 0x4c, 0x91, 0x39, 0xa3, 0x14, 0xda, 0x27, + 0x58, 0xd9, 0x31, 0x69, 0x98, 0xe1, 0xef, 0x4d, + 0x64, 0x30, 0x5a, 0x66, 0x3b, 0x27, 0x3e, 0x38, + 0x62, 0x17, 0x17, 0x8f, 0xb9, 0x0c, 0x21, 0xa3, + 0x10, 0x7d, 0x1f, 0x20, 0xc2, 0x69, 0x5d, 0x01, + 0xab, 0xc6, 0x43, 0x67, 0x6b, 0x1e, 0xc7, 0x4a, + 0xe9, 0xa1, 0x61, 0xb9, 0xb9, 0x86, 0x7b, 0x86, + 0xb9, 0xcd, 0x05, 0xc1, 0xac, 0xa3, 0x45, 0x09, + 0xd3, 0xba, 0xb4, 0x64, 0x17, 0x62, 0xd7, 0x20, + 0xc9, 0xe7, 0x22, 0x83, 0xad, 0x1c, 0xc7, 0x9f, + 0xea, 0xc8, 0xd9, 0x5a, 0xef, 0x0a, 0x93, 0xbc, + 0x74, 0x71, 0x5e, 0x66, 0x56, 0x11, 0x0c, 0x30, + 0xda, 0x65, 0x8e, 0x6b, 0x19, 0xbc, 0x5e, 0xec, + 0x7f, 0x2a, 0xef, 0x58, 0xae, 0xda, 0xda, 0x7d, + 0x95, 0xdb, 0xa7, 0xbe, 0x5e, 0x5e, 0x59, 0xcb, + 0x5c, 0x99, 0x71, 0x57, 0x5d, 0x96, 0xcd, 0xde, + 0xf8, 0x76, 0xed, 0x14, 0xd3, 0xe1, 0xf5, 0x43, + 0xe6, 0x8d, 0x1e, 0x20, 0x2b, 0x64, 0x10, 0x4b, + 0x71, 0x2c, 0x70, 0xc2, 0xdc, 0x52, 0x4a, 0xe0, + 0xc6, 0xb7, 0x55, 0x49, 0x5a, 0xda, 0x7f, 0x56, + 0xd5, 0xdf, 0x91, 0xff, 0x00, 0x37, 0xb1, 0xfb, + 0x78, 0xfe, 0xb0, 0x58, 0xe2, 0x22, 0x6d, 0xa7, + 0x39, 0x7d, 0x35, 0xed, 0x35, 0xa4, 0xda, 0x3f, + 0x57, 0x1e, 0xef, 0xc6, 0x1d, 0xb3, 0x6c, 0x6e, + 0xd1, 0xc1, 0x13, 0xe6, 0x92, 0xcb, 0x0b, 0x23, + 0x05, 0xce, 0x77, 0x39, 0x19, 0xd0, 0x3b, 0x0d, + 0x79, 0x2a, 0x12, 0x84, 0xd2, 0x9a, 0x4b, 0xa9, + 0x41, 0xbf, 0x5d, 0x0b, 0xee, 0xb2, 0xf3, 0x6f, + 0x2e, 0xb7, 0x7f, 0xfc, 0x56, 0xba, 0xa3, 0xfa, + 0xbe, 0x49, 0xf0, 0xaf, 0x8f, 0x65, 0xd9, 0x6b, + 0x9f, 0xb4, 0x51, 0x65, 0xae, 0x1e, 0x4d, 0xc8, + 0x8c, 0x8f, 0xea, 0xb1, 0xff, 0x00, 0xd0, 0xbb, + 0x66, 0xc1, 0x15, 0xb4, 0x45, 0x75, 0xe3, 0xc1, + 0xe4, 0xff, 0x00, 0x2c, 0xfe, 0x6b, 0x97, 0xcc, + 0x53, 0x34, 0xe6, 0x8a, 0xd6, 0x71, 0xd7, 0x7c, + 0x6d, 0x8d, 0x23, 0x4e, 0x3f, 0xf8, 0x74, 0xb3, + 0x62, 0x36, 0x99, 0xcd, 0x0e, 0x6d, 0x95, 0x5a, + 0x45, 0x41, 0xe7, 0x23, 0x1e, 0x17, 0x85, 0x06, + 0xf6, 0x39, 0x8f, 0x73, 0x1c, 0x28, 0xe6, 0x92, + 0x08, 0xec, 0x85, 0xf7, 0x66, 0xc8, 0xc2, 0xf7, + 0x46, 0xd3, 0xa5, 0xa2, 0xae, 0x1d, 0xb5, 0xf0, + 0xeb, 0xa1, 0xff, 0x00, 0x75, 0x33, 0x7f, 0xc4, + 0x77, 0x84, 0xa6, 0x6c, 0x35, 0xa4, 0x57, 0x49, + 0xf1, 0xd7, 0xfc, 0x17, 0xfe, 0x51, 0xfc, 0xc3, + 0x37, 0x9b, 0xb6, 0x58, 0xcb, 0x15, 0x88, 0xc7, + 0x15, 0xdb, 0xb6, 0x34, 0xfb, 0xb5, 0xf1, 0xf9, + 0x33, 0x65, 0x65, 0x73, 0x7f, 0x77, 0x1d, 0xa5, + 0xa3, 0x39, 0xc9, 0xa4, 0x24, 0x35, 0xb5, 0x00, + 0x68, 0xd2, 0x49, 0x27, 0x40, 0x0b, 0x76, 0x69, + 0x94, 0xdf, 0x65, 0x53, 0x8b, 0x7b, 0xe8, 0xc4, + 0x52, 0xbd, 0xa1, 0xed, 0x68, 0x70, 0x77, 0x8a, + 0x49, 0x15, 0xab, 0x4f, 0xf5, 0x55, 0xe3, 0xf0, + 0xeb, 0x23, 0x16, 0xf6, 0xae, 0xcd, 0xee, 0x1a, + 0x04, 0xb7, 0x3e, 0x25, 0xbd, 0x75, 0x88, 0xc1, + 0xd6, 0x3c, 0xe5, 0x11, 0xf8, 0x95, 0xfc, 0xf2, + 0x2f, 0xfc, 0x66, 0x7d, 0x79, 0x14, 0x4e, 0x18, + 0x8c, 0x3b, 0xe7, 0xee, 0x99, 0x4e, 0x3f, 0xe6, + 0x36, 0xc9, 0xfc, 0xc7, 0xd2, 0xd3, 0x49, 0xc5, + 0x5a, 0xdb, 0x59, 0xf6, 0xcd, 0xab, 0xc6, 0x74, + 0xfd, 0x0a, 0x86, 0x91, 0xa1, 0x11, 0x17, 0x17, + 0xab, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x2c, 0x8d, 0x6b, 0x0b, 0x23, 0x5a, 0x0c, + 0x8d, 0xce, 0xe2, 0xfb, 0x75, 0x8f, 0xf2, 0xab, + 0x4f, 0xb2, 0x8f, 0xea, 0x85, 0xf1, 0x11, 0xb9, + 0xdc, 0x5f, 0x6e, 0xb1, 0xfe, 0x55, 0x69, 0xf6, + 0x51, 0xfd, 0x50, 0xb4, 0xf9, 0x3f, 0x1b, 0x3e, + 0x7f, 0xfb, 0x8f, 0xec, 0xc1, 0xfb, 0x57, 0xfd, + 0x15, 0x6d, 0x1a, 0xd5, 0x7d, 0xde, 0x51, 0xed, + 0x95, 0x60, 0x1a, 0xd5, 0x7d, 0xde, 0x51, 0xed, + 0x95, 0xb5, 0xf3, 0x6c, 0x2f, 0x51, 0x7e, 0xd5, + 0x9e, 0x73, 0x7c, 0x21, 0x79, 0x5e, 0xa2, 0xfd, + 0xab, 0x3c, 0xe6, 0xf8, 0x42, 0x0e, 0x4d, 0xb2, + 0xfe, 0x67, 0x1f, 0xd8, 0x8f, 0xac, 0xe5, 0x02, + 0xa7, 0xb6, 0xcb, 0xf9, 0x9c, 0x7f, 0x62, 0x3e, + 0xb3, 0x94, 0x0a, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x20, 0xd6, 0x11, 0x06, 0xb0, + 0x82, 0x76, 0xff, 0x00, 0xfd, 0x2b, 0x97, 0x79, + 0xee, 0xf0, 0xbd, 0x63, 0x64, 0x7f, 0x98, 0x4a, + 0x37, 0x39, 0x92, 0xb3, 0x7f, 0xfe, 0x95, 0xcb, + 0xbe, 0xd1, 0xde, 0x17, 0xac, 0x6c, 0x8f, 0xf3, + 0x09, 0x7e, 0xc4, 0xa0, 0xe2, 0xb3, 0xc9, 0xef, + 0x6f, 0xa2, 0x7c, 0xd6, 0xe1, 0xae, 0x6b, 0x1f, + 0x84, 0x82, 0x68, 0x74, 0xee, 0xef, 0x50, 0x2d, + 0x97, 0x9b, 0x3f, 0x77, 0x6d, 0x6c, 0x6e, 0x5a, + 0xf8, 0xee, 0x23, 0x67, 0x97, 0xcc, 0xbb, 0x11, + 0x6f, 0x6f, 0xc5, 0x5d, 0x56, 0x12, 0xba, 0x3d, + 0x9b, 0xcc, 0x5c, 0xdf, 0x14, 0x97, 0x86, 0x83, + 0xdb, 0xa2, 0x6c, 0xa7, 0x8f, 0x2d, 0xdd, 0xb9, + 0xfd, 0x9c, 0x90, 0x92, 0xe1, 0xd9, 0xd4, 0x82, + 0x09, 0x59, 0xb2, 0xac, 0xae, 0x6e, 0xa2, 0xbc, + 0x61, 0x7c, 0x58, 0xae, 0x9a, 0xd7, 0x46, 0x71, + 0x0a, 0x34, 0x11, 0x8b, 0xc7, 0x3b, 0x8a, 0xb2, + 0x74, 0x1e, 0x11, 0xdc, 0x0a, 0x6f, 0x28, 0x03, + 0xe1, 0xfc, 0xd4, 0x79, 0x88, 0x38, 0xed, 0xf2, + 0x5b, 0xcb, 0x8b, 0xb9, 0x6d, 0xa3, 0x2c, 0xfd, + 0x47, 0xed, 0x65, 0x27, 0xf5, 0x63, 0x45, 0x47, + 0x8c, 0x01, 0xdc, 0x5e, 0xaf, 0x32, 0x4b, 0x9b, + 0x5b, 0x7f, 0x6a, 0x6b, 0xe3, 0x9e, 0x01, 0xa1, + 0xcf, 0x85, 0xd8, 0x83, 0x7b, 0x75, 0x01, 0x76, + 0x42, 0x79, 0x8d, 0x91, 0x95, 0xcc, 0xd0, 0xe9, + 0xe6, 0xc2, 0x4f, 0x60, 0xd3, 0x89, 0x63, 0x66, + 0x4f, 0x39, 0x06, 0x63, 0x6c, 0xed, 0x31, 0xba, + 0x02, 0xfc, 0x3d, 0x9d, 0x28, 0x20, 0xce, 0xb5, + 0x25, 0x96, 0x33, 0x24, 0x21, 0x8e, 0xbf, 0x7c, + 0xa6, 0x6c, 0x7a, 0x18, 0xd0, 0x30, 0x53, 0x46, + 0x1e, 0xfa, 0x8d, 0xa5, 0x34, 0x6b, 0xa6, 0x8a, + 0xaf, 0x70, 0x7e, 0xde, 0x3f, 0x3c, 0x78, 0x42, + 0x09, 0x6d, 0xab, 0x00, 0x66, 0xf4, 0x02, 0x80, + 0x44, 0xc0, 0x06, 0xe6, 0xea, 0x86, 0x53, 0x3b, + 0x5b, 0xfc, 0xe0, 0xfd, 0x93, 0x3e, 0x55, 0x0c, + 0x82, 0xe3, 0xb3, 0xf3, 0xb6, 0x1c, 0x9e, 0xdd, + 0xaf, 0x03, 0x0c, 0xd3, 0x18, 0xa8, 0x75, 0x78, + 0xc0, 0xd3, 0xc0, 0xab, 0x13, 0xda, 0x3d, 0x99, + 0x93, 0xec, 0x9a, 0x2a, 0xee, 0x74, 0xc6, 0xda, + 0xee, 0xd4, 0xd1, 0xaa, 0x59, 0x92, 0x98, 0x76, + 0x5a, 0xde, 0x61, 0xae, 0x2b, 0xa6, 0xbc, 0x7f, + 0x65, 0xc4, 0xae, 0xb7, 0xd9, 0xb6, 0x4d, 0xaa, + 0x82, 0xe4, 0x0f, 0xd4, 0xc9, 0x10, 0xb9, 0xaf, + 0x64, 0x0c, 0x3f, 0x28, 0x41, 0xd3, 0x9c, 0xc8, + 0xce, 0xa6, 0xbe, 0xb6, 0x8f, 0xc8, 0xb5, 0x11, + 0xc4, 0x3b, 0x85, 0x87, 0xc0, 0xa3, 0xa7, 0xbd, + 0xba, 0xb3, 0xd9, 0x9b, 0x07, 0xda, 0xc8, 0x62, + 0x73, 0x8b, 0x9a, 0x4b, 0x77, 0xaa, 0xe5, 0x91, + 0x39, 0xb9, 0xc8, 0x73, 0x5b, 0x83, 0xff, 0x00, + 0x16, 0x7c, 0x5d, 0xc2, 0xe6, 0xd3, 0xbc, 0xbd, + 0x3a, 0xe2, 0xd6, 0xdf, 0x66, 0xac, 0x1d, 0x75, + 0x6c, 0x2e, 0x98, 0x5c, 0x40, 0x61, 0x38, 0x68, + 0x71, 0x3b, 0x4e, 0x80, 0x50, 0x63, 0x2d, 0xbd, + 0x9f, 0x35, 0xcb, 0x2f, 0xe1, 0xcc, 0x08, 0x95, + 0xb0, 0xc7, 0x89, 0xb2, 0x91, 0x42, 0x0d, 0x09, + 0xf9, 0x15, 0x69, 0x59, 0xad, 0xe4, 0xb6, 0xcd, + 0xf2, 0xe9, 0xec, 0x2c, 0x18, 0x6c, 0x24, 0x68, + 0x2f, 0x74, 0x4d, 0xd2, 0xd9, 0x06, 0xaf, 0x19, + 0xd4, 0xaa, 0xac, 0xe9, 0xdd, 0xd0, 0x77, 0x90, + 0x58, 0xb2, 0xab, 0x99, 0xad, 0xb6, 0x6a, 0xf6, + 0x78, 0x5d, 0x82, 0x56, 0x48, 0x30, 0xbb, 0x7b, + 0x4b, 0x07, 0xca, 0xa3, 0x9d, 0xb4, 0x39, 0xc3, + 0x9a, 0x5a, 0xeb, 0x87, 0x16, 0xb8, 0x50, 0x8a, + 0x37, 0x51, 0x52, 0x59, 0x34, 0xb0, 0xc3, 0xb3, + 0x97, 0x92, 0x4f, 0x17, 0x3d, 0x1b, 0x64, 0x18, + 0xa2, 0x3a, 0x03, 0xb4, 0xb5, 0x71, 0xcf, 0x9a, + 0x64, 0xaf, 0x82, 0x46, 0x47, 0x95, 0xb6, 0x39, + 0x1c, 0xd2, 0x19, 0x20, 0x77, 0x92, 0x48, 0xd0, + 0xed, 0x5b, 0x88, 0x36, 0xde, 0xff, 0x00, 0xa5, + 0xac, 0x4f, 0xf8, 0xae, 0x34, 0xee, 0xb9, 0x73, + 0xc1, 0xb3, 0xd7, 0x4f, 0x85, 0x93, 0x4d, 0x34, + 0x36, 0xcd, 0x97, 0x4c, 0x62, 0x57, 0x10, 0x4a, + 0xe8, 0xbe, 0xff, 0x00, 0x4b, 0xd8, 0x7d, 0xa3, + 0xbc, 0x2e, 0x4b, 0xab, 0x2c, 0xc7, 0x32, 0x64, + 0x57, 0x59, 0x8c, 0x91, 0x59, 0x40, 0xd8, 0xc3, + 0x58, 0x5c, 0x69, 0xe2, 0xd2, 0xba, 0x19, 0xbe, + 0x82, 0x36, 0xf3, 0x2c, 0xbb, 0xb3, 0xb8, 0x6d, + 0xbc, 0xcd, 0xab, 0xe4, 0xa1, 0x8c, 0xb0, 0xd4, + 0x3a, 0xbb, 0xc5, 0x76, 0x8d, 0x99, 0xbd, 0xd0, + 0xc7, 0xcd, 0x03, 0x27, 0x70, 0xa8, 0xb7, 0x73, + 0xbc, 0x72, 0xbb, 0x73, 0x99, 0xa2, 0xb5, 0x9b, + 0x27, 0x98, 0x1e, 0x72, 0x38, 0x98, 0xd3, 0x5a, + 0x50, 0xb9, 0xa0, 0xb7, 0x4d, 0x12, 0xe7, 0x2f, + 0xeb, 0x0b, 0xe3, 0x9a, 0xe5, 0x37, 0x31, 0xcd, + 0x29, 0x73, 0x64, 0xe6, 0x5c, 0x68, 0xe0, 0x5b, + 0x4d, 0x1d, 0xe4, 0x1a, 0xb6, 0x5e, 0x19, 0x20, + 0xcd, 0x2e, 0x61, 0x95, 0xa5, 0xb2, 0xc7, 0x0b, + 0x9a, 0xe6, 0x8e, 0xd8, 0x5c, 0xf1, 0x6c, 0xc5, + 0xfb, 0xe2, 0x2e, 0x12, 0x45, 0xcf, 0x00, 0x5c, + 0x6d, 0xf1, 0x78, 0xf4, 0x3a, 0x68, 0x40, 0x05, + 0x77, 0x64, 0x52, 0xdd, 0x49, 0x9f, 0x5d, 0xbe, + 0xed, 0x82, 0x39, 0xcc, 0x4e, 0xe7, 0x1a, 0x05, + 0x05, 0x5a, 0x5a, 0x14, 0x76, 0xcd, 0x3d, 0xc7, + 0x3c, 0xb7, 0x73, 0x8d, 0x5c, 0xfc, 0x78, 0x9d, + 0xbf, 0xe2, 0x39, 0x04, 0x63, 0x9a, 0xe6, 0xb8, + 0xb5, 0xc2, 0x8e, 0x69, 0xa3, 0x86, 0xf1, 0x1a, + 0xd6, 0x17, 0x46, 0x63, 0xfc, 0xc2, 0xeb, 0xed, + 0x5f, 0xf5, 0x8a, 0xe7, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x05, 0x29, 0xb3, 0x5f, + 0xce, 0xed, 0xbf, 0xb5, 0xf5, 0x0a, 0x8b, 0x52, + 0x9b, 0x35, 0xfc, 0xee, 0xdb, 0xfb, 0x5f, 0x50, + 0xa0, 0x9b, 0xcc, 0x3d, 0xf6, 0x6f, 0x3b, 0xe4, + 0x0b, 0x9d, 0x74, 0x66, 0x1e, 0xfb, 0x37, 0x9d, + 0xf2, 0x05, 0xce, 0x80, 0x8d, 0xf2, 0x87, 0xe5, + 0xba, 0x88, 0xdf, 0x28, 0x7e, 0x5b, 0xa8, 0x35, + 0x6d, 0x9f, 0xbc, 0x5b, 0x7d, 0x91, 0xf0, 0xaa, + 0xea, 0xb1, 0x6d, 0x9f, 0xbc, 0x5b, 0x7d, 0x91, + 0xf0, 0xaa, 0xea, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0xec, 0xca, 0x2c, 0xa3, 0xbe, + 0xcc, 0x22, 0xb5, 0x95, 0xc5, 0xac, 0x93, 0x15, + 0x4b, 0x69, 0x5d, 0x0d, 0x27, 0x75, 0x48, 0xbb, + 0x2d, 0xd9, 0xb6, 0xce, 0xeb, 0x53, 0x79, 0x3b, + 0x26, 0x6b, 0xb0, 0x12, 0xe0, 0x30, 0x87, 0x72, + 0x57, 0x3e, 0xcc, 0xff, 0x00, 0x3a, 0xb7, 0xfe, + 0xdf, 0xd5, 0x72, 0x5e, 0xe5, 0x19, 0x8d, 0xce, + 0x67, 0x3b, 0x63, 0x82, 0x4c, 0x2f, 0x94, 0xd2, + 0x4c, 0x24, 0x30, 0x0a, 0xf9, 0x55, 0x41, 0xcd, + 0x9a, 0x65, 0xb2, 0x65, 0xd7, 0x5c, 0xc3, 0xdd, + 0x8d, 0xae, 0x18, 0xe3, 0x78, 0x14, 0xab, 0x57, + 0x1a, 0xb6, 0xdd, 0xb6, 0xda, 0xe3, 0x3e, 0xb0, + 0xb1, 0x90, 0x36, 0x61, 0x0c, 0x4e, 0x6c, 0xa0, + 0x8a, 0x8a, 0xe1, 0x3e, 0x2a, 0x8c, 0xcc, 0x67, + 0xcb, 0xe1, 0xe7, 0xb2, 0xbb, 0x3b, 0x66, 0x97, + 0xb9, 0xf8, 0x4d, 0xc1, 0xd0, 0xec, 0x75, 0xfc, + 0xde, 0xc6, 0xe2, 0x08, 0x5a, 0xa2, 0xb0, 0xdf, + 0x4f, 0x63, 0x92, 0x3e, 0x3b, 0x28, 0xed, 0x22, + 0x9d, 0xed, 0x68, 0x74, 0xf2, 0x4c, 0x2a, 0x49, + 0x3b, 0xcb, 0x56, 0x61, 0x93, 0xc1, 0x26, 0x67, + 0x68, 0xcb, 0x51, 0xcd, 0xc1, 0x7e, 0x03, 0xc3, + 0x7e, 0x6f, 0xce, 0xa2, 0x08, 0x3a, 0x85, 0xd7, + 0x96, 0xc3, 0x63, 0x3d, 0xc3, 0x99, 0x7d, 0x37, + 0x31, 0x10, 0x61, 0x21, 0xe0, 0x81, 0xe3, 0x0d, + 0x42, 0xae, 0xaa, 0x97, 0x9a, 0xff, 0x00, 0x2c, + 0xb5, 0xcc, 0x3a, 0xb4, 0x59, 0x44, 0x6d, 0x58, + 0xe1, 0x14, 0x92, 0x38, 0x78, 0xf5, 0xd4, 0x5d, + 0x5e, 0xc2, 0xf3, 0x97, 0x65, 0xf6, 0x1d, 0x79, + 0x71, 0x6e, 0x03, 0x6e, 0x2d, 0x9b, 0x1b, 0x9d, + 0x1d, 0x4e, 0x20, 0x35, 0x14, 0x15, 0xf3, 0x4a, + 0x9a, 0x69, 0x1b, 0x87, 0xb0, 0x8a, 0x6b, 0x29, + 0xb6, 0xb5, 0x8b, 0x2f, 0xbc, 0xcc, 0xe6, 0x80, + 0x5c, 0xba, 0xdd, 0xd8, 0x22, 0x85, 0xda, 0x5a, + 0x35, 0x6e, 0x77, 0x52, 0x7b, 0x9c, 0xbb, 0x31, + 0xca, 0xe6, 0x99, 0xf1, 0xc3, 0x6b, 0x7b, 0x0b, + 0x87, 0x36, 0xd8, 0xc8, 0x6e, 0x21, 0xbb, 0xe2, + 0xee, 0xa0, 0xe0, 0xb9, 0x86, 0xc6, 0x3b, 0x1b, + 0x79, 0x60, 0x98, 0xbe, 0xe5, 0xf5, 0xe7, 0xe3, + 0x24, 0x51, 0xbd, 0xa5, 0xc9, 0x55, 0x2f, 0x7f, + 0x69, 0x03, 0x32, 0x6c, 0xb6, 0x58, 0xa3, 0x0c, + 0x9a, 0x73, 0x47, 0x3c, 0x79, 0x44, 0x91, 0x40, + 0xba, 0xaf, 0x65, 0xb2, 0xc9, 0x0c, 0x36, 0x71, + 0xda, 0x45, 0x3c, 0xb8, 0x03, 0xa7, 0x7c, 0xba, + 0x4d, 0x5d, 0xb8, 0x10, 0x57, 0x91, 0x4e, 0xdf, + 0xe5, 0xf6, 0x8c, 0xbe, 0xcb, 0xee, 0x6d, 0xd9, + 0x4b, 0x5b, 0xe2, 0xc7, 0x73, 0x7b, 0x80, 0xd6, + 0xa4, 0x76, 0xb4, 0xad, 0xd7, 0xf7, 0x79, 0x66, + 0x55, 0x98, 0xc9, 0x6f, 0x0d, 0x8c, 0x72, 0x0a, + 0x83, 0x33, 0x9f, 0xa6, 0x95, 0x00, 0xd1, 0x83, + 0x71, 0x05, 0x71, 0x65, 0xa0, 0xb8, 0x86, 0xb4, + 0x55, 0xce, 0x21, 0xa0, 0x76, 0x4e, 0xa5, 0x29, + 0xb4, 0x96, 0x50, 0x5a, 0x66, 0x00, 0x5b, 0xb4, + 0x32, 0x39, 0x63, 0x6c, 0x81, 0xa3, 0x70, 0x9a, + 0x8f, 0x91, 0x73, 0xe4, 0x8c, 0x0f, 0xcd, 0xed, + 0x1a, 0x75, 0x73, 0x80, 0x9e, 0xe0, 0x28, 0x24, + 0x25, 0xcb, 0x32, 0x5c, 0xb9, 0xac, 0x8f, 0x32, + 0x96, 0x57, 0xdc, 0xbc, 0x02, 0xe6, 0xc5, 0xa9, + 0x95, 0xdf, 0x5c, 0x99, 0xb6, 0x55, 0x15, 0x9b, + 0x21, 0xba, 0xb5, 0x90, 0xcd, 0x67, 0x70, 0x3c, + 0x47, 0x9d, 0x60, 0xf6, 0x56, 0x36, 0x81, 0xe5, + 0xf9, 0xcd, 0xd1, 0x3b, 0x8e, 0xc3, 0xdc, 0x68, + 0x01, 0x76, 0xb4, 0xf3, 0x9b, 0x1d, 0x21, 0x3f, + 0xf0, 0x26, 0xd1, 0xc2, 0x3d, 0x24, 0x10, 0x28, + 0xac, 0x57, 0x66, 0xd3, 0x24, 0xb6, 0xb5, 0x63, + 0x2d, 0x23, 0xb9, 0x7c, 0xec, 0x0f, 0x96, 0x59, + 0x74, 0xd7, 0xb4, 0xb9, 0xaf, 0x2c, 0xf2, 0xfb, + 0xdc, 0xc2, 0xc9, 0xb6, 0x0e, 0x6b, 0x1b, 0x78, + 0x07, 0x3d, 0x1c, 0x64, 0x1c, 0x07, 0x59, 0xa8, + 0xdc, 0xd6, 0x82, 0x1a, 0xa1, 0x75, 0xe5, 0x90, + 0xd8, 0xcf, 0x70, 0x59, 0x7d, 0x37, 0x31, 0x16, + 0x12, 0x43, 0xea, 0x07, 0x8d, 0xbd, 0xa5, 0x4b, + 0xcf, 0x7f, 0x96, 0x5a, 0x5f, 0xf5, 0x68, 0xb2, + 0x88, 0xda, 0xb5, 0xc2, 0x29, 0x24, 0x77, 0x97, + 0x53, 0xa0, 0x9c, 0x47, 0x79, 0x79, 0xcb, 0x72, + 0xfc, 0xb8, 0xe7, 0xd3, 0xdb, 0x34, 0x36, 0xe6, + 0xd8, 0x30, 0xba, 0x22, 0x68, 0xe1, 0xa8, 0x1d, + 0x63, 0x7a, 0xb4, 0x41, 0xc3, 0x96, 0xe5, 0xb0, + 0x5d, 0xda, 0x5f, 0x4e, 0xf7, 0xb8, 0x1b, 0x66, + 0x87, 0x30, 0x36, 0x94, 0x35, 0x04, 0xe9, 0xaf, + 0x69, 0x79, 0x8f, 0x2e, 0x89, 0xd9, 0x1c, 0x99, + 0x91, 0x71, 0xe7, 0x59, 0x28, 0x8c, 0x34, 0x11, + 0x86, 0x9e, 0x2f, 0x1a, 0xed, 0xc8, 0xb4, 0x65, + 0xf9, 0xbf, 0x99, 0xa3, 0xb5, 0x47, 0x2c, 0x43, + 0xfe, 0x91, 0x98, 0xef, 0x5c, 0x0f, 0x03, 0x10, + 0x41, 0xd4, 0x6f, 0xa2, 0x9c, 0xf6, 0x8c, 0xbb, + 0x2b, 0xcb, 0xad, 0x9d, 0x0c, 0x31, 0x5e, 0x5d, + 0x4c, 0x31, 0x4a, 0xe9, 0x3c, 0x6c, 0x3a, 0x35, + 0x53, 0x71, 0x33, 0x46, 0x59, 0xfb, 0x25, 0x86, + 0x6c, 0xcb, 0x66, 0x46, 0x65, 0x79, 0x13, 0x40, + 0x2b, 0x81, 0xc0, 0x57, 0x89, 0x07, 0x0d, 0xe6, + 0x58, 0x2d, 0xb2, 0xfb, 0x4b, 0xce, 0x70, 0xb8, + 0xdd, 0x56, 0xac, 0xa5, 0x29, 0x4e, 0xca, 0xe1, + 0x56, 0x9c, 0xd2, 0xfe, 0xdd, 0xb9, 0x35, 0x94, + 0x86, 0xce, 0x37, 0x36, 0x60, 0xe1, 0x1c, 0x67, + 0x54, 0x66, 0x87, 0x4b, 0x57, 0x2b, 0xfd, 0x97, + 0x25, 0xb0, 0xb6, 0x79, 0xb7, 0x8e, 0xe2, 0xee, + 0xec, 0x19, 0x1c, 0x65, 0x15, 0x6b, 0x5b, 0xd8, + 0x1d, 0xd0, 0x82, 0x01, 0x14, 0xce, 0x6d, 0x6d, + 0x6b, 0x3e, 0x5b, 0x06, 0x6d, 0x6b, 0x18, 0xb7, + 0xe7, 0x0f, 0x37, 0x33, 0x1b, 0xe4, 0x87, 0x6e, + 0x10, 0x17, 0x7e, 0x66, 0xec, 0xa7, 0x28, 0x9a, + 0x27, 0xb2, 0xd1, 0xb2, 0xcd, 0x2c, 0x60, 0x08, + 0xce, 0x86, 0xb5, 0xa3, 0x5b, 0x88, 0x3b, 0xa6, + 0xa8, 0x2a, 0xe8, 0xb2, 0xe3, 0x57, 0x12, 0x06, + 0x10, 0xe2, 0x48, 0x6e, 0xf0, 0x25, 0x61, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x77, 0x64, 0x7f, + 0xce, 0x2d, 0x3e, 0xd3, 0xe4, 0x2b, 0x85, 0x77, + 0x64, 0x7f, 0xce, 0x2d, 0x3e, 0xd3, 0xe4, 0x28, + 0x2c, 0x79, 0xa7, 0xbe, 0xc9, 0xdc, 0xf0, 0x2e, + 0x55, 0xd5, 0x9a, 0x7b, 0xec, 0x9d, 0xcf, 0x02, + 0xe5, 0x41, 0xee, 0xdf, 0xde, 0x23, 0xf3, 0x9b, + 0xe1, 0x53, 0xca, 0x06, 0xdf, 0xde, 0x23, 0xf3, + 0x9b, 0xe1, 0x53, 0xc8, 0x0a, 0x2f, 0x37, 0xf7, + 0x9b, 0x2f, 0x3f, 0xe5, 0x0a, 0x51, 0x45, 0xe6, + 0xfe, 0xf3, 0x65, 0xe7, 0xfc, 0xa1, 0x03, 0x28, + 0xf7, 0x9b, 0xdf, 0xb4, 0x3f, 0x58, 0xa9, 0x45, + 0x17, 0x94, 0x7b, 0xcd, 0xef, 0xda, 0x1f, 0xac, + 0x54, 0xa2, 0x02, 0x22, 0x20, 0xf4, 0xdf, 0x24, + 0xaf, 0x87, 0x5e, 0xfb, 0xe5, 0xc7, 0xda, 0xbf, + 0xeb, 0x15, 0xf7, 0x16, 0xf9, 0x25, 0x7c, 0x3a, + 0xf7, 0xdf, 0x2e, 0x3e, 0xd5, 0xff, 0x00, 0x58, + 0xac, 0x9e, 0x6f, 0xc2, 0x8f, 0xa0, 0xfe, 0xdb, + 0xfb, 0xfc, 0xc7, 0xc3, 0x1f, 0xf9, 0xb4, 0xa2, + 0x22, 0xc8, 0xfa, 0x41, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x05, 0xcf, 0xf0, + 0xca, 0x36, 0x9c, 0xd2, 0xf2, 0x53, 0xe5, 0x32, + 0x00, 0x07, 0x63, 0x13, 0xbf, 0x45, 0x46, 0x6d, + 0xc4, 0xae, 0x7e, 0xd3, 0x5d, 0xd7, 0xf3, 0x03, + 0x18, 0x3b, 0x4d, 0x68, 0x5d, 0x5f, 0x87, 0x97, + 0xac, 0xb7, 0xcf, 0x4c, 0x2f, 0x21, 0xa2, 0xea, + 0x27, 0x30, 0x57, 0x75, 0xcd, 0x21, 0xcd, 0xef, + 0x55, 0x6c, 0xfc, 0x44, 0xcb, 0x65, 0xb7, 0xcd, + 0xfa, 0xc0, 0x34, 0x9b, 0x7b, 0xa6, 0x37, 0xc7, + 0xa6, 0x86, 0xbd, 0x9e, 0x29, 0x07, 0xb6, 0xb4, + 0x6b, 0xaf, 0x96, 0xe1, 0xc6, 0x62, 0xdc, 0x5e, + 0x2c, 0x4c, 0x53, 0xf9, 0xd5, 0xe6, 0xd3, 0x11, + 0xdd, 0xc3, 0xfe, 0xdc, 0xfe, 0x95, 0x4c, 0x54, + 0x1a, 0x83, 0x53, 0xbc, 0x16, 0xeb, 0x1b, 0x37, + 0x5e, 0xdd, 0xc1, 0x67, 0x10, 0xa3, 0xa7, 0x7b, + 0x63, 0x6f, 0xf6, 0x8d, 0x2a, 0xa6, 0x76, 0x3f, + 0x20, 0x6e, 0x77, 0x98, 0x3d, 0xb7, 0x0c, 0x26, + 0xca, 0x16, 0x38, 0xc8, 0xe6, 0x9a, 0x78, 0xe4, + 0x51, 0xad, 0x04, 0x6e, 0xe9, 0xaa, 0xe9, 0x76, + 0x5b, 0x67, 0x91, 0x6d, 0x9d, 0x95, 0xbc, 0x53, + 0xba, 0x58, 0x9b, 0x2c, 0x6e, 0x79, 0x90, 0x00, + 0x5a, 0x5e, 0x68, 0x05, 0x46, 0xb5, 0xca, 0xb8, + 0xe7, 0x6d, 0x6d, 0x3e, 0x13, 0x6d, 0x1b, 0x33, + 0x79, 0xcc, 0x71, 0x7c, 0xde, 0x5f, 0x1e, 0xb3, + 0x9b, 0x1e, 0x2b, 0xdf, 0x85, 0x78, 0x78, 0x75, + 0x2d, 0x59, 0xce, 0x6f, 0x69, 0xb2, 0x19, 0x5d, + 0xbd, 0xad, 0x94, 0x2d, 0x73, 0xdc, 0x30, 0xc3, + 0x1b, 0xb4, 0x03, 0x84, 0x78, 0xcf, 0x92, 0x84, + 0x6b, 0x58, 0xd9, 0xfc, 0xfa, 0x0d, 0xaa, 0xb3, + 0xba, 0xb4, 0xbf, 0x81, 0xad, 0x91, 0xad, 0x02, + 0x48, 0xdb, 0xa5, 0x8e, 0x6b, 0xb5, 0x39, 0xb8, + 0xb7, 0x54, 0x47, 0xe2, 0x75, 0xbc, 0x85, 0xd6, + 0x57, 0x3a, 0x79, 0xa0, 0x1d, 0x13, 0x8e, 0xe0, + 0x71, 0xd2, 0x2b, 0xdb, 0x5a, 0x7f, 0x0c, 0xa0, + 0x91, 0xd7, 0xd7, 0x97, 0x3a, 0x79, 0xa6, 0x46, + 0x23, 0x27, 0x70, 0xb9, 0xce, 0xa8, 0x1d, 0xb1, + 0x45, 0xaa, 0x72, 0x5b, 0xbf, 0x14, 0xfd, 0x48, + 0xfd, 0x0f, 0x0e, 0xbe, 0x57, 0x0c, 0xff, 0x00, + 0x2a, 0x9f, 0x37, 0x36, 0xff, 0x00, 0xf6, 0x3e, + 0xfe, 0xe4, 0x4f, 0xd5, 0x17, 0xdd, 0xa6, 0x8d, + 0x1b, 0x2f, 0x62, 0xfc, 0xbf, 0x6e, 0x1d, 0x62, + 0x74, 0x98, 0x0c, 0xac, 0x69, 0xdf, 0x6e, 0x12, + 0x5a, 0x78, 0x0a, 0xb2, 0xed, 0x36, 0xd4, 0x41, + 0x90, 0x5c, 0xc7, 0x14, 0x76, 0xe2, 0x79, 0xee, + 0x00, 0x96, 0x63, 0x8b, 0x0f, 0x8a, 0x0e, 0x01, + 0xa4, 0x03, 0x53, 0xa1, 0x44, 0xd8, 0xcf, 0x1c, + 0xdf, 0x89, 0x53, 0xba, 0x3a, 0x10, 0xd2, 0xf6, + 0x12, 0x37, 0xdb, 0x1e, 0x95, 0x1b, 0xf8, 0x8e, + 0x49, 0xcf, 0xc0, 0x3a, 0x9b, 0x03, 0x29, 0xdd, + 0x24, 0xaa, 0x45, 0xe7, 0x1e, 0x2b, 0xcd, 0x38, + 0x7d, 0x7a, 0x43, 0xbc, 0xe0, 0xaf, 0x9b, 0xf3, + 0xfe, 0x5e, 0x33, 0xfd, 0x51, 0x7f, 0x29, 0x5b, + 0xe4, 0x8d, 0x74, 0xdd, 0xf1, 0x59, 0x36, 0x33, + 0x69, 0x27, 0xce, 0x26, 0xbc, 0x86, 0x58, 0xc3, + 0x5b, 0x19, 0xe7, 0x5a, 0xfa, 0x92, 0xe2, 0x24, + 0x73, 0xa8, 0x0e, 0xe6, 0x80, 0x14, 0x06, 0xd7, + 0x67, 0x33, 0xe7, 0x39, 0x9b, 0x72, 0x16, 0xc2, + 0xd6, 0x08, 0x2e, 0x84, 0x6c, 0x90, 0x12, 0x5c, + 0xea, 0xf8, 0x9a, 0xbb, 0xab, 0xa3, 0xf0, 0xbf, + 0xde, 0xef, 0xfe, 0xce, 0x2f, 0xac, 0xf5, 0x15, + 0x71, 0x24, 0x71, 0x6d, 0xe3, 0xdf, 0x21, 0x00, + 0x32, 0xfd, 0x85, 0xd5, 0xdc, 0x18, 0x9a, 0x93, + 0x7b, 0x4e, 0x1a, 0x6b, 0x3f, 0x75, 0xb4, 0x9f, + 0x86, 0xab, 0x62, 0xf2, 0xd8, 0xb1, 0xff, 0x00, + 0x32, 0xf3, 0x11, 0x4a, 0xff, 0x00, 0x03, 0x0f, + 0x73, 0x1c, 0x6b, 0xfa, 0xdb, 0x56, 0xec, 0xff, + 0x00, 0x36, 0x66, 0xc8, 0xe5, 0x36, 0x96, 0x99, + 0x74, 0x4d, 0x74, 0x8f, 0xab, 0x22, 0x0f, 0xf2, + 0x40, 0x60, 0x18, 0xde, 0xec, 0x3b, 0xa6, 0xab, + 0xc5, 0x9d, 0xe4, 0x5b, 0x65, 0xb3, 0x77, 0x0c, + 0xba, 0x8d, 0xb1, 0xdc, 0xc7, 0x89, 0x87, 0x0e, + 0x90, 0xd9, 0x00, 0xc4, 0xc7, 0xb6, 0xba, 0x74, + 0xae, 0xad, 0xab, 0xcf, 0x9b, 0x92, 0x7b, 0x34, + 0xb2, 0xd8, 0x8b, 0xc6, 0x4d, 0x8d, 0x98, 0x9c, + 0xe0, 0xd0, 0xc2, 0xda, 0x68, 0xd2, 0xc7, 0x6b, + 0xaf, 0x79, 0x44, 0xdb, 0xed, 0xcd, 0xd4, 0x96, + 0xe6, 0x7b, 0x3c, 0x89, 0xee, 0x8a, 0xa4, 0x3d, + 0xf1, 0x3e, 0xad, 0xa8, 0xf3, 0x62, 0x5d, 0x6d, + 0x68, 0x8b, 0xcd, 0x66, 0xf1, 0x11, 0xa7, 0xdb, + 0xb7, 0xfc, 0x58, 0x30, 0xe1, 0xcd, 0x93, 0xcb, + 0x57, 0x36, 0x3c, 0x13, 0xdd, 0xdf, 0x37, 0xf5, + 0x36, 0xcb, 0x5a, 0xc6, 0xba, 0xf8, 0x69, 0x28, + 0x4d, 0x86, 0xcf, 0x5d, 0x95, 0xe6, 0x5e, 0xc9, + 0x71, 0xe2, 0xdb, 0x5e, 0x10, 0xc7, 0x57, 0xf3, + 0x25, 0x15, 0x00, 0xf7, 0x7c, 0x92, 0xae, 0xad, + 0xd9, 0xab, 0x46, 0x6d, 0x13, 0xf3, 0xca, 0xd2, + 0xac, 0xfd, 0x95, 0x34, 0x09, 0x75, 0x3a, 0x4e, + 0x05, 0xf3, 0x2b, 0x1b, 0x19, 0xf3, 0x7c, 0xd1, + 0x96, 0xd0, 0x0c, 0x2f, 0xb8, 0x91, 0xce, 0xae, + 0xe3, 0x1a, 0x49, 0x73, 0x89, 0x34, 0x1e, 0x4a, + 0xfa, 0xec, 0xd0, 0x45, 0x35, 0xab, 0xb2, 0xf3, + 0x31, 0xc4, 0x61, 0xe6, 0xdc, 0x6b, 0x57, 0xe1, + 0x23, 0x06, 0x33, 0xc0, 0xab, 0xe5, 0xf5, 0xb5, + 0x6d, 0x13, 0x11, 0x31, 0x59, 0xd6, 0x93, 0x3c, + 0xda, 0x7f, 0x9d, 0x69, 0x87, 0x35, 0x72, 0x63, + 0xb4, 0xd2, 0xf9, 0xf1, 0x45, 0x73, 0xd6, 0x3a, + 0x7c, 0x26, 0x67, 0xdd, 0xff, 0x00, 0x87, 0xcc, + 0x76, 0xbf, 0x3b, 0xeb, 0x6c, 0xd0, 0xb6, 0x27, + 0xd6, 0xd2, 0xd6, 0xb1, 0xc3, 0xa7, 0xca, 0x3f, + 0x9c, 0xfe, 0xee, 0xa5, 0x09, 0xce, 0x49, 0x80, + 0x31, 0xce, 0x76, 0x00, 0x6a, 0xd6, 0x12, 0x70, + 0x83, 0xbe, 0x1b, 0x5a, 0x0d, 0xd5, 0xbb, 0x32, + 0xcb, 0xe7, 0xcb, 0xef, 0xa6, 0xb2, 0x9c, 0x52, + 0x58, 0x1c, 0x41, 0xec, 0x8d, 0xc7, 0x0e, 0xda, + 0xe6, 0xd7, 0xa1, 0x64, 0xbc, 0xda, 0x6f, 0x6d, + 0x7c, 0x67, 0xc5, 0xef, 0xf9, 0x6c, 0x38, 0x71, + 0x61, 0xc7, 0x4c, 0x5a, 0x4d, 0x2b, 0x11, 0xb2, + 0x7c, 0x75, 0xf7, 0xbd, 0xf3, 0xd2, 0x53, 0x00, + 0x7b, 0xb9, 0xb0, 0x6a, 0xd6, 0xd4, 0xe1, 0x07, + 0x7f, 0x0d, 0x69, 0xdd, 0x59, 0xe7, 0xe7, 0x2e, + 0x73, 0xb9, 0xe7, 0x97, 0x3c, 0x61, 0x73, 0x8b, + 0xcd, 0x5c, 0x37, 0x89, 0xaa, 0xd4, 0x80, 0x57, + 0x42, 0xae, 0xb3, 0xcd, 0xdb, 0xb7, 0x5f, 0x1d, + 0xb1, 0x33, 0xac, 0xcf, 0xcd, 0xd5, 0x1e, 0x59, + 0x99, 0x4a, 0xc1, 0x24, 0x56, 0xb2, 0xba, 0x27, + 0x53, 0x0b, 0xda, 0xc7, 0x16, 0x9e, 0xd1, 0xa2, + 0xe9, 0xca, 0xed, 0xae, 0x2d, 0x73, 0xbb, 0x06, + 0xdc, 0xc6, 0xe8, 0x49, 0x9e, 0x32, 0x03, 0xc1, + 0x6e, 0x8c, 0x5a, 0xf4, 0xab, 0x76, 0x43, 0xb7, + 0x39, 0x36, 0x5d, 0x93, 0xda, 0xd9, 0x4f, 0xce, + 0x99, 0x6d, 0xe3, 0x0c, 0x7d, 0x1b, 0x51, 0x5a, + 0xee, 0x15, 0x19, 0x9d, 0xe7, 0xb6, 0x59, 0xde, + 0xd2, 0x65, 0x53, 0xd9, 0xe2, 0xc1, 0x1b, 0x98, + 0xc7, 0x63, 0x14, 0x35, 0xe7, 0x2a, 0xbb, 0xf6, + 0xb1, 0xc4, 0x56, 0xd1, 0x7d, 0x66, 0x66, 0xbc, + 0x1e, 0x5c, 0x79, 0xbf, 0x37, 0x7c, 0x99, 0x70, + 0xe4, 0xf2, 0xd3, 0x4c, 0x5a, 0x64, 0x8e, 0xef, + 0xba, 0x3c, 0x17, 0x4c, 0xc2, 0xf0, 0x41, 0xb4, + 0xb9, 0x5c, 0x75, 0xa3, 0x6e, 0x22, 0xb9, 0x8c, + 0xf6, 0xc7, 0x36, 0xf1, 0xf5, 0x54, 0x1d, 0x9e, + 0x54, 0x23, 0xfc, 0x45, 0xb9, 0x9a, 0x9e, 0x23, + 0x22, 0x75, 0xc8, 0xd1, 0xa0, 0x99, 0x03, 0x59, + 0xe1, 0x25, 0x6c, 0xdb, 0x5b, 0x9f, 0x62, 0xce, + 0xb2, 0x2b, 0xa3, 0xaa, 0x39, 0x64, 0x27, 0xb5, + 0x8a, 0x20, 0x7c, 0x2a, 0xd0, 0xf8, 0x2d, 0xe2, + 0xb9, 0x97, 0x30, 0x23, 0xc6, 0xe6, 0x83, 0x5c, + 0xef, 0xea, 0xc7, 0x8d, 0xdf, 0xde, 0x5a, 0xb8, + 0x5a, 0xf3, 0x13, 0xfa, 0x96, 0x89, 0xff, 0x00, + 0x07, 0x81, 0x5b, 0xdb, 0x0f, 0x97, 0xa5, 0xa3, + 0xff, 0x00, 0xf5, 0xe0, 0xbe, 0x2f, 0x85, 0xa2, + 0xe8, 0xec, 0x9a, 0xef, 0xda, 0x73, 0x3c, 0xe0, + 0xd7, 0xc4, 0x8a, 0xe1, 0xb0, 0xb6, 0xbf, 0xd4, + 0x8d, 0xa0, 0xf7, 0xd7, 0xcd, 0xf2, 0x7c, 0x9d, + 0xf9, 0xce, 0x7c, 0x6d, 0x05, 0x79, 0xbe, 0x75, + 0xce, 0x9d, 0xc3, 0x72, 0x30, 0xe3, 0x5e, 0x56, + 0xa5, 0x71, 0xfc, 0x3e, 0x99, 0xd7, 0x56, 0xd9, + 0x84, 0xee, 0x35, 0x32, 0xdd, 0x39, 0xe4, 0xf9, + 0xc2, 0xab, 0x9f, 0x60, 0x24, 0xb2, 0x87, 0xac, + 0xa5, 0x96, 0x46, 0x47, 0x29, 0x9f, 0x08, 0x2e, + 0x70, 0x69, 0x2d, 0x15, 0x3a, 0x2b, 0xd9, 0x5c, + 0xad, 0x11, 0x7e, 0xd6, 0xe9, 0xd3, 0x74, 0xda, + 0xdf, 0xfa, 0x37, 0x62, 0xbd, 0xbc, 0xa7, 0xae, + 0x8a, 0x7d, 0xf5, 0xae, 0x0c, 0x75, 0x8f, 0xf5, + 0x5a, 0xbe, 0x3f, 0x83, 0xb2, 0xf7, 0x37, 0x67, + 0xc5, 0x59, 0x5e, 0x47, 0x67, 0xa2, 0xde, 0xd0, + 0xd6, 0x56, 0xb7, 0x56, 0x3c, 0x34, 0x6b, 0x7f, + 0xb0, 0xd5, 0x01, 0xf8, 0x97, 0xfc, 0xf2, 0x2f, + 0xfc, 0x66, 0x7d, 0x79, 0x15, 0xbe, 0xcf, 0x24, + 0xd9, 0x98, 0xf3, 0x26, 0xdf, 0x5b, 0x96, 0xba, + 0xf8, 0xb9, 0xcf, 0x0f, 0xe7, 0x4b, 0x9c, 0x5c, + 0xed, 0x27, 0x46, 0x25, 0x1f, 0xb7, 0x99, 0x76, + 0x55, 0x35, 0x84, 0xf7, 0xd3, 0x06, 0xfb, 0x7c, + 0x71, 0xb5, 0xb0, 0x92, 0xfa, 0x3a, 0x81, 0xdb, + 0x8c, 0xee, 0x95, 0x39, 0x6b, 0x33, 0x8e, 0xfc, + 0x63, 0xc7, 0x58, 0xd3, 0xdc, 0xe7, 0xe4, 0xbc, + 0xc6, 0x1c, 0x7e, 0x73, 0xcb, 0xec, 0xad, 0xfe, + 0xc9, 0xc5, 0x33, 0x68, 0xe3, 0x6c, 0x99, 0x35, + 0xe3, 0xf0, 0x7c, 0xcb, 0x71, 0x61, 0x64, 0xd6, + 0xab, 0x0b, 0x0b, 0xea, 0xe3, 0xc0, 0x44, 0x45, + 0x20, 0x88, 0x88, 0x08, 0x88, 0x80, 0xb2, 0x35, + 0xac, 0x2c, 0x8d, 0x68, 0x03, 0x58, 0x5f, 0x6f, + 0xb1, 0xfe, 0x57, 0x6b, 0xf6, 0x51, 0xfd, 0x50, + 0xbe, 0x20, 0x35, 0x8e, 0xd2, 0xfb, 0x85, 0x9f, + 0xf2, 0xcb, 0x5f, 0xb2, 0x67, 0xd5, 0x0b, 0x4f, + 0x93, 0xfb, 0xac, 0xf9, 0xff, 0x00, 0xee, 0x3f, + 0xb3, 0x07, 0xed, 0x5f, 0xf4, 0x55, 0xb0, 0x6b, + 0x55, 0xf7, 0x79, 0x47, 0xb6, 0x55, 0x80, 0x6b, + 0x55, 0xf7, 0x79, 0x47, 0xb6, 0x56, 0xd7, 0xcd, + 0xb0, 0xbd, 0x45, 0xfb, 0x56, 0x79, 0xcd, 0xf0, + 0x85, 0xe5, 0x7a, 0x8b, 0xf6, 0xac, 0xf3, 0x9b, + 0xe1, 0x08, 0x39, 0x36, 0xcb, 0xf9, 0x9c, 0x7f, + 0x62, 0x3e, 0xb3, 0x94, 0x0a, 0x9e, 0xdb, 0x23, + 0xfe, 0x67, 0x1f, 0xd8, 0x8f, 0xac, 0xe5, 0x02, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x82, 0x7e, 0xd5, 0x91, 0xe6, 0xd9, + 0x13, 0x32, 0xf8, 0xa4, 0x6b, 0x2e, 0xad, 0x5e, + 0x5c, 0xc6, 0xb8, 0xd3, 0x10, 0x24, 0x9a, 0x8e, + 0x15, 0xb3, 0x2e, 0xb4, 0x39, 0x0c, 0x73, 0xde, + 0x5f, 0x3d, 0x82, 0x47, 0x46, 0x59, 0x0c, 0x4d, + 0x70, 0x71, 0x24, 0x9a, 0xee, 0x2a, 0xe7, 0xe5, + 0xf9, 0x51, 0x64, 0x9a, 0xeb, 0xa9, 0xed, 0xeb, + 0x41, 0x61, 0xc9, 0x62, 0x8e, 0x7c, 0x86, 0xfa, + 0x29, 0x1e, 0x23, 0x12, 0x48, 0x06, 0x33, 0xa9, + 0xae, 0x20, 0x53, 0xb8, 0x96, 0x76, 0x8f, 0xc8, + 0xad, 0x6e, 0xee, 0xae, 0xde, 0xc1, 0x2c, 0xac, + 0xe6, 0xa0, 0x63, 0x5d, 0x88, 0x92, 0x7f, 0x39, + 0x70, 0xda, 0x5f, 0x5a, 0xc5, 0x91, 0xde, 0x59, + 0x3c, 0x9e, 0x7e, 0x77, 0x03, 0x1b, 0x68, 0x48, + 0xd1, 0x4d, 0xde, 0xe2, 0x8b, 0x24, 0xd0, 0x56, + 0xa6, 0x9b, 0xfa, 0x50, 0x37, 0x09, 0x3b, 0xba, + 0x4f, 0x6c, 0xa9, 0xed, 0x9f, 0x8c, 0x5c, 0xe5, + 0x99, 0x8d, 0x9b, 0x5e, 0xd6, 0x4f, 0x2e, 0x0c, + 0x01, 0xc6, 0x9a, 0x86, 0xb5, 0x02, 0x94, 0xd1, + 0xbd, 0xa7, 0x47, 0x69, 0x05, 0x86, 0xc6, 0x01, + 0x2e, 0x5f, 0x75, 0x90, 0xc8, 0xf6, 0x32, 0xe6, + 0x27, 0x89, 0x21, 0xd2, 0x30, 0xb8, 0x80, 0x34, + 0x03, 0xdc, 0x59, 0xb6, 0xb7, 0x76, 0x47, 0x96, + 0xde, 0x4f, 0x78, 0xe6, 0x8b, 0x9b, 0x96, 0xf3, + 0x51, 0x46, 0x1c, 0x1c, 0xed, 0x35, 0x15, 0xd1, + 0xd9, 0x2a, 0xba, 0x40, 0xdc, 0xae, 0x8d, 0xdd, + 0xd5, 0x92, 0x5c, 0xe3, 0x52, 0x6b, 0xdb, 0xa9, + 0x41, 0x8d, 0x5a, 0x0e, 0xb0, 0xbd, 0xc1, 0xfb, + 0x68, 0xfc, 0xf1, 0xe1, 0x0b, 0xc2, 0x50, 0x1d, + 0x7b, 0xba, 0xf7, 0x74, 0x20, 0x98, 0xda, 0xb7, + 0x35, 0xd9, 0xb9, 0x2d, 0x21, 0xc3, 0x9b, 0x66, + 0x90, 0x6b, 0xbe, 0xa1, 0xd0, 0x00, 0x3e, 0x4a, + 0x0a, 0x70, 0xa6, 0xbd, 0x08, 0x27, 0x24, 0x73, + 0x4e, 0xc8, 0xc6, 0xc0, 0x46, 0x3e, 0x7f, 0x55, + 0x74, 0xeb, 0x3a, 0x54, 0x85, 0xbd, 0xf4, 0x3f, + 0x0d, 0x1b, 0xa2, 0x41, 0xb8, 0x8a, 0x27, 0x5b, + 0x82, 0x48, 0xad, 0x0b, 0xb0, 0x81, 0xc0, 0xaa, + 0x54, 0xdd, 0x23, 0x8d, 0x66, 0x83, 0x7a, 0xb4, + 0xd5, 0xdd, 0x41, 0x3b, 0x64, 0xe0, 0x36, 0x5a, + 0xf9, 0xa4, 0x80, 0xf2, 0xf6, 0x9a, 0x57, 0x49, + 0xd2, 0xde, 0x25, 0xd3, 0xec, 0x32, 0x66, 0x1b, + 0x3b, 0x63, 0x0c, 0x32, 0x46, 0xd9, 0x23, 0x2e, + 0x71, 0x0f, 0x75, 0x37, 0x5c, 0xab, 0x34, 0xd3, + 0x5a, 0x69, 0xdf, 0x58, 0x2d, 0x07, 0x70, 0x20, + 0xb3, 0x58, 0x5b, 0x41, 0x90, 0x36, 0x6b, 0xbb, + 0xa9, 0xe3, 0x7c, 0xee, 0x66, 0x08, 0xa2, 0x8c, + 0xd4, 0xaa, 0xd9, 0x35, 0x24, 0xef, 0x9a, 0xaf, + 0x20, 0x0d, 0x1a, 0x29, 0x4d, 0x5a, 0x16, 0x50, + 0x4e, 0xd9, 0x39, 0xa3, 0x65, 0x6f, 0x9b, 0x88, + 0x62, 0x32, 0x02, 0x1b, 0x5d, 0x3a, 0xd8, 0xa0, + 0x96, 0x29, 0xa6, 0xbb, 0xbb, 0xff, 0x00, 0x90, + 0x59, 0x41, 0x3b, 0x76, 0xf6, 0x7c, 0x35, 0x60, + 0x2a, 0x09, 0x6c, 0xa4, 0x90, 0x0e, 0x9a, 0x55, + 0xc5, 0x74, 0x67, 0xb9, 0x74, 0xd9, 0xac, 0xf1, + 0x5d, 0xda, 0xc8, 0xc3, 0x68, 0x63, 0x00, 0xbc, + 0xbc, 0x37, 0x00, 0x15, 0x27, 0x42, 0xac, 0xd0, + 0x6f, 0x0e, 0xd8, 0x14, 0x5e, 0x81, 0x20, 0x52, + 0xa6, 0x9b, 0xdb, 0x88, 0x2c, 0xf9, 0xa3, 0x6d, + 0x30, 0x65, 0x97, 0x2f, 0x2c, 0xb8, 0xb0, 0x81, + 0xa2, 0x29, 0x5c, 0x0e, 0x82, 0x34, 0x37, 0x10, + 0x6e, 0xbd, 0xc5, 0xa1, 0xd9, 0x05, 0xc3, 0x73, + 0x46, 0xdd, 0x59, 0x3e, 0x36, 0x59, 0xe3, 0x0f, + 0x64, 0xad, 0x78, 0x18, 0x5b, 0xac, 0x8a, 0x6b, + 0x2a, 0xbb, 0xf9, 0x01, 0xbd, 0xd8, 0x5e, 0x81, + 0x70, 0x18, 0x41, 0x34, 0x3a, 0x69, 0x53, 0x44, + 0x16, 0xbb, 0x3b, 0xcb, 0x6b, 0x8d, 0xa4, 0xbc, + 0x9a, 0x37, 0x8e, 0x6c, 0x41, 0x83, 0x15, 0x40, + 0x04, 0xb6, 0x95, 0x50, 0xbb, 0x36, 0x43, 0x73, + 0x9b, 0x52, 0xe2, 0x00, 0x18, 0xaa, 0x4f, 0x98, + 0xe1, 0xe1, 0x51, 0xa7, 0x4e, 0xb1, 0xa3, 0x56, + 0xe5, 0x53, 0xb9, 0xa7, 0xf2, 0xed, 0x20, 0xdf, + 0x98, 0x90, 0x73, 0x0b, 0x92, 0x34, 0x83, 0x2b, + 0xe8, 0x7f, 0xb4, 0x56, 0x84, 0xa5, 0x34, 0x04, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x05, 0x29, 0xb3, 0x5f, 0xce, 0xed, 0xbf, 0xb5, + 0xf5, 0x0a, 0x8b, 0x52, 0x9b, 0x35, 0xfc, 0xee, + 0xdb, 0xfb, 0x5f, 0x50, 0xa0, 0x9b, 0xcc, 0x3d, + 0xf6, 0x6f, 0x3b, 0xe4, 0x0b, 0x9d, 0x74, 0x66, + 0x1e, 0xfb, 0x37, 0x9d, 0xf2, 0x05, 0xce, 0x80, + 0x8d, 0xf2, 0x87, 0xe5, 0xba, 0x88, 0xdf, 0x28, + 0x7e, 0x5b, 0xa8, 0x35, 0x6d, 0x9f, 0xbc, 0x5b, + 0x7d, 0x91, 0xf0, 0xaa, 0xea, 0xb1, 0x6d, 0x9f, + 0xbc, 0x5b, 0x7d, 0x91, 0xf0, 0xaa, 0xea, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x94, + 0xd9, 0x9f, 0xe7, 0x56, 0xff, 0x00, 0xda, 0xfa, + 0xa5, 0x67, 0x32, 0xce, 0x33, 0x56, 0x5f, 0x5c, + 0xc4, 0xdb, 0x99, 0x1a, 0xc6, 0xc8, 0xe6, 0xb5, + 0xad, 0x34, 0x00, 0x03, 0xd8, 0x5c, 0x99, 0x65, + 0xf0, 0xb0, 0xbd, 0x8e, 0xeb, 0x07, 0x39, 0xcd, + 0xe2, 0xab, 0x2b, 0x86, 0xb5, 0x04, 0x6b, 0xd2, + 0xb5, 0x5d, 0x4f, 0xed, 0x17, 0x32, 0xcf, 0x4c, + 0x3c, 0xeb, 0x8b, 0xb0, 0xd6, 0xb4, 0xaf, 0x67, + 0x42, 0x09, 0x0d, 0x9a, 0x2e, 0x76, 0x79, 0x0b, + 0x9e, 0x49, 0x73, 0x8b, 0xdc, 0x5c, 0x4d, 0x49, + 0x38, 0x5d, 0xad, 0x73, 0xca, 0xe0, 0xcc, 0xe9, + 0xce, 0x76, 0xa1, 0x71, 0xa7, 0x96, 0xbc, 0x65, + 0x77, 0xde, 0xc1, 0x7c, 0xcb, 0xb2, 0xce, 0x73, + 0x9b, 0xc5, 0x46, 0xd6, 0x9a, 0xc5, 0x16, 0x9b, + 0x99, 0x8c, 0xf7, 0x12, 0xce, 0x06, 0x01, 0x23, + 0xcb, 0xc3, 0x6b, 0xa4, 0x55, 0x05, 0x8f, 0x3f, + 0xce, 0x5f, 0x65, 0x99, 0x3e, 0x2f, 0x65, 0x82, + 0x56, 0x86, 0xb5, 0xc2, 0x49, 0x1b, 0x89, 0xda, + 0x96, 0x6d, 0xee, 0x6f, 0xe6, 0xce, 0x72, 0xd7, + 0x5f, 0x43, 0x1c, 0x0d, 0x2d, 0x79, 0x84, 0x46, + 0x75, 0xb5, 0xcd, 0x14, 0xd1, 0x53, 0x45, 0xc2, + 0x73, 0xab, 0x0b, 0xa6, 0x44, 0x73, 0x2b, 0x43, + 0x3c, 0xf0, 0x80, 0x1b, 0x2b, 0x5d, 0x84, 0x38, + 0x0d, 0x58, 0x82, 0xe2, 0xbd, 0xcd, 0xae, 0x6e, + 0xaf, 0x99, 0x7a, 0x29, 0x1b, 0xa1, 0xa7, 0x32, + 0xc6, 0xea, 0x68, 0x1b, 0x88, 0x31, 0x98, 0xc5, + 0x23, 0xf3, 0x7b, 0x88, 0x40, 0xac, 0x8f, 0x99, + 0xc1, 0xa3, 0x56, 0x92, 0x74, 0x29, 0x5d, 0x9f, + 0xb3, 0x9a, 0xcb, 0x39, 0x9e, 0xde, 0x6a, 0x07, + 0xb2, 0x17, 0x57, 0x09, 0xa8, 0xd3, 0x42, 0xb5, + 0x3b, 0x3e, 0xcb, 0x5f, 0x38, 0xbf, 0x7d, 0x85, + 0x6f, 0xc0, 0xf2, 0xb1, 0xf8, 0x85, 0xc3, 0x76, + 0x8b, 0x96, 0xcb, 0x3a, 0x92, 0xdf, 0x30, 0x9a, + 0xfe, 0x66, 0x73, 0xd2, 0x4c, 0xd7, 0x34, 0x80, + 0x70, 0x8f, 0x1a, 0x9a, 0xb4, 0x1d, 0x48, 0x3d, + 0xe5, 0xf7, 0x19, 0xa6, 0x5f, 0x04, 0xd7, 0xb0, + 0x31, 0xae, 0xb3, 0x2f, 0x2c, 0x94, 0x3c, 0x82, + 0xd2, 0xea, 0xd3, 0xc9, 0x1e, 0x32, 0xeb, 0x92, + 0x3c, 0xb7, 0x37, 0xcb, 0xae, 0x6e, 0xe1, 0xb7, + 0x16, 0x97, 0x36, 0xa0, 0x3d, 0xe1, 0xa7, 0xc5, + 0x35, 0xd3, 0xfd, 0xd5, 0xc1, 0x96, 0xe6, 0xcd, + 0xb5, 0x8e, 0x6b, 0x5b, 0x88, 0x45, 0xc5, 0xa5, + 0xc1, 0xab, 0xe3, 0xad, 0x08, 0x3b, 0xe0, 0xad, + 0xb7, 0x19, 0xc5, 0xab, 0x2c, 0xa4, 0xb2, 0xcb, + 0x6d, 0xbd, 0x9e, 0x39, 0xc8, 0xe7, 0x5e, 0xf7, + 0x62, 0x71, 0x1b, 0xc8, 0x3a, 0xee, 0xdc, 0x06, + 0x4d, 0x92, 0x12, 0x74, 0x09, 0x1a, 0x78, 0x17, + 0x3e, 0xd6, 0x02, 0x33, 0x87, 0xbb, 0x71, 0xcc, + 0x65, 0x38, 0x17, 0x25, 0xde, 0x65, 0xed, 0x19, + 0x75, 0xad, 0x90, 0x8c, 0xb0, 0xda, 0xd7, 0xf5, + 0x95, 0xd7, 0xa3, 0xb4, 0xba, 0xfa, 0xe6, 0xc2, + 0xe6, 0x28, 0x9b, 0x99, 0x5a, 0x19, 0xe5, 0x80, + 0x06, 0xb6, 0x46, 0xbb, 0x0e, 0x20, 0x3e, 0x72, + 0x0e, 0xdb, 0x8f, 0x12, 0xcf, 0x21, 0x63, 0xbc, + 0xac, 0x4c, 0x24, 0x6f, 0x68, 0x51, 0x9b, 0x4b, + 0xfc, 0xea, 0xe7, 0xb6, 0xdf, 0xa8, 0xd5, 0xe6, + 0xf3, 0x38, 0x7d, 0xd6, 0x61, 0x0d, 0xd3, 0x98, + 0x1b, 0x15, 0xb9, 0x6f, 0x37, 0x08, 0x3f, 0x9a, + 0xd3, 0xbe, 0xb4, 0x66, 0x77, 0xbe, 0xdf, 0x7b, + 0x25, 0xd0, 0x67, 0x36, 0x24, 0xa7, 0x88, 0x4d, + 0x69, 0x40, 0x06, 0xf2, 0x09, 0x2d, 0xac, 0xf7, + 0xdb, 0x7f, 0xfc, 0x76, 0x78, 0x5c, 0xa3, 0xf2, + 0x69, 0x5b, 0x16, 0x6d, 0x68, 0xf7, 0x1a, 0x0e, + 0x74, 0x02, 0x4f, 0x64, 0x10, 0xbd, 0x66, 0xf9, + 0x90, 0xcc, 0xa7, 0x8e, 0x61, 0x19, 0x8b, 0x9b, + 0x8c, 0x47, 0x84, 0x9c, 0x55, 0xc2, 0x49, 0xae, + 0xae, 0xca, 0xe1, 0xd2, 0x08, 0x20, 0xd0, 0x82, + 0x08, 0xed, 0xa0, 0x92, 0xda, 0x28, 0x9d, 0x1e, + 0x73, 0x72, 0x0f, 0xe7, 0x3b, 0x18, 0xed, 0x10, + 0x0a, 0xec, 0xd1, 0x0e, 0xc8, 0x10, 0xed, 0x77, + 0x13, 0x78, 0xa3, 0xba, 0x34, 0xfd, 0x15, 0xaf, + 0xaf, 0x2c, 0x2e, 0xa3, 0x60, 0xcc, 0xec, 0xf9, + 0xf9, 0x63, 0x14, 0x12, 0xb4, 0xd0, 0x9a, 0x7c, + 0xe5, 0xc9, 0x9a, 0xe6, 0xae, 0xcc, 0x0b, 0x23, + 0x6c, 0x62, 0x1b, 0x68, 0x45, 0x23, 0x88, 0x6a, + 0x08, 0x3b, 0xfa, 0xce, 0xfb, 0x2d, 0x64, 0x76, + 0x59, 0xad, 0xb3, 0x2e, 0x21, 0x2d, 0xc4, 0xd6, + 0xb8, 0x82, 0xe0, 0xdf, 0x38, 0x55, 0x75, 0xc1, + 0x67, 0x63, 0x06, 0x6b, 0x96, 0xdf, 0x5a, 0x02, + 0xc8, 0x6f, 0x31, 0x52, 0x33, 0xb8, 0x70, 0xee, + 0x28, 0xee, 0xb9, 0xb1, 0xba, 0xb7, 0x8a, 0x2c, + 0xd2, 0xd4, 0xcf, 0x24, 0x0d, 0xc2, 0xc9, 0x5a, + 0xe2, 0xd2, 0x47, 0x65, 0x68, 0xbf, 0xce, 0x65, + 0xb8, 0xb9, 0x82, 0x48, 0x1a, 0x2d, 0xe3, 0xb4, + 0xa7, 0xb3, 0xb0, 0x69, 0xa5, 0x37, 0xd0, 0x6b, + 0xcc, 0xe3, 0x91, 0xf9, 0xc5, 0xc4, 0x6d, 0x15, + 0x7c, 0x93, 0xb8, 0x30, 0x1d, 0xf7, 0x3b, 0x42, + 0x94, 0xd9, 0xfb, 0x39, 0xac, 0xb3, 0xb9, 0x6d, + 0xa7, 0x00, 0x48, 0xd8, 0x49, 0x20, 0x1a, 0x8d, + 0x20, 0x15, 0xa9, 0xd9, 0xee, 0x5a, 0xf9, 0xc5, + 0xf4, 0x96, 0x15, 0xbe, 0x1a, 0x71, 0x07, 0x78, + 0x85, 0xc3, 0x51, 0x2d, 0x5c, 0xd6, 0x59, 0xdc, + 0x96, 0xf9, 0x8c, 0xb7, 0xf3, 0x33, 0x9d, 0x7c, + 0xc1, 0xc1, 0xcd, 0x07, 0x0e, 0xbd, 0x5b, 0xfa, + 0x82, 0x0e, 0xbc, 0x8f, 0xf9, 0x7e, 0x6f, 0xe6, + 0x7c, 0x8e, 0x5e, 0x21, 0xff, 0x00, 0x48, 0x4e, + 0x45, 0x3d, 0xe0, 0x52, 0xbd, 0xa6, 0x2e, 0x3b, + 0x1c, 0xcc, 0x5a, 0x5b, 0xde, 0x40, 0x63, 0xc7, + 0xed, 0x6d, 0xc3, 0x8b, 0x15, 0x30, 0xeb, 0xfe, + 0xae, 0x9d, 0x6b, 0x0c, 0xcc, 0x43, 0x72, 0x79, + 0x32, 0xce, 0x6e, 0xa6, 0x49, 0x04, 0x9c, 0xed, + 0x69, 0x4d, 0x00, 0x53, 0x0d, 0x3b, 0x08, 0x24, + 0x27, 0x8e, 0xc3, 0x25, 0xb4, 0xb6, 0x7f, 0xb3, + 0xb6, 0xea, 0xee, 0xe1, 0xbc, 0xe1, 0x74, 0xb5, + 0x2d, 0x02, 0x9b, 0x81, 0x7a, 0xce, 0xae, 0x24, + 0xb9, 0xc8, 0x2c, 0x26, 0x93, 0x08, 0x7c, 0x92, + 0x38, 0x90, 0xd1, 0x41, 0x4a, 0x3e, 0x80, 0x2e, + 0x71, 0x9d, 0x59, 0x5c, 0x59, 0xc3, 0x0e, 0x65, + 0x69, 0xcf, 0xcb, 0x6e, 0x30, 0xc6, 0xf6, 0xbb, + 0x0e, 0x80, 0x37, 0x68, 0xbc, 0xde, 0xe7, 0x91, + 0x5e, 0xe5, 0xfe, 0xcb, 0x2d, 0xa8, 0x6b, 0xa3, + 0x24, 0xdb, 0x96, 0x1a, 0x35, 0x9b, 0x80, 0x61, + 0xa6, 0x9a, 0x35, 0x06, 0xec, 0xe0, 0xff, 0x00, + 0xf5, 0xfc, 0xaf, 0xb4, 0xed, 0x1d, 0xc2, 0xb3, + 0xb5, 0x3e, 0x33, 0x72, 0xf7, 0x83, 0xe2, 0x98, + 0x0d, 0x0f, 0x25, 0x69, 0x8f, 0x3a, 0xb6, 0x76, + 0x5a, 0xcb, 0x1b, 0xbb, 0x41, 0x39, 0x84, 0x11, + 0x14, 0x98, 0xb5, 0x54, 0x68, 0x34, 0xc2, 0xbc, + 0xdb, 0xe6, 0xf6, 0xcf, 0xb2, 0x65, 0x96, 0x65, + 0x6e, 0x6e, 0x23, 0x84, 0xd6, 0x27, 0xb5, 0xd8, + 0x5c, 0x3b, 0x08, 0x37, 0xc8, 0x43, 0x76, 0x3d, + 0xa0, 0xe8, 0x32, 0x4f, 0x56, 0x8e, 0xef, 0xf4, + 0x26, 0xd7, 0x7f, 0x30, 0x87, 0xec, 0x1b, 0xe1, + 0x72, 0xe3, 0xcd, 0x73, 0x5f, 0x6d, 0x64, 0x76, + 0xf0, 0x47, 0xec, 0xf6, 0xb0, 0x68, 0x8e, 0x30, + 0x74, 0xf6, 0xc9, 0x5e, 0x73, 0x7c, 0xcc, 0x66, + 0x53, 0xb2, 0x61, 0x19, 0x8b, 0x03, 0x03, 0x08, + 0x26, 0xb5, 0xa6, 0xee, 0xa4, 0x1c, 0x28, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0xbb, 0xb2, + 0x3f, 0xe7, 0x16, 0x9f, 0x69, 0xf2, 0x15, 0xc2, + 0xbb, 0xb2, 0x3f, 0xe7, 0x16, 0x9f, 0x69, 0xf2, + 0x14, 0x16, 0x3c, 0xd3, 0xdf, 0x64, 0xee, 0x78, + 0x17, 0x2a, 0xea, 0xcd, 0x3d, 0xf5, 0xfd, 0xcf, + 0x02, 0xe5, 0x41, 0xee, 0xdf, 0xde, 0x23, 0xf3, + 0x9b, 0xe1, 0x53, 0xca, 0x06, 0xdf, 0xde, 0x23, + 0xf3, 0x9b, 0xe1, 0x53, 0xc8, 0x0a, 0x2f, 0x37, + 0xf7, 0x9b, 0x2f, 0x3f, 0xe5, 0x0a, 0x51, 0x45, + 0xe6, 0xfe, 0xf3, 0x65, 0xe7, 0xfc, 0xa1, 0x03, + 0x28, 0xf7, 0x9b, 0xdf, 0xb4, 0x3f, 0x58, 0xa9, + 0x45, 0x17, 0x94, 0x7b, 0xcd, 0xef, 0xda, 0x1f, + 0xac, 0x54, 0xa2, 0x02, 0x22, 0x20, 0xf4, 0xdf, + 0x24, 0xaf, 0x87, 0x5e, 0xfb, 0xe5, 0xc7, 0xda, + 0xbf, 0xeb, 0x15, 0xf7, 0x16, 0xf9, 0x25, 0x7c, + 0x3a, 0xf7, 0xdf, 0x2e, 0x3e, 0xd5, 0xff, 0x00, + 0x58, 0xac, 0x9e, 0x6f, 0xc2, 0x8f, 0xa0, 0xfe, + 0xdb, 0xfb, 0xfc, 0xc7, 0xc3, 0x1f, 0xf9, 0xb4, + 0xa2, 0x22, 0xc8, 0xfa, 0x41, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x06, 0xc8, + 0x67, 0x92, 0x09, 0x99, 0x3c, 0x2e, 0x2c, 0x92, + 0x37, 0x07, 0xb1, 0xc3, 0x5b, 0x48, 0xd4, 0x57, + 0xd1, 0x72, 0xcd, 0xbc, 0xc9, 0x2f, 0xed, 0x5b, + 0x06, 0x72, 0xd1, 0x04, 0xd4, 0xa4, 0x82, 0x46, + 0xe3, 0x89, 0xd4, 0xdd, 0x04, 0xd6, 0x95, 0x5f, + 0x36, 0x5e, 0x85, 0x06, 0x95, 0x7c, 0x79, 0x6d, + 0x8f, 0x5d, 0x3d, 0xbe, 0x2c, 0x7e, 0x77, 0xf9, + 0x7e, 0x2f, 0x35, 0x15, 0xdf, 0xf4, 0xda, 0x9a, + 0xcc, 0x5e, 0xbc, 0x26, 0x35, 0x7d, 0x32, 0xf3, + 0x6e, 0x36, 0x73, 0x2d, 0xb6, 0x2c, 0xcb, 0x1a, + 0x26, 0x92, 0x9e, 0x24, 0x51, 0x33, 0x04, 0x7d, + 0xb7, 0x3b, 0x42, 0xf9, 0xcd, 0xdd, 0xed, 0xc5, + 0xe5, 0xdc, 0x97, 0xb3, 0x3c, 0x99, 0xe6, 0x79, + 0x7b, 0x8e, 0xf1, 0x3a, 0xa9, 0xd8, 0x0b, 0x41, + 0x20, 0xe8, 0xa2, 0xc5, 0x0a, 0x9c, 0x99, 0xad, + 0x7d, 0x3d, 0x91, 0x1e, 0xc8, 0x57, 0xc9, 0xff, + 0x00, 0x2d, 0xc3, 0xe5, 0x77, 0x4d, 0x35, 0xc9, + 0x6b, 0xf8, 0xde, 0xd3, 0xc5, 0xf4, 0x3c, 0xab, + 0x6d, 0xf2, 0x5b, 0xfc, 0xbf, 0xd8, 0xb3, 0xe0, + 0x1b, 0x25, 0x30, 0xc8, 0x64, 0x6e, 0x28, 0xe4, + 0x03, 0x53, 0xbb, 0x0e, 0x59, 0xcc, 0x36, 0xcf, + 0x21, 0xca, 0xec, 0x1d, 0x6b, 0x90, 0xb5, 0xaf, + 0x94, 0xf9, 0x02, 0x26, 0xe1, 0x8d, 0xa4, 0xfe, + 0x73, 0xbb, 0x8b, 0xe7, 0x80, 0x8d, 0x44, 0x55, + 0x0b, 0x95, 0xbd, 0x4d, 0xf4, 0xd3, 0x48, 0xd7, + 0xc3, 0x57, 0x0f, 0xe8, 0xbe, 0x5b, 0xb9, 0xbb, + 0x7d, 0xa2, 0x9b, 0xbb, 0x93, 0x87, 0x5f, 0xa3, + 0x5f, 0x82, 0x6b, 0x65, 0xb3, 0x5b, 0x6c, 0xbb, + 0x3d, 0x66, 0x61, 0x7d, 0x23, 0x84, 0x74, 0x90, + 0xbd, 0xf4, 0x2e, 0x25, 0xcf, 0x07, 0x71, 0xb5, + 0xd6, 0x4a, 0xf7, 0xb6, 0x59, 0xbd, 0x8e, 0x6f, + 0x9b, 0xfb, 0x55, 0x8b, 0x9c, 0xf8, 0xb9, 0xa6, + 0xb2, 0xae, 0x69, 0x69, 0xa8, 0xae, 0xe3, 0xbb, + 0x6a, 0x08, 0x3b, 0x7f, 0x4a, 0x03, 0xa6, 0xab, + 0x9f, 0x72, 0x76, 0x6c, 0xf6, 0x6b, 0xab, 0x64, + 0x79, 0x4c, 0x7e, 0xa6, 0x3c, 0xcd, 0x66, 0x62, + 0xd1, 0x4e, 0xd6, 0x9e, 0xc8, 0xaf, 0xc1, 0x62, + 0xd8, 0x9c, 0xfe, 0xd3, 0x25, 0xcc, 0x24, 0x75, + 0xe1, 0x2d, 0x82, 0xe2, 0x30, 0xc2, 0xf0, 0x2b, + 0x85, 0xcd, 0x75, 0x5a, 0x4d, 0x37, 0x17, 0x76, + 0xdb, 0x66, 0x9b, 0x3b, 0x79, 0x0b, 0x24, 0xcb, + 0x5c, 0xc3, 0x7c, 0x66, 0x12, 0x4b, 0x24, 0x6d, + 0xa1, 0x70, 0x00, 0xe9, 0x2e, 0xdd, 0xd3, 0x45, + 0x4f, 0x3a, 0xd0, 0x10, 0x05, 0x06, 0xad, 0xe5, + 0x68, 0xcd, 0x31, 0x4d, 0x9a, 0x70, 0x73, 0xbf, + 0xf2, 0xea, 0x5b, 0xcd, 0xc7, 0x9a, 0xdd, 0x35, + 0xb4, 0x46, 0x93, 0x11, 0x3c, 0x27, 0x4e, 0x1c, + 0x5f, 0x42, 0xcb, 0xf6, 0xc7, 0x20, 0xcd, 0xb2, + 0xc6, 0x59, 0x6d, 0x0b, 0x43, 0x65, 0x68, 0x02, + 0x4e, 0x70, 0x12, 0xc7, 0x16, 0xea, 0x7b, 0x5c, + 0x35, 0x15, 0xaf, 0x36, 0xda, 0xfc, 0x93, 0x2f, + 0xcb, 0x5d, 0x97, 0x6c, 0xff, 0x00, 0x94, 0xe6, + 0x96, 0x34, 0xc6, 0x29, 0x1c, 0x61, 0xde, 0x53, + 0x83, 0xb7, 0x4a, 0xa0, 0xd5, 0x09, 0x14, 0xa5, + 0x15, 0xbd, 0x4d, 0xf4, 0xd3, 0x48, 0xd7, 0xc3, + 0x77, 0xb5, 0x9a, 0x3f, 0x92, 0xf9, 0x6e, 0xe4, + 0x5a, 0x6f, 0x6b, 0x52, 0x2d, 0xbe, 0x31, 0x4c, + 0xfd, 0x1b, 0xbe, 0x0b, 0x76, 0xc6, 0x67, 0x1b, + 0x3d, 0x93, 0x32, 0x5b, 0x9b, 0xf9, 0x5c, 0x2f, + 0x65, 0xf1, 0x1a, 0xd1, 0x1b, 0x9d, 0x86, 0x31, + 0xa7, 0x58, 0x14, 0xab, 0x8a, 0xe6, 0x83, 0x6c, + 0x25, 0x6e, 0xd4, 0xbb, 0x37, 0x7d, 0x45, 0xac, + 0x87, 0x9a, 0x7b, 0x06, 0x9f, 0xd4, 0x7e, 0x6e, + 0x8d, 0xf1, 0xad, 0x56, 0xb5, 0x2c, 0x97, 0x76, + 0x15, 0x3b, 0xd6, 0xdb, 0x15, 0xe5, 0x3a, 0xb4, + 0x4f, 0xf2, 0xdc, 0x36, 0xc9, 0x9b, 0x2e, 0x49, + 0x9b, 0x5b, 0x3d, 0x76, 0x4e, 0xbf, 0xab, 0x5e, + 0x55, 0xf9, 0x2d, 0x3b, 0x67, 0x9b, 0x6c, 0xfe, + 0x70, 0x61, 0xbc, 0xb0, 0x95, 0xc6, 0xf2, 0x21, + 0xcd, 0xc8, 0xd3, 0x1b, 0xd9, 0x89, 0x87, 0x51, + 0xab, 0x9b, 0xa4, 0x85, 0x55, 0x3a, 0xd2, 0xab, + 0x05, 0x45, 0xef, 0x37, 0xb6, 0xe9, 0xe1, 0xf0, + 0x76, 0xf2, 0xbe, 0x5a, 0x3c, 0xbe, 0x18, 0xc5, + 0x59, 0x9b, 0x56, 0xb3, 0xad, 0x77, 0x71, 0x91, + 0x11, 0x15, 0x1a, 0x19, 0xa8, 0xae, 0xea, 0xea, + 0xca, 0xe7, 0x8e, 0xdf, 0x32, 0xb4, 0x9e, 0x53, + 0x48, 0xe2, 0x99, 0x8f, 0x79, 0xa5, 0x74, 0x03, + 0x53, 0xa1, 0x72, 0x2c, 0x83, 0x45, 0x31, 0x3a, + 0x4c, 0x4f, 0x25, 0x6f, 0x58, 0xb5, 0x6d, 0x5f, + 0x08, 0xb4, 0x4c, 0x4f, 0xff, 0x00, 0xc9, 0x6b, + 0xdb, 0x9d, 0xa2, 0xcb, 0x33, 0x9f, 0x63, 0x39, + 0x74, 0x8e, 0x7f, 0x31, 0xce, 0x63, 0x2e, 0x63, + 0x9b, 0x42, 0xec, 0x18, 0x69, 0x88, 0x7f, 0x54, + 0xa9, 0x8b, 0xdd, 0xba, 0xca, 0x26, 0xd9, 0xe9, + 0x6d, 0xa2, 0x95, 0xe2, 0xfd, 0xf6, 0xdc, 0xd8, + 0x61, 0x63, 0x85, 0x1e, 0x5b, 0x84, 0xf8, 0xd4, + 0xa2, 0xf9, 0xe5, 0x7b, 0x09, 0x8b, 0x42, 0xeb, + 0x19, 0xed, 0x13, 0x6b, 0x75, 0x78, 0xbc, 0xf9, + 0xfe, 0x51, 0x82, 0x71, 0xe1, 0xc7, 0x36, 0xb6, + 0xdc, 0x16, 0x9b, 0x57, 0x9f, 0x19, 0xd6, 0x75, + 0x5c, 0xb6, 0x1f, 0x69, 0x72, 0x7c, 0x96, 0xc6, + 0xe6, 0x1b, 0xf9, 0x5d, 0x1b, 0xe4, 0x93, 0x1b, + 0x28, 0xc7, 0x38, 0x53, 0x08, 0x6e, 0xb6, 0x83, + 0xbc, 0xaa, 0x33, 0xc8, 0xd7, 0xcd, 0x23, 0xc6, + 0x9c, 0x4f, 0x71, 0x69, 0xec, 0x13, 0x51, 0xad, + 0x6b, 0x05, 0x61, 0x52, 0xd9, 0x26, 0xd5, 0xad, + 0x7d, 0x94, 0xf0, 0xfc, 0x5a, 0x70, 0xf9, 0x5a, + 0x63, 0xcd, 0x9b, 0x35, 0x6d, 0x33, 0x39, 0xf4, + 0xdd, 0x1f, 0xb3, 0xc9, 0x29, 0xb3, 0x57, 0xb6, + 0xb6, 0x19, 0xdd, 0xad, 0xe5, 0xd1, 0x2d, 0x86, + 0x12, 0x4b, 0xdc, 0x01, 0x71, 0xd5, 0x4d, 0x41, + 0x76, 0x6d, 0xae, 0x6f, 0x97, 0xe7, 0x19, 0xac, + 0x57, 0x76, 0x0e, 0x32, 0x31, 0x90, 0x08, 0xf1, + 0x16, 0x96, 0x90, 0xec, 0x4e, 0x27, 0xca, 0x15, + 0xdd, 0x50, 0x15, 0x42, 0xa6, 0x32, 0x4c, 0x52, + 0x69, 0xec, 0x9e, 0x25, 0xbc, 0x9d, 0x2d, 0xe6, + 0x6b, 0xe6, 0x66, 0x67, 0x75, 0x2b, 0xb2, 0x39, + 0x7c, 0x7e, 0x21, 0x20, 0xac, 0x22, 0x2e, 0x6d, + 0x22, 0x22, 0x29, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x05, 0x91, 0xad, 0x61, 0x64, 0x6b, 0x41, 0x91, + 0xb9, 0xda, 0x5f, 0x6f, 0xb3, 0xfe, 0x5b, 0x6d, + 0xf6, 0x4c, 0xfa, 0xa1, 0x7c, 0x3c, 0x6e, 0x77, + 0x17, 0xdc, 0x2d, 0x3f, 0x96, 0xda, 0xfd, 0x93, + 0x3e, 0xa8, 0x5a, 0x7c, 0x9f, 0xdd, 0x77, 0xcf, + 0xff, 0x00, 0x71, 0xfd, 0x98, 0x3f, 0x6a, 0xff, + 0x00, 0xa2, 0xad, 0x83, 0x5a, 0xaf, 0xbb, 0xca, + 0x3d, 0xb2, 0xac, 0x03, 0x5a, 0xaf, 0xbb, 0xca, + 0x3d, 0xb2, 0xb6, 0xbe, 0x6d, 0x85, 0xea, 0x2f, + 0xdb, 0x47, 0xe7, 0xb7, 0xc2, 0x17, 0x95, 0xea, + 0x2f, 0xda, 0xb3, 0xce, 0x6f, 0x84, 0x20, 0xec, + 0xce, 0x72, 0xcc, 0xae, 0xf2, 0xed, 0xb2, 0x5e, + 0xdd, 0x1b, 0x79, 0x03, 0x00, 0x6b, 0x71, 0x34, + 0x68, 0xa9, 0xf9, 0xc0, 0xae, 0x0f, 0x87, 0xf6, + 0x77, 0xef, 0x13, 0xcb, 0x8f, 0xd1, 0x5a, 0x76, + 0xc3, 0xf9, 0x94, 0x7f, 0x64, 0x3e, 0xb3, 0x94, + 0x12, 0x0b, 0x1f, 0xc3, 0xfb, 0x3b, 0xf7, 0x89, + 0xe5, 0xc7, 0xe8, 0xa7, 0xc3, 0xfb, 0x3b, 0xf7, + 0x89, 0xe5, 0xc7, 0xe8, 0xaa, 0xe2, 0x20, 0xb1, + 0xfc, 0x3f, 0xb3, 0xbf, 0x78, 0x9e, 0x5c, 0x7e, + 0x8a, 0x7c, 0x3f, 0xb3, 0xbf, 0x78, 0x9e, 0x5c, + 0x7e, 0x8a, 0xae, 0x22, 0x0b, 0x1f, 0xc3, 0xfb, + 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, 0xa7, 0xc3, + 0xfb, 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, 0xaa, + 0xe2, 0x68, 0xd6, 0x50, 0x58, 0xfe, 0x1f, 0xd9, + 0xdf, 0xbc, 0x4f, 0x2e, 0x3f, 0x45, 0x3e, 0x1f, + 0xd9, 0xdf, 0xbc, 0x4f, 0x2e, 0x3f, 0x45, 0x42, + 0x5d, 0x65, 0xf7, 0x36, 0x91, 0x43, 0x2c, 0xcd, + 0x01, 0xb7, 0x0d, 0xc5, 0x1d, 0x0d, 0x74, 0x50, + 0x1f, 0x95, 0x66, 0xd7, 0x2f, 0xb9, 0xbb, 0x8e, + 0x69, 0x20, 0x68, 0x2d, 0x81, 0xb8, 0xa4, 0xa9, + 0xa6, 0x8a, 0x13, 0xf2, 0x20, 0x9a, 0xf8, 0x7f, + 0x67, 0x7e, 0xf1, 0x3c, 0xb8, 0xfd, 0x14, 0xf8, + 0x7f, 0x67, 0x7e, 0xf1, 0x3c, 0xb8, 0xfd, 0x15, + 0x5c, 0xd0, 0x74, 0x8d, 0x48, 0x82, 0xc7, 0xf0, + 0xfe, 0xce, 0xfd, 0xe2, 0x79, 0x71, 0xfa, 0x29, + 0xf0, 0xfe, 0xce, 0xfd, 0xe2, 0x79, 0x71, 0xfa, + 0x2a, 0xb8, 0xb6, 0x8b, 0x4b, 0x83, 0x6c, 0x6e, + 0xf9, 0xb3, 0xcc, 0x07, 0x60, 0x32, 0x68, 0xa5, + 0x50, 0x4f, 0x7c, 0x3f, 0xb3, 0xbf, 0x78, 0x9e, + 0x5c, 0x7e, 0x8a, 0x7c, 0x3f, 0xb3, 0xbf, 0x78, + 0x9e, 0x5c, 0x7e, 0x8a, 0xae, 0x22, 0x0b, 0x1f, + 0xc3, 0xfb, 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, + 0xa7, 0xc3, 0xfb, 0x3b, 0xf7, 0x89, 0xe5, 0xc7, + 0xe8, 0xaa, 0xe2, 0xea, 0xb3, 0xca, 0xef, 0xef, + 0x81, 0x36, 0xb0, 0x99, 0x1a, 0x34, 0x17, 0x68, + 0x02, 0xbd, 0xb7, 0x51, 0x04, 0xcf, 0xc3, 0xfb, + 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, 0xa7, 0xc3, + 0xfb, 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, 0xa8, + 0x4b, 0xcc, 0xba, 0xf2, 0xc5, 0xc1, 0xb7, 0x51, + 0x16, 0x57, 0x40, 0x76, 0x82, 0xde, 0x10, 0xbd, + 0x5b, 0x65, 0x77, 0xf7, 0x51, 0x73, 0xb6, 0xf0, + 0x3a, 0x46, 0x02, 0x45, 0x45, 0x35, 0x84, 0x13, + 0x3f, 0x0f, 0xec, 0xef, 0xde, 0x27, 0x97, 0x1f, + 0xa2, 0x9f, 0x0f, 0xec, 0xef, 0xde, 0x27, 0x97, + 0x1f, 0xa2, 0xa1, 0xee, 0x72, 0xac, 0xc2, 0xd2, + 0x2e, 0x7a, 0xe2, 0x03, 0x1c, 0x75, 0x03, 0x11, + 0xa6, 0xb2, 0xbc, 0xd9, 0xe5, 0xd7, 0x97, 0xd5, + 0xf6, 0x58, 0x8c, 0x81, 0xba, 0x1c, 0xed, 0x40, + 0x1e, 0xc9, 0x28, 0x26, 0xbe, 0x1f, 0xd9, 0xdf, + 0xbc, 0x4f, 0x2e, 0x3f, 0x45, 0x3e, 0x1f, 0xd9, + 0xdf, 0xbc, 0x4f, 0x2e, 0x3f, 0x45, 0x42, 0x5e, + 0x65, 0xd7, 0x96, 0x24, 0x0b, 0x98, 0x8c, 0x61, + 0xda, 0x9d, 0xa0, 0xb4, 0xf6, 0x88, 0x5c, 0xfa, + 0x37, 0x50, 0x58, 0xfe, 0x1f, 0xd9, 0xdf, 0xbc, + 0x4f, 0x2e, 0x3f, 0x45, 0x3e, 0x1f, 0xd9, 0xdf, + 0xbc, 0x4f, 0x2e, 0x3f, 0x45, 0x42, 0x4f, 0x97, + 0xdc, 0xdb, 0xdb, 0x43, 0x75, 0x2b, 0x40, 0x8a, + 0xe3, 0xf6, 0x66, 0xb5, 0x26, 0x9d, 0x85, 0x9b, + 0x5c, 0xba, 0xea, 0xed, 0x92, 0x49, 0x0b, 0x47, + 0x37, 0x08, 0xac, 0x8f, 0x71, 0x0d, 0x68, 0xee, + 0x94, 0x13, 0x5f, 0x0f, 0xec, 0xef, 0xde, 0x27, + 0x97, 0x1f, 0xa2, 0x9f, 0x0f, 0xec, 0xef, 0xde, + 0x27, 0x97, 0x1f, 0xa2, 0xa2, 0xed, 0x72, 0x2c, + 0xc2, 0xee, 0xdd, 0xb7, 0x10, 0xb1, 0xa6, 0x37, + 0xd6, 0x84, 0xbd, 0xa3, 0x57, 0x75, 0x62, 0xef, + 0x24, 0xcc, 0xad, 0x23, 0xe7, 0x66, 0x8a, 0xb1, + 0x8d, 0x6e, 0x61, 0x0e, 0xa7, 0x6e, 0x88, 0x25, + 0x7e, 0x1f, 0xd9, 0xdf, 0xbc, 0x4f, 0x2e, 0x3f, + 0x45, 0x3e, 0x1f, 0xd9, 0xdf, 0xbc, 0x4f, 0x2e, + 0x3f, 0x45, 0x57, 0x34, 0x2e, 0x8b, 0x2c, 0xbe, + 0xea, 0xfa, 0x43, 0x1d, 0xb3, 0x31, 0x11, 0xa5, + 0xce, 0x3a, 0x1a, 0x3b, 0x65, 0x04, 0xdf, 0xc3, + 0xfb, 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, 0xa7, + 0xc3, 0xfb, 0x3b, 0xf7, 0x89, 0xe5, 0xc7, 0xe8, + 0xa8, 0xfb, 0x8d, 0x9d, 0xcc, 0x21, 0x89, 0xd2, + 0xb4, 0x32, 0x66, 0xb3, 0xca, 0x11, 0xb8, 0x38, + 0x8e, 0xe2, 0xe6, 0xb1, 0xcb, 0x2e, 0xf3, 0x02, + 0xff, 0x00, 0x66, 0x68, 0x70, 0x8a, 0x98, 0xf1, + 0x10, 0xda, 0x57, 0xb6, 0x82, 0x67, 0xe1, 0xfd, + 0x9d, 0xfb, 0xc4, 0xf2, 0xe3, 0xf4, 0x53, 0xe1, + 0xfd, 0x9d, 0xfb, 0xc4, 0xf2, 0xe3, 0xf4, 0x54, + 0x7b, 0xb6, 0x6f, 0x36, 0x6b, 0x4b, 0xb9, 0xa6, + 0xba, 0x9a, 0xc3, 0x5c, 0xd2, 0x7b, 0xca, 0x35, + 0xcd, 0x2d, 0x34, 0x20, 0x87, 0x02, 0x41, 0x69, + 0x14, 0x35, 0x08, 0x2c, 0x5f, 0x0f, 0xec, 0xef, + 0xde, 0x27, 0x97, 0x1f, 0xa2, 0x9f, 0x0f, 0xec, + 0xef, 0xde, 0x27, 0x97, 0x1f, 0xa2, 0xa2, 0x46, + 0x4f, 0x7c, 0x6c, 0x7d, 0xbc, 0x30, 0x7b, 0x3e, + 0x1c, 0x58, 0xaa, 0x2b, 0x86, 0xb4, 0x26, 0x8b, + 0x9e, 0xd6, 0xda, 0x5b, 0xb9, 0xd9, 0x6f, 0x0b, + 0x6b, 0x23, 0xea, 0x1a, 0x0d, 0x00, 0xa8, 0x05, + 0xc7, 0xc0, 0x82, 0x7b, 0xe1, 0xfd, 0x9d, 0xfb, + 0xc4, 0xf2, 0xe3, 0xf4, 0x53, 0xe1, 0xfd, 0x9d, + 0xfb, 0xc4, 0xf2, 0xe3, 0xf4, 0x54, 0x35, 0xfe, + 0x5b, 0x75, 0x97, 0xc8, 0xd8, 0xee, 0x5a, 0x03, + 0x9e, 0x09, 0x6e, 0x12, 0x0e, 0x80, 0xb1, 0x61, + 0x97, 0x5d, 0xe6, 0x0f, 0x73, 0x2d, 0x98, 0x1c, + 0x58, 0x01, 0x75, 0x4d, 0x35, 0x9a, 0x20, 0x9a, + 0xf8, 0x7f, 0x67, 0x7e, 0xf1, 0x3c, 0xb8, 0xfd, + 0x14, 0xf8, 0x7f, 0x67, 0x7e, 0xf1, 0x3c, 0xb8, + 0xfd, 0x15, 0x03, 0x75, 0x6b, 0x2d, 0xa4, 0xef, + 0xb7, 0x98, 0x01, 0x23, 0x35, 0x81, 0xa7, 0x58, + 0xaa, 0xd4, 0x82, 0xc7, 0xf0, 0xfe, 0xce, 0xfd, + 0xe2, 0x79, 0x71, 0xfa, 0x29, 0xf0, 0xfe, 0xce, + 0xfd, 0xe2, 0x79, 0x71, 0xfa, 0x2a, 0xb8, 0x88, + 0x2c, 0x7f, 0x0f, 0xec, 0xef, 0xde, 0x27, 0x97, + 0x1f, 0xa2, 0x9f, 0x0f, 0xec, 0xef, 0xde, 0x27, + 0x97, 0x1f, 0xa2, 0xab, 0x88, 0x82, 0xc7, 0xf0, + 0xfe, 0xce, 0xfd, 0xe2, 0x79, 0x71, 0xfa, 0x2b, + 0xa7, 0x2b, 0xca, 0x32, 0x6b, 0x6b, 0xe8, 0xa6, + 0xb5, 0xbd, 0x33, 0x4a, 0xd2, 0x70, 0x30, 0xb9, + 0x86, 0xb5, 0x69, 0x07, 0x40, 0x6d, 0x55, 0x4d, + 0x49, 0x6c, 0xd8, 0x1d, 0x73, 0x6f, 0xa3, 0x4f, + 0x8d, 0xf5, 0x4a, 0x09, 0xac, 0xc3, 0xdf, 0x66, + 0xf3, 0xbe, 0x40, 0xb9, 0xd7, 0x46, 0x61, 0xef, + 0xb3, 0x79, 0xdf, 0x20, 0x5c, 0xe8, 0x08, 0x3c, + 0xa1, 0xdb, 0x1e, 0x14, 0x4f, 0x08, 0xd4, 0x81, + 0xb5, 0xb6, 0x97, 0x57, 0x17, 0x16, 0xe6, 0x08, + 0x5f, 0x20, 0x6c, 0x47, 0x11, 0x68, 0x24, 0x0a, + 0x95, 0x05, 0xd5, 0x79, 0x99, 0xff, 0x00, 0xf6, + 0x93, 0x72, 0x0a, 0xb5, 0x67, 0xb9, 0xad, 0xdd, + 0x85, 0xa5, 0xac, 0xb6, 0xe5, 0xa1, 0xf2, 0xd7, + 0x19, 0x70, 0xae, 0xa6, 0xa8, 0x43, 0xb5, 0x99, + 0xbf, 0xce, 0x67, 0x24, 0x27, 0xe0, 0x89, 0xe5, + 0xc7, 0xe3, 0x11, 0xab, 0x83, 0xaa, 0xb3, 0x3e, + 0x89, 0x37, 0x20, 0xa7, 0x55, 0x66, 0x7d, 0x12, + 0x6e, 0x41, 0x5d, 0xff, 0x00, 0x16, 0xe6, 0xff, + 0x00, 0x39, 0x9c, 0x90, 0x9f, 0x16, 0xe6, 0xff, + 0x00, 0x39, 0x9c, 0x90, 0x89, 0xd2, 0x7a, 0x6d, + 0xf2, 0x70, 0x75, 0x5e, 0x67, 0xd1, 0x66, 0xe4, + 0x14, 0xea, 0xac, 0xcf, 0xa2, 0x4d, 0xc8, 0x2b, + 0xbb, 0xe2, 0xcc, 0xdf, 0xe7, 0x47, 0xc9, 0x0b, + 0x23, 0x6b, 0x33, 0x7a, 0x57, 0x14, 0x7c, 0x80, + 0xa4, 0xe2, 0xe0, 0xea, 0xac, 0xcf, 0xa2, 0x4d, + 0xc8, 0x29, 0xd5, 0x59, 0x9f, 0x44, 0x9b, 0x90, + 0x57, 0x7f, 0xc5, 0x99, 0xc7, 0xce, 0x8f, 0x92, + 0x13, 0xe2, 0xcc, 0xe3, 0xe7, 0xc7, 0xc8, 0x50, + 0x38, 0x3a, 0xab, 0x33, 0xe8, 0x93, 0x72, 0x0a, + 0x75, 0x56, 0x67, 0xd1, 0x26, 0xe4, 0x15, 0xdf, + 0xf1, 0x66, 0x71, 0xf3, 0x99, 0xc8, 0x09, 0xf1, + 0x6e, 0x71, 0xf3, 0x99, 0xc8, 0x08, 0x38, 0x3a, + 0xab, 0x33, 0xe8, 0x93, 0x72, 0x0a, 0x75, 0x56, + 0x67, 0xd1, 0x26, 0xe4, 0x15, 0xdf, 0xf1, 0x66, + 0x71, 0xf3, 0x99, 0xc8, 0x09, 0xf1, 0x66, 0x71, + 0xf3, 0x99, 0xc8, 0x41, 0xc1, 0xd5, 0x59, 0x9f, + 0x44, 0x9b, 0x90, 0x53, 0xaa, 0xb3, 0x3e, 0x89, + 0x37, 0x20, 0xae, 0xff, 0x00, 0x8b, 0x73, 0x8f, + 0x9c, 0xce, 0x40, 0x4f, 0x8b, 0x73, 0x8f, 0x9c, + 0xce, 0x40, 0x41, 0xc1, 0xd5, 0x59, 0x9f, 0x44, + 0x9b, 0x90, 0x53, 0xaa, 0xb3, 0x3e, 0x89, 0x37, + 0x20, 0xae, 0xff, 0x00, 0x8b, 0x73, 0x8f, 0x9c, + 0xce, 0x40, 0x4f, 0x8b, 0x73, 0x8f, 0x9c, 0xce, + 0x40, 0x41, 0xc1, 0xd5, 0x59, 0x9f, 0x44, 0x9b, + 0x90, 0x53, 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, + 0xae, 0xff, 0x00, 0x8b, 0x73, 0x8f, 0x9c, 0xce, + 0x40, 0x4f, 0x8b, 0x73, 0x8f, 0x9c, 0xce, 0x40, + 0x41, 0xc1, 0xd5, 0x59, 0x9f, 0x44, 0x9b, 0x90, + 0x53, 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xae, + 0xf3, 0xb5, 0x99, 0xc0, 0xd3, 0x89, 0x9c, 0x80, + 0x9f, 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x90, 0x83, + 0x83, 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, + 0x55, 0x66, 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, + 0x00, 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x9f, + 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x83, 0x83, + 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, + 0x66, 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, + 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x9f, 0x16, + 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x83, 0x83, 0xaa, + 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, 0x66, + 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, 0x16, + 0xe6, 0xfb, 0xaf, 0x67, 0x71, 0x81, 0x3e, 0x2d, + 0xce, 0x3e, 0x74, 0x7c, 0x80, 0x83, 0x83, 0xaa, + 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, 0x66, + 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, 0x16, + 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x9f, 0x16, 0xe7, + 0x1f, 0x39, 0x9c, 0x80, 0x83, 0x83, 0xaa, 0xb3, + 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, 0x66, 0x7d, + 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, 0x16, 0xe7, + 0x1f, 0x3a, 0x3e, 0x40, 0x4f, 0x8b, 0x33, 0x8d, + 0x1e, 0x34, 0x7a, 0x7f, 0xaa, 0x10, 0x70, 0x75, + 0x56, 0x67, 0xd1, 0x26, 0xe4, 0x14, 0xea, 0xac, + 0xcf, 0xa2, 0x4d, 0xc8, 0x2b, 0xbf, 0xe2, 0xdc, + 0xe3, 0xe7, 0x33, 0x90, 0x13, 0xe2, 0xdc, 0xe2, + 0xb4, 0xc4, 0xca, 0xef, 0x60, 0x08, 0x38, 0x3a, + 0xab, 0x33, 0xe8, 0x93, 0x72, 0x0a, 0x75, 0x56, + 0x67, 0xd1, 0x26, 0xe4, 0x15, 0xdf, 0xf1, 0x6e, + 0x71, 0xba, 0xe8, 0xe9, 0xe6, 0x84, 0xf8, 0xb7, + 0x37, 0xf9, 0xcc, 0xae, 0xef, 0x88, 0x28, 0x83, + 0x83, 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, + 0x55, 0x66, 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, + 0x00, 0x16, 0xe6, 0xff, 0x00, 0x3d, 0x9c, 0x80, + 0x9f, 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x83, + 0x83, 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, + 0x55, 0x66, 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, + 0x00, 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x9f, + 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x83, 0x83, + 0xaa, 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, + 0x66, 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, + 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x9f, 0x16, + 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x83, 0x83, 0xaa, + 0xb3, 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, 0x66, + 0x7d, 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, 0x16, + 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0x9f, 0x16, 0xe7, + 0x1f, 0x39, 0x9c, 0x80, 0x83, 0x83, 0xaa, 0xb3, + 0x3e, 0x89, 0x37, 0x20, 0xa7, 0x55, 0x66, 0x7d, + 0x12, 0x6e, 0x41, 0x5d, 0xff, 0x00, 0x16, 0xe7, + 0x1f, 0x39, 0x9c, 0x80, 0x9f, 0x16, 0x67, 0x1f, + 0x39, 0x94, 0xf3, 0x10, 0x70, 0x75, 0x56, 0x67, + 0xd1, 0x26, 0xe4, 0x15, 0xdb, 0x93, 0x65, 0xd9, + 0x84, 0x59, 0xad, 0xb4, 0x92, 0x5b, 0x4a, 0xc6, + 0x35, 0xf5, 0x73, 0x8b, 0x48, 0x00, 0x50, 0xaf, + 0x5f, 0x16, 0xe7, 0x1f, 0x39, 0x9c, 0x80, 0xb6, + 0x41, 0xb5, 0x39, 0xb4, 0x93, 0xc5, 0x1b, 0x9c, + 0xcc, 0x2f, 0x7b, 0x5a, 0xea, 0x34, 0x6a, 0x26, + 0x85, 0x04, 0xb6, 0x6e, 0xdc, 0x37, 0x84, 0xfc, + 0xe6, 0x82, 0xb8, 0xd7, 0x7e, 0x72, 0x29, 0x74, + 0xdf, 0x30, 0x78, 0x57, 0x02, 0x0f, 0x76, 0xfe, + 0xf1, 0x1f, 0x9c, 0xdf, 0x0a, 0x9e, 0x50, 0x36, + 0xfe, 0xf1, 0x1f, 0x9c, 0xdf, 0x0a, 0x9e, 0x40, + 0x51, 0x79, 0xbf, 0xbc, 0xd9, 0x79, 0xff, 0x00, + 0x28, 0x52, 0x8a, 0x2f, 0x37, 0xf7, 0x9b, 0x2f, + 0x3f, 0xe5, 0x08, 0x19, 0x47, 0xbc, 0xde, 0xfd, + 0xa1, 0xfa, 0xc5, 0x4a, 0x28, 0xbc, 0xa3, 0xde, + 0x6f, 0x7e, 0xd0, 0xfd, 0x62, 0xa4, 0xea, 0x83, + 0x28, 0xb1, 0x54, 0xaa, 0x0f, 0x6d, 0xf2, 0x4a, + 0xf8, 0x75, 0xef, 0xbe, 0x5c, 0x7d, 0xab, 0xfe, + 0xb1, 0x5f, 0x70, 0x6f, 0x92, 0x57, 0xc3, 0xef, + 0x7d, 0xf2, 0xe3, 0xed, 0x5f, 0xf5, 0x8a, 0xc9, + 0xe6, 0xfc, 0x28, 0xfa, 0x0f, 0xed, 0xbf, 0xbf, + 0xcc, 0x7c, 0x31, 0xff, 0x00, 0x9b, 0x4a, 0x22, + 0x2c, 0x8f, 0xa4, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x6c, 0x64, 0x12, 0x3c, 0x62, + 0x8d, 0x8e, 0x78, 0x6e, 0x97, 0xe1, 0x05, 0xd4, + 0x1d, 0x9a, 0x56, 0x8b, 0xc0, 0xdd, 0xed, 0x2b, + 0x86, 0xc1, 0x1a, 0xda, 0x67, 0x75, 0xe8, 0xcd, + 0xf0, 0x48, 0xad, 0x8e, 0x9b, 0xaf, 0x15, 0x99, + 0xd1, 0x9b, 0xce, 0x67, 0x9c, 0x18, 0x2f, 0x96, + 0x23, 0x59, 0xae, 0xdf, 0xa7, 0xe3, 0x68, 0x85, + 0x3c, 0x8d, 0x15, 0x5e, 0xdb, 0x0c, 0x8f, 0x69, + 0x74, 0x6c, 0x73, 0xda, 0xdd, 0x2f, 0x21, 0xa5, + 0xc0, 0x0e, 0xc9, 0x02, 0x8b, 0xc0, 0x24, 0x00, + 0x15, 0xc7, 0x63, 0x87, 0xf9, 0x06, 0x7f, 0xf6, + 0x06, 0x9c, 0x87, 0xa5, 0x2b, 0xba, 0xda, 0x7b, + 0xa6, 0x4f, 0x39, 0x9e, 0x70, 0x61, 0x9c, 0xb1, + 0x1b, 0xa6, 0x26, 0x95, 0x98, 0xfd, 0xa9, 0xd2, + 0x54, 0xfc, 0x3f, 0xd0, 0xb1, 0xb9, 0x5d, 0xf5, + 0xec, 0x45, 0x21, 0x05, 0xcd, 0x69, 0x73, 0x1a, + 0x06, 0x27, 0x00, 0x68, 0x3b, 0x67, 0x50, 0x5b, + 0x1d, 0x63, 0x76, 0xd8, 0x79, 0xf7, 0x5b, 0xca, + 0x21, 0xf5, 0x85, 0x8e, 0xc3, 0xca, 0xa2, 0xae, + 0xd9, 0xe3, 0xc3, 0x57, 0x69, 0xc9, 0x58, 0x9e, + 0x36, 0xad, 0x34, 0x99, 0xaf, 0xd5, 0x6f, 0x6f, + 0x8b, 0x47, 0x8a, 0xb2, 0x05, 0x4e, 0x9d, 0x1d, + 0x85, 0x82, 0x06, 0xb6, 0xea, 0x5e, 0xe3, 0x8d, + 0xd2, 0x1c, 0x21, 0xa5, 0xee, 0x3a, 0x9a, 0xd0, + 0x49, 0xee, 0x00, 0x9a, 0x7b, 0x16, 0xd7, 0x4d, + 0x26, 0x62, 0x38, 0x71, 0xf7, 0x69, 0xcd, 0xe6, + 0x80, 0xef, 0x77, 0x16, 0x08, 0xa6, 0xb5, 0x67, + 0xdb, 0x4c, 0xb6, 0x2b, 0x47, 0xe5, 0xec, 0xb5, + 0x80, 0xc7, 0x10, 0xb3, 0x05, 0xe5, 0xad, 0x34, + 0xc4, 0x5c, 0x4b, 0xb1, 0x1d, 0xfe, 0xda, 0xae, + 0x41, 0x6d, 0x34, 0xf2, 0x73, 0x70, 0xc6, 0xf9, + 0x5f, 0xf3, 0x58, 0xd2, 0x4f, 0x7a, 0xaa, 0xd6, + 0xa4, 0xd6, 0xdb, 0x7d, 0xbe, 0xe7, 0x0f, 0x2f, + 0xe6, 0x6b, 0x9f, 0x0d, 0x73, 0x69, 0x15, 0x8b, + 0x6b, 0xf7, 0x5b, 0x84, 0x69, 0x3e, 0x16, 0x6b, + 0xa6, 0xe8, 0x58, 0x5b, 0x67, 0xb6, 0x9a, 0xdd, + 0xc5, 0x93, 0xc6, 0xf8, 0x5f, 0xb8, 0xd9, 0x1a, + 0x58, 0x7b, 0x98, 0xb5, 0xad, 0x4a, 0xba, 0x69, + 0x2e, 0xf5, 0x98, 0x98, 0xd6, 0x34, 0x98, 0x9f, + 0x6c, 0x4e, 0xb1, 0xf8, 0x32, 0x29, 0xbc, 0xbd, + 0x32, 0x27, 0xc9, 0x5c, 0x0d, 0x2e, 0xc2, 0x31, + 0x10, 0xd1, 0x5a, 0x01, 0xba, 0x56, 0xcb, 0x2b, + 0x4b, 0x8b, 0xcb, 0x98, 0xed, 0xad, 0x9a, 0x5f, + 0x34, 0xa7, 0x0b, 0x1a, 0x37, 0x4f, 0x75, 0x7d, + 0x07, 0x2e, 0xc8, 0x6d, 0x72, 0x5c, 0x93, 0x32, + 0x85, 0xd2, 0x32, 0x6c, 0xc8, 0xda, 0x97, 0xdc, + 0xe1, 0xd3, 0x81, 0xae, 0x0e, 0xc0, 0xd1, 0xdd, + 0x07, 0xb6, 0xaf, 0x8f, 0x1c, 0xdf, 0x59, 0xf6, + 0x43, 0x1f, 0x9d, 0xf3, 0xd8, 0xfc, 0xb4, 0x56, + 0xb3, 0x13, 0x6b, 0xde, 0x62, 0x2b, 0x5a, 0xf8, + 0xe9, 0x33, 0xa4, 0xda, 0x67, 0xd9, 0x10, 0xf9, + 0xc6, 0x8d, 0x46, 0xb5, 0x5b, 0x23, 0xb7, 0x9a, + 0x5a, 0xf3, 0x4c, 0x74, 0x94, 0xd7, 0x85, 0xa5, + 0xde, 0x05, 0xee, 0xce, 0xdc, 0xdd, 0xdd, 0xc3, + 0x6a, 0x0e, 0x17, 0x4f, 0x23, 0x62, 0xc5, 0xbd, + 0x88, 0xd1, 0x5c, 0x73, 0xdd, 0xa6, 0x97, 0x67, + 0xee, 0x5b, 0x93, 0xe4, 0x6c, 0x8e, 0x18, 0x6d, + 0x9a, 0xde, 0x72, 0x5c, 0x21, 0xe5, 0xc4, 0x8a, + 0xff, 0x00, 0xf3, 0x54, 0xa5, 0x22, 0x75, 0x99, + 0x9d, 0x22, 0x0f, 0x31, 0xe6, 0xb2, 0x53, 0x25, + 0x30, 0x62, 0xa4, 0x65, 0xcd, 0x68, 0x9b, 0x7d, + 0x53, 0xb6, 0x91, 0x58, 0xe7, 0x3c, 0xd4, 0x87, + 0xb0, 0xb4, 0x90, 0xf0, 0x5a, 0x5a, 0x68, 0xe0, + 0x41, 0x04, 0x70, 0xd1, 0x03, 0x1c, 0xe7, 0x06, + 0x30, 0x17, 0x39, 0xda, 0x9a, 0x34, 0x93, 0xda, + 0x03, 0x5a, 0xb9, 0x67, 0x32, 0xc1, 0xb4, 0x3b, + 0x2e, 0xdc, 0xf5, 0xd1, 0x36, 0x2b, 0xfb, 0x39, + 0x44, 0x53, 0x96, 0x8a, 0x63, 0x04, 0xe1, 0x3a, + 0xfc, 0xe0, 0x57, 0x8c, 0xa5, 0xf0, 0xec, 0xfe, + 0xcc, 0x0c, 0xe8, 0xc4, 0xd7, 0xe6, 0x17, 0xef, + 0x2c, 0xb5, 0xc6, 0x2b, 0x81, 0x83, 0x74, 0x77, + 0x01, 0x2a, 0x7b, 0x5f, 0x54, 0x46, 0xbf, 0x4c, + 0xf1, 0xdc, 0xe7, 0x1f, 0xcc, 0x27, 0xb7, 0xaf, + 0x6f, 0xfd, 0xfe, 0xe4, 0x60, 0xed, 0x6b, 0xc3, + 0x7f, 0x8c, 0xce, 0xee, 0x9d, 0x15, 0x29, 0x21, + 0x92, 0x27, 0x61, 0x95, 0x8f, 0x8d, 0xdb, 0x8d, + 0x7b, 0x4b, 0x49, 0xe5, 0x51, 0x78, 0xa2, 0xbc, + 0xe5, 0x79, 0x9b, 0xf6, 0xba, 0xca, 0xef, 0x29, + 0xcc, 0xda, 0xc3, 0x77, 0x1c, 0x46, 0x7b, 0x49, + 0xda, 0xda, 0x10, 0x5b, 0xa2, 0x94, 0xec, 0x1a, + 0x76, 0xd5, 0x1d, 0xc1, 0xc0, 0xd1, 0xc2, 0x8e, + 0x06, 0x84, 0x6f, 0x53, 0x5a, 0x8b, 0xd2, 0x23, + 0x49, 0x89, 0xd6, 0xb2, 0xed, 0xe5, 0x7c, 0xcd, + 0xf2, 0x5b, 0x26, 0x3c, 0xd5, 0xd9, 0x9b, 0x16, + 0xdd, 0xd1, 0x5e, 0x34, 0x9a, 0xdb, 0xc2, 0xd1, + 0x3e, 0xf1, 0xb1, 0xb9, 0xf4, 0x0c, 0x6b, 0x9e, + 0xe3, 0xf9, 0xad, 0x15, 0x27, 0xb4, 0x02, 0xcc, + 0x91, 0x49, 0x11, 0xa4, 0x8c, 0x73, 0x1d, 0xba, + 0x1c, 0x0b, 0x4f, 0x7d, 0x4d, 0xec, 0x5f, 0x8b, + 0xb4, 0xd6, 0x64, 0x6e, 0x39, 0xff, 0x00, 0x51, + 0xca, 0x77, 0xf1, 0x1a, 0x06, 0x5c, 0x5b, 0xda, + 0xe6, 0x30, 0x8a, 0xe0, 0x7c, 0x96, 0xd2, 0x9d, + 0xe2, 0xd3, 0x56, 0xf7, 0xc1, 0x53, 0x5c, 0x5a, + 0xe2, 0x9b, 0xeb, 0xc6, 0x27, 0xc1, 0xcf, 0x2f, + 0x9e, 0x9a, 0x79, 0xcc, 0x7e, 0x5b, 0x6f, 0xd3, + 0x92, 0x9a, 0xc5, 0xbf, 0xd7, 0xc7, 0x4f, 0x9e, + 0xd5, 0x1b, 0x47, 0x71, 0x7b, 0x7d, 0xbc, 0xf1, + 0xb4, 0x39, 0xf1, 0x3d, 0x8d, 0x3a, 0x9c, 0xf6, + 0x96, 0x8d, 0x3a, 0x74, 0x13, 0xda, 0x5b, 0xb2, + 0xdb, 0x47, 0x5e, 0xe6, 0x16, 0xd6, 0x8d, 0xd2, + 0x67, 0x95, 0xb1, 0xf7, 0x09, 0xd2, 0xaf, 0x7f, + 0x88, 0x12, 0x42, 0xfd, 0x9f, 0xb7, 0xe6, 0x7f, + 0x67, 0x15, 0xd0, 0x88, 0x7f, 0xf8, 0xd9, 0x23, + 0x7e, 0x45, 0x14, 0xc5, 0xad, 0x2d, 0x7d, 0x7e, + 0xd5, 0xbc, 0xcf, 0x9e, 0xed, 0xf9, 0x8f, 0x2f, + 0x82, 0x23, 0x5e, 0xfd, 0xb4, 0x99, 0xe9, 0x89, + 0xf0, 0xff, 0x00, 0x37, 0xcf, 0x4c, 0x32, 0xf3, + 0x7c, 0xee, 0x07, 0x08, 0xce, 0x81, 0x25, 0x0e, + 0x12, 0x77, 0xb1, 0x6a, 0xdc, 0x5e, 0x29, 0xa0, + 0x15, 0x6e, 0xbd, 0x27, 0xfd, 0xbb, 0xb1, 0x3b, + 0xd7, 0x07, 0x86, 0xb2, 0x2a, 0x8e, 0xbd, 0x0a, + 0x32, 0x53, 0x66, 0xd8, 0xea, 0x88, 0xb7, 0xcd, + 0xd3, 0xcb, 0x67, 0xb6, 0x7a, 0xe5, 0xb6, 0x9a, + 0x4d, 0x2f, 0x7c, 0x51, 0x1f, 0xb3, 0x3a, 0x44, + 0xbd, 0x3a, 0x19, 0x1a, 0xc0, 0xf2, 0xc7, 0x06, + 0x3b, 0xc9, 0x79, 0x04, 0x34, 0x9e, 0xc1, 0xd4, + 0x57, 0x8a, 0x15, 0x71, 0xce, 0xdb, 0xff, 0x00, + 0xd0, 0x72, 0x6e, 0xcc, 0xad, 0xaf, 0x22, 0x55, + 0x54, 0xf6, 0x4b, 0xaa, 0x55, 0xb0, 0xc8, 0xe0, + 0x69, 0x42, 0x18, 0xe2, 0x3b, 0xc1, 0x4d, 0xe9, + 0x15, 0x9d, 0x23, 0x8f, 0x0d, 0x51, 0xe5, 0xbc, + 0xcf, 0x7a, 0x96, 0xbd, 0xa3, 0x6c, 0x57, 0x25, + 0xe9, 0x1c, 0x63, 0xf5, 0x67, 0xde, 0xd5, 0x43, + 0xbc, 0xb0, 0xb7, 0x3e, 0xda, 0xe9, 0xad, 0x2e, + 0x74, 0x12, 0x80, 0x35, 0xd5, 0x8e, 0x1f, 0xdd, + 0x5a, 0x8d, 0x15, 0x34, 0x98, 0xf1, 0x86, 0x98, + 0xb5, 0x6d, 0xc2, 0xb3, 0xae, 0x8c, 0x22, 0x22, + 0x24, 0x44, 0x44, 0x04, 0x44, 0x40, 0x59, 0x1a, + 0xd6, 0x16, 0x46, 0xb4, 0x19, 0x1b, 0x8b, 0xee, + 0x16, 0xa2, 0x99, 0x7d, 0xb0, 0xff, 0x00, 0x09, + 0x9f, 0x54, 0x2f, 0x87, 0x8d, 0x61, 0x7d, 0xc2, + 0xdb, 0xf9, 0x7d, 0xb7, 0xd9, 0xb3, 0xea, 0x85, + 0xa7, 0xc9, 0xfd, 0xd6, 0x7c, 0xff, 0x00, 0xf7, + 0x1f, 0xd9, 0x83, 0xf6, 0xaf, 0xfa, 0x2a, 0xf6, + 0x35, 0xaa, 0xfb, 0xbc, 0xa3, 0xdb, 0x2a, 0xc1, + 0xba, 0xab, 0xee, 0xf2, 0x8f, 0x6c, 0xad, 0xaf, + 0x9b, 0x61, 0x7a, 0x8b, 0xf6, 0xac, 0xf3, 0x9b, + 0xe1, 0x0b, 0xca, 0xf5, 0x17, 0xed, 0x59, 0xe7, + 0x37, 0xc2, 0x10, 0x73, 0x6d, 0x87, 0xf3, 0x28, + 0xfe, 0xc4, 0x7d, 0x67, 0x28, 0x25, 0x3b, 0xb6, + 0x1f, 0xcc, 0xa3, 0xfb, 0x11, 0xf5, 0x9c, 0xa0, + 0x90, 0x11, 0x11, 0x01, 0x11, 0x10, 0x16, 0x0e, + 0xa5, 0x94, 0x41, 0x39, 0xb4, 0x3e, 0xe1, 0x95, + 0x7d, 0x8f, 0xf7, 0x58, 0xb3, 0xb3, 0x9e, 0xe5, + 0x99, 0xfd, 0x89, 0xfa, 0xae, 0x5e, 0x73, 0xfd, + 0x39, 0x76, 0x52, 0x7f, 0xc0, 0x1a, 0x7f, 0xb2, + 0xc5, 0x9d, 0x9c, 0xf7, 0x3c, 0xcc, 0xee, 0x73, + 0x27, 0xc0, 0xe4, 0x1a, 0x2c, 0xb2, 0x6b, 0x79, + 0xf2, 0xc6, 0xdf, 0xcd, 0x71, 0xcc, 0x30, 0x38, + 0x89, 0x6a, 0xda, 0x80, 0x07, 0xcd, 0xa6, 0xe9, + 0x4b, 0xbc, 0xa6, 0xd0, 0xd8, 0x9b, 0xfc, 0xb6, + 0x67, 0x4f, 0x14, 0x64, 0x09, 0x58, 0xf0, 0x03, + 0x85, 0x77, 0x74, 0x00, 0xb6, 0x3c, 0x9f, 0x84, + 0xa2, 0xa0, 0xff, 0x00, 0x8f, 0xa4, 0xaf, 0x79, + 0x10, 0x07, 0x2c, 0xcd, 0x03, 0xbc, 0x8c, 0x1d, + 0xfa, 0x14, 0x10, 0x6a, 0xce, 0xcb, 0x7c, 0xaf, + 0xe1, 0xe7, 0xc6, 0x2e, 0xdd, 0xec, 0xa6, 0x6a, + 0xba, 0x6c, 0x06, 0xa1, 0xda, 0x3c, 0x5c, 0x2a, + 0xae, 0x35, 0x29, 0xa6, 0x68, 0xd9, 0x29, 0x0f, + 0xff, 0x00, 0xc4, 0xe8, 0xfa, 0x28, 0x35, 0x5a, + 0x65, 0x56, 0xcf, 0xb7, 0x96, 0xfa, 0xea, 0x77, + 0x45, 0x64, 0xc7, 0x96, 0x46, 0xf6, 0x8f, 0x19, + 0xfb, 0xd4, 0x0b, 0x17, 0xb9, 0x5d, 0xb3, 0x6c, + 0x86, 0x61, 0x97, 0xcc, 0x67, 0xb6, 0x07, 0x0c, + 0xa1, 0xe2, 0x8e, 0x69, 0xe0, 0x0b, 0xa3, 0x31, + 0x14, 0xd9, 0x9b, 0x00, 0xdd, 0x4e, 0x7b, 0xcb, + 0xbb, 0x3a, 0x5e, 0xb3, 0x94, 0xf8, 0xd9, 0x06, + 0x68, 0xd7, 0x79, 0x22, 0x94, 0xe0, 0x41, 0x05, + 0xa7, 0x48, 0xdd, 0xa7, 0x7d, 0x4b, 0xdf, 0x66, + 0x91, 0x1c, 0xb6, 0xd6, 0xca, 0xcc, 0xb9, 0x82, + 0x31, 0x59, 0x80, 0xab, 0x71, 0x3b, 0x7a, 0xaa, + 0x27, 0x8e, 0xaa, 0x43, 0x29, 0xca, 0xdb, 0x74, + 0xd7, 0xdc, 0xdc, 0xbb, 0x99, 0xb2, 0x87, 0x4c, + 0x92, 0x13, 0x42, 0x4f, 0xcd, 0x6a, 0x0e, 0xe8, + 0xe4, 0x7c, 0xfb, 0x29, 0x31, 0xb9, 0x26, 0x4e, + 0x6e, 0x40, 0x20, 0x7b, 0xb5, 0x9d, 0x2d, 0xdf, + 0xde, 0xaa, 0xf4, 0xc6, 0x5f, 0xf5, 0x15, 0x94, + 0x56, 0x01, 0xe6, 0x59, 0x9e, 0xf7, 0xbc, 0xc7, + 0xbc, 0x09, 0x15, 0x3a, 0xb4, 0x2e, 0x1c, 0xdb, + 0x35, 0x6d, 0xd3, 0x63, 0xb5, 0xb5, 0x6f, 0x33, + 0x67, 0x0f, 0xec, 0xda, 0x75, 0xbb, 0xfa, 0xc5, + 0x6a, 0x9b, 0x33, 0xbf, 0x75, 0xa4, 0x36, 0x78, + 0x9d, 0x0c, 0x0c, 0xf2, 0x30, 0x82, 0xc2, 0xe1, + 0xaf, 0xca, 0x41, 0x8b, 0xf1, 0x9b, 0xc3, 0x48, + 0xaf, 0xdd, 0x20, 0x0e, 0x35, 0x68, 0x79, 0xab, + 0x49, 0x0a, 0x52, 0xfe, 0x2b, 0xa8, 0xf2, 0xcc, + 0xbf, 0x2f, 0xb3, 0x63, 0xdc, 0xe9, 0xd9, 0xcf, + 0x4c, 0x19, 0x5a, 0x9a, 0xd0, 0xe9, 0x23, 0xb6, + 0xbc, 0xc3, 0x2c, 0x97, 0xbb, 0x31, 0x72, 0x6e, + 0x09, 0x7b, 0xed, 0x5e, 0x0c, 0x6f, 0x76, 0x93, + 0xa4, 0x8d, 0x15, 0xee, 0xae, 0x9c, 0xf6, 0xfa, + 0x7b, 0x6c, 0xb2, 0xc4, 0x5b, 0x38, 0xc6, 0xe9, + 0xa3, 0x68, 0x74, 0x8d, 0xd0, 0x70, 0x86, 0xb5, + 0xd4, 0xaa, 0x08, 0xbb, 0x9b, 0xab, 0xf8, 0x32, + 0xee, 0xad, 0xbd, 0x81, 0xc2, 0xae, 0xc5, 0x1c, + 0xb2, 0x56, 0xa3, 0xb0, 0xda, 0xa8, 0xc5, 0x3f, + 0x04, 0xd2, 0x66, 0x1b, 0x3b, 0x77, 0xed, 0x6e, + 0x32, 0xc9, 0x68, 0xe1, 0xcd, 0xc8, 0xed, 0x62, + 0xa4, 0x6e, 0xaa, 0xf8, 0xd5, 0x5e, 0xd2, 0x0b, + 0x0d, 0xed, 0xb4, 0xd7, 0x79, 0x4e, 0x51, 0x6f, + 0x08, 0xc5, 0x24, 0x98, 0xa9, 0xd8, 0xd1, 0xaf, + 0xb8, 0xb9, 0xf3, 0x8b, 0xa8, 0x6d, 0xa0, 0x6e, + 0x4d, 0x64, 0x7f, 0x57, 0x17, 0xbc, 0x38, 0x7e, + 0x7b, 0xf7, 0x41, 0x52, 0x4f, 0xcd, 0x0e, 0x5d, + 0x90, 0xd8, 0x3e, 0x36, 0x07, 0x4d, 0x23, 0x70, + 0xb0, 0x9f, 0xcd, 0x03, 0xca, 0x2a, 0x3b, 0x68, + 0x2d, 0x62, 0x90, 0x43, 0x9b, 0x5b, 0x0a, 0xc1, + 0x74, 0x01, 0x7d, 0x35, 0x35, 0xc3, 0x8d, 0x06, + 0xc9, 0xcb, 0xc6, 0xc9, 0xdb, 0x61, 0xad, 0x79, + 0xdd, 0x25, 0xb5, 0xad, 0x06, 0x2d, 0xee, 0xd2, + 0xf7, 0xb3, 0xf2, 0x4e, 0xdb, 0x4b, 0xf7, 0xdc, + 0x97, 0x7b, 0x27, 0x36, 0x68, 0x64, 0xae, 0x1c, + 0x5a, 0x74, 0x0c, 0x4b, 0xdb, 0x2f, 0x27, 0xb2, + 0xd9, 0x8b, 0x69, 0x60, 0x20, 0x48, 0x65, 0xc2, + 0x49, 0x01, 0xc2, 0x87, 0x16, 0xe3, 0x93, 0x2b, + 0xbe, 0x76, 0x77, 0xce, 0x65, 0xd9, 0x83, 0x5a, + 0xff, 0x00, 0x10, 0xbd, 0x8f, 0x68, 0xc3, 0x42, + 0x08, 0xa6, 0xad, 0x08, 0x2b, 0x7a, 0x37, 0x35, + 0x6e, 0x2b, 0x0e, 0x52, 0xc7, 0xc9, 0xb3, 0xf7, + 0xb1, 0xda, 0x57, 0xda, 0xb1, 0x55, 0xcd, 0x6f, + 0x94, 0x46, 0x8f, 0xe9, 0x50, 0x0f, 0x61, 0x63, + 0xdc, 0xc2, 0x6a, 0x5a, 0x4b, 0x49, 0xdf, 0xa1, + 0xa2, 0xeb, 0xb4, 0x19, 0x8d, 0x9c, 0x3d, 0x63, + 0x6f, 0x58, 0xe2, 0x2e, 0xc1, 0x8c, 0x11, 0x84, + 0x91, 0xb8, 0x42, 0x0c, 0xe5, 0x99, 0x84, 0xb9, + 0x5d, 0xdb, 0xa4, 0x2c, 0x2e, 0x18, 0x4b, 0x64, + 0x89, 0xc7, 0x0e, 0x9f, 0xeb, 0x55, 0x48, 0xe4, + 0x2f, 0x06, 0xd3, 0x37, 0x7b, 0x3c, 0x56, 0x98, + 0xdc, 0x5a, 0x06, 0xe6, 0x87, 0xee, 0xad, 0xb9, + 0x7e, 0x67, 0x06, 0x71, 0x28, 0xb1, 0xcc, 0x60, + 0x63, 0xa4, 0x90, 0x1e, 0x6e, 0x66, 0x8d, 0x35, + 0x00, 0x9e, 0xe6, 0xa5, 0x9c, 0x96, 0x33, 0x64, + 0x73, 0x76, 0x68, 0x93, 0xd9, 0xda, 0x70, 0xe2, + 0xd2, 0x08, 0x01, 0xc4, 0x02, 0x10, 0x45, 0xe4, + 0x53, 0x5d, 0x1c, 0xd2, 0x06, 0xc2, 0xf7, 0x3a, + 0xaf, 0x1c, 0xe0, 0xc4, 0x4f, 0x8b, 0x50, 0x1d, + 0x51, 0xda, 0x59, 0xcf, 0x18, 0xc9, 0x33, 0xb9, + 0xe3, 0x84, 0x02, 0x5e, 0xf6, 0xb4, 0x53, 0xe7, + 0x10, 0xa4, 0xb2, 0xbd, 0xa1, 0x92, 0xe2, 0xf1, + 0x96, 0xb2, 0x5b, 0xc5, 0x13, 0x27, 0x38, 0x31, + 0xc2, 0x0b, 0x1c, 0x2a, 0x0e, 0xea, 0xd1, 0x97, + 0xe5, 0xb8, 0x36, 0x95, 0xd6, 0xf5, 0x2f, 0x65, + 0xb3, 0xcc, 0xa5, 0xce, 0xd6, 0x46, 0x82, 0x2a, + 0x7b, 0x64, 0x20, 0x97, 0x6c, 0xd1, 0x8b, 0xd1, + 0x92, 0x68, 0x11, 0x7b, 0x26, 0x12, 0x3f, 0xaf, + 0xff, 0x00, 0xf2, 0xe9, 0x55, 0xfc, 0x82, 0x37, + 0x47, 0x9f, 0x43, 0x1b, 0xfc, 0xa6, 0x3d, 0xed, + 0x77, 0x6c, 0x35, 0xc0, 0xa9, 0x46, 0xd9, 0x7f, + 0x9c, 0xf5, 0x91, 0xbd, 0xb7, 0xa7, 0x39, 0x88, + 0xb3, 0x16, 0x9c, 0x1e, 0x4d, 0x39, 0x2b, 0xc1, + 0xb7, 0xf6, 0x7d, 0xb0, 0x65, 0x35, 0x4a, 0x4c, + 0x8d, 0xfe, 0xd3, 0x1d, 0x5e, 0xf8, 0x40, 0xda, + 0x1a, 0x5d, 0x65, 0xe2, 0x7a, 0x0c, 0x56, 0x97, + 0x0f, 0x85, 0xdd, 0xaa, 0xee, 0xa6, 0xce, 0x81, + 0x6d, 0x61, 0xed, 0x07, 0xca, 0xba, 0xb9, 0x8e, + 0x16, 0x1e, 0xc0, 0x70, 0xc5, 0xf2, 0xac, 0x43, + 0xff, 0x00, 0x72, 0xec, 0xf2, 0xc3, 0x5b, 0x9c, + 0x4c, 0xd1, 0x8e, 0xcb, 0x7f, 0xa4, 0x05, 0x99, + 0x3f, 0xed, 0x8e, 0x47, 0x60, 0x34, 0x10, 0xf6, + 0x4b, 0x20, 0xec, 0xb9, 0xda, 0x2a, 0x82, 0x33, + 0x68, 0xbf, 0x9c, 0xdc, 0x76, 0xc7, 0xd5, 0x0a, + 0x39, 0x48, 0xed, 0x17, 0xf3, 0x9b, 0x8e, 0xd8, + 0xf0, 0x05, 0x1c, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0xa4, 0xb6, 0x6f, 0xf9, 0xcd, 0xbf, 0x6d, + 0xdf, 0x50, 0xa8, 0xd5, 0x25, 0xb3, 0x7f, 0xce, + 0x6d, 0xfb, 0x6e, 0xfa, 0x85, 0x04, 0xd6, 0x61, + 0xef, 0xb3, 0x79, 0xdf, 0x20, 0x5c, 0xeb, 0xa3, + 0x30, 0xf7, 0xd9, 0xbc, 0xef, 0x90, 0x2e, 0x74, + 0x04, 0x44, 0x41, 0xaf, 0x6c, 0xdc, 0xe6, 0xe5, + 0xb6, 0x64, 0x76, 0x7b, 0xe1, 0xa1, 0x55, 0xec, + 0xf2, 0x7c, 0xd2, 0xf6, 0xdf, 0xda, 0xa1, 0x0c, + 0xe6, 0xb1, 0x16, 0x62, 0x7c, 0x8d, 0x67, 0x8d, + 0xbd, 0xe3, 0x90, 0xac, 0xfb, 0x6b, 0xfc, 0xae, + 0xcf, 0xbb, 0xfd, 0xd5, 0x13, 0x6b, 0x62, 0xfb, + 0xcd, 0x97, 0x64, 0x6c, 0x7c, 0x6c, 0x73, 0x6e, + 0xcb, 0xeb, 0x2b, 0x83, 0x5b, 0x40, 0xc3, 0xba, + 0x56, 0x7c, 0xbc, 0x6f, 0xa7, 0xb3, 0x47, 0xb5, + 0xfc, 0xba, 0xdd, 0xbf, 0x29, 0x37, 0xd6, 0x95, + 0x9b, 0xe7, 0x8c, 0x7b, 0xad, 0x5d, 0xfc, 0x36, + 0xc7, 0xb1, 0xc0, 0xec, 0x8b, 0x38, 0x6d, 0xc0, + 0xb6, 0x74, 0x61, 0xb2, 0xb9, 0x9c, 0xe3, 0x71, + 0x3d, 0xa1, 0x85, 0x82, 0x95, 0x21, 0xe4, 0x86, + 0x9d, 0x7b, 0xeb, 0x6c, 0x9b, 0x37, 0x9c, 0xc4, + 0xcc, 0x72, 0x31, 0xad, 0x6d, 0x31, 0x54, 0xcb, + 0x1e, 0xa1, 0xbd, 0xe3, 0xe9, 0x5b, 0x76, 0x82, + 0x27, 0x5b, 0x65, 0xb9, 0x76, 0x5d, 0x21, 0xe7, + 0x4c, 0x4c, 0x7c, 0x9c, 0xf0, 0xf1, 0x98, 0x43, + 0xe9, 0x46, 0xb0, 0xee, 0x81, 0x45, 0xe3, 0x68, + 0x7d, 0xdb, 0x2a, 0x34, 0xd2, 0x2c, 0x9b, 0x4e, + 0xeb, 0x9d, 0xc4, 0xa9, 0x35, 0xa4, 0x6e, 0xfb, + 0xb5, 0xf6, 0x36, 0xe3, 0xbe, 0x6c, 0x93, 0x87, + 0x4b, 0xe2, 0xd3, 0x2d, 0xb2, 0x47, 0xf0, 0xfd, + 0x91, 0x33, 0xa4, 0xfd, 0xde, 0xdd, 0x38, 0x47, + 0xb1, 0xcd, 0x65, 0x94, 0x66, 0x17, 0x90, 0x7b, + 0x43, 0x30, 0xc7, 0x11, 0x25, 0xac, 0x7c, 0xaf, + 0x0c, 0x0e, 0x3a, 0xa8, 0x2b, 0xad, 0x78, 0x10, + 0x5c, 0xda, 0x5d, 0x9b, 0x6b, 0x96, 0x96, 0x48, + 0xdd, 0x0e, 0x63, 0xbb, 0x3a, 0x88, 0xd3, 0xa4, + 0x15, 0xdb, 0xb4, 0x83, 0x04, 0x19, 0x65, 0xab, + 0x45, 0x23, 0x6d, 0xa3, 0x5c, 0x06, 0xe5, 0x5c, + 0x4d, 0x4f, 0x6d, 0x72, 0x4d, 0x98, 0x4f, 0x7d, + 0x77, 0x0b, 0xe7, 0xc3, 0x8a, 0x26, 0x08, 0x81, + 0x02, 0x84, 0x80, 0x34, 0x62, 0x51, 0x1a, 0x45, + 0xa2, 0x22, 0x78, 0xc4, 0xa2, 0xfd, 0xcc, 0xbe, + 0x5f, 0x2e, 0x4b, 0x57, 0x1f, 0x6e, 0xf4, 0xcb, + 0x3a, 0x45, 0x78, 0xd7, 0x67, 0x0a, 0xe9, 0x3e, + 0xfd, 0x16, 0x7e, 0x6f, 0x29, 0xb2, 0xc9, 0xec, + 0xae, 0xae, 0x2c, 0xc5, 0xc3, 0xee, 0x05, 0x1c, + 0x71, 0x61, 0x35, 0xa5, 0x57, 0x97, 0x59, 0xe5, + 0x59, 0x96, 0x5b, 0x71, 0x73, 0x61, 0x11, 0xb4, + 0xb8, 0xb5, 0x18, 0x9f, 0x19, 0x35, 0x04, 0x6b, + 0xd2, 0xb7, 0xcd, 0x6d, 0x05, 0xce, 0xcf, 0x65, + 0xcd, 0x9e, 0xe5, 0x96, 0xad, 0x6b, 0x6b, 0x8a, + 0x41, 0x50, 0x74, 0x1e, 0xc8, 0x58, 0x16, 0xad, + 0xcb, 0xf2, 0x4b, 0xa7, 0x65, 0xef, 0x17, 0xc6, + 0x71, 0x49, 0xa5, 0x69, 0x00, 0x31, 0xb4, 0xde, + 0xa9, 0xdf, 0x5b, 0x39, 0xbe, 0x65, 0x5b, 0x63, + 0x24, 0x90, 0xd2, 0x36, 0x97, 0x9f, 0x9a, 0xd0, + 0x49, 0x59, 0x7c, 0x72, 0x46, 0xec, 0x2f, 0x69, + 0x6b, 0xb7, 0x88, 0x20, 0x9e, 0x15, 0x2b, 0x65, + 0x9a, 0xc7, 0x65, 0x95, 0x3a, 0x2b, 0x3a, 0xf5, + 0x84, 0xae, 0xd2, 0xfc, 0x35, 0xf1, 0x77, 0x29, + 0xaf, 0x71, 0x76, 0xdd, 0x7b, 0x6c, 0xfb, 0x37, + 0x24, 0xd9, 0x8b, 0x0f, 0x3f, 0x1c, 0xad, 0x30, + 0x3d, 0xe2, 0x8e, 0x2d, 0x25, 0xb4, 0xde, 0xdf, + 0x28, 0x23, 0xdb, 0x96, 0x42, 0x72, 0x07, 0x5e, + 0x96, 0x3f, 0xda, 0x44, 0xb8, 0x00, 0xd3, 0xe4, + 0xd6, 0x9e, 0x42, 0x59, 0xe5, 0x91, 0x4b, 0x93, + 0x5d, 0xde, 0x48, 0xc7, 0x73, 0xf0, 0xb8, 0x08, + 0xf5, 0xea, 0x34, 0xdc, 0xdd, 0xd6, 0xa5, 0x22, + 0xcd, 0xef, 0xfe, 0x1b, 0x75, 0xe7, 0x38, 0x39, + 0xf6, 0xcc, 0x18, 0xd7, 0x61, 0x6d, 0x30, 0xd5, + 0xa3, 0x55, 0x28, 0xb3, 0x63, 0x9c, 0x66, 0x12, + 0xe4, 0x77, 0x97, 0x6f, 0x90, 0x19, 0xe1, 0x73, + 0x44, 0x6e, 0xc2, 0xda, 0x0f, 0x27, 0x72, 0x94, + 0x41, 0x57, 0x6b, 0x5e, 0x5d, 0x84, 0x34, 0x97, + 0xea, 0xc2, 0x01, 0xad, 0x7b, 0x4b, 0x2f, 0x8a, + 0x58, 0xc8, 0x6c, 0x8c, 0x74, 0x6e, 0x3a, 0x83, + 0x81, 0x04, 0xf0, 0xab, 0x0e, 0x5a, 0xeb, 0xa6, + 0xe5, 0x97, 0x99, 0xc3, 0x19, 0xcf, 0x5f, 0xcd, + 0x26, 0x18, 0xdc, 0x1b, 0x52, 0x37, 0x1c, 0x40, + 0xee, 0xaf, 0x4c, 0x17, 0xf7, 0xf9, 0x35, 0xeb, + 0x33, 0x38, 0xdc, 0x65, 0xb7, 0x02, 0x4b, 0x79, + 0x24, 0x6e, 0x17, 0x6e, 0x9e, 0xf5, 0x10, 0x56, + 0xc3, 0x1e, 0x68, 0x5a, 0xd2, 0x71, 0x1a, 0x36, + 0x80, 0xe9, 0x2b, 0x2e, 0x8a, 0x46, 0x92, 0x1e, + 0xc7, 0x37, 0x0f, 0x95, 0x50, 0x45, 0x2b, 0xaa, + 0xb5, 0x56, 0x46, 0xdf, 0x7b, 0x06, 0xcd, 0x59, + 0xce, 0xc6, 0x07, 0xcd, 0x8c, 0xb6, 0x22, 0xef, + 0xcd, 0x35, 0x75, 0x5d, 0xc0, 0x16, 0xbc, 0xae, + 0xf2, 0x6c, 0xd6, 0xdb, 0x32, 0xb6, 0xb8, 0x21, + 0xf2, 0xca, 0xce, 0x75, 0xa6, 0x80, 0x54, 0xb4, + 0x61, 0xd4, 0x3b, 0x41, 0x05, 0x78, 0x35, 0xce, + 0x34, 0x68, 0x2e, 0x3a, 0xe8, 0x05, 0x74, 0x2c, + 0x29, 0xcc, 0x8c, 0x8b, 0x5c, 0xa7, 0x31, 0xbe, + 0x3a, 0xf0, 0x88, 0xa3, 0xa8, 0xfc, 0xe3, 0xff, + 0x00, 0xc8, 0x51, 0x31, 0xd8, 0xde, 0xc8, 0xc0, + 0xf8, 0xe0, 0x91, 0xec, 0x76, 0xa7, 0x06, 0x92, + 0x38, 0x50, 0x75, 0xec, 0xf5, 0xb4, 0x17, 0x79, + 0xac, 0x70, 0x5c, 0x33, 0x9c, 0x8d, 0xcd, 0x71, + 0x2d, 0x3d, 0x81, 0x55, 0xd8, 0xeb, 0xcd, 0x9e, + 0x6d, 0xcb, 0xad, 0xe5, 0xcb, 0xf0, 0x35, 0xae, + 0x2c, 0x74, 0x81, 0xf5, 0xa5, 0x0d, 0x31, 0x51, + 0x6a, 0xd9, 0xa8, 0xe4, 0x8b, 0x3d, 0x89, 0x92, + 0xb0, 0xc6, 0xf0, 0xc7, 0xd5, 0xae, 0x04, 0x1d, + 0x2d, 0x27, 0x75, 0x74, 0x1c, 0x9b, 0x2c, 0x97, + 0x31, 0x76, 0x3c, 0xca, 0x32, 0x5d, 0x29, 0x2e, + 0x85, 0xb4, 0x0e, 0x24, 0x9a, 0xe0, 0xa9, 0x28, + 0x38, 0x33, 0xcc, 0xb2, 0x3c, 0xba, 0xf0, 0x47, + 0x09, 0x26, 0x09, 0x1a, 0x24, 0x8c, 0x9d, 0x26, + 0x87, 0xb3, 0xd8, 0x5c, 0x22, 0x09, 0xcb, 0x71, + 0x88, 0x9e, 0x59, 0xf3, 0xb0, 0x9a, 0x29, 0x9c, + 0xe2, 0x67, 0x1c, 0xf6, 0x17, 0x66, 0x11, 0x18, + 0xad, 0xa2, 0xc2, 0x1a, 0xcf, 0x2a, 0xb1, 0xb4, + 0x93, 0x5d, 0x1b, 0xf5, 0x5b, 0xe2, 0xce, 0x33, + 0x5b, 0xdc, 0xd1, 0xbd, 0x5e, 0x1c, 0x6c, 0xb1, + 0x86, 0xb6, 0x3c, 0x14, 0x6f, 0x37, 0xa0, 0x1c, + 0x5a, 0x3b, 0xa8, 0x2b, 0x95, 0xa6, 0xbe, 0xe9, + 0xdc, 0xaa, 0xf6, 0x61, 0x99, 0xac, 0xc6, 0xe8, + 0xde, 0x19, 0xf3, 0x8b, 0x48, 0x1c, 0x34, 0x56, + 0x36, 0xe5, 0xf6, 0xf2, 0x6d, 0x64, 0xcc, 0x2d, + 0x1c, 0xcc, 0x43, 0x9d, 0x2c, 0xdc, 0xae, 0x10, + 0x75, 0x79, 0xc5, 0x73, 0x41, 0xb4, 0xb3, 0x9c, + 0xc1, 0xfe, 0xd8, 0xec, 0x56, 0x0f, 0x2e, 0x6b, + 0xe1, 0xc2, 0x08, 0x6b, 0x7f, 0x36, 0x88, 0x34, + 0x65, 0x36, 0x76, 0xd3, 0xe5, 0xb9, 0x94, 0xd2, + 0xb0, 0x3a, 0x48, 0x18, 0xd3, 0x13, 0x8e, 0xb1, + 0x5c, 0x5c, 0x4a, 0x28, 0x07, 0x38, 0xd0, 0x02, + 0x4e, 0xbd, 0x02, 0xba, 0x3b, 0x41, 0x4f, 0xe5, + 0x42, 0x37, 0xd8, 0x67, 0x42, 0xde, 0xa6, 0x37, + 0x86, 0xf3, 0x62, 0x9a, 0x68, 0x71, 0xd1, 0x79, + 0x9b, 0xfc, 0x87, 0x2f, 0x10, 0xb4, 0x53, 0x32, + 0xbc, 0x6e, 0x29, 0x24, 0xf9, 0x8c, 0xde, 0x07, + 0x7c, 0x20, 0x82, 0x6b, 0x1e, 0xe7, 0x06, 0xb4, + 0x12, 0xe3, 0xa9, 0xa0, 0x12, 0x78, 0x02, 0xcb, + 0xe3, 0x92, 0x33, 0x86, 0x46, 0x39, 0x87, 0x79, + 0xc0, 0x8f, 0x0a, 0x9f, 0xcb, 0x59, 0x71, 0x67, + 0x90, 0xc9, 0x7b, 0x65, 0x19, 0x92, 0xf2, 0xe6, + 0x42, 0xd6, 0x48, 0x1b, 0x88, 0x86, 0x83, 0x86, + 0xbd, 0xe2, 0xbd, 0xca, 0x2e, 0xef, 0xb2, 0x0b, + 0x97, 0xe6, 0x2c, 0x70, 0xb8, 0xb4, 0x21, 0xf1, + 0xc8, 0xe6, 0xe1, 0x71, 0x08, 0x2b, 0xb1, 0xc7, + 0x2c, 0x95, 0xe6, 0xd8, 0xe7, 0x90, 0x34, 0xe1, + 0x04, 0xd3, 0xb7, 0x45, 0x28, 0x6c, 0xad, 0x86, + 0xcd, 0xfb, 0x5f, 0x37, 0x4b, 0x83, 0x30, 0x66, + 0x3d, 0x35, 0x02, 0xbb, 0xdb, 0x8b, 0xb6, 0xe2, + 0xee, 0x5c, 0x9f, 0x27, 0xb1, 0x8e, 0xca, 0x91, + 0x4d, 0x74, 0xd3, 0x2c, 0x8f, 0xa0, 0x26, 0x94, + 0x06, 0x9a, 0x7c, 0xe5, 0x9b, 0xeb, 0xb3, 0x79, + 0xb2, 0xe2, 0x77, 0x34, 0x36, 0x57, 0x4e, 0xd1, + 0x29, 0x00, 0x0a, 0xbc, 0x1d, 0x27, 0x42, 0x0a, + 0xd9, 0xdd, 0x3b, 0xfa, 0x54, 0xbe, 0x75, 0x67, + 0x6d, 0x6d, 0x65, 0x97, 0x4b, 0x0b, 0x03, 0x1f, + 0x34, 0x58, 0xa4, 0x23, 0x74, 0x90, 0xde, 0x35, + 0x11, 0xb9, 0xdc, 0xf9, 0x15, 0xab, 0x30, 0xb5, + 0xb0, 0xb8, 0xcb, 0x72, 0xef, 0x6c, 0xbb, 0x16, + 0xb8, 0x61, 0x6e, 0x0a, 0x8a, 0xe2, 0xab, 0x5b, + 0x5d, 0xde, 0xc2, 0x08, 0xcc, 0x86, 0xca, 0xd6, + 0xe6, 0x0b, 0xf7, 0xcf, 0x18, 0x7b, 0xa1, 0x87, + 0x14, 0x75, 0xdc, 0x34, 0x27, 0xe4, 0x5c, 0x71, + 0xcb, 0x65, 0xd5, 0x72, 0x31, 0xf0, 0xb9, 0xd7, + 0x85, 0xf5, 0x6c, 0xd4, 0x38, 0x43, 0x45, 0x34, + 0x55, 0x58, 0x72, 0xcb, 0x3b, 0x0b, 0x6b, 0x4c, + 0xc3, 0xd9, 0x2e, 0xc5, 0xd1, 0x74, 0x2e, 0x0e, + 0x00, 0x53, 0x0d, 0x1a, 0xe5, 0x1d, 0x6c, 0x07, + 0xc2, 0x37, 0x14, 0xe9, 0x03, 0x4f, 0x62, 0x8c, + 0x41, 0xab, 0x30, 0xb2, 0x81, 0x99, 0x46, 0x5d, + 0x34, 0x31, 0xd2, 0x79, 0xc9, 0x0f, 0x22, 0xb8, + 0x9c, 0x40, 0xae, 0xad, 0xd5, 0x16, 0xf8, 0xe4, + 0x8d, 0xd8, 0x64, 0x63, 0x98, 0x77, 0x9c, 0x08, + 0x2a, 0xcb, 0x71, 0x98, 0x49, 0x63, 0xb3, 0xd9, + 0x7b, 0xe0, 0xa0, 0x9d, 0xe0, 0xb5, 0x92, 0x10, + 0x09, 0x68, 0x15, 0xa9, 0x15, 0xec, 0x2d, 0x17, + 0x73, 0xbb, 0x34, 0xd9, 0xb7, 0x5e, 0x5c, 0x00, + 0x6e, 0xad, 0x24, 0xa1, 0x92, 0x94, 0x24, 0x68, + 0xde, 0xf3, 0x90, 0x40, 0xb2, 0x39, 0x64, 0x38, + 0x63, 0x61, 0x90, 0x8d, 0x78, 0x41, 0x34, 0x3d, + 0xc0, 0xb0, 0x5a, 0xe6, 0xbb, 0x0b, 0x85, 0x08, + 0xd6, 0x0e, 0x82, 0xac, 0xb7, 0x63, 0x30, 0xcb, + 0x6c, 0x2c, 0xed, 0x72, 0xc8, 0xde, 0x1c, 0xf6, + 0x73, 0x97, 0x12, 0xb1, 0x98, 0x8d, 0x69, 0xab, + 0x85, 0x6a, 0xce, 0x58, 0xf9, 0xac, 0x72, 0xec, + 0xc2, 0x78, 0xf9, 0xbb, 0xa7, 0xbc, 0x32, 0x60, + 0x45, 0x2b, 0x43, 0xac, 0x8e, 0xe2, 0x08, 0x16, + 0xc5, 0x2b, 0x9d, 0x85, 0xac, 0x71, 0x20, 0x54, + 0xb4, 0x03, 0x5a, 0x76, 0x46, 0xe2, 0xf3, 0x81, + 0xf5, 0x68, 0xc2, 0x49, 0x71, 0xa0, 0x00, 0x12, + 0x49, 0xec, 0x6f, 0xab, 0x3e, 0xd0, 0xe6, 0xf3, + 0x58, 0x5e, 0x73, 0x16, 0x8d, 0x64, 0x6f, 0x92, + 0x36, 0x99, 0xa6, 0x2d, 0x04, 0x90, 0x71, 0x06, + 0xb7, 0x4a, 0xf1, 0x71, 0x7f, 0x35, 0x96, 0x41, + 0x97, 0xcb, 0x00, 0x6b, 0x67, 0x93, 0x13, 0x44, + 0xa4, 0x02, 0x58, 0x2a, 0x49, 0x22, 0xa8, 0x2b, + 0x92, 0x47, 0x24, 0x67, 0x0c, 0x8c, 0x73, 0x1c, + 0x75, 0x07, 0x0a, 0x78, 0x56, 0x63, 0x8a, 0x59, + 0x05, 0x63, 0x63, 0x9f, 0xd9, 0x68, 0x24, 0x77, + 0x94, 0xf5, 0xed, 0xcb, 0xf3, 0x0d, 0x99, 0x6d, + 0xd5, 0xc5, 0x1f, 0x3c, 0x53, 0x06, 0x09, 0x00, + 0x00, 0xd3, 0x7d, 0x6a, 0x93, 0x39, 0x95, 0xb6, + 0xf6, 0xd6, 0x79, 0x28, 0x7b, 0x0b, 0x1b, 0xfa, + 0xf2, 0xd6, 0x78, 0xce, 0x7d, 0x37, 0xf4, 0xeb, + 0x41, 0x06, 0xe6, 0xbc, 0x3b, 0x01, 0x69, 0x0f, + 0xf9, 0xb4, 0x38, 0xb8, 0x14, 0xa6, 0x6f, 0x96, + 0xc3, 0x6b, 0x6b, 0x63, 0x34, 0x0c, 0x76, 0x39, + 0xe2, 0xc7, 0x36, 0xb2, 0x01, 0xa0, 0x3a, 0xb7, + 0x35, 0xae, 0xfc, 0xf6, 0x5b, 0xab, 0x76, 0x65, + 0xb7, 0xef, 0x68, 0x8e, 0xff, 0x00, 0x0b, 0xb9, + 0xc3, 0x41, 0xae, 0x9b, 0xa0, 0xe8, 0x5e, 0xf3, + 0xdc, 0xd2, 0xf6, 0x2c, 0xba, 0xc7, 0x0b, 0xc0, + 0xf6, 0xab, 0x7c, 0x53, 0x78, 0xa3, 0x49, 0x2d, + 0x6d, 0x69, 0xa3, 0x46, 0xbd, 0xc4, 0x15, 0xb8, + 0xe3, 0x92, 0x5a, 0xf3, 0x4c, 0x74, 0x94, 0xf9, + 0xa0, 0x9f, 0x02, 0xd9, 0x6a, 0x0b, 0x6f, 0x21, + 0x69, 0x14, 0x70, 0x95, 0x95, 0x07, 0x41, 0xf2, + 0x95, 0x86, 0xf8, 0x66, 0x39, 0x6d, 0x9d, 0x9d, + 0x9e, 0x57, 0x1b, 0xc7, 0x88, 0x1f, 0x3c, 0xac, + 0x6e, 0x22, 0x5d, 0x4d, 0x55, 0xed, 0xad, 0x79, + 0xac, 0x66, 0x56, 0x65, 0x59, 0x84, 0xb1, 0xf3, + 0x77, 0x32, 0x48, 0xd6, 0x4e, 0x08, 0xa1, 0x34, + 0x3a, 0xcf, 0x02, 0x09, 0x3c, 0xeb, 0xde, 0x9b, + 0xe6, 0x0f, 0x09, 0x5c, 0x0b, 0xbf, 0x39, 0xf7, + 0xa6, 0xf9, 0x83, 0xc2, 0x57, 0x02, 0x0f, 0x76, + 0xfe, 0xf1, 0x1f, 0x9c, 0xdf, 0x0a, 0x9e, 0x50, + 0x36, 0xfe, 0xf1, 0x1f, 0x9c, 0xdf, 0x0a, 0x9d, + 0xaa, 0x0c, 0xa8, 0xbc, 0xdf, 0xde, 0x6c, 0xbc, + 0xff, 0x00, 0x94, 0x29, 0x3a, 0xa8, 0xcc, 0xdf, + 0xde, 0x6c, 0xbc, 0xff, 0x00, 0x94, 0x20, 0xc6, + 0x51, 0xef, 0x37, 0xbf, 0x68, 0x7e, 0xb1, 0x52, + 0x8a, 0x2b, 0x28, 0xf7, 0x9b, 0xdf, 0xb4, 0x3f, + 0x58, 0xa9, 0x54, 0x04, 0x44, 0x41, 0xe9, 0x9e, + 0x49, 0x5f, 0x0f, 0xbd, 0xf7, 0xdb, 0x8f, 0xb5, + 0x7f, 0xd6, 0x2b, 0xee, 0x0c, 0xd4, 0x57, 0xc4, + 0x2f, 0x7d, 0xf6, 0xe3, 0xed, 0x5f, 0xf5, 0x8a, + 0xc9, 0xe6, 0xfc, 0x28, 0xfa, 0x0f, 0xed, 0xbf, + 0xbf, 0xcc, 0x7c, 0x31, 0xff, 0x00, 0x9b, 0x42, + 0x22, 0x2c, 0x8f, 0xa4, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x06, 0x46, 0xa5, 0x70, 0xd8, + 0x11, 0xff, 0x00, 0x67, 0x9d, 0xff, 0x00, 0xe3, + 0xb7, 0xc1, 0x22, 0xa7, 0x8d, 0x4a, 0xe1, 0xf8, + 0x7a, 0xe6, 0xbf, 0xad, 0x2d, 0x09, 0xf1, 0xe7, + 0xb6, 0xf1, 0x3b, 0x98, 0x9b, 0xfd, 0xe5, 0xd3, + 0x07, 0xf1, 0x21, 0x87, 0xf9, 0xaf, 0x0f, 0x27, + 0x92, 0x7f, 0x63, 0xff, 0x00, 0x9e, 0xaa, 0x79, + 0xae, 0x85, 0x71, 0xd8, 0xef, 0xf4, 0xfe, 0xd0, + 0x7d, 0x81, 0xfa, 0x8f, 0x55, 0x07, 0xb6, 0x48, + 0xdc, 0x58, 0xf6, 0x96, 0xbd, 0x84, 0xb5, 0xc0, + 0xeb, 0x04, 0x6b, 0x0a, 0xdf, 0xb3, 0x00, 0xdb, + 0xec, 0x96, 0x7b, 0x76, 0xfd, 0x0c, 0x95, 0x86, + 0x36, 0x1d, 0xf2, 0x18, 0x5b, 0xe1, 0x72, 0x9f, + 0x2f, 0xf7, 0xfe, 0x12, 0x8f, 0xe6, 0xb3, 0x5f, + 0x4b, 0x31, 0x1c, 0x77, 0xe4, 0xc3, 0x11, 0xef, + 0xfa, 0xa1, 0xeb, 0x61, 0x9f, 0x6e, 0xcc, 0xb3, + 0x38, 0x7d, 0xd3, 0x44, 0x90, 0x46, 0xd6, 0xc9, + 0x23, 0x0e, 0x90, 0x43, 0x01, 0x75, 0x0f, 0x02, + 0xd1, 0x97, 0x6d, 0xd6, 0x65, 0x26, 0x67, 0x18, + 0xbe, 0x11, 0xbf, 0x2e, 0x99, 0xc2, 0x37, 0x5b, + 0x61, 0x14, 0x63, 0x0f, 0x8a, 0x29, 0xbf, 0x4a, + 0xac, 0x6c, 0xac, 0x32, 0x4d, 0xb3, 0x9b, 0x41, + 0x1c, 0x63, 0xc6, 0x30, 0x8a, 0x76, 0x48, 0x69, + 0x27, 0xc0, 0xab, 0x56, 0x8d, 0x92, 0x6b, 0xa8, + 0x62, 0x60, 0xc4, 0xe9, 0x24, 0x6b, 0x5a, 0x3b, + 0x2e, 0x34, 0x57, 0xdf, 0x6a, 0xd7, 0x16, 0xdf, + 0x6c, 0x4e, 0xbe, 0xfe, 0x2c, 0xf1, 0xe5, 0xb0, + 0x66, 0xf3, 0x3e, 0x7a, 0xd9, 0x63, 0xf5, 0xab, + 0x58, 0xd7, 0xf5, 0x7e, 0x9e, 0x33, 0x1c, 0xa5, + 0x27, 0xb5, 0x99, 0x54, 0x79, 0x4e, 0x79, 0x3d, + 0xb4, 0x03, 0x0d, 0xbb, 0x88, 0x92, 0x36, 0xef, + 0x07, 0xe9, 0xa7, 0x70, 0xa8, 0xfc, 0xbe, 0xf6, + 0xe7, 0x2f, 0xbb, 0x8a, 0xf2, 0xd8, 0x86, 0x4f, + 0x19, 0x38, 0x09, 0x15, 0x1a, 0x46, 0xf2, 0xb0, + 0xfe, 0x23, 0x4c, 0xc9, 0x33, 0xee, 0x6d, 0x86, + 0xa6, 0x28, 0x98, 0xd7, 0x76, 0x09, 0xab, 0xbe, + 0x55, 0x57, 0xd2, 0x4b, 0x48, 0x5c, 0xb2, 0x46, + 0x99, 0x2d, 0xf1, 0x6a, 0xf2, 0x53, 0x39, 0x7c, + 0x9e, 0x18, 0xc9, 0x1b, 0xe2, 0xd8, 0xe9, 0xae, + 0xbc, 0x75, 0xe3, 0xed, 0xf9, 0x2f, 0x1b, 0x77, + 0x9c, 0xe6, 0x11, 0xb2, 0xd6, 0xc6, 0x37, 0x8e, + 0x62, 0xf6, 0xd9, 0xb2, 0x4c, 0xca, 0x0d, 0x2e, + 0x2e, 0xdf, 0xdc, 0xd4, 0xb1, 0x98, 0x5f, 0x1d, + 0x91, 0xca, 0xec, 0xf2, 0xec, 0xb5, 0x8d, 0x6d, + 0xfd, 0xcc, 0x62, 0x6b, 0x99, 0xdc, 0xd0, 0xe7, + 0x69, 0xdc, 0xe1, 0xaa, 0xe3, 0xdb, 0xe2, 0x05, + 0xe6, 0x54, 0xed, 0xc6, 0xd9, 0xc6, 0x4f, 0x68, + 0x38, 0xa7, 0xe2, 0x2b, 0x1c, 0xec, 0xc2, 0xd2, + 0xe0, 0x0f, 0xd5, 0x4d, 0x6c, 0xdc, 0x27, 0x73, + 0x59, 0x3e, 0x02, 0xbb, 0xde, 0xd3, 0x13, 0x96, + 0x63, 0xc6, 0x36, 0xe9, 0xee, 0x79, 0x9e, 0x5b, + 0x06, 0x3b, 0x63, 0xf2, 0x58, 0xa6, 0xbf, 0xed, + 0xe4, 0x8c, 0xd7, 0xbd, 0x7c, 0x22, 0xf7, 0xaf, + 0xdb, 0xb9, 0xdb, 0x96, 0xdf, 0x1d, 0xaf, 0xcb, + 0x6f, 0x32, 0xec, 0xd1, 0xac, 0x75, 0xfd, 0xb4, + 0x66, 0x5b, 0x5b, 0x96, 0x80, 0xd2, 0x69, 0xd8, + 0xdc, 0xa1, 0xa0, 0x3b, 0xea, 0x8c, 0xe0, 0x01, + 0x02, 0x9a, 0x77, 0x7b, 0x7a, 0x15, 0xaf, 0xf0, + 0xf1, 0x84, 0x66, 0x77, 0x73, 0x91, 0xfa, 0xa8, + 0x2d, 0x1e, 0x1e, 0x77, 0xb1, 0x39, 0xa5, 0xa3, + 0xe8, 0x15, 0x56, 0x91, 0xd8, 0xe4, 0x73, 0xc6, + 0x80, 0xf7, 0x17, 0x0e, 0xed, 0x4a, 0xe3, 0x92, + 0x66, 0x69, 0x59, 0x9f, 0x19, 0xd5, 0xbf, 0xc9, + 0xd2, 0x31, 0x79, 0x8f, 0x33, 0x87, 0x1f, 0x0c, + 0x75, 0xec, 0xda, 0x2b, 0xec, 0xa4, 0xdb, 0xee, + 0x88, 0x7b, 0xb5, 0xba, 0xb8, 0xb3, 0xb8, 0x17, + 0x16, 0xcf, 0xe6, 0xe6, 0x8e, 0xb8, 0x1c, 0x37, + 0x15, 0xa7, 0x63, 0xe6, 0x96, 0x6c, 0xaf, 0x68, + 0x65, 0x95, 0xee, 0x91, 0xef, 0xb7, 0x0e, 0x73, + 0xdc, 0x6a, 0x49, 0x22, 0x5d, 0x25, 0x54, 0x0e, + 0xb2, 0xad, 0xbb, 0x15, 0xfc, 0xa3, 0x3f, 0xff, + 0x00, 0xc6, 0x6f, 0x82, 0x55, 0x38, 0x66, 0x77, + 0x44, 0x6b, 0xc3, 0xea, 0xff, 0x00, 0xe5, 0x4f, + 0xf3, 0x4a, 0xd7, 0xd3, 0xe4, 0xb6, 0x91, 0xbb, + 0x5c, 0x75, 0xd7, 0xdb, 0xa7, 0x76, 0xbc, 0x15, + 0x30, 0x74, 0x83, 0x5a, 0x1d, 0x75, 0xdd, 0x5e, + 0xe2, 0x8e, 0x7b, 0x99, 0x99, 0x0c, 0x2d, 0x32, + 0x4a, 0xf2, 0x1a, 0xd6, 0x8d, 0x25, 0xc4, 0xaf, + 0x03, 0x70, 0x69, 0x3b, 0x94, 0x1a, 0xf4, 0xef, + 0x2b, 0xad, 0xa5, 0xbd, 0xa6, 0xc7, 0xe5, 0xcd, + 0xcc, 0x2f, 0x18, 0xd9, 0x73, 0xab, 0xa6, 0xfe, + 0xa2, 0x03, 0xa4, 0x46, 0x08, 0xd7, 0xd8, 0xec, + 0xf0, 0x2a, 0xd2, 0x9b, 0xb8, 0xfe, 0xac, 0x7d, + 0xce, 0xde, 0x6f, 0xcd, 0x76, 0x62, 0x2b, 0x48, + 0xee, 0x66, 0xc9, 0x3b, 0x71, 0xe3, 0x8f, 0xba, + 0x7d, 0xff, 0x00, 0xb3, 0x1e, 0xd6, 0xac, 0xfb, + 0x9a, 0xc8, 0xb6, 0x6e, 0xdf, 0x20, 0xa8, 0x75, + 0xed, 0xcb, 0xc4, 0xf7, 0x54, 0xd3, 0x84, 0x02, + 0x1d, 0xdf, 0x34, 0x03, 0xb4, 0xb5, 0x6d, 0x4b, + 0x44, 0x7b, 0x2d, 0xb3, 0xec, 0x6e, 0xa3, 0x1b, + 0x8f, 0xd1, 0x6f, 0x1a, 0xad, 0x5e, 0x5d, 0xdc, + 0x5e, 0xdd, 0x49, 0x73, 0x74, 0xf3, 0x24, 0xd2, + 0xbb, 0x13, 0x9e, 0x77, 0x55, 0x9b, 0x3e, 0xff, + 0x00, 0xb9, 0xd8, 0xcc, 0x92, 0xe5, 0xa7, 0x10, + 0x80, 0xba, 0x17, 0x9d, 0xe7, 0x53, 0xf4, 0x17, + 0x5d, 0xd1, 0x68, 0xc9, 0xa7, 0x84, 0x56, 0x22, + 0xbf, 0x06, 0x19, 0xf2, 0xf3, 0x82, 0xfe, 0x57, + 0x7c, 0xc5, 0xaf, 0x93, 0x3e, 0x4b, 0x64, 0x9f, + 0x67, 0x73, 0x25, 0x27, 0xfc, 0x1c, 0xff, 0x00, + 0x87, 0xcf, 0x70, 0xda, 0x58, 0x06, 0xe1, 0x64, + 0x80, 0xf2, 0x4a, 0x83, 0xcc, 0xc6, 0x1c, 0xca, + 0xed, 0xbb, 0x82, 0x79, 0x00, 0x1f, 0xdb, 0x2a, + 0x7f, 0xf0, 0xf2, 0x3a, 0xe7, 0xdc, 0xfb, 0xb4, + 0x32, 0xda, 0x07, 0xc8, 0xf3, 0xbd, 0x51, 0x87, + 0xfb, 0xca, 0xbb, 0x79, 0x20, 0x9e, 0xe6, 0x79, + 0xc6, 0x91, 0x2c, 0x8f, 0x70, 0xee, 0xba, 0xbe, + 0x02, 0xa9, 0x6f, 0xe1, 0xd3, 0xf6, 0xac, 0xd3, + 0x8f, 0x8f, 0x9f, 0xcf, 0xa7, 0xe5, 0x61, 0xff, + 0x00, 0xea, 0x4a, 0xec, 0x61, 0xff, 0x00, 0xec, + 0xd6, 0x5d, 0x97, 0x3b, 0x87, 0x0b, 0x95, 0x86, + 0x4c, 0x59, 0x85, 0x86, 0xd3, 0x65, 0xc3, 0xc6, + 0x92, 0xd6, 0xe5, 0xd7, 0x30, 0xb7, 0x76, 0x95, + 0xc4, 0x70, 0xf2, 0x4f, 0x0a, 0xaf, 0x6c, 0x5f, + 0xfa, 0x9e, 0xc7, 0xce, 0x77, 0xd4, 0x72, 0x98, + 0xc9, 0xae, 0xdb, 0x06, 0xdf, 0x5e, 0xdb, 0xc8, + 0x7f, 0x55, 0x79, 0x24, 0xd6, 0xef, 0x1b, 0xf8, + 0xb4, 0xb7, 0xbe, 0x15, 0xf1, 0xff, 0x00, 0x0e, + 0xb1, 0xd5, 0x33, 0x5f, 0xfd, 0xd1, 0xa3, 0x27, + 0x9f, 0xac, 0xcf, 0x9a, 0xc9, 0x7a, 0x7d, 0xf8, + 0x30, 0xe3, 0xcd, 0x5f, 0xff, 0x00, 0x1e, 0x4d, + 0xd3, 0xfe, 0x08, 0xfd, 0x88, 0x89, 0xac, 0xcc, + 0x6e, 0x73, 0x29, 0x07, 0xea, 0x72, 0xd8, 0x5f, + 0x31, 0x27, 0x56, 0x22, 0x30, 0xb4, 0x78, 0x57, + 0x66, 0x6d, 0x2b, 0xe7, 0xd8, 0x3c, 0xbe, 0x69, + 0x09, 0x2f, 0x96, 0xed, 0xef, 0x71, 0xec, 0x9e, + 0x78, 0xfc, 0xab, 0x17, 0x16, 0xae, 0xc8, 0xf6, + 0x63, 0x31, 0x85, 0xc3, 0x0c, 0xf7, 0xd7, 0xa6, + 0xdc, 0x7d, 0x94, 0x46, 0xbc, 0x7c, 0x2b, 0x19, + 0x95, 0x3f, 0xdb, 0xdc, 0xb3, 0xff, 0x00, 0x24, + 0xd7, 0x82, 0x55, 0x31, 0x13, 0x5a, 0x5a, 0x9f, + 0xe8, 0x9b, 0x4f, 0xe3, 0xa2, 0xb6, 0xb5, 0x72, + 0xf9, 0x8c, 0x5e, 0x63, 0x84, 0xd6, 0xde, 0x6b, + 0x1e, 0x3c, 0x7a, 0xcf, 0xea, 0x52, 0xb6, 0x9f, + 0xd3, 0x64, 0x8e, 0x5d, 0x97, 0xd9, 0xe6, 0x3b, + 0x15, 0x67, 0x6d, 0x7b, 0x72, 0x2d, 0x21, 0xe7, + 0x5c, 0xf1, 0x29, 0x20, 0x78, 0xc1, 0xcf, 0x01, + 0xbe, 0x32, 0xe5, 0x3b, 0x1f, 0xb3, 0x34, 0xa8, + 0xcf, 0x19, 0x5d, 0xea, 0xb3, 0x8d, 0x68, 0xbe, + 0xa1, 0xfc, 0x3a, 0xb2, 0xec, 0xdc, 0x9a, 0x70, + 0xc8, 0xaa, 0x74, 0xd2, 0x34, 0x0a, 0x77, 0x14, + 0x65, 0xbc, 0x46, 0xd8, 0x9a, 0xeb, 0xfe, 0xdc, + 0x2f, 0xe5, 0x7c, 0xbe, 0x6c, 0x93, 0x9a, 0xf4, + 0xf3, 0x37, 0xc5, 0x5f, 0x51, 0x93, 0xe9, 0xad, + 0x62, 0x63, 0xee, 0x5e, 0xb6, 0xc2, 0xd6, 0xde, + 0xd3, 0x63, 0xf2, 0xdb, 0x6b, 0x79, 0x7d, 0xa2, + 0x06, 0x4e, 0x03, 0x25, 0xa8, 0xf1, 0x86, 0x09, + 0x0e, 0xe7, 0x65, 0x43, 0xda, 0xed, 0xd6, 0xd0, + 0x43, 0x14, 0x56, 0xf0, 0x3d, 0x85, 0x91, 0xb4, + 0x46, 0xc1, 0xcd, 0x82, 0x74, 0x68, 0x03, 0xb2, + 0x57, 0x6e, 0x78, 0x70, 0xec, 0x0e, 0x4c, 0x7f, + 0xc5, 0x14, 0x03, 0xcd, 0x95, 0x6a, 0xd9, 0x4c, + 0xb2, 0xda, 0xca, 0xd6, 0x4d, 0xa5, 0xcc, 0xc5, + 0x2d, 0xad, 0x74, 0xdb, 0x30, 0xfe, 0x7c, 0x9b, + 0x84, 0x77, 0x74, 0x05, 0x36, 0xdd, 0x39, 0x34, + 0xaf, 0xd3, 0x1b, 0x62, 0x67, 0xe4, 0xe7, 0x86, + 0x30, 0x53, 0xc9, 0xda, 0xd9, 0xeb, 0x5c, 0xfb, + 0x33, 0x65, 0xa5, 0x62, 0x63, 0xeb, 0xb5, 0xed, + 0x6e, 0x15, 0xae, 0x9c, 0xd3, 0x1b, 0x43, 0x9f, + 0xe6, 0x16, 0x1b, 0x3a, 0xcb, 0x6c, 0xc1, 0xec, + 0x93, 0x36, 0xbf, 0x04, 0xf3, 0x60, 0x50, 0x45, + 0x19, 0xd7, 0x88, 0x0d, 0xe1, 0xa3, 0xb6, 0xbe, + 0x79, 0x4a, 0x00, 0x07, 0x6a, 0xab, 0xb3, 0x36, + 0xcc, 0xee, 0x33, 0x3b, 0xe9, 0x6f, 0x6e, 0x4d, + 0x5f, 0x21, 0xd4, 0x35, 0x35, 0xa3, 0x43, 0x58, + 0xde, 0xc0, 0x5c, 0x6e, 0x1b, 0xab, 0x96, 0x5c, + 0x9b, 0xe7, 0xfc, 0x1b, 0xff, 0x00, 0x97, 0xf9, + 0x3f, 0x4f, 0x8a, 0x7e, 0xde, 0xe5, 0xa7, 0x75, + 0xe2, 0xbf, 0x6d, 0x75, 0xf6, 0x47, 0xc1, 0x82, + 0x11, 0x64, 0x9a, 0xac, 0x2e, 0x4d, 0xdf, 0x01, + 0x11, 0x14, 0x82, 0x22, 0x20, 0x2c, 0x8d, 0x6b, + 0x0b, 0x23, 0x5a, 0x06, 0xeb, 0x57, 0xdc, 0x6d, + 0xff, 0x00, 0x97, 0xdb, 0x7d, 0x9b, 0x3e, 0xa8, + 0x5f, 0x0e, 0xdd, 0x6f, 0x69, 0x7d, 0xca, 0x0f, + 0x70, 0xb6, 0xf3, 0x19, 0xf5, 0x42, 0xd5, 0xe4, + 0xfc, 0x6c, 0xf9, 0xef, 0xee, 0x3f, 0xb7, 0x07, + 0xed, 0x5f, 0xf4, 0x55, 0x91, 0xad, 0x57, 0xdd, + 0xe5, 0x1e, 0xd9, 0x56, 0x01, 0xad, 0x57, 0xdd, + 0xe5, 0x1e, 0xd9, 0x5b, 0x1f, 0x38, 0x2f, 0x51, + 0x7e, 0xd5, 0x9e, 0x73, 0x7c, 0x21, 0x79, 0x5e, + 0xa2, 0xfd, 0xab, 0x3c, 0xe6, 0xf8, 0x42, 0x0e, + 0x6d, 0xb0, 0xfe, 0x65, 0x1f, 0xd8, 0x8f, 0xac, + 0xe5, 0x04, 0xa7, 0x76, 0xc3, 0xf9, 0x94, 0x7f, + 0x62, 0x3e, 0xb3, 0x94, 0x12, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0xc6, 0x8d, 0xdd, 0x4b, 0x28, + 0x82, 0x6a, 0x3b, 0xcc, 0xb3, 0x30, 0xcb, 0xa0, + 0xb3, 0xbf, 0x94, 0xdb, 0x4d, 0x6c, 0x29, 0x1c, + 0xa0, 0x54, 0x61, 0xd5, 0x43, 0xdc, 0x58, 0x96, + 0xf7, 0x2e, 0xcb, 0xac, 0x27, 0xb4, 0xcb, 0xe5, + 0x75, 0xc4, 0xd7, 0x3a, 0x24, 0x98, 0x8c, 0x2d, + 0x0d, 0xec, 0x70, 0xa8, 0x65, 0x8a, 0xee, 0x57, + 0xb8, 0x82, 0xc7, 0x68, 0x6c, 0xc6, 0xcc, 0xb6, + 0x3b, 0xc2, 0x44, 0x32, 0x4c, 0x58, 0x5e, 0xdd, + 0x25, 0x84, 0xea, 0x75, 0x37, 0x75, 0x2e, 0x59, + 0xee, 0xb2, 0xfb, 0x1c, 0xb6, 0x5b, 0x1b, 0x09, + 0x5d, 0x71, 0x25, 0xc9, 0x06, 0x69, 0x48, 0xc2, + 0x30, 0x8d, 0xe5, 0xc6, 0xec, 0xc8, 0x9c, 0xa9, + 0xb9, 0x6e, 0x00, 0x00, 0x90, 0x49, 0xce, 0x57, + 0x4f, 0x02, 0xe2, 0xdc, 0x41, 0x95, 0x33, 0x97, + 0x5d, 0xe5, 0xaf, 0xca, 0x5f, 0x96, 0xde, 0xca, + 0xe8, 0x6b, 0x2f, 0x38, 0x1e, 0xd1, 0x5a, 0xea, + 0xe2, 0x50, 0xc8, 0x82, 0x66, 0xda, 0xef, 0x2e, + 0xb8, 0xb0, 0x76, 0x57, 0x77, 0x29, 0x8d, 0x91, + 0x3c, 0xba, 0xda, 0xe2, 0x95, 0x14, 0x27, 0x74, + 0x77, 0x56, 0x2e, 0x6f, 0x2c, 0x2d, 0x32, 0xc7, + 0xe5, 0xb6, 0x12, 0x9b, 0x87, 0xcc, 0x6b, 0x3c, + 0xe4, 0x61, 0x04, 0x6f, 0x00, 0xa1, 0xd1, 0x06, + 0x34, 0x6e, 0x77, 0x35, 0xd7, 0xbc, 0xac, 0x3e, + 0xd5, 0x90, 0xcf, 0x95, 0xdb, 0x59, 0x4f, 0x71, + 0x2c, 0x42, 0x20, 0x1d, 0x23, 0x23, 0x61, 0xd2, + 0xf3, 0xaf, 0x17, 0x8a, 0xea, 0xd0, 0xaa, 0xfa, + 0x20, 0x93, 0xbb, 0x87, 0x67, 0x9b, 0x6d, 0x2b, + 0xad, 0x6e, 0x67, 0x92, 0xe2, 0x9e, 0x23, 0x5c, + 0xda, 0x34, 0x92, 0x40, 0x3f, 0x98, 0x37, 0x16, + 0xff, 0x00, 0x6c, 0xcb, 0xb3, 0x2b, 0x08, 0x2d, + 0xaf, 0xa6, 0x36, 0x97, 0x16, 0xd4, 0x0c, 0x94, + 0x37, 0x10, 0x73, 0x47, 0x69, 0x42, 0xa2, 0x09, + 0x7b, 0xdb, 0xeb, 0x1b, 0x7c, 0xb7, 0xab, 0x32, + 0xf7, 0x99, 0x83, 0xce, 0x39, 0xa6, 0x22, 0x80, + 0xd3, 0x70, 0x05, 0xea, 0x2b, 0xdc, 0xbf, 0x30, + 0xcb, 0xa2, 0xb1, 0xbf, 0x94, 0xdb, 0xcd, 0x6d, + 0xa2, 0x29, 0xa9, 0x88, 0x61, 0xa5, 0x28, 0x54, + 0x32, 0x20, 0x97, 0xbb, 0xbd, 0xb0, 0xb5, 0xcb, + 0x5d, 0x96, 0xe5, 0xf2, 0x19, 0xcc, 0xae, 0x0e, + 0x9e, 0x72, 0x30, 0x83, 0x4d, 0xc1, 0xc0, 0xa1, + 0xff, 0x00, 0x2f, 0xca, 0x8b, 0x28, 0x82, 0x4f, + 0x31, 0xbf, 0xb4, 0xb8, 0xca, 0xac, 0x2d, 0xa2, + 0x79, 0x32, 0xdb, 0xd7, 0x9c, 0x14, 0x22, 0x95, + 0x14, 0xdd, 0x5e, 0xf2, 0x9c, 0xc6, 0xd5, 0xb6, + 0x77, 0x19, 0x75, 0xf9, 0x22, 0xda, 0x51, 0x56, + 0x3c, 0x02, 0xec, 0x2f, 0xed, 0x00, 0x7b, 0x6a, + 0x25, 0x61, 0x04, 0xf4, 0x17, 0x79, 0x3c, 0xd9, + 0x3c, 0x59, 0x7d, 0xdd, 0xc3, 0xe3, 0x74, 0x6f, + 0x2e, 0xf1, 0x18, 0xe3, 0xba, 0x69, 0xf9, 0xa9, + 0x05, 0xf6, 0x4d, 0x95, 0xb6, 0x57, 0xd8, 0x19, + 0x6e, 0x2e, 0x9e, 0xd2, 0xc6, 0xb9, 0xe3, 0x08, + 0x68, 0x3d, 0xba, 0x28, 0x24, 0x40, 0x24, 0x92, + 0x4b, 0xb5, 0x93, 0x53, 0xdb, 0x52, 0xb9, 0x65, + 0xfd, 0x97, 0xb1, 0x4d, 0x96, 0xe6, 0x05, 0xcc, + 0x86, 0x47, 0x63, 0x63, 0xdb, 0xa4, 0xb5, 0xca, + 0x29, 0x10, 0x4e, 0xda, 0x3f, 0x22, 0xca, 0xa5, + 0x37, 0x51, 0xdc, 0xba, 0xf6, 0x66, 0x02, 0x22, + 0x63, 0x5b, 0x84, 0x0a, 0xef, 0xad, 0x19, 0x7e, + 0x6b, 0x03, 0x23, 0xcc, 0x8d, 0xd3, 0xcb, 0x66, + 0xbc, 0x61, 0x0d, 0x00, 0x13, 0xe3, 0x10, 0xed, + 0x1d, 0xf5, 0x12, 0x95, 0x41, 0xba, 0xc6, 0x51, + 0x05, 0xec, 0x13, 0xba, 0xb8, 0x63, 0x91, 0x8f, + 0x75, 0x2a, 0x74, 0x07, 0x02, 0x75, 0x76, 0x94, + 0xeb, 0xf3, 0x8c, 0xb1, 0x93, 0x66, 0x17, 0x70, + 0x4c, 0x4c, 0xd7, 0x31, 0xb5, 0xb0, 0x0c, 0x0f, + 0x14, 0xd1, 0x84, 0xeb, 0x03, 0x75, 0x56, 0xd6, + 0x50, 0x60, 0x8d, 0x1a, 0xa8, 0x77, 0x3b, 0xa1, + 0x58, 0xce, 0x71, 0x97, 0xc9, 0x79, 0x96, 0xde, + 0x3e, 0x42, 0x24, 0x81, 0xae, 0x6d, 0xc0, 0xc2, + 0xe3, 0x4f, 0x12, 0x83, 0x73, 0x4d, 0x49, 0x55, + 0xd5, 0x84, 0x12, 0xf6, 0x79, 0xa5, 0xbc, 0x19, + 0xe3, 0xef, 0x4b, 0xcf, 0xb3, 0x48, 0xe7, 0x55, + 0xd4, 0xd3, 0x85, 0xda, 0x89, 0x1d, 0xb0, 0x97, + 0x79, 0x9d, 0xbd, 0xc6, 0x7d, 0x15, 0xeb, 0x5c, + 0x7d, 0x9a, 0x17, 0xc7, 0x85, 0xd4, 0x3e, 0x4b, + 0x48, 0x71, 0xf1, 0x54, 0x4a, 0x20, 0xec, 0xce, + 0x6e, 0x61, 0xbb, 0xcc, 0xa6, 0xb8, 0x80, 0xe2, + 0x89, 0xe4, 0x51, 0xc4, 0x11, 0xb8, 0x37, 0xd7, + 0x1a, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x92, 0xd9, 0xbf, 0xe7, 0x36, 0xfd, 0xb7, 0x7d, + 0x42, 0xa3, 0x54, 0x96, 0xcd, 0xff, 0x00, 0x39, + 0xb7, 0xed, 0xbb, 0xea, 0x14, 0x13, 0x59, 0x87, + 0xbe, 0xcd, 0xe7, 0x7c, 0x81, 0x73, 0xae, 0x8c, + 0xc3, 0xdf, 0x66, 0xf3, 0xbe, 0x40, 0xb9, 0xd0, + 0x13, 0x71, 0x11, 0x06, 0xad, 0xb5, 0x1f, 0xe5, + 0x16, 0x8e, 0xde, 0x34, 0xe1, 0x01, 0x57, 0x5f, + 0x71, 0x6e, 0x76, 0x6e, 0x3b, 0x73, 0x23, 0x4c, + 0x82, 0xe8, 0xbc, 0xc5, 0x51, 0x5c, 0x38, 0x1c, + 0x2b, 0x4a, 0x2b, 0x85, 0xed, 0x9b, 0x73, 0x9c, + 0x95, 0xf6, 0x80, 0xd2, 0xe6, 0x2a, 0x73, 0x7e, + 0x73, 0x75, 0x70, 0x8d, 0x0a, 0x87, 0x25, 0x85, + 0xc4, 0x6f, 0x31, 0xbd, 0x98, 0x1e, 0xc3, 0x47, + 0x36, 0xba, 0xa9, 0xb8, 0xb3, 0xe6, 0xad, 0xf7, + 0x4e, 0xda, 0xeb, 0xf4, 0xbd, 0xaf, 0xe5, 0x79, + 0xb0, 0x46, 0x0d, 0x99, 0x32, 0xf6, 0xad, 0x5c, + 0xdd, 0xca, 0xff, 0x00, 0xed, 0x76, 0x5f, 0xcf, + 0x04, 0xd9, 0x06, 0x5d, 0x0f, 0x3a, 0x0c, 0xd6, + 0xee, 0x95, 0xae, 0x8a, 0xbe, 0x38, 0x69, 0x77, + 0x8a, 0x69, 0xbd, 0xa1, 0x33, 0xbb, 0x88, 0x26, + 0xb7, 0xcb, 0x83, 0x24, 0x6b, 0xcc, 0x56, 0x8d, + 0x6b, 0xc3, 0x4d, 0x4b, 0x5d, 0x88, 0x9a, 0x70, + 0x2e, 0x2f, 0x65, 0x9a, 0x9f, 0xd2, 0x9e, 0xcb, + 0x37, 0xe4, 0x57, 0x3d, 0x32, 0x74, 0x4b, 0xd0, + 0xa7, 0x98, 0xf2, 0x95, 0xb5, 0x27, 0xd4, 0xe3, + 0x9e, 0xdd, 0xf2, 0xe4, 0xd2, 0x2f, 0x1f, 0xfd, + 0xde, 0x3a, 0x7e, 0xf2, 0x5a, 0x76, 0x5b, 0xe7, + 0x56, 0x36, 0x4e, 0x6d, 0xdc, 0x56, 0xf7, 0x56, + 0x91, 0x73, 0x13, 0xb2, 0x62, 0x45, 0x43, 0x74, + 0x87, 0x34, 0xee, 0xeb, 0x5c, 0xf9, 0x9c, 0xf6, + 0x32, 0x66, 0x31, 0x47, 0x63, 0x84, 0xc3, 0x6e, + 0xc1, 0x10, 0x91, 0xa0, 0x0c, 0x6e, 0x68, 0xf1, + 0x9e, 0x7b, 0xab, 0x84, 0xda, 0x4a, 0x77, 0x01, + 0xa6, 0xaa, 0x95, 0xb2, 0x1b, 0x77, 0xb1, 0xd8, + 0x9c, 0x46, 0x8d, 0x42, 0xbb, 0xea, 0x6b, 0x5b, + 0x6e, 0x8d, 0x69, 0xa7, 0xbd, 0x9f, 0x26, 0x4f, + 0x29, 0x4c, 0x56, 0x8a, 0xf9, 0x98, 0xc9, 0x58, + 0xa6, 0x48, 0xc7, 0x8e, 0x2d, 0x1f, 0xad, 0xe3, + 0xaf, 0x3d, 0x16, 0x7c, 0xc9, 0xae, 0x76, 0xcd, + 0xe5, 0x61, 0xad, 0x2e, 0x3b, 0xc0, 0x13, 0xb8, + 0x77, 0x82, 0xf7, 0xb3, 0x10, 0xcb, 0x0b, 0x2f, + 0x6e, 0x26, 0x69, 0x8e, 0xdb, 0x9a, 0x20, 0x97, + 0xe8, 0x04, 0xeb, 0xd4, 0x54, 0x7d, 0xbe, 0xd0, + 0x66, 0x96, 0xd0, 0x32, 0xde, 0x19, 0x5a, 0xd8, + 0xa2, 0x18, 0x58, 0x0b, 0x18, 0x74, 0x0e, 0x15, + 0xae, 0xf3, 0x39, 0xcc, 0xaf, 0x59, 0xcd, 0x5c, + 0x4e, 0x5d, 0x1e, 0xeb, 0x1b, 0x46, 0x83, 0xdb, + 0x0d, 0x02, 0xab, 0x67, 0x28, 0x7c, 0xdd, 0x7d, + 0x93, 0x1e, 0xda, 0xc2, 0x4e, 0x09, 0x4e, 0x5b, + 0xb3, 0xb1, 0xdf, 0x59, 0xb5, 0xa2, 0xe2, 0x79, + 0x0b, 0x64, 0x99, 0xc3, 0x11, 0x68, 0x24, 0x8e, + 0xe5, 0x28, 0xbd, 0x07, 0x5d, 0x4b, 0xb2, 0xf7, + 0x73, 0xdd, 0x39, 0xef, 0x32, 0xcc, 0xd7, 0x34, + 0xbf, 0x49, 0x2d, 0x06, 0x36, 0xd4, 0x76, 0x34, + 0x28, 0xbb, 0x1c, 0xe2, 0xf6, 0xc6, 0x27, 0x41, + 0x13, 0x9a, 0xe8, 0x5c, 0x71, 0x73, 0x4f, 0x68, + 0x70, 0xee, 0x55, 0x7b, 0x19, 0xfe, 0x69, 0xfa, + 0xe0, 0x64, 0x0e, 0x13, 0x0a, 0x39, 0xa5, 0xad, + 0x2d, 0x14, 0x14, 0x14, 0x1f, 0x9b, 0xa1, 0x42, + 0xce, 0xc8, 0x5a, 0xe7, 0x6c, 0x94, 0x8d, 0x68, + 0x24, 0xfb, 0x40, 0xd0, 0x2b, 0x5d, 0x6d, 0xde, + 0x58, 0xcb, 0x1a, 0xe7, 0x6c, 0xd6, 0x60, 0x03, + 0x49, 0x38, 0xc5, 0x40, 0x15, 0x3a, 0x30, 0xee, + 0x05, 0x1f, 0x61, 0x9c, 0x5f, 0x65, 0xd1, 0x98, + 0xad, 0x9e, 0x04, 0x6e, 0x35, 0x2d, 0x73, 0x43, + 0x86, 0x2e, 0xc2, 0xcd, 0x9e, 0x73, 0x7f, 0x65, + 0x24, 0xb2, 0x40, 0xf0, 0x0c, 0xee, 0xc5, 0x23, + 0x4b, 0x41, 0x04, 0xf9, 0xbb, 0x88, 0x25, 0x6c, + 0xa7, 0xb9, 0x6e, 0xcc, 0x4e, 0x2d, 0x1c, 0xe6, + 0x4f, 0x04, 0xd5, 0x7e, 0x0a, 0x87, 0x06, 0xb8, + 0x87, 0x1e, 0xf2, 0xe5, 0xb7, 0x97, 0x35, 0xbc, + 0xcb, 0x6e, 0xee, 0xa6, 0xbe, 0x91, 0xb0, 0x40, + 0x28, 0x41, 0x26, 0x8f, 0x2e, 0x1e, 0x4f, 0xc8, + 0xb9, 0x20, 0xcd, 0xef, 0xe0, 0xb9, 0x96, 0xea, + 0x39, 0x29, 0x24, 0xe6, 0xb2, 0x82, 0xd0, 0x5a, + 0xef, 0xec, 0xac, 0xde, 0xe7, 0x17, 0xb7, 0xb1, + 0x88, 0xa5, 0x73, 0x5b, 0x08, 0x35, 0xe6, 0xa3, + 0x18, 0x5b, 0x5d, 0xff, 0x00, 0x15, 0x07, 0x6d, + 0xe8, 0xff, 0x00, 0xea, 0xb6, 0x1f, 0x6a, 0xee, + 0xf8, 0x7d, 0x57, 0x26, 0x43, 0x75, 0xec, 0xd9, + 0xb4, 0x0f, 0x3e, 0x43, 0xc9, 0x8d, 0xdd, 0xa7, + 0xe8, 0x5c, 0xf2, 0x5f, 0xdd, 0x49, 0x69, 0x1d, + 0x9b, 0xde, 0x0c, 0x31, 0x3b, 0x13, 0x1b, 0x40, + 0x34, 0xd0, 0xee, 0xad, 0xd9, 0x6e, 0x57, 0x77, + 0x7e, 0xf0, 0xeb, 0x70, 0x30, 0x46, 0xe6, 0xe3, + 0x79, 0x20, 0x61, 0xae, 0x9d, 0xde, 0xd2, 0x09, + 0x3c, 0xf2, 0x21, 0x97, 0x65, 0x6d, 0xb1, 0x1a, + 0xe6, 0xb8, 0x92, 0x57, 0x76, 0x58, 0xd3, 0xe2, + 0xfc, 0x8a, 0x32, 0xdf, 0x3b, 0xcc, 0xed, 0xa2, + 0x10, 0xc1, 0x39, 0x6c, 0x6d, 0xd0, 0x05, 0x05, + 0x02, 0xe9, 0xda, 0x6b, 0xc6, 0x5c, 0xe6, 0x45, + 0xac, 0x70, 0x7b, 0x20, 0x68, 0x8f, 0x10, 0xd4, + 0x49, 0xd2, 0xee, 0xfa, 0x88, 0xaa, 0x09, 0xbd, + 0x9e, 0xb9, 0x96, 0xeb, 0x68, 0x63, 0x9e, 0xe1, + 0xc5, 0xf2, 0xb9, 0xaf, 0xab, 0x8f, 0x61, 0x94, + 0x51, 0xb7, 0x96, 0xf7, 0x12, 0xdf, 0x4c, 0xc8, + 0xe1, 0x7b, 0x9c, 0xf9, 0x1d, 0x86, 0x80, 0xe9, + 0xa9, 0xd7, 0xa9, 0x78, 0xb4, 0xbb, 0x9e, 0xce, + 0x76, 0xdc, 0x5b, 0xb8, 0x36, 0x56, 0x82, 0x01, + 0x23, 0x16, 0xb5, 0xde, 0x76, 0x9b, 0x3a, 0x20, + 0x8e, 0x7c, 0x69, 0xde, 0x63, 0x41, 0xe1, 0xa2, + 0x09, 0x7c, 0xc2, 0xde, 0x19, 0xef, 0xf2, 0x8b, + 0x3b, 0xba, 0x3e, 0x46, 0xb0, 0x99, 0x9a, 0x77, + 0x74, 0x36, 0x8d, 0x3d, 0xb2, 0xd5, 0xc9, 0x71, + 0x7f, 0x99, 0x4d, 0x9e, 0x75, 0x7c, 0x44, 0xb2, + 0x18, 0xe6, 0x0d, 0x10, 0xc6, 0x30, 0x82, 0xc6, + 0x9f, 0xce, 0xa7, 0x61, 0x41, 0xba, 0xee, 0xe9, + 0xf7, 0x02, 0xe5, 0xf2, 0xb9, 0xd3, 0x34, 0x82, + 0xd9, 0x2b, 0xa6, 0xa1, 0x77, 0x4f, 0xb4, 0x59, + 0x9c, 0xf1, 0xe0, 0x2f, 0x63, 0x1c, 0x69, 0x59, + 0x18, 0xd0, 0x1e, 0x69, 0xd9, 0x41, 0x37, 0x1b, + 0xda, 0x36, 0xb6, 0xea, 0x23, 0xa0, 0xcd, 0x08, + 0x68, 0xec, 0xf8, 0x8d, 0x3f, 0x22, 0xaf, 0xd9, + 0x65, 0x92, 0xdd, 0x66, 0x9e, 0xc2, 0xec, 0x51, + 0xb8, 0x39, 0xdc, 0xe1, 0xa5, 0x70, 0x86, 0xee, + 0xaf, 0x37, 0x39, 0xb5, 0xed, 0xcc, 0xd1, 0x5c, + 0x48, 0xf0, 0x26, 0x87, 0xf6, 0x6f, 0x63, 0x43, + 0x4e, 0xe6, 0xba, 0x6b, 0xd4, 0xba, 0x26, 0xda, + 0x3c, 0xd2, 0x48, 0x8c, 0x78, 0x98, 0xc2, 0xe1, + 0x47, 0xc8, 0xc6, 0x00, 0xf2, 0x3b, 0x68, 0x24, + 0x32, 0x27, 0x8b, 0x0b, 0x7c, 0xdd, 0xd1, 0x1e, + 0x74, 0x5b, 0x91, 0x81, 0xc7, 0x40, 0x75, 0x31, + 0x00, 0x4d, 0x17, 0x96, 0xb9, 0xd9, 0xfe, 0x50, + 0xf6, 0xc8, 0x43, 0xb3, 0x1b, 0x23, 0x8c, 0x1f, + 0x9c, 0xc3, 0xb8, 0x3b, 0x9a, 0x3b, 0x6a, 0x12, + 0xde, 0xfa, 0xe6, 0xde, 0x09, 0xa0, 0x89, 0xc1, + 0xb1, 0xdc, 0x0a, 0x4d, 0x50, 0x1d, 0x50, 0x3c, + 0x1a, 0xd2, 0xce, 0xf6, 0xe2, 0xc6, 0x61, 0x3d, + 0xb3, 0x83, 0x24, 0xa1, 0x6e, 0x90, 0x1c, 0x28, + 0x7c, 0xed, 0x08, 0x26, 0xe2, 0xb9, 0xb9, 0x66, + 0xca, 0xc7, 0x25, 0x9c, 0x8e, 0x8e, 0x5b, 0x79, + 0x48, 0x90, 0xb3, 0x58, 0x05, 0xc5, 0xd4, 0x23, + 0xfb, 0x4b, 0x90, 0x3b, 0x35, 0xba, 0xca, 0x2e, + 0x2e, 0xe7, 0xbd, 0x93, 0x98, 0x6f, 0xea, 0xc4, + 0x4f, 0xd5, 0x25, 0x75, 0xe9, 0x5c, 0xb6, 0xb9, + 0xbd, 0xed, 0xa4, 0xd2, 0x4b, 0x13, 0x9a, 0x39, + 0xed, 0x32, 0xb0, 0xb5, 0xa5, 0x8e, 0xfe, 0xc2, + 0xc5, 0xf6, 0x6d, 0x79, 0x7c, 0xd0, 0xc9, 0x9c, + 0x04, 0x6d, 0xd2, 0xd8, 0x98, 0x03, 0x5b, 0x5d, + 0xfa, 0x20, 0x92, 0xcf, 0x43, 0xa7, 0xca, 0xb2, + 0xbb, 0xa6, 0x0a, 0xc6, 0x23, 0xc0, 0xf3, 0x4a, + 0xe1, 0x71, 0x0d, 0xd7, 0x4f, 0x34, 0xa4, 0xb0, + 0x49, 0x0e, 0xc8, 0xb7, 0x9c, 0x05, 0xa6, 0x49, + 0xc3, 0xe8, 0x46, 0x9d, 0x2e, 0x51, 0xf6, 0x19, + 0xd5, 0xfd, 0x8c, 0x66, 0x28, 0x9c, 0x1d, 0x19, + 0xd3, 0x81, 0xe0, 0x10, 0x2b, 0xbd, 0x55, 0xe6, + 0xeb, 0x39, 0xcc, 0x2e, 0xe0, 0x7d, 0xbc, 0xf2, + 0xe2, 0x89, 0xee, 0x0e, 0x23, 0x08, 0x06, 0xa3, + 0x55, 0x28, 0x83, 0x8f, 0x8b, 0xe4, 0x53, 0xbb, + 0x43, 0xfc, 0xbb, 0x2a, 0xfb, 0x0f, 0xee, 0xb1, + 0x41, 0x6b, 0xad, 0x78, 0x34, 0x7c, 0xab, 0xa2, + 0xe7, 0x30, 0xba, 0xba, 0x8e, 0x28, 0xa6, 0x70, + 0x73, 0x6d, 0xc5, 0x22, 0xa0, 0x02, 0x83, 0xb8, + 0x82, 0x5b, 0x66, 0x40, 0xf6, 0x5c, 0xcf, 0xec, + 0x0f, 0xd5, 0x72, 0xf1, 0x6d, 0xfe, 0x91, 0xb8, + 0xff, 0x00, 0xc8, 0x1e, 0x06, 0x28, 0xcb, 0x5c, + 0xc2, 0xee, 0xd1, 0x92, 0xb2, 0xd9, 0xc1, 0xa2, + 0x76, 0xe1, 0x78, 0x20, 0x1a, 0x8e, 0xee, 0xa5, + 0x86, 0x5f, 0x5c, 0x36, 0xc9, 0xd6, 0x2d, 0x70, + 0x16, 0xcf, 0x76, 0x37, 0x36, 0x80, 0x9c, 0x5b, + 0x9e, 0x37, 0x71, 0x04, 0xbe, 0x67, 0x03, 0xdf, + 0xb3, 0x99, 0x7c, 0xad, 0x69, 0x7b, 0x62, 0xa8, + 0x90, 0x01, 0x5a, 0x03, 0x51, 0x52, 0xb1, 0x1e, + 0x2b, 0x7d, 0x93, 0x9f, 0x9d, 0xa8, 0x37, 0x52, + 0xd1, 0x95, 0xd6, 0xe1, 0x46, 0xf8, 0xda, 0x7b, + 0x45, 0x70, 0xc1, 0x9e, 0xe6, 0x56, 0xf1, 0xc5, + 0x13, 0x24, 0x06, 0x28, 0x45, 0x1b, 0x19, 0x6b, + 0x48, 0x23, 0xb3, 0xf3, 0x96, 0xab, 0xfc, 0xce, + 0xef, 0x30, 0x73, 0x4d, 0xc3, 0x86, 0x18, 0xf4, + 0x35, 0x80, 0x61, 0x68, 0xae, 0xf0, 0x41, 0x37, + 0x9f, 0x5f, 0xdf, 0x47, 0x05, 0x8d, 0xcd, 0xa4, + 0xcf, 0x86, 0x09, 0xa2, 0xf1, 0xf9, 0xb3, 0xe2, + 0xe3, 0xd0, 0x78, 0x57, 0x0d, 0xf3, 0x33, 0x0f, + 0x64, 0xb2, 0x9e, 0xf6, 0xe9, 0xf2, 0x9b, 0x87, + 0x87, 0x0b, 0x77, 0xfe, 0x6d, 0x0e, 0x87, 0x2e, + 0x7b, 0x2c, 0xee, 0xfe, 0xca, 0x1e, 0x62, 0x32, + 0xd7, 0xc2, 0x34, 0xb5, 0x92, 0xb4, 0x3a, 0x9d, + 0xa5, 0xa2, 0xee, 0xfe, 0xea, 0xf2, 0x71, 0x71, + 0x70, 0xfc, 0x4f, 0x6d, 0x30, 0x50, 0x00, 0xd0, + 0x2b, 0xa8, 0x04, 0x12, 0x3b, 0x59, 0xfc, 0xdb, + 0xff, 0x00, 0xc4, 0xcf, 0x95, 0x7b, 0xcd, 0x7f, + 0xd3, 0xb9, 0x5f, 0x6d, 0xdf, 0x2a, 0x8a, 0xbc, + 0xbc, 0xb8, 0xbd, 0x9f, 0x9f, 0xb8, 0x70, 0x73, + 0xc0, 0x0d, 0xa8, 0x00, 0x54, 0x0e, 0xd2, 0xcc, + 0xb7, 0xf7, 0x53, 0xda, 0xc5, 0x6b, 0x2b, 0x81, + 0x8a, 0x0f, 0xd9, 0xb4, 0x0d, 0x5f, 0xda, 0x41, + 0x26, 0xc1, 0xff, 0x00, 0xd4, 0x1f, 0x4d, 0x35, + 0xb9, 0x1f, 0xdd, 0x0b, 0xa3, 0x39, 0xb9, 0x9f, + 0x2a, 0x86, 0xd6, 0xcf, 0x2e, 0xfd, 0x4c, 0x72, + 0xc6, 0x09, 0x95, 0x8d, 0xf1, 0x9e, 0xef, 0x3b, + 0x7d, 0x41, 0x8b, 0xeb, 0x91, 0x66, 0x6c, 0x71, + 0x0f, 0x67, 0x73, 0xb1, 0xe1, 0xa0, 0xae, 0x2f, + 0x39, 0x75, 0xc3, 0xb4, 0x39, 0x9c, 0x36, 0xed, + 0x81, 0xae, 0x6b, 0x83, 0x05, 0x23, 0x7b, 0xda, + 0xd2, 0x5a, 0x37, 0x28, 0x83, 0xb7, 0x68, 0x5b, + 0x33, 0x72, 0xac, 0xb0, 0x4c, 0x0f, 0x3a, 0x1a, + 0x71, 0x62, 0xd7, 0x5a, 0x0d, 0x6b, 0xce, 0xd0, + 0x46, 0xf3, 0x97, 0x65, 0x64, 0x34, 0x90, 0x2d, + 0xc0, 0x24, 0x02, 0x69, 0x56, 0xb5, 0x47, 0xcd, + 0x9b, 0xdf, 0xdc, 0x5a, 0xfb, 0x24, 0xf2, 0x73, + 0x91, 0xd7, 0x15, 0x5c, 0x1a, 0x5e, 0x34, 0x93, + 0xe5, 0xf7, 0x57, 0xa8, 0xf3, 0xcc, 0xca, 0x3b, + 0x31, 0x67, 0xce, 0x35, 0xd0, 0xe1, 0x2c, 0x01, + 0xcd, 0x0e, 0x20, 0x1e, 0xca, 0x09, 0x6d, 0xa1, + 0xcc, 0x2f, 0xe3, 0x6d, 0x9d, 0xcd, 0x9c, 0xef, + 0x8a, 0x09, 0xe2, 0xad, 0x58, 0x74, 0x62, 0x3a, + 0x78, 0x57, 0x2d, 0xc4, 0x59, 0x85, 0x32, 0xd9, + 0x2f, 0x2e, 0x9d, 0x33, 0xee, 0x65, 0x63, 0x84, + 0x0f, 0xd6, 0xcd, 0x23, 0x4f, 0x75, 0x71, 0xd9, + 0xe7, 0x77, 0xf6, 0x56, 0xfe, 0xcf, 0x19, 0x6c, + 0x90, 0x33, 0xc9, 0x6c, 0xad, 0x0f, 0xc3, 0xda, + 0x52, 0x79, 0x1d, 0xbd, 0xe6, 0x6b, 0x98, 0x8c, + 0xce, 0xf1, 0xd8, 0xa1, 0x83, 0xc8, 0x27, 0x40, + 0x24, 0x6a, 0x00, 0x76, 0x10, 0x49, 0xe7, 0x3e, + 0xf2, 0xdd, 0xfc, 0x02, 0xab, 0x85, 0x6f, 0xbd, + 0xb8, 0xf6, 0x8b, 0x97, 0x48, 0x3c, 0x9d, 0x4d, + 0xed, 0x05, 0xa1, 0x07, 0xbb, 0x7f, 0xdb, 0xc7, + 0xe7, 0x37, 0xc2, 0xa7, 0x14, 0x1d, 0xbf, 0xed, + 0xe3, 0xf3, 0x9b, 0xe1, 0x53, 0x81, 0x06, 0x54, + 0x5e, 0x6f, 0xef, 0x56, 0x5e, 0x7f, 0xca, 0x14, + 0xa2, 0x8b, 0xcd, 0xfd, 0xea, 0xcb, 0xcf, 0xf9, + 0x42, 0x0c, 0x65, 0x1e, 0xf3, 0x7b, 0xf6, 0x87, + 0xeb, 0x15, 0x2a, 0xa2, 0xb2, 0x8f, 0x79, 0xbd, + 0xfb, 0x43, 0xf5, 0x8a, 0x95, 0x40, 0x44, 0x44, + 0x1e, 0x99, 0xa8, 0xaf, 0x88, 0x5e, 0xfb, 0xed, + 0xc7, 0xda, 0xbf, 0xeb, 0x15, 0xf6, 0xf6, 0x6a, + 0x2b, 0xe2, 0x17, 0xbe, 0xfb, 0x71, 0xf6, 0xaf, + 0xfa, 0xc5, 0x64, 0xf3, 0x7e, 0x14, 0x7d, 0x07, + 0xf6, 0xdf, 0xdf, 0xe6, 0x3e, 0x18, 0xff, 0x00, + 0xcd, 0xa1, 0x11, 0x16, 0x47, 0xd2, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x83, 0x27, 0x71, + 0x76, 0xe5, 0x39, 0xa5, 0xd6, 0x55, 0x7d, 0x15, + 0xf5, 0xb6, 0x97, 0xc6, 0x68, 0xe6, 0x1d, 0x4e, + 0x69, 0xd6, 0xd2, 0xb8, 0x74, 0x25, 0x69, 0xa9, + 0x22, 0x66, 0x26, 0x26, 0x3d, 0x8a, 0x5e, 0x95, + 0xc9, 0x5b, 0x52, 0xf1, 0xad, 0x2f, 0x1b, 0x66, + 0x17, 0x87, 0x6d, 0x26, 0xc4, 0xdf, 0xbb, 0xda, + 0xaf, 0xb2, 0xd7, 0xb6, 0xe0, 0xe9, 0x92, 0x8d, + 0x06, 0xae, 0xdd, 0x24, 0xb1, 0xc3, 0x17, 0x6c, + 0xa8, 0xcd, 0xa2, 0xda, 0xb8, 0xf3, 0x0b, 0x46, + 0xe5, 0xb9, 0x6c, 0x1e, 0xc7, 0x97, 0x47, 0x43, + 0xcd, 0xe8, 0x69, 0x71, 0x1a, 0xaa, 0x19, 0x51, + 0x41, 0xfd, 0x2a, 0xb7, 0xbb, 0xa3, 0x52, 0x57, + 0x78, 0x2e, 0x93, 0x96, 0xd3, 0x13, 0x1a, 0x44, + 0x6b, 0xe2, 0xc7, 0x8f, 0xf9, 0x66, 0x0c, 0x76, + 0xad, 0xf5, 0xbd, 0xa7, 0x1f, 0xd9, 0x17, 0xb5, + 0xaf, 0x58, 0x9e, 0x75, 0x85, 0xcf, 0x62, 0x2e, + 0xcd, 0x9e, 0x4f, 0x9c, 0xdc, 0xb5, 0xa2, 0x47, + 0x43, 0x18, 0x93, 0x01, 0xd4, 0x70, 0xb5, 0xe6, + 0x87, 0xb6, 0xbc, 0x47, 0x9f, 0xec, 0x8d, 0x8b, + 0xba, 0xc6, 0xc3, 0x2f, 0x95, 0xb9, 0x81, 0x04, + 0xb1, 0x8f, 0x27, 0x03, 0x1c, 0x75, 0xe1, 0xf1, + 0x88, 0x1d, 0xc0, 0xa2, 0xf2, 0x5c, 0xf6, 0xd6, + 0xc3, 0x29, 0xcd, 0x2c, 0x65, 0x6b, 0xcc, 0x97, + 0xd1, 0x16, 0x46, 0xe6, 0xd3, 0x08, 0x38, 0x5c, + 0x34, 0xf0, 0xa8, 0x32, 0x74, 0x52, 0xb5, 0x0a, + 0xdd, 0xd9, 0xad, 0x71, 0xe9, 0xec, 0xac, 0xfe, + 0x97, 0x29, 0xfe, 0x5f, 0x5c, 0xde, 0x63, 0xcc, + 0xdf, 0x2c, 0x5e, 0xb5, 0xbd, 0xe9, 0xb7, 0x6d, + 0xb4, 0xad, 0xe2, 0x2b, 0x1e, 0x31, 0xed, 0xe2, + 0xdd, 0x79, 0x77, 0x71, 0x7b, 0x75, 0x2d, 0xdc, + 0xee, 0xc5, 0x2c, 0xce, 0x2e, 0x71, 0xdc, 0xed, + 0x05, 0xab, 0x09, 0x20, 0x86, 0x9a, 0x57, 0xc2, + 0xb1, 0x5a, 0x68, 0x09, 0x41, 0x4d, 0x6b, 0x8e, + 0xb3, 0x33, 0xac, 0xbd, 0x18, 0xac, 0x56, 0x22, + 0xb5, 0xaf, 0x08, 0x8d, 0x26, 0x22, 0x74, 0x88, + 0xfd, 0x95, 0xab, 0x33, 0xda, 0x3c, 0x93, 0x33, + 0xc9, 0x63, 0x86, 0xe6, 0xcd, 0xe3, 0x33, 0x82, + 0x01, 0x14, 0x33, 0x00, 0x08, 0x69, 0x6d, 0x35, + 0x1c, 0x40, 0xd0, 0x9e, 0xc2, 0xc6, 0x5b, 0xb4, + 0x99, 0x6c, 0xf9, 0x6c, 0x79, 0x56, 0xd0, 0x5b, + 0xbe, 0xe6, 0x18, 0x34, 0x41, 0x3c, 0x7e, 0x5b, + 0x5b, 0xe1, 0x04, 0x76, 0x35, 0xaa, 0xb5, 0x7b, + 0x28, 0x3b, 0x26, 0x8b, 0xa7, 0x7a, 0xda, 0xeb, + 0xf3, 0xf7, 0xb2, 0x7f, 0x4c, 0xf2, 0xf1, 0x49, + 0xa4, 0x6f, 0xf1, 0x9b, 0xd6, 0x77, 0xf1, 0xa4, + 0xcf, 0x8e, 0xd9, 0xf6, 0x2d, 0x19, 0x8e, 0xd2, + 0xe5, 0x96, 0xd9, 0x6c, 0x99, 0x56, 0xcf, 0x5b, + 0x3e, 0xde, 0x19, 0xea, 0x27, 0x9e, 0x5f, 0x2d, + 0xc0, 0xe8, 0x3a, 0x49, 0x73, 0x8d, 0x47, 0xce, + 0x55, 0x75, 0x83, 0xc2, 0x8a, 0xb7, 0xbc, 0xdb, + 0x8c, 0xfe, 0x0e, 0xfe, 0x5b, 0xcb, 0x63, 0xc1, + 0x59, 0xad, 0x22, 0x75, 0xb4, 0xeb, 0x69, 0xb4, + 0xee, 0xb5, 0xa7, 0x9c, 0xcb, 0x20, 0xd2, 0xaa, + 0x6f, 0x20, 0xcf, 0x2d, 0xb2, 0xab, 0x3c, 0xca, + 0x09, 0x98, 0xf7, 0xba, 0xfe, 0x21, 0x1c, 0x65, + 0x80, 0x51, 0xa4, 0x07, 0xf9, 0x55, 0x23, 0xe7, + 0x28, 0x31, 0x4d, 0xd4, 0x51, 0x59, 0xdb, 0x3a, + 0xad, 0x9f, 0x0d, 0x73, 0x52, 0x69, 0x7f, 0xb6, + 0xdb, 0x7f, 0x76, 0x77, 0x3b, 0x72, 0xab, 0xab, + 0x6b, 0x4c, 0xca, 0x0b, 0xab, 0xb6, 0x3a, 0x58, + 0x60, 0x90, 0x3d, 0xf1, 0xb6, 0x84, 0x9c, 0x3e, + 0x73, 0x80, 0x56, 0xfb, 0xad, 0xb1, 0xd9, 0x0b, + 0xe9, 0x79, 0xfb, 0xdc, 0xaa, 0x49, 0xe5, 0xa6, + 0x1c, 0x6f, 0x64, 0x64, 0xd3, 0x7b, 0xf6, 0x8a, + 0x88, 0x0e, 0xf8, 0xaa, 0x57, 0xb8, 0xad, 0x5c, + 0xb3, 0x58, 0x98, 0x88, 0x8e, 0x3c, 0xdc, 0x3c, + 0xc7, 0x90, 0xc5, 0x9f, 0x24, 0x65, 0xbc, 0xda, + 0x2d, 0x58, 0xdb, 0x5d, 0x96, 0x9a, 0xce, 0x9f, + 0x82, 0xd1, 0x9c, 0xe7, 0x7b, 0x27, 0x77, 0x97, + 0xcb, 0x05, 0x86, 0x56, 0xeb, 0x6b, 0xa7, 0x53, + 0x9b, 0x9c, 0xb2, 0x36, 0xe1, 0xa1, 0x04, 0xe9, + 0x6b, 0xc9, 0xd5, 0xd8, 0x5c, 0xd9, 0x06, 0xd0, + 0x5b, 0x59, 0xda, 0xcd, 0x95, 0xe6, 0x50, 0xfb, + 0x56, 0x5b, 0x39, 0xae, 0x11, 0xe5, 0x31, 0xdb, + 0xed, 0xf0, 0xf6, 0xd4, 0x05, 0x45, 0x08, 0x4d, + 0x14, 0xec, 0xa8, 0xee, 0x5b, 0x76, 0xb1, 0xc0, + 0x8f, 0x21, 0x87, 0xb5, 0x38, 0xa7, 0x75, 0xeb, + 0x33, 0xbf, 0x5b, 0x5e, 0xdb, 0xf7, 0x47, 0x86, + 0x96, 0x5a, 0xaf, 0x76, 0x87, 0x26, 0xb3, 0xcb, + 0x26, 0xcb, 0xf6, 0x76, 0xda, 0x48, 0x4d, 0xde, + 0x89, 0xee, 0x66, 0x27, 0x16, 0x1a, 0x52, 0x80, + 0x92, 0xe7, 0x13, 0xdb, 0xd0, 0x15, 0x5a, 0xb8, + 0x7c, 0x51, 0xab, 0x89, 0x63, 0x5e, 0xb2, 0x95, + 0xd1, 0x44, 0xb5, 0xe6, 0xd3, 0x1a, 0xba, 0x79, + 0x7f, 0x2d, 0x4c, 0x11, 0x68, 0xa4, 0x5b, 0x5b, + 0xce, 0xe9, 0xbd, 0xed, 0xba, 0xd6, 0x9f, 0x7a, + 0x47, 0x67, 0xf3, 0x28, 0xb2, 0xac, 0xd6, 0xde, + 0xfe, 0x66, 0xb9, 0xf1, 0xc2, 0xe2, 0x5c, 0xd6, + 0x53, 0x11, 0xa8, 0x23, 0x45, 0x48, 0xdf, 0x4b, + 0xbc, 0xd0, 0x3f, 0x3b, 0x93, 0x35, 0xb7, 0x0e, + 0x8f, 0x15, 0xc7, 0xb4, 0x30, 0x1a, 0x62, 0x1e, + 0x30, 0x75, 0x34, 0x3a, 0x8a, 0x35, 0x67, 0xc0, + 0xa2, 0x2d, 0x31, 0x11, 0x11, 0xec, 0x9d, 0xc9, + 0x9f, 0x2f, 0x49, 0xc9, 0x39, 0x27, 0xc6, 0x71, + 0x76, 0x3f, 0x09, 0x95, 0x87, 0x6b, 0xb6, 0x9a, + 0x2c, 0xfe, 0x5b, 0x73, 0x6f, 0x1b, 0xe2, 0x86, + 0x06, 0xb8, 0xe1, 0x92, 0x95, 0x2f, 0x71, 0xd2, + 0x7c, 0x52, 0x74, 0x50, 0x05, 0xa2, 0xeb, 0x3d, + 0xb6, 0x9b, 0x66, 0x6d, 0x32, 0x76, 0xc7, 0x20, + 0x9e, 0xda, 0x53, 0x23, 0xa4, 0x20, 0x60, 0x23, + 0xc7, 0xd4, 0x71, 0x57, 0xf3, 0xb7, 0x94, 0x29, + 0x3b, 0xda, 0x93, 0x45, 0x7b, 0x0a, 0xd3, 0x92, + 0xd3, 0x36, 0xb7, 0x5c, 0x69, 0x2a, 0xd3, 0xc8, + 0xe1, 0xa5, 0x30, 0xe3, 0xaf, 0x0a, 0xf9, 0x7b, + 0x6f, 0xa7, 0xed, 0x71, 0xe3, 0xfe, 0x29, 0xbb, + 0x8c, 0xfa, 0xde, 0x4d, 0x97, 0xb6, 0xc9, 0x5a, + 0xc7, 0x89, 0xe1, 0x97, 0x9d, 0x2f, 0x20, 0x60, + 0xd6, 0xe3, 0xf3, 0xab, 0xf9, 0xca, 0x10, 0x79, + 0x49, 0xa2, 0xbd, 0x85, 0x9a, 0x8a, 0xd7, 0x71, + 0x56, 0xd7, 0x9b, 0x4c, 0x4c, 0xfb, 0x23, 0x4f, + 0x93, 0xa6, 0x1c, 0x14, 0xc5, 0x16, 0x8a, 0x78, + 0x5e, 0xf3, 0x7b, 0x7c, 0x67, 0x8c, 0xca, 0x77, + 0x30, 0xda, 0x0b, 0x5b, 0xcd, 0x9b, 0xb1, 0xca, + 0x19, 0x1b, 0xdb, 0x35, 0xa3, 0xc3, 0x9f, 0x23, + 0xa8, 0x1a, 0x40, 0x0f, 0x69, 0xa1, 0x0e, 0xaf, + 0xe7, 0x29, 0xab, 0x8d, 0xaf, 0xd9, 0x3b, 0xbb, + 0x3b, 0x7b, 0x4b, 0xbb, 0x09, 0xe4, 0x8a, 0xd9, + 0xa0, 0x31, 0x80, 0x30, 0x34, 0x10, 0x30, 0xea, + 0x12, 0x05, 0x47, 0xd1, 0x4a, 0x6e, 0xac, 0x92, + 0x34, 0x51, 0x5e, 0xb9, 0xad, 0x59, 0xe1, 0x11, + 0xcb, 0x8b, 0x2d, 0xff, 0x00, 0x96, 0xe1, 0xb4, + 0x44, 0x4c, 0xda, 0xbb, 0x2d, 0x6c, 0xb1, 0x35, + 0x99, 0x8f, 0xab, 0x27, 0x8f, 0x82, 0xd3, 0x3e, + 0x71, 0xb0, 0x8e, 0x89, 0xcd, 0x87, 0x2a, 0x9d, + 0xaf, 0x20, 0xe1, 0x24, 0x36, 0x80, 0x91, 0x40, + 0x7f, 0x6a, 0xaa, 0xba, 0x68, 0x01, 0x42, 0xed, + 0xe4, 0x26, 0xaa, 0x97, 0xbc, 0xdb, 0xc6, 0x22, + 0x3e, 0x0e, 0xfe, 0x5f, 0xcb, 0x53, 0x06, 0xfd, + 0xb7, 0xc9, 0x7d, 0x74, 0xfb, 0xe6, 0x67, 0xe5, + 0xab, 0x08, 0x88, 0xa1, 0xa0, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x59, 0x1a, 0xd6, 0x16, 0x42, 0x06, + 0xf2, 0xfb, 0x94, 0x1e, 0xe1, 0x6f, 0xe6, 0x33, + 0xea, 0x85, 0xf0, 0xd1, 0xb8, 0xbe, 0xe5, 0x0f, + 0xb8, 0xdb, 0xf9, 0x8c, 0xfa, 0xa1, 0x6a, 0xf2, + 0x7e, 0x37, 0x7c, 0xf7, 0xf7, 0x1f, 0xdb, 0x83, + 0xe3, 0x7f, 0xd1, 0x56, 0x46, 0xb5, 0x5f, 0x77, + 0x94, 0x7b, 0x65, 0x58, 0x06, 0xb5, 0x5f, 0x77, + 0x94, 0x7b, 0x65, 0x6c, 0x7c, 0xe0, 0xb3, 0x19, + 0x02, 0x46, 0x17, 0x1a, 0x00, 0xe0, 0x49, 0xed, + 0x1a, 0xac, 0x22, 0x09, 0x0c, 0xe7, 0x2d, 0xca, + 0xae, 0xa7, 0x8e, 0x7b, 0xdb, 0x93, 0x03, 0x8b, + 0x30, 0xb0, 0x62, 0x6b, 0x41, 0x00, 0xd7, 0xf3, + 0x81, 0xdf, 0x51, 0xfd, 0x49, 0xb3, 0x7d, 0x3c, + 0xf2, 0xd9, 0xe8, 0xac, 0x6d, 0x8e, 0xab, 0x2f, + 0x35, 0xff, 0x00, 0xdc, 0x55, 0xba, 0x0d, 0xe4, + 0x16, 0x5e, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5a, 0xa0, 0xde, 0x4a, 0x0d, 0xe4, + 0x16, 0x5e, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5a, 0xa0, 0xde, 0x4a, 0x0d, 0xe4, + 0x16, 0x5e, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5a, 0xa0, 0xde, 0x4a, 0x0d, 0xe4, + 0x16, 0x5e, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5a, 0xa0, 0xde, 0x4a, 0x0d, 0xe4, + 0x16, 0x5e, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5a, 0xa0, 0xde, 0x4a, 0x0d, 0xe4, + 0x16, 0x5e, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5a, 0xa0, 0xec, 0x2f, 0x5c, 0xdb, + 0xf0, 0x63, 0x0c, 0x25, 0x9f, 0x3b, 0x09, 0xa7, + 0x0a, 0x0b, 0x1f, 0x52, 0x6c, 0xdf, 0x4f, 0x3c, + 0xb6, 0x7a, 0x29, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, + 0x2d, 0x9e, 0x8a, 0xad, 0x0a, 0x1d, 0x54, 0x2b, + 0x2d, 0x63, 0x9e, 0x70, 0xb1, 0xa5, 0xce, 0xde, + 0x02, 0xa5, 0x05, 0x93, 0xa9, 0x36, 0x6f, 0xa7, + 0x9e, 0x5b, 0x3d, 0x14, 0xea, 0x4d, 0x9b, 0xe9, + 0xe7, 0x96, 0xcf, 0x45, 0x56, 0xcb, 0x70, 0x92, + 0x08, 0xa1, 0x04, 0x82, 0x29, 0xa8, 0x8d, 0x0b, + 0xd7, 0x31, 0x37, 0x8b, 0xfa, 0xa7, 0x78, 0xfe, + 0x47, 0x8a, 0x7c, 0x6f, 0x37, 0x7d, 0x05, 0x8b, + 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, 0x3d, 0x14, + 0xea, 0x4d, 0x9b, 0xe9, 0xe7, 0x96, 0xcf, 0x45, + 0x57, 0xfd, 0x92, 0xe7, 0xd4, 0x49, 0xc8, 0x72, + 0xd4, 0x45, 0x0d, 0x08, 0xa1, 0x1a, 0xea, 0x28, + 0x82, 0xcb, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, + 0x9e, 0x8a, 0x75, 0x26, 0xcd, 0xf4, 0xf3, 0xcb, + 0x67, 0xa2, 0xab, 0x54, 0x1b, 0xcb, 0x77, 0xb1, + 0xdd, 0x68, 0xfd, 0x43, 0xf4, 0xea, 0xf1, 0x0a, + 0x09, 0xfe, 0xa4, 0xd9, 0xbe, 0x9e, 0x79, 0x6c, + 0xf4, 0x53, 0xa9, 0x36, 0x6f, 0xa7, 0x9e, 0x5b, + 0x3d, 0x15, 0x5d, 0x7c, 0x12, 0xc7, 0x43, 0x24, + 0x6e, 0x60, 0x71, 0xa0, 0xc4, 0xd2, 0x2a, 0x77, + 0x97, 0xaf, 0x63, 0xba, 0xd5, 0xcc, 0x49, 0xa7, + 0xfa, 0x8e, 0x41, 0x60, 0xea, 0x4d, 0x9b, 0xe9, + 0xe7, 0x96, 0xcf, 0x45, 0x3a, 0x93, 0x66, 0xfa, + 0x79, 0xe5, 0xb3, 0xd1, 0x55, 0xd7, 0x41, 0x33, + 0x4b, 0x43, 0xa2, 0x73, 0x4b, 0x8d, 0x1a, 0x0b, + 0x48, 0x24, 0xf6, 0x17, 0xaf, 0x64, 0xba, 0xa5, + 0x79, 0x89, 0x39, 0x05, 0x05, 0x83, 0xa9, 0x36, + 0x6f, 0xa7, 0x9e, 0x5b, 0x3d, 0x14, 0xea, 0x4d, + 0x9b, 0xe9, 0xe7, 0x96, 0xcf, 0x45, 0x56, 0xc3, + 0x09, 0x38, 0x43, 0x7c, 0x6a, 0xd2, 0x94, 0xd3, + 0x5d, 0xe5, 0xb3, 0xd9, 0x2e, 0xbd, 0x43, 0xf9, + 0x0e, 0x41, 0x60, 0xea, 0x4d, 0x9b, 0xe9, 0xe7, + 0x96, 0xcf, 0x45, 0x3a, 0x93, 0x66, 0xfa, 0x79, + 0xe5, 0xb3, 0xd1, 0x55, 0xb2, 0xd2, 0xd3, 0x47, + 0x37, 0x09, 0xde, 0x22, 0x85, 0x7a, 0x86, 0x09, + 0x67, 0x76, 0x08, 0x63, 0x74, 0xae, 0x1a, 0xc3, + 0x45, 0x50, 0x58, 0xba, 0x93, 0x66, 0xfa, 0x79, + 0xe5, 0xb3, 0xd1, 0x4e, 0xa4, 0xd9, 0xbe, 0x9e, + 0x79, 0x6c, 0xf4, 0x55, 0x7a, 0x6b, 0x79, 0xa0, + 0x76, 0x19, 0xa3, 0x74, 0x6e, 0x3a, 0x83, 0x81, + 0x0b, 0x0c, 0x86, 0x59, 0x01, 0x74, 0x71, 0xb9, + 0xe0, 0x6b, 0x2d, 0x69, 0x34, 0xe0, 0x41, 0x62, + 0xea, 0x4d, 0x9b, 0xe9, 0xe7, 0x96, 0xcf, 0x45, + 0x3a, 0x93, 0x66, 0xfa, 0x79, 0xe5, 0xb3, 0xd1, + 0x55, 0xb2, 0x28, 0x68, 0x45, 0x08, 0x34, 0x3a, + 0x37, 0x57, 0xb1, 0x6f, 0x33, 0x99, 0x8d, 0xb1, + 0x39, 0xcc, 0xa5, 0x71, 0x06, 0x92, 0x28, 0x82, + 0xc3, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, 0x9e, + 0x8a, 0x75, 0x26, 0xcd, 0xf4, 0xf3, 0xcb, 0x67, + 0xa2, 0xab, 0x54, 0x1b, 0xc9, 0x41, 0xbc, 0x82, + 0xcb, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, 0x9e, + 0x8a, 0x75, 0x26, 0xcd, 0xf4, 0xf3, 0xcb, 0x67, + 0xa2, 0xab, 0x54, 0x1b, 0xc9, 0x41, 0xbc, 0x82, + 0xcb, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, 0x9e, + 0x8a, 0x75, 0x26, 0xcd, 0xf4, 0xf3, 0xcb, 0x67, + 0xa2, 0xab, 0x54, 0x1b, 0xc9, 0x41, 0xbc, 0x82, + 0xcb, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, 0x9e, + 0x8a, 0x75, 0x26, 0xcd, 0xf4, 0xf3, 0xcb, 0x67, + 0xa2, 0xab, 0x54, 0x1b, 0xc9, 0x41, 0xbc, 0x82, + 0xcb, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, 0x9e, + 0x8a, 0x75, 0x26, 0xcd, 0xf4, 0xf3, 0xcb, 0x67, + 0xa2, 0xab, 0x54, 0x1b, 0xc9, 0x41, 0xbc, 0x82, + 0xcb, 0xd4, 0x9b, 0x37, 0xd3, 0xcf, 0x2d, 0x9e, + 0x8a, 0xe8, 0xcb, 0xf2, 0xec, 0x8e, 0xd6, 0xf6, + 0x29, 0xed, 0xef, 0x0b, 0xe6, 0x69, 0xa3, 0x18, + 0x5e, 0xc2, 0x09, 0x70, 0xc3, 0xa8, 0x35, 0x54, + 0xa8, 0x37, 0x97, 0x56, 0x54, 0x07, 0x59, 0xda, + 0x68, 0xff, 0x00, 0x8c, 0xcf, 0xac, 0x10, 0x59, + 0x73, 0x46, 0x06, 0xde, 0xbe, 0x9f, 0x9c, 0x03, + 0x8a, 0xe5, 0x5d, 0x99, 0xb7, 0xbe, 0xbb, 0xcd, + 0x0b, 0x8d, 0x01, 0x11, 0x10, 0x7b, 0x82, 0x79, + 0x20, 0x90, 0x49, 0x19, 0xa3, 0x86, 0xe6, 0xe1, + 0xed, 0xae, 0xa9, 0xc6, 0x4d, 0x99, 0x50, 0xdf, + 0x43, 0x86, 0x5a, 0x7e, 0xd0, 0x68, 0xfa, 0x4d, + 0xf9, 0x57, 0x12, 0x20, 0xf7, 0xd4, 0x1b, 0x3f, + 0xeb, 0xdf, 0xca, 0x1e, 0x8a, 0x75, 0x06, 0xcf, + 0xf4, 0x87, 0xf2, 0x87, 0xa0, 0xbc, 0x22, 0x0f, + 0x7d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x27, 0x50, 0x6c, 0xff, 0x00, 0x48, 0x7f, 0x28, + 0x7a, 0x0b, 0xc2, 0x20, 0xf7, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0x75, 0x06, 0xcf, + 0xf4, 0x87, 0xf2, 0x87, 0xa0, 0xbc, 0x22, 0x0f, + 0x7d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x27, 0x50, 0x6c, 0xff, 0x00, 0x48, 0x7f, 0x28, + 0x7a, 0x0b, 0xc2, 0x20, 0xf7, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0x75, 0x06, 0xcf, + 0xf4, 0x87, 0xf2, 0x87, 0xa0, 0xbc, 0x22, 0x0f, + 0x7d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x27, 0x50, 0x6c, 0xff, 0x00, 0x48, 0x7f, 0x28, + 0x7a, 0x0b, 0xc2, 0x20, 0xf7, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf4, 0x32, 0x2c, + 0x85, 0xa0, 0x86, 0xdd, 0x4a, 0xd0, 0x75, 0x86, + 0xbe, 0x95, 0x1c, 0x95, 0xa9, 0x10, 0x7b, 0xf8, + 0x7f, 0x67, 0x87, 0xfc, 0x77, 0xf2, 0x87, 0xa2, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf0, 0x88, 0x3d, + 0xf5, 0x06, 0xcf, 0xf4, 0x87, 0xf2, 0x87, 0xa0, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf0, 0x88, 0x3d, + 0xf5, 0x06, 0xcf, 0xf4, 0x87, 0xf2, 0x87, 0xa0, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf0, 0x88, 0x3d, + 0xf5, 0x06, 0xcf, 0xf4, 0x87, 0xf2, 0x87, 0xa0, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf0, 0x88, 0x3d, + 0xf5, 0x06, 0xcf, 0xf4, 0x87, 0xf2, 0x87, 0xa0, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf0, 0x88, 0x3d, + 0xf5, 0x06, 0xcf, 0xf4, 0x87, 0xf2, 0x87, 0xa0, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x82, 0xf0, 0x88, 0x3d, + 0xf5, 0x06, 0xcf, 0xf4, 0x87, 0xf2, 0x87, 0xa0, + 0x9d, 0x41, 0xb3, 0xfd, 0x21, 0xfc, 0xa1, 0xe8, + 0x2f, 0x08, 0x83, 0xdf, 0x50, 0x6c, 0xff, 0x00, + 0x48, 0x7f, 0x28, 0x7a, 0x09, 0xd4, 0x1b, 0x3f, + 0xd2, 0x1f, 0xca, 0x1e, 0x8a, 0xf0, 0x88, 0x37, + 0xc7, 0x93, 0xec, 0xdc, 0x04, 0x39, 0xc5, 0xd3, + 0x10, 0x6a, 0x03, 0x9c, 0x5d, 0xde, 0x0b, 0x6d, + 0xde, 0x63, 0xce, 0x30, 0x43, 0x6e, 0xde, 0x6a, + 0x11, 0xa2, 0x80, 0x50, 0xd3, 0xb5, 0xbc, 0xb8, + 0xd1, 0x01, 0x11, 0x10, 0x7b, 0xb7, 0xfd, 0xbc, + 0x7e, 0x73, 0x7c, 0x2a, 0x70, 0x28, 0x3b, 0x7f, + 0xdb, 0xc7, 0xe7, 0x37, 0xc2, 0xa7, 0x02, 0x0c, + 0xa8, 0xbc, 0xdf, 0xde, 0xac, 0xbc, 0xff, 0x00, + 0x94, 0x29, 0x45, 0x17, 0x9b, 0xfb, 0xd5, 0x97, + 0x9f, 0xf2, 0x84, 0x18, 0xca, 0x3d, 0xe6, 0xf7, + 0xed, 0x0f, 0xd6, 0x2a, 0x55, 0x45, 0x65, 0x1e, + 0xf3, 0x7b, 0xf6, 0x87, 0xeb, 0x15, 0x2a, 0x80, + 0x88, 0x88, 0x3d, 0x33, 0x51, 0x5f, 0x10, 0xbd, + 0xf7, 0xdb, 0x8f, 0xb5, 0x7f, 0xd6, 0x2b, 0xed, + 0xec, 0xd4, 0x57, 0xc4, 0x2f, 0x7d, 0xf6, 0xe3, + 0xed, 0x5f, 0xf5, 0x8a, 0xc9, 0xe6, 0xfc, 0x28, + 0xfa, 0x0f, 0xed, 0xbf, 0xbf, 0xcc, 0x7c, 0x31, + 0xff, 0x00, 0x9b, 0x42, 0x22, 0x2c, 0x8f, 0xa4, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x02, 0x20, 0x41, + 0x9d, 0xe5, 0xf7, 0x28, 0x7d, 0xc6, 0xdf, 0xcc, + 0x67, 0xd5, 0x5f, 0x0d, 0xde, 0x5f, 0x72, 0x87, + 0xdc, 0x6d, 0xfc, 0xc6, 0x7d, 0x55, 0xab, 0xc9, + 0xf8, 0xdd, 0xf3, 0xdf, 0xdc, 0x9f, 0x6f, 0x96, + 0xff, 0x00, 0xf2, 0x7f, 0xf4, 0xb2, 0x35, 0xaa, + 0xfb, 0xbc, 0xa3, 0xdb, 0x2a, 0xc0, 0x35, 0xaa, + 0xfb, 0xbc, 0xa3, 0xdb, 0x2b, 0x63, 0xe7, 0x04, + 0x44, 0x41, 0x8d, 0xb0, 0xd5, 0x65, 0xe6, 0xbf, + 0xfb, 0x8a, 0xb8, 0xac, 0x7b, 0x61, 0xaa, 0xcb, + 0xcd, 0x7f, 0xf7, 0x15, 0x71, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x48, 0x64, 0x56, 0x6c, 0xbd, 0xcc, + 0xa2, 0x8a, 0x51, 0x58, 0xd8, 0x0c, 0x8f, 0x1b, + 0x84, 0x37, 0x70, 0xae, 0xc3, 0xb4, 0xf7, 0x0d, + 0xbe, 0xa1, 0xc0, 0x2c, 0x43, 0xf0, 0x98, 0x30, + 0x0a, 0x60, 0xdf, 0xdf, 0xaa, 0x6c, 0x8b, 0x71, + 0x5f, 0xcf, 0x5d, 0xd8, 0x88, 0x1d, 0xd2, 0x17, + 0xa8, 0xb3, 0x8b, 0x18, 0xae, 0x85, 0xa3, 0x2c, + 0xe2, 0x36, 0x41, 0xdc, 0xde, 0x22, 0x2a, 0xfa, + 0x13, 0x87, 0x15, 0x4a, 0x08, 0xac, 0xc5, 0xf6, + 0x8f, 0xbd, 0x96, 0x4b, 0x3a, 0xf3, 0x0f, 0x35, + 0x60, 0x23, 0x0e, 0xbf, 0x2b, 0x47, 0x6d, 0x76, + 0x6c, 0xc1, 0xa6, 0x73, 0x17, 0x9a, 0xef, 0x02, + 0xd3, 0x9d, 0xd8, 0xc7, 0x63, 0x98, 0x3e, 0x18, + 0xb4, 0x46, 0x40, 0x7b, 0x37, 0xe8, 0xed, 0xce, + 0xd2, 0xdb, 0xb3, 0x3f, 0xce, 0x22, 0xa6, 0xbc, + 0x2f, 0xf0, 0x20, 0xd9, 0x6b, 0x97, 0x0b, 0xdc, + 0xde, 0xee, 0x69, 0xbc, 0x5b, 0x5b, 0x79, 0x64, + 0x74, 0xef, 0x3a, 0xb4, 0x38, 0xe8, 0x5e, 0xe3, + 0xcc, 0x9d, 0x7f, 0xb4, 0x16, 0xb2, 0x37, 0xc5, + 0x86, 0x37, 0xe1, 0x81, 0x9b, 0x8d, 0x6d, 0x35, + 0x8e, 0xc9, 0x52, 0x97, 0x0c, 0xb1, 0xba, 0x82, + 0xf7, 0x28, 0xb2, 0x76, 0x19, 0xe3, 0x26, 0x67, + 0x53, 0xf3, 0x9c, 0x49, 0x71, 0x1d, 0x9d, 0x3a, + 0x15, 0x77, 0x25, 0x0e, 0x6e, 0x6f, 0x6a, 0x08, + 0xc2, 0x79, 0xcd, 0x23, 0xb2, 0x01, 0x04, 0x20, + 0x91, 0xcd, 0xb3, 0xec, 0xd2, 0xd7, 0x33, 0xb8, + 0x8a, 0x29, 0x69, 0x1c, 0x4f, 0xf1, 0x5a, 0x40, + 0x3f, 0x9a, 0x0d, 0x35, 0x2f, 0x3b, 0x4c, 0xc8, + 0x9f, 0x1d, 0x95, 0xf0, 0x6e, 0x09, 0x2e, 0x59, + 0x59, 0x1b, 0x4a, 0x57, 0x46, 0x2e, 0x15, 0xbb, + 0x32, 0xbb, 0xc8, 0xa3, 0xcd, 0x27, 0xf6, 0x9b, + 0x39, 0x24, 0x95, 0x8e, 0x1c, 0xe4, 0x81, 0xda, + 0x2b, 0x41, 0xf9, 0xb8, 0x82, 0xd1, 0xb4, 0x71, + 0xc9, 0x29, 0xb7, 0xbf, 0x8e, 0x5e, 0x72, 0xce, + 0x50, 0x1b, 0x0b, 0x69, 0x40, 0xca, 0x7e, 0x6a, + 0x08, 0x41, 0xb8, 0xad, 0x3b, 0x43, 0x9c, 0x66, + 0x16, 0x57, 0x91, 0xc5, 0x6b, 0x20, 0x63, 0x1d, + 0x1e, 0x22, 0x30, 0x87, 0x1a, 0xf7, 0x55, 0x54, + 0x6e, 0x2b, 0x6e, 0x7d, 0x73, 0x93, 0xc5, 0x77, + 0x1b, 0x6f, 0xad, 0x5f, 0x71, 0x2e, 0x00, 0x58, + 0xe6, 0xba, 0x82, 0x9c, 0xa0, 0x82, 0x0a, 0x6c, + 0xda, 0xfe, 0xfe, 0x58, 0x63, 0xba, 0x94, 0x3d, + 0xac, 0x91, 0xae, 0x67, 0x8a, 0x1b, 0x43, 0x5e, + 0xc0, 0x52, 0xfb, 0x41, 0x9c, 0xe6, 0x76, 0x59, + 0x8f, 0x31, 0x6d, 0x28, 0x64, 0x58, 0x1a, 0xe2, + 0x0b, 0x5a, 0x74, 0x9a, 0xee, 0x90, 0x54, 0x4d, + 0xcc, 0xf9, 0x5c, 0xb7, 0x16, 0xc2, 0xc2, 0x07, + 0x5b, 0xd2, 0x46, 0xf3, 0x98, 0xcd, 0x6b, 0x52, + 0x35, 0x78, 0xc5, 0x4c, 0xe7, 0xb7, 0x39, 0x2c, + 0x77, 0xe5, 0xb7, 0xb6, 0x8f, 0x9a, 0x72, 0xc6, + 0xf8, 0xed, 0x34, 0x18, 0x6a, 0x48, 0x1a, 0xc2, + 0x08, 0x88, 0xf3, 0x5b, 0xdb, 0xfc, 0xc2, 0xc8, + 0x5d, 0xca, 0x1e, 0x23, 0x9e, 0x32, 0xdd, 0x01, + 0xb4, 0x25, 0xc3, 0xe6, 0x80, 0xa4, 0x33, 0xbc, + 0xef, 0x33, 0xb4, 0xcd, 0x25, 0x86, 0x09, 0xb0, + 0xc6, 0xdc, 0x24, 0x36, 0x80, 0xe9, 0x23, 0x4e, + 0xb0, 0x74, 0x2e, 0x0e, 0x7b, 0x2e, 0x9b, 0x34, + 0xb1, 0x36, 0x10, 0x3a, 0x06, 0x89, 0x59, 0x8c, + 0x38, 0xd6, 0xa4, 0xbc, 0x76, 0x4e, 0xa5, 0x25, + 0x9c, 0xc3, 0x91, 0x3b, 0x32, 0x91, 0xd7, 0x97, + 0x13, 0x36, 0x6d, 0x18, 0xe3, 0x60, 0x34, 0xd5, + 0xa3, 0x4d, 0x10, 0x62, 0xfd, 0xb1, 0xdd, 0x33, + 0x2a, 0xcc, 0xf0, 0x86, 0x4d, 0x3c, 0xac, 0x6c, + 0x94, 0x14, 0xaf, 0x8d, 0x5a, 0x9a, 0x53, 0x79, + 0x63, 0x3d, 0xce, 0xb3, 0x3b, 0x4c, 0xd1, 0xf0, + 0xdb, 0xcb, 0x86, 0x36, 0xb5, 0xae, 0x0d, 0xc2, + 0x0e, 0xb1, 0x55, 0xcb, 0x75, 0x9a, 0x45, 0x79, + 0x79, 0x63, 0x6f, 0x6a, 0xc3, 0x1d, 0xa5, 0xbc, + 0xac, 0x0c, 0x07, 0x59, 0x25, 0xc0, 0x55, 0x76, + 0xe7, 0x47, 0x21, 0x19, 0x93, 0xfd, 0xb8, 0x4c, + 0x66, 0xc2, 0xda, 0x86, 0x79, 0x34, 0xa2, 0x0d, + 0x39, 0xbb, 0x9b, 0x7d, 0x91, 0x5b, 0xe6, 0x32, + 0x31, 0xad, 0xb8, 0xc7, 0x81, 0xee, 0x02, 0x98, + 0xb5, 0xf1, 0x25, 0xdc, 0xd2, 0x64, 0xd9, 0x4d, + 0xac, 0x36, 0xa4, 0x32, 0x7b, 0xa6, 0xf3, 0x92, + 0xca, 0x3c, 0xaa, 0x11, 0x5a, 0x2c, 0x6d, 0x15, + 0x7d, 0x8a, 0xcc, 0xda, 0xe1, 0xea, 0xd3, 0xfb, + 0x30, 0xdd, 0x61, 0xdd, 0x95, 0xe3, 0x6a, 0xeb, + 0x8e, 0xc6, 0x9e, 0x4f, 0x31, 0xa3, 0xbc, 0x83, + 0x6e, 0x5f, 0x71, 0x2e, 0x73, 0x97, 0xdd, 0xd9, + 0xde, 0x3b, 0x9d, 0x9a, 0x16, 0x99, 0x21, 0x94, + 0xf9, 0x42, 0x9a, 0xbb, 0xe1, 0x6d, 0xd9, 0x5b, + 0x81, 0x6f, 0x97, 0x5c, 0xcc, 0xed, 0x0d, 0x6c, + 0xcc, 0xc5, 0x5d, 0xc0, 0xe0, 0xd0, 0x7c, 0x2b, + 0x9b, 0x64, 0x69, 0xed, 0xb3, 0xef, 0x73, 0x46, + 0xa7, 0xfb, 0x4b, 0x19, 0x51, 0x23, 0x67, 0x73, + 0x33, 0xbc, 0x45, 0x38, 0x02, 0x0e, 0x1c, 0xf6, + 0xdf, 0xd9, 0xb3, 0x5b, 0x96, 0x6e, 0x39, 0xdc, + 0xe3, 0x7b, 0x4e, 0x18, 0xbc, 0x35, 0x56, 0x8b, + 0x70, 0x2d, 0xf2, 0xc3, 0x64, 0xd1, 0x47, 0x47, + 0x69, 0xce, 0x3b, 0xb6, 0xf0, 0x74, 0x77, 0x94, + 0x5e, 0x63, 0x6f, 0xd6, 0x17, 0x59, 0x4d, 0xc8, + 0x18, 0x85, 0xd3, 0x5a, 0xc9, 0x0e, 0xf9, 0x61, + 0xab, 0xbb, 0xd5, 0x5d, 0x71, 0x5c, 0x73, 0xf7, + 0xf9, 0xd1, 0x1a, 0x5b, 0x1c, 0x2d, 0x8d, 0xbd, + 0xa6, 0x87, 0xfc, 0xa8, 0x2a, 0x23, 0x52, 0xca, + 0xc0, 0x59, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x5d, 0x59, 0x57, + 0xf3, 0x3b, 0x4f, 0xb6, 0x67, 0xd6, 0x0b, 0x95, + 0x75, 0x65, 0x5f, 0xcc, 0xed, 0x3e, 0xd9, 0x9f, + 0x58, 0x20, 0xb3, 0x66, 0xde, 0xfa, 0xef, 0x34, + 0x2e, 0x35, 0xd9, 0x9b, 0x7b, 0xeb, 0xbc, 0xd0, + 0xb8, 0xd0, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x07, 0xbb, 0x7f, 0xdb, 0xc7, 0xe7, 0x37, 0xc2, + 0xa7, 0x02, 0x83, 0xb7, 0xfd, 0xbc, 0x7e, 0x73, + 0x7c, 0x2a, 0x70, 0x20, 0xca, 0x8b, 0xcd, 0xfd, + 0xea, 0xcb, 0xcf, 0xf9, 0x42, 0x94, 0x51, 0x79, + 0xbf, 0xbd, 0x59, 0x79, 0xff, 0x00, 0x28, 0x41, + 0x8c, 0xa3, 0xde, 0x6f, 0x7e, 0xd0, 0xfd, 0x62, + 0xa5, 0x54, 0x56, 0x51, 0xef, 0x37, 0xbf, 0x68, + 0x7e, 0xb1, 0x52, 0xa8, 0x08, 0x88, 0x83, 0xd3, + 0x35, 0x15, 0xf1, 0x0b, 0xdf, 0x7d, 0xb8, 0xfb, + 0x57, 0xfd, 0x62, 0xbe, 0xde, 0xcd, 0x45, 0x7c, + 0x42, 0xf7, 0xdf, 0x6e, 0x3e, 0xd5, 0xff, 0x00, + 0x58, 0xac, 0x9e, 0x6f, 0xc2, 0x8f, 0xa0, 0xfe, + 0xdb, 0xfb, 0xfc, 0xc7, 0xc3, 0x1f, 0xf9, 0xb4, + 0x22, 0x22, 0xc8, 0xfa, 0x41, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x10, 0x22, 0x04, 0x19, 0xdd, 0x0b, 0xee, + 0x50, 0xfb, 0x8d, 0xbf, 0x98, 0xcf, 0xaa, 0xbe, + 0x1a, 0x37, 0x17, 0xdc, 0xa1, 0xf7, 0x1b, 0x7f, + 0x31, 0x9f, 0x55, 0x6a, 0xf2, 0x7e, 0x37, 0x7c, + 0xf7, 0xf7, 0x27, 0xdb, 0xe5, 0xbf, 0xfc, 0x9f, + 0xfd, 0x2c, 0x8d, 0x6a, 0xbe, 0xef, 0x28, 0xf6, + 0xca, 0xb0, 0x0d, 0x6a, 0xbe, 0xef, 0x28, 0xf6, + 0xca, 0xd8, 0xf9, 0xc1, 0x11, 0x10, 0x63, 0x6c, + 0x35, 0x59, 0x79, 0xaf, 0xfe, 0xe2, 0xae, 0x2b, + 0x1e, 0xd8, 0x6a, 0xb2, 0xf3, 0x5f, 0xfd, 0xc5, + 0x5c, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x12, 0x7b, + 0x39, 0x79, 0x1d, 0xa6, 0x68, 0xc7, 0x48, 0x68, + 0xc9, 0x1a, 0x63, 0x24, 0xe8, 0x00, 0x9d, 0x20, + 0x95, 0xbb, 0xe1, 0xdb, 0xe1, 0x99, 0x61, 0xc1, + 0xff, 0x00, 0x6f, 0xce, 0x62, 0xe7, 0xc9, 0xf1, + 0x70, 0x57, 0x15, 0x54, 0x32, 0xd9, 0xed, 0x57, + 0x3c, 0xdf, 0x35, 0xce, 0xbf, 0x9b, 0x1a, 0x30, + 0xe2, 0x34, 0x41, 0xdd, 0xb4, 0x37, 0x71, 0xdd, + 0x66, 0x92, 0x3a, 0x2a, 0x3a, 0x38, 0xda, 0xd8, + 0xda, 0xe1, 0xa8, 0xd2, 0xbc, 0x6b, 0xd6, 0xcc, + 0x7f, 0x38, 0x8b, 0x77, 0xc5, 0x77, 0x81, 0x45, + 0x00, 0x06, 0xa5, 0x90, 0x48, 0x35, 0x69, 0x20, + 0xef, 0x8d, 0x05, 0x07, 0x7f, 0xb6, 0x3e, 0xc7, + 0x3a, 0x92, 0x78, 0xf4, 0x73, 0x53, 0x3f, 0x10, + 0x1b, 0xad, 0xc4, 0x6a, 0x14, 0xac, 0xf6, 0x6c, + 0x66, 0x79, 0x63, 0x7f, 0x6e, 0x2b, 0x6d, 0x76, + 0xf0, 0xe1, 0x4d, 0xc7, 0x91, 0xab, 0xe5, 0x55, + 0xb2, 0x49, 0xad, 0x4e, 0xbd, 0x27, 0xbb, 0xa5, + 0x67, 0x9c, 0x92, 0x80, 0x07, 0x38, 0x06, 0xe9, + 0x68, 0x04, 0xe8, 0x3d, 0x84, 0x13, 0xf9, 0xa6, + 0xcf, 0xe6, 0x97, 0x59, 0x94, 0xf3, 0xc3, 0x1b, + 0x79, 0xa7, 0xba, 0xac, 0x71, 0x78, 0x1b, 0x83, + 0xba, 0xbc, 0x67, 0x8f, 0x8a, 0xdb, 0x2b, 0xb5, + 0xca, 0x83, 0xc4, 0xb2, 0xc5, 0xe3, 0x4b, 0x84, + 0xd6, 0x9a, 0x49, 0xf9, 0x54, 0x27, 0x3b, 0x2f, + 0xac, 0x7f, 0x28, 0xf1, 0xaf, 0x3f, 0xfc, 0xa0, + 0x6e, 0xe9, 0x56, 0xad, 0xa1, 0xc9, 0x73, 0x0b, + 0xfb, 0xa8, 0xe5, 0xb6, 0x6b, 0x5c, 0xc6, 0x30, + 0x34, 0xd5, 0xc0, 0x69, 0xee, 0xaa, 0xaa, 0xf5, + 0xcf, 0x4d, 0xeb, 0x1f, 0xca, 0x3c, 0x68, 0x24, + 0x25, 0xc9, 0x73, 0x0b, 0x07, 0x45, 0x35, 0xc3, + 0x43, 0x58, 0x64, 0x6b, 0x46, 0x17, 0x62, 0xa9, + 0x27, 0x46, 0x85, 0x2b, 0x9f, 0xe4, 0x59, 0x85, + 0xf6, 0x60, 0x67, 0xb7, 0x8d, 0xa6, 0x32, 0xc6, + 0xb7, 0x4b, 0x80, 0x35, 0x6d, 0x55, 0x65, 0xd2, + 0x48, 0xe0, 0x03, 0x9e, 0xe7, 0x01, 0xa4, 0x02, + 0x49, 0xd2, 0xb3, 0xcf, 0x4d, 0xeb, 0x1f, 0xca, + 0x3c, 0x68, 0x24, 0xd9, 0x94, 0x5f, 0x58, 0x5f, + 0x59, 0xc9, 0x74, 0xc0, 0xd6, 0xc9, 0x3c, 0x6d, + 0x6e, 0x17, 0x62, 0xd4, 0xe0, 0x77, 0x17, 0x9d, + 0xa5, 0xaf, 0x5c, 0xcd, 0x5d, 0xe6, 0xf8, 0x14, + 0x69, 0x92, 0x43, 0x4a, 0xbd, 0xc6, 0x9a, 0x45, + 0x49, 0x34, 0x3d, 0x85, 0x87, 0x39, 0xce, 0x35, + 0x71, 0x2e, 0x3b, 0xe4, 0xd4, 0xa0, 0xdf, 0x61, + 0xef, 0xd6, 0xe0, 0x7a, 0xd6, 0x7d, 0x60, 0xbb, + 0xb6, 0xa0, 0x9e, 0xb8, 0x97, 0xcc, 0x68, 0xef, + 0x28, 0xaa, 0x9a, 0x83, 0xbd, 0xab, 0xc2, 0x84, + 0xb9, 0xc6, 0xae, 0x25, 0xc7, 0x7c, 0x9a, 0xa0, + 0x9e, 0x9e, 0xb2, 0xec, 0x8c, 0x05, 0x9a, 0x44, + 0x52, 0xe9, 0x23, 0x70, 0x02, 0xef, 0x94, 0xaf, + 0x73, 0xc2, 0xfc, 0xeb, 0x29, 0xb5, 0x92, 0xd6, + 0x8f, 0xb9, 0xb4, 0x1c, 0xdc, 0x91, 0x56, 0x8e, + 0xa0, 0x14, 0xaa, 0xaf, 0xe3, 0x7d, 0x29, 0x88, + 0xd3, 0x7a, 0xa6, 0x9a, 0xea, 0xb3, 0x1c, 0xb2, + 0xc4, 0xec, 0x51, 0x3d, 0xcc, 0x76, 0xe9, 0x69, + 0xa1, 0xef, 0x20, 0x9f, 0xb2, 0xb7, 0x93, 0x23, + 0xcb, 0xee, 0xae, 0x6e, 0xc0, 0x64, 0xf3, 0xb7, + 0x9b, 0x86, 0x2a, 0x82, 0xe3, 0xbc, 0x74, 0x76, + 0xd6, 0xac, 0xa8, 0x1f, 0x87, 0x73, 0x2a, 0x69, + 0xf1, 0x9a, 0x07, 0x70, 0x34, 0x28, 0x59, 0x25, + 0x96, 0x57, 0x62, 0x95, 0xee, 0x7b, 0xb7, 0xdc, + 0x49, 0x58, 0xc4, 0xe0, 0xd2, 0xd0, 0xe2, 0x1a, + 0x75, 0x80, 0x48, 0x07, 0xb6, 0x82, 0xd5, 0xb3, + 0x73, 0xc4, 0xfc, 0xaf, 0x1c, 0x82, 0xae, 0xb0, + 0x7b, 0xdc, 0xd2, 0x75, 0x86, 0xb9, 0xa4, 0x8e, + 0xf1, 0x5c, 0x3b, 0x3a, 0xf7, 0xc9, 0x16, 0x6b, + 0x23, 0xb4, 0xb9, 0xf0, 0xe2, 0x71, 0xec, 0x9c, + 0x65, 0x41, 0x87, 0x38, 0x02, 0x01, 0x20, 0x3b, + 0xca, 0x00, 0xd0, 0x1d, 0xc4, 0x6b, 0x9e, 0xda, + 0xe1, 0x71, 0x6e, 0x2d, 0x74, 0x34, 0xa8, 0xd3, + 0xa3, 0xbe, 0x83, 0xc8, 0xd4, 0xb2, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0xba, 0xb2, 0xaf, 0xe6, 0x76, 0x9f, + 0x6c, 0xcf, 0xac, 0x17, 0x2a, 0xea, 0xca, 0xbf, + 0x99, 0xda, 0x7d, 0xb3, 0x3e, 0xb0, 0x41, 0x66, + 0xcd, 0xbd, 0xf5, 0xde, 0x68, 0x5c, 0x6b, 0xb3, + 0x36, 0xf7, 0xd7, 0x79, 0xa1, 0x71, 0xa0, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x0f, 0x76, 0xff, + 0x00, 0xb7, 0x8f, 0xce, 0x6f, 0x85, 0x4e, 0x05, + 0x07, 0x6f, 0xfb, 0x78, 0xfc, 0xe6, 0xf8, 0x54, + 0xe0, 0x41, 0x95, 0x17, 0x9b, 0xfb, 0xd5, 0x97, + 0x9f, 0xf2, 0x85, 0x28, 0xa2, 0xf3, 0x7f, 0x7a, + 0xb2, 0xf3, 0xfe, 0x50, 0x83, 0x19, 0x47, 0xbc, + 0xde, 0xfd, 0xa1, 0xfa, 0xc5, 0x4a, 0xa8, 0xac, + 0xa3, 0xde, 0x6f, 0x7e, 0xd0, 0xfd, 0x62, 0xa5, + 0x50, 0x11, 0x11, 0x07, 0xa6, 0x6a, 0x2b, 0xe2, + 0x17, 0xbe, 0xfb, 0x71, 0xf6, 0xaf, 0xfa, 0xc5, + 0x7d, 0xbd, 0xa2, 0xa1, 0xc3, 0x7c, 0x51, 0x7c, + 0xa6, 0xe7, 0x63, 0xb6, 0x8e, 0x4b, 0x99, 0x9e, + 0xdb, 0x37, 0x96, 0xba, 0x47, 0x96, 0x9a, 0xb7, + 0x48, 0x24, 0xf6, 0x56, 0x6f, 0x37, 0x59, 0x98, + 0xae, 0x91, 0xae, 0x9c, 0x9e, 0xdf, 0xf2, 0x0c, + 0xf8, 0xb1, 0xdf, 0x3f, 0x72, 0xf5, 0xa6, 0xed, + 0x91, 0x1b, 0xe7, 0x6f, 0xdb, 0xf1, 0x57, 0xd1, + 0x4e, 0x7c, 0x17, 0xb4, 0xbd, 0x09, 0xfc, 0x2d, + 0xe3, 0x4f, 0x82, 0xf6, 0x97, 0xa1, 0x3f, 0x85, + 0xbc, 0x6b, 0x26, 0xcb, 0x74, 0xcf, 0xc9, 0xf4, + 0x3e, 0xbb, 0xca, 0xfe, 0x7e, 0x2f, 0xf9, 0x2a, + 0x83, 0x45, 0x39, 0xf0, 0x5e, 0xd2, 0xf4, 0x27, + 0xf0, 0xb7, 0x8d, 0x3e, 0x0b, 0xda, 0x5e, 0x84, + 0xfe, 0x16, 0xf1, 0xa6, 0xcb, 0x74, 0xcf, 0xc8, + 0xf5, 0xde, 0x57, 0xf3, 0xf1, 0x7f, 0xc9, 0x54, + 0x1a, 0x29, 0xcf, 0x82, 0xf6, 0x97, 0xa1, 0x3f, + 0x85, 0xbc, 0x69, 0xf0, 0x5e, 0xd2, 0xf4, 0x27, + 0xf0, 0xb7, 0x8d, 0x36, 0x5b, 0xa6, 0x7e, 0x47, + 0xae, 0xf2, 0xbf, 0x9f, 0x8b, 0xfe, 0x4a, 0xa0, + 0xd1, 0x4e, 0x7c, 0x17, 0xb4, 0xbd, 0x09, 0xfc, + 0x2d, 0xe3, 0x4f, 0x82, 0xf6, 0x97, 0xa1, 0x3f, + 0x85, 0xbc, 0x69, 0xb2, 0xdd, 0x33, 0xf2, 0x3d, + 0x77, 0x95, 0xfc, 0xfc, 0x5f, 0xf2, 0x55, 0x06, + 0x8a, 0x73, 0xe0, 0xbd, 0xa5, 0xe8, 0x4f, 0xe1, + 0x6f, 0x1a, 0x7c, 0x17, 0xb4, 0xbd, 0x09, 0xfc, + 0x2d, 0xe3, 0x4d, 0x96, 0xe9, 0x9f, 0x91, 0xeb, + 0xbc, 0xaf, 0xe7, 0xe2, 0xff, 0x00, 0x92, 0xa8, + 0x34, 0x53, 0x9f, 0x05, 0xed, 0x2f, 0x42, 0x7f, + 0x0b, 0x78, 0xd3, 0xe0, 0xbd, 0xa5, 0xe8, 0x4f, + 0xe1, 0x6f, 0x1a, 0x6c, 0xb7, 0x4c, 0xfc, 0x8f, + 0x5d, 0xe5, 0x7f, 0x3f, 0x17, 0xfc, 0x95, 0x41, + 0xa2, 0x9c, 0xf8, 0x2f, 0x69, 0x7a, 0x13, 0xf8, + 0x5b, 0xc6, 0x9f, 0x05, 0xed, 0x2f, 0x42, 0x7f, + 0x0b, 0x78, 0xd3, 0x65, 0xba, 0x67, 0xe4, 0x7a, + 0xef, 0x2b, 0xf9, 0xf8, 0xbf, 0xe4, 0xaa, 0x0d, + 0x14, 0xe7, 0xc1, 0x7b, 0x4b, 0xd0, 0x9f, 0xc2, + 0xde, 0x34, 0xf8, 0x2f, 0x69, 0x7a, 0x13, 0xf8, + 0x5b, 0xc6, 0x9b, 0x2d, 0xd3, 0x3f, 0x23, 0xd7, + 0x79, 0x5f, 0xcf, 0xc5, 0xff, 0x00, 0x25, 0x50, + 0x68, 0xa7, 0x3e, 0x0b, 0xda, 0x5e, 0x84, 0xfe, + 0x16, 0xf1, 0xa7, 0xc1, 0x7b, 0x4b, 0xd0, 0x9f, + 0xc2, 0xde, 0x34, 0xd9, 0x6e, 0x99, 0xf9, 0x1e, + 0xbb, 0xca, 0xfe, 0x7e, 0x2f, 0xf9, 0x2a, 0x83, + 0x45, 0x39, 0xf0, 0x5e, 0xd2, 0xf4, 0x27, 0xf0, + 0xb7, 0x8d, 0x3e, 0x0b, 0xda, 0x5e, 0x84, 0xfe, + 0x16, 0xf1, 0xa6, 0xcb, 0x74, 0xcf, 0xc8, 0xf5, + 0xde, 0x57, 0xf3, 0xf1, 0x7f, 0xc9, 0x54, 0x1a, + 0x29, 0xcf, 0x82, 0xf6, 0x97, 0xa1, 0x3f, 0x85, + 0xbc, 0x69, 0xf0, 0x5e, 0xd2, 0xf4, 0x27, 0xf0, + 0xb7, 0x8d, 0x36, 0x5b, 0xa6, 0x7e, 0x47, 0xae, + 0xf2, 0xbf, 0x9f, 0x8b, 0xfe, 0x4a, 0xa0, 0xd1, + 0x4e, 0x7c, 0x17, 0xb4, 0xbd, 0x09, 0xfc, 0x2d, + 0xe3, 0x4f, 0x82, 0xf6, 0x97, 0xa1, 0x3f, 0x85, + 0xbc, 0x69, 0xb2, 0xdd, 0x33, 0xf2, 0x3d, 0x77, + 0x95, 0xfc, 0xfc, 0x5f, 0xf2, 0x55, 0x06, 0x8a, + 0x73, 0xe0, 0xbd, 0xa5, 0xe8, 0x4f, 0xe1, 0x6f, + 0x1a, 0x7c, 0x17, 0xb4, 0xbd, 0x09, 0xfc, 0x2d, + 0xe3, 0x4d, 0x96, 0xe9, 0x9f, 0x91, 0xeb, 0xbc, + 0xaf, 0xe7, 0xe2, 0xff, 0x00, 0x92, 0xa8, 0x34, + 0x53, 0x83, 0x62, 0xb6, 0x92, 0x95, 0x16, 0x4f, + 0xd1, 0xd9, 0x6f, 0x1a, 0x7c, 0x17, 0xb4, 0xbd, + 0x09, 0xfc, 0x2d, 0xe3, 0x4d, 0x96, 0xe9, 0x9f, + 0x91, 0xeb, 0xbc, 0xaf, 0xe7, 0xe2, 0xff, 0x00, + 0x92, 0xa8, 0x34, 0x53, 0x9f, 0x05, 0xed, 0x2f, + 0x42, 0x7f, 0x0b, 0x78, 0xd3, 0xe0, 0xbd, 0xa5, + 0xe8, 0x4f, 0xe1, 0x6f, 0x1a, 0x6c, 0xb7, 0x4c, + 0xfc, 0x8f, 0x5d, 0xe5, 0x7f, 0x3f, 0x17, 0xfc, + 0x95, 0x41, 0xa2, 0x9c, 0xf8, 0x2f, 0x69, 0x7a, + 0x13, 0xf8, 0x5b, 0xc6, 0x9f, 0x05, 0xed, 0x2f, + 0x42, 0x7f, 0x0b, 0x78, 0xd3, 0x65, 0xba, 0x67, + 0xe4, 0x7a, 0xef, 0x2b, 0xf9, 0xf8, 0xbf, 0xe4, + 0xaa, 0x0d, 0x14, 0xe7, 0xc1, 0x7b, 0x4b, 0xd0, + 0x9f, 0xc2, 0xde, 0x34, 0xf8, 0x2f, 0x69, 0x7a, + 0x13, 0xf8, 0x5b, 0xc6, 0x9b, 0x2d, 0xd3, 0x3f, + 0x23, 0xd7, 0x79, 0x5f, 0xcf, 0xc5, 0xff, 0x00, + 0x25, 0x50, 0x68, 0xa7, 0x3e, 0x0b, 0xda, 0x5e, + 0x84, 0xfe, 0x16, 0xf1, 0xa7, 0xc1, 0x7b, 0x4b, + 0xd0, 0x9f, 0xc2, 0xde, 0x34, 0xd9, 0x6e, 0x99, + 0xf9, 0x1e, 0xbb, 0xca, 0xfe, 0x7e, 0x2f, 0xf9, + 0x2a, 0x83, 0x45, 0x39, 0xf0, 0x5e, 0xd2, 0xf4, + 0x27, 0xf0, 0xb7, 0x8d, 0x3e, 0x0b, 0xda, 0x5e, + 0x84, 0xfe, 0x16, 0xf1, 0xa6, 0xcb, 0x74, 0xcf, + 0xc8, 0xf5, 0xde, 0x57, 0xf3, 0xf1, 0x7f, 0xc9, + 0x54, 0x1a, 0x29, 0xcf, 0x82, 0xf6, 0x97, 0xa1, + 0x3f, 0x85, 0xbc, 0x69, 0xf0, 0x5e, 0xd2, 0xf4, + 0x27, 0xf0, 0xb7, 0x8d, 0x36, 0x5b, 0xa6, 0x7e, + 0x47, 0xae, 0xf2, 0xbf, 0x9f, 0x8b, 0xfe, 0x4a, + 0xa0, 0xd1, 0x4e, 0x7c, 0x17, 0xb4, 0xbd, 0x09, + 0xfc, 0x2d, 0xe3, 0x4f, 0x82, 0xf6, 0x97, 0xa1, + 0x3f, 0x85, 0xbc, 0x69, 0xb2, 0xdd, 0x33, 0xf2, + 0x3d, 0x77, 0x95, 0xfc, 0xfc, 0x5f, 0xf2, 0x55, + 0x06, 0x8a, 0x73, 0xe0, 0xbd, 0xa5, 0xe8, 0x4f, + 0xe1, 0x6f, 0x1a, 0x7c, 0x17, 0xb4, 0xbd, 0x09, + 0xfc, 0x2d, 0xe3, 0x4d, 0x96, 0xe9, 0x9f, 0x91, + 0xeb, 0xbc, 0xaf, 0xe7, 0xe2, 0xff, 0x00, 0x92, + 0xa8, 0x34, 0x0a, 0x73, 0xe0, 0xbd, 0xa5, 0xe8, + 0x4f, 0xe1, 0x6f, 0x1a, 0x7c, 0x19, 0xb4, 0xb4, + 0x23, 0xd8, 0x9f, 0xc2, 0xde, 0x34, 0xed, 0xdb, + 0xa6, 0x7e, 0x47, 0xae, 0xf2, 0xbf, 0x9f, 0x8b, + 0xfe, 0x4a, 0xff, 0x00, 0xe5, 0x0a, 0x37, 0x17, + 0xdc, 0xa3, 0xf7, 0x28, 0x3c, 0xd6, 0x7d, 0x55, + 0xf2, 0x67, 0x6c, 0x66, 0xd2, 0xe0, 0x23, 0xd8, + 0x5f, 0xc2, 0xde, 0x35, 0xf5, 0x88, 0x9a, 0xf6, + 0xd9, 0xc2, 0xd7, 0x8a, 0x39, 0xad, 0x68, 0x70, + 0xde, 0x20, 0x51, 0x6a, 0xf2, 0x95, 0x98, 0xdd, + 0xac, 0x4c, 0x6b, 0xcd, 0xe0, 0xff, 0x00, 0x3f, + 0xcf, 0x8b, 0x2d, 0x70, 0x46, 0x3c, 0x94, 0xc9, + 0xb7, 0x74, 0xce, 0xcb, 0x45, 0xb4, 0xd7, 0x4e, + 0x5f, 0x06, 0x46, 0xb5, 0x5f, 0x77, 0x94, 0x7b, + 0x65, 0x58, 0x06, 0xb5, 0x5f, 0x77, 0x94, 0x7b, + 0x65, 0x6a, 0x78, 0x22, 0xc2, 0xca, 0xc1, 0xd4, + 0x82, 0x4b, 0x39, 0xb6, 0xca, 0x67, 0x6d, 0xb9, + 0xcc, 0xa7, 0xe6, 0x0b, 0x5a, 0x79, 0xb1, 0x88, + 0x36, 0xb5, 0xc3, 0x5d, 0x60, 0xa8, 0xde, 0xae, + 0xd9, 0x3e, 0x9d, 0xff, 0x00, 0x30, 0x7a, 0x2b, + 0x1b, 0x65, 0xaa, 0xc7, 0xcd, 0x7f, 0xf7, 0x15, + 0x69, 0x05, 0x9b, 0xab, 0xb6, 0x4f, 0xa7, 0x7f, + 0xcc, 0x1e, 0x8a, 0x75, 0x76, 0xc9, 0xf4, 0xef, + 0xf9, 0x83, 0xd1, 0x55, 0x94, 0x41, 0x66, 0xea, + 0xed, 0x93, 0xe9, 0xdf, 0xf3, 0x07, 0xa2, 0x9d, + 0x5d, 0xb2, 0x7d, 0x3b, 0xfe, 0x60, 0xf4, 0x55, + 0x65, 0x10, 0x59, 0xba, 0xbb, 0x64, 0xfa, 0x77, + 0xfc, 0xc1, 0xe8, 0xa7, 0x57, 0x6c, 0x9f, 0x4e, + 0xff, 0x00, 0x98, 0x3d, 0x15, 0x59, 0x44, 0x16, + 0x6e, 0xae, 0xd9, 0x3e, 0x9d, 0xff, 0x00, 0x30, + 0x7a, 0x29, 0xd5, 0xdb, 0x27, 0xd3, 0xbf, 0xe6, + 0x0f, 0x45, 0x56, 0x51, 0x05, 0x9b, 0xab, 0xb6, + 0x4f, 0xa7, 0x7f, 0xcc, 0x1e, 0x8a, 0x75, 0x76, + 0xc9, 0xf4, 0xef, 0xf9, 0x83, 0xd1, 0x55, 0x94, + 0x41, 0x66, 0xea, 0xed, 0x93, 0xe9, 0xdf, 0xf3, + 0x07, 0xa2, 0x9d, 0x5d, 0xb2, 0x7d, 0x3b, 0xfe, + 0x60, 0xf4, 0x55, 0x65, 0x10, 0x59, 0xba, 0xbb, + 0x64, 0xfa, 0x77, 0xfc, 0xc1, 0xe8, 0xa7, 0x57, + 0x6c, 0x9f, 0x4e, 0xff, 0x00, 0x98, 0x3d, 0x15, + 0x59, 0x44, 0x16, 0x6e, 0xae, 0xd9, 0x3e, 0x9d, + 0xff, 0x00, 0x30, 0x7a, 0x29, 0xd5, 0xdb, 0x27, + 0xd3, 0xbf, 0xe6, 0x0f, 0x45, 0x56, 0x51, 0x05, + 0x9b, 0xab, 0xb6, 0x4f, 0xa7, 0x7f, 0xcc, 0x1e, + 0x8a, 0x75, 0x76, 0xc9, 0xf4, 0xef, 0xf9, 0x83, + 0xd1, 0x55, 0x94, 0xa7, 0x7f, 0x52, 0x0b, 0x37, + 0x57, 0x6c, 0x9f, 0x4e, 0xff, 0x00, 0x98, 0x3d, + 0x14, 0xea, 0xed, 0x93, 0xe9, 0xdf, 0xf3, 0x07, + 0xa2, 0xab, 0x58, 0x4e, 0xf1, 0xe0, 0x58, 0x41, + 0x66, 0xea, 0xed, 0x93, 0xe9, 0xdf, 0xf3, 0x07, + 0xa2, 0x9d, 0x5d, 0xb2, 0x7d, 0x3b, 0xfe, 0x60, + 0xf4, 0x55, 0x69, 0xac, 0x73, 0xcd, 0x18, 0xd2, + 0xe2, 0x37, 0x1a, 0x09, 0xf0, 0x2c, 0x16, 0x96, + 0x9a, 0x38, 0x10, 0x46, 0xb0, 0x45, 0x0a, 0x0b, + 0x37, 0x57, 0x6c, 0x9f, 0x4e, 0xff, 0x00, 0x98, + 0x3d, 0x14, 0xea, 0xed, 0x93, 0xe9, 0xdf, 0xf3, + 0x07, 0xa2, 0xab, 0x21, 0xa4, 0xea, 0x04, 0xf7, + 0x13, 0x42, 0x0b, 0x37, 0x57, 0x6c, 0x9f, 0x4e, + 0xff, 0x00, 0x98, 0x3d, 0x14, 0xea, 0xed, 0x93, + 0xe9, 0xdf, 0xf3, 0x07, 0xa2, 0xab, 0x34, 0x34, + 0xad, 0x34, 0x6f, 0xa2, 0x0b, 0x37, 0x57, 0x6c, + 0x9f, 0x4e, 0xff, 0x00, 0x98, 0x3d, 0x14, 0xea, + 0xed, 0x93, 0xe9, 0xdf, 0xf3, 0x07, 0xa2, 0xab, + 0x28, 0x82, 0xcd, 0xd5, 0xdb, 0x27, 0xd3, 0xbf, + 0xe6, 0x0f, 0x45, 0x3a, 0xbb, 0x64, 0xfa, 0x77, + 0xfc, 0xc1, 0xe8, 0xaa, 0xca, 0x20, 0xb3, 0x75, + 0x76, 0xc9, 0xf4, 0xef, 0xf9, 0x83, 0xd1, 0x4e, + 0xae, 0xd9, 0x3e, 0x9d, 0xff, 0x00, 0x30, 0x7a, + 0x2a, 0xb2, 0x88, 0x2c, 0xdd, 0x5d, 0xb2, 0x7d, + 0x3b, 0xfe, 0x60, 0xf4, 0x53, 0xab, 0xb6, 0x4f, + 0xa7, 0x7f, 0xcc, 0x1e, 0x8a, 0xac, 0xa2, 0x0b, + 0x37, 0x57, 0x6c, 0x9f, 0x4e, 0xff, 0x00, 0x98, + 0x3d, 0x14, 0xea, 0xed, 0x93, 0xe9, 0xdf, 0xf3, + 0x07, 0xa2, 0xab, 0x28, 0x82, 0xcd, 0xd5, 0xdb, + 0x27, 0xd3, 0xbf, 0xe6, 0x0f, 0x45, 0x3a, 0xbb, + 0x64, 0xfa, 0x77, 0xfc, 0xc1, 0xe8, 0xaa, 0xca, + 0x20, 0xb3, 0x75, 0x76, 0xc9, 0xf4, 0xef, 0xf9, + 0x83, 0xd1, 0x4e, 0xae, 0xd9, 0x3e, 0x9d, 0xff, + 0x00, 0x30, 0x7a, 0x2a, 0xb2, 0x88, 0x2c, 0xdd, + 0x5d, 0xb2, 0x7d, 0x3b, 0xfe, 0x60, 0xf4, 0x53, + 0xab, 0xb6, 0x4f, 0xa7, 0x7f, 0xcc, 0x1e, 0x8a, + 0xac, 0xa2, 0x0b, 0x37, 0x57, 0x6c, 0x9f, 0x4e, + 0xff, 0x00, 0x98, 0x3d, 0x15, 0xb6, 0xd2, 0xc7, + 0x66, 0x59, 0x75, 0x0b, 0xa0, 0xbc, 0xc7, 0x33, + 0x5e, 0xd3, 0x1b, 0x71, 0x83, 0x57, 0x03, 0xa0, + 0x53, 0x0a, 0xaa, 0x2e, 0xac, 0xa7, 0xf9, 0xa5, + 0xa7, 0xdb, 0x33, 0xeb, 0x04, 0x16, 0x9c, 0xdb, + 0xdf, 0x1d, 0xe6, 0x8f, 0x02, 0xe3, 0x5d, 0x99, + 0xb7, 0xbe, 0xbb, 0xcd, 0x1e, 0x05, 0xc6, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x3d, 0xdb, + 0xfe, 0xde, 0x3f, 0x39, 0xbe, 0x15, 0x38, 0x14, + 0x1d, 0xbf, 0xed, 0xe3, 0xf3, 0x9b, 0xe1, 0x53, + 0x81, 0x06, 0x54, 0x5e, 0x6f, 0xef, 0x56, 0x5e, + 0x7f, 0xca, 0x14, 0xa2, 0x8b, 0xcd, 0xfd, 0xea, + 0xcb, 0xcf, 0xf9, 0x42, 0x0c, 0x65, 0x1e, 0xf3, + 0x7b, 0xf6, 0x87, 0xeb, 0x15, 0x28, 0xa2, 0xf2, + 0x9f, 0x79, 0xbc, 0xf3, 0xcf, 0xd6, 0x2a, 0x4d, + 0x06, 0x51, 0x61, 0x10, 0x6d, 0x88, 0xe8, 0x34, + 0xd2, 0xbe, 0x63, 0x73, 0xf8, 0x81, 0xb4, 0x51, + 0xdc, 0xcd, 0x1b, 0x24, 0x8b, 0x0b, 0x1e, 0xe6, + 0x81, 0xcd, 0x8d, 0x40, 0x90, 0xbe, 0x9d, 0x0e, + 0xa7, 0x2f, 0x86, 0xde, 0xfb, 0xed, 0xc7, 0xda, + 0xbf, 0xeb, 0x14, 0x16, 0x0f, 0xf7, 0x13, 0x69, + 0x7d, 0x64, 0x5f, 0xbb, 0x09, 0xfe, 0xe2, 0x6d, + 0x2f, 0xac, 0x8b, 0xf7, 0x61, 0x56, 0x11, 0x35, + 0x91, 0x67, 0xff, 0x00, 0x71, 0x36, 0x97, 0xd6, + 0x45, 0xfb, 0xb0, 0x9f, 0xee, 0x26, 0xd2, 0xfa, + 0xc8, 0xbf, 0x76, 0x15, 0x61, 0x13, 0x59, 0x16, + 0x7f, 0xf7, 0x13, 0x69, 0x7d, 0x64, 0x5f, 0xbb, + 0x09, 0xfe, 0xe2, 0x6d, 0x2f, 0xac, 0x8b, 0xf7, + 0x61, 0x56, 0x11, 0x35, 0x91, 0x67, 0xff, 0x00, + 0x71, 0x36, 0x97, 0xd6, 0x45, 0xfb, 0xb0, 0x9f, + 0xee, 0x26, 0xd2, 0xfa, 0xc8, 0xbf, 0x76, 0x15, + 0x61, 0x13, 0x59, 0x16, 0x7f, 0xf7, 0x13, 0x69, + 0x7d, 0x64, 0x5f, 0xbb, 0x09, 0xfe, 0xe2, 0x6d, + 0x2f, 0xac, 0x8b, 0xf7, 0x61, 0x56, 0x14, 0xed, + 0x8e, 0xc5, 0x6d, 0x15, 0xfd, 0xa4, 0x57, 0x96, + 0xb0, 0xc6, 0xe8, 0x26, 0x6e, 0x28, 0xc9, 0x91, + 0xa0, 0x91, 0xda, 0x29, 0xac, 0x8e, 0xaf, 0xf7, + 0x13, 0x69, 0x7d, 0x64, 0x5f, 0xbb, 0x09, 0xfe, + 0xe2, 0x6d, 0x2f, 0xac, 0x8b, 0xf7, 0x61, 0x78, + 0x3f, 0x87, 0xbb, 0x54, 0x05, 0x4d, 0xbc, 0x74, + 0x1f, 0xe2, 0xb1, 0x47, 0x65, 0x3b, 0x39, 0x9b, + 0x67, 0x26, 0x61, 0x61, 0x1b, 0x64, 0xf6, 0x72, + 0x04, 0xb8, 0x9e, 0x19, 0x42, 0x6b, 0xf3, 0xbb, + 0x49, 0xac, 0x89, 0x4f, 0xf7, 0x13, 0x69, 0x7d, + 0x64, 0x5f, 0xbb, 0x09, 0xfe, 0xe2, 0x6d, 0x2f, + 0xac, 0x8b, 0xf7, 0x61, 0x6b, 0x77, 0xe1, 0xf6, + 0xd4, 0xb4, 0x54, 0xdb, 0xc7, 0xdc, 0x95, 0x9c, + 0x6a, 0x0a, 0xea, 0xd2, 0xea, 0xce, 0xe1, 0xd6, + 0xd7, 0x71, 0x3a, 0x19, 0xd8, 0x40, 0x74, 0x6f, + 0xd0, 0x45, 0x74, 0x84, 0xd6, 0x45, 0x87, 0xfd, + 0xc4, 0xda, 0x5f, 0x59, 0x17, 0xee, 0xc2, 0x7f, + 0xb8, 0x9b, 0x4b, 0xeb, 0x22, 0xfd, 0xd8, 0x50, + 0xb9, 0xa6, 0x4f, 0x7f, 0x94, 0xc9, 0x14, 0x57, + 0xcc, 0x6b, 0x1f, 0x3c, 0x62, 0x58, 0xc3, 0x5c, + 0x1d, 0x56, 0x1d, 0x15, 0xd0, 0xb4, 0xd8, 0xd9, + 0x5c, 0x5f, 0xdd, 0xc5, 0x67, 0x6a, 0xd0, 0xe9, + 0xe6, 0x38, 0x58, 0xd2, 0x68, 0x2b, 0xdb, 0x29, + 0xac, 0x8b, 0x07, 0xfb, 0x89, 0xb4, 0xbe, 0xb2, + 0x2f, 0xdd, 0x84, 0xff, 0x00, 0x71, 0x36, 0x97, + 0xd6, 0x45, 0xfb, 0xb0, 0xab, 0xd7, 0x76, 0xb3, + 0xd9, 0x5d, 0x4b, 0x69, 0x70, 0x03, 0x66, 0x81, + 0xc5, 0x92, 0x34, 0x1a, 0x80, 0x47, 0x64, 0x2d, + 0x29, 0xac, 0x8b, 0x3f, 0xfb, 0x89, 0xb4, 0xbe, + 0xb2, 0x2f, 0xdd, 0x84, 0xff, 0x00, 0x71, 0x36, + 0x97, 0xd6, 0x45, 0xfb, 0xb0, 0xab, 0x08, 0x9a, + 0xc8, 0xb3, 0xff, 0x00, 0xb8, 0x9b, 0x4b, 0xeb, + 0x22, 0xfd, 0xd8, 0x4f, 0xf7, 0x13, 0x69, 0x7d, + 0x64, 0x5f, 0xbb, 0x0a, 0xb0, 0x89, 0xac, 0x8b, + 0x3f, 0xfb, 0x89, 0xb4, 0xbe, 0xb2, 0x2f, 0xdd, + 0x84, 0xff, 0x00, 0x71, 0x36, 0x97, 0xd6, 0x45, + 0xfb, 0xb0, 0xab, 0x08, 0x9a, 0xc8, 0xb3, 0xff, + 0x00, 0xb8, 0x9b, 0x4b, 0xeb, 0x22, 0xfd, 0xd8, + 0x4f, 0xf7, 0x13, 0x69, 0x7d, 0x64, 0x5f, 0xbb, + 0x0a, 0xb0, 0x89, 0xac, 0x8f, 0xaa, 0xe5, 0xb9, + 0xf6, 0x63, 0x73, 0xb1, 0x57, 0x19, 0xd4, 0x8e, + 0x6f, 0xb6, 0x44, 0xc9, 0xdc, 0xc2, 0x1b, 0xe2, + 0xd6, 0x22, 0xe0, 0xdd, 0x1d, 0xc5, 0x51, 0xff, + 0x00, 0x71, 0x36, 0x97, 0xd6, 0x45, 0xfb, 0xb0, + 0xa7, 0x72, 0x4f, 0xff, 0x00, 0x4c, 0x2e, 0xfe, + 0xca, 0xef, 0xeb, 0x3d, 0x7c, 0xed, 0x35, 0x91, + 0x67, 0xff, 0x00, 0x71, 0x36, 0x97, 0xd6, 0x45, + 0xfb, 0xb0, 0x9f, 0xee, 0x26, 0xd2, 0xfa, 0xc8, + 0xbf, 0x76, 0x15, 0x61, 0x13, 0x59, 0x16, 0x7f, + 0xf7, 0x13, 0x69, 0x7d, 0x64, 0x5f, 0xbb, 0x09, + 0xfe, 0xe2, 0x6d, 0x2f, 0xac, 0x8b, 0xf7, 0x61, + 0x56, 0x11, 0x35, 0x91, 0x67, 0xff, 0x00, 0x71, + 0x36, 0x97, 0xd6, 0x45, 0xfb, 0xb0, 0x9f, 0xee, + 0x26, 0xd2, 0xfa, 0xc8, 0xbf, 0x76, 0x15, 0x64, + 0x0a, 0x90, 0x06, 0xb3, 0xa0, 0x29, 0x3c, 0xd7, + 0x66, 0xb3, 0x8c, 0xa2, 0xde, 0x3b, 0x9b, 0xf8, + 0x9a, 0xc8, 0x66, 0x76, 0x16, 0x39, 0xaf, 0x0e, + 0xd2, 0x46, 0x2d, 0x34, 0xd5, 0xa0, 0x26, 0xb2, + 0x24, 0xff, 0x00, 0xdc, 0x4d, 0xa5, 0xf5, 0x91, + 0x7e, 0xec, 0x27, 0xfb, 0x89, 0xb4, 0xbe, 0xb2, + 0x2f, 0xdd, 0x85, 0x58, 0x26, 0x82, 0xaa, 0x4f, + 0x32, 0xd9, 0xdc, 0xdb, 0x2b, 0xb4, 0x86, 0xf6, + 0xf6, 0x26, 0xc7, 0x05, 0xc1, 0x02, 0x22, 0x1e, + 0x1c, 0x49, 0x73, 0x71, 0x8a, 0xb4, 0x6a, 0xd0, + 0x13, 0x59, 0x12, 0x9f, 0xee, 0x26, 0xd2, 0xfa, + 0xc8, 0xbf, 0x76, 0x13, 0xfd, 0xc4, 0xda, 0x5f, + 0x59, 0x17, 0xee, 0xc2, 0xe4, 0xb0, 0xd8, 0xbd, + 0xa1, 0xcc, 0x2d, 0x23, 0xbc, 0xb4, 0x85, 0x8f, + 0x82, 0x61, 0x56, 0x38, 0xc8, 0xd6, 0x92, 0x2b, + 0x4d, 0x45, 0x7b, 0xb9, 0xd8, 0x5d, 0xa7, 0xb6, + 0x88, 0xca, 0xfb, 0x40, 0xf6, 0xb7, 0x49, 0x11, + 0x3d, 0xaf, 0x76, 0x8e, 0xc0, 0x4d, 0x64, 0x74, + 0x7f, 0xb8, 0x9b, 0x4b, 0xeb, 0x22, 0xfd, 0xd8, + 0x4f, 0xf7, 0x13, 0x69, 0x7d, 0x64, 0x5f, 0xbb, + 0x0a, 0x06, 0xc3, 0x2f, 0xba, 0xcc, 0x2f, 0x23, + 0xb2, 0xb5, 0x68, 0x74, 0xf2, 0x92, 0x18, 0xd7, + 0x1c, 0x22, 0xad, 0xad, 0x6a, 0x4f, 0x69, 0x6b, + 0xba, 0xb6, 0x96, 0xd6, 0xe6, 0x5b, 0x59, 0xc0, + 0x12, 0xc0, 0xf3, 0x1c, 0x80, 0x1a, 0x80, 0xe6, + 0x9a, 0x1d, 0x29, 0xac, 0x8b, 0x17, 0xfb, 0x89, + 0xb4, 0xbe, 0xb2, 0x2f, 0xdd, 0x84, 0xff, 0x00, + 0x71, 0x36, 0x97, 0xd6, 0x45, 0xfb, 0xb0, 0xa1, + 0x72, 0xec, 0x9e, 0xff, 0x00, 0x33, 0x65, 0xc3, + 0xed, 0x18, 0xd7, 0x36, 0xd1, 0x9c, 0xec, 0xd8, + 0x9c, 0x1b, 0x46, 0xe9, 0xd5, 0x5d, 0x7a, 0x97, + 0x10, 0x35, 0x15, 0xdf, 0x4d, 0x64, 0x59, 0xff, + 0x00, 0xdc, 0x4d, 0xa5, 0xf5, 0x91, 0x7e, 0xec, + 0x27, 0xfb, 0x89, 0xb4, 0xbe, 0xb2, 0x2f, 0xdd, + 0x85, 0x58, 0x44, 0xd6, 0x45, 0x9f, 0xfd, 0xc4, + 0xda, 0x5f, 0x59, 0x17, 0xee, 0xc2, 0x7f, 0xb8, + 0x9b, 0x49, 0xeb, 0x22, 0xfd, 0xd8, 0x55, 0x84, + 0x53, 0xac, 0x8b, 0x31, 0xfc, 0x44, 0xda, 0x50, + 0x0f, 0x8f, 0x16, 0xff, 0x00, 0xec, 0xc2, 0xfa, + 0x5d, 0x8c, 0xf2, 0x5c, 0x65, 0x56, 0xb7, 0x12, + 0x53, 0x9c, 0x96, 0x26, 0x3d, 0xf4, 0xd0, 0x2a, + 0xe0, 0x09, 0x5f, 0x0e, 0x3a, 0x8f, 0x69, 0x7d, + 0xbb, 0x2a, 0xfe, 0x47, 0x63, 0xf6, 0x11, 0xfd, + 0x50, 0xa3, 0x51, 0xd0, 0x35, 0xaa, 0xfb, 0xbc, + 0xa3, 0xdb, 0x2a, 0x7c, 0x6b, 0x50, 0x0e, 0xf2, + 0x8f, 0x6c, 0xa0, 0x2c, 0x1d, 0x4b, 0x2b, 0x07, + 0x52, 0x0c, 0x6d, 0x96, 0xab, 0x1f, 0x35, 0xff, + 0x00, 0xdc, 0x55, 0xa5, 0x65, 0xdb, 0x2d, 0x56, + 0x3e, 0x6b, 0xff, 0x00, 0xb8, 0xab, 0x48, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x0b, 0xbf, 0x22, 0xd3, 0x9c, + 0x5a, 0x8a, 0x68, 0x2f, 0xed, 0xfe, 0x6b, 0xb7, + 0xd7, 0x02, 0xef, 0xc8, 0x7f, 0x9c, 0xda, 0x79, + 0xe7, 0xea, 0xb9, 0x04, 0x9e, 0x65, 0xb4, 0x37, + 0xf6, 0xb9, 0x94, 0xf0, 0x46, 0xd8, 0x8c, 0x51, + 0x3a, 0x80, 0x16, 0x02, 0x75, 0x6e, 0xe9, 0x5a, + 0xb6, 0x86, 0x0b, 0x69, 0x2d, 0xac, 0xf3, 0x18, + 0x63, 0x11, 0x49, 0x74, 0x28, 0xe6, 0x0d, 0x03, + 0x50, 0xa6, 0x85, 0xbf, 0x31, 0x8f, 0x66, 0xce, + 0x67, 0x37, 0xb5, 0xcb, 0x38, 0x9b, 0x1f, 0xeb, + 0x1a, 0xd1, 0xe2, 0x57, 0x46, 0xf3, 0x16, 0xbd, + 0xa0, 0x13, 0x0b, 0xbb, 0x18, 0xe8, 0xd1, 0x62, + 0x30, 0xfb, 0x30, 0x66, 0xa2, 0x2a, 0x2b, 0x8a, + 0xbd, 0x8a, 0x20, 0xf7, 0x98, 0x5d, 0xbf, 0x22, + 0x82, 0xde, 0xca, 0xc4, 0x35, 0x93, 0xb9, 0x81, + 0xf3, 0x4a, 0x5a, 0x0b, 0x89, 0x3b, 0x9a, 0x57, + 0x87, 0xbc, 0x67, 0x79, 0x34, 0xf7, 0x12, 0xb5, + 0xa2, 0xf6, 0xc8, 0xd4, 0xc8, 0xd1, 0x4c, 0x4d, + 0xdd, 0xad, 0x3b, 0x0b, 0x4e, 0xd7, 0x13, 0xd6, + 0xfd, 0x8e, 0x65, 0x94, 0xe1, 0x72, 0xdb, 0xb3, + 0xa4, 0x75, 0x6e, 0x6c, 0x4f, 0x93, 0xcc, 0x92, + 0x79, 0x0e, 0x28, 0x24, 0x36, 0x65, 0xf1, 0x33, + 0x27, 0x8f, 0x9c, 0x68, 0x22, 0x49, 0xdd, 0x1e, + 0x9a, 0x1d, 0x7a, 0x95, 0x62, 0xee, 0xdd, 0xd0, + 0x5f, 0x4d, 0x6d, 0x4f, 0x19, 0xb2, 0x16, 0x34, + 0x0e, 0xc9, 0xd1, 0xf2, 0x29, 0x8b, 0x69, 0x1d, + 0x0e, 0xcb, 0x36, 0x56, 0x9a, 0x3e, 0x3b, 0xb0, + 0xe0, 0x7b, 0x2d, 0x70, 0x5b, 0xee, 0x6c, 0x9b, + 0x71, 0xb4, 0xf6, 0x93, 0xb0, 0x7e, 0xa6, 0xe5, + 0x8d, 0xb8, 0x3d, 0xa6, 0x0a, 0xfc, 0x81, 0x07, + 0x76, 0x62, 0xd8, 0xa2, 0xc9, 0xae, 0xad, 0x5a, + 0xd1, 0x8a, 0xd6, 0x18, 0xda, 0xe7, 0x01, 0xba, + 0x69, 0xa7, 0xbc, 0xa9, 0x4a, 0xd1, 0xed, 0x1e, + 0xd3, 0x97, 0x67, 0xb3, 0x6b, 0x0e, 0x96, 0x8d, + 0xed, 0x36, 0x8d, 0x1e, 0x05, 0x57, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x5d, 0x59, 0x57, 0xf3, 0x4b, + 0x4f, 0xb6, 0x67, 0xd6, 0x0b, 0x95, 0x75, 0x65, + 0x5f, 0xcd, 0x2d, 0x3e, 0xd9, 0x9f, 0x58, 0x20, + 0xb4, 0xe6, 0xde, 0xfa, 0xef, 0x34, 0x2e, 0x35, + 0xd9, 0x9b, 0x7b, 0xeb, 0xbc, 0xd0, 0xb8, 0xd0, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x07, 0xbb, + 0x7f, 0xdb, 0xc7, 0xe7, 0x37, 0xc2, 0xa7, 0x14, + 0x1d, 0xbf, 0xed, 0xe3, 0xf3, 0x9b, 0xe1, 0x53, + 0x68, 0x32, 0xa3, 0x33, 0x7f, 0x7a, 0xb2, 0xf3, + 0xfe, 0x50, 0xa4, 0x94, 0x66, 0x6c, 0x7f, 0xee, + 0x6c, 0xfc, 0xff, 0x00, 0x94, 0x20, 0x65, 0x3e, + 0xf5, 0x79, 0xe7, 0x9f, 0xac, 0x54, 0x9a, 0x8c, + 0xca, 0x7d, 0xea, 0xf3, 0xcf, 0x3f, 0x58, 0xa9, + 0x34, 0x04, 0x44, 0x41, 0xb6, 0x1d, 0x4e, 0x5f, + 0x0d, 0xbd, 0xf7, 0xdb, 0x8f, 0xb5, 0x7f, 0xd6, + 0x2b, 0xee, 0x50, 0x6e, 0xaf, 0x86, 0x5e, 0xfb, + 0xed, 0xc7, 0xda, 0xbf, 0xeb, 0x14, 0x1a, 0x51, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x15, 0xcb, 0x3a, 0xbf, 0xbe, 0xb3, 0xd9, + 0x0d, 0x9e, 0x75, 0xa5, 0xc4, 0x96, 0xe5, 0xed, + 0x78, 0x71, 0x8d, 0xc5, 0xb5, 0xa5, 0x28, 0x0d, + 0x15, 0x35, 0x7d, 0x0d, 0xf9, 0x96, 0x49, 0x63, + 0xb2, 0x59, 0x23, 0xb3, 0x7b, 0x13, 0x7e, 0xc9, + 0x18, 0xe1, 0x0b, 0x45, 0x3c, 0x57, 0x0d, 0x7e, + 0x59, 0x6e, 0xb4, 0x14, 0xc3, 0x9f, 0xe7, 0xb4, + 0xfe, 0x61, 0x70, 0x7f, 0xfc, 0xae, 0x23, 0x79, + 0x4f, 0xec, 0x74, 0xb2, 0x45, 0x90, 0xed, 0x14, + 0xd1, 0x3c, 0xb2, 0x56, 0x40, 0x5c, 0xd7, 0x83, + 0x42, 0x1c, 0x1a, 0xf2, 0x1d, 0x89, 0x69, 0xcc, + 0xf3, 0xed, 0x90, 0xb8, 0xb0, 0x9a, 0x0b, 0x2c, + 0x95, 0xd6, 0xf7, 0x2f, 0x6d, 0x22, 0x94, 0x86, + 0x00, 0xd3, 0xbf, 0xa1, 0xe7, 0x52, 0xeb, 0xd8, + 0x36, 0x5a, 0xbf, 0x29, 0xcf, 0x59, 0x78, 0xe2, + 0xcb, 0x57, 0x46, 0x04, 0xcf, 0x6e, 0xb0, 0xc2, + 0xd7, 0x62, 0x23, 0x5e, 0xe2, 0x0a, 0xe3, 0x36, + 0x8b, 0x3f, 0x61, 0x0e, 0x6e, 0x61, 0x73, 0x51, + 0xaf, 0xf5, 0x8e, 0xee, 0x57, 0x4a, 0xb0, 0x6d, + 0xb3, 0xfd, 0xbb, 0x27, 0xc8, 0xf3, 0x69, 0x5a, + 0x1b, 0x77, 0x73, 0x19, 0x6c, 0x84, 0x0a, 0x54, + 0x0c, 0x2e, 0x1d, 0xf3, 0x55, 0x91, 0x6d, 0xf8, + 0x67, 0x19, 0xc6, 0x6e, 0xae, 0x25, 0x00, 0x57, + 0x01, 0xc4, 0xea, 0x83, 0xd8, 0x6b, 0x02, 0x8a, + 0xda, 0xad, 0xa1, 0x8f, 0x3a, 0xba, 0x82, 0x3b, + 0x48, 0xcc, 0x36, 0x16, 0x4d, 0xe6, 0xad, 0xd8, + 0xed, 0x67, 0x57, 0x8d, 0x41, 0xab, 0x50, 0x08, + 0x3b, 0xff, 0x00, 0x11, 0x7d, 0xff, 0x00, 0x2e, + 0xff, 0x00, 0xc2, 0x67, 0x84, 0xa8, 0xdd, 0x8e, + 0xff, 0x00, 0x53, 0x65, 0xff, 0x00, 0x6b, 0xf2, + 0x29, 0x3f, 0xc4, 0x41, 0x5b, 0xec, 0xb4, 0xd7, + 0xff, 0x00, 0xd9, 0x33, 0xeb, 0x15, 0x19, 0xb1, + 0xb5, 0x3b, 0x4f, 0x97, 0xd3, 0xd6, 0xff, 0x00, + 0x74, 0x94, 0x1a, 0x76, 0xa7, 0xfd, 0x49, 0x99, + 0x7f, 0xe4, 0x3b, 0xe4, 0x51, 0x6a, 0x53, 0x6a, + 0x3f, 0xd4, 0x79, 0x97, 0xdb, 0xbb, 0xe4, 0x51, + 0x68, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x3e, 0x89, 0x92, 0x7f, 0xfa, + 0x61, 0x77, 0xf6, 0x57, 0x7f, 0x59, 0xeb, 0xe7, + 0x6b, 0xe8, 0x99, 0x27, 0xff, 0x00, 0xa6, 0x17, + 0x7f, 0x65, 0x77, 0xf5, 0x9e, 0xbe, 0x76, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x83, 0xd3, 0x3c, 0xb6, + 0x79, 0xc3, 0xc2, 0x17, 0xd4, 0x36, 0xb5, 0xa3, + 0x30, 0xc9, 0x6f, 0xac, 0x40, 0x06, 0x6b, 0x28, + 0x60, 0xbc, 0x8f, 0x7e, 0x9a, 0x43, 0xa9, 0xdc, + 0x69, 0x5f, 0x2e, 0x67, 0x96, 0xcf, 0x38, 0x78, + 0x42, 0xfa, 0x5d, 0xcd, 0xcc, 0x71, 0xed, 0xad, + 0xbd, 0x9c, 0xbf, 0xb2, 0xcc, 0x72, 0xf1, 0x6e, + 0xf1, 0xb9, 0xe3, 0x62, 0x2d, 0xef, 0xb6, 0x88, + 0x28, 0x19, 0x2d, 0x91, 0xcc, 0x33, 0x6b, 0x3b, + 0x31, 0xff, 0x00, 0x1a, 0x56, 0x87, 0x79, 0xa0, + 0xe2, 0x77, 0x78, 0x2b, 0xa6, 0xdf, 0xde, 0x47, + 0x79, 0xb3, 0xf6, 0xb2, 0xc7, 0x41, 0x13, 0x6f, + 0x5f, 0x13, 0x29, 0xa8, 0xb6, 0x36, 0xc8, 0xcf, + 0xee, 0xa8, 0x7d, 0x97, 0xb5, 0x39, 0x5e, 0x63, + 0x9b, 0x5f, 0x4c, 0x0b, 0x46, 0x4b, 0x04, 0xad, + 0x07, 0x7a, 0x47, 0x13, 0x1b, 0x78, 0x40, 0x25, + 0x7b, 0xcd, 0x5c, 0xe3, 0xf8, 0x7d, 0x94, 0x3d, + 0xe6, 0xae, 0x75, 0xd4, 0x8e, 0x71, 0xdf, 0x27, + 0x9e, 0x25, 0x07, 0x46, 0x65, 0x7d, 0x7b, 0x67, + 0xb0, 0xd9, 0x24, 0x96, 0x93, 0x3e, 0xdd, 0xcf, + 0x71, 0x05, 0xd1, 0x38, 0xb4, 0x91, 0x47, 0x9a, + 0x68, 0x51, 0x79, 0x06, 0xd2, 0xe7, 0x91, 0xe7, + 0x16, 0x81, 0xd7, 0x73, 0x5c, 0x47, 0x24, 0xad, + 0x64, 0x91, 0x48, 0xf2, 0xf0, 0xe6, 0xb8, 0xd3, + 0x51, 0xdd, 0x56, 0x38, 0xe1, 0xd9, 0xf9, 0x36, + 0x33, 0x27, 0x19, 0xec, 0xcf, 0x86, 0x01, 0x5e, + 0x65, 0xd1, 0xeb, 0x2e, 0xa3, 0xb4, 0x79, 0x2e, + 0xdc, 0x5c, 0x96, 0xd7, 0x7f, 0x87, 0xb9, 0x34, + 0xcd, 0xbe, 0xb4, 0x74, 0xf7, 0xb7, 0x31, 0x69, + 0x85, 0x8e, 0xa9, 0x01, 0xdb, 0xfe, 0x4b, 0x40, + 0x41, 0xec, 0x5b, 0xc5, 0x6d, 0xf8, 0xa1, 0xcd, + 0xc4, 0x30, 0xb1, 0xce, 0x12, 0x11, 0xfd, 0x67, + 0xc5, 0x8d, 0xdd, 0xf2, 0xaa, 0xbb, 0x45, 0xfc, + 0xff, 0x00, 0x31, 0xff, 0x00, 0xc9, 0x93, 0xeb, + 0x29, 0x6d, 0x9b, 0xcc, 0x66, 0xcc, 0xf6, 0xe2, + 0x1b, 0xf9, 0xc5, 0x1f, 0x3c, 0x8f, 0x76, 0x11, + 0xa4, 0x34, 0x61, 0x38, 0x5b, 0xc0, 0xa2, 0x76, + 0x8b, 0xf9, 0xfe, 0x63, 0xff, 0x00, 0x93, 0x27, + 0xd6, 0x41, 0x3d, 0xb0, 0x75, 0xf6, 0x3c, 0xf3, + 0xff, 0x00, 0x13, 0xe4, 0x7a, 0xa7, 0xb7, 0xc9, + 0x1d, 0xa5, 0x6f, 0xd8, 0x43, 0x4b, 0x2c, 0xf4, + 0xee, 0x0b, 0x4d, 0x3c, 0x0f, 0x55, 0x06, 0xf9, + 0x23, 0xb4, 0x83, 0x28, 0x88, 0x80, 0x88, 0x88, + 0x07, 0x51, 0xed, 0x2f, 0xb6, 0xe5, 0x5f, 0xc8, + 0xac, 0x7e, 0xc2, 0x3f, 0xaa, 0x17, 0xc4, 0x8e, + 0xa3, 0xda, 0x5f, 0x6d, 0xca, 0xbf, 0x91, 0x58, + 0xfd, 0x84, 0x7f, 0x54, 0x20, 0xde, 0x37, 0x14, + 0x0b, 0xbc, 0xa3, 0xdb, 0x2a, 0x78, 0x6e, 0x28, + 0x17, 0x79, 0x47, 0xb6, 0x50, 0x16, 0x0e, 0xa5, + 0x95, 0x83, 0xa9, 0x06, 0x36, 0xcb, 0x55, 0x8f, + 0x9a, 0xff, 0x00, 0xee, 0x2a, 0xd2, 0xb2, 0xed, + 0x96, 0xab, 0x1f, 0x35, 0xff, 0x00, 0xdc, 0x55, + 0xa4, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0xdf, 0x90, + 0xff, 0x00, 0x38, 0xb4, 0xf3, 0xcf, 0xd5, 0x21, + 0x70, 0x20, 0x24, 0x38, 0x38, 0x12, 0x08, 0xd4, + 0x46, 0x8a, 0x70, 0x20, 0xee, 0xcf, 0x6b, 0xd6, + 0xf7, 0x43, 0x7e, 0x45, 0x23, 0x9d, 0x17, 0xbf, + 0x20, 0xcb, 0x26, 0x6e, 0x9e, 0x6c, 0x50, 0x1e, + 0xd0, 0xc2, 0x3c, 0x0a, 0x00, 0xd4, 0x92, 0x49, + 0x24, 0x9d, 0x64, 0xe9, 0x3a, 0xa8, 0xb3, 0x88, + 0xd0, 0x36, 0xa7, 0x08, 0xd4, 0x37, 0x10, 0x58, + 0xb3, 0x5b, 0x49, 0x73, 0xa8, 0x6d, 0xf3, 0x1b, + 0x00, 0x25, 0x70, 0x68, 0x64, 0xd1, 0x82, 0x31, + 0x02, 0x0f, 0x65, 0x78, 0xe6, 0x8e, 0x4b, 0x91, + 0xdc, 0x45, 0x72, 0x43, 0x6f, 0x2f, 0x8d, 0x04, + 0x40, 0xd4, 0x86, 0xd2, 0x87, 0xbc, 0xa0, 0xa3, + 0x96, 0x58, 0x89, 0x31, 0x3d, 0xd1, 0x93, 0xf3, + 0x49, 0x0b, 0xcb, 0xde, 0xf9, 0x1c, 0x5e, 0xf7, + 0x17, 0x38, 0xeb, 0x24, 0xd7, 0xc2, 0x82, 0x71, + 0xa3, 0xff, 0x00, 0xa8, 0x3c, 0x1e, 0x92, 0x47, + 0xd2, 0x52, 0x59, 0x7d, 0xdc, 0x7d, 0x40, 0xdc, + 0xc0, 0x8a, 0xcf, 0x69, 0x14, 0x90, 0xb5, 0xdd, + 0x9a, 0xd0, 0x7c, 0x8a, 0xa3, 0x8d, 0xf4, 0xc3, + 0x88, 0xe1, 0xf9, 0xb5, 0x34, 0xe0, 0x4c, 0x4e, + 0xa1, 0x68, 0x24, 0x03, 0xac, 0x54, 0xd3, 0x82, + 0xb4, 0x41, 0x39, 0x95, 0x57, 0xe1, 0xcc, 0xd3, + 0x41, 0xd2, 0x47, 0x7e, 0x8a, 0x09, 0x64, 0x12, + 0x01, 0x00, 0x90, 0x1d, 0xe5, 0x00, 0x74, 0x1a, + 0x76, 0x16, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x17, + 0x56, 0x55, 0xfc, 0xd2, 0xd3, 0xed, 0x99, 0xf5, + 0x82, 0xe5, 0x5d, 0x59, 0x57, 0xf3, 0x4b, 0x4f, + 0xb6, 0x67, 0xd6, 0x08, 0x2d, 0x39, 0xb7, 0xbe, + 0xbb, 0xcd, 0x0b, 0x8d, 0x76, 0x66, 0xde, 0xfa, + 0xef, 0x34, 0x2e, 0x34, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x41, 0xee, 0xdf, 0xf6, 0xf1, 0xf9, + 0xcd, 0xf0, 0xa9, 0xb5, 0x09, 0x6f, 0xfb, 0x78, + 0xfc, 0xe6, 0xf8, 0x54, 0xda, 0x02, 0x8c, 0xcd, + 0x7d, 0xea, 0xcb, 0xcf, 0xf9, 0x42, 0x93, 0x51, + 0x99, 0xaf, 0xbd, 0x59, 0x79, 0xff, 0x00, 0x28, + 0x40, 0xca, 0x7d, 0xea, 0xf3, 0xcf, 0x3f, 0x58, + 0xa9, 0x35, 0x19, 0x94, 0xfb, 0xd5, 0xe7, 0x9e, + 0x7e, 0xb1, 0x52, 0x68, 0x08, 0x88, 0x83, 0x6c, + 0x1b, 0xab, 0xe1, 0x97, 0xbe, 0xfb, 0x71, 0xf6, + 0xaf, 0xfa, 0xc5, 0x7d, 0xce, 0x0d, 0xd5, 0xf0, + 0xcb, 0xdf, 0x7d, 0xb8, 0xfb, 0x57, 0xfd, 0x62, + 0x83, 0x4a, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0xb6, 0x6d, 0x21, 0xff, + 0x00, 0xe9, 0xdb, 0x3b, 0xa6, 0x9a, 0x1f, 0xa6, + 0xb4, 0x1a, 0x95, 0x4d, 0x6f, 0x96, 0xf6, 0xf2, + 0x68, 0x22, 0xb7, 0x96, 0x79, 0x24, 0x82, 0x0f, + 0xd8, 0xc4, 0xe7, 0x12, 0xd6, 0x57, 0x47, 0x8a, + 0x0e, 0xa4, 0x1a, 0x35, 0x0a, 0x6e, 0x6b, 0xa2, + 0xb6, 0x6c, 0x8d, 0x7e, 0x1d, 0xda, 0x41, 0xbf, + 0x6c, 0x4f, 0xd0, 0x7a, 0xa9, 0xad, 0xd0, 0xde, + 0xde, 0x5b, 0xc5, 0x2c, 0x10, 0x4f, 0x24, 0x51, + 0x5c, 0x0c, 0x33, 0x46, 0xc7, 0x16, 0xb5, 0xe2, + 0x84, 0x78, 0xc0, 0x6b, 0xd6, 0x83, 0x4f, 0x63, + 0x57, 0x6b, 0x52, 0x1a, 0xd3, 0x46, 0xee, 0x8e, + 0xee, 0xbd, 0x43, 0xb4, 0x87, 0x49, 0xae, 0xee, + 0xbe, 0x14, 0x41, 0x7a, 0xcd, 0xb2, 0x99, 0xf6, + 0xab, 0x23, 0xcb, 0x33, 0x4c, 0xac, 0x36, 0x6b, + 0x8b, 0x58, 0x9b, 0x05, 0xc4, 0x38, 0x80, 0x77, + 0x8b, 0xae, 0x95, 0xdd, 0xae, 0x9d, 0x2b, 0xc6, + 0xc9, 0x6c, 0xbe, 0x61, 0x95, 0xdf, 0x75, 0xd6, + 0x72, 0xc1, 0x69, 0x6f, 0x64, 0xc7, 0xbc, 0x07, + 0x91, 0x52, 0x4b, 0x4b, 0x75, 0x02, 0x68, 0x02, + 0xa8, 0xd9, 0x66, 0x57, 0xf9, 0x7b, 0xcc, 0x96, + 0x37, 0x12, 0x5b, 0xb9, 0xde, 0x51, 0x8d, 0xc5, + 0xb5, 0xed, 0x8d, 0xd5, 0xb6, 0xff, 0x00, 0x3c, + 0xcd, 0xf3, 0x16, 0x86, 0x5f, 0x5d, 0xcb, 0x3c, + 0x62, 0x87, 0x9b, 0x73, 0xbc, 0x4a, 0x8d, 0xdc, + 0x23, 0x42, 0x0d, 0x39, 0x85, 0xd7, 0xb6, 0xdf, + 0xdc, 0x5e, 0x74, 0x89, 0x1d, 0x20, 0xae, 0xf3, + 0x8d, 0x47, 0x79, 0x73, 0xa2, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0xfa, 0x26, 0x49, 0xff, 0x00, 0xe9, 0x85, 0xdf, + 0xd9, 0x5d, 0xfd, 0x67, 0xaf, 0x9d, 0xaf, 0xa2, + 0x64, 0x9f, 0xfe, 0x98, 0x5d, 0xfd, 0x95, 0xdf, + 0xd6, 0x7a, 0xf9, 0xda, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x0c, 0xb3, 0xf6, 0x8d, 0xf3, 0x80, 0x00, + 0x76, 0xc2, 0xb7, 0x6d, 0xbd, 0xd3, 0xec, 0xb6, + 0x9a, 0xc2, 0xf1, 0x84, 0x83, 0x04, 0x10, 0xca, + 0x29, 0xbc, 0xd2, 0x4d, 0x15, 0x43, 0x51, 0xa8, + 0xd0, 0x56, 0xeb, 0xab, 0xcb, 0xab, 0xc7, 0x89, + 0x2e, 0xe6, 0x7c, 0xef, 0x68, 0x0d, 0x6b, 0xa4, + 0x71, 0x71, 0x0d, 0x15, 0xa0, 0xa9, 0xed, 0xa0, + 0xbd, 0x6d, 0xb0, 0xb7, 0xb0, 0xca, 0x6e, 0x24, + 0xb7, 0x77, 0x8f, 0x9f, 0x5c, 0x47, 0x3e, 0x8a, + 0x57, 0x9b, 0x8d, 0x8d, 0x73, 0xb7, 0xbf, 0x3b, + 0xc2, 0xa2, 0xb3, 0x4f, 0xff, 0x00, 0x4f, 0x72, + 0x80, 0x37, 0x2e, 0x9f, 0xe0, 0x9b, 0x5a, 0xad, + 0xdc, 0x5e, 0xde, 0x5d, 0x32, 0x28, 0xee, 0x67, + 0x92, 0x66, 0x40, 0x30, 0xc2, 0xd7, 0xb8, 0xb8, + 0x30, 0x68, 0x14, 0x6d, 0x75, 0x6a, 0x58, 0x7d, + 0xe5, 0xdc, 0x96, 0xcc, 0xb4, 0x92, 0x67, 0xba, + 0xda, 0x23, 0x8a, 0x38, 0x0b, 0x89, 0x63, 0x49, + 0xae, 0x96, 0xb7, 0x50, 0xf2, 0x8a, 0x0b, 0x3e, + 0x7a, 0x7f, 0xfa, 0x2e, 0x44, 0x29, 0xf9, 0xee, + 0xa7, 0x03, 0xd5, 0x49, 0x6f, 0x92, 0xfa, 0xf6, + 0x5b, 0x78, 0xed, 0x65, 0x9e, 0x49, 0x2d, 0xe1, + 0x35, 0x8a, 0x17, 0x38, 0x96, 0x34, 0xff, 0x00, + 0x55, 0xa7, 0x40, 0x5a, 0x10, 0x77, 0xe4, 0x77, + 0xed, 0xcb, 0xb3, 0x9b, 0x3b, 0xd7, 0xe8, 0x8e, + 0x09, 0x41, 0x93, 0xcc, 0x3a, 0x1c, 0xac, 0x9b, + 0x51, 0xb1, 0xd9, 0xa5, 0xce, 0x69, 0x36, 0x63, + 0x95, 0xc6, 0x2f, 0x2d, 0xaf, 0x5d, 0xcf, 0x34, + 0xb0, 0x8a, 0x82, 0xed, 0x26, 0xb5, 0xec, 0xaa, + 0x62, 0x90, 0xb2, 0xcf, 0xf3, 0xab, 0x08, 0xf9, + 0x9b, 0x3b, 0xc9, 0x62, 0x88, 0x6a, 0x8c, 0x3a, + 0xad, 0x15, 0xde, 0x69, 0xa8, 0x08, 0x2d, 0x36, + 0xf6, 0x12, 0xec, 0xae, 0xca, 0x66, 0x52, 0x66, + 0x0e, 0x6b, 0x2f, 0x73, 0x20, 0x22, 0x86, 0x10, + 0x43, 0x88, 0x14, 0x20, 0x6a, 0xf3, 0x8d, 0x55, + 0x18, 0x68, 0x0b, 0xa2, 0xf2, 0xfe, 0xf6, 0xfa, + 0x5e, 0x7a, 0xf2, 0x77, 0xdc, 0x48, 0x05, 0x03, + 0xa4, 0x71, 0x71, 0x03, 0x78, 0x57, 0x52, 0xe7, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x3a, 0x8f, + 0x69, 0x7d, 0xb7, 0x2a, 0xfe, 0x45, 0x63, 0xf6, + 0x11, 0xfd, 0x50, 0xbe, 0x24, 0x75, 0x1e, 0xd2, + 0xfb, 0x76, 0x55, 0xfc, 0x8a, 0xc7, 0xec, 0x23, + 0xfa, 0xa1, 0x06, 0xe1, 0xb8, 0xa0, 0x5d, 0xe5, + 0x1e, 0xd9, 0x53, 0xe3, 0x5a, 0x80, 0x77, 0x94, + 0x7b, 0x65, 0x01, 0x11, 0x60, 0xea, 0x41, 0x23, + 0x9d, 0x5b, 0x65, 0x13, 0xb6, 0xdf, 0xac, 0xae, + 0x0c, 0x18, 0x5a, 0x79, 0xaa, 0x10, 0x2b, 0x50, + 0xda, 0xeb, 0x6b, 0x94, 0x5f, 0x56, 0xec, 0x97, + 0x4f, 0x77, 0x2d, 0xbf, 0xc3, 0x5e, 0xb6, 0xcb, + 0x55, 0x8f, 0x9a, 0xff, 0x00, 0xee, 0x2a, 0xd2, + 0x0b, 0x1f, 0x56, 0xec, 0x97, 0x4f, 0x77, 0x2d, + 0xbf, 0xc3, 0x4e, 0xad, 0xd9, 0x2e, 0x9e, 0xee, + 0x5b, 0x7f, 0x86, 0xab, 0x88, 0x82, 0xc7, 0xd5, + 0xbb, 0x25, 0xd3, 0xdd, 0xcb, 0x6f, 0xf0, 0xd3, + 0xab, 0x76, 0x4b, 0xa7, 0xbb, 0x96, 0xdf, 0xe1, + 0xaa, 0xe2, 0x20, 0xb1, 0xf5, 0x6e, 0xc9, 0x74, + 0xf7, 0x72, 0xdb, 0xfc, 0x34, 0xea, 0xdd, 0x92, + 0xe9, 0xee, 0xe5, 0xb7, 0xf8, 0x6a, 0xb8, 0x88, + 0x2c, 0x7d, 0x5b, 0xb2, 0x5d, 0x3d, 0xdc, 0xb6, + 0xff, 0x00, 0x0d, 0x3a, 0xb7, 0x64, 0xba, 0x7b, + 0xb9, 0x6d, 0xfe, 0x1a, 0xae, 0x22, 0x0b, 0x1f, + 0x56, 0xec, 0x97, 0x4f, 0x77, 0x2d, 0xbf, 0xc3, + 0x4e, 0xad, 0xd9, 0x2e, 0x9e, 0xee, 0x5b, 0x7f, + 0x86, 0xab, 0x88, 0x82, 0xc7, 0xd5, 0xbb, 0x25, + 0xd3, 0xdd, 0xcb, 0x6f, 0xf0, 0xd3, 0xab, 0x76, + 0x4b, 0xa7, 0xbb, 0x96, 0xdf, 0xe1, 0xaa, 0xe2, + 0x01, 0x52, 0x00, 0x15, 0x27, 0x70, 0x20, 0xb1, + 0xf5, 0x6e, 0xc9, 0x74, 0xf7, 0x72, 0xdb, 0xfc, + 0x34, 0xea, 0xdd, 0x92, 0xe9, 0xee, 0xe5, 0xb7, + 0xf8, 0x6a, 0x0c, 0xd8, 0xde, 0xf4, 0x79, 0x69, + 0xe6, 0x39, 0x69, 0x73, 0x5c, 0xd7, 0x61, 0x70, + 0x2d, 0x76, 0xf1, 0xd0, 0x7b, 0xfa, 0x50, 0x58, + 0xba, 0xb7, 0x64, 0xba, 0x7b, 0xb9, 0x6d, 0xfe, + 0x1a, 0x75, 0x6e, 0xc9, 0x74, 0xf7, 0x72, 0xdb, + 0xfc, 0x35, 0x00, 0xdb, 0x6b, 0x97, 0xc7, 0xce, + 0xb6, 0x17, 0xb9, 0x9a, 0x4e, 0x20, 0xd7, 0x11, + 0x41, 0xd9, 0xa2, 0xd5, 0xbb, 0xbe, 0x82, 0xc9, + 0xd5, 0xbb, 0x25, 0xd3, 0xdd, 0xcb, 0x6f, 0xf0, + 0xd3, 0xab, 0x76, 0x4b, 0xa7, 0xbb, 0x96, 0xdf, + 0xe1, 0xa8, 0x03, 0x6d, 0x72, 0xd6, 0x73, 0xaf, + 0x85, 0xed, 0x8e, 0x9e, 0x59, 0x6b, 0x80, 0xd3, + 0xab, 0x4d, 0x29, 0xdf, 0x5e, 0x18, 0xc7, 0x48, + 0xe0, 0xd8, 0xda, 0x5e, 0xf3, 0xa9, 0xad, 0x04, + 0x93, 0xc0, 0x10, 0x58, 0xba, 0xb7, 0x64, 0xba, + 0x7b, 0xb9, 0x6d, 0xfe, 0x1a, 0x75, 0x6e, 0xc9, + 0x74, 0xf7, 0x72, 0xdb, 0xfc, 0x35, 0x5e, 0x92, + 0x29, 0x22, 0x7e, 0x09, 0x18, 0xe6, 0x38, 0x69, + 0xc2, 0xe0, 0x5a, 0x69, 0xdd, 0x5e, 0x50, 0x58, + 0xfa, 0xb7, 0x64, 0xba, 0x7b, 0xb9, 0x6d, 0xfe, + 0x1a, 0x75, 0x6e, 0xc9, 0x74, 0xf7, 0x72, 0xdb, + 0xfc, 0x35, 0x5d, 0x63, 0x1c, 0xf7, 0x61, 0x8d, + 0xa5, 0xce, 0x3a, 0x00, 0x02, 0xa5, 0x03, 0x5c, + 0xe7, 0x60, 0x0d, 0x38, 0xbe, 0x6e, 0xb3, 0xbd, + 0xa8, 0x20, 0xb1, 0x75, 0x6e, 0xc9, 0x74, 0xf7, + 0x72, 0xdb, 0xfc, 0x34, 0xea, 0xdd, 0x92, 0xe9, + 0xee, 0xe5, 0xb7, 0xf8, 0x6a, 0xbc, 0xf8, 0xe4, + 0x61, 0xc2, 0xf6, 0x39, 0x84, 0x6b, 0x0e, 0x05, + 0xa7, 0x80, 0xac, 0x35, 0xa5, 0xc7, 0x0b, 0x41, + 0x73, 0x8e, 0xa6, 0x81, 0x52, 0x82, 0xc5, 0xd5, + 0xbb, 0x25, 0xd3, 0xdd, 0xcb, 0x6f, 0xf0, 0xd3, + 0xab, 0x76, 0x4b, 0xa7, 0xbb, 0x96, 0xdf, 0xe1, + 0xaa, 0xf3, 0xe2, 0x92, 0x32, 0x04, 0x8d, 0x73, + 0x2b, 0xf3, 0xc1, 0x1e, 0x10, 0xbc, 0xa0, 0xb1, + 0xf5, 0x6e, 0xc9, 0x74, 0xf7, 0x72, 0xdb, 0xfc, + 0x34, 0xea, 0xdd, 0x92, 0xe9, 0xee, 0xe5, 0xb7, + 0xf8, 0x6a, 0xb8, 0x88, 0x2c, 0x7d, 0x5b, 0xb2, + 0x5d, 0x3d, 0xdc, 0xb6, 0xff, 0x00, 0x0d, 0x3a, + 0xb7, 0x64, 0xba, 0x7b, 0xb9, 0x6d, 0xfe, 0x1a, + 0xaf, 0x3e, 0x29, 0x58, 0x1a, 0x64, 0x63, 0x98, + 0x1d, 0xe4, 0x97, 0x02, 0x03, 0x86, 0xf8, 0x24, + 0x69, 0x58, 0x0d, 0x2e, 0x20, 0x34, 0x54, 0x9d, + 0x00, 0x0d, 0xd2, 0x74, 0x51, 0x05, 0x8b, 0xab, + 0x76, 0x4b, 0xa7, 0xbb, 0x96, 0xdf, 0xe1, 0xa7, + 0x56, 0xec, 0x97, 0x4f, 0x77, 0x2d, 0xbf, 0xc3, + 0x55, 0xd2, 0xd2, 0xd3, 0x85, 0xc0, 0x87, 0x0d, + 0x0e, 0x04, 0x52, 0x84, 0x2c, 0x20, 0xb1, 0xf5, + 0x6e, 0xc9, 0x74, 0xf7, 0x72, 0xdb, 0xfc, 0x34, + 0xea, 0xdd, 0x92, 0xe9, 0xee, 0xe5, 0xb7, 0xf8, + 0x6a, 0xb8, 0x88, 0x2c, 0x7d, 0x5b, 0xb2, 0x5d, + 0x3d, 0xdc, 0xb6, 0xff, 0x00, 0x0d, 0x3a, 0xb7, + 0x64, 0xba, 0x7b, 0xb9, 0x6d, 0xfe, 0x1a, 0xae, + 0x22, 0x0b, 0x1f, 0x56, 0xec, 0x97, 0x4f, 0x77, + 0x2d, 0xbf, 0xc3, 0x4e, 0xad, 0xd9, 0x2e, 0x9e, + 0xee, 0x5b, 0x7f, 0x86, 0xab, 0x88, 0x82, 0xc7, + 0xd5, 0xbb, 0x25, 0xd3, 0xdd, 0xcb, 0x6f, 0xf0, + 0xd3, 0xab, 0x76, 0x4b, 0xa7, 0xbb, 0x96, 0xdf, + 0xe1, 0xaa, 0xe2, 0x20, 0xb1, 0xf5, 0x6e, 0xc9, + 0x74, 0xf7, 0x72, 0xdb, 0xfc, 0x34, 0xea, 0xdd, + 0x92, 0xe9, 0xee, 0xe5, 0xb7, 0xf8, 0x6a, 0xb8, + 0x88, 0x2c, 0x7d, 0x5b, 0xb2, 0x5d, 0x3d, 0xdc, + 0xb6, 0xff, 0x00, 0x0d, 0x6e, 0xb3, 0xcb, 0xf6, + 0x61, 0x97, 0x70, 0xba, 0xde, 0xf5, 0xcf, 0x99, + 0xaf, 0x69, 0x8d, 0x98, 0x81, 0xab, 0x81, 0xd0, + 0x3c, 0x80, 0xaa, 0xcb, 0xab, 0x29, 0xfe, 0x69, + 0x69, 0xf6, 0xcc, 0xfa, 0xc1, 0x05, 0xa7, 0x36, + 0xf7, 0xd7, 0x79, 0xa3, 0xc0, 0xb8, 0xd7, 0x66, + 0x6d, 0xef, 0xae, 0xf3, 0x47, 0x81, 0x71, 0xa0, + 0x22, 0x20, 0x04, 0xe8, 0x00, 0x92, 0x75, 0x53, + 0x7d, 0x01, 0x17, 0x7c, 0x59, 0x60, 0x63, 0x39, + 0xdb, 0xc7, 0x88, 0xdb, 0xac, 0x81, 0xa3, 0x84, + 0x95, 0xe4, 0xdf, 0xe4, 0x71, 0x1a, 0x35, 0x86, + 0x4e, 0xc8, 0x04, 0xf8, 0x55, 0xa2, 0xb6, 0x9f, + 0xb6, 0x35, 0x52, 0xf9, 0x69, 0x49, 0xd2, 0xd6, + 0x88, 0xd5, 0xc5, 0xa3, 0x7d, 0x34, 0x6f, 0xae, + 0xde, 0xb4, 0xc9, 0xfd, 0x43, 0xb9, 0x29, 0xd6, + 0xb9, 0x3f, 0xa8, 0x77, 0x25, 0x4f, 0x6b, 0x27, + 0x4a, 0xbe, 0xa7, 0x0f, 0x5d, 0x5c, 0x5a, 0x37, + 0xd3, 0x46, 0xfa, 0xed, 0xeb, 0x5c, 0x9f, 0xd4, + 0x3b, 0x92, 0x9d, 0x6b, 0x93, 0xfa, 0x87, 0x72, + 0x53, 0xb5, 0x93, 0xa4, 0xf5, 0x38, 0x7a, 0xea, + 0xe2, 0xd1, 0xbe, 0x9a, 0x37, 0xd7, 0x6f, 0x5a, + 0xe4, 0xfe, 0xa1, 0xdc, 0x94, 0xeb, 0x5c, 0x9f, + 0xd4, 0x3b, 0x92, 0x9d, 0xac, 0x9d, 0x27, 0xa9, + 0xc3, 0xd7, 0x57, 0x16, 0x8d, 0xf4, 0xd1, 0xbe, + 0xbb, 0x7a, 0xd7, 0x27, 0xf5, 0x0e, 0xe4, 0xa7, + 0x5a, 0xe4, 0xfe, 0xa1, 0xdc, 0x94, 0xed, 0x64, + 0xe9, 0x3d, 0x4e, 0x1e, 0xba, 0xb8, 0xb4, 0x6f, + 0xa6, 0x8d, 0xf5, 0xdb, 0xd6, 0xb9, 0x3f, 0xa8, + 0x77, 0x25, 0x3a, 0xd7, 0x27, 0xf5, 0x0e, 0xe4, + 0xa7, 0x6b, 0x27, 0x49, 0xea, 0x70, 0xf5, 0xd5, + 0xc5, 0xa3, 0x7d, 0x34, 0x6f, 0xae, 0xde, 0xb5, + 0xc9, 0xfd, 0x43, 0xb9, 0x29, 0xd6, 0xb9, 0x3f, + 0xa8, 0x77, 0x25, 0x3b, 0x59, 0x3a, 0x4f, 0x53, + 0x87, 0xae, 0xae, 0x2d, 0x1b, 0xe9, 0xa3, 0x7d, + 0x76, 0xf5, 0xae, 0x4f, 0xea, 0x1d, 0xc9, 0x4e, + 0xb5, 0xc9, 0xfd, 0x43, 0xb9, 0x29, 0xda, 0xc9, + 0xd2, 0x7a, 0x9c, 0x3d, 0x75, 0x71, 0x68, 0xdf, + 0x4d, 0x1b, 0xeb, 0xb7, 0xad, 0x72, 0x7f, 0x50, + 0xee, 0x4a, 0x75, 0xae, 0x4f, 0xea, 0x1d, 0xc9, + 0x4e, 0xd6, 0x4e, 0x93, 0xd4, 0xe1, 0xeb, 0xab, + 0x8b, 0x46, 0xfa, 0x68, 0xdf, 0x5d, 0xbd, 0x6b, + 0x93, 0xfa, 0x87, 0x72, 0x53, 0xad, 0x72, 0x7f, + 0x50, 0xee, 0x4a, 0x76, 0xb2, 0x74, 0x9e, 0xa7, + 0x0f, 0x5d, 0x5c, 0x5a, 0x37, 0xd3, 0x46, 0xfa, + 0xed, 0xeb, 0x5c, 0x9f, 0xd4, 0x3b, 0x92, 0x9d, + 0x6b, 0x93, 0xfa, 0x87, 0x72, 0x53, 0xb5, 0x93, + 0xa4, 0xf5, 0x38, 0x7a, 0xea, 0xe2, 0xd1, 0xbe, + 0x9a, 0x37, 0xd7, 0x6f, 0x5a, 0xe4, 0xfe, 0xa1, + 0xdc, 0x94, 0xeb, 0x5c, 0x9f, 0xd4, 0x3b, 0x92, + 0x9d, 0xac, 0x9d, 0x27, 0xa9, 0xc3, 0xd7, 0x57, + 0x16, 0x8d, 0xf4, 0xd1, 0xbe, 0xbb, 0x7a, 0xd7, + 0x27, 0xf5, 0x0e, 0xe4, 0xa7, 0x5a, 0xe4, 0xfe, + 0xa1, 0xdc, 0x94, 0xed, 0x64, 0xe9, 0x3d, 0x4e, + 0x1e, 0xba, 0xb8, 0xb4, 0x6f, 0xa6, 0x8d, 0xf5, + 0xdb, 0xd6, 0xb9, 0x3f, 0xa8, 0x77, 0x25, 0x3a, + 0xd7, 0x27, 0xf5, 0x0e, 0xe4, 0xa7, 0x6b, 0x27, + 0x49, 0xea, 0x70, 0xf5, 0xd5, 0xc5, 0xa3, 0x7d, + 0x34, 0x6f, 0xae, 0xde, 0xb5, 0xc9, 0xfd, 0x43, + 0xb9, 0x29, 0xd6, 0xb9, 0x3f, 0xa8, 0x77, 0x25, + 0x3b, 0x59, 0x3a, 0x4f, 0x53, 0x87, 0xae, 0xae, + 0x2d, 0x1b, 0xe9, 0xa3, 0x7d, 0x76, 0xf5, 0xae, + 0x4f, 0xea, 0x1d, 0xc9, 0x4e, 0xb5, 0xc9, 0xfd, + 0x43, 0xb9, 0x29, 0xda, 0xc9, 0xd2, 0x7a, 0x9c, + 0x3d, 0x75, 0x71, 0x68, 0xdf, 0x4d, 0x1b, 0xeb, + 0xb7, 0xad, 0x72, 0x7f, 0x50, 0xee, 0x4a, 0x75, + 0xae, 0x4f, 0xea, 0x1d, 0xc9, 0x4e, 0xd6, 0x4e, + 0x93, 0xd4, 0xe1, 0xeb, 0xab, 0x8b, 0x46, 0xfa, + 0x68, 0xdf, 0x5d, 0xbd, 0x6b, 0x93, 0xfa, 0x87, + 0x72, 0x53, 0xad, 0x72, 0x7f, 0x50, 0xee, 0x4a, + 0x76, 0xb2, 0x74, 0x9e, 0xa7, 0x0f, 0x5d, 0x5c, + 0x5a, 0x37, 0xd3, 0x46, 0xfa, 0xed, 0xeb, 0x5c, + 0x9f, 0xd4, 0x3b, 0x92, 0x9d, 0x6b, 0x93, 0xfa, + 0x87, 0x72, 0x53, 0xb5, 0x93, 0xa4, 0xf5, 0x38, + 0x7a, 0xea, 0xe2, 0xd1, 0xbe, 0x9a, 0x37, 0xd7, + 0x6f, 0x5a, 0xe4, 0xfe, 0xa1, 0xdc, 0x94, 0xeb, + 0x5c, 0x9f, 0xd4, 0x3b, 0x92, 0x9d, 0xac, 0x9d, + 0x27, 0xa9, 0xc3, 0xd7, 0x57, 0x16, 0x8d, 0xf4, + 0xd1, 0xbe, 0xbb, 0x7a, 0xd7, 0x27, 0xf5, 0x0e, + 0xe4, 0xa7, 0x5a, 0xe4, 0xfe, 0xa1, 0xdc, 0x94, + 0xed, 0x64, 0xe9, 0x3d, 0x4e, 0x1e, 0xba, 0xb8, + 0xb4, 0x6f, 0xa6, 0x8d, 0xf5, 0xdb, 0xd6, 0xb9, + 0x3f, 0xa8, 0x77, 0x25, 0x3a, 0xd7, 0x27, 0xf5, + 0x07, 0x92, 0x9d, 0xac, 0x9d, 0x27, 0xa9, 0xc3, + 0xd7, 0x57, 0x16, 0x8d, 0xf5, 0x81, 0xa7, 0xb4, + 0xbb, 0xba, 0xcf, 0x25, 0x76, 0x83, 0x09, 0x68, + 0xdd, 0x38, 0x4f, 0xc8, 0xb6, 0x0b, 0x2b, 0x2b, + 0xa6, 0x17, 0xd8, 0xca, 0x2b, 0xac, 0x34, 0xe9, + 0x1c, 0x6a, 0x26, 0x97, 0x8f, 0x18, 0xd1, 0x6a, + 0xe6, 0xc7, 0x6e, 0x15, 0xbd, 0x66, 0x51, 0xc8, + 0xbd, 0x4b, 0x14, 0x91, 0x3c, 0xb2, 0x41, 0x85, + 0xc3, 0x71, 0x79, 0x55, 0x5f, 0x8f, 0xb5, 0xee, + 0xdf, 0xf6, 0xf1, 0xf9, 0xcd, 0xf0, 0xa9, 0xb5, + 0x09, 0x6f, 0xfb, 0x78, 0xfc, 0xe6, 0xf8, 0x54, + 0xda, 0x02, 0x8c, 0xcd, 0x7d, 0xea, 0xcb, 0xcf, + 0xf9, 0x42, 0x93, 0x51, 0x99, 0xaf, 0xbd, 0x59, + 0x79, 0xff, 0x00, 0x28, 0x40, 0xca, 0x7d, 0xea, + 0xf3, 0xcf, 0x3f, 0x58, 0xa9, 0x35, 0x19, 0x94, + 0xfb, 0xd5, 0xe7, 0x9e, 0x7e, 0xb1, 0x52, 0x68, + 0x08, 0x88, 0x83, 0x6c, 0x3f, 0x9c, 0xa9, 0xf3, + 0x6c, 0x56, 0xc6, 0x49, 0x34, 0x8f, 0x93, 0x31, + 0x7b, 0x5e, 0xe7, 0x12, 0xe6, 0xfb, 0x44, 0x22, + 0x84, 0x9a, 0x9f, 0xcc, 0x57, 0x08, 0x77, 0x57, + 0xc3, 0x2f, 0x5a, 0xdf, 0x6d, 0xb8, 0xd0, 0x3f, + 0x6a, 0xff, 0x00, 0xac, 0x50, 0x7d, 0x03, 0xe0, + 0x7d, 0x89, 0xfb, 0xcd, 0xff, 0x00, 0xfb, 0x10, + 0xfa, 0x09, 0xf0, 0x3e, 0xc4, 0xfd, 0xe6, 0xff, + 0x00, 0xfd, 0x88, 0x7d, 0x05, 0xf3, 0x8c, 0x2d, + 0xde, 0x09, 0x85, 0xbb, 0xc1, 0x07, 0xd1, 0xfe, + 0x07, 0xd8, 0x9f, 0xbc, 0xdf, 0xff, 0x00, 0xb1, + 0x0f, 0xa0, 0x9f, 0x03, 0xec, 0x4f, 0xde, 0x6f, + 0xff, 0x00, 0xd8, 0x87, 0xd0, 0x5f, 0x38, 0xc2, + 0xdd, 0xe0, 0xb3, 0x84, 0x6f, 0x77, 0x90, 0x7d, + 0x1b, 0xe0, 0x7d, 0x89, 0xfb, 0xcd, 0xff, 0x00, + 0xfb, 0x10, 0xfa, 0x09, 0xf0, 0x3e, 0xc4, 0xfd, + 0xe6, 0xff, 0x00, 0xfd, 0x88, 0x7d, 0x05, 0xf3, + 0x9c, 0x2d, 0xde, 0x0b, 0x18, 0x5b, 0xae, 0x82, + 0x88, 0x3e, 0x8f, 0xf0, 0x3e, 0xc4, 0xfd, 0xe6, + 0xff, 0x00, 0xfd, 0x88, 0x7d, 0x04, 0xf8, 0x1f, + 0x62, 0x7e, 0xf3, 0x7f, 0xfe, 0xc4, 0x3e, 0x82, + 0xf9, 0xc6, 0x16, 0xef, 0x04, 0xc2, 0xdd, 0xe0, + 0x83, 0xe8, 0xff, 0x00, 0x03, 0xec, 0x4f, 0xde, + 0x6f, 0xff, 0x00, 0xd8, 0x87, 0xd0, 0x4f, 0x81, + 0xf6, 0x27, 0xef, 0x37, 0xff, 0x00, 0xec, 0x43, + 0xe8, 0x2f, 0x9c, 0x61, 0x6e, 0xf0, 0x4c, 0x2d, + 0xde, 0x08, 0x3e, 0x8f, 0xf0, 0x3e, 0xc4, 0xfd, + 0xe6, 0xff, 0x00, 0xfd, 0x88, 0x7d, 0x04, 0xf8, + 0x1f, 0x62, 0x7e, 0xf3, 0x7f, 0xfe, 0xc4, 0x3e, + 0x82, 0xf9, 0xce, 0x10, 0x74, 0x81, 0xa3, 0xb4, + 0xb1, 0x85, 0xbb, 0xc1, 0x07, 0xd1, 0xfe, 0x07, + 0xd8, 0x9f, 0xbc, 0xdf, 0xff, 0x00, 0xb1, 0x0f, + 0xa0, 0x9f, 0x04, 0x6c, 0x4f, 0xde, 0x4e, 0x3f, + 0xff, 0x00, 0x93, 0x0f, 0xa0, 0xbe, 0x71, 0x85, + 0xbb, 0xc1, 0x30, 0xb7, 0x78, 0x7e, 0x54, 0x41, + 0xf4, 0xc6, 0xfe, 0x1e, 0x6c, 0xab, 0xa1, 0xf6, + 0x86, 0xdd, 0xce, 0x60, 0x1a, 0xe5, 0x13, 0x44, + 0x59, 0xca, 0xe6, 0xe8, 0xb5, 0x7c, 0x11, 0xb1, + 0x3f, 0x79, 0x3b, 0xff, 0x00, 0x62, 0x1f, 0x41, + 0x6b, 0xcb, 0xc0, 0xff, 0x00, 0x6c, 0x27, 0xf3, + 0x24, 0xff, 0x00, 0xa8, 0xbe, 0x7b, 0x85, 0xbb, + 0xc1, 0x07, 0xd1, 0xbe, 0x07, 0xd8, 0x9f, 0xbc, + 0xdf, 0xff, 0x00, 0xb1, 0x0f, 0xa0, 0x9f, 0x03, + 0xec, 0x4f, 0xde, 0x6f, 0xff, 0x00, 0xd8, 0x87, + 0xd0, 0x5f, 0x38, 0xc2, 0xdd, 0xe0, 0x98, 0x5b, + 0xbc, 0x10, 0x7d, 0x1f, 0xe0, 0x7d, 0x89, 0xfb, + 0xcd, 0xff, 0x00, 0xfb, 0x10, 0xfa, 0x09, 0xf0, + 0x3e, 0xc4, 0xfd, 0xe4, 0xff, 0x00, 0xfd, 0x88, + 0x7d, 0x05, 0xf3, 0x9c, 0x23, 0x79, 0x74, 0x59, + 0xe5, 0x97, 0xb7, 0xc1, 0xc6, 0xca, 0xd9, 0xf7, + 0x18, 0x3c, 0xbe, 0x6d, 0xb5, 0xa5, 0x77, 0xd0, + 0x5f, 0xbe, 0x07, 0xd8, 0x9f, 0xbc, 0xdf, 0xff, + 0x00, 0xb1, 0x0f, 0xa0, 0x9f, 0x03, 0xec, 0x4f, + 0xde, 0x6f, 0xff, 0x00, 0xd8, 0x87, 0xd0, 0x54, + 0x93, 0xb3, 0x79, 0xe8, 0x15, 0x39, 0x74, 0xf4, + 0xf3, 0x0a, 0xd3, 0x2e, 0x4f, 0x99, 0x41, 0x3c, + 0x76, 0xd3, 0xda, 0xc9, 0x1c, 0xf3, 0x7e, 0xca, + 0x27, 0x30, 0x82, 0xef, 0x37, 0x7d, 0x05, 0xf3, + 0xe0, 0x7d, 0x89, 0xfb, 0xcd, 0xff, 0x00, 0xfb, + 0x10, 0xfa, 0x09, 0xf0, 0x3e, 0xc4, 0xfd, 0xe6, + 0xff, 0x00, 0xfd, 0x88, 0x7d, 0x05, 0x49, 0xf8, + 0x6f, 0x3e, 0xfb, 0xba, 0x7e, 0x42, 0x3b, 0x67, + 0x33, 0xd6, 0x82, 0x4e, 0x5d, 0x38, 0x00, 0x12, + 0x4e, 0x02, 0x28, 0x06, 0xba, 0xa0, 0xbb, 0x7c, + 0x0f, 0xb1, 0x3f, 0x79, 0xbf, 0xff, 0x00, 0x62, + 0x1f, 0x41, 0x3e, 0x07, 0xd8, 0x9f, 0xbc, 0xdf, + 0xff, 0x00, 0xb1, 0x0f, 0xa0, 0xa8, 0x56, 0xf9, + 0x4d, 0xfd, 0xcd, 0xbb, 0xae, 0x6d, 0xed, 0x64, + 0x96, 0x06, 0x57, 0x14, 0xac, 0x69, 0x2d, 0x18, + 0x75, 0xe9, 0x5c, 0xb4, 0x69, 0xd3, 0x40, 0x83, + 0xeb, 0xf6, 0xb6, 0x3b, 0x39, 0x6d, 0x91, 0xc9, + 0x91, 0xc7, 0x7e, 0xcf, 0x64, 0x95, 0xb2, 0x30, + 0xb8, 0xcd, 0x1e, 0x3a, 0x4b, 0x52, 0xea, 0x1d, + 0x5b, 0xbb, 0xca, 0x1f, 0xe0, 0x7d, 0x89, 0xfb, + 0xcd, 0xff, 0x00, 0xfb, 0x10, 0xfa, 0x0a, 0x83, + 0x6f, 0x96, 0x5f, 0x5d, 0x42, 0xf9, 0xed, 0xad, + 0x5f, 0x34, 0x31, 0x12, 0x24, 0x7b, 0x5b, 0x56, + 0x82, 0x05, 0x4d, 0x4a, 0xe6, 0x0d, 0x1a, 0xe8, + 0x3b, 0x28, 0x3e, 0x8f, 0xf0, 0x3e, 0xc4, 0xfd, + 0xe6, 0xff, 0x00, 0xfd, 0x88, 0x7d, 0x04, 0xf8, + 0x1f, 0x62, 0x7e, 0xf3, 0x7f, 0xfe, 0xc4, 0x3e, + 0x82, 0xf9, 0xc6, 0x16, 0xef, 0x04, 0xc2, 0xdd, + 0xe0, 0x83, 0xe8, 0xff, 0x00, 0x03, 0xec, 0x4f, + 0xde, 0x6f, 0xff, 0x00, 0xd8, 0x87, 0xd0, 0x5e, + 0xe2, 0xd8, 0x2d, 0x8f, 0x9a, 0x41, 0x1c, 0x17, + 0xf2, 0xcb, 0x21, 0xd2, 0x18, 0xc9, 0xe1, 0x73, + 0xa9, 0xe6, 0x86, 0x15, 0xf3, 0x5c, 0x2d, 0xde, + 0x0a, 0xc5, 0xf8, 0x7c, 0x00, 0xda, 0xcb, 0x4a, + 0x0f, 0xcd, 0x9b, 0xfe, 0x9b, 0x90, 0x59, 0xe5, + 0xd8, 0x3d, 0x8f, 0x81, 0xe6, 0x39, 0xef, 0xe4, + 0x8a, 0x40, 0x34, 0xb1, 0xf3, 0xc4, 0xd7, 0x00, + 0x77, 0x68, 0xe6, 0x6e, 0xaf, 0x3f, 0x03, 0xec, + 0x4f, 0xde, 0x6f, 0xff, 0x00, 0xd8, 0x87, 0xd0, + 0x55, 0xcf, 0xc4, 0x10, 0x0e, 0xd5, 0x5d, 0x54, + 0x7e, 0x64, 0x3f, 0xf4, 0xda, 0xab, 0x78, 0x5b, + 0xbc, 0x10, 0x7d, 0x1f, 0xe0, 0x7d, 0x89, 0xfb, + 0xcd, 0xff, 0x00, 0xfb, 0x10, 0xfa, 0x09, 0xf0, + 0x3e, 0xc4, 0xfd, 0xe6, 0xff, 0x00, 0xfd, 0x88, + 0x7d, 0x05, 0xf3, 0x9c, 0x23, 0x7b, 0xbc, 0xb1, + 0x85, 0xbb, 0xc1, 0x07, 0xd1, 0xfe, 0x07, 0xd8, + 0x9f, 0xbc, 0xdf, 0xff, 0x00, 0xb1, 0x0f, 0xa0, + 0x9f, 0x03, 0xec, 0x4f, 0xde, 0x6f, 0xff, 0x00, + 0xd8, 0x87, 0xd0, 0x5f, 0x38, 0xc2, 0xdd, 0xe0, + 0xb3, 0x85, 0xb5, 0xa5, 0x05, 0x77, 0x90, 0x7d, + 0x1b, 0xe0, 0x7d, 0x89, 0xfb, 0xcd, 0xff, 0x00, + 0xfb, 0x10, 0xfa, 0x09, 0xf0, 0x3e, 0xc4, 0xfd, + 0xe6, 0xff, 0x00, 0xfd, 0x88, 0x7d, 0x05, 0xf3, + 0x8c, 0x2d, 0xde, 0x09, 0x85, 0xa7, 0x50, 0x08, + 0x3e, 0x8f, 0xf0, 0x3e, 0xc4, 0xfd, 0xe6, 0xff, + 0x00, 0xfd, 0x88, 0x7d, 0x04, 0xf8, 0x1f, 0x62, + 0x7e, 0xf3, 0x7f, 0xfe, 0xc4, 0x3e, 0x82, 0xf9, + 0xce, 0x16, 0xeb, 0xa0, 0xa2, 0xc6, 0x16, 0xef, + 0x04, 0x1f, 0x47, 0xf8, 0x1f, 0x62, 0x7e, 0xf3, + 0x7f, 0xfe, 0xc4, 0x3e, 0x82, 0x7c, 0x0f, 0xb1, + 0x3f, 0x79, 0xbf, 0xff, 0x00, 0x62, 0x1f, 0x41, + 0x7c, 0xe3, 0x0b, 0x77, 0x82, 0x61, 0x6e, 0xf0, + 0x41, 0xf4, 0x7f, 0x81, 0xf6, 0x27, 0xef, 0x37, + 0xff, 0x00, 0xec, 0x43, 0xe8, 0x27, 0xc0, 0xfb, + 0x13, 0xf7, 0x9b, 0xff, 0x00, 0xf6, 0x21, 0xf4, + 0x17, 0xce, 0x70, 0xb7, 0x78, 0x2c, 0x61, 0x6e, + 0xf0, 0x41, 0xf4, 0x63, 0xb1, 0x1b, 0x13, 0xf7, + 0x93, 0xb4, 0xe8, 0xf7, 0x88, 0x7d, 0x05, 0x6f, + 0xb5, 0x8e, 0xde, 0x3c, 0xba, 0x28, 0xad, 0x9e, + 0x25, 0x82, 0x26, 0x06, 0x46, 0xf0, 0xe0, 0xea, + 0x86, 0xf8, 0xbe, 0x53, 0x74, 0x15, 0xf0, 0xac, + 0x2d, 0xde, 0x0b, 0xec, 0x3b, 0x1b, 0xfe, 0x93, + 0xb1, 0xf3, 0x0f, 0xd7, 0x72, 0x09, 0x41, 0xb8, + 0xa0, 0x5d, 0xe5, 0x1e, 0xd9, 0x53, 0xe1, 0x40, + 0x3b, 0xca, 0x3d, 0xb2, 0x80, 0xb0, 0x75, 0x2c, + 0xac, 0x1d, 0x48, 0x31, 0xb6, 0x5a, 0xac, 0x7c, + 0xd7, 0xff, 0x00, 0x71, 0x56, 0x95, 0x97, 0x6c, + 0xb5, 0x58, 0xf9, 0xaf, 0xfe, 0xe2, 0xad, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0xf7, 0x07, 0xed, + 0xe3, 0xf3, 0xdb, 0xe1, 0x5e, 0x17, 0xb8, 0x7f, + 0x6d, 0x1f, 0x9e, 0xdf, 0x0a, 0x0b, 0x1e, 0xd1, + 0x66, 0xf9, 0x8d, 0x8e, 0x62, 0x21, 0xb6, 0x9c, + 0xc7, 0x1f, 0x34, 0xd7, 0x61, 0xa3, 0x48, 0xad, + 0x5d, 0xbe, 0x17, 0x8b, 0xb7, 0xb3, 0x38, 0xc8, + 0x9d, 0x7d, 0x23, 0x1a, 0xdb, 0xbb, 0x47, 0x0c, + 0x6f, 0x6d, 0x05, 0x46, 0x8a, 0xea, 0xdf, 0x5c, + 0xdb, 0x5f, 0xfc, 0xd8, 0x7d, 0x83, 0x3c, 0x2f, + 0x5b, 0x32, 0x7a, 0x7c, 0x3d, 0x9a, 0x93, 0xab, + 0xfa, 0x10, 0x4a, 0xe4, 0x52, 0xb1, 0x99, 0x35, + 0x9c, 0x4f, 0x15, 0x6d, 0xc3, 0x9d, 0x11, 0xaf, + 0x67, 0x11, 0x0a, 0xa9, 0xec, 0x72, 0x7b, 0x77, + 0xb0, 0x9f, 0x2c, 0x4a, 0x22, 0x3c, 0x38, 0x6a, + 0xa6, 0xc4, 0xe6, 0xdf, 0x67, 0x2c, 0x27, 0x1f, + 0xf0, 0xae, 0x43, 0xa9, 0xbf, 0x47, 0x3a, 0xa3, + 0x81, 0x6f, 0xf6, 0x11, 0xf1, 0x60, 0x98, 0xd3, + 0x99, 0x0c, 0xf6, 0xac, 0x5b, 0x9e, 0x4e, 0x0f, + 0x0e, 0x94, 0x1d, 0x79, 0xec, 0x8c, 0x76, 0x4f, + 0x79, 0x14, 0x62, 0x8d, 0xb7, 0x73, 0x23, 0xfa, + 0xa7, 0xfb, 0xca, 0x13, 0x65, 0xe2, 0x68, 0xbc, + 0x9a, 0xf6, 0x41, 0xe2, 0x5a, 0x44, 0x5f, 0xdd, + 0x3f, 0xd0, 0xba, 0x4c, 0xee, 0xb8, 0xd9, 0xcc, + 0xc6, 0x77, 0x6b, 0x92, 0xe0, 0xbb, 0x85, 0xcd, + 0x5e, 0x6c, 0xad, 0xae, 0x23, 0xd9, 0x89, 0x9d, + 0x04, 0x6e, 0x92, 0x6b, 0xd7, 0xe1, 0xa3, 0x45, + 0x7c, 0x46, 0xeb, 0xf0, 0x10, 0x83, 0x5e, 0xd3, + 0x52, 0xe2, 0x3b, 0x2c, 0xc9, 0x83, 0xde, 0x23, + 0xc2, 0xee, 0xd8, 0x15, 0x2a, 0x09, 0x58, 0x9d, + 0x6b, 0x72, 0xfd, 0x97, 0x7c, 0x57, 0x11, 0xb9, + 0x92, 0x59, 0xc9, 0x8d, 0xa1, 0xc3, 0x4e, 0x03, + 0xff, 0x00, 0xf3, 0x2a, 0xea, 0x09, 0x4c, 0xaa, + 0x3f, 0x66, 0xcb, 0xee, 0xf3, 0x37, 0x68, 0x92, + 0x30, 0x21, 0xb7, 0x77, 0xf8, 0x8f, 0xf2, 0x9c, + 0x3b, 0x21, 0x6e, 0xb1, 0xbe, 0xb7, 0xcb, 0xb2, + 0x79, 0x25, 0xb6, 0x73, 0x0e, 0x63, 0x34, 0x94, + 0xd3, 0xa5, 0xcd, 0x6d, 0x75, 0xea, 0x59, 0xb9, + 0x6f, 0x35, 0xb2, 0x96, 0xad, 0x6e, 0xa9, 0xa6, + 0x2f, 0x3d, 0xc2, 0xe0, 0xa1, 0xe0, 0x74, 0x2c, + 0x99, 0x8e, 0x9d, 0xa5, 0xf1, 0x03, 0xe3, 0xb4, + 0x1a, 0x12, 0x37, 0x82, 0x09, 0xf8, 0x6e, 0x65, + 0xcd, 0xf2, 0x3b, 0xd3, 0x7b, 0x49, 0x25, 0xb4, + 0xa3, 0xa2, 0x96, 0x80, 0x3b, 0x48, 0xc5, 0xb8, + 0xb5, 0xe5, 0xf7, 0x10, 0xe5, 0x99, 0x23, 0xef, + 0x21, 0x2c, 0x75, 0xec, 0xf2, 0x61, 0x1a, 0x5a, + 0xe7, 0x35, 0xbb, 0x84, 0x35, 0x6e, 0x26, 0xde, + 0xfb, 0x26, 0x9e, 0x0c, 0x9c, 0x7b, 0x28, 0x84, + 0xe3, 0x9e, 0xdd, 0xc2, 0xae, 0x73, 0x77, 0xf1, + 0x54, 0xaa, 0xfd, 0xb5, 0xb4, 0xf7, 0x52, 0xb6, + 0x0b, 0x76, 0x17, 0x48, 0xff, 0x00, 0x24, 0x76, + 0x0a, 0x0b, 0x05, 0x85, 0xe4, 0x99, 0xd6, 0x5f, + 0x7b, 0x6f, 0x7d, 0x86, 0x47, 0xc3, 0x1f, 0x39, + 0x14, 0xc0, 0x00, 0x46, 0x83, 0xbc, 0x06, 0xf2, + 0xad, 0xa9, 0xfb, 0x97, 0xdb, 0xe4, 0xb6, 0x12, + 0x58, 0x40, 0xe1, 0x2d, 0xf5, 0xc8, 0xa4, 0xef, + 0x6e, 0x90, 0xc6, 0xef, 0x28, 0x01, 0xa9, 0x07, + 0x65, 0x86, 0x57, 0x77, 0x98, 0x62, 0x30, 0x80, + 0xd8, 0xe3, 0xf2, 0xe5, 0x79, 0x0d, 0x68, 0xee, + 0xaf, 0x57, 0xf9, 0x3d, 0xdd, 0x8c, 0x6d, 0x96, + 0x42, 0xc9, 0x20, 0x7e, 0x81, 0x34, 0x47, 0x13, + 0x6a, 0xbb, 0xe7, 0xfd, 0x46, 0xc9, 0x40, 0x19, + 0xa3, 0xda, 0x66, 0xab, 0xce, 0xfd, 0x09, 0xd1, + 0xf4, 0x54, 0x6b, 0x33, 0x29, 0xe3, 0xcb, 0xa5, + 0xcb, 0xf0, 0xb5, 0xf0, 0xc8, 0x43, 0xea, 0x75, + 0x82, 0x29, 0xe4, 0xa0, 0x9b, 0xcc, 0xf2, 0xeb, + 0xab, 0xfb, 0x6c, 0xb5, 0xb0, 0xb5, 0xad, 0x6b, + 0x2d, 0xda, 0x64, 0x91, 0xee, 0xa3, 0x1b, 0x50, + 0xdd, 0xdd, 0xf2, 0xa1, 0xef, 0xf2, 0xdb, 0xdc, + 0xaa, 0x48, 0xe5, 0x79, 0x06, 0xa7, 0x14, 0x32, + 0xb0, 0xd4, 0x54, 0x76, 0x54, 0x8e, 0xd1, 0x49, + 0x27, 0x57, 0xe5, 0x91, 0x57, 0xc4, 0x30, 0xb5, + 0xc5, 0xbb, 0xee, 0xc2, 0x17, 0x9b, 0xe2, 0xe7, + 0xec, 0xad, 0x91, 0x26, 0xa4, 0x4a, 0x45, 0x79, + 0x48, 0x39, 0xf3, 0xe8, 0x58, 0xe7, 0x5b, 0xe6, + 0x31, 0x8a, 0x32, 0xf6, 0x3c, 0x4f, 0x03, 0x50, + 0x91, 0xba, 0x1f, 0x45, 0x14, 0xa6, 0xe7, 0xa4, + 0xbb, 0x29, 0x6c, 0xf3, 0xe5, 0x41, 0x70, 0x58, + 0xde, 0xe9, 0x77, 0x1a, 0x84, 0xd1, 0xb9, 0xa9, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x17, 0x56, 0x55, + 0xfc, 0xd2, 0xd3, 0xed, 0x99, 0xf5, 0x82, 0xe5, + 0x5d, 0x59, 0x57, 0xf3, 0x4b, 0x4f, 0xb6, 0x67, + 0xd6, 0x08, 0x2d, 0x39, 0xb7, 0xbe, 0xbb, 0xcd, + 0x0b, 0x8d, 0x76, 0x66, 0xde, 0xfa, 0xef, 0x34, + 0x78, 0x17, 0x1a, 0x02, 0x90, 0xb4, 0x6c, 0x56, + 0x76, 0xae, 0xbf, 0xb8, 0xdc, 0x15, 0x67, 0xf4, + 0x2e, 0x06, 0x33, 0x1b, 0xda, 0xcf, 0x9c, 0x69, + 0xc2, 0xb6, 0x6d, 0x2c, 0xe5, 0x86, 0x0b, 0x56, + 0xea, 0x6b, 0x43, 0x8f, 0xd5, 0x56, 0xa5, 0x77, + 0x5a, 0x23, 0xd8, 0xe5, 0x9f, 0x2f, 0x6f, 0x1d, + 0xaf, 0x1e, 0xce, 0x1f, 0x34, 0x7d, 0xe6, 0x61, + 0x3d, 0xe4, 0x98, 0xe5, 0xd0, 0x2b, 0x50, 0xca, + 0xd4, 0x05, 0xcf, 0x89, 0x6b, 0xad, 0x34, 0x26, + 0x25, 0xbe, 0x22, 0x23, 0x84, 0x7b, 0x1e, 0x2d, + 0xa6, 0x6d, 0x3a, 0xdb, 0x8c, 0xb6, 0x55, 0x2a, + 0xb5, 0xe2, 0x4c, 0x4a, 0x55, 0xd2, 0x39, 0x36, + 0x55, 0x2a, 0xb5, 0xe2, 0x4c, 0x4a, 0x35, 0x26, + 0x23, 0x93, 0x65, 0x52, 0xab, 0xc0, 0x2e, 0x24, + 0x06, 0x8a, 0xb8, 0x9a, 0x01, 0xbe, 0xa4, 0xa1, + 0xd9, 0xec, 0xc2, 0x56, 0x62, 0x38, 0x63, 0xae, + 0x9a, 0x38, 0x9a, 0xa8, 0xb6, 0x48, 0x8f, 0xb9, + 0x6a, 0x61, 0xb5, 0xfe, 0xca, 0xea, 0xe0, 0xaa, + 0x55, 0x6f, 0xbd, 0xcb, 0x2f, 0x2c, 0x9b, 0x8e, + 0x66, 0x82, 0xcf, 0x9c, 0xd3, 0x51, 0xdd, 0x5c, + 0x95, 0x53, 0x16, 0xdd, 0xe0, 0x8b, 0x52, 0x6b, + 0x3a, 0x5a, 0xbb, 0x65, 0xb2, 0xa9, 0x55, 0xae, + 0xa9, 0x89, 0x4a, 0x34, 0x8e, 0x4d, 0x95, 0x4a, + 0xad, 0x78, 0x93, 0x17, 0xf4, 0xa8, 0xd7, 0x43, + 0x6c, 0x4b, 0x65, 0x52, 0xab, 0x64, 0x96, 0x37, + 0xd1, 0xc4, 0x66, 0x7c, 0x2f, 0x63, 0x00, 0xae, + 0x2d, 0x14, 0xa2, 0xe7, 0xc5, 0xdf, 0x48, 0x9d, + 0x7c, 0x24, 0x9c, 0x7a, 0x78, 0xc3, 0x65, 0x52, + 0xab, 0x5e, 0x2d, 0xf4, 0xaa, 0x93, 0x48, 0x6c, + 0xaa, 0x55, 0x6b, 0xaa, 0x62, 0x08, 0x69, 0x1c, + 0x9b, 0x2a, 0x95, 0x5a, 0xf1, 0x26, 0x24, 0x34, + 0x8e, 0x4d, 0x95, 0x4a, 0xaf, 0x0c, 0x0e, 0x91, + 0xed, 0x8d, 0xbe, 0x53, 0xc8, 0x02, 0xb4, 0xd6, + 0x54, 0x8f, 0xc3, 0xf9, 0xa5, 0x3c, 0x96, 0x1a, + 0x6a, 0xf1, 0xfe, 0x4a, 0x2a, 0xce, 0x48, 0xaf, + 0x09, 0x95, 0xeb, 0x8a, 0xf7, 0x8d, 0x6b, 0x5d, + 0x74, 0x70, 0xd5, 0x2a, 0xbc, 0x12, 0x5a, 0xe2, + 0xc2, 0x34, 0x83, 0x42, 0x37, 0xf4, 0xd3, 0xc2, + 0xa4, 0x46, 0xcf, 0xe6, 0x84, 0x03, 0x85, 0x9a, + 0x74, 0x8f, 0x19, 0x2d, 0x7a, 0x47, 0x19, 0x9f, + 0x14, 0x53, 0x0d, 0xef, 0xae, 0xda, 0x71, 0x8f, + 0x17, 0x0d, 0x52, 0xab, 0x13, 0x46, 0xf8, 0x25, + 0x7c, 0x2f, 0xa0, 0x7c, 0x67, 0x0b, 0x80, 0xd5, + 0x5d, 0xd5, 0xe3, 0x12, 0x98, 0x44, 0xd3, 0x49, + 0xd2, 0x6b, 0xa3, 0x65, 0x52, 0xab, 0x5e, 0x2d, + 0xc4, 0xaa, 0x94, 0x69, 0x1c, 0x9b, 0x2a, 0x95, + 0x5b, 0xac, 0xac, 0x2e, 0xaf, 0x43, 0xcd, 0xb8, + 0x6b, 0x84, 0x64, 0x07, 0x54, 0xd3, 0x5f, 0xff, + 0x00, 0x0b, 0x44, 0xf1, 0xbe, 0x09, 0x9f, 0x0c, + 0x94, 0x0f, 0x8c, 0xe1, 0x75, 0x0d, 0x74, 0xa8, + 0x8b, 0x57, 0x5d, 0x3d, 0xa9, 0xed, 0xce, 0xd8, + 0xb6, 0xcf, 0xa6, 0x7c, 0x25, 0x9a, 0xa5, 0x56, + 0xba, 0xa6, 0x25, 0x28, 0xd2, 0x39, 0x36, 0x55, + 0x2a, 0xba, 0x63, 0xca, 0xaf, 0xa5, 0xb6, 0xf6, + 0xa6, 0x35, 0xbc, 0xd1, 0x69, 0x75, 0x71, 0x69, + 0xa0, 0xd6, 0xb8, 0xb1, 0x28, 0x8b, 0x56, 0xde, + 0x13, 0xe0, 0x9b, 0x63, 0x9a, 0xe9, 0xba, 0x9a, + 0x6b, 0xe0, 0xd9, 0x54, 0xaa, 0xd7, 0x89, 0x31, + 0x29, 0x46, 0x91, 0xc9, 0xb2, 0xa9, 0x55, 0xaf, + 0x12, 0x62, 0x43, 0x48, 0xe4, 0xd9, 0x54, 0xaa, + 0xd7, 0x89, 0x31, 0x21, 0xa4, 0x72, 0x6c, 0xaa, + 0x55, 0x6b, 0xc4, 0x98, 0x90, 0xd2, 0x39, 0x36, + 0xe2, 0x5e, 0xa3, 0x9e, 0x48, 0x9e, 0x25, 0x8d, + 0xc5, 0xaf, 0x6e, 0xa7, 0x05, 0xa3, 0x12, 0x62, + 0x4e, 0x1c, 0x75, 0x23, 0x58, 0x98, 0x9a, 0xf0, + 0x98, 0x59, 0xad, 0xae, 0x23, 0xcd, 0xed, 0x08, + 0x78, 0x0d, 0xba, 0x88, 0x7e, 0x5d, 0xc5, 0xc0, + 0x41, 0x06, 0x84, 0x10, 0x46, 0x82, 0x0e, 0xb5, + 0xcb, 0x93, 0x5c, 0x98, 0x33, 0x18, 0x8d, 0x7c, + 0x57, 0x9c, 0x0e, 0x1e, 0x76, 0x81, 0xdf, 0x52, + 0x99, 0x9c, 0x61, 0x97, 0x8f, 0xa6, 0xa7, 0xd1, + 0xdf, 0x27, 0xc8, 0xb0, 0xe6, 0xa4, 0x52, 0xdc, + 0x3c, 0x25, 0xec, 0xf9, 0x4c, 0xb3, 0x93, 0x17, + 0x1f, 0x18, 0x96, 0x8b, 0x7f, 0xdb, 0xc7, 0xe7, + 0x37, 0xc2, 0xa6, 0xd4, 0x25, 0xbf, 0xed, 0xe3, + 0xf3, 0x9b, 0xe1, 0x53, 0x6b, 0x9b, 0x40, 0xa3, + 0x33, 0x5f, 0x7a, 0xb2, 0xf3, 0xfe, 0x50, 0xa4, + 0xd4, 0x66, 0x6b, 0xef, 0x56, 0x5e, 0x7f, 0xca, + 0x10, 0x32, 0x9f, 0x7a, 0xbc, 0xf3, 0xcf, 0xd6, + 0x2a, 0x4d, 0x46, 0x65, 0x3e, 0xf5, 0x79, 0xe7, + 0x9f, 0xac, 0x54, 0x9a, 0x02, 0x22, 0x20, 0xdb, + 0x06, 0xea, 0xf8, 0x65, 0xef, 0xbe, 0xdc, 0x7d, + 0xab, 0xfe, 0xb1, 0x5f, 0x73, 0x83, 0x75, 0x7c, + 0x32, 0xf7, 0xdf, 0x6e, 0x3e, 0xd5, 0xff, 0x00, + 0x58, 0xa0, 0xd2, 0x88, 0x88, 0x27, 0x76, 0x2a, + 0xc6, 0xd2, 0xff, 0x00, 0x68, 0x21, 0xb6, 0xbc, + 0x88, 0x4d, 0x09, 0x64, 0x84, 0xc6, 0xed, 0x55, + 0x03, 0x5d, 0x42, 0xc6, 0xd8, 0x64, 0x63, 0x25, + 0xcd, 0xdf, 0x1c, 0x2d, 0xc3, 0x67, 0x70, 0x39, + 0xeb, 0x7a, 0x6a, 0xa1, 0x3e, 0x33, 0x6b, 0xfd, + 0x52, 0xba, 0x7f, 0x0f, 0x7f, 0xd4, 0xf0, 0xfd, + 0x9c, 0xbe, 0x05, 0x28, 0xcf, 0xfe, 0xcf, 0x90, + 0xde, 0xe5, 0x6f, 0x38, 0xb3, 0x3c, 0xa6, 0x69, + 0x24, 0xb5, 0x27, 0x5b, 0xe3, 0xc4, 0xed, 0x03, + 0xb1, 0x4d, 0x1c, 0x08, 0x22, 0x32, 0x1c, 0xbe, + 0xce, 0xe7, 0x67, 0xb3, 0xcb, 0x99, 0xe2, 0x6c, + 0x93, 0xda, 0xb0, 0x18, 0x24, 0x3a, 0xd9, 0x5d, + 0xe5, 0xb1, 0xd9, 0x75, 0x85, 0xde, 0xc4, 0x0c, + 0xc6, 0xda, 0x16, 0xb2, 0xf6, 0xc2, 0x6e, 0x6e, + 0xe9, 0xe3, 0xca, 0x73, 0x0b, 0xa9, 0xa7, 0xb6, + 0x1c, 0x28, 0xb6, 0xec, 0xc1, 0xff, 0x00, 0xea, + 0xdb, 0x43, 0x4d, 0x07, 0x03, 0x4d, 0x37, 0x89, + 0xaa, 0x6c, 0x24, 0x8d, 0xb9, 0x19, 0x9e, 0x45, + 0x21, 0xfd, 0x5e, 0x61, 0x6e, 0xe7, 0x47, 0x5d, + 0xc7, 0xb4, 0x11, 0x5e, 0x02, 0x0f, 0x71, 0x05, + 0x52, 0x9a, 0x37, 0xf7, 0x07, 0x73, 0x75, 0x59, + 0x36, 0x93, 0x2f, 0xb0, 0xca, 0xf2, 0x7c, 0xa2, + 0xd1, 0xb0, 0xb5, 0xb7, 0xd7, 0x11, 0xf3, 0xf7, + 0x52, 0xfe, 0x71, 0x69, 0xa5, 0x1a, 0x78, 0x54, + 0x5e, 0x49, 0x96, 0xbe, 0xff, 0x00, 0x3b, 0xb5, + 0xcb, 0x9e, 0x08, 0xc5, 0x28, 0x64, 0xad, 0xdd, + 0x0d, 0x61, 0xfd, 0x67, 0x79, 0xa5, 0x75, 0xed, + 0x96, 0x61, 0xed, 0xfb, 0x49, 0x72, 0xf6, 0x9a, + 0xc5, 0x0b, 0x84, 0x0c, 0xa6, 0xa0, 0x23, 0xd0, + 0x78, 0x5c, 0x83, 0xa3, 0x6d, 0xf2, 0xeb, 0x2c, + 0xba, 0xf2, 0xc9, 0x96, 0x70, 0xb6, 0x16, 0x4b, + 0x6a, 0xd7, 0xbd, 0xad, 0x07, 0xc6, 0x71, 0x24, + 0x57, 0x4a, 0xed, 0xb3, 0xca, 0x32, 0x3c, 0x83, + 0x2a, 0x87, 0x35, 0xda, 0x18, 0xdd, 0x75, 0x77, + 0x79, 0xe3, 0xdb, 0x58, 0xb7, 0x48, 0xc3, 0x4a, + 0x82, 0x46, 0xa7, 0x68, 0xd3, 0xe3, 0x6a, 0x5e, + 0xb6, 0xda, 0x21, 0x3e, 0x77, 0x93, 0x42, 0xe3, + 0x41, 0x2d, 0xbc, 0x2c, 0x27, 0xce, 0x7d, 0x17, + 0x2f, 0xe2, 0x34, 0xcf, 0x7e, 0xd2, 0x18, 0x75, + 0x47, 0x6f, 0x0c, 0x6c, 0x8d, 0xa3, 0x73, 0x10, + 0x24, 0x91, 0xe0, 0x41, 0x21, 0x67, 0x26, 0xc8, + 0xed, 0x4b, 0xdd, 0x97, 0x36, 0xc0, 0x65, 0x57, + 0xce, 0x69, 0xf6, 0x69, 0x63, 0xc2, 0x01, 0x20, + 0x56, 0x9e, 0x2e, 0x8e, 0xe2, 0xa6, 0xde, 0x5a, + 0x4d, 0x65, 0x77, 0x35, 0xac, 0xe3, 0x0c, 0xd0, + 0x3c, 0xb2, 0x4e, 0xd8, 0xd5, 0xa3, 0xb4, 0xbc, + 0xdb, 0xdc, 0x4f, 0x6d, 0x3b, 0x2e, 0x2d, 0xde, + 0x59, 0x34, 0x4e, 0x0f, 0x8d, 0xe3, 0x58, 0x70, + 0xd4, 0x56, 0x6e, 0x2e, 0x67, 0xba, 0x9d, 0xf7, + 0x37, 0x12, 0x3a, 0x59, 0xa5, 0x27, 0x14, 0x8e, + 0x35, 0x2e, 0x41, 0xa9, 0x3f, 0x2f, 0x02, 0x27, + 0xe5, 0xe0, 0x41, 0xf4, 0x3c, 0xbf, 0xff, 0x00, + 0xd3, 0x09, 0xfc, 0xc9, 0x3f, 0xea, 0x2f, 0x9e, + 0x95, 0xf4, 0x2c, 0xbf, 0xff, 0x00, 0xd3, 0x09, + 0xfc, 0xc9, 0x3f, 0xea, 0x2f, 0x9e, 0x94, 0x18, + 0x44, 0x44, 0x05, 0x72, 0xd8, 0x9b, 0xa9, 0xac, + 0xf2, 0x3c, 0xfe, 0xee, 0x07, 0x60, 0x9a, 0x08, + 0x44, 0x91, 0xba, 0x80, 0xd1, 0xcd, 0x6b, 0xc8, + 0xd0, 0x74, 0x2a, 0x6a, 0xba, 0x6c, 0x21, 0xb3, + 0x19, 0x3e, 0x78, 0x6f, 0xb1, 0x7b, 0x20, 0x8d, + 0xbc, 0xfe, 0x1a, 0xe2, 0xc1, 0x85, 0xf8, 0xa9, + 0x4e, 0xc2, 0x08, 0xcf, 0x8f, 0xb6, 0xab, 0x76, + 0xf0, 0x1d, 0xff, 0x00, 0xd5, 0x47, 0xa3, 0xe8, + 0xae, 0x2b, 0xbd, 0xa5, 0xce, 0x6e, 0xef, 0xad, + 0xef, 0xee, 0x27, 0xc7, 0x73, 0x69, 0xfb, 0x19, + 0x03, 0x18, 0x00, 0xd3, 0x8b, 0xc9, 0x0d, 0xa1, + 0xd6, 0xa7, 0x79, 0xcf, 0xc3, 0x21, 0x4f, 0x12, + 0xeb, 0x46, 0xad, 0x0f, 0x55, 0xfc, 0xf5, 0xd9, + 0x2b, 0xaf, 0x41, 0xc9, 0x04, 0x82, 0xcf, 0x00, + 0xd1, 0x25, 0x41, 0xc7, 0xbb, 0xa1, 0xc8, 0x2d, + 0x5b, 0x1d, 0xb5, 0x79, 0xf6, 0x67, 0x9f, 0x43, + 0x67, 0x7b, 0x72, 0x25, 0x81, 0xed, 0x79, 0x2c, + 0xe6, 0xd8, 0xdd, 0x2d, 0x61, 0xa1, 0xab, 0x5b, + 0x55, 0x13, 0x7d, 0xb7, 0x1b, 0x4c, 0xdb, 0xab, + 0xab, 0x71, 0x74, 0x39, 0xa6, 0xc9, 0x24, 0x61, + 0xbc, 0xdb, 0x2b, 0x84, 0x38, 0xb6, 0x95, 0xc3, + 0xbc, 0xb1, 0xf8, 0x7b, 0xfe, 0xa9, 0xb7, 0xf3, + 0x25, 0xfa, 0x85, 0x41, 0xe6, 0x1f, 0xcc, 0x6e, + 0xff, 0x00, 0xf2, 0x25, 0xfa, 0xee, 0x41, 0xf4, + 0x1d, 0x82, 0x9e, 0x38, 0x76, 0x65, 0x91, 0x4d, + 0xa6, 0x3b, 0x8b, 0xb7, 0x5b, 0x9f, 0xff, 0x00, + 0x20, 0xc2, 0x17, 0xcf, 0xaf, 0xed, 0x1d, 0x65, + 0x7f, 0x71, 0x66, 0xfd, 0x76, 0xf2, 0xba, 0x3e, + 0xe0, 0x3a, 0x15, 0xa2, 0xca, 0xe1, 0xf6, 0xbb, + 0x01, 0xed, 0x2c, 0xf2, 0xa0, 0xcc, 0x19, 0x23, + 0x69, 0xae, 0xad, 0x70, 0x77, 0xc8, 0xb4, 0x6d, + 0x8e, 0x5f, 0xed, 0x5b, 0x47, 0x6f, 0x25, 0xbb, + 0x6a, 0xdc, 0xe2, 0x38, 0x64, 0x60, 0x1b, 0xef, + 0xf1, 0x1d, 0xdd, 0xd0, 0x10, 0x59, 0x36, 0x5e, + 0x38, 0xec, 0x76, 0x4c, 0xda, 0x9f, 0x78, 0xbb, + 0xb5, 0x9e, 0xf2, 0x4e, 0xd3, 0xbc, 0x46, 0x57, + 0xb6, 0x17, 0xcc, 0x5b, 0xe4, 0x8e, 0xd0, 0xf9, + 0x57, 0xd3, 0x2d, 0xee, 0x59, 0x2e, 0x79, 0x9d, + 0xdb, 0x44, 0x6b, 0x0d, 0x86, 0x5c, 0x2d, 0x59, + 0xff, 0x00, 0xe3, 0x1a, 0x7e, 0x91, 0x2b, 0xe6, + 0x6d, 0xf2, 0x47, 0x68, 0x7c, 0xa8, 0x32, 0x88, + 0x88, 0x0a, 0xc5, 0xf8, 0x7f, 0xfe, 0xab, 0xb4, + 0xf3, 0x66, 0xff, 0x00, 0xa6, 0xe5, 0x5d, 0x56, + 0x2f, 0xc3, 0xff, 0x00, 0xf5, 0x5d, 0xa7, 0x9b, + 0x37, 0xfd, 0x37, 0x20, 0xcf, 0xe2, 0x0f, 0xfa, + 0xaa, 0xeb, 0xcc, 0x8b, 0xfe, 0x9b, 0x57, 0x8d, + 0x95, 0xc9, 0x6c, 0x6f, 0x05, 0xde, 0x67, 0x9a, + 0x93, 0xd5, 0xf9, 0x6b, 0x44, 0x92, 0xb1, 0xbf, + 0x9e, 0xe2, 0x2a, 0x1b, 0xda, 0xd0, 0xbd, 0xfe, + 0x20, 0xff, 0x00, 0xaa, 0xae, 0xbc, 0xc8, 0xbf, + 0xe9, 0xb5, 0x7b, 0xd8, 0xfc, 0xcb, 0x2d, 0x6c, + 0x17, 0xb9, 0x26, 0x6a, 0xfe, 0x66, 0xd7, 0x32, + 0x68, 0x0d, 0x97, 0x50, 0x6b, 0xc5, 0x45, 0x09, + 0xed, 0x51, 0x07, 0x7c, 0x7b, 0x41, 0xb0, 0xf7, + 0x52, 0x8b, 0x49, 0xb2, 0x51, 0x6b, 0x0c, 0x84, + 0x30, 0x5c, 0x80, 0xc6, 0xbc, 0x57, 0x45, 0x5c, + 0x5b, 0xe3, 0x77, 0xca, 0x8f, 0xb8, 0xc9, 0x2d, + 0x32, 0x6d, 0xaf, 0xb5, 0xb2, 0xb9, 0x68, 0xb8, + 0xb0, 0x9d, 0xec, 0x73, 0x31, 0xfe, 0x74, 0x52, + 0x1c, 0x22, 0xbe, 0x69, 0x5d, 0x77, 0xff, 0x00, + 0x86, 0xf9, 0x8b, 0x23, 0x33, 0x65, 0x77, 0x31, + 0x5e, 0xc2, 0xed, 0x2c, 0x15, 0xc0, 0xe2, 0x3b, + 0x04, 0x55, 0xa5, 0x56, 0xf3, 0x1b, 0xbc, 0xd7, + 0xdb, 0x00, 0xcc, 0x5d, 0x29, 0xbb, 0xb3, 0xc2, + 0xd6, 0xb6, 0x53, 0xa5, 0x81, 0x87, 0x13, 0x5b, + 0xda, 0x41, 0xd1, 0xb4, 0xf9, 0x7b, 0x32, 0xec, + 0xfe, 0xf2, 0xd2, 0x26, 0x88, 0xe1, 0x6b, 0xf1, + 0x44, 0xd1, 0xa8, 0x31, 0xc3, 0x10, 0xf0, 0xab, + 0x37, 0xc3, 0x99, 0x67, 0xc1, 0x58, 0xcc, 0x2d, + 0xeb, 0x5f, 0x65, 0xf6, 0xcc, 0x74, 0x38, 0xf0, + 0xe2, 0xc4, 0x06, 0xbd, 0xed, 0x0b, 0x83, 0x6d, + 0xed, 0xfd, 0xb7, 0x38, 0xb0, 0xba, 0x86, 0xa4, + 0x66, 0x90, 0x42, 0x41, 0x1b, 0xae, 0x27, 0x06, + 0x8e, 0xe2, 0x9c, 0x6d, 0xec, 0x7f, 0x1d, 0x3b, + 0x29, 0xa8, 0xf6, 0x6f, 0x62, 0xf6, 0x0e, 0xc6, + 0x86, 0x73, 0x9a, 0xb7, 0xeb, 0xa1, 0x05, 0x3b, + 0x65, 0xb2, 0xf8, 0xf3, 0x1c, 0xfa, 0xce, 0xd2, + 0x56, 0xe3, 0x85, 0xcf, 0xc5, 0x2b, 0x4e, 0xa2, + 0xd6, 0x02, 0xe7, 0x70, 0xd1, 0x4f, 0x64, 0x39, + 0x7e, 0x49, 0x7b, 0xb4, 0x79, 0xc8, 0x92, 0xd5, + 0x92, 0x58, 0xda, 0xc6, 0xf7, 0x41, 0x0d, 0x0d, + 0x00, 0x8d, 0xf4, 0xab, 0x7c, 0x6d, 0xd0, 0xb9, + 0xf6, 0x2e, 0xdc, 0xe5, 0xf9, 0x96, 0x69, 0x77, + 0x28, 0x2d, 0xea, 0xbb, 0x79, 0x43, 0x49, 0xdc, + 0x79, 0x38, 0x45, 0x7b, 0x80, 0xac, 0xfe, 0x1f, + 0x39, 0xcf, 0xb9, 0xcd, 0x9e, 0xef, 0x29, 0xd6, + 0x72, 0x13, 0xdb, 0x24, 0x14, 0x1b, 0x59, 0x9e, + 0xfe, 0x1f, 0x49, 0x40, 0xfc, 0x9a, 0x46, 0x35, + 0xda, 0xdc, 0x06, 0x91, 0xc9, 0x7d, 0x78, 0x17, + 0x0e, 0xd3, 0xec, 0xed, 0x95, 0x9d, 0xbd, 0xbe, + 0x6f, 0x93, 0xbc, 0xcb, 0x95, 0xdd, 0x1a, 0x34, + 0x6b, 0x2c, 0x71, 0xdc, 0xd3, 0xb9, 0xdb, 0x55, + 0xa6, 0xf9, 0x23, 0xb4, 0xae, 0x19, 0x31, 0x37, + 0x3b, 0x03, 0x9c, 0x5b, 0xc9, 0xa4, 0x5a, 0xbc, + 0x4b, 0x17, 0xf5, 0x4e, 0x87, 0x78, 0x45, 0x50, + 0x45, 0x6c, 0x85, 0x9c, 0x37, 0x79, 0xe4, 0x3e, + 0xd2, 0xc1, 0x25, 0xb4, 0x0c, 0x7c, 0xf3, 0x31, + 0xc0, 0x39, 0xa5, 0xb1, 0xb4, 0xba, 0x8e, 0x07, + 0x72, 0xaa, 0x42, 0xc7, 0x3d, 0xd8, 0xb8, 0xed, + 0x1a, 0xdb, 0xcc, 0xa1, 0xd2, 0xcf, 0xe3, 0x17, + 0xbd, 0x80, 0x06, 0x9f, 0x18, 0x91, 0x4a, 0x38, + 0x6e, 0x11, 0xb8, 0xb9, 0xf6, 0x78, 0xfb, 0x26, + 0x47, 0x9d, 0xe6, 0x40, 0xe1, 0x71, 0x85, 0x96, + 0xb1, 0x1f, 0xeb, 0x4c, 0xef, 0x1b, 0xbc, 0xd0, + 0xab, 0x8e, 0xd4, 0x69, 0xbd, 0x44, 0x1f, 0x45, + 0xce, 0x1f, 0xb1, 0x59, 0x44, 0x76, 0x8f, 0x9f, + 0x28, 0xe7, 0x05, 0xec, 0x7c, 0xf4, 0x78, 0x37, + 0x1b, 0xa3, 0x43, 0xaa, 0xfe, 0xca, 0xa6, 0x67, + 0xb7, 0x79, 0x4d, 0xdd, 0xe8, 0x97, 0x29, 0xb5, + 0x36, 0x76, 0xc2, 0x36, 0xb4, 0xc6, 0xea, 0x57, + 0x10, 0xad, 0x4e, 0x82, 0x77, 0xd4, 0xee, 0xde, + 0x7b, 0xae, 0x45, 0xff, 0x00, 0x88, 0x7f, 0xfe, + 0x9a, 0xa8, 0xa0, 0x2f, 0xb0, 0x6c, 0x6f, 0xfa, + 0x4e, 0xc7, 0xcc, 0x3f, 0x5d, 0xcb, 0xe3, 0xeb, + 0xec, 0x1b, 0x1b, 0xfe, 0x93, 0xb1, 0xf3, 0x0f, + 0xd7, 0x72, 0x09, 0x50, 0xa0, 0x1d, 0xe5, 0x1e, + 0xd9, 0x53, 0xe1, 0x40, 0x3b, 0xca, 0x3d, 0xb2, + 0x80, 0xb0, 0x4d, 0x01, 0x3b, 0xda, 0x56, 0x51, + 0x06, 0x76, 0xc2, 0x32, 0xfb, 0x6b, 0x3b, 0x86, + 0x8a, 0xb0, 0x55, 0xa4, 0x8d, 0x43, 0x10, 0x04, + 0x78, 0x15, 0x5d, 0x5d, 0x6d, 0xfd, 0x9e, 0xfa, + 0xcd, 0xf9, 0x6d, 0xd7, 0x92, 0xe1, 0xe2, 0x3b, + 0xbf, 0xde, 0x55, 0xbc, 0xc3, 0x21, 0xcc, 0x6c, + 0xa4, 0x23, 0x9b, 0x74, 0xf1, 0x0f, 0x26, 0x56, + 0x0a, 0xd4, 0x76, 0x68, 0x82, 0x39, 0x17, 0xb3, + 0x04, 0xe0, 0xd0, 0xc6, 0xf0, 0x7c, 0xd3, 0xc4, + 0x9c, 0xd4, 0xde, 0xad, 0xfc, 0x93, 0xc4, 0x83, + 0xc2, 0x2f, 0x7c, 0xd4, 0xde, 0xad, 0xfc, 0x93, + 0xc4, 0x9c, 0xd4, 0xde, 0xad, 0xfc, 0x93, 0xc4, + 0x83, 0xc2, 0x2f, 0x7c, 0xd4, 0xde, 0xad, 0xfc, + 0x93, 0xc4, 0x9c, 0xd4, 0xde, 0xad, 0xfc, 0x93, + 0xc4, 0x83, 0xc2, 0x2f, 0x7c, 0xd4, 0xde, 0xad, + 0xfc, 0x93, 0xc4, 0x9c, 0xd4, 0xde, 0xad, 0xfc, + 0x93, 0xc4, 0x83, 0xc2, 0x2f, 0x7c, 0xd4, 0xde, + 0xad, 0xfc, 0x93, 0xc4, 0x9c, 0xd4, 0xde, 0xad, + 0xfc, 0x93, 0xc4, 0x83, 0xc2, 0xf7, 0x00, 0xac, + 0xf1, 0x01, 0xac, 0xbd, 0xbe, 0x10, 0x9c, 0xd4, + 0xde, 0xad, 0xfc, 0x93, 0xc4, 0x9c, 0xd4, 0xbe, + 0xad, 0xfc, 0x93, 0xc4, 0x82, 0xcd, 0x9f, 0xe4, + 0x59, 0x95, 0xfe, 0x60, 0x27, 0xb6, 0x63, 0x4c, + 0x7c, 0xdb, 0x5b, 0x57, 0x38, 0x37, 0x48, 0x27, + 0xb0, 0xb9, 0xb3, 0x07, 0x5b, 0xe5, 0x79, 0x38, + 0xca, 0x99, 0x28, 0x96, 0xe6, 0xe1, 0xd8, 0xa7, + 0x2d, 0x20, 0xe1, 0x1a, 0x09, 0xf0, 0x28, 0x3c, + 0x17, 0x3f, 0x36, 0x4d, 0xfd, 0x4e, 0x1e, 0x05, + 0x8e, 0x6e, 0x6a, 0xd7, 0x9b, 0x79, 0x3d, 0xa3, + 0xc4, 0x82, 0x6e, 0xe7, 0xfd, 0x23, 0x6d, 0xb9, + 0xfa, 0xe0, 0x4e, 0xfe, 0xb7, 0x71, 0xa9, 0x11, + 0x77, 0x1f, 0xc3, 0x7e, 0xdf, 0xff, 0x00, 0x1d, + 0xb6, 0xfe, 0xcc, 0x4e, 0xee, 0x83, 0x86, 0x9f, + 0x2a, 0xa9, 0xf3, 0x73, 0xd2, 0x98, 0x1f, 0x41, + 0xa8, 0x61, 0x75, 0x16, 0x4b, 0x27, 0xc2, 0x5b, + 0x82, 0x4c, 0x3b, 0xd4, 0x75, 0x38, 0x10, 0x4d, + 0x59, 0x35, 0xc7, 0x65, 0x2e, 0x98, 0xd1, 0x52, + 0x66, 0x0d, 0x68, 0xd6, 0x49, 0xab, 0x16, 0xcc, + 0xfa, 0xf6, 0xe7, 0x2d, 0x65, 0x9d, 0x85, 0xa4, + 0xae, 0x88, 0xc3, 0x0d, 0x65, 0xc0, 0x69, 0x53, + 0xab, 0xc2, 0xa0, 0x39, 0xb9, 0xe8, 0x68, 0xc7, + 0xd0, 0xee, 0x50, 0xd2, 0xbb, 0xfa, 0x90, 0xc7, + 0x3b, 0x8d, 0x5c, 0xc7, 0x9a, 0x6f, 0x82, 0x7e, + 0x44, 0x16, 0x0d, 0x9e, 0xbf, 0xb9, 0xbe, 0x9a, + 0xe2, 0xc6, 0xf2, 0x57, 0x4c, 0xc9, 0xe2, 0x70, + 0x69, 0x76, 0x9a, 0x53, 0x41, 0xf0, 0xaa, 0xec, + 0x8c, 0x74, 0x72, 0x3e, 0x37, 0x79, 0x4c, 0x38, + 0x4d, 0x37, 0xd7, 0xa1, 0x14, 0xc0, 0xd7, 0x03, + 0xeb, 0xd8, 0x6b, 0xbf, 0xa1, 0x60, 0xc5, 0x31, + 0xd3, 0xcd, 0xbe, 0xba, 0xc9, 0xc2, 0x74, 0x94, + 0x13, 0x0f, 0x77, 0xb4, 0x6c, 0xa4, 0x74, 0xf2, + 0xad, 0xa7, 0xa3, 0x86, 0xf0, 0x75, 0x74, 0xf7, + 0xd6, 0x6d, 0x2c, 0x20, 0xcc, 0xf2, 0x4c, 0x16, + 0x8c, 0x68, 0xcc, 0x2d, 0xdd, 0xe3, 0x8d, 0x4e, + 0x73, 0x7f, 0xa5, 0x68, 0xca, 0x66, 0xc1, 0xed, + 0x16, 0x57, 0x2d, 0x73, 0x6d, 0xae, 0xd8, 0x41, + 0x25, 0xa6, 0x8d, 0x7b, 0x74, 0xb0, 0xea, 0xec, + 0x2e, 0x01, 0x1d, 0xc4, 0x4f, 0x25, 0x8d, 0x7e, + 0x26, 0x9a, 0x63, 0x68, 0x70, 0xd4, 0x82, 0x7b, + 0x2e, 0xb6, 0x97, 0x26, 0xb0, 0xbc, 0xbb, 0xbf, + 0x02, 0x17, 0x4d, 0x1f, 0x37, 0x1c, 0x4e, 0x22, + 0xa4, 0xe9, 0xd5, 0xc2, 0xbd, 0xe4, 0x96, 0x17, + 0x6d, 0xc9, 0xe6, 0xba, 0xb1, 0x6b, 0x4d, 0xf5, + 0xc1, 0x2c, 0x8d, 0xee, 0x38, 0x70, 0x30, 0x7c, + 0xd2, 0x41, 0x55, 0xe9, 0x3d, 0xae, 0x57, 0x62, + 0x90, 0x48, 0xf3, 0xfd, 0x60, 0xe3, 0xc6, 0xbc, + 0x88, 0xe7, 0x02, 0x81, 0xb2, 0x01, 0xbd, 0x47, + 0x51, 0x04, 0xac, 0xbb, 0x2f, 0x9c, 0x80, 0xf9, + 0xa5, 0x11, 0xbb, 0x5b, 0x9e, 0x4b, 0xea, 0x7b, + 0x27, 0x52, 0x87, 0x22, 0x86, 0x9b, 0xcb, 0xde, + 0x0b, 0x8f, 0x9b, 0x26, 0xf6, 0xa7, 0x71, 0x2c, + 0x73, 0x53, 0x7a, 0xb7, 0xf2, 0x4f, 0x12, 0x09, + 0xdb, 0x68, 0xdf, 0x9a, 0x6c, 0xe8, 0xb3, 0x80, + 0x87, 0x5c, 0xda, 0xc9, 0x88, 0x46, 0x75, 0x96, + 0xeb, 0xd1, 0xc2, 0xb4, 0xdc, 0x65, 0xd1, 0x65, + 0xf9, 0x23, 0xcd, 0xf4, 0x6d, 0x17, 0xf3, 0xbf, + 0xf5, 0x2d, 0x26, 0xae, 0x63, 0x46, 0xee, 0x85, + 0x16, 0xc6, 0xdc, 0xb1, 0xd8, 0x98, 0xd9, 0x18, + 0xe1, 0xa9, 0xcd, 0x0e, 0x07, 0xbc, 0x8f, 0x6d, + 0xcc, 0x8e, 0x2e, 0x90, 0x48, 0xf7, 0x1d, 0xd7, + 0x07, 0x38, 0xf6, 0x75, 0xa0, 0x97, 0xda, 0x3f, + 0x73, 0xca, 0xfe, 0xc3, 0xe4, 0x6a, 0x5d, 0x9f, + 0xfe, 0xa9, 0x67, 0xd9, 0x94, 0xf8, 0x1c, 0xa1, + 0x8c, 0x73, 0x9a, 0x02, 0xc7, 0x9d, 0xed, 0x0e, + 0x34, 0xec, 0x69, 0x5e, 0xa3, 0xb7, 0x9a, 0x57, + 0xb2, 0x22, 0x1c, 0xd6, 0xb8, 0xd0, 0x92, 0x1c, + 0x00, 0x07, 0x59, 0xe0, 0x41, 0x2b, 0x78, 0xe1, + 0x0e, 0xcc, 0xd9, 0x40, 0x74, 0x3a, 0xe2, 0x57, + 0x4a, 0x7b, 0x42, 0xba, 0x54, 0x2f, 0xf4, 0x29, + 0x1c, 0xe2, 0x67, 0x5c, 0xdc, 0xb6, 0x38, 0x18, + 0xf3, 0x6d, 0x6a, 0xc1, 0x0c, 0x27, 0x09, 0xd2, + 0x1b, 0xf9, 0xda, 0xb7, 0x57, 0x0f, 0x35, 0x37, + 0xab, 0x7f, 0x24, 0xf1, 0x20, 0xf0, 0x8b, 0xdf, + 0x35, 0x37, 0xab, 0x7f, 0x24, 0xf1, 0x27, 0x35, + 0x37, 0xab, 0x7f, 0x24, 0xf1, 0x20, 0xf0, 0x8b, + 0xdf, 0x35, 0x37, 0xab, 0x7f, 0x24, 0xf1, 0x27, + 0x35, 0x37, 0xab, 0x7f, 0x24, 0xf1, 0x20, 0xf0, + 0x8b, 0xdf, 0x35, 0x37, 0xab, 0x7f, 0x24, 0xf1, + 0x27, 0x35, 0x37, 0xab, 0x7f, 0x24, 0xf1, 0x20, + 0xf0, 0x8b, 0xdf, 0x35, 0x37, 0xab, 0x7f, 0x24, + 0xf1, 0x27, 0x35, 0x37, 0xab, 0x7f, 0x24, 0xf1, + 0x20, 0xf0, 0x8b, 0xdf, 0x35, 0x37, 0xab, 0x7f, + 0x24, 0xf1, 0x27, 0x35, 0x37, 0xab, 0x7f, 0x24, + 0xf1, 0x20, 0xf0, 0xbb, 0xb2, 0x28, 0x5d, 0x36, + 0x6f, 0x6a, 0x1b, 0xa7, 0x0c, 0x81, 0xe7, 0xb4, + 0xc3, 0x55, 0xa6, 0xdf, 0x2e, 0xbf, 0xb9, 0x70, + 0x6c, 0x36, 0xf2, 0x38, 0x9d, 0xdc, 0x24, 0x0e, + 0xeb, 0x8e, 0x85, 0x69, 0xca, 0xf2, 0xb8, 0xf2, + 0x5b, 0x73, 0x71, 0x72, 0x43, 0xef, 0x1e, 0x28, + 0xd0, 0x35, 0x37, 0xb0, 0xdf, 0x94, 0xa0, 0xce, + 0x6a, 0x41, 0xbd, 0x75, 0x37, 0x00, 0x1d, 0xda, + 0x2e, 0x45, 0x97, 0xb9, 0xcf, 0x7b, 0x9e, 0xe3, + 0x52, 0xe3, 0x52, 0xb0, 0x83, 0x65, 0xb7, 0xbc, + 0x45, 0xe7, 0xb7, 0xc2, 0xb4, 0x6d, 0x41, 0xa6, + 0x62, 0xdf, 0xb3, 0x1e, 0x12, 0xb7, 0xdb, 0x7b, + 0xc4, 0x5e, 0x7b, 0x7c, 0x2b, 0x97, 0x6a, 0xcd, + 0x33, 0x26, 0xfd, 0x98, 0xf0, 0x95, 0xdb, 0xcb, + 0xff, 0x00, 0x12, 0x3e, 0x12, 0xcd, 0xe7, 0xbf, + 0x81, 0xf8, 0xa2, 0xaa, 0x95, 0x5a, 0xf1, 0x26, + 0x25, 0xa9, 0xe5, 0x36, 0x55, 0x2a, 0xb5, 0xe2, + 0x4c, 0x48, 0x36, 0x55, 0x2a, 0xb5, 0xe2, 0x4c, + 0x48, 0x68, 0x96, 0xd9, 0xe8, 0xdb, 0x2e, 0x66, + 0xcc, 0x62, 0xa1, 0x8d, 0x2e, 0x1d, 0xb1, 0xa9, + 0x49, 0x6d, 0x1e, 0x61, 0x7b, 0x6b, 0x24, 0x4d, + 0x81, 0xe6, 0x26, 0x38, 0x13, 0x88, 0x6e, 0xbb, + 0xe6, 0xaa, 0xf5, 0x95, 0xec, 0x96, 0x57, 0x4c, + 0xb8, 0x60, 0xc4, 0x59, 0x5a, 0xb7, 0x7c, 0x6e, + 0xab, 0x64, 0x39, 0x96, 0x55, 0x99, 0xc7, 0xcd, + 0x38, 0xb4, 0x93, 0xe5, 0x43, 0x26, 0x83, 0x5d, + 0xdf, 0xc8, 0x2e, 0x19, 0x22, 0x62, 0xf1, 0x69, + 0x8d, 0xd5, 0x6c, 0xf2, 0xf3, 0x59, 0xc3, 0x6c, + 0x51, 0x7d, 0x97, 0x99, 0xf1, 0x72, 0x0c, 0xf2, + 0xc2, 0x7c, 0xb8, 0xc5, 0x74, 0xff, 0x00, 0xd7, + 0xc8, 0xc2, 0xd7, 0xb6, 0x95, 0xa9, 0xa2, 0x8d, + 0xb6, 0xc8, 0xee, 0xee, 0x6d, 0x05, 0xcc, 0x6f, + 0x66, 0x02, 0xd2, 0xe0, 0x34, 0xd7, 0x46, 0xe2, + 0xed, 0xcc, 0xb6, 0x69, 0xac, 0x89, 0xd3, 0xd8, + 0x92, 0x30, 0x82, 0x4c, 0x2e, 0xd2, 0x08, 0x1f, + 0x34, 0xeb, 0x5b, 0x76, 0x52, 0xe4, 0x3e, 0xd6, + 0x5b, 0x72, 0x6a, 0x62, 0x76, 0x20, 0x0f, 0xcd, + 0x77, 0xf4, 0xa4, 0x5b, 0x6d, 0x2d, 0x6c, 0x73, + 0xe1, 0x65, 0xbb, 0x76, 0xbe, 0x5a, 0xd3, 0x34, + 0x44, 0xe9, 0x5d, 0x2b, 0x7e, 0x68, 0x4b, 0x1b, + 0x39, 0xaf, 0xa6, 0x30, 0x42, 0x40, 0x70, 0x18, + 0xaa, 0x75, 0x51, 0x6c, 0x9b, 0x29, 0xbc, 0x8a, + 0xf5, 0x96, 0x6d, 0x2d, 0x7c, 0xce, 0x6e, 0x2f, + 0x17, 0x50, 0x1b, 0xee, 0x52, 0xd9, 0x05, 0xaf, + 0x31, 0x98, 0xdf, 0xd7, 0xfe, 0x1b, 0xb9, 0xb6, + 0xf6, 0x8b, 0x8b, 0x96, 0x32, 0xcb, 0xc8, 0xe7, + 0xcf, 0xee, 0xdc, 0xe2, 0x2a, 0x41, 0x6c, 0x75, + 0xdd, 0x0d, 0x20, 0x29, 0x9c, 0x93, 0x16, 0xb6, + 0x9c, 0x74, 0xaf, 0x8f, 0xc5, 0x4a, 0x79, 0x7a, + 0x6c, 0xac, 0x4f, 0x0b, 0x5a, 0xd3, 0x11, 0xf0, + 0x69, 0x1b, 0x2d, 0x75, 0x86, 0xa6, 0x76, 0x03, + 0xbd, 0x47, 0x15, 0xc2, 0xec, 0x9e, 0xf3, 0xdb, + 0x45, 0x8b, 0xe8, 0xd9, 0x1c, 0xd2, 0xe6, 0x38, + 0x9a, 0xb4, 0x80, 0x35, 0xa9, 0x7c, 0xca, 0xd3, + 0x36, 0x66, 0x62, 0x33, 0x0b, 0x5a, 0xcd, 0x1b, + 0x4b, 0x7f, 0x53, 0x88, 0xb4, 0xd0, 0x6b, 0x6d, + 0x3b, 0x2a, 0x27, 0x35, 0xce, 0xae, 0x6e, 0x25, + 0x65, 0x62, 0x75, 0xa4, 0xd0, 0x07, 0x0a, 0xe2, + 0x38, 0xa8, 0xee, 0xe7, 0x61, 0x45, 0x2f, 0x92, + 0x7d, 0xb1, 0x3a, 0xc2, 0x72, 0xe2, 0xc1, 0x48, + 0x9d, 0x69, 0x6a, 0xed, 0x9d, 0x35, 0xe7, 0xef, + 0x59, 0xaf, 0x2d, 0x65, 0xb8, 0xcb, 0x9d, 0x6a, + 0xc2, 0x04, 0x85, 0x81, 0xb5, 0x3a, 0xaa, 0x28, + 0xaa, 0xd1, 0xe5, 0x77, 0x6f, 0xbd, 0x7d, 0x9c, + 0x63, 0x13, 0xe3, 0x34, 0x7b, 0xeb, 0x46, 0x8e, + 0xca, 0xb1, 0xe6, 0x52, 0xc9, 0x1e, 0x48, 0xf9, + 0x58, 0xe2, 0xd9, 0x04, 0x6d, 0x38, 0x81, 0xd3, + 0x5d, 0x1b, 0xab, 0x46, 0xcc, 0x02, 0xeb, 0x27, + 0xdc, 0x3c, 0xe2, 0x92, 0x69, 0x2a, 0xf7, 0x1d, + 0x66, 0x83, 0x42, 0xa5, 0x2f, 0x34, 0xa5, 0xb8, + 0xf8, 0xcb, 0xae, 0x7c, 0x74, 0xcb, 0x97, 0x1d, + 0x3e, 0xa8, 0xb4, 0xd7, 0x7e, 0xbf, 0xe9, 0x8f, + 0x63, 0x89, 0xdb, 0x2d, 0x76, 0x19, 0x89, 0x93, + 0x46, 0x5c, 0x37, 0x28, 0xe0, 0xa3, 0x23, 0xb2, + 0xb8, 0x92, 0xf3, 0xd8, 0xe9, 0x82, 0x6a, 0xe1, + 0x21, 0xc7, 0xb1, 0x55, 0x3b, 0x96, 0xda, 0x67, + 0x31, 0x66, 0xae, 0xb8, 0xb8, 0x3f, 0xa8, 0x90, + 0xbf, 0x10, 0xc7, 0x5d, 0x07, 0xc8, 0xf1, 0x52, + 0xf5, 0x81, 0xbb, 0x4b, 0x66, 0xf0, 0x3c, 0xb6, + 0xe9, 0xed, 0x8a, 0xfc, 0x8a, 0xd1, 0x96, 0xdf, + 0x54, 0x4c, 0xee, 0xd6, 0xaa, 0x5b, 0x06, 0x3b, + 0x45, 0x6f, 0x5a, 0x4e, 0x38, 0x9b, 0x6c, 0x9a, + 0xdb, 0x84, 0xe9, 0xec, 0x70, 0x7c, 0x37, 0x98, + 0x73, 0xad, 0x8f, 0x13, 0x28, 0x45, 0x5c, 0xfd, + 0x34, 0x0b, 0x17, 0x9b, 0x3f, 0x7b, 0x6c, 0xd6, + 0xbd, 0x8e, 0x13, 0xb4, 0x90, 0xda, 0x36, 0xa0, + 0xd4, 0xe8, 0x5d, 0xdb, 0x55, 0x79, 0x73, 0x6e, + 0xcb, 0x76, 0x41, 0x23, 0xa3, 0xc7, 0x8d, 0xc4, + 0xb4, 0xd0, 0x92, 0x30, 0xd0, 0x77, 0xd7, 0x79, + 0xba, 0x94, 0x64, 0x7e, 0xd7, 0x5f, 0xd6, 0x08, + 0x31, 0xe2, 0xec, 0xd3, 0x5a, 0x77, 0x32, 0x69, + 0x59, 0xd7, 0xee, 0x9d, 0x13, 0x3e, 0x5f, 0x04, + 0xce, 0x4a, 0x69, 0x6d, 0x6b, 0xf5, 0x4c, 0xa2, + 0x0e, 0xcc, 0x5e, 0xf3, 0x65, 0xdc, 0xeb, 0x0b, + 0xe9, 0xe4, 0x50, 0xf8, 0x54, 0x34, 0x8d, 0x7c, + 0x6f, 0x74, 0x6f, 0x14, 0x73, 0x09, 0x6b, 0x87, + 0x64, 0x2b, 0x16, 0xca, 0xdd, 0xdc, 0x5c, 0x32, + 0xe1, 0xb3, 0xc8, 0xe9, 0x43, 0x0b, 0x0b, 0x4b, + 0x8d, 0x48, 0xc5, 0x8a, 0xbe, 0x05, 0x09, 0x9c, + 0x90, 0xdc, 0xd6, 0xe5, 0xa3, 0x45, 0x1e, 0x7b, + 0xfa, 0x55, 0xb1, 0xde, 0xd3, 0x6b, 0x56, 0xce, + 0x39, 0xf1, 0x63, 0x8c, 0x74, 0xcb, 0x4d, 0x63, + 0x5f, 0xa5, 0xae, 0xd0, 0xd6, 0xea, 0x1f, 0x3d, + 0xbe, 0x10, 0xaf, 0x4f, 0x7b, 0x5b, 0x2b, 0x1a, + 0x75, 0xbe, 0xb8, 0x7b, 0x60, 0x55, 0x50, 0x6d, + 0x1d, 0xff, 0x00, 0x79, 0x07, 0xda, 0x37, 0xc2, + 0x15, 0xc3, 0x35, 0xb8, 0xf6, 0x7b, 0x8b, 0x07, + 0x93, 0x46, 0x99, 0xf0, 0xbb, 0xb4, 0xe6, 0xb9, + 0xbe, 0x12, 0xab, 0xe6, 0x3e, 0xe8, 0xf8, 0x3a, + 0xf9, 0x29, 0xdb, 0x4b, 0xcc, 0xfb, 0x2d, 0x0a, + 0xf4, 0xd6, 0xa7, 0xaf, 0x7d, 0x96, 0x94, 0xc5, + 0x30, 0xe4, 0xf9, 0x7e, 0x05, 0x6e, 0x12, 0x34, + 0xca, 0xe8, 0xc6, 0xb6, 0x06, 0x9e, 0xe3, 0xab, + 0x4f, 0x02, 0x8a, 0x92, 0xd0, 0xbb, 0x69, 0xe3, + 0x97, 0x0f, 0x8b, 0xcd, 0x73, 0x84, 0xf6, 0x45, + 0x58, 0xba, 0x32, 0xf9, 0x8c, 0xd9, 0x96, 0x63, + 0x43, 0x51, 0x1b, 0xa3, 0x8c, 0x7f, 0x64, 0x3a, + 0xbd, 0xfa, 0xaa, 0x64, 0xb6, 0xf8, 0x89, 0xe9, + 0xac, 0x6a, 0xed, 0xe5, 0xe9, 0x18, 0xed, 0x68, + 0xd3, 0xee, 0xbc, 0xc7, 0xe1, 0x5f, 0x05, 0x6e, + 0xfe, 0x39, 0x26, 0xcd, 0xae, 0x22, 0x89, 0xb8, + 0x9e, 0xf9, 0x9e, 0x1a, 0xde, 0xea, 0xee, 0x8f, + 0x65, 0xef, 0x1c, 0xda, 0xbe, 0x66, 0x35, 0xc7, + 0x49, 0x14, 0x2e, 0x5b, 0xb2, 0xa8, 0xc4, 0x99, + 0xfd, 0xfc, 0x94, 0xa9, 0x63, 0x9d, 0x4e, 0xeb, + 0xa8, 0xb9, 0x33, 0xdb, 0xfb, 0x88, 0xb3, 0x90, + 0x18, 0xf2, 0xd1, 0x06, 0x0c, 0x2d, 0x04, 0x81, + 0xb8, 0xe2, 0xba, 0x6f, 0xbc, 0xcc, 0x52, 0xb3, + 0xa4, 0xe8, 0xcd, 0x18, 0xf1, 0xc5, 0x6d, 0x97, + 0x24, 0x4c, 0xef, 0xcb, 0x6a, 0xe9, 0x1c, 0x9c, + 0x77, 0xf6, 0x17, 0x39, 0x7c, 0x81, 0x93, 0x81, + 0x85, 0xde, 0x4b, 0xdb, 0xa8, 0xae, 0x9b, 0x0c, + 0x8a, 0xee, 0xf6, 0x21, 0x36, 0x26, 0xc5, 0x19, + 0xa8, 0x15, 0xa9, 0x26, 0x9a, 0x37, 0x14, 0xb6, + 0xd3, 0xb1, 0xae, 0xca, 0xb9, 0xda, 0x78, 0xcc, + 0x73, 0x1c, 0xde, 0xee, 0x82, 0xb7, 0x66, 0x32, + 0x3a, 0xc7, 0x23, 0x3c, 0xc9, 0xc2, 0xe6, 0x46, + 0xd6, 0x35, 0xc3, 0x58, 0xad, 0x05, 0x54, 0x77, + 0x6d, 0xb6, 0x34, 0xf1, 0xd7, 0x45, 0xbd, 0x36, + 0x3a, 0xe5, 0xb4, 0xcc, 0xce, 0xcc, 0x75, 0x8b, + 0xc7, 0xe2, 0xf1, 0x92, 0x65, 0xf7, 0x16, 0x0e, + 0xb8, 0x8e, 0x62, 0x1c, 0x1c, 0x58, 0x58, 0xf1, + 0x5a, 0x11, 0xe3, 0x6f, 0xa8, 0x7b, 0x9b, 0x29, + 0x6f, 0xf3, 0xab, 0xa8, 0x21, 0x2d, 0x0e, 0x0e, + 0x2e, 0x25, 0xdd, 0x85, 0x27, 0xb3, 0x37, 0x93, + 0x5c, 0xdb, 0xcc, 0xd9, 0x9e, 0x5e, 0x63, 0x70, + 0xa1, 0x76, 0x93, 0x47, 0x7f, 0xf0, 0xb5, 0x65, + 0xc4, 0x1d, 0xa7, 0xbc, 0x1e, 0x77, 0xc8, 0xa2, + 0x26, 0xd1, 0x6b, 0xcc, 0xf8, 0xc4, 0x2f, 0x35, + 0xa5, 0xb1, 0xe0, 0xac, 0x47, 0xd1, 0x39, 0x27, + 0x4d, 0x50, 0xb7, 0xf6, 0x73, 0x58, 0x4d, 0xcc, + 0x4a, 0x5a, 0x5c, 0x5a, 0x1d, 0xa0, 0xe8, 0xd2, + 0x68, 0xba, 0x6f, 0x32, 0x4b, 0xab, 0x4b, 0x53, + 0x72, 0xf7, 0xb0, 0xc6, 0x29, 0xa0, 0x6b, 0xd2, + 0xbd, 0x6d, 0x59, 0xa6, 0x66, 0x3e, 0xc9, 0xbe, + 0x17, 0x29, 0x9d, 0xa0, 0xd1, 0x92, 0xbc, 0x9d, + 0x5e, 0x27, 0xc8, 0xaf, 0xdc, 0xb6, 0x98, 0xf8, + 0xfd, 0xdc, 0x5c, 0xa3, 0x05, 0x35, 0xcf, 0x1a, + 0x7f, 0x0e, 0x3e, 0x97, 0xac, 0xbb, 0xf9, 0x0b, + 0x4f, 0xf8, 0x2f, 0xf0, 0x39, 0x56, 0x6c, 0x6c, + 0x6e, 0x6f, 0xa5, 0xe6, 0xa0, 0x15, 0xa0, 0xc4, + 0xf7, 0x9d, 0x00, 0x03, 0xda, 0x56, 0x5c, 0xb8, + 0xd7, 0x67, 0x5a, 0x47, 0xa9, 0x93, 0xbd, 0x89, + 0x69, 0xd9, 0x68, 0xc3, 0x72, 0xf7, 0x48, 0x3c, + 0xa9, 0x1e, 0x6a, 0x7b, 0x03, 0x50, 0x54, 0x8b, + 0xed, 0xae, 0x59, 0x8f, 0x1d, 0xd0, 0xeb, 0x7c, + 0x31, 0x92, 0x7c, 0xbd, 0x67, 0xc2, 0x2b, 0x32, + 0xe3, 0x7e, 0xcb, 0xdd, 0xe1, 0xa8, 0x9a, 0x37, + 0x3c, 0x7e, 0x6d, 0x08, 0xef, 0xa8, 0x93, 0x6d, + 0x71, 0xed, 0x26, 0xd7, 0x01, 0xe7, 0xc3, 0xb0, + 0xf3, 0x7d, 0x9e, 0xda, 0x9f, 0xcb, 0x2c, 0xf3, + 0xa8, 0xb3, 0x37, 0x5c, 0x5c, 0xfe, 0xc6, 0x4c, + 0x58, 0xdb, 0x8f, 0x10, 0xec, 0x1a, 0x2f, 0x77, + 0x06, 0x18, 0x76, 0x96, 0xde, 0x47, 0xd0, 0x73, + 0xb1, 0x10, 0x09, 0xf9, 0xc3, 0x52, 0xb4, 0x64, + 0xb4, 0x4c, 0xc6, 0xbb, 0xbe, 0x9d, 0xd1, 0xa7, + 0x35, 0x2d, 0xe5, 0xf1, 0xcd, 0x6b, 0x68, 0x8b, + 0x63, 0xfa, 0xb6, 0xce, 0xbc, 0x35, 0x87, 0x1b, + 0x36, 0x5e, 0xf0, 0xb6, 0xaf, 0x99, 0x8d, 0x71, + 0xd6, 0xda, 0x13, 0xdf, 0x51, 0xf7, 0xf9, 0x7d, + 0xcd, 0x84, 0x81, 0xb3, 0x50, 0xb4, 0xf9, 0x2f, + 0x6e, 0x90, 0x54, 0xee, 0x77, 0x63, 0x99, 0xcd, + 0x71, 0x1d, 0xc5, 0x9b, 0xc9, 0x6c, 0x40, 0x7e, + 0xaf, 0x16, 0x1a, 0x10, 0x6b, 0x51, 0xbf, 0x55, + 0x13, 0x9c, 0x66, 0xd7, 0x17, 0x4c, 0x6d, 0xbd, + 0xc5, 0xb7, 0xb3, 0xc8, 0xc7, 0x62, 0xf1, 0x89, + 0x24, 0xd3, 0x46, 0xf0, 0x4a, 0x5e, 0xf3, 0xb6, + 0x75, 0xd6, 0x39, 0x23, 0x2e, 0x0c, 0x54, 0x8b, + 0x44, 0x44, 0xc4, 0xd7, 0x4d, 0x2d, 0x3e, 0x12, + 0x8d, 0x2e, 0xae, 0x94, 0xaa, 0xd6, 0x0e, 0x80, + 0x13, 0x12, 0xd1, 0x2c, 0x4d, 0x95, 0x4a, 0xad, + 0x78, 0x93, 0x12, 0x84, 0xb6, 0x55, 0x2a, 0xb5, + 0xe2, 0x4c, 0x48, 0x3a, 0xec, 0x4f, 0xfd, 0xed, + 0xbf, 0xda, 0xb3, 0xeb, 0x05, 0x62, 0xce, 0x3d, + 0xec, 0x79, 0xa3, 0xe5, 0x55, 0x9b, 0x17, 0x7f, + 0xdf, 0x5b, 0x7d, 0xab, 0x3e, 0xb0, 0x56, 0x7c, + 0xe7, 0xde, 0x9b, 0xe6, 0x71, 0xac, 0xbe, 0x67, + 0xc6, 0xaf, 0x43, 0xf9, 0x7f, 0xd9, 0x7f, 0x8b, + 0x8e, 0x0f, 0xdb, 0xc7, 0xe7, 0x37, 0xc2, 0xa6, + 0xd4, 0x25, 0xbf, 0xed, 0xe3, 0xf3, 0x9b, 0xe1, + 0x53, 0x6b, 0x8b, 0x70, 0xa3, 0x33, 0x5f, 0x7a, + 0xb2, 0xf3, 0xfe, 0x50, 0xa4, 0xd4, 0x66, 0x6b, + 0xef, 0x56, 0x5e, 0x7f, 0xca, 0x10, 0x32, 0x9f, + 0x7a, 0xbc, 0xf3, 0xcf, 0xd6, 0x2a, 0x4d, 0x46, + 0x65, 0x3e, 0xf5, 0x79, 0xe7, 0x9f, 0xac, 0x54, + 0x9a, 0x02, 0x22, 0x20, 0xdb, 0x09, 0xf2, 0x97, + 0xc3, 0x6f, 0x7d, 0xf6, 0xe3, 0xed, 0x5f, 0xf5, + 0x8a, 0xfb, 0x8c, 0x26, 0x8e, 0xa6, 0xfe, 0xa5, + 0xf2, 0x5d, 0xb2, 0xc8, 0xa7, 0xca, 0x33, 0x69, + 0x5f, 0x84, 0x9b, 0x4b, 0xa7, 0x19, 0x60, 0x93, + 0x73, 0xc6, 0x35, 0x73, 0x2b, 0xbe, 0x10, 0x40, + 0xa2, 0xcd, 0x16, 0x34, 0xa0, 0xb2, 0xfe, 0x1e, + 0xff, 0x00, 0xa9, 0xe1, 0xfb, 0x39, 0x7c, 0x0b, + 0x8b, 0x2d, 0xcd, 0xe4, 0xc9, 0xb6, 0x8d, 0xd7, + 0xcd, 0xd2, 0xd6, 0x4e, 0xf6, 0x4c, 0xd1, 0xf9, + 0xd1, 0xb9, 0xee, 0xc6, 0xdf, 0x94, 0x2f, 0x1b, + 0x33, 0x9c, 0x45, 0x92, 0xe6, 0xf1, 0xdf, 0xcd, + 0x1b, 0xa5, 0x63, 0x5a, 0xf6, 0x16, 0x32, 0x80, + 0xd5, 0xc3, 0xfa, 0xd4, 0x0a, 0x3a, 0xe2, 0x51, + 0x2d, 0xc4, 0xb3, 0x34, 0x16, 0xf3, 0x8f, 0x73, + 0xc0, 0x3a, 0xc5, 0x49, 0x76, 0x9e, 0x14, 0x1f, + 0x48, 0xbe, 0xca, 0x62, 0xb1, 0xca, 0x73, 0xfb, + 0xcb, 0x42, 0x1d, 0x65, 0x98, 0xc4, 0xcb, 0x88, + 0x08, 0xd4, 0x0b, 0xb4, 0xb8, 0x0e, 0xc6, 0x9a, + 0x85, 0x42, 0xc8, 0xaf, 0xce, 0x5b, 0x9c, 0x59, + 0xde, 0xd6, 0x8d, 0x86, 0x56, 0xf3, 0x9e, 0x63, + 0x86, 0x17, 0x0e, 0xe8, 0x2a, 0x5a, 0xcf, 0x6c, + 0x04, 0x3b, 0x2d, 0x3e, 0x45, 0x71, 0x13, 0xe5, + 0x73, 0x9a, 0x59, 0x6f, 0x2b, 0x48, 0x01, 0xac, + 0x26, 0xa1, 0xae, 0x0e, 0xd3, 0xa1, 0x56, 0xb7, + 0x10, 0x7d, 0x06, 0x2b, 0x06, 0x64, 0xbb, 0x43, + 0x9f, 0xe7, 0x2e, 0x68, 0xe6, 0x6d, 0x61, 0x33, + 0x5b, 0x9d, 0xc2, 0xfb, 0x91, 0x5d, 0x07, 0xce, + 0xf0, 0xaf, 0x9f, 0x97, 0x39, 0xcf, 0xc4, 0xe3, + 0x57, 0x39, 0xc0, 0x92, 0x77, 0xce, 0x95, 0x65, + 0xcd, 0x76, 0xc1, 0xb7, 0xdb, 0x3d, 0x06, 0x52, + 0xd8, 0x1c, 0xcb, 0x96, 0xf3, 0x42, 0xe6, 0x72, + 0x46, 0x17, 0xb6, 0x11, 0xe2, 0xea, 0xd3, 0xa7, + 0x42, 0xac, 0xd6, 0x86, 0xa7, 0xb7, 0xdb, 0xa2, + 0x0b, 0x7e, 0xdd, 0xcb, 0xcc, 0xe6, 0xb9, 0x4c, + 0xba, 0x8c, 0x76, 0xb1, 0xbe, 0xbd, 0xa7, 0x55, + 0x6b, 0xfc, 0x43, 0xb7, 0x73, 0xf3, 0x38, 0x33, + 0x58, 0xc5, 0x6d, 0xaf, 0xe0, 0x61, 0x8d, 0xe3, + 0x55, 0x5a, 0x3c, 0x92, 0x77, 0xf4, 0xa8, 0xdd, + 0xa7, 0xcf, 0x20, 0xce, 0xe7, 0xb5, 0x96, 0x18, + 0x9f, 0x0b, 0x6d, 0xed, 0xc4, 0x04, 0x3e, 0x86, + 0xa7, 0x7c, 0x61, 0xaa, 0xec, 0xc9, 0x76, 0xb2, + 0x08, 0x32, 0xfe, 0xa8, 0xce, 0xad, 0x05, 0xfe, + 0x5e, 0xd3, 0x58, 0xa9, 0x42, 0xe8, 0xff, 0x00, + 0xaa, 0x2b, 0xb8, 0x82, 0x23, 0x26, 0xcb, 0x64, + 0xcd, 0x33, 0x4b, 0x6b, 0x06, 0x87, 0x7e, 0xbd, + 0xe0, 0x3c, 0x81, 0xa5, 0xac, 0x1e, 0x5b, 0xf4, + 0xee, 0x00, 0xb3, 0x9e, 0x58, 0x5b, 0xe5, 0xd9, + 0xb5, 0xc5, 0x8d, 0xbc, 0xc6, 0x78, 0xed, 0xdc, + 0x19, 0xce, 0x1a, 0x03, 0x5a, 0x69, 0x6e, 0x8d, + 0xe2, 0xac, 0x67, 0x6b, 0xb2, 0x1c, 0xae, 0xde, + 0x46, 0xec, 0xde, 0x5a, 0x60, 0xb9, 0x98, 0x50, + 0xdc, 0x4a, 0x74, 0x8e, 0xce, 0x92, 0xe7, 0x2a, + 0x7b, 0xde, 0xf9, 0x1e, 0xe9, 0x1e, 0x71, 0x3d, + 0xe4, 0xb9, 0xee, 0x3a, 0xc9, 0x71, 0xa9, 0x3c, + 0x28, 0x3c, 0xa7, 0xe5, 0xe0, 0x4d, 0x29, 0x43, + 0x54, 0x1f, 0x43, 0xcb, 0xff, 0x00, 0xfd, 0x30, + 0x9f, 0xcc, 0x93, 0xfe, 0xa2, 0xf9, 0xe9, 0x5f, + 0x42, 0xcb, 0xff, 0x00, 0xfd, 0x2f, 0x9f, 0xcc, + 0x93, 0xfe, 0xa2, 0xf9, 0xe9, 0x41, 0x84, 0x4d, + 0x29, 0xa5, 0x01, 0x5b, 0xf6, 0x3a, 0x19, 0x27, + 0xd9, 0xfd, 0xa1, 0x82, 0x16, 0x99, 0x25, 0x92, + 0x00, 0xd6, 0x31, 0xba, 0x49, 0x2e, 0x63, 0xe8, + 0x02, 0xa8, 0x69, 0x5d, 0xf9, 0x56, 0x7b, 0x9b, + 0x64, 0xe2, 0x41, 0x97, 0x4f, 0xcc, 0x09, 0x88, + 0x32, 0x78, 0xac, 0x75, 0x69, 0x5a, 0x79, 0x6d, + 0x3b, 0xe8, 0x36, 0x0d, 0x97, 0xda, 0x3f, 0xbb, + 0xa7, 0xe4, 0xff, 0x00, 0x4a, 0xe6, 0xbd, 0xca, + 0xf3, 0x2c, 0xbf, 0x07, 0xb7, 0x5b, 0x49, 0x6d, + 0xce, 0x57, 0x07, 0x38, 0x29, 0x5a, 0x6b, 0xa7, + 0x0a, 0x94, 0xf8, 0xeb, 0x6b, 0x3a, 0x79, 0xfd, + 0xdc, 0x5f, 0xc3, 0x5c, 0x19, 0xa6, 0x7b, 0x9b, + 0xe6, 0xfc, 0xd7, 0x59, 0x5c, 0x7b, 0x47, 0x33, + 0x5e, 0x6f, 0xc5, 0x63, 0x69, 0x8a, 0x95, 0xf2, + 0x1a, 0xdd, 0xe4, 0x12, 0xbf, 0x87, 0xbf, 0xea, + 0x9b, 0x6f, 0x32, 0x51, 0xf4, 0x1c, 0xa0, 0xf3, + 0x0f, 0xe6, 0x17, 0x7f, 0x6f, 0x2f, 0xd7, 0x72, + 0xce, 0x5f, 0x98, 0xde, 0xe5, 0x97, 0x4d, 0xbc, + 0xb2, 0x93, 0x9a, 0x9d, 0x80, 0x86, 0xbe, 0x8d, + 0x76, 0x82, 0x28, 0x74, 0x3d, 0xae, 0x1a, 0x96, + 0x89, 0x1e, 0xf9, 0x24, 0x7c, 0xaf, 0x35, 0x7c, + 0x8e, 0x2f, 0x79, 0xd5, 0x57, 0x38, 0xd4, 0x9d, + 0x08, 0x2d, 0x31, 0x7f, 0xfa, 0x6f, 0x26, 0xed, + 0x6f, 0x75, 0x77, 0x54, 0xd6, 0xcf, 0x36, 0xdf, + 0x30, 0xc9, 0x72, 0xac, 0xd2, 0x77, 0x0a, 0xe4, + 0x06, 0x66, 0xcd, 0x5d, 0x06, 0x8d, 0x69, 0x73, + 0x3c, 0x0d, 0x2a, 0x8a, 0x33, 0x4c, 0xc0, 0x65, + 0xa7, 0x2b, 0x12, 0xff, 0x00, 0xd9, 0x17, 0xf3, + 0x86, 0x1c, 0x2d, 0x20, 0xba, 0xb5, 0xad, 0x4b, + 0x49, 0xef, 0xac, 0xdb, 0x66, 0xd9, 0x8d, 0xad, + 0x94, 0xf6, 0x16, 0xf2, 0xe0, 0xb5, 0xba, 0xfd, + 0xbc, 0x40, 0x0a, 0x3a, 0xa0, 0x34, 0xee, 0x57, + 0x48, 0x14, 0x41, 0x63, 0xd8, 0x99, 0xdf, 0x73, + 0x71, 0x9d, 0xdc, 0xc9, 0xa1, 0xf3, 0xda, 0xc9, + 0x23, 0xbf, 0xb4, 0xe2, 0x55, 0x3d, 0x9e, 0x48, + 0xec, 0x80, 0x7b, 0x94, 0x5d, 0x96, 0x19, 0xae, + 0x61, 0x97, 0x73, 0xde, 0xc7, 0x2f, 0x35, 0xed, + 0x0c, 0x31, 0xcb, 0xa0, 0x1a, 0xb0, 0xee, 0x69, + 0x15, 0x5c, 0x9a, 0xb4, 0x00, 0x80, 0x89, 0xa5, + 0x34, 0xa0, 0x2b, 0x17, 0xe1, 0xff, 0x00, 0xfa, + 0xae, 0xd3, 0xcd, 0x9b, 0xfe, 0x9b, 0x95, 0x77, + 0x4a, 0xb1, 0x7e, 0x1f, 0x8f, 0xfe, 0xd7, 0x69, + 0xe6, 0xcd, 0xff, 0x00, 0x4d, 0xc8, 0x33, 0xf8, + 0x83, 0xfe, 0xaa, 0xba, 0xf3, 0x22, 0xff, 0x00, + 0xa6, 0xd5, 0xcb, 0x6b, 0xb3, 0xde, 0xd5, 0xb3, + 0x77, 0x59, 0xcc, 0x52, 0xb9, 0xd2, 0xda, 0xc8, + 0x23, 0x92, 0xd9, 0xad, 0x14, 0xc1, 0xe2, 0x92, + 0xfc, 0x55, 0xae, 0x80, 0xea, 0xae, 0xaf, 0xc4, + 0x1f, 0xf5, 0x55, 0xd5, 0x3e, 0x64, 0x47, 0xfe, + 0x5b, 0x57, 0x26, 0xce, 0x6d, 0x25, 0xce, 0x45, + 0x3b, 0xdc, 0xd6, 0x0b, 0x8b, 0x49, 0xc6, 0x1b, + 0x8b, 0x72, 0x74, 0x10, 0x35, 0x53, 0x41, 0x41, + 0xc5, 0x63, 0x9b, 0x66, 0x59, 0x63, 0xf9, 0xeb, + 0x1b, 0x87, 0xc0, 0x5b, 0xac, 0x02, 0x4b, 0x4d, + 0x37, 0x1c, 0xdd, 0x45, 0x58, 0xf6, 0xfc, 0x89, + 0xd9, 0x94, 0x5f, 0x48, 0xc1, 0x1d, 0xdd, 0xdd, + 0xb6, 0x29, 0xd9, 0xda, 0xc2, 0x47, 0xd7, 0x2b, + 0x79, 0xda, 0x3d, 0x85, 0x63, 0xbd, 0xae, 0x3c, + 0x99, 0xe6, 0xe6, 0xb8, 0x83, 0x08, 0xa3, 0x43, + 0xbb, 0x58, 0xb0, 0x70, 0x05, 0x5a, 0xcf, 0x73, + 0xab, 0xac, 0xea, 0xf9, 0xd7, 0x97, 0x00, 0x30, + 0xd0, 0x32, 0x18, 0x5b, 0xa4, 0x46, 0xc1, 0x5c, + 0x2d, 0x1c, 0x28, 0x2e, 0x59, 0x15, 0xbb, 0x73, + 0x5b, 0x0d, 0x9a, 0xbb, 0x7e, 0xac, 0xb6, 0x59, + 0xa3, 0x90, 0xee, 0x06, 0xb1, 0xae, 0x7b, 0x71, + 0x77, 0x18, 0x15, 0x4d, 0x99, 0xb3, 0xbe, 0x29, + 0x19, 0xb1, 0x3a, 0xef, 0x39, 0xde, 0xc6, 0x12, + 0xfa, 0x78, 0x17, 0x6e, 0x41, 0xb5, 0x8d, 0xc9, + 0xf2, 0x7b, 0xec, 0xb8, 0xc4, 0xf9, 0x1f, 0x72, + 0x5c, 0x60, 0x91, 0xa5, 0xb8, 0x58, 0x5c, 0xce, + 0x6c, 0xd6, 0xbb, 0xd4, 0x55, 0xca, 0x3b, 0x0e, + 0xad, 0x1a, 0xaa, 0x83, 0xe8, 0x1b, 0x47, 0x00, + 0xca, 0xf2, 0xcd, 0xa1, 0x98, 0x1a, 0x3b, 0x34, + 0xba, 0x8a, 0x36, 0x1d, 0xf6, 0x39, 0x8d, 0x90, + 0xd3, 0xb8, 0xe7, 0x28, 0xcf, 0xc3, 0xe3, 0xff, + 0x00, 0x71, 0x9a, 0xd3, 0x76, 0xca, 0x4f, 0x0b, + 0x57, 0x1e, 0xd1, 0xed, 0x53, 0x73, 0xac, 0xba, + 0xc6, 0xcd, 0xb1, 0x3e, 0x23, 0x69, 0xa6, 0xe1, + 0xef, 0x2d, 0x21, 0xce, 0xc0, 0x23, 0x6b, 0x85, + 0x3b, 0xab, 0x56, 0xca, 0x6d, 0x05, 0xb6, 0x45, + 0x75, 0x71, 0x35, 0xcc, 0x0f, 0xb9, 0x65, 0xc4, + 0x46, 0x1c, 0x11, 0xe1, 0x03, 0x49, 0x04, 0xd7, + 0x19, 0x1b, 0xc8, 0x20, 0x9b, 0xe4, 0xb7, 0xb2, + 0x35, 0xab, 0x8d, 0xa3, 0x1d, 0x96, 0x7e, 0x1f, + 0x5e, 0xcb, 0x38, 0xc1, 0x26, 0x69, 0x28, 0x64, + 0x2d, 0x3a, 0x09, 0x60, 0xa3, 0x75, 0x1e, 0xd3, + 0x8f, 0x69, 0x7a, 0x6e, 0xd5, 0x6c, 0x64, 0x67, + 0x1c, 0x7b, 0x3e, 0x31, 0x8d, 0x23, 0x10, 0x88, + 0x8a, 0xf0, 0x95, 0x07, 0xb4, 0x3b, 0x49, 0x75, + 0x9e, 0xca, 0xc7, 0x4a, 0xc1, 0x05, 0xbc, 0x22, + 0x96, 0xf6, 0xcc, 0xf2, 0x5b, 0x51, 0x4a, 0xee, + 0x54, 0xd3, 0x42, 0x0e, 0xcb, 0xdf, 0xfb, 0x3d, + 0x8a, 0xb0, 0xb7, 0xd4, 0xfc, 0xc6, 0xe6, 0x4b, + 0x97, 0xef, 0x96, 0xc6, 0x39, 0xb6, 0xfc, 0x85, + 0x57, 0x1d, 0xa8, 0xa9, 0x7c, 0xfb, 0x35, 0xb6, + 0xbf, 0x6d, 0x84, 0x36, 0x81, 0xcd, 0x82, 0xc6, + 0xd9, 0x90, 0x00, 0xf1, 0x42, 0x5f, 0xad, 0xe6, + 0x8a, 0x24, 0x82, 0x41, 0x08, 0x2d, 0xdb, 0x79, + 0xee, 0xb9, 0x17, 0xfe, 0x21, 0xff, 0x00, 0xfa, + 0x6a, 0xa2, 0xa6, 0xb6, 0x8b, 0x3e, 0x87, 0x38, + 0x87, 0x2f, 0x8e, 0x28, 0x5f, 0x11, 0xb1, 0x87, + 0x99, 0x71, 0x79, 0x07, 0x11, 0xf1, 0x74, 0xb7, + 0x0f, 0x9b, 0xba, 0xa1, 0x7f, 0x20, 0x83, 0x34, + 0xae, 0x8d, 0xff, 0x00, 0x0d, 0x42, 0xfa, 0xfe, + 0xc7, 0x02, 0x36, 0x4e, 0xc6, 0xbf, 0x30, 0xfd, + 0x67, 0x2f, 0x95, 0x65, 0x79, 0x5d, 0xe6, 0x6b, + 0x7b, 0x1d, 0x8d, 0x9b, 0x4b, 0xa5, 0x90, 0xf8, + 0xce, 0xdc, 0x63, 0x3f, 0x39, 0xce, 0x3b, 0x94, + 0x5f, 0x67, 0xb6, 0xb7, 0x8a, 0xcb, 0x2f, 0xb7, + 0xb3, 0x87, 0x44, 0x70, 0x46, 0xd8, 0xda, 0x3b, + 0x0d, 0x14, 0xdd, 0x41, 0xe8, 0x6e, 0x28, 0x17, + 0x79, 0x47, 0xb6, 0x54, 0xf8, 0xd6, 0xa0, 0x1d, + 0xe5, 0x1e, 0xd9, 0x40, 0x44, 0x44, 0x01, 0xf9, + 0x15, 0xd7, 0x0e, 0x69, 0x75, 0x10, 0xa1, 0x21, + 0xed, 0xde, 0x77, 0x1a, 0xe4, 0x44, 0x12, 0x1d, + 0x73, 0x37, 0xab, 0x62, 0x75, 0xcc, 0xde, 0xad, + 0xaa, 0x3d, 0x10, 0x48, 0x75, 0xcc, 0xde, 0xad, + 0xa9, 0xd7, 0x33, 0x7a, 0xb6, 0xa8, 0xf4, 0x41, + 0x21, 0xd7, 0x33, 0x7a, 0xb6, 0xa7, 0x5c, 0xcd, + 0xea, 0xda, 0xa3, 0xd1, 0x04, 0x87, 0x5c, 0xcd, + 0xea, 0xda, 0x9d, 0x73, 0x37, 0xab, 0x6a, 0x8f, + 0x44, 0x12, 0x1d, 0x73, 0x37, 0xab, 0x6a, 0x75, + 0xcc, 0xde, 0xad, 0xaa, 0x3d, 0x10, 0x48, 0x75, + 0xcc, 0xde, 0xad, 0xa9, 0xd7, 0x33, 0x7a, 0xb6, + 0xa8, 0xf4, 0x41, 0x21, 0xd7, 0x33, 0x7a, 0xb6, + 0xa7, 0x5c, 0xcd, 0xea, 0xda, 0xa3, 0xd1, 0x04, + 0x87, 0x5c, 0xcd, 0xea, 0xda, 0x9d, 0x73, 0x37, + 0xab, 0x6a, 0x8f, 0x44, 0x12, 0x1d, 0x73, 0x37, + 0xab, 0x6a, 0x75, 0xcc, 0xde, 0xad, 0xaa, 0x3d, + 0x10, 0x48, 0x75, 0xcc, 0xde, 0xad, 0xa9, 0xd7, + 0x33, 0x7a, 0xb6, 0xa8, 0xf4, 0x41, 0x21, 0xd7, + 0x32, 0xfa, 0xa6, 0xfe, 0x5d, 0xc4, 0xeb, 0x99, + 0x7d, 0x53, 0x14, 0x7a, 0x20, 0x90, 0xeb, 0x99, + 0xbd, 0x5b, 0x53, 0xae, 0x66, 0xf5, 0x6d, 0x51, + 0xe8, 0x82, 0x43, 0xae, 0x66, 0xf5, 0x6d, 0x4e, + 0xb9, 0x9b, 0xd5, 0xb5, 0x47, 0xa2, 0x09, 0x0e, + 0xb9, 0x9b, 0xd5, 0xb5, 0x3a, 0xe6, 0x6f, 0x56, + 0xd5, 0x1e, 0x88, 0x24, 0x3a, 0xe6, 0x6f, 0x56, + 0xd4, 0xeb, 0x99, 0x77, 0x62, 0x6a, 0x8f, 0x44, + 0x12, 0x1d, 0x73, 0x2f, 0xab, 0x6a, 0x75, 0xcc, + 0xde, 0xad, 0xaa, 0x3d, 0x10, 0x48, 0x75, 0xcc, + 0xde, 0xad, 0xa9, 0xd7, 0x33, 0x7a, 0xb6, 0xa8, + 0xf4, 0x41, 0x21, 0xd7, 0x33, 0x7a, 0xb6, 0xa7, + 0x5c, 0xcd, 0xea, 0xda, 0xa3, 0xd1, 0x04, 0x87, + 0x5c, 0xcd, 0xea, 0xda, 0x9d, 0x73, 0x37, 0xab, + 0x6a, 0x8f, 0x44, 0x12, 0x1d, 0x73, 0x37, 0xab, + 0x6a, 0x75, 0xcc, 0xde, 0xad, 0xaa, 0x3d, 0x10, + 0x48, 0x75, 0xcc, 0xde, 0xad, 0xa9, 0xd7, 0x33, + 0x7a, 0xb6, 0xa8, 0xf4, 0xa2, 0x0e, 0xe7, 0x67, + 0x17, 0x44, 0x51, 0x81, 0xac, 0xee, 0x54, 0xae, + 0x39, 0x25, 0x7c, 0xaf, 0x2f, 0x91, 0xc5, 0xce, + 0x3b, 0xab, 0xc6, 0x95, 0x94, 0x04, 0x44, 0x41, + 0xb2, 0xdb, 0xde, 0x22, 0xf3, 0xdb, 0xe1, 0x5c, + 0x5b, 0x5a, 0x69, 0x99, 0xb7, 0xec, 0xc7, 0x84, + 0xae, 0xdb, 0x6f, 0x78, 0x8f, 0xce, 0x1e, 0x15, + 0xc1, 0xb6, 0x06, 0x99, 0xa3, 0x3e, 0xc8, 0x78, + 0x4a, 0xeb, 0x83, 0xef, 0x8f, 0x74, 0x33, 0x79, + 0xdf, 0xe0, 0xfe, 0x28, 0x7c, 0x49, 0x89, 0x6a, + 0xc4, 0x98, 0x96, 0xad, 0x5e, 0x64, 0xb6, 0xe2, + 0x4c, 0x4b, 0x56, 0x24, 0xc4, 0x9a, 0xa3, 0x46, + 0xdc, 0x49, 0x89, 0x6a, 0xc4, 0x98, 0x93, 0x54, + 0xe8, 0x97, 0xc8, 0x2d, 0x2d, 0x6f, 0x6f, 0x1d, + 0x05, 0xc8, 0x2e, 0x69, 0x8c, 0x96, 0x80, 0x69, + 0xa4, 0x11, 0xf2, 0x2d, 0xbb, 0x41, 0x95, 0x36, + 0xca, 0xe2, 0x33, 0x69, 0x13, 0xb9, 0x97, 0xb7, + 0x58, 0xab, 0xa8, 0xed, 0x3b, 0xaa, 0x22, 0xde, + 0xe6, 0x5b, 0x69, 0x99, 0x3c, 0x2e, 0xc3, 0x23, + 0x0d, 0x5a, 0x55, 0x86, 0x3d, 0xb4, 0xa3, 0x69, + 0x3d, 0xb5, 0x5d, 0xbe, 0xc7, 0x68, 0x3d, 0xc2, + 0x17, 0x3b, 0x45, 0xa2, 0xf1, 0x68, 0xfa, 0xa3, + 0x93, 0x4d, 0x27, 0x15, 0xb1, 0xcd, 0x2d, 0x3b, + 0x2d, 0xaf, 0xdd, 0x11, 0xaa, 0x67, 0x26, 0x75, + 0xc0, 0xca, 0xa2, 0x37, 0x75, 0x0f, 0x0d, 0x24, + 0xe2, 0xd7, 0x84, 0x13, 0x43, 0xa7, 0xb0, 0xab, + 0xbb, 0x3b, 0x76, 0xd8, 0xf3, 0x97, 0x34, 0x10, + 0x19, 0x39, 0x7b, 0x07, 0x77, 0xc6, 0x1d, 0xf0, + 0xbc, 0x66, 0x5b, 0x55, 0x75, 0x7b, 0x11, 0x82, + 0x26, 0x0b, 0x78, 0xdc, 0x28, 0xf2, 0x1d, 0x89, + 0xc4, 0x6f, 0x57, 0x71, 0x72, 0x65, 0x36, 0x97, + 0xd3, 0xdd, 0x43, 0x2d, 0xac, 0x64, 0xb5, 0x92, + 0x36, 0xb2, 0x0f, 0x25, 0xa4, 0x1d, 0x35, 0xee, + 0x2a, 0x56, 0x9a, 0x56, 0xfb, 0xb8, 0x6e, 0x74, + 0xbe, 0x5d, 0xd7, 0xc5, 0x18, 0xfe, 0xad, 0xbe, + 0xd5, 0xd2, 0x71, 0x15, 0x8c, 0x37, 0x97, 0x62, + 0x83, 0x1d, 0x65, 0x77, 0x6c, 0x30, 0x34, 0x77, + 0xc2, 0xa8, 0xe4, 0xf9, 0x74, 0xb9, 0x9c, 0xcf, + 0x73, 0x26, 0xe6, 0x65, 0x88, 0x07, 0xe3, 0xa6, + 0x9a, 0xb8, 0xe9, 0xd2, 0xa7, 0xf6, 0xb2, 0xec, + 0x43, 0x96, 0x98, 0x41, 0xa3, 0xa7, 0x70, 0x68, + 0x1f, 0xd5, 0x69, 0xab, 0x95, 0x57, 0x2f, 0xcc, + 0xae, 0x32, 0xfb, 0x81, 0x71, 0x05, 0x09, 0xa5, + 0x1c, 0xd3, 0xa9, 0xc3, 0x79, 0x31, 0x44, 0xf6, + 0xe6, 0x7f, 0x5a, 0x67, 0xfc, 0x20, 0xf3, 0x36, + 0xac, 0xe4, 0xad, 0x6d, 0x1f, 0x45, 0x78, 0xce, + 0x9c, 0x27, 0x59, 0x4f, 0xdb, 0xe6, 0xd9, 0xa5, + 0xae, 0x66, 0x32, 0xdb, 0x83, 0xed, 0x2d, 0xc6, + 0x1a, 0x1d, 0x84, 0x87, 0x16, 0x9f, 0xce, 0x05, + 0x67, 0x6c, 0xa2, 0x89, 0xb1, 0xc1, 0x30, 0xfd, + 0xa9, 0xc4, 0xde, 0xd8, 0xa5, 0x57, 0x81, 0xb6, + 0x71, 0xd0, 0x38, 0xda, 0x7e, 0xb4, 0x6e, 0x87, + 0x03, 0xf2, 0x55, 0x42, 0x66, 0x99, 0xad, 0xc6, + 0x65, 0x3f, 0x39, 0x3d, 0x1a, 0xd6, 0xe8, 0x8e, + 0x36, 0xea, 0x03, 0x5e, 0xbd, 0xd4, 0xad, 0x2d, + 0xba, 0x26, 0x63, 0x6c, 0x7b, 0x4c, 0x99, 0x71, + 0xc6, 0x3b, 0xc4, 0x4e, 0xfd, 0x7e, 0xd8, 0x98, + 0xf0, 0x85, 0xbf, 0x34, 0x6b, 0x9f, 0x90, 0x3c, + 0x31, 0xa5, 0xce, 0xe6, 0x9a, 0x70, 0x8d, 0x24, + 0xd0, 0x05, 0xa7, 0x65, 0x1f, 0x5c, 0xb5, 0xd1, + 0x9d, 0x0f, 0x8e, 0x47, 0x02, 0x0e, 0x82, 0x0d, + 0x01, 0xd4, 0xa2, 0x6c, 0xf6, 0xba, 0x78, 0x20, + 0x64, 0x12, 0xc0, 0x25, 0x2c, 0x18, 0x43, 0xc3, + 0xb0, 0xd4, 0x0d, 0xf1, 0x45, 0xc9, 0x6f, 0xb4, + 0x17, 0x16, 0xf9, 0x84, 0xd7, 0x71, 0xb0, 0x61, + 0xb8, 0x35, 0x92, 0x12, 0x74, 0x77, 0x0a, 0x8e, + 0xdd, 0xb6, 0xda, 0xba, 0x7b, 0x75, 0x84, 0xf7, + 0xb1, 0xc5, 0xe9, 0x78, 0x9d, 0x67, 0x6e, 0xd9, + 0xe1, 0xe0, 0xeb, 0xb4, 0x76, 0x71, 0x77, 0x99, + 0xc9, 0x65, 0xed, 0x32, 0xc5, 0x81, 0xcf, 0xa9, + 0xd3, 0xa0, 0x03, 0xa1, 0x6f, 0x10, 0xcd, 0x6f, + 0xb4, 0x76, 0x90, 0xcf, 0x70, 0x6e, 0x9e, 0x34, + 0xe3, 0x76, 0xb1, 0x50, 0x74, 0x23, 0xb6, 0xc9, + 0x81, 0xb8, 0x99, 0x69, 0x49, 0x0e, 0xb2, 0x5c, + 0x29, 0xde, 0x15, 0x50, 0xd1, 0x66, 0xd7, 0x0d, + 0xcc, 0x86, 0x63, 0x30, 0x13, 0x4a, 0x1d, 0x88, + 0x8f, 0x24, 0x1d, 0x60, 0x6f, 0xd2, 0x80, 0xa9, + 0xdb, 0x69, 0xd7, 0x86, 0x9c, 0x34, 0x52, 0xd6, + 0xc5, 0x11, 0x1b, 0x6d, 0x36, 0xff, 0x00, 0x72, + 0xb6, 0xf6, 0xf8, 0x42, 0x73, 0x6c, 0x8e, 0x9b, + 0x4e, 0xd4, 0x9f, 0xdd, 0x5d, 0xef, 0xff, 0x00, + 0x4b, 0x93, 0xff, 0x00, 0xf0, 0xbf, 0xdd, 0x0a, + 0xb1, 0x9c, 0x67, 0x6f, 0xcd, 0x4c, 0x45, 0xd1, + 0x08, 0x79, 0xac, 0x40, 0x51, 0xc5, 0xd5, 0xc5, + 0x4d, 0xf0, 0x37, 0x97, 0x43, 0xb6, 0x9a, 0x43, + 0x96, 0x75, 0x77, 0xb3, 0xb7, 0x09, 0x8b, 0x9a, + 0xe7, 0x31, 0x9a, 0xea, 0xa5, 0x69, 0x85, 0x36, + 0x5b, 0x6d, 0x23, 0x4f, 0xb6, 0x78, 0xa7, 0xbd, + 0x8f, 0xb9, 0x96, 0xda, 0xf0, 0xbd, 0x74, 0x8e, + 0x09, 0x1d, 0x8d, 0x35, 0x6d, 0xdf, 0x6e, 0x3f, + 0xef, 0x28, 0x8c, 0xf1, 0xdf, 0xe6, 0xf7, 0x5e, + 0x7f, 0xc8, 0xb1, 0x93, 0xe7, 0x8f, 0xca, 0x84, + 0xa1, 0x90, 0x89, 0xb9, 0xec, 0x35, 0xab, 0x8b, + 0x69, 0x86, 0xbb, 0xc0, 0xef, 0xae, 0x4b, 0xeb, + 0xc3, 0x79, 0x77, 0x2d, 0xc9, 0x68, 0x61, 0x94, + 0xe2, 0x2d, 0x06, 0xb4, 0xee, 0xab, 0xd6, 0xb3, + 0x19, 0x2d, 0x6f, 0x64, 0xc3, 0x96, 0x4c, 0x95, + 0x9f, 0x2f, 0x4a, 0x44, 0xfd, 0x55, 0xb6, 0xb3, + 0x0d, 0x96, 0x4e, 0xff, 0x00, 0xbc, 0x83, 0xed, + 0x19, 0xe1, 0x0a, 0xcd, 0xb5, 0xee, 0x2c, 0xb5, + 0xb6, 0x70, 0x34, 0xc3, 0x30, 0x70, 0xed, 0x80, + 0x48, 0x55, 0x18, 0x66, 0x31, 0x4c, 0xc9, 0x40, + 0xa9, 0x8d, 0xc1, 0xd4, 0xdf, 0xa1, 0xaa, 0x92, + 0xce, 0x36, 0x82, 0x4c, 0xd2, 0x16, 0x44, 0xe8, + 0x5b, 0x08, 0x63, 0xb1, 0x82, 0x1c, 0x5d, 0xb8, + 0x46, 0xe8, 0x1b, 0xe9, 0x92, 0xb3, 0x37, 0x89, + 0x8f, 0x08, 0x29, 0x92, 0x2b, 0x87, 0x2d, 0x7f, + 0x5a, 0xda, 0x6d, 0x85, 0xca, 0x39, 0x23, 0x7c, + 0x51, 0xde, 0xd2, 0xbf, 0xaa, 0xc5, 0x8b, 0xfa, + 0xa4, 0x07, 0x7c, 0x8a, 0x1b, 0x64, 0xa5, 0xe7, + 0x5f, 0x7d, 0x21, 0xd2, 0x5f, 0x23, 0x5c, 0x4f, + 0x6f, 0x12, 0x89, 0x8f, 0x69, 0xa7, 0x66, 0x5b, + 0xd5, 0xe2, 0x16, 0xd3, 0x9b, 0x31, 0x09, 0x71, + 0x1a, 0x81, 0xda, 0xa6, 0xe0, 0x5a, 0x72, 0x7c, + 0xf5, 0xf9, 0x53, 0x65, 0x6b, 0x21, 0x12, 0xf3, + 0xa5, 0xa7, 0x4b, 0x8b, 0x69, 0x86, 0xbb, 0xc0, + 0xef, 0xae, 0x7d, 0xab, 0x6d, 0xbc, 0x69, 0xe3, + 0x31, 0xa3, 0x44, 0xf9, 0x9c, 0x73, 0x96, 0x93, + 0xaf, 0xd3, 0x1b, 0xa6, 0xdc, 0x27, 0xc6, 0x61, + 0x37, 0x93, 0x4a, 0xd1, 0xb4, 0x39, 0x8c, 0x64, + 0xe9, 0x71, 0x75, 0x3b, 0x61, 0xcb, 0x83, 0x68, + 0x6d, 0xe5, 0x76, 0x77, 0x40, 0xd3, 0xfa, 0xfc, + 0x18, 0x28, 0x35, 0xe8, 0x0d, 0x51, 0x7d, 0x67, + 0x3b, 0x73, 0x17, 0x66, 0x30, 0xd2, 0x39, 0x5c, + 0xf7, 0x3c, 0x37, 0x58, 0xf1, 0x8d, 0x48, 0xec, + 0xa9, 0xc6, 0xed, 0x9b, 0x0b, 0x43, 0xa4, 0xb4, + 0xac, 0xa3, 0x74, 0x38, 0x10, 0x0f, 0x74, 0x55, + 0x5a, 0x6b, 0x6a, 0xdb, 0x5a, 0xc7, 0x8d, 0x74, + 0x73, 0xdf, 0x8e, 0xf4, 0xd9, 0x69, 0xdb, 0xa5, + 0xf7, 0x47, 0x0f, 0x63, 0xbf, 0x6a, 0xa5, 0x6c, + 0x59, 0x3f, 0x36, 0x4f, 0x8c, 0xf7, 0x31, 0xad, + 0x1d, 0xad, 0x25, 0x6d, 0xcd, 0x9a, 0xeb, 0xbc, + 0x85, 0xe6, 0x11, 0x88, 0xf3, 0x6d, 0x90, 0x01, + 0xa4, 0x9a, 0x50, 0xd1, 0x55, 0x33, 0x5c, 0xe2, + 0xe3, 0x32, 0x95, 0xae, 0x90, 0x06, 0x46, 0xcf, + 0xd9, 0xc6, 0x34, 0xd2, 0xbb, 0xfb, 0xeb, 0xb3, + 0x2a, 0xda, 0x99, 0x2c, 0x6d, 0xc5, 0xb4, 0xf1, + 0x73, 0xd1, 0xb0, 0x51, 0x8e, 0x06, 0x8e, 0x03, + 0x78, 0xef, 0xaa, 0xc6, 0x3b, 0x45, 0x6b, 0x31, + 0xc6, 0x62, 0x75, 0x98, 0x5f, 0xbf, 0x49, 0xc9, + 0x78, 0xb7, 0x0a, 0x5a, 0xbb, 0x75, 0xf8, 0x25, + 0x36, 0x4a, 0x09, 0x23, 0xb6, 0x9e, 0x47, 0xb4, + 0xb7, 0x1b, 0x9a, 0x00, 0x70, 0xa1, 0xf1, 0x6b, + 0xc6, 0xbc, 0x65, 0x8e, 0x1f, 0x14, 0x5e, 0xf6, + 0x9f, 0x4e, 0xe1, 0x0b, 0x93, 0xe3, 0x2b, 0x81, + 0x2b, 0xde, 0x2d, 0xda, 0x63, 0x70, 0x01, 0x8c, + 0x2e, 0x22, 0x94, 0xdd, 0xad, 0x34, 0xd5, 0x46, + 0xc7, 0x9c, 0xcf, 0x1e, 0x68, 0xec, 0xca, 0x36, + 0x06, 0xbd, 0xce, 0x2e, 0x74, 0x75, 0xa8, 0x21, + 0xda, 0xdb, 0x55, 0x3b, 0x2f, 0x33, 0x69, 0x98, + 0xd3, 0x72, 0x3b, 0xb8, 0xe2, 0x31, 0x56, 0x27, + 0x5e, 0xdd, 0xf5, 0x9e, 0x1e, 0xc4, 0x9e, 0xd4, + 0xdb, 0xcf, 0x26, 0x6a, 0xc1, 0x1c, 0x6e, 0x70, + 0x92, 0x36, 0xb5, 0xa4, 0x02, 0x41, 0x35, 0x72, + 0x97, 0xda, 0x3f, 0x17, 0x24, 0x90, 0x1d, 0x63, + 0x07, 0xc8, 0xa2, 0xae, 0x76, 0xc9, 0xef, 0x84, + 0xb6, 0x0b, 0x7c, 0x12, 0x91, 0xa1, 0xee, 0x35, + 0x0d, 0x3b, 0xe0, 0x6e, 0xae, 0x4c, 0xc3, 0x69, + 0xe5, 0xbe, 0xb2, 0x75, 0xa3, 0xe0, 0x6b, 0x03, + 0xa9, 0x57, 0x87, 0x12, 0x74, 0x76, 0x30, 0xa8, + 0x8a, 0x5f, 0x5a, 0x6b, 0x1f, 0x69, 0x39, 0x31, + 0x47, 0x76, 0x62, 0xda, 0xce, 0x48, 0xe1, 0xc2, + 0x7c, 0x53, 0xf9, 0x61, 0xae, 0xcd, 0x8a, 0x7a, + 0x99, 0x7f, 0xbc, 0xb5, 0xec, 0xa4, 0x8d, 0x76, + 0x57, 0x84, 0x69, 0x2c, 0x91, 0xc1, 0xdf, 0x22, + 0x84, 0xb6, 0xda, 0x69, 0x2d, 0xf2, 0xe1, 0x60, + 0x2d, 0xda, 0xe6, 0x86, 0x39, 0x9c, 0xe1, 0x71, + 0x07, 0xc6, 0xae, 0x9a, 0x61, 0xec, 0xae, 0x4c, + 0xab, 0x38, 0xb8, 0xcb, 0x24, 0x2e, 0x88, 0x07, + 0xc6, 0xf0, 0x03, 0xe3, 0x76, 0x80, 0x69, 0xbc, + 0x77, 0x12, 0x71, 0xdb, 0x4b, 0xf0, 0xf1, 0x9d, + 0x61, 0x31, 0xe6, 0x29, 0x16, 0xc5, 0xed, 0x8a, + 0xd6, 0x6b, 0x6e, 0x1e, 0x09, 0x1b, 0x07, 0x67, + 0x17, 0x79, 0x8c, 0x96, 0x7e, 0xd7, 0x2c, 0x66, + 0x32, 0xe2, 0xf7, 0x54, 0xe8, 0xa5, 0x7b, 0x3b, + 0xab, 0xd5, 0xc6, 0x55, 0x73, 0x71, 0x9b, 0x36, + 0xc6, 0x5b, 0xc7, 0x49, 0x23, 0x23, 0xe7, 0x04, + 0x8f, 0xad, 0x46, 0x9d, 0x4b, 0x6b, 0xf6, 0xcd, + 0xb8, 0x4f, 0x35, 0x6b, 0x49, 0x1d, 0xad, 0xce, + 0x70, 0xa7, 0x78, 0x28, 0x4e, 0xb5, 0xbc, 0x17, + 0xe6, 0xfc, 0x3f, 0xf5, 0xe5, 0xd5, 0xae, 0xe5, + 0x3e, 0x6f, 0x69, 0x5a, 0x22, 0xda, 0xeb, 0x11, + 0x15, 0xe1, 0xa3, 0x9d, 0xa7, 0x14, 0x44, 0x44, + 0x4c, 0xdf, 0x5b, 0xeb, 0x3e, 0xe8, 0x4d, 0x49, + 0x99, 0x66, 0xd9, 0x45, 0xe3, 0x2d, 0x25, 0x7f, + 0xb5, 0xc6, 0xec, 0x25, 0xb5, 0x69, 0xa9, 0x0e, + 0x34, 0xf1, 0x5c, 0x37, 0x97, 0x76, 0xd5, 0xc7, + 0x1b, 0xb2, 0xc1, 0x31, 0x14, 0x91, 0x8f, 0x68, + 0x69, 0xdd, 0xa1, 0xd6, 0x17, 0x10, 0xdb, 0x28, + 0xcb, 0x41, 0x96, 0xd3, 0xf5, 0x83, 0x51, 0x0e, + 0x14, 0xaf, 0x74, 0x28, 0xac, 0xd7, 0x3d, 0xb9, + 0xcc, 0xdc, 0xdc, 0x60, 0x47, 0x13, 0x0e, 0x26, + 0xc6, 0x0d, 0x78, 0x4a, 0xac, 0x52, 0xd3, 0x35, + 0x99, 0xae, 0xd9, 0x8f, 0x19, 0x89, 0xf1, 0x5e, + 0xd9, 0x69, 0x14, 0xbc, 0x6e, 0xdf, 0xbb, 0xc2, + 0x26, 0x27, 0x87, 0xe2, 0xe3, 0xa8, 0x06, 0x83, + 0x56, 0xe2, 0x62, 0x5a, 0xb1, 0x26, 0x25, 0xa1, + 0x8b, 0x4d, 0x22, 0x23, 0xc7, 0xde, 0xdb, 0x89, + 0x31, 0x2d, 0x58, 0x93, 0x12, 0x6a, 0x8d, 0x1b, + 0x71, 0x26, 0x25, 0xab, 0x12, 0x62, 0x4d, 0x4d, + 0x1d, 0x96, 0x0e, 0xff, 0x00, 0xbf, 0xb6, 0xfb, + 0x66, 0x7d, 0x60, 0xad, 0x79, 0xcf, 0xbd, 0x37, + 0xcc, 0xe3, 0x55, 0x0c, 0xbc, 0xd7, 0x30, 0xb5, + 0xfb, 0x66, 0x7d, 0x60, 0xad, 0xd9, 0xc9, 0xff, + 0x00, 0xba, 0x1d, 0x86, 0x0f, 0x95, 0x66, 0xf3, + 0x3c, 0x66, 0x1e, 0x87, 0x90, 0xfb, 0x2f, 0xf1, + 0x72, 0x5b, 0xfe, 0xde, 0x3f, 0x39, 0xbe, 0x15, + 0x36, 0xa1, 0x2d, 0xff, 0x00, 0x6f, 0x1f, 0x9c, + 0xdf, 0x0a, 0x9b, 0x5c, 0x5b, 0x45, 0x19, 0x9a, + 0xfb, 0xd5, 0x97, 0x9f, 0xf2, 0x85, 0x26, 0xa3, + 0x33, 0x5f, 0x7a, 0xb2, 0xf3, 0xfe, 0x50, 0x81, + 0x94, 0xfb, 0xd5, 0xe7, 0x9e, 0x7e, 0xb1, 0x52, + 0x75, 0x51, 0x79, 0x57, 0xbd, 0x5e, 0x79, 0xe7, + 0xeb, 0x15, 0x27, 0x44, 0x19, 0xaa, 0x55, 0x62, + 0x89, 0x44, 0x19, 0xa8, 0x59, 0x95, 0xb6, 0xd7, + 0x51, 0x3a, 0x0b, 0xb8, 0x9b, 0x34, 0x4f, 0xf2, + 0x9a, 0xf0, 0x1c, 0xd3, 0xdb, 0x06, 0xab, 0xcd, + 0x12, 0x88, 0x21, 0xa7, 0xd8, 0x2d, 0x95, 0x9a, + 0x4c, 0x6d, 0x85, 0xd0, 0xd7, 0x5b, 0x63, 0x91, + 0xc1, 0xa4, 0x9e, 0xc3, 0xaa, 0xb5, 0x7f, 0xb7, + 0x9b, 0x2d, 0xbd, 0x2f, 0xef, 0x3f, 0xa1, 0x4f, + 0x50, 0x25, 0x02, 0x08, 0x1f, 0xf6, 0xf3, 0x65, + 0xbe, 0x6c, 0xbf, 0xbc, 0xfe, 0x84, 0x3f, 0x87, + 0x9b, 0x2c, 0x77, 0x25, 0xa6, 0xba, 0x73, 0x9a, + 0x3b, 0xe1, 0x4f, 0x50, 0x25, 0x02, 0x08, 0x1f, + 0xf6, 0xf3, 0x65, 0xbe, 0x6c, 0xbd, 0x9f, 0xd6, + 0x7f, 0x42, 0x7f, 0xb7, 0x7b, 0x2d, 0xbd, 0x2f, + 0xef, 0x3f, 0xa1, 0x4f, 0x50, 0x25, 0x02, 0x08, + 0x1f, 0xf6, 0xef, 0x65, 0xbe, 0x6c, 0xbf, 0xbc, + 0x3c, 0x4b, 0x3f, 0xed, 0xe6, 0xcb, 0x6e, 0xb6, + 0x5d, 0x3a, 0xff, 0x00, 0x59, 0xfd, 0x0a, 0x76, + 0x81, 0x28, 0x10, 0x40, 0xff, 0x00, 0xb7, 0x9b, + 0x2f, 0xbd, 0x2f, 0xef, 0x29, 0xe0, 0x0b, 0x3f, + 0xed, 0xe6, 0xcb, 0x6f, 0x4b, 0xfb, 0xcf, 0xe8, + 0x53, 0xb4, 0x09, 0x40, 0x82, 0x07, 0xfd, 0xbc, + 0xd9, 0x6d, 0xe9, 0x7f, 0x79, 0xfd, 0x0b, 0x3f, + 0xed, 0xe6, 0xcb, 0x6f, 0x4b, 0xfb, 0xcf, 0xe8, + 0x53, 0xb4, 0x09, 0x40, 0x82, 0x0b, 0xfd, 0xbc, + 0xd9, 0x6d, 0xe9, 0x7f, 0x79, 0xfd, 0x09, 0xfe, + 0xde, 0x6c, 0xb6, 0xf4, 0xbf, 0xbc, 0xfe, 0x85, + 0x3b, 0x40, 0x94, 0x08, 0x39, 0xa2, 0xc8, 0x72, + 0xa8, 0xb2, 0x67, 0x64, 0xac, 0x2e, 0xf6, 0x37, + 0x82, 0x08, 0x2e, 0xab, 0xa8, 0x4e, 0x2d, 0x74, + 0x51, 0x5f, 0xed, 0xe6, 0xcb, 0x7c, 0xd9, 0x7f, + 0x79, 0xfd, 0x0a, 0x7a, 0x81, 0x28, 0x10, 0x41, + 0x7f, 0xb7, 0x9b, 0x2d, 0xbd, 0x2f, 0xef, 0x3f, + 0xa1, 0x3f, 0xdb, 0xcd, 0x96, 0xde, 0x97, 0xf7, + 0x9f, 0xd0, 0xa7, 0x68, 0x12, 0x81, 0x04, 0x17, + 0xfb, 0x79, 0xb2, 0xdb, 0xd2, 0xfe, 0xf3, 0xfa, + 0x13, 0xfd, 0xbc, 0xd9, 0x6d, 0xe9, 0x7f, 0x79, + 0xfd, 0x0a, 0x76, 0x81, 0x28, 0x10, 0x41, 0x7f, + 0xb7, 0x9b, 0x2d, 0xbd, 0x2f, 0xef, 0x3f, 0xa1, + 0x3f, 0xdb, 0xcd, 0x96, 0xde, 0x97, 0xf7, 0x9f, + 0xd0, 0xa7, 0x68, 0x12, 0x81, 0x04, 0x17, 0xfb, + 0x79, 0xb2, 0xdb, 0xd2, 0xfe, 0xf3, 0xfa, 0x13, + 0xfd, 0xbc, 0xd9, 0x6d, 0xe9, 0x7f, 0x79, 0xfd, + 0x0a, 0x76, 0x81, 0x28, 0x10, 0x41, 0x7f, 0xb7, + 0x9b, 0x2d, 0xbd, 0x2f, 0xef, 0x3f, 0xa1, 0x3f, + 0xdb, 0xcd, 0x96, 0xde, 0x97, 0xf7, 0x9f, 0xd0, + 0xa7, 0x68, 0x12, 0x81, 0x04, 0x17, 0xfb, 0x79, + 0xb2, 0xdb, 0xd2, 0xfe, 0xf3, 0xfa, 0x13, 0xfd, + 0xbc, 0xd9, 0x6d, 0xe9, 0x7f, 0x79, 0xfd, 0x0a, + 0x76, 0x81, 0x28, 0x10, 0x41, 0x7f, 0xb7, 0x9b, + 0x2d, 0xbd, 0x2f, 0xef, 0x3f, 0xa1, 0x3f, 0xdb, + 0xcd, 0x96, 0xde, 0x97, 0xf7, 0x9f, 0xd0, 0xa7, + 0x68, 0x12, 0x81, 0x04, 0x17, 0xfb, 0x79, 0xb2, + 0xdb, 0xd2, 0xfe, 0xf3, 0xfa, 0x17, 0x56, 0x57, + 0xb1, 0xf9, 0x0e, 0x55, 0x7a, 0xcb, 0xeb, 0x40, + 0xf1, 0x34, 0x61, 0xc1, 0xa5, 0xcf, 0xa8, 0xf1, + 0x81, 0x69, 0xdc, 0xde, 0x2a, 0x4e, 0x81, 0x28, + 0x10, 0x46, 0x66, 0xbb, 0x1f, 0x90, 0xe6, 0xd7, + 0xaf, 0xbd, 0xbc, 0xe7, 0x0c, 0xd2, 0x06, 0x87, + 0x16, 0xbe, 0x82, 0x8d, 0x01, 0xa2, 0x82, 0x9d, + 0x85, 0xcb, 0xfe, 0xde, 0xec, 0xbe, 0xf4, 0xbf, + 0xbc, 0xfe, 0x85, 0x3b, 0x40, 0x94, 0x08, 0x20, + 0x7f, 0xdb, 0xcd, 0x96, 0xde, 0x97, 0xf7, 0x9f, + 0xd0, 0x9f, 0xed, 0xee, 0xcb, 0x6f, 0x4b, 0xfb, + 0xcd, 0x5d, 0xe5, 0x3c, 0x88, 0x20, 0x7f, 0xdb, + 0xcd, 0x96, 0xde, 0x97, 0xf7, 0x9f, 0xd0, 0x9f, + 0xed, 0xee, 0xcb, 0x03, 0x5c, 0x32, 0xf2, 0xf4, + 0xf0, 0xe1, 0xaa, 0x9e, 0x44, 0x10, 0x3f, 0xed, + 0xee, 0xcb, 0x68, 0xd1, 0x2e, 0x8d, 0x5f, 0xac, + 0xfe, 0x84, 0xff, 0x00, 0x6f, 0x76, 0x5b, 0x55, + 0x25, 0xfd, 0xe1, 0xe2, 0x53, 0xc8, 0x82, 0x04, + 0xfe, 0x1f, 0x6c, 0xb1, 0xdc, 0x9b, 0xf7, 0xa5, + 0x3f, 0xdb, 0xdd, 0x96, 0xde, 0x97, 0xf7, 0x87, + 0x89, 0x4f, 0x22, 0x08, 0x1f, 0xf6, 0xfb, 0x65, + 0xb7, 0x44, 0xbf, 0xbc, 0x3c, 0x49, 0xfe, 0xdf, + 0x6c, 0xae, 0xf4, 0xbf, 0xbc, 0x3c, 0x4a, 0x79, + 0x10, 0x40, 0xff, 0x00, 0xb7, 0xdb, 0x2d, 0xba, + 0x25, 0xfd, 0xe1, 0xe2, 0x59, 0x67, 0xe1, 0xfe, + 0xca, 0xb5, 0xc1, 0xd8, 0x64, 0x75, 0x37, 0x0c, + 0x8e, 0xa1, 0xec, 0x68, 0xa2, 0x9d, 0x44, 0x1a, + 0xec, 0x72, 0xec, 0xa7, 0x2c, 0x87, 0x99, 0xcb, + 0xed, 0xe3, 0x81, 0x84, 0x00, 0x70, 0x0d, 0x26, + 0x9a, 0xb1, 0x38, 0xe9, 0x3d, 0xd5, 0xb5, 0xce, + 0xc4, 0x6a, 0x4a, 0xc2, 0x51, 0x06, 0x41, 0x15, + 0x50, 0x2e, 0xf2, 0x8f, 0x6c, 0xa9, 0xd0, 0x34, + 0xa8, 0x27, 0x79, 0x47, 0xb6, 0x50, 0x13, 0xf2, + 0x08, 0xbb, 0xec, 0xe2, 0x86, 0x08, 0x1d, 0x7d, + 0x73, 0xa1, 0x8c, 0xd2, 0xda, 0xee, 0xf6, 0x68, + 0x87, 0x08, 0x89, 0x99, 0x9d, 0x34, 0x78, 0x83, + 0x2c, 0x96, 0x50, 0x1f, 0x21, 0xe6, 0xa3, 0x3b, + 0xae, 0xd7, 0xc0, 0xb6, 0x18, 0x72, 0x78, 0x8e, + 0x19, 0x6e, 0x2a, 0xee, 0xc1, 0xe2, 0x05, 0x44, + 0xdf, 0x66, 0xd7, 0x17, 0x8e, 0xd2, 0xe2, 0xd8, + 0xbf, 0x35, 0x83, 0x7b, 0xb2, 0xb8, 0xaa, 0x06, + 0xad, 0x0b, 0x4d, 0x7c, 0xb7, 0xb6, 0xd6, 0xf9, + 0x3c, 0xfc, 0x9f, 0xcc, 0x66, 0x26, 0x62, 0x95, + 0x89, 0x88, 0xf6, 0xca, 0xc3, 0xfe, 0x43, 0xeb, + 0xcf, 0x09, 0xf4, 0x53, 0xfc, 0x87, 0xd7, 0x9e, + 0x13, 0xe8, 0xaa, 0xfe, 0x24, 0xc4, 0xaf, 0xe9, + 0xab, 0xd5, 0x2e, 0x7f, 0xd4, 0x72, 0xf4, 0x55, + 0x60, 0xff, 0x00, 0x21, 0xf5, 0xe7, 0x84, 0xfa, + 0x29, 0xfe, 0x43, 0xeb, 0xcf, 0x09, 0xf4, 0x55, + 0x7f, 0x12, 0x62, 0x51, 0xe9, 0xeb, 0xd5, 0x27, + 0xf5, 0x0c, 0xbd, 0x35, 0x58, 0x3f, 0xc8, 0x7d, + 0x79, 0xe1, 0x3e, 0x8a, 0x7f, 0x90, 0xfa, 0xf3, + 0xc2, 0x7d, 0x15, 0x5f, 0xc4, 0x98, 0x93, 0xd3, + 0xd7, 0xaa, 0x4f, 0xea, 0x19, 0x7a, 0x6a, 0xb0, + 0x7f, 0x90, 0xfa, 0xf3, 0xc2, 0x7d, 0x14, 0xff, + 0x00, 0x21, 0xf5, 0xe7, 0x84, 0xfa, 0x2a, 0xbf, + 0x89, 0x31, 0x27, 0xa7, 0xaf, 0x54, 0x9f, 0xd4, + 0x72, 0xf4, 0x55, 0x60, 0xff, 0x00, 0x21, 0xf5, + 0xe7, 0x84, 0xfa, 0x29, 0xfe, 0x43, 0xeb, 0xcf, + 0x09, 0xf4, 0x55, 0x7f, 0x12, 0x62, 0x4f, 0x4f, + 0x5e, 0xa9, 0x3f, 0xa8, 0xe4, 0xe8, 0xaa, 0xc1, + 0xfe, 0x43, 0xeb, 0xcf, 0x09, 0xf4, 0x53, 0xfc, + 0x87, 0xd7, 0x9e, 0x13, 0xe8, 0xaa, 0xfe, 0x24, + 0xc4, 0x9e, 0x9e, 0xbd, 0x52, 0x7f, 0x50, 0xcb, + 0xd3, 0x55, 0x83, 0xfc, 0x87, 0xd7, 0x9e, 0x13, + 0xe8, 0xa7, 0xf9, 0x0f, 0xaf, 0x3c, 0x27, 0xd1, + 0x55, 0xfc, 0x49, 0x89, 0x3d, 0x3d, 0x7a, 0xa4, + 0xfe, 0xa1, 0x97, 0xa6, 0xab, 0x07, 0xf9, 0x0f, + 0xaf, 0x3c, 0x27, 0xd1, 0x4f, 0xf2, 0x1f, 0x5e, + 0x78, 0x4f, 0xa2, 0xab, 0xf8, 0x93, 0x12, 0x7a, + 0x7a, 0xf5, 0x49, 0xfd, 0x47, 0x27, 0x45, 0x56, + 0x0f, 0xf2, 0x1f, 0x5e, 0x78, 0x4f, 0xa2, 0x9f, + 0xe4, 0x3e, 0xbc, 0xf0, 0x9f, 0x45, 0x57, 0xf1, + 0x26, 0x24, 0xf4, 0xd5, 0xea, 0x93, 0xfa, 0x86, + 0x5e, 0x8a, 0xac, 0x1f, 0xe4, 0x3e, 0xbc, 0xf0, + 0x9f, 0x45, 0x3f, 0xc8, 0x7d, 0x79, 0xe1, 0x3e, + 0x8a, 0xaf, 0xe2, 0x4c, 0x49, 0xe9, 0xab, 0xd5, + 0x27, 0xf5, 0x0c, 0xbd, 0x15, 0x58, 0x3f, 0xc8, + 0x7d, 0x79, 0xe1, 0x3e, 0x8a, 0x7f, 0x90, 0xfa, + 0xf3, 0xc2, 0x7d, 0x15, 0x5f, 0xc4, 0x98, 0x93, + 0xd3, 0xd7, 0xaa, 0x4f, 0xea, 0x19, 0x7a, 0x6a, + 0xb0, 0x7f, 0x90, 0xfa, 0xf3, 0xc2, 0x7d, 0x14, + 0xff, 0x00, 0x21, 0xf5, 0xe7, 0x84, 0xfa, 0x2a, + 0xbf, 0x89, 0x31, 0x27, 0xa7, 0xaf, 0x54, 0x9f, + 0xd4, 0x32, 0xf4, 0xd5, 0x60, 0xff, 0x00, 0x21, + 0xf5, 0xe7, 0x84, 0xfa, 0x29, 0xfe, 0x43, 0xeb, + 0xcf, 0x09, 0xf4, 0x55, 0x7f, 0x12, 0x62, 0x4f, + 0x4f, 0x5e, 0xa9, 0x3f, 0xa8, 0x65, 0xe9, 0xaa, + 0xc1, 0xfe, 0x43, 0xeb, 0xcf, 0x09, 0xf4, 0x53, + 0xfc, 0x87, 0xd7, 0x9e, 0x13, 0xe8, 0xaa, 0xfe, + 0x24, 0xc4, 0x9e, 0x9e, 0xbd, 0x52, 0x7f, 0x50, + 0xcb, 0xd3, 0x55, 0x83, 0xfc, 0x87, 0xd7, 0x9e, + 0x13, 0xe8, 0xa7, 0xf9, 0x0f, 0xaf, 0x3c, 0x27, + 0xd1, 0x55, 0xfc, 0x49, 0x89, 0x3d, 0x3d, 0x7a, + 0xa4, 0xfe, 0xa1, 0x97, 0xa6, 0xab, 0x07, 0xf9, + 0x0f, 0xaf, 0x3c, 0x27, 0xd1, 0x4f, 0xf2, 0x1f, + 0x5e, 0x78, 0x4f, 0xa2, 0xab, 0xf8, 0x93, 0x12, + 0x7a, 0x7a, 0xf5, 0x49, 0xfd, 0x43, 0x2f, 0x4d, + 0x56, 0x0f, 0xf2, 0x1f, 0x5e, 0x78, 0x4f, 0xa2, + 0x9f, 0xe4, 0x3e, 0xbc, 0xf0, 0x9f, 0x45, 0x57, + 0xf1, 0x26, 0x24, 0xf4, 0xf5, 0xea, 0x93, 0xfa, + 0x86, 0x5e, 0x9a, 0xac, 0x1f, 0xe4, 0x3e, 0xbc, + 0xf0, 0x9f, 0x45, 0x3f, 0xc8, 0x7d, 0x79, 0xe1, + 0x3e, 0x8a, 0xaf, 0xe2, 0x4c, 0x49, 0xe9, 0xeb, + 0xd5, 0x27, 0xf5, 0x0c, 0xbd, 0x35, 0x58, 0x3f, + 0xc8, 0x7d, 0x79, 0xe1, 0x3e, 0x8a, 0x7f, 0x90, + 0xfa, 0xf3, 0xc2, 0x7d, 0x15, 0x5f, 0xc4, 0x98, + 0x93, 0xd3, 0xd7, 0xaa, 0x4f, 0xea, 0x19, 0x7a, + 0x6a, 0xb0, 0x7f, 0x90, 0xfa, 0xf3, 0xc2, 0x7d, + 0x14, 0xff, 0x00, 0x21, 0xf5, 0xe7, 0x84, 0xfa, + 0x2a, 0xbf, 0x89, 0x31, 0x27, 0xa7, 0xaf, 0x54, + 0x9f, 0xd4, 0x32, 0xf4, 0xd5, 0x60, 0xff, 0x00, + 0x21, 0xf5, 0xe7, 0x84, 0xfa, 0x29, 0xfe, 0x43, + 0xeb, 0xcf, 0x09, 0xf4, 0x55, 0x7f, 0x12, 0x62, + 0x4f, 0x4d, 0x5e, 0xa9, 0x3f, 0xa8, 0xe4, 0x8f, + 0xd4, 0xaa, 0xc2, 0x19, 0x92, 0xc9, 0xa1, 0x97, + 0x1a, 0x7c, 0xee, 0x30, 0xb1, 0x2e, 0x57, 0x20, + 0x6e, 0x38, 0x1c, 0x25, 0x6e, 0xba, 0x6e, 0xf7, + 0x37, 0xd5, 0x78, 0x9a, 0xeb, 0xd2, 0xba, 0x2c, + 0xf3, 0x1b, 0x8b, 0x37, 0x62, 0x89, 0xc7, 0x07, + 0xe7, 0x30, 0x9d, 0x07, 0xb8, 0xab, 0x6f, 0x2d, + 0x1a, 0x6b, 0x13, 0xaf, 0xc5, 0x7c, 0x7f, 0xcc, + 0x67, 0x5f, 0xae, 0xba, 0x47, 0xfa, 0x5d, 0x64, + 0x10, 0x48, 0xa5, 0x08, 0xd0, 0xe0, 0x75, 0x84, + 0x52, 0x32, 0x08, 0x73, 0x2b, 0x5f, 0x6b, 0x80, + 0x52, 0x56, 0xfe, 0xd1, 0x9b, 0xa2, 0x9a, 0xc1, + 0xec, 0xa8, 0xed, 0xc0, 0xb3, 0x4c, 0x4c, 0x4e, + 0x92, 0xf4, 0x2b, 0x31, 0x68, 0xdd, 0x13, 0xc2, + 0x78, 0xb2, 0xd7, 0x60, 0x70, 0x78, 0xfc, 0xd2, + 0x1d, 0xdc, 0x05, 0x69, 0xdb, 0x3b, 0x72, 0xff, + 0x00, 0x65, 0xbe, 0x67, 0x90, 0xe6, 0xf3, 0x6e, + 0x3b, 0x83, 0xf3, 0x9a, 0x7b, 0xeb, 0x6d, 0x57, + 0x6d, 0xbf, 0x31, 0x7d, 0x68, 0xec, 0xba, 0xec, + 0x68, 0x70, 0xf1, 0x0f, 0x6b, 0x7b, 0xb4, 0xa6, + 0x96, 0xd2, 0xca, 0x65, 0xa6, 0xfc, 0x76, 0xaa, + 0x8d, 0x55, 0x9a, 0xae, 0x9c, 0xd3, 0x28, 0xbb, + 0xca, 0xe5, 0xc1, 0x30, 0xc5, 0x11, 0x34, 0x8a, + 0x60, 0x3c, 0x57, 0x0e, 0x35, 0xc4, 0x5d, 0x42, + 0xb6, 0x45, 0xa2, 0x7c, 0x1e, 0x5d, 0xab, 0xb6, + 0x74, 0x9e, 0x0d, 0x95, 0x4a, 0xad, 0x58, 0x93, + 0x12, 0x9d, 0x51, 0xa3, 0x6d, 0x52, 0xab, 0x56, + 0x24, 0xc4, 0x9a, 0x9a, 0x36, 0xe2, 0x4c, 0x54, + 0x5a, 0xb1, 0x26, 0x25, 0x06, 0x8d, 0x95, 0x0a, + 0x4f, 0x2b, 0xcf, 0xee, 0xb2, 0xc8, 0x5f, 0x14, + 0x0c, 0x63, 0xc3, 0xdd, 0x8e, 0xae, 0xae, 0x83, + 0x40, 0xdd, 0xca, 0x6f, 0x28, 0x8c, 0x49, 0x89, + 0x44, 0xc4, 0x4f, 0x09, 0x5a, 0x26, 0xd5, 0x9d, + 0x6b, 0x3a, 0x4b, 0xbf, 0x30, 0xcd, 0x2e, 0xb3, + 0x19, 0x84, 0xd7, 0x2e, 0x04, 0xb4, 0x51, 0xad, + 0x6e, 0x86, 0x81, 0xd8, 0x0b, 0x96, 0xab, 0x5e, + 0x25, 0x8c, 0x4a, 0x63, 0x87, 0x04, 0x4e, 0xb3, + 0x3a, 0xcc, 0xeb, 0x2d, 0xb5, 0x58, 0xaa, 0xd7, + 0x89, 0x31, 0x29, 0xd5, 0x1a, 0x36, 0xe2, 0x4c, + 0x4b, 0x56, 0x24, 0xc4, 0x9a, 0x9a, 0x36, 0xd7, + 0x75, 0x2a, 0xb5, 0x62, 0x4c, 0x49, 0xa9, 0xa3, + 0x6d, 0x52, 0xab, 0x56, 0x24, 0xc4, 0x9a, 0x9a, + 0x36, 0xd5, 0x2a, 0xb5, 0x62, 0x4c, 0x49, 0xa9, + 0xa3, 0x6d, 0x52, 0xab, 0x56, 0x24, 0xc4, 0x9a, + 0x9a, 0x36, 0xd5, 0x2a, 0xb5, 0x62, 0x4c, 0x49, + 0xa9, 0xa3, 0x6d, 0x56, 0x2a, 0xb5, 0xe2, 0x4c, + 0x4a, 0x13, 0xa3, 0x65, 0x42, 0x55, 0x6b, 0xc4, + 0x98, 0x91, 0x1a, 0x36, 0xd5, 0x62, 0xa1, 0x6b, + 0xc4, 0x98, 0x94, 0xea, 0x68, 0xd9, 0x50, 0x95, + 0x5a, 0xf1, 0x26, 0x24, 0xd4, 0xd1, 0xb6, 0xa9, + 0x55, 0xab, 0x12, 0x62, 0x4d, 0x4d, 0x1b, 0x4b, + 0xab, 0xac, 0xac, 0x55, 0x6b, 0xc4, 0x98, 0x94, + 0x25, 0xb2, 0xbb, 0xda, 0x16, 0x6a, 0xb5, 0x62, + 0x4c, 0x48, 0x68, 0xdb, 0x54, 0xaa, 0xd5, 0x89, + 0x31, 0x29, 0xd5, 0x1a, 0x36, 0xd5, 0x2a, 0xb5, + 0x62, 0x4c, 0x49, 0xa9, 0xa4, 0x73, 0x6d, 0xaa, + 0x55, 0x6a, 0xc4, 0xb6, 0xdb, 0x41, 0x71, 0x77, + 0x33, 0x60, 0xb6, 0x8c, 0xcb, 0x2b, 0xb5, 0x34, + 0x69, 0xe5, 0x1d, 0xc0, 0xa2, 0x66, 0x22, 0x35, + 0x4c, 0x57, 0x5d, 0x34, 0xe3, 0xaf, 0x24, 0x96, + 0xce, 0x5a, 0xba, 0xeb, 0x37, 0x80, 0x0f, 0x26, + 0x13, 0xce, 0xbf, 0xb4, 0xdd, 0x5d, 0xf5, 0x62, + 0xcc, 0xa4, 0x12, 0x5d, 0xbc, 0x8d, 0x21, 0xbe, + 0x2f, 0x02, 0xf5, 0x97, 0x58, 0xc5, 0x90, 0xd8, + 0x90, 0xe2, 0x1f, 0x79, 0x35, 0x0b, 0xdc, 0x37, + 0xf7, 0x87, 0x60, 0x2e, 0x43, 0xaf, 0x4e, 0x93, + 0xba, 0xb2, 0xe4, 0xb6, 0xeb, 0x70, 0xf0, 0x7a, + 0x3e, 0x5f, 0x14, 0xd2, 0x9a, 0x4f, 0x8c, 0xf1, + 0x7b, 0x83, 0xf6, 0xf1, 0xf9, 0xcd, 0xf0, 0xa9, + 0xba, 0xa8, 0x48, 0x3f, 0x6f, 0x1f, 0x9c, 0xdf, + 0x0a, 0x9a, 0xa2, 0xa3, 0xbb, 0x35, 0x51, 0x99, + 0xb7, 0xbd, 0x59, 0xfd, 0xa7, 0xca, 0x14, 0x95, + 0x14, 0x6e, 0x6d, 0xef, 0x56, 0x7f, 0x69, 0xf2, + 0x84, 0x18, 0xca, 0xbd, 0xea, 0xf3, 0xcf, 0x3f, + 0x58, 0xa9, 0x35, 0x19, 0x95, 0x7b, 0xd5, 0xe7, + 0x9e, 0x7e, 0xb1, 0x52, 0x68, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x03, 0x5a, + 0x82, 0x77, 0x94, 0x7b, 0x65, 0x4e, 0x8d, 0x6a, + 0x09, 0xde, 0x51, 0xed, 0x94, 0x19, 0x63, 0x31, + 0xbd, 0xac, 0xf9, 0xe4, 0x37, 0x87, 0x42, 0xd9, + 0xb4, 0x97, 0x18, 0x1f, 0x15, 0x9c, 0x66, 0x8c, + 0x63, 0x71, 0xb8, 0x0e, 0x06, 0xac, 0xd9, 0x7b, + 0xdc, 0x5e, 0x72, 0xe3, 0xda, 0x37, 0x7f, 0x9a, + 0x3c, 0x6f, 0x35, 0xbe, 0x02, 0xba, 0xe0, 0x88, + 0x9b, 0xc6, 0xac, 0xbe, 0x76, 0xd3, 0x18, 0x78, + 0x7b, 0x67, 0x44, 0x76, 0x24, 0xc4, 0xbc, 0x62, + 0x59, 0x07, 0x13, 0x83, 0x7e, 0x71, 0x0d, 0xe1, + 0x2b, 0x67, 0xb5, 0xe4, 0xc4, 0x71, 0xd2, 0x39, + 0xba, 0xad, 0xac, 0xee, 0xee, 0xbf, 0x61, 0x19, + 0x78, 0x07, 0x49, 0xd4, 0x3b, 0x55, 0x5b, 0x27, + 0xcb, 0x33, 0x0b, 0x76, 0xe3, 0x92, 0x12, 0x1b, + 0xba, 0x41, 0x0e, 0xf0, 0x2b, 0x15, 0xec, 0xbd, + 0x59, 0x95, 0xe2, 0xb7, 0x60, 0xfd, 0x5b, 0x43, + 0x5a, 0x35, 0x8d, 0x3b, 0xa5, 0x72, 0xe4, 0xf9, + 0xe8, 0xb8, 0x63, 0xd9, 0x7c, 0xf8, 0xd8, 0xe6, + 0x91, 0x84, 0xf9, 0x35, 0x05, 0x70, 0xee, 0xde, + 0x62, 0x6d, 0x58, 0xfa, 0x61, 0xb6, 0x7c, 0xb6, + 0x08, 0x98, 0xc7, 0x6b, 0x4c, 0x5e, 0xd1, 0xae, + 0xbe, 0xc5, 0x6f, 0x12, 0x62, 0x5d, 0xd3, 0xe5, + 0xef, 0xb9, 0xbf, 0xb8, 0x19, 0x78, 0x6c, 0xb1, + 0x31, 0xd8, 0x85, 0x1c, 0x29, 0xe3, 0x0d, 0xc5, + 0xc7, 0x35, 0xbc, 0xd0, 0x4f, 0xec, 0xf3, 0x36, + 0x92, 0x02, 0x01, 0x6d, 0x6b, 0x5a, 0xea, 0x5d, + 0x62, 0xf1, 0x3a, 0x44, 0x78, 0xe8, 0xcb, 0x6c, + 0x56, 0xaf, 0xb3, 0x5a, 0xf8, 0x6a, 0xf3, 0x89, + 0x31, 0x2e, 0x8b, 0x9c, 0xb6, 0xfa, 0xd2, 0x2e, + 0x76, 0xe1, 0x98, 0x1a, 0x48, 0x6d, 0x6a, 0x35, + 0x9d, 0x5a, 0x96, 0xcb, 0x7c, 0x8f, 0x33, 0x9e, + 0x30, 0xf6, 0xc7, 0x81, 0xa7, 0x4b, 0x71, 0x90, + 0xd3, 0xc1, 0x42, 0x9d, 0xca, 0x73, 0x4f, 0x67, + 0x26, 0xba, 0x6d, 0x9f, 0x0d, 0x7f, 0xf4, 0x72, + 0x03, 0x52, 0xbd, 0x35, 0x92, 0xbc, 0x62, 0x64, + 0x6e, 0x70, 0xdf, 0x68, 0x24, 0x77, 0x96, 0xcb, + 0xcc, 0xba, 0xfa, 0xc4, 0x03, 0x3b, 0x28, 0xd7, + 0x68, 0x0f, 0x06, 0xa3, 0x16, 0xf5, 0x55, 0x97, + 0x20, 0xb5, 0x9e, 0xda, 0xc9, 0xd1, 0xdc, 0x37, + 0x0b, 0xdc, 0xf2, 0xea, 0x03, 0x5d, 0x04, 0x05, + 0x5b, 0xe5, 0x8a, 0xd6, 0x2d, 0x1a, 0x4e, 0xbe, + 0xf5, 0xf1, 0x79, 0x6b, 0xde, 0xf3, 0x4b, 0x6b, + 0x4d, 0x3d, 0xba, 0x6a, 0xaa, 0x12, 0x41, 0xa1, + 0xd0, 0x77, 0x96, 0x31, 0x2e, 0x8c, 0xc6, 0xce, + 0xea, 0xda, 0xe0, 0xf3, 0xad, 0xa1, 0x99, 0xee, + 0xe6, 0xe9, 0x42, 0x48, 0xae, 0xa5, 0xbe, 0x3c, + 0x87, 0x34, 0x7c, 0x61, 0xfc, 0xdb, 0x59, 0x51, + 0x50, 0xd7, 0x3b, 0x4f, 0x75, 0x5b, 0xb9, 0x5d, + 0x22, 0x66, 0x7c, 0x54, 0xec, 0xe4, 0xdd, 0x6a, + 0xed, 0xfb, 0x67, 0xfc, 0x39, 0xb8, 0x31, 0x26, + 0x25, 0xea, 0xea, 0xd6, 0xe2, 0xce, 0x5e, 0x6e, + 0xe1, 0x98, 0x1d, 0x4a, 0x83, 0xac, 0x11, 0xd8, + 0x5b, 0xdd, 0x94, 0x66, 0x4d, 0x8c, 0x4a, 0x61, + 0x25, 0xa6, 0x98, 0x43, 0x48, 0x24, 0xe2, 0xd4, + 0x9b, 0xeb, 0xce, 0x38, 0xf8, 0x2b, 0xdb, 0xbc, + 0xcc, 0xc4, 0x56, 0x75, 0x8f, 0x17, 0x36, 0x24, + 0xc4, 0xbb, 0x9d, 0x90, 0xe6, 0xad, 0x8f, 0x9c, + 0xe6, 0xda, 0x74, 0x54, 0xb0, 0x3a, 0xae, 0xe0, + 0xa5, 0x38, 0x17, 0x8b, 0x5c, 0x9f, 0x31, 0xbb, + 0x8f, 0x9d, 0x8e, 0x30, 0x18, 0xed, 0x45, 0xe4, + 0x36, 0xbe, 0x6e, 0x82, 0x9b, 0xeb, 0xa4, 0xce, + 0xb1, 0xc3, 0xde, 0xb7, 0x63, 0x2e, 0xba, 0x6c, + 0x9e, 0x70, 0xe4, 0xc4, 0xb3, 0x89, 0x66, 0xe6, + 0xde, 0x6b, 0x59, 0x8c, 0x33, 0xb3, 0x03, 0xc6, + 0x9a, 0x6b, 0xa8, 0xdf, 0xaa, 0xd5, 0x89, 0x4e, + 0xbc, 0x35, 0x8e, 0x4a, 0x69, 0xa7, 0x8f, 0x3d, + 0x1d, 0x91, 0xd8, 0x5f, 0xcb, 0x18, 0x92, 0x38, + 0x1c, 0xe6, 0x3b, 0x48, 0x22, 0x9a, 0xb8, 0x56, + 0xa9, 0xa2, 0x9a, 0x07, 0x98, 0xe6, 0x61, 0x8d, + 0xe0, 0x56, 0x87, 0x79, 0x5b, 0x32, 0x97, 0xb5, + 0x99, 0x4d, 0xbb, 0xdd, 0xa1, 0xa1, 0x95, 0x3d, + 0xaa, 0x95, 0x0d, 0xb5, 0x31, 0x06, 0xdc, 0xc1, + 0x2f, 0xac, 0x61, 0x69, 0xfe, 0xcf, 0xff, 0x00, + 0x2b, 0x95, 0x33, 0x4c, 0xdf, 0x6c, 0xf8, 0x6a, + 0xd3, 0x9b, 0xca, 0x56, 0x98, 0x7b, 0x91, 0x33, + 0x33, 0x1b, 0x75, 0x8f, 0xda, 0x70, 0x43, 0x65, + 0x79, 0x3b, 0x31, 0xc3, 0x13, 0xa4, 0x65, 0x68, + 0x1c, 0x29, 0xb9, 0xdd, 0x5e, 0x27, 0x82, 0xe2, + 0xdc, 0xb4, 0x4e, 0xc3, 0x19, 0x7e, 0x96, 0x87, + 0x2b, 0x4e, 0x4e, 0xd6, 0xc3, 0x96, 0x5b, 0x31, + 0xda, 0x1d, 0x26, 0x9e, 0xeb, 0xaa, 0xe1, 0xde, + 0x51, 0x3b, 0x56, 0x69, 0x75, 0x05, 0x75, 0x60, + 0x71, 0x3c, 0x21, 0x2b, 0x9a, 0x6d, 0x7d, 0xbe, + 0x11, 0xcd, 0x6c, 0x9e, 0x56, 0xb4, 0xc1, 0xbf, + 0x59, 0x99, 0x43, 0xe2, 0x4c, 0x4b, 0xb2, 0xdb, + 0x24, 0xcc, 0xae, 0x63, 0xe7, 0x59, 0x1e, 0x16, + 0x9d, 0x5c, 0xe1, 0xc3, 0x51, 0xd8, 0xd0, 0x7b, + 0xeb, 0x5d, 0xde, 0x57, 0x7f, 0x66, 0xce, 0x72, + 0x66, 0x7e, 0xaf, 0x75, 0xed, 0x38, 0x80, 0x3d, + 0xe5, 0xd3, 0xb9, 0x5d, 0x74, 0xd6, 0x19, 0xa7, + 0x0e, 0x48, 0x8d, 0x66, 0xb3, 0xa6, 0x9a, 0xea, + 0xe7, 0xc4, 0x98, 0x96, 0xeb, 0x4c, 0xba, 0xf6, + 0xf2, 0x33, 0x2d, 0xbb, 0x31, 0xb0, 0x1a, 0x12, + 0x48, 0xdc, 0xd6, 0xb7, 0x5b, 0x64, 0x79, 0x9c, + 0xec, 0xe7, 0x1a, 0xc0, 0xd0, 0x09, 0xa6, 0x33, + 0x42, 0x7b, 0x3a, 0x92, 0x72, 0x52, 0x26, 0x62, + 0x67, 0xc0, 0xae, 0x1c, 0x96, 0xfb, 0x6b, 0x33, + 0xcb, 0xde, 0xe3, 0xc4, 0x98, 0x96, 0x6e, 0x20, + 0x9e, 0xd6, 0x53, 0x04, 0xed, 0xc3, 0x23, 0x74, + 0xd3, 0x7c, 0x6f, 0xae, 0xab, 0x6c, 0x97, 0x32, + 0xb9, 0x60, 0x96, 0x38, 0xc3, 0x58, 0xe1, 0xe2, + 0x97, 0x9c, 0x35, 0x1d, 0xd0, 0x52, 0x6f, 0x58, + 0x8a, 0xcc, 0xcf, 0x0b, 0x22, 0xb8, 0xef, 0x69, + 0xd2, 0xb1, 0x33, 0x31, 0xe3, 0xee, 0x72, 0x62, + 0x4c, 0x4b, 0xa2, 0xf3, 0x2a, 0xbf, 0xb3, 0x68, + 0x7c, 0xec, 0xa3, 0x35, 0x63, 0x69, 0xc4, 0xd1, + 0xdb, 0xdd, 0x5a, 0xad, 0x6d, 0x6e, 0xaf, 0x25, + 0xe6, 0xad, 0xd9, 0x8d, 0xc3, 0x49, 0x3a, 0x9a, + 0x07, 0x64, 0xa4, 0x5e, 0xb3, 0x1a, 0xeb, 0xc0, + 0x9c, 0x76, 0x89, 0xdb, 0x35, 0x9d, 0xfa, 0xf8, + 0x68, 0xf1, 0x89, 0x31, 0x2e, 0xc9, 0x72, 0x3c, + 0xce, 0x37, 0xb1, 0x86, 0x30, 0xe2, 0xfd, 0x00, + 0xb0, 0x82, 0x35, 0x56, 0x87, 0x52, 0xe6, 0xbb, + 0xb3, 0xb8, 0xb3, 0x73, 0x59, 0x70, 0xcc, 0x05, + 0xe2, 0xa0, 0x54, 0x1d, 0x09, 0x17, 0xac, 0xf8, + 0x4a, 0x6d, 0x86, 0xf5, 0xd7, 0x5a, 0xce, 0x91, + 0x3a, 0x6a, 0xf1, 0x89, 0x31, 0x2e, 0xbb, 0x6c, + 0x97, 0x31, 0xb9, 0x8c, 0x49, 0x1b, 0x03, 0x5a, + 0xed, 0x46, 0x43, 0x86, 0xa3, 0xb4, 0xb5, 0xde, + 0x65, 0xb7, 0xb6, 0x54, 0x37, 0x0c, 0xa3, 0x0e, + 0x8c, 0x6d, 0x35, 0x09, 0xdc, 0xae, 0xba, 0x6b, + 0xc4, 0x9c, 0x37, 0x8a, 0xee, 0xdb, 0x3b, 0x7e, + 0x0d, 0x18, 0x93, 0x12, 0xdf, 0x0e, 0x59, 0x7f, + 0x71, 0x07, 0xb4, 0x44, 0xcc, 0x51, 0x50, 0x9a, + 0xd4, 0x6e, 0x2d, 0xf0, 0xe4, 0x39, 0x9c, 0xb1, + 0x09, 0x04, 0x61, 0xba, 0x2a, 0x1a, 0xe7, 0x51, + 0xdc, 0x14, 0xf0, 0xa4, 0xde, 0xb1, 0xe3, 0x30, + 0x57, 0x0d, 0xed, 0xa4, 0xd6, 0xb3, 0x3a, 0xf1, + 0x8e, 0x0e, 0x1c, 0x49, 0x89, 0x74, 0xdb, 0xe5, + 0x59, 0x85, 0xc4, 0x8f, 0x89, 0x91, 0x96, 0xba, + 0x33, 0x85, 0xf8, 0xce, 0x1a, 0x1e, 0xe2, 0xd7, + 0x7b, 0x97, 0xde, 0x58, 0xb9, 0xa2, 0xe1, 0x94, + 0x0e, 0xf2, 0x5e, 0x3c, 0x66, 0x9e, 0x1d, 0xd4, + 0xdf, 0x5d, 0x74, 0xd7, 0xe0, 0x4e, 0x2b, 0xc4, + 0x6e, 0x9a, 0xcc, 0x57, 0xdb, 0x2d, 0x58, 0x93, + 0x12, 0xdd, 0x69, 0x97, 0xde, 0x5e, 0xd4, 0xdb, + 0xb2, 0xac, 0x1f, 0x9e, 0xef, 0x15, 0xb5, 0xed, + 0xad, 0xb7, 0x39, 0x36, 0x65, 0x6b, 0x19, 0x95, + 0xf1, 0x87, 0x35, 0xba, 0x49, 0x61, 0xd4, 0x13, + 0x7d, 0x75, 0xd3, 0x5f, 0xfe, 0x24, 0x62, 0xbc, + 0xd7, 0x74, 0x56, 0x7e, 0x5e, 0xc7, 0x26, 0x24, + 0xc4, 0xb6, 0xda, 0x58, 0xdd, 0x5e, 0xe2, 0xf6, + 0x66, 0x73, 0x81, 0x9a, 0x0e, 0x90, 0x35, 0xad, + 0xf0, 0x64, 0xb9, 0x94, 0xe5, 0xc0, 0x46, 0x1b, + 0x80, 0xe1, 0x25, 0xe7, 0x08, 0xa8, 0xde, 0xa0, + 0x4b, 0x5e, 0xb1, 0x33, 0x13, 0x3e, 0x05, 0x71, + 0x64, 0xb6, 0x93, 0x5a, 0xcc, 0xea, 0xe3, 0xc4, + 0xb6, 0x08, 0xe6, 0x2d, 0xc4, 0x18, 0xe2, 0xda, + 0x54, 0x3b, 0x09, 0xa7, 0x0d, 0x17, 0xa9, 0xb2, + 0xfb, 0xd8, 0x2e, 0x19, 0x6d, 0x24, 0x74, 0x96, + 0x4d, 0x11, 0x8a, 0x8a, 0x3b, 0xba, 0xad, 0x56, + 0xb6, 0xd2, 0xb3, 0x26, 0x6d, 0xb3, 0x9b, 0xfa, + 0xd1, 0x11, 0x69, 0x6d, 0x77, 0x74, 0xee, 0xaa, + 0x5f, 0x35, 0x62, 0x2b, 0x31, 0xc7, 0x57, 0x5c, + 0x3e, 0x5a, 0xd9, 0x2d, 0x68, 0x9f, 0xa7, 0x6c, + 0x7b, 0x63, 0xda, 0xa7, 0xe2, 0x4c, 0x4b, 0x37, + 0x16, 0xf3, 0xda, 0xc8, 0x61, 0x9d, 0xb8, 0x5e, + 0xd0, 0x09, 0x15, 0xa8, 0xa2, 0xd7, 0x89, 0x75, + 0xac, 0xeb, 0x1a, 0xb3, 0xcd, 0x27, 0x59, 0x89, + 0xe1, 0x31, 0x29, 0x8d, 0x9e, 0xba, 0xe6, 0xef, + 0xc4, 0x27, 0x4b, 0x26, 0x14, 0xee, 0x80, 0x4a, + 0xe8, 0xbc, 0x87, 0x99, 0xb9, 0x91, 0x83, 0x55, + 0x6a, 0x3b, 0x47, 0x52, 0x89, 0xca, 0x9d, 0xfe, + 0x65, 0x6d, 0xf6, 0x8d, 0xf0, 0xa9, 0xcc, 0xdb, + 0xdf, 0x5d, 0xe6, 0xb7, 0xc0, 0xb2, 0x79, 0x88, + 0x88, 0xb7, 0x0e, 0x4f, 0x57, 0xc8, 0x4c, 0xce, + 0x2b, 0x44, 0xfb, 0x25, 0xc6, 0xb2, 0xdf, 0x28, + 0x76, 0xc7, 0x85, 0x61, 0x1b, 0xe5, 0x0f, 0xcb, + 0x75, 0x71, 0x6b, 0xf0, 0xf0, 0x77, 0xe7, 0x59, + 0xc4, 0x36, 0x13, 0xc5, 0x05, 0xc4, 0x02, 0x78, + 0x27, 0x65, 0x5f, 0xa8, 0x9a, 0xd6, 0x9e, 0x4b, + 0x85, 0x0a, 0x8b, 0x30, 0x6c, 0x55, 0xd7, 0x8d, + 0x57, 0x5b, 0x9d, 0x64, 0x0c, 0x6c, 0xef, 0x69, + 0x09, 0xb6, 0x7e, 0xf1, 0x6d, 0xf6, 0x47, 0xc2, + 0xab, 0xa5, 0x4c, 0x4c, 0xc7, 0x84, 0xab, 0x6a, + 0x45, 0xbc, 0x62, 0x3e, 0x4b, 0x07, 0x57, 0x6c, + 0x5f, 0x4b, 0x77, 0x29, 0xde, 0x82, 0xc7, 0x57, + 0x6c, 0x5f, 0x4b, 0x77, 0x29, 0xde, 0x82, 0x80, + 0x59, 0x6b, 0x1e, 0xf7, 0x61, 0x63, 0x4b, 0x9c, + 0x75, 0x35, 0xa0, 0x93, 0xc0, 0x14, 0xef, 0xb7, + 0x34, 0x76, 0x71, 0xf4, 0xa7, 0xba, 0xbb, 0x62, + 0xfa, 0x5b, 0xb9, 0x4e, 0xf4, 0x13, 0xab, 0xb6, + 0x2f, 0xa5, 0xbb, 0x94, 0xef, 0x41, 0x41, 0x49, + 0x14, 0xb1, 0x1a, 0x48, 0xc7, 0x30, 0x9d, 0x41, + 0xc0, 0xb4, 0xf7, 0xd7, 0x94, 0xdf, 0x6e, 0x67, + 0x67, 0x1f, 0x4a, 0x7f, 0xab, 0xb6, 0x2f, 0xa5, + 0xbb, 0x94, 0xef, 0x41, 0x3a, 0xbb, 0x62, 0xfa, + 0x5b, 0xb9, 0x4e, 0xf4, 0x14, 0x06, 0x84, 0x4d, + 0xf6, 0xe6, 0x76, 0x71, 0xf4, 0xa7, 0xfa, 0xbb, + 0x62, 0xfa, 0x5b, 0xb9, 0x4e, 0xf4, 0x13, 0xab, + 0xb6, 0x2f, 0xa5, 0xbb, 0x94, 0xef, 0x41, 0x41, + 0xc7, 0x04, 0xd2, 0xe9, 0x8a, 0x37, 0xc8, 0x3f, + 0xa8, 0xd2, 0xef, 0x02, 0xf0, 0x41, 0x04, 0x82, + 0x28, 0x46, 0xb0, 0x74, 0x10, 0x9b, 0xed, 0xcc, + 0xec, 0xe3, 0xe9, 0x4f, 0xf5, 0x76, 0xc5, 0xf4, + 0xb7, 0x72, 0x9d, 0xe8, 0x27, 0x57, 0x6c, 0x5f, + 0x4b, 0x77, 0x29, 0xde, 0x82, 0x83, 0x8e, 0x19, + 0xa5, 0xaf, 0x35, 0x1b, 0xa4, 0xa6, 0xbc, 0x2d, + 0x2e, 0xf0, 0x2f, 0x2e, 0x6b, 0x9a, 0xe2, 0xd7, + 0x02, 0xd7, 0x0d, 0x60, 0x8a, 0x10, 0x9b, 0xed, + 0xcc, 0xec, 0xe3, 0xe9, 0x4f, 0x75, 0x76, 0xc5, + 0xf4, 0xb7, 0x72, 0x9d, 0xe8, 0x27, 0x57, 0x6c, + 0x5f, 0x4b, 0x77, 0x29, 0xde, 0x82, 0x80, 0x5e, + 0xd9, 0x0c, 0xb2, 0x35, 0xcf, 0x63, 0x1c, 0xe6, + 0x46, 0x2a, 0xf7, 0x00, 0x48, 0x68, 0xfe, 0xb1, + 0x1a, 0x93, 0x7d, 0xb9, 0x9d, 0x9c, 0x7d, 0x29, + 0xce, 0xae, 0xd8, 0xbe, 0x96, 0xee, 0x53, 0xbd, + 0x04, 0xea, 0xed, 0x8b, 0xe9, 0x6e, 0xe5, 0x3b, + 0xd0, 0x50, 0x1a, 0x02, 0xf6, 0xd8, 0x26, 0x7c, + 0x6e, 0x95, 0x8c, 0x2e, 0x8d, 0x9e, 0x5b, 0x80, + 0x24, 0x0e, 0xd9, 0xdc, 0x4d, 0xf6, 0xe6, 0x76, + 0x71, 0xf4, 0xa7, 0x3a, 0xbb, 0x62, 0xfa, 0x5b, + 0xb9, 0x4e, 0xf4, 0x13, 0xab, 0xb6, 0x2f, 0xa5, + 0xbb, 0x94, 0xef, 0x41, 0x40, 0x61, 0x76, 0x1c, + 0x54, 0x34, 0xdf, 0xdc, 0x4a, 0x26, 0xfb, 0x73, + 0x3b, 0x38, 0xfa, 0x53, 0xfd, 0x5d, 0xb1, 0x7d, + 0x2d, 0xdc, 0xa7, 0x7a, 0x09, 0xd5, 0xdb, 0x17, + 0xd2, 0xdd, 0xca, 0x77, 0xa0, 0xa2, 0x7a, 0xb7, + 0x31, 0xe8, 0xd3, 0x7e, 0xed, 0xdc, 0x4b, 0x0e, + 0xcb, 0xf3, 0x06, 0xb4, 0xb9, 0xd6, 0xd2, 0x80, + 0xd1, 0x52, 0x4b, 0x08, 0x00, 0x0e, 0xe2, 0x6f, + 0xb7, 0x33, 0xb3, 0x8f, 0xa5, 0x2f, 0xd5, 0xdb, + 0x17, 0xd2, 0xdd, 0xca, 0x77, 0xa0, 0x9d, 0x5d, + 0xb1, 0x7d, 0x2d, 0xdc, 0xa7, 0x7a, 0x0a, 0x0e, + 0x58, 0x26, 0x88, 0x34, 0xc8, 0xc7, 0x30, 0x3c, + 0x55, 0xa5, 0xc0, 0x8a, 0x8e, 0xc5, 0x75, 0xaf, + 0x09, 0xbe, 0xdc, 0xce, 0xce, 0x3e, 0x94, 0xff, + 0x00, 0x57, 0x6c, 0x5f, 0x4b, 0x77, 0x29, 0xde, + 0x82, 0x75, 0x76, 0xc5, 0xf4, 0xb7, 0x72, 0x9d, + 0xe8, 0x28, 0x04, 0x4d, 0xf6, 0xe6, 0x76, 0x71, + 0xf4, 0xa7, 0xfa, 0xbb, 0x62, 0xfa, 0x5b, 0xb9, + 0x4e, 0xf4, 0x13, 0xab, 0xb6, 0x2f, 0xa5, 0xbb, + 0x94, 0xef, 0x41, 0x40, 0x22, 0x6f, 0xb7, 0x33, + 0xb3, 0x8f, 0xa5, 0x3f, 0xd5, 0xdb, 0x17, 0xd2, + 0xdd, 0xca, 0x77, 0xa0, 0x9d, 0x5d, 0xb1, 0x7d, + 0x2d, 0xdc, 0xa7, 0x7a, 0x0a, 0x01, 0x6c, 0x86, + 0xde, 0x6b, 0x87, 0xf3, 0x70, 0x37, 0x9c, 0x7d, + 0x0b, 0xa8, 0xdd, 0xc0, 0x34, 0xa6, 0xfb, 0x73, + 0x3b, 0x38, 0xfa, 0x53, 0x7d, 0x5d, 0xb1, 0x7d, + 0x2d, 0xdc, 0xa7, 0x7a, 0x09, 0xd5, 0xdb, 0x17, + 0xd2, 0xdd, 0xca, 0x77, 0xa0, 0xa2, 0x23, 0xb0, + 0xbe, 0x91, 0x81, 0xec, 0xb7, 0x91, 0xed, 0x3a, + 0x88, 0x61, 0x23, 0xb8, 0x40, 0x5a, 0xa5, 0x82, + 0x78, 0x4e, 0x19, 0x63, 0x74, 0x64, 0xee, 0x3d, + 0xa5, 0xbe, 0x14, 0xdf, 0x6e, 0x67, 0x67, 0x1f, + 0x4a, 0x73, 0xab, 0xb6, 0x2f, 0xa5, 0xbb, 0x94, + 0xef, 0x41, 0x3a, 0xbb, 0x62, 0xfa, 0x5b, 0xb9, + 0x4e, 0xf4, 0x14, 0x1c, 0xb0, 0x4d, 0x01, 0x02, + 0x68, 0xdd, 0x19, 0x22, 0xa0, 0x3c, 0x16, 0x9a, + 0x77, 0x56, 0x7d, 0x9a, 0xe3, 0x99, 0xe7, 0xf9, + 0xa7, 0x73, 0x3a, 0xb9, 0xdc, 0x27, 0x0e, 0xf7, + 0x95, 0xa9, 0x37, 0xdb, 0x99, 0xd9, 0xc7, 0xd2, + 0x9b, 0xea, 0xed, 0x8b, 0xe9, 0x6e, 0xe5, 0x3b, + 0xd0, 0x4e, 0xae, 0xd8, 0xbe, 0x96, 0xee, 0x53, + 0xbd, 0x05, 0x05, 0x14, 0x13, 0x4d, 0x8b, 0x9a, + 0x8d, 0xd2, 0x60, 0x15, 0x76, 0x10, 0x4d, 0x06, + 0xf9, 0xa2, 0xd8, 0xdb, 0x3b, 0xc7, 0x45, 0xcf, + 0x36, 0x09, 0x0c, 0x60, 0x13, 0x8c, 0x34, 0xe1, + 0xa0, 0xd7, 0xa6, 0x94, 0x4d, 0xf6, 0xe6, 0x76, + 0x71, 0xf4, 0xa6, 0x7a, 0xbb, 0x62, 0xfa, 0x5b, + 0xb9, 0x4e, 0xf4, 0x13, 0xab, 0xb6, 0x2f, 0xa5, + 0xbb, 0x94, 0xef, 0x41, 0x40, 0x76, 0x56, 0xe9, + 0x2d, 0x2e, 0xe2, 0x8f, 0x9c, 0x92, 0x09, 0x18, + 0xc3, 0x4f, 0x19, 0xcd, 0x20, 0x69, 0xd5, 0xa4, + 0x84, 0xdf, 0x6e, 0x67, 0x67, 0x1f, 0x4a, 0x67, + 0xab, 0xb6, 0x2f, 0xa5, 0xbb, 0x94, 0xef, 0x41, + 0x3a, 0xbb, 0x62, 0xfa, 0x5b, 0xb9, 0x4e, 0xf4, + 0x14, 0x14, 0x51, 0xc9, 0x2c, 0x8d, 0x8a, 0x26, + 0x97, 0xbd, 0xe7, 0x0b, 0x5a, 0x35, 0x92, 0xbd, + 0x73, 0x13, 0x73, 0xc6, 0x06, 0xb0, 0x99, 0x41, + 0xc3, 0x81, 0xa2, 0xa6, 0xa3, 0x70, 0x51, 0x37, + 0xdb, 0x99, 0xd9, 0xc7, 0xd2, 0x9b, 0xea, 0xed, + 0x8b, 0xe9, 0x6e, 0xe5, 0x3b, 0xd0, 0x4e, 0xae, + 0xd8, 0xbe, 0x96, 0xee, 0x53, 0xbd, 0x05, 0x13, + 0x3e, 0x5b, 0x7f, 0x6e, 0xce, 0x72, 0x6b, 0x79, + 0x18, 0xcd, 0xd7, 0x53, 0x57, 0x6e, 0x8b, 0x9c, + 0x34, 0x92, 0x00, 0x18, 0x8e, 0xa6, 0x81, 0xba, + 0x4a, 0x6f, 0xb7, 0x33, 0xb3, 0x8f, 0xa5, 0x3d, + 0xd5, 0xdb, 0x17, 0xd2, 0xdd, 0xca, 0x77, 0xa0, + 0x9d, 0x5d, 0xb1, 0x7d, 0x2d, 0xdc, 0xa7, 0x7a, + 0x0a, 0x2c, 0xe5, 0x59, 0x93, 0x63, 0xe7, 0x4d, + 0xac, 0x98, 0x77, 0x0e, 0x13, 0xab, 0xc2, 0xb9, + 0xa1, 0x86, 0x69, 0xdf, 0x82, 0x16, 0x19, 0x1f, + 0xaf, 0x0b, 0x41, 0x71, 0xa0, 0xed, 0x26, 0xfb, + 0x73, 0x3b, 0x38, 0xfa, 0x53, 0xdd, 0x5d, 0xb1, + 0x7d, 0x2d, 0xdc, 0xa7, 0x7a, 0x09, 0xd5, 0xdb, + 0x15, 0xd2, 0x9f, 0xca, 0x77, 0xa0, 0xa1, 0xdf, + 0x61, 0x7c, 0xc0, 0x5c, 0xfb, 0x69, 0x43, 0x46, + 0xb7, 0x16, 0x3a, 0x83, 0xbc, 0xb9, 0xd3, 0x7d, + 0xb9, 0x9d, 0xac, 0x7d, 0x30, 0xb0, 0x8b, 0x1d, + 0x8b, 0x88, 0xe2, 0xe7, 0x9f, 0x2d, 0x34, 0xe0, + 0xab, 0x8d, 0x78, 0x1a, 0x17, 0x56, 0x5f, 0x9c, + 0xe5, 0x8c, 0xbb, 0x82, 0xc7, 0x2b, 0xb6, 0xe6, + 0xe3, 0x95, 0xd4, 0x74, 0x84, 0x06, 0xf1, 0x92, + 0x7b, 0x6a, 0xa8, 0xbb, 0xb2, 0x3f, 0xe7, 0x16, + 0x9f, 0x69, 0xf2, 0x15, 0x13, 0x6b, 0x4f, 0x8c, + 0xa6, 0x31, 0xd6, 0x3c, 0x22, 0x16, 0x3c, 0xd3, + 0xdf, 0x5f, 0xd8, 0xa5, 0x38, 0x17, 0x2a, 0xea, + 0xcd, 0x3d, 0xf6, 0x4e, 0xe7, 0x81, 0x72, 0xa8, + 0x59, 0xee, 0x0f, 0xdb, 0x47, 0xe7, 0x37, 0xc2, + 0xa6, 0x94, 0x2c, 0x1f, 0xb6, 0x8f, 0xce, 0x6f, + 0x85, 0x4d, 0x20, 0x28, 0xdc, 0xdb, 0xde, 0xac, + 0xfe, 0xd3, 0xe5, 0x0a, 0x49, 0x46, 0xe6, 0xde, + 0xf5, 0x67, 0xf6, 0x9f, 0x28, 0x41, 0x8c, 0xab, + 0xde, 0xaf, 0x3c, 0xf3, 0xf5, 0x8a, 0x93, 0x51, + 0x99, 0x57, 0xbd, 0x5e, 0x79, 0xe7, 0xeb, 0x15, + 0x26, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x35, 0xa8, 0x27, 0x79, 0x47, + 0xb6, 0x54, 0xe8, 0xd6, 0xa0, 0x9d, 0xe5, 0x1e, + 0xd9, 0x41, 0xba, 0xcb, 0xde, 0xe2, 0xf3, 0x94, + 0x7e, 0xd2, 0xba, 0x99, 0xb3, 0xc7, 0xf5, 0x59, + 0xe0, 0x2a, 0x42, 0xcb, 0xde, 0xe1, 0xf3, 0x82, + 0x8d, 0xda, 0x83, 0x4c, 0xda, 0x4f, 0x35, 0x9e, + 0x02, 0xba, 0xe0, 0xfb, 0xd9, 0x7c, 0xf7, 0x1c, + 0x51, 0xfb, 0x48, 0xdc, 0x48, 0x1e, 0x41, 0xa8, + 0xd7, 0xb8, 0x77, 0x88, 0xd3, 0x55, 0xab, 0x12, + 0xf7, 0x08, 0x6b, 0xe6, 0x8d, 0x8e, 0x34, 0x6b, + 0x9e, 0xd6, 0x93, 0xd8, 0x27, 0x4f, 0x79, 0x6a, + 0xdd, 0xa6, 0xb3, 0x2f, 0x32, 0x23, 0x5e, 0x11, + 0xc2, 0x75, 0x5c, 0x72, 0xec, 0xda, 0xc7, 0x31, + 0xb7, 0x11, 0x4e, 0xe6, 0x89, 0x0b, 0x70, 0xc9, + 0x13, 0xf7, 0x7b, 0x21, 0x73, 0x5f, 0xec, 0xbc, + 0x2f, 0x18, 0xac, 0x9f, 0xcd, 0xbb, 0x58, 0x89, + 0xda, 0x58, 0x7b, 0x47, 0x71, 0x72, 0x67, 0x3b, + 0x3f, 0x05, 0x8d, 0x93, 0xae, 0x6d, 0xdf, 0x24, + 0x8f, 0x69, 0x1a, 0x0e, 0x9a, 0x02, 0x7b, 0x0b, + 0x7e, 0xc9, 0xdd, 0xdd, 0xcd, 0xcf, 0xc5, 0x23, + 0x8b, 0xe1, 0x60, 0xab, 0x4b, 0xb4, 0xd1, 0xdf, + 0x34, 0x15, 0x9e, 0x78, 0x44, 0xda, 0x93, 0xc2, + 0x3c, 0x62, 0x5e, 0x86, 0xbb, 0xaf, 0x5c, 0x39, + 0xa9, 0xac, 0xcd, 0x7e, 0x9b, 0x55, 0xcb, 0x90, + 0x3e, 0x5b, 0x2c, 0xe0, 0xda, 0xce, 0x30, 0xba, + 0x40, 0x58, 0xe0, 0x74, 0xd1, 0xc3, 0x48, 0xe1, + 0x5d, 0x79, 0xb5, 0xa6, 0x3d, 0xa1, 0xb4, 0xa0, + 0xd1, 0x36, 0x12, 0x7b, 0x71, 0x9a, 0x93, 0xe0, + 0x5c, 0x59, 0xfc, 0xe2, 0xdf, 0x3d, 0x64, 0xf1, + 0xf9, 0x51, 0x08, 0xdc, 0xf1, 0xbf, 0x42, 0x7e, + 0x45, 0x66, 0x7d, 0xbb, 0x27, 0xb9, 0xb6, 0xbb, + 0x14, 0x3c, 0xd0, 0x71, 0x1d, 0xa7, 0x0d, 0x09, + 0x6b, 0x69, 0x35, 0xbf, 0x86, 0xe8, 0x31, 0x63, + 0x89, 0xad, 0xb1, 0x6b, 0xae, 0xcb, 0xf0, 0xe7, + 0xb5, 0x17, 0x9f, 0x5c, 0xc6, 0x6f, 0x6c, 0x6d, + 0xa4, 0xfd, 0x9f, 0x38, 0x24, 0x93, 0x87, 0x45, + 0x7b, 0x6b, 0xab, 0x3d, 0x19, 0x99, 0xb7, 0x61, + 0xcb, 0xaa, 0xd7, 0x35, 0xd5, 0x78, 0x6d, 0x31, + 0x11, 0x4d, 0x14, 0xaa, 0xaf, 0xe7, 0x2e, 0x75, + 0xfe, 0x7a, 0xfb, 0x78, 0xc8, 0x04, 0x11, 0x0c, + 0x64, 0xea, 0xa8, 0xfe, 0x95, 0xd9, 0x26, 0x65, + 0x9b, 0xe4, 0x7c, 0xd3, 0x2f, 0x0b, 0x2e, 0x23, + 0x70, 0x38, 0x74, 0x90, 0x40, 0x6e, 0xbf, 0x19, + 0x36, 0x70, 0xa6, 0x9a, 0x4c, 0xf8, 0xe9, 0x28, + 0x8c, 0xd3, 0xae, 0x68, 0xb6, 0xb5, 0xae, 0xed, + 0x37, 0x47, 0xb1, 0x8b, 0xfc, 0xf0, 0x4d, 0x60, + 0xeb, 0x3b, 0x98, 0x24, 0x6d, 0xc1, 0x68, 0x15, + 0x78, 0x00, 0x62, 0x07, 0xca, 0x52, 0x7b, 0x3d, + 0x79, 0x3d, 0xdd, 0x89, 0x92, 0xe1, 0xdc, 0xe3, + 0xf9, 0xc2, 0x01, 0xa0, 0x14, 0x00, 0x0d, 0x1a, + 0x16, 0x33, 0x26, 0xdb, 0xe6, 0x39, 0x31, 0xba, + 0x73, 0x30, 0xbb, 0x9b, 0xe7, 0x18, 0x4f, 0x94, + 0xda, 0x69, 0x5a, 0x76, 0x46, 0x87, 0x2c, 0x75, + 0x35, 0xf3, 0xae, 0xaf, 0x6f, 0x0b, 0x6a, 0xab, + 0x3b, 0x67, 0x1f, 0x08, 0xd2, 0x62, 0x78, 0xff, + 0x00, 0xe8, 0xbd, 0x37, 0xd7, 0x37, 0x1b, 0x6f, + 0xad, 0xab, 0xc3, 0xff, 0x00, 0x57, 0x36, 0x59, + 0x34, 0xf7, 0xf9, 0xd1, 0x37, 0x2f, 0xe7, 0x1b, + 0x6d, 0x8f, 0x9b, 0x69, 0x00, 0x50, 0x93, 0x45, + 0xd1, 0x9c, 0xcd, 0x9d, 0x8b, 0xe6, 0x0b, 0x26, + 0x3f, 0x99, 0x63, 0x41, 0xf1, 0x00, 0x2d, 0x73, + 0x8d, 0x6a, 0x1c, 0xb8, 0xb6, 0x79, 0xe1, 0x99, + 0xe5, 0xc3, 0x1d, 0xa0, 0xb8, 0x3c, 0x01, 0xda, + 0x75, 0x56, 0xdc, 0xff, 0x00, 0x35, 0xcc, 0x6c, + 0xf3, 0x06, 0xc3, 0x6e, 0xfc, 0x2c, 0x7b, 0x1a, + 0x5a, 0xd2, 0xd0, 0x6a, 0x4d, 0x46, 0x8a, 0x85, + 0x33, 0x13, 0x6b, 0xe9, 0x11, 0x1e, 0x0a, 0xd7, + 0xe9, 0xc5, 0x69, 0xb4, 0xdb, 0x74, 0xdf, 0x49, + 0xdb, 0xe3, 0xff, 0x00, 0xc1, 0xd7, 0xb5, 0x11, + 0x07, 0xe5, 0x82, 0x62, 0x28, 0xf8, 0xde, 0xd2, + 0x0e, 0xee, 0x9d, 0x61, 0x75, 0xdd, 0x5c, 0xbe, + 0xd7, 0x27, 0x37, 0x0c, 0xf2, 0xe3, 0x89, 0xb8, + 0x49, 0xd5, 0x53, 0x46, 0xd7, 0xbe, 0xa0, 0xf3, + 0xa6, 0xe7, 0x51, 0x58, 0x56, 0xf6, 0xe1, 0x8f, + 0x85, 0xce, 0x68, 0x2d, 0x6b, 0x68, 0x6a, 0x4e, + 0x85, 0x2d, 0x9b, 0x1f, 0xfe, 0xb9, 0x27, 0xd9, + 0x33, 0xc2, 0xd4, 0xd3, 0x85, 0x35, 0xe3, 0xf5, + 0x4a, 0xf1, 0x6f, 0xaf, 0x2d, 0xa2, 0x26, 0x3e, + 0x88, 0xf1, 0xfc, 0x58, 0xd9, 0xeb, 0xeb, 0x9b, + 0xdb, 0x59, 0x1d, 0x70, 0xec, 0x6f, 0x63, 0xe8, + 0x1d, 0x4a, 0x68, 0x21, 0x72, 0x5b, 0x66, 0xf7, + 0x6f, 0xcf, 0xfd, 0x8c, 0x10, 0x2d, 0x83, 0xdd, + 0x18, 0x8c, 0x01, 0xa9, 0xa0, 0x81, 0x43, 0xdc, + 0x5e, 0xb6, 0x3c, 0xd6, 0xce, 0x7f, 0xb4, 0x1e, + 0x05, 0x1d, 0x62, 0x7f, 0xfb, 0x51, 0xfb, 0x79, + 0x7f, 0xbe, 0x9b, 0x2b, 0xbb, 0x27, 0x0f, 0x08, + 0x53, 0x7d, 0xfb, 0x7e, 0x5f, 0xea, 0x9f, 0xaa, + 0xdc, 0x5d, 0x5b, 0x5c, 0x1a, 0xd9, 0xad, 0xdc, + 0x06, 0x92, 0xd7, 0x02, 0x7b, 0x00, 0x85, 0x01, + 0x89, 0x4f, 0x6d, 0x91, 0xa4, 0xb6, 0xbe, 0x6b, + 0xfc, 0x21, 0x57, 0x31, 0x2e, 0xd8, 0x7f, 0x86, + 0xcb, 0xe6, 0xa3, 0xfd, 0xeb, 0x7c, 0x61, 0x72, + 0x81, 0xc4, 0x6c, 0xe0, 0x70, 0xd4, 0x2d, 0xdc, + 0x6b, 0xdc, 0x72, 0xd1, 0x9e, 0x87, 0x5d, 0xe5, + 0x36, 0x97, 0x0d, 0xd2, 0xf2, 0xe6, 0x70, 0xbc, + 0x50, 0x8e, 0x15, 0xbe, 0xd8, 0xff, 0x00, 0xf5, + 0x7e, 0xd5, 0xbb, 0xfc, 0x0e, 0x5e, 0x72, 0x07, + 0x32, 0xf3, 0x26, 0x64, 0x72, 0x78, 0xdc, 0xcc, + 0x94, 0xe4, 0xbb, 0x18, 0xf0, 0xae, 0x1a, 0xe9, + 0x33, 0x68, 0xf6, 0x5b, 0x46, 0xd9, 0x8d, 0xda, + 0x53, 0xaf, 0x1c, 0x4f, 0xfe, 0xd9, 0x74, 0x5c, + 0xc8, 0x22, 0xbd, 0xcb, 0xad, 0x19, 0xa3, 0xca, + 0x24, 0x76, 0x1a, 0xdc, 0x21, 0x46, 0x6d, 0x53, + 0xda, 0xdb, 0xeb, 0x42, 0xf1, 0x89, 0x81, 0x87, + 0x10, 0x1a, 0xc8, 0xc4, 0x2a, 0x16, 0xdb, 0x8b, + 0x8e, 0x73, 0x6a, 0xed, 0xe3, 0xae, 0x88, 0x5a, + 0x5b, 0x4e, 0xcb, 0x9a, 0x5c, 0x56, 0xbd, 0xa2, + 0x85, 0xb7, 0x19, 0xbd, 0x84, 0x2f, 0xf2, 0x24, + 0x04, 0x3b, 0xb5, 0x88, 0x55, 0x4d, 0x23, 0x4b, + 0x57, 0x5e, 0x5a, 0xab, 0x96, 0x77, 0x63, 0xc9, + 0x11, 0xd7, 0x14, 0xf9, 0x31, 0x77, 0x9e, 0xdc, + 0xde, 0xc4, 0xc8, 0x72, 0xa8, 0xa5, 0x63, 0x81, + 0xf1, 0x9c, 0x1a, 0x29, 0x41, 0xa8, 0x55, 0x49, + 0xca, 0xd9, 0xdd, 0x92, 0x3d, 0xb7, 0x82, 0xb3, + 0x88, 0x1c, 0x64, 0xf3, 0x9a, 0x31, 0x7c, 0x8b, + 0x9b, 0x3d, 0xbf, 0x7e, 0x51, 0x6d, 0x0c, 0x76, + 0x8d, 0x6c, 0x7c, 0xe1, 0xc2, 0x09, 0x1a, 0x00, + 0x1b, 0xc3, 0x7d, 0x6e, 0x86, 0x59, 0xa7, 0xd9, + 0xd7, 0xcb, 0x3e, 0x99, 0x5f, 0x6f, 0x21, 0x71, + 0x3a, 0x35, 0x87, 0x2a, 0xce, 0x9a, 0x56, 0xd1, + 0x1a, 0x46, 0xbc, 0x39, 0xaf, 0x5d, 0x77, 0xde, + 0xb6, 0xb4, 0xcd, 0xb6, 0x78, 0x7e, 0xaf, 0xe0, + 0xd3, 0xb2, 0x87, 0xfc, 0xb9, 0xff, 0x00, 0x6a, + 0x7c, 0x00, 0xae, 0x7b, 0x1c, 0xe6, 0xf2, 0x6c, + 0xf0, 0xdb, 0x39, 0xc3, 0x98, 0x2f, 0x7c, 0x62, + 0x30, 0x35, 0x06, 0x56, 0x86, 0xbd, 0xc5, 0xbf, + 0x64, 0x8d, 0x72, 0xe7, 0xfd, 0xab, 0xbc, 0x0a, + 0x27, 0x29, 0x3f, 0xfd, 0x94, 0x0f, 0xf1, 0xa5, + 0xfe, 0xfa, 0xbe, 0xd8, 0x99, 0xcb, 0xee, 0x8d, + 0x5c, 0xb7, 0xda, 0x29, 0xe5, 0xf4, 0x9d, 0x37, + 0x4f, 0x1d, 0x3e, 0x2e, 0xdd, 0xa9, 0x31, 0xb2, + 0xf6, 0xd1, 0xef, 0x15, 0x18, 0x6a, 0xfd, 0xfc, + 0x21, 0xc0, 0xa5, 0xde, 0x79, 0x71, 0x7b, 0x0c, + 0x71, 0x65, 0x51, 0xca, 0xd2, 0x08, 0xc6, 0x5a, + 0xdd, 0xca, 0x68, 0x00, 0xea, 0x0b, 0x66, 0xd1, + 0x42, 0xdb, 0x8c, 0xd7, 0x2f, 0x81, 0xde, 0x4c, + 0x9a, 0x1d, 0xda, 0xc4, 0x16, 0xdc, 0xf7, 0x30, + 0x93, 0x29, 0xb6, 0x8a, 0x3b, 0x36, 0x36, 0x3c, + 0x44, 0xb4, 0x38, 0x8d, 0x0d, 0x00, 0x6f, 0x28, + 0x89, 0x8d, 0x31, 0xfb, 0x67, 0x49, 0xf1, 0xf0, + 0x32, 0x45, 0xab, 0x39, 0xef, 0xac, 0xd6, 0x91, + 0xa6, 0xbb, 0x7e, 0xef, 0xc1, 0xd7, 0x2b, 0x67, + 0x76, 0x45, 0x20, 0xbd, 0xd3, 0x38, 0x81, 0xc6, + 0x41, 0xfd, 0x60, 0x09, 0xae, 0x85, 0xcb, 0xb2, + 0xd1, 0x35, 0xb6, 0x0f, 0x9b, 0xf3, 0xa4, 0x79, + 0x1d, 0xc6, 0xff, 0x00, 0xf2, 0xb7, 0x47, 0x2c, + 0xf2, 0xec, 0xe3, 0xa4, 0x9c, 0x93, 0x2c, 0x96, + 0xef, 0x73, 0x9c, 0x45, 0x0e, 0x90, 0xed, 0xce, + 0xd2, 0xd5, 0xb2, 0x6f, 0x0f, 0xca, 0x8b, 0x35, + 0xb9, 0xb2, 0x3a, 0xbd, 0x8a, 0xaa, 0xc6, 0xbb, + 0x2d, 0xfb, 0x4e, 0xbc, 0x3b, 0xd8, 0xe7, 0x8c, + 0xff, 0x00, 0xb7, 0x3c, 0x7e, 0x3a, 0x69, 0xab, + 0x9f, 0x2b, 0xce, 0xae, 0xee, 0x73, 0x77, 0x41, + 0x33, 0x81, 0x85, 0xe5, 0xe2, 0x36, 0x53, 0xc9, + 0xa6, 0xad, 0x3d, 0xc5, 0x9c, 0xfa, 0x21, 0x3e, + 0x75, 0x63, 0x0b, 0x86, 0x87, 0x8a, 0x11, 0xd8, + 0x0e, 0xaa, 0xe2, 0xc9, 0x2c, 0xee, 0x19, 0x9f, + 0x51, 0xcc, 0x73, 0x5b, 0x01, 0x91, 0xce, 0x71, + 0x04, 0x0d, 0x35, 0x03, 0x4f, 0x75, 0x77, 0xe7, + 0x0f, 0x6b, 0x36, 0x83, 0x2d, 0x2e, 0xd0, 0x29, + 0x4e, 0x17, 0x51, 0x5f, 0x84, 0x5e, 0x36, 0xf4, + 0xb9, 0x6b, 0x92, 0x70, 0xda, 0x6f, 0xac, 0x4f, + 0x73, 0xdb, 0xc9, 0xd5, 0x9e, 0x3b, 0x32, 0x64, + 0x11, 0x47, 0x97, 0x35, 0xc0, 0x92, 0x71, 0xba, + 0x30, 0x2a, 0xd0, 0x06, 0x85, 0x99, 0x19, 0x35, + 0xd6, 0x44, 0x45, 0xdb, 0x08, 0x9f, 0x9a, 0x24, + 0x87, 0x6b, 0xc4, 0xd0, 0x68, 0x56, 0x9d, 0xa5, + 0xbf, 0xbc, 0xb1, 0x8a, 0x09, 0x2d, 0x9d, 0x80, + 0x39, 0xce, 0x12, 0x1a, 0x03, 0xb9, 0x56, 0xeb, + 0xd4, 0xb8, 0x8c, 0x99, 0xfc, 0xb9, 0x61, 0xbc, + 0x7d, 0xc3, 0x1b, 0x03, 0xe3, 0x2f, 0x73, 0x4b, + 0x40, 0x76, 0x1a, 0x76, 0x15, 0x6b, 0x13, 0xa5, + 0x67, 0x87, 0x8c, 0xfc, 0x5d, 0x2f, 0x68, 0x8b, + 0xe4, 0xaf, 0xd7, 0x3c, 0x23, 0x87, 0x0d, 0xbe, + 0x1e, 0xc4, 0x96, 0xcf, 0x1f, 0xf2, 0x78, 0xdd, + 0x4a, 0x8f, 0x18, 0xd3, 0xba, 0xb8, 0xf2, 0x1c, + 0xe2, 0xf2, 0xf6, 0xf6, 0x58, 0xe6, 0x70, 0x74, + 0x65, 0xa5, 0xec, 0x68, 0x00, 0x61, 0xa1, 0x14, + 0x1c, 0x05, 0x76, 0x6c, 0xef, 0xf2, 0x46, 0x7f, + 0x6a, 0x8a, 0x17, 0x64, 0x48, 0x39, 0x83, 0xbe, + 0xc4, 0xf8, 0x5a, 0xa6, 0x62, 0x27, 0xb9, 0x33, + 0x1e, 0xf5, 0x62, 0xd6, 0x8f, 0x4f, 0x11, 0x3a, + 0x6e, 0x88, 0x77, 0x67, 0x79, 0xb5, 0xd5, 0x9e, + 0x65, 0x1c, 0x36, 0xee, 0x0c, 0x60, 0x0d, 0x74, + 0x82, 0x95, 0xc4, 0x5c, 0x69, 0xa4, 0xae, 0x9d, + 0xa8, 0x00, 0xe5, 0xa0, 0xd3, 0x4b, 0x64, 0x6d, + 0x3b, 0xb5, 0x0a, 0x1b, 0x6a, 0x0d, 0x33, 0x91, + 0xe6, 0xc7, 0xe1, 0x53, 0x3b, 0x52, 0x69, 0x95, + 0x1f, 0xb4, 0x6f, 0xca, 0x91, 0xc2, 0x70, 0xcc, + 0x13, 0x69, 0x98, 0xf3, 0x11, 0x33, 0xc2, 0x26, + 0x34, 0x86, 0xf7, 0xc7, 0x3d, 0xae, 0x4a, 0x23, + 0xb2, 0x66, 0x29, 0x84, 0x6d, 0x0c, 0x03, 0x5d, + 0x4d, 0x01, 0x77, 0x72, 0xab, 0x5e, 0x4a, 0xec, + 0xc2, 0x4b, 0x59, 0x23, 0xcc, 0x58, 0xfa, 0xe3, + 0xa3, 0x4c, 0x80, 0x0a, 0xb4, 0x8d, 0x5a, 0x17, + 0xbc, 0xc6, 0xe6, 0x68, 0x72, 0x37, 0x5c, 0xda, + 0x9f, 0x1d, 0xb1, 0xb1, 0xcd, 0x34, 0xae, 0x8a, + 0xb6, 0xba, 0x3b, 0x4a, 0x2b, 0x2c, 0xb9, 0xda, + 0x0c, 0xc2, 0x27, 0x4b, 0x0d, 0xc3, 0x1a, 0xd6, + 0xbb, 0x0d, 0x5c, 0xd0, 0x6b, 0xda, 0xa0, 0x55, + 0x8d, 0x66, 0xb6, 0xf0, 0xfb, 0xb5, 0xd7, 0xda, + 0xbc, 0xda, 0x2b, 0x93, 0x1c, 0x7d, 0x53, 0xad, + 0x3e, 0xda, 0xf8, 0x4b, 0xa7, 0x67, 0x23, 0xe6, + 0xee, 0xb3, 0x08, 0x86, 0x80, 0xc9, 0x28, 0x06, + 0xf0, 0xab, 0xa8, 0x16, 0xa9, 0xf3, 0x9b, 0xb6, + 0xe7, 0xc2, 0xd1, 0x8e, 0x02, 0xdf, 0x9c, 0x64, + 0x4e, 0x65, 0x06, 0x9a, 0xd2, 0xa6, 0xbd, 0xd5, + 0xef, 0x65, 0x9c, 0xf7, 0x4f, 0x7e, 0xe7, 0xb8, + 0x39, 0xe5, 0xfe, 0x3b, 0x86, 0xa2, 0x41, 0x20, + 0xa8, 0xcb, 0x83, 0xff, 0x00, 0xda, 0x4d, 0x3a, + 0x53, 0x3c, 0x2d, 0x57, 0xd3, 0xeb, 0xbc, 0x4f, + 0x1d, 0x2a, 0xe3, 0xba, 0xd5, 0xc3, 0x86, 0x62, + 0x66, 0xba, 0xdf, 0xdb, 0xe2, 0x97, 0xda, 0x99, + 0x1f, 0x04, 0x56, 0xd3, 0xc7, 0xe2, 0xca, 0xc9, + 0x0e, 0x07, 0x6f, 0x68, 0xfe, 0x85, 0xd9, 0x69, + 0x73, 0x34, 0x99, 0x23, 0x2e, 0x9c, 0xea, 0xcc, + 0x61, 0x2e, 0x2f, 0xa6, 0xe8, 0xae, 0x9a, 0x2e, + 0x0d, 0xb1, 0x34, 0xb5, 0x83, 0xed, 0x3e, 0x45, + 0xd3, 0x97, 0xd4, 0xec, 0xd4, 0x74, 0xd7, 0xec, + 0xee, 0xf0, 0x15, 0x5e, 0x1d, 0xba, 0xcf, 0xfa, + 0x9d, 0xb5, 0x9e, 0xfe, 0x4e, 0x3c, 0x36, 0x78, + 0x2a, 0x93, 0xdd, 0xcf, 0x75, 0x27, 0x3d, 0x70, + 0xec, 0x72, 0x90, 0x01, 0x75, 0x29, 0xa0, 0x54, + 0x6a, 0xee, 0xad, 0x78, 0x96, 0xac, 0x5a, 0x13, + 0x12, 0xd5, 0x59, 0xe1, 0x1a, 0x3c, 0xb9, 0xd6, + 0x75, 0x99, 0xe7, 0x3e, 0x3e, 0x2e, 0xfc, 0xa5, + 0xdf, 0xe6, 0x76, 0xbf, 0x6a, 0xdf, 0x0a, 0x9f, + 0xcd, 0x7d, 0xf1, 0xde, 0x6b, 0x7c, 0x0a, 0xbb, + 0x94, 0x1f, 0xf3, 0x4b, 0x5f, 0xb5, 0x6f, 0x85, + 0x58, 0xb3, 0x6f, 0x7d, 0x77, 0x9a, 0xdf, 0x02, + 0xcd, 0xe6, 0x7e, 0xe8, 0xf8, 0x3d, 0x1f, 0x21, + 0xfc, 0x3b, 0xfc, 0x5c, 0x88, 0xdf, 0x28, 0x7e, + 0x5b, 0xa8, 0x8d, 0xf2, 0x87, 0xe5, 0xba, 0xb8, + 0xb6, 0x35, 0x6d, 0x9f, 0xbc, 0x5b, 0x7d, 0x91, + 0xf0, 0xaa, 0xea, 0xb1, 0x6d, 0x9f, 0xbc, 0x5b, + 0x7d, 0x91, 0xf0, 0xaa, 0xea, 0x02, 0x9f, 0xcb, + 0x9f, 0xec, 0x1b, 0x3f, 0x3d, 0xf5, 0xb8, 0x1e, + 0xd4, 0xf9, 0x30, 0x73, 0x94, 0xa9, 0x68, 0xa8, + 0x1c, 0x6a, 0x01, 0x4f, 0x65, 0x4e, 0x16, 0x19, + 0x44, 0xb7, 0xb7, 0x95, 0x96, 0xd6, 0xe1, 0xdc, + 0xdb, 0x2d, 0x34, 0x51, 0xee, 0xf9, 0xd5, 0x3a, + 0xb5, 0x20, 0xd9, 0x05, 0xcc, 0x99, 0xa6, 0x43, + 0x7c, 0x6f, 0xcf, 0x3a, 0xfb, 0x5f, 0x1a, 0x29, + 0x4b, 0x40, 0x3a, 0x05, 0x69, 0x50, 0xa1, 0xe4, + 0xcb, 0xae, 0x62, 0xb1, 0x8e, 0xf8, 0xe0, 0x74, + 0x12, 0x1c, 0x2d, 0x73, 0x49, 0x25, 0xa4, 0x6e, + 0x38, 0x70, 0xa9, 0x9c, 0x71, 0x66, 0x99, 0x3c, + 0xf0, 0x65, 0xb1, 0xfb, 0x17, 0xb3, 0xfe, 0xb2, + 0x5b, 0x60, 0x01, 0x12, 0x0a, 0x7c, 0xed, 0x6b, + 0x46, 0xce, 0x39, 0xb7, 0x6c, 0xb8, 0xca, 0x26, + 0x05, 0xd0, 0xce, 0xde, 0x71, 0x8e, 0x1a, 0x70, + 0xb8, 0x53, 0xf2, 0xed, 0xa0, 0x8e, 0x76, 0x5d, + 0x72, 0xdc, 0xbd, 0xb9, 0x83, 0xc8, 0x64, 0x2f, + 0x34, 0x60, 0x2e, 0xf1, 0xdc, 0x75, 0x68, 0x14, + 0x5c, 0x80, 0x02, 0x68, 0x77, 0x75, 0x91, 0xdc, + 0xd2, 0xa5, 0xf6, 0x92, 0xe6, 0xb7, 0x8c, 0xb1, + 0x8d, 0xa5, 0x90, 0x59, 0x34, 0x31, 0x8d, 0xd5, + 0xa6, 0x83, 0x4a, 0x88, 0xfc, 0xaa, 0x82, 0x7b, + 0x32, 0xce, 0x7d, 0x91, 0xb0, 0x5a, 0x64, 0xf3, + 0x06, 0x41, 0x1b, 0x06, 0x37, 0xb0, 0x0d, 0x2e, + 0xec, 0xd4, 0x2c, 0x67, 0xed, 0x6d, 0xcd, 0xa6, + 0x5d, 0x7c, 0xe6, 0x88, 0xe7, 0xb9, 0x6e, 0x19, + 0x5c, 0x34, 0x6e, 0x0d, 0x3c, 0x2a, 0x3b, 0x2d, + 0x9f, 0x2e, 0x85, 0xee, 0x75, 0xf5, 0xbb, 0xae, + 0x41, 0x23, 0x06, 0x13, 0x40, 0x3b, 0x7a, 0x74, + 0xa9, 0x0d, 0xa1, 0x8d, 0xf7, 0x10, 0xdb, 0xe6, + 0x10, 0xc9, 0x8e, 0xca, 0x46, 0xe0, 0x89, 0x84, + 0x61, 0xe6, 0xfb, 0x14, 0xdd, 0xd4, 0x83, 0x76, + 0x6b, 0x9a, 0xbb, 0x2e, 0x30, 0xd8, 0xe5, 0x52, + 0x31, 0x91, 0x35, 0x80, 0xbe, 0x48, 0xf0, 0xb8, + 0xb9, 0xdd, 0x92, 0xb5, 0xe7, 0x65, 0xb7, 0x99, + 0x35, 0x96, 0x66, 0xf6, 0x86, 0xdc, 0x3d, 0xdc, + 0xdc, 0x84, 0x0a, 0x62, 0xd0, 0xe3, 0x5f, 0xa2, + 0xb8, 0x32, 0xac, 0xa6, 0x5c, 0xc1, 0xee, 0x75, + 0x44, 0x56, 0xcc, 0xd3, 0x2c, 0xc6, 0x81, 0xa0, + 0x6f, 0x0e, 0xca, 0xdd, 0x9d, 0x66, 0x10, 0x5c, + 0x73, 0x36, 0x36, 0x5a, 0x2d, 0x2d, 0x7c, 0x58, + 0xc9, 0xfc, 0xe3, 0xab, 0x12, 0x08, 0xa5, 0x3b, + 0x90, 0x46, 0xf9, 0x72, 0xac, 0xda, 0x28, 0xdb, + 0x8d, 0xef, 0x63, 0x1a, 0xd6, 0x8d, 0xd2, 0x43, + 0xd7, 0x86, 0xec, 0xbc, 0xae, 0x0d, 0x22, 0xfa, + 0xde, 0x84, 0x03, 0x42, 0xea, 0x9e, 0xd6, 0xb5, + 0xb3, 0x22, 0x91, 0xd6, 0xb9, 0x66, 0x6e, 0xf6, + 0x9f, 0x1a, 0x26, 0xe8, 0x2d, 0xd1, 0xa5, 0xa1, + 0xe2, 0xa1, 0x07, 0x3c, 0xfb, 0x3b, 0x7d, 0x15, + 0xbb, 0xe7, 0x0f, 0x8a, 0x6e, 0x6e, 0xa6, 0x48, + 0xe3, 0x75, 0x4b, 0x40, 0xe2, 0x5a, 0xac, 0xc6, + 0x63, 0xd5, 0x57, 0x86, 0x02, 0xcf, 0x64, 0x14, + 0xf6, 0x80, 0xef, 0x28, 0xef, 0x51, 0x74, 0xec, + 0x9c, 0x8e, 0x19, 0xa1, 0x88, 0x92, 0x5b, 0x34, + 0x6e, 0x12, 0x0d, 0xc3, 0x4d, 0x35, 0x5b, 0x6c, + 0x5a, 0x19, 0x91, 0x67, 0x2c, 0x6e, 0x90, 0xd7, + 0x16, 0x8f, 0x02, 0x0e, 0x9b, 0x5c, 0x9e, 0xe0, + 0x6c, 0xf4, 0xd6, 0xb8, 0xe2, 0xe7, 0x25, 0x91, + 0xb2, 0x35, 0xc1, 0xde, 0x20, 0x1e, 0x26, 0x82, + 0xea, 0x68, 0x55, 0xa9, 0xa3, 0x74, 0x33, 0x3e, + 0x22, 0x41, 0x74, 0x6e, 0xa5, 0x41, 0xa8, 0xab, + 0x77, 0x8a, 0x99, 0xb6, 0xd3, 0xb2, 0x97, 0x66, + 0xa7, 0x4d, 0xc3, 0x6b, 0xda, 0xf1, 0x35, 0x28, + 0x34, 0x13, 0xf9, 0x1e, 0x75, 0x9a, 0x5c, 0xe6, + 0x50, 0x5b, 0xcf, 0x39, 0x7c, 0x4e, 0xa8, 0x2c, + 0xc2, 0xd0, 0x34, 0x0d, 0xfc, 0x35, 0x5a, 0x33, + 0x5c, 0xeb, 0x34, 0x6d, 0xdd, 0xdd, 0xa8, 0xb8, + 0x22, 0x1c, 0x6f, 0x66, 0x0c, 0x2d, 0x3e, 0x2e, + 0xaa, 0x57, 0x0d, 0x56, 0xad, 0x9c, 0xfe, 0x73, + 0x6d, 0xfd, 0xaf, 0x02, 0xe7, 0xce, 0x3f, 0x9a, + 0x5d, 0xfd, 0xab, 0xfc, 0x25, 0x07, 0x46, 0x6a, + 0xcc, 0xc9, 0xc6, 0xc9, 0x97, 0x98, 0x0e, 0x38, + 0xc3, 0x6d, 0xf0, 0x6b, 0xc0, 0xea, 0x0a, 0x3b, + 0x46, 0xba, 0xaf, 0x6d, 0xd9, 0x7c, 0xc0, 0x4a, + 0x63, 0x95, 0xf0, 0xc3, 0x4a, 0x0c, 0x4e, 0x7e, + 0x87, 0x13, 0xab, 0x0e, 0xea, 0xea, 0xcf, 0xff, + 0x00, 0x6d, 0x94, 0xd3, 0x41, 0xe6, 0xd9, 0xa7, + 0xfb, 0x4d, 0x5a, 0x76, 0xb6, 0x49, 0x3a, 0xdc, + 0x8c, 0x46, 0x91, 0xb1, 0xa5, 0x83, 0x78, 0xd2, + 0xa8, 0x35, 0x37, 0x67, 0x33, 0x0e, 0x75, 0xf1, + 0xca, 0x59, 0x0b, 0x63, 0x34, 0xe7, 0x64, 0x75, + 0x1a, 0xe2, 0x75, 0x06, 0xae, 0x3c, 0xc7, 0x2e, + 0xb8, 0xcb, 0xa7, 0xe6, 0x6e, 0x00, 0xa9, 0x15, + 0x6b, 0x9a, 0x6a, 0xd2, 0x0e, 0xea, 0x94, 0xda, + 0xf9, 0x1e, 0xeb, 0x9b, 0x66, 0x13, 0x56, 0x88, + 0x03, 0xc0, 0x3a, 0xaa, 0x49, 0xa9, 0xa6, 0xfe, + 0x85, 0xbf, 0x33, 0x8c, 0x4f, 0x26, 0x46, 0xd9, + 0x0d, 0x44, 0x8d, 0x18, 0xab, 0xac, 0x8a, 0xb3, + 0x5a, 0x0e, 0x18, 0x76, 0x6e, 0xf1, 0xf1, 0xb5, + 0xf2, 0x4b, 0x0c, 0x0f, 0x90, 0x56, 0x38, 0xe4, + 0x77, 0x8c, 0xe0, 0x75, 0x68, 0xdc, 0x5c, 0x63, + 0x2c, 0xbc, 0xf6, 0xf1, 0x97, 0xb9, 0xa1, 0xb7, + 0x04, 0xd0, 0xb4, 0x9f, 0x14, 0xd7, 0xfa, 0xdd, + 0xc5, 0x39, 0x9e, 0x65, 0x46, 0xeb, 0x31, 0x7c, + 0xe6, 0xfe, 0xde, 0x07, 0x30, 0x0c, 0x11, 0xc8, + 0xea, 0x39, 0x94, 0x68, 0xec, 0x8d, 0xd5, 0xb6, + 0xe6, 0x4b, 0x79, 0x36, 0x93, 0x2e, 0x92, 0x29, + 0x19, 0x2b, 0xb0, 0x00, 0xe7, 0x30, 0xe2, 0x15, + 0x18, 0xb7, 0x42, 0x08, 0x79, 0x72, 0x0b, 0xd8, + 0x2d, 0x67, 0xb8, 0x98, 0xb2, 0x36, 0xc2, 0x5c, + 0x03, 0x49, 0xa9, 0x76, 0x03, 0x86, 0xad, 0x5e, + 0xb2, 0xa3, 0xec, 0xb9, 0x75, 0xf6, 0x63, 0xa8, + 0xe1, 0x10, 0x43, 0xe7, 0x49, 0xaf, 0x80, 0x2d, + 0x39, 0xec, 0xf2, 0xcb, 0x9a, 0xdc, 0xf3, 0xae, + 0x24, 0x47, 0x23, 0x98, 0xd1, 0x53, 0x40, 0xd6, + 0x9d, 0x00, 0x70, 0x2d, 0xf9, 0x97, 0xfd, 0xae, + 0x53, 0x61, 0x65, 0xa9, 0xd2, 0x07, 0x5d, 0x4c, + 0x3b, 0x2e, 0xf2, 0x50, 0x77, 0x5d, 0x5e, 0xdd, + 0x59, 0xec, 0xf6, 0x58, 0xeb, 0x69, 0x5d, 0x11, + 0x75, 0x5a, 0xf2, 0x37, 0x40, 0x05, 0x66, 0xc2, + 0xea, 0x5c, 0xe3, 0x28, 0xbe, 0x86, 0xfe, 0x92, + 0x3a, 0x06, 0x62, 0x8e, 0x4a, 0x0a, 0x8f, 0x17, + 0x17, 0x0e, 0x85, 0xea, 0x66, 0xe5, 0xa7, 0x67, + 0xf2, 0xee, 0xb0, 0x74, 0x8d, 0x60, 0xfd, 0x99, + 0x8b, 0x49, 0xc5, 0x43, 0x5a, 0xae, 0x19, 0xf3, + 0x5c, 0xbe, 0xda, 0xc2, 0x4b, 0x0c, 0xa5, 0x92, + 0x01, 0x71, 0xfb, 0x59, 0xa4, 0xd7, 0xdc, 0x08, + 0x3d, 0xed, 0x11, 0x37, 0x16, 0x39, 0x65, 0xf6, + 0xb3, 0x2c, 0x38, 0x1e, 0x7b, 0x24, 0x03, 0xc6, + 0xa4, 0xdc, 0xc6, 0xfc, 0x37, 0xec, 0x23, 0x4c, + 0x82, 0xd7, 0xda, 0x0f, 0x62, 0xa7, 0x1f, 0xca, + 0xa3, 0x43, 0x0d, 0xde, 0xcb, 0xc4, 0xc1, 0xe5, + 0x5b, 0xdc, 0x88, 0xf4, 0x6f, 0x3d, 0xdf, 0xa6, + 0xa4, 0xb9, 0xd6, 0xbb, 0x69, 0x24, 0xb2, 0xd4, + 0xc3, 0x6b, 0xec, 0xff, 0x00, 0x47, 0x1f, 0xca, + 0x82, 0x37, 0x20, 0x22, 0xdf, 0x2c, 0xcc, 0xef, + 0x0f, 0xe6, 0xc6, 0x23, 0x1d, 0x9a, 0x82, 0xa5, + 0xf2, 0x69, 0x18, 0x32, 0x6b, 0x1b, 0x79, 0x3c, + 0x9b, 0xae, 0x72, 0x22, 0x7b, 0x3e, 0x3f, 0x12, + 0x87, 0x93, 0xfe, 0xd3, 0x65, 0xf0, 0x1d, 0x0f, + 0xba, 0xb8, 0x76, 0xbd, 0xe6, 0x9a, 0x7f, 0x75, + 0x74, 0x1b, 0x83, 0x6d, 0x91, 0xe5, 0x33, 0xd6, + 0x9c, 0xd5, 0xc5, 0x49, 0xec, 0x55, 0xf5, 0xef, + 0x20, 0x84, 0x86, 0xd1, 0xcf, 0xcc, 0x59, 0x66, + 0x47, 0x8c, 0x66, 0xe6, 0xdc, 0x3b, 0x00, 0xd0, + 0xf8, 0x15, 0xa3, 0x68, 0xa6, 0x6c, 0xb9, 0x35, + 0xc3, 0x58, 0x3c, 0x58, 0x67, 0x6c, 0x43, 0xfb, + 0x38, 0x6b, 0xdf, 0x5a, 0x19, 0x64, 0x23, 0xda, + 0x99, 0xae, 0x48, 0xfd, 0x4c, 0x71, 0x1b, 0xaa, + 0xee, 0x78, 0xc2, 0x9e, 0x1a, 0xae, 0x59, 0x65, + 0x74, 0xfb, 0x2f, 0x71, 0x31, 0x35, 0x74, 0x97, + 0x65, 0xc4, 0xf6, 0x4b, 0x82, 0x0e, 0x4d, 0x9e, + 0x6b, 0x62, 0x9e, 0x6b, 0xf9, 0x07, 0x89, 0x65, + 0x0b, 0x9e, 0x2b, 0xba, 0xe3, 0xe4, 0xae, 0xbc, + 0xad, 0xe6, 0xcb, 0x26, 0xbb, 0xcd, 0xb4, 0x1b, + 0x99, 0x1e, 0x63, 0x8d, 0xe7, 0x4d, 0x09, 0x3a, + 0x48, 0xee, 0x95, 0xca, 0xef, 0xfb, 0x5d, 0x9e, + 0x03, 0x53, 0xf3, 0x19, 0x89, 0x27, 0x77, 0x9b, + 0x8f, 0xfa, 0x57, 0x43, 0xff, 0x00, 0xd1, 0xec, + 0x03, 0x5f, 0x3e, 0x31, 0x76, 0xf1, 0x20, 0xf1, + 0x93, 0xe7, 0xd3, 0xb6, 0xef, 0x06, 0x61, 0x39, + 0x92, 0xd2, 0x56, 0x91, 0x27, 0x3b, 0xe3, 0x00, + 0x69, 0x50, 0x45, 0x02, 0xdb, 0x91, 0xdb, 0xda, + 0xb2, 0xef, 0x30, 0xbf, 0x65, 0x24, 0x82, 0xc8, + 0x38, 0xc3, 0xbc, 0x75, 0xe0, 0x3a, 0x7f, 0xaa, + 0x14, 0x03, 0x18, 0xf7, 0x38, 0x35, 0x8d, 0x2e, + 0x73, 0xb5, 0x34, 0x69, 0x25, 0x4f, 0x64, 0xa1, + 0xcd, 0xc9, 0x73, 0x66, 0x16, 0x96, 0xbc, 0x34, + 0x02, 0xd2, 0x34, 0x8f, 0x14, 0xe8, 0x41, 0xcb, + 0x6b, 0xb4, 0x39, 0x90, 0xbe, 0x64, 0xd3, 0x5c, + 0x38, 0xc6, 0xe7, 0x8e, 0x71, 0x87, 0xc8, 0x0d, + 0x27, 0x4d, 0x02, 0x93, 0xca, 0xcd, 0x9b, 0xf6, + 0xa6, 0x59, 0x2c, 0x9c, 0x1f, 0x0c, 0x91, 0x17, + 0x02, 0xd0, 0x40, 0x04, 0xd3, 0x10, 0xd3, 0x4d, + 0xd5, 0x58, 0x02, 0xa6, 0x83, 0x74, 0xd0, 0x77, + 0x4d, 0x14, 0xde, 0xca, 0x32, 0x48, 0xf3, 0x9c, + 0x32, 0x31, 0xcc, 0x77, 0x32, 0xed, 0x0e, 0x14, + 0xde, 0x41, 0xaa, 0x2d, 0xa1, 0xcd, 0x63, 0xbc, + 0x68, 0x74, 0xc6, 0x48, 0xcb, 0xf0, 0x98, 0xdc, + 0x01, 0xab, 0x49, 0xa5, 0x3b, 0x6b, 0x1b, 0x51, + 0x6f, 0x14, 0x19, 0xa9, 0xe6, 0x86, 0x16, 0xcc, + 0xc6, 0xc9, 0x41, 0xbf, 0xa6, 0xba, 0x37, 0x16, + 0xf6, 0xc9, 0xb3, 0x16, 0xd7, 0x26, 0xe0, 0x73, + 0xf3, 0x4a, 0xc7, 0x17, 0x06, 0x38, 0x68, 0x2e, + 0x51, 0x99, 0x95, 0xfc, 0x99, 0x85, 0xe3, 0xee, + 0xa4, 0x18, 0x71, 0x68, 0x6b, 0x46, 0xe3, 0x46, + 0xa0, 0x83, 0x95, 0x77, 0x64, 0x7f, 0xce, 0x2d, + 0x3e, 0xd3, 0xe4, 0x2b, 0x85, 0x77, 0x64, 0x7f, + 0xce, 0x2d, 0x3e, 0xd3, 0xe4, 0x28, 0x2c, 0x79, + 0xa7, 0xbe, 0xc9, 0xdc, 0xf0, 0x2e, 0x55, 0xd5, + 0x9a, 0x7b, 0xec, 0x9d, 0xcf, 0x02, 0xe5, 0x41, + 0xee, 0x0f, 0xdb, 0x47, 0xe7, 0x37, 0xc2, 0xa6, + 0x94, 0x2c, 0x1f, 0xb6, 0x8f, 0xce, 0x6f, 0x85, + 0x4d, 0x20, 0x28, 0xdc, 0xdb, 0xde, 0xac, 0xfe, + 0xd3, 0xe5, 0x0a, 0x49, 0x46, 0xe6, 0xde, 0xf5, + 0x67, 0xf6, 0x9f, 0x28, 0x41, 0x8c, 0xab, 0xde, + 0xaf, 0x3c, 0xf3, 0xf5, 0x8a, 0x93, 0x51, 0x99, + 0x57, 0xbd, 0x5e, 0x79, 0xe7, 0xeb, 0x15, 0x26, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x35, 0xa8, 0x27, 0x79, 0x47, 0xb6, + 0x54, 0xe8, 0xd6, 0xa0, 0x9d, 0xe5, 0x1e, 0xd9, + 0x41, 0xba, 0xcb, 0xdf, 0x21, 0xf3, 0x82, 0x8a, + 0xda, 0xa3, 0x4c, 0xe1, 0xe3, 0xfa, 0x8c, 0x3d, + 0xe2, 0xa4, 0xa0, 0x93, 0x9b, 0x9a, 0x39, 0x0e, + 0xa6, 0xb8, 0x12, 0xb8, 0x36, 0xca, 0x17, 0x33, + 0x30, 0x8e, 0xe3, 0xf3, 0x26, 0x8c, 0x00, 0x7b, + 0x2d, 0xfe, 0x82, 0xba, 0x61, 0x9d, 0x2e, 0xcd, + 0xe7, 0x2b, 0x33, 0x8b, 0x87, 0xb2, 0x75, 0x42, + 0x55, 0x31, 0x6f, 0x1a, 0x1d, 0xf1, 0xad, 0x6b, + 0xc4, 0x98, 0x96, 0xa9, 0x79, 0xba, 0x70, 0xff, + 0x00, 0x15, 0xa2, 0xc3, 0x6b, 0x98, 0xd8, 0x44, + 0x37, 0xd0, 0x97, 0x10, 0x30, 0x99, 0x19, 0xa4, + 0x38, 0x0d, 0x1a, 0x41, 0xdd, 0x5b, 0x65, 0xda, + 0xeb, 0x28, 0xa2, 0x2d, 0xb2, 0xb6, 0x76, 0x2d, + 0xc0, 0x40, 0x63, 0x41, 0xec, 0x80, 0xaa, 0x55, + 0xff, 0x00, 0xe1, 0x31, 0x6f, 0xaa, 0x76, 0xa9, + 0xc9, 0xa2, 0x3c, 0xc6, 0x4d, 0x3c, 0x7d, 0x9a, + 0x78, 0x3a, 0xa6, 0x9e, 0x7b, 0xcb, 0x87, 0xcc, + 0xfa, 0xbe, 0x59, 0x09, 0x71, 0x0d, 0xd3, 0xa3, + 0x7b, 0xb4, 0xae, 0xd9, 0x64, 0xb2, 0x43, 0x92, + 0xc3, 0x35, 0xc8, 0x2d, 0x31, 0x45, 0x57, 0x03, + 0xa0, 0xd1, 0xa0, 0xd2, 0xbd, 0xc5, 0x4b, 0xca, + 0xb3, 0x2e, 0xae, 0xbd, 0x6d, 0xce, 0x0e, 0x72, + 0x8d, 0x2d, 0xc1, 0x5a, 0x0d, 0x2b, 0xb3, 0x34, + 0xda, 0x8b, 0xac, 0xc2, 0x07, 0x5b, 0x08, 0xc4, + 0x11, 0x3f, 0xcb, 0x20, 0x92, 0x5c, 0x37, 0x95, + 0x72, 0x56, 0x66, 0x62, 0xba, 0x70, 0x84, 0xe0, + 0xc9, 0x4c, 0x71, 0x6c, 0x93, 0x69, 0x9b, 0x4c, + 0x6d, 0xd1, 0x1f, 0xed, 0x52, 0x0b, 0x8f, 0x6a, + 0x6b, 0x87, 0x3b, 0x8f, 0x9c, 0x0e, 0x3b, 0xe0, + 0xd5, 0x59, 0x06, 0xd5, 0x65, 0xd7, 0x30, 0xb5, + 0xb7, 0xd6, 0xc4, 0xb8, 0x50, 0xd3, 0x08, 0x7b, + 0x6a, 0x37, 0xaa, 0xaa, 0x78, 0x93, 0x12, 0xbc, + 0xd2, 0xb3, 0x31, 0x33, 0xec, 0x72, 0xa6, 0x5b, + 0xd2, 0x2d, 0x11, 0x3f, 0x74, 0xeb, 0x3a, 0xf1, + 0xfd, 0x29, 0xfc, 0xdf, 0x69, 0x45, 0xe5, 0xb7, + 0xb2, 0x5a, 0xc6, 0x61, 0x89, 0xda, 0x1e, 0xe3, + 0xa0, 0x90, 0x37, 0x00, 0x1a, 0x82, 0xf1, 0x91, + 0xed, 0x03, 0x72, 0xc8, 0xdf, 0x0c, 0xb1, 0x19, + 0x23, 0x7b, 0xb1, 0xb4, 0xb0, 0xd2, 0x86, 0x9a, + 0x75, 0xa8, 0x3c, 0x49, 0x89, 0x36, 0x57, 0x6e, + 0xdd, 0x38, 0x27, 0xbd, 0x7d, 0xf1, 0x7d, 0x78, + 0xc7, 0xbb, 0xfc, 0x93, 0xb7, 0xfb, 0x41, 0x1c, + 0xb7, 0xb6, 0xf7, 0x76, 0x51, 0x18, 0x9f, 0x05, + 0x71, 0x62, 0x03, 0xc6, 0xc5, 0xae, 0xb4, 0x52, + 0x1f, 0x15, 0x65, 0x53, 0x06, 0xbe, 0xea, 0xd5, + 0xc6, 0x66, 0x69, 0x6f, 0x8a, 0x1d, 0x43, 0xfd, + 0x53, 0xb8, 0xaa, 0x58, 0x93, 0x12, 0x8e, 0xdd, + 0x7e, 0x5e, 0xf4, 0xc6, 0x7c, 0x91, 0x36, 0x9d, + 0x7e, 0xee, 0x33, 0xc1, 0x2f, 0x9d, 0xe7, 0x6f, + 0xcd, 0x1e, 0xd6, 0xb5, 0xa6, 0x28, 0x23, 0xf2, + 0x5a, 0x4d, 0x49, 0x27, 0x75, 0xcb, 0xb2, 0xf7, + 0x69, 0xa0, 0xb9, 0xca, 0xdd, 0x62, 0xd8, 0x1e, + 0xd7, 0x39, 0x8d, 0x60, 0x79, 0x22, 0x95, 0x6d, + 0x34, 0xf7, 0x95, 0x73, 0x12, 0x62, 0x53, 0xdb, + 0xae, 0x91, 0x1c, 0xb8, 0xc2, 0x3b, 0xd7, 0xd6, + 0xd3, 0xaf, 0xdd, 0x1a, 0x4a, 0x77, 0x23, 0xcf, + 0xe2, 0xca, 0xe0, 0x92, 0x29, 0x22, 0x74, 0xa6, + 0x47, 0x07, 0x55, 0xa4, 0x0a, 0x50, 0x53, 0x75, + 0x72, 0xdb, 0xe6, 0x8c, 0x87, 0x38, 0xeb, 0x12, + 0xc2, 0x59, 0xce, 0x3e, 0x4e, 0x6c, 0x11, 0x5f, + 0x1e, 0xba, 0x2b, 0xdd, 0x51, 0x98, 0x93, 0x12, + 0x6c, 0x8d, 0x66, 0x7a, 0xbc, 0x51, 0xdc, 0xb6, + 0x95, 0x8d, 0x78, 0x52, 0x75, 0xaa, 0x63, 0x3d, + 0xce, 0xa2, 0xcd, 0x5d, 0x0b, 0xa3, 0x89, 0xd1, + 0x73, 0x40, 0x83, 0x88, 0x83, 0x5a, 0xf6, 0x94, + 0x5d, 0x56, 0xbc, 0x49, 0x89, 0x5a, 0xb1, 0x15, + 0x8d, 0x23, 0xc1, 0x5b, 0xda, 0x6f, 0x33, 0x6b, + 0x71, 0x99, 0x58, 0x62, 0xda, 0x48, 0x19, 0x94, + 0x75, 0x79, 0x81, 0xe5, 0xfc, 0xd3, 0xa3, 0xe7, + 0x2a, 0x29, 0x52, 0x0e, 0x9e, 0xfa, 0xd3, 0x91, + 0xe7, 0xac, 0xca, 0xe3, 0x96, 0x39, 0x23, 0x74, + 0xad, 0x91, 0xc1, 0xc0, 0x34, 0x81, 0x43, 0xbb, + 0xad, 0x42, 0x62, 0x4c, 0x4a, 0xbd, 0xba, 0xe9, + 0x31, 0xa7, 0x8c, 0xea, 0xe9, 0xde, 0xbe, 0xb1, + 0x6d, 0x78, 0xd6, 0x36, 0xc7, 0x0f, 0x62, 0x56, + 0x1c, 0xd9, 0xac, 0xce, 0x8e, 0x66, 0xf6, 0x17, + 0x02, 0xf2, 0xec, 0x00, 0x8a, 0xd2, 0x98, 0x5a, + 0x3b, 0x8b, 0x66, 0x6d, 0x9e, 0x0b, 0xdb, 0xbb, + 0x7b, 0xa8, 0x23, 0x31, 0x3a, 0xd8, 0x68, 0x0f, + 0x20, 0xd4, 0xe2, 0x0e, 0xfc, 0xde, 0xd2, 0x86, + 0xc4, 0x98, 0x94, 0xed, 0x8d, 0x62, 0x79, 0x70, + 0x57, 0xb9, 0x6d, 0x2d, 0x1a, 0xf0, 0xb5, 0xb7, + 0xcf, 0xc5, 0x6d, 0x7e, 0xd5, 0xe5, 0x77, 0x10, + 0x37, 0xda, 0x6d, 0x9d, 0x24, 0x80, 0xd7, 0x01, + 0x00, 0x8a, 0xef, 0xd4, 0xad, 0x1f, 0x17, 0x45, + 0x25, 0x9c, 0x96, 0xf3, 0x5b, 0xbb, 0x1b, 0xda, + 0xe6, 0x55, 0x84, 0x06, 0x80, 0xe0, 0x40, 0xd0, + 0x55, 0x67, 0x17, 0xff, 0x00, 0x29, 0x89, 0x57, + 0xb5, 0x4e, 0x5f, 0xe2, 0xbf, 0xa9, 0xc9, 0xce, + 0x3c, 0x34, 0xf0, 0x84, 0xfe, 0x4b, 0xb4, 0x30, + 0xe5, 0x96, 0x86, 0xdd, 0xf0, 0xbe, 0x52, 0x5e, + 0x5c, 0x1c, 0xd2, 0x00, 0xa1, 0x1a, 0xb4, 0xae, + 0x2b, 0x2c, 0xc9, 0x96, 0xd9, 0xaf, 0xb7, 0xb9, + 0x85, 0xcc, 0xc6, 0xf7, 0xe0, 0x04, 0x57, 0xc7, + 0xc5, 0xa3, 0xbe, 0xa3, 0x71, 0x26, 0x25, 0x6d, + 0xb1, 0xf5, 0x7f, 0xaa, 0x34, 0x95, 0x3b, 0x96, + 0xd2, 0x91, 0xaf, 0xf0, 0xfe, 0xd4, 0xd6, 0x6d, + 0x9f, 0x0b, 0xeb, 0xab, 0x6b, 0x98, 0x23, 0x74, + 0x4e, 0xb6, 0xd2, 0x03, 0x88, 0x35, 0x35, 0xae, + 0xe2, 0x93, 0x7e, 0xd5, 0xe5, 0x73, 0xc2, 0xdf, + 0x68, 0xb5, 0x2f, 0x95, 0xba, 0x70, 0x10, 0x08, + 0xc5, 0xd8, 0x25, 0x54, 0xb1, 0x26, 0x2e, 0x05, + 0x5e, 0xdd, 0x78, 0x70, 0xf0, 0xf0, 0x5a, 0x33, + 0xe4, 0x89, 0xb4, 0xeb, 0xf7, 0x78, 0xf0, 0x59, + 0xce, 0xd6, 0xc5, 0x2d, 0x93, 0xed, 0xe7, 0xb7, + 0x76, 0x39, 0x18, 0xe6, 0x12, 0xc2, 0x03, 0x40, + 0x75, 0x40, 0xa5, 0x77, 0x82, 0xe6, 0xd9, 0xf9, + 0x33, 0x78, 0x03, 0xa6, 0xb3, 0x83, 0x9f, 0xb7, + 0x79, 0xc2, 0xf6, 0x54, 0x0a, 0x16, 0xeb, 0xa6, + 0x9d, 0x6a, 0x07, 0x12, 0x91, 0xca, 0x33, 0xcb, + 0x8c, 0xac, 0xb8, 0x31, 0xa2, 0x58, 0x5e, 0x6a, + 0xe8, 0xdd, 0xa3, 0x4e, 0xf8, 0x2a, 0x27, 0x1e, + 0x94, 0x98, 0xac, 0x6b, 0xaf, 0x1f, 0x15, 0xab, + 0x9a, 0x6d, 0x7a, 0xcd, 0xed, 0xa6, 0xdf, 0x0d, + 0x21, 0x62, 0xb2, 0xcf, 0xee, 0x6f, 0xf3, 0x68, + 0xad, 0x63, 0x83, 0x99, 0x8d, 0x85, 0xc6, 0x70, + 0x74, 0xbb, 0x40, 0x20, 0x03, 0xb8, 0x34, 0xae, + 0x0d, 0xb0, 0x94, 0xb6, 0xfe, 0xdf, 0x01, 0xa3, + 0xe3, 0x8e, 0xbd, 0xa3, 0x8a, 0xa1, 0x7a, 0x7e, + 0xda, 0x34, 0x34, 0x98, 0x6c, 0xc0, 0x91, 0xda, + 0xc9, 0x70, 0xa5, 0x7b, 0x83, 0x4a, 0xaf, 0xdd, + 0xde, 0xcf, 0x79, 0x3b, 0xae, 0x27, 0x76, 0x29, + 0x1e, 0x75, 0xea, 0x00, 0x6e, 0x34, 0x2a, 0xd2, + 0x9f, 0x54, 0x4c, 0xc6, 0xd8, 0xd1, 0x7c, 0xd9, + 0x62, 0x69, 0x35, 0xdd, 0xbe, 0x6d, 0x3b, 0x96, + 0x48, 0x76, 0xae, 0xce, 0x68, 0x44, 0x79, 0x95, + 0xb9, 0x79, 0xdd, 0x20, 0x07, 0x34, 0x91, 0xd8, + 0x2b, 0x97, 0x37, 0xda, 0x56, 0xdd, 0xdb, 0xfb, + 0x25, 0x9c, 0x46, 0x18, 0x74, 0x07, 0x39, 0xd4, + 0x04, 0x81, 0xa8, 0x34, 0x0d, 0xc5, 0x5f, 0xc4, + 0x98, 0x95, 0xfb, 0x75, 0xe4, 0xe5, 0x3e, 0x63, + 0x2c, 0xc4, 0xc4, 0xcf, 0x8f, 0x8f, 0x05, 0x8b, + 0x2b, 0xda, 0x58, 0x2c, 0x72, 0xf6, 0xda, 0x3e, + 0x07, 0xbd, 0xc3, 0x15, 0x5c, 0xd2, 0x00, 0xf1, + 0x8d, 0x77, 0x57, 0x0e, 0x49, 0x9a, 0x33, 0x2c, + 0xba, 0x74, 0xf2, 0x30, 0xca, 0x0b, 0x0b, 0x30, + 0xb4, 0x80, 0x74, 0xd3, 0x7f, 0xb4, 0xa2, 0xf1, + 0x26, 0x25, 0x3b, 0x2b, 0xc7, 0xfd, 0x5e, 0x2a, + 0xf7, 0x6f, 0xf4, 0x71, 0xfe, 0x1f, 0xda, 0x93, + 0xcd, 0xf3, 0x36, 0x66, 0x17, 0xfe, 0xd4, 0xc6, + 0x18, 0xdb, 0x46, 0x8c, 0x2e, 0x20, 0x9f, 0x14, + 0xf6, 0x17, 0x76, 0x71, 0xb4, 0x90, 0x66, 0x36, + 0x66, 0xdd, 0x90, 0x3e, 0x32, 0x5c, 0x1d, 0x89, + 0xc4, 0x11, 0xa3, 0xb4, 0xab, 0xd8, 0x93, 0x12, + 0x6c, 0xaf, 0xd3, 0xfe, 0x9f, 0x04, 0xf7, 0x6f, + 0xf5, 0xf1, 0xfe, 0x27, 0xdc, 0xb1, 0x65, 0x5b, + 0x4e, 0xdb, 0x6b, 0x56, 0xda, 0x5e, 0x44, 0x65, + 0x89, 0xa3, 0x0b, 0x5c, 0xdd, 0x27, 0x0e, 0x9d, + 0x0e, 0x07, 0x5a, 0xdd, 0x73, 0xb5, 0x36, 0x91, + 0xdb, 0xba, 0x0c, 0xb6, 0xdf, 0x9b, 0x2e, 0x1a, + 0x1c, 0x40, 0x6b, 0x45, 0x75, 0x9a, 0x0d, 0xd5, + 0x57, 0xc4, 0x98, 0x94, 0x76, 0xab, 0xcb, 0xde, + 0x98, 0xf3, 0x19, 0x22, 0x34, 0xd7, 0xc2, 0x36, + 0xf8, 0x71, 0xd3, 0xe2, 0x9a, 0xc8, 0xf3, 0xc8, + 0xf2, 0xce, 0x78, 0xcb, 0x13, 0xa6, 0x33, 0x61, + 0xd2, 0xd2, 0x07, 0x93, 0xbf, 0x55, 0xcf, 0x2e, + 0x62, 0xc7, 0xe7, 0x1d, 0x62, 0x18, 0x43, 0x0c, + 0xcd, 0x97, 0x9b, 0xa8, 0xad, 0x1b, 0x4d, 0x1b, + 0xdb, 0x8a, 0x37, 0x12, 0x62, 0x56, 0xdb, 0x1a, + 0xcc, 0xfb, 0x67, 0x84, 0xab, 0xdc, 0xb6, 0xda, + 0xd7, 0x5e, 0x15, 0x9d, 0x63, 0xe2, 0x9d, 0xcf, + 0x33, 0xf8, 0x73, 0x48, 0x63, 0x8e, 0x38, 0x5d, + 0x11, 0x8d, 0xd8, 0x89, 0x71, 0x06, 0xba, 0x3b, + 0x0b, 0x7e, 0x53, 0xb4, 0xf1, 0xd9, 0xd9, 0x32, + 0xd6, 0x78, 0x5c, 0xfe, 0x6f, 0x43, 0x5c, 0xca, + 0x79, 0x3b, 0xc4, 0x15, 0x5b, 0xc4, 0x98, 0x82, + 0x8e, 0xdd, 0x74, 0xdb, 0xa7, 0x0f, 0x15, 0xbb, + 0xf9, 0x37, 0xef, 0xd7, 0xea, 0xd3, 0x4f, 0x04, + 0x86, 0x6b, 0x7d, 0x0d, 0xf5, 0xeb, 0xae, 0x21, + 0x8f, 0x9a, 0x8c, 0x86, 0x80, 0xcd, 0x1b, 0x80, + 0x82, 0x74, 0x6f, 0xae, 0x3a, 0xad, 0x78, 0x93, + 0x12, 0xb4, 0x69, 0x58, 0xd1, 0xce, 0xd3, 0xac, + 0xcd, 0xa7, 0xda, 0x90, 0xc9, 0x8f, 0xf9, 0xad, + 0xa7, 0xda, 0xb7, 0xc2, 0xac, 0xd9, 0xaf, 0xbe, + 0xbb, 0xb4, 0xdf, 0x02, 0xaf, 0x6c, 0xcc, 0x0e, + 0xb8, 0xce, 0x20, 0xa6, 0xa8, 0xab, 0x23, 0xe9, + 0xb9, 0x84, 0x1f, 0x95, 0x4f, 0xe6, 0x2f, 0x0f, + 0xbc, 0x79, 0x1a, 0x85, 0x1b, 0xc0, 0x16, 0x6c, + 0xf3, 0xad, 0xa3, 0xe0, 0xdf, 0xe4, 0xe2, 0x62, + 0x93, 0xef, 0x97, 0x32, 0x37, 0xca, 0x1f, 0x96, + 0xea, 0x23, 0x7c, 0xa1, 0xf9, 0x6e, 0xae, 0x4d, + 0x4d, 0x5b, 0x67, 0xef, 0x16, 0xdf, 0x64, 0x7c, + 0x2a, 0xba, 0xac, 0x5b, 0x67, 0xef, 0x16, 0xdf, + 0x64, 0x7c, 0x2a, 0xba, 0x80, 0xac, 0x16, 0xf1, + 0x9c, 0xd7, 0x67, 0xa3, 0xb3, 0xb7, 0x23, 0xda, + 0xad, 0x24, 0xc5, 0xcd, 0x13, 0x42, 0x47, 0x8d, + 0xaa, 0xbe, 0x72, 0xaf, 0xac, 0xb5, 0xee, 0x69, + 0xc4, 0xd2, 0x5a, 0xed, 0xf0, 0x68, 0x7b, 0xc8, + 0x2c, 0x59, 0x7d, 0xac, 0xb9, 0x2d, 0x95, 0xe5, + 0xd5, 0xfd, 0x22, 0x96, 0x66, 0x18, 0xa1, 0x8a, + 0xb5, 0x71, 0xad, 0x77, 0x07, 0x65, 0x69, 0xb6, + 0x0f, 0xca, 0x32, 0x17, 0x5c, 0x0f, 0x16, 0xf2, + 0xfe, 0x8d, 0x84, 0x6e, 0xb5, 0x9b, 0xea, 0x11, + 0xf2, 0x3e, 0x43, 0x8a, 0x47, 0x17, 0x91, 0xf3, + 0x8d, 0x7c, 0x2b, 0xce, 0xe0, 0x07, 0x50, 0xd4, + 0x37, 0x90, 0x4e, 0xe7, 0x6d, 0x6e, 0x61, 0x61, + 0x6f, 0x9c, 0x44, 0x06, 0x3a, 0x08, 0xee, 0x5a, + 0x35, 0xe2, 0x0a, 0x0d, 0x8e, 0x6b, 0x5c, 0x1c, + 0xe0, 0x1c, 0xd6, 0xb9, 0xa5, 0xc3, 0x7c, 0x03, + 0xa5, 0x60, 0x13, 0x4a, 0x57, 0x46, 0xf6, 0xe7, + 0x6e, 0x88, 0x3c, 0x08, 0x2c, 0x19, 0x9e, 0x4a, + 0xeb, 0xe7, 0x47, 0x77, 0x93, 0xc6, 0xd7, 0xc1, + 0x23, 0x00, 0x7c, 0x6d, 0x20, 0x61, 0x72, 0xf3, + 0x9b, 0x86, 0xda, 0x65, 0x36, 0x79, 0x46, 0x20, + 0xeb, 0x80, 0xfc, 0x72, 0x61, 0x35, 0x0d, 0x24, + 0xea, 0xfa, 0x4a, 0x0d, 0x92, 0xcb, 0x1f, 0xec, + 0xde, 0xe6, 0x6e, 0xf8, 0xa4, 0x85, 0xe4, 0x92, + 0x4d, 0x4e, 0x92, 0x4d, 0x6b, 0xba, 0x82, 0xdb, + 0x99, 0x64, 0xb9, 0x8b, 0xed, 0x20, 0xb0, 0xb0, + 0x2c, 0x65, 0xab, 0x1b, 0x59, 0x2a, 0xec, 0x25, + 0xef, 0xec, 0xd0, 0x6a, 0x50, 0x57, 0xf9, 0x15, + 0xf6, 0x5f, 0x08, 0x9a, 0x7e, 0x6f, 0x05, 0x70, + 0x8c, 0x2e, 0xc4, 0x6a, 0x7b, 0x14, 0x5c, 0x15, + 0x75, 0x75, 0x9d, 0x75, 0xd6, 0x6a, 0x84, 0x93, + 0xd9, 0xed, 0xe9, 0x41, 0x8e, 0xde, 0xee, 0xe9, + 0xdf, 0x56, 0x0d, 0x9b, 0x64, 0x52, 0xe5, 0xd9, + 0x94, 0x52, 0xb8, 0x46, 0xc9, 0x58, 0xc6, 0x17, + 0x3b, 0x43, 0x41, 0x21, 0xc3, 0xe5, 0x55, 0xf4, + 0x04, 0x8d, 0x5a, 0x3b, 0x5a, 0x10, 0x59, 0x32, + 0x9c, 0xb6, 0x7c, 0x99, 0xd3, 0x66, 0x17, 0xe5, + 0x91, 0xb2, 0x16, 0x16, 0xc5, 0xe3, 0x03, 0x88, + 0x9d, 0x00, 0x8a, 0x2d, 0x19, 0x6b, 0xab, 0x90, + 0x66, 0xa4, 0xeb, 0x7b, 0x81, 0xa7, 0x6f, 0x4a, + 0x84, 0x74, 0x92, 0x39, 0xa1, 0xae, 0x71, 0x73, + 0x47, 0x92, 0xd2, 0x49, 0x03, 0xb8, 0xbc, 0xd4, + 0xef, 0xf6, 0xfb, 0x28, 0x2c, 0x19, 0x45, 0xb4, + 0x97, 0xbb, 0x3d, 0x75, 0x67, 0x6f, 0x43, 0x31, + 0x94, 0x38, 0x02, 0x69, 0xa2, 0x8d, 0x3f, 0x22, + 0x82, 0x9a, 0x27, 0xc3, 0x2b, 0xe1, 0x90, 0x51, + 0xf1, 0x92, 0xd7, 0x01, 0xa7, 0x48, 0x5e, 0x5a, + 0x4b, 0x4e, 0x26, 0x92, 0x0e, 0xf8, 0xd0, 0xb0, + 0x82, 0x4f, 0x67, 0x0f, 0xf9, 0xcd, 0xb6, 0xf7, + 0x8d, 0xa7, 0xb8, 0xb9, 0xb3, 0x82, 0x3a, 0xce, + 0xf0, 0xff, 0x00, 0x8a, 0xff, 0x00, 0x0f, 0xf4, + 0xae, 0x5e, 0xce, 0xee, 0xfe, 0xea, 0x12, 0x4d, + 0x7b, 0x35, 0xef, 0xa0, 0xb0, 0x67, 0xc4, 0x73, + 0xd9, 0x49, 0xfe, 0xa3, 0x07, 0xd2, 0x6a, 0xe7, + 0xda, 0xcd, 0x39, 0xc3, 0xfb, 0x2c, 0x65, 0x38, + 0x14, 0x3d, 0x4e, 0xff, 0x00, 0x85, 0x0d, 0x4e, + 0xbd, 0xdd, 0x68, 0x26, 0xf6, 0xb4, 0xd6, 0xea, + 0xdc, 0x8d, 0x3f, 0xf6, 0xcd, 0xf0, 0xb9, 0x6e, + 0xce, 0x26, 0x16, 0xec, 0xc9, 0x66, 0xf5, 0x4c, + 0x04, 0xd3, 0x4e, 0x86, 0xe0, 0x27, 0xc0, 0xab, + 0xf5, 0x35, 0xa9, 0xd3, 0xdb, 0xde, 0xfc, 0x8a, + 0x54, 0x91, 0x43, 0x53, 0xab, 0x74, 0xea, 0xde, + 0x41, 0x61, 0xce, 0x32, 0x5b, 0xac, 0xca, 0xfc, + 0x5e, 0x58, 0x86, 0xcd, 0x6f, 0x72, 0x1a, 0x71, + 0xe2, 0x14, 0x69, 0x00, 0x03, 0x5d, 0x3b, 0xc1, + 0x79, 0x89, 0x99, 0x7c, 0x3b, 0x4b, 0x6b, 0x0d, + 0x8b, 0x5a, 0xd8, 0xe2, 0xf1, 0x64, 0x73, 0x4d, + 0x43, 0x9f, 0x42, 0x4e, 0xbe, 0xda, 0x82, 0x6c, + 0xb2, 0xb5, 0xa5, 0x8d, 0x7b, 0x9a, 0xd7, 0x6b, + 0x00, 0x90, 0x17, 0x81, 0xa3, 0x48, 0xd7, 0xbe, + 0x34, 0x20, 0x92, 0xb9, 0xb7, 0x75, 0xde, 0xd0, + 0xcb, 0x6e, 0xd1, 0x51, 0x25, 0xc9, 0x04, 0xee, + 0x53, 0x11, 0xaf, 0x79, 0x78, 0xcf, 0x2e, 0x1b, + 0x73, 0x9a, 0x4c, 0x59, 0xa6, 0x36, 0x11, 0x13, + 0x37, 0xa8, 0xcd, 0x02, 0x8b, 0x85, 0xaf, 0x7b, + 0x1d, 0x8d, 0x8e, 0x2d, 0x76, 0xe3, 0x81, 0xd2, + 0xb1, 0xfd, 0x3d, 0xf4, 0x13, 0xb9, 0xb0, 0x3f, + 0x0d, 0xe5, 0x9e, 0x71, 0xaf, 0x24, 0xa8, 0x21, + 0xa3, 0xe5, 0x4f, 0x00, 0xd5, 0xd8, 0xed, 0x22, + 0x0b, 0x26, 0xc8, 0x96, 0x4c, 0xcb, 0xab, 0x39, + 0x34, 0x83, 0x82, 0x50, 0x3b, 0x2d, 0x3a, 0xfc, + 0x0b, 0x8e, 0x3b, 0xba, 0xed, 0x47, 0xb4, 0x57, + 0x41, 0xb8, 0x2d, 0xee, 0x69, 0x67, 0x81, 0x43, + 0xa7, 0xc9, 0xa4, 0x7e, 0x41, 0x05, 0x87, 0x6b, + 0x9c, 0xc8, 0xdd, 0x6b, 0x69, 0x1e, 0x86, 0x30, + 0x3e, 0x4a, 0x6e, 0x55, 0xc6, 0xab, 0x5d, 0xf8, + 0x3f, 0x0b, 0x65, 0xe2, 0x95, 0xac, 0x8e, 0xaf, + 0x0b, 0xd4, 0x11, 0xa9, 0x35, 0x3a, 0x7b, 0x7a, + 0x4a, 0x6e, 0x53, 0x73, 0x8d, 0x05, 0xb6, 0xe2, + 0xf2, 0x33, 0xb3, 0x5e, 0xd8, 0x3f, 0x6f, 0x2c, + 0x2d, 0xb7, 0x2e, 0xee, 0xe1, 0x3f, 0x2a, 0xe0, + 0x85, 0x8f, 0x7e, 0xc9, 0xbe, 0x36, 0x0f, 0x18, + 0xdc, 0x86, 0xb4, 0x0d, 0xf2, 0x5a, 0x02, 0x81, + 0xd3, 0xaa, 0xba, 0x37, 0x96, 0x43, 0x88, 0x20, + 0xb7, 0x41, 0x04, 0x38, 0x53, 0x45, 0x08, 0xdd, + 0x41, 0x27, 0xb4, 0x2f, 0x6b, 0x2e, 0x59, 0x65, + 0x1f, 0xec, 0xec, 0xa2, 0x6c, 0x42, 0x9b, 0xe4, + 0x55, 0xe5, 0x75, 0x64, 0xef, 0x8a, 0xf7, 0x2b, + 0xb9, 0xc9, 0xde, 0xf0, 0xc9, 0x9e, 0xee, 0x72, + 0x0c, 0x5a, 0x01, 0xd4, 0x7e, 0x45, 0x04, 0xe7, + 0x39, 0xce, 0x2e, 0x71, 0x2e, 0x71, 0xd6, 0x4e, + 0x92, 0x77, 0x56, 0x01, 0x20, 0xd4, 0x12, 0x0e, + 0xff, 0x00, 0x12, 0x0b, 0x0e, 0x53, 0x93, 0x5c, + 0xe5, 0xd7, 0x7e, 0xdf, 0x98, 0xe1, 0x86, 0x1b, + 0x76, 0xb8, 0x8a, 0xb8, 0x1c, 0x44, 0x82, 0x05, + 0x28, 0xbc, 0x64, 0xf9, 0x9c, 0x52, 0xdf, 0xde, + 0xc7, 0x70, 0xe0, 0xc8, 0xb3, 0x1c, 0x58, 0x5c, + 0x75, 0x02, 0x4b, 0xa9, 0xde, 0x2a, 0x0d, 0xf2, + 0xcb, 0x20, 0xa3, 0xde, 0xe7, 0x0d, 0xe2, 0x49, + 0x0b, 0xcf, 0x6d, 0x04, 0xe5, 0xae, 0xcc, 0xde, + 0xc5, 0x7a, 0xc7, 0xdc, 0x61, 0x65, 0xac, 0x4f, + 0x0f, 0x74, 0xd8, 0x85, 0x0b, 0x5a, 0x71, 0x05, + 0xdd, 0x97, 0x5f, 0xb2, 0xfb, 0x6a, 0x64, 0x9e, + 0x33, 0x58, 0x9b, 0x13, 0xa3, 0x69, 0xae, 0x82, + 0x1a, 0x45, 0x0f, 0x76, 0xaa, 0xb0, 0x66, 0x95, + 0xcd, 0xc0, 0xe7, 0xb8, 0xb3, 0xe6, 0xe2, 0x2b, + 0xc0, 0xd0, 0x6b, 0xbb, 0x4a, 0x68, 0xd1, 0xe0, + 0x41, 0xee, 0x6a, 0x19, 0x9f, 0xe7, 0x15, 0xe1, + 0x35, 0xe9, 0x44, 0x05, 0xdd, 0x91, 0xff, 0x00, + 0x38, 0xb4, 0xfb, 0x4f, 0x90, 0xae, 0x15, 0xdd, + 0x91, 0xff, 0x00, 0x38, 0xb4, 0xfb, 0x4f, 0x90, + 0xa0, 0xb1, 0xe6, 0x9e, 0xfb, 0x27, 0x73, 0xc0, + 0xb9, 0x57, 0x56, 0x69, 0xef, 0xb2, 0x77, 0x3c, + 0x0b, 0x95, 0x07, 0xb8, 0x3f, 0x6d, 0x1f, 0x9c, + 0xdf, 0x0a, 0x9a, 0x50, 0xb0, 0x7e, 0xda, 0x3f, + 0x39, 0xbe, 0x15, 0x34, 0x80, 0xa3, 0x73, 0x6f, + 0x7a, 0xb3, 0xfb, 0x4f, 0x94, 0x29, 0x25, 0x1b, + 0x9b, 0x7b, 0xd5, 0x9f, 0xda, 0x7c, 0xa1, 0x06, + 0x32, 0xaf, 0x7a, 0xbc, 0xf3, 0xcf, 0xd6, 0x2a, + 0x4d, 0x46, 0x65, 0x5e, 0xf5, 0x79, 0xe7, 0x9f, + 0xac, 0x54, 0x9a, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x00, 0xd6, 0xa0, 0x9d, + 0xe5, 0x1e, 0xd9, 0x53, 0xa3, 0x5a, 0x82, 0x77, + 0x94, 0x7b, 0x65, 0x01, 0x76, 0x4f, 0x6b, 0x1e, + 0x73, 0x96, 0x1b, 0x57, 0x3b, 0x0d, 0xc4, 0x34, + 0x31, 0xbc, 0xef, 0x8d, 0x55, 0xec, 0x6f, 0xae, + 0x35, 0xee, 0x07, 0xb9, 0xb3, 0xb1, 0xcd, 0x38, + 0x4e, 0x20, 0x2a, 0x3b, 0x26, 0x89, 0x13, 0x31, + 0x3a, 0xc2, 0x26, 0xb1, 0x68, 0x98, 0x9f, 0x05, + 0x4a, 0xe6, 0xde, 0xe2, 0xd2, 0x67, 0x41, 0x70, + 0xde, 0x6e, 0x56, 0x1a, 0x10, 0x7c, 0x20, 0xee, + 0xd5, 0x6a, 0xc4, 0xaf, 0xb9, 0xdc, 0xd9, 0x23, + 0xa6, 0x6d, 0x8e, 0x68, 0xca, 0x17, 0x33, 0x13, + 0x25, 0xa6, 0xa0, 0x4d, 0x35, 0xb7, 0x4a, 0x89, + 0x3b, 0x2b, 0x93, 0x4e, 0x71, 0xdb, 0x66, 0x41, + 0xad, 0x3a, 0x9a, 0x4b, 0x1c, 0x47, 0x09, 0x05, + 0x68, 0xae, 0x68, 0xd3, 0x8b, 0x0d, 0xfc, 0xa5, + 0xa2, 0x67, 0x6c, 0xea, 0xac, 0x62, 0x4c, 0x4a, + 0xcf, 0xf0, 0x6d, 0x91, 0xff, 0x00, 0xfd, 0x8b, + 0x78, 0x1b, 0xe9, 0x27, 0xc1, 0x96, 0x7f, 0x78, + 0x8e, 0x06, 0xf1, 0xa9, 0xef, 0x57, 0x9a, 0x9e, + 0x97, 0x2f, 0x25, 0x63, 0x12, 0x55, 0x59, 0xfe, + 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3e, + 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3b, + 0xd5, 0xe6, 0x7a, 0x6c, 0xbc, 0x95, 0x8c, 0x49, + 0x89, 0x59, 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, + 0x37, 0x8d, 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, + 0x37, 0x8d, 0x3b, 0xd5, 0xe6, 0x7a, 0x5c, 0x9c, + 0x95, 0x8c, 0x49, 0x89, 0x59, 0xfe, 0x0c, 0xb3, + 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3e, 0x0c, 0xb3, + 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3b, 0xd5, 0xe6, + 0x7a, 0x5c, 0x9c, 0x95, 0x8c, 0x49, 0x89, 0x59, + 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, + 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, + 0x3b, 0xd5, 0xe6, 0x7a, 0x5c, 0x9c, 0x95, 0x8c, + 0x49, 0x89, 0x59, 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, + 0x70, 0x37, 0x8d, 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, + 0x70, 0x37, 0x8d, 0x3b, 0xd5, 0xe6, 0x7a, 0x5c, + 0x9c, 0x95, 0x8c, 0x49, 0x89, 0x59, 0xfe, 0x0c, + 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3e, 0x0c, + 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3b, 0xd5, + 0xe6, 0x7a, 0x5c, 0x9c, 0x95, 0x8c, 0x49, 0x89, + 0x59, 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, + 0x8d, 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, + 0x8d, 0x3b, 0xd5, 0xe6, 0x7a, 0x5c, 0x9c, 0x95, + 0x8c, 0x49, 0x89, 0x59, 0xfe, 0x0c, 0xb3, 0xfb, + 0xc4, 0x70, 0x37, 0x8d, 0x3e, 0x0c, 0xb3, 0xfb, + 0xc4, 0x70, 0x37, 0x8d, 0x3b, 0xd5, 0xe6, 0x7a, + 0x5c, 0x9c, 0x95, 0x8c, 0x49, 0x89, 0x59, 0xfe, + 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3e, + 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3b, + 0xd5, 0xe6, 0x7a, 0x5c, 0x9c, 0x95, 0x8c, 0x49, + 0x89, 0x59, 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, + 0x37, 0x8d, 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, + 0x37, 0x8d, 0x3b, 0xd5, 0xe6, 0x7a, 0x5c, 0x9c, + 0x95, 0x8c, 0x49, 0x89, 0x59, 0xfe, 0x0c, 0xb3, + 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3e, 0x0c, 0xb3, + 0xfb, 0xc4, 0x70, 0x37, 0x8d, 0x3b, 0xd5, 0xe6, + 0x7a, 0x5c, 0x9c, 0x95, 0x8c, 0x49, 0x89, 0x59, + 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, + 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, 0x70, 0x37, 0x8d, + 0x3b, 0xd5, 0xe6, 0x7a, 0x5c, 0x9c, 0x95, 0x8c, + 0x49, 0x89, 0x59, 0xfe, 0x0c, 0xb3, 0xfb, 0xc4, + 0x70, 0x37, 0x8d, 0x3e, 0x0c, 0xb3, 0xfb, 0xc4, + 0x70, 0x37, 0x8d, 0x3b, 0xb5, 0x3d, 0x2e, 0x4e, + 0x4a, 0xc6, 0x24, 0xc4, 0xac, 0xff, 0x00, 0x06, + 0x59, 0xfd, 0xe2, 0x38, 0x1b, 0xc6, 0x9f, 0x06, + 0x59, 0xfd, 0xe2, 0x38, 0x1b, 0xc6, 0x9d, 0xea, + 0x9e, 0x97, 0x2f, 0x25, 0x63, 0x12, 0x62, 0x56, + 0x7f, 0x83, 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, 0xe3, + 0x4f, 0x83, 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, 0xe3, + 0x4e, 0xf5, 0x79, 0x9e, 0x97, 0x2f, 0x25, 0x63, + 0x12, 0x62, 0x56, 0x7f, 0x83, 0x2c, 0xfe, 0xf1, + 0x1c, 0x0d, 0xe3, 0x4f, 0x83, 0x2c, 0xfe, 0xf1, + 0x1c, 0x0d, 0xe3, 0x4e, 0xf5, 0x79, 0x9e, 0x97, + 0x27, 0x25, 0x63, 0x12, 0x62, 0x56, 0x7f, 0x83, + 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, 0xe3, 0x4f, 0x83, + 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, 0xe3, 0x4e, 0xf5, + 0x79, 0x9e, 0x97, 0x27, 0x25, 0x63, 0x12, 0x62, + 0x56, 0x7f, 0x83, 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, + 0xe3, 0x4f, 0x83, 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, + 0xe3, 0x4e, 0xf5, 0x79, 0x9e, 0x97, 0x27, 0x25, + 0x63, 0x12, 0x62, 0x56, 0x7f, 0x83, 0x2c, 0xfe, + 0xf1, 0x1c, 0x0d, 0xe3, 0x4f, 0x83, 0x2c, 0xfe, + 0xf1, 0x1c, 0x0d, 0xe3, 0x4e, 0xf5, 0x79, 0x9e, + 0x97, 0x27, 0x25, 0x63, 0x12, 0x62, 0x56, 0x7f, + 0x83, 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, 0xe3, 0x4f, + 0x83, 0x2c, 0xfe, 0xf1, 0x1c, 0x0d, 0xe3, 0x4e, + 0xf5, 0x79, 0x9e, 0x97, 0x27, 0x25, 0x63, 0x12, + 0xf7, 0x1b, 0x5f, 0x2c, 0x8d, 0x8a, 0x36, 0x97, + 0xbd, 0xda, 0x1a, 0xc6, 0x8a, 0xb8, 0x93, 0xd8, + 0xde, 0x56, 0x41, 0xb2, 0x39, 0x5c, 0x7e, 0x34, + 0xd9, 0x90, 0xc3, 0xbd, 0xe2, 0x0f, 0x95, 0x48, + 0x65, 0x0f, 0xd9, 0xeb, 0x5b, 0xa6, 0x59, 0xe5, + 0xe3, 0x9d, 0x9e, 0x4a, 0xd6, 0x7f, 0x28, 0xe8, + 0x05, 0xde, 0x59, 0xf9, 0x14, 0x5b, 0x35, 0x74, + 0xe0, 0xb5, 0x7c, 0xa5, 0xa6, 0x74, 0xb7, 0xd3, + 0x06, 0x51, 0x97, 0x8c, 0x92, 0xc1, 0xd2, 0xcd, + 0x43, 0x7b, 0x38, 0xf1, 0x9a, 0x34, 0xd3, 0x79, + 0xa0, 0xae, 0x72, 0x49, 0x71, 0x27, 0x5e, 0xb3, + 0xdb, 0x2b, 0xa7, 0x31, 0x7b, 0xdd, 0x77, 0x20, + 0x71, 0x24, 0x34, 0xd1, 0xa3, 0x78, 0x2e, 0x65, + 0xc2, 0x67, 0x59, 0xd5, 0xba, 0xb4, 0x8a, 0xc6, + 0xd8, 0xf0, 0x81, 0x65, 0xbe, 0x50, 0xed, 0xac, + 0x2c, 0xb7, 0xca, 0x1d, 0xbf, 0x95, 0x42, 0xce, + 0xfc, 0xeb, 0x2b, 0xb1, 0xbf, 0x96, 0x27, 0x5d, + 0x5c, 0xfb, 0x3b, 0x98, 0xcc, 0x2d, 0x6d, 0x5a, + 0x2a, 0x09, 0xd7, 0xe3, 0x28, 0xef, 0x86, 0x72, + 0x7f, 0xbc, 0x47, 0x2a, 0x3e, 0x35, 0xe3, 0x6c, + 0x7d, 0xe6, 0xd7, 0xec, 0xcf, 0x85, 0x57, 0xa8, + 0x10, 0x59, 0x3e, 0x19, 0xc9, 0xfe, 0xf1, 0x1c, + 0xa8, 0xf8, 0xd3, 0xe1, 0x9c, 0x9f, 0xef, 0x11, + 0xca, 0x8f, 0x8d, 0x56, 0xe8, 0x12, 0x81, 0x05, + 0x93, 0xe1, 0x9c, 0x9f, 0xef, 0x11, 0xca, 0x8f, + 0x8d, 0x3e, 0x19, 0xc9, 0xfe, 0xf1, 0x1c, 0xa8, + 0xf8, 0xd5, 0x6e, 0x81, 0x28, 0x10, 0x59, 0x3e, + 0x19, 0xc9, 0xfe, 0xf1, 0x1c, 0xa8, 0xf8, 0xd3, + 0xe1, 0x9c, 0x9f, 0xef, 0x11, 0xca, 0x8f, 0x8d, + 0x56, 0xe8, 0x12, 0x81, 0x05, 0x93, 0xe1, 0x9c, + 0x9f, 0xef, 0x11, 0xca, 0x8f, 0x8d, 0x3e, 0x19, + 0xc9, 0xfe, 0xf1, 0x1c, 0xa8, 0xf8, 0xd5, 0x6e, + 0x81, 0x28, 0x10, 0x59, 0x3e, 0x19, 0xc9, 0xfe, + 0xf1, 0x1c, 0xa8, 0xf8, 0xd3, 0xe1, 0x9c, 0x9f, + 0xef, 0x11, 0xca, 0x8f, 0x8d, 0x56, 0xe8, 0x12, + 0x81, 0x05, 0x93, 0xe1, 0x9c, 0x9f, 0xef, 0x11, + 0xca, 0x8f, 0x8d, 0x3e, 0x19, 0xc9, 0xfe, 0xf1, + 0x1c, 0xa8, 0xf8, 0xd5, 0x6e, 0x81, 0x28, 0x10, + 0x59, 0x3e, 0x19, 0xc9, 0xfe, 0xf1, 0x1c, 0xa8, + 0xf8, 0xd3, 0xe1, 0x9c, 0x9f, 0xef, 0x11, 0xca, + 0x8f, 0x8d, 0x56, 0xe8, 0x12, 0x81, 0x05, 0x93, + 0xe1, 0x9c, 0x9f, 0xef, 0x11, 0xca, 0x8f, 0x8d, + 0x3e, 0x19, 0xc9, 0xfe, 0xf1, 0x1c, 0xa8, 0xf8, + 0xd5, 0x6e, 0x81, 0x28, 0x10, 0x59, 0x3e, 0x19, + 0xc9, 0xfe, 0xf1, 0x1c, 0xa8, 0xf8, 0xd3, 0xe1, + 0x9c, 0x9f, 0xef, 0x11, 0xca, 0x8f, 0x8d, 0x56, + 0xe8, 0x12, 0x81, 0x05, 0x93, 0xe1, 0x9c, 0x9f, + 0xef, 0x11, 0xca, 0x8f, 0x8d, 0x3e, 0x19, 0xc9, + 0xfe, 0xf1, 0x1c, 0xa8, 0xf8, 0xd5, 0x6e, 0x8b, + 0x34, 0x41, 0x63, 0xf8, 0x67, 0x27, 0xfb, 0xc4, + 0x72, 0xa3, 0xe3, 0x4f, 0x86, 0x72, 0x7f, 0xbc, + 0x47, 0x2a, 0x3e, 0x35, 0x5c, 0xa2, 0xc5, 0x29, + 0xb9, 0xdd, 0x41, 0x64, 0xf8, 0x67, 0x27, 0xfb, + 0xc4, 0x72, 0xa3, 0xe3, 0x4f, 0x86, 0x72, 0x7f, + 0xbc, 0x47, 0x2a, 0x3e, 0x35, 0x5b, 0xd0, 0xb3, + 0x40, 0x82, 0xc7, 0xf0, 0xce, 0x4f, 0xf7, 0x88, + 0xe5, 0x47, 0xc6, 0x9f, 0x0c, 0xe4, 0xff, 0x00, + 0x78, 0x8e, 0x54, 0x7c, 0x6a, 0xb7, 0x40, 0x94, + 0x08, 0x2c, 0x9f, 0x0c, 0xe4, 0xff, 0x00, 0x78, + 0x8e, 0x54, 0x7c, 0x69, 0xf0, 0xce, 0x4f, 0xf7, + 0x88, 0xe5, 0x47, 0xc6, 0xab, 0x74, 0x09, 0x40, + 0x82, 0xc9, 0xf0, 0xce, 0x4f, 0xf7, 0x88, 0xe5, + 0x47, 0xc6, 0x9f, 0x0c, 0xe4, 0xff, 0x00, 0x78, + 0x8e, 0x54, 0x7c, 0x6a, 0xb7, 0x40, 0x94, 0x08, + 0x2c, 0x9f, 0x0c, 0xe4, 0xff, 0x00, 0x78, 0x8e, + 0x54, 0x7c, 0x69, 0xf0, 0xce, 0x4f, 0xf7, 0x88, + 0xe5, 0x47, 0xc6, 0xab, 0x74, 0x09, 0x40, 0x82, + 0xc9, 0xf0, 0xce, 0x4f, 0xf7, 0x88, 0xe5, 0x47, + 0xc6, 0x9f, 0x0c, 0xe4, 0xff, 0x00, 0x78, 0x8e, + 0x54, 0x7c, 0x6a, 0xb7, 0x40, 0x94, 0x08, 0x2c, + 0x9f, 0x0c, 0xe4, 0xff, 0x00, 0x78, 0x8e, 0x54, + 0x7c, 0x69, 0xf0, 0xce, 0x4f, 0xf7, 0x88, 0xe5, + 0x47, 0xc6, 0xab, 0x74, 0x09, 0x40, 0x82, 0xc9, + 0xf0, 0xce, 0x4f, 0xf7, 0x88, 0xe5, 0x47, 0xc6, + 0x9f, 0x0c, 0xe4, 0xff, 0x00, 0x78, 0x8e, 0x54, + 0x7c, 0x6a, 0xb7, 0x40, 0x94, 0x08, 0x2c, 0x9f, + 0x0c, 0xe4, 0xff, 0x00, 0x78, 0x8e, 0x54, 0x7c, + 0x69, 0xf0, 0xce, 0x4f, 0xf7, 0x88, 0xe5, 0x47, + 0xc6, 0xab, 0x74, 0x09, 0x40, 0x82, 0xc9, 0xf0, + 0xce, 0x4f, 0xf7, 0x88, 0xe5, 0x47, 0xc6, 0x9f, + 0x0c, 0xe4, 0xff, 0x00, 0x78, 0x8e, 0x54, 0x7c, + 0x6a, 0xb7, 0x40, 0x94, 0x08, 0x2c, 0x9f, 0x0c, + 0xe4, 0xff, 0x00, 0x78, 0x8e, 0x54, 0x7c, 0x6b, + 0x7d, 0x8e, 0x43, 0x95, 0xdb, 0x5e, 0x45, 0x3c, + 0x57, 0xc2, 0x49, 0x23, 0x75, 0x5a, 0xcc, 0x4c, + 0xd2, 0x7b, 0x85, 0x55, 0x28, 0x17, 0x76, 0x47, + 0xfc, 0xde, 0xd6, 0x9f, 0x3f, 0xe4, 0x28, 0x2c, + 0x39, 0xa7, 0xbe, 0xc9, 0xdc, 0xf0, 0x2e, 0x55, + 0xd5, 0x9a, 0x7b, 0xec, 0x9d, 0xcf, 0x02, 0xe5, + 0x41, 0xee, 0x0f, 0xdb, 0x47, 0xe7, 0x37, 0xc2, + 0xa6, 0x94, 0x2c, 0x1f, 0xb6, 0x8f, 0xce, 0x6f, + 0x85, 0x4d, 0x20, 0x28, 0xdc, 0xdb, 0xde, 0xac, + 0xfe, 0xd3, 0xe5, 0x0a, 0x49, 0x46, 0xe6, 0xde, + 0xf5, 0x67, 0xf6, 0x9f, 0x28, 0x41, 0x8c, 0xab, + 0xde, 0xaf, 0x3c, 0xf3, 0xf5, 0x8a, 0x93, 0x51, + 0x99, 0x57, 0xbd, 0x5e, 0x79, 0xe7, 0xeb, 0x15, + 0x26, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x35, 0xa8, 0x27, 0x79, 0x47, + 0xb6, 0x54, 0xe8, 0xd6, 0xa0, 0x9d, 0xe5, 0x1e, + 0xd9, 0x40, 0x5e, 0xa2, 0xfd, 0xab, 0x3c, 0xe6, + 0xf8, 0x42, 0xf2, 0xbd, 0x45, 0xfb, 0x56, 0x79, + 0xcd, 0xf0, 0x84, 0x1c, 0x9b, 0x65, 0xfc, 0xca, + 0x3f, 0xb1, 0x1f, 0x59, 0xca, 0x05, 0x4f, 0x6d, + 0x97, 0xf3, 0x38, 0xfe, 0xc4, 0x7d, 0x67, 0x28, + 0x14, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x4e, + 0xd6, 0xb4, 0x0a, 0x13, 0xa0, 0x6b, 0xec, 0x2c, + 0xb8, 0x39, 0xa4, 0xb5, 0xc2, 0x8e, 0x1a, 0xc1, + 0x14, 0x21, 0x4d, 0xe4, 0x70, 0x64, 0x4e, 0xb8, + 0xb7, 0x32, 0x49, 0x24, 0x97, 0x25, 0xc3, 0x0c, + 0x45, 0xb4, 0x60, 0x7e, 0xbd, 0x24, 0x6b, 0x5c, + 0x39, 0xe7, 0xf3, 0x7b, 0xaa, 0xe8, 0x3c, 0xe1, + 0xe1, 0x41, 0xc2, 0xbd, 0x36, 0x29, 0x5c, 0xd2, + 0xf6, 0xb1, 0xc5, 0x8d, 0xd0, 0xe7, 0x01, 0x50, + 0x3b, 0x65, 0x79, 0x53, 0xbb, 0x37, 0x49, 0xad, + 0xb3, 0x1b, 0x23, 0xff, 0x00, 0x16, 0x1c, 0x6d, + 0xed, 0x80, 0x42, 0x08, 0x48, 0xe3, 0x92, 0x47, + 0x61, 0x89, 0x8e, 0x7b, 0xfe, 0x6b, 0x7c, 0x62, + 0x7b, 0x8b, 0xcb, 0x9a, 0xf6, 0xb8, 0xb5, 0xc0, + 0x87, 0x03, 0x4c, 0x27, 0x41, 0x53, 0x9b, 0x29, + 0x86, 0x1b, 0x8b, 0xab, 0xc9, 0x34, 0x36, 0x08, + 0xb4, 0x9f, 0x38, 0xea, 0xef, 0x2d, 0x79, 0xc5, + 0xa6, 0x2d, 0xa2, 0x30, 0x81, 0xa2, 0xe2, 0x48, + 0xc8, 0xed, 0x3a, 0x80, 0xa0, 0x8c, 0xf6, 0x6b, + 0x9c, 0x41, 0x9c, 0xd3, 0xf1, 0x38, 0x62, 0x6b, + 0x70, 0x9c, 0x45, 0xbb, 0xa4, 0x68, 0x5a, 0x95, + 0xa2, 0xf2, 0x7b, 0xf9, 0x76, 0x99, 0xec, 0xcb, + 0xb0, 0x19, 0xa1, 0x87, 0x9b, 0xfd, 0x6f, 0x92, + 0x07, 0x94, 0xea, 0x70, 0x85, 0x05, 0x6d, 0x96, + 0xde, 0x5e, 0xb2, 0x79, 0x20, 0x6b, 0x5d, 0xcc, + 0xe9, 0x90, 0x03, 0x42, 0x49, 0xdc, 0x6a, 0x0e, + 0x44, 0x5d, 0xf7, 0xb9, 0x2d, 0xed, 0x91, 0x80, + 0x48, 0x1a, 0xe9, 0x2e, 0x49, 0x0c, 0x63, 0x09, + 0x2e, 0xa9, 0xa6, 0x83, 0x5f, 0x91, 0x6f, 0x3b, + 0x31, 0x98, 0x80, 0x46, 0x38, 0x9d, 0x30, 0x15, + 0x30, 0x35, 0xe3, 0x18, 0x1d, 0xa4, 0x11, 0x28, + 0xb2, 0xe6, 0xb9, 0xae, 0x73, 0x5c, 0x28, 0xe6, + 0x9c, 0x24, 0x1d, 0x60, 0x85, 0xd7, 0x94, 0x59, + 0x7b, 0x76, 0x61, 0x15, 0xbb, 0xbf, 0x67, 0xe5, + 0x4b, 0xe6, 0x37, 0x49, 0xe1, 0x41, 0xca, 0xe8, + 0xe4, 0x69, 0x68, 0x2c, 0x70, 0x2f, 0xd2, 0xd0, + 0x41, 0x15, 0xae, 0xf6, 0xea, 0xdc, 0xec, 0xbb, + 0x30, 0x63, 0x39, 0xc7, 0x5b, 0x4a, 0xd6, 0x6b, + 0x2e, 0x2c, 0x34, 0xee, 0xe8, 0x53, 0xb9, 0x2b, + 0xd9, 0x7d, 0x9b, 0xdf, 0x5f, 0x3d, 0xb8, 0x8c, + 0x2c, 0xad, 0xbb, 0x35, 0x80, 0x05, 0x5a, 0xda, + 0x72, 0x57, 0x0d, 0xae, 0xd1, 0xe6, 0x6c, 0xbc, + 0x64, 0xb7, 0x13, 0x93, 0x0e, 0x30, 0x25, 0x8c, + 0x81, 0x40, 0xd2, 0x74, 0xee, 0x68, 0xa2, 0x08, + 0xa6, 0x47, 0x24, 0x81, 0xce, 0x63, 0x1c, 0xf6, + 0xb3, 0x4b, 0xcb, 0x41, 0x34, 0xe0, 0x46, 0xb1, + 0xf2, 0x38, 0x35, 0x8d, 0x2e, 0x7b, 0xbc, 0x96, + 0x34, 0x54, 0x9a, 0x6e, 0xab, 0x2e, 0x53, 0x35, + 0x9c, 0xd9, 0xcd, 0xec, 0x36, 0xa7, 0xfe, 0xda, + 0xf2, 0x22, 0x40, 0xa5, 0x34, 0xea, 0x77, 0x85, + 0x70, 0xec, 0xc4, 0x58, 0x33, 0x57, 0x49, 0x26, + 0x86, 0xdb, 0x47, 0x23, 0x9e, 0x77, 0x88, 0xf1, + 0x50, 0x43, 0xbd, 0x8e, 0x61, 0x2d, 0x78, 0x2d, + 0x70, 0xdc, 0x22, 0x84, 0x77, 0x17, 0xb7, 0x5b, + 0xce, 0xd6, 0x73, 0x8e, 0x89, 0xe1, 0x94, 0x07, + 0x11, 0x69, 0xa5, 0x0f, 0x64, 0xe8, 0x52, 0x9b, + 0x4b, 0x10, 0x7e, 0x6a, 0xc9, 0x58, 0xdf, 0x16, + 0xea, 0x38, 0xde, 0x37, 0xce, 0x2d, 0x0a, 0x52, + 0xf6, 0xe2, 0x36, 0x67, 0x76, 0xd9, 0x63, 0xc8, + 0x75, 0xbb, 0xe0, 0x16, 0xf2, 0x37, 0x73, 0xc7, + 0xf2, 0x4f, 0x6e, 0xa0, 0x20, 0xa9, 0xe9, 0xe2, + 0x28, 0xb6, 0xdd, 0x5b, 0xbe, 0xda, 0xe6, 0x5b, + 0x77, 0xf9, 0x51, 0x38, 0xb6, 0xbb, 0xfd, 0x95, + 0xa9, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x3b, 0x0a, + 0x53, 0x66, 0xff, 0x00, 0x9d, 0xdb, 0x7f, 0x6f, + 0xea, 0x15, 0x16, 0xa5, 0x36, 0x6b, 0xf9, 0xdd, + 0xb7, 0xf6, 0xbe, 0xa1, 0x41, 0x37, 0x98, 0x7b, + 0xec, 0xbe, 0x77, 0xc8, 0x17, 0x3a, 0xe8, 0xcc, + 0x3d, 0xf6, 0x6f, 0x3b, 0xe4, 0x0b, 0x9d, 0x01, + 0x1b, 0xe5, 0x0f, 0xcb, 0x75, 0x11, 0xbe, 0x50, + 0xfc, 0xb7, 0x50, 0x6b, 0xdb, 0x1f, 0x79, 0xb5, + 0xfb, 0x33, 0xe1, 0x55, 0xf5, 0x60, 0xdb, 0x1f, + 0x79, 0xb5, 0xfb, 0x33, 0xe1, 0x55, 0xf4, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0x83, 0xa8, + 0xd3, 0x5a, 0xb5, 0x66, 0x57, 0xd0, 0xe5, 0x90, + 0xda, 0x06, 0x59, 0xc1, 0x2f, 0x3d, 0x1e, 0x27, + 0x17, 0xb4, 0x03, 0x50, 0x06, 0xf0, 0x55, 0x57, + 0x6a, 0x2a, 0xd9, 0x9b, 0x5b, 0xe5, 0x72, 0xc3, + 0x65, 0xed, 0xf7, 0x0e, 0x80, 0xb6, 0x2a, 0x30, + 0x34, 0x13, 0x50, 0x43, 0x7b, 0x05, 0x04, 0x26, + 0x63, 0x9c, 0xb6, 0xf2, 0xd8, 0xc2, 0x2c, 0xe2, + 0x80, 0xeb, 0xc7, 0x10, 0xa3, 0xb4, 0x77, 0x02, + 0x98, 0xcd, 0xef, 0xa2, 0xcb, 0x45, 0xb4, 0x71, + 0xd9, 0xc1, 0x20, 0x92, 0x2c, 0x4e, 0x2e, 0x60, + 0xad, 0x69, 0xda, 0x50, 0xb9, 0x95, 0xbe, 0x51, + 0x0c, 0x01, 0xd6, 0x17, 0x2f, 0x9e, 0x42, 0x68, + 0xe6, 0xb9, 0xa4, 0x51, 0xb4, 0x35, 0x3a, 0x82, + 0x9d, 0xce, 0xf2, 0xc6, 0x5e, 0x7b, 0x2b, 0x9d, + 0x75, 0x0d, 0xb6, 0x18, 0xa9, 0x86, 0x53, 0x42, + 0xed, 0x1b, 0x9a, 0x42, 0x0e, 0x2b, 0xc8, 0xad, + 0x33, 0x1c, 0x9a, 0x4c, 0xce, 0x08, 0x1b, 0x6f, + 0x71, 0x6e, 0xea, 0x48, 0xd6, 0x68, 0x69, 0xa6, + 0xbd, 0x03, 0xce, 0x5a, 0xf6, 0x82, 0x28, 0xa3, + 0xb4, 0xcb, 0x4c, 0x6c, 0x6b, 0x31, 0xc4, 0x4b, + 0x8b, 0x40, 0x15, 0xd0, 0xcd, 0x74, 0x5e, 0xef, + 0xae, 0x2c, 0xac, 0x32, 0x77, 0x65, 0x76, 0xb3, + 0x36, 0xe2, 0x69, 0x9d, 0x8a, 0x59, 0x1b, 0xe4, + 0xef, 0x9d, 0x3a, 0x77, 0x05, 0x13, 0x68, 0xfd, + 0xd3, 0x2b, 0xfb, 0x27, 0x78, 0x18, 0x82, 0x09, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x17, 0x6e, + 0x47, 0xfc, 0xde, 0xd3, 0xed, 0x3e, 0x42, 0xb8, + 0x97, 0x6e, 0x47, 0xfc, 0xde, 0xd3, 0xed, 0x3e, + 0x42, 0x82, 0xc3, 0x9a, 0x7b, 0xeb, 0xfb, 0x9e, + 0x05, 0xca, 0xba, 0xb3, 0x4f, 0x7d, 0x7f, 0x73, + 0xc0, 0xb9, 0x50, 0x7b, 0x83, 0xf6, 0xd1, 0xf9, + 0xcd, 0xf0, 0xa9, 0xa5, 0x0b, 0x07, 0xed, 0xa3, + 0xf3, 0x9b, 0xe1, 0x53, 0x48, 0x0a, 0x37, 0x36, + 0xf7, 0xab, 0x3f, 0xb4, 0xf9, 0x42, 0x92, 0x51, + 0xb9, 0xb7, 0xbd, 0x59, 0xfd, 0xa7, 0xca, 0x10, + 0x63, 0x2a, 0xf7, 0xab, 0xcf, 0x3c, 0xfd, 0x62, + 0xa4, 0xd4, 0x66, 0x55, 0xef, 0x57, 0x9e, 0x79, + 0xfa, 0xc5, 0x49, 0xd5, 0x01, 0x12, 0xa9, 0x54, + 0x04, 0x4a, 0xa5, 0x50, 0x11, 0x2a, 0x95, 0x40, + 0x44, 0xaa, 0x55, 0x01, 0x12, 0xa9, 0x54, 0x04, + 0x4a, 0xa5, 0x50, 0x11, 0x2a, 0x95, 0x40, 0x44, + 0xaa, 0x55, 0x01, 0x12, 0xa9, 0x54, 0x04, 0x4a, + 0xa5, 0x50, 0x11, 0x2a, 0x95, 0x40, 0x44, 0xaa, + 0x55, 0x01, 0x12, 0xa9, 0x54, 0x04, 0x4a, 0xa5, + 0x50, 0x11, 0x2a, 0x95, 0x40, 0x44, 0xaa, 0x55, + 0x01, 0x12, 0xa9, 0x54, 0x04, 0x4a, 0xa5, 0x50, + 0x11, 0x2a, 0x95, 0x40, 0x44, 0xaa, 0x55, 0x01, + 0x12, 0xa9, 0x54, 0x04, 0x4a, 0xa5, 0x50, 0x11, + 0x2a, 0x95, 0x40, 0x44, 0xaa, 0x55, 0x01, 0x12, + 0xa9, 0x54, 0x04, 0x4a, 0xa5, 0x50, 0x06, 0xb5, + 0x04, 0xef, 0x28, 0xf6, 0xca, 0x9d, 0x07, 0x4a, + 0x82, 0x77, 0x94, 0x7b, 0x65, 0x01, 0x7a, 0x8b, + 0xf6, 0xac, 0xf3, 0x9b, 0xe1, 0x0b, 0xca, 0xf5, + 0x19, 0xc3, 0x23, 0x1c, 0x75, 0x07, 0x34, 0x9e, + 0xd0, 0x21, 0x07, 0x26, 0xd9, 0x7f, 0x32, 0x8b, + 0xec, 0x47, 0xd6, 0x72, 0x81, 0x56, 0x1d, 0xb3, + 0x8d, 0xc2, 0xf6, 0x09, 0x69, 0xe2, 0xbe, 0x3c, + 0x20, 0xf6, 0x5a, 0x49, 0xf9, 0x55, 0x79, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x07, 0x76, + 0x49, 0xfc, 0xde, 0xd3, 0xed, 0x07, 0x80, 0xa6, + 0x7c, 0x69, 0x9b, 0xde, 0x13, 0xb8, 0xf2, 0xb1, + 0x92, 0x1a, 0x66, 0xf6, 0x84, 0xfa, 0xc1, 0xe0, + 0x2b, 0xd6, 0x7b, 0xfc, 0xde, 0xe8, 0x8d, 0x45, + 0xe6, 0x87, 0x71, 0x06, 0xfb, 0x7d, 0x9c, 0x96, + 0x68, 0xa3, 0x98, 0x5d, 0xc0, 0x39, 0xc1, 0x5c, + 0x2e, 0x3a, 0x40, 0x2b, 0x66, 0x42, 0x3d, 0x8b, + 0x3f, 0x6c, 0x0e, 0x70, 0x7e, 0x20, 0xe8, 0x9c, + 0x5b, 0xe4, 0x9a, 0x8a, 0x8f, 0x02, 0x85, 0xd5, + 0xda, 0x5b, 0xac, 0xe6, 0xe6, 0x2f, 0x20, 0x9f, + 0xd5, 0xc8, 0xc2, 0x4f, 0x77, 0x4a, 0x09, 0x87, + 0x42, 0x6c, 0x72, 0x6c, 0xd2, 0xba, 0x39, 0xcb, + 0x8e, 0x65, 0xa7, 0xb0, 0xd3, 0x5e, 0xfa, 0xef, + 0x30, 0xfb, 0x56, 0x75, 0x95, 0xde, 0x6b, 0x0f, + 0xb7, 0x2f, 0x79, 0xec, 0xb0, 0x7e, 0x92, 0xd5, + 0xb5, 0xb2, 0x45, 0x1d, 0xb4, 0x30, 0xc4, 0x45, + 0x27, 0x95, 0xd2, 0xbe, 0x9a, 0x74, 0xe1, 0xd6, + 0xb7, 0xe5, 0xb3, 0xb0, 0x6c, 0xe0, 0xba, 0x3f, + 0xb5, 0xb5, 0x8a, 0x58, 0xda, 0x77, 0x74, 0xea, + 0xf9, 0x10, 0x70, 0xe4, 0x13, 0xfb, 0x46, 0xd2, + 0xdc, 0x4d, 0xb9, 0x20, 0x94, 0x8e, 0xd6, 0x26, + 0xd1, 0x63, 0x67, 0xa5, 0x7c, 0x56, 0x59, 0xac, + 0xb1, 0xe8, 0x7b, 0x1b, 0x56, 0x9d, 0xe3, 0x47, + 0x50, 0xad, 0x3b, 0x25, 0xa3, 0x37, 0xa9, 0xd0, + 0x39, 0x97, 0xeb, 0xed, 0x8e, 0x25, 0xef, 0x25, + 0xa7, 0x56, 0xe6, 0xd5, 0xd1, 0x56, 0x1a, 0x70, + 0x14, 0x1a, 0xb6, 0x5d, 0xbc, 0xf6, 0x74, 0xd9, + 0x25, 0x25, 0xce, 0x6b, 0x1d, 0x26, 0x22, 0x7f, + 0x3b, 0x40, 0xd3, 0xc2, 0xba, 0xe0, 0xcb, 0xc4, + 0x39, 0xa8, 0xbf, 0x93, 0x31, 0xb6, 0xc4, 0x25, + 0x2f, 0x78, 0xe7, 0x05, 0x4b, 0x49, 0xf2, 0x75, + 0xa8, 0xed, 0x9e, 0xbc, 0x8e, 0xd3, 0x34, 0x8e, + 0x49, 0x4e, 0x18, 0xde, 0xd7, 0x46, 0xf7, 0x6f, + 0x07, 0x52, 0x9d, 0xf0, 0xbb, 0x5b, 0xb3, 0x93, + 0x8c, 0xcd, 0xd2, 0x5c, 0x35, 0x9d, 0x5f, 0x8c, + 0xc8, 0xe9, 0xb1, 0x0c, 0x25, 0x87, 0x4d, 0x34, + 0x69, 0x41, 0x1b, 0x9d, 0xba, 0x17, 0x66, 0xd7, + 0x26, 0x07, 0x35, 0xec, 0x2f, 0xa8, 0x73, 0x48, + 0x23, 0x48, 0x1b, 0xdd, 0x95, 0xdd, 0xb3, 0x00, + 0x34, 0xdf, 0xcf, 0xf9, 0xd0, 0xdb, 0x92, 0xd3, + 0xdb, 0xc5, 0xc4, 0xa2, 0xef, 0x5d, 0x6e, 0xeb, + 0xb9, 0x5d, 0x6a, 0xdc, 0x16, 0xe5, 0xc7, 0x9a, + 0x68, 0xae, 0x80, 0x3b, 0x67, 0xba, 0xa4, 0xf6, + 0x5d, 0xe0, 0xdc, 0xdc, 0xdb, 0x1f, 0xff, 0x00, + 0x73, 0x03, 0x9a, 0x3b, 0x24, 0x57, 0x8d, 0x04, + 0x76, 0x5f, 0x7f, 0x73, 0x97, 0xdc, 0x7b, 0x44, + 0x1a, 0x4b, 0x45, 0x1e, 0xd3, 0xa8, 0x8d, 0xda, + 0xd1, 0x4c, 0x47, 0x36, 0xcf, 0xe7, 0x12, 0xf3, + 0x73, 0xc2, 0xeb, 0x3b, 0xb9, 0x0d, 0x1b, 0x23, + 0x0f, 0x8a, 0x5c, 0x7b, 0x4b, 0x46, 0xce, 0xbe, + 0xdf, 0x9c, 0xbb, 0xb1, 0xba, 0x22, 0x33, 0x73, + 0x19, 0x8d, 0x8f, 0x75, 0x34, 0x3b, 0x48, 0x3a, + 0xfb, 0x6b, 0x30, 0x6c, 0xc6, 0x62, 0xdb, 0xa6, + 0x1b, 0x8c, 0x11, 0xc1, 0x1b, 0x83, 0x9d, 0x36, + 0x21, 0x4a, 0x0d, 0x3a, 0x10, 0x79, 0xb4, 0xb6, + 0x93, 0x28, 0xda, 0x28, 0x21, 0x90, 0x82, 0x03, + 0x83, 0x43, 0xc6, 0x8c, 0x4d, 0x90, 0x50, 0x77, + 0xd7, 0x63, 0xa1, 0xf6, 0x21, 0x9f, 0x4c, 0x05, + 0x3f, 0xe1, 0xb3, 0xff, 0x00, 0xcb, 0xa7, 0xfb, + 0xeb, 0x83, 0x3f, 0xcc, 0x23, 0xb9, 0xcd, 0xf9, + 0xeb, 0x77, 0x55, 0xb0, 0xe1, 0x6b, 0x5e, 0x37, + 0x48, 0xde, 0x53, 0x1b, 0x4f, 0x24, 0x43, 0x2a, + 0x0f, 0x87, 0xca, 0xbd, 0x91, 0x8e, 0x77, 0x64, + 0x06, 0xd7, 0x89, 0x07, 0x3f, 0x31, 0xed, 0xaf, + 0xc8, 0xa6, 0xd6, 0x0d, 0x58, 0xee, 0xd4, 0x47, + 0x17, 0xf7, 0x54, 0x5e, 0x65, 0x74, 0xe7, 0xe7, + 0xd2, 0x5c, 0x37, 0x5b, 0x26, 0x01, 0xbd, 0x8c, + 0x04, 0x0f, 0x08, 0x53, 0x9b, 0x37, 0x34, 0x47, + 0x28, 0x32, 0x4a, 0x7c, 0x7b, 0x47, 0xc8, 0x5b, + 0x5d, 0xc0, 0x42, 0xac, 0x5a, 0x35, 0xf7, 0x37, + 0xd0, 0xb5, 0xda, 0x5d, 0x3c, 0xad, 0x2e, 0xfe, + 0xd3, 0xb4, 0xa0, 0x90, 0xda, 0xa8, 0xda, 0xcc, + 0xe6, 0x4c, 0x3a, 0x31, 0xb1, 0x8e, 0x3d, 0xba, + 0x53, 0xe4, 0x51, 0x0a, 0x4f, 0x69, 0x67, 0x13, + 0x67, 0x33, 0x91, 0xa4, 0x46, 0x04, 0x7c, 0x91, + 0xfd, 0x2a, 0x31, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x14, 0xa6, 0xcd, 0x7f, 0x3b, 0xb6, 0xfe, 0xd7, + 0xd4, 0x2a, 0x2d, 0x4b, 0x6c, 0xb4, 0x4e, 0x7e, + 0x75, 0x13, 0xa9, 0xa2, 0x36, 0xb9, 0xc7, 0xb4, + 0x5a, 0x42, 0x09, 0x9c, 0xc3, 0xdf, 0x66, 0xf3, + 0xbe, 0x40, 0xb9, 0xd6, 0xfb, 0xe7, 0x07, 0x5e, + 0x4c, 0x46, 0xac, 0x5f, 0x20, 0x5a, 0x10, 0x11, + 0xbe, 0x50, 0xfc, 0xb7, 0x51, 0x1b, 0xe5, 0x0f, + 0xcb, 0x75, 0x06, 0xbd, 0xb1, 0xf7, 0x9b, 0x5f, + 0xb3, 0x3e, 0x15, 0x5f, 0x56, 0x0d, 0xb2, 0xf7, + 0x9b, 0x63, 0xbd, 0x19, 0xf0, 0xaa, 0xfd, 0x0a, + 0x02, 0x25, 0x0a, 0x50, 0xa0, 0x22, 0x50, 0xa5, + 0x0a, 0x02, 0x25, 0x0a, 0x50, 0xa0, 0x22, 0x50, + 0xa5, 0x0a, 0x02, 0x25, 0x0a, 0x50, 0xa0, 0x22, + 0x50, 0xa5, 0x0a, 0x02, 0x25, 0x0a, 0x50, 0xa0, + 0x22, 0x50, 0xa5, 0x0a, 0x02, 0x25, 0x0a, 0x50, + 0xa0, 0xc1, 0xd4, 0x55, 0x8f, 0x68, 0x6d, 0x6e, + 0x6e, 0x22, 0xb0, 0x30, 0x44, 0xf9, 0x70, 0xc3, + 0xe3, 0x60, 0x69, 0x75, 0x2b, 0x87, 0x79, 0x57, + 0x74, 0xae, 0xe6, 0xe7, 0xb9, 0xc3, 0x1a, 0xd6, + 0x36, 0xe9, 0xc1, 0xad, 0x14, 0x00, 0x35, 0xb4, + 0x00, 0x7f, 0x65, 0x07, 0x3c, 0xd6, 0x37, 0xb0, + 0xc6, 0xe9, 0x26, 0x82, 0x48, 0xd8, 0x06, 0x97, + 0x3d, 0x8e, 0x68, 0xe1, 0x21, 0x4b, 0xed, 0x59, + 0xf1, 0xec, 0x7e, 0xc7, 0x89, 0x46, 0xdc, 0xe6, + 0xd9, 0x9d, 0xd4, 0x26, 0x1b, 0x89, 0xdd, 0x24, + 0x6e, 0xa5, 0x5a, 0x43, 0x46, 0xae, 0xd3, 0x56, + 0xab, 0x9b, 0xcb, 0xab, 0xbc, 0x26, 0xe6, 0x43, + 0x21, 0x63, 0x70, 0xb0, 0x10, 0x05, 0x07, 0x70, + 0x04, 0x1a, 0x0e, 0xad, 0x3b, 0xdc, 0x6a, 0x77, + 0x68, 0xcf, 0xfd, 0xa6, 0x57, 0xf6, 0x2e, 0xf0, + 0x31, 0x41, 0x90, 0x6a, 0x56, 0xe9, 0xef, 0x2e, + 0xae, 0x59, 0x1b, 0x27, 0x90, 0xc8, 0xd8, 0x45, + 0x23, 0x69, 0x00, 0x00, 0x34, 0x68, 0xef, 0x20, + 0xd2, 0x89, 0x44, 0xa1, 0x40, 0x44, 0xa1, 0x4a, + 0x14, 0x04, 0x4a, 0x14, 0xa1, 0x40, 0x44, 0xa1, + 0x4a, 0x14, 0x04, 0x4a, 0x14, 0xa1, 0x40, 0x44, + 0xa1, 0x4a, 0x14, 0x04, 0x4a, 0x14, 0xa1, 0x40, + 0x44, 0xa1, 0x4a, 0x14, 0x04, 0x4a, 0x14, 0xa1, + 0x40, 0x5d, 0xb9, 0x1f, 0xf3, 0x7b, 0x4f, 0xb4, + 0xf9, 0x0a, 0xe2, 0xa1, 0x5d, 0xd9, 0x1f, 0xf3, + 0x7b, 0x4f, 0x3f, 0xe4, 0x28, 0x2c, 0x19, 0xa7, + 0xbe, 0xbf, 0xb9, 0xe0, 0x5c, 0xab, 0xab, 0x34, + 0x3f, 0xf7, 0xb2, 0x77, 0x3c, 0x0b, 0x95, 0x07, + 0xb8, 0x3f, 0x6d, 0x1f, 0x9c, 0xdf, 0x0a, 0x9a, + 0x50, 0xb0, 0x7e, 0xda, 0x3f, 0x39, 0xbe, 0x15, + 0x35, 0x54, 0x05, 0x1b, 0x9b, 0x7b, 0xd5, 0x9f, + 0xda, 0x7c, 0xa1, 0x49, 0x28, 0xdc, 0xdb, 0xde, + 0xac, 0xfe, 0xd3, 0xe5, 0x08, 0x31, 0x95, 0x68, + 0xba, 0xbc, 0xf3, 0xcf, 0xd6, 0x2a, 0x4e, 0xa1, + 0x46, 0x65, 0x7e, 0xf5, 0x79, 0xe7, 0x9f, 0xac, + 0x54, 0x92, 0x0c, 0xd4, 0x25, 0x42, 0xc2, 0x20, + 0xcd, 0x42, 0x54, 0x2c, 0x22, 0x0c, 0xd4, 0x25, + 0x42, 0xc2, 0x20, 0xcd, 0x42, 0x54, 0x2c, 0x22, + 0x0c, 0xd4, 0x25, 0x42, 0xc2, 0x20, 0xcd, 0x42, + 0x54, 0x2c, 0x22, 0x0c, 0xd4, 0x25, 0x42, 0xc2, + 0x20, 0xcd, 0x42, 0x54, 0x2c, 0x22, 0x0c, 0xd4, + 0x25, 0x42, 0xc2, 0x20, 0xcd, 0x42, 0x54, 0x2c, + 0x22, 0x0c, 0xd4, 0x25, 0x42, 0xc2, 0x20, 0xcd, + 0x42, 0x54, 0x2c, 0x22, 0x0c, 0xd4, 0x25, 0x42, + 0xc2, 0x20, 0xcd, 0x42, 0x54, 0x2c, 0x22, 0x0c, + 0xd4, 0x25, 0x42, 0xc2, 0x20, 0xcd, 0x42, 0x54, + 0x2c, 0x22, 0x0c, 0xd4, 0x25, 0x42, 0xc2, 0x20, + 0xcd, 0x42, 0x54, 0x2c, 0x22, 0x0c, 0xd4, 0x25, + 0x42, 0xc2, 0x20, 0xcd, 0x42, 0x54, 0x2c, 0x22, + 0x0c, 0xd4, 0x25, 0x42, 0xc2, 0x20, 0xcd, 0x42, + 0x54, 0x2c, 0x22, 0x0c, 0xd4, 0x25, 0x42, 0xc2, + 0x20, 0xcd, 0x42, 0x54, 0x2c, 0x22, 0x0c, 0xd4, + 0x25, 0x42, 0xc2, 0x20, 0xcd, 0x42, 0x54, 0x2c, + 0x22, 0x0c, 0x82, 0x2a, 0xa0, 0x9d, 0xe5, 0x1e, + 0xd9, 0x53, 0x83, 0x5a, 0x83, 0x77, 0x94, 0x7b, + 0x65, 0x01, 0x3b, 0x07, 0x56, 0xea, 0x22, 0x0e, + 0xe9, 0x6d, 0xe0, 0xce, 0xb2, 0xef, 0x64, 0x95, + 0xd8, 0x67, 0x8b, 0x4b, 0x1f, 0xbc, 0xe1, 0xa8, + 0xf6, 0x95, 0x52, 0xf3, 0x2d, 0xbd, 0xb2, 0x91, + 0xcc, 0xb8, 0x88, 0xb7, 0x49, 0x21, 0xc3, 0x4b, + 0x4f, 0x65, 0xa5, 0x4f, 0x35, 0xce, 0x6b, 0x83, + 0x9a, 0x4b, 0x5c, 0x35, 0x11, 0xa0, 0xae, 0xe8, + 0xb3, 0x8b, 0x86, 0xb7, 0x0c, 0x8d, 0x12, 0x76, + 0x75, 0x14, 0x14, 0xac, 0x27, 0x70, 0x13, 0xdc, + 0x29, 0x85, 0xdb, 0xc7, 0x80, 0xf1, 0x2b, 0xb1, + 0xcd, 0x9b, 0xd1, 0xd8, 0x7b, 0x6b, 0x1d, 0x6e, + 0xde, 0x8c, 0xce, 0xf2, 0x0a, 0x56, 0x17, 0x6f, + 0x1e, 0x03, 0xc4, 0x98, 0x5d, 0xbc, 0x78, 0x0f, + 0x12, 0xba, 0xf5, 0xbb, 0x7a, 0x33, 0x3b, 0xc9, + 0xd6, 0xed, 0xe8, 0xcc, 0xef, 0x20, 0xa5, 0x61, + 0x76, 0xf1, 0xe0, 0x3c, 0x49, 0x85, 0xdb, 0xc7, + 0x80, 0xf1, 0x2b, 0xaf, 0x5b, 0xb7, 0xa3, 0x33, + 0xbc, 0x9d, 0x6e, 0xde, 0x8c, 0xce, 0xf2, 0x0a, + 0x56, 0x17, 0x6f, 0x1e, 0x03, 0xc4, 0x98, 0x5d, + 0xbc, 0x78, 0x0f, 0x12, 0xba, 0xf5, 0xbb, 0x7a, + 0x33, 0x3b, 0xc9, 0xd6, 0xed, 0xe8, 0xcc, 0xef, + 0x20, 0xa5, 0x61, 0x76, 0xf1, 0xe0, 0x3c, 0x49, + 0x85, 0xdb, 0xc7, 0x80, 0xf1, 0x2b, 0xaf, 0x5b, + 0xb7, 0xa3, 0x33, 0xbc, 0x9d, 0x6e, 0xde, 0x8c, + 0xce, 0xf2, 0x0a, 0x56, 0x17, 0x6f, 0x1e, 0x03, + 0xc4, 0x98, 0x5d, 0xbc, 0x78, 0x0f, 0x12, 0xba, + 0xf5, 0xbb, 0x7a, 0x33, 0x3b, 0xc9, 0xd6, 0xed, + 0xe8, 0xcc, 0xef, 0x20, 0xa5, 0x61, 0x3b, 0xc7, + 0x80, 0xa6, 0x13, 0xbc, 0x6b, 0xbb, 0xa0, 0xeb, + 0x57, 0x5e, 0xb7, 0x6f, 0x46, 0x67, 0x79, 0x3a, + 0xdd, 0xbd, 0x19, 0x9d, 0xe4, 0x14, 0xac, 0x2e, + 0xde, 0x3c, 0x07, 0x89, 0x30, 0x9d, 0xe3, 0xc0, + 0x78, 0x95, 0xd7, 0xad, 0xdb, 0xd1, 0x99, 0xde, + 0x4e, 0xb7, 0x6f, 0x46, 0x67, 0x79, 0x05, 0x2c, + 0x87, 0x9d, 0x60, 0xf6, 0xf4, 0x9f, 0x0a, 0xc6, + 0x13, 0xaa, 0x9a, 0x37, 0xa8, 0x69, 0xe0, 0x57, + 0x5e, 0xb7, 0x6f, 0x46, 0x67, 0x79, 0x3a, 0xdd, + 0xbd, 0x19, 0x9d, 0xe4, 0x14, 0xa0, 0xd7, 0x03, + 0x5a, 0x1d, 0x22, 0x84, 0x00, 0x47, 0x81, 0x03, + 0x08, 0xd4, 0x0e, 0x9d, 0x7a, 0x08, 0x57, 0x5e, + 0xb7, 0x6f, 0x46, 0x67, 0x79, 0x3a, 0xdd, 0xbd, + 0x19, 0x9d, 0xe4, 0x14, 0xac, 0x2e, 0xde, 0x3c, + 0x07, 0x89, 0x7a, 0x2e, 0x98, 0xb3, 0x05, 0x5f, + 0x83, 0xe6, 0xf8, 0xd4, 0x57, 0x3e, 0xb7, 0x6f, + 0x46, 0x67, 0x79, 0x3a, 0xdd, 0xbd, 0x19, 0x9d, + 0xe4, 0x14, 0xac, 0x2e, 0xde, 0x35, 0xdd, 0xd0, + 0x78, 0x96, 0xdb, 0x49, 0xe5, 0xb4, 0xb9, 0x8e, + 0xe6, 0x30, 0x71, 0x44, 0xe0, 0xed, 0x47, 0x56, + 0xe8, 0xd5, 0xbc, 0xae, 0x1d, 0x6e, 0xde, 0x8c, + 0xce, 0xf2, 0xcf, 0x5b, 0xb7, 0xa3, 0x33, 0xbc, + 0x82, 0xa7, 0x9a, 0x7b, 0x3c, 0x97, 0xb2, 0x4b, + 0x6a, 0x71, 0x45, 0x35, 0x24, 0x1a, 0x0f, 0x8a, + 0xe7, 0x69, 0x73, 0x75, 0x6f, 0xae, 0x72, 0xf9, + 0xdc, 0xdc, 0x25, 0xcf, 0x2d, 0xdc, 0x15, 0x75, + 0x15, 0xd3, 0xad, 0xdb, 0xd1, 0xd9, 0xde, 0x4e, + 0xb7, 0x6f, 0x46, 0x67, 0x79, 0x05, 0x27, 0x0b, + 0xb7, 0x8f, 0x6a, 0x86, 0x9e, 0x04, 0xc0, 0x4e, + 0xb1, 0x5e, 0xd8, 0x3a, 0x3b, 0x5a, 0x15, 0xd7, + 0xad, 0xdb, 0xd1, 0x99, 0xde, 0x4e, 0xb7, 0x6f, + 0x46, 0x67, 0x79, 0x05, 0x2e, 0x8e, 0x1b, 0x86, + 0x9b, 0xc0, 0x11, 0xe0, 0x5d, 0xb9, 0x44, 0xf0, + 0x5a, 0x5c, 0x3e, 0xee, 0x52, 0x31, 0x5b, 0xb0, + 0x98, 0x23, 0xa1, 0xab, 0x9e, 0x46, 0x16, 0xee, + 0x6e, 0x55, 0x59, 0xfa, 0xd9, 0xbd, 0x19, 0x9d, + 0xe4, 0xeb, 0x66, 0x74, 0x66, 0x77, 0x90, 0x52, + 0xde, 0x64, 0x7c, 0x8e, 0x7b, 0xc1, 0x2f, 0x79, + 0x2e, 0x79, 0xa1, 0xd2, 0x49, 0xa9, 0xdc, 0x58, + 0xc2, 0xed, 0xe3, 0xc0, 0x78, 0x95, 0xd7, 0xad, + 0x9b, 0xd1, 0x99, 0xde, 0x4e, 0xb7, 0x6f, 0x46, + 0x67, 0x79, 0x05, 0x2b, 0x0b, 0xb7, 0x8f, 0x01, + 0xe2, 0x4c, 0x2e, 0xde, 0x3c, 0x07, 0x89, 0x5d, + 0x7a, 0xdd, 0xbd, 0x19, 0x9d, 0xe4, 0xeb, 0x76, + 0xf4, 0x66, 0x77, 0x90, 0x52, 0xb0, 0xbb, 0x78, + 0xf0, 0x1e, 0x24, 0xc2, 0xed, 0xe3, 0xc0, 0x78, + 0x95, 0xd7, 0xad, 0xdb, 0xd1, 0x99, 0xde, 0x4e, + 0xb7, 0x6f, 0x46, 0x67, 0x79, 0x05, 0x2b, 0x0b, + 0xb7, 0x8f, 0x01, 0xe2, 0x4c, 0x2e, 0xde, 0x3c, + 0x07, 0x89, 0x5d, 0x7a, 0xdd, 0xbd, 0x19, 0x9d, + 0xe4, 0xeb, 0x76, 0xf4, 0x66, 0x77, 0x90, 0x52, + 0xb0, 0xbb, 0x78, 0xf0, 0x1e, 0x24, 0xc2, 0xed, + 0xe3, 0xc0, 0x78, 0x95, 0xd7, 0xad, 0xdb, 0xd1, + 0x99, 0xde, 0x4e, 0xb7, 0x6f, 0x46, 0x67, 0x79, + 0x05, 0x2b, 0x0b, 0xb7, 0x8f, 0x01, 0xe2, 0x4c, + 0x2e, 0xde, 0x3c, 0x07, 0x89, 0x5d, 0x7a, 0xdd, + 0xbd, 0x19, 0x9d, 0xe4, 0xeb, 0x76, 0xf4, 0x66, + 0x77, 0x90, 0x54, 0x2d, 0xac, 0x6e, 0xee, 0x9e, + 0x19, 0x04, 0x2f, 0x79, 0x3b, 0xa0, 0x1a, 0x0e, + 0xe9, 0x56, 0xcc, 0xba, 0xc6, 0x2c, 0x92, 0xc9, + 0xcf, 0x90, 0x87, 0xde, 0x4c, 0x3c, 0x6a, 0x1a, + 0xd2, 0xba, 0x80, 0xec, 0x05, 0xed, 0xf9, 0xd4, + 0xb8, 0x69, 0x14, 0x6d, 0x67, 0x67, 0x5a, 0xe2, + 0x92, 0x47, 0xca, 0xe2, 0xf9, 0x1c, 0x5e, 0xe3, + 0xba, 0x7e, 0x44, 0x1e, 0x49, 0x24, 0x92, 0x4d, + 0x49, 0x35, 0x3d, 0xb4, 0x44, 0x40, 0x46, 0xeb, + 0x07, 0x78, 0x8a, 0xf0, 0xa2, 0x20, 0x90, 0xce, + 0x72, 0xcb, 0x1b, 0xe7, 0x43, 0x35, 0xcd, 0xcf, + 0xb3, 0x86, 0xb6, 0x8c, 0x35, 0x60, 0x0e, 0xdd, + 0xfc, 0xf5, 0x1d, 0xf0, 0xe6, 0x4b, 0xf7, 0x90, + 0xe5, 0x46, 0xbd, 0xed, 0x50, 0x1e, 0xc1, 0x62, + 0x29, 0x5d, 0x7d, 0xe6, 0x85, 0x59, 0x3a, 0xd0, + 0x58, 0xfe, 0x1c, 0xc9, 0x7e, 0xf2, 0x1c, 0xa8, + 0xd3, 0xe1, 0xcc, 0x97, 0xef, 0x21, 0xca, 0x8d, + 0x57, 0x11, 0x05, 0x8f, 0xe1, 0xcc, 0x97, 0xef, + 0x21, 0xca, 0x8d, 0x3e, 0x1c, 0xc9, 0x7e, 0xf2, + 0x1c, 0xa8, 0xd5, 0x71, 0x10, 0x58, 0xfe, 0x1c, + 0xc9, 0x7e, 0xf2, 0x1c, 0xa8, 0xd3, 0xe1, 0xcc, + 0x97, 0xef, 0x21, 0xca, 0x8d, 0x57, 0x11, 0x05, + 0x8f, 0xe1, 0xcc, 0x97, 0xef, 0x21, 0xca, 0x8d, + 0x3e, 0x1c, 0xc9, 0x7e, 0xf2, 0x1c, 0xa8, 0xd5, + 0x71, 0x10, 0x58, 0xfe, 0x1c, 0xc9, 0x7e, 0xf2, + 0x1c, 0xa8, 0xd3, 0xe1, 0xcc, 0x97, 0xef, 0x21, + 0xca, 0x8d, 0x57, 0x11, 0x05, 0x8f, 0xe1, 0xcc, + 0x97, 0xef, 0x21, 0xca, 0x8d, 0x3e, 0x1c, 0xc9, + 0x7e, 0xf2, 0x1c, 0xa8, 0xd5, 0x71, 0x10, 0x58, + 0xfe, 0x1c, 0xc9, 0x7e, 0xf2, 0x1c, 0xa8, 0xd3, + 0xe1, 0xcc, 0x97, 0xef, 0x21, 0xca, 0x8d, 0x57, + 0x11, 0x05, 0x8f, 0xe1, 0xcc, 0x97, 0xef, 0x21, + 0xca, 0x8d, 0x3e, 0x1c, 0xc9, 0x7e, 0xf2, 0x1c, + 0xa8, 0xd5, 0x71, 0x10, 0x58, 0xfe, 0x1c, 0xc9, + 0x7e, 0xf2, 0x1c, 0xa8, 0xd3, 0xe1, 0xcc, 0x97, + 0xef, 0x21, 0xca, 0x8d, 0x57, 0x13, 0x85, 0x05, + 0x8f, 0xe1, 0xcc, 0x97, 0xef, 0x21, 0xca, 0x8d, + 0x3e, 0x1c, 0xc9, 0x7e, 0xf2, 0x1c, 0xa8, 0xd5, + 0x73, 0x0b, 0x8b, 0x4b, 0x80, 0x24, 0x37, 0x59, + 0xa1, 0xa0, 0xee, 0xa7, 0x1d, 0x10, 0x58, 0xfe, + 0x1c, 0xc9, 0x7e, 0xf2, 0x1c, 0xa8, 0xd3, 0xe1, + 0xcc, 0x97, 0xef, 0x21, 0xca, 0x8d, 0x57, 0x1a, + 0x0b, 0x8e, 0x16, 0x82, 0x49, 0xd4, 0x06, 0x92, + 0xbd, 0xc9, 0x04, 0xf1, 0x80, 0x64, 0x63, 0xd8, + 0x0e, 0xe9, 0x04, 0x04, 0x16, 0x0f, 0x87, 0x32, + 0x5f, 0xbc, 0x87, 0x2a, 0x34, 0xf8, 0x73, 0x25, + 0xfb, 0xc8, 0x72, 0xa3, 0x55, 0xc6, 0x82, 0xea, + 0xe1, 0xa9, 0xa1, 0x00, 0xd3, 0xb2, 0xb2, 0x58, + 0xf0, 0x2a, 0x43, 0x87, 0x6e, 0xa0, 0x70, 0xa0, + 0xb1, 0x7c, 0x39, 0x92, 0xfd, 0xe4, 0x39, 0x51, + 0xa7, 0xc3, 0x99, 0x2f, 0xde, 0x43, 0x95, 0x1a, + 0xae, 0x77, 0x75, 0xea, 0x44, 0x16, 0x3f, 0x87, + 0x32, 0x5f, 0xbc, 0x87, 0x2a, 0x34, 0xf8, 0x73, + 0x25, 0xfb, 0xc8, 0x72, 0xa3, 0x55, 0xc4, 0x41, + 0x63, 0xf8, 0x73, 0x25, 0xfb, 0xc8, 0x72, 0xa3, + 0x4f, 0x87, 0x32, 0x5f, 0xbc, 0x87, 0x2a, 0x35, + 0x5c, 0x44, 0x16, 0x3f, 0x87, 0x32, 0x5f, 0xbc, + 0x87, 0x2a, 0x34, 0xf8, 0x73, 0x25, 0xfb, 0xc8, + 0x72, 0xa3, 0x55, 0xc4, 0x41, 0x63, 0xf8, 0x73, + 0x25, 0xfb, 0xc8, 0x72, 0xa3, 0x4f, 0x87, 0x32, + 0x5f, 0xbc, 0x87, 0x2a, 0x35, 0x5c, 0x44, 0x16, + 0x3f, 0x87, 0x32, 0x5f, 0xbc, 0x87, 0x2a, 0x34, + 0xf8, 0x73, 0x25, 0xfb, 0xc8, 0x72, 0xa3, 0x55, + 0xc4, 0x41, 0x63, 0xf8, 0x73, 0x25, 0xfb, 0xc8, + 0x72, 0xa3, 0x4f, 0x87, 0x32, 0x5f, 0xbc, 0x87, + 0x2a, 0x35, 0x5c, 0x44, 0x16, 0x3f, 0x87, 0x32, + 0x5f, 0xbc, 0x87, 0x2a, 0x34, 0xf8, 0x73, 0x25, + 0xfb, 0xc8, 0x72, 0xa3, 0x55, 0xc4, 0x41, 0x63, + 0xf8, 0x73, 0x25, 0xfb, 0xc8, 0x72, 0xa3, 0x4f, + 0x87, 0x32, 0x5f, 0xbc, 0x87, 0x2a, 0x35, 0x5c, + 0x44, 0x16, 0x3f, 0x87, 0x32, 0x5f, 0xbc, 0x87, + 0x2a, 0x35, 0xbe, 0xcb, 0x24, 0xca, 0x2d, 0xae, + 0xe2, 0x9e, 0x3b, 0xf1, 0x23, 0xd8, 0xe0, 0x5a, + 0xcc, 0x4c, 0x35, 0x3a, 0xb7, 0x15, 0x55, 0x6d, + 0xb4, 0xf7, 0xb8, 0x37, 0x7f, 0x58, 0xcd, 0x7d, + 0xb4, 0x16, 0xbc, 0xdd, 0x98, 0x6f, 0x0b, 0xab, + 0x5c, 0x6d, 0x06, 0x9b, 0xdb, 0x8b, 0x8d, 0x77, + 0xe7, 0x3e, 0xf4, 0xdf, 0x30, 0x78, 0x4a, 0xe0, + 0x41, 0xee, 0x03, 0xfa, 0xe8, 0xfc, 0xe6, 0xf8, + 0x54, 0xd5, 0x42, 0x84, 0x83, 0xf6, 0xcc, 0xf3, + 0x9b, 0xe1, 0x53, 0x48, 0x15, 0x0a, 0x37, 0x35, + 0x35, 0xba, 0xb3, 0xfb, 0x4f, 0x94, 0x29, 0x12, + 0xa3, 0xb3, 0x4f, 0x7a, 0xb3, 0xfb, 0x4f, 0x94, + 0x20, 0x65, 0x7e, 0xf5, 0x79, 0xe7, 0x9f, 0xac, + 0x54, 0x92, 0x8d, 0xca, 0xfd, 0xea, 0xf3, 0xcf, + 0x3f, 0x58, 0xa9, 0x24, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x01, 0xad, 0x41, + 0xbb, 0xca, 0x3d, 0xb2, 0xa7, 0x06, 0xb5, 0x06, + 0xef, 0x28, 0xf6, 0xca, 0x02, 0x22, 0x20, 0x2c, + 0x2e, 0xdb, 0x7c, 0xb2, 0x57, 0xb4, 0x49, 0x31, + 0xe6, 0x99, 0xd9, 0xd6, 0x42, 0xf6, 0xe6, 0x64, + 0x91, 0x1c, 0x12, 0x4e, 0x4b, 0x86, 0xba, 0x1a, + 0xf8, 0x02, 0x98, 0x89, 0x9f, 0x08, 0xd5, 0x16, + 0xb5, 0x6b, 0xe3, 0x68, 0x87, 0x02, 0x2e, 0xec, + 0x79, 0x07, 0xad, 0x3c, 0x27, 0x89, 0x31, 0xe4, + 0x1e, 0xb4, 0xf0, 0x9e, 0x25, 0x3b, 0x2d, 0xd3, + 0x2a, 0x77, 0xb1, 0x75, 0xc3, 0x85, 0x17, 0x76, + 0x3c, 0x83, 0xd6, 0x9e, 0x13, 0xc4, 0x98, 0xf2, + 0x0f, 0x5a, 0x78, 0x4f, 0x12, 0x6c, 0xb7, 0x4c, + 0x9d, 0xec, 0x5d, 0x70, 0xe1, 0x45, 0xdd, 0x8f, + 0x20, 0xf5, 0xa7, 0x84, 0xf1, 0x26, 0x3c, 0x83, + 0xd6, 0x9e, 0x13, 0xc4, 0x9b, 0x2d, 0xd3, 0x27, + 0x7b, 0x17, 0x5c, 0x38, 0x51, 0x77, 0x63, 0xc8, + 0x3d, 0x69, 0xe1, 0x3c, 0x49, 0x8f, 0x20, 0xf5, + 0xa7, 0x84, 0xf1, 0x26, 0xcb, 0x74, 0xc9, 0xde, + 0xc5, 0xd7, 0x0e, 0x14, 0x5d, 0xd8, 0xf2, 0x0f, + 0x5a, 0x78, 0x4f, 0x12, 0x63, 0xc8, 0x3d, 0x69, + 0xe1, 0x3c, 0x49, 0xb2, 0xdd, 0x32, 0x77, 0xb1, + 0x75, 0xc3, 0x85, 0x17, 0x76, 0x3c, 0x83, 0xd6, + 0x9e, 0x13, 0xc4, 0x98, 0xf2, 0x0f, 0x5a, 0x78, + 0x4f, 0x12, 0x6c, 0xb7, 0x4c, 0x9d, 0xec, 0x5d, + 0x70, 0xe1, 0x45, 0xdd, 0x8f, 0x20, 0xf5, 0xa7, + 0x84, 0xf1, 0x26, 0x3c, 0x83, 0xd6, 0x9e, 0x13, + 0xc4, 0x9b, 0x2d, 0xd3, 0x27, 0x7b, 0x17, 0x5c, + 0x38, 0x51, 0x77, 0x63, 0xc8, 0x3d, 0x69, 0xe1, + 0x3c, 0x49, 0x8f, 0x20, 0xf5, 0xa7, 0x84, 0xf1, + 0x26, 0xcb, 0x74, 0xc9, 0xde, 0xc5, 0xd7, 0x0e, + 0x14, 0x5d, 0xd8, 0xf2, 0x0f, 0x5a, 0x78, 0x4f, + 0x12, 0x63, 0xc8, 0x3d, 0x69, 0xe1, 0x3c, 0x49, + 0xb2, 0xdd, 0x32, 0x77, 0xb1, 0x75, 0xc3, 0x85, + 0x17, 0x76, 0x3c, 0x83, 0xd6, 0x9e, 0x13, 0xc4, + 0x98, 0xf2, 0x0f, 0x5a, 0x78, 0x4f, 0x12, 0x6c, + 0xb7, 0x4c, 0x9d, 0xec, 0x5d, 0x70, 0xe1, 0x45, + 0xdd, 0x8f, 0x20, 0xf5, 0xa7, 0x84, 0xf1, 0x26, + 0x3c, 0x83, 0xd6, 0x9e, 0x13, 0xc4, 0x9b, 0x2d, + 0xd3, 0x27, 0x7b, 0x17, 0x5c, 0x38, 0x51, 0x77, + 0x63, 0xc8, 0x3d, 0x69, 0xe1, 0x3c, 0x49, 0x8f, + 0x20, 0xf5, 0xa7, 0x84, 0xf1, 0x26, 0xcb, 0x74, + 0xc9, 0xde, 0xc5, 0xd7, 0x0e, 0x14, 0x5d, 0xd8, + 0xf2, 0x0f, 0x5a, 0x78, 0x4f, 0x12, 0x63, 0xc8, + 0x3d, 0x69, 0xe1, 0x3c, 0x49, 0xb2, 0xdd, 0x32, + 0x77, 0xb1, 0x75, 0xc3, 0x85, 0x17, 0x76, 0x3c, + 0x83, 0xd6, 0x9e, 0x13, 0xc4, 0x98, 0xf2, 0x0f, + 0x5a, 0x78, 0x4f, 0x12, 0x6c, 0xb7, 0x4c, 0x9d, + 0xec, 0x5d, 0x70, 0xe1, 0x45, 0xdd, 0x8f, 0x20, + 0xf5, 0xa7, 0x84, 0xf1, 0x26, 0x3c, 0x83, 0xd6, + 0x9e, 0x13, 0xc4, 0x9b, 0x2d, 0xd3, 0x27, 0x7b, + 0x17, 0x5c, 0x38, 0x51, 0x77, 0x63, 0xc8, 0x3d, + 0x69, 0xe1, 0x3c, 0x49, 0x8f, 0x20, 0xf5, 0xa7, + 0x84, 0xf1, 0x26, 0xcb, 0x74, 0xc9, 0xde, 0xc5, + 0xd7, 0x0e, 0x14, 0x5d, 0xd8, 0xf2, 0x0f, 0x5a, + 0x78, 0x4f, 0x12, 0x63, 0xc8, 0x3d, 0x69, 0xe1, + 0x3c, 0x49, 0xb2, 0xdd, 0x32, 0x77, 0xb1, 0x75, + 0xc3, 0x85, 0x17, 0x76, 0x3c, 0x83, 0xd6, 0x9e, + 0x13, 0xc4, 0x98, 0xf2, 0x0f, 0x5a, 0x78, 0x4f, + 0x12, 0x6c, 0xb7, 0x4c, 0x9d, 0xec, 0x5d, 0x70, + 0xe1, 0x45, 0xdd, 0x8f, 0x20, 0xf5, 0xa7, 0x84, + 0xf1, 0x26, 0x3c, 0x83, 0xd6, 0x9e, 0x13, 0xc4, + 0x9b, 0x2d, 0xd3, 0x27, 0x7b, 0x17, 0x5c, 0x38, + 0x51, 0x77, 0x63, 0xc8, 0x3d, 0x69, 0xe1, 0x3c, + 0x49, 0x8f, 0x20, 0xf5, 0xa7, 0x84, 0xf1, 0x26, + 0xcb, 0x74, 0xc9, 0xde, 0xc5, 0xd7, 0x0e, 0x14, + 0x5d, 0xd8, 0xf2, 0x0f, 0x5a, 0x78, 0x4f, 0x12, + 0x63, 0xc8, 0x3d, 0x69, 0xe1, 0x3c, 0x49, 0xb2, + 0xdd, 0x32, 0x77, 0xb1, 0xf5, 0xc3, 0x85, 0x17, + 0x73, 0x46, 0x49, 0x26, 0x86, 0xcc, 0x43, 0xb7, + 0x2a, 0x48, 0xfa, 0xc1, 0x25, 0xca, 0xdd, 0x84, + 0xc9, 0x6e, 0xf1, 0x2b, 0x77, 0xb7, 0x54, 0x4c, + 0x5a, 0x3c, 0x62, 0x56, 0xad, 0xe9, 0x6e, 0x15, + 0xb4, 0x4c, 0xf2, 0x87, 0x0a, 0x21, 0x05, 0xa4, + 0xb4, 0x8a, 0x11, 0xbf, 0xad, 0x14, 0x2c, 0x22, + 0x22, 0x0f, 0x5b, 0x55, 0xee, 0x36, 0x3f, 0xda, + 0xfa, 0xa1, 0x56, 0x4a, 0xb3, 0x6d, 0x57, 0xb8, + 0xd8, 0xff, 0x00, 0x6b, 0xea, 0x85, 0x59, 0x28, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x35, 0x84, + 0x13, 0xb9, 0x77, 0xfa, 0x67, 0x30, 0x3b, 0xce, + 0xd1, 0xc0, 0xd3, 0xf2, 0xa8, 0x21, 0xb9, 0xe1, + 0x53, 0xb9, 0x77, 0xfa, 0x63, 0x30, 0xf3, 0xfe, + 0x46, 0xa8, 0x2d, 0xee, 0xe7, 0xca, 0x82, 0x77, + 0x2c, 0x2c, 0xcb, 0xb2, 0x59, 0xb3, 0x50, 0xd0, + 0xfb, 0x97, 0xbb, 0x04, 0x04, 0x8f, 0x26, 0x9a, + 0x3c, 0x35, 0x5e, 0xf2, 0xac, 0xea, 0x4b, 0xc9, + 0xdd, 0x67, 0x9a, 0x3d, 0xb2, 0x5b, 0xcc, 0xc3, + 0xe3, 0x3e, 0x8d, 0x0d, 0x20, 0x57, 0x5a, 0xf1, + 0x77, 0xfe, 0x93, 0xb4, 0xec, 0xca, 0x6b, 0xca, + 0x7a, 0x82, 0xa6, 0x9d, 0x55, 0x3b, 0xd4, 0xaf, + 0x00, 0x41, 0x64, 0xc8, 0x09, 0xb6, 0x6e, 0x6a, + 0x62, 0x70, 0x77, 0x30, 0x09, 0x8d, 0xda, 0xc6, + 0x8c, 0x54, 0x3d, 0xe5, 0xcf, 0x65, 0xb4, 0xb7, + 0x52, 0xdc, 0x32, 0x1b, 0xf6, 0xc7, 0x3d, 0xbc, + 0xa4, 0x31, 0xc3, 0x08, 0x14, 0x2e, 0x3a, 0xd7, + 0xad, 0x9d, 0xd1, 0x63, 0x99, 0xfd, 0x90, 0xf0, + 0x3d, 0x41, 0x46, 0x3c, 0x66, 0x53, 0x5d, 0x5b, + 0x41, 0xd9, 0xaa, 0x0e, 0xfc, 0xf2, 0xc6, 0x3b, + 0x0c, 0xc6, 0x48, 0xa2, 0xd1, 0x13, 0xc0, 0x7b, + 0x07, 0x60, 0xff, 0x00, 0x4d, 0x54, 0x7a, 0x9c, + 0xda, 0xea, 0x7b, 0x7c, 0x1f, 0x3b, 0x98, 0x6e, + 0x9e, 0xeb, 0x94, 0x1a, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0xdb, 0x69, 0xef, 0x76, 0xff, 0x00, 0x6a, + 0xcf, 0x0a, 0xd4, 0xb6, 0xda, 0x7b, 0xdd, 0xbf, + 0xda, 0xb3, 0xc2, 0x82, 0xdd, 0x9c, 0xfb, 0xd3, + 0x7c, 0xcf, 0x94, 0xae, 0x05, 0xdf, 0x9c, 0xfb, + 0xd3, 0x7c, 0xcf, 0x94, 0xae, 0x04, 0x1e, 0xa0, + 0xfd, 0xb3, 0x3c, 0xe6, 0xf8, 0x54, 0xd2, 0x85, + 0x83, 0xf6, 0xcc, 0xf3, 0x9b, 0xe1, 0x53, 0x48, + 0x30, 0x54, 0x76, 0x69, 0xef, 0x56, 0x7f, 0x69, + 0xf2, 0x85, 0x22, 0x54, 0x76, 0x69, 0xef, 0x56, + 0x7f, 0x69, 0xf2, 0x84, 0x0c, 0xaf, 0xde, 0xaf, + 0x3c, 0xf3, 0xf5, 0x8a, 0x92, 0x51, 0xb9, 0x5f, + 0xbd, 0x5e, 0x79, 0xe7, 0xeb, 0x15, 0x24, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x35, 0xa8, 0x37, 0x79, 0x47, 0xb6, 0x54, + 0xe0, 0xd6, 0xa0, 0xdd, 0xe5, 0x1e, 0xd9, 0x40, + 0x5d, 0xf6, 0x91, 0x45, 0x6f, 0x03, 0xaf, 0xae, + 0x7c, 0x91, 0xa6, 0x36, 0xeb, 0x3d, 0xcd, 0xf2, + 0xb8, 0xa3, 0x61, 0x92, 0x46, 0xb0, 0x6b, 0x71, + 0x03, 0x85, 0x7a, 0xda, 0x4b, 0x80, 0xd7, 0xc3, + 0x68, 0xcd, 0x0c, 0x63, 0x71, 0x38, 0x77, 0x9a, + 0x15, 0xb1, 0xd7, 0x7d, 0xa2, 0xae, 0x79, 0xf2, + 0x76, 0xf1, 0xcd, 0xbd, 0xae, 0x4b, 0xfc, 0xd2, + 0xe2, 0xf1, 0xe7, 0x11, 0xc1, 0x10, 0xf2, 0x63, + 0x1f, 0x2a, 0xe3, 0x0e, 0xa6, 0xad, 0x0b, 0xc6, + 0x24, 0xc4, 0xb7, 0xd6, 0x22, 0xbc, 0x22, 0x34, + 0x78, 0x96, 0xb5, 0xef, 0x33, 0x36, 0xb6, 0xba, + 0xbd, 0xe2, 0x4c, 0x4b, 0xc6, 0x24, 0xc4, 0xa5, + 0x5d, 0xb1, 0xef, 0x7b, 0xc4, 0x98, 0x97, 0x8c, + 0x49, 0x89, 0x0d, 0xb1, 0xef, 0x7b, 0xc4, 0x98, + 0x97, 0x8c, 0x49, 0x89, 0x0d, 0xb1, 0xef, 0x7b, + 0xc4, 0x98, 0x97, 0x8c, 0x49, 0x89, 0x0d, 0xb1, + 0xef, 0x7b, 0xc4, 0x98, 0x97, 0x8c, 0x49, 0x89, + 0x0d, 0xb1, 0xef, 0x7b, 0xc4, 0x98, 0x97, 0x8c, + 0x49, 0x89, 0x0d, 0xb1, 0xef, 0x7b, 0xc4, 0x98, + 0x97, 0x8c, 0x49, 0x89, 0x0d, 0xb1, 0xef, 0x7b, + 0xc4, 0x98, 0x96, 0x23, 0x63, 0xe5, 0x91, 0xb1, + 0x46, 0x2a, 0xf7, 0x9a, 0x34, 0x56, 0x9a, 0x57, + 0x6f, 0x51, 0x66, 0xa3, 0xfe, 0x0d, 0x7f, 0xb4, + 0xde, 0x35, 0x59, 0xb5, 0x62, 0x62, 0x26, 0x62, + 0x35, 0x5a, 0xb8, 0x6d, 0x6f, 0xb6, 0x26, 0x79, + 0xb8, 0xf1, 0x26, 0x25, 0xbe, 0xe3, 0x2c, 0xcc, + 0x2d, 0x99, 0x8e, 0x58, 0x48, 0x68, 0xd6, 0x5b, + 0x47, 0x53, 0xb7, 0x4a, 0xae, 0x50, 0xe1, 0xb8, + 0x91, 0x78, 0x9f, 0x0e, 0x28, 0xbe, 0x3b, 0x52, + 0x74, 0xb4, 0x4c, 0x7e, 0x2f, 0x78, 0x93, 0x12, + 0xf1, 0x89, 0x31, 0x68, 0x52, 0x8d, 0xb1, 0xec, + 0xd5, 0xef, 0x12, 0x62, 0x5d, 0x0e, 0xca, 0xef, + 0x9b, 0x07, 0xb4, 0x16, 0x0e, 0x68, 0x37, 0x1e, + 0x3a, 0x8d, 0x4b, 0x8c, 0x3b, 0x45, 0x6b, 0xdb, + 0x48, 0x98, 0x9d, 0x74, 0xe3, 0xa4, 0xe8, 0x9b, + 0x63, 0x9a, 0xe9, 0xbb, 0x58, 0xd7, 0xf4, 0x36, + 0x62, 0x4c, 0x4b, 0xc6, 0x2e, 0xfa, 0x62, 0x52, + 0xae, 0x91, 0xef, 0x7b, 0xc4, 0x98, 0x97, 0x8c, + 0x49, 0x89, 0x0d, 0xbf, 0x17, 0xbc, 0x49, 0x89, + 0x78, 0xc4, 0x98, 0x94, 0x1b, 0x7e, 0x2f, 0x78, + 0x93, 0x12, 0xf1, 0x89, 0x31, 0x29, 0x4e, 0xdf, + 0x8b, 0xde, 0x24, 0xc4, 0xbc, 0x62, 0x4c, 0x48, + 0x6d, 0x8f, 0x7b, 0xde, 0x24, 0xc4, 0xbc, 0x62, + 0x4c, 0x48, 0x6d, 0x8f, 0x7b, 0xde, 0x24, 0xc4, + 0xbc, 0x62, 0x4c, 0x48, 0x6d, 0x8f, 0x7b, 0xde, + 0x24, 0xc4, 0xbc, 0x62, 0x4c, 0x48, 0x6d, 0x8f, + 0x7b, 0xde, 0x24, 0xc4, 0xbc, 0x62, 0x4c, 0x48, + 0x6d, 0x8f, 0x7b, 0xde, 0x24, 0xc4, 0xbc, 0x62, + 0x4c, 0x48, 0x6d, 0x8f, 0x7b, 0xde, 0x25, 0xbe, + 0xd2, 0xfe, 0xe6, 0xd1, 0xf8, 0xe1, 0x75, 0x07, + 0xe7, 0x30, 0xf9, 0x25, 0x72, 0xe2, 0x4c, 0x4a, + 0x26, 0x22, 0x62, 0x62, 0x56, 0x8b, 0x5a, 0x93, + 0xba, 0x93, 0xa4, 0xc2, 0xce, 0xf1, 0x06, 0x67, + 0x6b, 0xed, 0x70, 0x0c, 0x33, 0x37, 0xcb, 0x6e, + 0xee, 0x8d, 0xc2, 0xa3, 0xb7, 0x57, 0x8d, 0x9e, + 0xba, 0x31, 0x5f, 0x88, 0xcd, 0x03, 0x27, 0x18, + 0x48, 0xec, 0x81, 0x56, 0xf1, 0x2e, 0x9b, 0xd8, + 0x84, 0x57, 0x32, 0x30, 0x6a, 0x06, 0xa3, 0xb4, + 0x56, 0x1c, 0xb4, 0xd9, 0x6d, 0x39, 0xf1, 0x7b, + 0x3e, 0x5b, 0x2f, 0x76, 0x9a, 0xcf, 0x8f, 0x84, + 0xb4, 0xa2, 0x22, 0xa3, 0xb3, 0xd6, 0xd5, 0x7b, + 0x8d, 0x8f, 0xf6, 0xbe, 0xa8, 0x55, 0x92, 0xac, + 0xdb, 0x55, 0xee, 0x36, 0x23, 0xce, 0xfa, 0xa1, + 0x56, 0x50, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x10, 0x6b, + 0x08, 0x88, 0x2c, 0x39, 0x34, 0x13, 0x5c, 0x6c, + 0xf5, 0xec, 0x10, 0xb7, 0x14, 0x8f, 0x92, 0x8d, + 0x15, 0x03, 0x71, 0xbb, 0xeb, 0x80, 0xec, 0xe6, + 0x75, 0xd1, 0xf4, 0x8d, 0xdc, 0x4c, 0xf4, 0x97, + 0x04, 0x77, 0x37, 0x31, 0x0a, 0x45, 0x33, 0xe2, + 0x69, 0xd2, 0x43, 0x1c, 0x5a, 0x2b, 0xda, 0x0b, + 0xdf, 0xb7, 0x5f, 0x74, 0xa9, 0xbf, 0x78, 0xfe, + 0x34, 0x13, 0x36, 0x2c, 0x39, 0x8e, 0x43, 0x36, + 0x5a, 0xc3, 0x4b, 0xab, 0x57, 0x97, 0xc4, 0xc3, + 0xba, 0x01, 0xae, 0x8e, 0xfa, 0xc6, 0x47, 0x95, + 0xdc, 0x5a, 0xdd, 0x3a, 0xf6, 0xfa, 0x3e, 0x62, + 0xde, 0x06, 0x39, 0xc4, 0x3f, 0x74, 0xee, 0x0a, + 0x15, 0x07, 0x1c, 0x92, 0x46, 0xfe, 0x72, 0x37, + 0x96, 0x49, 0xaf, 0x10, 0x24, 0x1e, 0x1a, 0xad, + 0x93, 0xde, 0xde, 0x5c, 0x37, 0x04, 0xf3, 0x3e, + 0x46, 0x8f, 0xcd, 0x73, 0x89, 0x08, 0x27, 0xb2, + 0x17, 0x3a, 0xea, 0x3c, 0xd9, 0xcc, 0x1e, 0x3c, + 0xc3, 0xc5, 0x68, 0xa5, 0x34, 0x87, 0xae, 0x4c, + 0xbf, 0x67, 0x6f, 0x85, 0xc4, 0x72, 0x5e, 0x30, + 0x5b, 0xc1, 0x11, 0x0e, 0x73, 0x9c, 0xe6, 0xe9, + 0xc3, 0xe3, 0x51, 0x44, 0xc7, 0x3c, 0xf1, 0x57, + 0x99, 0x91, 0xf1, 0xd7, 0x59, 0x63, 0x8b, 0x35, + 0x76, 0x8a, 0xcc, 0x97, 0x57, 0x52, 0x8a, 0x4b, + 0x34, 0x92, 0x34, 0xfe, 0x6b, 0x9e, 0xe7, 0x0f, + 0xa4, 0x50, 0x76, 0x67, 0xb7, 0xad, 0xbe, 0xcc, + 0x5f, 0x2c, 0x66, 0xb1, 0x30, 0x73, 0x71, 0x9d, + 0xf0, 0xdf, 0xe9, 0x2a, 0x3d, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x6d, 0xb4, 0xf7, 0xbb, 0x7f, + 0xb5, 0x67, 0x85, 0x6a, 0x5b, 0x6d, 0x3d, 0xee, + 0xdf, 0xed, 0x59, 0xe1, 0x41, 0x6e, 0xce, 0x7d, + 0xe9, 0xbe, 0x67, 0xca, 0x57, 0x02, 0xef, 0xce, + 0x7d, 0xe9, 0xbe, 0x6f, 0xca, 0xb8, 0x10, 0x7a, + 0x83, 0xf6, 0xcc, 0xf3, 0x9b, 0xe1, 0x53, 0x4a, + 0x16, 0x0f, 0xdb, 0x33, 0xce, 0x6f, 0x85, 0x4d, + 0x20, 0xc1, 0x51, 0xd9, 0xa7, 0xbd, 0x59, 0xfd, + 0xa7, 0xca, 0x14, 0x89, 0x51, 0xd9, 0xa7, 0xbd, + 0x59, 0xfd, 0xa7, 0xca, 0x10, 0x32, 0xbf, 0x7a, + 0xbc, 0xf3, 0xcf, 0xd6, 0x2a, 0x49, 0x46, 0xe5, + 0x7e, 0xf5, 0x79, 0xe7, 0x9f, 0xac, 0x54, 0x92, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x00, 0xd6, 0xa0, 0xdd, 0xe5, 0x1e, 0xd9, + 0x53, 0x83, 0x5a, 0x83, 0x77, 0x94, 0x7b, 0x65, + 0x06, 0xeb, 0x2f, 0x7b, 0x87, 0xce, 0x0b, 0x8f, + 0x69, 0x1d, 0xfe, 0x68, 0xef, 0x35, 0xbf, 0x2a, + 0xec, 0xb2, 0xf7, 0xb8, 0x7c, 0xe5, 0x1d, 0xb4, + 0xce, 0xa6, 0x6c, 0xf1, 0xfd, 0x56, 0x78, 0x0a, + 0xed, 0xe5, 0xfe, 0xf6, 0x4f, 0x3f, 0xfc, 0x18, + 0xf7, 0xd9, 0x1f, 0x89, 0x31, 0x2d, 0x78, 0x93, + 0x12, 0xd7, 0xab, 0xcc, 0x98, 0x6c, 0xc4, 0x98, + 0x96, 0xbc, 0x49, 0x89, 0x35, 0x46, 0x8d, 0x98, + 0x93, 0x12, 0xd7, 0x89, 0x31, 0x26, 0xa6, 0x8d, + 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, 0x26, 0xa6, + 0x8d, 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, 0x26, + 0xa6, 0x8d, 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, + 0x26, 0xa6, 0x8d, 0x98, 0x93, 0x12, 0xd7, 0x89, + 0x31, 0x26, 0xa6, 0x8d, 0x98, 0x93, 0x12, 0xd7, + 0x89, 0x31, 0x26, 0xa6, 0x8e, 0xdc, 0xb5, 0xdf, + 0xe6, 0x16, 0xdf, 0x68, 0xd5, 0x66, 0xcf, 0xaf, + 0xae, 0x2c, 0x6d, 0xa3, 0x7c, 0x04, 0x07, 0x39, + 0xf4, 0x25, 0xc3, 0x10, 0xa5, 0x37, 0x95, 0x5b, + 0x2b, 0x75, 0x73, 0x2b, 0x6f, 0xb4, 0x6a, 0xb0, + 0x6d, 0x69, 0xa5, 0x94, 0x3f, 0x69, 0xf2, 0x2c, + 0xf9, 0x62, 0x27, 0x25, 0x35, 0x86, 0xdf, 0x2f, + 0x33, 0x1e, 0x5f, 0x34, 0xc4, 0xe9, 0xa6, 0x8d, + 0xf9, 0x36, 0x68, 0xec, 0xc6, 0x07, 0xb2, 0x76, + 0x8e, 0x76, 0x3a, 0x62, 0xa0, 0xd0, 0x5a, 0x55, + 0x77, 0x31, 0xb6, 0xe6, 0x33, 0x09, 0x6d, 0xd8, + 0x09, 0x01, 0xde, 0x28, 0xdd, 0xd2, 0x31, 0x7c, + 0xaa, 0x43, 0x64, 0x8d, 0x66, 0xb9, 0xec, 0x31, + 0xbe, 0x15, 0xd3, 0xcc, 0xb6, 0x4d, 0xab, 0x71, + 0x22, 0xb8, 0x23, 0xc6, 0x07, 0x64, 0x0a, 0x7c, + 0xaa, 0x22, 0x62, 0x99, 0x2f, 0x11, 0xe1, 0x11, + 0xb9, 0x6b, 0x56, 0x73, 0x61, 0xc7, 0x33, 0xf7, + 0x4d, 0xa2, 0xb3, 0x3f, 0x8e, 0x8e, 0x28, 0xb6, + 0x6f, 0x30, 0x73, 0x31, 0x38, 0xb1, 0x84, 0xfe, + 0x69, 0x24, 0x9e, 0xf2, 0xe2, 0xbf, 0xb0, 0xba, + 0xb1, 0x78, 0x65, 0xc0, 0xa6, 0x2f, 0x21, 0xe0, + 0xd4, 0x15, 0x39, 0x9e, 0x47, 0x9c, 0x49, 0x75, + 0x17, 0xb0, 0xe2, 0xe6, 0x98, 0xda, 0xd5, 0xae, + 0x0d, 0xf1, 0xab, 0xbb, 0x53, 0xa5, 0x6d, 0xda, + 0x18, 0xcc, 0x99, 0x33, 0xa4, 0x90, 0x51, 0xf1, + 0xe0, 0x79, 0x1b, 0xc4, 0xd0, 0x11, 0xdf, 0x48, + 0xcb, 0x3a, 0xd7, 0x59, 0x8d, 0x2d, 0xc8, 0xbf, + 0x96, 0xa4, 0xc5, 0xf6, 0xc4, 0xc4, 0xd3, 0xfc, + 0x5b, 0x9c, 0xc7, 0xc9, 0x90, 0x86, 0x46, 0xdc, + 0x4e, 0x7d, 0xbb, 0x43, 0x40, 0xdd, 0x24, 0x05, + 0x08, 0xed, 0x9b, 0xcc, 0x5b, 0x1f, 0x38, 0x0b, + 0x0b, 0x86, 0x9c, 0x15, 0x20, 0xf6, 0xaa, 0xa7, + 0x63, 0x9c, 0xc1, 0x91, 0xb2, 0x71, 0xae, 0x3b, + 0x76, 0xb8, 0x76, 0xc3, 0x74, 0x28, 0xfd, 0x99, + 0xcc, 0x6e, 0xee, 0x9f, 0x34, 0x57, 0x12, 0x19, + 0x70, 0x00, 0xe6, 0xb9, 0xd4, 0xa8, 0xd2, 0x41, + 0xd4, 0xab, 0x5b, 0x5e, 0xb1, 0x6b, 0x46, 0x9a, + 0x44, 0xf1, 0x74, 0xc9, 0x4c, 0x77, 0xb6, 0x3a, + 0xdb, 0x5d, 0x66, 0x9a, 0x46, 0x88, 0x3b, 0x4b, + 0x49, 0xee, 0xee, 0x3d, 0x9e, 0x31, 0x49, 0x68, + 0x49, 0x0e, 0x34, 0xf2, 0x75, 0xd5, 0x7a, 0xbe, + 0xb2, 0xb8, 0xb0, 0x91, 0xb1, 0x4f, 0x87, 0x13, + 0x86, 0x21, 0x84, 0xd4, 0x51, 0x4c, 0xdb, 0xc6, + 0x23, 0xda, 0xb9, 0x5a, 0x34, 0x07, 0x46, 0xe7, + 0x70, 0x80, 0xb9, 0x76, 0xb0, 0xd2, 0xf6, 0x1f, + 0xb3, 0xf9, 0x4a, 0xeb, 0x19, 0x26, 0x6d, 0x11, + 0xec, 0x98, 0xd5, 0x9a, 0xde, 0x5e, 0xb1, 0x8e, + 0xd6, 0xe3, 0xad, 0x72, 0x6c, 0xfc, 0x1c, 0xf3, + 0x64, 0xb7, 0xd0, 0xda, 0x9b, 0xc9, 0x30, 0xf3, + 0x61, 0xa1, 0xda, 0x1c, 0x49, 0xa1, 0xd5, 0xa1, + 0x6b, 0xb0, 0xcb, 0x6e, 0xaf, 0xcb, 0xb9, 0x90, + 0x03, 0x59, 0xe5, 0x48, 0xed, 0x5d, 0xaa, 0x2b, + 0x16, 0x64, 0x7f, 0xfa, 0xeb, 0x8f, 0xf8, 0x51, + 0xf8, 0x5a, 0xb1, 0x93, 0x61, 0xb7, 0xc8, 0xd9, + 0x30, 0x1a, 0x70, 0x3e, 0x57, 0x76, 0x48, 0xaf, + 0x12, 0xa7, 0x76, 0xdb, 0x66, 0x7d, 0xbb, 0xb4, + 0x75, 0x8f, 0x2b, 0x4e, 0xe5, 0x6b, 0xac, 0xed, + 0xd9, 0xbe, 0x79, 0xfe, 0x08, 0x67, 0x6c, 0xf6, + 0x62, 0xd9, 0x84, 0x4d, 0x0d, 0x38, 0x9a, 0x48, + 0x7d, 0x7c, 0x5a, 0x8d, 0xfd, 0x15, 0x5c, 0x77, + 0x96, 0x93, 0x59, 0x4f, 0xcc, 0xcd, 0x4e, 0x70, + 0x00, 0x4d, 0x0d, 0x74, 0x15, 0x2f, 0xb3, 0x79, + 0xa5, 0xdd, 0xd5, 0xe4, 0xb0, 0xdc, 0x48, 0x64, + 0x0e, 0x66, 0x36, 0xd7, 0x70, 0x83, 0x42, 0x02, + 0xe3, 0xda, 0x83, 0x4c, 0xd8, 0xfd, 0x9b, 0x7e, + 0x55, 0x7a, 0x5e, 0xdb, 0xf6, 0xce, 0x9e, 0x1a, + 0xb9, 0x64, 0xc5, 0x8b, 0xb3, 0xdd, 0xa6, 0xbf, + 0x76, 0x9c, 0x51, 0xb8, 0x96, 0x31, 0x2d, 0x78, + 0x93, 0x12, 0xeb, 0xab, 0x34, 0xc3, 0x66, 0x24, + 0xc4, 0xb5, 0xe2, 0x4c, 0x4a, 0x75, 0x46, 0x8d, + 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, 0x26, 0xa6, + 0x8d, 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, 0x26, + 0xa6, 0x8d, 0x98, 0x93, 0x12, 0xd7, 0x89, 0x31, + 0x26, 0xa6, 0x8d, 0x98, 0x93, 0x12, 0xd7, 0x89, + 0x31, 0x26, 0xa6, 0x8d, 0x98, 0x93, 0x12, 0xd7, + 0x89, 0x31, 0x26, 0xa6, 0x8d, 0x98, 0x93, 0x12, + 0xd7, 0x89, 0x31, 0x28, 0x34, 0x77, 0xe5, 0x4e, + 0xff, 0x00, 0x32, 0xb6, 0xfb, 0x46, 0xf8, 0x54, + 0xde, 0x6b, 0xef, 0xae, 0xf3, 0x5b, 0xe0, 0x50, + 0x19, 0x4b, 0xbf, 0xcc, 0xed, 0x7e, 0xd5, 0xbe, + 0x15, 0x3f, 0x9a, 0xfb, 0xe3, 0xbc, 0xd6, 0xf8, + 0x16, 0x6f, 0x33, 0xf7, 0x47, 0xc1, 0xe9, 0x79, + 0x0f, 0xb2, 0xde, 0xe9, 0x72, 0x2c, 0x1a, 0xd0, + 0x8e, 0xc2, 0xca, 0x2e, 0x0d, 0xa9, 0x1c, 0xda, + 0xe7, 0x2a, 0x82, 0xd2, 0xd8, 0xe6, 0x30, 0x99, + 0xd8, 0xe1, 0xfa, 0xb0, 0x05, 0x68, 0x43, 0x74, + 0xfe, 0x73, 0x54, 0x5f, 0x59, 0x6c, 0x96, 0xed, + 0x93, 0xc9, 0xdf, 0xc0, 0x3d, 0x35, 0xef, 0x6b, + 0x3d, 0xc2, 0xc7, 0xfb, 0x5f, 0x54, 0x2a, 0xc2, + 0x0b, 0x27, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x69, 0xd6, 0x5b, 0x23, 0xd0, 0x5f, 0xc8, + 0x1e, 0x9a, 0xad, 0xa2, 0x0b, 0x27, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x69, 0xd6, 0x5b, + 0x23, 0xd0, 0x5f, 0xc8, 0x1e, 0x9a, 0xad, 0xa2, + 0x0b, 0x27, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x69, 0xd6, 0x5b, 0x23, 0xd0, 0x5f, 0xc8, + 0x1e, 0x9a, 0xad, 0xa2, 0x0b, 0x27, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x69, 0xd6, 0x5b, + 0x23, 0xd0, 0x5f, 0xc8, 0x1e, 0x9a, 0xad, 0xa2, + 0x0b, 0x27, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x69, 0xd6, 0x5b, 0x23, 0xd0, 0x5f, 0xc8, + 0x1e, 0x9a, 0xad, 0xa2, 0x0b, 0x27, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x69, 0xd6, 0x5b, + 0x23, 0xd0, 0x5f, 0xc8, 0x1e, 0x9a, 0xad, 0xae, + 0xcb, 0x1c, 0xa6, 0xfe, 0xfd, 0xa5, 0xf6, 0xd1, + 0xe2, 0x60, 0xd6, 0xf2, 0x43, 0x5b, 0xc2, 0x50, + 0x4c, 0x75, 0x96, 0xc8, 0xf4, 0x17, 0xf2, 0x07, + 0xa6, 0x9d, 0x65, 0xb2, 0x3d, 0x05, 0xfc, 0x81, + 0xe9, 0xa8, 0x7b, 0xdc, 0xa3, 0x30, 0xb0, 0x68, + 0x75, 0xcc, 0x58, 0x58, 0xed, 0x01, 0xe0, 0x87, + 0x36, 0xbb, 0xd5, 0x0b, 0x8d, 0x05, 0x93, 0xac, + 0xb6, 0x47, 0xa0, 0xbf, 0x90, 0x3d, 0x34, 0xeb, + 0x2d, 0x91, 0xe8, 0x2f, 0xe4, 0x0f, 0x4d, 0x56, + 0xd1, 0x05, 0x93, 0xac, 0xb6, 0x47, 0xa0, 0xbf, + 0x90, 0x3d, 0x34, 0xeb, 0x2d, 0x91, 0xe8, 0x2f, + 0xe4, 0x0f, 0x4d, 0x57, 0x63, 0x8a, 0x49, 0x9e, + 0x23, 0x89, 0xa6, 0x49, 0x1d, 0xe4, 0xb1, 0xba, + 0x49, 0x5b, 0x22, 0xb4, 0xb9, 0x9a, 0xe4, 0x5a, + 0xc7, 0x19, 0x33, 0x92, 0x5b, 0x80, 0xd0, 0x1a, + 0x8e, 0xdd, 0x10, 0x4f, 0x75, 0x96, 0xc8, 0xf4, + 0x17, 0xf2, 0x07, 0xa6, 0x9d, 0x65, 0xb2, 0x3d, + 0x05, 0xfc, 0x81, 0xe9, 0xaa, 0xf4, 0xb1, 0x3e, + 0x29, 0x1f, 0x14, 0x82, 0x8f, 0x8c, 0x96, 0xb8, + 0x6b, 0xa1, 0x1d, 0x90, 0xbc, 0x77, 0xd0, 0x59, + 0x3a, 0xcb, 0x64, 0x7a, 0x0b, 0xf9, 0x03, 0xd3, + 0x4e, 0xb2, 0xd9, 0x1e, 0x82, 0xfe, 0x40, 0xf4, + 0xd4, 0x13, 0x2c, 0xae, 0x9f, 0x6a, 0xfb, 0xb6, + 0xb2, 0xb0, 0x46, 0x70, 0xbd, 0xf5, 0x1a, 0x09, + 0xa7, 0x1a, 0xd0, 0x82, 0xc9, 0xd6, 0x5b, 0x23, + 0xd0, 0x5f, 0xc8, 0x1e, 0x9a, 0x75, 0x96, 0xc8, + 0xf4, 0x17, 0xf2, 0x07, 0xa6, 0xab, 0xac, 0x63, + 0xa4, 0x91, 0xb1, 0xb0, 0x62, 0x7b, 0xc8, 0x6b, + 0x46, 0xf9, 0x2a, 0x43, 0xe1, 0xbc, 0xef, 0xa3, + 0x11, 0xdb, 0x73, 0x3d, 0x24, 0x12, 0x5d, 0x65, + 0xb2, 0x3d, 0x05, 0xfc, 0x81, 0xe9, 0xa7, 0x59, + 0x6c, 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x6a, 0x2a, + 0x7c, 0x87, 0x36, 0x82, 0x27, 0x4d, 0x35, 0xb9, + 0x64, 0x6c, 0xd2, 0xe7, 0x17, 0x33, 0x7e, 0x9f, + 0x39, 0x73, 0x5d, 0x59, 0xdc, 0x5a, 0x4a, 0x22, + 0xb8, 0x66, 0x09, 0x08, 0x0e, 0xc3, 0x50, 0x74, + 0x1d, 0xdf, 0x14, 0x94, 0x13, 0xdd, 0x65, 0xb2, + 0x3d, 0x05, 0xfc, 0x81, 0xe9, 0xa7, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x6a, 0xb6, 0x88, + 0x2c, 0x9d, 0x65, 0xb2, 0x3d, 0x05, 0xfc, 0x81, + 0xe9, 0xa7, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x6a, 0xb6, 0x88, 0x2c, 0x9d, 0x65, 0xb2, + 0x3d, 0x05, 0xfc, 0x81, 0xe9, 0xa7, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x6a, 0xb6, 0x88, + 0x2c, 0x9d, 0x65, 0xb2, 0x3d, 0x05, 0xfc, 0x81, + 0xe9, 0xa7, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x6a, 0xb6, 0x88, 0x2c, 0x9d, 0x65, 0xb2, + 0x3d, 0x05, 0xfc, 0x81, 0xe9, 0xa7, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x6a, 0xb6, 0x88, + 0x2c, 0x9d, 0x65, 0xb2, 0x3d, 0x05, 0xfc, 0x81, + 0xe9, 0xa7, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x6a, 0xb6, 0x88, 0x2c, 0x9d, 0x65, 0xb2, + 0x3d, 0x05, 0xfc, 0x81, 0xe9, 0xa7, 0x59, 0x6c, + 0x8f, 0x41, 0x7f, 0x20, 0x7a, 0x6a, 0xb6, 0x88, + 0x2c, 0x9d, 0x65, 0xb2, 0x3d, 0x05, 0xfc, 0x81, + 0xe9, 0xa7, 0x59, 0x6c, 0x8f, 0x41, 0x7f, 0x20, + 0x7a, 0x6a, 0xb6, 0x88, 0x2c, 0x9d, 0x65, 0xb2, + 0x3d, 0x05, 0xfc, 0x81, 0xe9, 0xaf, 0x70, 0xe6, + 0x1b, 0x2a, 0xe9, 0xa3, 0x11, 0xd9, 0xb9, 0xaf, + 0x2e, 0x68, 0x69, 0xc0, 0x3c, 0xa2, 0x74, 0x7e, + 0x7a, 0xac, 0x2d, 0xd6, 0x9e, 0xf7, 0x07, 0xda, + 0xb3, 0xeb, 0x20, 0xb8, 0x67, 0x3e, 0xf2, 0xcd, + 0xfc, 0x03, 0xc2, 0xb8, 0x17, 0x7e, 0x75, 0xef, + 0x4d, 0xf3, 0x07, 0x84, 0xae, 0x04, 0x1e, 0xa0, + 0xfd, 0xb3, 0x3c, 0xe6, 0xf8, 0x54, 0xd2, 0x85, + 0x83, 0xf6, 0xcc, 0xf3, 0x9b, 0xe1, 0x53, 0x48, + 0x30, 0x54, 0x76, 0x69, 0xef, 0x56, 0x7f, 0x69, + 0xf2, 0x85, 0x22, 0x54, 0x76, 0x69, 0xef, 0x56, + 0x7f, 0x69, 0xf2, 0x84, 0x0c, 0xaf, 0xde, 0xaf, + 0x3c, 0xf3, 0xf5, 0x8a, 0x92, 0x51, 0x99, 0x59, + 0xff, 0x00, 0xba, 0xbc, 0xf3, 0xcf, 0xd6, 0x2a, + 0x4a, 0xa8, 0x32, 0x8b, 0x15, 0x4a, 0xa0, 0xca, + 0x2c, 0x55, 0x2a, 0x83, 0x28, 0xb1, 0x54, 0xaa, + 0x0c, 0xa2, 0xc5, 0x52, 0xa8, 0x32, 0x8b, 0x15, + 0x4a, 0xa0, 0xca, 0x2c, 0x55, 0x2a, 0x83, 0x28, + 0xb1, 0x54, 0xaa, 0x0c, 0xa2, 0xc5, 0x52, 0xa8, + 0x32, 0x8b, 0x15, 0x4a, 0xa0, 0xca, 0x2c, 0x55, + 0x2a, 0x83, 0x28, 0xb1, 0x54, 0xaa, 0x0c, 0xa2, + 0xc5, 0x52, 0xa8, 0x32, 0x8b, 0x15, 0x4a, 0xa0, + 0xca, 0x2c, 0x55, 0x2a, 0x83, 0x28, 0xb1, 0x54, + 0xaa, 0x0c, 0xa2, 0xc5, 0x52, 0xa8, 0x32, 0x8b, + 0x15, 0x4a, 0xa0, 0xca, 0x2c, 0x55, 0x2a, 0x83, + 0x28, 0xb1, 0x54, 0xaa, 0x0c, 0xa2, 0xc5, 0x52, + 0xa8, 0x32, 0x8b, 0x15, 0x4a, 0xa0, 0xca, 0x2c, + 0x55, 0x2a, 0x83, 0x28, 0xb1, 0x54, 0xaa, 0x0c, + 0xa2, 0xc5, 0x52, 0xa8, 0x32, 0x8b, 0x15, 0x4a, + 0xa0, 0xca, 0x2c, 0x55, 0x2a, 0x83, 0x23, 0x5a, + 0x83, 0x77, 0x94, 0x7b, 0x65, 0x4d, 0x83, 0xa5, + 0x42, 0x3b, 0xca, 0x3d, 0xb2, 0x83, 0x75, 0x97, + 0xbd, 0xc3, 0xe7, 0x05, 0x19, 0xb5, 0x07, 0xfc, + 0xde, 0x4f, 0x35, 0x9e, 0x02, 0xa4, 0xec, 0xbd, + 0xee, 0x1f, 0x39, 0x44, 0xed, 0x51, 0xa6, 0x72, + 0xff, 0x00, 0x31, 0x9e, 0x02, 0xba, 0xe0, 0xfb, + 0xd9, 0x7c, 0xef, 0xf0, 0xa3, 0xf6, 0x91, 0x95, + 0x4a, 0xad, 0x78, 0x93, 0x12, 0xd5, 0xab, 0xcd, + 0xd1, 0xb2, 0xa9, 0x55, 0xaf, 0x12, 0x62, 0x4d, + 0x4d, 0xad, 0x95, 0x4a, 0xad, 0x78, 0x93, 0x12, + 0x6a, 0x6d, 0x6c, 0xaa, 0x55, 0x6b, 0xc4, 0x98, + 0x93, 0x53, 0x6b, 0x65, 0x52, 0xab, 0x5e, 0x24, + 0xc4, 0x9a, 0x9b, 0x5b, 0x2a, 0x95, 0x5a, 0xf1, + 0x26, 0x24, 0xd4, 0xda, 0xd9, 0x54, 0xaa, 0xd7, + 0x89, 0x31, 0x26, 0xa6, 0xd6, 0xca, 0xa5, 0x56, + 0xbc, 0x49, 0x89, 0x35, 0x36, 0xbb, 0xb2, 0xa3, + 0xfe, 0x67, 0x6b, 0xf6, 0xad, 0xf0, 0xab, 0x1e, + 0xd6, 0xe2, 0x75, 0x8c, 0x38, 0x41, 0x34, 0x97, + 0x4d, 0x34, 0xee, 0x2a, 0xa5, 0xa5, 0xc8, 0xb6, + 0xba, 0x8a, 0xe0, 0x8c, 0x5c, 0xd3, 0x83, 0xb0, + 0xd6, 0x95, 0xa2, 0xb0, 0xfc, 0x6b, 0x0f, 0x44, + 0x77, 0xef, 0x07, 0x12, 0xe3, 0x92, 0x2d, 0xba, + 0xb6, 0x88, 0xd7, 0x46, 0x9c, 0x13, 0x4e, 0xd6, + 0x4c, 0x76, 0xb6, 0xd9, 0xbf, 0x83, 0x76, 0xca, + 0x5a, 0x4d, 0x1c, 0x53, 0x5c, 0x48, 0xd2, 0xd1, + 0x25, 0x1a, 0xc0, 0xed, 0x04, 0xd3, 0x4d, 0x57, + 0x9b, 0x2b, 0xb6, 0xcb, 0xb5, 0x77, 0x04, 0x1a, + 0xb5, 0xcd, 0x73, 0x18, 0x7b, 0x2c, 0x0d, 0x05, + 0x71, 0xde, 0x6d, 0x84, 0xf2, 0xb3, 0x0d, 0xac, + 0x22, 0x02, 0xed, 0x05, 0xee, 0x76, 0x22, 0x07, + 0x61, 0x42, 0xdb, 0x5d, 0x4b, 0x6d, 0x3b, 0x2e, + 0x22, 0x77, 0xeb, 0x18, 0x71, 0x57, 0x7f, 0x7f, + 0x85, 0x46, 0xcb, 0x5a, 0x6d, 0x33, 0x1a, 0x4d, + 0xa3, 0x45, 0xad, 0x96, 0x94, 0x8c, 0x74, 0xa7, + 0x18, 0xa5, 0xa2, 0xd6, 0x9e, 0x7a, 0x2c, 0x7b, + 0x4b, 0x98, 0x66, 0x16, 0x97, 0xb1, 0x36, 0x09, + 0x4c, 0x71, 0x48, 0xc1, 0x84, 0x00, 0x0d, 0x5c, + 0x0e, 0x90, 0x16, 0xbc, 0xde, 0xdf, 0x38, 0x83, + 0x2e, 0x74, 0xb7, 0x77, 0xa2, 0x48, 0x9d, 0x85, + 0xae, 0x86, 0x80, 0x69, 0x34, 0x3d, 0xe5, 0xed, + 0x9b, 0x5d, 0x65, 0x23, 0x5a, 0x6e, 0xad, 0x49, + 0x91, 0x9a, 0x45, 0x28, 0xe1, 0x5d, 0xf6, 0xd7, + 0x52, 0x8b, 0xce, 0xb3, 0xd9, 0x73, 0x3a, 0x31, + 0x8d, 0xe6, 0xa0, 0x8c, 0xd5, 0xad, 0x26, 0xa5, + 0xce, 0xa5, 0x2a, 0xea, 0x25, 0x2b, 0x7f, 0xa2, + 0x36, 0x44, 0x2d, 0x96, 0xd8, 0xf4, 0xc9, 0x7d, + 0xf3, 0x6d, 0xfa, 0x6d, 0xac, 0x70, 0xd1, 0x68, + 0x31, 0xba, 0x5d, 0x9e, 0x11, 0xb4, 0x55, 0xce, + 0xb5, 0x6d, 0x06, 0xff, 0x00, 0x88, 0x14, 0x56, + 0xc7, 0xc6, 0xfe, 0x7a, 0xe6, 0x52, 0xd2, 0x1a, + 0x1a, 0x19, 0x52, 0x29, 0xa6, 0xa4, 0x90, 0xb5, + 0x47, 0xb5, 0xdc, 0xd5, 0x9c, 0x50, 0x47, 0x6e, + 0x71, 0xc6, 0xc6, 0xb0, 0x3c, 0xbc, 0x50, 0xe1, + 0xa5, 0x74, 0x53, 0x74, 0x05, 0xbf, 0xe3, 0x1b, + 0x66, 0xc2, 0x79, 0xbb, 0x72, 0x25, 0xde, 0x24, + 0x06, 0xd5, 0x57, 0x65, 0xf4, 0xb4, 0x6d, 0xe1, + 0x32, 0xb6, 0xfc, 0x33, 0x7c, 0x77, 0xdd, 0xf6, + 0x57, 0xc3, 0xde, 0xdd, 0x0c, 0x8d, 0x76, 0xd6, + 0xc9, 0x4d, 0x38, 0x62, 0x2d, 0x3d, 0xba, 0x35, + 0x72, 0x6d, 0x73, 0x1f, 0xed, 0xb0, 0x50, 0x13, + 0x8a, 0x32, 0x05, 0x05, 0x6b, 0xa7, 0xfa, 0x54, + 0x3d, 0xae, 0x69, 0x71, 0x0e, 0x62, 0x33, 0x0f, + 0xda, 0x48, 0x5c, 0xe7, 0x3c, 0x1d, 0x01, 0xd8, + 0xbf, 0x37, 0xb8, 0xa7, 0x67, 0xdb, 0x1b, 0x67, + 0x45, 0x58, 0xed, 0x9c, 0x65, 0x03, 0x46, 0x3a, + 0x51, 0xa7, 0xb2, 0xad, 0x35, 0xb5, 0x6d, 0x59, + 0x88, 0xd7, 0x86, 0x8a, 0x57, 0x26, 0x3b, 0xe3, + 0xb4, 0x4d, 0xb4, 0xdd, 0x7d, 0xe9, 0x2c, 0xd5, + 0xae, 0x66, 0xcf, 0x48, 0xd7, 0x0a, 0x39, 0xb1, + 0x30, 0x1e, 0xd8, 0x2d, 0x5e, 0x72, 0x7f, 0xfb, + 0x8d, 0x9f, 0x6c, 0x6d, 0xd2, 0xe3, 0x1b, 0xe3, + 0xee, 0x9c, 0x5c, 0x6a, 0x16, 0xf3, 0x6a, 0x45, + 0xde, 0x5c, 0xfb, 0x47, 0x40, 0x43, 0xe4, 0x68, + 0x06, 0x5c, 0x42, 0x95, 0x04, 0x1a, 0xd0, 0x0e, + 0xc2, 0xf5, 0x90, 0xbf, 0x3a, 0xb4, 0xb6, 0x33, + 0x41, 0x6e, 0x2e, 0x6c, 0xe4, 0xab, 0x83, 0x4b, + 0xc0, 0x35, 0x1a, 0x09, 0x6e, 0x9a, 0xee, 0x6f, + 0x2a, 0xec, 0xb6, 0xc9, 0xd6, 0x22, 0x3e, 0xad, + 0x7c, 0x5d, 0x3b, 0xb4, 0xee, 0x56, 0x6b, 0x33, + 0x68, 0xed, 0xcc, 0x4f, 0xba, 0x1b, 0xb6, 0x5e, + 0xca, 0xe2, 0x3b, 0xf9, 0xa5, 0x96, 0x37, 0x46, + 0x23, 0x66, 0x0f, 0x18, 0x52, 0xa4, 0x9d, 0xce, + 0x05, 0xcb, 0xb5, 0x47, 0xfc, 0xd8, 0xfd, 0x93, + 0x3e, 0x55, 0x29, 0x94, 0x67, 0x37, 0x79, 0xad, + 0xfb, 0x81, 0x8b, 0x9a, 0xb6, 0x89, 0x84, 0x91, + 0xba, 0x5c, 0x48, 0xa5, 0x6a, 0xa1, 0xb6, 0xaa, + 0x46, 0xbb, 0x38, 0x78, 0x06, 0xa5, 0xb1, 0xb0, + 0x1a, 0x6e, 0x11, 0xbe, 0xaf, 0x59, 0xb7, 0x77, + 0x59, 0xe9, 0x73, 0xcb, 0x15, 0x8f, 0x2d, 0x31, + 0x4d, 0x74, 0x9b, 0x70, 0xd5, 0x19, 0x54, 0xaa, + 0xd7, 0x89, 0x31, 0x2e, 0xb1, 0x3c, 0x21, 0x8e, + 0x6a, 0xd9, 0x54, 0xaa, 0xd7, 0x89, 0x31, 0x29, + 0xd4, 0xda, 0xd9, 0x54, 0xaa, 0xd7, 0x89, 0x31, + 0x26, 0xa6, 0xd6, 0xca, 0xa5, 0x56, 0xbc, 0x49, + 0x89, 0x35, 0x36, 0xb6, 0x55, 0x2a, 0xb5, 0xe2, + 0x4c, 0x49, 0xa9, 0xb5, 0xb2, 0xa9, 0x55, 0xaf, + 0x12, 0x62, 0x4d, 0x4d, 0xad, 0x95, 0x4a, 0xad, + 0x78, 0x93, 0x12, 0x6a, 0x6d, 0x6c, 0xaa, 0x55, + 0x6b, 0xc4, 0x98, 0x93, 0x53, 0x6a, 0x43, 0x27, + 0x3f, 0xe6, 0x96, 0xbf, 0x6a, 0xdf, 0x0a, 0xb1, + 0x66, 0xde, 0xfa, 0xef, 0x35, 0xbe, 0x05, 0x5a, + 0xc9, 0x9d, 0xfe, 0x6b, 0x69, 0xf6, 0xad, 0xf0, + 0xab, 0x36, 0x6d, 0xef, 0xae, 0xed, 0x0f, 0x02, + 0xcd, 0xe6, 0x3c, 0x63, 0xe0, 0xf4, 0x3c, 0x8c, + 0x69, 0x8e, 0xff, 0x00, 0x17, 0x1a, 0x22, 0x2e, + 0x2d, 0x86, 0xd6, 0x7b, 0x85, 0x8f, 0xf6, 0xbe, + 0xa8, 0x55, 0x85, 0x67, 0xda, 0xcf, 0x70, 0xb1, + 0xfe, 0xd7, 0xd5, 0x0a, 0xb0, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x07, 0x51, 0xed, 0x69, 0x56, 0x2c, + 0xdb, 0x9e, 0x8b, 0x22, 0xcb, 0xc5, 0xae, 0x26, + 0xdb, 0x96, 0xd6, 0x5c, 0x1a, 0x2a, 0x69, 0xf9, + 0xd4, 0x55, 0xd5, 0x29, 0x67, 0x9b, 0x66, 0x59, + 0x54, 0x62, 0x27, 0xc7, 0x8a, 0xdd, 0xfa, 0x44, + 0x53, 0x0d, 0x04, 0x1a, 0x69, 0x05, 0x07, 0x9b, + 0x5c, 0xdd, 0xac, 0xca, 0xae, 0x2c, 0x6e, 0x1a, + 0xe9, 0x9b, 0x2e, 0x98, 0x9d, 0x5a, 0xe1, 0x3b, + 0xfa, 0x56, 0xab, 0xdc, 0xad, 0xf6, 0x96, 0x96, + 0xd7, 0x7c, 0xe0, 0x95, 0x97, 0x4d, 0xae, 0x81, + 0x4c, 0x24, 0x01, 0xa0, 0xe9, 0x2a, 0x55, 0xd6, + 0xb9, 0x5e, 0x77, 0x65, 0x35, 0xcd, 0x9c, 0x3e, + 0xcb, 0x79, 0x6e, 0x31, 0x39, 0x80, 0xe8, 0x23, + 0x4e, 0xf6, 0x8d, 0x34, 0x2b, 0x9e, 0x33, 0xed, + 0x7b, 0x2b, 0x23, 0x06, 0x97, 0xd8, 0xca, 0x1e, + 0xd1, 0xfd, 0x47, 0x1a, 0xfc, 0xa5, 0x07, 0x21, + 0xca, 0x5e, 0x32, 0xd8, 0xef, 0xf9, 0xc0, 0x4c, + 0xd2, 0x73, 0x51, 0xc3, 0x4d, 0x24, 0xd4, 0x8a, + 0xe2, 0xaf, 0x63, 0x79, 0x76, 0x1d, 0x9f, 0xb4, + 0x8a, 0x46, 0x5b, 0x5d, 0x5f, 0xb2, 0x1b, 0xb7, + 0xd3, 0xf5, 0x40, 0x54, 0x02, 0x77, 0x09, 0x5e, + 0xf3, 0x99, 0xbd, 0x86, 0x3c, 0xae, 0xd5, 0xba, + 0xed, 0x58, 0xd9, 0x5e, 0x37, 0xcd, 0x45, 0x6a, + 0xb7, 0x4f, 0x0e, 0x57, 0x9d, 0xdd, 0x0b, 0xbb, + 0x3b, 0xbf, 0x67, 0xbc, 0x76, 0x12, 0x61, 0x90, + 0x68, 0x2e, 0x6f, 0x93, 0x42, 0x83, 0x5e, 0x4b, + 0x96, 0x7b, 0x26, 0x75, 0x82, 0xe2, 0xe1, 0x91, + 0xcf, 0x03, 0xe8, 0xd8, 0xa8, 0x6b, 0x20, 0x73, + 0x6a, 0x0b, 0x4a, 0xf3, 0x73, 0x60, 0x4e, 0x7a, + 0x05, 0xa5, 0xf3, 0x45, 0xc4, 0xf3, 0x49, 0xe4, + 0xb6, 0xae, 0x8b, 0x5b, 0x8d, 0x74, 0xe9, 0x58, + 0xb3, 0x6d, 0xfb, 0x36, 0x9e, 0x16, 0xe6, 0x07, + 0x1d, 0xc0, 0x3a, 0x5f, 0xa2, 0x84, 0x61, 0xa0, + 0x2d, 0xa2, 0x59, 0x80, 0x36, 0xb5, 0xd4, 0xf5, + 0xf2, 0x7c, 0xa8, 0x38, 0x9b, 0x96, 0x5d, 0x5e, + 0x66, 0xd2, 0xd9, 0x89, 0x03, 0xe5, 0x6b, 0xdf, + 0xce, 0xcc, 0x74, 0x0a, 0x03, 0x42, 0xff, 0x00, + 0xe8, 0x5d, 0x27, 0x21, 0xb6, 0x99, 0x92, 0xb6, + 0xc6, 0xf9, 0x97, 0x13, 0xc0, 0xd2, 0x5d, 0x10, + 0x14, 0xad, 0x35, 0xd1, 0x48, 0x65, 0xfe, 0x25, + 0xe6, 0x79, 0x28, 0xf2, 0x9a, 0x1f, 0x4e, 0x17, + 0x15, 0x5c, 0xb4, 0xbc, 0xb8, 0xb3, 0x94, 0x4d, + 0x6c, 0xfc, 0x12, 0x00, 0x5a, 0x0e, 0xba, 0xd7, + 0xb0, 0x82, 0x5a, 0xd2, 0x9f, 0x0a, 0xde, 0xe8, + 0xa1, 0xe7, 0x86, 0xad, 0xcf, 0x21, 0x70, 0xc1, + 0x94, 0xbd, 0xf9, 0x7c, 0x97, 0xf3, 0x4a, 0x20, + 0x85, 0x9a, 0x23, 0xc4, 0x09, 0x32, 0x1f, 0xea, + 0xe9, 0x0a, 0x5f, 0x24, 0xb7, 0x8e, 0xef, 0x23, + 0xba, 0x8e, 0x67, 0x86, 0x46, 0xe9, 0xf1, 0x4a, + 0xfd, 0xe0, 0xd0, 0xd7, 0x1f, 0x02, 0xd1, 0xb5, + 0x01, 0xff, 0x00, 0xf6, 0x8f, 0x81, 0xc0, 0xe5, + 0xe5, 0x80, 0x5b, 0xe1, 0xd4, 0x0e, 0xed, 0x50, + 0x41, 0x02, 0xe6, 0x9a, 0xb4, 0x96, 0x91, 0x43, + 0xdd, 0x0a, 0x7f, 0x65, 0x6e, 0xae, 0x65, 0xcd, + 0x30, 0x4b, 0x34, 0x92, 0x37, 0x9b, 0x77, 0x8a, + 0xe7, 0x12, 0x37, 0x37, 0x0a, 0xaf, 0xee, 0x29, + 0xbd, 0x91, 0xfe, 0x6d, 0xff, 0x00, 0xe3, 0x77, + 0xc8, 0x82, 0x36, 0x5b, 0xcb, 0xc9, 0x24, 0x74, + 0x6e, 0x9e, 0x42, 0xd7, 0x3c, 0x8c, 0x25, 0xee, + 0x23, 0x4b, 0xb4, 0x68, 0xae, 0xe2, 0xec, 0xcc, + 0x72, 0xfb, 0xa3, 0x9b, 0xc3, 0x67, 0x75, 0x73, + 0xed, 0x12, 0xcc, 0x1a, 0x04, 0xce, 0x6d, 0x28, + 0x0d, 0x68, 0x29, 0x5d, 0xca, 0x28, 0xef, 0xff, + 0x00, 0x73, 0xff, 0x00, 0xe4, 0xfe, 0xf2, 0xb0, + 0xe6, 0x9f, 0xea, 0xab, 0x2e, 0xd4, 0x7f, 0xde, + 0x41, 0xcd, 0xf0, 0xe4, 0x11, 0x5c, 0x7b, 0x35, + 0xd5, 0xfb, 0x23, 0x99, 0xc6, 0x91, 0x30, 0x0d, + 0x2e, 0x1b, 0x84, 0x8a, 0xe8, 0xaa, 0xf0, 0x36, + 0x7e, 0x38, 0x26, 0x31, 0xe6, 0x17, 0x91, 0xdb, + 0x97, 0x38, 0xb6, 0x16, 0xd2, 0xa5, 0xe2, 0xb4, + 0x0e, 0xec, 0x2d, 0x79, 0xb6, 0x9d, 0xa3, 0x7f, + 0xdb, 0xc6, 0x3b, 0xe1, 0x7a, 0xda, 0xb2, 0x7a, + 0xe6, 0x41, 0x5d, 0x4c, 0x65, 0x3b, 0x1a, 0x2a, + 0x83, 0x93, 0x30, 0xca, 0xee, 0x2c, 0xaf, 0x7d, + 0x8c, 0xfe, 0xb1, 0xee, 0xa7, 0x36, 0xe1, 0xa3, + 0x10, 0x76, 0xa5, 0xde, 0x36, 0x76, 0xd9, 0xb2, + 0x0b, 0x49, 0xef, 0xd9, 0x1d, 0xeb, 0xc0, 0xa4, + 0x38, 0x49, 0x02, 0xbb, 0x95, 0x52, 0x37, 0xac, + 0x0f, 0xda, 0x9c, 0xbe, 0xba, 0x7f, 0x52, 0xd3, + 0xdb, 0xa1, 0x7a, 0xe4, 0xbd, 0xb7, 0xc9, 0x0e, + 0x67, 0x2c, 0xf3, 0x5f, 0xbd, 0x93, 0x36, 0x62, + 0xe7, 0x30, 0x46, 0x48, 0x05, 0xa7, 0xc9, 0xad, + 0x10, 0x47, 0x5a, 0xe4, 0xd3, 0x4d, 0x9a, 0x3b, + 0x2c, 0x91, 0xe2, 0x19, 0x18, 0x09, 0x2e, 0xa6, + 0x21, 0x46, 0x8a, 0xea, 0xa8, 0xd6, 0xbd, 0x5e, + 0xe4, 0xec, 0xb1, 0xb4, 0x32, 0x4f, 0x72, 0xcf, + 0x6a, 0xd1, 0x4b, 0x56, 0xeb, 0xa1, 0x34, 0xa9, + 0x52, 0xf6, 0x97, 0x76, 0xb7, 0x9b, 0x56, 0xc9, + 0xed, 0x5e, 0x24, 0x8d, 0xd0, 0x38, 0x17, 0x50, + 0x8d, 0x20, 0x53, 0x75, 0x56, 0xee, 0x9e, 0xe7, + 0xdd, 0x4a, 0xf7, 0x1c, 0x4e, 0x73, 0xdc, 0x49, + 0x3a, 0x4e, 0xb4, 0x1a, 0x91, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x6e, 0xb4, 0xf7, 0xb8, 0x3e, 0xd5, 0x9f, + 0x59, 0x69, 0x5b, 0xad, 0x3d, 0xee, 0x0f, 0xb5, + 0x67, 0xd6, 0x41, 0x70, 0xce, 0xbd, 0xe9, 0xbe, + 0x60, 0xf0, 0x95, 0xc0, 0xbb, 0xf3, 0xaf, 0x7a, + 0x6f, 0x98, 0x3c, 0x25, 0x70, 0x20, 0xf5, 0x07, + 0xed, 0x99, 0xe7, 0x37, 0xc2, 0xa6, 0x94, 0x34, + 0x3f, 0xb6, 0x67, 0x9c, 0xdf, 0x0a, 0x98, 0xaa, + 0x01, 0x51, 0xd9, 0xa7, 0xbd, 0x59, 0xfd, 0xa7, + 0xca, 0x14, 0x8d, 0x54, 0x6e, 0x68, 0x7f, 0xee, + 0xad, 0x3e, 0xd3, 0xe5, 0x08, 0x19, 0x67, 0xbd, + 0x5d, 0xf9, 0xe7, 0xeb, 0x15, 0x22, 0xa3, 0xb2, + 0xcf, 0x7a, 0xbb, 0xf3, 0xcf, 0xd6, 0x2a, 0x45, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x06, 0x46, 0xb5, 0x08, 0x75, 0x9e, 0xd9, + 0x53, 0x63, 0x5a, 0x84, 0x3a, 0xcf, 0x6c, 0xa0, + 0xf7, 0x03, 0xc4, 0x73, 0x46, 0xf3, 0xa9, 0xae, + 0x04, 0xae, 0x1d, 0xb2, 0x80, 0xb2, 0xfe, 0x2b, + 0x81, 0xe4, 0x4d, 0x1d, 0x01, 0xdc, 0xc4, 0xd3, + 0xc4, 0x57, 0x5a, 0xed, 0x96, 0xda, 0x2c, 0xe7, + 0x2d, 0x36, 0x92, 0x10, 0xdb, 0x88, 0xb4, 0xc4, + 0xee, 0xc8, 0xd4, 0x7b, 0x5b, 0xea, 0xd8, 0xed, + 0xb6, 0xd1, 0x2e, 0x59, 0xf1, 0xef, 0xc7, 0x35, + 0x8f, 0x1f, 0x15, 0x1f, 0x12, 0x62, 0x59, 0xba, + 0xb6, 0xb8, 0xb3, 0x9d, 0xd6, 0xf7, 0x2c, 0x2c, + 0x91, 0xba, 0xc1, 0xd4, 0x7b, 0x20, 0xee, 0x85, + 0xaa, 0xab, 0x5e, 0xba, 0xbc, 0xbd, 0x26, 0x38, + 0x4c, 0x69, 0x2d, 0x98, 0x93, 0x12, 0xd7, 0x54, + 0xaa, 0x0d, 0x98, 0x93, 0x12, 0xd7, 0x54, 0xaa, + 0x0d, 0x98, 0x93, 0x12, 0xd7, 0x54, 0xaa, 0x0d, + 0x98, 0x93, 0x12, 0xd7, 0x54, 0xaa, 0x0d, 0x98, + 0x93, 0x12, 0xd7, 0x54, 0xaa, 0x0d, 0x98, 0x93, + 0x12, 0xd7, 0x54, 0xaa, 0x0d, 0x98, 0x93, 0x12, + 0xd7, 0x54, 0xaa, 0x0d, 0x98, 0x8a, 0x62, 0x3b, + 0xfa, 0x96, 0xba, 0xa5, 0x50, 0x6c, 0xc4, 0x98, + 0x96, 0xba, 0xa5, 0x53, 0x53, 0x46, 0xcc, 0x45, + 0x31, 0x2d, 0x75, 0x4a, 0xa1, 0x1c, 0x3c, 0x1b, + 0x31, 0x26, 0x22, 0xb5, 0xd5, 0x2a, 0x86, 0x8d, + 0x98, 0x8f, 0x1a, 0x62, 0xd2, 0x0e, 0xf6, 0xa5, + 0xae, 0xa9, 0x54, 0x1b, 0x31, 0x1e, 0x1d, 0x6a, + 0x53, 0x29, 0xda, 0x1b, 0x9c, 0xb5, 0x9c, 0xce, + 0x16, 0xcd, 0x01, 0x38, 0xb0, 0x38, 0x90, 0x41, + 0xfe, 0xa9, 0x0a, 0x1e, 0xa9, 0x55, 0x13, 0x58, + 0xb7, 0x09, 0x5a, 0x96, 0xb5, 0x26, 0x26, 0xb3, + 0xa6, 0x8b, 0x3c, 0xbb, 0x69, 0x26, 0x02, 0x2d, + 0xad, 0x5b, 0x1b, 0xce, 0xb7, 0x38, 0xe2, 0xa1, + 0xdf, 0x38, 0x68, 0xab, 0xf3, 0x5c, 0x4b, 0x34, + 0xaf, 0x9a, 0x57, 0x63, 0x92, 0x43, 0x89, 0xce, + 0x3b, 0xfa, 0x96, 0x82, 0x41, 0xd7, 0xa5, 0x2a, + 0x91, 0x4a, 0xd6, 0x75, 0x84, 0xdf, 0x25, 0xef, + 0xf7, 0x4e, 0xb1, 0xc9, 0xb3, 0x12, 0x62, 0x5a, + 0xea, 0x95, 0x52, 0xa3, 0x66, 0x24, 0xc4, 0xb5, + 0xd5, 0x2a, 0x83, 0x66, 0x24, 0xc4, 0xb5, 0xd5, + 0x2a, 0x83, 0x66, 0x24, 0xc4, 0xb5, 0xd5, 0x2a, + 0x83, 0x66, 0x24, 0xc4, 0xb5, 0xd5, 0x2a, 0x83, + 0x66, 0x24, 0xc4, 0xb5, 0xd5, 0x2a, 0x83, 0x66, + 0x24, 0xc4, 0xb5, 0xd5, 0x2a, 0x83, 0x66, 0x24, + 0xc4, 0xb5, 0xd5, 0x7a, 0x8d, 0xb2, 0x4b, 0x23, + 0x62, 0x8d, 0xa5, 0xef, 0x79, 0xa3, 0x40, 0xd6, + 0x7b, 0x40, 0x26, 0xba, 0x1a, 0x4c, 0xf0, 0x84, + 0xbe, 0xcc, 0x5b, 0xba, 0xe7, 0x38, 0x80, 0x81, + 0xe2, 0xc5, 0x59, 0x5c, 0x7b, 0x0d, 0xd5, 0xc2, + 0x54, 0xf6, 0x63, 0x20, 0x7d, 0xec, 0x84, 0x6a, + 0x07, 0x08, 0xfe, 0xc8, 0x4c, 0xa7, 0x2f, 0x6e, + 0x47, 0x60, 0xe9, 0x26, 0xa1, 0xbc, 0x9f, 0x4b, + 0x80, 0xd3, 0x4d, 0xe6, 0x8e, 0xd2, 0xe7, 0xa9, + 0x3a, 0x49, 0xa9, 0x3a, 0x4a, 0xcb, 0x92, 0xdb, + 0xac, 0xf4, 0xfc, 0xbe, 0x39, 0xa5, 0x34, 0x9f, + 0x6f, 0x11, 0x11, 0x15, 0x1d, 0x8d, 0xac, 0xf7, + 0x0b, 0x1f, 0xed, 0x7d, 0x50, 0xab, 0x0a, 0xcf, + 0xb5, 0x9e, 0xe1, 0x63, 0xfd, 0xaf, 0xaa, 0x15, + 0x61, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x29, 0x5e, + 0xc2, 0xb1, 0x3c, 0x5a, 0xe7, 0x76, 0x16, 0xa0, + 0x5c, 0xb2, 0xde, 0xee, 0xd9, 0xb8, 0x1c, 0xd9, + 0x0d, 0x01, 0x1d, 0xbe, 0xe2, 0xae, 0xa6, 0x8a, + 0xd7, 0x75, 0x05, 0x8a, 0x37, 0x5a, 0x64, 0x56, + 0x37, 0x0d, 0x17, 0x0c, 0xb9, 0xbc, 0xb9, 0x6e, + 0x10, 0xd8, 0xcd, 0x5a, 0x35, 0xe9, 0xef, 0xae, + 0x6d, 0x95, 0x7b, 0x1d, 0x78, 0xfb, 0x29, 0x01, + 0x31, 0xdc, 0xc4, 0x41, 0x1d, 0x96, 0xd1, 0xda, + 0x7b, 0x80, 0xa8, 0x63, 0xa8, 0xd3, 0x41, 0xa5, + 0x01, 0x52, 0xf9, 0x7e, 0x67, 0x96, 0x65, 0xf0, + 0xf3, 0xf0, 0x43, 0x23, 0xf3, 0x02, 0xc2, 0xdc, + 0x4e, 0x3e, 0x20, 0x27, 0x59, 0x6a, 0x0f, 0x19, + 0x9d, 0xf4, 0x6e, 0xda, 0x07, 0x5c, 0x3d, 0xa1, + 0xf0, 0xc5, 0x20, 0x6e, 0x13, 0xa4, 0x16, 0x33, + 0xc5, 0xd4, 0x7b, 0x4b, 0xb6, 0xeb, 0x2b, 0xb3, + 0xbb, 0xbd, 0x6d, 0xf5, 0xa5, 0xe5, 0xbc, 0x56, + 0xae, 0x2d, 0x7b, 0x81, 0x70, 0x69, 0x61, 0x1a, + 0xc0, 0x6d, 0x28, 0x3b, 0xca, 0xbc, 0x49, 0x24, + 0x93, 0xa4, 0x9d, 0x24, 0xf6, 0x4a, 0x50, 0x20, + 0x9f, 0x9b, 0x35, 0xb5, 0x93, 0x69, 0x60, 0xb9, + 0x6b, 0x87, 0xb3, 0xc5, 0x48, 0xf9, 0xd3, 0xba, + 0x29, 0xa5, 0xdc, 0x2b, 0xdf, 0x37, 0x6b, 0x6b, + 0xb4, 0x31, 0x5e, 0x7b, 0x5c, 0x32, 0x45, 0x3c, + 0xaf, 0x79, 0x0d, 0x70, 0xf1, 0x01, 0x1f, 0x9d, + 0xa7, 0x7d, 0x57, 0x53, 0xb1, 0xbf, 0xad, 0x04, + 0xf5, 0x8e, 0x63, 0x6b, 0x16, 0x73, 0x7f, 0x1c, + 0xcf, 0xa5, 0xad, 0xe9, 0x7b, 0x39, 0xdd, 0xc0, + 0x49, 0xf1, 0x4f, 0x7c, 0xad, 0x96, 0x96, 0x76, + 0x99, 0x3c, 0xb2, 0xde, 0xdc, 0xdc, 0xc3, 0x33, + 0x43, 0x5c, 0xdb, 0x78, 0xd8, 0x43, 0x8b, 0x8b, + 0xb5, 0x12, 0x15, 0x75, 0x00, 0x03, 0x56, 0xe6, + 0xa4, 0x13, 0x36, 0xd7, 0x50, 0x8d, 0x9c, 0xbd, + 0x84, 0xc8, 0xd6, 0xcd, 0x2c, 0xd8, 0x9b, 0x1d, + 0x7c, 0x62, 0x3c, 0x4d, 0xce, 0xe2, 0xce, 0x59, + 0x77, 0x6d, 0x77, 0x96, 0xcf, 0x95, 0x5e, 0xc8, + 0xd8, 0x83, 0x6a, 0xfb, 0x79, 0x24, 0x70, 0x01, + 0xa4, 0x7e, 0x6e, 0x95, 0x0b, 0xa3, 0x81, 0x35, + 0x8a, 0x6e, 0x6b, 0x40, 0x35, 0x04, 0x83, 0xa6, + 0x87, 0x58, 0xd2, 0x3b, 0x94, 0x52, 0xfb, 0x2f, + 0x3c, 0x10, 0x66, 0x78, 0xe6, 0x91, 0xb1, 0xb7, + 0x9b, 0x3a, 0x5e, 0xe0, 0x34, 0x95, 0x10, 0x9d, + 0x84, 0x1e, 0xea, 0x3d, 0xa2, 0xb5, 0x14, 0xe7, + 0x2b, 0x5d, 0xca, 0x62, 0xd6, 0xa7, 0x73, 0x1b, + 0xab, 0x69, 0x36, 0x92, 0xce, 0x76, 0x4c, 0xc3, + 0x13, 0x44, 0x78, 0x9e, 0x1c, 0x30, 0x8a, 0x62, + 0xad, 0x4a, 0xaf, 0xa7, 0x61, 0x04, 0x96, 0x65, + 0x34, 0x4f, 0xcf, 0xdd, 0x2b, 0x24, 0x6b, 0xa3, + 0x33, 0x31, 0xd8, 0xc1, 0x14, 0xa5, 0x42, 0xce, + 0xd2, 0x4f, 0x0c, 0xf9, 0xb4, 0x92, 0x42, 0xf6, + 0xca, 0xc2, 0xd6, 0x00, 0xe6, 0x38, 0x11, 0xa0, + 0x51, 0x46, 0x55, 0x2b, 0xa2, 0x9b, 0x88, 0x2c, + 0x19, 0xb6, 0x67, 0x04, 0x79, 0xdd, 0x9d, 0xdc, + 0x2f, 0x6c, 0xcc, 0x86, 0x36, 0xe3, 0xc0, 0x43, + 0xb5, 0x17, 0x62, 0xd5, 0xdb, 0x5e, 0xae, 0x32, + 0xbb, 0x2b, 0xac, 0xc0, 0xe6, 0x0d, 0xbc, 0x84, + 0x59, 0xc8, 0xf1, 0x34, 0x81, 0xc7, 0xc7, 0x1b, + 0xa5, 0xb8, 0x7b, 0x2a, 0xba, 0x9a, 0x10, 0x58, + 0x32, 0xfc, 0xc6, 0xc9, 0xfb, 0x4a, 0xeb, 0x96, + 0x16, 0x5b, 0xdb, 0x06, 0x39, 0xac, 0x24, 0x86, + 0xb4, 0xd0, 0x01, 0xc2, 0x54, 0x14, 0xc4, 0x19, + 0xa4, 0x2d, 0xd2, 0x0b, 0x89, 0x14, 0xed, 0xaf, + 0x1a, 0xfc, 0x28, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x0b, 0x75, 0xa7, 0xbd, 0xc1, 0xf6, 0xac, 0xfa, + 0xcb, 0x4a, 0xdd, 0x69, 0xef, 0x70, 0x7d, 0xab, + 0x3e, 0xb2, 0x0b, 0x86, 0x75, 0xef, 0x4d, 0xf3, + 0x07, 0x84, 0xae, 0x05, 0xdf, 0x9d, 0x7b, 0xd3, + 0x7c, 0xc1, 0xe1, 0x2b, 0x81, 0x07, 0xb8, 0x7f, + 0x6c, 0xcf, 0x39, 0xbe, 0x15, 0x2e, 0xa2, 0x21, + 0xfd, 0xb3, 0x3c, 0xe6, 0xf8, 0x54, 0xba, 0x02, + 0x8e, 0xcc, 0xfd, 0xea, 0xd3, 0xed, 0x3e, 0x50, + 0xa4, 0x54, 0x76, 0x67, 0xef, 0x56, 0x9f, 0x69, + 0xf2, 0x84, 0x0c, 0xb3, 0xde, 0xae, 0xfc, 0xf3, + 0xf5, 0x8a, 0x91, 0x51, 0xd9, 0x67, 0xbd, 0x5d, + 0xf9, 0xe7, 0xeb, 0x15, 0x22, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x83, 0x23, + 0x5a, 0x84, 0x3a, 0xcf, 0x6c, 0xa9, 0xb1, 0xad, + 0x42, 0x1d, 0x67, 0xb6, 0x50, 0x17, 0xb8, 0x1c, + 0xe6, 0x4d, 0x19, 0x69, 0x20, 0xe2, 0x02, 0xa3, + 0xb2, 0x68, 0xbc, 0x2f, 0x51, 0x7e, 0xd5, 0x9e, + 0x73, 0x7c, 0x21, 0x07, 0x66, 0x77, 0x71, 0x92, + 0x99, 0xdb, 0x65, 0x9a, 0x47, 0x5c, 0x4c, 0xc4, + 0xd9, 0x68, 0x74, 0x54, 0x91, 0xe5, 0x37, 0x48, + 0xd4, 0xa2, 0x8e, 0xcc, 0x64, 0x53, 0x9c, 0x76, + 0xd9, 0x86, 0x16, 0x9f, 0xcd, 0x2e, 0x63, 0xa9, + 0xc3, 0x43, 0xc2, 0xbc, 0xed, 0x97, 0xf3, 0x38, + 0xfe, 0xc8, 0x7d, 0x67, 0x28, 0x1a, 0x05, 0x68, + 0xb5, 0xa3, 0xc2, 0x54, 0xb6, 0x2a, 0x5b, 0xc6, + 0xba, 0xac, 0x1f, 0x08, 0x65, 0xbf, 0x79, 0x7d, + 0x4e, 0x34, 0xf8, 0x43, 0x2d, 0xfb, 0xcb, 0xea, + 0x71, 0xaa, 0xf5, 0x06, 0xf2, 0xcd, 0x06, 0xf2, + 0x9d, 0xf7, 0xe6, 0xa7, 0xa6, 0xc5, 0xd0, 0xb0, + 0x7c, 0x21, 0x96, 0xfd, 0xe5, 0xf5, 0x38, 0xd3, + 0xe1, 0x0c, 0xb7, 0xef, 0x2f, 0xa9, 0xc6, 0xab, + 0xf4, 0x1b, 0xc9, 0x41, 0xbc, 0x9b, 0xf2, 0x73, + 0x3d, 0x36, 0x1e, 0x85, 0x83, 0xe1, 0x0c, 0xb7, + 0xef, 0x2f, 0xa9, 0xc6, 0x9f, 0x08, 0x65, 0xbf, + 0x79, 0x7d, 0x4e, 0x35, 0x5f, 0xa0, 0xde, 0x4a, + 0x0d, 0xe4, 0xdf, 0x93, 0x99, 0xe9, 0xb0, 0xf4, + 0x2c, 0x1f, 0x08, 0x65, 0xbf, 0x79, 0x7d, 0x4e, + 0x34, 0xf8, 0x43, 0x2d, 0xfb, 0xcb, 0xea, 0x71, + 0xaa, 0xfd, 0x06, 0xf2, 0x50, 0x6f, 0x26, 0xfc, + 0x9c, 0xcf, 0x4d, 0x87, 0xa1, 0x60, 0xf8, 0x43, + 0x2d, 0xfb, 0xcb, 0xea, 0x71, 0xa7, 0xc2, 0x19, + 0x6f, 0xde, 0x5f, 0x53, 0x8d, 0x57, 0xe8, 0x37, + 0x97, 0x54, 0x79, 0x4e, 0x65, 0x2b, 0x1b, 0x24, + 0x76, 0xb2, 0xb9, 0x8e, 0x15, 0x6b, 0x83, 0x4d, + 0x08, 0x3b, 0xa3, 0x42, 0x6f, 0xc9, 0xcc, 0xf4, + 0xd8, 0x7a, 0x12, 0xdf, 0x08, 0x65, 0xbf, 0x79, + 0x7d, 0x4e, 0x34, 0xf8, 0x43, 0x2d, 0xfb, 0xcb, + 0xea, 0x71, 0xa8, 0x5b, 0x8b, 0x2b, 0xab, 0x6a, + 0x7b, 0x44, 0x0f, 0x8a, 0xba, 0x8b, 0xda, 0x45, + 0x78, 0x56, 0x8a, 0x04, 0xee, 0x64, 0xe6, 0x7a, + 0x6c, 0x3d, 0x0b, 0x0f, 0xc2, 0x19, 0x6f, 0xde, + 0x5f, 0x53, 0x8d, 0x3e, 0x10, 0xcb, 0x7e, 0xf2, + 0xfa, 0x9c, 0x6a, 0xbf, 0x41, 0xbc, 0xb1, 0x40, + 0x9b, 0xf2, 0x73, 0x3d, 0x36, 0x1e, 0x85, 0x87, + 0xe1, 0x0c, 0xb7, 0xef, 0x2f, 0xa9, 0xc6, 0x9f, + 0x08, 0x65, 0xbf, 0x79, 0x7d, 0x4e, 0x35, 0x5e, + 0xa0, 0xde, 0x0b, 0x6c, 0xf6, 0xb3, 0xdb, 0x96, + 0xb6, 0x78, 0xcc, 0x65, 0xe3, 0x13, 0x43, 0x85, + 0x2a, 0x37, 0xf4, 0xa6, 0xfc, 0x9c, 0xcf, 0x4d, + 0x87, 0xa1, 0x39, 0xf0, 0x86, 0x5b, 0xf7, 0x97, + 0xd4, 0xe3, 0x4f, 0x84, 0x32, 0xdf, 0xbc, 0xbe, + 0xa7, 0x1a, 0xaf, 0x50, 0x2e, 0xb8, 0xf2, 0x8c, + 0xca, 0x46, 0x35, 0xf1, 0xda, 0xca, 0xe6, 0xb8, + 0x55, 0xa4, 0x34, 0xd0, 0x83, 0xbb, 0xa9, 0x37, + 0xe4, 0xe6, 0x7a, 0x6c, 0x3d, 0x09, 0x6f, 0x84, + 0x32, 0xdf, 0xbc, 0xbe, 0xa7, 0x1a, 0x7c, 0x21, + 0x96, 0xfd, 0xe5, 0xf5, 0x38, 0xd4, 0x5f, 0x52, + 0x66, 0xbd, 0x12, 0x5e, 0x41, 0xe2, 0x5c, 0xef, + 0xb4, 0xb8, 0x8e, 0x26, 0x4d, 0x24, 0x45, 0xb1, + 0x48, 0x68, 0xc7, 0x11, 0x40, 0x48, 0xd7, 0x42, + 0x9b, 0xf2, 0x73, 0x3d, 0x36, 0x1e, 0x84, 0xe7, + 0xc2, 0x19, 0x6f, 0xde, 0x5f, 0x53, 0x8d, 0x3e, + 0x10, 0xcb, 0x7e, 0xf2, 0xfa, 0x9c, 0x6a, 0xbd, + 0x40, 0xb3, 0x41, 0xbc, 0x9b, 0xf2, 0x73, 0x3d, + 0x36, 0x1e, 0x85, 0x83, 0xe1, 0x0c, 0xb7, 0xef, + 0x2f, 0xa9, 0xc6, 0x9f, 0x08, 0x65, 0xbf, 0x79, + 0x7d, 0x4e, 0x35, 0x5f, 0xc2, 0x37, 0x93, 0x08, + 0x3b, 0x89, 0xdc, 0xc9, 0xcc, 0xf4, 0xd8, 0x7a, + 0x16, 0x0f, 0x84, 0x32, 0xdf, 0xbc, 0xbe, 0xa7, + 0x1a, 0x7c, 0x21, 0x96, 0xfd, 0xe5, 0xf5, 0x38, + 0xd5, 0x7e, 0x81, 0x28, 0x37, 0x93, 0x7e, 0x4e, + 0x67, 0xa6, 0xc3, 0xd0, 0xb0, 0x7c, 0x21, 0x96, + 0xfd, 0xe5, 0xf5, 0x38, 0xd3, 0xe1, 0x0c, 0xb7, + 0xef, 0x2f, 0xa9, 0xc6, 0xa0, 0x19, 0x19, 0x7b, + 0xda, 0xc6, 0x37, 0x13, 0xdc, 0x43, 0x5a, 0xd0, + 0x2a, 0x49, 0x3a, 0x80, 0x5d, 0x0d, 0xcb, 0x2f, + 0xdf, 0x2b, 0xe2, 0x65, 0xb4, 0x8e, 0x7c, 0x74, + 0xc6, 0xd0, 0xd2, 0x4b, 0x6b, 0xaa, 0xa9, 0xbf, + 0x27, 0x33, 0xd3, 0x61, 0xe8, 0x4b, 0xfc, 0x21, + 0x96, 0xfd, 0xe5, 0xf5, 0x38, 0xd3, 0xe1, 0x0c, + 0xb7, 0xef, 0x2f, 0xa9, 0xc6, 0xa2, 0xc6, 0x4b, + 0x9a, 0xf4, 0x49, 0x79, 0x07, 0x89, 0x68, 0xb8, + 0xb4, 0xb8, 0xb6, 0x78, 0x65, 0xc4, 0x2e, 0x89, + 0xce, 0xd2, 0x03, 0xc5, 0x09, 0x1d, 0xd4, 0xdf, + 0x93, 0x99, 0xe9, 0xb0, 0xf4, 0x26, 0xfe, 0x10, + 0xcb, 0x7e, 0xf2, 0xfa, 0x9c, 0x69, 0xf0, 0x86, + 0x5b, 0xf7, 0x97, 0xd4, 0xe3, 0x50, 0xb7, 0x16, + 0x37, 0x56, 0xad, 0x6b, 0xae, 0x21, 0x7c, 0x41, + 0xd5, 0x0d, 0xc6, 0x08, 0xad, 0x3b, 0x6b, 0x48, + 0x6d, 0x48, 0x68, 0x15, 0x71, 0x3a, 0x00, 0xd7, + 0x54, 0xdf, 0x93, 0x99, 0xe9, 0xb0, 0xf4, 0x2c, + 0x1f, 0x08, 0x65, 0xbf, 0x79, 0x7d, 0x4e, 0x34, + 0xf8, 0x43, 0x2d, 0xfb, 0xcb, 0xea, 0x71, 0xa8, + 0xc3, 0x91, 0x66, 0xcd, 0x67, 0x3a, 0x6d, 0x5e, + 0x00, 0xd3, 0xaa, 0xa7, 0x93, 0xad, 0x71, 0x61, + 0xdc, 0xa6, 0x9d, 0xdd, 0x09, 0xbe, 0xdc, 0xcf, + 0x4d, 0x87, 0xa1, 0x60, 0xf8, 0x43, 0x2d, 0xfb, + 0xcb, 0xea, 0x71, 0xa7, 0xc2, 0x19, 0x6f, 0xde, + 0x5f, 0x53, 0x8d, 0x57, 0xe8, 0x37, 0x92, 0x83, + 0x79, 0x37, 0xdf, 0x99, 0xe9, 0xb0, 0xf4, 0x2c, + 0x1f, 0x08, 0x65, 0xbf, 0x79, 0x7d, 0x4e, 0x34, + 0xf8, 0x43, 0x2d, 0xfb, 0xcb, 0xea, 0x71, 0xaa, + 0xfd, 0x06, 0xf2, 0x50, 0x6f, 0x26, 0xfc, 0x9c, + 0xcf, 0x4d, 0x87, 0xa1, 0x60, 0xf8, 0x43, 0x2d, + 0xfb, 0xcb, 0xea, 0x71, 0xa7, 0xc2, 0x19, 0x6f, + 0xde, 0x5f, 0x53, 0x8d, 0x57, 0xe8, 0x37, 0x92, + 0x83, 0x79, 0x37, 0xe4, 0xe6, 0x7a, 0x6c, 0x3d, + 0x0b, 0x07, 0xc2, 0x19, 0x6f, 0xde, 0x5f, 0x53, + 0x8d, 0x3e, 0x10, 0xcb, 0x7e, 0xf2, 0xfa, 0x9c, + 0x6a, 0xbf, 0x41, 0xbc, 0xb1, 0x41, 0xbc, 0x9d, + 0xcb, 0xfb, 0x67, 0x43, 0xd3, 0xe1, 0xe8, 0x58, + 0x46, 0xca, 0xe4, 0xb1, 0x78, 0xd3, 0x66, 0x5a, + 0x3c, 0xe6, 0x05, 0xdf, 0x94, 0xcb, 0xb3, 0xd6, + 0xb7, 0x71, 0xd9, 0x65, 0xcc, 0xc7, 0x2c, 0x95, + 0x0e, 0x9a, 0x95, 0xd4, 0x0b, 0xb4, 0xbd, 0xdf, + 0x22, 0xa8, 0x50, 0x29, 0x4d, 0x9a, 0xfe, 0x77, + 0x6d, 0xfd, 0xaf, 0xa8, 0x54, 0x4d, 0xa6, 0x7c, + 0x67, 0x55, 0xab, 0x8b, 0x1d, 0x7e, 0xda, 0xe8, + 0x9b, 0xcc, 0x1c, 0xf7, 0x5e, 0x48, 0x1c, 0x6a, + 0x1a, 0x68, 0xd1, 0xbc, 0xb9, 0xd7, 0x46, 0x61, + 0xef, 0xb2, 0xf9, 0xdf, 0x20, 0x5c, 0xea, 0xae, + 0x9c, 0x7d, 0xa2, 0xc7, 0xe5, 0xde, 0x2b, 0x28, + 0x82, 0x43, 0x35, 0xb9, 0xcb, 0x20, 0xb4, 0xb5, + 0xeb, 0x08, 0x0d, 0xc3, 0x5c, 0x06, 0x00, 0x00, + 0x34, 0x38, 0x74, 0xeb, 0x21, 0x45, 0xf5, 0x9e, + 0xca, 0x74, 0x07, 0x72, 0x07, 0xa4, 0xb6, 0x6d, + 0x67, 0xb8, 0x58, 0xff, 0x00, 0x6b, 0xea, 0x85, + 0x58, 0x41, 0x63, 0xeb, 0x3d, 0x94, 0xfb, 0xbd, + 0xdc, 0x81, 0xe9, 0x27, 0x59, 0xec, 0xa7, 0xdd, + 0xee, 0xe4, 0x0f, 0x49, 0x57, 0x11, 0x05, 0x8f, + 0xac, 0xf6, 0x53, 0xee, 0xf7, 0x72, 0x07, 0xa4, + 0x9d, 0x67, 0xb2, 0x9f, 0x77, 0xbb, 0x90, 0x3d, + 0x25, 0x5c, 0x44, 0x16, 0x3e, 0xb3, 0xd9, 0x4f, + 0xbb, 0xdd, 0xc8, 0x1e, 0x92, 0x75, 0x9e, 0xca, + 0x7d, 0xde, 0xee, 0x40, 0xf4, 0x95, 0x71, 0x10, + 0x58, 0xfa, 0xcf, 0x65, 0x3e, 0xef, 0x77, 0x20, + 0x7a, 0x49, 0xd6, 0x7b, 0x29, 0xf7, 0x7b, 0xb9, + 0x03, 0xd2, 0x55, 0xc5, 0x9a, 0x3b, 0x0e, 0x2a, + 0x1c, 0x3a, 0xeb, 0x4d, 0x08, 0x2c, 0x5d, 0x67, + 0xb2, 0x9f, 0x77, 0xbb, 0x90, 0x3d, 0x24, 0xeb, + 0x3d, 0x94, 0xfb, 0xbd, 0xdc, 0x81, 0xe9, 0x2a, + 0xe6, 0xbd, 0x5b, 0xa8, 0x82, 0xc7, 0xd6, 0x7b, + 0x29, 0xf7, 0x7b, 0xb9, 0x03, 0xd2, 0x4e, 0xb3, + 0xd9, 0x4f, 0xbb, 0xdd, 0xc8, 0x1e, 0x92, 0xae, + 0x2c, 0x96, 0xb9, 0xb4, 0xc4, 0x08, 0xae, 0xaa, + 0x8a, 0x55, 0x05, 0x8b, 0xac, 0xf6, 0x53, 0xee, + 0xf7, 0x72, 0x07, 0xa4, 0x9d, 0x67, 0xb2, 0x9f, + 0x77, 0xbb, 0x90, 0x3d, 0x25, 0x5d, 0x0d, 0x71, + 0x69, 0x70, 0x04, 0xb5, 0xbe, 0x53, 0xa9, 0xa0, + 0x76, 0xd0, 0x35, 0xc4, 0xe1, 0x00, 0x93, 0xbc, + 0x05, 0x4a, 0x0b, 0x17, 0x59, 0xec, 0xa7, 0xdd, + 0xee, 0xe4, 0x0f, 0x49, 0x3a, 0xcf, 0x65, 0x3e, + 0xef, 0x77, 0x20, 0x7a, 0x4a, 0xb9, 0x42, 0x88, + 0x2c, 0x7d, 0x67, 0xb2, 0x9f, 0x77, 0xbb, 0x90, + 0x3d, 0x24, 0xeb, 0x3d, 0x94, 0xfb, 0xbd, 0xdc, + 0x81, 0xe9, 0x2a, 0xe2, 0x20, 0xb1, 0xf5, 0x9e, + 0xca, 0x7d, 0xde, 0xee, 0x40, 0xf4, 0x93, 0xac, + 0xf6, 0x53, 0xee, 0xf7, 0x72, 0x07, 0xa4, 0xab, + 0x8b, 0x2e, 0x6b, 0x9a, 0x68, 0xe0, 0x5a, 0x77, + 0x8e, 0x84, 0x16, 0x2e, 0xb3, 0xd9, 0x4f, 0xbb, + 0xdd, 0xc8, 0x1e, 0x92, 0x75, 0x9e, 0xca, 0x7d, + 0xde, 0xee, 0x40, 0xf4, 0x95, 0x71, 0x10, 0x58, + 0xfa, 0xcf, 0x65, 0x3e, 0xef, 0x77, 0x20, 0x7a, + 0x49, 0xd6, 0x7b, 0x29, 0xf7, 0x7b, 0xb9, 0x03, + 0xd2, 0x55, 0xd2, 0xd7, 0x0a, 0x54, 0x11, 0x5d, + 0x22, 0xba, 0x2a, 0xb0, 0x82, 0xc7, 0xd6, 0x7b, + 0x29, 0xf7, 0x7b, 0xb9, 0x03, 0xd2, 0x4e, 0xb3, + 0xd9, 0x4f, 0xbb, 0xdd, 0xc8, 0x1e, 0x92, 0xae, + 0x22, 0x0b, 0x1f, 0x59, 0xec, 0xa7, 0xdd, 0xee, + 0xe4, 0x0f, 0x49, 0x3a, 0xcf, 0x65, 0x3e, 0xef, + 0x77, 0x20, 0x7a, 0x4a, 0xb8, 0xbd, 0x08, 0xe4, + 0x76, 0x96, 0xb5, 0xc4, 0x76, 0x01, 0x28, 0x2c, + 0x3d, 0x67, 0xb2, 0x9f, 0x77, 0xbb, 0x90, 0x3d, + 0x24, 0xeb, 0x3d, 0x94, 0xfb, 0xbd, 0xdc, 0x81, + 0xe9, 0x2a, 0xff, 0x00, 0x33, 0x36, 0xbe, 0x6d, + 0xdc, 0x92, 0xb0, 0x58, 0xf1, 0x5a, 0xb4, 0x8c, + 0x3a, 0xf4, 0x1d, 0x1d, 0xb4, 0x16, 0x1e, 0xb3, + 0xd9, 0x4f, 0xbb, 0xdd, 0xc8, 0x1e, 0x92, 0x75, + 0x9e, 0xca, 0x7d, 0xde, 0xee, 0x40, 0xf4, 0x95, + 0x71, 0x10, 0x58, 0xfa, 0xcf, 0x65, 0x3e, 0xef, + 0x77, 0x20, 0x7a, 0x49, 0xd6, 0x7b, 0x29, 0xf7, + 0x7b, 0xb9, 0x03, 0xd2, 0x55, 0xc4, 0x41, 0x63, + 0xeb, 0x3d, 0x94, 0xfb, 0xbd, 0xdc, 0x81, 0xe9, + 0x27, 0x59, 0xec, 0xa7, 0xdd, 0xee, 0xe4, 0x0f, + 0x49, 0x57, 0x11, 0x05, 0x8f, 0xac, 0xf6, 0x53, + 0xee, 0xf7, 0x72, 0x07, 0xa4, 0x9d, 0x67, 0xb2, + 0x9f, 0x77, 0xbb, 0x90, 0x3d, 0x25, 0x5c, 0x44, + 0x16, 0x3e, 0xb3, 0xd9, 0x4f, 0xbb, 0xdd, 0xc8, + 0x1e, 0x92, 0x75, 0x9e, 0xca, 0x7d, 0xde, 0xee, + 0x40, 0xf4, 0x95, 0x71, 0x10, 0x58, 0xfa, 0xcf, + 0x65, 0x3e, 0xef, 0x77, 0x20, 0x7a, 0x49, 0xd6, + 0x7b, 0x29, 0xf7, 0x7b, 0xb9, 0x03, 0xd2, 0x55, + 0xc4, 0x41, 0x63, 0xeb, 0x3d, 0x94, 0xfb, 0xbd, + 0xdc, 0x81, 0xe9, 0x2f, 0x70, 0xe6, 0x5b, 0x2e, + 0xe9, 0xa3, 0x6c, 0x76, 0x0e, 0x0f, 0x2f, 0x68, + 0x69, 0xc2, 0x05, 0x1c, 0x4e, 0x8f, 0xce, 0x55, + 0x95, 0xba, 0xd3, 0xde, 0xe0, 0xfb, 0x56, 0x7d, + 0x64, 0x16, 0xfc, 0xe7, 0xde, 0x5b, 0xe6, 0x0f, + 0x09, 0x5c, 0x2b, 0xbf, 0x3a, 0xf7, 0xa6, 0xf9, + 0x83, 0xc2, 0x57, 0x02, 0x0f, 0x70, 0xfe, 0xd9, + 0x9e, 0x73, 0x7c, 0x2a, 0x5d, 0x44, 0x43, 0xfb, + 0x66, 0x79, 0xcd, 0xf0, 0xa9, 0x74, 0x05, 0x1d, + 0x99, 0xfb, 0xd5, 0xa7, 0xda, 0x7c, 0xa1, 0x48, + 0xa8, 0xec, 0xcf, 0xde, 0xad, 0x3e, 0xd3, 0xe5, + 0x08, 0x19, 0x67, 0xbd, 0x5d, 0xf9, 0xe7, 0xeb, + 0x15, 0x22, 0xa3, 0xb2, 0xcf, 0x7a, 0xbb, 0xf3, + 0xcf, 0xd6, 0x2a, 0x45, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x06, 0x46, 0xb5, + 0x08, 0x75, 0x9e, 0xd9, 0x53, 0x63, 0x5a, 0x84, + 0x3a, 0xcf, 0x6c, 0xa0, 0x2f, 0x51, 0x7e, 0xd5, + 0x9e, 0x73, 0x7c, 0x21, 0x79, 0x5e, 0xa1, 0xfd, + 0xac, 0x7e, 0x73, 0x7c, 0x21, 0x07, 0x26, 0xd9, + 0x7f, 0x33, 0x8f, 0xec, 0x47, 0xd6, 0x72, 0x81, + 0x53, 0xdb, 0x65, 0xfc, 0xce, 0x3f, 0xb1, 0x1f, + 0x59, 0xca, 0x05, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x58, 0xf3, + 0x5b, 0xbb, 0xbb, 0x6c, 0x9b, 0x2b, 0x36, 0xd2, + 0xba, 0x22, 0xf8, 0xc0, 0x71, 0x6e, 0x83, 0xe4, + 0x85, 0x5c, 0x56, 0x9b, 0xd9, 0xb2, 0xe8, 0xb2, + 0x8c, 0xb7, 0xdb, 0xe0, 0x75, 0xc0, 0x31, 0x8c, + 0x01, 0xae, 0xc3, 0x43, 0x84, 0x20, 0xd7, 0x95, + 0xdd, 0xcf, 0x99, 0x64, 0xf9, 0x84, 0x57, 0xae, + 0xe7, 0x44, 0x2c, 0x25, 0x8f, 0x75, 0x2b, 0x5c, + 0x25, 0xc3, 0x4a, 0x87, 0xcb, 0xb2, 0x99, 0xef, + 0xa3, 0x7c, 0xc1, 0xec, 0x86, 0x08, 0xbc, 0xb9, + 0xe4, 0x34, 0x01, 0x4d, 0x49, 0x25, 0xbd, 0xde, + 0x41, 0x70, 0x32, 0x86, 0xfb, 0x34, 0x71, 0x1a, + 0xdc, 0x42, 0x45, 0x5c, 0xe1, 0xbb, 0xe3, 0x57, + 0x78, 0x2c, 0x45, 0x69, 0x04, 0xdb, 0x31, 0x6d, + 0x13, 0xee, 0x19, 0x68, 0xd9, 0xa4, 0x2f, 0x7b, + 0xdf, 0xa8, 0x90, 0xe7, 0x0a, 0x6e, 0x6f, 0x20, + 0x88, 0xcc, 0x32, 0x79, 0xac, 0xa1, 0x6d, 0xcb, + 0x65, 0x65, 0xc5, 0xb3, 0xf4, 0x73, 0xb1, 0x1a, + 0x8a, 0xf6, 0x56, 0xcb, 0x5c, 0x8a, 0x59, 0x6d, + 0x59, 0x77, 0x71, 0x3c, 0x56, 0x90, 0xc9, 0xe4, + 0x19, 0x1d, 0x4c, 0x4b, 0xb9, 0xcc, 0xb0, 0xb4, + 0xc8, 0xaf, 0x2d, 0x3d, 0xb6, 0x1b, 0x99, 0x24, + 0x21, 0xf1, 0xb5, 0x87, 0x74, 0x11, 0xd9, 0x2b, + 0x4b, 0xad, 0x33, 0x2c, 0xc6, 0xd2, 0xda, 0x5b, + 0xc9, 0x22, 0xb4, 0xb5, 0x81, 0xb8, 0x62, 0x92, + 0x4f, 0x17, 0xc5, 0xd5, 0x50, 0xd1, 0xac, 0xe8, + 0x41, 0xc3, 0x99, 0x65, 0x53, 0xe5, 0xc5, 0x85, + 0xee, 0x6c, 0x91, 0x4b, 0xa6, 0x29, 0x63, 0xd2, + 0xd2, 0x17, 0x7e, 0xd6, 0x7b, 0xd5, 0xaf, 0xd8, + 0x37, 0xc2, 0xbd, 0xe7, 0xb1, 0xc3, 0x1e, 0x49, + 0x96, 0xb2, 0x09, 0x39, 0xe8, 0x9a, 0xe7, 0x06, + 0xc8, 0x7f, 0x3b, 0x41, 0xd2, 0x9b, 0x4b, 0x1f, + 0x3b, 0x98, 0x59, 0x44, 0x5e, 0x23, 0x0f, 0x85, + 0xa0, 0xbd, 0xd5, 0xa0, 0x15, 0x41, 0x01, 0xf2, + 0x6f, 0x6f, 0x9d, 0x0a, 0x4b, 0x2d, 0xcd, 0x33, + 0x21, 0x75, 0x6b, 0x6e, 0xdb, 0xa7, 0xf3, 0x3c, + 0xe3, 0x23, 0xc1, 0xa2, 0x98, 0x71, 0x06, 0xd1, + 0x6f, 0x9b, 0x67, 0xe1, 0x8e, 0x37, 0xc8, 0xdc, + 0xc6, 0x07, 0xe0, 0x69, 0x76, 0x16, 0xe8, 0x26, + 0x9b, 0x9e, 0x52, 0x8e, 0xcb, 0x4d, 0x73, 0x0b, + 0x43, 0xfe, 0x3c, 0x5f, 0x5d, 0xa8, 0x26, 0x36, + 0x83, 0x35, 0xcc, 0xad, 0xb3, 0x59, 0x61, 0xb7, + 0xb8, 0x7c, 0x71, 0xb4, 0x36, 0x8c, 0x14, 0xa6, + 0x91, 0x53, 0xb8, 0xb8, 0x6f, 0x19, 0x7f, 0xd4, + 0xf6, 0x92, 0x4d, 0x2b, 0x5d, 0x68, 0xe7, 0x3b, + 0x99, 0x60, 0xd0, 0xf6, 0xba, 0xae, 0xc4, 0x49, + 0xa2, 0xf7, 0xb5, 0x1f, 0xce, 0xa6, 0xed, 0x37, + 0xea, 0xad, 0xd9, 0x8f, 0xfa, 0x67, 0x2d, 0xf3, + 0xdf, 0xe1, 0x72, 0x0d, 0x5f, 0x0e, 0x5d, 0x00, + 0xc9, 0x26, 0x9e, 0x18, 0xa1, 0x91, 0x81, 0xe2, + 0x57, 0x3a, 0x8d, 0x07, 0xe6, 0x8d, 0x1a, 0x4a, + 0xf4, 0xfd, 0x9a, 0xbb, 0x8e, 0x70, 0xd9, 0x25, + 0x8d, 0xb6, 0xf8, 0x71, 0x1b, 0x97, 0x1a, 0x33, + 0x4e, 0xe7, 0x6d, 0x6c, 0xda, 0x67, 0x38, 0xc7, + 0x96, 0x30, 0xf9, 0x1c, 0xc0, 0x71, 0x6e, 0xe5, + 0x7c, 0x5d, 0xc5, 0x9c, 0xed, 0xef, 0x39, 0x16, + 0x54, 0x1c, 0x6a, 0x0b, 0x49, 0x70, 0x3a, 0x8d, + 0x1b, 0x4d, 0x28, 0x38, 0x73, 0x3c, 0xa2, 0x7c, + 0xb8, 0x46, 0xf7, 0xbd, 0x92, 0xc3, 0x35, 0x43, + 0x25, 0x8f, 0x51, 0x23, 0x71, 0x6d, 0xb5, 0xc8, + 0xa4, 0x96, 0xd9, 0x97, 0x57, 0x13, 0xc5, 0x69, + 0x1c, 0xbf, 0xb2, 0x12, 0x1a, 0x17, 0x76, 0x97, + 0x45, 0xee, 0x9d, 0x95, 0xb2, 0xae, 0x9a, 0x48, + 0x5a, 0x3b, 0x5a, 0x57, 0x7e, 0x7f, 0x96, 0xdb, + 0x4f, 0x71, 0x03, 0x25, 0xbe, 0x8a, 0xd4, 0x43, + 0x18, 0x6b, 0x22, 0x90, 0x57, 0x46, 0xeb, 0xa9, + 0x50, 0x82, 0xbd, 0x98, 0xe5, 0xd3, 0xe5, 0xd3, + 0x88, 0x66, 0xa1, 0x04, 0x62, 0x63, 0xdb, 0xe4, + 0xb8, 0x6f, 0x85, 0xca, 0xa6, 0xf3, 0xf9, 0x2d, + 0x7a, 0xb6, 0xc6, 0x08, 0xae, 0x19, 0x73, 0x25, + 0xbe, 0x26, 0x3d, 0xec, 0x35, 0xd1, 0x4d, 0x1b, + 0xea, 0x13, 0x77, 0xb6, 0x7c, 0x28, 0x3a, 0x72, + 0xbf, 0xe6, 0x76, 0x9f, 0x6f, 0x1f, 0xd6, 0x0a, + 0x4b, 0x3c, 0xbe, 0xbc, 0xb4, 0xce, 0xae, 0x8d, + 0xac, 0xce, 0x8b, 0x16, 0x0c, 0x58, 0x75, 0x1a, + 0x35, 0x46, 0xe5, 0x9f, 0xcc, 0xec, 0xfe, 0xde, + 0x3f, 0xae, 0x17, 0x5e, 0xd3, 0x7f, 0x3a, 0xb8, + 0xed, 0x37, 0xea, 0x84, 0x12, 0x53, 0xe6, 0x37, + 0xcc, 0xd9, 0x98, 0x2e, 0xc5, 0xc3, 0xc4, 0xe6, + 0x6c, 0x2e, 0x97, 0x46, 0x22, 0x2a, 0xed, 0x07, + 0x81, 0x45, 0xe5, 0xef, 0xb9, 0xcd, 0x73, 0x6b, + 0x56, 0x5d, 0x48, 0xe9, 0xf0, 0x9a, 0xb8, 0xbe, + 0x84, 0xe1, 0x6f, 0x8c, 0xe1, 0xa3, 0x7d, 0x76, + 0x5c, 0xff, 0x00, 0xa4, 0x6d, 0xbe, 0xdf, 0x4f, + 0x0b, 0xd6, 0x76, 0x4e, 0xde, 0x4a, 0xdd, 0xde, + 0x31, 0x98, 0x9f, 0x14, 0x5c, 0xdc, 0x4d, 0xdd, + 0x2f, 0x3e, 0x31, 0xf0, 0x04, 0x1d, 0x99, 0xcc, + 0xec, 0xcc, 0xb2, 0xab, 0xa9, 0x1a, 0x3c, 0x6b, + 0x0b, 0x8a, 0x0a, 0x6f, 0x34, 0xe1, 0x3c, 0x2a, + 0x3f, 0x66, 0x21, 0x60, 0x96, 0xea, 0xf9, 0xe2, + 0xbe, 0xc7, 0x11, 0x2d, 0xae, 0xac, 0x54, 0x27, + 0xe4, 0x5d, 0xb9, 0x06, 0x5b, 0x98, 0x46, 0xcb, + 0xdb, 0x6b, 0xc8, 0x5d, 0x1c, 0x57, 0x71, 0x9a, + 0xb8, 0xd3, 0x43, 0x8f, 0x8a, 0x78, 0x41, 0x5c, + 0xd9, 0x10, 0x2d, 0xcb, 0x33, 0x76, 0x11, 0x47, + 0xb6, 0x37, 0x02, 0x37, 0x6a, 0x1a, 0xee, 0x24, + 0x1c, 0x36, 0xf9, 0xde, 0x62, 0xdb, 0xe6, 0xdd, + 0x3e, 0x77, 0x96, 0x97, 0x0c, 0x6c, 0xad, 0x5b, + 0x84, 0xe9, 0x20, 0x37, 0xb0, 0xbc, 0xe7, 0x73, + 0x59, 0xdc, 0x66, 0x0f, 0x9e, 0xce, 0xbc, 0xd4, + 0x80, 0x39, 0xda, 0x08, 0xf1, 0xf7, 0x75, 0xa6, + 0x5c, 0x32, 0x6e, 0x6d, 0xc3, 0x30, 0x13, 0x19, + 0x71, 0x78, 0xbc, 0xd9, 0x14, 0xa5, 0x3b, 0x24, + 0x2f, 0x59, 0xfe, 0x5f, 0x6f, 0x97, 0x5f, 0x08, + 0x2d, 0xf1, 0x73, 0x7c, 0xd8, 0x71, 0xc4, 0x6a, + 0x6a, 0x50, 0x47, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x29, 0x4d, 0x9a, + 0xfe, 0x77, 0x6d, 0xfd, 0xaf, 0xa8, 0x54, 0x5a, + 0x94, 0xd9, 0xa3, 0xfe, 0x77, 0x6d, 0xfd, 0xaf, + 0xa8, 0x50, 0x4d, 0xe6, 0x1e, 0xfb, 0x37, 0x9d, + 0xf2, 0x05, 0xce, 0xba, 0x33, 0x0f, 0x7d, 0x9b, + 0xce, 0xf9, 0x02, 0xe7, 0x40, 0x44, 0x44, 0x0d, + 0xac, 0xf7, 0x0b, 0x1f, 0xed, 0x7d, 0x50, 0xab, + 0x0a, 0xcf, 0xb5, 0x9e, 0xe1, 0x63, 0xfd, 0xaf, + 0xaa, 0x15, 0x61, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x77, 0x64, 0x76, 0x91, 0x5d, + 0xe6, 0x71, 0x45, 0x36, 0x88, 0x85, 0x5c, 0xfa, + 0x9a, 0x56, 0x9a, 0x69, 0xde, 0x52, 0x6f, 0xda, + 0x49, 0x59, 0x98, 0x73, 0x0c, 0x8a, 0x31, 0x64, + 0x24, 0x11, 0xf3, 0x58, 0x45, 0x4b, 0x6b, 0x82, + 0xb5, 0x55, 0xd3, 0xe0, 0xd2, 0xa6, 0x72, 0x7c, + 0xa9, 0xa1, 0xa3, 0x32, 0xbe, 0x3c, 0xcd, 0x94, + 0x3e, 0x33, 0x6b, 0xad, 0xe4, 0x69, 0xd1, 0xdd, + 0x41, 0xeb, 0x37, 0xc9, 0x1e, 0x73, 0x87, 0xdb, + 0x58, 0x46, 0x0e, 0x36, 0x73, 0xa2, 0x3a, 0x86, + 0xd3, 0xb5, 0x88, 0x85, 0x19, 0x6f, 0x65, 0x75, + 0x73, 0x71, 0xec, 0xd0, 0x46, 0x5d, 0x35, 0x5c, + 0x30, 0x68, 0x14, 0xc3, 0xe5, 0x56, 0xba, 0xa8, + 0xba, 0xae, 0xb3, 0x99, 0xa5, 0xcd, 0xfa, 0xca, + 0x31, 0x87, 0x09, 0x6f, 0x36, 0xdf, 0xea, 0x37, + 0x73, 0xba, 0xa7, 0x6f, 0x4d, 0xae, 0x5f, 0x6f, + 0x71, 0x9c, 0x5b, 0x03, 0xcf, 0x66, 0x0d, 0x63, + 0x62, 0x14, 0xa6, 0x12, 0xf1, 0x57, 0x1e, 0xee, + 0xb2, 0x82, 0xa7, 0x34, 0x6f, 0x86, 0x47, 0xc3, + 0x26, 0x87, 0xb0, 0xe1, 0x75, 0x0d, 0x40, 0x3d, + 0xb6, 0x95, 0x35, 0x99, 0x9f, 0x68, 0xd9, 0xdc, + 0xbe, 0xe4, 0x54, 0x98, 0x8b, 0xa1, 0x77, 0x01, + 0x1f, 0xdd, 0x50, 0x9a, 0xeb, 0x5d, 0x75, 0x38, + 0xbb, 0x67, 0x75, 0x4d, 0x59, 0x93, 0x3e, 0xcb, + 0x5e, 0xc5, 0xad, 0xd6, 0xcf, 0x12, 0xb4, 0x6f, + 0x0d, 0x7f, 0x21, 0x41, 0x29, 0x93, 0x42, 0xd1, + 0xb3, 0xc2, 0xd9, 0xda, 0x5f, 0x74, 0xc9, 0x9e, + 0xd1, 0xbe, 0x06, 0x81, 0xf2, 0x28, 0xbd, 0x93, + 0x66, 0x1b, 0xb9, 0xee, 0x4d, 0x40, 0xb7, 0x85, + 0xce, 0xec, 0x57, 0x55, 0x14, 0x8b, 0x25, 0x16, + 0xb9, 0xa6, 0x4f, 0x67, 0x5f, 0x15, 0x96, 0xf8, + 0x48, 0xec, 0xc8, 0xda, 0x7f, 0x75, 0x72, 0x43, + 0x11, 0xb1, 0xca, 0xb3, 0x87, 0x1a, 0x82, 0xe9, + 0x79, 0x86, 0xf6, 0x28, 0x77, 0x39, 0x48, 0x23, + 0x6c, 0xf2, 0x9b, 0xfc, 0xcc, 0x3e, 0xea, 0x26, + 0x80, 0xc7, 0x38, 0x93, 0x23, 0xc8, 0x68, 0xa9, + 0xd3, 0x4d, 0x6b, 0xcd, 0xee, 0x51, 0x7f, 0x67, + 0x24, 0x6c, 0x99, 0x9a, 0x26, 0x76, 0x18, 0xdc, + 0xd2, 0x0b, 0x49, 0xed, 0xf1, 0xae, 0xb8, 0x86, + 0x65, 0x9a, 0x65, 0xb0, 0x59, 0x5b, 0xdb, 0xe1, + 0xb5, 0x80, 0x9c, 0x52, 0xd7, 0x0b, 0x4e, 0x8a, + 0xe9, 0x24, 0x85, 0xd5, 0x99, 0xdb, 0xba, 0xdb, + 0x66, 0xa0, 0x89, 0xf2, 0x09, 0x9f, 0x1c, 0xd4, + 0xc6, 0xd3, 0x50, 0x2b, 0x8b, 0x40, 0x3d, 0x84, + 0x1b, 0x6e, 0xb2, 0x4b, 0xd3, 0x91, 0x5a, 0xdb, + 0xb2, 0x16, 0xfb, 0x4c, 0x52, 0x17, 0x48, 0x31, + 0x30, 0x1c, 0x3e, 0x37, 0xe7, 0x6a, 0x3b, 0x8a, + 0x16, 0xcb, 0x28, 0xbe, 0xbe, 0x0e, 0x74, 0x2c, + 0x02, 0x36, 0x1a, 0x3a, 0x57, 0x9c, 0x2d, 0xaf, + 0x6d, 0x48, 0x5e, 0x3e, 0x4f, 0x85, 0xac, 0x9d, + 0x8d, 0xc0, 0x99, 0x9c, 0x0b, 0xaa, 0x6a, 0x7c, + 0xbd, 0xde, 0xe2, 0x66, 0xd5, 0xb7, 0xc8, 0x72, + 0xdb, 0x68, 0xce, 0x16, 0xcc, 0xde, 0x72, 0x4a, + 0x6e, 0x9a, 0x57, 0x4f, 0x29, 0x04, 0x65, 0xee, + 0x5b, 0x7b, 0x61, 0x23, 0x1b, 0x72, 0xc0, 0xdc, + 0x54, 0x2c, 0x73, 0x7c, 0x60, 0x74, 0xee, 0x15, + 0x3b, 0x9f, 0x65, 0x57, 0xb9, 0x86, 0x61, 0x17, + 0x30, 0xc1, 0x81, 0x90, 0x30, 0x3a, 0x47, 0x10, + 0x1b, 0xa4, 0xbb, 0x74, 0xd2, 0xa7, 0x42, 0x85, + 0x93, 0x32, 0x92, 0x5c, 0xba, 0x2c, 0xbd, 0xec, + 0x0e, 0x6c, 0x2f, 0xc4, 0xc9, 0x49, 0x38, 0xbb, + 0x5b, 0xca, 0x4b, 0x6b, 0x67, 0x9b, 0xda, 0xad, + 0xe1, 0x0f, 0x21, 0x8d, 0x85, 0x8f, 0x0d, 0x04, + 0x81, 0x88, 0x97, 0x0a, 0xf7, 0x28, 0x82, 0x22, + 0xfa, 0xc2, 0xee, 0xc2, 0x51, 0x0d, 0xd3, 0x30, + 0xb8, 0x8a, 0xb6, 0x86, 0xad, 0x23, 0x56, 0x85, + 0xd5, 0x1e, 0xce, 0xe6, 0xb2, 0xdb, 0x8b, 0x86, + 0xc6, 0x00, 0x23, 0x13, 0x5a, 0xe7, 0x00, 0xe2, + 0x3b, 0x02, 0xaa, 0x47, 0x31, 0x61, 0xb9, 0x83, + 0x22, 0xe7, 0x4e, 0x27, 0x48, 0x1a, 0x1c, 0xe3, + 0xac, 0xd4, 0x30, 0x9a, 0xae, 0x5d, 0xa6, 0xba, + 0x98, 0x67, 0x2f, 0xc0, 0xf7, 0x33, 0xd9, 0xc3, + 0x44, 0x74, 0x24, 0x01, 0x40, 0x1c, 0x50, 0x6c, + 0xda, 0x60, 0x43, 0x32, 0xe0, 0x41, 0xc4, 0x21, + 0xd2, 0x0e, 0xba, 0xf8, 0xa3, 0x52, 0xe6, 0x8b, + 0x66, 0xb3, 0x59, 0x22, 0x6c, 0x81, 0x81, 0xa5, + 0xc2, 0xac, 0x63, 0x9c, 0x03, 0xc8, 0xed, 0x57, + 0x42, 0x97, 0xbf, 0x6f, 0xb6, 0x66, 0x99, 0x33, + 0xa5, 0x18, 0x84, 0x8c, 0xc6, 0xf1, 0xc9, 0x77, + 0x85, 0x43, 0x67, 0x77, 0x73, 0x75, 0xdc, 0xd3, + 0xb4, 0x90, 0xeb, 0x79, 0x28, 0xc3, 0xbc, 0x23, + 0x3b, 0x88, 0x38, 0x5d, 0x04, 0xcd, 0x98, 0xc0, + 0xe6, 0x11, 0x30, 0x76, 0x0e, 0x6f, 0xf3, 0xb1, + 0x6f, 0x2e, 0xf9, 0x76, 0x73, 0x36, 0x8a, 0x21, + 0x21, 0x88, 0x1d, 0x55, 0x6b, 0x5c, 0x31, 0x0a, + 0xe8, 0x18, 0x85, 0x54, 0xfb, 0xed, 0x98, 0xfd, + 0xa7, 0xb6, 0x9c, 0x81, 0xe3, 0x5b, 0xf3, 0x84, + 0x53, 0x5b, 0x85, 0x46, 0x2e, 0xf8, 0xe0, 0x50, + 0x16, 0xb9, 0x85, 0xcf, 0x5e, 0xb6, 0xe7, 0x19, + 0xc5, 0x24, 0xc5, 0xaf, 0x15, 0x34, 0x2d, 0x2e, + 0xc3, 0x4a, 0x20, 0xe1, 0xb9, 0xb6, 0x9e, 0xd2, + 0x77, 0x5b, 0xce, 0xdc, 0x12, 0xb2, 0x98, 0x9b, + 0x50, 0x69, 0x51, 0x5d, 0x62, 0xab, 0xaa, 0xcb, + 0x3d, 0xcc, 0xac, 0x20, 0xe6, 0x2d, 0x9e, 0xd6, + 0xb2, 0xa4, 0xd1, 0xcd, 0x0e, 0xd2, 0x56, 0xcd, + 0xa6, 0xd1, 0x9d, 0xdc, 0x0f, 0x34, 0x7d, 0x06, + 0x95, 0x18, 0x75, 0x20, 0xb6, 0x67, 0x79, 0xde, + 0x63, 0x67, 0x0d, 0x93, 0xe0, 0x7b, 0x41, 0x9e, + 0x22, 0xf9, 0x2a, 0xd0, 0x6a, 0x68, 0xda, 0x53, + 0x7b, 0x5a, 0x8b, 0xf6, 0xec, 0xda, 0xeb, 0x2e, + 0xbd, 0x94, 0xb1, 0x8f, 0x82, 0x57, 0x34, 0xdc, + 0x48, 0x3c, 0x52, 0x08, 0x00, 0x51, 0xad, 0xaf, + 0xc8, 0xb7, 0x6d, 0x37, 0xbb, 0xe5, 0x7f, 0x60, + 0x7c, 0x0c, 0x5e, 0x72, 0xff, 0x00, 0xf4, 0xce, + 0x61, 0xe7, 0xb7, 0xe4, 0x41, 0xc1, 0x6f, 0x93, + 0xe6, 0x37, 0x30, 0xc7, 0x34, 0x10, 0xf3, 0x8c, + 0x94, 0x96, 0xb0, 0xe2, 0x14, 0xd1, 0xbf, 0xbd, + 0x4e, 0xca, 0xd9, 0x71, 0xb3, 0xf9, 0xa4, 0x2f, + 0x89, 0xa6, 0x2e, 0x73, 0x9e, 0x38, 0x58, 0x63, + 0x38, 0x85, 0x7b, 0x3b, 0xcb, 0xb5, 0xf2, 0xc9, + 0x1e, 0xc8, 0xc5, 0x81, 0xc5, 0xb8, 0xe5, 0x2d, + 0x75, 0x0d, 0x09, 0x15, 0x3a, 0x2a, 0x17, 0xab, + 0x5b, 0x99, 0xd9, 0xb2, 0x77, 0x2e, 0x6c, 0x84, + 0x38, 0x4b, 0x81, 0xa4, 0x1d, 0x21, 0xae, 0x0c, + 0xa8, 0x07, 0x73, 0x75, 0x04, 0x7d, 0xee, 0x47, + 0x98, 0x58, 0xc3, 0xcf, 0xce, 0xc6, 0x98, 0xab, + 0x47, 0x39, 0x87, 0x15, 0x0a, 0xd5, 0x61, 0x95, + 0xde, 0xdf, 0x97, 0x7b, 0x3b, 0x3c, 0x56, 0x79, + 0x4f, 0x71, 0x0d, 0x68, 0xaf, 0x65, 0x49, 0x65, + 0x4f, 0x7b, 0xf6, 0x7b, 0x34, 0x63, 0x9c, 0x4b, + 0x58, 0x1a, 0x5b, 0x53, 0x5a, 0x13, 0xaf, 0x5f, + 0x64, 0x2e, 0xa6, 0xd8, 0x4f, 0x3e, 0xcd, 0xdb, + 0x41, 0x6a, 0xe6, 0x46, 0x65, 0x79, 0x7c, 0xb8, + 0xdd, 0x84, 0x38, 0x54, 0x9a, 0x20, 0x83, 0xbf, + 0xca, 0xaf, 0x72, 0xf2, 0xd3, 0x70, 0xca, 0x31, + 0xe6, 0x8c, 0x7b, 0x4e, 0x20, 0x4f, 0x6c, 0x2d, + 0xb0, 0x64, 0x59, 0x9c, 0xce, 0x84, 0x36, 0x2f, + 0x16, 0x76, 0x73, 0x8c, 0x75, 0x45, 0x30, 0x68, + 0xd2, 0xea, 0x1d, 0x1a, 0xf7, 0x54, 0xac, 0xf6, + 0x52, 0x5b, 0xec, 0xdc, 0xf6, 0xf7, 0x32, 0x47, + 0x23, 0xe3, 0x78, 0x7c, 0x21, 0x8e, 0x06, 0x82, + 0xa1, 0x6b, 0xce, 0xae, 0xe7, 0x87, 0x27, 0xcb, + 0x21, 0x89, 0xe6, 0x36, 0xcb, 0x03, 0x71, 0x96, + 0x9a, 0x12, 0x03, 0x1b, 0xa2, 0xbd, 0xd4, 0x10, + 0x53, 0xc3, 0x24, 0x13, 0x49, 0x04, 0x94, 0xc7, + 0x13, 0x8b, 0x0d, 0x34, 0x8a, 0x8d, 0xe5, 0xad, + 0x09, 0x24, 0x92, 0xe3, 0x52, 0x74, 0x92, 0x75, + 0x92, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0b, + 0x75, 0xa7, 0xbd, 0xc1, 0xf6, 0xac, 0xfa, 0xcb, + 0x4a, 0xdb, 0x69, 0xef, 0x70, 0x7d, 0xab, 0x3e, + 0xb2, 0x0b, 0x8e, 0x75, 0xef, 0x4d, 0xf3, 0x07, + 0x84, 0xae, 0x05, 0xdf, 0x9c, 0xfb, 0xd3, 0x7c, + 0xc1, 0xe1, 0x2b, 0x81, 0x07, 0xb8, 0x7f, 0x6c, + 0xcf, 0x39, 0xbe, 0x15, 0x2e, 0xa2, 0x21, 0xfd, + 0xb3, 0x3c, 0xe6, 0xf8, 0x54, 0xba, 0x02, 0x8e, + 0xcc, 0xfd, 0xea, 0xd3, 0xed, 0x3e, 0x50, 0xa4, + 0x54, 0x76, 0x67, 0xef, 0x56, 0x9f, 0x69, 0xf2, + 0x84, 0x0c, 0xb3, 0xde, 0xae, 0xfc, 0xf3, 0xf5, + 0x8a, 0x91, 0x51, 0xd9, 0x67, 0xbd, 0x5d, 0xf9, + 0xe7, 0xeb, 0x15, 0x22, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x83, 0x23, 0x5a, + 0x84, 0x3a, 0xcf, 0x6c, 0xa9, 0xb1, 0xad, 0x42, + 0x1d, 0x67, 0xb6, 0x50, 0x17, 0xa8, 0xc8, 0x12, + 0x30, 0x9d, 0xc7, 0x34, 0xf0, 0x15, 0xe5, 0x60, + 0xa0, 0xd5, 0xb6, 0x71, 0xbb, 0xdb, 0x2d, 0xe6, + 0xa7, 0x88, 0xf8, 0xcb, 0x41, 0xec, 0x83, 0x5f, + 0x95, 0x57, 0x95, 0xd5, 0xf0, 0x45, 0x9c, 0xd8, + 0x7b, 0x1c, 0xce, 0xc1, 0x3c, 0x7a, 0x63, 0x7e, + 0xe8, 0xa6, 0xea, 0xaa, 0xde, 0x65, 0x57, 0xf6, + 0x52, 0x16, 0x4f, 0x13, 0xbb, 0x0f, 0x68, 0xc4, + 0xd2, 0x37, 0xc1, 0x08, 0x39, 0x11, 0x67, 0x0b, + 0xbe, 0x69, 0xe0, 0x29, 0x85, 0xff, 0x00, 0x34, + 0xf0, 0x14, 0x18, 0x45, 0x9c, 0x2f, 0xf9, 0xa7, + 0x80, 0xa6, 0x17, 0xfc, 0xd3, 0xc0, 0x50, 0x61, + 0x16, 0x70, 0xbf, 0xe6, 0x9e, 0x02, 0x98, 0x5f, + 0xf3, 0x4f, 0x01, 0x41, 0x84, 0x59, 0xc2, 0xff, + 0x00, 0x9a, 0x78, 0x0a, 0x61, 0x7f, 0xcd, 0x3c, + 0x05, 0x06, 0x3f, 0x2e, 0xf2, 0x9d, 0xcf, 0x1c, + 0xd3, 0x93, 0xe5, 0x61, 0xae, 0x04, 0xb5, 0x9e, + 0x30, 0x07, 0x57, 0x8a, 0x14, 0x1e, 0x17, 0xfc, + 0xd3, 0xc0, 0x53, 0x03, 0xbe, 0x69, 0xdd, 0xdc, + 0x3b, 0xa8, 0x27, 0x76, 0x68, 0xb4, 0xd9, 0x66, + 0x56, 0xe4, 0x8c, 0x4f, 0x8b, 0xc5, 0xae, 0x8a, + 0x9a, 0x3c, 0x53, 0x4a, 0xcd, 0xa4, 0x63, 0x34, + 0xc8, 0x06, 0x5d, 0x19, 0x6b, 0x6e, 0xad, 0x64, + 0x2e, 0x64, 0x6e, 0x20, 0x62, 0x69, 0x24, 0xe8, + 0xaf, 0x6d, 0x40, 0x96, 0x38, 0xfe, 0x69, 0xe0, + 0x3c, 0x48, 0x1b, 0x20, 0x35, 0x01, 0xc0, 0x8d, + 0x44, 0x02, 0x0a, 0x09, 0x7b, 0xab, 0x0b, 0x6c, + 0xb7, 0x29, 0x7c, 0x77, 0x6c, 0x63, 0xb3, 0x19, + 0xdd, 0xfa, 0xb6, 0x83, 0x88, 0xb1, 0xa3, 0x77, + 0x42, 0xee, 0xcd, 0x6c, 0x66, 0xcd, 0xed, 0xec, + 0xa6, 0xb1, 0x73, 0x1f, 0x13, 0x23, 0xc2, 0xf6, + 0x97, 0x00, 0x1a, 0x74, 0x6b, 0xaf, 0x69, 0x56, + 0x8b, 0x5e, 0x4d, 0x48, 0x75, 0x77, 0xe8, 0x6a, + 0xb2, 0x04, 0x82, 0xa0, 0x07, 0x00, 0xed, 0x60, + 0x02, 0x2a, 0x82, 0xc1, 0x9b, 0xdb, 0xb1, 0xd9, + 0x05, 0x9b, 0x6d, 0xa4, 0x6c, 0xec, 0xb4, 0x71, + 0x12, 0x39, 0xa7, 0x7f, 0xc5, 0xd0, 0x3b, 0x65, + 0x68, 0xda, 0xa7, 0x35, 0xf7, 0x36, 0xd4, 0x20, + 0x8e, 0x61, 0xa3, 0x41, 0xaa, 0x85, 0xc0, 0xea, + 0x53, 0x09, 0xa6, 0xf6, 0x13, 0xc4, 0x98, 0x1d, + 0xf3, 0x4f, 0x01, 0x41, 0xe4, 0x01, 0xdc, 0xed, + 0x05, 0xd3, 0x97, 0x90, 0x2f, 0xed, 0x49, 0xdc, + 0x9a, 0x32, 0x7b, 0x8f, 0x05, 0x68, 0xc2, 0xff, + 0x00, 0x9a, 0x78, 0x0a, 0x60, 0x75, 0x6b, 0x84, + 0xf0, 0x14, 0x12, 0x7b, 0x4e, 0xe0, 0xec, 0xe6, + 0x67, 0x34, 0x82, 0x30, 0xb4, 0xd4, 0x1a, 0x8d, + 0x54, 0xdc, 0x5b, 0xb3, 0x17, 0x37, 0xe1, 0xac, + 0xb5, 0xb5, 0x04, 0x87, 0xba, 0xa0, 0x6b, 0x15, + 0x2e, 0xdc, 0x50, 0xc1, 0x8e, 0x1a, 0x9a, 0x78, + 0x0a, 0x60, 0x7d, 0x6a, 0x1a, 0x6b, 0xbf, 0x42, + 0x82, 0x6b, 0x69, 0x5c, 0xd7, 0x33, 0x2d, 0xa1, + 0x06, 0x96, 0xe0, 0x1a, 0x1a, 0xe9, 0xf1, 0x53, + 0x39, 0x73, 0x4e, 0x4b, 0x95, 0x80, 0x41, 0x21, + 0xae, 0xad, 0x08, 0xd1, 0x50, 0xa1, 0x43, 0x1c, + 0x0d, 0x43, 0x4f, 0x01, 0x58, 0x0c, 0x70, 0xfc, + 0xd3, 0xc0, 0x50, 0x4d, 0xdd, 0x3d, 0xbf, 0x0c, + 0x59, 0x36, 0xa2, 0xa2, 0x52, 0x4b, 0x6b, 0xa7, + 0x59, 0x2b, 0xa3, 0x32, 0xb2, 0x97, 0x3d, 0x8a, + 0xd6, 0xfa, 0xc5, 0xcc, 0x91, 0xfc, 0xd8, 0x8e, + 0x66, 0x97, 0x00, 0x43, 0x86, 0xb2, 0x6a, 0xab, + 0xb8, 0x5d, 0xf3, 0x4f, 0x01, 0x59, 0x1c, 0xe8, + 0xad, 0x03, 0x9b, 0x5d, 0x74, 0x04, 0x78, 0x10, + 0x49, 0x67, 0x70, 0xd8, 0xdb, 0x36, 0xda, 0xd2, + 0xdc, 0x30, 0xcf, 0x13, 0x4f, 0xb4, 0xca, 0xcd, + 0xd7, 0x11, 0x40, 0xd5, 0xcd, 0x95, 0x4d, 0x14, + 0x19, 0x8d, 0xbc, 0xb3, 0x00, 0x62, 0x6b, 0xbc, + 0x7a, 0xe9, 0x00, 0x1d, 0xf5, 0xcb, 0x85, 0xdf, + 0x34, 0xf0, 0x14, 0xc2, 0xff, 0x00, 0x9a, 0x7b, + 0x3a, 0x0e, 0x94, 0x16, 0x5e, 0xa2, 0x97, 0xae, + 0x45, 0xf3, 0x5f, 0x10, 0xb2, 0x12, 0xb6, 0x60, + 0xf0, 0xe0, 0x34, 0x0f, 0x1a, 0x94, 0x50, 0xd9, + 0xd5, 0xcc, 0x77, 0x79, 0x9d, 0xcc, 0xf1, 0x1a, + 0xb1, 0xce, 0x01, 0xa7, 0x7c, 0x34, 0x01, 0x55, + 0xc9, 0xfa, 0xdc, 0x38, 0x7c, 0x6c, 0x3b, 0xd4, + 0x34, 0x58, 0xc2, 0xff, 0x00, 0x9a, 0x78, 0x0a, + 0x09, 0xcb, 0x92, 0xd3, 0xb2, 0x50, 0x32, 0xb5, + 0x3c, 0xf9, 0xa8, 0x1a, 0xe9, 0xe3, 0xaf, 0x46, + 0x57, 0x65, 0xfb, 0x33, 0x18, 0x89, 0xf8, 0x6e, + 0x2e, 0xe4, 0xc4, 0x4b, 0x4d, 0x1c, 0x07, 0xe4, + 0x14, 0x0e, 0x03, 0xf3, 0x0f, 0x01, 0xe2, 0x58, + 0xc0, 0xea, 0xd7, 0x09, 0xaf, 0x68, 0xf1, 0x20, + 0x93, 0xca, 0x73, 0x4b, 0xb8, 0xf3, 0x3b, 0x77, + 0xcb, 0x3b, 0xdf, 0x16, 0x30, 0xd7, 0x87, 0x38, + 0x91, 0x47, 0x78, 0xb5, 0x3d, 0xa5, 0x27, 0x0c, + 0xb6, 0xd6, 0x39, 0xfd, 0xed, 0xb4, 0xce, 0x02, + 0xda, 0xf8, 0x68, 0x76, 0x8a, 0x55, 0xf5, 0x3b, + 0x9d, 0xb5, 0x5a, 0xc0, 0xef, 0x9a, 0x78, 0x0f, + 0x12, 0xc6, 0x07, 0x6e, 0x34, 0xf0, 0x14, 0x13, + 0x6c, 0xd9, 0xd9, 0x6d, 0xa7, 0x13, 0x5d, 0xcb, + 0x10, 0xb2, 0x89, 0xd8, 0xcc, 0x98, 0x81, 0x2e, + 0x0d, 0x38, 0x80, 0x03, 0x7c, 0xaf, 0x1b, 0x53, + 0x23, 0x66, 0xcc, 0x59, 0x23, 0x0d, 0x5a, 0xf8, + 0x58, 0x46, 0xad, 0xda, 0xa8, 0x93, 0xce, 0x91, + 0x43, 0x88, 0x8d, 0xc0, 0x71, 0x51, 0x60, 0x31, + 0xc0, 0xd7, 0x09, 0xd7, 0x5d, 0x45, 0x06, 0x11, + 0x67, 0x0b, 0xfe, 0x69, 0xe0, 0x29, 0x85, 0xff, + 0x00, 0x34, 0xf0, 0x14, 0x18, 0x45, 0x9c, 0x2f, + 0xf9, 0xa7, 0x80, 0xa6, 0x17, 0xfc, 0xd3, 0xc0, + 0x50, 0x61, 0x16, 0x70, 0xbf, 0xe6, 0x9e, 0x02, + 0x98, 0x5f, 0xf3, 0x4f, 0x01, 0x41, 0x84, 0x59, + 0xc2, 0xff, 0x00, 0x9a, 0x78, 0x0a, 0x61, 0x7f, + 0xcd, 0x3c, 0x05, 0x06, 0x14, 0xbe, 0xca, 0xc6, + 0xe9, 0x33, 0x98, 0x9c, 0x05, 0x79, 0xb6, 0xb9, + 0xce, 0x3b, 0xc2, 0x85, 0xbe, 0x15, 0xc1, 0x6d, + 0x97, 0xde, 0xdd, 0x3c, 0x32, 0x08, 0x5e, 0xf2, + 0xed, 0xda, 0x50, 0x0e, 0xe9, 0x56, 0xbb, 0x0b, + 0x18, 0xb2, 0x3b, 0x37, 0x17, 0x91, 0x25, 0xec, + 0xda, 0x09, 0x1d, 0x8d, 0x43, 0xb4, 0x10, 0x6a, + 0xbf, 0x70, 0x75, 0xe4, 0xc4, 0x6a, 0xc5, 0xf2, + 0x2d, 0x09, 0x52, 0x74, 0x93, 0x53, 0xba, 0x51, + 0x01, 0x60, 0xea, 0xaa, 0xca, 0x20, 0xf7, 0xb5, + 0x0c, 0x2f, 0xca, 0x6d, 0x26, 0x6e, 0x96, 0x46, + 0xea, 0x3b, 0xb1, 0x88, 0x50, 0x2a, 0xaa, 0xba, + 0xda, 0x3a, 0xde, 0xea, 0xd5, 0xf9, 0x6d, 0xd7, + 0x91, 0x20, 0xc2, 0xd3, 0xf9, 0x6e, 0xd5, 0x56, + 0xf3, 0x2c, 0x8a, 0xfa, 0xc2, 0x42, 0x39, 0xb7, + 0x4b, 0x0f, 0xe6, 0xca, 0xc1, 0x88, 0x53, 0xb3, + 0xbc, 0x50, 0x47, 0x22, 0xce, 0x07, 0xfc, 0xd7, + 0x70, 0x1e, 0x24, 0xc2, 0xff, 0x00, 0x9a, 0x78, + 0x0a, 0x0c, 0x22, 0xce, 0x17, 0xfc, 0xd3, 0xc0, + 0x53, 0x0b, 0xfe, 0x69, 0xe0, 0x28, 0x30, 0x8b, + 0x38, 0x5f, 0xf3, 0x4f, 0x01, 0x4c, 0x2f, 0xf9, + 0xa7, 0x80, 0xa0, 0xed, 0xc9, 0x6c, 0x9b, 0x7d, + 0x99, 0x43, 0x6e, 0xff, 0x00, 0xd9, 0xd7, 0x14, + 0x9d, 0xa6, 0x8a, 0xd3, 0xbc, 0xa5, 0xf3, 0x8c, + 0xaf, 0x3e, 0xbf, 0xb8, 0x21, 0x90, 0x86, 0xda, + 0xc7, 0xe2, 0xc1, 0x18, 0x7b, 0x40, 0xa0, 0xd4, + 0x69, 0x55, 0x5d, 0x61, 0x9a, 0x33, 0x58, 0xcb, + 0xd8, 0xef, 0x9c, 0xdc, 0x40, 0xd0, 0x8a, 0x6e, + 0x2f, 0x7e, 0xd1, 0x7b, 0xeb, 0xa6, 0xe5, 0x3f, + 0x8d, 0x07, 0x7d, 0xa6, 0x43, 0x76, 0xec, 0xce, + 0x3b, 0x3b, 0xb6, 0x60, 0x04, 0x73, 0xd2, 0xe9, + 0x06, 0x8c, 0x1e, 0x69, 0x2a, 0x52, 0x3c, 0xc2, + 0x1c, 0xde, 0xea, 0xf3, 0x2b, 0x79, 0x02, 0x09, + 0x1b, 0x4b, 0x43, 0xbc, 0x63, 0x1b, 0x9d, 0xba, + 0x55, 0x56, 0xf9, 0xeb, 0xba, 0x97, 0x73, 0x92, + 0xe2, 0x22, 0x84, 0xe2, 0x7d, 0x48, 0xde, 0xaa, + 0xf0, 0xde, 0x75, 0x8e, 0x0e, 0x66, 0x26, 0x38, + 0x6a, 0x2d, 0xa8, 0x23, 0xb4, 0x42, 0x04, 0xb1, + 0x49, 0x0c, 0x8f, 0x8a, 0x56, 0x96, 0xbd, 0x84, + 0xb5, 0xe3, 0x4a, 0x9b, 0xd9, 0x42, 0xd9, 0x6e, + 0x2e, 0x6c, 0xdf, 0xe4, 0x5c, 0x45, 0xe3, 0x0d, + 0xf2, 0xd3, 0xc4, 0x54, 0x23, 0x84, 0x8f, 0x71, + 0x7b, 0x83, 0x9c, 0xe3, 0xad, 0xc4, 0x12, 0x4f, + 0x74, 0xac, 0xb0, 0xcd, 0x1b, 0xb1, 0x33, 0x1b, + 0x1c, 0x37, 0x5b, 0x88, 0x1e, 0xf2, 0x09, 0x7c, + 0xda, 0xeb, 0x0e, 0xd1, 0x87, 0xb3, 0x55, 0xbb, + 0xe3, 0x68, 0x1a, 0x75, 0x37, 0x08, 0x2a, 0x43, + 0x6b, 0x30, 0xdb, 0xd9, 0x32, 0x16, 0x1f, 0x79, + 0x99, 0xd3, 0x3f, 0xb2, 0x00, 0xfe, 0x90, 0xaa, + 0xc4, 0x48, 0xe2, 0x4b, 0xb1, 0x38, 0x9d, 0x64, + 0xe2, 0x24, 0x9e, 0xda, 0xf4, 0xf7, 0xdc, 0x49, + 0x4e, 0x71, 0xcf, 0x7e, 0x1d, 0x58, 0xb1, 0x1a, + 0x70, 0xf6, 0x90, 0x58, 0x6f, 0x6d, 0xef, 0x2e, + 0xf2, 0x2c, 0xbd, 0x99, 0x7b, 0x4b, 0xe3, 0x0d, + 0xa4, 0xcc, 0x8f, 0xe7, 0x52, 0x86, 0xbd, 0xd4, + 0xbc, 0xb0, 0xb8, 0x8b, 0x66, 0x23, 0xb7, 0xc3, + 0x8a, 0x48, 0x25, 0x2f, 0x95, 0xac, 0xd3, 0x80, + 0x69, 0x24, 0x3a, 0x9b, 0xd5, 0x50, 0x30, 0xdc, + 0x5e, 0x40, 0xd2, 0xd8, 0x64, 0x92, 0x30, 0x7c, + 0xa0, 0xc2, 0xe1, 0x5e, 0xdd, 0x17, 0x96, 0xc9, + 0x72, 0xd6, 0xbd, 0xa1, 0xd2, 0x61, 0x93, 0xcb, + 0x6f, 0x8d, 0x42, 0x7b, 0x3b, 0xe8, 0x27, 0x4d, + 0xa5, 0xc5, 0xf6, 0xcb, 0xda, 0x47, 0x6a, 0xce, + 0x71, 0xf1, 0xc8, 0xe7, 0x3d, 0xb5, 0x02, 0x83, + 0xc7, 0xe3, 0x4b, 0xbb, 0x79, 0x73, 0x4c, 0x8e, + 0xc9, 0xd6, 0x8d, 0x32, 0xcb, 0x67, 0x58, 0xa5, + 0x8d, 0xbe, 0x50, 0xa7, 0x8b, 0xab, 0xb8, 0xa0, + 0xe3, 0x9a, 0xee, 0x21, 0x86, 0x37, 0xc8, 0xc0, + 0x75, 0x86, 0x97, 0x01, 0xde, 0x48, 0x66, 0xba, + 0xb7, 0x71, 0x74, 0x0f, 0x92, 0x37, 0x1d, 0x65, + 0xb8, 0x82, 0x09, 0x1b, 0xec, 0xba, 0x1b, 0x1c, + 0xb2, 0xdf, 0x9f, 0x8f, 0x0e, 0x63, 0x33, 0xea, + 0xe1, 0x52, 0x48, 0x6f, 0x68, 0x2d, 0xdb, 0x5a, + 0x0f, 0x58, 0x42, 0x0e, 0x8f, 0xfb, 0x76, 0x69, + 0xfe, 0xd3, 0x94, 0x34, 0x8e, 0x9a, 0x57, 0x99, + 0x24, 0x2f, 0x7b, 0x8e, 0xb2, 0xec, 0x44, 0xa3, + 0xcc, 0xd2, 0x10, 0x64, 0x2f, 0x79, 0x1a, 0x01, + 0x76, 0x23, 0xa2, 0xb5, 0xa2, 0x09, 0xdc, 0xca, + 0x6e, 0x62, 0xc7, 0x22, 0x99, 0xda, 0xa3, 0x6b, + 0x4b, 0xa9, 0xfd, 0x85, 0xeb, 0x3d, 0xc9, 0xef, + 0x2f, 0xb3, 0x0f, 0x6a, 0xb3, 0x67, 0x3b, 0x05, + 0xcb, 0x5a, 0x79, 0xc0, 0x74, 0x36, 0x80, 0x03, + 0x8b, 0x81, 0x40, 0x13, 0x33, 0x9a, 0xd6, 0xb8, + 0xbd, 0xcd, 0x60, 0xa3, 0x5a, 0x71, 0x10, 0x07, + 0x61, 0x7b, 0x6d, 0xcd, 0xeb, 0x22, 0xe6, 0x59, + 0x24, 0xad, 0x8c, 0xfe, 0x68, 0x2e, 0x01, 0x05, + 0x8f, 0x36, 0x99, 0x96, 0x39, 0x86, 0x50, 0xf7, + 0x1a, 0xc7, 0x0b, 0x28, 0xe2, 0x35, 0x53, 0xc5, + 0x6d, 0x57, 0x26, 0x69, 0x91, 0x5e, 0xdc, 0x66, + 0xef, 0x7c, 0x11, 0x97, 0xdb, 0xdc, 0xbb, 0x18, + 0x95, 0xba, 0x5a, 0x03, 0xb4, 0xba, 0xa5, 0x42, + 0x38, 0xcc, 0xfa, 0x62, 0x2f, 0x70, 0x6e, 0x86, + 0x07, 0x62, 0x20, 0x0d, 0xe1, 0x55, 0xb1, 0x97, + 0x77, 0xf1, 0xc5, 0xcc, 0xc7, 0x34, 0xac, 0x8f, + 0x56, 0x00, 0x5c, 0x02, 0x0b, 0x1c, 0xd9, 0xa4, + 0x11, 0x6d, 0x3c, 0x00, 0x38, 0x18, 0x62, 0x8c, + 0x5b, 0xbc, 0x8d, 0x58, 0x9d, 0x53, 0x55, 0xcf, + 0x1e, 0xce, 0xdd, 0x43, 0x9b, 0x36, 0x79, 0x70, + 0x36, 0xd1, 0xb2, 0x09, 0x04, 0xb8, 0x86, 0x9d, + 0x35, 0x0d, 0x03, 0x5d, 0x4a, 0x85, 0xb1, 0x16, + 0xc2, 0xed, 0x9e, 0xda, 0xc7, 0xba, 0xdc, 0x92, + 0x24, 0x03, 0x10, 0x34, 0x3b, 0xba, 0x37, 0x94, + 0xcb, 0x32, 0xfb, 0x18, 0xae, 0xa3, 0xba, 0x76, + 0x64, 0xd9, 0x2c, 0xa2, 0x70, 0x92, 0x38, 0xaa, + 0xe7, 0x3f, 0x46, 0x90, 0xda, 0x1a, 0xa0, 0xe1, + 0xda, 0x6d, 0x39, 0xdd, 0xce, 0xff, 0x00, 0x89, + 0xf5, 0x1a, 0xa3, 0x08, 0xaa, 0xea, 0xcc, 0xee, + 0x1d, 0x7b, 0x7f, 0x35, 0xd0, 0x69, 0x0d, 0x91, + 0xd5, 0x60, 0x20, 0xd7, 0x0d, 0x00, 0x1e, 0x05, + 0xcd, 0x81, 0xdf, 0x34, 0xf0, 0x14, 0x13, 0xbb, + 0x4d, 0x5f, 0x67, 0xcb, 0x2b, 0xb9, 0x01, 0xfe, + 0xe2, 0xf3, 0x97, 0x03, 0xf0, 0xce, 0x63, 0x41, + 0xf9, 0xed, 0xf9, 0x14, 0x33, 0x9d, 0x3b, 0xc0, + 0x0f, 0x2f, 0x78, 0x68, 0xa3, 0x71, 0x62, 0x34, + 0x1d, 0x8a, 0xa0, 0x33, 0x06, 0x96, 0x02, 0xf0, + 0xc7, 0x79, 0x4d, 0x18, 0x80, 0x3d, 0xc4, 0x13, + 0x33, 0x83, 0xf0, 0x8d, 0xbe, 0x8f, 0xf8, 0xc4, + 0xd7, 0x4e, 0xaa, 0x9e, 0xc2, 0x5b, 0x83, 0xf0, + 0x8d, 0xc9, 0xa7, 0xfc, 0x71, 0xbf, 0xfd, 0x4e, + 0xc2, 0x86, 0xac, 0xc5, 0x9c, 0xd9, 0x2f, 0x31, + 0xee, 0x33, 0xc6, 0xc3, 0x5e, 0xd2, 0x56, 0x6c, + 0x06, 0x3a, 0xbf, 0x9b, 0x26, 0xa5, 0x9e, 0x36, + 0x1a, 0xef, 0xd1, 0x04, 0xc6, 0x51, 0x5e, 0xa1, + 0xcd, 0xb7, 0x74, 0x37, 0x7f, 0xb3, 0xd8, 0x5b, + 0x39, 0x99, 0x33, 0x5d, 0x9c, 0xb7, 0x8a, 0xd8, + 0x73, 0x93, 0x59, 0xc8, 0x71, 0xc4, 0x3c, 0xa2, + 0xd3, 0x5d, 0x43, 0xba, 0xa0, 0xc1, 0x98, 0x35, + 0xcc, 0x69, 0x7b, 0x58, 0xef, 0x29, 0xa3, 0x10, + 0x07, 0x45, 0x34, 0x8d, 0xd5, 0x98, 0xa5, 0xb9, + 0x81, 0xd8, 0xe1, 0x73, 0xe3, 0x76, 0xaa, 0xb6, + 0xa3, 0x47, 0x71, 0x04, 0x8d, 0xce, 0x55, 0x05, + 0x8e, 0x51, 0xcf, 0xde, 0x30, 0xc7, 0x7d, 0x2b, + 0xa9, 0x13, 0x2a, 0x74, 0x30, 0x1f, 0xce, 0x68, + 0xaa, 0xdf, 0xb4, 0x1f, 0xcb, 0xb2, 0x9d, 0x14, + 0xa4, 0x00, 0x76, 0x3c, 0x96, 0x28, 0x79, 0xa4, + 0xb8, 0x9d, 0xd8, 0xe6, 0x73, 0xe4, 0x76, 0xaa, + 0xbb, 0x11, 0xd1, 0xbc, 0xb0, 0xe3, 0x33, 0x83, + 0x43, 0xcb, 0xdc, 0x1b, 0xa1, 0xa0, 0xe2, 0x20, + 0x0d, 0xe1, 0x5d, 0x48, 0x3c, 0x22, 0xce, 0x17, + 0xfc, 0xd3, 0xc0, 0x53, 0x0b, 0xfe, 0x69, 0xe0, + 0x28, 0x30, 0x8b, 0x38, 0x5f, 0xf3, 0x4f, 0x01, + 0x4c, 0x2f, 0xf9, 0xa7, 0x80, 0xa0, 0xc2, 0x2c, + 0xe1, 0x7f, 0xcd, 0x3c, 0x05, 0x30, 0x3f, 0xe6, + 0x9e, 0x02, 0x83, 0x0b, 0xa3, 0x2d, 0x8d, 0xd2, + 0xe6, 0x36, 0xd1, 0xb4, 0x54, 0x99, 0x5b, 0xc0, + 0x0d, 0x4a, 0xd7, 0x15, 0xb5, 0xcc, 0xee, 0x0c, + 0x86, 0x27, 0xc8, 0xe3, 0xa0, 0x06, 0xb5, 0x5a, + 0xb2, 0x6c, 0x9d, 0xb9, 0x54, 0x66, 0xf6, 0xf4, + 0x8e, 0x7e, 0x94, 0x63, 0x06, 0x9c, 0x35, 0xec, + 0xef, 0xa0, 0xdf, 0x9c, 0x38, 0x1b, 0xb0, 0x06, + 0xb6, 0xb4, 0x57, 0xbe, 0xb8, 0x57, 0xa9, 0xa5, + 0x74, 0xd2, 0xba, 0x57, 0x6b, 0x71, 0xad, 0x17, + 0x94, 0x1e, 0xe1, 0xfd, 0xb3, 0x3c, 0xe6, 0xf8, + 0x54, 0xba, 0x88, 0x87, 0xf6, 0xcc, 0xf3, 0x9b, + 0xe1, 0x52, 0xe8, 0x0a, 0x3b, 0x33, 0xf7, 0xab, + 0x4f, 0xb4, 0xf9, 0x42, 0x91, 0x51, 0xd9, 0x9f, + 0xbd, 0x5a, 0x7d, 0xa7, 0xca, 0x10, 0x32, 0xcf, + 0x7a, 0xbb, 0xf3, 0xcf, 0xd6, 0x2a, 0x45, 0x47, + 0x65, 0x9e, 0xf5, 0x77, 0xe7, 0x9f, 0xac, 0x54, + 0x8a, 0x02, 0x22, 0x20, 0x21, 0x2b, 0xcc, 0x8f, + 0x6c, 0x6d, 0xc4, 0xe3, 0x85, 0xbd, 0xf5, 0xc5, + 0x2e, 0x60, 0xe3, 0xa2, 0x21, 0x41, 0xbe, 0x50, + 0x77, 0xa5, 0x0a, 0x88, 0x33, 0xcc, 0xed, 0x25, + 0xe4, 0xaf, 0x38, 0xdf, 0xf3, 0x8f, 0x0a, 0x09, + 0x9a, 0x25, 0x14, 0x36, 0x37, 0xfc, 0xe3, 0xc2, + 0x53, 0x1b, 0xfe, 0x71, 0xe1, 0x28, 0x26, 0x68, + 0x94, 0x50, 0xd8, 0xdf, 0xf3, 0x8f, 0x09, 0x4c, + 0x6f, 0xf9, 0xc7, 0x84, 0xa0, 0x99, 0xa2, 0x51, + 0x43, 0x63, 0x7f, 0xce, 0x3c, 0x25, 0x31, 0xbf, + 0xe7, 0x1e, 0x12, 0x82, 0x66, 0x89, 0x45, 0x0d, + 0x8d, 0xff, 0x00, 0x38, 0xf0, 0x94, 0xc6, 0xff, + 0x00, 0x9c, 0x78, 0x4a, 0x09, 0x9a, 0x25, 0x14, + 0x36, 0x37, 0xfc, 0xe3, 0xc2, 0x53, 0x1b, 0xfe, + 0x71, 0xe1, 0x28, 0x26, 0x68, 0x94, 0x50, 0xd8, + 0xdf, 0xf3, 0x8f, 0x09, 0x4c, 0x6f, 0xf9, 0xc7, + 0x84, 0xa0, 0x99, 0xa2, 0x51, 0x43, 0x63, 0x7f, + 0xce, 0x3c, 0x25, 0x31, 0xbf, 0xe7, 0x1e, 0x12, + 0x82, 0x66, 0x89, 0x45, 0x0d, 0x8d, 0xff, 0x00, + 0x38, 0xf0, 0x94, 0xc6, 0xff, 0x00, 0x9c, 0x78, + 0x4a, 0x09, 0x9a, 0x25, 0x14, 0x36, 0x37, 0xfc, + 0xe3, 0xc2, 0x53, 0x1b, 0xfe, 0x71, 0xe1, 0x28, + 0x26, 0x68, 0x94, 0x50, 0xd8, 0xdf, 0xf3, 0x8f, + 0x09, 0x4c, 0x6f, 0xf9, 0xc7, 0x84, 0xa0, 0x99, + 0xa2, 0x51, 0x43, 0x63, 0x7f, 0xce, 0x3c, 0x25, + 0x31, 0xbf, 0xe7, 0x1e, 0x12, 0x82, 0x66, 0x89, + 0x45, 0x0d, 0x8d, 0xff, 0x00, 0x38, 0xf0, 0x94, + 0xc6, 0xff, 0x00, 0x9c, 0x78, 0x4a, 0x09, 0x9a, + 0x25, 0x14, 0x36, 0x37, 0xfc, 0xe3, 0xc2, 0x53, + 0x1b, 0xfe, 0x71, 0xe1, 0x28, 0x26, 0x68, 0x94, + 0x50, 0xd8, 0xdf, 0xf3, 0x8f, 0x09, 0x4c, 0x6f, + 0xf9, 0xc7, 0x84, 0xa0, 0x99, 0xa2, 0x51, 0x43, + 0x63, 0x7f, 0xce, 0x3c, 0x25, 0x31, 0xbf, 0xe7, + 0x1e, 0x12, 0x82, 0x66, 0x89, 0x45, 0x0d, 0x8d, + 0xff, 0x00, 0x38, 0xf0, 0x94, 0xc6, 0xff, 0x00, + 0x9c, 0x78, 0x4a, 0x09, 0x9a, 0x25, 0x14, 0x36, + 0x37, 0xfc, 0xe3, 0xc2, 0x53, 0x1b, 0xfe, 0x71, + 0xe1, 0x28, 0x26, 0x68, 0x94, 0x50, 0xd8, 0xdf, + 0xf3, 0x8f, 0x09, 0x4c, 0x6f, 0xf9, 0xc7, 0x84, + 0xa0, 0x99, 0xa2, 0x51, 0x43, 0x63, 0x7f, 0xce, + 0x3c, 0x25, 0x31, 0xbf, 0xe7, 0x1e, 0x12, 0x82, + 0x66, 0x89, 0x45, 0x0d, 0x8d, 0xff, 0x00, 0x38, + 0xf0, 0x94, 0xc6, 0xff, 0x00, 0x9c, 0x78, 0x4a, + 0x09, 0x9a, 0x25, 0x14, 0x36, 0x37, 0xfc, 0xe3, + 0xc2, 0x53, 0x1b, 0xfe, 0x71, 0xe1, 0x28, 0x26, + 0x68, 0x94, 0x50, 0xd8, 0xdf, 0xf3, 0x8f, 0x09, + 0x4c, 0x6f, 0xf9, 0xc7, 0x84, 0xa0, 0x99, 0xa2, + 0x51, 0x43, 0x63, 0x7f, 0xce, 0x3c, 0x25, 0x31, + 0xbf, 0xe7, 0x1e, 0x12, 0x82, 0x68, 0x03, 0x55, + 0x08, 0x7c, 0xa3, 0xdb, 0x2b, 0x38, 0xdf, 0xf3, + 0x8f, 0x09, 0x58, 0x40, 0x44, 0x44, 0x00, 0x4b, + 0x48, 0x73, 0x4d, 0x1c, 0xdf, 0x25, 0xc3, 0x58, + 0x5d, 0xd0, 0xe6, 0xf7, 0x0c, 0x00, 0x3c, 0x09, + 0x37, 0xc9, 0xd0, 0x7b, 0xcb, 0x81, 0x10, 0x49, + 0x75, 0xb9, 0x3a, 0xe0, 0x61, 0x58, 0xeb, 0x7f, + 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, + 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, + 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, + 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, + 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, + 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, + 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, + 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, + 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, + 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, + 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, + 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, + 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, + 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, + 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, + 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, + 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, + 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, + 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, + 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, + 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, + 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, + 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, + 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, + 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, + 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, + 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, + 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, + 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, 0x80, 0xc4, + 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, 0x04, 0x87, + 0x5b, 0xff, 0x00, 0x80, 0xc4, 0xeb, 0x7f, 0xf0, + 0x18, 0xa3, 0xd1, 0x04, 0x87, 0x5b, 0xff, 0x00, + 0x80, 0xc4, 0xeb, 0x7f, 0xf0, 0x18, 0xa3, 0xd1, + 0x07, 0x7b, 0xf3, 0x8b, 0x8a, 0x61, 0x8d, 0x8c, + 0x60, 0xdf, 0xfe, 0x85, 0xc5, 0x24, 0x8f, 0x91, + 0xc5, 0xf2, 0x38, 0xb9, 0xc7, 0x59, 0x2b, 0xc2, + 0xca, 0x02, 0x22, 0x20, 0x22, 0x22, 0x06, 0xad, + 0x23, 0x42, 0xeb, 0x83, 0x34, 0xba, 0x88, 0x61, + 0x24, 0x48, 0xdd, 0xe7, 0x6b, 0xe1, 0x5c, 0x88, + 0x82, 0x47, 0xad, 0xcf, 0xa8, 0x62, 0xc7, 0x5b, + 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, + 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, + 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, + 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, + 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, + 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, + 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, + 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, + 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, + 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, + 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, + 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, + 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, + 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, + 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, + 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, + 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, + 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, + 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x7a, 0xdc, + 0xfa, 0x86, 0x27, 0x5b, 0x9f, 0x50, 0xc5, 0x1c, + 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, + 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, + 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, + 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, + 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, + 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, + 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, + 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, + 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, 0x06, 0x27, + 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, 0x88, 0x24, + 0x3a, 0xdf, 0xfc, 0x06, 0x27, 0x5b, 0xff, 0x00, + 0x80, 0xc5, 0x1e, 0x88, 0x24, 0x3a, 0xdf, 0xfc, + 0x06, 0x27, 0x5b, 0xff, 0x00, 0x80, 0xc5, 0x1e, + 0x88, 0x24, 0x0e, 0x73, 0x35, 0x28, 0xd8, 0xda, + 0xde, 0xca, 0xe2, 0x9a, 0x79, 0x67, 0x76, 0x29, + 0x5d, 0x8c, 0xee, 0x6f, 0x05, 0xe1, 0x10, 0x11, + 0x11, 0x07, 0xb8, 0x7f, 0x6c, 0xcf, 0x39, 0xbe, + 0x15, 0x2e, 0xa2, 0x21, 0xfd, 0xb3, 0x3c, 0xe6, + 0xf8, 0x54, 0xba, 0x02, 0x8e, 0xcc, 0xfd, 0xea, + 0xd3, 0xed, 0x3e, 0x50, 0xa4, 0x54, 0x76, 0x67, + 0xef, 0x56, 0x9f, 0x69, 0xf2, 0x84, 0x0c, 0xb3, + 0xde, 0xae, 0xfc, 0xf3, 0xf5, 0x8a, 0x92, 0x51, + 0x99, 0x67, 0xbd, 0x5e, 0x79, 0xe7, 0xc2, 0x54, + 0x8d, 0x4e, 0xf9, 0x41, 0x95, 0xe6, 0x47, 0xb6, + 0x36, 0x17, 0xbc, 0xd0, 0x05, 0x9a, 0x9d, 0xf2, + 0xb8, 0x6f, 0xe6, 0x2e, 0x77, 0x34, 0x0e, 0x86, + 0xe9, 0x77, 0x6d, 0x07, 0x3c, 0xd3, 0x3e, 0x67, + 0x62, 0x76, 0xad, 0xc6, 0xef, 0x05, 0xe1, 0x0a, + 0x20, 0x22, 0xd9, 0x05, 0xbc, 0xd3, 0xba, 0x91, + 0x37, 0x16, 0xf9, 0xdc, 0x1d, 0xd5, 0xda, 0x32, + 0xc8, 0x63, 0x6d, 0x6e, 0x6e, 0x03, 0x3b, 0x02, + 0x83, 0xc2, 0x9e, 0x3e, 0x1a, 0xc9, 0x3a, 0x47, + 0x8c, 0xc4, 0x23, 0x91, 0x77, 0xfb, 0x3e, 0x51, + 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xec, 0xf9, 0x47, + 0x4a, 0x1c, 0xa6, 0xf1, 0x29, 0xdb, 0x6e, 0x52, + 0xaf, 0x72, 0x9d, 0x51, 0xf3, 0x70, 0x22, 0xef, + 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, 0x78, 0x93, + 0xd9, 0xf2, 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4d, + 0xb6, 0xe5, 0x3f, 0x23, 0xb9, 0x4e, 0xa8, 0xf9, + 0xb8, 0x11, 0x77, 0xfb, 0x3e, 0x51, 0xd2, 0x87, + 0x29, 0xbc, 0x49, 0xec, 0xf9, 0x47, 0x4a, 0x1c, + 0xa6, 0xf1, 0x26, 0xdb, 0x72, 0x9f, 0x91, 0xdc, + 0xa7, 0x54, 0x7c, 0xdc, 0x08, 0xbb, 0xfd, 0x9f, + 0x28, 0xe9, 0x43, 0x94, 0xde, 0x24, 0xf6, 0x7c, + 0xa3, 0xa5, 0x0e, 0x53, 0x78, 0x93, 0x6d, 0xb9, + 0x4f, 0xc8, 0xee, 0x53, 0xaa, 0x3e, 0x6e, 0x04, + 0x5d, 0xfe, 0xcf, 0x94, 0x74, 0xa1, 0xca, 0x6f, + 0x12, 0x7b, 0x3e, 0x51, 0xd2, 0x87, 0x29, 0xbc, + 0x49, 0xb6, 0xdc, 0xa7, 0xe4, 0x77, 0x29, 0xd5, + 0x1f, 0x37, 0x02, 0x2e, 0xff, 0x00, 0x67, 0xca, + 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x3d, 0x9f, 0x28, + 0xe9, 0x43, 0x94, 0xde, 0x24, 0xdb, 0x6e, 0x53, + 0xf2, 0x3b, 0x94, 0xea, 0x8f, 0x9b, 0x81, 0x17, + 0x7f, 0xb3, 0xe5, 0x1d, 0x28, 0x72, 0x9b, 0xc4, + 0x9e, 0xcf, 0x94, 0x74, 0xa1, 0xca, 0x6f, 0x12, + 0x6d, 0xb7, 0x29, 0xf9, 0x1d, 0xca, 0x75, 0x47, + 0xcd, 0xc0, 0x8b, 0xbf, 0xd9, 0xf2, 0x8e, 0x94, + 0x39, 0x4d, 0xe2, 0x4f, 0x67, 0xca, 0x3a, 0x50, + 0xe5, 0x37, 0x89, 0x36, 0xdb, 0x94, 0xfc, 0x8e, + 0xe5, 0x3a, 0xa3, 0xe6, 0xe0, 0x45, 0xdf, 0xec, + 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, 0x27, 0xb3, + 0xe5, 0x1d, 0x28, 0x72, 0x9b, 0xc4, 0x9b, 0x6d, + 0xca, 0x7e, 0x47, 0x72, 0x9d, 0x51, 0xf3, 0x70, + 0x22, 0xef, 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, + 0x78, 0x93, 0xd9, 0xf2, 0x8e, 0x94, 0x39, 0x4d, + 0xe2, 0x4d, 0xb6, 0xe5, 0x3f, 0x23, 0xb9, 0x4e, + 0xa8, 0xf9, 0xb8, 0x11, 0x77, 0xfb, 0x3e, 0x51, + 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xec, 0xf9, 0x47, + 0x4a, 0x1c, 0xa6, 0xf1, 0x26, 0xdb, 0x72, 0x9f, + 0x91, 0xdc, 0xa7, 0x54, 0x7c, 0xdc, 0x08, 0xbb, + 0xfd, 0x9f, 0x28, 0xe9, 0x43, 0x94, 0xde, 0x24, + 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, 0x78, 0x93, + 0x6d, 0xb9, 0x4f, 0xc8, 0xee, 0x53, 0xaa, 0x3e, + 0x6e, 0x04, 0x5d, 0xfe, 0xcf, 0x94, 0x74, 0xa1, + 0xca, 0x6f, 0x12, 0x7b, 0x3e, 0x51, 0xd2, 0x87, + 0x29, 0xbc, 0x49, 0xb6, 0xdc, 0xa7, 0xe4, 0x77, + 0x29, 0xd5, 0x1f, 0x37, 0x02, 0x2e, 0xff, 0x00, + 0x67, 0xca, 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x3d, + 0x9f, 0x28, 0xe9, 0x43, 0x94, 0xde, 0x24, 0xdb, + 0x6e, 0x53, 0xf2, 0x3b, 0x94, 0xea, 0x8f, 0x9b, + 0x81, 0x17, 0x7f, 0xb3, 0xe5, 0x1d, 0x28, 0x72, + 0x9b, 0xc4, 0x9e, 0xcf, 0x94, 0x74, 0xa1, 0xca, + 0x6f, 0x12, 0x6d, 0xb7, 0x29, 0xf9, 0x1d, 0xca, + 0x75, 0x47, 0xcd, 0xc0, 0x8b, 0xbf, 0xd9, 0xf2, + 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4f, 0x67, 0xca, + 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x36, 0xdb, 0x94, + 0xfc, 0x8e, 0xe5, 0x3a, 0xa3, 0xe6, 0xe0, 0x45, + 0xdf, 0xec, 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, + 0x27, 0xb3, 0xe5, 0x1d, 0x28, 0x72, 0x9b, 0xc4, + 0x9b, 0x6d, 0xca, 0x7e, 0x47, 0x72, 0x9d, 0x51, + 0xf3, 0x70, 0x22, 0xef, 0xf6, 0x7c, 0xa3, 0xa5, + 0x0e, 0x53, 0x78, 0x93, 0xd9, 0xf2, 0x8e, 0x94, + 0x39, 0x4d, 0xe2, 0x4d, 0xb6, 0xe5, 0x3f, 0x23, + 0xb9, 0x4e, 0xa8, 0xf9, 0xb8, 0x11, 0x77, 0xfb, + 0x3e, 0x51, 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xec, + 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, 0x26, 0xdb, + 0x72, 0x9f, 0x91, 0xdc, 0xa7, 0x54, 0x7c, 0xdc, + 0x08, 0xbb, 0xfd, 0x9f, 0x28, 0xe9, 0x43, 0x94, + 0xde, 0x24, 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, + 0x78, 0x93, 0x6d, 0xb9, 0x4f, 0xc8, 0xee, 0x53, + 0xaa, 0x3e, 0x6e, 0x04, 0x5d, 0xfe, 0xcf, 0x94, + 0x74, 0xa1, 0xca, 0x6f, 0x12, 0x7b, 0x3e, 0x51, + 0xd2, 0xc7, 0x29, 0xbc, 0x49, 0xb6, 0xdc, 0xa7, + 0xe4, 0x77, 0x29, 0xd5, 0x1f, 0x37, 0x02, 0x2e, + 0xff, 0x00, 0x66, 0xca, 0x77, 0x2e, 0xf4, 0xf9, + 0xcd, 0xe2, 0x59, 0x76, 0x54, 0x1c, 0xd2, 0xeb, + 0x79, 0x83, 0xfb, 0x06, 0x9a, 0x7b, 0xa9, 0xa4, + 0xc7, 0x8c, 0x4a, 0x62, 0xf4, 0x9e, 0x11, 0x68, + 0x94, 0x7a, 0x2f, 0x52, 0x45, 0x24, 0x4f, 0xc1, + 0x23, 0x4b, 0x5d, 0xbc, 0x57, 0x95, 0x09, 0x11, + 0x11, 0x01, 0x11, 0x3b, 0x08, 0x08, 0xba, 0xad, + 0xf2, 0xe9, 0xe6, 0x01, 0xd4, 0x0c, 0x66, 0xe3, + 0x9d, 0xc4, 0xb7, 0xba, 0xc7, 0x2f, 0x8f, 0x44, + 0xd7, 0x34, 0x77, 0x6d, 0xa3, 0xbc, 0x9e, 0x3e, + 0x11, 0x33, 0xf8, 0x22, 0x6d, 0x11, 0xe3, 0x31, + 0x08, 0xe4, 0x5d, 0xfe, 0xcf, 0x94, 0x74, 0xa1, + 0xca, 0x6f, 0x12, 0x7b, 0x3e, 0x51, 0xd2, 0x87, + 0x29, 0xbc, 0x4a, 0x76, 0xdb, 0x94, 0xfc, 0x91, + 0xdc, 0xa7, 0x54, 0x7c, 0xdc, 0x08, 0xbb, 0xfd, + 0x9f, 0x28, 0xe9, 0x43, 0x94, 0xde, 0x24, 0xf6, + 0x7c, 0xa3, 0xa5, 0x0e, 0x53, 0x78, 0x93, 0x6d, + 0xb9, 0x4f, 0xc8, 0xee, 0x53, 0xaa, 0x3e, 0x6e, + 0x04, 0x5d, 0xfe, 0xcf, 0x94, 0x74, 0xa1, 0xca, + 0x6f, 0x12, 0x7b, 0x3e, 0x51, 0xd2, 0x87, 0x29, + 0xbc, 0x49, 0xb6, 0xdc, 0xa7, 0xe4, 0x77, 0x29, + 0xd5, 0x1f, 0x37, 0x02, 0x2e, 0xff, 0x00, 0x67, + 0xca, 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x3d, 0x9f, + 0x28, 0xe9, 0x43, 0x94, 0xde, 0x24, 0xdb, 0x6e, + 0x53, 0xf2, 0x3b, 0x94, 0xea, 0x8f, 0x9b, 0x81, + 0x17, 0x7f, 0xb3, 0xe5, 0x1d, 0x28, 0x72, 0x9b, + 0xc4, 0x9e, 0xcf, 0x94, 0x74, 0xa1, 0xca, 0x6f, + 0x12, 0x6d, 0xb7, 0x29, 0xf9, 0x1d, 0xca, 0x75, + 0x47, 0xcd, 0xc0, 0x8b, 0xbf, 0xd9, 0xf2, 0x8e, + 0x94, 0x39, 0x4d, 0xe2, 0x4f, 0x67, 0xca, 0x3a, + 0x50, 0xe5, 0x37, 0x89, 0x36, 0xdb, 0x94, 0xfc, + 0x8e, 0xe5, 0x3a, 0xa3, 0xe6, 0xe0, 0x45, 0xdf, + 0xec, 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, 0x27, + 0xb3, 0xe5, 0x1d, 0x28, 0x72, 0x9b, 0xc4, 0x9b, + 0x6d, 0xca, 0x7e, 0x47, 0x72, 0x9d, 0x51, 0xf3, + 0x70, 0x22, 0xef, 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, + 0x53, 0x78, 0x93, 0xd9, 0xf2, 0x8e, 0x94, 0x39, + 0x4d, 0xe2, 0x4d, 0xb6, 0xe5, 0x3f, 0x23, 0xb9, + 0x4e, 0xa8, 0xf9, 0xb8, 0x11, 0x77, 0xfb, 0x3e, + 0x51, 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xec, 0xf9, + 0x47, 0x4a, 0x1c, 0xa6, 0xf1, 0x26, 0xdb, 0x72, + 0x9f, 0x91, 0xdc, 0xa7, 0x54, 0x7c, 0xdc, 0x08, + 0xbb, 0xfd, 0x9f, 0x28, 0xe9, 0x43, 0x94, 0xde, + 0x24, 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, 0x78, + 0x93, 0x6d, 0xb9, 0x4f, 0xc8, 0xee, 0x53, 0xaa, + 0x3e, 0x6e, 0x04, 0x5d, 0xfe, 0xcf, 0x94, 0x74, + 0xa1, 0xca, 0x6f, 0x12, 0x7b, 0x3e, 0x51, 0xd2, + 0x87, 0x29, 0xbc, 0x49, 0xb6, 0xdc, 0xa7, 0xe4, + 0x77, 0x29, 0xd5, 0x1f, 0x37, 0x02, 0x2e, 0xff, + 0x00, 0x67, 0xca, 0x3a, 0x50, 0xe5, 0x37, 0x89, + 0x3d, 0x9f, 0x28, 0xe9, 0x43, 0x94, 0xde, 0x24, + 0xdb, 0x6e, 0x53, 0xf2, 0x3b, 0x94, 0xea, 0x8f, + 0x9b, 0x81, 0x17, 0x7f, 0xb3, 0xe5, 0x1d, 0x28, + 0x72, 0x9b, 0xc4, 0x9e, 0xcf, 0x94, 0x74, 0xa1, + 0xca, 0x6f, 0x12, 0x6d, 0xb7, 0x29, 0xf9, 0x1d, + 0xca, 0x75, 0x47, 0xcd, 0xc0, 0x8b, 0xbf, 0xd9, + 0xf2, 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4f, 0x67, + 0xca, 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x36, 0xdb, + 0x94, 0xfc, 0x8e, 0xe5, 0x3a, 0xa3, 0xe6, 0xe0, + 0x45, 0xdf, 0xec, 0xf9, 0x47, 0x4a, 0x1c, 0xa6, + 0xf1, 0x27, 0xb3, 0xe5, 0x1d, 0x28, 0x72, 0x9b, + 0xc4, 0x9b, 0x6d, 0xca, 0x7e, 0x47, 0x72, 0x9d, + 0x51, 0xf3, 0x70, 0x22, 0xef, 0xf6, 0x7c, 0xa3, + 0xa5, 0x0e, 0x53, 0x78, 0x93, 0xd9, 0xf2, 0x8e, + 0x94, 0x39, 0x4d, 0xe2, 0x4d, 0xb6, 0xe5, 0x3f, + 0x23, 0xb9, 0x4e, 0xa8, 0xf9, 0xb8, 0x11, 0x77, + 0xfb, 0x3e, 0x51, 0xd2, 0x87, 0x29, 0xbc, 0x49, + 0xec, 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, 0x26, + 0xdb, 0x72, 0x9f, 0x91, 0xdc, 0xa7, 0x54, 0x7c, + 0xdc, 0x08, 0xbb, 0xfd, 0x9f, 0x28, 0xe9, 0x43, + 0x94, 0xde, 0x24, 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, + 0x53, 0x78, 0x93, 0x6d, 0xb9, 0x4f, 0xc8, 0xee, + 0x53, 0xaa, 0x3e, 0x6e, 0x04, 0x5d, 0xfe, 0xcf, + 0x94, 0x74, 0xa1, 0xca, 0x6f, 0x12, 0x7b, 0x3e, + 0x51, 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xb6, 0xdc, + 0xa7, 0xe4, 0x77, 0x29, 0xd5, 0x1f, 0x37, 0x02, + 0x2e, 0xff, 0x00, 0x67, 0xca, 0x3a, 0x50, 0xe5, + 0x37, 0x89, 0x3d, 0x9f, 0x28, 0xe9, 0x43, 0x94, + 0xde, 0x24, 0xdb, 0x6e, 0x53, 0xf2, 0x3b, 0x94, + 0xea, 0x8f, 0x9b, 0x81, 0x17, 0x7f, 0xb3, 0xe5, + 0x1d, 0x28, 0x72, 0x9b, 0xc4, 0x9e, 0xcf, 0x94, + 0x74, 0xa1, 0xca, 0x6f, 0x12, 0x6d, 0xb7, 0x29, + 0xf9, 0x1d, 0xca, 0x75, 0x47, 0xcd, 0xc0, 0x8a, + 0x44, 0x59, 0xe5, 0xcf, 0x34, 0x8e, 0xeb, 0x4e, + 0xf5, 0x5a, 0x56, 0xa9, 0xb2, 0xab, 0x88, 0xc6, + 0x28, 0xc8, 0x95, 0xbf, 0xd5, 0xd0, 0x78, 0x12, + 0x62, 0x63, 0xc6, 0x26, 0x13, 0x16, 0xac, 0xf8, + 0x4c, 0x4b, 0x8d, 0x16, 0x16, 0x54, 0x24, 0x44, + 0x58, 0x41, 0x94, 0x5d, 0x36, 0xd9, 0x7d, 0xc5, + 0xc0, 0x0e, 0x1e, 0x24, 0x67, 0xf3, 0x9d, 0xba, + 0x3b, 0x0b, 0xa1, 0xd6, 0x16, 0x51, 0x00, 0x25, + 0xb9, 0x0d, 0x3b, 0xd5, 0x01, 0x34, 0x99, 0xf0, + 0xe2, 0x89, 0x98, 0x8f, 0x19, 0x88, 0xf8, 0xf0, + 0x47, 0x22, 0xef, 0xf6, 0x7c, 0xa7, 0xa5, 0x0e, + 0x53, 0x78, 0x93, 0xd9, 0xf2, 0x8e, 0x94, 0x39, + 0x4d, 0xe2, 0x53, 0xb6, 0xdc, 0xa5, 0x1d, 0xca, + 0x75, 0x47, 0xcd, 0xc0, 0x8b, 0xbf, 0xd9, 0xf2, + 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4f, 0x67, 0xca, + 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x36, 0xdb, 0x94, + 0xfc, 0x8e, 0xe5, 0x3a, 0xa3, 0xe6, 0xe0, 0x45, + 0xdf, 0xec, 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, + 0x27, 0xb3, 0xe5, 0x1d, 0x28, 0x72, 0x9b, 0xc4, + 0x9b, 0x6d, 0xca, 0x7e, 0x47, 0x72, 0x9d, 0x51, + 0xf3, 0x70, 0x22, 0xef, 0xf6, 0x7c, 0xa3, 0xa5, + 0x0e, 0x53, 0x78, 0x93, 0xd9, 0xf2, 0x8e, 0x94, + 0x39, 0x4d, 0xe2, 0x4d, 0xb6, 0xe5, 0x3f, 0x23, + 0xb9, 0x4e, 0xa8, 0xf9, 0xb8, 0x11, 0x77, 0xfb, + 0x3e, 0x51, 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xec, + 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, 0x26, 0xdb, + 0x72, 0x9f, 0x91, 0xdc, 0xa7, 0x54, 0x7c, 0xdc, + 0x08, 0xbb, 0xfd, 0x9f, 0x28, 0xe9, 0x43, 0x94, + 0xde, 0x24, 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, + 0x78, 0x93, 0x6d, 0xb9, 0x4f, 0xc8, 0xee, 0x53, + 0xaa, 0x3e, 0x6e, 0x04, 0x5d, 0xfe, 0xcf, 0x94, + 0x74, 0xa1, 0xca, 0x6f, 0x12, 0x7b, 0x3e, 0x51, + 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xb6, 0xdc, 0xa7, + 0xe4, 0x77, 0x29, 0xd5, 0x1f, 0x37, 0x02, 0x2e, + 0xff, 0x00, 0x67, 0xca, 0x3a, 0x50, 0xe5, 0x37, + 0x89, 0x3d, 0x9f, 0x28, 0xe9, 0x43, 0x94, 0xde, + 0x24, 0xdb, 0x6e, 0x53, 0xf2, 0x3b, 0x94, 0xea, + 0x8f, 0x9b, 0x81, 0x17, 0x7f, 0xb3, 0xe5, 0x1d, + 0x28, 0x72, 0x9b, 0xc4, 0x9e, 0xcf, 0x94, 0x74, + 0xa1, 0xca, 0x6f, 0x12, 0x6d, 0xb7, 0x29, 0xf9, + 0x1d, 0xca, 0x75, 0x47, 0xcd, 0xc0, 0x8b, 0xbf, + 0xd9, 0xf2, 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4f, + 0x67, 0xca, 0x3a, 0x50, 0xe5, 0x37, 0x89, 0x36, + 0xdb, 0x94, 0xfc, 0x8e, 0xe5, 0x3a, 0xa3, 0xe6, + 0xe0, 0x45, 0xdf, 0xec, 0xf9, 0x47, 0x4a, 0x1c, + 0xa6, 0xf1, 0x27, 0xb3, 0xe5, 0x1d, 0x28, 0x72, + 0x9b, 0xc4, 0x9b, 0x6d, 0xca, 0x7e, 0x47, 0x72, + 0x9d, 0x51, 0xf3, 0x70, 0x22, 0xef, 0xf6, 0x7c, + 0xa3, 0xa5, 0x0e, 0x53, 0x78, 0x93, 0xd9, 0xf2, + 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4d, 0xb6, 0xe5, + 0x3f, 0x23, 0xb9, 0x4e, 0xa8, 0xf9, 0xb8, 0x11, + 0x77, 0xfb, 0x3e, 0x51, 0xd2, 0x87, 0x29, 0xbc, + 0x49, 0xec, 0xf9, 0x47, 0x4a, 0x1c, 0xa6, 0xf1, + 0x26, 0xdb, 0x72, 0x9f, 0x91, 0xdc, 0xa7, 0x54, + 0x7c, 0xdc, 0x08, 0xbb, 0xfd, 0x9f, 0x28, 0xe9, + 0x43, 0x94, 0xde, 0x24, 0xf6, 0x7c, 0xa3, 0xa5, + 0x0e, 0x53, 0x78, 0x93, 0x6d, 0xb9, 0x4f, 0xc8, + 0xee, 0x53, 0xaa, 0x3e, 0x6e, 0x04, 0x5d, 0xfe, + 0xcf, 0x94, 0x74, 0xa1, 0xca, 0x6f, 0x12, 0x7b, + 0x3e, 0x51, 0xd2, 0x87, 0x29, 0xbc, 0x49, 0xb6, + 0xdc, 0xa7, 0xe4, 0x77, 0x29, 0xd5, 0x1f, 0x37, + 0x02, 0x2e, 0xff, 0x00, 0x67, 0xca, 0x3a, 0x50, + 0xe5, 0x37, 0x89, 0x3d, 0x9f, 0x28, 0xe9, 0x43, + 0x94, 0xde, 0x24, 0xdb, 0x6e, 0x53, 0xf2, 0x3b, + 0x94, 0xea, 0x8f, 0x9b, 0x81, 0x17, 0x7f, 0xb3, + 0xe5, 0x1d, 0x28, 0x72, 0x9b, 0xc4, 0x9e, 0xcf, + 0x94, 0x74, 0xa1, 0xca, 0x6f, 0x12, 0x6d, 0xb7, + 0x29, 0xf9, 0x1d, 0xca, 0x75, 0x47, 0xcd, 0xc0, + 0x8b, 0xbf, 0xd9, 0xf2, 0x8e, 0x94, 0x39, 0x4d, + 0xe2, 0x4f, 0x67, 0xca, 0x3a, 0x50, 0xe5, 0x37, + 0x89, 0x36, 0xdb, 0x94, 0xfc, 0x8e, 0xe5, 0x3a, + 0xa3, 0xe6, 0xe0, 0x45, 0xdf, 0xec, 0xf9, 0x47, + 0x4a, 0x1c, 0xa6, 0xf1, 0x27, 0xb3, 0xe5, 0x1d, + 0x28, 0x72, 0x9b, 0xc4, 0x9b, 0x6d, 0xca, 0x7e, + 0x47, 0x72, 0x9d, 0x51, 0xf3, 0x70, 0x22, 0xef, + 0xf6, 0x7c, 0xa3, 0xa5, 0x0e, 0x53, 0x78, 0x93, + 0xd9, 0xf2, 0x8e, 0x94, 0x39, 0x4d, 0xe2, 0x4d, + 0xb6, 0xe5, 0x3f, 0x23, 0xb9, 0x4e, 0xa8, 0xf9, + 0xb8, 0x11, 0x77, 0xfb, 0x3e, 0x51, 0xd2, 0x87, + 0x29, 0xbc, 0x49, 0xec, 0xd9, 0x4f, 0x4a, 0x1c, + 0xa6, 0xf1, 0x26, 0xdb, 0x72, 0x9f, 0x91, 0xdc, + 0xa7, 0x54, 0x7c, 0xdc, 0x08, 0xa4, 0x05, 0x9e, + 0x58, 0xf3, 0x85, 0x97, 0x55, 0x71, 0xd5, 0xe3, + 0x37, 0x89, 0x78, 0x9f, 0x2a, 0x99, 0xa3, 0x14, + 0x4e, 0x12, 0xb7, 0xfa, 0xba, 0x0a, 0x89, 0x89, + 0x8f, 0x62, 0x62, 0xd1, 0x3f, 0x6c, 0xc4, 0xfe, + 0x2e, 0x24, 0x4d, 0x3b, 0xbd, 0xad, 0x3a, 0xd1, + 0x12, 0xf7, 0x0f, 0xed, 0x99, 0xe7, 0x37, 0xc2, + 0xa5, 0xd4, 0x3c, 0x3f, 0xb6, 0x67, 0x9c, 0xd5, + 0x2f, 0x53, 0xbe, 0x50, 0x65, 0x47, 0x66, 0x7e, + 0xf5, 0x69, 0xf6, 0x9f, 0x28, 0x52, 0x15, 0x3b, + 0xe5, 0x47, 0xe6, 0x44, 0xfb, 0x4d, 0xa7, 0xda, + 0x7c, 0xa1, 0x06, 0x32, 0xcf, 0x7a, 0xbc, 0xf3, + 0xcf, 0x84, 0xa9, 0x15, 0x1d, 0x96, 0x7b, 0xd5, + 0xe7, 0x9e, 0x7c, 0x25, 0x48, 0xa0, 0x15, 0x0e, + 0xf7, 0x17, 0x3d, 0xce, 0x3b, 0xa5, 0x4b, 0xbb, + 0x51, 0x50, 0xe7, 0x59, 0x40, 0x5b, 0xad, 0x2d, + 0x9d, 0x73, 0x30, 0x60, 0xd0, 0xdd, 0x6f, 0x3d, + 0x85, 0xa6, 0x8b, 0xbe, 0x39, 0x0d, 0x96, 0x53, + 0x25, 0xcb, 0x74, 0x3e, 0x4f, 0x24, 0xf6, 0x49, + 0xc2, 0xd4, 0x88, 0x99, 0x9d, 0x23, 0xda, 0x8b, + 0x5a, 0x2b, 0x13, 0x69, 0xf0, 0x86, 0xac, 0xcb, + 0x36, 0x65, 0xb7, 0xfd, 0x9d, 0x8e, 0x8c, 0x1a, + 0x1e, 0xfd, 0xe3, 0xfd, 0x5e, 0xcf, 0x65, 0x42, + 0x49, 0x23, 0xe4, 0x76, 0x37, 0x92, 0xe7, 0x6f, + 0x9d, 0x27, 0xbe, 0xb5, 0x63, 0x27, 0x49, 0xd6, + 0x74, 0x94, 0xc4, 0xb7, 0x63, 0xa4, 0x52, 0x34, + 0x87, 0x87, 0x97, 0x3d, 0xf2, 0xda, 0x66, 0x67, + 0x86, 0xbc, 0x34, 0xe4, 0xd9, 0x54, 0xaa, 0xd7, + 0x89, 0x31, 0x2e, 0x9a, 0xb9, 0xe8, 0xd9, 0x54, + 0xaa, 0xd6, 0x09, 0x26, 0x80, 0x54, 0x9d, 0x40, + 0x6e, 0xae, 0x8f, 0x61, 0xbe, 0x2d, 0xc5, 0xcc, + 0x3f, 0x0d, 0x2b, 0x5c, 0x25, 0x46, 0xe8, 0xe6, + 0x9a, 0xd2, 0xd3, 0xec, 0x99, 0x6b, 0xaa, 0x55, + 0x78, 0x35, 0x04, 0x82, 0x28, 0x46, 0xb0, 0x74, + 0x15, 0x8c, 0x4a, 0x75, 0x46, 0x93, 0xed, 0x6c, + 0xaa, 0x55, 0x6b, 0xc4, 0x98, 0x93, 0x59, 0x1b, + 0x2a, 0x95, 0x5a, 0xf1, 0x26, 0x24, 0xd6, 0x4d, + 0x1b, 0x2a, 0x95, 0x5a, 0xeb, 0xc6, 0x95, 0x4d, + 0x7d, 0xe9, 0xd2, 0x7d, 0xf0, 0xd9, 0x54, 0xaa, + 0xd7, 0x89, 0x31, 0x26, 0xb2, 0x86, 0xca, 0xa5, + 0x56, 0xbc, 0x4b, 0x2d, 0xc4, 0xf7, 0x61, 0x60, + 0x2e, 0x71, 0xad, 0x00, 0xd2, 0x4d, 0x01, 0x3f, + 0x22, 0x6a, 0x4e, 0xba, 0x70, 0x7b, 0xaa, 0x55, + 0x79, 0x7b, 0x24, 0x8e, 0x9c, 0xe3, 0x4b, 0x09, + 0xd2, 0x03, 0x81, 0x15, 0x5e, 0x71, 0x28, 0xdc, + 0x5a, 0xb3, 0x13, 0xc5, 0xb2, 0xa9, 0x54, 0x6c, + 0x33, 0xb8, 0x55, 0xb1, 0xb8, 0xb4, 0xea, 0x21, + 0xa6, 0x85, 0x1d, 0x0c, 0xec, 0x18, 0x9d, 0x1b, + 0xc3, 0x77, 0xf0, 0x94, 0xdd, 0xef, 0x84, 0xec, + 0xbf, 0x29, 0x2a, 0x95, 0x5a, 0xf1, 0x04, 0xc4, + 0xa7, 0x59, 0x47, 0xcd, 0xb2, 0xa9, 0x55, 0xaf, + 0x12, 0x62, 0x4d, 0x64, 0xd1, 0xb2, 0xa9, 0x55, + 0xe5, 0x81, 0xf2, 0x3c, 0x32, 0x36, 0x97, 0xb8, + 0xea, 0x03, 0x49, 0x5e, 0xa5, 0x8a, 0x68, 0x69, + 0xce, 0xb1, 0xd1, 0xe2, 0xad, 0x31, 0x0a, 0x6a, + 0xff, 0x00, 0xe5, 0x46, 0xee, 0x3a, 0x6b, 0xc5, + 0x3b, 0x67, 0x4d, 0x78, 0xe9, 0x1c, 0x27, 0xe2, + 0x55, 0x2a, 0xb5, 0xe2, 0x4c, 0x4a, 0x75, 0x94, + 0x36, 0x55, 0x2a, 0xbc, 0xb1, 0x92, 0x49, 0x5c, + 0x0d, 0x73, 0xe9, 0xaf, 0x08, 0x27, 0xc0, 0xb0, + 0xe0, 0xe6, 0x38, 0xb5, 0xe0, 0xb5, 0xc3, 0x58, + 0x3a, 0x0a, 0x8d, 0x7d, 0xe9, 0xdb, 0x3e, 0x33, + 0xae, 0x8f, 0x75, 0x4a, 0xad, 0x78, 0x93, 0x12, + 0x9d, 0x65, 0x0d, 0x95, 0x4a, 0xad, 0x78, 0x93, + 0x12, 0x6b, 0x23, 0x65, 0x52, 0xab, 0x5e, 0x24, + 0xc4, 0x9a, 0xc8, 0xd9, 0x54, 0xaa, 0xd7, 0x89, + 0x7a, 0x63, 0x5f, 0x21, 0x22, 0x36, 0x97, 0x10, + 0x2a, 0x40, 0x04, 0xee, 0x81, 0xf2, 0xa4, 0x4f, + 0xbd, 0x31, 0x13, 0x3c, 0x23, 0x59, 0x7a, 0xaa, + 0x55, 0x79, 0x7b, 0x5e, 0xc7, 0x61, 0x7b, 0x4b, + 0x5d, 0xbc, 0x45, 0x0a, 0xf3, 0x89, 0x35, 0x26, + 0x26, 0x27, 0x49, 0xf1, 0x6c, 0xaa, 0x55, 0x6b, + 0xc4, 0x98, 0x93, 0x59, 0x43, 0x65, 0x42, 0xd9, + 0x15, 0xc4, 0xb0, 0x38, 0x3a, 0x17, 0x98, 0xc8, + 0xdd, 0x05, 0x73, 0xe2, 0x4c, 0x4a, 0x27, 0x8c, + 0x69, 0x3c, 0x53, 0x13, 0x31, 0x31, 0x31, 0x33, + 0x1f, 0x05, 0x96, 0xca, 0xfa, 0x2c, 0xd6, 0x2f, + 0x67, 0xb8, 0x01, 0xb7, 0x0d, 0x15, 0x69, 0x1e, + 0x10, 0xb8, 0xa5, 0x89, 0xf0, 0xc8, 0xe8, 0xde, + 0x28, 0xe6, 0x9a, 0x7f, 0x4a, 0x8a, 0x86, 0x77, + 0xc1, 0x2b, 0x26, 0x8c, 0xd1, 0xec, 0x20, 0x83, + 0xdd, 0xd5, 0xdd, 0x56, 0x3c, 0xcc, 0x36, 0x68, + 0x60, 0xbb, 0x6e, 0x8e, 0x75, 0xb4, 0xee, 0x1d, + 0x2b, 0x1e, 0x6c, 0x71, 0x5b, 0x6b, 0x1e, 0x12, + 0xf5, 0x7c, 0x9e, 0x79, 0xc9, 0x13, 0x16, 0xf1, + 0xaf, 0xe8, 0x47, 0xa2, 0x22, 0xe4, 0xd6, 0x2e, + 0xeb, 0x2b, 0x68, 0x59, 0x13, 0xaf, 0x2e, 0x74, + 0x47, 0x1d, 0x4b, 0x01, 0xec, 0x6e, 0xae, 0x26, + 0x34, 0xbd, 0xed, 0x60, 0xfc, 0xe2, 0x07, 0x0e, + 0x85, 0xb7, 0x68, 0xee, 0x0b, 0x1b, 0x15, 0x8b, + 0x34, 0x30, 0x0c, 0x4e, 0x1d, 0xaf, 0x14, 0x05, + 0x6a, 0x57, 0x75, 0xa2, 0x1c, 0xb3, 0x64, 0x8c, + 0x74, 0xb5, 0xbd, 0xba, 0x70, 0xf8, 0xb9, 0xaf, + 0xf3, 0x8b, 0x8b, 0x97, 0x61, 0x8c, 0x98, 0xe2, + 0x1a, 0x9a, 0xdd, 0x04, 0xd7, 0xe7, 0x2e, 0x0c, + 0x45, 0x6b, 0xc5, 0xbe, 0x98, 0x96, 0xf8, 0x88, + 0xac, 0x69, 0x10, 0xf1, 0x6f, 0x7b, 0x5e, 0x77, + 0x5a, 0x67, 0x8b, 0x61, 0x21, 0x2a, 0xb5, 0xe2, + 0x4a, 0xff, 0x00, 0x4a, 0x9d, 0x79, 0xab, 0xe1, + 0xcd, 0xb2, 0xa9, 0x55, 0x98, 0xad, 0xae, 0xa6, + 0x18, 0xa2, 0x89, 0xef, 0x1b, 0xe1, 0xa5, 0x79, + 0x96, 0x39, 0xa1, 0x21, 0xb2, 0xb1, 0xcc, 0x27, + 0xe7, 0x0a, 0x28, 0xdf, 0x1c, 0xd3, 0xb2, 0xd1, + 0x1a, 0xcc, 0x4b, 0x35, 0x4a, 0xad, 0x78, 0x93, + 0x12, 0x9d, 0x65, 0x0d, 0x95, 0x4a, 0xad, 0x78, + 0x93, 0x12, 0x6b, 0x23, 0x65, 0x52, 0xab, 0x5e, + 0x24, 0xc4, 0x9a, 0xc8, 0xd9, 0x54, 0xaa, 0xd7, + 0x89, 0x31, 0x26, 0xb2, 0x36, 0x55, 0x2a, 0xb5, + 0xe2, 0x4c, 0x49, 0xac, 0x8d, 0x95, 0x4a, 0xad, + 0x78, 0x93, 0x12, 0x6b, 0x23, 0x65, 0x52, 0xab, + 0x5e, 0x24, 0xc4, 0x9a, 0xc8, 0xd9, 0x54, 0xaa, + 0x08, 0x2e, 0x1c, 0x01, 0x6c, 0x4f, 0x20, 0xe9, + 0x04, 0x34, 0xd1, 0x61, 0xd1, 0x4c, 0xc1, 0x89, + 0xf1, 0xbd, 0xa3, 0x7c, 0xb4, 0xa8, 0xdd, 0x1c, + 0xe1, 0x6d, 0x97, 0xe5, 0x2c, 0xd5, 0x2a, 0xb5, + 0xe2, 0xef, 0xa6, 0x25, 0x3a, 0xf2, 0x57, 0xe6, + 0xd9, 0x54, 0xaa, 0xd7, 0x89, 0x31, 0x26, 0xa6, + 0x8d, 0x95, 0x4a, 0xaf, 0x31, 0xb2, 0x49, 0x5d, + 0x82, 0x36, 0x97, 0xb8, 0xfe, 0x68, 0xd2, 0x56, + 0x65, 0x8a, 0x68, 0x48, 0x12, 0xb1, 0xcc, 0x27, + 0x48, 0x04, 0x76, 0x68, 0x9b, 0xa3, 0x5d, 0x35, + 0x4e, 0xd9, 0xd3, 0x5e, 0x3a, 0x33, 0x54, 0xaa, + 0xd7, 0x89, 0x31, 0x26, 0xb2, 0x8f, 0x7b, 0x65, + 0x52, 0xab, 0x0c, 0x8e, 0x59, 0x2a, 0x63, 0x63, + 0x9e, 0x06, 0xbc, 0x20, 0x9d, 0x6b, 0xcb, 0x89, + 0x6b, 0x8b, 0x5d, 0xa1, 0xc3, 0x58, 0x22, 0x94, + 0x51, 0x16, 0xd6, 0x74, 0x8f, 0x14, 0xcc, 0x4c, + 0x46, 0xb3, 0x12, 0xf7, 0x54, 0xaa, 0xd7, 0x89, + 0x31, 0x29, 0xd5, 0x1a, 0x36, 0x55, 0x2a, 0xb5, + 0xe2, 0x4c, 0x49, 0xac, 0x8d, 0x95, 0x4a, 0xad, + 0x78, 0x93, 0x12, 0x6b, 0x23, 0x65, 0x52, 0xab, + 0x5e, 0x25, 0xed, 0x8c, 0x92, 0x42, 0xe1, 0x1b, + 0x5c, 0xf2, 0xdd, 0x78, 0x41, 0x29, 0xaf, 0xbd, + 0x31, 0x59, 0x9d, 0x34, 0xe2, 0xcd, 0x52, 0xab, + 0xc3, 0x83, 0x98, 0xe2, 0xd7, 0x82, 0xd7, 0x0d, + 0x60, 0x8a, 0x15, 0x8c, 0x49, 0xaa, 0x34, 0xf8, + 0xb6, 0x55, 0x2a, 0xb5, 0xe2, 0x4c, 0x49, 0xac, + 0x8d, 0x95, 0xe1, 0xdf, 0x5d, 0x76, 0x59, 0x9d, + 0xcd, 0xa3, 0x86, 0x17, 0x17, 0xc7, 0xf9, 0xd1, + 0xb8, 0xe8, 0xee, 0x2e, 0x0c, 0x49, 0x89, 0x44, + 0xc4, 0x5b, 0x84, 0xc6, 0xab, 0x56, 0xd6, 0xa4, + 0xee, 0xac, 0xcf, 0x05, 0x9a, 0x78, 0xe0, 0xbe, + 0xb6, 0x17, 0xb6, 0xbe, 0x55, 0x2b, 0x23, 0x77, + 0xe9, 0xae, 0xbd, 0x90, 0xa3, 0xd6, 0x36, 0x72, + 0xe8, 0xc7, 0x7b, 0xcc, 0x1f, 0x22, 0x71, 0xa4, + 0x6e, 0x62, 0x68, 0x3a, 0x7b, 0xa1, 0x6e, 0xbb, + 0x8b, 0x99, 0xb9, 0x92, 0x31, 0xa8, 0x3a, 0xa3, + 0xbb, 0xa5, 0x61, 0xc9, 0x5d, 0xb6, 0xd1, 0xec, + 0xf9, 0x7c, 0xdd, 0xdc, 0x71, 0x3e, 0xd8, 0xe0, + 0xd4, 0xbb, 0x6c, 0x2d, 0x58, 0x5a, 0x6e, 0xae, + 0x34, 0x43, 0x1e, 0x91, 0xd9, 0x21, 0x71, 0x34, + 0x17, 0x38, 0x34, 0x7e, 0x71, 0xa2, 0xe8, 0xda, + 0x09, 0xfd, 0x9e, 0xde, 0x0b, 0x28, 0xcd, 0x03, + 0x86, 0x27, 0xf6, 0x40, 0xd5, 0xdf, 0x55, 0xad, + 0x77, 0x5a, 0x21, 0x7c, 0xd9, 0x23, 0x1e, 0x39, + 0xb4, 0xfb, 0x3f, 0x4b, 0x9f, 0x30, 0xce, 0xa6, + 0xb9, 0x71, 0x8e, 0x02, 0x62, 0x80, 0x68, 0xf1, + 0x75, 0xb8, 0x28, 0xdc, 0x5a, 0x7b, 0x3b, 0xfa, + 0xd6, 0xb0, 0x68, 0x28, 0x98, 0x96, 0xfa, 0xd2, + 0xb5, 0xe1, 0x10, 0xf1, 0x32, 0x64, 0xb6, 0x49, + 0xd6, 0xf3, 0xaf, 0xbb, 0xd8, 0xd9, 0x54, 0xaa, + 0xd7, 0x89, 0x31, 0x2b, 0x6b, 0x2a, 0x68, 0xd9, + 0x54, 0xaa, 0xd7, 0x89, 0x31, 0x26, 0xb2, 0x36, + 0x55, 0x2a, 0xb5, 0xe2, 0x4c, 0x49, 0xac, 0x8d, + 0x95, 0x4a, 0xad, 0x78, 0x93, 0x12, 0x6b, 0x23, + 0x65, 0x52, 0xab, 0x5e, 0x24, 0xc4, 0x9a, 0xc8, + 0xd9, 0x54, 0xaa, 0xd7, 0x89, 0x31, 0x26, 0xb2, + 0x36, 0x55, 0x2a, 0xb5, 0xe2, 0x4c, 0x49, 0xac, + 0x8d, 0x95, 0x4a, 0xad, 0x65, 0xd4, 0xd2, 0x57, + 0x63, 0x32, 0xac, 0xc5, 0xec, 0x6b, 0xdb, 0x09, + 0x2d, 0x70, 0xa8, 0x3a, 0x35, 0x15, 0x13, 0x6d, + 0x3c, 0x65, 0x6a, 0xe3, 0xb5, 0xbe, 0xd8, 0x99, + 0x73, 0xd5, 0x2a, 0xbc, 0x3b, 0x13, 0x1c, 0x5a, + 0xe1, 0x42, 0xd2, 0x41, 0x1d, 0x90, 0xb1, 0x89, + 0x4e, 0xaa, 0xe9, 0x31, 0x3a, 0x4f, 0x8b, 0x65, + 0x52, 0xab, 0x5e, 0x24, 0xc4, 0x9a, 0xc8, 0xd9, + 0x54, 0xaa, 0xd7, 0x89, 0x31, 0x26, 0xb2, 0x36, + 0x55, 0x2a, 0xb6, 0xc1, 0x97, 0xde, 0xdc, 0x45, + 0xce, 0xc3, 0x11, 0x74, 0x7a, 0xb1, 0x68, 0xdc, + 0x5c, 0xc4, 0xd0, 0xd0, 0xeb, 0x0a, 0x22, 0xf1, + 0x3c, 0x22, 0x53, 0x35, 0xb4, 0x69, 0xae, 0xbc, + 0x78, 0xc7, 0xc1, 0xb2, 0xa9, 0x55, 0xaf, 0x12, + 0x62, 0x53, 0xac, 0xa1, 0xb2, 0xa9, 0x55, 0xaf, + 0x12, 0x62, 0x4d, 0x64, 0x6c, 0xaa, 0x55, 0x6b, + 0xc4, 0x98, 0x93, 0x59, 0x1b, 0x2a, 0x95, 0x5a, + 0xf1, 0x26, 0x24, 0xd6, 0x46, 0xca, 0xa5, 0x56, + 0xbc, 0x49, 0x89, 0x35, 0x91, 0xb2, 0xa9, 0x55, + 0xaf, 0x12, 0x62, 0x4d, 0x64, 0x6c, 0xaa, 0x55, + 0x6b, 0xc4, 0x98, 0x93, 0x59, 0x1b, 0x2a, 0x95, + 0x5a, 0xf1, 0x26, 0x24, 0xd6, 0x46, 0xca, 0xa5, + 0x56, 0xbc, 0x49, 0x89, 0x35, 0x91, 0xb0, 0x90, + 0x45, 0x0a, 0xea, 0xb4, 0xcc, 0xae, 0x6c, 0xdc, + 0x0c, 0x6f, 0x25, 0xa3, 0x5c, 0x6e, 0x24, 0xb4, + 0xae, 0x1c, 0x49, 0x5a, 0xa8, 0x98, 0x89, 0x8d, + 0x26, 0x35, 0x5a, 0xb6, 0xb5, 0x66, 0x26, 0xb3, + 0x31, 0x31, 0xc9, 0x67, 0x90, 0x41, 0x99, 0x5b, + 0x7b, 0x5d, 0xbf, 0x8b, 0x2b, 0x7c, 0xb6, 0xee, + 0xe8, 0xd6, 0x14, 0x77, 0x7b, 0xb0, 0xb5, 0xe4, + 0x37, 0x66, 0x1b, 0xe6, 0xc7, 0xf9, 0xb3, 0xf8, + 0xae, 0x1b, 0x95, 0x1a, 0x42, 0xeb, 0xbf, 0x88, + 0x43, 0x72, 0xf6, 0x8d, 0x47, 0xc6, 0x1d, 0xd5, + 0x8b, 0x2d, 0x36, 0xda, 0x63, 0xe4, 0xf6, 0x3c, + 0xb6, 0x69, 0xcb, 0x8f, 0x59, 0xfb, 0xa3, 0x84, + 0xb5, 0x43, 0xfb, 0x66, 0x79, 0xcd, 0xf0, 0xa9, + 0x75, 0x13, 0x0f, 0xed, 0xa3, 0xf3, 0x9b, 0xe1, + 0x52, 0xcb, 0x9b, 0xb8, 0xa3, 0xf3, 0x2f, 0x7a, + 0xb4, 0xfb, 0x4f, 0x94, 0x29, 0x05, 0x1f, 0x99, + 0x7b, 0xd5, 0xa7, 0xda, 0x7c, 0xa1, 0x06, 0x32, + 0xcf, 0x7a, 0xbc, 0xf3, 0xcf, 0x84, 0xa9, 0x15, + 0x1d, 0x96, 0x7b, 0xd5, 0xe7, 0x9e, 0x7c, 0x25, + 0x48, 0xa0, 0xc3, 0xb5, 0x15, 0x0e, 0x75, 0x95, + 0x30, 0xed, 0x45, 0x43, 0x9d, 0x65, 0x00, 0x6b, + 0x5d, 0x39, 0xc1, 0xa6, 0x43, 0x07, 0x65, 0xed, + 0xaf, 0xd2, 0x5c, 0xdb, 0xab, 0x7e, 0x78, 0x69, + 0x90, 0xdb, 0xf9, 0xed, 0xfe, 0xf2, 0xbe, 0x3f, + 0xbe, 0xbf, 0x17, 0x2f, 0x31, 0xfc, 0x2b, 0xfc, + 0x15, 0xec, 0x49, 0x89, 0x6b, 0xaa, 0x55, 0x6d, + 0xf6, 0xcb, 0xc5, 0xd3, 0x84, 0x7c, 0x1b, 0x31, + 0x26, 0x25, 0xae, 0xa8, 0x4a, 0x72, 0x34, 0xe4, + 0xb3, 0x6c, 0xc5, 0x9c, 0x66, 0x37, 0xde, 0x38, + 0x55, 0xc4, 0xe0, 0x65, 0x77, 0x00, 0x5e, 0xdb, + 0xb4, 0x64, 0xe6, 0x5e, 0xcc, 0x63, 0x6f, 0x32, + 0x5f, 0xcd, 0x87, 0x83, 0xe3, 0x57, 0x55, 0x74, + 0xae, 0x8d, 0x9b, 0x1f, 0xe5, 0x2c, 0x77, 0xf5, + 0x9f, 0xe1, 0x55, 0x17, 0x48, 0xe6, 0xcc, 0xe7, + 0xb5, 0xd4, 0x73, 0x5e, 0x48, 0x3d, 0x9a, 0xeb, + 0x5c, 0x2b, 0x58, 0xbe, 0x4b, 0xc5, 0xbd, 0x9e, + 0x0d, 0xf7, 0xc9, 0x38, 0x71, 0xe2, 0xd9, 0xc3, + 0x77, 0xdd, 0xc3, 0x5d, 0x56, 0x3d, 0xa8, 0xb5, + 0x8c, 0x32, 0x2b, 0xa6, 0x00, 0xd7, 0xe3, 0xc0, + 0xe2, 0x37, 0x41, 0xdf, 0x50, 0x96, 0xb6, 0x57, + 0x77, 0x7a, 0x6d, 0xe2, 0x73, 0xdb, 0xab, 0x16, + 0xa0, 0x0f, 0x64, 0x95, 0xae, 0x5b, 0xfb, 0xcb, + 0x96, 0x88, 0xe6, 0x99, 0xf2, 0x36, 0xa0, 0xe1, + 0x71, 0xef, 0xab, 0x55, 0xdc, 0x9d, 0x53, 0x92, + 0x8e, 0x60, 0x06, 0xbd, 0x8d, 0x6b, 0x5b, 0xa3, + 0xf3, 0x9d, 0x4a, 0x9e, 0xda, 0x9d, 0xd6, 0xc7, + 0x48, 0xaf, 0x0b, 0x4e, 0xbc, 0x14, 0x8a, 0x53, + 0x3e, 0x4b, 0xe4, 0xe3, 0x5a, 0xd2, 0x35, 0xb4, + 0x73, 0x56, 0xee, 0x32, 0xeb, 0xeb, 0x56, 0xe3, + 0x9e, 0x17, 0x35, 0x9b, 0xaf, 0x14, 0x20, 0x76, + 0xe8, 0xb5, 0xc1, 0x6f, 0x73, 0x70, 0x48, 0xb7, + 0x89, 0xd2, 0xe1, 0xa6, 0x2c, 0x3b, 0x95, 0xaa, + 0xb3, 0x64, 0x37, 0xb2, 0x66, 0x56, 0x52, 0x36, + 0xea, 0x8f, 0x73, 0x4e, 0x07, 0x1a, 0x01, 0x5a, + 0x8a, 0xfc, 0xab, 0x97, 0x66, 0xe3, 0x11, 0x5e, + 0x5f, 0xc4, 0x35, 0x31, 0xc1, 0xa3, 0xb4, 0x0b, + 0xa8, 0x9d, 0xeb, 0x44, 0x5e, 0x26, 0x3e, 0xa8, + 0x44, 0x79, 0x6c, 0x76, 0x9c, 0x76, 0xad, 0xa6, + 0x2b, 0x93, 0xd8, 0x87, 0x8b, 0x2d, 0xcc, 0x26, + 0x73, 0x99, 0x1c, 0x0e, 0xab, 0x0d, 0x1d, 0x5d, + 0x1a, 0x7b, 0xab, 0xc4, 0xb6, 0x97, 0x50, 0xcc, + 0xd8, 0x24, 0x89, 0xcd, 0x91, 0xe6, 0x8c, 0x6e, + 0xfd, 0x74, 0x68, 0x53, 0x97, 0x59, 0xcd, 0xc4, + 0x39, 0xc8, 0xb4, 0x8d, 0xad, 0x10, 0xf3, 0x8d, + 0x6b, 0xc5, 0x34, 0x9c, 0x44, 0x54, 0xd7, 0xb1, + 0x55, 0xb7, 0x69, 0xdd, 0xcd, 0x43, 0x6d, 0x70, + 0xca, 0x73, 0x91, 0x4a, 0x0b, 0x49, 0xec, 0x69, + 0x48, 0xcb, 0x7d, 0x6b, 0xad, 0x63, 0xea, 0x8e, + 0x05, 0xbc, 0xb6, 0x2d, 0x97, 0x98, 0xb4, 0xeb, + 0x8a, 0x74, 0xb3, 0xa2, 0xc6, 0xd9, 0xcd, 0xc9, + 0xd9, 0x1c, 0x91, 0x52, 0x71, 0x19, 0x05, 0xa4, + 0x0a, 0xd7, 0x4a, 0xac, 0x7b, 0x05, 0xf9, 0x7b, + 0xa2, 0xe6, 0x1e, 0x64, 0x68, 0xc4, 0x5b, 0x4d, + 0x34, 0x3a, 0xb5, 0x2b, 0x55, 0x8d, 0xd4, 0x93, + 0xe5, 0x2c, 0xbc, 0x92, 0x9c, 0xf1, 0x8d, 0xce, + 0xa8, 0x1a, 0x2a, 0x2b, 0xb8, 0xa3, 0x76, 0x76, + 0xfa, 0x6b, 0xdb, 0xf9, 0xe5, 0x9e, 0x85, 0xfc, + 0xd3, 0x46, 0x81, 0x4d, 0x00, 0x95, 0x4a, 0x5e, + 0xf5, 0xdf, 0x6d, 0x23, 0x83, 0xb6, 0x6c, 0x58, + 0xaf, 0xd9, 0xa6, 0xb3, 0x1a, 0xc7, 0x0f, 0x92, + 0x22, 0x3c, 0xba, 0xfe, 0x59, 0x1f, 0x1b, 0x21, + 0x76, 0x26, 0x79, 0x55, 0x14, 0x03, 0xba, 0x56, + 0xb8, 0x6d, 0xee, 0x27, 0x90, 0xc5, 0x0c, 0x6e, + 0x92, 0x46, 0xeb, 0x6b, 0x77, 0x15, 0x8b, 0x36, + 0xcf, 0x99, 0x97, 0xdc, 0x1b, 0x68, 0xa1, 0x0f, + 0x79, 0x01, 0xd2, 0x3a, 0xb4, 0x1a, 0x7b, 0x1d, + 0xa5, 0xef, 0x25, 0x64, 0x76, 0xd9, 0x41, 0xbc, + 0x2d, 0x01, 0xf2, 0x87, 0x4a, 0xfe, 0xfe, 0x11, + 0xda, 0x57, 0xef, 0x5e, 0x2b, 0xac, 0xd6, 0x38, + 0xf8, 0x39, 0x7a, 0x5c, 0x7b, 0xe2, 0x91, 0x79, + 0x9d, 0x91, 0x33, 0x79, 0xff, 0x00, 0x24, 0x14, + 0xb9, 0x46, 0x65, 0x13, 0x0b, 0x9d, 0x03, 0x88, + 0x1a, 0x7c, 0x5a, 0x15, 0xb3, 0x20, 0x20, 0xe6, + 0xb0, 0x03, 0xfd, 0x7d, 0x1d, 0xa6, 0xbb, 0x5a, + 0x91, 0xc8, 0x33, 0x9b, 0xab, 0xdb, 0x89, 0x62, + 0xb8, 0x70, 0x71, 0xc2, 0x5e, 0xca, 0x0a, 0x53, + 0x4d, 0x29, 0xdf, 0x5e, 0x04, 0x0d, 0xb7, 0xda, + 0xb6, 0x35, 0x83, 0x0b, 0x1e, 0x0b, 0xe8, 0x37, + 0xdc, 0xc7, 0x55, 0x44, 0xe4, 0xb4, 0xc5, 0xab, + 0x78, 0xd2, 0x74, 0xd4, 0x8c, 0x14, 0x89, 0xc7, + 0x93, 0x1c, 0xeb, 0x1d, 0xc8, 0xac, 0xfc, 0x1e, + 0x36, 0xa9, 0xdf, 0xae, 0xb7, 0xf3, 0x5d, 0xe1, + 0x50, 0x78, 0x94, 0xd6, 0xd6, 0x1a, 0x4d, 0x6c, + 0x3f, 0xaa, 0xef, 0x0a, 0x81, 0xaa, 0xe9, 0x86, + 0x7e, 0x88, 0xf8, 0x4b, 0x97, 0x9a, 0xfe, 0x35, + 0xfe, 0x2b, 0xae, 0x56, 0xee, 0x6f, 0x25, 0x86, + 0x53, 0xa4, 0xb6, 0x2c, 0x54, 0xed, 0x54, 0xae, + 0x7c, 0xb3, 0x3f, 0x65, 0xfc, 0xe2, 0xdd, 0xf1, + 0x73, 0x6e, 0x78, 0x25, 0xb4, 0x38, 0x81, 0xa6, + 0x92, 0x35, 0x2d, 0xf9, 0x5b, 0x0c, 0x99, 0x1c, + 0x0c, 0x1a, 0xdf, 0x16, 0x11, 0x5e, 0xcd, 0x57, + 0x26, 0x4f, 0x90, 0x3e, 0xc6, 0xe4, 0x5c, 0xcd, + 0x28, 0x79, 0x63, 0x48, 0x0d, 0x68, 0x34, 0xd3, + 0xba, 0x49, 0x59, 0xbe, 0x9d, 0x2f, 0x33, 0xae, + 0xef, 0x63, 0x74, 0xf7, 0x35, 0xc3, 0x14, 0xd2, + 0x2b, 0x68, 0xfa, 0xf8, 0x23, 0xf6, 0x8a, 0xcd, + 0x96, 0xd7, 0x8c, 0x7c, 0x4d, 0xc2, 0xd9, 0xc5, + 0x70, 0x8d, 0x58, 0x86, 0xf7, 0x6d, 0x73, 0xc7, + 0x93, 0xe6, 0x92, 0x33, 0x1b, 0x60, 0x75, 0x0e, + 0xaa, 0x90, 0x0a, 0x9c, 0x32, 0xdb, 0xdf, 0x67, + 0xad, 0x63, 0x48, 0x91, 0x96, 0x71, 0x97, 0x13, + 0xac, 0x63, 0x26, 0x8b, 0x5e, 0x6d, 0x99, 0x66, + 0x90, 0x66, 0x2d, 0x86, 0xd6, 0x37, 0x18, 0x59, + 0x80, 0xba, 0x8d, 0xa8, 0x76, 0x23, 0xa7, 0x4d, + 0x37, 0x02, 0xeb, 0x19, 0x2d, 0x11, 0x5a, 0xc6, + 0x9f, 0x6f, 0xb5, 0xc2, 0xfe, 0x5f, 0x1c, 0xda, + 0xf9, 0x2d, 0x33, 0xb6, 0x6d, 0xa4, 0x6d, 0xe6, + 0xae, 0xcd, 0x14, 0xd0, 0x48, 0x63, 0x99, 0x86, + 0x37, 0x8d, 0x6d, 0x76, 0x85, 0xb1, 0xf6, 0x37, + 0xac, 0x60, 0x7b, 0xa0, 0x78, 0x63, 0x88, 0x01, + 0xd8, 0x4d, 0x09, 0x71, 0xa3, 0x78, 0x54, 0xee, + 0xd4, 0x42, 0xd7, 0xd9, 0xc7, 0x73, 0x4f, 0x1d, + 0x8e, 0x00, 0x9e, 0xc3, 0xb7, 0x14, 0x94, 0xf7, + 0x11, 0x5b, 0x65, 0xc2, 0xe2, 0x56, 0xe3, 0x6c, + 0x6c, 0x61, 0xc3, 0xd9, 0xd1, 0x4e, 0xfa, 0x99, + 0xcd, 0x3b, 0x6b, 0xa7, 0x8c, 0xf8, 0xab, 0x1e, + 0x4e, 0xbb, 0xb2, 0x6b, 0x79, 0x88, 0xac, 0x44, + 0xc2, 0xb3, 0x6b, 0x0d, 0xf6, 0x5f, 0x79, 0x04, + 0xaf, 0xb7, 0x2e, 0x7b, 0xcb, 0xb0, 0x45, 0x5d, + 0x27, 0x47, 0x75, 0x6c, 0xce, 0xee, 0xee, 0xee, + 0x9d, 0x00, 0x9e, 0xd5, 0xd6, 0xce, 0x01, 0xc1, + 0xa0, 0xd4, 0xe2, 0x24, 0x8e, 0xc2, 0xdf, 0x69, + 0x9b, 0xbf, 0x32, 0xce, 0x2d, 0x0b, 0xa3, 0x11, + 0xf3, 0x65, 0xfa, 0x8d, 0x75, 0x85, 0xb3, 0x6a, + 0x8d, 0x2e, 0x2c, 0xf4, 0x6e, 0x93, 0xa7, 0xb6, + 0xd4, 0xd6, 0x7b, 0x91, 0xad, 0x63, 0x76, 0x9a, + 0xcf, 0x14, 0xcd, 0x2b, 0x18, 0x72, 0x6c, 0xbc, + 0xec, 0x9b, 0xf1, 0xe1, 0x08, 0x97, 0xe5, 0xf7, + 0xec, 0x2d, 0x0e, 0x81, 0xe3, 0x19, 0xc2, 0xda, + 0x83, 0xa4, 0xf6, 0x38, 0x16, 0x67, 0xcb, 0x6f, + 0xed, 0xe3, 0xe7, 0x66, 0x84, 0xb5, 0x9b, 0xa7, + 0x41, 0xa7, 0x6e, 0x8a, 0xd3, 0x9b, 0xde, 0xba, + 0xca, 0xc1, 0xf7, 0x0c, 0x00, 0xbd, 0xa4, 0x06, + 0x57, 0x7d, 0xda, 0x16, 0xac, 0x96, 0xf5, 0xf9, + 0x9d, 0x8b, 0xcd, 0xcb, 0x5a, 0x5c, 0xd7, 0x18, + 0x9e, 0x00, 0xd0, 0x45, 0x06, 0xe2, 0x8e, 0xfd, + 0xf4, 0xdd, 0xa4, 0x69, 0xaa, 0xde, 0x8f, 0x16, + 0xee, 0xde, 0xe9, 0xdd, 0xa6, 0xe4, 0x7e, 0xca, + 0x1a, 0xba, 0xe7, 0x7a, 0x8c, 0xfe, 0xf2, 0xe7, + 0xcc, 0xac, 0x6f, 0x2e, 0xb3, 0x4b, 0x83, 0x6f, + 0x13, 0x9e, 0xd0, 0x45, 0x5d, 0xa8, 0x6a, 0xec, + 0xae, 0xbd, 0x99, 0x67, 0x35, 0x73, 0x7d, 0x1f, + 0xcc, 0x70, 0x68, 0xed, 0x02, 0xfa, 0x2f, 0x57, + 0x59, 0xe5, 0xc4, 0x19, 0xc3, 0x6c, 0xe3, 0x0d, + 0xe6, 0x03, 0xda, 0xd7, 0xe8, 0xd2, 0x4b, 0xb5, + 0xe9, 0x51, 0xba, 0x63, 0x25, 0xad, 0x58, 0xf6, + 0x11, 0x4a, 0x4f, 0x97, 0xc7, 0x19, 0x2d, 0xa6, + 0xb7, 0x98, 0xd6, 0x23, 0xc6, 0x63, 0x5d, 0x10, + 0x37, 0x16, 0xd7, 0x16, 0xcf, 0xe6, 0xe7, 0x61, + 0x8d, 0xda, 0xc0, 0x3b, 0xa3, 0xb0, 0xbd, 0x5b, + 0x59, 0x5e, 0x5d, 0xd7, 0xd9, 0xe2, 0x73, 0xc0, + 0xd0, 0x5d, 0xa9, 0xa0, 0xf6, 0xca, 0x9d, 0xda, + 0xb8, 0xeb, 0x6f, 0x03, 0x9b, 0xe5, 0x99, 0x30, + 0x03, 0xe7, 0x03, 0xc4, 0xba, 0xaf, 0x0c, 0xb9, + 0x76, 0x52, 0x19, 0x63, 0x1f, 0xeb, 0x1a, 0x03, + 0x5a, 0xd0, 0x31, 0x69, 0x3a, 0xca, 0xb7, 0x7a, + 0xdb, 0x6b, 0x31, 0x11, 0xc7, 0x57, 0x39, 0xf2, + 0x95, 0x8b, 0xde, 0x6d, 0x69, 0x8c, 0x74, 0x88, + 0x9e, 0x1c, 0x67, 0x8a, 0xb5, 0x73, 0x97, 0xde, + 0xda, 0x37, 0x14, 0xf1, 0x39, 0xad, 0xd5, 0x88, + 0x50, 0x8d, 0x3a, 0xb4, 0xaf, 0x10, 0xda, 0x5d, + 0xdc, 0x02, 0x60, 0x89, 0xd2, 0x86, 0x9a, 0x12, + 0xdd, 0x20, 0x1e, 0xca, 0xb4, 0x65, 0x72, 0x5c, + 0x66, 0x19, 0x6b, 0x99, 0x7c, 0xcf, 0x1c, 0x97, + 0x46, 0xe0, 0xe6, 0xe1, 0xa8, 0xa6, 0x83, 0x45, + 0xcb, 0xb2, 0xec, 0xc3, 0x6f, 0x72, 0xcd, 0xd6, + 0xcd, 0x87, 0x80, 0x51, 0x3b, 0xd3, 0xa4, 0xeb, + 0xa6, 0xb0, 0x98, 0xf2, 0x95, 0x9c, 0x98, 0xf4, + 0x99, 0xed, 0xe4, 0x8b, 0x78, 0xf8, 0xf0, 0x41, + 0xb2, 0xc2, 0xf5, 0xf1, 0xbe, 0x56, 0xc4, 0xec, + 0x11, 0xd7, 0x13, 0x8e, 0x8d, 0x5a, 0xf5, 0xac, + 0x5a, 0xd9, 0xdd, 0xdd, 0xd7, 0xd9, 0xe3, 0x32, + 0x53, 0x5b, 0x86, 0xae, 0x12, 0xa5, 0x73, 0x6c, + 0xfd, 0x8c, 0x7c, 0xf6, 0x30, 0xc2, 0x28, 0xdc, + 0x51, 0xb9, 0xd5, 0xdd, 0x23, 0x70, 0x24, 0x39, + 0xed, 0xad, 0xb6, 0x56, 0xcb, 0x6b, 0x3a, 0xfb, + 0x4b, 0x58, 0x03, 0x46, 0x02, 0x7c, 0x6d, 0xd2, + 0x53, 0xb9, 0x93, 0x4d, 0x74, 0x56, 0x3c, 0xbe, + 0x19, 0xb4, 0x57, 0xb9, 0x33, 0xb6, 0x38, 0xf0, + 0xe3, 0x32, 0x8e, 0x9f, 0x2c, 0xcc, 0x2d, 0xdb, + 0x8a, 0x58, 0x5c, 0x1a, 0x35, 0x91, 0x43, 0x4e, + 0x05, 0xdf, 0xb2, 0xa7, 0x15, 0xf4, 0xbb, 0xdc, + 0xd5, 0x7e, 0x93, 0x54, 0xae, 0x4b, 0x2d, 0xed, + 0xcd, 0x9b, 0x9d, 0x7e, 0xd3, 0x8c, 0xb8, 0xb4, + 0x62, 0x01, 0xa4, 0xb2, 0x9b, 0xa0, 0x76, 0x54, + 0x66, 0xcd, 0x00, 0xdc, 0xda, 0xe9, 0xad, 0xd0, + 0xd6, 0xb5, 0xc0, 0x72, 0xc2, 0xad, 0xb2, 0x4d, + 0xa9, 0x78, 0x9f, 0x67, 0x27, 0x4c, 0x78, 0x6b, + 0x5b, 0xe1, 0xbd, 0x35, 0xd2, 0xf3, 0x6f, 0xbb, + 0xc7, 0x48, 0x73, 0xed, 0x19, 0x23, 0x34, 0x70, + 0x15, 0x27, 0x0b, 0x28, 0x3b, 0x61, 0x68, 0x8f, + 0x28, 0xcc, 0xe4, 0x68, 0x73, 0x60, 0x70, 0x07, + 0xe7, 0x50, 0x1e, 0x05, 0x2b, 0x3b, 0x63, 0x76, + 0xd5, 0x46, 0xd9, 0x28, 0x46, 0x00, 0xe6, 0x83, + 0xab, 0x10, 0x69, 0x5b, 0xb3, 0xbb, 0xbc, 0xd2, + 0xd6, 0x58, 0x9f, 0x6a, 0xd2, 0x60, 0x02, 0xb2, + 0x90, 0xdc, 0x47, 0x5e, 0xa2, 0x14, 0xd7, 0x25, + 0xb4, 0xa5, 0x2b, 0x11, 0x33, 0x31, 0xf7, 0x58, + 0xb6, 0x0a, 0x4d, 0xaf, 0x92, 0xf3, 0x3c, 0x2f, + 0xa4, 0x45, 0x79, 0x2b, 0x73, 0xc3, 0x3d, 0xbb, + 0xf9, 0xb9, 0xd8, 0x63, 0x7e, 0xe0, 0x76, 0xe8, + 0xec, 0x2d, 0x78, 0x94, 0xb6, 0x77, 0x9b, 0xd8, + 0xdf, 0xdb, 0x32, 0x38, 0xc3, 0x84, 0xcc, 0x20, + 0xd4, 0xb6, 0x94, 0xdf, 0x0a, 0x16, 0xab, 0xae, + 0x3b, 0x4d, 0xab, 0xac, 0xf0, 0x65, 0xcb, 0x8e, + 0xb5, 0xbc, 0xc5, 0x2d, 0xba, 0x3d, 0xed, 0x98, + 0x93, 0x12, 0xd7, 0x54, 0xaa, 0xbb, 0x9e, 0x90, + 0xd9, 0x5a, 0xab, 0x39, 0xd3, 0x90, 0xda, 0x93, + 0xac, 0x06, 0xaa, 0xa6, 0x25, 0x6b, 0x6f, 0xfa, + 0x7a, 0xd7, 0xb4, 0xd5, 0x9f, 0xcc, 0x7d, 0xb1, + 0xf1, 0x6d, 0xf2, 0x1f, 0xc4, 0xb7, 0xc2, 0x5c, + 0x48, 0x88, 0xb3, 0x3d, 0x26, 0xeb, 0x31, 0x5b, + 0xb8, 0x87, 0xf5, 0x82, 0xe2, 0xda, 0x37, 0x1e, + 0xb4, 0x7e, 0xf0, 0x6b, 0x40, 0xe0, 0x2b, 0xb6, + 0xcb, 0xde, 0xe1, 0xf3, 0x82, 0xe0, 0xda, 0x53, + 0xfe, 0x6a, 0xf1, 0xfd, 0x56, 0x78, 0x0a, 0xed, + 0xe5, 0xfe, 0xf6, 0x4f, 0x3f, 0xfc, 0x28, 0xfd, + 0xa4, 0x76, 0x24, 0xc4, 0xb5, 0xd5, 0x2a, 0xb5, + 0x3c, 0xc9, 0x86, 0xcc, 0x4b, 0xab, 0x2a, 0xb6, + 0x17, 0x97, 0xd1, 0x40, 0xe1, 0xe2, 0x12, 0x5c, + 0xfe, 0xd3, 0x74, 0xae, 0x1a, 0xa9, 0x7d, 0x97, + 0xd3, 0x99, 0x9e, 0xc4, 0x6e, 0x2a, 0xb9, 0x26, + 0x62, 0x93, 0x2b, 0xe1, 0xae, 0xb9, 0x69, 0x13, + 0xed, 0x9d, 0x13, 0x19, 0xc6, 0x6b, 0xd5, 0x8c, + 0x8a, 0x28, 0x63, 0x6b, 0x9c, 0xfd, 0x41, 0xd5, + 0xa0, 0x68, 0xd1, 0xb9, 0x45, 0xb5, 0xa6, 0x1c, + 0xdf, 0x2b, 0xc4, 0xe6, 0x01, 0xce, 0x34, 0xd0, + 0x6b, 0xa3, 0xc6, 0x8f, 0x0a, 0x86, 0xda, 0xb7, + 0x11, 0x7d, 0x10, 0xdc, 0xe6, 0xf5, 0x76, 0xc9, + 0x51, 0x71, 0x66, 0x37, 0xd0, 0xc7, 0xcd, 0xc3, + 0x3b, 0xd8, 0xc1, 0x5a, 0x30, 0x1d, 0x02, 0xa6, + 0xbb, 0xcb, 0x8c, 0x62, 0xd6, 0x95, 0x98, 0x9d, + 0x2d, 0x32, 0xd7, 0x93, 0xcc, 0x6d, 0xcb, 0x7a, + 0x5a, 0xbb, 0xa9, 0x11, 0xc2, 0x34, 0x61, 0x91, + 0xcb, 0x23, 0xc4, 0x71, 0xb4, 0xc8, 0xf2, 0x68, + 0x1a, 0xd1, 0x52, 0x48, 0xd6, 0xbb, 0x0e, 0x4b, + 0x9a, 0x06, 0xe2, 0xe6, 0x0e, 0xfd, 0x2a, 0x2a, + 0xa4, 0xf6, 0x52, 0x06, 0x18, 0x66, 0xbb, 0x70, + 0xab, 0xcb, 0xb0, 0x35, 0xc7, 0x4d, 0x00, 0x15, + 0x34, 0xed, 0xd5, 0x62, 0xcf, 0x3d, 0xba, 0x9b, + 0x39, 0xf6, 0x77, 0x11, 0xec, 0xef, 0x7b, 0xa3, + 0x63, 0x68, 0x34, 0x52, 0xb4, 0x35, 0xee, 0x2b, + 0x5b, 0x2d, 0xf5, 0x98, 0x88, 0x8f, 0xa7, 0xc5, + 0xca, 0xbe, 0x5b, 0x1c, 0x56, 0xb3, 0x92, 0xd3, + 0x13, 0x96, 0x63, 0x6c, 0x47, 0xb3, 0x54, 0x10, + 0x8e, 0x43, 0x28, 0x8b, 0x09, 0x12, 0x12, 0x1b, + 0x82, 0x9a, 0x6a, 0x7b, 0x0b, 0x69, 0xb0, 0xbf, + 0x6b, 0x9a, 0xc7, 0x40, 0xf0, 0xf9, 0x0d, 0x18, + 0x08, 0xd6, 0x69, 0x55, 0x2f, 0x9e, 0x42, 0xd8, + 0xf3, 0x6b, 0x19, 0xd8, 0x05, 0x64, 0x7b, 0x43, + 0xfb, 0x24, 0x39, 0xaa, 0x43, 0x3e, 0xbf, 0x92, + 0xc2, 0xd9, 0x92, 0x42, 0x01, 0x95, 0xef, 0xc2, + 0xc2, 0xe1, 0x5a, 0x6f, 0x94, 0xef, 0x5b, 0x5a, + 0xc4, 0x47, 0x8a, 0x63, 0xca, 0xd3, 0xfd, 0xdd, + 0xd6, 0x98, 0xed, 0x5f, 0xf7, 0x65, 0x5a, 0xb8, + 0xcb, 0x6f, 0xad, 0xa3, 0xe7, 0x66, 0x89, 0xcd, + 0x66, 0xeb, 0x85, 0x0d, 0x3b, 0x6b, 0xd4, 0x79, + 0x4e, 0x65, 0x24, 0x7c, 0xeb, 0x60, 0x76, 0x1a, + 0x54, 0x56, 0x80, 0x91, 0xd8, 0x0a, 0xcf, 0x61, + 0x76, 0x6e, 0xf2, 0xa6, 0x5d, 0x4c, 0xd0, 0xe2, + 0xe6, 0x97, 0x3d, 0xb4, 0xd0, 0x4b, 0x6a, 0x35, + 0x77, 0x17, 0x1e, 0x45, 0x9c, 0x4f, 0x7f, 0x71, + 0x34, 0x72, 0x86, 0x86, 0x31, 0xb8, 0x98, 0x00, + 0xa1, 0x1a, 0x69, 0x45, 0x1d, 0xdc, 0x9a, 0x4f, + 0xd3, 0x1a, 0xd2, 0x74, 0x95, 0xbd, 0x2e, 0x1d, + 0xd5, 0x88, 0xb4, 0xff, 0x00, 0xb9, 0x1f, 0x4a, + 0xb6, 0xc8, 0xa6, 0x92, 0x5e, 0x65, 0x8c, 0x73, + 0xa5, 0xd2, 0x0b, 0x37, 0x41, 0x1b, 0x8b, 0x70, + 0xcb, 0xb3, 0x03, 0x28, 0x87, 0x98, 0x78, 0x91, + 0xc3, 0x10, 0x04, 0x68, 0xa7, 0x64, 0xa9, 0x67, + 0x35, 0xac, 0xda, 0xc6, 0xe1, 0x14, 0xc4, 0x2a, + 0x7b, 0x65, 0xab, 0xa7, 0x3f, 0xcd, 0xa6, 0xcb, + 0xdd, 0x0b, 0x60, 0x0d, 0xc7, 0x28, 0x71, 0x2e, + 0x22, 0xba, 0x1a, 0xad, 0x39, 0x6d, 0x33, 0x11, + 0x15, 0x8e, 0x31, 0xaa, 0xb1, 0xe5, 0xb1, 0xc5, + 0x6d, 0x6b, 0x5a, 0x7e, 0x8b, 0x6d, 0x95, 0x7e, + 0xe6, 0xc2, 0xf6, 0xd7, 0x0f, 0x3f, 0x13, 0x9a, + 0x1c, 0x68, 0xd3, 0xac, 0x13, 0xbd, 0xa1, 0x6c, + 0x76, 0x53, 0x99, 0xb6, 0x2e, 0x74, 0xdb, 0xbb, + 0x0d, 0x2a, 0x46, 0x8a, 0xf0, 0x2b, 0x44, 0xf7, + 0x61, 0xb9, 0x57, 0xb7, 0x39, 0x81, 0xce, 0x6c, + 0x6d, 0x94, 0x37, 0x73, 0x11, 0x03, 0x8d, 0x73, + 0xe4, 0x19, 0xa4, 0xf9, 0x8c, 0x33, 0x1b, 0x80, + 0x31, 0x46, 0xe0, 0x2a, 0xd1, 0x4a, 0x82, 0x15, + 0x63, 0x35, 0xf6, 0xeb, 0xa4, 0x70, 0x9d, 0x25, + 0x7f, 0x49, 0x87, 0x7c, 0x57, 0x74, 0xeb, 0x78, + 0xd6, 0xb0, 0xaa, 0x30, 0x3e, 0x47, 0x06, 0xc6, + 0xd2, 0xf7, 0x3b, 0x53, 0x5b, 0xa4, 0x9e, 0xe2, + 0xed, 0x19, 0x36, 0x68, 0x5b, 0x8b, 0x98, 0x34, + 0xd6, 0x74, 0x8a, 0xa9, 0x4c, 0x96, 0x28, 0x46, + 0x73, 0x98, 0x68, 0x18, 0xa3, 0x27, 0x00, 0xde, + 0x15, 0x20, 0xd1, 0x66, 0xfb, 0x32, 0xcd, 0x2c, + 0xb3, 0x2c, 0x52, 0x30, 0xfb, 0x05, 0x40, 0xab, + 0x5b, 0x51, 0x86, 0x9c, 0x35, 0x53, 0x39, 0x6f, + 0x33, 0xa4, 0x44, 0x47, 0x0d, 0x7e, 0x2a, 0x57, + 0xcb, 0x53, 0x6e, 0xeb, 0xcc, 0xf8, 0xcd, 0x7e, + 0x9f, 0x66, 0x9c, 0x15, 0xd7, 0xb6, 0x48, 0xde, + 0x59, 0x23, 0x4b, 0x1e, 0xd3, 0x47, 0x34, 0xeb, + 0x05, 0x63, 0x12, 0xee, 0xce, 0xf3, 0x1b, 0x4b, + 0xd9, 0xa2, 0x96, 0xda, 0xa1, 0xc0, 0x10, 0xf2, + 0x45, 0x09, 0x1b, 0x8a, 0x36, 0xab, 0xad, 0x66, + 0x66, 0x22, 0x67, 0x83, 0x36, 0x4a, 0x45, 0x6d, + 0x31, 0x59, 0xd6, 0x23, 0xc2, 0x65, 0x79, 0x8a, + 0x6e, 0x63, 0x27, 0x8e, 0x7a, 0x62, 0x31, 0xc0, + 0xd7, 0x53, 0x55, 0x68, 0xd0, 0xb9, 0x72, 0xcc, + 0xed, 0x99, 0x8c, 0xae, 0xb7, 0x7c, 0x5c, 0xdc, + 0x98, 0x4b, 0x80, 0xad, 0x41, 0x6f, 0x07, 0x65, + 0x74, 0x47, 0x11, 0x9f, 0x26, 0x8e, 0x16, 0x90, + 0x1d, 0x2d, 0xbb, 0x5a, 0x1c, 0x75, 0x69, 0x68, + 0x5c, 0x99, 0x46, 0x46, 0xec, 0xbe, 0x57, 0x5c, + 0x4f, 0x20, 0x7b, 0xb0, 0xe1, 0x68, 0x68, 0xd0, + 0x07, 0x64, 0x95, 0x93, 0xe8, 0xdb, 0x7d, 0x66, + 0x77, 0x6b, 0xc1, 0xea, 0x4f, 0x73, 0x76, 0x2d, + 0x9a, 0x76, 0xf6, 0xfd, 0x7a, 0xa2, 0x33, 0xcb, + 0x36, 0xda, 0xdf, 0xe1, 0x88, 0x78, 0x93, 0x00, + 0xe6, 0xb4, 0x6b, 0xc4, 0x75, 0xd1, 0x78, 0x6e, + 0x4d, 0x9a, 0x39, 0xb8, 0xc4, 0x04, 0x0d, 0xe2, + 0x40, 0x3c, 0x0a, 0x6e, 0xde, 0x48, 0x33, 0x0c, + 0xf2, 0x49, 0x59, 0x47, 0xc7, 0x67, 0x18, 0x6b, + 0x1d, 0xac, 0x17, 0x38, 0xf8, 0xc4, 0x76, 0xa8, + 0xb5, 0xde, 0xe6, 0x79, 0xa4, 0x79, 0xbb, 0x61, + 0x8a, 0x37, 0x1b, 0x56, 0x96, 0xb5, 0xde, 0x25, + 0x41, 0xc5, 0xaf, 0x4f, 0x61, 0x75, 0xae, 0x5b, + 0x44, 0x44, 0x56, 0x35, 0xd2, 0x35, 0xb6, 0xae, + 0x16, 0xf2, 0xf8, 0xa6, 0x66, 0xf3, 0x33, 0xa5, + 0xa7, 0x48, 0xdb, 0xe0, 0xae, 0x48, 0xc9, 0x62, + 0x79, 0x8e, 0x46, 0x39, 0xaf, 0x1a, 0x0b, 0x0e, + 0xba, 0xad, 0xcf, 0xb0, 0xbf, 0x8f, 0x0f, 0x39, + 0x03, 0xd9, 0x88, 0xe1, 0x69, 0x23, 0x59, 0x3a, + 0x80, 0x53, 0x5b, 0x53, 0x03, 0x30, 0xdb, 0xdc, + 0xb4, 0x51, 0xd8, 0xf9, 0xb7, 0x1e, 0xc1, 0xd4, + 0xa5, 0x33, 0x1b, 0xc8, 0xac, 0xed, 0x0d, 0xcc, + 0x8d, 0xc6, 0x18, 0x41, 0x6b, 0x7f, 0xad, 0xa9, + 0x27, 0x35, 0xa6, 0x2b, 0xc2, 0x38, 0xca, 0x91, + 0xe4, 0xe9, 0x16, 0xc9, 0x5b, 0x5e, 0x7e, 0x98, + 0x89, 0xf9, 0xab, 0x96, 0x11, 0xdf, 0xe5, 0xf7, + 0xb1, 0xbd, 0xd6, 0xc6, 0x49, 0x1e, 0xc2, 0x5b, + 0x15, 0x40, 0x34, 0xdd, 0xdf, 0xd4, 0xb1, 0x9c, + 0x5c, 0x5d, 0x5d, 0x5d, 0x45, 0xce, 0xdb, 0x3a, + 0xdd, 0xe4, 0x61, 0x64, 0x64, 0xd4, 0xbb, 0x4e, + 0xe6, 0xa5, 0xd5, 0x96, 0xe6, 0xaf, 0xcc, 0xb3, + 0x98, 0x1e, 0xe8, 0xc3, 0x30, 0x46, 0xf0, 0x00, + 0x35, 0xd7, 0xbe, 0xbd, 0xe7, 0xe4, 0x75, 0xd5, + 0x87, 0x6d, 0xbf, 0xf5, 0x02, 0x4d, 0xa7, 0xb9, + 0x1a, 0xd6, 0x35, 0xd3, 0x99, 0x6a, 0x47, 0x62, + 0x76, 0xde, 0x76, 0x45, 0xa3, 0xd9, 0x08, 0x93, + 0x97, 0x66, 0x0d, 0x73, 0x58, 0xeb, 0x79, 0x01, + 0x79, 0xa3, 0x74, 0x6b, 0xa0, 0x4b, 0x9c, 0xba, + 0xfa, 0xd5, 0x82, 0x49, 0xa2, 0x2d, 0x61, 0xfc, + 0xed, 0x60, 0x70, 0x2b, 0x36, 0x77, 0x7e, 0xfb, + 0x0b, 0x4e, 0x7a, 0x30, 0x0c, 0xae, 0x76, 0x06, + 0x12, 0x2b, 0x4a, 0x84, 0xcb, 0x6e, 0x4e, 0x69, + 0x95, 0x97, 0xce, 0xd0, 0x4b, 0xc3, 0xa3, 0x78, + 0x03, 0x41, 0xa6, 0xea, 0x46, 0x6b, 0xf0, 0x99, + 0x88, 0xd3, 0x5d, 0x16, 0x9f, 0x29, 0x8a, 0x2d, + 0x6c, 0x71, 0x79, 0xdd, 0x11, 0x36, 0xac, 0x38, + 0xf6, 0x56, 0x86, 0x0b, 0x8e, 0xc3, 0xdb, 0xe0, + 0x51, 0xf7, 0x59, 0x75, 0xf5, 0xd5, 0xfd, 0xcb, + 0xe0, 0x84, 0xb9, 0xb8, 0xcf, 0x8c, 0x74, 0x03, + 0x4d, 0xe5, 0x21, 0xb2, 0x6d, 0xa4, 0x37, 0x4c, + 0x3f, 0x9b, 0x20, 0x1d, 0xe5, 0x81, 0x9d, 0xdc, + 0x75, 0xe7, 0xb1, 0x06, 0xb4, 0x41, 0x8f, 0x9b, + 0x22, 0x9a, 0x75, 0x6b, 0x51, 0x16, 0xb4, 0x64, + 0xbc, 0xd6, 0x3d, 0x9a, 0xad, 0xb6, 0x93, 0x87, + 0x0d, 0x72, 0x4f, 0xdd, 0x3a, 0x4e, 0x9e, 0xd4, + 0x0c, 0xf0, 0xcd, 0x6f, 0x21, 0x8a, 0x76, 0x18, + 0xde, 0x05, 0x70, 0x9d, 0xed, 0xf5, 0xb6, 0xdb, + 0x2f, 0xbd, 0xba, 0x6e, 0x28, 0x22, 0x73, 0x9b, + 0xf3, 0xb5, 0x0e, 0xe1, 0x53, 0x3b, 0x53, 0x00, + 0x91, 0xf6, 0x61, 0xa3, 0xc7, 0x91, 0xe6, 0x3a, + 0xef, 0x83, 0x87, 0x42, 0xec, 0xcd, 0x66, 0xb8, + 0xcb, 0xf2, 0xf6, 0x47, 0x60, 0xc3, 0x8a, 0xa1, + 0x8d, 0xa0, 0xae, 0x11, 0xbf, 0xa9, 0x5b, 0xbd, + 0x3b, 0x6b, 0xa4, 0x46, 0xe9, 0xf9, 0x39, 0xc7, + 0x93, 0xac, 0x5f, 0x26, 0xeb, 0x4e, 0xcc, 0x7f, + 0x39, 0xd7, 0x8a, 0xb3, 0x73, 0x65, 0x77, 0x68, + 0x01, 0xb8, 0x8d, 0xcc, 0x69, 0xd0, 0x1c, 0x74, + 0x8a, 0xf6, 0xc2, 0xf3, 0x0d, 0x9d, 0xe4, 0xec, + 0xe7, 0x21, 0x85, 0xf2, 0x30, 0x12, 0x31, 0x34, + 0x12, 0x2a, 0x15, 0xa2, 0xd0, 0xcd, 0x98, 0xe4, + 0xee, 0x17, 0x8c, 0x22, 0x47, 0x07, 0x35, 0xc0, + 0x8a, 0x69, 0x1f, 0x9d, 0x42, 0xb4, 0x6c, 0xae, + 0x9c, 0xb4, 0xd7, 0xd6, 0x10, 0x78, 0x13, 0xbd, + 0x68, 0x89, 0xd6, 0x23, 0x74, 0x4e, 0x84, 0x79, + 0x4a, 0x4e, 0x4a, 0x57, 0x5b, 0x69, 0x92, 0xb6, + 0xb7, 0x1f, 0x67, 0x24, 0x03, 0x6c, 0xaf, 0x0c, + 0x0e, 0xb8, 0xe6, 0x8b, 0x62, 0x65, 0x4b, 0x9c, + 0x74, 0x68, 0x1a, 0xd2, 0xda, 0xc2, 0xf6, 0xe8, + 0x17, 0x5b, 0xc4, 0xe7, 0xb4, 0x1a, 0x62, 0xd4, + 0x2a, 0x3b, 0x25, 0x48, 0xe6, 0xbb, 0x40, 0xd9, + 0x19, 0x3d, 0x84, 0x30, 0x81, 0x10, 0x06, 0x3c, + 0x75, 0xde, 0x34, 0x34, 0x0b, 0x63, 0xb3, 0xf8, + 0x23, 0xb0, 0x6d, 0xb6, 0x5d, 0x88, 0xdc, 0x34, + 0x35, 0x8d, 0x18, 0x2a, 0x05, 0x3c, 0xa3, 0x4d, + 0x4a, 0x77, 0xe4, 0xd3, 0xed, 0x8e, 0x2a, 0x57, + 0x0e, 0x0d, 0xfa, 0x6f, 0xb5, 0xb4, 0xf7, 0x23, + 0x2e, 0x32, 0xeb, 0xeb, 0x66, 0x97, 0xcd, 0x03, + 0x83, 0x06, 0xb7, 0x0a, 0x11, 0xdd, 0xa2, 0x94, + 0xd9, 0x4d, 0x32, 0xdc, 0xe9, 0xaf, 0x8a, 0xc3, + 0xc2, 0x5c, 0xa4, 0xf2, 0xd9, 0x2e, 0xee, 0x72, + 0xff, 0x00, 0xfb, 0xe6, 0xe1, 0x91, 0xd8, 0x81, + 0x04, 0x50, 0x96, 0xee, 0x12, 0x14, 0x56, 0xc9, + 0x7e, 0xde, 0xf0, 0x6e, 0x00, 0xd0, 0x38, 0x5c, + 0xa9, 0x6b, 0xcd, 0xb1, 0xde, 0x27, 0x4e, 0x0e, + 0xb8, 0xf0, 0xd6, 0x99, 0x70, 0xda, 0xb3, 0x33, + 0x5c, 0x9b, 0xb5, 0x8b, 0x38, 0xb3, 0xc2, 0x7a, + 0xd6, 0x66, 0x8d, 0x26, 0xad, 0x00, 0x77, 0x35, + 0x05, 0xe5, 0x99, 0x3e, 0x68, 0xf6, 0xe2, 0x16, + 0xee, 0xa1, 0xdf, 0x20, 0x1e, 0xe8, 0x52, 0x90, + 0xb5, 0x8f, 0xda, 0x99, 0x83, 0xc0, 0x25, 0xad, + 0xc4, 0xca, 0xfc, 0xe0, 0x1a, 0xb6, 0xe6, 0xf7, + 0xd9, 0xad, 0x9d, 0xdb, 0x24, 0x85, 0x84, 0xd9, + 0x00, 0xd2, 0xec, 0x2d, 0xc5, 0x52, 0x7c, 0xac, + 0x5b, 0xaa, 0xdd, 0xcb, 0x44, 0x56, 0xb5, 0x88, + 0xd7, 0x4d, 0x78, 0xab, 0x38, 0x29, 0x33, 0x92, + 0xf7, 0x99, 0xd2, 0x32, 0x4d, 0x7e, 0x95, 0x72, + 0x68, 0xa6, 0x82, 0x43, 0x1c, 0xcc, 0x74, 0x6f, + 0x1a, 0x48, 0x70, 0xdc, 0xdf, 0x0b, 0xc6, 0x25, + 0x29, 0x9e, 0xe6, 0xb6, 0x77, 0xec, 0x8c, 0xc0, + 0x1d, 0xce, 0xc4, 0xed, 0x38, 0x9b, 0x4d, 0x0a, + 0x1e, 0xab, 0xad, 0x2d, 0x36, 0xae, 0xb3, 0x1b, + 0x67, 0x93, 0x36, 0x4a, 0x56, 0xb6, 0xd2, 0xb6, + 0xdd, 0x1c, 0xe5, 0xb3, 0x12, 0x62, 0x5a, 0xea, + 0x95, 0x52, 0xa3, 0xbb, 0x29, 0x79, 0x19, 0x95, + 0xb5, 0x3d, 0x63, 0x42, 0x9b, 0xcd, 0x7d, 0xf5, + 0xde, 0x6b, 0x7c, 0x0a, 0x07, 0x29, 0x3f, 0xe6, + 0x76, 0xbf, 0x68, 0xdf, 0x0a, 0x9e, 0xcd, 0x7d, + 0xf5, 0xde, 0x6b, 0x7c, 0x0b, 0x2f, 0x99, 0xfb, + 0xa3, 0xe0, 0xf4, 0xfc, 0x87, 0xf0, 0xed, 0xf1, + 0x73, 0xdb, 0x8a, 0xdc, 0x44, 0x37, 0xde, 0x16, + 0x9d, 0xa7, 0x24, 0x5f, 0xb4, 0x6f, 0x46, 0x3c, + 0x25, 0x6f, 0xb6, 0xf7, 0x88, 0xbc, 0xf6, 0xf8, + 0x57, 0x36, 0xd5, 0x1f, 0xf3, 0x26, 0xfd, 0x98, + 0xf0, 0x95, 0x18, 0x3f, 0x89, 0x1f, 0x05, 0xff, + 0x00, 0x98, 0x71, 0xc1, 0xa4, 0xf3, 0x84, 0x51, + 0x76, 0x94, 0xc4, 0xb5, 0xd5, 0x2a, 0xb5, 0xea, + 0xf2, 0xa7, 0xc5, 0xb3, 0x12, 0x62, 0x5a, 0xea, + 0x95, 0x4d, 0x51, 0xa4, 0x36, 0x62, 0x4c, 0x4b, + 0x5d, 0x52, 0xa9, 0xa9, 0xa4, 0x36, 0x62, 0x4c, + 0x4b, 0x5d, 0x52, 0xa9, 0xa9, 0xa4, 0x36, 0x62, + 0x4c, 0x4b, 0x5d, 0x52, 0xa9, 0xa9, 0xa4, 0x36, + 0x62, 0x4c, 0x4b, 0x5d, 0x52, 0xa9, 0xa9, 0xa4, + 0x36, 0x62, 0x4c, 0x4b, 0x5d, 0x52, 0xa9, 0xa9, + 0xa4, 0x36, 0x62, 0x4c, 0x4b, 0x5d, 0x52, 0xa9, + 0xa9, 0xa4, 0x3a, 0x2d, 0xe3, 0x33, 0xdc, 0x45, + 0x08, 0xd3, 0xce, 0x3c, 0x36, 0x9d, 0xbf, 0x29, + 0x5d, 0xdd, 0x71, 0x1c, 0x33, 0x45, 0x6d, 0xf9, + 0xcf, 0x69, 0xc3, 0xfd, 0x80, 0x15, 0x57, 0x66, + 0xa2, 0xe7, 0x73, 0x26, 0xbe, 0x95, 0x6c, 0x2d, + 0x73, 0x8f, 0x6c, 0xe8, 0x0b, 0xbb, 0x32, 0xbf, + 0x11, 0xed, 0x15, 0xa8, 0xaf, 0x8b, 0x08, 0x6b, + 0x5d, 0xff, 0x00, 0xe4, 0xd7, 0xde, 0x21, 0x67, + 0xcd, 0xf5, 0x5f, 0x4e, 0x50, 0xdf, 0xe5, 0x7f, + 0xdb, 0xc5, 0xbb, 0x4f, 0xba, 0xf1, 0x1f, 0x84, + 0xb8, 0x33, 0xc8, 0xb9, 0x8c, 0xca, 0x50, 0x74, + 0x07, 0xd1, 0xe3, 0xb4, 0xe1, 0xa7, 0x80, 0x85, + 0xe2, 0xdf, 0x29, 0xbe, 0xb8, 0xb6, 0x17, 0x31, + 0x34, 0x18, 0xc8, 0x24, 0x78, 0xc2, 0xba, 0x2b, + 0xc4, 0xa4, 0x76, 0xb6, 0x1f, 0xd8, 0x5c, 0xef, + 0x56, 0x37, 0x70, 0xd4, 0x78, 0x0a, 0xef, 0xc8, + 0x8e, 0x1c, 0x92, 0x37, 0xeb, 0x2d, 0x0f, 0x3c, + 0x05, 0xca, 0x7b, 0x93, 0x18, 0xe2, 0x63, 0xc7, + 0x5d, 0x15, 0xf4, 0xd5, 0xb7, 0x98, 0xc9, 0x13, + 0xc2, 0x22, 0x38, 0x21, 0xa1, 0xd9, 0xec, 0xc6, + 0x58, 0x84, 0x94, 0x6b, 0x31, 0x0a, 0x86, 0x38, + 0xd0, 0xe9, 0xee, 0x28, 0xe9, 0x62, 0x9a, 0x19, + 0x8c, 0x12, 0xb4, 0xb6, 0x56, 0x90, 0x0b, 0x7b, + 0x7b, 0xdb, 0xea, 0x73, 0x67, 0xb3, 0x4b, 0xcb, + 0xbb, 0xe9, 0x63, 0x9e, 0x42, 0xf6, 0x60, 0x2e, + 0x0d, 0xa0, 0xa0, 0x35, 0xdc, 0x5a, 0x73, 0xd9, + 0xe3, 0xb6, 0xcf, 0x21, 0x99, 0xed, 0xc6, 0xc6, + 0xb5, 0xaf, 0x2d, 0xd5, 0x52, 0x2b, 0x4d, 0x3d, + 0xc5, 0x6a, 0xe4, 0xc9, 0xba, 0x6b, 0x31, 0x13, + 0xc3, 0x55, 0x32, 0x60, 0xc3, 0xda, 0xad, 0xeb, + 0x6d, 0xbf, 0x56, 0xd9, 0x99, 0xe2, 0xd5, 0x0e, + 0xcf, 0x66, 0x32, 0xc6, 0x1f, 0x46, 0xc7, 0x51, + 0x50, 0x1e, 0x48, 0x34, 0xec, 0xd0, 0x15, 0xcf, + 0x7b, 0x95, 0xde, 0x59, 0x00, 0x66, 0x68, 0x2c, + 0x3a, 0x31, 0xb4, 0xd5, 0xab, 0xbe, 0xee, 0xff, + 0x00, 0x34, 0xcd, 0x0c, 0x7d, 0x5d, 0x0c, 0xd0, + 0xc6, 0xdd, 0x2e, 0x77, 0x92, 0x09, 0xdc, 0xf1, + 0x94, 0x96, 0x70, 0xc7, 0x75, 0x24, 0xc2, 0x60, + 0x0c, 0x81, 0x8d, 0x2e, 0xf3, 0xb4, 0x28, 0x8c, + 0x97, 0xdd, 0x5d, 0x66, 0x34, 0x99, 0xd2, 0x61, + 0x69, 0xf2, 0xd8, 0xad, 0x4b, 0xcd, 0x62, 0xd1, + 0x35, 0xae, 0xb1, 0x3f, 0xab, 0x2c, 0x6c, 0xee, + 0x9c, 0xa9, 0xa7, 0xfa, 0xcf, 0xf0, 0xaa, 0xc4, + 0x70, 0xcd, 0x71, 0x71, 0xcc, 0xc0, 0xc2, 0xf7, + 0xb8, 0x9a, 0x01, 0xb8, 0x01, 0xdd, 0x56, 0x7d, + 0x9b, 0x3f, 0xe5, 0x0d, 0xf3, 0x9f, 0xe1, 0x5c, + 0x9b, 0x2b, 0x13, 0x49, 0xb9, 0x9c, 0x8f, 0x1b, + 0x1e, 0x00, 0x7b, 0x1b, 0xaa, 0xb1, 0x7d, 0xb3, + 0x96, 0x63, 0xc7, 0x5d, 0x21, 0xd2, 0xf8, 0xa3, + 0x24, 0x79, 0x7a, 0x4c, 0xfe, 0xaf, 0xe8, 0x72, + 0x0d, 0x9a, 0xcc, 0x4b, 0x71, 0x56, 0x3a, 0xd3, + 0xc9, 0xa9, 0xaf, 0x82, 0x8a, 0x36, 0xe2, 0x09, + 0xed, 0xa5, 0x31, 0x4e, 0xdc, 0x0f, 0x6e, 0xba, + 0xea, 0xa7, 0x61, 0x4a, 0x75, 0xad, 0xd8, 0xda, + 0x02, 0xc3, 0x23, 0xb9, 0x9e, 0x74, 0xc5, 0xcd, + 0xfe, 0x6e, 0x1d, 0x5a, 0x97, 0x5e, 0xd3, 0xdb, + 0xb1, 0xcf, 0xb2, 0x90, 0x8f, 0x19, 0xd2, 0x88, + 0x89, 0xec, 0x15, 0x68, 0xc9, 0x78, 0x98, 0xdd, + 0xed, 0x87, 0x1b, 0xe0, 0xc5, 0x6c, 0x77, 0xb6, + 0x39, 0x98, 0x9a, 0x4e, 0x9c, 0xfd, 0xa8, 0xdb, + 0x5c, 0x8e, 0xfe, 0xe6, 0x21, 0x33, 0x43, 0x58, + 0xc7, 0x69, 0x66, 0x33, 0x42, 0x47, 0x6a, 0x89, + 0x1e, 0x45, 0x99, 0x3c, 0xb8, 0x60, 0x03, 0x0b, + 0xb0, 0x9a, 0x90, 0x3b, 0xa3, 0xb8, 0xa6, 0xf3, + 0xfb, 0xa9, 0x2c, 0x72, 0xf1, 0xec, 0xee, 0xc0, + 0xe7, 0x39, 0xac, 0x6b, 0x86, 0xe0, 0xfc, 0x82, + 0xd9, 0x90, 0x5d, 0xcb, 0x79, 0x97, 0xb6, 0x49, + 0x5d, 0x8a, 0x46, 0x39, 0xcd, 0x73, 0xb7, 0x4d, + 0x37, 0xd4, 0x4e, 0x5b, 0xed, 0x9b, 0x46, 0x9a, + 0x6b, 0xa3, 0xaf, 0xa5, 0xc3, 0x39, 0x7b, 0x5c, + 0x62, 0x62, 0x37, 0x29, 0xe4, 0xd0, 0x91, 0xba, + 0x34, 0x1e, 0xda, 0x62, 0x5e, 0x65, 0x71, 0x32, + 0xbe, 0xbf, 0x38, 0xf8, 0x57, 0x9a, 0xae, 0xfa, + 0xcf, 0x0f, 0x67, 0x06, 0x0d, 0x23, 0x59, 0xd3, + 0x9c, 0xb6, 0x62, 0x4c, 0x4b, 0x5d, 0x52, 0xa9, + 0xa9, 0xa4, 0x36, 0x62, 0x4c, 0x4b, 0x5d, 0x52, + 0xa9, 0xa9, 0xa4, 0x36, 0x62, 0x4c, 0x4b, 0x5d, + 0x52, 0xa9, 0xa9, 0xa4, 0x36, 0x62, 0x4c, 0x4b, + 0x5d, 0x52, 0xa9, 0xa9, 0xa4, 0x36, 0x62, 0x4c, + 0x4b, 0x5d, 0x52, 0xa9, 0xa9, 0xa4, 0x36, 0x62, + 0x4c, 0x4b, 0x5d, 0x52, 0xa9, 0xa9, 0xa4, 0x36, + 0x62, 0x4c, 0x4b, 0x5d, 0x52, 0xa9, 0xa9, 0xa4, + 0x3a, 0xac, 0x5c, 0x7d, 0xb6, 0xde, 0x9e, 0xb5, + 0x9f, 0x58, 0x2b, 0x16, 0x72, 0x3f, 0xee, 0x87, + 0x65, 0x83, 0xe5, 0x55, 0xab, 0x13, 0xff, 0x00, + 0x7d, 0x6d, 0xf6, 0xac, 0xfa, 0xc1, 0x59, 0x73, + 0x9f, 0x7a, 0x1e, 0x67, 0x1a, 0xcd, 0xe6, 0x7c, + 0x6a, 0xf4, 0x7f, 0x97, 0xfd, 0x99, 0x3e, 0x2e, + 0x38, 0x7f, 0x6b, 0x1f, 0x9c, 0xdf, 0x0a, 0x97, + 0x51, 0x30, 0xfe, 0xd6, 0x3f, 0x39, 0xbe, 0x15, + 0x2c, 0xb8, 0x37, 0x0a, 0x3f, 0x32, 0xf7, 0xab, + 0x4f, 0xb4, 0xf9, 0x42, 0x90, 0x51, 0xf9, 0x97, + 0xbd, 0x5a, 0x7d, 0xa7, 0xca, 0x10, 0x63, 0x2c, + 0xf7, 0xab, 0xcf, 0x3c, 0xf8, 0x4a, 0x91, 0x51, + 0xd9, 0x67, 0xbd, 0x5e, 0x79, 0xe7, 0xc2, 0x54, + 0x8a, 0x0c, 0x3b, 0x51, 0x50, 0xe7, 0x59, 0x53, + 0x0e, 0xd4, 0x54, 0x39, 0xd6, 0x50, 0x37, 0x56, + 0xec, 0xfb, 0xfd, 0x3f, 0x6e, 0x7f, 0xae, 0xdf, + 0xef, 0x2d, 0x3b, 0xab, 0x6e, 0xd0, 0x1a, 0x6c, + 0xec, 0x1e, 0x7b, 0x3f, 0xbc, 0xad, 0x8f, 0xef, + 0xaf, 0xc5, 0xcf, 0x3f, 0xf0, 0xaf, 0xf0, 0x56, + 0x31, 0x26, 0x25, 0xaf, 0x12, 0x62, 0x5b, 0x67, + 0xdb, 0xf1, 0x78, 0xfa, 0x78, 0x36, 0x62, 0x4a, + 0xd7, 0x42, 0xd7, 0x89, 0x63, 0x12, 0x47, 0x89, + 0xb7, 0x84, 0xfc, 0x17, 0x5d, 0x97, 0x94, 0x3f, + 0x2a, 0xc1, 0xf9, 0xcc, 0x7b, 0xc1, 0x1b, 0xd5, + 0x3a, 0x15, 0x65, 0xb0, 0x17, 0x66, 0x7e, 0xc8, + 0x41, 0x24, 0xcd, 0x81, 0xcd, 0xec, 0x07, 0x6b, + 0x5e, 0xb2, 0x5c, 0xea, 0x4c, 0xb2, 0x57, 0x12, + 0xde, 0x76, 0x09, 0x69, 0xce, 0x33, 0x51, 0xa8, + 0xdd, 0x6a, 0x9d, 0xf8, 0x97, 0x22, 0xc7, 0xcf, + 0x88, 0x9d, 0xed, 0x04, 0x69, 0x38, 0x06, 0x3e, + 0x15, 0xc3, 0x4b, 0x52, 0xd3, 0x3a, 0x6b, 0xb9, + 0xb3, 0x5c, 0x79, 0x71, 0xe3, 0xdd, 0x68, 0xac, + 0xd3, 0xd8, 0xf1, 0xb4, 0x56, 0x19, 0x75, 0x9d, + 0x93, 0x64, 0x8a, 0x16, 0xb2, 0x47, 0x3c, 0x0d, + 0x1a, 0xc8, 0x00, 0xd5, 0x76, 0xed, 0x37, 0x8d, + 0x93, 0xb9, 0xcd, 0xf1, 0x86, 0x26, 0xba, 0xa3, + 0x7b, 0x7f, 0xbe, 0xab, 0x39, 0xd6, 0x74, 0xfc, + 0xd2, 0x66, 0xf8, 0xbc, 0xdc, 0x51, 0xd7, 0x9b, + 0x61, 0xd2, 0x6a, 0x77, 0x5d, 0xd9, 0x52, 0x59, + 0x76, 0xd3, 0x5a, 0x7b, 0x18, 0xb3, 0xcc, 0xa3, + 0x2f, 0x6b, 0x5b, 0x83, 0x18, 0x18, 0x83, 0x9a, + 0x35, 0x55, 0xaa, 0x27, 0x1d, 0xf6, 0xd6, 0xde, + 0x33, 0x12, 0xb5, 0x72, 0xe2, 0x9b, 0x5e, 0x91, + 0xf4, 0x56, 0xd1, 0xc2, 0xde, 0xc9, 0x75, 0x6c, + 0x83, 0x5d, 0xec, 0x97, 0x0e, 0xfc, 0xd3, 0x2e, + 0x8e, 0x00, 0xbd, 0x64, 0x4f, 0x12, 0x66, 0x99, + 0x9b, 0x86, 0xae, 0x70, 0x77, 0x8b, 0x82, 0xe6, + 0xb8, 0xda, 0x6c, 0xbe, 0xda, 0xd4, 0xdb, 0xe5, + 0x70, 0x96, 0x92, 0x08, 0x6d, 0x46, 0x16, 0x8a, + 0xeb, 0x2a, 0x3f, 0x21, 0xce, 0x2d, 0xf2, 0xc7, + 0x4c, 0x67, 0x6b, 0xe4, 0xe7, 0x69, 0x4c, 0x14, + 0x3a, 0x45, 0x49, 0xad, 0x5d, 0xd9, 0x49, 0xad, + 0xa7, 0x7c, 0xe8, 0x8a, 0xe4, 0xc7, 0x4e, 0xc5, + 0x22, 0xdb, 0xa2, 0x9c, 0x66, 0xcd, 0xb9, 0x83, + 0xbf, 0xfb, 0x31, 0x1b, 0xd3, 0x30, 0x78, 0x14, + 0xae, 0xd7, 0x68, 0xb0, 0x8b, 0xed, 0x7e, 0x42, + 0xab, 0xb7, 0x59, 0x8c, 0x53, 0x67, 0x1e, 0xde, + 0xd6, 0xbb, 0x9a, 0x32, 0x32, 0x4c, 0x26, 0x98, + 0xa8, 0xdc, 0x21, 0x76, 0xe7, 0x99, 0xfd, 0xb6, + 0x65, 0x6a, 0xc8, 0xa2, 0x64, 0x8c, 0x73, 0x5f, + 0x88, 0x97, 0x80, 0x37, 0x29, 0xb8, 0xe2, 0xad, + 0x35, 0xb6, 0xb8, 0xf8, 0x7b, 0x14, 0xdf, 0x48, + 0xa6, 0x78, 0x89, 0xe3, 0x92, 0x77, 0x27, 0x72, + 0xad, 0x3b, 0x39, 0x1d, 0x35, 0xf3, 0x2e, 0xfe, + 0xf2, 0x89, 0xd8, 0xe3, 0x5b, 0x99, 0xfb, 0x11, + 0x8f, 0xac, 0xb1, 0x93, 0xed, 0x35, 0xbd, 0xa5, + 0x9b, 0x2d, 0x2e, 0xa3, 0x77, 0xea, 0xfc, 0x56, + 0xbd, 0xb4, 0x20, 0x82, 0x7b, 0x61, 0x62, 0xdf, + 0x68, 0x32, 0xdb, 0x7c, 0xca, 0x5b, 0x98, 0x61, + 0x7b, 0x61, 0x92, 0x26, 0xb3, 0x03, 0x1a, 0xd0, + 0x71, 0x03, 0x52, 0x69, 0x8b, 0xb2, 0xab, 0xb6, + 0xd1, 0x17, 0x8d, 0x3e, 0xe7, 0x4e, 0xe6, 0x39, + 0x9c, 0x56, 0x9b, 0x47, 0xd1, 0xe3, 0xf2, 0xd1, + 0xa3, 0x69, 0x9c, 0x46, 0x71, 0x28, 0xfe, 0xab, + 0x34, 0x77, 0x14, 0xed, 0x81, 0xe7, 0x36, 0x6d, + 0x98, 0x3c, 0x6f, 0xd4, 0x38, 0x50, 0x6f, 0x8a, + 0xe8, 0x55, 0x5c, 0xe2, 0xfe, 0x3b, 0xfb, 0xf7, + 0x5d, 0x44, 0x1c, 0xd6, 0x38, 0x36, 0x81, 0xd4, + 0x07, 0x40, 0xec, 0x12, 0xbb, 0xb2, 0x2d, 0xa1, + 0x6d, 0x84, 0x46, 0xda, 0xe5, 0xa5, 0xf6, 0xf5, + 0xc4, 0xd2, 0xdd, 0x25, 0xa4, 0xeb, 0x14, 0xdd, + 0xaa, 0xb5, 0xeb, 0x3b, 0x29, 0xc3, 0x8c, 0x71, + 0x52, 0x99, 0x29, 0x5c, 0xb9, 0x75, 0x9d, 0x22, + 0xf1, 0xa6, 0xbe, 0xf9, 0x6c, 0xd9, 0x16, 0xb9, + 0xd9, 0x8b, 0xdd, 0x43, 0x85, 0xb1, 0x10, 0xe3, + 0xd9, 0x25, 0x9a, 0x3b, 0xcb, 0xbe, 0x69, 0x31, + 0x6d, 0x6c, 0x0d, 0x69, 0xf2, 0x63, 0x2d, 0x27, + 0xfb, 0x0f, 0x2b, 0x5b, 0x76, 0x8f, 0x24, 0xb3, + 0x6b, 0xdd, 0x61, 0x01, 0xe7, 0x1f, 0xa4, 0x86, + 0xb4, 0x34, 0x13, 0xfd, 0x62, 0xa1, 0x6c, 0xf3, + 0x52, 0xcc, 0xe4, 0x66, 0x37, 0x20, 0xba, 0xae, + 0x73, 0x9c, 0xd6, 0x6b, 0x01, 0xcd, 0x73, 0x00, + 0x15, 0xd1, 0xba, 0xa3, 0x4b, 0x5a, 0x66, 0xda, + 0x7b, 0x16, 0xdd, 0x4a, 0x52, 0x98, 0xe2, 0xd1, + 0x3f, 0x56, 0xe9, 0x98, 0xf6, 0x25, 0x76, 0xbc, + 0xd2, 0x7b, 0x6a, 0x7c, 0xd7, 0x78, 0x55, 0x7f, + 0x12, 0x90, 0xcf, 0xb3, 0x88, 0x33, 0x39, 0x21, + 0x7c, 0x0c, 0x7b, 0x04, 0x6d, 0x21, 0xc1, 0xe0, + 0x03, 0xa4, 0xf6, 0x1c, 0xa2, 0xb1, 0x7e, 0x5f, + 0x95, 0x17, 0x4c, 0x51, 0xa5, 0x22, 0x65, 0x9f, + 0xcc, 0xe9, 0x6c, 0xb7, 0xb4, 0x4f, 0xd3, 0x3a, + 0x4a, 0xf7, 0x96, 0x38, 0xb7, 0x67, 0xe1, 0x73, + 0x4d, 0x1c, 0x20, 0x24, 0x11, 0xda, 0x2a, 0xa0, + 0xfc, 0xc6, 0xfa, 0x56, 0x61, 0x7d, 0xc4, 0x8e, + 0x69, 0xdc, 0xc4, 0x54, 0xbd, 0xa6, 0xd2, 0xd9, + 0xc1, 0x95, 0x32, 0xc9, 0xf1, 0xc8, 0x64, 0x6c, + 0x66, 0x32, 0xe0, 0x1b, 0x4a, 0xd0, 0xff, 0x00, + 0x59, 0x57, 0x03, 0xb4, 0x2a, 0x62, 0xac, 0xc4, + 0xce, 0xb0, 0xeb, 0xe6, 0x32, 0x44, 0xc6, 0x28, + 0xad, 0xa7, 0x85, 0x7d, 0x8b, 0x0e, 0xc9, 0x38, + 0x1b, 0xe9, 0x59, 0xa8, 0xba, 0x23, 0x4e, 0x10, + 0xba, 0xf3, 0xac, 0xef, 0x30, 0xb2, 0xcc, 0x4d, + 0xac, 0x01, 0xb8, 0x1c, 0x1b, 0x83, 0x10, 0xa9, + 0x25, 0xda, 0x3c, 0x2a, 0xb9, 0x61, 0x7f, 0x2d, + 0x8d, 0xd3, 0x2e, 0x62, 0xd2, 0xe6, 0x68, 0x2d, + 0xdc, 0x70, 0x3a, 0xc1, 0x56, 0x37, 0x6d, 0x16, + 0x43, 0x70, 0xe6, 0x4d, 0x73, 0x03, 0x8c, 0xf1, + 0xf9, 0x38, 0x99, 0x88, 0x8a, 0x69, 0xd0, 0x54, + 0x5e, 0x3f, 0xdc, 0xdd, 0xa6, 0xed, 0x61, 0x38, + 0x72, 0x56, 0x70, 0xce, 0x38, 0xbf, 0x6a, 0xd1, + 0x6d, 0xda, 0xb9, 0xb3, 0xa7, 0xe7, 0x42, 0xc4, + 0x0b, 0xde, 0x68, 0x42, 0xf7, 0x36, 0x98, 0x7c, + 0xaa, 0x80, 0x78, 0x94, 0xa6, 0x75, 0xfc, 0x81, + 0xe7, 0x57, 0x89, 0x1f, 0x85, 0xaa, 0xbb, 0x9e, + 0x67, 0x67, 0x32, 0x91, 0x8d, 0x8d, 0xa6, 0x3b, + 0x78, 0xcd, 0x58, 0x0e, 0xb7, 0x1d, 0xf7, 0x6f, + 0x2e, 0xbc, 0xc7, 0x69, 0x2d, 0x2e, 0xb2, 0xc3, + 0x64, 0xc8, 0xe4, 0x6c, 0x85, 0xac, 0x68, 0x73, + 0x83, 0x70, 0xe8, 0x23, 0xfa, 0xdd, 0x84, 0xd9, + 0x6d, 0x29, 0xc3, 0xda, 0xb4, 0x65, 0xae, 0xb9, + 0x66, 0x6f, 0xbb, 0x74, 0x44, 0x47, 0xfe, 0x8e, + 0x5d, 0x9e, 0x75, 0x73, 0x7b, 0x7a, 0xee, 0xd7, + 0xea, 0x95, 0x29, 0xb5, 0x64, 0xf3, 0xd6, 0x5d, + 0xb3, 0xe1, 0x6a, 0x81, 0xca, 0xef, 0x63, 0xb2, + 0xbf, 0x8a, 0xe6, 0x40, 0xe7, 0x32, 0x32, 0x6a, + 0xd6, 0xeb, 0xd5, 0xd9, 0xa2, 0xed, 0xce, 0x73, + 0x98, 0x33, 0x39, 0xed, 0x8c, 0x2d, 0x7b, 0x39, + 0xb7, 0x50, 0x87, 0xd0, 0x7e, 0x70, 0xde, 0x71, + 0x56, 0xb5, 0x66, 0x6f, 0x16, 0xd3, 0xd8, 0xe5, + 0x8a, 0x6b, 0xe9, 0xed, 0x5d, 0x74, 0x9b, 0x5e, + 0x26, 0x21, 0x3d, 0xb4, 0xed, 0x27, 0x29, 0x7b, + 0xc0, 0xae, 0x17, 0xb1, 0xc7, 0xb5, 0x55, 0xa7, + 0x64, 0x1a, 0x7d, 0x82, 0x57, 0x6e, 0x3a, 0x43, + 0x43, 0xb9, 0xa0, 0x05, 0xdf, 0x9c, 0x5f, 0x32, + 0xc6, 0xd3, 0x9e, 0x92, 0x3e, 0x76, 0x22, 0xe0, + 0xd7, 0xb3, 0x5f, 0x8a, 0x7b, 0x0a, 0x26, 0xe3, + 0x6a, 0x72, 0xf8, 0x6d, 0x0c, 0x76, 0x11, 0xbb, + 0x1d, 0x08, 0x6b, 0x43, 0x43, 0x5a, 0xd2, 0xb9, + 0x44, 0x5a, 0x69, 0xb6, 0x23, 0xc6, 0x7c, 0x5a, + 0xaf, 0xb2, 0xb9, 0xbb, 0x96, 0xbf, 0x18, 0xa7, + 0x83, 0x6e, 0xce, 0xb8, 0x49, 0x98, 0x66, 0x6e, + 0x1a, 0x46, 0x36, 0xf8, 0x5e, 0xa3, 0x33, 0x13, + 0x4d, 0xa6, 0x23, 0xfc, 0x66, 0x7c, 0x8b, 0x56, + 0x43, 0x9d, 0x43, 0x96, 0xba, 0xe1, 0xd7, 0x0d, + 0x7c, 0x86, 0x6c, 0x24, 0x16, 0x50, 0xe9, 0x05, + 0xc4, 0xd6, 0xa4, 0x7c, 0xe5, 0xcf, 0x75, 0x98, + 0xc5, 0x36, 0x71, 0xed, 0xcd, 0x6b, 0x84, 0x66, + 0x46, 0xbf, 0x09, 0xa6, 0x2a, 0x0d, 0x1b, 0xe4, + 0x2e, 0xbb, 0x6d, 0xbe, 0xfc, 0x3d, 0x9a, 0x33, + 0xdb, 0x25, 0x3b, 0x34, 0x8a, 0xcf, 0x85, 0xf7, + 0x7e, 0x1e, 0xd5, 0x93, 0x6a, 0x9c, 0x1b, 0x6b, + 0x6c, 0xe2, 0x69, 0x4b, 0x86, 0x92, 0x7b, 0x40, + 0xae, 0x9c, 0xea, 0xf6, 0x7b, 0x4c, 0xbb, 0xda, + 0x6d, 0xe8, 0x5c, 0xd2, 0xdd, 0x27, 0x78, 0xaa, + 0xfe, 0x7d, 0x9f, 0x5a, 0xe6, 0x76, 0xac, 0x86, + 0x16, 0x3d, 0x8e, 0x6c, 0x98, 0x89, 0x78, 0x00, + 0x11, 0x47, 0x37, 0xe7, 0x76, 0x57, 0x45, 0x8e, + 0xd3, 0x5a, 0x3a, 0xd0, 0x5a, 0x66, 0x71, 0x97, + 0xd1, 0xb8, 0x0b, 0xa9, 0x89, 0xae, 0x68, 0xdf, + 0x05, 0x73, 0x8a, 0x4c, 0x45, 0x78, 0x78, 0x4c, + 0xba, 0xce, 0x7a, 0xcd, 0xed, 0xb6, 0xfb, 0x77, + 0x56, 0xbb, 0x6f, 0xec, 0xd5, 0xbe, 0xc3, 0x30, + 0xda, 0x1b, 0xe8, 0x0d, 0xc4, 0x1c, 0xcf, 0x36, + 0xd7, 0x11, 0x57, 0x0a, 0x6a, 0xde, 0x5b, 0x76, + 0x50, 0x97, 0xc1, 0x74, 0xf7, 0x69, 0x2e, 0x98, + 0x93, 0xbd, 0x5a, 0x0a, 0xd1, 0x72, 0x5d, 0xed, + 0x35, 0x94, 0x56, 0x66, 0xd3, 0x2b, 0x84, 0xb4, + 0x10, 0x43, 0x4d, 0x30, 0xb5, 0xa0, 0xee, 0xb7, + 0xb2, 0xb9, 0x72, 0x1c, 0xf2, 0xdb, 0x2c, 0x82, + 0x48, 0xe6, 0x64, 0x8f, 0xc6, 0xec, 0x75, 0x60, + 0x04, 0x6a, 0xa1, 0xd6, 0x42, 0x99, 0xac, 0xcd, + 0x67, 0xe9, 0x88, 0xe3, 0xec, 0x84, 0x57, 0x25, + 0x2b, 0x92, 0x93, 0x39, 0x26, 0xfa, 0x7b, 0x75, + 0xe1, 0xaf, 0xb9, 0xc5, 0x9a, 0x38, 0x8c, 0xca, + 0xe8, 0x0d, 0xc9, 0x1d, 0x41, 0xdd, 0x56, 0x82, + 0xdb, 0x6c, 0x97, 0x28, 0xf6, 0x98, 0xe2, 0x0f, + 0x90, 0x35, 0xb8, 0x9d, 0xba, 0xe7, 0x3a, 0x9a, + 0xcf, 0x75, 0x53, 0xef, 0x66, 0x6d, 0xc5, 0xdc, + 0xd3, 0x34, 0x10, 0xd9, 0x5e, 0xe2, 0x01, 0xa5, + 0x40, 0x3b, 0xfa, 0x4a, 0xb1, 0x5a, 0x6d, 0x2e, + 0x5d, 0x2d, 0x8b, 0x6d, 0xb3, 0x18, 0xdc, 0xe2, + 0x1a, 0x1a, 0xe6, 0xe1, 0xc4, 0xd7, 0x51, 0x5b, + 0x24, 0x5a, 0x6b, 0x5e, 0x1e, 0x1e, 0x2e, 0x78, + 0x2d, 0x8e, 0x32, 0x64, 0x9d, 0x62, 0x26, 0x66, + 0x76, 0xda, 0x7d, 0x89, 0x1d, 0x9f, 0xcc, 0x2e, + 0x33, 0x0b, 0x79, 0x66, 0xb8, 0xc3, 0x88, 0x49, + 0x84, 0x35, 0xa2, 0x80, 0x51, 0xad, 0x34, 0xe1, + 0x51, 0xbb, 0x36, 0x4f, 0x5c, 0xde, 0x0f, 0xea, + 0xbb, 0xeb, 0x85, 0x9b, 0x5d, 0xaa, 0xcb, 0xad, + 0xcb, 0xe2, 0x8e, 0xd9, 0xf1, 0xc0, 0xd3, 0xfa, + 0x96, 0xc6, 0x1a, 0x09, 0x1b, 0xa4, 0xd5, 0xc1, + 0x47, 0xe5, 0x59, 0xc5, 0xad, 0x96, 0x65, 0x73, + 0x74, 0xe6, 0x48, 0xe8, 0xa6, 0x0e, 0x0c, 0x0d, + 0xc3, 0x88, 0x55, 0xcd, 0x76, 0x9a, 0xb9, 0x53, + 0x6d, 0xb4, 0xbf, 0x0f, 0x17, 0x4e, 0xe5, 0x75, + 0xc1, 0xae, 0x48, 0xb6, 0xdb, 0x5f, 0x59, 0xe6, + 0xeb, 0xce, 0x60, 0xbb, 0xb8, 0xda, 0x03, 0x1d, + 0xa1, 0xa4, 0xc1, 0x8d, 0x78, 0x35, 0xc3, 0x4a, + 0x00, 0xba, 0x0e, 0xd0, 0xde, 0xd8, 0x4c, 0xdb, + 0x5c, 0xd2, 0x20, 0xe7, 0x50, 0x39, 0xcf, 0x8c, + 0xe9, 0xc2, 0x77, 0x68, 0xa2, 0xae, 0x73, 0xda, + 0xe7, 0x0d, 0xcc, 0xad, 0xd8, 0xec, 0x2d, 0x01, + 0xbc, 0xdb, 0xe8, 0x09, 0x6d, 0x28, 0xe0, 0x48, + 0x25, 0x4a, 0x49, 0x9f, 0xe4, 0x17, 0x58, 0x25, + 0xbb, 0x81, 0xc6, 0x56, 0x79, 0x38, 0x99, 0x52, + 0x08, 0x53, 0x31, 0x3a, 0x44, 0x4c, 0x6b, 0xa4, + 0x15, 0xbd, 0x66, 0xd9, 0x26, 0xb9, 0x36, 0x5b, + 0x5d, 0x74, 0x9f, 0x0f, 0x8b, 0x66, 0xd3, 0xd9, + 0x5b, 0x9b, 0x11, 0x7a, 0xc6, 0x86, 0xca, 0xd7, + 0x36, 0xae, 0x1a, 0x0b, 0x83, 0xb4, 0x69, 0x55, + 0x6c, 0x4a, 0x53, 0x3d, 0xda, 0x01, 0x98, 0xb0, + 0x5b, 0xc2, 0xc2, 0xc8, 0x01, 0x0e, 0x25, 0xda, + 0xdc, 0x46, 0xad, 0x01, 0x43, 0xe2, 0x5d, 0x31, + 0x6e, 0x8a, 0xfd, 0x4e, 0x1e, 0x66, 0x6b, 0x6b, + 0xeb, 0x56, 0xcc, 0x49, 0x89, 0x6b, 0xc4, 0x98, + 0x97, 0x48, 0x70, 0xd1, 0xec, 0xb9, 0x5b, 0xe3, + 0xff, 0x00, 0x4e, 0xda, 0xf6, 0x9a, 0xa9, 0xb8, + 0x95, 0xc6, 0x2f, 0xf4, 0xe5, 0x9f, 0x9a, 0xd5, + 0xc7, 0x3f, 0xdb, 0x1f, 0x16, 0xbf, 0x23, 0xf7, + 0xcf, 0xc2, 0x7f, 0x4b, 0x91, 0x11, 0x16, 0x67, + 0xa2, 0xdd, 0x65, 0xef, 0x70, 0xf9, 0xc1, 0x46, + 0xed, 0x41, 0x23, 0x37, 0x78, 0xdc, 0xc2, 0xcf, + 0x01, 0x52, 0x56, 0x5e, 0xf7, 0x0f, 0x9c, 0x14, + 0x56, 0xd5, 0x1a, 0x67, 0x0f, 0xf3, 0x59, 0xe0, + 0x2b, 0xae, 0x0f, 0xbd, 0x97, 0xce, 0xff, 0x00, + 0x0a, 0x3f, 0x69, 0x19, 0x89, 0x31, 0x2d, 0x78, + 0x93, 0x12, 0xd4, 0xf3, 0x74, 0x6c, 0xc4, 0xa5, + 0x76, 0x62, 0x50, 0xdc, 0xd9, 0xa0, 0x9a, 0x07, + 0xb1, 0xcd, 0x07, 0xb3, 0xb8, 0xa1, 0xb1, 0x2f, + 0x70, 0xcf, 0x24, 0x13, 0x32, 0x68, 0x8d, 0x1f, + 0x19, 0x0e, 0x69, 0xec, 0x85, 0x16, 0x8d, 0x6b, + 0x31, 0xcd, 0x6a, 0x5b, 0x65, 0xab, 0x6e, 0x56, + 0x4f, 0xed, 0x83, 0x1c, 0xdb, 0x98, 0x25, 0xfc, + 0xd7, 0x30, 0xb4, 0x1d, 0xca, 0x83, 0xc4, 0xba, + 0xf2, 0x2c, 0xaa, 0xc6, 0x5c, 0xad, 0x97, 0x17, + 0x30, 0xb5, 0xce, 0x71, 0x73, 0x83, 0x9c, 0x0d, + 0x70, 0x8d, 0x4b, 0x5b, 0x36, 0xa3, 0x2c, 0xb9, + 0x85, 0xac, 0xcc, 0x20, 0x38, 0x81, 0xad, 0x30, + 0x87, 0xb6, 0xbb, 0xe1, 0x68, 0xcd, 0x36, 0xa6, + 0x19, 0x2d, 0x9d, 0x6b, 0x60, 0xc7, 0x34, 0x3c, + 0x61, 0xe7, 0x1d, 0x46, 0x80, 0xdd, 0xdc, 0x20, + 0x6f, 0xae, 0x11, 0xbe, 0x62, 0x29, 0xa7, 0x18, + 0x9f, 0x16, 0xc9, 0xec, 0xef, 0xbe, 0x59, 0xb4, + 0x5a, 0x26, 0x3e, 0xd9, 0xe3, 0xc5, 0x23, 0xb2, + 0xce, 0x63, 0xac, 0x26, 0x6b, 0x68, 0x00, 0x99, + 0xda, 0x06, 0xf5, 0x1b, 0xc4, 0xa1, 0x32, 0xe6, + 0x3f, 0xe2, 0x16, 0x32, 0x9a, 0x5b, 0x2b, 0x89, + 0xed, 0x0a, 0xd4, 0xad, 0x39, 0x1e, 0x74, 0xec, + 0xb2, 0x67, 0xe2, 0x69, 0x92, 0x09, 0x69, 0x8d, + 0xa3, 0x41, 0xa8, 0xfc, 0xe6, 0xef, 0xa9, 0x8f, + 0x88, 0xb6, 0x7e, 0x39, 0x5d, 0x77, 0x14, 0x2e, + 0xf6, 0x97, 0x8a, 0x17, 0x06, 0x51, 0xc6, 0xba, + 0xc5, 0x52, 0x6b, 0x6a, 0xda, 0xfa, 0x47, 0xdd, + 0x1a, 0x23, 0x75, 0x2f, 0x4c, 0x7a, 0xde, 0x29, + 0xb2, 0x63, 0x87, 0xb7, 0x4e, 0x4d, 0x99, 0xfb, + 0x80, 0xbf, 0xcb, 0x99, 0xba, 0x65, 0xc5, 0xdc, + 0xc4, 0xd5, 0x9d, 0xb0, 0x3f, 0xf6, 0x70, 0x76, + 0x65, 0xa7, 0x79, 0x40, 0x5c, 0xe7, 0x0f, 0xbb, + 0xcd, 0x23, 0xbc, 0x95, 0xa5, 0xac, 0x89, 0xed, + 0xc1, 0x18, 0xd6, 0x1a, 0xd3, 0x5d, 0xf0, 0xba, + 0xb3, 0xec, 0xfe, 0xd7, 0x32, 0xb7, 0x8e, 0x38, + 0x59, 0x23, 0x30, 0x3b, 0x19, 0xc6, 0x00, 0xa8, + 0x22, 0x9a, 0x30, 0x92, 0xa7, 0x65, 0xa2, 0xd4, + 0xe0, 0x5f, 0x35, 0x6d, 0x19, 0xf5, 0x9d, 0x37, + 0x5b, 0x6d, 0x7f, 0x04, 0xee, 0x4d, 0xfe, 0x9f, + 0x8c, 0xff, 0x00, 0x52, 0x5f, 0xac, 0xf5, 0x13, + 0xb2, 0x04, 0x9b, 0xcb, 0x81, 0xfe, 0x10, 0xfa, + 0xcb, 0x19, 0x7e, 0xd2, 0x5a, 0x5a, 0xe5, 0x6d, + 0xb2, 0x7c, 0x72, 0x19, 0x03, 0x5e, 0xdc, 0x40, + 0x37, 0x0d, 0x5c, 0x5c, 0xef, 0x9c, 0x37, 0xd7, + 0x0e, 0x43, 0x9b, 0x43, 0x96, 0xcf, 0x24, 0xd3, + 0x35, 0xef, 0x12, 0x30, 0x34, 0x06, 0x01, 0xbe, + 0x0e, 0x9a, 0xb9, 0x36, 0xce, 0x99, 0x38, 0x7b, + 0x75, 0x47, 0x72, 0x9b, 0xbc, 0xbc, 0xee, 0xfe, + 0x1c, 0x71, 0xf9, 0x26, 0x64, 0x3f, 0xfd, 0xb9, + 0x83, 0xfa, 0xa3, 0xea, 0x95, 0xa3, 0x6c, 0x4d, + 0x2e, 0x2d, 0x7b, 0x2c, 0x7f, 0x84, 0x2e, 0x37, + 0xe7, 0x76, 0xee, 0xcf, 0x59, 0x99, 0x06, 0x3c, + 0x44, 0x05, 0x0b, 0x08, 0x18, 0xf5, 0x16, 0xe8, + 0xf1, 0xa8, 0xb5, 0xe7, 0xf9, 0xbc, 0x19, 0x9c, + 0xd0, 0x3e, 0x06, 0xb9, 0x82, 0x26, 0x96, 0x90, + 0xf0, 0x35, 0xb8, 0x82, 0x35, 0x39, 0x4d, 0x69, + 0x68, 0xbd, 0x67, 0x4f, 0xd5, 0x45, 0xef, 0x4e, + 0xd6, 0x48, 0x89, 0xd6, 0x6d, 0x7d, 0xd1, 0x0b, + 0x1d, 0xe9, 0xa6, 0xcd, 0x1f, 0xfc, 0x76, 0x78, + 0x1a, 0xb9, 0x36, 0x3b, 0x4c, 0x37, 0x5d, 0x87, + 0xb7, 0xc0, 0x57, 0x15, 0xc6, 0xd2, 0x59, 0xcd, + 0x93, 0x9b, 0x26, 0xc7, 0x27, 0x39, 0xcd, 0x35, + 0x98, 0x88, 0x18, 0x6b, 0x41, 0xfd, 0x6a, 0xee, + 0x2d, 0x19, 0x0e, 0x77, 0x6f, 0x96, 0x47, 0x30, + 0x9d, 0x92, 0x3f, 0x9d, 0x70, 0x23, 0x00, 0x04, + 0x50, 0x54, 0x6e, 0x90, 0xab, 0xb6, 0xd3, 0x8e, + 0xd1, 0xa7, 0xb7, 0x55, 0xfb, 0xb4, 0xef, 0x63, + 0xb6, 0xbf, 0x6d, 0x36, 0xe9, 0xca, 0x5b, 0xc5, + 0xbe, 0x67, 0x26, 0x73, 0x77, 0x36, 0x5c, 0x40, + 0x7c, 0x52, 0x38, 0x3a, 0xa4, 0x01, 0xa4, 0x9d, + 0x04, 0x1d, 0x61, 0x48, 0xd9, 0x6d, 0x14, 0x8f, + 0xbc, 0x16, 0x17, 0xb0, 0x86, 0xcc, 0x5e, 0x63, + 0xc4, 0xc3, 0x56, 0xe2, 0x1d, 0x82, 0xa1, 0xad, + 0x33, 0xe6, 0xda, 0xe6, 0xb7, 0x17, 0x6d, 0x61, + 0x7c, 0x17, 0x24, 0xe2, 0x66, 0x80, 0xe0, 0x2b, + 0xa0, 0x8d, 0x24, 0x55, 0x49, 0xf5, 0xfe, 0xce, + 0xf3, 0xfe, 0xd8, 0x20, 0x73, 0xae, 0xbe, 0x76, + 0x01, 0x8f, 0x89, 0x2f, 0x13, 0xc3, 0xe8, 0xd7, + 0x84, 0x69, 0x28, 0xc7, 0x68, 0x8d, 0x66, 0xb9, + 0x22, 0xba, 0xda, 0xd3, 0x6a, 0xdb, 0xc2, 0x63, + 0x5f, 0x63, 0x9b, 0x6a, 0x6c, 0xad, 0xed, 0xe5, + 0x8a, 0x68, 0x5a, 0x19, 0xce, 0x92, 0x24, 0x0d, + 0x14, 0xa9, 0x1b, 0xaa, 0x0b, 0x12, 0xeb, 0xce, + 0x73, 0x87, 0x66, 0x77, 0x01, 0xd8, 0x79, 0xb8, + 0xa3, 0x04, 0x46, 0xcd, 0xda, 0x9d, 0xd7, 0x2e, + 0x0c, 0x4b, 0xb6, 0x3d, 0x76, 0xe9, 0x3e, 0xce, + 0x6c, 0xf9, 0xe6, 0xb6, 0xc9, 0x33, 0x5f, 0x0d, + 0x57, 0xc2, 0xe7, 0x47, 0xb3, 0xcd, 0x92, 0x37, + 0x16, 0xbd, 0xb6, 0xad, 0x2d, 0x70, 0xd6, 0x0e, + 0x00, 0xa9, 0xb2, 0xe6, 0x17, 0xb3, 0x37, 0x0c, + 0x93, 0xc8, 0xf1, 0xbc, 0x5c, 0x54, 0xc3, 0xb6, + 0x9a, 0xcd, 0xd9, 0x4f, 0xb0, 0xf3, 0x72, 0x89, + 0x39, 0x91, 0x16, 0x2a, 0x36, 0x98, 0x83, 0x70, + 0xd7, 0xca, 0x55, 0xdc, 0x4a, 0x98, 0x6b, 0x3c, + 0x66, 0xd1, 0xed, 0x74, 0xf3, 0x59, 0x37, 0x6c, + 0x8a, 0xcc, 0xf1, 0x8e, 0x2b, 0x2e, 0xc7, 0xb8, + 0x73, 0xd7, 0x4c, 0x1a, 0x0e, 0x16, 0x90, 0x07, + 0x6c, 0xaf, 0x79, 0x96, 0x77, 0x99, 0x41, 0x99, + 0xbe, 0xca, 0x1c, 0x07, 0xc6, 0x68, 0x88, 0x38, + 0x69, 0x35, 0x0d, 0xf9, 0x6a, 0xa0, 0x72, 0xbc, + 0xca, 0x4c, 0xb6, 0xe9, 0xb3, 0xb0, 0x62, 0xd1, + 0x86, 0x46, 0x6e, 0x10, 0xac, 0x2e, 0xda, 0x2c, + 0x86, 0x59, 0x5b, 0x75, 0x2c, 0x2e, 0x37, 0x2c, + 0x14, 0x6b, 0x8b, 0x01, 0x70, 0xed, 0x1a, 0xa8, + 0xb5, 0x6d, 0xbe, 0x6d, 0xb7, 0x76, 0xbc, 0xd7, + 0xc5, 0x7a, 0xce, 0x1a, 0xd2, 0x32, 0x6c, 0xdb, + 0x6e, 0x31, 0xed, 0x97, 0x2e, 0x76, 0xfc, 0xdd, + 0xb1, 0x44, 0xcb, 0xfe, 0x6f, 0x03, 0xa4, 0xab, + 0x70, 0x6b, 0xa8, 0xdf, 0x52, 0x9b, 0x50, 0x29, + 0x95, 0x13, 0xfe, 0x23, 0x3c, 0x2a, 0xb7, 0x9c, + 0xe7, 0x2e, 0xcc, 0xae, 0x18, 0xe0, 0xd2, 0xc8, + 0x62, 0xfd, 0x9b, 0x09, 0xa9, 0x35, 0xfc, 0xe3, + 0xa4, 0x69, 0x5d, 0xd9, 0xce, 0xd1, 0xda, 0x66, + 0x36, 0x26, 0xda, 0x18, 0xe4, 0x6b, 0xf1, 0x35, + 0xd8, 0x9e, 0x05, 0x34, 0x13, 0xd9, 0x2a, 0xb3, + 0x5b, 0x7d, 0x13, 0xa6, 0x9c, 0x65, 0x68, 0xc9, + 0x8f, 0xfd, 0xd8, 0x9b, 0x4d, 0xb8, 0x44, 0x6b, + 0x3c, 0x5a, 0x76, 0x60, 0x93, 0x9b, 0xc7, 0xd9, + 0x63, 0xd7, 0x7e, 0xd0, 0x10, 0x33, 0xbc, 0xbf, + 0xb2, 0x5b, 0xf5, 0xc2, 0x84, 0xc9, 0xb3, 0x18, + 0xac, 0x2f, 0x9b, 0x71, 0x28, 0x73, 0x98, 0xd6, + 0x11, 0x46, 0xd0, 0x9a, 0x9e, 0xd9, 0x0b, 0xb6, + 0xfb, 0x35, 0x83, 0x32, 0xcd, 0xec, 0x65, 0x85, + 0x8e, 0x63, 0x58, 0xf6, 0x34, 0x87, 0x81, 0xa6, + 0xaf, 0x1a, 0xa8, 0x4a, 0xb5, 0xeb, 0x33, 0x7d, + 0xda, 0x7b, 0x1c, 0xa9, 0x68, 0x8f, 0x2f, 0x34, + 0x9f, 0xbb, 0x74, 0x4e, 0x9f, 0x8a, 0x5f, 0x6b, + 0x1a, 0xee, 0xaf, 0x61, 0xdc, 0x6c, 0xa0, 0xb8, + 0xf6, 0x28, 0x74, 0xaf, 0x5b, 0x2e, 0x08, 0xca, + 0x71, 0xbb, 0x40, 0x2f, 0x79, 0x1d, 0xad, 0x1a, + 0x57, 0x46, 0x73, 0x98, 0x45, 0x65, 0x04, 0x6f, + 0x9e, 0x31, 0x34, 0x32, 0x3f, 0x04, 0x8d, 0xd7, + 0xa2, 0x9b, 0x81, 0x45, 0xdf, 0x6d, 0x4d, 0x97, + 0xb2, 0x3a, 0x0c, 0xbd, 0x8e, 0x0f, 0x73, 0x70, + 0x83, 0x4c, 0x21, 0xa0, 0xe8, 0xd0, 0xb9, 0xd7, + 0x74, 0xd2, 0x2b, 0x11, 0xfa, 0xcd, 0x36, 0xd9, + 0x4c, 0xd7, 0xc9, 0x36, 0xd2, 0xfb, 0x74, 0xdb, + 0x3f, 0xe0, 0xdf, 0xb2, 0x84, 0x39, 0xb7, 0xae, + 0xd6, 0x0c, 0xa0, 0x8e, 0x05, 0x18, 0xd3, 0xff, + 0x00, 0xda, 0x29, 0xff, 0x00, 0xf1, 0x05, 0x79, + 0xc8, 0x33, 0xcb, 0x6c, 0xb2, 0x29, 0x9b, 0x3b, + 0x24, 0x7f, 0x3a, 0xe0, 0xe6, 0xe0, 0x00, 0x8a, + 0x53, 0xb2, 0x42, 0xe4, 0x6e, 0x63, 0x10, 0xce, + 0x7d, 0xbc, 0xb5, 0xdc, 0xd7, 0x39, 0xce, 0x61, + 0xd1, 0x8a, 0x9c, 0xa5, 0xd2, 0x29, 0x31, 0x6c, + 0x9e, 0xde, 0x0e, 0x16, 0xbd, 0x27, 0x1e, 0x2a, + 0xee, 0xe3, 0x16, 0xd6, 0x74, 0x58, 0xf6, 0x91, + 0xe1, 0x97, 0x19, 0x6b, 0xdc, 0x68, 0x1b, 0x3e, + 0x23, 0xdc, 0x2d, 0x5d, 0x19, 0xfd, 0xf5, 0xcd, + 0x85, 0xac, 0x73, 0xdb, 0x80, 0x49, 0x78, 0x6b, + 0xaa, 0x2a, 0x34, 0xaa, 0xfe, 0x7f, 0x9e, 0x5b, + 0xe6, 0x4c, 0x81, 0xb0, 0x35, 0xf1, 0xba, 0x27, + 0x12, 0x4b, 0xc0, 0xa7, 0x8d, 0x4d, 0xe2, 0x77, + 0x97, 0x6d, 0xb6, 0xd3, 0xd8, 0x5c, 0x5a, 0x8b, + 0x7c, 0xd2, 0x12, 0xe2, 0x3c, 0xa3, 0x4c, 0x4d, + 0x75, 0x3f, 0x39, 0x52, 0x71, 0xce, 0xda, 0x70, + 0xd7, 0x4d, 0x78, 0x3a, 0x4e, 0x5a, 0x4d, 0xb2, + 0xd6, 0x2d, 0xb6, 0x6f, 0xb6, 0x62, 0xd3, 0xee, + 0x86, 0xcb, 0x5b, 0xfd, 0xa1, 0xba, 0xb3, 0x37, + 0x51, 0xf3, 0x3c, 0xd1, 0xc5, 0xe5, 0x68, 0x34, + 0x1b, 0xcb, 0xa3, 0x64, 0xf4, 0xe5, 0xae, 0x27, + 0x72, 0x57, 0x28, 0xec, 0xc7, 0x68, 0xed, 0x0d, + 0x99, 0xb3, 0xcb, 0x22, 0x31, 0xc6, 0xe6, 0xe1, + 0x2f, 0x20, 0x34, 0x35, 0xbb, 0xc1, 0xab, 0x5e, + 0x47, 0xb4, 0x16, 0x99, 0x6d, 0x99, 0xb7, 0x96, + 0x39, 0x1e, 0xe2, 0xf2, 0xea, 0xb0, 0x02, 0x28, + 0x7b, 0x6e, 0x0a, 0x66, 0xb6, 0x98, 0x9d, 0x2b, + 0xa7, 0xc2, 0x0a, 0xe4, 0xac, 0x65, 0xaf, 0xfb, + 0x9b, 0xf4, 0xaf, 0xd5, 0x6d, 0x78, 0x6b, 0xed, + 0xd1, 0x17, 0x70, 0x6b, 0x79, 0x28, 0xff, 0x00, + 0x11, 0xc2, 0xbf, 0xda, 0x2a, 0xd9, 0x76, 0x60, + 0xc8, 0x72, 0xd6, 0xba, 0xde, 0x26, 0x97, 0x82, + 0xd8, 0xda, 0x48, 0xd6, 0x48, 0xf2, 0x89, 0x54, + 0xd9, 0xa5, 0xc7, 0x3c, 0x92, 0x37, 0x46, 0x27, + 0xb9, 0xc2, 0xba, 0xf4, 0x9a, 0xab, 0x2b, 0x76, + 0x9b, 0x2a, 0xb9, 0xb3, 0x10, 0xe6, 0x31, 0x17, + 0xbe, 0x83, 0x1c, 0x78, 0x43, 0x9a, 0xe2, 0x37, + 0x41, 0xdc, 0x57, 0xc9, 0x16, 0xd2, 0x9a, 0x71, + 0xe6, 0xe5, 0xe5, 0xe6, 0x91, 0x39, 0x22, 0x7e, + 0x89, 0xbf, 0xdb, 0x36, 0xf6, 0x7c, 0x12, 0x59, + 0x1d, 0xed, 0xc5, 0xf5, 0x81, 0xb9, 0x9c, 0x8c, + 0x6e, 0x73, 0x80, 0xa0, 0xa0, 0xc2, 0x35, 0x28, + 0xcd, 0x91, 0x35, 0xb9, 0xbc, 0xed, 0x33, 0xc2, + 0xe4, 0xb5, 0xda, 0xcb, 0x18, 0xd8, 0xe8, 0xfd, + 0x9d, 0xec, 0x88, 0x1f, 0xd5, 0x08, 0xc3, 0x7c, + 0x8f, 0xeb, 0x55, 0xca, 0x3b, 0x23, 0xce, 0xad, + 0xb2, 0xd9, 0xee, 0xa4, 0x91, 0x8f, 0x73, 0x26, + 0xa7, 0x36, 0x19, 0x42, 0x40, 0x0e, 0x76, 0xba, + 0xbb, 0xb2, 0xb9, 0xec, 0x9d, 0x2d, 0xa5, 0x7c, + 0x5d, 0x3b, 0x95, 0xdd, 0x83, 0xeb, 0x8b, 0x6d, + 0x8b, 0xcc, 0xcf, 0xb5, 0xd5, 0x7d, 0x05, 0xf4, + 0xfb, 0x41, 0x3f, 0xb1, 0x10, 0xd9, 0xa2, 0xa3, + 0xc1, 0xa8, 0x1b, 0x80, 0x6e, 0xae, 0xc8, 0xf6, + 0x86, 0xe6, 0xd6, 0xef, 0xd9, 0x33, 0x38, 0x80, + 0x92, 0xa0, 0x3a, 0x48, 0xce, 0x8f, 0x1b, 0xc9, + 0xf1, 0x54, 0x41, 0xcf, 0x44, 0x79, 0xd3, 0xf3, + 0x18, 0x18, 0x4c, 0x6f, 0xa3, 0x4b, 0x1d, 0x40, + 0x4b, 0x48, 0x15, 0xd4, 0x4e, 0xf2, 0x95, 0x76, + 0x7f, 0xb3, 0xb3, 0x48, 0xdb, 0x89, 0xe1, 0x71, + 0x9d, 0x94, 0xc2, 0x5c, 0xc0, 0x5c, 0x29, 0xb9, + 0x55, 0x6b, 0x44, 0xe9, 0x11, 0x6a, 0xeb, 0xc3, + 0xd9, 0xe2, 0x8c, 0x76, 0xac, 0x5a, 0xd3, 0x5c, + 0x9b, 0x66, 0x6d, 0xaf, 0x1f, 0x06, 0x36, 0xae, + 0xca, 0xde, 0x38, 0x19, 0x79, 0x1b, 0x43, 0x64, + 0xc7, 0x81, 0xf4, 0x14, 0xa8, 0x20, 0x9f, 0x91, + 0x56, 0xb1, 0x29, 0x1c, 0xf3, 0x3e, 0x76, 0x64, + 0x5b, 0x1c, 0x71, 0x98, 0xe1, 0x61, 0xa8, 0x0e, + 0xd6, 0x4e, 0xfe, 0x85, 0x13, 0x89, 0x74, 0xc7, + 0xba, 0x29, 0xc6, 0x7f, 0xf2, 0xe1, 0xe6, 0x26, + 0x96, 0xc9, 0xad, 0x79, 0x7b, 0x3c, 0x1b, 0x71, + 0x26, 0x25, 0xaf, 0x12, 0x62, 0x56, 0x71, 0xda, + 0xef, 0xca, 0x1d, 0xfe, 0x69, 0x6b, 0xf6, 0xad, + 0xf0, 0xab, 0x16, 0x6d, 0xef, 0xae, 0xed, 0x37, + 0xc0, 0xab, 0x59, 0x3b, 0xbf, 0xcd, 0x6d, 0x3e, + 0xd5, 0xbe, 0x15, 0x65, 0xcd, 0xbd, 0xf5, 0xde, + 0x6b, 0x7c, 0x0b, 0x3f, 0x98, 0xf1, 0x8f, 0x83, + 0xd0, 0xf2, 0x31, 0xa5, 0x2f, 0xf1, 0x68, 0xb6, + 0xf7, 0x88, 0xbc, 0xf1, 0xe1, 0x5c, 0x7b, 0x58, + 0x69, 0x99, 0xb7, 0xec, 0xc7, 0x84, 0xae, 0xcb, + 0x6f, 0x78, 0x8b, 0xce, 0x1e, 0x15, 0xc1, 0xb5, + 0xe6, 0x99, 0xa3, 0x7e, 0xc8, 0x78, 0x4a, 0x8c, + 0x1f, 0xc4, 0x8f, 0x83, 0xa7, 0x9e, 0xfe, 0x0f, + 0xe3, 0x08, 0x8c, 0x49, 0x89, 0x6b, 0xc4, 0x98, + 0x96, 0x97, 0x97, 0xb5, 0xb3, 0x12, 0x62, 0x5a, + 0xf1, 0x26, 0x24, 0x36, 0xb6, 0x62, 0x4c, 0x4b, + 0x5e, 0x24, 0xc4, 0x86, 0xd6, 0xcc, 0x49, 0x89, + 0x6b, 0xc4, 0x98, 0x90, 0xda, 0xd9, 0x89, 0x31, + 0x2d, 0x78, 0x93, 0x12, 0x1b, 0x5b, 0x31, 0x26, + 0x25, 0xaf, 0x12, 0x62, 0x43, 0x6b, 0x66, 0x24, + 0xc4, 0xb5, 0xe2, 0x4c, 0x48, 0x6d, 0x6c, 0xc4, + 0x98, 0x96, 0xbc, 0x48, 0x0d, 0x74, 0x6e, 0x9d, + 0x00, 0xa1, 0xb5, 0x6d, 0xd9, 0x2b, 0x7f, 0xfb, + 0x69, 0x67, 0x3a, 0xe4, 0x7e, 0x16, 0xf6, 0x9a, + 0x34, 0xf8, 0x56, 0xe9, 0x73, 0xbd, 0x9e, 0x13, + 0x38, 0xc9, 0xe3, 0x48, 0xc3, 0x42, 0xee, 0x6d, + 0xc7, 0x4b, 0x7b, 0x34, 0x51, 0x16, 0x1b, 0x4c, + 0xdb, 0x2b, 0x18, 0xed, 0x59, 0x6b, 0x5c, 0x00, + 0x82, 0xfc, 0x74, 0xd2, 0x74, 0x93, 0x4c, 0x27, + 0x75, 0x41, 0x97, 0x92, 0x49, 0x26, 0xa4, 0x92, + 0x49, 0xed, 0xf0, 0x2e, 0x51, 0x8e, 0x6d, 0x79, + 0x9b, 0x4e, 0x91, 0xcf, 0xdc, 0xd7, 0x3e, 0x62, + 0x29, 0x8a, 0x95, 0xa4, 0x45, 0xad, 0xc3, 0x58, + 0xf7, 0xaf, 0x19, 0xe4, 0x6c, 0xbb, 0xc9, 0x5f, + 0x34, 0x47, 0x10, 0x0d, 0x13, 0x46, 0x77, 0xc0, + 0xd3, 0xe0, 0x58, 0xc8, 0xcf, 0xf9, 0x0b, 0x4f, + 0xf5, 0x64, 0xf0, 0xb9, 0x42, 0x5a, 0x6d, 0x47, + 0x31, 0x60, 0xcb, 0x39, 0x2d, 0xf9, 0xc6, 0xb1, + 0x98, 0x0b, 0xf1, 0xd3, 0x45, 0x29, 0xab, 0x06, + 0xf2, 0xf3, 0x63, 0xb4, 0xbe, 0xc9, 0x97, 0x8b, + 0x21, 0x6e, 0x5d, 0x46, 0xb9, 0xa1, 0xf8, 0xfe, + 0x75, 0x7f, 0xab, 0xd9, 0x55, 0xed, 0xdb, 0x6c, + 0xc6, 0x9e, 0x12, 0xeb, 0xde, 0xc7, 0xbe, 0x2f, + 0xaf, 0xdd, 0x59, 0x6d, 0xd9, 0x37, 0x57, 0x32, + 0x90, 0x7f, 0x84, 0x7c, 0x2b, 0xb6, 0xfa, 0x08, + 0xee, 0x76, 0x9e, 0xde, 0x29, 0x86, 0x28, 0xf9, + 0xa0, 0xe7, 0x34, 0xea, 0x34, 0xc4, 0x68, 0xa0, + 0x32, 0x7c, 0xd0, 0xe5, 0xb7, 0x46, 0x71, 0x17, + 0x3a, 0x5c, 0xd2, 0xcc, 0x38, 0xb0, 0xd2, 0xa4, + 0x1d, 0xe3, 0xbc, 0xb6, 0xdd, 0xe7, 0xb2, 0xcf, + 0x99, 0x45, 0x98, 0x45, 0x1f, 0x34, 0xf8, 0xc0, + 0x01, 0x85, 0xd5, 0xa8, 0x15, 0xae, 0x9c, 0x21, + 0x5e, 0x71, 0xda, 0x6f, 0x3a, 0x47, 0xea, 0xb8, + 0xd3, 0x25, 0x23, 0x14, 0x56, 0x7d, 0x99, 0x37, + 0xa6, 0xf6, 0x8f, 0x34, 0xbc, 0xb2, 0x7c, 0x56, + 0xf6, 0xa7, 0x9a, 0xe7, 0x1a, 0x4e, 0x20, 0x05, + 0x4e, 0x9a, 0x61, 0x6e, 0x85, 0xd3, 0x9a, 0x63, + 0xf8, 0x7a, 0x4e, 0x70, 0x92, 0xfe, 0x69, 0xb8, + 0x89, 0xd7, 0x5d, 0x0a, 0x36, 0x6d, 0xaf, 0x82, + 0x48, 0xc1, 0x16, 0xb5, 0x98, 0x0f, 0x14, 0xb8, + 0x8a, 0x34, 0xd3, 0x58, 0xaa, 0xe6, 0xba, 0xda, + 0x87, 0xdd, 0xd8, 0x3e, 0xd2, 0x68, 0x3c, 0x79, + 0x59, 0x85, 0xd2, 0x35, 0xf4, 0xf1, 0x8e, 0xee, + 0x1c, 0x26, 0x8b, 0x9c, 0x56, 0xdf, 0x47, 0xd3, + 0xe1, 0x3e, 0x2e, 0xb7, 0xcb, 0x8e, 0x7b, 0xbf, + 0x5c, 0xfd, 0x75, 0xd2, 0xb1, 0xec, 0x8f, 0x82, + 0x73, 0x66, 0x74, 0xe4, 0xed, 0xf3, 0x9f, 0xe1, + 0x5c, 0xbb, 0x29, 0x23, 0x4c, 0x57, 0x51, 0xee, + 0xb2, 0x5c, 0x5d, 0xc3, 0xa1, 0x46, 0x65, 0x9b, + 0x4a, 0xec, 0xbe, 0xcc, 0x5a, 0xfb, 0x3f, 0x39, + 0x42, 0xe2, 0x1f, 0x8e, 0x9e, 0x51, 0xae, 0xac, + 0x0b, 0x87, 0x2e, 0xcd, 0x67, 0xcb, 0xee, 0x8c, + 0xf1, 0x00, 0xe0, 0xed, 0x12, 0x46, 0x75, 0x10, + 0x4d, 0x75, 0xab, 0x6c, 0x9d, 0x32, 0x7c, 0x55, + 0xae, 0x6a, 0x57, 0xb3, 0x3a, 0xfd, 0x91, 0xa4, + 0xbb, 0x79, 0x99, 0x3e, 0x26, 0x31, 0x69, 0xc4, + 0x6e, 0x0b, 0xbf, 0xb3, 0x5c, 0x55, 0xa7, 0x69, + 0x4b, 0x6d, 0x3c, 0xed, 0x67, 0xb1, 0x07, 0x1a, + 0x01, 0x38, 0x92, 0x9f, 0xd5, 0x6a, 0xe7, 0xf8, + 0xc2, 0xd6, 0xbc, 0xe0, 0xb4, 0x3c, 0xee, 0xac, + 0x55, 0x6f, 0x85, 0x41, 0x66, 0x19, 0x8d, 0xc6, + 0x67, 0x74, 0x24, 0x96, 0x82, 0xbe, 0x24, 0x4c, + 0x1a, 0x80, 0x27, 0x55, 0x4a, 0x98, 0x8b, 0x5a, + 0xd1, 0xba, 0x3e, 0xd8, 0x44, 0xdb, 0x1e, 0x3a, + 0xda, 0xb4, 0x99, 0xbd, 0xb2, 0x5b, 0x5d, 0x16, + 0xcd, 0xa5, 0xb7, 0x96, 0xe7, 0x2d, 0x0e, 0x81, + 0xa6, 0x42, 0xc7, 0x87, 0xe1, 0x6e, 0x92, 0x41, + 0xde, 0xe1, 0x5e, 0xf6, 0x6a, 0xda, 0x5b, 0x7c, + 0xb5, 0xad, 0x99, 0xa5, 0x8f, 0x7b, 0x9c, 0xfc, + 0x27, 0x41, 0x5c, 0x02, 0xfb, 0x3e, 0xca, 0xec, + 0x9b, 0xed, 0x76, 0xec, 0x9a, 0x36, 0x00, 0xd6, + 0xc8, 0x1d, 0x57, 0x0d, 0xe0, 0xec, 0x35, 0xe1, + 0x52, 0x39, 0x25, 0xdd, 0xd4, 0xf6, 0x2f, 0xbb, + 0xbd, 0x18, 0x4b, 0x9e, 0xe7, 0x01, 0x4a, 0x00, + 0xc6, 0x80, 0x34, 0x03, 0xda, 0x2b, 0x95, 0xb5, + 0xd9, 0x31, 0xe3, 0x5d, 0x5a, 0x2b, 0xb6, 0x73, + 0x6e, 0x9d, 0x62, 0xdb, 0x78, 0xc4, 0xa9, 0x52, + 0x9f, 0xd6, 0xbf, 0xce, 0x3e, 0x15, 0xe7, 0x12, + 0xf0, 0xf7, 0x55, 0xee, 0x3b, 0xee, 0x2b, 0x18, + 0x96, 0xbe, 0x5f, 0x08, 0x79, 0x96, 0x8d, 0x6d, + 0x33, 0xef, 0x96, 0xcc, 0x49, 0x89, 0x6b, 0xc4, + 0x98, 0x94, 0x23, 0x6b, 0x66, 0x24, 0xc4, 0xb5, + 0xe2, 0x4c, 0x48, 0x6d, 0x6c, 0xc4, 0x98, 0x96, + 0xbc, 0x49, 0x89, 0x0d, 0xad, 0x98, 0x93, 0x12, + 0xd7, 0x89, 0x31, 0x21, 0xb5, 0xb3, 0x12, 0x62, + 0x5a, 0xf1, 0x26, 0x24, 0x36, 0xb6, 0x62, 0x4c, + 0x4b, 0x5e, 0x24, 0xc4, 0x86, 0xd6, 0xcc, 0x49, + 0x89, 0x6b, 0xc4, 0x98, 0x90, 0xda, 0xeb, 0xb0, + 0x77, 0xfd, 0xfd, 0xb7, 0xdb, 0x33, 0xeb, 0x05, + 0x69, 0xce, 0x7d, 0xe8, 0x79, 0x9c, 0x6a, 0xa5, + 0x97, 0x9a, 0xdf, 0xdb, 0x7d, 0xb4, 0x7f, 0x58, + 0x2b, 0x76, 0x73, 0xef, 0x43, 0xcd, 0x1f, 0x2a, + 0xcf, 0xe6, 0x3c, 0x6a, 0xf4, 0x3c, 0x8c, 0x69, + 0x4b, 0xfc, 0x5c, 0x70, 0xfe, 0xd6, 0x3f, 0x39, + 0xbe, 0x15, 0x2c, 0xa2, 0x61, 0xfd, 0xb3, 0x3c, + 0xe6, 0xf8, 0x54, 0xb2, 0xe3, 0x2d, 0x82, 0x8f, + 0xcc, 0xbd, 0xea, 0xd3, 0xed, 0x3e, 0x50, 0xa4, + 0x14, 0x7e, 0x65, 0xef, 0x56, 0x9f, 0x69, 0xf2, + 0x84, 0x18, 0xcb, 0x3d, 0xea, 0xf3, 0xcf, 0x3e, + 0x12, 0xa4, 0x54, 0x76, 0x59, 0xef, 0x57, 0x9e, + 0x79, 0xf0, 0x95, 0x22, 0x83, 0x0e, 0xd4, 0x54, + 0x39, 0xd6, 0x54, 0xc3, 0xb5, 0x15, 0x0e, 0x75, + 0x94, 0x0d, 0x35, 0xd1, 0xb8, 0x56, 0xfc, 0xdd, + 0x9c, 0xfe, 0xcd, 0x07, 0x33, 0x5d, 0xbb, 0x83, + 0x88, 0xf3, 0x4d, 0x3f, 0xbc, 0xb4, 0x2e, 0xcc, + 0xba, 0x76, 0x02, 0xfb, 0x59, 0xb4, 0xc5, 0x38, + 0x22, 0x87, 0x7c, 0xe8, 0x3d, 0xe5, 0x35, 0x9d, + 0x26, 0x25, 0x5b, 0xd7, 0x75, 0x66, 0xbd, 0x51, + 0xa2, 0x91, 0x5d, 0x03, 0xb4, 0x13, 0x12, 0xee, + 0xce, 0xf2, 0x89, 0xf2, 0xab, 0xa2, 0xd2, 0x2b, + 0x6c, 0xf3, 0xfa, 0x89, 0x37, 0x29, 0xf3, 0x4f, + 0x64, 0x28, 0xec, 0x43, 0x7f, 0x52, 0xd7, 0x13, + 0xbb, 0x8b, 0xca, 0xb5, 0x36, 0xcc, 0xc4, 0xf0, + 0xd3, 0x83, 0xde, 0x24, 0xc4, 0xbc, 0x62, 0x58, + 0xc4, 0x14, 0xaa, 0xd9, 0x89, 0x2a, 0xb5, 0xe2, + 0x09, 0x88, 0x20, 0xd9, 0x89, 0x31, 0x2d, 0x78, + 0x82, 0x62, 0x08, 0x36, 0x55, 0x31, 0x2d, 0x78, + 0x82, 0x62, 0x08, 0x36, 0x55, 0x31, 0x2d, 0x78, + 0x82, 0x62, 0x08, 0x36, 0x55, 0x31, 0x2d, 0x78, + 0x82, 0x62, 0x08, 0x36, 0x62, 0x4c, 0x4b, 0x5e, + 0x20, 0x98, 0x82, 0x0d, 0x98, 0x93, 0x12, 0xd7, + 0x88, 0x26, 0x20, 0x83, 0x66, 0x24, 0xc4, 0xb5, + 0xe2, 0x09, 0x88, 0x20, 0xd9, 0x89, 0x31, 0x2d, + 0x78, 0x82, 0x62, 0x08, 0x36, 0x62, 0x4a, 0xad, + 0x78, 0x82, 0x62, 0x08, 0x36, 0x55, 0x31, 0x2d, + 0x78, 0x82, 0x62, 0x08, 0x36, 0x62, 0x59, 0x63, + 0xf0, 0xbd, 0xae, 0xd7, 0x42, 0x0d, 0x3b, 0x46, + 0xbd, 0x95, 0xab, 0x10, 0x4c, 0x49, 0x31, 0xac, + 0x68, 0x71, 0xf6, 0x2c, 0x19, 0xbe, 0xd2, 0x37, + 0x32, 0xb4, 0xf6, 0x56, 0xdb, 0x98, 0xea, 0xe0, + 0xec, 0x45, 0xd5, 0xef, 0x50, 0x28, 0x3c, 0x4b, + 0xc6, 0x20, 0x98, 0x82, 0x88, 0xac, 0x44, 0x69, + 0x10, 0xbd, 0xef, 0x36, 0xb6, 0xb3, 0xec, 0x87, + 0xbc, 0x49, 0x89, 0x6b, 0xc4, 0x13, 0x10, 0x52, + 0xa3, 0x66, 0x24, 0xc4, 0xb5, 0xe2, 0x09, 0x88, + 0x20, 0xd9, 0x89, 0x2a, 0xb5, 0xe2, 0x09, 0x88, + 0x20, 0xd9, 0x89, 0x31, 0x2d, 0x78, 0x82, 0x62, + 0x08, 0x36, 0x55, 0x31, 0x2d, 0x78, 0x82, 0x62, + 0x08, 0x36, 0x55, 0x31, 0x2d, 0x78, 0x82, 0x62, + 0x08, 0x36, 0x62, 0x4c, 0x4b, 0x5e, 0x20, 0x98, + 0x82, 0x0d, 0x98, 0x93, 0x12, 0xd7, 0x88, 0x2c, + 0xd7, 0xbd, 0xa4, 0xa0, 0xf7, 0x8a, 0x8a, 0xf3, + 0x2c, 0x6e, 0xb6, 0xca, 0x2c, 0xad, 0x9f, 0xe5, + 0x86, 0xb4, 0x3b, 0xb6, 0x06, 0x95, 0x01, 0xb3, + 0x39, 0x2b, 0xef, 0x2e, 0x1b, 0x7b, 0x70, 0xda, + 0x5a, 0x42, 0x43, 0x81, 0x3a, 0x31, 0x38, 0x6a, + 0xfe, 0xc8, 0xdd, 0x53, 0x57, 0xf7, 0x42, 0xe2, + 0x72, 0x5b, 0xe4, 0x33, 0xc5, 0x6f, 0x71, 0x70, + 0xcf, 0x6d, 0x67, 0x4e, 0x4d, 0xde, 0x4f, 0x16, + 0xd8, 0x9b, 0x4f, 0xb5, 0xcc, 0x88, 0x8b, 0x8b, + 0x5b, 0x65, 0xb3, 0xc3, 0x2e, 0x22, 0x71, 0xd4, + 0x1c, 0x3b, 0xe6, 0x8a, 0x3b, 0x6c, 0x61, 0x7c, + 0x79, 0x93, 0x26, 0xfc, 0xc9, 0xa3, 0x14, 0xf3, + 0x9a, 0x48, 0x77, 0x7a, 0x8b, 0xb5, 0x75, 0xde, + 0x5a, 0x37, 0x3b, 0xcb, 0x39, 0x9c, 0x40, 0x5d, + 0xdb, 0xe9, 0x8d, 0xc7, 0xe7, 0x01, 0xbb, 0xd8, + 0x2a, 0xf8, 0xed, 0xb6, 0xda, 0xb9, 0x67, 0xc7, + 0xdc, 0xc7, 0x35, 0xfc, 0x54, 0x9c, 0x49, 0x89, + 0x62, 0x68, 0xe5, 0xb7, 0x95, 0xd0, 0xcc, 0xd3, + 0x1c, 0x91, 0x9a, 0x39, 0x8e, 0xd6, 0x0f, 0x12, + 0xf3, 0x89, 0x6a, 0xf1, 0xe3, 0x0f, 0x32, 0x63, + 0x4e, 0x13, 0xec, 0x7b, 0xc4, 0x98, 0x97, 0x8c, + 0x4b, 0x18, 0x82, 0x21, 0xb3, 0x12, 0x62, 0x5a, + 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xaa, 0x62, 0x5a, + 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xc4, 0x98, 0x96, + 0xbc, 0x41, 0x31, 0x04, 0x1b, 0x2a, 0x98, 0x96, + 0xbc, 0x41, 0x31, 0x04, 0x1b, 0x31, 0x26, 0x25, + 0xaf, 0x10, 0x4c, 0x41, 0x06, 0xcc, 0x49, 0x89, + 0x6b, 0xc4, 0x13, 0x10, 0x41, 0xb3, 0x12, 0x62, + 0x5a, 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xc4, 0x98, + 0x96, 0xbc, 0x41, 0x31, 0x04, 0x1b, 0x31, 0x26, + 0x25, 0xaf, 0x10, 0x4c, 0x41, 0x06, 0xcc, 0x49, + 0x55, 0xaf, 0x10, 0x4c, 0x41, 0x06, 0xcc, 0x49, + 0x89, 0x6b, 0xc4, 0x13, 0x10, 0x41, 0xb3, 0x12, + 0xdb, 0x6b, 0x30, 0x86, 0xe2, 0x29, 0x88, 0xaf, + 0x35, 0x23, 0x5f, 0xbd, 0xa8, 0xea, 0x5c, 0xd8, + 0x82, 0xce, 0x24, 0x98, 0xd6, 0x34, 0x94, 0xf1, + 0xd6, 0x26, 0x3d, 0x9c, 0x53, 0x99, 0xce, 0xd1, + 0x0c, 0xd2, 0xd9, 0x90, 0xb6, 0x13, 0x16, 0x17, + 0x07, 0x62, 0xc4, 0x0f, 0xc8, 0xa1, 0xb1, 0x2f, + 0x18, 0x96, 0x31, 0x05, 0x11, 0x11, 0x11, 0xa4, + 0x26, 0xd7, 0x9b, 0xce, 0xe9, 0x6c, 0xaa, 0x62, + 0x5a, 0xf1, 0x04, 0xc4, 0x14, 0xaa, 0xd9, 0x89, + 0x2a, 0xb5, 0xe2, 0x09, 0x88, 0x20, 0xd9, 0x54, + 0xc4, 0xb5, 0xe2, 0x09, 0x88, 0x20, 0xd9, 0x89, + 0x31, 0x2d, 0x78, 0x82, 0x62, 0x08, 0x36, 0x62, + 0xae, 0xb4, 0xc4, 0xb5, 0xe2, 0x09, 0x88, 0x20, + 0xd9, 0x89, 0x31, 0x2d, 0x78, 0x82, 0x62, 0x08, + 0x36, 0x55, 0x31, 0x2d, 0x78, 0x82, 0x62, 0x41, + 0xb3, 0x12, 0x57, 0x7d, 0x78, 0xc4, 0x80, 0x97, + 0x10, 0xd6, 0x8c, 0x4e, 0x26, 0x81, 0xa3, 0x59, + 0x3b, 0xc8, 0x9f, 0x1f, 0x0f, 0x14, 0xb6, 0xcd, + 0xc0, 0xeb, 0x8c, 0xe2, 0xde, 0x82, 0xa2, 0x33, + 0xce, 0x38, 0xef, 0x61, 0x04, 0x8e, 0xfa, 0xb0, + 0xe6, 0x4f, 0x0f, 0xbd, 0x92, 0x9b, 0x94, 0x6f, + 0x00, 0x5e, 0x32, 0x2c, 0xbb, 0xa9, 0xac, 0x5d, + 0x75, 0x72, 0x29, 0x77, 0x38, 0xa6, 0x1f, 0x9a, + 0x3f, 0x35, 0xbd, 0xbd, 0xd2, 0xb4, 0x97, 0x39, + 0xc4, 0xb9, 0xda, 0x49, 0x35, 0x3d, 0xd5, 0x97, + 0x2d, 0xb7, 0x5b, 0xe1, 0xc1, 0xe9, 0x79, 0x6c, + 0x73, 0x4a, 0x69, 0x3e, 0xd9, 0xd5, 0xea, 0x27, + 0x60, 0x91, 0x8e, 0xde, 0x70, 0x2b, 0x97, 0x6d, + 0x21, 0x70, 0xb9, 0xb7, 0xb9, 0x1e, 0x44, 0xb1, + 0x96, 0xff, 0x00, 0x69, 0xa7, 0x17, 0xca, 0xba, + 0x3f, 0x23, 0xda, 0x5d, 0xb2, 0xdb, 0xc7, 0x9c, + 0x65, 0x8e, 0xb3, 0x79, 0xa5, 0xc4, 0x62, 0xb1, + 0xbb, 0x78, 0x8d, 0x47, 0xe4, 0x51, 0x49, 0xdb, + 0x68, 0x9e, 0x6b, 0x67, 0xc7, 0x17, 0xa4, 0xd7, + 0xdb, 0x3c, 0x7e, 0x4a, 0x39, 0x26, 0xba, 0x53, + 0x12, 0xcd, 0xcc, 0x13, 0xda, 0xce, 0xe8, 0x2e, + 0x18, 0x59, 0x2b, 0x0d, 0x0b, 0x78, 0xbb, 0x0b, + 0x5e, 0x2a, 0xea, 0x5a, 0xf5, 0xd7, 0xc1, 0xe5, + 0xce, 0xb1, 0xe3, 0xc1, 0xef, 0x12, 0x62, 0x5e, + 0x31, 0x2c, 0x62, 0x08, 0x86, 0xcc, 0x49, 0x89, + 0x6b, 0xc4, 0x13, 0x10, 0x41, 0xb3, 0x12, 0x62, + 0x5a, 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xc4, 0x98, + 0x96, 0xbc, 0x41, 0x31, 0x04, 0x1b, 0x31, 0x26, + 0x25, 0xaf, 0x10, 0x4c, 0x41, 0x06, 0xcc, 0x49, + 0x89, 0x6b, 0xc4, 0x13, 0x10, 0x41, 0xb3, 0x12, + 0x62, 0x5a, 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xaa, + 0x62, 0x5a, 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xaa, + 0x62, 0x5a, 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xaa, + 0x55, 0x6b, 0xc4, 0x13, 0x10, 0x41, 0xb3, 0x12, + 0x62, 0x5a, 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xc4, + 0x98, 0x96, 0xbc, 0x41, 0x31, 0x04, 0x1b, 0x31, + 0x25, 0x77, 0x16, 0xbc, 0x41, 0x67, 0x12, 0x9f, + 0x89, 0x31, 0xaa, 0xc1, 0x69, 0xb5, 0xd7, 0xb0, + 0x42, 0x21, 0x96, 0x36, 0x4e, 0x1b, 0xe2, 0x87, + 0x38, 0x90, 0xe3, 0x4f, 0x9c, 0xb5, 0x66, 0x3b, + 0x51, 0x7d, 0x7b, 0x09, 0x80, 0x35, 0xb0, 0x46, + 0xfd, 0x0e, 0xc1, 0x5c, 0x44, 0x6f, 0x54, 0xa8, + 0x4c, 0x49, 0x88, 0x2a, 0x6c, 0xa4, 0x4e, 0xb1, + 0x0e, 0x93, 0x9b, 0x24, 0xd7, 0x4d, 0xda, 0x3d, + 0x92, 0x98, 0x97, 0x8c, 0x41, 0x63, 0x10, 0x56, + 0x73, 0xfc, 0x75, 0x6c, 0xc4, 0x98, 0x96, 0xbc, + 0x41, 0x31, 0x04, 0x1b, 0x31, 0x26, 0x25, 0xaf, + 0x10, 0x4c, 0x41, 0x06, 0xcc, 0x49, 0x89, 0x6b, + 0xc4, 0x13, 0x10, 0x41, 0xb3, 0x12, 0x62, 0x5a, + 0xf1, 0x04, 0xc4, 0x10, 0x6c, 0xc4, 0x98, 0x96, + 0xbc, 0x41, 0x31, 0x04, 0x1b, 0x31, 0x26, 0x25, + 0xaf, 0x10, 0x59, 0xc4, 0x89, 0x7b, 0xc4, 0x98, + 0x97, 0x8a, 0xa5, 0x6a, 0x68, 0x35, 0x9e, 0xe9, + 0xed, 0x01, 0xba, 0x53, 0x5d, 0x11, 0xa6, 0xb3, + 0xa2, 0x47, 0x23, 0x84, 0xdc, 0x66, 0xd6, 0xd1, + 0x8d, 0xc7, 0x87, 0x9f, 0xec, 0x78, 0xdf, 0x22, + 0xb4, 0x66, 0xae, 0x0e, 0xbc, 0x75, 0x3f, 0x34, + 0x00, 0xb9, 0xf6, 0x7b, 0x2b, 0xea, 0xbb, 0x57, + 0xdf, 0xde, 0x37, 0x0d, 0xc4, 0x8d, 0xa3, 0x19, + 0xba, 0xd6, 0xeb, 0x03, 0xb6, 0x77, 0x57, 0x99, + 0x1e, 0x64, 0x79, 0x7b, 0x8d, 0x4b, 0x8d, 0x49, + 0x59, 0xb3, 0x5b, 0x75, 0xbe, 0x0f, 0x47, 0xcb, + 0x63, 0xd9, 0x8e, 0x67, 0xdb, 0x69, 0x7a, 0x87, + 0xf6, 0xd1, 0xf9, 0xcd, 0xf0, 0xa9, 0x65, 0x13, + 0x0f, 0xed, 0x99, 0xe7, 0x37, 0xc2, 0xa5, 0x97, + 0x36, 0x81, 0x47, 0xe6, 0x5e, 0xf5, 0x69, 0xf6, + 0x9f, 0x28, 0x52, 0x0a, 0x3f, 0x32, 0xf7, 0xab, + 0x4f, 0xb4, 0xf9, 0x42, 0x0c, 0x65, 0x9e, 0xf5, + 0x79, 0xe7, 0x9f, 0x09, 0x52, 0x2a, 0x3b, 0x2c, + 0xf7, 0xab, 0xcf, 0x3c, 0xf8, 0x4a, 0x91, 0x41, + 0x87, 0x6a, 0x2a, 0x1c, 0xeb, 0x2a, 0x60, 0xea, + 0x3d, 0xa5, 0x0e, 0x75, 0x94, 0x05, 0x8d, 0x7a, + 0x3b, 0xe1, 0x65, 0x10, 0x49, 0xbe, 0xe2, 0xdb, + 0xa9, 0xf9, 0xcc, 0xc4, 0x73, 0x90, 0x79, 0x2f, + 0xa8, 0xae, 0x82, 0x68, 0x34, 0x28, 0x67, 0xec, + 0xb6, 0x4f, 0x7a, 0x71, 0xe5, 0xd7, 0xa2, 0x3a, + 0xff, 0x00, 0xc3, 0x34, 0x7d, 0x3b, 0x1a, 0x68, + 0xe0, 0xbb, 0x73, 0x3a, 0x7c, 0x31, 0x27, 0x65, + 0xc3, 0xeb, 0x2a, 0x8e, 0x80, 0x6a, 0x34, 0x1d, + 0xf1, 0xa3, 0xc0, 0xad, 0x17, 0x98, 0xf0, 0xe0, + 0xad, 0xf1, 0xd2, 0xfc, 0x6d, 0x09, 0xcf, 0x81, + 0xe5, 0xe9, 0xb1, 0xf2, 0x7f, 0xa5, 0x3e, 0x06, + 0x9b, 0xa6, 0x33, 0x81, 0x42, 0x63, 0x7f, 0xce, + 0x77, 0x09, 0xe3, 0x59, 0xe7, 0x1f, 0xf3, 0xdd, + 0xc2, 0x78, 0xd4, 0xf7, 0x6f, 0xcd, 0xcb, 0xd3, + 0x62, 0xe9, 0x9f, 0xc1, 0x35, 0xf0, 0x34, 0xdd, + 0x31, 0x9c, 0x09, 0xf0, 0x34, 0xdd, 0x31, 0x9c, + 0x0a, 0x17, 0x9c, 0x7f, 0xcf, 0x77, 0x09, 0xe3, + 0x4e, 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, 0x8d, + 0x3b, 0xb7, 0xe6, 0x7a, 0x6c, 0x3d, 0x32, 0x9a, + 0xf8, 0x1a, 0x6e, 0x98, 0xce, 0x04, 0xf8, 0x1a, + 0x6e, 0x98, 0xce, 0x05, 0x0b, 0xce, 0x3f, 0xe7, + 0xbb, 0x84, 0xf1, 0xa7, 0x38, 0xff, 0x00, 0x9e, + 0xee, 0x13, 0xc6, 0x9d, 0xdb, 0xf3, 0x3d, 0x36, + 0x1e, 0x99, 0x4d, 0x7c, 0x0d, 0x37, 0x4c, 0x67, + 0x02, 0x7c, 0x0d, 0x37, 0x4c, 0x67, 0x02, 0x85, + 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, 0x78, 0xd3, 0x9c, + 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, 0xed, 0xf9, + 0x9e, 0x9b, 0x0f, 0x4c, 0xa6, 0xbe, 0x06, 0x9b, + 0xa6, 0x33, 0x81, 0x3e, 0x06, 0x9b, 0xa6, 0x33, + 0x81, 0x42, 0xf3, 0x8f, 0xf9, 0xee, 0xe1, 0x3c, + 0x69, 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, 0xa7, + 0x76, 0xfc, 0xcf, 0x4d, 0x87, 0xa6, 0x53, 0x5f, + 0x03, 0x4d, 0xd3, 0x19, 0xc0, 0x9f, 0x03, 0x4d, + 0xd3, 0x19, 0xc0, 0xa1, 0x79, 0xc7, 0xfc, 0xf7, + 0x70, 0x9e, 0x34, 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, + 0x78, 0xd3, 0xbb, 0x7e, 0x67, 0xa6, 0xc3, 0xd3, + 0x29, 0xaf, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, 0x4f, + 0x81, 0xa6, 0xe9, 0x8c, 0xe0, 0x50, 0xbc, 0xe3, + 0xfe, 0x7b, 0xb8, 0x4f, 0x1a, 0x73, 0x8f, 0xf9, + 0xee, 0xe1, 0x3c, 0x69, 0xdd, 0xbf, 0x33, 0xd3, + 0x61, 0xe9, 0x94, 0xd7, 0xc0, 0xd3, 0x74, 0xc6, + 0x70, 0x27, 0xc0, 0xd3, 0x74, 0xc6, 0x70, 0x28, + 0x5e, 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, 0x8d, + 0x39, 0xc7, 0xfc, 0xf7, 0x70, 0x9e, 0x34, 0xee, + 0xdf, 0x99, 0xe9, 0xb0, 0xf4, 0xca, 0x6b, 0xe0, + 0x69, 0xba, 0x63, 0x38, 0x13, 0xe0, 0x69, 0xba, + 0x63, 0x38, 0x14, 0x2f, 0x38, 0xff, 0x00, 0x9e, + 0xee, 0x13, 0xc6, 0x9c, 0xe3, 0xfe, 0x7b, 0xb8, + 0x4f, 0x1a, 0x77, 0x6f, 0xcc, 0xf4, 0xd8, 0x7a, + 0x65, 0x35, 0xf0, 0x34, 0xdd, 0x31, 0x9c, 0x09, + 0xf0, 0x34, 0xdd, 0x31, 0x9c, 0x0a, 0x17, 0x9c, + 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, 0x71, 0xff, + 0x00, 0x3d, 0xdc, 0x27, 0x8d, 0x3b, 0xb7, 0xe6, + 0x7a, 0x6c, 0x3d, 0x32, 0x9a, 0xf8, 0x1a, 0x6e, + 0x98, 0xce, 0x04, 0xf8, 0x1a, 0x6e, 0x98, 0xce, + 0x05, 0x0b, 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, + 0xa7, 0x38, 0xff, 0x00, 0x9e, 0xee, 0x13, 0xc6, + 0x9d, 0xdb, 0xf3, 0x3d, 0x36, 0x1e, 0x99, 0x4d, + 0x7c, 0x0d, 0x37, 0x4c, 0x67, 0x02, 0x7c, 0x0d, + 0x37, 0x4c, 0x67, 0x02, 0x85, 0xe7, 0x1f, 0xf3, + 0xdd, 0xc2, 0x78, 0xd3, 0x9c, 0x7f, 0xcf, 0x77, + 0x09, 0xe3, 0x4e, 0xed, 0xf9, 0x9e, 0x9b, 0x0f, + 0x4c, 0xa6, 0xbe, 0x06, 0x9b, 0xa6, 0x33, 0x81, + 0x3e, 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x42, 0xf3, + 0x8f, 0xf9, 0xee, 0xe1, 0x3c, 0x69, 0xce, 0x3f, + 0xe7, 0xbb, 0x84, 0xf1, 0xa7, 0x76, 0xfc, 0xcf, + 0x4d, 0x87, 0xa6, 0x53, 0x5f, 0x03, 0x4d, 0xd3, + 0x19, 0xc0, 0x9f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, + 0xa1, 0x79, 0xc7, 0xfc, 0xf7, 0x70, 0x9e, 0x34, + 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, 0x78, 0xd3, 0xbb, + 0x7e, 0x67, 0xa6, 0xc3, 0xd3, 0x29, 0xaf, 0x81, + 0xa6, 0xe9, 0x8c, 0xe0, 0x4f, 0x81, 0xa6, 0xe9, + 0x8c, 0xe0, 0x50, 0xbc, 0xe3, 0xfe, 0x7b, 0xb8, + 0x4f, 0x1a, 0x73, 0x8f, 0xf9, 0xee, 0xe1, 0x3c, + 0x69, 0xdd, 0xbf, 0x33, 0xd3, 0x61, 0xe9, 0x94, + 0xd7, 0xc0, 0xd3, 0x74, 0xc6, 0x70, 0x27, 0xc0, + 0xd3, 0x74, 0xc6, 0x70, 0x28, 0x5e, 0x71, 0xff, + 0x00, 0x3d, 0xdc, 0x27, 0x8d, 0x39, 0xc7, 0xfc, + 0xf7, 0x70, 0x9e, 0x34, 0xee, 0xdf, 0x99, 0xe9, + 0xb0, 0xf4, 0xca, 0x6b, 0xe0, 0x69, 0xba, 0x63, + 0x38, 0x13, 0xe0, 0x69, 0xba, 0x63, 0x38, 0x14, + 0x2f, 0x38, 0xff, 0x00, 0x9e, 0xee, 0x13, 0xc6, + 0x9c, 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, 0x1a, 0x77, + 0x6f, 0xcc, 0xf4, 0xd8, 0x7a, 0x65, 0x35, 0xf0, + 0x34, 0xdd, 0x31, 0x9c, 0x09, 0xf0, 0x34, 0xdd, + 0x31, 0x9c, 0x0a, 0x17, 0x9c, 0x7f, 0xcf, 0x77, + 0x09, 0xe3, 0x4e, 0x71, 0xff, 0x00, 0x3d, 0xdc, + 0x27, 0x8d, 0x3b, 0xb7, 0xe6, 0x7a, 0x6c, 0x3d, + 0x32, 0x9a, 0xf8, 0x1a, 0x6e, 0x98, 0xce, 0x04, + 0xf8, 0x1a, 0x6e, 0x98, 0xce, 0x05, 0x0b, 0xce, + 0x3f, 0xe7, 0xbb, 0x84, 0xf1, 0xa7, 0x38, 0xff, + 0x00, 0x9e, 0xee, 0x13, 0xc6, 0x9d, 0xdb, 0xf3, + 0x3d, 0x36, 0x1e, 0x99, 0x4d, 0x7c, 0x0d, 0x37, + 0x4c, 0x67, 0x02, 0x7c, 0x0d, 0x37, 0x4c, 0x67, + 0x02, 0x85, 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, 0x78, + 0xd3, 0x9c, 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, + 0xed, 0xf9, 0x9e, 0x9b, 0x0f, 0x4c, 0xa6, 0xbe, + 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x3e, 0x06, 0x9b, + 0xa6, 0xb3, 0x81, 0x42, 0xf3, 0x8f, 0xf9, 0xee, + 0xe1, 0x3c, 0x69, 0xce, 0x3f, 0xe7, 0xbb, 0x84, + 0xf1, 0xa7, 0x76, 0xfc, 0xcf, 0x4d, 0x8b, 0xa6, + 0x53, 0x7f, 0x03, 0xc9, 0xbb, 0x7b, 0x18, 0x1b, + 0xf8, 0x7f, 0xa5, 0x6d, 0x66, 0x43, 0xb3, 0xf9, + 0x61, 0x12, 0xdf, 0xdd, 0x0b, 0x87, 0x37, 0x48, + 0x8f, 0x40, 0x04, 0x8f, 0xea, 0xb2, 0xa4, 0xaa, + 0xff, 0x00, 0x38, 0xff, 0x00, 0x9c, 0xe3, 0xdd, + 0x2b, 0xce, 0xf9, 0xdd, 0xdf, 0x49, 0xc9, 0x79, + 0xe1, 0xaa, 0xd1, 0xe5, 0xf1, 0xc7, 0xea, 0xaf, + 0x57, 0xf3, 0xb4, 0xd8, 0xc0, 0x60, 0x18, 0x21, + 0x94, 0x02, 0x1a, 0x05, 0x3c, 0x5a, 0x54, 0x76, + 0x94, 0x62, 0xed, 0xb9, 0xfe, 0x57, 0x63, 0xe6, + 0x37, 0xea, 0x85, 0xc2, 0xa8, 0xea, 0xca, 0x22, + 0x20, 0x2d, 0x96, 0xd2, 0x3e, 0x3b, 0x86, 0x39, + 0x84, 0x83, 0x88, 0x03, 0x4d, 0xd0, 0x4d, 0x28, + 0x56, 0xb5, 0xea, 0x2f, 0xda, 0xb3, 0xce, 0x6f, + 0x84, 0x21, 0x2e, 0xbc, 0xee, 0x2c, 0x8a, 0xe2, + 0xe1, 0xb6, 0x99, 0x8d, 0x23, 0x98, 0xb7, 0x14, + 0x73, 0x79, 0x26, 0x84, 0x91, 0x4c, 0x63, 0xb5, + 0xba, 0xa2, 0x9d, 0xb1, 0x70, 0x49, 0xe3, 0x5a, + 0xdf, 0xb5, 0xd1, 0x9d, 0x55, 0x00, 0xf7, 0xda, + 0xed, 0x2b, 0x1b, 0x63, 0xfc, 0xce, 0x3f, 0xb1, + 0x1f, 0x59, 0xca, 0x04, 0x12, 0xdf, 0x24, 0x90, + 0x3b, 0x06, 0x9e, 0x05, 0x68, 0xbd, 0xa2, 0x34, + 0x89, 0x73, 0xb6, 0x1c, 0x76, 0xf1, 0x84, 0xe7, + 0xc0, 0xf3, 0x74, 0xd8, 0xf8, 0x3f, 0xa5, 0x3e, + 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x42, 0xf3, 0x8f, + 0xf9, 0xce, 0xe1, 0x3c, 0x69, 0xce, 0x3f, 0xe7, + 0xbb, 0x84, 0xf1, 0xa9, 0xee, 0xdf, 0x9a, 0x9e, + 0x9b, 0x0f, 0x4c, 0xa6, 0xbe, 0x06, 0x9b, 0xa6, + 0x33, 0x81, 0x3e, 0x06, 0x9b, 0xa6, 0x33, 0x81, + 0x42, 0xf3, 0x8f, 0xf9, 0xee, 0xe1, 0x3c, 0x69, + 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, 0xa7, 0x76, + 0xfc, 0xcf, 0x4d, 0x87, 0xa6, 0x53, 0x5f, 0x03, + 0x4d, 0xd3, 0x19, 0xc0, 0x9f, 0x03, 0x4d, 0xd3, + 0x19, 0xc0, 0xa1, 0x79, 0xc7, 0xfc, 0xf7, 0x70, + 0x9e, 0x34, 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, 0x78, + 0xd3, 0xbb, 0x7e, 0x67, 0xa6, 0xc3, 0xd3, 0x29, + 0xaf, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, 0x4f, 0x81, + 0xa6, 0xe9, 0x8c, 0xe0, 0x50, 0xbc, 0xe3, 0xfe, + 0x7b, 0xb8, 0x4f, 0x1a, 0x73, 0x8f, 0xf9, 0xee, + 0xe1, 0x3c, 0x69, 0xdd, 0xbf, 0x33, 0xd3, 0x61, + 0xe9, 0x94, 0xd7, 0xc0, 0xd3, 0x74, 0xc6, 0x70, + 0x27, 0xc0, 0xd3, 0x74, 0xc6, 0x70, 0x28, 0x5e, + 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, 0x8d, 0x39, + 0xc7, 0xfc, 0xf7, 0x70, 0x9e, 0x34, 0xee, 0xdf, + 0x99, 0xe9, 0xb0, 0xf4, 0xca, 0x6b, 0xe0, 0x69, + 0xba, 0x63, 0x38, 0x13, 0xe0, 0x69, 0xba, 0x63, + 0x38, 0x14, 0x2f, 0x38, 0xff, 0x00, 0x9e, 0xee, + 0x13, 0xc6, 0x9c, 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, + 0x1a, 0x77, 0x6f, 0xcc, 0xf4, 0xd8, 0x7a, 0x65, + 0x35, 0xf0, 0x34, 0xdd, 0x31, 0x9c, 0x09, 0xf0, + 0x34, 0xdd, 0x31, 0x9c, 0x0a, 0x17, 0x9c, 0x7f, + 0xcf, 0x77, 0x09, 0xe3, 0x4e, 0x71, 0xff, 0x00, + 0x3d, 0xdc, 0x27, 0x8d, 0x3b, 0xb7, 0xe6, 0x7a, + 0x6c, 0x3d, 0x32, 0x9a, 0xf8, 0x1a, 0x6e, 0x98, + 0xce, 0x04, 0xf8, 0x1a, 0x6e, 0x98, 0xce, 0x05, + 0x0b, 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, 0xa7, + 0x38, 0xff, 0x00, 0x9e, 0xee, 0x13, 0xc6, 0x9d, + 0xdb, 0xf3, 0x3d, 0x36, 0x1e, 0x99, 0x4d, 0x7c, + 0x0d, 0x37, 0x4c, 0x67, 0x02, 0x7c, 0x0d, 0x37, + 0x4c, 0x67, 0x02, 0x85, 0xe7, 0x1f, 0xf3, 0xdd, + 0xc2, 0x78, 0xd3, 0x9c, 0x7f, 0xcf, 0x77, 0x09, + 0xe3, 0x4e, 0xed, 0xf9, 0x9e, 0x9b, 0x0f, 0x4c, + 0xa6, 0xbe, 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x3e, + 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x42, 0xf3, 0x8f, + 0xf9, 0xee, 0xe1, 0x3c, 0x69, 0xce, 0x3f, 0xe7, + 0xbb, 0x84, 0xf1, 0xa7, 0x76, 0xfc, 0xcf, 0x4d, + 0x87, 0xa6, 0x53, 0x5f, 0x03, 0x4d, 0xd3, 0x19, + 0xc0, 0x9f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, 0xa1, + 0x79, 0xc7, 0xfc, 0xf7, 0x70, 0x9e, 0x34, 0xe7, + 0x1f, 0xf3, 0xdd, 0xc2, 0x78, 0xd3, 0xbb, 0x7e, + 0x67, 0xa6, 0xc3, 0xd3, 0x29, 0xaf, 0x81, 0xa6, + 0xe9, 0x8c, 0xe0, 0x4f, 0x81, 0xa6, 0xe9, 0x8c, + 0xe0, 0x50, 0xbc, 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, + 0x1a, 0x73, 0x8f, 0xf9, 0xee, 0xe1, 0x3c, 0x69, + 0xdd, 0xbf, 0x33, 0xd3, 0x61, 0xe9, 0x94, 0xd7, + 0xc0, 0xd3, 0x74, 0xc6, 0x70, 0x27, 0xc0, 0xd3, + 0x74, 0xc6, 0x70, 0x28, 0x5e, 0x71, 0xff, 0x00, + 0x3d, 0xdc, 0x27, 0x8d, 0x39, 0xc7, 0xfc, 0xf7, + 0x70, 0x9e, 0x34, 0xee, 0xdf, 0x99, 0xe9, 0xb0, + 0xf4, 0xca, 0x6b, 0xe0, 0x69, 0xba, 0x63, 0x38, + 0x13, 0xe0, 0x69, 0xba, 0x63, 0x38, 0x14, 0x2f, + 0x38, 0xff, 0x00, 0x9e, 0xee, 0x13, 0xc6, 0x9c, + 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, 0x1a, 0x77, 0x6f, + 0xcc, 0xf4, 0xd8, 0x7a, 0x65, 0x35, 0xf0, 0x34, + 0xdd, 0x31, 0x9c, 0x09, 0xf0, 0x34, 0xdd, 0x31, + 0x9c, 0x0a, 0x17, 0x9c, 0x7f, 0xcf, 0x77, 0x09, + 0xe3, 0x4e, 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, + 0x8d, 0x3b, 0xb7, 0xe6, 0x7a, 0x6c, 0x3d, 0x32, + 0x9a, 0xf8, 0x1a, 0x6e, 0x98, 0xce, 0x04, 0xf8, + 0x1a, 0x6e, 0x98, 0xce, 0x05, 0x0b, 0xce, 0x3f, + 0xe7, 0xbb, 0x84, 0xf1, 0xa7, 0x38, 0xff, 0x00, + 0x9e, 0xee, 0x13, 0xc6, 0x9d, 0xdb, 0xf3, 0x3d, + 0x36, 0x1e, 0x99, 0x4d, 0x7c, 0x0d, 0x37, 0x4c, + 0x67, 0x02, 0x7c, 0x0d, 0x37, 0x4c, 0x67, 0x02, + 0x85, 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, 0x78, 0xd3, + 0x9c, 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, 0xed, + 0xf9, 0x9e, 0x9b, 0x0f, 0x4c, 0xa6, 0xbe, 0x06, + 0x9b, 0xa6, 0x33, 0x81, 0x3e, 0x06, 0x9b, 0xa6, + 0x33, 0x81, 0x42, 0xf3, 0x8f, 0xf9, 0xee, 0xe1, + 0x3c, 0x69, 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, + 0xa7, 0x76, 0xfc, 0xcf, 0x4d, 0x87, 0xa6, 0x53, + 0x5f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, 0x9f, 0x03, + 0x4d, 0xd3, 0x19, 0xc0, 0xa1, 0x79, 0xc7, 0xfc, + 0xf7, 0x70, 0x9e, 0x34, 0xe7, 0x1f, 0xf3, 0xdd, + 0xc2, 0x78, 0xd3, 0xbb, 0x7e, 0x67, 0xa6, 0xc3, + 0xd3, 0x29, 0xaf, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, + 0x4f, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, 0x50, 0xbc, + 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, 0x1a, 0x73, 0x8f, + 0xf9, 0xee, 0xe1, 0x3c, 0x69, 0xdd, 0xbf, 0x33, + 0xd3, 0x61, 0xe9, 0x94, 0xd7, 0xc0, 0xd3, 0x74, + 0xc6, 0x70, 0x27, 0xc0, 0xd3, 0x74, 0xd6, 0x70, + 0x28, 0x5e, 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, + 0x8d, 0x39, 0xc7, 0xfc, 0xf7, 0x70, 0x9e, 0x34, + 0xee, 0xdf, 0x9a, 0x63, 0xcb, 0x62, 0xe9, 0x9f, + 0xc5, 0x36, 0xdd, 0x88, 0x6b, 0x74, 0xcd, 0x7e, + 0xc6, 0xb3, 0x76, 0x8d, 0x1f, 0xde, 0x72, 0x91, + 0xca, 0xad, 0xb6, 0x7e, 0xc6, 0xee, 0x3b, 0x7b, + 0x67, 0x8b, 0x9b, 0xc9, 0x2a, 0x04, 0x87, 0xc6, + 0x22, 0x82, 0xa7, 0x4e, 0xa0, 0xaa, 0x45, 0xce, + 0x3e, 0x51, 0x24, 0x6f, 0x12, 0xa4, 0xb6, 0x68, + 0x0e, 0xbb, 0xb6, 0xa7, 0xf5, 0xf4, 0x7f, 0x60, + 0xa8, 0x9b, 0xda, 0x7d, 0xab, 0x57, 0x0e, 0x38, + 0xe3, 0x10, 0x9e, 0xcc, 0xa4, 0x7b, 0xae, 0xde, + 0xd7, 0x1a, 0x86, 0x1a, 0x34, 0x6f, 0x0a, 0x2e, + 0x55, 0xd1, 0x98, 0x7b, 0xec, 0xbe, 0x77, 0xc8, + 0x17, 0x3a, 0xab, 0xa0, 0xbd, 0x47, 0x23, 0xe2, + 0x78, 0x7c, 0x6e, 0x2d, 0x78, 0xd4, 0x42, 0xf2, + 0xb0, 0x82, 0x4b, 0x3b, 0x8f, 0x25, 0x9d, 0x90, + 0xb3, 0x33, 0xa3, 0x1d, 0x30, 0x3c, 0xd4, 0x9a, + 0x43, 0x9a, 0x40, 0x15, 0xf1, 0xdb, 0xab, 0x5a, + 0x85, 0x7e, 0xc6, 0x5b, 0x48, 0x31, 0x5a, 0xe6, + 0x0d, 0x73, 0x0e, 0xa0, 0x43, 0x4e, 0x8e, 0xdb, + 0x4a, 0xe9, 0xdb, 0x2f, 0xd8, 0xd8, 0xee, 0xe8, + 0x7e, 0x8e, 0xe3, 0x15, 0x61, 0xa4, 0xb7, 0x51, + 0x23, 0xb5, 0xa1, 0x5a, 0x2f, 0x68, 0xf0, 0x97, + 0x3b, 0xe2, 0xa5, 0xbc, 0x61, 0x39, 0xf0, 0x34, + 0xdd, 0x31, 0x9c, 0x09, 0xf0, 0x34, 0xdd, 0x31, + 0x9c, 0x0a, 0x17, 0x9c, 0x7f, 0xcf, 0x77, 0x09, + 0xe3, 0x4e, 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, + 0x8d, 0x4f, 0x76, 0xfc, 0xd4, 0xf4, 0xd8, 0x7a, + 0x65, 0x35, 0xf0, 0x34, 0xdd, 0x31, 0x9c, 0x09, + 0xf0, 0x34, 0xdd, 0x31, 0x9c, 0x0a, 0x17, 0x9c, + 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, 0x71, 0xff, + 0x00, 0x3d, 0xdc, 0x27, 0x8d, 0x3b, 0xb7, 0xe6, + 0x7a, 0x6c, 0x3d, 0x32, 0x9a, 0xf8, 0x1a, 0x6e, + 0x98, 0xce, 0x04, 0xf8, 0x1a, 0x6e, 0x98, 0xce, + 0x05, 0x0b, 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, + 0xa7, 0x38, 0xff, 0x00, 0x9e, 0xee, 0x13, 0xc6, + 0x9d, 0xdb, 0xf3, 0x3d, 0x36, 0x1e, 0x99, 0x4d, + 0x7c, 0x0d, 0x37, 0x4c, 0x67, 0x02, 0x7c, 0x0d, + 0x37, 0x4c, 0x67, 0x02, 0x85, 0xe7, 0x1f, 0xf3, + 0xdd, 0xc2, 0x78, 0xd3, 0x9c, 0x7f, 0xcf, 0x77, + 0x09, 0xe3, 0x4e, 0xed, 0xf9, 0x9e, 0x9b, 0x0f, + 0x4c, 0xa6, 0xbe, 0x06, 0x9b, 0xa6, 0x33, 0x81, + 0x3e, 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x42, 0xf3, + 0x8f, 0xf9, 0xee, 0xe1, 0x3c, 0x69, 0xce, 0x3f, + 0xe7, 0xbb, 0x84, 0xf1, 0xa7, 0x76, 0xfc, 0xcf, + 0x4d, 0x87, 0xa6, 0x53, 0x5f, 0x03, 0x4d, 0xd3, + 0x19, 0xc0, 0x9f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, + 0xa1, 0x71, 0xc9, 0xf3, 0xdd, 0xc2, 0x78, 0xd3, + 0x9c, 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, 0xed, + 0xf9, 0x9e, 0x9b, 0x0f, 0x4c, 0xa6, 0xbe, 0x06, + 0x9b, 0xa6, 0x33, 0x81, 0x3e, 0x06, 0x9b, 0xa6, + 0x33, 0x81, 0x42, 0xf3, 0x8f, 0xf9, 0xee, 0xe1, + 0x3c, 0x69, 0xce, 0x3f, 0xe7, 0xbb, 0x84, 0xf1, + 0xa7, 0x76, 0xfc, 0xcf, 0x4d, 0x87, 0xa6, 0x53, + 0x5f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, 0x9f, 0x03, + 0x4d, 0xd3, 0x19, 0xc0, 0xa1, 0x79, 0xc7, 0xfc, + 0xf7, 0x70, 0x9e, 0x34, 0xe7, 0x1f, 0xf3, 0xdd, + 0xc2, 0x78, 0xd3, 0xbb, 0x7e, 0x67, 0xa6, 0xc3, + 0xd3, 0x29, 0xaf, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, + 0x4f, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, 0x50, 0xbc, + 0xe3, 0xfe, 0x7b, 0x8f, 0x74, 0xf1, 0xa7, 0x38, + 0xff, 0x00, 0x9c, 0xee, 0x13, 0xc6, 0x9d, 0xdb, + 0xf3, 0x3d, 0x36, 0x1e, 0x99, 0x4d, 0x7c, 0x0d, + 0x37, 0x4c, 0x67, 0x02, 0x7c, 0x0d, 0x37, 0x4c, + 0x67, 0x02, 0x85, 0xe7, 0x1f, 0xf3, 0xdd, 0xc2, + 0x78, 0xd3, 0x9c, 0x7f, 0xcf, 0x77, 0x09, 0xe3, + 0x4e, 0xed, 0xf9, 0x9e, 0x9b, 0x0f, 0x4c, 0xa6, + 0xbe, 0x06, 0x9b, 0xa6, 0x33, 0x81, 0x3e, 0x06, + 0x9b, 0xa6, 0x33, 0x81, 0x42, 0xf3, 0x8f, 0xf9, + 0xce, 0xe1, 0x3c, 0x69, 0xce, 0x3f, 0xe7, 0xbb, + 0x84, 0xf1, 0xa7, 0x76, 0xfc, 0xcf, 0x4d, 0x87, + 0xa6, 0x53, 0x5f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, + 0x9f, 0x03, 0x4d, 0xd3, 0x19, 0xc0, 0xa1, 0x79, + 0xc7, 0xfc, 0xf7, 0x70, 0x9e, 0x34, 0xe7, 0x1f, + 0xf3, 0xdd, 0xc2, 0x78, 0xd3, 0xbb, 0x7e, 0x67, + 0xa6, 0xc3, 0xd3, 0x29, 0xaf, 0x81, 0xa6, 0xe9, + 0x8c, 0xe0, 0x4f, 0x81, 0xa6, 0xe9, 0x8c, 0xe0, + 0x50, 0xbc, 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, 0x1a, + 0x73, 0x8f, 0xf9, 0xee, 0xe1, 0x3c, 0x69, 0xdd, + 0xbf, 0x33, 0xd3, 0x61, 0xe9, 0x94, 0xd7, 0xc0, + 0xd3, 0x74, 0xc6, 0x70, 0x27, 0xc0, 0xd3, 0x74, + 0xc6, 0x70, 0x28, 0x5c, 0x72, 0x7c, 0xf7, 0x72, + 0x8f, 0x1a, 0x73, 0x8f, 0xf9, 0xee, 0xe1, 0x3c, + 0x69, 0xdd, 0xbf, 0x33, 0xd3, 0x61, 0xe9, 0x94, + 0xd7, 0xc0, 0xd3, 0x74, 0xc6, 0x70, 0x27, 0xc0, + 0xd3, 0x74, 0xc6, 0x70, 0x28, 0x5e, 0x71, 0xff, + 0x00, 0x3d, 0xdc, 0x27, 0x8d, 0x39, 0xc7, 0xfc, + 0xf7, 0x70, 0x9e, 0x34, 0xee, 0xdf, 0x99, 0xe9, + 0xb0, 0xf4, 0xca, 0x6b, 0xe0, 0x69, 0xba, 0x63, + 0x38, 0x13, 0xe0, 0x69, 0xba, 0x63, 0x38, 0x14, + 0x2f, 0x38, 0xff, 0x00, 0x9e, 0xee, 0x13, 0xc6, + 0x9c, 0xe3, 0xfe, 0x7b, 0xb8, 0x4f, 0x1a, 0x77, + 0x6f, 0xcc, 0xf4, 0xd8, 0x7a, 0x65, 0x35, 0xf0, + 0x34, 0xdd, 0x31, 0x9c, 0x09, 0xf0, 0x34, 0xdd, + 0x31, 0x9c, 0x0a, 0x17, 0x1b, 0xfe, 0x7b, 0xb8, + 0x4f, 0x1a, 0x73, 0x92, 0x7c, 0xf7, 0x70, 0x9e, + 0x34, 0xee, 0xdf, 0x99, 0xe9, 0xb0, 0xf4, 0xca, + 0x6b, 0xe0, 0x69, 0xba, 0x63, 0x38, 0x13, 0xe0, + 0x69, 0xba, 0x63, 0x38, 0x14, 0x2f, 0x38, 0xff, + 0x00, 0x9e, 0xee, 0x13, 0xc6, 0x9c, 0xe3, 0xfe, + 0x7b, 0xb8, 0x4f, 0x1a, 0x77, 0x6f, 0xcc, 0xf4, + 0xd8, 0x7a, 0x65, 0x35, 0xf0, 0x34, 0xdd, 0x31, + 0x9c, 0x09, 0xf0, 0x34, 0xdd, 0x31, 0x9c, 0x0a, + 0x17, 0x9c, 0x7f, 0xcf, 0x77, 0x09, 0xe3, 0x4e, + 0x71, 0xff, 0x00, 0x3d, 0xdc, 0x27, 0x8d, 0x3b, + 0xb7, 0xe6, 0x7a, 0x6c, 0x3d, 0x32, 0x9a, 0xf8, + 0x1a, 0x6e, 0x98, 0xce, 0x04, 0xf8, 0x1a, 0x6e, + 0x98, 0xce, 0x05, 0x0b, 0xce, 0x3f, 0xe7, 0xbb, + 0x84, 0xf1, 0xa7, 0x38, 0xff, 0x00, 0x9e, 0xee, + 0x13, 0xc6, 0x9d, 0xdb, 0xf3, 0x3d, 0x36, 0x1e, + 0x99, 0x4d, 0x7c, 0x0d, 0x37, 0x4c, 0x67, 0x02, + 0x7c, 0x0f, 0x37, 0x4d, 0x8f, 0x81, 0x42, 0xf3, + 0x8f, 0xf9, 0xee, 0xe1, 0x3c, 0x69, 0xce, 0x3f, + 0xe7, 0xbb, 0x84, 0xf1, 0xa7, 0x76, 0xfc, 0xd3, + 0xe9, 0xb0, 0xf4, 0xca, 0x70, 0x6c, 0x45, 0x08, + 0x32, 0xdf, 0x31, 0xac, 0x1a, 0xc8, 0x68, 0xf9, + 0x5c, 0xb7, 0x44, 0xdd, 0x9b, 0xc8, 0x8e, 0x36, + 0x3b, 0xdb, 0x2e, 0xc6, 0xaa, 0x78, 0xc4, 0x7f, + 0x75, 0xaa, 0xb8, 0x5c, 0xe3, 0xa0, 0xb8, 0x91, + 0xba, 0x09, 0x27, 0xc2, 0xb1, 0xb9, 0x4d, 0xcd, + 0xc5, 0x13, 0x7b, 0x4f, 0x8c, 0xad, 0x5c, 0x38, + 0xeb, 0xe1, 0x55, 0xeb, 0x37, 0x24, 0xb6, 0x12, + 0x75, 0x3a, 0xa6, 0x8a, 0x31, 0x49, 0x66, 0xfe, + 0x45, 0xbf, 0x9a, 0x7c, 0x0a, 0x34, 0xaa, 0xba, + 0x3d, 0x43, 0xfb, 0x66, 0x79, 0xcd, 0x52, 0xea, + 0x22, 0x1f, 0xdb, 0x33, 0xce, 0x6a, 0x97, 0x40, + 0x51, 0xf9, 0x97, 0xbd, 0x5a, 0x7d, 0xa7, 0xca, + 0x14, 0x82, 0x8f, 0xcc, 0xbd, 0xea, 0xd3, 0xed, + 0x3e, 0x50, 0x83, 0x19, 0x6f, 0xbc, 0xde, 0x79, + 0xe7, 0xeb, 0x15, 0x23, 0xa3, 0x7b, 0xbe, 0xa3, + 0xb2, 0xef, 0x79, 0xbb, 0xf3, 0xcf, 0xd6, 0x2a, + 0x41, 0x00, 0x91, 0x43, 0x41, 0xb8, 0xa1, 0xce, + 0xb3, 0xdb, 0x52, 0xe7, 0x51, 0xed, 0x28, 0x83, + 0xac, 0xa0, 0x22, 0x22, 0x0d, 0xf9, 0xa7, 0xfa, + 0x65, 0xfe, 0x78, 0xfa, 0xca, 0xa2, 0xad, 0xd9, + 0xa7, 0xfa, 0x65, 0xfe, 0x78, 0xfa, 0xca, 0xa2, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x37, + 0xce, 0xe2, 0x0e, 0xcc, 0xbf, 0x2b, 0xba, 0xcc, + 0x0b, 0xf9, 0x80, 0x03, 0x23, 0xf2, 0xe4, 0x79, + 0xa3, 0x47, 0x75, 0x6c, 0xbd, 0xc8, 0xef, 0x2d, + 0x21, 0xf6, 0x8c, 0x51, 0xcf, 0x0d, 0x70, 0x97, + 0xc4, 0xec, 0x40, 0x1d, 0x5a, 0x57, 0x6e, 0x5c, + 0x0c, 0xfb, 0x35, 0x77, 0x69, 0x6d, 0xa6, 0xe5, + 0xaf, 0xab, 0x98, 0x0f, 0x8c, 0xe6, 0xe8, 0xd2, + 0x06, 0xea, 0xf7, 0x96, 0xc6, 0xfb, 0x2c, 0x97, + 0x30, 0x75, 0xdb, 0x5d, 0x14, 0x73, 0x37, 0x04, + 0x2c, 0x78, 0xa1, 0x2f, 0xa1, 0x1a, 0x01, 0x41, + 0x5f, 0xae, 0xf2, 0x55, 0x49, 0xb3, 0x2d, 0xb7, + 0xb8, 0xc9, 0x9d, 0x7b, 0x6e, 0x4f, 0xb4, 0x5b, + 0x9a, 0x5c, 0x46, 0x48, 0x23, 0x0f, 0xce, 0x6d, + 0x05, 0x56, 0x2e, 0x32, 0xcb, 0x7b, 0x4c, 0xa2, + 0x1b, 0x89, 0xcb, 0xbd, 0xae, 0xe4, 0xe2, 0x8e, + 0x30, 0x40, 0x01, 0x9b, 0xe7, 0x45, 0x50, 0x46, + 0xa9, 0x6b, 0xbd, 0x9c, 0xbb, 0xb6, 0xb0, 0x37, + 0xc6, 0x46, 0x3d, 0x81, 0xad, 0x79, 0x60, 0xae, + 0x2a, 0x3a, 0x9d, 0x8d, 0xca, 0xa8, 0x83, 0xa8, + 0xab, 0xcb, 0x88, 0x99, 0xb1, 0xe5, 0xee, 0x3a, + 0x2e, 0x2c, 0x6a, 0xd0, 0x7e, 0x73, 0x40, 0x1f, + 0x2a, 0x0a, 0x5d, 0xbc, 0x0f, 0xb8, 0xb8, 0x8e, + 0xde, 0x3f, 0x2a, 0x57, 0x86, 0x34, 0x9d, 0x5a, + 0x4e, 0xb5, 0xdd, 0x9a, 0xe4, 0x73, 0xe5, 0x71, + 0xc7, 0x24, 0xb2, 0xb1, 0xe2, 0x42, 0x47, 0x8b, + 0x5d, 0x04, 0x0a, 0xee, 0x85, 0xb7, 0x66, 0x60, + 0x0f, 0xcd, 0x03, 0xde, 0x34, 0x5a, 0xb1, 0xd2, + 0x3a, 0xbb, 0x85, 0xa3, 0x0f, 0x85, 0x75, 0xe7, + 0xd2, 0x9b, 0xac, 0x9f, 0x2e, 0x95, 0xc7, 0x4c, + 0xce, 0x73, 0xb9, 0x5f, 0xd0, 0x83, 0x82, 0xcb, + 0x24, 0x92, 0xe2, 0xdb, 0xda, 0xee, 0x26, 0x65, + 0xa5, 0xb1, 0x24, 0x31, 0xf2, 0x6b, 0x77, 0x68, + 0x2c, 0x66, 0x19, 0x24, 0xb6, 0x90, 0x0b, 0xa8, + 0xa5, 0x65, 0xd5, 0xb1, 0xd1, 0xce, 0x47, 0xb8, + 0x7b, 0x21, 0x76, 0x6d, 0x59, 0x31, 0x49, 0x67, + 0x66, 0xdd, 0x11, 0x43, 0x08, 0x70, 0x6f, 0xf5, + 0xb4, 0x85, 0xc1, 0x69, 0x9a, 0x9b, 0x6c, 0xba, + 0xe2, 0xc1, 0xf1, 0xe3, 0x65, 0xc6, 0x90, 0x4b, + 0xb0, 0xe1, 0x27, 0x77, 0x51, 0xde, 0x41, 0xc0, + 0xa5, 0xed, 0xf6, 0x76, 0x59, 0xac, 0xe2, 0xbb, + 0x37, 0x30, 0xc4, 0xc9, 0x85, 0x5a, 0x24, 0x25, + 0xbd, 0xcd, 0x4a, 0x23, 0x4e, 0xee, 0xb5, 0x3b, + 0x9a, 0x69, 0xd9, 0x8c, 0xb7, 0xb2, 0x7e, 0x42, + 0x83, 0x92, 0xfb, 0x21, 0xbb, 0xb4, 0xb7, 0x37, + 0x41, 0xf1, 0xcf, 0x00, 0xf2, 0x9f, 0x11, 0xad, + 0x3b, 0x25, 0x69, 0xcc, 0xb2, 0xc9, 0x72, 0xf3, + 0x0e, 0x37, 0xb6, 0x41, 0x3b, 0x03, 0xda, 0x59, + 0x5d, 0x47, 0xb6, 0xa5, 0x76, 0x70, 0x39, 0xb9, + 0x66, 0x66, 0xf9, 0xab, 0xec, 0xd8, 0x34, 0x62, + 0xd5, 0x5c, 0x26, 0xb4, 0x5a, 0xb3, 0x52, 0x67, + 0xd9, 0xec, 0xb6, 0xe8, 0xe9, 0x74, 0x55, 0x85, + 0xfd, 0xba, 0x7e, 0x82, 0x0e, 0x46, 0xe4, 0x77, + 0x0e, 0xca, 0xce, 0x65, 0x8d, 0xa2, 0x31, 0x53, + 0x80, 0xd7, 0x16, 0x10, 0xec, 0x35, 0x5a, 0xb2, + 0xcc, 0xb2, 0x5c, 0xc6, 0x57, 0xc7, 0x1b, 0xc4, + 0x7c, 0xdb, 0x0c, 0x8e, 0x2e, 0xae, 0xa0, 0x40, + 0xdc, 0x56, 0x68, 0x9a, 0x3d, 0x81, 0x99, 0x46, + 0xeb, 0xec, 0x0b, 0xe9, 0xd9, 0x26, 0x9f, 0x2a, + 0x89, 0xc9, 0x0f, 0xb3, 0xe4, 0xf9, 0x9d, 0xe1, + 0xd0, 0x4b, 0x04, 0x6c, 0xed, 0x90, 0x4d, 0x3e, + 0x90, 0x41, 0xa6, 0xcf, 0x67, 0x2e, 0x6f, 0x2c, + 0xbd, 0xb2, 0x29, 0x58, 0x19, 0x47, 0x10, 0xc3, + 0x8b, 0x17, 0x89, 0x51, 0xbd, 0xd8, 0x51, 0x27, + 0x46, 0xbd, 0x7b, 0xa3, 0xb4, 0x2a, 0xad, 0xb9, + 0x2d, 0xc0, 0xb7, 0xc9, 0xb2, 0xe7, 0x1d, 0x0c, + 0x7d, 0xc3, 0xa3, 0x77, 0x64, 0x3c, 0xbd, 0xa2, + 0xbd, 0xd2, 0xa1, 0x24, 0xcb, 0xff, 0x00, 0xcf, + 0xcd, 0x95, 0x3c, 0x53, 0x3d, 0x3f, 0xb2, 0x5c, + 0x0f, 0x81, 0x06, 0xcb, 0xad, 0x9c, 0xba, 0xb5, + 0xb0, 0xf6, 0xd9, 0x24, 0x66, 0x10, 0xd6, 0xb8, + 0xb0, 0x57, 0x17, 0x8d, 0xb9, 0xab, 0xb2, 0xa2, + 0x55, 0xc3, 0x36, 0x9c, 0x4d, 0x95, 0xe6, 0x80, + 0x69, 0x6c, 0x33, 0x36, 0x30, 0xdd, 0xcf, 0x14, + 0x47, 0xa1, 0x53, 0xd0, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x37, 0x0a, 0x26, 0xe1, 0x41, 0x74, 0xba, + 0xfe, 0x57, 0x63, 0xe6, 0x37, 0xea, 0x85, 0xc2, + 0xbb, 0xae, 0xbf, 0x95, 0xd8, 0xf9, 0x8d, 0xfa, + 0xa1, 0x70, 0xa0, 0xca, 0x22, 0x20, 0x2f, 0x51, + 0x7e, 0xd5, 0x9e, 0x73, 0x7c, 0x21, 0x79, 0x5e, + 0xa2, 0xfd, 0xab, 0x3c, 0xe6, 0xf8, 0x42, 0x0e, + 0x4d, 0xb2, 0xfe, 0x67, 0x1f, 0xd8, 0x8f, 0xac, + 0xe5, 0x02, 0xa7, 0xb6, 0xcb, 0xf9, 0x9c, 0x7f, + 0x62, 0x3e, 0xb3, 0x94, 0x0a, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x6e, + 0x80, 0x34, 0x93, 0xa8, 0x29, 0x76, 0x6c, 0xf3, + 0x9b, 0x1c, 0x66, 0xee, 0xea, 0x1b, 0x59, 0x25, + 0x15, 0x8e, 0x27, 0x9d, 0x3a, 0x77, 0xd4, 0x5c, + 0x4f, 0x11, 0xca, 0xc7, 0xb8, 0x55, 0xad, 0x70, + 0x2e, 0x1b, 0xe0, 0x10, 0x54, 0xee, 0x79, 0x63, + 0x79, 0x99, 0xde, 0x47, 0x79, 0x62, 0xcf, 0x68, + 0xb7, 0x99, 0x8d, 0x6b, 0x5e, 0xd2, 0x28, 0xda, + 0x6b, 0xc5, 0xbd, 0x44, 0x10, 0xf7, 0xf6, 0x37, + 0x16, 0x17, 0x06, 0xde, 0x70, 0x03, 0x80, 0x0e, + 0x6b, 0x86, 0x90, 0xe6, 0x9d, 0xd0, 0xb9, 0xfb, + 0xdd, 0xbd, 0x6a, 0x7b, 0x3f, 0xba, 0xb3, 0x76, + 0x61, 0x67, 0x0c, 0xa4, 0x4c, 0xcb, 0x56, 0x60, + 0xb9, 0xc2, 0x77, 0xcb, 0x6b, 0xa4, 0x6f, 0x05, + 0x89, 0xb6, 0x7c, 0x1c, 0xea, 0x2b, 0x68, 0x01, + 0xf6, 0x29, 0x87, 0x3c, 0x1f, 0x52, 0x69, 0x1f, + 0xe7, 0x0c, 0x5d, 0xb4, 0x10, 0x5f, 0x90, 0x5d, + 0xd9, 0x46, 0x56, 0x73, 0x29, 0x65, 0x8f, 0x9c, + 0xe6, 0xb9, 0xa6, 0x63, 0xad, 0x2a, 0x4f, 0x62, + 0x95, 0x0b, 0x5e, 0x64, 0x2c, 0xc5, 0xe4, 0x8c, + 0xb2, 0x6e, 0x0b, 0x76, 0x9c, 0x0d, 0xd2, 0x4d, + 0x69, 0xa0, 0x9d, 0x2a, 0x53, 0x64, 0x7d, 0xf2, + 0xe8, 0xff, 0x00, 0x83, 0xf2, 0xa0, 0x81, 0xdc, + 0x5d, 0xd9, 0xbe, 0x58, 0x72, 0xcb, 0x96, 0x40, + 0x64, 0xe7, 0x71, 0xb3, 0x18, 0x20, 0x53, 0x76, + 0x9b, 0xe5, 0x71, 0x6e, 0x85, 0x3b, 0xb5, 0xe2, + 0xb9, 0x94, 0x2d, 0x1e, 0xa8, 0x53, 0xb7, 0x89, + 0x06, 0x9c, 0xb7, 0x67, 0x26, 0xcc, 0x2c, 0x4d, + 0xdb, 0x65, 0x0c, 0x35, 0x70, 0x63, 0x08, 0xae, + 0x2c, 0x23, 0x7e, 0xaa, 0x2e, 0xde, 0x13, 0x3d, + 0xc4, 0x70, 0x83, 0x87, 0x9d, 0x78, 0x66, 0x2d, + 0xea, 0x9a, 0x2b, 0x47, 0xb4, 0x8c, 0xb6, 0xe7, + 0x28, 0xcb, 0xeb, 0x40, 0x1b, 0x59, 0x86, 0xf1, + 0x93, 0x40, 0xaf, 0xf6, 0x8a, 0x87, 0xb8, 0xb6, + 0x36, 0xdb, 0x46, 0x22, 0x1e, 0x48, 0xb9, 0x61, + 0x60, 0xec, 0x39, 0xc1, 0xc1, 0x07, 0x44, 0xdb, + 0x3d, 0x65, 0x04, 0xc6, 0x09, 0xb3, 0x38, 0xe3, + 0x94, 0x52, 0xac, 0x73, 0x68, 0x74, 0xff, 0x00, + 0x69, 0x68, 0xba, 0xc8, 0x24, 0xb5, 0xb9, 0x81, + 0x93, 0x4e, 0xc6, 0xdb, 0x4e, 0x48, 0x6d, 0xcf, + 0xe6, 0x8d, 0x15, 0xd3, 0xdb, 0x5b, 0x76, 0x92, + 0xd2, 0xe6, 0x6c, 0xe2, 0x53, 0x14, 0x2f, 0x78, + 0x21, 0x82, 0xad, 0x69, 0x20, 0xe8, 0xdf, 0x5b, + 0xb3, 0x60, 0xeb, 0x6d, 0x9d, 0xb4, 0xb0, 0xb8, + 0xa7, 0xb4, 0xe2, 0xc4, 0x59, 0x5a, 0x96, 0xb6, + 0xa7, 0x5f, 0x0a, 0x0c, 0x43, 0xb3, 0x36, 0xb3, + 0x87, 0x18, 0x73, 0x18, 0xde, 0x18, 0x31, 0x3e, + 0x8d, 0xd4, 0x3b, 0x3e, 0x32, 0xe2, 0xbe, 0xca, + 0xec, 0xed, 0xad, 0xcc, 0xd0, 0xdf, 0x47, 0x72, + 0xf0, 0x40, 0xe6, 0xd8, 0x34, 0xe9, 0xdd, 0xd6, + 0x57, 0x5e, 0xcb, 0xd3, 0x9b, 0xcc, 0xc8, 0xf5, + 0x1e, 0x9a, 0x82, 0x14, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0x29, + 0xb3, 0x5f, 0xce, 0xed, 0xbf, 0xb5, 0xf5, 0x0a, + 0x8b, 0x52, 0x9b, 0x35, 0xfc, 0xee, 0xdb, 0xfb, + 0x5f, 0x50, 0xa0, 0x9b, 0xcc, 0x3d, 0xf6, 0x6f, + 0x3b, 0xe4, 0x0b, 0x9d, 0x74, 0x66, 0x1e, 0xfb, + 0x37, 0x9d, 0xf2, 0x05, 0xce, 0x80, 0xb0, 0xb2, + 0xb0, 0x83, 0x3b, 0x65, 0xfb, 0x1b, 0x0e, 0xd3, + 0xfc, 0x0c, 0x55, 0x85, 0x67, 0xdb, 0x2f, 0xd8, + 0xd8, 0x76, 0x9f, 0xe0, 0x62, 0xac, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0xdb, 0x6d, 0x6d, 0x2d, + 0xd4, 0xec, 0xb7, 0x84, 0x56, 0x49, 0x08, 0x03, + 0x7b, 0xb6, 0x54, 0xc0, 0xc8, 0x32, 0xe1, 0x37, + 0xb2, 0x3f, 0x32, 0x68, 0xbb, 0x3a, 0x39, 0xb0, + 0xdd, 0x18, 0xbe, 0x6d, 0x71, 0x28, 0xbc, 0xba, + 0xfd, 0xf9, 0x7d, 0xdb, 0x6e, 0x98, 0xc0, 0xf7, + 0x30, 0x10, 0x03, 0xb5, 0x69, 0x14, 0xec, 0x2f, + 0x56, 0x91, 0xdc, 0x5f, 0xe6, 0x2d, 0xe6, 0xc1, + 0x74, 0xb2, 0x4a, 0x1e, 0xea, 0x7e, 0x68, 0xad, + 0x49, 0x28, 0x35, 0x5e, 0xda, 0x4d, 0x65, 0x72, + 0xfb, 0x69, 0xe8, 0x24, 0x66, 0xbd, 0xea, 0x1d, + 0x45, 0x69, 0x3f, 0xfc, 0xab, 0x26, 0x61, 0x77, + 0x97, 0xc9, 0xb4, 0x78, 0x6e, 0x18, 0xd9, 0xad, + 0xe8, 0xd8, 0x64, 0x71, 0xd4, 0x1d, 0xaf, 0x16, + 0x8d, 0xe2, 0xb5, 0xdb, 0xe4, 0x71, 0x5a, 0x5f, + 0x5d, 0xcb, 0x7a, 0xdc, 0x56, 0x56, 0x80, 0xbd, + 0xb5, 0xd4, 0xf0, 0xfd, 0x2d, 0x08, 0x2b, 0xfa, + 0xf5, 0x2f, 0x71, 0x43, 0x34, 0xae, 0xc3, 0x0c, + 0x6f, 0x90, 0xef, 0x30, 0x13, 0x4e, 0xdd, 0x35, + 0x2c, 0x48, 0xf1, 0x24, 0x8e, 0x78, 0x68, 0x60, + 0x71, 0xa8, 0x68, 0xd4, 0x06, 0xf2, 0xdd, 0x69, + 0x98, 0x5e, 0x59, 0x63, 0xf6, 0x59, 0x4c, 0x58, + 0xe8, 0x5d, 0x4a, 0x69, 0xa6, 0xa4, 0x1d, 0x19, + 0x9e, 0x52, 0xfc, 0xba, 0x0b, 0x67, 0xc8, 0xe3, + 0xce, 0xce, 0xd7, 0x17, 0xc7, 0xf3, 0x48, 0xa6, + 0x8a, 0xf7, 0x56, 0x32, 0xbc, 0xa6, 0x4c, 0xc1, + 0xef, 0x38, 0xdb, 0x14, 0x10, 0x8c, 0x52, 0xca, + 0xed, 0xc0, 0x75, 0x51, 0x77, 0xed, 0x2c, 0x8f, + 0x96, 0xcf, 0x2c, 0x92, 0x43, 0x89, 0xef, 0x88, + 0x97, 0x1d, 0xf2, 0x43, 0x34, 0xa8, 0xd8, 0x33, + 0x29, 0x6d, 0xf2, 0xf9, 0xec, 0x58, 0xc1, 0x86, + 0xe0, 0xd5, 0xd2, 0x6e, 0x8e, 0xc0, 0xd2, 0x83, + 0xbb, 0xa8, 0xad, 0x6e, 0x61, 0x91, 0xf9, 0x6d, + 0xe8, 0xba, 0x92, 0x21, 0x89, 0xd1, 0x96, 0xe1, + 0xf1, 0x77, 0xc6, 0x92, 0xa1, 0x74, 0xee, 0x8a, + 0x1d, 0xd0, 0xa7, 0x76, 0x56, 0x37, 0xc7, 0x3c, + 0xb7, 0xef, 0xf1, 0x6d, 0xa1, 0x88, 0x87, 0x38, + 0xea, 0x3b, 0xc2, 0xbb, 0xba, 0x94, 0x1b, 0xde, + 0x1c, 0xf7, 0x3f, 0x71, 0xee, 0x27, 0x84, 0xe8, + 0xaa, 0x0c, 0x25, 0x42, 0xd9, 0x6b, 0x03, 0xae, + 0xae, 0x22, 0xb7, 0x6d, 0x2b, 0x2b, 0xda, 0xda, + 0xef, 0x12, 0x74, 0xa9, 0xeb, 0xbb, 0x8c, 0xab, + 0x2d, 0xbc, 0x6e, 0x5c, 0xdb, 0x28, 0xe6, 0x89, + 0x94, 0x13, 0xce, 0xfd, 0x2f, 0xa9, 0xa5, 0x48, + 0xed, 0x20, 0x8b, 0xc9, 0xb2, 0xf6, 0x66, 0x37, + 0xad, 0xb5, 0x91, 0xc5, 0x8d, 0x73, 0x5c, 0xec, + 0x43, 0xfa, 0xab, 0x8a, 0x46, 0x86, 0x3d, 0xec, + 0xd7, 0x81, 0xc4, 0x0d, 0xda, 0x00, 0x69, 0xad, + 0x59, 0x32, 0xbb, 0x5b, 0x5b, 0x6d, 0xa7, 0xc1, + 0x68, 0xf0, 0xf8, 0x1d, 0x1b, 0x9f, 0x1d, 0x0d, + 0x40, 0xa8, 0xd5, 0xdf, 0x5a, 0xec, 0xae, 0xf2, + 0x79, 0x33, 0x11, 0x97, 0x0b, 0x16, 0x39, 0x92, + 0x48, 0xe6, 0x19, 0x9f, 0xa6, 0x42, 0xe3, 0x5d, + 0x3d, 0x8d, 0x21, 0x05, 0x7b, 0x75, 0x17, 0x46, + 0x63, 0x6e, 0xdb, 0x5b, 0xf9, 0xed, 0xd9, 0xe4, + 0x47, 0x21, 0x0d, 0xae, 0xba, 0x6e, 0x2e, 0x74, + 0x1e, 0xa3, 0x86, 0x69, 0x4e, 0x18, 0x98, 0xe9, + 0x0e, 0xe8, 0x68, 0x27, 0xc0, 0xbb, 0xb3, 0x2c, + 0xa6, 0x4b, 0x0b, 0x5b, 0x69, 0x66, 0xf1, 0x66, + 0x9c, 0x3b, 0x14, 0x74, 0xf2, 0x69, 0xd9, 0xdd, + 0x5c, 0xf6, 0x97, 0xf7, 0x96, 0x78, 0xfd, 0x96, + 0x53, 0x16, 0x3a, 0x62, 0xc3, 0x4d, 0x34, 0xd5, + 0xad, 0x4b, 0x6d, 0x0c, 0xb2, 0x4d, 0x96, 0x65, + 0x73, 0x4a, 0x71, 0x49, 0x24, 0x65, 0xef, 0x71, + 0xdd, 0x25, 0xad, 0x28, 0x23, 0xf2, 0xbc, 0xaa, + 0x5c, 0xc6, 0x57, 0x00, 0xe1, 0x14, 0x31, 0x8a, + 0xcb, 0x2b, 0xb5, 0x35, 0x76, 0xf5, 0x05, 0xa5, + 0xc4, 0x6f, 0xea, 0xeb, 0xe6, 0xdc, 0xcd, 0x10, + 0xa9, 0x8f, 0x0d, 0x2b, 0x4d, 0xed, 0x25, 0x70, + 0xda, 0xe6, 0x52, 0xdb, 0x59, 0x5c, 0x59, 0xc6, + 0xd1, 0x86, 0xe8, 0x0c, 0x4f, 0xdd, 0x14, 0xde, + 0x5d, 0xdb, 0x29, 0x13, 0xd9, 0x78, 0xeb, 0xd7, + 0x9c, 0x36, 0xd6, 0xf1, 0xbb, 0x9c, 0x79, 0xd0, + 0xde, 0xd2, 0x08, 0x52, 0x08, 0xd7, 0xac, 0x68, + 0x3d, 0xb5, 0x98, 0x99, 0x8e, 0x56, 0x30, 0x9a, + 0x63, 0x73, 0x5b, 0x5e, 0xd9, 0xa2, 0xcc, 0xef, + 0x0f, 0x99, 0xf2, 0x0d, 0x01, 0xce, 0x2e, 0x03, + 0x73, 0x4a, 0xcd, 0xa1, 0x06, 0xe6, 0x1d, 0xdf, + 0xd6, 0x33, 0xeb, 0x04, 0x1d, 0x59, 0xc5, 0x83, + 0x32, 0xfb, 0xe7, 0x5a, 0xc6, 0xe2, 0xf6, 0xb1, + 0xad, 0x35, 0x3a, 0xf4, 0x8a, 0xae, 0x48, 0x18, + 0xc7, 0xcd, 0x1b, 0x24, 0x76, 0x06, 0x39, 0xc0, + 0x39, 0xda, 0xa8, 0x09, 0xd2, 0x55, 0x9b, 0x3e, + 0xbd, 0xcb, 0xac, 0xb3, 0x22, 0x65, 0xb4, 0x6d, + 0xdc, 0xcf, 0x6b, 0x4c, 0xa6, 0x4a, 0x51, 0xad, + 0x1a, 0x00, 0x68, 0x3b, 0xb4, 0x5c, 0x59, 0x9e, + 0x5d, 0x69, 0x16, 0x65, 0x63, 0x25, 0xbb, 0x40, + 0xb5, 0xbd, 0x2d, 0x77, 0x37, 0xb8, 0x0d, 0x5b, + 0x88, 0x70, 0x38, 0x20, 0xe2, 0x92, 0xc2, 0x07, + 0xe6, 0xed, 0xb1, 0xb6, 0x9c, 0x49, 0x14, 0x8e, + 0x6b, 0x5b, 0x3d, 0x2a, 0x34, 0x8a, 0x9d, 0x4b, + 0x9e, 0xfa, 0xd4, 0xda, 0x5d, 0xcd, 0x6d, 0x8b, + 0x19, 0x85, 0xd8, 0x71, 0x01, 0x4a, 0xa9, 0xe6, + 0x0b, 0x2b, 0x2d, 0xa6, 0x75, 0xab, 0x2d, 0x58, + 0x43, 0x9f, 0x18, 0x89, 0xf5, 0xfd, 0x9f, 0xea, + 0xc1, 0x34, 0x1a, 0x75, 0xd5, 0x70, 0xed, 0x1d, + 0xcd, 0xbc, 0xb7, 0xb2, 0xc2, 0xcb, 0x76, 0xc5, + 0x2c, 0x72, 0x1e, 0x72, 0x60, 0x74, 0xbf, 0xb8, + 0x82, 0x23, 0xf2, 0xee, 0x29, 0xdf, 0x86, 0xc7, + 0x54, 0x7b, 0x77, 0x38, 0xe3, 0x70, 0x62, 0xe7, + 0x84, 0x3b, 0x94, 0xd7, 0xe0, 0x50, 0xf6, 0xb6, + 0xee, 0xb8, 0xb9, 0x8a, 0xdc, 0x56, 0xb3, 0x3c, + 0x37, 0x46, 0xf1, 0x22, 0xbd, 0xe5, 0x6b, 0x6d, + 0xf3, 0x0e, 0xd2, 0xba, 0xc2, 0xbf, 0xf6, 0xe6, + 0x0f, 0x67, 0x0d, 0xdc, 0xa8, 0x18, 0xbf, 0xa1, + 0x05, 0x63, 0x2d, 0xb5, 0x6d, 0xed, 0xf4, 0x16, + 0xae, 0x71, 0x63, 0x64, 0x34, 0xa8, 0xdc, 0xd0, + 0x4f, 0xc8, 0xa4, 0xe5, 0xca, 0x72, 0x18, 0xe7, + 0x75, 0xb3, 0xef, 0x9e, 0xc9, 0x58, 0xec, 0x04, + 0x39, 0x9a, 0x01, 0xed, 0xae, 0x7c, 0xa2, 0x07, + 0x5b, 0xed, 0x14, 0x30, 0x3b, 0xca, 0x8a, 0x57, + 0xb0, 0xff, 0x00, 0x64, 0x39, 0x68, 0xce, 0x80, + 0xeb, 0x6b, 0xbd, 0xe1, 0x2b, 0xb4, 0x76, 0x8a, + 0x06, 0x69, 0x94, 0xcd, 0x96, 0xcc, 0xd6, 0x38, + 0x89, 0x22, 0x97, 0x4c, 0x52, 0x0d, 0x44, 0x05, + 0xd3, 0x69, 0x94, 0xda, 0x32, 0xc9, 0xb7, 0xf9, + 0xa4, 0xce, 0x86, 0x19, 0x0d, 0x22, 0x64, 0x62, + 0xaf, 0x77, 0x85, 0x74, 0x5f, 0x93, 0x36, 0xca, + 0xd9, 0x4a, 0xfd, 0x2e, 0x8e, 0x42, 0xd0, 0x4e, + 0xba, 0x55, 0xcd, 0x4d, 0xaa, 0xfd, 0x5f, 0xb0, + 0xdb, 0x37, 0x43, 0x63, 0x86, 0xa0, 0x70, 0x04, + 0x1a, 0x6e, 0xf2, 0x7b, 0x37, 0xd8, 0xbf, 0x30, + 0xca, 0xe6, 0x74, 0xd1, 0x44, 0x7f, 0x5b, 0x1c, + 0x9e, 0x50, 0x1b, 0xfb, 0x8a, 0x1f, 0xf2, 0x0b, + 0xaa, 0xd3, 0x31, 0xb9, 0xb3, 0x86, 0x78, 0x61, + 0xc3, 0xcd, 0xdc, 0x0a, 0x48, 0x08, 0xae, 0xad, + 0xe5, 0xca, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x2f, 0x39, 0xbf, 0x91, 0x6f, 0xe6, + 0x9f, 0x02, 0x8d, 0x2a, 0x4b, 0x37, 0xf2, 0x2d, + 0xfc, 0xd3, 0xe0, 0x51, 0xa5, 0x07, 0xb8, 0x7f, + 0x6a, 0xcf, 0x39, 0xaa, 0x5a, 0xa3, 0x79, 0x44, + 0xc5, 0xfb, 0x46, 0x79, 0xc1, 0x4a, 0xa0, 0x54, + 0x6f, 0x28, 0xfc, 0xc8, 0xd6, 0xe6, 0xd3, 0xed, + 0x3e, 0x50, 0xbb, 0xca, 0xe0, 0xcc, 0x7d, 0xe6, + 0xd3, 0xed, 0x3e, 0x50, 0x81, 0x97, 0x7b, 0xcd, + 0xdf, 0x9e, 0x7e, 0xb1, 0x52, 0x0a, 0x3f, 0x2e, + 0xf7, 0x9b, 0xbf, 0x3c, 0xfd, 0x62, 0xa4, 0x10, + 0x60, 0xea, 0x3d, 0xa5, 0x10, 0x75, 0x95, 0x2e, + 0x75, 0x1e, 0xd2, 0x88, 0x3a, 0xca, 0x02, 0x22, + 0x20, 0xdf, 0x9a, 0x7f, 0xa6, 0x5f, 0xe7, 0x8f, + 0xac, 0xaa, 0x2a, 0xdd, 0x9a, 0x7f, 0xa6, 0x5f, + 0xe7, 0x8f, 0xac, 0xaa, 0x28, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x9a, 0x37, 0x51, 0x37, 0xd0, 0x4f, + 0x5b, 0x1e, 0xac, 0xc8, 0x86, 0x63, 0x03, 0x47, + 0xb6, 0x5c, 0xbc, 0xc6, 0x25, 0x20, 0x1c, 0x03, + 0x4e, 0xae, 0x4a, 0xd9, 0x96, 0xcf, 0x2e, 0x77, + 0x6f, 0x73, 0x69, 0x7c, 0x79, 0xd7, 0xc6, 0xce, + 0x72, 0xde, 0x52, 0x3c, 0x66, 0x1a, 0xef, 0xae, + 0x5b, 0x0c, 0xc2, 0xc6, 0x5c, 0xb5, 0xd9, 0x56, + 0x62, 0x5d, 0x1c, 0x61, 0xc5, 0xd0, 0xce, 0xd1, + 0x8b, 0x09, 0xec, 0x8e, 0xea, 0xda, 0xdb, 0xdc, + 0xaf, 0x2a, 0xb6, 0x9d, 0xb6, 0x13, 0x3a, 0xea, + 0xea, 0xe1, 0xb8, 0x39, 0xc2, 0x30, 0xb5, 0xa1, + 0x07, 0x9d, 0x94, 0xe7, 0x3d, 0xb2, 0x67, 0x1a, + 0x0b, 0x41, 0x19, 0xf6, 0x9c, 0x5e, 0x4d, 0x3f, + 0x32, 0xbf, 0x96, 0xfa, 0xf1, 0xb5, 0x22, 0x61, + 0x99, 0xfe, 0xb2, 0x9c, 0xce, 0x01, 0xec, 0xf4, + 0xd5, 0x82, 0x9a, 0x68, 0xb5, 0xfb, 0x7d, 0xad, + 0xbe, 0x47, 0xec, 0x36, 0xaf, 0x26, 0xe2, 0xe1, + 0xd5, 0xb9, 0x76, 0x12, 0x28, 0x3e, 0x68, 0x3b, + 0xab, 0x37, 0x19, 0x95, 0xad, 0xe6, 0x51, 0x14, + 0x17, 0x0e, 0x22, 0xfa, 0xd4, 0xd2, 0x23, 0x84, + 0x90, 0xe6, 0x6a, 0xf1, 0x8e, 0xe6, 0x8f, 0x02, + 0x08, 0x97, 0x6a, 0x2a, 0xd9, 0x7d, 0x73, 0xec, + 0xd9, 0x9e, 0x4d, 0x21, 0x34, 0x6f, 0x36, 0xd6, + 0xb8, 0xf6, 0x1f, 0x46, 0x95, 0x54, 0x22, 0xa2, + 0x8a, 0x57, 0x3b, 0xcc, 0x2d, 0x6f, 0x45, 0x98, + 0xb7, 0x71, 0x71, 0x82, 0x20, 0xc7, 0x92, 0xd2, + 0x34, 0x8a, 0x71, 0x20, 0x93, 0x96, 0xdf, 0xab, + 0x2d, 0xf3, 0xa9, 0xc0, 0xa1, 0x91, 0xc2, 0x28, + 0x77, 0x34, 0x3f, 0x4e, 0x8e, 0x5a, 0xe5, 0xcd, + 0x28, 0x32, 0x0c, 0xa4, 0x9d, 0x40, 0xf7, 0x93, + 0x3d, 0xcf, 0x2d, 0xb3, 0x0b, 0x0b, 0x78, 0x60, + 0x24, 0xbc, 0x90, 0xe9, 0x81, 0x69, 0x1e, 0x30, + 0x6e, 0x1f, 0x09, 0x5c, 0xb7, 0xd9, 0x85, 0xac, + 0xf9, 0x3d, 0x85, 0x9c, 0x64, 0x99, 0x6d, 0xc1, + 0xe7, 0x5a, 0x41, 0xd0, 0x3b, 0x05, 0x07, 0x4e, + 0xd7, 0xf8, 0xd7, 0xf0, 0x4a, 0x3c, 0x99, 0x21, + 0x04, 0x1e, 0xe9, 0xd0, 0xa3, 0x6c, 0xf2, 0xeb, + 0x8b, 0xab, 0x79, 0xee, 0x63, 0x2d, 0x6c, 0x76, + 0xcd, 0xc4, 0xfc, 0x5a, 0x2b, 0xa0, 0x9a, 0x05, + 0x24, 0xcb, 0xfc, 0xb7, 0x32, 0xb1, 0x86, 0xdb, + 0x32, 0x91, 0xd6, 0xf7, 0x16, 0xe0, 0x06, 0x4e, + 0xd1, 0x88, 0x38, 0x53, 0x42, 0xd7, 0x77, 0x7d, + 0x97, 0x5a, 0x65, 0xee, 0xcb, 0x72, 0xc7, 0x3a, + 0x5e, 0x78, 0xd6, 0x79, 0xdc, 0x29, 0xa1, 0x04, + 0x32, 0xb4, 0x3a, 0xfd, 0xd6, 0x3b, 0x3b, 0x97, + 0xbd, 0x91, 0x47, 0x31, 0x7f, 0x8b, 0x86, 0x50, + 0x5c, 0x06, 0xbd, 0xe5, 0x57, 0x52, 0xb7, 0xb9, + 0x8d, 0xb4, 0xd9, 0x2d, 0x95, 0x9b, 0x1c, 0x4c, + 0xd0, 0x1a, 0xc8, 0x08, 0x34, 0x15, 0x07, 0x77, + 0x75, 0x06, 0xbb, 0xfc, 0xf6, 0xf6, 0xf6, 0x2e, + 0x61, 0xd8, 0x61, 0xb7, 0xdd, 0x8e, 0x26, 0xe1, + 0x06, 0x9d, 0xd5, 0xdb, 0x97, 0x31, 0xd7, 0x9b, + 0x3b, 0x3d, 0xae, 0xb7, 0xc3, 0x3b, 0x1e, 0xd1, + 0xaf, 0x43, 0x9c, 0x2b, 0xf2, 0xa8, 0x15, 0x31, + 0xb3, 0x99, 0xa5, 0xae, 0x5f, 0x2c, 0xe2, 0xe9, + 0xc5, 0xb1, 0x4c, 0xd1, 0xa8, 0x17, 0x0c, 0x40, + 0xe8, 0xd5, 0xd8, 0x41, 0x24, 0x6e, 0x1a, 0xdd, + 0xae, 0x64, 0x60, 0xfe, 0xad, 0xac, 0x16, 0xf4, + 0xfe, 0xc6, 0xae, 0x15, 0xcb, 0x98, 0xc7, 0xec, + 0x3b, 0x3e, 0x6d, 0xdc, 0x28, 0xfb, 0x8b, 0xb7, + 0x92, 0x3f, 0xaa, 0x1c, 0x69, 0xc0, 0x00, 0x51, + 0xaf, 0xbf, 0x61, 0xce, 0xba, 0xc1, 0xb5, 0xc1, + 0xcf, 0xf3, 0xa3, 0x41, 0xae, 0x1a, 0x8a, 0x68, + 0xec, 0xae, 0xcd, 0xa4, 0xcd, 0x6d, 0x73, 0x07, + 0xc0, 0xdb, 0x57, 0x17, 0x47, 0x18, 0x71, 0x35, + 0x05, 0xb5, 0x2e, 0xd3, 0xbb, 0xd8, 0x08, 0x36, + 0x3d, 0xee, 0x8f, 0x64, 0xed, 0x64, 0x6e, 0xb6, + 0xce, 0x48, 0xed, 0x87, 0x38, 0xfc, 0x8a, 0x50, + 0x42, 0xc7, 0xe7, 0x11, 0xe6, 0xf4, 0xfd, 0x51, + 0xb4, 0xe7, 0x89, 0xdc, 0xc4, 0x06, 0x1f, 0x01, + 0x50, 0x32, 0x66, 0x16, 0x8e, 0xd9, 0xf8, 0x6c, + 0x1a, 0x5c, 0x6e, 0x19, 0x29, 0x79, 0x61, 0x1a, + 0x00, 0xa9, 0x3a, 0xfb, 0x45, 0x75, 0x37, 0x3d, + 0x81, 0xbb, 0x3c, 0x6c, 0x0b, 0x8f, 0xb5, 0x06, + 0xf3, 0x60, 0x61, 0x34, 0xc0, 0x5d, 0xae, 0xbe, + 0x6a, 0x0c, 0xdb, 0xc8, 0x64, 0xd9, 0x8c, 0xc6, + 0x53, 0xae, 0x49, 0xcb, 0x8f, 0x77, 0x02, 0x80, + 0x52, 0x96, 0xd9, 0x85, 0xac, 0x79, 0x05, 0xcd, + 0x8b, 0xdc, 0x44, 0xf2, 0xc9, 0x89, 0x8d, 0x0d, + 0x24, 0x50, 0x60, 0xdd, 0xaf, 0x61, 0x45, 0xa0, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x6e, 0x14, 0x4d, + 0xc2, 0x82, 0xe9, 0x75, 0xfc, 0xae, 0xc7, 0xcc, + 0x6f, 0xd5, 0x0b, 0x85, 0x77, 0x5d, 0x7f, 0x2b, + 0xb1, 0xf3, 0x1b, 0xf5, 0x42, 0xe1, 0x41, 0x94, + 0x44, 0x40, 0x5e, 0xa2, 0xfd, 0xab, 0x3c, 0xe6, + 0xf8, 0x42, 0xf2, 0xbd, 0x43, 0xfb, 0x68, 0xfc, + 0xf6, 0xf8, 0x42, 0x0e, 0x4d, 0xb2, 0xfe, 0x67, + 0x1f, 0xd8, 0x8f, 0xac, 0xe5, 0x02, 0xa7, 0xb6, + 0xcb, 0xf9, 0x9c, 0x5f, 0x62, 0x3e, 0xb3, 0x94, + 0x0a, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0xe8, 0xcb, 0xa0, 0x6d, 0xc5, + 0xfd, 0xbc, 0x0f, 0xf2, 0x24, 0x91, 0xad, 0x77, + 0x6b, 0x75, 0x49, 0x67, 0x79, 0x95, 0xe5, 0xbe, + 0x67, 0x25, 0xb5, 0xac, 0xae, 0xb6, 0x86, 0xdb, + 0x0b, 0x63, 0x63, 0x0e, 0x16, 0xe9, 0x68, 0x35, + 0x20, 0x6b, 0xee, 0xa8, 0x78, 0x9e, 0xf8, 0xa4, + 0x6c, 0xac, 0x34, 0x7c, 0x6e, 0x0e, 0x69, 0xec, + 0x83, 0x55, 0x35, 0x71, 0x98, 0x64, 0x59, 0x83, + 0xc5, 0xc5, 0xf4, 0x33, 0x47, 0x71, 0x40, 0x24, + 0x11, 0xd3, 0x0b, 0x88, 0x40, 0xcf, 0x99, 0x1c, + 0xb6, 0x56, 0x19, 0x89, 0x68, 0x64, 0xd7, 0x0c, + 0xa4, 0xd4, 0x14, 0xae, 0x11, 0x5c, 0x54, 0x52, + 0xd6, 0x71, 0xdc, 0x37, 0x24, 0x6e, 0x5e, 0x64, + 0x0d, 0xbf, 0x7d, 0xbb, 0x9d, 0x0b, 0x4f, 0x94, + 0x18, 0x75, 0x36, 0xaa, 0x0e, 0xef, 0x38, 0xb7, + 0xbc, 0xbe, 0xb6, 0x74, 0xb0, 0xb9, 0xb6, 0x16, + 0xba, 0x19, 0x03, 0x68, 0x5c, 0x45, 0x29, 0xa7, + 0x11, 0x01, 0x6b, 0x9b, 0x3b, 0x9a, 0x4c, 0xe5, + 0xb9, 0x93, 0x41, 0x01, 0x84, 0x06, 0x46, 0x69, + 0xfb, 0x31, 0xa1, 0xcd, 0xee, 0xa0, 0x8d, 0xa1, + 0x69, 0xa3, 0x85, 0x08, 0xd0, 0x41, 0xdf, 0x53, + 0xdb, 0x23, 0xef, 0x97, 0x03, 0x74, 0xc1, 0xab, + 0x7f, 0x4a, 0x8b, 0xcc, 0xee, 0x2d, 0xae, 0x6f, + 0x1f, 0x71, 0x6a, 0xc7, 0x47, 0x1c, 0x86, 0xa5, + 0xae, 0xa7, 0x95, 0xf9, 0xc7, 0x46, 0xfa, 0x65, + 0x99, 0x84, 0x99, 0x75, 0xe3, 0x6e, 0x58, 0x31, + 0x53, 0x43, 0xd9, 0xbe, 0xd3, 0xb8, 0x83, 0x98, + 0x03, 0x8a, 0x9a, 0xcd, 0x69, 0xdf, 0x56, 0x8c, + 0xde, 0xdc, 0x5d, 0xed, 0x2d, 0x94, 0x3a, 0xc6, + 0x06, 0xb9, 0xe3, 0xb0, 0xd2, 0x5f, 0xdf, 0xa5, + 0x17, 0x17, 0xb6, 0xec, 0xc8, 0x98, 0x5c, 0x8b, + 0x79, 0xb9, 0xda, 0xe2, 0x10, 0xd7, 0xc4, 0xc5, + 0xbd, 0xda, 0x5e, 0x2d, 0x73, 0xf6, 0xb7, 0x33, + 0x9f, 0x31, 0xba, 0x8d, 0xce, 0x92, 0x48, 0xf0, + 0x42, 0x19, 0x4f, 0x10, 0x6f, 0x14, 0x1d, 0x79, + 0xa0, 0xc9, 0x6e, 0x73, 0x17, 0xcf, 0x35, 0xfb, + 0xe3, 0x95, 0xa7, 0x0e, 0x10, 0xca, 0x86, 0xe0, + 0xd1, 0xaf, 0xb7, 0xa5, 0x7a, 0xcf, 0x23, 0x64, + 0x99, 0xae, 0x59, 0x7f, 0x09, 0xc5, 0x1d, 0xc3, + 0x98, 0x03, 0xfb, 0x21, 0xc0, 0xb7, 0xbc, 0xab, + 0x6e, 0x25, 0xce, 0x2e, 0x76, 0x92, 0x49, 0x2e, + 0xee, 0x93, 0xc6, 0xa5, 0x63, 0xce, 0x60, 0xea, + 0xfb, 0x3b, 0x69, 0x63, 0x7b, 0xa5, 0xb3, 0x99, + 0xb3, 0x07, 0x8c, 0x34, 0x2d, 0x69, 0xa9, 0x03, + 0x48, 0x41, 0xd9, 0x9f, 0xe7, 0x39, 0x9d, 0xa6, + 0x69, 0x2c, 0x36, 0xf3, 0x98, 0xe3, 0x68, 0x69, + 0x6b, 0x68, 0x08, 0xa9, 0x1d, 0x90, 0xbc, 0x67, + 0x7c, 0xdd, 0xee, 0x51, 0x65, 0x9b, 0x39, 0xa1, + 0xb7, 0x0f, 0x38, 0x24, 0x73, 0x77, 0x46, 0x91, + 0x4e, 0xf2, 0x8c, 0xcd, 0xef, 0xe3, 0xcc, 0x2f, + 0xdf, 0x75, 0x13, 0x5c, 0xc6, 0xbc, 0x34, 0x61, + 0x75, 0x2b, 0xa0, 0x76, 0x2a, 0xb7, 0x3f, 0x33, + 0x86, 0x4c, 0x8d, 0x99, 0x6b, 0xd8, 0xfe, 0x76, + 0x39, 0x31, 0x31, 0xe2, 0x98, 0x69, 0x5e, 0xdd, + 0x7f, 0x39, 0x07, 0x56, 0xcb, 0x7e, 0xcb, 0x32, + 0xff, 0x00, 0xc7, 0xf9, 0x1e, 0xa0, 0x94, 0x8e, + 0x4f, 0x99, 0xc3, 0x62, 0xdb, 0xb1, 0x23, 0x1c, + 0xf3, 0x73, 0x16, 0x06, 0xe0, 0xa5, 0x01, 0xd3, + 0xaf, 0x13, 0xbb, 0x2a, 0x39, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x14, + 0xa6, 0xcd, 0x7f, 0x3b, 0xb6, 0xfe, 0xd7, 0xd4, + 0x2a, 0x2d, 0x4a, 0x6c, 0xdf, 0xf3, 0xab, 0x6f, + 0xed, 0xfd, 0x42, 0x82, 0x6f, 0x30, 0xf7, 0xd9, + 0xbc, 0xef, 0x90, 0x2e, 0x75, 0xd1, 0x98, 0xfb, + 0xf4, 0xbd, 0xbf, 0x90, 0x2e, 0x74, 0x05, 0x85, + 0x95, 0x84, 0x19, 0xdb, 0x2f, 0xd8, 0xd8, 0x76, + 0x9f, 0xe0, 0x62, 0xac, 0x2b, 0x3e, 0xd9, 0x7e, + 0xc6, 0xc3, 0xb4, 0xff, 0x00, 0x03, 0x15, 0x61, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x06, 0xcb, 0x78, + 0x24, 0xb8, 0x9e, 0x38, 0x22, 0x15, 0x92, 0x53, + 0x85, 0xa3, 0xb2, 0x54, 0xd5, 0xe5, 0xe5, 0xbe, + 0x4d, 0x0b, 0xb2, 0xec, 0xba, 0x86, 0xe4, 0x8c, + 0x37, 0x37, 0x5b, 0xa0, 0xfc, 0xd6, 0xf6, 0x54, + 0x66, 0x57, 0x7d, 0xd5, 0xf7, 0x8d, 0xba, 0xe6, + 0xf9, 0xd2, 0xc0, 0x40, 0x69, 0x38, 0x75, 0xf6, + 0x68, 0x54, 0x83, 0xb3, 0xec, 0xb9, 0xee, 0x73, + 0x9d, 0x94, 0x42, 0x5c, 0xe3, 0x57, 0x12, 0x45, + 0x49, 0x3f, 0xd8, 0x41, 0x0f, 0x14, 0x32, 0xdc, + 0x4c, 0xc8, 0xa3, 0x15, 0x96, 0x57, 0x06, 0x80, + 0x74, 0x9c, 0x44, 0xe9, 0xe0, 0xd6, 0xad, 0x99, + 0xbb, 0x45, 0xd6, 0x59, 0x3d, 0x95, 0xbc, 0xa6, + 0x49, 0xf2, 0xfc, 0x06, 0x71, 0xba, 0xf0, 0x06, + 0x9a, 0xa8, 0x68, 0xb3, 0xab, 0x68, 0x2f, 0xcd, + 0xe4, 0x16, 0x0c, 0x8c, 0xb6, 0x3c, 0x11, 0xc6, + 0xc7, 0x50, 0x07, 0x1d, 0x6e, 0xf2, 0x35, 0xd1, + 0x73, 0x58, 0x66, 0xb3, 0xd9, 0x5f, 0x3a, 0xec, + 0x81, 0x29, 0x93, 0x10, 0x91, 0xa4, 0xe8, 0x70, + 0x76, 0x9d, 0x68, 0x38, 0x90, 0xea, 0x5b, 0x26, + 0x7c, 0x72, 0x4a, 0xf7, 0xc6, 0xce, 0x69, 0xae, + 0x76, 0x26, 0xc7, 0x5a, 0xd0, 0x1d, 0xca, 0xad, + 0x67, 0x52, 0x09, 0xcd, 0xa0, 0xf7, 0x0c, 0xab, + 0xec, 0x4f, 0x81, 0xab, 0x8b, 0x28, 0xcb, 0x1b, + 0x7f, 0x33, 0x9d, 0x33, 0xb9, 0xbb, 0x58, 0x1b, + 0x8e, 0x79, 0x35, 0x68, 0xde, 0x1d, 0xb5, 0x8c, + 0xc3, 0x33, 0x37, 0x90, 0x5a, 0xc0, 0x63, 0xc1, + 0xec, 0x8d, 0xc0, 0x1d, 0x8a, 0xb8, 0xbb, 0xdd, + 0x85, 0xb7, 0x2a, 0xce, 0x63, 0xb1, 0xb5, 0x96, + 0xda, 0x4b, 0x56, 0xdc, 0xb6, 0x67, 0x55, 0xf8, + 0x9d, 0x40, 0x74, 0x0d, 0x04, 0x50, 0xa0, 0x66, + 0xb9, 0xb8, 0xba, 0x8d, 0xb6, 0x96, 0x6c, 0xe6, + 0x2c, 0x19, 0xe4, 0x30, 0x68, 0x2e, 0x23, 0x75, + 0xcb, 0x5e, 0x5d, 0x9a, 0x32, 0xc5, 0x8f, 0x63, + 0xad, 0x62, 0xb8, 0x32, 0x1a, 0xd6, 0x41, 0xa4, + 0x2e, 0xbe, 0xbc, 0xcb, 0x05, 0x3f, 0xc9, 0xe0, + 0xe1, 0x1a, 0xbf, 0x76, 0xa1, 0xdc, 0xe0, 0x5e, + 0xe7, 0x01, 0x84, 0x38, 0x93, 0x87, 0x70, 0x03, + 0xb8, 0x34, 0x04, 0x13, 0x16, 0xf9, 0x94, 0x77, + 0xb9, 0xc5, 0x83, 0xbd, 0x9e, 0x3b, 0x60, 0xc9, + 0x29, 0xfa, 0xbd, 0x00, 0xd4, 0x83, 0x53, 0xc0, + 0xb9, 0xb3, 0xe6, 0x3c, 0xe7, 0x57, 0x31, 0xfe, + 0x73, 0xa4, 0xf1, 0x7f, 0xb5, 0x4a, 0x28, 0xf6, + 0x39, 0xcc, 0x70, 0x7b, 0x0e, 0x17, 0x36, 0x85, + 0xa7, 0xb2, 0x0d, 0x54, 0xdb, 0xb3, 0xfb, 0x29, + 0x9f, 0x1d, 0xc5, 0xdd, 0x88, 0x96, 0xf2, 0x30, + 0x29, 0x20, 0x71, 0x0d, 0x24, 0x6a, 0x25, 0xa8, + 0x36, 0x64, 0x36, 0x13, 0xd8, 0x6d, 0x03, 0x21, + 0x9c, 0x00, 0xf3, 0x1b, 0x9d, 0x46, 0x9a, 0xd0, + 0x10, 0xa3, 0xf2, 0x92, 0x7a, 0xfa, 0x01, 0xb9, + 0xed, 0x07, 0xc2, 0x78, 0xd7, 0xab, 0x6c, 0xf2, + 0x78, 0xb3, 0x57, 0x66, 0x72, 0xb3, 0x9d, 0x7b, + 0x83, 0x9a, 0x58, 0x0d, 0x28, 0x1d, 0xaa, 0x9d, + 0xa5, 0xcb, 0x6b, 0x77, 0xec, 0xd7, 0xec, 0xbd, + 0x0c, 0xa9, 0x8e, 0x43, 0x21, 0x8e, 0xb4, 0xd6, + 0x49, 0xa6, 0x2e, 0xd2, 0x0d, 0xd9, 0xe5, 0x06, + 0x6f, 0x77, 0x5f, 0x5a, 0x57, 0x0f, 0xe5, 0xa1, + 0x4c, 0x65, 0x77, 0xce, 0xb8, 0xda, 0x11, 0x74, + 0x20, 0x0e, 0x33, 0xb9, 0xd8, 0x99, 0x5a, 0x86, + 0xb4, 0x8f, 0x19, 0xe6, 0xa3, 0x50, 0x51, 0xb7, + 0x8e, 0x6b, 0xee, 0xe6, 0x7b, 0x29, 0x84, 0xc8, + 0xe2, 0x29, 0xaa, 0x95, 0x34, 0xf0, 0x20, 0xd2, + 0x14, 0xde, 0x77, 0xfc, 0x9f, 0x27, 0xfb, 0x1f, + 0xee, 0xb5, 0x42, 0x76, 0x06, 0xb3, 0xf2, 0x69, + 0x5d, 0xb7, 0x99, 0x91, 0xbb, 0xb2, 0xb4, 0xb6, + 0x74, 0x58, 0x05, 0xa3, 0x43, 0x43, 0xc1, 0xc5, + 0x8b, 0x40, 0x1a, 0x90, 0x67, 0x28, 0xcb, 0xbd, + 0xbe, 0xe0, 0x87, 0xbb, 0x05, 0xbc, 0x2d, 0xe7, + 0x27, 0x7e, 0xf3, 0x42, 0xdd, 0x9a, 0xe6, 0xed, + 0x9d, 0x82, 0xc6, 0xc9, 0xbc, 0xc5, 0x8b, 0x35, + 0x30, 0x79, 0x4f, 0xa7, 0xe7, 0x3b, 0xb0, 0xb1, + 0x95, 0xe7, 0x0c, 0xcb, 0xed, 0xe6, 0xb7, 0x92, + 0xd5, 0xb7, 0x2c, 0x9c, 0x82, 0xf0, 0xe7, 0x50, + 0x50, 0x0d, 0x54, 0xc2, 0x56, 0xfe, 0xbb, 0xca, + 0xfe, 0xe7, 0x83, 0x7f, 0x58, 0xfe, 0x1a, 0x0e, + 0x3c, 0xb3, 0x32, 0x6d, 0x88, 0x90, 0x3a, 0xda, + 0x2b, 0x80, 0xf2, 0x0f, 0xeb, 0x34, 0xd1, 0x6c, + 0xb9, 0xcc, 0x9b, 0x7d, 0x71, 0x6b, 0x4b, 0x68, + 0xed, 0xf0, 0x48, 0xda, 0xf3, 0x7b, 0xb5, 0x70, + 0x51, 0xf2, 0xbc, 0x3e, 0x57, 0xbd, 0xad, 0x0c, + 0x0e, 0x75, 0x5a, 0xc1, 0xa8, 0x0d, 0xe0, 0x91, + 0xbf, 0x9b, 0x91, 0x92, 0x6b, 0xc0, 0xe0, 0xea, + 0x76, 0x8d, 0x50, 0x4b, 0x6d, 0x53, 0x4b, 0x73, + 0x97, 0x93, 0x50, 0x1c, 0xd6, 0x39, 0xa6, 0x9b, + 0x80, 0x61, 0xd0, 0xbb, 0x33, 0x0f, 0x15, 0x99, + 0x0c, 0x4e, 0xd1, 0x23, 0x43, 0x09, 0x07, 0x58, + 0x1e, 0x20, 0xd2, 0xb4, 0x4d, 0xb4, 0x36, 0x97, + 0x73, 0x17, 0xdf, 0x58, 0x36, 0x5c, 0x3f, 0xb2, + 0x01, 0xda, 0x47, 0x60, 0x9a, 0x69, 0x15, 0x5c, + 0x17, 0x79, 0xac, 0xb7, 0x79, 0x8c, 0x77, 0xb2, + 0x34, 0x01, 0x11, 0x69, 0x8e, 0x26, 0x9a, 0x00, + 0xd6, 0x1a, 0xd2, 0xa8, 0x25, 0x2f, 0x3f, 0xd6, + 0x6c, 0xfb, 0x58, 0xbf, 0xe9, 0xb5, 0x46, 0x67, + 0xb5, 0x19, 0xc5, 0xd7, 0xda, 0x15, 0x8b, 0x9c, + 0xd5, 0xf3, 0x66, 0xdd, 0x66, 0xc6, 0x06, 0x48, + 0x1c, 0xd7, 0x36, 0x32, 0x6a, 0x3c, 0x51, 0x87, + 0x5f, 0x71, 0x7a, 0xcd, 0xb3, 0x4b, 0x6c, 0xc3, + 0xf5, 0x8c, 0xb5, 0x6c, 0x13, 0x13, 0x8a, 0x59, + 0x01, 0xa9, 0x76, 0x84, 0x1d, 0x3b, 0x2b, 0x03, + 0x5f, 0x98, 0xba, 0xe5, 0xfa, 0x23, 0xb5, 0x61, + 0x79, 0xec, 0x1d, 0x5f, 0x2a, 0xdc, 0xdb, 0xed, + 0x9c, 0x6d, 0xf7, 0xb6, 0xd6, 0xe7, 0x9f, 0xc7, + 0xce, 0x17, 0x68, 0xc3, 0x52, 0xa3, 0xec, 0xb3, + 0x53, 0x65, 0x65, 0x77, 0x6c, 0xc8, 0xfc, 0x6b, + 0x9d, 0x06, 0x6c, 0x54, 0xa0, 0xd5, 0x4c, 0x34, + 0xd3, 0xa0, 0xae, 0x0a, 0x20, 0xb3, 0xdc, 0x5b, + 0xf3, 0x5b, 0x5d, 0x6d, 0x23, 0x47, 0x8b, 0x71, + 0x49, 0x01, 0xec, 0xe1, 0x73, 0x4f, 0x1a, 0x85, + 0xce, 0xf4, 0x66, 0xd7, 0x7f, 0x6a, 0xfd, 0x1c, + 0x0b, 0xa4, 0xe7, 0xee, 0x74, 0x96, 0x13, 0x3e, + 0x10, 0xe9, 0x2c, 0x41, 0x01, 0xd8, 0xfc, 0xb0, + 0x5b, 0x84, 0xfe, 0x66, 0x85, 0xb9, 0xdb, 0x45, + 0x64, 0xe9, 0x4d, 0xc7, 0x55, 0xc4, 0x66, 0x27, + 0x11, 0x91, 0xce, 0xa9, 0xc5, 0xbf, 0xe4, 0x20, + 0xf7, 0x9a, 0x83, 0x6b, 0xb3, 0x76, 0x36, 0x72, + 0x68, 0x96, 0x47, 0x17, 0x96, 0x9d, 0x74, 0xd2, + 0xef, 0xef, 0x2c, 0x6d, 0x4f, 0xeb, 0x59, 0x97, + 0xdd, 0x37, 0xc8, 0x96, 0x2a, 0x57, 0xb3, 0xa0, + 0x81, 0xe1, 0x51, 0x59, 0x86, 0x63, 0x71, 0x98, + 0x4f, 0xcf, 0x5c, 0x11, 0xa0, 0x51, 0xad, 0x6e, + 0xa6, 0x83, 0xb8, 0x17, 0x5d, 0x8e, 0x74, 0xd8, + 0xed, 0x05, 0x8d, 0xf5, 0xb8, 0xbb, 0xb6, 0x6f, + 0x90, 0x2b, 0x42, 0xde, 0xd2, 0x0f, 0x19, 0x66, + 0x57, 0x1d, 0xe5, 0xa5, 0xe5, 0xcc, 0xb2, 0x18, + 0x9b, 0x6a, 0xda, 0x8a, 0x50, 0x82, 0x68, 0x4e, + 0x13, 0xc0, 0xa3, 0x41, 0x04, 0x56, 0xbf, 0x91, + 0xd4, 0xa5, 0x6f, 0xb3, 0x96, 0xcb, 0x6b, 0xec, + 0x36, 0x36, 0xe2, 0xd6, 0xd8, 0x90, 0x5c, 0xd0, + 0x6a, 0x5c, 0x6b, 0x5f, 0x19, 0x7a, 0x13, 0x1f, + 0x86, 0x5d, 0x1b, 0xe3, 0xc1, 0x86, 0x76, 0x88, + 0xa4, 0x3a, 0x4b, 0xf5, 0x97, 0x53, 0xcd, 0x01, + 0x04, 0x4a, 0x27, 0x7f, 0xb3, 0xbe, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x2f, 0x39, 0xbf, 0x91, + 0x6f, 0xe6, 0x9f, 0x02, 0x8d, 0x2a, 0x4b, 0x37, + 0xf2, 0x2d, 0xfc, 0xd3, 0xe0, 0x51, 0xa5, 0x07, + 0xb8, 0xbf, 0x68, 0xcf, 0x38, 0x29, 0x55, 0x15, + 0x17, 0xed, 0x19, 0xe7, 0x05, 0x2a, 0x83, 0x05, + 0x70, 0x66, 0x3e, 0xf3, 0x69, 0xf6, 0x9f, 0x28, + 0x5d, 0xe5, 0x70, 0x66, 0x3e, 0xf3, 0x69, 0xf6, + 0x9f, 0x28, 0x40, 0xcb, 0xbd, 0xe6, 0xef, 0xcf, + 0x3f, 0x58, 0xa9, 0x05, 0x1f, 0x97, 0x7b, 0xcd, + 0xdf, 0x9e, 0x7e, 0xb1, 0x52, 0x08, 0x30, 0x75, + 0x1e, 0xd2, 0x88, 0x3a, 0xca, 0x97, 0x3a, 0x8f, + 0x69, 0x44, 0x1d, 0x65, 0x01, 0x11, 0x10, 0x6f, + 0xcd, 0x3f, 0xd3, 0x0f, 0xf3, 0xc7, 0xd6, 0x55, + 0x1a, 0x85, 0x79, 0x82, 0x68, 0x5b, 0x94, 0x4c, + 0xeb, 0x88, 0x84, 0xd1, 0x43, 0x57, 0x3a, 0x32, + 0x01, 0xad, 0x3c, 0x6d, 0xd5, 0x13, 0xf1, 0x06, + 0x43, 0xf7, 0x60, 0xe4, 0xb1, 0x05, 0x72, 0xa1, + 0x2a, 0x15, 0x8f, 0xe2, 0x0c, 0x87, 0xee, 0xc1, + 0xc9, 0x62, 0x7c, 0x41, 0x91, 0x7d, 0xd8, 0x39, + 0x2c, 0x41, 0x5c, 0xa8, 0x4a, 0x85, 0x63, 0xf8, + 0x83, 0x22, 0xfb, 0xb0, 0x72, 0x58, 0x9f, 0x10, + 0x64, 0x3f, 0x76, 0x0e, 0x4b, 0x10, 0x57, 0x2a, + 0x12, 0xa1, 0x58, 0xfe, 0x20, 0xc8, 0xbe, 0xec, + 0x1c, 0x96, 0x27, 0xc4, 0x19, 0x17, 0xdd, 0x83, + 0x92, 0xc4, 0x15, 0xca, 0x84, 0xa8, 0x56, 0x3f, + 0x88, 0x32, 0x2f, 0xbb, 0x07, 0x25, 0x89, 0xf1, + 0x06, 0x43, 0xf7, 0x60, 0xe4, 0xb1, 0x05, 0x72, + 0xa1, 0x2a, 0x15, 0x8f, 0xe2, 0x0c, 0x8b, 0xee, + 0xbe, 0xcf, 0x92, 0xc4, 0xf8, 0x83, 0x22, 0xfb, + 0xb0, 0x72, 0x58, 0x82, 0xb9, 0x50, 0x95, 0x0a, + 0xc7, 0xf1, 0x06, 0x45, 0xf7, 0x60, 0xe4, 0xb1, + 0x3e, 0x20, 0xc8, 0xbe, 0xec, 0x1c, 0x96, 0x20, + 0xae, 0x57, 0xb2, 0x9a, 0x15, 0x8f, 0xe2, 0x0c, + 0x8b, 0xee, 0xc1, 0xc9, 0x62, 0x7c, 0x41, 0x90, + 0xfd, 0xd8, 0x39, 0x2c, 0x41, 0x5c, 0xa8, 0x4a, + 0x85, 0x63, 0xf8, 0x83, 0x22, 0xfb, 0xb0, 0x72, + 0x58, 0x9f, 0x10, 0x64, 0x5f, 0x76, 0x0e, 0x4b, + 0x10, 0x57, 0x2a, 0x12, 0xa1, 0x58, 0xfe, 0x20, + 0xc8, 0xbe, 0xec, 0x1c, 0x96, 0x27, 0xc4, 0x19, + 0x17, 0xdd, 0x83, 0x92, 0xc4, 0x15, 0xca, 0xf6, + 0x52, 0xbd, 0x95, 0x63, 0xf8, 0x83, 0x22, 0xfb, + 0xb0, 0x72, 0x58, 0x9f, 0x10, 0x64, 0x5f, 0x76, + 0x0e, 0x4b, 0x10, 0x57, 0x2a, 0x12, 0xa1, 0x58, + 0xfe, 0x21, 0xc8, 0x7e, 0xec, 0x1c, 0x96, 0x27, + 0xc4, 0x19, 0x17, 0xdd, 0x83, 0x92, 0xc4, 0x15, + 0xca, 0x84, 0xa8, 0x56, 0x3f, 0x88, 0x32, 0x2f, + 0xbb, 0x07, 0x25, 0x89, 0xf1, 0x06, 0x45, 0xf7, + 0x60, 0xe4, 0xb1, 0x05, 0x72, 0xa1, 0x2a, 0x15, + 0x8f, 0xe2, 0x0c, 0x8b, 0xee, 0xc1, 0xc9, 0x62, + 0x7c, 0x41, 0x91, 0x7d, 0xd8, 0x39, 0x2c, 0x41, + 0x5c, 0xa8, 0x4a, 0x85, 0x63, 0xf8, 0x83, 0x22, + 0xfb, 0xb0, 0x72, 0x58, 0x9f, 0x10, 0x64, 0x3f, + 0x76, 0x0e, 0x4b, 0x10, 0x57, 0x2a, 0x95, 0x0a, + 0xc7, 0xf1, 0x06, 0x45, 0xf7, 0x60, 0xe4, 0xb1, + 0x3e, 0x20, 0xc8, 0xbe, 0xec, 0x1c, 0x96, 0x20, + 0xae, 0x54, 0x25, 0x42, 0xb1, 0xfc, 0x41, 0x91, + 0x7d, 0xd8, 0x39, 0x2c, 0x4f, 0x88, 0x32, 0x2f, + 0xbb, 0x07, 0x25, 0x88, 0x2b, 0x95, 0x09, 0x50, + 0xac, 0x7f, 0x10, 0x64, 0x5f, 0x76, 0x0e, 0x4b, + 0x13, 0xaf, 0xf2, 0x21, 0xaf, 0x2b, 0xfa, 0x2c, + 0x41, 0x5c, 0xa8, 0x4a, 0x85, 0x63, 0xf8, 0x83, + 0x22, 0xfb, 0xb0, 0x72, 0x58, 0x9f, 0x10, 0x64, + 0x5f, 0x76, 0x0e, 0x4b, 0x10, 0x57, 0x2a, 0x12, + 0xa1, 0x58, 0xfe, 0x20, 0xc8, 0xbe, 0xec, 0x1c, + 0x96, 0x27, 0xc4, 0x19, 0x17, 0xdd, 0x83, 0x92, + 0xc4, 0x15, 0xca, 0x84, 0xa8, 0x56, 0x3f, 0x88, + 0x32, 0x2f, 0xbb, 0x07, 0x25, 0x89, 0xf1, 0x06, + 0x45, 0xf7, 0x60, 0xe4, 0xb1, 0x05, 0x72, 0xa1, + 0x2a, 0x15, 0x8f, 0xe2, 0x0c, 0x87, 0xee, 0xc1, + 0xc9, 0x62, 0x7c, 0x41, 0x91, 0x7d, 0xd8, 0x39, + 0x2c, 0x41, 0x5c, 0xa8, 0x4d, 0xc2, 0xac, 0x7f, + 0x10, 0x64, 0x5f, 0x76, 0x0e, 0x4b, 0x13, 0xe2, + 0x0c, 0x84, 0xeb, 0xcb, 0x07, 0x26, 0x34, 0x12, + 0x57, 0x22, 0xb9, 0x4d, 0x91, 0x1b, 0x8c, 0x6f, + 0xd4, 0x5c, 0x3b, 0xaa, 0x4a, 0x7b, 0xa8, 0xee, + 0xf2, 0x78, 0xae, 0x22, 0x67, 0x37, 0x1b, 0xcb, + 0x70, 0xb3, 0x46, 0x80, 0x09, 0x1b, 0x8a, 0x35, + 0x01, 0x11, 0x10, 0x17, 0xb8, 0x7f, 0x6d, 0x1f, + 0x9e, 0xdf, 0x08, 0x5e, 0x17, 0xa8, 0xbf, 0x6d, + 0x19, 0xfe, 0xbb, 0x7c, 0x21, 0x07, 0x2e, 0xd9, + 0x02, 0x73, 0x38, 0xa8, 0x09, 0xfd, 0x48, 0xfa, + 0xce, 0x50, 0x38, 0x5d, 0xbc, 0x78, 0x15, 0xcb, + 0x3c, 0xcf, 0x9f, 0x96, 0x5e, 0x36, 0x16, 0xc0, + 0xd9, 0x83, 0xd8, 0x1d, 0x89, 0xc6, 0x9b, 0xa7, + 0x46, 0xa5, 0x1d, 0xf1, 0x8c, 0xbd, 0x0e, 0x3e, + 0x51, 0xe2, 0x41, 0x5e, 0xc2, 0xed, 0xe3, 0xc0, + 0x98, 0x5d, 0xbc, 0x78, 0x15, 0x87, 0xe3, 0x19, + 0x7a, 0x1c, 0x7c, 0xa3, 0xc4, 0x9f, 0x18, 0xcb, + 0xd0, 0xe3, 0xe5, 0x1e, 0x24, 0x15, 0xec, 0x2e, + 0xde, 0x3c, 0x09, 0x85, 0xdb, 0xc7, 0x81, 0x58, + 0x7e, 0x31, 0x97, 0xa1, 0xc7, 0xca, 0x3c, 0x49, + 0xf1, 0x8c, 0xbd, 0x0e, 0x3e, 0x51, 0xe2, 0x41, + 0x5e, 0xc2, 0xed, 0xe3, 0xc0, 0x98, 0x5d, 0xbc, + 0x78, 0x15, 0x87, 0xe3, 0x19, 0x7a, 0x1c, 0x7c, + 0xa3, 0xc4, 0x9f, 0x18, 0xcb, 0xd0, 0xe3, 0xe5, + 0x1e, 0x24, 0x15, 0xec, 0x2e, 0xde, 0x3c, 0x09, + 0x85, 0xdb, 0xc7, 0x81, 0x58, 0x7e, 0x31, 0x97, + 0xa1, 0xc7, 0xca, 0x3c, 0x49, 0xf1, 0x8c, 0xbd, + 0x0e, 0x3e, 0x51, 0xe2, 0x41, 0x5e, 0xc2, 0xed, + 0xe3, 0xc0, 0x98, 0x5d, 0xbc, 0x78, 0x15, 0x87, + 0xe3, 0x19, 0x7a, 0x1c, 0x7c, 0xa3, 0xc4, 0x9f, + 0x18, 0xcb, 0xd0, 0xe3, 0xe5, 0x1e, 0x24, 0x15, + 0xec, 0x2e, 0xde, 0x3c, 0x09, 0x85, 0xdb, 0xc7, + 0x81, 0x58, 0x7e, 0x31, 0x97, 0xa1, 0xc7, 0xca, + 0x3c, 0x49, 0xf1, 0x8c, 0xbd, 0x0e, 0x3e, 0x51, + 0xe2, 0x41, 0x5e, 0xc2, 0xed, 0xe3, 0xc0, 0x98, + 0x5d, 0xbc, 0x78, 0x15, 0x87, 0xe3, 0x19, 0x7a, + 0x1c, 0x7c, 0xa3, 0xc4, 0x9f, 0x18, 0xcb, 0xd0, + 0xe3, 0xe5, 0x1e, 0x24, 0x15, 0xec, 0x2e, 0xde, + 0x3c, 0x09, 0x85, 0xdb, 0xc7, 0x81, 0x58, 0x7e, + 0x31, 0x97, 0xa1, 0xc7, 0xca, 0x3c, 0x49, 0xf1, + 0x8c, 0xbd, 0x0e, 0x3e, 0x51, 0xe2, 0x41, 0x5e, + 0xc2, 0xed, 0xe3, 0xc0, 0x98, 0x4e, 0xf1, 0xe0, + 0x56, 0x1f, 0x8c, 0x65, 0xe8, 0x71, 0xf2, 0x8f, + 0x12, 0x7c, 0x63, 0x2f, 0x43, 0x8f, 0x94, 0x78, + 0x90, 0x57, 0xb0, 0xbb, 0x78, 0xf0, 0x26, 0x17, + 0x6f, 0x1e, 0x05, 0x61, 0xf8, 0xc6, 0x5e, 0x87, + 0x1f, 0x28, 0xf1, 0x27, 0xc6, 0x32, 0xf4, 0x38, + 0xf9, 0x47, 0x89, 0x05, 0x7b, 0x0b, 0xb7, 0x8f, + 0x02, 0x61, 0x76, 0xf1, 0xe0, 0x56, 0x1f, 0x8c, + 0x65, 0xe8, 0x71, 0xf2, 0x8f, 0x12, 0x7c, 0x63, + 0x2f, 0x43, 0x8f, 0x94, 0x78, 0x90, 0x57, 0xb0, + 0xbb, 0x78, 0xf0, 0x26, 0x17, 0x6f, 0x1e, 0x05, + 0x61, 0xf8, 0xc6, 0x5e, 0x87, 0x1f, 0x28, 0xf1, + 0x27, 0xc6, 0x32, 0xf4, 0x38, 0xf9, 0x47, 0x89, + 0x05, 0x7b, 0x0b, 0xb7, 0x8f, 0x02, 0x61, 0x76, + 0xf1, 0xe0, 0x56, 0x1f, 0x8c, 0x65, 0xe8, 0x71, + 0xf2, 0x8f, 0x12, 0x7c, 0x63, 0x2f, 0x43, 0x8f, + 0x94, 0x78, 0x90, 0x57, 0xa8, 0xed, 0xe3, 0xc0, + 0x98, 0x5d, 0xbc, 0x78, 0x15, 0x87, 0xe3, 0x19, + 0x7a, 0x1c, 0x7c, 0xa3, 0xc4, 0x9f, 0x18, 0xcb, + 0xd0, 0xe3, 0xe5, 0x1e, 0x24, 0x15, 0xec, 0x2e, + 0xde, 0x3c, 0x09, 0x85, 0xdb, 0xc7, 0x81, 0x58, + 0x7e, 0x31, 0x97, 0xa1, 0xc7, 0xca, 0x3c, 0x49, + 0xf1, 0x8c, 0xbd, 0x0e, 0x3e, 0x51, 0xe2, 0x41, + 0x5e, 0xc2, 0xed, 0xe3, 0xc0, 0x98, 0x5d, 0xbc, + 0x78, 0x15, 0x87, 0xe3, 0x19, 0x7a, 0x1c, 0x7c, + 0xa3, 0xc4, 0x9f, 0x18, 0xcb, 0xd0, 0xe3, 0xe5, + 0x1e, 0x24, 0x15, 0xec, 0x2e, 0xde, 0x3c, 0x09, + 0x85, 0xdb, 0xc7, 0x81, 0x58, 0x7e, 0x31, 0x97, + 0xa1, 0xc7, 0xca, 0x3c, 0x49, 0xf1, 0x8c, 0xbd, + 0x0e, 0x3e, 0x51, 0xe2, 0x41, 0x5e, 0xc2, 0xed, + 0xe3, 0xc0, 0x98, 0x5d, 0xbc, 0x78, 0x15, 0x87, + 0xe3, 0x19, 0x7a, 0x1c, 0x7c, 0xa3, 0xc4, 0x9f, + 0x18, 0xcb, 0xd0, 0xe3, 0xe5, 0x1e, 0x24, 0x15, + 0xec, 0x2e, 0xde, 0x3c, 0x09, 0x85, 0xdb, 0xc7, + 0x81, 0x58, 0x7e, 0x31, 0x97, 0xa1, 0xc7, 0xca, + 0x3c, 0x49, 0xf1, 0x8c, 0xbd, 0x0e, 0x3e, 0x51, + 0xe2, 0x41, 0x5e, 0xc2, 0xed, 0xe3, 0xc0, 0x98, + 0x5d, 0xbc, 0x78, 0x15, 0x87, 0xe3, 0x19, 0x7a, + 0x1c, 0x7c, 0xa3, 0xc4, 0x9f, 0x18, 0xcb, 0xd0, + 0xe3, 0xe5, 0x1e, 0x24, 0x15, 0xec, 0x2e, 0xde, + 0x3c, 0x09, 0x85, 0xdb, 0xc7, 0x81, 0x58, 0x7e, + 0x31, 0x97, 0xa1, 0xc7, 0xca, 0x3c, 0x49, 0xf1, + 0x8c, 0xbd, 0x0e, 0x3e, 0x51, 0xe2, 0x41, 0x5e, + 0xc2, 0xed, 0xe3, 0xc0, 0xa4, 0xf6, 0x6c, 0x1e, + 0xba, 0xb6, 0xd0, 0x69, 0xe3, 0x6e, 0x7f, 0x50, + 0xae, 0xef, 0x8c, 0x65, 0xe8, 0x71, 0xf2, 0x8f, + 0x12, 0xea, 0xca, 0x76, 0x92, 0x4b, 0xec, 0xc2, + 0x2b, 0x67, 0x5b, 0x32, 0x31, 0x25, 0x7c, 0x66, + 0x93, 0x51, 0x46, 0x93, 0xbc, 0x83, 0x66, 0x63, + 0xef, 0xb2, 0xf6, 0xfe, 0x40, 0xb9, 0x97, 0x46, + 0x61, 0xef, 0xb3, 0x79, 0xdf, 0x20, 0x5c, 0xe8, + 0x0b, 0x0b, 0x2b, 0x08, 0x33, 0xb6, 0x5f, 0xb1, + 0xb0, 0xed, 0x3f, 0xc0, 0xc5, 0x58, 0x56, 0x7d, + 0xb2, 0xfd, 0x8d, 0x87, 0x69, 0xfe, 0x06, 0x2a, + 0xc2, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x2c, + 0xb9, 0xaf, 0x66, 0x87, 0x34, 0xb4, 0xf6, 0x41, + 0x08, 0x30, 0x8b, 0x38, 0x1f, 0x40, 0x4b, 0x48, + 0x0e, 0xf2, 0x49, 0x07, 0x4f, 0x69, 0x7a, 0x64, + 0x13, 0xbd, 0xc5, 0xac, 0x89, 0xee, 0x70, 0xd6, + 0x03, 0x49, 0x23, 0xb7, 0xa1, 0x07, 0x84, 0x42, + 0x08, 0x24, 0x11, 0x42, 0x09, 0x04, 0x1d, 0xf0, + 0xbd, 0x46, 0xc7, 0x3d, 0xed, 0x00, 0x17, 0x69, + 0x00, 0x80, 0x2b, 0xa0, 0x9e, 0xc2, 0x0f, 0x28, + 0xa5, 0x33, 0xfc, 0xba, 0x1b, 0x2b, 0xb6, 0xc7, + 0x6f, 0x19, 0x11, 0x98, 0xda, 0xe2, 0x4d, 0x48, + 0xa9, 0xec, 0xa8, 0xf8, 0xed, 0xee, 0x24, 0x69, + 0x7c, 0x71, 0x3d, 0xed, 0x1a, 0xdc, 0xd6, 0x92, + 0x10, 0x79, 0x6b, 0xde, 0xd3, 0x56, 0xb8, 0xb4, + 0x90, 0x45, 0x46, 0xf1, 0x5e, 0x77, 0x00, 0xde, + 0x4f, 0xfe, 0x16, 0xeb, 0x4b, 0x67, 0x5d, 0xdd, + 0x45, 0x6c, 0xcd, 0x0e, 0x95, 0xc1, 0xb5, 0xde, + 0xdf, 0x28, 0x34, 0xa2, 0x9f, 0xb9, 0xf8, 0x6e, + 0xc6, 0xe4, 0xd8, 0xcb, 0x6c, 0xf9, 0x8b, 0x3c, + 0x59, 0x67, 0xc5, 0x4a, 0x1d, 0xdd, 0x0b, 0x83, + 0x3b, 0xcb, 0x5b, 0x97, 0x5d, 0x86, 0x44, 0x4b, + 0xa0, 0x95, 0xa2, 0x48, 0x89, 0xde, 0x3b, 0x88, + 0x23, 0xd1, 0x74, 0xe5, 0x91, 0x32, 0x5c, 0xc6, + 0xde, 0x29, 0x1a, 0x1e, 0xc9, 0x24, 0x6b, 0x5c, + 0xd3, 0xa9, 0x4c, 0xed, 0x36, 0x5b, 0x65, 0x6f, + 0x04, 0x77, 0x16, 0x71, 0x08, 0x83, 0x24, 0x74, + 0x52, 0x86, 0xf6, 0x45, 0x42, 0x0a, 0xea, 0x76, + 0x7b, 0xea, 0x5f, 0x66, 0xec, 0x6d, 0xae, 0x6e, + 0x26, 0x9a, 0xed, 0x81, 0xf0, 0xc2, 0xcd, 0x21, + 0xd5, 0xa6, 0x27, 0x1a, 0x6e, 0x2e, 0x8b, 0xcc, + 0x9e, 0xda, 0x5d, 0xa2, 0x8e, 0xc6, 0x06, 0x88, + 0x61, 0x73, 0x03, 0xdc, 0x1b, 0xb8, 0x00, 0xf1, + 0xa9, 0xd9, 0x41, 0x00, 0x8a, 0x7a, 0x7c, 0xcb, + 0x27, 0xb7, 0xb9, 0x75, 0xab, 0x32, 0xd8, 0xe4, + 0x86, 0x37, 0x60, 0x74, 0xae, 0xf2, 0xcd, 0x35, + 0xd3, 0xc5, 0xf9, 0x56, 0xbb, 0xcc, 0xb2, 0xd2, + 0x0c, 0xee, 0xd2, 0x28, 0x86, 0x2b, 0x4b, 0x92, + 0xd7, 0x06, 0x13, 0x5a, 0x03, 0xb8, 0x82, 0x16, + 0xa8, 0xac, 0x59, 0x8d, 0xc6, 0x49, 0x65, 0x7b, + 0x2d, 0xa3, 0xf2, 0xd0, 0xf1, 0x19, 0x15, 0x7b, + 0x5c, 0x6b, 0xa4, 0x07, 0x6a, 0xee, 0xad, 0x37, + 0xd9, 0x1d, 0xb3, 0xae, 0x2c, 0x5d, 0x62, 0xe2, + 0xdb, 0x6b, 0xf7, 0x00, 0x01, 0xd2, 0x46, 0x8c, + 0x47, 0xbc, 0x82, 0x0d, 0x3b, 0x6a, 0xc1, 0x7b, + 0x79, 0x94, 0x65, 0xb7, 0x0e, 0xb2, 0x8b, 0x2e, + 0x8e, 0xe1, 0xb1, 0x10, 0xd7, 0xcb, 0x25, 0x0b, + 0x89, 0xdd, 0xdc, 0x2b, 0x93, 0x3d, 0xb1, 0xb4, + 0x80, 0xc1, 0x77, 0x64, 0x03, 0x20, 0xba, 0x66, + 0x3e, 0x6e, 0xb5, 0xc2, 0x69, 0x5a, 0x51, 0x04, + 0x52, 0x22, 0x20, 0x22, 0x22, 0x01, 0x00, 0xf6, + 0xd6, 0x5c, 0xf7, 0x16, 0x86, 0x38, 0xf8, 0xa3, + 0x50, 0x58, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x41, 0x79, 0xcd, 0xfc, 0x8b, 0x7f, + 0x34, 0xf8, 0x14, 0x69, 0x52, 0x59, 0xbf, 0x91, + 0x6f, 0xe6, 0x9f, 0x02, 0x8d, 0x28, 0x3d, 0xc5, + 0xfb, 0x46, 0x79, 0xc1, 0x4a, 0xa8, 0xa8, 0xbf, + 0x68, 0xcf, 0x38, 0x29, 0x54, 0x18, 0x2b, 0x83, + 0x31, 0xf7, 0x9b, 0x4f, 0xb4, 0xf9, 0x42, 0xef, + 0x2b, 0x83, 0x31, 0xf7, 0x9b, 0x4f, 0xb4, 0xf9, + 0x42, 0x06, 0x5d, 0xef, 0x37, 0x7e, 0x79, 0xfa, + 0xc5, 0x48, 0x28, 0xfc, 0xbb, 0xde, 0x6e, 0xfc, + 0xf3, 0xf5, 0x8a, 0x90, 0x41, 0x83, 0xa8, 0xf6, + 0x94, 0x41, 0xd6, 0x54, 0xb9, 0xd4, 0x7b, 0x4a, + 0x20, 0xeb, 0x28, 0x08, 0x88, 0x83, 0xb0, 0x7f, + 0x22, 0xbe, 0xf3, 0x5d, 0xe0, 0x54, 0xc5, 0x73, + 0x1f, 0xc8, 0xaf, 0xbc, 0xd7, 0x78, 0x15, 0x31, + 0x01, 0x48, 0xe5, 0x79, 0x40, 0xbc, 0x8e, 0x4b, + 0x89, 0xe5, 0x16, 0xf6, 0x90, 0xf9, 0x72, 0x91, + 0xad, 0xc7, 0x79, 0x47, 0x29, 0xeb, 0xda, 0x43, + 0xb2, 0x96, 0x51, 0xb7, 0x40, 0x9d, 0xf8, 0xdd, + 0xd9, 0xa6, 0x2f, 0xe8, 0x41, 0xa9, 0xf9, 0x1d, + 0x9d, 0xc5, 0xbc, 0x92, 0xe5, 0x77, 0x5e, 0xd2, + 0xf8, 0x85, 0x5f, 0x13, 0x9b, 0x43, 0x40, 0xa1, + 0x86, 0x91, 0xa3, 0x76, 0x84, 0x76, 0x2b, 0xb8, + 0xa5, 0xb6, 0x5a, 0x47, 0x33, 0x39, 0x8d, 0xa3, + 0x54, 0xad, 0x73, 0x5c, 0x37, 0x08, 0xa6, 0x2d, + 0x3c, 0x0b, 0x75, 0x9e, 0x5b, 0x69, 0x35, 0xce, + 0x6e, 0xd9, 0x99, 0x8c, 0x5a, 0x87, 0x3a, 0x3d, + 0x24, 0x50, 0xd5, 0xfc, 0x48, 0x20, 0xd0, 0x8a, + 0x57, 0xb1, 0xad, 0x49, 0x6c, 0xf5, 0x9d, 0xbd, + 0xee, 0x63, 0xcc, 0x5c, 0xb3, 0x1c, 0x7c, 0xdb, + 0x8e, 0x1a, 0x9d, 0x61, 0x6d, 0xca, 0xec, 0xb2, + 0xf1, 0x1d, 0xe5, 0xed, 0xe3, 0x71, 0xc5, 0x68, + 0xe2, 0x19, 0x00, 0x76, 0x97, 0x53, 0xbe, 0x82, + 0x20, 0x69, 0xd5, 0xa5, 0x14, 0xf3, 0x23, 0xca, + 0xf3, 0x3b, 0x1b, 0xc9, 0x21, 0xb6, 0xf6, 0x49, + 0xec, 0xd8, 0x64, 0xf1, 0x5c, 0x5c, 0x08, 0x15, + 0xdf, 0xf3, 0x56, 0xac, 0xb6, 0xca, 0xc6, 0x1c, + 0xb2, 0x4c, 0xd6, 0xfe, 0x3e, 0x7c, 0x62, 0xc1, + 0x14, 0x20, 0xd0, 0x13, 0xa9, 0x07, 0x2d, 0x96, + 0x58, 0xdb, 0xab, 0x2b, 0xcb, 0xae, 0x73, 0x0f, + 0xb2, 0x0a, 0x86, 0x61, 0xae, 0x2a, 0x8d, 0xfa, + 0xae, 0x0d, 0xca, 0xee, 0x2b, 0x45, 0xab, 0xb2, + 0xf9, 0x72, 0x4c, 0xc6, 0x6b, 0x36, 0x18, 0x31, + 0xb0, 0x89, 0x60, 0x71, 0xc4, 0x1a, 0xe0, 0x37, + 0x0e, 0xf1, 0x5c, 0xd6, 0xb9, 0x7e, 0x52, 0xcc, + 0x96, 0x0c, 0xca, 0xf1, 0xa7, 0x13, 0x5f, 0x49, + 0x30, 0x93, 0x89, 0xfa, 0x48, 0x0c, 0xa5, 0x68, + 0x82, 0x01, 0x3b, 0x1b, 0xaa, 0x72, 0xd2, 0x0c, + 0x9e, 0xea, 0x5b, 0xbb, 0xf7, 0xc5, 0xcd, 0x5a, + 0x5b, 0xb1, 0xb8, 0x2d, 0x71, 0x00, 0x4b, 0xb4, + 0xe2, 0x35, 0xaa, 0xf5, 0x0c, 0x59, 0x56, 0x6d, + 0x67, 0x75, 0xcc, 0x5a, 0xfb, 0x1d, 0xc5, 0xb3, + 0x0c, 0x8c, 0x73, 0x5c, 0x5c, 0x0e, 0xba, 0x02, + 0x0f, 0x69, 0x04, 0x65, 0x9e, 0x59, 0x2d, 0xe5, + 0xbd, 0xcc, 0xec, 0x7b, 0x5a, 0xdb, 0x46, 0x63, + 0x70, 0x20, 0x92, 0x75, 0x9f, 0x16, 0x9d, 0xa5, + 0xc9, 0x4d, 0x3d, 0xb2, 0xac, 0xd9, 0x0c, 0xf9, + 0x71, 0xca, 0xef, 0x70, 0xdb, 0x10, 0x63, 0x86, + 0xb7, 0x5e, 0x37, 0xed, 0x34, 0x3a, 0xb4, 0xf9, + 0xab, 0x8e, 0xd6, 0xd3, 0x2c, 0xbc, 0xb5, 0xcc, + 0xae, 0xa3, 0xb7, 0x31, 0xb6, 0x08, 0xc1, 0x85, + 0x85, 0xe4, 0x96, 0x9a, 0x1a, 0xe9, 0xed, 0x84, + 0x10, 0xa3, 0x4e, 0xad, 0x34, 0xd6, 0x9f, 0x90, + 0x52, 0x9b, 0x3d, 0x63, 0x6d, 0x7d, 0x77, 0x2c, + 0x77, 0x4c, 0xe7, 0x18, 0xc8, 0x9c, 0xf6, 0x8a, + 0x91, 0x47, 0x02, 0xca, 0x1d, 0x0b, 0x7e, 0x4d, + 0x96, 0xe5, 0xd7, 0x59, 0x65, 0xd5, 0xc5, 0xdd, + 0x5a, 0x61, 0x78, 0x1c, 0xe5, 0x4d, 0x43, 0x68, + 0xd2, 0x42, 0x08, 0x4a, 0xa5, 0x42, 0x9a, 0x82, + 0xdb, 0x2d, 0xcd, 0xf3, 0x18, 0xa1, 0xb3, 0x81, + 0xd6, 0xb6, 0xf1, 0x31, 0xc6, 0x7d, 0x3a, 0x5c, + 0x1b, 0xab, 0x55, 0x56, 0xeb, 0x4e, 0xa2, 0xcc, + 0xae, 0x9d, 0x97, 0xc5, 0x69, 0xcc, 0xe3, 0x0e, + 0x10, 0x5c, 0x07, 0x54, 0x92, 0xd0, 0x74, 0xb8, + 0x76, 0x68, 0x82, 0xbe, 0xa4, 0xb2, 0x7c, 0xa6, + 0x3c, 0xcb, 0x9f, 0x32, 0x4f, 0xec, 0xed, 0xb7, + 0x6b, 0x5c, 0x5d, 0x87, 0x10, 0xa1, 0xaf, 0x64, + 0x6f, 0x2e, 0x09, 0xa2, 0x74, 0x33, 0x3e, 0x17, + 0x79, 0x51, 0x38, 0xb4, 0xf7, 0x0d, 0x3e, 0x45, + 0x39, 0xb2, 0xec, 0x7c, 0x90, 0x66, 0x4c, 0x60, + 0xc4, 0xe7, 0x44, 0xd0, 0x1b, 0xbe, 0x4e, 0x34, + 0x1a, 0xfa, 0x9b, 0x25, 0xfb, 0xe1, 0x9d, 0x9f, + 0x17, 0xf4, 0x94, 0x34, 0x8d, 0x6b, 0x65, 0x7b, + 0x18, 0xec, 0x6c, 0x6b, 0x88, 0x6b, 0xc6, 0xe8, + 0xdc, 0x3b, 0xab, 0xb4, 0x64, 0x39, 0xc8, 0x1e, + 0xe8, 0xf1, 0xbf, 0xa8, 0xfc, 0xab, 0xab, 0x28, + 0xcb, 0xac, 0x2e, 0x2c, 0x2f, 0x2e, 0x2f, 0x5a, + 0x47, 0xb3, 0x11, 0x57, 0x34, 0xd0, 0xb4, 0x01, + 0x52, 0xd1, 0xdb, 0x41, 0x0d, 0xa7, 0x79, 0x06, + 0x9d, 0x4a, 0xc5, 0x69, 0x0e, 0x4d, 0x9a, 0xdb, + 0xdc, 0x45, 0x6d, 0x6a, 0x6d, 0xa6, 0x82, 0x3c, + 0x71, 0xbf, 0x15, 0x49, 0x1d, 0x95, 0xc9, 0x95, + 0x59, 0xd9, 0xb7, 0x2f, 0x9b, 0x35, 0xbf, 0x61, + 0x96, 0x18, 0x9c, 0x1b, 0x1c, 0x35, 0xa0, 0x71, + 0x34, 0xe3, 0x41, 0x10, 0x8a, 0x66, 0x68, 0x72, + 0xcb, 0xfc, 0xb2, 0x5b, 0xdb, 0x58, 0x85, 0xa4, + 0xf6, 0xe7, 0xc7, 0x8b, 0x15, 0x43, 0x9b, 0xd8, + 0xae, 0x95, 0xef, 0xd9, 0xf2, 0xfc, 0xaf, 0x2f, + 0xb6, 0xb8, 0xbc, 0xb7, 0x37, 0x77, 0x37, 0x43, + 0x10, 0x63, 0x9d, 0x84, 0x35, 0xba, 0x37, 0xbb, + 0x68, 0x20, 0xfe, 0x54, 0xd3, 0x43, 0xa1, 0x4b, + 0xe6, 0xb9, 0x7d, 0xa9, 0xb4, 0xb7, 0xcc, 0xb2, + 0xf6, 0x96, 0xc3, 0x3b, 0xb0, 0x3a, 0x2a, 0xd7, + 0x0b, 0xf4, 0x8d, 0x7d, 0xc5, 0xd3, 0x79, 0x06, + 0x4d, 0x94, 0x32, 0x2b, 0x4b, 0xab, 0x63, 0x75, + 0x3c, 0x8c, 0x06, 0x69, 0x31, 0x50, 0xb6, 0xbf, + 0x2a, 0x08, 0xeb, 0xfc, 0xb0, 0x5a, 0x59, 0xda, + 0x5d, 0x09, 0x0b, 0xfd, 0xac, 0x17, 0x61, 0xa5, + 0x30, 0xd2, 0x9c, 0x6b, 0x83, 0x4d, 0x74, 0xeb, + 0xdd, 0x56, 0x2d, 0xa3, 0x89, 0xbe, 0xc5, 0x95, + 0x43, 0x6e, 0x4b, 0xd8, 0x43, 0x9b, 0x1b, 0x8e, + 0xb2, 0x0e, 0x00, 0x3c, 0x2b, 0xc5, 0xdb, 0x72, + 0x5c, 0x9e, 0x56, 0x59, 0x4d, 0x6b, 0xed, 0x52, + 0xd0, 0x1b, 0x99, 0x4b, 0x88, 0xc3, 0x88, 0x57, + 0xc5, 0x08, 0x20, 0x3f, 0x2e, 0x04, 0x3a, 0x14, + 0xe4, 0xf9, 0x3d, 0xac, 0x19, 0xed, 0xad, 0xb0, + 0x06, 0x4b, 0x4b, 0x9c, 0x32, 0x35, 0xae, 0x3a, + 0x40, 0x35, 0x18, 0x6a, 0xb1, 0x9a, 0xb3, 0x24, + 0xb0, 0x37, 0x56, 0x51, 0x42, 0x64, 0xb9, 0x75, + 0x70, 0xbc, 0x1d, 0x11, 0x17, 0x6a, 0x1a, 0x50, + 0x42, 0x13, 0x41, 0x55, 0xdf, 0x9a, 0xe5, 0x43, + 0x2d, 0xf6, 0x70, 0x24, 0x32, 0x73, 0xf1, 0xe3, + 0xd2, 0x29, 0x42, 0xa3, 0xdd, 0xe4, 0x9e, 0xd2, + 0xb2, 0xe7, 0xec, 0x64, 0x97, 0x99, 0x5c, 0x6f, + 0x15, 0x63, 0xe3, 0x6b, 0x5c, 0x06, 0xe8, 0x25, + 0xa1, 0x05, 0x6d, 0x15, 0x86, 0xf9, 0xbb, 0x3f, + 0x95, 0xdf, 0x3e, 0x03, 0x68, 0x6e, 0x1c, 0x68, + 0x5c, 0x0b, 0xa8, 0xd6, 0x02, 0x35, 0x35, 0x6b, + 0xbc, 0xca, 0xad, 0x20, 0xcf, 0x6d, 0x2d, 0x98, + 0xd3, 0xec, 0xb7, 0x45, 0xae, 0x31, 0xd7, 0x71, + 0xd5, 0xa8, 0x41, 0x04, 0x9f, 0x26, 0x95, 0x60, + 0xba, 0x1b, 0x3d, 0x61, 0x7e, 0xfb, 0x27, 0xda, + 0x99, 0xaa, 0xe0, 0x1f, 0x26, 0x3d, 0x0c, 0x0e, + 0xd4, 0x1a, 0x3b, 0x0b, 0x59, 0xc9, 0x6d, 0xe1, + 0xda, 0x18, 0xac, 0x64, 0x1c, 0xe5, 0xac, 0xa3, + 0x1b, 0x34, 0xd3, 0x41, 0x1a, 0x90, 0x41, 0xf6, + 0x37, 0x77, 0xbb, 0x4b, 0x75, 0x9d, 0xa9, 0xbb, + 0xba, 0x8a, 0xd5, 0x8e, 0x0c, 0x74, 0xae, 0xc2, + 0x0b, 0x85, 0x40, 0xee, 0x2d, 0xd2, 0xdb, 0xc0, + 0xdc, 0xdd, 0xd6, 0xa1, 0xbf, 0xa8, 0xe7, 0xf9, + 0xbc, 0x15, 0xfc, 0xdc, 0x5a, 0xaa, 0xa6, 0xa1, + 0x87, 0x2d, 0xb1, 0xda, 0x43, 0x68, 0xdb, 0x72, + 0x5d, 0x8a, 0x21, 0x6c, 0xe0, 0xf7, 0x52, 0x3f, + 0x12, 0xae, 0xa8, 0x2e, 0xd3, 0x5a, 0xa0, 0xaf, + 0x5d, 0xdb, 0x3e, 0xd6, 0xe6, 0x5b, 0x77, 0x90, + 0xe7, 0x42, 0xe2, 0xd2, 0x5b, 0x5a, 0x68, 0xd1, + 0xa2, 0xab, 0x55, 0x15, 0x8a, 0xe6, 0xdb, 0x2f, + 0xcc, 0xb3, 0xe3, 0x65, 0x1c, 0x2e, 0x86, 0x41, + 0x2b, 0xdd, 0x71, 0x30, 0x75, 0x71, 0x86, 0x8d, + 0x34, 0x1b, 0x95, 0x2b, 0x10, 0x1c, 0x82, 0xee, + 0xf5, 0xd9, 0x71, 0xb3, 0xe6, 0x5b, 0xe3, 0x31, + 0xb7, 0x0e, 0x79, 0x06, 0xad, 0xdd, 0x20, 0xef, + 0xa0, 0xaf, 0x22, 0xf7, 0x3c, 0x7c, 0xd4, 0xcf, + 0x8a, 0xb8, 0x84, 0x6e, 0x2d, 0xc5, 0xac, 0x10, + 0x0e, 0x8d, 0x4b, 0xc2, 0x0b, 0x85, 0xaf, 0xfa, + 0x6e, 0xd7, 0xb6, 0x3e, 0xb3, 0x97, 0x32, 0xe9, + 0xb5, 0xff, 0x00, 0x4d, 0xda, 0xf6, 0xc7, 0xd6, + 0x72, 0xe6, 0x40, 0x44, 0x44, 0x05, 0xea, 0x2f, + 0xda, 0xb3, 0xce, 0x6f, 0x84, 0x2f, 0x2b, 0xd4, + 0x5f, 0xb5, 0x67, 0x9c, 0xdf, 0x08, 0x41, 0xc9, + 0xb6, 0x5f, 0xcc, 0xe3, 0xfb, 0x11, 0xf5, 0x9c, + 0xa0, 0x54, 0xf6, 0xd9, 0x7f, 0x33, 0x8f, 0xec, + 0x47, 0xd6, 0x72, 0x81, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x5b, 0x4d, 0xad, 0xc8, + 0xb7, 0x17, 0x46, 0x27, 0x0b, 0x73, 0xa0, 0x4b, + 0x4f, 0x16, 0xba, 0xa8, 0xb3, 0x65, 0x6b, 0x2d, + 0xe5, 0xcc, 0x76, 0xd1, 0x0f, 0x1e, 0x43, 0x4e, + 0xd0, 0xfc, 0xe3, 0xdc, 0x0a, 0xcb, 0x9c, 0x49, + 0x6c, 0xec, 0x82, 0x48, 0x6d, 0x47, 0xea, 0xad, + 0xa7, 0x6c, 0x00, 0xef, 0x96, 0x0f, 0x18, 0xf7, + 0xd0, 0x55, 0x11, 0x76, 0xf5, 0x5c, 0x8e, 0xcb, + 0x4e, 0x65, 0x1b, 0xda, 0xf8, 0xda, 0xe0, 0xd9, + 0x18, 0x2b, 0x89, 0xb5, 0xd1, 0xa5, 0x63, 0xab, + 0x25, 0x19, 0x69, 0xcc, 0x5f, 0x23, 0x59, 0x11, + 0x71, 0x6c, 0x6c, 0x35, 0xc4, 0xf2, 0x0d, 0x34, + 0x20, 0xe3, 0x5d, 0x16, 0x79, 0x7d, 0xed, 0xf3, + 0xa9, 0x6b, 0x13, 0xa4, 0xa6, 0xb2, 0x34, 0x01, + 0xdb, 0x2b, 0x9c, 0x92, 0x01, 0xa6, 0xb1, 0xa7, + 0xba, 0x15, 0x87, 0x36, 0x95, 0xf9, 0x66, 0x55, + 0x63, 0x65, 0x6c, 0x4c, 0x7c, 0xf3, 0x79, 0xd9, + 0x9e, 0xdd, 0x04, 0xe8, 0xae, 0xbe, 0xea, 0x08, + 0x7b, 0xcc, 0xb6, 0xfa, 0xc4, 0x8f, 0x6a, 0x85, + 0xd1, 0x87, 0x68, 0x0e, 0xd6, 0xda, 0xf6, 0xc2, + 0xd7, 0x6d, 0x6b, 0x71, 0x75, 0x27, 0x35, 0x6f, + 0x19, 0x95, 0xfb, 0xa1, 0xba, 0x69, 0xdb, 0x53, + 0x79, 0x24, 0xb2, 0xe6, 0x36, 0x37, 0xb9, 0x75, + 0xc3, 0x8c, 0xa1, 0xb1, 0xf3, 0x91, 0x17, 0x1a, + 0x90, 0xee, 0xc1, 0x2b, 0x39, 0x57, 0x39, 0x0e, + 0xcd, 0xde, 0x4f, 0x6b, 0xa2, 0xe0, 0xba, 0x8e, + 0x70, 0xf2, 0x83, 0x68, 0xdd, 0x45, 0x04, 0x65, + 0xce, 0x49, 0x9a, 0x5a, 0xc4, 0x65, 0x9a, 0xdd, + 0xc2, 0x36, 0x8a, 0x92, 0x28, 0xea, 0x70, 0x2e, + 0x58, 0x60, 0x9a, 0xe2, 0x41, 0x14, 0x0c, 0x32, + 0x48, 0xed, 0x4d, 0x6e, 0x93, 0x4d, 0xf5, 0x23, + 0x93, 0x67, 0x6f, 0xb2, 0xba, 0x73, 0xae, 0x5d, + 0x24, 0xd6, 0xf2, 0x34, 0x87, 0x32, 0xb8, 0xfc, + 0x62, 0x74, 0x6b, 0x5d, 0xbb, 0x3d, 0x46, 0x58, + 0xe6, 0x57, 0x16, 0x8d, 0xfd, 0x7b, 0x74, 0x42, + 0xda, 0x55, 0xc1, 0xb4, 0x41, 0x1b, 0x3e, 0x43, + 0x9b, 0x41, 0x19, 0x92, 0x4b, 0x73, 0x84, 0x69, + 0x25, 0xa4, 0x3a, 0x9d, 0xc0, 0xb9, 0x2d, 0xad, + 0x2e, 0x6e, 0xdc, 0x59, 0x6d, 0x1b, 0xa5, 0x73, + 0x45, 0x5c, 0x1b, 0xb8, 0x17, 0x66, 0x57, 0x9c, + 0x5c, 0x59, 0xdf, 0x36, 0x69, 0xa4, 0x92, 0x58, + 0xf4, 0x89, 0x59, 0x5a, 0x93, 0x51, 0xbc, 0x7b, + 0x2a, 0x47, 0x66, 0xe4, 0x8a, 0x5c, 0xda, 0xfa, + 0x48, 0x5b, 0x86, 0x27, 0xc6, 0xe2, 0xc6, 0x9d, + 0x60, 0x17, 0x57, 0x48, 0x41, 0x5d, 0xaf, 0xff, + 0x00, 0x0b, 0xa2, 0x5b, 0x0b, 0xb8, 0x9f, 0x14, + 0x6e, 0x8c, 0x99, 0x27, 0x68, 0x7c, 0x4c, 0x6e, + 0x97, 0x16, 0x9e, 0xc2, 0xc5, 0x8d, 0xbb, 0xae, + 0xaf, 0x20, 0xb7, 0x03, 0x44, 0xaf, 0x0d, 0x3d, + 0xaa, 0xf8, 0xdc, 0x01, 0x59, 0x72, 0xd9, 0x59, + 0x75, 0x9f, 0x5f, 0xca, 0xc0, 0x0b, 0xad, 0xa3, + 0x11, 0x5b, 0x57, 0x4d, 0x03, 0x7c, 0x53, 0xdf, + 0x08, 0x21, 0x1d, 0xb3, 0xd9, 0xc3, 0x63, 0xe7, + 0x0d, 0xb3, 0xa9, 0xa7, 0x40, 0x20, 0xbb, 0x47, + 0x61, 0x71, 0xc1, 0x6d, 0x71, 0x71, 0x2f, 0x33, + 0x04, 0x6e, 0x92, 0x4d, 0x3e, 0x28, 0xd7, 0xa3, + 0x5a, 0xe9, 0xb5, 0xcd, 0x6f, 0xad, 0xef, 0xd9, + 0x71, 0x34, 0x92, 0x12, 0xd7, 0x8e, 0x79, 0x84, + 0x9a, 0x11, 0x5f, 0x18, 0x29, 0x3c, 0xaa, 0xea, + 0x0b, 0xcd, 0xa8, 0xf6, 0x9b, 0x76, 0x96, 0x32, + 0x46, 0xb8, 0xe1, 0x76, 0xb0, 0x70, 0xd0, 0xea, + 0xdf, 0x41, 0x18, 0xec, 0x8f, 0x38, 0x68, 0xa9, + 0xb4, 0x92, 0x83, 0x78, 0x03, 0xe0, 0x2b, 0x96, + 0x1b, 0x6b, 0x89, 0xe6, 0xe6, 0x21, 0x8d, 0xcf, + 0x9b, 0x4f, 0xea, 0xc6, 0xbd, 0x1a, 0x77, 0x57, + 0x74, 0xf9, 0xbe, 0x67, 0x06, 0x61, 0x33, 0xa3, + 0xb9, 0x93, 0x0b, 0x25, 0x7d, 0x18, 0x5c, 0x70, + 0xd0, 0x38, 0xe8, 0xc2, 0xa7, 0xe6, 0x86, 0x36, + 0x6d, 0x4d, 0x9c, 0xad, 0x68, 0x6b, 0xa6, 0x85, + 0xce, 0x78, 0xec, 0x81, 0x44, 0x14, 0xf7, 0xb1, + 0xcc, 0x7b, 0x98, 0xf1, 0x85, 0xed, 0x25, 0xae, + 0x1b, 0xc4, 0x1a, 0x10, 0x56, 0x17, 0x46, 0x61, + 0xef, 0xf7, 0x3f, 0x6d, 0x26, 0x9f, 0xed, 0x15, + 0xce, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0x53, + 0x66, 0xbf, 0x9d, 0xdb, 0x7f, 0x6b, 0xea, 0x15, + 0x16, 0xa5, 0x36, 0x6b, 0xf9, 0xdd, 0xb7, 0xf6, + 0xbe, 0xa1, 0x41, 0x37, 0x98, 0x7b, 0xec, 0xde, + 0x77, 0xc8, 0x17, 0x3a, 0xe8, 0xcc, 0x3d, 0xf6, + 0x6f, 0x3b, 0xe4, 0x0b, 0x9d, 0x01, 0x61, 0x65, + 0x61, 0x06, 0x76, 0xcb, 0xf6, 0x36, 0x1d, 0xa7, + 0xf8, 0x18, 0xab, 0x0a, 0xcf, 0xb6, 0x5f, 0xb1, + 0xb0, 0xed, 0x3f, 0xc0, 0xc5, 0x58, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x01, 0xac, 0x76, 0xd4, 0xe6, + 0xd6, 0x7b, 0xed, 0xb1, 0xde, 0xb7, 0x6d, 0x3b, + 0xa5, 0xca, 0x0c, 0x6b, 0x0a, 0x7b, 0x6a, 0xe3, + 0x91, 0xd7, 0x36, 0xaf, 0x63, 0x4b, 0x9a, 0xeb, + 0x76, 0x81, 0x40, 0x4e, 0x9a, 0xbb, 0x46, 0x8e, + 0xda, 0x0c, 0xe6, 0x63, 0xfc, 0xb7, 0x23, 0xdd, + 0x14, 0x15, 0xae, 0xef, 0xec, 0xd6, 0xfd, 0xa2, + 0xce, 0x2e, 0xec, 0xf3, 0x1e, 0x66, 0xcd, 0xc2, + 0x3c, 0x21, 0xaf, 0x90, 0xd0, 0x55, 0xee, 0xa7, + 0xe7, 0x1d, 0xea, 0x51, 0x6a, 0xce, 0x62, 0x92, + 0x1b, 0x2c, 0x9a, 0x27, 0x8c, 0x32, 0x46, 0x00, + 0x70, 0xde, 0xa1, 0x8d, 0x6b, 0xda, 0xcb, 0x59, + 0x86, 0x69, 0xce, 0x86, 0x39, 0xcc, 0x99, 0xad, + 0x0d, 0x20, 0x13, 0xe3, 0x01, 0x4a, 0x77, 0x90, + 0x63, 0x69, 0x18, 0xc9, 0x62, 0xb2, 0xcc, 0x5a, + 0xd0, 0xd7, 0x5d, 0x47, 0x59, 0x29, 0xa2, 0xa4, + 0x00, 0xea, 0xf7, 0xd4, 0x5d, 0x95, 0xdd, 0xc5, + 0x9d, 0xc3, 0x65, 0xb7, 0x77, 0x36, 0xf3, 0xe2, + 0x93, 0x40, 0x74, 0x1a, 0x54, 0x69, 0x52, 0x9b, + 0x43, 0xfa, 0xab, 0x2c, 0xb2, 0xc1, 0xff, 0x00, + 0xb4, 0x8a, 0x2a, 0xbd, 0xbd, 0x9a, 0x00, 0xa1, + 0x58, 0x6b, 0x23, 0x7c, 0xe1, 0xe1, 0x08, 0x2c, + 0xbb, 0x43, 0x71, 0x75, 0x36, 0x61, 0x06, 0x58, + 0x24, 0xa5, 0xb5, 0xc3, 0x63, 0xc6, 0xca, 0x0d, + 0x24, 0xbb, 0x7d, 0x69, 0xce, 0xb3, 0x7b, 0xcb, + 0x0b, 0xf1, 0x69, 0x64, 0xfe, 0x66, 0x0b, 0x56, + 0xb0, 0x06, 0x01, 0xa0, 0xe8, 0xa9, 0xaf, 0x71, + 0x7a, 0xcf, 0x1c, 0xe8, 0x33, 0xeb, 0x3b, 0x97, + 0x34, 0xf3, 0x6d, 0x6c, 0x55, 0x7d, 0x34, 0x79, + 0x54, 0xd6, 0xb8, 0xf6, 0x9a, 0xde, 0x41, 0x9c, + 0x49, 0x85, 0xa5, 0xc2, 0xe0, 0x35, 0xd1, 0xd3, + 0x4d, 0x74, 0x06, 0xe8, 0x41, 0xef, 0x69, 0xa0, + 0x88, 0x4b, 0x6d, 0x7b, 0x1b, 0x43, 0x3d, 0xae, + 0x3c, 0x4e, 0x03, 0x40, 0xa8, 0xa1, 0x27, 0xbe, + 0xa2, 0x20, 0x9e, 0x5b, 0x79, 0x5b, 0x34, 0x2e, + 0x2c, 0x91, 0xbe, 0x4b, 0x86, 0xb0, 0x54, 0xd6, + 0xd4, 0x10, 0xc6, 0xd8, 0x5a, 0x13, 0xe3, 0xc1, + 0x0f, 0x8e, 0xdd, 0xe2, 0x70, 0x8f, 0xee, 0xa8, + 0x7b, 0x5b, 0x77, 0xdd, 0x5c, 0xc5, 0x6e, 0xcf, + 0x2e, 0x57, 0x06, 0x8e, 0xee, 0xb3, 0xdc, 0x08, + 0x3a, 0x6c, 0x6c, 0x6e, 0xf3, 0x6b, 0xc2, 0x74, + 0xb8, 0x17, 0x62, 0xb8, 0x99, 0xda, 0x80, 0xfc, + 0xea, 0x9d, 0xf5, 0xbf, 0x68, 0xef, 0xa2, 0xba, + 0xbd, 0x11, 0xc0, 0x71, 0x45, 0x6e, 0xc1, 0x10, + 0x76, 0xf9, 0x1a, 0xc8, 0x5d, 0x79, 0xac, 0xd7, + 0x36, 0xb1, 0x9c, 0xa7, 0x2d, 0x82, 0x56, 0x41, + 0x1d, 0x04, 0xd3, 0x31, 0x8e, 0x26, 0x43, 0x4d, + 0x3a, 0x40, 0x50, 0x32, 0x45, 0x2c, 0x54, 0x12, + 0x46, 0xe8, 0xc9, 0x15, 0x01, 0xcd, 0x2d, 0xd0, + 0x3b, 0x68, 0x3a, 0xb2, 0x7a, 0x75, 0xb5, 0x9d, + 0x35, 0x73, 0xc1, 0x58, 0x6f, 0x47, 0xb5, 0x33, + 0x39, 0xb3, 0xfc, 0xe8, 0x9c, 0xd9, 0xe3, 0x1d, + 0x90, 0xd1, 0x5f, 0xaa, 0xab, 0xd9, 0x3d, 0x3a, + 0xda, 0xd3, 0x4e, 0xa9, 0x42, 0x9b, 0x8a, 0x76, + 0xc7, 0xb5, 0xb7, 0x11, 0xbf, 0xc8, 0xb9, 0xac, + 0x4e, 0x1b, 0xf5, 0x63, 0x48, 0xfa, 0xa8, 0x39, + 0xec, 0x4f, 0xb3, 0x6c, 0xf8, 0x97, 0x54, 0x97, + 0xd7, 0x2c, 0x68, 0x3f, 0xd5, 0x6b, 0x87, 0xf4, + 0xad, 0xb9, 0xcd, 0xf1, 0xcb, 0xb6, 0x95, 0xb7, + 0x41, 0xb8, 0x9a, 0xd6, 0x34, 0x3c, 0x6f, 0x82, + 0x08, 0x75, 0x16, 0xbc, 0xf1, 0xad, 0xb5, 0x93, + 0x2c, 0xcb, 0x23, 0x3a, 0x2d, 0xcb, 0x4b, 0xbc, + 0xe7, 0x38, 0x69, 0x5d, 0x37, 0xd6, 0xd6, 0x77, + 0x9b, 0x52, 0x20, 0xbb, 0x18, 0xa3, 0x7c, 0x23, + 0x08, 0xad, 0x3c, 0x7d, 0x60, 0x20, 0xe7, 0x9f, + 0x2b, 0xcb, 0x73, 0x79, 0x5d, 0x71, 0x97, 0x5d, + 0xb5, 0x92, 0xc9, 0x57, 0x18, 0x24, 0xd0, 0x71, + 0x78, 0x57, 0x0d, 0xb5, 0x9d, 0xcd, 0x96, 0x75, + 0x6b, 0x05, 0xcb, 0x4b, 0x5e, 0x24, 0x69, 0x1a, + 0x6a, 0x08, 0xaf, 0xe6, 0x95, 0xc7, 0x3d, 0x95, + 0xcc, 0x17, 0x8e, 0xb6, 0x11, 0xbc, 0x4a, 0xd7, + 0xe1, 0x61, 0x68, 0x35, 0x3a, 0xe8, 0x41, 0x0a, + 0xc7, 0x99, 0xb9, 0xde, 0xdd, 0x93, 0x47, 0x35, + 0x3d, 0xa9, 0x98, 0x79, 0xda, 0x6b, 0xd3, 0x87, + 0xe5, 0x08, 0x35, 0xe6, 0xf9, 0x0d, 0xcd, 0xd6, + 0x69, 0x34, 0xed, 0x9a, 0x28, 0xa3, 0x79, 0x6e, + 0x97, 0x3a, 0x8e, 0x00, 0x35, 0xa0, 0xe8, 0x5a, + 0x73, 0x3c, 0xd6, 0x1b, 0x49, 0x72, 0xfb, 0x7b, + 0x37, 0x73, 0xe3, 0x2f, 0x21, 0xcf, 0x73, 0x69, + 0x47, 0x1a, 0x60, 0x21, 0x71, 0x6d, 0x25, 0x7a, + 0xea, 0xe7, 0x70, 0x12, 0xdd, 0x5e, 0x68, 0x5c, + 0xf9, 0x54, 0x36, 0xd7, 0x19, 0x84, 0x16, 0xf7, + 0x23, 0xf5, 0x32, 0x3a, 0x84, 0x56, 0x9b, 0x86, + 0x9a, 0xbb, 0x28, 0x26, 0x2e, 0x6d, 0x32, 0x9c, + 0xf2, 0x63, 0x73, 0x67, 0x74, 0x20, 0xba, 0x93, + 0x4b, 0xe1, 0x93, 0x45, 0x4d, 0x29, 0xdb, 0x50, + 0xd9, 0x86, 0x5d, 0x77, 0x97, 0x4c, 0x21, 0xb9, + 0x1b, 0xf8, 0x1c, 0x0f, 0x8a, 0x46, 0xfb, 0x57, + 0xbc, 0xca, 0xc2, 0x4b, 0x4c, 0xc2, 0x58, 0x1b, + 0x1b, 0xb0, 0x87, 0x9e, 0x63, 0x41, 0x3a, 0x2b, + 0xe2, 0xd3, 0x7d, 0x4a, 0x67, 0xb8, 0xdb, 0x92, + 0x65, 0xd0, 0xdc, 0x9f, 0xfb, 0x9d, 0x64, 0x1f, + 0x28, 0x36, 0x94, 0xff, 0x00, 0xe5, 0x05, 0x79, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x05, 0xe7, + 0x37, 0xf2, 0x2d, 0xfc, 0xd3, 0xe0, 0x51, 0xa5, + 0x49, 0x66, 0xfe, 0x45, 0xbf, 0x9a, 0x7c, 0x0a, + 0x34, 0xa0, 0xf7, 0x17, 0xed, 0x19, 0xe7, 0x05, + 0x2a, 0xa2, 0xa2, 0xfd, 0xa3, 0x3c, 0xe0, 0xa5, + 0x50, 0x60, 0xae, 0x0c, 0xc7, 0xde, 0x6d, 0x3e, + 0xd3, 0xe5, 0x0b, 0xbc, 0xae, 0x0c, 0xc7, 0xde, + 0x6d, 0x3e, 0xd3, 0xe5, 0x08, 0x19, 0x77, 0xbc, + 0xdd, 0xf9, 0xe7, 0xeb, 0x15, 0x20, 0xa3, 0xb2, + 0xe3, 0xff, 0x00, 0x73, 0x77, 0xe7, 0x9f, 0xac, + 0x54, 0x85, 0x50, 0x0e, 0xa3, 0xda, 0x51, 0x07, + 0x59, 0x52, 0xc4, 0xe8, 0x2a, 0x24, 0xeb, 0x28, + 0x08, 0x88, 0x83, 0xb2, 0x87, 0xa8, 0x6f, 0x7c, + 0xd7, 0x78, 0x15, 0x31, 0x5d, 0xf2, 0xe0, 0xc9, + 0xed, 0xae, 0x2c, 0x9c, 0x69, 0xce, 0xb4, 0xd3, + 0xfb, 0x42, 0x8a, 0x99, 0x34, 0x12, 0x5b, 0xcc, + 0xf8, 0x25, 0x04, 0x49, 0x11, 0x2d, 0x78, 0xec, + 0xee, 0x53, 0xb6, 0x83, 0x5f, 0x69, 0x4f, 0x5f, + 0x7e, 0xb7, 0x65, 0x6c, 0x64, 0x6e, 0x91, 0x13, + 0xf0, 0x3b, 0xe9, 0x28, 0x15, 0x27, 0x95, 0xe6, + 0xd0, 0xdb, 0xc1, 0x2d, 0x95, 0xe4, 0x46, 0x7b, + 0x29, 0x4d, 0x70, 0x8d, 0x6d, 0x23, 0x79, 0x06, + 0xfd, 0x9b, 0xb3, 0xba, 0x6e, 0x69, 0x6d, 0x70, + 0xe8, 0x9c, 0xd8, 0x5c, 0xd7, 0xb9, 0x8f, 0x22, + 0x80, 0x80, 0x30, 0x9f, 0xac, 0xba, 0xb2, 0xa7, + 0x89, 0x6e, 0x33, 0xd7, 0xb7, 0x48, 0x73, 0x1f, + 0x4e, 0x19, 0x17, 0xbb, 0x4d, 0xa1, 0xca, 0x6d, + 0x22, 0x6d, 0xac, 0x0d, 0x9c, 0xdb, 0xb8, 0x90, + 0xe9, 0x1e, 0x41, 0x2c, 0x04, 0x6e, 0x05, 0x19, + 0x95, 0xe6, 0x76, 0xf9, 0x6d, 0xe4, 0xf4, 0x6b, + 0xa6, 0xb3, 0x98, 0x16, 0x13, 0xa3, 0x11, 0x68, + 0xd4, 0x7b, 0xe8, 0x36, 0x6c, 0x9d, 0x7a, 0xd8, + 0x11, 0xab, 0x9a, 0x79, 0x27, 0x7b, 0x40, 0x59, + 0xb3, 0xcb, 0xad, 0x1d, 0x05, 0xe6, 0x65, 0x7d, + 0x8d, 0xd6, 0xf0, 0x48, 0x43, 0x63, 0x8f, 0x41, + 0x79, 0x2e, 0xa6, 0xb1, 0xa7, 0x59, 0x5b, 0x6d, + 0x73, 0x9c, 0x97, 0x2e, 0xb9, 0xe7, 0x2c, 0xad, + 0x64, 0x70, 0x78, 0x3c, 0xe3, 0xdc, 0x46, 0x20, + 0x0e, 0xe3, 0x45, 0x75, 0x55, 0x73, 0xe5, 0xf9, + 0xb5, 0xa4, 0x70, 0x5c, 0xd9, 0x5e, 0x46, 0xe7, + 0xda, 0xdd, 0x3c, 0xbf, 0xc4, 0x3e, 0x33, 0x49, + 0x35, 0x41, 0x23, 0x97, 0x5e, 0xc1, 0x71, 0x61, + 0x99, 0xb2, 0xde, 0xd5, 0xb6, 0xb1, 0x47, 0x03, + 0x88, 0x02, 0xa5, 0xce, 0x25, 0xaf, 0xd2, 0xe7, + 0x1d, 0x6b, 0x96, 0xe7, 0x4e, 0xc9, 0x5b, 0x16, + 0x8d, 0x02, 0x72, 0x1c, 0x3b, 0x34, 0x7e, 0x94, + 0xb4, 0xce, 0x72, 0xab, 0x46, 0xcd, 0x69, 0x0d, + 0xbc, 0x9e, 0xc9, 0x33, 0x0b, 0x5f, 0x21, 0x23, + 0x9d, 0x71, 0x3a, 0x34, 0xee, 0x6a, 0x5c, 0xf9, + 0x7e, 0x67, 0x67, 0x0d, 0xb4, 0xd9, 0x75, 0xe4, + 0x4e, 0x96, 0xc6, 0x47, 0x17, 0x47, 0x4d, 0x2e, + 0x6e, 0xf2, 0x0d, 0xd9, 0x2d, 0x7a, 0x9b, 0x35, + 0x3f, 0x9b, 0x80, 0x0e, 0xed, 0x2a, 0x97, 0x3f, + 0xe9, 0x3b, 0x53, 0xba, 0x27, 0x27, 0xeb, 0x21, + 0xce, 0xb2, 0xd8, 0x2c, 0x2e, 0x6c, 0x2d, 0x2d, + 0xde, 0xd8, 0xa5, 0x6d, 0x19, 0x23, 0x88, 0xa9, + 0x71, 0xd6, 0x5d, 0xa5, 0x72, 0x4d, 0x99, 0x44, + 0xfc, 0x96, 0x2c, 0xbd, 0xac, 0x76, 0x38, 0xa4, + 0x2f, 0x2f, 0xd1, 0x84, 0xeb, 0xec, 0xf6, 0x50, + 0x6d, 0xca, 0x72, 0xdb, 0x49, 0x6d, 0x2e, 0x73, + 0x0b, 0xe2, 0xe3, 0x6d, 0x6c, 0x40, 0x31, 0xb0, + 0xf8, 0xce, 0x71, 0xa6, 0xef, 0x75, 0x49, 0xe5, + 0x37, 0x96, 0xf3, 0xdb, 0xe6, 0x11, 0x5b, 0xda, + 0xb6, 0xd6, 0x26, 0x41, 0x5d, 0x78, 0x9e, 0xe2, + 0x43, 0xbc, 0xb7, 0x1e, 0xd2, 0x8b, 0xca, 0x33, + 0x5b, 0x7b, 0x6b, 0x79, 0xec, 0xaf, 0x63, 0x74, + 0x96, 0xb7, 0x1a, 0x49, 0x65, 0x2a, 0xd3, 0x4e, + 0xca, 0xe9, 0xb3, 0xce, 0x72, 0x9b, 0x21, 0x25, + 0xbd, 0xbd, 0xbc, 0x86, 0xd6, 0x66, 0x10, 0xf7, + 0x92, 0x0c, 0xae, 0x27, 0x47, 0x6a, 0x9a, 0x50, + 0x63, 0x67, 0xf4, 0xe5, 0xb9, 0xb5, 0x37, 0x60, + 0x02, 0xbf, 0xd9, 0x7a, 0xc6, 0x47, 0x5e, 0xa7, + 0xcd, 0x85, 0x3f, 0xe1, 0xfc, 0x85, 0x68, 0xca, + 0xb3, 0x3b, 0x4b, 0x19, 0x2e, 0xa1, 0x92, 0x27, + 0x49, 0x6b, 0x74, 0x0b, 0x03, 0x6a, 0x31, 0x86, + 0xe9, 0xf2, 0xbb, 0x85, 0x6d, 0xb1, 0xcd, 0xb2, + 0xeb, 0x4b, 0x9b, 0x96, 0x32, 0x07, 0x9c, 0xbe, + 0xe9, 0xa1, 0xa6, 0x37, 0x69, 0x70, 0xa0, 0x3d, + 0x9d, 0xda, 0xa0, 0xf5, 0xb2, 0x3e, 0xff, 0x00, + 0x3f, 0xd8, 0x3f, 0xc2, 0xd4, 0xcb, 0x7f, 0xd3, + 0x19, 0x8d, 0x3d, 0x60, 0xef, 0x86, 0x05, 0xee, + 0xd7, 0x3a, 0xc9, 0xf2, 0xf9, 0x1c, 0x2c, 0xad, + 0xa4, 0x73, 0x1e, 0xd2, 0x1d, 0x23, 0x88, 0xc5, + 0x5d, 0xc0, 0x05, 0x74, 0x00, 0xb8, 0x6d, 0x73, + 0x28, 0xa1, 0xca, 0x2e, 0xac, 0x0b, 0x5c, 0x5f, + 0x72, 0xf0, 0x5a, 0xf1, 0x4a, 0x0a, 0x61, 0xd7, + 0xa7, 0xb0, 0x83, 0xbb, 0x64, 0x1c, 0xd1, 0x77, + 0x73, 0xa2, 0xa7, 0x99, 0x24, 0x57, 0x74, 0x02, + 0x02, 0xc5, 0x8e, 0x73, 0x11, 0xb9, 0x67, 0xb1, + 0xe5, 0x11, 0xfb, 0x4e, 0x90, 0xcc, 0x0e, 0x35, + 0xd5, 0xa7, 0xf3, 0x54, 0x6e, 0x57, 0x98, 0xbf, + 0x2f, 0xbc, 0x6d, 0xc3, 0x46, 0x20, 0x2a, 0x1c, + 0xcf, 0x9c, 0xd3, 0xac, 0x29, 0x18, 0xf3, 0x4c, + 0x96, 0xd2, 0x57, 0xde, 0xd8, 0xdb, 0xca, 0x6e, + 0xde, 0x0e, 0x10, 0xf2, 0x30, 0x30, 0xbb, 0x41, + 0x21, 0x04, 0x55, 0xf4, 0xaf, 0x9a, 0xf2, 0x79, + 0x64, 0x67, 0x34, 0xf7, 0xbc, 0x97, 0x47, 0xf3, + 0x4e, 0xe8, 0x52, 0xfb, 0x30, 0xe7, 0x32, 0x0c, + 0xc9, 0xcd, 0x38, 0x5c, 0xd8, 0x9a, 0x5a, 0x46, + 0xb0, 0x46, 0x3d, 0x2a, 0x0e, 0x47, 0x39, 0xef, + 0x74, 0x8f, 0x35, 0x7b, 0xce, 0x27, 0x1d, 0xf2, + 0x75, 0xa9, 0x2c, 0x93, 0x35, 0xb6, 0xcb, 0xc5, + 0xcb, 0x6e, 0x22, 0x7c, 0xcc, 0xb8, 0x6b, 0x5b, + 0x46, 0x10, 0x34, 0x0c, 0x55, 0xad, 0x48, 0xdf, + 0x41, 0xcc, 0x33, 0x5c, 0xd2, 0x82, 0xb7, 0x73, + 0x1e, 0xd3, 0xdd, 0xc7, 0xa9, 0x48, 0xe5, 0x24, + 0x9d, 0x9f, 0xcd, 0x09, 0xf2, 0x8d, 0x09, 0x3b, + 0xe4, 0x80, 0xbc, 0xfb, 0x7e, 0xcb, 0x01, 0x4e, + 0xad, 0x94, 0x76, 0x31, 0xff, 0x00, 0xfd, 0xc5, + 0xa6, 0x2c, 0xd6, 0xd6, 0x1b, 0x3b, 0xfb, 0x48, + 0xe2, 0x73, 0x5b, 0x76, 0xef, 0xd5, 0x69, 0x07, + 0x08, 0x1b, 0x87, 0x49, 0x41, 0xd3, 0xb2, 0x9f, + 0xb6, 0xbc, 0xff, 0x00, 0xc7, 0x75, 0x7b, 0x94, + 0x58, 0x1f, 0xe8, 0xe8, 0xb0, 0xfe, 0x6c, 0xfe, + 0x37, 0x6b, 0x11, 0x5c, 0x79, 0x36, 0x67, 0x1e, + 0x5e, 0xf9, 0xdc, 0xf6, 0x39, 0xfc, 0xf4, 0x66, + 0x30, 0x1b, 0x4a, 0x82, 0x77, 0x4e, 0x95, 0xef, + 0x2b, 0xcc, 0xed, 0xed, 0xed, 0x66, 0xb0, 0xbd, + 0x8c, 0xcd, 0x67, 0x31, 0xaf, 0x8b, 0xe5, 0x34, + 0xe8, 0xe2, 0x41, 0xc3, 0x1d, 0x9d, 0xcc, 0xd6, + 0xd3, 0x4f, 0x1b, 0x31, 0x43, 0x0e, 0x99, 0x5e, + 0x0d, 0x28, 0x14, 0xce, 0xd4, 0xd4, 0x8b, 0x07, + 0x0d, 0x2d, 0x36, 0xe3, 0xbd, 0x86, 0xbe, 0x15, + 0xcd, 0x77, 0x99, 0xd8, 0xc7, 0x60, 0xec, 0xbf, + 0x2d, 0x89, 0xed, 0x86, 0x47, 0x07, 0x4d, 0x2c, + 0xb4, 0xc4, 0xea, 0x6e, 0x68, 0x5e, 0xa2, 0xcc, + 0xf2, 0xfb, 0xab, 0x08, 0xac, 0xb3, 0x68, 0xe4, + 0x79, 0xb7, 0xd1, 0x14, 0xf1, 0x11, 0x5a, 0x1d, + 0xc3, 0x54, 0x1d, 0x30, 0x96, 0x8d, 0x97, 0xb7, + 0xc7, 0xf9, 0xd7, 0x4d, 0xa6, 0xf7, 0x97, 0x55, + 0xa3, 0x6b, 0x07, 0xf9, 0xbb, 0x89, 0xd4, 0x63, + 0x61, 0x07, 0xb1, 0xa9, 0x68, 0xcd, 0x33, 0x58, + 0xae, 0xa2, 0x86, 0xce, 0xce, 0x33, 0x0d, 0x9d, + 0xbe, 0x96, 0xe2, 0x3a, 0x4b, 0xb7, 0xd7, 0x53, + 0xf3, 0x6c, 0xa6, 0xfa, 0x18, 0x4e, 0x67, 0x6e, + 0xf3, 0x71, 0x03, 0x70, 0x82, 0xc2, 0x00, 0x78, + 0x1f, 0x3a, 0xa8, 0x37, 0xdc, 0x8a, 0x5a, 0x6c, + 0xff, 0x00, 0x39, 0xa3, 0x48, 0xad, 0x7f, 0xb0, + 0xbd, 0x67, 0xb9, 0x9d, 0x9d, 0xbe, 0x67, 0x2c, + 0x53, 0x65, 0xf1, 0xdc, 0x48, 0xd0, 0xda, 0xc8, + 0xf7, 0x10, 0x4d, 0x5b, 0xbd, 0x87, 0x79, 0x47, + 0xe6, 0xd9, 0xcc, 0x79, 0x84, 0x16, 0xac, 0x8a, + 0x27, 0x40, 0xfb, 0x6a, 0xd7, 0x55, 0x06, 0xaa, + 0x61, 0xa5, 0x7e, 0x6a, 0xdf, 0x36, 0x6b, 0x93, + 0x5f, 0xf3, 0x73, 0xe6, 0x36, 0xf2, 0x0b, 0xa6, + 0x34, 0x07, 0x73, 0x64, 0x60, 0x7d, 0x37, 0x0d, + 0x74, 0xa0, 0xdf, 0xed, 0x77, 0x57, 0x59, 0xd6, + 0x5a, 0x6e, 0x2d, 0x7d, 0x97, 0x0d, 0x39, 0xb6, + 0xd6, 0xb5, 0x65, 0x4e, 0x9d, 0x41, 0x44, 0x67, + 0x44, 0xf5, 0xbd, 0xe6, 0x9f, 0xf8, 0xce, 0xf0, + 0xff, 0x00, 0x42, 0xe8, 0x93, 0x3b, 0x33, 0x67, + 0x10, 0xe6, 0x12, 0x46, 0xe1, 0x14, 0x04, 0x36, + 0x38, 0x9b, 0xac, 0x34, 0x57, 0x7f, 0x42, 0xe2, + 0xbf, 0xb8, 0x6d, 0xd5, 0xec, 0xf7, 0x2c, 0x05, + 0xad, 0x95, 0xee, 0x78, 0x69, 0xd6, 0x06, 0xe5, + 0x50, 0x73, 0xbb, 0xc9, 0x3d, 0xa5, 0x67, 0xcf, + 0x3d, 0xff, 0x00, 0x29, 0xf3, 0x19, 0xf5, 0x9a, + 0xab, 0x24, 0x54, 0x10, 0xa5, 0x73, 0x0c, 0xea, + 0x0b, 0xbb, 0x8b, 0x29, 0xd9, 0x1b, 0xda, 0x2d, + 0x1a, 0xd0, 0xe0, 0xea, 0x55, 0xd8, 0x48, 0x3e, + 0x2e, 0x9e, 0xc2, 0x0c, 0x6d, 0x47, 0xf3, 0xab, + 0x8e, 0xd3, 0x3e, 0xa8, 0x52, 0xb9, 0x8f, 0xfa, + 0x83, 0x29, 0xfb, 0x38, 0xcf, 0x7d, 0xca, 0x0b, + 0x37, 0xbd, 0x66, 0x61, 0x7f, 0x2d, 0xd4, 0x60, + 0xb1, 0xb2, 0x61, 0x01, 0xae, 0xa5, 0x74, 0x0a, + 0x6f, 0xa9, 0x11, 0x99, 0x45, 0x98, 0xe7, 0x99, + 0x6b, 0xe3, 0x63, 0x98, 0x21, 0x2c, 0x88, 0x87, + 0x53, 0x49, 0x15, 0x35, 0x14, 0x3a, 0xb4, 0xa0, + 0xe0, 0xcf, 0x5a, 0xf1, 0x9b, 0x5d, 0x87, 0x0d, + 0x26, 0x5f, 0x17, 0x80, 0xd1, 0x58, 0x2e, 0x88, + 0xf8, 0x8f, 0x2c, 0x6f, 0xe7, 0x36, 0x1d, 0x3d, + 0xf5, 0xcb, 0x98, 0xde, 0xe4, 0xbd, 0x69, 0x2b, + 0xef, 0xad, 0x9e, 0xeb, 0x8b, 0x77, 0xe1, 0x6b, + 0x98, 0x7c, 0x57, 0x86, 0xea, 0xc4, 0x14, 0x5b, + 0xf3, 0x99, 0x9f, 0x9b, 0xb7, 0x34, 0x2d, 0xf2, + 0x1c, 0x28, 0xca, 0xfe, 0x60, 0xd0, 0x07, 0x02, + 0x05, 0xc5, 0x7e, 0x20, 0x7e, 0x8d, 0x3e, 0xd5, + 0xab, 0xfb, 0x74, 0x52, 0x97, 0x7f, 0xeb, 0x38, + 0xfc, 0xf8, 0xff, 0x00, 0xe9, 0xad, 0x13, 0x66, + 0xf9, 0x18, 0xba, 0x19, 0x84, 0x36, 0xb2, 0x3a, + 0xed, 0xee, 0xc6, 0x5a, 0xf2, 0x03, 0x03, 0xab, + 0xa4, 0xf6, 0xd7, 0x2d, 0xce, 0x70, 0xc9, 0x73, + 0xc6, 0xe6, 0x91, 0x46, 0x70, 0xb5, 0xec, 0x3c, + 0xdb, 0xb5, 0xf8, 0xad, 0xc2, 0x7c, 0x9a, 0xa0, + 0xd9, 0x39, 0xbe, 0x66, 0xd1, 0xdc, 0x4d, 0x63, + 0x19, 0x92, 0x78, 0xe5, 0x71, 0x0d, 0x02, 0xa3, + 0x0d, 0x74, 0xd7, 0x56, 0xb5, 0xd7, 0x14, 0xf9, + 0x46, 0x75, 0x70, 0x20, 0xba, 0xb6, 0x36, 0xb7, + 0x92, 0x92, 0xd1, 0x34, 0x67, 0x41, 0x70, 0x5a, + 0x26, 0xcf, 0x2c, 0x59, 0x98, 0x33, 0x30, 0xb1, + 0xb7, 0x7b, 0x27, 0x24, 0xfb, 0x40, 0x79, 0x14, + 0x7b, 0x4e, 0xbd, 0xd2, 0x2a, 0xb2, 0xcc, 0xcb, + 0x67, 0xe0, 0xb9, 0x37, 0xf6, 0xf6, 0xf3, 0x1b, + 0x9d, 0x2e, 0x6c, 0x6e, 0x23, 0x03, 0x5c, 0x75, + 0x9d, 0xf4, 0x11, 0x17, 0x76, 0xe6, 0xda, 0xea, + 0x6b, 0x72, 0x41, 0x30, 0xbc, 0xb2, 0xa3, 0x46, + 0xa2, 0xb5, 0x2d, 0x97, 0x13, 0xbe, 0xe2, 0x79, + 0x27, 0x93, 0xcb, 0x95, 0xc5, 0xee, 0xee, 0x9a, + 0xaf, 0x31, 0x47, 0x24, 0xb2, 0x36, 0x28, 0x86, + 0x29, 0x24, 0x38, 0x58, 0xdd, 0xf2, 0x50, 0x5b, + 0xad, 0xb4, 0x6c, 0xdd, 0xb7, 0x6f, 0x47, 0x6b, + 0x13, 0x97, 0x32, 0xee, 0xbb, 0x60, 0xb4, 0xcb, + 0xad, 0xac, 0x35, 0xb9, 0x8d, 0x6d, 0x7f, 0xb2, + 0x17, 0x0a, 0x02, 0x22, 0x20, 0x2f, 0x51, 0x7e, + 0xd5, 0x9e, 0x73, 0x7c, 0x21, 0x79, 0x5e, 0xa2, + 0xfd, 0xab, 0x3c, 0xe6, 0xf8, 0x42, 0x0e, 0x4d, + 0xb2, 0xfe, 0x67, 0x1f, 0xd8, 0x8f, 0xac, 0xe5, + 0x02, 0xa7, 0xb6, 0xcb, 0xf9, 0x9c, 0x7f, 0x62, + 0x3e, 0xb3, 0x94, 0x0a, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x21, 0xd4, 0x88, 0x82, 0x7f, 0x2b, 0xb4, + 0x9e, 0xd3, 0x2b, 0x9b, 0x31, 0x86, 0x27, 0x4b, + 0x75, 0x75, 0x58, 0xa0, 0x0d, 0x15, 0x2d, 0x6e, + 0xa7, 0x3c, 0xd3, 0xb4, 0xbd, 0xb2, 0xc6, 0xfb, + 0xe1, 0x77, 0xdb, 0xba, 0x07, 0x99, 0xfd, 0xa3, + 0x11, 0x61, 0x1e, 0x31, 0x1a, 0x3c, 0x65, 0x0f, + 0x0e, 0x69, 0x98, 0xdb, 0xc4, 0x21, 0x86, 0xe1, + 0xf1, 0xc4, 0xdd, 0x4c, 0x06, 0x80, 0x57, 0x49, + 0x53, 0x0d, 0xcd, 0xee, 0xbe, 0x1c, 0x7c, 0xa6, + 0xe8, 0xfb, 0x58, 0x9c, 0x34, 0x3b, 0x10, 0xc7, + 0x86, 0x83, 0x47, 0x69, 0x07, 0x3e, 0xcc, 0x48, + 0xf7, 0x5e, 0x4d, 0x97, 0xca, 0xc2, 0xe8, 0x2e, + 0x58, 0xe1, 0x2b, 0x7e, 0x6e, 0xe6, 0x2f, 0x91, + 0x36, 0x9a, 0x42, 0xcb, 0x98, 0xb2, 0xf6, 0x34, + 0xc7, 0x6f, 0x69, 0x1b, 0x44, 0x6d, 0x3f, 0x9d, + 0xfd, 0x6e, 0xf2, 0xf5, 0x69, 0x2c, 0x79, 0x6e, + 0x4d, 0x35, 0xd0, 0x7b, 0x4d, 0xf5, 0xe9, 0x2c, + 0x8c, 0x02, 0x1c, 0xe6, 0xb3, 0x49, 0x2b, 0x17, + 0xaf, 0x8f, 0x33, 0xc9, 0x61, 0xba, 0xc6, 0xd1, + 0x79, 0x67, 0xe2, 0x48, 0x09, 0x01, 0xce, 0x60, + 0xd5, 0x4a, 0xa0, 0x84, 0x24, 0x8d, 0x23, 0xb8, + 0xa7, 0xb6, 0xb3, 0x49, 0xb0, 0xa6, 0x90, 0x60, + 0x34, 0xa7, 0xf6, 0x74, 0xa8, 0x11, 0xab, 0xb0, + 0xac, 0x0d, 0x6c, 0x39, 0xe6, 0x55, 0x6d, 0x03, + 0x65, 0x64, 0x57, 0x96, 0x7e, 0x26, 0x19, 0x0d, + 0x03, 0xda, 0x05, 0x3c, 0x01, 0x07, 0x9d, 0x8f, + 0xf7, 0xcb, 0x87, 0x6a, 0x02, 0x1d, 0x3c, 0x2a, + 0x3f, 0x2e, 0xcc, 0xaf, 0xb2, 0xdc, 0x52, 0x42, + 0x09, 0x82, 0x43, 0x47, 0x87, 0x82, 0x63, 0x71, + 0xec, 0x1d, 0x4a, 0xcd, 0x1d, 0xac, 0x50, 0xd9, + 0x4d, 0x1d, 0xab, 0x61, 0x66, 0x65, 0x25, 0xbf, + 0x36, 0xe8, 0xe3, 0x75, 0x41, 0xa6, 0x8a, 0xe9, + 0x51, 0x39, 0x5b, 0xa0, 0xbd, 0xca, 0x25, 0xca, + 0x65, 0x95, 0xb0, 0x4e, 0xc7, 0xe3, 0x88, 0xbc, + 0xf8, 0xa6, 0x9d, 0x94, 0x1b, 0x6d, 0x8e, 0x49, + 0x9e, 0xbd, 0xd0, 0xba, 0xdc, 0xd9, 0xde, 0xb8, + 0x54, 0x3d, 0x87, 0x41, 0x3b, 0xe2, 0x94, 0x51, + 0x76, 0xd3, 0xe6, 0x19, 0x45, 0xe4, 0xae, 0x82, + 0xbf, 0xab, 0x71, 0x8e, 0x52, 0x5a, 0x4b, 0x08, + 0x07, 0x45, 0x54, 0x9e, 0x5b, 0x95, 0x33, 0x29, + 0xb8, 0xf6, 0xfc, 0xc2, 0xe2, 0x20, 0xd8, 0x01, + 0xe6, 0xd8, 0xc7, 0x02, 0xe7, 0x38, 0x82, 0x3e, + 0x55, 0x8c, 0xb6, 0xfe, 0xde, 0xf9, 0x99, 0x8d, + 0x94, 0xf2, 0x0b, 0x73, 0x7a, 0xfe, 0x72, 0x17, + 0x3b, 0x50, 0xd5, 0xe2, 0xd7, 0xb8, 0x83, 0xd4, + 0x17, 0x59, 0x3e, 0x77, 0x23, 0x6d, 0xee, 0xed, + 0xbd, 0x96, 0xea, 0x4f, 0x15, 0xb2, 0x46, 0x68, + 0x09, 0xd3, 0xbb, 0xa1, 0x7a, 0xd9, 0xfb, 0x47, + 0xd9, 0xe7, 0x17, 0xb6, 0xcf, 0x38, 0x8c, 0x71, + 0x90, 0x1d, 0xbe, 0x35, 0x8e, 0xf1, 0x5a, 0xac, + 0x32, 0x2f, 0x61, 0xba, 0x65, 0xdd, 0xf5, 0xc4, + 0x2d, 0x82, 0x03, 0x8f, 0xc5, 0x75, 0x4b, 0x88, + 0x35, 0x6f, 0x7d, 0x6d, 0xca, 0x2f, 0xe2, 0xb9, + 0xce, 0xef, 0xae, 0x71, 0x08, 0xd9, 0x24, 0x74, + 0x61, 0x79, 0x02, 0xb4, 0xa0, 0x08, 0x23, 0xf2, + 0x00, 0xd8, 0x4d, 0xd6, 0x62, 0xfd, 0x56, 0x90, + 0x9c, 0x07, 0xfc, 0x47, 0xf8, 0xad, 0x5c, 0x76, + 0x57, 0x37, 0x96, 0xb3, 0xfb, 0x55, 0xb6, 0x2e, + 0x71, 0x95, 0x32, 0x39, 0xa0, 0xb9, 0xba, 0x74, + 0xf8, 0xd4, 0x5d, 0x92, 0x96, 0xdb, 0x6c, 0xf4, + 0x30, 0x82, 0x39, 0xcb, 0xd9, 0x4c, 0x8f, 0x00, + 0xe9, 0xc0, 0xcd, 0x02, 0xbd, 0xd5, 0xeb, 0x67, + 0x2f, 0x2d, 0xe1, 0x96, 0xe2, 0xd6, 0xe5, 0xfc, + 0xdc, 0x77, 0x71, 0xf3, 0x61, 0xe7, 0x50, 0x76, + 0x91, 0xa7, 0x85, 0x07, 0x4c, 0x59, 0xae, 0x53, + 0x9a, 0x48, 0xd8, 0xb3, 0x3b, 0x41, 0x1c, 0xcf, + 0xf1, 0x5b, 0x73, 0x19, 0xd1, 0x5e, 0xca, 0xf5, + 0x97, 0x65, 0xc7, 0x2d, 0xda, 0x76, 0x5b, 0x62, + 0xc4, 0xdc, 0x0f, 0x74, 0x4e, 0xdd, 0xc2, 0x46, + 0xea, 0xd5, 0x0e, 0xcd, 0x3a, 0x2b, 0x86, 0xbe, + 0x7b, 0x98, 0x05, 0xa3, 0x0e, 0x22, 0xf0, 0xe1, + 0x52, 0xd1, 0xb8, 0x17, 0x4c, 0x19, 0x95, 0xbd, + 0xde, 0xd4, 0x36, 0xe1, 0x8e, 0x0d, 0x85, 0x91, + 0x96, 0x35, 0xee, 0x34, 0x07, 0x46, 0xbd, 0x3b, + 0xe8, 0x34, 0x4d, 0x7d, 0xb3, 0xd6, 0xf7, 0x92, + 0x4b, 0xec, 0x72, 0x49, 0x3b, 0x24, 0x76, 0x92, + 0xe1, 0x84, 0xbc, 0x38, 0xe9, 0xa1, 0x72, 0x65, + 0x19, 0x84, 0xd9, 0x8e, 0xd2, 0x47, 0x73, 0x28, + 0xa5, 0x43, 0x83, 0x58, 0x34, 0x86, 0x80, 0xd3, + 0xa1, 0x43, 0xdf, 0x10, 0x6f, 0x6e, 0x08, 0x35, + 0x06, 0x57, 0xd0, 0xd6, 0xa0, 0xf8, 0xc5, 0x76, + 0xec, 0xd4, 0x8c, 0x8f, 0x38, 0x85, 0xf2, 0x38, + 0x35, 0xa0, 0x3e, 0xae, 0x71, 0x00, 0x79, 0x25, + 0x07, 0x16, 0x61, 0xfc, 0xc2, 0xeb, 0xed, 0xa4, + 0xfa, 0xee, 0x5a, 0x16, 0xfb, 0xf2, 0xd7, 0x5f, + 0xdc, 0xb9, 0xa6, 0xad, 0x33, 0x3e, 0x87, 0x46, + 0x9a, 0xb8, 0x9a, 0x8a, 0x6e, 0x2d, 0x08, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0xa5, 0x36, 0x6b, 0xf9, + 0xdd, 0xb7, 0xf6, 0xbe, 0xa1, 0x51, 0x6a, 0x53, + 0x66, 0xbf, 0x9d, 0xdb, 0x7f, 0x6b, 0xea, 0x14, + 0x13, 0x79, 0x87, 0xbe, 0xcd, 0xe7, 0x7c, 0x81, + 0x73, 0xae, 0x8c, 0xc3, 0xdf, 0x66, 0xf3, 0xbe, + 0x40, 0xb9, 0xd0, 0x16, 0x16, 0x51, 0x07, 0x5e, + 0xd1, 0x65, 0x77, 0x99, 0x8c, 0x56, 0x82, 0xd5, + 0xa1, 0xdc, 0xd0, 0x76, 0x2c, 0x4e, 0x0d, 0xf2, + 0x83, 0x77, 0xfb, 0x4a, 0x13, 0xe1, 0x5c, 0xeb, + 0xd5, 0x33, 0x96, 0x15, 0x83, 0x38, 0xce, 0x25, + 0xcb, 0x2d, 0x6d, 0xa5, 0x64, 0x6d, 0x90, 0xca, + 0x28, 0x41, 0x24, 0x0d, 0x03, 0xb0, 0xa2, 0xbe, + 0x33, 0xba, 0xe8, 0xd1, 0xf0, 0x9e, 0x24, 0x1c, + 0x9f, 0x0a, 0xe7, 0x7e, 0xa9, 0x9c, 0xb0, 0x9f, + 0x0a, 0xe7, 0x7e, 0xa9, 0x9c, 0xb0, 0xba, 0xfe, + 0x33, 0xba, 0xe8, 0xd1, 0xf0, 0x94, 0xf8, 0xce, + 0xeb, 0xa3, 0x47, 0xc2, 0x50, 0x72, 0x7c, 0x2b, + 0x9d, 0xfa, 0xa6, 0x72, 0xc2, 0x7c, 0x2b, 0x9d, + 0xfa, 0xa6, 0x72, 0xc2, 0xeb, 0xf8, 0xce, 0xeb, + 0xa3, 0x47, 0xc2, 0x53, 0xe3, 0x3b, 0xae, 0x8d, + 0x1f, 0x09, 0x41, 0xc9, 0xf0, 0xae, 0x77, 0xea, + 0x99, 0xcb, 0x09, 0xf0, 0xae, 0x77, 0xea, 0x99, + 0xcb, 0x0b, 0xaf, 0xe3, 0x3b, 0xae, 0x8d, 0x1f, + 0x09, 0x4f, 0x8c, 0xee, 0xba, 0x34, 0x7c, 0x25, + 0x07, 0x27, 0xc2, 0xb9, 0xdf, 0xaa, 0x67, 0x2c, + 0x27, 0xc2, 0xb9, 0xdf, 0xaa, 0x67, 0x2c, 0x2e, + 0xbf, 0x8c, 0xee, 0xba, 0x34, 0x7c, 0x25, 0x3e, + 0x33, 0xba, 0xe8, 0xd1, 0xf0, 0x94, 0x1c, 0x9f, + 0x0a, 0xe7, 0x7e, 0xa9, 0x9c, 0xb0, 0x9f, 0x0a, + 0xe7, 0x7e, 0xa9, 0x9c, 0xb0, 0xba, 0xfe, 0x33, + 0xba, 0xe8, 0xd1, 0xf0, 0x94, 0xf8, 0xce, 0xeb, + 0xa3, 0x47, 0xc2, 0x50, 0x72, 0x7c, 0x29, 0x9d, + 0x7a, 0xa6, 0x7e, 0xf0, 0x29, 0x18, 0x6d, 0x76, + 0xbe, 0x18, 0x04, 0x0c, 0xe6, 0xf0, 0xb4, 0x51, + 0xae, 0x2e, 0x69, 0x70, 0x1d, 0x82, 0x56, 0x9f, + 0x8c, 0xee, 0xba, 0x34, 0x7c, 0x25, 0x3e, 0x33, + 0xba, 0xe8, 0xd1, 0xf0, 0x94, 0x18, 0x97, 0x26, + 0xda, 0x5b, 0x83, 0x6e, 0xdb, 0xac, 0x32, 0x32, + 0xdd, 0xc0, 0xb2, 0xae, 0x65, 0x75, 0x82, 0x75, + 0x01, 0x5d, 0x4a, 0x53, 0x30, 0x8b, 0x68, 0x45, + 0xf3, 0xe4, 0xcb, 0xb0, 0x3a, 0x07, 0xb5, 0xbe, + 0x2c, 0x85, 0xa4, 0x62, 0x02, 0x84, 0x80, 0x54, + 0x67, 0xc6, 0x57, 0x5d, 0x1a, 0x3e, 0x12, 0x9f, + 0x19, 0x5d, 0x74, 0x66, 0x70, 0xb9, 0x06, 0x9b, + 0x8d, 0x9e, 0xda, 0x1b, 0xa9, 0x5d, 0x34, 0xec, + 0x6c, 0x92, 0x3f, 0x5b, 0x8b, 0xc7, 0x79, 0x6a, + 0xf8, 0x57, 0x3b, 0xf5, 0x4c, 0xd5, 0x4f, 0x2c, + 0x2e, 0xbf, 0x8c, 0xee, 0xba, 0x34, 0x7c, 0x25, + 0x3e, 0x33, 0xba, 0xe8, 0xd1, 0xf0, 0x94, 0x1e, + 0xe7, 0xcb, 0xf6, 0xb2, 0xe2, 0xd7, 0xd9, 0x26, + 0xc0, 0xf8, 0x8d, 0x01, 0xf1, 0x99, 0x5a, 0x03, + 0xbf, 0x45, 0xb2, 0xde, 0xdb, 0x6b, 0xed, 0xe1, + 0x6c, 0x2d, 0x11, 0xb9, 0xac, 0x14, 0x61, 0x7b, + 0x9a, 0xe2, 0x07, 0x60, 0x95, 0xa3, 0xe3, 0x3b, + 0xae, 0x8d, 0x1f, 0x09, 0x4f, 0x8c, 0xee, 0xba, + 0x34, 0x7c, 0x25, 0x06, 0x89, 0xf6, 0x73, 0x68, + 0x2e, 0x25, 0x74, 0xd3, 0x31, 0xaf, 0x91, 0xfe, + 0x53, 0x8c, 0x81, 0x2d, 0xb6, 0x77, 0x68, 0x2d, + 0x67, 0x6c, 0xf0, 0xb1, 0x8d, 0x91, 0x9a, 0x5a, + 0x71, 0xb4, 0xf8, 0x56, 0xff, 0x00, 0x8c, 0xee, + 0xba, 0x34, 0x7c, 0x25, 0x3e, 0x33, 0xba, 0xe8, + 0xd1, 0xf0, 0x94, 0x1d, 0x22, 0x3d, 0xb6, 0x1f, + 0xf1, 0x19, 0xff, 0x00, 0x2b, 0xd0, 0x5c, 0x97, + 0xd9, 0x36, 0xd3, 0xdf, 0x96, 0xba, 0xe8, 0x32, + 0x47, 0x30, 0x51, 0xa7, 0x13, 0x1b, 0x4a, 0xf9, + 0xa0, 0x2f, 0x5f, 0x19, 0xdd, 0x74, 0x68, 0xf8, + 0x4a, 0x7c, 0x67, 0x75, 0xd1, 0xa3, 0xe1, 0x28, + 0x39, 0xe1, 0xd9, 0xac, 0xfa, 0x09, 0x99, 0x3c, + 0x51, 0xb1, 0xaf, 0x8c, 0xe2, 0x69, 0xc6, 0xd3, + 0x4a, 0x76, 0xea, 0xb6, 0x3f, 0x22, 0xda, 0x57, + 0xdd, 0xfb, 0x63, 0xda, 0xc3, 0x70, 0x1c, 0x1d, + 0x8f, 0x1b, 0x46, 0x91, 0xd8, 0x0b, 0x67, 0xc6, + 0x77, 0x5d, 0x1a, 0x3e, 0x12, 0x9f, 0x19, 0xdd, + 0x74, 0x68, 0xf8, 0x4a, 0x0d, 0x77, 0x19, 0x16, + 0xd2, 0x5d, 0x5c, 0x0b, 0x99, 0xda, 0xc7, 0xcc, + 0xdc, 0x34, 0x76, 0x36, 0x8a, 0x61, 0xd5, 0xa1, + 0x2e, 0x32, 0x3d, 0xa6, 0xb9, 0xb9, 0x17, 0x52, + 0x86, 0x99, 0xc5, 0x28, 0xf0, 0xf6, 0xb4, 0x8c, + 0x22, 0x83, 0xc9, 0xa2, 0xd9, 0xf1, 0x9d, 0xd7, + 0x46, 0x8f, 0x84, 0xa7, 0xc6, 0x77, 0x5d, 0x1a, + 0x3e, 0x12, 0x83, 0xa9, 0xac, 0xdb, 0x20, 0xcc, + 0x24, 0x44, 0x4d, 0x28, 0x1e, 0x4b, 0x71, 0x70, + 0xae, 0x03, 0x90, 0xed, 0x23, 0xae, 0x85, 0xe3, + 0x83, 0x5d, 0x3b, 0x5c, 0x1c, 0x1e, 0x5e, 0xd3, + 0x42, 0x3b, 0x6b, 0x6f, 0xc6, 0x77, 0x5d, 0x1a, + 0x3e, 0x12, 0x9f, 0x19, 0xdd, 0x74, 0x68, 0xf8, + 0x4a, 0x0d, 0x17, 0x3b, 0x3b, 0xb4, 0x37, 0x53, + 0x3a, 0x79, 0xd8, 0xc7, 0xca, 0xfa, 0x62, 0x76, + 0x36, 0x8a, 0xd0, 0x53, 0x71, 0x6b, 0x1b, 0x2d, + 0x9e, 0x02, 0x08, 0x8d, 0xa0, 0x8d, 0x20, 0x89, + 0x05, 0x57, 0x5f, 0xc6, 0x77, 0x5d, 0x1a, 0x3e, + 0x12, 0x9f, 0x19, 0xdd, 0x74, 0x68, 0xf8, 0x4a, + 0x0e, 0x98, 0xe2, 0xdb, 0x18, 0xd8, 0x19, 0x48, + 0x9f, 0x87, 0x53, 0x9e, 0x5a, 0x48, 0xee, 0xae, + 0x0b, 0xad, 0x9f, 0xda, 0x3b, 0xb9, 0x0c, 0xb7, + 0x21, 0xb2, 0x3c, 0xee, 0x99, 0x05, 0x07, 0x68, + 0x2d, 0xdf, 0x19, 0xdd, 0x74, 0x68, 0xf8, 0x4a, + 0x7c, 0x67, 0x75, 0xd1, 0xa3, 0xe1, 0x28, 0x39, + 0x3e, 0x15, 0xce, 0xfd, 0x53, 0x39, 0x61, 0x3e, + 0x15, 0xce, 0xfd, 0x53, 0x39, 0x61, 0x75, 0xfc, + 0x67, 0x75, 0xd1, 0xa3, 0xe1, 0x29, 0xf1, 0x9d, + 0xd7, 0x46, 0x8f, 0x84, 0xa0, 0xe4, 0xf8, 0x57, + 0x3b, 0xf5, 0x4c, 0xe5, 0x84, 0xf8, 0x57, 0x3b, + 0xf5, 0x4c, 0xe5, 0x85, 0xd7, 0xf1, 0x9d, 0xd7, + 0x46, 0x8f, 0x84, 0xa7, 0xc6, 0x77, 0x5d, 0x1a, + 0x3e, 0x12, 0x83, 0x93, 0xe1, 0x5c, 0xef, 0xd5, + 0x33, 0x96, 0x13, 0xe1, 0x5c, 0xef, 0xd5, 0x33, + 0x96, 0x17, 0x5f, 0xc6, 0x77, 0x5d, 0x1a, 0x3e, + 0x12, 0x9f, 0x19, 0xdd, 0x74, 0x68, 0xf8, 0x4a, + 0x0e, 0x4f, 0x85, 0x73, 0xbf, 0x54, 0xce, 0x58, + 0x4f, 0x85, 0x73, 0xbf, 0x54, 0xce, 0x58, 0x5d, + 0x7f, 0x19, 0xdd, 0x74, 0x68, 0xf8, 0x4a, 0x7c, + 0x67, 0x75, 0xd1, 0xa3, 0xe1, 0x28, 0x39, 0x3e, + 0x15, 0xce, 0xfd, 0x53, 0x39, 0x61, 0x3e, 0x15, + 0xce, 0xfd, 0x53, 0x39, 0x61, 0x75, 0xfc, 0x67, + 0x75, 0xd1, 0xa3, 0xe1, 0x29, 0xf1, 0x9d, 0xd7, + 0x46, 0x8f, 0x84, 0xa0, 0xe4, 0xf8, 0x57, 0x3b, + 0xf5, 0x4c, 0xe5, 0x84, 0xf8, 0x57, 0x3a, 0xdd, + 0x8d, 0x80, 0x79, 0xe1, 0x75, 0xfc, 0x67, 0x75, + 0xd1, 0xa3, 0xe1, 0x2b, 0xdc, 0x3b, 0x61, 0x73, + 0x24, 0xd1, 0xc6, 0x6d, 0xd8, 0xd1, 0x23, 0xda, + 0xd2, 0x41, 0x3a, 0x03, 0x8d, 0x10, 0x4a, 0xe7, + 0x00, 0x86, 0xc0, 0x0e, 0x82, 0x01, 0x04, 0x77, + 0x14, 0x61, 0x52, 0x39, 0xd3, 0xcf, 0x3c, 0xc6, + 0x6e, 0x06, 0xd7, 0x85, 0x47, 0x20, 0xf7, 0x17, + 0xed, 0x19, 0xe7, 0x05, 0x2a, 0xa2, 0x62, 0x3f, + 0xac, 0x6f, 0x9c, 0x14, 0xad, 0x50, 0x0a, 0xe0, + 0xcc, 0x7d, 0xe6, 0xd3, 0xed, 0x3e, 0x50, 0xbb, + 0xea, 0xb8, 0x33, 0x1f, 0x79, 0xb4, 0xfb, 0x4f, + 0x94, 0x20, 0xc6, 0x5f, 0xef, 0x37, 0x7e, 0x79, + 0xfa, 0xc5, 0x77, 0xd1, 0x70, 0x65, 0xfe, 0xf3, + 0x77, 0xe7, 0x9f, 0xac, 0x57, 0x7a, 0x0c, 0x1d, + 0x45, 0x45, 0x1d, 0x65, 0x4b, 0x3b, 0x51, 0x51, + 0x27, 0x59, 0x40, 0x44, 0x44, 0x1e, 0xa2, 0x95, + 0xf0, 0xc8, 0xd9, 0x18, 0x68, 0xe6, 0xea, 0xed, + 0x1d, 0xc5, 0xd5, 0x79, 0x67, 0x96, 0xe7, 0x4d, + 0x0e, 0x79, 0xe6, 0x2e, 0x80, 0xa0, 0x78, 0xfc, + 0xb4, 0xae, 0x34, 0x41, 0xa9, 0xfb, 0x17, 0x78, + 0x0f, 0xea, 0xee, 0x23, 0x23, 0x7d, 0xc1, 0xc0, + 0xf7, 0x97, 0x8f, 0x83, 0x33, 0x0f, 0x5d, 0x17, + 0xd2, 0xe2, 0x5d, 0x38, 0xdf, 0xf3, 0x8f, 0x0a, + 0x63, 0x7f, 0xce, 0x3c, 0x25, 0x07, 0x3f, 0xc1, + 0xb9, 0x8f, 0xaf, 0x8b, 0xe9, 0x71, 0x2c, 0x7c, + 0x19, 0x98, 0xfa, 0xf8, 0x87, 0x6b, 0x17, 0x12, + 0xe9, 0xc6, 0xff, 0x00, 0x9c, 0x78, 0x4a, 0x63, + 0x7f, 0xce, 0x3c, 0x25, 0x07, 0x37, 0xc1, 0x99, + 0x87, 0xae, 0x87, 0xe9, 0x71, 0x27, 0xc1, 0x99, + 0x8f, 0xaf, 0x8b, 0xe9, 0x71, 0x2e, 0x9c, 0x6f, + 0xf9, 0xc7, 0x84, 0xa6, 0x37, 0xfc, 0xe3, 0xc2, + 0x50, 0x73, 0xfc, 0x1b, 0x98, 0xfa, 0xf8, 0xbe, + 0x97, 0x12, 0xc7, 0xc1, 0x99, 0x87, 0xae, 0x8b, + 0xe9, 0x71, 0x2e, 0x9c, 0x6f, 0xf9, 0xc7, 0x84, + 0xa6, 0x37, 0xfc, 0xe3, 0xc2, 0x50, 0x73, 0x7c, + 0x19, 0x98, 0xd6, 0xbc, 0xf4, 0x55, 0xdf, 0xf1, + 0xb8, 0x93, 0xe0, 0xcc, 0xc3, 0xd7, 0x45, 0xf4, + 0xb8, 0x97, 0x4e, 0x37, 0xfc, 0xe3, 0xc2, 0x53, + 0x1b, 0xfe, 0x71, 0xe1, 0x28, 0x39, 0xbe, 0x0c, + 0xcc, 0x3d, 0x74, 0x3f, 0x4b, 0x89, 0x67, 0xe0, + 0xdc, 0xc7, 0x76, 0x78, 0x8f, 0x2b, 0x89, 0x74, + 0x63, 0x7f, 0xce, 0x3c, 0x25, 0x31, 0xbf, 0xe7, + 0x1e, 0x12, 0x83, 0x9b, 0xe0, 0xcc, 0xc3, 0x57, + 0x3d, 0x17, 0xd2, 0xe2, 0x4f, 0x83, 0x33, 0x0f, + 0x5d, 0x16, 0xff, 0x00, 0xe7, 0x71, 0x2e, 0x9c, + 0x6f, 0xf9, 0xc7, 0x84, 0xa6, 0x37, 0xfc, 0xe3, + 0xc2, 0x50, 0x73, 0x7c, 0x19, 0x98, 0x52, 0x9c, + 0xf4, 0x54, 0xde, 0xf1, 0xb8, 0x96, 0x7e, 0x0d, + 0xcc, 0x4f, 0xfc, 0x78, 0xbe, 0x97, 0x12, 0xe8, + 0xc6, 0xff, 0x00, 0x9c, 0x78, 0x4a, 0x63, 0x7f, + 0xce, 0x3c, 0x25, 0x07, 0x37, 0xc1, 0x99, 0x87, + 0xae, 0x8b, 0xe9, 0x71, 0x27, 0xc1, 0x99, 0x81, + 0xd7, 0x34, 0x5f, 0x4b, 0x89, 0x74, 0xe3, 0x7f, + 0xce, 0x3c, 0x25, 0x31, 0xbf, 0xe7, 0x1e, 0x12, + 0x83, 0x9b, 0xe0, 0xcc, 0xc3, 0xd7, 0x45, 0xf4, + 0xb8, 0x96, 0x7e, 0x0c, 0xcc, 0x3d, 0x74, 0x5f, + 0x4b, 0x89, 0x74, 0x63, 0x7f, 0xce, 0x3c, 0x25, + 0x31, 0xbf, 0xe7, 0x1e, 0x12, 0x83, 0x9f, 0xe0, + 0xdc, 0xc7, 0xd7, 0x45, 0xf4, 0xb8, 0x90, 0x6c, + 0x6e, 0x62, 0x3f, 0xe3, 0xc5, 0xf4, 0xb8, 0x97, + 0x46, 0x37, 0xfc, 0xe3, 0xc2, 0x53, 0x1b, 0xfe, + 0x71, 0xe1, 0x28, 0x39, 0xbe, 0x0c, 0xcc, 0x7d, + 0x7c, 0x5f, 0x4b, 0x89, 0x67, 0xe0, 0xdc, 0xc3, + 0xd7, 0x45, 0xf4, 0xb8, 0x97, 0x46, 0x37, 0xfc, + 0xe3, 0xc2, 0x53, 0x1b, 0xfe, 0x71, 0xe1, 0x28, + 0x39, 0xbe, 0x0c, 0xcc, 0x3d, 0x74, 0x5f, 0x4b, + 0x89, 0x3e, 0x0c, 0xcc, 0x3d, 0x74, 0x3f, 0x4b, + 0x89, 0x74, 0xe3, 0x7f, 0xce, 0x3c, 0x25, 0x31, + 0xbf, 0xe7, 0x1e, 0x12, 0x83, 0x9b, 0xe0, 0xcc, + 0xc3, 0xd7, 0x43, 0xf4, 0xb8, 0x90, 0xec, 0x66, + 0x60, 0x45, 0x0c, 0xd1, 0x11, 0xfd, 0xae, 0x25, + 0xd3, 0x8d, 0xff, 0x00, 0x38, 0xf0, 0x94, 0xc6, + 0xff, 0x00, 0x9c, 0x78, 0x4a, 0x0e, 0x6f, 0x83, + 0x33, 0x0f, 0x5d, 0x17, 0xd2, 0xe2, 0x4f, 0x83, + 0x33, 0x1f, 0x5f, 0x17, 0xd2, 0xe2, 0x5d, 0x38, + 0xdf, 0xf3, 0x8f, 0x09, 0x4c, 0x6f, 0xf9, 0xc7, + 0x84, 0xa0, 0xe6, 0xf8, 0x33, 0x30, 0xad, 0x79, + 0xe8, 0xab, 0xfd, 0xae, 0x24, 0xf8, 0x33, 0x31, + 0xf5, 0xd1, 0x7d, 0x2e, 0x25, 0xd3, 0x8d, 0xff, + 0x00, 0x38, 0xf0, 0x94, 0xc6, 0xff, 0x00, 0x9c, + 0x78, 0x4a, 0x0e, 0x6f, 0x83, 0x33, 0x0f, 0x5d, + 0x17, 0xd2, 0xe2, 0x59, 0xf8, 0x37, 0x31, 0xf5, + 0xd1, 0x7d, 0x2e, 0x25, 0xd1, 0x8d, 0xff, 0x00, + 0x38, 0xf0, 0x94, 0xc6, 0xff, 0x00, 0x9c, 0x78, + 0x4a, 0x0e, 0x71, 0xb1, 0xb9, 0x88, 0xff, 0x00, + 0x8f, 0x17, 0xd2, 0xe2, 0x5b, 0x2d, 0x76, 0x4f, + 0x33, 0xb6, 0xb8, 0x8e, 0xe2, 0x39, 0xa1, 0xc7, + 0x11, 0x0e, 0x6e, 0x20, 0xe2, 0x2a, 0x37, 0xf5, + 0x2d, 0x98, 0xdf, 0xf3, 0x8f, 0x09, 0x4c, 0x6f, + 0xf9, 0xc7, 0x84, 0xa0, 0xf1, 0x77, 0xb2, 0xb9, + 0xa5, 0xd5, 0xcb, 0xee, 0x64, 0x9a, 0x01, 0x24, + 0x86, 0xae, 0xc2, 0x1c, 0x06, 0x9d, 0xed, 0x0b, + 0x57, 0xc1, 0x99, 0x87, 0xae, 0x87, 0xe9, 0x71, + 0x2e, 0x8e, 0x71, 0xff, 0x00, 0x38, 0xf0, 0x94, + 0xc6, 0xff, 0x00, 0x9c, 0x78, 0x4a, 0x0e, 0x6f, + 0x83, 0x33, 0x1f, 0x5f, 0x16, 0x9f, 0x3b, 0x89, + 0x3e, 0x0c, 0xcc, 0x3d, 0x74, 0x47, 0x95, 0xc4, + 0xba, 0x71, 0xbf, 0xe7, 0x1e, 0x12, 0x98, 0xdf, + 0xf3, 0x8f, 0x09, 0x41, 0xcd, 0xf0, 0x66, 0x61, + 0x4a, 0x73, 0xd1, 0x7d, 0x2e, 0x25, 0x9f, 0x83, + 0x73, 0x1f, 0x5f, 0x17, 0x77, 0x17, 0x12, 0xe8, + 0xc6, 0xff, 0x00, 0x9c, 0x78, 0x4a, 0x63, 0x7f, + 0xce, 0x3c, 0x28, 0x34, 0x37, 0x62, 0xef, 0x6b, + 0xe3, 0xdc, 0x44, 0xd6, 0xee, 0x90, 0x1c, 0x7b, + 0xda, 0x14, 0x95, 0x9e, 0x5f, 0x96, 0x64, 0xc0, + 0xc8, 0x1d, 0xed, 0x17, 0x54, 0xa0, 0x71, 0xf9, + 0x06, 0xe2, 0xe4, 0xc6, 0xf3, 0xf9, 0xc7, 0x85, + 0x61, 0x07, 0xb9, 0xe6, 0x92, 0x79, 0x4c, 0x92, + 0x79, 0x47, 0x73, 0x79, 0x78, 0x44, 0x40, 0x44, + 0x44, 0x05, 0xea, 0x2f, 0xda, 0xb3, 0xce, 0x6f, + 0x84, 0x2f, 0x2b, 0xdc, 0x3f, 0xb6, 0x8f, 0xce, + 0x6f, 0x85, 0x07, 0x1e, 0xd9, 0x7f, 0x33, 0x8f, + 0xec, 0x47, 0xd6, 0x72, 0x81, 0x57, 0x6c, 0xe6, + 0x0c, 0x86, 0x5b, 0xa6, 0xbb, 0x32, 0x94, 0x47, + 0x30, 0x60, 0x0d, 0x18, 0x88, 0xf1, 0x6a, 0x77, + 0x97, 0x07, 0xb1, 0xec, 0x77, 0x48, 0xfa, 0x6e, + 0xe2, 0x41, 0x58, 0x45, 0x67, 0xf6, 0x3d, 0x8e, + 0xe9, 0x1f, 0x4d, 0xdc, 0x49, 0xec, 0x7b, 0x1d, + 0xd2, 0x3e, 0x9b, 0xb8, 0x90, 0x56, 0x11, 0x59, + 0xfd, 0x8f, 0x63, 0xba, 0x47, 0xd3, 0x77, 0x12, + 0x7b, 0x1e, 0xc7, 0x74, 0x8f, 0xa6, 0xee, 0x24, + 0x15, 0x84, 0x56, 0x7f, 0x63, 0xd8, 0xee, 0x91, + 0xf4, 0xdd, 0xc4, 0x9e, 0xc7, 0xb1, 0xdd, 0x23, + 0xe9, 0xbb, 0x89, 0x05, 0x61, 0x15, 0x9f, 0xd8, + 0xf6, 0x3b, 0xa4, 0x7d, 0x37, 0x71, 0x27, 0xb1, + 0xec, 0x77, 0x48, 0xfa, 0x6e, 0xe2, 0x41, 0x58, + 0x45, 0x67, 0xf6, 0x3d, 0x8e, 0xe9, 0x1f, 0x4d, + 0xdc, 0x49, 0xec, 0x7b, 0x1d, 0xd2, 0x3e, 0x9b, + 0xb8, 0x90, 0x56, 0x11, 0x59, 0xfd, 0x8f, 0x63, + 0xba, 0x47, 0xd3, 0x77, 0x12, 0x7b, 0x1e, 0xc7, + 0x74, 0x8f, 0xa6, 0xee, 0x24, 0x15, 0x84, 0xdd, + 0xae, 0xea, 0xb3, 0xfb, 0x1e, 0xc7, 0x74, 0x8f, + 0xa6, 0xee, 0x24, 0xf6, 0x3d, 0x8e, 0xe9, 0x1f, + 0x4d, 0xdc, 0x48, 0x2b, 0x09, 0xa2, 0xb5, 0xdd, + 0x56, 0x7f, 0x63, 0xd8, 0xee, 0x91, 0xf4, 0xdd, + 0xc4, 0x9e, 0xc7, 0xb1, 0xdd, 0x23, 0xe9, 0xbb, + 0x89, 0x05, 0x61, 0x3b, 0x3b, 0xaa, 0xcf, 0xec, + 0x7b, 0x1d, 0xd2, 0x3e, 0x9b, 0xb8, 0x93, 0xd8, + 0xf6, 0x3b, 0xa4, 0x7d, 0x37, 0x71, 0x20, 0xac, + 0xb5, 0xce, 0x69, 0xc4, 0xd2, 0x43, 0xb4, 0xe9, + 0x07, 0x4e, 0x9d, 0x0b, 0x0a, 0xcf, 0xec, 0x7b, + 0x1d, 0xd2, 0x3e, 0x9b, 0xb8, 0x93, 0xd8, 0xf6, + 0x3b, 0xa4, 0x7d, 0x37, 0x71, 0x20, 0xac, 0x6b, + 0x35, 0x3a, 0x4f, 0x65, 0x15, 0x9f, 0xd8, 0xf6, + 0x3b, 0xa4, 0x7d, 0x37, 0x71, 0x27, 0xb1, 0xec, + 0x77, 0x48, 0xfa, 0x6e, 0xe2, 0x41, 0x58, 0x3a, + 0x75, 0xe9, 0xed, 0xa5, 0x06, 0xf6, 0xad, 0x4a, + 0xcf, 0xec, 0x7b, 0x1d, 0xd2, 0x3e, 0x9b, 0xb8, + 0x93, 0xd8, 0xf6, 0x3b, 0xa4, 0x7d, 0x37, 0x71, + 0x20, 0xac, 0x77, 0xe9, 0xa0, 0x55, 0x15, 0x9f, + 0xd8, 0xf6, 0x3b, 0xa4, 0x7d, 0x37, 0x71, 0x27, + 0xb1, 0xec, 0x77, 0x48, 0xfa, 0x6e, 0xe2, 0x41, + 0x58, 0xdc, 0xa1, 0xd4, 0x35, 0x04, 0x3a, 0x75, + 0xe9, 0xed, 0xe9, 0x56, 0x7f, 0x63, 0xd8, 0xee, + 0x91, 0xf4, 0xdd, 0xc4, 0x9e, 0xc7, 0xb1, 0xdd, + 0x23, 0xe9, 0xbb, 0x89, 0x05, 0x61, 0x15, 0x9f, + 0xd8, 0xf6, 0x3b, 0xa4, 0x7d, 0x37, 0x71, 0x27, + 0xb1, 0xec, 0x77, 0x48, 0xfa, 0x6e, 0xe2, 0x41, + 0x58, 0x45, 0x67, 0xf6, 0x3d, 0x8e, 0xe9, 0x1f, + 0x4d, 0xdc, 0x49, 0xec, 0x7b, 0x1d, 0xd2, 0x3e, + 0x9b, 0xb8, 0x90, 0x56, 0x11, 0x59, 0xfd, 0x8f, + 0x63, 0xba, 0x47, 0xd3, 0x77, 0x12, 0x7b, 0x1e, + 0xc7, 0x74, 0x8f, 0xa6, 0xee, 0x24, 0x15, 0x84, + 0x56, 0x7f, 0x63, 0xd8, 0xee, 0x91, 0xf4, 0xdd, + 0xc4, 0x9e, 0xc7, 0xb1, 0xdd, 0x23, 0xe9, 0xbb, + 0x89, 0x05, 0x61, 0x15, 0x9f, 0xd8, 0xf6, 0x3b, + 0xa4, 0x7d, 0x37, 0x71, 0x27, 0xb1, 0xec, 0x77, + 0x48, 0xfa, 0x6e, 0xe2, 0x41, 0x58, 0x45, 0x67, + 0xf6, 0x3d, 0x8e, 0xe9, 0x1f, 0x4d, 0xdc, 0x49, + 0xec, 0x7b, 0x1d, 0xd2, 0x3e, 0x9b, 0xb8, 0x90, + 0x56, 0x11, 0x59, 0xfd, 0x8f, 0x63, 0xba, 0x47, + 0xd3, 0x77, 0x12, 0x7b, 0x1e, 0xc7, 0x74, 0x8f, + 0xa6, 0xee, 0x24, 0x15, 0x85, 0x29, 0xb3, 0x5f, + 0xce, 0xed, 0xbf, 0xb5, 0xf5, 0x0a, 0x93, 0xf6, + 0x3d, 0x8e, 0xe9, 0x1f, 0x4d, 0xdc, 0x4b, 0xab, + 0x2d, 0xb7, 0xd9, 0xa6, 0x5f, 0x46, 0xeb, 0x19, + 0xb1, 0xdc, 0x82, 0x70, 0x37, 0x13, 0x8e, 0xb1, + 0x43, 0xb9, 0xbc, 0x83, 0xce, 0x61, 0xef, 0xb3, + 0x79, 0xdf, 0x20, 0x5c, 0xeb, 0xa3, 0x30, 0xf7, + 0xd9, 0xbc, 0xef, 0x90, 0x2e, 0x74, 0x04, 0x44, + 0x40, 0xda, 0xd1, 0xff, 0x00, 0x61, 0x63, 0xfd, + 0xaf, 0xaa, 0x15, 0x61, 0x59, 0xf6, 0xb3, 0xdc, + 0x2c, 0x7f, 0xb5, 0xf5, 0x42, 0xac, 0x20, 0x22, + 0x22, 0x02, 0x68, 0xe3, 0x44, 0x41, 0xd5, 0x06, + 0x5b, 0x3c, 0xf6, 0x13, 0xdf, 0x30, 0xb4, 0x47, + 0x6f, 0xa1, 0xe0, 0xeb, 0xae, 0x83, 0xf2, 0xae, + 0x5d, 0x1b, 0xda, 0x37, 0x14, 0xee, 0x59, 0xfe, + 0x99, 0xcc, 0xfc, 0xe1, 0xe0, 0x6a, 0x82, 0x41, + 0x27, 0x65, 0x90, 0xdc, 0x5e, 0x5a, 0x0b, 0xb6, + 0xcd, 0x14, 0x51, 0x12, 0x5b, 0x59, 0x0d, 0x34, + 0x83, 0x45, 0x9b, 0xad, 0x9d, 0xbf, 0x82, 0x17, + 0x4e, 0xc3, 0x1d, 0xc4, 0x4c, 0x15, 0x7b, 0xa2, + 0x75, 0x68, 0x17, 0x49, 0xff, 0x00, 0x47, 0x0f, + 0xb7, 0xfe, 0xf1, 0x5a, 0xb6, 0x5a, 0xe5, 0xf1, + 0x66, 0xac, 0x86, 0xbf, 0xaa, 0x9c, 0x39, 0x8f, + 0x61, 0xd5, 0x5a, 0x62, 0x69, 0xa2, 0x08, 0xa8, + 0x61, 0x96, 0xe2, 0x56, 0x43, 0x0b, 0x71, 0x49, + 0x21, 0xa0, 0x01, 0x4b, 0xfc, 0x31, 0x26, 0x21, + 0x11, 0xbc, 0xb7, 0x17, 0x1e, 0xa3, 0x16, 0x9a, + 0xef, 0x2e, 0xbc, 0x96, 0xd6, 0x38, 0x33, 0xac, + 0xc5, 0xe0, 0x54, 0x5a, 0x87, 0xe0, 0xec, 0x12, + 0x6b, 0xf2, 0x2a, 0xe3, 0xa7, 0x91, 0xd2, 0x9b, + 0x92, 0x69, 0x21, 0x3c, 0xe6, 0x23, 0xae, 0xb5, + 0xd1, 0xa5, 0x07, 0xab, 0x8b, 0x79, 0x6d, 0xa6, + 0x74, 0x13, 0x33, 0x0c, 0xac, 0x34, 0x73, 0x7e, + 0x50, 0xb7, 0xe5, 0xf9, 0x64, 0xd7, 0xed, 0x94, + 0xc2, 0xe6, 0x56, 0x06, 0xe3, 0x2d, 0x3a, 0xc8, + 0xdd, 0x52, 0x7b, 0x56, 0xc0, 0xe9, 0x2c, 0xee, + 0xc0, 0xa3, 0xa7, 0x88, 0x62, 0xec, 0x96, 0xe9, + 0xaf, 0xd2, 0x5c, 0xfb, 0x2f, 0x38, 0x8b, 0x36, + 0x63, 0x1d, 0xe4, 0x4e, 0xd7, 0x46, 0xee, 0xe8, + 0xa8, 0xef, 0x84, 0x11, 0x1a, 0xf4, 0x01, 0xa4, + 0xe8, 0x1c, 0x34, 0x5d, 0x99, 0x8e, 0x5b, 0x2e, + 0x5e, 0xf8, 0xe3, 0x99, 0xcc, 0x2f, 0x95, 0xb8, + 0xc3, 0x46, 0xe0, 0x3f, 0xfc, 0x2d, 0xb0, 0xd8, + 0x9e, 0xbd, 0x6d, 0x91, 0x1a, 0xa7, 0x20, 0xf6, + 0x00, 0x71, 0x3e, 0x00, 0xa4, 0xae, 0xed, 0x46, + 0x71, 0x9f, 0x5c, 0x87, 0x3f, 0x9b, 0xb7, 0xb5, + 0x14, 0x95, 0xe3, 0xe6, 0xb3, 0x58, 0x08, 0x2b, + 0xbd, 0xc5, 0xd5, 0x6f, 0x96, 0xcd, 0x71, 0x67, + 0x71, 0x78, 0xc7, 0x34, 0x47, 0x6a, 0x2a, 0xf6, + 0x9f, 0x28, 0xe8, 0xdc, 0x52, 0x70, 0xe5, 0xd9, + 0x2e, 0x64, 0x24, 0x8b, 0x2e, 0x74, 0xac, 0xb8, + 0x8d, 0xa5, 0xcc, 0xe7, 0x28, 0x5a, 0xfa, 0x2c, + 0x65, 0x40, 0x8c, 0x83, 0x37, 0x14, 0xa3, 0x80, + 0x03, 0xba, 0x01, 0x41, 0x16, 0xcb, 0x0b, 0x89, + 0x2c, 0xa4, 0xbd, 0x6b, 0x5b, 0xcc, 0x44, 0xe0, + 0xd7, 0xba, 0xba, 0x6a, 0x69, 0xf9, 0xbd, 0xd5, + 0xce, 0xad, 0x36, 0xa3, 0x26, 0xf8, 0x7a, 0x70, + 0x24, 0x9b, 0xd9, 0x79, 0xc0, 0x66, 0x24, 0x78, + 0xc1, 0xf4, 0x66, 0x86, 0x8a, 0x6a, 0xd4, 0xa3, + 0xad, 0x72, 0xcc, 0xb7, 0xd9, 0x67, 0xcc, 0xae, + 0x5f, 0x21, 0xb2, 0x6c, 0x98, 0x20, 0x60, 0xa0, + 0x7b, 0x85, 0x74, 0x55, 0x04, 0x3a, 0x29, 0x8b, + 0xbc, 0xbf, 0x2d, 0x9b, 0x2c, 0x7e, 0x65, 0x96, + 0xba, 0x46, 0xb6, 0x17, 0x61, 0x96, 0x39, 0x68, + 0x4e, 0xba, 0x68, 0x58, 0xb1, 0xcb, 0xb2, 0xf6, + 0x58, 0x75, 0x96, 0x66, 0xf7, 0x88, 0x9c, 0xec, + 0x11, 0x45, 0x1f, 0x94, 0x69, 0xbb, 0xd9, 0x41, + 0x10, 0x8a, 0x6e, 0xe3, 0x28, 0xcb, 0xba, 0xaa, + 0x5c, 0xca, 0xd2, 0x59, 0x1c, 0xc0, 0x47, 0x36, + 0xd7, 0xd0, 0x16, 0x8a, 0xf8, 0xcd, 0x78, 0xdf, + 0x0b, 0x5c, 0x19, 0x76, 0x5d, 0x6d, 0x97, 0xb2, + 0xff, 0x00, 0x33, 0x74, 0x84, 0x4e, 0x69, 0x04, + 0x11, 0xf9, 0x44, 0x6f, 0x92, 0x42, 0x08, 0x84, + 0x34, 0x02, 0xaa, 0x53, 0x34, 0xcb, 0x2d, 0x62, + 0xb5, 0x86, 0xfe, 0xc1, 0xee, 0x7d, 0xac, 0xe4, + 0xb6, 0x8e, 0xd2, 0x5a, 0x46, 0xf9, 0x51, 0x4e, + 0xf2, 0x4f, 0x69, 0x04, 0xd9, 0xd9, 0x6b, 0x96, + 0x86, 0xb9, 0xf7, 0x36, 0xec, 0x0f, 0x01, 0xc0, + 0x3d, 0xc5, 0xa6, 0x87, 0xb6, 0xb9, 0x33, 0x0c, + 0x96, 0xf3, 0x2f, 0x63, 0x65, 0x94, 0x36, 0x48, + 0x5d, 0xa0, 0x4b, 0x19, 0xa8, 0xa9, 0x5d, 0xfb, + 0x5a, 0x2b, 0x2d, 0x98, 0x03, 0xfe, 0x08, 0xf0, + 0xaf, 0x70, 0x73, 0xb1, 0x6c, 0x9d, 0xcf, 0xb5, + 0x82, 0xd1, 0x23, 0xe9, 0x03, 0x5d, 0xd9, 0x0d, + 0xa5, 0x2a, 0x82, 0xbc, 0x8a, 0x5e, 0xdb, 0x2d, + 0xb0, 0x82, 0xc1, 0x97, 0xf9, 0x9b, 0xa4, 0x22, + 0x73, 0x86, 0x08, 0x62, 0xa0, 0x71, 0x03, 0x77, + 0x4a, 0xf1, 0x99, 0xe5, 0xb6, 0xb1, 0x5a, 0x43, + 0x98, 0xd8, 0x3d, 0xce, 0xb5, 0x9b, 0xc5, 0x2c, + 0x7e, 0x97, 0x35, 0xda, 0xf4, 0xa0, 0x8b, 0x45, + 0x38, 0xec, 0xb3, 0x27, 0xcb, 0xed, 0xe1, 0xeb, + 0x59, 0x25, 0x37, 0x13, 0xb7, 0x16, 0x18, 0xbf, + 0x35, 0xa7, 0x7f, 0xb4, 0xb5, 0x66, 0xb9, 0x35, + 0xb5, 0x95, 0xbd, 0xa3, 0xe2, 0x95, 0xd2, 0x1b, + 0x97, 0x50, 0xbc, 0x52, 0x85, 0xa7, 0xc9, 0x23, + 0x46, 0xf2, 0x08, 0x85, 0xea, 0x38, 0xcc, 0x92, + 0xb2, 0x31, 0x40, 0xe9, 0x1c, 0x18, 0x2b, 0xab, + 0xc6, 0xa0, 0x1d, 0xf5, 0xdd, 0x9e, 0x58, 0x43, + 0x97, 0x5e, 0x88, 0x61, 0x2e, 0x73, 0x30, 0x35, + 0xf5, 0x76, 0xba, 0x9a, 0xe8, 0x5b, 0xae, 0xb2, + 0xe8, 0x2c, 0xa4, 0xca, 0xdf, 0x13, 0x9c, 0x4d, + 0xd6, 0x09, 0x24, 0x0e, 0xd3, 0x42, 0x1c, 0xc3, + 0xa3, 0x85, 0x07, 0x0e, 0x61, 0x63, 0x2d, 0x85, + 0xd3, 0xad, 0xa5, 0x2d, 0x73, 0xda, 0x01, 0xab, + 0x75, 0x50, 0xae, 0x75, 0x60, 0xcd, 0xec, 0x5d, + 0x7f, 0xb4, 0xe6, 0xd5, 0xa7, 0x08, 0x78, 0x6e, + 0x37, 0x0d, 0xc6, 0x86, 0xd4, 0x9e, 0xda, 0xc4, + 0x76, 0x3b, 0x3b, 0x3d, 0xe7, 0x57, 0xc6, 0xe9, + 0xdb, 0x3d, 0x4b, 0x1b, 0x29, 0x20, 0xb4, 0xb8, + 0x76, 0x28, 0x82, 0x1a, 0xd2, 0xd6, 0x6b, 0xbb, + 0x86, 0xdb, 0xc0, 0x03, 0xa4, 0x7d, 0x70, 0x82, + 0x68, 0x34, 0x69, 0xd6, 0xbc, 0x4d, 0x13, 0xa1, + 0x95, 0xf1, 0x3c, 0x00, 0xf8, 0xdc, 0x5a, 0xe0, + 0x37, 0xc1, 0x23, 0xe4, 0x53, 0x99, 0x05, 0xbd, + 0x9d, 0xbe, 0x6e, 0x61, 0x99, 0xef, 0x37, 0x90, + 0xbd, 0xcc, 0x8f, 0x08, 0x18, 0x08, 0x03, 0x59, + 0xee, 0x2d, 0x77, 0x76, 0x16, 0x77, 0xf9, 0xc7, + 0xb2, 0xd8, 0xbe, 0x41, 0x33, 0xe4, 0x90, 0xdc, + 0xba, 0x41, 0xe2, 0xb6, 0x8e, 0xab, 0xb0, 0xef, + 0xee, 0xa0, 0x84, 0x45, 0x3d, 0x1e, 0x5f, 0xb3, + 0xd7, 0x17, 0x27, 0x2e, 0x86, 0x49, 0x9b, 0x71, + 0xa4, 0x32, 0x67, 0x10, 0x5a, 0xe7, 0x0d, 0xc5, + 0xa3, 0x2c, 0xc9, 0x05, 0xd5, 0xe5, 0xdd, 0x9d, + 0xc3, 0x8b, 0x24, 0xb7, 0x61, 0xc2, 0x5a, 0x69, + 0x57, 0x56, 0x80, 0x9a, 0x83, 0xa1, 0x04, 0x42, + 0x29, 0x0c, 0xc6, 0x2c, 0xa2, 0x18, 0x99, 0x1d, + 0x9c, 0xaf, 0x9a, 0xe1, 0xae, 0xfd, 0x73, 0xc8, + 0xfd, 0x59, 0x14, 0xd3, 0x87, 0x46, 0xfa, 0x8f, + 0xef, 0x20, 0x22, 0x22, 0x02, 0xdd, 0x67, 0xef, + 0x70, 0x7d, 0xab, 0x3e, 0xb2, 0xd2, 0xb7, 0x5a, + 0x7b, 0xdc, 0x1f, 0x6a, 0xcf, 0xac, 0x82, 0xe1, + 0x9d, 0x7b, 0xd3, 0x7c, 0xc1, 0xe1, 0x2b, 0x81, + 0x77, 0xe7, 0x5e, 0xf4, 0xdf, 0x30, 0x78, 0x4a, + 0xe0, 0x41, 0x98, 0xff, 0x00, 0x68, 0xde, 0xda, + 0x95, 0x23, 0x4a, 0x8a, 0x8f, 0xf6, 0x8d, 0xed, + 0xa9, 0x62, 0x83, 0x14, 0x5c, 0x19, 0x81, 0xff, + 0x00, 0xba, 0xb4, 0xfb, 0x4f, 0x94, 0x2e, 0xf5, + 0xc1, 0x98, 0x7b, 0xd5, 0xa7, 0xda, 0x7c, 0xa1, + 0x03, 0x2f, 0xf7, 0x9b, 0xbf, 0x3c, 0xfd, 0x62, + 0xbb, 0xd7, 0x06, 0x5f, 0xef, 0x37, 0x7e, 0x79, + 0xfa, 0xc5, 0x77, 0xa0, 0x3b, 0x51, 0x51, 0x27, + 0x59, 0x52, 0xce, 0xd4, 0x54, 0x49, 0xd6, 0x50, + 0x11, 0x17, 0xb8, 0x61, 0x7c, 0xf2, 0xb6, 0x36, + 0x6b, 0x3b, 0xbb, 0x80, 0x20, 0xf2, 0xc6, 0x39, + 0xef, 0x0d, 0x60, 0x25, 0xe7, 0x53, 0x46, 0xea, + 0xec, 0x8f, 0x29, 0xba, 0x70, 0xab, 0x8b, 0x59, + 0xdb, 0x35, 0x5e, 0xae, 0xaf, 0x6d, 0xb2, 0xa6, + 0x73, 0x16, 0xed, 0x0f, 0xb8, 0x22, 0xae, 0x27, + 0x73, 0xb2, 0x54, 0x34, 0xf9, 0x8d, 0xdc, 0xe6, + 0xb2, 0x4a, 0xe2, 0x3e, 0x68, 0xd0, 0x3b, 0xcb, + 0xad, 0x30, 0x5e, 0xfc, 0x67, 0x84, 0x32, 0xe6, + 0xf3, 0x98, 0xf1, 0xce, 0x91, 0x1b, 0xff, 0x00, + 0xc9, 0x35, 0xd4, 0xd2, 0x7a, 0xe6, 0xf0, 0x1e, + 0x35, 0x9e, 0xa4, 0x97, 0xd7, 0x37, 0x80, 0xf1, + 0xaa, 0xef, 0x38, 0xed, 0xf3, 0xc2, 0x78, 0xd6, + 0x79, 0xc7, 0x6f, 0x9e, 0x13, 0xc6, 0xaf, 0xe9, + 0x67, 0xab, 0x47, 0x1f, 0xea, 0x31, 0xf9, 0x6b, + 0x0f, 0x52, 0x4b, 0xeb, 0x9b, 0xc0, 0x78, 0xd3, + 0xa9, 0x25, 0xf5, 0xcd, 0xe0, 0x3c, 0x6a, 0xbd, + 0xce, 0x3b, 0x7c, 0xf0, 0x9e, 0x34, 0xe7, 0x1d, + 0xbe, 0x78, 0x4f, 0x1a, 0x7a, 0x59, 0xeb, 0x3f, + 0xa9, 0x57, 0xf2, 0xd6, 0x1e, 0xa4, 0x97, 0xd7, + 0x37, 0x80, 0xf1, 0xa7, 0x52, 0x4b, 0xeb, 0x9b, + 0xc0, 0x78, 0xd5, 0x7b, 0x9c, 0x76, 0xf9, 0xe1, + 0x3c, 0x69, 0xce, 0x3b, 0x7c, 0xf0, 0x9e, 0x34, + 0xf4, 0xb3, 0xd6, 0x7f, 0x52, 0xaf, 0xe5, 0xac, + 0x3d, 0x49, 0x2f, 0xae, 0x6f, 0x01, 0xe3, 0x4e, + 0xa4, 0x97, 0xd7, 0x37, 0x80, 0xf1, 0xaa, 0xef, + 0x38, 0xed, 0xf3, 0xc2, 0x78, 0xd3, 0x9c, 0x76, + 0xf9, 0xe1, 0x3c, 0x69, 0xe9, 0x67, 0xac, 0xfe, + 0xa7, 0x5e, 0x85, 0x8b, 0xa9, 0x25, 0xf5, 0xcd, + 0xe0, 0x3c, 0x69, 0xd4, 0x92, 0xfa, 0xe6, 0xf0, + 0x1e, 0x35, 0x5e, 0xe7, 0x1d, 0xbe, 0x78, 0x4f, + 0x1a, 0x73, 0x8e, 0xdf, 0x3c, 0x27, 0x8d, 0x3d, + 0x2c, 0xf5, 0x9f, 0xd4, 0xab, 0xf9, 0x6b, 0x0f, + 0x52, 0x4b, 0xeb, 0x9b, 0xc0, 0x78, 0xd3, 0xa9, + 0x25, 0xf5, 0xcd, 0xe0, 0x3c, 0x6a, 0xbd, 0xce, + 0x3b, 0x7c, 0xf0, 0x9e, 0x34, 0xe7, 0x1d, 0xbe, + 0x78, 0x4f, 0x1a, 0x7a, 0x59, 0xeb, 0x3f, 0xa9, + 0x57, 0xf2, 0xd6, 0x1e, 0xa4, 0x97, 0xd7, 0x37, + 0x80, 0xf1, 0xa7, 0x52, 0x4b, 0xeb, 0x9b, 0xc0, + 0x78, 0xd5, 0x7b, 0x9c, 0x76, 0xf9, 0xe1, 0x3c, + 0x69, 0xce, 0x3b, 0x7c, 0xf0, 0x9e, 0x34, 0xf4, + 0xb3, 0xd6, 0x7f, 0x52, 0xaf, 0xe5, 0xac, 0x3d, + 0x49, 0x2f, 0xae, 0x6f, 0x01, 0xe3, 0x4e, 0xa4, + 0x97, 0xd7, 0x37, 0x80, 0xf1, 0xaa, 0xf7, 0x38, + 0xed, 0xf3, 0xc2, 0x78, 0xd6, 0x39, 0xc7, 0x6f, + 0x9e, 0x13, 0xc6, 0x9e, 0x96, 0x7a, 0xcf, 0xea, + 0x55, 0xfc, 0xb5, 0x8b, 0xa9, 0x25, 0xf5, 0xcd, + 0xe0, 0x3c, 0x69, 0xd4, 0x92, 0xfa, 0xe6, 0xf0, + 0x1e, 0x35, 0x5d, 0xe7, 0x1d, 0xbe, 0x78, 0x4f, + 0x1a, 0x73, 0x8e, 0xdf, 0x3c, 0x27, 0x8d, 0x3d, + 0x2c, 0xf5, 0x9f, 0xd4, 0xeb, 0xd0, 0xb1, 0x75, + 0x24, 0xbe, 0xb9, 0xbc, 0x07, 0x8d, 0x3a, 0x92, + 0x5f, 0x5c, 0xde, 0x03, 0xc6, 0xab, 0xbc, 0xe3, + 0xb7, 0xcf, 0x09, 0xe3, 0x59, 0xe7, 0x1d, 0xbe, + 0x78, 0x4f, 0x1a, 0x7a, 0x59, 0xeb, 0x3f, 0xa9, + 0x57, 0xf2, 0xd6, 0x1e, 0xa4, 0x97, 0xd7, 0x37, + 0x80, 0xf1, 0xa7, 0x52, 0x4b, 0xeb, 0x9b, 0xc0, + 0x78, 0xd5, 0x7b, 0x9c, 0x76, 0xf9, 0xe1, 0x3c, + 0x69, 0xce, 0x3b, 0x7c, 0xf0, 0x9e, 0x34, 0xf4, + 0xb3, 0xd6, 0x7f, 0x52, 0xaf, 0xe5, 0xac, 0x3d, + 0x49, 0x2f, 0xae, 0x6f, 0x01, 0xe3, 0x4e, 0xa4, + 0x97, 0xd7, 0x37, 0x80, 0xf1, 0xaa, 0xf7, 0x38, + 0xed, 0xf3, 0xc2, 0x78, 0xd3, 0x9c, 0x76, 0xf9, + 0xe1, 0x3c, 0x69, 0xe9, 0x67, 0xac, 0xfe, 0xa5, + 0x5f, 0xcb, 0x58, 0x7a, 0x92, 0x5f, 0x5c, 0xde, + 0x03, 0xc6, 0x9d, 0x49, 0x2f, 0xae, 0x6f, 0x01, + 0xe3, 0x55, 0xee, 0x71, 0xdb, 0xe7, 0x84, 0xf1, + 0xa7, 0x38, 0xed, 0xf3, 0xc2, 0x78, 0xd3, 0xd2, + 0xcf, 0x59, 0xfd, 0x4a, 0xbf, 0x96, 0xb0, 0xf5, + 0x24, 0xbe, 0xb9, 0xbc, 0x07, 0x8d, 0x3a, 0x92, + 0x5f, 0x5c, 0xde, 0x03, 0xc6, 0xab, 0xdc, 0xe3, + 0xb7, 0xcf, 0x09, 0xe3, 0x4e, 0x71, 0xdb, 0xe7, + 0x84, 0xf1, 0xa7, 0xa5, 0x9e, 0xb3, 0xfa, 0x95, + 0x7f, 0x2d, 0x61, 0xea, 0x49, 0x7d, 0x73, 0x78, + 0x0f, 0x1a, 0x75, 0x24, 0xbe, 0xb9, 0xbc, 0x07, + 0x8d, 0x57, 0xb9, 0xc7, 0x6f, 0x9e, 0x13, 0xc6, + 0x9c, 0xe3, 0xb7, 0xcf, 0x09, 0xe3, 0x4f, 0x4b, + 0x3d, 0x67, 0xf5, 0x2a, 0xfe, 0x5a, 0xc3, 0xd4, + 0x92, 0xfa, 0xe6, 0xf0, 0x1e, 0x34, 0xea, 0x49, + 0x7d, 0x73, 0x78, 0x0f, 0x1a, 0xaf, 0x73, 0x8e, + 0xdf, 0x3c, 0x27, 0x8d, 0x63, 0x9c, 0x76, 0xf9, + 0xe1, 0x3c, 0x69, 0xe9, 0x67, 0xac, 0xfe, 0xa5, + 0x1f, 0x96, 0xb1, 0x75, 0x24, 0xbe, 0xb9, 0xbc, + 0x07, 0x8d, 0x3a, 0x92, 0x5f, 0x5c, 0xde, 0x03, + 0xc6, 0xab, 0xbc, 0xe3, 0xb7, 0xcf, 0x09, 0xe3, + 0x59, 0xe7, 0x1d, 0xbe, 0x78, 0x4f, 0x1a, 0x7a, + 0x59, 0xeb, 0x3f, 0xa9, 0x57, 0xf2, 0xd6, 0x1e, + 0xa4, 0x97, 0xd7, 0x37, 0x80, 0xf1, 0xa7, 0x52, + 0x4b, 0xeb, 0x9b, 0xc0, 0x78, 0xd5, 0x7b, 0x9c, + 0x76, 0xf9, 0xe1, 0x3c, 0x69, 0xce, 0x3b, 0x7c, + 0xf0, 0x9e, 0x34, 0xf4, 0xb3, 0xd6, 0x7f, 0x52, + 0xaf, 0xe5, 0xac, 0x3d, 0x49, 0x2f, 0xae, 0x6f, + 0x01, 0xe3, 0x4e, 0xa4, 0x97, 0xd7, 0x37, 0x80, + 0xf1, 0xaa, 0xf7, 0x38, 0xed, 0xf3, 0xc2, 0x78, + 0xd3, 0x9c, 0x76, 0xf9, 0xe1, 0x3c, 0x69, 0xe9, + 0x67, 0xac, 0xfe, 0xa5, 0x5f, 0xcb, 0x58, 0x7a, + 0x92, 0x5f, 0x5c, 0xde, 0x03, 0xc6, 0x9d, 0x49, + 0x2f, 0xae, 0x6f, 0x01, 0xe3, 0x55, 0xee, 0x71, + 0xdb, 0xe7, 0x84, 0xf1, 0xa7, 0x38, 0xed, 0xf3, + 0xc2, 0x78, 0xd3, 0xd2, 0xcf, 0x59, 0xfd, 0x4a, + 0xbf, 0x96, 0xb0, 0xf5, 0x24, 0xbe, 0xb9, 0xbc, + 0x07, 0x8d, 0x3a, 0x92, 0x5f, 0x5c, 0xde, 0x03, + 0xc6, 0xab, 0xdc, 0xe3, 0xb7, 0xcf, 0x09, 0xe3, + 0x4e, 0x71, 0xdb, 0xe7, 0x84, 0xf1, 0xa7, 0xa5, + 0x9e, 0xb3, 0xfa, 0x95, 0x7f, 0x2d, 0x61, 0xea, + 0x59, 0x47, 0xfc, 0x66, 0xf0, 0x15, 0xa6, 0x5c, + 0xae, 0xe9, 0x95, 0x70, 0x01, 0xe0, 0x7c, 0xd2, + 0xa1, 0x04, 0x8e, 0x1b, 0xa4, 0x7e, 0x5d, 0xb5, + 0xd5, 0x6f, 0x9b, 0x5e, 0xdb, 0x9a, 0xb6, 0x42, + 0xf0, 0x3f, 0x31, 0xd5, 0x20, 0xf1, 0x24, 0xf9, + 0x6b, 0x7b, 0x2d, 0xaa, 0x63, 0xf9, 0x8d, 0x26, + 0x62, 0x2d, 0x4e, 0x0d, 0xc4, 0x10, 0x48, 0x3a, + 0x08, 0xd6, 0x11, 0x48, 0xc7, 0x25, 0xae, 0x6d, + 0x09, 0x73, 0x3f, 0x57, 0x72, 0xcd, 0x63, 0xb3, + 0xc4, 0xa3, 0xde, 0xd7, 0x31, 0xc5, 0xae, 0x14, + 0x73, 0x75, 0x85, 0xc2, 0xd1, 0x31, 0x3a, 0x4b, + 0x6d, 0x6d, 0x5b, 0x46, 0xea, 0xce, 0xb5, 0x61, + 0x11, 0x14, 0x2c, 0x2f, 0x51, 0x7e, 0xd5, 0x9e, + 0x73, 0x7c, 0x21, 0x79, 0x5e, 0xa2, 0xfd, 0xab, + 0x3c, 0xe6, 0xf8, 0x42, 0x0e, 0x6d, 0xb0, 0xfe, + 0x65, 0x1f, 0xd8, 0x8f, 0xac, 0xe5, 0x04, 0xa7, + 0x76, 0xc3, 0xf9, 0x94, 0x7f, 0x62, 0x3e, 0xb3, + 0x94, 0x12, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x2e, + 0x9c, 0xbe, 0xc2, 0x7b, 0xf9, 0x4c, 0x70, 0xd0, + 0x61, 0x69, 0x7b, 0x9c, 0xed, 0x40, 0x0d, 0xce, + 0xea, 0xe6, 0x22, 0x80, 0xef, 0x0a, 0xf7, 0xb4, + 0xa0, 0x22, 0x93, 0x83, 0x67, 0xaf, 0x26, 0x85, + 0xb2, 0xcb, 0x24, 0x56, 0xed, 0x90, 0x56, 0x36, + 0xca, 0xea, 0x12, 0x37, 0xd7, 0x1d, 0xed, 0x95, + 0xcd, 0x94, 0xe6, 0x0b, 0x91, 0x85, 0xc0, 0x62, + 0x1a, 0x6a, 0x08, 0x3b, 0xa0, 0xa0, 0xd0, 0x88, + 0x88, 0x0b, 0xb2, 0xca, 0x1b, 0x2f, 0x67, 0x9a, + 0xea, 0xec, 0x97, 0xf3, 0x64, 0x32, 0x2b, 0x76, + 0x38, 0x35, 0xcf, 0x73, 0xb7, 0x6b, 0xbc, 0x17, + 0x8c, 0xba, 0xc6, 0x4b, 0xfb, 0xa6, 0xdb, 0x46, + 0xe0, 0xc7, 0xb8, 0x12, 0x1c, 0xea, 0xd3, 0x47, + 0x69, 0x6e, 0xb3, 0xcb, 0xd8, 0x65, 0xb8, 0x7d, + 0xd6, 0x23, 0x6f, 0x66, 0x4b, 0x64, 0xe6, 0xc1, + 0x2e, 0x73, 0x81, 0xf2, 0x1b, 0xdb, 0x41, 0xe3, + 0x32, 0xb6, 0xb7, 0x84, 0x5b, 0x5c, 0x5a, 0x62, + 0x10, 0xdd, 0x46, 0x64, 0x64, 0x6f, 0xd2, 0x5a, + 0x5a, 0x70, 0x9d, 0x2b, 0x8d, 0x74, 0xdf, 0xdc, + 0xcd, 0x73, 0x38, 0x32, 0x45, 0xcd, 0x35, 0xa3, + 0x04, 0x31, 0x00, 0x40, 0x6b, 0x06, 0xe3, 0x6b, + 0xad, 0x77, 0x33, 0x67, 0x8b, 0x22, 0x64, 0x97, + 0xb7, 0x71, 0xda, 0x3e, 0x50, 0x0b, 0x63, 0x75, + 0x6b, 0xa7, 0x7d, 0x04, 0x42, 0x2e, 0xdc, 0xcb, + 0x2a, 0xb8, 0xcb, 0x5e, 0xd1, 0x2d, 0x24, 0x8e, + 0x41, 0x58, 0xe4, 0x66, 0x90, 0x57, 0x12, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x29, 0x2d, 0x9b, 0xfe, 0x73, 0x6f, 0xdb, + 0x77, 0xd4, 0x2a, 0x35, 0x49, 0x6c, 0xdf, 0xf3, + 0x9b, 0x7e, 0xdb, 0xbe, 0xa1, 0x41, 0x35, 0x98, + 0x7b, 0xec, 0xde, 0x77, 0xc8, 0x17, 0x3a, 0xe8, + 0xcc, 0x3d, 0xf6, 0x6f, 0x3b, 0xe4, 0x0b, 0x9d, + 0x01, 0x11, 0x10, 0x36, 0xb3, 0xdc, 0x2c, 0x7f, + 0xb5, 0xf5, 0x42, 0xac, 0x2b, 0x3e, 0xd6, 0x7b, + 0x85, 0x8f, 0xf6, 0xbe, 0xa8, 0x55, 0x84, 0x04, + 0x44, 0x40, 0x44, 0x4e, 0xde, 0xa4, 0x13, 0xb9, + 0x67, 0xfa, 0x67, 0x33, 0xf3, 0x87, 0x81, 0xaa, + 0x09, 0x4c, 0xe4, 0xf9, 0x86, 0x5b, 0x0e, 0x5d, + 0x73, 0x65, 0x7e, 0xe9, 0x00, 0x9d, 0xc0, 0xfe, + 0xad, 0xb5, 0xd1, 0x40, 0x98, 0x36, 0x48, 0x0a, + 0x09, 0x6e, 0xbb, 0x1a, 0x37, 0xbf, 0xb2, 0x83, + 0x61, 0xff, 0x00, 0x47, 0x0f, 0xb7, 0xfe, 0xf1, + 0x5c, 0xbb, 0x35, 0x1b, 0xa4, 0xce, 0x60, 0x0d, + 0xfc, 0xdc, 0x4e, 0x71, 0xec, 0x00, 0xe5, 0xd3, + 0x67, 0x7f, 0x93, 0x1c, 0x9c, 0x65, 0xd7, 0x8f, + 0x95, 0xa0, 0x48, 0xe7, 0x82, 0xc6, 0xd4, 0xd3, + 0x11, 0x2d, 0xd3, 0x4d, 0xe5, 0x96, 0x66, 0xb9, + 0x4e, 0x5b, 0x0c, 0x9d, 0x56, 0xc9, 0x24, 0xb9, + 0x94, 0x16, 0xf3, 0xd2, 0xe8, 0xc2, 0x0a, 0x0e, + 0xcc, 0xaa, 0x56, 0xcb, 0x9b, 0x66, 0xe1, 0x87, + 0xf6, 0xad, 0x79, 0x6f, 0x70, 0xd3, 0xe5, 0x55, + 0x4a, 0x10, 0xd2, 0x0f, 0x94, 0xdd, 0x07, 0xb8, + 0xbb, 0x72, 0xcc, 0xc2, 0x4b, 0x0b, 0xd6, 0xdd, + 0x01, 0x8f, 0xd6, 0x03, 0xba, 0x1d, 0xe5, 0x29, + 0x27, 0x0d, 0x98, 0x74, 0xe6, 0xf0, 0xcd, 0x2d, + 0x0b, 0xb9, 0xc3, 0x6b, 0x87, 0xf3, 0x8e, 0x9a, + 0x76, 0x90, 0x7a, 0xda, 0x8f, 0x16, 0x1c, 0xba, + 0x23, 0xe5, 0x32, 0x1a, 0x9e, 0xe8, 0x68, 0xf9, + 0x14, 0x2d, 0xac, 0xc6, 0xde, 0xea, 0x19, 0xc1, + 0xa1, 0x89, 0xed, 0x75, 0x7b, 0x47, 0x4a, 0xdf, + 0x9a, 0xe6, 0x0e, 0xcc, 0x6f, 0x1d, 0x70, 0x46, + 0x16, 0x00, 0x1b, 0x1b, 0x37, 0x9a, 0x17, 0x19, + 0x15, 0x04, 0x20, 0xb8, 0x7b, 0x33, 0x62, 0xda, + 0x39, 0xaf, 0xf4, 0x73, 0x4d, 0xb7, 0xf6, 0x80, + 0x77, 0x2a, 0x46, 0x05, 0x1d, 0x92, 0x4a, 0x65, + 0xcb, 0xf3, 0x89, 0x7f, 0xe2, 0x48, 0xd0, 0xea, + 0x6e, 0xe9, 0xc6, 0x57, 0xa9, 0xf3, 0xfb, 0x49, + 0x32, 0x43, 0x6c, 0xdc, 0x5e, 0xd8, 0xe8, 0x9b, + 0x0b, 0x8e, 0x1d, 0x14, 0xad, 0x0f, 0x8d, 0xda, + 0x51, 0xd9, 0x2e, 0x64, 0xcb, 0x19, 0xde, 0x2e, + 0x1a, 0x5f, 0x6d, 0x3b, 0x0b, 0x26, 0x03, 0x49, + 0xd3, 0xba, 0x10, 0x6e, 0xd9, 0x4c, 0x5d, 0x73, + 0x05, 0x3e, 0x63, 0xeb, 0xda, 0xc2, 0xbb, 0x6d, + 0xb0, 0xf5, 0x66, 0x7b, 0x87, 0xc9, 0xc6, 0x69, + 0xdf, 0x5a, 0x6d, 0xae, 0xb2, 0x5c, 0xab, 0x9c, + 0xb9, 0xb3, 0x95, 0xf7, 0x57, 0x2e, 0x69, 0x64, + 0x2d, 0x73, 0x70, 0x86, 0x57, 0xb2, 0xb9, 0xac, + 0xb3, 0x28, 0x21, 0xcb, 0x33, 0x0b, 0x79, 0x9c, + 0xe3, 0x3d, 0xd0, 0x18, 0x28, 0x09, 0x15, 0xa6, + 0xfa, 0x0e, 0x8b, 0x3f, 0xf4, 0xad, 0xef, 0xdb, + 0xb7, 0xc1, 0x1a, 0xd3, 0x65, 0x97, 0xc1, 0xd5, + 0x9e, 0xdb, 0x98, 0xcf, 0x24, 0x56, 0x78, 0xf0, + 0xb2, 0x16, 0x69, 0x2e, 0x70, 0x2b, 0xd6, 0x57, + 0x7d, 0x97, 0x0c, 0xb2, 0xe3, 0x2d, 0xbf, 0x73, + 0xd8, 0xc9, 0x9f, 0x8f, 0x1b, 0x05, 0x77, 0xbd, + 0x15, 0xb6, 0x3b, 0xdc, 0xa6, 0xe3, 0x2e, 0x76, + 0x57, 0x71, 0x2b, 0xe1, 0x8e, 0x29, 0x0b, 0xad, + 0xe6, 0xc3, 0x5a, 0x82, 0x49, 0x15, 0x1b, 0xfa, + 0x50, 0x6f, 0x12, 0xd9, 0x49, 0xb3, 0x77, 0xbe, + 0xc5, 0x0b, 0xa1, 0x8d, 0xb2, 0x01, 0x47, 0xbb, + 0x13, 0x9c, 0xef, 0x17, 0x4b, 0x96, 0x8c, 0xd8, + 0x53, 0x67, 0xb2, 0xca, 0x79, 0x14, 0xab, 0xbb, + 0x78, 0x56, 0x63, 0xbf, 0xc9, 0x19, 0x97, 0xdc, + 0x65, 0x8c, 0x74, 0xac, 0x8d, 0xf4, 0x22, 0x77, + 0x37, 0x13, 0x9e, 0xea, 0x6b, 0xa6, 0xe6, 0xa5, + 0xae, 0xd2, 0xf6, 0xd5, 0xd9, 0x4b, 0x6c, 0xb3, + 0x58, 0xa5, 0x6c, 0x0d, 0x78, 0x75, 0xbd, 0xc3, + 0x5a, 0x74, 0x13, 0xb9, 0x53, 0xa2, 0xba, 0xd0, + 0x66, 0xcc, 0xbb, 0xe1, 0x6b, 0xe0, 0x75, 0x09, + 0x87, 0xf7, 0x2a, 0xbb, 0x73, 0x29, 0x32, 0xc8, + 0xb2, 0xec, 0xb0, 0x5e, 0x41, 0x24, 0xc3, 0x9a, + 0x1c, 0xd7, 0x36, 0xe0, 0xda, 0x68, 0x6d, 0x6b, + 0xa4, 0x2d, 0x72, 0x4b, 0x66, 0xed, 0x97, 0xba, + 0x6d, 0xa3, 0x1d, 0x1d, 0xbb, 0x24, 0x0c, 0x69, + 0x79, 0xab, 0x9e, 0x41, 0x6d, 0x5c, 0xee, 0xde, + 0xa5, 0xc9, 0x0d, 0xee, 0x5b, 0x7d, 0x96, 0xc3, + 0x63, 0x98, 0x48, 0xfb, 0x79, 0x6d, 0xbf, 0x67, + 0x33, 0x5b, 0x88, 0x61, 0xf9, 0xa8, 0x17, 0xf9, + 0x95, 0xa4, 0x99, 0x3b, 0x6c, 0xac, 0xed, 0x66, + 0x86, 0x21, 0x20, 0x73, 0x64, 0x7d, 0x0b, 0x75, + 0xe9, 0xf1, 0xaa, 0xa1, 0x4f, 0x92, 0x7b, 0x4a, + 0x57, 0x33, 0xbf, 0xb4, 0x36, 0x70, 0x65, 0xb6, + 0x04, 0xba, 0xde, 0x07, 0x62, 0x74, 0xae, 0x14, + 0x2f, 0x7e, 0xfd, 0x37, 0x94, 0x51, 0x1a, 0x08, + 0x08, 0x2d, 0x99, 0xe6, 0x73, 0x77, 0x60, 0xeb, + 0x58, 0xe0, 0xc1, 0x81, 0xf1, 0x07, 0x3b, 0x1b, + 0x71, 0x2e, 0x6b, 0xc9, 0x5d, 0x9b, 0xec, 0xf3, + 0xaf, 0xe6, 0x18, 0x6e, 0x2d, 0x5f, 0x84, 0xe1, + 0x24, 0x34, 0x8a, 0x36, 0xbe, 0x2e, 0xad, 0x4e, + 0x5c, 0x39, 0xf6, 0x65, 0x6d, 0x7d, 0x25, 0xb3, + 0xad, 0x8b, 0x88, 0x8a, 0x2c, 0x0f, 0xa8, 0x2d, + 0xd3, 0xd8, 0x5e, 0xac, 0xb3, 0x1b, 0x48, 0xf2, + 0x6b, 0xcc, 0xba, 0x72, 0xe0, 0xf9, 0xc9, 0x31, + 0xb8, 0x36, 0xa3, 0xbb, 0xc0, 0x82, 0x46, 0xfe, + 0x4c, 0xb6, 0x2c, 0xaf, 0x2c, 0xf6, 0xc8, 0x24, + 0x9d, 0xa6, 0x20, 0x63, 0x31, 0xbb, 0x0d, 0x34, + 0x36, 0xb5, 0xad, 0x17, 0x1d, 0xc6, 0x63, 0x63, + 0x26, 0x56, 0xcb, 0x1b, 0x4b, 0x59, 0xa2, 0x84, + 0xcc, 0xc3, 0xce, 0x49, 0x42, 0xcf, 0x2b, 0x4f, + 0x8c, 0x17, 0x98, 0xaf, 0xb2, 0xdb, 0xec, 0xb6, + 0x2b, 0x1c, 0xc5, 0xee, 0xb7, 0x96, 0xd8, 0x9e, + 0x6a, 0x76, 0x8c, 0x5e, 0x29, 0xdc, 0x5a, 0xb3, + 0x4b, 0xfb, 0x43, 0x63, 0x16, 0x57, 0x63, 0x89, + 0xd6, 0xf1, 0x92, 0xe7, 0xca, 0xe1, 0x42, 0xe7, + 0x6e, 0x68, 0xde, 0x41, 0xbb, 0x6b, 0xab, 0xd6, + 0x6c, 0xa6, 0xa1, 0x03, 0x69, 0xbd, 0xad, 0xcb, + 0x66, 0x64, 0x49, 0xc9, 0xb2, 0x7a, 0xeb, 0xc4, + 0xb3, 0x71, 0x7d, 0x96, 0x5d, 0xdb, 0xc3, 0xd6, + 0xf0, 0xcf, 0x15, 0xd4, 0x31, 0x81, 0x56, 0x36, + 0x98, 0xda, 0x34, 0xeb, 0x3b, 0xeb, 0xd6, 0xd0, + 0xce, 0xd7, 0xe5, 0xb9, 0x6c, 0x91, 0x33, 0x9a, + 0xf2, 0x9f, 0x1c, 0x7b, 0xc0, 0x0d, 0x01, 0x07, + 0x3e, 0xd6, 0xff, 0x00, 0x35, 0x1f, 0x62, 0xdf, + 0x95, 0x74, 0x66, 0xfa, 0x0e, 0x45, 0xbf, 0x81, + 0x9e, 0x18, 0x92, 0xfa, 0xef, 0x20, 0xcc, 0x9d, + 0x1d, 0xe5, 0xcc, 0xb2, 0x47, 0x33, 0x18, 0x18, + 0xf8, 0x9a, 0xda, 0x97, 0x01, 0xb9, 0x55, 0xcf, + 0x9a, 0x66, 0xd6, 0x77, 0x72, 0xe5, 0xcf, 0x80, + 0x3a, 0x36, 0xda, 0xfe, 0xd1, 0x94, 0x3e, 0x2f, + 0x8c, 0xcf, 0x14, 0x6f, 0xea, 0x41, 0xd3, 0x99, + 0xd9, 0xdc, 0x5e, 0xed, 0x3b, 0xa0, 0x81, 0xe6, + 0x27, 0x16, 0x34, 0xba, 0x41, 0x51, 0x84, 0x61, + 0x15, 0x59, 0xcb, 0x1d, 0x92, 0xdb, 0xe6, 0xf0, + 0xc1, 0x6c, 0xd9, 0x2e, 0xae, 0x0b, 0xcb, 0x4c, + 0xef, 0x34, 0x63, 0x4d, 0x0d, 0x4b, 0x5b, 0xbe, + 0xb5, 0x1c, 0xf6, 0xd6, 0x3d, 0xa0, 0x39, 0x8c, + 0x61, 0xcf, 0xb7, 0x91, 0xa2, 0x37, 0xe8, 0xa3, + 0xb4, 0x0d, 0x60, 0x2c, 0x43, 0x71, 0x90, 0x65, + 0xf7, 0x8d, 0xbb, 0x82, 0x49, 0x2e, 0x5d, 0x8b, + 0xc5, 0x65, 0x30, 0xb6, 0x30, 0x4e, 0x97, 0x76, + 0x4e, 0x94, 0x1e, 0xec, 0xff, 0x00, 0xd5, 0xf2, + 0x7d, 0xb4, 0x9e, 0x02, 0xb6, 0xe4, 0x54, 0xf8, + 0x8a, 0xf8, 0xfe, 0x77, 0xeb, 0x70, 0x76, 0xf1, + 0x2e, 0x13, 0x98, 0x58, 0xc3, 0xb4, 0x0d, 0xcc, + 0x21, 0x73, 0xa5, 0x81, 0xce, 0x2f, 0x92, 0xad, + 0xc2, 0x41, 0x7e, 0x2a, 0xd3, 0x7d, 0x6c, 0x93, + 0x32, 0xcb, 0xad, 0x33, 0x56, 0xe6, 0x36, 0x0e, + 0x92, 0x4e, 0x71, 0xee, 0x75, 0xc3, 0x1c, 0x29, + 0xa1, 0xdb, 0x8d, 0xe1, 0x41, 0x1f, 0x96, 0x13, + 0xd6, 0xb6, 0xdb, 0xfc, 0xf3, 0x6b, 0xc2, 0xac, + 0x71, 0xd3, 0xaf, 0x73, 0x9a, 0x74, 0x71, 0xc3, + 0x81, 0xaa, 0x3e, 0x29, 0x76, 0x76, 0xd6, 0xf0, + 0xe6, 0x11, 0xcb, 0x24, 0x85, 0xa4, 0xbe, 0x3b, + 0x6c, 0x14, 0xa3, 0x8f, 0x67, 0xb0, 0xb4, 0x65, + 0xd9, 0xc4, 0x71, 0xdd, 0x5f, 0x5c, 0xde, 0x12, + 0x1d, 0x77, 0x13, 0x9a, 0xcc, 0x20, 0xb8, 0x07, + 0x13, 0xab, 0x42, 0x08, 0x84, 0x4e, 0xfa, 0x20, + 0x22, 0x22, 0x02, 0xdd, 0x69, 0xef, 0x70, 0x7d, + 0xab, 0x3e, 0xb2, 0xd2, 0xb7, 0x5a, 0x7b, 0xdc, + 0x1f, 0x6a, 0xcf, 0xac, 0x82, 0xe1, 0x9d, 0x7b, + 0xd3, 0x7c, 0xc1, 0xe1, 0x2b, 0x81, 0x77, 0xe7, + 0x5e, 0xf4, 0xdf, 0x30, 0x78, 0x4a, 0xe0, 0x41, + 0x98, 0xff, 0x00, 0x68, 0xde, 0xda, 0x96, 0x2a, + 0x26, 0x3f, 0xda, 0x37, 0xb6, 0xa5, 0x8a, 0x0c, + 0x2e, 0x0c, 0xc3, 0xde, 0xad, 0x3e, 0xd3, 0xe5, + 0x0b, 0xbd, 0x70, 0x66, 0x1e, 0xf5, 0x69, 0xf6, + 0x9f, 0x28, 0x40, 0xcb, 0xfd, 0xe6, 0xef, 0xcf, + 0x3f, 0x58, 0xae, 0xf5, 0xc1, 0x97, 0xfb, 0xcd, + 0xdf, 0x9e, 0x7e, 0xb1, 0x5d, 0xe8, 0x0e, 0xd4, + 0x54, 0x49, 0xd6, 0x54, 0xb3, 0xb5, 0x15, 0x12, + 0x75, 0x94, 0x0d, 0xda, 0x6f, 0xa9, 0x0b, 0x57, + 0x8b, 0x3c, 0xbe, 0x5b, 0xd2, 0x2a, 0xe3, 0xa1, + 0x9c, 0x38, 0x47, 0x7d, 0x47, 0xd1, 0x74, 0xe6, + 0xe4, 0xb7, 0x20, 0x84, 0x0d, 0x18, 0x9c, 0xd0, + 0x7e, 0x91, 0x56, 0xa4, 0x6b, 0x68, 0x8e, 0x72, + 0xa6, 0x5b, 0x4d, 0x71, 0xda, 0xd1, 0xe3, 0x10, + 0x82, 0x7c, 0xae, 0x91, 0xe6, 0x47, 0x9a, 0xb9, + 0xe4, 0x97, 0x3b, 0x74, 0xd5, 0x79, 0xc4, 0xb5, + 0xe2, 0x4a, 0xad, 0xf1, 0xc3, 0x87, 0x27, 0x85, + 0xa4, 0xf8, 0xf5, 0x71, 0x96, 0xdc, 0x49, 0x89, + 0x6a, 0xaa, 0x55, 0x0d, 0x1b, 0x71, 0x26, 0x25, + 0xaa, 0xa9, 0x54, 0x34, 0x6d, 0xc4, 0x95, 0x5a, + 0xea, 0xb1, 0x8b, 0x80, 0x21, 0xa3, 0x6e, 0x24, + 0xc4, 0xa6, 0x2d, 0x76, 0x6d, 0xb7, 0x36, 0xd1, + 0xdc, 0x73, 0xe5, 0xbc, 0xe0, 0xc5, 0x84, 0x34, + 0x1a, 0x2d, 0x8e, 0xd9, 0x6a, 0x34, 0x98, 0xee, + 0x6a, 0xee, 0xcb, 0x68, 0x3b, 0xc5, 0x73, 0x9c, + 0xf4, 0x89, 0x98, 0xe4, 0xef, 0x1e, 0x53, 0x34, + 0xc4, 0x4c, 0x44, 0x69, 0x3c, 0x61, 0x07, 0x89, + 0x31, 0x2c, 0xdd, 0x5b, 0xcd, 0x69, 0x39, 0x82, + 0x71, 0x47, 0x8d, 0x22, 0x9a, 0x6a, 0x37, 0xc2, + 0xd3, 0x88, 0x2e, 0x91, 0xc6, 0x35, 0x8f, 0x07, + 0x09, 0x89, 0x8d, 0x75, 0x8d, 0x34, 0x6d, 0xc4, + 0x98, 0x96, 0xac, 0x5d, 0xc5, 0xd5, 0x97, 0x58, + 0xc9, 0x98, 0x4e, 0x61, 0x89, 0xed, 0x61, 0x0d, + 0x2f, 0xab, 0xab, 0x4d, 0x04, 0x0d, 0xce, 0xda, + 0x4c, 0xc4, 0x46, 0xb2, 0x9a, 0xd2, 0xd6, 0x98, + 0xac, 0x46, 0xb3, 0x3e, 0x10, 0xd5, 0x89, 0x31, + 0x2d, 0x99, 0x85, 0x94, 0x96, 0x13, 0x88, 0x24, + 0x73, 0x5e, 0x4b, 0x43, 0xaa, 0xde, 0xcf, 0x6d, + 0x73, 0x62, 0x48, 0x9d, 0x62, 0x26, 0x38, 0xeb, + 0xe0, 0x5a, 0x96, 0xad, 0xa6, 0xb3, 0x1a, 0x5a, + 0x3c, 0x61, 0xb7, 0x12, 0xc6, 0x25, 0xae, 0xa9, + 0x54, 0xd5, 0x11, 0x1a, 0xf1, 0x6d, 0xc5, 0xff, + 0x00, 0xca, 0x62, 0x5b, 0xb2, 0xcb, 0x31, 0x7f, + 0x74, 0x20, 0x2f, 0xe6, 0xc1, 0x69, 0x76, 0x20, + 0x01, 0x3a, 0x3b, 0x6a, 0x5f, 0xe1, 0x56, 0x74, + 0x93, 0xc8, 0x1c, 0x6a, 0x96, 0xcb, 0x5a, 0xce, + 0x92, 0xeb, 0x8f, 0xcb, 0x65, 0xbd, 0x77, 0x52, + 0x38, 0x20, 0xb1, 0x26, 0x25, 0x23, 0x98, 0xe4, + 0x13, 0xd9, 0xc4, 0x66, 0x89, 0xe2, 0x68, 0xdb, + 0xe5, 0x8a, 0x51, 0xc0, 0x6f, 0xa8, 0x9c, 0x5b, + 0xca, 0xd5, 0xbc, 0x5a, 0x35, 0x8f, 0x62, 0xb9, + 0x31, 0x5f, 0x1c, 0xed, 0xbc, 0x69, 0x33, 0x1a, + 0xfe, 0x0d, 0xb8, 0x93, 0x12, 0xd5, 0x88, 0x6f, + 0xa6, 0x25, 0x2a, 0x69, 0xff, 0x00, 0x96, 0xdc, + 0x49, 0x89, 0x6a, 0xc5, 0xd9, 0x5d, 0x79, 0x75, + 0x84, 0x99, 0x84, 0xce, 0x8a, 0x37, 0xb5, 0x8e, + 0x63, 0x71, 0x12, 0xea, 0xd3, 0x58, 0x1b, 0x9d, + 0xb4, 0x99, 0xd2, 0x26, 0x67, 0xc2, 0x13, 0x5a, + 0xcd, 0xa6, 0x2b, 0x58, 0xd6, 0x67, 0xc2, 0x1a, + 0x71, 0x26, 0x25, 0xb2, 0xfa, 0xce, 0x4b, 0x2b, + 0x8e, 0x62, 0x47, 0x07, 0x38, 0x00, 0xea, 0x8d, + 0x5a, 0x7b, 0x6b, 0x9b, 0x10, 0xdf, 0x48, 0x98, + 0x98, 0x89, 0x8f, 0x6a, 0x2d, 0x13, 0x59, 0x98, + 0xb7, 0x09, 0xac, 0xe9, 0x3f, 0x16, 0xdc, 0x49, + 0x89, 0x6a, 0xc4, 0x95, 0x42, 0x78, 0x36, 0xe2, + 0x4c, 0x4b, 0x56, 0x21, 0xbe, 0xb6, 0x5b, 0xc4, + 0x6e, 0x2e, 0x23, 0x81, 0xa4, 0x35, 0xd2, 0xb8, + 0x34, 0x13, 0xa8, 0x57, 0x7d, 0x26, 0x74, 0xf1, + 0x22, 0x26, 0x66, 0x22, 0x3c, 0x67, 0xc1, 0x9c, + 0x49, 0x5a, 0x6b, 0x5d, 0x59, 0x96, 0x55, 0x36, + 0x5c, 0xd6, 0x3a, 0x49, 0x19, 0x20, 0x90, 0x90, + 0x30, 0xd7, 0x45, 0x3b, 0x6b, 0xb2, 0xd7, 0x23, + 0x8a, 0x7c, 0xbd, 0xb7, 0x66, 0x57, 0x35, 0xc5, + 0x85, 0xc4, 0x53, 0x46, 0x85, 0x59, 0xc9, 0x58, + 0x88, 0x9d, 0x78, 0x4f, 0x07, 0x58, 0xf2, 0xf9, + 0x26, 0xd3, 0x5d, 0x34, 0xb5, 0x63, 0x5d, 0x11, + 0x38, 0x93, 0x12, 0xd4, 0x1d, 0xa2, 0xa9, 0x8b, + 0xb8, 0xad, 0xab, 0x97, 0x83, 0x6e, 0x24, 0xc4, + 0xb5, 0x55, 0x2a, 0x91, 0xc6, 0x74, 0x83, 0x4f, + 0x0f, 0x7b, 0x6e, 0x24, 0xc4, 0xb5, 0x62, 0xed, + 0x25, 0x50, 0x6d, 0xc4, 0x98, 0x96, 0xaa, 0xa5, + 0x50, 0xd2, 0x5b, 0x71, 0x26, 0x25, 0xaa, 0xa9, + 0x54, 0x34, 0x6d, 0xc4, 0xb1, 0x89, 0x6b, 0xaa, + 0xcd, 0x50, 0x88, 0x74, 0xda, 0x5e, 0x3e, 0xd2, + 0xe1, 0x93, 0xb0, 0xf9, 0x07, 0xc6, 0x1b, 0xed, + 0xdd, 0x53, 0xf9, 0xb4, 0x4d, 0x3c, 0xdd, 0xcb, + 0x3c, 0x99, 0x45, 0x15, 0x5a, 0xa3, 0x77, 0xf2, + 0xae, 0xb5, 0x68, 0x27, 0x16, 0x43, 0x68, 0xe7, + 0x69, 0x21, 0xad, 0xd3, 0xdc, 0xa2, 0xcd, 0xe6, + 0x23, 0xc2, 0x5e, 0x87, 0xf2, 0xfb, 0x4e, 0xb7, + 0xa7, 0xb3, 0xee, 0x87, 0x0a, 0x22, 0x2c, 0xef, + 0x40, 0x5e, 0xa2, 0xfd, 0xab, 0x3c, 0xe6, 0xf8, + 0x42, 0xf2, 0xbd, 0x45, 0xfb, 0x56, 0x79, 0xcd, + 0xf0, 0x84, 0x1c, 0xdb, 0x61, 0xfc, 0xca, 0x3f, + 0xb1, 0x1f, 0x59, 0xca, 0x09, 0x4e, 0xed, 0x87, + 0xf3, 0x28, 0xfe, 0xc4, 0x7d, 0x67, 0x28, 0x24, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x59, 0x69, 0xc2, 0xe0, 0xe1, 0x42, + 0x46, 0xfe, 0x91, 0xa1, 0x61, 0x10, 0x5a, 0x72, + 0x2c, 0xde, 0x6b, 0xc7, 0xcf, 0x0b, 0xa2, 0x8a, + 0x26, 0x36, 0x22, 0xef, 0xd5, 0xb7, 0x09, 0xd1, + 0xa1, 0x57, 0x2c, 0xe2, 0x6c, 0xd7, 0xb0, 0xc4, + 0x7f, 0x3e, 0x46, 0x34, 0xf7, 0x5d, 0xa5, 0x4a, + 0xec, 0xaf, 0xbd, 0x5c, 0xfd, 0x83, 0xbc, 0x2a, + 0x37, 0x2e, 0x70, 0x6e, 0x65, 0x6c, 0x4e, 0xa1, + 0x33, 0x09, 0x3f, 0xda, 0x01, 0x07, 0x66, 0xd4, + 0x48, 0x5f, 0x9b, 0x49, 0x19, 0xf2, 0x21, 0x6b, + 0x5a, 0xc1, 0xb8, 0x2a, 0x05, 0x74, 0x2e, 0xac, + 0xcf, 0x9b, 0x9f, 0x2a, 0xca, 0xae, 0xee, 0x43, + 0x9c, 0x2b, 0xcd, 0xcb, 0x84, 0xf8, 0xc5, 0xa3, + 0x46, 0x8e, 0xcf, 0x8a, 0xb8, 0xf6, 0x94, 0x11, + 0x9c, 0xcf, 0xd9, 0xc2, 0x7e, 0x88, 0x5d, 0x39, + 0x91, 0xc3, 0xb3, 0x79, 0x73, 0x0e, 0x82, 0x4b, + 0x88, 0xed, 0x69, 0xe3, 0x41, 0xa6, 0xf3, 0x23, + 0xc3, 0x99, 0xc1, 0x6f, 0x6a, 0xe3, 0x25, 0xbd, + 0xd0, 0x0f, 0x8a, 0x4d, 0x67, 0x0f, 0xe7, 0x69, + 0xed, 0x2e, 0x5c, 0xda, 0x1b, 0x4b, 0x7b, 0xc7, + 0xdb, 0xda, 0x17, 0xb9, 0x91, 0xf8, 0xae, 0x73, + 0xdd, 0x8a, 0xae, 0xdd, 0xa7, 0x61, 0x58, 0xf2, + 0x6f, 0x68, 0x19, 0x3c, 0x4d, 0x90, 0xb5, 0xb7, + 0x4e, 0x64, 0x8e, 0xb3, 0x07, 0xca, 0x0c, 0x3a, + 0x55, 0x41, 0xd8, 0xc3, 0x9c, 0x1e, 0x0e, 0x30, + 0x48, 0x75, 0x75, 0xd6, 0xba, 0x6a, 0x82, 0x5b, + 0x65, 0xbf, 0x9c, 0xc7, 0xe6, 0x3f, 0xc0, 0xb9, + 0xa6, 0xbe, 0xbc, 0xb5, 0xbc, 0xba, 0x6d, 0xbc, + 0xce, 0x89, 0xaf, 0x99, 0xe5, 0xc1, 0xa7, 0x59, + 0x0e, 0x2b, 0xa7, 0x65, 0xbf, 0x9c, 0xc7, 0xe6, + 0x3f, 0xc0, 0xb8, 0x2f, 0xbd, 0xf6, 0xe3, 0xed, + 0x5f, 0xf5, 0x8a, 0x0e, 0xcc, 0xba, 0x6b, 0x8c, + 0xc7, 0x36, 0xb3, 0x65, 0xdc, 0x8e, 0x9a, 0x8f, + 0xaf, 0x8d, 0xa7, 0x43, 0x46, 0x2f, 0x91, 0x78, + 0xda, 0x09, 0x5d, 0x36, 0x71, 0x70, 0x5d, 0xa7, + 0x01, 0xc0, 0xda, 0xe9, 0xa0, 0x00, 0x68, 0xa7, + 0x6d, 0x63, 0x20, 0x7b, 0x59, 0x9c, 0xda, 0x92, + 0x69, 0xe3, 0x16, 0x9f, 0xed, 0x34, 0x80, 0xbc, + 0xe7, 0x6d, 0x2d, 0xcd, 0xee, 0xc3, 0xb4, 0x7e, + 0xb2, 0xbc, 0x20, 0x14, 0x1e, 0xa7, 0xcd, 0x4c, + 0xf9, 0x54, 0x39, 0x7b, 0xe3, 0xd3, 0x6e, 0xea, + 0xb2, 0x5a, 0xe9, 0xa0, 0x07, 0x47, 0x7d, 0x70, + 0x2e, 0xb7, 0x65, 0xb3, 0x37, 0x2e, 0x6e, 0x62, + 0x5c, 0xde, 0x69, 0xef, 0xc0, 0xd6, 0x69, 0xc5, + 0x5d, 0xfe, 0xf2, 0xe4, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x05, 0x25, + 0xb3, 0x7f, 0xce, 0x6d, 0xfb, 0x6e, 0xfa, 0x85, + 0x46, 0xa9, 0x2d, 0x9b, 0xfe, 0x73, 0x6f, 0xdb, + 0x77, 0xd4, 0x28, 0x26, 0xb3, 0x0f, 0x7d, 0x9b, + 0xce, 0xf9, 0x02, 0xe7, 0x5d, 0x19, 0x87, 0xbe, + 0xcd, 0xe7, 0x7c, 0x81, 0x73, 0xa0, 0x22, 0x2c, + 0x20, 0xd9, 0xb5, 0x31, 0x4b, 0x25, 0x85, 0x97, + 0x36, 0xc7, 0x3e, 0x95, 0xae, 0x10, 0x4e, 0xb6, + 0x8d, 0xe5, 0x5a, 0xf6, 0x5b, 0xaf, 0x51, 0x27, + 0x21, 0xdc, 0x4a, 0xdf, 0x9c, 0xe6, 0xd7, 0x39, + 0x65, 0xa5, 0xa4, 0x90, 0x35, 0x8e, 0xe7, 0x05, + 0x08, 0x78, 0x3f, 0x9a, 0xde, 0xc1, 0x51, 0x3f, + 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x82, + 0x1b, 0xd9, 0x2e, 0xfd, 0x44, 0x9c, 0x87, 0x71, + 0x27, 0xb2, 0x5d, 0xfa, 0x89, 0x39, 0x0e, 0xe2, + 0x53, 0x3f, 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, + 0xc6, 0x9f, 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, + 0xc6, 0x82, 0x1b, 0xd9, 0x2e, 0xfd, 0x44, 0x9c, + 0x87, 0x71, 0x27, 0xb2, 0x5d, 0xfa, 0x89, 0x39, + 0x0e, 0xe2, 0x53, 0x3f, 0x18, 0xe6, 0x5e, 0xaa, + 0x1e, 0x03, 0xc6, 0x9f, 0x18, 0xe6, 0x5e, 0xaa, + 0x1e, 0x03, 0xc6, 0x82, 0x1b, 0xd9, 0x2e, 0xfd, + 0x44, 0x9c, 0x87, 0x71, 0x27, 0xb2, 0x5d, 0xfa, + 0x89, 0x39, 0x0e, 0xe2, 0x53, 0x3f, 0x18, 0xe6, + 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x9f, 0x18, 0xe6, + 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x82, 0x1b, 0xd9, + 0x2e, 0xfd, 0x44, 0x9c, 0x87, 0x71, 0x27, 0xb2, + 0x5d, 0xfa, 0x89, 0x39, 0x0e, 0xe2, 0x53, 0x3f, + 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x9f, + 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x82, + 0x1b, 0xd9, 0x2e, 0xfd, 0x44, 0x9c, 0x87, 0x71, + 0x27, 0xb2, 0x5d, 0xfa, 0x89, 0x39, 0x0e, 0xe2, + 0x53, 0x3f, 0x18, 0xe6, 0x3e, 0xae, 0x1a, 0xee, + 0xe8, 0x77, 0x1a, 0xc0, 0xdb, 0x1c, 0xc8, 0xea, + 0x8a, 0x1e, 0x03, 0xc6, 0x82, 0x1f, 0xd9, 0x2e, + 0xfd, 0x44, 0x9c, 0x87, 0x71, 0x27, 0xb2, 0x5d, + 0xfa, 0x89, 0x39, 0x0e, 0xe2, 0x53, 0x3f, 0x18, + 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x9f, 0x18, + 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x82, 0x1b, + 0xd9, 0x2e, 0xfd, 0x44, 0x9c, 0x87, 0x71, 0x27, + 0xb2, 0x5d, 0xfa, 0x89, 0x39, 0x0e, 0xe2, 0x53, + 0x3f, 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, + 0x9f, 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, + 0x82, 0x1b, 0xd9, 0x2e, 0xfd, 0x44, 0x9c, 0x87, + 0x71, 0x27, 0xb2, 0x5d, 0xfa, 0x89, 0x39, 0x0e, + 0xe2, 0x53, 0x1f, 0x18, 0xe6, 0x3e, 0xaa, 0x1e, + 0x07, 0x71, 0xac, 0xfc, 0x63, 0x99, 0x7a, 0xa8, + 0x78, 0x0f, 0x1a, 0x08, 0x6f, 0x64, 0xbb, 0xf5, + 0x12, 0x72, 0x1d, 0xc4, 0x9e, 0xc9, 0x77, 0xea, + 0x24, 0xe4, 0x3b, 0x89, 0x4c, 0xfc, 0x63, 0x99, + 0x7a, 0xa8, 0x78, 0x0f, 0x1a, 0x7c, 0x63, 0x99, + 0x7a, 0xa8, 0x78, 0x0f, 0x1a, 0x08, 0x6f, 0x64, + 0xbb, 0xf5, 0x12, 0x72, 0x1d, 0xc4, 0xa4, 0xac, + 0x6f, 0xaf, 0x2d, 0xad, 0x4d, 0x9c, 0xf6, 0x26, + 0xee, 0xda, 0xb5, 0x6c, 0x6f, 0x63, 0x86, 0x13, + 0xdb, 0xa1, 0x5b, 0xfe, 0x31, 0xcc, 0xbd, 0x54, + 0x3c, 0x07, 0x8d, 0x3e, 0x31, 0xcc, 0xbd, 0x54, + 0x3c, 0x07, 0x8d, 0x07, 0x36, 0x61, 0x7b, 0x7d, + 0x79, 0x0b, 0x2d, 0xa3, 0xb2, 0x36, 0xd6, 0xb1, + 0x9c, 0x42, 0x16, 0x35, 0xda, 0x4e, 0xf9, 0x38, + 0x42, 0x8f, 0xf6, 0x4b, 0xbf, 0x53, 0x27, 0x6f, + 0x03, 0xb8, 0x94, 0xc7, 0xc6, 0x39, 0x97, 0xaa, + 0x87, 0x80, 0xf1, 0xac, 0xfc, 0x63, 0x99, 0x7a, + 0xa8, 0x78, 0x0f, 0xa4, 0x82, 0x1b, 0xd9, 0x2e, + 0xfd, 0x44, 0x9c, 0x87, 0x71, 0x27, 0xb2, 0x5d, + 0xfa, 0x89, 0x39, 0x0e, 0xe2, 0x53, 0x3f, 0x18, + 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x9f, 0x18, + 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0x82, 0x1b, + 0xd9, 0x2e, 0xfd, 0x44, 0x9c, 0x87, 0x71, 0x27, + 0xb2, 0x5d, 0xfa, 0x89, 0x39, 0x0e, 0xe2, 0x53, + 0x3f, 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, + 0x9f, 0x18, 0xe6, 0x5e, 0xaa, 0x1e, 0x03, 0xc6, + 0x82, 0x1b, 0xd9, 0x2e, 0xfd, 0x44, 0x9c, 0x87, + 0x71, 0x21, 0xb4, 0xbb, 0x3a, 0x39, 0x89, 0x39, + 0x0e, 0xe2, 0x53, 0x3f, 0x18, 0xe6, 0x5e, 0xaa, + 0x1e, 0x03, 0xc6, 0x9f, 0x18, 0xe6, 0x5e, 0xaa, + 0x1e, 0x03, 0xc6, 0x83, 0xc3, 0x33, 0x3b, 0x87, + 0xc5, 0x1c, 0x77, 0xd9, 0x60, 0xbc, 0x74, 0x22, + 0x91, 0xbd, 0xed, 0x76, 0x20, 0x37, 0x8f, 0x8a, + 0x6a, 0xb8, 0xf3, 0x19, 0xb3, 0x2c, 0xc2, 0x61, + 0x24, 0x96, 0xef, 0x63, 0x18, 0xdc, 0x11, 0x44, + 0xc6, 0x38, 0x35, 0xa3, 0x7b, 0x52, 0xef, 0xf8, + 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, 0x34, 0xf8, + 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, 0x34, 0x10, + 0xde, 0xc9, 0x75, 0xea, 0x24, 0xe4, 0x3b, 0x89, + 0x3d, 0x92, 0xef, 0xd4, 0x49, 0xc8, 0x77, 0x12, + 0x99, 0xf8, 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, + 0x34, 0xf8, 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, + 0x34, 0x10, 0xde, 0xc9, 0x77, 0xea, 0x24, 0xe4, + 0x3b, 0x89, 0x3d, 0x92, 0xef, 0xd4, 0x49, 0xc8, + 0x77, 0x12, 0x99, 0xf8, 0xc7, 0x32, 0xf5, 0x50, + 0xf0, 0x1e, 0x34, 0xf8, 0xc7, 0x32, 0xf5, 0x50, + 0xf0, 0x1e, 0x34, 0x10, 0xde, 0xc9, 0x77, 0xea, + 0x24, 0xe4, 0x3b, 0x89, 0x3d, 0x92, 0xef, 0xd4, + 0x49, 0xc8, 0x77, 0x12, 0x99, 0xf8, 0xc7, 0x32, + 0xf5, 0x50, 0xf0, 0x1e, 0x34, 0xf8, 0xc7, 0x32, + 0xf5, 0x50, 0xf0, 0x1e, 0x34, 0x10, 0xde, 0xc9, + 0x77, 0xea, 0x24, 0xe4, 0x3b, 0x89, 0x3d, 0x92, + 0xef, 0xd4, 0x49, 0xc8, 0x77, 0x12, 0x99, 0xf8, + 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, 0x34, 0xf8, + 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, 0x34, 0x10, + 0xde, 0xc9, 0x77, 0xea, 0x24, 0xe4, 0x3b, 0x89, + 0x3d, 0x92, 0xef, 0xd4, 0x49, 0xc8, 0x77, 0x12, + 0x99, 0xf8, 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, + 0x34, 0xf8, 0xc7, 0x32, 0xf5, 0x50, 0xf0, 0x1e, + 0x34, 0x10, 0xde, 0xc9, 0x77, 0xea, 0x24, 0xe4, + 0x3b, 0x89, 0x3d, 0x92, 0xef, 0xd4, 0x49, 0xc8, + 0x77, 0x12, 0x99, 0xf8, 0xc7, 0x32, 0xf5, 0x50, + 0xf0, 0x1e, 0x34, 0xf8, 0xc7, 0x32, 0xf5, 0x50, + 0xf0, 0x1e, 0x34, 0x10, 0xde, 0xc9, 0x77, 0xea, + 0x24, 0xe4, 0x3b, 0x89, 0x6d, 0xb4, 0xb5, 0xba, + 0x17, 0x50, 0x93, 0x04, 0x94, 0x12, 0x30, 0x93, + 0x81, 0xda, 0xab, 0xda, 0x52, 0x9f, 0x18, 0xe6, + 0x5e, 0xaa, 0x1e, 0x03, 0xc6, 0xbd, 0xc1, 0xb5, + 0xb9, 0x8c, 0x93, 0x47, 0x19, 0x8e, 0x20, 0x1e, + 0xf6, 0xb4, 0x90, 0x0e, 0xa2, 0x69, 0xf3, 0x90, + 0x4a, 0xe7, 0x3e, 0xf4, 0xdf, 0x30, 0x78, 0x4a, + 0xe0, 0x5d, 0xf9, 0xcf, 0xbc, 0xb4, 0x7f, 0x50, + 0x78, 0x4a, 0xe0, 0x41, 0x98, 0xff, 0x00, 0x68, + 0xde, 0xda, 0x96, 0x2a, 0x26, 0x3f, 0xda, 0x37, + 0xb6, 0xa5, 0x8a, 0x0c, 0x2e, 0x0c, 0xc3, 0xde, + 0xad, 0x3e, 0xd3, 0xe5, 0x0b, 0xbd, 0x70, 0x66, + 0x1e, 0xf5, 0x69, 0xf6, 0x9f, 0x28, 0x40, 0xcb, + 0xfd, 0xe6, 0xef, 0xcf, 0x3f, 0x58, 0xae, 0xf5, + 0xc1, 0x97, 0xfb, 0xcd, 0xdf, 0x9e, 0x7e, 0xb1, + 0x5d, 0xe8, 0x0e, 0xd4, 0x54, 0x49, 0xd6, 0x54, + 0xb3, 0xb5, 0x15, 0x12, 0x75, 0x94, 0x0d, 0xd5, + 0xbf, 0x3b, 0x34, 0xc8, 0x6d, 0xfc, 0xf6, 0xff, + 0x00, 0x79, 0x68, 0xdd, 0x5b, 0xb3, 0xef, 0xf4, + 0xfd, 0xb9, 0xfe, 0xbb, 0x7f, 0xbc, 0xaf, 0x8f, + 0xef, 0xaf, 0xc5, 0xcb, 0x3f, 0xf0, 0xaf, 0xf0, + 0x57, 0x31, 0x26, 0x25, 0xab, 0x12, 0x62, 0x5b, + 0x75, 0xf1, 0xf8, 0xbc, 0x6d, 0x38, 0x43, 0x6e, + 0x24, 0xc4, 0xb5, 0x62, 0x4c, 0x4a, 0x35, 0x34, + 0x6d, 0xc4, 0x98, 0x96, 0xac, 0x49, 0x89, 0x35, + 0x34, 0x6d, 0xc4, 0xb0, 0x5d, 0xaf, 0xb4, 0x7c, + 0x0b, 0x5e, 0x24, 0x2e, 0xd1, 0xc3, 0xe0, 0x4d, + 0x4d, 0x38, 0xae, 0xf6, 0xee, 0x23, 0x67, 0xc3, + 0x86, 0xe4, 0x04, 0x8e, 0xe0, 0x2a, 0xbf, 0x90, + 0xde, 0xcd, 0x16, 0x63, 0x0c, 0x58, 0xc9, 0x64, + 0xbe, 0x23, 0x9a, 0x49, 0x23, 0x4e, 0xea, 0x9f, + 0x83, 0xfd, 0x3a, 0x3f, 0xf1, 0x9d, 0xf5, 0x4a, + 0xaa, 0xe5, 0x04, 0x9c, 0xd2, 0xdb, 0xb3, 0x2b, + 0x4f, 0x71, 0x70, 0xac, 0x44, 0xc6, 0x59, 0xd3, + 0xda, 0xdf, 0x96, 0x66, 0x2d, 0x82, 0x62, 0x66, + 0x38, 0x47, 0x04, 0xd6, 0xd6, 0x46, 0xd6, 0x8b, + 0x79, 0x69, 0xe3, 0x69, 0x63, 0x88, 0xdd, 0x14, + 0x5e, 0x6d, 0x32, 0x0b, 0x56, 0x59, 0xb6, 0xe7, + 0x30, 0x94, 0xb7, 0x10, 0x0e, 0xa0, 0x38, 0x43, + 0x6b, 0xa8, 0x13, 0xba, 0xb6, 0x6d, 0x73, 0x83, + 0x6d, 0xed, 0xc6, 0xee, 0x37, 0x11, 0x5e, 0xc0, + 0x0b, 0x44, 0x76, 0x59, 0xe6, 0x67, 0x6a, 0xd1, + 0x77, 0x33, 0x61, 0xb5, 0xd0, 0x5a, 0xd7, 0x34, + 0x62, 0x34, 0xd4, 0x68, 0x14, 0x56, 0x67, 0x65, + 0x78, 0xe9, 0xa9, 0x92, 0xb5, 0xef, 0x64, 0x9d, + 0xbd, 0xc9, 0x98, 0xd6, 0x3a, 0x63, 0xe2, 0xdd, + 0x71, 0xb3, 0xb6, 0x92, 0xda, 0x9b, 0x8b, 0x09, + 0x4b, 0x88, 0x04, 0xb4, 0x12, 0x1c, 0xd3, 0x4e, + 0xe2, 0xf5, 0xb3, 0x36, 0xd6, 0xf8, 0x45, 0xdb, + 0x64, 0xac, 0xee, 0x6b, 0x9a, 0x62, 0xa8, 0x34, + 0x15, 0x1a, 0x69, 0xdc, 0x52, 0x39, 0x5d, 0xac, + 0x16, 0xb9, 0x7f, 0x31, 0x04, 0xa2, 0x66, 0x37, + 0x1d, 0x5e, 0x29, 0xe5, 0x13, 0xa7, 0x52, 0xaf, + 0xec, 0xa1, 0xae, 0x68, 0xff, 0x00, 0xb1, 0x77, + 0x79, 0xcc, 0x48, 0xb5, 0xad, 0x5b, 0xc4, 0xda, + 0x74, 0x85, 0xe6, 0x94, 0xa6, 0x5c, 0x76, 0x8a, + 0x46, 0xb7, 0xf1, 0xf7, 0x24, 0x36, 0x92, 0xd6, + 0xd8, 0xb5, 0xd7, 0x66, 0x4a, 0x5c, 0x35, 0xad, + 0x02, 0x2c, 0x43, 0x48, 0x26, 0x9a, 0xbb, 0xab, + 0x5d, 0xbe, 0xcf, 0x59, 0xc5, 0x68, 0xdb, 0x8c, + 0xc6, 0x52, 0xc2, 0x45, 0x5c, 0x01, 0x0d, 0x6b, + 0x49, 0xdc, 0xa9, 0xdd, 0x5c, 0x5b, 0x55, 0x46, + 0xe6, 0xa0, 0x8d, 0x62, 0x36, 0xd0, 0xf6, 0x57, + 0x57, 0xb0, 0xe7, 0x99, 0xa5, 0xb8, 0xf6, 0xe9, + 0x99, 0x14, 0x15, 0x0f, 0x6b, 0x48, 0x18, 0xbb, + 0x7a, 0x3e, 0x54, 0x8d, 0x62, 0x94, 0xfa, 0xb4, + 0x73, 0x9d, 0xb3, 0x97, 0x2c, 0xc6, 0x3d, 0xd6, + 0x8f, 0x97, 0xe2, 0xf5, 0x79, 0xb3, 0xf6, 0xae, + 0xb3, 0x37, 0x59, 0x7c, 0xa5, 0xc1, 0xad, 0x2f, + 0x68, 0x27, 0x13, 0x5c, 0x06, 0xf1, 0x55, 0xfc, + 0x4a, 0xeb, 0x65, 0x6f, 0x0d, 0xb6, 0x58, 0x60, + 0x86, 0x4e, 0x7a, 0x36, 0xb5, 0xe0, 0xbf, 0x41, + 0xa9, 0xdd, 0xd4, 0xa8, 0xa1, 0xda, 0x02, 0xbe, + 0x2b, 0xcc, 0xee, 0x89, 0x9d, 0x78, 0xf0, 0x73, + 0xf3, 0x78, 0xab, 0x59, 0xa4, 0xd6, 0x22, 0xb3, + 0x6a, 0xfd, 0x51, 0x1e, 0x09, 0xad, 0x99, 0x35, + 0xcd, 0x1b, 0xe6, 0x39, 0x74, 0x6d, 0x5c, 0xaf, + 0x65, 0xdc, 0x20, 0x38, 0xb3, 0xf5, 0x67, 0x51, + 0x23, 0x4d, 0x57, 0x26, 0xcb, 0x9a, 0xe6, 0x83, + 0xcc, 0x72, 0x9f, 0xcd, 0x2e, 0x32, 0x78, 0x67, + 0x61, 0xcc, 0x43, 0x4c, 0x98, 0x6b, 0x19, 0x22, + 0xba, 0x2a, 0x55, 0x6f, 0x6d, 0x32, 0xee, 0xd3, + 0x5e, 0x1e, 0x0e, 0x98, 0xa9, 0xbb, 0xcb, 0x69, + 0xbb, 0x6f, 0x1d, 0x75, 0x7a, 0xcb, 0xdf, 0x24, + 0xf9, 0x2b, 0x1f, 0x71, 0xa5, 0xce, 0x88, 0xe2, + 0xae, 0xe8, 0xa2, 0x87, 0xca, 0x32, 0x3b, 0x7b, + 0xec, 0xbc, 0x5c, 0x3d, 0xef, 0x6b, 0xc9, 0x70, + 0x00, 0x1d, 0x1e, 0x29, 0xd0, 0xbd, 0x66, 0x9b, + 0x49, 0x04, 0x96, 0xae, 0xb5, 0xcb, 0xda, 0x68, + 0xf6, 0xe0, 0x32, 0x11, 0x84, 0x01, 0xab, 0xc5, + 0x5d, 0xfb, 0x30, 0x41, 0xc9, 0xdb, 0xe7, 0xbf, + 0xc2, 0xa9, 0xa5, 0xab, 0x49, 0x9f, 0x0d, 0xd2, + 0xe9, 0xfe, 0xde, 0x4c, 0x95, 0xa4, 0xfd, 0x7b, + 0x69, 0x30, 0x8f, 0xbc, 0xc8, 0xe1, 0xb3, 0xcb, + 0x1f, 0x3b, 0xdc, 0xe7, 0xdc, 0x80, 0xda, 0xd0, + 0xd0, 0x54, 0x90, 0x34, 0x0d, 0xdd, 0x6b, 0x65, + 0x96, 0xcf, 0xdb, 0xb6, 0xcc, 0x5d, 0x66, 0x32, + 0x96, 0x62, 0x18, 0x9c, 0xd6, 0x90, 0xd0, 0xd0, + 0x77, 0xc9, 0x50, 0x8e, 0x9e, 0x6b, 0xab, 0xf0, + 0x26, 0x7b, 0x9d, 0x8e, 0x40, 0x0e, 0x93, 0x4a, + 0x62, 0xa2, 0xb2, 0xed, 0x6b, 0xb0, 0xe5, 0x8c, + 0x68, 0xd4, 0xe9, 0x5a, 0x08, 0xdf, 0x14, 0x71, + 0xf9, 0x17, 0x49, 0xdf, 0x59, 0xad, 0x77, 0x7d, + 0xee, 0x78, 0xeb, 0x86, 0xdb, 0xf2, 0x45, 0x22, + 0x23, 0x1c, 0x6d, 0x88, 0x72, 0xdd, 0x6c, 0xf5, + 0xac, 0x96, 0x86, 0xe7, 0x2f, 0x94, 0xbe, 0x80, + 0xb8, 0x34, 0x9c, 0x4d, 0x70, 0x0b, 0x76, 0xcc, + 0xdb, 0x5b, 0xb6, 0x31, 0x72, 0xd9, 0x2b, 0x3b, + 0xda, 0x43, 0xe3, 0xae, 0xa1, 0x5f, 0x9b, 0xaf, + 0x71, 0x7b, 0xd9, 0x37, 0x19, 0x32, 0xd7, 0xb5, + 0xda, 0x43, 0x64, 0x20, 0x77, 0x40, 0x2b, 0x87, + 0x66, 0x80, 0x19, 0xc5, 0xd8, 0x1b, 0x8d, 0x78, + 0xe0, 0x78, 0x54, 0x9d, 0x74, 0xbd, 0x66, 0x7c, + 0x16, 0xad, 0x69, 0xbf, 0x0e, 0x48, 0xa4, 0x46, + 0xff, 0x00, 0xd2, 0xe8, 0xda, 0x3b, 0x3b, 0x5c, + 0x2f, 0xba, 0xe7, 0x31, 0x5c, 0xd1, 0x8d, 0x10, + 0xd4, 0x69, 0x04, 0x86, 0xea, 0xee, 0xaf, 0x30, + 0x6c, 0xf5, 0xa4, 0x16, 0xa2, 0x7c, 0xca, 0x62, + 0xc3, 0xa3, 0x10, 0x06, 0x8d, 0x6d, 0x77, 0x16, + 0x8c, 0xd5, 0xad, 0x7e, 0xd3, 0xc2, 0xc7, 0x00, + 0x43, 0x8c, 0x40, 0xd7, 0xb8, 0xa6, 0x33, 0xbb, + 0x08, 0xef, 0x60, 0x8e, 0x39, 0x67, 0x16, 0xed, + 0x6b, 0xb1, 0x12, 0xea, 0x51, 0xda, 0x29, 0x4d, + 0x24, 0x26, 0xb3, 0x11, 0x48, 0xd6, 0x78, 0xc1, + 0xdb, 0xa5, 0xef, 0x96, 0xf3, 0x48, 0x99, 0xa4, + 0xec, 0x88, 0xd7, 0xee, 0xf7, 0xca, 0x2b, 0x32, + 0xc8, 0x60, 0x8e, 0xcc, 0xde, 0x58, 0xc8, 0x5f, + 0x1b, 0x46, 0x27, 0x34, 0x9a, 0xd5, 0xbb, 0xed, + 0x2b, 0x9b, 0x26, 0xc9, 0xdd, 0x98, 0xe2, 0x96, + 0x47, 0x16, 0x5b, 0xb0, 0xd3, 0x45, 0x2a, 0xe3, + 0xdd, 0xd4, 0xa6, 0xed, 0x19, 0x6b, 0x6b, 0x96, + 0x1b, 0x53, 0x72, 0xc9, 0xb0, 0x31, 0xd4, 0x38, + 0x9b, 0xc1, 0x4a, 0xaf, 0x19, 0x23, 0x79, 0xbc, + 0x85, 0xae, 0x6e, 0x87, 0x16, 0x3d, 0xd5, 0xec, + 0xe9, 0x53, 0x19, 0x6d, 0x15, 0x98, 0x8e, 0x7a, + 0x44, 0x9d, 0x8c, 0x73, 0x92, 0xb3, 0xb6, 0x23, + 0xe9, 0xdd, 0xb2, 0x3d, 0xad, 0x27, 0x67, 0xf2, + 0xa9, 0xb1, 0xb2, 0xda, 0xe1, 0xdc, 0xeb, 0x34, + 0x1f, 0x18, 0x3a, 0x87, 0xb2, 0x17, 0x2e, 0x4f, + 0x96, 0xc5, 0x1e, 0x60, 0xf6, 0x5d, 0x49, 0xcd, + 0xcf, 0x6d, 0x23, 0x79, 0xb6, 0x54, 0x0c, 0x5a, + 0xce, 0x80, 0x75, 0xd5, 0x44, 0xe5, 0x79, 0xa4, + 0x99, 0x7c, 0xae, 0x9d, 0x8d, 0x0f, 0x2f, 0x6d, + 0x1c, 0x1c, 0x68, 0x0e, 0xee, 0x92, 0xba, 0xa0, + 0xbf, 0x76, 0x61, 0x9f, 0xda, 0xdc, 0x3d, 0x8d, + 0x63, 0xdd, 0x23, 0x01, 0x0d, 0x35, 0x1a, 0x34, + 0x68, 0x25, 0x5a, 0x6b, 0x7a, 0xc5, 0xab, 0x36, + 0xd6, 0x34, 0xd7, 0xf1, 0x73, 0xdf, 0x8a, 0xd7, + 0xa4, 0xc5, 0x22, 0x2f, 0xbb, 0x4d, 0x23, 0xc3, + 0x45, 0x8b, 0x3a, 0xb3, 0xb5, 0xba, 0x81, 0xa6, + 0xe2, 0x4e, 0x6b, 0x9b, 0xc4, 0x58, 0x2a, 0x1b, + 0x53, 0x4e, 0xca, 0x8c, 0xb2, 0xc9, 0xa2, 0x9f, + 0x2a, 0x6d, 0xdb, 0xa6, 0x91, 0xa4, 0xc6, 0x5c, + 0x58, 0x08, 0xc3, 0xa3, 0x72, 0x8b, 0x66, 0xd8, + 0xe8, 0x86, 0xdb, 0xce, 0x7f, 0x80, 0x2e, 0xcc, + 0xac, 0xd7, 0x67, 0x5a, 0x7f, 0xc1, 0x7f, 0xca, + 0xb9, 0xc6, 0xb1, 0x48, 0xe3, 0xe3, 0x2e, 0xf7, + 0x8a, 0xdb, 0x3d, 0xa3, 0x6f, 0x18, 0xa2, 0xbf, + 0x93, 0x65, 0x6f, 0xcc, 0xa4, 0x25, 0xce, 0xe6, + 0xe1, 0x8f, 0xcb, 0x70, 0xd7, 0x5d, 0xe0, 0xa6, + 0x1b, 0x90, 0xe4, 0xd2, 0xc8, 0xfb, 0x68, 0xe6, + 0x77, 0x3e, 0xc1, 0xe3, 0x00, 0xe0, 0x48, 0xec, + 0x91, 0x45, 0xeb, 0x64, 0xc0, 0x19, 0x66, 0x31, + 0xad, 0xd2, 0x38, 0x9e, 0x0a, 0x28, 0x6c, 0x96, + 0x57, 0x75, 0xf3, 0x1d, 0x5d, 0x2e, 0x7c, 0x80, + 0xff, 0x00, 0x6a, 0xaa, 0xf3, 0x6b, 0xda, 0xd6, + 0x98, 0xb6, 0x9b, 0x61, 0xc7, 0x1d, 0x31, 0xe3, + 0xae, 0x2f, 0xa2, 0x2d, 0xdd, 0xb4, 0xc7, 0x16, + 0x26, 0xca, 0xdd, 0x6f, 0x9a, 0xc7, 0x61, 0x2b, + 0xb1, 0x32, 0x47, 0x00, 0xd9, 0x06, 0xb2, 0xd3, + 0xba, 0xa5, 0x66, 0xd9, 0x9b, 0x48, 0x8b, 0x5c, + 0x67, 0x31, 0xc2, 0x2b, 0xce, 0x39, 0xc4, 0x0d, + 0xea, 0x00, 0x4a, 0xf7, 0x9d, 0xb4, 0x0c, 0xdf, + 0x2b, 0x76, 0xeb, 0x9e, 0x41, 0xed, 0x55, 0xbc, + 0x6b, 0xce, 0xd7, 0xb8, 0x8b, 0x38, 0x1b, 0xb8, + 0xe9, 0x2a, 0x46, 0xe1, 0xa0, 0x48, 0xbd, 0xe6, + 0xd4, 0x88, 0xb6, 0x9a, 0xc4, 0xad, 0xd9, 0xc7, + 0x8e, 0x33, 0x4e, 0xdd, 0x76, 0x4c, 0x69, 0xf8, + 0xbc, 0xdf, 0x6c, 0xe5, 0xb0, 0xb4, 0x74, 0xf6, + 0x72, 0x38, 0xbd, 0x8d, 0x2f, 0x6e, 0x22, 0x1c, + 0xd3, 0x40, 0xab, 0x98, 0xb7, 0xb5, 0x6e, 0x2b, + 0x76, 0x4f, 0xa7, 0x67, 0x9a, 0x49, 0xaf, 0xea, + 0xdf, 0xfd, 0xe5, 0x4c, 0x0e, 0xd0, 0x15, 0xf0, + 0xda, 0x7e, 0xa8, 0x99, 0xd7, 0x6b, 0x97, 0x9b, + 0xa5, 0x62, 0x29, 0x6a, 0xc6, 0x9b, 0xa3, 0xc1, + 0xb7, 0x12, 0x62, 0x5a, 0xb1, 0x26, 0x25, 0xd3, + 0x56, 0x5d, 0x1b, 0x71, 0x26, 0x25, 0xab, 0x12, + 0x62, 0x4d, 0x4d, 0x1b, 0x71, 0x26, 0x25, 0xab, + 0x12, 0x62, 0x53, 0x12, 0x98, 0x86, 0xcc, 0x4a, + 0xd6, 0xdf, 0xf4, 0xfd, 0xaf, 0x69, 0xaa, 0xa1, + 0x89, 0x5b, 0x99, 0xfe, 0x9e, 0xb5, 0xed, 0x35, + 0x70, 0xf3, 0x1f, 0x6c, 0x7c, 0x5b, 0x3c, 0x84, + 0x7d, 0x73, 0xfb, 0x33, 0xfa, 0x5c, 0x68, 0x88, + 0xb3, 0x3d, 0x11, 0x7a, 0x8b, 0xf6, 0xac, 0xf3, + 0x9b, 0xe1, 0x0b, 0xca, 0xcb, 0x1d, 0x85, 0xed, + 0x71, 0xd4, 0x08, 0x27, 0xb8, 0x50, 0x73, 0xed, + 0x87, 0xf3, 0x38, 0xfe, 0xc4, 0x7d, 0x67, 0x28, + 0x2d, 0x2a, 0xe9, 0x9c, 0xdb, 0x64, 0x92, 0xcd, + 0x1c, 0xd9, 0x94, 0x86, 0x37, 0x39, 0xb8, 0x63, + 0xd3, 0x40, 0x40, 0x35, 0xdc, 0x07, 0x7d, 0x47, + 0xfb, 0x26, 0xc7, 0xf4, 0x93, 0xca, 0x3e, 0x8a, + 0x0a, 0xde, 0x94, 0xd2, 0xac, 0x9e, 0xc9, 0xb1, + 0xfd, 0x24, 0xf2, 0x8f, 0xa2, 0x9e, 0xc9, 0xb1, + 0xfd, 0x24, 0xf2, 0x8f, 0xa2, 0x82, 0xb7, 0xa5, + 0x34, 0xab, 0x27, 0xb2, 0x6c, 0x7f, 0x49, 0x3c, + 0xa3, 0xe8, 0xa7, 0xb2, 0x6c, 0x7f, 0x49, 0x3c, + 0xa3, 0xe8, 0xa0, 0xad, 0xe9, 0x4d, 0x2a, 0xc9, + 0xec, 0x9b, 0x1f, 0xd2, 0x4f, 0x28, 0xfa, 0x29, + 0xec, 0x9b, 0x1f, 0xd2, 0x4f, 0x28, 0xfa, 0x28, + 0x2b, 0x7a, 0x53, 0x4a, 0xb2, 0x7b, 0x26, 0xc7, + 0xf4, 0x93, 0xca, 0x3e, 0x8a, 0x7b, 0x26, 0xc7, + 0xf4, 0x93, 0xca, 0x3e, 0x8a, 0x0a, 0xde, 0x94, + 0xd2, 0xac, 0x9e, 0xc9, 0xb1, 0xfd, 0x24, 0xf2, + 0x8f, 0xa2, 0x9e, 0xc9, 0xb1, 0xfd, 0x24, 0xf2, + 0x8f, 0xa2, 0x82, 0xb7, 0xa5, 0x34, 0xab, 0x27, + 0xb2, 0x6c, 0x7f, 0x49, 0x3c, 0xa3, 0xe8, 0xa7, + 0xb2, 0x6c, 0x7f, 0x49, 0x3c, 0xa3, 0xe8, 0xa0, + 0xad, 0xe9, 0x4d, 0x2a, 0xc9, 0xec, 0x9b, 0x1f, + 0xd2, 0x4f, 0x28, 0xfa, 0x29, 0xec, 0x9b, 0x1f, + 0xd2, 0x4f, 0x28, 0xfa, 0x28, 0x2b, 0x7a, 0x53, + 0x4a, 0xb2, 0x7b, 0x26, 0xc7, 0xf4, 0x93, 0xca, + 0x3e, 0x8a, 0x7b, 0x26, 0xc7, 0xf4, 0x93, 0xca, + 0x3e, 0x8a, 0x08, 0xdc, 0x8e, 0xfe, 0xde, 0xc2, + 0x69, 0xe4, 0xb8, 0xa8, 0x12, 0x44, 0x58, 0xdc, + 0x20, 0x9f, 0x18, 0xf6, 0x94, 0x70, 0x73, 0x9a, + 0xe0, 0xe6, 0xe8, 0x73, 0x4d, 0x5a, 0x7b, 0x35, + 0xd0, 0x55, 0x8f, 0xd9, 0x36, 0x3f, 0xa4, 0x9e, + 0x53, 0xbd, 0x14, 0xf6, 0x4d, 0x8f, 0xe9, 0x27, + 0x84, 0xfa, 0x28, 0x34, 0x5c, 0xdd, 0x64, 0xb9, + 0xa9, 0x8e, 0x7b, 0xc9, 0x1f, 0x6b, 0x72, 0xd6, + 0x86, 0xca, 0x1a, 0xda, 0x87, 0x53, 0x79, 0x73, + 0x66, 0x19, 0x85, 0x9d, 0xed, 0xd5, 0xbc, 0x54, + 0x74, 0x79, 0x75, 0xb0, 0xc0, 0xd1, 0x42, 0x5c, + 0x5a, 0x35, 0xf8, 0xba, 0xf4, 0x85, 0x21, 0xec, + 0x9b, 0x1f, 0xab, 0xda, 0x4d, 0x35, 0xd3, 0x11, + 0xf4, 0x56, 0x3d, 0x93, 0x63, 0xfa, 0x49, 0xe5, + 0x3b, 0xd1, 0x41, 0xc3, 0x7b, 0x9d, 0xba, 0x4c, + 0xd6, 0x3b, 0xcb, 0x6d, 0x10, 0xdb, 0xd1, 0xb0, + 0xb6, 0x98, 0x7c, 0x5f, 0xce, 0xd0, 0x57, 0x3e, + 0x71, 0x3d, 0x9d, 0xc5, 0xf3, 0xa7, 0xb3, 0xc4, + 0x1b, 0x30, 0x0e, 0x7b, 0x1c, 0x30, 0xd1, 0xdb, + 0xba, 0x0a, 0x97, 0xf6, 0x4d, 0x8f, 0xe9, 0x27, + 0x94, 0xef, 0x45, 0x3d, 0x93, 0x63, 0xfa, 0x49, + 0xe5, 0x1f, 0x45, 0x04, 0x56, 0x49, 0x7b, 0x0d, + 0x8e, 0x60, 0xcb, 0x9b, 0x8a, 0x88, 0xda, 0xd7, + 0x03, 0x41, 0x53, 0xa4, 0x2e, 0x4b, 0x99, 0x1b, + 0x2d, 0xcc, 0xd2, 0x32, 0xb8, 0x5e, 0xf7, 0x38, + 0x76, 0x9c, 0x6a, 0xac, 0x1e, 0xc9, 0xb1, 0xfd, + 0x24, 0xf2, 0x8f, 0xa2, 0x9e, 0xc9, 0xb1, 0xfd, + 0x24, 0xf2, 0x8f, 0xa2, 0x82, 0xbb, 0x13, 0xe4, + 0x8a, 0x46, 0xcb, 0x19, 0xa3, 0xe3, 0x21, 0xcc, + 0xed, 0x83, 0x55, 0x37, 0x73, 0x75, 0x90, 0xe6, + 0x8e, 0x6d, 0xcd, 0xd4, 0x92, 0x5a, 0xdc, 0xe1, + 0x0d, 0x90, 0x34, 0x12, 0x0f, 0x69, 0x6f, 0xf6, + 0x4d, 0x8f, 0xd5, 0xed, 0x27, 0x7f, 0x59, 0xf4, + 0x53, 0xd9, 0x36, 0x43, 0xa4, 0x9e, 0x53, 0xbd, + 0x14, 0x11, 0xd9, 0xb6, 0x65, 0x6f, 0x71, 0x1c, + 0x16, 0x76, 0x4c, 0x2c, 0xb3, 0xb6, 0x1e, 0x29, + 0x3e, 0x53, 0x8e, 0xfa, 0x8c, 0xd2, 0xac, 0x9e, + 0xc9, 0xb1, 0xfd, 0x24, 0xf2, 0x8f, 0xa2, 0x9e, + 0xc9, 0xb1, 0xfd, 0x24, 0xf2, 0x8f, 0xa2, 0x82, + 0xb7, 0xa5, 0x34, 0xab, 0x27, 0xb2, 0x6c, 0x7f, + 0x49, 0x3c, 0xa3, 0xe8, 0xa7, 0xb2, 0x6c, 0x7f, + 0x49, 0x3c, 0xa3, 0xe8, 0xa0, 0xad, 0xe9, 0x4d, + 0x2a, 0xc9, 0xec, 0x9b, 0x1f, 0xd2, 0x4f, 0x28, + 0xfa, 0x29, 0xec, 0x9b, 0x1f, 0xd2, 0x4f, 0x28, + 0xfa, 0x28, 0x2b, 0x7a, 0x53, 0x4a, 0xb2, 0x7b, + 0x26, 0xc7, 0xf4, 0x93, 0xca, 0x3e, 0x8a, 0x7b, + 0x26, 0xc7, 0xf4, 0x93, 0xca, 0x3e, 0x8a, 0x0a, + 0xde, 0x94, 0xd2, 0xac, 0x9e, 0xc9, 0xb1, 0xfd, + 0x24, 0xf2, 0x8f, 0xa2, 0x9e, 0xc9, 0xb1, 0xfd, + 0x24, 0xf2, 0x8f, 0xa2, 0x82, 0xb7, 0xa5, 0x34, + 0xab, 0x27, 0xb2, 0x6c, 0x7f, 0x49, 0x3c, 0xa3, + 0xe8, 0xa7, 0xb2, 0x6c, 0x7f, 0x49, 0x3c, 0xa3, + 0xe8, 0xa0, 0xad, 0xe9, 0x4d, 0x2a, 0xc9, 0xec, + 0x9b, 0x1f, 0xd2, 0x4f, 0x28, 0xfa, 0x29, 0xec, + 0x9b, 0x1f, 0xd2, 0x4f, 0x28, 0xfa, 0x28, 0x2b, + 0x7a, 0x53, 0x4a, 0xb2, 0x7b, 0x26, 0xc7, 0xf4, + 0x93, 0xca, 0x3e, 0x8a, 0x7b, 0x26, 0xc7, 0xf4, + 0x93, 0xca, 0x3e, 0x8a, 0x0a, 0xde, 0x95, 0x25, + 0xb3, 0x7f, 0xce, 0x6d, 0xfb, 0x6e, 0xfa, 0x85, + 0x49, 0x7b, 0x26, 0xc7, 0xf4, 0x93, 0xca, 0x3e, + 0x8a, 0xdf, 0x97, 0xc5, 0xb3, 0x10, 0x5e, 0xc5, + 0x25, 0xad, 0xc1, 0x75, 0xc5, 0x70, 0xc6, 0xd2, + 0x49, 0xa9, 0x70, 0xc3, 0xf3, 0x7b, 0x28, 0x33, + 0x98, 0x7b, 0xec, 0xde, 0x77, 0xc8, 0x17, 0x3a, + 0xea, 0xcd, 0x18, 0x1b, 0x7a, 0xfa, 0x7e, 0x70, + 0x0e, 0x3d, 0xb2, 0x17, 0x2a, 0x02, 0x22, 0x20, + 0x6d, 0x67, 0xb8, 0x58, 0xff, 0x00, 0x6b, 0xea, + 0x85, 0x58, 0x56, 0x7d, 0xac, 0xf7, 0x0b, 0x1f, + 0xed, 0x7d, 0x50, 0xab, 0x08, 0x08, 0x88, 0x80, + 0xba, 0x72, 0xeb, 0x09, 0x73, 0x0b, 0xa6, 0xdb, + 0x44, 0x43, 0x4b, 0xb4, 0xb9, 0xc7, 0x50, 0x68, + 0xd6, 0x57, 0x32, 0xe8, 0xb2, 0xbf, 0xb8, 0xb1, + 0x91, 0xd2, 0xdb, 0xb8, 0x35, 0xcf, 0x61, 0x63, + 0x89, 0x15, 0xf1, 0x4e, 0x9f, 0x91, 0x04, 0xa4, + 0x79, 0x2e, 0x51, 0x73, 0x33, 0xac, 0xed, 0xaf, + 0x5c, 0xeb, 0xb1, 0x5c, 0x38, 0x9b, 0xe2, 0xb8, + 0x8d, 0xe2, 0xa1, 0xa5, 0x89, 0xf0, 0xca, 0xe8, + 0x64, 0x14, 0x92, 0x32, 0x5a, 0xe1, 0xd9, 0x0a, + 0x6f, 0x23, 0xca, 0xae, 0xa1, 0x9e, 0x2c, 0xd6, + 0xe0, 0x08, 0xed, 0x63, 0x06, 0x5d, 0x1e, 0x33, + 0x8d, 0x41, 0x14, 0xc2, 0xde, 0xda, 0xd5, 0x61, + 0x77, 0x67, 0x7b, 0x9b, 0xce, 0xdb, 0xa8, 0x9a, + 0xe8, 0xaf, 0xdc, 0xee, 0x6d, 0xce, 0x02, 0xac, + 0x71, 0xf2, 0x4a, 0x08, 0x6a, 0x1d, 0xd4, 0x53, + 0xd6, 0xd9, 0x5c, 0x59, 0x5c, 0x17, 0x97, 0x79, + 0x84, 0x6d, 0x93, 0x9a, 0x26, 0x1b, 0x68, 0xde, + 0x05, 0x1c, 0xe3, 0xa9, 0xca, 0x06, 0xb5, 0xd3, + 0xbf, 0xbc, 0x83, 0xbf, 0x25, 0xcb, 0x9b, 0x98, + 0xde, 0x88, 0x64, 0x24, 0x44, 0xc6, 0x39, 0xf2, + 0x91, 0xa0, 0xd0, 0x68, 0x1d, 0xf2, 0xbd, 0x67, + 0x99, 0x6c, 0x79, 0x75, 0xdb, 0x62, 0x89, 0xc5, + 0xf1, 0x48, 0xc0, 0xf8, 0xdc, 0xe3, 0x5d, 0xfe, + 0x25, 0xd7, 0x93, 0x9f, 0x64, 0xc9, 0x2f, 0xef, + 0xff, 0x00, 0x3e, 0x4a, 0x41, 0x11, 0xee, 0x69, + 0xa7, 0x74, 0xa6, 0x6a, 0x3d, 0xaf, 0x67, 0xac, + 0x2e, 0xc7, 0x97, 0x07, 0xea, 0x64, 0x3d, 0xed, + 0x3c, 0x94, 0x10, 0x7b, 0xb4, 0x4e, 0xce, 0xe7, + 0x0a, 0xb0, 0x46, 0x32, 0xfb, 0x4d, 0x9f, 0xb6, + 0xbe, 0x96, 0xd9, 0x93, 0x5c, 0x73, 0x85, 0xac, + 0xc5, 0xa0, 0x17, 0x55, 0xde, 0x56, 0xf8, 0xa0, + 0x58, 0xbb, 0x36, 0xd9, 0x9e, 0x43, 0x25, 0xf8, + 0xb6, 0x65, 0xbd, 0xc5, 0xbb, 0xc3, 0x3f, 0x56, + 0x00, 0x06, 0xa4, 0x6f, 0x79, 0xc8, 0x20, 0x2b, + 0x4d, 0x7c, 0x2b, 0x04, 0x9c, 0x24, 0x81, 0xa8, + 0x55, 0x4e, 0x8b, 0xbc, 0xbf, 0x2c, 0xcb, 0xed, + 0xbd, 0x9a, 0x28, 0x6e, 0x6e, 0xe7, 0xf1, 0xa6, + 0x74, 0x94, 0x76, 0x1e, 0xc2, 0xf3, 0x9e, 0x43, + 0x6d, 0x2e, 0x5b, 0x69, 0x99, 0x45, 0x03, 0x6d, + 0xa4, 0x9f, 0x13, 0x64, 0x63, 0x45, 0x06, 0xa3, + 0xb9, 0xdc, 0x41, 0xcf, 0x9d, 0x65, 0xd0, 0x65, + 0xef, 0xb7, 0x6c, 0x25, 0xcf, 0x12, 0xc4, 0x24, + 0x76, 0x23, 0x53, 0xa5, 0x46, 0xd7, 0x7d, 0x58, + 0xf3, 0xdb, 0x53, 0x77, 0x98, 0x65, 0xb6, 0xd5, + 0xa7, 0x3b, 0x0b, 0x1a, 0x4e, 0xf0, 0xae, 0x95, + 0x8b, 0xac, 0xca, 0xc6, 0xc2, 0xf8, 0xd8, 0x45, + 0x65, 0x0b, 0xed, 0x63, 0x70, 0x8e, 0x57, 0x39, + 0xa0, 0xbc, 0x9d, 0x18, 0x8f, 0x71, 0x05, 0x77, + 0x4a, 0x29, 0xf9, 0x72, 0x18, 0xbe, 0x21, 0x65, + 0xa3, 0x7d, 0xd6, 0x50, 0x27, 0xa7, 0xf5, 0x74, + 0xd4, 0x7d, 0x15, 0xed, 0x99, 0x86, 0x59, 0x77, + 0x98, 0xb3, 0x2f, 0x75, 0x8c, 0x4c, 0xb7, 0xc7, + 0x82, 0x39, 0x1a, 0x00, 0x78, 0x73, 0x7e, 0x77, + 0x63, 0x42, 0x0a, 0xed, 0x41, 0xd5, 0xc2, 0xb6, + 0xda, 0xdb, 0x49, 0x77, 0x71, 0x1d, 0xbc, 0x5e, + 0x5c, 0x8e, 0x0d, 0x04, 0xee, 0x76, 0x57, 0x56, + 0x7d, 0x14, 0x50, 0xe6, 0xd3, 0xc7, 0x13, 0x43, + 0x18, 0xd2, 0x00, 0x6b, 0x45, 0x00, 0xf1, 0x41, + 0x5d, 0x7b, 0x25, 0x18, 0x76, 0x6d, 0x88, 0xff, + 0x00, 0xc3, 0x8d, 0xc4, 0x78, 0x10, 0x7b, 0x96, + 0xcb, 0x67, 0x2d, 0x25, 0xf6, 0x4b, 0x99, 0xa7, + 0x7c, 0xed, 0x38, 0x64, 0x91, 0x9e, 0x43, 0x5d, + 0xc0, 0xb8, 0x73, 0x8c, 0xac, 0xe5, 0xd7, 0x0d, + 0x63, 0x5d, 0xce, 0xc1, 0x28, 0x0f, 0x85, 0xfa, + 0x2a, 0x46, 0xef, 0x02, 0xe3, 0xb8, 0x77, 0x39, + 0x3c, 0xae, 0x76, 0x92, 0xe7, 0xb8, 0x9a, 0xef, + 0x92, 0xbb, 0xe0, 0x96, 0xeb, 0x39, 0xbb, 0xb4, + 0xb1, 0xb8, 0x7d, 0x58, 0xcf, 0x15, 0xa4, 0x00, + 0x0b, 0x59, 0x4f, 0x1b, 0x57, 0x69, 0x04, 0x6d, + 0x46, 0xaa, 0xe9, 0xf9, 0x53, 0x77, 0x7b, 0x7c, + 0x95, 0x61, 0x9b, 0x34, 0xb0, 0x87, 0x32, 0x39, + 0x70, 0xb1, 0x85, 0xd6, 0x6d, 0x7f, 0x34, 0x5d, + 0x4a, 0xbe, 0xa7, 0x46, 0x2a, 0xf6, 0xd2, 0xd7, + 0x2a, 0xb6, 0xb7, 0xda, 0x7f, 0x62, 0x73, 0x04, + 0x96, 0xe5, 0x8e, 0x7c, 0x61, 0xc2, 0xa3, 0x09, + 0x6d, 0x40, 0x3d, 0xa2, 0x82, 0xbd, 0xa3, 0x74, + 0xa1, 0xd1, 0xbd, 0xda, 0xae, 0x95, 0x64, 0xb1, + 0xbd, 0xcb, 0xdd, 0x99, 0xf5, 0x53, 0x2c, 0x63, + 0x36, 0xef, 0x73, 0xa3, 0xe7, 0x1c, 0x01, 0x79, + 0x22, 0xbe, 0x31, 0xd1, 0xa9, 0x62, 0x2b, 0xac, + 0xbe, 0xd3, 0x33, 0x19, 0x4c, 0x76, 0x71, 0xc9, + 0x01, 0x93, 0x9a, 0x92, 0x57, 0xe9, 0x79, 0x71, + 0x3a, 0x69, 0xe6, 0xa0, 0xad, 0xd7, 0x7d, 0x64, + 0x9a, 0x1a, 0x1e, 0xfe, 0x85, 0x61, 0xb2, 0xcb, + 0xad, 0x59, 0xb5, 0x12, 0xd9, 0xba, 0x36, 0xbe, + 0x06, 0xb5, 0xc4, 0x31, 0xc2, 0xa0, 0x55, 0xa0, + 0x8f, 0x0a, 0x5b, 0x66, 0x19, 0x69, 0xbe, 0x19, + 0x68, 0xb2, 0x8b, 0xd9, 0x1e, 0xf3, 0x10, 0x93, + 0x5b, 0xf1, 0x12, 0x46, 0x22, 0x7b, 0x88, 0x2b, + 0xda, 0x7f, 0xa1, 0x2b, 0xb9, 0xac, 0x9e, 0xc8, + 0x53, 0x56, 0xf6, 0x19, 0x75, 0x9e, 0x71, 0x75, + 0x15, 0xe9, 0x69, 0x86, 0xd8, 0x39, 0xf1, 0x32, + 0x43, 0x4c, 0x75, 0xf1, 0x9a, 0x34, 0xf6, 0x0a, + 0xea, 0xca, 0xee, 0xad, 0xf3, 0x9b, 0x89, 0x2c, + 0x67, 0xb2, 0x86, 0x36, 0x16, 0x12, 0xc7, 0xc6, + 0xda, 0x16, 0xd3, 0x7c, 0xa0, 0xad, 0xe8, 0xa8, + 0x15, 0xd7, 0xa1, 0x2a, 0x0e, 0xa3, 0x55, 0x3b, + 0x90, 0x5b, 0x58, 0xc9, 0x63, 0x98, 0x3a, 0xf1, + 0xa1, 0xcd, 0x87, 0x0f, 0x8c, 0x75, 0x86, 0xe9, + 0xd4, 0x7b, 0x8b, 0x10, 0x5d, 0xe5, 0x99, 0x96, + 0x61, 0x03, 0x2e, 0x21, 0x8e, 0xca, 0xd2, 0xdd, + 0xae, 0x34, 0x26, 0x98, 0xc6, 0x8c, 0x21, 0xc6, + 0x81, 0x04, 0x15, 0x57, 0x6e, 0x53, 0x97, 0x8c, + 0xc6, 0xf9, 0xb6, 0x85, 0xfc, 0xde, 0x26, 0x97, + 0x17, 0x01, 0x53, 0xa0, 0x57, 0x51, 0xa2, 0x98, + 0xcb, 0xf3, 0x0b, 0x4c, 0xca, 0xfb, 0xd8, 0x1f, + 0x63, 0x08, 0xb6, 0x93, 0x10, 0x61, 0x6b, 0x46, + 0x26, 0xd0, 0x6b, 0xa8, 0x58, 0xd9, 0xd9, 0x22, + 0x83, 0x36, 0x7d, 0x80, 0x89, 0x84, 0x87, 0xcb, + 0x49, 0xcf, 0x97, 0x41, 0xa0, 0x37, 0xbc, 0x82, + 0xbd, 0x2b, 0x30, 0x4a, 0xf8, 0xeb, 0x50, 0xc2, + 0x45, 0x69, 0xbc, 0x68, 0xbc, 0x8d, 0x3a, 0x94, + 0xfd, 0xb4, 0x76, 0xf9, 0xc6, 0x6f, 0x85, 0xf6, + 0xec, 0x82, 0x1b, 0x40, 0xf7, 0xca, 0x23, 0xd3, + 0x8e, 0x84, 0x79, 0x5d, 0xd5, 0xea, 0xcf, 0x31, + 0xb2, 0xcc, 0x6f, 0x7d, 0x82, 0x4b, 0x28, 0x62, + 0xb7, 0x98, 0x96, 0xc2, 0xf6, 0x00, 0x1e, 0xd2, + 0x01, 0xa1, 0x3c, 0x08, 0x2b, 0xdb, 0xbd, 0x84, + 0x1a, 0x7b, 0x9a, 0xe8, 0xac, 0x39, 0x3e, 0x5b, + 0x6c, 0xd9, 0xb3, 0x38, 0x2e, 0x9a, 0x1e, 0xdb, + 0x70, 0xe6, 0x87, 0x10, 0x0b, 0x80, 0x05, 0xd5, + 0x73, 0x6b, 0xd8, 0x0b, 0xcd, 0x94, 0x96, 0x19, + 0xc6, 0x61, 0x6f, 0x64, 0x2d, 0x5b, 0x6f, 0x6f, + 0x0e, 0x27, 0x80, 0x0f, 0x8c, 0xf0, 0xd1, 0xa0, + 0x3a, 0x80, 0x76, 0xd0, 0x40, 0x68, 0xa6, 0xb1, + 0xe1, 0x08, 0xac, 0x51, 0x66, 0x56, 0x33, 0xde, + 0xc9, 0x61, 0x7b, 0x69, 0x05, 0xb5, 0xaf, 0x8c, + 0xd6, 0xbf, 0x0d, 0x1c, 0x08, 0xd0, 0x34, 0xd1, + 0x40, 0x4a, 0xc6, 0x32, 0x57, 0xb1, 0x8e, 0xc6, + 0xc6, 0xb8, 0x86, 0xbb, 0x7c, 0x03, 0xa0, 0xa0, + 0xf0, 0x88, 0x88, 0x0b, 0x75, 0xa7, 0xbd, 0xc1, + 0xf6, 0xac, 0xfa, 0xcb, 0x4a, 0xdd, 0x69, 0xef, + 0x70, 0x7d, 0xab, 0x3e, 0xb2, 0x0b, 0x86, 0x75, + 0xef, 0x4d, 0xf3, 0x07, 0x84, 0xae, 0x05, 0xdf, + 0x9d, 0x7b, 0xd3, 0x7c, 0xc1, 0xe1, 0x2b, 0x81, + 0x06, 0x63, 0xfd, 0xa3, 0x7b, 0x6a, 0x58, 0xa8, + 0x98, 0xff, 0x00, 0x68, 0xde, 0xda, 0x96, 0x28, + 0x30, 0xb8, 0x33, 0x0f, 0x7a, 0xb4, 0xfb, 0x4f, + 0x94, 0x2e, 0xf5, 0xc1, 0x98, 0x7b, 0xd5, 0xa7, + 0xda, 0x7c, 0xa1, 0x03, 0x2f, 0xf7, 0x9b, 0xbf, + 0x3c, 0xfd, 0x62, 0xbb, 0xf4, 0x6f, 0x85, 0xc1, + 0x97, 0xfb, 0xcd, 0xdf, 0x9e, 0x7e, 0xb1, 0x5d, + 0xc8, 0x32, 0xed, 0x47, 0x4d, 0x54, 0x49, 0xd6, + 0x54, 0xa9, 0xd4, 0x54, 0x51, 0xd6, 0x50, 0x37, + 0x56, 0xdd, 0xa0, 0x34, 0xd9, 0xe8, 0x3c, 0xf6, + 0x7f, 0x79, 0x69, 0xd3, 0x5a, 0x05, 0xbb, 0x3b, + 0x69, 0x97, 0x66, 0x98, 0xf6, 0xe9, 0xe6, 0x9c, + 0xc7, 0x1e, 0xe1, 0x2d, 0xfe, 0xf2, 0xb5, 0x3e, + 0xe8, 0x9f, 0x7b, 0x9e, 0x6f, 0xe1, 0x5f, 0xe0, + 0xaa, 0x62, 0x4c, 0x4b, 0x5e, 0x25, 0x9c, 0x4b, + 0x66, 0xaf, 0x22, 0x23, 0xc3, 0xe0, 0xf7, 0x89, + 0x31, 0x2f, 0x18, 0x93, 0x12, 0x27, 0x47, 0xbc, + 0x49, 0x89, 0x78, 0xc4, 0x98, 0x90, 0xd1, 0xef, + 0x12, 0x62, 0xf9, 0x7c, 0x0b, 0x5e, 0x24, 0xc4, + 0x37, 0xe8, 0x9a, 0x91, 0x0f, 0xa0, 0x58, 0xc6, + 0xe9, 0xb2, 0x18, 0xa3, 0x6e, 0xb9, 0x20, 0x2d, + 0x15, 0xd1, 0xa4, 0x82, 0x14, 0x56, 0x49, 0xb3, + 0x97, 0x96, 0xd7, 0x8c, 0xb9, 0xbc, 0x73, 0x00, + 0x88, 0x78, 0xac, 0x69, 0xa9, 0x2e, 0xdf, 0x50, + 0x70, 0xed, 0x06, 0x6d, 0x04, 0x4d, 0x8a, 0x2b, + 0x92, 0xd8, 0xd8, 0x28, 0xd6, 0x86, 0xb4, 0x80, + 0x3b, 0xa1, 0x66, 0x4d, 0xa0, 0xce, 0x24, 0x61, + 0x63, 0xee, 0xdc, 0x01, 0xde, 0x0d, 0x69, 0xe1, + 0x68, 0x5c, 0x76, 0x5f, 0xea, 0xd3, 0xc2, 0xcd, + 0x7d, 0xfc, 0x33, 0xb3, 0x74, 0x4c, 0xcd, 0x22, + 0x21, 0x2b, 0xb4, 0xf7, 0xd1, 0x4b, 0x7f, 0x6f, + 0x6d, 0x50, 0xe1, 0x07, 0x8d, 0x29, 0x1b, 0x85, + 0xc4, 0x0a, 0x29, 0x6d, 0xa1, 0xb7, 0xba, 0xb9, + 0xcb, 0x43, 0x2c, 0x81, 0x7d, 0x5c, 0xd2, 0xe6, + 0xb4, 0xd3, 0x13, 0x28, 0x7f, 0xa1, 0x51, 0x4b, + 0xab, 0x52, 0x74, 0x93, 0xae, 0xbb, 0xaa, 0x46, + 0x0d, 0xa3, 0xcd, 0x60, 0x84, 0x42, 0xc9, 0xb1, + 0x31, 0xba, 0x01, 0x70, 0xa9, 0x03, 0x79, 0x4c, + 0xe3, 0xfb, 0x76, 0xfe, 0xaa, 0xb5, 0xf3, 0x11, + 0x3d, 0xc9, 0xbf, 0x0d, 0xfe, 0x1a, 0x72, 0x5b, + 0x32, 0x2b, 0x39, 0xec, 0xf2, 0xa1, 0x0c, 0xff, + 0x00, 0xb5, 0xf1, 0xde, 0xe6, 0xeb, 0xa6, 0x2d, + 0xca, 0xa8, 0x0d, 0x91, 0x70, 0xeb, 0x57, 0x83, + 0xa0, 0x98, 0x9e, 0x3e, 0x93, 0x4a, 0x8e, 0x8f, + 0x3d, 0xcd, 0x62, 0x0e, 0xe6, 0xee, 0x5c, 0x39, + 0xc7, 0x17, 0x3e, 0xa1, 0xa4, 0x12, 0x7b, 0x61, + 0x72, 0xc3, 0x77, 0x3c, 0x13, 0x8b, 0x88, 0x5e, + 0x59, 0x28, 0xaf, 0x8e, 0x3b, 0x3a, 0xf4, 0x50, + 0x68, 0x4a, 0xd2, 0x74, 0xb6, 0xb3, 0xf7, 0x26, + 0xd9, 0xeb, 0x33, 0x8e, 0x63, 0xf5, 0x16, 0x8d, + 0xa0, 0xb0, 0x9f, 0xac, 0xa1, 0xbf, 0x20, 0x1b, + 0x46, 0x98, 0xc4, 0xae, 0xae, 0x91, 0xe3, 0x81, + 0xab, 0xba, 0xbb, 0x76, 0x92, 0xd6, 0xf6, 0xe6, + 0xcd, 0x91, 0xd9, 0xb4, 0xc8, 0x71, 0x83, 0x23, + 0x1a, 0x68, 0x4b, 0x69, 0xa3, 0xb8, 0xaa, 0x97, + 0x59, 0xee, 0x67, 0x77, 0x01, 0xb7, 0x9e, 0x6c, + 0x51, 0x3f, 0xca, 0x18, 0x5a, 0x09, 0xa6, 0x9d, + 0x61, 0x6d, 0x87, 0x69, 0x73, 0x68, 0x62, 0x10, + 0xb2, 0x50, 0x43, 0x05, 0x1a, 0xe7, 0x00, 0x48, + 0x03, 0x7c, 0xa8, 0xd9, 0x6d, 0x2b, 0xe1, 0xf4, + 0x9d, 0xec, 0x5f, 0xee, 0x47, 0x1a, 0xc6, 0x4e, + 0x5e, 0x2b, 0x66, 0x55, 0x69, 0x25, 0x9e, 0x4c, + 0x20, 0x96, 0x82, 0x46, 0xb5, 0xe5, 0xcd, 0x1b, + 0x84, 0xd7, 0x42, 0xa1, 0x87, 0x68, 0x0b, 0xae, + 0x3c, 0xfb, 0x36, 0x89, 0xae, 0x6c, 0x77, 0x0e, + 0xa3, 0xc9, 0x73, 0x81, 0x0d, 0x75, 0x4b, 0xb5, + 0xeb, 0x0b, 0x8b, 0x15, 0x74, 0xef, 0xab, 0x63, + 0xac, 0xd6, 0x66, 0x67, 0xda, 0xe7, 0x9b, 0x25, + 0x6f, 0x14, 0x8a, 0x7e, 0xa4, 0x69, 0xc7, 0xc5, + 0x39, 0xb2, 0x86, 0xb9, 0xb3, 0x7e, 0xcd, 0xcb, + 0x7e, 0xd9, 0x1a, 0x5e, 0xc1, 0x4f, 0x56, 0x7e, + 0xb1, 0x50, 0x36, 0x97, 0xb7, 0x16, 0x72, 0x89, + 0xad, 0xdf, 0xcd, 0xc9, 0x4a, 0x62, 0xd1, 0xab, + 0xb4, 0xe5, 0xea, 0xef, 0x30, 0xbb, 0xbd, 0x7b, + 0x5f, 0x75, 0x2f, 0x3a, 0xe6, 0x0a, 0x02, 0x40, + 0x1f, 0x54, 0x26, 0xdf, 0xaf, 0x77, 0xb0, 0x8c, + 0x91, 0x18, 0x7b, 0x7a, 0x71, 0xe6, 0xd7, 0x89, + 0x5d, 0x36, 0x54, 0xd7, 0x26, 0x6f, 0x61, 0xd2, + 0x78, 0x55, 0x1f, 0x12, 0xec, 0xb5, 0xce, 0x73, + 0x2b, 0x48, 0x79, 0x8b, 0x79, 0xcc, 0x71, 0x8a, + 0x90, 0xdc, 0x2d, 0x23, 0x4e, 0xbd, 0x34, 0x53, + 0x92, 0x26, 0xf1, 0xa7, 0xbd, 0x5f, 0x2f, 0x78, + 0xc5, 0x7d, 0xd3, 0x1e, 0xcd, 0x34, 0x6b, 0x12, + 0x98, 0xee, 0x79, 0xcf, 0x99, 0x26, 0x33, 0xbf, + 0x46, 0xba, 0xb4, 0xee, 0xab, 0x96, 0x7b, 0x6d, + 0x26, 0x67, 0x94, 0xb5, 0xd6, 0xa3, 0x9c, 0x75, + 0x5b, 0x2b, 0x1a, 0x37, 0x45, 0x35, 0x77, 0xd5, + 0x18, 0xbc, 0xb8, 0x92, 0x74, 0x92, 0x6b, 0xa5, + 0x76, 0xd9, 0x67, 0xb9, 0x9d, 0x93, 0x39, 0xa8, + 0x25, 0xfd, 0x50, 0xd4, 0xc7, 0x0a, 0x81, 0xe6, + 0xa5, 0xeb, 0x33, 0x31, 0x68, 0xf1, 0x85, 0xb0, + 0x64, 0xad, 0x62, 0xf5, 0xb7, 0x85, 0xa5, 0x6c, + 0xc8, 0xed, 0xe4, 0xcb, 0x32, 0x97, 0x3a, 0xec, + 0x73, 0x6e, 0xab, 0xa5, 0x7b, 0x49, 0xf2, 0x45, + 0x34, 0x0e, 0xda, 0x88, 0xd9, 0x39, 0x84, 0x99, + 0xad, 0xc3, 0xce, 0x83, 0x23, 0x1e, 0xe6, 0x8e, + 0xc1, 0x7b, 0x4a, 0x8a, 0xbd, 0xce, 0xf3, 0x1b, + 0xe6, 0x18, 0xee, 0x25, 0xfd, 0x51, 0xd7, 0x1b, + 0x74, 0x02, 0x7b, 0x9b, 0x8b, 0x9a, 0xde, 0xea, + 0xe2, 0xd6, 0x51, 0x35, 0xb3, 0xcc, 0x72, 0xb4, + 0x50, 0x38, 0x6f, 0x1d, 0xf0, 0x55, 0x76, 0x4e, + 0x96, 0xd6, 0x78, 0xd9, 0x7b, 0x66, 0xae, 0xec, + 0x5b, 0x62, 0x76, 0xe2, 0x9f, 0x9a, 0xcd, 0x9f, + 0x5a, 0xdc, 0xc1, 0x9a, 0xc7, 0x9a, 0x86, 0x83, + 0x6b, 0x19, 0x8b, 0x13, 0xab, 0xa4, 0x10, 0x70, + 0xea, 0x5d, 0xbb, 0x49, 0x65, 0x3d, 0xfd, 0x8c, + 0x6f, 0xb3, 0x6f, 0x3a, 0xf6, 0x3b, 0x18, 0x6b, + 0x69, 0xa5, 0xa4, 0x11, 0xa3, 0x52, 0xaa, 0x5d, + 0x67, 0x99, 0x95, 0xe4, 0x26, 0x0b, 0x89, 0xb1, + 0x44, 0xea, 0x62, 0x6e, 0x10, 0x2a, 0x41, 0xae, + 0xf2, 0xf7, 0x69, 0x9f, 0xe6, 0x76, 0x71, 0x88, + 0xa2, 0x96, 0xb1, 0x8f, 0x25, 0x8f, 0x18, 0xa9, + 0xc3, 0xa5, 0x46, 0xcb, 0x46, 0xde, 0x31, 0xad, + 0x56, 0xef, 0x63, 0x99, 0xbf, 0x8c, 0x46, 0x4f, + 0x14, 0xd7, 0x51, 0x59, 0x5a, 0xe4, 0xce, 0xb8, + 0xbf, 0x67, 0xfd, 0xcb, 0x58, 0x5c, 0x74, 0x9a, + 0x62, 0x3e, 0x48, 0xa2, 0xec, 0xd9, 0xb9, 0x9b, + 0x73, 0x92, 0xf3, 0x20, 0x8c, 0x6c, 0x2f, 0x8d, + 0xc3, 0x7a, 0xb5, 0xa7, 0x73, 0x4a, 0xaa, 0xdf, + 0x67, 0x17, 0xf7, 0xf4, 0x17, 0x32, 0xe2, 0x60, + 0xd2, 0x18, 0x34, 0x36, 0xbb, 0xe4, 0x0d, 0xd5, + 0xae, 0xd3, 0x30, 0xbb, 0xb2, 0x93, 0x9d, 0xb6, + 0x90, 0xb1, 0xc7, 0x41, 0xdd, 0x04, 0x76, 0x41, + 0xd6, 0x9d, 0xb9, 0x9a, 0xf8, 0xf1, 0xd7, 0x55, + 0x63, 0x35, 0x29, 0x6a, 0xe9, 0x13, 0x35, 0x8a, + 0xec, 0xd7, 0xda, 0xb0, 0x64, 0x59, 0x05, 0xc4, + 0x77, 0x72, 0xba, 0xfe, 0x06, 0x98, 0x58, 0xdc, + 0x0d, 0xc5, 0x42, 0x1c, 0x6b, 0xa0, 0xb5, 0x73, + 0xce, 0xeb, 0x66, 0xed, 0x44, 0x2c, 0xb7, 0x0d, + 0x64, 0x51, 0xcb, 0x1b, 0x7c, 0x5d, 0x0d, 0xa8, + 0x1e, 0x37, 0x7d, 0x71, 0xcb, 0xb4, 0xd9, 0xc4, + 0xac, 0x31, 0xf3, 0xa1, 0x80, 0xe8, 0x25, 0xad, + 0xa3, 0xa9, 0xdb, 0xdf, 0x51, 0x82, 0x47, 0x07, + 0x63, 0x04, 0xe2, 0x07, 0x16, 0x2d, 0x46, 0xa3, + 0x75, 0x4c, 0x56, 0xda, 0xda, 0x6d, 0xed, 0x8d, + 0x11, 0x7b, 0xe3, 0xac, 0x52, 0xb4, 0x8f, 0xb6, + 0xdb, 0xe6, 0x67, 0xc5, 0x76, 0xda, 0x8c, 0xbe, + 0xee, 0xf6, 0xde, 0x23, 0x6c, 0x03, 0x8c, 0x45, + 0xc5, 0xe0, 0x9a, 0x68, 0xa7, 0xf4, 0x2d, 0x99, + 0x51, 0xff, 0x00, 0xeb, 0x6c, 0x3a, 0xbf, 0x52, + 0xff, 0x00, 0x01, 0x55, 0x63, 0xb4, 0x79, 0xcb, + 0x98, 0x63, 0x37, 0x15, 0x04, 0x10, 0x6a, 0xd1, + 0xa4, 0x1e, 0xe2, 0xd5, 0x16, 0x75, 0x99, 0xc3, + 0x6c, 0x2d, 0x62, 0x9c, 0xb6, 0x16, 0xb4, 0xb4, + 0x36, 0x8d, 0xa5, 0x0e, 0xf9, 0x21, 0x57, 0xb7, + 0x6d, 0x22, 0x35, 0x8e, 0x13, 0xaa, 0xf3, 0x9f, + 0x1c, 0x5e, 0x6f, 0x11, 0x3a, 0xda, 0xbb, 0x56, + 0x3d, 0x8f, 0xb9, 0x63, 0xec, 0xa4, 0x80, 0x91, + 0x8a, 0x27, 0xe2, 0xa0, 0xf9, 0xae, 0x1a, 0xd6, + 0x8c, 0xa7, 0x24, 0xbe, 0x83, 0x3c, 0x32, 0xca, + 0xca, 0x41, 0x11, 0x7b, 0x84, 0x95, 0xd0, 0xec, + 0x55, 0xc3, 0x84, 0x77, 0x55, 0x6e, 0xd6, 0xf2, + 0x7b, 0x49, 0x44, 0xb6, 0xd2, 0x18, 0xde, 0x34, + 0x68, 0xde, 0xde, 0xec, 0xa9, 0x07, 0xed, 0x46, + 0x6e, 0xe6, 0x16, 0x73, 0xa1, 0xa4, 0xe8, 0xc4, + 0x1a, 0x31, 0x71, 0x29, 0x9a, 0x5b, 0x5b, 0x69, + 0xfa, 0xca, 0xd3, 0x26, 0x3d, 0x98, 0xf7, 0x71, + 0xb6, 0x29, 0xd6, 0x13, 0x19, 0xc5, 0xd3, 0x64, + 0xda, 0x0c, 0xbe, 0x06, 0x1a, 0x98, 0x5e, 0x0b, + 0xbb, 0x6e, 0x23, 0x47, 0x79, 0x7b, 0xdb, 0x13, + 0x4b, 0x4b, 0x6f, 0xb4, 0x3e, 0x05, 0x53, 0x6d, + 0xcc, 0xcc, 0xb8, 0x17, 0x21, 0xe4, 0xcc, 0x1d, + 0x8c, 0xc8, 0x74, 0x9c, 0x5b, 0xfa, 0x6a, 0xb7, + 0x5e, 0x66, 0xb9, 0x85, 0xeb, 0x1a, 0xdb, 0xa9, + 0x8c, 0xad, 0x61, 0xc4, 0xd0, 0x43, 0x46, 0x9f, + 0xec, 0x80, 0x54, 0xd6, 0x9a, 0x5a, 0x93, 0xd2, + 0x8b, 0x66, 0x89, 0xae, 0x58, 0x9f, 0xfe, 0xe4, + 0xeb, 0x1e, 0xe5, 0xc3, 0x24, 0x35, 0xd9, 0xc6, + 0x9f, 0xf0, 0xe4, 0xf0, 0xb9, 0x52, 0x03, 0xb4, + 0x05, 0xd5, 0x06, 0x75, 0x99, 0x41, 0x6e, 0x2d, + 0xe2, 0x9c, 0xb6, 0x10, 0x08, 0x0d, 0xc2, 0xdd, + 0x47, 0xb9, 0x55, 0xc5, 0x5e, 0xea, 0xb5, 0x2b, + 0xb6, 0x6d, 0x3d, 0x4a, 0x67, 0xbc, 0x5e, 0xb4, + 0x88, 0xfd, 0x58, 0x6c, 0xc4, 0x98, 0x97, 0x8c, + 0x49, 0x89, 0x5d, 0xcb, 0x47, 0xbc, 0x49, 0x89, + 0x78, 0xc4, 0x98, 0x90, 0xd1, 0xef, 0x12, 0x62, + 0x5e, 0x31, 0x26, 0x24, 0x34, 0x7b, 0xc4, 0xae, + 0x31, 0x1a, 0xec, 0xe5, 0xa1, 0xfe, 0xab, 0x55, + 0x28, 0xbe, 0x80, 0x9d, 0xc1, 0xa4, 0xf6, 0x95, + 0xdd, 0xcc, 0x74, 0x19, 0x1d, 0x94, 0x0f, 0xd0, + 0xfc, 0x2d, 0xc4, 0x3b, 0x34, 0xa9, 0x5c, 0x73, + 0xf8, 0x44, 0x7b, 0xda, 0xfc, 0x94, 0x4e, 0xfb, + 0x7b, 0xa3, 0x47, 0x12, 0x22, 0x2c, 0xed, 0xe2, + 0x22, 0x20, 0xc6, 0xd8, 0x6a, 0xb1, 0xf3, 0x5f, + 0xfd, 0xc5, 0x5c, 0x56, 0x3d, 0xb0, 0xd5, 0x65, + 0xe6, 0xbf, 0xfb, 0x8a, 0xb8, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0b, + 0x0b, 0x2b, 0x65, 0xb4, 0x6c, 0x96, 0xe6, 0x28, + 0xe4, 0x21, 0xb1, 0xb9, 0xed, 0x12, 0x13, 0xa0, + 0x06, 0xd4, 0x56, 0xa6, 0xa2, 0x88, 0x30, 0xc8, + 0x27, 0x94, 0x17, 0x47, 0x13, 0xde, 0xd1, 0xac, + 0xb1, 0xa5, 0xc3, 0x86, 0x8b, 0xc5, 0x08, 0xd0, + 0x75, 0xfe, 0x5d, 0xa5, 0x3f, 0x9a, 0xe7, 0xb7, + 0x16, 0xb7, 0x62, 0xdb, 0x2e, 0x7b, 0x19, 0x6d, + 0x0b, 0x5a, 0x28, 0xc0, 0xd7, 0x07, 0x1a, 0x57, + 0x5a, 0x67, 0x76, 0xad, 0xbc, 0x76, 0x5f, 0x71, + 0x18, 0x6c, 0x57, 0x17, 0xcd, 0x01, 0xf5, 0xf1, + 0x5a, 0x5d, 0x86, 0xa2, 0xbd, 0xbd, 0x48, 0x20, + 0x11, 0x74, 0x4d, 0x61, 0x75, 0x0d, 0xe0, 0xb1, + 0x73, 0x47, 0x3e, 0x48, 0x68, 0x03, 0x48, 0x35, + 0xdd, 0x0b, 0x17, 0xb6, 0x73, 0x58, 0xce, 0xeb, + 0x79, 0x8b, 0x4c, 0x8c, 0x00, 0x9c, 0x06, 0xb4, + 0xae, 0xe1, 0x41, 0xa1, 0x74, 0xb3, 0x2c, 0xcc, + 0x9f, 0x18, 0x95, 0x96, 0xd2, 0xb9, 0x9a, 0xeb, + 0x85, 0x75, 0x6c, 0xf5, 0x9c, 0x77, 0x59, 0xa3, + 0x03, 0xc6, 0x28, 0xe1, 0x06, 0x57, 0x34, 0xee, + 0xd3, 0x50, 0xe1, 0x59, 0xbb, 0xcf, 0xf3, 0x13, + 0x7c, 0xf9, 0x60, 0x99, 0xcd, 0x8d, 0x8e, 0x22, + 0x38, 0xc6, 0x86, 0xe1, 0x6d, 0x70, 0xd5, 0xbd, + 0x94, 0x11, 0x65, 0xaf, 0x6b, 0x8b, 0x5c, 0x08, + 0x73, 0x74, 0x10, 0x74, 0x1a, 0xf6, 0x96, 0xc8, + 0xad, 0xae, 0x25, 0x69, 0x7c, 0x51, 0x3e, 0x46, + 0x37, 0x43, 0x9c, 0xd6, 0x92, 0x05, 0x3b, 0x21, + 0x48, 0xed, 0x05, 0xc5, 0x95, 0xd4, 0xf0, 0xdc, + 0xda, 0xbd, 0xaf, 0x7b, 0xe3, 0xfd, 0x78, 0x68, + 0x23, 0xc7, 0x1a, 0xab, 0xa0, 0x29, 0xac, 0x9e, + 0x48, 0xec, 0x2c, 0xac, 0x2d, 0x5e, 0x3c, 0x6c, + 0xc0, 0xbd, 0xc6, 0xbb, 0x80, 0x8a, 0xb7, 0x84, + 0x51, 0x05, 0x40, 0x07, 0x38, 0x80, 0xd0, 0x49, + 0x71, 0xa0, 0x1a, 0xce, 0x9e, 0xc2, 0xf7, 0x2c, + 0x13, 0xc0, 0x40, 0x9a, 0x37, 0xc6, 0x4e, 0xa0, + 0xe1, 0x4a, 0xae, 0x93, 0x07, 0xb3, 0x67, 0x1c, + 0xc6, 0xae, 0x6e, 0x70, 0x00, 0xdd, 0xa5, 0x74, + 0x77, 0x95, 0x83, 0x6a, 0x61, 0x65, 0xdd, 0xb4, + 0x8e, 0x8c, 0x56, 0x6b, 0x17, 0x34, 0xb8, 0x7f, + 0x56, 0x44, 0x15, 0x66, 0xc1, 0x33, 0xa3, 0x74, + 0xad, 0x63, 0x9d, 0x1b, 0x0d, 0x1e, 0xf0, 0x0d, + 0x05, 0x57, 0x85, 0x37, 0x96, 0x53, 0xe1, 0xbc, + 0xca, 0x9a, 0xb1, 0x36, 0x9f, 0x45, 0x42, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0xea, 0xca, 0xbf, 0x99, 0xda, 0x7d, + 0xb3, 0x3e, 0xb0, 0x5c, 0xab, 0xab, 0x2a, 0xfe, + 0x67, 0x69, 0xf6, 0xcc, 0xfa, 0xc1, 0x05, 0x9b, + 0x36, 0xf7, 0xd7, 0x79, 0xa3, 0xc0, 0xb8, 0xd7, + 0x66, 0x6d, 0xef, 0xae, 0xf3, 0x42, 0xe3, 0x40, + 0x44, 0x58, 0x3a, 0x8a, 0x0f, 0x5b, 0x58, 0x3f, + 0xcb, 0xec, 0x4e, 0xf1, 0x77, 0xd5, 0x0a, 0xae, + 0xae, 0x19, 0xcd, 0xb3, 0xb3, 0x0c, 0x89, 0x92, + 0x44, 0x31, 0x49, 0x6d, 0xe3, 0x61, 0x1b, 0xa0, + 0x68, 0x70, 0xe0, 0x54, 0xff, 0x00, 0xcb, 0x4a, + 0x02, 0x22, 0x20, 0x2e, 0xbc, 0xbb, 0x2d, 0x9f, + 0x30, 0x7c, 0x8d, 0x81, 0xcd, 0x06, 0x36, 0xe3, + 0x21, 0xda, 0xc8, 0x1b, 0xcb, 0x91, 0x74, 0x58, + 0x5f, 0x4f, 0x61, 0x72, 0xdb, 0x88, 0x0f, 0x8c, + 0x34, 0x10, 0x75, 0x11, 0xbc, 0x50, 0x74, 0x64, + 0xb7, 0x37, 0x31, 0x66, 0x76, 0xcd, 0x89, 0xce, + 0xf1, 0xa4, 0x0d, 0x92, 0x3a, 0x9a, 0x10, 0x4e, + 0x17, 0x0a, 0x76, 0x97, 0x55, 0xfe, 0x5f, 0xcf, + 0xed, 0x33, 0xed, 0xad, 0x7c, 0x5c, 0x4f, 0x6b, + 0xdc, 0x47, 0xe6, 0xe8, 0xc4, 0xe2, 0x83, 0x3f, + 0xb4, 0x8a, 0x53, 0x73, 0x06, 0x5f, 0x1c, 0x77, + 0x66, 0xa7, 0x9c, 0xa9, 0x20, 0x13, 0xba, 0x1b, + 0xa9, 0x72, 0xd9, 0xe7, 0x13, 0xdb, 0x3a, 0xe6, + 0x6c, 0x02, 0x5b, 0x9b, 0xa0, 0x41, 0x98, 0x9a, + 0x16, 0xd7, 0x78, 0x53, 0x4a, 0x09, 0x9d, 0xa1, + 0x73, 0x33, 0x2b, 0x07, 0x4d, 0x6c, 0xf2, 0xf1, + 0x97, 0xca, 0x59, 0x2b, 0x37, 0xe9, 0xa3, 0x17, + 0xe5, 0xd9, 0x55, 0x53, 0x51, 0xf2, 0x00, 0xbb, + 0xb2, 0xcc, 0xd2, 0x5c, 0xbd, 0xd2, 0x0c, 0x02, + 0x78, 0xe7, 0x6e, 0x09, 0x63, 0x71, 0x2d, 0x04, + 0xef, 0xd6, 0x8b, 0x91, 0xae, 0x68, 0x91, 0xae, + 0x0d, 0xf1, 0x43, 0xaa, 0x18, 0x77, 0x68, 0x71, + 0x52, 0xbd, 0xa4, 0x16, 0x6b, 0x83, 0x96, 0xd8, + 0x64, 0xf6, 0x56, 0x37, 0xf1, 0xc8, 0xfe, 0x74, + 0x73, 0xb8, 0x62, 0xd0, 0x71, 0x1d, 0x3a, 0x78, + 0x52, 0xd8, 0xe5, 0xb7, 0xd9, 0x3d, 0xed, 0x8d, + 0x83, 0x24, 0x66, 0x16, 0xf3, 0xa1, 0xb2, 0x1a, + 0x9c, 0x43, 0x7b, 0x92, 0xa0, 0xf3, 0x4c, 0xcd, + 0xf9, 0x9d, 0xc3, 0x67, 0x7c, 0x62, 0x20, 0xd6, + 0x06, 0x36, 0x30, 0x6a, 0x00, 0xed, 0xac, 0xe5, + 0x79, 0x9c, 0x99, 0x6c, 0xe6, 0x66, 0x30, 0x4a, + 0x1c, 0xd2, 0xc7, 0x31, 0xc7, 0x08, 0x23, 0xb6, + 0x83, 0xba, 0xf0, 0xff, 0x00, 0xf5, 0x4b, 0x12, + 0x3d, 0x79, 0xef, 0x09, 0x02, 0x5a, 0x0f, 0xfe, + 0xa7, 0x7d, 0xf6, 0xe2, 0x9c, 0x11, 0xae, 0x19, + 0xf3, 0x47, 0x4d, 0x97, 0x45, 0x61, 0xcd, 0x35, + 0x91, 0xc5, 0x21, 0x91, 0xae, 0x0e, 0x24, 0x9a, + 0xe2, 0xd1, 0x4a, 0x7f, 0x59, 0x62, 0x3c, 0xc9, + 0xf1, 0x65, 0x93, 0x65, 0xbc, 0xd8, 0x73, 0x26, + 0x93, 0x1b, 0xa4, 0xad, 0x08, 0xa6, 0x1f, 0xcd, + 0xfe, 0xca, 0x09, 0x39, 0xc5, 0xa6, 0x49, 0x67, + 0x6a, 0xe8, 0xed, 0x99, 0x3d, 0xdd, 0xc3, 0x31, + 0xba, 0x59, 0x45, 0x43, 0x45, 0x06, 0xa6, 0xf7, + 0x53, 0x3c, 0x9a, 0x6b, 0x8d, 0x9d, 0xb2, 0x9a, + 0x7a, 0x73, 0x8e, 0x79, 0x26, 0x82, 0x83, 0xc9, + 0x75, 0x34, 0x0d, 0x4b, 0x9d, 0x99, 0xe4, 0x32, + 0x5a, 0x45, 0x6f, 0x7f, 0x66, 0xcb, 0xb3, 0x00, + 0xa4, 0x6f, 0x2e, 0x2d, 0xd1, 0x5d, 0xde, 0xf6, + 0x85, 0xe2, 0xf3, 0x3d, 0x7d, 0xe6, 0x5e, 0x6d, + 0x2e, 0x2d, 0xd8, 0x4b, 0x49, 0x31, 0x3d, 0xb5, + 0x6e, 0x0f, 0xcd, 0x00, 0x36, 0x9d, 0x94, 0x13, + 0x17, 0xaf, 0x6b, 0x33, 0xfc, 0xa8, 0xbb, 0x40, + 0x31, 0x34, 0x57, 0xb3, 0xe3, 0x53, 0xc2, 0xa0, + 0x73, 0x98, 0xdf, 0xd7, 0x37, 0x4c, 0xa7, 0x8c, + 0xe9, 0x8e, 0x1d, 0xf3, 0x8a, 0x94, 0xa2, 0x66, + 0x39, 0xb4, 0xd7, 0xb3, 0x43, 0x28, 0x60, 0x85, + 0xf6, 0xcd, 0x0c, 0x6b, 0x9a, 0xea, 0x93, 0x4f, + 0xce, 0x5d, 0x9f, 0x10, 0xdb, 0xc8, 0xf6, 0x5c, + 0x5c, 0x58, 0x32, 0x5b, 0xc8, 0xc0, 0xa4, 0xc4, + 0x90, 0x09, 0x1a, 0x89, 0x6a, 0x09, 0xce, 0x71, + 0x83, 0x69, 0x2d, 0xa3, 0x3e, 0x50, 0xb5, 0xc3, + 0xda, 0x24, 0xb8, 0xd3, 0x80, 0x2a, 0xbd, 0xa4, + 0x12, 0x1c, 0xea, 0x38, 0x28, 0x79, 0xc1, 0x38, + 0xa8, 0xde, 0xf1, 0x89, 0xf0, 0x2f, 0x70, 0x5c, + 0x66, 0x39, 0x86, 0x6e, 0xc9, 0xe2, 0x7b, 0x5b, + 0x76, 0xf7, 0x62, 0x8d, 0xc4, 0xe1, 0x6e, 0x81, + 0xe4, 0xf6, 0xa8, 0xa5, 0xe1, 0xcc, 0x33, 0x19, + 0xb3, 0x38, 0xe0, 0xea, 0xf6, 0x41, 0x73, 0x8c, + 0x0b, 0x8b, 0x86, 0xb0, 0x97, 0x60, 0x1e, 0x51, + 0xc4, 0x5a, 0x34, 0x1d, 0xfa, 0xa0, 0x8a, 0xda, + 0x4f, 0xe7, 0x57, 0x5d, 0xb6, 0xfd, 0x56, 0xad, + 0xdb, 0x27, 0x28, 0x66, 0x6e, 0xd6, 0x93, 0x4e, + 0x71, 0x8e, 0x68, 0xed, 0xeb, 0xf9, 0x17, 0x2e, + 0x7d, 0x2b, 0x25, 0xcd, 0xae, 0x5e, 0xc3, 0x56, + 0xe3, 0xc2, 0x0f, 0x68, 0x2e, 0x28, 0xa5, 0x92, + 0x19, 0x1b, 0x34, 0x4e, 0xc1, 0x24, 0x67, 0x13, + 0x5d, 0xbc, 0x47, 0x69, 0x07, 0xbb, 0xc8, 0x9f, + 0x0d, 0xd4, 0xd1, 0xb8, 0x51, 0xcd, 0x7b, 0x85, + 0x3b, 0xa7, 0x0f, 0x0a, 0xb0, 0xe5, 0xf9, 0x7c, + 0x19, 0x6e, 0x69, 0x96, 0xbb, 0x13, 0x8c, 0xd7, + 0x31, 0xbd, 0xd2, 0x35, 0xd4, 0xf1, 0x49, 0x6e, + 0x81, 0xdf, 0x5c, 0x87, 0x68, 0x2d, 0xa6, 0x70, + 0x9e, 0xe7, 0x2e, 0x8e, 0x5b, 0xa6, 0x81, 0xfa, + 0xda, 0xd0, 0x12, 0x37, 0x48, 0x51, 0xf7, 0x39, + 0x9d, 0xd5, 0xcd, 0xe8, 0xbd, 0x7b, 0xb0, 0xcc, + 0xc2, 0x0c, 0x65, 0xa3, 0x43, 0x70, 0xe9, 0x01, + 0x06, 0x6e, 0xe2, 0x78, 0xcd, 0xe4, 0x8b, 0x4e, + 0x3f, 0x68, 0xc3, 0xd9, 0xae, 0x3d, 0x7c, 0x0a, + 0xca, 0xe7, 0x34, 0xed, 0x84, 0x2d, 0x1f, 0x99, + 0x6e, 0x5a, 0x7b, 0x74, 0x2e, 0xf9, 0x54, 0x49, + 0xda, 0x2b, 0x67, 0x48, 0x2e, 0xe4, 0xb0, 0x8d, + 0xd7, 0xc0, 0x68, 0x97, 0x16, 0x8a, 0xd3, 0xca, + 0xc2, 0xb8, 0xad, 0x73, 0x7b, 0x88, 0x33, 0x4e, + 0xb2, 0x94, 0x09, 0xa5, 0x38, 0xaa, 0x09, 0xa0, + 0xf1, 0xbb, 0x41, 0x06, 0xfc, 0xaf, 0xfd, 0x47, + 0x10, 0xdc, 0xe7, 0xdf, 0xa3, 0x94, 0x52, 0x5f, + 0xf5, 0x33, 0xbf, 0xf2, 0xcf, 0xd7, 0x5c, 0x76, + 0xd7, 0xcf, 0xb7, 0xcc, 0x1b, 0x7a, 0xd6, 0x07, + 0x39, 0xaf, 0x2f, 0x11, 0x93, 0x41, 0x57, 0x6e, + 0x55, 0x1f, 0x7c, 0x5d, 0x98, 0x9b, 0xfc, 0x02, + 0xa6, 0x53, 0x37, 0x37, 0x5d, 0x1a, 0x48, 0x34, + 0xc4, 0x3b, 0x48, 0x2c, 0x56, 0xff, 0x00, 0xeb, + 0x39, 0x7c, 0xc7, 0x7d, 0x46, 0xa8, 0x2b, 0x38, + 0x65, 0xeb, 0x98, 0x62, 0x20, 0xf3, 0x8d, 0x9c, + 0x54, 0x1d, 0x7e, 0x29, 0xa9, 0xf0, 0x29, 0x2c, + 0x92, 0xf5, 0xd7, 0xdb, 0x4a, 0x6e, 0x9c, 0xc1, + 0x1b, 0xa5, 0x8d, 0xc4, 0xb0, 0x12, 0x40, 0x01, + 0xad, 0x1b, 0xdd, 0x85, 0xac, 0xed, 0x04, 0x71, + 0xca, 0xe9, 0xbd, 0x8e, 0x37, 0x5f, 0x0a, 0xb4, + 0x5c, 0xea, 0xd3, 0x5f, 0x2b, 0x0e, 0xfa, 0x0e, + 0xd9, 0xac, 0xed, 0x2f, 0x73, 0xbc, 0xc2, 0xe6, + 0xe1, 0xbc, 0xec, 0x36, 0x6c, 0x0f, 0x31, 0x03, + 0x4c, 0x4e, 0x6b, 0x75, 0x1e, 0xd5, 0x13, 0x67, + 0xb3, 0x49, 0x2e, 0xf3, 0x03, 0x6f, 0x14, 0x31, + 0x5b, 0x5b, 0x35, 0x84, 0x98, 0xe3, 0x1a, 0x4e, + 0xe0, 0xc4, 0xe5, 0x0b, 0x97, 0xe6, 0xf3, 0xd9, + 0x5c, 0xcb, 0x3b, 0x80, 0x9c, 0x5c, 0x57, 0x9f, + 0x63, 0xb4, 0x07, 0x55, 0x75, 0x43, 0xb4, 0x31, + 0xda, 0x4a, 0x1d, 0x63, 0x64, 0xc8, 0x23, 0x35, + 0xe7, 0x1b, 0x52, 0x5c, 0xfa, 0xee, 0x62, 0xfc, + 0xd4, 0x1b, 0x32, 0x9f, 0xe5, 0x19, 0xcf, 0x73, + 0xc2, 0xe5, 0xc9, 0xb3, 0xf9, 0x7c, 0x37, 0xf7, + 0x8e, 0x6c, 0xf5, 0x31, 0x44, 0xc2, 0xf7, 0xb0, + 0x7e, 0x75, 0x37, 0x16, 0x1b, 0x9b, 0xb5, 0x91, + 0x5e, 0xc1, 0x0d, 0xbb, 0x59, 0x1d, 0xf5, 0x3c, + 0x50, 0xe3, 0xe2, 0x53, 0x78, 0xd3, 0x4a, 0xd3, + 0x96, 0x66, 0x32, 0xe5, 0xd7, 0x42, 0xe2, 0x20, + 0x1d, 0x40, 0x5a, 0xe6, 0x1d, 0x4e, 0x69, 0xec, + 0xf6, 0x10, 0x4d, 0x64, 0xd9, 0xbb, 0xa7, 0xcd, + 0x23, 0xb6, 0xb5, 0xb7, 0x8e, 0xd6, 0xdb, 0xc6, + 0xc4, 0x1a, 0xdf, 0x19, 0xc0, 0x6a, 0xc4, 0xf5, + 0xa7, 0x25, 0xd1, 0xb5, 0x52, 0x8d, 0xcc, 0x53, + 0xe8, 0xee, 0xad, 0x2c, 0xcf, 0xe1, 0xb7, 0x98, + 0x4d, 0x61, 0x65, 0x1d, 0xbb, 0x9c, 0x43, 0xa5, + 0x24, 0x97, 0x17, 0x02, 0x35, 0x0f, 0x9a, 0xb9, + 0x9b, 0x9b, 0xf3, 0x59, 0xa8, 0xcc, 0xad, 0xe1, + 0x6c, 0x55, 0xd7, 0x11, 0x24, 0x83, 0x8b, 0xca, + 0x25, 0xdb, 0xe5, 0x04, 0x8e, 0xce, 0xe9, 0xcc, + 0x73, 0x08, 0xeb, 0xe3, 0xc9, 0x13, 0xc3, 0x06, + 0xed, 0x71, 0x1a, 0x85, 0x1d, 0x91, 0x31, 0xc7, + 0x39, 0xb5, 0x02, 0xa5, 0xc2, 0x42, 0x4d, 0x77, + 0x28, 0x08, 0x5e, 0xe6, 0xce, 0xff, 0x00, 0xef, + 0x62, 0xbd, 0xb4, 0xb7, 0x65, 0xac, 0xac, 0xae, + 0x30, 0xd3, 0xa1, 0xf5, 0x3a, 0x71, 0x68, 0x1a, + 0xd6, 0xff, 0x00, 0x88, 0x6d, 0xa2, 0x2f, 0x9e, + 0xd2, 0xc2, 0x38, 0x6e, 0xe4, 0x14, 0x32, 0xe2, + 0xa8, 0x04, 0xee, 0xb4, 0x71, 0x20, 0x90, 0xb7, + 0x7b, 0x5f, 0x7b, 0x9f, 0x11, 0xa5, 0xb8, 0x1c, + 0x37, 0xc6, 0x80, 0x5a, 0xa0, 0x32, 0x98, 0x2f, + 0xa6, 0xbb, 0x67, 0xb0, 0x10, 0x27, 0x8c, 0x63, + 0x6d, 0x4d, 0x00, 0xa0, 0xa6, 0xea, 0xf7, 0x65, + 0x9a, 0x4b, 0x68, 0xcb, 0xa6, 0xe0, 0x12, 0xba, + 0xf1, 0xa5, 0x8e, 0x71, 0x24, 0x10, 0x4e, 0xb3, + 0x41, 0xdb, 0x5a, 0x2c, 0x6f, 0x66, 0xb1, 0xba, + 0x65, 0xc5, 0xb9, 0x18, 0xd9, 0xa8, 0x1a, 0xd0, + 0x83, 0xac, 0x14, 0x13, 0xb6, 0x59, 0xa4, 0x19, + 0xbd, 0xc3, 0x6c, 0x33, 0x2b, 0x56, 0x19, 0x65, + 0xab, 0x44, 0xcc, 0x18, 0x4e, 0x20, 0x35, 0x9d, + 0xd5, 0x01, 0x79, 0x00, 0xb6, 0xbb, 0x9a, 0x06, + 0x9c, 0x42, 0x27, 0xb9, 0x80, 0xef, 0xe1, 0x34, + 0x52, 0x83, 0x3f, 0xb5, 0x89, 0xce, 0xb8, 0xb5, + 0xb0, 0x64, 0x57, 0x4e, 0x04, 0x19, 0x71, 0x1a, + 0x02, 0x77, 0x43, 0x4e, 0x85, 0x10, 0xf7, 0xbe, + 0x47, 0xba, 0x47, 0x9c, 0x4f, 0x79, 0x2e, 0x73, + 0xb7, 0xc9, 0xd2, 0x4a, 0x0f, 0x28, 0x88, 0x80, + 0xb7, 0x59, 0xe9, 0xbc, 0xb7, 0x1f, 0xe2, 0xb3, + 0xc2, 0xb4, 0xa9, 0x1d, 0x9f, 0xb1, 0x92, 0xf3, + 0x32, 0x84, 0x86, 0xfe, 0xaa, 0x17, 0x09, 0x24, + 0x76, 0xe7, 0x8b, 0xab, 0x84, 0xa0, 0xb2, 0xe7, + 0x3e, 0xf4, 0xdf, 0x30, 0x78, 0x4a, 0xe0, 0x5d, + 0x59, 0x9c, 0xa2, 0x5b, 0xb7, 0x53, 0x53, 0x06, + 0x1e, 0xe8, 0xd7, 0xdf, 0x5c, 0xa8, 0x33, 0x1f, + 0xed, 0x1b, 0xdb, 0x52, 0xc6, 0x9b, 0xe1, 0x45, + 0x47, 0xfb, 0x46, 0x76, 0xd4, 0x9a, 0x0c, 0xe8, + 0xdf, 0x0b, 0x83, 0x30, 0xf7, 0xab, 0x4d, 0x3f, + 0xf1, 0x3e, 0x50, 0xbb, 0x97, 0x0e, 0x61, 0xef, + 0x56, 0xbf, 0x69, 0xf2, 0x84, 0x0c, 0xbf, 0xde, + 0x6e, 0xfc, 0xf3, 0xf5, 0x8a, 0xee, 0x5c, 0x39, + 0x7f, 0xbc, 0xdd, 0xf9, 0xe7, 0xeb, 0x15, 0xdc, + 0x80, 0x75, 0x15, 0x14, 0x75, 0x95, 0x2a, 0x75, + 0x15, 0x14, 0x75, 0x94, 0x05, 0xdd, 0x60, 0xe8, + 0xa7, 0x82, 0x5b, 0x09, 0xfc, 0x89, 0x81, 0x0d, + 0xee, 0xeb, 0xe0, 0xd6, 0xb8, 0x50, 0x38, 0xb4, + 0x87, 0x34, 0x90, 0x5b, 0xa4, 0x10, 0x88, 0x95, + 0x6f, 0x32, 0xb0, 0x9f, 0x2e, 0xba, 0x7d, 0xb4, + 0xa0, 0xe8, 0xd3, 0x1b, 0xb7, 0x1e, 0xdf, 0x9d, + 0xdb, 0x5c, 0xb5, 0xde, 0xd4, 0xbe, 0x81, 0x74, + 0xcc, 0xbe, 0xf7, 0x2c, 0x6c, 0xb9, 0xab, 0x5a, + 0x18, 0xd3, 0xfb, 0x4d, 0x35, 0x07, 0x56, 0x82, + 0x34, 0x85, 0x11, 0xd5, 0xfb, 0x19, 0xd2, 0x1c, + 0x7f, 0xb4, 0xff, 0x00, 0x41, 0x68, 0xae, 0x7a, + 0xe9, 0xc5, 0x8a, 0xfe, 0x4e, 0xfb, 0xa7, 0x6c, + 0xf0, 0x99, 0xd7, 0x8a, 0xad, 0x54, 0xaa, 0xb4, + 0xf5, 0x7e, 0xc5, 0xfa, 0xf7, 0x72, 0x9f, 0xe8, + 0x27, 0x57, 0xec, 0x5f, 0xaf, 0x77, 0x29, 0xfe, + 0x82, 0x9e, 0xfd, 0x3d, 0xea, 0xfa, 0x2c, 0x9c, + 0xe1, 0x56, 0xaa, 0x55, 0x5a, 0x7a, 0xbf, 0x62, + 0xfd, 0x7b, 0xb9, 0x4f, 0xf4, 0x13, 0xab, 0xf6, + 0x2f, 0xd7, 0xbb, 0x94, 0xff, 0x00, 0x41, 0x3b, + 0xf4, 0xf7, 0x9e, 0x8b, 0x27, 0x38, 0x55, 0xaa, + 0x95, 0x56, 0x9e, 0xaf, 0xd8, 0xbf, 0x5e, 0xee, + 0x53, 0xfd, 0x04, 0xea, 0xfd, 0x8b, 0xf5, 0xee, + 0xe5, 0x3f, 0xd0, 0x4e, 0xf5, 0x3d, 0xe7, 0xa3, + 0xc9, 0xce, 0x15, 0x6a, 0xa5, 0x55, 0xa7, 0xab, + 0xf6, 0x2f, 0xd7, 0xbb, 0x94, 0xff, 0x00, 0x41, + 0x3a, 0xbf, 0x62, 0xfd, 0x7b, 0xb9, 0x4f, 0xf4, + 0x13, 0xbf, 0x5f, 0x7a, 0x7d, 0x26, 0x5e, 0x70, + 0xab, 0x55, 0x2a, 0xad, 0x3d, 0x5f, 0xb1, 0x9e, + 0xbd, 0xdc, 0xa7, 0xfa, 0x09, 0xd5, 0xfb, 0x17, + 0xeb, 0xdd, 0xca, 0x7f, 0xa0, 0x9d, 0xea, 0x7b, + 0xd1, 0xe8, 0xef, 0xee, 0x55, 0xaa, 0x95, 0x56, + 0x9e, 0xaf, 0xd8, 0xbf, 0x5e, 0xee, 0x53, 0xfd, + 0x04, 0xea, 0xfd, 0x8b, 0xf5, 0xee, 0xe5, 0x3f, + 0xd0, 0x4e, 0xf5, 0x3d, 0xe7, 0xa2, 0xc9, 0xee, + 0x55, 0xaa, 0x95, 0x56, 0x9e, 0xaf, 0xd8, 0xbf, + 0x5e, 0xee, 0x53, 0xfd, 0x04, 0xf6, 0x0d, 0x8b, + 0xf5, 0xee, 0xe5, 0x3f, 0xd0, 0x4e, 0xf5, 0x7d, + 0xe4, 0x79, 0x3c, 0x91, 0xe1, 0xa2, 0xad, 0x54, + 0xaa, 0xb4, 0xfb, 0x06, 0xc5, 0xf4, 0x87, 0x72, + 0x9f, 0xe8, 0x27, 0x57, 0xec, 0x5f, 0xaf, 0x77, + 0x29, 0xfe, 0x82, 0x77, 0xeb, 0xef, 0x4f, 0xa4, + 0xcb, 0xce, 0x15, 0x6a, 0xa5, 0x55, 0xa7, 0xab, + 0xf6, 0x2f, 0xd7, 0xbb, 0x94, 0xff, 0x00, 0x41, + 0x3a, 0xbf, 0x62, 0xfd, 0x7b, 0xb9, 0x4f, 0xf4, + 0x13, 0xbd, 0x4f, 0x7a, 0x3d, 0x1e, 0x4e, 0x70, + 0xab, 0x62, 0x4c, 0x4a, 0xd3, 0xd5, 0xfb, 0x17, + 0xeb, 0xdd, 0xca, 0x7f, 0xa0, 0x9d, 0x5f, 0xb1, + 0x7e, 0xbd, 0xdc, 0xa7, 0xfa, 0x09, 0xde, 0xa7, + 0xbd, 0x3e, 0x8e, 0xfe, 0xe5, 0x5a, 0xa9, 0x55, + 0x69, 0xea, 0xfd, 0x8b, 0xf5, 0xee, 0xe5, 0x3f, + 0xd0, 0x4e, 0xaf, 0xd8, 0xbf, 0x5e, 0xee, 0x53, + 0xfd, 0x04, 0xef, 0x53, 0xde, 0x8f, 0x45, 0x93, + 0xdc, 0xab, 0x55, 0x2a, 0xad, 0x3d, 0x5f, 0xb1, + 0x7e, 0xbd, 0xdc, 0xa7, 0xfa, 0x09, 0xd5, 0xfb, + 0x17, 0xeb, 0xdd, 0xca, 0x7f, 0xa0, 0x9d, 0xea, + 0x7b, 0xcf, 0x47, 0x93, 0xdc, 0xab, 0x55, 0x2a, + 0xad, 0x3d, 0x5f, 0xb1, 0x7e, 0xbd, 0xdc, 0xa7, + 0xfa, 0x09, 0xd5, 0xfb, 0x19, 0xeb, 0xdd, 0xca, + 0x7f, 0xa0, 0x9d, 0xea, 0x7b, 0xcf, 0x45, 0x7f, + 0x72, 0xad, 0x54, 0xaa, 0xb4, 0xf5, 0x7e, 0xc5, + 0xfa, 0xf7, 0x72, 0x9f, 0xe8, 0x27, 0x57, 0xec, + 0x5f, 0xaf, 0x77, 0x29, 0xfe, 0x82, 0x77, 0xa9, + 0xaf, 0xb4, 0xf4, 0x59, 0x3d, 0xca, 0xb6, 0x24, + 0xaa, 0xb4, 0xf5, 0x7e, 0xc5, 0xfa, 0xf7, 0x72, + 0x9f, 0xe8, 0x27, 0x57, 0xec, 0x5f, 0xaf, 0x77, + 0x29, 0xfe, 0x82, 0x77, 0xeb, 0xef, 0x3d, 0x1e, + 0x4f, 0x72, 0xad, 0x89, 0x31, 0x2b, 0x4f, 0x57, + 0xec, 0x5f, 0xaf, 0x77, 0x29, 0xfe, 0x82, 0x75, + 0x7e, 0xc5, 0xfa, 0xf7, 0x72, 0x9f, 0xe8, 0x27, + 0x7a, 0x9e, 0xf3, 0xd1, 0x5f, 0xdc, 0xab, 0x55, + 0x2a, 0xad, 0x3d, 0x5f, 0xb1, 0x7e, 0xbd, 0xdc, + 0xa7, 0xfa, 0x09, 0xd5, 0xfb, 0x17, 0xeb, 0xdd, + 0xca, 0x7f, 0xa0, 0x9d, 0xfa, 0xfb, 0xcf, 0x47, + 0x7f, 0x72, 0xad, 0x54, 0xc4, 0xad, 0x3d, 0x5f, + 0xb1, 0x7e, 0xbd, 0xdc, 0xa7, 0xfa, 0x09, 0xd5, + 0xfb, 0x17, 0xeb, 0xdd, 0xca, 0x7f, 0xa0, 0x9d, + 0xea, 0x7b, 0xcf, 0x47, 0x93, 0xdc, 0xab, 0x55, + 0x2a, 0xad, 0x3d, 0x5f, 0xb1, 0x7e, 0xbd, 0xdc, + 0xa7, 0xfa, 0x09, 0xd5, 0xfb, 0x17, 0xeb, 0xdd, + 0xca, 0x7f, 0xa0, 0x9d, 0xea, 0x7b, 0xcf, 0x47, + 0x93, 0x9c, 0x2a, 0xd5, 0x4a, 0xab, 0x4f, 0x57, + 0xec, 0x5f, 0xaf, 0x77, 0x29, 0xfe, 0x82, 0x75, + 0x7e, 0xc5, 0xfa, 0xf7, 0x72, 0x9f, 0xe8, 0x27, + 0x7e, 0x9e, 0xf3, 0xd1, 0xe4, 0xe7, 0x0a, 0xb5, + 0x52, 0xaa, 0xd3, 0xd5, 0xfb, 0x17, 0xeb, 0xdd, + 0xca, 0x7f, 0xa0, 0x9d, 0x5f, 0xb1, 0x7e, 0xbd, + 0xdc, 0xa7, 0xfa, 0x09, 0xdf, 0xa7, 0xbc, 0xf4, + 0x59, 0x39, 0xc2, 0xad, 0x54, 0xaa, 0xb4, 0xf5, + 0x7e, 0xc5, 0xfa, 0xf7, 0x72, 0x9f, 0xe8, 0x27, + 0x57, 0xec, 0x67, 0xaf, 0x34, 0xdd, 0xf1, 0x9f, + 0xe8, 0xa7, 0x7e, 0x87, 0xa3, 0xc9, 0xee, 0x45, + 0x64, 0x39, 0x54, 0x99, 0x95, 0xeb, 0x43, 0x9a, + 0x7d, 0x9a, 0x23, 0x8a, 0x67, 0x6e, 0x1a, 0x50, + 0x86, 0xab, 0x36, 0x67, 0x70, 0x25, 0x9b, 0x03, + 0x7c, 0x88, 0x86, 0x1d, 0x1b, 0xeb, 0x74, 0xfc, + 0xc5, 0x96, 0x5f, 0x14, 0x56, 0x0d, 0x6c, 0x70, + 0xca, 0x3c, 0x52, 0x37, 0x45, 0x35, 0xef, 0xa8, + 0xd5, 0xc6, 0xf7, 0xdd, 0x3a, 0xb5, 0xe0, 0xc5, + 0x18, 0xeb, 0x31, 0xed, 0x99, 0xd4, 0xd3, 0xba, + 0x88, 0x8a, 0x8e, 0xa2, 0x22, 0x20, 0xc6, 0xd8, + 0x6a, 0xb2, 0xf3, 0x5f, 0xfd, 0xc5, 0x5c, 0x56, + 0x3d, 0xb0, 0xd5, 0x65, 0xe6, 0xbf, 0xfb, 0x8a, + 0xb8, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x8b, 0x65, 0xb4, 0x26, + 0x7b, 0x88, 0xe1, 0x1f, 0xf1, 0x1c, 0x1a, 0x4e, + 0xed, 0x0a, 0x0e, 0xdc, 0xab, 0x28, 0x37, 0x60, + 0xdd, 0x5c, 0x38, 0x43, 0x65, 0x16, 0x97, 0xc8, + 0x7f, 0x3a, 0x9a, 0xc0, 0x58, 0xce, 0x73, 0x36, + 0xdf, 0x4e, 0xce, 0x64, 0x60, 0xb6, 0xb7, 0x6e, + 0x08, 0x46, 0xed, 0x37, 0xfb, 0xca, 0x6f, 0x37, + 0xc9, 0xb3, 0x4b, 0xae, 0x6e, 0xda, 0xd3, 0x9b, + 0x65, 0x8c, 0x2d, 0x0d, 0x64, 0x65, 0xc4, 0x12, + 0x77, 0x4b, 0xb4, 0x28, 0x89, 0x76, 0x7a, 0xfe, + 0x09, 0xed, 0xe1, 0x93, 0x0d, 0x67, 0x7e, 0x16, + 0xe1, 0x35, 0xa5, 0x3c, 0xa2, 0x74, 0x0d, 0xc4, + 0x13, 0x76, 0xf2, 0xc3, 0x35, 0x94, 0x79, 0xf4, + 0xb1, 0x97, 0x5d, 0x5b, 0x44, 0xe6, 0x11, 0x4f, + 0x29, 0xc3, 0x46, 0x2e, 0xfa, 0xa9, 0x4d, 0x2b, + 0xe6, 0x95, 0xf2, 0xc8, 0x71, 0x3d, 0xee, 0xab, + 0x9d, 0xd9, 0x2a, 0xca, 0xfc, 0xd6, 0x1b, 0x4c, + 0xd6, 0x2c, 0xb9, 0x94, 0xf6, 0x08, 0x59, 0xec, + 0xf2, 0x0d, 0xc7, 0x17, 0x6b, 0x71, 0xed, 0x71, + 0xa8, 0x3c, 0xda, 0xc4, 0xd8, 0x5f, 0x49, 0x6e, + 0x7c, 0x81, 0xe3, 0x46, 0x77, 0xd8, 0xef, 0x27, + 0xba, 0x10, 0x49, 0x6c, 0x7f, 0xf3, 0x09, 0xbe, + 0xcb, 0xe5, 0x50, 0x47, 0x59, 0xdf, 0x52, 0x19, + 0x15, 0xf3, 0x2c, 0xb3, 0x26, 0x49, 0x21, 0xc3, + 0x14, 0x80, 0xc6, 0xf3, 0xbc, 0x0e, 0xa3, 0xc2, + 0xba, 0xee, 0x76, 0x6a, 0xfa, 0x4b, 0xc7, 0x9b, + 0x7c, 0x0e, 0xb5, 0x91, 0xc5, 0xed, 0x9b, 0x16, + 0x86, 0xb4, 0x9c, 0x54, 0xa7, 0x63, 0x52, 0x08, + 0xa8, 0x6d, 0x66, 0x92, 0x68, 0xa3, 0xc0, 0xe6, + 0xf3, 0xce, 0x01, 0x84, 0x8a, 0x03, 0x5d, 0xd1, + 0x55, 0x3f, 0x9c, 0xdb, 0xe6, 0x07, 0x34, 0xb7, + 0x7d, 0xac, 0x0f, 0x74, 0x36, 0x41, 0x8d, 0x63, + 0x86, 0xad, 0x06, 0xa7, 0xc0, 0xba, 0x58, 0xe8, + 0x2e, 0x73, 0xb8, 0x22, 0x89, 0xc1, 0xf6, 0xf9, + 0x5c, 0x24, 0xb9, 0xda, 0xc6, 0x2a, 0x61, 0xef, + 0x2a, 0xfc, 0xf9, 0xd6, 0x64, 0xf9, 0xe5, 0x73, + 0x2e, 0x64, 0x63, 0x5c, 0xf2, 0x5a, 0xd0, 0xed, + 0x0d, 0xd3, 0xaa, 0x83, 0x79, 0x04, 0x8e, 0x7f, + 0x6f, 0xcd, 0xe7, 0xb6, 0xd3, 0x01, 0x84, 0x4e, + 0x63, 0x34, 0xfe, 0xb3, 0x5d, 0xa5, 0x75, 0xdc, + 0x5c, 0x31, 0x9b, 0x4d, 0x2d, 0xb4, 0xa7, 0xf5, + 0x37, 0x90, 0xb6, 0x27, 0x57, 0x55, 0x5c, 0x0d, + 0x16, 0x99, 0x5c, 0xeb, 0xfc, 0xa7, 0x2e, 0xbc, + 0x24, 0xbe, 0x68, 0x27, 0x6c, 0x72, 0xb8, 0xeb, + 0xa9, 0x3a, 0x49, 0x5c, 0x5b, 0x4e, 0xf7, 0x33, + 0x3b, 0x73, 0xda, 0x68, 0xf6, 0xb1, 0x85, 0xa4, + 0x6e, 0x10, 0x83, 0xa6, 0xda, 0x07, 0xdb, 0x64, + 0x99, 0xb5, 0xbb, 0xc7, 0x8f, 0x14, 0x81, 0xa7, + 0xb2, 0x2a, 0x3e, 0x45, 0x5f, 0x57, 0x1b, 0xc7, + 0xc5, 0x3e, 0x41, 0x75, 0x7b, 0x1e, 0x87, 0x5d, + 0x46, 0xd7, 0x3c, 0x6f, 0x39, 0xb4, 0x69, 0xf0, + 0x2a, 0x72, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x2e, 0xac, 0xab, 0xf9, + 0x9d, 0xa7, 0xdb, 0x33, 0xeb, 0x05, 0xca, 0xba, + 0xb2, 0xaf, 0xe6, 0x76, 0x9f, 0x6c, 0xcf, 0xac, + 0x10, 0x59, 0xb3, 0x6f, 0x7d, 0x77, 0x9a, 0x17, + 0x1a, 0xec, 0xcd, 0xbd, 0xf5, 0xde, 0x68, 0x5c, + 0x68, 0x08, 0x88, 0x83, 0xa2, 0xca, 0xf1, 0xd6, + 0xb2, 0x6a, 0xac, 0x6e, 0xf2, 0xc7, 0x63, 0x7e, + 0x8b, 0xc5, 0xde, 0xce, 0xe5, 0xd9, 0x8b, 0xcc, + 0xf6, 0x52, 0xf3, 0x12, 0x38, 0xd5, 0xd1, 0xd2, + 0xad, 0x24, 0xf6, 0x37, 0x3b, 0x8b, 0x52, 0x02, + 0x41, 0xd1, 0xa3, 0xbc, 0x83, 0x4f, 0xc1, 0x77, + 0xbb, 0x97, 0x11, 0x70, 0x39, 0x3e, 0x0c, 0xbe, + 0xf5, 0xf1, 0x70, 0x1e, 0x25, 0xbf, 0x1b, 0xf7, + 0xcf, 0x09, 0x4e, 0x71, 0xfb, 0xe7, 0x84, 0xa0, + 0xd1, 0xf0, 0x65, 0xf7, 0xaf, 0x8b, 0x80, 0xf1, + 0x27, 0xc1, 0x97, 0xde, 0xbe, 0x2e, 0x03, 0xc4, + 0xb7, 0xf3, 0x8f, 0xdf, 0x3c, 0x25, 0x39, 0xc7, + 0xef, 0x9e, 0x12, 0x83, 0x47, 0xc1, 0x97, 0xde, + 0xbe, 0x2e, 0x03, 0xc4, 0x9f, 0x06, 0x5f, 0x7a, + 0xf8, 0xb8, 0x0f, 0x12, 0xdf, 0xce, 0x3f, 0x7c, + 0xf0, 0x94, 0xe7, 0x1f, 0xbe, 0x78, 0x4a, 0x0d, + 0x1f, 0x06, 0x5f, 0x7a, 0xf8, 0xb8, 0x0f, 0x12, + 0x7c, 0x19, 0x7d, 0xeb, 0xe2, 0xe0, 0x3c, 0x4b, + 0x7f, 0x38, 0xfd, 0xf3, 0xc2, 0x53, 0x9c, 0x7e, + 0xf9, 0xe1, 0x28, 0x34, 0x7c, 0x19, 0x7d, 0xeb, + 0xe2, 0xe0, 0x3c, 0x49, 0xf0, 0x65, 0xf7, 0xaf, + 0x8b, 0x80, 0xf1, 0x2d, 0xfc, 0xe3, 0xf7, 0xcf, + 0x09, 0x4e, 0x71, 0xfb, 0xe7, 0x84, 0xa0, 0xd1, + 0xf0, 0x65, 0xf7, 0xaf, 0x8b, 0x80, 0xf1, 0x27, + 0xc1, 0x97, 0xde, 0xbe, 0x2e, 0x03, 0xc4, 0xb7, + 0xf3, 0x8f, 0xdf, 0x3c, 0x25, 0x39, 0xc7, 0xef, + 0x9e, 0x12, 0x83, 0x47, 0xc1, 0x97, 0xde, 0xbe, + 0x2e, 0x03, 0xc4, 0x9f, 0x06, 0x5f, 0x7a, 0xf8, + 0xb8, 0x0f, 0x12, 0xdf, 0xce, 0x3f, 0x7c, 0xf0, + 0x94, 0xe7, 0x1f, 0xbe, 0x78, 0x4a, 0x0d, 0x1f, + 0x06, 0x5f, 0x7a, 0xf8, 0xb8, 0x0f, 0x12, 0x7c, + 0x19, 0x7d, 0xeb, 0xe2, 0xe0, 0x3c, 0x4b, 0x7f, + 0x38, 0xfd, 0xf3, 0xc2, 0x53, 0x9c, 0x7e, 0xf9, + 0xe1, 0x28, 0x34, 0x37, 0x63, 0xb3, 0x16, 0x38, + 0x3d, 0x97, 0x11, 0x35, 0xc3, 0x48, 0x20, 0x3b, + 0x71, 0x77, 0xbb, 0x2b, 0xda, 0x77, 0xc5, 0xcd, + 0x9c, 0xc5, 0xb8, 0x48, 0xa1, 0xa3, 0x7c, 0x6e, + 0x56, 0x1a, 0xae, 0x7e, 0x71, 0xfb, 0xe7, 0x84, + 0xa7, 0x38, 0xfd, 0xf3, 0xc2, 0x50, 0x73, 0xfc, + 0x19, 0x7f, 0x52, 0x4d, 0xc4, 0x46, 0xbe, 0x72, + 0xcf, 0xc1, 0x97, 0xde, 0xbe, 0x2e, 0x03, 0xc4, + 0xb7, 0xf3, 0x8f, 0xdf, 0x3c, 0x25, 0x39, 0xc7, + 0xef, 0x9e, 0x12, 0x83, 0x47, 0xc1, 0x97, 0xde, + 0xbe, 0x2e, 0x03, 0xc4, 0x9f, 0x06, 0x5f, 0x7a, + 0xf8, 0xb8, 0x0f, 0x12, 0xdf, 0xce, 0x3f, 0x7c, + 0xf0, 0x94, 0xe7, 0x1f, 0xbe, 0x78, 0x4a, 0x0d, + 0x1f, 0x06, 0x5f, 0x7a, 0xf8, 0xb8, 0x0f, 0x12, + 0x7c, 0x19, 0x7d, 0xeb, 0xe2, 0xe0, 0x3c, 0x4b, + 0x7f, 0x38, 0xfd, 0xf3, 0xc2, 0x53, 0x9c, 0x7e, + 0xf9, 0xe1, 0x28, 0x34, 0x7c, 0x19, 0x7d, 0xeb, + 0xe2, 0xe0, 0x3c, 0x49, 0xf0, 0x65, 0xff, 0x00, + 0xaf, 0x8b, 0x80, 0xf1, 0x2d, 0xfc, 0xe3, 0xf7, + 0xcf, 0x09, 0x4e, 0x71, 0xfb, 0xe7, 0x84, 0xa0, + 0xf3, 0x6d, 0xb2, 0xd9, 0xbd, 0xa4, 0xa2, 0x6b, + 0x7b, 0xb8, 0xe3, 0x94, 0x02, 0x03, 0x83, 0x49, + 0xd7, 0xdb, 0x0b, 0x59, 0xd8, 0xdb, 0xf7, 0x38, + 0xb8, 0xcf, 0x15, 0x49, 0x24, 0x92, 0x0e, 0xb3, + 0xaf, 0x71, 0x6e, 0xe7, 0x1f, 0xbe, 0x78, 0x4a, + 0x73, 0x8f, 0xdf, 0x3c, 0x25, 0x06, 0x8f, 0x83, + 0x2f, 0xbd, 0x7c, 0x5c, 0x07, 0x89, 0x3e, 0x0c, + 0xbe, 0xf5, 0xf1, 0x70, 0x1e, 0x25, 0xbf, 0x9c, + 0x7e, 0xf9, 0xe1, 0x29, 0xce, 0x3f, 0x7c, 0xf0, + 0x94, 0x1a, 0x3e, 0x0c, 0xbe, 0xf5, 0xf1, 0x70, + 0x1e, 0x24, 0xf8, 0x32, 0xfb, 0xd7, 0xc5, 0xc0, + 0x78, 0x96, 0xfe, 0x71, 0xfb, 0xe7, 0x84, 0xa7, + 0x38, 0xfd, 0xf3, 0xc2, 0x50, 0x68, 0xf8, 0x32, + 0xfb, 0xd7, 0xc5, 0xc0, 0x78, 0x93, 0xe0, 0xcb, + 0xef, 0x5f, 0x17, 0x01, 0xe2, 0x5b, 0xf9, 0xc7, + 0xef, 0x9e, 0x12, 0x9c, 0xe3, 0xf7, 0xcf, 0x09, + 0x41, 0xa3, 0xe0, 0xcb, 0xef, 0x5f, 0x17, 0x01, + 0xe2, 0x4f, 0x83, 0x2f, 0xbd, 0x7c, 0x5c, 0x07, + 0x89, 0x6f, 0xe7, 0x1f, 0xbe, 0x78, 0x4a, 0x73, + 0x8f, 0xdf, 0x3c, 0x25, 0x06, 0x8f, 0x83, 0x2f, + 0xbd, 0x7c, 0x5c, 0x07, 0x89, 0x3e, 0x0c, 0xbe, + 0xf5, 0xf1, 0x70, 0x1e, 0x25, 0xbf, 0x9c, 0x7e, + 0xf9, 0xe1, 0x29, 0xce, 0x3f, 0x7c, 0xf0, 0x94, + 0x1a, 0x3e, 0x0c, 0xbe, 0xf5, 0xf1, 0x70, 0x1e, + 0x24, 0xf8, 0x32, 0xfb, 0xd7, 0xc5, 0xc0, 0x78, + 0x96, 0xfe, 0x71, 0xfb, 0xe7, 0x84, 0xa7, 0x38, + 0xfd, 0xf3, 0xc2, 0x50, 0x68, 0xf8, 0x32, 0xfb, + 0xd7, 0xc5, 0xc0, 0x78, 0x93, 0xe0, 0xcb, 0xef, + 0x5f, 0x17, 0x01, 0xe2, 0x5b, 0xf9, 0xc7, 0xef, + 0x9e, 0x12, 0x9c, 0xe3, 0xf7, 0xcf, 0x09, 0x41, + 0xae, 0x2d, 0x8c, 0x91, 0xa4, 0x1b, 0x9b, 0xb6, + 0xb5, 0x9f, 0x9d, 0x80, 0x50, 0xd3, 0xb0, 0x4e, + 0xa5, 0x25, 0xce, 0x58, 0xe5, 0xb6, 0xe6, 0xd7, + 0x2e, 0x6e, 0x97, 0x79, 0x52, 0x6b, 0x35, 0xdf, + 0x27, 0x74, 0xae, 0x12, 0xe7, 0x1d, 0x64, 0x9e, + 0xe9, 0x58, 0xed, 0x70, 0x20, 0x76, 0x6b, 0x52, + 0x74, 0x92, 0x88, 0x88, 0x3d, 0x47, 0xfb, 0x46, + 0x76, 0xd4, 0x9a, 0x8c, 0x8f, 0xf6, 0x8c, 0xed, + 0xa9, 0x34, 0x05, 0xc3, 0x98, 0x7b, 0xcd, 0xaf, + 0xda, 0x7c, 0xa1, 0x77, 0x2e, 0x1c, 0xc3, 0xde, + 0x6d, 0x7e, 0xd3, 0xe5, 0x08, 0x19, 0x7f, 0xbc, + 0xdd, 0xf9, 0xe7, 0xeb, 0x15, 0xdc, 0xb8, 0x72, + 0xff, 0x00, 0x79, 0xbb, 0xf3, 0xcf, 0xd6, 0x2b, + 0xb9, 0x00, 0xea, 0x2a, 0x28, 0xeb, 0x2a, 0x54, + 0xea, 0x2a, 0x28, 0xeb, 0x28, 0x08, 0x88, 0x83, + 0xa3, 0x31, 0xff, 0x00, 0x4d, 0x3f, 0xce, 0x1f, + 0x59, 0x54, 0x86, 0xa5, 0x6d, 0xcc, 0x7f, 0xd3, + 0x4f, 0xf3, 0x87, 0xd6, 0x55, 0x21, 0xa9, 0x06, + 0x51, 0x11, 0x3f, 0x00, 0x44, 0x44, 0xfc, 0x01, + 0x11, 0x13, 0xf0, 0x04, 0x44, 0x4f, 0xc0, 0x17, + 0x65, 0xa6, 0x53, 0x75, 0x77, 0x69, 0x35, 0xdb, + 0x28, 0xd8, 0x60, 0x04, 0xb8, 0x9d, 0x07, 0xc5, + 0x15, 0x34, 0x5c, 0xd0, 0x41, 0x25, 0xc4, 0xcc, + 0x82, 0x21, 0x89, 0xf2, 0x38, 0x35, 0xa3, 0xb2, + 0x4a, 0xb5, 0x45, 0x2c, 0x51, 0xdb, 0x66, 0x19, + 0x64, 0x1a, 0x61, 0xb2, 0xb6, 0xc2, 0xe7, 0x6f, + 0xc8, 0xe0, 0xf2, 0xf3, 0x54, 0xfc, 0x05, 0x47, + 0xb3, 0x4e, 0xea, 0xca, 0x91, 0xca, 0x72, 0xfb, + 0x6c, 0xc1, 0xb3, 0xc2, 0xe7, 0x16, 0xdd, 0xb1, + 0xa5, 0xf0, 0x00, 0x74, 0x10, 0xb3, 0x65, 0x96, + 0xc2, 0xeb, 0x0b, 0x9b, 0xfb, 0xe2, 0xe6, 0x32, + 0x2f, 0xd5, 0xc6, 0x1b, 0xa0, 0xb9, 0xe9, 0xf8, + 0x0e, 0x08, 0x63, 0x32, 0xca, 0xc8, 0xc3, 0x83, + 0x71, 0x9a, 0x54, 0xea, 0xee, 0xa9, 0x86, 0xec, + 0xad, 0xd3, 0xdc, 0x5b, 0x1d, 0xcc, 0x2f, 0x3b, + 0xcd, 0x24, 0x95, 0x07, 0xa6, 0xbb, 0xca, 0x6f, + 0x64, 0xff, 0x00, 0x99, 0xbb, 0x7f, 0x99, 0x7f, + 0x85, 0xa9, 0xf8, 0x0d, 0x37, 0x59, 0x04, 0xf6, + 0xb0, 0x3e, 0x73, 0x73, 0x0b, 0xc3, 0x35, 0xb5, + 0x8e, 0x35, 0x51, 0x40, 0xd7, 0xba, 0xbb, 0xec, + 0x2c, 0x0e, 0x61, 0x99, 0x7b, 0x3d, 0x70, 0x34, + 0xb9, 0xe5, 0xee, 0xde, 0x68, 0x25, 0x48, 0x41, + 0x65, 0xb3, 0xf7, 0x77, 0x46, 0xc2, 0x0e, 0x7d, + 0xb3, 0x1a, 0x86, 0x4c, 0x4e, 0x82, 0x5b, 0xaf, + 0x41, 0xdc, 0x4f, 0xc0, 0x40, 0xa2, 0x94, 0xca, + 0xb2, 0x98, 0xee, 0xef, 0xae, 0x2d, 0x2e, 0x1e, + 0x41, 0xb7, 0x6b, 0xa8, 0xe6, 0xe8, 0x15, 0x69, + 0x0d, 0xaf, 0x7d, 0x75, 0x59, 0xe5, 0xb9, 0x15, + 0xe9, 0x7d, 0x94, 0x12, 0xca, 0x6e, 0x9a, 0xd2, + 0x44, 0xae, 0xd0, 0xc7, 0x39, 0xba, 0x2a, 0xd1, + 0xba, 0x13, 0xf0, 0x10, 0x34, 0x21, 0x34, 0x77, + 0xe8, 0xa7, 0x6d, 0x72, 0xdc, 0x8a, 0x79, 0xba, + 0xb8, 0xc9, 0x2b, 0xae, 0xe9, 0x43, 0x30, 0xd0, + 0xcc, 0x6d, 0xad, 0x43, 0x57, 0x3e, 0x55, 0x94, + 0x47, 0x75, 0x7b, 0x73, 0x6b, 0x3b, 0xdc, 0xd3, + 0x6e, 0xd7, 0x61, 0x73, 0x74, 0x69, 0x07, 0x0e, + 0x23, 0xda, 0x4f, 0xc0, 0x45, 0x68, 0xdf, 0x4f, + 0xc8, 0x29, 0xdb, 0x6c, 0xbb, 0x22, 0xbd, 0x79, + 0xb2, 0xb6, 0x92, 0x51, 0x76, 0xd0, 0x70, 0xca, + 0xef, 0x25, 0xc4, 0x6b, 0xa7, 0x61, 0x71, 0x65, + 0x99, 0x50, 0xb9, 0x9e, 0x61, 0x72, 0xee, 0x6a, + 0x0b, 0x50, 0x5d, 0x72, 0xe0, 0x34, 0xe8, 0xae, + 0x81, 0xc0, 0x9f, 0x80, 0x8f, 0x4f, 0xcb, 0xf2, + 0xe0, 0x53, 0x51, 0x65, 0xf9, 0x46, 0x63, 0x14, + 0xcd, 0xcb, 0x4c, 0xb1, 0xcf, 0x03, 0x4b, 0xc3, + 0x64, 0x35, 0x0f, 0x03, 0xb6, 0xbc, 0x65, 0x99, + 0x45, 0xad, 0xe6, 0x5b, 0x2d, 0xe4, 0xf2, 0x18, + 0x8c, 0x6f, 0x01, 0xce, 0x1a, 0x83, 0x34, 0x57, + 0x42, 0x7e, 0x02, 0x1f, 0x73, 0x42, 0xeb, 0xcb, + 0xb2, 0xd9, 0xb3, 0x19, 0x9f, 0x04, 0x2e, 0x0c, + 0x2c, 0x69, 0x7f, 0x8d, 0xa8, 0x80, 0x69, 0xb8, + 0x99, 0x8f, 0x56, 0xf3, 0xcd, 0x19, 0x71, 0x79, + 0x88, 0x36, 0x8f, 0xe7, 0x2b, 0x5c, 0x5d, 0xd5, + 0x23, 0xb2, 0x7f, 0xcc, 0x26, 0xfb, 0x07, 0x7d, + 0x66, 0xa7, 0xe0, 0x21, 0x08, 0xa1, 0x23, 0x71, + 0xb5, 0xaf, 0x73, 0x42, 0x0d, 0x3a, 0xb5, 0x1d, + 0xd5, 0x2f, 0x95, 0xe5, 0x56, 0xd7, 0xd0, 0x5e, + 0x4d, 0x3c, 0x86, 0x2e, 0x61, 0xda, 0x1e, 0x37, + 0x05, 0x49, 0x24, 0xad, 0xf0, 0x65, 0xd9, 0x2e, + 0x63, 0x14, 0xcd, 0xb0, 0x74, 0xa2, 0xe2, 0x26, + 0x97, 0x87, 0x49, 0xa9, 0xdd, 0x9a, 0x27, 0xe0, + 0x20, 0x2a, 0xb2, 0x74, 0x6b, 0xd0, 0xa5, 0xb2, + 0xac, 0xaa, 0xd2, 0xef, 0x2d, 0x9a, 0xee, 0xe2, + 0x57, 0x44, 0x60, 0x7d, 0x1c, 0x5b, 0xa4, 0x61, + 0x01, 0xa4, 0xf8, 0xbd, 0x9a, 0xad, 0x87, 0x2d, + 0xca, 0xaf, 0xac, 0xe6, 0x97, 0x2a, 0x74, 0xad, + 0x9e, 0xdd, 0xb8, 0x9d, 0x1c, 0xba, 0x71, 0x37, + 0xba, 0x9f, 0x80, 0x85, 0x45, 0x22, 0xdc, 0xba, + 0x03, 0x91, 0xbb, 0x31, 0x05, 0xdc, 0xeb, 0x65, + 0xe6, 0xc0, 0xdc, 0xa5, 0x69, 0xa9, 0x62, 0xc3, + 0x2f, 0x82, 0xe7, 0x2e, 0xbe, 0xb9, 0x90, 0xb8, + 0x3e, 0xd9, 0x95, 0x65, 0x35, 0x6e, 0x9d, 0x3c, + 0x09, 0xf8, 0x0e, 0x76, 0x58, 0xdc, 0x3e, 0xca, + 0x4b, 0xe6, 0x80, 0x60, 0x89, 0xc1, 0x8e, 0x35, + 0x15, 0xa9, 0xa6, 0xe7, 0x75, 0x73, 0x54, 0x69, + 0xd3, 0xa9, 0x59, 0xed, 0x86, 0x4c, 0x76, 0x7e, + 0x7a, 0xf3, 0xfe, 0xc8, 0x64, 0x69, 0x9b, 0x47, + 0x8f, 0x8f, 0xc5, 0xd5, 0xd8, 0xd4, 0xb8, 0x60, + 0xcb, 0xb2, 0xc6, 0x59, 0xbf, 0x31, 0xba, 0x74, + 0xae, 0xb7, 0x74, 0x86, 0x3b, 0x68, 0x99, 0xa1, + 0xc4, 0x03, 0x4f, 0x1b, 0xba, 0x13, 0xf0, 0x10, + 0xe8, 0xa5, 0x73, 0x0b, 0x0b, 0x13, 0x97, 0x47, + 0x99, 0xe5, 0xee, 0x7f, 0x32, 0xf7, 0x60, 0x7c, + 0x72, 0x69, 0x20, 0xa8, 0xa4, 0xfc, 0x01, 0x11, + 0x13, 0xf0, 0x04, 0x44, 0x4f, 0xc0, 0x11, 0x11, + 0x3f, 0x00, 0x58, 0x3b, 0xab, 0x2b, 0x07, 0x75, + 0x3f, 0x01, 0x73, 0xba, 0xfe, 0x57, 0x63, 0xe6, + 0x37, 0xea, 0x85, 0xc0, 0xbb, 0xae, 0xbf, 0x95, + 0xd8, 0xf9, 0x8d, 0xfa, 0xa1, 0x70, 0xa0, 0xca, + 0x22, 0x20, 0x2c, 0x1d, 0x00, 0x95, 0x95, 0x83, + 0xa8, 0xf7, 0xd0, 0x36, 0xc7, 0x47, 0xb1, 0x03, + 0xf3, 0x5f, 0xfd, 0xc5, 0x5b, 0xa8, 0x57, 0x6c, + 0xe6, 0x4c, 0x99, 0x82, 0x0e, 0xb4, 0x61, 0x7d, + 0x41, 0xe6, 0xa9, 0x8b, 0xb1, 0x5f, 0x24, 0x85, + 0x1b, 0xcf, 0xec, 0x6f, 0xa8, 0x77, 0x04, 0x9e, + 0x92, 0x0a, 0xdd, 0x42, 0x54, 0x2b, 0x27, 0x3f, + 0xb1, 0xbe, 0xa1, 0xdc, 0x12, 0x7a, 0x49, 0xcf, + 0xec, 0x6f, 0xa8, 0x77, 0x04, 0x9e, 0x92, 0x0a, + 0xdd, 0x42, 0x54, 0x2b, 0x27, 0x3f, 0xb1, 0xbe, + 0xa1, 0xdc, 0x12, 0x7a, 0x49, 0xcf, 0xec, 0x6f, + 0xa8, 0x77, 0x04, 0x9e, 0x92, 0x0a, 0xdd, 0x42, + 0x54, 0x2b, 0x27, 0x3f, 0xb1, 0xbe, 0xa1, 0xdc, + 0x12, 0x7a, 0x49, 0xcf, 0xec, 0x6f, 0xa8, 0x77, + 0x04, 0x9e, 0x92, 0x0a, 0xdd, 0x42, 0x54, 0x2b, + 0x27, 0x3f, 0xb1, 0xbe, 0xa1, 0xdc, 0x12, 0x7a, + 0x49, 0xcf, 0xec, 0x6f, 0xa8, 0x77, 0x04, 0x9e, + 0x92, 0x0a, 0xdd, 0x42, 0x54, 0x2b, 0x27, 0x3f, + 0xb1, 0xbe, 0xa1, 0xdc, 0x12, 0x7a, 0x49, 0xcf, + 0xec, 0x6f, 0xa8, 0x77, 0x04, 0x9e, 0x92, 0x0a, + 0xdd, 0x42, 0x54, 0x2b, 0x27, 0x3f, 0xb1, 0xbe, + 0xa1, 0xdc, 0x12, 0x7a, 0x49, 0xcf, 0xec, 0x6f, + 0xa8, 0x77, 0x04, 0x9e, 0x92, 0x0a, 0xdd, 0x42, + 0x54, 0x2b, 0x27, 0x3f, 0xb1, 0xbe, 0xa1, 0xdc, + 0x12, 0x7a, 0x49, 0xcf, 0xec, 0x6f, 0xa8, 0x77, + 0x04, 0x9e, 0x92, 0x0a, 0xdd, 0x42, 0xcd, 0x7b, + 0x2a, 0xc7, 0xcf, 0xec, 0x6f, 0xa8, 0x77, 0x04, + 0x9e, 0x92, 0x73, 0xfb, 0x1b, 0xea, 0x1d, 0xc1, + 0x27, 0xa4, 0x82, 0xb9, 0x8b, 0xb2, 0x98, 0x8d, + 0x41, 0xae, 0x91, 0xa9, 0x58, 0xf9, 0xfd, 0x8d, + 0xf5, 0x0e, 0xe0, 0x93, 0xd2, 0x4e, 0x7f, 0x63, + 0x7d, 0x43, 0xb8, 0x24, 0xf4, 0x90, 0x57, 0x2a, + 0x16, 0x37, 0x6b, 0x5a, 0xd1, 0x59, 0x39, 0xfd, + 0x8d, 0xf5, 0x0e, 0xe0, 0x93, 0xd2, 0x4e, 0x7f, + 0x63, 0x7d, 0x43, 0xb8, 0x24, 0xf4, 0x90, 0x57, + 0x2a, 0x17, 0xa1, 0x3c, 0xad, 0x66, 0x06, 0xc8, + 0xe0, 0xcf, 0x9a, 0x1c, 0x68, 0xac, 0x3c, 0xfe, + 0xc6, 0xfa, 0x87, 0x70, 0x49, 0xe9, 0x27, 0x3f, + 0xb1, 0xbe, 0xa1, 0xdc, 0x12, 0x7a, 0x48, 0x2b, + 0x7a, 0x29, 0xa0, 0xd0, 0x9d, 0xed, 0xe4, 0xaa, + 0xb2, 0x73, 0xfb, 0x1b, 0xea, 0x1d, 0xc1, 0x27, + 0xa4, 0x9c, 0xfe, 0xc6, 0xfa, 0x87, 0x70, 0x49, + 0xe9, 0x20, 0xae, 0x57, 0x72, 0xb5, 0x1b, 0xdb, + 0x95, 0xdf, 0x42, 0x6b, 0xac, 0xe9, 0xa5, 0x2a, + 0x55, 0x8f, 0x9f, 0xd8, 0xdf, 0x50, 0xee, 0x09, + 0x3d, 0x24, 0xe7, 0xf6, 0x37, 0xd4, 0x3b, 0x82, + 0x4f, 0x49, 0x05, 0x6e, 0xba, 0x28, 0x0e, 0xf6, + 0x8a, 0x9d, 0xc3, 0xbd, 0xa9, 0x2a, 0x15, 0x93, + 0x9f, 0xd8, 0xdf, 0x50, 0xee, 0x09, 0x3d, 0x24, + 0xe7, 0xf6, 0x37, 0xd4, 0x3b, 0x82, 0x4f, 0x49, + 0x05, 0x6e, 0xa1, 0x2a, 0x15, 0x93, 0x9f, 0xd8, + 0xdf, 0x50, 0xee, 0x09, 0x3d, 0x24, 0xe7, 0xf6, + 0x37, 0xd4, 0x3b, 0x82, 0x4f, 0x49, 0x05, 0x6e, + 0xa1, 0x2a, 0x15, 0x93, 0x9f, 0xd8, 0xdf, 0x50, + 0xee, 0x09, 0x3d, 0x24, 0xe7, 0xf6, 0x37, 0xd4, + 0x3b, 0x82, 0x4f, 0x49, 0x05, 0x6e, 0xa1, 0x2a, + 0x15, 0x93, 0x9f, 0xd8, 0xdf, 0x50, 0xee, 0x09, + 0x3d, 0x24, 0xe7, 0xf6, 0x37, 0xd4, 0x3b, 0x82, + 0x4f, 0x49, 0x05, 0x6e, 0xa1, 0x2a, 0x15, 0x93, + 0x9f, 0xd8, 0xdf, 0x50, 0xee, 0x09, 0x3d, 0x24, + 0xe7, 0xf6, 0x37, 0xd4, 0x3b, 0x82, 0x4f, 0x49, + 0x05, 0x6e, 0xa1, 0x2a, 0x15, 0x93, 0x9f, 0xd8, + 0xdf, 0x50, 0xee, 0x09, 0x3d, 0x24, 0xe7, 0xf6, + 0x37, 0xd4, 0x3b, 0x82, 0x4f, 0x49, 0x05, 0x6e, + 0xa1, 0x2a, 0x15, 0x93, 0x9f, 0xd8, 0xdf, 0x50, + 0xee, 0x09, 0x3d, 0x24, 0xe7, 0xf6, 0x37, 0xd4, + 0x3b, 0x82, 0x4f, 0x49, 0x05, 0x6e, 0xa1, 0x2a, + 0x15, 0x93, 0x9f, 0xd8, 0xdf, 0x50, 0xee, 0x09, + 0x3d, 0x24, 0xe7, 0xf6, 0x37, 0xd4, 0x3b, 0x82, + 0x4f, 0x49, 0x05, 0x6e, 0xa1, 0x75, 0x65, 0x5f, + 0xcc, 0xed, 0x3e, 0xd9, 0x9f, 0x58, 0x29, 0xae, + 0x7f, 0x63, 0x7d, 0x43, 0xb8, 0x24, 0xf4, 0x96, + 0xeb, 0x39, 0xb6, 0x50, 0xdd, 0xc2, 0x2d, 0xe1, + 0x70, 0x9c, 0xbd, 0xbc, 0xd1, 0xa3, 0xf4, 0x3a, + 0xbe, 0x2e, 0xb7, 0x20, 0xdf, 0x9b, 0x7b, 0xeb, + 0xbc, 0xd6, 0xae, 0x35, 0xdb, 0x9b, 0xfb, 0xe1, + 0xf3, 0x5a, 0xb8, 0x90, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x07, 0xa8, 0xff, 0x00, 0x68, 0xce, + 0xda, 0x93, 0x51, 0x91, 0xfe, 0xd1, 0x9d, 0xb5, + 0x26, 0x80, 0xb8, 0x73, 0x0f, 0x79, 0xb5, 0xfb, + 0x4f, 0x94, 0x2e, 0xe5, 0xc3, 0x98, 0x7b, 0xcd, + 0xaf, 0xda, 0x7c, 0xa1, 0x03, 0x2f, 0xf7, 0x9b, + 0xbf, 0x3c, 0xfd, 0x62, 0xbb, 0x97, 0x0e, 0x5f, + 0xef, 0x37, 0x7e, 0x79, 0xfa, 0xc5, 0x77, 0x20, + 0x1d, 0x45, 0x45, 0x1d, 0x65, 0x4a, 0x9d, 0x45, + 0x45, 0x1d, 0x65, 0x01, 0x11, 0x10, 0x74, 0x66, + 0x3f, 0xe9, 0xa7, 0xf9, 0xc3, 0xeb, 0x2a, 0x90, + 0xd4, 0xad, 0xb9, 0x8f, 0xfa, 0x69, 0xfe, 0x70, + 0xfa, 0xca, 0xa4, 0x35, 0x20, 0xca, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x09, + 0xcd, 0x9b, 0x86, 0x30, 0xdb, 0x9b, 0xa0, 0xf8, + 0xdb, 0x72, 0xc1, 0xcd, 0xdb, 0xf3, 0x84, 0x00, + 0x09, 0x1e, 0x56, 0x95, 0xdd, 0x95, 0x65, 0x53, + 0x5b, 0xc1, 0x7e, 0xd7, 0xcf, 0x14, 0x8e, 0xb8, + 0x8a, 0x98, 0x9a, 0xea, 0x80, 0x4e, 0x3d, 0x2e, + 0xe1, 0x55, 0x5d, 0xdf, 0xcb, 0xb4, 0xa4, 0x72, + 0xac, 0xc2, 0xde, 0xce, 0xda, 0xfa, 0x39, 0xb1, + 0x63, 0xb9, 0x8b, 0x04, 0x58, 0x45, 0x74, 0x90, + 0xfa, 0x57, 0x79, 0x02, 0xc2, 0xda, 0xe6, 0xdf, + 0x3b, 0x8a, 0xde, 0x07, 0x35, 0xf3, 0x46, 0xf1, + 0xe3, 0xb4, 0xd5, 0xb4, 0xfc, 0xe3, 0xda, 0xa2, + 0x93, 0xda, 0xbc, 0x4e, 0x82, 0x07, 0x5b, 0x96, + 0xfb, 0x26, 0x27, 0x03, 0x87, 0x57, 0x39, 0x5f, + 0xce, 0x51, 0xb9, 0x56, 0x61, 0x6b, 0x97, 0xdb, + 0xdc, 0xbf, 0xc6, 0x37, 0xb2, 0x37, 0x04, 0x22, + 0x9a, 0x1a, 0x37, 0x74, 0xd5, 0x67, 0x2f, 0xcc, + 0x6d, 0xdb, 0x61, 0x73, 0x97, 0xde, 0xe2, 0x74, + 0x52, 0x78, 0xd1, 0xb9, 0xa3, 0x11, 0x6b, 0xd0, + 0x46, 0x56, 0xba, 0x54, 0xce, 0xc9, 0xff, 0x00, + 0x34, 0x7f, 0xd8, 0x3f, 0xc2, 0xd5, 0x0d, 0xa7, + 0x75, 0x48, 0xe4, 0x57, 0xf0, 0x58, 0x5e, 0xba, + 0x7b, 0x8c, 0x58, 0x0c, 0x6e, 0x60, 0xc2, 0x31, + 0x69, 0x24, 0x1f, 0x91, 0x07, 0x9c, 0xb6, 0xc6, + 0x5b, 0xdc, 0xc5, 0xf0, 0xc7, 0x21, 0x84, 0x02, + 0xe7, 0x49, 0x23, 0x75, 0x86, 0x62, 0xa2, 0x94, + 0xc9, 0xdf, 0x93, 0x47, 0x9a, 0x45, 0x05, 0x9c, + 0x72, 0x4d, 0x29, 0x2e, 0xa5, 0xcc, 0xa7, 0x40, + 0xa3, 0x4d, 0x70, 0x37, 0xb3, 0x45, 0x1b, 0x94, + 0x66, 0x51, 0x58, 0x66, 0x0e, 0xb8, 0x90, 0x13, + 0x0c, 0xa1, 0xcc, 0x93, 0x46, 0x90, 0x09, 0xad, + 0x68, 0xba, 0xed, 0x6e, 0xb2, 0x3c, 0xba, 0xf1, + 0xb7, 0x30, 0x3a, 0x5b, 0x83, 0x88, 0xd0, 0x90, + 0x1a, 0x23, 0x6b, 0x81, 0xd5, 0xbf, 0xad, 0x07, + 0x46, 0x4a, 0x29, 0x9d, 0xe6, 0x5e, 0x6c, 0x9f, + 0x58, 0x2e, 0x2d, 0x93, 0x1f, 0xe6, 0xac, 0x1f, + 0xe1, 0xbf, 0x57, 0x68, 0x2d, 0xb6, 0xb9, 0x9e, + 0x5d, 0x69, 0x9a, 0x5d, 0x5c, 0xb5, 0xd2, 0x3a, + 0x0b, 0x86, 0x10, 0xd2, 0x58, 0x6b, 0x89, 0xc6, + 0xa4, 0x53, 0x78, 0x6f, 0xae, 0x1c, 0x8e, 0xfa, + 0x1c, 0xbe, 0xf5, 0xb7, 0x17, 0x15, 0xc0, 0x18, + 0xe6, 0xf8, 0xa2, 0xa6, 0xa4, 0x0a, 0x20, 0xdd, + 0x92, 0xff, 0x00, 0xa8, 0x23, 0xdf, 0xe7, 0x64, + 0x15, 0xee, 0x15, 0x21, 0x96, 0x62, 0x39, 0xbe, + 0x6b, 0x4d, 0x78, 0x24, 0x00, 0x76, 0x71, 0x28, + 0x8c, 0xba, 0xf2, 0x1b, 0x6c, 0xd5, 0xb7, 0x92, + 0x62, 0xe6, 0x9a, 0xf7, 0x3f, 0xc5, 0x15, 0x34, + 0x77, 0x60, 0x76, 0xd4, 0xb6, 0x41, 0x3b, 0x64, + 0xcd, 0x6f, 0xee, 0x58, 0x0b, 0x98, 0xf6, 0x3a, + 0x46, 0x82, 0x29, 0x51, 0x5a, 0xd0, 0xa0, 0x8b, + 0xd9, 0xdd, 0x19, 0xbd, 0xa9, 0x6e, 0x9d, 0x3e, + 0x11, 0xa5, 0x4d, 0xdb, 0xbe, 0xdd, 0x83, 0x3c, + 0x7c, 0x8c, 0x32, 0xc4, 0x1e, 0x79, 0xc6, 0x03, + 0x42, 0x5b, 0x4d, 0xc3, 0xc2, 0xb8, 0x6d, 0xaf, + 0x72, 0x3b, 0x27, 0xba, 0xfe, 0xdb, 0x9c, 0x37, + 0x2e, 0x69, 0xe6, 0xed, 0xdc, 0x3c, 0x56, 0x17, + 0x6b, 0xd2, 0xb9, 0x72, 0xac, 0xd9, 0x96, 0xd3, + 0xce, 0x2e, 0xda, 0x5f, 0x05, 0xe0, 0x22, 0x6a, + 0x6b, 0x15, 0xae, 0x9e, 0xfa, 0x0e, 0xcc, 0xbf, + 0x34, 0xcb, 0x2d, 0xe6, 0x73, 0xec, 0xac, 0x27, + 0x74, 0x8e, 0x61, 0x69, 0xa3, 0xb1, 0x1c, 0x24, + 0xe9, 0xd1, 0xa7, 0x79, 0x78, 0xb7, 0x35, 0xd9, + 0x6b, 0xd2, 0x05, 0x01, 0x9c, 0x50, 0x6f, 0x54, + 0xb3, 0x8d, 0x79, 0x8a, 0xf3, 0x29, 0xca, 0xe2, + 0x99, 0xd6, 0x0f, 0x92, 0x7b, 0x99, 0x9a, 0x63, + 0x61, 0x7b, 0x43, 0x43, 0x5a, 0x75, 0xad, 0x10, + 0x5f, 0x5b, 0xc7, 0x91, 0x5c, 0x65, 0xee, 0xc5, + 0xcf, 0xcb, 0x23, 0x5e, 0xcf, 0x17, 0xc5, 0xd0, + 0x58, 0x75, 0xf7, 0x10, 0x46, 0xa9, 0xbd, 0x93, + 0xfe, 0x61, 0x3f, 0xd8, 0x3b, 0xeb, 0x35, 0x42, + 0x29, 0x2c, 0x87, 0x31, 0xb7, 0xb0, 0xbb, 0x92, + 0x6b, 0x8c, 0x58, 0x5f, 0x11, 0x60, 0x0d, 0x15, + 0xd2, 0x5c, 0x10, 0x75, 0x65, 0x7a, 0x72, 0x6c, + 0xe0, 0x76, 0x3d, 0x25, 0x8d, 0x95, 0xf7, 0xab, + 0x93, 0xbb, 0xec, 0xef, 0xf0, 0xb5, 0x73, 0x58, + 0xe6, 0x36, 0xd6, 0xf9, 0x7d, 0xfd, 0xbc, 0xb8, + 0xb1, 0xdd, 0x0f, 0xd5, 0xd1, 0xb5, 0xdf, 0xd7, + 0xa5, 0x63, 0x23, 0xcc, 0x20, 0xb0, 0x9a, 0x69, + 0x27, 0xc5, 0x49, 0x22, 0x74, 0x60, 0x30, 0x62, + 0xf1, 0x89, 0x1c, 0x48, 0x3a, 0x2c, 0x89, 0x1b, + 0x2f, 0x7f, 0x4d, 0x1f, 0xad, 0x1d, 0xf0, 0xc5, + 0xef, 0x65, 0x7d, 0xea, 0xeb, 0xe6, 0xf3, 0x0e, + 0xa8, 0xdc, 0xd6, 0xd5, 0xb3, 0x26, 0x92, 0x28, + 0x72, 0x0b, 0xd7, 0x5c, 0x30, 0xc9, 0x17, 0x3b, + 0x47, 0xb0, 0x6b, 0xa3, 0x83, 0x05, 0x47, 0x68, + 0x15, 0xa0, 0xdf, 0x65, 0x79, 0x7d, 0x94, 0xf0, + 0xe5, 0xaf, 0x92, 0x59, 0xee, 0x06, 0x13, 0x23, + 0xc5, 0x30, 0xb7, 0xb0, 0x83, 0x2c, 0x23, 0xe1, + 0x29, 0x37, 0xbd, 0xa0, 0x53, 0x84, 0x26, 0x4c, + 0x3f, 0xc9, 0x73, 0x6f, 0xb3, 0x15, 0xed, 0xd1, + 0xcb, 0xc6, 0x59, 0x98, 0x65, 0xfd, 0x5b, 0x2e, + 0x59, 0x7c, 0x5c, 0xc8, 0xde, 0xec, 0x6d, 0x95, + 0x82, 0xba, 0x74, 0x71, 0x2d, 0x8d, 0xcc, 0xb2, + 0x9b, 0x6c, 0xbe, 0xf2, 0xc6, 0xd8, 0x48, 0xee, + 0x7d, 0x94, 0x6c, 0xae, 0x1a, 0x5e, 0xf3, 0x50, + 0x6b, 0xbc, 0x10, 0x62, 0xd8, 0x7f, 0xf5, 0x5b, + 0xbf, 0xb7, 0x6f, 0x86, 0x35, 0xe3, 0x2f, 0xcc, + 0x59, 0x0e, 0x5f, 0xec, 0x79, 0x85, 0xb3, 0xa5, + 0xb1, 0x7b, 0x89, 0x8e, 0x46, 0x8a, 0x51, 0xc6, + 0xa4, 0xd3, 0xba, 0x99, 0x65, 0xf6, 0x5e, 0xcc, + 0xba, 0x7c, 0xba, 0xf8, 0xc8, 0xd8, 0xe5, 0x78, + 0x7e, 0x38, 0xc5, 0x4d, 0x45, 0x3d, 0x15, 0xee, + 0x2b, 0xfc, 0xaa, 0xe2, 0xc7, 0xab, 0x6e, 0x9d, + 0x23, 0x22, 0x89, 0xe5, 0xf6, 0xb3, 0xb4, 0x54, + 0xd3, 0x73, 0x17, 0x0a, 0x0f, 0x37, 0xf9, 0x6d, + 0xa0, 0xcb, 0xfd, 0xbf, 0x2d, 0x9d, 0xef, 0xb4, + 0x0f, 0x0d, 0x7c, 0x4f, 0xaf, 0x8a, 0x74, 0x71, + 0xa8, 0x7f, 0x08, 0xd7, 0xe1, 0x52, 0xd7, 0x97, + 0xf6, 0x30, 0xe5, 0xbd, 0x59, 0x60, 0x5f, 0x2b, + 0x5e, 0xec, 0x72, 0xcc, 0xf1, 0x4a, 0x9d, 0xea, + 0x77, 0x14, 0x45, 0x6b, 0xf2, 0xa0, 0xca, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x2c, 0x1d, + 0xd5, 0x95, 0x83, 0xba, 0x82, 0xe5, 0x75, 0xfc, + 0xae, 0xc7, 0xcc, 0x6f, 0xd5, 0x0b, 0x85, 0x77, + 0x5d, 0x7f, 0x2b, 0xb1, 0xf3, 0x1b, 0xf5, 0x42, + 0xe1, 0x41, 0x94, 0x44, 0x40, 0x58, 0x2b, 0x2b, + 0x1b, 0x85, 0x06, 0x76, 0xc7, 0xc9, 0xb2, 0xed, + 0x3f, 0xfb, 0xaa, 0xb6, 0xac, 0xbb, 0x63, 0xe4, + 0xd9, 0xf6, 0x9f, 0xfd, 0xd5, 0x5a, 0x40, 0xf0, + 0xaf, 0x51, 0x46, 0xf9, 0x65, 0x6c, 0x51, 0x8a, + 0xb9, 0xe7, 0x0b, 0x45, 0x57, 0x85, 0x39, 0x91, + 0xe6, 0xdc, 0xdd, 0xcd, 0xbd, 0xab, 0x2d, 0x62, + 0xab, 0xdd, 0x80, 0xce, 0x01, 0xc6, 0x41, 0xec, + 0xa0, 0x89, 0xba, 0xb6, 0x96, 0xd6, 0x77, 0xdb, + 0xcb, 0x4e, 0x72, 0x33, 0x47, 0x61, 0x35, 0x0b, + 0x7d, 0x96, 0x53, 0x7b, 0x7c, 0xc7, 0x49, 0x0b, + 0x40, 0x8d, 0xba, 0x0c, 0x92, 0x3b, 0x0b, 0x6b, + 0xdd, 0x5e, 0xf3, 0xed, 0x19, 0xb5, 0xd7, 0x61, + 0xff, 0x00, 0x22, 0xed, 0xcf, 0x49, 0xb6, 0xca, + 0xf2, 0xeb, 0x46, 0xe8, 0x63, 0xd9, 0xce, 0x48, + 0xdd, 0xf3, 0x41, 0xaf, 0x85, 0x04, 0x65, 0xf6, + 0x5d, 0x77, 0x60, 0x40, 0xb8, 0x65, 0x03, 0xf4, + 0xb1, 0xed, 0x38, 0x9a, 0x7b, 0xa1, 0x78, 0xb2, + 0xb5, 0x7d, 0xe5, 0xd4, 0x76, 0xb1, 0xd0, 0x3e, + 0x43, 0x4a, 0x9a, 0xd0, 0x0d, 0x64, 0x95, 0x2d, + 0x05, 0x6e, 0x76, 0x5a, 0x76, 0xc8, 0x71, 0x1b, + 0x59, 0x6b, 0x19, 0x3b, 0x83, 0x47, 0x19, 0x5a, + 0x32, 0x51, 0xec, 0xf6, 0xf7, 0xb9, 0x8b, 0xb5, + 0xc3, 0x1f, 0x37, 0x19, 0xdf, 0x7c, 0x9e, 0x2e, + 0x84, 0x11, 0x92, 0x33, 0x04, 0xae, 0x8c, 0x1c, + 0x78, 0x4d, 0x01, 0x1b, 0xb4, 0x34, 0x34, 0x5b, + 0x6e, 0xec, 0xe7, 0xb3, 0x7b, 0x23, 0x9c, 0x00, + 0xf7, 0xb0, 0x48, 0x00, 0x35, 0xa0, 0x75, 0x69, + 0x5e, 0xce, 0x85, 0xd1, 0x97, 0xe6, 0xa2, 0xc9, + 0xb4, 0xf6, 0x68, 0xa7, 0x7e, 0x2a, 0xf3, 0xb2, + 0x0f, 0x18, 0x57, 0x70, 0x68, 0xec, 0x2e, 0xbd, + 0xad, 0x35, 0xcc, 0xd8, 0x77, 0xe1, 0x66, 0x8e, + 0xd9, 0x72, 0x08, 0xdb, 0x2c, 0xbe, 0xea, 0xfa, + 0x42, 0xcb, 0x66, 0x62, 0xc3, 0xa5, 0xee, 0x26, + 0x8d, 0x68, 0xec, 0x92, 0xb6, 0xde, 0x64, 0xf7, + 0xf6, 0x51, 0x89, 0x65, 0x6b, 0x5d, 0x11, 0xd0, + 0x24, 0x63, 0xb1, 0x36, 0xbd, 0x9a, 0x2e, 0xff, + 0x00, 0x1a, 0xd7, 0x65, 0x1a, 0xe6, 0x1a, 0x3a, + 0xea, 0x63, 0x8c, 0x8d, 0xd6, 0xd6, 0x94, 0xef, + 0x26, 0xcf, 0x1e, 0x7e, 0xd3, 0x30, 0xb3, 0x7d, + 0x4b, 0x0c, 0x25, 0xed, 0x69, 0xd4, 0x08, 0xaa, + 0x08, 0xbb, 0x2c, 0xbe, 0xee, 0xfd, 0xe5, 0x96, + 0xcc, 0xc5, 0x84, 0x55, 0xee, 0x71, 0xc2, 0xd6, + 0xd7, 0x7c, 0x95, 0xb6, 0xf3, 0x27, 0xbe, 0xb2, + 0x88, 0x4d, 0x2b, 0x5a, 0xe8, 0x8e, 0x8e, 0x72, + 0x37, 0x62, 0x03, 0xb7, 0x45, 0xdd, 0xee, 0xbb, + 0x28, 0x1c, 0xc3, 0x85, 0xf7, 0x53, 0x51, 0xee, + 0x1a, 0xcb, 0x6a, 0x45, 0x3b, 0xcb, 0x3b, 0x3b, + 0x59, 0xad, 0x73, 0x0b, 0x37, 0xf8, 0xd1, 0x98, + 0x8b, 0xda, 0xd3, 0xa8, 0x3b, 0x4d, 0x28, 0x82, + 0x0d, 0x48, 0xd8, 0x64, 0x77, 0x77, 0xf6, 0xe6, + 0xe6, 0x17, 0xc6, 0xd8, 0xc3, 0x8b, 0x3c, 0x72, + 0x41, 0xa8, 0xa7, 0x1a, 0x8d, 0xec, 0x6e, 0xee, + 0xa9, 0xe8, 0x23, 0x92, 0x5d, 0x94, 0x91, 0x91, + 0xb4, 0xbd, 0xc6, 0x73, 0x40, 0xd1, 0x53, 0xb9, + 0xbc, 0x10, 0x68, 0x97, 0x66, 0xaf, 0xa2, 0x89, + 0xf2, 0xba, 0x48, 0x48, 0x63, 0x4b, 0x88, 0x0f, + 0xde, 0x15, 0x5c, 0x0d, 0xb2, 0xb9, 0x7d, 0x9b, + 0xaf, 0x5a, 0xca, 0xdb, 0xb5, 0xd8, 0x4b, 0xeb, + 0xda, 0xdc, 0x5e, 0x5d, 0x6b, 0x74, 0xd0, 0xe7, + 0x98, 0x64, 0x63, 0x40, 0xd2, 0xe2, 0xd7, 0x00, + 0x05, 0x34, 0xeb, 0x01, 0x58, 0xe1, 0x66, 0x53, + 0xf0, 0xf4, 0x8d, 0x12, 0x4d, 0xec, 0x86, 0x51, + 0x8d, 0xd8, 0x46, 0x3c, 0x47, 0x0e, 0x80, 0x37, + 0x90, 0x40, 0x0b, 0x09, 0xba, 0xbc, 0xe6, 0x35, + 0x6f, 0x32, 0x1f, 0xcd, 0x91, 0xa7, 0x16, 0x25, + 0xcc, 0xac, 0x76, 0xd0, 0xda, 0xcb, 0xb3, 0xb3, + 0x35, 0xf2, 0x18, 0xad, 0x5b, 0x72, 0xe7, 0x73, + 0x94, 0xab, 0xb0, 0x82, 0x29, 0xe2, 0xef, 0x90, + 0xb9, 0xa5, 0xcb, 0x32, 0xbb, 0x9c, 0xb6, 0x5b, + 0xdc, 0xba, 0x49, 0x01, 0xb7, 0xa7, 0x38, 0xd9, + 0x77, 0x41, 0xa7, 0x06, 0x84, 0x10, 0xa8, 0xa5, + 0x2c, 0x72, 0xdb, 0x3f, 0x61, 0x39, 0x8e, 0x62, + 0xf7, 0xb6, 0x02, 0xec, 0x11, 0xc7, 0x1f, 0x94, + 0xe3, 0xdd, 0x4b, 0xfc, 0xb6, 0xcf, 0xd8, 0x1b, + 0x98, 0xe5, 0xcf, 0x7b, 0xa0, 0xc5, 0x82, 0x46, + 0x49, 0xe5, 0x34, 0xf6, 0xc2, 0x08, 0xb4, 0x53, + 0xae, 0xc9, 0x32, 0xdb, 0x7b, 0x6b, 0x6b, 0xcb, + 0xc9, 0xde, 0xc8, 0x65, 0x8d, 0xae, 0x7b, 0x47, + 0x96, 0x5e, 0xe1, 0x5c, 0x2d, 0x0b, 0xc4, 0x19, + 0x46, 0x5d, 0x3d, 0x94, 0xd7, 0xdc, 0xfb, 0xa2, + 0x82, 0x39, 0x8b, 0x43, 0x8e, 0x9f, 0xd5, 0x83, + 0x4e, 0x52, 0x08, 0x54, 0x53, 0x4f, 0xcb, 0x32, + 0xab, 0x9c, 0xba, 0x7b, 0xbc, 0xb5, 0xf2, 0xe3, + 0xb6, 0xd3, 0x23, 0x25, 0xd6, 0x46, 0xee, 0x8e, + 0xd2, 0xd3, 0x61, 0x96, 0xda, 0x7b, 0x0b, 0xb3, + 0x1c, 0xc5, 0xee, 0x65, 0xbe, 0x21, 0x1c, 0x6c, + 0x8f, 0xca, 0x73, 0xbf, 0xf9, 0x41, 0x16, 0xb7, + 0xbe, 0xc6, 0xe5, 0x96, 0x91, 0xde, 0x39, 0x94, + 0x82, 0x52, 0x43, 0x5d, 0x5d, 0xee, 0xc2, 0xef, + 0xb9, 0xcb, 0x72, 0xf7, 0x59, 0xc7, 0x98, 0xd9, + 0x3e, 0x43, 0x6c, 0x24, 0x0c, 0x9e, 0x37, 0xe9, + 0x7b, 0x74, 0xd0, 0xd1, 0x49, 0x5d, 0x33, 0x28, + 0xea, 0x1b, 0x50, 0xf9, 0x26, 0xf6, 0x5c, 0x67, + 0x9a, 0x70, 0x6f, 0x8c, 0x5d, 0x53, 0xe5, 0x0d, + 0xea, 0xa0, 0xab, 0xa9, 0x2b, 0x7c, 0x86, 0xf6, + 0xe2, 0xcb, 0xdb, 0x63, 0x2c, 0xe6, 0x8b, 0x5c, + 0xe0, 0x09, 0x38, 0x8e, 0x1a, 0xf1, 0x28, 0xdd, + 0x1b, 0x9a, 0xb7, 0x15, 0xc3, 0x28, 0x9c, 0x41, + 0x95, 0xe5, 0xad, 0x71, 0xf1, 0x66, 0x7b, 0xa2, + 0x77, 0x67, 0x16, 0x2a, 0x77, 0xd0, 0x53, 0xff, + 0x00, 0x2e, 0xea, 0x91, 0xbb, 0xc8, 0x6f, 0x6d, + 0x2d, 0x3d, 0xae, 0x62, 0xce, 0x6f, 0x46, 0x80, + 0x49, 0x3e, 0x32, 0x45, 0x97, 0x9e, 0xbd, 0xf6, + 0x13, 0xa6, 0x93, 0xd2, 0x9f, 0xd4, 0x07, 0x1d, + 0x79, 0x2a, 0x6f, 0x39, 0xb8, 0xf6, 0x8c, 0x9e, + 0xf4, 0xeb, 0x6b, 0x2e, 0x39, 0xb6, 0xf6, 0x98, + 0x5a, 0x82, 0xb5, 0x63, 0x65, 0x3d, 0xf5, 0xc3, + 0x6d, 0xe1, 0xa0, 0x7b, 0x81, 0x75, 0x5c, 0x68, + 0x00, 0x0b, 0x37, 0xf6, 0x33, 0x58, 0x5c, 0x7b, + 0x3c, 0xf4, 0x2f, 0xa0, 0x75, 0x5a, 0x6a, 0x08, + 0x2a, 0x4f, 0x20, 0xff, 0x00, 0xb5, 0xb3, 0xbf, + 0xcc, 0xb5, 0x18, 0x99, 0xcd, 0xc2, 0x4f, 0xce, + 0x3f, 0xfc, 0x85, 0x9c, 0xf8, 0x0b, 0x9c, 0xbf, + 0x2f, 0xcc, 0x46, 0xb7, 0xc7, 0xcd, 0x3c, 0xf6, + 0x45, 0x35, 0xf7, 0xd0, 0x46, 0xe5, 0xf9, 0x65, + 0xd6, 0x60, 0xf7, 0x36, 0x00, 0x03, 0x59, 0xa6, + 0x49, 0x1c, 0x68, 0xd6, 0xae, 0xa9, 0xb6, 0x7a, + 0xe9, 0x90, 0xba, 0x68, 0x25, 0x8a, 0xe9, 0xb1, + 0xe9, 0x78, 0x89, 0xd5, 0x20, 0x0d, 0x6b, 0xa5, + 0xf5, 0xb5, 0xd9, 0x48, 0x8b, 0x0d, 0x1d, 0x75, + 0x2f, 0x8e, 0x46, 0xb2, 0x0e, 0x2d, 0x1f, 0x45, + 0x47, 0x64, 0xf9, 0x91, 0xcb, 0x6e, 0x4c, 0xb8, + 0x0c, 0x8c, 0x7b, 0x4b, 0x5d, 0x1d, 0x69, 0xaf, + 0x75, 0x07, 0x1f, 0x6b, 0xf2, 0xaa, 0x93, 0x6e, + 0xcf, 0xdd, 0xbe, 0xe7, 0xd9, 0x63, 0x7b, 0x0c, + 0xad, 0x89, 0xb2, 0xbc, 0x12, 0x40, 0x01, 0xda, + 0x87, 0x6d, 0x6a, 0xca, 0xe0, 0x6d, 0xe6, 0x6d, + 0x1b, 0x70, 0xd2, 0x37, 0x48, 0x65, 0x73, 0x77, + 0x03, 0x07, 0x8d, 0xe0, 0x52, 0xf9, 0x2d, 0xcf, + 0xb5, 0xe6, 0xb9, 0x95, 0xc1, 0x3e, 0x2b, 0xe3, + 0x38, 0x7c, 0xd0, 0x68, 0x10, 0x70, 0x1d, 0x99, + 0xcc, 0x4b, 0x49, 0x89, 0xd0, 0xca, 0x46, 0x92, + 0xd6, 0x3e, 0xa6, 0x9c, 0x0b, 0x92, 0xcb, 0x2b, + 0xba, 0xbc, 0x96, 0x48, 0x59, 0x48, 0xe4, 0x85, + 0xb8, 0x9e, 0xd7, 0xd7, 0x45, 0x35, 0x84, 0xc9, + 0xf9, 0xfe, 0xb2, 0xb6, 0x10, 0x13, 0x8b, 0x18, + 0x0e, 0xc3, 0xa7, 0x40, 0x3a, 0x6b, 0xdc, 0x25, + 0x59, 0x2d, 0x8c, 0x7f, 0x11, 0xe6, 0x1c, 0xdf, + 0xa9, 0x18, 0xa9, 0xf3, 0x90, 0x53, 0xc1, 0xad, + 0x3b, 0x34, 0xa7, 0x75, 0x4a, 0x1d, 0x9f, 0xbd, + 0x17, 0xa2, 0xcb, 0x1c, 0x7c, 0xf3, 0x98, 0x64, + 0x68, 0x2e, 0x3a, 0x40, 0x34, 0x5c, 0xac, 0xcb, + 0x33, 0x20, 0x5b, 0x5b, 0x59, 0x86, 0x91, 0x53, + 0x80, 0xf1, 0x29, 0x8d, 0xa1, 0xba, 0x92, 0xd3, + 0x3a, 0xb5, 0xb8, 0x6d, 0x41, 0x8a, 0x36, 0xb8, + 0xee, 0x68, 0x04, 0xe2, 0x1d, 0xd0, 0x50, 0x57, + 0xe4, 0x63, 0xa3, 0x73, 0x98, 0xe1, 0x47, 0x30, + 0x96, 0x91, 0xd9, 0x6e, 0xb5, 0xd5, 0x7b, 0x96, + 0xcf, 0x62, 0xc8, 0x5d, 0x39, 0x6d, 0x67, 0x6e, + 0x26, 0xb0, 0x1f, 0x18, 0x0a, 0x6e, 0xa9, 0xab, + 0x9c, 0xa5, 0x97, 0x59, 0xe5, 0xbd, 0xcb, 0x05, + 0x6d, 0x6e, 0x5a, 0x27, 0x7b, 0xb7, 0x06, 0x0a, + 0x17, 0x0e, 0xea, 0x87, 0xce, 0x6f, 0xbd, 0xbb, + 0x30, 0x92, 0x56, 0x9a, 0xc6, 0x0e, 0x08, 0xfb, + 0x0c, 0x1c, 0x68, 0x38, 0x97, 0x5e, 0x53, 0xfc, + 0xd2, 0xd3, 0xed, 0x99, 0xf5, 0x82, 0xe4, 0x5d, + 0x59, 0x4f, 0xf3, 0x4b, 0x4f, 0xb6, 0x67, 0xd6, + 0x08, 0x2c, 0xd9, 0xbf, 0xbe, 0x1f, 0x35, 0xab, + 0x8d, 0x76, 0xe6, 0xfe, 0xf8, 0x7c, 0xd6, 0xae, + 0x24, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, + 0xea, 0x3f, 0xda, 0x33, 0xb6, 0xa4, 0xd4, 0x64, + 0x7f, 0xb4, 0x67, 0x6d, 0x49, 0xa0, 0x2e, 0x1c, + 0xc3, 0xde, 0x6d, 0x7e, 0xd3, 0xe5, 0x0b, 0xb9, + 0x70, 0xe6, 0x1e, 0xf3, 0x6b, 0xf6, 0x9f, 0x28, + 0x40, 0xcb, 0xfd, 0xe6, 0xef, 0xcf, 0x3f, 0x58, + 0xae, 0xe5, 0xc3, 0x97, 0xfb, 0xcd, 0xdf, 0x9e, + 0x7e, 0xb1, 0x5d, 0xc8, 0x07, 0x51, 0x51, 0x47, + 0x59, 0x52, 0xa7, 0x51, 0x51, 0x47, 0x59, 0x40, + 0x44, 0x44, 0x1d, 0x19, 0x8f, 0xfa, 0x69, 0xfe, + 0x70, 0xfa, 0xca, 0xa4, 0x35, 0x2b, 0xbe, 0x1b, + 0x17, 0x64, 0xa4, 0x5f, 0xbb, 0x0d, 0xb1, 0x3e, + 0x3b, 0xb4, 0xe8, 0x35, 0xd1, 0xe4, 0xd5, 0x46, + 0xf3, 0x1b, 0x1d, 0xeb, 0x8f, 0xd3, 0xf4, 0x50, + 0x56, 0xd1, 0x59, 0x39, 0x8d, 0x8e, 0xf5, 0xc7, + 0xe9, 0xfa, 0x29, 0xcc, 0x6c, 0x77, 0xae, 0x3f, + 0x4f, 0xd1, 0x41, 0x5b, 0x45, 0x64, 0xe6, 0x36, + 0x3b, 0xd7, 0x1f, 0xa7, 0xe8, 0xa7, 0x31, 0xb1, + 0xde, 0xb8, 0xfd, 0x3f, 0x45, 0x05, 0x6d, 0x15, + 0x93, 0x98, 0xd8, 0xef, 0x5c, 0x7e, 0x9f, 0xa2, + 0x9c, 0xc6, 0xc7, 0x7a, 0xe3, 0xf4, 0xfd, 0x14, + 0x15, 0xb4, 0x56, 0x4e, 0x63, 0x63, 0xbd, 0x71, + 0xfa, 0x7e, 0x8a, 0x73, 0x1b, 0x1d, 0xeb, 0x8f, + 0xd3, 0xf4, 0x50, 0x56, 0xd2, 0xa5, 0x59, 0x39, + 0x8d, 0x8e, 0xf5, 0xc7, 0xe9, 0xfa, 0x29, 0xcc, + 0x6c, 0x77, 0xae, 0x3f, 0x4f, 0xd1, 0x41, 0x5b, + 0x1a, 0x35, 0x27, 0xc9, 0xa9, 0x58, 0xf9, 0x8d, + 0x8e, 0xf5, 0xe7, 0xe9, 0xfa, 0x29, 0xcc, 0x6c, + 0x77, 0xae, 0x3f, 0x4f, 0xd1, 0x41, 0x5c, 0x58, + 0xa0, 0x56, 0x4e, 0x63, 0x63, 0xbd, 0x71, 0xfa, + 0x7e, 0x8a, 0x73, 0x1b, 0x1d, 0xeb, 0x8f, 0xd3, + 0xf4, 0x50, 0x57, 0x37, 0x6a, 0x9f, 0xfc, 0x2b, + 0x1f, 0x31, 0xb1, 0xde, 0xb8, 0xfd, 0x3f, 0x45, + 0x67, 0x98, 0xd8, 0xef, 0x5c, 0x7e, 0x9f, 0xa2, + 0x82, 0xb6, 0x8a, 0xc7, 0xcc, 0x6c, 0x77, 0xae, + 0x3f, 0x4f, 0xd1, 0x4e, 0x63, 0x63, 0xbd, 0x71, + 0xfa, 0x7e, 0x8a, 0x0a, 0xe2, 0xeb, 0xcb, 0xb3, + 0x29, 0x32, 0xe7, 0xca, 0xf8, 0xd8, 0xd7, 0x99, + 0x98, 0x58, 0x6b, 0xa1, 0x4c, 0xf3, 0x1b, 0x1d, + 0xeb, 0x8f, 0xd3, 0xf4, 0x53, 0x98, 0xd8, 0xef, + 0x5c, 0x7e, 0x9f, 0xa2, 0x82, 0xb4, 0x35, 0x68, + 0xd5, 0xb8, 0xb2, 0xac, 0x9c, 0xce, 0xc7, 0x7a, + 0xf7, 0x70, 0xbf, 0xd1, 0x4e, 0x63, 0x63, 0xbd, + 0x71, 0xfa, 0x7e, 0x8a, 0x0a, 0xd8, 0xd1, 0xa9, + 0x62, 0x83, 0x79, 0x59, 0x79, 0x8d, 0x8e, 0xf5, + 0xc7, 0xe9, 0xfa, 0x29, 0xcc, 0x6c, 0x77, 0xae, + 0x3f, 0x4f, 0xd1, 0x41, 0x5b, 0x45, 0x63, 0xe6, + 0x36, 0x3b, 0xd7, 0x9f, 0xa7, 0xe8, 0xac, 0xf3, + 0x1b, 0x1d, 0xeb, 0x8f, 0xd3, 0xf4, 0x50, 0x56, + 0xf7, 0xfb, 0x3a, 0xd1, 0x59, 0x39, 0x8d, 0x8e, + 0xf5, 0xc7, 0xe9, 0xfa, 0x29, 0xcc, 0x6c, 0x77, + 0xae, 0x3f, 0x4f, 0xd1, 0x41, 0x0b, 0x16, 0x63, + 0x24, 0x39, 0x74, 0xd6, 0x0d, 0x63, 0x4c, 0x73, + 0xb8, 0x39, 0xce, 0xd4, 0x41, 0xd1, 0xc4, 0xb9, + 0x7c, 0x0a, 0xc9, 0xcc, 0x6c, 0x77, 0xaf, 0x77, + 0x0b, 0xfd, 0x14, 0xe6, 0x36, 0x3b, 0xd7, 0x9e, + 0x17, 0xfa, 0x28, 0x2b, 0x68, 0xac, 0x9c, 0xc6, + 0xc7, 0x7a, 0xe3, 0xf4, 0xfd, 0x14, 0xe6, 0x36, + 0x3b, 0xd7, 0x1f, 0xa7, 0xe8, 0xa0, 0xad, 0xfe, + 0x5a, 0x11, 0x59, 0x39, 0x8d, 0x8e, 0xf5, 0xc7, + 0xe9, 0xfa, 0x29, 0xcc, 0x6c, 0x77, 0xae, 0x3f, + 0x4f, 0xd1, 0x41, 0x5b, 0x45, 0x64, 0xe6, 0x36, + 0x3b, 0xd7, 0x1f, 0xa7, 0xe8, 0xa7, 0x31, 0xb1, + 0xde, 0xb8, 0xfd, 0x3f, 0x45, 0x05, 0x6d, 0x15, + 0x93, 0x98, 0xd8, 0xef, 0x5c, 0x7e, 0x9f, 0xa2, + 0x9c, 0xc6, 0xc7, 0x7a, 0xe3, 0xf4, 0xfd, 0x14, + 0x15, 0xb4, 0x56, 0x4e, 0x63, 0x63, 0xbd, 0x71, + 0xfa, 0x7e, 0x8a, 0x73, 0x1b, 0x1d, 0xeb, 0x8f, + 0xd3, 0xf4, 0x50, 0x56, 0xd1, 0x59, 0x39, 0x8d, + 0x8e, 0xf5, 0xc7, 0xe9, 0xfa, 0x29, 0xcc, 0x6c, + 0x77, 0xae, 0x3f, 0x4f, 0xd1, 0x41, 0x5b, 0x58, + 0x3b, 0xaa, 0xcb, 0xcc, 0x6c, 0x77, 0xae, 0x3f, + 0x4f, 0xd1, 0x58, 0x30, 0x6c, 0x77, 0xae, 0x3f, + 0x4f, 0xd1, 0x41, 0xdd, 0x75, 0xfc, 0xae, 0xc7, + 0xcc, 0x6f, 0xd5, 0x0b, 0x85, 0x49, 0xe6, 0x22, + 0x21, 0x67, 0x6c, 0x21, 0xd3, 0x10, 0x1f, 0xab, + 0x3f, 0xd5, 0xa6, 0x85, 0x1a, 0x80, 0x88, 0x88, + 0x0b, 0x1b, 0x85, 0x65, 0x63, 0x70, 0xa0, 0xf5, + 0xb6, 0x3e, 0x4d, 0x9f, 0x69, 0xff, 0x00, 0xdd, + 0x55, 0xa5, 0x65, 0xdb, 0x1f, 0x26, 0xcf, 0xb4, + 0xff, 0x00, 0xee, 0xaa, 0xd2, 0x0c, 0x2e, 0xdc, + 0x98, 0x0e, 0xb5, 0xb4, 0xfb, 0x40, 0xb8, 0xd7, + 0x46, 0x5f, 0x3b, 0x2d, 0xaf, 0xa0, 0x9e, 0x4a, + 0xe0, 0x8d, 0xe1, 0xce, 0xa0, 0xd2, 0x83, 0x7e, + 0x7f, 0xfc, 0xda, 0xeb, 0xcf, 0xf9, 0x02, 0xed, + 0xda, 0x5f, 0x1e, 0xdf, 0x2d, 0x78, 0xd2, 0xd7, + 0x43, 0xa0, 0xf7, 0x1a, 0xa3, 0x33, 0x3b, 0x98, + 0xae, 0xef, 0xe7, 0xb8, 0x8a, 0xbc, 0xdc, 0xae, + 0xab, 0x6b, 0xa0, 0xd2, 0x8b, 0xba, 0x1b, 0xfc, + 0xbe, 0xef, 0x2f, 0x8e, 0xcb, 0x31, 0x73, 0xe2, + 0x7d, 0xb9, 0xfd, 0x44, 0xf1, 0x8c, 0x5e, 0x2e, + 0xf1, 0x41, 0xb2, 0xc7, 0xc5, 0xd9, 0x7b, 0xf7, + 0x3b, 0x40, 0x7b, 0x80, 0x07, 0xb2, 0x70, 0x9f, + 0x95, 0x69, 0xbd, 0xad, 0xae, 0x49, 0x69, 0x69, + 0xa9, 0xf7, 0x2e, 0x37, 0x12, 0x8d, 0xe1, 0xa9, + 0x9d, 0xe5, 0x9b, 0xcb, 0xfb, 0x03, 0x69, 0x16, + 0x55, 0x65, 0x8c, 0x5a, 0xe3, 0x0e, 0x9e, 0x67, + 0x0f, 0x19, 0xdb, 0x87, 0x47, 0x69, 0x73, 0x67, + 0x37, 0x91, 0xdd, 0xdf, 0x39, 0xf0, 0x9a, 0xc0, + 0xc0, 0xd8, 0xe2, 0xd1, 0x4f, 0x15, 0x82, 0x9e, + 0x1a, 0xa0, 0xe2, 0x04, 0xd4, 0x69, 0x53, 0x3b, + 0x59, 0xfc, 0xce, 0x23, 0xbd, 0x0b, 0x3c, 0x2e, + 0x50, 0xc3, 0x5a, 0x91, 0xcf, 0x6f, 0xe0, 0xbf, + 0xbc, 0x64, 0xf0, 0x07, 0x60, 0x11, 0x86, 0x78, + 0xe3, 0x09, 0xa8, 0x2e, 0xdc, 0x41, 0xd7, 0x75, + 0xa7, 0x64, 0xed, 0x0b, 0x74, 0x88, 0xe5, 0x21, + 0xdd, 0xbc, 0x4e, 0x58, 0xd9, 0x80, 0x43, 0xaf, + 0xa4, 0x3e, 0x4b, 0x6d, 0xcd, 0x4f, 0x7f, 0xe4, + 0x5a, 0x32, 0xdc, 0xc2, 0xd0, 0x59, 0x4b, 0x96, + 0xdf, 0x87, 0x7b, 0x3c, 0x8e, 0xc5, 0x1b, 0xd9, + 0xa4, 0xb5, 0xdb, 0xab, 0x64, 0x97, 0xd9, 0x75, + 0x8d, 0x84, 0xb6, 0x99, 0x73, 0xe4, 0x96, 0x4b, + 0x9d, 0x12, 0xcf, 0x20, 0xc2, 0x03, 0x77, 0x82, + 0x0d, 0x97, 0x54, 0x7e, 0xc9, 0xda, 0xb9, 0xba, + 0x99, 0x29, 0x07, 0xb6, 0x5c, 0xe2, 0x9b, 0x2e, + 0x70, 0xba, 0xfd, 0xe7, 0xc9, 0x6c, 0x07, 0x4f, + 0x0a, 0xe6, 0xcb, 0x73, 0x0b, 0x51, 0x67, 0x2e, + 0x5b, 0x7e, 0x1d, 0xec, 0xd2, 0x1c, 0x51, 0xc8, + 0xd1, 0x57, 0x31, 0xdd, 0xa5, 0xb6, 0x4b, 0xdc, + 0xba, 0xc6, 0xc6, 0x5b, 0x4c, 0xb5, 0xd2, 0x4b, + 0x2d, 0xce, 0x89, 0x67, 0x78, 0xa0, 0x0d, 0xde, + 0xee, 0xa0, 0x87, 0xae, 0xbd, 0xdf, 0xe9, 0x2a, + 0xc3, 0x63, 0x77, 0x71, 0x69, 0xb2, 0xf2, 0x4f, + 0x6e, 0xec, 0x12, 0x09, 0xc8, 0x0e, 0xa5, 0x75, + 0xd3, 0x7d, 0x57, 0xbf, 0xf9, 0xa7, 0x69, 0x4c, + 0xe5, 0xf9, 0x86, 0x54, 0xdc, 0xa5, 0xd9, 0x7d, + 0xf0, 0x94, 0xe2, 0x90, 0xbc, 0x88, 0xc7, 0x68, + 0x6b, 0x28, 0x39, 0x67, 0xcf, 0xb3, 0x69, 0xe1, + 0x74, 0x32, 0xce, 0x1c, 0xc7, 0x82, 0x1c, 0x30, + 0x81, 0xf2, 0x2e, 0xc8, 0x3f, 0xd2, 0x93, 0xef, + 0x8b, 0x8d, 0x7c, 0x95, 0xa9, 0xe7, 0x65, 0xb0, + 0x1c, 0x02, 0xeb, 0x10, 0x07, 0x0d, 0x69, 0x4a, + 0xd3, 0x45, 0x74, 0xac, 0xe5, 0xb9, 0x86, 0x5c, + 0xdc, 0xb6, 0x6c, 0xba, 0xfb, 0x9c, 0x0c, 0x7c, + 0x98, 0xda, 0xe8, 0xc5, 0x4e, 0xe6, 0xbd, 0xe4, + 0x1e, 0xdb, 0xfe, 0x92, 0x7f, 0xfe, 0x40, 0xf0, + 0x35, 0x67, 0x26, 0xfe, 0x4b, 0x9a, 0xf9, 0xa3, + 0xc0, 0xb9, 0xdf, 0x7f, 0x66, 0x32, 0x69, 0x72, + 0xe8, 0x8b, 0xdc, 0xf7, 0x4f, 0xce, 0x45, 0x56, + 0xe8, 0xc1, 0x51, 0x4a, 0xe9, 0xec, 0x2c, 0x65, + 0xd9, 0x85, 0xbd, 0xb6, 0x5b, 0x7b, 0x6f, 0x28, + 0x76, 0x3b, 0x96, 0x8c, 0x18, 0x5b, 0x51, 0xab, + 0x77, 0x4a, 0x09, 0x29, 0x64, 0xcb, 0xe3, 0xd9, + 0xfc, 0xbc, 0xde, 0x44, 0xf9, 0xa3, 0x24, 0xe1, + 0x0c, 0x76, 0x1a, 0x3a, 0xa7, 0x5a, 0xe4, 0x9b, + 0x31, 0xb3, 0xea, 0x89, 0xed, 0x2c, 0xed, 0x25, + 0x8e, 0x27, 0x9a, 0x99, 0x1d, 0xe3, 0x34, 0x38, + 0x1d, 0xfa, 0x2f, 0x16, 0x79, 0x85, 0x8c, 0xd9, + 0x77, 0x56, 0xe6, 0x45, 0xf1, 0x88, 0xdd, 0x8a, + 0x19, 0x98, 0x2a, 0x41, 0x3a, 0x69, 0x45, 0xe6, + 0xfa, 0xfa, 0xca, 0x3c, 0xbd, 0xb9, 0x5e, 0x5f, + 0x89, 0xd1, 0x17, 0x73, 0x92, 0xcb, 0x20, 0xa1, + 0x73, 0xb5, 0x8a, 0x04, 0x1b, 0xf6, 0x86, 0xa6, + 0xcb, 0x2b, 0xfb, 0x0f, 0x91, 0xa9, 0x0f, 0xfa, + 0x4e, 0x7f, 0xfc, 0x8f, 0x94, 0x2e, 0x6c, 0xdb, + 0x30, 0xb7, 0xbc, 0xb6, 0xb2, 0x8e, 0x1c, 0x55, + 0xb7, 0x88, 0x31, 0xe5, 0xcd, 0xa0, 0xa8, 0x0d, + 0xd5, 0xa7, 0xb0, 0x8c, 0xcc, 0x2d, 0xd9, 0x91, + 0x49, 0x60, 0x6a, 0x27, 0x7c, 0xb8, 0x85, 0x06, + 0x8a, 0x68, 0xdd, 0x41, 0xd3, 0x91, 0xff, 0x00, + 0x2b, 0xcd, 0x46, 0xe0, 0x67, 0xc8, 0x57, 0x4b, + 0xa4, 0xb0, 0x8f, 0x66, 0xec, 0x7d, 0xb2, 0x27, + 0x4d, 0x1b, 0x89, 0xa3, 0x58, 0x70, 0x9c, 0x55, + 0x3a, 0x54, 0x66, 0x59, 0x98, 0x5b, 0xdb, 0x59, + 0x5e, 0xc1, 0x2e, 0x2c, 0x77, 0x4c, 0x0d, 0x8f, + 0x08, 0xae, 0x9a, 0x1d, 0x6b, 0x65, 0x8d, 0xfd, + 0x94, 0x99, 0x69, 0xcb, 0x33, 0x12, 0xf6, 0xc6, + 0xd7, 0x07, 0xc3, 0x33, 0x05, 0x4b, 0x49, 0x3b, + 0xa0, 0xa0, 0xda, 0xfc, 0xca, 0xcc, 0x65, 0x57, + 0x16, 0xb6, 0x56, 0x93, 0x32, 0x39, 0x48, 0x2e, + 0x91, 0xc7, 0x13, 0x43, 0x81, 0x1a, 0x0b, 0x82, + 0xcd, 0xee, 0x8d, 0x97, 0xb1, 0xec, 0x48, 0x45, + 0x47, 0x60, 0xb9, 0x69, 0xbc, 0xbf, 0xb2, 0x8b, + 0x2f, 0x19, 0x6e, 0x5e, 0x5e, 0xf8, 0xdc, 0xfc, + 0x73, 0x4c, 0xf1, 0x84, 0xb8, 0x83, 0xa0, 0x01, + 0xdc, 0x5b, 0x2d, 0xef, 0xf2, 0xa9, 0xf2, 0x98, + 0xec, 0x2f, 0xb9, 0xc8, 0xdd, 0x0b, 0xf1, 0x30, + 0xc6, 0x2a, 0x34, 0x9a, 0x8f, 0x0a, 0x08, 0x51, + 0xa9, 0x58, 0x27, 0x91, 0xd1, 0x6c, 0xce, 0x5f, + 0x2b, 0x7c, 0xa8, 0xe6, 0xc6, 0x3b, 0x60, 0xbd, + 0x57, 0xc7, 0x63, 0x52, 0x93, 0xb8, 0xcc, 0x6d, + 0x65, 0xc8, 0xed, 0xf2, 0xf6, 0x87, 0x73, 0xd1, + 0x3f, 0x13, 0xbc, 0x5d, 0x14, 0xf1, 0xb5, 0x1a, + 0xff, 0x00, 0x59, 0x04, 0xf1, 0x85, 0x91, 0xe6, + 0xf2, 0xe6, 0xf4, 0xfd, 0x47, 0xb2, 0x73, 0xad, + 0x3f, 0xd6, 0x22, 0x9e, 0x00, 0xa3, 0x18, 0xe7, + 0xbf, 0x64, 0xe7, 0x91, 0xda, 0x5c, 0xeb, 0x82, + 0xe7, 0x1e, 0xc9, 0x70, 0xaa, 0xf2, 0xfc, 0xf6, + 0x27, 0x64, 0x22, 0xc3, 0xc6, 0xf6, 0x9c, 0x21, + 0x8e, 0x34, 0xa3, 0x70, 0xe2, 0xdc, 0x75, 0x77, + 0x82, 0xd1, 0x06, 0x61, 0x68, 0xdc, 0x90, 0xe5, + 0xf2, 0x63, 0x12, 0x19, 0x83, 0xdc, 0x5a, 0x2a, + 0x30, 0xe8, 0x24, 0xd6, 0xa3, 0x4d, 0x10, 0x49, + 0x0b, 0x38, 0x1b, 0xb3, 0xf6, 0xf6, 0x93, 0x5c, + 0xb2, 0xd1, 0xd3, 0x93, 0x33, 0x8c, 0x9f, 0x9c, + 0x09, 0x24, 0x01, 0xc2, 0x11, 0xd6, 0x90, 0x9d, + 0x9d, 0xb8, 0xb4, 0x86, 0xe1, 0x97, 0x66, 0xdc, + 0xf3, 0xa0, 0xc7, 0xb8, 0x2a, 0x0d, 0x0f, 0x72, + 0xaa, 0x2b, 0x3d, 0xcc, 0x61, 0xbf, 0xb9, 0x8c, + 0xdb, 0x02, 0x20, 0x86, 0x30, 0xc6, 0x02, 0x28, + 0x7b, 0x3a, 0x2a, 0xb3, 0x91, 0xe6, 0x30, 0x58, + 0xcb, 0x30, 0xb9, 0xc4, 0x60, 0x9e, 0x32, 0xc7, + 0x86, 0x8a, 0x9a, 0xee, 0x6e, 0xf6, 0xd0, 0x75, + 0xde, 0x1c, 0x7b, 0x29, 0x64, 0xe6, 0xe9, 0xe6, + 0xe5, 0xa3, 0xbe, 0x9a, 0x89, 0xb0, 0xb0, 0x9a, + 0xfe, 0xe4, 0x5b, 0x44, 0x43, 0x5c, 0xe0, 0x5d, + 0x57, 0x68, 0x14, 0x0b, 0xbb, 0x2d, 0xcc, 0xad, + 0x23, 0xb7, 0x9b, 0x2f, 0xbd, 0x6b, 0x9f, 0x67, + 0x2b, 0x8b, 0xa3, 0x73, 0x47, 0x8c, 0xce, 0xcf, + 0x02, 0xdd, 0x15, 0xee, 0x4f, 0x95, 0xb2, 0x49, + 0x2c, 0x1d, 0x24, 0xf7, 0x52, 0xb7, 0x03, 0x5e, + 0xf1, 0x40, 0xd0, 0x50, 0x6a, 0xcb, 0x98, 0x6c, + 0x6c, 0xb3, 0x1b, 0xb7, 0x10, 0x5e, 0x3f, 0xed, + 0x62, 0x70, 0xd4, 0x5c, 0xf3, 0x47, 0x96, 0xad, + 0xfb, 0x24, 0x69, 0x73, 0x74, 0x77, 0xa1, 0xd4, + 0x7b, 0x6b, 0x8a, 0xee, 0xee, 0x27, 0x65, 0x96, + 0xd6, 0x71, 0x3a, 0xae, 0x69, 0x74, 0xb7, 0x35, + 0x04, 0x56, 0x47, 0x68, 0xdd, 0xec, 0x2f, 0x59, + 0x0e, 0x63, 0x6f, 0x61, 0x2c, 0xee, 0x9e, 0xb4, + 0x96, 0x2c, 0x2d, 0xc2, 0x2a, 0x6b, 0x5d, 0xd4, + 0x1b, 0x3e, 0x25, 0xbc, 0x63, 0x29, 0x0c, 0x30, + 0xdb, 0xb8, 0x8f, 0x2d, 0x8d, 0xf1, 0x80, 0x5d, + 0x1b, 0x2a, 0xf7, 0x3e, 0xf6, 0xea, 0x47, 0x92, + 0xe7, 0x98, 0x8b, 0xb1, 0x9d, 0x64, 0xe2, 0xad, + 0x54, 0x08, 0x14, 0xa6, 0xf6, 0xad, 0x3d, 0x8a, + 0x69, 0xef, 0xa9, 0x3c, 0x87, 0x31, 0xb6, 0xb0, + 0x9e, 0x59, 0x2e, 0x2b, 0xfa, 0xd8, 0xf0, 0x37, + 0x08, 0xae, 0x92, 0x77, 0x50, 0x6b, 0x66, 0x7f, + 0x9c, 0x1a, 0x0f, 0x6a, 0x75, 0x0d, 0x06, 0xa6, + 0xfa, 0x2b, 0xb7, 0x6b, 0x89, 0xeb, 0x08, 0xbe, + 0xc8, 0x1e, 0xf9, 0x50, 0x4c, 0x20, 0x61, 0x27, + 0x50, 0xa1, 0xd0, 0x2b, 0xa2, 0x95, 0xdf, 0x52, + 0x79, 0xf6, 0x61, 0x6f, 0x98, 0x5d, 0x47, 0x2d, + 0xbe, 0x2c, 0x2d, 0x8c, 0x30, 0xe2, 0x14, 0xd2, + 0x0e, 0xe2, 0x09, 0x1b, 0x1b, 0xd9, 0xdb, 0xb2, + 0xb7, 0x24, 0x1f, 0x1a, 0x13, 0xcd, 0x46, 0xe3, + 0xac, 0x07, 0x96, 0xb7, 0xbd, 0x89, 0x56, 0xf4, + 0x77, 0x14, 0x9c, 0x19, 0x8d, 0xb4, 0x79, 0x1d, + 0xcd, 0x83, 0x83, 0xb9, 0xf9, 0x5e, 0x1c, 0xdd, + 0x1e, 0x29, 0x00, 0xb4, 0xe9, 0x75, 0x7b, 0x0a, + 0x35, 0x01, 0x75, 0x65, 0x3f, 0xcd, 0x2d, 0x3e, + 0xd9, 0x9f, 0x58, 0x2e, 0x55, 0xd5, 0x94, 0xff, + 0x00, 0x34, 0xb4, 0xfb, 0x66, 0x7d, 0x60, 0x82, + 0xcf, 0x9b, 0xfb, 0xe1, 0xf3, 0x5a, 0xb8, 0x97, + 0x6e, 0x6f, 0xef, 0x87, 0xcd, 0x6a, 0xe2, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x1e, 0xa3, + 0xfd, 0xa3, 0x3b, 0x6a, 0x4d, 0x46, 0x47, 0xfb, + 0x46, 0x76, 0xd4, 0x9a, 0x02, 0xe1, 0xcc, 0x3d, + 0xe6, 0xd7, 0xed, 0x3e, 0x50, 0xbb, 0x97, 0x0e, + 0x61, 0xef, 0x36, 0xbf, 0x69, 0xf2, 0x84, 0x0c, + 0xbf, 0xde, 0x6e, 0xfc, 0xf3, 0xf5, 0x8a, 0xee, + 0x5c, 0x39, 0x7f, 0xbc, 0xdd, 0xf9, 0xe7, 0xeb, + 0x15, 0xdc, 0x80, 0x75, 0x15, 0x14, 0x75, 0x95, + 0x2a, 0x75, 0x15, 0x14, 0x75, 0x94, 0x04, 0x44, + 0x41, 0xd1, 0x98, 0xff, 0x00, 0xa6, 0x9f, 0xe7, + 0x0f, 0xac, 0xaa, 0x43, 0x52, 0xb6, 0xe6, 0x3f, + 0xe9, 0xa7, 0xf9, 0xc3, 0xeb, 0x2a, 0x90, 0xd4, + 0x83, 0x28, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x0b, 0x2d, 0x6b, 0x9c, 0xe0, + 0xc6, 0x82, 0x5c, 0xe3, 0x40, 0xd1, 0xac, 0x95, + 0xe5, 0x4e, 0x6c, 0xeb, 0x1b, 0x0d, 0xbd, 0xee, + 0x66, 0xe0, 0x1c, 0xeb, 0x76, 0x52, 0x3a, 0xee, + 0x38, 0x8a, 0xd5, 0x04, 0x7b, 0xf2, 0x8c, 0xcd, + 0x91, 0xf3, 0x8f, 0xb6, 0x7b, 0x58, 0x34, 0x92, + 0x05, 0x74, 0x76, 0x77, 0x57, 0x3c, 0x16, 0xf3, + 0x5c, 0x38, 0xb6, 0x08, 0xdd, 0x23, 0x86, 0xb6, + 0xb0, 0x12, 0x46, 0xe6, 0xe2, 0x91, 0xcb, 0xf3, + 0xcb, 0xd8, 0xef, 0xa3, 0x96, 0xe6, 0x77, 0x3a, + 0x29, 0x1d, 0x49, 0x9a, 0xfa, 0x96, 0x86, 0x9d, + 0x64, 0x0e, 0xc2, 0x93, 0xc9, 0xdd, 0x6a, 0x73, + 0xdb, 0xd9, 0x2c, 0xdc, 0x1d, 0x0b, 0xa2, 0x2f, + 0x6b, 0x80, 0x23, 0x49, 0x20, 0x9a, 0x03, 0x4d, + 0x45, 0x04, 0x0b, 0xb2, 0xcc, 0xc1, 0xa2, 0xae, + 0xb6, 0x94, 0x01, 0xfd, 0x47, 0x71, 0x2e, 0x5a, + 0x8d, 0x5b, 0xda, 0xd4, 0xa5, 0xa6, 0x7d, 0x9b, + 0x36, 0xe6, 0x32, 0x67, 0x74, 0x8d, 0x2e, 0x0d, + 0x74, 0x6f, 0xa1, 0x69, 0xa9, 0xd2, 0xbb, 0x73, + 0x4c, 0xbe, 0x19, 0xb6, 0x92, 0x18, 0x1a, 0x28, + 0xc9, 0xf0, 0xbd, 0xed, 0x1f, 0xd5, 0xf1, 0x8f, + 0x0a, 0x08, 0x98, 0x32, 0xbc, 0xc6, 0xe6, 0x3e, + 0x72, 0x0b, 0x79, 0x1e, 0xcd, 0xc7, 0x01, 0x40, + 0x7b, 0x5a, 0x74, 0xae, 0x79, 0x62, 0x92, 0x17, + 0x98, 0xe5, 0x69, 0x8d, 0xe3, 0x5b, 0x5c, 0x28, + 0x7b, 0xea, 0x5f, 0x3b, 0xcd, 0xef, 0x46, 0x63, + 0x2c, 0x36, 0xd2, 0xba, 0x08, 0x6d, 0xcf, 0x37, + 0x1b, 0x23, 0x34, 0x15, 0x1b, 0xab, 0xce, 0x71, + 0x7f, 0x6b, 0x7d, 0x63, 0x69, 0x2e, 0x30, 0x6f, + 0x9a, 0x0b, 0x67, 0x68, 0x06, 0xb4, 0xa1, 0xa5, + 0x4d, 0x29, 0xad, 0x04, 0x3a, 0xdd, 0x1d, 0x9d, + 0xdc, 0xb1, 0x99, 0x63, 0x85, 0xef, 0x8d, 0xba, + 0xdc, 0xd6, 0x92, 0x05, 0x3b, 0x20, 0x2d, 0x4a, + 0xe3, 0x95, 0x3a, 0x3b, 0x2b, 0x5b, 0x0c, 0xbd, + 0xfe, 0x55, 0xeb, 0x5e, 0xf7, 0xd7, 0xb2, 0x2a, + 0x38, 0x50, 0x53, 0x41, 0xae, 0xad, 0xdd, 0x4b, + 0x2b, 0x65, 0xcc, 0x0e, 0x82, 0xea, 0x5b, 0x7a, + 0x54, 0xb1, 0xe5, 0x81, 0xa3, 0x5e, 0x82, 0x40, + 0x52, 0x6d, 0xd9, 0xab, 0xba, 0x35, 0xb2, 0xcf, + 0x0c, 0x73, 0xbc, 0x55, 0xb0, 0x39, 0xde, 0x31, + 0x41, 0x10, 0x8b, 0xa1, 0xb6, 0x17, 0x8f, 0xbc, + 0xf6, 0x11, 0x1d, 0x2e, 0x31, 0x61, 0x2c, 0x27, + 0x40, 0xdd, 0xe0, 0x5d, 0xd2, 0x6c, 0xe5, 0xdb, + 0x58, 0xe3, 0x0c, 0xd0, 0xcf, 0x2c, 0x42, 0xaf, + 0x85, 0x8e, 0xab, 0x82, 0x08, 0x94, 0x5d, 0x59, + 0x7e, 0x5f, 0x73, 0x98, 0x4a, 0x59, 0x05, 0x00, + 0x60, 0xab, 0xe4, 0x79, 0xa0, 0x68, 0xec, 0xad, + 0xd7, 0x79, 0x25, 0xc5, 0xb5, 0xb9, 0xba, 0x8e, + 0x58, 0xee, 0x62, 0x69, 0xa3, 0xdd, 0x0b, 0xb1, + 0x16, 0xa0, 0xe2, 0xf6, 0x79, 0xc4, 0x22, 0x7e, + 0x6d, 0xdc, 0xd1, 0x34, 0xe7, 0x28, 0x70, 0xd7, + 0x7b, 0x16, 0xa5, 0xe1, 0x4d, 0x3b, 0xfd, 0x25, + 0x17, 0xfe, 0x43, 0xbc, 0x2e, 0x5c, 0xb6, 0x79, + 0x35, 0xcd, 0xcd, 0xb8, 0xba, 0x7c, 0x91, 0xda, + 0xc0, 0x4d, 0x1a, 0xf9, 0x5d, 0x40, 0xed, 0xcd, + 0x15, 0x41, 0x1e, 0x8b, 0xae, 0xff, 0x00, 0x2c, + 0xb9, 0xb1, 0x95, 0xb1, 0x4b, 0x42, 0xd9, 0x68, + 0x63, 0x7b, 0x0d, 0x58, 0xe0, 0x74, 0x2e, 0xc1, + 0xb3, 0x19, 0x80, 0x91, 0xcc, 0x91, 0xf1, 0xc6, + 0xc6, 0xb4, 0x1c, 0x66, 0xb4, 0x24, 0xfe, 0x68, + 0x41, 0x11, 0xbb, 0x4d, 0xd4, 0x52, 0x36, 0x99, + 0x1d, 0xc5, 0xc4, 0x1e, 0xd2, 0xf9, 0x63, 0xb7, + 0x82, 0xa5, 0xa1, 0xf2, 0x9c, 0x35, 0xa1, 0xa5, + 0x45, 0x57, 0x9b, 0xcc, 0x96, 0xe6, 0xd1, 0xf0, + 0x87, 0xb9, 0x8f, 0x8a, 0xe1, 0xd8, 0x63, 0x98, + 0x1a, 0xb6, 0xba, 0xfb, 0x88, 0x38, 0x4b, 0x5c, + 0x00, 0x71, 0x04, 0x34, 0xea, 0x3b, 0x85, 0x79, + 0xa8, 0xa5, 0x77, 0x15, 0xa6, 0xf7, 0x29, 0x9d, + 0xd9, 0x25, 0xa5, 0xb3, 0x65, 0x89, 0xae, 0x85, + 0xc5, 0xce, 0x71, 0x7f, 0x8a, 0x45, 0x1d, 0xe4, + 0xba, 0x8a, 0x1a, 0xcb, 0x24, 0xb9, 0xbb, 0x88, + 0xdc, 0x3a, 0x46, 0x5b, 0xc1, 0x5c, 0x22, 0x59, + 0x4d, 0x31, 0x1e, 0xc2, 0x0e, 0x04, 0x5d, 0x79, + 0x86, 0x57, 0x71, 0x60, 0xe6, 0x19, 0x48, 0x7c, + 0x52, 0x02, 0x63, 0x9a, 0x33, 0xe2, 0x9a, 0x6e, + 0x2e, 0xb6, 0x6c, 0xce, 0x60, 0xe9, 0x03, 0x5e, + 0xf8, 0xd8, 0xc7, 0x30, 0x48, 0x65, 0x24, 0xd0, + 0x07, 0x6a, 0x6e, 0x9d, 0xd4, 0x11, 0x28, 0xb3, + 0x23, 0x30, 0x48, 0xe6, 0x6b, 0xc0, 0x4b, 0x49, + 0x1a, 0x8d, 0x37, 0x56, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x60, 0xee, 0xac, + 0xac, 0x1d, 0xd4, 0x17, 0x2b, 0xaf, 0xe5, 0x76, + 0x3e, 0x63, 0x7e, 0xa8, 0x5c, 0x2b, 0xba, 0xeb, + 0xf9, 0x5d, 0x8f, 0x98, 0xdf, 0xaa, 0x17, 0x0a, + 0x0c, 0xa2, 0x22, 0x02, 0xc6, 0xe1, 0x59, 0x58, + 0xdc, 0x28, 0x3d, 0x6d, 0x8f, 0x93, 0x67, 0xda, + 0x7f, 0xf7, 0x55, 0x69, 0x59, 0x76, 0xc7, 0xc9, + 0xb3, 0xed, 0x3f, 0xfb, 0xaa, 0xb4, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0xa4, + 0x32, 0x4c, 0xb6, 0x3c, 0xca, 0xe9, 0xd0, 0xc8, + 0xe2, 0xc0, 0x19, 0x88, 0x16, 0xeb, 0xaa, 0x08, + 0xf4, 0x52, 0x99, 0x3e, 0x55, 0x69, 0x7b, 0x0d, + 0xcc, 0xd7, 0x32, 0xba, 0x26, 0x5b, 0x50, 0xd5, + 0xa0, 0x1d, 0x06, 0xb5, 0x2b, 0x67, 0xb1, 0x6c, + 0xcd, 0x34, 0x5f, 0x4b, 0xc8, 0x3e, 0x8a, 0x08, + 0x74, 0x52, 0xd9, 0x6e, 0x53, 0x61, 0x71, 0x69, + 0x71, 0x77, 0x73, 0x33, 0xa3, 0x8a, 0xdd, 0xf4, + 0xc4, 0xd6, 0x83, 0x56, 0xee, 0x1d, 0x44, 0xee, + 0xac, 0xba, 0xcf, 0x66, 0xb0, 0x78, 0xb7, 0xd2, + 0x92, 0x06, 0x86, 0xe0, 0xd6, 0x69, 0xa3, 0xf3, + 0x50, 0x44, 0x50, 0xa2, 0x97, 0xcb, 0xf2, 0x9c, + 0xbe, 0x6c, 0xb1, 0xd7, 0xf7, 0x73, 0x3e, 0x16, + 0xb6, 0x42, 0xc2, 0x5a, 0xd0, 0x77, 0x80, 0xdc, + 0x3b, 0xeb, 0x12, 0xda, 0x6c, 0xe8, 0x89, 0xe6, + 0x2b, 0xd9, 0x1d, 0x20, 0x69, 0x2c, 0x69, 0x66, + 0x82, 0xea, 0x68, 0x1e, 0x4a, 0x08, 0x94, 0x58, + 0xdd, 0xf0, 0x2e, 0x8b, 0x6b, 0x1b, 0xcb, 0xa7, + 0x34, 0x5b, 0xc2, 0xe9, 0x31, 0x1a, 0x07, 0x00, + 0x70, 0xf6, 0x6a, 0xed, 0x48, 0x39, 0xd6, 0x57, + 0x66, 0x6d, 0x60, 0xdc, 0xbe, 0xef, 0xd9, 0x83, + 0xcc, 0x94, 0x63, 0x5c, 0x5c, 0xed, 0xca, 0xee, + 0x0e, 0xc2, 0xdd, 0x96, 0xe5, 0x11, 0x5d, 0xdb, + 0x4b, 0x73, 0x3d, 0xc0, 0xb6, 0x8e, 0x27, 0x86, + 0x54, 0x8a, 0x83, 0x51, 0x54, 0x11, 0xa8, 0xa4, + 0xee, 0xf2, 0xcc, 0xba, 0x0b, 0x69, 0x25, 0x87, + 0x30, 0x64, 0xd2, 0x30, 0x02, 0xd8, 0xc0, 0x00, + 0x92, 0x4f, 0x12, 0xf3, 0x61, 0x94, 0x32, 0xe2, + 0xd9, 0xf7, 0x97, 0x53, 0x7b, 0x3d, 0xa4, 0x4e, + 0xa6, 0x3a, 0x62, 0x71, 0x3f, 0xd5, 0x41, 0x1c, + 0x8a, 0x4e, 0xf3, 0x28, 0x84, 0x59, 0x1b, 0xfb, + 0x0b, 0x8f, 0x68, 0x81, 0x86, 0x92, 0x82, 0xdc, + 0x2f, 0x69, 0x5e, 0x32, 0xfc, 0xa5, 0xb7, 0x16, + 0xd2, 0x5e, 0xdd, 0x4b, 0xec, 0xd6, 0xb1, 0x9a, + 0x17, 0xd3, 0x13, 0x9c, 0x7b, 0x08, 0x23, 0xd1, + 0x49, 0xdd, 0x65, 0x10, 0x8b, 0x23, 0x7f, 0x61, + 0x3f, 0xb4, 0x5b, 0xb0, 0xd2, 0x5c, 0x4d, 0xc2, + 0xe6, 0x9d, 0x1c, 0x6a, 0x31, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x75, 0x65, 0x3f, + 0xcd, 0x2d, 0x3e, 0xd9, 0x9f, 0x58, 0x2e, 0x55, + 0xd5, 0x94, 0xff, 0x00, 0x34, 0xb4, 0xfb, 0x66, + 0x7d, 0x60, 0x82, 0xcf, 0x9b, 0xfb, 0xe1, 0xf3, + 0x5a, 0xb8, 0x97, 0x6e, 0x6f, 0xef, 0x87, 0xcd, + 0x6a, 0xe2, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x1e, 0xa3, 0xfd, 0xa3, 0x3b, 0x6a, 0x4d, + 0x46, 0x47, 0xfb, 0x46, 0x76, 0xd4, 0x9a, 0x02, + 0xe1, 0xcc, 0x3d, 0xe6, 0xd7, 0xed, 0x3e, 0x50, + 0xbb, 0x97, 0x0e, 0x61, 0xef, 0x36, 0xbf, 0x69, + 0xf2, 0x84, 0x0c, 0xbf, 0xde, 0x6e, 0xfc, 0xf3, + 0xf5, 0x8a, 0xee, 0x5c, 0x39, 0x7f, 0xbc, 0xdd, + 0xf9, 0xe7, 0xeb, 0x15, 0xdc, 0x80, 0x75, 0x15, + 0x14, 0x75, 0x95, 0x2a, 0x75, 0x15, 0x14, 0x75, + 0x94, 0x04, 0x44, 0x41, 0xd1, 0x98, 0xff, 0x00, + 0xa6, 0x9f, 0xe7, 0x0f, 0xac, 0xaa, 0x43, 0x52, + 0xb6, 0xe6, 0x3f, 0xe9, 0xa7, 0xf9, 0xc3, 0xeb, + 0x2a, 0x90, 0xd4, 0x83, 0x28, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0x73, + 0x2c, 0x07, 0xe1, 0xac, 0xc8, 0x37, 0x5e, 0x21, + 0x5e, 0x06, 0xa8, 0x35, 0x31, 0xb3, 0xd7, 0x10, + 0x96, 0xdc, 0xe5, 0xd3, 0xbc, 0x31, 0x97, 0x6c, + 0xfd, 0x5b, 0x8e, 0xa0, 0xed, 0x3a, 0xd0, 0x43, + 0x80, 0x5c, 0x43, 0x5a, 0x09, 0x27, 0x50, 0x1a, + 0xf4, 0xa9, 0xdd, 0x95, 0x63, 0xe3, 0xcc, 0x27, + 0x64, 0xad, 0x2d, 0x22, 0x13, 0x88, 0x11, 0x43, + 0x4a, 0x8d, 0xf5, 0x9b, 0x0d, 0x9d, 0xba, 0xb5, + 0xbc, 0x65, 0xc5, 0xdb, 0x99, 0x1d, 0xb5, 0xbb, + 0x84, 0x9c, 0xe6, 0x20, 0x6b, 0x87, 0x48, 0xe1, + 0x5d, 0x19, 0x4d, 0xeb, 0x6f, 0x33, 0xdb, 0xdb, + 0x80, 0x69, 0x1b, 0xa2, 0x2d, 0x61, 0x3b, 0xc0, + 0xb4, 0x04, 0x1a, 0x72, 0xeb, 0xad, 0x9b, 0x17, + 0x91, 0xe0, 0xb6, 0x7b, 0x25, 0x26, 0x91, 0xbd, + 0xe7, 0x13, 0x43, 0xab, 0x4d, 0x55, 0xdf, 0x2b, + 0xdc, 0x0c, 0xb9, 0x8b, 0x6b, 0x9b, 0xed, 0x4f, + 0x0f, 0x90, 0xe2, 0x20, 0x81, 0xa3, 0x09, 0x61, + 0x2d, 0x01, 0x57, 0xe1, 0x76, 0x19, 0xd8, 0xed, + 0xd0, 0xf0, 0x7b, 0x5a, 0x54, 0xfe, 0x7b, 0x72, + 0x2d, 0x33, 0xeb, 0x6b, 0xe0, 0x31, 0x30, 0x31, + 0xae, 0x24, 0x11, 0xaa, 0xb8, 0x5c, 0x38, 0x0a, + 0x08, 0x6c, 0xd7, 0x46, 0x65, 0x73, 0x5f, 0x5a, + 0xef, 0x0a, 0xd0, 0x62, 0x94, 0x30, 0x48, 0x58, + 0xe1, 0x19, 0xd4, 0xfa, 0x68, 0x3d, 0xde, 0xe2, + 0x9e, 0xcc, 0xf2, 0x29, 0xef, 0xee, 0xdd, 0x79, + 0x97, 0x39, 0x92, 0xc1, 0x73, 0xe3, 0x13, 0x88, + 0x0c, 0x2e, 0xdd, 0x5a, 0x73, 0xc9, 0xa1, 0x82, + 0xca, 0xd7, 0x29, 0x8d, 0xe2, 0x57, 0x40, 0x09, + 0x99, 0xcd, 0x3a, 0x31, 0x1d, 0xca, 0xf7, 0x4a, + 0x08, 0xab, 0x38, 0x0d, 0xcd, 0xdc, 0x30, 0x0d, + 0x72, 0x3d, 0xad, 0xee, 0x13, 0xa5, 0x58, 0x73, + 0x6b, 0x7c, 0xc9, 0xd9, 0xcc, 0x33, 0xdb, 0xdb, + 0xbd, 0xd0, 0x5a, 0xe0, 0x11, 0x90, 0x34, 0x51, + 0xa4, 0x62, 0x5c, 0x5b, 0x2d, 0x13, 0x4d, 0xfb, + 0xae, 0x64, 0xa6, 0x0b, 0x76, 0x39, 0xd5, 0x3a, + 0x3c, 0x62, 0x30, 0xf8, 0x17, 0x14, 0xb9, 0xbe, + 0x61, 0x24, 0x8f, 0x91, 0x97, 0x12, 0x35, 0xaf, + 0x71, 0x20, 0x07, 0x11, 0x40, 0x49, 0xd0, 0x82, + 0x6a, 0xf2, 0xc8, 0x37, 0x6a, 0xed, 0xdc, 0x47, + 0x8b, 0x39, 0x12, 0x80, 0x77, 0xd8, 0x34, 0xfd, + 0x55, 0x11, 0x9b, 0x4d, 0x21, 0xce, 0xee, 0x26, + 0x06, 0xaf, 0x8e, 0x5a, 0x32, 0xbb, 0x81, 0x84, + 0x51, 0x4b, 0xbe, 0xf0, 0x3a, 0xcf, 0x2a, 0xcd, + 0x5e, 0x71, 0x3a, 0x07, 0xf3, 0x73, 0xbb, 0x59, + 0xa1, 0x14, 0x24, 0xf0, 0x2d, 0x57, 0x79, 0x04, + 0xf7, 0x39, 0xab, 0xae, 0xa3, 0x2c, 0x7d, 0x94, + 0xef, 0x12, 0xba, 0x5c, 0x42, 0x80, 0x68, 0x2e, + 0xaa, 0x0f, 0x59, 0x1d, 0xdc, 0x97, 0x97, 0xf7, + 0x99, 0x8c, 0xa1, 0xa2, 0x66, 0xc1, 0x4f, 0x17, + 0x57, 0x60, 0xfd, 0x15, 0x09, 0x63, 0x7d, 0x71, + 0x65, 0x70, 0x2f, 0x23, 0xa1, 0x92, 0x84, 0x9c, + 0x5a, 0x41, 0xc4, 0x34, 0xf8, 0x54, 0xdd, 0x8d, + 0xee, 0x5e, 0xcc, 0xf2, 0xe6, 0x28, 0xb0, 0xc5, + 0x6b, 0x3b, 0x39, 0x96, 0x91, 0xa0, 0x17, 0x0d, + 0xd5, 0xaa, 0xc3, 0x22, 0x75, 0x8d, 0xcb, 0xee, + 0x33, 0x36, 0xb3, 0xd9, 0x20, 0x6b, 0xa8, 0x5c, + 0xe0, 0x43, 0xeb, 0xe4, 0xd0, 0x20, 0xdb, 0x95, + 0xc2, 0x27, 0xc8, 0xaf, 0x1c, 0xe9, 0x59, 0x6c, + 0xeb, 0x99, 0x68, 0xf9, 0x1d, 0x40, 0xd0, 0x2a, + 0xd2, 0x5b, 0xdf, 0x2b, 0x39, 0x7d, 0xbd, 0x9d, + 0x85, 0x9d, 0xe4, 0x32, 0xdf, 0xc1, 0x33, 0x6e, + 0x23, 0xc2, 0x18, 0xd7, 0x6a, 0x23, 0x16, 0xe1, + 0x27, 0x7d, 0x73, 0xe5, 0x66, 0x3b, 0xfc, 0xb6, + 0xf7, 0x2d, 0x6d, 0x23, 0x92, 0x47, 0xf3, 0xb0, + 0x34, 0x9a, 0x03, 0xa4, 0x10, 0x34, 0xf6, 0x97, + 0x96, 0xe5, 0x6c, 0xcb, 0xec, 0x2e, 0x67, 0xcd, + 0x63, 0x6f, 0x3c, 0xe1, 0x4b, 0x78, 0xf1, 0x54, + 0xe2, 0xf1, 0xb4, 0xf8, 0xa7, 0xb2, 0x80, 0xea, + 0xfc, 0x23, 0x16, 0xff, 0x00, 0x3e, 0x7c, 0x2e, + 0x5d, 0xd9, 0xb6, 0x5b, 0x14, 0xf6, 0x96, 0x50, + 0x9b, 0xa8, 0xad, 0x63, 0x86, 0x2a, 0x86, 0x4a, + 0x69, 0x52, 0xe0, 0x34, 0xeb, 0x1b, 0xcb, 0x85, + 0xfa, 0x36, 0x4e, 0x36, 0xeb, 0x77, 0x3e, 0x74, + 0x77, 0x5c, 0xb7, 0x5e, 0x5b, 0x49, 0x9d, 0x58, + 0x59, 0xdc, 0x59, 0xe1, 0x92, 0x68, 0x59, 0xcd, + 0xcb, 0x1d, 0x40, 0x20, 0x8d, 0x47, 0x4a, 0x0f, + 0x39, 0x99, 0xb7, 0x8f, 0x28, 0xb3, 0xb6, 0x6d, + 0xcc, 0x57, 0x13, 0xc1, 0x28, 0x18, 0xa3, 0x35, + 0xa3, 0x48, 0x77, 0x64, 0x95, 0xe7, 0x6b, 0x65, + 0x90, 0xdf, 0x47, 0x01, 0x24, 0xc6, 0xc8, 0xc1, + 0x0d, 0xdc, 0xa9, 0xd6, 0x56, 0x9c, 0xce, 0xd6, + 0xd2, 0xca, 0x0b, 0x4b, 0x50, 0x1a, 0xeb, 0xea, + 0x87, 0x4e, 0xf6, 0x9a, 0xd3, 0x4f, 0x93, 0xbc, + 0xbd, 0x6d, 0x59, 0x0e, 0xcc, 0x5a, 0x7f, 0xc2, + 0x69, 0xef, 0x1d, 0x08, 0x31, 0x1d, 0xb6, 0x69, + 0x99, 0x65, 0xd0, 0x46, 0xee, 0x6e, 0xde, 0xca, + 0xd8, 0x10, 0xd9, 0x5f, 0x46, 0x83, 0xb9, 0x5a, + 0x69, 0xaa, 0xe8, 0xcd, 0x60, 0x86, 0x0d, 0x9b, + 0xb6, 0x86, 0x19, 0x85, 0xc3, 0x1b, 0x39, 0x1c, + 0xe8, 0x1a, 0x09, 0xa3, 0xeb, 0x45, 0xb2, 0xf6, + 0xce, 0x6c, 0xcf, 0x29, 0xb0, 0xf6, 0x10, 0x24, + 0x64, 0x2d, 0x2d, 0x96, 0x30, 0x40, 0xd2, 0x70, + 0xd0, 0x9e, 0x05, 0x8b, 0xeb, 0x42, 0x36, 0x6e, + 0x28, 0x62, 0x7b, 0x66, 0x75, 0xa4, 0x85, 0xf7, + 0x05, 0x84, 0x10, 0xdf, 0x2b, 0x15, 0x37, 0xe8, + 0x4a, 0x0e, 0x7c, 0xc0, 0xff, 0x00, 0xf5, 0x9c, + 0xbc, 0xff, 0x00, 0x5d, 0xde, 0x07, 0x2f, 0x5b, + 0x40, 0x04, 0x79, 0x76, 0x5b, 0x6e, 0xdf, 0x20, + 0x47, 0x88, 0xb7, 0x70, 0x92, 0x1b, 0xfd, 0x2b, + 0x6f, 0xb1, 0x4b, 0x98, 0xec, 0xdd, 0xab, 0x2d, + 0x8b, 0x4b, 0xa0, 0x2e, 0x32, 0x02, 0x69, 0xa3, + 0xc6, 0x58, 0x9e, 0xde, 0x4c, 0xe7, 0x2a, 0xb4, + 0x36, 0x94, 0x7d, 0xcd, 0xa8, 0x31, 0xcb, 0x19, + 0x20, 0x1d, 0x40, 0x57, 0x4f, 0x69, 0x06, 0x92, + 0x79, 0xdd, 0x91, 0x79, 0x7e, 0x9f, 0x67, 0x9b, + 0xc4, 0xae, 0xe0, 0x24, 0x68, 0xfa, 0x4b, 0x66, + 0xd4, 0x4d, 0x28, 0xf6, 0x38, 0x71, 0x1c, 0x02, + 0x16, 0xbe, 0x9a, 0xaa, 0xe3, 0xa2, 0xa7, 0x92, + 0xbc, 0x66, 0x4d, 0x19, 0x76, 0x43, 0x1e, 0x59, + 0x23, 0x9a, 0x6e, 0xa6, 0x71, 0x92, 0x56, 0xb4, + 0xd6, 0x80, 0x1a, 0x8a, 0xa6, 0xd4, 0x10, 0x66, + 0xb4, 0xff, 0x00, 0xc7, 0x6f, 0x84, 0xa0, 0x84, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x58, 0x3b, 0xab, 0x2b, 0x07, 0x75, + 0x05, 0xca, 0xeb, 0xf9, 0x5d, 0x8f, 0x98, 0xdf, + 0xaa, 0x17, 0x0a, 0xee, 0xba, 0xfe, 0x57, 0x63, + 0xe6, 0x37, 0xea, 0x85, 0xc2, 0x83, 0x28, 0x88, + 0x80, 0xb1, 0xb8, 0x56, 0x56, 0x37, 0x0a, 0x0f, + 0x5b, 0x63, 0xe4, 0xd9, 0xf6, 0x9f, 0xfd, 0xd5, + 0x5a, 0x56, 0x5d, 0xb1, 0xf2, 0x6c, 0xfb, 0x4f, + 0xfe, 0xea, 0xad, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x29, 0xcd, 0x90, 0xfe, 0x64, + 0xff, 0x00, 0xb2, 0x3e, 0x15, 0x06, 0xa7, 0x36, + 0x43, 0xf9, 0x93, 0xfe, 0xc8, 0xf8, 0x50, 0x6c, + 0xd9, 0xc8, 0x5f, 0x3e, 0x5f, 0x99, 0x43, 0x1d, + 0x31, 0xc8, 0x1a, 0xd6, 0xd4, 0xd0, 0x54, 0x82, + 0xb9, 0x4e, 0xcb, 0xe6, 0xad, 0x69, 0x24, 0x45, + 0x46, 0x8a, 0x9f, 0x1f, 0x7b, 0xb8, 0xb7, 0xe4, + 0x44, 0x8c, 0xab, 0x34, 0xa6, 0xbc, 0x23, 0xc0, + 0x54, 0x20, 0x96, 0x4a, 0x53, 0x9c, 0x3b, 0x95, + 0xf1, 0x8e, 0xea, 0x09, 0xec, 0x96, 0xd6, 0x6b, + 0xac, 0x86, 0xfe, 0xda, 0x20, 0x39, 0xc7, 0xbc, + 0x06, 0xe2, 0x34, 0x15, 0x14, 0x3a, 0xfb, 0x8b, + 0x92, 0x4d, 0x99, 0xcd, 0x23, 0x8d, 0xd2, 0x38, + 0x47, 0x85, 0x83, 0x13, 0xa8, 0xfd, 0xc1, 0xdc, + 0x5b, 0xf2, 0xe2, 0xe6, 0xec, 0xd6, 0x60, 0x59, + 0x56, 0x90, 0xe6, 0xd0, 0x8d, 0x07, 0x5b, 0x54, + 0x27, 0x3b, 0x25, 0x7c, 0xb2, 0x6b, 0x5f, 0xce, + 0x28, 0x2c, 0x39, 0x6d, 0xa4, 0xd7, 0xbb, 0x31, + 0x2d, 0xbc, 0x14, 0xe7, 0x1d, 0x39, 0x23, 0x11, + 0xa0, 0xd0, 0x5a, 0x75, 0xae, 0x09, 0xf6, 0x73, + 0x33, 0x82, 0x17, 0xcf, 0x20, 0x8f, 0x04, 0x6d, + 0xc4, 0xea, 0x3e, 0xa6, 0x9c, 0x0b, 0xa6, 0x02, + 0x46, 0xc9, 0x4c, 0x41, 0xa7, 0xeb, 0xf5, 0x83, + 0x4f, 0x9b, 0xba, 0xa1, 0x31, 0xbc, 0x8a, 0x17, + 0x92, 0x3b, 0x24, 0xf1, 0xa0, 0xc2, 0xec, 0xb2, + 0xcc, 0x6f, 0xad, 0xcb, 0x21, 0x86, 0x77, 0x47, + 0x11, 0x78, 0xfd, 0x5b, 0x75, 0x69, 0x3a, 0x78, + 0x57, 0x1f, 0xf4, 0x1e, 0x15, 0xee, 0x1f, 0xdb, + 0x47, 0xe7, 0xb7, 0xc2, 0x10, 0x4a, 0xed, 0x57, + 0xf3, 0x87, 0x57, 0xd5, 0xb0, 0x57, 0x85, 0x6f, + 0xb4, 0xb6, 0x64, 0xbb, 0x37, 0x49, 0x66, 0x65, + 0xb3, 0x1d, 0x70, 0x5d, 0x24, 0x8f, 0xd3, 0xe2, + 0xb7, 0x45, 0x00, 0xdd, 0x2b, 0x9f, 0x6b, 0x3f, + 0x9c, 0x3f, 0xec, 0x99, 0xc3, 0xa5, 0x71, 0x4d, + 0x63, 0x75, 0x1d, 0x84, 0x77, 0x8e, 0x20, 0xdb, + 0x4a, 0xef, 0x14, 0x02, 0x49, 0x07, 0xcd, 0xdc, + 0x41, 0xd3, 0x77, 0x92, 0xb1, 0x96, 0x7e, 0xdb, + 0x63, 0x70, 0xdb, 0xa8, 0x18, 0x40, 0x90, 0x81, + 0x84, 0xb7, 0xb3, 0x45, 0xd5, 0x96, 0xb7, 0xac, + 0xf2, 0x47, 0xe5, 0xb1, 0x55, 0xb7, 0x10, 0xbf, + 0x9d, 0x61, 0x75, 0x70, 0x38, 0x76, 0x5f, 0x4a, + 0x0d, 0x6b, 0x19, 0x08, 0x23, 0x2d, 0xcd, 0x0b, + 0xeb, 0xcd, 0x18, 0x8b, 0x74, 0xfc, 0xe2, 0x1c, + 0x37, 0x52, 0xec, 0x98, 0xb6, 0x66, 0xd3, 0x99, + 0x38, 0x5b, 0x3b, 0xc9, 0x9d, 0xcd, 0xd1, 0x53, + 0x53, 0xad, 0x07, 0xb7, 0xc0, 0xfc, 0x9b, 0x24, + 0x9e, 0x0b, 0x8f, 0x1a, 0x7b, 0xd2, 0x03, 0x43, + 0x2a, 0xe6, 0x80, 0x37, 0x4b, 0xe9, 0x45, 0xe7, + 0x2d, 0x67, 0x59, 0x64, 0xaf, 0xcb, 0x23, 0x38, + 0x6e, 0x21, 0x93, 0x9d, 0x69, 0x3e, 0x49, 0x1e, + 0x76, 0xe6, 0xb5, 0x8c, 0x8a, 0xb3, 0x65, 0x99, + 0x8c, 0x13, 0x69, 0x81, 0xb1, 0x63, 0x01, 0xda, + 0x68, 0xea, 0x13, 0xa3, 0x81, 0x2e, 0x8b, 0xa0, + 0xd9, 0x7b, 0x4e, 0x62, 0xac, 0x13, 0x48, 0x79, + 0xf2, 0xdd, 0x04, 0x9f, 0x1a, 0x95, 0xa6, 0xfd, + 0x10, 0x7b, 0x74, 0x0f, 0xc9, 0xb2, 0x4b, 0x88, + 0x6e, 0x7c, 0x69, 0xef, 0x48, 0xa0, 0x65, 0x4b, + 0x1a, 0x00, 0x1a, 0xdd, 0xa9, 0x40, 0x57, 0x73, + 0xb9, 0xc0, 0x14, 0xee, 0x44, 0x0c, 0xb9, 0x7e, + 0x63, 0x6f, 0x2e, 0x9b, 0x76, 0xc7, 0x89, 0xa0, + 0xea, 0x0f, 0xa3, 0xb5, 0x57, 0xb4, 0xa0, 0x46, + 0xaa, 0xeb, 0xad, 0x34, 0xf6, 0x90, 0x65, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x75, 0x65, + 0x3f, 0xcd, 0x2d, 0x3e, 0xd9, 0x9f, 0x58, 0x2e, + 0x55, 0xd5, 0x94, 0xff, 0x00, 0x34, 0xb4, 0xfb, + 0x66, 0x7d, 0x60, 0x82, 0xcf, 0x9b, 0xfb, 0xe1, + 0xf3, 0x5a, 0xb8, 0x97, 0x6e, 0x6f, 0xef, 0x87, + 0xcd, 0x6a, 0xe2, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x1e, 0xa3, 0xfd, 0xa3, 0x3b, 0x6a, + 0x4d, 0x46, 0x47, 0xfb, 0x46, 0x1e, 0xca, 0x93, + 0x40, 0x5c, 0x39, 0x87, 0xbc, 0xda, 0xfd, 0xa7, + 0xca, 0x17, 0x72, 0xe1, 0xcc, 0x3d, 0xe6, 0xd7, + 0xed, 0x3e, 0x50, 0x83, 0x16, 0x07, 0xfe, 0xe6, + 0xef, 0xcf, 0x3f, 0x58, 0xae, 0xea, 0xae, 0x0b, + 0x0f, 0x7a, 0xbb, 0xf3, 0xcf, 0xd6, 0x2b, 0xbd, + 0x00, 0x9d, 0x05, 0x45, 0x9d, 0x7d, 0xd2, 0xa4, + 0xf7, 0x0a, 0x8c, 0x3f, 0x29, 0x40, 0x44, 0x44, + 0x1d, 0x19, 0x8f, 0xfa, 0x69, 0xfe, 0x70, 0xfa, + 0xca, 0xa4, 0x3b, 0x4a, 0xeb, 0x5b, 0x11, 0x93, + 0x0e, 0xb0, 0xf7, 0x72, 0xea, 0x1d, 0x7a, 0xeb, + 0xa3, 0x52, 0x8e, 0xc7, 0xb1, 0x9b, 0xc7, 0xe9, + 0xa0, 0xad, 0xe9, 0xde, 0x4d, 0x3b, 0xca, 0xc9, + 0x8f, 0x63, 0x3b, 0x3f, 0x4d, 0x31, 0xec, 0x67, + 0x67, 0xe9, 0xa0, 0xad, 0xe9, 0xde, 0x4d, 0x3b, + 0xca, 0xc9, 0x8f, 0x63, 0x3b, 0x3f, 0x4d, 0x31, + 0xec, 0x67, 0x67, 0xe9, 0xa0, 0xad, 0xe9, 0xde, + 0x4d, 0x3b, 0xca, 0xc9, 0x8f, 0x63, 0x3b, 0x3f, + 0x4d, 0x31, 0xec, 0x67, 0x67, 0xe9, 0xa0, 0xad, + 0xe9, 0xde, 0x4d, 0x3b, 0xca, 0xc9, 0x8f, 0x63, + 0x3b, 0x3f, 0x4d, 0x31, 0xec, 0x67, 0x67, 0xe9, + 0xa0, 0xad, 0xd4, 0xef, 0x27, 0x71, 0x59, 0x31, + 0xec, 0x67, 0x67, 0xe9, 0xa6, 0x3d, 0x8c, 0xec, + 0xfd, 0x34, 0x15, 0xd7, 0x4b, 0x2b, 0x9b, 0x85, + 0xce, 0x71, 0x68, 0xd4, 0x09, 0x34, 0x5e, 0x74, + 0xd6, 0xba, 0xbb, 0x4a, 0xc9, 0x8f, 0x63, 0x3b, + 0x3f, 0x4d, 0x31, 0xec, 0x67, 0x67, 0xe9, 0xa0, + 0xad, 0x9d, 0x3b, 0x9a, 0x29, 0x4a, 0x25, 0x4d, + 0x6b, 0x4d, 0x3b, 0x95, 0xa9, 0xa2, 0xb2, 0x63, + 0xd8, 0xce, 0xcf, 0xd3, 0x4c, 0x7b, 0x19, 0xd9, + 0xfa, 0x68, 0x2b, 0xad, 0x7c, 0x8c, 0x14, 0x63, + 0x9c, 0xdd, 0xfa, 0x12, 0x07, 0x65, 0x79, 0xd3, + 0x5d, 0x5d, 0x9a, 0x2b, 0x26, 0x3d, 0x8c, 0xec, + 0xfd, 0x34, 0xc7, 0xb1, 0x9d, 0x9f, 0xa6, 0x82, + 0xb8, 0x09, 0x1b, 0x9b, 0x94, 0xdd, 0x09, 0x53, + 0xc1, 0x4a, 0x77, 0x15, 0x8f, 0x1e, 0xc6, 0x76, + 0x7e, 0x9a, 0x63, 0xd8, 0xce, 0xcf, 0xd3, 0x41, + 0x5b, 0xd3, 0xbd, 0xa3, 0x7b, 0x4d, 0x38, 0x17, + 0xa1, 0x24, 0x81, 0xb8, 0x43, 0x88, 0x6f, 0xcd, + 0x04, 0xd3, 0x81, 0x58, 0xb1, 0xec, 0x67, 0x67, + 0xe9, 0xa6, 0x3d, 0x8c, 0xec, 0xfd, 0x34, 0x15, + 0xbd, 0x42, 0x80, 0x68, 0x3b, 0x9a, 0xc2, 0xf4, + 0x64, 0x7b, 0x85, 0x1c, 0x4b, 0x9a, 0x35, 0x02, + 0x49, 0x0a, 0xc5, 0x8f, 0x63, 0x3b, 0x3f, 0x4d, + 0x31, 0xec, 0x67, 0x67, 0xe9, 0xa0, 0xad, 0x8a, + 0x82, 0x08, 0xad, 0x46, 0xa3, 0xbb, 0xc2, 0xbd, + 0x3a, 0x47, 0xb8, 0x87, 0x38, 0x97, 0x11, 0xba, + 0x49, 0x2a, 0xc5, 0x8f, 0x63, 0x3b, 0x3f, 0x4d, + 0x31, 0xec, 0x67, 0x67, 0xe9, 0xa0, 0xad, 0xd4, + 0xe9, 0xd1, 0x4a, 0xef, 0x55, 0x7a, 0x6b, 0xe4, + 0x61, 0x25, 0x84, 0xb6, 0xbf, 0x34, 0x91, 0xe0, + 0x56, 0x2c, 0x7b, 0x19, 0xd9, 0xfa, 0x69, 0x8f, + 0x63, 0x3b, 0x3f, 0x4d, 0x05, 0x72, 0xa4, 0xd7, + 0xb3, 0xaf, 0xb2, 0x95, 0x3b, 0xde, 0x15, 0x63, + 0xc7, 0xb1, 0x9d, 0x9f, 0xa6, 0x98, 0xf6, 0x33, + 0xb3, 0xf4, 0xd0, 0x57, 0x43, 0xde, 0xd0, 0x43, + 0x49, 0x68, 0x3a, 0xc0, 0x24, 0x78, 0x17, 0x9a, + 0xba, 0x94, 0xdc, 0xee, 0xab, 0x26, 0x3d, 0x8c, + 0xec, 0xfd, 0x34, 0xc7, 0xb1, 0x9d, 0x9f, 0xa6, + 0x82, 0xb8, 0x09, 0x1a, 0xaa, 0x35, 0x57, 0xb3, + 0x4d, 0xfd, 0x0b, 0x2d, 0x7b, 0xda, 0x6a, 0xc2, + 0x5a, 0x77, 0xc1, 0x20, 0xab, 0x16, 0x3d, 0x8c, + 0xec, 0xfd, 0x34, 0xc7, 0xb1, 0x9d, 0x9f, 0xa6, + 0x82, 0xb8, 0x49, 0x24, 0x93, 0xac, 0xeb, 0x3b, + 0xa9, 0x53, 0xbd, 0xe1, 0x56, 0x3c, 0x7b, 0x19, + 0xd9, 0xfa, 0x69, 0x8f, 0x63, 0x3b, 0x3f, 0x4d, + 0x05, 0x6f, 0x4e, 0xf2, 0x69, 0xde, 0x56, 0x4c, + 0x7b, 0x19, 0xd9, 0xfa, 0x69, 0x8f, 0x63, 0x3b, + 0x3f, 0x4d, 0x05, 0x6f, 0x4e, 0xf2, 0x69, 0xde, + 0x56, 0x4c, 0x7b, 0x19, 0xd9, 0xfa, 0x69, 0x8f, + 0x63, 0x3b, 0x3f, 0x4d, 0x05, 0x6f, 0x4e, 0xf2, + 0x69, 0xde, 0x56, 0x4c, 0x7b, 0x19, 0xd9, 0xfa, + 0x69, 0x8f, 0x63, 0x3b, 0x3f, 0x4d, 0x05, 0x6f, + 0x4e, 0xf2, 0x69, 0xde, 0x56, 0x4c, 0x7b, 0x19, + 0xd9, 0xfa, 0x69, 0x8f, 0x63, 0x3b, 0x3f, 0x4d, + 0x05, 0x6f, 0x4e, 0xf2, 0x69, 0xa1, 0x56, 0x4c, + 0x7b, 0x19, 0xd9, 0xfa, 0x6b, 0x05, 0xfb, 0x19, + 0xbc, 0x74, 0xe8, 0xfc, 0xf4, 0x1d, 0xf7, 0x5f, + 0xcb, 0x2c, 0x7c, 0xc6, 0xfd, 0x50, 0xb8, 0x54, + 0x96, 0x69, 0xcd, 0xb6, 0xde, 0xde, 0x28, 0x7c, + 0x80, 0xda, 0xc7, 0xbb, 0xe2, 0x80, 0x28, 0xa3, + 0x50, 0x65, 0x11, 0x10, 0x16, 0x37, 0x0a, 0xca, + 0xc1, 0xd0, 0x10, 0x7a, 0xdb, 0x1f, 0x26, 0xcf, + 0xb4, 0xff, 0x00, 0xee, 0xaa, 0xd2, 0xbb, 0x67, + 0x39, 0x4c, 0x79, 0x90, 0x80, 0x3a, 0x71, 0x07, + 0x34, 0x0d, 0x01, 0xa1, 0xad, 0x69, 0xd9, 0x1b, + 0xca, 0x37, 0xe1, 0x18, 0x7a, 0x73, 0x78, 0x07, + 0xa4, 0x82, 0xb6, 0x8a, 0xc9, 0xf0, 0x8c, 0x3d, + 0x39, 0xbc, 0x03, 0xd2, 0x4f, 0x84, 0x61, 0xe9, + 0xcd, 0xe0, 0x1e, 0x92, 0x0a, 0xda, 0x2b, 0x27, + 0xc2, 0x30, 0xf4, 0xe6, 0xf0, 0x0f, 0x49, 0x3e, + 0x11, 0x87, 0xa7, 0x37, 0x80, 0x7a, 0x48, 0x2b, + 0x68, 0xac, 0x9f, 0x08, 0xc3, 0xd3, 0x9b, 0xc0, + 0x3d, 0x24, 0xf8, 0x46, 0x1e, 0x9c, 0xde, 0x01, + 0xe9, 0x20, 0xad, 0xa2, 0xb2, 0x7c, 0x23, 0x0f, + 0x4e, 0x6f, 0x00, 0xf4, 0x93, 0xe1, 0x18, 0x7a, + 0x73, 0x78, 0x07, 0xa4, 0x82, 0xb6, 0x8a, 0xc9, + 0xf0, 0x8c, 0x3d, 0x39, 0xbc, 0x03, 0xd2, 0x4f, + 0x84, 0x61, 0xe9, 0xcd, 0xe0, 0x1e, 0x92, 0x0a, + 0xda, 0x2b, 0x27, 0xc2, 0x30, 0xf4, 0xe6, 0xf0, + 0x0f, 0x49, 0x3e, 0x11, 0x87, 0xa7, 0x37, 0x80, + 0x7a, 0x48, 0x2b, 0x6b, 0xb3, 0x2b, 0xcc, 0xa4, + 0xcb, 0x67, 0x33, 0xc6, 0xc6, 0xc8, 0x4b, 0x70, + 0x51, 0xc4, 0x81, 0xde, 0x53, 0x1f, 0x08, 0xc3, + 0xd3, 0x9b, 0xc0, 0x3d, 0x24, 0xf8, 0x46, 0x1e, + 0x9c, 0xde, 0x01, 0xe9, 0x20, 0x8b, 0xcb, 0x33, + 0x89, 0x32, 0xe6, 0x4c, 0xc6, 0xc2, 0xc9, 0x9b, + 0x3d, 0x31, 0x09, 0x2b, 0x4d, 0x1d, 0x85, 0xd3, + 0xf1, 0x1b, 0x3e, 0xed, 0xb5, 0xe4, 0xff, 0x00, + 0x42, 0xeb, 0xf8, 0x46, 0x1e, 0x9c, 0xde, 0x01, + 0xe9, 0x27, 0xc2, 0x30, 0xf4, 0xe6, 0xf0, 0x0f, + 0x49, 0x04, 0x75, 0x96, 0x78, 0xeb, 0x46, 0xce, + 0xc1, 0x6d, 0x14, 0x91, 0xdc, 0x3f, 0x9c, 0x73, + 0x1d, 0xe4, 0x8f, 0xea, 0x80, 0x06, 0xa5, 0xb7, + 0xe2, 0x26, 0x56, 0xbd, 0x5b, 0x6b, 0xc9, 0xfe, + 0x85, 0xd9, 0xf0, 0x8c, 0x3d, 0x39, 0xbc, 0x03, + 0xd2, 0x4f, 0x84, 0x61, 0xe9, 0xcd, 0xe0, 0x1e, + 0x92, 0x08, 0xeb, 0x1c, 0xf6, 0x4b, 0x3b, 0x57, + 0x5a, 0xfb, 0x34, 0x53, 0x46, 0xf7, 0x99, 0x08, + 0x7d, 0x69, 0x53, 0x4d, 0x14, 0xd5, 0xb8, 0xb6, + 0x3b, 0x68, 0x58, 0xe6, 0x96, 0xf5, 0x75, 0xb0, + 0xa8, 0xa5, 0x43, 0x74, 0x8a, 0xf7, 0x17, 0x6f, + 0xc2, 0x30, 0xf4, 0xe6, 0xf0, 0x0f, 0x49, 0x3e, + 0x11, 0x87, 0xa7, 0x37, 0x80, 0x7a, 0x48, 0x2b, + 0x75, 0xd7, 0xd9, 0x59, 0x63, 0xb0, 0x3d, 0xae, + 0x1a, 0x70, 0x90, 0x69, 0xda, 0x35, 0x56, 0x3f, + 0x84, 0x61, 0xe9, 0xcd, 0xe0, 0x1e, 0x92, 0x7c, + 0x23, 0x0f, 0x4e, 0x6f, 0x00, 0xf4, 0x90, 0x42, + 0xe6, 0x59, 0x84, 0x99, 0x8d, 0xd1, 0xba, 0x91, + 0x82, 0x37, 0x16, 0x86, 0xd1, 0xb5, 0x3e, 0x4f, + 0x6d, 0x6d, 0xb1, 0xcd, 0xdf, 0x6d, 0x6e, 0xeb, + 0x49, 0xe2, 0x6d, 0xd5, 0xab, 0x8d, 0x79, 0xb7, + 0xeb, 0x07, 0xb0, 0x54, 0xaf, 0xc2, 0x30, 0xf4, + 0xe6, 0xf0, 0x0f, 0x49, 0x63, 0xe1, 0x18, 0x7a, + 0x73, 0x78, 0x07, 0xa4, 0x82, 0x36, 0xf3, 0x38, + 0x74, 0xb6, 0xde, 0xc7, 0x6b, 0x03, 0x6d, 0x2d, + 0x89, 0xab, 0xd8, 0xcd, 0x25, 0xdd, 0xb3, 0xdc, + 0x5e, 0x6c, 0x33, 0x77, 0xda, 0xc0, 0xeb, 0x49, + 0xa2, 0x6d, 0xd5, 0xab, 0x8d, 0x4c, 0x52, 0x68, + 0xa1, 0xfe, 0xa9, 0x52, 0xbf, 0x08, 0xc3, 0xd3, + 0x9b, 0xc0, 0x3d, 0x24, 0xf8, 0x46, 0x1e, 0x9c, + 0xde, 0x01, 0xe9, 0x20, 0x8d, 0xba, 0xce, 0x71, + 0xda, 0x9b, 0x4b, 0x3b, 0x76, 0x5a, 0x5b, 0xbc, + 0xd6, 0x40, 0xcf, 0x29, 0xc3, 0x7a, 0xab, 0xc5, + 0x8e, 0x6e, 0xeb, 0x5b, 0x77, 0xda, 0x4d, 0x13, + 0x2e, 0x6d, 0x1e, 0x6b, 0xcd, 0xbb, 0x70, 0xf6, + 0x0a, 0x94, 0xf8, 0x46, 0x1e, 0x9c, 0xda, 0xef, + 0xd0, 0x7a, 0x4b, 0x3f, 0x08, 0xc2, 0x3f, 0xfd, + 0xf3, 0x78, 0x07, 0xa4, 0x82, 0x36, 0xe7, 0x39, + 0xc7, 0x68, 0xeb, 0x3b, 0x3b, 0x76, 0x5a, 0x5b, + 0xbf, 0xcb, 0x0c, 0xd2, 0x5d, 0xdd, 0x51, 0xbe, + 0x0d, 0xc0, 0xac, 0x9f, 0x08, 0xc3, 0xd3, 0x5b, + 0xc0, 0x3d, 0x24, 0xf8, 0x46, 0x1e, 0x9c, 0xde, + 0x01, 0xe9, 0x20, 0xad, 0xa2, 0xb2, 0x7c, 0x23, + 0x0f, 0x4e, 0x6f, 0x00, 0xf4, 0x93, 0xe1, 0x18, + 0x7a, 0x73, 0x78, 0x07, 0xa4, 0x82, 0xb6, 0x8a, + 0xc9, 0xf0, 0x8c, 0x3d, 0x39, 0xbc, 0x03, 0xd2, + 0x4f, 0x84, 0x61, 0xe9, 0xcd, 0xe0, 0x1e, 0x92, + 0x0a, 0xda, 0x2b, 0x27, 0xc2, 0x30, 0xf4, 0xe6, + 0xf0, 0x0f, 0x49, 0x3e, 0x11, 0x87, 0xa7, 0x37, + 0x80, 0x7a, 0x48, 0x2b, 0x68, 0xac, 0x9f, 0x08, + 0xc3, 0xd3, 0x9b, 0xc0, 0x3d, 0x24, 0xf8, 0x46, + 0x1e, 0x9c, 0xde, 0x01, 0xe9, 0x20, 0xad, 0xa2, + 0xb2, 0x7c, 0x23, 0x0f, 0x4e, 0x6f, 0x00, 0xf4, + 0x93, 0xe1, 0x18, 0x7a, 0x73, 0x78, 0x07, 0xa4, + 0x82, 0xb6, 0x8a, 0xc9, 0xf0, 0x8c, 0x3d, 0x39, + 0xbc, 0x03, 0xd2, 0x4f, 0x84, 0x61, 0xe9, 0xcd, + 0xe0, 0x1e, 0x92, 0x0a, 0xda, 0xea, 0xca, 0x7f, + 0x9a, 0x5a, 0x7d, 0xb3, 0x3e, 0xb0, 0x53, 0x5f, + 0x08, 0xc3, 0xd3, 0x9b, 0xc0, 0x3d, 0x25, 0xb6, + 0xd3, 0x66, 0x21, 0xb6, 0xba, 0x86, 0xe3, 0xdb, + 0x1a, 0xee, 0x69, 0xed, 0x7e, 0x1a, 0x01, 0x5c, + 0x26, 0xb4, 0xd6, 0x83, 0xa3, 0x37, 0xf7, 0xc3, + 0xe6, 0xb5, 0x71, 0x2e, 0xdc, 0xdc, 0x11, 0x77, + 0xdb, 0x63, 0x4f, 0x84, 0x2e, 0x24, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x41, 0xea, 0x3f, 0xda, + 0x37, 0xb6, 0xa4, 0xaa, 0xa3, 0x62, 0xfd, 0xa3, + 0x7b, 0x6a, 0x49, 0x02, 0xab, 0x86, 0xfc, 0xff, + 0x00, 0xdd, 0x5a, 0x7d, 0xa7, 0xca, 0x17, 0x72, + 0xe1, 0xbf, 0xf7, 0xab, 0x4f, 0xb4, 0xf9, 0x42, + 0x0c, 0x58, 0x7b, 0xd5, 0xdf, 0x9e, 0x7e, 0xb1, + 0x5d, 0xeb, 0x82, 0xc3, 0xde, 0xae, 0xfc, 0xf3, + 0xf5, 0x8a, 0xef, 0x41, 0x8d, 0xc2, 0xa3, 0x0f, + 0xca, 0x54, 0x9e, 0xe1, 0x51, 0x87, 0xe5, 0x28, + 0x08, 0x88, 0x83, 0xde, 0x79, 0xa3, 0x67, 0x21, + 0xa6, 0x8a, 0xcc, 0xdf, 0xef, 0x2a, 0xad, 0x4e, + 0xfa, 0xb5, 0x67, 0x9f, 0xe9, 0xc8, 0x7e, 0xd9, + 0xbf, 0xde, 0x55, 0x54, 0x0a, 0x9d, 0xf4, 0xa9, + 0xdf, 0x44, 0x40, 0xa9, 0xdf, 0x4a, 0x9d, 0xf4, + 0x44, 0x1e, 0xa3, 0x63, 0xe5, 0x91, 0xb1, 0x33, + 0x4b, 0xde, 0x43, 0x5a, 0x3b, 0x24, 0xae, 0xab, + 0xfc, 0xaa, 0xfb, 0x2d, 0xc0, 0x6e, 0x80, 0x02, + 0x4f, 0x24, 0xb4, 0xd4, 0x77, 0x57, 0x46, 0xcd, + 0x5b, 0x0b, 0x8c, 0xda, 0x32, 0xe1, 0x56, 0x40, + 0x0c, 0xae, 0xee, 0x0a, 0x0e, 0xfa, 0x90, 0xcc, + 0x6e, 0x0e, 0x6f, 0x91, 0x4f, 0x73, 0xa0, 0xbe, + 0xda, 0xe0, 0xe1, 0xf3, 0x09, 0xa3, 0x7b, 0xc5, + 0x04, 0x46, 0x5f, 0x94, 0xde, 0xe6, 0x21, 0xee, + 0xb6, 0xc2, 0x44, 0x64, 0x07, 0x55, 0xd8, 0x75, + 0xae, 0xbf, 0x85, 0x73, 0x80, 0x2b, 0x86, 0x3f, + 0xde, 0x7f, 0x42, 0xdd, 0x91, 0x97, 0x75, 0x1e, + 0x6a, 0xe6, 0xd4, 0x1a, 0x54, 0x53, 0x5f, 0x93, + 0x55, 0x0b, 0x8e, 0xe3, 0xe7, 0x3f, 0x84, 0xa0, + 0xdf, 0x63, 0x96, 0x5e, 0xdf, 0x4a, 0xe8, 0xed, + 0xdb, 0x5e, 0x6f, 0xcb, 0x7b, 0x8d, 0x1a, 0x3b, + 0x65, 0x74, 0xdc, 0xec, 0xee, 0x65, 0x6f, 0x09, + 0x98, 0x16, 0x4e, 0xc6, 0x69, 0x7f, 0x36, 0xfa, + 0x91, 0xdc, 0xa2, 0xee, 0xcb, 0xe3, 0x92, 0x6d, + 0x96, 0xb9, 0x8e, 0xd0, 0x93, 0x70, 0x64, 0xfd, + 0x68, 0x1a, 0xc8, 0xa8, 0xd1, 0xc9, 0x51, 0x99, + 0x5e, 0x64, 0xfc, 0xb2, 0xe5, 0xef, 0x74, 0x65, + 0xed, 0x91, 0xa5, 0x8f, 0x85, 0xc7, 0x0f, 0x94, + 0x77, 0x90, 0x70, 0x54, 0xef, 0xa6, 0x9d, 0x55, + 0xd3, 0xb8, 0xb2, 0x48, 0x2e, 0x2e, 0x02, 0x8d, + 0x24, 0x90, 0x3b, 0x65, 0x63, 0x70, 0xa0, 0xef, + 0xb2, 0xc9, 0x6f, 0xef, 0xe1, 0x33, 0xdb, 0x86, + 0x73, 0x61, 0xc5, 0xa4, 0xb9, 0xd4, 0xd2, 0x17, + 0xbb, 0x9d, 0x9f, 0xcd, 0x6d, 0xa2, 0x32, 0xbe, + 0x2c, 0x6c, 0x1e, 0x51, 0x63, 0x83, 0xa8, 0x3b, + 0x41, 0x76, 0x5a, 0xe8, 0xd9, 0x2b, 0xa2, 0x34, + 0x1e, 0x78, 0x69, 0x1e, 0x73, 0x16, 0x8d, 0x9b, + 0xbd, 0x9a, 0x1c, 0xce, 0x28, 0x4b, 0x89, 0x86, + 0x7a, 0xc6, 0xf6, 0x1d, 0x23, 0x4e, 0x90, 0x47, + 0x74, 0x20, 0xe1, 0xb0, 0xb1, 0xb9, 0xcc, 0x26, + 0x30, 0xdb, 0x51, 0xd2, 0x00, 0x5e, 0x43, 0x8e, + 0x11, 0x40, 0x40, 0xf9, 0x57, 0x7f, 0xc2, 0xb9, + 0xc7, 0xcd, 0x8f, 0xf7, 0x9f, 0xd0, 0xbb, 0xf2, + 0x88, 0x1b, 0x6f, 0xb4, 0xf7, 0xb0, 0xb4, 0x51, + 0x8d, 0x8e, 0x42, 0xd1, 0xbc, 0x0b, 0xa3, 0x75, + 0x3b, 0xea, 0xbd, 0x23, 0xee, 0x39, 0xc7, 0xf8, + 0xcf, 0xf2, 0x8e, 0xe9, 0xdf, 0x41, 0xb0, 0x65, + 0xb7, 0xae, 0xbe, 0x75, 0x83, 0x1b, 0x8e, 0x76, + 0x1a, 0x38, 0x03, 0xa0, 0x0a, 0x0d, 0x38, 0xbb, + 0xab, 0xb9, 0xfb, 0x2f, 0x9a, 0x35, 0xa4, 0xb1, + 0xd1, 0x48, 0xf6, 0x8a, 0x98, 0x9a, 0xfa, 0xbb, + 0xb5, 0xa9, 0x74, 0xec, 0xae, 0x27, 0x7b, 0x78, + 0x69, 0xff, 0x00, 0xba, 0x74, 0x43, 0x9a, 0x27, + 0x5f, 0xe7, 0x7f, 0x42, 0x88, 0xb6, 0x9e, 0xe3, + 0x2d, 0xbf, 0x64, 0xd2, 0x35, 0xcd, 0x96, 0x27, + 0x82, 0xf6, 0xb8, 0xe9, 0x3b, 0xe0, 0x94, 0x1c, + 0xce, 0x0e, 0x69, 0x2d, 0x75, 0x43, 0x9a, 0x48, + 0x70, 0x3a, 0xc1, 0x1a, 0xc2, 0xc5, 0x4e, 0xfa, + 0xdf, 0x7d, 0x72, 0xdb, 0xbb, 0xc9, 0x6e, 0x9a, + 0xce, 0x6c, 0x4a, 0x71, 0x60, 0x06, 0xb4, 0xa8, + 0x5a, 0x10, 0x6f, 0xb3, 0xb2, 0xba, 0xbe, 0x98, + 0x43, 0x6c, 0xd2, 0xf7, 0xeb, 0x3a, 0x68, 0x00, + 0xdf, 0x25, 0x77, 0xc9, 0xb3, 0x59, 0x9b, 0x18, + 0xe7, 0xb0, 0xc7, 0x31, 0x60, 0xab, 0x99, 0x1b, + 0xea, 0xe1, 0xdc, 0x5d, 0x5b, 0x38, 0xc7, 0xc9, + 0x96, 0x66, 0x4c, 0xb7, 0x3f, 0xf7, 0x6e, 0x6d, + 0x23, 0x1b, 0xb4, 0xc2, 0x69, 0xc2, 0x54, 0x56, + 0x5f, 0x79, 0x36, 0x57, 0x7c, 0xd9, 0x8b, 0x5d, + 0x89, 0x95, 0x6b, 0xe3, 0x71, 0xa6, 0x8d, 0xd0, + 0x50, 0x79, 0xb2, 0xb0, 0xba, 0xbe, 0x91, 0xf1, + 0xdb, 0xd0, 0xba, 0x36, 0xe2, 0x7e, 0x23, 0x87, + 0x40, 0x34, 0x5c, 0xe2, 0xa4, 0x80, 0x37, 0x74, + 0x0e, 0xea, 0xb0, 0xec, 0xec, 0xad, 0x9f, 0x32, + 0xbf, 0x95, 0x8d, 0xe6, 0xc4, 0x91, 0x39, 0xc1, + 0x9f, 0x36, 0xa4, 0x68, 0x50, 0x31, 0xdb, 0xdc, + 0x62, 0x67, 0xea, 0x9d, 0x4a, 0x8f, 0xcd, 0xec, + 0xa0, 0xd9, 0x7f, 0x63, 0x73, 0x61, 0x2b, 0x62, + 0xb9, 0xa0, 0x7b, 0x9b, 0x89, 0xa1, 0xa6, 0xa2, + 0x8b, 0x7d, 0x8e, 0x4f, 0x7f, 0x7d, 0x03, 0xee, + 0x2d, 0xda, 0x0c, 0x4c, 0x24, 0x12, 0x5d, 0xa4, + 0xd3, 0x5d, 0x17, 0x6e, 0xd7, 0x1a, 0x5f, 0xc0, + 0x47, 0xa8, 0x6f, 0x85, 0xca, 0x4a, 0xca, 0x71, + 0x95, 0xc3, 0x94, 0xd9, 0x3b, 0x5d, 0xc9, 0x2e, + 0x98, 0x6e, 0xf8, 0xe2, 0x8d, 0xef, 0xb9, 0x05, + 0x4b, 0x48, 0xdf, 0xae, 0xaa, 0x76, 0x96, 0x2a, + 0x77, 0xd7, 0x56, 0x6b, 0x6d, 0xec, 0xb9, 0x95, + 0xc4, 0x34, 0xa3, 0x5a, 0xf2, 0x5b, 0xda, 0x77, + 0x8d, 0xf2, 0xae, 0x54, 0x0a, 0x9e, 0x05, 0x25, + 0x16, 0xcf, 0x66, 0xd2, 0xc4, 0x26, 0x6c, 0x63, + 0x0b, 0x86, 0x26, 0xb4, 0xb8, 0x07, 0x11, 0xda, + 0x51, 0xcc, 0x70, 0x6b, 0xda, 0xe2, 0x2b, 0x84, + 0x83, 0x4d, 0xf1, 0x5d, 0x2a, 0xd7, 0x71, 0x68, + 0xfb, 0x9c, 0xd2, 0xdf, 0x38, 0x8e, 0x61, 0x1d, + 0x80, 0x63, 0x65, 0x2f, 0x2e, 0xa0, 0x60, 0x02, + 0x98, 0x00, 0xec, 0xa0, 0xaa, 0xbd, 0xb2, 0x46, + 0xf7, 0x32, 0x40, 0x5a, 0xf6, 0x9a, 0x39, 0xa7, + 0x58, 0x21, 0x79, 0xaf, 0x64, 0xae, 0x9c, 0xca, + 0xe6, 0x3b, 0xbb, 0xf9, 0xee, 0x22, 0xd0, 0xc9, + 0x5e, 0x4b, 0x7b, 0x4b, 0x98, 0xea, 0x34, 0xd7, + 0xb8, 0x82, 0x46, 0x7c, 0x8f, 0x31, 0x82, 0xcc, + 0xde, 0x3d, 0xa3, 0x99, 0xa3, 0x5d, 0xa1, 0xd5, + 0x38, 0x4e, 0xa3, 0xc6, 0xb8, 0x62, 0x8d, 0xf3, + 0x4a, 0xc8, 0x99, 0xa5, 0xd2, 0x10, 0xd6, 0xf6, + 0xca, 0xba, 0x97, 0x32, 0x7b, 0x48, 0x6c, 0x0e, + 0x96, 0xdd, 0x59, 0xb8, 0x8f, 0x39, 0xa1, 0xbe, + 0x92, 0xad, 0xec, 0xdd, 0xbf, 0x3b, 0x9b, 0xc7, + 0x8c, 0x68, 0xb7, 0x0e, 0x91, 0xfd, 0x8c, 0x1e, + 0x2f, 0xd6, 0x41, 0xa7, 0x30, 0xca, 0x2f, 0xb2, + 0xd8, 0xdb, 0x25, 0xd0, 0x68, 0x6b, 0xcd, 0x06, + 0x17, 0x6f, 0x0a, 0xfc, 0x8b, 0xa5, 0xbb, 0x33, + 0x9a, 0xb9, 0xad, 0x78, 0x11, 0x86, 0xbc, 0x07, + 0x36, 0xaf, 0x15, 0xa1, 0x5d, 0x9b, 0x4b, 0x71, + 0xed, 0x39, 0x3d, 0xa4, 0xe7, 0x5c, 0x8f, 0x79, + 0xee, 0x50, 0xad, 0x7b, 0x54, 0x5c, 0x1d, 0x63, + 0x84, 0xd3, 0xf5, 0x00, 0x9a, 0x20, 0x8b, 0xbd, + 0xcb, 0x2f, 0xec, 0x29, 0xed, 0x31, 0x16, 0xb5, + 0xde, 0x4b, 0xc1, 0xa8, 0xe1, 0x0b, 0xcd, 0x9e, + 0x5f, 0x7b, 0x7a, 0x5f, 0xec, 0xd1, 0x99, 0x79, + 0xba, 0x63, 0xa1, 0x68, 0xa5, 0x6b, 0xf3, 0x9d, + 0xd8, 0x53, 0x19, 0x44, 0x92, 0x66, 0x19, 0x2d, + 0xf5, 0x9d, 0xc1, 0x32, 0x73, 0x2d, 0xc7, 0x11, + 0x76, 0x92, 0x01, 0x04, 0xd2, 0xa7, 0xcd, 0x5a, + 0xf2, 0xa1, 0x72, 0xdc, 0x86, 0xf1, 0xd6, 0xa1, + 0xc6, 0x69, 0xe4, 0x8e, 0x38, 0xc3, 0x0f, 0x8d, + 0xf9, 0x69, 0x41, 0xc3, 0x2e, 0x47, 0x9b, 0xc3, + 0x1b, 0xa6, 0x92, 0x02, 0xc6, 0x30, 0x55, 0xce, + 0xc4, 0xda, 0x01, 0xca, 0x5c, 0x15, 0x3b, 0xea, + 0x42, 0xf6, 0x3c, 0xfa, 0xde, 0x2f, 0xfb, 0xc7, + 0xce, 0xd8, 0x9f, 0xa0, 0x97, 0x38, 0x96, 0x9e, + 0xc1, 0xd2, 0xa3, 0xd0, 0x2a, 0x77, 0xd2, 0xa7, + 0x7d, 0x11, 0x02, 0xa7, 0x7d, 0x09, 0x38, 0x4e, + 0x93, 0xa9, 0x10, 0xea, 0x3d, 0xa4, 0x17, 0x4b, + 0xff, 0x00, 0x72, 0xb2, 0x3b, 0xbc, 0xde, 0xbf, + 0xec, 0x85, 0xc4, 0xbb, 0x6f, 0x7d, 0xc6, 0xcb, + 0xec, 0xff, 0x00, 0xba, 0x17, 0x11, 0xd6, 0x80, + 0x88, 0x88, 0x08, 0x35, 0xa2, 0x0d, 0x61, 0x06, + 0x8d, 0xb2, 0xf7, 0xcb, 0x61, 0xb8, 0x22, 0xd5, + 0xdd, 0x55, 0xfa, 0x0d, 0xe5, 0x3f, 0xb6, 0x3e, + 0xfb, 0x6f, 0xf6, 0x5f, 0x29, 0x50, 0x08, 0x14, + 0x1b, 0xc9, 0x41, 0xbc, 0x88, 0x81, 0x41, 0xbc, + 0x94, 0x1b, 0xc8, 0x88, 0x14, 0x1d, 0x85, 0xd0, + 0x32, 0xfb, 0x87, 0x59, 0x3a, 0xfc, 0x34, 0x7b, + 0x3b, 0x5c, 0x58, 0x4e, 0xed, 0x6b, 0xfd, 0x2b, + 0x9c, 0xa9, 0xd8, 0xbf, 0xd2, 0x13, 0x7f, 0xe4, + 0x7a, 0x28, 0x21, 0xed, 0x6d, 0x26, 0xbb, 0x9d, + 0xb6, 0xf0, 0x34, 0x3a, 0x57, 0x6a, 0x07, 0x40, + 0xd5, 0x55, 0xee, 0x3c, 0xbe, 0xea, 0x5b, 0xb7, + 0x59, 0x47, 0x1e, 0x29, 0xd8, 0x4b, 0x5c, 0xc1, + 0xb9, 0x84, 0xd0, 0xd5, 0xcb, 0xb3, 0x66, 0x7f, + 0x9d, 0x41, 0xfd, 0xbf, 0x02, 0x95, 0xca, 0x81, + 0x75, 0xce, 0x76, 0xd8, 0x4d, 0x2e, 0x8b, 0x9f, + 0xcd, 0x53, 0x5d, 0x2a, 0xfd, 0x5d, 0xd4, 0x11, + 0x72, 0x6c, 0xc6, 0x68, 0xc6, 0x39, 0xcd, 0x11, + 0x48, 0x5a, 0x2a, 0x63, 0x63, 0x81, 0x72, 0xe3, + 0xb2, 0xcb, 0xae, 0x6f, 0xa6, 0x74, 0x16, 0xec, + 0x06, 0x46, 0x8a, 0xb9, 0xae, 0x20, 0x52, 0x85, + 0x7a, 0xb2, 0xba, 0xb8, 0xcb, 0x73, 0x06, 0xce, + 0xf6, 0xb8, 0x3e, 0x27, 0x11, 0x23, 0x1c, 0x68, + 0x5d, 0xbe, 0x2a, 0xa6, 0x36, 0x72, 0x76, 0x5d, + 0x67, 0xd7, 0x17, 0x0d, 0x60, 0x8d, 0xb2, 0xb1, + 0xce, 0x0c, 0xd7, 0x4a, 0x90, 0x83, 0x85, 0xdb, + 0x2f, 0x9b, 0x86, 0x97, 0x73, 0x4d, 0x75, 0x3f, + 0x35, 0xaf, 0x69, 0x2a, 0x2d, 0xf1, 0xba, 0x37, + 0x98, 0xe4, 0x6e, 0x07, 0xb4, 0xd1, 0xcd, 0x23, + 0x48, 0x2b, 0xb7, 0x2d, 0x92, 0xf7, 0xac, 0x60, + 0xe6, 0x1c, 0xfc, 0x66, 0x46, 0x82, 0x2a, 0x74, + 0x8a, 0xf8, 0xd5, 0xee, 0x2e, 0x8d, 0xa8, 0x30, + 0xbb, 0x38, 0x90, 0xc4, 0x41, 0x21, 0xad, 0x12, + 0x53, 0xe7, 0xee, 0xa0, 0x8d, 0xb7, 0xb6, 0x92, + 0xea, 0x76, 0x5b, 0xc2, 0x01, 0x92, 0x43, 0x46, + 0x8d, 0x5a, 0x69, 0x55, 0x25, 0xf0, 0xae, 0x71, + 0xea, 0xd9, 0xa3, 0xfa, 0xc1, 0x68, 0xc8, 0x7f, + 0x9c, 0xda, 0x79, 0xff, 0x00, 0xdd, 0x2b, 0xde, + 0x75, 0x2d, 0xc0, 0xcd, 0x6e, 0x83, 0x5e, 0xf0, + 0xd0, 0xf3, 0x40, 0x09, 0xa5, 0x10, 0x72, 0xdf, + 0x58, 0x5c, 0x58, 0x4c, 0x21, 0xb9, 0x68, 0x6b, + 0xc8, 0xc4, 0x00, 0xa1, 0x14, 0xed, 0xae, 0x7a, + 0x0d, 0xe5, 0x21, 0x94, 0xe5, 0xee, 0xcd, 0x6f, + 0x0d, 0xbc, 0xb2, 0xb9, 0x84, 0x30, 0xbf, 0x11, + 0xf1, 0x8e, 0x82, 0x34, 0x69, 0x5a, 0x32, 0xeb, + 0x46, 0xde, 0x66, 0x11, 0x5a, 0x17, 0x96, 0x09, + 0x1c, 0x46, 0x30, 0x2a, 0x74, 0x02, 0xed, 0x48, + 0x31, 0x65, 0x61, 0x71, 0x7a, 0xf7, 0xb2, 0xdd, + 0x81, 0xc6, 0x36, 0xe3, 0x75, 0x48, 0x1a, 0x02, + 0xc4, 0x16, 0x17, 0x33, 0xdb, 0x4d, 0x75, 0x1b, + 0x01, 0x8e, 0xda, 0x9c, 0xe5, 0x48, 0x1a, 0x48, + 0x53, 0x79, 0x05, 0xb8, 0xb6, 0xcc, 0xf3, 0x0b, + 0x70, 0xec, 0x62, 0x18, 0x9e, 0xc0, 0xe3, 0xbb, + 0x43, 0x4a, 0xad, 0x39, 0x4f, 0xf2, 0x1c, 0xd7, + 0xb6, 0xc4, 0x10, 0xac, 0x88, 0xc8, 0xf6, 0xb1, + 0x82, 0xaf, 0x7b, 0x83, 0x5a, 0x37, 0xcb, 0x8d, + 0x02, 0xec, 0x93, 0x25, 0xbc, 0x67, 0xb4, 0xe8, + 0x63, 0x85, 0x95, 0x39, 0xe7, 0x35, 0xd5, 0xd6, + 0xd0, 0x77, 0x56, 0xdd, 0x9e, 0x85, 0x8f, 0xcc, + 0x44, 0xf2, 0xfe, 0xca, 0xd5, 0x8e, 0x9d, 0xff, + 0x00, 0xd9, 0x1a, 0x17, 0x76, 0x57, 0x24, 0x97, + 0x39, 0x56, 0x71, 0x33, 0xbc, 0x67, 0xcc, 0x71, + 0x11, 0xd9, 0x20, 0x9a, 0x20, 0x81, 0x86, 0x17, + 0x4f, 0x33, 0x21, 0x8c, 0x02, 0xf9, 0x1c, 0x1a, + 0xd1, 0xab, 0x49, 0x34, 0x5d, 0x0d, 0xca, 0x2f, + 0x5d, 0x7c, 0x72, 0xf0, 0xc6, 0xfb, 0x4b, 0x45, + 0x48, 0xa8, 0xa6, 0xaa, 0xeb, 0xee, 0xaf, 0x59, + 0x64, 0x32, 0x8c, 0xc6, 0xd4, 0x96, 0x38, 0x01, + 0x2b, 0x2a, 0x48, 0x3f, 0x38, 0x29, 0x4b, 0x9b, + 0x57, 0xdd, 0x6d, 0x5c, 0xd0, 0x47, 0x33, 0xad, + 0xdc, 0x40, 0x22, 0x46, 0x6b, 0xd0, 0xc6, 0xe8, + 0x41, 0x5f, 0x7b, 0x0b, 0x1e, 0xe6, 0x38, 0x00, + 0x5a, 0x48, 0x3d, 0xb1, 0xa1, 0x62, 0x83, 0x79, + 0x48, 0x58, 0xe5, 0x4f, 0xbe, 0xbf, 0x9a, 0x1e, + 0x73, 0x0c, 0x70, 0x17, 0x19, 0xa6, 0x3a, 0x4d, + 0x01, 0xd7, 0xdd, 0x5d, 0xb6, 0xf9, 0x06, 0x5d, + 0x7d, 0x36, 0x1b, 0x0b, 0xe3, 0x23, 0x19, 0xfb, + 0x50, 0xe6, 0xd1, 0xc3, 0x79, 0xcd, 0xd0, 0x2a, + 0x2a, 0x82, 0x2a, 0x0b, 0x0b, 0x8b, 0x88, 0x26, + 0xb8, 0x89, 0x81, 0xd1, 0xc0, 0x2b, 0x21, 0xa8, + 0x04, 0x76, 0x97, 0x3d, 0x06, 0xf0, 0x56, 0x1c, + 0x82, 0xdf, 0x9c, 0xcb, 0xf3, 0x48, 0x03, 0x83, + 0x6b, 0xe2, 0x87, 0xbf, 0x50, 0x00, 0x11, 0x57, + 0x53, 0x79, 0x69, 0x8f, 0x24, 0xcb, 0x6e, 0xad, + 0xe5, 0x16, 0x17, 0x8e, 0x9a, 0xe2, 0x06, 0xe2, + 0x7b, 0x5c, 0xda, 0x34, 0xd3, 0x5d, 0x34, 0x20, + 0x84, 0xa0, 0xde, 0x4a, 0x6f, 0x0a, 0x9d, 0xc0, + 0x02, 0x77, 0xbb, 0x0b, 0xaf, 0x29, 0x31, 0x0c, + 0xce, 0xd7, 0x9d, 0xf2, 0x0c, 0xac, 0xad, 0x75, + 0x6b, 0x18, 0x50, 0x75, 0x45, 0xb3, 0x39, 0x9c, + 0x91, 0xb5, 0xe5, 0xb1, 0xc4, 0x1e, 0x2a, 0xd6, + 0xc8, 0xe0, 0x09, 0xee, 0x2e, 0x1b, 0xcb, 0x1b, + 0x9b, 0x19, 0xb9, 0x9b, 0x98, 0xf0, 0x3f, 0x58, + 0x3a, 0xc1, 0x1b, 0xe1, 0x48, 0x6d, 0x3c, 0x77, + 0x6d, 0xcd, 0x64, 0x96, 0x4c, 0x5c, 0xd1, 0xa1, + 0x81, 0xdf, 0x9b, 0x40, 0x05, 0x40, 0xee, 0xad, + 0x37, 0xf9, 0x99, 0xcc, 0x2d, 0xac, 0xed, 0xde, + 0xca, 0x49, 0x6f, 0xfa, 0xb7, 0x4d, 0x5a, 0x93, + 0x50, 0x1b, 0xe1, 0x41, 0x1d, 0x41, 0xbc, 0x94, + 0x1b, 0xca, 0x7a, 0xeb, 0x21, 0xcb, 0x6c, 0x67, + 0xc1, 0x7d, 0x7c, 0x63, 0x6b, 0xc0, 0xe6, 0xc3, + 0x5b, 0x57, 0x1d, 0xf2, 0xed, 0x06, 0x82, 0xaa, + 0x3f, 0x34, 0xca, 0x64, 0xb1, 0xb9, 0x64, 0x2c, + 0x77, 0x3d, 0x1c, 0xe0, 0x18, 0x1e, 0x34, 0x62, + 0xa9, 0xd1, 0x54, 0x1c, 0x34, 0x1b, 0xc9, 0x41, + 0xbc, 0xa6, 0xce, 0x4b, 0x95, 0xdb, 0xbd, 0x96, + 0xd7, 0xd7, 0xae, 0x65, 0xe4, 0x80, 0x1c, 0x2c, + 0x6d, 0x5a, 0xd2, 0x75, 0x03, 0xa1, 0x70, 0xdc, + 0x65, 0x37, 0x51, 0x66, 0x63, 0x2e, 0x14, 0x74, + 0x8f, 0x70, 0x0c, 0x76, 0xa0, 0x43, 0xb5, 0x39, + 0x07, 0x15, 0x06, 0xf2, 0x50, 0x6f, 0x29, 0xc1, + 0x92, 0x65, 0x26, 0xe3, 0xd8, 0x5b, 0x7c, 0xf3, + 0x79, 0x4a, 0x79, 0x23, 0x9b, 0x2f, 0xde, 0xaa, + 0xe2, 0xb4, 0xc9, 0xee, 0x2e, 0x33, 0x27, 0x65, + 0xee, 0x22, 0x37, 0x44, 0x4f, 0x3c, 0xed, 0x60, + 0x01, 0xba, 0x3b, 0x7a, 0x10, 0x72, 0xda, 0x5a, + 0x4d, 0x79, 0x70, 0xcb, 0x6b, 0x76, 0x83, 0x2c, + 0x95, 0xc2, 0x0e, 0x81, 0xa0, 0x54, 0xf7, 0x82, + 0xf1, 0x2c, 0x4e, 0x8a, 0x57, 0x44, 0xf0, 0x03, + 0xe3, 0x25, 0xae, 0x1d, 0x90, 0xac, 0xb9, 0x36, + 0x5b, 0x96, 0xb3, 0x35, 0x8a, 0x4b, 0x1b, 0xb3, + 0x3b, 0xed, 0xcb, 0x8c, 0xb1, 0xbd, 0xb8, 0x4d, + 0x0b, 0x5c, 0xdc, 0x4c, 0xd0, 0x37, 0x4a, 0x80, + 0xcc, 0x7f, 0x98, 0x5d, 0x7d, 0xb3, 0xfc, 0x28, + 0x39, 0xe8, 0x37, 0x92, 0x83, 0x79, 0x11, 0x02, + 0x83, 0x79, 0x28, 0x37, 0x91, 0x10, 0x28, 0x37, + 0x97, 0xa8, 0xf4, 0x48, 0xc2, 0x34, 0x1c, 0x43, + 0x4f, 0x75, 0x79, 0x5e, 0xa3, 0xfd, 0xa3, 0x3c, + 0xe1, 0xe1, 0x41, 0x74, 0xce, 0xbd, 0xe5, 0x9e, + 0x67, 0xca, 0x57, 0x02, 0xef, 0xce, 0xbd, 0xe5, + 0x9e, 0x67, 0xca, 0xb8, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x07, 0xa8, 0xbf, 0x68, 0xde, + 0xda, 0x92, 0x51, 0xb1, 0x7e, 0xd1, 0xbd, 0xb5, + 0x24, 0x80, 0xb8, 0x6f, 0xfd, 0xea, 0xd3, 0xed, + 0x3e, 0x50, 0xbb, 0x97, 0x0d, 0xff, 0x00, 0xbd, + 0x5a, 0x7d, 0xa7, 0xca, 0x10, 0x62, 0xc3, 0xde, + 0xae, 0xfc, 0xf3, 0xf5, 0x8a, 0xef, 0x5c, 0x16, + 0x1e, 0xf5, 0x77, 0xe7, 0x9f, 0xac, 0x57, 0x7a, + 0x0c, 0x6e, 0x15, 0x18, 0x7e, 0x52, 0xa4, 0xf7, + 0x0a, 0x8c, 0x3f, 0x29, 0x40, 0x44, 0x44, 0x1e, + 0xf3, 0xcf, 0xf4, 0xe4, 0x3f, 0x6c, 0xdf, 0xef, + 0x2a, 0xaa, 0xb5, 0x67, 0x9f, 0xe9, 0xc8, 0x7e, + 0xd9, 0xbf, 0xde, 0x55, 0x54, 0x04, 0x44, 0x40, + 0x4d, 0x3b, 0x88, 0x9a, 0x77, 0x10, 0x58, 0xb6, + 0x76, 0xd8, 0xf5, 0x65, 0xe5, 0xc8, 0x73, 0x62, + 0x7c, 0xff, 0x00, 0xa8, 0x89, 0xef, 0x34, 0x68, + 0x1b, 0xbd, 0xd5, 0xd5, 0x93, 0x65, 0x3c, 0xc4, + 0x37, 0x76, 0x8f, 0xb8, 0x86, 0x78, 0xee, 0x63, + 0xa6, 0x18, 0xdd, 0x52, 0x0e, 0x90, 0x4f, 0x7d, + 0x45, 0x5f, 0xdf, 0x5a, 0x75, 0x2d, 0xa5, 0x85, + 0xac, 0x98, 0xdc, 0x09, 0x92, 0xe0, 0x00, 0x45, + 0x1d, 0xe5, 0x53, 0x48, 0x1b, 0xf4, 0xd0, 0xb9, + 0x72, 0x7b, 0xc6, 0xd9, 0x66, 0x50, 0x5c, 0x3c, + 0xe1, 0x8d, 0xae, 0xa3, 0xcd, 0x09, 0xa3, 0x5d, + 0xe2, 0x9e, 0x0a, 0xd5, 0x04, 0xae, 0xcf, 0x4f, + 0x35, 0xa6, 0x57, 0x99, 0xca, 0xda, 0x09, 0xa1, + 0x23, 0xca, 0x1a, 0x31, 0x01, 0x43, 0x5e, 0xea, + 0xe5, 0x76, 0xd6, 0x66, 0xee, 0x69, 0x69, 0x31, + 0x78, 0xc2, 0x87, 0xc4, 0x5d, 0xb6, 0xd7, 0xd9, + 0x30, 0x76, 0x67, 0x03, 0xee, 0x4b, 0x2d, 0xef, + 0x1e, 0x0c, 0x6f, 0x0d, 0x7d, 0x68, 0x47, 0x8d, + 0xf9, 0xbb, 0xeb, 0x93, 0xd8, 0x36, 0x63, 0xef, + 0x39, 0x7f, 0x76, 0x7f, 0x86, 0x83, 0x8a, 0xd1, + 0xf9, 0xa5, 0x84, 0x2d, 0xcc, 0x2d, 0xf1, 0x47, + 0x03, 0x8e, 0x0c, 0x75, 0x18, 0x5c, 0x47, 0xe6, + 0xb9, 0xbb, 0xaa, 0x66, 0xc3, 0x30, 0xb5, 0xcf, + 0x64, 0x36, 0x59, 0x8d, 0xbb, 0x44, 0xee, 0x69, + 0xc1, 0x70, 0xc1, 0x4a, 0x90, 0x37, 0xf5, 0xe8, + 0x5c, 0x96, 0x17, 0x99, 0x74, 0xb6, 0x12, 0xe5, + 0x17, 0x92, 0xba, 0x38, 0x44, 0x85, 0xd6, 0xf7, + 0x14, 0x27, 0x76, 0xa2, 0xa0, 0x2d, 0xb6, 0x67, + 0x26, 0xc9, 0x9e, 0xeb, 0xa6, 0x5d, 0x1b, 0xcb, + 0x8c, 0x25, 0xb0, 0xb1, 0xad, 0xa0, 0x15, 0xdd, + 0x28, 0x20, 0xee, 0x21, 0x30, 0x5c, 0x4b, 0x01, + 0x35, 0x31, 0x3c, 0xb2, 0xbb, 0xf4, 0xd4, 0x56, + 0xbd, 0xc3, 0xf9, 0x6e, 0x29, 0x4c, 0xaa, 0x2b, + 0x2c, 0xc2, 0xe2, 0xe9, 0xd7, 0xa4, 0xf3, 0xd2, + 0x35, 0xd3, 0x42, 0x01, 0x23, 0xc6, 0x38, 0x9c, + 0xfa, 0xd3, 0x46, 0x85, 0x17, 0xb9, 0xdb, 0x08, + 0x27, 0xad, 0xbf, 0xd2, 0x37, 0x5f, 0x6c, 0x3e, + 0xb3, 0x17, 0x06, 0x46, 0xd2, 0xfc, 0xe2, 0xd0, + 0x0d, 0xc7, 0x87, 0x1e, 0xe5, 0x57, 0x6e, 0x5b, + 0x75, 0x96, 0x3b, 0x24, 0x97, 0x2f, 0xbc, 0xb8, + 0x30, 0x3a, 0x59, 0x31, 0x68, 0x6b, 0x9c, 0x68, + 0x0b, 0x4e, 0xe3, 0x48, 0xdc, 0x5e, 0xed, 0xae, + 0xb2, 0x2c, 0xa0, 0x3a, 0x7b, 0x49, 0x5f, 0x79, + 0x76, 0x41, 0x0c, 0x2e, 0x69, 0x68, 0x1c, 0x20, + 0x20, 0xec, 0xb0, 0x70, 0x76, 0xd6, 0x5f, 0x38, + 0x6a, 0x11, 0xb8, 0x57, 0xb2, 0xde, 0x6d, 0x47, + 0x3f, 0x6b, 0x73, 0x76, 0xbd, 0xc0, 0x18, 0xa8, + 0x09, 0x03, 0xc4, 0xde, 0x3d, 0xb5, 0xaf, 0x67, + 0xef, 0xe0, 0xb6, 0xcc, 0xa5, 0xb9, 0xbd, 0x93, + 0x00, 0x95, 0x8e, 0x05, 0xf4, 0x27, 0xc6, 0x71, + 0x07, 0x70, 0x15, 0xb5, 0xd6, 0x5b, 0x30, 0xe7, + 0x17, 0x1c, 0xca, 0x4f, 0x18, 0x92, 0x7f, 0x56, + 0x77, 0x7f, 0xfc, 0x68, 0x38, 0x62, 0x39, 0x9c, + 0xd2, 0xcd, 0x99, 0xdb, 0xe2, 0x6b, 0xe2, 0x25, + 0xf2, 0xca, 0xca, 0x34, 0x36, 0xba, 0x4e, 0x8a, + 0x95, 0x27, 0x67, 0x9f, 0xb6, 0xf6, 0x46, 0x5a, + 0x66, 0xb0, 0x32, 0x76, 0x48, 0x43, 0x04, 0xb4, + 0x00, 0xb6, 0xbb, 0xbb, 0xab, 0x55, 0x85, 0xee, + 0x59, 0x63, 0x73, 0x73, 0x68, 0x64, 0x74, 0xd9, + 0x7d, 0xd3, 0x03, 0x4c, 0xb8, 0x4d, 0x41, 0xa6, + 0x92, 0x45, 0x2a, 0xbd, 0x5b, 0xd9, 0x64, 0x16, + 0x73, 0x36, 0xe5, 0xd7, 0xfc, 0xf4, 0x71, 0x9c, + 0x4c, 0x85, 0xad, 0x35, 0x24, 0x69, 0x00, 0xe8, + 0x41, 0x1f, 0x9c, 0xd8, 0x32, 0xc3, 0x31, 0x92, + 0xde, 0x33, 0x58, 0xc5, 0x0b, 0x2b, 0xae, 0x8e, + 0xf1, 0xbe, 0x55, 0xc4, 0xa5, 0x9b, 0x73, 0x6b, + 0x9b, 0x67, 0xa2, 0x4b, 0xea, 0xb2, 0x09, 0x8e, + 0x16, 0x80, 0x48, 0x23, 0x45, 0x18, 0x3c, 0x5a, + 0xee, 0xa8, 0xfb, 0xc8, 0x99, 0x0d, 0xe4, 0xf0, + 0xc7, 0xe4, 0xc7, 0x23, 0x9a, 0x34, 0xd7, 0x40, + 0x3a, 0x34, 0xa0, 0xdb, 0x66, 0x33, 0x18, 0x58, + 0xeb, 0xfb, 0x4c, 0x4c, 0x6c, 0x27, 0x0b, 0xe5, + 0x07, 0x40, 0x27, 0x71, 0xc3, 0x75, 0x4b, 0xd8, + 0xe7, 0x51, 0x66, 0x73, 0x32, 0xcb, 0x35, 0xb7, + 0x8e, 0x5e, 0x77, 0xc4, 0x64, 0xcd, 0x14, 0x38, + 0xbb, 0x3b, 0xcb, 0x8f, 0x26, 0xbf, 0xb4, 0x8e, + 0xde, 0xe3, 0x2f, 0xbe, 0x25, 0xb6, 0xd7, 0x3a, + 0x71, 0x81, 0x5c, 0x2e, 0xa5, 0x2b, 0xa3, 0xb4, + 0xba, 0x2d, 0x6d, 0xf2, 0x2c, 0xb6, 0x66, 0xde, + 0x3a, 0xf7, 0xda, 0x8c, 0x5e, 0x34, 0x51, 0x31, + 0xb4, 0x24, 0xee, 0x55, 0x07, 0x56, 0x49, 0x69, + 0xec, 0x19, 0xcd, 0xfd, 0xbb, 0x09, 0x70, 0x8a, + 0x22, 0x58, 0xe7, 0x69, 0x34, 0xa8, 0x23, 0x81, + 0x47, 0x33, 0x6a, 0x73, 0xa2, 0x5a, 0x0c, 0xac, + 0xa1, 0x20, 0x1f, 0x10, 0x71, 0x2d, 0xd9, 0x5e, + 0x71, 0x6f, 0xd6, 0x57, 0xb7, 0x97, 0x6f, 0xe6, + 0x85, 0xcc, 0x65, 0xac, 0x14, 0x2e, 0xde, 0xa0, + 0xf1, 0x41, 0x50, 0x6c, 0xd0, 0xe6, 0x93, 0xb8, + 0x45, 0x78, 0x50, 0x58, 0xf6, 0x82, 0x03, 0x77, + 0x9f, 0x59, 0x41, 0xbb, 0x24, 0x6c, 0x07, 0xb4, + 0x5c, 0x6b, 0xde, 0x5b, 0xb3, 0x9c, 0xb6, 0x4b, + 0xbc, 0xc9, 0xb3, 0xc5, 0x77, 0x04, 0x4d, 0x80, + 0x31, 0xac, 0x63, 0xdd, 0x42, 0xdc, 0x3a, 0x74, + 0xf0, 0xac, 0x3b, 0x37, 0xca, 0x4e, 0x75, 0x1d, + 0xe9, 0x9a, 0xb1, 0xc1, 0x6d, 0x85, 0x87, 0x0b, + 0xb4, 0xc9, 0x53, 0xa3, 0xc9, 0xde, 0x2a, 0xb3, + 0x3c, 0x8e, 0x9e, 0x69, 0x25, 0x7e, 0x97, 0x3d, + 0xc5, 0xdc, 0xad, 0x3d, 0xe4, 0x13, 0x7b, 0x5d, + 0x08, 0xf6, 0xa8, 0x2e, 0xda, 0x41, 0x6c, 0xf1, + 0xe9, 0x73, 0x74, 0x82, 0x5b, 0xbb, 0xc1, 0x45, + 0x02, 0xa5, 0xe6, 0xbe, 0xb3, 0xb8, 0xc8, 0x6d, + 0xed, 0xa5, 0x92, 0x97, 0x56, 0xd2, 0x02, 0x1b, + 0x43, 0xa6, 0x3a, 0x90, 0x74, 0xd2, 0x9e, 0x4e, + 0x9d, 0x6b, 0x46, 0x75, 0x6b, 0x65, 0x6f, 0x34, + 0x26, 0xc4, 0x93, 0x04, 0xd1, 0x36, 0x56, 0x92, + 0x49, 0xad, 0x49, 0x1a, 0x8e, 0xad, 0x48, 0x31, + 0x91, 0xe5, 0xec, 0xcc, 0x2f, 0xdb, 0x14, 0xbf, + 0xb1, 0x60, 0x32, 0x49, 0x43, 0x43, 0x41, 0xb9, + 0xdd, 0x52, 0x96, 0xf9, 0xbd, 0xbd, 0xfc, 0xf2, + 0xe5, 0x77, 0x2c, 0x6c, 0x56, 0x13, 0x7e, 0xaa, + 0xdc, 0x34, 0x53, 0x03, 0x9b, 0xab, 0x85, 0x45, + 0x64, 0xf9, 0x8f, 0x57, 0x5f, 0x36, 0xe0, 0x8c, + 0x4c, 0x20, 0xb2, 0x40, 0x35, 0xe1, 0x2b, 0xb9, + 0xf6, 0x1b, 0x3b, 0x24, 0xae, 0xb9, 0x6d, 0xf9, + 0x64, 0x2e, 0x76, 0x27, 0x44, 0x1a, 0x71, 0x8d, + 0xda, 0x03, 0x4a, 0xeb, 0x41, 0xaa, 0xef, 0x26, + 0x65, 0x86, 0x57, 0x2c, 0xd7, 0x4d, 0x70, 0xbb, + 0x13, 0xf3, 0x71, 0x10, 0x7c, 0x52, 0xc1, 0x4d, + 0x34, 0xec, 0x8a, 0xa8, 0x73, 0xe4, 0x91, 0xd8, + 0x56, 0x0c, 0xe3, 0x34, 0xcb, 0xf3, 0x5b, 0x20, + 0x1a, 0xf7, 0x41, 0x3d, 0xab, 0x8f, 0x30, 0xc7, + 0xe2, 0x3c, 0xe3, 0x48, 0xa1, 0xae, 0x10, 0x45, + 0x7b, 0x6a, 0xbe, 0x75, 0x50, 0x20, 0xb6, 0xde, + 0xdd, 0x7b, 0x35, 0xe6, 0x49, 0x31, 0x34, 0x6e, + 0x0c, 0x2e, 0xf3, 0x5e, 0x1a, 0xd2, 0xb5, 0x98, + 0x0e, 0x56, 0xdc, 0xea, 0xe8, 0x0c, 0x26, 0xbc, + 0xdc, 0x27, 0xed, 0x00, 0x23, 0xeb, 0x05, 0x1d, + 0x9e, 0x5f, 0xdb, 0x5c, 0xc5, 0x62, 0x2d, 0xa4, + 0xc6, 0xf8, 0x23, 0xa3, 0xf4, 0x11, 0x85, 0xde, + 0x2e, 0xf8, 0x1b, 0xcb, 0xa7, 0x3d, 0xce, 0xad, + 0x6f, 0x32, 0xd8, 0x20, 0x81, 0xf8, 0xa5, 0x73, + 0x9a, 0xe9, 0xc5, 0x08, 0xd2, 0xd6, 0xd3, 0x4d, + 0x46, 0x94, 0x1a, 0xf3, 0x71, 0xff, 0x00, 0xd6, + 0xb2, 0xc0, 0x35, 0x00, 0x40, 0xe4, 0x95, 0xeb, + 0x6a, 0xf5, 0xd8, 0x9d, 0xce, 0x60, 0x7c, 0x8b, + 0x9f, 0x31, 0xbd, 0xb5, 0x9f, 0x23, 0xb1, 0xb4, + 0x8a, 0x4c, 0x53, 0xc3, 0xfb, 0x56, 0xd0, 0x8a, + 0x68, 0x3b, 0xa4, 0x51, 0x77, 0x66, 0x32, 0xe4, + 0x39, 0x93, 0x6d, 0xcc, 0xb7, 0xce, 0x85, 0xd0, + 0xc6, 0x18, 0x43, 0x63, 0x71, 0xde, 0xaf, 0xe6, + 0xa0, 0xd5, 0xb3, 0x3e, 0x25, 0xae, 0x65, 0x31, + 0xf2, 0x44, 0x54, 0xee, 0xd1, 0xca, 0x32, 0xdb, + 0x35, 0xbe, 0xb7, 0xb0, 0x75, 0xa4, 0x2e, 0xe6, + 0xe1, 0x90, 0x92, 0x5e, 0xd0, 0x43, 0xb4, 0x8a, + 0x68, 0x70, 0x3a, 0x17, 0x75, 0xee, 0x65, 0x61, + 0x6f, 0x97, 0x1c, 0xb3, 0x2b, 0xab, 0x9b, 0x21, + 0xac, 0xd3, 0xbc, 0x53, 0x17, 0xcb, 0xa5, 0x79, + 0xb0, 0xbc, 0xb0, 0xb8, 0xca, 0xdd, 0x94, 0xdf, + 0xc8, 0x60, 0x6b, 0x5d, 0x8e, 0x09, 0x68, 0x48, + 0x04, 0x9a, 0xd0, 0xd1, 0x07, 0x4e, 0xcf, 0xcd, + 0x2d, 0xe5, 0xad, 0xf5, 0x8d, 0xcb, 0xdd, 0x2c, + 0x46, 0x12, 0xf6, 0x97, 0x9c, 0x44, 0x11, 0x51, + 0xbb, 0xd9, 0xd2, 0xab, 0xc3, 0x52, 0x9c, 0x6d, + 0xc6, 0x5f, 0x94, 0x59, 0x5c, 0x47, 0x6b, 0x71, + 0xed, 0x97, 0x97, 0x4d, 0xe6, 0xf9, 0xc6, 0xb7, + 0x0b, 0x5a, 0xdf, 0xc8, 0xa8, 0x34, 0x04, 0x44, + 0x40, 0x43, 0xa8, 0xf6, 0x91, 0x0e, 0xa3, 0xda, + 0x41, 0x74, 0xbd, 0xf7, 0x1b, 0x2f, 0xb3, 0xfe, + 0xe8, 0x5c, 0x47, 0x5a, 0xed, 0xbd, 0xf7, 0x1b, + 0x2f, 0xb3, 0xfe, 0xe8, 0x5c, 0x47, 0x5a, 0x02, + 0x22, 0x20, 0x20, 0xd6, 0x11, 0x06, 0xb0, 0x83, + 0x9f, 0x6c, 0x7d, 0xf6, 0xdf, 0xec, 0x7e, 0x52, + 0xa0, 0x14, 0xfe, 0xd8, 0xfb, 0xed, 0xbf, 0xd8, + 0xfc, 0xa5, 0x40, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x29, 0xd8, 0xb4, 0xec, 0x8c, 0xd4, 0xe9, + 0x1e, 0x8a, 0x82, 0x53, 0x19, 0x4d, 0xfd, 0x90, + 0xb2, 0x9f, 0x2b, 0xbe, 0x71, 0x64, 0x13, 0x9c, + 0x4c, 0x94, 0x0a, 0xe1, 0x71, 0xff, 0x00, 0xe1, + 0x06, 0xbd, 0x9a, 0xfe, 0x75, 0x07, 0xf6, 0xfc, + 0x09, 0x33, 0x2f, 0xe3, 0xcc, 0x2f, 0x6f, 0xac, + 0xf1, 0x35, 0xb0, 0x4c, 0xfc, 0x72, 0xb4, 0xe8, + 0x00, 0xb8, 0xeb, 0xdf, 0x5d, 0x96, 0x87, 0x26, + 0xc9, 0xe4, 0x75, 0xe3, 0x6e, 0xbd, 0xb2, 0xe1, + 0xad, 0x2d, 0x86, 0x36, 0xb4, 0x8d, 0x63, 0x75, + 0x73, 0x65, 0x19, 0xac, 0x0c, 0x37, 0x76, 0xf7, + 0xf5, 0x16, 0xf7, 0xda, 0x5e, 0xf1, 0xa4, 0xb5, + 0xdd, 0xc4, 0x1d, 0x56, 0x79, 0xf4, 0x59, 0x84, + 0xac, 0xb5, 0xcd, 0xad, 0xa3, 0x99, 0xb2, 0x90, + 0xc6, 0x4c, 0x05, 0x1c, 0x09, 0xd5, 0x51, 0xac, + 0x77, 0x16, 0xfc, 0x9e, 0xc5, 0xb6, 0x1b, 0x49, + 0x71, 0x6c, 0xd3, 0x56, 0x32, 0x2a, 0xb0, 0x9f, + 0x9a, 0xea, 0x1a, 0x15, 0xc9, 0x6f, 0x69, 0x90, + 0xd9, 0x4e, 0xdb, 0xb7, 0xdf, 0xfb, 0x43, 0x63, + 0x38, 0xa3, 0x89, 0x8c, 0x20, 0x92, 0x35, 0x55, + 0x67, 0x2c, 0xce, 0xe0, 0x39, 0xe4, 0xf9, 0x85, + 0xdb, 0xb9, 0x96, 0x4a, 0xcc, 0x2d, 0xd0, 0x5d, + 0x4a, 0x50, 0x01, 0xe2, 0x82, 0x83, 0x5c, 0x1b, + 0x53, 0x98, 0x47, 0x28, 0xe7, 0x5b, 0x1b, 0xe3, + 0x27, 0xc7, 0x0d, 0x6e, 0x17, 0x61, 0xdd, 0xa3, + 0x82, 0xd5, 0xb4, 0x76, 0x10, 0x59, 0xde, 0x31, + 0xd0, 0x0a, 0x45, 0x70, 0xde, 0x70, 0x02, 0x49, + 0xa3, 0xbf, 0x3b, 0x5e, 0xfa, 0xda, 0xcb, 0x5d, + 0x99, 0x8a, 0x41, 0x23, 0xef, 0xa4, 0x99, 0xad, + 0x38, 0x8c, 0x42, 0x37, 0x00, 0x7b, 0x1a, 0x5a, + 0xb9, 0x73, 0xac, 0xcc, 0x66, 0x37, 0x9c, 0xeb, + 0x1a, 0x59, 0x14, 0x6d, 0xc1, 0x10, 0x3a, 0xe9, + 0xba, 0x50, 0x63, 0x21, 0xfe, 0x73, 0x69, 0xe7, + 0xff, 0x00, 0x74, 0xa9, 0x4c, 0xcf, 0x69, 0x33, + 0x1b, 0x6c, 0xc2, 0x7b, 0x78, 0xf9, 0xac, 0x11, + 0xb8, 0xb5, 0xa5, 0xcd, 0xa9, 0xf0, 0xa8, 0x7c, + 0xa2, 0x78, 0xad, 0xf3, 0x3b, 0x69, 0xe6, 0x76, + 0x08, 0xa3, 0x7d, 0x5e, 0xea, 0x13, 0x41, 0x43, + 0xbc, 0xb1, 0x9a, 0xcf, 0x15, 0xc6, 0x63, 0x71, + 0x34, 0x2e, 0xc5, 0x1c, 0x8f, 0xab, 0x5d, 0x42, + 0x2a, 0x3b, 0xa8, 0x26, 0x76, 0x76, 0xf6, 0x6b, + 0xec, 0xf5, 0xf7, 0x13, 0xd0, 0x3d, 0xd0, 0x91, + 0xe2, 0x8c, 0x23, 0x45, 0x3b, 0x25, 0x46, 0xec, + 0xff, 0x00, 0xf3, 0xcb, 0x4f, 0x38, 0xfd, 0x47, + 0x26, 0x41, 0x7f, 0x0d, 0x86, 0x62, 0xd9, 0xa7, + 0xa8, 0x89, 0xcd, 0x2c, 0x73, 0x87, 0xe6, 0xd6, + 0x9a, 0x57, 0x7d, 0xab, 0x32, 0x1c, 0xbb, 0x30, + 0x65, 0xd7, 0xb5, 0x99, 0xbc, 0x72, 0x63, 0x63, + 0x58, 0x68, 0xca, 0x82, 0x31, 0x38, 0x8d, 0x28, + 0x37, 0xe5, 0x7f, 0xcf, 0x73, 0x5f, 0x36, 0x4f, + 0xac, 0xb9, 0x32, 0x8f, 0xe4, 0x39, 0xaf, 0x6d, + 0x8b, 0x39, 0x7e, 0x65, 0x65, 0x0e, 0x6d, 0x98, + 0x5c, 0x49, 0x26, 0x18, 0x67, 0x6b, 0xc4, 0x4e, + 0xa3, 0x8d, 0x6a, 0x74, 0x68, 0x02, 0xa3, 0xba, + 0xb9, 0xf2, 0xeb, 0xdb, 0x68, 0x72, 0x8c, 0xc2, + 0xd6, 0x49, 0x03, 0x26, 0xb8, 0xc2, 0x22, 0x6d, + 0x09, 0xaf, 0x74, 0x0a, 0x20, 0xcd, 0xbf, 0xfd, + 0xa6, 0xcf, 0xdc, 0x4d, 0xaa, 0x4b, 0xd7, 0x88, + 0x59, 0xbf, 0x81, 0xba, 0x5c, 0xbb, 0x36, 0x76, + 0x79, 0x2d, 0xf2, 0x9c, 0xca, 0x78, 0x88, 0x12, + 0x47, 0x47, 0x30, 0xeb, 0xd3, 0x42, 0xa3, 0xf3, + 0x8b, 0x88, 0x4c, 0x56, 0x96, 0x96, 0xee, 0xc7, + 0x15, 0xb4, 0x40, 0xbc, 0x8d, 0x46, 0x47, 0x1a, + 0xb9, 0x6c, 0xca, 0xaf, 0xad, 0x6d, 0xf2, 0x9c, + 0xc2, 0xde, 0x67, 0xe1, 0x96, 0x70, 0x39, 0xa6, + 0xd0, 0x9a, 0xe8, 0xdf, 0x02, 0x88, 0x3a, 0x2c, + 0x76, 0x9b, 0x37, 0x9e, 0xf6, 0x08, 0x64, 0x91, + 0x85, 0x92, 0x48, 0xd6, 0xba, 0x8c, 0x03, 0x41, + 0x34, 0x5d, 0x70, 0x81, 0xf1, 0xa4, 0x87, 0xfa, + 0xa7, 0xea, 0x34, 0x2a, 0xed, 0x84, 0xac, 0x86, + 0xfa, 0xde, 0x59, 0x0e, 0x16, 0x47, 0x23, 0x5c, + 0xe3, 0xae, 0x80, 0x1d, 0x3a, 0x94, 0xc4, 0x79, + 0xa5, 0x8b, 0x76, 0x9e, 0x4b, 0xe3, 0x2d, 0x2d, + 0x9c, 0xd2, 0x04, 0x98, 0x5d, 0xf3, 0x40, 0xd5, + 0x4a, 0xa0, 0xf7, 0x96, 0x8a, 0x58, 0xe7, 0x8e, + 0x6f, 0x97, 0x57, 0xb7, 0xb9, 0xe3, 0x2e, 0x5d, + 0x93, 0x71, 0x19, 0xc3, 0x40, 0xd4, 0xe8, 0x9f, + 0xc0, 0x08, 0xd2, 0x99, 0x66, 0x67, 0x05, 0xb5, + 0xed, 0xd8, 0x98, 0x17, 0xd9, 0xdd, 0x97, 0x09, + 0x0b, 0x41, 0xd0, 0x09, 0x34, 0x75, 0x3b, 0xaa, + 0x4b, 0x21, 0x66, 0x4f, 0x06, 0x60, 0x63, 0xb1, + 0x95, 0xf7, 0x32, 0x48, 0xc7, 0x7e, 0xb1, 0xcd, + 0xc2, 0xd6, 0x34, 0x11, 0xa3, 0x48, 0x15, 0xaa, + 0x0e, 0x4c, 0xaf, 0xf9, 0x66, 0x73, 0xdd, 0xaf, + 0x7d, 0x6b, 0xd9, 0x3f, 0x7d, 0x9f, 0xec, 0x1d, + 0xe1, 0x0b, 0xc5, 0x8d, 0xf5, 0xac, 0x16, 0x59, + 0x9c, 0x32, 0x49, 0x86, 0x4b, 0x8a, 0x88, 0x45, + 0x09, 0xc5, 0xaf, 0x74, 0x0f, 0x0a, 0xf1, 0xb3, + 0xd7, 0xb6, 0xd6, 0x77, 0x53, 0x49, 0x72, 0xfe, + 0x6d, 0xaf, 0x89, 0xcd, 0x69, 0xa1, 0x3a, 0x49, + 0x1a, 0x3c, 0x50, 0x50, 0x69, 0xcb, 0xa2, 0xc9, + 0x9f, 0x13, 0x9d, 0x98, 0x4b, 0x24, 0x72, 0x83, + 0x46, 0x88, 0xc5, 0x46, 0x14, 0xbb, 0xb5, 0xb3, + 0x96, 0xe2, 0x28, 0x32, 0x83, 0x24, 0xee, 0x78, + 0x21, 0xcd, 0x76, 0x83, 0x8b, 0x5e, 0x8f, 0xec, + 0xae, 0x05, 0xbe, 0xce, 0xe4, 0xda, 0x5d, 0x43, + 0x72, 0xd1, 0x88, 0xc4, 0xe0, 0xe2, 0x06, 0xee, + 0xe1, 0x1c, 0x08, 0x24, 0xa0, 0xcf, 0xf3, 0x3b, + 0x42, 0xeb, 0x4b, 0xc6, 0xb6, 0xe2, 0x38, 0x8e, + 0x07, 0xc7, 0x28, 0xab, 0x87, 0x62, 0xab, 0x66, + 0x6d, 0x63, 0x64, 0xeb, 0x6b, 0x5c, 0xd2, 0xc9, + 0x9c, 0xcb, 0x27, 0x7b, 0x5a, 0xf8, 0xb7, 0x31, + 0x57, 0x73, 0x81, 0x7b, 0xbc, 0xb7, 0xc8, 0xb3, + 0x2b, 0x87, 0x5d, 0xb6, 0xfb, 0xd9, 0xcc, 0x9a, + 0x65, 0x8d, 0xcd, 0x24, 0x83, 0xd8, 0xd0, 0xb4, + 0x66, 0x99, 0x95, 0xa3, 0xe2, 0xb6, 0xcb, 0xac, + 0x6a, 0x6d, 0xad, 0xdc, 0x09, 0x79, 0xd1, 0x89, + 0xd5, 0xde, 0x40, 0xda, 0xd2, 0x4e, 0x70, 0xea, + 0xea, 0x11, 0x30, 0x70, 0xd4, 0xae, 0xf7, 0x80, + 0xf8, 0x76, 0x7c, 0xc9, 0xa5, 0xd8, 0xe9, 0xdb, + 0xd5, 0x40, 0xbd, 0xe7, 0xf6, 0xd9, 0x55, 0xde, + 0x60, 0x23, 0xb9, 0xb8, 0x36, 0x93, 0xc6, 0xc6, + 0xe2, 0x24, 0x55, 0xaf, 0x61, 0xae, 0xad, 0xe2, + 0x14, 0x56, 0x67, 0x9b, 0x44, 0xeb, 0xbb, 0x6f, + 0x62, 0xa9, 0x82, 0xc0, 0x01, 0x11, 0xd5, 0x88, + 0xb4, 0x83, 0x5d, 0x3d, 0xa4, 0x1d, 0x99, 0xb9, + 0xc8, 0x3a, 0xce, 0x77, 0x5c, 0xba, 0xe0, 0x5c, + 0x07, 0x0c, 0x78, 0x00, 0x2d, 0x14, 0x03, 0x55, + 0x4a, 0xe9, 0xb3, 0xbd, 0xb5, 0xcc, 0x36, 0x86, + 0xda, 0x5b, 0x70, 0xf0, 0xd8, 0x60, 0x73, 0x0e, + 0x30, 0x01, 0xae, 0xa0, 0x47, 0x70, 0xae, 0x4b, + 0xb6, 0x64, 0xb9, 0x8d, 0xc8, 0xcc, 0x1d, 0x79, + 0xcc, 0x03, 0x84, 0xdc, 0x40, 0x5a, 0x6a, 0x4b, + 0x77, 0x88, 0x5c, 0xf3, 0x67, 0x8d, 0xeb, 0xc6, + 0x5f, 0xc6, 0xc3, 0xcc, 0x43, 0x48, 0xda, 0xdd, + 0xd2, 0xcd, 0x44, 0xa0, 0xdc, 0x66, 0xd9, 0xe8, + 0x6f, 0xcd, 0xce, 0x2b, 0x9e, 0x7a, 0x39, 0x8b, + 0xc8, 0xa3, 0x68, 0x5e, 0x1f, 0x5a, 0x6b, 0xdf, + 0x5d, 0x79, 0x7d, 0xd4, 0x57, 0x77, 0xb9, 0xbd, + 0xe5, 0xbd, 0x5a, 0x1d, 0x0b, 0x70, 0x17, 0x0a, + 0x1d, 0x4e, 0xaf, 0x81, 0x73, 0x08, 0xb2, 0x28, + 0xef, 0xfa, 0xcc, 0x5e, 0x87, 0x44, 0x1d, 0xce, + 0x8b, 0x7c, 0x07, 0x1e, 0x2d, 0x74, 0xaf, 0x6d, + 0x68, 0xb0, 0xce, 0xe3, 0x66, 0x71, 0x3d, 0xdd, + 0xc3, 0x48, 0x82, 0xec, 0x16, 0x48, 0xd1, 0xa7, + 0x0b, 0x75, 0x37, 0x47, 0x61, 0x06, 0x9d, 0x99, + 0x73, 0x9b, 0x9d, 0x5b, 0x53, 0xf3, 0xb1, 0x02, + 0x3b, 0x18, 0x0a, 0xe4, 0xcc, 0x7f, 0x98, 0xdd, + 0x7d, 0xb3, 0xfe, 0xb1, 0x53, 0x59, 0x78, 0xc8, + 0x72, 0xab, 0xe6, 0x5c, 0xfb, 0x61, 0x9e, 0xb8, + 0x9b, 0x18, 0x0d, 0x34, 0x8c, 0x38, 0x13, 0x89, + 0xda, 0x2b, 0xd8, 0x50, 0x77, 0xb2, 0x32, 0x5b, + 0xc9, 0xe5, 0x8c, 0xd5, 0x8f, 0x91, 0xce, 0x69, + 0xdf, 0x04, 0xd4, 0x20, 0xd2, 0x88, 0x88, 0x08, + 0x88, 0x80, 0xbd, 0x47, 0xfb, 0x46, 0x79, 0xc3, + 0xc2, 0xbc, 0xaf, 0x51, 0xfe, 0xd1, 0x9e, 0x70, + 0xf0, 0xa0, 0xba, 0x67, 0x5e, 0xf3, 0x1f, 0x99, + 0xf2, 0xae, 0x05, 0xdf, 0x9d, 0x7b, 0xcc, 0x7e, + 0x67, 0xca, 0xb8, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, + 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x07, 0xa8, 0xbf, 0x68, 0xde, 0xda, + 0x92, 0x51, 0xb1, 0x7e, 0xd1, 0xbd, 0xb5, 0x24, + 0x80, 0xb8, 0x6f, 0xfd, 0xea, 0xd3, 0xed, 0x3e, + 0x50, 0xbb, 0x97, 0x0d, 0xff, 0x00, 0xbd, 0x5a, + 0x7d, 0xa7, 0xca, 0x10, 0x62, 0xc3, 0xde, 0xae, + 0xfc, 0xf3, 0xf5, 0x8a, 0xef, 0x5c, 0x16, 0x1e, + 0xf5, 0x77, 0xe7, 0x9f, 0xac, 0x57, 0x7a, 0x0c, + 0x6e, 0x15, 0x18, 0x7e, 0x52, 0xa4, 0xf7, 0x0a, + 0x8c, 0x3f, 0x29, 0x40, 0x44, 0x44, 0x1e, 0xf3, + 0xcf, 0xf4, 0xe4, 0x3f, 0x6c, 0xdf, 0xef, 0x2a, + 0xaa, 0xb5, 0x67, 0x9f, 0xe9, 0xc8, 0x7e, 0xd9, + 0xbf, 0xde, 0x55, 0x54, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x00, + 0x03, 0xe1, 0x44, 0x41, 0xbe, 0xde, 0xf2, 0x6b, + 0x66, 0x4a, 0xd8, 0xb0, 0x87, 0x4c, 0xce, 0x6c, + 0xb8, 0x8d, 0x21, 0xbb, 0xa0, 0x76, 0xd6, 0x8d, + 0x5a, 0x06, 0xad, 0xc0, 0x88, 0x80, 0x95, 0x5d, + 0x39, 0x6d, 0x93, 0xaf, 0xaf, 0x62, 0xb5, 0x6b, + 0x8b, 0x79, 0xc3, 0xe3, 0x38, 0x69, 0xa0, 0xa1, + 0x3f, 0x22, 0xe9, 0xce, 0xb2, 0x8e, 0xac, 0x9a, + 0x36, 0x32, 0x4e, 0x71, 0x92, 0x8a, 0x87, 0x91, + 0x4d, 0x20, 0xd0, 0x84, 0x11, 0xa8, 0x9e, 0x04, + 0xd0, 0x80, 0x94, 0x1f, 0x96, 0x84, 0x4e, 0xea, + 0x0d, 0xd6, 0x97, 0x2f, 0xb4, 0x9d, 0xb3, 0xc6, + 0x01, 0x7b, 0x34, 0xb7, 0x10, 0xa8, 0x07, 0x7d, + 0x6a, 0x73, 0x9c, 0xf7, 0x17, 0xbc, 0xd5, 0xce, + 0x24, 0x93, 0xbe, 0x4e, 0x95, 0x85, 0xd5, 0x96, + 0x59, 0x8b, 0xeb, 0xe8, 0xed, 0x4b, 0xcc, 0x62, + 0x4a, 0x8c, 0x40, 0x69, 0x14, 0x15, 0x41, 0xcb, + 0xa3, 0xba, 0x9a, 0x37, 0xa9, 0xd9, 0x5b, 0x6e, + 0xa1, 0x10, 0x5d, 0x4b, 0x00, 0x38, 0x84, 0x6f, + 0x2c, 0x0e, 0x3a, 0xcd, 0x37, 0x56, 0xae, 0xd7, + 0xc8, 0x80, 0x88, 0x34, 0xf7, 0x53, 0xf2, 0xde, + 0xf0, 0xa0, 0x22, 0x68, 0xdf, 0x0b, 0xaf, 0x2c, + 0xcb, 0xdf, 0x98, 0xdd, 0x0b, 0x66, 0x3c, 0x46, + 0x4b, 0x4b, 0xb1, 0x11, 0x51, 0xa1, 0x07, 0x20, + 0xd6, 0x0f, 0x67, 0x4f, 0x69, 0x6e, 0xbb, 0xbb, + 0x9a, 0xf2, 0x6e, 0x7a, 0x5a, 0x03, 0x40, 0xd6, + 0xb1, 0xa2, 0x8d, 0x6b, 0x46, 0x80, 0xd0, 0xb5, + 0xbd, 0x85, 0x8f, 0x73, 0x0e, 0xb6, 0x92, 0xde, + 0xdd, 0x09, 0x1f, 0x22, 0xf3, 0xf9, 0x69, 0xa8, + 0xf0, 0xa0, 0x27, 0x63, 0x7f, 0x5a, 0x69, 0x4e, + 0x2a, 0xd7, 0x71, 0x01, 0x13, 0x75, 0x10, 0x11, + 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x00, 0x50, + 0x71, 0x22, 0x22, 0x02, 0x22, 0x20, 0x21, 0xd4, + 0x7b, 0x48, 0x87, 0x51, 0xed, 0x20, 0xba, 0x5e, + 0xfb, 0x8d, 0x97, 0xd9, 0xff, 0x00, 0x74, 0x2e, + 0x23, 0xad, 0x76, 0xde, 0xfb, 0x8d, 0x97, 0xd9, + 0xff, 0x00, 0x74, 0x2e, 0x23, 0xad, 0x01, 0x11, + 0x10, 0x10, 0x6b, 0x08, 0x83, 0x58, 0x41, 0xcf, + 0xb6, 0x3e, 0xfb, 0x6f, 0xf6, 0x3f, 0x29, 0x50, + 0x0a, 0x7f, 0x6c, 0x7d, 0xf6, 0xdf, 0xec, 0x7e, + 0x52, 0xa0, 0x10, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x03, 0xbc, 0x9a, 0x3b, 0xa8, 0xb7, + 0xd8, 0xda, 0x49, 0x79, 0x75, 0x1d, 0xbc, 0x7a, + 0x0b, 0xcf, 0x8c, 0xed, 0xe6, 0x8f, 0x29, 0xc7, + 0xb4, 0x83, 0x46, 0xae, 0xc7, 0x02, 0x76, 0xf4, + 0x76, 0xd4, 0x94, 0x39, 0x54, 0x53, 0x59, 0x5e, + 0xdd, 0xb2, 0x62, 0x5b, 0x66, 0x68, 0xc1, 0x4d, + 0x0e, 0xec, 0xf6, 0x17, 0x1d, 0x95, 0xbf, 0xb4, + 0xdd, 0x43, 0x6f, 0x8b, 0x0f, 0x3c, 0xe0, 0xd2, + 0xea, 0x56, 0x95, 0x41, 0xa5, 0x17, 0x4e, 0x63, + 0x66, 0x2c, 0xaf, 0xa4, 0xb4, 0x0e, 0xc6, 0x23, + 0x20, 0x17, 0x1d, 0x66, 0xa0, 0x1d, 0x5d, 0xd5, + 0xcd, 0xa9, 0x01, 0x12, 0x89, 0xae, 0xb4, 0xe0, + 0x40, 0x45, 0xd9, 0xd5, 0xb2, 0x75, 0x59, 0xcc, + 0xb1, 0x8e, 0x6c, 0x49, 0xcd, 0x60, 0xa6, 0x9e, + 0xda, 0xe6, 0xb7, 0x89, 0xf3, 0xcf, 0x1c, 0x31, + 0xf9, 0x52, 0xb9, 0xac, 0x69, 0xdd, 0x18, 0x8a, + 0x0f, 0x1d, 0xad, 0x29, 0x4a, 0xf6, 0x42, 0x9b, + 0x87, 0x20, 0xb4, 0x9a, 0xee, 0xf2, 0x16, 0xdc, + 0xb9, 0x90, 0xd9, 0x79, 0x52, 0x38, 0x03, 0x5a, + 0x0f, 0x1b, 0x55, 0x35, 0x2c, 0x33, 0x20, 0xb2, + 0xba, 0x25, 0x96, 0x59, 0x8b, 0x25, 0x94, 0x0a, + 0xb6, 0x32, 0xda, 0x57, 0xbe, 0x82, 0x17, 0x73, + 0xb7, 0xac, 0x22, 0xf7, 0x3c, 0x12, 0xdb, 0xcc, + 0xf8, 0x25, 0x6e, 0x19, 0x23, 0x34, 0x73, 0x7b, + 0x2b, 0xc5, 0x34, 0x57, 0xb3, 0x44, 0x04, 0x44, + 0xed, 0xf7, 0x10, 0x76, 0x65, 0x79, 0x9c, 0x99, + 0x74, 0xee, 0x7b, 0x5a, 0x24, 0x8e, 0x56, 0xe0, + 0x96, 0x33, 0xa0, 0x39, 0xbd, 0xb5, 0xd9, 0xd7, + 0x76, 0x96, 0xf1, 0xc9, 0xd5, 0xb6, 0x42, 0xda, + 0x59, 0x9b, 0x84, 0xca, 0x5d, 0x88, 0x81, 0xd8, + 0x14, 0x5c, 0x6d, 0xb3, 0x84, 0xe5, 0xaf, 0xbc, + 0x74, 0xe1, 0xb3, 0x31, 0xd8, 0x44, 0x1b, 0xa4, + 0x57, 0xca, 0x5c, 0x67, 0x5f, 0x6d, 0x03, 0xbe, + 0x89, 0xa6, 0x95, 0x44, 0x04, 0xd5, 0xdb, 0x43, + 0x5f, 0xe9, 0x5d, 0x90, 0x58, 0xb1, 0xf9, 0x65, + 0xc5, 0xfc, 0xaf, 0x73, 0x0c, 0x4f, 0x6c, 0x70, + 0xb4, 0x6a, 0x73, 0x8e, 0x93, 0x5e, 0xe2, 0x0e, + 0x3f, 0xc8, 0xaf, 0x4d, 0x25, 0xaf, 0x6b, 0xa9, + 0x5a, 0x10, 0x77, 0xb5, 0x29, 0x48, 0x32, 0x4b, + 0x66, 0x5a, 0x32, 0xf3, 0x33, 0xb9, 0xf6, 0x68, + 0xa6, 0xd3, 0x0b, 0x1a, 0x2a, 0xe3, 0xd9, 0xd4, + 0x57, 0x8c, 0xc3, 0x27, 0x8a, 0x0b, 0x51, 0x7f, + 0x63, 0x37, 0xb4, 0xda, 0x38, 0xd1, 0xce, 0xc3, + 0x47, 0x34, 0xf6, 0x50, 0x69, 0xcd, 0xf3, 0x1e, + 0xb2, 0xbc, 0x37, 0x26, 0x3e, 0x6c, 0x61, 0x0c, + 0xc1, 0x5a, 0xd7, 0x0d, 0x74, 0xae, 0x2a, 0xd7, + 0xb6, 0xa6, 0x6d, 0xb2, 0x7c, 0xae, 0xe1, 0xb1, + 0x0e, 0xb1, 0x6b, 0x66, 0x94, 0x0f, 0xd5, 0x61, + 0xa9, 0x0e, 0x3b, 0x8b, 0x64, 0xf9, 0x06, 0x59, + 0x6f, 0x23, 0xa1, 0x97, 0x32, 0x0d, 0x91, 0xba, + 0xd8, 0x5b, 0x43, 0x5d, 0xc4, 0x10, 0x5d, 0x9a, + 0x26, 0x95, 0x23, 0x96, 0x65, 0x3e, 0xda, 0xd9, + 0x6e, 0x25, 0x97, 0xd9, 0xed, 0x20, 0xd0, 0xf9, + 0x8f, 0x80, 0x2e, 0xa1, 0x92, 0x65, 0xf7, 0x70, + 0xc8, 0xec, 0xaa, 0xf0, 0xdc, 0x49, 0x10, 0xc4, + 0xe8, 0xe4, 0x14, 0x24, 0x0d, 0xe3, 0x40, 0x82, + 0x13, 0x57, 0x60, 0xf7, 0xd1, 0x75, 0x36, 0xc4, + 0xbf, 0x2e, 0x75, 0xe4, 0x6e, 0xab, 0xa2, 0x93, + 0x9b, 0x9e, 0x3f, 0x9a, 0x0f, 0x92, 0x6a, 0xb9, + 0x50, 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, + 0x01, 0x7a, 0x8f, 0xf6, 0x8c, 0xf3, 0x87, 0x85, + 0x79, 0x5e, 0xa3, 0xfd, 0xa3, 0x3c, 0xe1, 0xe1, + 0x41, 0x74, 0xce, 0xbd, 0xe6, 0x3f, 0x33, 0xe5, + 0x5c, 0x0b, 0xbf, 0x3a, 0xf7, 0x98, 0xfc, 0xcf, + 0x95, 0x70, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x0f, 0x51, 0x7e, 0xd1, 0xbd, 0xb5, 0x24, + 0xa3, 0x62, 0xfd, 0xa3, 0x7b, 0x6a, 0x49, 0x01, + 0x70, 0xdf, 0xfb, 0xd5, 0xa7, 0xda, 0x7c, 0xa1, + 0x77, 0x2e, 0x1b, 0xff, 0x00, 0x7a, 0xb4, 0xfb, + 0x4f, 0x94, 0x20, 0xc5, 0x87, 0xbd, 0x5d, 0xf9, + 0xe7, 0xeb, 0x15, 0xde, 0xb8, 0x2c, 0x7d, 0xea, + 0xeb, 0xcf, 0x3f, 0x58, 0xae, 0xea, 0xa0, 0x6e, + 0x15, 0x18, 0x7e, 0x52, 0xa4, 0x89, 0xd0, 0xa3, + 0x4e, 0xbe, 0x14, 0x04, 0x44, 0x41, 0xef, 0x3c, + 0xff, 0x00, 0x4e, 0x43, 0x4f, 0x5c, 0xdf, 0xef, + 0x2a, 0xaa, 0xb7, 0x5f, 0x44, 0x6e, 0x36, 0x72, + 0x66, 0x81, 0x57, 0x40, 0xec, 0x63, 0xb9, 0xfd, + 0x05, 0x54, 0x50, 0x11, 0x11, 0x01, 0x11, 0x10, + 0x11, 0x11, 0x01, 0x11, 0x10, 0x11, 0x11, 0x01, + 0x11, 0x2a, 0x06, 0xbd, 0xcd, 0x3c, 0x08, 0x26, + 0xf6, 0x68, 0x36, 0xdd, 0x97, 0xb9, 0x8b, 0xfc, + 0x9b, 0x78, 0x8b, 0x5b, 0xd9, 0x73, 0xbf, 0x21, + 0xc2, 0xbd, 0xdd, 0xe2, 0xbd, 0xd9, 0x98, 0x2e, + 0x1c, 0x71, 0x4b, 0x69, 0x21, 0x64, 0x87, 0x76, + 0x87, 0x45, 0x7b, 0xe1, 0x74, 0x5b, 0xb2, 0xc6, + 0xd3, 0x67, 0x22, 0x8a, 0xfd, 0xef, 0x8d, 0xb7, + 0xaf, 0x2f, 0x3c, 0xd8, 0xab, 0x8e, 0x13, 0x51, + 0xe0, 0x5b, 0x32, 0xc8, 0xf2, 0x99, 0xec, 0x6f, + 0x32, 0xec, 0xbe, 0x49, 0x1c, 0xe9, 0x18, 0x5e, + 0x44, 0xa3, 0x51, 0x02, 0x80, 0x8e, 0xed, 0x10, + 0x47, 0x65, 0xf6, 0x76, 0x36, 0xf9, 0x53, 0xf3, + 0x6b, 0xd8, 0x84, 0xf8, 0x9f, 0xcd, 0xc1, 0x11, + 0xd0, 0xda, 0xef, 0x95, 0x8b, 0xb6, 0x65, 0xb7, + 0xb9, 0x53, 0xef, 0xad, 0xe3, 0x6d, 0xa5, 0xc4, + 0x2e, 0xc2, 0xf8, 0x1a, 0xed, 0x0e, 0x1d, 0x86, + 0xf7, 0x56, 0xcb, 0xaf, 0x1b, 0x64, 0xed, 0x30, + 0x82, 0x03, 0x67, 0x21, 0xfc, 0x12, 0x02, 0xa2, + 0xe2, 0xb1, 0xb8, 0x92, 0xd6, 0x4b, 0xd6, 0xb4, + 0x73, 0x30, 0xb8, 0x09, 0x1d, 0x5a, 0x50, 0x9a, + 0x7a, 0x48, 0x25, 0xa6, 0x87, 0x2d, 0xc9, 0xad, + 0x2d, 0xb9, 0xfb, 0x56, 0xdd, 0xdd, 0xdc, 0x37, + 0x9c, 0x76, 0x3d, 0x40, 0x6f, 0x00, 0xb4, 0x66, + 0x36, 0x16, 0x72, 0xbe, 0xca, 0x5c, 0xb8, 0x86, + 0x0b, 0xda, 0x34, 0xc2, 0x1d, 0x52, 0xc7, 0x1d, + 0xe1, 0xb8, 0xb6, 0xed, 0x60, 0xad, 0xc5, 0x9b, + 0x9b, 0xe4, 0xba, 0xdd, 0xb8, 0x77, 0xb5, 0x9d, + 0xde, 0xd1, 0x5a, 0x32, 0xbb, 0x29, 0xed, 0xaf, + 0xb2, 0xeb, 0xa9, 0x5a, 0x04, 0x57, 0x12, 0x0e, + 0x68, 0xd7, 0x5f, 0x73, 0xba, 0x83, 0xae, 0xe6, + 0x5c, 0x93, 0x2e, 0xbc, 0xea, 0xe3, 0x66, 0x27, + 0x6b, 0x70, 0xb6, 0xe2, 0x67, 0x1f, 0x1a, 0xae, + 0xdd, 0x1c, 0x2b, 0xd5, 0xb5, 0x83, 0x2c, 0x36, + 0xa2, 0x08, 0x62, 0xaf, 0x32, 0xea, 0xbe, 0x3a, + 0xef, 0x16, 0x1d, 0x0b, 0x19, 0xae, 0x6e, 0xdb, + 0x7c, 0xce, 0x68, 0x8d, 0x8c, 0x12, 0x39, 0x8f, + 0x00, 0x3d, 0xe0, 0xe2, 0x75, 0x40, 0xa1, 0x5b, + 0x21, 0xb8, 0xbd, 0x9f, 0x69, 0x6c, 0xdd, 0x7b, + 0x03, 0x6d, 0xe5, 0x6b, 0x08, 0x0d, 0x69, 0xae, + 0x8a, 0x38, 0xef, 0x9d, 0xf4, 0x1c, 0x96, 0xd9, + 0x74, 0x57, 0xb9, 0xdd, 0xe9, 0xb8, 0x24, 0x5b, + 0xc0, 0xe9, 0x24, 0x92, 0x86, 0x95, 0xa1, 0xd0, + 0xd5, 0xba, 0xc8, 0xe4, 0xd9, 0xc4, 0xd2, 0x59, + 0x32, 0xcd, 0xb6, 0xce, 0x2d, 0x2e, 0xb7, 0x95, + 0x9e, 0x51, 0x03, 0x55, 0x57, 0x4e, 0x50, 0xfc, + 0x17, 0xb9, 0xd1, 0x0d, 0x0f, 0x70, 0xab, 0x83, + 0x48, 0xa8, 0x20, 0x17, 0xe8, 0xef, 0xae, 0x4c, + 0xbf, 0x3a, 0xb8, 0x96, 0xe5, 0xac, 0xb1, 0xcb, + 0x6d, 0xf9, 0xf2, 0x09, 0x6e, 0x1a, 0xb4, 0xd0, + 0x6b, 0xd2, 0x48, 0x41, 0xe7, 0x26, 0xcb, 0x6c, + 0x66, 0xb2, 0xbd, 0x7d, 0xf0, 0xf7, 0x77, 0x00, + 0xe7, 0xee, 0x80, 0xd1, 0xe3, 0x53, 0xb6, 0x96, + 0xdd, 0x4f, 0x99, 0xdf, 0x44, 0xc6, 0x40, 0x2d, + 0x2d, 0x60, 0x63, 0x9f, 0x27, 0x8c, 0x2b, 0x20, + 0x1e, 0x4d, 0x75, 0x15, 0xee, 0xc0, 0xb9, 0xd9, + 0x2e, 0x72, 0xe7, 0x8c, 0x2f, 0x73, 0xc9, 0x70, + 0x1b, 0x86, 0xb5, 0x21, 0x71, 0x64, 0x79, 0x6c, + 0x59, 0x8d, 0xdb, 0xc4, 0xe4, 0xf3, 0x30, 0x37, + 0x9c, 0x78, 0x1a, 0xcd, 0x0f, 0x90, 0x83, 0xbe, + 0xc2, 0x5c, 0x9b, 0x33, 0xbc, 0x39, 0x7f, 0xb0, + 0x36, 0x26, 0xbc, 0x38, 0x45, 0x23, 0x49, 0xc4, + 0x30, 0x82, 0x6a, 0x74, 0xf0, 0x2f, 0x5b, 0x30, + 0xfb, 0x68, 0xb3, 0x07, 0xda, 0x98, 0x31, 0x5c, + 0x34, 0xc8, 0x3d, 0xa0, 0x9f, 0xcd, 0x07, 0xc9, + 0xa7, 0x71, 0x7a, 0xc8, 0x73, 0x2b, 0x47, 0xe6, + 0x71, 0xdb, 0x58, 0xda, 0x32, 0xde, 0x17, 0x07, + 0x78, 0xfa, 0xe4, 0x2d, 0x6b, 0x4d, 0x2a, 0xee, + 0xda, 0xd3, 0xb3, 0xdf, 0xea, 0x29, 0x7f, 0xfc, + 0xde, 0x12, 0x83, 0xcd, 0xad, 0xb5, 0x86, 0x6d, + 0x9a, 0x39, 0xac, 0xb7, 0x36, 0xd6, 0xf6, 0xed, + 0x7b, 0xee, 0x40, 0x76, 0x2c, 0x64, 0x38, 0xee, + 0xee, 0x2f, 0x76, 0x6f, 0xc9, 0x73, 0x4b, 0xa7, + 0x65, 0xe2, 0xc9, 0xb0, 0x35, 0xd5, 0x10, 0xcc, + 0xd3, 0xa6, 0xad, 0x15, 0xd2, 0xb3, 0xb3, 0x74, + 0x33, 0xe6, 0x6d, 0x03, 0xc7, 0x73, 0x1f, 0x87, + 0x7e, 0x95, 0x23, 0xe5, 0x51, 0xdb, 0x3c, 0xd7, + 0x3b, 0x38, 0xb4, 0x02, 0xb5, 0x6b, 0xaa, 0x7b, + 0x80, 0xd5, 0x07, 0x66, 0x4f, 0x95, 0x5a, 0xc8, + 0x33, 0x18, 0xaf, 0x40, 0x2e, 0xb6, 0x00, 0x09, + 0x34, 0xf8, 0xb4, 0x2e, 0xab, 0xbb, 0xcb, 0xd5, + 0xa4, 0x39, 0x4e, 0x6d, 0x7f, 0x15, 0xa5, 0xb5, + 0xb1, 0x82, 0x08, 0x43, 0x9e, 0xf7, 0xd7, 0x4c, + 0xa0, 0x79, 0x35, 0xed, 0xae, 0xa8, 0x1c, 0x1d, + 0x2e, 0xd0, 0x96, 0x9d, 0x06, 0x94, 0x23, 0xfb, + 0x6a, 0x0f, 0x28, 0x6d, 0xff, 0x00, 0xb5, 0x09, + 0x72, 0xf6, 0xd6, 0x68, 0x5a, 0x5c, 0x74, 0x80, + 0x30, 0x9d, 0x75, 0xae, 0xb4, 0x12, 0x96, 0xb2, + 0xe4, 0x77, 0xd7, 0x32, 0x58, 0xbe, 0xcd, 0x96, + 0xac, 0x01, 0xc2, 0x39, 0xb1, 0x50, 0x82, 0xdd, + 0x15, 0x72, 0x80, 0x78, 0x0d, 0x7b, 0x9a, 0x0d, + 0x43, 0x49, 0x00, 0xef, 0x80, 0x75, 0xab, 0x15, + 0xb5, 0xce, 0x57, 0x9e, 0xcf, 0xec, 0xd7, 0x56, + 0x82, 0x0b, 0xb9, 0x2b, 0x82, 0x78, 0xb7, 0xc6, + 0xfa, 0x80, 0xb9, 0x85, 0xd0, 0x4f, 0x24, 0x27, + 0x49, 0x8d, 0xc5, 0xb5, 0xdf, 0xa2, 0x0d, 0x68, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x87, 0x51, 0x45, 0xea, + 0x28, 0x9d, 0x34, 0xac, 0x89, 0xa2, 0xa6, 0x47, + 0x06, 0x8e, 0xe9, 0xa2, 0x0b, 0x95, 0xee, 0x8b, + 0x2b, 0x26, 0x9d, 0x7c, 0xdf, 0xc8, 0xd5, 0xc4, + 0xbb, 0xf3, 0x6a, 0x35, 0xf0, 0x43, 0xea, 0xd9, + 0x4f, 0xcb, 0x81, 0x70, 0x76, 0xd0, 0x11, 0x11, + 0x01, 0x37, 0x42, 0x2c, 0x1d, 0x5c, 0x3e, 0x04, + 0x1a, 0x76, 0xc4, 0x7f, 0xde, 0xdb, 0x9f, 0xf0, + 0xb4, 0x72, 0x8a, 0xaf, 0xab, 0x2e, 0xd7, 0x33, + 0x1d, 0xbd, 0x95, 0xd8, 0xf2, 0x48, 0x2c, 0x3d, + 0xd0, 0x08, 0xf0, 0x2a, 0xd7, 0xc8, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x0a, 0x63, + 0x28, 0x68, 0x83, 0x2a, 0xcc, 0xaf, 0xff, 0x00, + 0x3c, 0x33, 0x99, 0x8c, 0xf9, 0xda, 0xd4, 0x3f, + 0x65, 0x4d, 0xdb, 0x50, 0xec, 0x9d, 0xd8, 0x6f, + 0x94, 0xd9, 0x41, 0x77, 0x6b, 0xc5, 0x41, 0xbb, + 0x21, 0xb7, 0x92, 0xe7, 0x25, 0xcc, 0x6d, 0xe2, + 0xa3, 0xa5, 0x90, 0xb5, 0xa0, 0x54, 0x0d, 0x34, + 0xec, 0xaf, 0x19, 0x6e, 0xcf, 0x66, 0xd0, 0x5f, + 0x5b, 0x4f, 0x24, 0x20, 0x47, 0x1b, 0xc3, 0x9c, + 0x43, 0x9a, 0x74, 0x72, 0x93, 0x28, 0x7b, 0x9b, + 0xb3, 0xf9, 0xa3, 0x9a, 0x4b, 0x5c, 0x29, 0x42, + 0x0d, 0x0e, 0xa5, 0xc1, 0x94, 0x4f, 0x70, 0xec, + 0xce, 0xd0, 0x3a, 0x59, 0x1c, 0x0c, 0xa2, 0xa0, + 0xb8, 0x90, 0x7b, 0xe8, 0x24, 0xe6, 0xcb, 0x99, + 0x98, 0xed, 0x3d, 0xd4, 0x52, 0x92, 0x20, 0x8e, + 0x92, 0x4c, 0x41, 0xa1, 0xa0, 0x63, 0x68, 0x17, + 0x9b, 0x37, 0xe4, 0x79, 0x8d, 0xd7, 0xb0, 0xb6, + 0xc8, 0x5b, 0x87, 0xd4, 0x43, 0x3b, 0x4f, 0x8d, + 0x88, 0x57, 0x5f, 0x02, 0xee, 0xb7, 0xa3, 0xb3, + 0xec, 0xdd, 0x83, 0xcb, 0x74, 0x20, 0x30, 0x6f, + 0xf8, 0xad, 0x50, 0x39, 0x0b, 0x5c, 0x73, 0xab, + 0x5a, 0x6b, 0x2f, 0xad, 0x7b, 0x01, 0xae, 0xaa, + 0x0e, 0xac, 0xbb, 0x2b, 0xb6, 0x8d, 0xb7, 0xd7, + 0x17, 0xcc, 0x33, 0xb3, 0x2f, 0x25, 0x9c, 0xd0, + 0x24, 0x02, 0xea, 0x9a, 0x92, 0xb2, 0x46, 0x51, + 0x98, 0xe5, 0xf7, 0x12, 0xc7, 0x6e, 0xcb, 0x3b, + 0x9b, 0x7a, 0x16, 0x35, 0xae, 0x14, 0x78, 0x5b, + 0xa6, 0xba, 0xcc, 0x2c, 0xb3, 0x0c, 0xc2, 0xf6, + 0xda, 0x31, 0x2d, 0x9f, 0x39, 0x86, 0x70, 0xef, + 0x27, 0x55, 0x34, 0x8d, 0x6b, 0xc9, 0xb7, 0xca, + 0x73, 0x8b, 0x2b, 0x99, 0xed, 0xad, 0xcd, 0xa5, + 0xdd, 0xb3, 0x79, 0xc7, 0xb5, 0xbe, 0x49, 0xa0, + 0xae, 0xe6, 0x8d, 0xc4, 0x1d, 0x42, 0xf3, 0x2d, + 0x3b, 0x3c, 0x27, 0xf6, 0x3f, 0xfb, 0x63, 0x38, + 0x06, 0xdf, 0x18, 0xa9, 0x77, 0xce, 0xc4, 0xa2, + 0xf2, 0x11, 0x10, 0xbe, 0x9a, 0xf8, 0xb7, 0x0c, + 0x36, 0x71, 0xba, 0x60, 0xda, 0xd6, 0x84, 0x8a, + 0x31, 0xbd, 0xb5, 0xb8, 0x7f, 0xa4, 0x0d, 0x77, + 0x6e, 0x75, 0x6f, 0x69, 0xd0, 0xb5, 0x37, 0xfe, + 0xd3, 0x67, 0xab, 0xff, 0x00, 0x13, 0x30, 0x94, + 0x0f, 0xff, 0x00, 0x14, 0x61, 0x07, 0x4e, 0xcf, + 0xbd, 0xd2, 0x5a, 0x66, 0xd2, 0xbc, 0xd5, 0xce, + 0x85, 0xce, 0x27, 0x7c, 0xb8, 0x3d, 0xc5, 0x42, + 0x5a, 0xc8, 0xf8, 0x27, 0x8a, 0x66, 0x1a, 0x39, + 0x8e, 0x18, 0x4f, 0x69, 0x4c, 0xec, 0xe7, 0xb8, + 0x66, 0xbf, 0x60, 0xef, 0xaa, 0xe5, 0x0d, 0x6b, + 0x0b, 0xa7, 0xb9, 0x86, 0x06, 0x69, 0x74, 0xaf, + 0x0d, 0x68, 0xec, 0xd7, 0x4f, 0x00, 0x41, 0x3f, + 0x9f, 0xe5, 0xfe, 0xd7, 0xb4, 0x30, 0x40, 0xcf, + 0x17, 0xda, 0x58, 0x31, 0x38, 0x6e, 0x52, 0xb8, + 0x8f, 0x24, 0x2f, 0x1c, 0xe6, 0x40, 0xdc, 0xc3, + 0xab, 0x3d, 0x88, 0x18, 0xf1, 0xf3, 0x06, 0xe4, + 0x93, 0x8f, 0x17, 0x93, 0x5a, 0xd7, 0x7c, 0xae, + 0xf9, 0x67, 0x8d, 0xdb, 0x61, 0x0b, 0x2b, 0x5e, + 0x6e, 0x1c, 0x1f, 0xda, 0x20, 0x9f, 0x02, 0x8e, + 0x9b, 0x38, 0xc3, 0x98, 0xc9, 0x13, 0x32, 0xe8, + 0x1d, 0x33, 0x66, 0x73, 0x18, 0xe2, 0x08, 0x73, + 0x9c, 0x1d, 0x4a, 0xf7, 0x4a, 0x0c, 0xd9, 0xe4, + 0xd6, 0xa6, 0xfb, 0x31, 0xcb, 0xa6, 0x6f, 0x39, + 0x2c, 0x4c, 0x2f, 0xb5, 0x79, 0xd7, 0x4f, 0xcd, + 0x5c, 0xbb, 0x3d, 0x61, 0x6f, 0x77, 0x73, 0x33, + 0xae, 0xdb, 0x8e, 0x0b, 0x78, 0x8b, 0x9e, 0x0e, + 0x8d, 0x35, 0xd0, 0x4d, 0x3b, 0x01, 0x74, 0xc5, + 0x7f, 0x75, 0x1e, 0xd4, 0x47, 0x35, 0xdc, 0x62, + 0x09, 0x5e, 0x44, 0x52, 0x46, 0x2a, 0x40, 0x6b, + 0x85, 0x01, 0xaf, 0x6d, 0x74, 0x5c, 0x42, 0x72, + 0xcc, 0xb7, 0x35, 0x76, 0xa7, 0x5c, 0xce, 0x62, + 0x8b, 0xcd, 0x3f, 0xd0, 0x50, 0x47, 0xb2, 0xd2, + 0xd1, 0xfb, 0x3f, 0x3d, 0xf7, 0x36, 0x04, 0xcd, + 0x9a, 0x8d, 0x76, 0xf3, 0x09, 0x06, 0x9d, 0xf5, + 0xb9, 0x96, 0xb6, 0x19, 0x5e, 0x59, 0x05, 0xd5, + 0xdd, 0xb0, 0xbb, 0xba, 0xbb, 0xa9, 0x8e, 0x37, + 0x1f, 0x15, 0xad, 0xd6, 0x3b, 0xc9, 0x0d, 0x3e, + 0x11, 0xb8, 0xde, 0xe7, 0xfc, 0x25, 0xa9, 0xb4, + 0x40, 0x1b, 0x0c, 0xad, 0xc3, 0x4b, 0x39, 0x80, + 0xda, 0xf6, 0x40, 0x6a, 0x0d, 0x59, 0x9d, 0xa5, + 0x84, 0xb6, 0xd6, 0xd7, 0xf9, 0x70, 0x10, 0x99, + 0xdc, 0x63, 0x7d, 0xbd, 0x6b, 0x84, 0x9d, 0x5a, + 0x3b, 0x8b, 0xa2, 0xec, 0x64, 0xf9, 0x3c, 0x91, + 0xd9, 0x4b, 0x66, 0x2e, 0xe5, 0xc2, 0x1d, 0x71, + 0x23, 0xce, 0xaa, 0xfc, 0xdd, 0xe5, 0x1f, 0x67, + 0x63, 0x3c, 0x6e, 0xb3, 0xbf, 0x95, 0xa0, 0x5b, + 0x3e, 0x76, 0x06, 0xb8, 0x9d, 0x74, 0x7d, 0x69, + 0x45, 0x2d, 0x9f, 0x66, 0x91, 0xdb, 0xe6, 0x52, + 0x42, 0xfb, 0x18, 0x67, 0x20, 0x34, 0xf3, 0x8f, + 0x07, 0x11, 0xc4, 0x10, 0x46, 0x67, 0xb9, 0x7c, + 0x36, 0x57, 0x2c, 0x75, 0xb7, 0xbb, 0x5c, 0x30, + 0x4b, 0x13, 0x49, 0xad, 0x3b, 0x0b, 0x76, 0x62, + 0x3d, 0x9e, 0xc3, 0x2f, 0xcb, 0x9b, 0xa1, 0xce, + 0x02, 0xe2, 0x61, 0xfd, 0x69, 0x34, 0x36, 0xbd, + 0xc5, 0xb6, 0xef, 0xdb, 0x73, 0x3b, 0xfc, 0xba, + 0x0b, 0xab, 0x66, 0xdb, 0x35, 0xc0, 0x73, 0x6d, + 0x61, 0xaf, 0xea, 0xaa, 0x1c, 0x4f, 0x62, 0x8d, + 0x0b, 0x83, 0x36, 0xbc, 0x17, 0x39, 0xac, 0xb3, + 0xb4, 0xf8, 0x8d, 0x7e, 0x06, 0x79, 0xac, 0xd1, + 0xf2, 0x20, 0xee, 0xda, 0xd3, 0x86, 0xfa, 0x1b, + 0x76, 0x9a, 0x32, 0x18, 0x5a, 0x18, 0x37, 0xbf, + 0x2a, 0x2f, 0x59, 0x00, 0x12, 0xe5, 0x59, 0xa4, + 0x0e, 0xd2, 0xce, 0x6f, 0x9c, 0xa7, 0xf5, 0xb0, + 0x93, 0xf2, 0x2f, 0x3b, 0x5a, 0xd2, 0x6f, 0xe1, + 0x9c, 0x69, 0x64, 0xd0, 0x82, 0xd3, 0xdd, 0xfe, + 0x95, 0x9c, 0x82, 0xb1, 0x65, 0x59, 0xac, 0xfa, + 0x81, 0x8f, 0x03, 0x49, 0xd5, 0x8b, 0x09, 0x1e, + 0x12, 0x82, 0x33, 0x2b, 0xfe, 0x69, 0x67, 0xf6, + 0xd1, 0xfd, 0x65, 0xd3, 0xb4, 0xbf, 0xce, 0xae, + 0x01, 0xd5, 0x56, 0xfd, 0x50, 0xb9, 0xb2, 0xa3, + 0xfe, 0x6b, 0x69, 0xf6, 0xf1, 0x9f, 0xa4, 0x17, + 0x4e, 0xd2, 0x7f, 0x3a, 0xb8, 0xae, 0xfb, 0x3e, + 0xa8, 0xaa, 0x0e, 0xbb, 0x9f, 0xd4, 0x6c, 0x95, + 0xb3, 0x5b, 0xe2, 0x89, 0xe4, 0xc4, 0xfa, 0x6e, + 0xe9, 0x27, 0xe4, 0x51, 0xb9, 0x7d, 0xc5, 0xfd, + 0x94, 0xde, 0xd1, 0x6b, 0x1b, 0xb1, 0x16, 0xd3, + 0x4b, 0x5c, 0xe1, 0x43, 0xdc, 0x52, 0x57, 0x55, + 0x9b, 0x64, 0xad, 0x4b, 0x74, 0x98, 0xa4, 0xc0, + 0xe3, 0xbd, 0x5c, 0x5a, 0x56, 0xcd, 0x9a, 0xcd, + 0x73, 0x09, 0xef, 0xa1, 0xb4, 0x32, 0x56, 0xdd, + 0x8c, 0x35, 0x65, 0x06, 0x86, 0x81, 0xe2, 0xe9, + 0xed, 0xa0, 0xe7, 0xd9, 0xe7, 0x7b, 0x45, 0xed, + 0xd5, 0xa4, 0xc3, 0xc5, 0xbc, 0x89, 0xf8, 0x9b, + 0x4a, 0x78, 0xd5, 0xae, 0xae, 0xc5, 0x4a, 0x86, + 0x73, 0x4b, 0x1c, 0x58, 0xed, 0x6d, 0x38, 0x4f, + 0x6c, 0x56, 0xaa, 0x6f, 0x23, 0x04, 0xed, 0x3b, + 0x8e, 0xe0, 0x92, 0x73, 0xdc, 0xf1, 0xb8, 0xd4, + 0x4d, 0xe1, 0x06, 0xf2, 0xe4, 0x8d, 0x46, 0x69, + 0x08, 0xed, 0x17, 0x14, 0x1a, 0x51, 0x11, 0x01, + 0x11, 0x10, 0x11, 0x11, 0x01, 0x7a, 0x8f, 0xf6, + 0x8c, 0xf3, 0x87, 0x85, 0x79, 0x5d, 0x39, 0x5c, + 0x0e, 0xb8, 0xcc, 0x6d, 0xe1, 0xa5, 0x71, 0x48, + 0x2b, 0xe6, 0x8d, 0x25, 0x05, 0xb7, 0x3a, 0xf7, + 0x96, 0x79, 0x9f, 0x2a, 0xe0, 0x5d, 0x99, 0xb3, + 0xf1, 0x5e, 0x38, 0x0d, 0x4d, 0x00, 0x2e, 0x34, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, + 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, + 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x40, + 0x44, 0x44, 0x04, 0x44, 0x40, 0x44, 0x44, 0x04, + 0x44, 0x40, 0x44, 0x44, 0x04, 0x44, 0x41, 0xea, + 0x2f, 0xda, 0x37, 0xb6, 0xa4, 0x94, 0x6c, 0x5f, + 0xb4, 0x6f, 0x6d, 0x48, 0xd5, 0x06, 0x57, 0x0d, + 0xff, 0x00, 0xbd, 0x5a, 0x7d, 0xa7, 0xca, 0x17, + 0x6d, 0x57, 0x0d, 0xf1, 0xad, 0xd5, 0xaf, 0xda, + 0x7c, 0xa1, 0x02, 0xcb, 0xde, 0x6e, 0xbc, 0xf3, + 0xe1, 0x2b, 0xb1, 0x71, 0xd9, 0x7b, 0xcd, 0xd7, + 0x9e, 0x7c, 0x25, 0x76, 0x20, 0x15, 0x1e, 0xf1, + 0x47, 0x91, 0xd9, 0x52, 0x0b, 0x96, 0xea, 0x3c, + 0x2f, 0x0f, 0x1a, 0x9c, 0x83, 0x42, 0x22, 0x20, + 0xee, 0xca, 0x9e, 0xd7, 0x3e, 0x4b, 0x69, 0x34, + 0xc7, 0x2b, 0x69, 0x43, 0xbb, 0xa2, 0x84, 0x77, + 0x42, 0xa9, 0xe6, 0x56, 0x12, 0x65, 0xf7, 0x8f, + 0xb6, 0x78, 0x34, 0x69, 0xfd, 0x5b, 0x8f, 0xe7, + 0x34, 0xea, 0x3c, 0x1a, 0xd4, 0xfb, 0x1e, 0xf6, + 0x3d, 0xaf, 0x69, 0xa3, 0x9a, 0x6a, 0x14, 0x9c, + 0xd6, 0xf6, 0x19, 0xdd, 0xb3, 0x59, 0x38, 0xfd, + 0x73, 0x37, 0x47, 0x94, 0xd3, 0xc4, 0x82, 0x88, + 0x8a, 0xd0, 0xed, 0x8a, 0xd3, 0xe2, 0xdd, 0x9c, + 0x3d, 0x96, 0x57, 0xe5, 0x0b, 0x1f, 0x04, 0x9e, + 0x99, 0xf4, 0x3f, 0x49, 0x05, 0x61, 0x15, 0x9f, + 0xe0, 0x93, 0xd3, 0x3e, 0x87, 0xe9, 0x27, 0xc1, + 0x27, 0xa6, 0x7d, 0x0f, 0xd2, 0x41, 0x58, 0x45, + 0x67, 0xf8, 0x24, 0xf4, 0xcf, 0xa1, 0xfa, 0x49, + 0xf0, 0x49, 0xe9, 0x9f, 0x43, 0xf4, 0x90, 0x56, + 0x11, 0x59, 0xfe, 0x09, 0x3d, 0x33, 0xe8, 0x7e, + 0x92, 0x7c, 0x12, 0x7a, 0x67, 0xd0, 0xfd, 0x24, + 0x15, 0x84, 0x56, 0x7f, 0x82, 0x4f, 0x4c, 0xfa, + 0x1f, 0xa4, 0x9f, 0x04, 0x9e, 0x99, 0xf4, 0x3f, + 0x49, 0x05, 0x61, 0x0d, 0x37, 0x75, 0x6e, 0xea, + 0x1e, 0x15, 0x67, 0xf8, 0x24, 0xf4, 0xcf, 0xa1, + 0xfa, 0x49, 0xf0, 0x49, 0xe9, 0x9f, 0x43, 0xf4, + 0x90, 0x43, 0xe6, 0xb9, 0xab, 0x6f, 0xc4, 0x11, + 0xc6, 0xc3, 0x14, 0x56, 0xf1, 0xf3, 0x6d, 0x18, + 0xb1, 0x6e, 0x50, 0x9d, 0x1d, 0x85, 0xe3, 0x29, + 0xcc, 0x7a, 0xba, 0xf5, 0x97, 0x38, 0x79, 0xc0, + 0xd0, 0x58, 0xe6, 0x02, 0x05, 0x41, 0xfc, 0x82, + 0x9b, 0xf8, 0x24, 0xf4, 0xcf, 0xa1, 0xfa, 0x49, + 0xf0, 0x4b, 0xba, 0x67, 0xd0, 0xfd, 0x24, 0x11, + 0xd6, 0xb9, 0xd5, 0xbc, 0x6c, 0xb8, 0xb6, 0xb8, + 0xb7, 0x32, 0xd8, 0xdc, 0x3c, 0xc8, 0x23, 0xaf, + 0x8c, 0xc2, 0xe3, 0x8b, 0x5f, 0x6d, 0x6a, 0xbe, + 0xcd, 0x2d, 0xe4, 0xb3, 0x6e, 0x5f, 0x61, 0x09, + 0x82, 0xd5, 0xae, 0xc6, 0xf2, 0xe3, 0x89, 0xcf, + 0x2a, 0x5b, 0xe0, 0x97, 0x74, 0xcf, 0xa1, 0xfa, + 0x49, 0xf0, 0x4b, 0xba, 0x67, 0xd0, 0xfd, 0x24, + 0x11, 0xec, 0xce, 0x2c, 0xa7, 0xb3, 0x8a, 0xd3, + 0x34, 0xb7, 0x74, 0xde, 0xcf, 0xa2, 0x29, 0x58, + 0xec, 0x26, 0x9b, 0xc7, 0x81, 0x73, 0x66, 0x19, + 0xb3, 0xef, 0x27, 0x86, 0x48, 0x98, 0x20, 0x8a, + 0xd8, 0x06, 0xc1, 0x18, 0xd3, 0x4c, 0x3a, 0xaa, + 0xa6, 0x7e, 0x09, 0x3d, 0x33, 0xe8, 0x7e, 0x92, + 0x7c, 0x12, 0xee, 0x99, 0xf4, 0x3f, 0x49, 0x07, + 0x24, 0x99, 0xd6, 0x57, 0x71, 0x2b, 0x2e, 0xef, + 0x2c, 0x8b, 0xaf, 0x63, 0x02, 0xa5, 0xaf, 0xa3, + 0x1c, 0x46, 0xa2, 0x42, 0xe5, 0x8f, 0x39, 0x93, + 0xad, 0xdb, 0x9a, 0x4e, 0xdc, 0x44, 0x13, 0x46, + 0x34, 0x81, 0xa2, 0x94, 0xa6, 0x95, 0x2b, 0xf0, + 0x4b, 0xba, 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x24, + 0xf4, 0xcf, 0xa1, 0xfa, 0x48, 0x22, 0x2d, 0x73, + 0x79, 0x2d, 0x73, 0x39, 0x6f, 0xa3, 0x67, 0x8b, + 0x31, 0x3c, 0xe4, 0x44, 0x83, 0x56, 0xb8, 0xd6, + 0x95, 0x5d, 0x23, 0x39, 0xcb, 0xad, 0x44, 0xaf, + 0xcb, 0x6d, 0x0c, 0x57, 0x33, 0x02, 0xdc, 0x6f, + 0x75, 0x43, 0x43, 0xb5, 0xe1, 0x1b, 0x8b, 0xbb, + 0xe0, 0x97, 0x74, 0xcf, 0xa1, 0xfa, 0x49, 0xf0, + 0x4b, 0xba, 0x67, 0xd0, 0xfd, 0x24, 0x10, 0xd6, + 0x99, 0x98, 0xb7, 0xcb, 0xae, 0xec, 0x9c, 0xc2, + 0xf7, 0x5d, 0x50, 0xf3, 0x98, 0x80, 0xa1, 0xdd, + 0xa8, 0x58, 0xca, 0x33, 0x37, 0xe5, 0xb7, 0x46, + 0x5c, 0x1c, 0xe3, 0x1e, 0xdc, 0x12, 0xc7, 0x5d, + 0x25, 0xa7, 0x76, 0xbb, 0xea, 0x6b, 0xe0, 0x97, + 0x74, 0xcf, 0xa1, 0xfa, 0x49, 0xf0, 0x49, 0xe9, + 0x9f, 0x43, 0xf4, 0x90, 0x71, 0x41, 0x9d, 0x65, + 0xb6, 0x17, 0x02, 0x5b, 0x0b, 0x3c, 0x15, 0x3f, + 0xad, 0x2f, 0x75, 0x48, 0x6f, 0xcd, 0x60, 0xd4, + 0x02, 0xe7, 0x83, 0x36, 0x8a, 0xd3, 0x37, 0x37, + 0xf6, 0xd0, 0x96, 0xc6, 0x41, 0xc5, 0x0b, 0x9d, + 0x53, 0xe3, 0x79, 0x47, 0x12, 0x95, 0xf8, 0x25, + 0xda, 0xbd, 0xb3, 0xe8, 0x7e, 0x92, 0x7c, 0x10, + 0x7a, 0x60, 0xfd, 0xdf, 0xe9, 0x20, 0x8d, 0xeb, + 0x9b, 0x78, 0x33, 0x06, 0x5e, 0x65, 0xf6, 0xdc, + 0xc0, 0xa1, 0x13, 0x46, 0xe3, 0x5c, 0x78, 0x8d, + 0x4a, 0xdc, 0xcc, 0xeb, 0x2c, 0xb5, 0x7b, 0xee, + 0x6c, 0x2c, 0x9c, 0xcb, 0xa7, 0x83, 0x85, 0xcf, + 0x75, 0x5a, 0xd2, 0x45, 0x0d, 0x02, 0xec, 0xf8, + 0x24, 0xf4, 0xcf, 0xa1, 0xfa, 0x49, 0xf0, 0x49, + 0xe9, 0x9f, 0x43, 0xf4, 0x90, 0x43, 0xd8, 0xe6, + 0xbe, 0xcb, 0x6f, 0x7b, 0x1b, 0xd8, 0x65, 0x7d, + 0xeb, 0x68, 0x5e, 0x08, 0x6e, 0x13, 0xe3, 0x78, + 0xc6, 0xbd, 0x97, 0x2d, 0x59, 0x6e, 0x61, 0x2e, + 0x5d, 0x74, 0xdb, 0x98, 0xc0, 0x7d, 0x06, 0x17, + 0x30, 0xea, 0x73, 0x4e, 0xb5, 0x3b, 0xf0, 0x4b, + 0xba, 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x25, 0xdd, + 0x33, 0xe8, 0x7e, 0x92, 0x0e, 0x36, 0x67, 0x39, + 0x4d, 0xac, 0xae, 0xbb, 0xb3, 0xb1, 0x73, 0x2e, + 0x9d, 0x5c, 0x25, 0xef, 0xf1, 0x1a, 0x4e, 0xb3, + 0x45, 0x0c, 0xf7, 0xba, 0x49, 0x1d, 0x23, 0xcd, + 0x5e, 0xf7, 0x17, 0x38, 0xf6, 0x4a, 0xb2, 0xfc, + 0x12, 0x7a, 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x24, + 0xf4, 0xcf, 0xa1, 0xfa, 0x48, 0x2b, 0x08, 0xac, + 0xff, 0x00, 0x04, 0x9e, 0x99, 0xf4, 0x3f, 0x49, + 0x3e, 0x09, 0x3d, 0x33, 0xe8, 0x7e, 0x92, 0x0a, + 0xc2, 0x2b, 0x3f, 0xc1, 0x27, 0xa6, 0x7d, 0x0f, + 0xd2, 0x4f, 0x82, 0x4f, 0x4c, 0xfa, 0x1f, 0xa4, + 0x82, 0xb0, 0x8a, 0xcf, 0xf0, 0x49, 0xe9, 0x9f, + 0x43, 0xf4, 0x93, 0xe0, 0x93, 0xd3, 0x3e, 0x87, + 0xe9, 0x20, 0xac, 0x22, 0xb3, 0xfc, 0x12, 0x7a, + 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x24, 0xf4, 0xcf, + 0xa1, 0xfa, 0x48, 0x2b, 0x08, 0xac, 0xff, 0x00, + 0x04, 0x9e, 0x99, 0xf4, 0x3f, 0x49, 0x3e, 0x09, + 0x3d, 0x33, 0xe8, 0x7e, 0x92, 0x0a, 0xc2, 0x9c, + 0xd9, 0x4c, 0xb9, 0xd7, 0x17, 0x9e, 0xd8, 0xfd, + 0x10, 0xdb, 0x79, 0x24, 0xe8, 0xab, 0xff, 0x00, + 0xa1, 0x77, 0xc5, 0xb1, 0x71, 0x35, 0xe0, 0xcd, + 0x72, 0x5e, 0xc1, 0xad, 0xad, 0x6e, 0x12, 0x7b, + 0xb5, 0x2b, 0xbe, 0xee, 0x7b, 0x7b, 0x3b, 0x71, + 0x65, 0x68, 0x03, 0x00, 0xd0, 0xec, 0x3a, 0x9a, + 0x0f, 0x67, 0x7d, 0x07, 0x15, 0xe4, 0xdc, 0xfd, + 0xcc, 0x92, 0x0d, 0x2d, 0x26, 0x8d, 0xed, 0x0d, + 0x0b, 0x4a, 0xc7, 0xe5, 0x45, 0x94, 0x04, 0x44, + 0x40, 0x44, 0x44, 0x1d, 0xc6, 0xd5, 0xb9, 0xa6, + 0x4f, 0x2d, 0x9f, 0xfc, 0x56, 0x0f, 0xd5, 0xd7, + 0x7c, 0x69, 0x6f, 0x71, 0x52, 0xde, 0xc7, 0xc6, + 0xf2, 0xc7, 0x82, 0xd7, 0xb4, 0xd1, 0xcd, 0x3a, + 0xc1, 0xde, 0x2a, 0xd9, 0x69, 0x72, 0xfb, 0x69, + 0x83, 0xda, 0x2a, 0x0e, 0x87, 0x34, 0x6e, 0x85, + 0xd5, 0x7f, 0x92, 0x65, 0xd9, 0xb8, 0x17, 0x11, + 0xb8, 0xc7, 0x29, 0xd7, 0x23, 0x37, 0x7c, 0xf1, + 0xbe, 0x82, 0x90, 0x8a, 0xcf, 0xf0, 0x49, 0x3a, + 0x7d, 0xae, 0x9d, 0x8c, 0x1f, 0xa4, 0x13, 0xe0, + 0x93, 0xd3, 0x3e, 0x87, 0xe9, 0x20, 0xac, 0x22, + 0xb3, 0xfc, 0x12, 0x7a, 0x67, 0xd0, 0xfd, 0x24, + 0xf8, 0x24, 0xf4, 0xcf, 0xa1, 0xfa, 0x48, 0x2b, + 0x08, 0xac, 0xff, 0x00, 0x04, 0x9e, 0x99, 0xf4, + 0x3f, 0x49, 0x3e, 0x09, 0x3d, 0x33, 0xe8, 0x7e, + 0x92, 0x0a, 0xc2, 0x97, 0xc8, 0x5e, 0x27, 0x86, + 0xf7, 0x2c, 0x3a, 0xee, 0xa3, 0x2e, 0x8b, 0xb3, + 0x23, 0x35, 0x0e, 0xea, 0x90, 0xf8, 0x24, 0xf4, + 0xcf, 0xa1, 0xfa, 0x4b, 0xdc, 0x3b, 0x1f, 0x2c, + 0x12, 0xb2, 0x68, 0xaf, 0x68, 0xf8, 0xdc, 0x1c, + 0xd3, 0xcd, 0xee, 0x8d, 0x3f, 0x3d, 0x04, 0x25, + 0xa6, 0x67, 0xec, 0xd9, 0x7d, 0xd5, 0x89, 0x88, + 0xb9, 0xd7, 0x34, 0xab, 0xf1, 0x00, 0x1b, 0x4d, + 0x06, 0xa0, 0xeb, 0x5c, 0xd6, 0x37, 0x1e, 0xcd, + 0x75, 0x0c, 0xe0, 0x63, 0xe6, 0x9e, 0xd7, 0x11, + 0x5d, 0x27, 0x73, 0x42, 0xb2, 0x4b, 0xb1, 0xd2, + 0x4d, 0x2b, 0xe6, 0x7d, 0xd8, 0x0e, 0x7b, 0x8b, + 0x8d, 0x23, 0xa0, 0xa9, 0x35, 0xd0, 0x03, 0x97, + 0x8f, 0x82, 0x5d, 0xd3, 0x3e, 0x87, 0xe9, 0x20, + 0x8b, 0x39, 0xdc, 0x8c, 0xce, 0x1d, 0x9a, 0x42, + 0xcc, 0x06, 0x42, 0x31, 0x44, 0xe3, 0x5a, 0xb3, + 0x08, 0x69, 0x04, 0xf6, 0xc2, 0xe9, 0x66, 0x75, + 0x95, 0xda, 0xc8, 0xfb, 0xab, 0x2b, 0x22, 0xcb, + 0xb7, 0x83, 0x47, 0x3d, 0xd5, 0x6b, 0x4b, 0xb5, + 0xd0, 0x2e, 0xbf, 0x82, 0x4f, 0x4c, 0xfa, 0x1f, + 0xa4, 0x9f, 0x04, 0x9e, 0x99, 0xf4, 0x3f, 0x49, + 0x04, 0x56, 0x5b, 0x9c, 0x1b, 0x63, 0x71, 0x15, + 0xd4, 0x7e, 0xd1, 0x6f, 0x76, 0x4b, 0xa6, 0x61, + 0x34, 0x24, 0x9d, 0x38, 0x81, 0xec, 0xad, 0xaf, + 0xcd, 0xec, 0xad, 0xed, 0x25, 0xb7, 0xca, 0xed, + 0x9d, 0x09, 0x9c, 0x61, 0x96, 0x49, 0x1d, 0x89, + 0xc5, 0xba, 0xa8, 0x14, 0x87, 0xc1, 0x27, 0x57, + 0xb6, 0x7d, 0x0f, 0xd2, 0x4f, 0x82, 0x4f, 0x4c, + 0xfa, 0x1f, 0xa4, 0x82, 0x37, 0x2f, 0xcd, 0xed, + 0x6d, 0xec, 0x1d, 0x97, 0xde, 0x5b, 0xfb, 0x4c, + 0x05, 0xd8, 0xc7, 0x8d, 0x85, 0x68, 0xcd, 0x6f, + 0xe0, 0xbc, 0x74, 0x0c, 0xb7, 0x8c, 0xc5, 0x6f, + 0x6f, 0x1f, 0x36, 0xc8, 0xdc, 0x6a, 0x41, 0xd6, + 0xed, 0x4a, 0x67, 0xe0, 0x93, 0xd3, 0x3e, 0x87, + 0xe9, 0x27, 0xc1, 0x2e, 0xe9, 0x9f, 0x43, 0xf4, + 0x90, 0x45, 0x65, 0x19, 0xb4, 0x79, 0x7b, 0x6e, + 0x23, 0x96, 0x0f, 0x68, 0x6d, 0xc8, 0x0d, 0x73, + 0x71, 0x61, 0xd1, 0xa6, 0xbb, 0x87, 0x5d, 0x57, + 0x44, 0x79, 0xf5, 0x85, 0xa8, 0x73, 0xec, 0x32, + 0xe6, 0xc1, 0x31, 0x14, 0x12, 0x17, 0x62, 0xa0, + 0x2b, 0xb7, 0xe0, 0x93, 0xd3, 0x3e, 0x87, 0xe9, + 0x27, 0xc1, 0x27, 0xa6, 0x7d, 0x0f, 0xd2, 0x41, + 0x5f, 0x65, 0xf5, 0xc3, 0x2f, 0x5b, 0x7d, 0x8a, + 0xb3, 0x89, 0x39, 0xc2, 0xe3, 0xba, 0x48, 0xa1, + 0xaa, 0x95, 0x39, 0xd6, 0x52, 0x6e, 0x3a, 0xc3, + 0xd8, 0x4f, 0xb6, 0x8d, 0x3e, 0x5f, 0x89, 0x8f, + 0x71, 0xd4, 0x5d, 0x7f, 0x04, 0x9e, 0x99, 0xf4, + 0x3f, 0x49, 0x3e, 0x09, 0x3d, 0x33, 0xe8, 0x7e, + 0x92, 0x0a, 0xf4, 0xf7, 0x32, 0xcf, 0x74, 0xeb, + 0xa9, 0x0f, 0xeb, 0x5e, 0xfc, 0x75, 0xec, 0x8d, + 0x43, 0x75, 0x48, 0x67, 0x39, 0xe9, 0xcc, 0xe2, + 0x86, 0x31, 0x11, 0x8b, 0x9a, 0x38, 0x9c, 0x4b, + 0xaa, 0x1c, 0x48, 0xa6, 0xac, 0x21, 0x48, 0xfc, + 0x12, 0x7a, 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x24, + 0xf4, 0xcf, 0xa1, 0xfa, 0x48, 0x21, 0xe3, 0xcc, + 0x83, 0x32, 0x79, 0x32, 0xde, 0x6c, 0x93, 0x23, + 0xc3, 0xc4, 0x95, 0xa3, 0x68, 0x29, 0xa2, 0x9d, + 0xc5, 0xbe, 0xdb, 0x38, 0xb5, 0x7d, 0x83, 0x6c, + 0x73, 0x18, 0x0c, 0xf1, 0xc4, 0x6b, 0x13, 0xd8, + 0xec, 0x2e, 0x6f, 0x61, 0x48, 0xfc, 0x12, 0x7a, + 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x24, 0xf4, 0xcf, + 0xa1, 0xfa, 0x48, 0x21, 0xf3, 0x4c, 0xd0, 0x5e, + 0x36, 0x18, 0x20, 0x8f, 0xd9, 0xed, 0x6d, 0xc5, + 0x22, 0x8e, 0xb5, 0x35, 0x3f, 0x9c, 0x57, 0x63, + 0xf3, 0x9c, 0xb6, 0xf0, 0x45, 0x26, 0x65, 0x68, + 0x65, 0xb9, 0x88, 0x00, 0x5e, 0xc7, 0x50, 0x3e, + 0x9a, 0xb1, 0x2e, 0xcf, 0x82, 0x4f, 0x4c, 0xfa, + 0x1f, 0xa4, 0x9f, 0x04, 0x9e, 0x99, 0xf4, 0x3f, + 0x49, 0x04, 0x78, 0xcf, 0xcb, 0xaf, 0xa7, 0xbd, + 0x99, 0x94, 0x93, 0x99, 0x74, 0x56, 0xd1, 0xb7, + 0x54, 0x75, 0x1a, 0xc9, 0x51, 0x1d, 0xff, 0x00, + 0xca, 0x8a, 0xcf, 0xf0, 0x4b, 0xba, 0x67, 0xd0, + 0xfd, 0x24, 0xf8, 0x24, 0xf4, 0xcf, 0xa1, 0xfa, + 0x48, 0x23, 0xed, 0xf3, 0x9b, 0x69, 0x2d, 0x19, + 0x69, 0x9a, 0x5b, 0x9b, 0x96, 0x43, 0xfb, 0x29, + 0x1a, 0x70, 0xb8, 0x76, 0x17, 0x8c, 0xc3, 0x38, + 0x8e, 0x6b, 0x46, 0xd8, 0x59, 0x41, 0xec, 0xd6, + 0x80, 0xd5, 0xcd, 0xad, 0x5c, 0xe2, 0x37, 0xca, + 0x93, 0xf8, 0x24, 0xf4, 0xcf, 0xa1, 0xfa, 0x49, + 0xf0, 0x49, 0xe9, 0x9f, 0x43, 0xf4, 0x90, 0x57, + 0x6d, 0x27, 0x16, 0xd7, 0x50, 0xdc, 0x11, 0x88, + 0x42, 0xf6, 0xbf, 0x0d, 0x68, 0x4e, 0x12, 0x0e, + 0xea, 0xdb, 0x99, 0x5e, 0x8b, 0xfb, 0xd9, 0x2e, + 0xc3, 0x0c, 0x62, 0x4a, 0x78, 0xa4, 0x83, 0x4a, + 0x00, 0x37, 0x14, 0xef, 0xc1, 0x27, 0xa6, 0x7d, + 0x0f, 0xd2, 0x4f, 0x82, 0x4f, 0x4c, 0xfa, 0x1f, + 0xa4, 0x82, 0x27, 0x2b, 0xcd, 0xc5, 0x94, 0x72, + 0x5a, 0xdc, 0x44, 0x2e, 0x2d, 0x26, 0xf2, 0xe3, + 0xad, 0x08, 0xec, 0x85, 0xd3, 0x0e, 0x7b, 0x97, + 0xd8, 0xc8, 0xd3, 0x97, 0xda, 0x18, 0x98, 0x5c, + 0x0c, 0xa5, 0xce, 0xab, 0xdc, 0xd1, 0xf9, 0xa3, + 0x78, 0x55, 0x76, 0xfc, 0x12, 0x7a, 0x67, 0xd0, + 0xfd, 0x24, 0xf8, 0x24, 0xf4, 0xcf, 0xa1, 0xfa, + 0x48, 0x38, 0x72, 0x79, 0x84, 0x72, 0xdf, 0xe6, + 0xce, 0x6e, 0x16, 0xc2, 0xd7, 0x96, 0x34, 0xfa, + 0xc9, 0x49, 0xc2, 0xc5, 0x0c, 0x49, 0x3a, 0x49, + 0xa9, 0xdf, 0xed, 0xe9, 0x56, 0xc3, 0xb2, 0xb3, + 0x9b, 0x56, 0xda, 0x0b, 0xc0, 0x21, 0x0f, 0x32, + 0x11, 0xcd, 0xe9, 0x24, 0x8a, 0x69, 0xf1, 0xf7, + 0x16, 0xaf, 0x82, 0x4f, 0x4c, 0xfa, 0x1f, 0xa4, + 0x82, 0xb0, 0x8a, 0xcf, 0xf0, 0x49, 0xe9, 0x9f, + 0x43, 0xf4, 0x93, 0xe0, 0x93, 0xd3, 0x3e, 0x87, + 0xe9, 0x20, 0xac, 0x22, 0xb3, 0xfc, 0x12, 0x7a, + 0x67, 0xd0, 0xfd, 0x24, 0xf8, 0x24, 0xf4, 0xcf, + 0xa1, 0xfa, 0x48, 0x2b, 0x08, 0xac, 0xff, 0x00, + 0x04, 0x9e, 0x99, 0xf4, 0x3f, 0x49, 0x3e, 0x09, + 0x3d, 0x33, 0xe8, 0x7e, 0x92, 0x0a, 0xc2, 0xb2, + 0x6c, 0x95, 0x86, 0x13, 0x26, 0x67, 0x30, 0xa4, + 0x6c, 0x05, 0xb1, 0x13, 0xbb, 0xa3, 0xc7, 0x77, + 0xc8, 0xba, 0x2d, 0xb6, 0x36, 0xda, 0x37, 0x87, + 0x5c, 0xcc, 0xe9, 0x98, 0xdf, 0xf8, 0x60, 0x61, + 0x07, 0xba, 0xbb, 0x33, 0x0b, 0xa8, 0x9b, 0x18, + 0xb4, 0xb6, 0x01, 0xb1, 0xb6, 0x81, 0xd8, 0x75, + 0x50, 0x7e, 0x68, 0x41, 0xc1, 0x34, 0xbc, 0xec, + 0xae, 0x90, 0xeb, 0x79, 0xa8, 0x1b, 0xcb, 0xca, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0xf7, 0x03, 0x71, 0x4a, 0xd1, 0xd9, 0xaa, 0xee, + 0xd7, 0xa5, 0x73, 0x5a, 0x32, 0x95, 0x79, 0xdd, + 0xd0, 0x17, 0x4a, 0x02, 0xe3, 0xbd, 0xf7, 0xab, + 0x5f, 0xb4, 0xf9, 0x42, 0xec, 0x5c, 0x77, 0xbe, + 0xf5, 0x6b, 0xf6, 0x9f, 0x28, 0x40, 0xb2, 0xf7, + 0x9b, 0xaf, 0x3c, 0xf8, 0x4a, 0xec, 0x5c, 0x76, + 0x5e, 0xf3, 0x75, 0xe7, 0x9f, 0x09, 0x5d, 0x88, + 0x0b, 0xcb, 0xda, 0x1e, 0xdc, 0x27, 0x52, 0xf4, + 0x88, 0x38, 0x24, 0x8d, 0xd1, 0xba, 0x87, 0xb8, + 0x57, 0x95, 0xde, 0xf6, 0x35, 0xed, 0xc2, 0xe1, + 0x50, 0xb9, 0xa4, 0xb5, 0x7b, 0x7c, 0x83, 0x88, + 0x6f, 0x20, 0xd2, 0x8d, 0x2e, 0x6b, 0xb1, 0x34, + 0x90, 0x77, 0xc1, 0xa1, 0x59, 0x73, 0x1c, 0x3f, + 0x34, 0xac, 0x20, 0xdf, 0xed, 0xf7, 0x80, 0x7e, + 0xd9, 0xdf, 0x97, 0x71, 0x3a, 0xc2, 0xf7, 0xd7, + 0x3b, 0xbd, 0xc4, 0xb4, 0x22, 0x0d, 0xfd, 0x61, + 0x7b, 0xeb, 0x9d, 0xde, 0xe2, 0x4e, 0xb0, 0xbd, + 0xf5, 0xce, 0xef, 0x71, 0x2d, 0x08, 0x83, 0x7f, + 0x58, 0x5e, 0xfa, 0xe7, 0x77, 0xb8, 0x93, 0xac, + 0x2f, 0x7d, 0x73, 0xbb, 0xdc, 0x4b, 0x42, 0x20, + 0xdf, 0xd6, 0x17, 0xbe, 0xb9, 0xdd, 0xee, 0x24, + 0xeb, 0x0b, 0xdf, 0x5c, 0xee, 0xf7, 0x12, 0xd0, + 0x88, 0x37, 0xf5, 0x85, 0xef, 0xae, 0x77, 0x7b, + 0x89, 0x3a, 0xc2, 0xf7, 0xd7, 0x3b, 0xbd, 0xc4, + 0xb4, 0x22, 0x0d, 0xfd, 0x61, 0x7b, 0xeb, 0x9d, + 0xde, 0xe2, 0x4e, 0xb0, 0xbd, 0xf5, 0xce, 0xef, + 0x71, 0x2d, 0x08, 0x83, 0x7f, 0x58, 0x5e, 0xfa, + 0xe7, 0x77, 0xb8, 0x93, 0xac, 0x2f, 0x7d, 0x73, + 0xbb, 0xdc, 0x4b, 0x42, 0x20, 0xdf, 0xd6, 0x17, + 0xbe, 0xb9, 0xdd, 0xee, 0x24, 0xeb, 0x0b, 0xdf, + 0x5c, 0xee, 0xf7, 0x12, 0xd0, 0x88, 0x37, 0xf5, + 0x85, 0xef, 0xae, 0x77, 0x7b, 0x89, 0x3a, 0xc2, + 0xf7, 0xd7, 0x3b, 0xbd, 0xc4, 0xb4, 0x22, 0x0d, + 0xfd, 0x61, 0x7b, 0xeb, 0x9d, 0xde, 0xe2, 0x4e, + 0xb0, 0xbd, 0xf5, 0xce, 0xef, 0x71, 0x2d, 0x08, + 0x83, 0x7f, 0x58, 0x5e, 0xfa, 0xe7, 0x77, 0xb8, + 0x93, 0xac, 0x2f, 0x7d, 0x73, 0xbb, 0xdc, 0x4b, + 0x42, 0x20, 0xdf, 0xd6, 0x17, 0xbe, 0xb9, 0xdd, + 0xee, 0x24, 0xeb, 0x0b, 0xdf, 0x5c, 0xee, 0xf7, + 0x12, 0xd0, 0x88, 0x37, 0xf5, 0x85, 0xef, 0xae, + 0x77, 0x7b, 0x89, 0x3a, 0xc2, 0xf7, 0xd7, 0x3b, + 0xbd, 0xc4, 0xb4, 0x22, 0x0d, 0xfd, 0x61, 0x7b, + 0xeb, 0x9d, 0xde, 0xe2, 0x4e, 0xb0, 0xbd, 0xf5, + 0xce, 0xef, 0x71, 0x2d, 0x08, 0x83, 0x7f, 0x58, + 0x5e, 0xfa, 0xe7, 0x77, 0xb8, 0x93, 0xac, 0x2f, + 0x7d, 0x73, 0xbb, 0xdc, 0x4b, 0x42, 0x20, 0xdf, + 0xd6, 0x17, 0xbe, 0xb9, 0xdd, 0xee, 0x24, 0xeb, + 0x0b, 0xdf, 0x5c, 0xee, 0xf7, 0x12, 0xd0, 0x88, + 0x37, 0xf5, 0x85, 0xef, 0xae, 0x77, 0x7b, 0x89, + 0x3a, 0xc2, 0xf7, 0xd7, 0x3b, 0xbd, 0xc4, 0xb4, + 0x22, 0x0d, 0xfd, 0x61, 0x7b, 0xeb, 0x9d, 0xde, + 0xe2, 0x4e, 0xb0, 0xbd, 0xf5, 0xce, 0xef, 0x71, + 0x2d, 0x08, 0x83, 0x7f, 0x58, 0x5e, 0xfa, 0xe7, + 0x77, 0xb8, 0x93, 0xac, 0x2f, 0x7d, 0x73, 0xbb, + 0xdc, 0x4b, 0x42, 0x20, 0xdf, 0xd6, 0x17, 0xbe, + 0xb9, 0xdd, 0xee, 0x24, 0xeb, 0x0b, 0xdf, 0x5c, + 0xee, 0xf7, 0x12, 0xd0, 0x88, 0x37, 0xf5, 0x85, + 0xef, 0xae, 0x77, 0x7b, 0x89, 0x3a, 0xc2, 0xf7, + 0xd7, 0x3b, 0xbd, 0xc4, 0xb4, 0x22, 0x0d, 0xcf, + 0xbc, 0xba, 0x78, 0xc2, 0xe9, 0x5c, 0x46, 0xe8, + 0xaf, 0xf4, 0x2d, 0x0b, 0x28, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x0b, 0xd3, 0x25, + 0x92, 0x33, 0x8a, 0x37, 0x16, 0x9e, 0xc1, 0x5e, + 0x51, 0x06, 0xfe, 0xb0, 0xbd, 0xf5, 0xce, 0xef, + 0x71, 0x27, 0x58, 0x5e, 0xfa, 0xe7, 0x77, 0xb8, + 0x96, 0x84, 0x41, 0xbf, 0xac, 0x2f, 0x7d, 0x73, + 0xbb, 0xdc, 0x49, 0xd6, 0x17, 0xbe, 0xb9, 0xdd, + 0xee, 0x25, 0xa1, 0x10, 0x6f, 0xeb, 0x0b, 0xdf, + 0x5c, 0xee, 0xf7, 0x12, 0x75, 0x85, 0xef, 0xae, + 0x77, 0x7b, 0x89, 0x68, 0x44, 0x1b, 0xfa, 0xc2, + 0xf7, 0xd7, 0x3b, 0xbd, 0xc4, 0x9d, 0x61, 0x7b, + 0xeb, 0x9d, 0xde, 0xe2, 0x5a, 0x11, 0x06, 0xfe, + 0xb0, 0xbd, 0xf5, 0xce, 0xef, 0x71, 0x27, 0x58, + 0x5e, 0xfa, 0xe7, 0x77, 0xb8, 0x96, 0x84, 0x41, + 0xbf, 0xac, 0x2f, 0x7d, 0x73, 0xbb, 0xdc, 0x49, + 0xd6, 0x17, 0xbe, 0xb9, 0xdd, 0xee, 0x25, 0xa1, + 0x10, 0x6f, 0xeb, 0x0b, 0xdf, 0x5c, 0xee, 0xf7, + 0x12, 0x75, 0x85, 0xef, 0xae, 0x77, 0x7b, 0x89, + 0x68, 0x44, 0x1b, 0xfa, 0xc2, 0xf7, 0xd7, 0x3b, + 0xbd, 0xc4, 0x9d, 0x61, 0x7b, 0xeb, 0x9d, 0xde, + 0xe2, 0x5a, 0x11, 0x06, 0xfe, 0xb0, 0xbd, 0xf5, + 0xce, 0xef, 0x71, 0x27, 0x58, 0x5e, 0xfa, 0xe7, + 0x77, 0xb8, 0x96, 0x84, 0x41, 0xbf, 0xac, 0x2f, + 0x7d, 0x73, 0xbb, 0xdc, 0x49, 0xd6, 0x17, 0xbe, + 0xb9, 0xdd, 0xee, 0x25, 0xa1, 0x10, 0x6f, 0xeb, + 0x0b, 0xdf, 0x5c, 0xee, 0xf7, 0x12, 0x75, 0x85, + 0xef, 0xae, 0x77, 0x7b, 0x89, 0x68, 0x44, 0x1b, + 0xfa, 0xc2, 0xf7, 0xd7, 0x3b, 0xbd, 0xc4, 0x9d, + 0x61, 0x7b, 0xeb, 0x9d, 0xde, 0xe2, 0x5a, 0x11, + 0x06, 0xfe, 0xb0, 0xbd, 0xf5, 0xce, 0xef, 0x71, + 0x27, 0x58, 0x5e, 0xfa, 0xe7, 0x77, 0xb8, 0x96, + 0x84, 0x41, 0xbf, 0xac, 0x2f, 0x7d, 0x73, 0xbb, + 0xdc, 0x49, 0xd6, 0x17, 0xbe, 0xb9, 0xdd, 0xee, + 0x25, 0xa1, 0x10, 0x6f, 0xeb, 0x0b, 0xdf, 0x5c, + 0xee, 0xf7, 0x12, 0x75, 0x85, 0xef, 0xae, 0x77, + 0x7b, 0x89, 0x68, 0x44, 0x1b, 0xfa, 0xc2, 0xf7, + 0xd7, 0x3b, 0xbd, 0xc4, 0x9d, 0x61, 0x7b, 0xeb, + 0x9d, 0xde, 0xe2, 0x5a, 0x11, 0x06, 0xfe, 0xb0, + 0xbd, 0xf5, 0xce, 0xef, 0x71, 0x27, 0x58, 0x5e, + 0xfa, 0xe7, 0x77, 0xb8, 0x96, 0x84, 0x41, 0xbf, + 0xac, 0x2f, 0x7d, 0x73, 0xbb, 0xdc, 0x49, 0xd6, + 0x17, 0xbe, 0xb9, 0xdd, 0xee, 0x25, 0xa1, 0x10, + 0x6f, 0xeb, 0x0b, 0xdf, 0x5c, 0xee, 0xf7, 0x12, + 0x75, 0x85, 0xef, 0xae, 0x77, 0x7b, 0x89, 0x68, + 0x44, 0x1b, 0xfa, 0xc2, 0xf7, 0xd7, 0x3b, 0xbd, + 0xc4, 0x9d, 0x61, 0x7b, 0xeb, 0x9d, 0xde, 0xe2, + 0x5a, 0x11, 0x06, 0xfe, 0xb0, 0xbd, 0xf5, 0xce, + 0xef, 0x71, 0x27, 0x58, 0x5e, 0xfa, 0xe7, 0x77, + 0xb8, 0x96, 0x84, 0x41, 0xb6, 0x4b, 0xbb, 0xa9, + 0x05, 0x1f, 0x2b, 0x9c, 0x37, 0xab, 0x4f, 0x02, + 0xd4, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, + 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, + 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, + 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, + 0x88, 0x88, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, + 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x80, 0x89, + 0x43, 0xbc, 0xb2, 0x23, 0x79, 0xd4, 0xd2, 0x83, + 0x0b, 0x64, 0x51, 0x19, 0x0e, 0xf3, 0x46, 0xb3, + 0xc4, 0xbd, 0xc7, 0x6a, 0xed, 0x06, 0x43, 0xa3, + 0x78, 0x2e, 0x90, 0x00, 0x14, 0x02, 0x81, 0x00, + 0x00, 0x00, 0x03, 0x50, 0x59, 0x44, 0x40, 0x5c, + 0x77, 0xbe, 0xf5, 0x6b, 0xf6, 0x9f, 0x28, 0x5d, + 0x8b, 0x8e, 0xf7, 0xde, 0xad, 0x7e, 0xd3, 0xe5, + 0x08, 0x16, 0x5e, 0xf3, 0x75, 0xe7, 0x9f, 0x09, + 0x5d, 0x8b, 0x8e, 0xc6, 0xa6, 0xe6, 0xef, 0x47, + 0xe7, 0x91, 0xdf, 0x2b, 0xb1, 0x01, 0x11, 0x10, + 0x12, 0xa8, 0x88, 0x07, 0x4e, 0xb4, 0xa2, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, + 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, + 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0x22, 0x20, + 0x22, 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, + 0x22, 0x20, 0x22, 0x22, 0x05, 0x13, 0x4e, 0xfa, + 0x22, 0x02, 0x22, 0x20, 0x22, 0x22, 0x02, 0xe3, + 0xbd, 0xf7, 0xab, 0x5f, 0xb4, 0xf9, 0x42, 0xec, + 0x5c, 0x77, 0xbe, 0xf5, 0x6b, 0xe7, 0x83, 0xc2, + 0x42, 0x0e, 0x59, 0x1a, 0x3d, 0xa6, 0x6e, 0x6a, + 0x49, 0x6b, 0x8c, 0xe2, 0xc0, 0xc1, 0x4a, 0xd4, + 0xff, 0x00, 0x5d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x30, 0xcf, 0xeb, 0x2e, 0x39, + 0x03, 0xd3, 0x44, 0x40, 0xc3, 0x3f, 0xac, 0xb8, + 0xe4, 0x0f, 0x4d, 0x23, 0x6f, 0xfd, 0xc4, 0x1c, + 0xe3, 0xe5, 0x27, 0x10, 0xc2, 0x1e, 0xc0, 0x06, + 0xbd, 0xdf, 0x1d, 0x11, 0x07, 0xff, 0xd9, +}; + +static const uint8_t data_images_tiva_globe_small_gif[] = +{ + /* /images/tiva_globe-small.gif */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x74, 0x69, 0x76, 0x61, 0x5f, 0x67, 0x6c, 0x6f, + 0x62, 0x65, 0x2d, 0x73, 0x6d, 0x61, 0x6c, 0x6c, + 0x2e, 0x67, 0x69, 0x66, 0x00, + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xa4, 0x01, + 0xf3, 0x01, 0xb3, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x66, 0x66, + 0x66, 0xcc, 0xcc, 0xcc, 0xff, 0x66, 0x66, 0xff, + 0x99, 0x99, 0xff, 0x33, 0x33, 0xff, 0xcc, 0xcc, + 0x33, 0x33, 0x33, 0x99, 0x33, 0x33, 0x4d, 0x4c, + 0x4c, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0x0b, + 0x58, 0x4d, 0x50, 0x20, 0x44, 0x61, 0x74, 0x61, + 0x58, 0x4d, 0x50, 0x3c, 0x3f, 0x78, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, + 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, + 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, + 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, + 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, + 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, + 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, + 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, + 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, + 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, + 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x30, + 0x2d, 0x63, 0x30, 0x36, 0x30, 0x20, 0x36, 0x31, + 0x2e, 0x31, 0x33, 0x34, 0x37, 0x37, 0x37, 0x2c, + 0x20, 0x32, 0x30, 0x31, 0x30, 0x2f, 0x30, 0x32, + 0x2f, 0x31, 0x32, 0x2d, 0x31, 0x37, 0x3a, 0x33, + 0x32, 0x3a, 0x30, 0x30, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, + 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, + 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, + 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, + 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, + 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, + 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, + 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, + 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, + 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, + 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, + 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, + 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, + 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, + 0x3a, 0x42, 0x43, 0x32, 0x36, 0x41, 0x38, 0x31, + 0x39, 0x32, 0x36, 0x44, 0x45, 0x31, 0x31, 0x45, + 0x33, 0x39, 0x36, 0x37, 0x32, 0x38, 0x44, 0x36, + 0x41, 0x36, 0x30, 0x35, 0x45, 0x30, 0x37, 0x41, + 0x38, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, + 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, + 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x42, 0x43, 0x32, + 0x36, 0x41, 0x38, 0x31, 0x38, 0x32, 0x36, 0x44, + 0x45, 0x31, 0x31, 0x45, 0x33, 0x39, 0x36, 0x37, + 0x32, 0x38, 0x44, 0x36, 0x41, 0x36, 0x30, 0x35, + 0x45, 0x30, 0x37, 0x41, 0x38, 0x22, 0x20, 0x78, + 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, + 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, + 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, + 0x43, 0x53, 0x35, 0x20, 0x57, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x73, 0x22, 0x3e, 0x20, 0x3c, 0x78, + 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, + 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, + 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, + 0x44, 0x3d, 0x22, 0x75, 0x75, 0x69, 0x64, 0x3a, + 0x66, 0x61, 0x66, 0x35, 0x62, 0x64, 0x64, 0x35, + 0x2d, 0x62, 0x61, 0x33, 0x64, 0x2d, 0x31, 0x31, + 0x64, 0x61, 0x2d, 0x61, 0x64, 0x33, 0x31, 0x2d, + 0x64, 0x33, 0x33, 0x64, 0x37, 0x35, 0x31, 0x38, + 0x32, 0x66, 0x31, 0x62, 0x22, 0x20, 0x73, 0x74, + 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, + 0x75, 0x75, 0x69, 0x64, 0x3a, 0x66, 0x61, 0x66, + 0x35, 0x62, 0x64, 0x64, 0x35, 0x2d, 0x62, 0x61, + 0x33, 0x64, 0x2d, 0x31, 0x31, 0x64, 0x61, 0x2d, + 0x61, 0x64, 0x33, 0x31, 0x2d, 0x64, 0x33, 0x33, + 0x64, 0x37, 0x35, 0x31, 0x38, 0x32, 0x66, 0x31, + 0x62, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x64, 0x63, + 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x53, + 0x65, 0x71, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x6c, 0x69, 0x3e, 0x48, 0x61, 0x75, 0x67, + 0x6c, 0x69, 0x65, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x6c, 0x69, 0x3e, 0x20, 0x3c, 0x72, 0x64, + 0x66, 0x3a, 0x6c, 0x69, 0x3e, 0x4a, 0x6f, 0x65, + 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, + 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x53, 0x65, 0x71, 0x3e, 0x20, 0x3c, 0x2f, 0x64, + 0x63, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, + 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, + 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, + 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, + 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, + 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, + 0x3e, 0x01, 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, + 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, + 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, + 0xe9, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, + 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdc, 0xdb, 0xda, + 0xd9, 0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, + 0xd1, 0xd0, 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, + 0xc9, 0xc8, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, + 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, + 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, + 0xb1, 0xb0, 0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, + 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, + 0xa1, 0xa0, 0x9f, 0x9e, 0x9d, 0x9c, 0x9b, 0x9a, + 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, + 0x91, 0x90, 0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, + 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, + 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, + 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, + 0x71, 0x70, 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, + 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, + 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, + 0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, + 0x51, 0x50, 0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, + 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, + 0x41, 0x40, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, + 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, + 0x31, 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, + 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, + 0x21, 0x20, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, + 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, + 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, + 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, + 0x01, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, + 0xa4, 0x01, 0xf3, 0x01, 0x00, 0x04, 0xff, 0x10, + 0xc8, 0x49, 0xab, 0xbd, 0x38, 0xeb, 0xcd, 0xbb, + 0xff, 0x60, 0x28, 0x8e, 0xa4, 0x46, 0x0c, 0xc9, + 0xc2, 0x18, 0x04, 0x6b, 0x30, 0x03, 0x51, 0xce, + 0x74, 0x6d, 0xdf, 0x78, 0xae, 0xef, 0x7c, 0xef, + 0xff, 0x20, 0x82, 0x50, 0x06, 0x10, 0x52, 0x88, + 0x43, 0xa0, 0x72, 0xc9, 0x6c, 0x3a, 0x9f, 0xd0, + 0xa8, 0x74, 0x68, 0x0c, 0x09, 0x19, 0xd8, 0xaa, + 0x74, 0xcb, 0xed, 0x7a, 0xbf, 0xe0, 0xe7, 0x75, + 0x10, 0xb3, 0xb4, 0x0c, 0xaf, 0x44, 0x82, 0x48, + 0x13, 0x92, 0x19, 0xec, 0xb0, 0x7c, 0x4e, 0xaf, + 0xdb, 0xa1, 0xc2, 0x85, 0x7a, 0x51, 0xae, 0x0c, + 0x02, 0x0a, 0x03, 0x05, 0x05, 0x70, 0x3b, 0x04, + 0x30, 0x7d, 0x77, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, + 0x47, 0x5a, 0x15, 0x6e, 0x85, 0x4c, 0x87, 0x7c, + 0x71, 0x17, 0x98, 0x8f, 0x9b, 0x9c, 0x9d, 0x9e, + 0x1f, 0x49, 0x18, 0x27, 0x89, 0x78, 0x03, 0x2a, + 0x9a, 0x92, 0xa8, 0x9f, 0xab, 0xac, 0xad, 0x74, + 0x87, 0x94, 0x92, 0x30, 0x0c, 0x61, 0x0c, 0x97, + 0x26, 0xa1, 0xae, 0xba, 0xbb, 0xbc, 0x4c, 0x70, + 0x91, 0x13, 0xa3, 0xaa, 0x5d, 0x04, 0x0b, 0x0b, + 0x98, 0x87, 0x6c, 0x59, 0xbd, 0xcc, 0xcd, 0xce, + 0x23, 0x87, 0xa4, 0x47, 0x64, 0xc3, 0x60, 0x27, + 0xc7, 0x13, 0x7f, 0x01, 0x01, 0x31, 0x6e, 0xd8, + 0x26, 0xcf, 0xe1, 0xe2, 0xac, 0xd1, 0xaa, 0xb3, + 0x8a, 0x57, 0x88, 0x09, 0x31, 0xeb, 0xa6, 0xa6, + 0xc6, 0x64, 0xee, 0x04, 0x29, 0x6f, 0xdd, 0xc5, + 0x01, 0xd5, 0xe3, 0xfa, 0xfb, 0x5e, 0xe5, 0xa2, + 0x2a, 0x5c, 0x60, 0xb1, 0x71, 0xf3, 0x8e, 0x0f, + 0xb5, 0x24, 0xc5, 0xbe, 0x65, 0x38, 0x41, 0x6b, + 0xc8, 0x00, 0x18, 0x0b, 0x14, 0x10, 0x42, 0xc0, + 0xaf, 0xa2, 0xc5, 0x29, 0x30, 0x54, 0x15, 0xa3, + 0xd5, 0x65, 0xc1, 0xb6, 0x00, 0x29, 0xff, 0xe0, + 0xfd, 0xe2, 0x90, 0x30, 0x5f, 0xc6, 0x4c, 0x06, + 0x14, 0xac, 0x8b, 0x75, 0xb1, 0xa5, 0x4b, 0x1c, + 0xd4, 0x44, 0x91, 0xe9, 0x67, 0x2b, 0x80, 0x31, + 0x85, 0x21, 0x18, 0xac, 0xe3, 0x70, 0xd2, 0xcc, + 0x2f, 0x4b, 0x2c, 0x5f, 0x0a, 0x1d, 0xba, 0x81, + 0x61, 0x86, 0x98, 0x53, 0x0a, 0x06, 0x9d, 0x81, + 0x22, 0x9f, 0xd1, 0x0d, 0xb3, 0xce, 0x11, 0x9d, + 0x4a, 0x75, 0x54, 0x06, 0x5b, 0xf9, 0x66, 0x00, + 0x0b, 0x06, 0xf1, 0x54, 0x8f, 0x79, 0x0b, 0x48, + 0xe2, 0x2c, 0x9a, 0x8b, 0xaa, 0xd9, 0x8a, 0x27, + 0x34, 0x02, 0x04, 0x32, 0x8a, 0x0f, 0x1f, 0x5b, + 0xb7, 0x96, 0xe8, 0xe4, 0xa8, 0x01, 0xe9, 0x55, + 0xba, 0x5b, 0xcf, 0xea, 0x6d, 0xf6, 0xf0, 0xa8, + 0xb4, 0xaf, 0x80, 0x14, 0x1c, 0x38, 0xa0, 0x00, + 0x24, 0x1e, 0x63, 0x62, 0xab, 0x9d, 0xd8, 0xb9, + 0xb7, 0xf1, 0xb3, 0xb4, 0xff, 0xb2, 0xc2, 0x04, + 0x34, 0x78, 0xb0, 0x1a, 0x29, 0x4d, 0x39, 0xcc, + 0x84, 0x4a, 0xd7, 0xb1, 0x67, 0x57, 0x7d, 0x31, + 0xd8, 0x2d, 0x21, 0x39, 0xa1, 0xa9, 0x04, 0x2a, + 0x13, 0xe0, 0xdb, 0x32, 0x6f, 0x40, 0x62, 0xb2, + 0x9f, 0x63, 0x7f, 0x82, 0x9c, 0x69, 0x2c, 0x34, + 0x92, 0xef, 0x06, 0x1a, 0x49, 0xc6, 0x45, 0x8f, + 0xd3, 0xcd, 0xb2, 0x83, 0xeb, 0xa2, 0x6d, 0xc1, + 0x56, 0x8d, 0xac, 0x09, 0x97, 0x56, 0xc0, 0xc2, + 0x45, 0x67, 0x56, 0xac, 0xc2, 0xa3, 0x7f, 0x82, + 0x91, 0x61, 0x2d, 0xe9, 0xa2, 0x70, 0x25, 0x4b, + 0xe0, 0xad, 0x04, 0xcb, 0x43, 0x65, 0x36, 0xc5, + 0x76, 0x96, 0x4e, 0x5e, 0x51, 0x68, 0x33, 0xb6, + 0xad, 0x98, 0x40, 0xf1, 0xb7, 0x83, 0xf2, 0x1c, + 0x04, 0x3e, 0x6e, 0xeb, 0x8c, 0xb8, 0xa8, 0x75, + 0x49, 0x1d, 0xf2, 0x96, 0xdf, 0x7f, 0xbc, 0x3d, + 0x00, 0xe3, 0x5a, 0x99, 0x60, 0xcc, 0xff, 0x78, + 0x22, 0xe8, 0x07, 0x4a, 0x59, 0xd3, 0x18, 0x64, + 0x41, 0x66, 0x1b, 0x98, 0x22, 0x0a, 0x7f, 0x10, + 0x3a, 0x41, 0x9c, 0x1f, 0xae, 0x5d, 0xb7, 0x10, + 0x0a, 0x04, 0x92, 0x70, 0x88, 0x86, 0x1e, 0x81, + 0x04, 0x92, 0x7f, 0x57, 0xad, 0x06, 0x55, 0x7a, + 0xda, 0x45, 0x68, 0x22, 0x09, 0x0c, 0x84, 0x87, + 0x5e, 0x89, 0x56, 0x0c, 0x08, 0x1b, 0x08, 0xef, + 0xd5, 0x05, 0x52, 0x65, 0x2a, 0x71, 0x03, 0x8e, + 0x24, 0x09, 0x64, 0x28, 0x09, 0x89, 0x27, 0xf6, + 0x88, 0x03, 0x03, 0x82, 0xe5, 0xb8, 0x22, 0x0f, + 0xc9, 0xe5, 0x17, 0x23, 0x06, 0x47, 0x5e, 0xf0, + 0x87, 0x60, 0x95, 0x0d, 0x06, 0x12, 0x42, 0x24, + 0x05, 0xc0, 0xd1, 0x6e, 0x54, 0xc8, 0x90, 0x62, + 0x86, 0x2c, 0xfa, 0xa8, 0xa5, 0x1f, 0x82, 0x29, + 0xa0, 0x49, 0x31, 0x44, 0xba, 0x08, 0x4a, 0x85, + 0x41, 0x88, 0xa0, 0x86, 0x44, 0x4d, 0x16, 0xa6, + 0x63, 0x11, 0x32, 0x10, 0x54, 0x44, 0x0a, 0xdb, + 0x2d, 0xc4, 0x18, 0x42, 0x20, 0x6e, 0x69, 0x27, + 0x8e, 0x8c, 0x2d, 0x47, 0x66, 0x7f, 0xf0, 0xdc, + 0xe7, 0xc1, 0x86, 0x05, 0x5a, 0xb1, 0x0d, 0x93, + 0x05, 0x10, 0xa6, 0x22, 0x9b, 0x08, 0xa9, 0x02, + 0x27, 0x07, 0x7e, 0x16, 0x51, 0x86, 0x26, 0xd4, + 0x51, 0xc0, 0xdc, 0x9d, 0x94, 0x02, 0x70, 0x5e, + 0x1b, 0x1d, 0x7e, 0x94, 0xa5, 0x04, 0x6b, 0x92, + 0x14, 0x04, 0x16, 0xaa, 0xa1, 0xf6, 0x51, 0x0c, + 0xdf, 0x19, 0x18, 0x27, 0x00, 0x29, 0xa4, 0xe3, + 0x5d, 0x54, 0x58, 0x70, 0x53, 0x96, 0x46, 0x4f, + 0x06, 0xa3, 0xda, 0xa6, 0x95, 0x7e, 0x76, 0x29, + 0x0d, 0xaa, 0x79, 0x68, 0x18, 0x1e, 0x20, 0x54, + 0x78, 0xc2, 0x36, 0x5e, 0x91, 0x85, 0xc8, 0x80, + 0x3a, 0x49, 0x99, 0x4c, 0x95, 0x54, 0xe8, 0x81, + 0x05, 0x22, 0x88, 0x6c, 0x35, 0x8f, 0xff, 0x88, + 0x12, 0x78, 0x44, 0x6b, 0xad, 0x7b, 0xdd, 0x4a, + 0x83, 0x7c, 0x87, 0xe2, 0xa1, 0x5d, 0x5a, 0x08, + 0xa6, 0x82, 0xc8, 0x1b, 0x50, 0x46, 0x1b, 0x96, + 0x66, 0x7b, 0xb2, 0xf9, 0xd0, 0x43, 0x23, 0x71, + 0x8a, 0x13, 0x7b, 0xd3, 0x52, 0xcb, 0x4c, 0x31, + 0x6b, 0x7c, 0x90, 0x9e, 0x56, 0xcb, 0xb6, 0x7b, + 0xc3, 0x91, 0x54, 0x80, 0x18, 0xcd, 0x5b, 0x06, + 0xb2, 0x51, 0xdf, 0x06, 0x7c, 0x98, 0x81, 0x44, + 0x34, 0xe9, 0xe2, 0x08, 0xad, 0xbb, 0x2d, 0xe9, + 0xa4, 0xc6, 0xc1, 0x1a, 0xcc, 0x8b, 0xcb, 0x23, + 0xa8, 0x0c, 0xd1, 0x19, 0x29, 0xa3, 0x80, 0xfb, + 0x27, 0x5d, 0xff, 0x36, 0x5c, 0x2e, 0x9b, 0x3e, + 0x2d, 0x73, 0x84, 0xb4, 0x08, 0xb7, 0x14, 0xd1, + 0x60, 0x81, 0xe4, 0xe7, 0xf0, 0xc3, 0x8f, 0x74, + 0x06, 0x0b, 0x92, 0xde, 0x8c, 0x76, 0xe0, 0x04, + 0x19, 0x57, 0xb7, 0xf1, 0x9a, 0x04, 0xc7, 0x91, + 0x62, 0xc8, 0x68, 0x8d, 0x7c, 0x80, 0x90, 0xaf, + 0x91, 0x50, 0xe7, 0x1c, 0xc9, 0xf4, 0x24, 0xb0, + 0x1e, 0x3f, 0xbb, 0xe7, 0xef, 0xb8, 0x00, 0xcf, + 0x2c, 0x2c, 0x25, 0xa6, 0xe2, 0xbc, 0xcb, 0x3c, + 0x34, 0x6e, 0x5c, 0x9b, 0xbd, 0x45, 0x24, 0xf9, + 0x45, 0x1e, 0x48, 0xa3, 0x77, 0x09, 0x30, 0xb4, + 0x02, 0x2a, 0x41, 0x9e, 0x1a, 0xcb, 0x92, 0x1f, + 0x6f, 0x5e, 0x3b, 0xdd, 0x0c, 0xd4, 0x84, 0xc5, + 0xdb, 0xc1, 0xc9, 0x41, 0x50, 0xfd, 0x83, 0x3f, + 0x41, 0x5d, 0x43, 0x4a, 0xdc, 0xd0, 0xe0, 0x05, + 0x76, 0x06, 0x3c, 0x73, 0xf5, 0x72, 0xa3, 0x66, + 0xeb, 0xa2, 0x9a, 0x4a, 0x52, 0x8b, 0xe6, 0x36, + 0x23, 0x0c, 0xc5, 0x41, 0x66, 0x76, 0x99, 0x04, + 0x2e, 0x42, 0x2c, 0xf1, 0x75, 0xba, 0x9d, 0xda, + 0x13, 0x58, 0xbd, 0x9c, 0x4d, 0x83, 0xf7, 0x6d, + 0x8d, 0x6a, 0x6c, 0x53, 0x50, 0xb4, 0xff, 0x21, + 0x12, 0x7e, 0x67, 0x06, 0x19, 0x71, 0x89, 0x82, + 0x8c, 0xcf, 0x47, 0x30, 0x9c, 0x09, 0xe4, 0x12, + 0x28, 0xbe, 0xd0, 0x36, 0xaa, 0x5b, 0xbe, 0x49, + 0x96, 0x9b, 0xc3, 0x47, 0xa4, 0xb3, 0xdd, 0xd4, + 0x76, 0xf7, 0x51, 0x66, 0xd4, 0x5d, 0x3a, 0x72, + 0xa8, 0x97, 0xfd, 0xa7, 0x47, 0x99, 0xbb, 0xde, + 0x8b, 0xb5, 0x6f, 0xbf, 0xbd, 0x6c, 0x11, 0x62, + 0x16, 0x67, 0x8c, 0x95, 0x17, 0xdf, 0x6b, 0x33, + 0xea, 0x48, 0x26, 0xb0, 0x1c, 0xad, 0x7f, 0x40, + 0x2f, 0xbc, 0x33, 0x56, 0x55, 0xd2, 0xc4, 0x62, + 0xbb, 0x2e, 0x17, 0xfa, 0x09, 0x46, 0xe6, 0x5e, + 0x60, 0xb9, 0x0c, 0xd6, 0x95, 0xb5, 0xa5, 0x24, + 0x28, 0x5b, 0xc4, 0xf5, 0xd8, 0x77, 0x28, 0xbd, + 0x12, 0x4d, 0xe7, 0x00, 0x47, 0xe8, 0x91, 0xd3, + 0xbf, 0x9d, 0xe3, 0xe0, 0x0b, 0x3c, 0x02, 0x4b, + 0x29, 0x4a, 0xc9, 0xa8, 0xca, 0xad, 0xab, 0xce, + 0x40, 0xd8, 0xc7, 0x0b, 0x9d, 0x04, 0xe9, 0x7c, + 0x86, 0x88, 0xdf, 0xbd, 0xe4, 0x73, 0x3e, 0x5b, + 0xe8, 0xab, 0x76, 0x71, 0x1a, 0x83, 0x46, 0x68, + 0x45, 0x9f, 0x8f, 0xe4, 0x68, 0x59, 0x18, 0xcc, + 0xc2, 0x1f, 0xb2, 0x60, 0xa5, 0xae, 0xed, 0x49, + 0x81, 0x04, 0x54, 0x84, 0x4e, 0x2a, 0x63, 0x3d, + 0xf8, 0x54, 0xce, 0x03, 0xb9, 0x02, 0xc9, 0xa4, + 0x1c, 0x58, 0x1a, 0x58, 0x8c, 0xc4, 0x29, 0x59, + 0xc2, 0x5a, 0x3c, 0x40, 0xf7, 0x24, 0x64, 0xb5, + 0xe9, 0x0a, 0x17, 0x5c, 0xd6, 0x29, 0x40, 0xb8, + 0x9d, 0x72, 0x9d, 0x30, 0x84, 0x62, 0x48, 0x00, + 0x09, 0x7f, 0x98, 0x0a, 0x28, 0xa0, 0x80, 0x31, + 0x10, 0x89, 0x5d, 0x80, 0xb0, 0x03, 0xba, 0xef, + 0x48, 0xc3, 0x39, 0x3c, 0xc9, 0x1a, 0xb7, 0x8e, + 0x25, 0x19, 0x52, 0x10, 0x0f, 0x88, 0x57, 0xbb, + 0xe1, 0x40, 0x50, 0x93, 0xb6, 0x86, 0xff, 0x10, + 0x91, 0x3b, 0x01, 0xf1, 0xcd, 0xf6, 0x04, 0xe6, + 0x40, 0x08, 0x06, 0x43, 0x13, 0x28, 0x58, 0xdb, + 0x9e, 0x58, 0x32, 0x30, 0x80, 0x0d, 0xe4, 0x8a, + 0x58, 0x7c, 0xdb, 0x97, 0xa2, 0x04, 0x88, 0x3e, + 0x20, 0xeb, 0x38, 0x92, 0x03, 0xc2, 0x3b, 0x1c, + 0xe7, 0x83, 0xb6, 0x14, 0xcc, 0x0c, 0xeb, 0xc0, + 0xc4, 0xed, 0x2e, 0x00, 0xb9, 0xfc, 0x3d, 0x28, + 0x62, 0x1b, 0x23, 0x62, 0x1c, 0x35, 0x80, 0x80, + 0x45, 0xad, 0xef, 0x03, 0x29, 0xd0, 0x51, 0x3a, + 0xa6, 0xc5, 0xc3, 0x4c, 0xd8, 0xc0, 0x16, 0x70, + 0x08, 0xa0, 0x0e, 0x2a, 0x66, 0xc6, 0xd5, 0x8d, + 0x6a, 0x77, 0x24, 0x79, 0x1f, 0xa7, 0x5a, 0x28, + 0x09, 0x4d, 0x2e, 0xd2, 0x10, 0x0a, 0x28, 0x59, + 0x81, 0xf8, 0x78, 0xbf, 0x3c, 0x9e, 0x4a, 0x43, + 0x36, 0x28, 0xc9, 0xa4, 0x96, 0xb0, 0x2f, 0x60, + 0x7d, 0x60, 0x49, 0x96, 0x41, 0x5a, 0xae, 0xf8, + 0xe8, 0xa0, 0x6c, 0x1c, 0x88, 0x0d, 0x89, 0xa8, + 0xe4, 0x29, 0x49, 0x90, 0x4a, 0x03, 0x40, 0xc3, + 0x94, 0x5c, 0x71, 0x25, 0x2c, 0x6d, 0xf0, 0x07, + 0x04, 0xb2, 0x65, 0x40, 0x87, 0x90, 0x8f, 0x64, + 0x52, 0xd4, 0xa4, 0x54, 0x69, 0x63, 0x1b, 0x21, + 0xb9, 0xc9, 0x4d, 0xdc, 0xd1, 0x4c, 0x0d, 0xb6, + 0x2b, 0x11, 0x4a, 0x1c, 0xe6, 0xe2, 0x02, 0x60, + 0xcc, 0x11, 0x84, 0x53, 0x52, 0xca, 0xfc, 0x13, + 0x0e, 0xc0, 0xa2, 0x48, 0xd1, 0xa1, 0x40, 0x21, + 0x29, 0x12, 0x95, 0x28, 0x4d, 0x40, 0x99, 0xca, + 0x80, 0x64, 0x61, 0x1f, 0x71, 0x66, 0xe9, 0x62, + 0x50, 0x13, 0x7a, 0x54, 0x12, 0x38, 0x8f, 0x14, + 0x67, 0x02, 0x51, 0x64, 0xaf, 0x95, 0xc5, 0xf2, + 0x87, 0x7f, 0x40, 0x66, 0x1b, 0xde, 0x69, 0xc3, + 0x7b, 0xd8, 0xd2, 0x9d, 0xf0, 0xa8, 0xe7, 0x01, + 0x6c, 0xd4, 0x3f, 0x6c, 0xb6, 0xe9, 0xff, 0x2a, + 0xd2, 0x8b, 0xcf, 0x1e, 0x72, 0xb5, 0x92, 0xa6, + 0xc5, 0x27, 0x78, 0x02, 0xc5, 0x03, 0x2b, 0x71, + 0x13, 0x87, 0x4d, 0x09, 0xd3, 0x04, 0x39, 0x52, + 0xa8, 0x86, 0xb8, 0xf7, 0x9d, 0x7a, 0xe5, 0x0b, + 0x9b, 0xd6, 0xf1, 0x06, 0xbf, 0xb6, 0x03, 0x92, + 0x54, 0xda, 0xc8, 0x52, 0xd2, 0x7c, 0xd0, 0xd7, + 0x8c, 0x21, 0x3d, 0x6c, 0x5c, 0x63, 0x0d, 0x35, + 0x5b, 0x5d, 0x09, 0x43, 0xca, 0x1a, 0x95, 0x72, + 0x66, 0x3b, 0x25, 0xea, 0xd6, 0x0c, 0x96, 0x87, + 0xbe, 0x75, 0x3a, 0x44, 0x0f, 0xc0, 0x53, 0xaa, + 0xa4, 0x02, 0x93, 0x1a, 0xb8, 0x78, 0xee, 0x73, + 0x16, 0xad, 0x1f, 0xeb, 0x78, 0x62, 0xd1, 0xad, + 0xaa, 0x0b, 0x09, 0xb3, 0x40, 0x85, 0x47, 0x86, + 0x4a, 0x54, 0x23, 0x7e, 0xd1, 0x35, 0x86, 0xc4, + 0xc5, 0x48, 0x7f, 0x47, 0x97, 0x5f, 0xc0, 0x21, + 0x9d, 0x48, 0xa5, 0x22, 0x6a, 0x54, 0x52, 0x22, + 0x2e, 0x92, 0x90, 0xac, 0xd3, 0xc8, 0x44, 0x7c, + 0xb2, 0xd2, 0x4c, 0x3d, 0xcc, 0x47, 0x56, 0x25, + 0x15, 0x88, 0x1f, 0x8e, 0x57, 0xd6, 0xe6, 0xb4, + 0x93, 0x5b, 0xad, 0x03, 0x23, 0x33, 0x7b, 0xc7, + 0xd1, 0x87, 0x16, 0x25, 0xa0, 0x15, 0x18, 0x99, + 0x02, 0xf4, 0x89, 0x81, 0xbf, 0xd9, 0x93, 0xb2, + 0x0b, 0x32, 0xc7, 0x3c, 0xab, 0xe3, 0x9c, 0xb1, + 0x02, 0x0a, 0x8a, 0xb2, 0x60, 0x1c, 0x5a, 0x7d, + 0x57, 0xd8, 0x4a, 0xac, 0xd5, 0x9c, 0x6e, 0x10, + 0xdd, 0x26, 0x03, 0x16, 0x59, 0x89, 0x16, 0x06, + 0xb3, 0x1e, 0x90, 0x87, 0x91, 0xdc, 0x72, 0x4f, + 0x47, 0x86, 0xaf, 0xb2, 0x01, 0x9c, 0x87, 0x71, + 0x2e, 0xb3, 0x9b, 0xcb, 0x2c, 0x84, 0x08, 0x93, + 0x92, 0x6a, 0x69, 0x7b, 0x60, 0x54, 0x11, 0x74, + 0x63, 0x3c, 0x8a, 0xbd, 0xa4, 0xf5, 0xe2, 0xc3, + 0x24, 0x12, 0x9a, 0xee, 0x2b, 0xf0, 0xff, 0x20, + 0x55, 0xe1, 0x8c, 0xbb, 0xba, 0xac, 0xf0, 0x01, + 0xa8, 0xe3, 0x49, 0x11, 0x02, 0xcb, 0x26, 0x84, + 0x42, 0x16, 0x77, 0xb8, 0x8b, 0x6b, 0xe7, 0x82, + 0x38, 0x16, 0x8c, 0x1d, 0xf4, 0xd2, 0x0c, 0x12, + 0x3d, 0x40, 0x01, 0xba, 0xd7, 0xc7, 0xdc, 0x10, + 0xe7, 0xa4, 0xff, 0x19, 0xc6, 0x79, 0xe5, 0xe4, + 0x9c, 0x8d, 0xb1, 0x56, 0x73, 0xc8, 0xd8, 0x86, + 0x32, 0x4e, 0x0b, 0xde, 0x55, 0x9a, 0xf6, 0x99, + 0xaa, 0xf3, 0x48, 0x2a, 0x0d, 0xf5, 0xdc, 0x75, + 0x9a, 0x82, 0x2e, 0x4a, 0xf3, 0x2f, 0xde, 0xf8, + 0xe8, 0x16, 0x8f, 0xc9, 0xca, 0x02, 0x31, 0xfb, + 0x8f, 0x7e, 0x81, 0x0b, 0xdf, 0xfe, 0x6a, 0xa6, + 0x06, 0xb3, 0x44, 0xd9, 0x57, 0xf0, 0x1a, 0x2d, + 0x06, 0x8a, 0x17, 0x79, 0xf7, 0x21, 0xed, 0xb4, + 0x54, 0xb7, 0xd7, 0xa2, 0xa8, 0x61, 0x0d, 0x04, + 0xf2, 0x93, 0x6e, 0x01, 0x79, 0xc1, 0x33, 0x5a, + 0x58, 0x7e, 0x83, 0xcb, 0xb0, 0x56, 0xa8, 0x07, + 0x52, 0x44, 0xf5, 0x91, 0xa9, 0x62, 0x2b, 0x62, + 0x78, 0xcd, 0x97, 0xdc, 0x60, 0x58, 0x70, 0x2c, + 0xf3, 0xd0, 0x5f, 0x29, 0x69, 0xc1, 0xc6, 0x17, + 0xc7, 0x92, 0xbf, 0xeb, 0x39, 0xb2, 0x4a, 0x23, + 0x1c, 0xa8, 0x58, 0xe2, 0xf8, 0x02, 0x58, 0x3a, + 0x26, 0x4a, 0x29, 0x33, 0xa5, 0xa9, 0xea, 0x2a, + 0xc5, 0xac, 0x7c, 0x07, 0xa7, 0x76, 0x64, 0x64, + 0xa6, 0x6c, 0x52, 0x23, 0x39, 0x01, 0xc5, 0x20, + 0xb1, 0xc3, 0x38, 0x19, 0xb7, 0x88, 0x6d, 0x4b, + 0x19, 0x31, 0x54, 0x02, 0x03, 0xbd, 0x3c, 0xe8, + 0x0a, 0x7a, 0x09, 0xd5, 0x8c, 0x7e, 0x39, 0x56, + 0x85, 0x48, 0x75, 0x39, 0x27, 0x87, 0x3d, 0x02, + 0x92, 0x21, 0xab, 0x01, 0x28, 0x72, 0x87, 0xb4, + 0x91, 0xeb, 0xa4, 0xde, 0x0a, 0xe4, 0x11, 0x56, + 0x8a, 0x98, 0x82, 0xf9, 0xa0, 0x87, 0xff, 0xe2, + 0xae, 0xb9, 0x1a, 0x40, 0x69, 0x83, 0xc3, 0xc0, + 0xdb, 0xb2, 0xa5, 0x88, 0x60, 0x80, 0xef, 0x5a, + 0x18, 0xd0, 0x37, 0x18, 0x60, 0x93, 0xb9, 0x8a, + 0x84, 0x52, 0x2a, 0xc9, 0x24, 0x2c, 0xba, 0xc6, + 0x31, 0x24, 0x27, 0xb5, 0x3d, 0xa7, 0xf5, 0x74, + 0xa1, 0x54, 0x83, 0x0f, 0x3b, 0x14, 0xc0, 0x42, + 0x03, 0xc0, 0xa7, 0xca, 0x80, 0xed, 0x9d, 0x35, + 0xd7, 0x8a, 0x92, 0xf4, 0x19, 0x13, 0x56, 0xc3, + 0xb4, 0x92, 0x00, 0x82, 0x56, 0x56, 0x2e, 0x65, + 0xcf, 0x4d, 0x0d, 0x5b, 0xd2, 0x52, 0x65, 0x01, + 0x55, 0x93, 0xc4, 0x38, 0x29, 0x42, 0x23, 0xb0, + 0x87, 0x5b, 0xe1, 0x30, 0x8c, 0x39, 0xaf, 0xb4, + 0xee, 0x80, 0x26, 0x1d, 0x18, 0x39, 0xe6, 0x91, + 0xe4, 0x4b, 0x88, 0x2e, 0x4a, 0x81, 0x83, 0xe1, + 0xd9, 0x05, 0x6d, 0x37, 0x71, 0x32, 0xe0, 0xed, + 0x87, 0x4f, 0xa9, 0x6b, 0x47, 0xf0, 0x4d, 0x49, + 0x7e, 0xf0, 0x00, 0xbe, 0x9e, 0x5c, 0xb5, 0x60, + 0x27, 0x59, 0x7c, 0x21, 0x38, 0xa2, 0xc3, 0xe6, + 0x7b, 0x95, 0x53, 0xbf, 0x09, 0x19, 0x5f, 0xa2, + 0xce, 0x95, 0x82, 0xac, 0xe3, 0x59, 0x17, 0xc7, + 0xa4, 0xcb, 0xd6, 0x70, 0x7e, 0xf2, 0xc6, 0x13, + 0x9b, 0x95, 0x66, 0x4d, 0xe5, 0xa3, 0x35, 0xa9, + 0x2d, 0x29, 0xa8, 0x35, 0xfc, 0x01, 0x56, 0xda, + 0xf9, 0x0b, 0x93, 0x2f, 0xc0, 0xd4, 0xbe, 0x08, + 0xc2, 0x97, 0xf6, 0xf6, 0x77, 0xb9, 0xeb, 0x12, + 0x70, 0x86, 0x8b, 0x19, 0x76, 0xc1, 0x40, 0x26, + 0x96, 0xee, 0xfb, 0xef, 0x8d, 0x8f, 0x52, 0xc8, + 0x20, 0x50, 0x4d, 0xea, 0x36, 0xeb, 0xe3, 0x6d, + 0x11, 0x68, 0x1e, 0xd3, 0xdc, 0xc9, 0x86, 0x10, + 0xa0, 0x80, 0x72, 0x52, 0xc9, 0xdf, 0xcb, 0x99, + 0x81, 0x9d, 0xf1, 0xc0, 0x61, 0x70, 0xf3, 0x19, + 0x2a, 0x98, 0x30, 0x45, 0x35, 0x0a, 0xff, 0xa1, + 0x49, 0x67, 0x6d, 0x2a, 0xd9, 0xd1, 0xea, 0xdd, + 0xb3, 0xb6, 0x15, 0x96, 0x48, 0x00, 0x54, 0x03, + 0x5b, 0x2d, 0x04, 0x68, 0x37, 0xd4, 0x6c, 0x72, + 0x53, 0xcd, 0xcc, 0x75, 0x43, 0x9c, 0x89, 0xc7, + 0xfd, 0x6f, 0x59, 0xf1, 0x71, 0x43, 0xb9, 0x4e, + 0xe4, 0x9e, 0x1d, 0xa9, 0xb0, 0x13, 0x67, 0xf5, + 0x96, 0xa4, 0x7d, 0x3a, 0x06, 0x3a, 0xf4, 0xd6, + 0x68, 0x7d, 0x89, 0x22, 0x38, 0xef, 0x38, 0xa7, + 0xe4, 0x8e, 0x02, 0xc1, 0xf8, 0xaf, 0xcf, 0x3d, + 0xdf, 0x24, 0x47, 0x84, 0x1e, 0xdb, 0xf8, 0x4a, + 0x1b, 0xca, 0xd0, 0x38, 0xd8, 0x15, 0xe0, 0x8b, + 0x69, 0xbe, 0x0b, 0x48, 0xbf, 0x53, 0x8a, 0x18, + 0xd7, 0x11, 0x76, 0xc2, 0x73, 0x2e, 0x87, 0x49, + 0x74, 0xed, 0xb3, 0xac, 0x7b, 0x30, 0x3f, 0x85, + 0xf6, 0xfa, 0xef, 0xf0, 0x0e, 0xc1, 0xc4, 0x4b, + 0xa0, 0x38, 0x78, 0x0d, 0xdd, 0x41, 0x94, 0x90, + 0xa4, 0xc6, 0x73, 0xe0, 0xf8, 0x09, 0xcc, 0x55, + 0x95, 0x18, 0xdd, 0x02, 0xbb, 0x8d, 0xe6, 0xee, + 0x7a, 0xa3, 0x3c, 0x08, 0xdb, 0x76, 0x94, 0x36, + 0x4f, 0x4c, 0xfb, 0x6c, 0x1e, 0x78, 0x18, 0x1b, + 0xb9, 0x4b, 0x43, 0x2a, 0xc4, 0xb8, 0xc9, 0x17, + 0xf6, 0xac, 0xa4, 0x89, 0x1f, 0x80, 0x0e, 0x93, + 0xf7, 0x22, 0x16, 0xfd, 0xe5, 0x5d, 0xdb, 0x76, + 0x3c, 0xdf, 0xc0, 0xc1, 0x2a, 0x2d, 0xeb, 0x34, + 0x27, 0x9e, 0x29, 0x05, 0xe6, 0x95, 0xbd, 0xbe, + 0x94, 0x4d, 0xed, 0x2f, 0x56, 0xa4, 0xc9, 0x75, + 0xee, 0x7b, 0x43, 0xe4, 0xe8, 0xa4, 0xe0, 0x5b, + 0xf8, 0x8e, 0xc2, 0x39, 0x0f, 0x96, 0x53, 0xe0, + 0xd9, 0xa2, 0x98, 0x12, 0x44, 0xf6, 0x50, 0x06, + 0xec, 0x73, 0xca, 0xfa, 0x1c, 0x61, 0x89, 0xa5, + 0xb1, 0xb8, 0xf8, 0x1d, 0x0c, 0xff, 0x09, 0x7c, + 0xdf, 0x7e, 0x71, 0x2c, 0x95, 0xb9, 0xff, 0xf1, + 0x30, 0x3a, 0xb1, 0xb6, 0xa0, 0x6a, 0xaa, 0x73, + 0x77, 0xbd, 0xa2, 0x57, 0xa7, 0x71, 0x53, 0x50, + 0x16, 0x29, 0xea, 0x87, 0x73, 0xac, 0xa0, 0x13, + 0x52, 0x40, 0x72, 0x8e, 0x57, 0x2c, 0x7f, 0xd5, + 0x67, 0xa5, 0x83, 0x2d, 0x52, 0xb3, 0x18, 0xaa, + 0x66, 0x25, 0x6a, 0xa0, 0x23, 0x24, 0x17, 0x5b, + 0x8a, 0xa1, 0x18, 0x27, 0x41, 0x09, 0xf3, 0x47, + 0x6e, 0x9c, 0x70, 0x7f, 0xdb, 0x43, 0x70, 0x8f, + 0xc6, 0x22, 0xda, 0x50, 0x18, 0xb1, 0x37, 0x4b, + 0xf1, 0x31, 0x28, 0x9a, 0x12, 0x72, 0x98, 0x13, + 0x0b, 0x15, 0x95, 0x2d, 0x2d, 0x97, 0x13, 0x1d, + 0x17, 0x0f, 0xc8, 0xd3, 0x41, 0x0c, 0xd8, 0x09, + 0xfc, 0xf6, 0x04, 0xa0, 0x45, 0x53, 0x1e, 0x62, + 0x7e, 0x9e, 0xc4, 0x82, 0x20, 0xe8, 0x63, 0x33, + 0xc2, 0x82, 0x2a, 0x80, 0x02, 0xac, 0xa3, 0x09, + 0x29, 0xe4, 0x55, 0x91, 0xa5, 0x52, 0x19, 0x07, + 0x23, 0x00, 0xe2, 0x2b, 0x18, 0xa3, 0x69, 0x3d, + 0x08, 0x34, 0xc5, 0x47, 0x7a, 0x2c, 0xf7, 0x82, + 0x85, 0xb1, 0x85, 0xf0, 0xe2, 0x58, 0xe9, 0x77, + 0x7e, 0xd8, 0xf4, 0x84, 0x81, 0x54, 0x44, 0xcf, + 0x02, 0x08, 0x31, 0x38, 0x77, 0x45, 0x80, 0x80, + 0x7d, 0x47, 0x2f, 0x8f, 0x02, 0x5c, 0xd9, 0xa0, + 0x00, 0x90, 0x90, 0x85, 0x61, 0x00, 0x73, 0x50, + 0x30, 0x66, 0x15, 0x75, 0x5a, 0x1b, 0xd2, 0x81, + 0xa2, 0x51, 0x81, 0x1e, 0xc6, 0x28, 0xdb, 0x40, + 0x60, 0xbe, 0x02, 0x08, 0x6d, 0xa2, 0x6a, 0xdf, + 0x52, 0x0d, 0xe4, 0x47, 0x39, 0xd9, 0xc0, 0x1c, + 0x9f, 0xc5, 0x06, 0x12, 0x11, 0x72, 0x76, 0xb8, + 0x52, 0x70, 0x35, 0x35, 0x4b, 0x14, 0x04, 0x04, + 0xf7, 0x39, 0x47, 0xe7, 0x77, 0x3c, 0x31, 0x39, + 0x16, 0x54, 0x1a, 0xd8, 0xc4, 0x82, 0xbe, 0x12, + 0x24, 0xc0, 0xb5, 0x4d, 0x3c, 0x05, 0xff, 0x5c, + 0x48, 0xd1, 0x5b, 0x91, 0xf4, 0x1e, 0x50, 0xe3, + 0x25, 0x73, 0x37, 0x2e, 0x87, 0x73, 0x83, 0x48, + 0x35, 0x89, 0x41, 0x90, 0x29, 0x01, 0x17, 0x86, + 0xcb, 0x46, 0x00, 0x05, 0x90, 0x4a, 0x98, 0xf8, + 0x1c, 0xe6, 0xd4, 0x6e, 0x17, 0x26, 0x2b, 0x21, + 0xa1, 0x44, 0x99, 0x02, 0x85, 0x40, 0x42, 0x56, + 0xc0, 0xa3, 0x68, 0xda, 0x44, 0x0b, 0xa9, 0x02, + 0x03, 0xc6, 0x46, 0x71, 0x82, 0x31, 0x2e, 0xfe, + 0x50, 0x05, 0x6b, 0x54, 0x7f, 0x85, 0xc5, 0x68, + 0x5b, 0xb8, 0x20, 0x81, 0xc1, 0x5e, 0x56, 0x90, + 0x4a, 0x22, 0x97, 0x77, 0x7b, 0xf6, 0x0b, 0x45, + 0xe7, 0x2f, 0x19, 0x15, 0x43, 0x4f, 0x68, 0x38, + 0x9d, 0x92, 0x2b, 0x52, 0x74, 0x02, 0x35, 0x02, + 0x40, 0xe6, 0x07, 0x35, 0x22, 0xf2, 0x06, 0xc0, + 0x58, 0x75, 0xb4, 0xf8, 0x6a, 0xd8, 0x14, 0x2b, + 0x3e, 0x23, 0x44, 0x96, 0x41, 0x84, 0x1f, 0x00, + 0x77, 0xee, 0x01, 0x52, 0x70, 0x45, 0x74, 0x63, + 0x43, 0x53, 0x5e, 0x44, 0x68, 0x50, 0xe8, 0x01, + 0x99, 0xa2, 0x09, 0xc7, 0x10, 0x7d, 0xa1, 0xf7, + 0x8e, 0xa0, 0xd5, 0x4c, 0x92, 0xa6, 0x7f, 0xf5, + 0x48, 0x71, 0x81, 0xa8, 0x21, 0x01, 0x50, 0x4d, + 0xdd, 0x47, 0x03, 0xf4, 0xf6, 0x22, 0x30, 0x22, + 0x03, 0xe3, 0x68, 0x7a, 0xbe, 0x22, 0x0b, 0x7c, + 0x15, 0x78, 0x73, 0xe6, 0x07, 0x56, 0x01, 0x2f, + 0x01, 0x73, 0x6e, 0x56, 0x46, 0x64, 0x14, 0x36, + 0x91, 0x05, 0x92, 0x4f, 0x54, 0x83, 0x02, 0x34, + 0x92, 0x8d, 0x9c, 0x97, 0x91, 0xff, 0x51, 0x65, + 0x8f, 0x74, 0x51, 0x55, 0x72, 0x93, 0xff, 0x21, + 0x8d, 0x3a, 0x89, 0x5f, 0xd9, 0xd0, 0x68, 0x91, + 0x53, 0x86, 0x99, 0x98, 0x6e, 0x23, 0x90, 0x2b, + 0x68, 0xd4, 0x5d, 0x1f, 0xa3, 0x07, 0xfc, 0x18, + 0x39, 0xa1, 0x32, 0x8f, 0xd6, 0x58, 0xff, 0x5a, + 0x7f, 0x54, 0x02, 0x1e, 0x61, 0x19, 0xb1, 0xf7, + 0x0f, 0xcf, 0xc8, 0x28, 0xd2, 0x18, 0x41, 0x02, + 0xd7, 0x3c, 0x3c, 0xb9, 0x10, 0xdf, 0xe0, 0x66, + 0x03, 0xc2, 0x6a, 0x43, 0xb9, 0x26, 0x95, 0x18, + 0x03, 0x7e, 0xb8, 0x21, 0x45, 0x59, 0x7e, 0x0e, + 0x93, 0x49, 0xab, 0xb1, 0x80, 0x9e, 0xe2, 0x92, + 0x3c, 0x50, 0x51, 0x34, 0x69, 0x8f, 0x0c, 0x64, + 0x49, 0x87, 0xe8, 0x78, 0xe0, 0x77, 0x38, 0xed, + 0x31, 0x21, 0xdb, 0xd1, 0x21, 0xc1, 0x42, 0x04, + 0x0f, 0xc7, 0x32, 0xe3, 0xf3, 0x26, 0x9f, 0x63, + 0x29, 0x89, 0xf4, 0x7d, 0x37, 0x31, 0x40, 0xce, + 0x01, 0x26, 0xc1, 0x76, 0x7c, 0x72, 0xb9, 0x5a, + 0x84, 0x15, 0x6f, 0x16, 0xf4, 0x11, 0x9d, 0xa2, + 0x92, 0x1c, 0x09, 0x0a, 0x2a, 0xc3, 0x41, 0x33, + 0x04, 0x22, 0x34, 0x23, 0x22, 0x17, 0x75, 0x72, + 0x91, 0x55, 0x94, 0xb4, 0xf6, 0x83, 0xa5, 0x69, + 0x7e, 0xbd, 0xa4, 0x8b, 0xc4, 0xc6, 0x29, 0xae, + 0x38, 0x2e, 0xa1, 0x37, 0x4d, 0x91, 0x99, 0x03, + 0x98, 0x29, 0x88, 0xf7, 0x84, 0x4d, 0x1a, 0x40, + 0x9a, 0x1f, 0x10, 0x8e, 0x99, 0x09, 0x78, 0xa2, + 0x50, 0x60, 0x3b, 0xd7, 0x86, 0x13, 0x88, 0x6e, + 0x69, 0x34, 0x5e, 0xa8, 0xf2, 0x25, 0xf1, 0x92, + 0x2c, 0xa7, 0x10, 0x11, 0xc6, 0xf4, 0x28, 0x70, + 0xd9, 0x89, 0xb1, 0x59, 0x03, 0xee, 0x07, 0x0a, + 0xd8, 0x42, 0x56, 0xb8, 0x89, 0x1b, 0x1e, 0x71, + 0x4e, 0x23, 0x48, 0x5e, 0x93, 0xd3, 0x79, 0xd9, + 0xc5, 0x66, 0x5e, 0xd4, 0x16, 0x09, 0xf9, 0x69, + 0x88, 0x49, 0x48, 0x5f, 0xc2, 0x1e, 0x93, 0xc5, + 0x89, 0x64, 0x62, 0x4a, 0x51, 0x79, 0x67, 0x26, + 0xa8, 0x21, 0x0e, 0x44, 0x33, 0xb3, 0xe9, 0x49, + 0xf2, 0x61, 0x79, 0xc7, 0x51, 0x52, 0x63, 0xd5, + 0x29, 0xbe, 0x83, 0x36, 0x13, 0x85, 0xff, 0x4f, + 0xf4, 0x80, 0x49, 0xae, 0xe7, 0x98, 0x83, 0x65, + 0x02, 0xbb, 0x27, 0x69, 0x93, 0x76, 0x23, 0x21, + 0x24, 0x91, 0x51, 0x00, 0xa0, 0x4b, 0x50, 0x9d, + 0xda, 0x86, 0x2d, 0xc1, 0x69, 0x1f, 0xf6, 0xb2, + 0x7c, 0x87, 0x80, 0x39, 0x55, 0xc4, 0x15, 0x02, + 0x46, 0x32, 0xc7, 0xb0, 0x1b, 0xa2, 0x99, 0x09, + 0x1c, 0x61, 0x3d, 0xed, 0x59, 0x1b, 0xa2, 0x49, + 0x8f, 0x38, 0x53, 0x7a, 0x4d, 0x50, 0x97, 0x54, + 0x89, 0x9f, 0x88, 0x82, 0x2c, 0x99, 0x22, 0x2a, + 0x16, 0xa5, 0xa1, 0x99, 0x60, 0x99, 0x3e, 0xe3, + 0xa0, 0xc4, 0x58, 0x13, 0x1f, 0x62, 0x40, 0x85, + 0x81, 0x0a, 0x1f, 0xda, 0x43, 0xd1, 0xf2, 0x72, + 0x4d, 0x39, 0x7d, 0x6d, 0xd2, 0x9c, 0xeb, 0x29, + 0x1d, 0x08, 0x50, 0x00, 0x8a, 0x10, 0x9f, 0x33, + 0x76, 0x88, 0x3b, 0x84, 0x41, 0x12, 0x53, 0x2f, + 0x6f, 0x75, 0x2c, 0x29, 0x64, 0x95, 0x4d, 0xf8, + 0x7c, 0xaa, 0xe2, 0x8c, 0x57, 0x46, 0x05, 0x1f, + 0xe0, 0xa0, 0x3d, 0x2a, 0x83, 0x20, 0x81, 0x13, + 0xa6, 0x21, 0x13, 0xb3, 0x08, 0x6d, 0x1f, 0x1a, + 0x3c, 0x7d, 0x90, 0x9e, 0x7f, 0x29, 0x50, 0x06, + 0xe0, 0x8f, 0x74, 0x10, 0x9d, 0xbf, 0x74, 0x2c, + 0x1c, 0xc4, 0x41, 0x32, 0x47, 0x95, 0x1f, 0x11, + 0x24, 0x6b, 0x78, 0x9b, 0x80, 0x40, 0xa1, 0x63, + 0x30, 0x0b, 0xf1, 0x40, 0x45, 0x42, 0x58, 0xa7, + 0x0f, 0xea, 0x13, 0xa1, 0xa2, 0xa6, 0x17, 0x22, + 0x30, 0xa9, 0x65, 0x98, 0xca, 0xe3, 0x1e, 0xbc, + 0x27, 0x98, 0x94, 0x36, 0x47, 0x04, 0x24, 0x77, + 0x37, 0xd6, 0x36, 0x54, 0x90, 0x05, 0x3f, 0x31, + 0x0c, 0x46, 0xda, 0xa0, 0x58, 0x9a, 0x1f, 0x39, + 0x25, 0x3a, 0xe9, 0x00, 0x3a, 0x1c, 0x45, 0x88, + 0xff, 0xf0, 0x21, 0x2d, 0x49, 0x5d, 0x7a, 0xf5, + 0x7d, 0xaf, 0xe6, 0x1d, 0x71, 0x10, 0xff, 0x9f, + 0x8e, 0xf9, 0x88, 0xe5, 0x85, 0x1f, 0xec, 0x83, + 0x75, 0x57, 0x43, 0x56, 0x8f, 0x6a, 0x43, 0x9a, + 0x97, 0x9d, 0x9c, 0xe2, 0xa0, 0x57, 0xe9, 0x94, + 0x0c, 0x8a, 0x1e, 0xdc, 0x90, 0x2b, 0x35, 0x52, + 0xa3, 0xe9, 0x42, 0xa1, 0x26, 0x39, 0x02, 0x98, + 0x65, 0x0f, 0xb3, 0x42, 0x71, 0xc1, 0x02, 0xa2, + 0x27, 0x87, 0xa0, 0x96, 0x13, 0xa4, 0x20, 0x00, + 0x64, 0xb0, 0x0a, 0x9d, 0x36, 0x69, 0x1f, 0x30, + 0xd9, 0x91, 0xbd, 0xc2, 0x88, 0x35, 0xf8, 0x57, + 0x63, 0xc0, 0x84, 0x82, 0x16, 0x37, 0x1b, 0x58, + 0x17, 0xb7, 0x36, 0xab, 0xc5, 0x9a, 0x0d, 0x33, + 0xb8, 0x76, 0x92, 0xc8, 0x38, 0x8f, 0xf5, 0x9c, + 0xd2, 0xd6, 0x74, 0x3f, 0x69, 0x5e, 0xcf, 0xea, + 0x81, 0x3b, 0x66, 0xa9, 0xa8, 0x53, 0x8c, 0xe6, + 0xf7, 0x7d, 0xde, 0x01, 0x2e, 0xd2, 0x60, 0x76, + 0x8b, 0x36, 0x0c, 0x4c, 0x73, 0x9c, 0x0e, 0xc6, + 0x26, 0x0a, 0xc3, 0xa5, 0x52, 0x24, 0x46, 0x6e, + 0xd7, 0x95, 0xe6, 0x5a, 0x1c, 0x59, 0x7a, 0x2f, + 0xeb, 0xaa, 0x6e, 0xfb, 0x03, 0x8a, 0xa5, 0xb6, + 0xa5, 0xa5, 0x58, 0x06, 0x99, 0x78, 0x05, 0xd1, + 0xf5, 0x56, 0x94, 0x71, 0xa3, 0x82, 0x73, 0x17, + 0x30, 0xa3, 0x1b, 0xfb, 0xea, 0x28, 0xf8, 0x58, + 0xa0, 0x2e, 0xd6, 0xb1, 0x0b, 0xe1, 0x92, 0xfb, + 0x72, 0x32, 0x26, 0x5a, 0x20, 0x05, 0x5b, 0x02, + 0xe1, 0x38, 0x4d, 0x01, 0x70, 0x15, 0x3e, 0xb6, + 0x0e, 0xc0, 0xb3, 0x91, 0xb3, 0x08, 0x0b, 0x7a, + 0x40, 0x42, 0x81, 0xa3, 0x2f, 0x18, 0xf3, 0x72, + 0x19, 0x3b, 0xa1, 0xdf, 0x37, 0xb2, 0xa9, 0x3a, + 0x89, 0xb6, 0x30, 0x60, 0x5f, 0xa8, 0x0a, 0x93, + 0xda, 0x06, 0x3a, 0xeb, 0x1e, 0x09, 0xeb, 0x1e, + 0xfc, 0x38, 0x25, 0x6e, 0xd8, 0x21, 0x11, 0xa3, + 0x32, 0x17, 0x49, 0x32, 0xc6, 0x82, 0xff, 0x6b, + 0xb8, 0x77, 0x38, 0x94, 0x25, 0x58, 0x92, 0x82, + 0x39, 0x03, 0xbb, 0xac, 0xfa, 0xe8, 0xb4, 0xe6, + 0x70, 0xb0, 0x56, 0x30, 0xb4, 0x44, 0xdb, 0xae, + 0xda, 0xa6, 0xb2, 0xaf, 0x86, 0x40, 0x56, 0xeb, + 0x13, 0x15, 0x90, 0x02, 0x24, 0x83, 0x62, 0xf1, + 0xf0, 0x0b, 0xd5, 0x69, 0x48, 0xa6, 0xc9, 0xa1, + 0xf3, 0x83, 0x85, 0x6d, 0x60, 0x87, 0x1a, 0x95, + 0x36, 0xab, 0x09, 0x48, 0x4c, 0x10, 0xb4, 0x9c, + 0x57, 0xb4, 0x1d, 0xa0, 0x87, 0x5f, 0x43, 0x20, + 0xfd, 0x63, 0xb3, 0x92, 0xb0, 0x8d, 0x1f, 0xb4, + 0x18, 0x07, 0x70, 0x0c, 0xe7, 0x12, 0x4c, 0x7b, + 0x92, 0x77, 0x1f, 0x75, 0xb5, 0x28, 0xc2, 0x4f, + 0xf9, 0x50, 0x63, 0x4b, 0x25, 0xab, 0xce, 0x89, + 0x67, 0x7f, 0x42, 0x80, 0x92, 0x22, 0x2e, 0x14, + 0xd9, 0x85, 0x80, 0x7b, 0x76, 0xfb, 0xf2, 0x37, + 0xa1, 0x02, 0x53, 0xd2, 0xb8, 0x27, 0x93, 0xba, + 0x41, 0x8c, 0xea, 0xb1, 0x57, 0x9b, 0xa3, 0x3a, + 0xe0, 0xb2, 0x44, 0xc2, 0xb7, 0x96, 0x0a, 0x29, + 0x34, 0xf5, 0x25, 0x7d, 0x9a, 0x71, 0xb0, 0xc0, + 0x84, 0xf7, 0xe4, 0x44, 0x56, 0x48, 0x06, 0xe1, + 0x71, 0x25, 0xf5, 0xf3, 0x27, 0x3f, 0x2a, 0xa2, + 0x5f, 0x79, 0xb5, 0x6f, 0x4b, 0x79, 0x5c, 0xbb, + 0x69, 0x05, 0xd8, 0x2b, 0x2c, 0x87, 0x60, 0xa8, + 0xb9, 0xb1, 0xc0, 0xa8, 0xa5, 0x9e, 0x8a, 0x0c, + 0x89, 0xe9, 0x57, 0xa2, 0x34, 0xbc, 0x46, 0x72, + 0x42, 0xca, 0xca, 0x3e, 0x92, 0xab, 0x21, 0x5e, + 0x0b, 0x23, 0xbf, 0x18, 0x02, 0x77, 0xd3, 0x19, + 0xb7, 0xf3, 0x2c, 0x85, 0xdb, 0x43, 0xd8, 0x54, + 0x27, 0x80, 0x56, 0x0c, 0x4c, 0xf8, 0x0d, 0x5c, + 0x2b, 0x5c, 0x6d, 0x13, 0x0e, 0x7e, 0xf8, 0x12, + 0x80, 0x7a, 0x03, 0xdb, 0xcb, 0xbd, 0x8b, 0xf3, + 0x92, 0x9d, 0xc1, 0xb4, 0x90, 0x52, 0xff, 0x92, + 0x8e, 0xf2, 0x68, 0x92, 0x43, 0xbb, 0x6b, 0x30, + 0x1f, 0xea, 0x80, 0x6f, 0xbf, 0x74, 0x1c, 0x8f, + 0x61, 0x5b, 0x42, 0x41, 0xbd, 0x3b, 0xf0, 0xbe, + 0x7d, 0xb4, 0x67, 0xc5, 0x55, 0x62, 0xcd, 0x9b, + 0x3a, 0xce, 0xb4, 0x30, 0xa3, 0x16, 0x2a, 0xca, + 0xe4, 0xbf, 0xaf, 0x46, 0x26, 0xf0, 0x42, 0x37, + 0xed, 0x7b, 0x1b, 0xa7, 0x4b, 0x07, 0x05, 0x20, + 0x00, 0x1d, 0xcc, 0x0a, 0x7a, 0x9b, 0x3e, 0x5b, + 0x89, 0xba, 0xf0, 0xc1, 0xc0, 0xf9, 0xb8, 0xb3, + 0x8f, 0x03, 0xb8, 0x6b, 0xc0, 0x94, 0xe8, 0x17, + 0xa8, 0x10, 0x26, 0x3d, 0xe5, 0x92, 0x11, 0x16, + 0xb3, 0x52, 0x56, 0xc0, 0xbe, 0xe4, 0x40, 0x18, + 0xd7, 0x3b, 0x07, 0xaa, 0xbb, 0x4e, 0x07, 0xdb, + 0x69, 0xdb, 0x72, 0x76, 0xc7, 0x7b, 0x94, 0x8a, + 0x13, 0x84, 0x20, 0x39, 0x68, 0x9f, 0xc2, 0xb2, + 0xa1, 0x1b, 0x2b, 0x14, 0x33, 0xbd, 0x2e, 0xa3, + 0x1e, 0xb1, 0x85, 0xae, 0xce, 0xb0, 0x00, 0x07, + 0x40, 0xb9, 0xe4, 0x50, 0xbc, 0x7f, 0x32, 0xbf, + 0xa9, 0x70, 0x43, 0x88, 0x22, 0x1f, 0x25, 0x8b, + 0xc4, 0x2f, 0x19, 0x9a, 0x67, 0x9b, 0x48, 0xa0, + 0x69, 0x68, 0x01, 0xc8, 0x40, 0xe8, 0x92, 0x0b, + 0xd2, 0x70, 0x3e, 0xd1, 0x40, 0xa2, 0xdb, 0xf2, + 0x3e, 0x21, 0xec, 0x6c, 0x09, 0x80, 0xa6, 0xf0, + 0x1b, 0xc7, 0x14, 0x67, 0xc7, 0x98, 0x5a, 0x53, + 0xf3, 0x61, 0xa5, 0x45, 0x31, 0x7f, 0xce, 0x81, + 0x25, 0xa6, 0xc3, 0x5a, 0xf1, 0xf3, 0x82, 0xfc, + 0x32, 0x85, 0xa9, 0x83, 0x09, 0x24, 0xf2, 0xc4, + 0xbe, 0xfb, 0x3f, 0x0f, 0xbc, 0x0b, 0x23, 0xdc, + 0x3e, 0x4a, 0x10, 0xbf, 0x3b, 0x90, 0x42, 0x40, + 0x35, 0x78, 0x3f, 0xc1, 0xa1, 0x34, 0x00, 0xb0, + 0x0b, 0xd2, 0x85, 0x8d, 0x96, 0x15, 0x77, 0x63, + 0xc8, 0x1c, 0xdb, 0x88, 0x0b, 0x21, 0xff, 0x15, + 0x1b, 0xdc, 0x67, 0x21, 0x39, 0x91, 0xd9, 0x4b, + 0xb2, 0x09, 0xda, 0x4c, 0xb8, 0x17, 0x57, 0x6c, + 0x78, 0x2d, 0x6b, 0x72, 0x3b, 0x88, 0x11, 0x3f, + 0x6d, 0xd6, 0x79, 0x99, 0xc8, 0xaa, 0xd3, 0x40, + 0xa2, 0x8e, 0x4b, 0x21, 0x6c, 0xa1, 0xc5, 0xfb, + 0x63, 0x4e, 0x0d, 0xa1, 0x73, 0x05, 0x86, 0x87, + 0xbb, 0x43, 0xcb, 0xd0, 0xbb, 0x10, 0x91, 0xf8, + 0x31, 0x7f, 0xa2, 0xc8, 0x0d, 0xb2, 0xc3, 0x04, + 0xa4, 0xa0, 0xc6, 0xcb, 0x59, 0x5c, 0x50, 0x5c, + 0x95, 0xe8, 0x07, 0x36, 0x78, 0x7e, 0x1b, 0x73, + 0x7b, 0x8c, 0x0c, 0x6d, 0x18, 0x90, 0x4a, 0xf6, + 0x19, 0x04, 0xcc, 0xbc, 0x76, 0x58, 0xdc, 0x65, + 0x70, 0x34, 0xb7, 0xfc, 0xd7, 0x05, 0x27, 0x9b, + 0xc9, 0x30, 0x0a, 0x65, 0xdb, 0xa5, 0x06, 0xc8, + 0xc1, 0xc6, 0xaa, 0x63, 0x2d, 0xd9, 0x2b, 0x0c, + 0xea, 0xd6, 0x94, 0xbf, 0xc9, 0x80, 0xd0, 0xec, + 0x7d, 0x25, 0x25, 0x06, 0x28, 0x2c, 0xcc, 0x97, + 0xea, 0x3d, 0x14, 0x89, 0x42, 0x25, 0x15, 0xcf, + 0x0a, 0xe9, 0x41, 0x9b, 0x93, 0x0f, 0xd6, 0x97, + 0x85, 0xa9, 0xac, 0x79, 0xc8, 0xf1, 0x73, 0x99, + 0xd6, 0xcf, 0x9c, 0xb7, 0x8d, 0xd7, 0x8c, 0x2a, + 0x17, 0x98, 0x77, 0x00, 0x05, 0xca, 0x7f, 0x51, + 0xce, 0x7d, 0x2c, 0x77, 0xa0, 0xfc, 0x62, 0xf7, + 0xbc, 0xba, 0x96, 0x26, 0xc6, 0xc1, 0xf7, 0xcb, + 0xfe, 0x8c, 0x39, 0x77, 0x5b, 0x7e, 0x40, 0x3b, + 0x79, 0x0a, 0x5a, 0x6e, 0x19, 0x3d, 0x82, 0x4f, + 0xa1, 0x21, 0x44, 0xaa, 0xd0, 0xe3, 0x86, 0xc0, + 0xc1, 0xc7, 0xc5, 0x03, 0x69, 0x05, 0xd9, 0x99, + 0x42, 0xdd, 0x95, 0x52, 0xa1, 0x22, 0x5f, 0xb5, + 0xfa, 0x6a, 0xc0, 0x44, 0xd0, 0x0b, 0x22, 0xab, + 0x7e, 0x29, 0xad, 0x0c, 0x28, 0xc9, 0x4b, 0xf5, + 0x61, 0x12, 0x63, 0x2a, 0x70, 0x85, 0xff, 0xac, + 0xa7, 0xa3, 0x10, 0xf2, 0x36, 0x30, 0x90, 0xc2, + 0xba, 0x00, 0xfd, 0x7e, 0x82, 0xba, 0x11, 0x56, + 0xba, 0x62, 0xf7, 0x52, 0x7a, 0x1d, 0xcd, 0x6c, + 0xe3, 0xdc, 0x20, 0x56, 0x9c, 0x1f, 0x55, 0x73, + 0xc9, 0xad, 0xa7, 0x6e, 0x83, 0xb3, 0x2d, 0x29, + 0xaa, 0x96, 0x92, 0xc1, 0x33, 0x19, 0x01, 0x03, + 0xb5, 0x39, 0x9d, 0xd8, 0xf2, 0xd5, 0xd3, 0x60, + 0x68, 0xaa, 0xea, 0x6f, 0x1a, 0x2d, 0xb4, 0xc4, + 0xa0, 0x43, 0x38, 0x3c, 0x3d, 0xf5, 0xb9, 0x4a, + 0x42, 0x97, 0x31, 0xe7, 0x1b, 0x12, 0x1c, 0xd5, + 0x0e, 0x4d, 0x5a, 0x0c, 0x5a, 0x04, 0xbc, 0x50, + 0xf6, 0x33, 0xba, 0x2c, 0x50, 0xf9, 0xac, 0x03, + 0x0b, 0x4d, 0x24, 0x6e, 0x95, 0xc6, 0x08, 0x7d, + 0x50, 0xee, 0x39, 0xa1, 0x3b, 0x54, 0xb6, 0xa5, + 0x84, 0x21, 0xf2, 0x25, 0x21, 0xf8, 0x03, 0x64, + 0x78, 0x8c, 0x33, 0x8f, 0xdd, 0xc7, 0x7b, 0x70, + 0x87, 0xf8, 0xa6, 0xa4, 0x68, 0x74, 0x49, 0x94, + 0xb4, 0x77, 0x40, 0x35, 0x56, 0xdb, 0x56, 0x27, + 0x61, 0xad, 0x4e, 0x02, 0xb2, 0x7f, 0x46, 0xd6, + 0xd8, 0xc7, 0x71, 0x8f, 0x3f, 0x2d, 0x17, 0x1f, + 0x28, 0x10, 0x0e, 0x71, 0x49, 0x23, 0x7d, 0x6f, + 0x6d, 0xa8, 0x1a, 0x57, 0x15, 0x59, 0x51, 0xbb, + 0x4a, 0x49, 0x52, 0x61, 0xb4, 0xfd, 0x62, 0xa1, + 0x2d, 0x27, 0xfa, 0x58, 0x18, 0xaf, 0xbd, 0xb7, + 0x6d, 0x23, 0x74, 0x57, 0xd7, 0xdb, 0x17, 0xfc, + 0x35, 0xe1, 0x51, 0xbb, 0x55, 0x40, 0xcc, 0x89, + 0x53, 0x20, 0x12, 0x54, 0x6f, 0x94, 0x74, 0xd7, + 0x65, 0x75, 0xdc, 0x4b, 0xd5, 0xb4, 0xb9, 0x04, + 0x06, 0x27, 0xbb, 0x1b, 0x53, 0xf9, 0xb5, 0xae, + 0x8b, 0x87, 0x7e, 0x49, 0x30, 0xae, 0xe6, 0xa5, + 0x3a, 0x07, 0x22, 0x2f, 0x7c, 0x15, 0xcd, 0xdd, + 0x37, 0xc9, 0x9d, 0x01, 0xe9, 0xe5, 0xff, 0x86, + 0xac, 0x91, 0xce, 0x90, 0xb0, 0xd7, 0xf7, 0x63, + 0xb2, 0x51, 0x48, 0x47, 0xd4, 0x47, 0xd4, 0xed, + 0x01, 0xdc, 0xce, 0x7c, 0x3d, 0x1f, 0x5d, 0xdb, + 0xcd, 0x35, 0x51, 0x05, 0x5e, 0x6d, 0xdd, 0x7b, + 0x6b, 0x52, 0x75, 0xe0, 0x98, 0xf7, 0x60, 0x72, + 0x86, 0x2e, 0x71, 0x63, 0xc5, 0x7e, 0xb9, 0x13, + 0x48, 0x2d, 0xd3, 0x44, 0x32, 0x23, 0x86, 0x22, + 0xd7, 0x18, 0x46, 0x3d, 0x6b, 0xaa, 0x05, 0x80, + 0xa9, 0x3b, 0x91, 0xf5, 0x75, 0x48, 0xe3, 0x42, + 0xc0, 0x85, 0x93, 0xb1, 0x94, 0x93, 0x48, 0x60, + 0x0f, 0xb1, 0xd9, 0xd5, 0x70, 0x2a, 0x2a, 0x94, + 0x15, 0x80, 0xee, 0x1c, 0xc9, 0x52, 0xa6, 0xdd, + 0x6e, 0xf0, 0xcf, 0x9a, 0x09, 0x48, 0xbf, 0xd1, + 0x31, 0x3a, 0x11, 0x16, 0xda, 0xb5, 0x04, 0x19, + 0x3e, 0x6b, 0xf5, 0x7d, 0x78, 0xf8, 0x6d, 0x65, + 0xf3, 0x69, 0x3c, 0xae, 0x1b, 0xa3, 0x36, 0x65, + 0x54, 0x22, 0xc6, 0x61, 0x86, 0xfc, 0x82, 0x12, + 0xb8, 0xe0, 0xe5, 0x5a, 0x5a, 0xe0, 0x9d, 0xb7, + 0xa1, 0x38, 0xa7, 0x03, 0x05, 0xb6, 0x28, 0x52, + 0x9b, 0x19, 0x0a, 0x42, 0x79, 0xd1, 0xc3, 0xc1, + 0xab, 0x24, 0x31, 0xa0, 0x86, 0xf3, 0xbd, 0x4e, + 0x9f, 0x7d, 0x27, 0x45, 0x0e, 0x0a, 0x2e, 0xac, + 0xbe, 0x83, 0xb2, 0x33, 0x7d, 0x0a, 0x63, 0x0d, + 0x4e, 0x1a, 0x39, 0xa5, 0x2a, 0xa0, 0x56, 0x59, + 0x8a, 0x98, 0xe7, 0xa8, 0x02, 0x2c, 0xd5, 0x2c, + 0x17, 0x56, 0xee, 0xe1, 0x7d, 0xfb, 0x84, 0xfe, + 0xf3, 0x82, 0xd8, 0xf2, 0x61, 0x0d, 0x2c, 0xab, + 0x0a, 0x83, 0x6d, 0xf5, 0x82, 0x6e, 0xa2, 0xd1, + 0x79, 0x47, 0x0e, 0x94, 0xda, 0xd0, 0x26, 0xc1, + 0x2d, 0x3b, 0xd2, 0x1d, 0x52, 0x6b, 0x7e, 0xb9, + 0x82, 0x7e, 0x9c, 0x4f, 0x98, 0xe6, 0x4e, 0xdd, + 0xc8, 0x04, 0x75, 0x6c, 0x1c, 0x74, 0xff, 0xb1, + 0x78, 0xa3, 0x0a, 0xd5, 0xd3, 0x30, 0xa2, 0xcc, + 0x15, 0x8b, 0xfd, 0x1f, 0x7a, 0xe5, 0xd0, 0x1a, + 0x07, 0xe8, 0x74, 0xa4, 0xc7, 0x50, 0x48, 0xcf, + 0x3e, 0x50, 0x89, 0x7d, 0x9e, 0xb9, 0x07, 0xc2, + 0xa4, 0x0d, 0x53, 0x42, 0xa5, 0xee, 0xde, 0xeb, + 0xc1, 0x38, 0x25, 0xf2, 0xd1, 0x10, 0x41, 0x8b, + 0xde, 0x9d, 0x03, 0x82, 0x7e, 0x90, 0xb8, 0x8d, + 0x5a, 0xbc, 0x7d, 0x4c, 0xdf, 0x7a, 0x7e, 0x35, + 0x3e, 0xb8, 0x34, 0xa3, 0x9e, 0x1e, 0x53, 0xd4, + 0x48, 0x82, 0x0d, 0x6b, 0x74, 0xdb, 0x5e, 0x8d, + 0x07, 0x58, 0x1a, 0xa4, 0xdf, 0x45, 0xd4, 0xb9, + 0x28, 0xe9, 0x05, 0xd3, 0x8a, 0xdb, 0x85, 0x59, + 0x30, 0x2e, 0x29, 0x76, 0xd4, 0xbf, 0x4c, 0xb8, + 0x45, 0x26, 0x15, 0x52, 0xb8, 0xfc, 0x36, 0x47, + 0x74, 0xb7, 0x04, 0x7c, 0x6c, 0x24, 0xde, 0x06, + 0xed, 0xc2, 0x46, 0x8b, 0xbe, 0xdc, 0xc7, 0x6c, + 0xb1, 0xe3, 0xa3, 0x7e, 0x59, 0xe6, 0x86, 0x54, + 0xbe, 0x25, 0x57, 0x0e, 0x3f, 0x7d, 0xd4, 0xad, + 0x5c, 0x6e, 0xb2, 0xf3, 0x9e, 0x7e, 0x06, 0xb4, + 0x33, 0xc5, 0xd1, 0x29, 0xeb, 0x0e, 0x82, 0x85, + 0x80, 0xc3, 0x1f, 0x15, 0x96, 0x76, 0x08, 0xe1, + 0xbc, 0x80, 0x0a, 0xdb, 0x1e, 0x63, 0x5e, 0xd6, + 0x67, 0x42, 0x7c, 0xc8, 0x75, 0x41, 0x35, 0x54, + 0x1b, 0xb9, 0x79, 0x70, 0xde, 0xb0, 0x7d, 0x4a, + 0x97, 0xee, 0x08, 0x60, 0x45, 0x3a, 0xc9, 0x1e, + 0xef, 0xa2, 0x70, 0x62, 0x61, 0x15, 0xb0, 0x47, + 0x51, 0x39, 0x19, 0xdb, 0x20, 0xeb, 0x3b, 0x4c, + 0xff, 0xfe, 0x0c, 0xc3, 0x9e, 0x63, 0xf2, 0x5e, + 0xe9, 0xb9, 0xe3, 0x91, 0x3f, 0xfa, 0x10, 0xb0, + 0xe5, 0xea, 0x2f, 0x2f, 0xe7, 0xe2, 0x94, 0xea, + 0xab, 0x10, 0x87, 0x46, 0x7d, 0xf3, 0x9f, 0x6e, + 0x32, 0x47, 0x70, 0x41, 0x88, 0xd4, 0xff, 0xba, + 0xb3, 0x9e, 0xe6, 0x11, 0x32, 0xf3, 0x34, 0x6f, + 0xf3, 0xb6, 0x63, 0xed, 0x14, 0xe8, 0xdf, 0xf2, + 0xf2, 0x46, 0x55, 0xe3, 0x39, 0x69, 0x34, 0xee, + 0x3c, 0xdc, 0xef, 0x7a, 0x51, 0xf3, 0xef, 0x32, + 0x41, 0xc5, 0x81, 0x2d, 0x72, 0x17, 0x70, 0x96, + 0x77, 0x38, 0x9b, 0x79, 0xee, 0x9d, 0xde, 0x0f, + 0x5e, 0x7f, 0x16, 0x23, 0xcf, 0x09, 0x3f, 0x83, + 0x10, 0xb4, 0x5a, 0x50, 0xb9, 0xc8, 0x87, 0x48, + 0x43, 0x31, 0xc0, 0x29, 0x8f, 0x50, 0xc0, 0xd1, + 0x6d, 0x3f, 0x15, 0x12, 0x3f, 0x0e, 0xea, 0xe9, + 0x50, 0xba, 0x82, 0xb9, 0xda, 0x8d, 0xf3, 0x8c, + 0x42, 0x04, 0xe9, 0xe1, 0x1b, 0xd2, 0xb7, 0x3d, + 0xa9, 0x8e, 0xd8, 0x3d, 0x22, 0xf4, 0xb3, 0xc1, + 0x22, 0xba, 0xca, 0xa9, 0x56, 0x7f, 0xf4, 0x63, + 0x12, 0x2d, 0x00, 0x93, 0xf5, 0xda, 0xfe, 0xf3, + 0x3a, 0x25, 0xf3, 0xae, 0xbe, 0x09, 0x92, 0xeb, + 0x3e, 0x2c, 0xf8, 0xe8, 0xb9, 0x79, 0xf1, 0xb5, + 0xe8, 0x28, 0xef, 0x36, 0x77, 0xb5, 0xae, 0x79, + 0xa4, 0x8f, 0xc9, 0x4e, 0xbf, 0x1f, 0xeb, 0x2e, + 0x0e, 0x5c, 0x3f, 0xab, 0x0e, 0xba, 0xe8, 0x56, + 0x50, 0xf7, 0xb7, 0xaf, 0xb6, 0xa9, 0x8f, 0xea, + 0x8b, 0xe7, 0x96, 0x7b, 0x57, 0xae, 0x0d, 0x8f, + 0x45, 0x6f, 0xbf, 0x09, 0x70, 0x25, 0xe8, 0x56, + 0xc8, 0xf9, 0x50, 0xd6, 0x2e, 0x9d, 0x8e, 0xbe, + 0x43, 0x27, 0x49, 0x54, 0xdb, 0x43, 0x95, 0xf3, + 0xa3, 0xb3, 0x10, 0x7b, 0x2d, 0xce, 0xea, 0x7d, + 0x03, 0xf5, 0xce, 0xf0, 0x5d, 0xb6, 0xe8, 0xe3, + 0xbe, 0x48, 0xf0, 0xe9, 0x13, 0x7b, 0x71, 0xef, + 0x31, 0x98, 0x6d, 0xce, 0x7f, 0xd9, 0xfa, 0x01, + 0xd5, 0xa4, 0x21, 0x04, 0xf9, 0x9e, 0xb0, 0xf6, + 0x82, 0xe6, 0x13, 0x93, 0xae, 0x67, 0xa6, 0xbf, + 0x38, 0x9b, 0x05, 0x46, 0x20, 0x15, 0xff, 0x0d, + 0x5a, 0x6e, 0x21, 0x43, 0xe9, 0x7b, 0x6b, 0xaf, + 0xe6, 0x42, 0x01, 0x01, 0x8c, 0x00, 0x5a, 0xed, + 0xbd, 0x03, 0xef, 0x4a, 0xd8, 0x90, 0x2e, 0x62, + 0xe2, 0xca, 0x8e, 0x31, 0x53, 0x62, 0xc1, 0x46, + 0x46, 0x62, 0xd3, 0x6b, 0x09, 0x94, 0x80, 0x94, + 0xd5, 0x8b, 0x09, 0x16, 0x09, 0x2f, 0x01, 0x73, + 0x43, 0x62, 0xd1, 0x78, 0x44, 0x26, 0x39, 0x1f, + 0x65, 0xd3, 0xf9, 0xac, 0x68, 0x90, 0x2f, 0xa4, + 0xe7, 0x45, 0x0a, 0x25, 0x3d, 0xca, 0xc1, 0x8d, + 0x43, 0x18, 0x2c, 0x84, 0xa9, 0xae, 0x2d, 0x0b, + 0xed, 0x04, 0x24, 0x83, 0xc4, 0x18, 0xfd, 0x86, + 0xc7, 0xe5, 0xa6, 0x81, 0x7b, 0x7e, 0x6f, 0x6e, + 0x91, 0xe2, 0xfc, 0x8b, 0xaa, 0x3c, 0x33, 0xea, + 0x52, 0xa3, 0xd0, 0xab, 0xb8, 0xba, 0xca, 0x19, + 0x6c, 0xf3, 0xb0, 0x33, 0x1a, 0xa1, 0x40, 0x01, + 0x20, 0xf0, 0x12, 0x71, 0xc4, 0xc3, 0xcc, 0xd4, + 0x5c, 0xd1, 0xec, 0x4c, 0x92, 0x3a, 0x02, 0x43, + 0x63, 0xf0, 0xb9, 0xa4, 0x53, 0x4a, 0x08, 0xe8, + 0xe9, 0x00, 0xaa, 0x2b, 0x4c, 0x34, 0xa1, 0x0c, + 0x00, 0x85, 0x6c, 0x62, 0x48, 0xd8, 0x68, 0x6b, + 0x01, 0xf5, 0xec, 0xf5, 0x7d, 0x63, 0xfa, 0x15, + 0xfe, 0xe2, 0x2d, 0xfa, 0x7b, 0x0a, 0x01, 0x0b, + 0x94, 0x31, 0x3c, 0x52, 0x0d, 0xb3, 0x8b, 0xb1, + 0xb0, 0x32, 0x09, 0x9e, 0xae, 0x3d, 0x2a, 0xd0, + 0x15, 0xe1, 0x00, 0x19, 0xfe, 0x06, 0x1f, 0xe2, + 0x0b, 0x07, 0x5f, 0x26, 0x72, 0x85, 0x92, 0x2c, + 0x54, 0x36, 0x8d, 0x6c, 0x2f, 0xe9, 0x1a, 0x29, + 0xae, 0x90, 0xb6, 0x7c, 0x17, 0x31, 0x97, 0x51, + 0x50, 0x28, 0x1c, 0x37, 0xa9, 0x27, 0x17, 0x30, + 0x1c, 0xa7, 0x37, 0xf7, 0x04, 0x02, 0x98, 0x37, + 0x44, 0x14, 0x94, 0x66, 0x27, 0x40, 0x5c, 0xca, + 0x37, 0xc4, 0xdb, 0x42, 0x11, 0x09, 0xff, 0x9f, + 0x34, 0x32, 0x86, 0xa5, 0x52, 0x2c, 0x8b, 0x07, + 0x3d, 0x66, 0xb2, 0x76, 0x31, 0x00, 0xae, 0x8f, + 0x25, 0x22, 0xca, 0x40, 0x77, 0xf1, 0x92, 0x87, + 0x94, 0x19, 0x9a, 0x8c, 0x6b, 0x49, 0xc1, 0xdb, + 0x1d, 0x6c, 0x2d, 0x0a, 0x61, 0xa0, 0xf1, 0x2e, + 0x66, 0x49, 0x9e, 0x73, 0xfc, 0x41, 0xa1, 0xa1, + 0xae, 0x67, 0x14, 0x2e, 0xc0, 0x14, 0x0e, 0x68, + 0xd9, 0xb0, 0x08, 0xc1, 0x49, 0xf3, 0x76, 0x76, + 0x52, 0xc6, 0x06, 0xe7, 0x46, 0x8e, 0x43, 0xad, + 0xca, 0x01, 0xc8, 0xf0, 0x98, 0x9c, 0x15, 0x09, + 0x16, 0x3c, 0xcd, 0xa1, 0xf4, 0x28, 0x43, 0xaf, + 0x46, 0x3e, 0x84, 0x38, 0xc9, 0x8c, 0xd6, 0xbc, + 0xac, 0xbf, 0x68, 0x60, 0x08, 0x99, 0x22, 0xed, + 0x55, 0xba, 0x43, 0xe2, 0x16, 0x04, 0x6b, 0x6b, + 0xa4, 0x2a, 0x55, 0x06, 0x2d, 0x74, 0x44, 0xe9, + 0xf7, 0x0b, 0x5f, 0xa1, 0x0a, 0x3f, 0xfc, 0x14, + 0xd4, 0x0a, 0x08, 0xc5, 0x6f, 0x5d, 0x9e, 0xe4, + 0xad, 0x1b, 0x99, 0x8e, 0xe0, 0xc4, 0x70, 0x28, + 0xa5, 0xe2, 0xdb, 0xf7, 0x51, 0x61, 0x22, 0x8c, + 0x95, 0xd0, 0x48, 0xd5, 0x36, 0x2c, 0x88, 0xb9, + 0x1c, 0x7e, 0x6e, 0xdd, 0x3a, 0x4c, 0xac, 0x59, + 0xce, 0x92, 0x5d, 0x97, 0x10, 0x0d, 0x27, 0xb5, + 0x5e, 0xcc, 0x99, 0x63, 0x77, 0xa3, 0x1c, 0xa9, + 0xf5, 0x11, 0x1a, 0xcf, 0x92, 0x24, 0x3b, 0x6b, + 0x90, 0x29, 0x3d, 0x0b, 0x88, 0x5f, 0x1f, 0x47, + 0x3e, 0x76, 0x13, 0x64, 0x22, 0x3c, 0x54, 0x25, + 0x38, 0x90, 0x59, 0x38, 0xe0, 0x14, 0xb7, 0x97, + 0x3e, 0xcf, 0x8d, 0x10, 0x1f, 0x73, 0xdd, 0x18, + 0x52, 0x5a, 0x4f, 0x1e, 0x5e, 0xfc, 0x4c, 0x91, + 0x1d, 0xc1, 0x64, 0x9f, 0x96, 0xd9, 0xc6, 0x5e, + 0x83, 0xdc, 0x89, 0xbd, 0x71, 0xff, 0x65, 0xf7, + 0x07, 0x53, 0xc6, 0x67, 0x7a, 0x2e, 0xff, 0x89, + 0x5e, 0x3c, 0x72, 0xf0, 0x45, 0x52, 0xed, 0x96, + 0x09, 0x40, 0x22, 0x16, 0xa8, 0x8d, 0x2f, 0x92, + 0x46, 0xe3, 0x42, 0xbf, 0x6b, 0x6c, 0xb9, 0x04, + 0xb2, 0xb6, 0x16, 0x22, 0x4f, 0x20, 0x05, 0xf7, + 0x0b, 0x6f, 0xb8, 0x8b, 0x90, 0x5a, 0x29, 0xbe, + 0x2f, 0x0a, 0x7c, 0xc6, 0x87, 0x1c, 0x4a, 0xfb, + 0xa2, 0x3f, 0xbb, 0xf4, 0xa3, 0x6e, 0xb5, 0xa6, + 0xba, 0xa1, 0xc0, 0xb8, 0x81, 0x26, 0x98, 0x90, + 0x42, 0xd7, 0x66, 0xbb, 0x30, 0x43, 0xfd, 0xba, + 0xc2, 0x4e, 0x26, 0x15, 0x3b, 0xa0, 0x6e, 0x32, + 0x34, 0x4c, 0x0c, 0x4b, 0xc0, 0x48, 0xe0, 0xb1, + 0x23, 0x04, 0x11, 0x0b, 0x82, 0x31, 0x0a, 0x0d, + 0x5d, 0xa4, 0xf0, 0xc6, 0xc7, 0x4c, 0x89, 0x50, + 0x0b, 0x21, 0xc0, 0xb8, 0x11, 0xc4, 0x0d, 0xf0, + 0x53, 0xa2, 0xa6, 0x23, 0x4a, 0x73, 0xe4, 0xc6, + 0x46, 0x72, 0xbc, 0xc8, 0x92, 0x58, 0x7c, 0x44, + 0x32, 0x4c, 0x0b, 0xe3, 0x60, 0xee, 0xbc, 0x39, + 0xa0, 0x7c, 0x92, 0xcb, 0x25, 0xc0, 0x3c, 0xc7, + 0x09, 0x2e, 0xed, 0x18, 0xf3, 0xaf, 0x23, 0x37, + 0x6b, 0xb1, 0xc2, 0x30, 0xab, 0xc2, 0xa4, 0xc9, + 0x5d, 0xea, 0x6c, 0xe1, 0x2b, 0x1c, 0xa4, 0xdc, + 0x60, 0x48, 0x66, 0xd8, 0x6c, 0x61, 0x04, 0x2a, + 0xf1, 0xe9, 0x46, 0x40, 0xa9, 0x30, 0xb9, 0xc7, + 0xca, 0x3b, 0x1f, 0xdd, 0x60, 0xce, 0x29, 0x72, + 0xbc, 0xab, 0xa0, 0xaf, 0x4e, 0xfc, 0x8d, 0xd0, + 0x0f, 0x05, 0x63, 0x91, 0xa5, 0x76, 0x22, 0x52, + 0x72, 0x12, 0x41, 0xf1, 0xa0, 0x84, 0x4d, 0x40, + 0x03, 0x42, 0x00, 0xd2, 0x40, 0xf9, 0xc4, 0x93, + 0x23, 0x56, 0x77, 0x58, 0x20, 0xd4, 0xea, 0x64, + 0x33, 0x0b, 0x08, 0x0f, 0xe9, 0x50, 0x31, 0x4e, + 0x39, 0x05, 0xe2, 0x21, 0x47, 0x4a, 0x5e, 0x25, + 0x35, 0x55, 0x55, 0xa7, 0x19, 0x35, 0xff, 0x8f, + 0x32, 0xf5, 0xb4, 0xf4, 0x56, 0xd6, 0x80, 0xf1, + 0xab, 0x26, 0x2b, 0xb2, 0xf4, 0xcd, 0x3b, 0x1f, + 0x63, 0xe5, 0x75, 0x15, 0xb9, 0xa8, 0xa2, 0x4b, + 0xd8, 0x61, 0x23, 0x51, 0x73, 0x47, 0x59, 0x11, + 0xea, 0x56, 0x90, 0xa6, 0xbe, 0x9d, 0x01, 0x8e, + 0x70, 0x01, 0x28, 0xac, 0x0e, 0x47, 0x0b, 0xd9, + 0xeb, 0xc0, 0xe2, 0x56, 0x2a, 0x85, 0x26, 0x42, + 0xbb, 0xb8, 0xb4, 0x1a, 0x6c, 0xaf, 0x02, 0xb6, + 0x24, 0x49, 0x9d, 0x30, 0x53, 0x85, 0x7d, 0xbf, + 0xc4, 0x91, 0x5c, 0x4c, 0xb5, 0x5a, 0x4a, 0x08, + 0x0d, 0xd6, 0x9d, 0xa4, 0x06, 0x6b, 0x89, 0x95, + 0x4b, 0x02, 0x4d, 0x43, 0x31, 0x15, 0x97, 0x15, + 0x1c, 0x89, 0x47, 0x32, 0x84, 0xef, 0x14, 0x98, + 0x4c, 0x30, 0x95, 0x31, 0xb7, 0x4f, 0xee, 0x8a, + 0xad, 0xa6, 0xd9, 0xc5, 0x50, 0x40, 0x58, 0x16, + 0x42, 0x8a, 0x1b, 0xa9, 0xba, 0x09, 0xce, 0xd5, + 0x04, 0xa9, 0xd9, 0x78, 0x78, 0x2d, 0x5f, 0x8f, + 0x74, 0xed, 0xa4, 0x52, 0xb8, 0xfe, 0xdd, 0x01, + 0x4e, 0x3f, 0x89, 0x4d, 0xc0, 0x2b, 0x64, 0xb5, + 0x78, 0x78, 0x12, 0x97, 0x26, 0x81, 0xb6, 0x18, + 0xe7, 0xee, 0xed, 0x20, 0x06, 0x96, 0x37, 0x99, + 0xa5, 0xd0, 0x6d, 0x93, 0x3b, 0xd4, 0x13, 0x9b, + 0x45, 0xc8, 0xf8, 0xbd, 0x6a, 0xea, 0x75, 0xae, + 0xb6, 0xa5, 0x97, 0x10, 0x79, 0x1a, 0x29, 0x00, + 0x73, 0x03, 0x34, 0xa4, 0xb9, 0x75, 0x87, 0xa7, + 0xb2, 0x1e, 0x91, 0xf9, 0xe9, 0x26, 0x7e, 0xee, + 0xa5, 0x5f, 0x32, 0xb6, 0x96, 0xe9, 0x1d, 0x52, + 0xba, 0xe0, 0x70, 0xec, 0x2b, 0xcd, 0xca, 0x99, + 0x68, 0xde, 0x6a, 0x34, 0x8d, 0x84, 0x5a, 0xd2, + 0xbe, 0x92, 0xb2, 0x8b, 0xd5, 0xfe, 0xa6, 0x6a, + 0x9a, 0xc8, 0x25, 0x25, 0x37, 0x1e, 0x31, 0xa8, + 0x5b, 0x15, 0x90, 0x9d, 0xee, 0xcc, 0xff, 0xe0, + 0xb2, 0x05, 0xd1, 0x2c, 0x44, 0x0b, 0x82, 0xb6, + 0x6a, 0x70, 0xc2, 0x85, 0x79, 0xdc, 0xa7, 0x77, + 0x56, 0xc0, 0xfc, 0xdc, 0xbd, 0x6a, 0xc0, 0xac, + 0x67, 0x28, 0xce, 0x0d, 0x64, 0x8b, 0xc5, 0x37, + 0x74, 0x84, 0x80, 0xb3, 0x7f, 0x44, 0xf2, 0xd4, + 0xcd, 0x19, 0x85, 0x7b, 0x0e, 0xa4, 0x24, 0xd2, + 0xf0, 0xd4, 0xcb, 0x54, 0xd9, 0xc7, 0x40, 0x95, + 0xf0, 0xfe, 0x6b, 0x72, 0x41, 0x04, 0x04, 0x6d, + 0xc1, 0xfc, 0x66, 0x17, 0xaf, 0xc8, 0x72, 0xd4, + 0x9c, 0x18, 0xc1, 0xeb, 0x32, 0x33, 0xb0, 0x73, + 0xa2, 0x0a, 0x9e, 0x46, 0x92, 0xad, 0xad, 0x7b, + 0xce, 0xf8, 0x80, 0x48, 0xf9, 0x01, 0xf9, 0xf0, + 0x70, 0xc6, 0x83, 0x94, 0x01, 0x73, 0x94, 0xb4, + 0x67, 0xe8, 0x43, 0x9b, 0x51, 0xb0, 0xc2, 0x92, + 0x51, 0x9c, 0xba, 0xd0, 0xb8, 0x09, 0x68, 0x8b, + 0xdb, 0xbd, 0x4f, 0xce, 0x70, 0x4f, 0x9a, 0xff, + 0x50, 0xc9, 0xd5, 0xa7, 0x1c, 0x29, 0x15, 0xf3, + 0xeb, 0xd8, 0xd9, 0x14, 0xba, 0x86, 0x23, 0x99, + 0x24, 0x41, 0x56, 0x09, 0x98, 0x47, 0x9d, 0x34, + 0x17, 0x8b, 0x3c, 0xd0, 0x8f, 0x1c, 0x34, 0x8b, + 0x9f, 0xc0, 0x40, 0xc7, 0x0a, 0x16, 0xc1, 0xed, + 0x68, 0xd1, 0x42, 0x57, 0xbd, 0x96, 0x12, 0xb4, + 0xf5, 0xb1, 0x48, 0x40, 0x3a, 0x53, 0x41, 0x5b, + 0xc0, 0x57, 0x81, 0xd7, 0x39, 0x90, 0x7e, 0x51, + 0x3b, 0x88, 0xb2, 0x64, 0x90, 0xb8, 0xde, 0x20, + 0x10, 0x7c, 0x48, 0x79, 0x08, 0x5c, 0x34, 0xf8, + 0xa1, 0x50, 0x0c, 0xed, 0x24, 0xa6, 0xdb, 0xc0, + 0xd4, 0x02, 0x34, 0xa5, 0xc5, 0x2c, 0x70, 0x07, + 0x27, 0x33, 0x21, 0xfd, 0x94, 0xe7, 0x11, 0xf1, + 0x29, 0xa4, 0x36, 0xef, 0xab, 0x12, 0xa5, 0x54, + 0x18, 0x04, 0x0e, 0x22, 0xca, 0x44, 0x3c, 0x70, + 0xd7, 0xbb, 0x54, 0xb6, 0xc2, 0x91, 0xff, 0x40, + 0x03, 0x21, 0xed, 0x48, 0x45, 0x10, 0x4d, 0x38, + 0xc2, 0xfb, 0x09, 0xac, 0x74, 0x7c, 0x43, 0x82, + 0x7b, 0xa0, 0xe4, 0x23, 0xdd, 0xa5, 0x4b, 0x78, + 0x2d, 0x40, 0x1a, 0x0a, 0x45, 0x95, 0x83, 0xf7, + 0x81, 0x21, 0x15, 0xd4, 0xe9, 0x95, 0x2d, 0x82, + 0xa0, 0xc5, 0xa1, 0xd8, 0xef, 0x1b, 0xf8, 0x8b, + 0x05, 0x66, 0xd6, 0x63, 0xb7, 0x86, 0x2d, 0x25, + 0x0c, 0xbb, 0xd9, 0xdf, 0x34, 0x10, 0xa5, 0x9d, + 0x39, 0xf6, 0x8d, 0x0c, 0x6c, 0x4a, 0x05, 0x0e, + 0xe8, 0x45, 0xbc, 0x00, 0xb8, 0x49, 0x34, 0xb5, + 0xa3, 0x23, 0x1e, 0xa4, 0x37, 0x8c, 0x25, 0xe6, + 0xe2, 0x7c, 0xd9, 0x01, 0x19, 0x9a, 0xe0, 0x52, + 0xc3, 0xbf, 0x4c, 0x40, 0x76, 0xfd, 0x90, 0x81, + 0x88, 0x66, 0xe8, 0x8d, 0xb9, 0xb9, 0x61, 0x1b, + 0xb6, 0xe0, 0x83, 0x3a, 0x10, 0x80, 0xb9, 0x48, + 0x66, 0x02, 0x82, 0x43, 0x99, 0x9f, 0x49, 0x2e, + 0x19, 0x46, 0xf4, 0xac, 0xc0, 0x1f, 0x81, 0xec, + 0x40, 0x45, 0x0a, 0x18, 0x46, 0x32, 0xbe, 0xe9, + 0x49, 0x97, 0x0b, 0x20, 0x57, 0xd8, 0x30, 0xc9, + 0x56, 0xd2, 0x2e, 0x39, 0x89, 0xb3, 0x57, 0xcf, + 0x00, 0x78, 0x2e, 0x35, 0x86, 0x25, 0x56, 0x9e, + 0xe4, 0x64, 0x14, 0x3a, 0xc5, 0x40, 0x43, 0xfe, + 0x43, 0x6e, 0xed, 0x58, 0x01, 0x17, 0x4d, 0xc3, + 0xc7, 0x62, 0x82, 0x83, 0x6d, 0x74, 0xc1, 0x23, + 0x5c, 0x6a, 0x62, 0x45, 0x71, 0x24, 0x8b, 0x83, + 0x8b, 0xf9, 0xda, 0x6f, 0x4a, 0x24, 0xa2, 0x8d, + 0xf5, 0xc3, 0x8e, 0xd5, 0x21, 0x67, 0x37, 0x3d, + 0xa2, 0x4d, 0x70, 0x7c, 0x05, 0x31, 0x62, 0x99, + 0xe0, 0x0a, 0x59, 0xf9, 0x8f, 0x60, 0xae, 0x30, + 0x6f, 0x3c, 0xca, 0x12, 0x93, 0xd8, 0xe4, 0x43, + 0xa1, 0x89, 0x8a, 0x9e, 0xaf, 0x20, 0xa8, 0x3c, + 0x3d, 0xf1, 0x4e, 0x8f, 0x64, 0x2f, 0xff, 0x78, + 0xf0, 0x08, 0x55, 0x33, 0xd1, 0x96, 0x41, 0xee, + 0xa4, 0x4e, 0x0a, 0x09, 0x65, 0xd8, 0xac, 0x68, + 0xb8, 0x94, 0x7e, 0xa0, 0xa3, 0x45, 0x3a, 0x54, + 0xa8, 0x5b, 0x5c, 0xd4, 0x1b, 0x45, 0x9a, 0xc2, + 0x75, 0x00, 0x62, 0x28, 0x8a, 0x0e, 0x31, 0xc3, + 0x1c, 0xe6, 0x4d, 0x6f, 0x5f, 0x80, 0x8d, 0x29, + 0x40, 0xfa, 0x8a, 0x2a, 0x54, 0x10, 0x29, 0x51, + 0x04, 0x44, 0x48, 0x25, 0x44, 0x4c, 0x5e, 0x35, + 0x6f, 0x88, 0x7f, 0x31, 0xce, 0x4f, 0x03, 0xe7, + 0x1d, 0x96, 0x1e, 0x02, 0x9d, 0xac, 0x08, 0x05, + 0x78, 0x10, 0x97, 0x1d, 0x8c, 0xb8, 0x6e, 0x23, + 0x80, 0xd3, 0xe9, 0x72, 0xee, 0x94, 0xcd, 0x87, + 0x9d, 0xd4, 0x6b, 0x71, 0x30, 0xd1, 0x1f, 0x37, + 0x79, 0xb9, 0x56, 0xc0, 0x34, 0x51, 0x21, 0x54, + 0x08, 0xbf, 0x50, 0x90, 0x80, 0xc3, 0x18, 0x6a, + 0x9f, 0x51, 0x1d, 0x08, 0x81, 0x20, 0x99, 0x1f, + 0x04, 0x1e, 0x81, 0x9c, 0x07, 0x3d, 0xe3, 0x2e, + 0x3c, 0xd4, 0x15, 0xa1, 0x78, 0xc6, 0x6d, 0x37, + 0xb1, 0x1c, 0x19, 0xa0, 0xaa, 0x4b, 0x51, 0x89, + 0xe1, 0x93, 0x68, 0x0d, 0x47, 0x6f, 0xb8, 0xf9, + 0x1a, 0x0d, 0x20, 0x73, 0x29, 0x64, 0x15, 0xea, + 0x66, 0x46, 0x43, 0x20, 0x87, 0xc6, 0x95, 0x5b, + 0x1e, 0xac, 0xc6, 0x3a, 0xed, 0x82, 0x55, 0x92, + 0x75, 0x61, 0xad, 0x80, 0xbd, 0x5f, 0x0d, 0x0e, + 0xd0, 0xb3, 0xbd, 0x76, 0xc2, 0xa3, 0x95, 0x0c, + 0xe5, 0x60, 0xc5, 0xd5, 0x9c, 0x76, 0x11, 0xd0, + 0x24, 0xdd, 0x2b, 0x01, 0x4e, 0xa5, 0x15, 0x16, + 0x60, 0x25, 0xa3, 0x8a, 0x98, 0xad, 0x0b, 0x25, + 0x14, 0x70, 0x80, 0xcd, 0x5e, 0x96, 0x1c, 0xcb, + 0x28, 0xea, 0x21, 0x41, 0xeb, 0x24, 0x63, 0x8c, + 0x8e, 0x04, 0x23, 0x9c, 0xa9, 0x88, 0x30, 0x4a, + 0x4d, 0x86, 0xd9, 0x12, 0xb6, 0x99, 0xff, 0x0b, + 0x00, 0x6d, 0x0f, 0xa0, 0x00, 0xd5, 0xc6, 0xac, + 0x35, 0x61, 0x38, 0x87, 0x24, 0x9e, 0x79, 0xba, + 0x47, 0x60, 0x27, 0x56, 0x89, 0x9d, 0x62, 0x64, + 0x47, 0xc4, 0x90, 0x2f, 0x40, 0x82, 0x7b, 0xc7, + 0xed, 0x49, 0x02, 0x66, 0x4b, 0x5b, 0xd1, 0x0e, + 0x25, 0x6a, 0xae, 0xc3, 0x26, 0x2f, 0xac, 0xca, + 0xa0, 0x47, 0x90, 0xc7, 0x75, 0x29, 0x0d, 0x6e, + 0xa3, 0xd4, 0x31, 0xdc, 0x5c, 0x06, 0xc1, 0x15, + 0x1f, 0x88, 0x25, 0x78, 0x03, 0x32, 0x80, 0xf1, + 0x46, 0xe7, 0xac, 0x0f, 0x5c, 0x27, 0x75, 0xda, + 0x32, 0xdd, 0x2a, 0x84, 0x0e, 0x1f, 0xb6, 0xc4, + 0xa4, 0x49, 0xc3, 0x05, 0x8d, 0xcb, 0xd0, 0x04, + 0x12, 0x94, 0x48, 0xa9, 0x7e, 0x0b, 0xa2, 0x59, + 0xff, 0x7e, 0x4f, 0x27, 0xb1, 0x01, 0xcb, 0x7a, + 0x47, 0x4b, 0xbd, 0x4e, 0x46, 0x82, 0xc0, 0xcd, + 0x51, 0x2a, 0xa7, 0xd8, 0x90, 0x32, 0x57, 0x8a, + 0x21, 0xbf, 0x12, 0xfe, 0x06, 0x14, 0x2b, 0x77, + 0x9c, 0xdc, 0xf1, 0x01, 0x4a, 0x75, 0xf8, 0xe9, + 0x87, 0x37, 0xe5, 0xd6, 0x41, 0xae, 0x34, 0x63, + 0xa1, 0x22, 0x05, 0x23, 0x82, 0xe6, 0xb8, 0x2a, + 0x9d, 0x92, 0x9a, 0xf4, 0x41, 0x31, 0x38, 0x5c, + 0xf7, 0x9f, 0x63, 0x72, 0xea, 0x2b, 0x05, 0xea, + 0x8f, 0xeb, 0x98, 0x87, 0xb9, 0x65, 0x58, 0xa4, + 0x94, 0x2b, 0x04, 0x0c, 0x0c, 0x48, 0x41, 0x62, + 0x22, 0x20, 0xd1, 0xad, 0x89, 0xec, 0x6e, 0x37, + 0xe0, 0x1a, 0x64, 0xbb, 0x90, 0xac, 0xb3, 0x71, + 0xf8, 0xab, 0xc9, 0x7c, 0x27, 0x91, 0x6f, 0xc9, + 0xae, 0x21, 0x69, 0x79, 0x72, 0x4c, 0x99, 0xc8, + 0x89, 0xcb, 0x64, 0xcc, 0x61, 0xbf, 0xa1, 0x72, + 0x0e, 0x9f, 0x02, 0x86, 0x6f, 0x72, 0x59, 0x63, + 0x8e, 0xbd, 0x0a, 0x76, 0xe1, 0x62, 0x20, 0xbe, + 0x08, 0xa7, 0xad, 0x41, 0xa0, 0x8c, 0xff, 0x45, + 0x3f, 0x84, 0x40, 0x37, 0xe8, 0x50, 0x03, 0xae, + 0x10, 0x85, 0x26, 0xc3, 0x5a, 0x05, 0x20, 0x16, + 0xea, 0x59, 0x91, 0xda, 0xb2, 0x9d, 0x71, 0x43, + 0x53, 0xc9, 0xe8, 0xd9, 0x3b, 0xcf, 0xd9, 0xa3, + 0x60, 0xd8, 0xe0, 0x06, 0x5c, 0x9e, 0x20, 0x03, + 0x06, 0x49, 0x33, 0x3d, 0x5a, 0x07, 0x83, 0x29, + 0xc5, 0xb3, 0x90, 0xbf, 0xf9, 0x92, 0xba, 0x0a, + 0x7d, 0x16, 0x49, 0x67, 0x22, 0x25, 0xff, 0xf5, + 0x85, 0xa5, 0xd1, 0x78, 0xbe, 0x2a, 0x50, 0xcb, + 0xa8, 0x9f, 0x2c, 0x86, 0x44, 0x77, 0xf0, 0x67, + 0x1a, 0x00, 0xe6, 0xd0, 0x0d, 0x0a, 0x95, 0x6d, + 0x23, 0xcb, 0x69, 0xb2, 0xb5, 0xfa, 0x4c, 0xa7, + 0xa4, 0xaf, 0x30, 0x64, 0x1d, 0xa8, 0x02, 0xf9, + 0xd8, 0x18, 0x6d, 0xb8, 0x05, 0x8f, 0x6b, 0xf5, + 0xe9, 0x4f, 0x30, 0x76, 0x61, 0x2d, 0x20, 0x35, + 0x4a, 0x40, 0xfb, 0xca, 0x1d, 0xc5, 0x30, 0x44, + 0x5f, 0x3e, 0x6e, 0x0b, 0x2f, 0x47, 0x97, 0x65, + 0x4f, 0xa9, 0x67, 0x5e, 0x19, 0x41, 0x6e, 0xc3, + 0x62, 0xbe, 0x3e, 0x6f, 0x70, 0x07, 0xff, 0xe5, + 0x81, 0x0d, 0x62, 0x83, 0x02, 0x37, 0x57, 0x12, + 0xdc, 0x1c, 0x83, 0x07, 0xac, 0x8d, 0x7d, 0x88, + 0xfe, 0xbd, 0xee, 0xaf, 0x52, 0xd3, 0x77, 0xdc, + 0x88, 0x9a, 0x9b, 0x45, 0xa8, 0xe2, 0x61, 0x4e, + 0x71, 0xc2, 0xd1, 0xc8, 0x3a, 0xa5, 0x6c, 0x1b, + 0x23, 0x98, 0x04, 0xd0, 0x16, 0x54, 0xd4, 0xd5, + 0x96, 0x99, 0xee, 0x3b, 0xb4, 0xd2, 0xa1, 0x34, + 0x4f, 0xca, 0x9d, 0xc3, 0xf9, 0x38, 0x3b, 0x07, + 0x2d, 0x5c, 0x31, 0x33, 0x0c, 0xa6, 0x20, 0x59, + 0x1c, 0x7a, 0xe1, 0xe3, 0x7e, 0xe7, 0x2d, 0x24, + 0x01, 0xee, 0x69, 0x94, 0xd0, 0x6b, 0x2c, 0x0f, + 0x29, 0x87, 0xd4, 0xf1, 0x6f, 0x4c, 0x6c, 0xfc, + 0x66, 0xb1, 0x50, 0x37, 0x6c, 0x32, 0xff, 0xf3, + 0xe7, 0x41, 0xf1, 0x35, 0x0f, 0xb7, 0x64, 0x83, + 0x14, 0x7e, 0x20, 0xec, 0x88, 0xf7, 0x02, 0x81, + 0x80, 0x44, 0x34, 0xcc, 0x5b, 0x09, 0x9a, 0xf5, + 0x48, 0xa3, 0xd3, 0x35, 0x0b, 0xf8, 0xc0, 0x70, + 0xe5, 0xf2, 0x20, 0xf8, 0x0f, 0x05, 0x9b, 0x5e, + 0xe1, 0xc8, 0x9f, 0x60, 0x1c, 0x5b, 0xe6, 0x24, + 0xc2, 0xdb, 0x6b, 0x8a, 0x1d, 0xea, 0x50, 0x67, + 0x8b, 0x4f, 0x45, 0x61, 0xd7, 0x8e, 0x3a, 0x1a, + 0xe8, 0xa9, 0x6b, 0x00, 0xf4, 0x86, 0x4b, 0xa8, + 0x2d, 0x04, 0xd5, 0xab, 0xf7, 0xee, 0x8b, 0xc4, + 0x46, 0x16, 0x97, 0xaa, 0x85, 0x61, 0x91, 0x73, + 0xd7, 0x28, 0x78, 0xbc, 0xec, 0x26, 0xe0, 0x50, + 0x3d, 0x92, 0x6d, 0x3b, 0x05, 0x6a, 0x68, 0x10, + 0xe0, 0x59, 0x8d, 0xca, 0x19, 0xee, 0xf3, 0x26, + 0xf8, 0x3d, 0xee, 0xb7, 0xf8, 0xca, 0x2a, 0xd4, + 0x05, 0x49, 0x43, 0x89, 0x75, 0x12, 0x55, 0x1d, + 0x83, 0xeb, 0xfe, 0x5e, 0x84, 0x11, 0xf3, 0x05, + 0x20, 0xc2, 0x4e, 0x22, 0x9f, 0xe6, 0xe4, 0x02, + 0xc7, 0x5f, 0x1e, 0xe7, 0x88, 0x69, 0xf2, 0x84, + 0x74, 0x38, 0xf4, 0xbb, 0xa3, 0x83, 0xe6, 0x2f, + 0xe5, 0x97, 0x65, 0xe9, 0x04, 0xd4, 0xb4, 0xeb, + 0x77, 0x77, 0x58, 0xe6, 0xea, 0x40, 0x0e, 0x8a, + 0x33, 0x25, 0x73, 0x8d, 0x19, 0x3c, 0x3f, 0xb3, + 0xbe, 0xd1, 0xcb, 0xc4, 0xb6, 0x53, 0x20, 0x34, + 0x27, 0xff, 0xfa, 0x28, 0x66, 0x21, 0x1c, 0xe1, + 0xc1, 0x7d, 0xf3, 0xcc, 0xf0, 0x3c, 0xb6, 0x85, + 0x0c, 0x7a, 0x2e, 0x62, 0x3d, 0xf7, 0x12, 0xd1, + 0x45, 0x61, 0xd8, 0x4e, 0x07, 0x01, 0x39, 0xec, + 0xa2, 0x5b, 0x62, 0xac, 0xd2, 0x97, 0x70, 0x30, + 0xbb, 0xd8, 0x7a, 0xf0, 0xcf, 0xa7, 0x46, 0x0e, + 0xc5, 0x6f, 0xf3, 0x48, 0x29, 0xf0, 0xe4, 0xa6, + 0x5f, 0x4a, 0x4e, 0xa8, 0xcd, 0xaf, 0xff, 0xdb, + 0x6c, 0x41, 0xf0, 0x92, 0x70, 0x0e, 0xe8, 0x7d, + 0xc1, 0x22, 0x41, 0x3e, 0x9f, 0xb2, 0xc2, 0x20, + 0x3b, 0xce, 0x63, 0x15, 0xe3, 0x7a, 0xba, 0x42, + 0x08, 0xba, 0x43, 0x08, 0xb8, 0x60, 0x43, 0x08, + 0xa1, 0x00, 0x05, 0x1e, 0xf8, 0x80, 0xf7, 0xa3, + 0x10, 0xf1, 0x93, 0xb0, 0xd7, 0x6b, 0x2f, 0x56, + 0x61, 0x3f, 0x93, 0x90, 0xbb, 0x9e, 0x43, 0x08, + 0x46, 0xb8, 0xac, 0x13, 0xb3, 0x07, 0xc1, 0xc3, + 0x81, 0xbf, 0x61, 0x03, 0xa1, 0xa0, 0x40, 0x61, + 0xa8, 0x3c, 0xff, 0x23, 0x92, 0xfb, 0x81, 0xab, + 0x00, 0xfc, 0x04, 0x9e, 0x6b, 0x8e, 0x10, 0x94, + 0x3f, 0x7e, 0x69, 0x2e, 0xa2, 0xf8, 0x09, 0xb0, + 0x19, 0xc1, 0x15, 0xb8, 0x36, 0x70, 0x22, 0x81, + 0xdd, 0x42, 0xc1, 0x30, 0xaa, 0x19, 0xfd, 0xbb, + 0xc0, 0x58, 0x58, 0x99, 0xd2, 0x13, 0xa7, 0x1d, + 0x18, 0x41, 0x27, 0xe0, 0x41, 0x74, 0x91, 0x87, + 0xeb, 0x2b, 0xa8, 0x5d, 0x28, 0x1d, 0x07, 0x8b, + 0x03, 0x03, 0x98, 0x3c, 0x09, 0x04, 0xaf, 0x02, + 0xf4, 0xa3, 0x57, 0x61, 0xc1, 0x9a, 0xea, 0x00, + 0x17, 0x24, 0xbe, 0xab, 0xda, 0xc0, 0xec, 0x28, + 0xa2, 0xf7, 0xb8, 0xa5, 0xf9, 0x4a, 0x81, 0x31, + 0x2b, 0x08, 0x84, 0x68, 0xb4, 0x03, 0x4b, 0x0c, + 0x2a, 0x44, 0x31, 0xfd, 0x7b, 0x39, 0x30, 0xab, + 0x3d, 0x2f, 0xc9, 0x00, 0x22, 0x24, 0xa4, 0x87, + 0x72, 0x27, 0xca, 0x50, 0xc0, 0x08, 0xc9, 0x82, + 0xc1, 0x31, 0x99, 0x03, 0xec, 0x36, 0x83, 0x4b, + 0xad, 0x7d, 0x28, 0x82, 0x55, 0xa2, 0x23, 0x5b, + 0x8b, 0x8c, 0xf3, 0xe3, 0x3e, 0x39, 0xc8, 0xc2, + 0x2a, 0xd8, 0x90, 0x8e, 0x88, 0x89, 0x9d, 0xb8, + 0x85, 0x05, 0x03, 0x9b, 0x86, 0x83, 0xbd, 0xb4, + 0x18, 0xb2, 0x0a, 0x22, 0x34, 0xa0, 0x08, 0xb9, + 0x0c, 0x50, 0x00, 0x03, 0x98, 0xc0, 0xff, 0xc6, + 0xaa, 0x0b, 0xfd, 0xe3, 0xbb, 0xd3, 0x01, 0x9c, + 0xfa, 0xf0, 0xb8, 0x65, 0xc8, 0x2a, 0x3a, 0x04, + 0xa5, 0x53, 0x38, 0x0d, 0x4f, 0xd3, 0x81, 0x39, + 0x1c, 0xa1, 0x37, 0x42, 0x84, 0x2a, 0xe9, 0xa6, + 0xa3, 0xe1, 0x29, 0xa8, 0x48, 0xbb, 0x45, 0x3c, + 0x87, 0x52, 0x1c, 0x34, 0xf5, 0xd2, 0xbe, 0x75, + 0x3a, 0xa0, 0x95, 0x60, 0x09, 0x26, 0xfc, 0xaf, + 0x61, 0x12, 0x1c, 0xe3, 0x8b, 0x01, 0x1c, 0x64, + 0x43, 0x17, 0xb9, 0xa0, 0x65, 0x6c, 0x93, 0x18, + 0x11, 0x26, 0x67, 0xbc, 0x43, 0xba, 0xd1, 0xba, + 0x15, 0xe2, 0xc2, 0x5d, 0xa9, 0x86, 0x30, 0x84, + 0x3f, 0xd8, 0x03, 0x04, 0x74, 0x63, 0x44, 0x04, + 0x94, 0x46, 0xf1, 0x10, 0xb3, 0x19, 0xcc, 0x8f, + 0xff, 0xc2, 0x37, 0xac, 0x8a, 0xb4, 0x84, 0xcb, + 0x0c, 0x06, 0xf4, 0x8b, 0x23, 0xa4, 0x1a, 0xe8, + 0x63, 0xc7, 0x8c, 0x43, 0x06, 0x6f, 0xec, 0x41, + 0x23, 0x48, 0x05, 0xe6, 0x2a, 0xaf, 0xfd, 0x02, + 0x84, 0x74, 0x1c, 0x45, 0xac, 0x0a, 0x05, 0x8c, + 0x93, 0x47, 0x85, 0x90, 0x31, 0x55, 0xcc, 0xa6, + 0xfb, 0xfa, 0x93, 0x57, 0x81, 0xbc, 0x70, 0xd4, + 0x22, 0xba, 0xc1, 0x20, 0x70, 0xc2, 0x9c, 0x7e, + 0x64, 0x08, 0x37, 0xdc, 0x91, 0xcc, 0xb8, 0x28, + 0xb8, 0xc9, 0xa6, 0x09, 0x48, 0x42, 0x51, 0x43, + 0x17, 0xb2, 0x0a, 0x41, 0x99, 0x81, 0xbc, 0x38, + 0x44, 0xb1, 0x71, 0x54, 0x48, 0x32, 0xf0, 0x23, + 0x90, 0x3c, 0x04, 0x89, 0x84, 0x9f, 0xa4, 0xf2, + 0x93, 0x67, 0x1a, 0xa1, 0x30, 0x80, 0x2e, 0x94, + 0x00, 0x10, 0xa8, 0xca, 0x31, 0x93, 0x04, 0xaf, + 0x41, 0xd8, 0xc4, 0xcc, 0x19, 0x28, 0x0f, 0x34, + 0x17, 0x9a, 0xec, 0x3f, 0x88, 0xf9, 0xa1, 0xcb, + 0xba, 0x0c, 0x93, 0x9a, 0xb7, 0xce, 0xa2, 0xab, + 0x7a, 0x4c, 0x81, 0xda, 0x18, 0x49, 0xff, 0x92, + 0xe4, 0x88, 0x74, 0x34, 0xc0, 0xa4, 0x9c, 0x3f, + 0x04, 0x24, 0x10, 0x05, 0x11, 0x03, 0x04, 0x53, + 0xb3, 0xc5, 0x6b, 0x1b, 0xb5, 0x32, 0xca, 0xc1, + 0xa8, 0x1c, 0xa7, 0x94, 0xbe, 0x52, 0x63, 0xca, + 0xa6, 0xcc, 0xb3, 0x34, 0x89, 0x84, 0x6b, 0x04, + 0xb1, 0x2d, 0xdc, 0x09, 0xb6, 0xe1, 0x49, 0x9c, + 0xcb, 0xc4, 0x33, 0x04, 0x2c, 0xe3, 0xea, 0xc9, + 0x9e, 0x18, 0xb2, 0xba, 0xf2, 0xb6, 0xf0, 0x49, + 0xcb, 0x74, 0x10, 0xcb, 0xa4, 0x51, 0xc5, 0x16, + 0xc0, 0xa9, 0x48, 0xcc, 0x28, 0xf5, 0x9b, 0x3e, + 0x7a, 0x6c, 0xc2, 0x30, 0x4a, 0xbe, 0x13, 0x1a, + 0x8a, 0x1a, 0x60, 0x2e, 0xbf, 0x9a, 0x4b, 0x9a, + 0xf8, 0xca, 0x1d, 0xe1, 0x0c, 0x48, 0xcc, 0xc0, + 0xd4, 0xe2, 0x34, 0x77, 0xd4, 0x92, 0xba, 0xc4, + 0x3e, 0x13, 0x23, 0xc7, 0x41, 0x2b, 0x41, 0x07, + 0x4a, 0x4a, 0x4a, 0x50, 0x2e, 0xce, 0x92, 0x38, + 0xae, 0x9c, 0xbb, 0xa7, 0xc4, 0x09, 0x08, 0xfc, + 0x87, 0x0f, 0x8a, 0x15, 0x1e, 0xa4, 0xcc, 0x67, + 0x8b, 0x33, 0x40, 0x00, 0x4d, 0x70, 0x0a, 0xcc, + 0x70, 0x10, 0x2f, 0xda, 0x52, 0x80, 0x5b, 0xec, + 0x23, 0x1d, 0xf4, 0x0e, 0x93, 0x02, 0xcc, 0x25, + 0xe8, 0x8f, 0x5e, 0xe1, 0xb4, 0xa4, 0xa4, 0x01, + 0x02, 0xe1, 0x0c, 0x44, 0x0c, 0x32, 0x8c, 0xb8, + 0xa3, 0xc3, 0x88, 0xcd, 0x1c, 0x8c, 0xc6, 0xd8, + 0xe2, 0x0c, 0xec, 0xea, 0x82, 0x98, 0xbc, 0x4c, + 0x51, 0x7b, 0xaf, 0x91, 0xe1, 0x09, 0xbc, 0x53, + 0x2b, 0xbf, 0x69, 0x9a, 0xac, 0xe4, 0xa1, 0xb6, + 0xa1, 0xb3, 0x2c, 0x88, 0xb6, 0x7c, 0x9c, 0x14, + 0xc9, 0x48, 0xa0, 0x70, 0xb9, 0xc4, 0x5c, 0x78, + 0x87, 0x71, 0xf0, 0x00, 0x9e, 0xcb, 0x4c, 0x57, + 0x23, 0x34, 0xdc, 0xc3, 0x4e, 0x40, 0x3b, 0x13, + 0x96, 0x48, 0x4c, 0x26, 0x44, 0xc7, 0xff, 0x7b, + 0x6b, 0x20, 0xc6, 0x23, 0xad, 0x62, 0xc8, 0xc8, + 0x62, 0xfb, 0x0b, 0x8e, 0x6c, 0x4d, 0xb8, 0xc0, + 0x8c, 0xf6, 0x8c, 0x9c, 0x64, 0x33, 0x2b, 0x97, + 0x01, 0x11, 0x89, 0x04, 0xb2, 0xc8, 0x40, 0x45, + 0x8b, 0x04, 0xce, 0x71, 0x71, 0x26, 0x9d, 0xeb, + 0x4f, 0x0c, 0x00, 0x23, 0x00, 0x2d, 0x98, 0xa6, + 0x32, 0x14, 0x17, 0xf0, 0x03, 0x3f, 0xa0, 0x2f, + 0x2b, 0xb4, 0x2f, 0x96, 0xd3, 0x8f, 0x04, 0x25, + 0x39, 0xf1, 0x62, 0x2e, 0x71, 0x70, 0x04, 0x18, + 0x18, 0x4c, 0x90, 0xe8, 0x81, 0x07, 0x95, 0x50, + 0x7a, 0x0a, 0xc2, 0x58, 0x1b, 0x03, 0x6d, 0x62, + 0x00, 0x05, 0x10, 0x80, 0xfe, 0x40, 0x4b, 0xbf, + 0x91, 0xb1, 0x9e, 0x10, 0x1f, 0x14, 0xb5, 0x18, + 0x71, 0x5c, 0x2b, 0x88, 0x1c, 0x0a, 0x73, 0x58, + 0xbb, 0x36, 0x88, 0x4a, 0xed, 0x92, 0x0f, 0xaa, + 0x29, 0x51, 0x79, 0x41, 0xbf, 0xe4, 0xa9, 0xa5, + 0xc5, 0x7c, 0xcf, 0xdb, 0x7c, 0x83, 0x5b, 0x89, + 0xce, 0x6d, 0x5c, 0xa3, 0x21, 0x9d, 0x92, 0x1a, + 0xfd, 0x88, 0xd4, 0x24, 0xcc, 0xef, 0x29, 0x30, + 0x2b, 0xb5, 0x8c, 0xf6, 0x83, 0x8f, 0x62, 0x60, + 0x03, 0xff, 0x91, 0x22, 0xdf, 0xab, 0xba, 0x22, + 0x3d, 0x07, 0xaf, 0xd0, 0x52, 0x09, 0x35, 0xd2, + 0xce, 0x38, 0xd0, 0x98, 0xe1, 0xd2, 0x51, 0x10, + 0x21, 0x69, 0x53, 0x3c, 0x31, 0x95, 0x0b, 0x2a, + 0x25, 0x95, 0xfb, 0x8a, 0x15, 0x25, 0x55, 0x28, + 0x1c, 0x65, 0xd2, 0x41, 0xc1, 0xd3, 0x33, 0x69, + 0x53, 0xb2, 0x70, 0x03, 0x7a, 0x89, 0x95, 0x7d, + 0x20, 0x4d, 0x57, 0x2c, 0x3f, 0x32, 0x55, 0x29, + 0x1c, 0x31, 0x53, 0xe1, 0xb4, 0xbd, 0xe3, 0x38, + 0x8f, 0x88, 0xf0, 0x94, 0xf0, 0xf0, 0x51, 0x3e, + 0x19, 0x3e, 0xaf, 0x8a, 0x4d, 0x05, 0xe0, 0x34, + 0x56, 0x8a, 0x44, 0xc0, 0x89, 0x88, 0xff, 0xef, + 0x92, 0x50, 0x46, 0xed, 0xa2, 0x9d, 0x1b, 0x99, + 0x3e, 0xbd, 0x83, 0x49, 0x85, 0x03, 0x82, 0x84, + 0x0e, 0xe6, 0x82, 0x44, 0xf4, 0x20, 0x05, 0x44, + 0x85, 0x52, 0x34, 0x75, 0xcf, 0xba, 0xe8, 0x0d, + 0x42, 0xf5, 0x0d, 0x76, 0xd8, 0x0f, 0x53, 0x6d, + 0xd2, 0x81, 0x1a, 0x89, 0x11, 0xf0, 0xcc, 0xcb, + 0xe3, 0xa2, 0x56, 0x7d, 0x15, 0x3d, 0xd5, 0x4c, + 0x7c, 0x19, 0x09, 0xe5, 0xa2, 0x2d, 0xf4, 0x71, + 0x11, 0x47, 0x81, 0xab, 0x9c, 0xcb, 0x80, 0xba, + 0x32, 0x53, 0xbe, 0x28, 0x88, 0xdc, 0x84, 0x55, + 0x65, 0xeb, 0x51, 0x0a, 0x33, 0x56, 0x55, 0x48, + 0xd6, 0x3f, 0x3d, 0x1d, 0x35, 0xa9, 0x14, 0x86, + 0x7c, 0xce, 0x47, 0x58, 0xd0, 0x3c, 0x10, 0xd6, + 0x48, 0xda, 0xcc, 0x62, 0x35, 0xd6, 0xe5, 0x4a, + 0x43, 0xe7, 0xd2, 0x56, 0x64, 0x60, 0xa7, 0x47, + 0x8a, 0x3e, 0xae, 0xc0, 0x4a, 0x2d, 0x98, 0xd6, + 0xdf, 0x89, 0x9f, 0x41, 0x38, 0x80, 0x02, 0xa0, + 0x2d, 0x7c, 0xb5, 0x01, 0x94, 0xdc, 0x84, 0xe7, + 0xb2, 0x40, 0xe1, 0xc2, 0xb0, 0x67, 0x70, 0x47, + 0x74, 0x5c, 0xcb, 0x79, 0x55, 0x0d, 0xa5, 0xb3, + 0x82, 0x87, 0x80, 0xa2, 0x73, 0x25, 0xb2, 0xbd, + 0xcb, 0x3c, 0xb8, 0xd2, 0x3c, 0x67, 0x1a, 0xd1, + 0xcf, 0x2a, 0xd4, 0x88, 0x94, 0xd6, 0x6a, 0x30, + 0x58, 0xac, 0x3a, 0x41, 0xae, 0x48, 0xd8, 0x26, + 0x1b, 0x89, 0x7d, 0xc0, 0xc7, 0xbc, 0x2c, 0xc7, + 0x3d, 0xb1, 0x8c, 0x6f, 0x4d, 0x91, 0x51, 0xeb, + 0x13, 0x17, 0x33, 0xc4, 0x74, 0xe8, 0x99, 0x8d, + 0x19, 0x57, 0xd8, 0xaa, 0xd0, 0xca, 0x13, 0x99, + 0x01, 0xbd, 0x02, 0x88, 0x68, 0x36, 0x0e, 0x65, + 0x88, 0x87, 0x1d, 0x40, 0x91, 0xd5, 0x1f, 0xe7, + 0x5c, 0x80, 0xd9, 0xa2, 0x4d, 0xbc, 0xcc, 0x0b, + 0x52, 0x35, 0xd8, 0x4e, 0x31, 0xab, 0xff, 0x1f, + 0xb0, 0x50, 0xa4, 0x45, 0x5a, 0xc1, 0xb9, 0x02, + 0x52, 0xad, 0x13, 0x73, 0xd8, 0xbe, 0x75, 0xbb, + 0x87, 0x93, 0x58, 0x1c, 0xd7, 0x59, 0xae, 0xa0, + 0xf5, 0x1a, 0x33, 0x85, 0xb4, 0x97, 0xcd, 0xd8, + 0xf6, 0x72, 0x8d, 0x75, 0xa9, 0xb8, 0xc3, 0xba, + 0x07, 0x9d, 0x94, 0x26, 0x32, 0x98, 0x2d, 0xaf, + 0x70, 0x55, 0x0f, 0x2b, 0x58, 0x99, 0x58, 0xd4, + 0xae, 0x1d, 0x16, 0x0d, 0x5d, 0x34, 0x7a, 0xa5, + 0xbb, 0x92, 0x9d, 0xda, 0x28, 0xc3, 0xa6, 0x3f, + 0x03, 0xd6, 0x3a, 0xf5, 0x99, 0xc5, 0x20, 0x90, + 0x7e, 0x72, 0x5b, 0x17, 0xe1, 0xc7, 0x82, 0x08, + 0xd4, 0x60, 0x95, 0xa0, 0xdb, 0xf8, 0xb7, 0xbc, + 0xd5, 0xdb, 0x25, 0xca, 0xb1, 0x9d, 0x01, 0xd5, + 0xbf, 0xf5, 0x26, 0xae, 0x10, 0x5c, 0x92, 0xa5, + 0x5b, 0x81, 0x0c, 0x99, 0x84, 0xa3, 0x53, 0xd9, + 0xe8, 0xdb, 0x5f, 0x6c, 0x59, 0xc7, 0xdd, 0x0f, + 0xb8, 0xb5, 0x09, 0xc6, 0x2c, 0x35, 0xc2, 0x6d, + 0x94, 0xfa, 0x8b, 0x3a, 0xc4, 0x65, 0x94, 0xbe, + 0x4d, 0x0a, 0xce, 0xa5, 0x10, 0x2e, 0x1a, 0xc0, + 0xd6, 0x58, 0x51, 0x11, 0x10, 0x59, 0x08, 0xf2, + 0xdc, 0x29, 0xad, 0x58, 0x39, 0x38, 0x0c, 0xac, + 0x55, 0xdd, 0x70, 0xf8, 0x97, 0xd9, 0x2d, 0xc2, + 0xd5, 0xc2, 0xaa, 0xc2, 0x6d, 0x1d, 0x94, 0xec, + 0x0a, 0x7e, 0x15, 0xcd, 0xdc, 0xd5, 0x51, 0x2d, + 0xdc, 0x52, 0xc9, 0xb5, 0x0c, 0xe0, 0xb5, 0x2f, + 0x57, 0x0a, 0x3a, 0xa8, 0x6a, 0x5c, 0xe3, 0xbd, + 0x2d, 0x4d, 0x89, 0x5e, 0xa4, 0xba, 0x39, 0x78, + 0x1d, 0xdd, 0xe0, 0xed, 0x05, 0x63, 0x24, 0x15, + 0xe9, 0x0d, 0x13, 0xee, 0x70, 0x01, 0x8e, 0x5d, + 0x57, 0x37, 0xcd, 0xde, 0xe6, 0xfd, 0x85, 0x99, + 0xf4, 0x5e, 0xd8, 0x2a, 0x11, 0x60, 0x59, 0x17, + 0x1e, 0x45, 0xa5, 0xce, 0x08, 0x36, 0xff, 0x09, + 0x1c, 0x5e, 0x4a, 0x4d, 0x5f, 0x31, 0x49, 0x88, + 0xea, 0xb5, 0x5e, 0xb8, 0xa0, 0xc9, 0x97, 0x94, + 0xd8, 0x58, 0x25, 0x87, 0x61, 0x0a, 0xce, 0x89, + 0xaa, 0xdf, 0xd8, 0x49, 0x09, 0xde, 0xcd, 0x32, + 0xe5, 0x8d, 0x03, 0x66, 0xa5, 0x9a, 0x06, 0x51, + 0xc8, 0xf9, 0x65, 0x5b, 0x0e, 0x1b, 0xe0, 0x91, + 0x12, 0xaf, 0xb4, 0xc5, 0xab, 0xeb, 0x85, 0x57, + 0xea, 0xd5, 0x1f, 0xa2, 0x75, 0xb8, 0x9f, 0x3d, + 0x00, 0xcc, 0x8b, 0xe0, 0x64, 0x85, 0x8e, 0xe5, + 0xa2, 0x49, 0x38, 0x61, 0xca, 0x4a, 0x6d, 0x50, + 0x1d, 0xb1, 0x0a, 0xfe, 0x52, 0xd5, 0xcf, 0x61, + 0x86, 0x0f, 0xd6, 0x41, 0x15, 0x4e, 0xd7, 0x2e, + 0x19, 0x3f, 0x8f, 0xac, 0x37, 0xbd, 0xc2, 0x17, + 0xf1, 0x72, 0x81, 0xd3, 0xcc, 0xbb, 0x39, 0x04, + 0x2b, 0x17, 0x56, 0x88, 0xbd, 0x9a, 0x26, 0x56, + 0x78, 0xdd, 0xfa, 0x42, 0x60, 0x32, 0x11, 0x14, + 0x6d, 0x84, 0x1c, 0xd7, 0x34, 0x42, 0x1f, 0x50, + 0x80, 0x57, 0x6b, 0xe2, 0x58, 0x88, 0x61, 0x1f, + 0x36, 0xbb, 0xb5, 0xdd, 0x11, 0x6e, 0xf4, 0x5d, + 0x19, 0xc6, 0x36, 0xe2, 0x55, 0xe0, 0x0c, 0xb0, + 0x41, 0xae, 0xcd, 0x80, 0x02, 0x08, 0x83, 0xaf, + 0x60, 0x00, 0x01, 0xc0, 0xd4, 0xee, 0x7a, 0x4c, + 0x29, 0x4e, 0x03, 0x10, 0x35, 0x83, 0x1d, 0xd9, + 0x58, 0x1b, 0xae, 0x92, 0x89, 0x4d, 0x9b, 0x7c, + 0x12, 0x07, 0x1b, 0x44, 0x12, 0x5b, 0x51, 0x00, + 0x30, 0x76, 0xc9, 0xaf, 0x80, 0x21, 0x10, 0xb8, + 0x4e, 0x34, 0x3e, 0xca, 0xfe, 0xda, 0xd7, 0x9a, + 0xd2, 0x8f, 0xce, 0x29, 0x99, 0xc5, 0xd4, 0xbb, + 0x8f, 0xfb, 0xa0, 0x33, 0xbd, 0x9f, 0x7d, 0xc8, + 0xbc, 0x95, 0xf2, 0xe3, 0x0f, 0x49, 0xae, 0x6b, + 0x5d, 0x5f, 0x2b, 0xfe, 0xb9, 0x68, 0xda, 0x85, + 0xba, 0xe4, 0xdf, 0xfe, 0xed, 0x42, 0xff, 0x48, + 0xa9, 0x18, 0xe2, 0x7a, 0x64, 0x32, 0xa8, 0x01, + 0x7c, 0x45, 0x57, 0xf1, 0xd3, 0xb5, 0x8b, 0x89, + 0x54, 0x52, 0xd9, 0x62, 0x62, 0x59, 0x09, 0x45, + 0x6e, 0x9b, 0x4f, 0x96, 0x0d, 0xc3, 0xdc, 0x2c, + 0xef, 0x94, 0x0d, 0x5f, 0x81, 0x93, 0x35, 0x2d, + 0xd5, 0xaa, 0xb1, 0x65, 0xfd, 0x75, 0x65, 0x09, + 0xc3, 0xc1, 0x08, 0xfd, 0x05, 0xb6, 0x19, 0x35, + 0x3c, 0xcd, 0x64, 0x45, 0x80, 0x23, 0x2f, 0xde, + 0xe5, 0x15, 0xd9, 0xaf, 0x46, 0x96, 0x0f, 0x3c, + 0x95, 0x63, 0x67, 0xf2, 0x11, 0x0d, 0x3e, 0x66, + 0xff, 0x33, 0xcf, 0xa5, 0xec, 0x2c, 0x53, 0x63, + 0x06, 0x59, 0x49, 0xcf, 0x68, 0x2e, 0x5a, 0x22, + 0xb4, 0xd5, 0x4d, 0x48, 0x65, 0x60, 0xca, 0x10, + 0x6d, 0x9e, 0x1d, 0x63, 0x66, 0xa0, 0x43, 0x09, + 0x0e, 0x4f, 0xb0, 0xe6, 0x50, 0x2a, 0x11, 0x56, + 0x16, 0x67, 0xd5, 0x60, 0x67, 0xc8, 0x9d, 0x01, + 0xb4, 0x55, 0x97, 0x5c, 0x3e, 0x5d, 0x66, 0xca, + 0xc8, 0x21, 0x6e, 0x67, 0x87, 0x0c, 0x45, 0xab, + 0x7b, 0x4b, 0x94, 0x01, 0xd9, 0x7d, 0x65, 0xb9, + 0x74, 0x9e, 0x53, 0x99, 0x22, 0xe7, 0x7c, 0x0e, + 0x05, 0xe2, 0x45, 0x86, 0x59, 0x02, 0xbc, 0xfe, + 0x8a, 0x0e, 0xdc, 0x0d, 0x82, 0xfc, 0xc4, 0x89, + 0x75, 0x2e, 0xe8, 0xfa, 0xdc, 0xe5, 0xa8, 0xdd, + 0xbf, 0xe7, 0xc0, 0x0c, 0x9b, 0x8d, 0x64, 0xf2, + 0x42, 0xe8, 0x3b, 0x04, 0x57, 0x93, 0x9a, 0x68, + 0x7e, 0x09, 0x69, 0x3a, 0xc2, 0xdf, 0x75, 0xb8, + 0x88, 0x23, 0x62, 0xb8, 0x18, 0xfa, 0xd2, 0xfe, + 0xf1, 0x2c, 0xfb, 0x11, 0x68, 0xed, 0x31, 0xe8, + 0xb2, 0xb3, 0xc9, 0x1e, 0x00, 0x1f, 0xe2, 0x5c, + 0x87, 0x73, 0xf6, 0x12, 0x7c, 0x96, 0xa1, 0x87, + 0xcc, 0xc8, 0x36, 0x8e, 0x69, 0x8b, 0x7b, 0x8e, + 0x9d, 0x8b, 0x30, 0x2b, 0xa8, 0xd9, 0xff, 0x0f, + 0x31, 0xc9, 0x8b, 0x74, 0xab, 0x6f, 0x19, 0xe9, + 0x57, 0xfc, 0xe9, 0x4e, 0x10, 0xac, 0xf3, 0x09, + 0x9a, 0xa3, 0x75, 0xbe, 0x2e, 0x5b, 0x5e, 0xfb, + 0x69, 0x66, 0xaf, 0x22, 0x9c, 0xa5, 0xde, 0x66, + 0x03, 0x59, 0x0f, 0x2b, 0xeb, 0xae, 0x98, 0x4d, + 0x87, 0x80, 0x53, 0x34, 0x3f, 0x92, 0x95, 0x92, + 0x86, 0xcb, 0xa6, 0x3e, 0x5f, 0xf5, 0x00, 0xb9, + 0x8b, 0x7a, 0x4d, 0xba, 0x34, 0x16, 0x88, 0xde, + 0x69, 0x91, 0xdb, 0x1c, 0xb3, 0x46, 0x6b, 0x15, + 0x68, 0x9c, 0x2c, 0x1a, 0x86, 0x72, 0x1b, 0xa3, + 0x5a, 0x7b, 0x13, 0xe4, 0xd1, 0x6a, 0xce, 0x9d, + 0xe9, 0xfe, 0x91, 0x65, 0x60, 0xa8, 0x2a, 0xad, + 0x12, 0x4c, 0x16, 0x86, 0x14, 0xbe, 0xfb, 0x6b, + 0xd5, 0xf5, 0x00, 0x6b, 0xeb, 0xe3, 0xbc, 0x7e, + 0x93, 0xcb, 0x5d, 0x21, 0x88, 0x5e, 0x6c, 0x99, + 0x08, 0xd1, 0x7e, 0xae, 0x6b, 0x21, 0xf3, 0x69, + 0x77, 0x5e, 0x07, 0x21, 0x08, 0x35, 0x70, 0x65, + 0x1e, 0x55, 0x21, 0x80, 0xd9, 0xe2, 0x07, 0xcc, + 0xce, 0xec, 0x62, 0xc2, 0xc1, 0x23, 0xf2, 0x01, + 0xee, 0x61, 0x2a, 0xbf, 0xc5, 0xea, 0x47, 0xb1, + 0xda, 0x77, 0x3e, 0x6d, 0xd7, 0x58, 0x04, 0xd2, + 0xee, 0x9d, 0x9b, 0x3c, 0x0a, 0x0a, 0x06, 0xcf, + 0x05, 0xf0, 0x44, 0xd3, 0xae, 0xe0, 0xd9, 0xf6, + 0x9e, 0x85, 0x3d, 0x57, 0xf2, 0x7a, 0xec, 0xdc, + 0xae, 0xec, 0x51, 0xb0, 0x07, 0x4a, 0x06, 0x6e, + 0xc2, 0xa1, 0x01, 0x86, 0x16, 0xe5, 0x58, 0x36, + 0x59, 0x03, 0x94, 0xa0, 0x20, 0x5a, 0x6d, 0x02, + 0x3d, 0xee, 0xf6, 0x44, 0xd1, 0x5e, 0xbe, 0xd7, + 0x73, 0x5d, 0x0f, 0x42, 0x19, 0x6b, 0xa6, 0x36, + 0xa1, 0x46, 0xb8, 0xee, 0x79, 0x75, 0xca, 0xc6, + 0x06, 0x81, 0x16, 0xb2, 0xed, 0xf5, 0x78, 0x93, + 0x97, 0x5e, 0xee, 0xdc, 0xa5, 0x6b, 0xff, 0xc3, + 0x70, 0x49, 0x6c, 0xa0, 0x91, 0xe8, 0x51, 0xa2, + 0xf8, 0x98, 0x68, 0x0d, 0x6b, 0xef, 0xbd, 0x43, + 0x5a, 0x46, 0x81, 0x4f, 0x31, 0x06, 0xe9, 0xa4, + 0x89, 0xcc, 0xf8, 0x7c, 0x9a, 0x17, 0x3d, 0x00, + 0x61, 0x33, 0xe0, 0xfc, 0x46, 0x1b, 0x17, 0x10, + 0x6f, 0xa6, 0xb2, 0xd0, 0x3d, 0x7e, 0xbd, 0xbb, + 0xc2, 0xaf, 0xf1, 0xce, 0x21, 0xf1, 0xaa, 0x9d, + 0x07, 0xf3, 0x1b, 0x04, 0x7f, 0xa0, 0xa3, 0x1d, + 0xbb, 0x0b, 0xe5, 0xf0, 0x17, 0xd8, 0x63, 0x97, + 0xd9, 0xec, 0x84, 0x93, 0x87, 0x78, 0x71, 0xa0, + 0x0f, 0x28, 0xba, 0x41, 0x89, 0x59, 0x09, 0x3f, + 0xe6, 0x14, 0xaf, 0xd0, 0xb6, 0xe6, 0x8a, 0x5b, + 0x10, 0xd9, 0x90, 0x52, 0x71, 0x0c, 0x7f, 0x71, + 0x97, 0x09, 0x3b, 0x1a, 0xc7, 0xf1, 0x4d, 0xa0, + 0xb3, 0xb3, 0x9c, 0x71, 0x9a, 0xc8, 0xf1, 0xcc, + 0xd9, 0x5c, 0x5c, 0x04, 0xf1, 0x2f, 0x01, 0x6b, + 0x79, 0x62, 0x1f, 0xe5, 0xfe, 0x71, 0x9e, 0xb0, + 0xc9, 0xa3, 0x86, 0x4f, 0x29, 0x81, 0x71, 0x5a, + 0xed, 0xe8, 0x43, 0x7c, 0x88, 0xf7, 0x4e, 0xf2, + 0x52, 0x5d, 0xbb, 0x1d, 0x17, 0xf0, 0x6b, 0x61, + 0x68, 0x1c, 0xaa, 0xf2, 0xcc, 0xe6, 0x3f, 0xa2, + 0xb1, 0xf0, 0x84, 0x25, 0x0d, 0x44, 0x8c, 0xb7, + 0x7f, 0x8e, 0xf1, 0x2e, 0x8f, 0x60, 0x9f, 0x56, + 0x70, 0x87, 0x59, 0xf0, 0x16, 0x07, 0x33, 0x10, + 0xd7, 0x69, 0x34, 0x2f, 0xda, 0x20, 0x85, 0x4b, + 0x68, 0x96, 0x73, 0x14, 0xa4, 0xf2, 0x0b, 0xb9, + 0xf3, 0x3d, 0x87, 0xd7, 0x02, 0x28, 0x00, 0xd9, + 0xe6, 0xf3, 0xe7, 0xbb, 0xae, 0x65, 0xe4, 0xaf, + 0xcd, 0x8a, 0xee, 0x40, 0x1f, 0xe0, 0xee, 0x8c, + 0xf2, 0x58, 0x40, 0x00, 0x37, 0x47, 0xf4, 0x15, + 0xcf, 0xe6, 0xb0, 0xee, 0xf1, 0x47, 0x87, 0x55, + 0x58, 0xa0, 0xf4, 0x4b, 0x9f, 0xd0, 0xff, 0x5f, + 0x08, 0x71, 0x4c, 0x0f, 0xc9, 0x21, 0x97, 0x10, + 0x45, 0x2e, 0x72, 0x4e, 0x0f, 0x32, 0xc1, 0x62, + 0x2e, 0x8e, 0xec, 0x29, 0x51, 0x97, 0xe2, 0xae, + 0x38, 0xa2, 0x70, 0x9c, 0x74, 0x54, 0x4f, 0x56, + 0x96, 0x60, 0xe7, 0x95, 0x88, 0x5b, 0x57, 0xaf, + 0x6b, 0x9b, 0xce, 0x5f, 0xab, 0x34, 0x5f, 0x5a, + 0xaf, 0xeb, 0x7d, 0x69, 0x75, 0x5d, 0x37, 0x5e, + 0x02, 0x30, 0x00, 0x03, 0xa0, 0x67, 0x5f, 0x47, + 0xf0, 0xd5, 0x21, 0x90, 0xe5, 0x02, 0x63, 0xdd, + 0x26, 0xf6, 0x76, 0x1e, 0x81, 0x46, 0x5f, 0xf6, + 0x67, 0x87, 0xf6, 0x68, 0x97, 0xf6, 0x69, 0xa7, + 0xf6, 0x6a, 0xb7, 0xf6, 0x6b, 0xc7, 0xf6, 0x6c, + 0xd7, 0xf6, 0x6d, 0xe7, 0xf6, 0x6e, 0xf7, 0xf6, + 0x6f, 0x07, 0xf7, 0x70, 0x17, 0xf7, 0x71, 0x27, + 0xf7, 0x72, 0x37, 0xf7, 0x73, 0x47, 0xf7, 0x74, + 0x57, 0xf7, 0x75, 0x67, 0xf7, 0x76, 0x77, 0xf7, + 0x77, 0x87, 0xf7, 0x78, 0x97, 0xf7, 0x79, 0xa7, + 0xf7, 0x7a, 0xb7, 0xf7, 0x7b, 0xc7, 0xf7, 0x7c, + 0xd7, 0xf7, 0x7d, 0xe7, 0xf7, 0x7e, 0xf7, 0xf7, + 0x7f, 0x07, 0xf8, 0x80, 0x17, 0xf8, 0x81, 0x27, + 0xf8, 0x82, 0x37, 0xf8, 0x83, 0x47, 0xf8, 0x84, + 0x57, 0xf8, 0x85, 0x67, 0xf8, 0x86, 0x77, 0xf8, + 0x87, 0xdf, 0x73, 0x04, 0x90, 0xf8, 0x89, 0xa7, + 0xf8, 0x8a, 0xb7, 0xf8, 0x0a, 0xa8, 0x78, 0x22, + 0xa0, 0xf8, 0xde, 0x86, 0x78, 0x2d, 0x12, 0x80, + 0x8f, 0x07, 0xf9, 0x90, 0x17, 0x79, 0x91, 0x2f, + 0x80, 0x0a, 0x38, 0x80, 0x90, 0x2f, 0xf9, 0x1c, + 0x38, 0x79, 0x90, 0x3f, 0xf1, 0x8e, 0x47, 0x9e, + 0x91, 0x87, 0x79, 0x98, 0x4f, 0x79, 0x00, 0x58, + 0xf9, 0x8f, 0x3f, 0x80, 0x1c, 0x40, 0x00, 0x91, + 0x6f, 0x79, 0x97, 0xdf, 0x9c, 0xe1, 0x56, 0x2e, + 0x90, 0xf7, 0xf9, 0x03, 0xe0, 0xf8, 0xff, 0x9a, + 0xff, 0xf8, 0x9d, 0xb7, 0x00, 0x03, 0xd0, 0x79, + 0x9e, 0x97, 0x27, 0xa4, 0x17, 0x80, 0x9b, 0x4f, + 0x01, 0xa2, 0x17, 0x80, 0x99, 0x2f, 0x01, 0xa8, + 0x37, 0x7a, 0xa5, 0xa7, 0x1f, 0xa6, 0x77, 0x7a, + 0x13, 0x58, 0xf9, 0xad, 0x4f, 0x81, 0x9c, 0x4f, + 0x7a, 0xab, 0x6f, 0x25, 0xac, 0x97, 0x01, 0x90, + 0xc7, 0xd7, 0x8f, 0xe7, 0xf8, 0x0d, 0x28, 0x00, + 0xb3, 0x67, 0x79, 0xb0, 0x0f, 0x7b, 0x9b, 0x97, + 0x81, 0x95, 0x0f, 0xf6, 0x8f, 0x97, 0x7a, 0x0c, + 0x38, 0x79, 0xa1, 0x5f, 0x7b, 0xb6, 0xa7, 0x23, + 0xb1, 0x7f, 0x7a, 0xb3, 0xf7, 0xfa, 0xac, 0xc7, + 0x00, 0xa6, 0x37, 0x00, 0xaf, 0x17, 0x80, 0xaa, + 0xc7, 0x7b, 0xc2, 0xd1, 0x7b, 0xad, 0x97, 0x7b, + 0x9a, 0x37, 0x7b, 0x0e, 0x48, 0xfb, 0xc1, 0x67, + 0xfa, 0xc1, 0x2f, 0x7c, 0x2d, 0x3a, 0xfc, 0x12, + 0x20, 0x7b, 0x00, 0x68, 0xfc, 0xb9, 0x37, 0xf9, + 0xa6, 0x07, 0x80, 0xc7, 0x27, 0xfc, 0x68, 0x47, + 0xfa, 0xba, 0xaf, 0xfb, 0xa6, 0x0f, 0x7d, 0xda, + 0x6a, 0x7a, 0xd1, 0x2f, 0x7d, 0xd2, 0x07, 0xfd, + 0xd3, 0x1f, 0x7d, 0xcd, 0x3f, 0x7a, 0x9b, 0x5f, + 0xfd, 0xb3, 0x0f, 0xa2, 0xc9, 0xe7, 0x80, 0x95, + 0x2f, 0xf9, 0xbe, 0xdf, 0x00, 0xc0, 0xdf, 0xfc, + 0xbb, 0xd7, 0xf6, 0xc7, 0x8f, 0xf9, 0xde, 0xf7, + 0xfd, 0xdf, 0x8f, 0x38, 0xde, 0x27, 0xf9, 0xb6, + 0x67, 0x7d, 0xc4, 0x8f, 0x7a, 0x0a, 0x80, 0x7b, + 0x0c, 0x68, 0xfc, 0x54, 0xe1, 0x7c, 0x6e, 0x17, + 0xfe, 0xdf, 0x87, 0xfe, 0xe8, 0xbf, 0x80, 0xe7, + 0x07, 0x7a, 0xe2, 0xf7, 0xfb, 0xd9, 0x4f, 0xfc, + 0xdc, 0x3f, 0xfe, 0x0b, 0x70, 0x7b, 0xed, 0x87, + 0xfc, 0x6d, 0xa7, 0xfe, 0xe8, 0x17, 0x7f, 0x98, + 0x9f, 0xfe, 0xde, 0xc7, 0x7c, 0x07, 0x92, 0xfd, + 0x0d, 0x00, 0xf9, 0xde, 0xb6, 0xfd, 0xff, 0xd6, + 0x17, 0x80, 0xde, 0x6e, 0x7e, 0xf0, 0x1f, 0xff, + 0xf9, 0xf7, 0xfd, 0xe0, 0x37, 0x7f, 0xeb, 0x7f, + 0xfb, 0xec, 0x57, 0xfc, 0xf7, 0xb7, 0x00, 0x08, + 0x28, 0x42, 0x20, 0x00, 0xcc, 0xa4, 0x76, 0xf3, + 0xee, 0x3f, 0x18, 0x8a, 0x23, 0x59, 0x9a, 0x27, + 0x9a, 0xaa, 0x2b, 0x8b, 0x62, 0x19, 0x1c, 0xcb, + 0x33, 0x3d, 0x77, 0xef, 0x5c, 0xb4, 0x3b, 0xdf, + 0xdf, 0xd3, 0x81, 0x74, 0x98, 0xe8, 0x2c, 0xaf, + 0xa2, 0x05, 0xb8, 0xc1, 0x55, 0x7c, 0xce, 0x27, + 0x34, 0x2a, 0x9d, 0x42, 0x71, 0xb5, 0x2b, 0x96, + 0xd6, 0x34, 0xd6, 0x90, 0xd4, 0xef, 0xf3, 0x15, + 0x1c, 0x0d, 0x05, 0x48, 0x84, 0x92, 0x2b, 0x30, + 0x2c, 0x33, 0x5b, 0x30, 0x3c, 0x2e, 0x9f, 0xd3, + 0xdb, 0xd9, 0x3b, 0x5e, 0xf0, 0xa3, 0x79, 0xeb, + 0x7e, 0x91, 0x18, 0x49, 0x86, 0x57, 0x19, 0x1b, + 0x40, 0x19, 0x07, 0xd3, 0xdf, 0x22, 0x63, 0xa3, + 0xe3, 0x4d, 0xc1, 0x81, 0xe4, 0x24, 0xa5, 0x64, + 0xe4, 0x95, 0xe5, 0x64, 0xe4, 0xe6, 0xc1, 0x66, + 0x9f, 0x55, 0x8c, 0xe1, 0xa3, 0x63, 0x20, 0x19, + 0x51, 0xe2, 0x29, 0x40, 0xaa, 0x9a, 0xc6, 0xa8, + 0xeb, 0x2b, 0xec, 0x5f, 0x59, 0x4e, 0x0b, 0x02, + 0x82, 0xc1, 0x6d, 0xae, 0x6d, 0xec, 0x62, 0xa9, + 0x48, 0x99, 0x17, 0x9a, 0x40, 0xd0, 0x8b, 0xe8, + 0x85, 0x1b, 0x6f, 0xb2, 0xf2, 0x32, 0xcf, 0xac, + 0x4c, 0x1f, 0x73, 0xb4, 0x87, 0x6f, 0x08, 0x70, + 0x47, 0x19, 0x82, 0x84, 0x1e, 0xea, 0xc4, 0x9b, + 0xf4, 0x37, 0x38, 0xb3, 0x73, 0x0c, 0x74, 0x78, + 0x34, 0x35, 0x48, 0x86, 0xf1, 0xf1, 0xf0, 0x2a, + 0xab, 0xb7, 0x79, 0xbc, 0x3c, 0xe3, 0x38, 0x4c, + 0xf9, 0x3c, 0x2f, 0xfa, 0x87, 0x35, 0x87, 0xb0, + 0xfa, 0x5e, 0x2b, 0x7c, 0x02, 0x07, 0xc2, 0xa9, + 0x37, 0x88, 0xe0, 0x0e, 0x5b, 0x06, 0xff, 0x16, + 0x32, 0xdc, 0xc5, 0x43, 0x9f, 0x07, 0x7e, 0x1c, + 0x66, 0x8d, 0xe1, 0x16, 0x10, 0x21, 0xc6, 0x8c, + 0x3b, 0x0c, 0xba, 0x43, 0x91, 0xcd, 0x40, 0x81, + 0x85, 0x21, 0x41, 0x7a, 0x03, 0xc9, 0x70, 0xa4, + 0x49, 0x15, 0x26, 0x57, 0x8e, 0x84, 0x37, 0xed, + 0x12, 0xa6, 0x03, 0xb8, 0x58, 0x40, 0xec, 0x70, + 0x10, 0x20, 0x34, 0x45, 0x1a, 0x77, 0xf2, 0x3c, + 0xc1, 0xd1, 0x0c, 0xcd, 0x1a, 0xeb, 0x40, 0xc1, + 0xa8, 0x68, 0xc2, 0x9f, 0x0d, 0x40, 0x3f, 0x6b, + 0x1c, 0x70, 0x39, 0xc2, 0x80, 0x25, 0x12, 0x91, + 0x64, 0xee, 0x93, 0xb4, 0x0e, 0x00, 0x82, 0x49, + 0x3d, 0xb7, 0x72, 0x05, 0xf1, 0xf3, 0x1e, 0x09, + 0xa2, 0xff, 0x6c, 0x0a, 0x75, 0xd1, 0x25, 0x44, + 0xd6, 0x3c, 0xb4, 0xba, 0xb2, 0x6d, 0xbb, 0xec, + 0x6b, 0x50, 0x1a, 0x57, 0xb5, 0xad, 0x35, 0xf1, + 0xd3, 0x69, 0x5a, 0xb5, 0x75, 0xdd, 0xf2, 0xed, + 0x4b, 0xef, 0xec, 0x0a, 0xb1, 0x13, 0xae, 0x22, + 0x95, 0x71, 0x42, 0xf0, 0x30, 0x10, 0x79, 0xf5, + 0xee, 0xf5, 0xeb, 0xf8, 0xf1, 0x17, 0xb8, 0x81, + 0xcb, 0x46, 0xa4, 0x2c, 0xd5, 0x72, 0x07, 0xba, + 0x8c, 0x67, 0x38, 0x85, 0xec, 0xf9, 0xf3, 0x0a, + 0xc9, 0x2a, 0x31, 0xdb, 0x99, 0x61, 0x54, 0x04, + 0x53, 0x10, 0x88, 0x37, 0x03, 0x05, 0xed, 0xfa, + 0x75, 0x0a, 0xd1, 0x29, 0x10, 0x5f, 0xb5, 0x70, + 0x37, 0x2c, 0xe0, 0xca, 0x5d, 0x70, 0xd9, 0xba, + 0x05, 0x93, 0xc6, 0x69, 0xd8, 0xc2, 0x87, 0x4f, + 0xcc, 0x3d, 0x9b, 0xf4, 0x06, 0xcd, 0xa1, 0x84, + 0xd4, 0x70, 0xb9, 0xba, 0xb6, 0x05, 0xe5, 0x45, + 0x89, 0x53, 0xaf, 0x2e, 0xdb, 0xac, 0x5c, 0xc5, + 0xa9, 0x45, 0x14, 0x9e, 0xfe, 0x41, 0xfa, 0xd8, + 0x6a, 0xcd, 0xab, 0x93, 0x87, 0x7d, 0xfd, 0x30, + 0xf2, 0x0d, 0xb7, 0x43, 0xd0, 0x56, 0xff, 0x5d, + 0xe0, 0x77, 0xc7, 0xef, 0xe3, 0xcb, 0xd3, 0xf7, + 0x7c, 0xde, 0x44, 0x7b, 0xd5, 0xc6, 0x75, 0xcb, + 0x08, 0xae, 0x1a, 0x64, 0x53, 0xb8, 0x65, 0x57, + 0x1f, 0x81, 0x7e, 0xdd, 0x57, 0x42, 0x7e, 0x5e, + 0x01, 0xc7, 0xde, 0x7e, 0x4e, 0x24, 0x58, 0x20, + 0x84, 0x5d, 0x1d, 0x28, 0xe0, 0x0c, 0xd0, 0x45, + 0x97, 0x1e, 0x00, 0xe0, 0x75, 0x33, 0xc5, 0x83, + 0x11, 0x7a, 0xb8, 0xd3, 0x84, 0x4f, 0x61, 0x68, + 0x41, 0x77, 0x37, 0xf1, 0x17, 0x83, 0x7f, 0x3b, + 0x00, 0x78, 0x85, 0x85, 0x1f, 0xba, 0x38, 0x4f, + 0x88, 0x80, 0x8c, 0x68, 0xdb, 0x7c, 0x16, 0xc9, + 0xd0, 0xe2, 0x51, 0x2b, 0xde, 0x81, 0xe3, 0x8b, + 0x3d, 0x7e, 0x13, 0x23, 0x83, 0x03, 0x06, 0x59, + 0xe1, 0x89, 0x31, 0xb0, 0xe0, 0xdb, 0x52, 0x33, + 0xfa, 0xb8, 0xa4, 0x38, 0x0d, 0xe2, 0xa7, 0xe4, + 0x21, 0x0b, 0xf6, 0xe3, 0x24, 0x77, 0xf0, 0x6d, + 0xc6, 0x23, 0x93, 0x59, 0xc2, 0x02, 0xa4, 0x7e, + 0x42, 0x86, 0xa0, 0xe1, 0x45, 0x88, 0x75, 0x36, + 0x4d, 0x92, 0x79, 0x60, 0xa9, 0x25, 0x9a, 0x8e, + 0x70, 0xf9, 0x41, 0x87, 0x1f, 0x94, 0xe8, 0x0e, + 0x47, 0x29, 0xca, 0xc7, 0x1a, 0x91, 0x69, 0xda, + 0x99, 0xcc, 0x9a, 0xd3, 0x40, 0x19, 0xa5, 0x69, + 0xa5, 0xdd, 0x58, 0xc2, 0x62, 0x77, 0x74, 0xb2, + 0xd0, 0x9e, 0x77, 0x1a, 0x3a, 0xc7, 0x15, 0x60, + 0x89, 0xe8, 0xe5, 0x90, 0x32, 0x34, 0x01, 0xa6, + 0x5d, 0x82, 0x2e, 0xb4, 0x85, 0x98, 0x87, 0x5a, + 0xfa, 0x48, 0x9e, 0x00, 0xfd, 0x59, 0x02, 0x47, + 0x45, 0x74, 0x8a, 0x20, 0x16, 0x21, 0x75, 0x59, + 0xe7, 0xa5, 0xa5, 0xfa, 0x91, 0xa9, 0x8d, 0xcb, + 0x95, 0xa0, 0x61, 0x10, 0x6f, 0x5e, 0xa4, 0x5d, + 0x17, 0x63, 0x56, 0x6a, 0x2a, 0xad, 0x73, 0xa0, + 0xea, 0xa7, 0xaa, 0x24, 0xb8, 0x7a, 0xff, 0x8b, + 0x94, 0x8b, 0xf6, 0xe9, 0xab, 0xa3, 0xb5, 0x0a, + 0x0b, 0x47, 0xa2, 0x71, 0x91, 0x7a, 0x59, 0x0e, + 0x1c, 0x61, 0x09, 0xe6, 0x98, 0xac, 0x04, 0x3b, + 0x2c, 0xb4, 0x52, 0xdc, 0xea, 0x6c, 0xae, 0x14, + 0xe6, 0x11, 0xe9, 0xaf, 0x23, 0x30, 0x1b, 0x2d, + 0xb7, 0x4f, 0x4c, 0xcb, 0xce, 0xb1, 0xcc, 0xe5, + 0xa1, 0x68, 0x71, 0xd9, 0xfe, 0x52, 0x63, 0xb7, + 0xe9, 0xb2, 0xf0, 0x6d, 0x9b, 0x22, 0x80, 0x19, + 0x6e, 0x08, 0x57, 0x34, 0xfb, 0x9c, 0xba, 0xf5, + 0xae, 0x50, 0xec, 0x64, 0x8c, 0x8e, 0xe0, 0x6a, + 0x7f, 0x3e, 0x51, 0x49, 0x22, 0x16, 0x67, 0xda, + 0x3b, 0x30, 0x9f, 0x8d, 0xa1, 0xa7, 0xaf, 0xb6, + 0x78, 0x08, 0xfc, 0x2e, 0x74, 0x50, 0x05, 0x4c, + 0x30, 0xc4, 0xa6, 0xf0, 0x61, 0xec, 0xa6, 0x07, + 0x67, 0x81, 0xdd, 0x7e, 0x20, 0xed, 0x18, 0x31, + 0xc7, 0xfb, 0xfc, 0x0b, 0x6c, 0xb5, 0xd8, 0xe2, + 0x7b, 0x82, 0xa0, 0x53, 0x8d, 0xdb, 0x31, 0xca, + 0x1b, 0x8c, 0x7c, 0x1c, 0xc2, 0x20, 0xc3, 0xeb, + 0x32, 0x9d, 0xde, 0xa5, 0xdc, 0x31, 0xbb, 0x85, + 0x4e, 0x89, 0x49, 0x68, 0xac, 0x75, 0x52, 0xc3, + 0xcc, 0x28, 0xaf, 0x8c, 0x71, 0xc5, 0x28, 0x30, + 0xbc, 0x42, 0xa0, 0x78, 0xe8, 0xe0, 0xaa, 0xc0, + 0x3d, 0xd7, 0x5a, 0x73, 0xcb, 0x30, 0x23, 0x43, + 0x74, 0x99, 0x30, 0x88, 0xf2, 0xa9, 0xd2, 0x10, + 0x33, 0xfd, 0x32, 0xa7, 0x13, 0xab, 0x78, 0x47, + 0x1f, 0xdb, 0x56, 0x3d, 0x70, 0x2e, 0x0c, 0x89, + 0xdd, 0x2c, 0x20, 0xb8, 0x4c, 0xda, 0xd0, 0x91, + 0x67, 0x9b, 0x3d, 0x53, 0x0f, 0x3a, 0x66, 0x30, + 0xe8, 0x7f, 0x63, 0x2f, 0xf4, 0x35, 0xdd, 0x90, + 0xf5, 0x56, 0x37, 0xde, 0x79, 0xeb, 0xbd, 0x37, + 0xdf, 0x7d, 0xfb, 0xfd, 0x37, 0xe0, 0x81, 0x0b, + 0x3e, 0x38, 0xe1, 0x85, 0x1b, 0x7e, 0xff, 0x38, + 0xe2, 0x89, 0x2b, 0xbe, 0x38, 0xe3, 0x8d, 0x3b, + 0xfe, 0x38, 0xe4, 0x91, 0x4b, 0x3e, 0x39, 0xe5, + 0x95, 0xf7, 0x44, 0x00, 0x03, 0x04, 0x68, 0x8e, + 0x66, 0x05, 0x64, 0x3f, 0xae, 0xf9, 0xe6, 0xaf, + 0x11, 0x30, 0x40, 0x02, 0x01, 0x98, 0x6e, 0xfa, + 0x02, 0x0c, 0x40, 0x16, 0x7a, 0x2d, 0xbf, 0x59, + 0x45, 0xe0, 0x54, 0x49, 0x7f, 0x33, 0x7a, 0xe9, + 0xa7, 0x07, 0xb0, 0x00, 0x01, 0x7f, 0xb0, 0x0e, + 0x05, 0x01, 0x01, 0x94, 0x9e, 0xbb, 0x08, 0xbd, + 0xdb, 0x3e, 0xfc, 0x02, 0x8e, 0x0d, 0x10, 0x00, + 0xf0, 0x14, 0xa3, 0xe8, 0xb9, 0x7d, 0xf1, 0x45, + 0x91, 0x95, 0xec, 0x2c, 0x30, 0x50, 0xfb, 0xf0, + 0xa6, 0x0f, 0x50, 0x47, 0xef, 0xaa, 0x4b, 0xc1, + 0xc0, 0xe9, 0xda, 0x83, 0xc0, 0x7d, 0xf5, 0xc4, + 0xf3, 0x45, 0x40, 0xed, 0xc9, 0xab, 0xf0, 0xee, + 0x86, 0xe4, 0x99, 0x38, 0x85, 0x36, 0xe4, 0xfa, + 0x00, 0x7e, 0xf8, 0xa7, 0x5f, 0x1f, 0x07, 0x01, + 0x0b, 0x98, 0xee, 0x3d, 0x14, 0xf0, 0xe3, 0xdf, + 0x81, 0xf0, 0xf2, 0x6b, 0x3e, 0xbd, 0xed, 0xf6, + 0xb7, 0x95, 0xe3, 0x99, 0xce, 0x7c, 0x40, 0x2b, + 0x40, 0xe7, 0xac, 0x20, 0x27, 0xd7, 0x88, 0x24, + 0x7a, 0x27, 0xf0, 0x87, 0x03, 0x51, 0xd0, 0x3f, + 0xdf, 0x65, 0x0e, 0x73, 0xd4, 0x43, 0x1e, 0xfd, + 0xba, 0x37, 0x05, 0xfd, 0x85, 0xc0, 0x7e, 0xa6, + 0x4b, 0x80, 0x01, 0xa9, 0x97, 0x00, 0xb7, 0x10, + 0x10, 0x83, 0xf7, 0x0a, 0x0f, 0x89, 0x66, 0xc1, + 0xbc, 0x43, 0x41, 0x10, 0x0e, 0x1e, 0xbc, 0x9d, + 0x07, 0xa8, 0x57, 0x3c, 0x38, 0xf4, 0x4f, 0x80, + 0xef, 0xd3, 0xe0, 0x07, 0x26, 0x68, 0x40, 0x00, + 0xf4, 0x6f, 0x86, 0x1c, 0xc0, 0xdc, 0x02, 0x12, + 0xb0, 0x80, 0xd4, 0x7d, 0x80, 0x01, 0x0c, 0x18, + 0x40, 0xee, 0x68, 0x37, 0x44, 0x03, 0xff, 0x8e, + 0xce, 0x88, 0x16, 0x60, 0x40, 0x10, 0x17, 0x80, + 0xc4, 0x1c, 0x0e, 0x20, 0x8a, 0x53, 0x04, 0x41, + 0xfd, 0xac, 0x98, 0x3c, 0x20, 0x9e, 0x2e, 0x75, + 0x3b, 0xf4, 0x55, 0x6d, 0x30, 0x20, 0x09, 0x78, + 0x20, 0x49, 0x54, 0x1e, 0xb8, 0x05, 0xdb, 0x40, + 0x12, 0x12, 0x4a, 0x6d, 0x62, 0x1d, 0x68, 0x34, + 0x04, 0x80, 0xd8, 0x76, 0x81, 0x36, 0x4e, 0x63, + 0x52, 0x37, 0xb0, 0x23, 0x89, 0x18, 0x62, 0x84, + 0xf7, 0x98, 0x31, 0x11, 0x78, 0xec, 0x07, 0x80, + 0xd6, 0xe8, 0x9e, 0x36, 0xbe, 0x81, 0x50, 0x40, + 0x98, 0x1b, 0x20, 0xf9, 0x18, 0x41, 0x1e, 0xda, + 0x6e, 0x87, 0xfd, 0x9b, 0xdf, 0x0f, 0xa1, 0x28, + 0x44, 0xdc, 0x15, 0xd1, 0x88, 0x49, 0xac, 0x62, + 0x02, 0xae, 0xf8, 0xc4, 0x17, 0xa6, 0x4e, 0x7b, + 0x4d, 0x54, 0x9d, 0x24, 0x35, 0xc9, 0x43, 0x4c, + 0x4a, 0x71, 0x87, 0x1c, 0x2c, 0x62, 0x17, 0xbf, + 0xf7, 0x45, 0xf8, 0xd9, 0x0e, 0x84, 0x1d, 0xa8, + 0x9d, 0x11, 0xab, 0x07, 0x49, 0x00, 0x94, 0xb0, + 0x7e, 0xd5, 0x63, 0x62, 0xf8, 0x66, 0x69, 0x01, + 0xf2, 0xe5, 0x72, 0x97, 0xe1, 0x1b, 0xa1, 0xd0, + 0x9e, 0x76, 0x46, 0x10, 0x80, 0x67, 0x1d, 0xed, + 0x73, 0x18, 0x0c, 0x2a, 0xa0, 0x1c, 0x2f, 0xb4, + 0xaf, 0x68, 0x6c, 0x58, 0xe6, 0xcd, 0xd6, 0x10, + 0x4d, 0x51, 0x34, 0x73, 0x1c, 0x7d, 0x90, 0xc8, + 0x85, 0x82, 0x06, 0x2e, 0x72, 0xa8, 0x27, 0x29, + 0xd9, 0x2c, 0xca, 0x0a, 0x39, 0x00, 0x3f, 0x5d, + 0x6e, 0x60, 0x77, 0x1b, 0x28, 0x61, 0x2b, 0xcd, + 0xd7, 0xbf, 0xd1, 0xc9, 0x72, 0x03, 0xf1, 0xb3, + 0x80, 0x07, 0x13, 0xc0, 0x4a, 0xe0, 0xd9, 0xb2, + 0x7a, 0x3e, 0x7c, 0x22, 0x0e, 0x3d, 0xf0, 0x42, + 0x72, 0x8a, 0x00, 0x9d, 0xb7, 0xe4, 0xc0, 0xe9, + 0x2e, 0x18, 0xc0, 0x73, 0xc6, 0x2f, 0xff, 0xa0, + 0xe2, 0x2c, 0xe8, 0x3d, 0x79, 0x19, 0xbf, 0xeb, + 0x4d, 0x30, 0x95, 0x28, 0x28, 0xc3, 0x02, 0x3d, + 0xa6, 0xb5, 0x6f, 0x02, 0x01, 0x45, 0xa4, 0xa2, + 0xcb, 0x10, 0xc6, 0x01, 0x51, 0xa9, 0x6d, 0xa0, + 0x85, 0x1d, 0x0d, 0x8f, 0x36, 0x24, 0xd1, 0x0e, + 0x7b, 0x94, 0xcb, 0x18, 0x60, 0x12, 0x05, 0x52, + 0xc6, 0x61, 0x88, 0x7a, 0x54, 0x84, 0x55, 0x2b, + 0x78, 0xa1, 0x0d, 0x43, 0xe0, 0xcf, 0xe1, 0x99, + 0x2f, 0xa0, 0xf1, 0x4b, 0xa2, 0x40, 0x7d, 0x07, + 0xcf, 0x5f, 0x6e, 0x20, 0xa7, 0x06, 0xdd, 0xc0, + 0x29, 0xf5, 0x99, 0x4f, 0x12, 0x4c, 0x10, 0x89, + 0x50, 0x6c, 0x64, 0x4f, 0x03, 0xa8, 0x39, 0x4e, + 0x02, 0xd5, 0x76, 0xb8, 0xc3, 0x1c, 0x52, 0x2d, + 0x40, 0xbd, 0x0a, 0xbe, 0x30, 0x79, 0x9c, 0xfc, + 0x9f, 0xed, 0x46, 0x29, 0xc3, 0x01, 0xc4, 0x34, + 0x5e, 0x69, 0x30, 0x01, 0x46, 0xcd, 0x36, 0x0b, + 0x6a, 0x72, 0x34, 0x43, 0xf6, 0xa8, 0x00, 0x0e, + 0x5a, 0x5a, 0x56, 0xcd, 0x04, 0x28, 0xad, 0x1f, + 0x1d, 0xcc, 0x34, 0x93, 0x53, 0x56, 0xb7, 0x76, + 0xb3, 0x35, 0xe0, 0x6a, 0xeb, 0x58, 0xb3, 0x49, + 0x95, 0xbb, 0xee, 0xf1, 0x6d, 0x88, 0xc4, 0x01, + 0x02, 0x2f, 0x80, 0x4d, 0x13, 0x54, 0xf5, 0x04, + 0xac, 0x34, 0xea, 0x0b, 0x81, 0xc9, 0xc8, 0x46, + 0x6a, 0x8e, 0x7a, 0xf3, 0x3b, 0x2a, 0xea, 0x06, + 0x30, 0xbf, 0x17, 0xfa, 0x8e, 0x74, 0x93, 0x0d, + 0x68, 0xe6, 0x00, 0x88, 0xba, 0xa6, 0xde, 0x0f, + 0x04, 0xd4, 0xfb, 0xa2, 0x67, 0x87, 0x5a, 0x42, + 0x48, 0x7e, 0xb6, 0x9c, 0x3f, 0xa5, 0xe5, 0x69, + 0x51, 0x5b, 0x40, 0x7c, 0x76, 0x36, 0xa9, 0x30, + 0x5c, 0xac, 0x4e, 0x39, 0x6b, 0xc2, 0x5a, 0xaa, + 0xc0, 0x1f, 0xee, 0x7b, 0xab, 0x5d, 0xb1, 0x02, + 0x51, 0xb9, 0xc2, 0xd5, 0x59, 0xe5, 0xff, 0x52, + 0x6b, 0x6f, 0xb1, 0x02, 0x03, 0x0e, 0xd0, 0x05, + 0xb7, 0xc6, 0xf0, 0xa8, 0x59, 0x83, 0x9b, 0xdc, + 0x6d, 0xd0, 0xc8, 0xae, 0xbb, 0x7d, 0xeb, 0x5e, + 0x1b, 0x48, 0xdc, 0xaf, 0x22, 0x97, 0x4f, 0x46, + 0xd1, 0xc9, 0x09, 0x4a, 0x6b, 0x02, 0xed, 0xee, + 0xd4, 0x7a, 0xee, 0x3c, 0xdd, 0x16, 0x4f, 0x5b, + 0x43, 0x0e, 0x24, 0x96, 0x7f, 0x01, 0xdd, 0xa2, + 0x76, 0x83, 0xfa, 0xca, 0xa1, 0x06, 0x2f, 0xb5, + 0xb0, 0x55, 0xac, 0x7b, 0x4f, 0xab, 0xde, 0x53, + 0x16, 0x96, 0xa0, 0xa6, 0x63, 0x6d, 0x00, 0xf6, + 0xb7, 0x3b, 0xda, 0xa6, 0xc0, 0xb6, 0x16, 0x1b, + 0xca, 0x58, 0x8a, 0x8b, 0x5b, 0x66, 0x7e, 0x95, + 0x2e, 0x6f, 0x58, 0x9f, 0x80, 0x85, 0xab, 0x5c, + 0xe4, 0x1a, 0xd8, 0x22, 0x5b, 0x28, 0x84, 0xca, + 0x3a, 0x42, 0xb6, 0xbc, 0x54, 0x04, 0xb9, 0xd5, + 0x55, 0x85, 0x72, 0x4b, 0xc0, 0xdd, 0x11, 0xf4, + 0xd0, 0xbc, 0x1f, 0xf4, 0xe5, 0x87, 0x4d, 0x1b, + 0x62, 0xd8, 0xe2, 0x6f, 0x9f, 0x1d, 0x28, 0xe1, + 0xfe, 0xc6, 0x89, 0xdf, 0x98, 0xc2, 0xd4, 0x04, + 0x8f, 0x14, 0xea, 0x6a, 0x01, 0x50, 0xbb, 0x7b, + 0xca, 0x78, 0xc4, 0x28, 0xfe, 0x21, 0x0e, 0x1d, + 0x2b, 0x59, 0xc9, 0x96, 0x96, 0xbf, 0x32, 0x05, + 0xef, 0x09, 0x13, 0x03, 0xd6, 0x0c, 0x9c, 0x31, + 0xc0, 0x44, 0xe6, 0x00, 0x82, 0x0b, 0x7c, 0xe4, + 0x08, 0xe7, 0x56, 0x27, 0xd5, 0x65, 0xf0, 0x92, + 0xdf, 0x51, 0xd7, 0x22, 0x5c, 0x18, 0x2d, 0x6e, + 0x9b, 0x80, 0x71, 0x4b, 0x13, 0x92, 0x2d, 0x03, + 0x36, 0x05, 0xf5, 0x25, 0x81, 0x7a, 0xa5, 0x7a, + 0xba, 0xef, 0xbe, 0xd6, 0xb5, 0x8a, 0x1d, 0xef, + 0x06, 0xbe, 0xdc, 0x5d, 0x13, 0x8a, 0xf8, 0xb5, + 0x61, 0x4e, 0xb3, 0xfc, 0xb0, 0x68, 0xbe, 0x37, + 0xd7, 0x77, 0xc6, 0xeb, 0x8d, 0x2d, 0xff, 0x00, + 0xe6, 0x9b, 0xe3, 0x82, 0x02, 0xd9, 0xc7, 0x20, + 0xf0, 0xb3, 0xbf, 0x84, 0xec, 0xa6, 0xcc, 0x7c, + 0x75, 0xc0, 0xdf, 0x24, 0x8b, 0x34, 0x4b, 0xc3, + 0x5b, 0xe6, 0x36, 0x97, 0xc0, 0x58, 0x06, 0xd8, + 0x82, 0x41, 0x1a, 0x65, 0x70, 0x3d, 0x38, 0x15, + 0x38, 0xe0, 0x11, 0x32, 0xfb, 0x05, 0x69, 0xbb, + 0xae, 0xc6, 0x79, 0x22, 0x68, 0x71, 0x0e, 0xe7, + 0xcc, 0xde, 0x1a, 0xdf, 0x17, 0xb6, 0x34, 0x76, + 0x28, 0x89, 0xc9, 0x0b, 0x64, 0x0e, 0x6c, 0xd8, + 0x02, 0x3f, 0x7d, 0x33, 0x7e, 0x15, 0xdb, 0x81, + 0x0f, 0xce, 0xef, 0xc5, 0x1d, 0xa8, 0x2f, 0xaa, + 0xc5, 0x8c, 0xe7, 0x1b, 0xb7, 0x59, 0x7b, 0x32, + 0x9c, 0x24, 0xb0, 0x29, 0x09, 0x68, 0x0f, 0x0c, + 0x3b, 0x6b, 0xe9, 0xfb, 0x81, 0x4c, 0x1e, 0x35, + 0xe9, 0x24, 0xf4, 0x36, 0xa4, 0x88, 0x36, 0xa9, + 0x92, 0x1f, 0x3d, 0x65, 0x8b, 0x64, 0xb9, 0xda, + 0xcb, 0x05, 0x48, 0xa5, 0x5b, 0x73, 0xe9, 0x84, + 0x1d, 0xf2, 0x99, 0x4b, 0xf6, 0x2f, 0x2b, 0x3a, + 0xc1, 0xc7, 0x71, 0xcb, 0x0e, 0x7e, 0x34, 0xfe, + 0x2e, 0x11, 0xf3, 0x3c, 0x6a, 0xed, 0xc6, 0x99, + 0xd5, 0x23, 0x46, 0xf3, 0x9a, 0x0d, 0xa8, 0x66, + 0x53, 0xaf, 0x18, 0x8b, 0x51, 0x3d, 0xe8, 0x98, + 0xe9, 0x7d, 0x67, 0xc5, 0xda, 0xd9, 0xdd, 0x78, + 0xd6, 0x73, 0x6b, 0xe3, 0x39, 0x02, 0x15, 0x73, + 0x80, 0xab, 0xa1, 0x2b, 0x36, 0x85, 0xca, 0x41, + 0x17, 0x43, 0x24, 0xb8, 0x34, 0x0c, 0x8f, 0x72, + 0x75, 0x13, 0xdc, 0x70, 0x0c, 0xe7, 0x36, 0xc1, + 0x4f, 0x96, 0xb4, 0xa0, 0xa5, 0xdc, 0x5c, 0x43, + 0x80, 0x7b, 0x09, 0x6c, 0xeb, 0x78, 0x72, 0x2b, + 0x1c, 0x9e, 0x2a, 0xb3, 0x40, 0x87, 0x1e, 0x80, + 0x1f, 0x30, 0x6d, 0x5d, 0xce, 0xda, 0xa5, 0x3c, + 0xd7, 0xa4, 0x3e, 0xf3, 0x50, 0xe7, 0xff, 0x0d, + 0x68, 0x5b, 0xc3, 0x7a, 0xcd, 0xae, 0x6c, 0x73, + 0x99, 0x37, 0x6c, 0x6e, 0xd7, 0xd2, 0x98, 0xe5, + 0xf6, 0xcd, 0x2f, 0x8e, 0x5b, 0xeb, 0x67, 0xc9, + 0x66, 0x0e, 0xc4, 0x78, 0x86, 0xed, 0xfc, 0x10, + 0x2e, 0xae, 0x44, 0xfb, 0x49, 0xcb, 0x84, 0x4e, + 0xdf, 0xc4, 0x51, 0xe8, 0x8b, 0x89, 0x63, 0xd3, + 0xc9, 0x52, 0xc7, 0x38, 0xa3, 0x29, 0x3d, 0xed, + 0xe6, 0x9e, 0xc6, 0x1a, 0xd8, 0xb5, 0xae, 0xb5, + 0xf9, 0x14, 0x0c, 0x41, 0xaa, 0xa0, 0xbc, 0x41, + 0xf7, 0xae, 0xab, 0x57, 0x6d, 0x81, 0xd1, 0x92, + 0x59, 0x97, 0x3e, 0x37, 0x7a, 0x89, 0xd5, 0x6e, + 0x74, 0x1a, 0xd7, 0xb7, 0xe6, 0xb0, 0xb5, 0x9e, + 0x11, 0xfd, 0x99, 0xbc, 0x12, 0xde, 0x7c, 0x9e, + 0x64, 0xee, 0xf9, 0x88, 0x01, 0x0e, 0xf4, 0xf7, + 0x02, 0x0f, 0xe5, 0xae, 0x0d, 0xc0, 0x14, 0x15, + 0x3a, 0xdb, 0x38, 0x03, 0x2f, 0x88, 0xbe, 0x03, + 0xad, 0x9f, 0xd6, 0xa8, 0x31, 0x14, 0xe6, 0xf5, + 0x9b, 0x48, 0x70, 0x36, 0x92, 0x95, 0x2b, 0xf1, + 0x49, 0xa3, 0xb0, 0xe1, 0x6f, 0x6b, 0x02, 0x52, + 0xc8, 0x2a, 0x6d, 0x8d, 0x8b, 0x5d, 0xcb, 0xca, + 0x86, 0xeb, 0xb6, 0xc3, 0x6d, 0xe8, 0x45, 0x8b, + 0xbe, 0x15, 0x59, 0x19, 0x02, 0x8e, 0x26, 0x98, + 0x49, 0xcd, 0xa1, 0x53, 0xd6, 0x7c, 0x07, 0x1e, + 0x3a, 0xe9, 0xe9, 0x72, 0x54, 0x77, 0xb8, 0xf1, + 0x72, 0xd7, 0xf5, 0xed, 0x92, 0x68, 0x76, 0x75, + 0xb7, 0x16, 0x00, 0xf6, 0x4b, 0x00, 0xcc, 0xf9, + 0x3c, 0xf8, 0xc3, 0xfb, 0x6e, 0x78, 0xb3, 0xec, + 0xb7, 0x99, 0x7f, 0x8e, 0x3f, 0x78, 0xa3, 0x73, + 0x88, 0xf7, 0x6e, 0xe8, 0x05, 0x7d, 0x88, 0xfd, + 0x78, 0x5b, 0xcb, 0x5c, 0x0a, 0x7e, 0x9b, 0xcc, + 0xae, 0x9d, 0x79, 0xa6, 0x87, 0x7c, 0xd1, 0xd7, + 0x70, 0x07, 0x0e, 0xa6, 0x0b, 0x04, 0xff, 0x2b, + 0xb5, 0x1e, 0xdb, 0x5b, 0x6f, 0x6e, 0x45, 0xdf, + 0x56, 0x57, 0x33, 0x4c, 0x3e, 0xca, 0x14, 0xd1, + 0xc0, 0x62, 0x3a, 0x31, 0x8b, 0x33, 0xa0, 0xd0, + 0xde, 0xca, 0x57, 0xe7, 0x05, 0x09, 0x14, 0xfe, + 0xb4, 0x5b, 0xf4, 0x19, 0x5d, 0xbe, 0xcd, 0xdb, + 0xdd, 0x35, 0xdf, 0xbd, 0x05, 0x15, 0xf5, 0xfc, + 0x90, 0x4f, 0x15, 0x9f, 0xaa, 0xf5, 0x92, 0xbf, + 0x01, 0xde, 0xae, 0x0d, 0x95, 0x7a, 0x51, 0xd6, + 0x40, 0xe1, 0x9b, 0x3d, 0x9d, 0xdd, 0x01, 0xfe, + 0xde, 0xa8, 0x3c, 0x03, 0x9b, 0x18, 0xc4, 0x69, + 0x34, 0x5c, 0xc4, 0x2d, 0x59, 0xd4, 0xb9, 0x03, + 0x09, 0xf6, 0x07, 0x32, 0xb5, 0x9f, 0x83, 0xd5, + 0xd5, 0x71, 0x89, 0x60, 0xaa, 0x0c, 0x03, 0x76, + 0x29, 0x07, 0xe8, 0x4d, 0xd4, 0xf7, 0x61, 0x89, + 0xe2, 0x0d, 0xcf, 0xcd, 0x39, 0x60, 0xfc, 0x4c, + 0x9f, 0xcb, 0xbd, 0x1d, 0xf0, 0xad, 0x16, 0x02, + 0x26, 0xe0, 0x79, 0x69, 0xa0, 0xf7, 0x34, 0xe0, + 0x89, 0x09, 0x14, 0x25, 0x61, 0x51, 0xf6, 0xed, + 0x10, 0xf2, 0x21, 0xde, 0xad, 0x21, 0x9f, 0x0f, + 0x4d, 0x0f, 0xf2, 0x01, 0x20, 0xf2, 0xa5, 0x58, + 0x13, 0xe6, 0x10, 0x65, 0xc9, 0x93, 0x07, 0x28, + 0x1e, 0x30, 0x91, 0x4e, 0x15, 0x1e, 0x86, 0x33, + 0x04, 0x16, 0x7b, 0x50, 0xc4, 0x55, 0x40, 0x45, + 0x27, 0x5c, 0xc3, 0xeb, 0x2c, 0x41, 0x54, 0x18, + 0x81, 0x56, 0x10, 0xd7, 0x1a, 0xba, 0xa1, 0x24, + 0xf0, 0x47, 0x11, 0xc4, 0x0e, 0x1b, 0xa6, 0x61, + 0x22, 0xbc, 0x61, 0x74, 0xc4, 0x21, 0x1b, 0xfa, + 0x15, 0x99, 0xdc, 0x84, 0x1d, 0x2e, 0x5a, 0x80, + 0xf8, 0xc9, 0x5e, 0x4d, 0x04, 0x1f, 0x0e, 0x5c, + 0x00, 0x8a, 0x52, 0x07, 0x68, 0x16, 0xea, 0x38, + 0x21, 0xf2, 0xb9, 0xdd, 0x23, 0xf2, 0xe0, 0x07, + 0xe5, 0x0e, 0x18, 0xee, 0x20, 0xb1, 0x0b, 0x39, + 0x5f, 0x17, 0x3e, 0xa1, 0x55, 0x21, 0x5f, 0x02, + 0x44, 0x00, 0x00, 0x3b, +}; + +static const uint8_t data_images_ti_logo_gif[] = +{ + /* /images/ti_logo.gif */ + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x74, 0x69, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, + 0x67, 0x69, 0x66, 0x00, + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x68, 0x01, + 0x54, 0x00, 0xb3, 0x0f, 0x00, 0xf2, 0x54, 0x5a, + 0x25, 0x25, 0x25, 0xa3, 0xa3, 0xa3, 0xf5, 0x87, + 0x8b, 0x62, 0x62, 0x62, 0x83, 0x83, 0x83, 0x48, + 0x48, 0x48, 0xfa, 0xf7, 0xf8, 0xd4, 0xd4, 0xd4, + 0xbf, 0xbf, 0xbf, 0xea, 0xe7, 0xe7, 0xf9, 0xaf, + 0xb2, 0xfb, 0xce, 0xd0, 0xed, 0x1c, 0x24, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x21, 0xf9, 0x04, + 0x01, 0x00, 0x00, 0x0f, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x68, 0x01, 0x54, 0x00, 0x00, 0x04, + 0xff, 0xf0, 0xc9, 0x49, 0xab, 0x5d, 0x2d, 0xeb, + 0xcd, 0x33, 0xb0, 0x60, 0x28, 0x8e, 0x64, 0x69, + 0x9e, 0x68, 0xaa, 0xae, 0x6c, 0xeb, 0xbe, 0x70, + 0x2c, 0xcf, 0x15, 0xd6, 0xdd, 0xda, 0x47, 0xef, + 0x7c, 0xef, 0xff, 0xc0, 0xa0, 0x70, 0x28, 0xb3, + 0xe1, 0x6e, 0x3a, 0xa2, 0x72, 0xc9, 0x6c, 0x3a, + 0x9f, 0x50, 0x94, 0xf1, 0xc8, 0x49, 0x46, 0xaf, + 0xd8, 0xac, 0x76, 0xcb, 0x95, 0x4c, 0xa9, 0x39, + 0xd1, 0x01, 0x40, 0x2e, 0x37, 0x16, 0xdd, 0xb4, + 0x7a, 0xcd, 0x4e, 0x7f, 0xc1, 0x0d, 0x6b, 0x85, + 0x71, 0x63, 0xb4, 0xef, 0xf8, 0xbc, 0x7e, 0xf7, + 0x06, 0xcb, 0x29, 0x7d, 0x7b, 0x82, 0x83, 0x84, + 0x85, 0x80, 0x70, 0x55, 0x22, 0x03, 0x1d, 0x7f, + 0x86, 0x8e, 0x8f, 0x90, 0x50, 0x7d, 0x54, 0x8d, + 0x12, 0x00, 0x1d, 0x03, 0x91, 0x9a, 0x9b, 0x9c, + 0x41, 0x93, 0x47, 0x95, 0x0a, 0x37, 0x68, 0x9d, + 0xa5, 0xa6, 0xa7, 0x2a, 0x9f, 0x38, 0x95, 0x74, + 0x1d, 0x76, 0xa8, 0xb0, 0xb1, 0xb2, 0x0f, 0xaa, + 0x48, 0x21, 0x0a, 0x0b, 0xb9, 0xba, 0x0b, 0x07, + 0xb3, 0xbe, 0xbf, 0x9a, 0xb5, 0x8c, 0xc0, 0xc4, + 0xc5, 0xb0, 0xc2, 0x89, 0xc6, 0xca, 0xcb, 0x90, + 0xc8, 0x55, 0x65, 0x99, 0x0f, 0x07, 0x03, 0x65, + 0x65, 0xaf, 0x0b, 0xd5, 0xd9, 0xd9, 0xd1, 0x28, + 0x04, 0x06, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe1, + 0x09, 0xcc, 0xe7, 0xa7, 0xce, 0x38, 0xd1, 0xad, + 0x1c, 0xaf, 0x97, 0x88, 0x95, 0x21, 0x09, 0x0e, + 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xf8, 0x04, 0xe8, + 0xfd, 0x9c, 0xea, 0xa3, 0xbc, 0xdc, 0xe8, 0xf5, + 0x00, 0x1e, 0x1c, 0x79, 0x20, 0x0a, 0xe8, 0x5b, + 0xc8, 0xb0, 0x5e, 0x00, 0x82, 0xfe, 0x22, 0x1a, + 0x02, 0xd8, 0x41, 0x81, 0x84, 0x45, 0xc9, 0x44, + 0x21, 0x8a, 0x93, 0x22, 0x80, 0xbd, 0x00, 0xe0, + 0xff, 0x08, 0x10, 0xf0, 0x98, 0xcf, 0x80, 0xb7, + 0x6f, 0x24, 0xeb, 0x09, 0x90, 0xc8, 0x92, 0x10, + 0xc5, 0x0d, 0x49, 0x0c, 0x6a, 0x88, 0xa6, 0x0e, + 0x61, 0x05, 0x7a, 0x0e, 0x0a, 0x58, 0xb4, 0x90, + 0x52, 0xa5, 0x85, 0x03, 0x09, 0x0c, 0x38, 0xe0, + 0xd7, 0xb2, 0x68, 0x9e, 0x97, 0x61, 0xa4, 0x05, + 0x7c, 0x80, 0x31, 0x1e, 0x0a, 0xa1, 0x10, 0x2d, + 0x08, 0xbd, 0x87, 0x40, 0x84, 0xc2, 0x9d, 0x46, + 0xb3, 0xaa, 0x41, 0x9a, 0x81, 0x5d, 0x1d, 0x4b, + 0x1b, 0x39, 0x9e, 0x10, 0x50, 0x55, 0x04, 0x01, + 0x7c, 0x65, 0xe7, 0xa5, 0xd5, 0xca, 0x56, 0x0b, + 0xd7, 0x33, 0x02, 0x3b, 0x10, 0x94, 0xe9, 0x87, + 0xc6, 0x54, 0x7b, 0x6b, 0x1f, 0x20, 0x48, 0xa0, + 0x00, 0x81, 0x82, 0x03, 0x7d, 0xfd, 0x22, 0x10, + 0x4c, 0xd8, 0xaf, 0x84, 0xbd, 0x7d, 0x03, 0x27, + 0x46, 0x3c, 0x01, 0x28, 0x61, 0x05, 0x81, 0x43, + 0x00, 0x1e, 0x9c, 0x18, 0x85, 0x82, 0x04, 0x05, + 0x32, 0x93, 0x9d, 0xf0, 0xb7, 0x6d, 0xb0, 0xb0, + 0xae, 0x2e, 0x0e, 0x7b, 0xd0, 0xce, 0xe9, 0x8c, + 0xbb, 0xf5, 0xf2, 0x2a, 0x6c, 0xa8, 0x2f, 0x80, + 0x04, 0x01, 0xac, 0xb1, 0x1e, 0xe8, 0x69, 0x8f, + 0xa8, 0x05, 0x9c, 0xf6, 0x0c, 0x98, 0x40, 0x80, + 0xfa, 0x1e, 0xd9, 0x9c, 0x9e, 0x23, 0x01, 0xcc, + 0x36, 0x17, 0x93, 0x04, 0x3a, 0xd5, 0xea, 0x9e, + 0x46, 0x6b, 0x01, 0x01, 0x6d, 0xd6, 0x0e, 0xcc, + 0x3d, 0x50, 0x70, 0xb6, 0x64, 0xc2, 0x7b, 0x01, + 0xa4, 0x83, 0xa8, 0x4e, 0x95, 0x04, 0xf7, 0x86, + 0xba, 0x83, 0x3f, 0x52, 0xc7, 0x8d, 0x82, 0x46, + 0x0e, 0xa4, 0xa2, 0x9e, 0x5f, 0x65, 0x97, 0xb9, + 0x05, 0xd8, 0xf8, 0x40, 0xca, 0x37, 0xd0, 0xd3, + 0xf6, 0x83, 0xd5, 0xf7, 0x0a, 0x80, 0xc0, 0x6d, + 0xdf, 0x82, 0x02, 0x7d, 0xfa, 0x59, 0x85, 0x8f, + 0xff, 0x49, 0xde, 0xe4, 0x83, 0x95, 0x78, 0x2e, + 0x85, 0xf5, 0xca, 0x1c, 0x5f, 0x59, 0x50, 0x9a, + 0x2d, 0xcb, 0x75, 0xd7, 0x1c, 0x3e, 0x01, 0x56, + 0x00, 0xd4, 0x54, 0x07, 0xf6, 0x16, 0x5e, 0x05, + 0x53, 0x6d, 0x18, 0x02, 0x7c, 0xf1, 0x89, 0x80, + 0xdb, 0x50, 0x07, 0x5e, 0x68, 0x8f, 0x76, 0x08, + 0x0e, 0xa2, 0xce, 0x81, 0x13, 0xf4, 0x11, 0xd5, + 0x04, 0x4d, 0x1d, 0xc1, 0xa2, 0x0b, 0xbd, 0xe5, + 0x75, 0x18, 0x3e, 0x28, 0x5a, 0xa0, 0x50, 0x85, + 0xd3, 0xe5, 0xc3, 0xe3, 0x7d, 0x78, 0x91, 0x40, + 0x12, 0x6d, 0x39, 0x4e, 0xc0, 0x9d, 0x87, 0x15, + 0x38, 0x37, 0x54, 0x8a, 0x85, 0x38, 0x53, 0x49, + 0x8c, 0x1e, 0x84, 0x40, 0xd7, 0x52, 0x31, 0xd4, + 0x08, 0x02, 0x02, 0x38, 0x92, 0x50, 0x40, 0x7f, + 0x20, 0x06, 0x79, 0xa3, 0x4f, 0x23, 0xe0, 0x14, + 0x80, 0x92, 0xb5, 0x85, 0x90, 0xd2, 0x8f, 0x3c, + 0x39, 0xf0, 0x22, 0x93, 0x4a, 0x1c, 0xe0, 0xe6, + 0x9b, 0x70, 0xc6, 0x19, 0x27, 0x2d, 0x1b, 0x55, + 0x32, 0x65, 0x79, 0x14, 0x4c, 0x39, 0x5a, 0x95, + 0xee, 0x25, 0x99, 0xe5, 0x0a, 0xdf, 0x39, 0xb0, + 0x21, 0x49, 0xfd, 0x6d, 0x57, 0x0f, 0x3f, 0x81, + 0xce, 0x38, 0x5b, 0x99, 0x23, 0x1c, 0xa0, 0x13, + 0x9b, 0x4e, 0xe8, 0x09, 0x1a, 0x1c, 0x78, 0x4a, + 0x70, 0x00, 0x95, 0x14, 0x5c, 0x8a, 0x08, 0x29, + 0x30, 0x58, 0x39, 0xe1, 0x3d, 0x45, 0x9e, 0x40, + 0x9b, 0x7e, 0xab, 0x3d, 0x44, 0xc2, 0x7f, 0xf5, + 0x98, 0xd3, 0x25, 0x70, 0x16, 0xf6, 0xb4, 0x12, + 0xa4, 0x69, 0x48, 0x3a, 0x29, 0x15, 0x9c, 0x52, + 0xf0, 0x60, 0x06, 0x0b, 0x1e, 0xb2, 0xd1, 0x9a, + 0x2b, 0x78, 0xea, 0x27, 0xa8, 0x21, 0x88, 0x14, + 0x66, 0x7c, 0xf8, 0x85, 0x5a, 0x41, 0xa9, 0x96, + 0xf6, 0x84, 0xa4, 0x04, 0xbd, 0x05, 0x40, 0x80, + 0xff, 0x00, 0x33, 0xc2, 0xfa, 0x04, 0x94, 0xb3, + 0xc2, 0xc1, 0xab, 0x8b, 0x20, 0x50, 0x0b, 0x4a, + 0xb4, 0x29, 0xf8, 0x4a, 0x01, 0x96, 0xc0, 0x4e, + 0xb8, 0xec, 0xb1, 0x0b, 0xa1, 0x09, 0x02, 0x49, + 0x15, 0xe2, 0x97, 0x9a, 0x8e, 0x0c, 0x39, 0x5b, + 0x80, 0x8d, 0xd2, 0x2a, 0x71, 0x6b, 0xb5, 0xb4, + 0x0e, 0x60, 0xef, 0x00, 0x04, 0x51, 0xab, 0xc3, + 0x34, 0xf7, 0x62, 0x33, 0x29, 0xaf, 0x4f, 0xf5, + 0xf9, 0x6d, 0x7c, 0xf4, 0x05, 0x60, 0xb0, 0xc1, + 0x87, 0x96, 0xd0, 0x9b, 0xa0, 0x26, 0xe0, 0x86, + 0xd5, 0x88, 0xac, 0x66, 0xfa, 0x5c, 0x3e, 0x01, + 0x14, 0x00, 0x70, 0xbc, 0x40, 0x68, 0x4b, 0xaf, + 0x72, 0x05, 0x19, 0x47, 0xda, 0xc6, 0x19, 0x5c, + 0x6c, 0x82, 0xb7, 0x13, 0x80, 0x0b, 0xdd, 0x92, + 0x24, 0x2c, 0x9a, 0x9f, 0x09, 0xd5, 0x21, 0xd9, + 0x93, 0xa9, 0x15, 0x28, 0x30, 0xb1, 0x3e, 0xc6, + 0x62, 0xec, 0x83, 0xa6, 0x20, 0xd7, 0x69, 0xe9, + 0x52, 0x1a, 0x87, 0x25, 0xb2, 0xc2, 0x02, 0x97, + 0x1c, 0xdf, 0xc1, 0x07, 0x33, 0x4a, 0xc2, 0xc2, + 0xf0, 0x9a, 0x67, 0xcf, 0xab, 0x13, 0xa8, 0xeb, + 0x00, 0xd3, 0xe4, 0x9e, 0x0c, 0xb5, 0xcd, 0x41, + 0xcc, 0x9b, 0xf3, 0x0d, 0x5e, 0x85, 0xd6, 0x31, + 0xc8, 0x3f, 0x1f, 0x1d, 0xf4, 0x97, 0x27, 0x4a, + 0xf3, 0xe6, 0x6b, 0x0c, 0x6b, 0xd9, 0x1a, 0x09, + 0xf0, 0xb9, 0x16, 0xf3, 0x80, 0x61, 0x8e, 0x14, + 0x1b, 0xd5, 0x44, 0x58, 0x7d, 0xf5, 0x06, 0xa4, + 0xf4, 0x61, 0x11, 0xce, 0x1b, 0x77, 0x3d, 0x02, + 0xc9, 0x60, 0xa7, 0x1a, 0xc2, 0x37, 0x24, 0x88, + 0x39, 0xea, 0xde, 0x87, 0x02, 0x95, 0xc0, 0x5e, + 0x7e, 0xd1, 0x96, 0x74, 0xa6, 0x98, 0x2d, 0x1c, + 0x31, 0xdc, 0x55, 0xcf, 0x4d, 0xc5, 0x4e, 0xfa, + 0x1e, 0x77, 0xb5, 0xde, 0x22, 0xf0, 0xad, 0xd7, + 0xff, 0x9f, 0x3f, 0x71, 0x9b, 0x6c, 0x3d, 0xfa, + 0x11, 0x39, 0xcf, 0xc9, 0x2b, 0xa3, 0xe0, 0xe8, + 0x3e, 0x90, 0x13, 0xb1, 0x9e, 0xe4, 0x49, 0x6d, + 0xbd, 0x01, 0x4d, 0x97, 0xbf, 0xa0, 0xb9, 0xc9, + 0x7e, 0xb3, 0x50, 0x9d, 0xa9, 0xab, 0xc2, 0x5c, + 0x41, 0xa0, 0xd0, 0xa9, 0xad, 0xd7, 0xe2, 0x14, + 0xa8, 0x3b, 0x6e, 0xea, 0x3d, 0x8c, 0xc1, 0x3a, + 0x4c, 0x3b, 0x77, 0x40, 0x4a, 0xcf, 0x3e, 0xcb, + 0xfe, 0xf5, 0xe6, 0xe1, 0xaa, 0x00, 0x22, 0xd3, + 0x81, 0x16, 0xaa, 0x32, 0x81, 0x22, 0x65, 0x2f, + 0x92, 0xe8, 0x0f, 0x8c, 0xb4, 0xdb, 0x3d, 0xc3, + 0x13, 0xcf, 0x03, 0xde, 0xac, 0x67, 0xed, 0x0e, + 0x58, 0x39, 0x63, 0xfe, 0xf7, 0xf3, 0xb4, 0x47, + 0x57, 0x02, 0x02, 0xf6, 0xc9, 0x9c, 0x70, 0x63, + 0xb4, 0x4d, 0x9d, 0xf6, 0xc5, 0x10, 0x13, 0x45, + 0x4f, 0xf8, 0x42, 0x1b, 0x2d, 0x7e, 0xe4, 0xc7, + 0x83, 0x0b, 0x9d, 0xe4, 0x82, 0x3e, 0xae, 0xbd, + 0x20, 0x50, 0xf0, 0x6a, 0x5f, 0xcd, 0x24, 0xf0, + 0x1f, 0x0f, 0xdd, 0x85, 0x45, 0x10, 0x73, 0x40, + 0x86, 0xe6, 0x27, 0x02, 0xda, 0xf4, 0x62, 0x51, + 0x63, 0x1a, 0x81, 0xba, 0xa6, 0xf6, 0xbf, 0x1f, + 0x30, 0xaf, 0x5a, 0xaf, 0xa8, 0xdc, 0xc7, 0x62, + 0x47, 0x23, 0xf6, 0xe1, 0x83, 0x83, 0x14, 0x80, + 0x8f, 0x76, 0xf0, 0x83, 0x42, 0xa7, 0x6d, 0x08, + 0x37, 0x0b, 0x04, 0x92, 0x6f, 0x98, 0x55, 0x9b, + 0x68, 0x8d, 0x48, 0x77, 0x1d, 0x04, 0xc2, 0xea, + 0xae, 0x36, 0x81, 0x3b, 0xc5, 0x25, 0x7d, 0x2f, + 0xe0, 0xde, 0x4d, 0x88, 0x95, 0x99, 0x22, 0x6e, + 0xe9, 0x2e, 0x2f, 0xcc, 0x8d, 0x64, 0x06, 0xf7, + 0x80, 0xa9, 0xe0, 0x70, 0x3f, 0x21, 0x92, 0xe1, + 0x47, 0x0a, 0x20, 0x80, 0x2a, 0x0a, 0xa0, 0x37, + 0x28, 0xcc, 0x61, 0x0f, 0x64, 0x35, 0xab, 0x7d, + 0xff, 0x2d, 0xe5, 0x2d, 0x1b, 0x50, 0xdf, 0x6d, + 0xac, 0x63, 0x01, 0xde, 0x41, 0xe7, 0x55, 0x5d, + 0x1a, 0x9e, 0xca, 0x7c, 0xa3, 0x2e, 0xcf, 0x91, + 0x0d, 0x75, 0xed, 0x63, 0x4d, 0x16, 0xb5, 0xc8, + 0x03, 0x30, 0x72, 0xc0, 0x7c, 0x1b, 0x78, 0xc5, + 0x0e, 0xab, 0x25, 0x46, 0xce, 0xcc, 0xec, 0x69, + 0x13, 0x58, 0x15, 0xe9, 0x5c, 0xe3, 0xb4, 0xa5, + 0x65, 0xca, 0x8c, 0x0b, 0x29, 0xd4, 0x04, 0x1c, + 0x97, 0x1a, 0x8f, 0x04, 0x05, 0x3c, 0xc0, 0xa3, + 0xe3, 0x0e, 0xb8, 0x08, 0x9a, 0xf4, 0x30, 0xe0, + 0x92, 0x98, 0x64, 0x00, 0x44, 0x0e, 0x70, 0xc9, + 0x69, 0xd0, 0xab, 0x8f, 0x0c, 0x34, 0x89, 0x11, + 0x8b, 0x68, 0x00, 0xa6, 0x5d, 0x71, 0x94, 0xa8, + 0x44, 0xe5, 0xb3, 0xee, 0x63, 0x00, 0x54, 0x96, + 0x32, 0x53, 0xa2, 0x4c, 0xe5, 0x28, 0x4d, 0x22, + 0x19, 0x91, 0xa4, 0xd2, 0x00, 0x08, 0xa8, 0xe2, + 0x61, 0x0a, 0x80, 0x12, 0x90, 0xb4, 0xd2, 0x8d, + 0x92, 0xe4, 0xc1, 0x07, 0x15, 0xb4, 0x82, 0x61, + 0x32, 0xa2, 0x52, 0xc1, 0x4c, 0xe6, 0x0b, 0xc8, + 0x87, 0x84, 0x7b, 0x81, 0x82, 0x05, 0x94, 0x84, + 0x09, 0x2f, 0x94, 0x49, 0x4d, 0x1a, 0x30, 0x2f, + 0x57, 0xc6, 0xdb, 0x93, 0x65, 0xe2, 0x31, 0xcd, + 0x6a, 0x7a, 0x73, 0x06, 0x92, 0x52, 0x94, 0x0f, + 0x53, 0xe1, 0x87, 0x5c, 0x7d, 0xf3, 0x9c, 0x2f, + 0xd8, 0xa3, 0x39, 0x27, 0x70, 0x2b, 0x9b, 0x64, + 0x0b, 0x14, 0xeb, 0x8c, 0x41, 0x02, 0xdc, 0xe5, + 0x4a, 0x45, 0xa2, 0x33, 0x5e, 0xd9, 0xc4, 0xd5, + 0x08, 0xa8, 0x05, 0x4c, 0x0b, 0x48, 0x0a, 0x99, + 0x32, 0x98, 0x27, 0x43, 0xcc, 0x75, 0x4f, 0x8c, + 0xe1, 0x42, 0x93, 0x29, 0xd3, 0xa6, 0x09, 0xa6, + 0x04, 0x80, 0x7e, 0xc2, 0x20, 0x82, 0xfc, 0x2b, + 0x68, 0x30, 0xf5, 0x85, 0xd0, 0x12, 0xec, 0x10, + 0xff, 0xa0, 0x3d, 0x10, 0xa2, 0x44, 0xbf, 0xc9, + 0xcc, 0x1c, 0x90, 0xe1, 0x5e, 0x20, 0xbd, 0x17, + 0x5d, 0x30, 0xda, 0x03, 0xcd, 0x6d, 0x54, 0x99, + 0xc6, 0xdc, 0x14, 0x13, 0x10, 0x78, 0x52, 0x74, + 0xee, 0x71, 0x56, 0x24, 0xf5, 0x81, 0x49, 0x5b, + 0x3a, 0xd1, 0x9c, 0xb9, 0xb3, 0xa4, 0x7d, 0x72, + 0x53, 0x0a, 0xd6, 0xa4, 0x53, 0x0b, 0xed, 0x25, + 0x01, 0x7c, 0xb9, 0x19, 0x28, 0x2d, 0x24, 0x19, + 0x5e, 0xf1, 0x74, 0x6c, 0x3b, 0xd0, 0xe9, 0x50, + 0x2d, 0x25, 0xc6, 0x9e, 0x36, 0x66, 0xa9, 0x8d, + 0xfa, 0x69, 0x50, 0x9b, 0x20, 0xb7, 0x5d, 0x39, + 0xc1, 0x57, 0x82, 0x43, 0xd8, 0x1c, 0x85, 0x42, + 0x34, 0x07, 0xf8, 0xee, 0x35, 0x0b, 0x7b, 0xa5, + 0x37, 0x82, 0xe7, 0x55, 0xa2, 0x99, 0xf5, 0xac, + 0x8e, 0x94, 0x21, 0x5a, 0x89, 0xf6, 0x0d, 0x02, + 0xbc, 0xab, 0x8c, 0x65, 0xed, 0xaa, 0xfb, 0xa4, + 0x12, 0x57, 0x92, 0x1c, 0x00, 0x5c, 0x66, 0x45, + 0x99, 0x77, 0xea, 0x4a, 0x12, 0x8b, 0x70, 0x75, + 0xad, 0x68, 0x05, 0xa4, 0x04, 0x3c, 0xd2, 0x55, + 0x7b, 0x3e, 0x20, 0x6d, 0x45, 0x33, 0x87, 0x42, + 0x00, 0xbb, 0xd6, 0xb9, 0xa6, 0x30, 0xac, 0x2b, + 0x01, 0x1c, 0x11, 0xa2, 0x79, 0x84, 0x5a, 0x2d, + 0xc1, 0x5b, 0x85, 0x74, 0x40, 0xd2, 0x14, 0x80, + 0x9a, 0xec, 0x70, 0x86, 0x91, 0x0e, 0xa9, 0x07, + 0x56, 0xfe, 0xd8, 0x10, 0x7e, 0x9c, 0x8e, 0x74, + 0x0e, 0x59, 0x0b, 0x75, 0x28, 0x26, 0x00, 0x5e, + 0xf1, 0x06, 0x3b, 0x68, 0x9c, 0x58, 0x24, 0xe3, + 0xe8, 0xd5, 0x57, 0xbd, 0x16, 0xb5, 0x5e, 0x9d, + 0x80, 0x40, 0x51, 0x07, 0x82, 0xd3, 0xda, 0x23, + 0x40, 0xa4, 0x1d, 0xa8, 0x79, 0x40, 0xeb, 0x55, + 0xd1, 0xc6, 0x8d, 0x5e, 0x37, 0x95, 0x69, 0xd0, + 0x04, 0xa9, 0xd9, 0xcc, 0x79, 0x69, 0x3a, 0xcf, + 0xff, 0x99, 0xd8, 0xab, 0x22, 0x38, 0xc8, 0x40, + 0xe2, 0x16, 0x4c, 0x46, 0x7a, 0x1e, 0x05, 0xee, + 0x82, 0x22, 0xda, 0x1a, 0x56, 0x02, 0x66, 0x64, + 0x11, 0x71, 0xf5, 0xb1, 0x96, 0xe7, 0x10, 0xf4, + 0xb0, 0xbf, 0x95, 0x00, 0x75, 0x4f, 0xe6, 0x3b, + 0xf9, 0xc5, 0x87, 0x66, 0x4a, 0xa0, 0xac, 0xf2, + 0xa0, 0x40, 0xb2, 0x35, 0x7e, 0x84, 0x5b, 0x2d, + 0xdb, 0x6e, 0x7e, 0xfe, 0xe2, 0x26, 0x05, 0x5c, + 0x91, 0x51, 0xd5, 0x21, 0x80, 0x5f, 0x2c, 0x12, + 0xa8, 0x04, 0x00, 0xc6, 0xbf, 0x24, 0x29, 0x0b, + 0xc4, 0x0c, 0x10, 0x98, 0xc1, 0xfc, 0x97, 0x73, + 0xe8, 0xbd, 0xc7, 0xcf, 0xf0, 0x13, 0x15, 0xfb, + 0xda, 0xc3, 0x73, 0x16, 0x2e, 0x1b, 0x59, 0x41, + 0x75, 0x60, 0xc8, 0x40, 0x26, 0x01, 0xd5, 0xe1, + 0x91, 0x19, 0xb3, 0x68, 0xb2, 0xb2, 0xac, 0x46, + 0xc0, 0x90, 0x69, 0x22, 0x5a, 0x0e, 0x2c, 0x00, + 0x92, 0x48, 0x07, 0x35, 0x3a, 0x79, 0x93, 0x7f, + 0xef, 0x72, 0x5e, 0x1e, 0x54, 0xf5, 0x08, 0x50, + 0xed, 0xd4, 0xd7, 0x26, 0xf6, 0xd5, 0x0d, 0x6f, + 0x88, 0x76, 0xc6, 0x52, 0x92, 0xda, 0xd2, 0x9a, + 0x42, 0xec, 0xc0, 0x35, 0x40, 0xed, 0x6b, 0x21, + 0xdb, 0xac, 0xfb, 0x91, 0x09, 0x3b, 0xe4, 0x45, + 0x13, 0x3b, 0x2f, 0x73, 0x97, 0x25, 0xbc, 0x11, + 0x80, 0x0b, 0x22, 0x99, 0x75, 0xec, 0xc0, 0xd6, + 0xf5, 0x00, 0x22, 0x37, 0xcd, 0xc8, 0xbb, 0x03, + 0x0e, 0x90, 0x43, 0x20, 0xe4, 0x25, 0xc8, 0xb7, + 0x75, 0x57, 0xdd, 0xf1, 0x42, 0xc6, 0xb5, 0x9a, + 0x0d, 0xe1, 0xa7, 0xc7, 0x70, 0xf5, 0x8b, 0x60, + 0x8b, 0xfc, 0x11, 0x10, 0x08, 0x45, 0xbd, 0x27, + 0xec, 0x2d, 0x6d, 0xb0, 0xd2, 0xa5, 0x27, 0xb2, + 0xcb, 0xab, 0x15, 0x1e, 0x12, 0x3e, 0xb8, 0x25, + 0x68, 0x25, 0x46, 0xad, 0x1e, 0x11, 0x95, 0x19, + 0xff, 0xd3, 0xb2, 0xdc, 0xdc, 0x5f, 0x35, 0x17, + 0x36, 0x1c, 0x54, 0x17, 0x9c, 0x55, 0x2c, 0xc5, + 0x49, 0xeb, 0x37, 0x86, 0x34, 0x78, 0xe9, 0x11, + 0x62, 0x1a, 0x04, 0xbe, 0x91, 0x64, 0x61, 0x85, + 0x6a, 0x73, 0x76, 0x1d, 0x52, 0x02, 0x02, 0x00, + 0x55, 0x91, 0x7d, 0x06, 0x01, 0x67, 0xab, 0x02, + 0xb1, 0x2c, 0xfa, 0xaa, 0xcf, 0x4e, 0x06, 0xb4, + 0xc4, 0xbc, 0xea, 0x34, 0x14, 0xe2, 0xc4, 0xad, + 0xe0, 0xfb, 0x33, 0xa2, 0x4b, 0xe0, 0xd4, 0x52, + 0xd1, 0x26, 0x00, 0x2c, 0x2a, 0xf1, 0x7d, 0x14, + 0x29, 0x69, 0x55, 0x23, 0xaa, 0xce, 0x47, 0x9b, + 0x63, 0x0f, 0x52, 0xda, 0x95, 0x28, 0x78, 0x3a, + 0x55, 0x82, 0xfc, 0x91, 0xa8, 0xc1, 0x5b, 0xba, + 0x16, 0xa4, 0x7a, 0x58, 0x33, 0xb4, 0x73, 0x9f, + 0x60, 0x6d, 0x36, 0x59, 0xd3, 0x2f, 0x35, 0x9d, + 0xd5, 0x76, 0x74, 0xaa, 0x7c, 0x68, 0x0d, 0x9f, + 0xe0, 0xc4, 0xa8, 0x02, 0x73, 0xff, 0x1a, 0x1d, + 0x82, 0x62, 0x9b, 0xa5, 0xda, 0x5b, 0x38, 0x33, + 0xa7, 0x81, 0xf0, 0x6c, 0x40, 0xf2, 0x0e, 0x6a, + 0xd3, 0x96, 0x22, 0xa2, 0xc9, 0x02, 0xca, 0x6b, + 0x8b, 0x28, 0xcf, 0xe7, 0xc2, 0x07, 0x44, 0xb8, + 0xad, 0xc1, 0x27, 0xcf, 0x5a, 0x4d, 0xad, 0xfe, + 0x15, 0x21, 0x73, 0x5d, 0xee, 0xf0, 0x99, 0xfa, + 0xcf, 0xba, 0x81, 0xe8, 0x96, 0xd9, 0x7d, 0x1d, + 0x64, 0xb7, 0x7b, 0x40, 0xfc, 0xd6, 0xc2, 0x8d, + 0x5f, 0xe7, 0x6c, 0x35, 0x0b, 0x76, 0x61, 0x2b, + 0xdc, 0x75, 0xdf, 0x06, 0x54, 0x00, 0x03, 0x8f, + 0x45, 0xdd, 0xa3, 0xcb, 0xf6, 0x10, 0xef, 0x61, + 0x1f, 0x82, 0x0b, 0xc8, 0xdb, 0x9f, 0x6b, 0xae, + 0xb2, 0xa2, 0xa6, 0x9f, 0xef, 0x50, 0x99, 0xe1, + 0x63, 0x2c, 0xd2, 0xb4, 0x0b, 0x69, 0x1b, 0x61, + 0xbf, 0x9c, 0xd4, 0x22, 0xa0, 0x2d, 0xa2, 0x4b, + 0xff, 0x9e, 0xe3, 0x18, 0x6c, 0xbc, 0xd9, 0xf4, + 0xf5, 0xf8, 0xab, 0x32, 0x6c, 0x62, 0x91, 0xd3, + 0x90, 0x35, 0x01, 0x68, 0x2d, 0xda, 0x50, 0x0e, + 0x45, 0x95, 0xaf, 0xfb, 0xc2, 0x74, 0x36, 0x78, + 0xc1, 0x61, 0x2e, 0x8d, 0x04, 0xeb, 0xdb, 0xb1, + 0xe9, 0xae, 0x8a, 0xcd, 0x75, 0xed, 0x55, 0xed, + 0x65, 0x6f, 0x2a, 0x3a, 0x77, 0x7a, 0x21, 0x91, + 0xfc, 0xdc, 0x8a, 0x03, 0xdd, 0xb9, 0xac, 0x29, + 0x65, 0xd1, 0x5d, 0x80, 0x8c, 0xe4, 0x2a, 0x57, + 0x42, 0x14, 0x20, 0x09, 0xd3, 0xdc, 0x7b, 0x0f, + 0x8b, 0xe4, 0xbb, 0xeb, 0xa4, 0x53, 0xb6, 0xbf, + 0x53, 0x5e, 0x9b, 0x04, 0x58, 0x91, 0x97, 0xf9, + 0xc8, 0x8b, 0xcb, 0x2f, 0xce, 0x75, 0x95, 0x99, + 0x23, 0xdd, 0x14, 0x3c, 0x31, 0xb5, 0x0d, 0xbd, + 0xe1, 0x93, 0xa5, 0xdd, 0xdc, 0xf7, 0x86, 0x1e, + 0xc5, 0xc9, 0x6e, 0xe9, 0x6f, 0x4b, 0x0d, 0x0a, + 0x47, 0x77, 0xe8, 0xdd, 0xdb, 0x3e, 0x58, 0xec, + 0x6a, 0xbe, 0xce, 0x7f, 0x97, 0x00, 0xa3, 0x29, + 0x24, 0x82, 0xc1, 0x57, 0x9d, 0xbd, 0x16, 0x7b, + 0x0f, 0x76, 0x62, 0x8d, 0x43, 0xc7, 0xab, 0xde, + 0x3d, 0x2e, 0x9e, 0xbc, 0xd3, 0xbf, 0x4c, 0xba, + 0xcb, 0x23, 0x09, 0x69, 0x07, 0x20, 0x7d, 0xb9, + 0x3b, 0x5f, 0x79, 0xd6, 0xd4, 0x38, 0x08, 0x0a, + 0xa0, 0xa4, 0x65, 0x2f, 0xab, 0xf4, 0x95, 0xb3, + 0x3c, 0xf5, 0x0c, 0x7c, 0x70, 0x43, 0x8c, 0xe5, + 0xfa, 0x31, 0x7e, 0xfe, 0x43, 0xb3, 0xef, 0x76, + 0xed, 0x73, 0x7f, 0xfa, 0x25, 0xc1, 0x67, 0x43, + 0x63, 0x1f, 0xbe, 0x54, 0x81, 0x0a, 0x54, 0x2f, + 0xf3, 0x1e, 0x49, 0x16, 0x8e, 0xba, 0xf0, 0x8b, + 0x4f, 0x7c, 0xf3, 0x48, 0x9f, 0x21, 0x98, 0x06, + 0x82, 0x2a, 0xec, 0xce, 0x83, 0x7a, 0x73, 0x90, + 0xb9, 0xbb, 0xdf, 0xcf, 0x96, 0x26, 0x36, 0xbc, + 0xff, 0xea, 0x3b, 0x7f, 0xe8, 0x99, 0xd1, 0x1b, + 0x04, 0xc0, 0x2b, 0x8b, 0x57, 0x71, 0xdb, 0x57, + 0x3b, 0xdd, 0x63, 0x64, 0xd5, 0x41, 0x3d, 0x38, + 0xc7, 0x7b, 0xf9, 0xc7, 0x19, 0x73, 0x76, 0x7e, + 0xfe, 0xf1, 0x47, 0xc0, 0xe3, 0x6e, 0x29, 0x80, + 0x19, 0x6e, 0x93, 0x0f, 0xdf, 0x35, 0x04, 0xd3, + 0xa0, 0x27, 0xf3, 0x36, 0x7a, 0x5c, 0x96, 0x77, + 0xa6, 0xe7, 0x80, 0x4b, 0x66, 0x02, 0xab, 0x35, + 0x68, 0x20, 0xe0, 0x7f, 0x14, 0x90, 0x70, 0x4c, + 0xd6, 0x64, 0xb2, 0x67, 0x71, 0x2f, 0x77, 0x80, + 0x8e, 0x95, 0x3f, 0x84, 0x45, 0x01, 0xe1, 0x57, + 0x7c, 0xe1, 0x63, 0x18, 0x51, 0x33, 0x2e, 0x42, + 0xb7, 0x79, 0xc3, 0x97, 0x4e, 0x81, 0xd2, 0x7e, + 0x6d, 0xc2, 0x00, 0xba, 0x20, 0x7a, 0x3f, 0x60, + 0x7f, 0xc1, 0xa2, 0x0f, 0xe1, 0xe1, 0x54, 0xd8, + 0xb6, 0x7e, 0x2a, 0xa8, 0x5b, 0x00, 0x47, 0x82, + 0xe6, 0xf6, 0x46, 0x5a, 0xf7, 0x73, 0x81, 0x86, + 0x80, 0x2a, 0xe6, 0x23, 0x36, 0xd8, 0x80, 0xb7, + 0x47, 0x79, 0xe7, 0xf6, 0x80, 0x78, 0x46, 0x5e, + 0x5b, 0xf7, 0x76, 0x3f, 0xa1, 0x37, 0xab, 0x52, + 0x14, 0x48, 0xb8, 0x3e, 0x4b, 0x46, 0x0f, 0x0e, + 0x85, 0x1a, 0xf0, 0xf2, 0x84, 0x61, 0x68, 0x48, + 0x07, 0x97, 0x5e, 0x59, 0x67, 0x5c, 0x5b, 0x27, + 0x83, 0x28, 0xc2, 0x5c, 0x07, 0x72, 0x83, 0x24, + 0x18, 0x51, 0x10, 0xd7, 0x7a, 0x62, 0xf8, 0x73, + 0xb9, 0x35, 0x3a, 0x6d, 0x78, 0x0f, 0x68, 0xd8, + 0x7c, 0x15, 0xb4, 0x64, 0xa8, 0xd2, 0x4f, 0xa8, + 0x11, 0x2d, 0x70, 0xf8, 0x00, 0x2c, 0x58, 0x87, + 0x76, 0x38, 0x72, 0x31, 0xe4, 0x44, 0xad, 0x82, + 0x85, 0x5d, 0xc6, 0x5b, 0xa3, 0xf6, 0x80, 0xe4, + 0x16, 0x38, 0xd2, 0x01, 0x7d, 0xc5, 0x17, 0x82, + 0x6e, 0x37, 0x88, 0xaa, 0x36, 0x89, 0x70, 0x47, + 0xff, 0x8a, 0x12, 0x91, 0x86, 0x4b, 0x84, 0x73, + 0xd5, 0x11, 0x43, 0x29, 0x61, 0x69, 0x8f, 0x18, + 0x89, 0x9e, 0xe7, 0x3f, 0x99, 0x48, 0x87, 0xb7, + 0x40, 0x8b, 0xb6, 0x17, 0x8a, 0x79, 0xc1, 0x87, + 0x5d, 0x08, 0x86, 0x7e, 0x12, 0x20, 0xa0, 0xb8, + 0x85, 0x78, 0x37, 0x8a, 0xc4, 0x57, 0x1d, 0xc0, + 0x03, 0x79, 0x7e, 0x68, 0x0c, 0xaa, 0x78, 0x8b, + 0x94, 0x07, 0x22, 0x03, 0x98, 0x84, 0x72, 0xf8, + 0x82, 0x64, 0x78, 0x25, 0x51, 0x18, 0x8a, 0x5a, + 0x56, 0x6b, 0xa7, 0x98, 0x23, 0x2a, 0x93, 0x17, + 0x6b, 0xb4, 0x2c, 0xbc, 0xa8, 0x6f, 0x11, 0x05, + 0x1b, 0xbe, 0x13, 0x8c, 0xfa, 0xb5, 0x7e, 0x24, + 0x48, 0x7c, 0xce, 0x08, 0x30, 0xdf, 0xa1, 0x6c, + 0xcb, 0xd0, 0x1b, 0xda, 0x88, 0x2e, 0x25, 0x80, + 0x1b, 0x3f, 0xb6, 0x0f, 0x02, 0xc0, 0x17, 0x7d, + 0xf1, 0x7e, 0x9d, 0x67, 0x81, 0x84, 0x37, 0x82, + 0x13, 0xf0, 0x6b, 0x13, 0x04, 0x3e, 0x64, 0xf1, + 0x17, 0x97, 0xd1, 0x62, 0x5e, 0x68, 0x29, 0x61, + 0x73, 0x68, 0x45, 0x12, 0x6e, 0xe5, 0x96, 0x13, + 0x86, 0x67, 0x45, 0x87, 0x07, 0x8f, 0x93, 0x27, + 0x84, 0xb5, 0xe8, 0x83, 0xec, 0x67, 0x65, 0xf4, + 0x68, 0x8f, 0x86, 0x37, 0x73, 0x2d, 0x11, 0x47, + 0x5c, 0x02, 0x83, 0x80, 0x68, 0x6e, 0xc1, 0x85, + 0x1d, 0x9e, 0xe3, 0x8e, 0x63, 0xe8, 0x8b, 0x71, + 0x94, 0x41, 0x0c, 0x14, 0x92, 0xf7, 0x25, 0x8d, + 0x85, 0x82, 0x57, 0xfe, 0x91, 0x78, 0x15, 0xa0, + 0x92, 0x7d, 0x92, 0x12, 0x98, 0xe6, 0x5e, 0xc0, + 0x43, 0x92, 0x89, 0x38, 0x48, 0x46, 0xe8, 0x0b, + 0x27, 0xc8, 0x5a, 0xd2, 0xb0, 0x30, 0xec, 0x08, + 0x24, 0x1e, 0x72, 0x16, 0x05, 0x52, 0x5a, 0x56, + 0xc1, 0x7f, 0x36, 0x42, 0x26, 0xf1, 0x81, 0x42, + 0x4a, 0xa9, 0x72, 0xab, 0x97, 0x1b, 0x2f, 0xc2, + 0x84, 0x59, 0xf1, 0xb1, 0x8b, 0x11, 0x18, 0x61, + 0x1a, 0xf8, 0x1a, 0x32, 0xc9, 0x72, 0x54, 0x98, + 0x1b, 0xc0, 0x04, 0x2e, 0xf0, 0xe2, 0x28, 0x48, + 0x99, 0x84, 0x45, 0xc9, 0x10, 0x1b, 0xa8, 0x0c, + 0xfb, 0x63, 0x76, 0xdb, 0xc3, 0x0f, 0xce, 0x81, + 0x3d, 0x23, 0x91, 0x8c, 0x63, 0xa5, 0x5b, 0x06, + 0xd0, 0x0b, 0xf0, 0x83, 0x30, 0x65, 0xf5, 0x4b, + 0x22, 0x20, 0x33, 0xce, 0x62, 0x76, 0x42, 0x11, + 0x69, 0x82, 0x82, 0x96, 0xce, 0x72, 0x94, 0x82, + 0x86, 0x22, 0x07, 0x20, 0x00, 0xde, 0x40, 0x97, + 0x06, 0x63, 0x97, 0xb7, 0x01, 0x12, 0x67, 0xf7, + 0x38, 0x90, 0x08, 0x6c, 0x1c, 0x92, 0x97, 0xda, + 0x43, 0x1f, 0x7e, 0x05, 0x99, 0x68, 0x59, 0x99, + 0xde, 0x50, 0x16, 0xf4, 0x11, 0x99, 0x9e, 0x15, + 0x38, 0x14, 0x89, 0x97, 0x68, 0xb9, 0x97, 0x1f, + 0x12, 0x97, 0x90, 0x38, 0x12, 0x43, 0x02, 0x12, + 0x8f, 0x32, 0x01, 0x11, 0x00, 0x00, 0x3b, +}; + +static const uint8_t data_index_htm[] = +{ + /* /index.htm */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, + 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x54, 0x69, 0x76, 0x61, + 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, + 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x20, 0x54, 0x4d, 0x34, 0x43, 0x31, 0x32, 0x39, + 0x58, 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x4b, 0x69, + 0x74, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, + 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x69, 0x63, 0x6f, + 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x73, 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, + 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, + 0x6e, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, + 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, + 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2e, 0x2f, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x66, + 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, + 0x63, 0x6f, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, + 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, + 0x2f, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, + 0x64, 0x3e, 0x0a, 0x0a, 0x3c, 0x66, 0x72, 0x61, + 0x6d, 0x65, 0x73, 0x65, 0x74, 0x20, 0x72, 0x6f, + 0x77, 0x73, 0x3d, 0x22, 0x31, 0x32, 0x30, 0x2c, + 0x2a, 0x2c, 0x34, 0x35, 0x22, 0x20, 0x63, 0x6f, + 0x6c, 0x73, 0x3d, 0x22, 0x2a, 0x22, 0x20, 0x66, + 0x72, 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x62, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, + 0x22, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, + 0x30, 0x22, 0x3e, 0x0a, 0x3c, 0x66, 0x72, 0x61, + 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, + 0x22, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, + 0x20, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x68, 0x74, + 0x6d, 0x22, 0x3e, 0x0a, 0x3c, 0x66, 0x72, 0x61, + 0x6d, 0x65, 0x73, 0x65, 0x74, 0x20, 0x72, 0x6f, + 0x77, 0x73, 0x3d, 0x22, 0x2a, 0x22, 0x20, 0x63, + 0x6f, 0x6c, 0x73, 0x3d, 0x22, 0x32, 0x35, 0x2c, + 0x37, 0x35, 0x22, 0x20, 0x66, 0x72, 0x61, 0x6d, + 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, + 0x22, 0x31, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x66, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, + 0x0a, 0x3c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x69, + 0x64, 0x65, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, + 0x22, 0x2e, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x2e, + 0x68, 0x74, 0x6d, 0x22, 0x3e, 0x0a, 0x3c, 0x66, + 0x72, 0x61, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, + 0x74, 0x69, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x3e, + 0x0a, 0x3c, 0x2f, 0x66, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x65, 0x74, 0x3e, 0x0a, 0x3c, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, + 0x22, 0x20, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, + 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2e, 0x2f, + 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, + 0x74, 0x6d, 0x22, 0x3e, 0x0a, 0x3c, 0x2f, 0x66, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x65, 0x74, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0x0a, 0x0a, +}; + +static const uint8_t data_io_ssi[] = +{ + /* /io.ssi */ + 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x73, 0x69, 0x00, + + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x39, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, + 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, + 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, + 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, + 0x3b, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, + 0x3d, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, + 0x39, 0x2d, 0x31, 0x22, 0x20, 0x68, 0x74, 0x74, + 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, + 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x0d, + 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2e, 0x2f, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, + 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, + 0x65, 0x74, 0x22, 0x20, 0x6d, 0x65, 0x64, 0x69, + 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x49, 0x2f, 0x4f, 0x20, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3c, + 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0d, + 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x31, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x49, + 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0d, + 0x0a, 0x3c, 0x68, 0x72, 0x20, 0x73, 0x69, 0x7a, + 0x65, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x25, 0x22, 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x65, + 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x20, 0x74, 0x61, 0x73, + 0x6b, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, + 0x6e, 0x67, 0x0d, 0x0a, 0x6f, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x0d, 0x0a, 0x3c, + 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x69, + 0x3e, 0x3c, 0x69, 0x3e, 0x4c, 0x45, 0x44, 0x20, + 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x52, + 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x69, 0x3e, 0x0d, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, + 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x61, 0x74, + 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, + 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, + 0x6e, 0x2d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x20, + 0x4c, 0x45, 0x44, 0x20, 0x74, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0d, 0x0a, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x72, + 0x61, 0x74, 0x65, 0x3a, 0x20, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x6c, 0x65, 0x64, 0x72, 0x61, 0x74, + 0x65, 0x2d, 0x2d, 0x3e, 0x20, 0x6d, 0x69, 0x6c, + 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x2e, 0x0d, 0x0a, 0x3c, 0x62, 0x72, 0x3e, + 0x0d, 0x0a, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, + 0x67, 0x65, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x67, + 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, + 0x2e, 0x63, 0x67, 0x69, 0x22, 0x3e, 0x0d, 0x0a, + 0x4e, 0x65, 0x77, 0x20, 0x74, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x20, 0x72, 0x61, 0x74, 0x65, 0x3a, + 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, + 0x35, 0x30, 0x30, 0x22, 0x20, 0x6d, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, 0x22, + 0x34, 0x22, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3d, + 0x22, 0x35, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x3d, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3e, + 0x0d, 0x0a, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0d, + 0x0a, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x20, 0x72, 0x61, 0x74, 0x65, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x3e, 0x0d, + 0x0a, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, + 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x69, + 0x3e, 0x53, 0x70, 0x69, 0x64, 0x65, 0x72, 0x20, + 0x53, 0x70, 0x65, 0x65, 0x64, 0x3c, 0x2f, 0x69, + 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x62, 0x72, 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x69, + 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x61, 0x74, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, + 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x20, 0x63, 0x72, 0x61, 0x77, 0x6c, 0x20, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x4c, 0x43, 0x44, 0x2e, 0x0d, 0x0a, 0x3c, + 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0d, + 0x0a, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x20, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x20, + 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x72, 0x61, 0x74, + 0x65, 0x3a, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x2d, 0x2d, + 0x3e, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0d, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, + 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x3d, 0x22, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x67, + 0x69, 0x22, 0x3e, 0x0d, 0x0a, 0x4e, 0x65, 0x77, + 0x20, 0x73, 0x70, 0x69, 0x64, 0x65, 0x72, 0x20, + 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x72, 0x61, 0x74, + 0x65, 0x3a, 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3d, 0x22, 0x31, 0x30, 0x22, 0x20, 0x6d, 0x61, + 0x78, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, + 0x22, 0x33, 0x22, 0x20, 0x73, 0x69, 0x7a, 0x65, + 0x3d, 0x22, 0x34, 0x22, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, + 0x3e, 0x0d, 0x0a, 0x6d, 0x69, 0x6c, 0x6c, 0x69, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, + 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x69, + 0x64, 0x65, 0x72, 0x20, 0x6d, 0x6f, 0x76, 0x65, + 0x20, 0x72, 0x61, 0x74, 0x65, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, + 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, + 0x3c, 0x62, 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x3a, + 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x49, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, + 0x65, 0x20, 0x61, 0x20, 0x6c, 0x61, 0x72, 0x67, + 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x20, 0x6f, 0x66, 0x20, 0x73, 0x70, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x20, 0x61, 0x6c, 0x69, 0x76, + 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, + 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, + 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, + 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x70, 0x69, 0x64, 0x65, 0x72, 0x20, 0x6d, 0x6f, + 0x76, 0x65, 0x20, 0x72, 0x61, 0x74, 0x65, 0x20, + 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, + 0x65, 0x6d, 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, + 0x61, 0x6e, 0x79, 0x20, 0x66, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x20, 0x28, 0x73, 0x69, 0x6e, 0x63, + 0x65, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, + 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, + 0x67, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, + 0x29, 0x2e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75, 0x6c, + 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, +}; + +static const uint8_t data_lwipstat_ssi[] = +{ + /* /lwipstat.ssi */ + 0x2f, 0x6c, 0x77, 0x69, 0x70, 0x73, 0x74, 0x61, + 0x74, 0x2e, 0x73, 0x73, 0x69, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x39, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63, 0x68, + 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x49, 0x53, + 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, 0x2d, 0x31, + 0x22, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, + 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x72, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x22, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, + 0x22, 0x35, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, + 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x2e, 0x2f, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, + 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, + 0x22, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, + 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, + 0x3e, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x3e, 0x6c, 0x77, 0x49, 0x50, 0x20, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0x0a, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x68, 0x31, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x6c, 0x77, 0x49, 0x50, + 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x31, 0x3e, + 0x0a, 0x3c, 0x68, 0x72, 0x20, 0x73, 0x69, 0x7a, + 0x65, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x25, 0x22, 0x3e, 0x0a, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x20, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6c, 0x77, 0x49, 0x50, 0x20, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x20, 0x69, 0x73, 0x20, 0x61, 0x75, 0x74, 0x6f, + 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, + 0x79, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x0a, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, + 0x66, 0x69, 0x76, 0x65, 0x20, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x3c, 0x62, + 0x72, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x25, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0a, 0x3c, + 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x68, 0x3e, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x3c, 0x62, + 0x72, 0x3e, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x0a, 0x3c, 0x74, 0x68, 0x3e, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x3c, + 0x62, 0x72, 0x3e, 0x53, 0x65, 0x6e, 0x74, 0x3c, + 0x2f, 0x74, 0x68, 0x3e, 0x0a, 0x3c, 0x74, 0x68, + 0x3e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x3c, 0x62, 0x72, 0x3e, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x0a, 0x3c, 0x74, 0x68, 0x3e, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x3c, 0x62, 0x72, + 0x3e, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x0a, 0x3c, 0x74, + 0x68, 0x3e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x3c, 0x62, 0x72, 0x3e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x0a, 0x3c, 0x74, 0x68, 0x3e, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x3c, 0x62, 0x72, 0x3e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x0a, 0x3c, 0x74, 0x68, 0x3e, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x3c, 0x62, + 0x72, 0x3e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x0a, 0x3c, 0x74, + 0x68, 0x3e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, + 0x67, 0x3c, 0x62, 0x72, 0x3e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x68, 0x3e, + 0x0a, 0x3c, 0x74, 0x68, 0x3e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x3c, 0x62, 0x72, + 0x3e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x3c, + 0x2f, 0x74, 0x68, 0x3e, 0x0a, 0x3c, 0x74, 0x68, + 0x3e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x3c, 0x62, 0x72, 0x3e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x0a, + 0x3c, 0x74, 0x68, 0x3e, 0x4f, 0x74, 0x68, 0x65, + 0x72, 0x3c, 0x62, 0x72, 0x3e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x68, 0x3e, + 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x3c, + 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x65, 0x6e, 0x2e, 0x77, 0x69, 0x6b, 0x69, 0x70, + 0x65, 0x64, 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x77, 0x69, 0x6b, 0x69, 0x2f, 0x45, 0x74, + 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x22, 0x20, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, + 0x4c, 0x69, 0x6e, 0x6b, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x6c, 0x69, + 0x6e, 0x6b, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x6c, + 0x69, 0x6e, 0x6b, 0x72, 0x65, 0x63, 0x76, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x6c, 0x69, 0x6e, 0x6b, 0x64, 0x72, 0x6f, 0x70, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x63, 0x6b, 0x73, + 0x6d, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x6c, 0x65, + 0x6e, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x6d, 0x65, + 0x6d, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x72, 0x74, + 0x65, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x70, 0x72, + 0x6f, 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x6f, + 0x70, 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x6c, 0x69, 0x6e, 0x6b, 0x6d, + 0x69, 0x73, 0x63, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x72, + 0x3e, 0x0a, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x65, 0x6e, 0x2e, 0x77, 0x69, + 0x6b, 0x69, 0x70, 0x65, 0x64, 0x69, 0x61, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x69, 0x6b, 0x69, + 0x2f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x5f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x41, 0x52, + 0x50, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x61, 0x72, 0x70, 0x73, 0x65, + 0x6e, 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x61, 0x72, 0x70, 0x72, 0x65, + 0x63, 0x76, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x61, 0x72, 0x70, 0x64, 0x72, + 0x6f, 0x70, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x61, 0x72, 0x70, 0x63, 0x6b, + 0x73, 0x6d, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x61, 0x72, 0x70, 0x6c, 0x65, + 0x6e, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x61, 0x72, 0x70, 0x6d, 0x65, 0x6d, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x61, 0x72, 0x70, 0x72, 0x74, 0x65, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x61, 0x72, 0x70, 0x70, 0x72, 0x6f, 0x74, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x61, 0x72, 0x70, 0x6f, 0x70, 0x74, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x61, + 0x72, 0x70, 0x6d, 0x69, 0x73, 0x63, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x72, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, + 0x2e, 0x77, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, + 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, + 0x69, 0x6b, 0x69, 0x2f, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x49, + 0x43, 0x4d, 0x50, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x63, 0x6d, + 0x70, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x2d, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x63, + 0x6d, 0x70, 0x72, 0x65, 0x63, 0x76, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, + 0x63, 0x6d, 0x70, 0x64, 0x72, 0x6f, 0x70, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x69, 0x63, 0x6d, 0x70, 0x63, 0x6b, 0x73, 0x6d, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x69, 0x63, 0x6d, 0x70, 0x6c, 0x65, 0x6e, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x69, 0x63, 0x6d, 0x70, 0x6d, 0x65, 0x6d, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x69, 0x63, 0x6d, 0x70, 0x72, 0x74, 0x65, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x69, 0x63, 0x6d, 0x70, 0x70, 0x72, 0x6f, + 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x69, 0x63, 0x6d, 0x70, 0x6f, 0x70, + 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x69, 0x63, 0x6d, 0x70, 0x6d, 0x69, + 0x73, 0x63, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0x0a, 0x3c, 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x74, + 0x64, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x65, 0x6e, 0x2e, 0x77, 0x69, 0x6b, + 0x69, 0x70, 0x65, 0x64, 0x69, 0x61, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x77, 0x69, 0x6b, 0x69, 0x2f, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x5f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x3e, 0x49, 0x50, 0x3c, 0x2f, 0x61, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, + 0x70, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x2d, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x70, + 0x72, 0x65, 0x63, 0x76, 0x2d, 0x2d, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x70, 0x64, + 0x72, 0x6f, 0x70, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, + 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x70, 0x63, 0x6b, + 0x73, 0x6d, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, + 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, + 0x2d, 0x2d, 0x23, 0x69, 0x70, 0x6c, 0x65, 0x6e, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x69, 0x70, 0x6d, 0x65, 0x6d, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, + 0x70, 0x72, 0x74, 0x65, 0x2d, 0x2d, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x70, 0x70, + 0x72, 0x6f, 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, + 0x21, 0x2d, 0x2d, 0x23, 0x69, 0x70, 0x6f, 0x70, + 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x69, 0x70, 0x6d, 0x69, 0x73, 0x63, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x3c, + 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x65, 0x6e, 0x2e, 0x77, 0x69, 0x6b, 0x69, 0x70, + 0x65, 0x64, 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x77, 0x69, 0x6b, 0x69, 0x2f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x5f, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x22, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x3e, 0x54, 0x43, 0x50, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x74, 0x63, 0x70, 0x73, 0x65, 0x6e, + 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x74, 0x63, 0x70, 0x72, 0x65, 0x63, + 0x76, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x74, 0x63, 0x70, 0x64, 0x72, 0x6f, + 0x70, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x74, 0x63, 0x70, 0x63, 0x6b, 0x73, + 0x6d, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, + 0x2d, 0x23, 0x74, 0x63, 0x70, 0x6c, 0x65, 0x6e, + 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, + 0x23, 0x74, 0x63, 0x70, 0x6d, 0x65, 0x6d, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x74, 0x63, 0x70, 0x72, 0x74, 0x65, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x74, + 0x63, 0x70, 0x70, 0x72, 0x6f, 0x74, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x74, + 0x63, 0x70, 0x6f, 0x70, 0x74, 0x2d, 0x2d, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x74, 0x63, + 0x70, 0x6d, 0x69, 0x73, 0x63, 0x2d, 0x2d, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x2f, + 0x74, 0x72, 0x3e, 0x0a, 0x3c, 0x74, 0x72, 0x3e, + 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, 0x2e, + 0x77, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, 0x69, + 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x69, + 0x6b, 0x69, 0x2f, 0x55, 0x73, 0x65, 0x72, 0x5f, + 0x44, 0x61, 0x74, 0x61, 0x67, 0x72, 0x61, 0x6d, + 0x5f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x3d, 0x22, 0x5f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x3e, 0x55, 0x44, 0x50, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x75, 0x64, 0x70, 0x73, 0x65, 0x6e, 0x74, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x75, 0x64, 0x70, 0x72, 0x65, 0x63, 0x76, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x75, 0x64, 0x70, 0x64, 0x72, 0x6f, 0x70, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x75, 0x64, 0x70, 0x63, 0x6b, 0x73, 0x6d, 0x2d, + 0x2d, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, + 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, + 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, + 0x75, 0x64, 0x70, 0x6c, 0x65, 0x6e, 0x2d, 0x2d, + 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, + 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x75, + 0x64, 0x70, 0x6d, 0x65, 0x6d, 0x2d, 0x2d, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, + 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, + 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x75, 0x64, + 0x70, 0x72, 0x74, 0x65, 0x2d, 0x2d, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x75, 0x64, 0x70, + 0x70, 0x72, 0x6f, 0x74, 0x2d, 0x2d, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, + 0x3c, 0x21, 0x2d, 0x2d, 0x23, 0x75, 0x64, 0x70, + 0x6f, 0x70, 0x74, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x3c, + 0x21, 0x2d, 0x2d, 0x23, 0x75, 0x64, 0x70, 0x6d, + 0x69, 0x73, 0x63, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x72, + 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3e, 0x0a, +}; + +static const uint8_t data_perror_htm[] = +{ + /* /perror.htm */ + 0x2f, 0x70, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x68, 0x74, 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x39, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, + 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x46, + 0x6f, 0x72, 0x6d, 0x20, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x65, + 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x3c, 0x62, 0x6f, + 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x68, 0x31, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x49, + 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, + 0x3c, 0x68, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, + 0x3d, 0x22, 0x32, 0x22, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, + 0x22, 0x3e, 0x0a, 0x3c, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0x0a, 0x3c, 0x62, 0x3e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3c, 0x2f, + 0x62, 0x3e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x62, 0x72, 0x3e, 0x0a, 0x4f, 0x6f, 0x70, 0x73, + 0x20, 0x2d, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x20, 0x77, 0x61, 0x73, 0x20, 0x65, + 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x69, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6f, + 0x72, 0x0a, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x0a, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, 0x3e, + 0x0a, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, + 0x74, 0x72, 0x79, 0x20, 0x61, 0x67, 0x61, 0x69, + 0x6e, 0x21, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x62, 0x72, 0x3e, 0x0a, 0x3c, 0x66, 0x72, 0x6f, + 0x6d, 0x3e, 0x0a, 0x3c, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, + 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, + 0x30, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3d, 0x22, 0x42, 0x61, 0x63, 0x6b, 0x22, 0x20, + 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x3d, + 0x22, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x2e, 0x67, 0x6f, 0x28, 0x2d, 0x31, 0x29, 0x3b, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, + 0x72, 0x75, 0x65, 0x3b, 0x22, 0x3e, 0x0a, 0x3c, + 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x3c, + 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, + 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, + 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, + 0x0a, +}; + +static const uint8_t data_side_htm[] = +{ + /* /side.htm */ + 0x2f, 0x73, 0x69, 0x64, 0x65, 0x2e, 0x68, 0x74, + 0x6d, 0x00, + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, + 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, + 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, + 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, + 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, + 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3b, 0x63, 0x68, 0x61, 0x72, 0x73, + 0x65, 0x74, 0x3d, 0x49, 0x53, 0x4f, 0x2d, 0x38, + 0x38, 0x36, 0x39, 0x2d, 0x31, 0x22, 0x3e, 0x0d, + 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x53, 0x69, 0x64, 0x65, 0x3c, 0x2f, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, + 0x63, 0x73, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x62, + 0x6f, 0x64, 0x79, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x20, + 0x41, 0x72, 0x69, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, + 0x6e, 0x3a, 0x20, 0x31, 0x30, 0x70, 0x78, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x70, + 0x78, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x3c, 0x2f, + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x0d, 0x0a, + 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, + 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, + 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x69, + 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x2e, 0x2f, 0x74, 0x69, 0x2e, + 0x68, 0x74, 0x6d, 0x22, 0x20, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x3d, 0x22, 0x6d, 0x61, 0x69, + 0x6e, 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x54, 0x49, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, + 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x3e, 0x20, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x6d, + 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x41, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, + 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3c, + 0x2f, 0x61, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x72, + 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, + 0x6c, 0x69, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2e, 0x2f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x68, 0x74, 0x6d, + 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x3d, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x44, 0x69, + 0x61, 0x67, 0x72, 0x61, 0x6d, 0x3c, 0x2f, 0x61, + 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x62, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x69, + 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x2e, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x22, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x57, + 0x68, 0x79, 0x20, 0x54, 0x69, 0x76, 0x61, 0x20, + 0x43, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x3f, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, 0x3c, + 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0d, + 0x0a, 0x3c, 0x6c, 0x69, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2e, + 0x2f, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, + 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x20, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x6d, + 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x41, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x46, 0x72, 0x65, 0x65, 0x52, + 0x54, 0x4f, 0x53, 0x26, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x3b, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, 0x3e, + 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x3e, 0x20, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x6c, 0x77, 0x69, 0x70, 0x73, 0x74, 0x61, 0x74, + 0x2e, 0x73, 0x73, 0x69, 0x22, 0x20, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x6d, 0x61, + 0x69, 0x6e, 0x22, 0x3e, 0x6c, 0x77, 0x49, 0x50, + 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x62, 0x72, + 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x3e, 0x20, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x73, 0x69, 0x22, + 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, + 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x49, + 0x2f, 0x4f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, + 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, + 0x0a, +}; + +static const uint8_t data_styles_css[] = +{ + /* /styles.css */ + 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x2e, + 0x63, 0x73, 0x73, 0x00, + 0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, + 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, + 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x39, + 0x2d, 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, + 0x78, 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, + 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, + 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, + 0x0a, 0x42, 0x4f, 0x44, 0x59, 0x0a, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x20, + 0x41, 0x72, 0x69, 0x61, 0x6c, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x68, 0x69, 0x74, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x31, 0x30, + 0x70, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, + 0x30, 0x70, 0x78, 0x0a, 0x7d, 0x0a, 0x0a, 0x42, + 0x4f, 0x44, 0x59, 0x2e, 0x73, 0x69, 0x64, 0x65, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, 0x61, 0x6c, + 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x77, + 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, + 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, + 0x20, 0x31, 0x30, 0x70, 0x78, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, + 0x67, 0x3a, 0x20, 0x30, 0x70, 0x78, 0x0a, 0x7d, + 0x0a, 0x0a, 0x48, 0x31, 0x0a, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x68, 0x69, 0x74, + 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x62, 0x6c, 0x61, + 0x63, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3a, 0x20, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x3a, 0x20, 0x41, 0x72, 0x69, 0x61, + 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, + 0x20, 0x32, 0x34, 0x70, 0x74, 0x3b, 0x0a, 0x20, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, + 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, + 0x0a, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, + 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, + 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2d, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, + 0x35, 0x30, 0x25, 0x3b, 0x0a, 0x7d, 0x0a, +}; + +static const uint8_t data_ti_htm[] = +{ + /* /ti.htm */ + 0x2f, 0x74, 0x69, 0x2e, 0x68, 0x74, 0x6d, 0x00, + + 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x6f, 0x70, + 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, + 0x32, 0x30, 0x31, 0x34, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x49, + 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x41, 0x6c, + 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x68, + 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, + 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, + 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, + 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x36, 0x39, + 0x2d, 0x31, 0x22, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, + 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x2e, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x73, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0x3e, 0x0a, + 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x41, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x0a, + 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, + 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x0a, + 0x3c, 0x21, 0x2d, 0x2d, 0x0a, 0x20, 0x20, 0x2e, + 0x6d, 0x63, 0x75, 0x53, 0x42, 0x53, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3a, 0x31, 0x30, 0x30, 0x25, 0x3b, 0x0a, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x2e, 0x74, + 0x69, 0x76, 0x61, 0x47, 0x6c, 0x6f, 0x62, 0x65, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3a, 0x32, 0x35, 0x25, 0x3b, + 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x2d, 0x2d, 0x3e, + 0x0a, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, + 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0x0a, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, + 0x3e, 0x0a, 0x3c, 0x68, 0x31, 0x3e, 0x41, 0x62, + 0x6f, 0x75, 0x74, 0x20, 0x54, 0x65, 0x78, 0x61, + 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x68, + 0x31, 0x3e, 0x0a, 0x3c, 0x68, 0x72, 0x3e, 0x0a, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x2e, 0x2f, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x73, 0x2f, 0x74, 0x69, 0x76, 0x61, 0x5f, + 0x67, 0x6c, 0x6f, 0x62, 0x65, 0x2d, 0x73, 0x6d, + 0x61, 0x6c, 0x6c, 0x2e, 0x67, 0x69, 0x66, 0x22, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, + 0x74, 0x69, 0x76, 0x61, 0x47, 0x6c, 0x6f, 0x62, + 0x65, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x3e, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x65, 0x78, + 0x61, 0x73, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x28, + 0x54, 0x49, 0x29, 0x20, 0x69, 0x73, 0x0a, 0x3c, + 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x64, + 0x6f, 0x63, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2f, 0x74, 0x69, 0x62, 0x75, + 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, + 0x3e, 0x61, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x6d, + 0x69, 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, + 0x6f, 0x72, 0x20, 0x49, 0x43, 0x20, 0x64, 0x65, + 0x73, 0x69, 0x67, 0x6e, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, + 0x74, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x3c, 0x2f, + 0x61, 0x3e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x74, 0x6f, 0x0a, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6e, + 0x61, 0x6c, 0x6f, 0x67, 0x22, 0x3e, 0x61, 0x6e, + 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x65, 0x63, + 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, + 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x2c, 0x0a, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x64, 0x73, 0x70, 0x22, 0x3e, 0x64, + 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x28, 0x44, 0x53, + 0x50, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0a, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6d, 0x63, 0x75, 0x22, 0x3e, + 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x28, 0x4d, 0x43, 0x55, + 0x29, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x63, 0x6f, + 0x6e, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x2c, 0x20, 0x54, 0x49, 0x20, 0x64, 0x65, 0x73, + 0x69, 0x67, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x73, 0x65, + 0x6d, 0x69, 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, + 0x74, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x6d, 0x62, + 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, + 0x67, 0x2e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x62, 0x72, 0x3e, 0x0a, 0x49, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2c, 0x20, 0x54, 0x49, 0x20, 0x6f, 0x66, 0x66, + 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x62, 0x72, 0x6f, 0x61, 0x64, 0x65, 0x73, 0x74, + 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, + 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x2c, 0x20, 0x66, 0x72, 0x6f, + 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6c, + 0x74, 0x72, 0x61, 0x2d, 0x6c, 0x6f, 0x77, 0x2d, + 0x70, 0x6f, 0x77, 0x65, 0x72, 0x0a, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6d, 0x73, 0x70, 0x34, 0x33, 0x30, 0x22, + 0x3e, 0x4d, 0x53, 0x50, 0x34, 0x33, 0x30, 0x3c, + 0x2f, 0x61, 0x3e, 0x26, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x3b, 0x20, 0x4d, 0x43, 0x55, 0x73, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x67, 0x68, + 0x2d, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x6e, 0x63, 0x65, 0x0a, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x32, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x43, + 0x32, 0x30, 0x30, 0x30, 0x3c, 0x2f, 0x61, 0x3e, + 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x20, + 0x72, 0x65, 0x61, 0x6c, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, + 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x33, 0x32, + 0x2d, 0x62, 0x69, 0x74, 0x2c, 0x20, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x70, 0x75, + 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x41, 0x52, + 0x4d, 0xc2, 0xae, 0x2d, 0x62, 0x61, 0x73, 0x65, + 0x64, 0x20, 0x4d, 0x43, 0x55, 0x73, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x74, 0x69, 0x76, 0x61, 0x2d, 0x63, 0x22, + 0x3e, 0x54, 0x69, 0x76, 0x61, 0x26, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x3b, 0x20, 0x43, 0x20, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x68, 0x65, 0x72, 0x63, 0x75, 0x6c, + 0x65, 0x73, 0x22, 0x3e, 0x48, 0x65, 0x72, 0x63, + 0x75, 0x6c, 0x65, 0x73, 0x26, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x3b, 0x20, 0x53, 0x61, 0x66, 0x65, + 0x74, 0x79, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x4d, + 0x43, 0x55, 0x73, 0x2e, 0x0a, 0x3c, 0x62, 0x72, + 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x56, 0x69, + 0x73, 0x69, 0x74, 0x20, 0x75, 0x73, 0x20, 0x6f, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, + 0x62, 0x20, 0x61, 0x74, 0x20, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x74, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x22, + 0x3e, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x3c, 0x2f, 0x61, 0x3e, 0x2e, + 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0a, 0x3c, 0x62, + 0x72, 0x3e, 0x0a, 0x3c, 0x62, 0x72, 0x3e, 0x0a, + 0x0a, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, + 0x63, 0x3d, 0x22, 0x2e, 0x2f, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x73, 0x2f, 0x6d, 0x63, 0x75, 0x5f, + 0x73, 0x69, 0x64, 0x65, 0x2d, 0x62, 0x79, 0x2d, + 0x73, 0x69, 0x64, 0x65, 0x2e, 0x6a, 0x70, 0x67, + 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x6d, 0x63, 0x75, 0x53, 0x42, 0x53, 0x22, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, + 0x6c, 0x65, 0x66, 0x74, 0x22, 0x3e, 0x0a, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, + 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, +}; + +const struct fsdata_file file_ti_htm[] = +{ + { + NULL, + data_ti_htm, + data_ti_htm + 8, + sizeof(data_ti_htm) - 8 + } +}; + +const struct fsdata_file file_styles_css[] = +{ + { + file_ti_htm, + data_styles_css, + data_styles_css + 12, + sizeof(data_styles_css) - 12 + } +}; + +const struct fsdata_file file_side_htm[] = +{ + { + file_styles_css, + data_side_htm, + data_side_htm + 10, + sizeof(data_side_htm) - 10 + } +}; + +const struct fsdata_file file_perror_htm[] = +{ + { + file_side_htm, + data_perror_htm, + data_perror_htm + 12, + sizeof(data_perror_htm) - 12 + } +}; + +const struct fsdata_file file_lwipstat_ssi[] = +{ + { + file_perror_htm, + data_lwipstat_ssi, + data_lwipstat_ssi + 14, + sizeof(data_lwipstat_ssi) - 14 + } +}; + +const struct fsdata_file file_io_ssi[] = +{ + { + file_lwipstat_ssi, + data_io_ssi, + data_io_ssi + 8, + sizeof(data_io_ssi) - 8 + } +}; + +const struct fsdata_file file_index_htm[] = +{ + { + file_io_ssi, + data_index_htm, + data_index_htm + 11, + sizeof(data_index_htm) - 11 + } +}; + +const struct fsdata_file file_images_ti_logo_gif[] = +{ + { + file_index_htm, + data_images_ti_logo_gif, + data_images_ti_logo_gif + 20, + sizeof(data_images_ti_logo_gif) - 20 + } +}; + +const struct fsdata_file file_images_tiva_globe_small_gif[] = +{ + { + file_images_ti_logo_gif, + data_images_tiva_globe_small_gif, + data_images_tiva_globe_small_gif + 29, + sizeof(data_images_tiva_globe_small_gif) - 29 + } +}; + +const struct fsdata_file file_images_tiva_jpg[] = +{ + { + file_images_tiva_globe_small_gif, + data_images_tiva_jpg, + data_images_tiva_jpg + 17, + sizeof(data_images_tiva_jpg) - 17 + } +}; + +const struct fsdata_file file_images_ti_gif[] = +{ + { + file_images_tiva_jpg, + data_images_ti_gif, + data_images_ti_gif + 15, + sizeof(data_images_ti_gif) - 15 + } +}; + +const struct fsdata_file file_images_mcu_side_by_side_jpg[] = +{ + { + file_images_ti_gif, + data_images_mcu_side_by_side_jpg, + data_images_mcu_side_by_side_jpg + 29, + sizeof(data_images_mcu_side_by_side_jpg) - 29 + } +}; + +const struct fsdata_file file_images_freertos_jpg[] = +{ + { + file_images_mcu_side_by_side_jpg, + data_images_freertos_jpg, + data_images_freertos_jpg + 21, + sizeof(data_images_freertos_jpg) - 21 + } +}; + +const struct fsdata_file file_images_cortex_jpg[] = +{ + { + file_images_freertos_jpg, + data_images_cortex_jpg, + data_images_cortex_jpg + 19, + sizeof(data_images_cortex_jpg) - 19 + } +}; + +const struct fsdata_file file_images_c_c_c_control_small_jpg[] = +{ + { + file_images_cortex_jpg, + data_images_c_c_c_control_small_jpg, + data_images_c_c_c_control_small_jpg + 32, + sizeof(data_images_c_c_c_control_small_jpg) - 32 + } +}; + +const struct fsdata_file file_images_c_c_c_connect_small_jpg[] = +{ + { + file_images_c_c_c_control_small_jpg, + data_images_c_c_c_connect_small_jpg, + data_images_c_c_c_connect_small_jpg + 32, + sizeof(data_images_c_c_c_connect_small_jpg) - 32 + } +}; + +const struct fsdata_file file_images_c_c_c_communicate_small_jpg[] = +{ + { + file_images_c_c_c_connect_small_jpg, + data_images_c_c_c_communicate_small_jpg, + data_images_c_c_c_communicate_small_jpg + 36, + sizeof(data_images_c_c_c_communicate_small_jpg) - 36 + } +}; + +const struct fsdata_file file_images_apps_jpg[] = +{ + { + file_images_c_c_c_communicate_small_jpg, + data_images_apps_jpg, + data_images_apps_jpg + 17, + sizeof(data_images_apps_jpg) - 17 + } +}; + +const struct fsdata_file file_header_htm[] = +{ + { + file_images_apps_jpg, + data_header_htm, + data_header_htm + 12, + sizeof(data_header_htm) - 12 + } +}; + +const struct fsdata_file file_freertos_htm[] = +{ + { + file_header_htm, + data_freertos_htm, + data_freertos_htm + 14, + sizeof(data_freertos_htm) - 14 + } +}; + +const struct fsdata_file file_footer_htm[] = +{ + { + file_freertos_htm, + data_footer_htm, + data_footer_htm + 12, + sizeof(data_footer_htm) - 12 + } +}; + +const struct fsdata_file file_favicon_ico[] = +{ + { + file_footer_htm, + data_favicon_ico, + data_favicon_ico + 13, + sizeof(data_favicon_ico) - 13 + } +}; + +const struct fsdata_file file_family_htm[] = +{ + { + file_favicon_ico, + data_family_htm, + data_family_htm + 12, + sizeof(data_family_htm) - 12 + } +}; + +const struct fsdata_file file_connect_htm[] = +{ + { + file_family_htm, + data_connect_htm, + data_connect_htm + 13, + sizeof(data_connect_htm) - 13 + } +}; + +const struct fsdata_file file_block_htm[] = +{ + { + file_connect_htm, + data_block_htm, + data_block_htm + 11, + sizeof(data_block_htm) - 11 + } +}; + +const struct fsdata_file file_404_htm[] = +{ + { + file_block_htm, + data_404_htm, + data_404_htm + 9, + sizeof(data_404_htm) - 9 + } +}; + +#define FS_ROOT file_404_htm + +#define FS_NUMFILES 26 + diff --git a/boards/dk-tm4c129x/freertos_demo/idle_task.c b/boards/dk-tm4c129x/freertos_demo/idle_task.c new file mode 100644 index 0000000..9fdcc13 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/idle_task.c @@ -0,0 +1,460 @@ +//***************************************************************************** +// +// idle_task.c - The FreeRTOS idle task. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "utils/lwiplib.h" +#include "lwip/stats.h" +#include "display_task.h" +#include "idle_task.h" +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "semphr.h" +//***************************************************************************** +// +// The stack for the idle task. +// +//***************************************************************************** +uint32_t g_pui32IdleTaskStack[128]; + +//***************************************************************************** +// +// The number of tasks that are running. +// +//***************************************************************************** +static uint32_t g_ui32Tasks; + +//***************************************************************************** +// +// The number of tasks that existed the last time the display was updated (used +// to detect when the display should be updated again). +// +//***************************************************************************** +static uint32_t g_ui32PreviousTasks; + +//***************************************************************************** +// +// The number of seconds that the application has been running. This is +// initialized to -1 in order to get the initial display updated as soon as +// possible. +// +//***************************************************************************** +static uint32_t g_ui32Seconds = 0xffffffff; + +//***************************************************************************** +// +// The current IP address. This is initialized to -1 in order to get the +// initial display updated as soon as possible. +// +//***************************************************************************** +static uint32_t g_ui32IPAddress = 0xffffffff; + +//***************************************************************************** +// +// The number of packets that have been transmitted. This is initialized to -1 +// in order to get the initial display updated as soon as possible. +// +//***************************************************************************** +static uint32_t g_ui32TXPackets = 0xffffffff; + +//***************************************************************************** +// +// The number of packets that have been received. This is initialized to -1 in +// order to get the initial display updated as soon as possible. +// +//***************************************************************************** +static uint32_t g_ui32RXPackets = 0xffffffff; + +//***************************************************************************** +// +// A buffer to contain the string versions of the information displayed at the +// bottom of the display. +// +//***************************************************************************** +static char g_pcTimeString[12]; +static char g_pcTaskString[4]; +static char g_pcIPString[24]; +static char g_pcTxString[8]; +static char g_pcRxString[8]; + +//***************************************************************************** +// +// Displays the IP address in a human-readable format. +// +//***************************************************************************** +static void +DisplayIP(uint32_t ui32IP) +{ + uint32_t ui32Loop, ui32Idx, ui32Value; + + // + // If there is no IP address, indicate that one is being acquired. + // + if(ui32IP == 0) + { + DisplayString(114, 231 - 10, " Acquiring... "); + return; + } + + // + // Set the initial index into the string that is being constructed. + // + ui32Idx = 0; + + // + // Start the string with four spaces. Not all will necessarily be used, + // depending upon the length of the IP address string. + // + for(ui32Loop = 0; ui32Loop < 4; ui32Loop++) + { + g_pcIPString[ui32Idx++] = ' '; + } + + // + // Loop through the four bytes of the IP address. + // + for(ui32Loop = 0; ui32Loop < 32; ui32Loop += 8) + { + // + // Extract this byte from the IP address word. + // + ui32Value = (ui32IP >> ui32Loop) & 0xff; + + // + // Convert this byte into ASCII, using only the characters required. + // + if(ui32Value > 99) + { + g_pcIPString[ui32Idx++] = '0' + (ui32Value / 100); + } + if(ui32Value > 9) + { + g_pcIPString[ui32Idx++] = '0' + ((ui32Value / 10) % 10); + } + g_pcIPString[ui32Idx++] = '0' + (ui32Value % 10); + + // + // Add a dot to separate this byte from the next. + // + g_pcIPString[ui32Idx++] = '.'; + } + + // + // Fill the remainder of the string buffer with spaces. + // + for(ui32Loop = ui32Idx - 1; ui32Loop < 20; ui32Loop++) + { + g_pcIPString[ui32Loop] = ' '; + } + + // + // Null terminate the string at the appropriate place, based on the length + // of the string version of the IP address. There may or may not be + // trailing spaces that remain. + // + g_pcIPString[ui32Idx + 3 - ((ui32Idx - 12) / 2)] = '\0'; + + // + // Display the string. The horizontal position and the number of leading + // spaces utilized depend on the length of the string version of the IP + // address. The end result is the IP address centered in the provided + // space with leading/trailing spaces as required to clear the remainder of + // the space. + // + DisplayString(117 - ((ui32Idx & 1) * 3), 231 - 10, + g_pcIPString + ((ui32Idx - 12) / 2)); +} + +//***************************************************************************** +// +// Displays a value in a human-readable format. This does not need to deal +// with leading/trailing spaces sicne the values displayed are monotonically +// increasing. +// +//***************************************************************************** +static void +DisplayValue(char *pcBuffer, uint32_t ui32Value, uint32_t ui32X, + uint32_t ui32Y) +{ + // + // See if the value is less than 10. + // + if(ui32Value < 10) + { + // + // Display the value using only a single digit. + // + pcBuffer[0] = '0' + ui32Value; + pcBuffer[1] = '\0'; + DisplayString(ui32X + 15, ui32Y, pcBuffer); + } + + // + // Otherwise, see if the value is less than 100. + // + else if(ui32Value < 100) + { + // + // Display the value using two digits. + // + pcBuffer[0] = '0' + (ui32Value / 10); + pcBuffer[1] = '0' + (ui32Value % 10); + pcBuffer[2] = '\0'; + DisplayString(ui32X + 12, ui32Y, pcBuffer); + } + + // + // Otherwise, see if the value is less than 1,000. + // + else if(ui32Value < 1000) + { + // + // Display the value using three digits. + // + pcBuffer[0] = '0' + (ui32Value / 100); + pcBuffer[1] = '0' + ((ui32Value / 10) % 10); + pcBuffer[2] = '0' + (ui32Value % 10); + pcBuffer[3] = '\0'; + DisplayString(ui32X + 9, ui32Y, pcBuffer); + } + + // + // Otherwise, see if the value is less than 10,000. + // + else if(ui32Value < 10000) + { + // + // Display the value using four digits. + // + pcBuffer[0] = '0' + (ui32Value / 1000); + pcBuffer[1] = '0' + ((ui32Value / 100) % 10); + pcBuffer[2] = '0' + ((ui32Value / 10) % 10); + pcBuffer[3] = '0' + (ui32Value % 10); + pcBuffer[4] = '\0'; + DisplayString(ui32X + 6, ui32Y, pcBuffer); + } + + // + // Otherwise, see if the value is less than 100,000. + // + else if(ui32Value < 100000) + { + // + // Display the value using five digits. + // + pcBuffer[0] = '0' + (ui32Value / 10000); + pcBuffer[1] = '0' + ((ui32Value / 1000) % 10); + pcBuffer[2] = '0' + ((ui32Value / 100) % 10); + pcBuffer[3] = '0' + ((ui32Value / 10) % 10); + pcBuffer[4] = '0' + (ui32Value % 10); + pcBuffer[5] = '\0'; + DisplayString(ui32X + 3, ui32Y, pcBuffer); + } + + // + // Otherwise, the value is between 100,000 and 999,999. + // + else + { + // + // Display the value using six digits. + // + pcBuffer[0] = '0' + ((ui32Value / 100000) % 10); + pcBuffer[1] = '0' + ((ui32Value / 10000) % 10); + pcBuffer[2] = '0' + ((ui32Value / 1000) % 10); + pcBuffer[3] = '0' + ((ui32Value / 100) % 10); + pcBuffer[4] = '0' + ((ui32Value / 10) % 10); + pcBuffer[5] = '0' + (ui32Value % 10); + pcBuffer[6] = '\0'; + DisplayString(ui32X, ui32Y, pcBuffer); + } +} + +//***************************************************************************** +// +// This hook is called by the FreeRTOS idle task when no other tasks are +// runnable. +// +//***************************************************************************** +void +vApplicationIdleHook(void) +{ + uint32_t ui32Temp; + + // + // See if this is the first time that the idle task has been called. + // + if(g_ui32Seconds == 0xffffffff) + { + // + // Draw the boxes for the statistics that are displayed. + // + DisplayMove(8, 231 - 20); + DisplayDraw(311, 231 - 20); + DisplayDraw(311, 230); + DisplayDraw(8, 230); + DisplayDraw(8, 231 - 20); + DisplayMove(69, 231 - 20); + DisplayDraw(69, 230); + DisplayMove(111, 231 - 20); + DisplayDraw(111, 230); + DisplayMove(213, 231 - 20); + DisplayDraw(213, 230); + DisplayMove(262, 231 - 20); + DisplayDraw(262, 230); + + // + // Place the statistics titles in the boxes. + // + DisplayString(21, 231 - 18, "Uptime"); + DisplayString(75, 231 - 18, "Tasks"); + DisplayString(133, 231 - 18, "IP Address"); + DisplayString(232, 231 - 18, "TX"); + DisplayString(280, 231 - 18, "RX"); + } + + // + // Get the number of seconds that the application has been running. + // + ui32Temp = xTaskGetTickCount() / (1000 / portTICK_RATE_MS); + + // + // See if the number of seconds has changed. + // + if(ui32Temp != g_ui32Seconds) + { + // + // Update the local copy of the run time. + // + g_ui32Seconds = ui32Temp; + + // + // Convert the number of seconds into a text string. + // + g_pcTimeString[0] = '0' + ((ui32Temp / 36000) % 10); + g_pcTimeString[1] = '0' + ((ui32Temp / 3600) % 10); + g_pcTimeString[2] = ':'; + g_pcTimeString[3] = '0' + ((ui32Temp / 600) % 6); + g_pcTimeString[4] = '0' + ((ui32Temp / 60) % 10); + g_pcTimeString[5] = ':'; + g_pcTimeString[6] = '0' + ((ui32Temp / 10) % 6); + g_pcTimeString[7] = '0' + (ui32Temp % 10); + g_pcTimeString[8] = '\0'; + + // + // Have the display task write this string onto the display. + // + DisplayString(16, 231 - 10, g_pcTimeString); + } + + // + // Get the number of task that are running except idle task. + // + g_ui32Tasks = uxTaskGetNumberOfTasks() - 1; + + // + // See if the number of tasks has changed. + // + if(g_ui32Tasks != g_ui32PreviousTasks) + { + // + // Update the local copy of the number of tasks. + // + ui32Temp = g_ui32PreviousTasks = g_ui32Tasks; + + // + // Convert the number of tasks into a text string and display it. + // + if(ui32Temp < 10) + { + g_pcTaskString[0] = ' '; + g_pcTaskString[1] = '0' + (ui32Temp % 10); + g_pcTaskString[2] = ' '; + g_pcTaskString[3] = '\0'; + DisplayString(81, 231 - 10, g_pcTaskString); + } + else + { + g_pcTaskString[0] = '0' + ((ui32Temp / 10) % 10); + g_pcTaskString[1] = '0' + (ui32Temp % 10); + g_pcTaskString[2] = '\0'; + DisplayString(83, 231 - 10, g_pcTaskString); + } + } + + // + // Get the current IP address. + // + ui32Temp = lwIPLocalIPAddrGet(); + + // + // See if the IP address has changed. + // + if(ui32Temp != g_ui32IPAddress) + { + // + // Save the current IP address. + // + g_ui32IPAddress = ui32Temp; + + // + // Update the display of the IP address. + // + DisplayIP(ui32Temp); + } + + // + // See if the number of transmitted packets has changed. + // + if(lwip_stats.link.xmit != g_ui32TXPackets) + { + // + // Save the number of transmitted packets. + // + ui32Temp = g_ui32TXPackets = lwip_stats.link.xmit; + + // + // Update the display of transmitted packets. + // + DisplayValue(g_pcTxString, ui32Temp, 219, 231 - 10); + } + + // + // See if the number of received packets has changed. + // + if(lwip_stats.link.recv != g_ui32RXPackets) + { + // + // Save the number of received packets. + // + ui32Temp = g_ui32RXPackets = lwip_stats.link.recv; + + // + // Update the display of received packets. + // + DisplayValue(g_pcRxString, ui32Temp, 268, 231 - 10); + } + +} diff --git a/boards/dk-tm4c129x/freertos_demo/idle_task.h b/boards/dk-tm4c129x/freertos_demo/idle_task.h new file mode 100644 index 0000000..7066357 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/idle_task.h @@ -0,0 +1,35 @@ +//***************************************************************************** +// +// idle_task.h - Prototypes for the FreeRTOS idle task. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IDLE_TASK_H__ +#define __IDLE_TASK_H__ + +//***************************************************************************** +// +// Prototypes for the idle task. +// +//***************************************************************************** +extern uint32_t g_pui32IdleTaskStack[128]; + +#endif // __IDLE_TASK_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/images.c b/boards/dk-tm4c129x/freertos_demo/images.c new file mode 100644 index 0000000..0fc0f79 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/images.c @@ -0,0 +1,4602 @@ +//***************************************************************************** +// +// images.c - Spider images that are drawn onto the LCD. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" +#include "images.h" + +//***************************************************************************** +// +// A blank image used to erase a spider that has been smashed. +// +//***************************************************************************** +const uint8_t g_pui8SpiderBlankImage[] = +{ + IMAGE_FMT_1BPP_COMP, + 24, 0, + 24, 0, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +}; + +//***************************************************************************** +// +// The first image of the spider facing left. +// +//***************************************************************************** +const uint8_t g_pui8SpiderL1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 240, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x08, 0x07, 0x07, + 0x0b, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0b, 0x0b, + 0x0b, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0f, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0d, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x12, 0x12, 0x12, + 0x15, 0x12, 0x12, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x16, 0x19, 0x19, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1d, 0x1d, + 0x19, 0x1d, 0x1d, + 0x1b, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x27, 0x25, 0x25, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x2b, 0x27, 0x27, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x2c, 0x2d, 0x2d, + 0x13, 0x00, 0x8f, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x30, 0x2f, 0x2f, + 0x34, 0x2f, 0x2f, + 0x00, 0x00, 0xa1, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x06, 0x03, 0xa7, + 0x00, 0x00, 0xb0, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1b, 0x18, 0x86, + 0x3f, 0x39, 0x39, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x3f, 0x3f, + 0x22, 0x2b, 0x70, + 0x15, 0x15, 0xa6, + 0x3d, 0x41, 0x41, + 0x41, 0x42, 0x42, + 0x42, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x45, 0x45, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x46, 0x49, 0x49, + 0x46, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x45, 0x4c, 0x4c, + 0x25, 0x25, 0xa5, + 0x29, 0x21, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x51, 0x48, 0x79, + 0x50, 0x59, 0x59, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5a, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x67, 0x67, 0x67, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6f, + 0x71, 0x71, 0x71, + 0x75, 0x71, 0x71, + 0x54, 0x54, 0xb7, + 0x5f, 0x5b, 0xab, + 0x75, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x78, 0x7f, + 0x7f, 0x7e, 0x7e, + 0x81, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x81, 0x83, 0x83, + 0x8c, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8c, 0x8c, + 0x95, 0x90, 0x90, + 0x83, 0x7b, 0xc1, + 0x98, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x8d, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa1, 0xa3, + 0xa4, 0xa4, 0xa4, + 0xa8, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xaa, 0xaa, + 0xa5, 0xac, 0xac, + 0xb0, 0xab, 0xab, + 0xad, 0xae, 0xae, + 0xac, 0xaf, 0xaf, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb5, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbd, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xc9, 0xca, 0xca, + 0xca, 0xca, 0xca, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcd, 0xd1, 0xd1, + 0xc8, 0xd4, 0xd4, + 0xd0, 0xd4, 0xd4, + 0xd5, 0xd6, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe4, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf5, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfb, 0xfb, + + 0xf2, 0x07, 0x07, 0x07, 0x06, 0x2d, 0x04, 0x02, 0x7f, 0xca, 0x07, 0x06, + 0x66, 0x85, 0x02, 0xa8, 0x47, 0x00, 0x09, 0x00, 0x18, 0x70, 0x0e, 0x02, + 0xb6, 0x46, 0x01, 0x60, 0xb8, 0x47, 0x01, 0x62, 0xb5, 0x7a, 0x1f, 0x00, + 0x01, 0x00, 0x55, 0xc8, 0x24, 0x00, 0x00, 0xd4, 0xe1, 0x80, 0x2f, 0x00, + 0x3a, 0xba, 0xe1, 0xb0, 0x50, 0x03, 0x02, 0xa6, 0xac, 0x0b, 0x00, 0xcb, + 0x5a, 0x47, 0x00, 0x00, 0x00, 0x1c, 0x2b, 0x07, 0x69, 0xed, 0x58, 0x00, + 0x02, 0x7d, 0xf0, 0x61, 0x00, 0xb7, 0x96, 0x47, 0x27, 0x00, 0x8f, 0xdf, + 0xe4, 0x42, 0x26, 0xe2, 0x22, 0x21, 0x01, 0xde, 0xa0, 0x0d, 0x2f, 0xbe, + 0xc5, 0x04, 0x3b, 0x00, 0x03, 0x3c, 0x8a, 0xad, 0x8c, 0x5d, 0xbb, 0xd5, + 0x00, 0x32, 0xce, 0x19, 0x97, 0xaa, 0x23, 0x93, 0xe7, 0x11, 0xe8, 0xb2, + 0x15, 0x43, 0x13, 0x59, 0x20, 0x01, 0x00, 0x17, 0xa1, 0xbc, 0xc6, 0x3f, + 0xc4, 0x67, 0xc9, 0x18, 0xd8, 0x8b, 0x2e, 0x53, 0x2b, 0x00, 0x00, 0x01, + 0x00, 0x39, 0x2a, 0x95, 0xc0, 0xa7, 0xc1, 0xc3, 0xa4, 0x18, 0x64, 0x3e, + 0x0f, 0x47, 0x01, 0x08, 0x9f, 0xa9, 0x00, 0x65, 0x54, 0x77, 0x91, 0x47, + 0x4d, 0x44, 0x4e, 0x20, 0x5c, 0x35, 0x3f, 0x00, 0x00, 0x03, 0x6f, 0x92, + 0x00, 0x56, 0x54, 0x54, 0x54, 0x33, 0x06, 0x09, 0x4a, 0x10, 0x54, 0x60, + 0x08, 0x47, 0x00, 0x03, 0x84, 0x79, 0x00, 0x87, 0x6c, 0x74, 0x89, 0x45, + 0x4b, 0x36, 0x4f, 0x24, 0x52, 0x5b, 0x4c, 0x29, 0x1e, 0x0b, 0x6b, 0xd7, + 0x00, 0xab, 0xdb, 0xe0, 0x80, 0x73, 0x5f, 0x57, 0x6e, 0x40, 0x30, 0x44, + 0x37, 0x9d, 0xa3, 0x5e, 0x10, 0x01, 0x00, 0x75, 0xd3, 0x3d, 0x76, 0xbf, + 0x86, 0xd1, 0x78, 0x08, 0xae, 0xdd, 0x9b, 0x40, 0x44, 0x00, 0x08, 0x6a, + 0x00, 0xca, 0xd2, 0x9c, 0xea, 0x63, 0x00, 0x43, 0xcd, 0x00, 0x0a, 0xa2, + 0xcf, 0x31, 0x51, 0xb1, 0xe5, 0xc2, 0x10, 0x90, 0x48, 0x03, 0x23, 0x16, + 0x98, 0xee, 0x9a, 0x00, 0x00, 0x00, 0x2c, 0xe6, 0x16, 0x11, 0xaf, 0xda, + 0x01, 0x41, 0x03, 0x25, 0x82, 0xdc, 0xef, 0xb3, 0x43, 0x00, 0x00, 0x00, + 0x53, 0x28, 0x07, 0x1b, 0x49, 0xec, 0x00, 0x72, 0x00, 0x18, 0xbd, 0xe9, + 0x68, 0x00, 0x71, 0x10, 0xeb, 0x99, 0x12, 0x44, 0x02, 0x30, 0x88, 0xb4, + 0x00, 0xd0, 0xd6, 0xd9, 0xa5, 0x00, 0x4c, 0xe3, 0xb9, 0x04, 0x38, 0x1a, + 0xc7, 0x7b, 0x02, 0x4c, 0x00, 0x3b, 0x00, 0x94, 0x6d, 0x34, 0x1d, 0x04, + 0x05, 0x11, 0x2d, 0x03, 0xcc, 0x8d, 0x0c, 0x00, 0x8e, 0x81, 0x4e, 0x15, + 0x00, 0x00, 0x03, 0x9e, 0x83, 0x07, 0x00, 0x08, 0x7c, 0xc7, 0x4f, 0x0e, + 0x14, 0x7e, 0x03, 0x6f, 0x27, 0x77, 0x80, 0x2f, +}; + +//***************************************************************************** +// +// The second image of the spider facing left. +// +//***************************************************************************** +const uint8_t g_pui8SpiderL2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 240, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x08, 0x07, 0x07, + 0x0b, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0b, 0x0b, + 0x0b, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0f, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0d, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x12, 0x12, 0x12, + 0x15, 0x12, 0x12, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x16, 0x19, 0x19, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1d, 0x1d, + 0x19, 0x1d, 0x1d, + 0x1b, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x27, 0x25, 0x25, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x2b, 0x27, 0x27, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x2c, 0x2d, 0x2d, + 0x13, 0x00, 0x8f, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x30, 0x2f, 0x2f, + 0x34, 0x2f, 0x2f, + 0x00, 0x00, 0xa1, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x06, 0x03, 0xa7, + 0x00, 0x00, 0xb0, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1b, 0x18, 0x86, + 0x3f, 0x39, 0x39, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x3f, 0x3f, + 0x22, 0x2b, 0x70, + 0x15, 0x15, 0xa6, + 0x3d, 0x41, 0x41, + 0x41, 0x42, 0x42, + 0x42, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x45, 0x45, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x46, 0x49, 0x49, + 0x46, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x45, 0x4c, 0x4c, + 0x25, 0x25, 0xa5, + 0x29, 0x21, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x51, 0x48, 0x79, + 0x50, 0x59, 0x59, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5a, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x67, 0x67, 0x67, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6f, + 0x71, 0x71, 0x71, + 0x75, 0x71, 0x71, + 0x54, 0x54, 0xb7, + 0x5f, 0x5b, 0xab, + 0x75, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x78, 0x7f, + 0x7f, 0x7e, 0x7e, + 0x81, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x81, 0x83, 0x83, + 0x8c, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8c, 0x8c, + 0x95, 0x90, 0x90, + 0x98, 0x90, 0x90, + 0x83, 0x7b, 0xc1, + 0x91, 0x91, 0x91, + 0x8d, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa1, 0xa3, + 0xa4, 0xa4, 0xa4, + 0xa8, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xaa, 0xaa, + 0xa5, 0xac, 0xac, + 0xb0, 0xab, 0xab, + 0xad, 0xae, 0xae, + 0xac, 0xaf, 0xaf, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb5, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbd, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xc9, 0xca, 0xca, + 0xca, 0xca, 0xca, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcd, 0xd1, 0xd1, + 0xc8, 0xd4, 0xd4, + 0xd0, 0xd4, 0xd4, + 0xd5, 0xd6, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe4, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf5, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfb, 0xfb, + + 0xf1, 0x07, 0x07, 0x07, 0x07, 0x14, 0x7e, 0x03, 0x07, 0xc0, 0x07, 0x01, + 0x03, 0x9e, 0x83, 0x07, 0x00, 0x08, 0x20, 0x7c, 0x02, 0x1f, 0x3b, 0x94, + 0x6d, 0x34, 0x1d, 0x00, 0x04, 0x05, 0x11, 0x2d, 0xcc, 0x8d, 0x0c, 0x00, + 0x20, 0x8e, 0x81, 0x3f, 0x02, 0x30, 0x88, 0xb4, 0xd0, 0x00, 0xd6, 0xd9, + 0xa4, 0x00, 0x4c, 0xe3, 0xb9, 0x38, 0x10, 0x1a, 0xc7, 0x7b, 0x3f, 0x53, + 0x28, 0x07, 0x1b, 0x00, 0x49, 0xec, 0x72, 0x00, 0x18, 0xbd, 0xe9, 0x68, + 0x04, 0x00, 0x71, 0xeb, 0x99, 0x12, 0x3b, 0x16, 0x98, 0x00, 0xee, 0x9a, + 0x00, 0x00, 0x2c, 0xe6, 0x16, 0x11, 0x00, 0xaf, 0xda, 0x41, 0x03, 0x25, + 0x82, 0xdc, 0xef, 0x40, 0xb3, 0x41, 0x08, 0x6a, 0xca, 0xd2, 0x9c, 0xea, + 0x00, 0x63, 0x00, 0x43, 0xcd, 0x0a, 0xa2, 0xcf, 0x31, 0x00, 0x51, 0xb1, + 0xe5, 0xc2, 0x90, 0x48, 0x03, 0x00, 0x00, 0x00, 0x37, 0x9d, 0xa3, 0x5e, + 0x10, 0x01, 0x75, 0x00, 0xd3, 0x3d, 0x76, 0xbf, 0x86, 0xd1, 0x78, 0xae, + 0x02, 0xdd, 0x9b, 0x40, 0x00, 0x00, 0x00, 0xe9, 0x29, 0x40, 0x1e, 0xc3, + 0x6b, 0xd7, 0xab, 0xdb, 0xe0, 0x80, 0x06, 0x73, 0x5f, 0x57, 0x6e, 0x30, + 0x44, 0x13, 0x03, 0x00, 0x84, 0x79, 0x87, 0x6c, 0x74, 0x89, 0x45, 0x4b, + 0x0c, 0x36, 0x4f, 0x52, 0x5b, 0x47, 0x41, 0x6f, 0x92, 0x00, 0x56, 0x54, + 0x54, 0x54, 0x33, 0x06, 0x09, 0x4a, 0x10, 0x54, 0x60, 0x08, 0x3f, 0x00, + 0x08, 0x9f, 0xa9, 0x00, 0x65, 0x54, 0x77, 0x91, 0x47, 0x4d, 0x44, 0x4e, + 0x20, 0x5c, 0x35, 0x4f, 0x00, 0x00, 0x01, 0x39, 0x2a, 0x00, 0x95, 0xc0, + 0xa7, 0xc1, 0xc3, 0xa5, 0x64, 0x3e, 0x44, 0x0f, 0x4d, 0x13, 0x59, 0x20, + 0x01, 0x17, 0xa1, 0x00, 0xbc, 0xc6, 0x3f, 0xc4, 0x67, 0xc9, 0xd8, 0x8b, + 0x40, 0x2e, 0x45, 0x03, 0x3c, 0x8a, 0xad, 0x8c, 0x5d, 0x00, 0xbb, 0xd5, + 0x32, 0xce, 0x19, 0x97, 0xaa, 0x23, 0x04, 0x93, 0xe7, 0xe8, 0xb2, 0x15, + 0x35, 0x00, 0x27, 0x00, 0x8f, 0xdf, 0xe4, 0x42, 0x26, 0xe2, 0x22, 0x21, + 0x01, 0xde, 0xa0, 0x0d, 0x2f, 0xbe, 0xc5, 0x04, 0x46, 0x00, 0x00, 0x00, + 0x1c, 0x2b, 0x07, 0x69, 0xed, 0x58, 0x01, 0x00, 0x7d, 0xf0, 0x61, 0x00, + 0xb7, 0x96, 0x4f, 0x80, 0x01, 0x3a, 0xba, 0xe1, 0xb0, 0x50, 0x03, 0xa6, + 0x04, 0xac, 0x0b, 0x00, 0xcb, 0x5a, 0x47, 0x00, 0x00, 0x00, 0x62, 0xb5, + 0x7a, 0x1f, 0x00, 0x00, 0x55, 0xc8, 0x0c, 0x24, 0x00, 0x00, 0xd4, 0xe1, + 0x36, 0x18, 0x70, 0x4b, 0x0e, 0x02, 0xb6, 0x46, 0x69, 0xb8, 0x4f, 0x06, + 0x2c, 0x66, 0x85, 0x1a, 0xa8, 0x47, 0x06, 0x2d, 0x04, 0xbc, 0x02, 0x7f, + 0x47, 0x07, 0x77, 0x2c, +}; + +//***************************************************************************** +// +// The first image of the spider facing right. +// +//***************************************************************************** +const uint8_t g_pui8SpiderR1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 240, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x08, 0x07, 0x07, + 0x0b, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0b, 0x0b, + 0x0b, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0f, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0d, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x12, 0x12, 0x12, + 0x15, 0x12, 0x12, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x16, 0x19, 0x19, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1d, 0x1d, + 0x19, 0x1d, 0x1d, + 0x1b, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x27, 0x25, 0x25, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x2b, 0x27, 0x27, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x2c, 0x2d, 0x2d, + 0x13, 0x00, 0x8f, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x30, 0x2f, 0x2f, + 0x34, 0x2f, 0x2f, + 0x00, 0x00, 0xa1, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x06, 0x03, 0xa7, + 0x00, 0x00, 0xb0, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1b, 0x18, 0x86, + 0x3f, 0x39, 0x39, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x3f, 0x3f, + 0x22, 0x2b, 0x70, + 0x15, 0x15, 0xa6, + 0x3d, 0x41, 0x41, + 0x41, 0x42, 0x42, + 0x42, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x45, 0x45, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x46, 0x49, 0x49, + 0x46, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x45, 0x4c, 0x4c, + 0x25, 0x25, 0xa5, + 0x29, 0x21, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x51, 0x48, 0x79, + 0x50, 0x59, 0x59, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5a, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x67, 0x67, 0x67, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6f, + 0x71, 0x71, 0x71, + 0x75, 0x71, 0x71, + 0x54, 0x54, 0xb7, + 0x5f, 0x5b, 0xab, + 0x75, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x78, 0x7f, + 0x7f, 0x7e, 0x7e, + 0x81, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x81, 0x83, 0x83, + 0x8c, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8c, 0x8c, + 0x95, 0x90, 0x90, + 0x98, 0x90, 0x90, + 0x83, 0x7b, 0xc1, + 0x91, 0x91, 0x91, + 0x8d, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa1, 0xa3, + 0xa4, 0xa4, 0xa4, + 0xa8, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xaa, 0xaa, + 0xa5, 0xac, 0xac, + 0xb0, 0xab, 0xab, + 0xad, 0xae, 0xae, + 0xac, 0xaf, 0xaf, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb5, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbd, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xc9, 0xca, 0xca, + 0xca, 0xca, 0xca, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcd, 0xd1, 0xd1, + 0xc8, 0xd4, 0xd4, + 0xd0, 0xd4, 0xd4, + 0xd5, 0xd6, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe4, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf5, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfb, 0xfb, + + 0xf1, 0x07, 0x07, 0x07, 0x04, 0x03, 0x7e, 0x14, 0x07, 0x80, 0x05, 0x02, + 0x7c, 0x08, 0x00, 0x07, 0x83, 0x9e, 0x60, 0x03, 0x4f, 0x4d, 0x81, 0x8e, + 0x00, 0x0c, 0x8d, 0x00, 0xcc, 0x2d, 0x11, 0x05, 0x04, 0x1d, 0x34, 0x6d, + 0x20, 0x94, 0x3b, 0x4e, 0x7b, 0xc7, 0x1a, 0x38, 0xb9, 0x00, 0xe3, 0x4c, + 0x00, 0xa4, 0xd9, 0xd6, 0xd0, 0xb4, 0x10, 0x88, 0x30, 0x02, 0x44, 0x12, + 0x99, 0xeb, 0x71, 0x00, 0x00, 0x68, 0xe9, 0xbd, 0x18, 0x00, 0x72, 0xec, + 0x04, 0x49, 0x1b, 0x07, 0x28, 0x53, 0x4c, 0x00, 0xb3, 0x00, 0xef, 0xdc, + 0x82, 0x25, 0x03, 0x41, 0xda, 0xaf, 0x00, 0x11, 0x16, 0xe6, 0x2c, 0x00, + 0x00, 0x9a, 0xee, 0x20, 0x98, 0x16, 0x33, 0x03, 0x48, 0x90, 0xc2, 0xe5, + 0x00, 0xb1, 0x51, 0x31, 0xcf, 0xa2, 0x0a, 0xcd, 0x43, 0x00, 0x00, 0x63, + 0xea, 0x9c, 0xd2, 0xca, 0x6a, 0x08, 0x80, 0x33, 0x00, 0x00, 0x40, 0x9b, + 0xdd, 0xae, 0x78, 0x00, 0xd1, 0x86, 0xbf, 0x76, 0x3d, 0xd3, 0x75, 0x01, + 0x04, 0x10, 0x5e, 0xa3, 0x9d, 0x37, 0x3c, 0x30, 0x6e, 0x00, 0x57, 0x5f, + 0x73, 0x80, 0xe0, 0xdb, 0xab, 0xd7, 0x48, 0x6b, 0x7b, 0x1e, 0x29, 0x44, + 0x5b, 0x52, 0x4f, 0x00, 0x36, 0x4b, 0x45, 0x89, 0x74, 0x6c, 0x87, 0x79, + 0x30, 0x84, 0x03, 0x6c, 0x02, 0x08, 0x60, 0x54, 0x4a, 0x00, 0x09, 0x06, + 0x33, 0x54, 0x54, 0x54, 0x56, 0x92, 0x60, 0x6f, 0x47, 0x01, 0x35, 0x5c, + 0x4e, 0x44, 0x4d, 0x00, 0x47, 0x91, 0x77, 0x54, 0x65, 0xa9, 0x9f, 0x08, + 0xc0, 0x47, 0x01, 0x0f, 0x3e, 0x64, 0xa5, 0xc3, 0xc1, 0x03, 0xa7, 0xc0, + 0x95, 0x2a, 0x39, 0x01, 0x47, 0x01, 0x00, 0x2e, 0x8b, 0xd8, 0xc9, 0x67, + 0xc4, 0x3f, 0xc6, 0x11, 0xbc, 0xa1, 0x17, 0x49, 0x20, 0x59, 0x13, 0x1b, + 0x00, 0x15, 0xb2, 0xe8, 0xe7, 0x93, 0x23, 0xaa, 0x97, 0x00, 0x19, 0xce, + 0x32, 0xd5, 0xbb, 0x5d, 0x8c, 0xad, 0x10, 0x8a, 0x3c, 0x03, 0x43, 0x04, + 0xc5, 0xbe, 0x2f, 0x00, 0x0d, 0xa0, 0xde, 0x21, 0x22, 0xe2, 0x26, 0x42, + 0x0c, 0xe4, 0xdf, 0x8f, 0x27, 0x5b, 0x32, 0x96, 0xb7, 0x00, 0x00, 0x61, + 0xf0, 0x7d, 0x00, 0x58, 0xed, 0x69, 0x10, 0x07, 0x2b, 0x1c, 0x57, 0x00, + 0x00, 0x5a, 0xcb, 0x00, 0x00, 0x0b, 0xac, 0xa6, 0x03, 0x50, 0xb0, 0xe1, + 0x32, 0xba, 0x3a, 0x4f, 0x01, 0x24, 0xd4, 0xe1, 0xc8, 0x01, 0x55, 0x00, + 0x00, 0x1f, 0x7a, 0xb5, 0x62, 0x3f, 0xa4, 0x01, 0xb8, 0x01, 0x46, 0xb6, + 0x72, 0x0e, 0x70, 0x44, 0x18, 0x3f, 0x00, 0x00, 0xa8, 0x02, 0x85, 0x66, + 0xd3, 0x77, 0x2e, 0x7f, 0x02, 0x04, 0x2d, 0x47, 0x07, 0xc0, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The second image of the spider facing right. +// +//***************************************************************************** +const uint8_t g_pui8SpiderR2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 240, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x08, 0x07, 0x07, + 0x0b, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0b, 0x0b, + 0x0b, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0f, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0d, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x12, 0x12, 0x12, + 0x15, 0x12, 0x12, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x16, 0x19, 0x19, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1d, 0x1d, + 0x19, 0x1d, 0x1d, + 0x1b, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x27, 0x25, 0x25, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x2b, 0x27, 0x27, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x2c, 0x2d, 0x2d, + 0x13, 0x00, 0x8f, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x30, 0x2f, 0x2f, + 0x34, 0x2f, 0x2f, + 0x00, 0x00, 0xa1, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x06, 0x03, 0xa7, + 0x00, 0x00, 0xb0, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1b, 0x18, 0x86, + 0x3f, 0x39, 0x39, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x3f, 0x3f, + 0x22, 0x2b, 0x70, + 0x15, 0x15, 0xa6, + 0x3d, 0x41, 0x41, + 0x41, 0x42, 0x42, + 0x42, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x45, 0x45, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x46, 0x49, 0x49, + 0x46, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x45, 0x4c, 0x4c, + 0x25, 0x25, 0xa5, + 0x29, 0x21, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x51, 0x48, 0x79, + 0x50, 0x59, 0x59, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5a, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x67, 0x67, 0x67, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6f, + 0x71, 0x71, 0x71, + 0x75, 0x71, 0x71, + 0x54, 0x54, 0xb7, + 0x5f, 0x5b, 0xab, + 0x75, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x78, 0x7f, + 0x7f, 0x7e, 0x7e, + 0x81, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x81, 0x83, 0x83, + 0x8c, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8c, 0x8c, + 0x95, 0x90, 0x90, + 0x83, 0x7b, 0xc1, + 0x98, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x8d, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa1, 0xa3, + 0xa4, 0xa4, 0xa4, + 0xa8, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xaa, 0xaa, + 0xa5, 0xac, 0xac, + 0xb0, 0xab, 0xab, + 0xad, 0xae, 0xae, + 0xac, 0xaf, 0xaf, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb5, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbd, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xc9, 0xca, 0xca, + 0xca, 0xca, 0xca, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcd, 0xd1, 0xd1, + 0xc8, 0xd4, 0xd4, + 0xd0, 0xd4, 0xd4, + 0xd5, 0xd6, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe4, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf5, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfb, 0xfb, + + 0xf4, 0x07, 0x07, 0x07, 0x01, 0x7f, 0x02, 0x04, 0x2d, 0xd3, 0x07, 0x06, + 0xa8, 0x02, 0x85, 0x66, 0x47, 0x06, 0x48, 0xb8, 0x01, 0x46, 0xb6, 0x1a, + 0x0e, 0x70, 0x18, 0x88, 0x17, 0x00, 0x24, 0xd4, 0xe1, 0xc8, 0x55, 0x00, + 0x04, 0x00, 0x1f, 0x7a, 0xb5, 0x62, 0x4f, 0x00, 0x00, 0x00, 0x5a, 0xcb, + 0x00, 0x0b, 0xac, 0xa6, 0x03, 0x50, 0x0c, 0xb0, 0xe1, 0xba, 0x3a, 0x4f, + 0x01, 0x96, 0xb7, 0x00, 0x00, 0x61, 0xf0, 0x7d, 0x00, 0x58, 0xed, 0x69, + 0x10, 0x07, 0x2b, 0x1c, 0x3f, 0x00, 0x04, 0xc5, 0xbe, 0x00, 0x2f, 0x0d, + 0xa0, 0xde, 0x21, 0x22, 0xe2, 0x26, 0x04, 0x42, 0xe4, 0xdf, 0x8f, 0x27, + 0x36, 0x15, 0xb2, 0x00, 0xe8, 0xe7, 0x93, 0x23, 0xaa, 0x97, 0x19, 0xce, + 0x00, 0x32, 0xd5, 0xbb, 0x5d, 0x8c, 0xad, 0x8a, 0x3c, 0x40, 0x03, 0x2d, + 0x2e, 0x8b, 0xd8, 0xc9, 0x67, 0xc4, 0x04, 0x3f, 0xc6, 0xbc, 0xa1, 0x17, + 0x71, 0x20, 0x59, 0x40, 0x13, 0x45, 0x0f, 0x3e, 0x64, 0xa4, 0xc3, 0xc1, + 0x03, 0xa7, 0xc0, 0x95, 0x2a, 0x39, 0x01, 0x6d, 0x32, 0x00, 0x35, 0x5c, + 0x4e, 0x44, 0x4d, 0x47, 0x91, 0x77, 0x04, 0x54, 0x65, 0xa9, 0x9f, 0x08, + 0x47, 0x00, 0x08, 0x00, 0x60, 0x54, 0x4a, 0x09, 0x06, 0x33, 0x54, 0x54, + 0x04, 0x54, 0x56, 0x92, 0x6f, 0x03, 0x47, 0x00, 0x00, 0x00, 0x5b, 0x52, + 0x4f, 0x36, 0x4b, 0x45, 0x89, 0x74, 0x0c, 0x6c, 0x87, 0x79, 0x84, 0x47, + 0x01, 0x30, 0x6e, 0x00, 0x57, 0x5f, 0x73, 0x80, 0xe0, 0xdb, 0xab, 0xd7, + 0x48, 0x6b, 0x53, 0x1e, 0x29, 0x1c, 0x40, 0x9b, 0xdd, 0x00, 0xae, 0x78, + 0xd1, 0x86, 0xbf, 0x76, 0x3d, 0xd3, 0x00, 0x75, 0x01, 0x10, 0x5e, 0xa3, + 0x9d, 0x37, 0x00, 0x00, 0x00, 0x03, 0x48, 0x90, 0xc2, 0xe5, 0xb1, 0x51, + 0x00, 0x31, 0xcf, 0xa2, 0x0a, 0xcd, 0x43, 0x00, 0x63, 0x00, 0xea, 0x9c, + 0xd2, 0xca, 0x6a, 0x08, 0x00, 0x00, 0x00, 0x00, 0xb3, 0xef, 0xdc, 0x82, + 0x25, 0x03, 0x41, 0x00, 0xda, 0xaf, 0x11, 0x16, 0xe6, 0x2c, 0x00, 0x00, + 0x08, 0x9a, 0xee, 0x98, 0x16, 0x51, 0x00, 0x00, 0x12, 0x00, 0x99, 0xeb, + 0x71, 0x00, 0x68, 0xe9, 0xbd, 0x18, 0x00, 0x00, 0x72, 0xec, 0x49, 0x1b, + 0x07, 0x28, 0x53, 0xc0, 0x53, 0x29, 0x02, 0x7b, 0xc7, 0x1a, 0x38, 0xb9, + 0x00, 0xe3, 0x4c, 0x00, 0xa5, 0xd9, 0xd6, 0xd0, 0xb4, 0x10, 0x88, 0x30, + 0x02, 0x3f, 0x81, 0x8e, 0x00, 0x0c, 0x00, 0x8d, 0xcc, 0x2d, 0x11, 0x05, + 0x04, 0x1d, 0x34, 0x10, 0x6d, 0x94, 0x3b, 0x46, 0x00, 0x02, 0x7c, 0x08, + 0x07, 0x00, 0x07, 0x83, 0x9e, 0x03, 0x7f, 0x37, 0x01, 0x1e, 0x03, 0x7e, + 0x14, 0x47, 0x07, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The first image of the spider facing up. +// +//***************************************************************************** +const uint8_t g_pui8SpiderU1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 238, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x08, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x0a, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x09, 0x09, 0x09, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, + 0x0f, 0x0c, 0x0c, + 0x0c, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x12, 0x12, 0x12, + 0x16, 0x12, 0x12, + 0x11, 0x13, 0x13, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x17, 0x18, 0x18, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1c, 0x1c, + 0x1b, 0x1c, 0x1c, + 0x19, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x27, 0x26, 0x26, + 0x2b, 0x26, 0x26, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x12, 0x00, 0x8f, + 0x2c, 0x2d, 0x2d, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x34, 0x2e, 0x2e, + 0x30, 0x2f, 0x2f, + 0x00, 0x00, 0xa2, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x00, 0x00, 0xb0, + 0x06, 0x04, 0xa7, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x3f, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1c, 0x17, 0x87, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x22, 0x2a, 0x6f, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x40, 0x40, + 0x3d, 0x41, 0x41, + 0x16, 0x15, 0xa6, + 0x41, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x44, 0x44, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x47, 0x49, 0x49, + 0x47, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x25, 0x24, 0xa5, + 0x45, 0x4c, 0x4c, + 0x29, 0x20, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x50, 0x59, 0x59, + 0x51, 0x49, 0x79, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5b, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x68, 0x66, 0x66, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6e, 0x6f, 0x6f, + 0x71, 0x71, 0x71, + 0x53, 0x53, 0xb7, + 0x75, 0x71, 0x71, + 0x5f, 0x5c, 0xab, + 0x76, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x77, 0x7f, + 0x80, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x7f, 0x7f, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x80, 0x83, 0x83, + 0x8b, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8b, 0x8b, + 0x83, 0x7a, 0xc1, + 0x95, 0x90, 0x90, + 0x98, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x8e, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa2, 0xa4, + 0xa4, 0xa5, 0xa5, + 0xa7, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xa9, 0xa9, + 0xa5, 0xac, 0xac, + 0xb0, 0xac, 0xac, + 0xac, 0xae, 0xae, + 0xad, 0xae, 0xae, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb6, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbe, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xca, 0xc9, 0xc9, + 0xca, 0xcb, 0xcb, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd3, 0xcc, 0xcc, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd0, 0xd3, 0xd3, + 0xc8, 0xd4, 0xd4, + 0xd5, 0xd5, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe3, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf4, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfc, 0xfc, + + 0xf2, 0x07, 0x07, 0x07, 0x03, 0x36, 0x28, 0x02, 0x13, 0x62, 0x03, 0x07, + 0x04, 0x08, 0x9b, 0x1e, 0x02, 0x58, 0x64, 0x3e, 0x47, 0x04, 0x68, 0xa2, + 0x03, 0x1f, 0x88, 0xc4, 0x47, 0x03, 0x17, 0xc8, 0x5d, 0x04, 0xab, 0x25, + 0x80, 0x3f, 0x00, 0x3a, 0x02, 0x00, 0x95, 0xd1, 0x0f, 0x94, 0x44, 0x8a, + 0x8d, 0x01, 0x18, 0x24, 0x92, 0x31, 0x00, 0x52, 0xec, 0x9a, 0x00, 0x00, + 0x03, 0x03, 0x08, 0x00, 0x01, 0x00, 0x5a, 0xdd, 0x1d, 0x00, 0x62, 0x6e, + 0x80, 0x44, 0x6b, 0x86, 0x26, 0x98, 0xe8, 0x73, 0x00, 0x00, 0x82, 0x6d, + 0x9d, 0x38, 0x16, 0xb9, 0xe2, 0x2a, 0x10, 0x39, 0xb3, 0x0d, 0x44, 0x33, + 0xb2, 0x07, 0x01, 0x00, 0x63, 0xd2, 0x69, 0x77, 0x90, 0xa7, 0x29, 0x9f, + 0x04, 0xd3, 0x41, 0x07, 0xb8, 0x78, 0x4c, 0x00, 0x1a, 0x00, 0xce, 0x1c, + 0x00, 0x00, 0x3b, 0xd5, 0x85, 0x55, 0x01, 0x65, 0x93, 0xba, 0x30, 0x27, + 0x67, 0xdf, 0x91, 0x80, 0x33, 0x04, 0xd4, 0x47, 0x2c, 0x43, 0x74, 0xa9, + 0x00, 0x6a, 0x53, 0x53, 0xbe, 0xc4, 0xcc, 0xe0, 0xeb, 0x40, 0xae, 0x4d, + 0x00, 0x05, 0xd8, 0xea, 0xe4, 0xcb, 0x00, 0xbd, 0xd9, 0x72, 0x53, 0x75, + 0xa5, 0x3d, 0x19, 0x00, 0x21, 0x57, 0x4f, 0x00, 0x00, 0x64, 0x2b, 0x00, + 0x00, 0x00, 0x11, 0x03, 0x10, 0xa3, 0x71, 0x15, 0x0a, 0x00, 0x84, 0xde, + 0x87, 0x53, 0x8e, 0xbf, 0xc2, 0x94, 0x00, 0x20, 0x00, 0x03, 0x54, 0xb4, + 0x83, 0x04, 0x00, 0x00, 0x00, 0x7c, 0x9c, 0x2c, 0x00, 0x00, 0x10, 0xa0, + 0x00, 0xcf, 0x7f, 0x44, 0x32, 0x46, 0xc1, 0x67, 0xa8, 0x00, 0xdc, 0x7b, + 0xa4, 0xc6, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0xca, 0x4b, + 0x18, 0xad, 0xcd, 0x00, 0x76, 0x70, 0x4a, 0x06, 0x4c, 0xa1, 0xc7, 0x22, + 0x08, 0x9e, 0xee, 0xaa, 0x23, 0x4a, 0x00, 0x00, 0x07, 0x00, 0x8b, 0xe1, + 0xbb, 0xd7, 0x31, 0xac, 0x5e, 0x35, 0x00, 0x09, 0x42, 0x61, 0xd6, 0x91, + 0x0e, 0x60, 0x0b, 0x80, 0x4c, 0x00, 0x00, 0x0c, 0xb6, 0xe7, 0x40, 0x50, + 0x00, 0xdb, 0x56, 0x4d, 0x49, 0x4e, 0x3c, 0x89, 0xe5, 0x40, 0x2e, 0x56, + 0x00, 0x08, 0x00, 0x37, 0x66, 0x03, 0x00, 0xaf, 0x99, 0x6c, 0x51, 0x53, + 0x5c, 0x0e, 0x2d, 0x00, 0xe6, 0xbc, 0xb5, 0xc9, 0xd0, 0xb7, 0xa6, 0x7d, + 0x80, 0x11, 0x7a, 0x8c, 0x1b, 0x00, 0x24, 0xe3, 0x3f, 0x00, 0x2f, 0x5b, + 0x5f, 0x34, 0x00, 0x00, 0xb0, 0xc3, 0x18, 0x96, 0x59, 0x23, 0x59, 0x41, + 0x02, 0x7e, 0xc5, 0x14, 0x6f, 0x80, 0xc0, 0xa1, 0x08, 0x81, 0x14, 0x04, + 0xc3, 0x5c, 0x3b, 0x79, 0xe9, 0xda, 0x8f, 0x8f, 0x47, 0x8e, 0x39, 0x97, + 0xed, 0x48, 0x47, 0x07, 0x01, 0x12, 0x3e, 0xb1, 0x03, 0x47, 0x07, 0x77, + 0x2f, 0x07, +}; + +//***************************************************************************** +// +// The second image of the spider facing up. +// +//***************************************************************************** +const uint8_t g_pui8SpiderU2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 238, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x08, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x0a, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x09, 0x09, 0x09, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, + 0x0f, 0x0c, 0x0c, + 0x0c, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x12, 0x12, 0x12, + 0x16, 0x12, 0x12, + 0x11, 0x13, 0x13, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x17, 0x18, 0x18, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1c, 0x1c, + 0x1b, 0x1c, 0x1c, + 0x19, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x27, 0x26, 0x26, + 0x2b, 0x26, 0x26, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x12, 0x00, 0x8f, + 0x2c, 0x2d, 0x2d, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x34, 0x2e, 0x2e, + 0x30, 0x2f, 0x2f, + 0x00, 0x00, 0xa2, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x00, 0x00, 0xb0, + 0x06, 0x04, 0xa7, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x3f, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1c, 0x17, 0x87, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x22, 0x2a, 0x6f, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x40, 0x40, + 0x3d, 0x41, 0x41, + 0x16, 0x15, 0xa6, + 0x41, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x44, 0x44, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x47, 0x49, 0x49, + 0x47, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x25, 0x24, 0xa5, + 0x45, 0x4c, 0x4c, + 0x29, 0x20, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x50, 0x59, 0x59, + 0x51, 0x49, 0x79, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5b, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x68, 0x66, 0x66, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6e, 0x6f, 0x6f, + 0x71, 0x71, 0x71, + 0x53, 0x53, 0xb7, + 0x75, 0x71, 0x71, + 0x5f, 0x5c, 0xab, + 0x76, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x77, 0x7f, + 0x80, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x7f, 0x7f, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x80, 0x83, 0x83, + 0x8b, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8b, 0x8b, + 0x83, 0x7a, 0xc1, + 0x95, 0x90, 0x90, + 0x98, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x8e, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa2, 0xa4, + 0xa4, 0xa5, 0xa5, + 0xa7, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xa9, 0xa9, + 0xa5, 0xac, 0xac, + 0xb0, 0xac, 0xac, + 0xac, 0xae, 0xae, + 0xad, 0xae, 0xae, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb6, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbe, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xca, 0xc9, 0xc9, + 0xca, 0xcb, 0xcb, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd3, 0xcc, 0xcc, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd0, 0xd3, 0xd3, + 0xc8, 0xd4, 0xd4, + 0xd5, 0xd5, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe3, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf4, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfc, 0xfc, + + 0xf2, 0x07, 0x07, 0x07, 0x03, 0x03, 0x13, 0x02, 0x28, 0x64, 0x36, 0x07, + 0x05, 0x3e, 0x58, 0x02, 0x1e, 0x9b, 0x64, 0x08, 0x3f, 0x04, 0x88, 0x1f, + 0x03, 0xa2, 0x68, 0xc8, 0x47, 0x03, 0x25, 0xab, 0x04, 0x5d, 0xc8, 0x17, + 0xa4, 0x3f, 0x18, 0x01, 0x8d, 0x8a, 0x04, 0x0f, 0xd1, 0x08, 0x95, 0x00, + 0x02, 0x3a, 0x2c, 0x6e, 0x62, 0x00, 0x00, 0x1d, 0xdd, 0x5a, 0x00, 0x01, + 0x08, 0x03, 0x03, 0x01, 0x00, 0x00, 0x9a, 0xec, 0x52, 0x31, 0x92, 0x44, + 0x00, 0x0d, 0xb3, 0x39, 0x2a, 0xe2, 0xb9, 0x16, 0x38, 0x00, 0x9d, 0x6d, + 0x82, 0x00, 0x73, 0xe8, 0x98, 0x26, 0x20, 0x86, 0x6b, 0x44, 0x00, 0x78, + 0xb8, 0x07, 0x41, 0x00, 0xd3, 0x9f, 0x29, 0xa7, 0x90, 0x77, 0x69, 0xd2, + 0x04, 0x63, 0x01, 0x07, 0xb2, 0x33, 0x45, 0x1c, 0xdf, 0x00, 0x67, 0x27, + 0x30, 0xba, 0x93, 0x65, 0x55, 0x85, 0x24, 0xd5, 0x3b, 0x91, 0xce, 0x1a, + 0x45, 0x00, 0xae, 0x00, 0xeb, 0xe0, 0xcc, 0xc4, 0xbe, 0x53, 0x53, 0x6a, + 0x01, 0xa9, 0x74, 0x43, 0x2c, 0x47, 0xd4, 0x04, 0x42, 0x00, 0x2b, 0x64, + 0x00, 0x00, 0x4f, 0x57, 0x21, 0x19, 0x00, 0x3d, 0xa5, 0x75, 0x53, 0x72, + 0xd9, 0xbd, 0xcb, 0x08, 0xe4, 0xea, 0xd8, 0x05, 0x42, 0x04, 0x83, 0xb4, + 0x00, 0x54, 0x03, 0x00, 0x20, 0x94, 0xc2, 0xbf, 0x8e, 0x00, 0x53, 0x87, + 0xde, 0x84, 0x0a, 0x15, 0x71, 0xa3, 0x10, 0x10, 0x03, 0x11, 0x32, 0x45, + 0xc6, 0xa4, 0x7b, 0x00, 0xdc, 0xa8, 0x67, 0xc1, 0x46, 0x32, 0x44, 0x7f, + 0x00, 0xcf, 0xa0, 0x10, 0x00, 0x00, 0x2c, 0x9c, 0x7c, 0x80, 0x42, 0x00, + 0x23, 0xaa, 0xee, 0x9e, 0x22, 0xc7, 0x00, 0xa1, 0x4c, 0x06, 0x4a, 0x70, + 0x76, 0xcd, 0xad, 0x04, 0x18, 0x4b, 0xca, 0x81, 0x03, 0x43, 0x00, 0x0b, + 0x00, 0x60, 0x0e, 0x91, 0xd6, 0x61, 0x42, 0x09, 0x35, 0x00, 0x5e, 0xac, + 0x31, 0xd7, 0xbb, 0xe1, 0x8b, 0x07, 0xc0, 0x4c, 0x19, 0x2e, 0xe5, 0x89, + 0x3c, 0x4e, 0x49, 0x00, 0x4d, 0x56, 0xdb, 0x50, 0x40, 0xe7, 0xb6, 0x0c, + 0x80, 0x4a, 0x7d, 0xa6, 0xb7, 0xd0, 0xc9, 0xb5, 0xbc, 0x00, 0xe6, 0x2d, + 0x0e, 0x5c, 0x53, 0x51, 0x6c, 0x99, 0x02, 0xaf, 0x03, 0x66, 0x37, 0x00, + 0x08, 0x3a, 0x00, 0x00, 0x00, 0x23, 0x59, 0x96, 0xc3, 0xb0, 0x00, 0x00, + 0x00, 0x34, 0x5f, 0x5b, 0x2f, 0x3f, 0xe3, 0x24, 0x00, 0x19, 0x1b, 0x8c, + 0x7a, 0x44, 0x11, 0x04, 0x14, 0x01, 0x40, 0x08, 0x89, 0xc0, 0x80, 0x6f, + 0xc5, 0x7e, 0x02, 0xc3, 0x47, 0xbf, 0x8f, 0xda, 0xe9, 0x79, 0x4f, 0x0f, + 0x07, 0x00, 0x00, 0x48, 0xed, 0x97, 0x4f, 0x0f, 0x01, 0x1e, 0x03, 0xb1, + 0x12, 0x4f, 0x07, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The first image of the spider facing down. +// +//***************************************************************************** +const uint8_t g_pui8SpiderD1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 238, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x08, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x0a, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x09, 0x09, 0x09, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, + 0x0f, 0x0c, 0x0c, + 0x0c, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x12, 0x12, 0x12, + 0x16, 0x12, 0x12, + 0x11, 0x13, 0x13, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x17, 0x18, 0x18, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1c, 0x1c, + 0x1b, 0x1c, 0x1c, + 0x19, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x27, 0x26, 0x26, + 0x2b, 0x26, 0x26, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x12, 0x00, 0x8f, + 0x2c, 0x2d, 0x2d, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x34, 0x2e, 0x2e, + 0x30, 0x2f, 0x2f, + 0x00, 0x00, 0xa2, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x00, 0x00, 0xb0, + 0x06, 0x04, 0xa7, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x3f, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1c, 0x17, 0x87, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x22, 0x2a, 0x6f, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x40, 0x40, + 0x3d, 0x41, 0x41, + 0x16, 0x15, 0xa6, + 0x41, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x44, 0x44, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x47, 0x49, 0x49, + 0x47, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x25, 0x24, 0xa5, + 0x45, 0x4c, 0x4c, + 0x29, 0x20, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x50, 0x59, 0x59, + 0x51, 0x49, 0x79, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5b, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x68, 0x66, 0x66, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6e, 0x6f, 0x6f, + 0x53, 0x53, 0xb7, + 0x71, 0x71, 0x71, + 0x75, 0x71, 0x71, + 0x5f, 0x5c, 0xab, + 0x76, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x77, 0x7f, + 0x80, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x7f, 0x7f, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x80, 0x83, 0x83, + 0x8b, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8b, 0x8b, + 0x83, 0x7a, 0xc1, + 0x95, 0x90, 0x90, + 0x98, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x8e, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa2, 0xa4, + 0xa4, 0xa5, 0xa5, + 0xa7, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xa9, 0xa9, + 0xa5, 0xac, 0xac, + 0xb0, 0xac, 0xac, + 0xac, 0xae, 0xae, + 0xad, 0xae, 0xae, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb6, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbe, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xca, 0xc9, 0xc9, + 0xca, 0xcb, 0xcb, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd3, 0xcc, 0xcc, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd0, 0xd3, 0xd3, + 0xc8, 0xd4, 0xd4, + 0xd5, 0xd5, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe3, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf4, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfc, 0xfc, + + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x02, 0x03, 0xb1, 0x12, 0xe1, 0x07, 0x07, + 0x01, 0x48, 0xed, 0x97, 0x02, 0x3f, 0x81, 0x07, 0x00, 0x00, 0x8f, 0xda, + 0xe9, 0x79, 0x3f, 0x0a, 0x00, 0x00, 0x04, 0x14, 0x01, 0x08, 0x01, 0xc0, + 0x08, 0x80, 0x6f, 0xc5, 0x7e, 0x3d, 0x23, 0x59, 0x96, 0x00, 0xc3, 0xb0, + 0x00, 0x00, 0x34, 0x5f, 0x5b, 0x2f, 0x01, 0x3f, 0xe3, 0x24, 0x00, 0x1b, + 0x8c, 0x7a, 0x41, 0x00, 0x7d, 0xa6, 0xb7, 0xd0, 0xc9, 0xb5, 0xbc, 0xe6, + 0x00, 0x2d, 0x0e, 0x5c, 0x53, 0x51, 0x6c, 0x99, 0xaf, 0x07, 0x03, 0x66, + 0x37, 0x00, 0x08, 0x41, 0x29, 0x11, 0x00, 0x2e, 0xe5, 0x89, 0x3c, 0x4e, + 0x49, 0x4d, 0x56, 0x02, 0xdb, 0x50, 0x40, 0xe7, 0xb6, 0x0c, 0x4e, 0x0b, + 0x00, 0x60, 0x0e, 0x91, 0xd6, 0x61, 0x42, 0x09, 0x35, 0x00, 0x5e, 0xac, + 0x31, 0xd7, 0xbb, 0xe1, 0x8b, 0x07, 0x80, 0x3c, 0x23, 0xaa, 0xee, 0x9e, + 0x22, 0xc7, 0xa1, 0x00, 0x4c, 0x06, 0x4a, 0x70, 0x76, 0xcd, 0xad, 0x18, + 0x08, 0x4b, 0xca, 0x81, 0x03, 0x3a, 0x45, 0xc6, 0xa4, 0x00, 0x7b, 0xdc, + 0xa8, 0x67, 0xc1, 0x46, 0x32, 0x44, 0x00, 0x7f, 0xcf, 0xa0, 0x10, 0x00, + 0x00, 0x2c, 0x9c, 0x00, 0x7c, 0x00, 0x00, 0x04, 0x83, 0xb4, 0x54, 0x03, + 0x00, 0x00, 0x20, 0x94, 0xc2, 0xbf, 0x8d, 0x53, 0x87, 0x00, 0xde, 0x84, + 0x0a, 0x15, 0x71, 0xa3, 0x10, 0x03, 0x00, 0x11, 0x00, 0x00, 0x2b, 0x64, + 0x00, 0x00, 0x4f, 0x00, 0x57, 0x21, 0x19, 0x3d, 0xa5, 0x75, 0x53, 0x72, + 0x00, 0xd9, 0xbd, 0xcb, 0xe4, 0xea, 0xd8, 0x05, 0x00, 0x20, 0x00, 0x00, + 0xe9, 0x00, 0x00, 0xae, 0xeb, 0xe0, 0x00, 0xcc, 0xc4, 0xbe, 0x53, 0x53, + 0x6a, 0xa9, 0x74, 0x04, 0x43, 0x2c, 0x47, 0xd4, 0x04, 0x45, 0x1c, 0xdf, + 0x00, 0x67, 0x27, 0x30, 0xba, 0x93, 0x65, 0x55, 0x85, 0x24, 0xd5, 0x3b, + 0x91, 0xce, 0x1a, 0x45, 0x78, 0xb8, 0x00, 0x07, 0x41, 0xd3, 0x9f, 0x29, + 0xa7, 0x90, 0x77, 0x01, 0x69, 0xd2, 0x63, 0x01, 0x07, 0xb2, 0x33, 0x44, + 0x00, 0x0d, 0xb3, 0x39, 0x2a, 0xe2, 0xb9, 0x16, 0x38, 0x00, 0x9d, 0x6d, + 0x82, 0x00, 0x73, 0xe8, 0x98, 0x26, 0x20, 0x86, 0x6b, 0x44, 0x6e, 0x62, + 0x00, 0x1d, 0xdd, 0x00, 0x5a, 0x00, 0x01, 0x08, 0x03, 0x03, 0x00, 0x00, + 0x05, 0x9a, 0xec, 0x52, 0x31, 0x92, 0x44, 0x18, 0x09, 0x20, 0x8e, 0x8a, + 0xa4, 0x0f, 0xd1, 0x95, 0x00, 0x02, 0x64, 0x3a, 0x44, 0x12, 0x25, 0xab, + 0x44, 0x5d, 0xc8, 0x64, 0x17, 0x5f, 0x13, 0x88, 0x1f, 0x03, 0xa2, 0x68, + 0xc8, 0x4f, 0x04, 0x3e, 0x58, 0x02, 0x1e, 0x9b, 0x08, 0xc9, 0x47, 0x04, + 0x03, 0x13, 0x02, 0x28, 0x36, 0x4f, 0xe0, 0x07, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The second image of the spider facing down. +// +//***************************************************************************** +const uint8_t g_pui8SpiderD2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 238, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x00, 0x02, 0x02, + 0x00, 0x00, 0x06, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x00, 0x00, 0x07, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x01, 0x04, 0x04, + 0x04, 0x04, 0x04, + 0x03, 0x05, 0x05, + 0x08, 0x05, 0x05, + 0x05, 0x06, 0x06, + 0x08, 0x06, 0x06, + 0x0a, 0x06, 0x06, + 0x04, 0x07, 0x07, + 0x0a, 0x07, 0x07, + 0x09, 0x08, 0x08, + 0x0b, 0x08, 0x08, + 0x09, 0x09, 0x09, + 0x08, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, + 0x0f, 0x0c, 0x0c, + 0x0c, 0x0d, 0x0d, + 0x0d, 0x0d, 0x0d, + 0x0e, 0x0d, 0x0d, + 0x0c, 0x0e, 0x0e, + 0x0f, 0x0e, 0x0e, + 0x0c, 0x10, 0x10, + 0x0d, 0x10, 0x10, + 0x0e, 0x10, 0x10, + 0x0d, 0x11, 0x11, + 0x13, 0x11, 0x11, + 0x12, 0x12, 0x12, + 0x16, 0x12, 0x12, + 0x11, 0x13, 0x13, + 0x0f, 0x15, 0x15, + 0x14, 0x15, 0x15, + 0x15, 0x16, 0x16, + 0x17, 0x18, 0x18, + 0x17, 0x19, 0x19, + 0x19, 0x19, 0x19, + 0x15, 0x1c, 0x1c, + 0x18, 0x1c, 0x1c, + 0x1b, 0x1c, 0x1c, + 0x19, 0x1d, 0x1d, + 0x00, 0x00, 0x60, + 0x1e, 0x1d, 0x1d, + 0x20, 0x1b, 0x21, + 0x00, 0x00, 0x67, + 0x1a, 0x21, 0x21, + 0x24, 0x21, 0x21, + 0x26, 0x21, 0x21, + 0x21, 0x22, 0x22, + 0x17, 0x26, 0x26, + 0x28, 0x25, 0x25, + 0x1e, 0x22, 0x2f, + 0x25, 0x26, 0x26, + 0x27, 0x26, 0x26, + 0x2b, 0x26, 0x26, + 0x2b, 0x2b, 0x2b, + 0x2f, 0x2b, 0x2b, + 0x12, 0x00, 0x8f, + 0x2c, 0x2d, 0x2d, + 0x09, 0x01, 0x93, + 0x30, 0x2e, 0x2e, + 0x04, 0x03, 0x93, + 0x34, 0x2e, 0x2e, + 0x30, 0x2f, 0x2f, + 0x00, 0x00, 0xa2, + 0x00, 0x00, 0xa4, + 0x30, 0x32, 0x32, + 0x0d, 0x00, 0xa2, + 0x00, 0x00, 0xb0, + 0x06, 0x04, 0xa7, + 0x38, 0x35, 0x35, + 0x2d, 0x37, 0x37, + 0x00, 0x00, 0xb4, + 0x31, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x01, 0x01, 0xb5, + 0x08, 0x0a, 0xa1, + 0x33, 0x39, 0x39, + 0x3c, 0x38, 0x38, + 0x3d, 0x38, 0x38, + 0x3f, 0x38, 0x38, + 0x25, 0x21, 0x70, + 0x1c, 0x17, 0x87, + 0x3b, 0x3b, 0x3b, + 0x0e, 0x0e, 0xa7, + 0x21, 0x1b, 0x88, + 0x3c, 0x3e, 0x3e, + 0x22, 0x2a, 0x6f, + 0x3d, 0x3e, 0x3e, + 0x3b, 0x40, 0x40, + 0x3d, 0x41, 0x41, + 0x16, 0x15, 0xa6, + 0x41, 0x42, 0x42, + 0x41, 0x43, 0x43, + 0x49, 0x44, 0x44, + 0x41, 0x47, 0x47, + 0x24, 0x18, 0xaf, + 0x44, 0x47, 0x47, + 0x32, 0x33, 0x77, + 0x47, 0x49, 0x49, + 0x47, 0x4a, 0x4a, + 0x48, 0x4b, 0x4b, + 0x25, 0x24, 0xa5, + 0x45, 0x4c, 0x4c, + 0x29, 0x20, 0xb2, + 0x4b, 0x4e, 0x4e, + 0x49, 0x4f, 0x4f, + 0x26, 0x26, 0xad, + 0x4b, 0x51, 0x51, + 0x53, 0x50, 0x51, + 0x4c, 0x52, 0x52, + 0x50, 0x52, 0x52, + 0x53, 0x55, 0x55, + 0x5e, 0x55, 0x55, + 0x57, 0x56, 0x56, + 0x53, 0x57, 0x57, + 0x50, 0x59, 0x59, + 0x51, 0x49, 0x79, + 0x62, 0x5a, 0x5a, + 0x60, 0x5c, 0x5c, + 0x59, 0x5e, 0x5e, + 0x57, 0x5f, 0x5f, + 0x5b, 0x61, 0x61, + 0x54, 0x53, 0x89, + 0x68, 0x66, 0x66, + 0x4d, 0x4b, 0xaf, + 0x69, 0x6d, 0x6d, + 0x66, 0x6e, 0x6e, + 0x6d, 0x6e, 0x6e, + 0x68, 0x6f, 0x6f, + 0x6e, 0x6f, 0x6f, + 0x53, 0x53, 0xb7, + 0x71, 0x71, 0x71, + 0x75, 0x71, 0x71, + 0x5f, 0x5c, 0xab, + 0x76, 0x74, 0x74, + 0x74, 0x77, 0x77, + 0x70, 0x77, 0x7f, + 0x80, 0x7e, 0x7e, + 0x82, 0x7e, 0x7e, + 0x7f, 0x7f, 0x7f, + 0x7f, 0x80, 0x80, + 0x88, 0x7f, 0x7f, + 0x80, 0x83, 0x83, + 0x8b, 0x86, 0x86, + 0x86, 0x88, 0x88, + 0x88, 0x88, 0x88, + 0x8e, 0x88, 0x88, + 0x8c, 0x8b, 0x8b, + 0x88, 0x8c, 0x8c, + 0x91, 0x8b, 0x8b, + 0x83, 0x7a, 0xc1, + 0x95, 0x90, 0x90, + 0x98, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x8e, 0x92, 0x95, + 0x99, 0x94, 0x94, + 0x84, 0x88, 0xb7, + 0x98, 0x98, 0x98, + 0x94, 0x9b, 0x9a, + 0x96, 0x9b, 0x9b, + 0x9f, 0x9d, 0x9d, + 0xa5, 0xa2, 0xa4, + 0xa4, 0xa5, 0xa5, + 0xa7, 0xa5, 0xa5, + 0xa3, 0xa6, 0xa6, + 0xab, 0xa7, 0xa7, + 0xb7, 0xa6, 0xa6, + 0xa8, 0xa8, 0xa8, + 0xa3, 0xa9, 0xa9, + 0xa5, 0xac, 0xac, + 0xb0, 0xac, 0xac, + 0xac, 0xae, 0xae, + 0xad, 0xae, 0xae, + 0xaf, 0xb2, 0xb2, + 0xb2, 0xb5, 0xb5, + 0xb6, 0xb6, 0xb6, + 0xb5, 0xb7, 0xb7, + 0xb9, 0xb8, 0xb8, + 0xae, 0xba, 0xba, + 0xad, 0xae, 0xd6, + 0xbe, 0xba, 0xba, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xb5, 0xd1, + 0xbc, 0xc0, 0xc0, + 0xc1, 0xc3, 0xc3, + 0xbd, 0xc4, 0xc4, + 0xc0, 0xc5, 0xc5, + 0xc4, 0xc5, 0xc5, + 0xc7, 0xc8, 0xc8, + 0xc9, 0xc8, 0xc8, + 0xc3, 0xc9, 0xc9, + 0xca, 0xc9, 0xc9, + 0xca, 0xcb, 0xcb, + 0xc2, 0xcc, 0xcc, + 0xc8, 0xcc, 0xcc, + 0xce, 0xcc, 0xcc, + 0xc8, 0xcd, 0xcd, + 0xd3, 0xcc, 0xcc, + 0xd4, 0xcc, 0xcc, + 0xd1, 0xcd, 0xcd, + 0xd3, 0xcf, 0xcf, + 0xcd, 0xd0, 0xd0, + 0xd0, 0xd0, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd0, 0xd3, 0xd3, + 0xc8, 0xd4, 0xd4, + 0xd5, 0xd5, 0xd5, + 0xe3, 0xdc, 0xdc, + 0xd8, 0xdd, 0xe1, + 0xdd, 0xde, 0xde, + 0xe3, 0xdf, 0xdf, + 0xd8, 0xe2, 0xe2, + 0xe4, 0xe2, 0xe2, + 0xe3, 0xe5, 0xe5, + 0xe3, 0xe6, 0xe6, + 0xe5, 0xe7, 0xe7, + 0xe5, 0xe9, 0xe9, + 0xec, 0xea, 0xea, + 0xe5, 0xeb, 0xeb, + 0xee, 0xeb, 0xeb, + 0xf1, 0xed, 0xed, + 0xf4, 0xed, 0xed, + 0xf0, 0xee, 0xee, + 0xf4, 0xf1, 0xf1, + 0xf5, 0xf7, 0xf7, + 0xfa, 0xf7, 0xf7, + 0xfc, 0xfb, 0xfb, + 0xfd, 0xfc, 0xfc, + + 0xe0, 0x07, 0x07, 0x07, 0x00, 0x00, 0x12, 0xb1, 0x03, 0xc0, 0x07, 0x07, + 0x00, 0x00, 0x02, 0x97, 0xed, 0x48, 0xc0, 0x4f, 0x4f, 0x00, 0x02, 0x79, + 0xe9, 0xda, 0x8f, 0xc0, 0x4f, 0x4f, 0x02, 0x7e, 0xc5, 0x6f, 0x80, 0xc0, + 0xa4, 0x01, 0x08, 0x21, 0x14, 0x04, 0x07, 0x7a, 0x8c, 0x00, 0x1b, 0x00, + 0x24, 0xe3, 0x3f, 0x2f, 0x5b, 0x5f, 0x00, 0x34, 0x00, 0x00, 0xb0, 0xc3, + 0x96, 0x59, 0x23, 0x80, 0x2c, 0x08, 0x00, 0x37, 0x66, 0x03, 0xaf, 0x99, + 0x00, 0x6c, 0x51, 0x53, 0x5c, 0x0e, 0x2d, 0xe6, 0xbc, 0x02, 0xb5, 0xc9, + 0xd0, 0xb7, 0xa6, 0x7d, 0x2a, 0x0c, 0x00, 0xb6, 0xe7, 0x40, 0x50, 0xdb, + 0x56, 0x4d, 0x49, 0x06, 0x4e, 0x3c, 0x89, 0xe5, 0x2e, 0x72, 0x52, 0x00, + 0x00, 0x07, 0x8b, 0xe1, 0xbb, 0xd7, 0x31, 0xac, 0x5e, 0x00, 0x35, 0x09, + 0x42, 0x61, 0xd6, 0x91, 0x0e, 0x60, 0x40, 0x0b, 0x34, 0x03, 0x81, 0xca, + 0x4b, 0x18, 0xad, 0x00, 0xcd, 0x76, 0x70, 0x4a, 0x06, 0x4c, 0xa1, 0xc7, + 0x04, 0x22, 0x9e, 0xee, 0xaa, 0x23, 0x3b, 0x7c, 0x9c, 0x00, 0x2c, 0x00, + 0x00, 0x10, 0xa0, 0xcf, 0x7f, 0x44, 0x00, 0x32, 0x46, 0xc1, 0x67, 0xa8, + 0xdc, 0x7b, 0xa4, 0x20, 0xc6, 0x45, 0x3a, 0x11, 0x03, 0x10, 0xa3, 0x71, + 0x00, 0x15, 0x0a, 0x84, 0xde, 0x87, 0x53, 0x8d, 0xbf, 0x00, 0xc2, 0x94, + 0x20, 0x00, 0x03, 0x54, 0xb4, 0x83, 0x40, 0x04, 0x32, 0x05, 0xd8, 0xea, + 0xe4, 0xcb, 0xbd, 0x00, 0xd9, 0x72, 0x53, 0x75, 0xa5, 0x3d, 0x19, 0x21, + 0x02, 0x57, 0x4f, 0x00, 0x00, 0x64, 0x2b, 0x42, 0x04, 0x00, 0xd4, 0x47, + 0x2c, 0x43, 0x74, 0xa9, 0x6a, 0x53, 0x01, 0x53, 0xbe, 0xc4, 0xcc, 0xe0, + 0xeb, 0xae, 0x62, 0x80, 0x42, 0x1a, 0xce, 0x1c, 0x00, 0x00, 0x3b, 0xd5, + 0x00, 0x85, 0x55, 0x65, 0x93, 0xba, 0x30, 0x27, 0x67, 0x60, 0xdf, 0x91, + 0x2b, 0x33, 0xb2, 0x07, 0x01, 0x63, 0x00, 0xd2, 0x69, 0x77, 0x90, 0xa7, + 0x29, 0x9f, 0xd3, 0x08, 0x41, 0x07, 0xb8, 0x78, 0x45, 0x6b, 0x86, 0x26, + 0x00, 0x98, 0xe8, 0x73, 0x00, 0x82, 0x6d, 0x9d, 0x38, 0x01, 0x16, 0xb9, + 0xe2, 0x2a, 0x39, 0xb3, 0x0d, 0x3c, 0x00, 0x92, 0x31, 0x52, 0xec, 0x9a, + 0x00, 0x00, 0x03, 0x00, 0x03, 0x08, 0x01, 0x00, 0x5a, 0xdd, 0x1d, 0x00, + 0x20, 0x62, 0x6e, 0x44, 0x3a, 0x02, 0x00, 0x95, 0xd1, 0x4b, 0x0f, 0xa4, + 0x8a, 0x8e, 0x61, 0x18, 0x44, 0x11, 0x13, 0x17, 0xc8, 0x5d, 0x44, 0xab, + 0x25, 0x67, 0x1b, 0x26, 0x68, 0xa2, 0x03, 0x1f, 0x88, 0x4f, 0x04, 0x08, + 0x26, 0x9b, 0x1e, 0x02, 0x58, 0x3e, 0x47, 0x05, 0x36, 0x4f, 0x28, 0x02, + 0x13, 0x03, 0x47, 0x07, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The first image of the spider facing up and left. +// +//***************************************************************************** +const uint8_t g_pui8SpiderUL1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0b, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0c, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1f, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x1a, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x21, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x13, 0x00, 0x86, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2c, 0x2f, 0x39, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x2f, 0x35, 0x35, + 0x34, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x09, 0x09, 0xa2, + 0x01, 0x01, 0xb5, + 0x07, 0x04, 0xad, + 0x38, 0x37, 0x37, + 0x0b, 0x0a, 0xa0, + 0x33, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x37, 0x3a, 0x3a, + 0x1c, 0x15, 0x8d, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3e, 0x3a, 0x3a, + 0x36, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, + 0x0b, 0x0b, 0xac, + 0x3c, 0x3c, 0x3c, + 0x22, 0x25, 0x74, + 0x14, 0x0b, 0xaf, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3e, 0x40, 0x40, + 0x3f, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4e, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x46, 0x47, 0x47, + 0x4a, 0x47, 0x46, + 0x4b, 0x47, 0x47, + 0x43, 0x48, 0x48, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x4f, 0x53, 0x53, + 0x55, 0x53, 0x53, + 0x57, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x58, 0x58, + 0x56, 0x5b, 0x5b, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x5e, 0x5e, 0x5e, + 0x43, 0x3c, 0xac, + 0x5b, 0x63, 0x63, + 0x65, 0x63, 0x63, + 0x63, 0x64, 0x64, + 0x67, 0x64, 0x64, + 0x66, 0x65, 0x65, + 0x69, 0x66, 0x66, + 0x5d, 0x69, 0x69, + 0x6a, 0x68, 0x68, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6e, 0x6e, + 0x54, 0x54, 0xb6, + 0x71, 0x73, 0x74, + 0x6d, 0x75, 0x75, + 0x71, 0x75, 0x75, + 0x7a, 0x77, 0x77, + 0x7b, 0x78, 0x78, + 0x76, 0x7a, 0x7a, + 0x7d, 0x7b, 0x7b, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x7d, 0x7d, 0x7d, + 0x75, 0x75, 0x90, + 0x7d, 0x7e, 0x7e, + 0x83, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x89, 0x89, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x91, 0x91, + 0x8f, 0x93, 0x93, + 0x85, 0x7f, 0xc2, + 0x90, 0x8c, 0xa8, + 0x95, 0x95, 0x95, + 0x93, 0x97, 0x97, + 0x94, 0x97, 0x97, + 0x88, 0x8a, 0xba, + 0x94, 0x99, 0x99, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa3, 0xa3, 0xa3, + 0xa7, 0xa3, 0xa4, + 0xa6, 0xa6, 0xa6, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb6, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcc, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xca, 0xcb, 0xcb, + 0xcb, 0xcc, 0xcc, + 0xca, 0xce, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd3, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd6, 0xd6, 0xdb, + 0xd9, 0xd9, 0xd9, + 0xd7, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe3, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe1, 0xe1, 0xe1, + 0xe5, 0xe3, 0xe3, + 0xe7, 0xe3, 0xe3, + 0xe5, 0xe7, 0xe7, + 0xe9, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf6, 0xf6, 0xf6, + + 0xf3, 0x07, 0x07, 0x07, 0x07, 0x00, 0x79, 0x07, 0x05, 0x09, 0x2e, 0x6c, + 0x27, 0x05, 0x01, 0xa5, 0x12, 0x3f, 0x80, 0x04, 0x01, 0x2a, 0xa3, 0xb3, + 0x6a, 0x15, 0x00, 0x2c, 0xa8, 0x69, 0x19, 0x1b, 0x27, 0x02, 0x07, 0x50, + 0x05, 0xc9, 0xd4, 0x21, 0x83, 0xbf, 0x41, 0x95, 0x45, 0x40, 0x06, 0x05, + 0x5a, 0xeb, 0x29, 0x1f, 0xe8, 0x5b, 0x11, 0x00, 0x44, 0x99, 0x44, 0x05, + 0x87, 0x12, 0x02, 0x00, 0x02, 0x03, 0x2d, 0xe3, 0x20, 0x82, 0xea, 0x9a, + 0x11, 0x00, 0x9c, 0x7a, 0x44, 0x00, 0x85, 0x72, 0x02, 0x00, 0x3e, 0x98, + 0x1e, 0xd9, 0x68, 0xd3, 0x63, 0x04, 0x01, 0x00, 0xc5, 0x41, 0x00, 0x00, + 0x02, 0x62, 0x21, 0x00, 0x3d, 0xbe, 0x0b, 0x00, 0x00, 0x66, 0x71, 0xb5, + 0x00, 0x3f, 0xd2, 0xc7, 0x3c, 0x02, 0x34, 0x7d, 0xe1, 0x04, 0x26, 0x00, + 0x03, 0x88, 0x8c, 0x41, 0x17, 0xcd, 0x00, 0x43, 0x00, 0x00, 0x5c, 0xb1, + 0x55, 0x56, 0x93, 0x00, 0x94, 0x97, 0xca, 0xe2, 0xe7, 0xd5, 0x0c, 0x02, + 0x10, 0x84, 0xb2, 0x0d, 0x41, 0x00, 0xbf, 0xba, 0x6d, 0x00, 0x52, 0x49, + 0x7e, 0x61, 0x4a, 0x64, 0xd6, 0xad, 0x00, 0x5f, 0x18, 0x02, 0x06, 0x00, + 0x73, 0xd0, 0x2b, 0x80, 0x4a, 0x00, 0xa1, 0xe9, 0xd7, 0xbd, 0xb8, 0xc6, + 0x00, 0x86, 0x4b, 0x4e, 0x80, 0xaa, 0xe0, 0xde, 0xc0, 0x08, 0x91, 0x4c, + 0xdf, 0x7b, 0x4a, 0x37, 0x1e, 0x28, 0x00, 0x32, 0x11, 0x00, 0x00, 0x8f, + 0xdc, 0xb0, 0x48, 0x00, 0x31, 0x39, 0x6e, 0x78, 0xa9, 0xe5, 0xec, 0xc4, + 0x40, 0x0e, 0x42, 0x3b, 0xa6, 0x90, 0x16, 0x00, 0x00, 0x00, 0x59, 0xda, + 0x8d, 0xcf, 0x47, 0x23, 0x13, 0x3a, 0x04, 0x60, 0x09, 0x25, 0x9e, 0x53, + 0x4a, 0x00, 0x00, 0x00, 0x10, 0x8a, 0xc4, 0x6f, 0x35, 0xd1, 0x76, 0x7c, + 0x01, 0xbc, 0x6b, 0x40, 0x19, 0x36, 0x4d, 0x1a, 0x5c, 0x80, 0x2b, 0x54, + 0xce, 0xdd, 0xb7, 0x05, 0x92, 0xac, 0x03, 0xa0, 0x5e, 0x42, 0x4a, 0x4f, + 0x33, 0x47, 0x01, 0x00, 0x38, 0xd8, 0x46, 0x00, 0x9f, 0xab, 0x8e, 0xb9, + 0x0c, 0x67, 0x51, 0x58, 0x1d, 0x47, 0x02, 0x22, 0x08, 0x00, 0x00, 0xa7, + 0xb4, 0x2c, 0xdb, 0x45, 0x30, 0x0f, 0xc0, 0x4f, 0x02, 0x14, 0x57, 0x7f, + 0x96, 0xcb, 0xc2, 0x18, 0x05, 0xbb, 0x9d, 0x57, 0x0b, 0x0a, 0x89, 0x9b, + 0x00, 0xaf, 0xb6, 0xcc, 0xc3, 0x05, 0x5d, 0xd4, 0x24, 0xc0, 0x3f, 0x07, + 0x07, 0x1c, 0x00, 0x0e, 0xc1, 0xa2, 0x60, 0x02, 0x3f, 0x06, 0x21, 0x74, + 0xa4, 0xc8, 0xe4, 0x30, 0xe6, 0x2f, 0x47, 0x06, 0x65, 0x75, 0x77, 0x70, + 0x1e, 0x8b, 0xae, 0x81, 0x47, 0x07, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The second image of the spider facing up and left. +// +//***************************************************************************** +const uint8_t g_pui8SpiderUL2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0a, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0d, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x0f, 0x12, 0x12, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1e, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x19, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x22, 0x1f, 0x1f, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x14, 0x00, 0x85, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2d, 0x2f, 0x38, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x34, 0x34, 0x35, + 0x2f, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x01, 0xb4, + 0x01, 0x00, 0xb6, + 0x09, 0x09, 0xa2, + 0x0a, 0x0a, 0xa0, + 0x07, 0x04, 0xad, + 0x38, 0x37, 0x37, + 0x33, 0x38, 0x38, + 0x36, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x1b, 0x15, 0x8d, + 0x37, 0x3a, 0x3a, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3d, 0x3a, 0x3a, + 0x37, 0x3b, 0x3b, + 0x3a, 0x3b, 0x3b, + 0x0b, 0x0b, 0xad, + 0x23, 0x24, 0x74, + 0x3c, 0x3c, 0x3c, + 0x14, 0x0b, 0xae, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3f, 0x40, 0x40, + 0x3e, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4d, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x43, 0x47, 0x47, + 0x45, 0x47, 0x47, + 0x4a, 0x47, 0x47, + 0x4b, 0x47, 0x47, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x55, 0x52, 0x52, + 0x4f, 0x53, 0x53, + 0x58, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x59, 0x59, + 0x56, 0x5c, 0x5c, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x44, 0x3c, 0xac, + 0x5e, 0x5f, 0x5f, + 0x5c, 0x63, 0x63, + 0x63, 0x63, 0x63, + 0x65, 0x64, 0x64, + 0x68, 0x65, 0x65, + 0x66, 0x66, 0x66, + 0x69, 0x66, 0x66, + 0x6a, 0x67, 0x68, + 0x5d, 0x69, 0x69, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6f, 0x6f, + 0x54, 0x54, 0xb6, + 0x71, 0x74, 0x74, + 0x6d, 0x75, 0x75, + 0x72, 0x75, 0x75, + 0x79, 0x77, 0x77, + 0x7b, 0x77, 0x77, + 0x76, 0x7a, 0x7a, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x75, 0x75, 0x8f, + 0x7d, 0x7d, 0x7d, + 0x7d, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x83, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x8a, 0x8a, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x90, 0x90, + 0x8f, 0x93, 0x93, + 0x84, 0x7e, 0xc2, + 0x8f, 0x8c, 0xa7, + 0x95, 0x95, 0x95, + 0x93, 0x96, 0x96, + 0x93, 0x97, 0x97, + 0x93, 0x99, 0x99, + 0x88, 0x8b, 0xba, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa7, 0xa3, 0xa4, + 0xa3, 0xa4, 0xa4, + 0xa5, 0xa5, 0xa5, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb6, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb6, 0xb6, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcd, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xcb, 0xcb, 0xcb, + 0xca, 0xce, 0xd0, + 0xcb, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd4, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd7, 0xd6, 0xdb, + 0xd7, 0xda, 0xda, + 0xd9, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe2, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe0, 0xe1, 0xe1, + 0xe5, 0xe4, 0xe4, + 0xe7, 0xe4, 0xe4, + 0xe5, 0xe7, 0xe7, + 0xea, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf7, 0xf6, 0xf6, + + 0xf4, 0x07, 0x07, 0x07, 0x01, 0x04, 0x03, 0x38, 0x3c, 0xc0, 0x07, 0x04, + 0x06, 0x88, 0x87, 0x3e, 0x17, 0x00, 0x0c, 0x00, 0x1f, 0xa6, 0x10, 0x3f, + 0x04, 0x12, 0x74, 0x01, 0xbe, 0xce, 0xbf, 0xa1, 0x29, 0x91, 0x8b, 0x47, + 0x80, 0x06, 0x0b, 0x44, 0xba, 0xe9, 0x33, 0x16, 0xc5, 0x58, 0x55, 0x39, + 0x0a, 0x1f, 0x03, 0x6e, 0xd7, 0x11, 0x01, 0x00, 0x70, 0xcf, 0x39, 0x00, + 0x14, 0x89, 0x44, 0x20, 0x2f, 0x01, 0x04, 0x52, 0xbd, 0x00, 0x00, 0x36, + 0x04, 0xde, 0xd8, 0x23, 0x59, 0x9b, 0x44, 0x6d, 0x2b, 0x80, 0x02, 0x66, + 0x5d, 0x4a, 0xb8, 0x00, 0x5a, 0xd1, 0x04, 0xb7, 0x47, 0x08, 0x80, 0xaf, + 0x44, 0x28, 0xa2, 0x00, 0x07, 0x00, 0x01, 0x3f, 0x73, 0xb1, 0x7f, 0xc7, + 0x00, 0x90, 0xda, 0x77, 0x05, 0x00, 0x00, 0x97, 0xb5, 0x80, 0x44, 0x05, + 0xb3, 0x51, 0x00, 0x03, 0x99, 0xb6, 0x00, 0x56, 0x62, 0x86, 0xdc, 0x8f, + 0x7d, 0x93, 0xa0, 0x02, 0xa7, 0xcc, 0xcd, 0x07, 0x22, 0x67, 0x2a, 0x6b, + 0x00, 0xca, 0x5b, 0x2e, 0x1e, 0x40, 0x57, 0x4b, 0x4d, 0x00, 0xb0, 0xd0, + 0xbb, 0xac, 0xab, 0xb4, 0xc1, 0xc3, 0x10, 0x1c, 0x75, 0x76, 0x42, 0x15, + 0xd4, 0xeb, 0xe3, 0x00, 0xd9, 0xd2, 0x94, 0x65, 0x4c, 0x49, 0x48, 0x6c, + 0x00, 0x9f, 0x8e, 0x2d, 0x05, 0x05, 0x00, 0xa4, 0x78, 0x80, 0x42, 0x00, + 0x22, 0x2a, 0x21, 0x69, 0xc8, 0x95, 0x00, 0xd6, 0x81, 0x32, 0x24, 0x41, + 0x5f, 0xb9, 0xdb, 0x00, 0xbc, 0x5e, 0x0e, 0xc9, 0x72, 0x00, 0x00, 0x7b, + 0x00, 0xa5, 0xa8, 0x84, 0x20, 0x83, 0xd3, 0x3d, 0x98, 0x00, 0xad, 0xaa, + 0x3a, 0x13, 0x19, 0x43, 0x68, 0x45, 0x00, 0x9d, 0xd4, 0xc2, 0xe4, 0x8c, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x6a, 0xbf, 0xe8, 0xea, 0x64, 0x02, 0xcb, + 0x00, 0x61, 0xe0, 0x6f, 0x3b, 0x37, 0x4b, 0x4f, 0x30, 0x06, 0x00, 0x25, + 0xa3, 0xe6, 0xae, 0x41, 0x29, 0x5c, 0x00, 0x9d, 0x04, 0x35, 0xe2, 0x18, + 0xdd, 0x79, 0x60, 0x00, 0x4e, 0x50, 0x58, 0x0f, 0x00, 0x00, 0x02, 0x31, + 0x60, 0x82, 0x44, 0x11, 0x7e, 0xe7, 0x02, 0xc0, 0xa9, 0x0c, 0x09, 0x1a, + 0x34, 0x1d, 0x77, 0x29, 0x46, 0x9c, 0x01, 0xc6, 0xe1, 0xd5, 0x06, 0x92, + 0xe5, 0x26, 0x5f, 0x80, 0x12, 0x1b, 0x96, 0x9a, 0x7a, 0x42, 0x27, 0x0c, + 0x0c, 0x00, 0x53, 0xec, 0x9e, 0x47, 0x07, 0x00, 0x02, 0x0c, 0x71, 0xdf, + 0xc4, 0x54, 0x47, 0x07, 0x03, 0x85, 0x18, 0xd1, 0x7c, 0x0e, 0x4f, 0x07, + 0x02, 0x8a, 0xb2, 0x60, 0x2c, 0x57, 0x0f, 0x00, 0x00, 0x63, 0x8d, 0x0d, + 0xf8, 0x4f, 0x07, 0x77, 0x2f, 0x06, +}; + +//***************************************************************************** +// +// The first image of the spider facing up and right. +// +//***************************************************************************** +const uint8_t g_pui8SpiderUR1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0a, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0d, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x0f, 0x12, 0x12, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1e, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x19, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x22, 0x1f, 0x1f, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x14, 0x00, 0x85, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2d, 0x2f, 0x38, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x34, 0x34, 0x35, + 0x2f, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x01, 0xb4, + 0x01, 0x00, 0xb6, + 0x09, 0x09, 0xa2, + 0x0a, 0x0a, 0xa0, + 0x07, 0x04, 0xad, + 0x38, 0x37, 0x37, + 0x33, 0x38, 0x38, + 0x36, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x1b, 0x15, 0x8d, + 0x37, 0x3a, 0x3a, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3d, 0x3a, 0x3a, + 0x37, 0x3b, 0x3b, + 0x3a, 0x3b, 0x3b, + 0x0b, 0x0b, 0xad, + 0x23, 0x24, 0x74, + 0x3c, 0x3c, 0x3c, + 0x14, 0x0b, 0xae, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3f, 0x40, 0x40, + 0x3e, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4d, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x43, 0x47, 0x47, + 0x45, 0x47, 0x47, + 0x4a, 0x47, 0x47, + 0x4b, 0x47, 0x47, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x55, 0x52, 0x52, + 0x4f, 0x53, 0x53, + 0x58, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x59, 0x59, + 0x56, 0x5c, 0x5c, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x44, 0x3c, 0xac, + 0x5e, 0x5f, 0x5f, + 0x5c, 0x63, 0x63, + 0x63, 0x63, 0x63, + 0x65, 0x64, 0x64, + 0x68, 0x65, 0x65, + 0x66, 0x66, 0x66, + 0x69, 0x66, 0x66, + 0x6a, 0x67, 0x68, + 0x5d, 0x69, 0x69, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6f, 0x6f, + 0x54, 0x54, 0xb6, + 0x71, 0x74, 0x74, + 0x6d, 0x75, 0x75, + 0x72, 0x75, 0x75, + 0x79, 0x77, 0x77, + 0x7b, 0x77, 0x77, + 0x76, 0x7a, 0x7a, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x75, 0x75, 0x8f, + 0x7d, 0x7d, 0x7d, + 0x7d, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x83, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x8a, 0x8a, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x90, 0x90, + 0x8f, 0x93, 0x93, + 0x84, 0x7e, 0xc2, + 0x8f, 0x8c, 0xa7, + 0x95, 0x95, 0x95, + 0x93, 0x96, 0x96, + 0x93, 0x97, 0x97, + 0x93, 0x99, 0x99, + 0x88, 0x8b, 0xba, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa7, 0xa3, 0xa4, + 0xa3, 0xa4, 0xa4, + 0xa5, 0xa5, 0xa5, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb6, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb6, 0xb6, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcd, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xcb, 0xcb, 0xcb, + 0xca, 0xce, 0xd0, + 0xcb, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd4, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd7, 0xd6, 0xdb, + 0xd7, 0xda, 0xda, + 0xd9, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe2, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe0, 0xe1, 0xe1, + 0xe5, 0xe4, 0xe4, + 0xe7, 0xe4, 0xe4, + 0xe5, 0xe7, 0xe7, + 0xea, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf7, 0xf6, 0xf6, + + 0xf2, 0x07, 0x07, 0x07, 0x05, 0x3c, 0x38, 0x03, 0x04, 0xc0, 0x07, 0x04, + 0x10, 0xa6, 0x1f, 0x00, 0x00, 0x17, 0x0c, 0x3e, 0x87, 0x88, 0x06, 0x3f, + 0x03, 0x8b, 0x91, 0x01, 0x29, 0xa1, 0xbf, 0xce, 0xbe, 0x74, 0x12, 0x4f, + 0x20, 0x00, 0x0a, 0x01, 0x55, 0xc5, 0x16, 0x33, 0xe9, 0x18, 0xba, 0x44, + 0x0b, 0x57, 0x09, 0x89, 0x14, 0x00, 0x01, 0x39, 0xcf, 0x70, 0x00, 0x11, + 0xd7, 0x6e, 0x57, 0x80, 0x0b, 0x9b, 0x59, 0x23, 0xd8, 0xde, 0x36, 0x00, + 0x12, 0x00, 0xbd, 0x52, 0x44, 0x01, 0x2f, 0x04, 0xaf, 0x00, 0x80, 0x08, + 0x47, 0xb7, 0xd1, 0x5a, 0x00, 0xb8, 0x12, 0x4a, 0x5d, 0x66, 0x32, 0x2b, + 0x6d, 0x04, 0xb5, 0x00, 0x97, 0x00, 0x00, 0x05, 0x77, 0xda, 0x90, 0xc7, + 0x00, 0x7f, 0xb1, 0x73, 0x3f, 0x01, 0x00, 0x07, 0xa2, 0x40, 0x28, 0x11, + 0x67, 0x22, 0x07, 0xcd, 0xcc, 0xa7, 0x00, 0xa0, 0x93, 0x7d, 0x8f, 0xdc, + 0x86, 0x62, 0x56, 0x01, 0xb6, 0x99, 0x03, 0x00, 0x51, 0xb3, 0x05, 0x41, + 0x00, 0x76, 0x75, 0x1c, 0xc3, 0xc1, 0xb4, 0xab, 0xac, 0x00, 0xbb, 0xd0, + 0xb0, 0x4d, 0x4b, 0x57, 0x40, 0x1e, 0x08, 0x2e, 0x5b, 0xca, 0x6b, 0x49, + 0x00, 0x78, 0xa4, 0x00, 0x00, 0x05, 0x05, 0x2d, 0x8e, 0x9f, 0x6c, 0x48, + 0x00, 0x49, 0x4c, 0x65, 0x94, 0xd2, 0xd9, 0xe3, 0xeb, 0x20, 0xd4, 0x15, + 0x42, 0x72, 0xc9, 0x0e, 0x5e, 0xbc, 0x00, 0xdb, 0xb9, 0x5f, 0x41, 0x24, + 0x32, 0x81, 0xd6, 0x02, 0x95, 0xc8, 0x69, 0x21, 0x2a, 0x22, 0x4a, 0x00, + 0x00, 0x8c, 0xe4, 0xc2, 0xd4, 0x9d, 0x45, 0x68, 0x43, 0x00, 0x19, 0x13, + 0x3a, 0xaa, 0xad, 0x98, 0x3d, 0xd3, 0x00, 0x83, 0x20, 0x84, 0xa8, 0xa5, + 0x7b, 0x00, 0x00, 0x00, 0xae, 0xe6, 0xa3, 0x25, 0x00, 0x30, 0x4f, 0x4b, + 0x00, 0x37, 0x3b, 0x6f, 0xe0, 0x61, 0xcb, 0x02, 0x64, 0x00, 0xea, 0xe8, + 0xbf, 0x6a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x82, 0x31, 0x02, 0x00, 0x00, + 0x0f, 0x58, 0x50, 0x00, 0x4e, 0x60, 0x79, 0xdd, 0x18, 0xe2, 0x35, 0x04, + 0x38, 0x9d, 0x5c, 0x59, 0x41, 0xd4, 0x1d, 0x34, 0x1a, 0x03, 0x09, 0xa9, + 0xc0, 0x02, 0xe7, 0x7e, 0x5f, 0x17, 0x00, 0x26, 0xe5, 0x92, 0x06, 0xd5, + 0xe1, 0xc6, 0x9c, 0x60, 0x46, 0x2f, 0x04, 0x9e, 0xec, 0x53, 0x00, 0x0c, + 0x03, 0x27, 0x42, 0x7a, 0x9a, 0x96, 0x1b, 0x37, 0x02, 0x06, 0x54, 0xc4, + 0xdf, 0x71, 0x02, 0x77, 0x2f, 0x00, 0x03, 0x00, 0x0e, 0x7c, 0xd1, 0x85, + 0x03, 0x3f, 0x07, 0x87, 0x01, 0x2c, 0xb2, 0x8a, 0x02, 0x3f, 0x07, 0x01, + 0x1e, 0x0d, 0x8d, 0x63, 0x47, 0x07, 0x77, 0x2f, +}; + +//***************************************************************************** +// +// The second image of the spider facing up and right. +// +//***************************************************************************** +const uint8_t g_pui8SpiderUR2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0b, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0c, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1f, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x1a, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x21, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x13, 0x00, 0x86, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2c, 0x2f, 0x39, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x2f, 0x35, 0x35, + 0x34, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x09, 0x09, 0xa2, + 0x01, 0x01, 0xb5, + 0x07, 0x04, 0xad, + 0x38, 0x37, 0x37, + 0x0b, 0x0a, 0xa0, + 0x33, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x37, 0x3a, 0x3a, + 0x1c, 0x15, 0x8d, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3e, 0x3a, 0x3a, + 0x36, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, + 0x0b, 0x0b, 0xac, + 0x3c, 0x3c, 0x3c, + 0x22, 0x25, 0x74, + 0x14, 0x0b, 0xaf, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3e, 0x40, 0x40, + 0x3f, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4e, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x46, 0x47, 0x47, + 0x4a, 0x47, 0x46, + 0x4b, 0x47, 0x47, + 0x43, 0x48, 0x48, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x4f, 0x53, 0x53, + 0x55, 0x53, 0x53, + 0x57, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x58, 0x58, + 0x56, 0x5b, 0x5b, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x5e, 0x5e, 0x5e, + 0x43, 0x3c, 0xac, + 0x5b, 0x63, 0x63, + 0x65, 0x63, 0x63, + 0x63, 0x64, 0x64, + 0x67, 0x64, 0x64, + 0x66, 0x65, 0x65, + 0x69, 0x66, 0x66, + 0x5d, 0x69, 0x69, + 0x6a, 0x68, 0x68, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6e, 0x6e, + 0x54, 0x54, 0xb6, + 0x71, 0x73, 0x74, + 0x6d, 0x75, 0x75, + 0x71, 0x75, 0x75, + 0x7a, 0x77, 0x77, + 0x7b, 0x78, 0x78, + 0x76, 0x7a, 0x7a, + 0x7d, 0x7b, 0x7b, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x7d, 0x7d, 0x7d, + 0x75, 0x75, 0x90, + 0x7d, 0x7e, 0x7e, + 0x83, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x89, 0x89, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x91, 0x91, + 0x8f, 0x93, 0x93, + 0x85, 0x7f, 0xc2, + 0x90, 0x8c, 0xa8, + 0x95, 0x95, 0x95, + 0x93, 0x97, 0x97, + 0x94, 0x97, 0x97, + 0x88, 0x8a, 0xba, + 0x94, 0x99, 0x99, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa3, 0xa3, 0xa3, + 0xa7, 0xa3, 0xa4, + 0xa6, 0xa6, 0xa6, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb6, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcc, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xca, 0xcb, 0xcb, + 0xcb, 0xcc, 0xcc, + 0xca, 0xce, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd3, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd6, 0xd6, 0xdb, + 0xd9, 0xd9, 0xd9, + 0xd7, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe3, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe1, 0xe1, 0xe1, + 0xe5, 0xe3, 0xe3, + 0xe7, 0xe3, 0xe3, + 0xe5, 0xe7, 0xe7, + 0xe9, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf6, 0xf6, 0xf6, + + 0xf7, 0x07, 0x07, 0x07, 0x05, 0x79, 0x07, 0x07, 0x02, 0x21, 0x12, 0xa5, + 0x01, 0x05, 0x27, 0x6c, 0x2e, 0x0f, 0x10, 0x00, 0x00, 0x1b, 0x01, 0x69, + 0xa8, 0x00, 0x15, 0x04, 0x6a, 0xb3, 0xa3, 0x2a, 0x01, 0x47, 0x00, 0x00, + 0x40, 0x95, 0x01, 0xbf, 0x83, 0x21, 0xd4, 0xc9, 0x50, 0x60, 0x07, 0x57, + 0x0a, 0x99, 0x44, 0x00, 0x5b, 0xe8, 0x0a, 0x1f, 0x29, 0xeb, 0x5a, 0x55, + 0x06, 0x15, 0x7a, 0x00, 0x9c, 0x00, 0x9a, 0xea, 0x82, 0x20, 0xe3, 0x2d, + 0x20, 0x03, 0x02, 0x32, 0x12, 0x87, 0x05, 0x00, 0x00, 0x40, 0x62, 0xa9, + 0x41, 0xc5, 0x00, 0x04, 0x63, 0xd3, 0x04, 0x68, 0xd9, 0x1e, 0x98, 0x3e, + 0x42, 0x72, 0x85, 0x80, 0x11, 0x8c, 0x88, 0x03, 0x00, 0x26, 0xe1, 0x7d, + 0x00, 0x34, 0x02, 0x3c, 0xc7, 0xd2, 0x3f, 0xb5, 0x71, 0x02, 0x66, 0x00, + 0x00, 0x0b, 0xbe, 0x3d, 0x11, 0x0d, 0x00, 0xb2, 0x84, 0x02, 0x0c, 0xd5, + 0xe7, 0xe2, 0xca, 0x00, 0x97, 0x94, 0x93, 0x56, 0x55, 0xb1, 0x5c, 0x00, + 0x08, 0x00, 0x43, 0xcd, 0x17, 0x41, 0x00, 0x2b, 0xd0, 0x00, 0x73, 0x00, + 0x06, 0x02, 0x18, 0x5f, 0xad, 0xd6, 0x00, 0x64, 0x4a, 0x61, 0x7e, 0x49, + 0x52, 0x6d, 0xba, 0x40, 0xbf, 0x4a, 0x00, 0x00, 0x7b, 0xdf, 0x4c, 0x91, + 0x00, 0xc0, 0xde, 0xe0, 0xaa, 0x80, 0x4e, 0x4b, 0x86, 0x02, 0xc6, 0xb8, + 0xbd, 0xd7, 0xe9, 0xa1, 0x44, 0x0e, 0x00, 0xc4, 0xec, 0xe5, 0xa9, 0x78, + 0x6e, 0x39, 0x31, 0x00, 0x48, 0xb0, 0xdc, 0x8f, 0x00, 0x00, 0x11, 0x32, + 0x10, 0x28, 0x1e, 0x37, 0x33, 0x53, 0x9e, 0x25, 0x09, 0x00, 0x60, 0x3a, + 0x13, 0x23, 0x47, 0xcf, 0x8d, 0xda, 0x01, 0x59, 0x00, 0x00, 0x16, 0x90, + 0xa6, 0x3b, 0x43, 0x80, 0x19, 0x1a, 0x4d, 0x36, 0x19, 0x40, 0x6b, 0xbc, + 0x00, 0x7c, 0x76, 0xd1, 0x35, 0x6f, 0xc4, 0x8a, 0x10, 0x80, 0x4e, 0x00, + 0x33, 0x4f, 0x4a, 0x42, 0x5e, 0xa0, 0x01, 0xac, 0x92, 0x05, 0xb7, 0xdd, + 0xce, 0x54, 0x57, 0x00, 0x00, 0x00, 0x1d, 0x58, 0x51, 0x67, 0xb9, 0x8e, + 0x03, 0xab, 0x9f, 0x00, 0x46, 0xd8, 0x38, 0x4f, 0x02, 0x00, 0x0f, 0x30, + 0x45, 0xdb, 0x2c, 0xb4, 0xa7, 0x00, 0x30, 0x08, 0x22, 0x4f, 0x05, 0x9d, + 0xbb, 0x05, 0xc2, 0x06, 0xcb, 0x96, 0x7f, 0x57, 0x14, 0x3f, 0x03, 0x24, + 0x00, 0xd4, 0x5d, 0x05, 0xc3, 0xcc, 0xb6, 0xaf, 0x9b, 0x30, 0x89, 0x0a, + 0x3f, 0x01, 0x02, 0xa2, 0xc1, 0x0e, 0x18, 0x00, 0x1c, 0x07, 0x6f, 0x26, + 0x2f, 0xe6, 0xe4, 0x0c, 0xc8, 0xa4, 0x74, 0x21, 0x47, 0x06, 0x81, 0xae, + 0x07, 0x8b, 0x70, 0x77, 0x75, 0x65, 0x47, 0x07, 0x77, 0x80, 0x2f, +}; + +//***************************************************************************** +// +// The first image of the spider facing down and left. +// +//***************************************************************************** +const uint8_t g_pui8SpiderDL1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0a, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0d, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x0f, 0x12, 0x12, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1e, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x19, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x22, 0x1f, 0x1f, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x14, 0x00, 0x85, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2d, 0x2f, 0x38, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x34, 0x34, 0x35, + 0x2f, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x01, 0xb4, + 0x01, 0x00, 0xb6, + 0x09, 0x09, 0xa2, + 0x0a, 0x0a, 0xa0, + 0x07, 0x04, 0xad, + 0x38, 0x37, 0x37, + 0x33, 0x38, 0x38, + 0x36, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x1b, 0x15, 0x8d, + 0x37, 0x3a, 0x3a, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3d, 0x3a, 0x3a, + 0x37, 0x3b, 0x3b, + 0x3a, 0x3b, 0x3b, + 0x0b, 0x0b, 0xad, + 0x23, 0x24, 0x74, + 0x3c, 0x3c, 0x3c, + 0x14, 0x0b, 0xae, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3f, 0x40, 0x40, + 0x3e, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4d, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x43, 0x47, 0x47, + 0x45, 0x47, 0x47, + 0x4a, 0x47, 0x47, + 0x4b, 0x47, 0x47, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x55, 0x52, 0x52, + 0x4f, 0x53, 0x53, + 0x58, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x59, 0x59, + 0x56, 0x5c, 0x5c, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x44, 0x3c, 0xac, + 0x5e, 0x5f, 0x5f, + 0x5c, 0x63, 0x63, + 0x63, 0x63, 0x63, + 0x65, 0x64, 0x64, + 0x68, 0x65, 0x65, + 0x66, 0x66, 0x66, + 0x69, 0x66, 0x66, + 0x6a, 0x67, 0x68, + 0x5d, 0x69, 0x69, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6f, 0x6f, + 0x54, 0x54, 0xb6, + 0x71, 0x74, 0x74, + 0x6d, 0x75, 0x75, + 0x72, 0x75, 0x75, + 0x79, 0x77, 0x77, + 0x7b, 0x77, 0x77, + 0x76, 0x7a, 0x7a, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x75, 0x75, 0x8f, + 0x7d, 0x7d, 0x7d, + 0x7d, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x83, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x8a, 0x8a, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x90, 0x90, + 0x8f, 0x93, 0x93, + 0x84, 0x7e, 0xc2, + 0x8f, 0x8c, 0xa7, + 0x95, 0x95, 0x95, + 0x93, 0x96, 0x96, + 0x93, 0x97, 0x97, + 0x93, 0x99, 0x99, + 0x88, 0x8b, 0xba, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa7, 0xa3, 0xa4, + 0xa3, 0xa4, 0xa4, + 0xa5, 0xa5, 0xa5, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb6, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb6, 0xb6, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcd, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xcb, 0xcb, 0xcb, + 0xca, 0xce, 0xd0, + 0xcb, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd4, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd7, 0xd6, 0xdb, + 0xd7, 0xda, 0xda, + 0xd9, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe2, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe0, 0xe1, 0xe1, + 0xe5, 0xe4, 0xe4, + 0xe7, 0xe4, 0xe4, + 0xe5, 0xe7, 0xe7, + 0xea, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf7, 0xf6, 0xf6, + + 0xf1, 0x07, 0x07, 0x07, 0x02, 0x63, 0x8d, 0x0d, 0x07, 0xc3, 0x07, 0x01, + 0x02, 0x8a, 0xb2, 0x2c, 0x3f, 0x07, 0x83, 0x01, 0x03, 0x85, 0xd1, 0x7c, + 0x0e, 0x37, 0x07, 0x01, 0x00, 0x00, 0x02, 0x71, 0xdf, 0xc4, 0x54, 0x3f, + 0x80, 0x02, 0x1b, 0x96, 0x9a, 0x7a, 0x42, 0x27, 0x0c, 0x0c, 0x00, 0x53, + 0xec, 0x9e, 0x47, 0x04, 0x46, 0x9c, 0x01, 0xc6, 0xe1, 0xd5, 0x06, 0x92, + 0xe5, 0x26, 0x47, 0x80, 0x07, 0x7e, 0xe7, 0x02, 0xc0, 0xa9, 0x09, 0x1a, + 0x30, 0x34, 0x1d, 0x2f, 0x01, 0x5c, 0x9d, 0x04, 0x35, 0x00, 0xe2, 0x18, + 0xdd, 0x79, 0x60, 0x4e, 0x50, 0x58, 0x02, 0x0f, 0x00, 0x00, 0x02, 0x31, + 0x82, 0x11, 0x10, 0x00, 0x6a, 0xbf, 0xe8, 0xea, 0x64, 0x02, 0xcb, 0x61, + 0x00, 0xe0, 0x6f, 0x3b, 0x37, 0x4b, 0x4f, 0x30, 0x00, 0x00, 0x25, 0xa3, + 0xe6, 0xae, 0x00, 0x00, 0x7b, 0xa5, 0x00, 0xa8, 0x84, 0x20, 0x83, 0xd3, + 0x3d, 0x98, 0xad, 0x00, 0xaa, 0x3a, 0x13, 0x19, 0x43, 0x68, 0x45, 0x9d, + 0x00, 0xd4, 0xc2, 0xe4, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, + 0x2a, 0x21, 0x69, 0xc8, 0x95, 0xd6, 0x00, 0x81, 0x32, 0x24, 0x41, 0x5f, + 0xb9, 0xdb, 0xbc, 0x08, 0x5e, 0x0e, 0xc9, 0x72, 0x42, 0x15, 0xd4, 0xeb, + 0x00, 0xe3, 0xd9, 0xd2, 0x94, 0x65, 0x4c, 0x49, 0x48, 0x00, 0x6c, 0x9f, + 0x8e, 0x2d, 0x05, 0x05, 0x00, 0xa4, 0x40, 0x78, 0x42, 0x6b, 0xca, 0x5b, + 0x2e, 0x1e, 0x40, 0x00, 0x57, 0x4b, 0x4d, 0xb0, 0xd0, 0xbb, 0xac, 0xab, + 0x02, 0xb4, 0xc1, 0xc3, 0x1c, 0x75, 0x76, 0x41, 0x05, 0x00, 0xb3, 0x51, + 0x00, 0x03, 0x99, 0xb6, 0x56, 0x62, 0x00, 0x86, 0xdc, 0x8f, 0x7d, 0x93, + 0xa0, 0xa7, 0xcc, 0x08, 0xcd, 0x07, 0x22, 0x67, 0x41, 0x28, 0xa2, 0x07, + 0x00, 0x00, 0x01, 0x3f, 0x73, 0xb1, 0x7f, 0xc7, 0x90, 0x01, 0xda, 0x77, + 0x05, 0x00, 0x00, 0x97, 0xb5, 0x59, 0x90, 0x41, 0x6d, 0x2b, 0xc2, 0x66, + 0x5d, 0x4a, 0xb8, 0x00, 0x00, 0x5a, 0xd1, 0xb7, 0x47, 0x08, 0x80, 0xaf, + 0x90, 0x44, 0x2f, 0x01, 0x04, 0x52, 0xbd, 0x00, 0x00, 0x03, 0x36, 0xde, + 0xd8, 0x23, 0x59, 0x9b, 0x44, 0x14, 0x00, 0x00, 0x00, 0x6e, 0xd7, 0x11, + 0x00, 0x70, 0xcf, 0x0c, 0x39, 0x00, 0x14, 0x89, 0x47, 0x01, 0x0b, 0x44, + 0x02, 0xba, 0xe9, 0x33, 0x16, 0xc5, 0x55, 0x61, 0x0a, 0x80, 0x47, 0x00, + 0x12, 0x74, 0xbe, 0xce, 0xbf, 0xa1, 0x18, 0x29, 0x91, 0x8b, 0x6f, 0x23, + 0x06, 0x88, 0x87, 0x01, 0x3e, 0x17, 0x00, 0x00, 0x1f, 0xa6, 0x10, 0x47, + 0xa7, 0x04, 0x04, 0x03, 0x38, 0x3c, 0x4f, 0x07, 0x77, 0x80, 0x2f, +}; + +//***************************************************************************** +// +// The second image of the spider facing down and left. +// +//***************************************************************************** +const uint8_t g_pui8SpiderDL2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0b, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0c, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1f, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x1a, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x21, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x13, 0x00, 0x86, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2c, 0x2f, 0x39, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x2f, 0x35, 0x35, + 0x34, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x09, 0x09, 0xa2, + 0x01, 0x01, 0xb5, + 0x07, 0x04, 0xad, + 0x0b, 0x0a, 0xa0, + 0x38, 0x37, 0x37, + 0x33, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x37, 0x3a, 0x3a, + 0x1c, 0x15, 0x8d, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3e, 0x3a, 0x3a, + 0x36, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, + 0x0b, 0x0b, 0xac, + 0x3c, 0x3c, 0x3c, + 0x22, 0x25, 0x74, + 0x14, 0x0b, 0xaf, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3e, 0x40, 0x40, + 0x3f, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4e, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x46, 0x47, 0x47, + 0x4a, 0x47, 0x46, + 0x4b, 0x47, 0x47, + 0x43, 0x48, 0x48, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x4f, 0x53, 0x53, + 0x55, 0x53, 0x53, + 0x57, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x58, 0x58, + 0x56, 0x5b, 0x5b, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x5e, 0x5e, 0x5e, + 0x43, 0x3c, 0xac, + 0x5b, 0x63, 0x63, + 0x65, 0x63, 0x63, + 0x63, 0x64, 0x64, + 0x67, 0x64, 0x64, + 0x66, 0x65, 0x65, + 0x69, 0x66, 0x66, + 0x5d, 0x69, 0x69, + 0x6a, 0x68, 0x68, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6e, 0x6e, + 0x54, 0x54, 0xb6, + 0x71, 0x73, 0x74, + 0x6d, 0x75, 0x75, + 0x71, 0x75, 0x75, + 0x7a, 0x77, 0x77, + 0x7b, 0x78, 0x78, + 0x76, 0x7a, 0x7a, + 0x7d, 0x7b, 0x7b, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x7d, 0x7d, 0x7d, + 0x75, 0x75, 0x90, + 0x7d, 0x7e, 0x7e, + 0x83, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x89, 0x89, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x91, 0x91, + 0x8f, 0x93, 0x93, + 0x85, 0x7f, 0xc2, + 0x90, 0x8c, 0xa8, + 0x95, 0x95, 0x95, + 0x93, 0x97, 0x97, + 0x94, 0x97, 0x97, + 0x88, 0x8a, 0xba, + 0x94, 0x99, 0x99, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa3, 0xa3, 0xa3, + 0xa7, 0xa3, 0xa4, + 0xa6, 0xa6, 0xa6, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb6, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcc, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xca, 0xcb, 0xcb, + 0xcb, 0xcc, 0xcc, + 0xca, 0xce, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd3, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd6, 0xd6, 0xdb, + 0xd9, 0xd9, 0xd9, + 0xd7, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe3, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe1, 0xe1, 0xe1, + 0xe5, 0xe3, 0xe3, + 0xe7, 0xe3, 0xe3, + 0xe5, 0xe7, 0xe7, + 0xe9, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf6, 0xf6, 0xf6, + + 0xf0, 0x07, 0x07, 0x07, 0x04, 0x65, 0x75, 0x77, 0x70, 0x18, 0x8b, 0xae, + 0x81, 0x07, 0x06, 0x21, 0x74, 0xa4, 0x0c, 0xc8, 0xe4, 0xe6, 0x2f, 0x47, + 0x06, 0x07, 0x1c, 0x06, 0x00, 0x0e, 0xc1, 0xa2, 0x02, 0x47, 0x01, 0x0a, + 0x00, 0x89, 0x9b, 0xaf, 0xb6, 0xcc, 0xc3, 0x05, 0x5d, 0x30, 0xd4, 0x24, + 0x4f, 0x03, 0x14, 0x57, 0x7f, 0x96, 0x06, 0xcb, 0xc2, 0x05, 0xbb, 0x9d, + 0x4f, 0x05, 0x22, 0x00, 0x08, 0x00, 0xa7, 0xb4, 0x2c, 0xdb, 0x45, 0x30, + 0x60, 0x0f, 0x37, 0x02, 0x38, 0xd8, 0x46, 0x00, 0x9f, 0x01, 0xab, 0x8e, + 0xb9, 0x67, 0x50, 0x58, 0x1d, 0x3f, 0x00, 0x00, 0x00, 0x54, 0xce, 0xdd, + 0xb7, 0x05, 0x92, 0x01, 0xac, 0xa0, 0x5e, 0x42, 0x4a, 0x4f, 0x33, 0x47, + 0x00, 0x10, 0x8a, 0xc4, 0x6f, 0x35, 0xd1, 0x76, 0x7c, 0x01, 0xbc, 0x6b, + 0x40, 0x19, 0x36, 0x4d, 0x1a, 0x46, 0x00, 0x3b, 0xa6, 0x90, 0x16, 0x00, + 0x00, 0x59, 0xda, 0x00, 0x8d, 0xcf, 0x47, 0x23, 0x13, 0x3a, 0x60, 0x09, + 0x10, 0x25, 0x9e, 0x53, 0x2b, 0x37, 0x1e, 0x28, 0x32, 0x00, 0x11, 0x00, + 0x00, 0x8f, 0xdc, 0xb0, 0x48, 0x31, 0x00, 0x39, 0x6e, 0x78, 0xa9, 0xe5, + 0xec, 0xc4, 0x0e, 0x80, 0x3b, 0x00, 0xa1, 0xe9, 0xd7, 0xbd, 0xb8, 0xc6, + 0x00, 0x86, 0x4b, 0x4e, 0x80, 0xaa, 0xe0, 0xde, 0xc0, 0x08, 0x91, 0x4c, + 0xdf, 0x7b, 0x44, 0xbf, 0xba, 0x6d, 0x00, 0x52, 0x49, 0x7e, 0x61, 0x4a, + 0x64, 0xd6, 0xad, 0x00, 0x5f, 0x18, 0x02, 0x06, 0x00, 0x73, 0xd0, 0x2b, + 0x80, 0x3a, 0x17, 0xcd, 0x43, 0x00, 0x00, 0x5c, 0xb1, 0x00, 0x55, 0x56, + 0x93, 0x94, 0x97, 0xca, 0xe2, 0xe7, 0x02, 0xd5, 0x0c, 0x02, 0x84, 0xb2, + 0x0d, 0x39, 0x3d, 0x00, 0xbe, 0x0b, 0x00, 0x00, 0x66, 0x71, 0xb5, 0x3f, + 0x00, 0xd2, 0xc7, 0x3c, 0x02, 0x34, 0x7d, 0xe1, 0x26, 0x09, 0x00, 0x03, + 0x88, 0x8c, 0x41, 0x85, 0x72, 0x19, 0x00, 0x00, 0x3e, 0x98, 0x1e, 0xd9, + 0x68, 0xd3, 0x63, 0x00, 0x04, 0x00, 0xc5, 0x41, 0x00, 0x00, 0x02, 0x62, + 0x04, 0x00, 0x00, 0x05, 0x87, 0x12, 0x42, 0x02, 0x03, 0x00, 0x2d, 0xe3, + 0x20, 0x82, 0xea, 0x9a, 0x00, 0x9c, 0x68, 0x7a, 0x8a, 0x69, 0x06, 0xc5, + 0x5a, 0xeb, 0x29, 0x03, 0x1f, 0xe8, 0x5b, 0x00, 0x44, 0x99, 0x45, 0x0c, + 0x01, 0x07, 0x51, 0xc9, 0xd4, 0x21, 0x83, 0xbf, 0x01, 0x40, 0x95, 0x47, + 0x00, 0x00, 0x01, 0x2a, 0xa3, 0xb3, 0x05, 0x6a, 0x15, 0x00, 0xa8, 0x69, + 0x41, 0x1b, 0x47, 0x02, 0x00, 0x00, 0x2e, 0x6c, 0x27, 0x05, 0x01, 0xa5, + 0x77, 0x12, 0x67, 0x1f, 0x02, 0x79, 0x4f, 0x07, 0x77, 0x80, 0x2f, +}; + +//***************************************************************************** +// +// The first image of the spider facing down and right. +// +//***************************************************************************** +const uint8_t g_pui8SpiderDR1Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0b, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0c, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1f, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x1a, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x21, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x13, 0x00, 0x86, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2c, 0x2f, 0x39, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x2f, 0x35, 0x35, + 0x34, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x00, 0xb6, + 0x36, 0x37, 0x37, + 0x09, 0x09, 0xa2, + 0x01, 0x01, 0xb5, + 0x07, 0x04, 0xad, + 0x0b, 0x0a, 0xa0, + 0x38, 0x37, 0x37, + 0x33, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x37, 0x3a, 0x3a, + 0x1c, 0x15, 0x8d, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3e, 0x3a, 0x3a, + 0x36, 0x3b, 0x3b, + 0x3b, 0x3b, 0x3b, + 0x0b, 0x0b, 0xac, + 0x3c, 0x3c, 0x3c, + 0x22, 0x25, 0x74, + 0x14, 0x0b, 0xaf, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3e, 0x40, 0x40, + 0x3f, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4e, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x46, 0x47, 0x47, + 0x4a, 0x47, 0x46, + 0x4b, 0x47, 0x47, + 0x43, 0x48, 0x48, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x4f, 0x53, 0x53, + 0x55, 0x53, 0x53, + 0x57, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x58, 0x58, + 0x56, 0x5b, 0x5b, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x5e, 0x5e, 0x5e, + 0x43, 0x3c, 0xac, + 0x5b, 0x63, 0x63, + 0x65, 0x63, 0x63, + 0x63, 0x64, 0x64, + 0x67, 0x64, 0x64, + 0x66, 0x65, 0x65, + 0x69, 0x66, 0x66, + 0x5d, 0x69, 0x69, + 0x6a, 0x68, 0x68, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6e, 0x6e, + 0x54, 0x54, 0xb6, + 0x71, 0x73, 0x74, + 0x6d, 0x75, 0x75, + 0x71, 0x75, 0x75, + 0x7a, 0x77, 0x77, + 0x7b, 0x78, 0x78, + 0x76, 0x7a, 0x7a, + 0x7d, 0x7b, 0x7b, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x7d, 0x7d, 0x7d, + 0x75, 0x75, 0x90, + 0x7d, 0x7e, 0x7e, + 0x83, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x89, 0x89, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x91, 0x91, + 0x8f, 0x93, 0x93, + 0x85, 0x7f, 0xc2, + 0x90, 0x8c, 0xa8, + 0x95, 0x95, 0x95, + 0x93, 0x97, 0x97, + 0x94, 0x97, 0x97, + 0x88, 0x8a, 0xba, + 0x94, 0x99, 0x99, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa3, 0xa3, 0xa3, + 0xa7, 0xa3, 0xa4, + 0xa6, 0xa6, 0xa6, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb6, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcc, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xca, 0xcb, 0xcb, + 0xcb, 0xcc, 0xcc, + 0xca, 0xce, 0xd0, + 0xcc, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd3, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd6, 0xd6, 0xdb, + 0xd9, 0xd9, 0xd9, + 0xd7, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe3, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe1, 0xe1, 0xe1, + 0xe5, 0xe3, 0xe3, + 0xe7, 0xe3, 0xe3, + 0xe5, 0xe7, 0xe7, + 0xe9, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf6, 0xf6, 0xf6, + + 0xf0, 0x07, 0x07, 0x07, 0x03, 0x81, 0xae, 0x8b, 0x70, 0x18, 0x77, 0x75, + 0x65, 0x07, 0x06, 0x2f, 0xe6, 0xe4, 0x0c, 0xc8, 0xa4, 0x74, 0x21, 0x47, + 0x06, 0x02, 0xa2, 0x06, 0xc1, 0x0e, 0x00, 0x1c, 0x07, 0x47, 0x07, 0x24, + 0x00, 0xd4, 0x5d, 0x05, 0xc3, 0xcc, 0xb6, 0xaf, 0x9b, 0x30, 0x89, 0x0a, + 0x1f, 0x03, 0x9d, 0xbb, 0x05, 0xc2, 0x06, 0xcb, 0x96, 0x7f, 0x57, 0x14, + 0x4f, 0x02, 0x0f, 0x00, 0x30, 0x45, 0xdb, 0x2c, 0xb4, 0xa7, 0x00, 0x08, + 0x60, 0x22, 0x4f, 0x02, 0x1d, 0x58, 0x50, 0x67, 0xb9, 0x01, 0x8e, 0xab, + 0x9f, 0x00, 0x46, 0xd8, 0x38, 0x3f, 0x80, 0x01, 0x33, 0x4f, 0x4a, 0x42, + 0x5e, 0xa0, 0xac, 0x02, 0x92, 0x05, 0xb7, 0xdd, 0xce, 0x54, 0x3f, 0x00, + 0x00, 0x00, 0x1a, 0x4d, 0x36, 0x19, 0x40, 0x6b, 0xbc, 0x00, 0x7c, 0x76, + 0xd1, 0x35, 0x6f, 0xc4, 0x8a, 0x10, 0x80, 0x34, 0x53, 0x9e, 0x25, 0x09, + 0x60, 0x3a, 0x13, 0x00, 0x23, 0x47, 0xcf, 0x8d, 0xda, 0x59, 0x00, 0x00, + 0x08, 0x16, 0x90, 0xa6, 0x3b, 0x3a, 0x0e, 0xc4, 0xec, 0x00, 0xe5, 0xa9, + 0x78, 0x6e, 0x39, 0x31, 0x48, 0xb0, 0x00, 0xdc, 0x8f, 0x00, 0x00, 0x11, + 0x32, 0x28, 0x1e, 0x40, 0x37, 0x42, 0x7b, 0xdf, 0x4c, 0x91, 0xc0, 0xde, + 0x00, 0xe0, 0xaa, 0x80, 0x4e, 0x4b, 0x86, 0xc6, 0xb8, 0x08, 0xbd, 0xd7, + 0xe9, 0xa1, 0x52, 0x00, 0x2b, 0xd0, 0x00, 0x73, 0x00, 0x06, 0x02, 0x18, + 0x5f, 0xad, 0xd6, 0x00, 0x64, 0x4a, 0x61, 0x7e, 0x49, 0x52, 0x6d, 0xba, + 0x40, 0xbf, 0x42, 0x0d, 0xb2, 0x84, 0x02, 0x0c, 0xd5, 0x00, 0xe7, 0xe2, + 0xca, 0x97, 0x94, 0x93, 0x56, 0x55, 0x01, 0xb1, 0x5c, 0x00, 0x00, 0x43, + 0xcd, 0x17, 0x39, 0x00, 0x8c, 0x88, 0x03, 0x00, 0x26, 0xe1, 0x7d, 0x34, + 0x00, 0x02, 0x3c, 0xc7, 0xd2, 0x3f, 0xb5, 0x71, 0x66, 0x04, 0x00, 0x00, + 0x0b, 0xbe, 0x3d, 0x41, 0x62, 0x02, 0x00, 0x00, 0x00, 0x41, 0xc5, 0x00, + 0x04, 0x63, 0xd3, 0x04, 0x68, 0xd9, 0x1e, 0x98, 0x3e, 0x71, 0x00, 0x72, + 0x60, 0x85, 0xd2, 0x21, 0x7a, 0x9c, 0x00, 0x9a, 0xea, 0x02, 0x82, 0x20, + 0xe3, 0x2d, 0x03, 0x02, 0x42, 0x12, 0x20, 0x87, 0x05, 0x3c, 0x99, 0x44, + 0x00, 0x5b, 0xe8, 0x09, 0x1f, 0x29, 0xeb, 0x5a, 0x8c, 0x00, 0x06, 0xc5, + 0x40, 0x95, 0x09, 0xbf, 0x83, 0x21, 0xd4, 0xc9, 0x51, 0x68, 0x07, 0x35, + 0x04, 0x1b, 0x01, 0x69, 0xa8, 0x00, 0x03, 0x15, 0x6a, 0xb3, 0xa3, 0x2a, + 0x01, 0x37, 0x04, 0x21, 0x12, 0xa5, 0x19, 0x05, 0x27, 0x6c, 0x2e, 0x47, + 0xbe, 0x05, 0x79, 0x7f, 0x37, 0x77, 0x2f, 0x07, +}; + +//***************************************************************************** +// +// The second image of the spider facing down and right. +// +//***************************************************************************** +const uint8_t g_pui8SpiderDR2Image[] = +{ + IMAGE_FMT_8BPP_COMP, + 24, 0, + 24, 0, + + 236, + 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, + 0x02, 0x01, 0x01, + 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, + 0x02, 0x03, 0x03, + 0x03, 0x03, 0x03, + 0x05, 0x03, 0x03, + 0x03, 0x04, 0x04, + 0x05, 0x04, 0x04, + 0x05, 0x05, 0x05, + 0x07, 0x06, 0x06, + 0x06, 0x08, 0x08, + 0x08, 0x08, 0x08, + 0x08, 0x07, 0x0a, + 0x09, 0x09, 0x09, + 0x0a, 0x09, 0x09, + 0x09, 0x0a, 0x0a, + 0x0d, 0x00, 0x1f, + 0x0d, 0x0b, 0x0b, + 0x0e, 0x0b, 0x0b, + 0x0b, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0d, + 0x00, 0x00, 0x2e, + 0x0d, 0x0d, 0x16, + 0x0e, 0x10, 0x10, + 0x11, 0x10, 0x10, + 0x0f, 0x0d, 0x17, + 0x0f, 0x11, 0x11, + 0x0f, 0x12, 0x12, + 0x11, 0x12, 0x12, + 0x15, 0x13, 0x13, + 0x13, 0x14, 0x14, + 0x17, 0x14, 0x14, + 0x04, 0x00, 0x43, + 0x16, 0x15, 0x15, + 0x19, 0x15, 0x15, + 0x12, 0x16, 0x16, + 0x15, 0x18, 0x18, + 0x1b, 0x1a, 0x1a, + 0x1d, 0x1c, 0x1c, + 0x1e, 0x1c, 0x1c, + 0x1b, 0x1d, 0x1d, + 0x19, 0x1e, 0x1e, + 0x24, 0x1e, 0x1e, + 0x1d, 0x1f, 0x1f, + 0x1c, 0x1e, 0x23, + 0x22, 0x1f, 0x1f, + 0x00, 0x00, 0x6c, + 0x25, 0x20, 0x20, + 0x20, 0x1a, 0x2e, + 0x1e, 0x22, 0x22, + 0x24, 0x22, 0x22, + 0x00, 0x00, 0x81, + 0x1d, 0x29, 0x29, + 0x21, 0x29, 0x29, + 0x06, 0x01, 0x83, + 0x14, 0x00, 0x85, + 0x28, 0x2c, 0x2c, + 0x29, 0x2d, 0x2d, + 0x31, 0x2e, 0x2e, + 0x34, 0x2f, 0x2f, + 0x2d, 0x2f, 0x38, + 0x00, 0x00, 0xa8, + 0x2e, 0x33, 0x33, + 0x00, 0x00, 0xab, + 0x3a, 0x33, 0x33, + 0x34, 0x34, 0x35, + 0x2f, 0x35, 0x35, + 0x35, 0x36, 0x36, + 0x11, 0x0b, 0x99, + 0x04, 0x03, 0xae, + 0x32, 0x37, 0x37, + 0x00, 0x00, 0xb6, + 0x01, 0x01, 0xb4, + 0x01, 0x00, 0xb6, + 0x09, 0x09, 0xa2, + 0x0a, 0x0a, 0xa0, + 0x07, 0x04, 0xad, + 0x38, 0x37, 0x37, + 0x33, 0x38, 0x38, + 0x36, 0x38, 0x38, + 0x3c, 0x38, 0x38, + 0x3e, 0x38, 0x38, + 0x04, 0x04, 0xb5, + 0x05, 0x05, 0xb4, + 0x1b, 0x15, 0x8d, + 0x37, 0x3a, 0x3a, + 0x39, 0x3a, 0x3a, + 0x3c, 0x3a, 0x3a, + 0x3d, 0x3a, 0x3a, + 0x37, 0x3b, 0x3b, + 0x3a, 0x3b, 0x3b, + 0x0b, 0x0b, 0xad, + 0x23, 0x24, 0x74, + 0x3c, 0x3c, 0x3c, + 0x14, 0x0b, 0xae, + 0x3c, 0x3e, 0x3e, + 0x3e, 0x3e, 0x3e, + 0x10, 0x10, 0xad, + 0x3f, 0x40, 0x40, + 0x3e, 0x41, 0x41, + 0x1b, 0x1d, 0x97, + 0x3f, 0x42, 0x42, + 0x3b, 0x44, 0x44, + 0x44, 0x43, 0x43, + 0x22, 0x21, 0x93, + 0x48, 0x44, 0x44, + 0x4d, 0x44, 0x44, + 0x1f, 0x1a, 0xac, + 0x4b, 0x46, 0x46, + 0x43, 0x47, 0x47, + 0x45, 0x47, 0x47, + 0x4a, 0x47, 0x47, + 0x4b, 0x47, 0x47, + 0x47, 0x48, 0x48, + 0x4b, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x49, 0x50, 0x50, + 0x45, 0x4f, 0x5d, + 0x55, 0x52, 0x52, + 0x4f, 0x53, 0x53, + 0x58, 0x55, 0x55, + 0x51, 0x57, 0x57, + 0x5e, 0x56, 0x56, + 0x4e, 0x56, 0x5c, + 0x58, 0x58, 0x58, + 0x32, 0x32, 0xb1, + 0x61, 0x59, 0x59, + 0x56, 0x5c, 0x5c, + 0x57, 0x5e, 0x5e, + 0x66, 0x5d, 0x5d, + 0x44, 0x3c, 0xac, + 0x5e, 0x5f, 0x5f, + 0x5c, 0x63, 0x63, + 0x63, 0x63, 0x63, + 0x65, 0x64, 0x64, + 0x68, 0x65, 0x65, + 0x66, 0x66, 0x66, + 0x69, 0x66, 0x66, + 0x6a, 0x67, 0x68, + 0x5d, 0x69, 0x69, + 0x67, 0x6a, 0x6a, + 0x6b, 0x6a, 0x6a, + 0x60, 0x6c, 0x6c, + 0x74, 0x6f, 0x6f, + 0x54, 0x54, 0xb6, + 0x71, 0x74, 0x74, + 0x6d, 0x75, 0x75, + 0x72, 0x75, 0x75, + 0x79, 0x77, 0x77, + 0x7b, 0x77, 0x77, + 0x76, 0x7a, 0x7a, + 0x80, 0x7b, 0x7b, + 0x7a, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7c, + 0x7e, 0x7c, 0x7c, + 0x75, 0x75, 0x8f, + 0x7d, 0x7d, 0x7d, + 0x7d, 0x7e, 0x7e, + 0x80, 0x7f, 0x7f, + 0x83, 0x7f, 0x7f, + 0x7d, 0x80, 0x80, + 0x80, 0x83, 0x83, + 0x7f, 0x86, 0x86, + 0x85, 0x87, 0x87, + 0x88, 0x8a, 0x8a, + 0x85, 0x8c, 0x8c, + 0x7b, 0x73, 0xc6, + 0x8b, 0x8f, 0x8f, + 0x8c, 0x90, 0x90, + 0x8e, 0x90, 0x90, + 0x96, 0x90, 0x90, + 0x8f, 0x93, 0x93, + 0x84, 0x7e, 0xc2, + 0x8f, 0x8c, 0xa7, + 0x95, 0x95, 0x95, + 0x93, 0x96, 0x96, + 0x93, 0x97, 0x97, + 0x93, 0x99, 0x99, + 0x88, 0x8b, 0xba, + 0x97, 0x99, 0x99, + 0x9f, 0x9a, 0x9a, + 0x8e, 0x93, 0xb9, + 0xa6, 0xa1, 0xa1, + 0xa7, 0xa3, 0xa4, + 0xa3, 0xa4, 0xa4, + 0xa5, 0xa5, 0xa5, + 0xae, 0xaa, 0xaa, + 0xb2, 0xac, 0xac, + 0xaf, 0xad, 0xad, + 0xb0, 0xae, 0xae, + 0xb6, 0xae, 0xae, + 0xb4, 0xb2, 0xb2, + 0xb7, 0xb6, 0xb6, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xba, 0xba, + 0xb5, 0xbc, 0xbc, + 0xb6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, + 0xc0, 0xbd, 0xbd, + 0xbf, 0xbe, 0xbe, + 0xc1, 0xc3, 0xc3, + 0xc2, 0xc4, 0xc4, + 0xcd, 0xca, 0xca, + 0xc6, 0xcb, 0xcb, + 0xc2, 0xca, 0xcf, + 0xcb, 0xcb, 0xcb, + 0xca, 0xce, 0xd0, + 0xcb, 0xd1, 0xd1, + 0xd2, 0xd2, 0xd2, + 0xd4, 0xd2, 0xd2, + 0xd1, 0xd1, 0xd6, + 0xd5, 0xd3, 0xd3, + 0xd2, 0xd4, 0xd4, + 0xd0, 0xd5, 0xd5, + 0xce, 0xd6, 0xd6, + 0xd1, 0xd7, 0xd7, + 0xd7, 0xd6, 0xdb, + 0xd7, 0xda, 0xda, + 0xd9, 0xda, 0xda, + 0xde, 0xda, 0xda, + 0xe2, 0xde, 0xe3, + 0xe2, 0xe0, 0xe0, + 0xe0, 0xe1, 0xe1, + 0xe5, 0xe4, 0xe4, + 0xe7, 0xe4, 0xe4, + 0xe5, 0xe7, 0xe7, + 0xea, 0xe7, 0xe7, + 0xea, 0xe8, 0xe8, + 0xeb, 0xea, 0xea, + 0xef, 0xec, 0xec, + 0xee, 0xf1, 0xf1, + 0xf4, 0xf3, 0xf3, + 0xf7, 0xf6, 0xf6, + + 0xf0, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x0d, 0x8d, 0x60, 0x63, 0x07, + 0x07, 0x00, 0x00, 0x2c, 0xb2, 0x8a, 0x60, 0x02, 0x47, 0x07, 0x0e, 0x7c, + 0xd1, 0x85, 0x03, 0xc1, 0x4f, 0x07, 0x54, 0xc4, 0xdf, 0x71, 0x02, 0x4f, + 0x80, 0x07, 0x00, 0x9e, 0xec, 0x53, 0x00, 0x0c, 0x27, 0x06, 0x42, 0x7a, + 0x9a, 0x96, 0x1b, 0x17, 0x02, 0x26, 0x00, 0xe5, 0x92, 0x06, 0xd5, 0xe1, + 0xc6, 0x9c, 0x46, 0xc0, 0x57, 0x09, 0x1d, 0x34, 0x1a, 0x09, 0xa9, 0xc0, + 0x10, 0x02, 0xe7, 0x7e, 0x5f, 0x82, 0x31, 0x02, 0x00, 0x00, 0x00, 0x0f, + 0x58, 0x50, 0x4e, 0x60, 0x79, 0xdd, 0x02, 0x18, 0xe2, 0x35, 0x04, 0x9d, + 0x5c, 0x2c, 0xae, 0x00, 0xe6, 0xa3, 0x25, 0x00, 0x30, 0x4f, 0x4b, 0x37, + 0x00, 0x3b, 0x6f, 0xe0, 0x61, 0xcb, 0x02, 0x64, 0xea, 0x08, 0xe8, 0xbf, + 0x6a, 0x10, 0x29, 0x8c, 0xe4, 0xc2, 0x00, 0xd4, 0x9d, 0x45, 0x68, 0x43, + 0x19, 0x13, 0x3a, 0x00, 0xaa, 0xad, 0x98, 0x3d, 0xd3, 0x83, 0x20, 0x84, + 0x00, 0xa8, 0xa5, 0x7b, 0x00, 0x00, 0x72, 0xc9, 0x0e, 0x00, 0x5e, 0xbc, + 0xdb, 0xb9, 0x5f, 0x41, 0x24, 0x32, 0x00, 0x81, 0xd6, 0x95, 0xc8, 0x69, + 0x21, 0x2a, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xa4, 0x00, + 0x00, 0x05, 0x05, 0x2d, 0x8e, 0x9f, 0x6c, 0x48, 0x49, 0x00, 0x4c, 0x65, + 0x94, 0xd2, 0xd9, 0xe3, 0xeb, 0xd4, 0x40, 0x15, 0x3a, 0x76, 0x75, 0x1c, + 0xc3, 0xc1, 0xb4, 0x00, 0xab, 0xac, 0xbb, 0xd0, 0xb0, 0x4d, 0x4b, 0x57, + 0x02, 0x40, 0x1e, 0x2e, 0x5b, 0xca, 0x6b, 0x42, 0x67, 0x00, 0x22, 0x07, + 0xcd, 0xcc, 0xa7, 0xa0, 0x93, 0x7d, 0x00, 0x8f, 0xdc, 0x86, 0x62, 0x56, + 0xb6, 0x99, 0x03, 0x08, 0x00, 0x51, 0xb3, 0x05, 0x3a, 0x00, 0x00, 0xb5, + 0x00, 0x97, 0x00, 0x00, 0x05, 0x77, 0xda, 0x90, 0xc7, 0x00, 0x7f, 0xb1, + 0x73, 0x3f, 0x01, 0x00, 0x07, 0xa2, 0x40, 0x28, 0x44, 0xaf, 0x80, 0x08, + 0x47, 0xb7, 0xd1, 0x02, 0x5a, 0x00, 0xb8, 0x4a, 0x5d, 0x66, 0x72, 0x2b, + 0x40, 0x6d, 0x44, 0x9b, 0x59, 0x23, 0xd8, 0xde, 0x36, 0x09, 0x00, 0x00, + 0xbd, 0x52, 0x84, 0x01, 0x2f, 0x44, 0x00, 0x89, 0x14, 0x00, 0x39, 0xcf, + 0x70, 0x00, 0x11, 0x31, 0xd7, 0x6e, 0x44, 0x14, 0x00, 0x00, 0x0a, 0x09, + 0x00, 0x55, 0xc5, 0x16, 0x33, 0xe9, 0xba, 0x44, 0x0b, 0xc0, 0x37, 0x06, + 0x8b, 0x91, 0x29, 0xa1, 0xbf, 0xce, 0x18, 0xbe, 0x74, 0x12, 0x37, 0x04, + 0x10, 0xa6, 0x1f, 0x01, 0x00, 0x00, 0x17, 0x3e, 0x87, 0x88, 0x06, 0x3f, + 0x97, 0x04, 0x3c, 0x38, 0x03, 0x04, 0x4f, 0x07, 0x77, 0x80, 0x2c, +}; diff --git a/boards/dk-tm4c129x/freertos_demo/images.h b/boards/dk-tm4c129x/freertos_demo/images.h new file mode 100644 index 0000000..cbf213d --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/images.h @@ -0,0 +1,51 @@ +//***************************************************************************** +// +// images.h - Prototypes for the spider images for the LCD. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IMAGES_H__ +#define __IMAGES_H__ + +//***************************************************************************** +// +// Prototypes for the spider images. +// +//***************************************************************************** +extern const uint8_t g_pui8SpiderBlankImage[]; +extern const uint8_t g_pui8SpiderL1Image[]; +extern const uint8_t g_pui8SpiderL2Image[]; +extern const uint8_t g_pui8SpiderR1Image[]; +extern const uint8_t g_pui8SpiderR2Image[]; +extern const uint8_t g_pui8SpiderU1Image[]; +extern const uint8_t g_pui8SpiderU2Image[]; +extern const uint8_t g_pui8SpiderD1Image[]; +extern const uint8_t g_pui8SpiderD2Image[]; +extern const uint8_t g_pui8SpiderUL1Image[]; +extern const uint8_t g_pui8SpiderUL2Image[]; +extern const uint8_t g_pui8SpiderUR1Image[]; +extern const uint8_t g_pui8SpiderUR2Image[]; +extern const uint8_t g_pui8SpiderDL1Image[]; +extern const uint8_t g_pui8SpiderDL2Image[]; +extern const uint8_t g_pui8SpiderDR1Image[]; +extern const uint8_t g_pui8SpiderDR2Image[]; + +#endif // __IMAGES_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/led_task.c b/boards/dk-tm4c129x/freertos_demo/led_task.c new file mode 100644 index 0000000..6929dd5 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/led_task.c @@ -0,0 +1,120 @@ +//***************************************************************************** +// +// led_task.c - A simple flashing LED task. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "idle_task.h" +#include "led_task.h" +#include "priorities.h" +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "semphr.h" +//***************************************************************************** +// +// The stack size for the LED toggle task. +// +//***************************************************************************** +#define STACKSIZE_LEDTASK 128 + +//***************************************************************************** +// +// The amount of time to delay between toggles of the LED. +// +//***************************************************************************** +uint32_t g_ui32LEDDelay = 500; + +//***************************************************************************** +// +// This task simply toggles the user LED at a 1 Hz rate. +// +//***************************************************************************** +static void +LEDTask(void *pvParameters) +{ + portTickType ui32LastTime; + + // + // Get the current tick count. + // + ui32LastTime = xTaskGetTickCount(); + + // + // Loop forever. + // + while(1) + { + // + // Turn on the user LED. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_7, GPIO_PIN_7); + + // + // Wait for the required amount of time. + // + vTaskDelayUntil(&ui32LastTime, g_ui32LEDDelay / portTICK_RATE_MS); + + // + // Turn off the user LED. + // + ROM_GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_7, 0); + + // + // Wait for the required amount of time. + // + vTaskDelayUntil(&ui32LastTime, g_ui32LEDDelay / portTICK_RATE_MS); + } +} + +//***************************************************************************** +// +// Initializes the LED task. +// +//***************************************************************************** +uint32_t +LEDTaskInit(void) +{ + // + // Initialize the GPIO used to drive the user LED. + // + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, GPIO_PIN_7); + + // + // Create the LED task. + // + if(xTaskCreate(LEDTask, (signed portCHAR *)"LED", STACKSIZE_LEDTASK, NULL, + tskIDLE_PRIORITY + PRIORITY_LED_TASK, NULL) != pdTRUE) + { + return(1); + } + + // + // Success. + // + return(0); +} diff --git a/boards/dk-tm4c129x/freertos_demo/led_task.h b/boards/dk-tm4c129x/freertos_demo/led_task.h new file mode 100644 index 0000000..116be95 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/led_task.h @@ -0,0 +1,36 @@ +//***************************************************************************** +// +// led_task.h - Prototypes for the LED task. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __LED_TASK_H__ +#define __LED_TASK_H__ + +//***************************************************************************** +// +// Prototypes for the LED task. +// +//***************************************************************************** +extern uint32_t g_ui32LEDDelay; +extern uint32_t LEDTaskInit(void); + +#endif // __LED_TASK_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/lwip_task.c b/boards/dk-tm4c129x/freertos_demo/lwip_task.c new file mode 100644 index 0000000..9787b34 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/lwip_task.c @@ -0,0 +1,378 @@ +//***************************************************************************** +// +// lwip_task.c - Tasks to serve web pages over Ethernet using lwIP. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_types.h" +#include "driverlib/rom.h" +#include "utils/lwiplib.h" +#include "utils/locator.h" +#include "utils/ustdlib.h" +#include "httpserver_raw/httpd.h" +#include "freertos_demo.h" +#include "cgifuncs.h" +#include "led_task.h" +#include "idle_task.h" +#include "lwip_task.h" +#include "spider_task.h" +//***************************************************************************** +// +// This structure contains the details of a SSI tag. +// +//***************************************************************************** +typedef struct +{ + // + // The text name of the tag. If the name is "foo", it will appear in the + // HTML source as "". + // + const char *pcName; + + // + // A pointer to the variable that contains the value of this tag. + // + uint32_t *pui32Value; +} +tSSITag; + +//***************************************************************************** +// +// The list of tags. +// +//***************************************************************************** +const tSSITag g_psTags[] = +{ + { "linksent", (uint32_t *) &lwip_stats.link.xmit }, + { "linkrecv", (uint32_t *) &lwip_stats.link.recv }, + { "linkdrop", (uint32_t *) &lwip_stats.link.drop }, + { "linkcksm", (uint32_t *) &lwip_stats.link.chkerr }, + { "linklen", (uint32_t *) &lwip_stats.link.lenerr }, + { "linkmem", (uint32_t *) &lwip_stats.link.memerr }, + { "linkrte", (uint32_t *) &lwip_stats.link.rterr }, + { "linkprot", (uint32_t *) &lwip_stats.link.proterr }, + { "linkopt", (uint32_t *) &lwip_stats.link.opterr }, + { "linkmisc", (uint32_t *) &lwip_stats.link.err }, + { "arpsent", (uint32_t *) &lwip_stats.etharp.xmit }, + { "arprecv", (uint32_t *) &lwip_stats.etharp.recv }, + { "arpdrop", (uint32_t *) &lwip_stats.etharp.drop }, + { "arpcksm", (uint32_t *) &lwip_stats.etharp.chkerr }, + { "arplen", (uint32_t *) &lwip_stats.etharp.lenerr }, + { "arpmem", (uint32_t *) &lwip_stats.etharp.memerr }, + { "arprte", (uint32_t *) &lwip_stats.etharp.rterr }, + { "arpprot", (uint32_t *) &lwip_stats.etharp.proterr }, + { "arpopt", (uint32_t *) &lwip_stats.etharp.opterr }, + { "arpmisc", (uint32_t *) &lwip_stats.etharp.err }, + { "icmpsent", (uint32_t *) &lwip_stats.icmp.xmit }, + { "icmprecv", (uint32_t *) &lwip_stats.icmp.recv }, + { "icmpdrop", (uint32_t *) &lwip_stats.icmp.drop }, + { "icmpcksm", (uint32_t *) &lwip_stats.icmp.chkerr }, + { "icmplen", (uint32_t *) &lwip_stats.icmp.lenerr }, + { "icmpmem", (uint32_t *) &lwip_stats.icmp.memerr }, + { "icmprte", (uint32_t *) &lwip_stats.icmp.rterr }, + { "icmpprot", (uint32_t *) &lwip_stats.icmp.proterr }, + { "icmpopt", (uint32_t *) &lwip_stats.icmp.opterr }, + { "icmpmisc", (uint32_t *) &lwip_stats.icmp.err }, + { "ipsent", (uint32_t *) &lwip_stats.ip.xmit }, + { "iprecv", (uint32_t *) &lwip_stats.ip.recv }, + { "ipdrop", (uint32_t *) &lwip_stats.ip.drop }, + { "ipcksm", (uint32_t *) &lwip_stats.ip.chkerr }, + { "iplen", (uint32_t *) &lwip_stats.ip.lenerr }, + { "ipmem", (uint32_t *) &lwip_stats.ip.memerr }, + { "iprte", (uint32_t *) &lwip_stats.ip.rterr }, + { "ipprot", (uint32_t *) &lwip_stats.ip.proterr }, + { "ipopt", (uint32_t *) &lwip_stats.ip.opterr }, + { "ipmisc", (uint32_t *) &lwip_stats.ip.err }, + { "tcpsent", (uint32_t *) &lwip_stats.tcp.xmit }, + { "tcprecv", (uint32_t *) &lwip_stats.tcp.recv }, + { "tcpdrop", (uint32_t *) &lwip_stats.tcp.drop }, + { "tcpcksm", (uint32_t *) &lwip_stats.tcp.chkerr }, + { "tcplen", (uint32_t *) &lwip_stats.tcp.lenerr }, + { "tcpmem", (uint32_t *) &lwip_stats.tcp.memerr }, + { "tcprte", (uint32_t *) &lwip_stats.tcp.rterr }, + { "tcpprot", (uint32_t *) &lwip_stats.tcp.proterr }, + { "tcpopt", (uint32_t *) &lwip_stats.tcp.opterr }, + { "tcpmisc", (uint32_t *) &lwip_stats.tcp.err }, + { "udpsent", (uint32_t *) &lwip_stats.udp.xmit }, + { "udprecv", (uint32_t *) &lwip_stats.udp.recv }, + { "udpdrop", (uint32_t *) &lwip_stats.udp.drop }, + { "udpcksm", (uint32_t *) &lwip_stats.udp.chkerr }, + { "udplen", (uint32_t *) &lwip_stats.udp.lenerr }, + { "udpmem", (uint32_t *) &lwip_stats.udp.memerr }, + { "udprte", (uint32_t *) &lwip_stats.udp.rterr }, + { "udpprot", (uint32_t *) &lwip_stats.udp.proterr }, + { "udpopt", (uint32_t *) &lwip_stats.udp.opterr }, + { "udpmisc", (uint32_t *) &lwip_stats.udp.err }, + { "ledrate", (uint32_t *) &g_ui32LEDDelay }, + { "spider", (uint32_t *) g_pui32SpiderDelay } +}; + +//***************************************************************************** +// +// The number of tags. +// +//***************************************************************************** +#define NUM_TAGS (sizeof(g_psTags) / sizeof(g_psTags[0])) + +//***************************************************************************** +// +// An array of names for the tags, as required by the web server. +// +//***************************************************************************** +static const char *g_ppcSSITags[NUM_TAGS]; + +//***************************************************************************** +// +// The CGI handler for changing the toggle rate of the LED task. +// +//***************************************************************************** +static const char * +ToggleRateCGIHandler(int32_t i32Index, int32_t i32NumParams, char *ppcParam[], + char *ppcValue[]) +{ + bool bParamError; + int32_t i32Rate; + + // + // Get the value of the time parameter. + // + bParamError = false; + i32Rate = GetCGIParam("time", ppcParam, ppcValue, i32NumParams, + &bParamError); + + // + // Return a parameter error if the time parameter was not supplied or was + // out of range. + // + if(bParamError || (i32Rate < 1) || (i32Rate > 10000)) + { + return("/perror.htm"); + } + + // + // Update the delay between toggles of the LED. + // + g_ui32LEDDelay = i32Rate; + + // + // Refresh the current page. + // + return("/io.ssi"); +} + +//***************************************************************************** +// +// The CGI handler for changing the spider speed. +// +//***************************************************************************** +static const char * +SpiderSpeedCGIHandler(int32_t i32Index, int32_t i32NumParams, char *ppcParam[], + char *ppcValue[]) +{ + bool bParamError; + int32_t i32Rate; + + // + // Get the value of the time parameter. + // + bParamError = false; + i32Rate = GetCGIParam("time", ppcParam, ppcValue, i32NumParams, + &bParamError); + + // + // Return a parameter error if the time parameter was not supplied or was + // out of range. + // + if(bParamError) + { + return("/perror.htm"); + } + + // + // Update the speed of the spiders. + // + SpiderSpeedSet(i32Rate); + + // + // Refresh the current page. + // + return("/io.ssi"); +} + +//***************************************************************************** +// +// The array of CGI handlers, as required by the web server. +// +//***************************************************************************** +static const tCGI g_psCGIs[] = +{ + { "/toggle_rate.cgi", ToggleRateCGIHandler }, + { "/spider_rate.cgi", SpiderSpeedCGIHandler } +}; + +//***************************************************************************** +// +// The number of CGI handlers. +// +//***************************************************************************** +#define NUM_CGIS (sizeof(g_psCGIs) / sizeof(g_psCGIs[0])) + +//***************************************************************************** +// +// The handler for server side includes. +// +//***************************************************************************** +static uint16_t +SSIHandler(int32_t i32Index, char *pcInsert, int32_t i32InsertLen) +{ + // + // Replace the tag with an appropriate value. + // + if(i32Index < NUM_TAGS) + { + // + // This is a valid tag, so print out its value. + // + usnprintf(pcInsert, i32InsertLen, "%d", + *(g_psTags[i32Index].pui32Value)); + } + else + { + // + // This is an unknown tag. + // + usnprintf(pcInsert, i32InsertLen, "??"); + } + + // + // Determine the length of the replacement text. + // + for(i32Index = 0; pcInsert[i32Index] != 0; i32Index++) + { + } + + // + // Return the length of the replacement text. + // + return(i32Index); +} + +//***************************************************************************** +// +// Sets up the additional lwIP raw API services provided by the application. +// +//***************************************************************************** +void +SetupServices(void *pvArg) +{ + uint8_t pui8MAC[6]; + uint32_t ui32Idx; + + // + // Setup the device locator service. + // + LocatorInit(); + lwIPLocalMACGet(pui8MAC); + LocatorMACAddrSet(pui8MAC); + + LocatorAppTitleSet("DK-TM4C129X freertos_demo"); + + // + // Initialize the sample httpd server. + // + httpd_init(); + + // + // Initialize the tag array used by the web server's SSI processing. + // + for(ui32Idx = 0; ui32Idx < NUM_TAGS; ui32Idx++) + { + g_ppcSSITags[ui32Idx] = g_psTags[ui32Idx].pcName; + } + + // + // Register the SSI tags and handler with the web server. + // + http_set_ssi_handler(SSIHandler, g_ppcSSITags, NUM_TAGS); + + // + // Register the CGI handlers with the web server. + // + http_set_cgi_handlers(g_psCGIs, NUM_CGIS); +} + +//***************************************************************************** +// +// Initializes the lwIP tasks. +// +//***************************************************************************** +uint32_t +lwIPTaskInit(void) +{ + uint32_t ui32User0, ui32User1; + uint8_t pui8MAC[6]; + + // + // Get the MAC address from the user registers. + // + ROM_FlashUserGet(&ui32User0, &ui32User1); + if((ui32User0 == 0xffffffff) || (ui32User1 == 0xffffffff)) + { + return(1); + } + + // + // Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC + // address needed to program the hardware registers, then program the MAC + // address into the Ethernet Controller registers. + // + pui8MAC[0] = ((ui32User0 >> 0) & 0xff); + pui8MAC[1] = ((ui32User0 >> 8) & 0xff); + pui8MAC[2] = ((ui32User0 >> 16) & 0xff); + pui8MAC[3] = ((ui32User1 >> 0) & 0xff); + pui8MAC[4] = ((ui32User1 >> 8) & 0xff); + pui8MAC[5] = ((ui32User1 >> 16) & 0xff); + + // + // Lower the priority of the Ethernet interrupt handler. This is required + // so that the interrupt handler can safely call the interrupt-safe + // FreeRTOS functions (specifically to send messages to the queue). + // + ROM_IntPrioritySet(INT_EMAC0, 0xC0); + + // + // Initialize lwIP. + // + lwIPInit(g_ui32SysClock, pui8MAC, 0, 0, 0, IPADDR_USE_DHCP); + + // + // Setup the remaining services inside the TCP/IP thread's context. + // + tcpip_callback(SetupServices, 0); + + // + // Success. + // + return(0); +} diff --git a/boards/dk-tm4c129x/freertos_demo/lwip_task.h b/boards/dk-tm4c129x/freertos_demo/lwip_task.h new file mode 100644 index 0000000..5625c37 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/lwip_task.h @@ -0,0 +1,35 @@ +//***************************************************************************** +// +// lwip_task.h - Prototypes for the lwIP tasks. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __LWIP_TASK_H__ +#define __LWIP_TASK_H__ + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern uint32_t lwIPTaskInit(void); + +#endif // __LWIP_TASK_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/lwipopts.h b/boards/dk-tm4c129x/freertos_demo/lwipopts.h new file mode 100644 index 0000000..919ddf2 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/lwipopts.h @@ -0,0 +1,446 @@ +//***************************************************************************** +// +// lwipopts.h - Configuration file for lwIP +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +// +// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h +// header file. +// +// For additional details, refer to the original "opt.h" file, and lwIP +// documentation. +// +//***************************************************************************** + +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +//***************************************************************************** +// +// ---------- Stellaris / lwIP Port Options ---------- +// +//***************************************************************************** +//#define HOST_TMR_INTERVAL 100 // default is 0 +//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000) +#define LWIP_HTTPD_SSI 1 +#define LWIP_HTTPD_CGI 1 +#define LWIP_HTTPD_DYNAMIC_HEADERS 1 +//#define INCLUDE_HTTPD_DEBUG +#define LWIP_HTTPD_CGI 1 +#define LWIP_HTTPD_SSI 1 +#define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | \ + EMAC_PHY_AN_100B_T_FULL_DUPLEX) +#define PHY_PHYS_ADDR 0 +#define NUM_TX_DESCRIPTORS 24 +#define NUM_RX_DESCRIPTORS 8 + +//***************************************************************************** +// +// ---------- Platform specific locking ---------- +// +//***************************************************************************** +#define SYS_LIGHTWEIGHT_PROT 1 // default is 0 +#define NO_SYS 0 // default is 0 +#if !NO_SYS +#define LWIP_COMPAT_MUTEX 1 +#define RTOS_FREERTOS 1 +#endif /* !NO_SYS */ +//#define MEMCPY(dst,src,len) memcpy(dst,src,len) +//#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +//***************************************************************************** +// +// ---------- Memory options ---------- +// +//***************************************************************************** +//#define MEM_LIBC_MALLOC 0 +#define MEM_ALIGNMENT 4 // default is 1 +#define MEM_SIZE (64 * 1024) // default is 1600, was 16K +//#define MEMP_OVERFLOW_CHECK 0 +//#define MEMP_SANITY_CHECK 0 +//#define MEM_USE_POOLS 0 +//#define MEMP_USE_CUSTOM_POOLS 0 + +//***************************************************************************** +// +// ---------- Internal Memory Pool Sizes ---------- +// +//***************************************************************************** +#define MEMP_NUM_PBUF 64 // Default 16 +//#define MEMP_NUM_RAW_PCB 4 +//#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 40 // Default is 5 +//#define MEMP_NUM_TCP_PCB_LISTEN 8 +#define MEMP_NUM_TCP_SEG 48 // Default is 16 +//#define MEMP_NUM_REASSDATA 5 +//#define MEMP_NUM_ARP_QUEUE 30 +//#define MEMP_NUM_IGMP_GROUP 8 +#define MEMP_NUM_SYS_TIMEOUT 10 +//#define MEMP_NUM_NETBUF 2 +//#define MEMP_NUM_NETCONN 4 +//#define MEMP_NUM_TCPIP_MSG_API 8 +//#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 64 // Default 16 + +//***************************************************************************** +// +// ---------- ARP options ---------- +// +//***************************************************************************** +//#define LWIP_ARP 1 +//#define ARP_TABLE_SIZE 10 +//#define ARP_QUEUEING 1 +//#define ETHARP_TRUST_IP_MAC 1 + +//***************************************************************************** +// +// ---------- IP options ---------- +// +//***************************************************************************** +//#define IP_FORWARD 0 +//#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 0 // default is 1 +#define IP_FRAG 0 // default is 1 +//#define IP_REASS_MAXAGE 3 +//#define IP_REASS_MAX_PBUFS 10 +//#define IP_FRAG_USES_STATIC_BUF 1 +//#define IP_FRAG_MAX_MTU 1500 +//#define IP_DEFAULT_TTL 255 + +//***************************************************************************** +// +// ---------- ICMP options ---------- +// +//***************************************************************************** +//#define LWIP_ICMP 1 +//#define ICMP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- RAW options ---------- +// +//***************************************************************************** +//#define LWIP_RAW 1 +//#define RAW_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- DHCP options ---------- +// +//***************************************************************************** +#define LWIP_DHCP 1 // default is 0 +//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) + +//***************************************************************************** +// +// ---------- UPNP options ---------- +// +//***************************************************************************** +//#define LWIP_UPNP 0 + +//***************************************************************************** +// +// ---------- PTPD options ---------- +// +//***************************************************************************** +//#define LWIP_PTPD 0 + +//***************************************************************************** +// +// ---------- AUTOIP options ---------- +// +//***************************************************************************** +#define LWIP_AUTOIP 1 // default is 0 +#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP)) + // default is 0 +#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9 + +//***************************************************************************** +// +// ---------- SNMP options ---------- +// +//***************************************************************************** +//#define LWIP_SNMP 0 +//#define SNMP_CONCURRENT_REQUESTS 1 +//#define SNMP_TRAP_DESTINATIONS 1 +//#define SNMP_PRIVATE_MIB 0 +//#define SNMP_SAFE_REQUESTS 1 + +//***************************************************************************** +// +// ---------- IGMP options ---------- +// +//***************************************************************************** +//#define LWIP_IGMP 0 + +//***************************************************************************** +// +// ---------- DNS options ----------- +// +//***************************************************************************** +//#define LWIP_DNS 0 +//#define DNS_TABLE_SIZE 4 +//#define DNS_MAX_NAME_LENGTH 256 +//#define DNS_MAX_SERVERS 2 +//#define DNS_DOES_NAME_CHECK 1 +//#define DNS_USES_STATIC_BUF 1 +//#define DNS_MSG_SIZE 512 + +//***************************************************************************** +// +// ---------- UDP options ---------- +// +//***************************************************************************** +//#define LWIP_UDP 1 +//#define LWIP_UDPLITE 0 +//#define UDP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- TCP options ---------- +// +//***************************************************************************** +//#define LWIP_TCP 1 +//#define TCP_TTL (IP_DEFAULT_TTL) +#define TCP_WND 4096 // default is 2048 +//#define TCP_MAXRTX 12 +//#define TCP_SYNMAXRTX 6 +//#define TCP_QUEUE_OOSEQ 1 +#define TCP_MSS 1500 // default is 128 +//#define TCP_CALCULATE_EFF_SEND_MSS 1 +#define TCP_SND_BUF (6 * TCP_MSS) + // default is 256 +#define TCP_SND_QUEUELEN (MEMP_NUM_TCP_SEG) + // default is (4 * (TCP_SND_BUF/TCP_MSS)) +//#define TCP_SNDLOWAT (TCP_SND_BUF/2) +//#define TCP_LISTEN_BACKLOG 0 +//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff + +//***************************************************************************** +// +// ---------- API options ---------- +// +//***************************************************************************** +//#define LWIP_EVENT_API 0 +//#define LWIP_CALLBACK_API 1 + +//***************************************************************************** +// +// ---------- Pbuf options ---------- +// +//***************************************************************************** +#define PBUF_LINK_HLEN 16 // default is 14 +#define PBUF_POOL_BUFSIZE 512 + // default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#define ETH_PAD_SIZE 0 // default is 0 + +//***************************************************************************** +// +// ---------- Network Interfaces options ---------- +// +//***************************************************************************** +//#define LWIP_NETIF_HOSTNAME 0 +//#define LWIP_NETIF_API 0 +//#define LWIP_NETIF_STATUS_CALLBACK 0 +//#define LWIP_NETIF_LINK_CALLBACK 0 +//#define LWIP_NETIF_HWADDRHINT 0 + +//***************************************************************************** +// +// ---------- LOOPIF options ---------- +// +//***************************************************************************** +//#define LWIP_HAVE_LOOPIF 0 +//#define LWIP_LOOPIF_MULTITHREADING 1 + +//***************************************************************************** +// +// ---------- Thread options ---------- +// +//***************************************************************************** +#define TCPIP_THREAD_NAME "tcpip_thread" +#define TCPIP_THREAD_STACKSIZE 1024 +#define TCPIP_THREAD_PRIO 3 +#define TCPIP_MBOX_SIZE 32 +//#define SLIPIF_THREAD_NAME "slipif_loop" +//#define SLIPIF_THREAD_STACKSIZE 0 +//#define SLIPIF_THREAD_PRIO 1 +//#define PPP_THREAD_NAME "pppMain" +//#define PPP_THREAD_STACKSIZE 0 +//#define PPP_THREAD_PRIO 1 +//#define DEFAULT_THREAD_NAME "lwIP" +//#define DEFAULT_THREAD_STACKSIZE 0 +//#define DEFAULT_THREAD_PRIO 1 +//#define DEFAULT_RAW_RECVMBOX_SIZE 0 +//#define DEFAULT_UDP_RECVMBOX_SIZE 0 +//#define DEFAULT_TCP_RECVMBOX_SIZE 0 +//#define DEFAULT_ACCEPTMBOX_SIZE 0 + +//***************************************************************************** +// +// ---------- Sequential layer options ---------- +// +//***************************************************************************** +//#define LWIP_TCPIP_CORE_LOCKING 0 +#define LWIP_NETCONN 0 // default is 1 + +//***************************************************************************** +// +// ---------- Socket Options ---------- +// +//***************************************************************************** +#define LWIP_SOCKET 0 // default is 1 +//#define LWIP_COMPAT_SOCKETS 1 +//#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +//#define LWIP_TCP_KEEPALIVE 0 +//#define LWIP_SO_RCVTIMEO 0 +//#define LWIP_SO_RCVBUF 0 +//#define SO_REUSE 0 + +//***************************************************************************** +// +// ---------- Statistics options ---------- +// +//***************************************************************************** +//#define LWIP_STATS 1 +//#define LWIP_STATS_DISPLAY 0 +//#define LINK_STATS 1 +//#define ETHARP_STATS (LWIP_ARP) +//#define IP_STATS 1 +//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +//#define ICMP_STATS 1 +//#define IGMP_STATS (LWIP_IGMP) +//#define UDP_STATS (LWIP_UDP) +//#define TCP_STATS (LWIP_TCP) +//#define MEM_STATS 1 +//#define MEMP_STATS 1 +//#define SYS_STATS 1 +#define LWIP_STATS_LARGE 1 + +//***************************************************************************** +// +// ---------- PPP options ---------- +// +//***************************************************************************** +//#define PPP_SUPPORT 0 +//#define PPPOE_SUPPORT 0 +//#define PPPOS_SUPPORT PPP_SUPPORT + +#if PPP_SUPPORT +//#define NUM_PPP 1 +//#define PAP_SUPPORT 0 +//#define CHAP_SUPPORT 0 +//#define MSCHAP_SUPPORT 0 +//#define CBCP_SUPPORT 0 +//#define CCP_SUPPORT 0 +//#define VJ_SUPPORT 0 +//#define MD5_SUPPORT 0 +//#define FSM_DEFTIMEOUT 6 +//#define FSM_DEFMAXTERMREQS 2 +//#define FSM_DEFMAXCONFREQS 10 +//#define FSM_DEFMAXNAKLOOPS 5 +//#define UPAP_DEFTIMEOUT 6 +//#define UPAP_DEFREQTIME 30 +//#define CHAP_DEFTIMEOUT 6 +//#define CHAP_DEFTRANSMITS 10 +//#define LCP_ECHOINTERVAL 0 +//#define LCP_MAXECHOFAILS 3 +//#define PPP_MAXIDLEFLAG 100 + +//#define PPP_MAXMTU 1500 +//#define PPP_DEFMRU 296 +#endif + +//***************************************************************************** +// +// ---------- checksum options ---------- +// +//***************************************************************************** +#define CHECKSUM_GEN_IP 0 +#define CHECKSUM_GEN_UDP 0 +#define CHECKSUM_GEN_TCP 0 +#define CHECKSUM_CHECK_IP 0 +#define CHECKSUM_CHECK_UDP 0 +#define CHECKSUM_CHECK_TCP 0 + +//***************************************************************************** +// +// ---------- Debugging options ---------- +// +//***************************************************************************** +#if 0 +#define U8_F "c" +#define S8_F "c" +#define X8_F "x" +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" +extern void UARTprintf(const char *pcString, ...); +#define LWIP_DEBUG +#endif + +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE + +//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH) + +//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF +//#define NETIF_DEBUG LWIP_DBG_ON // default is OFF +//#define PBUF_DEBUG LWIP_DBG_OFF +//#define API_LIB_DEBUG LWIP_DBG_OFF +//#define API_MSG_DEBUG LWIP_DBG_OFF +//#define SOCKETS_DEBUG LWIP_DBG_OFF +//#define ICMP_DEBUG LWIP_DBG_OFF +//#define IGMP_DEBUG LWIP_DBG_OFF +//#define INET_DEBUG LWIP_DBG_OFF +//#define IP_DEBUG LWIP_DBG_ON // default is OFF +//#define IP_REASS_DEBUG LWIP_DBG_OFF +//#define RAW_DEBUG LWIP_DBG_OFF +//#define MEM_DEBUG LWIP_DBG_OFF +//#define MEMP_DEBUG LWIP_DBG_OFF +//#define SYS_DEBUG LWIP_DBG_OFF +//#define TCP_DEBUG LWIP_DBG_OFF +//#define TCP_INPUT_DEBUG LWIP_DBG_OFF +//#define TCP_FR_DEBUG LWIP_DBG_OFF +//#define TCP_RTO_DEBUG LWIP_DBG_OFF +//#define TCP_CWND_DEBUG LWIP_DBG_OFF +//#define TCP_WND_DEBUG LWIP_DBG_OFF +//#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +//#define TCP_RST_DEBUG LWIP_DBG_OFF +//#define TCP_QLEN_DEBUG LWIP_DBG_OFF +//#define UDP_DEBUG LWIP_DBG_ON // default is OFF +//#define TCPIP_DEBUG LWIP_DBG_OFF +//#define PPP_DEBUG LWIP_DBG_OFF +//#define SLIP_DEBUG LWIP_DBG_OFF +//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF +//#define AUTOIP_DEBUG LWIP_DBG_OFF +//#define SNMP_MSG_DEBUG LWIP_DBG_OFF +//#define SNMP_MIB_DEBUG LWIP_DBG_OFF +//#define DNS_DEBUG LWIP_DBG_OFF + +#endif /* __LWIPOPTS_H__ */ diff --git a/boards/dk-tm4c129x/freertos_demo/priorities.h b/boards/dk-tm4c129x/freertos_demo/priorities.h new file mode 100644 index 0000000..b25e0c8 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/priorities.h @@ -0,0 +1,39 @@ +//***************************************************************************** +// +// priorities.h - Priorities for the various FreeRTOS tasks. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __PRIORITIES_H__ +#define __PRIORITIES_H__ + +//***************************************************************************** +// +// The priorities of the various tasks. +// +//***************************************************************************** +#define PRIORITY_LED_TASK 4 +#define PRIORITY_HTTPD_TASK 3 +#define PRIORITY_DISPLAY_TASK 2 +#define PRIORITY_CONTROL_TASK 1 +#define PRIORITY_SPIDER_TASK 0 + +#endif // __PRIORITIES_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/random.c b/boards/dk-tm4c129x/freertos_demo/random.c new file mode 100644 index 0000000..6918a8f --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/random.c @@ -0,0 +1,176 @@ +//***************************************************************************** +// +// random.c - Random number generator utilizing MD4 hash function of +// environmental noise captured as the seed and a linear congruence +// generator for the random numbers. +// +// Copyright (c) 2005-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "random.h" + +//***************************************************************************** +// +// The pool of entropy that has been collected. +// +//***************************************************************************** +static uint32_t g_pui32RandomEntropy[16]; + +//***************************************************************************** +// +// The index of the next byte to be added to the entropy pool. +// +//***************************************************************************** +static uint32_t g_ui32RandomIndex = 0; + +//***************************************************************************** +// +// The random number seed, which corresponds to the most recently returned +// random number. This is set based on the entropy-generated random number +// by RandomSeed(). +// +//***************************************************************************** +static uint32_t g_ui32RandomSeed = 0; + +//***************************************************************************** +// +// Add entropy to the pool. +// +//***************************************************************************** +void +RandomAddEntropy(uint32_t ui32Entropy) +{ + // + // Add this byte to the entropy pool. + // + ((uint8_t *)g_pui32RandomEntropy)[g_ui32RandomIndex] = ui32Entropy & 0xff; + + // + // Increment to the next byte of the entropy pool. + // + g_ui32RandomIndex = (g_ui32RandomIndex + 1) & 63; +} + +//***************************************************************************** +// +// Seed the random number generator by running a MD4 hash on the entropy pool. +// Note that the entropy pool may change from beneath us, but for the purposes +// of generating random numbers that is not a concern. Also, the MD4 hash was +// broken long ago, but since it is being used to generate random numbers +// instead of providing security this is not a concern. +// +//***************************************************************************** +void +RandomSeed(void) +{ + uint32_t ui32A, ui32B, ui32C, ui32D, ui32Temp, ui32Idx; + + // + // Initialize the digest. + // + ui32A = 0x67452301; + ui32B = 0xefcdab89; + ui32C = 0x98badcfe; + ui32D = 0x10325476; + + // + // Perform the first round of operations. + // +#define F(a, b, c, d, k, s) \ + { \ + ui32Temp = a + (d ^ (b & (c ^ d))) + g_pui32RandomEntropy[k]; \ + a = (ui32Temp << s) | (ui32Temp >> (32 - s)); \ + } + for(ui32Idx = 0; ui32Idx < 16; ui32Idx += 4) + { + F(ui32A, ui32B, ui32C, ui32D, ui32Idx + 0, 3); + F(ui32D, ui32A, ui32B, ui32C, ui32Idx + 1, 7); + F(ui32C, ui32D, ui32A, ui32B, ui32Idx + 2, 11); + F(ui32B, ui32C, ui32D, ui32A, ui32Idx + 3, 19); + } + + // + // Perform the second round of operations. + // +#define G(a, b, c, d, k, s) \ + { \ + ui32Temp = a + ((b & c) | (b & d) | (c & d)) + \ + g_pui32RandomEntropy[k] + 0x5a827999; \ + a = (ui32Temp << s) | (ui32Temp >> (32 - s)); \ + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx++) + { + G(ui32A, ui32B, ui32C, ui32D, ui32Idx + 0, 3); + G(ui32D, ui32A, ui32B, ui32C, ui32Idx + 4, 5); + G(ui32C, ui32D, ui32A, ui32B, ui32Idx + 8, 9); + G(ui32B, ui32C, ui32D, ui32A, ui32Idx + 12, 13); + } + + // + // Perform the third round of operations. + // +#define H(a, b, c, d, k, s) \ + { \ + ui32Temp = a + (b ^ c ^ d) + g_pui32RandomEntropy[k] + 0x6ed9eba1; \ + a = (ui32Temp << s) | (ui32Temp >> (32 - s)); \ + } + for(ui32Idx = 0; ui32Idx < 4; ui32Idx += 2) + { + H(ui32A, ui32B, ui32C, ui32D, ui32Idx + 0, 3); + H(ui32D, ui32A, ui32B, ui32C, ui32Idx + 8, 9); + H(ui32C, ui32D, ui32A, ui32B, ui32Idx + 4, 11); + H(ui32B, ui32C, ui32D, ui32A, ui32Idx + 12, 15); + + if(ui32Idx == 2) + { + ui32Idx -= 3; + } + } + + // + // Use the first word of the resulting digest as the random number seed. + // + g_ui32RandomSeed = ui32A + 0x67452301; +} + +//***************************************************************************** +// +// Generate a new random number. The number returned would more accruately be +// described as a pseudo-random number since a linear congruence generator is +// being used. +// +//***************************************************************************** +uint32_t +RandomNumber(void) +{ + // + // Generate a new pseudo-random number with a linear congruence random + // number generator. This new random number becomes the seed for the next + // random number. + // + g_ui32RandomSeed = (g_ui32RandomSeed * 1664525) + 1013904223; + + // + // Return the new random number. + // + return(g_ui32RandomSeed); +} diff --git a/boards/dk-tm4c129x/freertos_demo/random.h b/boards/dk-tm4c129x/freertos_demo/random.h new file mode 100644 index 0000000..2924e7b --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/random.h @@ -0,0 +1,37 @@ +//***************************************************************************** +// +// random.h - Protoytpes for the random number generator. +// +// Copyright (c) 2005-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __RANDOM_H__ +#define __RANDOM_H__ + +//***************************************************************************** +// +// Prototypes for the random number generator functions. +// +//***************************************************************************** +extern void RandomAddEntropy(uint32_t ui32Entropy); +extern void RandomSeed(void); +extern uint32_t RandomNumber(void); + +#endif // __RANDOM_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/readme.txt b/boards/dk-tm4c129x/freertos_demo/readme.txt new file mode 100644 index 0000000..050e4d4 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/readme.txt @@ -0,0 +1,66 @@ +FreeRTOS Example + +This application utilizes FreeRTOS to perform a variety of tasks in a +concurrent fashion. The following tasks are created: + +* An lwIP task, which serves up web pages via the Ethernet interface. This + is actually two tasks, one which runs the lwIP stack and one which + manages the Ethernet interface (sending and receiving raw packets). + +* An LED task, which simply blinks the on-board LED at a user-controllable + rate (changed via the web interface). + +* A set of spider tasks, each of which controls a spider that crawls around + the LCD. The speed at which the spiders move is controllable via the web + interface. Up to thirty-two spider tasks can be run concurrently (an + application-imposed limit). + +* A spider control task, which manages presses on the touch screen and + determines if a spider task should be terminated (if the spider is + ``squished'') or if a new spider task should be created (if no spider is + ``squished''). + +* There is an automatically created idle task, which monitors changes in + the board's IP address and sends those changes to the user via a UART + message. + +Across the bottom of the LCD, several status items are displayed: the +amount of time the application has been running, the number of tasks that +are running, the IP address of the board, the number of Ethernet packets +that have been transmitted, and the number of Ethernet packets that have +been received. + +The finder application (in tools/finder) can also be used to discover the +IP address of the board. The finder application will search the network +for all boards that respond to its requests and display information about +them. + +The web site served by lwIP includes the ability to adjust the toggle rate +of the LED task and the update speed of the spiders (all spiders move at +the same speed). + +For additional details on FreeRTOS, refer to the FreeRTOS web page at: +http://www.freertos.org/ + +For additional details on lwIP, refer to the lwIP web page at: +http://savannah.nongnu.org/projects/lwip/ + +------------------------------------------------------------------------------- + +Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.axf b/boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.axf new file mode 100644 index 0000000..2e53549 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.axf differ diff --git a/boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.bin b/boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.bin new file mode 100644 index 0000000..ae3e724 Binary files /dev/null and b/boards/dk-tm4c129x/freertos_demo/rvmdk/freertos_demo.bin differ diff --git a/boards/dk-tm4c129x/freertos_demo/spider_task.c b/boards/dk-tm4c129x/freertos_demo/spider_task.c new file mode 100644 index 0000000..2f530c0 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/spider_task.c @@ -0,0 +1,855 @@ +//***************************************************************************** +// +// spider_task.c - Tasks to animate a set of spiders on the LCD, one task per +// spider. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_types.h" +#include "driverlib/interrupt.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "drivers/touch.h" +#include "display_task.h" +#include "idle_task.h" +#include "images.h" +#include "priorities.h" +#include "random.h" +#include "freertos_demo.h" +#include "spider_task.h" +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "semphr.h" +//***************************************************************************** +// +// The stack size for the spider control task. +// +//***************************************************************************** +# define STACKSIZE_CONTROLTASK 128 + +//***************************************************************************** +// +// The stack sizes for the spider tasks. +// +//***************************************************************************** +# define STACKSIZE_SPIDERTASK 128 + +//***************************************************************************** +// +// The following define the screen area in which the spiders are allowed to +// roam +// +//***************************************************************************** +#define AREA_X 8 +#define AREA_Y 24 +#define AREA_WIDTH 303 +#define AREA_HEIGHT (231 - 24 - 20) + +//***************************************************************************** +// +// The size of the spider images. +// +//***************************************************************************** +#define SPIDER_WIDTH 24 +#define SPIDER_HEIGHT 24 + +//***************************************************************************** +// +// The following define the extents of the centroid of the spiders. +// +//***************************************************************************** +#define SPIDER_MIN_X (AREA_X + (SPIDER_WIDTH / 2)) +#define SPIDER_MAX_X (AREA_X + AREA_WIDTH - (SPIDER_WIDTH / 2)) +#define SPIDER_MIN_Y (AREA_Y + (SPIDER_HEIGHT / 2)) +#define SPIDER_MAX_Y (AREA_Y + AREA_HEIGHT - (SPIDER_HEIGHT / 2)) + +//***************************************************************************** +// +// The item size, queue size, and memory size for the spider control message +// queue. +// +//***************************************************************************** +#define CONTROL_ITEM_SIZE sizeof(unsigned long) +#define CONTROL_QUEUE_SIZE 10 + +//***************************************************************************** +// +// The queue that holds messages sent to the spider control task. +// +//***************************************************************************** +static xQueueHandle g_pControlQueue; + +//***************************************************************************** +// +// The amount the spider moves horizontally for each direction of movement. +// +// For this and all subsequent arrays that are indexed by direction of +// movement, the indices are as follows: +// +// 0 => right +// 1 => right and down +// 2 => down +// 3 => left and down +// 4 => left +// 5 => left and up +// 6 => up +// 7 => right and up +// +//***************************************************************************** +static const int32_t g_pi32SpiderStepX[8] = +{ + 1, 1, 0, -1, -1, -1, 0, 1 +}; + +//***************************************************************************** +// +// The amount the spider moves vertically for each direction of movement. +// +//***************************************************************************** +static const int32_t g_pi32SpiderStepY[8] = +{ + 0, 1, 1, 1, 0, -1, -1, -1 +}; + +//***************************************************************************** +// +// The animation images for the spider, two per direction of movement. In +// other words, entries 0 and 1 correspond to direction 0 (right), entries 2 +// and 3 correspond to direction 1 (right and down), etc. +// +//***************************************************************************** +static const uint8_t *g_ppui8SpiderImage[16] = +{ + g_pui8SpiderR1Image, + g_pui8SpiderR2Image, + g_pui8SpiderDR1Image, + g_pui8SpiderDR2Image, + g_pui8SpiderD1Image, + g_pui8SpiderD2Image, + g_pui8SpiderDL1Image, + g_pui8SpiderDL2Image, + g_pui8SpiderL1Image, + g_pui8SpiderL2Image, + g_pui8SpiderUL1Image, + g_pui8SpiderUL2Image, + g_pui8SpiderU1Image, + g_pui8SpiderU2Image, + g_pui8SpiderUR1Image, + g_pui8SpiderUR2Image +}; + +//***************************************************************************** +// +// The number of ticks to delay a spider task based on the direction of +// movement. This array has only two entries; the first corresponding to +// horizontal and vertical movement, and the second corresponding to diagonal +// movement. By having the second entry be 1.4 times the first, the spiders +// are updated slower when moving along the diagonal to compensate for the +// fact that each step is further (since it is moving one step in both the +// horizontal and vertical). +// +//***************************************************************************** +uint32_t g_pui32SpiderDelay[2]; + +//***************************************************************************** +// +// The horizontal position of the spiders. +// +//***************************************************************************** +static int32_t g_pi32SpiderX[MAX_SPIDERS]; + +//***************************************************************************** +// +// The vertical position of the spiders. +// +//***************************************************************************** +static int32_t g_pi32SpiderY[MAX_SPIDERS]; + +//***************************************************************************** +// +// A bitmap that indicates which spiders are alive (which corresponds to a +// running task for that spider). +// +//***************************************************************************** +static uint32_t g_ui32SpiderAlive; + +//***************************************************************************** +// +// A bitmap that indicates which spiders have been killed (by touching them). +// +//***************************************************************************** +static uint32_t g_ui32SpiderDead; +xTaskHandle g_sSpiderTask; // FIXME +//***************************************************************************** +// +// Determines if a given point collides with one of the spiders. The spider +// specified is ignored when doing collision detection in order to prevent a +// false collision with itself (when checking to see if it is safe to move the +// spider). +// +//***************************************************************************** +static int32_t +SpiderCollide(int32_t i32Spider, int32_t i32X, int32_t i32Y) +{ + int32_t i32Idx, i32DX, i32DY; + + // + // Loop through all the spiders. + // + for(i32Idx = 0; i32Idx < MAX_SPIDERS; i32Idx++) + { + // + // Skip this spider if it is not alive or is the spider that should be + // ignored. + // + if((HWREGBITW(&g_ui32SpiderAlive, i32Idx) == 0) || + (i32Idx == i32Spider)) + { + continue; + } + + // + // Compute the horizontal and vertical difference between this spider's + // position and the point in question. + // + i32DX = ((g_pi32SpiderX[i32Idx] > i32X) ? + (g_pi32SpiderX[i32Idx] - i32X) : + (i32X - g_pi32SpiderX[i32Idx])); + i32DY = ((g_pi32SpiderY[i32Idx] > i32Y) ? + (g_pi32SpiderY[i32Idx] - i32Y) : + (i32Y - g_pi32SpiderY[i32Idx])); + + // + // Return this spider index if the point in question collides with it. + // + if((i32DX < SPIDER_WIDTH) && (i32DY < SPIDER_HEIGHT)) + { + return(i32Idx); + } + } + + // + // No collision was detected. + // + return(-1); +} + +//***************************************************************************** +// +// This task manages the scurrying about of a spider. +// +//***************************************************************************** +static void +SpiderTask(void *pvParameters) +{ + uint32_t ui32Dir, ui32Image, ui32Temp; + int32_t i32X, i32Y, i32Spider; + + // + // Get the spider number from the parameter. + // + i32Spider = (long)pvParameters; + + // + // Add the current tick count to the random entropy pool. + // + RandomAddEntropy(xTaskGetTickCount()); + + // + // Reseed the random number generator. + // + RandomSeed(); + + // + // Indicate that this spider is alive. + // + HWREGBITW(&g_ui32SpiderAlive, i32Spider) = 1; + + // + // Indicate that this spider is not dead yet. + // + HWREGBITW(&g_ui32SpiderDead, i32Spider) = 0; + + // + // Get a local copy of the spider's starting position. + // + i32X = g_pi32SpiderX[i32Spider]; + i32Y = g_pi32SpiderY[i32Spider]; + + // + // Choose a random starting direction for the spider. + // + ui32Dir = RandomNumber() >> 29; + + // + // Start by displaying the first of the two spider animation images. + // + ui32Image = 0; + + // + // Loop forever. + // + while(1) + { + // + // See if this spider has been killed. + // + if(HWREGBITW(&g_ui32SpiderDead, i32Spider) == 1) + { + // + // Wait for 2 seconds. + // + vTaskDelay((1000 / portTICK_RATE_MS) * 2); + + // + // Clear the spider from the display. + // + DisplayImage(i32X - (SPIDER_WIDTH / 2), i32Y - (SPIDER_HEIGHT / 2), + g_pui8SpiderBlankImage); + + // + // Indicate that this spider is not alive. + // + HWREGBITW(&g_ui32SpiderAlive, i32Spider) = 0; + + // + // Delete the current task. This should never return. + // + vTaskDelete(NULL); + + // + // In case it does return, loop forever. + // + while(1) + { + } + } + + // + // Enter a critical section while the next move for the spider is + // determined. Having more than one spider trying to move at a time + // (via preemption) would make the collision detection check fail. + // + taskENTER_CRITICAL(); + + // + // Move the spider. + // + i32X += g_pi32SpiderStepX[ui32Dir]; + i32Y += g_pi32SpiderStepY[ui32Dir]; + + // + // See if the spider has cross the boundary of its area, if it has + // collided with another spider, or if random chance says that the + // spider should turn despite not having collided with anything. + // + if((i32X < SPIDER_MIN_X) || (i32X > SPIDER_MAX_X) || + (i32Y < SPIDER_MIN_Y) || (i32Y > SPIDER_MAX_Y) || + (SpiderCollide(i32Spider, i32X, i32Y) != -1) || + (RandomNumber() < 0x08000000)) + { + // + // Undo the previous movement of the spider. + // + i32X -= g_pi32SpiderStepX[ui32Dir]; + i32Y -= g_pi32SpiderStepY[ui32Dir]; + + // + // Get a random number to determine the turn to be made. + // + ui32Temp = RandomNumber(); + + // + // Determine how to turn the spider based on the random number. + // Half the time the spider turns to the left and half the time it + // turns to the right. Of each half, it turns a quarter of a turn + // 12.5% of the time and an eighth of a turn 87.5% of the time. + // + if(ui32Temp < 0x10000000) + { + ui32Dir = (ui32Dir + 2) & 7; + } + else if(ui32Temp < 0x80000000) + { + ui32Dir = (ui32Dir + 1) & 7; + } + else if(ui32Temp < 0xf0000000) + { + ui32Dir = (ui32Dir - 1) & 7; + } + else + { + ui32Dir = (ui32Dir - 2) & 7; + } + } + + // + // Update the position of the spider. + // + g_pi32SpiderX[i32Spider] = i32X; + g_pi32SpiderY[i32Spider] = i32Y; + + // + // Exit the critical section now that the spider has been moved. + // + taskEXIT_CRITICAL(); + + // + // Have the display task draw the spider at the new position. Since + // there is a one pixel empty border around all the images, and the + // position of the spider is incremented by only one pixel, this also + // erases any traces of the spider in its previous position. + // + DisplayImage(i32X - (SPIDER_WIDTH / 2), i32Y - (SPIDER_HEIGHT / 2), + g_ppui8SpiderImage[(ui32Dir * 2) + ui32Image]); + + // + // Toggle the spider animation index. + // + ui32Image ^= 1; + + // + // Delay this task for an amount of time based on the direction the + // spider is moving. + // + vTaskDelay(g_pui32SpiderDelay[ui32Dir & 1]); + + // + // Add the new tick count to the random entropy pool. + // + RandomAddEntropy(xTaskGetTickCount()); + + // + // Reseed the random number generator. + // + RandomSeed(); + } +} + +//***************************************************************************** +// +// Creates a spider task. +// +//***************************************************************************** +static uint32_t +CreateSpider(int32_t i32X, int32_t i32Y) +{ + uint32_t ui32Spider; + + // + // Search to see if there is a spider task available. + // + for(ui32Spider = 0; ui32Spider < MAX_SPIDERS; ui32Spider++) + { + if(HWREGBITW(&g_ui32SpiderAlive, ui32Spider) == 0) + { + break; + } + } + + // + // Return a failure if no spider tasks are available (in other words, the + // maximum number of spiders are already alive). + // + if(ui32Spider == MAX_SPIDERS) + { + return(1); + } + + // + // Adjust the starting horizontal position to make sure it is inside the + // allowable area for the spiders. + // + if(i32X < SPIDER_MIN_X) + { + i32X = SPIDER_MIN_X; + } + else if(i32X > SPIDER_MAX_X) + { + i32X = SPIDER_MAX_X; + } + + // + // Adjust the starting vertical position to make sure it is inside the + // allowable area for the spiders. + // + if(i32Y < SPIDER_MIN_Y) + { + i32Y = SPIDER_MIN_Y; + } + else if(i32Y > SPIDER_MAX_Y) + { + i32Y = SPIDER_MAX_Y; + } + + // + // Save the starting position for this spider. + // + g_pi32SpiderX[ui32Spider] = i32X; + g_pi32SpiderY[ui32Spider] = i32Y; + + // + // Create a task to animate this spider. + // + if(xTaskCreate(SpiderTask, (signed portCHAR *)"Spider", + STACKSIZE_SPIDERTASK, (void *)ui32Spider, + tskIDLE_PRIORITY + PRIORITY_SPIDER_TASK, NULL) != pdTRUE) + { + return(1); + } + + // + // Success. + // + return(0); +} + +//***************************************************************************** +// +// The callback function for messages from the touch screen driver. +// +//***************************************************************************** +static int32_t +ControlTouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + portBASE_TYPE bTaskWaken; + + // + // Ignore all messages other than pointer down messages. + // + if(ui32Message != WIDGET_MSG_PTR_DOWN) + { + return(0); + } + + // + // Pack the position into a message to send to the spider control task. + // + ui32Message = ((i32X & 65535) << 16) | (i32Y & 65535); + + // + // Send the position message to the spider control task. + // + xQueueSendFromISR(g_pControlQueue, &ui32Message, &bTaskWaken); + + // + // Perform a task yield if necessary. + // +#if defined(__Check_Later) + taskYIELD_FROM_ISR(bTaskWaken); +#endif + + // + // This message has been handled. + // + return(0); +} + +//***************************************************************************** +// +// Determines if a given touch screen point collides with one of the spiders. +// +//***************************************************************************** +static int32_t +SpiderTouchCollide(int32_t i32X, int32_t i32Y) +{ + int32_t i32Idx, i32DX, i32DY, i32Best, i32Dist; + + // + // Until a collision is found, there is no best spider choice. + // + i32Best = -1; + i32Dist = 1000000; + + // + // Loop through all the spiders. + // + for(i32Idx = 0; i32Idx < MAX_SPIDERS; i32Idx++) + { + // + // Skip this spider if it is not alive. + // + if((HWREGBITW(&g_ui32SpiderAlive, i32Idx) == 0) || + (HWREGBITW(&g_ui32SpiderDead, i32Idx) == 1)) + { + continue; + } + + // + // Compute the horizontal and vertical difference between this spider's + // position and the point in question. + // + i32DX = ((g_pi32SpiderX[i32Idx] > i32X) ? + (g_pi32SpiderX[i32Idx] - i32X) : + (i32X - g_pi32SpiderX[i32Idx])); + i32DY = ((g_pi32SpiderY[i32Idx] > i32Y) ? + (g_pi32SpiderY[i32Idx] - i32Y) : + (i32Y - g_pi32SpiderY[i32Idx])); + + // + // See if the point in question collides with this spider. + // + if((i32DX < (SPIDER_WIDTH + 4)) && (i32DY < (SPIDER_HEIGHT + 4))) + { + // + // Compute distance (squared) between this point and the spider. + // + i32DX = (i32DX * i32DX) + (i32DY * i32DY); + + // + // See if this spider is closer to the point in question than any + // other spider encountered. + // + if(i32DX < i32Dist) + { + // + // Save this spider as the new best choice. + // + i32Best = i32Idx; + i32Dist = i32DX; + } + } + } + + // + // Return the best choice, if one was found. + // + if(i32Best != -1) + { + return(i32Best); + } + + // + // Loop through all the spiders. This time, the spiders that are dead but + // not cleared from the screen are not ignored. + // + for(i32Idx = 0; i32Idx < MAX_SPIDERS; i32Idx++) + { + // + // Skip this spider if it is not alive. + // + if(HWREGBITW(&g_ui32SpiderAlive, i32Idx) == 0) + { + continue; + } + + // + // Compute the horizontal and vertical difference between this spider's + // position and the point in question. + // + i32DX = ((g_pi32SpiderX[i32Idx] > i32X) ? + (g_pi32SpiderX[i32Idx] - i32X) : + (i32X - g_pi32SpiderX[i32Idx])); + i32DY = ((g_pi32SpiderY[i32Idx] > i32Y) ? + (g_pi32SpiderY[i32Idx] - i32Y) : + (i32Y - g_pi32SpiderY[i32Idx])); + + // + // See if the point in question collides with this spider. + // + if((i32DX < (SPIDER_WIDTH + 4)) && (i32DY < (SPIDER_HEIGHT + 4))) + { + // + // Compute distance (squared) between this point and the spider. + // + i32DX = (i32DX * i32DX) + (i32DY * i32DY); + + // + // See if this spider is closer to the point in question than any + // other spider encountered. + // + if(i32DX < i32Dist) + { + // + // Save this spider as the new best choice. + // + i32Best = i32Idx; + i32Dist = i32DX; + } + } + } + + // + // Return the best choice, if one was found. + // + return(i32Best); +} + +//***************************************************************************** +// +// This task provides overall control of the spiders, spawning and killing them +// in response to presses on the touch screen. +// +//***************************************************************************** +static void +ControlTask(void *pvParameters) +{ + uint32_t ui32Message; + int32_t i32X, i32Y, i32Spider; + + // + // Initialize the touch screen driver and register a callback function. + // + TouchScreenInit(g_ui32SysClock); + TouchScreenCallbackSet(ControlTouchCallback); + + // + // Lower the priority of the touch screen interrupt handler. This is + // required so that the interrupt handler can safely call the interrupt- + // safe FreeRTOS functions (specifically to send messages to the queue). + // + IntPrioritySet(INT_ADC0SS3, 0xc0); + + // + // Loop forever. + // + while(1) + { + // + // Read the next message from the queue. + // + if(xQueueReceive(g_pControlQueue, &ui32Message, portMAX_DELAY) == + pdPASS) + { + // + // Extract the position of the screen touch from the message. + // + i32X = ui32Message >> 16; + i32Y = ui32Message & 65535; + + // + // Ignore this screen touch if it is not inside the spider area. + // + if((i32X >= AREA_X) && (i32X < (AREA_X + AREA_WIDTH)) && + (i32Y >= AREA_Y) && (i32Y < (AREA_Y + AREA_HEIGHT))) + { + // + // See if this position collides with any of the spiders. + // + i32Spider = SpiderTouchCollide(i32X, i32Y); + if(i32Spider == -1) + { + // + // There is no collision, so create a new spider (if + // possible) at this position. + // + CreateSpider(i32X, i32Y); + } + else + { + // + // There is a collision, so kill this spider. + // + HWREGBITW(&g_ui32SpiderDead, i32Spider) = 1; + } + } + } + } +} + +//***************************************************************************** +// +// Sets the speed of the spiders by specifying the number of milliseconds +// between updates to the spider's position. +// +//***************************************************************************** +void +SpiderSpeedSet(uint32_t ui32Speed) +{ + // + // Convert the update rate from milliseconds to ticks. The second entry + // of the array is 1.4 times the first so that updates when moving along + // the diagonal, which are longer steps, are done less frequently by a + // proportional amount. + // + g_pui32SpiderDelay[0] = (ui32Speed * (1000 / portTICK_RATE_MS)) / 1000; + g_pui32SpiderDelay[1] = (ui32Speed * 14 * (1000 / portTICK_RATE_MS)) / + 10000; +} + +//***************************************************************************** +// +// Initializes the spider tasks. +// +//***************************************************************************** +uint32_t +SpiderTaskInit(void) +{ + uint32_t ui32Idx; + + // + // Set the initial speed of the spiders. + // + SpiderSpeedSet(10); + + // + // Create a queue for sending messages to the spider control task. + // + g_pControlQueue = xQueueCreate(CONTROL_QUEUE_SIZE, CONTROL_QUEUE_SIZE); + if(g_pControlQueue == NULL) + { + return(1); + } + + // + // Create the spider control task. + // + if(xTaskCreate(ControlTask, (signed portCHAR *)"ControlTask", + STACKSIZE_CONTROLTASK, NULL, + tskIDLE_PRIORITY + PRIORITY_CONTROL_TASK, &g_sSpiderTask) != pdTRUE) + {// FIXME + return(1); + } + + // + // Create eight spiders initially. + // + for(ui32Idx = 0; ui32Idx < 8; ui32Idx++) + { + // + // Create a spider that is centered vertically and equally spaced + // horizontally across the display. + // + if(CreateSpider((ui32Idx * (AREA_WIDTH / 8)) + (AREA_WIDTH / 16), + (AREA_HEIGHT / 2) + AREA_Y) == 1) + { + return(1); + } + + // + // Provide an early indication that this spider is alive. The task is + // not running yet (since this function is called before the scheduler + // has been started) so this variable is not set by the task (yet). + // Manually setting it allows the remaining initial spiders to be + // created properly. + // + HWREGBITW(&g_ui32SpiderAlive, ui32Idx) = 1; + } + + // + // Success. + // + return(0); +} diff --git a/boards/dk-tm4c129x/freertos_demo/spider_task.h b/boards/dk-tm4c129x/freertos_demo/spider_task.h new file mode 100644 index 0000000..e39af88 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/spider_task.h @@ -0,0 +1,44 @@ +//***************************************************************************** +// +// spider_task.h - Prototypes for the spider tasks. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __SPIDER_TASK_H__ +#define __SPIDER_TASK_H__ + +//***************************************************************************** +// +// The maximum number of spider tasks. +// +//***************************************************************************** +#define MAX_SPIDERS 32 + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern uint32_t g_pui32SpiderDelay[2]; +extern void SpiderSpeedSet(uint32_t ui32Speed); +extern uint32_t SpiderTaskInit(void); + +#endif // __SPIDER_TASK_H__ diff --git a/boards/dk-tm4c129x/freertos_demo/startup_ccs.c b/boards/dk-tm4c129x/freertos_demo/startup_ccs.c new file mode 100644 index 0000000..0cffa93 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/startup_ccs.c @@ -0,0 +1,279 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void xPortPendSVHandler(void); +extern void vPortSVCHandler(void); +extern void xPortSysTickHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + vPortSVCHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + xPortPendSVHandler, // The PendSV handler + xPortSysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/freertos_demo/startup_ewarm.c b/boards/dk-tm4c129x/freertos_demo/startup_ewarm.c new file mode 100644 index 0000000..e62ffaf --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/startup_ewarm.c @@ -0,0 +1,310 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void xPortPendSVHandler(void); +extern void vPortSVCHandler(void); +extern void xPortSysTickHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[1024] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + vPortSVCHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + xPortPendSVHandler, // The PendSV handler + xPortSysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/freertos_demo/startup_gcc.c b/boards/dk-tm4c129x/freertos_demo/startup_gcc.c new file mode 100644 index 0000000..2ab65a5 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/startup_gcc.c @@ -0,0 +1,326 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void xPortPendSVHandler(void); +extern void vPortSVCHandler(void); +extern void xPortSysTickHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[1024]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + vPortSVCHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + xPortPendSVHandler, // The PendSV handler + xPortSysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/freertos_demo/startup_rvmdk.S b/boards/dk-tm4c129x/freertos_demo/startup_rvmdk.S new file mode 100644 index 0000000..08ee4a9 --- /dev/null +++ b/boards/dk-tm4c129x/freertos_demo/startup_rvmdk.S @@ -0,0 +1,335 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00001000 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN lwIPEthernetIntHandler + EXTERN xPortPendSVHandler + EXTERN vPortSVCHandler + EXTERN xPortSysTickHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD vPortSVCHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD xPortPendSVHandler ; The PendSV handler + DCD xPortSysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD lwIPEthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/gpio_jtag/Makefile b/boards/dk-tm4c129x/gpio_jtag/Makefile new file mode 100644 index 0000000..18828e3 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/Makefile @@ -0,0 +1,90 @@ +#****************************************************************************** +# +# Makefile - Rules for building the gpio_jtag example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the gpio_jtag example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/gpio_jtag.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the gpio_jtag example. +# +${COMPILER}/gpio_jtag.axf: ${COMPILER}/frame.o +${COMPILER}/gpio_jtag.axf: ${COMPILER}/gpio_jtag.o +${COMPILER}/gpio_jtag.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/gpio_jtag.axf: ${COMPILER}/pinout.o +${COMPILER}/gpio_jtag.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/gpio_jtag.axf: ${COMPILER}/touch.o +${COMPILER}/gpio_jtag.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/gpio_jtag.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/gpio_jtag.axf: gpio_jtag.ld +SCATTERgcc_gpio_jtag=gpio_jtag.ld +ENTRY_gpio_jtag=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/.ccsimportspec b/boards/dk-tm4c129x/gpio_jtag/ccs/.ccsimportspec new file mode 100644 index 0000000..005f812 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/.ccsproject b/boards/dk-tm4c129x/gpio_jtag/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/.cproject b/boards/dk-tm4c129x/gpio_jtag/ccs/.cproject new file mode 100644 index 0000000..20d9524 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/.project b/boards/dk-tm4c129x/gpio_jtag/ccs/.project new file mode 100644 index 0000000..cec06ae --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/.project @@ -0,0 +1,70 @@ + + + gpio_jtag + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + gpio_jtag.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.c + + + gpio_jtag_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/gpio_jtag/gpio_jtag_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/gpio_jtag/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/gpio_jtag/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.bin b/boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.bin new file mode 100644 index 0000000..7f66a76 Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.bin differ diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.out b/boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.out new file mode 100644 index 0000000..9727c64 Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/ccs/Debug/gpio_jtag.out differ diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/macros.ini_initial b/boards/dk-tm4c129x/gpio_jtag/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/gpio_jtag/ccs/target_config.ccxml b/boards/dk-tm4c129x/gpio_jtag/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.bin b/boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.bin new file mode 100644 index 0000000..90a5f5b Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.bin differ diff --git a/boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.out b/boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.out new file mode 100644 index 0000000..7bebf78 Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/ewarm/Exe/gpio_jtag.out differ diff --git a/boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.axf b/boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.axf new file mode 100644 index 0000000..aae409a Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.axf differ diff --git a/boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.bin b/boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.bin new file mode 100644 index 0000000..611d8d8 Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/gcc/gpio_jtag.bin differ diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.c b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.c new file mode 100644 index 0000000..7a34355 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.c @@ -0,0 +1,262 @@ +//***************************************************************************** +// +// gpio_jtag.c - Example to demonstrate recovering the JTAG interface. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      GPIO JTAG Recovery (gpio_jtag)

      +//! +//! This example demonstrates changing the JTAG pins into GPIOs, along with a +//! mechanism to revert them to JTAG pins. When first run, the pins remain in +//! JTAG mode. Pressing the touchscreen will toggle the pins between JTAG +//! and GPIO modes. +//! +//! In this example, four pins (PC0, PC1, PC2, and PC3) are switched. +// +//***************************************************************************** + +//***************************************************************************** +// +// The current mode of pins PC0, PC1, PC2, and PC3. When zero, the pins +// are in JTAG mode; when non-zero, the pins are in GPIO mode. +// +//***************************************************************************** +volatile uint32_t g_ui32Mode; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The touch screen driver calls this function to report all state changes. +// +//***************************************************************************** +static int32_t +GPIOJTAGTestCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + // + // Determine what to do now. The only message we act upon here is PTR_UP + // which indicates that someone has just ended a touch on the screen. + // + if(ui32Message == WIDGET_MSG_PTR_UP) + { + + // + // Toggle the pin mode. + // + g_ui32Mode ^= 1; + + // + // See if the pins should be in JTAG or GPIO mode. + // + if(g_ui32Mode == 0) + { + // + // Change PC0-3 into hardware (i.e. JTAG) pins. First open the + // lock and select the bits we want to modify in the GPIO commit + // register. + // + HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; + HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x0F; + + // + // Now modify the configuration of the pins that we unlocked. + // + HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) |= 0x0F; + + // + // Finally, clear the commit register and the lock to prevent + // the pin configuration from being changed accidentally later. + // Note that the lock is closed whenever we write to the GPIO_O_CR + // register so we need to reopen it here. + // + HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; + HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x00; + HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = 0; + } + else + { + // + // Change PC0-3 into GPIO inputs. First open the lock and select + // the bits we want to modify in the GPIO commit register. + // + HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; + HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x0F; + + // + // Now modifiy the configuration of the pins that we unlocked. + // Note that the DriverLib GPIO functions may need to access + // registers protected by the lock mechanism so these calls should + // be made while the lock is open here. + // + HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) &= 0xf0; + ROM_GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, + (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | + GPIO_PIN_3)); + + // + // Finally, clear the commit register and the lock to prevent + // the pin configuration from being changed accidentally later. + // Note that the lock is closed whenever we write to the GPIO_O_CR + // register so we need to reopen it here. + // + HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; + HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x00; + HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = 0; + } + } + + return(0); +} + +//***************************************************************************** +// +// Toggle the JTAG pins between JTAG and GPIO mode with touches on the +// touchscreen toggling between the two states. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Mode; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "gpio-jtag"); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(GPIOJTAGTestCallback); + + // + // Set the global and local indicator of pin mode to zero, meaning JTAG. + // + g_ui32Mode = 0; + ui32Mode = 0; + + // + // Tell the user what to do. + // + GrStringDrawCentered(&g_sContext, "Tap display to toggle pin mode.", -1, + GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) - 24), 0); + + // + // Tell the user what state we are in. + // + GrContextFontSet(&g_sContext, g_psFontCmss22b); + GrStringDrawCentered(&g_sContext, "PC0-3 are", -1, + GrContextDpyWidthGet(&g_sContext) / 2 , + GrContextDpyHeightGet(&g_sContext) / 2, 0); + GrStringDrawCentered(&g_sContext, "JTAG", -1, + GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) / 2) + 26, 0); + + // + // Loop forever. This loop simply exists to display the current state of + // PC0-3; the handling of changing the JTAG pins to and from GPIO mode is + // done in GPIO Interrupt Handler. + // + while(1) + { + // + // Wait until the pin mode changes. + // + while(g_ui32Mode == ui32Mode) + { + } + + // + // Save the new mode locally so that a subsequent pin mode change can + // be detected. + // + ui32Mode = g_ui32Mode; + + // + // Indicate the current mode for the PC0-3 pins. + // + GrStringDrawCentered(&g_sContext, ui32Mode ? " GPIO " : " JTAG ", -1, + GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) / 2) + 26, 1); + } +} diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewd b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewp b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewp new file mode 100644 index 0000000..77874e3 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\gpio_jtag.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.icf b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.icf new file mode 100644 index 0000000..181dfdb --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// gpio_jtag.icf - Linker configuration file for gpio_jtag. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ld b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ld new file mode 100644 index 0000000..6c87a6b --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * gpio_jtag.ld - Linker configuration file for gpio_jtag. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.sct b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.sct new file mode 100644 index 0000000..8f0e9da --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; gpio_jtag.sct - Linker configuration file for gpio_jtag. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvopt b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvopt new file mode 100644 index 0000000..b57e210 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + gpio_jtag + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\gpio_jtag.c + gpio_jtag.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvproj b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvproj new file mode 100644 index 0000000..b94f837 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + gpio_jtag + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + gpio_jtag + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\gpio_jtag.bin .\rvmdk\gpio_jtag.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + gpio_jtag.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + gpio_jtag.c + 1 + .\gpio_jtag.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/gpio_jtag/gpio_jtag_ccs.cmd b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag_ccs.cmd new file mode 100644 index 0000000..8ddabea --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/gpio_jtag_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * gpio_jtag_ccs.cmd - CCS linker configuration file for gpio_jtag. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/dk-tm4c129x/gpio_jtag/readme.txt b/boards/dk-tm4c129x/gpio_jtag/readme.txt new file mode 100644 index 0000000..3331f50 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/readme.txt @@ -0,0 +1,28 @@ +GPIO JTAG Recovery + +This example demonstrates changing the JTAG pins into GPIOs, along with a +mechanism to revert them to JTAG pins. When first run, the pins remain in +JTAG mode. Pressing the touchscreen will toggle the pins between JTAG +and GPIO modes. + +In this example, four pins (PC0, PC1, PC2, and PC3) are switched. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.axf b/boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.axf new file mode 100644 index 0000000..bdb31d5 Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.axf differ diff --git a/boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.bin b/boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.bin new file mode 100644 index 0000000..82d5403 Binary files /dev/null and b/boards/dk-tm4c129x/gpio_jtag/rvmdk/gpio_jtag.bin differ diff --git a/boards/dk-tm4c129x/gpio_jtag/startup_ccs.c b/boards/dk-tm4c129x/gpio_jtag/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/gpio_jtag/startup_ewarm.c b/boards/dk-tm4c129x/gpio_jtag/startup_ewarm.c new file mode 100644 index 0000000..8aaaa21 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/gpio_jtag/startup_gcc.c b/boards/dk-tm4c129x/gpio_jtag/startup_gcc.c new file mode 100644 index 0000000..48b4d47 --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/gpio_jtag/startup_rvmdk.S b/boards/dk-tm4c129x/gpio_jtag/startup_rvmdk.S new file mode 100644 index 0000000..862384f --- /dev/null +++ b/boards/dk-tm4c129x/gpio_jtag/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/grlib_demo/Makefile b/boards/dk-tm4c129x/grlib_demo/Makefile new file mode 100644 index 0000000..df5423b --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/Makefile @@ -0,0 +1,95 @@ +#****************************************************************************** +# +# Makefile - Rules for building the grlib_demo example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the grlib_demo example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/grlib_demo.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the grlib_demo example. +# +${COMPILER}/grlib_demo.axf: ${COMPILER}/frame.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/grlib_demo.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/images.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/pinout.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/sine.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/sound.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/touch.o +${COMPILER}/grlib_demo.axf: ${COMPILER}/ustdlib.o +${COMPILER}/grlib_demo.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/grlib_demo.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/grlib_demo.axf: grlib_demo.ld +SCATTERgcc_grlib_demo=grlib_demo.ld +ENTRY_grlib_demo=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/.ccsimportspec b/boards/dk-tm4c129x/grlib_demo/ccs/.ccsimportspec new file mode 100644 index 0000000..542acf7 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/.ccsproject b/boards/dk-tm4c129x/grlib_demo/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/.cproject b/boards/dk-tm4c129x/grlib_demo/ccs/.cproject new file mode 100644 index 0000000..1f4f47c --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/.project b/boards/dk-tm4c129x/grlib_demo/ccs/.project new file mode 100644 index 0000000..9a1511b --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/.project @@ -0,0 +1,90 @@ + + + grlib_demo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + grlib_demo.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_demo/grlib_demo.c + + + grlib_demo_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_demo/grlib_demo_ccs.cmd + + + images.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_demo/images.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_demo/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/sound.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/sound.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/sine.c + 1 + SW_ROOT/utils/sine.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/grlib_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.bin b/boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.bin new file mode 100644 index 0000000..197a7c4 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.bin differ diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.out b/boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.out new file mode 100644 index 0000000..bfd06af Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/ccs/Debug/grlib_demo.out differ diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/macros.ini_initial b/boards/dk-tm4c129x/grlib_demo/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/grlib_demo/ccs/target_config.ccxml b/boards/dk-tm4c129x/grlib_demo/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.bin b/boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.bin new file mode 100644 index 0000000..9862dea Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.bin differ diff --git a/boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.out b/boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.out new file mode 100644 index 0000000..62126b9 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/ewarm/Exe/grlib_demo.out differ diff --git a/boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.axf b/boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.axf new file mode 100644 index 0000000..5b941c7 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.axf differ diff --git a/boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.bin b/boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.bin new file mode 100644 index 0000000..091acc1 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/gcc/grlib_demo.bin differ diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.c b/boards/dk-tm4c129x/grlib_demo/grlib_demo.c new file mode 100644 index 0000000..d2eac50 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.c @@ -0,0 +1,1324 @@ +//***************************************************************************** +// +// grlib_demo.c - Demonstration of the TivaWare Graphics Library. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/checkbox.h" +#include "grlib/container.h" +#include "grlib/pushbutton.h" +#include "grlib/radiobutton.h" +#include "grlib/slider.h" +#include "utils/ustdlib.h" +#include "utils/sine.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/sound.h" +#include "drivers/touch.h" +#include "images.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Graphics Library Demonstration (grlib_demo)

      +//! +//! This application provides a demonstration of the capabilities of the +//! TivaWare Graphics Library. A series of panels show different features of +//! the library. For each panel, the bottom provides a forward and back button +//! (when appropriate), along with a brief description of the contents of the +//! panel. +//! +//! The first panel provides some introductory text and basic instructions for +//! operation of the application. +//! +//! The second panel shows the available drawing primitives: lines, circles, +//! rectangles, strings, and images. +//! +//! The third panel shows the canvas widget, which provides a general drawing +//! surface within the widget hierarchy. A text, image, and application-drawn +//! canvas are displayed. +//! +//! The fourth panel shows the check box widget, which provides a means of +//! toggling the state of an item. Three check boxes are provided, with each +//! having a red ``LED'' to the right. The state of the LED tracks the state +//! of the check box via an application callback. +//! +//! The fifth panel shows the container widget, which provides a grouping +//! construct typically used for radio buttons. Containers with a title, a +//! centered title, and no title are displayed. +//! +//! The sixth panel shows the push button widget. Two rows of push buttons +//! are provided; the appearance of each row is the same but the top row +//! does not utilize auto-repeat while the bottom row does. Each push button +//! has a red ``LED'' beneath it, which is toggled via an application callback +//! each time the push button is pressed. While holding down any of +//! auto-repeat buttons, the ``LED'' for that button should be toggled as long +//! as the button is being held down. +//! +//! The seventh panel shows the radio button widget. Two groups of radio +//! buttons are displayed, the first using text and the second using images for +//! the selection value. Each radio button has a red ``LED'' to its right, +//! which tracks the selection state of the radio buttons via an application +//! callback. Only one radio button from each group can be selected at a time, +//! though the radio buttons in each group operate independently. +//! +//! The eighth and final panel shows the slider widget. Six sliders +//! constructed using the various supported style options are shown. The +//! slider value callback is used to update two widgets to reflect the values +//! reported by sliders. A canvas widget near the top right of the display +//! tracks the value of the red and green image-based slider to its left and +//! the text of the grey slider on the left side of the panel is update to show +//! its own value. The slider on the right is configured as an indicator +//! which tracks the state of the upper slider and ignores user input. +// +//***************************************************************************** + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#ifdef ewarm +#pragma data_alignment=1024 +tDMAControlTable psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(psDMAControlTable, 1024) +tDMAControlTable psDMAControlTable[64]; +#else +tDMAControlTable psDMAControlTable[64] __attribute__ ((aligned(1024))); +#endif + +//***************************************************************************** +// +// The sound effect that is played when a key is pressed. +// +//***************************************************************************** +#define AUDIO_SIZE 2048 +static int16_t g_pi16AudioBuffer[AUDIO_SIZE]; + +//***************************************************************************** +// +// A set of flags that indicate the current state of the application. +// +//***************************************************************************** +static uint32_t g_ui32Flags; +#define FLAG_PING 0 // The "ping" half of the sound + // buffer needs to be filled +#define FLAG_PONG 1 // The "pong" half of the sound + // buffer needs to be filled + +//***************************************************************************** +// +// The screen offset of the upper left hand corner where we start to draw. +// +//***************************************************************************** +#define X_OFFSET 8 +#define Y_OFFSET 24 + +//***************************************************************************** +// +// Forward declarations for the globals required to define the widgets at +// compile-time. +// +//***************************************************************************** +void OnPrevious(tWidget *psWidget); +void OnNext(tWidget *psWidget); +void OnIntroPaint(tWidget *psWidget, tContext *psContext); +void OnPrimitivePaint(tWidget *psWidget, tContext *psContext); +void OnCanvasPaint(tWidget *psWidget, tContext *psContext); +void OnCheckChange(tWidget *psWidget, uint32_t bSelected); +void OnButtonPress(tWidget *psWidget); +void OnRadioChange(tWidget *psWidget, uint32_t bSelected); +void OnSliderChange(tWidget *psWidget, int32_t i32Value); +extern tCanvasWidget g_psPanels[]; +void SoundCallback(uint32_t ui32Half); + +//***************************************************************************** +// +// The first panel, which contains introductory text explaining the +// application. +// +//***************************************************************************** +Canvas(g_sIntroduction, g_psPanels, 0, 0, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_APP_DRAWN, 0, 0, 0, 0, 0, 0, OnIntroPaint); + +//***************************************************************************** +// +// The second panel, which demonstrates the graphics primitives. +// +//***************************************************************************** +Canvas(g_sPrimitives, g_psPanels + 1, 0, 0, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_APP_DRAWN, 0, 0, 0, 0, 0, 0, OnPrimitivePaint); + +//***************************************************************************** +// +// The third panel, which demonstrates the canvas widget. +// +//***************************************************************************** +Canvas(g_sCanvas3, g_psPanels + 2, 0, 0, &g_sKentec320x240x16_SSD2119, 200, + Y_OFFSET, 110, 152, CANVAS_STYLE_OUTLINE | CANVAS_STYLE_APP_DRAWN, 0, + ClrGray, 0, 0, 0, 0, OnCanvasPaint); +Canvas(g_sCanvas2, g_psPanels + 2, &g_sCanvas3, 0, + &g_sKentec320x240x16_SSD2119, X_OFFSET, (76+Y_OFFSET), 190, 76, + CANVAS_STYLE_OUTLINE | CANVAS_STYLE_IMG, 0, ClrGray, 0, 0, 0, + g_ui8Logo, 0); +Canvas(g_sCanvas1, g_psPanels + 2, &g_sCanvas2, 0, + &g_sKentec320x240x16_SSD2119, X_OFFSET, Y_OFFSET, 190, 76, + CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT, + ClrMidnightBlue, ClrGray, ClrSilver, g_psFontCm22, "Text", 0, 0); + +//***************************************************************************** +// +// The fourth panel, which demonstrates the checkbox widget. +// +//***************************************************************************** +tCanvasWidget g_psCheckBoxIndicators[] = +{ + CanvasStruct(g_psPanels + 3, g_psCheckBoxIndicators + 1, 0, + &g_sKentec320x240x16_SSD2119, 230, 30, 50, 42, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 3, g_psCheckBoxIndicators + 2, 0, + &g_sKentec320x240x16_SSD2119, 230, 82, 50, 48, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 3, 0, 0, + &g_sKentec320x240x16_SSD2119, 230, 134, 50, 42, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0) +}; +tCheckBoxWidget g_psCheckBoxes[] = +{ + CheckBoxStruct(g_psPanels + 3, g_psCheckBoxes + 1, 0, + &g_sKentec320x240x16_SSD2119, 40, 25, 185, 42, + CB_STYLE_OUTLINE | CB_STYLE_FILL | CB_STYLE_TEXT, 16, + ClrMidnightBlue, ClrGray, ClrSilver, g_psFontCm22, + "Select", 0, OnCheckChange), + CheckBoxStruct(g_psPanels + 3, g_psCheckBoxes + 2, 0, + &g_sKentec320x240x16_SSD2119, 40, 78, 185, 48, + CB_STYLE_IMG, 16, 0, ClrGray, 0, 0, 0, g_ui8Logo, + OnCheckChange), + CheckBoxStruct(g_psPanels + 3, g_psCheckBoxIndicators, 0, + &g_sKentec320x240x16_SSD2119, 40, 129, 189, 42, + CB_STYLE_OUTLINE | CB_STYLE_TEXT, 16, + 0, ClrGray, ClrGreen, g_psFontCm20, "Select", + 0, OnCheckChange), +}; +#define NUM_CHECK_BOXES (sizeof(g_psCheckBoxes) / \ + sizeof(g_psCheckBoxes[0])) + +//***************************************************************************** +// +// The fifth panel, which demonstrates the container widget. +// +//***************************************************************************** +Container(g_sContainer3, g_psPanels + 4, 0, 0, &g_sKentec320x240x16_SSD2119, + 205, 47, 105, 118, CTR_STYLE_OUTLINE | CTR_STYLE_FILL, + ClrMidnightBlue, ClrGray, 0, 0, 0); +Container(g_sContainer2, g_psPanels + 4, &g_sContainer3, 0, + &g_sKentec320x240x16_SSD2119, X_OFFSET, 100, 190, 70, + (CTR_STYLE_OUTLINE | CTR_STYLE_FILL | CTR_STYLE_TEXT | + CTR_STYLE_TEXT_CENTER), ClrMidnightBlue, ClrGray, ClrSilver, + g_psFontCm22, "Group2"); +Container(g_sContainer1, g_psPanels + 4, &g_sContainer2, 0, + &g_sKentec320x240x16_SSD2119, X_OFFSET, Y_OFFSET, 190, 70, + CTR_STYLE_OUTLINE | CTR_STYLE_FILL | CTR_STYLE_TEXT, ClrMidnightBlue, + ClrGray, ClrSilver, g_psFontCm22, "Group1"); + +//***************************************************************************** +// +// The sixth panel, which contains a selection of push buttons. +// +//***************************************************************************** +tCanvasWidget g_psPushButtonIndicators[] = +{ + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 1, 0, + &g_sKentec320x240x16_SSD2119, 40, 80, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 2, 0, + &g_sKentec320x240x16_SSD2119, 90, 80, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 3, 0, + &g_sKentec320x240x16_SSD2119, 145, 80, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 4, 0, + &g_sKentec320x240x16_SSD2119, 40, 160, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 5, 0, + &g_sKentec320x240x16_SSD2119, 90, 160, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 6, 0, + &g_sKentec320x240x16_SSD2119, 145, 160, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 7, 0, + &g_sKentec320x240x16_SSD2119, 190, 30, 110, 24, + CANVAS_STYLE_TEXT, 0, 0, ClrSilver, g_psFontCm20, "Non-auto", + 0, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 8, 0, + &g_sKentec320x240x16_SSD2119, 190, 50, 110, 24, + CANVAS_STYLE_TEXT, 0, 0, ClrSilver, g_psFontCm20, "repeat", + 0, 0), + CanvasStruct(g_psPanels + 5, g_psPushButtonIndicators + 9, 0, + &g_sKentec320x240x16_SSD2119, 190, 110, 110, 24, + CANVAS_STYLE_TEXT, 0, 0, ClrSilver, g_psFontCm20, "Auto", + 0, 0), + CanvasStruct(g_psPanels + 5, 0, 0, + &g_sKentec320x240x16_SSD2119, 190, 130, 110, 24, + CANVAS_STYLE_TEXT, 0, 0, ClrSilver, g_psFontCm20, "repeat", + 0, 0), +}; +tPushButtonWidget g_psPushButtons[] = +{ + RectangularButtonStruct(g_psPanels + 5, g_psPushButtons + 1, 0, + &g_sKentec320x240x16_SSD2119, 30, 30, 40, 40, + PB_STYLE_FILL | PB_STYLE_OUTLINE | PB_STYLE_TEXT, + ClrMidnightBlue, ClrBlack, ClrGray, ClrSilver, + g_psFontCm22, "1", 0, 0, 0, 0, OnButtonPress), + CircularButtonStruct(g_psPanels + 5, g_psPushButtons + 2, 0, + &g_sKentec320x240x16_SSD2119, 100, 50, 20, + PB_STYLE_FILL | PB_STYLE_OUTLINE | PB_STYLE_TEXT, + ClrMidnightBlue, ClrBlack, ClrGray, ClrSilver, + g_psFontCm22, "3", 0, 0, 0, 0, OnButtonPress), + RectangularButtonStruct(g_psPanels + 5, g_psPushButtons + 3, 0, + &g_sKentec320x240x16_SSD2119, 130, 25, 50, 50, + PB_STYLE_IMG | PB_STYLE_TEXT, 0, 0, 0, ClrSilver, + g_psFontCm22, "5", g_pui8Blue50x50, + g_pui8Blue50x50Press, 0, 0, OnButtonPress), + RectangularButtonStruct(g_psPanels + 5, g_psPushButtons + 4, 0, + &g_sKentec320x240x16_SSD2119, 30, 110, 40, 40, + (PB_STYLE_FILL | PB_STYLE_OUTLINE | PB_STYLE_TEXT | + PB_STYLE_AUTO_REPEAT), ClrMidnightBlue, ClrBlack, + ClrGray, ClrSilver, g_psFontCm22, "2", 0, 0, 125, + 25, OnButtonPress), + CircularButtonStruct(g_psPanels + 5, g_psPushButtons + 5, 0, + &g_sKentec320x240x16_SSD2119, 100, 130, 20, + (PB_STYLE_FILL | PB_STYLE_OUTLINE | PB_STYLE_TEXT | + PB_STYLE_AUTO_REPEAT), ClrMidnightBlue, ClrBlack, + ClrGray, ClrSilver, g_psFontCm22, "4", 0, 0, 125, 25, + OnButtonPress), + RectangularButtonStruct(g_psPanels + 5, g_psPushButtonIndicators, 0, + &g_sKentec320x240x16_SSD2119, 130, 105, 50, 50, + (PB_STYLE_IMG | PB_STYLE_TEXT | + PB_STYLE_AUTO_REPEAT), 0, 0, 0, ClrSilver, + g_psFontCm22, "6", g_pui8Blue50x50, + g_pui8Blue50x50Press, 125, 25, OnButtonPress), +}; +#define NUM_PUSH_BUTTONS (sizeof(g_psPushButtons) / \ + sizeof(g_psPushButtons[0])) +uint32_t g_ui32ButtonState; + +//***************************************************************************** +// +// The seventh panel, which contains a selection of radio buttons. +// +//***************************************************************************** +tContainerWidget g_psRadioContainers[]; +tCanvasWidget g_psRadioButtonIndicators[] = +{ + CanvasStruct(g_psRadioContainers, g_psRadioButtonIndicators + 1, 0, + &g_sKentec320x240x16_SSD2119, 95, 52, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psRadioContainers, g_psRadioButtonIndicators + 2, 0, + &g_sKentec320x240x16_SSD2119, 95, 97, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psRadioContainers, 0, 0, + &g_sKentec320x240x16_SSD2119, 95, 142, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psRadioContainers + 1, g_psRadioButtonIndicators + 4, 0, + &g_sKentec320x240x16_SSD2119, 260, 52, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psRadioContainers + 1, g_psRadioButtonIndicators + 5, 0, + &g_sKentec320x240x16_SSD2119, 260, 97, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), + CanvasStruct(g_psRadioContainers + 1, 0, 0, + &g_sKentec320x240x16_SSD2119, 260, 142, 20, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0), +}; +tRadioButtonWidget g_psRadioButtons1[] = +{ + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 1, 0, + &g_sKentec320x240x16_SSD2119, 10, 40, 80, 45, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, g_psFontCm20, + "One", 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 2, 0, + &g_sKentec320x240x16_SSD2119, 10, 85, 80, 45, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, g_psFontCm20, + "Two", 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtonIndicators, 0, + &g_sKentec320x240x16_SSD2119, 10, 130, 80, 45, + RB_STYLE_TEXT, 24, 0, ClrSilver, ClrSilver, g_psFontCm20, + "Three", 0, OnRadioChange) +}; +#define NUM_RADIO1_BUTTONS (sizeof(g_psRadioButtons1) / \ + sizeof(g_psRadioButtons1[0])) +tRadioButtonWidget g_psRadioButtons2[] = +{ + RadioButtonStruct(g_psRadioContainers + 1, g_psRadioButtons2 + 1, 0, + &g_sKentec320x240x16_SSD2119, 175, 40, 80, 45, + RB_STYLE_IMG, 16, 0, ClrSilver, 0, 0, 0, g_ui8Logo, + OnRadioChange), + RadioButtonStruct(g_psRadioContainers + 1, g_psRadioButtons2 + 2, 0, + &g_sKentec320x240x16_SSD2119, 175, 85, 80, 45, + RB_STYLE_IMG, 24, 0, ClrSilver, 0, 0, 0, g_ui8Logo, + OnRadioChange), + RadioButtonStruct(g_psRadioContainers + 1, g_psRadioButtonIndicators + 3, + 0, &g_sKentec320x240x16_SSD2119, 175, 130, 80, 45, + RB_STYLE_IMG, 24, 0, ClrSilver, 0, 0, 0, g_ui8Logo, + OnRadioChange) +}; +#define NUM_RADIO2_BUTTONS (sizeof(g_psRadioButtons2) / \ + sizeof(g_psRadioButtons2[0])) +tContainerWidget g_psRadioContainers[] = +{ + ContainerStruct(g_psPanels + 6, g_psRadioContainers + 1, g_psRadioButtons1, + &g_sKentec320x240x16_SSD2119, 8, 24, 145, 154, + CTR_STYLE_OUTLINE | CTR_STYLE_TEXT, 0, ClrGray, ClrSilver, + g_psFontCm20, "Group One"), + ContainerStruct(g_psPanels + 6, 0, g_psRadioButtons2, + &g_sKentec320x240x16_SSD2119, 167, 24, 145, 154, + CTR_STYLE_OUTLINE | CTR_STYLE_TEXT, 0, ClrGray, ClrSilver, + g_psFontCm20, "Group Two") +}; + +//***************************************************************************** +// +// The eighth panel, which demonstrates the slider widget. +// +//***************************************************************************** +Canvas(g_sSliderValueCanvas, g_psPanels + 7, 0, 0, + &g_sKentec320x240x16_SSD2119, 210, 30, 60, 40, + CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_OPAQUE, ClrBlack, 0, ClrSilver, + g_psFontCm24, "50%", + 0, 0); + +tSliderWidget g_psSliders[] = +{ + SliderStruct(g_psPanels + 7, g_psSliders + 1, 0, + &g_sKentec320x240x16_SSD2119, 10, 105, 220, 30, 0, 100, 25, + (SL_STYLE_FILL | SL_STYLE_BACKG_FILL | SL_STYLE_OUTLINE | + SL_STYLE_TEXT | SL_STYLE_BACKG_TEXT), + ClrGray, ClrBlack, ClrSilver, ClrWhite, ClrWhite, + g_psFontCm20, "25%", 0, 0, OnSliderChange), + SliderStruct(g_psPanels + 7, g_psSliders + 2, 0, + &g_sKentec320x240x16_SSD2119, 10, 145, 220, 25, 0, 100, 25, + (SL_STYLE_FILL | SL_STYLE_BACKG_FILL | SL_STYLE_OUTLINE | + SL_STYLE_TEXT), + ClrWhite, ClrBlueViolet, ClrSilver, ClrBlack, 0, + g_psFontCm18, "Foreground Text Only", 0, 0, OnSliderChange), + SliderStruct(g_psPanels + 7, g_psSliders + 3, 0, + &g_sKentec320x240x16_SSD2119, 240, 70, 26, 110, 0, 100, 50, + (SL_STYLE_FILL | SL_STYLE_BACKG_FILL | SL_STYLE_VERTICAL | + SL_STYLE_OUTLINE | SL_STYLE_LOCKED), ClrDarkGreen, + ClrDarkRed, ClrSilver, 0, 0, 0, 0, 0, 0, 0), + SliderStruct(g_psPanels + 7, g_psSliders + 4, 0, + &g_sKentec320x240x16_SSD2119, 275, 30, 30, 150, 0, 100, 75, + (SL_STYLE_IMG | SL_STYLE_BACKG_IMG | SL_STYLE_VERTICAL | + SL_STYLE_OUTLINE), 0, ClrBlack, ClrSilver, 0, 0, 0, + 0, g_pui8GettingHotter28x148, g_pui8GettingHotter28x148Mono, + OnSliderChange), + SliderStruct(g_psPanels + 7, g_psSliders + 5, 0, + &g_sKentec320x240x16_SSD2119, 10, 30, 195, 37, 0, 100, 50, + SL_STYLE_IMG | SL_STYLE_BACKG_IMG, 0, 0, 0, 0, 0, 0, + 0, g_pui8GreenSlider195x37, g_pui8RedSlider195x37, + OnSliderChange), + SliderStruct(g_psPanels + 7, &g_sSliderValueCanvas, 0, + &g_sKentec320x240x16_SSD2119, 10, 70, 220, 25, 0, 100, 50, + (SL_STYLE_FILL | SL_STYLE_BACKG_FILL | SL_STYLE_TEXT | + SL_STYLE_BACKG_TEXT | SL_STYLE_TEXT_OPAQUE | + SL_STYLE_BACKG_TEXT_OPAQUE), + ClrBlue, ClrYellow, ClrSilver, ClrYellow, ClrBlue, + g_psFontCm18, "Text in both areas", 0, 0, + OnSliderChange), +}; + +#define SLIDER_TEXT_VAL_INDEX 0 +#define SLIDER_LOCKED_INDEX 2 +#define SLIDER_CANVAS_VAL_INDEX 4 + +#define NUM_SLIDERS (sizeof(g_psSliders) / sizeof(g_psSliders[0])) + +//***************************************************************************** +// +// An array of canvas widgets, one per panel. Each canvas is filled with +// black, overwriting the contents of the previous panel. +// +//***************************************************************************** +tCanvasWidget g_psPanels[] = +{ + CanvasStruct(0, 0, &g_sIntroduction, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, &g_sPrimitives, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, &g_sCanvas1, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, g_psCheckBoxes, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, &g_sContainer1, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, g_psPushButtons, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, g_psRadioContainers, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, g_psSliders, &g_sKentec320x240x16_SSD2119, + X_OFFSET, Y_OFFSET, (320 - (X_OFFSET*2)), 158, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), +}; + +//***************************************************************************** +// +// The number of panels. +// +//***************************************************************************** +#define NUM_PANELS (sizeof(g_psPanels) / sizeof(g_psPanels[0])) + +//***************************************************************************** +// +// The names for each of the panels, which is displayed at the bottom of the +// screen. +// +//***************************************************************************** +char *g_pcPanelNames[] = +{ + " Introduction ", + " Primitives ", + " Canvas ", + " Checkbox ", + " Container ", + " Push Buttons ", + " Radio Buttons ", + " Sliders ", + " S/W Update " +}; + +//***************************************************************************** +// +// The buttons and text across the bottom of the screen. +// +//***************************************************************************** +RectangularButton(g_sPrevious, 0, 0, 0, &g_sKentec320x240x16_SSD2119, + X_OFFSET, 182, 50, 50, + PB_STYLE_FILL, ClrBlack, ClrBlack, 0, ClrSilver, + g_psFontCm20, "-", g_pui8Blue50x50, g_pui8Blue50x50Press, + 0, 0, OnPrevious); +Canvas(g_sTitle, 0, 0, 0, &g_sKentec320x240x16_SSD2119, + (X_OFFSET+50), 182, 204, 50, + CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_OPAQUE, 0, 0, ClrSilver, + g_psFontCm20, 0, 0, 0); +RectangularButton(g_sNext, 0, 0, 0, &g_sKentec320x240x16_SSD2119, + (320-50-X_OFFSET), 182, 50, 50, + PB_STYLE_IMG | PB_STYLE_TEXT, ClrBlack, ClrBlack, 0, + ClrSilver, g_psFontCm20, "+", g_pui8Blue50x50, + g_pui8Blue50x50Press, 0, 0, OnNext); + +//***************************************************************************** +// +// The panel that is currently being displayed. +// +//***************************************************************************** +uint32_t g_ui32Panel; + +//***************************************************************************** +// +// The position within the waveform of the click sound. +// +//***************************************************************************** +uint32_t g_ui32AudioPos; + +//***************************************************************************** +// +// The step rate of the waveform for the click sound. +// +//***************************************************************************** +uint32_t g_ui32AudioStep; + +//***************************************************************************** +// +// The amplitude of the waveformfor the click sound. +// +//***************************************************************************** +uint32_t g_ui32Amp; + +//***************************************************************************** +// +// The step rate of the amplitude for the click sound. +// +//***************************************************************************** +uint32_t g_ui32AmpStep; + +//***************************************************************************** +// +// Initialize the variables for generating the click sound waveform +// +//***************************************************************************** +void +PlayClick(void) +{ + // + // Start the new waveform at zero. + // + g_ui32AudioPos = 0; + + // + // Set the fixed Audio step + // + g_ui32AudioStep = ((265 * 65536) / 64000) * 65536; + + // + // Set the amplitude of the waveform generator to full volume. + // + g_ui32Amp = 2048; + + // + // Set the decreasing step of amplitude. + // + g_ui32AmpStep = 1; +} + +//***************************************************************************** +// +// Handles presses of the previous panel button. +// +//***************************************************************************** +void +OnPrevious(tWidget *psWidget) +{ + // + // There is nothing to be done if the first panel is already being + // displayed. + // + if(g_ui32Panel == 0) + { + return; + } + + // + // Remove the current panel. + // + WidgetRemove((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Decrement the panel index. + // + g_ui32Panel--; + + // + // Add and draw the new panel. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)(g_psPanels + g_ui32Panel)); + WidgetPaint((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Set the title of this panel. + // + CanvasTextSet(&g_sTitle, g_pcPanelNames[g_ui32Panel]); + WidgetPaint((tWidget *)&g_sTitle); + + // + // See if this is the first panel. + // + if(g_ui32Panel == 0) + { + // + // Clear the previous button from the display since the first panel is + // being displayed. + // + PushButtonImageOff(&g_sPrevious); + PushButtonTextOff(&g_sPrevious); + PushButtonFillOn(&g_sPrevious); + WidgetPaint((tWidget *)&g_sPrevious); + } + + // + // See if the previous panel was the last panel. + // + if(g_ui32Panel == (NUM_PANELS - 2)) + { + // + // Display the next button. + // + PushButtonImageOn(&g_sNext); + PushButtonTextOn(&g_sNext); + PushButtonFillOff(&g_sNext); + WidgetPaint((tWidget *)&g_sNext); + } + + // + // Play the key click sound. + // + PlayClick(); +} + +//***************************************************************************** +// +// Handles presses of the next panel button. +// +//***************************************************************************** +void +OnNext(tWidget *psWidget) +{ + // + // There is nothing to be done if the last panel is already being + // displayed. + // + if(g_ui32Panel == (NUM_PANELS - 1)) + { + return; + } + + // + // Remove the current panel. + // + WidgetRemove((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Increment the panel index. + // + g_ui32Panel++; + + // + // Add and draw the new panel. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)(g_psPanels + g_ui32Panel)); + WidgetPaint((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Set the title of this panel. + // + CanvasTextSet(&g_sTitle, g_pcPanelNames[g_ui32Panel]); + WidgetPaint((tWidget *)&g_sTitle); + + // + // See if the previous panel was the first panel. + // + if(g_ui32Panel == 1) + { + // + // Display the previous button. + // + PushButtonImageOn(&g_sPrevious); + PushButtonTextOn(&g_sPrevious); + PushButtonFillOff(&g_sPrevious); + WidgetPaint((tWidget *)&g_sPrevious); + } + + // + // See if this is the last panel. + // + if(g_ui32Panel == (NUM_PANELS - 1)) + { + // + // Clear the next button from the display since the last panel is being + // displayed. + // + PushButtonImageOff(&g_sNext); + PushButtonTextOff(&g_sNext); + PushButtonFillOn(&g_sNext); + WidgetPaint((tWidget *)&g_sNext); + } + + // + // Play the key click sound. + // + PlayClick(); +} + +//***************************************************************************** +// +// Handles paint requests for the introduction canvas widget. +// +//***************************************************************************** +void +OnIntroPaint(tWidget *psWidget, tContext *psContext) +{ + // + // Display the introduction text in the canvas. + // + GrContextFontSet(psContext, g_psFontCm16); + GrContextForegroundSet(psContext, ClrSilver); + GrStringDraw(psContext, "This application demonstrates the ", -1, + 10, 30, 0); + GrStringDraw(psContext, "TivaWare Graphics Library.", -1, + 10, (30+16), 0); + GrStringDraw(psContext, "Each panel shows a different feature of", -1, + 10, (30+(16*2)), 0); + GrStringDraw(psContext, "the graphics library. Widgets on the panels", -1, + 10, (30+(16*3)), 0); + GrStringDraw(psContext, "are fully operational; pressing them will", -1, + 10, (30+(16*4)), 0); + GrStringDraw(psContext, "result in visible feedback of some kind.", -1, + 10, (30+(16*5)), 0); + GrStringDraw(psContext, "Press the + and - buttons at the bottom", -1, + 10, (30+(16*6)), 0); + GrStringDraw(psContext, "of the screen to move between the panels.", -1, + 10, (30+(16*7)), 0); +} + +//***************************************************************************** +// +// Handles paint requests for the primitives canvas widget. +// +//***************************************************************************** +void +OnPrimitivePaint(tWidget *psWidget, tContext *psContext) +{ + uint32_t ui32Idx; + tRectangle sRect; + + // + // Draw a vertical sweep of lines from red to green. + // + for(ui32Idx = 0; ui32Idx <= 8; ui32Idx++) + { + GrContextForegroundSet(psContext, + (((((10 - ui32Idx) * 255) / 10) << ClrRedShift) | + (((ui32Idx * 255) / 10) << ClrGreenShift))); + GrLineDraw(psContext, 115, 120, 5, 120 - (11 * ui32Idx)); + } + + // + // Draw a horizontal sweep of lines from green to blue. + // + for(ui32Idx = 1; ui32Idx <= 10; ui32Idx++) + { + GrContextForegroundSet(psContext, + (((((10 - ui32Idx) * 255) / 10) << + ClrGreenShift) | + (((ui32Idx * 255) / 10) << ClrBlueShift))); + GrLineDraw(psContext, 115, 120, 5 + (ui32Idx * 11), 29); + } + + // + // Draw a filled circle with an overlapping circle. + // + GrContextForegroundSet(psContext, ClrBrown); + GrCircleFill(psContext, 185, 69, 40); + GrContextForegroundSet(psContext, ClrSkyBlue); + GrCircleDraw(psContext, 205, 99, 30); + + // + // Draw a filled rectangle with an overlapping rectangle. + // + GrContextForegroundSet(psContext, ClrSlateGray); + sRect.i16XMin = 20; + sRect.i16YMin = 100; + sRect.i16XMax = 75; + sRect.i16YMax = 160; + GrRectFill(psContext, &sRect); + GrContextForegroundSet(psContext, ClrSlateBlue); + sRect.i16XMin += 40; + sRect.i16YMin += 30; + sRect.i16XMax += 30; + sRect.i16YMax += 18; + GrRectDraw(psContext, &sRect); + + // + // Draw a piece of text in fonts of increasing size. + // + GrContextForegroundSet(psContext, ClrSilver); + GrContextFontSet(psContext, g_psFontCm14); + GrStringDraw(psContext, "Strings", -1, 120, 104, 0); + GrContextFontSet(psContext, g_psFontCm18); + GrStringDraw(psContext, "Strings", -1, 140, 118, 0); + GrContextFontSet(psContext, g_psFontCm22); + GrStringDraw(psContext, "Strings", -1, 160, 136, 0); + GrContextFontSet(psContext, g_psFontCm24); + GrStringDraw(psContext, "Strings", -1, 180, 158, 0); + + // + // Draw an image. + // + GrImageDraw(psContext, g_ui8Logo, 262, 80); +} + +//***************************************************************************** +// +// Handles paint requests for the canvas demonstration widget. +// +//***************************************************************************** +void +OnCanvasPaint(tWidget *psWidget, tContext *psContext) +{ + uint32_t ui32Idx; + + // + // Draw a set of radiating lines. + // + GrContextForegroundSet(psContext, ClrGoldenrod); + for(ui32Idx = 50; ui32Idx <= 180; ui32Idx += 10) + { + GrLineDraw(psContext, 210, ui32Idx, 310, 230 - ui32Idx); + } + + // + // Indicate that the contents of this canvas were drawn by the application. + // + GrContextFontSet(psContext, g_psFontCm12); + GrStringDrawCentered(psContext, "App Drawn", -1, 260, 50, 1); +} + +//***************************************************************************** +// +// Handles change notifications for the check box widgets. +// +//***************************************************************************** +void +OnCheckChange(tWidget *psWidget, uint32_t bSelected) +{ + uint32_t ui32Idx; + + // + // Find the index of this check box. + // + for(ui32Idx = 0; ui32Idx < NUM_CHECK_BOXES; ui32Idx++) + { + if(psWidget == (tWidget *)(g_psCheckBoxes + ui32Idx)) + { + break; + } + } + + // + // Return if the check box could not be found. + // + if(ui32Idx == NUM_CHECK_BOXES) + { + return; + } + + // + // Set the matching indicator based on the selected state of the check box. + // + CanvasImageSet(g_psCheckBoxIndicators + ui32Idx, + bSelected ? g_pui8LightOn : g_pui8LightOff); + WidgetPaint((tWidget *)(g_psCheckBoxIndicators + ui32Idx)); + + // + // Play the key click sound. + // + PlayClick(); +} + +//***************************************************************************** +// +// Handles press notifications for the push button widgets. +// +//***************************************************************************** +void +OnButtonPress(tWidget *psWidget) +{ + uint32_t ui32Idx; + + // + // Find the index of this push button. + // + for(ui32Idx = 0; ui32Idx < NUM_PUSH_BUTTONS; ui32Idx++) + { + if(psWidget == (tWidget *)(g_psPushButtons + ui32Idx)) + { + break; + } + } + + // + // Return if the push button could not be found. + // + if(ui32Idx == NUM_PUSH_BUTTONS) + { + return; + } + + // + // Toggle the state of this push button indicator. + // + g_ui32ButtonState ^= 1 << ui32Idx; + + // + // Set the matching indicator based on the selected state of the check box. + // + CanvasImageSet(g_psPushButtonIndicators + ui32Idx, + (g_ui32ButtonState & (1 << ui32Idx)) ? g_pui8LightOn : + g_pui8LightOff); + WidgetPaint((tWidget *)(g_psPushButtonIndicators + ui32Idx)); + + // + // Play the key click sound. + // + PlayClick(); +} + +//***************************************************************************** +// +// Handles notifications from the slider controls. +// +//***************************************************************************** +void +OnSliderChange(tWidget *psWidget, int32_t i32Value) +{ + static char pcCanvasText[5]; + static char pcSliderText[5]; + + // + // Is this the widget whose value we mirror in the canvas widget and the + // locked slider? + // + if(psWidget == (tWidget *)&g_psSliders[SLIDER_CANVAS_VAL_INDEX]) + { + // + // Yes - update the canvas to show the slider value. + // + usprintf(pcCanvasText, "%3d%%", i32Value); + CanvasTextSet(&g_sSliderValueCanvas, pcCanvasText); + WidgetPaint((tWidget *)&g_sSliderValueCanvas); + + // + // Also update the value of the locked slider to reflect this one. + // + SliderValueSet(&g_psSliders[SLIDER_LOCKED_INDEX], i32Value); + WidgetPaint((tWidget *)&g_psSliders[SLIDER_LOCKED_INDEX]); + } + + if(psWidget == (tWidget *)&g_psSliders[SLIDER_TEXT_VAL_INDEX]) + { + // + // Yes - update the canvas to show the slider value. + // + usprintf(pcSliderText, "%3d%%", i32Value); + SliderTextSet(&g_psSliders[SLIDER_TEXT_VAL_INDEX], pcSliderText); + WidgetPaint((tWidget *)&g_psSliders[SLIDER_TEXT_VAL_INDEX]); + } +} + +//***************************************************************************** +// +// Handles change notifications for the radio button widgets. +// +//***************************************************************************** +void +OnRadioChange(tWidget *psWidget, uint32_t bSelected) +{ + uint32_t ui32Idx; + + // + // Find the index of this radio button in the first group. + // + for(ui32Idx = 0; ui32Idx < NUM_RADIO1_BUTTONS; ui32Idx++) + { + if(psWidget == (tWidget *)(g_psRadioButtons1 + ui32Idx)) + { + break; + } + } + + // + // See if the radio button was found. + // + if(ui32Idx == NUM_RADIO1_BUTTONS) + { + // + // Find the index of this radio button in the second group. + // + for(ui32Idx = 0; ui32Idx < NUM_RADIO2_BUTTONS; ui32Idx++) + { + if(psWidget == (tWidget *)(g_psRadioButtons2 + ui32Idx)) + { + break; + } + } + + // + // Return if the radio button could not be found. + // + if(ui32Idx == NUM_RADIO2_BUTTONS) + { + return; + } + + // + // Sind the radio button is in the second group, offset the index to + // the indicators associated with the second group. + // + ui32Idx += NUM_RADIO1_BUTTONS; + } + + // + // Set the matching indicator based on the selected state of the radio + // button. + // + CanvasImageSet(g_psRadioButtonIndicators + ui32Idx, + bSelected ? g_pui8LightOn : g_pui8LightOff); + WidgetPaint((tWidget *)(g_psRadioButtonIndicators + ui32Idx)); + + // + // Play the key click sound. + // + PlayClick(); +} + +//***************************************************************************** +// +// The callback function that is called by the sound driver to indicate that +// half of the sound buffer has been played. +// +//***************************************************************************** +void +SoundCallback(uint32_t ui32Half) +{ + // + // See which half of the sound buffer has been played. + // + if(ui32Half == 0) + { + // + // The first half of the sound buffer needs to be filled. + // + HWREGBITW(&g_ui32Flags, FLAG_PING) = 1; + } + else + { + // + // The second half of the sound buffer needs to be filled. + // + HWREGBITW(&g_ui32Flags, FLAG_PONG) = 1; + } +} + +//***************************************************************************** +// +// Generates an additional section of the audio output +// +//***************************************************************************** +void +GenerateAudio(int16_t *pi16Buffer, uint32_t ui32Count) +{ + int32_t i32Val; + + // + // if g_ui32Amp is down to 0, fill the buffer with silence. + // + if(g_ui32Amp == 0) + { + // + // Fill the buffer with silence. + // + while(ui32Count--) + { + *pi16Buffer++ = 0; + } + return; + } + + // + // Loop through the samples to be generated. + // + while(ui32Count--) + { + // + // Compute the value of the waveform. + // + i32Val = sine(g_ui32AudioPos + (sine(g_ui32AudioPos * 3) * 10922)); + + // + // Increment the position of the waveform. + // + g_ui32AudioPos += g_ui32AudioStep; + + // + // Scale the waveform value by the volume. + // + i32Val = (i32Val * g_ui32Amp) / 1024; + + // + // Decrement the waveform amplitude by the step. + // + g_ui32Amp -= g_ui32AmpStep; + + // + // Cilp the waveform to min/max if required. + // + i32Val /= 2; + if(i32Val > 32767) + { + i32Val = 32767; + } + if(i32Val < -32768) + { + i32Val = -32768; + } + + // + // Add the new waveform value to the sample buffer. + // + *pi16Buffer++ = (int16_t)i32Val; + } +} +//***************************************************************************** +// +// A simple demonstration of the features of the TivaWare Graphics Library. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "grlib-demo"); + + // + // Configure and enable uDMA + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + SysCtlDelay(10); + ROM_uDMAControlBaseSet(&psDMAControlTable[0]); + ROM_uDMAEnable(); + + // + // Initialize the sound driver. + // + SoundInit(ui32SysClock); + SoundVolumeSet(128); + SoundStart(g_pi16AudioBuffer, AUDIO_SIZE, 64000, SoundCallback); + + // + // Initialize the touch screen driver and have it route its messages to the + // widget tree. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the title block and the previous and next buttons to the widget + // tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sPrevious); + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sTitle); + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sNext); + + // + // Add the first panel to the widget tree. + // + g_ui32Panel = 0; + WidgetAdd(WIDGET_ROOT, (tWidget *)g_psPanels); + CanvasTextSet(&g_sTitle, g_pcPanelNames[0]); + + // + // Issue the initial paint request to the widgets. + // + WidgetPaint(WIDGET_ROOT); + + // + // Loop forever handling widget messages. + // + while(1) + { + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + + // + // See if the first half of the sound buffer needs to be filled. + // + if(HWREGBITW(&g_ui32Flags, FLAG_PING) == 1) + { + // + // generate new audio into the first half of the sound buffer. + // + GenerateAudio(g_pi16AudioBuffer, AUDIO_SIZE / 2); + + // + // Clear the flag for the first half of the sound buffer. + // + HWREGBITW(&g_ui32Flags, FLAG_PING) = 0; + } + + // + // See if the second half of the sound buffer needs to be filled. + // + if(HWREGBITW(&g_ui32Flags, FLAG_PONG) == 1) + { + // + // generate new audio into the second half of the sound buffer. + // + GenerateAudio(g_pi16AudioBuffer + (AUDIO_SIZE / 2), + AUDIO_SIZE / 2); + + // + // Clear the flag for the second half of the sound buffer. + // + HWREGBITW(&g_ui32Flags, FLAG_PONG) = 0; + } + } +} diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.ewd b/boards/dk-tm4c129x/grlib_demo/grlib_demo.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.ewp b/boards/dk-tm4c129x/grlib_demo/grlib_demo.ewp new file mode 100644 index 0000000..ac0accb --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.ewp @@ -0,0 +1,813 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\grlib_demo.c + + + $PROJ_DIR$\images.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\..\..\..\..\utils\sine.c + + + $PROJ_DIR$\..\drivers\sound.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.icf b/boards/dk-tm4c129x/grlib_demo/grlib_demo.icf new file mode 100644 index 0000000..bbee1cb --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// grlib_demo.icf - Linker configuration file for grlib_demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.ld b/boards/dk-tm4c129x/grlib_demo/grlib_demo.ld new file mode 100644 index 0000000..33033f0 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * grlib_demo.ld - Linker configuration file for grlib_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.sct b/boards/dk-tm4c129x/grlib_demo/grlib_demo.sct new file mode 100644 index 0000000..7cd69f3 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; grlib_demo.sct - Linker configuration file for grlib_demo. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.uvopt b/boards/dk-tm4c129x/grlib_demo/grlib_demo.uvopt new file mode 100644 index 0000000..42fd806 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.uvopt @@ -0,0 +1,415 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + grlib_demo + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\grlib_demo.c + grlib_demo.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\images.c + images.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\sine.c + sine.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\sound.c + sound.c + + + 1 + 8 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 13 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo.uvproj b/boards/dk-tm4c129x/grlib_demo/grlib_demo.uvproj new file mode 100644 index 0000000..c3a49a7 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo.uvproj @@ -0,0 +1,469 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + grlib_demo + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + grlib_demo + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\grlib_demo.bin .\rvmdk\grlib_demo.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + grlib_demo.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + grlib_demo.c + 1 + .\grlib_demo.c + + + images.c + 1 + .\images.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + sine.c + 1 + ..\..\..\..\utils\sine.c + + + sound.c + 1 + ..\drivers\sound.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/grlib_demo/grlib_demo_ccs.cmd b/boards/dk-tm4c129x/grlib_demo/grlib_demo_ccs.cmd new file mode 100644 index 0000000..137604d --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/grlib_demo_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * grlib_demo_ccs.cmd - CCS linker configuration file for grlib_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/grlib_demo/images.c b/boards/dk-tm4c129x/grlib_demo/images.c new file mode 100644 index 0000000..b291f67 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/images.c @@ -0,0 +1,1131 @@ +//***************************************************************************** +// +// images.c - Data for the images used by the application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" + +//***************************************************************************** +// +// The image of the TI symbol. +// +//***************************************************************************** +const uint8_t g_ui8Logo[] = +{ + IMAGE_FMT_4BPP_COMP, + 50, 0, + 50, 0, + + 15, + 0x00, 0x00, 0x00, + 0x03, 0x02, 0x13, + 0x07, 0x05, 0x2a, + 0x0a, 0x08, 0x41, + 0x0d, 0x0a, 0x55, + 0x10, 0x0c, 0x68, + 0x12, 0x0e, 0x74, + 0x15, 0x10, 0x88, + 0x17, 0x12, 0x97, + 0x19, 0x14, 0xa7, + 0x1c, 0x16, 0xb8, + 0x1e, 0x18, 0xc8, + 0x20, 0x19, 0xd6, + 0x22, 0x1b, 0xe1, + 0x24, 0x1c, 0xe9, + 0x24, 0x1c, 0xed, + + 0xf0, 0x07, 0x07, 0x07, 0x02, 0x04, 0xba, 0xaa, 0xaa, 0x18, 0xaa, 0xac, + 0x30, 0x07, 0x07, 0x05, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x40, 0x3f, + 0x3f, 0x3f, 0x3f, 0xc7, 0x3f, 0x3d, 0x48, 0x78, 0x50, 0x3f, 0x3f, 0x3a, + 0x1c, 0xbf, 0xff, 0x70, 0x3f, 0x3f, 0x39, 0x01, 0xdf, 0xe0, 0x12, 0x3f, + 0x3f, 0x00, 0x04, 0xff, 0xff, 0x20, 0xe1, 0x3f, 0x3f, 0x39, 0x03, 0x97, + 0x87, 0x10, 0x3f, 0xf8, 0x3f, 0x39, 0x5f, 0x3f, 0x3b, 0x96, 0x82, 0x06, + 0x00, 0x87, 0x84, 0x04, 0x87, 0x77, 0x77, 0x78, 0x30, 0xc0, 0x3f, 0x3b, + 0xff, 0xd1, 0x0d, 0xff, 0xf5, 0x09, 0xb0, 0xaa, 0x60, 0x3f, 0x3c, 0xa0, + 0x2f, 0xff, 0xf2, 0x60, 0x0c, 0x3f, 0x3f, 0xff, 0xff, 0x80, 0x4f, 0xff, + 0x30, 0xc0, 0x1e, 0x3f, 0x3f, 0xff, 0xff, 0x50, 0x7f, 0x18, 0xff, 0x90, + 0x4f, 0x3f, 0x3f, 0xfd, 0xef, 0x20, 0x06, 0xaf, 0xff, 0x70, 0x7f, 0xdd, + 0x3f, 0x3e, 0xb2, 0x01, 0x12, 0x01, 0xcf, 0xff, 0x50, 0x12, 0x07, 0x3f, + 0x80, 0x3e, 0x80, 0x00, 0x03, 0xff, 0xff, 0x30, 0x00, 0x5a, 0x08, 0x39, + 0x70, 0x3f, 0x3a, 0x60, 0x01, 0xfc, 0x10, 0x10, 0x00, 0x1b, 0x39, 0xb0, + 0x00, 0x00, 0x8c, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0x3a, 0x40, + 0x01, 0x00, 0x07, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0x39, 0x0c, 0xf6, 0x00, + 0x00, 0x7f, 0x6a, 0x4a, 0xff, 0xfd, 0x00, 0x20, 0x00, 0x0a, 0xff, 0xf7, + 0x00, 0x00, 0x4f, 0x84, 0x39, 0xfe, 0x40, 0x00, 0x29, 0x3f, 0xfe, 0xab, + 0x01, 0xa0, 0x1c, 0xff, 0xf4, 0x08, 0xca, 0xcf, 0x72, 0x08, 0xf7, 0x00, + 0x02, 0xdf, 0x37, 0xff, 0xb0, 0x2f, 0x10, 0xff, 0xf2, 0x0c, 0x8c, 0xf7, + 0x00, 0x00, 0x3f, 0x81, 0x3f, 0xff, 0x80, 0x4f, 0xff, 0xc0, 0x2e, 0x3f, + 0x20, 0x02, 0xcf, 0x37, 0x50, 0x8f, 0xff, 0xa0, 0x4f, 0x90, 0x3f, 0x00, + 0x2c, 0x3f, 0x30, 0xaf, 0xff, 0x70, 0x48, 0x7f, 0x3f, 0x00, 0x02, 0x3e, + 0xfd, 0x10, 0xcf, 0x11, 0xff, 0x40, 0x9f, 0x3f, 0x00, 0x00, 0x8f, 0x35, + 0x02, 0xfa, 0x02, 0xff, 0xfe, 0x20, 0xcf, 0x3f, 0x00, 0x20, 0x00, 0x2f, + 0x3d, 0xf8, 0x05, 0xff, 0xfd, 0x00, 0xd0, 0x3f, 0x31, 0x09, 0x3d, 0xf5, + 0x03, 0x54, 0x53, 0x12, 0x00, 0x34, 0x6e, 0x3f, 0x00, 0x04, 0x39, 0xfa, + 0x09, 0x9c, 0xff, 0xff, 0xf3, 0x9a, 0x00, 0x3f, 0x3a, 0x20, 0xa6, 0x31, + 0xa3, 0xaf, 0xff, 0xfe, 0x30, 0x01, 0x10, 0xbf, 0xff, 0xd1, 0x3b, 0x7f, + 0xff, 0xff, 0xfd, 0x40, 0x72, 0x4b, 0x00, 0x00, 0x2c, 0xff, 0xe3, 0x00, + 0x08, 0x00, 0x2d, 0xff, 0xe1, 0x3b, 0x9f, 0xff, 0xfe, 0x40, 0x71, 0x45, + 0x00, 0x01, 0x68, 0x20, 0x00, 0x00, 0x11, 0x06, 0xff, 0xf6, 0xa3, 0xbf, + 0xff, 0xb2, 0x46, 0x80, 0x15, 0xbf, 0xff, 0x94, 0x33, 0x22, 0x22, 0x23, + 0x30, 0xef, 0xf8, 0x47, 0x05, 0x6f, 0xff, 0xff, 0xfe, 0x06, 0xee, 0xee, + 0xee, 0xff, 0x70, 0x3f, 0x05, 0x1c, 0x16, 0xff, 0xff, 0xff, 0xe9, 0xf9, + 0x47, 0x06, 0x07, 0xb2, 0x3c, 0xc1, 0x3f, 0x06, 0x02, 0xdf, 0x33, 0x50, + 0xd3, 0x3f, 0x07, 0x7f, 0x3a, 0xfc, 0x10, 0x3f, 0x07, 0x59, 0x2d, 0x3a, + 0xf9, 0x47, 0x07, 0x00, 0x05, 0x3a, 0x62, 0xf7, 0x3f, 0x07, 0x00, 0x00, + 0x9f, 0x31, 0xf8, 0xc5, 0x3f, 0x07, 0x00, 0x00, 0x0a, 0x39, 0xf9, 0x3f, + 0xc1, 0x07, 0x01, 0x9f, 0xff, 0xff, 0xfc, 0x10, 0x37, 0x80, 0x07, 0x00, + 0x00, 0x06, 0xdf, 0xff, 0xff, 0x50, 0xe1, 0x3f, 0x07, 0x01, 0x15, 0x78, + 0x86, 0x20, 0x3f, 0xff, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x00, 0x00, +}; + +//***************************************************************************** +// +// This is the image of a red LED that is turned off. +// +//***************************************************************************** +const uint8_t g_pui8LightOff[] = +{ + IMAGE_FMT_4BPP_COMP, + 20, 0, + 20, 0, + + 15, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, + 0x00, 0x00, 0x19, + 0x00, 0x00, 0x2a, + 0x00, 0x00, 0x30, + 0x00, 0x00, 0x34, + 0x00, 0x00, 0x37, + 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x3d, + 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x40, + 0x00, 0x00, 0x42, + 0x00, 0x00, 0x45, + 0x00, 0x00, 0x4a, + 0x00, 0x00, 0x50, + 0x00, 0x00, 0x56, + + 0x84, 0x01, 0x13, 0xaf, 0xe8, 0x31, 0x03, 0x1b, 0xff, 0x08, 0xff, 0xee, + 0xed, 0x71, 0x01, 0x02, 0xff, 0xff, 0x00, 0xfe, 0xed, 0xdd, 0xcc, 0x20, + 0x00, 0x00, 0x2f, 0x00, 0xff, 0xfe, 0xee, 0xdd, 0xcc, 0xcb, 0xa2, 0x00, + 0x40, 0x01, 0x21, 0xdd, 0xdc, 0xcc, 0xbb, 0xa8, 0x10, 0x00, 0x09, 0xff, + 0xfe, 0xdd, 0xdc, 0xcb, 0xbb, 0xba, 0x00, 0x98, 0x30, 0x1e, 0xfe, 0xed, + 0xdc, 0xcb, 0xaa, 0x00, 0xaa, 0xaa, 0x98, 0x61, 0x3e, 0xfe, 0xdd, 0xcc, + 0x00, 0xba, 0x99, 0x9a, 0xaa, 0x98, 0x62, 0x7d, 0xee, 0x00, 0xdc, 0xcb, + 0xa9, 0x99, 0x99, 0x99, 0x88, 0x73, 0x08, 0xcd, 0xed, 0xdc, 0xba, 0xb9, + 0x99, 0x88, 0x64, 0x20, 0xcc, 0xdd, 0x6b, 0x99, 0x87, 0x63, 0x6c, 0xcc, + 0x40, 0xba, 0x1a, 0x98, 0x76, 0x42, 0x2b, 0xba, 0xaa, 0x88, 0x1b, 0x65, + 0x42, 0x1a, 0x2a, 0x99, 0x98, 0x87, 0x00, 0x64, 0x30, 0x04, 0x78, 0x88, + 0x88, 0x89, 0x99, 0x00, 0x88, 0x76, 0x54, 0x20, 0x01, 0x67, 0x77, 0x88, + 0x00, 0x88, 0x88, 0x87, 0x65, 0x43, 0x00, 0x00, 0x25, 0x00, 0x67, 0x77, + 0x77, 0x77, 0x65, 0x44, 0x31, 0x00, 0x00, 0x00, 0x01, 0x45, 0x66, 0x66, + 0x65, 0x54, 0x43, 0x00, 0x10, 0x00, 0x00, 0x00, 0x13, 0x44, 0x45, 0x44, + 0x20, 0x33, 0x20, 0xb9, 0x00, 0x00, 0x12, 0x23, 0x32, 0x80, 0x72, +}; + +//***************************************************************************** +// +// This is the image of a red LED that is turned on. +// +//***************************************************************************** +const uint8_t g_pui8LightOn[] = +{ + IMAGE_FMT_4BPP_COMP, + 20, 0, + 20, 0, + + 15, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, + 0x00, 0x00, 0x40, + 0x00, 0x00, 0x76, + 0x00, 0x00, 0x9b, + 0x00, 0x00, 0xac, + 0x00, 0x00, 0xb6, + 0x00, 0x00, 0xbc, + 0x00, 0x00, 0xbe, + 0x00, 0x00, 0xbf, + 0x00, 0x00, 0xc1, + 0x00, 0x00, 0xc5, + 0x00, 0x00, 0xcd, + 0x00, 0x00, 0xdb, + 0x00, 0x00, 0xef, + 0x00, 0x00, 0xfc, + + 0x84, 0x01, 0x13, 0xaf, 0xe7, 0x31, 0x03, 0x1b, 0xff, 0x09, 0xff, 0xee, + 0xee, 0x51, 0x01, 0x02, 0xff, 0xb1, 0x02, 0xdd, 0xcc, 0x20, 0x00, 0x00, + 0x2f, 0xbb, 0xcc, 0x10, 0x92, 0x00, 0x01, 0x72, 0xdc, 0xcc, 0xcb, 0x96, + 0x00, 0x10, 0x07, 0xff, 0xfe, 0xed, 0xdc, 0xcc, 0xbb, 0x08, 0xba, 0x96, + 0x30, 0x1e, 0x22, 0xba, 0xaa, 0xaa, 0x10, 0x86, 0x51, 0x3e, 0x69, 0xba, + 0x99, 0x99, 0x99, 0x01, 0x76, 0x52, 0x5d, 0xee, 0xdd, 0xcb, 0xa9, 0xb2, + 0x20, 0x53, 0xcd, 0x6c, 0x98, 0x76, 0x54, 0xcc, 0xdd, 0x40, 0xcc, 0x6a, + 0x97, 0x66, 0x43, 0x5c, 0xcc, 0xba, 0x40, 0x98, 0x19, 0x87, 0x65, 0x43, + 0x3c, 0xcb, 0xa9, 0x20, 0x98, 0x89, 0x1a, 0x42, 0x1a, 0x88, 0x98, 0x77, + 0x40, 0x88, 0x69, 0x44, 0x31, 0x04, 0x67, 0x77, 0x77, 0x00, 0x78, 0x88, + 0x76, 0x55, 0x44, 0x20, 0x01, 0x55, 0x00, 0x66, 0x66, 0x77, 0x77, 0x65, + 0x54, 0x43, 0x10, 0x00, 0x00, 0x24, 0x55, 0x55, 0x66, 0x65, 0x54, 0x44, + 0x00, 0x31, 0x00, 0x00, 0x02, 0x44, 0x45, 0x55, 0x54, 0x00, 0x44, 0x33, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x44, 0x08, 0x44, 0x44, 0x33, 0x21, 0xb9, + 0x00, 0x00, 0x12, 0x10, 0x33, 0x32, 0x20, 0xba, +}; + +//***************************************************************************** +// +// This is the image of the blue push button background. +// +//***************************************************************************** +const uint8_t g_pui8Blue50x50[] = +{ + IMAGE_FMT_4BPP_COMP, + 50, 0, + 50, 0, + + 15, + 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x63, 0x00, 0x00, + 0x6f, 0x00, 0x00, + 0x78, 0x00, 0x00, + 0x7c, 0x00, 0x00, + 0x7d, 0x00, 0x00, + 0x7f, 0x00, 0x00, + 0x81, 0x00, 0x00, + 0x85, 0x00, 0x00, + 0x89, 0x00, 0x00, + 0x8d, 0x00, 0x00, + 0x93, 0x00, 0x00, + 0x9b, 0x00, 0x00, + 0xa9, 0x00, 0x00, + + 0x81, 0x03, 0x13, 0x9e, 0xfe, 0xff, 0xff, 0xff, 0xe9, 0x8a, 0xd1, 0xfe, + 0xd7, 0x31, 0x07, 0x2e, 0x51, 0xee, 0x35, 0xee, 0xee, 0xe9, 0xd4, 0xa2, + 0x35, 0x1e, 0x41, 0x41, 0xfe, 0x3f, 0xee, 0xee, 0xdd, 0xcc, 0x91, 0x33, + 0x40, 0x03, 0x41, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdd, 0xc1, 0xe9, 0xd1, + 0xdc, 0xcd, 0xcc, 0xaa, 0x20, 0x32, 0x41, 0x3f, 0x41, 0xed, 0xdc, 0xcc, + 0xcc, 0xcc, 0xe9, 0x81, 0xd1, 0xbb, 0xbb, 0xcc, 0xcb, 0xba, 0x52, 0x39, + 0x40, 0x03, 0x42, 0xcc, 0xba, 0xaa, 0x99, 0x99, 0x99, 0xc0, 0xe9, 0xd1, + 0xaa, 0xaa, 0xab, 0xa9, 0x95, 0x20, 0x04, 0x00, 0x00, 0x1f, 0xff, 0xfe, + 0x41, 0x99, 0x98, 0x1c, 0x88, 0x88, 0x88, 0xe9, 0xd1, 0x29, 0x99, 0x98, + 0x00, 0x41, 0x00, 0x00, 0xef, 0xff, 0xee, 0xdc, 0xba, 0x60, 0x99, 0x4f, + 0x01, 0x89, 0x99, 0x99, 0x98, 0x53, 0x01, 0x00, 0x02, 0xff, 0xfe, 0xed, + 0xcb, 0xa9, 0x47, 0x80, 0x35, 0x98, 0x64, 0x10, 0x0d, 0xef, 0xee, 0xdc, + 0x30, 0xba, 0x98, 0x3f, 0x04, 0x99, 0x88, 0x54, 0x30, 0x06, 0x1e, 0xfe, + 0xed, 0xcb, 0xa9, 0x47, 0x06, 0x86, 0x01, 0x55, 0x41, 0x3e, 0xfe, 0xed, + 0xba, 0x98, 0x3f, 0x81, 0x3f, 0x65, 0x41, 0x5e, 0xee, 0xdc, 0xb9, 0x47, + 0x80, 0x07, 0x88, 0x65, 0x42, 0xbd, 0xee, 0xdb, 0xa9, 0xe1, 0x3f, 0x3f, + 0x39, 0xcc, 0xed, 0xcb, 0x98, 0x3f, 0x81, 0x3f, 0x88, 0x65, 0x43, 0xcc, + 0xdd, 0xca, 0x3f, 0xc3, 0x3f, 0x39, 0x42, 0xcb, 0xdc, 0xba, 0x3f, 0x3f, + 0xb0, 0x3c, 0xb9, 0x47, 0x07, 0x88, 0x88, 0x75, 0x32, 0x18, 0xcb, 0xdc, + 0xa9, 0x3f, 0x07, 0x88, 0x88, 0x65, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xf8, 0x3f, 0x3f, 0x3f, 0x07, 0x01, 0x64, 0x32, 0xcb, + 0x73, 0xcc, 0x3f, 0x3f, 0x3b, 0x9b, 0xcb, 0x3f, 0x07, 0x00, 0x88, 0x88, + 0x87, 0x54, 0x32, 0x4a, 0xba, 0x99, 0x60, 0x98, 0x37, 0x07, 0x86, 0x54, + 0x32, 0x2a, 0xaa, 0x60, 0xa9, 0x47, 0x07, 0x88, 0x75, 0x43, 0x21, 0x19, + 0x30, 0x8a, 0x99, 0x3f, 0x07, 0x88, 0x65, 0x43, 0x21, 0x0c, 0x04, 0x49, + 0x98, 0x98, 0x37, 0x06, 0x86, 0x54, 0x06, 0x33, 0x20, 0x02, 0x46, 0x68, + 0x47, 0x07, 0x76, 0x01, 0x54, 0x32, 0x10, 0x00, 0x44, 0x66, 0x66, 0x2f, + 0x80, 0x05, 0x87, 0x65, 0x43, 0x32, 0x00, 0x00, 0x13, 0x18, 0x45, 0x55, + 0x66, 0x3f, 0x04, 0x66, 0x54, 0x33, 0x00, 0x21, 0x00, 0x00, 0x01, 0x34, + 0x45, 0x56, 0x66, 0x60, 0x78, 0x2f, 0x01, 0x76, 0x54, 0x43, 0x32, 0x10, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x44, 0x45, 0x55, 0x37, 0x82, 0x01, 0x66, + 0x55, 0x44, 0x33, 0x21, 0x41, 0x00, 0x00, 0x01, 0x23, 0x44, 0x44, 0x55, + 0x56, 0x66, 0x66, 0x60, 0x66, 0xe9, 0xd1, 0x65, 0x54, 0x44, 0x33, 0x22, + 0x40, 0x10, 0x3a, 0x00, 0x12, 0x33, 0x34, 0x44, 0x44, 0x61, 0x44, 0xe9, + 0xd4, 0x43, 0x33, 0x22, 0x21, 0x43, 0x86, 0x31, 0x23, 0x33, 0x33, 0x33, + 0xe9, 0xd4, 0x32, 0x80, 0x47, 0x00, 0x00, 0x01, 0x12, 0x22, 0x22, 0x22, + 0xc8, 0xe9, 0xd3, 0x21, 0x10, 0x43, +}; + +//***************************************************************************** +// +// This is the image of the blue push button background, used when the buttons +// are pressed. +// +//***************************************************************************** +const uint8_t g_pui8Blue50x50Press[] = +{ + IMAGE_FMT_4BPP_COMP, + 50, 0, + 50, 0, + + 15, + 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x63, 0x00, 0x00, + 0x6f, 0x00, 0x00, + 0x78, 0x00, 0x00, + 0x7c, 0x00, 0x00, + 0x7d, 0x00, 0x00, + 0x7f, 0x00, 0x00, + 0x81, 0x00, 0x00, + 0x85, 0x00, 0x00, + 0x89, 0x00, 0x00, + 0x8d, 0x00, 0x00, + 0x93, 0x00, 0x00, + 0x9b, 0x00, 0x00, + 0xa9, 0x00, 0x00, + + 0x83, 0x03, 0x01, 0x12, 0x22, 0x22, 0x22, 0xe9, 0xd3, 0x20, 0x21, 0x10, + 0x07, 0x12, 0x22, 0x23, 0x33, 0x33, 0x64, 0x33, 0xe9, 0xd4, 0x32, 0x21, + 0x47, 0x33, 0x34, 0x19, 0x44, 0x44, 0x44, 0xe9, 0xd4, 0x43, 0x33, 0x34, + 0x00, 0x01, 0x22, 0x33, 0x44, 0x45, 0x56, 0x66, 0x66, 0x60, 0x66, 0xe9, + 0xd1, 0x65, 0x55, 0x44, 0x44, 0x32, 0x40, 0x10, 0x32, 0x12, 0x33, 0x44, + 0x55, 0x66, 0x88, 0x30, 0x88, 0x88, 0xe9, 0xd2, 0x87, 0x66, 0x55, 0x54, + 0x20, 0x44, 0x21, 0x39, 0x01, 0x23, 0x34, 0x45, 0x67, 0xc0, 0x47, 0x33, + 0x65, 0x54, 0x43, 0x10, 0x00, 0x00, 0x0c, 0x12, 0x33, 0x45, 0x66, 0x47, + 0x04, 0x66, 0x55, 0x00, 0x54, 0x31, 0x00, 0x00, 0x23, 0x34, 0x56, 0x78, + 0xc0, 0x3f, 0x04, 0x86, 0x66, 0x66, 0x44, 0x00, 0x01, 0x18, 0x23, 0x45, + 0x67, 0x47, 0x2f, 0x86, 0x64, 0x20, 0x0c, 0x02, 0x33, 0x45, 0x68, 0x3f, + 0x06, 0x89, 0x89, 0x06, 0x94, 0x40, 0x12, 0x34, 0x56, 0x47, 0x07, 0x88, + 0x03, 0x99, 0xa8, 0x91, 0x12, 0x34, 0x57, 0x3f, 0x07, 0x01, 0x88, 0x9a, + 0xaa, 0xa2, 0x23, 0x45, 0x68, 0x3f, 0x80, 0x07, 0x89, 0x99, 0xab, 0xa4, + 0x23, 0x45, 0x78, 0xc0, 0x3f, 0x07, 0x88, 0x9a, 0xbc, 0xb9, 0x23, 0x46, + 0xe7, 0x47, 0x3f, 0x39, 0xcc, 0xbc, 0x3f, 0x3f, 0x3b, 0x0f, 0xcd, 0xbc, + 0x23, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xb0, 0x39, 0x57, 0x3f, 0x07, 0x88, 0x88, 0x9b, 0xcd, + 0x18, 0xbc, 0x24, 0x56, 0x3f, 0x07, 0x88, 0x89, 0xab, 0xe1, 0x3f, 0x3f, + 0x3c, 0xac, 0xdd, 0xcc, 0x34, 0x3f, 0xc3, 0x3f, 0x39, 0xbc, 0xde, 0xcc, + 0x24, 0x3f, 0x07, 0x03, 0x88, 0x88, 0x9a, 0xbd, 0xee, 0xdb, 0x3f, 0x07, + 0x80, 0x01, 0x9b, 0xcd, 0xee, 0xe5, 0x14, 0x56, 0x68, 0xc0, 0x37, 0x06, + 0x89, 0xab, 0xde, 0xef, 0xe3, 0x14, 0x60, 0x55, 0x3f, 0x07, 0x9a, 0xbc, + 0xde, 0xef, 0xe1, 0x0c, 0x03, 0x45, 0x88, 0x99, 0x37, 0x04, 0x89, 0xab, + 0x00, 0xcd, 0xee, 0xfe, 0xd0, 0x01, 0x46, 0x89, 0x99, 0x60, 0x98, 0x37, + 0x03, 0x9a, 0xbc, 0xde, 0xef, 0xff, 0x06, 0x20, 0x00, 0x35, 0x89, 0x99, + 0x37, 0x03, 0x99, 0x00, 0xab, 0xcd, 0xee, 0xff, 0xfe, 0x00, 0x00, 0x14, + 0x04, 0x89, 0x99, 0xaa, 0x99, 0x99, 0x37, 0x89, 0x99, 0x00, 0xab, 0xcc, + 0xde, 0xef, 0xff, 0xf1, 0x00, 0x00, 0x05, 0x02, 0x59, 0x9a, 0xba, 0xaa, + 0x29, 0x99, 0xe9, 0xa0, 0xd1, 0xaa, 0x41, 0xee, 0xff, 0xff, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x25, 0xab, 0xbc, 0xcc, 0xbb, 0xbb, 0x1a, 0xcc, 0xcc, + 0xcc, 0xe9, 0xd1, 0xcd, 0x42, 0xf3, 0x80, 0x41, 0x00, 0x02, 0xaa, 0xcc, + 0xdc, 0xcd, 0xdd, 0x32, 0xdd, 0xdd, 0xe9, 0xd1, 0xde, 0xee, 0x41, 0xff, + 0x40, 0x30, 0x3a, 0x00, 0x19, 0xcc, 0xdd, 0xee, 0xee, 0x6a, 0xee, 0xe9, + 0xd3, 0xef, 0x41, 0xe1, 0x43, 0x00, 0x3a, 0x00, 0x2a, 0x47, 0x01, 0x41, + 0xe2, 0x45, 0x00, 0x0e, 0x00, 0x13, 0x7d, 0xef, 0x81, 0x69, 0x51, 0xef, + 0x20, 0xe9, 0x31, 0x43, +}; + +//***************************************************************************** +// +// Vertical "Temperature" image used in the slider widget example. +// +//***************************************************************************** +const uint8_t g_pui8GettingHotter28x148[] = +{ + IMAGE_FMT_8BPP_COMP, + 28, 0, + 148, 0, + + 63, + 0x00, 0x10, 0x42, + 0x00, 0x29, 0x46, + 0x00, 0x13, 0x72, + 0x00, 0x3c, 0x3c, + 0x00, 0x38, 0x6c, + 0x00, 0x0d, 0xc7, + 0x00, 0x22, 0x9e, + 0x00, 0x06, 0xe5, + 0x00, 0x03, 0xfe, + 0x00, 0x10, 0xf0, + 0x00, 0x45, 0x8a, + 0x00, 0x0b, 0xfe, + 0x00, 0x57, 0x69, + 0x00, 0x1e, 0xe2, + 0x00, 0x2e, 0xc7, + 0x00, 0x13, 0xfd, + 0x00, 0x1c, 0xf6, + 0x00, 0x1d, 0xfc, + 0x00, 0x34, 0xd7, + 0x00, 0x2c, 0xed, + 0x00, 0x44, 0xc3, + 0x00, 0x29, 0xfb, + 0x00, 0x65, 0x8d, + 0x00, 0x3f, 0xe3, + 0x00, 0x58, 0xb4, + 0x00, 0x37, 0xf9, + 0x00, 0x80, 0x7e, + 0x00, 0x46, 0xf8, + 0x00, 0x56, 0xe0, + 0x00, 0x6b, 0xc3, + 0x00, 0x54, 0xf6, + 0x00, 0x7d, 0xb6, + 0x00, 0x68, 0xe1, + 0x00, 0x61, 0xf5, + 0x00, 0x77, 0xd8, + 0x00, 0x6b, 0xf4, + 0x00, 0x9a, 0x9d, + 0x00, 0x74, 0xf3, + 0x00, 0xa7, 0x97, + 0x00, 0x94, 0xbd, + 0x00, 0x7b, 0xf2, + 0x00, 0x88, 0xdf, + 0x00, 0x90, 0xd6, + 0x00, 0x83, 0xf1, + 0x00, 0x8b, 0xf0, + 0x00, 0xab, 0xb9, + 0x00, 0x91, 0xf0, + 0x00, 0x9a, 0xee, + 0x00, 0xa8, 0xdc, + 0x00, 0xa5, 0xed, + 0x00, 0xc4, 0xc6, + 0x00, 0xb2, 0xec, + 0x00, 0xbc, 0xeb, + 0x00, 0xc3, 0xea, + 0x00, 0xd2, 0xda, + 0x00, 0xcc, 0xe9, + 0x00, 0xd4, 0xe9, + 0x00, 0xe1, 0xd8, + 0x00, 0xdb, 0xe8, + 0x00, 0xe0, 0xe7, + 0x00, 0xe6, 0xe7, + 0x00, 0xec, 0xe6, + 0x00, 0xf3, 0xe5, + 0x00, 0xfa, 0xe4, + + 0x1f, 0x08, 0x08, 0x08, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xfc, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x08, 0x19, 0x03, 0x28, 0x34, 0x34, 0x19, 0x15, + 0x15, 0x07, 0x07, 0x00, 0x08, 0x0f, 0x34, 0x3f, 0x3f, 0x3f, 0x3f, 0x0a, + 0x1c, 0x20, 0x3d, 0x20, 0x1f, 0x07, 0x2b, 0x3f, 0x04, 0x0d, 0x22, 0x3f, + 0x3f, 0x18, 0x1f, 0x05, 0x1e, 0x2b, 0x01, 0x3f, 0x04, 0x2a, 0x3f, 0x3f, + 0x39, 0x05, 0x1f, 0xa8, 0x04, 0x2c, 0x61, 0x16, 0x21, 0x29, 0x3f, 0x3f, + 0x30, 0x3f, 0x02, 0x27, 0x04, 0x34, 0x3f, 0x3f, 0x16, 0x4a, 0x00, 0x21, + 0x05, 0x36, 0xd9, 0x07, 0x1d, 0x0b, 0x29, 0x0b, 0x0b, 0xe9, 0x0b, 0x21, + 0x04, 0x05, 0x22, 0xe1, 0xbb, 0x5d, 0x25, 0x31, 0x3f, 0x3f, 0x2d, 0x22, + 0x30, 0x12, 0x3f, 0x27, 0x07, 0x28, 0x3e, 0x3e, 0x3e, 0x09, 0x36, 0x3e, + 0x3e, 0x32, 0xc9, 0x3e, 0x00, 0x27, 0x98, 0x04, 0x11, 0x3c, 0x52, 0x32, + 0x3e, 0x24, 0x00, 0xd1, 0x2f, 0x05, 0x1e, 0x26, 0x32, 0x00, 0x02, 0x27, + 0x90, 0x06, 0x0e, 0x2d, 0x12, 0x39, 0x16, 0x00, 0x02, 0x44, 0x09, 0x26, + 0x0f, 0x0f, 0x0f, 0xe9, 0x0f, 0x15, 0x00, 0x1b, 0x0f, 0x05, 0x02, 0x04, + 0x04, 0x04, 0x00, 0x18, 0x00, 0x05, 0x09, 0x6d, 0x35, 0x0f, 0x0f, 0x2f, + 0x00, 0x3d, 0x36, 0x28, 0x0f, 0x09, 0x05, 0x05, 0x05, 0xc0, 0x3f, 0x07, + 0x0f, 0x33, 0x3d, 0x3d, 0x32, 0x06, 0xe0, 0x47, 0x07, 0x03, 0x28, 0x3d, + 0x3d, 0x36, 0x02, 0xe8, 0x27, 0x07, 0x04, 0x1d, 0x19, 0x28, 0x1e, 0x1e, + 0x70, 0x1e, 0xe9, 0x07, 0x05, 0x28, 0x3d, 0x3d, 0x3d, 0xd1, 0xe9, 0xd3, + 0x05, 0x1e, 0x11, 0x11, 0x11, 0xe9, 0x06, 0x11, 0x28, 0x3c, 0x3c, 0x3c, + 0xe9, 0xd3, 0x00, 0xf8, 0x65, 0x2d, 0x27, 0x27, 0x07, 0x11, 0x11, 0x23, + 0x0f, 0x30, 0x2d, 0x2d, 0x2d, 0xe9, 0xd2, 0x27, 0x06, 0x0f, 0x05, 0x02, + 0x02, 0x02, 0xe9, 0xd3, 0x27, 0x07, 0xe1, 0x77, 0x2f, 0x05, 0x19, 0x1e, + 0x1e, 0x1e, 0xe9, 0xe1, 0xd3, 0x07, 0x05, 0x28, 0x3b, 0x3b, 0x3b, 0xe9, + 0xa2, 0xd3, 0x05, 0x1e, 0x15, 0x15, 0x15, 0xe9, 0x15, 0x0d, 0x28, 0x3a, + 0x3a, 0x3a, 0xe9, 0xd3, 0x00, 0x65, 0xf0, 0x2d, 0x27, 0x27, 0x07, 0x15, + 0x15, 0x23, 0x30, 0x00, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x36, 0x3a, 0x3a, + 0x30, 0x27, 0x16, 0x27, 0x06, 0x06, 0x02, 0x02, 0x02, 0x83, 0xe9, 0x1f, + 0x3a, 0x3a, 0x0a, 0x06, 0x27, 0x07, 0x83, 0x73, 0x1e, 0x38, 0x38, 0x32, + 0x0e, 0x27, 0x04, 0x08, 0x1b, 0x1e, 0x1e, 0x1e, 0xe9, 0x21, 0x33, 0x38, + 0x1b, 0x38, 0x38, 0x0a, 0x27, 0x04, 0x28, 0x61, 0x49, 0x9d, 0xd3, 0x04, + 0x0e, 0x27, 0x27, 0x0e, 0x00, 0x26, 0x10, 0x19, 0x19, 0x19, 0xe9, 0x19, + 0x28, 0x37, 0x37, 0x63, 0x37, 0xe9, 0xd2, 0x16, 0x00, 0x13, 0x5d, 0x25, + 0x04, 0x25, 0x30, 0x27, 0x27, 0x27, 0xe9, 0x27, 0x16, 0x18, 0x04, 0x00, + 0x06, 0x2f, 0x05, 0x06, 0x02, 0x02, 0x43, 0x02, 0xe9, 0x02, 0x02, 0x06, + 0x0e, 0x2f, 0x05, 0x0e, 0x1b, 0x21, 0x21, 0x1e, 0xb6, 0x27, 0x05, 0x28, + 0x08, 0x35, 0x35, 0x2f, 0x12, 0x1a, 0x33, 0x35, 0x35, 0x64, 0x0e, 0x27, + 0x27, 0x27, 0x02, 0x22, 0x31, 0x35, 0x37, 0x35, 0x04, 0x47, 0x43, 0x35, + 0xe9, 0xd4, 0xa1, 0x23, 0x04, 0x0e, 0x1f, 0x19, 0x1b, 0x30, 0x27, 0x27, + 0x80, 0x3c, 0x1b, 0x1b, 0x1b, 0x25, 0x34, 0x34, 0x34, 0xc3, 0xe9, 0xd4, + 0x34, 0x30, 0x00, 0x12, 0x5a, 0x3a, 0xa0, 0x1a, 0x30, 0x1f, 0x34, 0x33, + 0x1f, 0x01, 0x00, 0xc0, 0x2f, 0x03, 0x02, 0x16, 0x34, 0x34, 0x27, 0x00, + 0x23, 0x00, 0x00, 0xe9, 0x00, 0x02, 0x17, 0x27, 0x04, 0x07, 0x21, 0x1d, + 0x16, 0x0a, 0x02, 0x67, 0x1f, 0x04, 0x01, 0x14, 0x06, 0x14, 0x18, 0x23, + 0x23, 0x23, 0xe9, 0x60, 0x2b, 0x07, 0x06, 0x21, 0x31, 0x33, 0x33, 0x33, + 0xda, 0xe9, 0xd1, 0x06, 0x1f, 0x04, 0x1e, 0x37, 0x33, 0x24, 0x33, 0x00, + 0x5f, 0x1e, 0x1e, 0xe9, 0x1e, 0x28, 0xf0, 0x27, 0x21, 0x65, 0x2d, 0x1e, + 0x2e, 0x33, 0x33, 0x00, 0x30, 0x2a, 0x33, 0x30, 0x1f, 0x30, 0x33, 0x30, + 0x60, 0x0a, 0x27, 0x27, 0x33, 0x0a, 0x04, 0x33, 0x33, 0x03, 0x00, 0x04, + 0x1f, 0x33, 0x16, 0x14, 0x27, 0x25, 0x00, 0x31, 0x31, 0x04, 0x14, 0x2f, + 0x31, 0x0a, 0x1e, 0x0c, 0x23, 0x31, 0x30, 0x0a, 0x27, 0x27, 0x1f, 0x14, + 0x43, 0x2b, 0xe1, 0x25, 0x31, 0x31, 0x04, 0x27, 0x04, 0x00, 0x2b, 0x31, + 0x31, 0x31, 0x18, 0x28, 0x31, 0x31, 0x4d, 0x2a, 0xc1, 0x04, 0x14, 0x1f, + 0x03, 0x25, 0x62, 0x71, 0x18, 0x39, 0x27, 0x01, 0x21, 0x21, 0x21, 0xe9, + 0x14, 0x21, 0x21, 0x29, 0x62, 0x2f, 0x1a, 0x2a, 0x00, 0x68, 0x14, 0x5e, + 0x1e, 0x18, 0x61, 0x23, 0x2a, 0x2f, 0x0c, 0x2f, 0x2a, 0x04, 0x01, 0x2f, + 0x06, 0x1c, 0x0a, 0x81, 0x61, 0x1c, 0x0a, 0x04, 0x00, 0x01, 0x1c, 0x27, + 0x93, 0x04, 0x23, 0x25, 0x7d, 0x14, 0x14, 0x37, 0x06, 0x0c, 0x2b, 0x2f, + 0x2e, 0x28, 0x5f, 0x16, 0x23, 0x23, 0x40, 0x23, 0xe9, 0x23, 0x2c, 0x2f, + 0x2f, 0x22, 0x0a, 0xe0, 0xa5, 0x6d, 0x97, 0x28, 0x2e, 0x2e, 0x29, 0x04, + 0xe8, 0x27, 0x07, 0x04, 0x1d, 0x19, 0x28, 0x25, 0x25, 0x70, 0x25, 0xe9, + 0x07, 0x05, 0x28, 0x2e, 0x2e, 0x2e, 0xd8, 0xe9, 0xd3, 0x18, 0x27, 0x25, + 0x2c, 0x2c, 0x2c, 0xd1, 0xe9, 0xd3, 0x00, 0x26, 0x25, 0x25, 0x25, 0xe9, + 0x78, 0x25, 0x27, 0x22, 0x65, 0x2d, 0x25, 0x28, 0x22, 0x1e, 0x1d, 0x1d, + 0x1d, 0xe9, 0xd2, 0x27, 0x06, 0x18, 0x1c, 0x04, 0x04, 0x04, 0xe9, 0xd3, + 0x26, 0x28, 0x28, 0x67, 0x28, 0xe9, 0xd4, 0x2b, 0x2b, 0x97, 0x4f, 0x3d, + 0x01, 0x2b, 0x2b, 0x2b, 0x0a, 0x22, 0x2b, 0x22, 0x2f, 0xc0, 0x2f, 0x2b, + 0x2b, 0x04, 0x22, 0x2b, 0x2b, 0x1d, 0xe0, 0x1f, 0x07, 0x73, 0x04, 0x22, + 0x28, 0x28, 0x22, 0x45, 0x18, 0x1e, 0x2b, 0x2b, 0x2b, 0xe9, 0x2b, 0x01, + 0x27, 0x25, 0x0a, 0x24, 0x28, 0x04, 0x65, 0x2d, 0x22, 0x25, 0x0a, 0x01, + 0x21, 0x1d, 0x25, 0x21, 0x22, 0x27, 0x85, 0x24, 0x25, 0x25, 0x04, 0x18, + 0xe1, 0x1d, 0xba, 0x65, 0x1d, 0x27, 0x26, 0x18, 0x1d, 0x22, 0x25, 0x27, + 0x04, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0xe9, 0x2c, 0x2b, 0x88, 0x61, 0x20, + 0x25, 0x25, 0x2a, 0x25, 0x01, 0x1d, 0xcc, 0x5d, 0x25, 0x2c, 0x23, 0x52, + 0x32, 0x25, 0x18, 0x61, 0x01, 0x2f, 0x05, 0x2b, 0x23, 0x23, 0x23, 0xe9, + 0x04, 0x23, 0x23, 0x1d, 0x01, 0x0a, 0x26, 0x2e, 0x2e, 0x64, 0x2e, 0xe9, + 0xd1, 0x1d, 0x18, 0x12, 0x20, 0x0a, 0x18, 0x01, 0x04, 0x29, 0x67, 0x1f, + 0x22, 0x0a, 0x04, 0x07, 0x04, 0x04, 0x01, 0x01, 0x16, 0x2f, 0x07, 0x02, + 0x0c, 0x29, 0x1f, 0x1f, 0x22, 0x3f, 0x01, 0x2f, 0x2f, 0x60, 0x2f, 0xe9, + 0xd2, 0x2b, 0x28, 0x25, 0x25, 0x25, 0x30, 0x2b, 0x2c, 0x7f, 0x37, 0x2f, + 0x2c, 0x23, 0x21, 0x23, 0x21, 0x21, 0xe9, 0x21, 0x20, 0x2e, 0x17, 0x05, + 0x6d, 0x2e, 0x35, 0x01, 0x18, 0x1f, 0x05, 0x28, 0x27, 0x18, 0x21, 0x21, + 0x16, 0x27, 0x04, 0x23, 0x21, 0x21, 0x02, 0x1c, 0x0a, 0x04, 0x04, 0x04, + 0x14, 0x01, 0x04, 0x88, 0x26, 0x31, 0x31, 0x31, 0xe9, 0x31, 0x25, 0x1e, + 0x00, 0x1e, 0x0a, 0x01, 0x16, 0x1f, 0x1f, 0x1f, 0x1c, 0x0d, 0x1e, 0x1e, + 0x04, 0x1f, 0x5d, 0x25, 0x2c, 0x21, 0x83, 0x6b, 0x21, 0x1e, 0x1c, 0x01, + 0x2a, 0x27, 0x04, 0x00, 0x20, 0x1e, 0x1c, 0x1d, 0x2e, 0x2e, 0x2c, 0x23, + 0x01, 0x1e, 0x1e, 0x0a, 0x0a, 0x2e, 0x2e, 0x2e, 0x17, 0x87, 0x01, 0x2b, + 0x1e, 0x1e, 0x1e, 0xe9, 0xd4, 0xa1, 0x39, 0x22, 0x2f, 0x27, 0x27, 0x06, + 0x04, 0x1f, 0x27, 0xd1, 0x27, 0x27, 0x27, 0x21, 0x33, 0x33, 0x33, 0xe9, + 0x03, 0x33, 0x2b, 0x1c, 0x14, 0x14, 0x14, 0xe9, 0xd4, 0x0c, 0x14, 0x14, + 0x04, 0x27, 0x3d, 0x02, 0x1f, 0x0c, 0x3e, 0x0c, 0x0c, 0xe9, 0xd4, 0xa1, + 0x27, 0x03, 0x2f, 0x3c, 0x2f, 0x2f, 0xe9, 0xd1, 0x57, 0x0e, 0x2c, 0x1e, + 0x1b, 0x1b, 0x1b, 0x1b, 0xe9, 0xd1, 0x27, 0x1f, 0x04, 0x44, 0x2f, 0x37, + 0x1b, 0x1b, 0x01, 0x26, 0x34, 0x34, 0x4f, 0x34, 0xe9, 0x34, 0x23, 0x27, + 0x21, 0x65, 0x2d, 0x21, 0x34, 0x21, 0x21, 0x17, 0x14, 0x14, 0x14, 0xe9, + 0x68, 0x14, 0x27, 0x05, 0x25, 0x29, 0x01, 0x03, 0x0c, 0x2c, 0x0c, 0x0c, + 0xe9, 0x0c, 0x27, 0x04, 0x2f, 0x19, 0x0e, 0x19, 0x12, 0x03, 0x33, 0x5f, + 0x17, 0x03, 0x22, 0x02, 0x19, 0x19, 0x14, 0x2f, 0x2f, 0x2f, 0xe9, 0x2f, + 0x88, 0x07, 0x35, 0x35, 0x35, 0xe9, 0x35, 0x35, 0x2b, 0x1b, 0x19, 0x19, + 0x19, 0xe9, 0xd2, 0x27, 0x66, 0x25, 0x46, 0x2e, 0x2f, 0x19, 0x19, 0x03, + 0x27, 0x04, 0x21, 0xe8, 0x27, 0x27, 0x07, 0x1e, 0x21, 0x12, 0x0e, 0x0e, + 0x51, 0x0e, 0xe9, 0x0e, 0x27, 0x37, 0x37, 0x37, 0xe9, 0x20, 0x37, 0x23, + 0x29, 0x01, 0x03, 0x0c, 0x0c, 0x0c, 0xb0, 0xe9, 0x0c, 0x65, 0x2d, 0x37, + 0x31, 0x15, 0x15, 0x1c, 0x12, 0x03, 0x35, 0x5f, 0x17, 0x03, 0x22, 0x15, + 0x05, 0x15, 0x14, 0x31, 0x31, 0x31, 0xe9, 0x31, 0x07, 0x86, 0x05, 0x2b, + 0x15, 0x15, 0x15, 0xe9, 0xd3, 0x2d, 0x8b, 0x1e, 0x38, 0x38, 0x38, 0xe9, + 0x38, 0x27, 0x01, 0x7c, 0x03, 0x65, 0x2d, 0x27, 0x27, 0x07, 0x38, 0x38, + 0x07, 0x2c, 0x17, 0x0e, 0x0e, 0x0e, 0xe9, 0xd2, 0x27, 0x87, 0x06, 0x24, + 0x0c, 0x0c, 0x0c, 0xe9, 0xd3, 0x27, 0xe3, 0x07, 0x77, 0x2f, 0x3a, 0x3a, + 0x3a, 0xe9, 0xd2, 0x01, 0x33, 0x2b, 0x1e, 0x1e, 0x33, 0x35, 0x35, 0x7f, + 0x80, 0x37, 0x3a, 0x37, 0x1e, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x0a, 0x22, + 0x15, 0x29, 0x1f, 0x07, 0x2b, 0x11, 0x04, 0x04, 0x20, 0x11, 0x11, 0x1d, + 0x1f, 0x3b, 0x3b, 0x48, 0x3b, 0xe9, 0x3b, 0x2f, 0x2b, 0x11, 0x04, 0x1c, + 0x0c, 0x11, 0x11, 0x0d, 0x2d, 0x65, 0x2d, 0x3b, 0x25, 0x09, 0x11, 0x11, + 0x10, 0x06, 0x21, 0x20, 0x11, 0xd9, 0xc1, 0x27, 0x04, 0x1e, 0x11, 0x11, + 0x06, 0x03, 0x21, 0x28, 0x2d, 0x13, 0x21, 0x32, 0x1d, 0x3c, 0x3c, 0x3c, + 0x81, 0xe9, 0x3c, 0x1e, 0x0f, 0x0f, 0x04, 0x24, 0xe1, 0x58, 0x2d, 0xba, + 0x2d, 0x5d, 0x25, 0x21, 0x0f, 0x0f, 0x26, 0x0e, 0x2d, 0x01, 0x27, 0x0f, + 0x27, 0x07, 0x2b, 0xb3, 0x61, 0x0d, 0xe9, 0x29, 0x0f, 0x03, 0x27, 0x04, + 0x31, 0x3a, 0x10, 0x52, 0x32, 0x0f, 0x06, 0x03, 0x2e, 0x11, 0x3d, 0x3d, + 0x3d, 0xe9, 0x3d, 0x3d, 0x2f, 0x26, 0x18, 0x0d, 0x03, 0x1a, 0x66, 0x26, + 0x3d, 0x27, 0x0e, 0x82, 0x12, 0x09, 0x06, 0x03, 0x0c, 0x39, 0x27, 0x3d, + 0x30, 0x3d, 0x1b, 0x59, 0x01, 0x32, 0x16, 0x04, 0x04, 0x0c, 0x04, 0x03, + 0x03, 0x24, 0x2f, 0x23, 0x0b, 0x0b, 0x21, 0x0b, 0x03, 0x7a, 0x39, 0x32, + 0x32, 0x32, 0x3f, 0xf1, 0x27, 0x24, 0x47, 0x05, 0x3e, 0x3e, 0x3e, 0x23, + 0xf8, 0xc1, 0xa9, 0xd4, 0xa7, 0x24, 0x06, 0x2b, 0x2b, 0x7f, 0x2b, 0xe9, + 0xd3, 0x27, 0x25, 0x09, 0xd4, 0xa1, 0x63, 0x24, 0x27, 0x21, 0x08, 0x08, + 0x08, 0xe9, 0xd4, 0xbf, 0xa1, 0x03, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, + 0x84, 0x27, 0x3e, 0x3f, 0x3f, 0x3f, 0x22, 0x03, 0x03, 0x6f, 0x03, 0xe9, + 0xd4, 0x03, 0x61, 0x49, 0xd3, 0x23, 0xff, 0x87, 0x3f, 0x27, 0x27, 0x27, + 0x27, 0x27, 0x07, 0x87, 0x05, 0x2f, 0x14, 0x06, 0x06, 0x27, 0x07, 0x05, + 0x0f, 0x26, 0x26, 0x26, 0x26, 0x27, 0x07, 0x77, 0x2f, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x02, +}; + +//***************************************************************************** +// +// Background version of vertical "Temperature" image. +// +//***************************************************************************** +const uint8_t g_pui8GettingHotter28x148Mono[] = +{ + IMAGE_FMT_4BPP_COMP, + 28, 0, + 148, 0, + + 15, + 0x00, 0x00, 0x00, + 0x0e, 0x0d, 0x00, + 0x1c, 0x1a, 0x01, + 0x2a, 0x28, 0x01, + 0x38, 0x35, 0x01, + 0x46, 0x42, 0x01, + 0x54, 0x4f, 0x02, + 0x62, 0x5c, 0x02, + 0x70, 0x6a, 0x02, + 0x7e, 0x77, 0x02, + 0x8c, 0x84, 0x03, + 0x9a, 0x91, 0x03, + 0xa8, 0x9e, 0x03, + 0xb6, 0xac, 0x03, + 0xc4, 0xb9, 0x04, + 0xd2, 0xc6, 0x04, + + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x37, 0x10, 0xbb, 0x32, + 0x20, 0x07, 0x1b, 0xff, 0xff, 0x46, 0x40, 0xe6, 0x07, 0xbf, 0xff, 0xff, + 0x47, 0xff, 0x50, 0x80, 0x1d, 0x05, 0xff, 0xff, 0xff, 0x49, 0xff, 0xd0, + 0x80, 0x1d, 0x08, 0xff, 0xe6, 0xff, 0x48, 0xff, 0xf2, 0x80, 0x25, 0x0b, + 0xff, 0x60, 0xff, 0x40, 0xdf, 0xf4, 0x84, 0x97, 0x40, 0xff, 0x40, 0xbf, + 0x96, 0x0a, 0xff, 0x08, 0xa0, 0xff, 0x43, 0xff, 0x26, 0x07, 0xff, 0xfd, + 0x08, 0xff, 0xcf, 0xff, 0xf0, 0x25, 0x01, 0xef, 0xff, 0x09, 0xff, 0xff, + 0xff, 0x90, 0x25, 0x00, 0x5f, 0x91, 0x20, 0xfc, 0x10, 0x96, 0x03, 0xaf, + 0xff, 0xfe, 0x71, 0x82, 0x2e, 0x02, 0x40, 0x01, 0x44, 0x30, 0x36, 0x00, + 0x10, 0x09, 0xfd, 0x70, 0xa7, 0x00, 0x00, 0x0b, 0xff, 0x41, 0xc0, 0x97, + 0x00, 0x00, 0x07, 0xff, 0xd1, 0x27, 0x81, 0x01, 0x7f, 0xfd, 0x74, 0x44, + 0x44, 0x40, 0x27, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x97, 0x97, 0x27, + 0x80, 0x26, 0x06, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb0, 0xf8, 0x25, 0x5d, + 0x97, 0x4f, 0x01, 0x02, 0x44, 0x44, 0x08, 0x44, 0x44, 0x44, 0x40, 0x05, + 0x07, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x97, 0x97, 0x27, 0x26, + 0x01, 0x06, 0xbb, 0xbb, 0xbb, 0xef, 0xfa, 0x70, 0x25, 0x88, 0x02, 0x09, + 0xff, 0x40, 0x97, 0x00, 0x00, 0x04, 0x20, 0xff, 0xd0, 0x25, 0x02, 0x44, + 0x44, 0x44, 0x5c, 0x20, 0xff, 0xf4, 0x25, 0x07, 0xff, 0xff, 0xff, 0xff, + 0xda, 0x97, 0x94, 0xf1, 0x27, 0x1a, 0x60, 0x25, 0x06, 0x07, 0xbb, 0xbb, + 0xbb, 0xbb, 0x84, 0x2d, 0x65, 0x96, 0x14, 0x02, 0x44, 0x30, 0xd9, 0x40, + 0x1d, 0x07, 0xff, 0x06, 0xb0, 0x00, 0x00, 0xdf, 0xf0, 0x97, 0x91, 0xcf, + 0x4a, 0xf4, 0x35, 0xff, 0xff, 0xe9, 0xff, 0x94, 0x01, 0x52, 0xdf, 0x8c, + 0xf3, 0x23, 0x00, 0x6f, 0x1c, 0xd0, 0xa4, 0x94, 0x0c, 0x23, 0xea, 0x20, + 0x24, 0x00, 0x07, 0x31, 0xff, 0xb0, 0xb5, 0x0a, 0x04, 0x77, 0x60, 0x97, + 0x82, 0x02, 0x24, 0x44, 0x44, 0x44, 0x80, 0x06, 0x3d, 0x04, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0x05, 0x02, 0xef, 0xd8, 0x97, 0x01, 0x07, 0x2a, 0x27, + 0x0a, 0xff, 0xed, 0x08, 0xfe, 0xbe, 0xfe, 0x50, 0x25, 0x0b, 0xff, 0x53, + 0x08, 0xff, 0x01, 0xbf, 0x70, 0x97, 0x40, 0xdf, 0x50, 0x20, 0x5f, 0xe0, + 0x27, 0xa1, 0x9f, 0xa0, 0x5f, 0xf3, 0x80, 0x25, 0x08, 0xff, 0xf7, 0x7f, + 0xfc, 0xef, 0xf4, 0x81, 0x25, 0x05, 0xff, 0xf4, 0x3f, 0xff, 0xff, 0x26, + 0x01, 0x00, 0xcf, 0xf4, 0x0d, 0xff, 0xff, 0xd0, 0x96, 0x03, 0x17, 0xd0, + 0x03, 0xdf, 0xfd, 0x30, 0x26, 0x01, 0x2c, 0x04, 0x40, 0x2e, 0x02, 0xb7, + 0x0a, 0x09, 0xfd, 0x41, 0x70, 0x8f, 0x00, 0x00, 0x0b, 0xff, 0xc0, 0x1f, + 0x06, 0x00, 0x00, 0x07, 0xff, 0xd1, 0x27, 0x01, 0x7f, 0x04, 0xfd, 0x74, + 0x44, 0x44, 0x40, 0x27, 0xff, 0xff, 0x1e, 0xff, 0xff, 0xf0, 0x97, 0x97, + 0x27, 0x26, 0x06, 0x03, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb0, 0x25, 0x5d, + 0x84, 0x97, 0x37, 0xbb, 0x32, 0x20, 0x2f, 0x1b, 0xff, 0x10, 0xff, 0x46, + 0xe6, 0x07, 0xbf, 0xff, 0xff, 0x47, 0x20, 0xff, 0x50, 0x1d, 0x05, 0xff, + 0xff, 0xff, 0x49, 0x20, 0xff, 0xd0, 0x1d, 0x08, 0xff, 0xe6, 0xff, 0x48, + 0x20, 0xff, 0xf2, 0x25, 0x0b, 0xff, 0x60, 0xff, 0x40, 0x21, 0xdf, 0xf4, + 0x97, 0x40, 0xff, 0x40, 0xbf, 0x96, 0x02, 0x0a, 0xff, 0xa0, 0xff, 0x43, + 0xff, 0x26, 0x07, 0x02, 0xff, 0xfd, 0xff, 0xcf, 0xff, 0xf0, 0x25, 0x01, + 0x02, 0xef, 0xff, 0xff, 0xff, 0xff, 0x90, 0x25, 0x00, 0x48, 0x5f, 0x91, + 0xfc, 0x10, 0x96, 0x03, 0xaf, 0xff, 0x20, 0xfe, 0x71, 0x2e, 0x00, 0x00, + 0x01, 0x44, 0x30, 0xe2, 0x9f, 0x57, 0x0d, 0x58, 0xbb, 0xb7, 0x1f, 0x00, + 0x02, 0x3d, 0xff, 0xff, 0xff, 0xfa, 0x10, 0x05, 0x02, 0x4a, 0xef, 0x91, + 0xff, 0x80, 0x1d, 0x09, 0x9a, 0xff, 0x40, 0xf1, 0x25, 0x0b, 0xff, 0xe8, + 0x44, 0x5a, 0xff, 0x40, 0xf4, 0x25, 0x0a, 0xff, 0x60, 0x00, 0x00, 0xcf, + 0x52, 0xf3, 0x25, 0x05, 0x92, 0xdf, 0xd0, 0x25, 0x00, 0x00, 0x9f, 0xe7, + 0x44, 0x5b, 0xff, 0x74, 0x44, 0x41, 0x84, 0x13, 0x07, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xf4, 0xf0, 0x97, 0x97, 0x27, 0x24, 0x06, 0xbb, 0xbb, 0xbb, + 0x9c, 0xe9, 0xbb, 0xb3, 0x23, 0x6b, 0xb7, 0x00, 0x00, 0x04, 0x34, 0x44, + 0x44, 0x44, 0x40, 0x36, 0x6e, 0xff, 0x0b, 0xff, 0xff, 0xff, 0xf0, 0x05, + 0x04, 0x9a, 0x97, 0x60, 0x0a, 0x97, 0x0a, 0x0b, 0xff, 0xfe, 0xbb, 0xbb, + 0x23, 0xbb, 0xb0, 0x25, 0x09, 0xff, 0xd1, 0x45, 0x0a, 0x18, 0x04, 0xff, + 0xc0, 0x97, 0x01, 0x6f, 0xfa, 0x44, 0x10, 0x44, 0x44, 0x40, 0x06, 0x7e, + 0xff, 0xff, 0xff, 0x2d, 0xff, 0xf0, 0x05, 0x05, 0x9a, 0x97, 0x0a, 0x97, + 0x80, 0x0a, 0x0b, 0xff, 0xfd, 0xbb, 0xbb, 0xbb, 0xb0, 0x8c, 0x25, 0x09, + 0xff, 0xd1, 0x45, 0x0a, 0x04, 0xff, 0x60, 0xc0, 0x97, 0x01, 0x6f, 0xfa, + 0x44, 0x44, 0x44, 0x40, 0x40, 0x05, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x78, 0xf0, 0x97, 0x97, 0x27, 0x26, 0x06, 0xbb, 0xbb, 0x0f, 0xbb, 0xbb, + 0xbb, 0xb0, 0x25, 0x5d, 0x97, 0x4f, 0x84, 0x03, 0x37, 0xbb, 0x32, 0x20, + 0x07, 0x1b, 0xff, 0x10, 0xff, 0x46, 0xe6, 0x07, 0xbf, 0xff, 0xff, 0x47, + 0x20, 0xff, 0x50, 0x1d, 0x05, 0xff, 0xff, 0xff, 0x49, 0x20, 0xff, 0xd0, + 0x1d, 0x08, 0xff, 0xe6, 0xff, 0x48, 0x20, 0xff, 0xf2, 0x25, 0x0b, 0xff, + 0x60, 0xff, 0x40, 0x21, 0xdf, 0xf4, 0x97, 0x40, 0xff, 0x40, 0xbf, 0x96, + 0x02, 0x0a, 0xff, 0xa0, 0xff, 0x43, 0xff, 0x26, 0x07, 0x02, 0xff, 0xfd, + 0xff, 0xcf, 0xff, 0xf0, 0x25, 0x01, 0x02, 0xef, 0xff, 0xff, 0xff, 0xff, + 0x90, 0x25, 0x00, 0x48, 0x5f, 0x91, 0xfc, 0x10, 0x96, 0x03, 0xaf, 0xff, + 0x20, 0xfe, 0x71, 0x2c, 0x0b, 0xff, 0xf0, 0x00, 0x01, 0x3f, 0x44, 0x30, + 0x35, 0x92, 0xad, 0x97, 0x97, 0x27, 0x80, 0x24, 0xf7, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x70, 0x93, 0x25, 0xff, 0xff, 0xe9, 0xff, 0xf0, 0x97, 0x97, + 0xff, 0x27, 0x27, 0x27, 0x22, 0x54, 0x2b, 0x97, 0x97, 0xe3, 0x27, 0x27, + 0x05, 0x06, 0x77, 0x70, 0x27, 0x4f, 0xf0, 0x77, 0x2f, 0x07, 0x07, +}; + +//***************************************************************************** +// +// Green horizontal slider image. +// +//***************************************************************************** +const uint8_t g_pui8GreenSlider195x37[] = +{ + IMAGE_FMT_8BPP_COMP, + 195, 0, + 37, 0, + + 63, + 0x04, 0x04, 0x04, + 0x16, 0x16, 0x16, + 0x01, 0x29, 0x01, + 0x20, 0x21, 0x20, + 0x01, 0x3a, 0x01, + 0x17, 0x35, 0x17, + 0x2d, 0x2e, 0x2d, + 0x01, 0x50, 0x01, + 0x23, 0x43, 0x23, + 0x3a, 0x3a, 0x3a, + 0x01, 0x67, 0x01, + 0x2e, 0x4c, 0x2e, + 0x1a, 0x63, 0x1a, + 0x4b, 0x4b, 0x4b, + 0x02, 0x7e, 0x02, + 0x2f, 0x65, 0x2f, + 0x19, 0x76, 0x19, + 0x46, 0x59, 0x46, + 0x02, 0x8b, 0x02, + 0x02, 0x97, 0x02, + 0x5a, 0x5a, 0x5a, + 0x17, 0x90, 0x17, + 0x50, 0x6c, 0x50, + 0x02, 0xa3, 0x02, + 0x05, 0xa4, 0x05, + 0x0a, 0xa6, 0x0a, + 0x68, 0x68, 0x68, + 0x0f, 0xa8, 0x0f, + 0x13, 0xa9, 0x13, + 0x1f, 0xad, 0x1f, + 0x38, 0x9c, 0x38, + 0x73, 0x73, 0x73, + 0x6b, 0x7c, 0x6b, + 0x2a, 0xb1, 0x2a, + 0x7c, 0x7e, 0x7c, + 0x33, 0xb5, 0x33, + 0x4d, 0xa5, 0x4d, + 0x6d, 0x93, 0x6d, + 0x56, 0xa4, 0x56, + 0x63, 0xa0, 0x63, + 0x42, 0xba, 0x42, + 0x89, 0x89, 0x89, + 0x56, 0xb7, 0x56, + 0x4e, 0xbf, 0x4e, + 0x91, 0x91, 0x91, + 0x8f, 0x95, 0x8f, + 0x59, 0xc3, 0x59, + 0x71, 0xb9, 0x71, + 0x9e, 0x9e, 0x9e, + 0x64, 0xc7, 0x64, + 0x87, 0xb4, 0x87, + 0x6c, 0xca, 0x6c, + 0xa8, 0xa8, 0xa8, + 0x75, 0xcd, 0x75, + 0x7b, 0xcf, 0x7b, + 0x82, 0xd2, 0x82, + 0x8d, 0xcf, 0x8d, + 0x8b, 0xd5, 0x8b, + 0x98, 0xce, 0x98, + 0x92, 0xd7, 0x92, + 0x95, 0xd8, 0x95, + 0x9c, 0xdb, 0x9c, + 0xa3, 0xdc, 0xa3, + 0xa9, 0xe0, 0xa9, + + 0x80, 0x07, 0x06, 0x20, 0x32, 0x3a, 0x3d, 0x3d, 0x3c, 0x0f, 0x3c, 0x3b, + 0x3b, 0x3b, 0xe9, 0xd4, 0xa7, 0x5f, 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x39, 0x39, + 0x00, 0x39, 0x37, 0x2f, 0x27, 0x16, 0x0b, 0x03, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x0b, 0x32, 0x3e, 0x00, 0x3f, 0x3e, 0x3d, 0x3d, 0x3c, + 0x3b, 0x3b, 0x39, 0x3f, 0x39, 0x39, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0x37, 0x37, 0x37, 0x36, 0x00, 0x35, 0x33, 0x31, 0x24, 0x0f, + 0x05, 0x01, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x25, 0x3e, 0x3f, + 0x00, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x39, 0x39, 0x37, 0x3f, 0x37, 0x37, + 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x37, 0x36, 0x36, 0x35, + 0x00, 0x35, 0x33, 0x31, 0x2e, 0x2b, 0x28, 0x1e, 0x0f, 0x06, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x00, 0x03, 0x32, 0x3f, 0x3f, 0x3f, + 0x3e, 0x3d, 0x3b, 0x00, 0x39, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35, 0x35, + 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x35, 0x33, 0x33, + 0x33, 0x31, 0x2e, 0x00, 0x2e, 0x2b, 0x28, 0x23, 0x21, 0x10, 0x05, 0x01, + 0x0c, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xd2, 0x03, 0x32, 0x00, 0x3f, 0x3f, + 0x3e, 0x3d, 0x3c, 0x39, 0x37, 0x36, 0x03, 0x35, 0x33, 0x33, 0x31, 0x31, + 0x31, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x02, 0x2e, + 0x2e, 0x2e, 0x2b, 0x28, 0x23, 0x21, 0x00, 0x1d, 0x1c, 0x10, 0x06, 0x03, + 0x01, 0x00, 0x00, 0x60, 0x00, 0xe9, 0xd1, 0x32, 0x3e, 0x3e, 0x3e, 0x3d, + 0x08, 0x3b, 0x37, 0x36, 0x33, 0x01, 0x2b, 0x2b, 0x2b, 0xff, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x05, 0x28, 0x28, 0x28, 0x23, 0x21, + 0x00, 0x1c, 0x19, 0x17, 0x10, 0x06, 0x03, 0x01, 0x00, 0x20, 0x00, 0x00, + 0xe9, 0x00, 0x25, 0x3d, 0x3d, 0x3d, 0x04, 0x3c, 0x39, 0x37, 0x33, 0x31, + 0x12, 0x23, 0x23, 0x7f, 0x23, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0x23, 0x21, 0x1d, 0x1b, 0x00, 0x17, 0x13, 0x13, 0x0f, 0x06, + 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x38, 0x3c, 0x3b, + 0x02, 0x3b, 0x37, 0x36, 0x31, 0x2b, 0x28, 0x31, 0x1d, 0x1f, 0x1c, 0x1c, + 0x1c, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x1d, 0x1d, + 0x40, 0x1d, 0xe9, 0x1c, 0x18, 0x17, 0x13, 0x12, 0x10, 0x00, 0x0b, 0x06, + 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x39, 0x39, 0x39, 0x37, + 0x35, 0x31, 0x2b, 0x00, 0x23, 0x21, 0x1c, 0x1b, 0x19, 0x18, 0x18, 0x17, + 0x3f, 0x17, 0x17, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x17, + 0x17, 0x18, 0x18, 0x00, 0x19, 0x19, 0x1b, 0x1c, 0x1c, 0x1c, 0x19, 0x17, + 0x00, 0x13, 0x12, 0x12, 0x0e, 0x0f, 0x09, 0x06, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x36, 0x37, 0x36, 0x36, 0x00, 0x33, 0x31, 0x2b, 0x23, 0x1d, + 0x1c, 0x19, 0x18, 0x0f, 0x18, 0x17, 0x17, 0x17, 0xe9, 0xd4, 0xa7, 0x5f, + 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x05, 0x18, 0x00, 0x18, 0x19, 0x19, 0x19, 0x17, + 0x13, 0x13, 0x12, 0x00, 0x0e, 0x0e, 0x10, 0x11, 0x09, 0x03, 0x01, 0x00, + 0x00, 0x00, 0x16, 0x35, 0x35, 0x35, 0x33, 0x31, 0x2b, 0x00, 0x23, 0x1d, + 0x1c, 0x19, 0x18, 0x17, 0x17, 0x17, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xe0, 0x07, 0x07, 0x07, 0x17, 0x17, 0x18, 0x18, 0x18, 0x00, 0x17, 0x13, + 0x12, 0x0e, 0x0e, 0x0a, 0x0a, 0x16, 0x00, 0x0d, 0x06, 0x01, 0x00, 0x00, + 0x26, 0x33, 0x31, 0x00, 0x31, 0x2e, 0x2b, 0x28, 0x21, 0x1c, 0x19, 0x18, + 0xff, 0x03, 0xdb, 0xb7, 0x6f, 0x27, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x13, + 0x12, 0x0e, 0x0a, 0x00, 0x0a, 0x0a, 0x0f, 0x14, 0x09, 0x03, 0x01, 0x00, + 0x00, 0x2a, 0x2e, 0x2e, 0x2e, 0x2b, 0x28, 0x23, 0x1d, 0x3f, 0x1b, 0x18, + 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x17, 0x13, 0x12, + 0x00, 0x0e, 0x0e, 0x0a, 0x0a, 0x07, 0x0c, 0x1a, 0x0d, 0x00, 0x06, 0x01, + 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x28, 0x07, 0x23, 0x21, 0x1c, 0x19, 0x18, + 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x17, 0x13, + 0x12, 0x0e, 0x0a, 0x0a, 0x07, 0x07, 0x00, 0x07, 0x1f, 0x14, 0x09, 0x03, + 0x00, 0x28, 0x28, 0x01, 0x28, 0x28, 0x28, 0x23, 0x1d, 0x1c, 0x18, 0x07, + 0xff, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x17, 0x17, 0x13, + 0x12, 0x0e, 0x0a, 0x00, 0x0a, 0x07, 0x07, 0x04, 0x22, 0x14, 0x09, 0x03, + 0x00, 0x01, 0x23, 0x23, 0x23, 0x23, 0x23, 0x21, 0x1d, 0x3f, 0x1b, 0x18, + 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x17, 0x17, 0x13, + 0x00, 0x12, 0x0e, 0x0a, 0x07, 0x07, 0x04, 0x04, 0x29, 0x00, 0x1a, 0x09, + 0x03, 0x01, 0x21, 0x21, 0x21, 0x21, 0x0f, 0x21, 0x1d, 0x1c, 0x19, 0x07, + 0xbf, 0x77, 0x2f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x00, 0x13, 0x0e, + 0x0a, 0x0a, 0x07, 0x04, 0x04, 0x05, 0x00, 0x29, 0x1a, 0x0d, 0x06, 0x01, + 0x1d, 0x1d, 0x1d, 0x07, 0x1d, 0x1d, 0x1c, 0x1c, 0x19, 0x07, 0xbf, 0x77, + 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x17, 0x17, 0x13, 0x12, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x04, 0x02, 0x0b, 0x29, 0x1a, 0x0d, 0x06, 0x01, + 0x00, 0x15, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x19, 0x18, 0xff, 0x07, 0xbf, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x07, 0x17, 0x13, 0x13, 0x0e, 0x0a, + 0x00, 0x07, 0x07, 0x04, 0x02, 0x02, 0x11, 0x29, 0x1a, 0x0f, 0x0d, 0x06, + 0x01, 0x10, 0x07, 0xbf, 0x77, 0x2f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, + 0x00, 0x13, 0x13, 0x12, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x00, 0x02, 0x02, + 0x20, 0x29, 0x1a, 0x0d, 0x06, 0x01, 0x09, 0x08, 0x13, 0x13, 0x13, 0xe9, + 0x13, 0x13, 0x05, 0xff, 0xcd, 0x97, 0x4f, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, + 0x17, 0x17, 0x13, 0x13, 0x12, 0x0e, 0x00, 0x0a, 0x07, 0x04, 0x02, 0x02, + 0x02, 0x08, 0x2d, 0x00, 0x29, 0x1a, 0x09, 0x03, 0x01, 0x03, 0x10, 0x12, + 0x23, 0x12, 0x12, 0xe9, 0x13, 0x13, 0x13, 0x02, 0xe2, 0xff, 0xc6, 0x87, + 0x3f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x03, 0x13, 0x13, 0x12, 0x12, 0x0e, 0x0a, + 0x00, 0x07, 0x04, 0x02, 0x02, 0x02, 0x02, 0x16, 0x30, 0x00, 0x22, 0x14, + 0x09, 0x03, 0x01, 0x03, 0x0b, 0x0e, 0x20, 0x0e, 0x0e, 0xe9, 0x0e, 0x12, + 0x12, 0x12, 0x13, 0x3f, 0x13, 0x13, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x05, 0x12, 0x12, 0x0e, 0x00, 0x0e, 0x0a, 0x0a, 0x07, 0x04, + 0x02, 0x02, 0x02, 0x00, 0x02, 0x08, 0x2d, 0x2c, 0x1f, 0x14, 0x09, 0x03, + 0x0a, 0x00, 0x01, 0x06, 0x0c, 0x61, 0x0a, 0xe9, 0x0e, 0x3f, 0x0e, 0x0e, + 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0e, 0x0a, 0x0a, + 0x00, 0x0a, 0x07, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x20, + 0x30, 0x29, 0x1a, 0x0d, 0x06, 0x01, 0x07, 0x00, 0x01, 0x06, 0x0d, 0x0c, + 0x49, 0x31, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x05, + 0x07, 0x07, 0x07, 0x04, 0x02, 0x02, 0x40, 0x02, 0xe9, 0x16, 0x34, 0x2c, + 0x22, 0x14, 0x09, 0x00, 0x03, 0x01, 0x00, 0x01, 0x03, 0x09, 0x11, 0x0c, + 0xff, 0x41, 0x29, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x03, + 0x04, 0x04, 0x04, 0x10, 0x02, 0x02, 0x02, 0xe9, 0x02, 0x16, 0x30, 0x30, + 0x00, 0x29, 0x1a, 0x0d, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x01, 0x06, + 0x09, 0x11, 0x0c, 0x23, 0x09, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x83, 0x07, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe9, 0xd1, 0x00, 0x16, 0x30, + 0x30, 0x29, 0x1f, 0x14, 0x09, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x06, 0x0d, 0x3f, 0x1a, 0x0f, 0x17, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x05, 0x08, 0x20, 0x00, 0x34, 0x30, 0x2c, 0x1f, 0x14, + 0x09, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x09, + 0x0f, 0x0d, 0x1a, 0x16, 0x08, 0x07, 0xbf, 0x77, 0x2f, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x08, 0x00, 0x16, 0x2d, 0x34, 0x30, 0x29, 0x1f, 0x14, 0x0d, + 0x02, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x03, 0x09, + 0x0d, 0x1a, 0x22, 0x20, 0x11, 0x08, 0x7f, 0x05, 0x02, 0xe2, 0xc6, 0x87, + 0x3f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x01, 0x05, 0x0b, 0x16, 0x00, 0x22, 0x30, + 0x34, 0x30, 0x2c, 0x29, 0x1f, 0x14, 0x01, 0x0d, 0x06, 0x03, 0x01, 0x00, + 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x01, 0x03, 0x09, 0x0d, 0x14, 0x1f, + 0x01, 0x22, 0x2c, 0x30, 0x30, 0x34, 0x34, 0x34, 0xe9, 0xff, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x30, 0x30, 0x2c, 0x29, 0x22, 0x1a, + 0x00, 0x14, 0x09, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xe9, 0xd2, + 0x01, 0x03, 0x06, 0x09, 0x0d, 0x1a, 0x01, 0x1f, 0x22, 0x29, 0x29, 0x2c, + 0x2c, 0x2c, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x05, + 0x29, 0x29, 0x22, 0x1f, 0x1a, 0x14, 0x00, 0x0d, 0x09, 0x06, 0x03, 0x01, + 0x00, 0x00, 0x00, 0xc0, 0xe9, 0xd4, 0x01, 0x01, 0x06, 0x09, 0x0d, 0x0d, + 0x03, 0x14, 0x1a, 0x1a, 0x1f, 0x1f, 0x1f, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, + 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x05, 0x1a, 0x1a, 0x14, 0x14, 0x0d, 0x09, 0x06, + 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x03, 0x06, 0x06, 0x09, 0x0f, 0x09, 0x0d, 0x0d, 0x0d, 0xe9, + 0xd4, 0xa7, 0x5f, 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x09, 0x00, 0x09, 0x09, + 0x06, 0x03, 0x01, 0x01, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa4, 0x01, + 0x01, 0x01, 0x03, 0x0f, 0x03, 0x06, 0x06, 0x06, 0xe9, 0xd4, 0xa7, 0x5f, + 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x03, 0x03, 0x01, 0x01, 0x00, + 0x00, 0x00, 0xe9, 0xc1, 0xd4, 0xa7, 0x00, 0x00, 0x01, 0x01, 0x01, 0xe9, + 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe3, 0x07, 0x07, 0x02, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x06, +}; + +//***************************************************************************** +// +// Red horizontal slider image. +// +//***************************************************************************** +const uint8_t g_pui8RedSlider195x37[] = +{ + IMAGE_FMT_8BPP_COMP, + 195, 0, + 37, 0, + + 63, + 0x04, 0x04, 0x04, + 0x00, 0x00, 0x40, + 0x16, 0x16, 0x16, + 0x00, 0x00, 0x5b, + 0x0c, 0x0c, 0x48, + 0x23, 0x23, 0x23, + 0x00, 0x00, 0x7c, + 0x20, 0x20, 0x35, + 0x15, 0x15, 0x52, + 0x00, 0x00, 0x93, + 0x2e, 0x2e, 0x2e, + 0x00, 0x00, 0xa1, + 0x00, 0x00, 0xb4, + 0x27, 0x27, 0x59, + 0x00, 0x00, 0xc7, + 0x14, 0x14, 0x9d, + 0x3d, 0x3d, 0x3e, + 0x25, 0x25, 0x79, + 0x00, 0x00, 0xd9, + 0x1f, 0x1f, 0xa3, + 0x00, 0x00, 0xec, + 0x13, 0x13, 0xc3, + 0x00, 0x00, 0xf3, + 0x00, 0x00, 0xfa, + 0x30, 0x30, 0x8a, + 0x4c, 0x4c, 0x4c, + 0x00, 0x00, 0xff, + 0x46, 0x46, 0x65, + 0x05, 0x05, 0xff, + 0x0b, 0x0b, 0xff, + 0x11, 0x11, 0xff, + 0x5a, 0x5a, 0x5a, + 0x50, 0x50, 0x7e, + 0x21, 0x21, 0xff, + 0x36, 0x36, 0xd5, + 0x68, 0x68, 0x68, + 0x32, 0x32, 0xff, + 0x73, 0x73, 0x73, + 0x6b, 0x6b, 0x88, + 0x51, 0x51, 0xd4, + 0x67, 0x67, 0xb6, + 0x4c, 0x4c, 0xff, + 0x55, 0x55, 0xef, + 0x85, 0x85, 0x85, + 0x5a, 0x5a, 0xff, + 0x8e, 0x8e, 0x96, + 0x91, 0x91, 0x91, + 0x63, 0x63, 0xff, + 0x70, 0x70, 0xe3, + 0x93, 0x93, 0x9e, + 0x6b, 0x6b, 0xff, + 0x9b, 0x9b, 0x9b, + 0x86, 0x86, 0xcd, + 0x74, 0x74, 0xff, + 0xa0, 0xa0, 0xa2, + 0x7a, 0x7a, 0xfe, + 0x81, 0x81, 0xff, + 0xa8, 0xa8, 0xa8, + 0x8c, 0x8c, 0xf6, + 0x8a, 0x8a, 0xff, + 0x97, 0x97, 0xee, + 0x91, 0x91, 0xff, + 0x9a, 0x9a, 0xff, + 0xa5, 0xa5, 0xfe, + + 0x80, 0x07, 0x07, 0x26, 0x34, 0x3c, 0x3e, 0x3e, 0x3e, 0x1f, 0x3d, 0x3d, + 0x3d, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x3b, 0x3b, 0x3b, + 0x00, 0x38, 0x30, 0x28, 0x20, 0x0d, 0x02, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa7, 0x10, 0x34, 0x3f, 0x3f, 0x00, 0x3f, 0x3e, 0x3e, 0x3d, 0x3d, + 0x3d, 0x3b, 0x3b, 0x7f, 0x3b, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x07, 0x38, 0x38, 0x38, 0x37, 0x35, 0x00, 0x32, 0x2f, 0x27, 0x18, 0x07, + 0x02, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa3, 0x28, 0x3f, 0x3f, 0x3f, + 0x00, 0x3f, 0x3e, 0x3e, 0x3d, 0x3b, 0x3b, 0x38, 0x38, 0x7f, 0x38, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x07, 0x38, 0x37, 0x37, 0x35, 0x35, + 0x00, 0x32, 0x2f, 0x2c, 0x29, 0x29, 0x22, 0x11, 0x02, 0x0c, 0x02, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x07, 0x00, 0x34, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3e, 0x3d, 0x3b, 0x01, 0x38, 0x38, 0x37, 0x37, 0x35, 0x35, 0x35, 0xe9, + 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x07, 0x35, 0x32, 0x32, 0x32, + 0x2f, 0x2c, 0x2c, 0x00, 0x29, 0x24, 0x24, 0x21, 0x13, 0x07, 0x02, 0x02, + 0x18, 0x00, 0x00, 0x00, 0xe9, 0xd2, 0x07, 0x34, 0x3f, 0x00, 0x3f, 0x3f, + 0x3e, 0x3e, 0x3b, 0x38, 0x37, 0x35, 0x07, 0x32, 0x32, 0x2f, 0x2f, 0x2f, + 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x00, 0x2c, 0x2c, + 0x2c, 0x2c, 0x29, 0x29, 0x24, 0x24, 0x00, 0x21, 0x1e, 0x13, 0x07, 0x02, + 0x02, 0x00, 0x00, 0x60, 0x00, 0xe9, 0xd1, 0x34, 0x3f, 0x3f, 0x3e, 0x3e, + 0x05, 0x3d, 0x38, 0x37, 0x32, 0x2f, 0x0a, 0x29, 0xe9, 0xff, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x24, 0x24, 0x21, 0x1e, 0x1d, 0x1a, + 0x01, 0x13, 0x0a, 0x05, 0x02, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x28, + 0x3e, 0x3e, 0x3e, 0x3d, 0x3b, 0x38, 0x2f, 0x32, 0x2f, 0x1b, 0x24, 0xe9, + 0xd4, 0xa7, 0x5f, 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x24, 0x00, 0x24, 0x21, + 0x21, 0x1e, 0x1a, 0x16, 0x14, 0x18, 0x00, 0x0a, 0x05, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x3a, 0x3d, 0x3d, 0x3d, 0x38, 0x37, 0x2f, + 0x27, 0x29, 0x29, 0x32, 0x1e, 0x1e, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x05, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1e, 0x1c, 0x16, + 0x00, 0x14, 0x12, 0x15, 0x1b, 0x0a, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0x3b, 0x3b, 0x3b, 0x38, 0x00, 0x35, 0x2f, 0x29, 0x24, 0x21, + 0x1e, 0x1e, 0x1d, 0x0f, 0x1c, 0x1a, 0x1a, 0x1a, 0xe9, 0xd4, 0xa7, 0x5f, + 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x02, 0x1c, 0x00, 0x1c, 0x1d, 0x1d, 0x1e, 0x1e, + 0x1e, 0x1c, 0x17, 0x00, 0x14, 0x12, 0x12, 0x0e, 0x18, 0x10, 0x0a, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x37, 0x38, 0x37, 0x37, 0x00, 0x32, 0x2f, + 0x29, 0x24, 0x21, 0x1e, 0x1d, 0x1c, 0x1f, 0x1a, 0x1a, 0x1a, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x1c, 0x1c, 0x00, 0x1c, 0x1d, + 0x1c, 0x1a, 0x16, 0x14, 0x12, 0x0e, 0x00, 0x0c, 0x0f, 0x1b, 0x10, 0x05, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x35, 0x35, 0x35, 0x32, 0x2c, 0x29, 0x24, + 0x27, 0x21, 0x1e, 0x39, 0x1a, 0x1a, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x00, 0x1a, 0x1a, 0x1c, 0x1c, 0x1a, 0x17, 0x14, 0x12, + 0x00, 0x0e, 0x0c, 0x0c, 0x0b, 0x20, 0x19, 0x0a, 0x02, 0x00, 0x00, 0x00, + 0x27, 0x32, 0x2f, 0x2f, 0x2c, 0x29, 0x07, 0x24, 0x21, 0x1e, 0x1d, 0x1c, + 0x03, 0xdb, 0xb7, 0xff, 0x6f, 0x27, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x06, 0x16, + 0x14, 0x12, 0x0e, 0x0c, 0x0b, 0x09, 0x00, 0x18, 0x1f, 0x10, 0x05, 0x02, + 0x00, 0x2a, 0x2c, 0x00, 0x2c, 0x2c, 0x29, 0x29, 0x24, 0x21, 0x1d, 0x1c, + 0xff, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x07, 0x1a, 0x16, + 0x12, 0x0e, 0x0c, 0x00, 0x0b, 0x09, 0x09, 0x11, 0x23, 0x19, 0x0a, 0x02, + 0x00, 0x00, 0x29, 0x29, 0x29, 0x29, 0x29, 0x24, 0x21, 0x3f, 0x1e, 0x1c, + 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x1a, 0x1a, 0x16, + 0x00, 0x12, 0x0e, 0x0c, 0x0b, 0x09, 0x06, 0x06, 0x25, 0x00, 0x1f, 0x0a, + 0x02, 0x00, 0x29, 0x29, 0x29, 0x29, 0x07, 0x24, 0x24, 0x21, 0x1e, 0x1c, + 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x1a, 0x17, + 0x14, 0x12, 0x0e, 0x0b, 0x09, 0x06, 0x00, 0x06, 0x03, 0x2b, 0x1f, 0x10, + 0x05, 0x02, 0x24, 0x01, 0x24, 0x24, 0x24, 0x24, 0x21, 0x21, 0x1d, 0x07, + 0xff, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x1a, 0x1a, 0x17, + 0x14, 0x0e, 0x0c, 0x00, 0x0b, 0x06, 0x06, 0x03, 0x03, 0x2b, 0x23, 0x10, + 0x00, 0x05, 0x02, 0x24, 0x24, 0x21, 0x21, 0x21, 0x21, 0x3f, 0x1e, 0x1d, + 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x1a, 0x17, 0x16, + 0x00, 0x14, 0x0e, 0x0c, 0x09, 0x06, 0x03, 0x03, 0x08, 0x00, 0x2b, 0x23, + 0x19, 0x05, 0x02, 0x21, 0x21, 0x21, 0x07, 0x21, 0x21, 0x1e, 0x1e, 0x1c, + 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x1a, 0x17, + 0x14, 0x12, 0x0c, 0x0b, 0x06, 0x03, 0x00, 0x03, 0x01, 0x0d, 0x2e, 0x23, + 0x19, 0x0a, 0x02, 0x0b, 0x15, 0x1d, 0x1d, 0x1d, 0xe9, 0x1c, 0x07, 0xbf, + 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x07, 0x17, 0x16, 0x14, 0x0e, + 0x0b, 0x09, 0x06, 0x00, 0x03, 0x01, 0x01, 0x1b, 0x2e, 0x23, 0x19, 0x0a, + 0x03, 0x02, 0x0f, 0x17, 0x17, 0x17, 0x17, 0x49, 0xda, 0xff, 0x02, 0xd4, + 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x01, 0x17, 0x16, 0x14, 0x12, + 0x00, 0x0c, 0x09, 0x06, 0x03, 0x01, 0x01, 0x01, 0x26, 0x00, 0x2b, 0x23, + 0x19, 0x05, 0x02, 0x0d, 0x14, 0x14, 0x41, 0x14, 0xe9, 0x16, 0x16, 0x16, + 0x17, 0x17, 0x01, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x06, 0x17, 0x17, 0x16, 0x14, 0x12, 0x00, 0x0e, 0x0b, 0x06, 0x03, 0x01, + 0x01, 0x01, 0x0d, 0x00, 0x2d, 0x2b, 0x23, 0x10, 0x05, 0x02, 0x05, 0x15, + 0x10, 0x12, 0x12, 0x12, 0xe9, 0x14, 0x14, 0x16, 0x16, 0x07, 0x17, 0x17, + 0x1a, 0x1a, 0x1a, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, + 0x00, 0x17, 0x17, 0x16, 0x14, 0x12, 0x12, 0x0c, 0x0b, 0x00, 0x06, 0x03, + 0x01, 0x01, 0x01, 0x01, 0x20, 0x33, 0x00, 0x2b, 0x1f, 0x10, 0x05, 0x02, + 0x05, 0x0d, 0x0e, 0x20, 0x0e, 0x0e, 0xe9, 0x0e, 0x12, 0x12, 0x12, 0x14, + 0x3f, 0x14, 0x14, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x05, + 0x12, 0x12, 0x0e, 0x00, 0x0e, 0x0c, 0x09, 0x06, 0x03, 0x01, 0x01, 0x01, + 0x00, 0x01, 0x0d, 0x2d, 0x2e, 0x25, 0x1f, 0x0a, 0x02, 0x01, 0x00, 0x02, + 0x0a, 0x13, 0x0c, 0x0c, 0x0c, 0xe9, 0x8f, 0xd1, 0x0e, 0x0e, 0x0e, 0xe9, + 0xd4, 0xa7, 0x5f, 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x0c, 0x00, 0x0c, 0x0b, + 0x09, 0x06, 0x03, 0x03, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x26, 0x36, + 0x2b, 0x23, 0x19, 0x00, 0x0a, 0x02, 0x00, 0x02, 0x05, 0x10, 0x0f, 0x0b, + 0x00, 0x0b, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0b, 0x0b, 0x7f, 0x0b, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x05, 0x09, 0x09, 0x06, 0x06, + 0x04, 0x06, 0x03, 0x01, 0x01, 0x01, 0xe9, 0x20, 0x39, 0x00, 0x2e, 0x25, + 0x1f, 0x10, 0x05, 0x02, 0x00, 0x02, 0x0f, 0x05, 0x0a, 0x1b, 0x0f, 0x3a, + 0x21, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x81, 0x02, 0x03, + 0x03, 0x03, 0x01, 0x01, 0x01, 0xe9, 0x00, 0x01, 0x1b, 0x36, 0x33, 0x2b, + 0x23, 0x19, 0x0a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x05, 0x10, 0x1b, + 0x7f, 0x11, 0x23, 0x09, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x03, 0x03, 0x01, 0x30, 0x01, 0x01, 0xe9, 0xd1, 0x20, 0x36, 0x36, 0x2e, + 0x00, 0x25, 0x1f, 0x10, 0x05, 0x02, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, + 0x0a, 0x19, 0x23, 0x11, 0x17, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x05, 0x0d, 0x26, 0x39, 0x36, 0x2e, 0x25, 0x00, 0x1f, 0x10, + 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x0a, 0x19, + 0x23, 0x20, 0x0d, 0xff, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x07, 0x0d, 0x20, 0x31, 0x39, 0x33, 0x00, 0x2e, 0x25, 0x1f, 0x19, 0x0a, + 0x02, 0x02, 0x00, 0x20, 0x00, 0x00, 0xe9, 0x02, 0x05, 0x10, 0x19, 0x23, + 0x07, 0x25, 0x25, 0x1b, 0x0d, 0x04, 0x02, 0xe2, 0xc6, 0xff, 0x87, 0x3f, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x01, 0x08, 0x0d, 0x20, 0x26, 0x36, 0x39, 0x36, + 0x00, 0x2e, 0x2b, 0x25, 0x1f, 0x19, 0x0a, 0x05, 0x02, 0x10, 0x00, 0x00, + 0x00, 0xe9, 0x00, 0x00, 0x02, 0x05, 0x00, 0x0a, 0x19, 0x1f, 0x25, 0x2b, + 0x2e, 0x33, 0x36, 0x0f, 0x36, 0x39, 0x39, 0x39, 0xe9, 0xd4, 0xa7, 0x5f, + 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x05, 0x36, 0x00, 0x36, 0x33, 0x2e, 0x2b, 0x25, + 0x23, 0x1f, 0x10, 0x03, 0x0a, 0x05, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd2, + 0x00, 0x02, 0x05, 0x0a, 0x10, 0x19, 0x23, 0x25, 0x25, 0x07, 0x2b, 0x2b, + 0x2e, 0x2e, 0x2e, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, + 0x00, 0x2b, 0x2b, 0x2b, 0x25, 0x23, 0x1f, 0x19, 0x10, 0x03, 0x0a, 0x02, + 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x02, 0x02, 0x05, 0x0a, 0x10, + 0x19, 0x1f, 0x23, 0x0f, 0x23, 0x25, 0x25, 0x25, 0xe9, 0xd4, 0xa7, 0x5f, + 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x05, 0x23, 0x00, 0x23, 0x1f, 0x1f, 0x19, 0x10, + 0x0a, 0x05, 0x02, 0x0c, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x00, + 0x00, 0x02, 0x02, 0x05, 0x05, 0x0a, 0x10, 0x10, 0x19, 0x3f, 0x19, 0x19, + 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x10, 0x10, 0x0a, + 0x01, 0x0a, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa4, + 0x02, 0x02, 0x02, 0x05, 0x05, 0x0a, 0x3f, 0x0a, 0x0a, 0xe9, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x05, 0x02, 0x07, 0x02, 0x02, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x3f, 0x00, 0x00, 0x31, 0x19, 0xd4, + 0xa7, 0x5f, 0x17, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x00, 0x3f, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x06, +}; diff --git a/boards/dk-tm4c129x/grlib_demo/images.h b/boards/dk-tm4c129x/grlib_demo/images.h new file mode 100644 index 0000000..9a3ed1d --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/images.h @@ -0,0 +1,43 @@ +//***************************************************************************** +// +// images.h - Prototypes for the images used by the application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IMAGES_H__ +#define __IMAGES_H__ + +//***************************************************************************** +// +// Prototypes for the image arrays. +// +//***************************************************************************** +extern const uint8_t g_ui8Logo[]; +extern const uint8_t g_pui8LightOff[]; +extern const uint8_t g_pui8LightOn[]; +extern const uint8_t g_pui8Blue50x50[]; +extern const uint8_t g_pui8Blue50x50Press[]; +extern const uint8_t g_pui8RedSlider195x37[]; +extern const uint8_t g_pui8GreenSlider195x37[]; +extern const uint8_t g_pui8GettingHotter28x148[]; +extern const uint8_t g_pui8GettingHotter28x148Mono[]; + +#endif // __IMAGES_H__ diff --git a/boards/dk-tm4c129x/grlib_demo/readme.txt b/boards/dk-tm4c129x/grlib_demo/readme.txt new file mode 100644 index 0000000..fba020b --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/readme.txt @@ -0,0 +1,70 @@ +Graphics Library Demonstration + +This application provides a demonstration of the capabilities of the +TivaWare Graphics Library. A series of panels show different features of +the library. For each panel, the bottom provides a forward and back button +(when appropriate), along with a brief description of the contents of the +panel. + +The first panel provides some introductory text and basic instructions for +operation of the application. + +The second panel shows the available drawing primitives: lines, circles, +rectangles, strings, and images. + +The third panel shows the canvas widget, which provides a general drawing +surface within the widget hierarchy. A text, image, and application-drawn +canvas are displayed. + +The fourth panel shows the check box widget, which provides a means of +toggling the state of an item. Three check boxes are provided, with each +having a red ``LED'' to the right. The state of the LED tracks the state +of the check box via an application callback. + +The fifth panel shows the container widget, which provides a grouping +construct typically used for radio buttons. Containers with a title, a +centered title, and no title are displayed. + +The sixth panel shows the push button widget. Two rows of push buttons +are provided; the appearance of each row is the same but the top row +does not utilize auto-repeat while the bottom row does. Each push button +has a red ``LED'' beneath it, which is toggled via an application callback +each time the push button is pressed. While holding down any of +auto-repeat buttons, the ``LED'' for that button should be toggled as long +as the button is being held down. + +The seventh panel shows the radio button widget. Two groups of radio +buttons are displayed, the first using text and the second using images for +the selection value. Each radio button has a red ``LED'' to its right, +which tracks the selection state of the radio buttons via an application +callback. Only one radio button from each group can be selected at a time, +though the radio buttons in each group operate independently. + +The eighth and final panel shows the slider widget. Six sliders +constructed using the various supported style options are shown. The +slider value callback is used to update two widgets to reflect the values +reported by sliders. A canvas widget near the top right of the display +tracks the value of the red and green image-based slider to its left and +the text of the grey slider on the left side of the panel is update to show +its own value. The slider on the right is configured as an indicator +which tracks the state of the upper slider and ignores user input. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.axf b/boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.axf new file mode 100644 index 0000000..ffcbdc0 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.axf differ diff --git a/boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.bin b/boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.bin new file mode 100644 index 0000000..9a5a6dd Binary files /dev/null and b/boards/dk-tm4c129x/grlib_demo/rvmdk/grlib_demo.bin differ diff --git a/boards/dk-tm4c129x/grlib_demo/startup_ccs.c b/boards/dk-tm4c129x/grlib_demo/startup_ccs.c new file mode 100644 index 0000000..30b1a9a --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/grlib_demo/startup_ewarm.c b/boards/dk-tm4c129x/grlib_demo/startup_ewarm.c new file mode 100644 index 0000000..5694146 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/grlib_demo/startup_gcc.c b/boards/dk-tm4c129x/grlib_demo/startup_gcc.c new file mode 100644 index 0000000..12e19b0 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/grlib_demo/startup_rvmdk.S b/boards/dk-tm4c129x/grlib_demo/startup_rvmdk.S new file mode 100644 index 0000000..78d5a58 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_demo/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SoundIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD SoundIntHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/grlib_driver_test/Makefile b/boards/dk-tm4c129x/grlib_driver_test/Makefile new file mode 100644 index 0000000..183be2a --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/Makefile @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Makefile - Rules for building the A command-line driven testcase to aid development of GrLib display drivers. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the A command-line driven testcase to aid development of GrLib display drivers to be built. +# +all: ${COMPILER} +all: ${COMPILER}/grlib_driver_test.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the A command-line driven testcase to aid development of GrLib display drivers. +# +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/cmdline.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/grlib_driver_test.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/images.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/pinout.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/uartstdio.o +${COMPILER}/grlib_driver_test.axf: ${COMPILER}/ustdlib.o +${COMPILER}/grlib_driver_test.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/grlib_driver_test.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/grlib_driver_test.axf: grlib_driver_test.ld +SCATTERgcc_grlib_driver_test=grlib_driver_test.ld +ENTRY_grlib_driver_test=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec new file mode 100644 index 0000000..01de889 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject b/boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject new file mode 100644 index 0000000..a50ef9c --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.project b/boards/dk-tm4c129x/grlib_driver_test/ccs/.project new file mode 100644 index 0000000..2d8a647 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.project @@ -0,0 +1,80 @@ + + + grlib_driver_test + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + grlib_driver_test.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c + + + grlib_driver_test_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd + + + images.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/images.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/cmdline.c + 1 + SW_ROOT/utils/cmdline.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin new file mode 100644 index 0000000..e8beac8 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out new file mode 100644 index 0000000..93d8cb5 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial b/boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml b/boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/driver_config.h b/boards/dk-tm4c129x/grlib_driver_test/driver_config.h new file mode 100644 index 0000000..10c8ced --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/driver_config.h @@ -0,0 +1,137 @@ +//***************************************************************************** +// +// driver_config.h - Modify this header file to tailor grlib_driver_test for +// operation with your board and graphics display driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DRIVER_CONFIG_H__ +#define __DRIVER_CONFIG_H__ + +//***************************************************************************** +// +// TODO: Include the header file for your display driver here. The default +// driver is for the QVGA display on the DK-TM4C129X board. If your +// driver is dependent upon any other headers, include them here too. +// This may be the case if, for example, you are using a raster mode +// display and you have a header containing the timing parameters for +// the screen. +// +//***************************************************************************** +#include "drivers/kentec320x240x16_ssd2119.h" + +//***************************************************************************** +// +// These two headers are required by the default implementation and can likely +// be removed or reworked when you update the application to run on a custom +// board. +// +//***************************************************************************** +#include "drivers/frame.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +// TODO: Set DRIVER_NAME to the name of the tDisplay structure exported by +// your display driver. +// +//***************************************************************************** +#define DRIVER_NAME g_sKentec320x240x16_SSD2119 + +//***************************************************************************** +// +// TODO: Set DRIVER_SYS_CLOCK_CONFIG to the value you require for your system. +// This is the first parameter that is passed to the SysCtlClockFreqSet +// function. +// +//***************************************************************************** +#define DRIVER_SYS_CLOCK_CONFIG (SYSCTL_XTAL_25MHZ | \ + SYSCTL_OSC_MAIN | \ + SYSCTL_USE_PLL | \ + SYSCTL_CFG_VCO_480) + +//***************************************************************************** +// +// TODO: Set DRIVER_SYS_CLOCK_FREQUENCY to the value you require for your +// system. This is the second parameter that is passed to the +// SysCtlClockFreqSet function and represents the desired system clock +// frequency. +// +//***************************************************************************** +#define DRIVER_SYS_CLOCK_FREQUENCY 120000000 + +//***************************************************************************** +// +// TODO: Define the color depth of the display driver's frame buffer. If this +// value is 16 or greater, any operations involving the driver color +// palette will be compiled out of the test. If it is 8 or lower, make +// sure you also define the macro DRIVER_PALETTE_SET to allow the +// application to set colors in the driver's color lookup table. +// +//***************************************************************************** +#define DRIVER_BPP 16 + +#if (DRIVER_BPP < 16) +//***************************************************************************** +// +// TODO: This macro must be defined if your display driver uses a palettized +// pixel format and a global color lookup table. Parameter pui32Color +// points to an array of 32-bit values each containing and RGB888 color +// definition. ui32Index is the starting palette index in the driver's +// color table that will be changed and ui32NumEntries indicates both the +// number of colors in the array pointed to by pui32Color and the number +// of driver color palette locations that are to be written. +// +//***************************************************************************** +#define DRIVER_PALETTE_SET(pui32Color, ui32Index, ui32NumEntries) \ + YourDriverPaletteSet((pui32Color), (ui32Index), (ui32NumEntries)); + +#endif + +//***************************************************************************** +// +// TODO: This macro must be defined to perform all necessary hardware and +// software initialization for your display driver. This will typically +// involve configuring the LCD controller into the relevant mode for +// the driver, setting peripheral pin muxing, configuring the EPI and +// SDRAM if your driver uses raster mode and requires a frame buffer in +// EPI-connected memory and setting a default color palette if needed. +// +// The ui32SysClock parameter provides the configured system clock rate +// in Hz. +// +//***************************************************************************** +#define DRIVER_INIT(ui32SysClock) \ +{ \ + PinoutSet(); \ + Kentec320x240x16_SSD2119Init(ui32SysClock); \ +} + +//***************************************************************************** +// +// We allow the testcase to be built such that it issues no drawing orders +// other than those requested via the command line. This can be helpful +// when bringing up a new display driver. +// +//***************************************************************************** +//#define NO_GRLIB_CALLS_ON_STARTUP + +#endif diff --git a/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin new file mode 100644 index 0000000..8b41d40 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out new file mode 100644 index 0000000..9fb846a Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf new file mode 100644 index 0000000..e218a2f Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin new file mode 100644 index 0000000..239522e Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c new file mode 100644 index 0000000..c6ceafe --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c @@ -0,0 +1,2544 @@ +//***************************************************************************** +// +// grlib_driver_test.c - A test tool intended to aid developers of drivers +// for the TivaWare Graphics Library +// +// Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_sysctl.h" +#include "inc/hw_types.h" +#include "inc/hw_memmap.h" +#include "inc/hw_gpio.h" +#include "inc/hw_ints.h" +#include "inc/hw_lcd.h" +#include "driverlib/sysctl.h" +#include "driverlib/gpio.h" +#include "driverlib/lcd.h" +#include "driverlib/interrupt.h" +#include "driverlib/systick.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "utils/cmdline.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "images.h" +#include "driver_config.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Graphics Driver Test Tool (grlib_driver_test)

      +//! +//! This application provides a simple, command-line tool to aid in +//! debugging TivaWare Graphics Library display drivers. As shipped in +//! TivaWare, it is configured to operate with a DK-TM4C129X board using its +//! QVGA display. The code is written, however, to allow easy retargeting to +//! other boards and display drivers via modifications to the driver_config.h +//! header file. +//! +//! The tool is driven via a command line interface provided on UART0. Use a +//! terminal emulator on your host system and set the serial port to use +//! 115200bps, 8-N-1. To see a list of supported commands, enter ``help'' on +//! the command line and to see extended help on a specific command enter +//! ``help [command]''. +//! +//! The commands in the tool fall broadly into three categories: +//! +//! - commands allowing a given low level graphics function to be executed with +//! parameters provided by the user, +//! - commands providing the ability to read and write arbitrary memory +//! locations and registers, and +//! - tests displaying test patterns intended to exercise specific display +//! driver functions. +//! +//! The first group of commands includes ``r'' to read a word from a memory +//! location or register, ``w'' to write a word to a memory location or +//! register, ``dump'' to dump a range of memory as words and ``db'' to dump +//! a range of memory as bytes. Note that no checking is performed to ensure +//! that addresses passed to these functions are valid. If an invalid address +//! is passed, the test tool will fault. +//! +//! The second group of commands contains ``fill'' which fills the screen with +//! a given color, ``rect'' which draws a rectangle outline at a given position +//! on the display, ''hline`` which draws a horizontal line, ``vline'' which +//! draws a vertical line, ``image'' which draws an image at provided +//! coordinates, and ``text'' which renders a given text string. The output of +//! these commands is also modified via several other commands. ``fg'' selects +//! the foreground color to be used by the drawing commands and ``bg'' selects +//! the background color. ``setimg'' selects from one of four different test +//! images that are drawn in response to the ``image'' command and ``clipimg'' +//! allows image clipping to be adjusted to test handling of the \e i32X0 +//! parameter to the driver's PixelDrawMultiple function. +//! +//! Additional graphics commands are ``pat'' which redraws the test pattern +//! displayed when the tool starts, ``colbar'' which fills the display with +//! a set of color bars and ``perf'' which draws randomly positioned and +//! colored rectangles for a given number of seconds and determines the drawing +//! speed in pixels-per-second. +//! +//! All driver function test patterns are generated using the ``test'' command +//! whose first parameter indicates the test to display. Tests are as follow: +//! +//! - ``color'' tests the driver's color handling. The test starts by +//! splitting the screen into two and showing a different primary or +//! secondary color in each half. Verify that the correct colors are +//! displayed. After this, red, blue and green color gradients are +//! displayed. Again, verify that these are correct and that no color other +//! than the shades of the specific primary are displayed. If any color is +//! incorrect, this likely indicates an error in the driver's +//! pfnColorTranslate function or the function used to set the display +//! palette if the driver provides this feature. +//! +//! - ``pixel'' tests basic pixel plotting. A test pattern is drawn with a +//! single white pixel in each corner of the display, a small cross +//! comprising 5 white pixels in the center, and small arrows near each +//! corner. If any of the corner dots are missing or any of the other +//! pattern elements are incorrect, this points to a problem in the +//! driver's pfnPixelDraw function or, more generally, a problem with the +//! display coordinate space handling. +//! +//! - ``hline'' tests horizontal line drawing. White horizontal lines are +//! drawn at the top and bottom and a right-angled triangle is constructed in +//! the center of the display. If any line is missing or the triangle is +//! incorrect, this points to a problem in the driver's pfnLineDrawH +//! function. +//! +//! - ``vline'' tests vertical line drawing. White vertical lines are drawn +//! at the left and right and a right-angled triangle is constructed in +//! the center of the display. If any line is missing or the triangle is +//! incorrect, this points to a problem in the driver's pfnLineDrawV +//! function. +//! +//! - ``mult'' tests the driver's pfnPixelDrawMultiple function. This is the +//! most complex driver function and the one most prone to errors. The tool +//! fills the display with each of the included test images in turn. These +//! cover all the pixel formats (1-, 4- and 8-bpp) that the driver is +//! required to handle and the image clipping and x positions are set to +//! ensure that all alignment cases are handled for each format. In each +//! case, the image is drawn inside a single pixel red rectangle. If the +//! driver is handling each case correctly, the image should look correct +//! and no part of the red rectangle should be overwritten when the image +//! is drawn. In the displayed grid of images, the x alignment increases +//! from 1 to 8 across the display and each line increases the left-side +//! image clipping by one pixel from 0 in the top row to 7 in the bottom +//! row. An error in any image indicates that one of the cases handled by +//! the driver's pfnPixelDrawMultiple function is not handled correctly. +//! +//***************************************************************************** + +//***************************************************************************** +// +// The number of SysTick interrupts to generate per second. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 10 + +//***************************************************************************** +// +// Global system tick count. +// +//***************************************************************************** +volatile uint32_t g_ui32SysTickCount; + +//***************************************************************************** +// +// System clock rate in Hertz. +// +//***************************************************************************** +volatile uint32_t g_ui32SysClk; + +//***************************************************************************** +// +// Default colors. +// +//***************************************************************************** +uint32_t g_ui32Foreground = ClrWhite; +uint32_t g_ui32Background = ClrBlack; + +//***************************************************************************** +// +// Definitions related to the color bar pattern. +// +//***************************************************************************** +const uint32_t g_pui32BarColors[] = +{ + ClrBlack, + ClrWhite, + ClrYellow, + ClrCyan, + ClrGreen, + ClrMagenta, + ClrRed, + ClrBlue +}; + +#define NUM_COLOR_BARS (sizeof(g_pui32BarColors) / sizeof(uint32_t)) + +//***************************************************************************** +// +// Names for each of the colors in the g_pui32BarColors array. These two +// arrays must be kept in sync! +// +//***************************************************************************** +const char *g_ppcBarColors[] = +{ + "Black", "White", "Yellow", "Cyan", "Green", "Magenta", "Red", "Blue" +}; + +#if (DRIVER_BPP < 16) +//***************************************************************************** +// +// Set aside space for a color palette if the driver being tested uses a +// palettized pixel format. +// +//***************************************************************************** +uint32_t g_pui32Palette[1 << DRIVER_BPP]; +#endif + +//***************************************************************************** +// +// The number of pixels to clip off the left edge of an image drawn using the +// "image" command. +// +//***************************************************************************** +uint32_t g_ui32Clip = 0; + +//***************************************************************************** +// +// Graphics context used to show text on the QVGA display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Defines the size of the buffer that holds the command line. +// +//***************************************************************************** +#define CMD_BUF_SIZE 64 + +//***************************************************************************** +// +// Simple macros to return the maximum or minimum of two values. +// +//***************************************************************************** +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + +//***************************************************************************** +// +// The buffer that holds the command line. +// +//***************************************************************************** +static char g_cCmdBuf[CMD_BUF_SIZE]; + +typedef struct +{ + char *pcDesc; + const unsigned char *pucImage; +} +tTestImage; + +tTestImage g_pImages[] = +{ + {"TI Logo, 4bpp", g_pucLogo}, + {"32x32 test image, 1bpp", g_pucTest32x32x1Comp}, + {"32x32 test image, 4bpp", g_pucTest32x32x4Comp}, + {"32x32 test image, 8bpp", g_pucTest32x32x8Comp} +}; + +#define NUM_IMAGES (sizeof(g_pImages) / sizeof (tTestImage)) + +//***************************************************************************** +// +// The size of the arrows drawn in the PixelDraw test. +// +//***************************************************************************** +#define ARROW_SIZE 10 + +//***************************************************************************** +// +// A pointer to the currently selected image +// +//***************************************************************************** +const unsigned char *g_pucCurrentImage = g_pucLogo; + +//***************************************************************************** +// +// Command handler function prototypes. +// +//***************************************************************************** +int Cmd_Help(int argc, char *argv[]); +int Cmd_Foreground(int argc, char *argv[]); +int Cmd_Background(int argc, char *argv[]); +int Cmd_Fill(int argc, char *argv[]); +int Cmd_Rect(int argc, char *argv[]); +int Cmd_HLine(int argc, char *argv[]); +int Cmd_VLine(int argc, char *argv[]); +int Cmd_SetImage(int argc, char *argv[]); +int Cmd_Image(int argc, char *argv[]); +int Cmd_ClipImage(int argc, char *argv[]); +int Cmd_ColorBars(int argc, char *argv[]); +int Cmd_Text(int argc, char *argv[]); +int Cmd_Test(int argc, char *argv[]); +int Cmd_Pal(int argc, char *argv[]); +int Cmd_Pattern(int argc, char *argv[]); +int Cmd_Perf(int argc, char *argv[]); +int Cmd_Read(int argc, char *argv[]); +int Cmd_Write(int argc, char *argv[]); +int Cmd_Dump(int argc, char *argv[]); +int Cmd_DumpBytes(int argc, char *argv[]); + +//***************************************************************************** +// +// This is the table that holds the command names, implementing functions, +// and brief description. +// +//***************************************************************************** +tCmdLineEntry g_psCmdTable[] = +{ + { "fg", Cmd_Foreground, "[RGB24] Set the foreground color. Default is white." }, + { "bg", Cmd_Background, "[RGB24] Set the background color. Default is black." }, + { "fill", Cmd_Fill, "[RGB24] Fill the screen with a color." }, + { "rect", Cmd_Rect, "[xTL yTL xBR yBR] Draw a rectangle" }, + { "hline", Cmd_HLine, " Draw a horizontal line on the display" }, + { "vline", Cmd_VLine, " Draw a vertical line on the display" }, + { "setimg", Cmd_SetImage, " Sets the index of the current image." }, + { "image", Cmd_Image, "[x y] Draw an image at (x,y) or tile whole screen" }, + { "clipimg",Cmd_ClipImage, "[clip] Sets number of x image clipping pixels. Default 0." }, + { "colbar", Cmd_ColorBars, "Draw a color bar pattern on the display" }, + { "text", Cmd_Text, " [x y] Write text string at (x,y). Default center" }, + { "test", Cmd_Test, " Run tests for specific driver functions" }, + { "pal", Cmd_Pal, " Sets a palette entry to a given color" }, + { "pat", Cmd_Pattern, "Draw the initial test pattern." }, + { "perf", Cmd_Perf, " Run grlib performance test for some period" }, + { "r", Cmd_Read, " Read a memory location or register" }, + { "w", Cmd_Write, " Write a memory location" }, + { "dump", Cmd_Dump, " Dump words from a given address" }, + { "d", Cmd_Dump, " alias for dump" }, + { "db", Cmd_DumpBytes, " Dump bytes from a given address" }, + { "help", Cmd_Help, "[command] Display help on a command or a list of commands" }, + { "h", Cmd_Help, " alias for help" }, + { "?", Cmd_Help, " alias for help" }, + { 0, 0, 0 } +}; + +//***************************************************************************** +// +// Prototypes for specific test functions. +// +//***************************************************************************** +int Test_ColorTranslate(int argc, char *argv[]); +int Test_PixelDraw(int argc, char *argv[]); +int Test_LineDrawH(int argc, char *argv[]); +int Test_LineDrawV(int argc, char *argv[]); +int Test_PixelDrawMultiple(int argc, char *argv[]); + +//***************************************************************************** +// +// A table of test functions that are called based on the first command line +// parameter passed to the "test" command. +// +//***************************************************************************** +tCmdLineEntry g_psTestTable[] = +{ + { "color", Test_ColorTranslate, "" }, + { "pixel", Test_PixelDraw, "" }, + { "hline", Test_LineDrawH, "" }, + { "vline", Test_LineDrawV, "" }, + { "mult", Test_PixelDrawMultiple, "" }, + { 0, 0, 0 } +}; + +//***************************************************************************** +// +// A structure used to hold command-based help information. +// +//***************************************************************************** +typedef struct +{ + char *pcCommand; + char *pcHelp; +} +tCommandHelp; + +tCommandHelp g_psCommandHelp[] = +{ + { "fg", + "Sets the foreground color used in future ""rect"", ""hline"", ""vlins"" \n" + """image"" and ""text"" commands. The color is provided as a 24-bit RGB\n" + "value of the form 0xRRGGBB\n" }, + { "bg", + "Sets the background color used in future ""text"" and ""image"" commands.\n" + "The color is provided as a 24-bit RGB value of the form 0xRRGGBB\n" }, + { "fill", + "Fill the entire display with the provided RGB color or, if no parameter is\n" + "given, the current background color.\n" }, + { "rect", + "Draw a rectangle in the current foreground color at the given position on\n" + "the screen. If no parameters are provided, the rectangle is drawn around the\n" + "entire display area. Note that, unlike many other graphics APIs, rectangle\n" + "coordinates are bottom-right inclusive.\n" }, + { "hline", + "Draw a single horizontal line on the display using the current foreground\n" + "color. The command accepts three parameters, the starting and ending x\n" + "coordinates and the y coordinate for the line.\n" }, + { "vline", + "Draw a single vertical line on the display using the current foreground\n" + "color. The command accepts three parameters, the starting and ending y\n" + "coordinates and the x coordinate for the line.\n" }, + { "setimg", + "Determine which test image will be drawn on future calls to the ""image""\n" + "command. The index passed must be between 0 and 3 (inclusive) and identifies\n" + "the following images:\n" + " 0 - TI logo, 4bpp, 80 x 75, compressed\n" + " 1 - 4 square quadrants, 1bpp, 32 x 32, compressed\n" + " 2 - 16 color test pattern, 4bpp, 32 x 32, compressed\n" + " 3 - 256 color test pattern, 8bpp, 32 x 32, compressed\n" }, + { "image", + "Draw the image selected by the previous ""setimg"" command at position (x,y)\n" + "on the display. If a 1bpp image is selected, the current foreground and\n" + "background colors are used, otherwise the image's own palette determines the\n" + "color. If the ""clipimg"" command has previously been issued, the left edge\n" + "of the image will be clipped by the number of pixels indicated in that command.\n" + "When clipping is enabled, the (x, y) position is not adjusted to compensate for\n" + "the fact that the image is being cropped. For example, if a 32x32 image is \n" + "selected and the clip value has been set to 4, drawing the image at (0, 0) will\n" + "result in 28 pixels of each image line being drawn at x=4 on the display with\n" + "the first displayed pixel coming from the 5th column of the source image.\n" }, + { "clipimg", + "Sets the number of pixels that will be clipped or cropped off the left edge of\n" + "future images drawn using the ""image"" command. If no parameter is passed,\n" + "image clipping is disabled, otherwise the parameter represents the number of\n" + "pixels to clip.\n" }, + { "colbar", + "Draw a series of vertical color bars on the display. From left to right, the\n" + "bars are black, white, yellow, cyan, green, magenta, red and blue.\n" }, + { "text", + "Renders text at a given location on the display. The foreground and background\n" + "colors are as set using previous ""fg"" and ""bg"" commands. If no parameters\n" + "are provided, a short string is drawn in the center of the screen. If\n" + "parameters are provided they must be the required string (containing no spaces)\n" + "followed by the x coordinate and the y coordinate for the top left corner of\n" + "the string.\n" }, + { "pal", + "Sets the given color lookup table location to a particular RGB color. This\n" + "command is only available if the display frame buffer uses a format containing\n" + "less than 16 bits per pixel. The range of valid indices depends upon the frame\n" + "buffer format. For a 1bpp display, indices 0 and 1 are valid. For 4bpp, the\n" + "index must be in the range 0 to 15, and for an 8bpp buffer, values 0 to 255\n" + "are valid.\n" }, + { "pat", + "Clears the display and redraws the initial test pattern that was shown when the\n" + "tool originally started.\n" }, + { "perf", + "Draws random filled rectangles on the display for a given number of seconds and\n" + "then calculates the approximate throughput in megapixels per second and\n" + "megabytes per second.\n" }, + { "r", + "Reads a word from a given memory address. Note that no checking is performed\n" + "on the validity of the supplied address. If an invalid address is supplied, the\n" + "command will cause an exception and the test tool will hang.\n" }, + { "w", + "Writes a word to a given memory address. Note that no checking is performed\n" + "on the validity of the supplied address. If an invalid address is supplied, the\n" + "command will cause an exception and the test tool will hang.\n" }, + { "dump", + "Reads a block of words from a given memory address. Note that no checking\n" + "is performed on the validity of the supplied address. If an invalid address\n" + "is supplied, the command will cause an exception and the test tool will hang.\n" }, + { "db", + "Reads a block of bytes from a given memory address and displays them in hex\n" + "format. Note that no checking is performed on the validity of the supplied\n" + "address. If an invalid address is supplied, the command will cause an\n" + "exception and the test tool will hang.\n" }, + { "test", + "Run one of a number of tests designed to exercise a specific display driver\n" + "function. Valid tests are as follow:\n" + " ""color"" - tests pfnColorTranslate and color handling.\n" + " ""pixel"" - tests pfnPixelDraw().\n" + " ""hline"" - tests pfnLineDrawH().\n" + " ""vline"" - tests pfnLineDrawV().\n" + " ""mult"" - tests pfnPixelDrawMultiple().\n" }, + { "help", + "Show a list of supported commands or provide additional help on a single command.\n" }, + { 0, 0 } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +void +__error__(char *pcFilename, unsigned long ulLine) +{ + // + // A runtime error was detected so stop here to allow debug. + // + while(1) + { + // + // Hang. + // + } +} + +//***************************************************************************** +// +// The handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Increment the SysTick count. + // + g_ui32SysTickCount++; +} + +//***************************************************************************** +// +// A wrapper around GrImageDraw() that allows us to supply an x pixel clipping +// value and sets the clip rectangle as required before drawing the image. +// +//***************************************************************************** +void DrawImage(tContext *psContext, const uint32_t ui32Clip, + const uint8_t *pui8Image, int32_t i32X, int32_t i32Y) +{ + tRectangle sRect; + + sRect.i16XMax = GrContextDpyWidthGet(psContext) - 1; + sRect.i16YMax = GrContextDpyHeightGet(psContext) - 1; + sRect.i16YMin = 0; + + // + // Are we performing clipping? + // + if(ui32Clip == 0) + { + // + // No - set the clipping rectangle to the whole screen. + // + sRect.i16XMin = 0; + } + else + { + // + // Yes - set the clipping rectangle to clip off only the leftmost + // ui32Clip pixels from the image to be drawn. + // + sRect.i16XMin = i32X + ui32Clip; + } + + // + // Set the required clipping rectangle. + // + GrContextClipRegionSet(psContext, &sRect); + + // + // Draw the image. + // + GrImageDraw(psContext, pui8Image, i32X, i32Y); + + // + // Clear the clipping rectangle again. + // + sRect.i16XMin = 0; + GrContextClipRegionSet(psContext, &sRect); +} + +//***************************************************************************** +// +// Draw a test pattern onto the display. This pattern contains a variety of +// graphics primitives and will call every display driver API (although not all +// cases that each API must support). +// +//***************************************************************************** +void +DrawTestPattern(tContext *psContext) +{ + int32_t i32Loop, i32XInc, i32YInc, i32Width, i32Height; + tRectangle sRect; + + // + // Fill the the display with black and draw a white box around it. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(psContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(psContext) - 1; + GrContextForegroundSet(psContext, ClrBlack); + GrRectFill(psContext, &sRect); + GrContextForegroundSet(psContext, ClrWhite); + GrRectDraw(psContext, &sRect); + + // + // Draw a pattern of lines within the main display area. + // + i32XInc = GrContextDpyWidthGet(psContext) / 20; + i32YInc = GrContextDpyHeightGet(psContext) / 20; + + GrContextForegroundSet(psContext, ClrWhite); + + // + // Draw a pattern of lines. + // + for(i32Loop = 0; i32Loop < 20; i32Loop++) + { + GrLineDraw(psContext, 0, i32YInc * i32Loop, i32XInc * i32Loop, + (GrContextDpyHeightGet(psContext) - 1)); + GrLineDraw(psContext, + (GrContextDpyWidthGet(psContext) - 1), + (GrContextDpyHeightGet(psContext) - + (i32YInc * i32Loop + 1)), + (GrContextDpyWidthGet(psContext) - + (i32XInc * i32Loop + 1)), + 0); + } + + // + // Fill the top 22 lines of the display with blue. + // + sRect.i16XMin = 1; + sRect.i16XMax = GrContextDpyWidthGet(psContext) - 2; + sRect.i16YMin = 1; + sRect.i16YMax = 22; + + GrContextForegroundSet(psContext, ClrBlue); + GrRectFill(psContext, &sRect); + + // + // Draw a white line at the bottom of the blue box. + // + GrContextForegroundSet(psContext, ClrWhite); + GrLineDraw(psContext, sRect.i16XMin, sRect.i16YMax, + sRect.i16XMax, sRect.i16YMax); + + // + // Write the application name inside the blue box at the top of the screen. + // + GrContextFontSet(psContext, g_psFontCmss18b); + GrStringDrawCentered(psContext, "grlib-driver-test", -1, sRect.i16XMax / 2, + 8, false); + + // + // Draw a circle around the center of the main display area. + // + GrContextForegroundSet(psContext, ClrRed); + GrCircleDraw(psContext, GrContextDpyWidthGet(psContext) / 2, + 23 + ((GrContextDpyHeightGet(psContext) - 23) / 2), 70); + + // + // Determine where to draw the logo so that it is centered in the + // main section of the display. + // + i32Width = *(uint16_t *)(g_pImages[0].pucImage + 1); + i32Height = *(uint16_t *)(g_pImages[0].pucImage + 3); + i32XInc = (GrContextDpyWidthGet(psContext) - i32Width) / 2; + i32YInc = ((GrContextDpyHeightGet(psContext) - (23 + i32Height)) / 2) + 23; + + // + // Draw the TI logo in the center of the display + // + GrTransparentImageDraw(psContext, g_pImages[0].pucImage, i32XInc, i32YInc, + ClrBlack); + + // + // Flush any cached drawing operations. + // + GrFlush(psContext); +} + +//***************************************************************************** +// +// Draw test patterns that exercises the display driver's ColorTranslate +// function and, if applicable, its palette manipulation function. +// +//***************************************************************************** +int +Test_ColorTranslate(int argc, char *argv[]) +{ + int32_t i32Loop, i32NumBars, i32BarWidth, i32BarLoop; + uint32_t ui32Color; + tRectangle sRect; + + UARTprintf("Running ColorTranslate Test.\n\n"); + + UARTprintf("This test shows various color patterns to allow a driver writer " + "to ensure that\n" + "color mapping and palette functions are operating correctly.\n"); + + UARTprintf("\nFirst, some basic primary and secondary colors...\n"); + + // + // Loop through pairs of colors that we have configured for the color bar + // test pattern. + // + for(i32Loop = 0; i32Loop < NUM_COLOR_BARS; i32Loop += 2) + { + // + // Does this driver require a color lookup table? + // +#if (DRIVER_BPP < 16) + // + // Set the palette we want to use for this portion of the test. + // + g_pui32Palette[0] = g_pui32BarColors[i32Loop]; + g_pui32Palette[1] = g_pui32BarColors[i32Loop + 1]; + DRIVER_PALETTE_SET(g_pui32Palette, 0, 2); +#endif + + // + // Fill the left half of the display with one color of the pair. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) / 2; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, g_pui32BarColors[i32Loop]); + GrRectFill(&g_sContext, &sRect); + + // + // Fill the right half of the display with the other color. + // + sRect.i16XMin = (GrContextDpyWidthGet(&g_sContext) / 2) + 1; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, g_pui32BarColors[i32Loop + 1]); + GrRectFill(&g_sContext, &sRect); + + // + // Tell the user what they should be seeing. + // + UARTprintf("Left %s, right %s. Press ""Enter"" to continue.\n", g_ppcBarColors[i32Loop], + g_ppcBarColors[i32Loop + 1]); + + // + // Wait for the user to press "Enter" + // + UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf)); + } + + // + // Clear the screen again. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // From the display width and the frame buffer color depth, determine the + // number of bars to draw and the width of each. + // +#if (DRIVER_BPP < 16) + // + // For a palettized frame buffer, the number of bars we draw is the + // the number of simultaneous colors that the pixel format can represent. + // + i32NumBars = (1 << DRIVER_BPP) - 1; +#else + // + // For a direct color frame buffer, we show no more than 256 steps because + // that's as many independent shades of any primary that you can represent + // in RGB24 format. + // + i32NumBars = 256; +#endif + + // + // If the number of bars we need to draw is more than the number of pixels + // across the display, reduce the number of bars. + // + i32NumBars = MIN(i32NumBars, GrContextDpyWidthGet(&g_sContext)); + + // + // What's the width of each bar? We store this in 24.8 fixed point + // notation. + // + i32BarWidth = (GrContextDpyWidthGet(&g_sContext) * 256) / i32NumBars; + + // + // Now draw a color gradient across the display in each primary color. + // + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + + for(i32Loop = 0; i32Loop < 3; i32Loop++) + { +#if (DRIVER_BPP < 16) + // + // For palettized frame buffers, set the desired color palette. + // + for(i32BarLoop = 0; i32BarLoop < (1 << DRIVER_BPP); i32BarLoop++) + { + g_pui32Palette[i32BarLoop] = (i32BarLoop * 256) / (1 << DRIVER_BPP); + g_pui32Palette[i32BarLoop] <<= (8 * i32Loop); + } + DRIVER_PALETTE_SET(g_pui32Palette, 0, (1 << DRIVER_BPP)); +#endif + + // + // Draw each of the vertical bars making up the gradient pattern. + // + for(i32BarLoop = 0; i32BarLoop < i32NumBars; i32BarLoop++) + { + // + // Calculate the position of this bar. + // + sRect.i16XMin = sRect.i16XMax + 1; + sRect.i16XMax = ((i32BarLoop * i32BarWidth) / 256) - 1; + + // + // Set the color of this bar. + // + ui32Color = (i32BarLoop == (i32NumBars - 1)) ? 255 : + ((i32BarLoop * 256) / i32NumBars); + ui32Color <<= (i32Loop * 8); + GrContextForegroundSet(&g_sContext, ui32Color); + + // + // Draw the bar. + // + GrRectFill(&g_sContext, &sRect); + } + + // + // Tell the user what they should be seeing. + // + UARTprintf("%s gradient with %d steps. Press ""Enter"" to continue\n", + (i32Loop == 0) ? "Blue" : + ((i32Loop == 1) ? "Green" : "Red"), + i32NumBars); + + // + // Wait for the user to press "Enter" + // + UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf)); + } + + return(0); +} + +//***************************************************************************** +// +// Draw a test pattern that exercises the display driver's PixelDraw function. +// +//***************************************************************************** +int +Test_PixelDraw(int argc, char *argv[]) +{ + tRectangle sRect; + int32_t i32Loop; + + UARTprintf("Running PixelDraw Test.\n\n"); + + UARTprintf("The display should show single white dots in each corner, a " + "small cross at\n" + "the center of the display, and small arrows pointing to each " + "corner.\n"); + + // + // Set the drawing color to black and clear the screen. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Set the drawing color to white. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Plot points at each corner. + // + GrPixelDraw(&g_sContext, 0, 0); + GrPixelDraw(&g_sContext, sRect.i16XMax, 0); + GrPixelDraw(&g_sContext, 0, sRect.i16YMax); + GrPixelDraw(&g_sContext, sRect.i16XMax, sRect.i16YMax); + + // + // Draw a small cross at the center of the display. + // + GrPixelDraw(&g_sContext, sRect.i16XMax / 2, sRect.i16YMax / 2); + GrPixelDraw(&g_sContext, (sRect.i16XMax / 2) + 1, (sRect.i16YMax / 2)); + GrPixelDraw(&g_sContext, (sRect.i16XMax / 2) - 1, (sRect.i16YMax / 2)); + GrPixelDraw(&g_sContext, (sRect.i16XMax / 2), (sRect.i16YMax / 2) + 1); + GrPixelDraw(&g_sContext, (sRect.i16XMax / 2), (sRect.i16YMax / 2) - 1); + + // + // Draw the arrows one pixel at a time. + // + for(i32Loop = 1; i32Loop < ARROW_SIZE; i32Loop++) + { + // + // Top left arrow. + // + GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop, ARROW_SIZE + i32Loop); + GrPixelDraw(&g_sContext, ARROW_SIZE, ARROW_SIZE + i32Loop); + GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop, ARROW_SIZE); + + // + // Top right arrow. + // + GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop), + ARROW_SIZE + i32Loop); + GrPixelDraw(&g_sContext, sRect.i16XMax - ARROW_SIZE, + ARROW_SIZE + i32Loop); + GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop), + ARROW_SIZE); + + // + // Bottom right arrow. + // + GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop), + sRect.i16YMax - (ARROW_SIZE + i32Loop)); + GrPixelDraw(&g_sContext, sRect.i16XMax - ARROW_SIZE, + sRect.i16YMax - (ARROW_SIZE + i32Loop)); + GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop), + sRect.i16YMax - ARROW_SIZE); + + // + // Bottom left arrow. + // + GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop, + sRect.i16YMax - (ARROW_SIZE + i32Loop)); + GrPixelDraw(&g_sContext, ARROW_SIZE, + sRect.i16YMax - (ARROW_SIZE + i32Loop)); + GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop, + sRect.i16YMax - ARROW_SIZE); + } + + return(0); +} + +//***************************************************************************** +// +// Draw a test pattern that exercises the display driver's LineDrawH function. +// +//***************************************************************************** +int +Test_LineDrawH(int argc, char *argv[]) +{ + tRectangle sRect; + int32_t i32Loop, i32X, i32Y, i32Size; + + UARTprintf("Running LineDrawH Test.\n\n"); + + UARTprintf("The display should show horizontal white lines across the " + "complete width of\n" + "the screen at top and bottom and a right-angled triangle with " + "horizontal\n" + "edge at the bottom and vertical edge on the left.\n"); + + // + // Set the drawing color to black and clear the screen. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Set the drawing color to white. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Draw horizontal lines at the top and bottom of the display. + // + GrLineDrawH(&g_sContext, 0, sRect.i16XMax, 0); + GrLineDrawH(&g_sContext, 0, sRect.i16XMax, sRect.i16YMax); + + // + // Determine the size of the triangle we will draw. + // + i32Size = (MIN(sRect.i16YMax, sRect.i16XMax) * 3) / 4; + i32X = (GrContextDpyWidthGet(&g_sContext) - i32Size) / 2; + i32Y = (GrContextDpyHeightGet(&g_sContext) - i32Size) / 2; + + // + // Draw the rectangle based on the size and position calculated. + // + for(i32Loop = 1; i32Loop < i32Size; i32Loop++) + { + GrLineDrawH(&g_sContext, i32X, i32X + i32Loop, i32Y + i32Loop); + } + + return(0); +} + +//***************************************************************************** +// +// Draw a test pattern that exercises the display driver's LineDrawV function. +// +//***************************************************************************** +int +Test_LineDrawV(int argc, char *argv[]) +{ + tRectangle sRect; + int32_t i32Loop, i32X, i32Y, i32Size; + + UARTprintf("Running LineDrawV Test.\n\n"); + + UARTprintf("The display should show vertical white lines down the " + "complete height of\n" + "the screen at left and right and a right-angled triangle with " + "horizontal\n" + "edge at the top and vertical edge on the right.\n"); + + // + // Set the drawing color to black and clear the screen. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Set the drawing color to white. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Draw vertical lines on the left and right sides of the display. + // + GrLineDrawV(&g_sContext, 0, 0, sRect.i16YMax); + GrLineDrawV(&g_sContext, sRect.i16XMax, 0, sRect.i16YMax); + + // + // Determine the size of the triangle we will draw. + // + i32Size = (MIN(sRect.i16YMax, sRect.i16XMax) * 3) / 4; + i32X = (GrContextDpyWidthGet(&g_sContext) - i32Size) / 2; + i32Y = (GrContextDpyHeightGet(&g_sContext) - i32Size) / 2; + + // + // Draw the rectangle based on the size and position calculated. + // + for(i32Loop = 1; i32Loop < i32Size; i32Loop++) + { + GrLineDrawV(&g_sContext, i32X + i32Loop, i32Y, + i32Y + i32Loop); + } + + return(0); +} + +//***************************************************************************** +// +// Draw test patterns that exercise the display driver's PixelDrawMultiple +// function. This function ensures that all supported image pixel formats +// are used along with all possible drawing alignment and sub-byte clipping +// settings. +// +//***************************************************************************** +int +Test_PixelDrawMultiple(int argc, char *argv[]) +{ + int32_t i32X, i32Y, i32Width, i32Height; + int32_t i32ImageLoop, i32PositionLoop, i32ClipLoop; + tRectangle sRect; + + UARTprintf("Running PixelDrawMultiple Test.\n\n"); + + // + // Loop through each of the test images. + // + for(i32ImageLoop = 0; i32ImageLoop < NUM_IMAGES; i32ImageLoop++) + { + // + // Tell the user what we're doing. + // + UARTprintf("Image %d: %s\n", i32ImageLoop, + g_pImages[i32ImageLoop].pcDesc); + + // + // Set the drawing color to black and clear the screen. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Determine the size of the current test image. + // + i32Width = (int32_t)g_pImages[i32ImageLoop].pucImage[1] + + 256 * (int32_t)g_pImages[i32ImageLoop].pucImage[2]; + i32Height = (int32_t)g_pImages[i32ImageLoop].pucImage[3] + + 256 * (int32_t)g_pImages[i32ImageLoop].pucImage[4]; + // + // Loop through each possible x offset from 0 to 7. + // + for(i32PositionLoop = 0; i32PositionLoop < 8; i32PositionLoop++) + { + // + // Loop through all clipping values from 0 to 7 + // + for(i32ClipLoop = 0; i32ClipLoop < 8; i32ClipLoop++) + { + // + // Determine the (x, y) position for this image. + // + i32X = i32PositionLoop * (i32Width + 4) + i32PositionLoop + 1; + i32Y = i32ClipLoop * (i32Height + 4) + 1; + + // + // Draw the outline rectangle that the image should fit inside. + // + sRect.i16XMin = i32X + i32ClipLoop - 1; + sRect.i16XMax = i32X + i32Width; + sRect.i16YMin = i32Y - 1; + sRect.i16YMax = i32Y + i32Height; + GrContextForegroundSet(&g_sContext, ClrRed); + GrRectDraw(&g_sContext, &sRect); + + // + // Set drawing colors to blue and yellow in case we're using + // a 1bpp source image. + // + GrContextForegroundSet(&g_sContext, ClrYellow); + GrContextBackgroundSet(&g_sContext, ClrBlue); + + // + // Draw the test image at the relevant position. + // + DrawImage(&g_sContext, i32ClipLoop, + g_pImages[i32ImageLoop].pucImage, i32X, i32Y); + } + } + + // + // Tell the user what they should be seeing. + // + UARTprintf("Check pattern. No image should overdraw the red rectangle " + "edges.\nPress ""Enter"" to continue."); + + // + // Wait for the user to press "Enter" + // + UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf)); + } + + // + // Reset the foreground and background colors to the user's original + // choices. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + GrContextBackgroundSet(&g_sContext, g_ui32Background); + + UARTprintf("PixelDrawMultiple test complete.\n"); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "test" command. It requires a single parameter +// which identifies the test to run. Any additional command line parameters +// are passed on to the specific test function. +// +//***************************************************************************** +int +Cmd_Test(int argc, char *argv[]) +{ + tCmdLineEntry *pTests; + + // + // Make sure we have at least one additional parameter. + // + if(argc < 2) + { + UARTprintf("ERROR: This command requires one parameter .\n"); + return(0); + } + + // + // Walk through the list of configured tests and look for a match with + // the identifier passed. + // + pTests = g_psTestTable; + + while(pTests->pcCmd) + { + // + // Does this test match the string passed? + // + if(ustrcmp(pTests->pcCmd, argv[1]) == 0) + { + // + // Yes - call the test function. + // + return((pTests->pfnCmd)(argc - 1, &argv[1])); + } + + // + // Move on to the next test in the list. + // + pTests++; + } + + // + // If we get here, the test name provided is not recognized. + // + UARTprintf("Test ""%s"" cannot be found.\n", argv[1]); + return(0); +} + +//***************************************************************************** +// +// This function implements the "help" command. It prints a simple list +// of the available commands with a brief description. +// +//***************************************************************************** +int +Cmd_Help(int argc, char *argv[]) +{ + tCmdLineEntry *psEntry; + tCommandHelp *psHelp; + bool bFound; + + // + // Get pointers to the beginning of the command table and the extended + // help table. + // + psEntry = g_psCmdTable; + psHelp = g_psCommandHelp; + bFound = false; + + // + // Are we being asked to list all the commands? + // + if(argc == 1) + { + // + // Print some header text. + // + UARTprintf("\nAvailable commands\n"); + UARTprintf("------------------\n"); + + // + // Enter a loop to read each entry from the command table. The + // end of the table has been reached when the command name is NULL. + // + while(psEntry->pcCmd) + { + // + // Print the command name and the brief description. + // + UARTprintf("%12s : %s\n", psEntry->pcCmd, psEntry->pcHelp); + + // + // Advance to the next entry in the table. + // + psEntry++; + } + } + else + { + // + // We are being asked for help on a specific command. + // + + // + // Enter a loop find the requested command in the basic command table + // and print the summary help for that command. + // + while(psEntry->pcCmd) + { + // + // Does the provided command match the current table entry? + // + if(ustrcmp(argv[1], psEntry->pcCmd) == 0) + { + // + // Yes - print the command name and the brief description. + // + UARTprintf("\n%s : %s\n", psEntry->pcCmd, psEntry->pcHelp); + + bFound = true; + + // + // Drop out of the loop. + // + break; + } + + // + // Advance to the next entry in the table. + // + psEntry++; + } + + // + // If we get here without finding the command, then it's not a valid + // command. + // + if(!bFound) + { + UARTprintf("Command ""%s"" is not supported.\n", argv[1]); + return(0); + } + + // + // We found the command so now go and look for extended help. + // + bFound = false; + + // + // Walk through the table of detailed help entries until we see a NULL + // for the command string pointer. + // + while(psHelp->pcCommand) + { + // + // Does the command passed match this entry in the detailed help + // table? + // + if(ustrcmp(argv[1], psHelp->pcCommand) == 0) + { + UARTprintf("\n%s\n", psHelp->pcHelp); + bFound = true; + break; + } + + // + // Move to the next entry in the list. + // + psHelp++; + } + + if(!bFound) + { + UARTprintf("No extended help is available for ""%s"".\n", argv[1]); + } + } + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "r" command and reads a single word from a +// given memory location. +// +//***************************************************************************** +int +Cmd_Read(int argc, char *argv[]) +{ + uint32_t ulAddr; + + // + // Parameter check. + // + if(argc != 2) + { + UARTprintf("ERROR: This command requires one parameter .\n"); + return(0); + } + + // + // Get the address to read. + // + ulAddr = ustrtoul(argv[1], 0, 0); + + UARTprintf("0x%08x: 0x%08x\n", ulAddr, HWREG(ulAddr)); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "w" command and writes a single word to a +// given memory location. +// +//***************************************************************************** +int +Cmd_Write(int argc, char *argv[]) +{ + uint32_t ulAddr, ulVal; + + // + // Parameter check. + // + if(argc != 3) + { + UARTprintf("ERROR: This command requires 2 parameters .\n"); + return(0); + } + + // + // Get the address and value to write. + // + ulAddr = ustrtoul(argv[1], 0, 0); + ulVal = ustrtoul(argv[2], 0, 0); + + HWREG(ulAddr) = ulVal; + UARTprintf("0x%08x: 0x%08x\n", ulAddr, HWREG(ulAddr)); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "d" command and dumps a number of words from a +// given memory location. +// +//***************************************************************************** +int +Cmd_Dump(int argc, char *argv[]) +{ + uint32_t ulAddr, ui32Count, ulLoop; + + // + // Parameter check. + // + if(argc != 3) + { + UARTprintf("ERROR: This command requires 2 parameters .\n"); + return(0); + } + + // + // Get the address and value to write. + // + ulAddr = ustrtoul(argv[1], 0, 0); + ui32Count = ustrtoul(argv[2], 0, 0); + + // + // Walk through the memory range making sure that we align the addresses + // on 16 byte boundaries (to make the output look good). + // + for(ulLoop = ulAddr & ~0x0F; ulLoop < ulAddr + (ui32Count * 4); ulLoop += 4) + { + // + // Take a new line and print the address every 16 bytes. + // + if(!(ulLoop % 16)) + { + UARTprintf("\n0x%08x: ", ulLoop); + } + + // + // Display the value of a particular word or pad with spaces if we are + // still below the requested address. + // + if(ulLoop >= ulAddr) + { + UARTprintf("%08x ", HWREG(ulLoop)); + } + else + { + UARTprintf(" "); + } + } + + UARTprintf("\n"); + + return(0); +} + +//***************************************************************************** +// +// Dump the contents of ui32Count bytes from address ulAddr. +// +//***************************************************************************** +static void +DumpBytes(uint32_t ulAddr, uint32_t ui32Count) +{ + uint32_t ulLoop; + + // + // Walk through the memory range making sure that we align the addresses + // on 16 byte boundaries (to make the output look good). + // + for(ulLoop = ulAddr & ~0x0F; ulLoop < ulAddr + ui32Count; ulLoop++) + { + // + // Take a new line and print the address every 16 bytes. + // + if(!(ulLoop % 16)) + { + UARTprintf("\n0x%08x: ", ulLoop); + } + + // + // Display the value of a particular byte or pad with spaces if we are + // still below the requested address. + // + if(ulLoop >= ulAddr) + { + UARTprintf("%02x ", HWREGB(ulLoop)); + } + else + { + UARTprintf(" "); + } + } + + UARTprintf("\n"); +} + +//***************************************************************************** +// +// This function implements the "db" command and dumps a number of bytes from a +// given memory location. +// +//***************************************************************************** +int +Cmd_DumpBytes(int argc, char *argv[]) +{ + uint32_t ulAddr, ui32Count; + + // + // Parameter check. + // + if(argc != 3) + { + UARTprintf("ERROR: This command requires 2 parameters .\n"); + return(0); + } + + // + // Get the address and value to write. + // + ulAddr = ustrtoul(argv[1], 0, 0); + ui32Count = ustrtoul(argv[2], 0, 0); + + DumpBytes(ulAddr, ui32Count); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "fill" command and fills the whole screen with +// a given color value. +// +//***************************************************************************** +int +Cmd_Fill(int argc, char *argv[]) +{ + tRectangle sRect; + uint32_t ui32Color; + + // + // Get the color value to use if one was provided. Default to + // the current background if none was specified. + // + if(argc > 1) + { + ui32Color = ustrtoul(argv[1], 0, 0); + } + else + { + ui32Color = g_ui32Background; + } + + UARTprintf("Filling display with RGB 0x%06x.\n", ui32Color); + + // + // Fill the frame buffer with the desired color. + // + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextForegroundSet(&g_sContext, ui32Color); + GrRectFill(&g_sContext, &sRect); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "rect" command and draws a rectangle in the +// current foreground color. If 4 parameters are supplied, they represent +// the X and Y coordinates of the top left and bottom right points. If no +// parameters are supplied, the display edge outline is drawn. +// +//***************************************************************************** +int +Cmd_Rect(int argc, char *argv[]) +{ + tRectangle sRect; + + if(argc == 1) + { + sRect.i16XMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMin = 0; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + } + else + { + if(argc != 5) + { + UARTprintf("This command reguires either 0 or 4 arguments!\n"); + return(0); + } + else + { + sRect.i16XMin = ustrtoul(argv[1], 0, 0); + sRect.i16XMax = ustrtoul(argv[3], 0, 0); + sRect.i16YMin = ustrtoul(argv[2], 0, 0); + sRect.i16YMax = ustrtoul(argv[4], 0, 0);; + } + } + + // + // Set the foreground color. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + + // + // Draw the required rectangle. + // + GrRectDraw(&g_sContext, &sRect); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "line" command and draws a pattern of angled +// lines on the display. If 4 parameters are provided, this function draws +// a single line between the specified points. +// +//***************************************************************************** +int +Cmd_Line(int argc, char *argv[]) +{ + int32_t i32Loop, i32XInc, i32YInc; + tRectangle sRect; + + // + // Set the foreground color. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + + // + // Are we drawing the pattern or just a single line? + // + if(argc == 1) + { + i32XInc = GrContextDpyWidthGet(&g_sContext) / 20; + i32YInc = GrContextDpyHeightGet(&g_sContext) / 20; + + // + // Draw a pattern of lines. + // + for(i32Loop = 0; i32Loop < 20; i32Loop++) + { + GrLineDraw(&g_sContext, 0, i32YInc * i32Loop, i32XInc * i32Loop, + (GrContextDpyHeightGet(&g_sContext) - 1)); + GrLineDraw(&g_sContext, + (GrContextDpyWidthGet(&g_sContext) - 1), + (GrContextDpyHeightGet(&g_sContext) - + (i32YInc * i32Loop + 1)), + (GrContextDpyWidthGet(&g_sContext) - + (i32XInc * i32Loop + 1)), + 0); + } + } + else + { + // + // We're drawing a single line. Do we have the correct number of + // parameters? + // + if(argc != 5) + { + UARTprintf("This command reguires either 0 or 4 arguments!\n"); + return(0); + } + + // + // Get the line start and end points. + // + sRect.i16XMin = ustrtoul(argv[1], 0, 0); + sRect.i16XMax = ustrtoul(argv[3], 0, 0); + sRect.i16YMin = ustrtoul(argv[2], 0, 0); + sRect.i16YMax = ustrtoul(argv[4], 0, 0);; + + // + // Draw the line. + // + GrLineDraw(&g_sContext, sRect.i16XMin, sRect.i16YMin, + sRect.i16XMax, sRect.i16YMax); + } + + return(0); +} + +//***************************************************************************** +// +// This function implements the "fg" command and saves the given color as the +// foreground color for future drawing operations. +// +//***************************************************************************** +int +Cmd_Foreground(int argc, char *argv[]) +{ + // + // Get the color value to use if one was provided. Default to white if + // no color was specified. + // + if(argc > 1) + { + g_ui32Foreground = ustrtoul(argv[1], 0, 0); + } + else + { + g_ui32Foreground = ClrWhite; + } + + UARTprintf("Foreground color set to 0x%06x.\n", g_ui32Foreground); + + return(0); +} + + +//***************************************************************************** +// +// This function implements the "bg" command and saves the given color as the +// background color for future drawing operations. +// +//***************************************************************************** +int +Cmd_Background(int argc, char *argv[]) +{ + // + // Get the color value to use if one was provided. Default to black if + // no color was specified. + // + if(argc > 1) + { + g_ui32Background = ustrtoul(argv[1], 0, 0); + } + else + { + g_ui32Background = ClrBlack; + } + + UARTprintf("Background color set to 0x%06x.\n", g_ui32Background); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "hlines" command and draws a single horizontal +// line on the display. +// +//***************************************************************************** +int +Cmd_HLine(int argc, char *argv[]) +{ + int32_t i32X1, i32X2, i32Y; + + // + // Ensure that we were passed the correct number of parameters. + // + if(argc != 4) + { + UARTprintf("This command requires 3 parameters, x1, x2, y.\n"); + return(0); + } + + // + // Extract the command line parameters. + // + i32X1 = ustrtoul(argv[1], 0, 0); + i32X2 = ustrtoul(argv[2], 0, 0); + i32Y = ustrtoul(argv[3], 0, 0); + + UARTprintf("Drawing a horizontal line on the display in color 0x%06x.\n", + g_ui32Foreground); + UARTprintf("Line (%d, %d) to (%d, %d).\n", i32X1, i32Y, i32X2, i32Y); + + // + // Set the desired color. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + + // + // Draw the line. + // + GrLineDrawH(&g_sContext, i32X1, i32X2, i32Y); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "vline" command and draws a pattern of +// horizontal lines on the display. +// +//***************************************************************************** +int +Cmd_VLine(int argc, char *argv[]) +{ + int32_t i32Y1, i32Y2, i32X; + + // + // Ensure that we were passed the correct number of parameters. + // + if(argc != 4) + { + UARTprintf("This command requires 3 parameters, x, y1, y2.\n"); + return(0); + } + + // + // Extract the command line parameters. + // + i32X = ustrtoul(argv[1], 0, 0); + i32Y1 = ustrtoul(argv[2], 0, 0); + i32Y2 = ustrtoul(argv[3], 0, 0); + + UARTprintf("Drawing a vertical line on the display in color 0x%06x.\n", + g_ui32Foreground); + UARTprintf("Line (%d, %d) to (%d, %d).\n", i32X, i32Y1, i32X, i32Y2); + + // + // Set the desired color. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + + // + // Draw the line. + // + GrLineDrawV(&g_sContext, i32X, i32Y1, i32Y2); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "pal" command and sets a single palette entry +// to the given color. +// +//***************************************************************************** +int +Cmd_Pal(int argc, char *argv[]) +{ +#if (DRIVER_BPP == 16) + UARTprintf("This command is not supported for 16bpp frame buffers.\n"); +#else + uint32_t ui32Color, ui32Index; + + // + // Get the palette index and color value to use. + // + if(argc > 2) + { + ui32Index = ustrtoul(argv[1], 0, 0); + ui32Color = ustrtoul(argv[2], 0, 0); + } + else + { + UARTprintf("This command requires 2 parameters - index, color.\n"); + return(0); + } + + if(ui32Index > ((DRIVER_BPP == 8) ? 255 : 15)) + { + UARTprintf("Invalid palette index! Must be less than %d.\n", + ((DRIVER_BPP == 8) ? 256 : 16)); + return(0); + } + + UARTprintf("Setting palette entry %d to color 0x%06x.\n", ui32Index, + ui32Color); + + // + // Set the desired color. + // + DRIVER_PALETTE_SET(&ui32Color, ui32Index, 1); +#endif + + return(0); +} + +//***************************************************************************** +// +// This function implements the "image" command and draws an image at a given +// (x, y) position on the display. If no parameters are provided, the image +// is tiled across the whole display. +// +//***************************************************************************** +int +Cmd_Image(int argc, char *argv[]) +{ + int32_t i32X, i32Y, i32Width, i32Height; + + // + // Set foreground and background colors to black and white. + // + GrContextBackgroundSet(&g_sContext, g_ui32Foreground); + GrContextForegroundSet(&g_sContext, g_ui32Background); + + // + // Get the palette index and color value to use. + // + if(argc == 1) + { + UARTprintf("Tiling image across the whole display.\n"); + + // + // Get the image dimensions. + // + i32Width = (int32_t)g_pucCurrentImage[1] + + 256 * (int32_t)g_pucCurrentImage[2]; + i32Height = (int32_t)g_pucCurrentImage[3] + + 256 * (int32_t)g_pucCurrentImage[4]; + + // + // Step through each row of images. + // + for(i32Y = 0; i32Y < GrContextDpyHeightGet(&g_sContext); + i32Y += i32Height) + { + // + // Step across each row of images. + // + for(i32X = 0; i32X < GrContextDpyWidthGet(&g_sContext); + i32X += i32Width) + { + // + // Draw the next tile on the display. + // + DrawImage(&g_sContext, g_ui32Clip, g_pucCurrentImage, + i32X, i32Y); + } + } + } + else + { + // + // The command has at least 1 parameter. Make sure there are 2. + if(argc != 3) + { + UARTprintf("This command requires 2 parameters - x, y.\n"); + return(0); + } + + // + // Read the coordinates. + // + i32X = (int32_t)ustrtoul(argv[1], 0, 0); + i32Y = (int32_t)ustrtoul(argv[2], 0, 0); + + // + // Draw the image at this position. + // + DrawImage(&g_sContext, g_ui32Clip, g_pucCurrentImage, i32X, i32Y); + } + + return(0); +} + +//***************************************************************************** +// +// This function implements the "setimg" command and sets the image that +// will be used with all future calls to Cmd_Image. +// +//***************************************************************************** +int +Cmd_SetImage(int argc, char *argv[]) +{ + uint32_t ui32Index; + + // + // Get the image index to use. + // + if(argc != 2) + { + UARTprintf("This command requires 1 parameter, the image index.\n"); + return(0); + } + + // + // Get the index. + // + ui32Index = (uint32_t)ustrtoul(argv[1], 0, 0); + + // + // Check that it is valid. + // + if(ui32Index >= NUM_IMAGES) + { + UARTprintf("Image index must be less than %d!\n", NUM_IMAGES); + } + else + { + g_pucCurrentImage = g_pImages[ui32Index].pucImage; + UARTprintf("Current image is %d - %s.\n", ui32Index, + g_pImages[ui32Index].pcDesc); + } + + return(0); +} + +//***************************************************************************** +// +// This function implements the "clipimg" command and sets the number of +// pixels to clip off the left of an image when drawing as a result of all +// future calls to Cmd_Image. +// +//***************************************************************************** +int +Cmd_ClipImage(int argc, char *argv[]) +{ + // + // Were we passed any parameters? + // + if(argc == 1) + { + UARTprintf("Disabling image clipping.\n"); + g_ui32Clip = 0; + } + else if(argc == 2) + { + g_ui32Clip = (uint32_t)ustrtoul(argv[1], 0, 0); + UARTprintf("Image clipping set to %d pixels.\n", g_ui32Clip); + } + else + { + UARTprintf("This function requires either zero or 1 parameter!\n"); + } + + return(0); +} + +//***************************************************************************** +// +// This function implements the "circle" command and draws a circle in a given +// color and with a given radius on the display. If no parameters are +// provided, filled and unfilled circles are tiled across the whole display. +// +//***************************************************************************** +int +Cmd_Circle(int argc, char *argv[]) +{ + int32_t i32X, i32Y, i32R; + bool bFill; + + // + // Set the foreground and background colors. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + GrContextBackgroundSet(&g_sContext, g_ui32Background); + + // + // Have we been provided with any parameters? + // + if(argc == 1) + { + UARTprintf("Tiling circles across the whole display.\n"); + + // + // We fill the first circle. + // + bFill = true; + + // + // Set the foreground color to white. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Step through each row of circles. + // + for(i32Y = 20; i32Y <= GrContextDpyHeightGet(&g_sContext); + i32Y += 40) + { + // + // Step across each row of circles. + // + for(i32X = 20; i32X <= GrContextDpyWidthGet(&g_sContext); + i32X += 40) + { + // + // Draw the next circle on the display. + // + if(bFill) + { + GrCircleFill(&g_sContext, i32X, i32Y, 20); + } + else + { + GrCircleDraw(&g_sContext, i32X, i32Y, 20); + } + + + // + // Flip the outline/fill marker. + // + bFill = !bFill; + } + } + } + else + { + // + // The command has at least 1 parameter. Make sure there are 3. + if(argc != 4) + { + UARTprintf("This command requires 3 parameters - x, y, r.\n"); + return(0); + } + + // + // Read the coordinates. + // + i32X = (int32_t)ustrtoul(argv[1], 0, 0); + i32Y = (int32_t)ustrtoul(argv[2], 0, 0); + i32R = (int32_t)ustrtoul(argv[3], 0, 0); + + // + // Fill the circle at this position. + // + GrCircleFill(&g_sContext, i32X, i32Y, i32R); + } + + return(0); +} + + +//***************************************************************************** +// +// This function implements the "text" command and displays a string of text +// at a given screen position. +// +//***************************************************************************** +int +Cmd_Text(int argc, char *argv[]) +{ + uint32_t ui32Color; + int32_t i32X, i32Y; + bool bCenter; + char *pcString; + + // + // Set the foreground and background colors. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + GrContextBackgroundSet(&g_sContext, g_ui32Background); + + // + // Set the font to be used. + // + GrContextFontSet(&g_sContext, g_psFontCmss28); + + // + // Set default values for the position and color of the string. + // + i32X = GrContextDpyWidthGet(&g_sContext) / 2; + i32Y = GrContextDpyHeightGet(&g_sContext) / 2; + ui32Color = ClrBlack; + bCenter = true; + + // + // Have we been provided with any parameters? + // + if(argc == 1) + { + // + // No parameters were provided so just show the default string in + // the middle of the display. + // + pcString = "Some Arbitrary Text"; + } + else + { + // + // The command has at least 1 parameter. This is the string so + // remember it. + // + pcString = argv[1]; + + // + // Has the X parameter been provided? + // + if(argc > 2) + { + // + // The X position has been provided. + // + i32X = (int32_t)ustrtoul(argv[2], 0, 0); + bCenter = false; + } + + // + // Has the Y parameter been provided? + // + if(argc > 3) + { + // + // The Y position has been provided. + // + i32Y = (int32_t)ustrtoul(argv[3], 0, 0); + bCenter = false; + } + } + + UARTprintf("Displaying %sstring at (%d, %d)\n", + bCenter ? "centered " : "", i32X, i32Y, ui32Color); + + // + // Draw the text.Fill the circle at this position. + // + if(bCenter) + { + GrStringDrawCentered(&g_sContext, pcString, -1, i32X, i32Y, true); + } + else + { + GrStringDraw(&g_sContext, pcString, -1, i32X, i32Y, true); + } + + return(0); +} + +//***************************************************************************** +// +// This function implements the "colbar" command and fills the screen with a +// color bar pattern. +// +//***************************************************************************** +int +Cmd_ColorBars(int argc, char *argv[]) +{ + uint32_t ui32X, ui32Width, ui32Height; + tRectangle sRect; + + // + // Determine the size of the color bar. + // + ui32Width = GrContextDpyWidthGet(&g_sContext) / NUM_COLOR_BARS; + ui32Height = GrContextDpyHeightGet(&g_sContext); + + // + // The Y coordinates for each color bar don't change. + // + sRect.i16YMin = 0; + sRect.i16YMax = (ui32Height - 1); + + for(ui32X = 0; ui32X < NUM_COLOR_BARS; ui32X++) + { + sRect.i16XMin = ui32X * ui32Width; + if(ui32X < (NUM_COLOR_BARS - 1)) + { + // + // For all but the rightmost bar, set the calculated width. + // + sRect.i16XMax = sRect.i16XMin + ui32Width - 1; + } + else + { + // + // Ensure the bars reach the right edge. This prevents any + // rounding error from leaving undrawn pixels on the right + // depending upon the screen size and number of color bars + // in use. + // + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext); + } + + GrContextForegroundSet(&g_sContext, g_pui32BarColors[ui32X]); + GrRectFill(&g_sContext, &sRect); + } + + // + // Revert to the expected foreground color. + // + GrContextForegroundSet(&g_sContext, g_ui32Foreground); + + return(0); +} + +//***************************************************************************** +// +// This function implements the "pat" command and draws the same test pattern +// that is displayed when the application starts. +// +//***************************************************************************** +int +Cmd_Pattern(int argc, char *argv[]) +{ + UARTprintf("Drawing initial test pattern.\n"); + DrawTestPattern(&g_sContext); + return(0); +} + +//***************************************************************************** +// +// This function implements the "perf" command and draws randomly positioned, +// filled rectangles for some period of time. +// +//***************************************************************************** +int +Cmd_Perf(int argc, char *argv[]) +{ + uint32_t ui32NumSeconds, ui32EndTime, ui32NumPixels; + tRectangle sRect, sRectScreen, sRectDraw; + uint32_t ui32Width, ui32Height, ui32Color, ui32X, ui32Y; + + // + // We need 1 parameter. Is it there? + // + if(argc != 2) + { + UARTprintf("This command requires one parameter!\n"); + return(0); + } + + // + // Get the required timeout. + // + ui32NumSeconds = ustrtoul(argv[1], 0, 0); + ui32NumPixels = 0; + + UARTprintf("Drawing random rectangles for %d seconds...\n", ui32NumSeconds); + + // + // When must the test end? + // + ui32EndTime = g_ui32SysTickCount + (ui32NumSeconds * SYSTICKS_PER_SECOND); + + // + // Get a rectangle representing the screen. + // + sRectScreen.i16XMin = 0; + sRectScreen.i16YMin = 0; + sRectScreen.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRectScreen.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + + // + // Loop for the required time. + // + while(g_ui32SysTickCount < ui32EndTime) + { + // + // Get some randomized parameters. + // + ui32Color = urand() & 0xFFFFFF; + ui32Width = (urand() & 0xFF) + 64; + ui32Height = (urand() & 0xFF) + 32; + ui32X = urand() & 0x1FF; + ui32Y = urand() & 0x1FF; + + sRect.i16XMin = (short)ui32X; + sRect.i16YMin = (short)ui32Y; + sRect.i16XMax = sRect.i16XMin + ui32Width; + sRect.i16YMax = sRect.i16YMin + ui32Height; + + // + // Clip the rectangle to the screen. + // + if(GrRectIntersectGet(&sRectScreen, &sRect, &sRectDraw)) + { + // + // Set the color and fill this rectangle. + // + GrContextForegroundSet(&g_sContext, ui32Color); + GrRectFill(&g_sContext, &sRectDraw); + + // + // Update our pixel count. + // + ui32NumPixels += ((sRectDraw.i16XMax - sRectDraw.i16XMin) + 1) * + ((sRectDraw.i16YMax - sRectDraw.i16YMin) + 1); + } + } + + UARTprintf("Performance test completed.\n"); + if(ui32NumSeconds) + { + // + // Recycle a couple of variables we're finished with to store the + // drawing throughput values. + // + ui32NumPixels /= ui32NumSeconds; + ui32Width = ui32NumPixels >> 20; + ui32Height = ((ui32NumPixels - (ui32Width << 20)) * 10) / (1024 * 1024); + + // + // Tell the user how fast we managed to draw pixels. + // + UARTprintf("Throughput %d.%01dMpps\n", ui32Width, ui32Height); + + // + // Calculate the number of MB per second. + // + ui32NumPixels = (ui32NumPixels * DRIVER_BPP) / 8; + ui32Width = ui32NumPixels >> 20; + ui32Height = ((ui32NumPixels - (ui32Width << 20)) * 10) / (1024 * 1024); + UARTprintf(" %d.%01dMBps\n", ui32Width, ui32Height); + } + + return(0); +} + +//***************************************************************************** +// +// A simple testcase allowing various graphics primitives to be tested. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Val; + int nStatus; + + // + // Set the PLL and system clock to the frequencies needed to allow + // generation of the required pixel clock. + // + g_ui32SysClk = MAP_SysCtlClockFreqSet(DRIVER_SYS_CLOCK_CONFIG, + DRIVER_SYS_CLOCK_FREQUENCY); + + // + // Enable GPIOA for the UART. + // + SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Set GPIO A0 and A1 as UART pins. + // + ui32Val = HWREG(GPIO_PORTA_BASE + GPIO_O_PCTL); + ui32Val &= 0xFFFFFF00; + ui32Val |= 0x00000011; + HWREG(GPIO_PORTA_BASE + GPIO_O_PCTL) = ui32Val; + + // + // Set GPIO A0 and A1 as UART. + // + GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Initialize the UART as a console for text I/O. + // + UARTStdioConfig(0, 115200, g_ui32SysClk); + + // + // Set up the system tick to run and interrupt when it times out. + // + MAP_SysTickIntEnable(); + MAP_SysTickPeriodSet(g_ui32SysClk / SYSTICKS_PER_SECOND); + MAP_SysTickEnable(); + + // + // Enable interrupts. + // + IntMasterEnable(); + + // + // Print hello message to user. + // + UARTprintf("\n\nGrLib Driver Test Tool\n\n"); + UARTprintf("Display configured for %dx%d at %dbpp.\n", + DRIVER_NAME.ui16Width, DRIVER_NAME.ui16Height, DRIVER_BPP); + UARTprintf("System clock is %dMHz\n", g_ui32SysClk / 1000000); + UARTprintf("\nEnter ""help"" for a list of supported commands\n\n"); + + // + // Initialize the display. + // + DRIVER_INIT(g_ui32SysClk); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &DRIVER_NAME); + + // + // We allow the testcase to be built such that it issues no drawing orders + // other than those requested via the command line. This can be helpful + // when bringing up a new display driver. + // +#ifndef NO_GRLIB_CALLS_ON_STARTUP + // + // Draw a test pattern on the display. + // + DrawTestPattern(&g_sContext); +#endif + + // + // Loop forever. + // + while(1) + { + // + // Print a prompt to the console. Show the CWD. + // + UARTprintf("> "); + + // + // Get a line of text from the user. + // + UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf)); + + // + // Pass the line from the user to the command processor. + // It will be parsed and valid commands executed. + // + nStatus = CmdLineProcess(g_cCmdBuf); + + // + // Handle the case of bad command. + // + if(nStatus == CMDLINE_BAD_CMD) + { + UARTprintf("Bad command!\n"); + } + + // + // Handle the case of too many arguments. + // + else if(nStatus == CMDLINE_TOO_MANY_ARGS) + { + UARTprintf("Too many arguments for command processor!\n"); + } + } +} diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp new file mode 100644 index 0000000..356394e --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\utils\cmdline.c + + + $PROJ_DIR$\grlib_driver_test.c + + + $PROJ_DIR$\images.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf new file mode 100644 index 0000000..bfef852 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// grlib_driver_test.icf - Linker configuration file for grlib_driver_test. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld new file mode 100644 index 0000000..1ab660d --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * grlib_driver_test.ld - Linker configuration file for grlib_driver_test. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct new file mode 100644 index 0000000..e10719a --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; grlib_driver_test.sct - Linker configuration file for grlib_driver_test. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt new file mode 100644 index 0000000..93d0dd9 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + grlib_driver_test + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\cmdline.c + cmdline.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\grlib_driver_test.c + grlib_driver_test.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\images.c + images.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj new file mode 100644 index 0000000..d5d739f --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + grlib_driver_test + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + grlib_driver_test + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\grlib_driver_test.bin .\rvmdk\grlib_driver_test.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + grlib_driver_test.sct + + + --entry Reset_Handler + + + + + + + + Source + + + cmdline.c + 1 + ..\..\..\..\utils\cmdline.c + + + grlib_driver_test.c + 1 + .\grlib_driver_test.c + + + images.c + 1 + .\images.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd new file mode 100644 index 0000000..443e9cd --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * grlib_driver_test_ccs.cmd - CCS linker configuration file for grlib_driver_test. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/grlib_driver_test/images.c b/boards/dk-tm4c129x/grlib_driver_test/images.c new file mode 100644 index 0000000..4a42d7c --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/images.c @@ -0,0 +1,551 @@ +//***************************************************************************** +// +// images.c - Data for the images used by the application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include "grlib/grlib.h" + +//***************************************************************************** +// +// The image of the TI logo. +// +//***************************************************************************** +const unsigned char g_pucLogo[] = +{ + IMAGE_FMT_4BPP_COMP, + 80, 0, + 75, 0, + + 15, + 0x00, 0x00, 0x00, + 0x02, 0x02, 0x0f, + 0x06, 0x05, 0x27, + 0x09, 0x07, 0x3b, + 0x0c, 0x09, 0x4c, + 0x0d, 0x0a, 0x56, + 0x10, 0x0c, 0x68, + 0x13, 0x0f, 0x7a, + 0x15, 0x10, 0x89, + 0x17, 0x11, 0x95, + 0x19, 0x14, 0xa5, + 0x1c, 0x16, 0xb6, + 0x1e, 0x18, 0xc7, + 0x22, 0x1a, 0xdc, + 0x22, 0x1b, 0xe3, + 0x24, 0x1c, 0xed, + + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x04, 0xfe, 0x13, 0xee, 0xee, + 0xee, 0xe9, 0xef, 0xd1, 0x07, 0x07, 0xc2, 0x77, 0x29, 0x04, 0xff, 0xff, + 0xff, 0xe9, 0xff, 0x3c, 0xff, 0xd1, 0x07, 0x07, 0x77, 0x29, 0x04, 0xff, + 0x23, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x07, 0x07, 0xc2, 0x77, 0x29, + 0x04, 0xff, 0xff, 0xff, 0xe9, 0xff, 0x2e, 0xff, 0xd1, 0x05, 0x01, 0x07, + 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x02, + 0x0e, 0x6f, 0xdc, 0xdc, 0xf7, 0x07, 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff, + 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x02, 0x0e, 0xaf, 0xff, 0xff, 0xf5, 0x07, + 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x02, + 0x0e, 0xdf, 0xff, 0xff, 0xf2, 0x07, 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff, + 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x01, 0x73, 0x01, 0xc5, 0x07, 0xa7, 0x00, + 0x04, 0x29, 0x11, 0xae, 0x04, 0x03, 0x99, 0xa0, 0x07, 0xbf, 0x72, 0x04, + 0xc5, 0x29, 0x11, 0xff, 0xff, 0xd1, 0x01, 0x08, 0x99, 0x76, 0x70, 0x07, + 0xbf, 0x72, 0x04, 0x29, 0x11, 0xff, 0x20, 0xff, 0xd1, 0x01, 0x07, 0xcb, + 0xbb, 0xbc, 0x40, 0xe1, 0x07, 0xbf, 0x72, 0x04, 0xff, 0xff, 0xff, 0xe9, + 0x1e, 0xff, 0xff, 0xd1, 0x07, 0x07, 0x77, 0x29, 0x04, 0x11, 0xff, 0xff, + 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x07, 0xe1, 0x07, 0x77, 0x29, 0x04, 0xff, + 0xff, 0xff, 0xe9, 0x00, 0xff, 0xff, 0xe6, 0x45, 0x63, 0x00, 0x26, 0x55, + 0x2b, 0x55, 0x64, 0xda, 0x55, 0xe9, 0x51, 0x04, 0xd4, 0x03, 0x00, 0x00, + 0x04, 0xff, 0xff, 0xff, 0xe9, 0xd2, 0x03, 0xf7, 0x00, 0x6f, 0xff, 0xff, + 0xf9, 0xda, 0x62, 0x63, 0xf2, 0x04, 0xd4, 0x00, 0x00, 0x04, 0x54, 0x22, + 0x00, 0xf3, 0x00, 0x9f, 0xff, 0xff, 0xf6, 0x00, 0x8f, 0xb1, 0x74, 0xf2, + 0x04, 0xd4, 0x00, 0x00, 0x04, 0x54, 0x8e, 0x22, 0xd1, 0x00, 0xcf, 0x0a, + 0xd9, 0x62, 0xf2, 0xc6, 0x04, 0xd4, 0x00, 0x00, 0x04, 0x54, 0x22, 0xc0, + 0x45, 0x01, 0x01, 0xd1, 0x01, 0xef, 0x74, 0xf2, 0x04, 0x8c, 0xd4, 0x00, + 0x00, 0x04, 0x54, 0x22, 0x90, 0x03, 0xb6, 0x01, 0xb0, 0xda, 0x62, 0xf2, + 0x04, 0xd4, 0x00, 0x32, 0x00, 0x04, 0x4d, 0x11, 0x60, 0x06, 0x01, 0x90, + 0xd8, 0xda, 0x62, 0xf2, 0x04, 0xd4, 0x00, 0x00, 0x04, 0xcb, 0x4d, 0x11, + 0x30, 0x09, 0x01, 0x50, 0xda, 0x62, 0x62, 0xf2, 0x04, 0xd4, 0x00, 0x00, + 0x04, 0x4d, 0xff, 0x0b, 0xff, 0xfe, 0x10, 0x0c, 0x01, 0x30, 0xda, 0x62, + 0x62, 0xf2, 0x04, 0xd4, 0x00, 0x00, 0x04, 0x4d, 0xda, 0x00, 0xaa, 0xb9, + 0x00, 0x1e, 0xff, 0xff, 0xfe, 0x10, 0x0b, 0x1a, 0xba, 0xaa, 0xdf, 0x62, + 0xf2, 0x04, 0xd4, 0x1a, 0x00, 0x00, 0x04, 0x62, 0x41, 0x80, 0x49, 0x2f, + 0x12, 0xff, 0xff, 0xfb, 0x11, 0x01, 0xef, 0x62, 0xf3, 0xc6, 0x04, 0xd4, + 0x00, 0x00, 0x04, 0x62, 0x41, 0x60, 0x85, 0x49, 0x6f, 0xff, 0xff, 0xf8, + 0x6f, 0xf4, 0x04, 0xc4, 0xd4, 0x5e, 0xff, 0xff, 0x30, 0x49, 0x9f, 0xff, + 0x2b, 0xff, 0xf6, 0x11, 0x06, 0x6b, 0xf7, 0x04, 0xd4, 0x11, 0x00, 0x00, + 0x04, 0x5b, 0xff, 0xfe, 0x10, 0x49, 0x0a, 0xbf, 0xff, 0xff, 0xf3, 0x11, + 0x09, 0x6b, 0xfc, 0x86, 0x02, 0x05, 0x55, 0x55, 0x55, 0xe9, 0xd1, 0x38, + 0x90, 0x5b, 0xff, 0xfb, 0x01, 0x01, 0xef, 0xff, 0xff, 0x55, 0xd1, 0x11, + 0x0c, 0x6c, 0x40, 0x69, 0x0d, 0x14, 0xd5, 0x7c, 0x4a, 0xf9, 0x01, 0x03, + 0x01, 0xb0, 0x19, 0x56, 0x1f, 0x1c, 0xc0, 0x69, 0x09, 0x06, 0xc6, 0xf6, + 0xaa, 0x01, 0x06, 0x01, 0x80, 0x19, 0x3f, 0x1c, 0xfa, 0xb0, 0x69, 0x05, + 0x06, 0xc6, 0xf4, 0x02, 0x22, 0x00, 0x41, 0x08, 0x01, 0x50, 0x01, 0x22, + 0x20, 0x7f, 0x1d, 0x06, 0xb4, 0x00, 0x00, 0x00, 0xcf, 0x05, 0x6d, 0xff, + 0x04, 0xfe, 0xff, 0xfe, 0x10, 0x0b, 0x01, 0x20, 0x0c, 0x81, 0x3f, 0xff, + 0xf9, 0x00, 0x00, 0x00, 0x5f, 0x8f, 0x80, 0x46, 0xfc, 0x00, 0x1f, 0xff, + 0xff, 0xfe, 0x10, 0x40, 0x1e, 0x3f, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x08, + 0xc0, 0x8f, 0x46, 0xfa, 0x00, 0x3f, 0xff, 0xff, 0xfb, 0xc0, 0xda, 0x2e, + 0xf9, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xc0, 0x87, 0x3d, 0xf6, 0x00, 0x5f, + 0xff, 0xff, 0xf8, 0x20, 0x00, 0x6f, 0x47, 0xff, 0xf9, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x08, 0x87, 0x3d, 0xf3, 0x00, 0x9f, 0xff, 0x30, 0xff, 0xf6, + 0xda, 0x36, 0xf9, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x6f, 0x7f, 0x34, + 0xf1, 0x00, 0xcf, 0x18, 0xff, 0xff, 0xf3, 0xda, 0x3e, 0xf9, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x05, 0x7f, 0x34, 0xc0, 0x01, 0x0c, 0xef, 0xff, + 0xff, 0xd0, 0xda, 0x3e, 0xf9, 0x00, 0x2c, 0x00, 0x00, 0xe9, 0x6f, 0x77, + 0x2b, 0x90, 0x02, 0x90, 0x01, 0xb0, 0x03, 0x5f, 0xff, 0xff, 0xf9, 0x00, + 0x2c, 0x00, 0x00, 0xe9, 0x09, 0x6f, 0x23, 0x60, 0x06, 0xb0, 0x01, 0x80, + 0xda, 0x46, 0xf9, 0x00, 0x00, 0x00, 0x99, 0xe9, 0x01, 0xdf, 0x67, 0x1a, + 0x30, 0x09, 0x01, 0x61, 0x50, 0xda, 0x4e, 0xf9, 0x00, 0x00, 0x00, 0xe9, + 0x31, 0x00, 0x7f, 0x67, 0x19, 0xfe, 0x10, 0x0b, 0x01, 0x61, 0x20, 0xda, + 0x4e, 0xf9, 0x00, 0x00, 0x00, 0xe9, 0x30, 0x00, 0x2f, 0x67, 0x19, 0xfc, + 0x00, 0x1e, 0xff, 0x08, 0xff, 0xfd, 0x10, 0x0c, 0x67, 0xff, 0xff, 0xf9, + 0x13, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x0a, 0x67, 0x5b, 0x00, 0x3f, 0xee, + 0xee, 0xfb, 0x00, 0x05, 0xee, 0xed, 0x84, 0x6f, 0xf9, 0x00, 0x00, 0x00, + 0xe9, 0x00, 0x05, 0xc0, 0x77, 0x29, 0xf6, 0x00, 0x11, 0x11, 0x11, 0x11, + 0x08, 0x00, 0x00, 0x01, 0x04, 0x57, 0xf9, 0x00, 0x00, 0x44, 0x00, 0xe9, + 0x00, 0x00, 0xcf, 0x6f, 0xff, 0xff, 0x52, 0xf2, 0x5e, 0x06, 0x5e, 0xc8, + 0x42, 0x6e, 0x6f, 0x85, 0x6a, 0xfc, 0x42, 0x25, 0xdf, 0x29, 0xe1, 0x5e, + 0x42, 0x0a, 0x5a, 0xff, 0xff, 0xfd, 0x72, 0x7e, 0x00, 0x21, 0x00, 0x0c, + 0x6a, 0x90, 0x00, 0x00, 0x1c, 0x29, 0x63, 0xc0, 0x5f, 0x5a, 0xff, 0xfc, + 0x40, 0x86, 0x41, 0x50, 0x02, 0x01, 0xf8, 0x01, 0x01, 0xef, 0xff, 0xff, + 0x51, 0xc0, 0x46, 0x1e, 0x59, 0xff, 0xfb, 0x20, 0x8e, 0x84, 0x4b, 0x3f, + 0xff, 0xff, 0x90, 0x02, 0x5f, 0xff, 0x20, 0xff, 0xe1, 0x3e, 0x4f, 0xff, + 0xff, 0xff, 0xfd, 0x62, 0x30, 0x96, 0x54, 0x01, 0x6b, 0xb5, 0x0b, 0x0b, + 0x10, 0xff, 0xff, 0xf6, 0x36, 0x7f, 0xff, 0xff, 0xff, 0x74, 0x70, 0x9e, + 0x5e, 0x1d, 0x03, 0x27, 0x00, 0x00, 0x0e, 0x9f, 0xff, 0xff, 0xd2, 0x07, + 0xbf, 0x1d, 0xbf, 0x00, 0xff, 0xff, 0xfd, 0x96, 0x54, 0x33, 0x33, 0x33, + 0x03, 0x33, 0x32, 0xcf, 0xff, 0xfc, 0x10, 0x07, 0xbf, 0x86, 0x75, 0x4f, + 0xff, 0xff, 0xff, 0xe9, 0xd4, 0xb0, 0xee, 0x07, 0x07, 0x76, 0x0b, 0x02, + 0xe2, 0xc1, 0xfc, 0xee, 0x07, 0x07, 0x77, 0x05, 0x01, 0xe9, 0xd3, 0xe1, + 0xe0, 0x07, 0x07, 0x77, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xdc, 0xe9, 0xd2, + 0x40, 0x07, 0x07, 0x77, 0x00, 0x6f, 0x1b, 0xff, 0xff, 0xff, 0xe9, 0xd1, + 0xf9, 0x07, 0x07, 0x81, 0x77, 0x00, 0x00, 0x1d, 0xff, 0xff, 0xff, 0xe9, + 0xb8, 0xd1, 0xf2, 0x07, 0x07, 0x77, 0x00, 0x00, 0x06, 0x1b, 0xff, 0xff, + 0xff, 0xe9, 0xd1, 0x90, 0x07, 0x07, 0x80, 0x77, 0x00, 0x00, 0x01, 0xdf, + 0xff, 0xff, 0xff, 0x8f, 0xe9, 0xff, 0xff, 0x40, 0x07, 0x07, 0x77, 0x29, + 0x08, 0x6f, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xfe, 0x10, 0xf0, 0x07, 0x07, + 0x77, 0x29, 0x0c, 0xff, 0xff, 0xff, 0x9e, 0xe9, 0xff, 0xfb, 0x07, 0x07, + 0x77, 0x2a, 0x03, 0x13, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xfb, 0x07, 0x07, + 0xc2, 0x77, 0x2b, 0x8f, 0xff, 0xff, 0xff, 0xe9, 0xfb, 0xf0, 0x07, 0x07, + 0x77, 0x2b, 0x0a, 0xff, 0xff, 0xff, 0xbc, 0xe9, 0xfc, 0x07, 0x07, 0x77, + 0x2c, 0xcf, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x07, 0x07, + 0xc2, 0x77, 0x2b, 0x0c, 0xff, 0xff, 0xff, 0xe9, 0x30, 0xf0, 0x07, 0x07, + 0x77, 0x2c, 0xaf, 0xff, 0xff, 0xff, 0x1e, 0xff, 0xff, 0x60, 0x07, 0x07, + 0x77, 0x2c, 0x05, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x07, 0x07, + 0xc0, 0x77, 0x2d, 0x18, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf0, 0x07, 0x07, + 0x77, 0x2e, 0x14, 0x79, 0xa9, 0x86, 0x7f, 0x20, 0x07, 0x07, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, +}; + +const unsigned char g_pucTest32x32x1Comp[] = +{ + IMAGE_FMT_1BPP_COMP, + 32, 0, + 32, 0, + + 0x80, 0x02, 0x3f, 0xff, 0xff, 0xfc, 0x5f, 0xff, 0xff, 0x00, 0xfa, 0x6f, + 0xff, 0xff, 0xf6, 0x77, 0xff, 0xff, 0x00, 0xee, 0x7b, 0xff, 0xff, 0xde, + 0x7d, 0xff, 0xff, 0x00, 0xbe, 0x7e, 0xff, 0xff, 0x7e, 0x7f, 0x7f, 0xfe, + 0x00, 0xfe, 0x7f, 0xbf, 0xfd, 0xfe, 0x7f, 0xdf, 0xfb, 0x00, 0xfe, 0x7f, + 0xef, 0xf7, 0xfe, 0x7f, 0xf7, 0xef, 0x00, 0xfe, 0x7f, 0xfb, 0xdf, 0xfe, + 0x7f, 0xfd, 0xbf, 0x0f, 0xfe, 0x7f, 0xfe, 0x7f, 0xe2, 0xa4, 0x62, 0x22, + 0x00, 0xef, 0xf7, 0xfe, 0x7f, 0xdf, 0xfb, 0xfe, 0x7f, 0x00, 0xbf, 0xfd, + 0xfe, 0x7f, 0x7f, 0xfe, 0xfe, 0x7e, 0x00, 0xff, 0xff, 0x7e, 0x7d, 0xff, + 0xff, 0xbe, 0x7b, 0x00, 0xff, 0xff, 0xde, 0x77, 0xff, 0xff, 0xee, 0x6f, + 0x00, 0xff, 0xff, 0xf6, 0x5f, 0xff, 0xff, 0xfa, 0x3f, 0x00, 0xff, 0xff, + 0xfc, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char g_pucTest32x32x1Raw[] = +{ + IMAGE_FMT_1BPP_UNCOMP, + 32, 0, + 32, 0, + + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x5f, 0xff, 0xff, 0xfa, + 0x6f, 0xff, 0xff, 0xf6, 0x77, 0xff, 0xff, 0xee, 0x7b, 0xff, 0xff, 0xde, + 0x7d, 0xff, 0xff, 0xbe, 0x7e, 0xff, 0xff, 0x7e, 0x7f, 0x7f, 0xfe, 0xfe, + 0x7f, 0xbf, 0xfd, 0xfe, 0x7f, 0xdf, 0xfb, 0xfe, 0x7f, 0xef, 0xf7, 0xfe, + 0x7f, 0xf7, 0xef, 0xfe, 0x7f, 0xfb, 0xdf, 0xfe, 0x7f, 0xfd, 0xbf, 0xfe, + 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfd, 0xbf, 0xfe, + 0x7f, 0xfb, 0xdf, 0xfe, 0x7f, 0xf7, 0xef, 0xfe, 0x7f, 0xef, 0xf7, 0xfe, + 0x7f, 0xdf, 0xfb, 0xfe, 0x7f, 0xbf, 0xfd, 0xfe, 0x7f, 0x7f, 0xfe, 0xfe, + 0x7e, 0xff, 0xff, 0x7e, 0x7d, 0xff, 0xff, 0xbe, 0x7b, 0xff, 0xff, 0xde, + 0x77, 0xff, 0xff, 0xee, 0x6f, 0xff, 0xff, 0xf6, 0x5f, 0xff, 0xff, 0xfa, + 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char g_pucTest32x32x4Comp[] = +{ + IMAGE_FMT_4BPP_COMP, + 32, 0, + 32, 0, + + 4, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, + 0x80, 0x80, 0x00, + 0x00, 0xff, 0x00, + 0xff, 0xff, 0xff, + + 0xc6, 0x07, 0x06, 0x44, 0x44, 0x44, 0xe9, 0xd4, 0x44, 0x0c, 0x44, 0x00, + 0x02, 0x04, 0x7f, 0x31, 0x40, 0x10, 0x30, 0x02, 0x20, 0x07, 0x01, 0x01, + 0x10, 0x02, 0x22, 0x45, 0x04, 0x0f, 0x44, 0x40, 0x11, 0x81, 0x20, 0x0f, + 0x25, 0x44, 0x01, 0x82, 0x22, 0x04, 0x0f, 0x11, 0x83, 0x66, 0x20, 0x0f, + 0x84, 0x22, 0x04, 0x0f, 0x84, 0x20, 0xcd, 0x0f, 0x04, 0x22, 0x04, 0x0e, + 0x85, 0x20, 0x0e, 0x9b, 0x05, 0x22, 0x04, 0x0d, 0x86, 0x20, 0x0d, 0x06, + 0x37, 0x22, 0x04, 0x0c, 0x87, 0x20, 0x0c, 0x87, 0x87, 0x98, 0x05, 0x03, + 0x30, 0x07, 0x0b, 0x33, 0x33, 0x01, 0xc6, 0x07, 0x0a, 0x33, 0x33, 0x30, + 0x07, 0x0b, 0x33, 0x31, 0x33, 0x01, 0x07, 0x0a, 0x33, 0x33, 0x30, 0x07, + 0x8c, 0x0b, 0x33, 0x33, 0x01, 0x06, 0x0b, 0x33, 0x33, 0x63, 0x30, 0x05, + 0x0d, 0x33, 0x33, 0x01, 0x04, 0x0d, 0x18, 0x33, 0x33, 0x30, 0x03, 0x0f, + 0x33, 0x33, 0x01, 0xc7, 0x02, 0x0f, 0x33, 0x33, 0x30, 0x01, 0x0f, 0x4a, + 0x18, 0x01, 0x10, 0x02, 0x0f, 0x42, 0x30, 0x10, 0x00, 0xc7, 0x0f, 0x43, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, +}; + +const unsigned char g_pucTest32x32x4Raw[] = +{ + IMAGE_FMT_4BPP_UNCOMP, + 32, 0, + 32, 0, + + 4, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, + 0x80, 0x80, 0x00, + 0x00, 0xff, 0x00, + 0xff, 0xff, 0xff, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, + 0x02, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x10, + 0x02, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x10, + 0x02, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x10, + 0x02, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x04, 0x44, 0x44, 0x40, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x44, 0x44, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x04, 0x40, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x03, 0x30, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x33, 0x33, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x03, 0x33, 0x33, 0x30, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x11, 0x10, + 0x02, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x10, + 0x02, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x10, + 0x02, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x10, + 0x02, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x10, + 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char g_pucTest32x32x8Comp[] = +{ + IMAGE_FMT_8BPP_COMP, + 32, 0, + 32, 0, + + 63, + 0x00, 0x00, 0x00, + 0xff, 0x00, 0x0f, + 0xff, 0x00, 0x10, + 0xff, 0x0d, 0x00, + 0xff, 0x0e, 0x00, + 0xff, 0x00, 0x39, + 0xff, 0x00, 0x3a, + 0xff, 0x00, 0x6d, + 0xff, 0x00, 0x6e, + 0xff, 0x3c, 0x00, + 0xff, 0x3d, 0x00, + 0x00, 0x00, 0xff, + 0xff, 0x00, 0xa4, + 0xff, 0x00, 0xa5, + 0x28, 0x00, 0xff, + 0x29, 0x00, 0xff, + 0x65, 0x00, 0xff, + 0x66, 0x00, 0xff, + 0xff, 0x00, 0xd6, + 0xff, 0x00, 0xd7, + 0xa6, 0x00, 0xff, + 0xa7, 0x00, 0xff, + 0xff, 0x77, 0x00, + 0x00, 0x25, 0xff, + 0xff, 0x78, 0x00, + 0x00, 0x26, 0xff, + 0xe0, 0x00, 0xff, + 0xe1, 0x00, 0xff, + 0xff, 0x00, 0xfa, + 0xff, 0x00, 0xfb, + 0x00, 0x5d, 0xff, + 0x00, 0x5e, 0xff, + 0xff, 0xb4, 0x00, + 0xff, 0xb5, 0x00, + 0x0b, 0xff, 0x00, + 0x0c, 0xff, 0x00, + 0x00, 0xff, 0x11, + 0x33, 0xff, 0x00, + 0x34, 0xff, 0x00, + 0x67, 0xff, 0x00, + 0x68, 0xff, 0x00, + 0xff, 0xe7, 0x00, + 0xff, 0xe8, 0x00, + 0x9e, 0xff, 0x00, + 0x9f, 0xff, 0x00, + 0x00, 0x9b, 0xff, + 0x00, 0x9c, 0xff, + 0x00, 0xff, 0x3d, + 0x00, 0xff, 0x3e, + 0xd0, 0xff, 0x00, + 0xd1, 0xff, 0x00, + 0xf6, 0xff, 0x00, + 0xf7, 0xff, 0x00, + 0x00, 0xff, 0x75, + 0x00, 0xff, 0x76, + 0x00, 0xd3, 0xff, + 0x00, 0xd4, 0xff, + 0x00, 0xff, 0xaf, + 0x00, 0xff, 0xb0, + 0x00, 0xff, 0xe1, + 0x00, 0xff, 0xe2, + 0x00, 0xfb, 0xff, + 0x00, 0xfc, 0xff, + 0xff, 0xff, 0xff, + + 0x00, 0x0b, 0x0f, 0x11, 0x15, 0x1b, 0x1d, 0x12, 0x0d, 0x00, 0x07, 0x06, + 0x02, 0x03, 0x09, 0x18, 0x20, 0x2a, 0x00, 0x34, 0x32, 0x2b, 0x27, 0x26, + 0x23, 0x24, 0x30, 0x00, 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x17, + 0x00, 0x0b, 0x0f, 0x10, 0x14, 0x1a, 0x1c, 0x12, 0x0d, 0x00, 0x08, 0x06, + 0x02, 0x04, 0x09, 0x16, 0x21, 0x29, 0x14, 0x34, 0x32, 0x2c, 0x04, 0x39, + 0x03, 0x19, 0x0b, 0x10, 0x0f, 0x11, 0x15, 0x07, 0x16, 0x21, 0x2a, 0x33, + 0x80, 0x02, 0x22, 0x24, 0x2f, 0x36, 0x39, 0x3c, 0x3d, 0x00, 0x38, 0x2d, + 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, 0x00, 0x1b, 0x1c, 0x12, 0x0c, 0x08, + 0x05, 0x01, 0x04, 0x40, 0x0a, 0x03, 0x2b, 0x27, 0x25, 0x23, 0x24, 0x30, + 0x05, 0x36, 0x3a, 0x3c, 0x3e, 0x37, 0x05, 0x1a, 0x02, 0x04, 0x06, 0x02, + 0x03, 0x09, 0x18, 0x01, 0x31, 0x2b, 0x20, 0x27, 0x26, 0x02, 0x39, 0x3b, + 0x3e, 0x38, 0x2d, 0x05, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x02, 0x0d, 0x01, + 0x50, 0x04, 0x03, 0x32, 0x05, 0x3a, 0x3c, 0x3e, 0x38, 0x54, 0x2e, 0x02, + 0x10, 0x04, 0x05, 0x02, 0x20, 0x2a, 0x11, 0x34, 0x32, 0x2c, 0x02, 0x2f, + 0x36, 0x39, 0x01, 0x10, 0x2d, 0x1e, 0x17, 0x06, 0x07, 0x05, 0x01, 0x03, + 0x01, 0x09, 0x16, 0x21, 0x2a, 0x34, 0x31, 0x2b, 0x02, 0x08, 0x30, 0x36, + 0x3a, 0x3b, 0x02, 0x19, 0x0b, 0x0f, 0x11, 0x11, 0x15, 0x1b, 0x01, 0x3f, + 0x3f, 0x3f, 0xe9, 0x04, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, + 0x01, 0x36, 0x39, 0x3b, 0x3d, 0x37, 0x2d, 0x1f, 0x01, 0x4c, 0x10, 0x01, + 0x13, 0x0c, 0x07, 0x07, 0x3b, 0x3e, 0x13, 0x38, 0x2d, 0x1e, 0x05, 0x12, + 0x0d, 0x07, 0x06, 0x0e, 0x3a, 0x3c, 0x3e, 0x37, 0x07, 0x07, 0x07, 0x36, + 0x08, 0x3a, 0x3b, 0x3e, 0x38, 0x03, 0x11, 0x15, 0x1a, 0xe0, 0x07, 0x07, + 0x06, 0x17, 0x0b, 0x0f, 0x10, 0x15, 0x75, 0x1b, 0x07, 0x07, 0x06, 0x19, + 0x02, 0x1a, 0x07, 0x81, 0x07, 0x00, 0x36, 0x39, 0x3b, 0x3e, 0x37, 0x07, + 0xc0, 0x07, 0x07, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x2c, 0x1e, 0x17, + 0x02, 0x1b, 0x01, 0x46, 0x3f, 0x3f, 0x40, 0x3f, 0xe9, 0x3f, 0x3f, 0x36, + 0x39, 0x3b, 0x3e, 0x08, 0x37, 0x2d, 0x1e, 0x19, 0x02, 0x1a, 0x1c, 0x12, + 0x60, 0x0c, 0x07, 0x06, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x38, 0x1e, 0x17, + 0x07, 0x07, 0x07, 0x3e, 0x37, 0x2d, 0x2e, 0x1e, 0x19, 0x01, 0x14, 0x07, + 0x07, 0x02, 0x3c, 0x83, 0x06, 0x15, 0x1b, 0x1c, 0x12, 0x0d, 0x07, 0x05, + 0x1b, 0x35, 0x3a, 0x3b, 0x07, 0x01, 0x0c, 0x07, 0x05, 0x2b, 0x36, 0x39, + 0x05, 0x0e, 0x03, 0x0d, 0x07, 0x06, 0x0e, 0x3a, 0x3c, 0x3e, 0x38, 0x07, + 0x07, 0x07, 0x36, 0x21, 0x3a, 0x3b, 0x01, 0x1f, 0x19, 0x0b, 0x0f, 0x04, + 0x00, 0x08, 0x05, 0x02, 0x04, 0x09, 0x18, 0x20, 0x2a, 0x00, 0x33, 0x32, + 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, 0x14, 0x36, 0x3a, 0x3c, 0x01, 0x1e, + 0x02, 0x14, 0x1a, 0xa2, 0x03, 0x01, 0x01, 0x21, 0x2a, 0x34, 0x01, 0x25, + 0x94, 0x02, 0x39, 0x3b, 0x06, 0x15, 0x01, 0x0c, 0x08, 0x0b, 0x06, 0x02, + 0x04, 0x0a, 0x02, 0x31, 0x07, 0x07, 0x81, 0x01, 0x0d, 0x08, 0x05, 0x02, + 0x04, 0x09, 0x02, 0x04, 0x32, 0x2c, 0x27, 0x26, 0x22, 0x01, 0x3a, 0x3b, + 0x05, 0x3d, 0x37, 0x2d, 0x1e, 0x17, 0x02, 0x1b, 0x06, 0x00, 0x16, 0x20, + 0x2a, 0x33, 0x32, 0x2b, 0x28, 0x26, 0x4a, 0x23, 0x02, 0x3c, 0x3e, 0x01, + 0x19, 0x02, 0x1a, 0xa0, 0x02, 0x06, 0x01, 0x18, 0x21, 0x2a, 0x34, 0x32, + 0x0a, 0x2c, 0x28, 0x25, 0x22, 0x02, 0x3b, 0x05, 0x11, 0xa2, 0x06, 0x03, + 0x04, 0x2b, 0x27, 0x26, 0x03, 0x3c, 0xa0, 0x01, 0x1f, 0x01, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x48, 0x0c, 0x01, 0x04, 0x0a, 0x01, 0x33, 0x32, 0x2c, + 0x10, 0x27, 0x26, 0x23, 0x01, 0x39, 0x3b, 0x3d, 0x37, 0x00, 0x2d, 0x1e, + 0x19, +}; + +const unsigned char g_pucTest32x32x8Raw[] = +{ + IMAGE_FMT_8BPP_UNCOMP, + 32, 0, + 32, 0, + + 63, + 0x00, 0x00, 0x00, + 0xff, 0x00, 0x0f, + 0xff, 0x00, 0x10, + 0xff, 0x0d, 0x00, + 0xff, 0x0e, 0x00, + 0xff, 0x00, 0x39, + 0xff, 0x00, 0x3a, + 0xff, 0x00, 0x6d, + 0xff, 0x00, 0x6e, + 0xff, 0x3c, 0x00, + 0xff, 0x3d, 0x00, + 0x00, 0x00, 0xff, + 0xff, 0x00, 0xa4, + 0xff, 0x00, 0xa5, + 0x28, 0x00, 0xff, + 0x29, 0x00, 0xff, + 0x65, 0x00, 0xff, + 0x66, 0x00, 0xff, + 0xff, 0x00, 0xd6, + 0xff, 0x00, 0xd7, + 0xa6, 0x00, 0xff, + 0xa7, 0x00, 0xff, + 0xff, 0x77, 0x00, + 0x00, 0x25, 0xff, + 0xff, 0x78, 0x00, + 0x00, 0x26, 0xff, + 0xe0, 0x00, 0xff, + 0xe1, 0x00, 0xff, + 0xff, 0x00, 0xfa, + 0xff, 0x00, 0xfb, + 0x00, 0x5d, 0xff, + 0x00, 0x5e, 0xff, + 0xff, 0xb4, 0x00, + 0xff, 0xb5, 0x00, + 0x0b, 0xff, 0x00, + 0x0c, 0xff, 0x00, + 0x00, 0xff, 0x11, + 0x33, 0xff, 0x00, + 0x34, 0xff, 0x00, + 0x67, 0xff, 0x00, + 0x68, 0xff, 0x00, + 0xff, 0xe7, 0x00, + 0xff, 0xe8, 0x00, + 0x9e, 0xff, 0x00, + 0x9f, 0xff, 0x00, + 0x00, 0x9b, 0xff, + 0x00, 0x9c, 0xff, + 0x00, 0xff, 0x3d, + 0x00, 0xff, 0x3e, + 0xd0, 0xff, 0x00, + 0xd1, 0xff, 0x00, + 0xf6, 0xff, 0x00, + 0xf7, 0xff, 0x00, + 0x00, 0xff, 0x75, + 0x00, 0xff, 0x76, + 0x00, 0xd3, 0xff, + 0x00, 0xd4, 0xff, + 0x00, 0xff, 0xaf, + 0x00, 0xff, 0xb0, + 0x00, 0xff, 0xe1, + 0x00, 0xff, 0xe2, + 0x00, 0xfb, 0xff, + 0x00, 0xfc, 0xff, + 0xff, 0xff, 0xff, + + 0x0b, 0x0f, 0x11, 0x15, 0x1b, 0x1d, 0x12, 0x0d, 0x07, 0x06, 0x02, 0x03, + 0x09, 0x18, 0x20, 0x2a, 0x34, 0x32, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, + 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x14, + 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x06, 0x02, 0x04, 0x09, 0x16, 0x21, 0x29, + 0x34, 0x32, 0x2c, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e, + 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d, + 0x08, 0x06, 0x02, 0x04, 0x09, 0x16, 0x21, 0x2a, 0x33, 0x32, 0x2c, 0x27, + 0x26, 0x22, 0x24, 0x2f, 0x36, 0x39, 0x3c, 0x3d, 0x38, 0x2d, 0x1e, 0x17, + 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0c, 0x08, 0x05, 0x01, 0x04, + 0x0a, 0x16, 0x21, 0x2a, 0x33, 0x32, 0x2b, 0x27, 0x25, 0x23, 0x24, 0x30, + 0x36, 0x3a, 0x3c, 0x3e, 0x37, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, + 0x1a, 0x1c, 0x12, 0x0c, 0x08, 0x06, 0x02, 0x03, 0x09, 0x18, 0x21, 0x2a, + 0x33, 0x31, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e, + 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d, + 0x08, 0x06, 0x02, 0x04, 0x09, 0x18, 0x21, 0x2a, 0x33, 0x32, 0x2b, 0x27, + 0x26, 0x23, 0x24, 0x30, 0x36, 0x3a, 0x3c, 0x3e, 0x38, 0x2e, 0x1e, 0x19, + 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04, + 0x09, 0x18, 0x20, 0x2a, 0x34, 0x32, 0x2c, 0x27, 0x26, 0x23, 0x24, 0x2f, + 0x36, 0x39, 0x3c, 0x3e, 0x38, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, + 0x1a, 0x1c, 0x12, 0x0d, 0x07, 0x05, 0x01, 0x03, 0x09, 0x16, 0x21, 0x2a, + 0x34, 0x31, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x3a, 0x3b, 0x3e, + 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x15, 0x1b, 0x1c, 0x12, 0x0d, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x39, 0x3b, 0x3d, 0x37, 0x2d, 0x1f, 0x19, + 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x13, 0x0c, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x39, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x3a, 0x3c, 0x3e, + 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x19, + 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x3a, 0x3b, 0x3e, + 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x39, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, + 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x39, 0x3b, 0x3e, + 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x17, + 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x14, + 0x1a, 0x1c, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3c, 0x3e, + 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x35, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, + 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x36, 0x39, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0e, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3c, 0x3e, + 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0e, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1f, 0x19, + 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04, + 0x09, 0x18, 0x20, 0x2a, 0x33, 0x32, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, + 0x36, 0x3a, 0x3c, 0x3e, 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x14, + 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x01, 0x04, 0x09, 0x18, 0x21, 0x2a, + 0x34, 0x32, 0x2b, 0x27, 0x25, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e, + 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0c, + 0x08, 0x06, 0x02, 0x04, 0x0a, 0x18, 0x21, 0x2a, 0x34, 0x31, 0x2b, 0x27, + 0x25, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x19, + 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04, + 0x09, 0x18, 0x21, 0x2a, 0x34, 0x32, 0x2c, 0x27, 0x26, 0x22, 0x24, 0x30, + 0x36, 0x3a, 0x3b, 0x3d, 0x37, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04, 0x09, 0x16, 0x20, 0x2a, + 0x33, 0x32, 0x2b, 0x28, 0x26, 0x23, 0x24, 0x30, 0x36, 0x3a, 0x3c, 0x3e, + 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, + 0x08, 0x06, 0x02, 0x04, 0x09, 0x18, 0x21, 0x2a, 0x34, 0x32, 0x2c, 0x28, + 0x25, 0x22, 0x24, 0x30, 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, + 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x06, 0x02, 0x03, + 0x09, 0x18, 0x21, 0x2a, 0x34, 0x32, 0x2b, 0x27, 0x26, 0x22, 0x24, 0x30, + 0x36, 0x3a, 0x3c, 0x3e, 0x37, 0x2d, 0x1f, 0x19, 0x0b, 0x0f, 0x10, 0x15, + 0x1b, 0x1c, 0x12, 0x0c, 0x08, 0x06, 0x02, 0x04, 0x0a, 0x18, 0x21, 0x2a, + 0x33, 0x32, 0x2c, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3d, + 0x37, 0x2d, 0x1e, 0x19, +}; diff --git a/boards/dk-tm4c129x/grlib_driver_test/images.h b/boards/dk-tm4c129x/grlib_driver_test/images.h new file mode 100644 index 0000000..3d0d212 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/images.h @@ -0,0 +1,41 @@ +//***************************************************************************** +// +// images.h - Prototypes for the images used by the application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IMAGES_H__ +#define __IMAGES_H__ + +//***************************************************************************** +// +// Prototypes for the image arrays. +// +//***************************************************************************** +extern const unsigned char g_pucLogo[]; +extern const unsigned char g_pucTest32x32x1Raw[]; +extern const unsigned char g_pucTest32x32x1Comp[]; +extern const unsigned char g_pucTest32x32x4Raw[]; +extern const unsigned char g_pucTest32x32x4Comp[]; +extern const unsigned char g_pucTest32x32x8Raw[]; +extern const unsigned char g_pucTest32x32x8Comp[]; + +#endif // __IMAGES_H__ diff --git a/boards/dk-tm4c129x/grlib_driver_test/readme.txt b/boards/dk-tm4c129x/grlib_driver_test/readme.txt new file mode 100644 index 0000000..bbf218e --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/readme.txt @@ -0,0 +1,117 @@ +Graphics Driver Test Tool + +This application provides a simple, command-line tool to aid in +debugging TivaWare Graphics Library display drivers. As shipped in +TivaWare, it is configured to operate with a DK-TM4C129X board using its +QVGA display. The code is written, however, to allow easy retargeting to +other boards and display drivers via modifications to the driver_config.h +header file. + +The tool is driven via a command line interface provided on UART0. Use a +terminal emulator on your host system and set the serial port to use +115200bps, 8-N-1. To see a list of supported commands, enter ``help'' on +the command line and to see extended help on a specific command enter +``help [command]''. + +The commands in the tool fall broadly into three categories: + +- commands allowing a given low level graphics function to be executed with + parameters provided by the user, +- commands providing the ability to read and write arbitrary memory + locations and registers, and +- tests displaying test patterns intended to exercise specific display + driver functions. + +The first group of commands includes ``r'' to read a word from a memory +location or register, ``w'' to write a word to a memory location or +register, ``dump'' to dump a range of memory as words and ``db'' to dump +a range of memory as bytes. Note that no checking is performed to ensure +that addresses passed to these functions are valid. If an invalid address +is passed, the test tool will fault. + +The second group of commands contains ``fill'' which fills the screen with +a given color, ``rect'' which draws a rectangle outline at a given position +on the display, ''hline`` which draws a horizontal line, ``vline'' which +draws a vertical line, ``image'' which draws an image at provided +coordinates, and ``text'' which renders a given text string. The output of +these commands is also modified via several other commands. ``fg'' selects +the foreground color to be used by the drawing commands and ``bg'' selects +the background color. ``setimg'' selects from one of four different test +images that are drawn in response to the ``image'' command and ``clipimg'' +allows image clipping to be adjusted to test handling of the \e i32X0 +parameter to the driver's PixelDrawMultiple function. + +Additional graphics commands are ``pat'' which redraws the test pattern +displayed when the tool starts, ``colbar'' which fills the display with +a set of color bars and ``perf'' which draws randomly positioned and +colored rectangles for a given number of seconds and determines the drawing +speed in pixels-per-second. + +All driver function test patterns are generated using the ``test'' command +whose first parameter indicates the test to display. Tests are as follow: + +- ``color'' tests the driver's color handling. The test starts by + splitting the screen into two and showing a different primary or + secondary color in each half. Verify that the correct colors are + displayed. After this, red, blue and green color gradients are + displayed. Again, verify that these are correct and that no color other + than the shades of the specific primary are displayed. If any color is + incorrect, this likely indicates an error in the driver's + pfnColorTranslate function or the function used to set the display + palette if the driver provides this feature. + +- ``pixel'' tests basic pixel plotting. A test pattern is drawn with a + single white pixel in each corner of the display, a small cross + comprising 5 white pixels in the center, and small arrows near each + corner. If any of the corner dots are missing or any of the other + pattern elements are incorrect, this points to a problem in the + driver's pfnPixelDraw function or, more generally, a problem with the + display coordinate space handling. + +- ``hline'' tests horizontal line drawing. White horizontal lines are + drawn at the top and bottom and a right-angled triangle is constructed in + the center of the display. If any line is missing or the triangle is + incorrect, this points to a problem in the driver's pfnLineDrawH + function. + +- ``vline'' tests vertical line drawing. White vertical lines are drawn + at the left and right and a right-angled triangle is constructed in + the center of the display. If any line is missing or the triangle is + incorrect, this points to a problem in the driver's pfnLineDrawV + function. + +- ``mult'' tests the driver's pfnPixelDrawMultiple function. This is the + most complex driver function and the one most prone to errors. The tool + fills the display with each of the included test images in turn. These + cover all the pixel formats (1-, 4- and 8-bpp) that the driver is + required to handle and the image clipping and x positions are set to + ensure that all alignment cases are handled for each format. In each + case, the image is drawn inside a single pixel red rectangle. If the + driver is handling each case correctly, the image should look correct + and no part of the red rectangle should be overwritten when the image + is drawn. In the displayed grid of images, the x alignment increases + from 1 to 8 across the display and each line increases the left-side + image clipping by one pixel from 0 in the top row to 7 in the bottom + row. An error in any image indicates that one of the cases handled by + the driver's pfnPixelDrawMultiple function is not handled correctly. + + +------------------------------------------------------------------------------- + +Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf new file mode 100644 index 0000000..5b34bef Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin new file mode 100644 index 0000000..7d6acc4 Binary files /dev/null and b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin differ diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c b/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c new file mode 100644 index 0000000..38dfca5 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c b/boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c new file mode 100644 index 0000000..7f2e7df --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c b/boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c new file mode 100644 index 0000000..7a4f634 --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S b/boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S new file mode 100644 index 0000000..b2cebec --- /dev/null +++ b/boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN SysTickIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/hello/Makefile b/boards/dk-tm4c129x/hello/Makefile new file mode 100644 index 0000000..f01ef60 --- /dev/null +++ b/boards/dk-tm4c129x/hello/Makefile @@ -0,0 +1,89 @@ +#****************************************************************************** +# +# Makefile - Rules for building the hello example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the hello example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/hello.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the hello example. +# +${COMPILER}/hello.axf: ${COMPILER}/frame.o +${COMPILER}/hello.axf: ${COMPILER}/hello.o +${COMPILER}/hello.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/hello.axf: ${COMPILER}/pinout.o +${COMPILER}/hello.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/hello.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/hello.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/hello.axf: hello.ld +SCATTERgcc_hello=hello.ld +ENTRY_hello=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/hello/ccs/.ccsimportspec b/boards/dk-tm4c129x/hello/ccs/.ccsimportspec new file mode 100644 index 0000000..77b03f5 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/hello/ccs/.ccsproject b/boards/dk-tm4c129x/hello/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hello/ccs/.cproject b/boards/dk-tm4c129x/hello/ccs/.cproject new file mode 100644 index 0000000..5296339 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hello/ccs/.project b/boards/dk-tm4c129x/hello/ccs/.project new file mode 100644 index 0000000..b34bff3 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/.project @@ -0,0 +1,65 @@ + + + hello + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + hello.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hello/hello.c + + + hello_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hello/hello_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hello/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/hello/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/hello/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/hello/ccs/Debug/hello.bin b/boards/dk-tm4c129x/hello/ccs/Debug/hello.bin new file mode 100644 index 0000000..bfd7d78 Binary files /dev/null and b/boards/dk-tm4c129x/hello/ccs/Debug/hello.bin differ diff --git a/boards/dk-tm4c129x/hello/ccs/Debug/hello.out b/boards/dk-tm4c129x/hello/ccs/Debug/hello.out new file mode 100644 index 0000000..3966c58 Binary files /dev/null and b/boards/dk-tm4c129x/hello/ccs/Debug/hello.out differ diff --git a/boards/dk-tm4c129x/hello/ccs/macros.ini_initial b/boards/dk-tm4c129x/hello/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/hello/ccs/target_config.ccxml b/boards/dk-tm4c129x/hello/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/hello/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hello/ewarm/Exe/hello.bin b/boards/dk-tm4c129x/hello/ewarm/Exe/hello.bin new file mode 100644 index 0000000..b35bbd9 Binary files /dev/null and b/boards/dk-tm4c129x/hello/ewarm/Exe/hello.bin differ diff --git a/boards/dk-tm4c129x/hello/ewarm/Exe/hello.out b/boards/dk-tm4c129x/hello/ewarm/Exe/hello.out new file mode 100644 index 0000000..c02ef42 Binary files /dev/null and b/boards/dk-tm4c129x/hello/ewarm/Exe/hello.out differ diff --git a/boards/dk-tm4c129x/hello/gcc/hello.axf b/boards/dk-tm4c129x/hello/gcc/hello.axf new file mode 100644 index 0000000..17e9b30 Binary files /dev/null and b/boards/dk-tm4c129x/hello/gcc/hello.axf differ diff --git a/boards/dk-tm4c129x/hello/gcc/hello.bin b/boards/dk-tm4c129x/hello/gcc/hello.bin new file mode 100644 index 0000000..e774c0b Binary files /dev/null and b/boards/dk-tm4c129x/hello/gcc/hello.bin differ diff --git a/boards/dk-tm4c129x/hello/hello.c b/boards/dk-tm4c129x/hello/hello.c new file mode 100644 index 0000000..3c51b72 --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.c @@ -0,0 +1,118 @@ +//***************************************************************************** +// +// hello.c - Simple hello world example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Hello World (hello)

      +//! +//! A very simple ``hello world'' example. It simply displays ``Hello World!'' +//! on the display and is a starting point for more complicated applications. +//! This example uses calls to the TivaWare Graphics Library graphics +//! primitives functions to update the display. For a similar example using +//! widgets, please see ``hello_widget''. +// +//***************************************************************************** + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Print "Hello World!" to the display on the Intelligent Display Module. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "hello"); + + // + // Say hello using the Computer Modern 40 point font. + // + GrContextFontSet(&sContext, g_psFontCm40); + GrStringDrawCentered(&sContext, "Hello World!", -1, + GrContextDpyWidthGet(&sContext) / 2, + ((GrContextDpyHeightGet(&sContext) - 32) / 2) + 24, + 0); + + // + // Flush any cached drawing operations. + // + GrFlush(&sContext); + + // + // We are finished. Hang around doing nothing. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello/hello.ewd b/boards/dk-tm4c129x/hello/hello.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/hello/hello.ewp b/boards/dk-tm4c129x/hello/hello.ewp new file mode 100644 index 0000000..2535170 --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\hello.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + diff --git a/boards/dk-tm4c129x/hello/hello.icf b/boards/dk-tm4c129x/hello/hello.icf new file mode 100644 index 0000000..3b4da91 --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// hello.icf - Linker configuration file for hello. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/hello/hello.ld b/boards/dk-tm4c129x/hello/hello.ld new file mode 100644 index 0000000..87f5f28 --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * hello.ld - Linker configuration file for hello. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/hello/hello.sct b/boards/dk-tm4c129x/hello/hello.sct new file mode 100644 index 0000000..eb0fd7f --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; hello.sct - Linker configuration file for hello. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/hello/hello.uvopt b/boards/dk-tm4c129x/hello/hello.uvopt new file mode 100644 index 0000000..daf45f8 --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + hello + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\hello.c + hello.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/hello/hello.uvproj b/boards/dk-tm4c129x/hello/hello.uvproj new file mode 100644 index 0000000..63141be --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + hello + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + hello + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\hello.bin .\rvmdk\hello.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + hello.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + hello.c + 1 + .\hello.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/hello/hello_ccs.cmd b/boards/dk-tm4c129x/hello/hello_ccs.cmd new file mode 100644 index 0000000..1f63aca --- /dev/null +++ b/boards/dk-tm4c129x/hello/hello_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * hello_ccs.cmd - CCS linker configuration file for hello. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/dk-tm4c129x/hello/readme.txt b/boards/dk-tm4c129x/hello/readme.txt new file mode 100644 index 0000000..029ba59 --- /dev/null +++ b/boards/dk-tm4c129x/hello/readme.txt @@ -0,0 +1,27 @@ +Hello World + +A very simple ``hello world'' example. It simply displays ``Hello World!'' +on the display and is a starting point for more complicated applications. +This example uses calls to the TivaWare Graphics Library graphics +primitives functions to update the display. For a similar example using +widgets, please see ``hello_widget''. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/hello/rvmdk/hello.axf b/boards/dk-tm4c129x/hello/rvmdk/hello.axf new file mode 100644 index 0000000..d16c4d5 Binary files /dev/null and b/boards/dk-tm4c129x/hello/rvmdk/hello.axf differ diff --git a/boards/dk-tm4c129x/hello/rvmdk/hello.bin b/boards/dk-tm4c129x/hello/rvmdk/hello.bin new file mode 100644 index 0000000..60bfcdc Binary files /dev/null and b/boards/dk-tm4c129x/hello/rvmdk/hello.bin differ diff --git a/boards/dk-tm4c129x/hello/startup_ccs.c b/boards/dk-tm4c129x/hello/startup_ccs.c new file mode 100644 index 0000000..a769216 --- /dev/null +++ b/boards/dk-tm4c129x/hello/startup_ccs.c @@ -0,0 +1,268 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello/startup_ewarm.c b/boards/dk-tm4c129x/hello/startup_ewarm.c new file mode 100644 index 0000000..cf3864b --- /dev/null +++ b/boards/dk-tm4c129x/hello/startup_ewarm.c @@ -0,0 +1,299 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello/startup_gcc.c b/boards/dk-tm4c129x/hello/startup_gcc.c new file mode 100644 index 0000000..00771a6 --- /dev/null +++ b/boards/dk-tm4c129x/hello/startup_gcc.c @@ -0,0 +1,315 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello/startup_rvmdk.S b/boards/dk-tm4c129x/hello/startup_rvmdk.S new file mode 100644 index 0000000..f07ac83 --- /dev/null +++ b/boards/dk-tm4c129x/hello/startup_rvmdk.S @@ -0,0 +1,324 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/hello_widget/Makefile b/boards/dk-tm4c129x/hello_widget/Makefile new file mode 100644 index 0000000..ad8b324 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the hello_widget example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the hello_widget example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/hello_widget.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the hello_widget example. +# +${COMPILER}/hello_widget.axf: ${COMPILER}/frame.o +${COMPILER}/hello_widget.axf: ${COMPILER}/hello_widget.o +${COMPILER}/hello_widget.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/hello_widget.axf: ${COMPILER}/pinout.o +${COMPILER}/hello_widget.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/hello_widget.axf: ${COMPILER}/touch.o +${COMPILER}/hello_widget.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/hello_widget.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/hello_widget.axf: hello_widget.ld +SCATTERgcc_hello_widget=hello_widget.ld +ENTRY_hello_widget=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/hello_widget/ccs/.ccsimportspec b/boards/dk-tm4c129x/hello_widget/ccs/.ccsimportspec new file mode 100644 index 0000000..5ee6004 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/hello_widget/ccs/.ccsproject b/boards/dk-tm4c129x/hello_widget/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hello_widget/ccs/.cproject b/boards/dk-tm4c129x/hello_widget/ccs/.cproject new file mode 100644 index 0000000..857cc75 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hello_widget/ccs/.project b/boards/dk-tm4c129x/hello_widget/ccs/.project new file mode 100644 index 0000000..3624ea3 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/.project @@ -0,0 +1,70 @@ + + + hello_widget + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + hello_widget.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hello_widget/hello_widget.c + + + hello_widget_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hello_widget/hello_widget_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hello_widget/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/hello_widget/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/hello_widget/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.bin b/boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.bin new file mode 100644 index 0000000..a11ba4c Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.bin differ diff --git a/boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.out b/boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.out new file mode 100644 index 0000000..fe88419 Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/ccs/Debug/hello_widget.out differ diff --git a/boards/dk-tm4c129x/hello_widget/ccs/macros.ini_initial b/boards/dk-tm4c129x/hello_widget/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/hello_widget/ccs/target_config.ccxml b/boards/dk-tm4c129x/hello_widget/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.bin b/boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.bin new file mode 100644 index 0000000..eebb0ce Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.bin differ diff --git a/boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.out b/boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.out new file mode 100644 index 0000000..a1f0192 Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/ewarm/Exe/hello_widget.out differ diff --git a/boards/dk-tm4c129x/hello_widget/gcc/hello_widget.axf b/boards/dk-tm4c129x/hello_widget/gcc/hello_widget.axf new file mode 100644 index 0000000..42f0420 Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/gcc/hello_widget.axf differ diff --git a/boards/dk-tm4c129x/hello_widget/gcc/hello_widget.bin b/boards/dk-tm4c129x/hello_widget/gcc/hello_widget.bin new file mode 100644 index 0000000..de238fa Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/gcc/hello_widget.bin differ diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.c b/boards/dk-tm4c129x/hello_widget/hello_widget.c new file mode 100644 index 0000000..0752033 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.c @@ -0,0 +1,258 @@ +//***************************************************************************** +// +// hello_widget.c - Simple hello world example using Widgets +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Hello using Widgets (hello_widget)

      +//! +//! A very simple ``hello world'' example written using the TivaWare Graphics +//! Library widgets. It displays a button which, when pressed, toggles +//! display of the words ``Hello World!'' on the screen. This may be used as +//! a starting point for more complex widget-based applications. +// +//***************************************************************************** + +//***************************************************************************** +// +// Forward reference to various widget structures. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; +extern tPushButtonWidget g_sPushBtn; + +//***************************************************************************** +// +// Forward reference to the button press handler. +// +//***************************************************************************** +void OnButtonPress(tWidget *psWidget); + +//***************************************************************************** +// +// The canvas widget acting as the background to the display. +// +//***************************************************************************** +Canvas(g_sBackground, WIDGET_ROOT, 0, &g_sPushBtn, + &g_sKentec320x240x16_SSD2119, 10, 25, 300, (240 - 25 -10), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The button used to hide or display the "Hello World" message. +// +//***************************************************************************** +RectangularButton(g_sPushBtn, &g_sBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 60, 60, 200, 40, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY), + ClrDarkBlue, ClrBlue, ClrWhite, ClrWhite, + g_psFontCmss22b, "Show Welcome", 0, 0, 0, 0, OnButtonPress); + +//***************************************************************************** +// +// The canvas widget used to display the "Hello!" string. Note that this +// is NOT hooked into the active widget tree (by making it a child of the +// g_sPushBtn widget above) yet since we do not want the widget to be displayed +// until the button is pressed. +// +//***************************************************************************** +Canvas(g_sHello, &g_sPushBtn, 0, 0, + &g_sKentec320x240x16_SSD2119, 10, 150, 300, 40, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), + ClrBlack, 0, ClrWhite, g_psFontCm40, "Hello World!", 0, 0); + +//***************************************************************************** +// +// A global we use to keep track of whether or not the "Hello" widget is +// currently visible. +// +//***************************************************************************** +bool g_bHelloVisible = false; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This function is called by the graphics library widget manager in the +// context of WidgetMessageQueueProcess whenever the user releases the +// "Press Me!" button. We use this notification to display or hide the +// "Hello!" widget. +// +// This is actually a rather inefficient way to accomplish this but it's +// a good example of how to add and remove widgets dynamically. In +// normal circumstances, you would likely leave the g_sHello widget +// linked into the tree and merely add or remove the text by changing +// its style then repainting. +// +// If using this dynamic add/remove strategy, another useful optimization +// is to use a black canvas widget that covers the same area of the screen +// as the widgets that you will be adding and removing. If this is the used +// as the point in the tree where the subtree is added or removed, you can +// repaint just the desired area by repainting the black canvas rather than +// repainting the whole tree. +// +//***************************************************************************** +void +OnButtonPress(tWidget *psWidget) +{ + g_bHelloVisible = !g_bHelloVisible; + + if(g_bHelloVisible) + { + // + // Add the Hello widget to the tree as a child of the push + // button. We could add it elsewhere but this seems as good a + // place as any. It also means we can repaint from g_sPushBtn and + // this will paint both the button and the welcome message. + // + WidgetAdd((tWidget *)&g_sPushBtn, (tWidget *)&g_sHello); + + // + // Change the button text to indicate the new function. + // + PushButtonTextSet(&g_sPushBtn, "Hide Welcome"); + + // + // Repaint the pushbutton and all widgets beneath it (in this case, + // the welcome message). + // + WidgetPaint((tWidget *)&g_sPushBtn); + } + else + { + // + // Remove the Hello widget from the tree. + // + WidgetRemove((tWidget *)&g_sHello); + + // + // Change the button text to indicate the new function. + // + PushButtonTextSet(&g_sPushBtn, "Show Welcome"); + + // + // Repaint the widget tree to remove the Hello widget from the + // display. This is rather inefficient but saves having to use + // additional widgets to overpaint the area of the Hello text (since + // disabling a widget does not automatically erase whatever it + // previously displayed on the screen). + // + WidgetPaint(WIDGET_ROOT); + } +} + +//***************************************************************************** +// +// Print "Hello World!" to the display on the Intelligent Display Module. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "hello-widget"); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + + // + // Paint the widget tree to make sure they all appear on the display. + // + WidgetPaint(WIDGET_ROOT); + + // + // Loop forever, processing widget messages. + // + while(1) + { + // + // Process any messages from or for the widgets. + // + WidgetMessageQueueProcess(); + } +} diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.ewd b/boards/dk-tm4c129x/hello_widget/hello_widget.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.ewp b/boards/dk-tm4c129x/hello_widget/hello_widget.ewp new file mode 100644 index 0000000..0defd92 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\hello_widget.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.icf b/boards/dk-tm4c129x/hello_widget/hello_widget.icf new file mode 100644 index 0000000..3818280 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// hello_widget.icf - Linker configuration file for hello_widget. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.ld b/boards/dk-tm4c129x/hello_widget/hello_widget.ld new file mode 100644 index 0000000..3c6740d --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * hello_widget.ld - Linker configuration file for hello_widget. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.sct b/boards/dk-tm4c129x/hello_widget/hello_widget.sct new file mode 100644 index 0000000..92a6f4b --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; hello_widget.sct - Linker configuration file for hello_widget. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.uvopt b/boards/dk-tm4c129x/hello_widget/hello_widget.uvopt new file mode 100644 index 0000000..4a35ca5 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + hello_widget + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\hello_widget.c + hello_widget.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget.uvproj b/boards/dk-tm4c129x/hello_widget/hello_widget.uvproj new file mode 100644 index 0000000..69322c7 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + hello_widget + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + hello_widget + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\hello_widget.bin .\rvmdk\hello_widget.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + hello_widget.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + hello_widget.c + 1 + .\hello_widget.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/hello_widget/hello_widget_ccs.cmd b/boards/dk-tm4c129x/hello_widget/hello_widget_ccs.cmd new file mode 100644 index 0000000..f74d399 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/hello_widget_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * hello_widget_ccs.cmd - CCS linker configuration file for hello_widget. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/hello_widget/readme.txt b/boards/dk-tm4c129x/hello_widget/readme.txt new file mode 100644 index 0000000..36c9abc --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/readme.txt @@ -0,0 +1,26 @@ +Hello using Widgets + +A very simple ``hello world'' example written using the TivaWare Graphics +Library widgets. It displays a button which, when pressed, toggles +display of the words ``Hello World!'' on the screen. This may be used as +a starting point for more complex widget-based applications. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.axf b/boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.axf new file mode 100644 index 0000000..e52364f Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.axf differ diff --git a/boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.bin b/boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.bin new file mode 100644 index 0000000..15b4181 Binary files /dev/null and b/boards/dk-tm4c129x/hello_widget/rvmdk/hello_widget.bin differ diff --git a/boards/dk-tm4c129x/hello_widget/startup_ccs.c b/boards/dk-tm4c129x/hello_widget/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello_widget/startup_ewarm.c b/boards/dk-tm4c129x/hello_widget/startup_ewarm.c new file mode 100644 index 0000000..860b8a6 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello_widget/startup_gcc.c b/boards/dk-tm4c129x/hello_widget/startup_gcc.c new file mode 100644 index 0000000..fad3049 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hello_widget/startup_rvmdk.S b/boards/dk-tm4c129x/hello_widget/startup_rvmdk.S new file mode 100644 index 0000000..07659c1 --- /dev/null +++ b/boards/dk-tm4c129x/hello_widget/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/hibernate/Makefile b/boards/dk-tm4c129x/hibernate/Makefile new file mode 100644 index 0000000..86e91fa --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/Makefile @@ -0,0 +1,94 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Hibernate Example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. + +# +# The default rule, which causes the Hibernate Example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/hibernate.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Hibernate Example. +# +${COMPILER}/hibernate.axf: ${COMPILER}/frame.o +${COMPILER}/hibernate.axf: ${COMPILER}/hibernate.o +${COMPILER}/hibernate.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/hibernate.axf: ${COMPILER}/pinout.o +${COMPILER}/hibernate.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/hibernate.axf: ${COMPILER}/touch.o +${COMPILER}/hibernate.axf: ${COMPILER}/uartstdio.o +${COMPILER}/hibernate.axf: ${COMPILER}/ustdlib.o +${COMPILER}/hibernate.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/hibernate.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/hibernate.axf: hibernate.ld +SCATTERgcc_hibernate=hibernate.ld +ENTRY_hibernate=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DSNOWFLAKE + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/hibernate/ccs/.ccsimportspec b/boards/dk-tm4c129x/hibernate/ccs/.ccsimportspec new file mode 100644 index 0000000..160e565 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/hibernate/ccs/.ccsproject b/boards/dk-tm4c129x/hibernate/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hibernate/ccs/.cproject b/boards/dk-tm4c129x/hibernate/ccs/.cproject new file mode 100644 index 0000000..acbab34 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/.cproject @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hibernate/ccs/.project b/boards/dk-tm4c129x/hibernate/ccs/.project new file mode 100644 index 0000000..690bde8 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/.project @@ -0,0 +1,80 @@ + + + hibernate + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + hibernate.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hibernate/hibernate.c + + + hibernate_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hibernate/hibernate_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/hibernate/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/hibernate/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/hibernate/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.bin b/boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.bin new file mode 100644 index 0000000..153b5fa Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.bin differ diff --git a/boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.out b/boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.out new file mode 100644 index 0000000..d4c5e2e Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/ccs/Debug/hibernate.out differ diff --git a/boards/dk-tm4c129x/hibernate/ccs/macros.ini_initial b/boards/dk-tm4c129x/hibernate/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/hibernate/ccs/target_config.ccxml b/boards/dk-tm4c129x/hibernate/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.bin b/boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.bin new file mode 100644 index 0000000..2be59c3 Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.bin differ diff --git a/boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.out b/boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.out new file mode 100644 index 0000000..d9c2972 Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/ewarm/Exe/hibernate.out differ diff --git a/boards/dk-tm4c129x/hibernate/gcc/hibernate.axf b/boards/dk-tm4c129x/hibernate/gcc/hibernate.axf new file mode 100644 index 0000000..20a7f82 Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/gcc/hibernate.axf differ diff --git a/boards/dk-tm4c129x/hibernate/gcc/hibernate.bin b/boards/dk-tm4c129x/hibernate/gcc/hibernate.bin new file mode 100644 index 0000000..780b615 Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/gcc/hibernate.bin differ diff --git a/boards/dk-tm4c129x/hibernate/hibernate.c b/boards/dk-tm4c129x/hibernate/hibernate.c new file mode 100644 index 0000000..0062fd3 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.c @@ -0,0 +1,1568 @@ +//***************************************************************************** +// +// hibernate.c - Hibernation Example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include +#include "inc/hw_gpio.h" +#include "inc/hw_hibernate.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_sysctl.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/hibernate.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "utils/ustdlib.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Hibernate Example (hibernate)

      +//! +//! An example to demonstrate the use of the Hibernation module. The user +//! can put the microcontroller in hibernation by touching the display. The +//! microcontroller will then wake on its own after 5 seconds, or immediately +//! if the user presses the RESET button. External WAKE pin and GPIO (PK5) +//! wake sources can also be used to wake immediately from hibernation. The +//! following wiring enables the use of these pins as wake sources. +//! WAKE on J27 to SEL on J37 +//! PK5 on J28 to UP on J37 +//! +//! The program keeps a count of the number of times it has entered +//! hibernation. The value of the counter is stored in the battery backed +//! memory of the Hibernation module so that it can be retrieved when the +//! microcontroller wakes. The program displays the wall time and date by +//! making use of the calendar function of the Hibernate module. User can +//! modify the date and time if so desired. +// +//***************************************************************************** + +//***************************************************************************** +// +// A collection of wake sources that will be displayed to indicate the source +// of the most recent wake. +// +//***************************************************************************** +static char *g_ppcWakeSource[] = +{ + "RTC TIMEOUT", + "RESET", + "WAKE PIN", + "GPIO WAKE", + "SYSTEM RESET" +}; + +//***************************************************************************** +// +// Lookup table to convert numerical value of a month into text. +// +//***************************************************************************** +static char *g_ppcMonth[12] = +{ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" +}; + +//***************************************************************************** +// +// Flag to indicate that main screen is active so that main screen buffers can +// be updated and widgets redrawn. +// +//***************************************************************************** +bool g_bMainScreen; + +//***************************************************************************** +// +// Flag that informs that the user has requested hibernation. +// +//***************************************************************************** +volatile bool g_bHibernate; + +//***************************************************************************** +// +// Flag that informs that date and time have to be set. +// +//***************************************************************************** +volatile bool g_bSetDate; + +//***************************************************************************** +// +// Buffers to store widget display information. +// +//***************************************************************************** +char g_pcWakeBuf[40], g_pcHibBuf[40], g_pcDateTimeBuf[40]; +char g_pcInfoBuf0[40], g_pcInfoBuf1[40], g_pcInfoBuf2[40], g_pcInfoBuf3[40]; +char g_pcMonBuf[4], g_pcDayBuf[3], g_pcYearBuf[5]; +char g_pcHourBuf[3], g_pcMinBuf[3], g_pcAMPMBuf[3]; + +//***************************************************************************** +// +// Variables that keep track of the date and time across different screens. +// +//***************************************************************************** +uint32_t g_ui32MonthIdx, g_ui32DayIdx, g_ui32YearIdx; +uint32_t g_ui32HourIdx, g_ui32MinIdx; + +//***************************************************************************** +// +// Forward reference for widget structures. +// +//***************************************************************************** +extern tCanvasWidget g_sMainScreen; +extern tCanvasWidget g_sWakeInfo, g_sHibCount, g_sDateTime; +extern tPushButtonWidget g_sInfoStrBtn; +extern tCanvasWidget g_sInfoStr1, g_sInfoStr2, g_sInfoStr3; +extern tPushButtonWidget g_sDateTimeSetBtn; +extern tCanvasWidget g_sDateScreen; +extern tCanvasWidget g_sMonText; +extern tPushButtonWidget g_sMonUpBtn, g_sMonDwnBtn; +extern tCanvasWidget g_sDayText; +extern tPushButtonWidget g_sDayUpBtn, g_sDayDwnBtn; +extern tCanvasWidget g_sYearText; +extern tPushButtonWidget g_sYearUpBtn, g_sYearDwnBtn; +extern tPushButtonWidget g_sDateNextBtn; +extern tCanvasWidget g_sTimeScreen; +extern tCanvasWidget g_sHourText; +extern tPushButtonWidget g_sHourUpBtn, g_sHourDwnBtn; +extern tCanvasWidget g_sMinText; +extern tPushButtonWidget g_sMinUpBtn, g_sMinDwnBtn; +extern tCanvasWidget g_sAMPMText; +extern tPushButtonWidget g_sAMPMUpBtn, g_sAMPMDwnBtn; +extern tPushButtonWidget g_sTimeDoneBtn; + +//***************************************************************************** +// +// Forward reference of functions that are called on a button press. +// +//***************************************************************************** +void OnInfoStrBtnPress(tWidget *psWidget); +void OnDateTimeSetBtnPress(tWidget *psWidget); +void OnMonUpBtnPress(tWidget *psWidget); +void OnMonDwnBtnPress(tWidget *psWidget); +void OnDayUpBtnPress(tWidget *psWidget); +void OnDayDwnBtnPress(tWidget *psWidget); +void OnYearUpBtnPress(tWidget *psWidget); +void OnYearDwnBtnPress(tWidget *psWidget); +void OnDateNextBtnPress(tWidget *psWidget); +void OnHourUpBtnPress(tWidget *psWidget); +void OnHourDwnBtnPress(tWidget *psWidget); +void OnMinUpBtnPress(tWidget *psWidget); +void OnMinDwnBtnPress(tWidget *psWidget); +void OnAMPMBtnPress(tWidget *psWidget); +void OnTimeDoneBtnPress(tWidget *psWidget); + +//***************************************************************************** +// +// The graphics library structures for the Main screen. +// +//***************************************************************************** +RectangularButton(g_sDateTimeSetBtn, &g_sMainScreen, 0, 0, + &g_sKentec320x240x16_SSD2119, (319 - 9 - 95), 34, 95, 45, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm16, "DATE/TIME", 0, 0, 0, 0, + OnDateTimeSetBtnPress); +Canvas(g_sDateTime, &g_sMainScreen, &g_sDateTimeSetBtn, 0, + &g_sKentec320x240x16_SSD2119, 9, 50, (310 - 9 - 100), 17, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, 0, ClrWhite, + g_psFontCm16, g_pcDateTimeBuf, 0, 0); +Canvas(g_sWakeInfo, &g_sMainScreen, &g_sDateTime, 0, + &g_sKentec320x240x16_SSD2119, 9, 100, (310 - 9), 17, CANVAS_STYLE_TEXT, + ClrBlack, 0, ClrWhite, g_psFontCm16, g_pcWakeBuf, 0, 0); +Canvas(g_sHibCount, &g_sMainScreen, &g_sWakeInfo, 0, + &g_sKentec320x240x16_SSD2119, 9, 120, (310 - 9), 17, CANVAS_STYLE_TEXT, + ClrBlack, 0, ClrWhite, g_psFontCm16, g_pcHibBuf, 0, 0); +RectangularButton(g_sInfoStrBtn, &g_sMainScreen, &g_sHibCount, 0, + &g_sKentec320x240x16_SSD2119, 9, 150, (310 - 9), 25, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm16, g_pcInfoBuf0, 0, 0, 0, 0, OnInfoStrBtnPress); +Canvas(g_sInfoStr1, &g_sMainScreen, &g_sInfoStrBtn, 0, + &g_sKentec320x240x16_SSD2119, 9, 175, (310 - 9), 17, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, 0, ClrWhite, + g_psFontCm16, g_pcInfoBuf1, 0, 0); +Canvas(g_sInfoStr2, &g_sMainScreen, &g_sInfoStr1, 0, + &g_sKentec320x240x16_SSD2119, 9, 192, (310 - 9), 17, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, 0, ClrWhite, + g_psFontCm16, g_pcInfoBuf2, 0, 0); +Canvas(g_sInfoStr3, &g_sMainScreen, &g_sInfoStr2, 0, + &g_sKentec320x240x16_SSD2119, 9, 209, (310 - 9), 17, + (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, 0, ClrWhite, + g_psFontCm16, g_pcInfoBuf3, 0, 0); +Canvas(g_sMainScreen, WIDGET_ROOT, 0, &g_sInfoStr3, + &g_sKentec320x240x16_SSD2119, 9, 25, (310 - 9), (230 - 25), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The graphics library structures for the Date screen. +// +//***************************************************************************** +RectangularButton(g_sDateNextBtn, &g_sDateScreen, 0, 0, + &g_sKentec320x240x16_SSD2119, 240, 190, 60, 30, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm16, "NEXT", 0, 0, 0, 0, OnDateNextBtnPress); +CircularButton(g_sYearDwnBtn, &g_sDateScreen, &g_sDateNextBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 10, OnYearDwnBtnPress); +CircularButton(g_sYearUpBtn, &g_sDateScreen, &g_sYearDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 10, OnYearUpBtnPress); +Canvas(g_sYearText, &g_sDateScreen, &g_sYearUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 230, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcYearBuf, 0, 0); +CircularButton(g_sDayDwnBtn, &g_sDateScreen, &g_sYearText, 0, + &g_sKentec320x240x16_SSD2119, 160, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 10, OnDayDwnBtnPress); +CircularButton(g_sDayUpBtn, &g_sDateScreen, &g_sDayDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 160, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 10, OnDayUpBtnPress); +Canvas(g_sDayText, &g_sDateScreen, &g_sDayUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 130, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcDayBuf, 0, 0); +CircularButton(g_sMonDwnBtn, &g_sDateScreen, &g_sDayText, 0, + &g_sKentec320x240x16_SSD2119, 60, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 20, OnMonDwnBtnPress); +CircularButton(g_sMonUpBtn, &g_sDateScreen, &g_sMonDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 60, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 20, OnMonUpBtnPress); +Canvas(g_sMonText, &g_sDateScreen, &g_sMonUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 30, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcMonBuf, 0, 0); +Canvas(g_sDateScreen, WIDGET_ROOT, 0, &g_sMonText, + &g_sKentec320x240x16_SSD2119, 9, 25, (310 - 9), (230 - 25), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The graphics library structures for the Time screen. +// +//***************************************************************************** +RectangularButton(g_sTimeDoneBtn, &g_sTimeScreen, 0, 0, + &g_sKentec320x240x16_SSD2119, 240, 190, 60, 30, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm16, "DONE", 0, 0, 0, 0, OnTimeDoneBtnPress); +CircularButton(g_sAMPMDwnBtn, &g_sTimeScreen, &g_sTimeDoneBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, + ClrWhite, g_psFontCm20, "+", 0, 0, 0, 0, OnAMPMBtnPress); +CircularButton(g_sAMPMUpBtn, &g_sTimeScreen, &g_sAMPMDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, + ClrWhite, g_psFontCm20, "-", 0, 0, 0, 0, OnAMPMBtnPress); +Canvas(g_sAMPMText, &g_sTimeScreen, &g_sAMPMUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 230, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcAMPMBuf, 0, 0); +CircularButton(g_sMinDwnBtn, &g_sTimeScreen, &g_sAMPMText, 0, + &g_sKentec320x240x16_SSD2119, 160, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 10, OnMinDwnBtnPress); +CircularButton(g_sMinUpBtn, &g_sTimeScreen, &g_sMinDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 160, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 10, OnMinUpBtnPress); +Canvas(g_sMinText, &g_sTimeScreen, &g_sMinUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 130, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcMinBuf, 0, 0); +CircularButton(g_sHourDwnBtn, &g_sTimeScreen, &g_sMinText, 0, + &g_sKentec320x240x16_SSD2119, 60, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 20, OnHourDwnBtnPress); +CircularButton(g_sHourUpBtn, &g_sTimeScreen, &g_sHourDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 60, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 20, OnHourUpBtnPress); +Canvas(g_sHourText, &g_sTimeScreen, &g_sHourUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 30, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcHourBuf, 0, 0); +Canvas(g_sTimeScreen, WIDGET_ROOT, 0, &g_sHourText, + &g_sKentec320x240x16_SSD2119, 9, 25, (310 - 9), (230 - 25), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This function reads the current date and time from the calendar logic of the +// hibernate module. Return status indicates the validity of the data read. +// If the received data is valid, the 24-hour time format is converted to +// 12-hour format. +// +//***************************************************************************** +bool +DateTimeGet(struct tm *sTime, char *pcAMPM) +{ + // + // Get the latest time. + // + HibernateCalendarGet(sTime); + + // + // Is valid data read? + // + if(((sTime->tm_sec < 0) || (sTime->tm_sec > 59)) || + ((sTime->tm_min < 0) || (sTime->tm_min > 59)) || + ((sTime->tm_hour < 0) || (sTime->tm_hour > 23)) || + ((sTime->tm_mday < 1) || (sTime->tm_mday > 31)) || + ((sTime->tm_mon < 0) || (sTime->tm_mon > 11)) || + ((sTime->tm_year < 100) || (sTime->tm_year > 199))) + { + // + // No - Let the application know the same by returning relevant + // message. + // + return false; + } + + // + // Set AM as default. + // + strcpy(pcAMPM, "AM"); + + // + // Convert 24-hour format into 12-hour format with AM/PM indication. + // + if(sTime->tm_hour == 0) + { + sTime->tm_hour = 12; + strcpy(pcAMPM, "AM"); + } + else if(sTime->tm_hour == 12) + { + strcpy(pcAMPM, "PM"); + } + else if(sTime->tm_hour > 12) + { + sTime->tm_hour -= 12; + strcpy(pcAMPM, "PM"); + } + + // + // Return that new data is available so that it can be displayed. + // + return true; +} + +//***************************************************************************** +// +// This function formats valid new date and time to be displayed on the home +// screen in the format "MMM DD, YYYY HH : MM : SS AM/PM". Example of this +// format is Aug 01, 2013 08:15:30 AM. It also indicates if valid new data +// is available or not. If date and time is invalid, this function sets the +// date and time to default value. +// +//***************************************************************************** +bool +DateTimeDisplayGet(char *pcBuf, uint32_t ui32BufSize) +{ + static uint32_t ui32SecondsPrev = 0xFF; + struct tm sTime; + char pcAMPM[3]; + uint32_t ui32Len; + + // + // Get the latest date and time and check the validity. + // + if(DateTimeGet(&sTime, pcAMPM) == false) + { + // + // Invalid - Force set the date and time to default values and return + // false to indicate no information to display. + // + g_bSetDate = true; + return false; + } + + // + // If date and time is valid, check if seconds have updated from previous + // visit. + // + if(ui32SecondsPrev == sTime.tm_sec) + { + // + // No - Return false to indicate no information to display. + // + return false; + } + + // + // If valid new date and time is available, update a local variable to keep + // track of seconds to determine new data for next visit. + // + ui32SecondsPrev = sTime.tm_sec; + + // + // Format the date and time into a user readable format. + // + ui32Len = usnprintf(pcBuf, ui32BufSize, "%s %02u, 20%02u ", + g_ppcMonth[sTime.tm_mon], sTime.tm_mday, + sTime.tm_year - 100); + usnprintf(&pcBuf[ui32Len], ui32BufSize - ui32Len, "%02u : %02u : %02u %s", + sTime.tm_hour, sTime.tm_min, sTime.tm_sec, pcAMPM); + + // + // Return true to indicate new information to display. + // + return true; +} + +//***************************************************************************** +// +// This function updates individual buffers with valid date and time to be +// displayed on the date screen so that the date and time can be updated. +// +//***************************************************************************** +bool +DateTimeUpdateGet(char *pcMon, char *pcDay, char *pcYear, char *pcHour, + char *pcMin, char *pcAMPM) +{ + struct tm sTime; + + // + // Get the latest date and time and check the validity. + // + if(DateTimeGet(&sTime, pcAMPM) == false) + { + // + // Invalid - Return here with false as no information to update. So + // use default values. + // + return false; + } + + // + // If date and time is valid, copy the date and time values into respective + // indexes. + // + g_ui32MonthIdx = sTime.tm_mon; + g_ui32DayIdx = sTime.tm_mday; + g_ui32YearIdx = sTime.tm_year - 100; + g_ui32HourIdx = sTime.tm_hour; + g_ui32MinIdx = sTime.tm_min; + + // + // Convert the date and time into string format and copy into supplied + // buffers. + // + usnprintf(pcMon, 4, "%s", g_ppcMonth[g_ui32MonthIdx]); + usnprintf(pcDay, 3, "%u", g_ui32DayIdx); + usnprintf(pcYear, 5, "20%02u", g_ui32YearIdx); + usnprintf(pcHour, 3, "%u", g_ui32HourIdx); + usnprintf(pcMin, 3, "%02u", g_ui32MinIdx); + + // + // Return true to indicate new information has been updated. + // + return true; +} + +//***************************************************************************** +// +// This function writes the requested date and time to the calendar logic of +// hibernation module. +// +//***************************************************************************** +void +DateTimeSet(void) +{ + struct tm sTime; + + // + // Get the latest date and time. This is done here so that unchanged + // parts of date and time can be written back as is. + // + HibernateCalendarGet(&sTime); + + // + // Set the date and time values that are to be updated. + // + sTime.tm_hour = g_ui32HourIdx; + sTime.tm_min = g_ui32MinIdx; + sTime.tm_mon = g_ui32MonthIdx; + sTime.tm_mday = g_ui32DayIdx; + sTime.tm_year = 100 + g_ui32YearIdx; + + // + // Convert 12-hour format into 24-hour format. + // + if(strcmp(g_pcAMPMBuf, "PM") == 0) + { + if(sTime.tm_hour < 12) + { + sTime.tm_hour += 12; + } + } + else + { + if(sTime.tm_hour > 11) + { + sTime.tm_hour -= 12; + } + } + + // + // Update the calendar logic of hibernation module with the requested data. + // + HibernateCalendarSet(&sTime); +} + +//***************************************************************************** +// +// This function returns the number of days in a month including for a leap +// year. +// +//***************************************************************************** +uint32_t +GetDaysInMonth(uint32_t ui32Year, uint32_t ui32Mon) +{ + // + // Return the number of days based on the month. + // + if(ui32Mon == 1) + { + // + // For February return the number of days based on the year being a + // leap year or not. + // + if((ui32Year % 4) == 0) + { + // + // If leap year return 29. + // + return 29; + } + else + { + // + // If not leap year return 28. + // + return 28; + } + } + else if((ui32Mon == 3) || (ui32Mon == 5) || (ui32Mon == 8) || + (ui32Mon == 10)) + { + // + // For April, June, September and November return 30. + // + return 30; + } + + // + // For all the other months return 31. + // + return 31; +} + +//***************************************************************************** +// +// This function returns the date and time value that is written to the +// calendar match register. 5 seconds are added to the current time. Any +// side-effects due to this addition are handled here. +// +//***************************************************************************** +void +GetCalendarMatchValue(struct tm* sTime) +{ + uint32_t ui32MonthDays; + + // + // Get the current date and time and add 5 secs to it. + // + HibernateCalendarGet(sTime); + sTime->tm_sec += 5; + + // + // Check if seconds is out of bounds. If so subtract seconds by 60 and + // increment minutes. + // + if(sTime->tm_sec > 59) + { + sTime->tm_sec -= 60; + sTime->tm_min++; + } + + // + // Check if minutes is out of bounds. If so subtract minutes by 60 and + // increment hours. + // + if(sTime->tm_min > 59) + { + sTime->tm_min -= 60; + sTime->tm_hour++; + } + + // + // Check if hours is out of bounds. If so subtract minutes by 24 and + // increment days. + // + if(sTime->tm_hour > 23) + { + sTime->tm_hour -= 24; + sTime->tm_mday++; + } + + // + // Since different months have varying number of days, get the number of + // days for the current month and year. + // + ui32MonthDays = GetDaysInMonth(sTime->tm_year, sTime->tm_mon); + + // + // Check if days is out of bounds for the current month and year. If so + // subtract days by the number of days in the current month and increment + // months. + // + if(sTime->tm_mday > ui32MonthDays) + { + sTime->tm_mday -= ui32MonthDays; + sTime->tm_mon++; + } + + // + // Check if months is out of bounds. If so subtract months by 11 and + // increment years. + // + if(sTime->tm_mon > 11) + { + sTime->tm_mon -= 11; + sTime->tm_year++; + } + + // + // Check if years is out of bounds. If so subtract years by 100. + // + if(sTime->tm_year > 99) + { + sTime->tm_year -= 100; + } +} +//***************************************************************************** +// +// Handle the Info String button press on Main Screen. +// +//***************************************************************************** +void +OnInfoStrBtnPress(tWidget *psWidget) +{ + // + // If this button is pressed then user wants to enter hibernation. So + // set the respective flag. + // + g_bHibernate = true; +} + +//***************************************************************************** +// +// Handle the "Date/Time" button press on Main Screen. +// +//***************************************************************************** +void +OnDateTimeSetBtnPress(tWidget *psWidget) +{ + // + // Update the date and time screen buffers before painting the screens. + // Even though only buffers used with the date screen are needed at this + // time, we update both to save few cycles. + // + DateTimeUpdateGet(g_pcMonBuf, g_pcDayBuf, g_pcYearBuf, g_pcHourBuf, + g_pcMinBuf, g_pcAMPMBuf); + + // + // Remove the main screen from the root. + // + WidgetRemove((tWidget *)&g_sMainScreen); + + // + // Add the date screen to the root. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sDateScreen); + + // + // Add the widget tree to message queue so that it can be drawn on the + // display. + // + WidgetPaint(WIDGET_ROOT); + + // + // Set the flag to indicate that the main screen is not active. + // + g_bMainScreen = false; +} + +//***************************************************************************** +// +// Handle the Month "-" button press on Date Screen. +// +//***************************************************************************** +void +OnMonUpBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to decrement the month. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. + // + g_ui32MonthIdx = (g_ui32MonthIdx == 0) ? 11 : g_ui32MonthIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + strcpy(g_pcMonBuf, g_ppcMonth[g_ui32MonthIdx]); + WidgetPaint(&g_sMonText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Month "+" button press on Date Screen. +// +//***************************************************************************** +void +OnMonDwnBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to increment the month. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32MonthIdx = (g_ui32MonthIdx == 11) ? 0 : g_ui32MonthIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + strcpy(g_pcMonBuf, g_ppcMonth[g_ui32MonthIdx]); + WidgetPaint(&g_sMonText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Day "-" button press on Date Screen. +// +//***************************************************************************** +void +OnDayUpBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to decrement the day. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. Make + // sure that the day index is adjusted based on the number of days in a + // month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx < 2) ? ui32DaysInMonth : g_ui32DayIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Day "+" button press on Date Screen. +// +//***************************************************************************** +void +OnDayDwnBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to increment the day. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // Make sure that the day index does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > (ui32DaysInMonth - 1)) ? 1 : + (g_ui32DayIdx + 1); + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Year "-" button press on Date Screen. +// +//***************************************************************************** +void +OnYearUpBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to decrement the year. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. + // + g_ui32YearIdx = (g_ui32YearIdx == 0) ? 99 : g_ui32YearIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcYearBuf, sizeof(g_pcYearBuf), "20%02u", g_ui32YearIdx); + WidgetPaint(&g_sYearText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Year "+" button press on Date Screen. +// +//***************************************************************************** +void +OnYearDwnBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to increment the year. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32YearIdx = (g_ui32YearIdx == 99) ? 0 : g_ui32YearIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcYearBuf, sizeof(g_pcYearBuf), "20%02u", g_ui32YearIdx); + WidgetPaint(&g_sYearText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the "NEXT" button press on Date Screen. +// +//***************************************************************************** +void +OnDateNextBtnPress(tWidget *psWidget) +{ + // + // Remove the main screen from the root. + // + WidgetRemove((tWidget *)&g_sDateScreen); + + // + // Add the date screen to the root. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sTimeScreen); + + // + // Add the widget tree to message queue so that it can be drawn on the + // display. + // + WidgetPaint(WIDGET_ROOT); +} + +//***************************************************************************** +// +// Handle the Hour "-" button press on Time Screen. +// +//***************************************************************************** +void +OnHourUpBtnPress(tWidget *psWidget) +{ + // + // User wants to decrement the hour. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. + // + g_ui32HourIdx = (g_ui32HourIdx == 1) ? 12 : g_ui32HourIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcHourBuf, sizeof(g_pcHourBuf), "%u", g_ui32HourIdx); + WidgetPaint(&g_sHourText.sBase); +} + +//***************************************************************************** +// +// Handle the Hour "+" button press on Time Screen. +// +//***************************************************************************** +void +OnHourDwnBtnPress(tWidget *psWidget) +{ + // + // User wants to increment the hour. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32HourIdx = (g_ui32HourIdx == 12) ? 1 : g_ui32HourIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcHourBuf, sizeof(g_pcHourBuf), "%u", g_ui32HourIdx); + WidgetPaint(&g_sHourText.sBase); +} + +//***************************************************************************** +// +// Handle the Minute "-" button press on Time Screen. +// +//***************************************************************************** +void +OnMinUpBtnPress(tWidget *psWidget) +{ + // + // User wants to decrement the minute. So reduce index by one such that + // the index cycles back to the bottom of the list if it is at the top. + // + g_ui32MinIdx = (g_ui32MinIdx == 0) ? 59 : g_ui32MinIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcMinBuf, sizeof(g_pcMinBuf), "%02u", g_ui32MinIdx); + WidgetPaint(&g_sMinText.sBase); +} + +//***************************************************************************** +// +// Handle the Minute "+" button press on Time Screen. +// +//***************************************************************************** +void +OnMinDwnBtnPress(tWidget *psWidget) +{ + // + // User wants to increment the minute. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32MinIdx = (g_ui32MinIdx == 59) ? 0 : g_ui32MinIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcMinBuf, sizeof(g_pcMinBuf), "%02u", g_ui32MinIdx); + WidgetPaint(&g_sMinText.sBase); +} + +//***************************************************************************** +// +// Handle the AM/PM "+" and "-" button press on Time Screen. The same function +// handles both the button presses. +// +//***************************************************************************** +void +OnAMPMBtnPress(tWidget *psWidget) +{ + // + // User wants to change AM to PM or vice versa. Change to "PM" if "AM" and + // vice versa. + // + if(strcmp(g_pcAMPMBuf, "AM") == 0) + { + strcpy(g_pcAMPMBuf, "PM"); + } + else + { + strcpy(g_pcAMPMBuf, "AM"); + } + + // + // Add the widget to the message queue so that it can be redrawn. + // + WidgetPaint(&g_sAMPMText.sBase); +} + +//***************************************************************************** +// +// Handle the "DONE" button press on Time Screen. +// +//***************************************************************************** +void +OnTimeDoneBtnPress(tWidget *psWidget) +{ + // + // Remove the main screen from the root. + // + WidgetRemove((tWidget *)&g_sTimeScreen); + + // + // Add the date screen to the root. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sMainScreen); + + // + // Add the widget tree to message queue so that it can be drawn on the + // display. + // + WidgetPaint(WIDGET_ROOT); + + // + // Set the flag to indicate that date and time have to updated. + // + g_bSetDate = true; +} + +//***************************************************************************** +// +// This example demonstrates the different hibernate wake sources. The +// microcontroller is put into hibernation by the user and wakes up based on +// timeout or one of the user inputs. This example also demonstrates the RTC +// calendar function that keeps track of date and time. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + struct tm sTime; + bool bUpdate; + uint32_t ui32SysClock, ui32Status, ui32HibernateCount, ui32Len; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "hibernate"); + + // + // Flush any cached drawing operations. + // + GrFlush(&sContext); + + // + // Set a font henceforth. + // + GrContextFontSet(&sContext, g_psFontCm16); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sMainScreen); + + // + // Enable the hibernate module. + // + SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE); + + // + // Initialize these variables before they are used. + // + ui32Status = 0; + ui32HibernateCount = 0; + + // + // Check to see if Hibernation module is already active, which could mean + // that the processor is waking from a hibernation. + // + if(HibernateIsActive()) + { + // + // Read the status bits to see what caused the wake. Clear the wake + // source so that the device can be put into hibernation again. + // + ui32Status = HibernateIntStatus(0); + HibernateIntClear(ui32Status); + + // + // Store the common part of the wake information message into a buffer. + // The wake source will be appended based on the status bits. + // + ui32Len = usnprintf(g_pcWakeBuf, sizeof(g_pcWakeBuf), + "Wake Due To : "); + + // + // Wake was due to RTC match. + // + if(ui32Status & HIBERNATE_INT_RTC_MATCH_0) + { + ui32Len = usnprintf(&g_pcWakeBuf[ui32Len], + sizeof(g_pcWakeBuf) - ui32Len, "%s", + g_ppcWakeSource[0]); + } + + // + // Wake was due to Reset button. + // + else if(ui32Status & HIBERNATE_INT_RESET_WAKE) + { + ui32Len = usnprintf(&g_pcWakeBuf[ui32Len], + sizeof(g_pcWakeBuf) - ui32Len, "%s", + g_ppcWakeSource[1]); + } + + // + // Wake was due to the External Wake pin. + // + else if(ui32Status & HIBERNATE_INT_PIN_WAKE) + { + ui32Len = usnprintf(&g_pcWakeBuf[ui32Len], + sizeof(g_pcWakeBuf) - ui32Len, "%s", + g_ppcWakeSource[2]); + } + + // + // Wake was due to GPIO wake. + // + else if(ui32Status & HIBERNATE_INT_GPIO_WAKE) + { + ui32Len = usnprintf(&g_pcWakeBuf[ui32Len], + sizeof(g_pcWakeBuf) - ui32Len, "%s", + g_ppcWakeSource[3]); + } + + // + // If the wake is due to any of the configured wake sources, then read + // the first location from the battery backed memory, as the + // hibernation count. + // + if(ui32Status & (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_RTC_MATCH_0 | + HIBERNATE_INT_GPIO_WAKE | HIBERNATE_INT_RESET_WAKE)) + { + HibernateDataGet(&ui32HibernateCount, 1); + } + } + + // + // Configure Hibernate module clock. + // + HibernateEnableExpClk(ui32SysClock); + + // + // If the wake was not due to the above sources, then it was a system + // reset. + // + if(!(ui32Status & (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_RTC_MATCH_0 | + HIBERNATE_INT_GPIO_WAKE | HIBERNATE_INT_RESET_WAKE))) + { + // + // Configure the module clock source. + // + HibernateClockConfig(HIBERNATE_OSC_LOWDRIVE); + + // + // Store that this was a system restart, not wake from hibernation. + // + ui32Len = usnprintf(g_pcWakeBuf, sizeof(g_pcWakeBuf), "%s", + g_ppcWakeSource[4]); + + // + // Set Calendar time to start from 08/29/2013 at 8:30AM + // + g_ui32MonthIdx = 7; + g_ui32DayIdx = 29; + g_ui32YearIdx = 13; + g_ui32HourIdx = 8; + g_ui32MinIdx = 30; + strcpy(g_pcMonBuf, "AUG"); + strcpy(g_pcDayBuf, "29"); + strcpy(g_pcYearBuf, "2013"); + strcpy(g_pcHourBuf, "8"); + strcpy(g_pcMinBuf, "30"); + strcpy(g_pcAMPMBuf, "AM"); + } + + // + // Store the hibernation count message into the respective widget buffer. + // + usnprintf(g_pcHibBuf, sizeof(g_pcHibBuf), "Hibernate count = %u", + ui32HibernateCount); + + // + // Store the text, that informs the user on how to hibernate, into the + // respective widget buffer. + // + usnprintf(g_pcInfoBuf0, sizeof(g_pcInfoBuf0), "To hibernate touch HERE."); + + // + // Add the widget tree to the message queue so that it can be drawn. + // + WidgetPaint(WIDGET_ROOT); + + // + // Enable RTC mode. + // + HibernateRTCEnable(); + + // + // Configure the hibernate module counter to 24-hour calendar mode. + // + HibernateCounterMode(HIBERNATE_COUNTER_24HR); + + // + // Configure GPIOs used as Hibernate wake source + // + GPIOPadConfigSet(GPIO_PORTK_BASE, 0x20, GPIO_STRENGTH_2MA, + (GPIO_PIN_TYPE_WAKE_LOW | GPIO_PIN_TYPE_STD_WPU)); + + // + // Enable processor interrupts. + // + IntMasterEnable(); + + // + // If hibernation count is very large, it may be that there was already + // a value in the hibernate memory, so reset the count. + // + ui32HibernateCount = (ui32HibernateCount > 10000) ? 0 : ui32HibernateCount; + + // + // Increment the hibernation count, and store it in the battery backed + // memory. + // + ui32HibernateCount++; + HibernateDataSet(&ui32HibernateCount, 1); + + // + // Initialize the necessary flags before entering indefinite loop. + // + g_bMainScreen = true; + g_bHibernate = false; + g_bSetDate = false; + + // + // Loop forever. + // + while(1) + { + // + // Process any messages for/from the widgets. + // + WidgetMessageQueueProcess(); + + // + // Check if date and time has to be written to the calendar logic of + // hibernate module. + // + if(g_bSetDate == true) + { + // + // Yes - Clear the flag to avoid unwanted writes to the calendar + // logic. + // + g_bSetDate = false; + + // + // Write the requested date and time. + // + DateTimeSet(); + + // + // Set the flag to indicate that the main screen is active. + // + g_bMainScreen = true; + } + + // + // Check if main screen is active and update the required buffers and + // redraw the required widgets. + // + if(g_bMainScreen) + { + // + // Update the buffer that displays date and time on the main + // screen. + // + bUpdate = DateTimeDisplayGet(g_pcDateTimeBuf, + sizeof(g_pcDateTimeBuf)); + + // + // Is a new value of date and time available to be displayed? + // + if(bUpdate == true) + { + // + // Yes - Redraw the widget. + // + WidgetPaint(&g_sDateTime.sBase); + } + } + + // + // Check if user wants to enter hibernation. + // + if(g_bHibernate == true) + { + // + // Yes - Clear the flag. + // + g_bHibernate = false; + + // + // Store the text, that informs the user on how to wake-up from + // hibernation, into the respective widget buffers. + // + usnprintf(g_pcInfoBuf1, sizeof(g_pcInfoBuf1), "To wake up wait " + "for 5 secs or press the"); + usnprintf(g_pcInfoBuf2, sizeof(g_pcInfoBuf2), "RESET button. " + "Refer document for"); + usnprintf(g_pcInfoBuf3, sizeof(g_pcInfoBuf3), "additional " + "wake sources."); + + // + // Redraw the widgets to display the updated buffers. These + // widgets have to be redrawn here instead of adding to the message + // queue by using WidgetPaint() function as + // WidgetMessageQueueProcess() function won't be executed before + // entering hibernation. + // + CanvasMsgProc(&g_sInfoStr1.sBase, WIDGET_MSG_PAINT, 0, 0); + CanvasMsgProc(&g_sInfoStr2.sBase, WIDGET_MSG_PAINT, 0, 0); + CanvasMsgProc(&g_sInfoStr3.sBase, WIDGET_MSG_PAINT, 0, 0); + + // + // Get calendar match value to be 5 seconds from the current time. + // + GetCalendarMatchValue(&sTime); + + // + // Set the calendar match register such that it wakes up from + // hibernation in 5 seconds. + // + HibernateCalendarMatchSet(0, &sTime); + + // + // Read and clear any status bits that might have been set since + // last clearing them. + // + ui32Status = HibernateIntStatus(0); + HibernateIntClear(ui32Status); + + // + // Configure Hibernate wake sources. + // + HibernateWakeSet(HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_GPIO | + HIBERNATE_WAKE_RESET | HIBERNATE_WAKE_RTC); + + // + // Request Hibernation. + // + HibernateRequest(); + + // + // Wait for a while for hibernate to activate. It should never get + // past this point. + // + SysCtlDelay(100); + + // + // If it ever gets here, store the text, that informs the user on + // what to do, into the respective widget buffers. + // + usnprintf(g_pcInfoBuf1, sizeof(g_pcInfoBuf1), "The controller did " + "not enter hibernate mode."); + usnprintf(g_pcInfoBuf2, sizeof(g_pcInfoBuf2), "TOUCH THE DISPLAY " + "TO RESTART."); + usnprintf(g_pcInfoBuf3, sizeof(g_pcInfoBuf3), ""); + + // + // Redraw the widgets to display the updated buffers. + // + CanvasMsgProc(&g_sInfoStr1.sBase, WIDGET_MSG_PAINT, 0, 0); + CanvasMsgProc(&g_sInfoStr2.sBase, WIDGET_MSG_PAINT, 0, 0); + CanvasMsgProc(&g_sInfoStr3.sBase, WIDGET_MSG_PAINT, 0, 0); + + // + // Wait for the user request to reset processor. Then reset the + // processor. + // + g_bHibernate = false; + while(g_bHibernate != true) + { + } + + // + // Reset the processor. + // + ROM_SysCtlReset(); + + // + // Wait here. + // + while(1) + { + } + } + } +} diff --git a/boards/dk-tm4c129x/hibernate/hibernate.ewd b/boards/dk-tm4c129x/hibernate/hibernate.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/hibernate/hibernate.ewp b/boards/dk-tm4c129x/hibernate/hibernate.ewp new file mode 100644 index 0000000..fd4a9ad --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.ewp @@ -0,0 +1,810 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\hibernate.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/hibernate/hibernate.icf b/boards/dk-tm4c129x/hibernate/hibernate.icf new file mode 100644 index 0000000..8ecb442 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// hibernate.icf - Linker configuration file for hibernate. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/hibernate/hibernate.ld b/boards/dk-tm4c129x/hibernate/hibernate.ld new file mode 100644 index 0000000..91ddcfa --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * hibernate.ld - Linker configuration file for hibernate. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/hibernate/hibernate.sct b/boards/dk-tm4c129x/hibernate/hibernate.sct new file mode 100644 index 0000000..25625e4 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; hibernate.sct - Linker configuration file for hibernate. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/hibernate/hibernate.uvopt b/boards/dk-tm4c129x/hibernate/hibernate.uvopt new file mode 100644 index 0000000..fa3bf3b --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + hibernate + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\hibernate.c + hibernate.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/hibernate/hibernate.uvproj b/boards/dk-tm4c129x/hibernate/hibernate.uvproj new file mode 100644 index 0000000..f9c0bb3 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + hibernate + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + hibernate + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\hibernate.bin .\rvmdk\hibernate.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 SNOWFLAKE + + .;..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + hibernate.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + hibernate.c + 1 + .\hibernate.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/hibernate/hibernate_ccs.cmd b/boards/dk-tm4c129x/hibernate/hibernate_ccs.cmd new file mode 100644 index 0000000..e89de9d --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/hibernate_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * hibernate_ccs.cmd - CCS linker configuration file for hibernate. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/hibernate/readme.txt b/boards/dk-tm4c129x/hibernate/readme.txt new file mode 100644 index 0000000..d446a9f --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/readme.txt @@ -0,0 +1,37 @@ +Hibernate Example + +An example to demonstrate the use of the Hibernation module. The user +can put the microcontroller in hibernation by touching the display. The +microcontroller will then wake on its own after 5 seconds, or immediately +if the user presses the RESET button. External WAKE pin and GPIO (PK5) +wake sources can also be used to wake immediately from hibernation. The +following wiring enables the use of these pins as wake sources. + WAKE on J27 to SEL on J37 + PK5 on J28 to UP on J37 + +The program keeps a count of the number of times it has entered +hibernation. The value of the counter is stored in the battery backed +memory of the Hibernation module so that it can be retrieved when the +microcontroller wakes. The program displays the wall time and date by +making use of the calendar function of the Hibernate module. User can +modify the date and time if so desired. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/hibernate/rvmdk/hibernate.axf b/boards/dk-tm4c129x/hibernate/rvmdk/hibernate.axf new file mode 100644 index 0000000..e2192cb Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/rvmdk/hibernate.axf differ diff --git a/boards/dk-tm4c129x/hibernate/rvmdk/hibernate.bin b/boards/dk-tm4c129x/hibernate/rvmdk/hibernate.bin new file mode 100644 index 0000000..9e86066 Binary files /dev/null and b/boards/dk-tm4c129x/hibernate/rvmdk/hibernate.bin differ diff --git a/boards/dk-tm4c129x/hibernate/startup_ccs.c b/boards/dk-tm4c129x/hibernate/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hibernate/startup_ewarm.c b/boards/dk-tm4c129x/hibernate/startup_ewarm.c new file mode 100644 index 0000000..860b8a6 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hibernate/startup_gcc.c b/boards/dk-tm4c129x/hibernate/startup_gcc.c new file mode 100644 index 0000000..fad3049 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/hibernate/startup_rvmdk.S b/boards/dk-tm4c129x/hibernate/startup_rvmdk.S new file mode 100644 index 0000000..07659c1 --- /dev/null +++ b/boards/dk-tm4c129x/hibernate/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/interrupts/Makefile b/boards/dk-tm4c129x/interrupts/Makefile new file mode 100644 index 0000000..bf038e3 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/Makefile @@ -0,0 +1,89 @@ +#****************************************************************************** +# +# Makefile - Rules for building the interrupts example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the interrupts example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/interrupts.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the interrupts example. +# +${COMPILER}/interrupts.axf: ${COMPILER}/frame.o +${COMPILER}/interrupts.axf: ${COMPILER}/interrupts.o +${COMPILER}/interrupts.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/interrupts.axf: ${COMPILER}/pinout.o +${COMPILER}/interrupts.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/interrupts.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/interrupts.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/interrupts.axf: interrupts.ld +SCATTERgcc_interrupts=interrupts.ld +ENTRY_interrupts=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/interrupts/ccs/.ccsimportspec b/boards/dk-tm4c129x/interrupts/ccs/.ccsimportspec new file mode 100644 index 0000000..9033256 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/interrupts/ccs/.ccsproject b/boards/dk-tm4c129x/interrupts/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/interrupts/ccs/.cproject b/boards/dk-tm4c129x/interrupts/ccs/.cproject new file mode 100644 index 0000000..0e1ef48 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/interrupts/ccs/.project b/boards/dk-tm4c129x/interrupts/ccs/.project new file mode 100644 index 0000000..a801de8 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/.project @@ -0,0 +1,65 @@ + + + interrupts + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + interrupts.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/interrupts/interrupts.c + + + interrupts_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/interrupts/interrupts_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/interrupts/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/interrupts/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/interrupts/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.bin b/boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.bin new file mode 100644 index 0000000..df13101 Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.bin differ diff --git a/boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.out b/boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.out new file mode 100644 index 0000000..07e6760 Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/ccs/Debug/interrupts.out differ diff --git a/boards/dk-tm4c129x/interrupts/ccs/macros.ini_initial b/boards/dk-tm4c129x/interrupts/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/interrupts/ccs/target_config.ccxml b/boards/dk-tm4c129x/interrupts/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.bin b/boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.bin new file mode 100644 index 0000000..e0df21a Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.bin differ diff --git a/boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.out b/boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.out new file mode 100644 index 0000000..a48df2c Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/ewarm/Exe/interrupts.out differ diff --git a/boards/dk-tm4c129x/interrupts/gcc/interrupts.axf b/boards/dk-tm4c129x/interrupts/gcc/interrupts.axf new file mode 100644 index 0000000..5d93993 Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/gcc/interrupts.axf differ diff --git a/boards/dk-tm4c129x/interrupts/gcc/interrupts.bin b/boards/dk-tm4c129x/interrupts/gcc/interrupts.bin new file mode 100644 index 0000000..d5e6f81 Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/gcc/interrupts.bin differ diff --git a/boards/dk-tm4c129x/interrupts/interrupts.c b/boards/dk-tm4c129x/interrupts/interrupts.c new file mode 100644 index 0000000..4a3cd5e --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.c @@ -0,0 +1,593 @@ +//***************************************************************************** +// +// interrupts.c - Interrupt preemption and tail-chaining example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/systick.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Interrupts (interrupts)

      +//! +//! This example application demonstrates the interrupt preemption and +//! tail-chaining capabilities of Cortex-M4 microprocessor and NVIC. Nested +//! interrupts are synthesized when the interrupts have the same priority, +//! increasing priorities, and decreasing priorities. With increasing +//! priorities, preemption will occur; in the other two cases tail-chaining +//! will occur. The currently pending interrupts and the currently executing +//! interrupt will be displayed on the display; GPIO pins B3, L1 and L0 (the +//! GPIO on jumper J27 on the left edge of the board) will be asserted upon +//! interrupt handler entry and de-asserted before interrupt handler exit so +//! that the off-to-on time can be observed with a scope or logic analyzer to +//! see the speed of tail-chaining (for the two cases where tail-chaining is +//! occurring). +// +//***************************************************************************** + + +//***************************************************************************** +// +// The count of interrupts received. This is incremented as each interrupt +// handler runs, and its value saved into interrupt handler specific values to +// determine the order in which the interrupt handlers were executed. +// +//***************************************************************************** +volatile uint32_t g_ui32Index; + +//***************************************************************************** +// +// The value of g_ui32Index when the INT_GPIOA interrupt was processed. +// +//***************************************************************************** +volatile uint32_t g_ui32GPIOa; + +//***************************************************************************** +// +// The value of g_ui32Index when the INT_GPIOB interrupt was processed. +// +//***************************************************************************** +volatile uint32_t g_ui32GPIOb; + +//***************************************************************************** +// +// The value of g_ui32Index when the INT_GPIOC interrupt was processed. +// +//***************************************************************************** +volatile uint32_t g_ui32GPIOc; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// GPIOs that are used for this example. +// +//***************************************************************************** +#define GPIO_A_BASE GPIO_PORTB_BASE +#define GPIO_A_PIN GPIO_PIN_3 +#define GPIO_B_BASE GPIO_PORTL_BASE +#define GPIO_B_PIN GPIO_PIN_1 +#define GPIO_C_BASE GPIO_PORTL_BASE +#define GPIO_C_PIN GPIO_PIN_0 + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Delay for the specified number of seconds. Depending upon the current +// SysTick value, the delay will be between N-1 and N seconds (i.e. N-1 full +// seconds are guaranteed, along with the remainder of the current second). +// +//***************************************************************************** +void +Delay(uint32_t ui32Seconds) +{ + uint8_t ui8Loop; + + // + // Loop while there are more seconds to wait. + // + while(ui32Seconds--) + { + for(ui8Loop = 0; ui8Loop < 100; ui8Loop++) + { + // + // Wait until the SysTick value is less than 1000. + // + while(ROM_SysTickValueGet() > 1000) + { + } + + // + // Wait until the SysTick value is greater than 1000. + // + while(ROM_SysTickValueGet() < 1000) + { + } + } + } +} + +//***************************************************************************** +// +// Display the interrupt state on the display. The currently active and pending +// interrupts are displayed. +// +//***************************************************************************** +void +DisplayIntStatus(void) +{ + uint32_t ui32Temp; + char pcBuffer[6]; + + // + // Display the currently active interrupts. + // + ui32Temp = HWREG(NVIC_ACTIVE0); + pcBuffer[0] = ' '; + pcBuffer[1] = (ui32Temp & 1) ? '1' : ' '; + pcBuffer[2] = (ui32Temp & 2) ? '2' : ' '; + pcBuffer[3] = (ui32Temp & 4) ? '3' : ' '; + pcBuffer[4] = ' '; + pcBuffer[5] = '\0'; + GrStringDrawCentered(&g_sContext, pcBuffer, -1, 130, 150, 1); + + // + // Display the currently pending interrupts. + // + ui32Temp = HWREG(NVIC_PEND0); + pcBuffer[1] = (ui32Temp & 1) ? '1' : ' '; + pcBuffer[2] = (ui32Temp & 2) ? '2' : ' '; + pcBuffer[3] = (ui32Temp & 4) ? '3' : ' '; + GrStringDrawCentered(&g_sContext, pcBuffer, -1, 270, 150, 1); + + // + // Flush the display. + // + GrFlush(&g_sContext); +} + +//***************************************************************************** +// +// This is the handler for INT_GPIOA. It simply saves the interrupt sequence +// number. +// +//***************************************************************************** +void +IntGPIOa(void) +{ + // + // Set GPIO high to indicate entry to this interrupt handler. + // + ROM_GPIOPinWrite(GPIO_A_BASE, GPIO_A_PIN, GPIO_A_PIN); + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Wait two seconds. + // + Delay(2); + + // + // Save and increment the interrupt sequence number. + // + g_ui32GPIOa = g_ui32Index++; + + // + // Set GPIO low to indicate exit from this interrupt handler. + // + ROM_GPIOPinWrite(GPIO_A_BASE, GPIO_A_PIN, 0); +} + +//***************************************************************************** +// +// This is the handler for INT_GPIOB. It triggers INT_GPIOA and saves the +// interrupt sequence number. +// +//***************************************************************************** +void +IntGPIOb(void) +{ + // + // Set GPIO high to indicate entry to this interrupt handler. + // + ROM_GPIOPinWrite(GPIO_B_BASE, GPIO_B_PIN, GPIO_B_PIN); + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Trigger the INT_GPIOA interrupt. + // + HWREG(NVIC_SW_TRIG) = INT_GPIOA - 16; + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Wait two seconds. + // + Delay(2); + + // + // Save and increment the interrupt sequence number. + // + g_ui32GPIOb = g_ui32Index++; + + // + // Set GPIO low to indicate exit from this interrupt handler. + // + ROM_GPIOPinWrite(GPIO_B_BASE, GPIO_B_PIN, 0); +} + +//***************************************************************************** +// +// This is the handler for INT_GPIOC. It triggers INT_GPIOB and saves the +// interrupt sequence number. +// +//***************************************************************************** +void +IntGPIOc(void) +{ + // + // Set GPIO high to indicate entry to this interrupt handler. + // + ROM_GPIOPinWrite(GPIO_C_BASE, GPIO_C_PIN, GPIO_C_PIN); + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Trigger the INT_GPIOB interrupt. + // + HWREG(NVIC_SW_TRIG) = INT_GPIOB - 16; + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Wait two seconds. + // + Delay(2); + + // + // Save and increment the interrupt sequence number. + // + g_ui32GPIOc = g_ui32Index++; + + // + // Set GPIO low to indicate exit from this interrupt handler. + // + ROM_GPIOPinWrite(GPIO_C_BASE, GPIO_C_PIN, 0); +} + +//***************************************************************************** +// +// This is the main example program. It checks to see that the interrupts are +// processed in the correct order when they have identical priorities, +// increasing priorities, and decreasing priorities. This exercises interrupt +// preemption and tail chaining. +// +//***************************************************************************** +int +main(void) +{ + uint_fast8_t ui8Error; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "interrupts"); + + // + // Put the status header text on the display. + // + GrContextFontSet(&g_sContext, g_psFontCm20); + GrStringDrawCentered(&g_sContext, "Active: Pending: ", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 150, 0); + + // + // Configure the B3, L1 and L0 to be outputs to indicate entry/exit of one + // of the interrupt handlers. + // + GPIOPinTypeGPIOOutput(GPIO_A_BASE, GPIO_A_PIN); + GPIOPinTypeGPIOOutput(GPIO_B_BASE, GPIO_B_PIN); + GPIOPinTypeGPIOOutput(GPIO_C_BASE, GPIO_C_PIN); + GPIOPinWrite(GPIO_A_BASE, GPIO_A_PIN, 0); + GPIOPinWrite(GPIO_B_BASE, GPIO_B_PIN, 0); + GPIOPinWrite(GPIO_C_BASE, GPIO_C_PIN, 0); + + // + // Set up and enable the SysTick timer. It will be used as a reference + // for delay loops in the interrupt handlers. The SysTick timer period + // will be set up for 100 times per second. + // + ROM_SysTickPeriodSet(ui32SysClock / 100); + ROM_SysTickEnable(); + + // + // Reset the error indicator. + // + ui8Error = 0; + + // + // Enable interrupts to the processor. + // + ROM_IntMasterEnable(); + + // + // Enable the interrupts. + // + ROM_IntEnable(INT_GPIOA); + ROM_IntEnable(INT_GPIOB); + ROM_IntEnable(INT_GPIOC); + + // + // Indicate that the equal interrupt priority test is beginning. + // + GrStringDrawCentered(&g_sContext, "Equal Priority", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 60, 1); + + // + // Set the interrupt priorities so they are all equal. + // + ROM_IntPrioritySet(INT_GPIOA, 0x00); + ROM_IntPrioritySet(INT_GPIOB, 0x00); + ROM_IntPrioritySet(INT_GPIOC, 0x00); + + // + // Reset the interrupt flags. + // + g_ui32GPIOa = 0; + g_ui32GPIOb = 0; + g_ui32GPIOc = 0; + g_ui32Index = 1; + + // + // Trigger the interrupt for GPIO C. + // + HWREG(NVIC_SW_TRIG) = INT_GPIOC - 16; + + // + // Put the current interrupt state on the LCD. + // + DisplayIntStatus(); + + // + // Verify that the interrupts were processed in the correct order. + // + if((g_ui32GPIOa != 3) || (g_ui32GPIOb != 2) || (g_ui32GPIOc != 1)) + { + ui8Error |= 1; + } + + // + // Wait two seconds. + // + Delay(2); + + // + // Indicate that the decreasing interrupt priority test is beginning. + // + GrStringDrawCentered(&g_sContext, " Decreasing Priority ", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 60, 1); + + // + // Set the interrupt priorities so that they are decreasing (i.e. C > B > + // A). + // + ROM_IntPrioritySet(INT_GPIOA, 0x80); + ROM_IntPrioritySet(INT_GPIOB, 0x40); + ROM_IntPrioritySet(INT_GPIOC, 0x00); + + // + // Reset the interrupt flags. + // + g_ui32GPIOa = 0; + g_ui32GPIOb = 0; + g_ui32GPIOc = 0; + g_ui32Index = 1; + + // + // Trigger the interrupt for GPIO C. + // + HWREG(NVIC_SW_TRIG) = INT_GPIOC - 16; + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Verify that the interrupts were processed in the correct order. + // + if((g_ui32GPIOa != 3) || (g_ui32GPIOb != 2) || (g_ui32GPIOc != 1)) + { + ui8Error |= 2; + } + + // + // Wait two seconds. + // + Delay(2); + + // + // Indicate that the increasing interrupt priority test is beginning. + // + GrStringDrawCentered(&g_sContext, " Increasing Priority ", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 60, 1); + + // + // Set the interrupt priorities so that they are increasing (i.e. C < B < + // A). + // + ROM_IntPrioritySet(INT_GPIOA, 0x00); + ROM_IntPrioritySet(INT_GPIOB, 0x40); + ROM_IntPrioritySet(INT_GPIOC, 0x80); + + // + // Reset the interrupt flags. + // + g_ui32GPIOa = 0; + g_ui32GPIOb = 0; + g_ui32GPIOc = 0; + g_ui32Index = 1; + + // + // Trigger the interrupt for GPIO C. + // + HWREG(NVIC_SW_TRIG) = INT_GPIOC - 16; + + // + // Put the current interrupt state on the display. + // + DisplayIntStatus(); + + // + // Verify that the interrupts were processed in the correct order. + // + if((g_ui32GPIOa != 1) || (g_ui32GPIOb != 2) || (g_ui32GPIOc != 3)) + { + ui8Error |= 4; + } + + // + // Wait two seconds. + // + Delay(2); + + // + // Disable the interrupts. + // + ROM_IntDisable(INT_GPIOA); + ROM_IntDisable(INT_GPIOB); + ROM_IntDisable(INT_GPIOC); + + // + // Disable interrupts to the processor. + // + ROM_IntMasterDisable(); + + // + // Print out the test results. + // + GrStringDrawCentered(&g_sContext, " Interrupt Priority ", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 60, 1); + if(ui8Error) + { + GrStringDrawCentered(&g_sContext, " Equal: P Inc: P Dec: P ", + -1, GrContextDpyWidthGet(&g_sContext) / 2, 150, 1); + if(ui8Error & 1) + { + GrStringDrawCentered(&g_sContext, " F ", -1, 113, 150, 1); + } + if(ui8Error & 2) + { + GrStringDrawCentered(&g_sContext, " F ", -1, 187, 150, 1); + } + if(ui8Error & 4) + { + GrStringDrawCentered(&g_sContext, " F ", -1, 272, 150, 1); + } + } + else + { + GrStringDrawCentered(&g_sContext, " Success! ", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 150, 1); + } + + // + // Flush the display. + // + GrFlush(&g_sContext); + + // + // Loop forever. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/interrupts/interrupts.ewd b/boards/dk-tm4c129x/interrupts/interrupts.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/interrupts/interrupts.ewp b/boards/dk-tm4c129x/interrupts/interrupts.ewp new file mode 100644 index 0000000..45888bc --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\interrupts.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + diff --git a/boards/dk-tm4c129x/interrupts/interrupts.icf b/boards/dk-tm4c129x/interrupts/interrupts.icf new file mode 100644 index 0000000..8768d65 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// interrupts.icf - Linker configuration file for interrupts. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/interrupts/interrupts.ld b/boards/dk-tm4c129x/interrupts/interrupts.ld new file mode 100644 index 0000000..3865cc3 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * interrupts.ld - Linker configuration file for interrupts. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/interrupts/interrupts.sct b/boards/dk-tm4c129x/interrupts/interrupts.sct new file mode 100644 index 0000000..2b4f99e --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; interrupts.sct - Linker configuration file for interrupts. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/interrupts/interrupts.uvopt b/boards/dk-tm4c129x/interrupts/interrupts.uvopt new file mode 100644 index 0000000..e62284e --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + interrupts + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\interrupts.c + interrupts.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/interrupts/interrupts.uvproj b/boards/dk-tm4c129x/interrupts/interrupts.uvproj new file mode 100644 index 0000000..5fca192 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + interrupts + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + interrupts + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\interrupts.bin .\rvmdk\interrupts.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + interrupts.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + interrupts.c + 1 + .\interrupts.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/interrupts/interrupts_ccs.cmd b/boards/dk-tm4c129x/interrupts/interrupts_ccs.cmd new file mode 100644 index 0000000..584ef34 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/interrupts_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * interrupts_ccs.cmd - CCS linker configuration file for interrupts. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/interrupts/readme.txt b/boards/dk-tm4c129x/interrupts/readme.txt new file mode 100644 index 0000000..b011a90 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/readme.txt @@ -0,0 +1,34 @@ +Interrupts + +This example application demonstrates the interrupt preemption and +tail-chaining capabilities of Cortex-M4 microprocessor and NVIC. Nested +interrupts are synthesized when the interrupts have the same priority, +increasing priorities, and decreasing priorities. With increasing +priorities, preemption will occur; in the other two cases tail-chaining +will occur. The currently pending interrupts and the currently executing +interrupt will be displayed on the display; GPIO pins B3, L1 and L0 (the +GPIO on jumper J27 on the left edge of the board) will be asserted upon +interrupt handler entry and de-asserted before interrupt handler exit so +that the off-to-on time can be observed with a scope or logic analyzer to +see the speed of tail-chaining (for the two cases where tail-chaining is +occurring). + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/interrupts/rvmdk/interrupts.axf b/boards/dk-tm4c129x/interrupts/rvmdk/interrupts.axf new file mode 100644 index 0000000..cbf8773 Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/rvmdk/interrupts.axf differ diff --git a/boards/dk-tm4c129x/interrupts/rvmdk/interrupts.bin b/boards/dk-tm4c129x/interrupts/rvmdk/interrupts.bin new file mode 100644 index 0000000..f11b71e Binary files /dev/null and b/boards/dk-tm4c129x/interrupts/rvmdk/interrupts.bin differ diff --git a/boards/dk-tm4c129x/interrupts/startup_ccs.c b/boards/dk-tm4c129x/interrupts/startup_ccs.c new file mode 100644 index 0000000..a6d72a0 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void IntGPIOa(void); +extern void IntGPIOb(void); +extern void IntGPIOc(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntGPIOa, // GPIO Port A + IntGPIOb, // GPIO Port B + IntGPIOc, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/interrupts/startup_ewarm.c b/boards/dk-tm4c129x/interrupts/startup_ewarm.c new file mode 100644 index 0000000..19757a3 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void IntGPIOa(void); +extern void IntGPIOb(void); +extern void IntGPIOc(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntGPIOa, // GPIO Port A + IntGPIOb, // GPIO Port B + IntGPIOc, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/interrupts/startup_gcc.c b/boards/dk-tm4c129x/interrupts/startup_gcc.c new file mode 100644 index 0000000..4bd2865 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void IntGPIOa(void); +extern void IntGPIOb(void); +extern void IntGPIOc(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntGPIOa, // GPIO Port A + IntGPIOb, // GPIO Port B + IntGPIOc, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/interrupts/startup_rvmdk.S b/boards/dk-tm4c129x/interrupts/startup_rvmdk.S new file mode 100644 index 0000000..e9bd094 --- /dev/null +++ b/boards/dk-tm4c129x/interrupts/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN IntGPIOa + EXTERN IntGPIOb + EXTERN IntGPIOc + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntGPIOa ; GPIO Port A + DCD IntGPIOb ; GPIO Port B + DCD IntGPIOc ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/lang_demo/Makefile b/boards/dk-tm4c129x/lang_demo/Makefile new file mode 100644 index 0000000..ff02631 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/Makefile @@ -0,0 +1,102 @@ +#****************************************************************************** +# +# Makefile - Rules for building the lang_demo example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fonts/lang_demo +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/fonts/lang_demo +IPATH+=../../../../third_party + +# +# The default rule, which causes the lang_demo example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/lang_demo.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the lang_demo example. +# +${COMPILER}/lang_demo.axf: ${COMPILER}/fontcustom14pt.o +${COMPILER}/lang_demo.axf: ${COMPILER}/fontcustom20pt.o +${COMPILER}/lang_demo.axf: ${COMPILER}/fontcustomr14pt.o +${COMPILER}/lang_demo.axf: ${COMPILER}/fontcustomr20pt.o +${COMPILER}/lang_demo.axf: ${COMPILER}/frame.o +${COMPILER}/lang_demo.axf: ${COMPILER}/images.o +${COMPILER}/lang_demo.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/lang_demo.axf: ${COMPILER}/lang_demo.o +${COMPILER}/lang_demo.axf: ${COMPILER}/langremap.o +${COMPILER}/lang_demo.axf: ${COMPILER}/language.o +${COMPILER}/lang_demo.axf: ${COMPILER}/pinout.o +${COMPILER}/lang_demo.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/lang_demo.axf: ${COMPILER}/touch.o +${COMPILER}/lang_demo.axf: ${COMPILER}/ustdlib.o +${COMPILER}/lang_demo.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/lang_demo.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/lang_demo.axf: lang_demo.ld +SCATTERgcc_lang_demo=lang_demo.ld +ENTRY_lang_demo=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/lang_demo/ccs/.ccsimportspec b/boards/dk-tm4c129x/lang_demo/ccs/.ccsimportspec new file mode 100644 index 0000000..9a5b64f --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/lang_demo/ccs/.ccsproject b/boards/dk-tm4c129x/lang_demo/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/lang_demo/ccs/.cproject b/boards/dk-tm4c129x/lang_demo/ccs/.cproject new file mode 100644 index 0000000..dd6d34b --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/.cproject @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/lang_demo/ccs/.project b/boards/dk-tm4c129x/lang_demo/ccs/.project new file mode 100644 index 0000000..1db2069 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/.project @@ -0,0 +1,110 @@ + + + lang_demo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + images.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/lang_demo/images.c + + + lang_demo.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/lang_demo/lang_demo.c + + + lang_demo_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/lang_demo/lang_demo_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/lang_demo/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fonts/lang_demo/fontcustom14pt.c + 1 + SW_ROOT/third_party/fonts/lang_demo/fontcustom14pt.c + + + third_party/fonts/lang_demo/fontcustom20pt.c + 1 + SW_ROOT/third_party/fonts/lang_demo/fontcustom20pt.c + + + third_party/fonts/lang_demo/fontcustomr14pt.c + 1 + SW_ROOT/third_party/fonts/lang_demo/fontcustomr14pt.c + + + third_party/fonts/lang_demo/fontcustomr20pt.c + 1 + SW_ROOT/third_party/fonts/lang_demo/fontcustomr20pt.c + + + third_party/fonts/lang_demo/langremap.c + 1 + SW_ROOT/third_party/fonts/lang_demo/langremap.c + + + third_party/fonts/lang_demo/language.c + 1 + SW_ROOT/third_party/fonts/lang_demo/language.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/lang_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/lang_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.bin b/boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.bin new file mode 100644 index 0000000..4a14a30 Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.bin differ diff --git a/boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.out b/boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.out new file mode 100644 index 0000000..27ea1a7 Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/ccs/Debug/lang_demo.out differ diff --git a/boards/dk-tm4c129x/lang_demo/ccs/macros.ini_initial b/boards/dk-tm4c129x/lang_demo/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/lang_demo/ccs/target_config.ccxml b/boards/dk-tm4c129x/lang_demo/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.bin b/boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.bin new file mode 100644 index 0000000..a69b8ce Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.bin differ diff --git a/boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.out b/boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.out new file mode 100644 index 0000000..4e14def Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/ewarm/Exe/lang_demo.out differ diff --git a/boards/dk-tm4c129x/lang_demo/gcc/lang_demo.axf b/boards/dk-tm4c129x/lang_demo/gcc/lang_demo.axf new file mode 100644 index 0000000..3d088c6 Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/gcc/lang_demo.axf differ diff --git a/boards/dk-tm4c129x/lang_demo/gcc/lang_demo.bin b/boards/dk-tm4c129x/lang_demo/gcc/lang_demo.bin new file mode 100644 index 0000000..c62d26b Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/gcc/lang_demo.bin differ diff --git a/boards/dk-tm4c129x/lang_demo/images.c b/boards/dk-tm4c129x/lang_demo/images.c new file mode 100644 index 0000000..fcda2f5 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/images.c @@ -0,0 +1,170 @@ +//***************************************************************************** +// +// images.c - Data for the images used by the application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" + +//***************************************************************************** +// +// This is the image of the blue push button background. +// +//***************************************************************************** +const uint8_t g_pui8Blue50x50[] = +{ + IMAGE_FMT_4BPP_COMP, + 50, 0, + 50, 0, + + 15, + 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x63, 0x00, 0x00, + 0x6f, 0x00, 0x00, + 0x78, 0x00, 0x00, + 0x7c, 0x00, 0x00, + 0x7d, 0x00, 0x00, + 0x7f, 0x00, 0x00, + 0x81, 0x00, 0x00, + 0x85, 0x00, 0x00, + 0x89, 0x00, 0x00, + 0x8d, 0x00, 0x00, + 0x93, 0x00, 0x00, + 0x9b, 0x00, 0x00, + 0xa9, 0x00, 0x00, + + 0x81, 0x03, 0x13, 0x9e, 0xfe, 0xff, 0xff, 0xff, 0xe9, 0x8a, 0xd1, 0xfe, + 0xd7, 0x31, 0x07, 0x2e, 0x51, 0xee, 0x35, 0xee, 0xee, 0xe9, 0xd4, 0xa2, + 0x35, 0x1e, 0x41, 0x41, 0xfe, 0x3f, 0xee, 0xee, 0xdd, 0xcc, 0x91, 0x33, + 0x40, 0x03, 0x41, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdd, 0xc1, 0xe9, 0xd1, + 0xdc, 0xcd, 0xcc, 0xaa, 0x20, 0x32, 0x41, 0x3f, 0x41, 0xed, 0xdc, 0xcc, + 0xcc, 0xcc, 0xe9, 0x81, 0xd1, 0xbb, 0xbb, 0xcc, 0xcb, 0xba, 0x52, 0x39, + 0x40, 0x03, 0x42, 0xcc, 0xba, 0xaa, 0x99, 0x99, 0x99, 0xc0, 0xe9, 0xd1, + 0xaa, 0xaa, 0xab, 0xa9, 0x95, 0x20, 0x04, 0x00, 0x00, 0x1f, 0xff, 0xfe, + 0x41, 0x99, 0x98, 0x1c, 0x88, 0x88, 0x88, 0xe9, 0xd1, 0x29, 0x99, 0x98, + 0x00, 0x41, 0x00, 0x00, 0xef, 0xff, 0xee, 0xdc, 0xba, 0x60, 0x99, 0x4f, + 0x01, 0x89, 0x99, 0x99, 0x98, 0x53, 0x01, 0x00, 0x02, 0xff, 0xfe, 0xed, + 0xcb, 0xa9, 0x47, 0x80, 0x35, 0x98, 0x64, 0x10, 0x0d, 0xef, 0xee, 0xdc, + 0x30, 0xba, 0x98, 0x3f, 0x04, 0x99, 0x88, 0x54, 0x30, 0x06, 0x1e, 0xfe, + 0xed, 0xcb, 0xa9, 0x47, 0x06, 0x86, 0x01, 0x55, 0x41, 0x3e, 0xfe, 0xed, + 0xba, 0x98, 0x3f, 0x81, 0x3f, 0x65, 0x41, 0x5e, 0xee, 0xdc, 0xb9, 0x47, + 0x80, 0x07, 0x88, 0x65, 0x42, 0xbd, 0xee, 0xdb, 0xa9, 0xe1, 0x3f, 0x3f, + 0x39, 0xcc, 0xed, 0xcb, 0x98, 0x3f, 0x81, 0x3f, 0x88, 0x65, 0x43, 0xcc, + 0xdd, 0xca, 0x3f, 0xc3, 0x3f, 0x39, 0x42, 0xcb, 0xdc, 0xba, 0x3f, 0x3f, + 0xb0, 0x3c, 0xb9, 0x47, 0x07, 0x88, 0x88, 0x75, 0x32, 0x18, 0xcb, 0xdc, + 0xa9, 0x3f, 0x07, 0x88, 0x88, 0x65, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xf8, 0x3f, 0x3f, 0x3f, 0x07, 0x01, 0x64, 0x32, 0xcb, + 0x73, 0xcc, 0x3f, 0x3f, 0x3b, 0x9b, 0xcb, 0x3f, 0x07, 0x00, 0x88, 0x88, + 0x87, 0x54, 0x32, 0x4a, 0xba, 0x99, 0x60, 0x98, 0x37, 0x07, 0x86, 0x54, + 0x32, 0x2a, 0xaa, 0x60, 0xa9, 0x47, 0x07, 0x88, 0x75, 0x43, 0x21, 0x19, + 0x30, 0x8a, 0x99, 0x3f, 0x07, 0x88, 0x65, 0x43, 0x21, 0x0c, 0x04, 0x49, + 0x98, 0x98, 0x37, 0x06, 0x86, 0x54, 0x06, 0x33, 0x20, 0x02, 0x46, 0x68, + 0x47, 0x07, 0x76, 0x01, 0x54, 0x32, 0x10, 0x00, 0x44, 0x66, 0x66, 0x2f, + 0x80, 0x05, 0x87, 0x65, 0x43, 0x32, 0x00, 0x00, 0x13, 0x18, 0x45, 0x55, + 0x66, 0x3f, 0x04, 0x66, 0x54, 0x33, 0x00, 0x21, 0x00, 0x00, 0x01, 0x34, + 0x45, 0x56, 0x66, 0x60, 0x78, 0x2f, 0x01, 0x76, 0x54, 0x43, 0x32, 0x10, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x44, 0x45, 0x55, 0x37, 0x82, 0x01, 0x66, + 0x55, 0x44, 0x33, 0x21, 0x41, 0x00, 0x00, 0x01, 0x23, 0x44, 0x44, 0x55, + 0x56, 0x66, 0x66, 0x60, 0x66, 0xe9, 0xd1, 0x65, 0x54, 0x44, 0x33, 0x22, + 0x40, 0x10, 0x3a, 0x00, 0x12, 0x33, 0x34, 0x44, 0x44, 0x61, 0x44, 0xe9, + 0xd4, 0x43, 0x33, 0x22, 0x21, 0x43, 0x86, 0x31, 0x23, 0x33, 0x33, 0x33, + 0xe9, 0xd4, 0x32, 0x80, 0x47, 0x00, 0x00, 0x01, 0x12, 0x22, 0x22, 0x22, + 0xc8, 0xe9, 0xd3, 0x21, 0x10, 0x43, +}; + +//***************************************************************************** +// +// This is the image of the blue push button background, used when the buttons +// are pressed. +// +//***************************************************************************** +const uint8_t g_pui8Blue50x50Press[] = +{ + IMAGE_FMT_4BPP_COMP, + 50, 0, + 50, 0, + + 15, + 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, + 0x52, 0x00, 0x00, + 0x63, 0x00, 0x00, + 0x6f, 0x00, 0x00, + 0x78, 0x00, 0x00, + 0x7c, 0x00, 0x00, + 0x7d, 0x00, 0x00, + 0x7f, 0x00, 0x00, + 0x81, 0x00, 0x00, + 0x85, 0x00, 0x00, + 0x89, 0x00, 0x00, + 0x8d, 0x00, 0x00, + 0x93, 0x00, 0x00, + 0x9b, 0x00, 0x00, + 0xa9, 0x00, 0x00, + + 0x83, 0x03, 0x01, 0x12, 0x22, 0x22, 0x22, 0xe9, 0xd3, 0x20, 0x21, 0x10, + 0x07, 0x12, 0x22, 0x23, 0x33, 0x33, 0x64, 0x33, 0xe9, 0xd4, 0x32, 0x21, + 0x47, 0x33, 0x34, 0x19, 0x44, 0x44, 0x44, 0xe9, 0xd4, 0x43, 0x33, 0x34, + 0x00, 0x01, 0x22, 0x33, 0x44, 0x45, 0x56, 0x66, 0x66, 0x60, 0x66, 0xe9, + 0xd1, 0x65, 0x55, 0x44, 0x44, 0x32, 0x40, 0x10, 0x32, 0x12, 0x33, 0x44, + 0x55, 0x66, 0x88, 0x30, 0x88, 0x88, 0xe9, 0xd2, 0x87, 0x66, 0x55, 0x54, + 0x20, 0x44, 0x21, 0x39, 0x01, 0x23, 0x34, 0x45, 0x67, 0xc0, 0x47, 0x33, + 0x65, 0x54, 0x43, 0x10, 0x00, 0x00, 0x0c, 0x12, 0x33, 0x45, 0x66, 0x47, + 0x04, 0x66, 0x55, 0x00, 0x54, 0x31, 0x00, 0x00, 0x23, 0x34, 0x56, 0x78, + 0xc0, 0x3f, 0x04, 0x86, 0x66, 0x66, 0x44, 0x00, 0x01, 0x18, 0x23, 0x45, + 0x67, 0x47, 0x2f, 0x86, 0x64, 0x20, 0x0c, 0x02, 0x33, 0x45, 0x68, 0x3f, + 0x06, 0x89, 0x89, 0x06, 0x94, 0x40, 0x12, 0x34, 0x56, 0x47, 0x07, 0x88, + 0x03, 0x99, 0xa8, 0x91, 0x12, 0x34, 0x57, 0x3f, 0x07, 0x01, 0x88, 0x9a, + 0xaa, 0xa2, 0x23, 0x45, 0x68, 0x3f, 0x80, 0x07, 0x89, 0x99, 0xab, 0xa4, + 0x23, 0x45, 0x78, 0xc0, 0x3f, 0x07, 0x88, 0x9a, 0xbc, 0xb9, 0x23, 0x46, + 0xe7, 0x47, 0x3f, 0x39, 0xcc, 0xbc, 0x3f, 0x3f, 0x3b, 0x0f, 0xcd, 0xbc, + 0x23, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0xb0, 0x39, 0x57, 0x3f, 0x07, 0x88, 0x88, 0x9b, 0xcd, + 0x18, 0xbc, 0x24, 0x56, 0x3f, 0x07, 0x88, 0x89, 0xab, 0xe1, 0x3f, 0x3f, + 0x3c, 0xac, 0xdd, 0xcc, 0x34, 0x3f, 0xc3, 0x3f, 0x39, 0xbc, 0xde, 0xcc, + 0x24, 0x3f, 0x07, 0x03, 0x88, 0x88, 0x9a, 0xbd, 0xee, 0xdb, 0x3f, 0x07, + 0x80, 0x01, 0x9b, 0xcd, 0xee, 0xe5, 0x14, 0x56, 0x68, 0xc0, 0x37, 0x06, + 0x89, 0xab, 0xde, 0xef, 0xe3, 0x14, 0x60, 0x55, 0x3f, 0x07, 0x9a, 0xbc, + 0xde, 0xef, 0xe1, 0x0c, 0x03, 0x45, 0x88, 0x99, 0x37, 0x04, 0x89, 0xab, + 0x00, 0xcd, 0xee, 0xfe, 0xd0, 0x01, 0x46, 0x89, 0x99, 0x60, 0x98, 0x37, + 0x03, 0x9a, 0xbc, 0xde, 0xef, 0xff, 0x06, 0x20, 0x00, 0x35, 0x89, 0x99, + 0x37, 0x03, 0x99, 0x00, 0xab, 0xcd, 0xee, 0xff, 0xfe, 0x00, 0x00, 0x14, + 0x04, 0x89, 0x99, 0xaa, 0x99, 0x99, 0x37, 0x89, 0x99, 0x00, 0xab, 0xcc, + 0xde, 0xef, 0xff, 0xf1, 0x00, 0x00, 0x05, 0x02, 0x59, 0x9a, 0xba, 0xaa, + 0x29, 0x99, 0xe9, 0xa0, 0xd1, 0xaa, 0x41, 0xee, 0xff, 0xff, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x25, 0xab, 0xbc, 0xcc, 0xbb, 0xbb, 0x1a, 0xcc, 0xcc, + 0xcc, 0xe9, 0xd1, 0xcd, 0x42, 0xf3, 0x80, 0x41, 0x00, 0x02, 0xaa, 0xcc, + 0xdc, 0xcd, 0xdd, 0x32, 0xdd, 0xdd, 0xe9, 0xd1, 0xde, 0xee, 0x41, 0xff, + 0x40, 0x30, 0x3a, 0x00, 0x19, 0xcc, 0xdd, 0xee, 0xee, 0x6a, 0xee, 0xe9, + 0xd3, 0xef, 0x41, 0xe1, 0x43, 0x00, 0x3a, 0x00, 0x2a, 0x47, 0x01, 0x41, + 0xe2, 0x45, 0x00, 0x0e, 0x00, 0x13, 0x7d, 0xef, 0x81, 0x69, 0x51, 0xef, + 0x20, 0xe9, 0x31, 0x43, +}; diff --git a/boards/dk-tm4c129x/lang_demo/images.h b/boards/dk-tm4c129x/lang_demo/images.h new file mode 100644 index 0000000..06b261c --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/images.h @@ -0,0 +1,36 @@ +//***************************************************************************** +// +// images.h - Prototypes for the images used by the application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IMAGES_H__ +#define __IMAGES_H__ + +//***************************************************************************** +// +// Prototypes for the image arrays. +// +//***************************************************************************** +extern const uint8_t g_pui8Blue50x50[]; +extern const uint8_t g_pui8Blue50x50Press[]; + +#endif // __IMAGES_H__ diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.c b/boards/dk-tm4c129x/lang_demo/lang_demo.c new file mode 100644 index 0000000..26ce3b6 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.c @@ -0,0 +1,852 @@ +//***************************************************************************** +// +// lang_demo.c - Demonstration of the TivaWare Graphics Library's string +// table support. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/container.h" +#include "grlib/pushbutton.h" +#include "grlib/radiobutton.h" +#include "utils/ustdlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/touch.h" +#include "drivers/pinout.h" +#include "images.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Graphics Library String Table Demonstration (lang_demo)

      +//! +//! This application provides a demonstration of the capabilities of the +//! TivaWare Graphics Library's string table functions. Two panels show +//! different implementations of features of the string table functions. +//! For each panel, the bottom provides a forward and back button +//! (when appropriate). +//! +//! The first panel provides a large string with introductory text and basic +//! instructions for operation of the application. +//! +//! The second panel shows the available languages and allows them to be +//! switched between English, German, Spanish and Italian. +//! +//! The string table and custom fonts used by this application can be found +//! under /third_party/fonts/lang_demo. The original strings that the +//! application intends displaying are found in the language.csv file (encoded +//! in UTF8 format to allow accented characters and Asian language ideographs +//! to be included. The mkstringtable tool is used to generate two versions +//! of the string table, one which remains encoded in UTF8 format and the other +//! which has been remapped to a custom codepage allowing the table to be +//! reduced in size compared to the original UTF8 text. The tool also produces +//! character map files listing each character used in the string table. These +//! are then provided as input to the ftrasterize tool which generates two +//! custom fonts for the application, one indexed using Unicode and a smaller +//! one indexed using the custom codepage generated for this string table. +//! +//! The command line parameters required for mkstringtable and ftrasterize +//! can be found in the makefile in third_party/fonts/lang_demo. +//! +//! By default, the application builds to use the custom codepage version of +//! the string table and its matching custom font. To build using the UTF8 +//! string table and Unicode-indexed custom font, ensure that the definition of +//! \b USE_REMAPPED_STRINGS at the top of the lang_demo.c source file is +//! commented out. +//! +//***************************************************************************** + +//***************************************************************************** +// +// Comment the following line to use a version of the string table and custom +// font that does not use codepage remapping. In this version, the font is +// somewhat larger and character lookup will be slower but it has the advantage +// that the strings you retrieve from the string table are encoded exactly +// as they were in the original CSV file and are generally readable in your +// debugger (since they use a standard codepage like ISO8859-1 or UTF8). +// +//***************************************************************************** +#define USE_REMAPPED_STRINGS + +#ifdef USE_REMAPPED_STRINGS +#include "langremap.h" +extern const unsigned char g_pui8Customr14pt[]; +extern const unsigned char g_pui8Customr20pt[]; + +#define SPACE_CHAR MAP8000_CHAR_000020 +#define FONT_20PT (const tFont *)g_pui8Customr20pt +#define FONT_14PT (const tFont *)g_pui8Customr14pt +#define STRING_TABLE g_pui8Tablelangremap +#define GRLIB_INIT_STRUCT g_sGrLibDefaultlangremap + +#else + +#include "language.h" + +extern const unsigned char g_pui8Custom14pt[]; +extern const unsigned char g_pui8Custom20pt[]; + +#define SPACE_CHAR 0x20 +#define FONT_20PT (const tFont *)g_pui8Custom20pt +#define FONT_14PT (const tFont *)g_pui8Custom14pt + +#define STRING_TABLE g_pui8Tablelanguage +#define GRLIB_INIT_STRUCT g_sGrLibDefaultlanguage + +#endif + +//***************************************************************************** +// +// The names for each of the panels, which is displayed at the bottom of the +// screen. +// +//***************************************************************************** +static const uint32_t g_ui32PanelNames[3] = +{ + STR_INTRO, + STR_CONFIG, + STR_UPDATE +}; + +//***************************************************************************** +// +// This string holds the title of the group of languages. The size is fixed +// by LANGUAGE_MAX_SIZE since the names of the languages in this application +// are not larger than LANGUAGE_MAX_SIZE bytes. +// +//***************************************************************************** +#define LANGUAGE_MAX_SIZE 16 +char g_pcLanguage[LANGUAGE_MAX_SIZE]; + +//***************************************************************************** +// +// This is a generic buffer that is used to retrieve strings from the string +// table. This forces its size to be at least as big as the largest string +// in the string table which is defined by the SCOMP_MAX_STRLEN value. +// +//***************************************************************************** +char g_pcBuffer[SCOMP_MAX_STRLEN]; + +//***************************************************************************** +// +// This string holds the title of each "panel" in the application. The size is +// fixed by TITLE_MAX_SIZE since the names of the panels in this application +// are not larger than TITLE_MAX_SIZE bytes. +// +//***************************************************************************** +#define TITLE_MAX_SIZE 20 +char g_pcTitle[TITLE_MAX_SIZE]; + +//***************************************************************************** +// +// This table holds the array of languages supported. +// +//***************************************************************************** +typedef struct +{ + uint16_t ui16Language; + bool bBreakOnSpace; +} +tLanguageParams; + +const tLanguageParams g_psLanguageTable[] = +{ + { GrLangEnUS, true }, + { GrLangDe, true }, + { GrLangEsSP, true }, + { GrLangIt, true }, + { GrLangZhPRC, false }, + { GrLangKo, true }, + { GrLangJp, false } +}; + +#define NUM_LANGUAGES (sizeof(g_LanguageTable) / sizeof(tLanguageParams)) + +//***************************************************************************** +// +// The index of the current language in the g_psLanguageTable array. +// +//***************************************************************************** +uint32_t g_ui32LangIdx; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Forward declarations for the globals required to define the widgets at +// compile-time. +// +//***************************************************************************** +void OnPrevious(tWidget *psWidget); +void OnNext(tWidget *psWidget); +void OnIntroPaint(tWidget *psWidget, tContext *psContext); +void OnRadioChange(tWidget *psWidget, uint32_t bSelected); +extern tCanvasWidget g_psPanels[]; + +//***************************************************************************** +// +// The first panel, which contains introductory text explaining the +// application. +// +//***************************************************************************** +Canvas(g_sIntroduction, g_psPanels, 0, 0, &g_sKentec320x240x16_SSD2119, 8, 26, + 300, 154, CANVAS_STYLE_APP_DRAWN, 0, 0, 0, 0, 0, 0, OnIntroPaint); + +//***************************************************************************** +// +// Storage for language name strings. Note that we could hardcode these into +// the relevant widget initialization macros but since we may be using a +// custom font and remapped codepage, keeping the strings in the string table +// and loading them when the app starts is likely to create less confusion and +// prevents the risk of seeing garbled output if you accidentally use ASCII or +// ISO8859-1 text strings with the custom font. +// +//***************************************************************************** +#define MAX_LANGUAGE_NAME_LEN 10 +char g_pcEnglish[MAX_LANGUAGE_NAME_LEN]; +char g_pcDeutsch[MAX_LANGUAGE_NAME_LEN]; +char g_pcEspanol[MAX_LANGUAGE_NAME_LEN]; +char g_pcItaliano[MAX_LANGUAGE_NAME_LEN]; +char g_pcChinese[MAX_LANGUAGE_NAME_LEN]; +char g_pcKorean[MAX_LANGUAGE_NAME_LEN]; +char g_pcJapanese[MAX_LANGUAGE_NAME_LEN]; + +//***************************************************************************** +// +// The language selection panel, which contains a selection of radio buttons +// for each language. +// +//***************************************************************************** +tContainerWidget g_psRadioContainers[]; + +tRadioButtonWidget g_psRadioButtons1[] = +{ + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 1, 0, + &g_sKentec320x240x16_SSD2119, 18, 54, 120, 25, + RB_STYLE_TEXT | RB_STYLE_SELECTED, 16, 0, ClrSilver, + ClrSilver, FONT_20PT, g_pcEnglish, 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 2, 0, + &g_sKentec320x240x16_SSD2119, 18, 82, 120, 25, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, FONT_20PT, + g_pcDeutsch, 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 3, 0, + &g_sKentec320x240x16_SSD2119, 180, 54, 120, 25, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, FONT_20PT, + g_pcEspanol, 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 4, 0, + &g_sKentec320x240x16_SSD2119, 180, 82, 120, 25, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, FONT_20PT, + g_pcItaliano, 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 5, 0, + &g_sKentec320x240x16_SSD2119, 18, 110, 120, 25, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, FONT_20PT, + g_pcChinese, 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, g_psRadioButtons1 + 6, 0, + &g_sKentec320x240x16_SSD2119, 180, 110, 120, 25, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, FONT_20PT, + g_pcKorean, 0, OnRadioChange), + RadioButtonStruct(g_psRadioContainers, 0, 0, + &g_sKentec320x240x16_SSD2119, 18, 138, 120, 25, + RB_STYLE_TEXT, 16, 0, ClrSilver, ClrSilver, FONT_20PT, + g_pcJapanese, 0, OnRadioChange), +}; + +#define NUM_RADIO1_BUTTONS (sizeof(g_psRadioButtons1) / \ + sizeof(g_psRadioButtons1[0])) + +tContainerWidget g_psRadioContainers[] = +{ + ContainerStruct(g_psPanels + 1, 0, g_psRadioButtons1, + &g_sKentec320x240x16_SSD2119, 8, 30, 300, 140, + CTR_STYLE_OUTLINE | CTR_STYLE_TEXT, 0, ClrGray, ClrSilver, + FONT_20PT, g_pcLanguage), +}; + +//***************************************************************************** +// +// An array of canvas widgets, one per panel. Each canvas is filled with +// black, overwriting the contents of the previous panel. +// +//***************************************************************************** +tCanvasWidget g_psPanels[] = +{ + CanvasStruct(0, 0, &g_sIntroduction, &g_sKentec320x240x16_SSD2119, 8, 22, + 300, 158, CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), + CanvasStruct(0, 0, g_psRadioContainers, &g_sKentec320x240x16_SSD2119, 8, + 22, 300, 158, CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0), +}; + +//***************************************************************************** +// +// The number of panels. +// +//***************************************************************************** +#define NUM_PANELS (sizeof(g_psPanels) / sizeof(g_psPanels[0])) + +//***************************************************************************** +// +// The buttons and text across the bottom of the screen. +// +//***************************************************************************** +char g_pcPlus[2]; +char g_pcMinus[2]; + +RectangularButton(g_sPrevious, 0, 0, 0, &g_sKentec320x240x16_SSD2119, 8, 180, + 50, 50, PB_STYLE_FILL, ClrBlack, ClrBlack, 0, ClrSilver, + FONT_20PT, g_pcMinus, g_pui8Blue50x50, g_pui8Blue50x50Press, + 0, 0, OnPrevious); +Canvas(g_sTitle, 0, 0, 0, &g_sKentec320x240x16_SSD2119, 58, 180, 200, 50, + CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_OPAQUE | CANVAS_STYLE_FILL, 0, 0, + ClrSilver, FONT_20PT, 0, 0, 0); +RectangularButton(g_sNext, 0, 0, 0, &g_sKentec320x240x16_SSD2119, 260, 180, + 50, 50, PB_STYLE_IMG | PB_STYLE_TEXT, ClrBlack, ClrBlack, 0, + ClrSilver, FONT_20PT, g_pcPlus, g_pui8Blue50x50, + g_pui8Blue50x50Press, 0, 0, OnNext); + +//***************************************************************************** +// +// The panel that is currently being displayed. +// +//***************************************************************************** +uint32_t g_ui32Panel; + +//***************************************************************************** +// +// Handles presses of the previous panel button. +// +//***************************************************************************** +void +OnPrevious(tWidget *psWidget) +{ + // + // There is nothing to be done if the first panel is already being + // displayed. + // + if(g_ui32Panel == 0) + { + return; + } + + // + // Remove the current panel. + // + WidgetRemove((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Decrement the panel index. + // + g_ui32Panel--; + + // + // Add and draw the new panel. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)(g_psPanels + g_ui32Panel)); + WidgetPaint((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Set the title of this panel. + // + GrStringGet(g_ui32PanelNames[g_ui32Panel], g_pcTitle, TITLE_MAX_SIZE); + WidgetPaint((tWidget *)&g_sTitle); + + // + // See if this is the first panel. + // + if(g_ui32Panel == 0) + { + // + // Clear the previous button from the display since the first panel is + // being displayed. + // + PushButtonImageOff(&g_sPrevious); + PushButtonTextOff(&g_sPrevious); + PushButtonFillOn(&g_sPrevious); + WidgetPaint((tWidget *)&g_sPrevious); + } + + // + // See if the previous panel was the last panel. + // + if(g_ui32Panel == (NUM_PANELS - 2)) + { + // + // Display the next button. + // + PushButtonImageOn(&g_sNext); + PushButtonTextOn(&g_sNext); + PushButtonFillOff(&g_sNext); + WidgetPaint((tWidget *)&g_sNext); + } +} + +//***************************************************************************** +// +// Handles presses of the next panel button. +// +//***************************************************************************** +void +OnNext(tWidget *psWidget) +{ + // + // There is nothing to be done if the last panel is already being + // displayed. + // + if(g_ui32Panel == (NUM_PANELS - 1)) + { + return; + } + + // + // Remove the current panel. + // + WidgetRemove((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Increment the panel index. + // + g_ui32Panel++; + + // + // Add and draw the new panel. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)(g_psPanels + g_ui32Panel)); + WidgetPaint((tWidget *)(g_psPanels + g_ui32Panel)); + + // + // Set the title of this panel. + // + GrStringGet(g_ui32PanelNames[g_ui32Panel], g_pcTitle, TITLE_MAX_SIZE); + WidgetPaint((tWidget *)&g_sTitle); + + // + // See if the previous panel was the first panel. + // + if(g_ui32Panel == 1) + { + // + // Display the previous button. + // + PushButtonImageOn(&g_sPrevious); + PushButtonTextOn(&g_sPrevious); + PushButtonFillOff(&g_sPrevious); + WidgetPaint((tWidget *)&g_sPrevious); + } + + // + // See if this is the last panel. + // + if(g_ui32Panel == (NUM_PANELS - 1)) + { + // + // Clear the next button from the display since the last panel is being + // displayed. + // + PushButtonImageOff(&g_sNext); + PushButtonTextOff(&g_sNext); + PushButtonFillOn(&g_sNext); + WidgetPaint((tWidget *)&g_sNext); + } +} + +//***************************************************************************** +// +// Switch out all of the dynamic strings. +// +//***************************************************************************** +void +ChangeLanguage(uint16_t ui16Language) +{ + // + // Change the language. + // + GrStringLanguageSet(ui16Language); + + // + // Update the Language string. + // + GrStringGet(STR_LANGUAGE, g_pcLanguage, LANGUAGE_MAX_SIZE); + + // + // Update the title string. + // + GrStringGet(g_ui32PanelNames[g_ui32Panel], g_pcTitle, TITLE_MAX_SIZE); +} + +//***************************************************************************** +// +// Handles wrapping a string within an area. +// +// \param psContext is the context of the area to update. +// \param pcString is the string to print out. +// \param i32LineHeight is the height of a character in the currrent font. +// \param i32X is the x position to start printing this string. +// \param i32Y is the y position to start printing this string. +// \param bSplitOnSpace is true if strings in the current language must be +// split only on space characters or false if they may be split between any +// two characters. +// +// \return Returns the number of lines that were printed due to this string. +// +//***************************************************************************** +uint32_t +DrawStringWrapped(tContext *psContext, char *pcString, + int32_t i32LineHeight, int32_t i32X, int32_t i32Y, + bool bSplitOnSpace) +{ + uint32_t ui32Width, ui32CharWidth, ui32StrWidth, ui32Char; + uint32_t ui32Lines, ui32Skip; + char *pcStart, *pcEnd; + char *pcLastSpace; + + ui32Lines = 0; + + // + // Get the number of pixels we have to fit the string into across the + // screen. + // + ui32Width = GrContextDpyWidthGet(psContext) - 16 - i32X; + + // + // Get a pointer to the terminating zero. + // + pcEnd = pcString; + while(*pcEnd) + { + pcEnd++; + } + + // + // The first substring we draw will start at the beginning of the string. + // + pcStart = pcString; + pcLastSpace = pcString; + ui32StrWidth = 0; + + // + // Keep processing until we have no more characters to display. + // + do + { + // + // Get the next character in the string. + // + ui32Char = GrStringNextCharGet(psContext, pcString, + (pcEnd - pcString), &ui32Skip); + + // + // Did we reach the end of the string? + // + if(ui32Char) + { + // + // No - how wide is this character? + // + ui32CharWidth = GrStringWidthGet(psContext, pcString, ui32Skip); + + // + // Have we run off the edge of the display? + // + if((ui32StrWidth + ui32CharWidth) > ui32Width) + { + // + // If we are splitting on spaces, rewind the string pointer to + // the byte after the last space. + // + if(bSplitOnSpace) + { + pcString = pcLastSpace; + } + + // + // Yes - draw the substring. + // + GrStringDraw(psContext, pcStart, (pcString - pcStart), + i32X, i32Y, 0); + + // + // Increment the line count and move the y position down by the + // current font's line height. + // + ui32Lines++; + i32Y += i32LineHeight; + ui32StrWidth = 0; + + // + // The next string we draw will start at the current position. + // + pcStart = pcString; + } + else + { + // + // No - update the width and move on to the next character. + // + ui32StrWidth += ui32CharWidth; + pcString += ui32Skip; + + // + // If this is a space, remember where we are. + // + if(ui32Char == SPACE_CHAR) + { + pcLastSpace = pcString; + } + } + } + else + { + // + // Do we have any remaining chunk of string to draw? + // + if(pcStart != pcString) + { + // + // Yes - draw the last section of string. + // + GrStringDraw(psContext, pcStart, -1, i32X, i32Y, 0); + ui32Lines++; + } + } + } while(ui32Char); + + return(ui32Lines); +} + +//***************************************************************************** +// +// Handles paint requests for the introduction canvas widget. +// +//***************************************************************************** +void +OnIntroPaint(tWidget *psWidget, tContext *psContext) +{ + int32_t i32LineHeight, i32Offset; + uint32_t ui32Lines; + + i32LineHeight = GrFontHeightGet(FONT_14PT); + i32Offset = 28; + + // + // Display the introduction text in the canvas. + // + GrContextFontSet(psContext, FONT_14PT); + GrContextForegroundSet(psContext, ClrSilver); + + // + // Write the first paragraph of the introduction page. + // + GrStringGet(STR_INTRO_1, g_pcBuffer, SCOMP_MAX_STRLEN); + ui32Lines = DrawStringWrapped(psContext, g_pcBuffer, i32LineHeight, 8, + i32Offset, + g_psLanguageTable[g_ui32LangIdx].bBreakOnSpace); + // + // Move down by 1/4 of a line between paragraphs. + // + i32Offset += i32LineHeight/4; + + // + // Write the second paragraph of the introduction page. + // + GrStringGet(STR_INTRO_2, g_pcBuffer, SCOMP_MAX_STRLEN); + ui32Lines += DrawStringWrapped(psContext, g_pcBuffer, i32LineHeight, 8, + i32Offset + (ui32Lines * i32LineHeight), + g_psLanguageTable[g_ui32LangIdx].bBreakOnSpace); + // + // Move down by 1/4 of a line between paragraphs. + // + i32Offset += i32LineHeight/4; + + // + // Write the third paragraph of the introduction page. + // + GrStringGet(STR_INTRO_3, g_pcBuffer, SCOMP_MAX_STRLEN); + DrawStringWrapped(psContext, g_pcBuffer, i32LineHeight, 8, i32Offset + + (ui32Lines * i32LineHeight), + g_psLanguageTable[g_ui32LangIdx].bBreakOnSpace ); +} + +//***************************************************************************** +// +// Handles change notifications for the radio button widgets. +// +//***************************************************************************** +void +OnRadioChange(tWidget *psWidget, uint32_t bSelected) +{ + // + // Find the index of this radio button in the first group. + // + for(g_ui32LangIdx = 0; g_ui32LangIdx < NUM_RADIO1_BUTTONS; g_ui32LangIdx++) + { + if(psWidget == (tWidget *)(g_psRadioButtons1 + g_ui32LangIdx)) + { + break; + } + } + + // + // Change any dynamic language strings. + // + ChangeLanguage(g_psLanguageTable[g_ui32LangIdx].ui16Language); + + // + // Issue the initial paint request to the widgets. + // + WidgetPaint(WIDGET_ROOT); +} + +//***************************************************************************** +// +// A simple demonstration of the features of the TivaWare Graphics Library. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Set graphics library text rendering defaults. + // + GrLibInit(&GRLIB_INIT_STRUCT); + + // + // Set the string table and the default language. + // + GrStringTableSet(STRING_TABLE); + + // + // Set the default language. + // + ChangeLanguage(GrLangEnUS); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "lang-demo"); + + // + // Load the static strings from the string table. These strings are + // independent of the language in use but we store them in the string + // table nonetheless since (a) we may be using codepage remapping in + // which case it would be difficult to hardcode them into the app source + // anyway (ASCII or ISO8859-1 text would not render properly with the + // remapped custom font) and (b) even if we're not using codepage remapping, + // we may have generated a custom font from the string table output and + // we want to make sure that all glyphs required by the application are + // present in that font. If we hardcode some text in the application + // source and don't put it in the string table, we run the risk of having + // characters missing in the font. + // + GrStringGet(STR_ENGLISH, g_pcEnglish, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_DEUTSCH, g_pcDeutsch, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_ESPANOL, g_pcEspanol, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_ITALIANO, g_pcItaliano, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_CHINESE, g_pcChinese, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_KOREAN, g_pcKorean, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_JAPANESE, g_pcJapanese, MAX_LANGUAGE_NAME_LEN); + GrStringGet(STR_PLUS, g_pcPlus, 2); + GrStringGet(STR_MINUS, g_pcMinus, 2); + + // + // Initialize the touch screen driver and have it route its messages to the + // widget tree. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the title block and the previous and next buttons to the widget + // tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sPrevious); + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sTitle); + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sNext); + + // + // Add the first panel to the widget tree. + // + g_ui32Panel = 0; + WidgetAdd(WIDGET_ROOT, (tWidget *)g_psPanels); + + // + // Set the string for the title. + // + CanvasTextSet(&g_sTitle, g_pcTitle); + + // + // Issue the initial paint request to the widgets. + // + WidgetPaint(WIDGET_ROOT); + + // + // Loop forever, processing widget messages. + // + while(1) + { + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + } + +} diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.ewd b/boards/dk-tm4c129x/lang_demo/lang_demo.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.ewp b/boards/dk-tm4c129x/lang_demo/lang_demo.ewp new file mode 100644 index 0000000..0311110 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.ewp @@ -0,0 +1,829 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\third_party\fonts\lang_demo\fontcustom14pt.c + + + $PROJ_DIR$\..\..\..\..\third_party\fonts\lang_demo\fontcustom20pt.c + + + $PROJ_DIR$\..\..\..\..\third_party\fonts\lang_demo\fontcustomr14pt.c + + + $PROJ_DIR$\..\..\..\..\third_party\fonts\lang_demo\fontcustomr20pt.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\images.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\lang_demo.c + + + $PROJ_DIR$\..\..\..\..\third_party\fonts\lang_demo\langremap.c + + + $PROJ_DIR$\..\..\..\..\third_party\fonts\lang_demo\language.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.icf b/boards/dk-tm4c129x/lang_demo/lang_demo.icf new file mode 100644 index 0000000..19a4a18 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// lang_demo.icf - Linker configuration file for lang_demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.ld b/boards/dk-tm4c129x/lang_demo/lang_demo.ld new file mode 100644 index 0000000..ab49292 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * lang_demo.ld - Linker configuration file for lang_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.sct b/boards/dk-tm4c129x/lang_demo/lang_demo.sct new file mode 100644 index 0000000..0a2e30e --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; lang_demo.sct - Linker configuration file for lang_demo. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.uvopt b/boards/dk-tm4c129x/lang_demo/lang_demo.uvopt new file mode 100644 index 0000000..ccf05ff --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.uvopt @@ -0,0 +1,471 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + lang_demo + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\lang_demo\fontcustom14pt.c + fontcustom14pt.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\lang_demo\fontcustom20pt.c + fontcustom20pt.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\lang_demo\fontcustomr14pt.c + fontcustomr14pt.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\lang_demo\fontcustomr20pt.c + fontcustomr20pt.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\images.c + images.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\lang_demo.c + lang_demo.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\lang_demo\langremap.c + langremap.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fonts\lang_demo\language.c + language.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 12 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 15 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 16 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 17 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo.uvproj b/boards/dk-tm4c129x/lang_demo/lang_demo.uvproj new file mode 100644 index 0000000..794f9fa --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo.uvproj @@ -0,0 +1,489 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + lang_demo + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + lang_demo + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\lang_demo.bin .\rvmdk\lang_demo.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..;..\..\..\..\third_party\fonts\lang_demo;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + lang_demo.sct + + + --entry Reset_Handler + + + + + + + + Source + + + fontcustom14pt.c + 1 + ..\..\..\..\third_party\fonts\lang_demo\fontcustom14pt.c + + + fontcustom20pt.c + 1 + ..\..\..\..\third_party\fonts\lang_demo\fontcustom20pt.c + + + fontcustomr14pt.c + 1 + ..\..\..\..\third_party\fonts\lang_demo\fontcustomr14pt.c + + + fontcustomr20pt.c + 1 + ..\..\..\..\third_party\fonts\lang_demo\fontcustomr20pt.c + + + frame.c + 1 + ..\drivers\frame.c + + + images.c + 1 + .\images.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + lang_demo.c + 1 + .\lang_demo.c + + + langremap.c + 1 + ..\..\..\..\third_party\fonts\lang_demo\langremap.c + + + language.c + 1 + ..\..\..\..\third_party\fonts\lang_demo\language.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/lang_demo/lang_demo_ccs.cmd b/boards/dk-tm4c129x/lang_demo/lang_demo_ccs.cmd new file mode 100644 index 0000000..30c18c1 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/lang_demo_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * lang_demo_ccs.cmd - CCS linker configuration file for lang_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/lang_demo/readme.txt b/boards/dk-tm4c129x/lang_demo/readme.txt new file mode 100644 index 0000000..3b822b6 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/readme.txt @@ -0,0 +1,56 @@ +Graphics Library String Table Demonstration + +This application provides a demonstration of the capabilities of the +TivaWare Graphics Library's string table functions. Two panels show +different implementations of features of the string table functions. +For each panel, the bottom provides a forward and back button +(when appropriate). + +The first panel provides a large string with introductory text and basic +instructions for operation of the application. + +The second panel shows the available languages and allows them to be +switched between English, German, Spanish and Italian. + +The string table and custom fonts used by this application can be found +under /third_party/fonts/lang_demo. The original strings that the +application intends displaying are found in the language.csv file (encoded +in UTF8 format to allow accented characters and Asian language ideographs +to be included. The mkstringtable tool is used to generate two versions +of the string table, one which remains encoded in UTF8 format and the other +which has been remapped to a custom codepage allowing the table to be +reduced in size compared to the original UTF8 text. The tool also produces +character map files listing each character used in the string table. These +are then provided as input to the ftrasterize tool which generates two +custom fonts for the application, one indexed using Unicode and a smaller +one indexed using the custom codepage generated for this string table. + +The command line parameters required for mkstringtable and ftrasterize +can be found in the makefile in third_party/fonts/lang_demo. + +By default, the application builds to use the custom codepage version of +the string table and its matching custom font. To build using the UTF8 +string table and Unicode-indexed custom font, ensure that the definition of +\b USE_REMAPPED_STRINGS at the top of the lang_demo.c source file is +commented out. + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.axf b/boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.axf new file mode 100644 index 0000000..56a7882 Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.axf differ diff --git a/boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.bin b/boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.bin new file mode 100644 index 0000000..092fb18 Binary files /dev/null and b/boards/dk-tm4c129x/lang_demo/rvmdk/lang_demo.bin differ diff --git a/boards/dk-tm4c129x/lang_demo/startup_ccs.c b/boards/dk-tm4c129x/lang_demo/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/lang_demo/startup_ewarm.c b/boards/dk-tm4c129x/lang_demo/startup_ewarm.c new file mode 100644 index 0000000..860b8a6 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/lang_demo/startup_gcc.c b/boards/dk-tm4c129x/lang_demo/startup_gcc.c new file mode 100644 index 0000000..fad3049 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/lang_demo/startup_rvmdk.S b/boards/dk-tm4c129x/lang_demo/startup_rvmdk.S new file mode 100644 index 0000000..07659c1 --- /dev/null +++ b/boards/dk-tm4c129x/lang_demo/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/mpu_fault/Makefile b/boards/dk-tm4c129x/mpu_fault/Makefile new file mode 100644 index 0000000..9717edd --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/Makefile @@ -0,0 +1,89 @@ +#****************************************************************************** +# +# Makefile - Rules for building the MPU example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the MPU example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/mpu_fault.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the MPU example. +# +${COMPILER}/mpu_fault.axf: ${COMPILER}/frame.o +${COMPILER}/mpu_fault.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/mpu_fault.axf: ${COMPILER}/mpu_fault.o +${COMPILER}/mpu_fault.axf: ${COMPILER}/pinout.o +${COMPILER}/mpu_fault.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/mpu_fault.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/mpu_fault.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/mpu_fault.axf: mpu_fault.ld +SCATTERgcc_mpu_fault=mpu_fault.ld +ENTRY_mpu_fault=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/.ccsimportspec b/boards/dk-tm4c129x/mpu_fault/ccs/.ccsimportspec new file mode 100644 index 0000000..2bef69c --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/.ccsproject b/boards/dk-tm4c129x/mpu_fault/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/.cproject b/boards/dk-tm4c129x/mpu_fault/ccs/.cproject new file mode 100644 index 0000000..0455fea --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/.project b/boards/dk-tm4c129x/mpu_fault/ccs/.project new file mode 100644 index 0000000..e90884a --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/.project @@ -0,0 +1,65 @@ + + + mpu_fault + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + mpu_fault.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/mpu_fault/mpu_fault.c + + + mpu_fault_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/mpu_fault/mpu_fault_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/mpu_fault/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/mpu_fault/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.bin b/boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.bin new file mode 100644 index 0000000..2e1fc94 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.bin differ diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.out b/boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.out new file mode 100644 index 0000000..b7e7c13 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/ccs/Debug/mpu_fault.out differ diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/macros.ini_initial b/boards/dk-tm4c129x/mpu_fault/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/mpu_fault/ccs/target_config.ccxml b/boards/dk-tm4c129x/mpu_fault/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.bin b/boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.bin new file mode 100644 index 0000000..1def7b0 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.bin differ diff --git a/boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.out b/boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.out new file mode 100644 index 0000000..db11208 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/ewarm/Exe/mpu_fault.out differ diff --git a/boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.axf b/boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.axf new file mode 100644 index 0000000..bf420f1 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.axf differ diff --git a/boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.bin b/boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.bin new file mode 100644 index 0000000..44862d8 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/gcc/mpu_fault.bin differ diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.c b/boards/dk-tm4c129x/mpu_fault/mpu_fault.c new file mode 100644 index 0000000..1ac658b --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.c @@ -0,0 +1,504 @@ +//***************************************************************************** +// +// mpu_fault.c - MPU example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" +#include "driverlib/interrupt.h" +#include "driverlib/mpu.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      MPU (mpu_fault)

      +//! +//! This example application demonstrates the use of the MPU to protect a +//! region of memory from access, and to generate a memory management fault +//! when there is an access violation. +//! +//***************************************************************************** + +//***************************************************************************** +// +// Variables to hold the state of the fault status when the fault occurs and +// the faulting address. +// +//***************************************************************************** +static volatile uint32_t g_ui32MMAR; +static volatile uint32_t g_ui32FaultStatus; + +//***************************************************************************** +// +// A counter to track the number of times the fault handler has been entered. +// +//***************************************************************************** +static volatile uint32_t g_ui32MPUFaultCount; + +//***************************************************************************** +// +// A location for storing data read from various addresses. Volatile forces +// the compiler to use it and not optimize the access away. +// +//***************************************************************************** +static volatile uint32_t g_ui32Value; + +//***************************************************************************** +// +// Graphics context used to show text on the CSTN display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// A simple function to perform a write using a 16-bit instruction, allowing +// for easy fix-up in the mpu fault handler. +// +//***************************************************************************** +#if defined(gcc) || defined(sourcerygxx) +void __attribute__((naked)) +Write(uint32_t ui32Addr, uint32_t ui32Data) +{ + __asm(" str r1, [r0]\n" + " bx lr"); +} + +uint32_t __attribute__((naked)) +Read(uint32_t ui32Offset) +{ + __asm(" ldr r0, [r0]\n" + " bx lr"); + + // + // This shouldn't be needed but it keeps the compiler from generating + // a warning. + // + return(0); +} +#endif + +#if defined(rvmdk) +__asm void +Write(uint32_t ui32Addr, uint32_t ui32Data) +{ + str r1, [r0]; + bx lr; +} + +__asm uint32_t +Read(uint32_t ui32Offset) +{ + ldr r0, [r0]; + bx lr; +} +#endif + +#if defined(ewarm) +void +Write(uint32_t ui32Addr, uint32_t ui32Data) +{ + __asm("str r1, [r0]\n" + "bx lr"); +} + +uint32_t +Read(uint32_t ui32Offset) +{ + __asm("ldr r0, [r0]\n" + "bx lr\n"); +#pragma diag_suppress=Pe940 +} +#pragma diag_default=Pe940 +#endif + +#if defined(ccs) +__asm(" .sect \".text\"\n" + " .clink\n" + " .thumbfunc Write\n" + " .thumb\n" + " .global Write\n" + "Write:\n" + " str r1, [r0]\n" + " bx lr\n"); + +__asm(" .sect \".text\"\n" + " .clink\n" + " .thumbfunc Read\n" + " .thumb\n" + " .global Read\n" + "Read:\n" + " ldr r0, [r0]\n" + " bx lr\n"); +void Write(uint32_t ui32Addr, uint32_t ui32Data); +uint32_t Read(uint32_t ui32Offset); +#endif + +//***************************************************************************** +// +// The exception handler for memory management faults, which are caused by MPU +// access violations. This handler will verify the cause of the fault and +// clear the NVIC fault status register. +// +//***************************************************************************** +void +MPUFaultHandler(void) +{ + // + // Preserve the value of the MMAR (the address causing the fault). + // Preserve the fault status register value, then clear it. + // + g_ui32MMAR = HWREG(NVIC_MM_ADDR); + g_ui32FaultStatus = HWREG(NVIC_FAULT_STAT); + HWREG(NVIC_FAULT_STAT) = g_ui32FaultStatus; + + // + // Increment a counter to indicate the fault occurred. + // + g_ui32MPUFaultCount++; + + // + // How the MPU fault is handled is application dependent... + // In this sample code, we are skipping the faulted instruction and + // continuing through the application. Since we are forcing the Read + // and Write function to use 16bits instructions only, it is safe to + // add 2 to the faulted instruction address to get the next + // instruction address. + // + #if defined(rvmdk) + { + uint32_t puiFaultPC; + + puiFaultPC = __current_sp() + 0x18; + *(uint32_t*)puiFaultPC = *(uint32_t*)puiFaultPC + 2; + } + #else + __asm(" mov r0, sp\n" + " ldr r1, [r0, #0x18]\n" + " adds r1, #2\n" + " str r1, [r0, #0x18]"); + #endif +} + +//***************************************************************************** +// +// This example demonstrates how to configure MPU regions for different levels +// of memory protection. The following memory map is set up: +// +// 0000.0000 - 0000.7000 - rgn 0: executable read-only, flash +// 0000.7000 - 0000.8000 - rgn 0: no access, flash (disabled sub-region 7) +// 2000.0000 - 2000.8000 - rgn 1: read-write, RAM +// 2000.8000 - 2000.A000 - rgn 2: read-only, RAM (disabled sub-rgn 4 of rgn 1) +// 2000.A000 - 2000.FFFF - rgn 1: read-write, RAM +// 4000.0000 - 4001.0000 - rgn 3: read-write, peripherals +// 4001.0000 - 4002.0000 - rgn 3: no access (disabled sub-region 1) +// 4002.0000 - 4006.0000 - rgn 3: read-write, peripherals +// 4006.0000 - 4008.0000 - rgn 3: no access (disabled sub-region 6, 7) +// 4400.0000 - 4403.0000 - rgn 4: no access (disabled sub-region 0, 1, 2) +// 4403.0000 - 4404.0000 - rgn 4: read-write, peripherals (sub-region 3) +// 4404.0000 - 4405.0000 - rgn 4: no access (disabled sub-region 4) +// 4405.0000 - 4406.0000 - rgn 4: read-write, peripherals (sub-region 5) +// 4406.0000 - 4408.0000 - rgn 4: no access (disabled sub-region 6, 7) +// E000.E000 - E000.F000 - rgn 5: read-write, NVIC +// 2003.8000 - 2003.FFFF - rgn 6: read-write, upper 32K RAM +// 0100.0000 - 0100.FFFF - rgn 7: executable read-only, ROM +// +// The example code will attempt to perform the following operations and check +// the faulting behavior: +// +// - write to flash (should fault) +// - read from the disabled area of flash (should fault) +// - read from the read-only area of RAM (should not fault) +// - write to the read-only section of RAM (should fault) +// +//***************************************************************************** +int +main(void) +{ + bool bFail = 0; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "mpu-fault"); + + // + // Configure an executable, read-only MPU region for flash. It is a 32 KB + // region with the last 4 KB disabled to result in a 28 KB executable + // region. This region is needed so that the program can execute from + // flash. + // + ROM_MPURegionSet(0, FLASH_BASE, + MPU_RGN_SIZE_32K | MPU_RGN_PERM_EXEC | + MPU_RGN_PERM_PRV_RO_USR_RO | MPU_SUB_RGN_DISABLE_7 | + MPU_RGN_ENABLE); + + // + // Configure a read-write MPU region for RAM. It is a 64 KB region. There + // is a 8 KB sub-region in the middle that is disabled in order to open up + // a hole in which different permissions can be applied. + // + ROM_MPURegionSet(1, SRAM_BASE, + MPU_RGN_SIZE_64K | MPU_RGN_PERM_NOEXEC | + MPU_RGN_PERM_PRV_RW_USR_RW | MPU_SUB_RGN_DISABLE_4 | + MPU_RGN_ENABLE); + // + // Configure a read-only MPU region for the 8 KB of RAM that is disabled in + // the previous region. This region is used for demonstrating read-only + // permissions. + // + ROM_MPURegionSet(2, SRAM_BASE + 0x8000, + MPU_RGN_SIZE_8K | MPU_RGN_PERM_NOEXEC | + MPU_RGN_PERM_PRV_RO_USR_RO | MPU_RGN_ENABLE); + + // + // Configure a read-write MPU region for peripherals. The region is 512 KB + // total size, with several sub-regions disabled to prevent access to areas + // where there are no peripherals. This region is needed because the + // program needs access to some peripherals. + // + ROM_MPURegionSet(3, 0x40000000, + MPU_RGN_SIZE_512K | MPU_RGN_PERM_NOEXEC | + MPU_RGN_PERM_PRV_RW_USR_RW | MPU_SUB_RGN_DISABLE_1 | + MPU_SUB_RGN_DISABLE_6 | MPU_SUB_RGN_DISABLE_7 | + MPU_RGN_ENABLE); + + // + // Configure a read-write MPU region for peripherals. The region is 512 KB + // total size, with several sub-regions disabled to prevent access to areas + // where there are no peripherals. This region is needed because the + // program needs access to some peripherals. + // + ROM_MPURegionSet(4, 0x44000000, + MPU_RGN_SIZE_512K | MPU_RGN_PERM_NOEXEC | + MPU_RGN_PERM_PRV_RW_USR_RW | MPU_SUB_RGN_DISABLE_0 | + MPU_SUB_RGN_DISABLE_1 | MPU_SUB_RGN_DISABLE_2 | + MPU_SUB_RGN_DISABLE_4 | MPU_SUB_RGN_DISABLE_6 | + MPU_SUB_RGN_DISABLE_7 | + MPU_RGN_ENABLE); + + // + // Configure a read-write MPU region for access to the NVIC. The region is + // 4 KB in size. This region is needed because NVIC registers are needed + // in order to control the MPU. + // + ROM_MPURegionSet(5, NVIC_BASE, + MPU_RGN_SIZE_4K | MPU_RGN_PERM_NOEXEC | + MPU_RGN_PERM_PRV_RW_USR_RW | MPU_RGN_ENABLE); + + // + // Configure a read-write MPU region for the top 32KB of RAM. + // This region is used as stack for Sourcery CodeBench. + // + ROM_MPURegionSet(6, SRAM_BASE + (ROM_SysCtlSRAMSizeGet() - (32 * 1024)), + MPU_RGN_SIZE_32K | MPU_RGN_PERM_NOEXEC | + MPU_RGN_PERM_PRV_RW_USR_RW | MPU_RGN_ENABLE); + + // + // Configure an executable, read-only MPU region for ROM. It is a 64 KB + // region. This region is needed so that ROM library calls work. + // + ROM_MPURegionSet(7, 0x01000000, + MPU_RGN_SIZE_64K | MPU_RGN_PERM_EXEC | + MPU_RGN_PERM_PRV_RO_USR_RO | MPU_RGN_ENABLE); + + // + // Need to clear the NVIC fault status register to make sure there is no + // status hanging around from a previous program. + // + g_ui32FaultStatus = HWREG(NVIC_FAULT_STAT); + HWREG(NVIC_FAULT_STAT) = g_ui32FaultStatus; + + // + // Enable the MPU fault. + // + ROM_IntEnable(FAULT_MPU); + + // + // Enable the MPU. This will begin to enforce the memory protection + // regions. The MPU is configured so that when in the hard fault or NMI + // exceptions, a default map will be used. Neither of these should occur + // in this example program. + // + ROM_MPUEnable(MPU_CONFIG_HARDFLT_NMI); + + // + // Attempt to write to the flash. This should cause a protection fault due + // to the fact that this region is read-only. + // + GrContextFontSet(&g_sContext, g_psFontCm20); + GrStringDraw(&g_sContext, "Check flash write", -1, 10, 60, 0); + g_ui32MPUFaultCount = 0; + Write(0x100, 0x12345678); + + // + // Verify that the fault occurred, at the expected address. + // + if((g_ui32MPUFaultCount == 1) && (g_ui32FaultStatus == 0x82) && + (g_ui32MMAR == 0x100)) + { + GrStringDraw(&g_sContext, " OK", -1, 210, 60, 0); + } + else + { + bFail = 1; + GrStringDraw(&g_sContext, "NOK", -1, 210, 60, 0); + } + + // + // Attempt to read from the disabled section of flash, the upper 4 KB of + // the 32 KB region. + // + GrStringDraw(&g_sContext, "Check flash read", -1, 10, 85, 0); + g_ui32MPUFaultCount = 0; + g_ui32Value = Read(0x7820); + + // + // Verify that the fault occurred, at the expected address. + // + if((g_ui32MPUFaultCount == 1) && (g_ui32FaultStatus == 0x82) && + (g_ui32MMAR == 0x7820)) + { + GrStringDraw(&g_sContext, " OK", -1, 210, 85, 0); + } + else + { + bFail = 1; + GrStringDraw(&g_sContext, "NOK", -1, 210, 85, 0); + } + + // + // Attempt to read from the read-only area of RAM, the middle 8 KB of the + // 64 KB region. + // + GrStringDraw(&g_sContext, "Check RAM read", -1, 10, 110, 0); + g_ui32MPUFaultCount = 0; + g_ui32Value = Read(0x20008440); + + // + // Verify that the RAM read did not cause a fault. + // + if(g_ui32MPUFaultCount == 0) + { + GrStringDraw(&g_sContext, " OK", -1, 210, 110, 0); + } + else + { + bFail = 1; + GrStringDraw(&g_sContext, "NOK", -1, 210, 110, 0); + } + + // + // Attempt to write to the read-only area of RAM, the middle 8 KB of the + // 64 KB region. + // + GrStringDraw(&g_sContext, "Check RAM write", -1, 10, 135, 0); + g_ui32MPUFaultCount = 0; + Write(0x20008460, 0xabcdef00); + + // + // Verify that the RAM write caused a fault. + // + if((g_ui32MPUFaultCount == 1) && (g_ui32FaultStatus == 0x82) && + (g_ui32MMAR == 0x20008460)) + { + GrStringDraw(&g_sContext, " OK", -1, 210, 135, 0); + } + else + { + bFail = 1; + GrStringDraw(&g_sContext, "NOK", -1, 210, 135, 0); + } + + // + // Display the results of the example program. + // + if(bFail) + { + GrStringDrawCentered(&g_sContext, "Failure!", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 220, 0); + } + else + { + GrStringDrawCentered(&g_sContext, "Success!", -1, + GrContextDpyWidthGet(&g_sContext) / 2, 220, 0); + } + + // + // Disable the MPU, so there are no lingering side effects if another + // program is run. + // + ROM_MPUDisable(); + + // + // Loop forever. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.ewd b/boards/dk-tm4c129x/mpu_fault/mpu_fault.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.ewp b/boards/dk-tm4c129x/mpu_fault/mpu_fault.ewp new file mode 100644 index 0000000..6d50d4e --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\mpu_fault.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.icf b/boards/dk-tm4c129x/mpu_fault/mpu_fault.icf new file mode 100644 index 0000000..af567eb --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// mpu_fault.icf - Linker configuration file for mpu_fault. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.ld b/boards/dk-tm4c129x/mpu_fault/mpu_fault.ld new file mode 100644 index 0000000..44f97a9 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * mpu_fault.ld - Linker configuration file for mpu_fault. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.sct b/boards/dk-tm4c129x/mpu_fault/mpu_fault.sct new file mode 100644 index 0000000..e53ff72 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; mpu_fault.sct - Linker configuration file for mpu_fault. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.uvopt b/boards/dk-tm4c129x/mpu_fault/mpu_fault.uvopt new file mode 100644 index 0000000..ffe0ed2 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + mpu_fault + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\mpu_fault.c + mpu_fault.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault.uvproj b/boards/dk-tm4c129x/mpu_fault/mpu_fault.uvproj new file mode 100644 index 0000000..9d28faa --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + mpu_fault + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + mpu_fault + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\mpu_fault.bin .\rvmdk\mpu_fault.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + mpu_fault.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + mpu_fault.c + 1 + .\mpu_fault.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/mpu_fault/mpu_fault_ccs.cmd b/boards/dk-tm4c129x/mpu_fault/mpu_fault_ccs.cmd new file mode 100644 index 0000000..3fa8544 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/mpu_fault_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * mpu_fault_ccs.cmd - CCS linker configuration file for mpu_fault. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/mpu_fault/readme.txt b/boards/dk-tm4c129x/mpu_fault/readme.txt new file mode 100644 index 0000000..20f3bca --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/readme.txt @@ -0,0 +1,26 @@ +MPU + +This example application demonstrates the use of the MPU to protect a +region of memory from access, and to generate a memory management fault +when there is an access violation. + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.axf b/boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.axf new file mode 100644 index 0000000..522bae0 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.axf differ diff --git a/boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.bin b/boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.bin new file mode 100644 index 0000000..32ef1c0 Binary files /dev/null and b/boards/dk-tm4c129x/mpu_fault/rvmdk/mpu_fault.bin differ diff --git a/boards/dk-tm4c129x/mpu_fault/startup_ccs.c b/boards/dk-tm4c129x/mpu_fault/startup_ccs.c new file mode 100644 index 0000000..6e5f7c0 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void MPUFaultHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + MPUFaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/mpu_fault/startup_ewarm.c b/boards/dk-tm4c129x/mpu_fault/startup_ewarm.c new file mode 100644 index 0000000..0685221 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void MPUFaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + MPUFaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/mpu_fault/startup_gcc.c b/boards/dk-tm4c129x/mpu_fault/startup_gcc.c new file mode 100644 index 0000000..a204bec --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void MPUFaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + MPUFaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/mpu_fault/startup_rvmdk.S b/boards/dk-tm4c129x/mpu_fault/startup_rvmdk.S new file mode 100644 index 0000000..39f9e99 --- /dev/null +++ b/boards/dk-tm4c129x/mpu_fault/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN MPUFaultHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD MPUFaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/qs_weather/Makefile b/boards/dk-tm4c129x/qs_weather/Makefile new file mode 100644 index 0000000..0261c2e --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/Makefile @@ -0,0 +1,106 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Sample Ethernet Weather Application using lwIP 1.4.1. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/lwip-1.4.1/apps/httpserver_raw +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. +IPATH+=../../../../third_party/lwip-1.4.1/apps +IPATH+=../../../../third_party/lwip-1.4.1/ports/tiva-tm4c129/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include +IPATH+=../../../../third_party/lwip-1.4.1/src/include/ipv4 +IPATH+=../../../../third_party + +# +# The default rule, which causes the Sample Ethernet Weather Application using lwIP 1.4.1 to be built. +# +all: ${COMPILER} +all: ${COMPILER}/qs_weather.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Sample Ethernet Weather Application using lwIP 1.4.1. +# +${COMPILER}/qs_weather.axf: ${COMPILER}/eth_client.o +${COMPILER}/qs_weather.axf: ${COMPILER}/flash_pb.o +${COMPILER}/qs_weather.axf: ${COMPILER}/frame.o +${COMPILER}/qs_weather.axf: ${COMPILER}/images.o +${COMPILER}/qs_weather.axf: ${COMPILER}/json.o +${COMPILER}/qs_weather.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/qs_weather.axf: ${COMPILER}/locator.o +${COMPILER}/qs_weather.axf: ${COMPILER}/lwiplib.o +${COMPILER}/qs_weather.axf: ${COMPILER}/pinout.o +${COMPILER}/qs_weather.axf: ${COMPILER}/qs_weather.o +${COMPILER}/qs_weather.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/qs_weather.axf: ${COMPILER}/touch.o +${COMPILER}/qs_weather.axf: ${COMPILER}/uartstdio.o +${COMPILER}/qs_weather.axf: ${COMPILER}/ustdlib.o +${COMPILER}/qs_weather.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/qs_weather.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/qs_weather.axf: qs_weather.ld +SCATTERgcc_qs_weather=qs_weather.ld +ENTRY_qs_weather=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DLWIP_1_4_1 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/qs_weather/ccs/.ccsimportspec b/boards/dk-tm4c129x/qs_weather/ccs/.ccsimportspec new file mode 100644 index 0000000..ef5d7e5 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/.ccsimportspec @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/qs_weather/ccs/.ccsproject b/boards/dk-tm4c129x/qs_weather/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/qs_weather/ccs/.cproject b/boards/dk-tm4c129x/qs_weather/ccs/.cproject new file mode 100644 index 0000000..e0db47c --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/.cproject @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/qs_weather/ccs/.project b/boards/dk-tm4c129x/qs_weather/ccs/.project new file mode 100644 index 0000000..22e5b8a --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/.project @@ -0,0 +1,110 @@ + + + qs_weather + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + eth_client.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/qs_weather/eth_client.c + + + images.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/qs_weather/images.c + + + json.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/qs_weather/json.c + + + qs_weather.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/qs_weather/qs_weather.c + + + qs_weather_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/qs_weather/qs_weather_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/qs_weather/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/flash_pb.c + 1 + SW_ROOT/utils/flash_pb.c + + + utils/locator.c + 1 + SW_ROOT/utils/locator.c + + + utils/lwiplib.c + 1 + SW_ROOT/utils/lwiplib.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/qs_weather/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/qs_weather/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.bin b/boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.bin new file mode 100644 index 0000000..5e9444d Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.bin differ diff --git a/boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.out b/boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.out new file mode 100644 index 0000000..90fd3ed Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/ccs/Debug/qs_weather.out differ diff --git a/boards/dk-tm4c129x/qs_weather/ccs/macros.ini_initial b/boards/dk-tm4c129x/qs_weather/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/qs_weather/ccs/target_config.ccxml b/boards/dk-tm4c129x/qs_weather/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/qs_weather/debug.h b/boards/dk-tm4c129x/qs_weather/debug.h new file mode 100644 index 0000000..0ceaffe --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/debug.h @@ -0,0 +1,38 @@ +//***************************************************************************** +// +// debug.h - +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __DEBUG_H__ +#define __DEBUG_H__ + +#ifdef DEBUG_OUTPUT +//#include "driverlib/uart.h" +#include "utils/uartstdio.h" +#define DebugPrintf(...) UARTprintf(__VA_ARGS__) +#else +#define DebugPrintf(...) +#endif +#else +#define DebugPrintf(...) + +#endif diff --git a/boards/dk-tm4c129x/qs_weather/eth_client.c b/boards/dk-tm4c129x/qs_weather/eth_client.c new file mode 100644 index 0000000..5ab229a --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/eth_client.c @@ -0,0 +1,1309 @@ +//***************************************************************************** +// +// eth_client.c - This file handles all of the Ethernet connections using lwIP. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/flash.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "utils/lwiplib.h" +#include "lwip/dns.h" +#include "driverlib/systick.h" +#include "lwip/dns.h" +#include "eth_client.h" +#include "json.h" + +//***************************************************************************** +// +// Flag indexes for g_sEnet.ui32Flags +// +//***************************************************************************** +#define FLAG_TIMER_DHCP_EN 0 +#define FLAG_TIMER_DNS_EN 1 +#define FLAG_TIMER_TCP_EN 2 +#define FLAG_DHCP_STARTED 3 +#define FLAG_DNS_ADDRFOUND 4 + +//***************************************************************************** +// +// g_sEnet.ulRequest Values +// +//***************************************************************************** +#define WEATHER_NONE 0 +#define WEATHER_CURRENT 1 +#define WEATHER_FORECAST 2 + +//***************************************************************************** +// +// The current state of the Ethernet connection. +// +//***************************************************************************** +struct +{ + volatile uint32_t ui32Flags; + + // + // Array to hold the MAC addresses. + // + uint8_t pui8MACAddr[8]; + + // + // Global define of the TCP structure used. + // + struct tcp_pcb *psTCP; + + // + // Global IP structure to hold a copy of the IP address. + // + struct ip_addr sLocalIP; + + // + // Global IP structure to hold a copy of the DNS resolved address. + // + struct ip_addr sServerIP; + + // + // The saved proxy name as a text string. + // + const char *pcProxyName; + + volatile enum + { + iEthNoConnection, + iEthDHCPWait, + iEthDHCPComplete, + iEthDNSWait, + iEthTCPConnectWait, + iEthTCPConnectComplete, + iEthQueryWait, + iEthTCPOpen, + iEthIdle + } eState; + + unsigned long ulRequest; + + tEventFunction pfnEvent; +} +g_sEnet; + +//***************************************************************************** +// +// Maximum size of an weather request. +// +//***************************************************************************** +#define MAX_REQUEST 256 + +extern uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// Various strings used to access weather information on the web. +// +//***************************************************************************** +static const char g_cWeatherRequest[] = + "GET http://api.openweathermap.org/data/2.5/weather?q="; + +static const char g_cWeatherRequestForecast[] = + "GET http://api.openweathermap.org/data/2.5/forecast/daily?q="; +static const char g_cMode[] = "&mode=json&units=metric"; + +static char g_cAPPIDOpenWeather[] = + "&APIID=afc5370fef1dfec1666a5676346b163b"; +static char g_cHTTP11[] = " HTTP/1.0\r\n\r\n"; + +//***************************************************************************** +// +// This structure holds the state and control values for the weather requests. +// +//***************************************************************************** +struct +{ + // + // The current weather source. + // + tWeatherSource eWeatherSource; + + // + // The format expected from the weather source. + // + enum + { + iFormatJSON + } + eFormat; + + // + // The application provided callback function. + // + tEventFunction pfnEvent; + + // + // The application provided weather information structure. + // + tWeatherReport *psWeatherReport; + + // + // The local buffer used to store the current weather request. + // + char pcRequest[MAX_REQUEST]; + + // + // The number of valid bytes in the request. + // + uint32_t ui32RequestSize; +} +g_sWeather; + +//***************************************************************************** +// +// Close an active connection. +// +//***************************************************************************** +void +EthClientReset(void) +{ + // + // No longer have a link. + // + g_sEnet.eState = iEthNoConnection; + + // + // Reset the flags to just enable the lwIP timer. + // + g_sEnet.ui32Flags = (1 << FLAG_TIMER_DHCP_EN); + + // + // Reset the addresses. + // + g_sEnet.sLocalIP.addr = 0; + g_sEnet.sServerIP.addr = 0; + + // + // Deallocate the TCP structure if it was already allocated. + // + if(g_sEnet.psTCP) + { + // + // Clear out all of the TCP callbacks. + // + tcp_sent(g_sEnet.psTCP, NULL); + tcp_recv(g_sEnet.psTCP, NULL); + tcp_err(g_sEnet.psTCP, NULL); + + // + // Close the TCP connection. + // + tcp_close(g_sEnet.psTCP); + g_sEnet.psTCP = 0; + } +} + +//***************************************************************************** +// +// Handles lwIP TCP/IP errors. +// +// \param vPArg is the state data for this connection. +// \param iErr is the error that was detected. +// +// This function is called when the lwIP TCP/IP stack has detected an error. +// The connection is no longer valid. +// +// \return None. +// +//***************************************************************************** +static void +TCPError(void *vPArg, err_t iErr) +{ +} + +//***************************************************************************** +// +// Finalizes the TCP connection in client mode. +// +// \param pvArg is the state data for this connection. +// \param psPcb is the pointer to the TCP control structure. +// \param psBuf is the buffer structure that holds the data for this receive +// event. +// \param iErr is not used in this implementation. +// +// This function is called when the lwIP TCP/IP stack has completed a TCP +// connection. +// +// \return This function will return an lwIP defined error code. +// +//***************************************************************************** +static err_t +TCPReceive(void *pvArg, struct tcp_pcb *psPcb, struct pbuf *psBuf, err_t iErr) +{ + struct pbuf *psBufCur; + int32_t i32Items; + + if(psBuf == 0) + { + // + // Tell the application that the connection was closed. + // + if(g_sWeather.pfnEvent) + { + g_sWeather.pfnEvent(ETH_EVENT_CLOSE, 0, 0); + g_sWeather.pfnEvent = 0; + } + + // + // Close out the port. + // + tcp_close(psPcb); + + if(psPcb == g_sEnet.psTCP) + { + g_sEnet.psTCP = 0; + } + + g_sEnet.eState = iEthIdle; + + return(ERR_OK); + } + + if(g_sEnet.eState == iEthQueryWait) + { + if(g_sEnet.ulRequest == WEATHER_CURRENT) + { + // + // Read items from the buffer. + // + i32Items = JSONParseCurrent(0, g_sWeather.psWeatherReport, psBuf); + + // + // Make sure some items were found. + // + if(i32Items > 0) + { + if(g_sWeather.pfnEvent) + { + g_sWeather.pfnEvent(ETH_EVENT_RECEIVE, + (void *)g_sWeather.psWeatherReport, 0); + + // + // Clear the event function and return to the idle state. + // + g_sEnet.eState = iEthIdle; + } + } + else if(i32Items < 0) + { + if(g_sWeather.pfnEvent) + { + // + // This was not a valid request. + // + g_sWeather.pfnEvent(ETH_EVENT_INVALID_REQ, 0, 0); + + // + // Clear the event function and return to the idle state. + // + g_sEnet.eState = iEthIdle; + } + } + } + else if(g_sEnet.ulRequest == WEATHER_FORECAST) + { + // + // Read items from the buffer. + // + i32Items = JSONParseForecast(0, g_sWeather.psWeatherReport, psBuf); + + if(i32Items > 0) + { + if(g_sWeather.pfnEvent) + { + g_sWeather.pfnEvent(ETH_EVENT_RECEIVE, + (void *)g_sWeather.psWeatherReport, 0); + + // + // Clear the event function and return to the idle state. + // + g_sEnet.eState = iEthIdle; + } + } + else if(i32Items < 0) + { + if(g_sWeather.pfnEvent) + { + // + // This was not a valid request. + // + g_sWeather.pfnEvent(ETH_EVENT_INVALID_REQ, 0, 0); + + // + // Clear the event function and return to the idle state. + // + g_sEnet.eState = iEthIdle; + } + } + } + } + else + { + // + // Go to idle state. + // + g_sEnet.eState = iEthIdle; + } + + // + // Initialize the linked list pointer to parse. + // + psBufCur = psBuf; + + // + // Free the buffers used since they have been processed. + // + while(psBufCur->len != 0) + { + // + // Indicate that you have received and processed this set of TCP data. + // + tcp_recved(psPcb, psBufCur->len); + + // + // Go to the next buffer. + // + psBufCur = psBufCur->next; + + // + // Terminate if there are no more buffers. + // + if(psBufCur == 0) + { + break; + } + } + + // + // Free the memory space allocated for this receive. + // + pbuf_free(psBuf); + + // + // Return. + // + return(ERR_OK); +} + +//***************************************************************************** +// +// Handles acknowledgment of data transmitted via Ethernet. +// +// \param pvArg is the state data for this connection. +// \param psPcb is the pointer to the TCP control structure. +// \param ui16Len is the length of the data transmitted. +// +// This function is called when the lwIP TCP/IP stack has received an +// acknowledgment for data that has been transmitted. +// +// \return This function will return an lwIP defined error code. +// +//***************************************************************************** +static err_t +TCPSent(void *pvArg, struct tcp_pcb *psPcb, u16_t ui16Len) +{ + // + // Return OK. + // + return (ERR_OK); +} + +//***************************************************************************** +// +// Finalizes the TCP connection in client mode. +// +// \param pvArg is the state data for this connection. +// \param psPcb is the pointer to the TCP control structure. +// \param iErr is not used in this implementation. +// +// This function is called when the lwIP TCP/IP stack has completed a TCP +// connection. +// +// \return This function will return an lwIP defined error code. +// +//***************************************************************************** +static err_t +TCPConnected(void *pvArg, struct tcp_pcb *psPcb, err_t iErr) +{ + // + // Check if there was a TCP error. + // + if(iErr != ERR_OK) + { + // + // Clear out all of the TCP callbacks. + // + tcp_sent(psPcb, NULL); + tcp_recv(psPcb, NULL); + tcp_err(psPcb, NULL); + + // + // Close the TCP connection. + // + tcp_close(psPcb); + + if(psPcb == g_sEnet.psTCP) + { + g_sEnet.psTCP = 0; + } + + // + // And return. + // + return (ERR_OK); + } + + // + // Setup the TCP receive function. + // + tcp_recv(psPcb, TCPReceive); + + // + // Setup the TCP error function. + // + tcp_err(psPcb, TCPError); + + // + // Setup the TCP sent callback function. + // + tcp_sent(psPcb, TCPSent); + + // + // Connection is complete. + // + g_sEnet.eState = iEthTCPConnectComplete; + + // + // Return a success code. + // + return(ERR_OK); +} + +//***************************************************************************** +// +// TCP connect +// +// This function attempts to connect to a TCP endpoint. +// +// \return None. +// +//***************************************************************************** +err_t +EthClientTCPConnect(uint32_t ui32Port) +{ + err_t eTCPReturnCode; + + // + // Enable the TCP timer function calls. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_TCP_EN) = 1; + + if(g_sEnet.psTCP) + { + // + // Initially clear out all of the TCP callbacks. + // + tcp_sent(g_sEnet.psTCP, NULL); + tcp_recv(g_sEnet.psTCP, NULL); + tcp_err(g_sEnet.psTCP, NULL); + + // + // Make sure there is no lingering TCP connection. + // + tcp_close(g_sEnet.psTCP); + } + + // + // Create a new TCP socket. + // + g_sEnet.psTCP = tcp_new(); + + // + // Check if you need to go through a proxy. + // + if(g_sEnet.pcProxyName != 0) + { + // + // Attempt to connect through the proxy server. + // + eTCPReturnCode = tcp_connect(g_sEnet.psTCP, &g_sEnet.sServerIP, + ui32Port, TCPConnected); + } + else + { + // + // Attempt to connect to the server directly. + // + eTCPReturnCode = tcp_connect(g_sEnet.psTCP, &g_sEnet.sServerIP, + ui32Port, TCPConnected); + } + + return(eTCPReturnCode); +} + +//***************************************************************************** +// +// TCP connect +// +// This function attempts to connect to a TCP endpoint. +// +// \return None. +// +//***************************************************************************** +void +EthClientTCPDisconnect(void) +{ + // + // No longer have a link. + // + g_sEnet.eState = iEthNoConnection; + + // + // Deallocate the TCP structure if it was already allocated. + // + if(g_sEnet.psTCP) + { + // + // Close the TCP connection. + // + tcp_close(g_sEnet.psTCP); + g_sEnet.psTCP = 0; + } +} + +//***************************************************************************** +// +// Handler function when the DNS server gets a response or times out. +// +// \param pcName is DNS server name. +// \param psIPAddr is the DNS server's IP address. +// \param vpArg is the configurable argument. +// +// This function is called when the DNS server resolves an IP or times out. +// If the DNS server returns an IP structure that is not NULL, add the IP to +// to the g_sEnet.sServerIP IP structure. +// +// \return None. +// +//***************************************************************************** +static void +DNSServerFound(const char *pcName, struct ip_addr *psIPAddr, void *vpArg) +{ + // + // Check if a valid DNS server address was found. + // + if(psIPAddr != NULL) + { + // + // Copy the returned IP address into a global IP address. + // + g_sEnet.sServerIP = *psIPAddr; + + // + // Tell the main program that a DNS address was found. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_DNS_ADDRFOUND) = 1; + } + else + { + // + // Disable the DNS timer. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN) = 0; + } +} + +//***************************************************************************** +// +// Required by lwIP library to support any host-related timer functions. +// +//***************************************************************************** +void +lwIPHostTimerHandler(void) +{ +} + +//***************************************************************************** +// +// Send a request to the server +// +// \param pcRequest request to be sent +// \param ui32Size length of the request to be sent. this is usually the size +// of the request minus the termination character +// +// This function will send the request to the connected server +// +// \return the lwIP error code. +// +//***************************************************************************** +err_t +EthClientSend(char *pcRequest, uint32_t ui32Size) +{ + err_t eError; + + eError = tcp_write(g_sEnet.psTCP, pcRequest, ui32Size, + TCP_WRITE_FLAG_COPY); + + // + // Write data for sending (but does not send it immediately). + // + if(eError == ERR_OK) + { + // + // Find out what we can send and send it + // + tcp_output(g_sEnet.psTCP); + } + + return(eError); +} + +//***************************************************************************** +// +// DHCP connect +// +// This function obtains the MAC address from the User registers, starts the +// DHCP timer and blocks until an IP address is obtained. +// +// \return None. +// +//***************************************************************************** +err_t +EthClientDHCPConnect(void) +{ + // + // Check if the DHCP has already been started. + // + if(HWREGBITW(&g_sEnet.ui32Flags, FLAG_DHCP_STARTED) == 0) + { + // + // Set the DCHP started flag. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_DHCP_STARTED) = 1; + } + else + { + // + // If DHCP has already been started, we need to clear the IPs and + // switch to static. This forces the LWIP to get new IP address + // and retry the DHCP connection. + // + lwIPNetworkConfigChange(0, 0, 0, IPADDR_USE_STATIC); + + // + // Restart the DHCP connection. + // + lwIPNetworkConfigChange(0, 0, 0, IPADDR_USE_DHCP); + } + + return ERR_OK; +} + +//***************************************************************************** +// +// Handler function when the DNS server gets a response or times out. +// +// \param pcName is DNS server name. +// +// This function is called when the DNS server resolves an IP or times out. +// If the DNS server returns an IP structure that is not NULL, add the IP to +// to the g_sEnet.sServerIP IP structure. +// +// \return None. +// +//***************************************************************************** +int32_t +EthClientDNSResolve(const char *pcName) +{ + err_t iRet; + + if(HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN)) + { + return(ERR_INPROGRESS); + } + + // + // Set DNS config timer to true. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN) = 1; + + // + // Initialize the host name IP address found flag to false. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_DNS_ADDRFOUND) = 0; + + // + // Resolve host name. + // + iRet = dns_gethostbyname(pcName, &g_sEnet.sServerIP, DNSServerFound, 0); + + // + // If ERR_OK is returned, the local DNS table resolved the host name. If + // ERR_INPROGRESS is returned, the DNS request has been queued and will be + // sent to the DNS server. + // + if(iRet == ERR_OK) + { + // + // Stop calling the DNS timer function. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN) = 0; + } + + // + // Return host name not found. + // + return(iRet); +} + +//***************************************************************************** +// +// Returns the IP address for this interface. +// +// This function will read and return the currently assigned IP address for +// the Tiva Ethernet interface. +// +// \return Returns the assigned IP address for this interface. +// +//***************************************************************************** +uint32_t +EthClientAddrGet(void) +{ + // + // Return IP. + // + return(lwIPLocalIPAddrGet()); +} + +//***************************************************************************** +// +// Returns the weather server IP address for this interface. +// +// This function will read and return the weather server IP address that is +// currently in use. This could be the proxy server if the Internet proxy +// is enabled. +// +// \return Returns the weather server IP address for this interface. +// +//***************************************************************************** +uint32_t +EthClientServerAddrGet(void) +{ + // + // Return IP. + // + return((uint32_t)g_sEnet.sServerIP.addr); +} + +//***************************************************************************** +// +// Returns the MAC address for the Tiva Ethernet controller. +// +// \param pui8MACAddr is the 6 byte MAC address assigned to the Ethernet +// controller. +// +// This function will read and return the MAC address for the Ethernet +// controller. +// +// \return Returns the weather server IP address for this interface. +// +//***************************************************************************** +void +EthClientMACAddrGet(uint8_t *pui8MACAddr) +{ + int32_t iIdx; + + for(iIdx = 0; iIdx < 6; iIdx++) + { + pui8MACAddr[iIdx] = g_sEnet.pui8MACAddr[iIdx]; + } +} + +//***************************************************************************** +// +// Set the proxy string for the Ethernet connection. +// +// \param pcProxyName is the string used as the proxy server name. +// +// This function sets the current proxy used by the Ethernet connection. The +// \e pcProxyName value can be 0 to indicate that no proxy is in use or it can +// be a pointer to a string that holds the name of the proxy server to use. +// The content of the pointer passed to \e pcProxyName should not be changed +// after this call as this function only stores the pointer and does not copy +// the data from this pointer. +// +// \return None. +// +//***************************************************************************** +void +EthClientProxySet(const char *pcProxyName) +{ + // + // Save the new proxy string. + // + g_sEnet.pcProxyName = pcProxyName; + + // + // Reset the connection on any change to the proxy. + // + EthClientReset(); +} + +//***************************************************************************** +// +// Initialize the Ethernet client +// +// This function initializes all the Ethernet components to not configured. +// This tells the SysTick interrupt which timer modules to call. +// +// \return None. +// +//***************************************************************************** +void +EthClientInit(tEventFunction pfnEvent) +{ + uint32_t ui32User0, ui32User1; + + // + // Initialize all the Ethernet components to not configured. This tells + // the SysTick interrupt which timer modules to call. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DHCP_EN) = 0; + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN) = 0; + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_TCP_EN) = 0; + + g_sEnet.eState = iEthNoConnection; + + g_sEnet.pfnEvent = pfnEvent; + + // + // Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC + // address needed to program the hardware registers, then program the MAC + // address into the Ethernet Controller registers. + // + FlashUserGet(&ui32User0, &ui32User1); + + g_sEnet.pui8MACAddr[0] = ((ui32User0 >> 0) & 0xff); + g_sEnet.pui8MACAddr[1] = ((ui32User0 >> 8) & 0xff); + g_sEnet.pui8MACAddr[2] = ((ui32User0 >> 16) & 0xff); + g_sEnet.pui8MACAddr[3] = ((ui32User1 >> 0) & 0xff); + g_sEnet.pui8MACAddr[4] = ((ui32User1 >> 8) & 0xff); + g_sEnet.pui8MACAddr[5] = ((ui32User1 >> 16) & 0xff); + + lwIPInit(g_ui32SysClock, g_sEnet.pui8MACAddr, 0, 0, 0, IPADDR_USE_DHCP); + + // + // Start lwIP tick interrupt. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DHCP_EN) = 1; +} + +//***************************************************************************** +// +// Periodic Tick for the Ethernet client +// +// This function is the needed periodic tick for the Ethernet client. It needs +// to be called periodically through the use of a timer or systick. +// +// \return None. +// +//***************************************************************************** +void +EthClientTick(uint32_t ui32TickMS) +{ + uint32_t ui32IPAddr; + int32_t i32Ret; + + if(HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DHCP_EN)) + { + lwIPTimer(ui32TickMS); + } + + if(HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN)) + { + dns_tmr(); + } + + if(HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_TCP_EN)) + { + tcp_tmr(); + } + + // + // Check for loss of link. + // + if((g_sEnet.eState != iEthNoConnection) && + (lwIPLocalIPAddrGet() == 0xffffffff)) + { + // + // Reset the connection due to a loss of link. + // + EthClientReset(); + + // + // Signal a disconnect event. + // + g_sEnet.pfnEvent(ETH_EVENT_DISCONNECT, 0, 0); + } + else if(g_sEnet.eState == iEthNoConnection) + { + // + // Once link is detected start DHCP. + // + if(lwIPLocalIPAddrGet() != 0xffffffff) + { + EthClientDHCPConnect(); + + g_sEnet.eState = iEthDHCPWait; + } + } + else if(g_sEnet.eState == iEthDHCPWait) + { + // + // Get IP address. + // + ui32IPAddr = lwIPLocalIPAddrGet(); + + // + // If IP Address has not yet been assigned, update the display + // accordingly. + // + if((ui32IPAddr != 0xffffffff) && (ui32IPAddr != 0)) + { + // + // Update the DHCP IP address. + // + g_sEnet.sLocalIP.addr = ui32IPAddr; + + g_sEnet.eState = iEthDHCPComplete; + + // + // Stop DHCP timer since an address has been provided. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_DHCP_STARTED) = 0; + } + } + else if(g_sEnet.eState == iEthDHCPComplete) + { + if(g_sEnet.pcProxyName == 0) + { + // + // Resolve the host by name. + // + i32Ret = EthClientDNSResolve("api.openweathermap.org"); + } + else + { + // + // Resolve the proxy by name. + // + i32Ret = EthClientDNSResolve(g_sEnet.pcProxyName); + } + + if(i32Ret == ERR_OK) + { + // + // If the address was already returned then go to idle. + // + g_sEnet.eState = iEthIdle; + + // + // Notify the main routine of the new Ethernet connection. + // + g_sEnet.pfnEvent(ETH_EVENT_CONNECT, &g_sEnet.sLocalIP.addr, 4); + } + else if(i32Ret == ERR_INPROGRESS) + { + // + // If the request is pending the go to the iEthDNSWait state. + // + g_sEnet.eState = iEthDNSWait; + } + } + else if(g_sEnet.eState == iEthDNSWait) + { + // + // Check if the host name was resolved. + // + if(HWREGBITW(&g_sEnet.ui32Flags, FLAG_DNS_ADDRFOUND)) + { + // + // Stop calling the DNS timer function. + // + HWREGBITW(&g_sEnet.ui32Flags, FLAG_TIMER_DNS_EN) = 0; + + g_sEnet.eState = iEthIdle; + + // + // Notify the main routine of the new Ethernet connection. + // + g_sEnet.pfnEvent(ETH_EVENT_CONNECT, &g_sEnet.sLocalIP.addr, 4); + } + } + else if(g_sEnet.eState == iEthTCPConnectWait) + { + } + else if(g_sEnet.eState == iEthTCPConnectComplete) + { + err_t eError; + + g_sEnet.eState = iEthTCPOpen; + + eError = EthClientSend(g_sWeather.pcRequest, + g_sWeather.ui32RequestSize); + + if(eError == ERR_OK) + { + // + // Waiting on a query response. + // + g_sEnet.eState = iEthQueryWait; + } + else + { + g_sEnet.eState = iEthIdle; + } + } +} + +//***************************************************************************** +// +// Set the current weather source. +// +//***************************************************************************** +void +WeatherSourceSet(tWeatherSource eWeatherSource) +{ + // + // Save the source. + // + g_sWeather.eWeatherSource = eWeatherSource; + g_sWeather.eFormat = iFormatJSON; +} + +//***************************************************************************** +// +// Merges strings into the current request at a given pointer and offset. +// +//***************************************************************************** +static int32_t +MergeRequest(int32_t i32Offset, const char *pcSrc, int32_t i32Size, + bool bReplaceSpace) +{ + int32_t i32Idx; + + // + // Copy the base request to the buffer. + // + for(i32Idx = 0; i32Idx < i32Size; i32Idx++) + { + if((pcSrc[i32Idx] == ' ') && (bReplaceSpace)) + { + if((i32Offset + 3) >= sizeof(g_sWeather.pcRequest)) + { + break; + } + g_sWeather.pcRequest[i32Offset++] = '%'; + g_sWeather.pcRequest[i32Offset++] = '2'; + g_sWeather.pcRequest[i32Offset] = '0'; + } + else + { + g_sWeather.pcRequest[i32Offset] = pcSrc[i32Idx]; + } + + if((i32Offset >= sizeof(g_sWeather.pcRequest)) || + (pcSrc[i32Idx] == 0)) + { + break; + } + + i32Offset++; + } + + return(i32Offset); +} + +//***************************************************************************** +// +// Gets the daily forecast for a given city. +// +//***************************************************************************** +int32_t +WeatherForecast(tWeatherSource eWeatherSource, const char *pcQuery, + tWeatherReport *psWeatherReport, tEventFunction pfnEvent) +{ + int32_t i32Idx; + const char pcCount[] = "&cnt=1"; + + // + // If the requested source is not valid or there is no call back then + // just fail. + // + if((eWeatherSource != iWSrcOpenWeatherMap) || (g_sWeather.pfnEvent)) + { + return (-1); + } + + g_sWeather.pfnEvent = pfnEvent; + g_sWeather.psWeatherReport = psWeatherReport; + + // + // Connect or reconnect to port 80. + // + g_sEnet.eState = iEthTCPConnectWait; + + // + // Copy the base forecast request to the buffer. + // + i32Idx = MergeRequest(0, g_cWeatherRequestForecast, + sizeof(g_cWeatherRequestForecast), false); + + // + // Append the request. + // + i32Idx = MergeRequest(i32Idx, pcQuery, sizeof(g_sWeather.pcRequest), + true); + + // + // Append the request mode. + // + i32Idx = MergeRequest(i32Idx, g_cMode, sizeof(g_cMode), false); + + // + // Append the count. + // + i32Idx = MergeRequest(i32Idx, pcCount, sizeof(pcCount), false); + + // + // Append the App ID. + // + i32Idx = MergeRequest(i32Idx, g_cAPPIDOpenWeather, + sizeof(g_cAPPIDOpenWeather), false); + + // + // Append the "HTTP:/1.1" string. + // + i32Idx = MergeRequest(i32Idx, g_cHTTP11, sizeof(g_cHTTP11), false); + + // + // Forcast weather report request. + // + g_sEnet.ulRequest = WEATHER_FORECAST; + + if(EthClientTCPConnect(80) != ERR_OK) + { + return(-1); + } + + // + // Save the size of the request. + // + g_sWeather.ui32RequestSize = i32Idx; + + return(0); +} + +//***************************************************************************** +// +// Gets the current weather information for a given city. +// +//***************************************************************************** +int32_t +WeatherCurrent(tWeatherSource eWeatherSource, const char *pcQuery, + tWeatherReport *psWeatherReport, tEventFunction pfnEvent) +{ + int32_t i32Idx; + + // + // If the requested source is not valid or there is no call back then + // just fail. + // + if((eWeatherSource != iWSrcOpenWeatherMap) || (g_sWeather.pfnEvent)) + { + return (-1); + } + + g_sWeather.pfnEvent = pfnEvent; + g_sWeather.psWeatherReport = psWeatherReport; + + // + // Copy the base current request to the buffer. + // + i32Idx = MergeRequest(0, g_cWeatherRequest, sizeof(g_cWeatherRequest), + false); + + // + // Append the request. + // + i32Idx = MergeRequest(i32Idx, pcQuery, sizeof(g_sWeather.pcRequest), true); + + // + // Append the request mode. + // + i32Idx = MergeRequest(i32Idx, g_cMode, sizeof(g_cMode), false); + + // + // Append the App ID. + // + i32Idx = MergeRequest(i32Idx, g_cAPPIDOpenWeather, + sizeof(g_cAPPIDOpenWeather), false); + + // + // Append the "HTTP:/1.1" string. + // + i32Idx = MergeRequest(i32Idx, g_cHTTP11, sizeof(g_cHTTP11), false); + + // + // Save the size of this request. + // + g_sWeather.ui32RequestSize = i32Idx; + + // + // Connect or reconnect to port 80. + // + g_sEnet.eState = iEthTCPConnectWait; + + // + // Current weather report request. + // + g_sEnet.ulRequest = WEATHER_CURRENT; + + // + // Connect to server + // + if(EthClientTCPConnect(80) != ERR_OK) + { + return(-1); + } + + return(0); +} diff --git a/boards/dk-tm4c129x/qs_weather/eth_client.h b/boards/dk-tm4c129x/qs_weather/eth_client.h new file mode 100644 index 0000000..cccff86 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/eth_client.h @@ -0,0 +1,163 @@ +//***************************************************************************** +// +// eth_client.h - Prototypes for the driver for the eth_client +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#ifndef ETH_CLIENT_H_ +#define ETH_CLIENT_H_ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +// Events passed back to the application. +// +//***************************************************************************** +#define ETH_EVENT_RECEIVE 0x00000001 +#define ETH_EVENT_CONNECT 0x00000002 +#define ETH_EVENT_DISCONNECT 0x00000003 +#define ETH_EVENT_CLOSE 0x00000004 +#define ETH_EVENT_INVALID_REQ 0x00000005 + +//***************************************************************************** +// +// The weather access methods. +// +//***************************************************************************** +typedef enum +{ + // + // openweathermap.org. + // + iWSrcOpenWeatherMap +} +tWeatherSource; + +//***************************************************************************** +// +// Generic weather reporting structure. +// +//***************************************************************************** +typedef struct +{ + // + // The brief weather description, this is caller provided. + // + const char *pcDescription; + + // + // The current temperature(units determined by caller). + // + int32_t i32Temp; + + // + // The daily high temperature(units determined by caller). + // + int32_t i32TempHigh; + + // + // The daily low temperature(units determined by caller). + // + int32_t i32TempLow; + + // + // The current humidity(units determined by caller). + // + int32_t i32Humidity; + + // + // The current atmospheric pressure(units determined by caller). + // + int32_t i32Pressure; + + // + // The last time these values were update (GMT Unix time). + // + uint32_t ui32Time; + + // + // The sunrise time (GMT Unix time). + // + uint32_t ui32SunRise; + + // + // The sunset time (GMT Unix time). + // + uint32_t ui32SunSet; + + // + // Icon image. + // + const uint8_t *pui8Image; +} +tWeatherReport; + +//***************************************************************************** +// +// The type definition for event functions. +// +//***************************************************************************** +typedef void (* tEventFunction)(uint32_t ui32Event, void* pvData, + uint32_t ui32Param); + +//***************************************************************************** +// +// Exported Ethernet function prototypes. +// +//***************************************************************************** +extern void EthClientInit(tEventFunction pfnEvent); +extern void EthClientProxySet(const char *pcProxyName); +extern void EthClientTick(uint32_t ui32TickMS); +extern uint32_t EthClientAddrGet(void); +extern void EthClientMACAddrGet(uint8_t *pui8Addr); +extern uint32_t EthClientServerAddrGet(void); +extern void EthClientReset(void); +void EthClientTCPDisconnect(void); + +//***************************************************************************** +// +// Exported weather related prototypes. +// +//***************************************************************************** +extern void WeatherSourceSet(tWeatherSource eWeatherSource); +extern int32_t WeatherCurrent(tWeatherSource eWeatherSource, + const char *pcQuery, + tWeatherReport *psWeather, + tEventFunction pfnEvent); +extern int32_t WeatherForecast(tWeatherSource eWeatherSource, + const char *pcQuery, + tWeatherReport *psWeather, + tEventFunction pfnEvent); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.bin b/boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.bin new file mode 100644 index 0000000..93df16e Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.bin differ diff --git a/boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.out b/boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.out new file mode 100644 index 0000000..dad1c37 Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/ewarm/Exe/qs_weather.out differ diff --git a/boards/dk-tm4c129x/qs_weather/gcc/qs_weather.axf b/boards/dk-tm4c129x/qs_weather/gcc/qs_weather.axf new file mode 100644 index 0000000..9b85507 Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/gcc/qs_weather.axf differ diff --git a/boards/dk-tm4c129x/qs_weather/gcc/qs_weather.bin b/boards/dk-tm4c129x/qs_weather/gcc/qs_weather.bin new file mode 100644 index 0000000..ca0216a Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/gcc/qs_weather.bin differ diff --git a/boards/dk-tm4c129x/qs_weather/images.c b/boards/dk-tm4c129x/qs_weather/images.c new file mode 100644 index 0000000..773b223 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/images.c @@ -0,0 +1,7176 @@ +//***************************************************************************** +// +// images.c - The image sets for the various weather conditions. Images are +// derived from the work by user d3stroy. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" + +//***************************************************************************** +// +// Sun Image +// +//***************************************************************************** +const uint8_t g_pui8SunImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 255, + 0x00, 0x00, 0x00, + 0x00, 0x78, 0xd3, + 0x00, 0x7c, 0xef, + 0x00, 0x7e, 0xef, + 0x00, 0x7f, 0xef, + 0x00, 0x80, 0xef, + 0x00, 0x81, 0xef, + 0x00, 0x82, 0xef, + 0x01, 0x82, 0xef, + 0x00, 0x83, 0xef, + 0x00, 0x83, 0xf0, + 0x01, 0x84, 0xf1, + 0x00, 0x84, 0xf2, + 0x02, 0x85, 0xf0, + 0x00, 0x85, 0xf4, + 0x00, 0x86, 0xf5, + 0x07, 0x89, 0xf2, + 0x00, 0x88, 0xf7, + 0x00, 0x89, 0xfa, + 0x00, 0x8a, 0xfb, + 0x00, 0x8b, 0xfd, + 0x00, 0x8b, 0xfe, + 0x09, 0x8f, 0xf4, + 0x00, 0x8c, 0xfe, + 0x00, 0x8c, 0xff, + 0x00, 0x8d, 0xfe, + 0x00, 0x8d, 0xff, + 0x00, 0x8e, 0xff, + 0x00, 0x8f, 0xfe, + 0x00, 0x8f, 0xff, + 0x00, 0x90, 0xff, + 0x00, 0x91, 0xff, + 0x01, 0x91, 0xff, + 0x00, 0x94, 0xfa, + 0x00, 0x92, 0xfe, + 0x05, 0x91, 0xff, + 0x00, 0x92, 0xff, + 0x00, 0x93, 0xff, + 0x01, 0x93, 0xff, + 0x00, 0x99, 0xf4, + 0x00, 0x94, 0xfe, + 0x00, 0x94, 0xff, + 0x00, 0x95, 0xfe, + 0x00, 0x95, 0xff, + 0x01, 0x95, 0xff, + 0x00, 0x96, 0xfe, + 0x04, 0x97, 0xfb, + 0x00, 0x9b, 0xf5, + 0x00, 0x96, 0xff, + 0x01, 0x96, 0xff, + 0x00, 0x98, 0xfd, + 0x17, 0x97, 0xf8, + 0x00, 0x9d, 0xf5, + 0x00, 0x9c, 0xf7, + 0x01, 0x98, 0xff, + 0x0c, 0x97, 0xfe, + 0x00, 0x9e, 0xf7, + 0x00, 0x9a, 0xff, + 0x00, 0x9b, 0xff, + 0x00, 0x9d, 0xfc, + 0x01, 0xa0, 0xf7, + 0x00, 0xa0, 0xf9, + 0x03, 0xa0, 0xfa, + 0x01, 0xa2, 0xf7, + 0x01, 0x9e, 0xff, + 0x00, 0xa1, 0xfb, + 0x0b, 0xa1, 0xf7, + 0x00, 0x9f, 0xff, + 0x01, 0xa2, 0xf9, + 0x18, 0x9c, 0xfd, + 0x00, 0xa0, 0xff, + 0x18, 0x9f, 0xf9, + 0x01, 0xa5, 0xf7, + 0x01, 0xa3, 0xfc, + 0x00, 0xa3, 0xff, + 0x01, 0xa5, 0xfb, + 0x00, 0xa5, 0xfd, + 0x01, 0xa8, 0xf7, + 0x01, 0xa4, 0xff, + 0x00, 0xa5, 0xfe, + 0x04, 0xa5, 0xfd, + 0x20, 0x9f, 0xff, + 0x0b, 0xa4, 0xfd, + 0x01, 0xa7, 0xfb, + 0x01, 0xa6, 0xfd, + 0x01, 0xa5, 0xff, + 0x17, 0xa4, 0xfa, + 0x02, 0xa6, 0xfe, + 0x00, 0xa7, 0xfe, + 0x01, 0xab, 0xf6, + 0x00, 0xa8, 0xfd, + 0x01, 0xa7, 0xff, + 0x1f, 0xa4, 0xfa, + 0x01, 0xa8, 0xfe, + 0x00, 0xa8, 0xff, + 0x01, 0xab, 0xf9, + 0x01, 0xa9, 0xfd, + 0x02, 0xaa, 0xfc, + 0x00, 0xa9, 0xff, + 0x03, 0xa9, 0xff, + 0x02, 0xad, 0xf8, + 0x05, 0xa9, 0xff, + 0x01, 0xaa, 0xff, + 0x27, 0xa5, 0xfc, + 0x02, 0xad, 0xfa, + 0x01, 0xb0, 0xf5, + 0x01, 0xac, 0xfd, + 0x28, 0xa4, 0xff, + 0x01, 0xaf, 0xf8, + 0x02, 0xad, 0xfc, + 0x0a, 0xaa, 0xff, + 0x01, 0xac, 0xff, + 0x03, 0xb0, 0xf7, + 0x04, 0xac, 0xff, + 0x02, 0xad, 0xfe, + 0x01, 0xad, 0xff, + 0x01, 0xb3, 0xf4, + 0x00, 0xae, 0xff, + 0x01, 0xae, 0xff, + 0x01, 0xb3, 0xf6, + 0x0f, 0xac, 0xff, + 0x02, 0xb0, 0xfc, + 0x01, 0xaf, 0xff, + 0x27, 0xac, 0xf7, + 0x02, 0xb3, 0xf7, + 0x02, 0xaf, 0xff, + 0x15, 0xac, 0xfe, + 0x04, 0xaf, 0xff, + 0x1a, 0xac, 0xfd, + 0x20, 0xac, 0xfb, + 0x00, 0xb0, 0xff, + 0x01, 0xb3, 0xf9, + 0x01, 0xb1, 0xfd, + 0x01, 0xb0, 0xff, + 0x32, 0xa9, 0xfb, + 0x08, 0xaf, 0xff, + 0x02, 0xb3, 0xfa, + 0x01, 0xb5, 0xf7, + 0x01, 0xb3, 0xfb, + 0x01, 0xb1, 0xff, + 0x0c, 0xaf, 0xff, + 0x02, 0xb2, 0xfe, + 0x00, 0xb2, 0xff, + 0x01, 0xb3, 0xfd, + 0x01, 0xb2, 0xff, + 0x32, 0xa9, 0xff, + 0x00, 0xb3, 0xfe, + 0x06, 0xb5, 0xf8, + 0x00, 0xb3, 0xff, + 0x39, 0xa9, 0xfe, + 0x28, 0xac, 0xff, + 0x01, 0xb5, 0xfc, + 0x01, 0xb5, 0xfd, + 0x01, 0xb4, 0xff, + 0x06, 0xb7, 0xf8, + 0x02, 0xb5, 0xfe, + 0x06, 0xb4, 0xff, + 0x01, 0xb5, 0xff, + 0x0d, 0xb4, 0xfd, + 0x3f, 0xab, 0xfe, + 0x13, 0xb3, 0xff, + 0x0c, 0xb8, 0xf8, + 0x01, 0xb7, 0xfe, + 0x07, 0xb7, 0xfe, + 0x19, 0xb4, 0xff, + 0x32, 0xb2, 0xfa, + 0x11, 0xb9, 0xf9, + 0x24, 0xb4, 0xfd, + 0x1f, 0xb4, 0xff, + 0x00, 0xba, 0xff, + 0x3f, 0xaf, 0xfe, + 0x32, 0xb1, 0xff, + 0x1e, 0xb5, 0xff, + 0x13, 0xb8, 0xff, + 0x2a, 0xb5, 0xfd, + 0x25, 0xb5, 0xff, + 0x3c, 0xb3, 0xfc, + 0x00, 0xbd, 0xff, + 0x06, 0xbd, 0xfe, + 0x1b, 0xbc, 0xf9, + 0x0c, 0xbc, 0xff, + 0x12, 0xbc, 0xfe, + 0x44, 0xb4, 0xfc, + 0x1c, 0xba, 0xff, + 0x1d, 0xbb, 0xff, + 0x2b, 0xba, 0xfe, + 0x24, 0xbc, 0xfd, + 0x01, 0xc2, 0xff, + 0x37, 0xb9, 0xfe, + 0x40, 0xb9, 0xfd, + 0x30, 0xbd, 0xfb, + 0x49, 0xb9, 0xfc, + 0x29, 0xc0, 0xfa, + 0x23, 0xc0, 0xfd, + 0x1d, 0xc1, 0xfe, + 0x31, 0xbd, 0xff, + 0x14, 0xc4, 0xff, + 0x37, 0xbe, 0xfe, + 0x51, 0xbc, 0xfa, + 0x29, 0xc1, 0xff, + 0x32, 0xc3, 0xfb, + 0x40, 0xbf, 0xfe, + 0x49, 0xbe, 0xfd, + 0x3a, 0xc4, 0xfb, + 0x40, 0xc5, 0xf7, + 0x1c, 0xc8, 0xff, + 0x52, 0xc0, 0xfd, + 0x5a, 0xc1, 0xfa, + 0x3a, 0xc5, 0xfe, + 0x32, 0xc6, 0xff, + 0x23, 0xc9, 0xff, + 0x41, 0xc5, 0xfc, + 0x29, 0xc8, 0xff, + 0x42, 0xc4, 0xfe, + 0x48, 0xc6, 0xfa, + 0x49, 0xc4, 0xfe, + 0x60, 0xc3, 0xf8, + 0x29, 0xcc, 0xff, + 0x4f, 0xc6, 0xfd, + 0x55, 0xc5, 0xfd, + 0x51, 0xc9, 0xfa, + 0x2f, 0xcd, 0xff, + 0x49, 0xca, 0xfc, + 0x68, 0xc7, 0xf8, + 0x5c, 0xc7, 0xfd, + 0x62, 0xc7, 0xfb, + 0x34, 0xce, 0xff, + 0x59, 0xca, 0xfb, + 0x6c, 0xc8, 0xf8, + 0x39, 0xce, 0xff, + 0x41, 0xcd, 0xff, + 0x53, 0xcc, 0xfb, + 0x62, 0xcb, 0xfa, + 0x60, 0xca, 0xfd, + 0x5b, 0xcc, 0xfb, + 0x62, 0xcc, 0xf9, + 0x3b, 0xd1, 0xff, + 0x6c, 0xcc, 0xf8, + 0x72, 0xcc, 0xf6, + 0x6a, 0xcc, 0xfb, + 0x6b, 0xce, 0xf7, + 0x6a, 0xcd, 0xfa, + 0x62, 0xcf, 0xfa, + 0x71, 0xce, 0xf8, + 0x41, 0xd4, 0xff, + 0x6a, 0xd0, 0xfb, + 0x48, 0xd6, 0xff, + 0x73, 0xd4, 0xfd, + 0x6d, 0xd5, 0xff, + 0x72, 0xd7, 0xfe, + 0x76, 0xd8, 0xfe, + 0x73, 0xda, 0xff, + 0x78, 0xdc, 0xff, + 0x7c, 0xdc, 0xff, + 0x77, 0xdd, 0xff, + 0x86, 0xe0, 0xff, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x7f, 0x4a, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x7f, 0x39, 0x07, 0x07, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x43, + 0x7f, 0x30, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x2a, 0x7f, 0x30, 0x07, 0x07, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x30, + 0x31, 0x30, 0x43, 0x07, 0x07, 0x00, 0x00, 0x01, 0x5f, 0xff, 0x17, 0x77, + 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x38, 0x00, 0x43, 0x5f, 0x5f, 0x59, + 0x30, 0x30, 0x2a, 0xc7, 0x47, 0x07, 0x00, 0x00, 0x39, 0x5f, 0x17, 0x77, + 0xfc, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x43, 0x60, 0x2a, 0x07, + 0x07, 0x00, 0x2a, 0x30, 0x30, 0x30, 0x67, 0x4a, 0x47, 0x07, 0x43, 0x30, + 0x67, 0x1f, 0x77, 0xfc, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x43, + 0x31, 0x30, 0x39, 0x07, 0x07, 0x30, 0x30, 0x30, 0x4f, 0x9f, 0x17, 0x00, + 0x4f, 0x67, 0x2f, 0x87, 0x3f, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x01, + 0x01, 0x30, 0x30, 0x60, 0x43, 0x07, 0x05, 0x39, 0x2b, 0x2b, 0x2b, 0x2b, + 0x61, 0x2b, 0x57, 0x0d, 0x01, 0x2a, 0x30, 0x43, 0x67, 0xff, 0x1f, 0x77, + 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x00, 0x00, 0x2b, 0x30, 0x30, + 0x43, 0x07, 0x00, 0x22, 0x00, 0x8e, 0x01, 0x29, 0x29, 0x29, 0xe9, 0x39, + 0xc1, 0x57, 0x0b, 0x01, 0x2a, 0x30, 0x30, 0x43, 0x6f, 0xff, 0x27, 0x77, + 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x30, 0x30, 0x30, + 0x30, 0x43, 0x07, 0x00, 0x00, 0x58, 0x00, 0x00, 0x36, 0x25, 0x25, 0x25, + 0xa8, 0xe9, 0x25, 0x5f, 0xa9, 0x09, 0x01, 0x2a, 0x30, 0x1f, 0x30, 0x30, + 0x43, 0x6f, 0x27, 0x77, 0x2f, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x00, + 0x00, 0x30, 0x30, 0x08, 0x30, 0x30, 0x2b, 0x43, 0x07, 0x5e, 0x75, 0x00, + 0x11, 0x24, 0x24, 0x24, 0xe9, 0x24, 0x24, 0x30, 0x5e, 0x00, 0x4c, 0x00, + 0x00, 0x01, 0x28, 0x2b, 0x30, 0x2b, 0x3f, 0x30, 0x43, 0x76, 0x36, 0x87, + 0x3f, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x02, 0x30, 0x2b, 0x2b, 0x2b, + 0x10, 0x29, 0x29, 0x40, 0x06, 0x58, 0x5e, 0x24, 0x1f, 0x21, 0x1f, 0x1f, + 0xe9, 0x1e, 0x1f, 0x1f, 0x46, 0x5c, 0x00, 0x75, 0x75, 0x00, 0x01, 0x22, + 0x29, 0x2b, 0x29, 0x1f, 0x2b, 0x30, 0x43, 0x7c, 0x4c, 0xa7, 0x5f, 0x17, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x06, 0x2b, 0x2b, 0x29, 0x04, 0x25, 0x25, + 0x25, 0x25, 0x3a, 0x05, 0x5e, 0x30, 0x19, 0x1e, 0x1e, 0x1e, 0xe9, 0xd1, + 0x1d, 0x1c, 0x6d, 0x00, 0x5e, 0x43, 0x22, 0x25, 0x25, 0x29, 0x29, 0x29, + 0x3f, 0x29, 0x4a, 0x7c, 0x4c, 0xa7, 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x06, 0x36, 0x29, 0x25, 0x24, 0x02, 0x24, 0x24, 0x1f, 0x1f, 0x1c, + 0x30, 0x02, 0x8e, 0x0c, 0x2b, 0x1b, 0x1b, 0x1b, 0xe9, 0xd3, 0x1d, 0x19, + 0x40, 0x43, 0x61, 0x58, 0x5e, 0x3a, 0x1e, 0x1f, 0x24, 0x03, 0x24, 0x25, + 0x25, 0x25, 0x29, 0x62, 0x89, 0x71, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x03, 0x62, 0x00, 0x00, 0x22, 0x25, 0x24, 0x1f, + 0x00, 0x1f, 0x1f, 0x1e, 0x1e, 0x1e, 0x1d, 0x25, 0x40, 0x03, 0x00, 0x40, + 0x17, 0x1a, 0x1a, 0x1a, 0xe9, 0xd1, 0x40, 0x1b, 0xdb, 0x24, 0x43, 0x4a, + 0x36, 0x1d, 0x1d, 0x00, 0x1e, 0x1e, 0x1f, 0x1f, 0x24, 0x24, 0x24, 0x25, + 0x0f, 0x40, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xf1, 0x17, 0x07, + 0x07, 0x02, 0x25, 0x25, 0x25, 0x07, 0x80, 0x05, 0x6f, 0x62, 0x00, 0x24, + 0x24, 0x1f, 0x1f, 0x00, 0x1e, 0x1e, 0x1d, 0x1d, 0x1b, 0x1b, 0x19, 0x1a, + 0x00, 0x1b, 0x14, 0x12, 0x11, 0x0f, 0x0e, 0x0c, 0x0a, 0x00, 0x09, 0x07, + 0x09, 0x09, 0x0a, 0x0c, 0x0e, 0x0f, 0x00, 0x11, 0x12, 0x14, 0x1a, 0x1a, + 0x19, 0x1b, 0x1b, 0x00, 0x1b, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f, 0x1f, 0x24, + 0x0f, 0x3a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xf0, 0x17, 0x07, + 0x07, 0x03, 0x25, 0x25, 0x25, 0x25, 0xc0, 0x07, 0x03, 0x8e, 0x58, 0x4a, + 0x1f, 0x1f, 0x1e, 0x00, 0x1d, 0x1d, 0x1b, 0x1b, 0x1a, 0x1a, 0x17, 0x12, + 0x00, 0x0e, 0x0a, 0x09, 0x09, 0x07, 0x05, 0x04, 0x03, 0x10, 0x02, 0x02, + 0x02, 0xe9, 0x04, 0x05, 0x05, 0x07, 0x00, 0x09, 0x09, 0x0a, 0x0e, 0x12, + 0x17, 0x1a, 0x1a, 0x00, 0x1b, 0x1b, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f, 0x39, + 0x1d, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x43, 0x6f, 0xf0, 0x27, 0x77, + 0x2f, 0x06, 0x25, 0x30, 0x25, 0x25, 0xc0, 0x07, 0x02, 0x62, 0x5e, 0x43, + 0x1e, 0x1d, 0x1d, 0x00, 0x1b, 0x19, 0x1a, 0x17, 0x11, 0x0c, 0x09, 0x09, + 0x00, 0x05, 0x02, 0x16, 0x47, 0x7b, 0xc8, 0xd0, 0xf4, 0x00, 0xf6, 0xf6, + 0xf6, 0xf6, 0xf6, 0xe7, 0xe0, 0xc6, 0x00, 0xc5, 0x7b, 0x47, 0x16, 0x02, + 0x05, 0x07, 0x09, 0x00, 0x0c, 0x11, 0x17, 0x1a, 0x19, 0x1b, 0x1b, 0x1d, + 0x07, 0x1e, 0x2b, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa2, 0x1f, 0x4f, 0x2a, + 0x4f, 0x6f, 0x27, 0x77, 0x2f, 0x06, 0x02, 0x25, 0x43, 0x30, 0x25, 0x25, + 0x25, 0x07, 0x00, 0x00, 0x00, 0x30, 0x5e, 0x30, 0x1d, 0x1b, 0x19, 0x1a, + 0x00, 0x12, 0x0e, 0x07, 0x09, 0x03, 0x10, 0x5c, 0xcb, 0x00, 0xf6, 0xf6, + 0xf6, 0xf4, 0xf4, 0xf4, 0xec, 0xec, 0x58, 0xec, 0xe9, 0xec, 0xb1, 0x81, + 0xf6, 0xc8, 0x47, 0x00, 0x10, 0x04, 0x07, 0x09, 0x0e, 0x12, 0x1a, 0x19, + 0x01, 0x1b, 0x1b, 0x1d, 0x30, 0x00, 0x00, 0x00, 0xe9, 0x10, 0x00, 0x94, + 0x94, 0xba, 0x25, 0x39, 0x30, 0x2a, 0xfc, 0x7d, 0x45, 0x97, 0x4f, 0x07, + 0x03, 0x25, 0x2a, 0x04, 0x2b, 0x25, 0x25, 0x25, 0x25, 0x87, 0x25, 0x4f, + 0x00, 0x1a, 0x19, 0x1b, 0x12, 0x0c, 0x09, 0x06, 0x09, 0x00, 0x5c, 0xcb, + 0xf6, 0xf4, 0xf4, 0xec, 0xec, 0xe5, 0x04, 0xe2, 0xe2, 0xdd, 0xdd, 0xdd, + 0xe9, 0xdd, 0xdd, 0x00, 0xe2, 0xe2, 0xe2, 0xe5, 0xec, 0xec, 0xf4, 0xf4, + 0x00, 0xf6, 0xf6, 0xd0, 0x56, 0x09, 0x06, 0x09, 0x0c, 0x00, 0x12, 0x1a, + 0x19, 0x1b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x94, 0x94, + 0x94, 0x00, 0x00, 0x03, 0x25, 0x25, 0x30, 0x30, 0x30, 0x4f, 0x7b, 0x53, + 0xf0, 0xb7, 0x6f, 0x27, 0x07, 0x00, 0x4f, 0x30, 0x23, 0x02, 0x26, 0x2b, + 0x25, 0x25, 0x25, 0x25, 0x03, 0x25, 0x00, 0x25, 0x1c, 0x1a, 0x13, 0x0c, + 0x09, 0x05, 0x16, 0x00, 0xa5, 0xf6, 0xf4, 0xf4, 0xe5, 0xe2, 0xe2, 0xdd, + 0x00, 0xdd, 0xd9, 0xd9, 0xd9, 0xd2, 0xd2, 0xcd, 0xcd, 0x40, 0xcd, 0xe9, + 0xd2, 0xd2, 0xd9, 0xd9, 0xdd, 0xdd, 0x00, 0xe2, 0xe2, 0xe5, 0xec, 0xf4, + 0xf6, 0xf6, 0xa5, 0x00, 0x16, 0x05, 0x09, 0x0c, 0x13, 0x1a, 0x19, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x75, 0x58, 0x94, 0x94, 0x01, 0x4a, 0x39, + 0x2b, 0x30, 0x30, 0x30, 0x2a, 0x89, 0xfc, 0x71, 0xd4, 0xa7, 0x5f, 0x17, + 0x07, 0x25, 0x2a, 0x00, 0x26, 0x23, 0x29, 0x2b, 0x25, 0x25, 0x25, 0x46, + 0x80, 0xe1, 0x25, 0x25, 0x19, 0x17, 0x0f, 0x09, 0x06, 0x00, 0x10, 0xbe, + 0xf4, 0xf4, 0xe5, 0xe2, 0xe2, 0xdd, 0x00, 0xd9, 0xd9, 0xd2, 0xd2, 0xe2, + 0xf6, 0xf2, 0xfb, 0x08, 0xfd, 0xff, 0xff, 0xff, 0xe9, 0xfd, 0xfb, 0xf2, + 0x00, 0xf6, 0xe2, 0xd2, 0xd2, 0xd9, 0xdd, 0xdd, 0xe2, 0x00, 0xe5, 0xec, + 0xf4, 0xf6, 0xbe, 0x10, 0x05, 0x09, 0x00, 0x0f, 0x17, 0x19, 0x24, 0x94, + 0xa2, 0x58, 0x4f, 0x00, 0x46, 0x30, 0x22, 0x29, 0x2b, 0x2b, 0x30, 0x30, + 0x0f, 0x30, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x07, + 0x00, 0x00, 0x25, 0x2b, 0x29, 0x20, 0x00, 0x29, 0x25, 0x24, 0x24, 0x1f, + 0x1e, 0x1e, 0x1d, 0x00, 0x19, 0x1a, 0x12, 0x0a, 0x07, 0x0d, 0x7b, 0xf4, + 0x00, 0xec, 0xe5, 0xe2, 0xdd, 0xd4, 0xd2, 0xd2, 0xd9, 0x00, 0xf6, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x24, 0xfd, 0xfd, 0xe9, 0xfd, 0xfd, + 0x9b, 0xfb, 0xf6, 0x00, 0xdd, 0xd2, 0xd4, 0xdd, 0xdd, 0xe5, 0xec, 0xf4, + 0x00, 0xf6, 0xa5, 0x0d, 0x07, 0x0a, 0x12, 0x1a, 0x19, 0x00, 0x1a, 0x1b, + 0x1d, 0x1e, 0x24, 0x24, 0x25, 0x29, 0x01, 0x2b, 0x2b, 0x30, 0x39, 0x00, + 0x00, 0x00, 0xe9, 0xf8, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x00, 0x00, 0x25, + 0x00, 0x39, 0x2b, 0x29, 0x20, 0x24, 0x24, 0x1f, 0x1e, 0x00, 0x1d, 0x1d, + 0x19, 0x1a, 0x0f, 0x09, 0x05, 0x47, 0x00, 0xe6, 0xe6, 0xe5, 0xe2, 0xdd, + 0xd4, 0xd2, 0xd2, 0x00, 0xf6, 0xfb, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xfe, + 0x20, 0xfe, 0xfe, 0xe9, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0x00, 0xfc, 0xfe, + 0xfc, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xf6, 0xd2, 0xd2, 0xd4, + 0xdd, 0xe2, 0xe5, 0x00, 0xf4, 0xde, 0x47, 0x03, 0x09, 0x0f, 0x18, 0x19, + 0x00, 0x1b, 0x1d, 0x1e, 0x1f, 0x1f, 0x24, 0x25, 0x29, 0x07, 0x2b, 0x2b, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf0, 0x5f, 0x17, 0x07, 0x02, 0x4a, + 0x29, 0x25, 0x24, 0x00, 0x24, 0x1e, 0x1e, 0x1d, 0x1b, 0x19, 0x14, 0x0c, + 0x00, 0x09, 0x0d, 0x9f, 0xf4, 0xec, 0xe2, 0xdd, 0xd4, 0x00, 0xd2, 0xd4, + 0xe7, 0xfd, 0xff, 0xfd, 0xfc, 0xfe, 0x38, 0xfe, 0xfe, 0xe9, 0xd4, 0xa7, + 0xfc, 0xfd, 0xff, 0x00, 0xff, 0xff, 0xea, 0xd4, 0xd2, 0xd4, 0xdd, 0xe5, + 0x00, 0xe6, 0xf6, 0xbe, 0x0d, 0x07, 0x0c, 0x14, 0x19, 0x00, 0x1b, 0x1d, + 0x1e, 0x1f, 0x1f, 0x24, 0x25, 0x29, 0x0f, 0x28, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0xe0, 0x17, 0x07, 0x02, 0x25, 0x22, 0x24, 0x24, 0x1e, + 0x00, 0x1b, 0x1d, 0x1b, 0x1a, 0x14, 0x0a, 0x06, 0x16, 0x00, 0xe6, 0xe6, + 0xe5, 0xd1, 0xd4, 0xd2, 0xd2, 0xe7, 0x01, 0xfd, 0xfd, 0xfc, 0xfe, 0xfb, + 0xfb, 0xfb, 0xe9, 0x01, 0xfb, 0xfb, 0xfa, 0xfa, 0xf7, 0xf7, 0xf7, 0xe9, + 0x02, 0xfa, 0xfa, 0xfa, 0xfb, 0xfe, 0xfe, 0xe9, 0xfb, 0x00, 0xfc, 0xfd, + 0xff, 0xff, 0xe7, 0xd2, 0xd4, 0xd4, 0x00, 0xe2, 0xe5, 0xe6, 0xe6, 0x16, + 0x06, 0x0a, 0x13, 0x00, 0x1a, 0x1b, 0x1d, 0x23, 0x1f, 0x1f, 0x24, 0x25, + 0x0f, 0x4a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc8, 0x17, 0x07, + 0x00, 0x62, 0x01, 0x40, 0x24, 0x1f, 0x00, 0x1e, 0x1d, 0x15, 0x1a, 0x13, + 0x09, 0x05, 0x47, 0x00, 0xe6, 0xe6, 0xd1, 0xd4, 0xd4, 0xc2, 0xe6, 0xfd, + 0x04, 0xfd, 0xfc, 0xfb, 0xfb, 0xfb, 0xe9, 0xf9, 0xf7, 0x06, 0xf3, 0xf3, + 0xee, 0xee, 0xee, 0xe9, 0xd4, 0xf3, 0x20, 0xf7, 0xf7, 0x3c, 0xfe, 0xfd, + 0xff, 0xfd, 0xe6, 0x00, 0xc1, 0xd4, 0xd1, 0xe5, 0xe6, 0xe6, 0x47, 0x04, + 0x00, 0x09, 0x12, 0x1a, 0x1b, 0x1d, 0x1e, 0x1e, 0x24, 0x0f, 0x24, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x07, 0x00, 0x00, 0x62, + 0xa2, 0x30, 0x25, 0x00, 0x25, 0x1f, 0x1e, 0x1d, 0x1b, 0x1a, 0x12, 0x09, + 0x00, 0x04, 0x7b, 0xe6, 0xd0, 0xd1, 0xd4, 0xc1, 0xc1, 0x02, 0xf2, 0xfd, + 0xfc, 0xf9, 0xf9, 0xf9, 0xe9, 0xf7, 0x0c, 0xf3, 0xee, 0xee, 0xee, 0xe9, + 0xd1, 0xf3, 0xf3, 0x60, 0xf3, 0xe2, 0x7a, 0xf3, 0xf7, 0xf9, 0xfb, 0xf9, + 0x00, 0xf9, 0xfb, 0xfa, 0xfd, 0xff, 0xf8, 0xc7, 0xc7, 0x00, 0xd4, 0xd1, + 0xe6, 0xde, 0x5c, 0x04, 0x0a, 0x12, 0x00, 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, + 0x30, 0x00, 0x00, 0x7f, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x01, + 0x00, 0x62, 0x58, 0x58, 0x5e, 0x1e, 0x1d, 0x1b, 0x1a, 0x00, 0x13, 0x09, + 0x04, 0x7b, 0xe6, 0xd0, 0xd1, 0xc7, 0x00, 0xc1, 0xd1, 0xfa, 0xfd, 0xf9, + 0xf8, 0xf8, 0xf8, 0x02, 0xf8, 0xf9, 0xf3, 0xe4, 0xe4, 0xe4, 0xe9, 0xee, + 0x13, 0xee, 0xf3, 0xee, 0xe1, 0xf3, 0xf3, 0xe9, 0xd4, 0x80, 0xa1, 0xf9, + 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfd, 0x00, 0xfd, 0xd1, 0xc1, 0xc7, 0xd1, + 0xd0, 0xe6, 0x7b, 0x00, 0x03, 0x09, 0x12, 0x1a, 0x1b, 0x1d, 0x1e, 0x39, + 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xc0, 0x07, 0x02, + 0x62, 0x5e, 0x62, 0x24, 0x1d, 0x19, 0x00, 0x14, 0x09, 0x04, 0x7b, 0xe6, + 0xd0, 0xd1, 0xc7, 0x00, 0xc2, 0xe6, 0xfd, 0xf9, 0xf8, 0xf8, 0xf8, 0xf8, + 0x04, 0xf8, 0xf3, 0xe4, 0xe4, 0xe4, 0xe9, 0xe4, 0xe4, 0x0e, 0xed, 0xed, + 0xf3, 0xf3, 0xe9, 0xca, 0xb9, 0xf0, 0xc0, 0xd2, 0xb2, 0xf9, 0xf8, 0xf9, + 0xf9, 0xf9, 0xfa, 0x00, 0xfd, 0xde, 0xc1, 0xc7, 0xd1, 0xd0, 0xe6, 0x7b, + 0x00, 0x04, 0x09, 0x13, 0x19, 0x1b, 0x1d, 0x00, 0x00, 0x7f, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x03, 0x00, 0x62, 0x94, 0x5e, 0x24, 0x19, + 0x14, 0x0a, 0x05, 0x00, 0x5c, 0xe6, 0xd0, 0xd1, 0xc7, 0xb8, 0xe7, 0xfa, + 0x00, 0xf9, 0xf8, 0xf8, 0xf8, 0xf8, 0xf5, 0xe4, 0xe4, 0x63, 0xe4, 0xe9, + 0xd4, 0xed, 0xed, 0xed, 0xe9, 0xd4, 0x0c, 0xed, 0xf0, 0xf0, 0xf0, 0xe9, + 0xd1, 0xf5, 0xf8, 0x00, 0xf8, 0xf8, 0xf8, 0xf9, 0xfd, 0xe7, 0xb8, 0xc7, + 0x00, 0xd1, 0xd0, 0xe6, 0x7b, 0x05, 0x0a, 0x14, 0x19, 0x0f, 0x1b, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xe0, 0x17, 0x07, 0x04, 0x62, 0x75, + 0x1c, 0x1a, 0x0c, 0x00, 0x06, 0x47, 0xd5, 0xd0, 0xc3, 0xc7, 0xb8, 0xe7, + 0x00, 0xfa, 0xf8, 0xf5, 0xf8, 0xf5, 0xf5, 0xe4, 0xdf, 0x01, 0xdf, 0xdf, + 0xe4, 0xdf, 0xe4, 0xe4, 0xe4, 0xe9, 0x00, 0xe4, 0xe4, 0xed, 0xef, 0xed, + 0xef, 0xf1, 0xf1, 0x42, 0xf1, 0xe9, 0xf1, 0xf1, 0xf0, 0xf0, 0xe2, 0xf0, + 0x80, 0xe9, 0xf0, 0xf0, 0xf5, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0xfd, 0xe3, + 0xb8, 0xc7, 0xc3, 0xd0, 0xde, 0x47, 0x00, 0x06, 0x0c, 0x18, 0x19, 0x3a, + 0x00, 0x00, 0x00, 0xfe, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x04, 0x4f, + 0x00, 0x1a, 0x0f, 0x09, 0x16, 0xd5, 0xd0, 0xc3, 0xc7, 0x00, 0xb8, 0xe7, + 0xf7, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0x10, 0xdf, 0xdf, 0xdf, 0xe9, 0xdf, + 0xdf, 0xe4, 0xdf, 0x00, 0xe4, 0xdf, 0xdf, 0xef, 0xef, 0xef, 0xef, 0xf1, + 0x0d, 0xef, 0xf1, 0xf1, 0xf1, 0xe9, 0xd4, 0xf0, 0xe9, 0x00, 0xf1, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf5, 0xf5, 0xf5, 0x00, 0xf5, 0xf8, 0xfa, 0xe7, 0xb8, + 0xc7, 0xc3, 0xd0, 0x00, 0xd7, 0x16, 0x07, 0x0f, 0x18, 0x24, 0x00, 0x00, + 0x7f, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x03, 0x00, 0x25, 0x25, + 0x12, 0x09, 0x0d, 0xd5, 0xd5, 0xc5, 0x00, 0xb9, 0xb8, 0xd7, 0xf7, 0xf5, + 0xf2, 0xf2, 0xf5, 0x0c, 0xef, 0xdf, 0xdf, 0xdf, 0xe9, 0xd4, 0xdf, 0xdf, + 0x18, 0xef, 0xef, 0xef, 0xe9, 0xd3, 0xf1, 0xf1, 0xf1, 0xc0, 0xe9, 0xd3, + 0xf0, 0xf1, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, + 0xfa, 0xd7, 0xb8, 0x00, 0xb9, 0xc5, 0xd0, 0xd5, 0x0d, 0x07, 0x12, 0x19, + 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x94, 0xfc, 0xcb, 0xa3, + 0xb7, 0x6f, 0x27, 0x04, 0x25, 0x25, 0x00, 0x19, 0x17, 0x0a, 0x04, 0xa5, + 0xd5, 0xc5, 0xb9, 0x00, 0xaf, 0xc5, 0xf7, 0xf2, 0xe9, 0xe9, 0xe9, 0xe1, + 0x01, 0xd8, 0xd8, 0xd8, 0xd8, 0xdf, 0xdf, 0xdf, 0xe9, 0x00, 0xdf, 0xdf, + 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe8, 0x38, 0xe8, 0xe8, 0xe9, 0xd4, 0xa1, + 0xeb, 0xe8, 0xf2, 0x18, 0xeb, 0xeb, 0xeb, 0xe9, 0xd2, 0xe9, 0xe8, 0xef, + 0x00, 0xf5, 0xf7, 0xc5, 0xaf, 0xb9, 0xc5, 0xd5, 0xa5, 0x00, 0x04, 0x0a, + 0x15, 0x19, 0x36, 0x78, 0x45, 0x50, 0x07, 0x5e, 0x94, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x80, 0x5d, 0x30, 0x30, 0x30, 0x43, 0x43, 0x4a, 0x25, + 0x30, 0x25, 0x25, 0xe9, 0xd1, 0x40, 0x29, 0x1b, 0x1a, 0x00, 0x0f, 0x09, + 0x33, 0xd7, 0xc5, 0xb9, 0xaf, 0xb9, 0x00, 0xf5, 0xe9, 0xe9, 0xe9, 0xe9, + 0xe1, 0xd8, 0xd8, 0x41, 0xd8, 0xe9, 0xe1, 0xd8, 0xe1, 0xe1, 0xe1, 0xe9, + 0x07, 0xe1, 0xe1, 0xe8, 0xe8, 0xe8, 0xe9, 0xd4, 0xa2, 0x06, 0xeb, 0xe8, + 0xeb, 0xeb, 0xeb, 0xe9, 0xd4, 0xeb, 0x00, 0xe9, 0xe9, 0xe9, 0xef, 0xf7, + 0xb9, 0xaf, 0xb9, 0x00, 0xc5, 0xd7, 0x33, 0x07, 0x0f, 0x18, 0x1b, 0x1b, + 0x03, 0x30, 0x40, 0x40, 0x25, 0x25, 0x25, 0xe9, 0xd1, 0x03, 0x43, 0x43, + 0x43, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x88, 0xa5, 0x30, 0x30, 0x30, 0xe9, + 0x30, 0x30, 0x2b, 0x00, 0x29, 0x25, 0x24, 0x1f, 0x1e, 0x1d, 0x19, 0x13, + 0x00, 0x09, 0x0d, 0xca, 0xc9, 0xc3, 0xae, 0xa8, 0xe9, 0x00, 0xef, 0xe0, + 0xe0, 0xe9, 0xe0, 0xd8, 0xd8, 0xd8, 0xc6, 0xe9, 0xd1, 0xe1, 0xe1, 0xe1, + 0xe9, 0xd1, 0xe9, 0x01, 0xe9, 0xe1, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xdb, + 0x80, 0xca, 0xe8, 0xe9, 0xea, 0xe8, 0xeb, 0xeb, 0xeb, 0xe0, 0xe9, 0xd2, + 0x29, 0xef, 0xe9, 0xa8, 0xaf, 0xc3, 0x00, 0xc9, 0xc9, 0x0d, 0x07, 0x13, + 0x19, 0x1b, 0x1d, 0x00, 0x1e, 0x1f, 0x25, 0x29, 0x2b, 0x2b, 0x30, 0x30, + 0x00, 0x30, 0x30, 0x30, 0x2a, 0x4f, 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, + 0xa7, 0x23, 0x30, 0x2b, 0x2b, 0x29, 0x00, 0x25, 0x24, 0x1f, 0x1d, 0x1b, + 0x1b, 0x0c, 0x06, 0x00, 0x86, 0xc9, 0xbc, 0xae, 0xa8, 0xca, 0xef, 0xe0, + 0x00, 0xe0, 0xe0, 0xe0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x10, 0xd8, 0xd8, + 0xd8, 0xe9, 0xe1, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe9, 0xe9, 0xe0, 0xe0, + 0xe9, 0xe9, 0xe9, 0x81, 0xe9, 0xe9, 0xe9, 0xea, 0xe9, 0xea, 0xea, 0xe2, + 0xe0, 0xd1, 0xdb, 0xb4, 0xe0, 0xe0, 0xe0, 0xe0, 0xef, 0x00, 0xd7, 0xa8, + 0xb9, 0xbc, 0xc9, 0x67, 0x05, 0x0c, 0x00, 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, + 0x24, 0x25, 0x29, 0x00, 0x2b, 0x30, 0x30, 0x30, 0x30, 0x2a, 0x00, 0x00, + 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x59, 0x1a, 0x30, 0x2b, 0x00, 0x29, 0x25, + 0x24, 0x1f, 0x1e, 0x1d, 0x19, 0x12, 0x00, 0x09, 0x10, 0xd7, 0xbd, 0xb9, + 0xaf, 0xae, 0xe1, 0x01, 0xe0, 0xdb, 0xdb, 0xdb, 0xcf, 0xcf, 0xcf, 0xe9, + 0x8c, 0xd3, 0xe0, 0xe0, 0xe0, 0xe9, 0xd4, 0xe0, 0xe0, 0x01, 0xea, 0xe0, + 0xe3, 0xea, 0xea, 0xe3, 0xe3, 0xdb, 0x74, 0xe3, 0xba, 0xa1, 0x74, 0xe3, + 0x02, 0xef, 0xae, 0x00, 0xa7, 0xb9, 0xbc, 0xc9, 0x10, 0x07, 0x12, 0x19, + 0x00, 0x1b, 0x1d, 0x1f, 0x24, 0x25, 0x29, 0x2b, 0x2b, 0x03, 0x30, 0x30, + 0x2a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x5b, 0x30, 0x30, 0x30, + 0x30, 0x2b, 0x25, 0x00, 0x24, 0x1f, 0x1f, 0x1d, 0x1b, 0x1a, 0x0c, 0x05, + 0x00, 0x86, 0xc9, 0xbc, 0xae, 0xa8, 0xce, 0xe0, 0xce, 0x04, 0xce, 0xce, + 0xc6, 0xc6, 0xc6, 0xe9, 0xcf, 0xc6, 0x10, 0xcf, 0xcf, 0xcf, 0xe9, 0xcf, + 0xcf, 0xe0, 0xe0, 0x43, 0xe0, 0xe9, 0xe0, 0xe3, 0xe3, 0xe3, 0xe9, 0xd4, + 0x82, 0xa4, 0xe7, 0xe3, 0xe7, 0xe7, 0xe7, 0xe9, 0xe7, 0x00, 0xe7, 0xdc, + 0xe3, 0xe3, 0xdb, 0xdb, 0xdb, 0xe9, 0x00, 0xdb, 0xa8, 0xae, 0xbc, 0xbd, + 0x86, 0x05, 0x0c, 0x00, 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x24, 0x25, 0x29, + 0x03, 0x2b, 0x2b, 0x43, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x5e, + 0x30, 0x30, 0x29, 0x25, 0x24, 0x1f, 0x00, 0x1e, 0x1d, 0x19, 0x12, 0x09, + 0x10, 0xca, 0xbd, 0x00, 0xab, 0x96, 0xab, 0xe0, 0xce, 0xce, 0xce, 0xc6, + 0x20, 0xc6, 0xc6, 0xe9, 0xc6, 0xc6, 0xce, 0xc6, 0xce, 0x0e, 0xce, 0xdb, + 0xdb, 0xdb, 0xe9, 0xd4, 0xa5, 0xe7, 0x01, 0xdb, 0xdc, 0xe7, 0xdc, 0xdc, + 0xe7, 0xe7, 0xd1, 0xb0, 0xe2, 0xdc, 0xa1, 0xda, 0xdc, 0xdc, 0xce, 0xce, + 0x00, 0xce, 0xe1, 0xab, 0x96, 0xae, 0xbc, 0xca, 0x10, 0x00, 0x07, 0x12, + 0x19, 0x1b, 0x1d, 0x1f, 0x24, 0x25, 0x03, 0x29, 0x29, 0x46, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x5f, 0x00, 0x30, 0x30, 0x25, 0x24, 0x1f, + 0x00, 0x1e, 0x1b, 0x1a, 0x0e, 0x06, 0x86, 0xbd, 0xab, 0x00, 0x96, 0x81, + 0xce, 0xce, 0xca, 0xca, 0xca, 0xc6, 0x0c, 0xbf, 0xc6, 0xc6, 0xc6, 0xe9, + 0xd1, 0xce, 0xce, 0x41, 0xce, 0xe9, 0xce, 0xce, 0xdb, 0xdb, 0xdb, 0xe9, + 0x1c, 0xda, 0xda, 0xda, 0xe9, 0xd4, 0xa1, 0xdc, 0xdc, 0xb0, 0xe9, 0xdc, + 0xe9, 0xd4, 0xdc, 0xce, 0xce, 0xce, 0x00, 0xcf, 0xce, 0x80, 0x96, 0xab, + 0xbd, 0x67, 0x06, 0x00, 0x0e, 0x18, 0x1b, 0x1d, 0x1e, 0x1f, 0x25, 0x29, + 0x0f, 0x43, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x80, 0x11, 0x30, + 0x22, 0x1f, 0x1e, 0x1d, 0x1b, 0x17, 0x00, 0x07, 0x08, 0xbf, 0xb0, 0xab, + 0x96, 0xab, 0xce, 0x01, 0xbf, 0xbf, 0xbf, 0xb6, 0xb6, 0xb6, 0xb6, 0xc9, + 0x80, 0xb1, 0xc6, 0xc6, 0xce, 0xca, 0xce, 0xce, 0xce, 0x0e, 0xce, 0xda, + 0xda, 0xda, 0xe9, 0xd4, 0xa7, 0xda, 0x10, 0xde, 0xde, 0xde, 0xe9, 0xde, + 0xde, 0xd6, 0xd6, 0x60, 0xd6, 0xe9, 0xd2, 0xca, 0xca, 0xce, 0xe0, 0xab, + 0x00, 0x96, 0xab, 0xb0, 0xbf, 0x07, 0x07, 0x17, 0x1a, 0x00, 0x1d, 0x1e, + 0x1f, 0x24, 0x40, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x13, + 0x30, 0x1f, 0x1e, 0x00, 0x1d, 0x1a, 0x11, 0x09, 0x33, 0xb6, 0xab, 0x96, + 0x01, 0x81, 0xb6, 0xbf, 0xbd, 0xb6, 0xb6, 0xb6, 0xe9, 0x00, 0xb6, 0xb6, + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xca, 0x20, 0xca, 0xca, 0xe9, 0xca, 0xca, + 0xd7, 0xd7, 0xd7, 0xe0, 0xe9, 0xd4, 0xa6, 0xd6, 0xd7, 0xd6, 0xd6, 0xd6, + 0xe0, 0xe9, 0xd4, 0xa3, 0xca, 0xbf, 0xbf, 0xce, 0xbf, 0x00, 0x81, 0x96, + 0xab, 0xbd, 0x33, 0x07, 0x11, 0x1a, 0x01, 0x1b, 0x1d, 0x1f, 0x1f, 0x00, + 0x00, 0x00, 0xe9, 0xe2, 0xd4, 0xa7, 0x5f, 0x62, 0x62, 0x62, 0xe9, 0x62, + 0x00, 0x2b, 0x1e, 0x1b, 0x1a, 0x0c, 0x05, 0xb0, 0xb0, 0x01, 0xab, 0x96, + 0x96, 0xbf, 0xb0, 0xb0, 0xb0, 0xe9, 0x88, 0xd1, 0xbd, 0xbd, 0xbd, 0xe9, + 0xbd, 0xca, 0xca, 0x40, 0xca, 0xe9, 0xca, 0xca, 0xd7, 0xca, 0xd7, 0xd7, + 0x06, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, 0xab, 0xd5, 0x18, 0xd3, 0xd3, + 0xd3, 0xe9, 0xd2, 0xcc, 0xcc, 0xcc, 0x80, 0xe9, 0xcc, 0xcc, 0xb6, 0xb6, + 0xbf, 0xce, 0x81, 0x00, 0x96, 0xab, 0xb0, 0xaa, 0x04, 0x0c, 0x18, 0x1b, + 0x07, 0x1d, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x80, 0x5f, 0x00, + 0x00, 0x62, 0xbb, 0x82, 0x6f, 0x94, 0x00, 0x94, 0x50, 0x1e, 0x1b, 0x17, + 0x09, 0x0d, 0xbf, 0x00, 0xb0, 0x91, 0x81, 0xab, 0xb6, 0xab, 0xab, 0xab, + 0x02, 0xa5, 0xa5, 0xa5, 0xb0, 0xb0, 0xb0, 0xe9, 0xb0, 0x10, 0xbd, 0xbd, + 0xbd, 0xe9, 0xbd, 0xc9, 0xc9, 0xc9, 0xc4, 0xe9, 0xd2, 0xd5, 0xd5, 0xd5, + 0xe9, 0xd5, 0xd5, 0x18, 0xd3, 0xd3, 0xd3, 0xe9, 0xd2, 0xd0, 0xd0, 0xcb, + 0x00, 0xcb, 0xcb, 0xcb, 0xcc, 0xcb, 0xcc, 0xcc, 0xcc, 0x80, 0xe9, 0xcc, + 0xbd, 0xaa, 0xaa, 0xbf, 0xab, 0x81, 0x00, 0x96, 0xb0, 0xbf, 0x0d, 0x07, + 0x17, 0x1a, 0x1d, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x13, + 0x00, 0x62, 0xa9, 0x58, 0x5e, 0x5e, 0x3a, 0x19, 0x12, 0x00, 0x09, 0x33, + 0xb6, 0xab, 0x96, 0x5c, 0xaa, 0xb0, 0x02, 0x91, 0x91, 0x86, 0xa5, 0xa5, + 0xa5, 0xe9, 0xa5, 0x00, 0xa5, 0xb0, 0xb0, 0xb0, 0xbc, 0xbc, 0xbc, 0xbd, + 0x01, 0xbc, 0xbd, 0xbd, 0xbd, 0xc9, 0xc9, 0xc9, 0xe9, 0x80, 0xd4, 0xc9, + 0xc9, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0x66, 0xcb, 0xe9, 0xc3, 0xcb, 0xcb, + 0xe9, 0xd4, 0xcb, 0x00, 0xcb, 0xc5, 0xaa, 0xb0, 0xb6, 0xb6, 0x5c, 0x96, + 0x00, 0xab, 0xb6, 0x33, 0x07, 0x12, 0x19, 0x19, 0x00, 0x3e, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5f, 0x15, 0x62, 0x00, 0x94, 0x5e, 0x4a, 0x18, 0x0e, + 0x05, 0x86, 0xaa, 0x10, 0x91, 0x6b, 0x51, 0xe1, 0x96, 0x7b, 0x7b, 0x7b, + 0x0c, 0x7b, 0xa5, 0xa5, 0xa5, 0xe9, 0xd1, 0xbc, 0xbc, 0x63, 0xbc, 0xe9, + 0xd1, 0xc5, 0xc5, 0xc5, 0xe9, 0xd4, 0x8e, 0xa7, 0xc8, 0xc8, 0xc8, 0xe9, + 0xd4, 0xa5, 0x95, 0x00, 0x95, 0x95, 0xbf, 0x51, 0x6b, 0x91, 0xaa, 0x86, + 0x01, 0x05, 0x0f, 0x18, 0x36, 0x00, 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, + 0x5f, 0x16, 0x62, 0x62, 0x62, 0x18, 0x00, 0x0a, 0x04, 0xb6, 0x95, 0x91, + 0x6b, 0x6b, 0x95, 0x03, 0x6b, 0x6b, 0x67, 0x7b, 0x7b, 0x7b, 0xe9, 0xd1, + 0x00, 0xae, 0xae, 0xa5, 0xae, 0xab, 0xae, 0xa5, 0xb9, 0x07, 0xbc, 0xbc, + 0xc3, 0xc3, 0xc3, 0xe2, 0xc9, 0xd4, 0x83, 0xa4, 0xc8, 0xc3, 0xc8, 0xc8, + 0xc8, 0xe9, 0xd4, 0x10, 0xc8, 0xc8, 0xbe, 0x8a, 0xa5, 0x91, 0x91, 0xaa, + 0x00, 0x6b, 0x6b, 0x91, 0x95, 0xb6, 0x03, 0x0a, 0x18, 0x0f, 0x30, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x80, 0x17, 0x00, 0x62, 0x14, 0x09, + 0x10, 0xbf, 0x95, 0x00, 0x6b, 0x51, 0x6b, 0x6b, 0x51, 0x51, 0x5c, 0x5c, + 0x00, 0x5c, 0x5c, 0x7b, 0x7b, 0x7b, 0x7b, 0x81, 0x7b, 0x02, 0x7b, 0xa7, + 0xa7, 0xae, 0xae, 0xae, 0xe9, 0xae, 0x1b, 0xb9, 0xb9, 0xb9, 0xe9, 0xd1, + 0xc3, 0xe9, 0xd9, 0x8c, 0xe1, 0xc7, 0xc7, 0xc7, 0xe9, 0xd1, 0xc0, 0xc7, + 0x18, 0xc0, 0xc0, 0xc0, 0xe9, 0xd4, 0xc0, 0xae, 0x91, 0x00, 0x91, 0x91, + 0x91, 0x51, 0x6b, 0x95, 0xb6, 0x10, 0x03, 0x07, 0x14, 0x17, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xe0, 0xa7, 0x5f, 0x17, 0x30, 0x19, 0x12, 0x09, 0x33, + 0x00, 0xaa, 0x95, 0x6b, 0x51, 0x91, 0x51, 0x51, 0x51, 0x11, 0x5c, 0x5c, + 0x5c, 0xe9, 0x81, 0x81, 0x81, 0xe9, 0x10, 0xa7, 0xa7, 0xa7, 0xe9, 0xaf, + 0xa7, 0xaf, 0xae, 0x02, 0xaf, 0xae, 0xae, 0xb9, 0xb9, 0xb9, 0xe9, 0xb9, + 0x25, 0xb9, 0xba, 0xe9, 0xba, 0xba, 0xe9, 0xc7, 0xc9, 0x10, 0xc1, 0xc1, + 0xc1, 0xe9, 0xc1, 0xc1, 0xba, 0xc1, 0x04, 0xc0, 0xc1, 0xc0, 0xc0, 0xc0, + 0xe9, 0x6b, 0x6b, 0x00, 0x6b, 0x95, 0x51, 0x6b, 0x91, 0xaa, 0x33, 0x07, + 0x04, 0x12, 0x1a, 0x62, 0x62, 0x62, 0xe9, 0x00, 0x00, 0x78, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x00, 0x00, 0x30, 0x00, 0x36, 0x1a, 0x11, 0x07, 0x51, + 0xaa, 0x91, 0x6b, 0x00, 0x51, 0x6b, 0x45, 0x45, 0x45, 0x47, 0x47, 0x56, + 0x00, 0x56, 0x56, 0x56, 0x56, 0x80, 0x80, 0x80, 0x80, 0x00, 0x81, 0x81, + 0x81, 0x81, 0x81, 0xa8, 0xa7, 0xa7, 0x03, 0xa7, 0xa7, 0xa7, 0xaf, 0xaf, + 0xaf, 0xe9, 0xd3, 0x1a, 0xba, 0xba, 0xba, 0xe9, 0xd3, 0xc1, 0xe2, 0xc1, + 0x60, 0xc1, 0xe9, 0xcb, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0x00, 0x67, 0x6b, + 0x6b, 0x95, 0x51, 0x6b, 0x91, 0xaa, 0x00, 0x51, 0x06, 0x11, 0x1a, 0x1a, + 0x4a, 0x5e, 0x75, 0x00, 0x6f, 0x94, 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, + 0xf0, 0xe9, 0xd4, 0xa7, 0x5d, 0x30, 0x39, 0x1d, 0x1a, 0x00, 0x0f, 0x06, + 0x86, 0x9f, 0x91, 0x6b, 0x51, 0x6b, 0x00, 0x45, 0x45, 0x45, 0x47, 0x47, + 0x56, 0x56, 0x56, 0x80, 0xe9, 0x56, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x80, + 0x81, 0xe9, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xac, 0xe9, 0x08, 0xa8, 0xac, + 0xac, 0xac, 0xe9, 0xb7, 0xb7, 0xb7, 0x82, 0xe9, 0xb8, 0xb7, 0xb8, 0xb8, + 0xb8, 0xd9, 0xb7, 0x0c, 0xb7, 0xb3, 0xb3, 0xb3, 0xe9, 0xd4, 0xb3, 0xb3, + 0x00, 0x81, 0x51, 0x51, 0x91, 0x51, 0x6b, 0x91, 0x9f, 0x00, 0x86, 0x05, + 0x0f, 0x1a, 0x1b, 0x1b, 0x46, 0x5e, 0x01, 0x58, 0x62, 0x62, 0x62, 0x00, + 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, 0x5c, 0x30, 0x30, 0x1c, 0x1e, 0x1b, + 0x00, 0x1a, 0x0e, 0x05, 0x9f, 0x9f, 0x6b, 0x51, 0x51, 0x00, 0x51, 0x37, + 0x37, 0x37, 0x42, 0x42, 0x42, 0x42, 0x00, 0x42, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x7e, 0x7e, 0x00, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x80, 0xa4, 0xa4, + 0x71, 0xa4, 0xe9, 0xd4, 0xa2, 0xb7, 0xb7, 0xb7, 0xe9, 0xc6, 0xd4, 0xa3, + 0xb3, 0xb3, 0xb3, 0xe9, 0xd4, 0xb3, 0x00, 0x80, 0x45, 0x45, 0x6b, 0x51, + 0x51, 0x91, 0x9f, 0x00, 0x95, 0x04, 0x0e, 0x18, 0x1b, 0x1d, 0x1d, 0x39, + 0x07, 0x5e, 0x62, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x80, 0x5c, 0x30, + 0x30, 0x36, 0x24, 0x1f, 0x1e, 0x1b, 0x00, 0x1a, 0x0c, 0x04, 0xb6, 0x95, + 0x6b, 0x51, 0x51, 0x01, 0x37, 0x37, 0x37, 0x37, 0x42, 0x42, 0x42, 0xe9, + 0x00, 0x42, 0x42, 0x52, 0x52, 0x52, 0x78, 0x7e, 0x7e, 0x41, 0x7e, 0xe9, + 0x7e, 0x7e, 0xa0, 0xa0, 0xa0, 0xe9, 0x80, 0xd1, 0xa4, 0xa0, 0xa4, 0xa0, + 0xa4, 0xad, 0xad, 0x70, 0xad, 0xe9, 0xd4, 0xa2, 0xb5, 0xb5, 0xa6, 0xb5, + 0x18, 0xa6, 0xa6, 0xa6, 0xe9, 0xd1, 0xb3, 0x7e, 0x45, 0x00, 0x45, 0x51, + 0x51, 0x51, 0x6b, 0x95, 0xaa, 0x03, 0x00, 0x0c, 0x18, 0x1b, 0x1d, 0x1e, + 0x24, 0x22, 0x4a, 0x0f, 0x25, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x59, + 0x00, 0x30, 0x4a, 0x39, 0x29, 0x25, 0x24, 0x1f, 0x1e, 0x00, 0x1b, 0x1a, + 0x0a, 0x04, 0xb6, 0x95, 0x6b, 0x51, 0x00, 0x45, 0x37, 0x37, 0x37, 0x37, + 0x42, 0x42, 0x42, 0x80, 0xe9, 0x42, 0x42, 0x52, 0x52, 0x52, 0x52, 0x78, + 0x08, 0x52, 0x78, 0x78, 0x78, 0xe9, 0x78, 0x78, 0xa0, 0x30, 0xa0, 0xa0, + 0xe9, 0xd4, 0xa0, 0xa0, 0xad, 0xad, 0x60, 0xad, 0xe9, 0xd4, 0xad, 0xb5, + 0xb5, 0xb5, 0xa6, 0x0c, 0xb5, 0xa6, 0xa6, 0xa6, 0xe9, 0xd3, 0x37, 0x45, + 0x00, 0x45, 0x51, 0x51, 0x6b, 0x95, 0xb6, 0x03, 0x0a, 0x00, 0x18, 0x1b, + 0x1d, 0x1e, 0x1f, 0x25, 0x29, 0x28, 0x03, 0x46, 0x25, 0x25, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa4, 0x30, 0x30, 0x43, 0x2a, 0x30, 0x2b, 0x29, + 0x00, 0x25, 0x24, 0x1f, 0x1e, 0x1b, 0x1a, 0x09, 0x04, 0x00, 0xaa, 0x95, + 0x6b, 0x51, 0x45, 0x37, 0x23, 0x23, 0x00, 0x2e, 0x27, 0x2f, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x10, 0x52, 0x52, 0x52, 0xe9, 0x6e, 0x6e, 0x6e, 0x6e, + 0x00, 0x78, 0x6e, 0x78, 0x78, 0x78, 0x78, 0x8c, 0x78, 0x11, 0x8c, 0x8c, + 0x8c, 0xe9, 0x9e, 0x9e, 0x9e, 0xe9, 0x80, 0xd4, 0x9e, 0xb4, 0x9e, 0xb4, + 0x9e, 0xad, 0xb5, 0x01, 0xb4, 0xb4, 0xa6, 0xa6, 0xa1, 0xa1, 0xa1, 0xe9, + 0x80, 0xd3, 0x37, 0x37, 0x45, 0x51, 0x51, 0x6b, 0x95, 0x00, 0xaa, 0x03, + 0x07, 0x1a, 0x1a, 0x1d, 0x1e, 0x1f, 0x00, 0x25, 0x29, 0x2b, 0x30, 0x30, + 0x39, 0x4a, 0x25, 0x0c, 0x25, 0x00, 0x00, 0x00, 0xe9, 0xd3, 0x30, 0x30, + 0x00, 0x4a, 0x43, 0x2a, 0x30, 0x30, 0x30, 0x30, 0x2b, 0x00, 0x29, 0x25, + 0x24, 0x1f, 0x1e, 0x1b, 0x1a, 0x07, 0x00, 0x04, 0x9f, 0x95, 0x6b, 0x51, + 0x45, 0x23, 0x23, 0x00, 0x23, 0x2e, 0x27, 0x2f, 0x34, 0x34, 0x3e, 0x3e, + 0x00, 0x3e, 0x3e, 0x3e, 0x52, 0x52, 0x52, 0x52, 0x52, 0x10, 0x6e, 0x6e, + 0x6e, 0xe9, 0x6e, 0x8c, 0x8c, 0x8c, 0xc7, 0xe9, 0xd2, 0x9e, 0x9e, 0x9e, + 0xe9, 0xd4, 0xa1, 0x21, 0xb4, 0xa3, 0xe9, 0xa3, 0xa1, 0xa1, 0xa1, 0xe9, + 0x80, 0xd4, 0xa1, 0x37, 0x37, 0x37, 0x51, 0x51, 0x6b, 0x00, 0x95, 0xaa, + 0x03, 0x07, 0x1a, 0x1a, 0x1d, 0x1e, 0x00, 0x1f, 0x25, 0x29, 0x2b, 0x30, + 0x30, 0x30, 0x30, 0x00, 0x30, 0x39, 0x4a, 0x25, 0x25, 0x00, 0x00, 0x00, + 0x81, 0xe9, 0x00, 0x30, 0x30, 0x4a, 0x43, 0x2a, 0x5b, 0x00, 0x2b, 0x29, + 0x25, 0x24, 0x1f, 0x1e, 0x1b, 0x1a, 0x00, 0x09, 0x04, 0x9f, 0x95, 0x6b, + 0x51, 0x45, 0x23, 0x00, 0x23, 0x20, 0x2e, 0x27, 0x2f, 0x34, 0x34, 0x3c, + 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x50, 0x50, 0x50, 0x04, 0x50, 0x65, + 0x6e, 0x6e, 0x6e, 0xe9, 0x6e, 0x6e, 0x12, 0x87, 0x87, 0x87, 0xe9, 0x87, + 0x8c, 0xe2, 0x87, 0x00, 0x9c, 0x9e, 0x9c, 0x9e, 0xa3, 0x9c, 0xa3, 0xa3, + 0x60, 0xa3, 0xe9, 0xd4, 0xa3, 0xa3, 0x9a, 0xa1, 0x9a, 0x00, 0x9a, 0xa1, + 0xa1, 0xa1, 0xa1, 0xa1, 0x37, 0x37, 0x00, 0x37, 0x51, 0x51, 0x6b, 0x95, + 0xaa, 0x03, 0x06, 0x00, 0x1a, 0x1a, 0x1d, 0x1e, 0x1f, 0x25, 0x29, 0x2b, + 0x10, 0x30, 0x30, 0x30, 0xe9, 0x39, 0x43, 0x25, 0x25, 0x18, 0x00, 0x00, + 0x00, 0xe9, 0xd2, 0x30, 0x30, 0x43, 0x00, 0x2a, 0x30, 0x30, 0x2b, 0x29, + 0x25, 0x24, 0x1f, 0x00, 0x1e, 0x1b, 0x1a, 0x09, 0x05, 0x9f, 0x91, 0x6b, + 0x00, 0x51, 0x45, 0x23, 0x20, 0x20, 0x21, 0x27, 0x27, 0x00, 0x2f, 0x35, + 0x3c, 0x38, 0x3e, 0x3e, 0x3e, 0x3e, 0x00, 0x50, 0x50, 0x50, 0x50, 0x65, + 0x50, 0x65, 0x65, 0x40, 0x65, 0xe9, 0x71, 0x71, 0x71, 0x71, 0x87, 0x87, + 0x62, 0x87, 0xe9, 0xd3, 0x9c, 0x9c, 0x9c, 0xe9, 0x9c, 0x18, 0xa3, 0xa3, + 0xa3, 0xe9, 0xd4, 0x93, 0x9a, 0x9a, 0x10, 0x93, 0x93, 0x93, 0xe9, 0x23, + 0x23, 0x37, 0x45, 0x00, 0x51, 0x6b, 0x95, 0xaa, 0x03, 0x07, 0x1a, 0x1a, + 0x00, 0x1d, 0x1e, 0x1f, 0x25, 0x29, 0x2b, 0x30, 0x30, 0x00, 0x30, 0x39, + 0x4a, 0x25, 0x25, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa2, 0x30, 0x30, + 0x43, 0x28, 0x29, 0x00, 0x25, 0x24, 0x1e, 0x1e, 0x1b, 0x1b, 0x0a, 0x05, + 0x00, 0x9f, 0x95, 0x6b, 0x51, 0x45, 0x23, 0x1e, 0x1e, 0x00, 0x21, 0x27, + 0x27, 0x2f, 0x35, 0x38, 0x3c, 0x38, 0x00, 0x3e, 0x3e, 0x3e, 0x49, 0x50, + 0x50, 0x50, 0x50, 0x00, 0x50, 0x65, 0x65, 0x63, 0x65, 0x65, 0x71, 0x71, + 0x41, 0x71, 0xe9, 0x7f, 0x71, 0x7f, 0x7f, 0x7f, 0xe9, 0x0c, 0x7f, 0x9c, + 0x9c, 0x9c, 0xe9, 0xd1, 0xa3, 0xa3, 0x40, 0xa3, 0xe9, 0xa3, 0xa3, 0x9a, + 0x9a, 0x9a, 0x93, 0x40, 0x93, 0xdb, 0x93, 0x70, 0x23, 0x23, 0x37, 0x45, + 0x00, 0x51, 0x6b, 0x95, 0xb6, 0x03, 0x0a, 0x18, 0x1b, 0x00, 0x1d, 0x1e, + 0x1f, 0x25, 0x29, 0x2b, 0x39, 0x4a, 0x07, 0x25, 0x25, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x30, 0x4a, 0x22, 0x24, 0x1f, 0x1e, 0x1b, + 0x00, 0x1a, 0x0c, 0x05, 0x9f, 0x95, 0x6b, 0x51, 0x45, 0x00, 0x23, 0x1f, + 0x20, 0x21, 0x27, 0x27, 0x2f, 0x2f, 0x00, 0x38, 0x38, 0x38, 0x41, 0x41, + 0x49, 0x49, 0x49, 0x00, 0x50, 0x50, 0x57, 0x57, 0x57, 0x63, 0x63, 0x63, + 0x00, 0x63, 0x71, 0x63, 0x71, 0x71, 0x71, 0x71, 0x71, 0x10, 0x7f, 0x7f, + 0x7f, 0xe9, 0x7f, 0x7f, 0x9c, 0x9c, 0x40, 0x8d, 0xe9, 0x9c, 0x9c, 0x9b, + 0x9c, 0x9b, 0x9b, 0x00, 0x9b, 0xa3, 0xa3, 0xa3, 0x9b, 0x9a, 0x97, 0x97, + 0x00, 0x93, 0x93, 0x9a, 0x93, 0x93, 0x7c, 0x93, 0x74, 0x00, 0x70, 0x23, + 0x23, 0x37, 0x45, 0x51, 0x6b, 0x95, 0x00, 0xb6, 0x03, 0x0a, 0x18, 0x1b, + 0x1d, 0x1e, 0x24, 0x01, 0x25, 0x36, 0x25, 0x25, 0x00, 0x00, 0x00, 0xe9, + 0xe0, 0xd4, 0xa7, 0x5c, 0x30, 0x46, 0x1c, 0x1d, 0x1b, 0x00, 0x1a, 0x0e, + 0x05, 0x95, 0x95, 0x6b, 0x51, 0x45, 0x00, 0x37, 0x1f, 0x20, 0x22, 0x27, + 0x27, 0x2f, 0x2f, 0x00, 0x35, 0x38, 0x3c, 0x3d, 0x3d, 0x41, 0x49, 0x49, + 0x00, 0x4c, 0x49, 0x57, 0x57, 0x57, 0x57, 0x5b, 0x63, 0x00, 0x63, 0x63, + 0x66, 0x71, 0x66, 0x6f, 0x71, 0x72, 0x00, 0x71, 0x7d, 0x7f, 0x7d, 0x7f, + 0x7f, 0x7f, 0x7f, 0x00, 0x85, 0x8d, 0x90, 0x8d, 0x90, 0x90, 0x99, 0x90, + 0x18, 0x9b, 0x9b, 0x9b, 0xe9, 0xd1, 0x97, 0x97, 0x97, 0x00, 0x83, 0x89, + 0x89, 0x89, 0x93, 0x7c, 0x7c, 0x74, 0x00, 0x48, 0x23, 0x23, 0x37, 0x45, + 0x51, 0x91, 0x95, 0x00, 0x9f, 0x04, 0x0c, 0x18, 0x1a, 0x1d, 0x1e, 0x30, + 0x07, 0x25, 0x25, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x80, 0x5f, 0x00, + 0x5e, 0x25, 0x1d, 0x1a, 0x0f, 0x06, 0x00, 0x86, 0x95, 0x6b, 0x51, 0x45, + 0x37, 0x1f, 0x1f, 0x00, 0x22, 0x27, 0x27, 0x2f, 0x2f, 0x35, 0x38, 0x35, + 0x00, 0x3d, 0x3d, 0x3d, 0x49, 0x49, 0x4c, 0x4c, 0x4c, 0x00, 0x4f, 0x54, + 0x5b, 0x5b, 0x5e, 0x63, 0x66, 0x66, 0x40, 0x66, 0xe9, 0x6f, 0x6f, 0x73, + 0x73, 0x7d, 0x7d, 0x00, 0x7d, 0x7d, 0x7d, 0x85, 0x8b, 0x8b, 0x90, 0x90, + 0x00, 0x90, 0x94, 0x94, 0x9d, 0x9b, 0x9b, 0x9b, 0x9b, 0x00, 0x9b, 0x98, + 0xa2, 0x97, 0x97, 0x97, 0x97, 0x89, 0x00, 0x89, 0x89, 0x89, 0x89, 0x7c, + 0x74, 0x74, 0x3e, 0x00, 0x26, 0x26, 0x45, 0x45, 0x6b, 0x91, 0x9f, 0x86, + 0x00, 0x05, 0x0f, 0x18, 0x1b, 0x1d, 0x25, 0x25, 0x00, 0x3c, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5f, 0x62, 0x62, 0x00, 0x62, 0x58, 0x5e, 0x24, 0x1a, + 0x11, 0x07, 0x51, 0x00, 0x95, 0x6b, 0x51, 0x45, 0x37, 0x24, 0x25, 0x22, + 0x00, 0x27, 0x27, 0x2f, 0x2f, 0x35, 0x38, 0x35, 0x3d, 0x00, 0x3d, 0x3d, + 0x41, 0x49, 0x49, 0x49, 0x4f, 0x4f, 0x00, 0x54, 0x5b, 0x5b, 0x5e, 0x5e, + 0x62, 0x62, 0x62, 0x00, 0x62, 0x66, 0x62, 0x6f, 0x6f, 0x73, 0x76, 0x76, + 0x00, 0x76, 0x7d, 0x7d, 0x85, 0x85, 0x82, 0x8b, 0x8b, 0x00, 0x90, 0x82, + 0x94, 0x8e, 0x99, 0x99, 0x9d, 0x9b, 0x00, 0x9b, 0x9b, 0x98, 0x98, 0x97, + 0x97, 0x97, 0x97, 0x00, 0x83, 0x89, 0x89, 0x89, 0x89, 0x89, 0x74, 0x74, + 0x00, 0x32, 0x26, 0x26, 0x45, 0x51, 0x6b, 0x91, 0x9f, 0x00, 0x51, 0x06, + 0x11, 0x18, 0x1b, 0x25, 0x25, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5f, 0x62, 0x62, 0x00, 0x58, 0x5e, 0x5e, 0x58, 0x58, 0x1d, 0x12, 0x09, + 0x00, 0x33, 0xaa, 0x91, 0x6b, 0x45, 0x37, 0x2c, 0x29, 0x00, 0x25, 0x27, + 0x27, 0x2f, 0x2f, 0x35, 0x38, 0x35, 0x00, 0x3d, 0x3d, 0x3d, 0x49, 0x41, + 0x4c, 0x49, 0x4f, 0x00, 0x4f, 0x54, 0x54, 0x58, 0x5e, 0x5e, 0x5e, 0x62, + 0x00, 0x62, 0x62, 0x66, 0x66, 0x6f, 0x66, 0x6f, 0x73, 0x00, 0x76, 0x76, + 0x7d, 0x7a, 0x85, 0x75, 0x85, 0x8b, 0x00, 0x82, 0x8e, 0x8b, 0x94, 0x8e, + 0x99, 0x99, 0x9d, 0x00, 0x8f, 0x98, 0x98, 0x98, 0x98, 0x97, 0x97, 0x83, + 0x00, 0x83, 0x97, 0x89, 0x89, 0x89, 0x77, 0x74, 0x74, 0x00, 0x74, 0x26, + 0x2c, 0x31, 0x45, 0x51, 0x6b, 0x91, 0x00, 0xaa, 0x33, 0x07, 0x12, 0x1a, + 0x31, 0x25, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x62, 0x62, + 0x40, 0x62, 0xe9, 0x8e, 0x8e, 0x4a, 0x14, 0x09, 0x10, 0x00, 0xaa, 0x91, + 0x6b, 0x51, 0x45, 0x2e, 0x29, 0x2b, 0x00, 0x21, 0x27, 0x2f, 0x2f, 0x35, + 0x38, 0x35, 0x3d, 0x00, 0x3d, 0x41, 0x41, 0x41, 0x4c, 0x49, 0x4c, 0x4e, + 0x00, 0x4f, 0x54, 0x58, 0x5e, 0x5e, 0x62, 0x62, 0x62, 0x00, 0x62, 0x66, + 0x62, 0x6f, 0x66, 0x73, 0x6f, 0x75, 0x00, 0x76, 0x7a, 0x7a, 0x7a, 0x75, + 0x85, 0x82, 0x82, 0x00, 0x8e, 0x82, 0x94, 0x90, 0x94, 0x94, 0x99, 0x8f, + 0x00, 0x99, 0x98, 0x97, 0x98, 0x97, 0x97, 0x83, 0x97, 0x00, 0x83, 0x83, + 0x89, 0x89, 0x77, 0x74, 0x74, 0x4d, 0x00, 0x29, 0x2c, 0x37, 0x45, 0x51, + 0x6b, 0x95, 0xb6, 0x00, 0x10, 0x07, 0x14, 0x17, 0x25, 0x25, 0x00, 0x00, + 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x5e, 0x62, 0x62, 0x62, 0xc0, 0xe9, 0xd2, + 0x1a, 0x0a, 0x04, 0xaa, 0x91, 0x6b, 0x00, 0x51, 0x45, 0x37, 0x2b, 0x30, + 0x2d, 0x27, 0x27, 0x00, 0x2f, 0x35, 0x35, 0x35, 0x3d, 0x3d, 0x41, 0x41, + 0x00, 0x41, 0x49, 0x49, 0x4c, 0x4c, 0x4f, 0x4c, 0x5b, 0x00, 0x5e, 0x5e, + 0x5e, 0x62, 0x62, 0x62, 0x66, 0x62, 0x00, 0x6f, 0x66, 0x75, 0x6f, 0x76, + 0x76, 0x75, 0x7a, 0x00, 0x7a, 0x82, 0x85, 0x82, 0x82, 0x8e, 0x82, 0x94, + 0x00, 0x8e, 0x99, 0x99, 0x92, 0x99, 0x9b, 0x92, 0x97, 0x00, 0x98, 0x8a, + 0x97, 0x97, 0x83, 0x83, 0x83, 0x89, 0x00, 0x77, 0x77, 0x74, 0x74, 0x3d, + 0x31, 0x2b, 0x37, 0x00, 0x45, 0x51, 0x91, 0x95, 0xb6, 0x03, 0x07, 0x18, + 0x07, 0x29, 0x25, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xc0, 0x5f, 0x17, + 0x30, 0x1a, 0x0e, 0x06, 0x86, 0x91, 0x00, 0x6b, 0x51, 0x45, 0x37, 0x31, + 0x30, 0x30, 0x27, 0x00, 0x27, 0x2f, 0x35, 0x35, 0x35, 0x38, 0x3d, 0x3d, + 0x00, 0x3d, 0x41, 0x49, 0x49, 0x4c, 0x4f, 0x4f, 0x4f, 0x00, 0x58, 0x58, + 0x5e, 0x62, 0x62, 0x62, 0x62, 0x66, 0x00, 0x62, 0x6f, 0x66, 0x75, 0x6f, + 0x76, 0x75, 0x76, 0x00, 0x7a, 0x75, 0x85, 0x82, 0x82, 0x82, 0x8e, 0x82, + 0x00, 0x94, 0x8e, 0x94, 0x92, 0x8f, 0x92, 0x99, 0x98, 0x00, 0x97, 0x97, + 0x97, 0x97, 0x83, 0x83, 0x83, 0x83, 0x00, 0x89, 0x77, 0x74, 0x74, 0x74, + 0x32, 0x31, 0x31, 0x00, 0x45, 0x51, 0x6b, 0x91, 0xaa, 0x86, 0x04, 0x0f, + 0x01, 0x18, 0x25, 0x94, 0x62, 0x00, 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, + 0x5f, 0x16, 0x3a, 0x19, 0x12, 0x07, 0x00, 0x33, 0xb0, 0x96, 0x67, 0x45, + 0x52, 0x36, 0x36, 0x00, 0x36, 0x32, 0x27, 0x2f, 0x2f, 0x35, 0x38, 0x3d, + 0x00, 0x3d, 0x3d, 0x41, 0x41, 0x41, 0x49, 0x4c, 0x4c, 0x00, 0x4c, 0x4f, + 0x54, 0x5e, 0x5e, 0x62, 0x62, 0x62, 0x00, 0x62, 0x66, 0x62, 0x6f, 0x66, + 0x73, 0x6f, 0x76, 0x00, 0x76, 0x76, 0x75, 0x7a, 0x82, 0x82, 0x82, 0x82, + 0x00, 0x8e, 0x82, 0x94, 0x90, 0x99, 0x92, 0x92, 0x99, 0x00, 0x99, 0x97, + 0x98, 0x8a, 0x97, 0x83, 0x83, 0x83, 0x00, 0x83, 0x83, 0x89, 0x77, 0x74, + 0x74, 0x59, 0x31, 0x00, 0x36, 0x2e, 0x45, 0x5c, 0x96, 0x91, 0xb6, 0x33, + 0x00, 0x07, 0x12, 0x17, 0x1a, 0x5e, 0x62, 0x62, 0x62, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x13, 0x00, 0x30, 0x29, 0x1b, 0x17, 0x09, + 0x0d, 0xb0, 0x91, 0x00, 0x67, 0x56, 0x56, 0x52, 0x39, 0x39, 0x32, 0x27, + 0x00, 0x2f, 0x2f, 0x35, 0x35, 0x38, 0x38, 0x3d, 0x41, 0x00, 0x41, 0x49, + 0x49, 0x4c, 0x4c, 0x4f, 0x4f, 0x4f, 0x00, 0x58, 0x5e, 0x62, 0x62, 0x62, + 0x62, 0x66, 0x62, 0x00, 0x6f, 0x66, 0x75, 0x6f, 0x76, 0x75, 0x76, 0x75, + 0x00, 0x75, 0x82, 0x82, 0x82, 0x82, 0x8e, 0x82, 0x94, 0x00, 0x8e, 0x92, + 0x92, 0x92, 0x92, 0x92, 0x98, 0x97, 0x00, 0x8a, 0x8a, 0x97, 0x83, 0x83, + 0x83, 0x83, 0x77, 0x00, 0x74, 0x74, 0x74, 0x41, 0x39, 0x39, 0x52, 0x56, + 0x00, 0x67, 0x96, 0xb0, 0xbf, 0x0d, 0x07, 0x15, 0x1a, 0x00, 0x1b, 0x40, + 0x5e, 0x5e, 0x62, 0x62, 0x00, 0x00, 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0x12, 0x43, 0x1d, 0x00, 0x1b, 0x1a, 0x0c, 0x05, 0x86, 0xab, 0x96, 0x80, + 0x00, 0x56, 0x52, 0x40, 0x3a, 0x3a, 0x35, 0x27, 0x2f, 0x00, 0x35, 0x35, + 0x38, 0x38, 0x3d, 0x41, 0x41, 0x41, 0x00, 0x41, 0x4c, 0x4c, 0x4c, 0x4c, + 0x4f, 0x58, 0x58, 0x00, 0x62, 0x62, 0x62, 0x62, 0x66, 0x62, 0x6f, 0x66, + 0x00, 0x75, 0x6f, 0x76, 0x73, 0x75, 0x7a, 0x75, 0x85, 0x00, 0x82, 0x82, + 0x82, 0x8e, 0x82, 0x92, 0x8e, 0x92, 0x00, 0x92, 0x99, 0x92, 0x97, 0x98, + 0x97, 0x97, 0x83, 0x00, 0x83, 0x83, 0x83, 0x83, 0x89, 0x77, 0x74, 0x74, + 0x00, 0x69, 0x3a, 0x3a, 0x40, 0x56, 0x5c, 0x96, 0xab, 0x00, 0xb0, 0xb0, + 0x04, 0x0c, 0x18, 0x1a, 0x1d, 0x1e, 0x00, 0x58, 0x58, 0x5e, 0x62, 0x62, + 0x62, 0x00, 0x00, 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x00, 0x01, 0x1c, + 0x00, 0x1e, 0x1b, 0x1a, 0x11, 0x07, 0x33, 0xb0, 0x96, 0x00, 0x81, 0x56, + 0x52, 0x52, 0x3a, 0x3a, 0x3b, 0x27, 0x00, 0x2f, 0x2f, 0x35, 0x38, 0x38, + 0x3d, 0x41, 0x41, 0x00, 0x41, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x58, + 0x00, 0x58, 0x58, 0x62, 0x62, 0x62, 0x66, 0x62, 0x6f, 0x00, 0x66, 0x75, + 0x6f, 0x75, 0x76, 0x76, 0x7a, 0x7a, 0x00, 0x75, 0x85, 0x82, 0x82, 0x90, + 0x82, 0x90, 0x84, 0x00, 0x92, 0x92, 0x92, 0x8f, 0x97, 0x97, 0x97, 0x8a, + 0x00, 0x8a, 0x83, 0x83, 0x83, 0x83, 0x77, 0x77, 0x74, 0x00, 0x74, 0x4b, + 0x3a, 0x3a, 0x52, 0x56, 0x81, 0x96, 0x00, 0xab, 0xbd, 0x33, 0x07, 0x11, + 0x18, 0x1b, 0x1d, 0x04, 0x1e, 0x2b, 0x62, 0x62, 0x62, 0xe9, 0x00, 0x00, + 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x5e, 0x01, 0x22, 0x1f, 0x00, 0x1e, 0x1d, + 0x1b, 0x17, 0x09, 0x07, 0xb0, 0xab, 0x00, 0x96, 0x80, 0x56, 0x52, 0x43, + 0x43, 0x43, 0x35, 0x00, 0x27, 0x2f, 0x35, 0x38, 0x38, 0x3d, 0x3d, 0x41, + 0x00, 0x41, 0x41, 0x4c, 0x4c, 0x4c, 0x4c, 0x54, 0x58, 0x00, 0x58, 0x58, + 0x58, 0x62, 0x62, 0x66, 0x66, 0x6f, 0x00, 0x66, 0x73, 0x73, 0x76, 0x76, + 0x75, 0x7a, 0x75, 0x00, 0x75, 0x85, 0x8b, 0x82, 0x8e, 0x82, 0x92, 0x90, + 0x00, 0x8e, 0x92, 0x8f, 0x8f, 0x97, 0x8a, 0x97, 0x83, 0x00, 0x83, 0x83, + 0x83, 0x83, 0x77, 0x77, 0x74, 0x74, 0x00, 0x69, 0x40, 0x43, 0x40, 0x56, + 0x80, 0x96, 0xab, 0x00, 0xb0, 0xbf, 0x07, 0x06, 0x15, 0x1a, 0x1b, 0x1e, + 0x00, 0x1f, 0x24, 0x40, 0x25, 0x25, 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, + 0xa7, 0x5f, 0x00, 0x01, 0x22, 0x25, 0x00, 0x24, 0x1f, 0x1d, 0x1b, 0x1a, + 0x0e, 0x06, 0x67, 0x00, 0xab, 0x96, 0x81, 0x7e, 0x52, 0x52, 0x46, 0x46, + 0x00, 0x43, 0x27, 0x2f, 0x2f, 0x34, 0x38, 0x38, 0x38, 0x00, 0x41, 0x41, + 0x41, 0x49, 0x49, 0x4c, 0x4c, 0x4c, 0x00, 0x58, 0x54, 0x5d, 0x58, 0x5a, + 0x62, 0x66, 0x66, 0x00, 0x6f, 0x66, 0x75, 0x6f, 0x75, 0x76, 0x7a, 0x7a, + 0x00, 0x7a, 0x85, 0x82, 0x82, 0x84, 0x84, 0x84, 0x90, 0x00, 0x90, 0x92, + 0x8f, 0x8f, 0x98, 0x8a, 0x97, 0x88, 0x00, 0x88, 0x83, 0x83, 0x83, 0x83, + 0x77, 0x77, 0x74, 0x00, 0x74, 0x53, 0x46, 0x46, 0x52, 0x80, 0x81, 0x96, + 0x00, 0xab, 0xbd, 0x95, 0x06, 0x0e, 0x18, 0x1a, 0x1d, 0x00, 0x1e, 0x1f, + 0x24, 0x25, 0x43, 0x25, 0x00, 0x00, 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0x01, 0x28, 0x29, 0x00, 0x25, 0x24, 0x1f, 0x1e, 0x1d, 0x19, 0x12, 0x09, + 0x00, 0x10, 0xbc, 0xab, 0x81, 0x80, 0x7e, 0x52, 0x4a, 0x00, 0x46, 0x46, + 0x38, 0x2f, 0x2f, 0x34, 0x34, 0x38, 0x00, 0x38, 0x3d, 0x41, 0x41, 0x41, + 0x49, 0x4b, 0x4c, 0x00, 0x54, 0x5a, 0x54, 0x5a, 0x5d, 0x62, 0x5d, 0x5a, + 0x00, 0x66, 0x66, 0x6f, 0x73, 0x6f, 0x76, 0x7d, 0x7d, 0x00, 0x85, 0x85, + 0x85, 0x85, 0x79, 0x84, 0x84, 0x84, 0x00, 0x84, 0x8d, 0x8f, 0x8f, 0x8f, + 0x97, 0x97, 0x8a, 0x00, 0x8a, 0x83, 0x83, 0x83, 0x7c, 0x77, 0x77, 0x74, + 0x00, 0x74, 0x6c, 0x46, 0x46, 0x50, 0x7e, 0x80, 0x81, 0x00, 0xab, 0xbc, + 0xca, 0x10, 0x07, 0x12, 0x19, 0x1b, 0x00, 0x1d, 0x1e, 0x24, 0x24, 0x25, + 0x2b, 0x43, 0x25, 0x1e, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5d, 0x01, + 0x00, 0x2a, 0x2b, 0x2b, 0x29, 0x25, 0x24, 0x1e, 0x1d, 0x00, 0x1b, 0x1a, + 0x0c, 0x05, 0x67, 0xab, 0xaf, 0x81, 0x00, 0x7e, 0x78, 0x6e, 0x4a, 0x4a, + 0x4a, 0x2f, 0x2f, 0x00, 0x34, 0x34, 0x38, 0x38, 0x3d, 0x3d, 0x3d, 0x44, + 0x00, 0x49, 0x4c, 0x4b, 0x54, 0x54, 0x5a, 0x58, 0x5d, 0x00, 0x60, 0x58, + 0x66, 0x66, 0x66, 0x6a, 0x6a, 0x6d, 0x00, 0x6a, 0x6d, 0x6d, 0x6d, 0x79, + 0x85, 0x85, 0x8d, 0x00, 0x8d, 0x8d, 0x8d, 0x8f, 0x84, 0x8f, 0x8a, 0x8a, + 0x00, 0x97, 0x8a, 0x8a, 0x88, 0x83, 0x83, 0x7c, 0x7c, 0x00, 0x77, 0x77, + 0x74, 0x74, 0x54, 0x4e, 0x4e, 0x78, 0x00, 0x80, 0x81, 0xae, 0xbc, 0xbd, + 0x95, 0x05, 0x0c, 0x00, 0x18, 0x1a, 0x1d, 0x1e, 0x1f, 0x24, 0x25, 0x29, + 0x01, 0x2b, 0x30, 0x43, 0x25, 0x00, 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, + 0x5b, 0x01, 0x2a, 0x30, 0x30, 0x29, 0x00, 0x29, 0x25, 0x24, 0x1f, 0x1e, + 0x1b, 0x19, 0x12, 0x00, 0x09, 0x10, 0xbc, 0xae, 0xa7, 0x80, 0x7e, 0x78, + 0x00, 0x57, 0x4f, 0x4f, 0x49, 0x2f, 0x34, 0x35, 0x38, 0x00, 0x38, 0x38, + 0x3d, 0x3d, 0x44, 0x41, 0x4b, 0x4b, 0x00, 0x4b, 0x54, 0x54, 0x5a, 0x5a, + 0x5a, 0x5d, 0x66, 0x00, 0x66, 0x66, 0x66, 0x72, 0x6a, 0x72, 0x72, 0x72, + 0x00, 0x7d, 0x7d, 0x85, 0x85, 0x84, 0x8d, 0x8d, 0x84, 0x00, 0x8f, 0x84, + 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x88, 0x00, 0x83, 0x7c, 0x83, 0x7c, 0x7c, + 0x77, 0x74, 0x74, 0x00, 0x5f, 0x55, 0x55, 0x6e, 0x7e, 0x80, 0xa7, 0xae, + 0x00, 0xbc, 0xca, 0x10, 0x07, 0x12, 0x19, 0x1b, 0x1d, 0x00, 0x1e, 0x1f, + 0x24, 0x25, 0x29, 0x2b, 0x30, 0x30, 0x07, 0x43, 0x25, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x80, 0x59, 0x4f, 0x2a, 0x30, 0x30, 0x2b, 0x2b, 0x29, + 0x00, 0x25, 0x24, 0x1f, 0x1e, 0x1d, 0x1b, 0x1a, 0x0c, 0x00, 0x06, 0x5c, + 0xbc, 0xae, 0xa8, 0xa4, 0x78, 0x6e, 0x00, 0x58, 0x58, 0x58, 0x49, 0x2f, + 0x2f, 0x34, 0x38, 0x00, 0x38, 0x3d, 0x3d, 0x44, 0x44, 0x4b, 0x44, 0x4b, + 0x00, 0x54, 0x54, 0x5a, 0x5a, 0x60, 0x60, 0x6a, 0x60, 0x00, 0x66, 0x66, + 0x72, 0x6a, 0x72, 0x72, 0x6d, 0x7d, 0x00, 0x7d, 0x85, 0x79, 0x84, 0x79, + 0x84, 0x79, 0x8f, 0x00, 0x84, 0x8a, 0x8a, 0x8a, 0x8a, 0x88, 0x83, 0x7c, + 0x00, 0x7c, 0x83, 0x7c, 0x77, 0x74, 0x74, 0x6c, 0x5e, 0x00, 0x5b, 0x63, + 0x7e, 0xa4, 0xa8, 0xae, 0xbc, 0xc9, 0x00, 0x86, 0x06, 0x0c, 0x18, 0x1a, + 0x1b, 0x1e, 0x1f, 0x00, 0x24, 0x25, 0x29, 0x29, 0x30, 0x30, 0x30, 0x30, + 0x0e, 0x43, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x20, 0x00, 0x43, + 0x1a, 0x30, 0x30, 0x29, 0x29, 0x25, 0x00, 0x24, 0x1f, 0x1e, 0x1b, 0x19, + 0x13, 0x09, 0x0b, 0x00, 0xc3, 0xb9, 0xaf, 0xa4, 0xa0, 0x78, 0x6e, 0x5e, + 0x00, 0x62, 0x62, 0x3d, 0x2f, 0x34, 0x38, 0x38, 0x3c, 0x00, 0x3c, 0x44, + 0x44, 0x44, 0x4b, 0x4b, 0x4b, 0x4c, 0x00, 0x53, 0x53, 0x60, 0x60, 0x61, + 0x61, 0x6d, 0x61, 0x00, 0x6d, 0x6a, 0x6d, 0x6d, 0x6d, 0x79, 0x79, 0x79, + 0x08, 0x79, 0x84, 0x84, 0x84, 0xc9, 0x8a, 0x88, 0x88, 0x00, 0x88, 0x83, + 0x7c, 0x7c, 0x7c, 0x7c, 0x77, 0x74, 0x00, 0x74, 0x69, 0x66, 0x66, 0x66, + 0x78, 0xa0, 0xa8, 0x00, 0xae, 0xc3, 0xc9, 0xc9, 0x08, 0x07, 0x12, 0x19, + 0x00, 0x1b, 0x1d, 0x1e, 0x1f, 0x24, 0x25, 0x29, 0x2b, 0x00, 0x2b, 0x30, + 0x30, 0x30, 0x30, 0x2a, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0x39, + 0x30, 0x39, 0x43, 0x00, 0x43, 0x43, 0x4a, 0x25, 0x25, 0x25, 0x25, 0x25, + 0x00, 0x39, 0x2b, 0x1d, 0x1b, 0x1a, 0x0f, 0x07, 0x33, 0x00, 0xc5, 0xb9, + 0xa8, 0xa4, 0xa0, 0x8c, 0x71, 0x62, 0x00, 0x62, 0x62, 0x3d, 0x34, 0x34, + 0x38, 0x3c, 0x3c, 0x00, 0x3c, 0x44, 0x44, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, + 0x00, 0x5a, 0x53, 0x53, 0x61, 0x61, 0x6a, 0x6a, 0x6d, 0x00, 0x6a, 0x6d, + 0x6d, 0x6d, 0x6d, 0x79, 0x79, 0x84, 0x10, 0x79, 0x79, 0x79, 0xe9, 0x8a, + 0x88, 0x70, 0x88, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x69, 0x74, 0x69, 0x69, + 0x00, 0x66, 0x71, 0x66, 0x8c, 0xa0, 0xac, 0xaf, 0xb9, 0x00, 0xc5, 0xd5, + 0x33, 0x06, 0x0f, 0x18, 0x1a, 0x1d, 0x04, 0x29, 0x39, 0x25, 0x25, 0x25, + 0xe9, 0x43, 0x43, 0x01, 0x43, 0x43, 0x2a, 0x2a, 0x00, 0x00, 0x00, 0xe9, + 0xc4, 0xd4, 0xa5, 0x30, 0x30, 0x30, 0x57, 0x62, 0x62, 0x00, 0x5e, 0x5e, + 0x40, 0x19, 0x17, 0x0a, 0x04, 0x7b, 0x00, 0xc3, 0xb9, 0xac, 0xa4, 0xa0, + 0x8c, 0x72, 0x6f, 0x00, 0x6a, 0x6f, 0x3f, 0x34, 0x34, 0x38, 0x3c, 0x3c, + 0x00, 0x3c, 0x44, 0x44, 0x44, 0x44, 0x4b, 0x4b, 0x53, 0x00, 0x53, 0x61, + 0x61, 0x61, 0x61, 0x61, 0x6d, 0x6d, 0x41, 0x6d, 0xe9, 0x68, 0x68, 0x79, + 0x79, 0x79, 0xe9, 0x00, 0x79, 0x88, 0x79, 0x70, 0x83, 0x70, 0x7c, 0x70, + 0x00, 0x77, 0x69, 0x74, 0x69, 0x72, 0x72, 0x73, 0x87, 0x00, 0xa0, 0xa4, + 0xaf, 0xb9, 0xc5, 0xd5, 0xa5, 0x03, 0x00, 0x07, 0x15, 0x19, 0x24, 0x25, + 0x25, 0x00, 0x00, 0x7e, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x02, 0x62, + 0x00, 0x62, 0x58, 0x5e, 0x5e, 0x5e, 0x66, 0x19, 0x12, 0x00, 0x09, 0x0d, + 0xc5, 0xc3, 0xba, 0xac, 0xa4, 0xa0, 0x00, 0x9e, 0x7a, 0x75, 0x75, 0x75, + 0x48, 0x34, 0x34, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3f, 0x3f, 0x44, 0x4b, + 0x00, 0x4b, 0x4b, 0x53, 0x53, 0x61, 0x61, 0x61, 0x61, 0x10, 0x6d, 0x6d, + 0x6d, 0xe9, 0x6d, 0x68, 0x79, 0x79, 0x00, 0x68, 0x79, 0x68, 0x79, 0x68, + 0x83, 0x6c, 0x70, 0x00, 0x70, 0x70, 0x69, 0x69, 0x69, 0x69, 0x69, 0x7d, + 0x00, 0x7d, 0x7d, 0x7f, 0xa4, 0xa4, 0xba, 0xb9, 0xc5, 0x00, 0xc9, 0xc9, + 0x0b, 0x07, 0x12, 0x17, 0x30, 0x25, 0x0f, 0x25, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x02, 0x62, 0x62, 0x58, 0x58, 0x62, 0x62, + 0x00, 0x62, 0x25, 0x25, 0x1a, 0x0f, 0x07, 0x10, 0xd0, 0x00, 0xc3, 0xba, + 0xb7, 0xad, 0xa0, 0x9e, 0x8b, 0x82, 0x00, 0x82, 0x85, 0x53, 0x34, 0x34, + 0x3c, 0x3c, 0x3f, 0x00, 0x3c, 0x3f, 0x44, 0x48, 0x48, 0x4b, 0x53, 0x53, + 0x01, 0x61, 0x53, 0x61, 0x61, 0x5f, 0x5f, 0x68, 0xe9, 0x20, 0x68, 0x68, + 0xe9, 0x6c, 0x6c, 0x6c, 0x6c, 0x83, 0x80, 0xda, 0x69, 0x69, 0x69, 0x6c, + 0x8b, 0x8d, 0x8b, 0x00, 0x8d, 0xad, 0xb7, 0xba, 0xb9, 0xc3, 0xd0, 0xd7, + 0x00, 0x16, 0x07, 0x0f, 0x18, 0x1d, 0x25, 0x00, 0x00, 0x7e, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x04, 0x62, 0x08, 0x62, 0x62, 0x62, 0x62, 0x01, + 0x25, 0x24, 0x18, 0x00, 0x0c, 0x06, 0x33, 0xd0, 0xc7, 0xba, 0xb8, 0xad, + 0x00, 0xad, 0x9e, 0x8d, 0x8e, 0x8e, 0x90, 0x6d, 0x3c, 0x00, 0x34, 0x3c, + 0x3c, 0x3f, 0x3f, 0x3f, 0x48, 0x48, 0x00, 0x48, 0x48, 0x48, 0x53, 0x4d, + 0x5f, 0x53, 0x5f, 0x10, 0x5f, 0x68, 0x68, 0xe2, 0x64, 0x68, 0x68, 0x6c, + 0x00, 0x64, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x69, 0x69, 0x00, 0x69, 0x69, + 0x88, 0x90, 0x8d, 0x94, 0x9c, 0xad, 0x00, 0xb7, 0xba, 0xc7, 0xc3, 0xd0, + 0xde, 0x47, 0x05, 0x00, 0x0c, 0x18, 0x19, 0x39, 0x62, 0x00, 0x00, 0x00, + 0xfc, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x03, 0x62, 0x62, 0x10, 0x62, 0x62, + 0x62, 0x02, 0x25, 0x30, 0x19, 0x14, 0x00, 0x0a, 0x05, 0x5c, 0xd1, 0xc7, + 0xba, 0xb8, 0xad, 0x00, 0xad, 0x9e, 0x9c, 0x94, 0x94, 0x94, 0x92, 0x53, + 0x00, 0x34, 0x3c, 0x3c, 0x3f, 0x3f, 0x3f, 0x3f, 0x48, 0x00, 0x48, 0x48, + 0x48, 0x53, 0x4d, 0x5f, 0x5f, 0x5f, 0x80, 0xe9, 0x5f, 0x64, 0x5f, 0x64, + 0x64, 0x6c, 0x6c, 0x40, 0x64, 0xd9, 0x64, 0x69, 0x69, 0x69, 0x6c, 0x8f, + 0x00, 0x99, 0x99, 0x99, 0xa3, 0xad, 0xb7, 0xba, 0xc7, 0x00, 0xd1, 0xd0, + 0xde, 0x5c, 0x04, 0x0a, 0x14, 0x19, 0x01, 0x1a, 0x43, 0x62, 0x62, 0x00, + 0x00, 0x00, 0xe9, 0xfc, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x03, 0x39, 0x1b, + 0x00, 0x19, 0x13, 0x09, 0x04, 0x81, 0xd1, 0xc7, 0xc1, 0x00, 0xb8, 0xb7, + 0xb5, 0xb4, 0xa3, 0x9d, 0x9d, 0x98, 0x00, 0x9d, 0x84, 0x48, 0x34, 0x3c, + 0x3f, 0x3f, 0x48, 0x20, 0x48, 0x48, 0xe9, 0x4d, 0x4d, 0x4d, 0x4d, 0x5f, + 0x30, 0x5f, 0x5f, 0xe9, 0xd1, 0x64, 0x64, 0x64, 0x64, 0x00, 0x69, 0x6c, + 0x69, 0x69, 0x8a, 0x9d, 0xa2, 0x9d, 0x00, 0x9d, 0xb5, 0xb5, 0xb8, 0xc1, + 0xc7, 0xd1, 0xd0, 0x00, 0xde, 0x7b, 0x03, 0x07, 0x13, 0x17, 0x1b, 0x1d, + 0x03, 0x43, 0x58, 0x62, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f, + 0x17, 0x07, 0x02, 0x25, 0x1c, 0x1d, 0x00, 0x1b, 0x1a, 0x12, 0x09, 0x04, + 0x81, 0xd0, 0xd1, 0x00, 0xc1, 0xc2, 0xb7, 0xb5, 0xb5, 0xb4, 0xa3, 0xa2, + 0x00, 0xa2, 0xa2, 0xa2, 0x84, 0x48, 0x3c, 0x3f, 0x3f, 0x00, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x4d, 0x48, 0x4d, 0x20, 0x4d, 0x4d, 0xe9, 0x5f, 0x5f, + 0x5f, 0x59, 0x59, 0x00, 0x59, 0x59, 0x64, 0x59, 0x69, 0x69, 0x83, 0xa2, + 0x00, 0xa2, 0xa2, 0xa2, 0xa3, 0xb5, 0xb7, 0xc2, 0xc1, 0x00, 0xc7, 0xd1, + 0xd0, 0xde, 0x7b, 0x02, 0x07, 0x12, 0x00, 0x18, 0x1a, 0x1b, 0x1d, 0x39, + 0x5e, 0x62, 0x62, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0xc0, 0x07, 0x01, 0x25, 0x1f, 0x1e, 0x1d, 0x1b, 0x1a, 0x00, 0x12, 0x09, + 0x04, 0x5c, 0xd0, 0xd1, 0xc7, 0xc1, 0x00, 0xc2, 0xb5, 0xb5, 0xb4, 0xb4, + 0xa2, 0xa2, 0xa9, 0x00, 0xa9, 0xa9, 0x92, 0x4d, 0x3f, 0x3f, 0x3f, 0x48, + 0x04, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0xe9, 0x4d, 0x59, 0x92, 0xe9, 0x59, + 0x59, 0xe9, 0x6c, 0x97, 0x19, 0xa2, 0x00, 0xa2, 0xb4, 0xb5, 0xc2, 0xc2, + 0xc7, 0xd4, 0xd1, 0x00, 0xd0, 0xde, 0x7b, 0x03, 0x07, 0x12, 0x18, 0x1a, + 0x00, 0x1b, 0x1d, 0x1e, 0x29, 0x62, 0x5e, 0x62, 0x62, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x80, 0x07, 0x00, 0x00, 0x46, 0x24, + 0x1f, 0x1e, 0x1d, 0x00, 0x1b, 0x1a, 0x12, 0x09, 0x05, 0x47, 0xd0, 0xd1, + 0x00, 0xd4, 0xc1, 0xc2, 0xc2, 0xb5, 0xb5, 0xb4, 0xb2, 0x10, 0xa9, 0xa9, + 0xa9, 0xe9, 0x8a, 0x5f, 0x48, 0x48, 0x02, 0x48, 0x48, 0x48, 0x4d, 0x4d, + 0x4d, 0xe9, 0x4d, 0x02, 0x4d, 0x59, 0x59, 0x59, 0x6c, 0x97, 0x34, 0xb4, + 0x00, 0xc4, 0xc2, 0xc2, 0xc1, 0xd4, 0xd1, 0xd1, 0xe6, 0x00, 0xde, 0x47, + 0x04, 0x07, 0x12, 0x18, 0x1a, 0x1b, 0x00, 0x1d, 0x1e, 0x1f, 0x24, 0x62, + 0x62, 0x75, 0xa9, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x80, 0x07, 0x00, 0x25, 0x36, 0x24, 0x1f, 0x1f, 0x1e, 0x00, 0x1d, 0x1b, + 0x1a, 0x13, 0x0a, 0x06, 0x10, 0xd1, 0x00, 0xe2, 0xd1, 0xd4, 0xc1, 0xc2, + 0xc4, 0xc4, 0xb5, 0x00, 0xb4, 0xb4, 0xb1, 0xa9, 0xa9, 0xb1, 0xb1, 0xb1, + 0x00, 0xb1, 0xa9, 0x97, 0x6c, 0x59, 0x4d, 0x48, 0x4d, 0x02, 0x4d, 0x4d, + 0x4d, 0x59, 0x6c, 0x97, 0x74, 0xa9, 0x00, 0xb2, 0xb4, 0xc4, 0xc4, 0xc2, + 0xc1, 0xd4, 0xd4, 0x00, 0xd1, 0xe5, 0xe6, 0xde, 0x16, 0x05, 0x0a, 0x13, + 0x00, 0x18, 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x24, 0x25, 0x00, 0x4a, 0x62, + 0x62, 0x62, 0xbb, 0x00, 0x00, 0x00, 0xfc, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x07, 0x25, 0x29, 0x00, 0x25, 0x24, 0x1f, 0x1f, 0x1e, 0x1d, 0x1b, 0x19, + 0x00, 0x14, 0x0c, 0x07, 0x0d, 0xa7, 0xe5, 0xd1, 0xd4, 0x00, 0xd4, 0xd2, + 0xcd, 0xc4, 0xc4, 0xc4, 0xc4, 0xb4, 0x0e, 0xb2, 0xb1, 0xb1, 0xb1, 0xe9, + 0xd4, 0xa7, 0xb1, 0x40, 0xb2, 0x19, 0xc2, 0xd2, 0xd2, 0xd4, 0xdd, 0xe5, + 0x00, 0xe6, 0xf6, 0xbe, 0x0b, 0x07, 0x0c, 0x14, 0x17, 0x00, 0x1a, 0x1b, + 0x1d, 0x1e, 0x1f, 0x24, 0x25, 0x25, 0x07, 0x39, 0x25, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0xe0, 0x5f, 0x17, 0x07, 0x00, 0x00, 0x25, 0x25, 0x2b, + 0x00, 0x29, 0x25, 0x24, 0x1f, 0x1e, 0x1e, 0x1d, 0x1b, 0x00, 0x19, 0x18, + 0x0f, 0x07, 0x03, 0x42, 0xe2, 0xe2, 0x00, 0xdd, 0xd4, 0xd2, 0xd2, 0xcd, + 0xcd, 0xc4, 0xc4, 0x01, 0xc4, 0xc4, 0xb4, 0xb2, 0xb1, 0xb1, 0xb1, 0xe9, + 0xd0, 0xd4, 0xa2, 0xb2, 0x49, 0xcd, 0xcd, 0xd2, 0xd2, 0x00, 0xd4, 0xdd, + 0xe2, 0xec, 0xe6, 0xe6, 0x47, 0x02, 0x00, 0x07, 0x0f, 0x18, 0x19, 0x1b, + 0x1b, 0x1d, 0x1e, 0x00, 0x1f, 0x24, 0x25, 0x25, 0x29, 0x2b, 0x25, 0x00, + 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x00, 0x00, 0x00, + 0x25, 0x2b, 0x2b, 0x2b, 0x29, 0x25, 0x00, 0x24, 0x24, 0x1f, 0x1e, 0x1b, + 0x1a, 0x17, 0x18, 0x00, 0x12, 0x0a, 0x07, 0x0d, 0x7b, 0xec, 0xe2, 0xdd, + 0x00, 0xd4, 0xd2, 0xd2, 0xcd, 0xcd, 0xcd, 0xc4, 0xc4, 0x41, 0xc4, 0xe9, + 0xb4, 0xb2, 0xbb, 0xbb, 0xbb, 0xe9, 0x20, 0xb2, 0xb2, 0x83, 0xcd, 0xd2, + 0xd2, 0xd4, 0xd4, 0x00, 0xdd, 0xe2, 0xec, 0xf4, 0xf6, 0xae, 0x0b, 0x06, + 0x00, 0x07, 0x12, 0x18, 0x19, 0x1b, 0x1d, 0x1d, 0x1e, 0x00, 0x1f, 0x24, + 0x25, 0x25, 0x29, 0x29, 0x30, 0x39, 0x0f, 0x25, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x07, 0x25, 0x39, 0x30, 0x30, 0x2b, 0x2b, + 0x00, 0x29, 0x25, 0x22, 0x3a, 0x2d, 0x4a, 0x4f, 0x4a, 0x00, 0x3a, 0x19, + 0x15, 0x0f, 0x07, 0x05, 0x10, 0xb9, 0x00, 0xec, 0xe5, 0xdd, 0xd9, 0xd9, + 0xd2, 0xd2, 0xcd, 0x03, 0xcd, 0xcd, 0xcd, 0xc4, 0xc4, 0xc4, 0xe9, 0xd3, + 0x80, 0x8a, 0xd2, 0xd2, 0xd9, 0xd9, 0xdd, 0xe2, 0xe5, 0x00, 0xec, 0xf4, + 0xf6, 0xbe, 0x10, 0x05, 0x07, 0x0f, 0x00, 0x15, 0x17, 0x24, 0x25, 0x25, + 0x25, 0x25, 0x46, 0x00, 0x30, 0x25, 0x25, 0x29, 0x29, 0x2b, 0x2b, 0x30, + 0x0f, 0x25, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x07, + 0x25, 0x30, 0x30, 0x30, 0x30, 0x2b, 0x00, 0x39, 0x4a, 0x62, 0x62, 0x62, + 0x5e, 0x5e, 0x58, 0x00, 0x62, 0x62, 0x19, 0x18, 0x13, 0x0c, 0x07, 0x04, + 0x00, 0x10, 0xae, 0xec, 0xec, 0xe2, 0xdd, 0xdd, 0xd9, 0x00, 0xd9, 0xd9, + 0xd2, 0xd2, 0xd2, 0xd2, 0xcd, 0xcd, 0x70, 0xcd, 0xe9, 0xb2, 0x79, 0xdd, + 0xdd, 0xe2, 0xec, 0x00, 0xec, 0xf4, 0xf6, 0xa5, 0x10, 0x03, 0x07, 0x0c, + 0x00, 0x12, 0x18, 0x19, 0x39, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x25, 0x4a, 0x28, 0x30, 0x2b, 0x0f, 0x30, 0x30, 0x39, 0x25, 0x8b, + 0x63, 0xb7, 0x6f, 0xc0, 0x27, 0x07, 0x25, 0x39, 0x30, 0x30, 0x30, 0x39, + 0x00, 0x25, 0x25, 0x00, 0x62, 0x62, 0x62, 0x5e, 0x62, 0x40, 0x62, 0x79, + 0x1b, 0x19, 0x1a, 0x12, 0x0c, 0x07, 0x00, 0x06, 0x08, 0x47, 0xc8, 0xf4, + 0xec, 0xe5, 0xe2, 0x01, 0xe2, 0xdd, 0xdd, 0xdd, 0xd9, 0xd9, 0xd9, 0xe9, + 0x20, 0xd9, 0xd9, 0xa9, 0xe2, 0xe2, 0xe5, 0xec, 0xec, 0x00, 0xf4, 0xf6, + 0xd3, 0x5c, 0x06, 0x05, 0x07, 0x0c, 0x00, 0x12, 0x18, 0x19, 0x1a, 0x1f, + 0x75, 0x62, 0x00, 0x20, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x25, 0x4f, 0x2a, + 0x0f, 0x30, 0x30, 0x30, 0x25, 0x8e, 0x4e, 0x87, 0x3f, 0xc0, 0x07, 0x01, + 0x4f, 0x30, 0x30, 0x39, 0x25, 0x25, 0x84, 0x02, 0x62, 0x58, 0x62, 0x62, + 0x01, 0x25, 0x25, 0x00, 0x1b, 0x1b, 0x19, 0x1a, 0x12, 0x0e, 0x07, 0x07, + 0x00, 0x03, 0x0d, 0x47, 0xbe, 0xec, 0xf4, 0xec, 0xec, 0x00, 0xec, 0xe5, + 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe5, 0x40, 0xe5, 0xa9, 0xf4, 0xf4, 0xf6, + 0xf6, 0xc8, 0x5c, 0x00, 0x10, 0x02, 0x07, 0x06, 0x0e, 0x12, 0x18, 0x19, + 0x00, 0x1a, 0x1b, 0x1b, 0x46, 0x75, 0x62, 0x00, 0x00, 0x60, 0x00, 0xe9, + 0xd2, 0x25, 0x43, 0x30, 0x30, 0x39, 0x7c, 0x25, 0x87, 0x3f, 0x77, 0x2f, + 0x06, 0x25, 0x2a, 0x10, 0x2a, 0x4f, 0x25, 0x03, 0x62, 0x62, 0x62, 0x62, + 0x80, 0x6c, 0x1d, 0x1d, 0x1b, 0x1b, 0x19, 0x18, 0x17, 0x00, 0x11, 0x0c, + 0x07, 0x07, 0x04, 0x02, 0x16, 0x47, 0x02, 0x81, 0xbe, 0xe6, 0xf4, 0xf6, + 0xf4, 0xe9, 0xf6, 0x00, 0xf4, 0xe5, 0xbe, 0x7b, 0x47, 0x16, 0x02, 0x04, + 0x00, 0x07, 0x07, 0x0c, 0x11, 0x15, 0x18, 0x19, 0x1a, 0x00, 0x1b, 0x1b, + 0x1d, 0x1d, 0x5e, 0x5e, 0x62, 0x62, 0x18, 0x00, 0x00, 0x00, 0xe9, 0xd2, + 0x25, 0x25, 0x39, 0x3e, 0x30, 0x4f, 0x8f, 0x47, 0x77, 0x2f, 0x05, 0x25, + 0x12, 0x43, 0x4f, 0x25, 0x05, 0x62, 0x62, 0x66, 0x25, 0x00, 0x1e, 0x1d, + 0x1d, 0x1b, 0x1b, 0x1a, 0x1a, 0x18, 0x00, 0x17, 0x12, 0x0f, 0x0a, 0x07, + 0x07, 0x06, 0x04, 0x18, 0x02, 0x02, 0x02, 0xe9, 0xd2, 0x04, 0x06, 0x07, + 0x00, 0x07, 0x07, 0x0e, 0x12, 0x14, 0x18, 0x18, 0x1a, 0x00, 0x1a, 0x1b, + 0x1d, 0x1d, 0x1e, 0x1e, 0x30, 0x5e, 0x03, 0x5e, 0xa2, 0x62, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x0f, 0x25, 0x25, 0x28, 0x25, 0x87, 0x3f, 0x77, 0x2f, + 0x92, 0x04, 0x25, 0x25, 0x06, 0x62, 0x62, 0x67, 0x25, 0x00, 0x1f, 0x1f, + 0x1e, 0x1d, 0x1d, 0x1d, 0x1b, 0x1b, 0x00, 0x1a, 0x19, 0x18, 0x18, 0x14, + 0x12, 0x11, 0x0f, 0x00, 0x0c, 0x0c, 0x0a, 0x07, 0x07, 0x06, 0x07, 0x0a, + 0x00, 0x0a, 0x0e, 0x0f, 0x11, 0x12, 0x14, 0x18, 0x18, 0x00, 0x17, 0x1a, + 0x1a, 0x1b, 0x1b, 0x1d, 0x1d, 0x1e, 0x00, 0x1e, 0x1f, 0x1f, 0x1c, 0x75, + 0x5e, 0x94, 0x62, 0x18, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x00, 0x25, + 0x7f, 0x25, 0x87, 0x3f, 0x77, 0x2f, 0x07, 0x07, 0x06, 0x00, 0x25, 0x25, + 0x24, 0x24, 0x1f, 0x1f, 0x1e, 0x1e, 0x00, 0x1d, 0x1d, 0x1b, 0x1d, 0x30, + 0x39, 0x39, 0x17, 0x01, 0x1a, 0x1a, 0x18, 0x18, 0x18, 0x1a, 0x1a, 0xcb, + 0x80, 0xb9, 0x1c, 0x30, 0x30, 0x25, 0x25, 0x1d, 0x1d, 0x00, 0x1e, 0x1e, + 0x1e, 0x1f, 0x1f, 0x24, 0x24, 0x25, 0x01, 0x62, 0x94, 0x58, 0x62, 0x00, + 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, + 0x80, 0x01, 0x25, 0x25, 0x25, 0x25, 0x24, 0x24, 0x1f, 0x00, 0x1f, 0x1f, + 0x1d, 0x40, 0x62, 0x5e, 0x62, 0x62, 0x00, 0x01, 0x19, 0x1b, 0x1b, 0x1b, + 0x1b, 0x1a, 0x1a, 0x20, 0x1a, 0x1a, 0xd1, 0x1b, 0x1a, 0x3a, 0x94, 0x62, + 0x00, 0x00, 0x25, 0x25, 0x39, 0x1e, 0x1f, 0x1f, 0x24, 0x01, 0x24, 0x24, + 0x25, 0x25, 0x25, 0x00, 0x62, 0x79, 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x01, 0x25, 0x28, 0x29, 0x29, + 0x00, 0x25, 0x25, 0x25, 0x24, 0x30, 0x46, 0x5e, 0x5e, 0x00, 0x5e, 0x62, + 0x00, 0x00, 0x01, 0x19, 0x1d, 0x1d, 0x61, 0x1d, 0xe9, 0xd2, 0x1b, 0x43, + 0x5e, 0x8e, 0x69, 0x00, 0x00, 0x25, 0x46, 0x1f, 0x24, 0x24, 0x25, 0x25, + 0x03, 0x29, 0x29, 0x25, 0x00, 0x00, 0x62, 0x7a, 0x61, 0xff, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x80, 0x01, 0x25, 0x2b, 0x2b, 0x2b, + 0x29, 0x29, 0x29, 0x01, 0x40, 0x25, 0x62, 0x5e, 0x5e, 0x62, 0x62, 0x01, + 0x06, 0x01, 0x1c, 0x1e, 0x1e, 0x1e, 0xe9, 0xd1, 0x3a, 0x10, 0x5e, 0x5e, + 0x8e, 0x6a, 0x00, 0x00, 0x25, 0x25, 0x03, 0x25, 0x29, 0x29, 0x29, 0x2b, + 0x4a, 0x9b, 0x73, 0xff, 0xb7, 0x6f, 0x27, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x00, 0x25, 0x30, 0x30, 0x2b, 0x2b, 0x29, 0x43, 0x25, 0x04, 0x00, 0x62, + 0x5e, 0x58, 0x62, 0x74, 0x24, 0x1f, 0x20, 0x1f, 0x1f, 0xe9, 0x24, 0x1c, + 0x62, 0x5e, 0x5e, 0x40, 0x62, 0x64, 0x00, 0x25, 0x25, 0x2b, 0x2b, 0x30, + 0x3f, 0x2b, 0x43, 0x9c, 0x6c, 0xa7, 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x05, 0x25, 0x30, 0x30, 0x30, 0x00, 0x2b, 0x46, 0x25, 0x00, 0x00, + 0x62, 0x5e, 0xa9, 0x88, 0x76, 0x25, 0x25, 0x25, 0xe9, 0x25, 0x25, 0x62, + 0x08, 0x75, 0x5e, 0x62, 0x62, 0x5c, 0x00, 0x25, 0x2a, 0x0f, 0x30, 0x30, + 0x30, 0x43, 0x9d, 0x65, 0x97, 0x4f, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x03, 0x25, 0x30, 0x08, 0x30, 0x30, 0x43, 0x25, 0x01, 0x62, 0x4c, 0x62, + 0x88, 0x6e, 0x29, 0x29, 0x29, 0xe9, 0x36, 0x25, 0x00, 0x20, 0xa2, 0x5e, + 0x66, 0x00, 0x25, 0x25, 0x30, 0x30, 0x3f, 0x30, 0x43, 0x96, 0x56, 0x87, + 0x3f, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x01, 0x25, 0x30, 0x30, 0x2a, + 0x48, 0x25, 0x02, 0x62, 0x62, 0x6f, 0x25, 0x2b, 0x2b, 0x12, 0x2b, 0x2b, + 0x2b, 0x51, 0x62, 0x4c, 0x5f, 0x00, 0x07, 0x25, 0x43, 0x30, 0x30, 0x43, + 0x97, 0x4f, 0x77, 0xfc, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x4a, + 0x12, 0x30, 0x2a, 0x01, 0x03, 0x62, 0x62, 0x67, 0x4a, 0x02, 0x30, 0x30, + 0x30, 0x30, 0x39, 0x25, 0x01, 0xb1, 0x87, 0x5f, 0x00, 0x00, 0x25, 0x43, + 0x64, 0x77, 0xa7, 0xfe, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x04, 0x43, + 0x28, 0x2a, 0x01, 0x04, 0x62, 0x07, 0x00, 0x25, 0x2a, 0x0c, 0x30, 0x30, + 0x30, 0x4a, 0x5f, 0x4f, 0x39, 0x30, 0x7f, 0x25, 0x87, 0x3f, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xcc, 0x07, 0x07, 0x43, 0x4f, 0x5f, 0x5f, 0x00, 0x43, + 0x0c, 0x30, 0x30, 0x30, 0x25, 0x47, 0x07, 0x25, 0x2a, 0xff, 0x5f, 0x1f, + 0x7f, 0x37, 0x07, 0x07, 0x07, 0x07, 0x8c, 0x07, 0x25, 0x4a, 0x25, 0x57, + 0x57, 0x00, 0x25, 0x1f, 0x30, 0x30, 0x39, 0x47, 0x47, 0x41, 0x5f, 0x1f, + 0xfe, 0x7f, 0x37, 0x07, 0x07, 0x07, 0x07, 0x07, 0x25, 0x73, 0x25, 0x57, + 0x57, 0x51, 0x2a, 0x30, 0x47, 0x47, 0xff, 0x42, 0x57, 0x17, 0x7f, 0x37, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x03, 0x43, 0x30, 0x25, + 0xff, 0x07, 0x07, 0x01, 0x57, 0x17, 0x7f, 0x37, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x03, 0x4a, 0x3f, 0x39, 0x25, 0x07, 0x07, 0x77, + 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, + 0x3f, 0x25, 0x43, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x3f, 0x25, 0x25, 0x07, 0x07, 0x77, + 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x3f, 0x00, 0x25, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x06, +}; + +//***************************************************************************** +// +// Cloudy Image +// +//***************************************************************************** +const uint8_t g_pui8CloudyImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 254, + 0x00, 0x00, 0x00, + 0x89, 0x4b, 0x09, + 0x8a, 0x4c, 0x09, + 0x8a, 0x4c, 0x0a, + 0x8b, 0x4d, 0x09, + 0x8d, 0x4d, 0x0a, + 0x8d, 0x4e, 0x0a, + 0x8d, 0x4e, 0x0c, + 0x83, 0x4d, 0x12, + 0x90, 0x4f, 0x0b, + 0x90, 0x50, 0x0c, + 0x90, 0x51, 0x0c, + 0x8e, 0x50, 0x0f, + 0x91, 0x50, 0x0e, + 0x92, 0x52, 0x0c, + 0x92, 0x52, 0x0f, + 0x93, 0x53, 0x0e, + 0x95, 0x53, 0x0e, + 0x94, 0x53, 0x0f, + 0x95, 0x54, 0x0f, + 0x95, 0x54, 0x11, + 0x96, 0x54, 0x11, + 0x97, 0x55, 0x0f, + 0x92, 0x54, 0x14, + 0x96, 0x55, 0x12, + 0x96, 0x56, 0x11, + 0x99, 0x56, 0x10, + 0x98, 0x56, 0x12, + 0x97, 0x56, 0x13, + 0x9a, 0x58, 0x10, + 0x99, 0x57, 0x13, + 0x9b, 0x58, 0x12, + 0x99, 0x58, 0x14, + 0x9c, 0x59, 0x11, + 0x9a, 0x58, 0x14, + 0x9c, 0x59, 0x14, + 0x9c, 0x59, 0x15, + 0x9d, 0x5a, 0x14, + 0x9e, 0x5b, 0x12, + 0x9e, 0x5a, 0x16, + 0x9d, 0x5b, 0x16, + 0x98, 0x5a, 0x1b, + 0xa0, 0x5d, 0x14, + 0xa0, 0x5c, 0x16, + 0x9f, 0x5c, 0x17, + 0xa0, 0x5c, 0x17, + 0xa0, 0x5d, 0x19, + 0xa3, 0x5f, 0x14, + 0xa2, 0x5e, 0x17, + 0xa3, 0x5f, 0x17, + 0xa3, 0x5e, 0x19, + 0xa2, 0x5f, 0x19, + 0xa5, 0x5f, 0x19, + 0xa5, 0x61, 0x16, + 0xa4, 0x60, 0x1a, + 0xa4, 0x60, 0x1b, + 0xa6, 0x61, 0x1a, + 0xa7, 0x63, 0x17, + 0xa7, 0x61, 0x1c, + 0xa8, 0x63, 0x1a, + 0xa8, 0x62, 0x1c, + 0xa7, 0x62, 0x1d, + 0xa4, 0x62, 0x1f, + 0xa9, 0x65, 0x19, + 0xa9, 0x64, 0x1c, + 0xaa, 0x64, 0x1d, + 0xab, 0x66, 0x1c, + 0xab, 0x65, 0x1f, + 0xac, 0x67, 0x1b, + 0xab, 0x66, 0x1e, + 0xad, 0x67, 0x1e, + 0xac, 0x67, 0x20, + 0xae, 0x69, 0x1c, + 0xae, 0x67, 0x20, + 0xa5, 0x66, 0x26, + 0xaf, 0x67, 0x21, + 0xae, 0x69, 0x20, + 0xaf, 0x6a, 0x1e, + 0xb0, 0x69, 0x21, + 0xb1, 0x6c, 0x1e, + 0xb0, 0x6a, 0x23, + 0xb1, 0x6c, 0x20, + 0xb1, 0x6b, 0x22, + 0xb2, 0x6b, 0x23, + 0xb3, 0x6c, 0x24, + 0xb1, 0x6c, 0x25, + 0xb3, 0x6e, 0x22, + 0xb4, 0x6f, 0x20, + 0xb5, 0x6e, 0x24, + 0xb5, 0x70, 0x23, + 0xb6, 0x71, 0x21, + 0xb6, 0x6f, 0x25, + 0xb7, 0x70, 0x26, + 0xb2, 0x6f, 0x2b, + 0xb8, 0x70, 0x27, + 0xb6, 0x70, 0x28, + 0xb7, 0x73, 0x23, + 0xb8, 0x72, 0x26, + 0xb9, 0x72, 0x26, + 0xb9, 0x74, 0x24, + 0xba, 0x73, 0x28, + 0xbb, 0x73, 0x29, + 0xb8, 0x73, 0x2b, + 0xbb, 0x76, 0x26, + 0xbb, 0x74, 0x2a, + 0xbb, 0x75, 0x29, + 0xbc, 0x78, 0x26, + 0xbc, 0x76, 0x2a, + 0xbc, 0x78, 0x28, + 0xbc, 0x76, 0x2d, + 0xbe, 0x77, 0x2b, + 0xbd, 0x78, 0x2a, + 0xb0, 0x74, 0x37, + 0xbf, 0x77, 0x2d, + 0xbf, 0x79, 0x2c, + 0xbe, 0x7b, 0x29, + 0xc1, 0x78, 0x2e, + 0xbf, 0x7c, 0x2a, + 0xbf, 0x7b, 0x2c, + 0xc0, 0x7b, 0x2e, + 0xc1, 0x7b, 0x2e, + 0xc1, 0x7d, 0x2c, + 0xc1, 0x7d, 0x2d, + 0xc3, 0x7c, 0x2f, + 0xc2, 0x7d, 0x2e, + 0xc4, 0x7d, 0x30, + 0xc2, 0x7f, 0x2d, + 0xc3, 0x7e, 0x2f, + 0xc6, 0x7e, 0x31, + 0xc3, 0x80, 0x2f, + 0xc4, 0x80, 0x2f, + 0xc5, 0x7f, 0x31, + 0xc8, 0x7e, 0x32, + 0xc6, 0x7e, 0x33, + 0xc4, 0x7f, 0x34, + 0xbd, 0x7d, 0x3b, + 0xcb, 0x7f, 0x33, + 0xc6, 0x82, 0x31, + 0xc9, 0x81, 0x33, + 0xc7, 0x82, 0x32, + 0xc9, 0x81, 0x34, + 0xcc, 0x80, 0x35, + 0xc7, 0x83, 0x32, + 0xc8, 0x83, 0x33, + 0xc8, 0x84, 0x32, + 0xca, 0x83, 0x34, + 0xc8, 0x82, 0x37, + 0xcd, 0x82, 0x37, + 0xc9, 0x85, 0x33, + 0xcc, 0x83, 0x36, + 0xca, 0x86, 0x34, + 0xcb, 0x86, 0x35, + 0xcc, 0x85, 0x37, + 0xd0, 0x85, 0x39, + 0xcb, 0x88, 0x35, + 0xcd, 0x87, 0x38, + 0xcd, 0x85, 0x3c, + 0xcc, 0x89, 0x36, + 0xcd, 0x89, 0x37, + 0xd2, 0x86, 0x3c, + 0xcd, 0x8b, 0x37, + 0xcf, 0x8a, 0x39, + 0xd5, 0x88, 0x3d, + 0xd0, 0x8b, 0x39, + 0xcf, 0x8c, 0x38, + 0xd2, 0x8a, 0x3c, + 0xd0, 0x8d, 0x3a, + 0xd6, 0x8a, 0x3f, + 0xd1, 0x8d, 0x3b, + 0xd9, 0x8a, 0x40, + 0xcc, 0x89, 0x48, + 0xd2, 0x8e, 0x3c, + 0xd5, 0x8e, 0x3e, + 0xd2, 0x90, 0x3c, + 0xd2, 0x91, 0x3c, + 0xd3, 0x91, 0x3c, + 0xd6, 0x8f, 0x40, + 0xd9, 0x8e, 0x41, + 0xd4, 0x91, 0x3d, + 0xdc, 0x8d, 0x42, + 0xdf, 0x8d, 0x43, + 0xd6, 0x91, 0x40, + 0xd4, 0x93, 0x3e, + 0xd8, 0x91, 0x41, + 0xd6, 0x93, 0x40, + 0xdf, 0x8f, 0x45, + 0xdd, 0x91, 0x44, + 0xd6, 0x95, 0x3f, + 0xd8, 0x94, 0x41, + 0xcd, 0x8e, 0x51, + 0xda, 0x93, 0x43, + 0xe2, 0x90, 0x46, + 0xd6, 0x95, 0x41, + 0xdc, 0x92, 0x46, + 0xdf, 0x92, 0x46, + 0xd9, 0x93, 0x47, + 0xd8, 0x96, 0x42, + 0xe2, 0x92, 0x47, + 0xd9, 0x97, 0x43, + 0xe4, 0x92, 0x49, + 0xdb, 0x96, 0x46, + 0xe6, 0x93, 0x48, + 0xd9, 0x98, 0x43, + 0xdf, 0x95, 0x48, + 0xea, 0x93, 0x48, + 0xe2, 0x95, 0x49, + 0xe6, 0x94, 0x4a, + 0xda, 0x9a, 0x44, + 0xdc, 0x99, 0x47, + 0xe5, 0x96, 0x4a, + 0xd8, 0x95, 0x51, + 0xdf, 0x98, 0x49, + 0xe2, 0x97, 0x4a, + 0xeb, 0x95, 0x4b, + 0xe9, 0x96, 0x4c, + 0xdf, 0x9a, 0x48, + 0xe7, 0x97, 0x4b, + 0xea, 0x96, 0x4c, + 0xdc, 0x9c, 0x47, + 0xe1, 0x98, 0x4e, + 0xe4, 0x99, 0x4b, + 0xdf, 0x9b, 0x49, + 0xe2, 0x9a, 0x4a, + 0xea, 0x97, 0x4d, + 0xdd, 0x9c, 0x48, + 0xd0, 0x95, 0x5c, + 0xeb, 0x97, 0x4f, + 0xe7, 0x99, 0x4d, + 0xe5, 0x9a, 0x4d, + 0xe7, 0x9a, 0x4d, + 0xe8, 0x9a, 0x4d, + 0xde, 0x9e, 0x49, + 0xe5, 0x99, 0x51, + 0xe2, 0x9d, 0x4b, + 0xe0, 0x9e, 0x4a, + 0xe9, 0x9a, 0x50, + 0xe2, 0x9f, 0x4b, + 0xe4, 0x9e, 0x4d, + 0xe1, 0x9e, 0x50, + 0xe5, 0x9e, 0x4f, + 0xdb, 0x9c, 0x5d, + 0xe7, 0x9c, 0x5b, + 0xda, 0xa1, 0x6e, + 0xeb, 0xa5, 0x68, + 0xdd, 0xaa, 0x7d, + 0xe8, 0xac, 0x79, + 0xf1, 0xb0, 0x79, + 0xe4, 0xb5, 0x8b, + 0xf1, 0xba, 0x8c, + 0xe6, 0xbd, 0x9b, + 0xf0, 0xc2, 0x9b, + 0xf1, 0xca, 0xa9, + 0xf6, 0xd4, 0xb8, + 0xf7, 0xda, 0xc3, + 0xf9, 0xe1, 0xcd, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x04, 0xfe, 0x01, 0xfe, 0xfd, 0xfd, 0xfd, 0xfe, + 0xfe, 0xfe, 0x07, 0xff, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xf0, 0x07, 0x07, 0x07, 0x07, 0xfd, 0xfb, 0xf6, 0xf3, 0x00, 0xe2, 0xd5, + 0xcc, 0xcc, 0xe2, 0xf1, 0xf6, 0xfa, 0x3f, 0xfd, 0xfe, 0x07, 0x07, 0x77, + 0x2f, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0xfd, + 0x00, 0xfc, 0xf6, 0xe2, 0xd5, 0xd9, 0xdf, 0xd9, 0xdf, 0x00, 0xd9, 0xd9, + 0xd9, 0xd9, 0xd5, 0xd5, 0xcc, 0xf3, 0x3f, 0xfb, 0xfe, 0x07, 0xbf, 0x77, + 0x2f, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0xfd, 0xfc, + 0x03, 0xf6, 0xd5, 0xd9, 0xdf, 0xdf, 0xdf, 0xe9, 0xd1, 0x00, 0xd9, 0xd9, + 0xd9, 0xd5, 0xd5, 0xcc, 0xf1, 0xfb, 0x7f, 0xfe, 0x07, 0xbf, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x03, 0xfd, 0xf8, 0xd6, + 0x0c, 0xd6, 0xdf, 0xdf, 0xdf, 0xe9, 0xd3, 0xd6, 0xd9, 0x00, 0xd9, 0xd9, + 0xd5, 0xd5, 0xd5, 0xcc, 0xf6, 0xfd, 0xff, 0x05, 0xcd, 0x97, 0x4f, 0x07, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x05, 0xfc, 0xf3, 0xd5, 0xd6, + 0x03, 0xdf, 0xd9, 0xd9, 0xdf, 0xdf, 0xdf, 0xe9, 0xd3, 0x00, 0xd6, 0xd6, + 0xd8, 0xd6, 0xd5, 0xcc, 0xc9, 0xeb, 0x00, 0xfc, 0xfe, 0xfa, 0xe2, 0xe2, + 0xe2, 0xf1, 0xf3, 0x0f, 0xfa, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0xfe, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0xfc, 0x00, 0xf1, 0xce, + 0xd8, 0xd8, 0xd8, 0xd8, 0xe3, 0xe3, 0x08, 0xe3, 0xe3, 0xe3, 0xe6, 0xd3, + 0xd8, 0xd8, 0xd6, 0x00, 0xd8, 0xd6, 0xce, 0xce, 0xce, 0xc9, 0xce, 0xfb, + 0x00, 0xfe, 0xfa, 0xd5, 0xe2, 0xe2, 0xd9, 0xd5, 0xcc, 0x0f, 0xf6, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xfe, 0x17, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x03, 0xfc, 0x00, 0xf1, 0xd1, 0xd1, 0xd8, 0xd8, 0xd8, 0xe3, 0xe3, + 0x10, 0xe6, 0xe6, 0xe6, 0xe9, 0xe6, 0xe3, 0xe3, 0xe3, 0x40, 0xe3, 0x81, + 0xd1, 0xce, 0xce, 0xc7, 0xc9, 0xc9, 0x00, 0xce, 0xfc, 0xfd, 0xf5, 0xdf, + 0xeb, 0xdf, 0xdf, 0x01, 0xd9, 0xd5, 0xcc, 0xf8, 0x00, 0x00, 0x00, 0xe9, + 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x80, 0x07, 0x00, + 0x00, 0xfc, 0xf5, 0xd1, 0xd1, 0xd8, 0x03, 0xd8, 0xe3, 0xe3, 0xe4, 0xe4, + 0xe4, 0xe9, 0xd4, 0x00, 0xe3, 0xe3, 0xd8, 0xd1, 0xd1, 0xd1, 0xd1, 0xc7, + 0x00, 0xc7, 0xc7, 0xc7, 0xe8, 0xfd, 0xfd, 0xf1, 0xeb, 0x00, 0xe6, 0xe3, + 0xd6, 0xd6, 0xce, 0xc9, 0xf3, 0x00, 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x00, 0xfa, 0xc7, 0xd1, + 0x00, 0xd1, 0xd1, 0xdc, 0xdc, 0xdc, 0xe4, 0xe4, 0xe4, 0xc2, 0xe9, 0xd4, + 0xe4, 0xe4, 0xe3, 0xdc, 0x51, 0xc7, 0x00, 0xc7, 0xc7, 0xc5, 0xbf, 0xf5, + 0xfd, 0xfb, 0xd8, 0x00, 0xeb, 0xe5, 0xe3, 0xd8, 0xce, 0xce, 0xc9, 0xf3, + 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x06, 0xfb, 0xe8, 0xcd, 0x00, 0xcd, 0xd4, 0xdc, 0xdc, 0xdc, + 0xdc, 0xdc, 0xe4, 0x04, 0xe4, 0xe4, 0xef, 0xef, 0xef, 0xe9, 0xe4, 0xed, + 0x40, 0xe4, 0x7a, 0xd4, 0xcd, 0xcd, 0xc5, 0xc5, 0xc5, 0x04, 0xbf, 0xb4, + 0xfb, 0xfd, 0xf3, 0x61, 0xe3, 0xd1, 0x01, 0xc7, 0xc7, 0xbf, 0xf8, 0x00, + 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, + 0x80, 0x05, 0xf5, 0xc5, 0xcd, 0xcd, 0xd4, 0xd4, 0xd4, 0x01, 0xdc, 0xde, + 0xdc, 0xde, 0xed, 0xed, 0xed, 0xe9, 0x80, 0xd2, 0xe9, 0xdc, 0xdc, 0xde, + 0xd4, 0xd4, 0xcd, 0x00, 0xcd, 0xc5, 0xc5, 0xb9, 0xbf, 0xb4, 0xf1, 0xfc, + 0x00, 0xfb, 0xe4, 0xef, 0xef, 0xe4, 0xdc, 0xcd, 0xc5, 0x07, 0xbf, 0xbf, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xfe, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x04, 0xfa, 0x00, 0xe8, 0xdb, 0xcd, 0xcd, 0xcd, 0xd4, 0xde, 0xde, + 0x00, 0xde, 0xe9, 0xe9, 0xe9, 0xed, 0xe9, 0xed, 0xed, 0x60, 0xed, 0xe9, + 0xa9, 0xe9, 0xde, 0xde, 0xd4, 0xcd, 0x00, 0xcd, 0xc2, 0xc2, 0xc2, 0xb9, + 0xb4, 0xb3, 0xfa, 0x00, 0xfc, 0xf3, 0xef, 0xef, 0xe4, 0xdb, 0xcd, 0xc5, + 0x03, 0xc2, 0xb4, 0xf5, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, + 0x17, 0x07, 0x07, 0x07, 0x07, 0x02, 0x00, 0xfa, 0xf5, 0xdb, 0xdb, 0xd4, + 0xd3, 0xd3, 0xd3, 0x00, 0xde, 0xde, 0xe9, 0xe9, 0xe9, 0xe9, 0xec, 0xec, + 0x48, 0xec, 0xe9, 0xec, 0xec, 0xa2, 0xe9, 0xde, 0xd3, 0x00, 0xd3, 0xcb, + 0xc2, 0xc2, 0xba, 0xb9, 0xba, 0xb3, 0x01, 0xf3, 0xfc, 0xf8, 0xee, 0xee, + 0xdb, 0xdb, 0x89, 0x07, 0xb9, 0xb4, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xf8, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0xf8, + 0xf6, 0xf3, 0xf3, 0xf3, 0xf3, 0xf5, 0x00, 0xf8, 0xf8, 0xf7, 0xdb, 0xdb, + 0xd3, 0xd3, 0xcb, 0x00, 0xd3, 0xd3, 0xd7, 0xdd, 0xdd, 0xe9, 0xea, 0xea, + 0x00, 0xe9, 0xe9, 0xec, 0xec, 0xec, 0xec, 0xec, 0xe9, 0x40, 0xe9, 0xb1, + 0xdd, 0xd3, 0xd7, 0xcb, 0xcb, 0xc2, 0x00, 0xc2, 0xba, 0xba, 0xb3, 0xb3, + 0xb3, 0xfb, 0xfb, 0x00, 0xee, 0xee, 0xee, 0xde, 0xd3, 0xcb, 0xba, 0xb3, + 0x07, 0xa9, 0xf7, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf8, 0x5f, 0x17, + 0x07, 0x07, 0x05, 0xf8, 0xf8, 0xf6, 0x00, 0xf1, 0xd6, 0xcc, 0xc9, 0xc9, + 0xc9, 0xc7, 0xc7, 0x00, 0xc5, 0xc2, 0xb9, 0xba, 0xcb, 0xcb, 0xcb, 0xcb, + 0x00, 0xd3, 0xd3, 0xd7, 0xd7, 0xd7, 0xdd, 0xdd, 0xea, 0x30, 0xea, 0xea, + 0xe9, 0xd4, 0xdd, 0xdd, 0xd7, 0xd7, 0x00, 0xd3, 0xcb, 0xcb, 0xc1, 0xba, + 0xba, 0xb3, 0xb3, 0x00, 0xb1, 0xa9, 0xf7, 0xfb, 0xf1, 0xee, 0xee, 0xdd, + 0x00, 0xd3, 0xc8, 0xc1, 0xb1, 0xa9, 0xf0, 0x00, 0x00, 0x7f, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x80, 0x03, 0xf8, 0xf6, 0xf3, 0xd6, + 0xc9, 0xce, 0xc9, 0x00, 0xc9, 0xc7, 0xc9, 0xc5, 0xc5, 0xc5, 0xc2, 0xc2, + 0x00, 0xba, 0xba, 0xba, 0xbe, 0xc8, 0xc8, 0xc8, 0xd0, 0x00, 0xd0, 0xd7, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe7, 0xe7, 0x70, 0xe7, 0xe9, 0xd3, 0x89, 0xd7, + 0xd0, 0xd0, 0xc8, 0x00, 0xbe, 0xbe, 0xbe, 0xb1, 0xb1, 0xb1, 0xa9, 0xf2, + 0x00, 0xfb, 0xf5, 0xee, 0xee, 0xee, 0xd3, 0xc8, 0xc3, 0x01, 0xb1, 0xa7, + 0xd2, 0xfb, 0x00, 0x00, 0x00, 0xe9, 0xfe, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x01, 0xf5, 0x01, 0xf3, 0xce, 0xc7, 0xc7, 0xc7, 0xc5, 0xc5, 0xe9, + 0x00, 0xc2, 0xc2, 0xc2, 0xba, 0xba, 0xba, 0xbe, 0xbe, 0x00, 0xbe, 0xbe, + 0xc8, 0xc8, 0xd0, 0xd0, 0xd0, 0xda, 0x00, 0xda, 0xda, 0xda, 0xe0, 0xe0, + 0xe0, 0xe7, 0xe7, 0xe0, 0xe9, 0xc1, 0x89, 0xd0, 0xd0, 0xc8, 0xc8, 0xbe, + 0x00, 0xbe, 0xb7, 0xb1, 0xb1, 0xa7, 0xa7, 0xd2, 0xfa, 0x00, 0xf7, 0xf0, + 0xee, 0xdb, 0xd0, 0xc8, 0xc3, 0xb0, 0x03, 0xa7, 0xa7, 0xfb, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x00, 0xf6, 0xf3, + 0x08, 0xe8, 0xbf, 0xbf, 0xbf, 0xe9, 0xbf, 0xc2, 0xb9, 0x00, 0xb9, 0xba, + 0xba, 0xba, 0xb1, 0xbe, 0xb7, 0xbe, 0x00, 0xbe, 0xbe, 0xc4, 0xc6, 0xc6, + 0xca, 0xcf, 0xd0, 0x06, 0xd0, 0xd0, 0xda, 0xda, 0xda, 0xe9, 0xd4, 0xda, + 0x00, 0xda, 0xd0, 0xcf, 0xcf, 0xca, 0xc6, 0xc6, 0xbe, 0x00, 0xb7, 0xb7, + 0xb0, 0xa7, 0xa7, 0xa2, 0xb1, 0xf9, 0x00, 0xf7, 0xf0, 0xee, 0xee, 0xd0, + 0xc3, 0xb7, 0xb0, 0x00, 0xa5, 0xa2, 0xf7, 0xf5, 0xf5, 0xf7, 0xf9, 0xf9, + 0x01, 0xf7, 0xf4, 0xf0, 0xcd, 0x00, 0x00, 0x00, 0xe9, 0xf8, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0xf6, 0xf3, 0xc5, 0x02, 0xb4, 0xb4, 0xb4, 0xb9, 0xb9, + 0xb9, 0xe9, 0xba, 0x00, 0xba, 0xba, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb5, + 0x00, 0xb8, 0xb8, 0xc4, 0xc4, 0xc6, 0xca, 0xca, 0xca, 0x1c, 0xcf, 0xcf, + 0xcf, 0xe9, 0xd4, 0xa4, 0xca, 0xca, 0x00, 0xc4, 0xc4, 0xb8, 0xb5, 0xb0, + 0xac, 0xac, 0xa5, 0x00, 0xa2, 0x9f, 0xf7, 0xf7, 0xf0, 0xf0, 0xd2, 0xc3, + 0x00, 0xc3, 0xac, 0xa5, 0x9f, 0x99, 0xf0, 0xf4, 0xf2, 0x00, 0xf0, 0xd2, + 0xbd, 0xd2, 0xf2, 0xf4, 0xf9, 0xf4, 0x07, 0xd2, 0x4a, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0xe0, 0x5f, 0x17, 0x03, 0xf3, 0xf1, 0xb9, 0xb3, 0xb3, + 0x60, 0xb3, 0xe9, 0xd1, 0xba, 0xb1, 0xb1, 0xb7, 0xb7, 0x00, 0xb0, 0xb0, + 0xb5, 0xb5, 0xb5, 0xb8, 0xbc, 0xbc, 0x01, 0xc4, 0xc6, 0xc6, 0xc6, 0xca, + 0xca, 0xca, 0xe9, 0x88, 0xd4, 0xca, 0xca, 0xcf, 0x89, 0xc6, 0xc6, 0xc4, + 0x00, 0xc4, 0xb8, 0xb5, 0xb0, 0xac, 0xac, 0xa5, 0xa5, 0x00, 0x9f, 0x99, + 0xf7, 0xf7, 0xf0, 0xd2, 0xf0, 0xf2, 0x00, 0xf2, 0xf2, 0xf2, 0xf2, 0xf0, + 0xbd, 0x99, 0x8d, 0x00, 0x93, 0x93, 0x93, 0x93, 0x8d, 0x88, 0x9c, 0xe1, + 0x03, 0xf4, 0xf4, 0xc1, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xf0, 0xa7, 0x5f, + 0x17, 0x01, 0xf3, 0xf0, 0xb9, 0xa9, 0x21, 0xa9, 0xa9, 0xe9, 0xa9, 0xb1, + 0xb1, 0xb1, 0xe9, 0x00, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb5, 0xb5, 0xb8, + 0x00, 0xb8, 0xc0, 0xc0, 0xc0, 0xc0, 0xc4, 0xc4, 0xc4, 0xf0, 0xe9, 0xd4, + 0xa5, 0x49, 0xb8, 0xb8, 0xb5, 0xb0, 0x00, 0xac, 0xac, 0xa5, 0x9f, 0x9f, + 0x99, 0xf4, 0xf4, 0x0c, 0xf7, 0xf9, 0xf9, 0xf9, 0xe9, 0xd1, 0xf7, 0xf7, + 0x00, 0xf2, 0xaa, 0x8d, 0x95, 0x95, 0x8c, 0x8c, 0x84, 0x01, 0x84, 0xe1, + 0xf4, 0xd2, 0x00, 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, 0x5f, 0x17, 0x00, + 0x00, 0xf0, 0xc3, 0x00, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa7, 0xa7, 0xa7, + 0x08, 0xa7, 0xb0, 0xac, 0xac, 0xe9, 0xac, 0xac, 0xac, 0x00, 0xb2, 0xb2, + 0xb6, 0xb6, 0xb6, 0xbb, 0xb8, 0xb8, 0x1c, 0xbb, 0xbb, 0xbb, 0xe9, 0xd4, + 0xa6, 0xb8, 0xb8, 0x80, 0x21, 0xb2, 0xab, 0xab, 0xa5, 0xa5, 0xa1, 0x99, + 0x00, 0x99, 0xd2, 0xf4, 0xf4, 0xf2, 0xf0, 0xd2, 0xaa, 0x00, 0x9c, 0x9f, + 0xaa, 0xd2, 0xf2, 0xf4, 0xf7, 0xf7, 0x00, 0xf7, 0xf4, 0xbd, 0x88, 0x8c, + 0x8c, 0x85, 0x80, 0x01, 0x7d, 0x9c, 0xf2, 0xd2, 0x00, 0x00, 0x00, 0xe9, + 0xf0, 0xd4, 0xa7, 0x5f, 0x17, 0xf1, 0xd2, 0x9f, 0x9f, 0x40, 0x9f, 0xe9, + 0x9f, 0x9f, 0xa5, 0xa5, 0xa5, 0xac, 0x00, 0xac, 0xac, 0xab, 0xac, 0xab, + 0xab, 0xab, 0xab, 0x00, 0xab, 0xad, 0xb2, 0xb2, 0xb2, 0xb2, 0xb6, 0xb6, + 0x4e, 0xb6, 0xe9, 0xb6, 0xb6, 0xa2, 0x82, 0x64, 0xb2, 0x40, 0xad, 0x01, + 0xa8, 0xa5, 0xa1, 0xa1, 0x9b, 0x99, 0x00, 0x99, 0x99, 0x9c, 0x98, 0x8d, + 0x93, 0x93, 0x8d, 0x00, 0x93, 0x8d, 0x8d, 0x8d, 0x8d, 0x88, 0x93, 0xbd, + 0x00, 0xf2, 0xf4, 0xf4, 0xf2, 0x9c, 0x84, 0x8b, 0x83, 0x00, 0x7d, 0x7b, + 0x92, 0xe1, 0xb1, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x16, + 0xd2, 0x9f, 0x99, 0x20, 0x99, 0x99, 0xe9, 0x99, 0x99, 0x9f, 0xa5, 0xa5, + 0x00, 0xa5, 0xab, 0xab, 0xab, 0xa8, 0xab, 0xa8, 0xa8, 0x00, 0xab, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xae, 0xad, 0x0f, 0xaf, 0xae, 0xae, 0xae, 0xe9, + 0x93, 0x69, 0x4c, 0x00, 0xad, 0xab, 0xab, 0xa8, 0xa8, 0xa6, 0xa1, 0xa1, + 0x00, 0x9b, 0x9b, 0x98, 0x98, 0x98, 0x98, 0x98, 0x93, 0x00, 0x95, 0x95, + 0x95, 0x95, 0x8d, 0x8d, 0x8d, 0x8c, 0x00, 0x8d, 0x88, 0x88, 0x84, 0x9c, + 0xf2, 0xf4, 0xf4, 0x00, 0xbd, 0x80, 0x7d, 0x7b, 0x74, 0x74, 0x92, 0xe1, + 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x15, 0x00, 0xd2, 0xaa, + 0x93, 0x93, 0x93, 0x93, 0x8d, 0x88, 0x00, 0x84, 0x8a, 0x8a, 0x91, 0x97, + 0x9b, 0xa1, 0xa3, 0x04, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xd4, 0xa6, 0xa8, + 0x33, 0xa8, 0xa8, 0xe9, 0x7d, 0xa3, 0xa3, 0xe9, 0x44, 0x00, 0xa6, 0xa6, + 0xa1, 0xa1, 0xa1, 0x9b, 0x9b, 0x98, 0x20, 0x95, 0x95, 0xe9, 0x95, 0x95, + 0x91, 0x8c, 0x8d, 0x00, 0x8c, 0x95, 0x8c, 0x8c, 0x8c, 0x8c, 0x84, 0x84, + 0x00, 0x84, 0x84, 0x84, 0xaa, 0xf2, 0xf2, 0xe1, 0x7d, 0x00, 0x7c, 0x78, + 0x71, 0x6b, 0xaa, 0xaa, 0x00, 0x00, 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0x14, 0xbd, 0x9c, 0x00, 0x8d, 0x88, 0x93, 0xa9, 0xf3, 0xfa, 0xfc, 0xfe, + 0x00, 0xfe, 0xfc, 0xf8, 0xf1, 0xa9, 0xa4, 0xa1, 0xa1, 0x1c, 0xa4, 0xa4, + 0xa4, 0xe9, 0xd4, 0xa3, 0xa0, 0x9e, 0x08, 0xa0, 0x9e, 0x9e, 0x9e, 0xe9, + 0x9e, 0x9e, 0xa0, 0x28, 0xa0, 0xa0, 0xe9, 0xa0, 0x81, 0x9d, 0x97, 0x97, + 0x00, 0x97, 0x91, 0x91, 0x98, 0x98, 0x92, 0x98, 0x91, 0x10, 0x91, 0x91, + 0x8c, 0xe1, 0x91, 0x8c, 0x8a, 0x84, 0x00, 0x84, 0x84, 0x84, 0x80, 0x7d, + 0x85, 0xe1, 0xf2, 0x00, 0xe1, 0x7b, 0x72, 0x6e, 0x68, 0x6d, 0xbd, 0x00, + 0x3e, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x13, 0xc3, 0x00, 0xaa, 0x88, + 0x8d, 0xe8, 0xfa, 0xfe, 0xfe, 0xfc, 0x00, 0xfa, 0xf8, 0xf8, 0xfb, 0xfd, + 0xfe, 0xfd, 0xf8, 0x04, 0xc2, 0xa0, 0x9e, 0x9e, 0x9e, 0xe9, 0x9e, 0x9e, + 0x04, 0x9d, 0x9e, 0x9d, 0x9d, 0x9d, 0xe9, 0x9d, 0x9d, 0x1e, 0x97, 0x97, + 0x97, 0xe9, 0xd1, 0x7e, 0x73, 0x91, 0x00, 0x91, 0x91, 0x91, 0x91, 0x92, + 0x92, 0x91, 0x91, 0x00, 0x8c, 0x8c, 0x91, 0x8f, 0x8f, 0x8f, 0x8c, 0x8a, + 0x00, 0x8b, 0x84, 0x85, 0x80, 0x80, 0x80, 0x7d, 0x7d, 0x00, 0x7b, 0xbd, + 0xf2, 0xe1, 0x72, 0x6b, 0x65, 0x61, 0x07, 0x87, 0xaa, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0xc0, 0x5f, 0x12, 0xaa, 0x9c, 0xa2, 0xf8, 0xfe, 0xfc, + 0x00, 0xf6, 0xe2, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xcc, 0x00, 0xeb, 0xf6, + 0xfd, 0xfe, 0xf6, 0xa3, 0x9a, 0x9a, 0x02, 0x9a, 0x9a, 0x9a, 0x96, 0x96, + 0x96, 0xe9, 0x94, 0x0c, 0x96, 0x94, 0x94, 0x94, 0xe9, 0xd1, 0x8f, 0x94, + 0x70, 0x8f, 0xa2, 0x44, 0x4a, 0x8f, 0x8f, 0x8e, 0x8f, 0x24, 0x8b, 0x8f, + 0xe9, 0x8b, 0x8e, 0xd1, 0x8b, 0x8b, 0x00, 0x8b, 0x83, 0x80, 0x83, 0x80, + 0x7d, 0x7d, 0x7b, 0x00, 0x74, 0x74, 0x74, 0xbd, 0xe1, 0xaa, 0x67, 0x61, + 0x03, 0x5c, 0x66, 0x87, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xe0, 0xa7, 0x5f, + 0x12, 0xaa, 0xdb, 0xfc, 0xfc, 0xf3, 0x00, 0xcc, 0xd9, 0xd9, 0xdf, 0xdf, + 0xdf, 0xdf, 0xd9, 0x00, 0xd9, 0xd9, 0xd5, 0xcc, 0xf6, 0xfe, 0xfb, 0xac, + 0x00, 0x94, 0x94, 0x94, 0x94, 0x8f, 0x8f, 0x8e, 0x8e, 0x04, 0x8b, 0x8e, + 0x8b, 0x8b, 0x8b, 0xe9, 0x83, 0x83, 0x04, 0x89, 0x89, 0x83, 0x83, 0x83, + 0x9a, 0x8e, 0x8e, 0x03, 0x8e, 0x8e, 0x90, 0x8e, 0x90, 0x90, 0xc1, 0x92, + 0xc0, 0x04, 0xd4, 0x89, 0x83, 0x83, 0x83, 0x7d, 0x7d, 0x00, 0x7b, 0x7b, + 0x78, 0x74, 0x74, 0x74, 0xbd, 0xe1, 0x00, 0x87, 0x5c, 0x58, 0x54, 0x87, + 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x11, 0xc3, 0xf0, 0xfd, + 0x06, 0xfa, 0xd9, 0xdf, 0xdf, 0xdf, 0xe9, 0xd3, 0xd6, 0x00, 0xd5, 0xcc, + 0xe2, 0xfc, 0xfc, 0xa7, 0x89, 0x89, 0x10, 0x82, 0x82, 0x82, 0xe9, 0x82, + 0x7f, 0x7f, 0x7f, 0x00, 0x7f, 0x7b, 0x7f, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, + 0x57, 0x7c, 0xa2, 0x7f, 0x43, 0x83, 0xe2, 0x03, 0xa9, 0x18, 0x89, 0x89, + 0x89, 0xe9, 0xd2, 0x82, 0x82, 0x7f, 0x00, 0x7b, 0x7b, 0x78, 0x78, 0x74, + 0x72, 0x71, 0x6e, 0x00, 0x77, 0xbd, 0xbd, 0x64, 0x56, 0x4e, 0x70, 0x00, + 0x3e, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x11, 0xe8, 0x00, 0xfc, 0xf8, + 0xc9, 0xd8, 0xe3, 0xe3, 0xe3, 0xe6, 0x00, 0xe6, 0xe6, 0xe6, 0xe6, 0xe3, + 0xe3, 0xd8, 0xd6, 0x00, 0xd8, 0xce, 0xce, 0xc9, 0xfb, 0xfc, 0x91, 0x81, + 0x00, 0x7e, 0x7f, 0x7c, 0x7a, 0x7a, 0x7a, 0x78, 0x78, 0x01, 0x78, 0x77, + 0x72, 0x77, 0x72, 0x72, 0x72, 0xe9, 0x04, 0x72, 0x72, 0x77, 0x77, 0x78, + 0x61, 0x7a, 0x7c, 0x00, 0x7c, 0x7f, 0x7c, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, + 0x00, 0x7e, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0xc0, 0xe9, 0xd4, + 0x82, 0x7e, 0x7f, 0x7a, 0x78, 0x77, 0x00, 0x72, 0x6e, 0x6e, 0x6b, 0x65, + 0x87, 0xbd, 0x87, 0x03, 0x4e, 0x49, 0x5d, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xe0, 0xa7, 0x5f, 0x12, 0xfa, 0xc9, 0xd8, 0xd8, 0xe3, 0x00, 0xe3, 0xe5, + 0xe5, 0xe5, 0xe6, 0xe6, 0xe5, 0xe5, 0x00, 0xe3, 0xe3, 0xd8, 0xd1, 0xce, + 0xc7, 0xc7, 0xc7, 0x00, 0xfd, 0xf8, 0x79, 0x7a, 0x77, 0x72, 0x72, 0x72, + 0x01, 0x6e, 0x6f, 0x6e, 0x6e, 0x6e, 0x6e, 0x6b, 0xda, 0xe0, 0xba, 0x99, + 0x59, 0x72, 0x76, 0x76, 0x77, 0x77, 0x00, 0x77, 0x77, 0x7a, 0x77, 0x7a, + 0x7a, 0x7a, 0x7a, 0x00, 0x7a, 0x7f, 0x7e, 0x7c, 0x7e, 0x7e, 0x81, 0x82, + 0x20, 0x81, 0x82, 0xe1, 0x81, 0x7e, 0x7c, 0x7a, 0x77, 0x00, 0x76, 0x72, + 0x6e, 0x6e, 0x6b, 0x68, 0x65, 0x65, 0x00, 0xaa, 0xaa, 0x54, 0x42, 0x5d, + 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x11, 0xfc, 0xe3, 0xd1, + 0x00, 0xd1, 0xdc, 0xe4, 0xe4, 0xe4, 0xe4, 0xef, 0xef, 0x20, 0xef, 0xef, + 0xc1, 0xdc, 0xd1, 0xd1, 0xc7, 0xc7, 0x00, 0xc5, 0xf1, 0xfe, 0xc3, 0x77, + 0x72, 0x6b, 0x68, 0x00, 0x68, 0x65, 0x65, 0x65, 0x65, 0x64, 0x64, 0x64, + 0xc0, 0xe9, 0xd4, 0x69, 0x69, 0x6b, 0x6b, 0x6b, 0x6b, 0x04, 0x6f, 0x6f, + 0x6f, 0x6f, 0x72, 0xe9, 0x72, 0x72, 0x00, 0x76, 0x76, 0x76, 0x79, 0x75, + 0x79, 0x7a, 0x7a, 0x08, 0x7a, 0x7e, 0x7e, 0x7e, 0xe9, 0x7e, 0x7e, 0x7a, + 0x80, 0x71, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x64, 0x5e, 0x00, 0x87, 0xaa, + 0x87, 0x3b, 0x47, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x11, + 0xf5, 0xcd, 0xcd, 0x01, 0xd4, 0xde, 0xdc, 0xed, 0xed, 0xed, 0xef, 0xe1, + 0x00, 0xed, 0xed, 0xe4, 0xdc, 0xd4, 0xd4, 0xcd, 0xc5, 0x00, 0xbf, 0xb4, + 0xfa, 0xfa, 0x69, 0x6d, 0x6b, 0x62, 0x03, 0x62, 0x5e, 0x5e, 0x5c, 0x5c, + 0x5c, 0xe9, 0xd1, 0x00, 0x61, 0x5c, 0x5e, 0x5c, 0x5e, 0x5e, 0x62, 0x62, + 0x00, 0x62, 0x62, 0x64, 0x64, 0x69, 0x69, 0x69, 0x69, 0x00, 0x69, 0x6b, + 0x6b, 0x6b, 0x6f, 0x6f, 0x6f, 0x6f, 0x00, 0x73, 0x6f, 0x75, 0x75, 0x75, + 0x75, 0x79, 0x79, 0x60, 0x79, 0xe9, 0xd1, 0x75, 0x75, 0x6f, 0x6f, 0x6b, + 0x00, 0x69, 0x64, 0x62, 0x5c, 0x5c, 0x5f, 0x87, 0x87, 0x07, 0x3b, 0x4a, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x80, 0x5f, 0x00, 0x00, 0xfa, 0xdb, + 0xdb, 0xd4, 0xd4, 0x02, 0xde, 0xde, 0xe9, 0xed, 0xed, 0xed, 0xe9, 0xed, + 0x00, 0xed, 0xe9, 0xde, 0xd4, 0xd4, 0xcd, 0xc2, 0xc2, 0x00, 0xb9, 0xe8, + 0xfd, 0x9c, 0x6d, 0x66, 0x5e, 0x5b, 0x14, 0x58, 0x58, 0x58, 0xe9, 0x54, + 0xcc, 0x58, 0x58, 0x00, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, + 0x00, 0x5c, 0x61, 0x61, 0x61, 0x62, 0x62, 0x64, 0x64, 0x00, 0x64, 0x69, + 0x69, 0x69, 0x6b, 0x6c, 0x6f, 0x6f, 0x06, 0x6f, 0x73, 0x75, 0x75, 0x75, + 0xe9, 0xd1, 0x73, 0x00, 0x6f, 0x6f, 0x6c, 0x69, 0x69, 0x62, 0x5c, 0x5c, + 0x00, 0x58, 0x58, 0x87, 0x87, 0x50, 0x50, 0x00, 0x00, 0x78, 0x00, 0xe9, + 0xd4, 0xa7, 0x5b, 0xf8, 0xf6, 0xf6, 0x00, 0xf6, 0xf8, 0xfa, 0xf3, 0xdb, + 0xd4, 0xcb, 0xd3, 0x00, 0xd7, 0xde, 0xe9, 0xe9, 0xe9, 0xec, 0xec, 0xec, + 0x80, 0xd1, 0xe9, 0xde, 0xd3, 0xd3, 0xcb, 0xc2, 0xb9, 0x00, 0xb3, 0xa9, + 0xfb, 0xf2, 0x6d, 0x66, 0x5f, 0x58, 0x04, 0x53, 0x50, 0x50, 0x52, 0x52, + 0xe9, 0x52, 0x52, 0x00, 0x53, 0x53, 0x53, 0x53, 0x53, 0x54, 0x53, 0x54, + 0x00, 0x54, 0x54, 0x54, 0x58, 0x58, 0x58, 0x5b, 0x5b, 0x00, 0x58, 0x5c, + 0x5c, 0x5c, 0x5c, 0x61, 0x61, 0x61, 0x00, 0x64, 0x67, 0x67, 0x67, 0x67, + 0x6c, 0x6a, 0x6a, 0x08, 0x6c, 0x73, 0x73, 0x73, 0xe9, 0x73, 0x6c, 0x6c, + 0x00, 0x6c, 0x67, 0x67, 0x61, 0x5c, 0x5b, 0x58, 0x54, 0x01, 0x53, 0x66, + 0x87, 0x5d, 0x00, 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, 0x59, 0xf5, 0xf1, + 0xce, 0xc9, 0xc9, 0x00, 0xc7, 0xc5, 0xbf, 0xba, 0xc2, 0xcb, 0xcb, 0xd3, + 0x01, 0xd7, 0xd7, 0xdd, 0xdd, 0xea, 0xea, 0xea, 0xe9, 0x00, 0xea, 0xea, + 0xdd, 0xdd, 0xd7, 0xd0, 0xcb, 0xc1, 0x00, 0xba, 0xb3, 0xa9, 0xf5, 0xf9, + 0x6d, 0x6d, 0x5f, 0x00, 0x55, 0x4e, 0x4e, 0x4b, 0x49, 0x4b, 0x49, 0x4b, + 0x20, 0x4b, 0x4b, 0xe9, 0x4b, 0x4b, 0x4e, 0x4b, 0x4e, 0x04, 0x4e, 0x4e, + 0x52, 0x52, 0x52, 0xe9, 0x52, 0x54, 0x00, 0x54, 0x56, 0x59, 0x58, 0x59, + 0x58, 0x59, 0x59, 0x00, 0x5c, 0x61, 0x61, 0x63, 0x63, 0x67, 0x67, 0x67, + 0x10, 0x6a, 0x6a, 0x6a, 0xe9, 0x6a, 0x6a, 0x67, 0x67, 0x00, 0x63, 0x63, + 0x60, 0x59, 0x59, 0x54, 0x52, 0x52, 0x03, 0x55, 0x87, 0x70, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa7, 0x00, 0xf3, 0xce, 0xc7, 0xc7, 0xc7, 0xc7, + 0x00, 0xc5, 0xc2, 0xc2, 0xba, 0xba, 0xbe, 0xbe, 0xc8, 0x00, 0xc8, 0xd0, + 0xd0, 0xe0, 0xe0, 0xe0, 0xe7, 0xe7, 0x60, 0xe7, 0xe9, 0xb9, 0xd0, 0xd0, + 0xc8, 0xbe, 0xb1, 0x00, 0xb1, 0xa9, 0xd2, 0xfb, 0x87, 0x6d, 0x5d, 0x55, + 0x01, 0x50, 0x47, 0x47, 0x47, 0x43, 0x43, 0x43, 0xe9, 0xe0, 0xd1, 0xa1, + 0x89, 0x49, 0x49, 0x49, 0x49, 0x49, 0x00, 0x4b, 0x4e, 0x4e, 0x4e, 0x52, + 0x52, 0x52, 0x52, 0x00, 0x56, 0x56, 0x58, 0x59, 0x59, 0x59, 0x60, 0x60, + 0x01, 0x60, 0x60, 0x63, 0x63, 0x67, 0x67, 0x67, 0xe9, 0x00, 0x67, 0x63, + 0x63, 0x60, 0x60, 0x59, 0x59, 0x56, 0x00, 0x52, 0x4e, 0x4e, 0x49, 0x70, + 0x87, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0xe8, 0xbf, 0xbf, 0xbf, + 0x00, 0xbf, 0xb9, 0xb9, 0xc2, 0xba, 0xbe, 0xbe, 0xbe, 0x00, 0xbe, 0xbe, + 0xc6, 0xc8, 0xd0, 0xd0, 0xda, 0xda, 0x60, 0xda, 0xe9, 0xd3, 0xd0, 0xcf, + 0xc8, 0xbe, 0xbe, 0x00, 0xb1, 0xac, 0xa7, 0xc3, 0xf9, 0xaa, 0x87, 0x5d, + 0x00, 0x50, 0x47, 0x45, 0x40, 0x41, 0x41, 0x41, 0x40, 0x45, 0x41, 0xd2, + 0x41, 0x43, 0x43, 0xe9, 0x43, 0xe9, 0x00, 0x43, 0x45, 0x46, 0x47, 0x47, + 0x47, 0x4c, 0x4c, 0x00, 0x4d, 0x4c, 0x4c, 0x52, 0x51, 0x51, 0x51, 0x51, + 0x00, 0x56, 0x57, 0x5a, 0x5a, 0x60, 0x60, 0x60, 0x60, 0x04, 0x63, 0x63, + 0x63, 0x63, 0x63, 0xb9, 0x59, 0x59, 0x00, 0x56, 0x51, 0x52, 0x4c, 0x47, + 0x47, 0x5d, 0x87, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa6, 0xb9, 0xb3, + 0x00, 0xb4, 0xb4, 0xb3, 0xb4, 0xba, 0xba, 0xba, 0xb7, 0x00, 0xb7, 0xb7, + 0xb7, 0xb7, 0xbc, 0xc6, 0xc6, 0xca, 0x18, 0xcf, 0xcf, 0xcf, 0xe9, 0xd4, + 0xca, 0xc6, 0xc6, 0x00, 0xbc, 0xb7, 0xb0, 0xa7, 0xa2, 0xa2, 0xf9, 0xbd, + 0x00, 0xbd, 0xbd, 0xe1, 0xe1, 0xbd, 0x9c, 0x68, 0x4e, 0x00, 0x3a, 0x3c, + 0x40, 0x3c, 0x3c, 0x3a, 0x3c, 0x3a, 0x00, 0x3a, 0x3c, 0x3d, 0x3c, 0x3d, + 0x40, 0x3d, 0x40, 0x00, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, + 0x00, 0x45, 0x46, 0x46, 0x46, 0x46, 0x46, 0x4d, 0x4d, 0x00, 0x4d, 0x4f, + 0x4f, 0x51, 0x57, 0x57, 0x57, 0x5a, 0x00, 0x5a, 0x5a, 0x60, 0x60, 0x5a, + 0x60, 0x5a, 0x5a, 0x00, 0x57, 0x57, 0x51, 0x51, 0x4d, 0x4c, 0x46, 0x45, + 0x03, 0x41, 0x5d, 0x6d, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa5, 0xb9, + 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xb1, 0x00, 0xb1, 0xb1, 0xb0, 0xb0, 0xb0, + 0xb0, 0xb5, 0xb8, 0x03, 0xbc, 0xc0, 0xc0, 0xc4, 0xc4, 0xc4, 0xe9, 0xd4, + 0x00, 0xc4, 0xc0, 0xc0, 0xb8, 0xb5, 0xb0, 0xac, 0xa5, 0x01, 0x9f, 0x9f, + 0xf4, 0xf7, 0xf9, 0xf9, 0xf9, 0xe2, 0x00, 0xf4, 0xbd, 0x5e, 0x3a, 0x3a, + 0x3a, 0x38, 0x38, 0x70, 0x38, 0xe9, 0xd1, 0xa1, 0x3a, 0x3a, 0x3c, 0x3c, + 0x00, 0x3c, 0x3c, 0x40, 0x40, 0x40, 0x41, 0x42, 0x41, 0x00, 0x42, 0x42, + 0x46, 0x46, 0x46, 0x4d, 0x4d, 0x4d, 0x00, 0x4f, 0x4f, 0x57, 0x57, 0x57, + 0x57, 0x57, 0x5a, 0x80, 0xd3, 0x4f, 0x4d, 0x4d, 0x46, 0x42, 0x41, 0x40, + 0x07, 0x50, 0x6d, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x00, 0xc3, 0x9f, + 0x9f, 0x9f, 0xa2, 0xa2, 0xa7, 0xac, 0x00, 0xac, 0xac, 0xac, 0xac, 0xab, + 0xb2, 0xb2, 0xb2, 0x04, 0xb6, 0xb6, 0xbb, 0xbb, 0xbb, 0xe9, 0xb6, 0xb6, + 0x40, 0xb6, 0xab, 0xb6, 0xb6, 0xb2, 0xad, 0xab, 0xa5, 0x00, 0xa5, 0xa1, + 0x99, 0xaa, 0xbd, 0x9c, 0x8d, 0x88, 0x00, 0x8d, 0x88, 0x93, 0xaa, 0xf2, + 0xf7, 0xf4, 0xbd, 0x00, 0x49, 0x32, 0x34, 0x34, 0x32, 0x32, 0x36, 0x32, + 0x08, 0x36, 0x36, 0x36, 0x36, 0xc1, 0x37, 0x37, 0x37, 0x00, 0x37, 0x38, + 0x38, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x00, 0x3c, 0x40, 0x40, 0x40, 0x42, + 0x46, 0x46, 0x46, 0x00, 0x48, 0x4d, 0x4f, 0x4f, 0x4f, 0x57, 0x57, 0x57, + 0x20, 0x57, 0x57, 0xc1, 0x4d, 0x48, 0x46, 0x42, 0x40, 0x01, 0x40, 0x3a, + 0x47, 0x66, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa3, 0xd2, 0x99, 0x99, + 0x99, 0x93, 0x99, 0x00, 0x99, 0xa1, 0xa5, 0xa8, 0xab, 0xa8, 0xab, 0xa8, + 0x01, 0xab, 0xab, 0xad, 0xad, 0xae, 0xad, 0xae, 0xe9, 0x06, 0xad, 0xad, + 0xad, 0xad, 0xad, 0x91, 0xc1, 0xa8, 0x00, 0xa8, 0xa3, 0xa1, 0x9b, 0x9b, + 0x9b, 0x98, 0x98, 0x00, 0x93, 0x95, 0x93, 0x8d, 0x8d, 0x8d, 0x88, 0x88, + 0x00, 0x88, 0xbd, 0xf4, 0xf2, 0x5f, 0x2d, 0x32, 0x32, 0x30, 0x32, 0x2e, + 0xe9, 0xc9, 0x32, 0x32, 0x30, 0x30, 0x44, 0x30, 0x89, 0x34, 0x36, 0x36, + 0xe9, 0x38, 0x38, 0x00, 0x3b, 0x3b, 0x40, 0x3f, 0x42, 0x42, 0x44, 0x48, + 0x00, 0x48, 0x4d, 0x48, 0x4f, 0x4f, 0x4f, 0x4d, 0x4d, 0x00, 0x48, 0x48, + 0x48, 0x44, 0x42, 0x3f, 0x3b, 0x38, 0x03, 0x34, 0x4a, 0x5d, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa3, 0x9f, 0x8d, 0x8d, 0x8d, 0x8c, 0x95, 0x98, + 0x00, 0x98, 0x9b, 0xa1, 0xa1, 0xa6, 0xa6, 0xa4, 0xa6, 0x30, 0xa6, 0xa6, + 0xe9, 0xd1, 0xa4, 0xa1, 0xa4, 0xa1, 0x40, 0xa1, 0xe1, 0xa4, 0xa4, 0xa4, + 0xa4, 0xa4, 0xa0, 0x00, 0xa1, 0x9e, 0x9b, 0x97, 0x98, 0x98, 0x98, 0x95, + 0x00, 0x91, 0x91, 0x91, 0x91, 0x8c, 0x8c, 0x84, 0x84, 0x00, 0x84, 0x85, + 0xf0, 0xf2, 0x5f, 0x2b, 0x2d, 0x2d, 0x00, 0x2c, 0x2c, 0x2c, 0x2c, 0x2d, + 0x2c, 0x2d, 0x2c, 0x10, 0x2d, 0x2d, 0x2d, 0xe9, 0x2d, 0x2e, 0x2d, 0x30, + 0x00, 0x30, 0x30, 0x31, 0x30, 0x31, 0x31, 0x35, 0x38, 0x00, 0x38, 0x3b, + 0x3f, 0x3f, 0x3f, 0x44, 0x44, 0x48, 0x20, 0x48, 0x48, 0xe9, 0x48, 0x44, + 0x44, 0x3f, 0x3b, 0x00, 0x3b, 0x38, 0x31, 0x31, 0x4a, 0x5d, 0x00, 0x00, + 0x70, 0x00, 0xe9, 0xd4, 0xa2, 0xcb, 0x88, 0x84, 0x85, 0x00, 0x84, 0x85, + 0x8c, 0x8c, 0x91, 0x97, 0x9d, 0x9d, 0x00, 0x9e, 0x9e, 0xa0, 0x9e, 0x9e, + 0x9e, 0x9d, 0x9d, 0x40, 0x9d, 0xe9, 0x9a, 0x9a, 0x97, 0x97, 0x97, 0x97, + 0x20, 0x97, 0x9a, 0x94, 0x97, 0x96, 0x96, 0x96, 0x96, 0x00, 0x92, 0x96, + 0x94, 0x91, 0x91, 0x91, 0x8c, 0x8f, 0x00, 0x8b, 0x8a, 0x80, 0x80, 0x7d, + 0x7b, 0xbd, 0xe1, 0x05, 0x4b, 0x27, 0x28, 0x28, 0x28, 0xe9, 0x24, 0xcb, + 0x80, 0x99, 0x27, 0x27, 0x27, 0x27, 0x2c, 0x2d, 0x2d, 0x00, 0x2d, 0x2d, + 0x30, 0x30, 0x31, 0x31, 0x35, 0x35, 0x00, 0x39, 0x3b, 0x3f, 0x3f, 0x3f, + 0x44, 0x44, 0x44, 0x20, 0x44, 0x44, 0xc1, 0x3b, 0x39, 0x35, 0x31, 0x31, + 0x03, 0x30, 0x4a, 0x87, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa2, 0x9c, + 0x7d, 0x7b, 0x7b, 0x7b, 0x7d, 0x83, 0x01, 0x83, 0x8f, 0x8f, 0x94, 0x96, + 0x96, 0x96, 0xe9, 0x00, 0x94, 0x94, 0x94, 0x8f, 0x91, 0x8f, 0x8f, 0x8f, + 0x0f, 0x8f, 0x8b, 0x8f, 0x8b, 0xe1, 0x41, 0x72, 0x79, 0x60, 0x8e, 0x5a, + 0x42, 0x83, 0x83, 0x83, 0x7d, 0x7b, 0x00, 0x74, 0x74, 0xbd, 0xbd, 0x2d, + 0x24, 0x24, 0x24, 0x68, 0x22, 0xe1, 0xd1, 0x22, 0xc3, 0x25, 0x25, 0x24, + 0x00, 0x24, 0x27, 0x28, 0x27, 0x28, 0x27, 0x2c, 0x2b, 0x00, 0x30, 0x30, + 0x31, 0x31, 0x35, 0x39, 0x39, 0x39, 0x18, 0x3f, 0x3f, 0x3f, 0xe9, 0xb9, + 0x35, 0x31, 0x30, 0x03, 0x2b, 0x33, 0x3e, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0x80, 0xa2, 0x66, 0x86, 0x74, 0x74, 0x74, 0x74, 0x78, 0x00, 0x78, 0x7d, + 0x82, 0x89, 0x89, 0x8e, 0x8e, 0x8e, 0x00, 0x8e, 0x8b, 0x89, 0x82, 0x83, + 0x82, 0x83, 0x7f, 0x04, 0x7f, 0x7f, 0x7b, 0x7d, 0x7d, 0xe9, 0x7f, 0x82, + 0x02, 0x83, 0x83, 0x89, 0x89, 0x82, 0x82, 0xe9, 0x89, 0x10, 0x89, 0x8b, + 0x8b, 0xe9, 0x89, 0x8b, 0x89, 0x89, 0x00, 0x83, 0x7d, 0x7b, 0x78, 0x74, + 0x71, 0x71, 0xe1, 0x07, 0x87, 0x1f, 0x22, 0x22, 0x22, 0xe9, 0xd4, 0xa6, + 0x00, 0x23, 0x23, 0x23, 0x25, 0x25, 0x27, 0x27, 0x2b, 0x00, 0x2b, 0x30, + 0x31, 0x35, 0x35, 0x35, 0x39, 0x39, 0x60, 0x39, 0xe9, 0xb9, 0x31, 0x2a, + 0x2b, 0x27, 0x33, 0x0e, 0x3e, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa2, 0x66, + 0x00, 0x66, 0x6d, 0x6b, 0x6e, 0x6e, 0x71, 0x77, 0x7a, 0x00, 0x7c, 0x7f, + 0x82, 0x82, 0x82, 0x82, 0x7f, 0x7f, 0x00, 0x7c, 0x78, 0x77, 0x78, 0x72, + 0x72, 0x72, 0x71, 0xc0, 0xe1, 0xc9, 0x72, 0x78, 0x78, 0x7a, 0x7c, 0x7a, + 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7f, 0x7f, 0x81, 0x04, 0x82, 0x82, + 0x82, 0x82, 0x89, 0xda, 0x7c, 0x78, 0x00, 0x78, 0x72, 0x6e, 0x68, 0x87, + 0xbd, 0x2d, 0x1e, 0x08, 0x1e, 0x1c, 0x1c, 0x1c, 0xe9, 0x1b, 0x1e, 0x1e, + 0x40, 0x1b, 0xb1, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x1e, 0x00, 0x1e, 0x1e, + 0x1e, 0x22, 0x23, 0x23, 0x25, 0x25, 0x00, 0x26, 0x2a, 0x2a, 0x2f, 0x2f, + 0x2f, 0x2f, 0x35, 0x40, 0x35, 0xd2, 0x2f, 0x2a, 0x2a, 0x25, 0x25, 0x33, + 0x0e, 0x70, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa2, 0x66, 0x00, 0x66, 0x64, + 0x64, 0x65, 0x65, 0x6b, 0x6f, 0x6e, 0x00, 0x72, 0x76, 0x76, 0x76, 0x76, + 0x76, 0x72, 0x6e, 0x00, 0x6f, 0x6b, 0x6b, 0x69, 0x65, 0x68, 0x65, 0x65, + 0x40, 0x65, 0xe9, 0x65, 0x6b, 0x6b, 0x6b, 0x6b, 0x6f, 0x80, 0x21, 0x72, + 0x72, 0x76, 0x72, 0x77, 0x7a, 0x79, 0x00, 0x7a, 0x7e, 0x7e, 0x7e, 0x7e, + 0x82, 0x82, 0x7e, 0x00, 0x7e, 0x7a, 0x76, 0x72, 0x6e, 0x6b, 0x64, 0x5e, + 0x00, 0xaa, 0x5d, 0x1b, 0x1c, 0x1b, 0x18, 0x18, 0x18, 0x02, 0x18, 0x15, + 0x1c, 0x1c, 0x18, 0x1c, 0xba, 0x18, 0xa0, 0xc9, 0x1c, 0x59, 0x1b, 0x1e, + 0x22, 0x22, 0x23, 0x00, 0x25, 0x25, 0x26, 0x2a, 0x2a, 0x2a, 0x2f, 0x2f, + 0x20, 0x2f, 0x2f, 0xc9, 0x26, 0x26, 0x25, 0x21, 0x28, 0x0e, 0x28, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x66, 0x00, 0x66, 0x5c, 0x5c, 0x5c, 0x5e, + 0x62, 0x64, 0x69, 0x00, 0x6b, 0x6b, 0x6c, 0x6b, 0x6b, 0x69, 0x69, 0x64, + 0x0d, 0x64, 0x62, 0x5c, 0x5e, 0x69, 0x51, 0x5b, 0xcb, 0x02, 0x62, 0x61, + 0x64, 0x64, 0x64, 0x69, 0x09, 0x6f, 0x00, 0x6f, 0x73, 0x75, 0x75, 0x75, + 0x79, 0x79, 0x79, 0x80, 0xe9, 0x75, 0x75, 0x6f, 0x6b, 0x64, 0x62, 0x5c, + 0x00, 0x6d, 0x87, 0x16, 0x15, 0x15, 0x14, 0x14, 0x14, 0x06, 0x14, 0x12, + 0x14, 0x18, 0x1c, 0xbb, 0x9a, 0x14, 0x00, 0x15, 0x15, 0x15, 0x15, 0x19, + 0x1b, 0x1e, 0x1e, 0x00, 0x1f, 0x1f, 0x21, 0x26, 0x26, 0x26, 0x2a, 0x2a, + 0x20, 0x2a, 0x2a, 0xc9, 0x21, 0x21, 0x1f, 0x1f, 0x28, 0x0e, 0x5d, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x66, 0x00, 0x66, 0x54, 0x54, 0x58, 0x58, + 0x5b, 0x5c, 0x5c, 0x00, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5c, 0x5b, 0x58, + 0x06, 0x58, 0x58, 0x54, 0x53, 0x53, 0xe9, 0xda, 0x54, 0x48, 0x54, 0x1a, + 0x58, 0x5b, 0x0b, 0x62, 0x67, 0x67, 0x02, 0x6a, 0x6c, 0x6c, 0x73, 0x73, + 0x73, 0xe9, 0x73, 0x00, 0x6c, 0x6c, 0x67, 0x61, 0x5b, 0x58, 0x5b, 0x87, + 0x00, 0x2e, 0x13, 0x12, 0x12, 0x0f, 0x12, 0x0f, 0x10, 0x00, 0x10, 0x14, + 0x29, 0x29, 0x20, 0x0f, 0x12, 0x12, 0x60, 0x12, 0x8a, 0x61, 0x13, 0x15, + 0x15, 0x15, 0x19, 0x03, 0x1b, 0x1a, 0x1d, 0x21, 0x21, 0x21, 0xe9, 0xd2, + 0x00, 0x1d, 0x1d, 0x1a, 0x1e, 0x1e, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, + 0xa4, 0x66, 0x5d, 0x4b, 0x4e, 0x52, 0x00, 0x52, 0x52, 0x54, 0x56, 0x58, + 0x58, 0x56, 0x58, 0x00, 0x54, 0x53, 0x52, 0x50, 0x4e, 0x4e, 0x4b, 0x49, + 0x02, 0x4b, 0x49, 0x49, 0x49, 0x49, 0x4b, 0xc1, 0x4b, 0x08, 0x4b, 0x4b, + 0x4e, 0x4e, 0x03, 0x58, 0x58, 0x58, 0x00, 0x59, 0x5c, 0x60, 0x62, 0x63, + 0x67, 0x67, 0x6a, 0x00, 0x6a, 0x6a, 0x6a, 0x6a, 0x67, 0x63, 0x60, 0x59, + 0x00, 0x56, 0x53, 0x4e, 0x87, 0x70, 0x70, 0x4a, 0x29, 0x00, 0x29, 0x20, + 0x29, 0x29, 0x4a, 0x70, 0x87, 0x29, 0x03, 0x4a, 0x1c, 0x0d, 0x0f, 0x0f, + 0x0f, 0xe9, 0xd1, 0x00, 0x10, 0x0f, 0x12, 0x11, 0x13, 0x13, 0x19, 0x1a, + 0x08, 0x1a, 0x1d, 0x1d, 0x1d, 0xe9, 0x1d, 0x1d, 0x1a, 0x00, 0x1a, 0x19, + 0x19, 0x1c, 0x08, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa5, 0x5d, 0x43, + 0x43, 0x46, 0x47, 0x00, 0x4c, 0x4c, 0x4e, 0x4e, 0x4e, 0x4e, 0x4c, 0x49, + 0x00, 0x49, 0x46, 0x46, 0x43, 0x43, 0x43, 0x43, 0x41, 0x3c, 0x41, 0x41, + 0xe9, 0xc1, 0x9a, 0x02, 0x49, 0x4c, 0x00, 0x4c, 0x4e, 0x4e, 0x51, 0x56, + 0x56, 0x56, 0x59, 0x00, 0x59, 0x60, 0x60, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x00, 0x60, 0x59, 0x56, 0x52, 0x4c, 0x49, 0x5d, 0x00, 0x30, 0x00, 0x00, + 0xe9, 0xd4, 0x00, 0x4a, 0x0f, 0x0d, 0x30, 0x0d, 0x0d, 0xe9, 0xd2, 0x0f, + 0x10, 0x10, 0x10, 0x00, 0x10, 0x11, 0x13, 0x16, 0x16, 0x16, 0x16, 0x16, + 0x40, 0x1a, 0xd2, 0x13, 0x13, 0x14, 0x36, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa6, 0x66, 0x43, 0x3c, 0x3c, 0x00, 0x40, 0x41, 0x45, 0x45, 0x46, + 0x45, 0x43, 0x45, 0x00, 0x41, 0x40, 0x3d, 0x3a, 0x3a, 0x38, 0x38, 0x38, + 0x04, 0x38, 0x38, 0x3a, 0x3a, 0x3a, 0xe9, 0x3a, 0x3a, 0x00, 0x3d, 0x3a, + 0x3d, 0x3d, 0x3c, 0x40, 0x40, 0x40, 0x00, 0x41, 0x43, 0x43, 0x46, 0x46, + 0x4c, 0x4c, 0x4d, 0x02, 0x51, 0x51, 0x57, 0x5a, 0x5a, 0x5a, 0xe9, 0x57, + 0x00, 0x57, 0x51, 0x4c, 0x46, 0x41, 0x5d, 0x00, 0x00, 0x60, 0x00, 0xe9, + 0xd4, 0x00, 0x00, 0x29, 0x0a, 0x0a, 0x60, 0x0a, 0xe9, 0xd2, 0x0b, 0x0b, + 0x0a, 0x0b, 0x0e, 0x00, 0x0e, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, + 0xc3, 0xe9, 0xb1, 0x26, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa7, 0x00, + 0x50, 0x32, 0x36, 0x34, 0x38, 0x38, 0x40, 0x38, 0xe9, 0x38, 0x38, 0x34, + 0x34, 0x32, 0x32, 0x50, 0x32, 0xe9, 0x2d, 0xca, 0x36, 0x32, 0x34, 0x36, + 0x10, 0x34, 0x34, 0x36, 0x11, 0x37, 0x38, 0x3a, 0x3a, 0x00, 0x3c, 0x3c, + 0x3c, 0x40, 0x40, 0x44, 0x46, 0x48, 0x00, 0x4d, 0x4f, 0x4f, 0x57, 0x57, + 0x57, 0x57, 0x4f, 0x00, 0x4d, 0x48, 0x46, 0x40, 0x3b, 0x50, 0x00, 0x00, + 0x60, 0x00, 0xe9, 0xd4, 0x00, 0x00, 0x4a, 0x29, 0x07, 0x20, 0x07, 0x07, + 0xe9, 0x07, 0x07, 0x09, 0x0a, 0x09, 0x00, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, + 0x0e, 0x0e, 0x0e, 0xc1, 0xe9, 0xd2, 0x10, 0x21, 0x00, 0x00, 0x00, 0xe9, + 0xc0, 0xd4, 0xa7, 0x00, 0x00, 0x66, 0x33, 0x2c, 0x2d, 0x00, 0x30, 0x31, + 0x31, 0x30, 0x30, 0x30, 0x2e, 0x2e, 0x00, 0x2b, 0x2d, 0x27, 0x27, 0x27, + 0x24, 0x27, 0x28, 0x00, 0x24, 0x2d, 0x2d, 0x2e, 0x2e, 0x2d, 0x2d, 0x2d, + 0xc0, 0x59, 0xe2, 0x30, 0x32, 0x32, 0x34, 0x34, 0x34, 0x00, 0x34, 0x34, + 0x38, 0x38, 0x3b, 0x3f, 0x44, 0x44, 0x00, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, + 0x48, 0x48, 0x44, 0x01, 0x3f, 0x3b, 0x34, 0x4a, 0x00, 0x00, 0x00, 0xe9, + 0xc0, 0xd4, 0xa1, 0x3e, 0x17, 0x07, 0x05, 0x06, 0x06, 0x11, 0x06, 0x06, + 0x06, 0xd3, 0x09, 0x09, 0x09, 0xe9, 0x0b, 0x09, 0x0b, 0x0b, 0x0b, 0xd9, + 0x1d, 0x02, 0xe2, 0xc0, 0xc6, 0x87, 0x50, 0x24, 0x1f, 0x23, 0x24, 0x28, + 0x00, 0x25, 0x25, 0x23, 0x23, 0x23, 0x23, 0x22, 0x22, 0x10, 0x1e, 0x1e, + 0x1e, 0xe9, 0x1e, 0x24, 0x27, 0x27, 0x60, 0x27, 0xe9, 0xd2, 0x28, 0x2c, + 0x2c, 0x2c, 0x2d, 0x00, 0x2d, 0x2d, 0x2d, 0x2d, 0x2e, 0x30, 0x31, 0x36, + 0x02, 0x38, 0x3b, 0x3b, 0x44, 0x44, 0x44, 0xe9, 0x3f, 0x00, 0x3b, 0x38, + 0x36, 0x31, 0x4a, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa3, 0x17, 0x0c, + 0x03, 0x05, 0x05, 0x48, 0x05, 0xe9, 0x05, 0x06, 0xe2, 0x06, 0x09, 0x09, + 0x47, 0x09, 0xe9, 0x06, 0x06, 0x33, 0x05, 0xcd, 0x97, 0x82, 0x4a, 0x3d, + 0x1b, 0x1b, 0x1b, 0x1a, 0xe1, 0x1b, 0x04, 0x1b, 0x15, 0x15, 0x15, 0x14, + 0xe1, 0x12, 0x12, 0x01, 0x29, 0x00, 0x00, 0x22, 0x24, 0x24, 0x24, 0xe9, + 0x04, 0x24, 0x24, 0x22, 0x22, 0x22, 0xa3, 0x27, 0x27, 0x00, 0x28, 0x27, + 0x2b, 0x30, 0x31, 0x35, 0x39, 0x39, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x39, + 0x35, 0x31, 0x30, 0x0e, 0x30, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x08, + 0x02, 0x17, 0x0c, 0x07, 0x02, 0x02, 0x02, 0xe9, 0x02, 0x00, 0x04, 0x04, + 0x04, 0x04, 0x05, 0x04, 0x04, 0x06, 0x07, 0x05, 0x06, 0x06, 0x0e, 0x08, + 0x06, 0xc6, 0x87, 0x80, 0x3a, 0x3e, 0x14, 0x12, 0x12, 0x12, 0x12, 0x10, + 0x00, 0x12, 0x10, 0x0f, 0x0f, 0x0f, 0x0f, 0x0d, 0x0d, 0x10, 0x0d, 0x0a, + 0x3e, 0x02, 0x1b, 0x1e, 0x1e, 0x1e, 0xe0, 0xe9, 0xd4, 0xa1, 0x22, 0x1f, + 0x1f, 0x23, 0x25, 0x00, 0x25, 0x2a, 0x2a, 0x2f, 0x2f, 0x35, 0x35, 0x35, + 0x00, 0x35, 0x2f, 0x2f, 0x2a, 0x25, 0x2e, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa7, 0x0f, 0x0c, 0x03, 0x02, 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, + 0x02, 0x04, 0x04, 0x8f, 0xe2, 0x07, 0x0a, 0x08, 0x07, 0xbf, 0x77, 0x2b, + 0x00, 0x4a, 0x17, 0x09, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x01, 0x09, 0x09, + 0x09, 0x07, 0x07, 0x06, 0x0c, 0x04, 0x00, 0x08, 0x20, 0x15, 0x18, 0x18, + 0x18, 0x18, 0x15, 0x20, 0x1c, 0x1c, 0xca, 0x18, 0x1c, 0x18, 0x1b, 0x1b, + 0x00, 0x1b, 0x1f, 0x1f, 0x23, 0x26, 0x26, 0x2a, 0x2a, 0x00, 0x2f, 0x2f, + 0x2a, 0x2a, 0x26, 0x25, 0x1f, 0x33, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x00, 0x02, 0x00, 0x23, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x03, 0x03, 0x07, 0x03, 0x13, 0x08, 0x07, 0xe0, 0xbf, 0x77, + 0x2f, 0x3e, 0x0c, 0x05, 0x02, 0x03, 0x01, 0x03, 0x04, 0x03, 0x03, 0x02, + 0x0c, 0x29, 0x07, 0x00, 0x4a, 0x20, 0x12, 0x12, 0x12, 0x12, 0x12, 0x20, + 0x20, 0x3e, 0x18, 0xc3, 0x13, 0x13, 0x15, 0x15, 0x19, 0x00, 0x1a, 0x1d, + 0x21, 0x21, 0x26, 0x26, 0x26, 0x21, 0x01, 0x21, 0x1f, 0x1a, 0x22, 0x00, + 0x00, 0x00, 0xe9, 0xe3, 0xd4, 0xa7, 0x5a, 0x02, 0x02, 0x02, 0xe9, 0xd4, + 0xf8, 0x07, 0x07, 0x77, 0x2f, 0x03, 0x29, 0x1c, 0x19, 0x0c, 0x19, 0x1c, + 0x29, 0x4a, 0x07, 0x02, 0x87, 0x5d, 0x00, 0x4a, 0x70, 0x87, 0x00, 0x00, + 0x70, 0x0f, 0x0f, 0x40, 0x0f, 0xe9, 0x0f, 0x0f, 0x12, 0x11, 0x13, 0x16, + 0x00, 0x1a, 0x1a, 0x1d, 0x1d, 0x1d, 0x1d, 0x1a, 0x16, 0x07, 0x16, 0x36, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xc1, 0x07, 0x02, 0x29, 0x09, 0x0a, 0x0a, 0x0a, 0xe9, + 0x00, 0x0d, 0x0e, 0x0e, 0x10, 0x10, 0x11, 0x16, 0x11, 0x07, 0x16, 0x16, + 0x11, 0x10, 0x26, 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x07, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x09, + 0x01, 0x09, 0x0a, 0x0a, 0x0b, 0x0e, 0x0e, 0x0e, 0xe9, 0x3f, 0x0e, 0x21, + 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x00, 0x00, 0x00, 0x28, 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, + 0x00, 0x06, 0x06, 0x06, 0x09, 0x09, 0x09, 0x09, 0x09, 0x7f, 0x26, 0x07, + 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x03, 0x07, 0x05, 0x00, 0x02, 0x02, 0x03, 0x03, 0x05, 0x05, 0x05, 0x05, + 0x1f, 0x05, 0x06, 0x0e, 0x07, 0x07, 0x77, 0x2f, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x00, 0x3e, 0x07, 0x03, 0x03, 0x01, + 0x01, 0x03, 0x04, 0x3f, 0x07, 0x0b, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x17, 0x02, 0x02, + 0x02, 0xe9, 0x02, 0x07, 0x07, 0x77, 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, +}; + +//***************************************************************************** +// +// Rain Image +// +//***************************************************************************** +const uint8_t g_pui8RainImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 255, + 0x00, 0x00, 0x00, + 0x86, 0x4b, 0x0b, + 0x8a, 0x4c, 0x0a, + 0x88, 0x4c, 0x0b, + 0x8b, 0x4c, 0x0a, + 0x8c, 0x4d, 0x0a, + 0x8a, 0x4d, 0x0c, + 0x8b, 0x4d, 0x0c, + 0x8d, 0x4e, 0x0a, + 0x8e, 0x4e, 0x0c, + 0x8b, 0x4e, 0x0e, + 0x8f, 0x50, 0x0b, + 0x8d, 0x4f, 0x0e, + 0x90, 0x50, 0x0b, + 0x8f, 0x4f, 0x0e, + 0x91, 0x51, 0x0c, + 0x8f, 0x51, 0x0f, + 0x92, 0x51, 0x0f, + 0x92, 0x51, 0x10, + 0x93, 0x53, 0x0c, + 0x93, 0x53, 0x0e, + 0x93, 0x52, 0x10, + 0x93, 0x53, 0x10, + 0x8f, 0x53, 0x12, + 0x93, 0x53, 0x11, + 0x96, 0x54, 0x0e, + 0x95, 0x54, 0x11, + 0x96, 0x55, 0x10, + 0x95, 0x55, 0x12, + 0x97, 0x55, 0x12, + 0x93, 0x55, 0x14, + 0x97, 0x56, 0x11, + 0x99, 0x57, 0x0f, + 0x99, 0x56, 0x13, + 0x97, 0x56, 0x14, + 0x9a, 0x57, 0x11, + 0x97, 0x57, 0x13, + 0x99, 0x57, 0x14, + 0x99, 0x57, 0x15, + 0x9a, 0x58, 0x13, + 0x8e, 0x56, 0x1c, + 0x9c, 0x5a, 0x10, + 0x9b, 0x59, 0x13, + 0x9a, 0x59, 0x15, + 0x9a, 0x59, 0x16, + 0x9d, 0x5a, 0x13, + 0x9d, 0x5a, 0x15, + 0x9e, 0x5c, 0x11, + 0x96, 0x59, 0x1a, + 0x9d, 0x5a, 0x16, + 0x9d, 0x5a, 0x17, + 0x9e, 0x5c, 0x14, + 0x9f, 0x5b, 0x16, + 0x9f, 0x5c, 0x16, + 0x9f, 0x5b, 0x18, + 0xa0, 0x5e, 0x13, + 0x9f, 0x5c, 0x19, + 0x9f, 0x5d, 0x18, + 0x9a, 0x5c, 0x1c, + 0xa1, 0x5e, 0x16, + 0xa4, 0x60, 0x14, + 0xa2, 0x5e, 0x19, + 0xa0, 0x5f, 0x18, + 0x9f, 0x5e, 0x1b, + 0xa4, 0x60, 0x16, + 0xa4, 0x5f, 0x19, + 0xa3, 0x5f, 0x1a, + 0xa5, 0x61, 0x18, + 0xa6, 0x63, 0x15, + 0xa3, 0x60, 0x1c, + 0xa6, 0x60, 0x1b, + 0xa6, 0x61, 0x1c, + 0xa7, 0x63, 0x19, + 0xa6, 0x63, 0x1b, + 0xa8, 0x63, 0x1b, + 0xa6, 0x63, 0x1d, + 0xa9, 0x64, 0x1c, + 0xab, 0x67, 0x17, + 0xa9, 0x64, 0x1e, + 0xa7, 0x64, 0x1f, + 0xaa, 0x64, 0x1e, + 0x9f, 0x63, 0x24, + 0xab, 0x67, 0x1a, + 0xab, 0x67, 0x1e, + 0xaa, 0x66, 0x21, + 0xab, 0x67, 0x1f, + 0xad, 0x67, 0x1f, + 0xac, 0x69, 0x1c, + 0xae, 0x67, 0x21, + 0xa8, 0x68, 0x25, + 0xae, 0x6a, 0x1f, + 0xae, 0x69, 0x21, + 0xae, 0x69, 0x22, + 0xb0, 0x6c, 0x1c, + 0xae, 0x69, 0x23, + 0xb1, 0x6a, 0x22, + 0xb1, 0x6a, 0x24, + 0xb0, 0x6c, 0x22, + 0xb2, 0x6c, 0x23, + 0xb4, 0x70, 0x1d, + 0xb3, 0x6f, 0x21, + 0xb1, 0x6e, 0x24, + 0xb4, 0x6e, 0x24, + 0xb0, 0x6e, 0x27, + 0xb4, 0x6f, 0x27, + 0xb7, 0x6f, 0x26, + 0xb5, 0x6f, 0x27, + 0xa3, 0x6c, 0x34, + 0xb5, 0x71, 0x24, + 0xb6, 0x71, 0x27, + 0xb7, 0x72, 0x26, + 0xb9, 0x75, 0x20, + 0xb9, 0x71, 0x29, + 0xb7, 0x72, 0x29, + 0xb8, 0x73, 0x28, + 0xb8, 0x75, 0x26, + 0xb9, 0x74, 0x2a, + 0xba, 0x76, 0x28, + 0xb0, 0x73, 0x33, + 0xba, 0x76, 0x2a, + 0xbe, 0x75, 0x2b, + 0xbc, 0x76, 0x2a, + 0xbc, 0x7a, 0x24, + 0xba, 0x76, 0x2d, + 0xbc, 0x79, 0x29, + 0xbd, 0x79, 0x2b, + 0xbf, 0x78, 0x2d, + 0xbf, 0x79, 0x2e, + 0xc0, 0x7d, 0x26, + 0xbe, 0x7b, 0x2b, + 0xc0, 0x7b, 0x2c, + 0xc2, 0x7a, 0x2e, + 0xc2, 0x7b, 0x30, + 0xc0, 0x7d, 0x2d, + 0xbf, 0x7b, 0x32, + 0xb9, 0x7a, 0x37, + 0xc2, 0x7d, 0x2e, + 0xc2, 0x7e, 0x2e, + 0xc4, 0x82, 0x27, + 0xc5, 0x7d, 0x32, + 0xc3, 0x7e, 0x31, + 0xc3, 0x7f, 0x30, + 0xc8, 0x7d, 0x33, + 0xc3, 0x80, 0x2f, + 0xc5, 0x80, 0x31, + 0xc3, 0x7f, 0x35, + 0xc9, 0x7f, 0x35, + 0xc7, 0x81, 0x33, + 0xc6, 0x82, 0x32, + 0xc7, 0x82, 0x32, + 0xc8, 0x84, 0x33, + 0xc8, 0x83, 0x35, + 0xca, 0x83, 0x37, + 0xcb, 0x8a, 0x2a, + 0xcd, 0x83, 0x38, + 0xc9, 0x82, 0x3c, + 0xc8, 0x86, 0x35, + 0xca, 0x89, 0x30, + 0xca, 0x87, 0x35, + 0xd0, 0x85, 0x3a, + 0xcb, 0x88, 0x37, + 0xcd, 0x88, 0x37, + 0xff, 0x7f, 0x37, + 0xcb, 0x8a, 0x38, + 0xd1, 0x87, 0x3e, + 0xcd, 0x8b, 0x38, + 0xcf, 0x8b, 0x39, + 0xcf, 0x8b, 0x3b, + 0xd0, 0x8d, 0x3a, + 0xd1, 0x8b, 0x3e, + 0xd0, 0x92, 0x31, + 0xd6, 0x8a, 0x3f, + 0xd0, 0x8e, 0x3c, + 0xcb, 0x89, 0x48, + 0xd6, 0x8b, 0x41, + 0xd2, 0x8f, 0x3c, + 0xd1, 0x8f, 0x3e, + 0xda, 0x8c, 0x41, + 0xd3, 0x8f, 0x3f, + 0xd5, 0x91, 0x3f, + 0xd7, 0x90, 0x41, + 0xdb, 0x8e, 0x44, + 0xd3, 0x93, 0x3e, + 0xd3, 0x92, 0x40, + 0xdc, 0x8f, 0x44, + 0xea, 0x8e, 0x41, + 0xff, 0x8c, 0x3e, + 0xdf, 0x8f, 0x46, + 0xc4, 0x8c, 0x56, + 0xd5, 0x94, 0x41, + 0xd6, 0x97, 0x3b, + 0xdc, 0x91, 0x46, + 0xe2, 0x90, 0x47, + 0xd9, 0x94, 0x43, + 0xd7, 0x95, 0x43, + 0xe5, 0x91, 0x48, + 0xd7, 0x97, 0x43, + 0xdf, 0x93, 0x48, + 0xe2, 0x93, 0x48, + 0xd9, 0x96, 0x46, + 0xdb, 0x96, 0x46, + 0xe8, 0x93, 0x49, + 0xdc, 0x96, 0x48, + 0xe7, 0x93, 0x4a, + 0xd9, 0x99, 0x44, + 0xdf, 0x96, 0x48, + 0xe2, 0x95, 0x49, + 0xe5, 0x94, 0x4b, + 0xff, 0x8f, 0x4c, + 0xf4, 0x94, 0x48, + 0xdc, 0x99, 0x47, + 0xdf, 0x97, 0x4a, + 0xe3, 0x96, 0x4b, + 0xe7, 0x95, 0x4c, + 0xe5, 0x96, 0x4b, + 0xda, 0x9b, 0x47, + 0xde, 0x9a, 0x48, + 0xe0, 0x99, 0x4a, + 0xe6, 0x97, 0x4c, + 0xe4, 0x98, 0x4b, + 0xdf, 0x98, 0x4e, + 0xe3, 0x99, 0x4b, + 0xdc, 0x9c, 0x48, + 0xde, 0x9b, 0x4a, + 0xd4, 0x95, 0x5b, + 0xe1, 0x9b, 0x4b, + 0xde, 0x9d, 0x49, + 0xe4, 0x9a, 0x4d, + 0xdf, 0x9d, 0x4b, + 0xf3, 0x97, 0x51, + 0xe1, 0x9d, 0x4c, + 0xe6, 0x9a, 0x57, + 0xfa, 0x9d, 0x57, + 0xde, 0x9d, 0x64, + 0xf6, 0x9c, 0x63, + 0xf9, 0xa7, 0x63, + 0xe6, 0xa6, 0x70, + 0xf7, 0xaa, 0x6c, + 0xef, 0xaa, 0x74, + 0xff, 0xb1, 0x7e, + 0xe1, 0xb3, 0x8a, + 0xfb, 0xb7, 0x79, + 0xf6, 0xb4, 0x84, + 0xff, 0xb3, 0x86, + 0xec, 0xb6, 0x89, + 0xff, 0xbe, 0x86, + 0xf4, 0xbd, 0x93, + 0xff, 0xc2, 0x92, + 0xed, 0xc3, 0xa0, + 0xf9, 0xc9, 0xa2, + 0xf4, 0xce, 0xaf, + 0xf8, 0xd4, 0xb6, + 0xf3, 0xd7, 0xc0, + 0xfa, 0xdb, 0xc3, + 0xf8, 0xdf, 0xcb, + 0xfc, 0xe6, 0xd7, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x04, 0x01, 0xf9, 0xfb, 0xfd, 0xfe, 0xfe, 0xfc, 0xfa, 0x07, + 0xff, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0xf6, 0xfb, 0xfe, 0xfe, 0x02, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, + 0xfd, 0xc1, 0xfd, 0x7f, 0xf9, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0xf9, 0xfe, 0x00, 0xfe, 0xfc, + 0xf8, 0xee, 0xea, 0xd5, 0xc9, 0xc9, 0x00, 0xc9, 0xd5, 0xe7, 0xee, 0xf6, + 0xfc, 0xfe, 0xfe, 0x7f, 0xfb, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x06, 0xf6, 0xfc, 0xfd, 0x01, 0xfa, 0xee, + 0xd5, 0xc9, 0xd5, 0xd5, 0xd5, 0xe9, 0x00, 0xd5, 0xd5, 0xcb, 0xc9, 0xc9, + 0xec, 0xf9, 0xfe, 0x3f, 0xfe, 0xfa, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0xfb, 0xfc, 0x03, 0xfb, 0xee, + 0xc9, 0xd5, 0xd5, 0xd5, 0xe9, 0xd2, 0x40, 0xcb, 0xe9, 0xcb, 0xc3, 0xe7, + 0xfa, 0xfe, 0xfe, 0xff, 0x05, 0xcd, 0x97, 0x4f, 0x07, 0x07, 0x07, 0x07, + 0xf0, 0x07, 0x07, 0x07, 0x05, 0xfc, 0xfc, 0xf4, 0xcf, 0x01, 0xcf, 0xd5, + 0xd5, 0xd5, 0xd5, 0xd5, 0xda, 0xd3, 0x08, 0xcf, 0xcb, 0xcb, 0xcb, 0xe9, + 0xc3, 0xee, 0xfc, 0x3f, 0xfe, 0xf6, 0x02, 0xe2, 0xc6, 0x87, 0x3f, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0xfc, 0xfb, + 0xec, 0xcb, 0xcf, 0xd5, 0xd5, 0xd5, 0x02, 0xd5, 0xd5, 0xda, 0xda, 0xda, + 0xda, 0xbb, 0xcf, 0x00, 0xcf, 0xcf, 0xcb, 0xcb, 0xc3, 0xc3, 0xe7, 0xfa, + 0x07, 0xfd, 0xf9, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x02, 0xfb, 0xfb, 0xe7, 0xc3, + 0xcf, 0xcf, 0xcf, 0x06, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xe9, 0xd1, 0xd6, + 0x40, 0xd6, 0x81, 0xcf, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0xf8, 0xfd, + 0xf6, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x07, 0x00, 0x00, 0xfa, 0xfb, 0xe7, 0xce, 0xce, + 0x00, 0xce, 0xd4, 0xd4, 0xdb, 0xda, 0xdb, 0xdb, 0xdb, 0x80, 0xe9, 0xdb, + 0xda, 0xd6, 0xdb, 0xdb, 0xd4, 0xce, 0x00, 0xcf, 0xce, 0xc6, 0xc6, 0xc0, + 0xc0, 0xc0, 0xc0, 0x07, 0xfa, 0xfc, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0xf9, + 0xfb, 0xec, 0xc6, 0xce, 0xce, 0xd4, 0x00, 0xd4, 0xd4, 0xdd, 0xdd, 0xdd, + 0xe3, 0xe3, 0xe3, 0x88, 0xe9, 0xe3, 0xdd, 0xdd, 0x89, 0xce, 0xce, 0xc6, + 0x00, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xdc, 0xfc, 0xfc, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x06, 0xec, 0xfa, 0x00, 0xf6, 0xc0, 0xc6, 0xce, 0xce, 0xce, 0xd4, 0xd4, + 0x04, 0xdd, 0xdd, 0xe3, 0xe3, 0xe3, 0xe9, 0xe3, 0xdd, 0x00, 0xe3, 0xdd, + 0xdd, 0xdd, 0xd4, 0xd4, 0xce, 0xce, 0x00, 0xc6, 0xc6, 0xc0, 0xc0, 0xbb, + 0xbb, 0xec, 0xfc, 0x0c, 0xf9, 0x00, 0x00, 0x00, 0xe9, 0xd2, 0xfb, 0xfe, + 0x07, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0x37, 0x77, 0xf8, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0x00, 0x00, 0xfa, 0x00, 0xfa, 0xdc, 0xc5, 0xc5, 0xc5, + 0xce, 0xd3, 0xd3, 0x00, 0xd9, 0xd9, 0xe1, 0xe1, 0xe3, 0xe1, 0xe1, 0xe6, + 0x41, 0xe1, 0xca, 0xdd, 0xd9, 0xd9, 0xd3, 0xce, 0x41, 0x00, 0xbb, 0xbb, + 0xbb, 0xbb, 0xb1, 0xf8, 0xfc, 0x00, 0x20, 0x00, 0x00, 0xe9, 0x00, 0x00, + 0xfe, 0xfc, 0xf4, 0x00, 0xec, 0xe7, 0xcb, 0xd5, 0xe7, 0xee, 0xf6, 0xfe, + 0x7f, 0xfe, 0x66, 0x26, 0x87, 0x3f, 0x07, 0x07, 0x07, 0x80, 0x07, 0xec, + 0xf8, 0xec, 0xbf, 0xc5, 0xc5, 0xcd, 0x00, 0xcd, 0xcd, 0xd3, 0xd9, 0xd9, + 0xd9, 0xe1, 0xe1, 0x00, 0xe6, 0xe6, 0xe1, 0xe6, 0xe1, 0xe1, 0xe1, 0xe1, + 0x80, 0x99, 0xd9, 0xcd, 0xcd, 0xc5, 0xc5, 0xbb, 0xbb, 0x00, 0xb8, 0xbb, + 0xb5, 0xe7, 0xfc, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfa, + 0xec, 0xc9, 0xcb, 0x00, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xcb, 0xc9, 0xc9, + 0x1f, 0xee, 0xfc, 0xfd, 0x5b, 0x33, 0xb7, 0x6f, 0x27, 0xe0, 0x07, 0x07, + 0x03, 0xe7, 0xeb, 0xed, 0xed, 0xed, 0x00, 0xec, 0xe0, 0xbc, 0xf0, 0xf8, + 0xdc, 0xc5, 0xc5, 0x00, 0xc5, 0xc5, 0xcd, 0xd3, 0xd3, 0xd9, 0xdf, 0xe1, + 0x00, 0xe1, 0xe4, 0xe1, 0xe4, 0xe6, 0xe6, 0xe4, 0xe4, 0x00, 0xe1, 0xe1, + 0xe1, 0xdf, 0xd9, 0xd3, 0xd3, 0xcd, 0x00, 0xc5, 0xc5, 0xbf, 0xbf, 0xb8, + 0xb5, 0xb5, 0xb1, 0x00, 0xf8, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xee, + 0x08, 0xc9, 0xd5, 0xd5, 0xd5, 0xe9, 0xd5, 0xd5, 0xcb, 0x03, 0xd5, 0xcb, + 0xcb, 0xc3, 0xf4, 0xfe, 0x52, 0x32, 0xfc, 0xc6, 0x87, 0x3f, 0x07, 0x07, + 0x01, 0xe7, 0xee, 0x06, 0xf4, 0xf6, 0xf8, 0xf8, 0xf8, 0xe9, 0xd1, 0xf0, + 0x10, 0xca, 0xca, 0xca, 0xe9, 0xd3, 0xd3, 0xdf, 0xdf, 0x06, 0xdf, 0xdf, + 0xe4, 0xe4, 0xe4, 0xe9, 0xd1, 0xdf, 0x08, 0xdf, 0xd8, 0xdf, 0xd3, 0x31, + 0xbf, 0xbf, 0xbf, 0x00, 0xb8, 0xb8, 0xb8, 0xe9, 0xfb, 0x00, 0x00, 0x00, + 0x00, 0xfc, 0xe7, 0xcf, 0xcf, 0xd6, 0xda, 0xda, 0xda, 0x80, 0xe9, 0xd6, + 0xd5, 0xcf, 0xcf, 0xc3, 0xc3, 0xc3, 0x3f, 0xec, 0xfe, 0x49, 0x31, 0xd4, + 0xa7, 0x5f, 0x17, 0xc0, 0x07, 0x02, 0xed, 0xf4, 0xf4, 0xf6, 0xf6, 0xf4, + 0x00, 0xee, 0xec, 0xe9, 0xe9, 0xec, 0xec, 0xf4, 0xf4, 0x00, 0xf4, 0xdc, + 0xdc, 0xca, 0xca, 0xca, 0xca, 0xca, 0x00, 0xd2, 0xca, 0xd8, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0x04, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xb2, 0xd8, 0xd2, + 0x00, 0xd3, 0xcd, 0xcd, 0xcd, 0xc5, 0xc5, 0xc5, 0xbf, 0x00, 0xc5, 0xbf, + 0xc5, 0xfa, 0xfa, 0x00, 0xfc, 0xe7, 0x01, 0xd4, 0xd4, 0xd4, 0xdb, 0xda, + 0xe3, 0xda, 0xe9, 0x00, 0xdb, 0xda, 0xd4, 0xd4, 0xcf, 0xc6, 0xc6, 0xc0, + 0x07, 0xec, 0xfe, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xe0, 0x5f, 0x17, + 0x07, 0x00, 0xea, 0xf2, 0xf4, 0xf4, 0x00, 0xee, 0xe7, 0xcf, 0xc3, 0xc3, + 0xc3, 0xc0, 0xc0, 0x00, 0xc0, 0xbb, 0xb8, 0xb5, 0xb5, 0xbf, 0xca, 0xca, + 0x00, 0xc7, 0xc8, 0xc8, 0xc8, 0xca, 0xd2, 0xd2, 0xd2, 0x00, 0xde, 0xde, + 0xdf, 0xde, 0xde, 0xde, 0xe2, 0xe2, 0x00, 0xe2, 0xdf, 0xdf, 0xdf, 0xd8, + 0xd8, 0xdf, 0xd8, 0x00, 0xd9, 0xd8, 0xd3, 0xca, 0xca, 0xbf, 0xca, 0xc5, + 0x00, 0xbf, 0xbf, 0xf4, 0xf4, 0xfb, 0xec, 0xcf, 0xd6, 0x00, 0xd4, 0xd4, + 0xdd, 0xdb, 0xe3, 0xe3, 0xe3, 0xe3, 0x00, 0xe3, 0xdb, 0xdb, 0xd4, 0xd4, + 0xce, 0xc6, 0xc0, 0x01, 0xc0, 0xbb, 0xf4, 0xfb, 0x00, 0x00, 0x00, 0xe9, + 0xf8, 0xd4, 0xa7, 0x5f, 0x17, 0x05, 0xad, 0xec, 0xee, 0x00, 0xee, 0xec, + 0xcf, 0xc3, 0xc3, 0xc0, 0xc0, 0xc0, 0x00, 0xc0, 0xc0, 0xbb, 0xbb, 0xb8, + 0xb8, 0xb5, 0xb4, 0x00, 0xb4, 0xb4, 0xc1, 0xc1, 0xc7, 0xc7, 0xc7, 0xc8, + 0x01, 0xd2, 0xd7, 0xd7, 0xd7, 0xde, 0xde, 0xde, 0xe9, 0x80, 0xd3, 0xe2, + 0xe2, 0xdf, 0xdf, 0xd8, 0xd2, 0xc8, 0x00, 0xca, 0xc8, 0xc8, 0xca, 0xca, + 0xca, 0xdc, 0xec, 0x00, 0xf8, 0xf6, 0xce, 0xdb, 0xdd, 0xdb, 0xdd, 0xdd, + 0x00, 0xe3, 0xe1, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe1, 0x00, 0xdd, 0xdd, + 0xce, 0xc6, 0xc5, 0xc0, 0xbb, 0xbb, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x04, 0xe7, 0xec, 0xee, 0xec, 0xc3, 0xc0, + 0x20, 0xc0, 0xc0, 0xe9, 0xbb, 0xbb, 0xb8, 0xb8, 0xb8, 0x00, 0xb5, 0xb4, + 0xb4, 0xb4, 0xb4, 0xc1, 0xc2, 0xc1, 0x00, 0xc2, 0xc7, 0xcc, 0xc7, 0xcc, + 0xcc, 0xd7, 0xd7, 0x60, 0xd7, 0xe9, 0xd3, 0xde, 0xe2, 0xe2, 0xde, 0xde, + 0x00, 0xde, 0xd2, 0xd2, 0xc7, 0xc8, 0xc6, 0xce, 0xda, 0x00, 0xda, 0xe7, + 0xe7, 0xe9, 0xfa, 0xe7, 0xd4, 0xd4, 0x00, 0xdd, 0xe1, 0xe3, 0xe3, 0xe1, + 0xe6, 0xe6, 0xe6, 0x80, 0xe9, 0xd9, 0xd9, 0xd9, 0xcd, 0xcd, 0xc5, 0xbf, + 0x01, 0xb8, 0xb5, 0xec, 0xfb, 0x00, 0x00, 0x00, 0xe9, 0xf8, 0xd4, 0xa7, + 0x5f, 0x17, 0x02, 0xe7, 0xec, 0xec, 0x08, 0xe7, 0xbb, 0xbb, 0xbb, 0xe9, + 0xbb, 0xb8, 0xb5, 0x02, 0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xe9, 0xb4, + 0x00, 0xbd, 0xc2, 0xc2, 0xc2, 0xc4, 0xc7, 0xcc, 0xcc, 0x02, 0xcc, 0xcc, + 0xcc, 0xd7, 0xd7, 0xd7, 0xe9, 0xd7, 0x08, 0xde, 0xde, 0xde, 0xde, 0xa9, + 0xcc, 0xcd, 0xe7, 0x00, 0xee, 0xf4, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf8, + 0x00, 0xf4, 0xd3, 0xd4, 0xd3, 0xd9, 0xe1, 0xe6, 0xe6, 0x40, 0xe6, 0xe9, + 0xe6, 0xe6, 0xe4, 0xe1, 0xdf, 0xd9, 0x00, 0xd3, 0xcd, 0xc5, 0xbf, 0xb5, + 0xb5, 0xb1, 0xfb, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x80, 0x01, 0xdc, 0xe9, 0xe9, 0xbb, 0xb1, 0xb1, 0xb5, 0x20, 0xb5, 0xb5, + 0xe9, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0x00, 0xb4, 0xb2, 0xb2, 0xb2, 0xb2, + 0xb7, 0xb7, 0xbd, 0x03, 0xbd, 0xc2, 0xc2, 0xc4, 0xc4, 0xc4, 0xe9, 0xd4, + 0x08, 0xcc, 0xd7, 0xd7, 0xd7, 0xe9, 0xd7, 0xc8, 0xe7, 0x00, 0xf2, 0xf6, + 0xf2, 0xec, 0xe7, 0xda, 0xd5, 0xe3, 0x00, 0xe7, 0xe9, 0xdc, 0xdc, 0xd3, + 0xd3, 0xd3, 0xd8, 0x00, 0xe1, 0xe6, 0xe6, 0xe6, 0xe4, 0xe2, 0xe2, 0xdf, + 0x00, 0xdf, 0xdf, 0xd8, 0xd2, 0xca, 0xc8, 0xbf, 0xb8, 0x00, 0xb5, 0xb1, + 0xab, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x00, 0x9b, 0xe9, 0x06, 0xe9, 0xb5, 0xb1, 0xb1, 0xb1, 0xe9, 0xd2, 0xb4, + 0x04, 0xb4, 0xb4, 0xb2, 0xb2, 0xb2, 0xe9, 0xb3, 0xb3, 0x00, 0xbd, 0xbd, + 0xbd, 0xbd, 0xbd, 0xc2, 0xc4, 0xc2, 0x10, 0xc4, 0xc4, 0xc4, 0xe9, 0xc4, + 0xc4, 0xcc, 0xcc, 0x20, 0xd7, 0xcc, 0xe1, 0xcd, 0xec, 0xf2, 0xec, 0xd5, + 0x00, 0xc3, 0xc3, 0xc3, 0xc6, 0xc6, 0xc0, 0xc5, 0xbf, 0x00, 0xbf, 0xc8, + 0xc8, 0xc8, 0xd2, 0xd8, 0xd8, 0xe2, 0x00, 0xe4, 0xe4, 0xe4, 0xde, 0xde, + 0xde, 0xde, 0xde, 0x00, 0xd2, 0xd2, 0xc8, 0xc7, 0xc1, 0xb4, 0xb4, 0xae, + 0x03, 0xab, 0xe9, 0xf8, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xe0, 0xa7, 0x5f, + 0x17, 0x00, 0xe9, 0xe9, 0xb5, 0xab, 0x20, 0xab, 0xab, 0xe9, 0xab, 0xab, + 0xae, 0xae, 0xae, 0x00, 0xb2, 0xae, 0xb2, 0xb2, 0xb2, 0xb2, 0xb0, 0xb0, + 0x08, 0xb0, 0xb7, 0xb7, 0xb7, 0xe9, 0xbd, 0xbd, 0xbd, 0xc0, 0xe9, 0xd3, + 0xc2, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x00, 0xcc, 0xcd, 0xec, 0xec, 0xcf, + 0xc0, 0xc3, 0xc0, 0x00, 0xc6, 0xc0, 0xc0, 0xbf, 0xb8, 0xb8, 0xb8, 0xc1, + 0x00, 0xc1, 0xc8, 0xd2, 0xd2, 0xd2, 0xd2, 0xde, 0xde, 0x00, 0xe2, 0xe2, + 0xe2, 0xd7, 0xd7, 0xd7, 0xd7, 0xcc, 0x00, 0xcc, 0xc7, 0xc7, 0xc1, 0xb4, + 0xb4, 0xab, 0xab, 0x07, 0xbf, 0xf8, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xc0, 0x5f, 0x17, 0xdc, 0xe0, 0xb5, 0xa4, 0xa4, 0xa4, 0x80, 0xe9, 0xa4, + 0xa4, 0xa9, 0xab, 0xa9, 0xa9, 0xb2, 0x00, 0xa9, 0xa9, 0xac, 0xac, 0xaf, + 0xac, 0xaf, 0xb0, 0x00, 0xaf, 0xb0, 0xb6, 0xb7, 0xb7, 0xb6, 0xb6, 0xb6, + 0xc4, 0xe9, 0xd3, 0xbd, 0xbd, 0xc2, 0xe9, 0xbd, 0xbf, 0x04, 0xec, 0xe7, + 0xbb, 0xbb, 0xbb, 0xe9, 0xb8, 0xb8, 0x00, 0xb5, 0xb4, 0xb4, 0xb4, 0xc1, + 0xc1, 0xc1, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xd7, 0xd7, 0xd7, 0xd7, 0xde, + 0x40, 0xd7, 0xb2, 0xc4, 0xc2, 0xc2, 0xbd, 0xb2, 0xb2, 0x01, 0xa9, 0xa4, + 0xa4, 0xf8, 0x00, 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, 0x5f, 0x17, 0xe0, + 0xca, 0x9f, 0x9f, 0x60, 0x9f, 0xe9, 0xd1, 0xa4, 0xa4, 0xa9, 0xa9, 0xa9, + 0x00, 0xa9, 0xac, 0xac, 0xa8, 0xa8, 0xa8, 0xa8, 0xac, 0x06, 0xaf, 0xaf, + 0xaf, 0xaf, 0xb0, 0xda, 0xba, 0xaf, 0x04, 0xb0, 0xb6, 0xb6, 0xb7, 0xb7, + 0xe9, 0xb4, 0xe9, 0x00, 0xe7, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb5, 0xb5, + 0x00, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb3, 0xb4, 0xc2, 0x00, 0xc2, 0xc2, + 0xc4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80, 0xd1, 0xc4, 0xc4, 0xc2, 0xbd, + 0xbd, 0xbd, 0xbd, 0x00, 0xb7, 0xb2, 0xa9, 0xa4, 0x9f, 0xa4, 0xf0, 0x00, + 0x00, 0xec, 0xf0, 0xf8, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, + 0xa7, 0x5f, 0x00, 0x00, 0xbf, 0xe0, 0x08, 0xa4, 0x9a, 0x9a, 0x9a, 0xe9, + 0x9a, 0x9f, 0x9f, 0x00, 0x9f, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa7, 0xa7, + 0x02, 0xa6, 0xa6, 0xa8, 0xac, 0xac, 0xac, 0xe9, 0xac, 0x60, 0xaf, 0xc5, + 0xb1, 0xb0, 0xb7, 0xb0, 0xb0, 0xb0, 0x02, 0xb6, 0xdc, 0xe7, 0xab, 0xab, + 0xab, 0xe9, 0xae, 0x00, 0xb4, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb3, 0xb3, + 0x18, 0xbd, 0xbd, 0xbd, 0xe9, 0xd3, 0xc2, 0xc2, 0xb6, 0x00, 0xb6, 0xb6, + 0xb6, 0xb7, 0xb0, 0xb0, 0xac, 0xa7, 0x00, 0x9f, 0x9f, 0x9a, 0xe9, 0xec, + 0xe9, 0xe0, 0xe0, 0x00, 0xad, 0xe0, 0xe9, 0xf0, 0xf0, 0x00, 0x00, 0x00, + 0xf0, 0xe9, 0xd4, 0xa7, 0x5e, 0xad, 0xad, 0x92, 0x92, 0x40, 0x92, 0xe9, + 0x92, 0x98, 0x98, 0x9a, 0x9a, 0xa1, 0x0b, 0xa1, 0xa6, 0xa6, 0xa6, 0xe9, + 0xa5, 0xcc, 0x9c, 0x80, 0x6c, 0xa8, 0xac, 0xa7, 0xac, 0xac, 0xa8, 0xa9, + 0x00, 0xe0, 0xab, 0x9f, 0x9f, 0x9f, 0x9f, 0xa4, 0xa9, 0x00, 0xa9, 0xaf, + 0xb2, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x05, 0xb6, 0xb3, 0xb6, 0xb6, 0xb6, + 0xe9, 0xb6, 0xba, 0x00, 0xb7, 0xb6, 0xaf, 0xb0, 0xb0, 0xaf, 0xac, 0xa8, + 0x00, 0xa7, 0xa6, 0xa1, 0x9a, 0x9a, 0x98, 0x92, 0x92, 0x40, 0x92, 0xe9, + 0x92, 0x8e, 0x98, 0xe0, 0xec, 0xec, 0x1e, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x5a, 0x9b, 0x04, 0xad, 0x98, 0x8e, 0x8e, 0x8e, 0xe9, 0x8e, 0x92, + 0x00, 0x93, 0x97, 0x97, 0x98, 0xa0, 0xa0, 0xa0, 0xa3, 0x02, 0xa5, 0xa1, + 0xa5, 0xa5, 0xa3, 0xa1, 0xd2, 0xa5, 0x11, 0xa5, 0xa5, 0xa1, 0x9a, 0xa0, + 0xa3, 0xa0, 0x9b, 0x00, 0xa6, 0xa6, 0xae, 0xae, 0x9a, 0x9a, 0x9a, 0x9a, + 0x00, 0x9a, 0xa1, 0xa6, 0xa6, 0xa8, 0xa8, 0xac, 0xaf, 0x01, 0xa8, 0xaf, + 0xac, 0xac, 0xaf, 0xaf, 0xaf, 0xe9, 0x18, 0xa8, 0xa8, 0xa8, 0xe9, 0xc3, + 0xa6, 0xa6, 0xa6, 0x00, 0xa1, 0xa0, 0x98, 0x98, 0x98, 0x97, 0x98, 0x92, + 0x00, 0x92, 0x92, 0x92, 0x92, 0x8e, 0x8e, 0x8e, 0x8e, 0x03, 0x8e, 0xe0, + 0xec, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x59, 0xae, 0xad, 0x8e, + 0x8b, 0x8b, 0x8b, 0x80, 0xe9, 0x8b, 0x8e, 0x93, 0x97, 0x97, 0x97, 0x98, + 0x08, 0x9e, 0xa0, 0xa0, 0xa0, 0xe9, 0xa0, 0x9e, 0x9e, 0x70, 0xa0, 0xae, + 0x75, 0x3b, 0xad, 0x9a, 0x92, 0x92, 0x00, 0x92, 0x93, 0x97, 0x98, 0xa0, + 0xa1, 0xa5, 0xa5, 0x1c, 0xa6, 0xa6, 0xa5, 0xd9, 0xe1, 0xc9, 0xa5, 0xa1, + 0x20, 0xa1, 0xa0, 0x61, 0xa6, 0xa3, 0xa0, 0xa0, 0xa0, 0x01, 0xa0, 0x9e, + 0x9e, 0x9e, 0x97, 0x97, 0x97, 0xe9, 0x00, 0x93, 0x93, 0x93, 0x93, 0x93, + 0x8b, 0x8b, 0x8b, 0x01, 0x8b, 0x83, 0x9b, 0xe9, 0x00, 0x00, 0x00, 0xe9, + 0xc0, 0xd4, 0xa7, 0x00, 0x00, 0xad, 0x9b, 0x84, 0x84, 0x00, 0x84, 0x84, + 0x83, 0x84, 0x84, 0x88, 0x8c, 0x8b, 0x03, 0x90, 0x93, 0x95, 0x96, 0x96, + 0x96, 0xe9, 0xd4, 0x1c, 0x9e, 0x9e, 0x9e, 0xe9, 0xd3, 0x4b, 0x9c, 0x97, + 0x00, 0x9c, 0x9b, 0xad, 0x8e, 0x8b, 0x8b, 0x8b, 0x8b, 0x00, 0x93, 0x93, + 0x96, 0x9e, 0xa0, 0xa0, 0xa3, 0xa3, 0x08, 0xa5, 0xa3, 0xa3, 0xa0, 0x03, + 0x9e, 0x9c, 0x9e, 0x40, 0x96, 0xbd, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, + 0x01, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94, 0x93, 0xc9, 0x00, 0x90, 0x90, + 0x8b, 0x8c, 0x84, 0x83, 0x83, 0x91, 0x0e, 0xe0, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x00, 0x00, 0x9b, 0x8b, 0x83, 0x7e, 0x7f, 0x7e, 0x83, 0x83, + 0x00, 0x83, 0x84, 0x84, 0x8c, 0x90, 0x90, 0x90, 0x94, 0x02, 0x95, 0x95, + 0x95, 0x95, 0x96, 0x96, 0xdb, 0x96, 0x80, 0xe9, 0x95, 0x93, 0x95, 0x95, + 0x94, 0x95, 0x94, 0x00, 0x95, 0x94, 0x94, 0x90, 0x94, 0x93, 0x93, 0x95, + 0x00, 0x9b, 0x9b, 0x84, 0x84, 0x84, 0x83, 0x84, 0x8c, 0x20, 0x90, 0x94, + 0x01, 0x9c, 0x9c, 0x96, 0x96, 0x96, 0x12, 0x96, 0x96, 0x95, 0x1a, 0x90, + 0x90, 0xe9, 0x90, 0x0c, 0x90, 0x93, 0x95, 0x90, 0xa7, 0x66, 0x8d, 0x8c, + 0x00, 0x88, 0x84, 0x83, 0x7e, 0x78, 0x91, 0xe0, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa6, 0x76, 0x9b, 0x7e, 0x00, 0x78, 0x78, 0x78, 0x7e, 0x78, + 0x7e, 0x7e, 0x7f, 0x00, 0x85, 0x88, 0x88, 0x89, 0x8d, 0x8d, 0x8f, 0x8f, + 0x00, 0x94, 0x94, 0x8f, 0x8f, 0x8f, 0x90, 0x94, 0x90, 0x00, 0x94, 0x94, + 0x8d, 0x8d, 0x8d, 0x89, 0x89, 0x89, 0x02, 0x89, 0x88, 0x89, 0x88, 0x88, + 0x88, 0x1a, 0x8c, 0x00, 0x8d, 0x91, 0x91, 0x7e, 0x7e, 0x7e, 0x7e, 0x83, + 0x08, 0x84, 0x8c, 0x8d, 0x8d, 0x01, 0x94, 0x94, 0x90, 0x08, 0x90, 0x8d, + 0x8d, 0x8c, 0x12, 0x83, 0x85, 0x83, 0x06, 0x82, 0x83, 0x83, 0x83, 0x8c, + 0x9b, 0x79, 0x89, 0x00, 0x89, 0x8c, 0x8d, 0x89, 0x8d, 0x8d, 0x8d, 0x8f, + 0x00, 0x8f, 0x8d, 0x8d, 0x88, 0x88, 0x82, 0x7e, 0x7e, 0x01, 0x78, 0x74, + 0xad, 0xad, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa5, 0x87, 0x91, 0x78, + 0x79, 0x79, 0x79, 0x80, 0xe9, 0x79, 0x7d, 0x82, 0x82, 0x85, 0x85, 0x85, + 0x08, 0x88, 0x89, 0x89, 0x89, 0xe9, 0x8d, 0x8d, 0x8f, 0x00, 0x8d, 0x89, + 0x88, 0x88, 0x85, 0x82, 0x82, 0x82, 0xe0, 0xe9, 0xd4, 0x19, 0x88, 0x91, + 0x7e, 0x78, 0x78, 0x00, 0x78, 0x79, 0x7e, 0x82, 0x82, 0x88, 0x89, 0x89, + 0x00, 0x89, 0x89, 0x89, 0x88, 0x88, 0x82, 0x82, 0x7e, 0x01, 0x7d, 0x7e, + 0x7e, 0x7e, 0x79, 0x79, 0x79, 0xe9, 0x00, 0x79, 0x78, 0x7e, 0x82, 0x7f, + 0x7d, 0x81, 0x82, 0x84, 0xe9, 0x82, 0x85, 0x85, 0x85, 0xe9, 0x89, 0x89, + 0x00, 0x89, 0x89, 0x89, 0x85, 0x82, 0x82, 0x7d, 0x79, 0x01, 0x77, 0x70, + 0x7b, 0xbc, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa5, 0x86, 0x86, 0x70, + 0x70, 0x74, 0x70, 0x00, 0x74, 0x74, 0x77, 0x77, 0x79, 0x7d, 0x7d, 0x81, + 0x00, 0x82, 0x82, 0x85, 0x82, 0x85, 0x85, 0x85, 0x85, 0x00, 0x85, 0x88, + 0x88, 0x85, 0x7f, 0x82, 0x7e, 0x7d, 0x02, 0x7d, 0x7d, 0x7d, 0x79, 0x79, + 0x79, 0x31, 0x7d, 0x80, 0x11, 0x7e, 0x7f, 0x7f, 0x81, 0x86, 0x7b, 0x70, + 0x08, 0x70, 0x74, 0x74, 0x77, 0x71, 0x81, 0x82, 0x82, 0x40, 0x82, 0x0b, + 0x74, 0x74, 0x74, 0x70, 0x72, 0x74, 0x10, 0x72, 0x72, 0x72, 0xe9, 0x72, + 0x74, 0x79, 0x75, 0x00, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x7c, 0x7d, + 0x01, 0x7d, 0x81, 0x81, 0x81, 0x85, 0x85, 0x85, 0xe9, 0x80, 0xb9, 0x7c, + 0x75, 0x74, 0x70, 0x6a, 0x87, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa5, + 0x87, 0x87, 0x70, 0x00, 0x70, 0x70, 0x6d, 0x71, 0x71, 0x72, 0x74, 0x77, + 0x00, 0x75, 0x75, 0x7c, 0x7c, 0x7d, 0x7d, 0x81, 0x81, 0x00, 0x7d, 0x81, + 0x82, 0x82, 0x82, 0x7d, 0x79, 0x79, 0x00, 0x79, 0x77, 0x77, 0x74, 0x74, + 0x74, 0x74, 0x75, 0x38, 0x75, 0x75, 0xe9, 0xd2, 0x69, 0x7b, 0x71, 0x69, + 0x08, 0x69, 0x69, 0x6d, 0x72, 0x66, 0x72, 0x72, 0x6e, 0x40, 0x6d, 0x79, + 0x69, 0x6a, 0x6a, 0x6a, 0x66, 0x66, 0x40, 0x66, 0xe9, 0x6a, 0x6e, 0x6d, + 0x6d, 0x6e, 0x6e, 0x08, 0x6e, 0x6e, 0x72, 0x72, 0x01, 0x7c, 0x7c, 0x7c, + 0x00, 0x7c, 0x81, 0x81, 0x81, 0x81, 0x81, 0x7c, 0x7c, 0x00, 0x75, 0x75, + 0x6e, 0x6a, 0x66, 0x71, 0x9b, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa4, + 0x76, 0x7b, 0x6a, 0x00, 0x6a, 0x6a, 0x6a, 0x6d, 0x6d, 0x6d, 0x6e, 0x72, + 0x04, 0x72, 0x72, 0x75, 0x75, 0x75, 0xe9, 0x79, 0x7c, 0x20, 0x7c, 0x79, + 0xb1, 0x72, 0x72, 0x6e, 0x6e, 0x6e, 0x90, 0xe9, 0x6e, 0x6d, 0xc5, 0x72, + 0x75, 0x74, 0x74, 0x00, 0x74, 0x71, 0x5f, 0x60, 0x62, 0x66, 0x66, 0x69, + 0x00, 0x69, 0x6d, 0x69, 0x69, 0x6e, 0x69, 0x69, 0x66, 0x01, 0x66, 0x62, + 0x62, 0x60, 0x5f, 0x5f, 0x5f, 0xe9, 0x80, 0xd4, 0x5f, 0x62, 0x62, 0x62, + 0x62, 0x62, 0x66, 0x00, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x6e, 0x6e, 0x73, + 0x00, 0x73, 0x75, 0x75, 0x7c, 0x7c, 0x7c, 0x7c, 0x75, 0x00, 0x73, 0x73, + 0x6e, 0x6c, 0x66, 0x5f, 0x60, 0x87, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa4, 0x51, 0x7b, 0x00, 0x62, 0x66, 0x66, 0x66, 0x66, 0x68, 0x68, 0x6a, + 0x00, 0x6d, 0x6d, 0x6e, 0x6e, 0x72, 0x72, 0x72, 0x72, 0x00, 0x72, 0x75, + 0x75, 0x75, 0x72, 0x6e, 0x6e, 0x69, 0x25, 0x69, 0x69, 0xe9, 0x69, 0x69, + 0x12, 0x66, 0xd1, 0x00, 0x69, 0x69, 0x6d, 0x6e, 0x6d, 0x70, 0x71, 0x67, + 0x00, 0x58, 0x58, 0x5f, 0x5f, 0x5f, 0x62, 0x62, 0x62, 0xa2, 0xe9, 0x62, + 0xb1, 0x58, 0x58, 0x58, 0xe9, 0x56, 0x62, 0x56, 0xda, 0xa3, 0x5c, 0x58, + 0x5c, 0x04, 0x66, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x73, 0x73, 0x73, + 0x80, 0xe9, 0x73, 0x6c, 0x6c, 0x66, 0x61, 0x5b, 0x56, 0x0e, 0x76, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x71, 0x00, 0x60, 0x60, 0x60, 0x62, 0x62, + 0x65, 0x65, 0x66, 0x02, 0x66, 0x66, 0x6c, 0x6d, 0x6d, 0x6d, 0xe9, 0x6e, + 0x11, 0x6e, 0x6c, 0x6c, 0x91, 0x62, 0x62, 0x62, 0xe9, 0x18, 0x62, 0x5f, + 0x5f, 0xe9, 0xd9, 0x62, 0x62, 0x66, 0x00, 0x68, 0x6a, 0x68, 0x6a, 0x67, + 0x54, 0x50, 0x53, 0x00, 0x55, 0x56, 0x58, 0x5b, 0x5b, 0x5b, 0x5b, 0x58, + 0x00, 0x56, 0x56, 0x55, 0x50, 0x50, 0x50, 0x4e, 0x4c, 0x23, 0x4c, 0x4c, + 0xd1, 0x4e, 0x4e, 0x4e, 0xc9, 0x81, 0x20, 0x55, 0x54, 0x01, 0x58, 0x5b, + 0x5b, 0x61, 0x5f, 0x01, 0x61, 0x64, 0x64, 0x64, 0x6c, 0x6c, 0x6c, 0xe9, + 0x00, 0x6c, 0x64, 0x64, 0x61, 0x5a, 0x55, 0x50, 0x67, 0x1c, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa5, 0x71, 0x5e, 0x00, 0x5c, 0x58, 0x5c, 0x5f, 0x5c, + 0x61, 0x62, 0x62, 0x00, 0x62, 0x65, 0x62, 0x65, 0x66, 0x65, 0x66, 0x66, + 0x20, 0x66, 0x66, 0xa1, 0x5f, 0x5f, 0x61, 0x5f, 0x5f, 0x01, 0x5f, 0x5f, + 0x5f, 0x58, 0x5f, 0x58, 0x5b, 0xd9, 0x80, 0xa3, 0x60, 0x60, 0x62, 0x5f, + 0x67, 0x54, 0x47, 0x02, 0x4a, 0x4a, 0x4c, 0x50, 0x50, 0x50, 0xe9, 0x4c, + 0x02, 0x4a, 0x4b, 0x47, 0x46, 0x46, 0x46, 0xe9, 0x46, 0x10, 0x47, 0x47, + 0x47, 0xe9, 0x46, 0x46, 0x49, 0x4a, 0x00, 0x47, 0x4b, 0x4c, 0x4c, 0x4c, + 0x4c, 0x4c, 0x50, 0x00, 0x50, 0x53, 0x53, 0x56, 0x5a, 0x5a, 0x5d, 0x64, + 0x20, 0x64, 0x64, 0xe9, 0x64, 0x5d, 0x5a, 0x5a, 0x53, 0x03, 0x50, 0x4a, + 0x67, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa5, 0x71, 0x5e, 0x55, 0x55, + 0x58, 0x58, 0x58, 0x00, 0x5b, 0x5b, 0x5c, 0x5c, 0x61, 0x61, 0x61, 0x61, + 0x01, 0x61, 0x5f, 0x62, 0x62, 0x5f, 0x5f, 0x5b, 0x71, 0x01, 0x58, 0x58, + 0x56, 0x58, 0x56, 0x56, 0x56, 0xe9, 0xc0, 0xd2, 0x7a, 0x5e, 0x5e, 0x5e, + 0x5c, 0x5e, 0x59, 0x02, 0x42, 0x42, 0x41, 0x46, 0x46, 0x46, 0xe9, 0x42, + 0x00, 0x42, 0x42, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x36, 0x0c, 0x36, 0x36, + 0x3d, 0x3d, 0x99, 0x39, 0x41, 0x41, 0x60, 0x41, 0xda, 0x03, 0x48, 0x48, + 0x4a, 0x4c, 0x52, 0x04, 0x57, 0x5a, 0x5d, 0x5d, 0x5d, 0xe9, 0x5a, 0x57, + 0x00, 0x4c, 0x4c, 0x49, 0x41, 0x59, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, + 0xa5, 0x51, 0x59, 0x4e, 0x4e, 0x50, 0x00, 0x55, 0x54, 0x55, 0x55, 0x55, + 0x55, 0x5a, 0x55, 0x00, 0x5a, 0x5a, 0x5a, 0x5a, 0x61, 0x5b, 0x5b, 0x56, + 0x11, 0x55, 0x53, 0x55, 0xe9, 0x50, 0x50, 0x50, 0xe9, 0xc0, 0xd4, 0xa1, + 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x00, 0x59, 0x45, 0x2e, 0x34, 0x39, + 0x3b, 0x3e, 0x3d, 0x00, 0x39, 0x3d, 0x35, 0x35, 0x34, 0x34, 0x31, 0x31, + 0x00, 0x31, 0x31, 0x31, 0x2c, 0x2c, 0x31, 0x38, 0x38, 0x00, 0x3d, 0x36, + 0x38, 0x38, 0x36, 0x36, 0x36, 0x36, 0x04, 0x3b, 0x3d, 0x3d, 0x3d, 0x3b, + 0xda, 0x41, 0x41, 0x00, 0x43, 0x41, 0x46, 0x48, 0x4c, 0x57, 0x57, 0x5d, + 0x00, 0x5d, 0x57, 0x57, 0x52, 0x52, 0x4a, 0x48, 0x42, 0x07, 0x3d, 0x59, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa6, 0x00, 0x59, 0x4b, 0x47, 0x47, 0x4c, + 0x4c, 0x4e, 0x50, 0x00, 0x50, 0x53, 0x53, 0x53, 0x53, 0x56, 0x56, 0x5a, + 0x40, 0x56, 0xc1, 0x50, 0x4a, 0x43, 0x3c, 0x3c, 0x3c, 0x00, 0x3c, 0x40, + 0x46, 0x4a, 0x4a, 0x4a, 0x4a, 0x4c, 0x04, 0x4c, 0x4c, 0x4c, 0x4c, 0x4b, + 0xd2, 0x4e, 0x4e, 0x00, 0x4e, 0x55, 0x50, 0x59, 0x38, 0x27, 0x27, 0x2a, + 0x20, 0x2a, 0x2a, 0xe9, 0x27, 0x25, 0x27, 0x21, 0x21, 0x40, 0x21, 0xe9, + 0x1d, 0x1d, 0x51, 0x38, 0x36, 0x32, 0x00, 0x32, 0x32, 0x32, 0x31, 0x32, + 0x31, 0x32, 0x31, 0x00, 0x31, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x35, + 0x00, 0x35, 0x3b, 0x3b, 0x40, 0x41, 0x43, 0x48, 0x4c, 0x00, 0x52, 0x52, + 0x52, 0x52, 0x48, 0x48, 0x43, 0x41, 0x03, 0x3b, 0x3e, 0x51, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa6, 0x59, 0x4f, 0x46, 0x46, 0x46, 0x47, 0x47, + 0x00, 0x47, 0x4b, 0x4c, 0x4c, 0x50, 0x50, 0x50, 0x53, 0x00, 0x53, 0x4c, + 0x53, 0x49, 0x58, 0x8e, 0xe9, 0xf6, 0x00, 0xfb, 0xfe, 0xfd, 0xfb, 0xf4, + 0xdc, 0x78, 0x4a, 0x18, 0x41, 0x47, 0x47, 0x12, 0xe9, 0x47, 0x47, 0x4b, + 0x00, 0x4b, 0x4b, 0x49, 0x4c, 0x4e, 0x51, 0x2c, 0x1b, 0x00, 0x1f, 0x1f, + 0x1d, 0x1d, 0x1d, 0x1b, 0x1b, 0x1a, 0x00, 0x1a, 0x1a, 0x1a, 0x16, 0x1a, + 0x16, 0x16, 0x14, 0x01, 0x76, 0xbc, 0xbc, 0x32, 0x2b, 0x2b, 0x2b, 0xe9, + 0x80, 0xd1, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2a, 0x2a, 0x00, 0x2a, 0x2d, + 0x2d, 0x2e, 0x35, 0x3b, 0x3b, 0x40, 0x00, 0x40, 0x43, 0x48, 0x48, 0x48, + 0x43, 0x40, 0x3b, 0x03, 0x35, 0x2e, 0x38, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0x80, 0xa7, 0x00, 0x59, 0x3d, 0x3d, 0x3d, 0x42, 0x42, 0x00, 0x42, 0x46, + 0x46, 0x46, 0x49, 0x49, 0x49, 0x4c, 0x00, 0x4c, 0x49, 0x56, 0xb5, 0xf6, + 0xfd, 0xfe, 0xfa, 0x00, 0xf6, 0xf4, 0xf4, 0xf8, 0xfc, 0xfe, 0xfc, 0xf4, + 0x20, 0x92, 0x46, 0x21, 0x42, 0x46, 0x42, 0x41, 0x42, 0x00, 0x41, 0x46, + 0x41, 0x46, 0x46, 0x46, 0x46, 0x49, 0x00, 0x4b, 0x45, 0x30, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x10, 0x11, 0x11, 0x11, 0xe9, 0x11, 0x10, 0x0f, 0x1e, + 0x00, 0x76, 0xbc, 0x61, 0xad, 0xbc, 0x3f, 0x21, 0x21, 0x44, 0x21, 0xe9, + 0x21, 0x27, 0x25, 0xcc, 0x27, 0x27, 0x00, 0x27, 0x2a, 0x2d, 0x2d, 0x33, + 0x37, 0x37, 0x3c, 0x00, 0x3c, 0x3c, 0x44, 0x3c, 0x37, 0x33, 0x2d, 0x2a, + 0x0e, 0x42, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x51, 0x45, + 0x36, 0x36, 0x39, 0x3d, 0x3e, 0x3d, 0x00, 0x3d, 0x3d, 0x41, 0x41, 0x46, + 0x49, 0x41, 0x83, 0x00, 0xf4, 0xfe, 0xfa, 0xee, 0xd5, 0xc9, 0xc9, 0xc9, + 0x00, 0xc9, 0xc9, 0xb9, 0xe7, 0xf2, 0xfc, 0xfe, 0xee, 0x70, 0x5f, 0x31, + 0x19, 0xd4, 0x42, 0x42, 0x41, 0x42, 0x01, 0x45, 0x4b, 0x30, 0x18, 0x09, + 0x09, 0x09, 0xe9, 0x80, 0xd1, 0x05, 0x0c, 0x3a, 0x76, 0x87, 0x52, 0x57, + 0x00, 0x52, 0x87, 0x87, 0x6b, 0x22, 0x1a, 0x1c, 0x1c, 0x60, 0x1c, 0xe9, + 0xd4, 0x1c, 0x1d, 0x1f, 0x1f, 0x1f, 0x00, 0x27, 0x2a, 0x2d, 0x2f, 0x33, + 0x33, 0x33, 0x37, 0x00, 0x37, 0x33, 0x27, 0x27, 0x25, 0x00, 0x00, 0x00, + 0xf0, 0xe9, 0xd4, 0xa7, 0x59, 0x51, 0x32, 0x31, 0x31, 0x00, 0x34, 0x35, + 0x35, 0x35, 0x3e, 0x3e, 0x3d, 0x42, 0x00, 0x43, 0xa4, 0xfb, 0xfb, 0xec, + 0xc9, 0xc9, 0xc9, 0x08, 0xd5, 0xd5, 0xd5, 0xd5, 0xc9, 0xc9, 0xc3, 0xee, + 0x03, 0xfe, 0xf9, 0x78, 0x35, 0x3e, 0x39, 0x09, 0xe9, 0x00, 0x35, 0x35, + 0x3b, 0x35, 0x3b, 0x3e, 0x3e, 0x3b, 0x00, 0x45, 0x3f, 0x30, 0x17, 0x0c, + 0x07, 0x04, 0x04, 0x00, 0x04, 0x0c, 0x17, 0x30, 0x6b, 0x6b, 0x54, 0x43, + 0x00, 0x48, 0x48, 0x52, 0x52, 0x61, 0x76, 0x76, 0x51, 0x00, 0x3a, 0x26, + 0x22, 0x26, 0x3a, 0x51, 0x6b, 0x3a, 0x00, 0x15, 0x16, 0x16, 0x16, 0x16, + 0x1a, 0x1a, 0x1a, 0x00, 0x1b, 0x1b, 0x1f, 0x20, 0x23, 0x29, 0x29, 0x29, + 0x00, 0x29, 0x29, 0x23, 0x23, 0x1b, 0x27, 0x00, 0x00, 0x78, 0x00, 0xe9, + 0xd4, 0xa7, 0x5a, 0x3f, 0x27, 0x27, 0x00, 0x27, 0x2e, 0x2e, 0x2e, 0x39, + 0x3e, 0x3e, 0x3e, 0x00, 0xad, 0xfc, 0xf6, 0xcb, 0xd5, 0xd5, 0xd5, 0xd5, + 0x10, 0xda, 0xda, 0xda, 0xca, 0xcb, 0xcb, 0xc3, 0xd5, 0x00, 0xfa, 0xfb, + 0x7b, 0x2e, 0x34, 0x31, 0x34, 0x34, 0x50, 0x34, 0xe9, 0x34, 0xbb, 0x35, + 0x34, 0x35, 0x42, 0x00, 0x45, 0x3f, 0x3a, 0x3a, 0x3a, 0x51, 0x51, 0x51, + 0x00, 0x59, 0x47, 0x3b, 0x40, 0x40, 0x43, 0x43, 0x43, 0x00, 0x48, 0x48, + 0x48, 0x5a, 0x67, 0x67, 0x76, 0x76, 0x00, 0x76, 0x76, 0x67, 0x61, 0x6b, + 0x22, 0x11, 0x11, 0x40, 0x11, 0xe9, 0x14, 0x14, 0x14, 0x1b, 0x1b, 0x1b, + 0x10, 0x20, 0x20, 0x20, 0xe9, 0x1f, 0x1f, 0x00, 0x00, 0x78, 0x00, 0xe9, + 0xd4, 0xa7, 0x5b, 0x28, 0x3a, 0x24, 0x00, 0x24, 0x24, 0x2b, 0x31, 0x32, + 0x39, 0x3e, 0x86, 0x00, 0xfb, 0xf4, 0xc3, 0xcf, 0xd6, 0xda, 0xd6, 0xda, + 0x00, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xcf, 0xcf, 0x00, 0xcf, 0xc3, + 0xc3, 0xc3, 0xfa, 0xfa, 0x56, 0x31, 0x1c, 0x2e, 0x2e, 0x2e, 0xe9, 0xd4, + 0xa5, 0x34, 0x35, 0x10, 0x35, 0x35, 0x34, 0xd3, 0x3b, 0x3b, 0x40, 0x40, + 0x00, 0x43, 0x43, 0x48, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x80, 0xe9, 0x48, + 0x55, 0x51, 0x12, 0x0f, 0x0e, 0x0e, 0x00, 0x0e, 0x0e, 0x11, 0x11, 0x11, + 0x13, 0x13, 0x13, 0x00, 0x14, 0x19, 0x19, 0x19, 0x19, 0x14, 0x13, 0x59, + 0x1e, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0x30, 0x00, 0x2c, 0x1a, + 0x21, 0x2c, 0x32, 0x38, 0x45, 0x4c, 0x00, 0xf8, 0xf8, 0xc0, 0xce, 0xd4, + 0xdb, 0xdb, 0xdd, 0x20, 0xdd, 0xdd, 0xd9, 0xdb, 0xdb, 0xdb, 0xce, 0xc6, + 0x00, 0xc6, 0xc6, 0xc3, 0xcf, 0xfc, 0xf4, 0x2a, 0x31, 0x0e, 0x2a, 0x27, + 0x27, 0x27, 0xe9, 0xd4, 0xa4, 0x2a, 0x00, 0x2a, 0x2a, 0x2a, 0x2d, 0x2d, + 0x2d, 0x2e, 0x2e, 0x00, 0x34, 0x35, 0x35, 0x3b, 0x40, 0x40, 0x40, 0x40, + 0x08, 0x44, 0x48, 0x48, 0x48, 0xe9, 0x44, 0x40, 0x49, 0x00, 0x3a, 0x10, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x0b, 0x04, 0x0b, 0x0b, 0x0f, 0x0f, 0x0f, + 0xe9, 0x0f, 0x0d, 0x07, 0x76, 0xbc, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x80, 0x5d, 0x28, 0x3a, 0x25, 0x2c, 0x3f, 0x45, 0x45, 0x00, 0xe9, 0xfa, + 0xd4, 0xc6, 0xce, 0xd4, 0xdd, 0xdd, 0x02, 0xdd, 0xdd, 0xe3, 0xe3, 0xe3, + 0xe3, 0xc1, 0xd4, 0x00, 0xce, 0xce, 0xc6, 0xc6, 0xc0, 0xe9, 0xfe, 0x9b, + 0x03, 0x31, 0x2b, 0x27, 0x21, 0x21, 0x21, 0xe9, 0xd3, 0x44, 0x24, 0xa4, + 0x27, 0x27, 0x27, 0xe9, 0x27, 0x2a, 0x00, 0x2d, 0x2d, 0x33, 0x33, 0x37, + 0x37, 0x3b, 0x3c, 0x01, 0x3c, 0x3c, 0x3c, 0x44, 0x44, 0x3c, 0x44, 0xc1, + 0x00, 0x40, 0x3a, 0x17, 0x09, 0x05, 0x08, 0x08, 0x05, 0x00, 0x08, 0x09, + 0x09, 0x09, 0x0b, 0x0b, 0x0b, 0x0b, 0x01, 0x14, 0x65, 0x9b, 0xbc, 0x00, + 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, 0x5f, 0x3a, 0x2c, 0x38, 0x59, 0x76, + 0x00, 0xf8, 0xec, 0xc5, 0xc5, 0xcd, 0xcd, 0xd9, 0xd9, 0x00, 0xe1, 0xe1, + 0xe6, 0xe6, 0xe6, 0xe1, 0xe1, 0xd9, 0x00, 0xd9, 0xd9, 0xd3, 0xce, 0xc6, + 0xc6, 0xc0, 0xb8, 0x00, 0xf6, 0xf8, 0x51, 0x31, 0x2b, 0x1f, 0x1d, 0x1d, + 0x07, 0x1d, 0x1c, 0x1c, 0x1c, 0x1c, 0xd9, 0xc1, 0x99, 0x80, 0x81, 0x1d, + 0x1d, 0x21, 0x24, 0x21, 0x23, 0x27, 0x00, 0x2a, 0x2a, 0x2d, 0x2d, 0x33, + 0x37, 0x37, 0x37, 0x18, 0x3c, 0x3c, 0x3c, 0xe9, 0xb9, 0x2f, 0x33, 0x31, + 0x00, 0x1e, 0x0c, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x00, 0x05, 0x05, + 0x04, 0x11, 0x55, 0x81, 0x7c, 0x77, 0x07, 0xad, 0xad, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x80, 0x5c, 0xbc, 0xec, 0xf2, 0xf2, 0xf2, 0xee, 0xec, + 0x00, 0xf8, 0xc5, 0xd3, 0xc5, 0xcd, 0xd3, 0xd9, 0xd9, 0x00, 0xe1, 0xe1, + 0xe6, 0xe6, 0xe6, 0xe1, 0xe4, 0xd9, 0x00, 0xe1, 0xd9, 0xd9, 0xd3, 0xcd, + 0xc5, 0xbf, 0xb8, 0x00, 0xe7, 0xfc, 0xbc, 0x76, 0x3f, 0x22, 0x1a, 0x1a, + 0x68, 0x1a, 0xe9, 0xd2, 0x1c, 0xaf, 0x1a, 0x1b, 0x1d, 0x00, 0x1d, 0x1f, + 0x1f, 0x23, 0x27, 0x27, 0x2a, 0x2a, 0x02, 0x2d, 0x2f, 0x2f, 0x37, 0x37, + 0x37, 0xe9, 0x2f, 0x00, 0x2f, 0x2d, 0x2d, 0x2a, 0x2a, 0x32, 0x65, 0x73, + 0x00, 0x2b, 0x10, 0x0c, 0x0c, 0x0c, 0x16, 0x3e, 0x73, 0x00, 0x94, 0x85, + 0x81, 0x7c, 0x73, 0x87, 0xad, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x59, 0xad, 0xf2, 0x00, 0xf4, 0xf4, 0xf4, 0xee, 0xee, 0xf4, 0xf4, 0xf6, + 0x00, 0xe9, 0xd3, 0xca, 0xca, 0xca, 0xd2, 0xd8, 0xd8, 0x00, 0xd8, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xe4, 0xe4, 0x00, 0xdf, 0xe1, 0xd9, 0xcd, 0xc5, + 0xb8, 0xb8, 0xb5, 0x00, 0xb1, 0xf8, 0xf0, 0xbc, 0x76, 0x6b, 0x3a, 0x16, + 0x00, 0x15, 0x15, 0x15, 0x16, 0x15, 0x14, 0x14, 0x18, 0x00, 0x3a, 0x3a, + 0x22, 0x15, 0x16, 0x16, 0x16, 0x16, 0x00, 0x16, 0x15, 0x16, 0x1a, 0x1a, + 0x16, 0x1a, 0x1b, 0x00, 0x1b, 0x1b, 0x1f, 0x1f, 0x23, 0x23, 0x29, 0x29, + 0x04, 0x29, 0x29, 0x2f, 0x2f, 0x2f, 0xca, 0x29, 0x20, 0x00, 0x27, 0x2c, + 0xaa, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0x00, 0xaa, 0xaa, 0x9d, 0x9d, 0x89, + 0x81, 0x7c, 0x75, 0x03, 0x72, 0x7b, 0x87, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0x80, 0xa7, 0x00, 0x00, 0xee, 0xf4, 0xec, 0xe7, 0xc0, 0x00, 0xbb, 0xbb, + 0xbb, 0xb8, 0xb5, 0xb1, 0xb8, 0xbf, 0x00, 0xc8, 0xc8, 0xc8, 0xd2, 0xd2, + 0xd2, 0xde, 0xde, 0x00, 0xde, 0xe2, 0xe2, 0xe2, 0xe2, 0xdf, 0xd8, 0xd8, + 0x10, 0xd2, 0xc8, 0xc8, 0x41, 0xb1, 0xec, 0xf6, 0x91, 0x00, 0xad, 0x87, + 0x76, 0x6b, 0x51, 0x3a, 0x30, 0x30, 0x00, 0x30, 0x3a, 0x51, 0x6b, 0x6b, + 0x76, 0x6b, 0x22, 0x18, 0x11, 0x11, 0x11, 0xe9, 0xd1, 0x15, 0x14, 0x15, + 0x00, 0x14, 0x19, 0x19, 0x19, 0x1f, 0x1f, 0x1f, 0x23, 0x00, 0x23, 0x29, + 0x29, 0x29, 0x29, 0x23, 0x23, 0x23, 0x00, 0x20, 0x20, 0x20, 0x24, 0x7a, + 0xbe, 0xaa, 0xaa, 0x40, 0xaa, 0xe9, 0x9d, 0x9d, 0x9d, 0x8a, 0x80, 0x7c, + 0x01, 0x73, 0x6c, 0x6c, 0x87, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa7, + 0xe0, 0xec, 0xe9, 0xbb, 0xbb, 0xbb, 0x00, 0xbb, 0xbb, 0xb5, 0xb5, 0xb5, + 0xae, 0xb4, 0xb4, 0x00, 0xb4, 0xc1, 0xc7, 0xc7, 0xd2, 0xd2, 0xd2, 0xd2, + 0x14, 0xde, 0xde, 0xde, 0xe9, 0xde, 0xa9, 0xc8, 0xc1, 0x00, 0xc1, 0xb4, + 0xb1, 0xab, 0xe0, 0xf8, 0x91, 0x86, 0x02, 0x87, 0x87, 0x87, 0x76, 0x76, + 0x76, 0xe9, 0x76, 0x00, 0x87, 0x76, 0x71, 0x6b, 0x51, 0x11, 0x11, 0x11, + 0xc0, 0xe9, 0xd4, 0x14, 0x14, 0x14, 0x13, 0x19, 0x19, 0x02, 0x1b, 0x1b, + 0x1b, 0x20, 0x20, 0x20, 0xe9, 0x20, 0x01, 0x1b, 0x1b, 0x1f, 0x49, 0xaa, + 0xaa, 0xaa, 0xe9, 0x00, 0xaa, 0xaa, 0x99, 0x99, 0x8a, 0x8a, 0x80, 0x75, + 0x00, 0x73, 0x6c, 0x65, 0x87, 0x76, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, + 0xa5, 0xe0, 0xec, 0xdc, 0xb1, 0xb5, 0x00, 0xb1, 0xb5, 0xb1, 0xb1, 0xb1, + 0xae, 0xae, 0xae, 0x00, 0xb2, 0xb2, 0xb2, 0xc1, 0xcc, 0xcc, 0xcc, 0xcc, + 0x1c, 0xd7, 0xd7, 0xd7, 0xe9, 0xd1, 0x99, 0xc1, 0xc1, 0x00, 0xb4, 0xb4, + 0xab, 0xab, 0xb5, 0xf8, 0xad, 0x87, 0x00, 0x7b, 0x60, 0x5c, 0x5b, 0x5c, + 0x5e, 0x67, 0x5e, 0x00, 0x5e, 0x55, 0x50, 0x53, 0x53, 0x67, 0x51, 0x3a, + 0x0c, 0x0e, 0x0b, 0x0b, 0x0b, 0xe9, 0xd1, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, + 0x0f, 0x13, 0x13, 0x14, 0x13, 0x13, 0x10, 0x19, 0x19, 0x19, 0xe9, 0x19, + 0x14, 0x14, 0x2b, 0x08, 0x99, 0xaa, 0xaa, 0xaa, 0xe9, 0x99, 0x99, 0x99, + 0x00, 0x99, 0x8a, 0x80, 0x7a, 0x73, 0x6c, 0x64, 0x61, 0x07, 0x76, 0x87, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x00, 0xad, 0xe9, 0xb5, 0xab, 0xab, + 0xae, 0xae, 0xae, 0x80, 0xe9, 0xa9, 0xa9, 0xa9, 0xa9, 0xb0, 0xb2, 0xbd, + 0x01, 0xc2, 0xc1, 0xc4, 0xc4, 0xcc, 0xcc, 0xcc, 0xe9, 0x80, 0xd2, 0xc4, + 0xc2, 0xc2, 0xb4, 0xb4, 0xb2, 0xab, 0x00, 0xa4, 0xa4, 0xf0, 0xbc, 0xad, + 0xe0, 0xe0, 0xe0, 0x00, 0xad, 0x9b, 0x78, 0x5f, 0x4c, 0x4c, 0x50, 0x4c, + 0x00, 0x50, 0x4c, 0x47, 0x59, 0x3a, 0x30, 0x09, 0x09, 0x60, 0x09, 0xe9, + 0xd1, 0x0b, 0x09, 0x0b, 0x0d, 0x0f, 0x21, 0x0f, 0x0f, 0xe9, 0x0f, 0x13, + 0x13, 0x13, 0xe9, 0x03, 0x14, 0x1f, 0x8a, 0x99, 0x99, 0x99, 0xe9, 0xd2, + 0x00, 0x8a, 0x8a, 0x80, 0x7a, 0x6f, 0x6c, 0x64, 0x5a, 0x07, 0x67, 0x87, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x00, 0xe0, 0xae, 0xa4, 0xa4, 0xa4, + 0xa4, 0xa4, 0xa9, 0x00, 0xa9, 0xa9, 0xa9, 0xa9, 0xa7, 0xa7, 0xac, 0xb0, + 0x00, 0xb0, 0xb0, 0xbd, 0xbd, 0xc2, 0xc2, 0xc2, 0xc2, 0x40, 0xc2, 0xcc, + 0xbd, 0xbd, 0xbd, 0xb3, 0xb3, 0xb2, 0x01, 0xa9, 0xa7, 0x9f, 0x9f, 0xf0, + 0xf0, 0xf0, 0xe9, 0x00, 0xf0, 0xf8, 0xf0, 0xec, 0xad, 0x70, 0x4a, 0x49, + 0x00, 0x46, 0x46, 0x42, 0x42, 0x59, 0x3a, 0x1e, 0x0c, 0x00, 0x05, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x05, 0x08, 0x00, 0x09, 0x09, 0x09, 0x09, 0x0b, + 0x0d, 0x0d, 0x0d, 0x04, 0x0d, 0x0d, 0x0f, 0x0f, 0x0f, 0xe1, 0x20, 0x80, + 0x04, 0x8a, 0x8a, 0x99, 0x99, 0x99, 0xe9, 0x99, 0x99, 0x00, 0x8a, 0x8a, + 0x80, 0x80, 0x6f, 0x6f, 0x64, 0x5d, 0x03, 0x5a, 0x67, 0x87, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa3, 0xdc, 0xad, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, + 0x04, 0x9f, 0xa4, 0xa7, 0xa7, 0xa7, 0xe9, 0xa7, 0xac, 0x02, 0xac, 0xac, + 0xb0, 0xb6, 0xb6, 0xb6, 0xe9, 0xb6, 0x20, 0xb3, 0xb3, 0xbc, 0xaf, 0xaf, + 0xac, 0xa7, 0x9f, 0x00, 0x9f, 0x9a, 0xa9, 0xad, 0xa4, 0x92, 0x8e, 0x92, + 0x00, 0x8e, 0x9a, 0xad, 0xe9, 0xf0, 0xf0, 0xad, 0x56, 0x00, 0x42, 0x3d, + 0x3d, 0x3d, 0x3d, 0x4b, 0x3a, 0x1e, 0x08, 0x10, 0x04, 0x04, 0x04, 0xe9, + 0x05, 0x05, 0x08, 0x41, 0x05, 0xe1, 0x09, 0x0b, 0x09, 0x09, 0x09, 0xda, + 0x00, 0x33, 0x7a, 0x80, 0x80, 0x80, 0x8a, 0x8a, 0x8a, 0x08, 0x99, 0x99, + 0x99, 0x99, 0xc9, 0x80, 0x7a, 0x6f, 0x00, 0x64, 0x64, 0x5a, 0x53, 0x5e, + 0x76, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa3, 0xad, 0x92, 0x92, 0x92, + 0x00, 0x92, 0x92, 0x98, 0x98, 0xa0, 0xa0, 0xa3, 0xa3, 0x40, 0xa3, 0xe9, + 0xa3, 0xa5, 0xa5, 0xa5, 0xaf, 0xaf, 0x42, 0xaf, 0xe9, 0xa8, 0xaf, 0xa8, + 0xac, 0xbc, 0xa8, 0x00, 0xa6, 0xa6, 0xa1, 0x9a, 0x9a, 0x98, 0x98, 0x98, + 0x00, 0x92, 0x98, 0x92, 0x92, 0x92, 0x92, 0x8e, 0x8e, 0x00, 0xe0, 0xec, + 0xe9, 0x6a, 0x36, 0x38, 0x38, 0x36, 0x00, 0x36, 0x3f, 0x3f, 0x17, 0x10, + 0x07, 0x02, 0x04, 0x14, 0x04, 0x04, 0x04, 0xd9, 0x05, 0xe9, 0x05, 0x05, + 0x00, 0x08, 0x05, 0x08, 0x08, 0x0d, 0x48, 0x6c, 0x6f, 0x00, 0x6f, 0x7a, + 0x7a, 0x80, 0x80, 0x8a, 0x8a, 0x8a, 0x80, 0xe9, 0x80, 0x80, 0x7a, 0x6f, + 0x6f, 0x64, 0x5d, 0x03, 0x57, 0x4c, 0x59, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0x80, 0xa3, 0xad, 0x9b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x00, 0x93, 0x97, + 0x97, 0x9e, 0x9c, 0xa3, 0xa0, 0x9c, 0x10, 0xa3, 0xa3, 0xa3, 0xe9, 0xa5, + 0xa8, 0xa6, 0xa5, 0x06, 0xa5, 0xa5, 0xa5, 0xa1, 0xa1, 0xd2, 0xb3, 0xa0, + 0x00, 0x9e, 0x97, 0x98, 0x98, 0x98, 0x97, 0x93, 0x93, 0x80, 0xe9, 0x8e, + 0x8e, 0x8e, 0x8b, 0x8e, 0xe0, 0xe9, 0x00, 0x6a, 0x31, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x38, 0x01, 0x30, 0x17, 0x0c, 0x06, 0x02, 0x02, 0x02, 0xe9, + 0x10, 0x02, 0x04, 0x04, 0xe9, 0x04, 0x05, 0x0b, 0x2a, 0x00, 0x57, 0x5d, + 0x5d, 0x63, 0x63, 0x6f, 0x6f, 0x7a, 0x00, 0x7a, 0x80, 0x80, 0x80, 0x80, + 0x8a, 0x80, 0x80, 0x00, 0x7a, 0x7a, 0x6f, 0x63, 0x5d, 0x57, 0x52, 0x4c, + 0x0e, 0x59, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0xad, 0x10, 0x84, 0x84, + 0x84, 0xe9, 0x8c, 0x90, 0x94, 0x97, 0x0c, 0x96, 0x9c, 0x9c, 0x9c, 0xe9, + 0xca, 0x9e, 0x9e, 0x68, 0x9e, 0xe9, 0xd4, 0xa0, 0x9a, 0x96, 0x96, 0x96, + 0x00, 0x96, 0x97, 0x96, 0x96, 0x93, 0x96, 0x93, 0x93, 0x00, 0x93, 0x90, + 0x93, 0x8b, 0x8b, 0x84, 0x83, 0xbc, 0x02, 0xe0, 0x58, 0x31, 0x2c, 0x2c, + 0x2c, 0xe9, 0x3a, 0x00, 0x22, 0x17, 0x0a, 0x06, 0x06, 0x02, 0x02, 0x02, + 0x00, 0x03, 0x02, 0x02, 0x06, 0x06, 0x07, 0x10, 0x2c, 0x00, 0x43, 0x49, + 0x4a, 0x52, 0x57, 0x5d, 0x5d, 0x63, 0x00, 0x63, 0x6f, 0x6f, 0x7a, 0x7a, + 0x80, 0x80, 0x80, 0x00, 0x7a, 0x7a, 0x6f, 0x6f, 0x63, 0x5d, 0x5d, 0x52, + 0x03, 0x4c, 0x49, 0x59, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa3, 0x9b, + 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x01, 0x84, 0x8c, 0x8d, 0x90, 0x94, + 0x94, 0x94, 0xe9, 0x00, 0x90, 0x8d, 0x8d, 0x8c, 0x91, 0x8c, 0x94, 0x95, + 0x00, 0x93, 0x94, 0x93, 0x90, 0x93, 0x90, 0x95, 0x95, 0x01, 0x95, 0x96, + 0x96, 0x96, 0x96, 0x95, 0x95, 0x1c, 0x80, 0xd2, 0x90, 0x90, 0x8c, 0x8c, + 0x84, 0x83, 0x7e, 0x01, 0x7e, 0xbc, 0xbc, 0x32, 0x26, 0x26, 0x26, 0xe9, + 0x00, 0x26, 0x26, 0x2c, 0x2c, 0x26, 0x1c, 0x1e, 0x18, 0x00, 0x1e, 0x18, + 0x1e, 0x1e, 0x24, 0x2c, 0x39, 0x39, 0x00, 0x3b, 0x3b, 0x3e, 0x43, 0x48, + 0x48, 0x52, 0x57, 0x00, 0x5d, 0x5d, 0x63, 0x6f, 0x6f, 0x6f, 0x6f, 0x7a, + 0x40, 0x7a, 0xd1, 0x63, 0x5d, 0x5d, 0x52, 0x52, 0x48, 0x07, 0x4b, 0x54, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa2, 0x00, 0x6b, 0x86, 0x74, 0x7b, 0x7b, + 0x7b, 0x7b, 0x7b, 0x00, 0x7f, 0x85, 0x85, 0x85, 0x8d, 0x8d, 0x89, 0x8d, + 0x40, 0x89, 0xc1, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x88, 0x00, 0x84, 0x84, + 0x83, 0x84, 0x84, 0x88, 0x89, 0x8d, 0x00, 0x8d, 0x8f, 0x90, 0x8f, 0x8d, + 0x90, 0x8d, 0x8d, 0x0c, 0x8d, 0x8d, 0x90, 0x90, 0xe9, 0xaa, 0x8c, 0x8c, + 0x00, 0x84, 0x84, 0x7e, 0x78, 0x78, 0xbc, 0x87, 0x21, 0x18, 0x22, 0x22, + 0x22, 0xe9, 0xd3, 0x26, 0x22, 0x26, 0x00, 0x26, 0x26, 0x26, 0x2b, 0x26, + 0x2b, 0x2b, 0x2e, 0x00, 0x2e, 0x34, 0x35, 0x3e, 0x43, 0x43, 0x48, 0x52, + 0x01, 0x57, 0x5d, 0x5d, 0x63, 0x6f, 0x6f, 0x6f, 0xe9, 0x00, 0x63, 0x5d, + 0x5d, 0x57, 0x52, 0x48, 0x43, 0x4b, 0x0e, 0x3f, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa2, 0x76, 0x00, 0x7b, 0x70, 0x70, 0x70, 0x71, 0x74, 0x7b, 0x7b, + 0x00, 0x7d, 0x7d, 0x81, 0x85, 0x81, 0x81, 0x81, 0x7d, 0x08, 0x7d, 0x7b, + 0x7b, 0x7b, 0xe9, 0x7b, 0x77, 0x78, 0x00, 0x78, 0x78, 0x7e, 0x7e, 0x7d, + 0x7e, 0x82, 0x82, 0x00, 0x82, 0x82, 0x85, 0x82, 0x85, 0x85, 0x85, 0x89, + 0x20, 0x89, 0x89, 0xe9, 0x89, 0x8f, 0x89, 0x8f, 0x8d, 0x00, 0x8d, 0x85, + 0x7f, 0x7f, 0x7e, 0x78, 0x74, 0x86, 0x03, 0xbc, 0x32, 0x1d, 0x1c, 0x1c, + 0x1c, 0xe9, 0xd4, 0x80, 0xa3, 0x22, 0x22, 0x21, 0x25, 0x25, 0x21, 0x2a, + 0x00, 0x2d, 0x35, 0x40, 0x40, 0x44, 0x48, 0x4d, 0x5d, 0x08, 0x5d, 0x63, + 0x63, 0x63, 0xe9, 0x5d, 0x5d, 0x4d, 0x00, 0x4d, 0x44, 0x40, 0x3b, 0x4b, + 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa3, 0x76, 0x71, 0x68, 0x68, 0x6a, + 0x01, 0x6a, 0x71, 0x71, 0x74, 0x77, 0x77, 0x77, 0xe9, 0x00, 0x77, 0x74, + 0x74, 0x71, 0x71, 0x6d, 0x6d, 0x6d, 0x00, 0x6a, 0x6a, 0x6a, 0x6d, 0x70, + 0x70, 0x72, 0x74, 0x00, 0x74, 0x74, 0x75, 0x79, 0x79, 0x79, 0x7d, 0x7d, + 0x00, 0x7d, 0x81, 0x7d, 0x81, 0x81, 0x81, 0x82, 0x85, 0x00, 0x85, 0x85, + 0x85, 0x89, 0x89, 0x89, 0x81, 0x7d, 0x00, 0x77, 0x77, 0x79, 0x79, 0x70, + 0x69, 0xad, 0x67, 0x00, 0x1a, 0x1a, 0x1a, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x1a, 0x1a, 0x18, 0x1e, 0xd2, 0x89, 0x1c, 0xe9, 0x1c, 0x00, 0x1d, 0x27, + 0x2a, 0x2d, 0x33, 0x37, 0x3c, 0x44, 0x02, 0x44, 0x4d, 0x4d, 0x5d, 0x5d, + 0x5d, 0xe9, 0x4d, 0x00, 0x4d, 0x4d, 0x44, 0x3c, 0x37, 0x3e, 0x45, 0x00, + 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x51, 0x67, 0x60, 0x00, 0x67, 0x62, + 0x67, 0x68, 0x68, 0x6d, 0x6d, 0x71, 0x00, 0x72, 0x71, 0x71, 0x6d, 0x6d, + 0x68, 0x68, 0x68, 0x02, 0x67, 0x67, 0x67, 0x60, 0x60, 0x60, 0xe9, 0x66, + 0x00, 0x6a, 0x69, 0x69, 0x6d, 0x6e, 0x6e, 0x6e, 0x72, 0x00, 0x72, 0x72, + 0x75, 0x75, 0x75, 0x75, 0x7c, 0x7c, 0x00, 0x7c, 0x81, 0x81, 0x81, 0x85, + 0x85, 0x85, 0x81, 0x00, 0x7c, 0x77, 0x75, 0x72, 0x71, 0x72, 0x72, 0x6a, + 0x00, 0x87, 0x87, 0x16, 0x15, 0x18, 0x12, 0x12, 0x12, 0x82, 0xe9, 0x18, + 0x12, 0x18, 0x12, 0x15, 0xaa, 0x15, 0x00, 0x15, 0x15, 0x16, 0x1a, 0x1a, + 0x1d, 0x1d, 0x23, 0x00, 0x2a, 0x33, 0x37, 0x3c, 0x3c, 0x44, 0x4d, 0x4d, + 0x40, 0x4d, 0xe9, 0x4d, 0x4d, 0x44, 0x44, 0x3c, 0x37, 0x07, 0x37, 0x39, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x00, 0x67, 0x5e, 0x5e, 0x5e, 0x60, + 0x61, 0x65, 0x65, 0x42, 0x65, 0xe9, 0x65, 0x65, 0x61, 0x60, 0x89, 0x5c, + 0x02, 0x5e, 0x5e, 0x58, 0x58, 0x58, 0x58, 0x39, 0x5f, 0x00, 0x62, 0x62, + 0x62, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x00, 0x6c, 0x6c, 0x6e, 0x6e, 0x73, + 0x73, 0x75, 0x75, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x75, 0x75, 0x75, 0x73, + 0x00, 0x6e, 0x6e, 0x6c, 0x65, 0x65, 0x62, 0x68, 0x87, 0x00, 0x3a, 0x12, + 0x11, 0x11, 0x10, 0x12, 0x10, 0x10, 0x00, 0x10, 0x10, 0x30, 0x30, 0x1e, + 0x10, 0x12, 0x12, 0x80, 0xe9, 0x12, 0x12, 0x15, 0x12, 0x16, 0x16, 0x1a, + 0x00, 0x1f, 0x20, 0x23, 0x2d, 0x2f, 0x37, 0x3c, 0x3c, 0x10, 0x44, 0x44, + 0x44, 0xe9, 0x44, 0x3c, 0x37, 0x37, 0x03, 0x2f, 0x33, 0x32, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa5, 0x67, 0x54, 0x54, 0x54, 0x54, 0x58, 0x5c, + 0x22, 0x5c, 0x5c, 0xe9, 0x5c, 0x5c, 0x58, 0x91, 0x4e, 0x31, 0x4e, 0x4e, + 0xe9, 0xd3, 0x54, 0x54, 0x56, 0x31, 0x00, 0x5f, 0x5f, 0x5f, 0x62, 0x62, + 0x62, 0x62, 0x66, 0x06, 0x6c, 0x6c, 0x6e, 0x6e, 0x6e, 0xe9, 0xd1, 0x6c, + 0x00, 0x6c, 0x65, 0x61, 0x5c, 0x5c, 0x58, 0x87, 0x6b, 0x00, 0x6b, 0x51, + 0x3a, 0x30, 0x1e, 0x30, 0x3a, 0x51, 0x00, 0x6b, 0x00, 0x00, 0x6b, 0x1e, + 0x0e, 0x10, 0x10, 0x20, 0x0e, 0x10, 0xd9, 0x11, 0x11, 0x11, 0x11, 0x14, + 0x00, 0x1b, 0x1f, 0x20, 0x2f, 0x2f, 0x2f, 0x37, 0x37, 0x00, 0x3c, 0x3c, + 0x3c, 0x3c, 0x3c, 0x37, 0x37, 0x2f, 0x03, 0x2f, 0x2d, 0x2d, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa6, 0x59, 0x4b, 0x4b, 0x4e, 0x4f, 0x4e, 0x4e, + 0x00, 0x55, 0x54, 0x54, 0x54, 0x55, 0x4e, 0x4e, 0x4e, 0x06, 0x4e, 0x4b, + 0x47, 0x47, 0x47, 0xe9, 0xd4, 0x47, 0x40, 0x47, 0x11, 0x4e, 0x50, 0x55, + 0x55, 0x56, 0x5b, 0x00, 0x5b, 0x5b, 0x5a, 0x61, 0x61, 0x61, 0x61, 0x61, + 0x00, 0x64, 0x64, 0x6c, 0x64, 0x6c, 0x64, 0x64, 0x61, 0x00, 0x61, 0x5b, + 0x55, 0x55, 0x4e, 0x76, 0x00, 0x00, 0x60, 0x00, 0xe9, 0xd4, 0x00, 0x51, + 0x10, 0x0c, 0x0c, 0x40, 0x0c, 0xe9, 0x0c, 0x0c, 0x0e, 0x0e, 0x11, 0x11, + 0x00, 0x15, 0x19, 0x1b, 0x20, 0x29, 0x2f, 0x2f, 0x2f, 0x10, 0x2f, 0x2f, + 0x37, 0xd2, 0x29, 0x23, 0x23, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x00, 0x4b, 0x42, 0x02, 0x45, 0x45, 0x47, 0x4b, 0x4b, 0x4b, 0xe9, 0x47, + 0x00, 0x45, 0x45, 0x42, 0x42, 0x3d, 0x3d, 0x3d, 0x3d, 0x04, 0x3d, 0x3f, + 0x42, 0x42, 0x42, 0xe9, 0x42, 0x45, 0xa0, 0x19, 0x45, 0xe9, 0x45, 0x4b, + 0x4b, 0x4f, 0x4e, 0x00, 0x4c, 0x4e, 0x53, 0x55, 0x5a, 0x5a, 0x61, 0x61, + 0x00, 0x61, 0x64, 0x61, 0x61, 0x5a, 0x5a, 0x55, 0x4e, 0x03, 0x4b, 0x47, + 0x59, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x02, 0x00, 0x00, 0x30, 0x07, 0x07, + 0x07, 0xe9, 0x09, 0x80, 0xe9, 0x09, 0x0b, 0x0f, 0x0f, 0x13, 0x19, 0x19, + 0x04, 0x20, 0x20, 0x29, 0x29, 0x29, 0xe9, 0x29, 0x20, 0x07, 0x20, 0x1b, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x00, 0x59, 0x36, 0x38, + 0x3d, 0x3d, 0x3d, 0xc1, 0xe9, 0xd1, 0x38, 0x36, 0x36, 0x32, 0x32, 0xe9, + 0x80, 0xd9, 0x36, 0x36, 0x38, 0x36, 0x38, 0x38, 0x38, 0x88, 0xe9, 0x38, + 0x3d, 0x3f, 0x01, 0x42, 0x42, 0x45, 0x00, 0x49, 0x49, 0x49, 0x4c, 0x4c, + 0x53, 0x57, 0x57, 0x00, 0x5a, 0x5a, 0x5a, 0x57, 0x57, 0x53, 0x4c, 0x49, + 0x03, 0x49, 0x42, 0x59, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x84, 0xa1, 0x30, + 0x07, 0x07, 0x07, 0xe9, 0x07, 0x07, 0x00, 0x09, 0x09, 0x09, 0x09, 0x0e, + 0x0f, 0x0f, 0x13, 0x00, 0x13, 0x19, 0x19, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0f, 0x19, 0x19, 0x19, 0x0a, 0x01, 0xe9, 0xd4, 0xa7, 0x80, 0x59, 0x3f, + 0x2c, 0x2c, 0x31, 0x35, 0x35, 0x32, 0x00, 0x32, 0x32, 0x32, 0x32, 0x2b, + 0x2c, 0x2b, 0x26, 0x2e, 0x26, 0x22, 0xe9, 0x2c, 0x8b, 0x63, 0xb4, 0x36, + 0x00, 0x36, 0x36, 0x39, 0x39, 0x3d, 0x3d, 0x41, 0x43, 0x04, 0x48, 0x4a, + 0x52, 0x52, 0x52, 0xe9, 0x4c, 0x48, 0x01, 0x43, 0x42, 0x39, 0x59, 0x00, + 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa2, 0x1e, 0x07, 0x02, 0x02, 0x02, 0x02, + 0x00, 0x02, 0x04, 0x04, 0x07, 0x05, 0x05, 0x09, 0x09, 0x02, 0x0d, 0x0f, + 0x0f, 0x13, 0x13, 0x13, 0xe9, 0x13, 0x3c, 0x0f, 0x13, 0x04, 0xd4, 0xa7, + 0x5b, 0x28, 0x22, 0x00, 0x1d, 0x22, 0x22, 0x25, 0x25, 0x25, 0x21, 0x24, + 0x00, 0x22, 0x22, 0x1c, 0x1c, 0x1a, 0x1a, 0x18, 0x18, 0x01, 0x18, 0x18, + 0x1a, 0x22, 0x26, 0x26, 0x26, 0xe9, 0x88, 0xd3, 0x2c, 0x2c, 0x2c, 0xe9, + 0x2c, 0x2c, 0x32, 0x00, 0x32, 0x35, 0x39, 0x3e, 0x3e, 0x43, 0x48, 0x48, + 0x00, 0x4a, 0x4a, 0x48, 0x48, 0x43, 0x43, 0x3d, 0x39, 0x07, 0x35, 0x59, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x00, 0x1e, 0x0a, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x02, 0x00, 0x02, 0x02, 0x02, 0x04, 0x04, 0x05, 0x09, 0x09, + 0x07, 0x09, 0x0d, 0x0d, 0x0f, 0x0d, 0xe1, 0x06, 0xc6, 0xc0, 0x87, 0x39, + 0x30, 0x18, 0x16, 0x16, 0x16, 0x18, 0x00, 0x16, 0x18, 0x15, 0x15, 0x12, + 0x12, 0x12, 0x10, 0x00, 0x12, 0x12, 0x11, 0x10, 0x0e, 0x30, 0x87, 0x6b, + 0x0e, 0x1c, 0x22, 0x22, 0x22, 0xe9, 0xd4, 0xa2, 0x25, 0x00, 0x26, 0x26, + 0x2b, 0x2e, 0x2e, 0x35, 0x35, 0x3b, 0x00, 0x40, 0x40, 0x43, 0x40, 0x40, + 0x3b, 0x3b, 0x35, 0x07, 0x2e, 0x32, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, + 0x00, 0x01, 0x10, 0x03, 0x01, 0x03, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x04, 0x05, 0x05, 0x03, 0x08, 0x08, 0x08, 0x09, 0x0d, + 0x01, 0x07, 0xbf, 0xc0, 0x77, 0x29, 0x28, 0x10, 0x0e, 0x10, 0x10, 0x10, + 0x40, 0x0c, 0xe9, 0x0c, 0x0c, 0x0c, 0x0c, 0x0a, 0x0a, 0x00, 0x07, 0x3a, + 0xbc, 0x00, 0x6b, 0x6b, 0x15, 0x1a, 0x21, 0x1a, 0x1a, 0xe9, 0x1a, 0x18, + 0x1e, 0x18, 0xd9, 0x00, 0x1a, 0x1a, 0x1c, 0x1a, 0x1c, 0x22, 0x24, 0x27, + 0x00, 0x2a, 0x2d, 0x33, 0x33, 0x3b, 0x3b, 0x3b, 0x37, 0x00, 0x33, 0x2d, + 0x2a, 0x27, 0x32, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa7, 0x01, 0x0c, + 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0xe9, + 0x1e, 0x04, 0x0b, 0x01, 0x07, 0xbf, 0x77, 0x2d, 0x17, 0x01, 0x07, 0x07, + 0x07, 0x07, 0x06, 0x06, 0x06, 0xe9, 0x08, 0x06, 0x06, 0x0a, 0x51, 0x03, + 0x6b, 0x1e, 0x12, 0x24, 0x12, 0x12, 0xe9, 0x18, 0x17, 0xcc, 0x12, 0x18, + 0x00, 0x18, 0x16, 0x1a, 0x1b, 0x24, 0x27, 0x27, 0x2d, 0x00, 0x2d, 0x33, + 0x2f, 0x2d, 0x2a, 0x23, 0x24, 0x1c, 0x0f, 0x30, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x59, 0x00, 0x01, 0x0a, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x0f, 0x02, 0x02, 0x09, 0x06, 0x07, 0x07, 0x77, 0x2f, 0x00, 0x00, 0x00, + 0x0a, 0x10, 0x03, 0x01, 0x01, 0x01, 0x84, 0xe9, 0x01, 0x06, 0x30, 0x28, + 0x05, 0x6b, 0x51, 0x00, 0x1e, 0x10, 0x0e, 0x0e, 0x0e, 0x10, 0x1e, 0x3a, + 0x08, 0x17, 0x10, 0x10, 0x10, 0xe9, 0x10, 0x11, 0x11, 0x00, 0x16, 0x16, + 0x1b, 0x1b, 0x1f, 0x23, 0x23, 0x23, 0x00, 0x20, 0x1f, 0x1b, 0x16, 0x22, + 0x00, 0x00, 0x00, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x01, 0x01, 0x17, 0x18, 0x16, 0x17, 0x17, 0x61, 0x28, 0x07, + 0x02, 0x28, 0x28, 0x28, 0x28, 0x71, 0x08, 0x51, 0x0c, 0x0c, 0x0c, 0xe9, + 0x0c, 0x0c, 0x0e, 0x00, 0x10, 0x10, 0x11, 0x14, 0x14, 0x19, 0x19, 0x19, + 0x0f, 0x19, 0x14, 0x14, 0x11, 0x01, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc2, 0x07, 0x03, 0x3a, 0x07, 0x07, + 0x07, 0xe9, 0x07, 0x00, 0x0a, 0x0c, 0x0c, 0x0c, 0x0e, 0x11, 0x11, 0x11, + 0x98, 0xe9, 0x10, 0x0a, 0x07, 0xbf, 0x00, 0xd0, 0xd0, 0xff, 0x5f, 0x17, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xc2, 0x07, 0x04, 0x1e, 0x06, 0x06, + 0x06, 0xe9, 0x06, 0x01, 0x07, 0x07, 0x07, 0x09, 0x0c, 0x0c, 0x0c, 0xe9, + 0x61, 0x06, 0x07, 0xbf, 0x00, 0x00, 0xd0, 0xd0, 0x57, 0xff, 0x0f, 0x77, + 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x84, 0x05, 0x17, 0x03, 0x03, 0x03, + 0xe9, 0x03, 0x03, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x07, + 0xc3, 0xbf, 0x71, 0xd0, 0xea, 0xea, 0xe5, 0x3f, 0x07, 0xfc, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x60, 0xba, 0x07, 0x03, 0x0c, 0x03, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x03, 0x03, 0x02, 0x02, 0x05, 0x01, + 0xe0, 0x2f, 0x07, 0x72, 0xed, 0xed, 0xed, 0xed, 0xd0, 0xff, 0x2f, 0x07, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x18, 0x00, 0xd0, 0xd0, 0x07, 0x05, + 0x03, 0x03, 0x01, 0x0e, 0x01, 0x03, 0x02, 0x01, 0x4f, 0x07, 0x04, 0xef, + 0x07, 0xef, 0xef, 0xef, 0xef, 0xf3, 0x17, 0x07, 0x77, 0xf8, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0xeb, 0xea, 0xea, 0xf8, 0x07, 0x07, 0x77, 0x2f, 0x07, + 0x00, 0xd0, 0xf3, 0x2f, 0xf3, 0xf3, 0xe9, 0xf2, 0x07, 0x07, 0x77, 0x2f, + 0xf0, 0x07, 0x07, 0x07, 0x05, 0xea, 0xed, 0xed, 0xed, 0x7c, 0xed, 0x07, + 0x07, 0x77, 0x2f, 0x07, 0xf7, 0xf3, 0x27, 0xf3, 0xf3, 0xe9, 0xf7, 0xd0, + 0x07, 0x07, 0x77, 0xf8, 0x2f, 0x07, 0x07, 0x07, 0x04, 0xef, 0xef, 0xef, + 0x1f, 0xef, 0xef, 0xd0, 0x07, 0x07, 0x77, 0x2f, 0x05, 0x08, 0xf7, 0xf3, + 0xf3, 0xf3, 0xe9, 0xf3, 0xf3, 0xf9, 0xff, 0x07, 0x07, 0x77, 0x2f, 0x07, + 0x07, 0x07, 0x03, 0x0f, 0xf7, 0xf3, 0xf3, 0xf3, 0xe9, 0x07, 0x07, 0x77, + 0xc1, 0x2f, 0x04, 0xd0, 0xf3, 0xef, 0xef, 0xef, 0xe9, 0x0f, 0xef, 0xef, + 0xf3, 0xd0, 0x07, 0x07, 0x77, 0x2f, 0xf0, 0x07, 0x07, 0x07, 0x01, 0xf4, + 0xf3, 0xf3, 0xf3, 0x9f, 0xe9, 0xf3, 0xf7, 0x07, 0x07, 0x77, 0x2f, 0x03, + 0x02, 0xf6, 0xeb, 0xeb, 0xed, 0xed, 0xed, 0xe9, 0xed, 0x3f, 0xed, 0xf9, + 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xc2, 0x07, 0x01, 0xf7, 0xf3, 0xf3, + 0xf3, 0xe9, 0xf3, 0x3e, 0xf7, 0xd0, 0x07, 0x07, 0x77, 0x2f, 0x02, 0xf5, + 0x1b, 0xe8, 0xe8, 0xe8, 0xe9, 0xd2, 0xf1, 0x07, 0x07, 0xf8, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0x00, 0x00, 0xf7, 0x1b, 0xef, 0xef, 0xef, 0xe9, 0xd1, + 0xf9, 0x07, 0x07, 0xe1, 0x77, 0x2f, 0x02, 0xed, 0xba, 0xba, 0xba, 0xe9, + 0x07, 0xba, 0xe8, 0xe8, 0xba, 0xeb, 0x07, 0x07, 0x77, 0xf0, 0x2f, 0x07, + 0x07, 0x07, 0x00, 0x00, 0xef, 0xeb, 0x10, 0xed, 0xed, 0xed, 0xe9, 0xed, + 0xed, 0xef, 0xd0, 0xf8, 0x07, 0x07, 0x77, 0x2f, 0x01, 0xeb, 0xa2, 0xa2, + 0x00, 0xa2, 0xa2, 0xa2, 0xd0, 0xfa, 0xfd, 0xff, 0xf9, 0x7f, 0xe8, 0x07, + 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x06, 0x00, 0xa2, 0xe8, 0xe8, 0xe8, + 0xe9, 0xd3, 0xf6, 0xec, 0x07, 0x07, 0x73, 0xba, 0x47, 0x04, 0xf1, 0xa2, + 0x00, 0xa2, 0xa2, 0xa2, 0xba, 0xf9, 0xfb, 0xfd, 0xff, 0x3f, 0xff, 0xf5, + 0x2f, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x82, 0x07, 0x00, 0xa2, 0xba, 0xba, + 0xba, 0xe9, 0xba, 0x07, 0xd0, 0xeb, 0xd0, 0xba, 0xf7, 0x07, 0x07, 0x72, + 0x18, 0xd0, 0xd0, 0xd0, 0x7f, 0x7c, 0xba, 0xba, 0xba, 0x01, 0xd0, 0xf5, + 0xf9, 0xfb, 0xfd, 0xff, 0xff, 0x37, 0xfc, 0x07, 0x7f, 0x37, 0x07, 0x07, + 0x07, 0x00, 0x00, 0x10, 0xa2, 0xa2, 0xa2, 0xe9, 0xa2, 0xef, 0xfd, 0xfe, + 0x1c, 0xff, 0xd0, 0xf2, 0x07, 0x07, 0x72, 0xeb, 0xea, 0x30, 0xea, 0xd0, + 0x37, 0x03, 0xf5, 0xba, 0xe8, 0xed, 0x03, 0xf5, 0xf9, 0xfb, 0xfe, 0xff, + 0xf9, 0x47, 0x07, 0xfc, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x01, 0xd0, 0xa2, + 0x00, 0xa2, 0xa2, 0xa2, 0xed, 0xf9, 0xfb, 0xfe, 0xff, 0x38, 0xfb, 0xd0, + 0x07, 0x07, 0x71, 0xea, 0xed, 0xed, 0x30, 0xed, 0xed, 0x37, 0x03, 0xd0, + 0xf1, 0xe8, 0xeb, 0x03, 0xf5, 0xf9, 0xfd, 0xff, 0xf9, 0xd0, 0x47, 0x07, + 0xfc, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x01, 0xf1, 0xba, 0x00, 0xba, 0xba, + 0xeb, 0xf7, 0xf9, 0xfd, 0xff, 0xff, 0x70, 0xfb, 0x07, 0x07, 0x01, 0xd0, + 0xef, 0xef, 0xef, 0x18, 0xef, 0xef, 0xd0, 0x27, 0x04, 0xec, 0xf1, 0xf5, + 0x1f, 0xf7, 0xf7, 0xee, 0x5f, 0x17, 0x77, 0x2f, 0x07, 0xe0, 0x07, 0x07, + 0x03, 0xa2, 0xd1, 0xd1, 0xeb, 0xf1, 0x03, 0xf7, 0xfa, 0xfd, 0xff, 0xff, + 0xe0, 0x07, 0x07, 0x87, 0x01, 0xf7, 0xf3, 0xf3, 0xf3, 0xe9, 0x27, 0x06, + 0x1f, 0xd0, 0xd0, 0xd0, 0x67, 0x1f, 0x77, 0x2f, 0x07, 0xe0, 0x07, 0x07, + 0x05, 0xf2, 0xeb, 0xe8, 0xf1, 0xf7, 0x0e, 0xfb, 0xfe, 0xfd, 0xf5, 0x07, + 0x07, 0x01, 0xf4, 0x13, 0xf3, 0xf3, 0xf3, 0xe9, 0xf3, 0xf7, 0x17, 0x07, + 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0xa2, 0xf5, + 0xf1, 0xf5, 0xf7, 0xf7, 0xa2, 0x07, 0xc1, 0x07, 0x01, 0xd0, 0xf7, 0xf3, + 0xf3, 0xf3, 0xe9, 0x1f, 0xf3, 0xf7, 0xd0, 0x07, 0x07, 0x77, 0x2f, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0xa2, 0xa2, 0xe1, 0x07, 0x07, + 0x04, 0xf7, 0xef, 0xef, 0xef, 0xe9, 0xbf, 0xd1, 0xf9, 0x07, 0x07, 0x77, + 0x2f, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0xd0, + 0x04, 0xef, 0xeb, 0xed, 0xed, 0xed, 0xe9, 0xed, 0xed, 0x3f, 0xef, 0xd0, + 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x05, 0xd0, 0x1b, 0xe8, 0xe8, 0xe8, 0xe9, 0xd3, 0xf6, 0x07, 0x07, + 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe1, 0x07, 0x07, + 0x05, 0xd0, 0xba, 0xba, 0xba, 0xe9, 0x03, 0xba, 0xd0, 0xeb, 0xd0, 0xba, + 0xf7, 0x07, 0x07, 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xe1, 0x07, 0x07, 0x05, 0xd0, 0xa2, 0xa2, 0xa2, 0xe9, 0x03, 0xef, 0xfd, + 0xfe, 0xff, 0xd0, 0xf2, 0x07, 0x07, 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x05, 0xd0, 0xd0, 0xa2, 0xa2, 0xa2, + 0x00, 0xa2, 0xed, 0xf9, 0xfb, 0xfe, 0xff, 0xfb, 0xd0, 0xff, 0x07, 0x07, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x06, + 0xf1, 0xba, 0xba, 0x00, 0xba, 0xeb, 0xf7, 0xf9, 0xfd, 0xff, 0xff, 0xfb, + 0xff, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xd0, 0xd1, 0xd1, 0x00, 0xeb, 0xf1, 0xf7, 0xfa, 0xfd, + 0xff, 0xff, 0xe0, 0xff, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0xf2, 0xeb, 0x01, 0xe8, 0xf1, + 0xf7, 0xfb, 0xfe, 0xfd, 0xf5, 0x07, 0xff, 0x07, 0x77, 0x2f, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x01, 0xd0, 0xf5, 0xf1, + 0x0f, 0xf5, 0xf7, 0xf7, 0xd0, 0x07, 0x07, 0x77, 0x2f, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x05, +}; + +//***************************************************************************** +// +// Thunderstorm Image +// +//***************************************************************************** +const uint8_t g_pui8ThuderStormImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 254, + 0x00, 0x00, 0x00, + 0x7b, 0x3c, 0x00, + 0x6d, 0x3e, 0x0c, + 0x76, 0x42, 0x0c, + 0x7e, 0x45, 0x0a, + 0x86, 0x47, 0x07, + 0x86, 0x4a, 0x0b, + 0x7e, 0x49, 0x11, + 0x8a, 0x4b, 0x09, + 0x86, 0x4b, 0x0d, + 0x8b, 0x4c, 0x0b, + 0x8b, 0x4d, 0x0b, + 0x8d, 0x4e, 0x0b, + 0x8b, 0x4d, 0x0e, + 0x8f, 0x4e, 0x0c, + 0x85, 0x4d, 0x13, + 0x8d, 0x4f, 0x0e, + 0x8f, 0x50, 0x0c, + 0x8b, 0x4f, 0x10, + 0x91, 0x51, 0x0d, + 0x90, 0x51, 0x0f, + 0x93, 0x52, 0x0d, + 0x91, 0x51, 0x10, + 0x92, 0x52, 0x0f, + 0x90, 0x52, 0x13, + 0x93, 0x54, 0x0e, + 0x8c, 0x52, 0x15, + 0x95, 0x54, 0x0e, + 0x92, 0x54, 0x11, + 0x95, 0x55, 0x11, + 0x94, 0x55, 0x12, + 0x98, 0x56, 0x0f, + 0x93, 0x54, 0x15, + 0x96, 0x55, 0x13, + 0x97, 0x56, 0x11, + 0x98, 0x56, 0x13, + 0x98, 0x57, 0x13, + 0x94, 0x57, 0x16, + 0x9a, 0x59, 0x10, + 0x98, 0x57, 0x15, + 0x9a, 0x58, 0x13, + 0x9c, 0x5a, 0x11, + 0x98, 0x58, 0x17, + 0x8a, 0x57, 0x1f, + 0x9c, 0x59, 0x15, + 0x9c, 0x59, 0x17, + 0x9d, 0x5b, 0x13, + 0x9d, 0x5b, 0x15, + 0x99, 0x5b, 0x18, + 0xa0, 0x5d, 0x12, + 0x9e, 0x5b, 0x17, + 0x9c, 0x5c, 0x17, + 0x9f, 0x5c, 0x16, + 0x9f, 0x5c, 0x18, + 0x82, 0x59, 0x29, + 0xa1, 0x5e, 0x14, + 0xa1, 0x5e, 0x17, + 0xa1, 0x5d, 0x19, + 0x98, 0x5d, 0x1e, + 0xa4, 0x60, 0x14, + 0xa1, 0x5f, 0x19, + 0x9f, 0x5e, 0x1c, + 0xa4, 0x60, 0x17, + 0xa4, 0x5f, 0x19, + 0xa4, 0x5f, 0x1b, + 0xa6, 0x63, 0x15, + 0xa4, 0x61, 0x1a, + 0xa4, 0x60, 0x1d, + 0x9f, 0x62, 0x1f, + 0xa7, 0x64, 0x19, + 0xa5, 0x63, 0x1c, + 0xa8, 0x62, 0x1d, + 0xa8, 0x64, 0x1c, + 0xaa, 0x66, 0x18, + 0xa8, 0x64, 0x1e, + 0xaa, 0x64, 0x1e, + 0xa5, 0x64, 0x20, + 0xaa, 0x65, 0x1d, + 0xaa, 0x67, 0x1c, + 0xaa, 0x65, 0x20, + 0xac, 0x66, 0x1f, + 0xac, 0x68, 0x1e, + 0xae, 0x68, 0x1e, + 0xb0, 0x6b, 0x18, + 0xaa, 0x68, 0x21, + 0xad, 0x67, 0x22, + 0xa1, 0x67, 0x29, + 0xb0, 0x69, 0x21, + 0xae, 0x69, 0x22, + 0xb0, 0x69, 0x22, + 0xaf, 0x6c, 0x1d, + 0xb0, 0x69, 0x23, + 0xb0, 0x6b, 0x23, + 0xb0, 0x6d, 0x20, + 0xac, 0x6b, 0x27, + 0xb3, 0x6d, 0x21, + 0xb0, 0x6e, 0x23, + 0xb3, 0x6d, 0x24, + 0xb3, 0x6d, 0x25, + 0xb3, 0x6d, 0x27, + 0x9a, 0x6b, 0x36, + 0xb6, 0x72, 0x1e, + 0xb6, 0x6f, 0x25, + 0xb5, 0x72, 0x23, + 0xb4, 0x70, 0x28, + 0xb7, 0x71, 0x25, + 0xae, 0x70, 0x2b, + 0xb7, 0x71, 0x27, + 0xb8, 0x71, 0x29, + 0xb8, 0x73, 0x27, + 0xb4, 0x73, 0x29, + 0xb9, 0x74, 0x28, + 0xbc, 0x76, 0x23, + 0xb8, 0x76, 0x26, + 0xbb, 0x74, 0x2a, + 0xbb, 0x75, 0x29, + 0xb9, 0x75, 0x2b, + 0xbc, 0x75, 0x2c, + 0x7f, 0x70, 0x4e, + 0xbc, 0x77, 0x2a, + 0xbf, 0x76, 0x2d, + 0xb2, 0x75, 0x35, + 0xbc, 0x78, 0x2c, + 0xbe, 0x7b, 0x26, + 0xbf, 0x79, 0x2c, + 0xc0, 0x78, 0x2f, + 0xbe, 0x7a, 0x2c, + 0xc1, 0x7e, 0x25, + 0xbe, 0x7b, 0x2d, + 0xc1, 0x7b, 0x2d, + 0xc0, 0x7d, 0x2d, + 0xc1, 0x7c, 0x2f, + 0xc2, 0x7c, 0x31, + 0xc1, 0x7e, 0x2f, + 0xc6, 0x7d, 0x32, + 0xc4, 0x7f, 0x2f, + 0xc5, 0x7d, 0x34, + 0xc4, 0x82, 0x2c, + 0xc6, 0x84, 0x28, + 0xc4, 0x80, 0x31, + 0xc1, 0x7d, 0x39, + 0xc4, 0x82, 0x31, + 0xc7, 0x81, 0x32, + 0xcb, 0x80, 0x36, + 0xc7, 0x83, 0x32, + 0xc7, 0x83, 0x33, + 0xc9, 0x83, 0x34, + 0xcd, 0x82, 0x39, + 0xc7, 0x84, 0x38, + 0xcb, 0x85, 0x36, + 0xcb, 0x88, 0x31, + 0xcb, 0x88, 0x36, + 0xce, 0x86, 0x39, + 0xcc, 0x89, 0x37, + 0xce, 0x8f, 0x2d, + 0xd3, 0x87, 0x3d, + 0xce, 0x89, 0x3b, + 0xcd, 0x8b, 0x38, + 0xcd, 0x8b, 0x39, + 0xcf, 0x8b, 0x3a, + 0xce, 0x8c, 0x3b, + 0xd1, 0x8c, 0x3d, + 0x6c, 0x82, 0x76, + 0xd7, 0x8a, 0x40, + 0x34, 0x80, 0x90, + 0xff, 0x86, 0x3a, + 0xd3, 0x8c, 0x3f, + 0xd1, 0x8f, 0x3b, + 0xcd, 0x8a, 0x47, + 0xd1, 0x8f, 0x3d, + 0xdf, 0x8b, 0x40, + 0xd3, 0x8f, 0x3d, + 0xd4, 0x8f, 0x3f, + 0xd3, 0x95, 0x36, + 0xd8, 0x8e, 0x42, + 0xd3, 0x92, 0x3e, + 0xdd, 0x8d, 0x45, + 0xdb, 0x8e, 0x44, + 0xd4, 0x92, 0x40, + 0xd6, 0x92, 0x41, + 0xe0, 0x8f, 0x45, + 0xd4, 0x94, 0x40, + 0xd0, 0x8d, 0x50, + 0xdd, 0x91, 0x45, + 0xe0, 0x90, 0x47, + 0xd6, 0x96, 0x40, + 0xd8, 0x94, 0x45, + 0xe4, 0x91, 0x47, + 0xd8, 0x96, 0x42, + 0xd9, 0x95, 0x45, + 0xd7, 0x97, 0x43, + 0xe7, 0x91, 0x49, + 0xdd, 0x95, 0x46, + 0xe0, 0x94, 0x47, + 0xdb, 0x95, 0x47, + 0xe4, 0x92, 0x4a, + 0xf2, 0x91, 0x47, + 0xdd, 0x95, 0x49, + 0xe1, 0x95, 0x49, + 0xe7, 0x93, 0x4d, + 0xdb, 0x99, 0x46, + 0xd9, 0x9a, 0x45, + 0xe4, 0x96, 0x4a, + 0xdd, 0x99, 0x47, + 0xe0, 0x98, 0x49, + 0xe6, 0x96, 0x4b, + 0xe1, 0x98, 0x4a, + 0xec, 0x96, 0x4a, + 0xe3, 0x97, 0x4c, + 0xe7, 0x96, 0x4d, + 0xde, 0x9a, 0x49, + 0xe4, 0x98, 0x4b, + 0xdb, 0x9c, 0x47, + 0xdd, 0x9c, 0x48, + 0xe0, 0x9b, 0x4a, + 0xe0, 0x9b, 0x4c, + 0xe4, 0x9a, 0x4d, + 0xe2, 0x9b, 0x4c, + 0xde, 0x9d, 0x4a, + 0xe0, 0x9d, 0x4a, + 0xdf, 0x98, 0x56, + 0xff, 0x95, 0x53, + 0xd2, 0x97, 0x61, + 0xe4, 0x9c, 0x5d, + 0x13, 0x91, 0xc1, + 0xef, 0x9e, 0x58, + 0xff, 0xa0, 0x55, + 0x00, 0x90, 0xd2, + 0xef, 0xa2, 0x67, + 0x07, 0x9d, 0xd7, + 0xf6, 0xaa, 0x6b, + 0xd7, 0xa7, 0x80, + 0x00, 0x9f, 0xe0, + 0xed, 0xad, 0x78, + 0x00, 0xa3, 0xe3, + 0xfe, 0xac, 0x77, + 0x00, 0xa4, 0xe5, + 0xe7, 0xae, 0x7d, + 0x00, 0xa6, 0xe9, + 0x00, 0xab, 0xec, + 0xfe, 0xb2, 0x84, + 0x04, 0xad, 0xeb, + 0xfd, 0xb9, 0x83, + 0xee, 0xb8, 0x8c, + 0x00, 0xb1, 0xf3, + 0xfc, 0xbc, 0x8f, + 0x00, 0xb9, 0xfa, + 0xec, 0xc0, 0x9b, + 0xf9, 0xc6, 0x9c, + 0xf0, 0xcc, 0xae, + 0xfa, 0xd0, 0xae, + 0xf3, 0xd5, 0xbc, + 0xf9, 0xdb, 0xc2, + 0xf8, 0xde, 0xca, + 0xfb, 0xe5, 0xd5, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x00, + 0x00, 0xfa, 0xfb, 0x03, 0xfc, 0xfd, 0xfd, 0xfb, 0xfa, 0xf5, 0x07, 0x07, + 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x06, 0xf5, 0xfb, 0xfd, 0xfd, 0xfd, 0x00, 0xfd, 0xfc, 0xfb, 0xfc, 0xfd, + 0xfd, 0xfe, 0xfd, 0x3f, 0xfc, 0xf8, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0xf9, 0x00, 0xfd, 0xfd, + 0xfc, 0xf8, 0xe9, 0xe4, 0xd1, 0xbf, 0x00, 0xbf, 0xbf, 0xd1, 0xe1, 0xe9, + 0xf7, 0xfb, 0xfd, 0x3f, 0xfd, 0xfb, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0xf8, 0xfc, 0x00, 0xfc, 0xf9, + 0xe9, 0xd1, 0xbf, 0xd1, 0xd1, 0xc7, 0x00, 0xd1, 0xc7, 0xc7, 0xc7, 0xc7, + 0xc7, 0xbf, 0xbf, 0x07, 0xe4, 0xf9, 0xfd, 0xfd, 0xfa, 0x07, 0xbf, 0x77, + 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x03, 0xfb, + 0xfb, 0xfb, 0xe9, 0xbf, 0xcd, 0xd1, 0x30, 0xd1, 0xd1, 0xe9, 0xd1, 0xc7, + 0xc7, 0xc7, 0xc7, 0x03, 0xc7, 0xbf, 0xdf, 0xf9, 0xfd, 0xfd, 0x05, 0xcd, + 0xff, 0x97, 0x4f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x05, + 0xfb, 0xfb, 0xf3, 0xc7, 0xcd, 0xcd, 0x4c, 0xcd, 0xe9, 0xd1, 0xd1, 0xc2, + 0x9a, 0xbf, 0xbf, 0x03, 0xbf, 0xbb, 0xe9, 0xfc, 0xfd, 0xf8, 0x02, 0xe2, + 0xff, 0xc6, 0x87, 0x3f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, + 0x00, 0x00, 0xfb, 0xfb, 0xe4, 0xbf, 0x00, 0xc7, 0xd1, 0xcd, 0xcd, 0xd1, + 0xd1, 0xd1, 0xd1, 0xc0, 0xdb, 0xa1, 0xcd, 0xc3, 0xc3, 0xbf, 0xbf, 0xbb, + 0x01, 0xd1, 0xf9, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x02, 0xfb, 0xfb, + 0xdf, 0xc3, 0xc3, 0x03, 0xcd, 0xcd, 0xcd, 0xd3, 0xd3, 0xd3, 0xe9, 0xd2, + 0x80, 0x99, 0xcd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbb, 0x01, 0xbb, 0xf9, + 0xfd, 0xf7, 0x00, 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x00, 0x00, 0xf9, 0xfb, 0xdf, 0xc6, + 0x01, 0xc3, 0xca, 0xd0, 0xca, 0xd3, 0xd3, 0xd3, 0xe9, 0x80, 0xd4, 0xd0, + 0xd0, 0xca, 0xc3, 0xc3, 0xc3, 0xbb, 0x00, 0xbb, 0xbb, 0xbb, 0xbb, 0xf9, + 0xfc, 0xed, 0x00, 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf9, 0xfb, 0xe9, 0x02, 0xc1, 0xc6, + 0xca, 0xd0, 0xd0, 0xd0, 0xe9, 0xd8, 0x28, 0xd8, 0xd8, 0xe9, 0xd8, 0x9b, + 0xc6, 0xc6, 0xc6, 0x00, 0xc6, 0xbb, 0xb8, 0xb8, 0xb8, 0xd0, 0xfb, 0xfb, + 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xfc, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0xf9, 0xf3, 0x00, 0xb8, 0xc6, 0xc6, 0xc6, 0xc6, + 0xd0, 0xd0, 0xd0, 0x08, 0xd0, 0xd8, 0xd8, 0xd8, 0xe9, 0xd8, 0xd9, 0xd8, + 0x40, 0xd3, 0x92, 0xc6, 0xc6, 0xc1, 0xb8, 0xb8, 0xb8, 0x00, 0xb4, 0xb4, + 0xe9, 0xfc, 0xf9, 0x00, 0x00, 0x00, 0xc0, 0xe9, 0xd2, 0xfa, 0xfd, 0xfe, + 0xfe, 0xfe, 0xfe, 0x3f, 0xfd, 0xfa, 0x77, 0x2f, 0x77, 0x2f, 0x07, 0x07, + 0xc0, 0x07, 0x07, 0x00, 0xf9, 0xf9, 0xdc, 0xc1, 0xc1, 0x00, 0xc6, 0xc6, + 0xce, 0xce, 0xce, 0xce, 0xd9, 0xd9, 0x64, 0xd9, 0xe9, 0xd2, 0xd7, 0xd9, + 0x81, 0xc6, 0xc6, 0x00, 0xc1, 0xb8, 0xb8, 0xb8, 0xb4, 0xb0, 0xaa, 0xf7, + 0x08, 0xfb, 0x00, 0x00, 0x00, 0xe9, 0x00, 0xf8, 0xfd, 0x00, 0xfb, 0xf3, + 0xe4, 0xe1, 0xc7, 0xc7, 0xe1, 0xe4, 0x0f, 0xf7, 0xfd, 0xfd, 0xf3, 0x5d, + 0x25, 0x97, 0x4f, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0xf7, 0xed, + 0x00, 0xb7, 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xcc, 0xcc, 0x00, 0xce, 0xce, + 0xd7, 0xd7, 0xd9, 0xd9, 0xd9, 0xd9, 0x00, 0xd9, 0xd7, 0xd7, 0xd6, 0xd6, + 0xce, 0xce, 0xcc, 0x00, 0xc5, 0xc6, 0xc1, 0xb7, 0xb8, 0xb7, 0xb0, 0xb0, + 0x00, 0xb0, 0xdf, 0xfb, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0xfc, + 0xf9, 0xe4, 0xbf, 0xcd, 0xd1, 0xd1, 0x00, 0xd1, 0xd1, 0xd1, 0xc7, 0xbf, + 0xbf, 0xe9, 0xfc, 0x7f, 0xfc, 0x5a, 0x3a, 0xc6, 0x87, 0x3f, 0x07, 0x07, + 0x80, 0x06, 0xdc, 0xe4, 0xe6, 0xe6, 0xe6, 0xe4, 0x00, 0x02, 0x00, 0xf7, + 0xf7, 0xc5, 0xc5, 0xc5, 0xe9, 0xcc, 0x00, 0xcc, 0xd2, 0xd2, 0xd6, 0xd6, + 0xd6, 0xd6, 0xd6, 0x30, 0xd7, 0xd7, 0xe1, 0xb2, 0xcc, 0xcc, 0xc5, 0xc5, + 0x00, 0xc1, 0xb7, 0xb7, 0xb7, 0xb1, 0xb1, 0xaa, 0xf7, 0x00, 0xfb, 0x00, + 0x00, 0x00, 0xf3, 0xfc, 0xe9, 0xbf, 0x10, 0xd1, 0xd1, 0xd1, 0xe9, 0xd1, + 0xd1, 0xcd, 0xcd, 0x07, 0xcd, 0xbf, 0xbf, 0xf3, 0xfe, 0x51, 0x39, 0xd4, + 0xf8, 0xa7, 0x5f, 0x17, 0x07, 0x06, 0xe9, 0xf3, 0xf7, 0x04, 0xf7, 0xf7, + 0xf8, 0xf9, 0xf9, 0xd1, 0xf7, 0xed, 0x10, 0xc5, 0xc5, 0xc5, 0xe9, 0xc5, + 0xd2, 0xd2, 0xd2, 0x06, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xe9, 0xd1, 0xd6, + 0x80, 0x89, 0xd2, 0xc5, 0xc0, 0xc0, 0xc0, 0xb7, 0xb7, 0x00, 0xb1, 0xb1, + 0xb1, 0xdf, 0xfb, 0xe7, 0x00, 0xf3, 0x00, 0xfb, 0xdf, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xd3, 0x80, 0xd3, 0xcd, 0xc3, 0xc3, 0xc3, 0xbb, 0xe4, 0xfd, + 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xc0, 0x07, 0x02, + 0xe6, 0xed, 0xf3, 0xf3, 0xf3, 0xf3, 0x00, 0xe9, 0xe4, 0xe4, 0xe4, 0xe4, + 0xe9, 0xed, 0xf3, 0x00, 0xed, 0xc5, 0xc5, 0xc5, 0xc5, 0xc2, 0xc2, 0xc0, + 0x00, 0xcb, 0xcb, 0xd2, 0xd2, 0xd5, 0xda, 0xda, 0xda, 0xc0, 0xe9, 0xd3, + 0xd2, 0xd2, 0xcb, 0xd2, 0xcc, 0xcc, 0x00, 0xcc, 0xc0, 0xc5, 0xc0, 0xb7, + 0xb7, 0xb7, 0xc5, 0x00, 0xf9, 0xf9, 0xe9, 0xfb, 0xdf, 0xca, 0xca, 0xca, + 0x10, 0xd3, 0xd3, 0xd8, 0xe9, 0xd3, 0xd3, 0xd3, 0xd0, 0x00, 0xca, 0xc3, + 0xc3, 0xc3, 0xbb, 0xe9, 0xfd, 0x00, 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x00, 0x00, 0xe4, 0xed, 0xed, 0xf3, 0xe9, 0xdf, 0xc7, + 0x00, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb8, 0xb8, 0xb7, 0x04, 0xb1, 0xb1, + 0xc2, 0xc2, 0xc2, 0xe9, 0xc8, 0xc2, 0x02, 0xcb, 0xcb, 0xcb, 0xd5, 0xd5, + 0xd5, 0xe9, 0xda, 0x80, 0xcb, 0xcb, 0xd5, 0xd2, 0xd2, 0xd2, 0xd2, 0xc5, + 0x00, 0xc5, 0xc0, 0xc0, 0xc0, 0xc5, 0xc2, 0xb7, 0xf3, 0x00, 0xf3, 0xfb, + 0xe9, 0xca, 0xca, 0xca, 0xd0, 0xd0, 0x00, 0xd3, 0xd8, 0xd8, 0xd8, 0xd8, + 0xd8, 0xd3, 0xd0, 0x00, 0xd0, 0xca, 0xc3, 0xc6, 0xbb, 0xb8, 0xaa, 0xf3, + 0x0f, 0xfb, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x06, + 0xe9, 0xed, 0xed, 0xe4, 0xc7, 0xbb, 0x00, 0xc3, 0xbb, 0xbb, 0xbb, 0xbb, + 0xb8, 0xb8, 0xb7, 0x00, 0xb0, 0xb7, 0xb1, 0xae, 0xae, 0xb3, 0xba, 0xbd, + 0x04, 0xbd, 0xbd, 0xc8, 0xc8, 0xc8, 0xe9, 0xd5, 0xd5, 0x60, 0xd5, 0xe9, + 0xd4, 0xda, 0xda, 0xd2, 0xd2, 0xcb, 0x00, 0xc8, 0xc2, 0xc2, 0xc0, 0xc2, + 0xc5, 0xc5, 0xc5, 0x00, 0xe9, 0xf7, 0xf7, 0xc6, 0xd0, 0xd3, 0xd3, 0xd3, + 0x08, 0xce, 0xd9, 0xd9, 0xd9, 0xe9, 0xd9, 0xd9, 0xce, 0x00, 0xce, 0xc6, + 0xc1, 0xb8, 0xb8, 0xb4, 0xb4, 0xfb, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0x80, 0x04, 0xdc, 0xe9, 0xe9, 0xe4, 0xc3, 0xb4, 0xb4, + 0x00, 0xb8, 0xb8, 0xb8, 0xb8, 0xb4, 0xb7, 0xb0, 0xb7, 0x00, 0xb1, 0xb1, + 0xae, 0xae, 0xae, 0xb3, 0xb3, 0xb3, 0x00, 0xba, 0xbd, 0xbd, 0xc9, 0xc9, + 0xc9, 0xc8, 0xc9, 0x0c, 0xc9, 0xd4, 0xd4, 0xd4, 0xe9, 0xd1, 0xd5, 0xd5, + 0x00, 0xd5, 0xd5, 0xd5, 0xd4, 0xcb, 0xc8, 0xc8, 0xc0, 0x00, 0xc1, 0xc6, + 0xd0, 0xd1, 0xdc, 0xdc, 0xdf, 0xf9, 0x00, 0xdf, 0xc6, 0xce, 0xd9, 0xd9, + 0xd9, 0xd9, 0xd7, 0x20, 0xd7, 0xd7, 0xe9, 0xd7, 0xd6, 0xce, 0xcc, 0xc5, + 0x00, 0xc1, 0xc1, 0xb7, 0xb0, 0xb0, 0xe9, 0xfb, 0x00, 0x3f, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x02, 0x01, 0xdc, 0xe4, 0xe4, 0xdc, 0xb4, + 0xb4, 0xb4, 0xe9, 0x00, 0xb4, 0xb0, 0xb1, 0xb1, 0xb1, 0xae, 0xae, 0xae, + 0x00, 0xae, 0xae, 0xb3, 0xb3, 0xb3, 0xb3, 0xba, 0xbc, 0x03, 0xbe, 0xbe, + 0xbd, 0xc9, 0xc9, 0xc9, 0xe9, 0xd4, 0x00, 0xd4, 0xd5, 0xd5, 0xd5, 0xd4, + 0xc8, 0xc8, 0xc8, 0x00, 0xc0, 0xe1, 0xe9, 0xf3, 0xf8, 0xf8, 0xf9, 0xf9, + 0x00, 0xf8, 0xf7, 0xf3, 0xce, 0xc6, 0xc6, 0xce, 0xd6, 0x00, 0xd9, 0xd9, + 0xd9, 0xdb, 0xd7, 0xd7, 0xd7, 0xd7, 0x00, 0xd6, 0xd6, 0xd2, 0xd2, 0xc5, + 0xc5, 0xc0, 0xb7, 0x01, 0xb1, 0xb1, 0xb1, 0xfb, 0x00, 0x00, 0x00, 0xe9, + 0xf8, 0xd4, 0xa7, 0x5f, 0x17, 0x01, 0xc5, 0xe4, 0xdf, 0x08, 0xb8, 0xb0, + 0xb0, 0xb0, 0xe9, 0xb1, 0xb1, 0xb1, 0x00, 0xb1, 0xae, 0xae, 0xae, 0xae, + 0xac, 0xac, 0xac, 0x00, 0xac, 0xb2, 0xb2, 0xb3, 0xb5, 0xb9, 0xbe, 0xbe, + 0x60, 0xbe, 0xe9, 0xd4, 0xbe, 0xc9, 0xc9, 0xd4, 0xd4, 0x00, 0xd4, 0xc9, + 0xd4, 0xc9, 0xc8, 0xe1, 0xe9, 0xf3, 0x00, 0xe9, 0xe4, 0xe1, 0xd1, 0xd1, + 0xd1, 0xdf, 0xdf, 0x00, 0xd0, 0xce, 0xc5, 0xc5, 0xcc, 0xd2, 0xd6, 0xd7, + 0x00, 0xdb, 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0xd2, 0xcb, + 0xc2, 0xc0, 0xbd, 0xb1, 0xae, 0xae, 0x03, 0xa3, 0xf3, 0xe7, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xe0, 0xa7, 0x5f, 0x17, 0x00, 0x00, 0xdf, 0xdf, 0xb1, + 0x00, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xae, 0xae, 0xae, 0x84, 0xe9, 0xae, + 0xac, 0xac, 0xac, 0xe9, 0xac, 0xb2, 0x00, 0xb2, 0xb2, 0xb5, 0xb9, 0xb9, + 0xb9, 0xbe, 0xbe, 0x62, 0xbe, 0xe9, 0xd3, 0xc9, 0xc9, 0xc9, 0xe9, 0xc9, + 0x00, 0xc6, 0xe4, 0xed, 0xe4, 0xd1, 0xbf, 0xbf, 0xc3, 0x00, 0xbb, 0xbb, + 0xb8, 0xb8, 0xb7, 0xb7, 0xc0, 0xc0, 0x00, 0xc0, 0xcb, 0xcb, 0xd5, 0xd5, + 0xda, 0xda, 0xda, 0x00, 0xd5, 0xd5, 0xd5, 0xd5, 0xd4, 0xcb, 0xc8, 0xc8, + 0x00, 0xbd, 0xbd, 0xae, 0xae, 0xa3, 0xa3, 0xdf, 0xf7, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x00, 0x00, 0xdf, 0xdf, 0xb1, 0xa3, + 0x9b, 0xa3, 0xa3, 0x40, 0xa3, 0xe9, 0xa3, 0xa3, 0xac, 0xa6, 0xa6, 0xa6, + 0x80, 0xe9, 0xa9, 0xa9, 0xa9, 0xaf, 0xb2, 0xb2, 0xb2, 0x06, 0xb2, 0xb2, + 0xb5, 0xb5, 0xb5, 0xe9, 0xd3, 0xbc, 0x00, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, + 0xc9, 0xc5, 0xe4, 0x00, 0xe4, 0xc7, 0xbb, 0xbb, 0xbb, 0xbb, 0xb8, 0xb8, + 0x00, 0xb7, 0xb7, 0xb7, 0xb1, 0xbd, 0xbd, 0xbd, 0xc8, 0x00, 0xc8, 0xcb, + 0xcb, 0xd5, 0xd5, 0xd5, 0xda, 0xd5, 0x00, 0xd4, 0xd4, 0xd4, 0xc8, 0xc8, + 0xc8, 0xbd, 0xbd, 0x00, 0xba, 0xae, 0xae, 0xa6, 0x9b, 0xb6, 0xf7, 0x00, + 0x3e, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xdc, 0x04, 0xdc, 0xb1, + 0x9b, 0x9b, 0x9b, 0xe9, 0x9b, 0x9b, 0x00, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, + 0xa1, 0xa1, 0xa1, 0x00, 0xa1, 0xa1, 0xa7, 0xa9, 0xa9, 0xa9, 0xaf, 0xaf, + 0x42, 0xaf, 0xe9, 0xaf, 0xb5, 0xb5, 0xb5, 0xc4, 0xb9, 0x20, 0xbe, 0xb9, + 0xe9, 0xb7, 0xe4, 0xdf, 0xb4, 0xb4, 0x40, 0xb4, 0xe9, 0xb7, 0xb7, 0xae, + 0xae, 0xae, 0xb3, 0x00, 0xb3, 0xba, 0xbc, 0xbd, 0xc9, 0xc9, 0xc8, 0xc8, + 0x00, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xc9, 0xc9, 0xc9, 0x00, 0xbe, 0xbe, + 0xbe, 0xb3, 0xb3, 0xac, 0xa6, 0xa6, 0x03, 0x9b, 0x9b, 0xf7, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xe0, 0xa7, 0x5f, 0x17, 0xdc, 0xb6, 0x93, 0x93, 0x93, + 0x00, 0x93, 0x93, 0x98, 0x98, 0x98, 0x9b, 0x9b, 0x9b, 0x10, 0xa1, 0xa1, + 0xa1, 0xe9, 0xa1, 0xa7, 0xa7, 0xa7, 0x80, 0xe9, 0xa7, 0xa7, 0xa9, 0xa9, + 0xaf, 0xaf, 0xa9, 0x20, 0xaf, 0xa9, 0xca, 0xaf, 0xaf, 0xb2, 0xb2, 0xb2, + 0x00, 0xb2, 0xb2, 0xb3, 0xdf, 0xdc, 0xaa, 0xa3, 0xaa, 0x00, 0xb1, 0xb1, + 0xb1, 0xb1, 0xae, 0xae, 0xae, 0xb3, 0x00, 0xb3, 0xb3, 0xb3, 0xb9, 0xbc, + 0xbc, 0xbc, 0xbe, 0x24, 0xbe, 0xbe, 0xe9, 0xc9, 0xc9, 0xc1, 0xb5, 0xb9, + 0x00, 0xb5, 0xb3, 0xb2, 0xac, 0xa1, 0x9b, 0x9b, 0x9b, 0x00, 0xf3, 0xde, + 0xed, 0xf3, 0xf7, 0xf7, 0xf3, 0xed, 0x0f, 0xde, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x02, 0xc5, 0xb6, 0x9b, 0x93, 0x93, 0x93, 0xe9, 0x93, + 0x00, 0x98, 0x98, 0x98, 0x9c, 0x9c, 0x9f, 0x9f, 0x9f, 0x23, 0x9f, 0xa0, + 0xe9, 0xa7, 0xa7, 0xa7, 0xe9, 0xd4, 0x80, 0xa3, 0xa9, 0xaf, 0xaf, 0xaf, + 0xaf, 0xa9, 0xaf, 0x00, 0xc5, 0xdc, 0xa3, 0xa3, 0x9b, 0xa3, 0xa3, 0xa3, + 0x08, 0xae, 0xac, 0xac, 0xac, 0xe9, 0xb2, 0xb2, 0xb2, 0x0c, 0xb5, 0xb9, + 0xb9, 0xb9, 0xe9, 0xd1, 0xbe, 0xb9, 0x00, 0xb2, 0xb2, 0xaf, 0xaf, 0xaf, + 0xaf, 0xa9, 0xa1, 0x00, 0x9f, 0x9c, 0x98, 0x98, 0xde, 0xe7, 0xe7, 0xde, + 0x00, 0xb6, 0xb6, 0xb6, 0xde, 0xe7, 0xf3, 0xed, 0xb6, 0x1e, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0xb6, 0x0c, 0xa8, 0x8f, 0x8f, 0x8f, 0xe9, + 0xd1, 0x95, 0x95, 0x00, 0x98, 0x98, 0x9c, 0x9e, 0x9e, 0x9c, 0x9f, 0x9e, + 0x00, 0x9d, 0x9e, 0x9e, 0x9e, 0x9f, 0xa0, 0x9f, 0x9f, 0x41, 0x9f, 0xe9, + 0x9f, 0x9e, 0xa0, 0xa0, 0x9f, 0x91, 0x00, 0xa1, 0xa1, 0xa1, 0xa7, 0xa1, + 0xa6, 0xdc, 0x9b, 0x20, 0x9b, 0x9b, 0xe9, 0xa1, 0xa1, 0xab, 0xac, 0xab, + 0x01, 0xa9, 0xa7, 0xab, 0xab, 0xaf, 0xaf, 0xaf, 0xe9, 0x80, 0xd4, 0xaf, + 0xb2, 0xaf, 0xa7, 0xa9, 0xa9, 0xa7, 0x00, 0xa1, 0xa0, 0x9c, 0x9c, 0x98, + 0x95, 0x93, 0x8f, 0x20, 0x8f, 0x8f, 0xe9, 0x8f, 0x8f, 0x86, 0x8f, 0xb6, + 0x07, 0xe7, 0xe7, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x81, 0x5a, 0x94, + 0xa8, 0x93, 0x86, 0x86, 0x86, 0xe9, 0x00, 0x86, 0x8e, 0x92, 0x92, 0x92, + 0x95, 0x97, 0x99, 0x1e, 0x99, 0x99, 0x9d, 0xe1, 0xc9, 0xbf, 0x82, 0x97, + 0x00, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9c, 0x9f, 0xa8, 0x00, 0xa8, 0x93, + 0x93, 0x93, 0x93, 0x95, 0x98, 0x9c, 0x03, 0x9f, 0x9f, 0x9f, 0xa7, 0xa7, + 0xa7, 0xe9, 0xd4, 0xc0, 0xa1, 0x73, 0xa0, 0xa0, 0x9f, 0x9f, 0x9e, 0x9e, + 0x00, 0x99, 0x97, 0x95, 0x95, 0x95, 0x94, 0x94, 0x8f, 0x00, 0x92, 0x92, + 0x8f, 0x8f, 0x86, 0x86, 0x86, 0x86, 0x01, 0x86, 0xb6, 0xe7, 0xa8, 0x00, + 0x00, 0x00, 0xe9, 0xc3, 0xd4, 0xa7, 0x00, 0x00, 0xa8, 0xa8, 0x02, 0xe2, + 0x00, 0x86, 0x8e, 0x92, 0x92, 0x92, 0x95, 0x97, 0x97, 0x60, 0x97, 0xe9, + 0xd4, 0x97, 0x97, 0x99, 0x99, 0x99, 0x8a, 0xe9, 0x99, 0x99, 0x97, 0x42, + 0x99, 0x89, 0xb6, 0x00, 0x93, 0x8f, 0x8f, 0x8f, 0x8e, 0x92, 0x95, 0x95, + 0x01, 0x99, 0x9d, 0x9d, 0x9e, 0x9d, 0x9d, 0x9d, 0xe9, 0x80, 0xd4, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x9e, 0x9f, 0x20, 0x99, 0x97, 0xb9, 0x97, 0x95, + 0x95, 0x92, 0x92, 0x00, 0x92, 0x94, 0x92, 0x92, 0x8e, 0x8e, 0x8e, 0x8e, + 0x00, 0x8e, 0x86, 0x86, 0x86, 0x86, 0x7d, 0x94, 0xde, 0x0e, 0xa8, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0xa8, 0x94, 0x84, 0x84, 0x7d, + 0x84, 0x83, 0x83, 0x00, 0x83, 0x83, 0x87, 0x86, 0x8e, 0x8e, 0x90, 0x91, + 0x18, 0x92, 0x92, 0x92, 0xe9, 0xd3, 0x95, 0x97, 0x97, 0x02, 0x97, 0x95, + 0x97, 0x95, 0x95, 0x95, 0x67, 0x92, 0x00, 0x94, 0xa8, 0x86, 0x86, 0x86, + 0x86, 0x86, 0x8e, 0x40, 0x91, 0x1a, 0x99, 0x99, 0x9d, 0x99, 0x99, 0x97, + 0x2e, 0x97, 0x97, 0xe9, 0x95, 0x04, 0x59, 0xbb, 0x91, 0x20, 0x91, 0x91, + 0xe9, 0x91, 0x91, 0x8e, 0x91, 0x8e, 0x00, 0x8e, 0x8e, 0x8b, 0x86, 0x84, + 0x84, 0x83, 0x7d, 0x03, 0x8c, 0xde, 0x64, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0x80, 0xa7, 0x94, 0x88, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x00, 0x81, 0x81, + 0x83, 0x83, 0x87, 0x87, 0x8b, 0x8e, 0x02, 0x8e, 0x90, 0x8e, 0x90, 0x90, + 0x90, 0xe9, 0x91, 0x30, 0x91, 0x91, 0xe9, 0xd1, 0x90, 0x8e, 0x8e, 0x8e, + 0xc0, 0xe9, 0xd2, 0x91, 0x91, 0x94, 0x94, 0x7d, 0x7d, 0x00, 0x7d, 0x83, + 0x84, 0x84, 0x8b, 0x8e, 0x91, 0x92, 0x21, 0x92, 0x92, 0xe9, 0x92, 0x91, + 0x91, 0x90, 0x04, 0x0b, 0x8b, 0x8b, 0x8b, 0x8e, 0x49, 0x8b, 0xa5, 0x89, + 0x80, 0xd4, 0x8b, 0x87, 0x87, 0x83, 0x83, 0x7d, 0x78, 0x03, 0x78, 0x8c, + 0xde, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x90, 0xa6, 0x79, 0x8c, 0x29, 0x78, + 0x78, 0x78, 0x7c, 0x00, 0x7c, 0x7e, 0x82, 0x82, 0x83, 0x87, 0x87, 0x87, + 0x00, 0x87, 0x8b, 0x8d, 0x8d, 0x8b, 0x8b, 0x8b, 0x8b, 0x02, 0x8d, 0x8e, + 0x8e, 0x8e, 0x8b, 0x8b, 0x7a, 0x87, 0x00, 0x83, 0x87, 0x83, 0x83, 0x83, + 0x83, 0x83, 0x85, 0x80, 0x49, 0x8c, 0x88, 0x78, 0x7d, 0x7c, 0x7d, 0x81, + 0x00, 0x83, 0x84, 0x87, 0x8b, 0x8b, 0x8e, 0x90, 0x8e, 0x02, 0x8d, 0x8b, + 0x8b, 0x87, 0x87, 0x84, 0x12, 0x81, 0x22, 0x81, 0x81, 0xe9, 0x81, 0x84, + 0x87, 0x99, 0x82, 0x00, 0x82, 0x83, 0x82, 0x85, 0x85, 0x85, 0x87, 0x87, + 0x60, 0x87, 0xe9, 0xd1, 0x83, 0x82, 0x81, 0x7c, 0x78, 0x01, 0x75, 0x72, + 0xa8, 0xa8, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa5, 0x8c, 0x8c, 0x75, + 0x72, 0x72, 0x75, 0x00, 0x75, 0x77, 0x77, 0x77, 0x7e, 0x7e, 0x81, 0x82, + 0x02, 0x82, 0x82, 0x83, 0x85, 0x85, 0x85, 0xe9, 0x87, 0x00, 0x8b, 0x87, + 0x87, 0x85, 0x82, 0x81, 0x81, 0x81, 0x82, 0xe9, 0x7c, 0x81, 0x7c, 0x7c, + 0x7c, 0xa9, 0x82, 0x00, 0x83, 0x83, 0x83, 0x8c, 0x7d, 0x75, 0x75, 0x75, + 0x00, 0x75, 0x78, 0x81, 0x81, 0x83, 0x85, 0x85, 0x87, 0x00, 0x85, 0x85, + 0x83, 0x83, 0x81, 0x7e, 0x7c, 0x7e, 0x01, 0x7c, 0x7c, 0x78, 0x77, 0x77, + 0x75, 0x77, 0x31, 0x02, 0x77, 0x7c, 0x81, 0x7e, 0x7e, 0x7e, 0x69, 0x7e, + 0x08, 0x7e, 0x82, 0x82, 0x82, 0xe9, 0x82, 0x85, 0x85, 0x40, 0x85, 0xb1, + 0x7e, 0x7e, 0x77, 0x72, 0x6c, 0x74, 0x0e, 0xa8, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa5, 0x8c, 0x08, 0x7d, 0x72, 0x72, 0x72, 0xe9, 0x72, 0x72, 0x77, + 0x00, 0x7a, 0x7e, 0x7e, 0x7e, 0x80, 0x82, 0x82, 0x82, 0x80, 0xe9, 0x82, + 0x83, 0x83, 0x81, 0x7e, 0x7e, 0x7c, 0x00, 0x7e, 0x7c, 0x7a, 0x7c, 0x77, + 0x77, 0x77, 0x77, 0x10, 0x7a, 0x7a, 0x7a, 0xe1, 0x7c, 0x80, 0x80, 0x7e, + 0x00, 0x7d, 0x75, 0x6c, 0x6c, 0x72, 0x72, 0x72, 0x77, 0x02, 0x7c, 0x7c, + 0x7e, 0x7e, 0x7e, 0x7e, 0x1a, 0x73, 0x00, 0x72, 0x72, 0x6f, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6d, 0x00, 0x6f, 0x6d, 0x6f, 0x6c, 0x6f, 0x6f, 0x72, 0x73, + 0x08, 0x6f, 0x73, 0x73, 0x73, 0x41, 0x77, 0x7a, 0x7e, 0x04, 0x7e, 0x7e, + 0x82, 0x82, 0x82, 0xe9, 0x82, 0x7e, 0x00, 0x7e, 0x77, 0x73, 0x6f, 0x6c, + 0x66, 0x8c, 0x64, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x8c, 0x7d, + 0x00, 0x6c, 0x6c, 0x6c, 0x6b, 0x6c, 0x6c, 0x6d, 0x72, 0x00, 0x74, 0x73, + 0x77, 0x77, 0x77, 0x7e, 0x7a, 0x7e, 0x20, 0x7e, 0x7e, 0xe9, 0x7e, 0x7c, + 0x77, 0x73, 0x77, 0x11, 0x72, 0x72, 0x72, 0xe9, 0x6f, 0x6f, 0x6f, 0xe9, + 0x80, 0xd1, 0x73, 0x77, 0x75, 0x77, 0x75, 0x6c, 0x66, 0x08, 0x6b, 0x69, + 0x6b, 0x6d, 0x99, 0x73, 0x73, 0x73, 0x00, 0x73, 0x6f, 0x6f, 0x6d, 0x6b, + 0x6b, 0x66, 0x66, 0x0c, 0x66, 0x66, 0x66, 0x62, 0xd3, 0xa9, 0x69, 0x6b, + 0x00, 0x66, 0x69, 0x69, 0x6b, 0x6b, 0x6d, 0x6f, 0x6f, 0x00, 0x73, 0x73, + 0x77, 0x77, 0x7e, 0x7b, 0x7e, 0x7e, 0x40, 0x7e, 0xd9, 0x77, 0x77, 0x6f, + 0x6d, 0x66, 0x62, 0x07, 0x6e, 0x8c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, + 0x00, 0x79, 0x74, 0x66, 0x68, 0x66, 0x68, 0x6b, 0x6b, 0x00, 0x6b, 0x6b, + 0x6d, 0x6f, 0x6f, 0x73, 0x73, 0x77, 0x20, 0x77, 0x77, 0xe9, 0x77, 0x77, + 0x73, 0x6f, 0x6f, 0x00, 0x6f, 0x6d, 0x6d, 0x6d, 0x6b, 0x6d, 0x69, 0x69, + 0x20, 0x69, 0x6b, 0xe1, 0x69, 0x69, 0x6d, 0x6b, 0x6c, 0x80, 0x61, 0x74, + 0x68, 0x5b, 0x5c, 0x61, 0x61, 0x66, 0x10, 0x66, 0x69, 0x66, 0x39, 0x66, + 0x66, 0x66, 0x61, 0x04, 0x61, 0x61, 0x5b, 0x5b, 0x5b, 0xe9, 0x5b, 0x5b, + 0x00, 0x59, 0x59, 0x59, 0x59, 0x5c, 0x59, 0x61, 0x61, 0x04, 0x5c, 0x5c, + 0x61, 0x62, 0x61, 0x29, 0x69, 0x69, 0x00, 0x6d, 0x6d, 0x6f, 0x71, 0x71, + 0x77, 0x77, 0x77, 0x00, 0x77, 0x73, 0x6f, 0x71, 0x69, 0x66, 0x61, 0x5c, + 0x07, 0x5b, 0x8c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x00, 0x74, 0x62, + 0x62, 0x62, 0x62, 0x62, 0x66, 0x66, 0x00, 0x66, 0x6b, 0x6b, 0x6b, 0x6d, + 0x6d, 0x6f, 0x6f, 0x41, 0x6f, 0xe2, 0x6d, 0x6d, 0x6d, 0x69, 0x69, 0x61, + 0xf0, 0x49, 0x31, 0x12, 0x9a, 0x6b, 0x6b, 0x6c, 0x6c, 0x00, 0x6a, 0x55, + 0x57, 0x59, 0x59, 0x5c, 0x61, 0x5f, 0x20, 0x61, 0x61, 0xe1, 0x5c, 0x59, + 0x59, 0x57, 0x58, 0x02, 0x55, 0x55, 0x55, 0x55, 0x50, 0x50, 0xdb, 0x55, + 0x00, 0x52, 0x52, 0x55, 0x58, 0x57, 0x58, 0x59, 0x59, 0x20, 0x5c, 0x5c, + 0x11, 0x66, 0x67, 0x67, 0x67, 0x67, 0x00, 0x6d, 0x71, 0x71, 0x71, 0x71, + 0x71, 0x6d, 0x67, 0x00, 0x67, 0x61, 0x5c, 0x57, 0x50, 0x79, 0x00, 0x00, + 0x70, 0x00, 0xe9, 0xd4, 0xa5, 0x6e, 0x5b, 0x5b, 0x5c, 0x00, 0x5c, 0x5c, + 0x61, 0x62, 0x62, 0x66, 0x66, 0x66, 0x10, 0x69, 0x69, 0x69, 0xe9, 0x6b, + 0x69, 0x69, 0x66, 0x01, 0x66, 0x62, 0x61, 0x61, 0x61, 0x61, 0x61, 0x31, + 0xe0, 0x19, 0xd2, 0x89, 0x62, 0x62, 0x68, 0x62, 0x68, 0x00, 0x6a, 0x4f, + 0x4b, 0x50, 0x50, 0x51, 0x57, 0x58, 0x00, 0x58, 0x58, 0x57, 0x52, 0x50, + 0x50, 0x50, 0x4f, 0x00, 0x4b, 0x4b, 0x4a, 0x47, 0x47, 0x47, 0x4a, 0x4a, + 0x80, 0xe9, 0x4b, 0x48, 0x4b, 0x4b, 0x4b, 0x4f, 0x4f, 0x80, 0x51, 0x50, + 0x55, 0x58, 0x57, 0x57, 0x57, 0x57, 0x02, 0x5d, 0x5f, 0x5f, 0x67, 0x67, + 0x67, 0xe9, 0x67, 0x00, 0x67, 0x5f, 0x5f, 0x5d, 0x58, 0x51, 0x4b, 0x6a, + 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x6e, 0x5b, 0x00, 0x58, 0x58, + 0x58, 0x59, 0x58, 0x5c, 0x5c, 0x5c, 0x11, 0x61, 0x61, 0x61, 0xe9, 0x61, + 0x66, 0x66, 0xb9, 0x00, 0x5f, 0x5c, 0x59, 0x5c, 0x5c, 0x57, 0x57, 0x57, + 0xc0, 0xe9, 0xd4, 0x57, 0x59, 0x59, 0x5b, 0x5b, 0x5c, 0x00, 0x62, 0x5c, + 0x5e, 0x54, 0x46, 0x47, 0x48, 0x48, 0x00, 0x4d, 0x4b, 0x4b, 0x4b, 0x4b, + 0x4b, 0x47, 0x47, 0x00, 0x47, 0x47, 0x40, 0x40, 0x40, 0x40, 0x39, 0x39, + 0x01, 0x35, 0x39, 0x3d, 0x40, 0x40, 0x43, 0x46, 0x7a, 0x80, 0x5a, 0x48, + 0x48, 0x4d, 0x4b, 0x4d, 0x50, 0x51, 0x01, 0x52, 0x52, 0x5d, 0x5d, 0x5f, + 0x5f, 0x5f, 0xe9, 0x00, 0x5f, 0x5d, 0x5d, 0x52, 0x51, 0x4d, 0x48, 0x5e, + 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x6e, 0x5e, 0x00, 0x50, 0x50, + 0x55, 0x55, 0x55, 0x58, 0x58, 0x58, 0x08, 0x58, 0x5c, 0x5c, 0x5c, 0xe9, + 0x5c, 0x5c, 0x59, 0x00, 0x57, 0x57, 0x57, 0x58, 0x58, 0x52, 0x55, 0x50, + 0x0c, 0x55, 0x50, 0x50, 0x50, 0xe9, 0xd2, 0x55, 0x55, 0x00, 0x55, 0x55, + 0x58, 0x5b, 0x5b, 0x58, 0x5b, 0x54, 0x02, 0x40, 0x3f, 0x3f, 0x42, 0x42, + 0x42, 0xe9, 0x42, 0x00, 0x42, 0x3f, 0x39, 0x39, 0x39, 0x39, 0x35, 0x2d, + 0x00, 0x2a, 0x20, 0x1a, 0x1a, 0x20, 0x25, 0x30, 0x35, 0x0c, 0x39, 0x3f, + 0x3f, 0x3f, 0xe9, 0x05, 0x45, 0x45, 0x00, 0x48, 0x48, 0x4e, 0x51, 0x52, + 0x5a, 0x5a, 0x5a, 0x80, 0xe9, 0x5a, 0x51, 0x4e, 0x48, 0x46, 0x3f, 0x5e, + 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x56, 0x5e, 0x00, 0x4a, 0x4a, + 0x4b, 0x4f, 0x4f, 0x50, 0x51, 0x51, 0x00, 0x51, 0x51, 0x51, 0x58, 0x58, + 0x52, 0x57, 0x5d, 0x04, 0x58, 0x58, 0x50, 0x50, 0x51, 0xe9, 0x50, 0x4f, + 0x15, 0x4b, 0x4b, 0x4b, 0xe9, 0x4b, 0x09, 0x4f, 0xe9, 0x80, 0xd1, 0x54, + 0x51, 0x50, 0x54, 0x44, 0x2f, 0x34, 0x00, 0x38, 0x38, 0x38, 0x39, 0x35, + 0x39, 0x34, 0x34, 0x00, 0x32, 0x32, 0x2f, 0x2f, 0x2c, 0x27, 0x20, 0x12, + 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x1a, 0x25, 0x2d, 0x00, 0x35, 0x35, + 0x39, 0x35, 0x38, 0x39, 0x39, 0x39, 0x80, 0x01, 0x3f, 0x3f, 0x3f, 0x3f, + 0x3e, 0x3f, 0x42, 0x00, 0x45, 0x4d, 0x4e, 0x52, 0x5a, 0x5a, 0x52, 0x51, + 0x00, 0x4e, 0x49, 0x45, 0x45, 0x42, 0x38, 0x5e, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa6, 0x5e, 0x47, 0x47, 0x00, 0x47, 0x47, 0x48, 0x4a, 0x4b, + 0x4b, 0x50, 0x50, 0x10, 0x51, 0x51, 0x51, 0xe9, 0x51, 0x4d, 0x4d, 0x4b, + 0x00, 0x48, 0x3e, 0x3b, 0x3b, 0x3b, 0x3b, 0x3e, 0x42, 0xe0, 0x22, 0x02, + 0xc4, 0x4f, 0x4a, 0x4f, 0x4f, 0x4f, 0x01, 0x4c, 0x35, 0x28, 0x28, 0x2c, + 0x2c, 0x2c, 0xe9, 0x00, 0x28, 0x28, 0x28, 0x23, 0x23, 0x23, 0x1c, 0x12, + 0x00, 0x07, 0x36, 0xf4, 0xa4, 0x76, 0x0e, 0x0d, 0x1a, 0x04, 0x25, 0x2c, + 0x32, 0x32, 0x32, 0xe9, 0x34, 0x34, 0x40, 0x34, 0xe9, 0x34, 0x38, 0x38, + 0x38, 0x3e, 0x3f, 0x00, 0x3e, 0x45, 0x45, 0x49, 0x4e, 0x4e, 0x49, 0x45, + 0x00, 0x45, 0x3e, 0x3f, 0x38, 0x39, 0x44, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa6, 0x5e, 0x4c, 0x40, 0x42, 0x00, 0x42, 0x46, 0x47, 0x47, 0x47, + 0x48, 0x4d, 0x4d, 0x00, 0x4d, 0x4d, 0x4d, 0x50, 0x4d, 0x4d, 0x48, 0x57, + 0x00, 0x86, 0xdf, 0xf7, 0xfa, 0xfd, 0xfc, 0xfa, 0xf3, 0x0e, 0xdc, 0x78, + 0x47, 0x3f, 0x2a, 0x11, 0xd4, 0x47, 0x00, 0x48, 0x48, 0x4a, 0x44, 0x2a, + 0x1d, 0x22, 0x22, 0x00, 0x22, 0x22, 0x22, 0x1d, 0x1d, 0x1d, 0x1e, 0x1e, + 0x00, 0x1e, 0x17, 0x0d, 0x04, 0x04, 0xa4, 0xf6, 0xf6, 0x00, 0xf6, 0xf6, + 0xa2, 0x0f, 0x18, 0x23, 0x2c, 0x2c, 0x00, 0x2c, 0x2c, 0x2c, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x80, 0xb2, 0x2e, 0x2f, 0x34, 0x37, 0x38, 0x3e, 0x3e, + 0x00, 0x41, 0x45, 0x45, 0x45, 0x3e, 0x3e, 0x38, 0x34, 0x07, 0x2f, 0x35, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x4c, 0x39, 0x39, 0x39, + 0x3f, 0x42, 0x3f, 0x00, 0x42, 0x42, 0x42, 0x46, 0x46, 0x48, 0x48, 0x48, + 0x00, 0x47, 0x50, 0xb1, 0xf5, 0xfc, 0xfd, 0xfa, 0xf7, 0x00, 0xf3, 0xf3, + 0xf8, 0xfb, 0xfe, 0xfc, 0xf3, 0x8f, 0x02, 0x3f, 0x3f, 0x3f, 0x40, 0x40, + 0x40, 0xd1, 0x3f, 0x00, 0x42, 0x3f, 0x42, 0x42, 0x42, 0x42, 0x46, 0x47, + 0x00, 0x44, 0x2a, 0x17, 0x15, 0x17, 0x17, 0x17, 0x17, 0x00, 0x17, 0x16, + 0x13, 0x13, 0x13, 0x0d, 0x06, 0x02, 0x00, 0x05, 0xf4, 0xf6, 0xf6, 0xf6, + 0xf6, 0x76, 0x07, 0x00, 0x12, 0x21, 0x24, 0x24, 0x24, 0x24, 0x28, 0x28, + 0xc0, 0xd2, 0xc9, 0x28, 0x28, 0x28, 0x2e, 0x2e, 0x31, 0x00, 0x31, 0x37, + 0x3b, 0x3b, 0x3b, 0x41, 0x3b, 0x37, 0x01, 0x2e, 0x2e, 0x28, 0x3c, 0x00, + 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa7, 0x00, 0x4c, 0x44, 0x32, 0x35, 0x35, + 0x00, 0x39, 0x38, 0x3c, 0x3c, 0x3c, 0x3e, 0x3f, 0x42, 0x00, 0x47, 0x3f, + 0x7d, 0xf3, 0xfd, 0xf9, 0xe9, 0xd1, 0x00, 0xbf, 0xbf, 0xcf, 0xcf, 0xbf, + 0xbf, 0xd1, 0xe9, 0x01, 0xfb, 0xfd, 0xe9, 0x57, 0x39, 0x39, 0x39, 0xe9, + 0x80, 0xd4, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, 0x4c, 0x30, 0x08, 0x1c, 0x0e, + 0x0e, 0x0e, 0xe9, 0x0c, 0x0e, 0x0b, 0x00, 0x06, 0x04, 0x07, 0xa2, 0xf6, + 0xf6, 0xf6, 0xf6, 0x00, 0xf6, 0x64, 0x36, 0x12, 0x16, 0x1e, 0x21, 0x21, + 0x60, 0x21, 0xe9, 0xd4, 0x22, 0x22, 0x22, 0x22, 0x28, 0x00, 0x28, 0x29, + 0x2e, 0x31, 0x31, 0x31, 0x37, 0x37, 0x01, 0x31, 0x28, 0x28, 0x24, 0x00, + 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, 0x59, 0x4c, 0x33, 0x2c, 0x2c, 0x32, + 0x00, 0x34, 0x34, 0x34, 0x38, 0x3c, 0x3c, 0x42, 0x3e, 0x00, 0xa8, 0xfa, + 0xfb, 0xe4, 0xbf, 0xcf, 0xcf, 0xd1, 0x00, 0xd1, 0xd1, 0xd1, 0xcf, 0xcf, + 0xcf, 0xbf, 0xbf, 0x01, 0xe9, 0xfd, 0xf9, 0x78, 0x34, 0x38, 0x35, 0x09, + 0x80, 0xe9, 0x34, 0x34, 0x38, 0x34, 0x38, 0x38, 0x38, 0x00, 0x38, 0x46, + 0x44, 0x2a, 0x18, 0x10, 0x0b, 0x0b, 0x00, 0x08, 0x0b, 0x0b, 0x12, 0x2b, + 0x36, 0x2b, 0xa4, 0x00, 0xf4, 0xf4, 0xf6, 0xf6, 0xe5, 0x27, 0x36, 0x64, + 0x00, 0x56, 0x3a, 0x2a, 0x21, 0x2a, 0x3a, 0x56, 0x79, 0x00, 0x3a, 0x17, + 0x17, 0x17, 0x17, 0x17, 0x1b, 0x1d, 0x00, 0x1d, 0x1d, 0x22, 0x1f, 0x1f, + 0x26, 0x29, 0x29, 0x40, 0x29, 0xe9, 0x26, 0x22, 0x28, 0x00, 0x00, 0x00, + 0xf0, 0xe9, 0xd4, 0xa7, 0x5a, 0x44, 0x28, 0x28, 0x28, 0x00, 0x2c, 0x2c, + 0x2f, 0x34, 0x39, 0x38, 0x38, 0xa8, 0x00, 0xfb, 0xf7, 0xcd, 0xcd, 0xcd, + 0xcd, 0xd1, 0xd1, 0x10, 0xd1, 0xd1, 0xd1, 0xba, 0xbf, 0xbf, 0xd1, 0xf9, + 0x01, 0xfb, 0x75, 0x2f, 0x34, 0x32, 0x32, 0x32, 0xe9, 0x80, 0xd4, 0x32, + 0x34, 0x34, 0x34, 0x40, 0x43, 0x44, 0x00, 0x3a, 0x3a, 0x44, 0x44, 0x44, + 0x44, 0x3a, 0x07, 0x00, 0x14, 0xf6, 0xf4, 0xf4, 0xf4, 0xf4, 0xa4, 0x12, + 0x00, 0x1a, 0x46, 0x5e, 0x6a, 0x6a, 0x79, 0x6a, 0x6a, 0x01, 0x6a, 0x60, + 0x56, 0x25, 0x17, 0x17, 0x17, 0xe9, 0x00, 0x17, 0x17, 0x19, 0x1b, 0x1b, + 0x1f, 0x1f, 0x1f, 0x81, 0xe9, 0x1f, 0x22, 0x22, 0x00, 0x00, 0x00, 0xe9, + 0xe0, 0xd4, 0xa7, 0x5b, 0x2b, 0x30, 0x22, 0x24, 0x24, 0x00, 0x28, 0x2c, + 0x32, 0x35, 0x38, 0x84, 0xfb, 0xf3, 0x00, 0xbb, 0xcd, 0xcd, 0xcd, 0xd3, + 0xd3, 0xd3, 0xd3, 0x00, 0xd3, 0xcd, 0xd3, 0xcd, 0xca, 0xc3, 0xc3, 0xbb, + 0x00, 0xbb, 0xbb, 0xf9, 0xf9, 0x50, 0x33, 0x2f, 0x2c, 0x19, 0x2f, 0x2f, + 0x2f, 0xe9, 0xd2, 0x2c, 0x2c, 0x9b, 0x00, 0x32, 0x34, 0x32, 0x34, 0x2f, + 0x21, 0x0f, 0x07, 0x00, 0xa2, 0xf4, 0xf4, 0xf4, 0xf4, 0xf6, 0x76, 0x07, + 0x02, 0x18, 0x38, 0x45, 0x49, 0x49, 0x49, 0xe9, 0x45, 0x00, 0x54, 0x44, + 0x17, 0x13, 0x14, 0x14, 0x14, 0x14, 0x00, 0x13, 0x13, 0x13, 0x15, 0x15, + 0x15, 0x19, 0x1b, 0x00, 0x1b, 0x1b, 0x1b, 0x19, 0x15, 0x54, 0x00, 0x00, + 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0x3a, 0x2a, 0x1d, 0x00, 0x23, 0x2c, + 0x33, 0x33, 0x43, 0x48, 0xf8, 0xf7, 0x01, 0xbb, 0xca, 0xca, 0xca, 0xd3, + 0xd3, 0xd3, 0xe9, 0x20, 0xd3, 0xd3, 0xa9, 0xc6, 0xbb, 0xbb, 0xc3, 0xc3, + 0x01, 0xfb, 0xf3, 0x28, 0x2f, 0x28, 0x28, 0x28, 0xe9, 0xc0, 0xd4, 0xa5, + 0x2c, 0x2c, 0x2c, 0x24, 0x18, 0x07, 0x00, 0x08, 0xe5, 0xf4, 0xf4, 0xf4, + 0xf4, 0xf6, 0x1a, 0x01, 0x07, 0x20, 0x37, 0x41, 0x45, 0x45, 0x45, 0xe9, + 0x00, 0x41, 0x3e, 0x46, 0x3a, 0x16, 0x0c, 0x0e, 0x0e, 0x00, 0x0e, 0x0e, + 0x11, 0x11, 0x11, 0x13, 0x13, 0x15, 0x40, 0x15, 0xe1, 0x11, 0x6a, 0xb6, + 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, 0xa7, 0x5d, 0x25, 0x30, 0x24, 0x30, + 0x00, 0x3d, 0x44, 0x44, 0xde, 0xf9, 0xd0, 0xc1, 0xc6, 0x00, 0xce, 0xce, + 0xd3, 0xd9, 0xd9, 0xd8, 0xd8, 0xd9, 0x00, 0xd9, 0xd9, 0xd3, 0xce, 0xce, + 0xc6, 0xc6, 0xc6, 0x00, 0xc3, 0xbb, 0xdf, 0xfd, 0x8c, 0x2a, 0x24, 0x1e, + 0x00, 0x1e, 0x1e, 0x21, 0x23, 0x24, 0x23, 0x24, 0x24, 0x50, 0x23, 0xe1, + 0x24, 0xe9, 0x24, 0x24, 0x28, 0x24, 0x00, 0x1c, 0x0f, 0x03, 0x36, 0xf4, + 0xf4, 0xf4, 0xf4, 0x00, 0xf4, 0xe5, 0x08, 0x07, 0x1e, 0x37, 0x3b, 0x3b, + 0x00, 0x3b, 0x41, 0x41, 0x3b, 0x41, 0x3b, 0x3b, 0x37, 0x02, 0x3e, 0x30, + 0x18, 0x0c, 0x0b, 0x0c, 0xe9, 0x0c, 0x00, 0x0c, 0x0c, 0x0e, 0x11, 0x11, + 0x11, 0x17, 0x60, 0x03, 0x94, 0xa8, 0x79, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xc0, 0xa7, 0x5e, 0x3a, 0x2a, 0x33, 0x4c, 0x6a, 0xf9, 0x00, 0xe9, 0xc1, + 0xc1, 0xc6, 0xcc, 0xcc, 0xd6, 0xd9, 0x00, 0xd9, 0xd9, 0xdb, 0xdb, 0xd9, + 0xd9, 0xd6, 0xce, 0x00, 0xcc, 0xcc, 0xc6, 0xc6, 0xc1, 0xb4, 0xaa, 0xf7, + 0x00, 0xf7, 0x3a, 0x18, 0x12, 0x12, 0x12, 0x14, 0x1c, 0x07, 0x1d, 0x21, + 0x21, 0x21, 0x22, 0xe9, 0xc9, 0xb1, 0x00, 0x21, 0x1d, 0x12, 0x04, 0x04, + 0xa4, 0xef, 0xef, 0x00, 0xef, 0xef, 0xf4, 0xa4, 0x04, 0x07, 0x1c, 0x2e, + 0x00, 0x37, 0x37, 0x3b, 0x3b, 0x3b, 0x3b, 0x37, 0x37, 0x00, 0x37, 0x31, + 0x31, 0x31, 0x33, 0x25, 0x10, 0x0b, 0x00, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0c, 0x08, 0x00, 0x13, 0x54, 0x80, 0x77, 0x7a, 0xa8, 0xa8, 0x00, + 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0xb6, 0xe4, 0x00, 0xe9, 0xf3, + 0xf2, 0xe9, 0xed, 0xf7, 0xc5, 0xc5, 0x00, 0xc5, 0xc5, 0xcc, 0xd2, 0xd6, + 0xd6, 0xd6, 0xd7, 0x20, 0xd7, 0xd7, 0xd1, 0xd6, 0xd6, 0xcc, 0xcc, 0xc1, + 0x00, 0xc1, 0xb7, 0xb1, 0xdc, 0xf9, 0x79, 0x64, 0x12, 0x00, 0x09, 0x07, + 0x09, 0x10, 0x17, 0x1d, 0x1d, 0x1d, 0x04, 0x1b, 0x1d, 0x1e, 0x21, 0x21, + 0xc1, 0x1d, 0x1d, 0x00, 0x1c, 0x14, 0x09, 0x03, 0x06, 0xef, 0xef, 0xef, + 0x00, 0xef, 0xef, 0xf4, 0xa2, 0x02, 0x03, 0x09, 0x1d, 0x02, 0x22, 0x29, + 0x2e, 0x31, 0x31, 0x31, 0xe9, 0x2e, 0x00, 0x29, 0x28, 0x28, 0x33, 0x60, + 0x71, 0x30, 0x17, 0x00, 0x10, 0x10, 0x10, 0x1c, 0x3c, 0x71, 0x8d, 0x82, + 0x00, 0x7e, 0x77, 0x71, 0x8c, 0x8c, 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, + 0xa7, 0x59, 0xb6, 0xe9, 0xf3, 0xf3, 0x00, 0xf3, 0xed, 0xe9, 0xed, 0xf3, + 0xf7, 0xe4, 0xc5, 0x00, 0xc5, 0xc2, 0xc0, 0xcb, 0xcb, 0xd2, 0xd2, 0xd6, + 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0x00, 0xd2, 0xc1, + 0xc0, 0xb7, 0xb1, 0xae, 0x93, 0xe7, 0x00, 0xde, 0xa2, 0xf1, 0xa4, 0x76, + 0x07, 0x09, 0x14, 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x1c, 0x30, 0x30, + 0x40, 0x27, 0xba, 0x16, 0x0d, 0x04, 0x03, 0xa2, 0xef, 0x00, 0xef, 0xef, + 0xef, 0xef, 0xf4, 0x0f, 0x03, 0x02, 0x00, 0x03, 0x09, 0x0d, 0x14, 0x19, + 0x1f, 0x26, 0x29, 0x00, 0x29, 0x29, 0x29, 0x26, 0x26, 0x1f, 0x28, 0x2c, + 0x10, 0xad, 0xad, 0xad, 0xe9, 0xad, 0x9a, 0x9a, 0x96, 0x00, 0x89, 0x82, + 0x7b, 0x71, 0x6d, 0x74, 0x8c, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x00, 0x00, 0xe9, 0x00, 0xed, 0xe4, 0xdc, 0xb8, 0xb4, 0xb8, 0xb0, 0xb0, + 0x00, 0xb1, 0xb1, 0xb1, 0xb7, 0xc2, 0xc2, 0xc8, 0xc8, 0x00, 0xcb, 0xcb, + 0xd5, 0xd5, 0xd5, 0xd5, 0xda, 0xda, 0x00, 0xda, 0xda, 0xd2, 0xcb, 0xcb, + 0xc0, 0xc0, 0xb7, 0x00, 0xae, 0xa3, 0x8f, 0xb6, 0xe7, 0xe0, 0xf6, 0xf6, + 0x00, 0xa4, 0x2b, 0x2b, 0x3a, 0x2a, 0x2a, 0x2a, 0x3a, 0x00, 0x56, 0x56, + 0x79, 0x79, 0x64, 0x25, 0x13, 0x17, 0x00, 0x16, 0x10, 0x09, 0x03, 0x01, + 0xe0, 0xee, 0xee, 0x00, 0xee, 0xee, 0xef, 0xef, 0xe5, 0xa4, 0x36, 0x05, + 0x00, 0x03, 0x03, 0x03, 0x09, 0x0d, 0x10, 0x17, 0x1b, 0x00, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x24, 0x71, 0xad, 0x00, 0xad, 0xad, 0xad, 0xad, 0x9a, + 0x9a, 0x9a, 0x96, 0x00, 0x89, 0x89, 0x7b, 0x7b, 0x71, 0x67, 0x68, 0x8c, + 0x0e, 0x64, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa6, 0xb6, 0x00, 0xed, 0xdf, + 0xb8, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0x00, 0xb1, 0xb1, 0xae, 0xae, 0xae, + 0xb3, 0xbd, 0xbd, 0x00, 0xbd, 0xc8, 0xc8, 0xcb, 0xcb, 0xd5, 0xd5, 0xd4, + 0x00, 0xd5, 0xd5, 0xd5, 0xd5, 0xcb, 0xcb, 0xc8, 0xc8, 0x00, 0xbd, 0xb3, + 0xae, 0x9c, 0x8c, 0x79, 0xe7, 0xf6, 0x00, 0xf6, 0xf6, 0x76, 0x56, 0x64, + 0x6a, 0x79, 0x79, 0x40, 0x79, 0xe9, 0x79, 0x6e, 0x6a, 0x56, 0x17, 0x13, + 0x00, 0x14, 0x0d, 0x04, 0x02, 0x36, 0xef, 0xec, 0xec, 0x00, 0xee, 0xee, + 0xee, 0xee, 0xef, 0xef, 0xf4, 0xe5, 0x00, 0xa4, 0x36, 0x05, 0x03, 0x03, + 0x04, 0x09, 0x0d, 0x00, 0x13, 0x19, 0x1b, 0x1b, 0x22, 0x45, 0xad, 0xad, + 0x00, 0xad, 0xad, 0xad, 0x9a, 0x9a, 0x9a, 0x96, 0x96, 0x00, 0x89, 0x7f, + 0x7b, 0x71, 0x71, 0x67, 0x60, 0x79, 0x0e, 0x79, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa5, 0xdc, 0x00, 0xe4, 0xdc, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xae, + 0x00, 0xae, 0xa3, 0xa6, 0xa6, 0xa6, 0xac, 0xac, 0xba, 0x00, 0xbd, 0xc8, + 0xc8, 0xc8, 0xc8, 0xd4, 0xd4, 0xd4, 0x80, 0xe9, 0xd4, 0xd4, 0xc8, 0xc8, + 0xc9, 0xbd, 0xbc, 0x00, 0xb3, 0xa6, 0x94, 0x79, 0x79, 0xa2, 0xf4, 0xf4, + 0x00, 0xf6, 0x44, 0x2b, 0x44, 0x4f, 0x5e, 0x5e, 0x5e, 0x00, 0x58, 0x50, + 0x4b, 0x50, 0x51, 0x5e, 0x56, 0x3a, 0x00, 0x10, 0x0d, 0x06, 0x03, 0x03, + 0xa4, 0xea, 0xec, 0x00, 0xec, 0xec, 0xec, 0xec, 0xee, 0xee, 0xee, 0xee, + 0x00, 0xef, 0xef, 0xf4, 0xe5, 0xa4, 0x36, 0x05, 0x04, 0x00, 0x04, 0x09, + 0x11, 0x17, 0x19, 0x2c, 0x9a, 0x9a, 0x60, 0x9a, 0xe9, 0xd1, 0x96, 0x8a, + 0x89, 0x7f, 0x7b, 0x00, 0x71, 0x67, 0x60, 0x5d, 0x79, 0x8c, 0x00, 0x00, + 0x70, 0x00, 0xe9, 0xd4, 0xa5, 0xdf, 0xb1, 0xa3, 0xa3, 0x40, 0xa3, 0xe9, + 0xa6, 0xa6, 0xa6, 0xa1, 0xa1, 0xa1, 0x00, 0xa9, 0xac, 0xb3, 0xbc, 0xbc, + 0xbc, 0xbc, 0xbe, 0x11, 0xc9, 0xc9, 0xc9, 0xe9, 0xc9, 0xbe, 0xbe, 0x91, + 0x00, 0xb3, 0xac, 0x9c, 0x8c, 0x56, 0x75, 0xf1, 0xf4, 0x00, 0xf4, 0xe5, + 0x79, 0x79, 0x8c, 0x8c, 0x75, 0x57, 0x00, 0x48, 0x48, 0x4b, 0x48, 0x4b, + 0x47, 0x46, 0x5e, 0x00, 0x3a, 0x25, 0x0a, 0x04, 0x03, 0x04, 0xea, 0xe8, + 0x00, 0xea, 0xea, 0xea, 0xec, 0xec, 0xec, 0xec, 0xee, 0x00, 0xee, 0xee, + 0xee, 0xef, 0xef, 0xef, 0xf4, 0xe5, 0x00, 0xa4, 0x36, 0x04, 0x0b, 0x13, + 0x22, 0x8a, 0x9a, 0x20, 0x9a, 0x9a, 0xe9, 0x9a, 0x9a, 0x96, 0x8a, 0x8a, + 0x00, 0x89, 0x7f, 0x70, 0x71, 0x67, 0x5d, 0x5a, 0x6a, 0x0e, 0x80, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0xde, 0x00, 0xa3, 0x9b, 0x9b, 0x9b, 0x9b, + 0x9b, 0xa6, 0xa6, 0x00, 0xa1, 0xa1, 0xa1, 0xa0, 0xa1, 0xa1, 0xa9, 0xa9, + 0x06, 0xaf, 0xb5, 0xb9, 0xb9, 0xb9, 0xe9, 0xd4, 0xb9, 0x00, 0xb5, 0xb5, + 0xb2, 0xaf, 0xa1, 0x94, 0x79, 0x56, 0x00, 0x76, 0xf4, 0xf4, 0xf4, 0xa4, + 0xde, 0xde, 0xe7, 0x00, 0xe7, 0xf3, 0xe7, 0xb6, 0x6c, 0x47, 0x47, 0x47, + 0x00, 0x43, 0x3f, 0x40, 0x54, 0x3a, 0x1a, 0x04, 0x03, 0x00, 0xa2, 0xe8, + 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xea, 0x00, 0xec, 0xec, 0xec, 0xec, 0xec, + 0xee, 0xee, 0xee, 0x00, 0xee, 0xef, 0xef, 0xef, 0xa4, 0x05, 0x06, 0x1d, + 0x00, 0x7f, 0x8a, 0x8a, 0x8a, 0x8a, 0x9a, 0x8a, 0x9a, 0x80, 0xca, 0x8a, + 0x7f, 0x7b, 0x70, 0x67, 0x5f, 0x5d, 0x03, 0x52, 0x5e, 0x7a, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x80, 0xa3, 0xdc, 0xa8, 0x93, 0x93, 0x93, 0x93, 0x93, + 0x00, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9e, 0xa0, 0x01, 0xa0, 0xa0, + 0xa0, 0xa0, 0xaf, 0xaf, 0xaf, 0xe9, 0xc0, 0xd4, 0xa2, 0xab, 0xa7, 0x9c, + 0x8c, 0x6a, 0x6a, 0x00, 0xa4, 0xef, 0xef, 0xf4, 0xa2, 0x2b, 0x2b, 0x56, + 0x00, 0x6a, 0x8c, 0xde, 0xe7, 0xe7, 0xa8, 0x52, 0x3f, 0x00, 0x39, 0x39, + 0x39, 0x39, 0x43, 0x2a, 0x0f, 0x04, 0x04, 0xe0, 0xea, 0xe8, 0xe8, 0xe8, + 0xe9, 0xea, 0xea, 0x00, 0xea, 0xec, 0xec, 0xec, 0xec, 0xec, 0xee, 0xee, + 0x00, 0xee, 0xe5, 0x04, 0x03, 0x1e, 0x71, 0x7b, 0x7f, 0x0c, 0x7f, 0x8a, + 0x8a, 0x8a, 0xe9, 0xd1, 0x7f, 0x7f, 0x00, 0x70, 0x70, 0x65, 0x5d, 0x5a, + 0x51, 0x5e, 0x6a, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0xb6, 0x8f, + 0x00, 0x8f, 0x8f, 0x8f, 0x8f, 0x94, 0x94, 0x95, 0x99, 0x01, 0x9e, 0x99, + 0x9e, 0x99, 0x9e, 0x9e, 0x9e, 0xe9, 0x1c, 0xa7, 0xa7, 0xa7, 0xe9, 0xd4, + 0xa1, 0x9f, 0x9f, 0x00, 0x94, 0x79, 0x56, 0x79, 0xee, 0xee, 0xef, 0xef, + 0x00, 0xa2, 0x79, 0x55, 0x56, 0x56, 0x56, 0x6a, 0x75, 0x00, 0xb6, 0xe7, + 0xde, 0x63, 0x35, 0x35, 0x35, 0x35, 0x00, 0x32, 0x3d, 0x25, 0x07, 0x07, + 0x36, 0x76, 0xa2, 0x00, 0xa4, 0xa4, 0xe0, 0xe8, 0xee, 0xee, 0xec, 0xea, + 0x00, 0xea, 0xec, 0xec, 0xec, 0xec, 0xec, 0xee, 0x07, 0x00, 0x03, 0x25, + 0x5d, 0x65, 0x70, 0x70, 0x7b, 0x7f, 0x02, 0x7f, 0x7f, 0x8a, 0x8a, 0x8a, + 0x8a, 0xc9, 0x7b, 0x00, 0x70, 0x65, 0x5f, 0x5a, 0x51, 0x4e, 0x5e, 0x56, + 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa2, 0xa8, 0x93, 0x00, 0x86, 0x86, + 0x88, 0x88, 0x88, 0x91, 0x91, 0x94, 0x04, 0x97, 0x94, 0x97, 0x97, 0x97, + 0xe9, 0x99, 0x99, 0x00, 0x99, 0x9d, 0x9f, 0x9e, 0x9d, 0x9d, 0x9d, 0x9d, + 0xc0, 0xb9, 0xca, 0x9d, 0x9d, 0x97, 0x8b, 0x6a, 0x6a, 0x00, 0xa2, 0xec, + 0xec, 0xee, 0xee, 0xef, 0xef, 0xe0, 0x00, 0xa2, 0x79, 0x58, 0x5e, 0x6a, + 0x74, 0x7d, 0xde, 0x00, 0xde, 0x68, 0x2c, 0x32, 0x32, 0x2d, 0x2a, 0x25, + 0x00, 0x25, 0x0f, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x01, 0x03, + 0x36, 0x76, 0xa4, 0xec, 0xea, 0xea, 0x00, 0xea, 0xec, 0xef, 0x76, 0x07, + 0x1a, 0x3c, 0x4e, 0x00, 0x5a, 0x65, 0x65, 0x70, 0x70, 0x7b, 0x7f, 0x7f, + 0x40, 0x7f, 0xe9, 0x7f, 0x70, 0x70, 0x65, 0x65, 0x5a, 0x01, 0x5a, 0x4e, + 0x48, 0x54, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa3, 0xa8, 0x84, 0x7d, + 0x7d, 0x7d, 0x84, 0x00, 0x84, 0x84, 0x8b, 0x91, 0x91, 0x91, 0x91, 0x91, + 0x40, 0x94, 0xd3, 0x91, 0x91, 0x97, 0x97, 0x97, 0x97, 0x04, 0x95, 0x95, + 0x95, 0x95, 0x95, 0xba, 0x97, 0x97, 0x00, 0x92, 0x85, 0x6a, 0x69, 0xe0, + 0xea, 0xea, 0xec, 0x00, 0xec, 0xec, 0xee, 0xee, 0xef, 0xf4, 0xe0, 0xa2, + 0x00, 0x64, 0x6a, 0x78, 0x7d, 0xb6, 0xde, 0x55, 0x2c, 0x00, 0x2c, 0x2c, + 0x2a, 0x27, 0x20, 0x20, 0x1a, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x02, 0x02, + 0xe9, 0xa4, 0xe8, 0x00, 0xe8, 0xe8, 0xea, 0xea, 0xa4, 0x12, 0x0f, 0x30, + 0x00, 0x3c, 0x4e, 0x5a, 0x5a, 0x65, 0x65, 0x65, 0x70, 0x00, 0x70, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7b, 0x70, 0x70, 0x00, 0x70, 0x65, 0x5a, 0x5a, 0x4e, + 0x45, 0x46, 0x54, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x8c, 0x78, + 0x00, 0x78, 0x78, 0x7a, 0x7d, 0x7d, 0x83, 0x84, 0x8b, 0x08, 0x8b, 0x8d, + 0x8d, 0x8d, 0xe9, 0x8b, 0x8b, 0x8b, 0x8c, 0xe9, 0x8e, 0x8e, 0x8e, 0xe9, + 0xd1, 0x90, 0x91, 0x00, 0x91, 0x91, 0x91, 0x8d, 0x80, 0x6a, 0x76, 0xec, + 0x00, 0xe8, 0xe8, 0xe8, 0xea, 0xea, 0xec, 0xec, 0xee, 0x00, 0xee, 0xee, + 0xef, 0x64, 0x6a, 0x74, 0x78, 0x78, 0x00, 0xb6, 0xb6, 0x32, 0x27, 0x27, + 0x27, 0x27, 0x21, 0x00, 0x21, 0x20, 0x20, 0x20, 0x20, 0x1a, 0x0f, 0x07, + 0x00, 0x03, 0x02, 0x05, 0xe5, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0xe0, 0x0e, + 0x07, 0x1a, 0x30, 0x3e, 0x45, 0x49, 0x00, 0x4e, 0x5a, 0x5a, 0x65, 0x65, + 0x70, 0x70, 0x70, 0x80, 0xe9, 0x70, 0x65, 0x65, 0x5a, 0x5a, 0x4e, 0x49, + 0x03, 0x45, 0x46, 0x54, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa2, 0x6a, + 0x8c, 0x75, 0x75, 0x75, 0x75, 0x75, 0x01, 0x7a, 0x80, 0x80, 0x83, 0x85, + 0x85, 0x85, 0xe9, 0x02, 0x83, 0x82, 0x83, 0x80, 0x80, 0x80, 0x89, 0x83, + 0x20, 0x83, 0x81, 0xe1, 0x87, 0x87, 0x87, 0x87, 0x8b, 0x00, 0x87, 0x85, + 0x80, 0x6a, 0x64, 0x76, 0xa2, 0xa4, 0x00, 0xa4, 0xe0, 0xe5, 0xec, 0xea, + 0xec, 0xec, 0xef, 0x00, 0x76, 0x56, 0x6a, 0x7a, 0x7c, 0x78, 0x78, 0xb6, + 0x00, 0x79, 0x23, 0x23, 0x23, 0x23, 0x21, 0x21, 0x21, 0x80, 0xe9, 0x21, + 0x18, 0x12, 0x07, 0x03, 0xa2, 0xe8, 0x00, 0xe8, 0xe8, 0xe8, 0xe8, 0x0f, + 0x03, 0x0f, 0x20, 0x00, 0x2c, 0x38, 0x3e, 0x3e, 0x45, 0x49, 0x4e, 0x53, + 0x08, 0x5a, 0x65, 0x65, 0x65, 0xe9, 0x65, 0x65, 0x5a, 0x00, 0x53, 0x4e, + 0x49, 0x45, 0x3e, 0x46, 0x44, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa2, + 0x79, 0x75, 0x6c, 0x00, 0x6c, 0x6c, 0x6c, 0x74, 0x74, 0x7a, 0x7a, 0x7e, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7e, 0x7a, 0x7a, 0x00, 0x7a, 0x75, + 0x74, 0x74, 0x74, 0x75, 0x75, 0x77, 0x00, 0x77, 0x77, 0x7c, 0x7c, 0x7c, + 0x7c, 0x7c, 0x81, 0x00, 0x81, 0x81, 0x81, 0x81, 0x7a, 0x6e, 0x5e, 0x56, + 0x00, 0x56, 0x56, 0x44, 0x4c, 0x60, 0x76, 0xea, 0xe8, 0x00, 0xea, 0xa4, + 0x54, 0x56, 0x6a, 0x7a, 0x7a, 0x75, 0x01, 0x72, 0x8c, 0xa8, 0x32, 0x21, + 0x21, 0x21, 0xe9, 0x80, 0xd1, 0x1e, 0x18, 0x0f, 0x03, 0x05, 0xe3, 0xe5, + 0x00, 0xe8, 0xe8, 0xe8, 0x76, 0x03, 0x07, 0x12, 0x1e, 0x00, 0x28, 0x2e, + 0x34, 0x3e, 0x3e, 0x41, 0x45, 0x49, 0x00, 0x53, 0x53, 0x53, 0x65, 0x65, + 0x65, 0x65, 0x65, 0x00, 0x53, 0x53, 0x49, 0x49, 0x41, 0x3e, 0x38, 0x46, + 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x79, 0x6c, 0x00, 0x63, 0x63, + 0x68, 0x68, 0x6c, 0x6c, 0x74, 0x74, 0x08, 0x74, 0x74, 0x7a, 0x7a, 0xd2, + 0x6c, 0x6c, 0x6b, 0x00, 0x6b, 0x6c, 0x68, 0x68, 0x68, 0x6b, 0x6c, 0x6c, + 0x00, 0x6f, 0x72, 0x72, 0x72, 0x73, 0x73, 0x77, 0x77, 0x00, 0x77, 0x77, + 0x73, 0x6f, 0x6e, 0x6a, 0x5e, 0x44, 0x00, 0x2b, 0x07, 0x44, 0xe0, 0xe8, + 0xe8, 0xe0, 0x58, 0x00, 0x3a, 0x56, 0x6a, 0x74, 0x77, 0x75, 0x6c, 0x66, + 0x01, 0xa8, 0x6a, 0x1d, 0x1e, 0x1e, 0x1c, 0x1e, 0xe1, 0x00, 0x1c, 0x18, + 0x12, 0x07, 0x03, 0x76, 0xe5, 0xe5, 0x00, 0xe5, 0xe8, 0xa4, 0x04, 0x03, + 0x0f, 0x18, 0x1e, 0x00, 0x24, 0x28, 0x2e, 0x2e, 0x37, 0x3b, 0x41, 0x41, + 0x08, 0x49, 0x53, 0x53, 0x53, 0xe9, 0x53, 0x53, 0x49, 0x00, 0x49, 0x41, + 0x3b, 0x37, 0x38, 0x42, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa3, 0x56, + 0x63, 0x62, 0x62, 0x00, 0x62, 0x62, 0x62, 0x68, 0x68, 0x6b, 0x6d, 0x6d, + 0x02, 0x6d, 0x6d, 0x6e, 0x68, 0x68, 0x68, 0x82, 0x5c, 0x20, 0x62, 0x5c, + 0x4a, 0x66, 0x66, 0x66, 0x66, 0x69, 0x40, 0x69, 0x39, 0x6f, 0x6f, 0x6f, + 0x6d, 0x6e, 0x60, 0x00, 0x54, 0x3a, 0x3a, 0x76, 0xe8, 0xe8, 0xe5, 0x56, + 0x00, 0x3a, 0x56, 0x6a, 0x6e, 0x6d, 0x6c, 0x6d, 0x6c, 0x00, 0x66, 0x79, + 0x8c, 0x17, 0x17, 0x1c, 0x16, 0x16, 0x40, 0x16, 0xe9, 0x12, 0x07, 0x03, + 0x05, 0xe0, 0xe3, 0x00, 0xe3, 0xe3, 0xe0, 0x05, 0x02, 0x07, 0x12, 0x16, + 0x00, 0x17, 0x21, 0x23, 0x26, 0x28, 0x2e, 0x31, 0x3b, 0x01, 0x3b, 0x41, + 0x49, 0x49, 0x49, 0x53, 0x53, 0xd9, 0x00, 0x41, 0x41, 0x3b, 0x31, 0x37, + 0x35, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa5, 0x6a, 0x55, 0x58, 0x58, + 0x00, 0x5c, 0x5c, 0x60, 0x60, 0x60, 0x62, 0x62, 0x60, 0x00, 0x61, 0x62, + 0x5c, 0x5c, 0x58, 0x58, 0x58, 0x55, 0x30, 0x55, 0x55, 0xe9, 0xd1, 0x58, + 0x5b, 0x61, 0x61, 0x40, 0x61, 0xe9, 0x66, 0x66, 0x66, 0x69, 0x69, 0x69, + 0x00, 0x67, 0x54, 0x3a, 0x42, 0xa4, 0xe3, 0xe8, 0x76, 0x00, 0x3a, 0x3a, + 0x5e, 0x68, 0x6e, 0x6e, 0x68, 0x62, 0x00, 0x62, 0x61, 0x63, 0x8c, 0x3d, + 0x17, 0x16, 0x16, 0x00, 0x14, 0x16, 0x14, 0x14, 0x10, 0x09, 0x07, 0x07, + 0x00, 0x76, 0xe3, 0xe3, 0xe3, 0xe3, 0x07, 0x02, 0x04, 0x00, 0x09, 0x14, + 0x17, 0x17, 0x17, 0x1d, 0x22, 0x1f, 0x00, 0x26, 0x29, 0x31, 0x37, 0x3b, + 0x3b, 0x41, 0x41, 0x40, 0x41, 0xe9, 0x41, 0x3b, 0x37, 0x31, 0x2e, 0x2f, + 0x0e, 0x33, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa5, 0x6a, 0x00, 0x4f, 0x4f, + 0x54, 0x54, 0x55, 0x58, 0x58, 0x58, 0x80, 0xe9, 0x58, 0x55, 0x55, 0x54, + 0x4f, 0x4f, 0x4f, 0xe8, 0xe9, 0xd4, 0xa1, 0x50, 0x31, 0x57, 0x57, 0x57, + 0x00, 0x5f, 0x5f, 0x5f, 0x5c, 0x54, 0x44, 0x3a, 0x64, 0x00, 0xe3, 0xe3, + 0xa2, 0x3a, 0x3a, 0x4c, 0x60, 0x67, 0x00, 0x67, 0x67, 0x60, 0x5c, 0x58, + 0x58, 0x55, 0x79, 0x00, 0x64, 0x56, 0x56, 0x3a, 0x25, 0x25, 0x25, 0x3a, + 0x00, 0x3a, 0x36, 0x36, 0x02, 0xe0, 0xe3, 0xe3, 0xe3, 0x00, 0x36, 0x02, + 0x03, 0x09, 0x0d, 0x14, 0x14, 0x16, 0x00, 0x17, 0x17, 0x17, 0x1d, 0x1f, + 0x26, 0x2e, 0x2e, 0x00, 0x31, 0x37, 0x37, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, + 0x00, 0x37, 0x31, 0x31, 0x2e, 0x29, 0x2e, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa6, 0x5e, 0x47, 0x46, 0x4a, 0x02, 0x4a, 0x4f, 0x4f, 0x4f, 0x4f, + 0x54, 0xd9, 0x4a, 0x03, 0x4a, 0x4a, 0x47, 0x43, 0x43, 0x43, 0xe9, 0xd4, + 0x08, 0x43, 0x43, 0x47, 0x47, 0x11, 0x50, 0x50, 0x51, 0x00, 0x58, 0x58, + 0x54, 0x44, 0x3a, 0x30, 0xa4, 0xe3, 0x00, 0xa4, 0x38, 0x2b, 0x44, 0x54, + 0x60, 0x60, 0x67, 0x00, 0x60, 0x5d, 0x58, 0x51, 0x4f, 0x4a, 0x6a, 0x00, + 0x30, 0x00, 0x00, 0xe9, 0xd4, 0xe3, 0xe3, 0xe3, 0xa2, 0x00, 0x03, 0x02, + 0x04, 0x0d, 0x0d, 0x10, 0x10, 0x14, 0x00, 0x10, 0x13, 0x17, 0x17, 0x1b, + 0x1f, 0x1f, 0x26, 0x04, 0x29, 0x29, 0x31, 0x31, 0x31, 0xe9, 0x31, 0x29, + 0x03, 0x29, 0x26, 0x22, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa7, 0x00, + 0x4c, 0x40, 0x40, 0x40, 0x43, 0x46, 0x00, 0x47, 0x48, 0x47, 0x47, 0x46, + 0x46, 0x43, 0x43, 0x00, 0x40, 0x40, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3d, + 0xe0, 0x59, 0x41, 0xd3, 0x43, 0x43, 0x43, 0x43, 0x46, 0x00, 0x46, 0x46, + 0x3d, 0x30, 0x1a, 0x36, 0xe3, 0xe0, 0x00, 0x3a, 0x1a, 0x3a, 0x4c, 0x51, + 0x5d, 0x5d, 0x5d, 0x00, 0x5d, 0x5a, 0x54, 0x4d, 0x48, 0x46, 0x5e, 0x00, + 0x30, 0x00, 0x00, 0xe9, 0xd3, 0xe3, 0xe3, 0xe3, 0xa4, 0x00, 0x01, 0x02, + 0x04, 0x06, 0x0d, 0x0b, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x0e, 0x11, 0x13, + 0x13, 0x15, 0x1b, 0x00, 0x1f, 0x1f, 0x26, 0x29, 0x26, 0x29, 0x29, 0x29, + 0x00, 0x26, 0x26, 0x26, 0x1f, 0x1f, 0x12, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa7, 0x00, 0x4c, 0x35, 0x35, 0x04, 0x39, 0x39, 0x39, 0x39, 0x3c, + 0xda, 0x35, 0x35, 0x00, 0x32, 0x32, 0x32, 0x32, 0x2d, 0x2d, 0x2d, 0x32, + 0x1c, 0x35, 0x35, 0x35, 0xe9, 0xd4, 0x0a, 0x39, 0x35, 0x00, 0x30, 0x1a, + 0x18, 0xa4, 0xe3, 0x36, 0x1a, 0x25, 0x00, 0x3d, 0x4e, 0x51, 0x5a, 0x5a, + 0x5a, 0x51, 0x4e, 0x00, 0x4e, 0x48, 0x46, 0x42, 0x5e, 0x00, 0x00, 0x00, + 0xc0, 0xe9, 0xd3, 0xe3, 0xe3, 0xe3, 0x03, 0x02, 0x03, 0x00, 0x06, 0x09, + 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x00, 0x0c, 0x0e, 0x0e, 0x11, 0x13, + 0x15, 0x15, 0x15, 0x00, 0x1b, 0x1b, 0x1f, 0x1f, 0x1f, 0x26, 0x1f, 0x1b, + 0x03, 0x1b, 0x1b, 0x12, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x59, + 0x3d, 0x2c, 0x2c, 0x2f, 0x34, 0x32, 0x00, 0x32, 0x32, 0x33, 0x2d, 0x2d, + 0x2c, 0x2c, 0x28, 0x10, 0x27, 0x27, 0x27, 0xe9, 0x2c, 0x2d, 0x2d, 0x2d, + 0xc8, 0xe9, 0xd4, 0x2d, 0x2d, 0x11, 0x2a, 0x20, 0x1a, 0x00, 0x2b, 0xe3, + 0xa2, 0x1a, 0x1a, 0x30, 0x3c, 0x45, 0x00, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, + 0x45, 0x45, 0x42, 0x03, 0x3f, 0x38, 0x54, 0x00, 0x00, 0x00, 0xe9, 0xd2, + 0x10, 0xe3, 0xe3, 0xe3, 0x99, 0x0f, 0x09, 0x08, 0x0a, 0x20, 0x0a, 0x0a, + 0xe9, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x00, 0x11, 0x13, 0x13, 0x15, 0x15, + 0x15, 0x15, 0x1b, 0xbe, 0xda, 0x07, 0x11, 0xe9, 0xd4, 0xa7, 0x5a, 0x3a, + 0x00, 0x21, 0x21, 0x23, 0x24, 0x24, 0x24, 0x24, 0x23, 0x00, 0x24, 0x23, + 0x21, 0x21, 0x21, 0x1e, 0x1e, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1e, 0x23, + 0x27, 0x27, 0x27, 0xc0, 0xe9, 0xd2, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x27, + 0x00, 0x20, 0x1a, 0x0f, 0xa4, 0xa4, 0x10, 0x0f, 0x25, 0x04, 0x33, 0x3c, + 0x45, 0x45, 0x45, 0xe9, 0x42, 0x42, 0x01, 0x3c, 0x35, 0x32, 0x4c, 0x00, + 0x00, 0x00, 0xe9, 0x90, 0xd2, 0xe3, 0xe3, 0xa3, 0x1a, 0x0d, 0x06, 0x08, + 0x02, 0x08, 0x06, 0x08, 0x0a, 0x0a, 0x0a, 0xe9, 0x0c, 0x00, 0x0c, 0x0e, + 0x0e, 0x0e, 0x11, 0x13, 0x11, 0x11, 0x3c, 0x11, 0x15, 0x1b, 0xdb, 0xb7, + 0x6f, 0x3a, 0x1c, 0x04, 0x17, 0x17, 0x17, 0x1c, 0x17, 0xd2, 0x16, 0x16, + 0x40, 0x16, 0xe9, 0x14, 0x14, 0x3a, 0x79, 0x64, 0x21, 0x38, 0x21, 0x21, + 0xe9, 0xd4, 0xa1, 0x18, 0x12, 0x0f, 0x00, 0xe0, 0x0f, 0x0f, 0x1a, 0x1e, + 0x2c, 0x34, 0x38, 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x38, 0x38, 0x34, + 0x06, 0x2f, 0x33, 0x00, 0x00, 0x00, 0xe9, 0xd2, 0xe3, 0x20, 0xe3, 0xe3, + 0x9c, 0x07, 0x14, 0x09, 0x06, 0x08, 0x08, 0x06, 0x08, 0x08, 0x08, 0xe9, + 0x08, 0x08, 0x0b, 0x01, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x11, 0x09, 0x24, + 0xe0, 0xd4, 0xa7, 0x5f, 0x25, 0x16, 0x14, 0x14, 0x14, 0x02, 0x14, 0x10, + 0x14, 0x10, 0x10, 0x10, 0xe9, 0x0d, 0x00, 0x0d, 0x0d, 0x3a, 0x79, 0x00, + 0x76, 0x56, 0x17, 0x18, 0x1e, 0x1e, 0x1e, 0xe9, 0xd3, 0x1c, 0x16, 0x12, + 0x00, 0x09, 0xa4, 0x36, 0x0f, 0x12, 0x18, 0x1e, 0x28, 0x00, 0x2c, 0x2e, + 0x34, 0x37, 0x37, 0x37, 0x37, 0x2e, 0x01, 0x2e, 0x28, 0x28, 0x33, 0x00, + 0x00, 0x00, 0xe9, 0x90, 0xd2, 0xe3, 0xe3, 0xa7, 0x07, 0x12, 0x06, 0x06, + 0x44, 0x06, 0xe9, 0x08, 0x08, 0x08, 0xe9, 0x08, 0x0a, 0x3c, 0x11, 0x09, + 0x2f, 0xbf, 0x77, 0x2c, 0x07, 0x18, 0x01, 0x0b, 0x0b, 0x0d, 0x0d, 0x0a, + 0x0a, 0x0a, 0xe9, 0x04, 0x0a, 0x0a, 0x0d, 0x56, 0x76, 0x01, 0x76, 0x79, + 0x00, 0x20, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x1c, 0x40, 0x1c, 0xc1, + 0x14, 0x0d, 0x07, 0x76, 0x09, 0x0d, 0x00, 0x12, 0x1c, 0x1e, 0x22, 0x28, + 0x28, 0x2e, 0x29, 0x00, 0x2e, 0x2e, 0x2e, 0x28, 0x26, 0x24, 0x21, 0x30, + 0x19, 0x00, 0x00, 0x00, 0xe9, 0xd1, 0xe3, 0xe3, 0xaf, 0x80, 0x62, 0x09, + 0x0d, 0x09, 0x06, 0x06, 0x06, 0x06, 0x07, 0x06, 0x08, 0x0a, 0x0c, 0x0b, + 0x3f, 0x07, 0x77, 0x80, 0x2f, 0x00, 0x00, 0x0f, 0x14, 0x06, 0x06, 0x06, + 0x82, 0xe9, 0x06, 0x06, 0x0d, 0x3a, 0x36, 0x05, 0x64, 0x00, 0x56, 0x20, + 0x14, 0x10, 0x10, 0x10, 0x14, 0x20, 0x00, 0x3a, 0x16, 0x10, 0x10, 0x09, + 0x07, 0x04, 0x0d, 0x00, 0x0d, 0x10, 0x14, 0x17, 0x17, 0x1d, 0x22, 0x22, + 0x00, 0x26, 0x26, 0x26, 0x1f, 0x22, 0x1d, 0x1d, 0x23, 0x1b, 0x00, 0x00, + 0x00, 0xe9, 0xd2, 0xe3, 0xaf, 0x67, 0xfc, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0x02, 0x0f, 0x1a, 0x06, 0x17, 0x16, 0x18, 0x1a, 0x2b, 0x07, 0x02, 0x36, + 0x00, 0x2b, 0x3a, 0x2b, 0x36, 0x00, 0x00, 0x56, 0x12, 0x10, 0x0d, 0x0d, + 0x0d, 0xe9, 0x0d, 0x10, 0x14, 0x14, 0x00, 0x17, 0x19, 0x19, 0x1b, 0x1b, + 0x1b, 0x1b, 0x19, 0x39, 0x19, 0x17, 0x01, 0xe9, 0xd2, 0xe3, 0xe3, 0xa7, + 0xff, 0x5f, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc2, 0x07, 0x03, + 0x3a, 0x0d, 0x0d, 0x0d, 0xe9, 0x0d, 0x00, 0x0d, 0x10, 0x10, 0x11, 0x14, + 0x13, 0x13, 0x13, 0x93, 0xe9, 0x14, 0x12, 0x07, 0xe3, 0xe3, 0xaf, 0x67, + 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x05, 0x25, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x42, 0x0a, 0xc9, 0x0c, 0x10, 0x10, + 0x10, 0xe9, 0x09, 0x9f, 0x07, 0x00, 0xe3, 0xaf, 0x67, 0x77, 0x2f, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x1a, 0x0a, 0x00, 0x08, 0x06, + 0x06, 0x06, 0x06, 0x0a, 0x0a, 0x0a, 0x8f, 0xe9, 0x0a, 0x0a, 0x0c, 0x07, + 0xbf, 0x77, 0x2f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x80, 0x04, 0x10, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x03, 0x08, 0x08, + 0x08, 0x08, 0x0c, 0x06, 0x07, 0x07, 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x07, 0x04, 0x06, 0x08, 0x06, 0x06, + 0x1f, 0x08, 0x0b, 0x06, 0x07, 0x07, 0x77, 0x2f, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x02, 0xdd, 0xff, 0x07, 0x07, 0x77, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0xdd, + 0x7e, 0xaa, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x01, 0xdd, 0xff, 0x07, 0x07, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x87, 0x02, 0xdd, 0xe2, 0xe2, 0xdd, + 0x07, 0x07, 0x77, 0xc3, 0x2f, 0x07, 0x00, 0xdd, 0xdd, 0xc7, 0x07, 0x07, + 0xfe, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x01, 0xeb, 0x1f, 0xeb, 0xeb, + 0xeb, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x00, 0xeb, 0xe6, 0xeb, 0xdd, + 0x07, 0x07, 0x77, 0xf8, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x00, 0xf0, 0xf0, + 0x0f, 0xf0, 0xf0, 0xf0, 0xe9, 0x07, 0x07, 0x77, 0x2f, 0x83, 0x06, 0xe9, + 0xf0, 0xf0, 0xf0, 0xf0, 0x07, 0x07, 0xfc, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0x07, 0xde, 0xf0, 0x03, 0xf0, 0xf0, 0xf0, 0xf5, 0xf5, 0xdd, 0x07, 0x07, + 0x38, 0x00, 0x00, 0x5f, 0x57, 0x53, 0xf5, 0xf5, 0xf5, 0x1f, 0xf5, 0xf5, + 0xed, 0x27, 0x07, 0x77, 0x2f, 0x07, 0xe1, 0x07, 0x07, 0x06, 0xf5, 0xf0, + 0xf0, 0xf0, 0xe9, 0x63, 0xf8, 0x07, 0x07, 0x00, 0xdd, 0xdd, 0x5f, 0x17, + 0x80, 0x01, 0xf8, 0xf0, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xff, 0x1f, 0x07, + 0x7f, 0x37, 0x07, 0x07, 0x07, 0x05, 0x08, 0xe7, 0xeb, 0xeb, 0xeb, 0xe9, + 0xeb, 0xeb, 0xdd, 0xc6, 0x07, 0x07, 0xe6, 0xe4, 0xb6, 0x5f, 0x17, 0x00, + 0x05, 0xe7, 0xeb, 0xf0, 0xf0, 0xf0, 0xe9, 0xf8, 0x27, 0xfe, 0x07, 0x77, + 0x2f, 0x07, 0x07, 0x07, 0x04, 0xf2, 0x11, 0xe2, 0xe2, 0xe2, 0xe9, 0xe2, + 0xe2, 0xf3, 0x07, 0x86, 0x06, 0xe6, 0xeb, 0xeb, 0xeb, 0x5f, 0x17, 0x00, + 0x05, 0xf2, 0xe6, 0xe6, 0xe6, 0xe6, 0x22, 0xdd, 0x1f, 0xfe, 0x07, 0x77, + 0x2f, 0x07, 0x07, 0x07, 0x03, 0xe6, 0x00, 0xa5, 0xa5, 0xa5, 0xc4, 0xa5, + 0xdd, 0xe2, 0xa5, 0x60, 0xf2, 0x07, 0x05, 0xb6, 0xf0, 0xf0, 0xf0, 0xf0, + 0x60, 0xf5, 0x57, 0x0f, 0xe2, 0xdd, 0xdd, 0xdd, 0xdd, 0x9f, 0xd9, 0xe2, + 0xf3, 0x27, 0x07, 0x77, 0x2f, 0x07, 0xe0, 0x07, 0x07, 0x03, 0xe2, 0xa5, + 0xa5, 0xa5, 0xa5, 0x06, 0xeb, 0xfc, 0xfe, 0xfa, 0xe6, 0x07, 0x05, 0xf5, + 0x2c, 0xf5, 0xf5, 0xe9, 0xe7, 0x4f, 0x06, 0xa5, 0xa5, 0x00, 0xa5, 0xa5, + 0xa5, 0xdd, 0xf5, 0xf8, 0xa5, 0xf2, 0xff, 0x2f, 0x07, 0x77, 0x2f, 0x07, + 0x07, 0x07, 0x03, 0x00, 0xe4, 0xa5, 0xa5, 0xa5, 0xe6, 0xfa, 0xfc, 0xfe, + 0x30, 0xfe, 0xdd, 0x07, 0x04, 0xf3, 0xf0, 0xf0, 0xf0, 0x0c, 0xf0, 0xf0, + 0xf2, 0xf8, 0x4f, 0x06, 0xc4, 0xa5, 0x00, 0xa5, 0xa5, 0xdd, 0xfa, 0xfc, + 0xfe, 0xfa, 0xdd, 0xff, 0x2f, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x03, + 0x00, 0xdd, 0xe2, 0xdd, 0xe6, 0xf5, 0xfa, 0xfc, 0xfe, 0x61, 0xfc, 0x07, + 0x05, 0xf2, 0xeb, 0xeb, 0xeb, 0xe9, 0x30, 0xeb, 0xe7, 0x3f, 0x05, 0xe6, + 0xa5, 0xa5, 0xdd, 0x07, 0xf8, 0xfa, 0xfc, 0xfe, 0xfd, 0x3f, 0x07, 0x77, + 0xf8, 0x2f, 0x07, 0x07, 0x07, 0x05, 0xde, 0xe2, 0xe6, 0x06, 0xf2, 0xfa, + 0xfd, 0xfc, 0xdd, 0x07, 0x04, 0xdd, 0x11, 0xe2, 0xe2, 0xe2, 0xe9, 0xe6, + 0xe2, 0xf2, 0x3f, 0x80, 0x06, 0xe2, 0xe2, 0xeb, 0xf5, 0xfa, 0xfd, 0xfe, + 0x7f, 0xde, 0x3f, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x83, 0x06, 0xdd, + 0xe9, 0xf2, 0xf8, 0xed, 0x57, 0x57, 0x00, 0xa5, 0xc4, 0xc4, 0xc4, 0xc4, + 0xa5, 0xe2, 0xc4, 0x60, 0xe2, 0x2f, 0x2f, 0xe6, 0xe6, 0xf5, 0xfa, 0xfc, + 0x7f, 0xe7, 0x47, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x02, 0xdd, 0xa5, 0xa5, 0xa5, 0x03, 0xa5, 0xdd, 0xfa, 0xfd, 0xfe, + 0xdd, 0x1f, 0x1f, 0x0f, 0x00, 0xdd, 0xf2, 0xde, 0x57, 0x0f, 0x77, 0x2f, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0xdd, 0x00, 0xa5, 0xa5, + 0xa5, 0xa5, 0xf8, 0xfa, 0xfd, 0xfe, 0x7f, 0xf8, 0x07, 0x07, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, + 0x00, 0xe2, 0xa5, 0xe2, 0xf2, 0xf8, 0xfc, 0xfe, 0xfe, 0x7f, 0xdd, 0x07, + 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x00, 0x00, 0x00, 0xdd, 0xe2, 0xe2, 0xf2, 0xf8, 0xfc, 0xfe, 0xf5, + 0xff, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x02, 0xdd, 0xe9, 0x0f, 0xf2, 0xf5, 0xf8, 0xdd, 0x07, + 0x07, 0x77, 0x2f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x07, 0x00, 0x00, +}; + +//***************************************************************************** +// +// Fog/Mist Image +// +//***************************************************************************** +const uint8_t g_pui8FogImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 148, + 0x00, 0x00, 0x00, + 0x0f, 0x0f, 0x0f, + 0x11, 0x11, 0x11, + 0x13, 0x13, 0x13, + 0x1b, 0x1b, 0x1b, + 0x1c, 0x1c, 0x1c, + 0x1e, 0x1e, 0x1e, + 0x1f, 0x1f, 0x1f, + 0x22, 0x22, 0x22, + 0x26, 0x26, 0x26, + 0x2d, 0x2d, 0x2d, + 0x2e, 0x2e, 0x2e, + 0x2f, 0x2f, 0x2f, + 0x30, 0x30, 0x30, + 0x31, 0x31, 0x31, + 0x32, 0x32, 0x32, + 0x33, 0x33, 0x33, + 0x34, 0x34, 0x34, + 0x35, 0x35, 0x35, + 0x36, 0x36, 0x36, + 0x37, 0x37, 0x37, + 0x38, 0x38, 0x38, + 0x39, 0x39, 0x39, + 0x3a, 0x3a, 0x3a, + 0x3c, 0x3c, 0x3c, + 0x41, 0x41, 0x41, + 0x44, 0x44, 0x44, + 0x47, 0x47, 0x47, + 0x48, 0x48, 0x48, + 0x4a, 0x4a, 0x4a, + 0x4d, 0x4d, 0x4d, + 0x4e, 0x4e, 0x4e, + 0x4f, 0x4f, 0x4f, + 0x50, 0x50, 0x50, + 0x51, 0x51, 0x51, + 0x52, 0x52, 0x52, + 0x53, 0x53, 0x53, + 0x54, 0x54, 0x54, + 0x55, 0x55, 0x55, + 0x56, 0x56, 0x56, + 0x57, 0x57, 0x57, + 0x59, 0x59, 0x59, + 0x5a, 0x5a, 0x5a, + 0x5b, 0x5b, 0x5b, + 0x5c, 0x5c, 0x5c, + 0x5d, 0x5d, 0x5d, + 0x5e, 0x5e, 0x5e, + 0x61, 0x61, 0x61, + 0x62, 0x62, 0x62, + 0x64, 0x64, 0x64, + 0x65, 0x65, 0x65, + 0x6a, 0x6a, 0x6a, + 0x6b, 0x6b, 0x6b, + 0x6c, 0x6c, 0x6c, + 0x6d, 0x6d, 0x6d, + 0x6e, 0x6e, 0x6e, + 0x6f, 0x6f, 0x6f, + 0x70, 0x70, 0x70, + 0x71, 0x71, 0x71, + 0x72, 0x72, 0x72, + 0x73, 0x73, 0x73, + 0x74, 0x74, 0x74, + 0x75, 0x75, 0x75, + 0x76, 0x76, 0x76, + 0x77, 0x77, 0x77, + 0x78, 0x78, 0x78, + 0x79, 0x79, 0x79, + 0x7a, 0x7a, 0x7a, + 0x7b, 0x7b, 0x7b, + 0x7c, 0x7c, 0x7c, + 0x7d, 0x7d, 0x7d, + 0x7e, 0x7e, 0x7e, + 0x7f, 0x7f, 0x7f, + 0x80, 0x80, 0x80, + 0x81, 0x81, 0x81, + 0x82, 0x82, 0x82, + 0x83, 0x83, 0x83, + 0x84, 0x84, 0x84, + 0x85, 0x85, 0x85, + 0x86, 0x86, 0x86, + 0x87, 0x87, 0x87, + 0x88, 0x88, 0x88, + 0x89, 0x89, 0x89, + 0x8a, 0x8a, 0x8a, + 0x8b, 0x8b, 0x8b, + 0x8c, 0x8c, 0x8c, + 0x8d, 0x8d, 0x8d, + 0x8e, 0x8e, 0x8e, + 0x8f, 0x8f, 0x8f, + 0x90, 0x90, 0x90, + 0x91, 0x91, 0x91, + 0x92, 0x92, 0x92, + 0x93, 0x93, 0x93, + 0x94, 0x94, 0x94, + 0x98, 0x98, 0x98, + 0x99, 0x99, 0x99, + 0x9a, 0x9a, 0x9a, + 0x9b, 0x9b, 0x9b, + 0x9c, 0x9c, 0x9c, + 0x9d, 0x9d, 0x9d, + 0x9e, 0x9e, 0x9e, + 0x9f, 0x9f, 0x9f, + 0xa0, 0xa0, 0xa0, + 0xa1, 0xa1, 0xa1, + 0xa2, 0xa2, 0xa2, + 0xa3, 0xa3, 0xa3, + 0xa4, 0xa4, 0xa4, + 0xa5, 0xa5, 0xa5, + 0xa6, 0xa6, 0xa6, + 0xa7, 0xa7, 0xa7, + 0xa8, 0xa8, 0xa8, + 0xa9, 0xa9, 0xa9, + 0xaa, 0xaa, 0xaa, + 0xab, 0xab, 0xab, + 0xac, 0xac, 0xac, + 0xad, 0xad, 0xad, + 0xae, 0xae, 0xae, + 0xaf, 0xaf, 0xaf, + 0xb0, 0xb0, 0xb0, + 0xb1, 0xb1, 0xb1, + 0xb2, 0xb2, 0xb2, + 0xb3, 0xb3, 0xb3, + 0xb4, 0xb4, 0xb4, + 0xb5, 0xb5, 0xb5, + 0xb6, 0xb6, 0xb6, + 0xb7, 0xb7, 0xb7, + 0xb8, 0xb8, 0xb8, + 0xb9, 0xb9, 0xb9, + 0xba, 0xba, 0xba, + 0xbb, 0xbb, 0xbb, + 0xbc, 0xbc, 0xbc, + 0xbd, 0xbd, 0xbd, + 0xbe, 0xbe, 0xbe, + 0xbf, 0xbf, 0xbf, + 0xc0, 0xc0, 0xc0, + 0xc1, 0xc1, 0xc1, + 0xc2, 0xc2, 0xc2, + 0xc3, 0xc3, 0xc3, + 0xc4, 0xc4, 0xc4, + 0xc5, 0xc5, 0xc5, + 0xc6, 0xc6, 0xc6, + 0xc7, 0xc7, 0xc7, + 0xc8, 0xc8, 0xc8, + 0xc9, 0xc9, 0xc9, + 0xca, 0xca, 0xca, + 0xcb, 0xcb, 0xcb, + 0xd0, 0xd0, 0xd0, + 0xd2, 0xd2, 0xd2, + 0xd3, 0xd3, 0xd3, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe1, 0x07, 0x07, + 0x04, 0x4b, 0x7b, 0x7b, 0x7b, 0xe9, 0x8c, 0xd3, 0x7a, 0x7a, 0x7a, 0xe9, + 0xd1, 0x79, 0x79, 0x02, 0x79, 0x79, 0x79, 0x78, 0x78, 0x78, 0xe9, 0x77, + 0x00, 0x77, 0x77, 0x77, 0x76, 0x76, 0x76, 0x75, 0x76, 0x03, 0x75, 0x74, + 0x42, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x07, 0x06, 0x0a, 0x2d, 0x87, 0x87, 0x87, 0xe9, 0x86, 0xcc, 0x85, + 0x00, 0x86, 0x85, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x08, 0x84, 0x85, + 0x85, 0x85, 0xd1, 0x84, 0x84, 0x83, 0x00, 0x83, 0x83, 0x82, 0x82, 0x82, + 0x82, 0x81, 0x80, 0x00, 0x80, 0x80, 0x80, 0x81, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0xc1, 0x07, 0x05, + 0x30, 0x8d, 0x8c, 0x8c, 0x8c, 0xe9, 0x92, 0xd2, 0x8b, 0x8b, 0xda, 0x8a, + 0x8a, 0xe9, 0x8a, 0x00, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x87, 0x87, + 0x01, 0x87, 0x87, 0x86, 0x86, 0x85, 0x85, 0x85, 0xe9, 0x01, 0x85, 0x84, + 0x84, 0x2d, 0x00, 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x07, 0x07, 0x82, 0x05, 0x1e, 0x67, 0x66, 0x66, 0x66, 0xe9, 0x66, + 0x00, 0x65, 0x65, 0x65, 0x65, 0x65, 0x64, 0x64, 0x64, 0x00, 0x64, 0x63, + 0x63, 0x62, 0x62, 0x62, 0x62, 0x61, 0x08, 0x61, 0x60, 0x60, 0x60, 0xe9, + 0x5f, 0x5f, 0x5f, 0x18, 0x5e, 0x5e, 0x5e, 0xe9, 0xd1, 0x5f, 0x1a, 0x00, + 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x06, 0x18, 0x17, 0x17, 0x17, 0x82, 0xe9, 0x17, 0x17, 0x16, 0x16, + 0x16, 0xe9, 0x15, 0x20, 0x15, 0x15, 0xe9, 0x15, 0x15, 0x14, 0x14, 0x14, + 0xe3, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, + 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0x79, 0x7b, 0x7c, 0x7c, 0x7c, + 0xe2, 0xe9, 0xd4, 0xa3, 0x7b, 0x7b, 0x7b, 0xe9, 0x7b, 0x00, 0x7a, 0x7a, + 0x7a, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x01, 0x79, 0x78, 0x78, 0x78, 0x77, + 0x77, 0x77, 0xe9, 0x00, 0x76, 0x76, 0x76, 0x76, 0x75, 0x75, 0x75, 0x75, + 0x01, 0x74, 0x73, 0x6f, 0x24, 0x00, 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x07, 0x07, 0x03, 0x07, 0x85, 0x82, 0x81, 0x81, 0x81, + 0xe9, 0xd4, 0xa3, 0x10, 0x80, 0x80, 0x80, 0xe9, 0x80, 0x7f, 0x7f, 0x7f, + 0x88, 0xe9, 0x7e, 0x7e, 0x7e, 0xe9, 0x7d, 0x7d, 0x7d, 0x00, 0x7d, 0x7d, + 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x00, 0x7b, 0x7b, 0x7b, 0x7a, 0x79, + 0x79, 0x79, 0x7c, 0x0f, 0x05, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0xf8, 0x17, 0x07, 0x07, 0x07, 0x02, 0x94, 0x8e, 0x8e, 0x71, 0x8e, 0xe9, + 0xd4, 0xa5, 0x8d, 0x8d, 0x8d, 0xe9, 0x00, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, + 0x8c, 0x8b, 0x8b, 0x00, 0x8b, 0x8b, 0x8b, 0x89, 0x8a, 0x8a, 0x89, 0x88, + 0x00, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x00, 0x86, 0x86, + 0x86, 0x86, 0x85, 0x85, 0x85, 0x2c, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0xf0, 0x07, 0x07, 0x07, 0x02, 0x92, 0x8b, 0x8b, 0x8b, + 0x00, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0x90, 0xdb, 0x89, + 0x89, 0xe9, 0x88, 0x88, 0x88, 0x88, 0x00, 0x87, 0x87, 0x87, 0x86, 0x85, + 0x85, 0x84, 0x85, 0x01, 0x84, 0x83, 0x82, 0x82, 0x82, 0x83, 0x82, 0xd2, + 0x00, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x43, 0x7f, 0xe9, + 0x2a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xfe, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x02, 0x68, 0x00, 0x6b, 0x6b, 0x6a, 0x6a, 0x6a, 0x69, 0x69, 0x69, + 0x08, 0x69, 0x68, 0x68, 0x68, 0xe9, 0x67, 0x67, 0x67, 0x00, 0x67, 0x67, + 0x66, 0x65, 0x65, 0x65, 0x64, 0x64, 0x00, 0x63, 0x63, 0x63, 0x62, 0x62, + 0x61, 0x61, 0x61, 0x00, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x5f, 0x5f, + 0x70, 0x5f, 0xe9, 0xd4, 0xa1, 0x60, 0x19, 0x00, 0x00, 0x7f, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xc0, 0x07, 0x02, 0x4d, 0x46, 0x4a, + 0x49, 0x49, 0x49, 0x00, 0x49, 0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 0x47, + 0x00, 0x47, 0x46, 0x46, 0x46, 0x45, 0x45, 0x45, 0x45, 0x00, 0x44, 0x44, + 0x44, 0x43, 0x43, 0x43, 0x42, 0x42, 0x00, 0x42, 0x42, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x40, 0x38, 0x40, 0x40, 0xe9, 0xd4, 0xa5, 0x28, 0x00, 0x00, + 0x7f, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x06, 0x24, 0x28, 0x28, 0x28, 0xe9, 0xd4, 0xa7, 0x8f, 0x5e, 0x27, + 0x27, 0x27, 0xe9, 0xd4, 0xa7, 0x5f, 0x08, 0x27, 0x26, 0x26, 0x26, 0xe9, + 0x26, 0x26, 0x25, 0x20, 0x25, 0x25, 0xe9, 0x25, 0x24, 0x24, 0x24, 0x24, + 0x00, 0x23, 0x23, 0x23, 0x23, 0x23, 0x22, 0x1f, 0x05, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x16, 0x00, 0x4b, 0x7d, 0x78, 0x78, 0x78, + 0x79, 0x79, 0x79, 0xf8, 0xe9, 0xd4, 0x89, 0x71, 0xd4, 0x78, 0x77, 0x77, + 0x78, 0x77, 0xe9, 0xd4, 0xa7, 0x5b, 0x76, 0x76, 0x76, 0x80, 0xe9, 0x75, + 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x00, 0x74, 0x74, 0x73, 0x73, 0x73, + 0x72, 0x72, 0x72, 0x00, 0x71, 0x71, 0x71, 0x70, 0x70, 0x70, 0x6f, 0x6f, + 0x00, 0x6f, 0x6e, 0x6e, 0x6e, 0x71, 0x43, 0x00, 0x00, 0x7c, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x14, 0x51, 0x80, 0x38, 0x80, 0x80, 0xe9, 0xd4, 0xa7, + 0x80, 0x7f, 0x7f, 0x63, 0x7f, 0xe9, 0xd1, 0x7e, 0x7e, 0x7e, 0xe9, 0xd4, + 0xc0, 0xa7, 0x5e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x00, 0x7c, 0x7c, + 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x00, 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, + 0x79, 0x79, 0x79, 0x00, 0x79, 0x78, 0x78, 0x77, 0x77, 0x76, 0x75, 0x74, + 0x07, 0x74, 0x47, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xc1, 0x5f, 0x12, + 0x08, 0x8f, 0x8a, 0x8a, 0x8a, 0xe9, 0xc6, 0xd4, 0xa4, 0x89, 0x89, 0x89, + 0xe9, 0xd2, 0x88, 0x0f, 0x87, 0x88, 0x88, 0x88, 0xe9, 0xd4, 0xa7, 0x5a, + 0x04, 0x87, 0x86, 0x87, 0x87, 0x87, 0xe9, 0x87, 0x86, 0x20, 0x86, 0x86, + 0xe9, 0x86, 0x85, 0x85, 0x85, 0x85, 0x00, 0x85, 0x84, 0x83, 0x83, 0x83, + 0x82, 0x82, 0x81, 0x00, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, + 0x07, 0x82, 0x07, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xc1, 0x5f, 0x11, + 0x2f, 0x91, 0x90, 0x90, 0x90, 0xe9, 0x8c, 0xd3, 0x8f, 0x8f, 0x8f, 0xe9, + 0xd2, 0x8e, 0x8e, 0x63, 0x8e, 0xe9, 0xd4, 0x8d, 0x8d, 0x8d, 0xe9, 0xd4, + 0xc4, 0xa7, 0x5c, 0x8c, 0x8c, 0x8c, 0xe9, 0x8b, 0x8b, 0x00, 0x8b, 0x8b, + 0x8b, 0x8a, 0x8a, 0x89, 0x89, 0x88, 0x00, 0x88, 0x88, 0x87, 0x86, 0x86, + 0x85, 0x85, 0x85, 0x00, 0x84, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, + 0x0f, 0x29, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x86, 0x11, 0x32, + 0x90, 0x90, 0x90, 0xe9, 0xd1, 0x8f, 0x31, 0x8f, 0x8f, 0xe9, 0xd3, 0x8e, + 0x8e, 0x8e, 0xe9, 0x04, 0x8e, 0x8e, 0x8d, 0x8d, 0x8d, 0xe9, 0x8d, 0x8c, + 0x3c, 0x8c, 0x8c, 0xe9, 0xd4, 0xa7, 0x5a, 0x8b, 0x8b, 0x00, 0x8b, 0x8a, + 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x00, 0x87, 0x87, 0x86, 0x86, 0x86, + 0x85, 0x85, 0x85, 0x00, 0x84, 0x84, 0x84, 0x83, 0x83, 0x82, 0x82, 0x82, + 0x00, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x2c, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x11, 0x00, 0x2e, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x86, 0x86, 0x44, 0x86, 0xe9, 0x85, 0x85, 0x85, 0xe9, 0x85, 0x84, + 0x00, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x82, 0x82, + 0x82, 0x81, 0x81, 0x81, 0x80, 0x80, 0x07, 0x80, 0x80, 0x7f, 0x7f, 0x7f, + 0xe9, 0xd4, 0xa5, 0x10, 0x7e, 0x7e, 0x7e, 0xe9, 0x7d, 0x7c, 0x7c, 0x7b, + 0x00, 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, 0x79, 0x79, 0x00, 0x79, 0x78, + 0x78, 0x78, 0x78, 0x77, 0x77, 0x77, 0x04, 0x76, 0x76, 0x75, 0x75, 0x75, + 0xe9, 0x74, 0x74, 0x07, 0x74, 0x26, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xc0, 0x5f, 0x11, 0x22, 0x75, 0x73, 0x73, 0x73, 0x73, 0x00, 0x72, 0x72, + 0x72, 0x72, 0x71, 0x71, 0x71, 0x71, 0x00, 0x70, 0x70, 0x70, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6e, 0x00, 0x6d, 0x6d, 0x6d, 0x6d, 0x6c, 0x6b, 0x6b, 0x6b, + 0x00, 0x6a, 0x6a, 0x6a, 0x69, 0x69, 0x69, 0x68, 0x68, 0x70, 0x68, 0xe9, + 0xd4, 0xa7, 0x68, 0x67, 0x67, 0x67, 0x00, 0x66, 0x66, 0x66, 0x66, 0x65, + 0x65, 0x65, 0x65, 0x00, 0x64, 0x64, 0x64, 0x64, 0x63, 0x63, 0x63, 0x63, + 0x01, 0x63, 0x62, 0x62, 0x62, 0x61, 0x61, 0x61, 0xe9, 0x80, 0xd2, 0x60, + 0x60, 0x62, 0x1c, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x12, + 0x5f, 0x5d, 0x5d, 0x00, 0x5d, 0x5c, 0x5c, 0x5a, 0x5b, 0x5a, 0x59, 0x5a, + 0x00, 0x59, 0x59, 0x58, 0x58, 0x57, 0x56, 0x57, 0x57, 0x00, 0x55, 0x55, + 0x54, 0x55, 0x54, 0x53, 0x53, 0x52, 0x40, 0x52, 0xe9, 0x51, 0x51, 0x51, + 0x51, 0x50, 0x4f, 0x1c, 0x50, 0x50, 0x50, 0xe9, 0xd4, 0xa7, 0x50, 0x4e, + 0x03, 0x4e, 0x4e, 0x4e, 0x4d, 0x4d, 0x4d, 0xe9, 0xd1, 0x12, 0x4c, 0x4c, + 0x4c, 0xe9, 0x4c, 0x4b, 0xd4, 0x4b, 0x41, 0x4b, 0xb9, 0x4b, 0x50, 0x00, + 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, 0x5f, 0x13, 0x03, 0x48, 0x43, 0x43, + 0x00, 0x42, 0x42, 0x41, 0x41, 0x40, 0x40, 0x3f, 0x3f, 0x00, 0x3e, 0x3e, + 0x3d, 0x3d, 0x3d, 0x3c, 0x3c, 0x3c, 0x00, 0x3b, 0x3b, 0x3a, 0x3a, 0x3a, + 0x39, 0x39, 0x39, 0x00, 0x39, 0x38, 0x38, 0x38, 0x38, 0x38, 0x37, 0x37, + 0x0f, 0x37, 0x36, 0x36, 0x36, 0xe9, 0xd4, 0xa7, 0x59, 0x10, 0x35, 0x35, + 0x35, 0xe9, 0x35, 0x34, 0x34, 0x34, 0x83, 0xe9, 0x34, 0x34, 0x33, 0x33, + 0x33, 0xe9, 0xd4, 0x83, 0x61, 0x38, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xe0, 0xa7, 0x5f, 0x14, 0x02, 0x11, 0x11, 0x11, 0x11, 0x00, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x0f, 0x0f, 0x0f, 0x04, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, + 0xe9, 0x0d, 0x0d, 0x47, 0x0d, 0xe9, 0x0c, 0x0c, 0x0c, 0xe9, 0xd4, 0xa7, + 0x8f, 0x5c, 0x0b, 0x0b, 0x0b, 0xe9, 0xd4, 0xa7, 0x5f, 0x83, 0x13, 0x0a, + 0x01, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x81, 0x04, 0x09, 0x1d, 0x24, 0x25, 0x25, 0x25, 0xe9, + 0xc1, 0xd4, 0xa7, 0x25, 0x25, 0x24, 0x24, 0x24, 0xe9, 0x88, 0xd2, 0x23, + 0x23, 0x23, 0xe9, 0x23, 0x23, 0x22, 0x20, 0x22, 0x22, 0xe9, 0x22, 0x22, + 0x21, 0x21, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1d, 0x24, + 0x1c, 0x25, 0x25, 0x25, 0xe9, 0xd4, 0xa7, 0x25, 0x25, 0x18, 0x24, 0x24, + 0x24, 0xe9, 0xd2, 0x23, 0x23, 0x23, 0x82, 0xe9, 0x23, 0x23, 0x22, 0x22, + 0x22, 0xe9, 0x22, 0x00, 0x22, 0x21, 0x21, 0x20, 0x04, 0x00, 0x00, 0x00, + 0xc0, 0xe9, 0xd3, 0x09, 0x7e, 0x7a, 0x78, 0x78, 0x78, 0xe2, 0xe9, 0xd4, + 0xa2, 0x77, 0x77, 0x77, 0xe9, 0x77, 0x00, 0x77, 0x76, 0x76, 0x76, 0x76, + 0x76, 0x75, 0x75, 0x02, 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0xe9, 0x74, + 0x00, 0x73, 0x73, 0x73, 0x73, 0x72, 0x72, 0x72, 0x72, 0x00, 0x72, 0x71, + 0x71, 0x70, 0x73, 0x25, 0x00, 0x00, 0x03, 0x09, 0x7e, 0x7a, 0x78, 0x78, + 0x78, 0xe9, 0xd4, 0x88, 0xa2, 0x77, 0x77, 0x77, 0xe9, 0x77, 0x77, 0x76, + 0x00, 0x76, 0x76, 0x76, 0x76, 0x75, 0x75, 0x75, 0x75, 0x08, 0x75, 0x74, + 0x74, 0x74, 0xe9, 0x74, 0x73, 0x73, 0x00, 0x73, 0x73, 0x72, 0x72, 0x72, + 0x72, 0x72, 0x71, 0x01, 0x71, 0x70, 0x73, 0x25, 0x00, 0x00, 0x00, 0xe9, + 0x83, 0xd2, 0x28, 0x8b, 0x89, 0x89, 0x89, 0xe9, 0xd3, 0x18, 0x88, 0x88, + 0x88, 0xe9, 0xd4, 0x89, 0x87, 0x87, 0x44, 0x87, 0xe9, 0x87, 0x86, 0x86, + 0xe2, 0x86, 0x86, 0x00, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, + 0x00, 0x83, 0x82, 0x82, 0x82, 0x81, 0x81, 0x82, 0x81, 0x00, 0x83, 0x00, + 0x00, 0x28, 0x8b, 0x89, 0x89, 0x89, 0xc6, 0xe9, 0xd3, 0x88, 0x88, 0x88, + 0xe9, 0xd4, 0x89, 0x11, 0x87, 0x87, 0x87, 0xe9, 0x87, 0x86, 0x86, 0xe2, + 0x00, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x00, 0x84, 0x84, + 0x83, 0x82, 0x82, 0x82, 0x81, 0x81, 0x03, 0x82, 0x81, 0x83, 0x00, 0x00, + 0x00, 0xe9, 0xd2, 0x0e, 0x31, 0x8f, 0x8f, 0x8f, 0xe9, 0xd4, 0xa6, 0x8e, + 0x20, 0x8e, 0x8e, 0xe9, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x00, 0x8c, 0x8b, + 0x8b, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 0x00, 0x89, 0x89, 0x89, 0x88, 0x88, + 0x88, 0x87, 0x87, 0x00, 0x87, 0x87, 0x87, 0x86, 0x86, 0x85, 0x85, 0x85, + 0x00, 0x85, 0x8f, 0x00, 0x00, 0x31, 0x8f, 0x8f, 0x8f, 0xe2, 0xe9, 0xd4, + 0xa6, 0x8e, 0x8e, 0x8e, 0xe9, 0x8d, 0x00, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, + 0x8b, 0x8b, 0x8a, 0x00, 0x8a, 0x8a, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, + 0x00, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x00, 0x86, 0x85, + 0x85, 0x85, 0x85, 0x8f, 0x00, 0x00, 0x61, 0x00, 0xe9, 0xd2, 0x29, 0x7d, + 0x7d, 0x7d, 0xe9, 0x18, 0x7c, 0x7c, 0x7c, 0xe9, 0xd1, 0x7b, 0x7b, 0x7b, + 0x00, 0x7b, 0x7b, 0x7a, 0x79, 0x79, 0x79, 0x79, 0x78, 0x00, 0x77, 0x77, + 0x77, 0x77, 0x76, 0x75, 0x75, 0x75, 0x01, 0x75, 0x74, 0x74, 0x74, 0x73, + 0x73, 0x73, 0xe9, 0x04, 0x73, 0x73, 0x72, 0x72, 0x72, 0xe9, 0x71, 0x71, + 0x00, 0x71, 0x71, 0x79, 0x00, 0x00, 0x29, 0x7d, 0x7d, 0x46, 0x7d, 0xe9, + 0x7c, 0x7c, 0x7c, 0xe9, 0xd1, 0x7b, 0x00, 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, + 0x79, 0x79, 0x79, 0x00, 0x79, 0x78, 0x77, 0x77, 0x77, 0x77, 0x76, 0x75, + 0x00, 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x73, 0x73, 0x41, 0x73, 0xe9, + 0x73, 0x73, 0x72, 0x72, 0x72, 0xe9, 0x00, 0x71, 0x71, 0x71, 0x71, 0x79, + 0x00, 0x00, 0x00, 0xc0, 0xe9, 0xd2, 0x21, 0x52, 0x58, 0x58, 0x57, 0x57, + 0x00, 0x57, 0x56, 0x56, 0x56, 0x56, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, + 0x54, 0x54, 0x54, 0x54, 0x54, 0x53, 0x00, 0x52, 0x52, 0x52, 0x52, 0x51, + 0x51, 0x51, 0x50, 0x00, 0x50, 0x50, 0x50, 0x4f, 0x4f, 0x4f, 0x4f, 0x4e, + 0x01, 0x4e, 0x4e, 0x4e, 0x4e, 0x4d, 0x4d, 0x4d, 0xe9, 0x80, 0xd4, 0x4d, + 0x4d, 0x4e, 0x2d, 0x00, 0x00, 0x21, 0x00, 0x52, 0x58, 0x58, 0x57, 0x57, + 0x57, 0x56, 0x56, 0x00, 0x56, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, + 0x00, 0x54, 0x54, 0x54, 0x54, 0x53, 0x52, 0x52, 0x52, 0x00, 0x52, 0x51, + 0x51, 0x51, 0x50, 0x50, 0x50, 0x50, 0x00, 0x4f, 0x4f, 0x4f, 0x4f, 0x4e, + 0x4e, 0x4e, 0x4e, 0x0c, 0x4e, 0x4d, 0x4d, 0x4d, 0xe9, 0xd4, 0x4d, 0x4d, + 0x06, 0x4e, 0x2d, 0x00, 0x00, 0x00, 0xe9, 0xd3, 0x1e, 0x04, 0x15, 0x15, + 0x14, 0x14, 0x14, 0xe9, 0x13, 0x13, 0x41, 0x13, 0xe9, 0x13, 0x13, 0x12, + 0x12, 0x12, 0xe9, 0x08, 0x12, 0x11, 0x11, 0x11, 0xe9, 0x11, 0x11, 0x10, + 0x38, 0x10, 0x10, 0xe9, 0xd4, 0xa7, 0x10, 0x10, 0x11, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x15, 0x15, 0x14, 0x22, 0x14, 0x14, 0xe9, 0x13, 0x13, + 0x13, 0xe9, 0x13, 0x08, 0x13, 0x12, 0x12, 0x12, 0xe9, 0x12, 0x11, 0x11, + 0x41, 0x11, 0xe9, 0x11, 0x11, 0x10, 0x10, 0x10, 0xe9, 0xc0, 0xd4, 0xa7, + 0x10, 0x10, 0x11, 0x00, 0x00, 0x00, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x02, 0x09, 0x79, 0x7b, 0x7b, + 0x63, 0x7b, 0xe9, 0xd3, 0x7a, 0x7a, 0x7a, 0xe9, 0xd1, 0x00, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x78, 0x78, 0x78, 0x80, 0xe9, 0x77, 0x77, 0x77, 0x77, + 0x76, 0x76, 0x76, 0x00, 0x75, 0x76, 0x75, 0x74, 0x42, 0x00, 0x00, 0x00, + 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x06, + 0x2b, 0x88, 0x87, 0x87, 0x87, 0x87, 0x20, 0x87, 0x86, 0xd3, 0x87, 0x85, + 0x86, 0x85, 0x86, 0x00, 0x86, 0x86, 0x86, 0x85, 0x85, 0x84, 0x85, 0x85, + 0x40, 0x85, 0xd1, 0x84, 0x84, 0x83, 0x83, 0x83, 0x82, 0x00, 0x82, 0x82, + 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x07, 0x81, 0x23, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0xfe, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x05, 0x30, + 0x0c, 0x8d, 0x8c, 0x8c, 0x8c, 0xe9, 0xd2, 0x8b, 0x8b, 0x90, 0xda, 0x8a, + 0x8a, 0xe9, 0x8a, 0x89, 0x89, 0x89, 0x00, 0x89, 0x88, 0x88, 0x87, 0x87, + 0x87, 0x87, 0x86, 0x08, 0x86, 0x85, 0x85, 0x85, 0xe9, 0x85, 0x84, 0x84, + 0x0f, 0x2d, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xfc, 0x17, 0x07, + 0x07, 0x07, 0x07, 0x05, 0x1b, 0x68, 0x10, 0x66, 0x66, 0x66, 0xe9, 0x66, + 0x65, 0x65, 0x65, 0x00, 0x65, 0x65, 0x64, 0x64, 0x64, 0x64, 0x63, 0x63, + 0x00, 0x62, 0x62, 0x62, 0x62, 0x61, 0x61, 0x60, 0x60, 0x40, 0x60, 0xe9, + 0x5f, 0x5f, 0x5f, 0x5e, 0x5e, 0x5e, 0xc1, 0xe9, 0xd1, 0x5f, 0x1a, 0x00, + 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, + 0x82, 0x05, 0x0c, 0x13, 0x17, 0x17, 0x17, 0xe9, 0x17, 0x08, 0x17, 0x16, + 0x16, 0x16, 0xe9, 0x15, 0x15, 0x15, 0x83, 0xe9, 0x15, 0x15, 0x14, 0x14, + 0x14, 0xe9, 0xd4, 0x8f, 0xa7, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0xff, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x03, 0x07, 0x79, 0x7b, 0x7c, 0x7c, + 0x7c, 0xe9, 0xd4, 0x88, 0xa3, 0x7b, 0x7b, 0x7b, 0xe9, 0x7b, 0x7a, 0x7a, + 0x00, 0x7a, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x79, 0x78, 0x04, 0x78, 0x78, + 0x77, 0x77, 0x77, 0xe9, 0x76, 0x76, 0x00, 0x76, 0x76, 0x75, 0x75, 0x75, + 0x75, 0x74, 0x73, 0x07, 0x6f, 0x24, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xfc, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x03, 0x89, 0x82, 0x1c, 0x81, 0x81, + 0x81, 0xe9, 0xd4, 0xa3, 0x80, 0x80, 0x42, 0x80, 0xe9, 0x80, 0x7f, 0x7f, + 0x7f, 0xe9, 0x7e, 0x20, 0x7e, 0x7e, 0xe9, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, + 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x00, 0x7b, 0x7a, + 0x79, 0x79, 0x79, 0x7c, 0x05, 0x00, 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0xe1, 0x07, 0x07, 0x02, 0x93, 0x8e, 0x8e, 0x8e, 0xe9, + 0xc4, 0xd4, 0xa5, 0x8d, 0x8d, 0x8d, 0xe9, 0x8d, 0x8c, 0x00, 0x8c, 0x8c, + 0x8c, 0x8c, 0x8b, 0x8b, 0x8b, 0x8b, 0x00, 0x8b, 0x89, 0x8a, 0x8a, 0x89, + 0x88, 0x89, 0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x86, 0x86, + 0x00, 0x86, 0x86, 0x85, 0x85, 0x85, 0x2c, 0x00, 0x00, 0x7f, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xc0, 0x07, 0x02, 0x92, 0x8b, 0x8b, + 0x8b, 0x8b, 0x8b, 0x02, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0xdb, 0x89, + 0x40, 0x89, 0xe9, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x00, 0x87, 0x86, + 0x85, 0x85, 0x84, 0x85, 0x84, 0x83, 0x04, 0x82, 0x82, 0x82, 0x83, 0x82, + 0xd2, 0x81, 0x81, 0x01, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0xe9, + 0x0f, 0x2a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xf8, 0x17, 0x07, + 0x07, 0x07, 0x02, 0x68, 0x6b, 0x6b, 0x00, 0x6a, 0x6a, 0x6a, 0x69, 0x69, + 0x69, 0x69, 0x68, 0x20, 0x68, 0x68, 0xe9, 0x67, 0x67, 0x67, 0x67, 0x67, + 0x00, 0x66, 0x65, 0x65, 0x65, 0x64, 0x64, 0x63, 0x63, 0x00, 0x63, 0x62, + 0x62, 0x61, 0x61, 0x61, 0x61, 0x61, 0x01, 0x60, 0x60, 0x60, 0x60, 0x5f, + 0x5f, 0x5f, 0xe9, 0xc1, 0xd4, 0xa1, 0x60, 0x19, 0x00, 0x00, 0x00, 0xe9, + 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x02, 0x00, 0x4d, 0x46, + 0x4a, 0x49, 0x49, 0x49, 0x49, 0x48, 0x00, 0x48, 0x48, 0x47, 0x47, 0x47, + 0x47, 0x47, 0x46, 0x00, 0x46, 0x46, 0x45, 0x45, 0x45, 0x45, 0x44, 0x44, + 0x00, 0x44, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x00, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x40, 0x40, 0x40, 0xe1, 0xe9, 0xd4, 0xa5, 0x28, 0x00, + 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x80, 0x05, +}; + +//***************************************************************************** +// +// Snow Image +// +//***************************************************************************** +const uint8_t g_pui8SnowImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 254, + 0x00, 0x00, 0x00, + 0x89, 0x4b, 0x09, + 0x8b, 0x4c, 0x09, + 0x8c, 0x4d, 0x09, + 0x8a, 0x4d, 0x0a, + 0x8c, 0x4d, 0x0b, + 0x8e, 0x4e, 0x0a, + 0x8e, 0x4e, 0x0b, + 0x8d, 0x4e, 0x0c, + 0x90, 0x50, 0x0a, + 0x91, 0x50, 0x0b, + 0x8f, 0x50, 0x0c, + 0x89, 0x4f, 0x11, + 0x91, 0x50, 0x0d, + 0x91, 0x51, 0x0e, + 0x8f, 0x51, 0x0f, + 0x92, 0x52, 0x0d, + 0x93, 0x52, 0x0d, + 0x92, 0x52, 0x0f, + 0x94, 0x53, 0x0d, + 0x93, 0x53, 0x0f, + 0x94, 0x54, 0x0e, + 0x94, 0x53, 0x10, + 0x95, 0x53, 0x10, + 0x91, 0x53, 0x12, + 0x97, 0x54, 0x0e, + 0x94, 0x54, 0x11, + 0x97, 0x55, 0x0e, + 0x96, 0x54, 0x11, + 0x96, 0x55, 0x11, + 0x96, 0x55, 0x12, + 0x97, 0x56, 0x10, + 0x97, 0x55, 0x12, + 0x98, 0x56, 0x11, + 0x9a, 0x57, 0x0f, + 0x98, 0x56, 0x12, + 0x96, 0x56, 0x14, + 0x99, 0x57, 0x11, + 0x99, 0x56, 0x13, + 0x99, 0x57, 0x13, + 0x9b, 0x58, 0x11, + 0x9a, 0x57, 0x14, + 0x9b, 0x58, 0x13, + 0x9b, 0x58, 0x14, + 0x9c, 0x5a, 0x10, + 0x9c, 0x58, 0x14, + 0x9b, 0x59, 0x14, + 0x9d, 0x5a, 0x12, + 0x9c, 0x59, 0x15, + 0x96, 0x59, 0x19, + 0x9b, 0x5a, 0x16, + 0x9c, 0x5b, 0x14, + 0x9f, 0x5c, 0x11, + 0x9d, 0x5a, 0x16, + 0x9e, 0x5b, 0x16, + 0xa0, 0x5b, 0x16, + 0x9e, 0x5b, 0x17, + 0x9f, 0x5c, 0x15, + 0xa0, 0x5c, 0x17, + 0xa2, 0x5f, 0x12, + 0xa1, 0x5d, 0x17, + 0x9e, 0x5d, 0x19, + 0xa3, 0x5f, 0x14, + 0xa3, 0x5d, 0x19, + 0x9e, 0x5d, 0x1b, + 0xa2, 0x60, 0x16, + 0xa2, 0x5f, 0x18, + 0xa6, 0x61, 0x14, + 0xa3, 0x60, 0x19, + 0xa5, 0x61, 0x17, + 0x9e, 0x5f, 0x1e, + 0xa5, 0x60, 0x1a, + 0xa4, 0x60, 0x1b, + 0xa5, 0x60, 0x1b, + 0xa6, 0x62, 0x19, + 0xa7, 0x61, 0x1c, + 0xa8, 0x64, 0x16, + 0xa6, 0x62, 0x1c, + 0xa8, 0x62, 0x1c, + 0xa9, 0x62, 0x1d, + 0xa9, 0x65, 0x19, + 0xa9, 0x64, 0x1b, + 0xa9, 0x64, 0x1d, + 0xab, 0x67, 0x18, + 0xa9, 0x64, 0x1f, + 0xac, 0x66, 0x1c, + 0x9f, 0x64, 0x25, + 0xab, 0x65, 0x1f, + 0xac, 0x66, 0x1f, + 0xad, 0x66, 0x20, + 0xaf, 0x6a, 0x18, + 0xac, 0x67, 0x20, + 0xab, 0x67, 0x21, + 0xae, 0x6a, 0x1c, + 0xae, 0x68, 0x20, + 0xad, 0x69, 0x1f, + 0xaf, 0x68, 0x21, + 0xa9, 0x68, 0x25, + 0xb0, 0x69, 0x21, + 0xb0, 0x6b, 0x20, + 0xb0, 0x6a, 0x23, + 0xb1, 0x6b, 0x22, + 0xb2, 0x6e, 0x1c, + 0xb2, 0x6b, 0x23, + 0xb2, 0x6b, 0x24, + 0xb1, 0x6c, 0x26, + 0xb3, 0x6e, 0x22, + 0xb6, 0x71, 0x1c, + 0xb3, 0x6f, 0x24, + 0xb5, 0x6f, 0x24, + 0xb6, 0x6f, 0x25, + 0xb6, 0x71, 0x22, + 0xb6, 0x70, 0x25, + 0xb2, 0x6f, 0x29, + 0xb6, 0x70, 0x27, + 0xb8, 0x71, 0x26, + 0xa7, 0x6e, 0x33, + 0xb8, 0x73, 0x25, + 0xb8, 0x72, 0x28, + 0xb9, 0x72, 0x28, + 0xba, 0x73, 0x28, + 0xbb, 0x77, 0x20, + 0xba, 0x74, 0x28, + 0xbb, 0x76, 0x26, + 0xba, 0x76, 0x28, + 0xbd, 0x74, 0x2b, + 0xbd, 0x76, 0x2b, + 0xbc, 0x77, 0x2a, + 0xb1, 0x74, 0x34, + 0xbd, 0x78, 0x29, + 0xbf, 0x77, 0x2c, + 0xbe, 0x7b, 0x25, + 0xbb, 0x77, 0x30, + 0xbf, 0x79, 0x2c, + 0xc1, 0x78, 0x2e, + 0xbf, 0x7a, 0x2c, + 0xc2, 0x7e, 0x25, + 0xbf, 0x7c, 0x2b, + 0xbf, 0x7c, 0x2c, + 0xc2, 0x7b, 0x2f, + 0xc4, 0x7c, 0x2f, + 0xc2, 0x7e, 0x2d, + 0xc2, 0x7e, 0x2e, + 0xc5, 0x7d, 0x31, + 0xbc, 0x7b, 0x39, + 0xc3, 0x7f, 0x2f, + 0xc6, 0x83, 0x27, + 0xc4, 0x80, 0x2e, + 0xc9, 0x7d, 0x33, + 0xc2, 0x7d, 0x36, + 0xc4, 0x80, 0x30, + 0xc5, 0x7f, 0x32, + 0xc5, 0x81, 0x31, + 0xc9, 0x80, 0x33, + 0xc7, 0x82, 0x32, + 0xc8, 0x82, 0x33, + 0xc5, 0x81, 0x38, + 0xcb, 0x81, 0x36, + 0xc8, 0x84, 0x33, + 0xca, 0x84, 0x34, + 0xcb, 0x84, 0x36, + 0xca, 0x86, 0x34, + 0xcc, 0x8b, 0x2a, + 0xcc, 0x85, 0x37, + 0xcb, 0x84, 0x3c, + 0xd0, 0x85, 0x39, + 0xcb, 0x88, 0x36, + 0xcc, 0x8b, 0x31, + 0xcc, 0x89, 0x37, + 0xcd, 0x89, 0x37, + 0xce, 0x8a, 0x38, + 0xcf, 0x8b, 0x39, + 0xd1, 0x8a, 0x3b, + 0xce, 0x8c, 0x39, + 0xd5, 0x89, 0x3d, + 0xd2, 0x8a, 0x3e, + 0xd1, 0x8d, 0x3a, + 0xd0, 0x8e, 0x3a, + 0xd7, 0x8b, 0x40, + 0xd1, 0x8f, 0x3c, + 0xc6, 0x89, 0x4d, + 0xd2, 0x8f, 0x3d, + 0xdb, 0x8c, 0x41, + 0xd5, 0x8f, 0x3e, + 0xd4, 0x96, 0x33, + 0xd8, 0x8f, 0x41, + 0xd3, 0x92, 0x3d, + 0xd4, 0x92, 0x3e, + 0xdf, 0x8e, 0x44, + 0xdb, 0x90, 0x43, + 0xd6, 0x93, 0x40, + 0xd5, 0x94, 0x3f, + 0xe2, 0x8f, 0x45, + 0xd8, 0x93, 0x41, + 0xd6, 0x94, 0x40, + 0xd9, 0x94, 0x43, + 0xd6, 0x96, 0x41, + 0xd6, 0x90, 0x4d, + 0xe1, 0x92, 0x46, + 0xd8, 0x96, 0x42, + 0xdd, 0x94, 0x45, + 0xdc, 0x95, 0x45, + 0xe5, 0x92, 0x48, + 0xe2, 0x93, 0x48, + 0xd9, 0x97, 0x44, + 0xdd, 0x94, 0x49, + 0xe7, 0x93, 0x49, + 0xde, 0x95, 0x49, + 0xda, 0x99, 0x44, + 0xe1, 0x96, 0x48, + 0xe4, 0x95, 0x49, + 0xea, 0x94, 0x49, + 0xe1, 0x97, 0x49, + 0xdb, 0x9a, 0x46, + 0xda, 0x9b, 0x45, + 0xe6, 0x96, 0x4b, + 0xe9, 0x96, 0x4b, + 0xde, 0x9a, 0x48, + 0xe1, 0x97, 0x4d, + 0xe4, 0x98, 0x4b, + 0xe7, 0x96, 0x4e, + 0xeb, 0x96, 0x4d, + 0xdc, 0x9c, 0x48, + 0xe9, 0x98, 0x4d, + 0xeb, 0x98, 0x4d, + 0xde, 0x9d, 0x48, + 0xe2, 0x9b, 0x4b, + 0xe0, 0x9c, 0x4a, + 0xe8, 0x99, 0x4d, + 0xe4, 0x9b, 0x4c, + 0xe9, 0x99, 0x50, + 0xdf, 0x9e, 0x4a, + 0xe7, 0x9b, 0x4d, + 0xe5, 0x9c, 0x4d, + 0xe1, 0x9e, 0x4b, + 0xe2, 0x9e, 0x4c, + 0xe5, 0x9c, 0x4f, + 0xce, 0x99, 0x67, + 0xe8, 0xa1, 0x62, + 0xee, 0xa6, 0x69, + 0xe0, 0xa8, 0x77, + 0xef, 0xb2, 0x7f, + 0xe8, 0xb3, 0x85, + 0xf1, 0xbd, 0x92, + 0xb8, 0xb7, 0xb6, + 0xf1, 0xc6, 0xa1, + 0xc1, 0xc0, 0xbf, + 0xef, 0xce, 0xb2, + 0xf6, 0xd1, 0xb4, + 0xe2, 0xd6, 0xcb, + 0xf7, 0xd9, 0xc1, + 0xf9, 0xe0, 0xcc, + 0xf2, 0xe5, 0xdb, + 0xfe, 0xfe, 0xfe, + 0xff, 0xff, 0xff, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x02, + 0xf5, 0xf8, 0xfb, 0xfb, 0xfb, 0xfa, 0x7f, 0xf8, 0x07, 0x07, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0xfa, + 0x02, 0xfb, 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xcb, 0xfb, 0xff, 0x07, 0x07, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x03, + 0xfb, 0xfb, 0xfa, 0x00, 0xf5, 0xf1, 0xee, 0xe6, 0xd3, 0xd3, 0xd3, 0xdd, + 0x0f, 0xee, 0xf1, 0xf3, 0xfa, 0x89, 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x07, 0xfa, 0xfb, 0xf8, 0xf1, + 0xe0, 0xd3, 0xdd, 0x30, 0xdd, 0xdd, 0xe9, 0xd1, 0xd3, 0xd3, 0xef, 0xf5, + 0x1f, 0xfb, 0xfb, 0xf8, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x03, 0xf8, 0x01, 0xfa, 0xf8, 0xef, 0xd3, 0xdd, + 0xdd, 0xdd, 0xe9, 0xc1, 0xd4, 0xa1, 0xd3, 0xee, 0xf7, 0xfb, 0xfb, 0x05, + 0xff, 0xcd, 0x97, 0x4f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x05, 0xfa, 0xfa, 0xf3, 0xdd, 0xd8, 0x14, 0xdf, 0xdf, 0xdf, 0xe9, 0xe0, + 0xca, 0xdd, 0xdd, 0x00, 0xdd, 0xd8, 0xd8, 0xd3, 0xd3, 0xce, 0xef, 0xfa, + 0x7f, 0xfb, 0x03, 0xdb, 0xb7, 0x6f, 0x27, 0x07, 0x07, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xfa, 0xfa, 0xef, 0x00, 0xd8, 0xdd, 0xdd, 0xdd, 0xdd, + 0xe0, 0xe0, 0xe0, 0x20, 0xe0, 0xdf, 0xd9, 0xdd, 0xdd, 0xdf, 0xd8, 0xd8, + 0x00, 0xd8, 0xd8, 0xd8, 0xd3, 0xce, 0xe6, 0xf8, 0xfb, 0xff, 0x01, 0xe9, + 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x03, + 0xfa, 0xf8, 0xee, 0x01, 0xd8, 0xd8, 0xd8, 0xd8, 0xe4, 0xe4, 0xe4, 0xe9, + 0xa0, 0xd4, 0xe4, 0x7a, 0xce, 0xce, 0xce, 0xce, 0xce, 0x07, 0xf5, 0xfb, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x01, 0xf8, 0xf8, 0xee, 0xd7, 0xd7, 0xd7, 0xdb, + 0x18, 0xe4, 0xe4, 0xe4, 0xe9, 0xd4, 0xe4, 0xe4, 0xdb, 0x80, 0x69, 0xd7, + 0xce, 0xca, 0xca, 0xca, 0xce, 0xf8, 0x0f, 0xfb, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0xfe, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, + 0x00, 0x00, 0xf8, 0xf0, 0xd2, 0xd7, 0xd7, 0xdb, 0xe4, 0x0c, 0xe4, 0xe8, + 0xe8, 0xe8, 0xe9, 0xd4, 0xe4, 0xe4, 0x00, 0xdb, 0xdb, 0xd7, 0xd2, 0xd2, + 0xca, 0xca, 0xca, 0x01, 0xca, 0xe6, 0xfa, 0xfa, 0x00, 0x00, 0x00, 0xe9, + 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, + 0xf8, 0xf3, 0xca, 0xd2, 0xdb, 0xdb, 0x00, 0xdb, 0xdb, 0xdb, 0xe8, 0xe8, + 0xe8, 0xe9, 0xe9, 0x48, 0xe9, 0xe9, 0xe9, 0xe9, 0xa9, 0xe4, 0xdb, 0xdb, + 0x00, 0xd7, 0xd2, 0xd2, 0xca, 0xca, 0xc6, 0xc0, 0xf0, 0x06, 0xfa, 0xf5, + 0x00, 0x00, 0x00, 0xe9, 0xd2, 0xf8, 0x03, 0xfb, 0xfb, 0xfb, 0xfc, 0xfb, + 0xfb, 0x77, 0x37, 0xfc, 0x7f, 0x37, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, + 0x00, 0xf7, 0xf7, 0xec, 0xd2, 0xd2, 0xd2, 0xdb, 0xdb, 0x03, 0xdb, 0xe5, + 0xe5, 0xe9, 0xe9, 0xe9, 0xe9, 0xd4, 0x08, 0xe5, 0xe5, 0xdb, 0xdb, 0x41, + 0xcb, 0xcb, 0xc6, 0x01, 0xc0, 0xbc, 0xf5, 0xfa, 0x00, 0x00, 0x00, 0xe9, + 0x00, 0x00, 0xf5, 0xfb, 0xfa, 0xf3, 0xef, 0xe6, 0xdd, 0x03, 0xdd, 0xee, + 0xef, 0xf3, 0xfb, 0xfb, 0x65, 0x2d, 0xfc, 0x97, 0x4f, 0x07, 0x07, 0x07, + 0x07, 0x00, 0x00, 0x00, 0xf3, 0xf7, 0xf1, 0xcb, 0xd2, 0xd1, 0xd4, 0xd4, + 0x00, 0xd4, 0xdb, 0xe2, 0xe5, 0xe5, 0xe5, 0xe9, 0xe9, 0x48, 0xe9, 0xe9, + 0xe9, 0xe9, 0xa9, 0xe5, 0xe2, 0xd4, 0x00, 0xdb, 0xd1, 0xcb, 0xcb, 0xc6, + 0xc6, 0xc0, 0xbc, 0x00, 0xee, 0xfa, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xfb, 0xf8, 0xef, 0xd3, 0xdd, 0xdd, 0xdd, 0xe9, 0x03, 0xdd, 0xd3, + 0xd3, 0xf1, 0xfa, 0xfa, 0x5b, 0x33, 0xfe, 0xb7, 0x6f, 0x27, 0x07, 0x07, + 0x07, 0x02, 0xf5, 0x00, 0xf5, 0xec, 0xda, 0xd4, 0xd1, 0xd1, 0xd4, 0xe2, + 0x03, 0xe2, 0xe2, 0xe2, 0xeb, 0xeb, 0xeb, 0xe9, 0xd4, 0xc0, 0x82, 0x41, + 0xc6, 0xc6, 0xc6, 0xbc, 0xbc, 0xb6, 0x00, 0xf5, 0xfa, 0x00, 0x00, 0x00, + 0x00, 0xfb, 0xf1, 0x08, 0xd3, 0xe0, 0xe0, 0xe0, 0xe9, 0xdd, 0xe0, 0xdd, + 0x03, 0xdd, 0xdd, 0xd3, 0xd3, 0xf3, 0xfb, 0x52, 0x32, 0xfc, 0xc6, 0x87, + 0x3f, 0x07, 0x07, 0x03, 0xf3, 0xf3, 0x18, 0xf5, 0xf5, 0xf5, 0xe9, 0xd1, + 0xf2, 0xda, 0xda, 0x00, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xe2, 0xe3, 0xe3, + 0x18, 0xeb, 0xeb, 0xeb, 0xe9, 0xd4, 0xea, 0xe3, 0xe3, 0x00, 0xd9, 0xd4, + 0xd1, 0xd1, 0xc8, 0xc8, 0xc8, 0xbc, 0x00, 0xbc, 0xbc, 0xee, 0xf8, 0xf3, + 0x00, 0x00, 0xfa, 0x00, 0xee, 0xd8, 0xd8, 0xdf, 0xdf, 0xe4, 0xe4, 0xe4, + 0x00, 0xe4, 0xe4, 0xdf, 0xdf, 0xd8, 0xd8, 0xd8, 0xce, 0x03, 0xca, 0xef, + 0xfb, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f, 0x17, 0x07, 0x03, + 0xf1, 0xf3, 0xf3, 0x00, 0xf3, 0xf2, 0xf1, 0xef, 0xef, 0xee, 0xef, 0xf1, + 0x00, 0xf2, 0xf2, 0xf2, 0xda, 0xda, 0xcf, 0xcf, 0xcf, 0x00, 0xd4, 0xd4, + 0xd9, 0xe3, 0xe3, 0xe3, 0xe3, 0xea, 0x01, 0xea, 0xea, 0xeb, 0xeb, 0xeb, + 0xea, 0xeb, 0xc1, 0x80, 0x89, 0xd4, 0xd9, 0xd1, 0xd1, 0xc8, 0xcd, 0xc8, + 0x00, 0xc8, 0xc8, 0xc8, 0xcd, 0xf7, 0xf7, 0x00, 0xfa, 0x01, 0xe6, 0xd7, + 0xe4, 0xe4, 0xe4, 0xe4, 0xe8, 0xe9, 0x80, 0xda, 0xd7, 0xd7, 0xd7, 0xce, + 0xca, 0xef, 0xfb, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, + 0x80, 0x07, 0x00, 0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0xee, 0x00, 0xdd, 0xce, + 0xce, 0xce, 0xce, 0xca, 0xca, 0xcb, 0x00, 0xc6, 0xbc, 0xbc, 0xcd, 0xcf, + 0xcf, 0xcf, 0xcf, 0x00, 0xcf, 0xd9, 0xd9, 0xd9, 0xe3, 0xe3, 0xe3, 0xe3, + 0x01, 0xe3, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xe7, 0xab, 0x80, 0x69, 0xd9, + 0xcf, 0xcf, 0xc8, 0xc8, 0xc8, 0xcd, 0x00, 0xcd, 0xc8, 0xf3, 0xf3, 0xf8, + 0xef, 0xd2, 0xd7, 0x04, 0xdb, 0xe4, 0xe8, 0xe8, 0xe8, 0xe9, 0xe8, 0xe8, + 0x00, 0xe4, 0xe4, 0xd7, 0xd7, 0xd2, 0xca, 0xca, 0xc0, 0x0f, 0xf3, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x07, 0xef, 0xf1, 0xf1, + 0xef, 0xdc, 0xce, 0x00, 0xce, 0xce, 0xce, 0xca, 0xca, 0xcb, 0xcb, 0xc6, + 0x00, 0xc6, 0xc6, 0xbc, 0xbd, 0xbd, 0xc3, 0xc9, 0xc9, 0x00, 0xc9, 0xd9, + 0xd9, 0xd9, 0xd9, 0xe1, 0xe1, 0xe1, 0x0e, 0xe1, 0xe7, 0xe7, 0xe7, 0xe9, + 0xd1, 0x99, 0xe3, 0xc0, 0x59, 0x29, 0xc9, 0xc9, 0xcd, 0xcd, 0xda, 0xf0, + 0x00, 0xf5, 0xf3, 0xd2, 0xdb, 0xdb, 0xdb, 0xe5, 0xe9, 0x30, 0xe9, 0xe9, + 0xe9, 0xd1, 0xe5, 0xe5, 0xdb, 0xd2, 0x00, 0xcb, 0xcb, 0xc6, 0xc0, 0xfa, + 0x00, 0x00, 0x00, 0xfc, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x05, 0xf0, 0xf1, + 0x04, 0xef, 0xce, 0xca, 0xca, 0xca, 0xe9, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, + 0xc8, 0xc8, 0xbd, 0xbd, 0xc3, 0xc3, 0x00, 0xc3, 0xc3, 0xc9, 0xd0, 0xd5, + 0xd5, 0xd5, 0xde, 0x03, 0xde, 0xde, 0xde, 0xe1, 0xe1, 0xe1, 0xe9, 0xd4, + 0x80, 0x81, 0xd5, 0xd5, 0xcc, 0xc9, 0xc6, 0xd1, 0xda, 0x00, 0xdc, 0xec, + 0xec, 0xee, 0xf7, 0xee, 0xd4, 0xd4, 0x00, 0xe2, 0xe2, 0xe5, 0xe5, 0xe5, + 0xeb, 0xeb, 0xeb, 0x80, 0xe9, 0xe5, 0xe5, 0xe2, 0xd4, 0xd4, 0xd1, 0xc6, + 0x01, 0xc6, 0xbc, 0xf0, 0xf8, 0x00, 0x00, 0x00, 0xe9, 0xf8, 0xd4, 0xa7, + 0x5f, 0x17, 0x03, 0xef, 0xef, 0xe6, 0x10, 0xc0, 0xc0, 0xc0, 0xe9, 0xc0, + 0xc6, 0xbc, 0xbc, 0x10, 0xbd, 0xbd, 0xbd, 0xe9, 0xc1, 0xc3, 0xc3, 0xc3, + 0x00, 0xcc, 0xcc, 0xd0, 0xd0, 0xd5, 0xd5, 0xd5, 0xd5, 0x07, 0xde, 0xd5, + 0xde, 0xde, 0xde, 0xe9, 0xd3, 0x7a, 0x01, 0xc8, 0xe6, 0xef, 0xf3, 0xf5, + 0xf5, 0xf5, 0xe9, 0x00, 0xf2, 0xda, 0xd4, 0xd4, 0xd4, 0xe2, 0xe2, 0xeb, + 0x30, 0xeb, 0xeb, 0xe9, 0xd1, 0xe2, 0xe2, 0xd4, 0xd4, 0x00, 0xd1, 0xc6, + 0xbc, 0xbc, 0xbc, 0xf8, 0x00, 0x00, 0x7e, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0x17, 0x02, 0xee, 0x06, 0xee, 0xcb, 0xbc, 0xbc, 0xbc, 0xe9, 0xd1, 0xbd, + 0x00, 0xbd, 0xbd, 0xb9, 0xb9, 0xb9, 0xb9, 0xc1, 0xbe, 0x00, 0xc1, 0xc1, + 0xc7, 0xc7, 0xcc, 0xcc, 0xd0, 0xd0, 0x03, 0xd0, 0xd0, 0xd0, 0xd6, 0xd6, + 0xd6, 0xe9, 0xd4, 0x80, 0xa1, 0xd0, 0xe6, 0xf1, 0xf3, 0xf1, 0xef, 0xee, + 0x00, 0xe6, 0xdc, 0xe6, 0xee, 0xee, 0xda, 0xda, 0xcf, 0x01, 0xcf, 0xd4, + 0xd9, 0xe3, 0xea, 0xea, 0xea, 0xe9, 0x80, 0xd1, 0xe3, 0xe3, 0xd9, 0xd9, + 0xc8, 0xc8, 0xbd, 0x01, 0xb6, 0xb6, 0xf2, 0xf5, 0x00, 0x00, 0x00, 0xe9, + 0xf0, 0xd4, 0xa7, 0x5f, 0x17, 0x00, 0x00, 0xee, 0xee, 0x00, 0xbc, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xbd, 0xb6, 0x00, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, + 0xb9, 0xb9, 0xb9, 0x00, 0xb9, 0xbe, 0xbe, 0xbe, 0xbe, 0xc1, 0xc7, 0xc7, + 0x00, 0xc7, 0xc7, 0xc7, 0xcc, 0xd0, 0xcc, 0xd0, 0xd0, 0x60, 0xd0, 0xe9, + 0xc2, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0xd1, 0xef, 0xf1, 0xef, 0xdc, + 0xca, 0xca, 0xca, 0x00, 0xca, 0xcb, 0xc6, 0xc6, 0xc8, 0xc8, 0xc9, 0xc9, + 0x00, 0xc9, 0xd9, 0xd9, 0xd9, 0xe1, 0xe7, 0xe7, 0xe7, 0x80, 0xe9, 0xe1, + 0xe1, 0xe1, 0xd9, 0xd9, 0xc9, 0xc9, 0x00, 0xbd, 0xbd, 0xb6, 0xb2, 0xee, + 0xf8, 0x00, 0x00, 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x00, 0xee, + 0x00, 0xee, 0xbc, 0xb6, 0xb2, 0xb6, 0xb2, 0xb6, 0xb6, 0x00, 0xb6, 0xb6, + 0xb9, 0xb6, 0xb9, 0xb9, 0xb9, 0xb9, 0x00, 0xb7, 0xb7, 0xb7, 0xb7, 0xbb, + 0xbb, 0xbe, 0xc2, 0x01, 0xc2, 0xc4, 0xc4, 0xc4, 0xc7, 0xc7, 0xc7, 0xe9, + 0x88, 0xd4, 0xcc, 0xcc, 0xcc, 0xe9, 0xcf, 0xef, 0xef, 0x00, 0xd7, 0xc0, + 0xca, 0xc6, 0xcb, 0xc6, 0xc6, 0xc6, 0x00, 0xbd, 0xbd, 0xbd, 0xc3, 0xc3, + 0xc9, 0xd5, 0xd5, 0x00, 0xd9, 0xd9, 0xde, 0xde, 0xe1, 0xe7, 0xe1, 0xe1, + 0x00, 0xe1, 0xe1, 0xde, 0xde, 0xde, 0xd5, 0xc9, 0xc9, 0x00, 0xc3, 0xb9, + 0xb2, 0xb2, 0xc5, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0x17, 0xda, 0xda, 0x08, 0xc5, 0xae, 0xae, 0xae, 0xe9, 0xae, 0xb2, 0xb2, + 0x0c, 0xb2, 0xb7, 0xb7, 0xb7, 0xe9, 0xd1, 0xbb, 0xbb, 0x00, 0xbb, 0xbf, + 0xbf, 0xbf, 0xc2, 0xc2, 0xc2, 0xc4, 0x18, 0xc4, 0xc4, 0xc4, 0xb7, 0x99, + 0xc8, 0xee, 0xee, 0x10, 0xbc, 0xbc, 0xbc, 0xe9, 0xbc, 0xbd, 0xbd, 0xbd, + 0x00, 0xb9, 0xc1, 0xc1, 0xc3, 0xcc, 0xcc, 0xd0, 0xd0, 0x02, 0xd5, 0xd5, + 0xd5, 0xd5, 0xde, 0xde, 0xd2, 0xd5, 0x00, 0xd0, 0xd0, 0xcc, 0xc3, 0xc1, + 0xb9, 0xb2, 0xae, 0x07, 0xb2, 0xf5, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xc1, 0x5f, 0x17, 0xc5, 0xc5, 0xa5, 0xa5, 0xa5, 0xe9, 0x00, 0xae, 0xae, + 0xae, 0xac, 0xae, 0xb7, 0xb7, 0xb7, 0x04, 0xb5, 0xb7, 0xb5, 0xb5, 0xb5, + 0xe9, 0xb7, 0xba, 0x07, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xe9, 0xd4, 0xa2, + 0x00, 0xbf, 0xbf, 0xbe, 0xee, 0xda, 0xb6, 0xb6, 0xb6, 0x80, 0xe9, 0xbd, + 0xbd, 0xb9, 0xb9, 0xb9, 0xbe, 0xbe, 0x00, 0xbe, 0xc4, 0xc7, 0xc7, 0xc7, + 0xcc, 0xcc, 0xcc, 0x80, 0xe9, 0xd0, 0xd0, 0xcc, 0xd0, 0xcc, 0xcc, 0xc7, + 0x00, 0xc7, 0xc3, 0xc1, 0xb7, 0xb7, 0xae, 0xae, 0xae, 0x00, 0xf2, 0x00, + 0x00, 0xf2, 0xf3, 0xf3, 0xf2, 0xf0, 0x0f, 0xee, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x02, 0xda, 0xc5, 0xae, 0xa5, 0xa5, 0xa5, 0xe9, 0xa5, + 0x00, 0xa5, 0xac, 0xac, 0xac, 0xac, 0xb0, 0xb0, 0xb0, 0x01, 0xb0, 0xb3, + 0xb0, 0xb1, 0xb3, 0xb3, 0xb3, 0xe9, 0x05, 0xba, 0xb3, 0xba, 0xba, 0xba, + 0xe9, 0xba, 0x89, 0x40, 0xb5, 0xaa, 0xb5, 0xba, 0xcd, 0xda, 0xae, 0xae, + 0x00, 0xae, 0xae, 0xb2, 0xb2, 0xb2, 0xb7, 0xb7, 0xb7, 0x80, 0xe9, 0xbb, + 0xbb, 0xbe, 0xc2, 0xc2, 0xc2, 0xc2, 0x30, 0xc2, 0xc4, 0xdb, 0xd3, 0xbf, + 0xbf, 0xb7, 0xb7, 0x00, 0xac, 0xac, 0xac, 0xa5, 0xed, 0xf0, 0xf0, 0xed, + 0x00, 0xc5, 0xc5, 0xc5, 0xed, 0xf0, 0xf3, 0xf2, 0xda, 0x1e, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0xc5, 0x08, 0xc5, 0x9d, 0x9d, 0x9d, 0xe9, + 0xa0, 0xa3, 0xa3, 0x00, 0xa3, 0xa5, 0xaa, 0xab, 0xab, 0xb0, 0xb0, 0xb0, + 0x03, 0xb0, 0xb0, 0xab, 0xb1, 0xb1, 0xb1, 0xe9, 0xd4, 0x81, 0xa1, 0xb0, + 0xab, 0xb0, 0xb1, 0xb1, 0xac, 0xc1, 0x00, 0xaf, 0xc5, 0xae, 0xa5, 0xa5, + 0xa5, 0xa5, 0xac, 0x00, 0xac, 0xaf, 0xb7, 0xb7, 0xb5, 0xb5, 0xb3, 0xb5, + 0x04, 0xb5, 0xba, 0xba, 0xba, 0xbb, 0xe9, 0xbb, 0xbb, 0xc0, 0xd3, 0xba, + 0xba, 0xb5, 0xb3, 0xac, 0xac, 0xab, 0x01, 0xa5, 0xa5, 0xa3, 0xa0, 0x9d, + 0x9d, 0x9d, 0xe9, 0x00, 0x94, 0xa4, 0xc5, 0xf0, 0xf0, 0xbd, 0x00, 0x00, + 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x59, 0xc5, 0xc5, 0xa4, 0x00, 0x94, 0x94, + 0x94, 0x94, 0x99, 0x99, 0x99, 0x9d, 0x00, 0xa0, 0xa0, 0xa3, 0xa9, 0xa9, + 0xaa, 0xaa, 0xad, 0x1c, 0xad, 0xab, 0xad, 0xe2, 0xd2, 0xbb, 0xad, 0xaa, + 0x20, 0xaa, 0xaa, 0x41, 0xaa, 0xad, 0xaa, 0xab, 0xab, 0x00, 0xc5, 0xc5, + 0x9d, 0x9d, 0xa3, 0x9d, 0xa3, 0xa9, 0x00, 0xaa, 0xab, 0xb0, 0xb1, 0xb1, + 0xb3, 0xb1, 0xb3, 0x93, 0xd9, 0xb3, 0xb3, 0xe9, 0xb1, 0xb1, 0x81, 0xa1, + 0xc0, 0xd9, 0xa9, 0xab, 0xaa, 0xa9, 0xa3, 0xa3, 0xa3, 0x00, 0xa3, 0xa0, + 0xa0, 0xa0, 0x9d, 0x9d, 0x9d, 0x99, 0x00, 0x99, 0x94, 0x94, 0xc5, 0xf0, + 0xc5, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0xaf, 0xaf, + 0x10, 0x94, 0x94, 0x94, 0xe9, 0x94, 0x99, 0x99, 0x9b, 0x00, 0x9f, 0xa0, + 0xa3, 0xa6, 0xa8, 0xa9, 0xaa, 0xaa, 0x10, 0xa9, 0xa9, 0xa9, 0xe9, 0xa9, + 0xa8, 0xa9, 0xa8, 0x20, 0xa8, 0xa8, 0xe9, 0xa8, 0xa8, 0xa6, 0xa6, 0xa6, + 0x80, 0xe9, 0xa8, 0xa6, 0xa8, 0xa3, 0xc5, 0xa4, 0x99, 0x00, 0x99, 0x99, + 0x99, 0x9b, 0xa0, 0xa3, 0xa9, 0xaa, 0x18, 0xad, 0xad, 0xad, 0xe9, 0xd1, + 0xaa, 0xad, 0xaa, 0x03, 0xaa, 0xaa, 0xa9, 0xa9, 0xa8, 0xa8, 0x61, 0xb1, + 0x80, 0xa1, 0xa8, 0xa6, 0xa3, 0x9f, 0xa0, 0xa0, 0xa0, 0x00, 0xa0, 0x9f, + 0x9f, 0x9b, 0x9f, 0x9b, 0x99, 0x99, 0x00, 0x94, 0x94, 0x8c, 0xa4, 0xed, + 0xc5, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0xc5, 0xa4, 0xa4, 0x8f, + 0x00, 0x8f, 0x8c, 0x8f, 0x8c, 0x8c, 0x8f, 0x8f, 0x97, 0x00, 0x9a, 0x9a, + 0x9b, 0x9f, 0x9f, 0xa1, 0xa1, 0xa1, 0x1e, 0xa6, 0xa6, 0xa6, 0xe9, 0xb9, + 0xa1, 0xd3, 0x9f, 0x20, 0x9f, 0x9f, 0xe9, 0x9f, 0x9f, 0x9e, 0x9f, 0xa4, + 0x00, 0xa4, 0x94, 0x8f, 0x8f, 0x97, 0x97, 0x99, 0x9b, 0x00, 0x9f, 0xa1, + 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0x00, 0xa8, 0xa6, 0xa6, 0xa6, 0xa6, + 0xa6, 0xa1, 0xa1, 0x66, 0xa1, 0x02, 0x59, 0xa1, 0xa6, 0x39, 0x93, 0x9e, + 0x00, 0x9e, 0x9e, 0x9e, 0x9b, 0x9f, 0x9f, 0x9b, 0x9b, 0x00, 0x9a, 0x9a, + 0x97, 0x8f, 0x8c, 0x8b, 0x9c, 0xed, 0x0e, 0xb2, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa6, 0x9c, 0x00, 0xa4, 0x95, 0x8b, 0x86, 0x8b, 0x8b, 0x8b, 0x8b, + 0x00, 0x8b, 0x8c, 0x8f, 0x97, 0x9a, 0x9a, 0x9a, 0x9e, 0x02, 0x9e, 0x9e, + 0x9e, 0x9e, 0xa1, 0xa1, 0xcb, 0x9e, 0x06, 0x9e, 0x9b, 0x9e, 0x9a, 0x9b, + 0x59, 0x41, 0x9a, 0x10, 0x9a, 0x98, 0x9a, 0xa1, 0xa4, 0x9c, 0x8b, 0x8b, + 0x00, 0x8b, 0x8b, 0x8c, 0x8f, 0x97, 0x9a, 0x9a, 0x9e, 0x00, 0x9f, 0xa1, + 0xa1, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x80, 0x1b, 0x98, 0x98, 0x97, 0x97, + 0x97, 0x98, 0x98, 0xf0, 0xa2, 0x82, 0xc6, 0x23, 0x97, 0x91, 0x8c, 0x8b, + 0x01, 0x86, 0x82, 0x9c, 0xed, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa6, + 0x9c, 0xa4, 0x86, 0x86, 0x86, 0x86, 0x00, 0x86, 0x82, 0x86, 0x8b, 0x8b, + 0x8e, 0x91, 0x96, 0x00, 0x96, 0x98, 0x98, 0x98, 0x9a, 0x9e, 0x9e, 0x9a, + 0x20, 0x9a, 0x9a, 0xba, 0x9a, 0x96, 0x96, 0x96, 0x91, 0x00, 0x91, 0x91, + 0x91, 0x8c, 0x91, 0x8c, 0x8c, 0x8e, 0x10, 0x8b, 0x8e, 0x8e, 0x89, 0x9c, + 0x95, 0x82, 0x86, 0x01, 0x86, 0x86, 0x8b, 0x8b, 0x8c, 0x96, 0x96, 0x01, + 0x02, 0x9a, 0x98, 0x98, 0x96, 0x96, 0x91, 0x21, 0x8b, 0x10, 0x8b, 0x8b, + 0x8a, 0xda, 0x8b, 0x8c, 0x91, 0x91, 0x60, 0x91, 0xe9, 0xd1, 0x96, 0x96, + 0x98, 0x96, 0x98, 0x20, 0x98, 0x98, 0xe9, 0x98, 0x93, 0x91, 0x8c, 0x8b, + 0x00, 0x86, 0x82, 0x7d, 0xb4, 0xb4, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, + 0xa5, 0x9c, 0x9c, 0x82, 0x7d, 0x7d, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x82, + 0x87, 0x8b, 0x8d, 0x01, 0x8e, 0x8e, 0x91, 0x91, 0x93, 0x93, 0x93, 0xe9, + 0x00, 0x91, 0x96, 0x93, 0x91, 0x8e, 0x8e, 0x8d, 0x8a, 0x03, 0x8b, 0x8b, + 0x8b, 0x87, 0x87, 0x87, 0xe9, 0xd1, 0x00, 0x8a, 0x8b, 0x8e, 0x8e, 0x95, + 0x84, 0x7d, 0x7d, 0x04, 0x7d, 0x7e, 0x82, 0x87, 0x87, 0xa1, 0x91, 0x8e, + 0x20, 0x8e, 0x8e, 0x09, 0x85, 0x85, 0x82, 0x82, 0x82, 0x06, 0x7e, 0x7f, + 0x7e, 0x7e, 0x7e, 0xe9, 0x31, 0x87, 0x88, 0xe9, 0x87, 0x8a, 0x8a, 0x19, + 0x8e, 0x91, 0x91, 0x00, 0x93, 0x93, 0x93, 0x93, 0x93, 0x91, 0x8d, 0x8a, + 0x00, 0x87, 0x82, 0x7e, 0x78, 0x7d, 0xb4, 0x00, 0x00, 0x70, 0x00, 0xe9, + 0xd4, 0xa5, 0x95, 0x95, 0x7d, 0x7d, 0x40, 0x7d, 0xe9, 0x7e, 0x7e, 0x82, + 0x87, 0x87, 0x87, 0x00, 0x8a, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, + 0x00, 0x8d, 0x8e, 0x8b, 0x8a, 0x87, 0x87, 0x85, 0x85, 0x00, 0x82, 0x7f, + 0x82, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x20, 0x7f, 0x7f, 0xe1, 0x82, 0x87, + 0x87, 0x87, 0x84, 0x05, 0x7d, 0x77, 0x77, 0x78, 0x78, 0xa1, 0x85, 0x99, + 0x00, 0x87, 0x85, 0x81, 0x81, 0x7f, 0x7f, 0x7a, 0x7a, 0x42, 0x78, 0x69, + 0x78, 0x77, 0x77, 0x77, 0x29, 0x7a, 0x00, 0x7d, 0x7f, 0x7a, 0x7f, 0x7f, + 0x7f, 0x81, 0x81, 0x00, 0x81, 0x87, 0x87, 0x89, 0x89, 0x8a, 0x8d, 0x8d, + 0x40, 0x8d, 0xe9, 0x8d, 0x8d, 0x89, 0x85, 0x7f, 0x7a, 0x01, 0x77, 0x70, + 0x90, 0xa4, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa4, 0x90, 0x84, 0x77, + 0x77, 0x77, 0x77, 0x00, 0x78, 0x78, 0x7a, 0x7d, 0x7f, 0x7f, 0x7f, 0x81, + 0x04, 0x81, 0x87, 0x87, 0x87, 0x89, 0xe1, 0x87, 0x87, 0x41, 0x82, 0x89, + 0x7f, 0x7f, 0x7a, 0x7a, 0x7a, 0xe9, 0x80, 0xd4, 0x7a, 0x7a, 0x7f, 0x7e, + 0x7f, 0x84, 0x76, 0x00, 0x6e, 0x72, 0x70, 0x72, 0x77, 0x7a, 0x7a, 0x7c, + 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7a, 0x7a, 0x76, 0x73, 0x08, 0x72, 0x6e, + 0x6e, 0x6e, 0xe9, 0x6e, 0x6d, 0x6d, 0x40, 0x6d, 0xe9, 0x6e, 0x73, 0x72, + 0x73, 0x73, 0x73, 0x00, 0x76, 0x77, 0x7a, 0x7a, 0x7c, 0x81, 0x7f, 0x81, + 0x08, 0x81, 0x89, 0x89, 0x89, 0xe9, 0x89, 0x89, 0x81, 0x00, 0x81, 0x7c, + 0x7a, 0x73, 0x6e, 0x76, 0x90, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa4, + 0x84, 0x84, 0x72, 0x00, 0x72, 0x73, 0x72, 0x73, 0x73, 0x77, 0x77, 0x7a, + 0x01, 0x7a, 0x7a, 0x7f, 0x7f, 0x81, 0x81, 0x81, 0xe9, 0x20, 0x7f, 0x7f, + 0x99, 0x78, 0x77, 0x76, 0x76, 0x73, 0x18, 0x76, 0x73, 0x73, 0x12, 0xd1, + 0x73, 0x73, 0x76, 0x00, 0x7a, 0x78, 0x7a, 0x76, 0x71, 0x67, 0x68, 0x68, + 0x00, 0x6d, 0x6d, 0x6e, 0x70, 0x70, 0x70, 0x70, 0x73, 0x00, 0x6e, 0x6e, + 0x6d, 0x6d, 0x68, 0x68, 0x68, 0x64, 0x00, 0x67, 0x64, 0x64, 0x64, 0x64, + 0x67, 0x62, 0x62, 0x00, 0x65, 0x65, 0x65, 0x65, 0x68, 0x68, 0x67, 0x67, + 0x00, 0x6d, 0x6d, 0x6d, 0x6d, 0x70, 0x70, 0x75, 0x75, 0x01, 0x7a, 0x7b, + 0x7b, 0x7b, 0x81, 0x81, 0x81, 0xe9, 0x00, 0x7b, 0x7b, 0x75, 0x70, 0x6d, + 0x67, 0x68, 0x90, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x84, 0x84, + 0x00, 0x6d, 0x6e, 0x6e, 0x6e, 0x6e, 0x70, 0x70, 0x73, 0x03, 0x76, 0x76, + 0x77, 0x7a, 0x7a, 0x7a, 0xe9, 0xd1, 0x04, 0x76, 0x76, 0x76, 0x70, 0x70, + 0x42, 0x6e, 0x6e, 0x04, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0xd1, 0x6e, 0x6e, + 0x00, 0x70, 0x73, 0x72, 0x76, 0x76, 0x71, 0x5e, 0x60, 0x00, 0x62, 0x65, + 0x65, 0x67, 0x6a, 0x67, 0x6a, 0x67, 0x00, 0x65, 0x67, 0x65, 0x62, 0x62, + 0x60, 0x5e, 0x59, 0x30, 0x59, 0x59, 0xe9, 0xd3, 0x5e, 0x5e, 0x5e, 0x60, + 0x00, 0x60, 0x60, 0x62, 0x64, 0x64, 0x67, 0x67, 0x6a, 0x00, 0x6a, 0x6a, + 0x6d, 0x6d, 0x6f, 0x75, 0x75, 0x7b, 0x20, 0x7b, 0x7b, 0xe9, 0x75, 0x75, + 0x75, 0x6d, 0x65, 0x03, 0x65, 0x5e, 0x80, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0x80, 0xa4, 0x84, 0x84, 0x68, 0x68, 0x68, 0x6c, 0x67, 0x00, 0x6d, 0x6d, + 0x6d, 0x70, 0x70, 0x70, 0x73, 0x73, 0x44, 0x73, 0xe9, 0x76, 0x73, 0x70, + 0x89, 0x6d, 0x67, 0x83, 0x39, 0x67, 0x67, 0x67, 0x65, 0x65, 0xe9, 0xd9, + 0x00, 0x67, 0x68, 0x6d, 0x6d, 0x72, 0x6d, 0x72, 0x71, 0x01, 0x5c, 0x57, + 0x57, 0x58, 0x5e, 0x5e, 0x5e, 0xe9, 0x00, 0x5e, 0x5b, 0x58, 0x58, 0x57, + 0x57, 0x54, 0x4f, 0x00, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x52, 0x52, + 0x02, 0x52, 0x52, 0x52, 0x57, 0x57, 0x57, 0xe9, 0x5b, 0x00, 0x5b, 0x5e, + 0x5e, 0x60, 0x60, 0x63, 0x65, 0x65, 0x00, 0x6a, 0x6a, 0x6a, 0x6f, 0x6f, + 0x75, 0x75, 0x75, 0x00, 0x75, 0x6f, 0x6f, 0x6a, 0x63, 0x63, 0x5f, 0x58, + 0x0e, 0x71, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa4, 0x80, 0x00, 0x71, 0x64, + 0x64, 0x62, 0x65, 0x65, 0x65, 0x65, 0x00, 0x6a, 0x6a, 0x6a, 0x6d, 0x6a, + 0x6d, 0x6d, 0x6d, 0x88, 0xe9, 0x6a, 0x67, 0x6a, 0x72, 0x65, 0x62, 0x62, + 0x06, 0x62, 0x62, 0x60, 0x62, 0x60, 0xe9, 0xb2, 0x62, 0x00, 0x64, 0x68, + 0x68, 0x69, 0x65, 0x69, 0x61, 0x4d, 0x00, 0x4e, 0x4e, 0x4e, 0x52, 0x57, + 0x57, 0x57, 0x52, 0x00, 0x52, 0x4f, 0x4e, 0x4d, 0x4b, 0x49, 0x49, 0x49, + 0x82, 0xe9, 0x49, 0x4d, 0x4b, 0x4b, 0x4b, 0xe9, 0x4b, 0x10, 0x4d, 0x4e, + 0x4b, 0x09, 0x51, 0x4e, 0x51, 0x52, 0x00, 0x55, 0x58, 0x58, 0x5f, 0x63, + 0x63, 0x63, 0x6a, 0x00, 0x6a, 0x6a, 0x6f, 0x6f, 0x6f, 0x6f, 0x6a, 0x63, + 0x00, 0x63, 0x5f, 0x55, 0x51, 0x69, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, + 0xa4, 0x9c, 0x71, 0x69, 0x5e, 0x5e, 0x00, 0x5e, 0x5e, 0x60, 0x62, 0x62, + 0x65, 0x65, 0x65, 0xc4, 0xe9, 0xd3, 0x62, 0x60, 0x60, 0x5a, 0x5b, 0x5e, + 0x18, 0x59, 0x59, 0x59, 0xe9, 0xd4, 0x59, 0x5b, 0x60, 0x00, 0x60, 0x64, + 0x60, 0x64, 0x61, 0x48, 0x44, 0x44, 0x10, 0x47, 0x47, 0x47, 0xe9, 0x48, + 0x48, 0x44, 0x3f, 0x01, 0x3f, 0x3f, 0x3c, 0x3c, 0x3a, 0x3a, 0x3a, 0xc1, + 0x43, 0x48, 0xa1, 0x44, 0x44, 0x44, 0x44, 0x09, 0x02, 0x00, 0x4a, 0x47, + 0x4a, 0x4a, 0x51, 0x51, 0x55, 0x5f, 0x00, 0x5d, 0x5d, 0x63, 0x66, 0x66, + 0x66, 0x66, 0x5d, 0x00, 0x5d, 0x55, 0x51, 0x4e, 0x4a, 0x61, 0x00, 0x00, + 0x70, 0x00, 0xe9, 0xd4, 0xa5, 0x71, 0x69, 0x57, 0x57, 0x00, 0x58, 0x58, + 0x5b, 0x5f, 0x5e, 0x5e, 0x5f, 0x63, 0x00, 0x5f, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x5e, 0x5e, 0x08, 0x5b, 0x58, 0x58, 0x58, 0x59, 0x57, 0x57, 0x57, + 0x38, 0x57, 0x52, 0xda, 0xba, 0x99, 0x5c, 0x57, 0x5c, 0x00, 0x5b, 0x58, + 0x61, 0x46, 0x33, 0x37, 0x3a, 0x3c, 0x00, 0x3c, 0x3c, 0x3a, 0x3c, 0x3a, + 0x3a, 0x36, 0x36, 0x00, 0x35, 0x35, 0x30, 0x30, 0x30, 0x32, 0x32, 0x35, + 0x11, 0x3a, 0x3f, 0x3f, 0xe9, 0x3a, 0x3a, 0x3a, 0x29, 0x00, 0x3f, 0x3f, + 0x3c, 0x42, 0x42, 0x3f, 0x3f, 0x44, 0x00, 0x44, 0x45, 0x47, 0x47, 0x4a, + 0x51, 0x55, 0x5d, 0x00, 0x5d, 0x5d, 0x5d, 0x5d, 0x55, 0x53, 0x50, 0x4a, + 0x03, 0x47, 0x44, 0x61, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa5, 0x80, + 0x61, 0x52, 0x4e, 0x4e, 0x52, 0x52, 0x00, 0x57, 0x58, 0x58, 0x58, 0x58, + 0x5f, 0x5f, 0x5f, 0x80, 0xe9, 0x58, 0x55, 0x55, 0x52, 0x4e, 0x45, 0x3e, + 0x00, 0x3e, 0x3e, 0x3e, 0x45, 0x4a, 0x4e, 0x4e, 0x4e, 0x06, 0x4e, 0x4f, + 0x4f, 0x4f, 0x4f, 0xd1, 0xb9, 0x54, 0x00, 0x52, 0x54, 0x57, 0x57, 0x61, + 0x3d, 0x28, 0x2a, 0x10, 0x2e, 0x2e, 0x2e, 0xe9, 0x27, 0x29, 0x27, 0x26, + 0x00, 0x26, 0x23, 0x23, 0x23, 0x23, 0x20, 0x20, 0x56, 0x00, 0x3d, 0x38, + 0x38, 0x38, 0x38, 0x38, 0x35, 0x38, 0x00, 0x35, 0x38, 0x35, 0x35, 0x36, + 0x36, 0x36, 0x36, 0x00, 0x37, 0x37, 0x3a, 0x3a, 0x3c, 0x42, 0x42, 0x44, + 0x00, 0x45, 0x4a, 0x50, 0x53, 0x53, 0x53, 0x53, 0x50, 0x00, 0x50, 0x4a, + 0x45, 0x3f, 0x42, 0x61, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa5, 0x90, + 0x61, 0x54, 0x4b, 0x00, 0x4d, 0x4d, 0x4e, 0x4e, 0x4e, 0x52, 0x52, 0x55, + 0x00, 0x55, 0x55, 0x55, 0x55, 0x57, 0x51, 0x52, 0x51, 0x00, 0x5e, 0x94, + 0xee, 0xf3, 0xf8, 0xfb, 0xfb, 0xf8, 0x00, 0xf3, 0xda, 0x82, 0x4e, 0x47, + 0x4d, 0x4b, 0x4b, 0x60, 0x4b, 0xe9, 0xd2, 0x4d, 0x4d, 0x4d, 0x4d, 0x51, + 0x00, 0x54, 0x46, 0x32, 0x1d, 0x1d, 0x1f, 0x1d, 0x21, 0x00, 0x1d, 0x1d, + 0x1d, 0x1d, 0x1a, 0x1a, 0x1a, 0x16, 0x00, 0x17, 0x16, 0x14, 0x14, 0x80, + 0xed, 0xb4, 0x32, 0x18, 0x2b, 0x2b, 0x2b, 0xe9, 0xd4, 0x2b, 0x2b, 0x2e, + 0x00, 0x2e, 0x2e, 0x2d, 0x33, 0x36, 0x39, 0x3c, 0x3c, 0x00, 0x41, 0x45, + 0x45, 0x4c, 0x4c, 0x4c, 0x45, 0x45, 0x00, 0x41, 0x3c, 0x39, 0x3d, 0x84, + 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa6, 0x74, 0x61, 0x44, 0x48, 0x48, + 0x00, 0x47, 0x47, 0x47, 0x4a, 0x4e, 0x4d, 0x51, 0x51, 0x00, 0x4e, 0x52, + 0x51, 0x4d, 0x58, 0xc5, 0xf3, 0xfa, 0x00, 0xfb, 0xf8, 0xf3, 0xf2, 0xf3, + 0xf5, 0xfa, 0xfb, 0x00, 0xfa, 0xf1, 0x9d, 0x47, 0x3f, 0x48, 0x48, 0x48, + 0x00, 0x49, 0x48, 0x47, 0x48, 0x47, 0x47, 0x47, 0x47, 0x00, 0x49, 0x49, + 0x49, 0x4d, 0x4d, 0x46, 0x31, 0x14, 0x00, 0x11, 0x12, 0x12, 0x12, 0x10, + 0x12, 0x0e, 0x0e, 0x20, 0x0e, 0x0d, 0xe9, 0x1a, 0x74, 0xb4, 0x63, 0xb4, + 0x03, 0xb4, 0x40, 0x23, 0x27, 0x27, 0x27, 0xe9, 0xd4, 0x00, 0x27, 0x2a, + 0x2a, 0x28, 0x28, 0x28, 0x2f, 0x33, 0x00, 0x34, 0x3b, 0x3e, 0x3e, 0x3e, + 0x43, 0x43, 0x3e, 0x00, 0x3e, 0x34, 0x34, 0x2f, 0x3d, 0x00, 0x00, 0x00, + 0xe0, 0xe9, 0xd4, 0xa7, 0xb4, 0x54, 0x48, 0x3a, 0x3c, 0x00, 0x42, 0x3f, + 0x42, 0x44, 0x44, 0x44, 0x45, 0x4a, 0x00, 0x47, 0x4d, 0x44, 0x86, 0xf3, + 0xfb, 0xf7, 0xef, 0x00, 0xdd, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xca, 0xe6, + 0x00, 0xf1, 0xfa, 0xfb, 0xf1, 0x62, 0x3c, 0x3f, 0x3f, 0x60, 0x3f, 0xe9, + 0xd3, 0x44, 0x44, 0x44, 0x44, 0x48, 0x00, 0x4d, 0x31, 0x18, 0x0b, 0x0b, + 0x0b, 0x08, 0x08, 0x40, 0x08, 0xe9, 0x05, 0x0f, 0x46, 0x74, 0x80, 0x55, + 0x00, 0x55, 0x55, 0x90, 0x90, 0x56, 0x24, 0x1a, 0x1e, 0x30, 0x1e, 0x1e, + 0xe9, 0xd4, 0x1e, 0x20, 0x1f, 0x21, 0x00, 0x21, 0x28, 0x28, 0x2f, 0x34, + 0x34, 0x34, 0x34, 0x00, 0x39, 0x39, 0x34, 0x2f, 0x28, 0x2e, 0x71, 0x00, + 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x90, 0x56, 0x00, 0x38, 0x36, + 0x36, 0x37, 0x3a, 0x3c, 0x3c, 0x42, 0x00, 0x42, 0x44, 0x44, 0x44, 0xaf, + 0xf8, 0xf8, 0xef, 0x08, 0xd3, 0xd8, 0xd8, 0xd8, 0xe9, 0xd8, 0xd3, 0xd3, + 0x00, 0xd3, 0xca, 0xf1, 0xfb, 0xf5, 0x82, 0x3a, 0x3c, 0x18, 0x3a, 0x3a, + 0x3a, 0xe9, 0xd1, 0x3c, 0x3a, 0x3c, 0x00, 0x3c, 0x3c, 0x3c, 0x4d, 0x46, + 0x31, 0x18, 0x0f, 0x00, 0x05, 0x04, 0x02, 0x04, 0x08, 0x0f, 0x31, 0x56, + 0x00, 0x74, 0x5c, 0x45, 0x4a, 0x50, 0x50, 0x50, 0x65, 0x00, 0x80, 0x74, + 0x56, 0x40, 0x24, 0x24, 0x31, 0x46, 0x00, 0x56, 0x74, 0x46, 0x14, 0x16, + 0x16, 0x16, 0x16, 0x00, 0x17, 0x17, 0x17, 0x1c, 0x1f, 0x1f, 0x25, 0x28, + 0x00, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x28, 0x22, 0x21, 0x0f, 0x1d, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x59, 0x00, 0x61, 0x46, 0x2a, 0x2e, 0x33, + 0x36, 0x36, 0x39, 0x00, 0x3c, 0x42, 0x42, 0x3c, 0xc5, 0xfa, 0xf3, 0xce, + 0x01, 0xd7, 0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xe9, 0x00, 0xd7, 0xce, + 0xce, 0xca, 0xdc, 0xf7, 0xf8, 0x7d, 0x03, 0x36, 0x36, 0x35, 0x36, 0x36, + 0x36, 0xe9, 0xbc, 0x01, 0x39, 0x36, 0x3a, 0x48, 0x46, 0x46, 0x46, 0xe9, + 0x00, 0x56, 0x56, 0x61, 0x4d, 0x3c, 0x42, 0x41, 0x45, 0x00, 0x4a, 0x4a, + 0x4c, 0x50, 0x50, 0x5f, 0x69, 0x71, 0x00, 0x80, 0x80, 0x80, 0x80, 0x71, + 0x63, 0x74, 0x24, 0x10, 0x12, 0x12, 0x12, 0xe9, 0x12, 0x14, 0x15, 0x15, + 0x00, 0x1b, 0x1f, 0x1f, 0x22, 0x22, 0x22, 0x1f, 0x1f, 0x07, 0x1f, 0x17, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x80, 0x5b, 0x40, 0x3d, 0x25, 0x28, + 0x2a, 0x33, 0x36, 0x00, 0x3a, 0x3c, 0x42, 0x95, 0xf8, 0xf2, 0xca, 0xd7, + 0x00, 0xd7, 0xd7, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xd7, 0x00, 0xdb, 0xd7, + 0xd2, 0xd2, 0xd2, 0xca, 0xca, 0xca, 0x00, 0xf5, 0xf7, 0x59, 0x36, 0x35, + 0x30, 0x35, 0x35, 0x64, 0x35, 0xe9, 0xd2, 0x30, 0x30, 0x9b, 0x36, 0x3a, + 0x00, 0x38, 0x3a, 0x36, 0x36, 0x39, 0x39, 0x37, 0x3a, 0x00, 0x3c, 0x41, + 0x41, 0x45, 0x45, 0x45, 0x4c, 0x4c, 0x00, 0x50, 0x4c, 0x50, 0x53, 0x53, + 0x50, 0x50, 0x50, 0x00, 0x5c, 0x46, 0x12, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, + 0x00, 0x0e, 0x0e, 0x0e, 0x11, 0x11, 0x11, 0x13, 0x13, 0x00, 0x19, 0x15, + 0x13, 0x13, 0x11, 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, 0xa7, 0x5c, 0xed, + 0x40, 0x32, 0x1f, 0x00, 0x27, 0x32, 0x38, 0x3d, 0x48, 0x52, 0xf5, 0xf5, + 0x03, 0xc6, 0xd2, 0xd2, 0xdb, 0xdb, 0xdb, 0xe9, 0xd3, 0x00, 0xd2, 0xcb, + 0xcb, 0xcb, 0xca, 0xca, 0xfa, 0xf2, 0x03, 0x2a, 0x35, 0x2e, 0x2b, 0x2b, + 0x2b, 0xe9, 0xd4, 0x80, 0xa4, 0x2e, 0x2e, 0x2e, 0x2e, 0x2d, 0x2d, 0x33, + 0x00, 0x36, 0x36, 0x39, 0x39, 0x39, 0x3c, 0x41, 0x45, 0x04, 0x45, 0x45, + 0x4c, 0x4c, 0x4c, 0xe9, 0x4c, 0x4c, 0x00, 0x45, 0x4d, 0x40, 0x0f, 0x07, + 0x08, 0x08, 0x08, 0x00, 0x08, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x10, 0x10, + 0x83, 0xe1, 0x0a, 0x74, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x5d, + 0xed, 0x32, 0x40, 0x2e, 0x38, 0x40, 0x00, 0x4d, 0x4d, 0xed, 0xf7, 0xda, + 0xcb, 0xd1, 0xd4, 0x04, 0xd4, 0xdb, 0xe5, 0xe5, 0xe5, 0xe9, 0xe2, 0xdb, + 0x00, 0xdb, 0xd4, 0xd1, 0xcb, 0xcb, 0xcb, 0xcb, 0xee, 0x00, 0xfb, 0x9c, + 0x32, 0x32, 0x2a, 0x25, 0x27, 0x27, 0x00, 0x27, 0x27, 0x26, 0x27, 0x27, + 0x23, 0x23, 0x27, 0x60, 0x27, 0xa3, 0x81, 0x2a, 0x2a, 0x2a, 0x2a, 0x28, + 0x00, 0x2a, 0x33, 0x2f, 0x39, 0x39, 0x34, 0x39, 0x3e, 0x04, 0x3e, 0x45, + 0x43, 0x43, 0x43, 0xe9, 0x3e, 0x3e, 0x01, 0x3e, 0x41, 0x32, 0x18, 0x08, + 0x05, 0x08, 0xe9, 0x00, 0x07, 0x07, 0x07, 0x06, 0x09, 0x09, 0x0b, 0x10, + 0x03, 0x6c, 0xa4, 0xb4, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xc0, 0xa7, 0x5d, + 0xf0, 0x56, 0x40, 0x32, 0x3d, 0x61, 0x00, 0x80, 0xf5, 0xf0, 0xc6, 0xc6, + 0xd1, 0xd1, 0xd4, 0x02, 0xe2, 0xe2, 0xe2, 0xeb, 0xea, 0xea, 0xd1, 0xd4, + 0x00, 0xd4, 0xd4, 0xd1, 0xcb, 0xc6, 0xc6, 0xbc, 0xf3, 0x00, 0xf5, 0x56, + 0x32, 0x2e, 0x21, 0x20, 0x20, 0x20, 0x01, 0x1e, 0x1e, 0x1e, 0x1e, 0x1d, + 0x1e, 0x1e, 0xc1, 0x80, 0x99, 0x20, 0x20, 0x23, 0x23, 0x23, 0x25, 0x23, + 0x00, 0x25, 0x25, 0x28, 0x2a, 0x2a, 0x2f, 0x2f, 0x34, 0x02, 0x34, 0x3b, + 0x3b, 0x3e, 0x3e, 0x3e, 0xe9, 0x3b, 0x00, 0x3e, 0x34, 0x34, 0x34, 0x32, + 0x24, 0x08, 0x04, 0x00, 0x02, 0x02, 0x04, 0x04, 0x03, 0x03, 0x03, 0x02, + 0x00, 0x0e, 0x5f, 0x8d, 0x89, 0x87, 0xb4, 0xb4, 0x00, 0x3c, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5c, 0xee, 0xf1, 0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0xf0, + 0xf3, 0xcd, 0xcf, 0x00, 0xcd, 0xcf, 0xd4, 0xd9, 0xe3, 0xe3, 0xe2, 0xe2, + 0x10, 0xea, 0xea, 0xe3, 0xc9, 0xe3, 0xd4, 0xd4, 0xd1, 0x00, 0xc6, 0xc8, + 0xbc, 0xda, 0xfa, 0xb4, 0x80, 0x46, 0x00, 0x24, 0x1c, 0x17, 0x1a, 0x1a, + 0x1a, 0x1a, 0x1a, 0x98, 0xd1, 0x1e, 0x1c, 0xb3, 0xa1, 0x17, 0x1d, 0x1d, + 0x00, 0x1d, 0x21, 0x21, 0x25, 0x28, 0x28, 0x2f, 0x2f, 0x00, 0x2f, 0x34, + 0x34, 0x34, 0x3b, 0x3b, 0x3b, 0x3b, 0x80, 0xc9, 0x2f, 0x2f, 0x28, 0x28, + 0x3d, 0x6c, 0x7c, 0x00, 0x32, 0x12, 0x08, 0x08, 0x0f, 0x14, 0x41, 0x7c, + 0x00, 0xa1, 0x93, 0x8d, 0x89, 0x7c, 0x9c, 0xb4, 0x00, 0x3c, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5a, 0xf1, 0xf3, 0x08, 0xf3, 0xf3, 0xf1, 0xf1, 0xd1, + 0xee, 0xcd, 0xcd, 0x00, 0xc9, 0xc9, 0xd9, 0xd9, 0xd9, 0xd9, 0xe3, 0xe3, + 0x60, 0xe3, 0xe9, 0xd1, 0xd9, 0xd1, 0xc8, 0xbd, 0xbd, 0x00, 0xb6, 0xb6, + 0xf5, 0xf0, 0xb4, 0x80, 0x74, 0x40, 0x00, 0x16, 0x12, 0x12, 0x12, 0x16, + 0x12, 0x14, 0x14, 0x00, 0x16, 0x31, 0x31, 0x24, 0x12, 0x16, 0x16, 0x16, + 0x00, 0x16, 0x16, 0x12, 0x16, 0x17, 0x17, 0x16, 0x17, 0x00, 0x1c, 0x1f, + 0x1f, 0x21, 0x21, 0x25, 0x28, 0x2c, 0x00, 0x2f, 0x2c, 0x2c, 0x34, 0x34, + 0x34, 0x2c, 0x2c, 0x00, 0x2f, 0x28, 0x28, 0x25, 0x2a, 0x32, 0xb8, 0xb8, + 0x40, 0xb8, 0xe9, 0xb8, 0xb8, 0xa7, 0xa7, 0x93, 0x8d, 0x00, 0x89, 0x81, + 0x7c, 0x84, 0x90, 0xa4, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0x00, + 0xf1, 0xf2, 0xef, 0x00, 0xe6, 0xce, 0xca, 0xca, 0xca, 0xcb, 0xc6, 0xbd, + 0x00, 0xbd, 0xc8, 0xc9, 0xc9, 0xc9, 0xd5, 0xd5, 0xd9, 0x00, 0xde, 0xde, + 0xde, 0xe1, 0xe1, 0xe1, 0xe3, 0xe3, 0x00, 0xd9, 0xd9, 0xd9, 0xc9, 0xc8, + 0xbd, 0xbd, 0xb6, 0x00, 0xb2, 0xf0, 0xf3, 0x9c, 0xb4, 0x90, 0x74, 0x74, + 0x00, 0x56, 0x46, 0x31, 0x31, 0x31, 0x46, 0x56, 0x74, 0x00, 0x74, 0x80, + 0x74, 0x24, 0x0e, 0x12, 0x12, 0x12, 0xc0, 0xe9, 0xd1, 0x14, 0x12, 0x14, + 0x13, 0x19, 0x19, 0x00, 0x1f, 0x1f, 0x1f, 0x22, 0x22, 0x28, 0x2c, 0x2c, + 0x00, 0x28, 0x28, 0x28, 0x22, 0x25, 0x1f, 0x1f, 0x24, 0x08, 0x83, 0xb8, + 0xb8, 0xb8, 0xe9, 0xb8, 0xa7, 0xa7, 0x00, 0xa2, 0x92, 0x88, 0x83, 0x7b, + 0x75, 0x76, 0x90, 0x0e, 0x9c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf1, + 0x00, 0xef, 0xd7, 0xca, 0xca, 0xca, 0xca, 0xc6, 0xc6, 0x00, 0xc6, 0xbd, + 0xbd, 0xbd, 0xc3, 0xc3, 0xcc, 0xcc, 0x00, 0xd5, 0xd5, 0xd5, 0xd5, 0xde, + 0xde, 0xde, 0xe1, 0x80, 0xe1, 0xd9, 0xd5, 0xd5, 0xcc, 0xc3, 0xc3, 0xb9, + 0x00, 0xb2, 0xb2, 0xda, 0xf5, 0x9c, 0x90, 0x84, 0x90, 0x00, 0x90, 0x80, + 0x80, 0x74, 0x74, 0x74, 0x80, 0x80, 0x00, 0x80, 0x80, 0x71, 0x74, 0x56, + 0x12, 0x0e, 0x0e, 0x40, 0x0e, 0xe9, 0x0e, 0x0d, 0x0d, 0x0e, 0x10, 0x11, + 0x00, 0x11, 0x13, 0x13, 0x13, 0x19, 0x1b, 0x1b, 0x1b, 0x00, 0x1f, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x1f, 0x1b, 0x02, 0x1b, 0x1d, 0x50, 0xb8, 0xb8, + 0xb8, 0xe9, 0xb8, 0x00, 0xa7, 0xa7, 0xa2, 0x92, 0x92, 0x89, 0x83, 0x7b, + 0x01, 0x75, 0x6d, 0x90, 0x9c, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa6, + 0xef, 0xdc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0xc6, 0xc0, 0xc6, 0xbd, 0xbd, + 0xbd, 0xbd, 0xc3, 0x00, 0xc3, 0xc3, 0xcc, 0xd0, 0xd0, 0xd5, 0xd5, 0xd5, + 0xc0, 0xe9, 0xd3, 0xd0, 0xd0, 0xc3, 0xc3, 0xb9, 0xb9, 0x00, 0xb2, 0xae, + 0xb9, 0xf3, 0xb4, 0x90, 0x84, 0x69, 0x00, 0x5e, 0x5c, 0x5c, 0x64, 0x69, + 0x64, 0x60, 0x5b, 0x00, 0x57, 0x58, 0x58, 0x71, 0x56, 0x31, 0x0b, 0x0b, + 0x60, 0x0b, 0xe9, 0xd4, 0x0a, 0x0a, 0x10, 0x11, 0x11, 0x00, 0x11, 0x13, + 0x13, 0x13, 0x19, 0x1b, 0x19, 0x1b, 0x00, 0x1b, 0x13, 0x15, 0x15, 0x33, + 0xa7, 0xb8, 0xb8, 0x40, 0xb8, 0xe9, 0xa7, 0xa2, 0xa2, 0xa2, 0x92, 0x92, + 0x00, 0x88, 0x83, 0x75, 0x6f, 0x6a, 0x84, 0x95, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa5, 0xef, 0xbc, 0xb6, 0x00, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, + 0xbd, 0xbd, 0xb9, 0x00, 0xb9, 0xb9, 0xb9, 0xc1, 0xc3, 0xc7, 0xc7, 0xcc, + 0x01, 0xcc, 0xcc, 0xcc, 0xd0, 0xd0, 0xd0, 0xd0, 0xd9, 0x80, 0xa9, 0xc7, + 0xc7, 0xc1, 0xb7, 0xb7, 0xae, 0xae, 0x00, 0xae, 0xf2, 0xc5, 0xb4, 0xc5, + 0xc5, 0xc5, 0xc5, 0x00, 0xa4, 0x7d, 0x62, 0x4e, 0x52, 0x52, 0x52, 0x52, + 0x00, 0x4f, 0x4f, 0x61, 0x46, 0x31, 0x08, 0x08, 0x08, 0x80, 0xe9, 0x08, + 0x08, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x0a, 0x0a, 0x0a, 0x10, 0x10, + 0x10, 0x10, 0x11, 0x10, 0x11, 0x11, 0x13, 0xe9, 0x1f, 0x92, 0xa2, 0xa2, + 0x60, 0xa2, 0xe9, 0xd2, 0x92, 0x92, 0x88, 0x83, 0x79, 0x00, 0x75, 0x6f, + 0x6a, 0x71, 0x84, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa4, 0xef, 0xbc, + 0xb2, 0xb2, 0xb2, 0x00, 0xb2, 0xb6, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb7, + 0x00, 0xb7, 0xbb, 0xbe, 0xc2, 0xc4, 0xc2, 0xc2, 0xc4, 0x30, 0xc4, 0xc4, + 0xe9, 0xd4, 0xc2, 0xc2, 0xbb, 0xbb, 0x00, 0xb7, 0xaf, 0xac, 0xa5, 0xa5, + 0xf0, 0xf2, 0xf3, 0x00, 0xf3, 0xf2, 0xf2, 0xf2, 0xf3, 0xf2, 0xf0, 0xc5, + 0x00, 0x73, 0x4e, 0x4d, 0x4b, 0x4d, 0x4b, 0x4b, 0x61, 0x00, 0x40, 0x24, + 0x08, 0x05, 0x08, 0x08, 0x08, 0x08, 0x80, 0xd1, 0x07, 0x07, 0x07, 0x07, + 0x0b, 0x0a, 0x0a, 0x60, 0x0a, 0xe9, 0xd3, 0x25, 0x88, 0x92, 0x92, 0xa2, + 0x30, 0xa2, 0xa2, 0xe9, 0xd1, 0x92, 0x92, 0x88, 0x83, 0x00, 0x79, 0x6f, + 0x6a, 0x63, 0x71, 0x84, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa3, 0xee, + 0xc5, 0xae, 0xae, 0x40, 0xae, 0xe9, 0xb2, 0xb7, 0xb7, 0xb7, 0xb7, 0xb5, + 0x0c, 0xb7, 0xbb, 0xbb, 0xbb, 0xe9, 0xd4, 0xbb, 0xba, 0x80, 0xd4, 0xb5, + 0xb3, 0xb0, 0xac, 0xac, 0xa5, 0xa3, 0x00, 0xaf, 0xc5, 0xaf, 0x9d, 0x94, + 0x99, 0x94, 0x9d, 0x00, 0xc5, 0xed, 0xf2, 0xf0, 0xb4, 0x59, 0x44, 0x47, + 0x00, 0x49, 0x48, 0x48, 0x54, 0x40, 0x18, 0x0f, 0x02, 0x12, 0x05, 0x05, + 0x05, 0xe9, 0x05, 0x08, 0xe2, 0x07, 0x30, 0x07, 0x07, 0xe9, 0xd1, 0x39, + 0x83, 0x88, 0x88, 0x00, 0x92, 0x92, 0x92, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, + 0x80, 0xc1, 0x88, 0x83, 0x79, 0x6f, 0x6f, 0x63, 0x5f, 0x07, 0x69, 0x84, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x08, 0xc5, 0xa5, 0xa5, 0xa5, 0xe9, + 0xac, 0xac, 0xb0, 0x00, 0xb0, 0xb0, 0xb3, 0xb1, 0xb3, 0xb3, 0xb3, 0xb3, + 0x63, 0xba, 0xda, 0xb9, 0xb1, 0xb3, 0xb1, 0x83, 0xc9, 0x00, 0xab, 0xaa, + 0xa3, 0xa3, 0xa3, 0xa0, 0xa0, 0x9d, 0x00, 0x9d, 0x9d, 0x9d, 0x9d, 0x99, + 0x94, 0x94, 0x94, 0x00, 0xc5, 0xf0, 0xed, 0x72, 0x3f, 0x3f, 0x3f, 0x3f, + 0x00, 0x3f, 0x48, 0x46, 0x18, 0x0f, 0x05, 0x02, 0x02, 0x44, 0x02, 0xe9, + 0x02, 0x02, 0x03, 0xe9, 0x03, 0x03, 0x00, 0x03, 0x03, 0x06, 0x08, 0x0b, + 0x53, 0x79, 0x79, 0x01, 0x79, 0x83, 0x88, 0x88, 0x92, 0x92, 0x92, 0xe9, + 0x00, 0x92, 0x92, 0x88, 0x83, 0x83, 0x79, 0x6b, 0x66, 0x01, 0x5d, 0x55, + 0x69, 0x84, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa2, 0xe6, 0xaf, 0x9d, + 0x9d, 0x9d, 0x9d, 0x00, 0x9d, 0xa3, 0xa3, 0xaa, 0xab, 0xab, 0xb1, 0xb1, + 0x50, 0xad, 0xe9, 0xb1, 0xc9, 0xad, 0xad, 0xad, 0xaa, 0x0c, 0xaa, 0xaa, + 0xa9, 0xa9, 0xd9, 0xbc, 0xa6, 0xa3, 0x00, 0x9f, 0xa0, 0xa0, 0xa0, 0x9f, + 0x99, 0x99, 0x9b, 0x00, 0x99, 0x99, 0x99, 0x94, 0x94, 0x8f, 0x94, 0xed, + 0x00, 0xed, 0x72, 0x37, 0x3c, 0x3c, 0x3a, 0x38, 0x3a, 0x00, 0x44, 0x32, + 0x18, 0x0f, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, + 0x02, 0x04, 0xe9, 0x00, 0x05, 0x08, 0x33, 0x5d, 0x66, 0x66, 0x6b, 0x6b, + 0x00, 0x79, 0x79, 0x83, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x92, 0x88, + 0x88, 0x83, 0x83, 0x79, 0x6b, 0x6b, 0x00, 0x66, 0x5d, 0x55, 0x64, 0x84, + 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa2, 0xb4, 0x94, 0x94, 0x94, 0x94, + 0x00, 0x94, 0x99, 0x9b, 0x9f, 0xa1, 0xa8, 0xa9, 0xa9, 0x20, 0xa9, 0xaa, + 0xe1, 0xa8, 0xa8, 0xa8, 0xa8, 0xa6, 0x08, 0xa6, 0xa1, 0xa1, 0xa1, 0xe9, + 0xa1, 0xa1, 0xa6, 0x20, 0xa6, 0xa6, 0xe9, 0xa1, 0x9f, 0x9f, 0x9e, 0x9e, + 0x00, 0x9b, 0x9e, 0x9b, 0x9a, 0x9b, 0x9a, 0x9a, 0x9a, 0x00, 0x97, 0x97, + 0x8f, 0x8f, 0x8c, 0x8b, 0xb4, 0xed, 0x00, 0x60, 0x36, 0x36, 0x36, 0x35, + 0x35, 0x35, 0x38, 0x00, 0x3d, 0x32, 0x18, 0x08, 0x04, 0x04, 0x01, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x05, 0x12, 0x00, 0x36, 0x51, + 0x50, 0x53, 0x53, 0x5d, 0x66, 0x66, 0x00, 0x6b, 0x6b, 0x79, 0x79, 0x83, + 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x83, 0x79, 0x79, 0x6b, 0x6b, 0x66, + 0x01, 0x5d, 0x53, 0x51, 0x61, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa3, + 0xa4, 0x8c, 0x8c, 0x8c, 0x8b, 0x8c, 0x00, 0x8f, 0x97, 0x9b, 0x9e, 0x9f, + 0xa1, 0xa1, 0xa1, 0x80, 0xe9, 0x9f, 0x9e, 0x9f, 0x9e, 0x9f, 0x9e, 0x9a, + 0x01, 0x9a, 0x9a, 0x9a, 0x9a, 0x98, 0x9a, 0x98, 0xc1, 0x1c, 0x9e, 0x9e, + 0x9e, 0x8c, 0x63, 0x51, 0x97, 0x91, 0x00, 0x91, 0x8c, 0x8b, 0x86, 0x82, + 0xb4, 0xb4, 0x3a, 0x10, 0x30, 0x30, 0x30, 0xe9, 0x30, 0x30, 0x38, 0x38, + 0x00, 0x32, 0x24, 0x24, 0x1a, 0x24, 0x1a, 0x24, 0x24, 0x00, 0x24, 0x32, + 0x42, 0x42, 0x41, 0x45, 0x45, 0x4a, 0x00, 0x50, 0x50, 0x53, 0x5a, 0x66, + 0x6b, 0x6b, 0x79, 0x30, 0x79, 0x79, 0xe9, 0xd1, 0x6b, 0x6b, 0x66, 0x5d, + 0x01, 0x53, 0x50, 0x52, 0x54, 0x00, 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa2, + 0xaf, 0x9c, 0x86, 0x86, 0x86, 0x86, 0x00, 0x8b, 0x8b, 0x91, 0x96, 0x98, + 0x9a, 0x9a, 0x9e, 0x00, 0x9a, 0x9a, 0x9a, 0x98, 0x98, 0x98, 0x96, 0x8f, + 0x00, 0x91, 0x91, 0x91, 0x8b, 0x8c, 0x8b, 0x8b, 0x8b, 0x20, 0x8b, 0x8e, + 0xb1, 0x93, 0x96, 0x93, 0x91, 0x96, 0x09, 0x91, 0x91, 0x96, 0x96, 0x31, + 0x96, 0x96, 0xe9, 0x00, 0x96, 0x91, 0x8f, 0x8f, 0x8b, 0x86, 0x7d, 0x7d, + 0x00, 0xb4, 0x90, 0x2a, 0x2b, 0x2b, 0x29, 0x29, 0x29, 0xc0, 0xe9, 0xd1, + 0x2e, 0x2b, 0x30, 0x30, 0x30, 0x30, 0x00, 0x35, 0x30, 0x35, 0x35, 0x39, + 0x39, 0x3c, 0x41, 0x00, 0x45, 0x4a, 0x4a, 0x53, 0x5a, 0x5a, 0x66, 0x6b, + 0x00, 0x6b, 0x79, 0x79, 0x79, 0x79, 0x79, 0x6b, 0x6b, 0x00, 0x6b, 0x66, + 0x5a, 0x53, 0x50, 0x4a, 0x52, 0x48, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa2, 0x95, 0x86, 0x00, 0x7d, 0x7d, 0x7d, 0x7e, 0x82, 0x87, 0x8a, 0x8e, + 0x00, 0x8e, 0x91, 0x93, 0x91, 0x91, 0x91, 0x8e, 0x8b, 0x00, 0x8b, 0x87, + 0x87, 0x85, 0x85, 0x85, 0x86, 0x82, 0x00, 0x7e, 0x7e, 0x7e, 0x82, 0x82, + 0x85, 0x85, 0x87, 0x08, 0x87, 0x8b, 0x8a, 0x8a, 0xe9, 0x8a, 0x8e, 0x8e, + 0x00, 0x8e, 0x8e, 0x8e, 0x91, 0x8e, 0x91, 0x91, 0x93, 0x00, 0x91, 0x91, + 0x91, 0x8e, 0x8b, 0x82, 0x7d, 0x78, 0x00, 0x90, 0xb4, 0x3a, 0x27, 0x27, + 0x23, 0x27, 0x23, 0x00, 0x23, 0x23, 0x23, 0x25, 0x27, 0x27, 0x25, 0x23, + 0x20, 0x27, 0x27, 0xd1, 0x27, 0x2a, 0x2a, 0x2e, 0x2e, 0x00, 0x2a, 0x34, + 0x39, 0x3e, 0x45, 0x4c, 0x4c, 0x53, 0x02, 0x5a, 0x66, 0x66, 0x6b, 0x6b, + 0x6b, 0xe9, 0x66, 0x00, 0x66, 0x5a, 0x53, 0x4c, 0x4c, 0x45, 0x4d, 0x00, + 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa3, 0x95, 0x7d, 0x77, 0x00, 0x77, 0x78, + 0x7a, 0x7d, 0x7f, 0x82, 0x87, 0x87, 0x00, 0x87, 0x8a, 0x8a, 0x89, 0x87, + 0x82, 0x7f, 0x7e, 0x00, 0x7d, 0x7f, 0x7a, 0x7d, 0x7a, 0x78, 0x78, 0x7a, + 0x40, 0x78, 0x39, 0x7a, 0x7a, 0x7a, 0x7f, 0x81, 0x7f, 0x00, 0x81, 0x81, + 0x81, 0x87, 0x81, 0x87, 0x8a, 0x89, 0x00, 0x8a, 0x8a, 0x8d, 0x8d, 0x8d, + 0x8d, 0x8d, 0x8e, 0x00, 0x8e, 0x8d, 0x8a, 0x87, 0x7f, 0x7d, 0x77, 0x73, + 0x00, 0xb4, 0x71, 0x21, 0x20, 0x23, 0x1e, 0x20, 0x20, 0x02, 0x20, 0x1d, + 0x20, 0x1e, 0x20, 0x1e, 0xb9, 0x23, 0x80, 0xe9, 0x21, 0x21, 0x25, 0x25, + 0x28, 0x2f, 0x2f, 0x00, 0x39, 0x39, 0x3e, 0x43, 0x4c, 0x53, 0x5a, 0x5a, + 0x00, 0x5a, 0x66, 0x66, 0x66, 0x6b, 0x66, 0x5a, 0x5a, 0x00, 0x53, 0x53, + 0x43, 0x3e, 0x41, 0x42, 0x00, 0x00, 0x70, 0x00, 0xe9, 0xd4, 0xa3, 0x84, + 0x76, 0x72, 0x72, 0x00, 0x73, 0x73, 0x77, 0x7a, 0x7a, 0x7f, 0x7f, 0x81, + 0x00, 0x7f, 0x7f, 0x7c, 0x7a, 0x7a, 0x77, 0x77, 0x72, 0x02, 0x73, 0x72, + 0x70, 0x6e, 0x6e, 0x6e, 0xe9, 0x72, 0x01, 0x6e, 0x6e, 0x70, 0x73, 0x73, + 0x76, 0x77, 0x09, 0x00, 0x7a, 0x7c, 0x7c, 0x7c, 0x81, 0x81, 0x89, 0x89, + 0x04, 0x89, 0x89, 0x89, 0x8d, 0x8d, 0xc9, 0x81, 0x7f, 0x00, 0x7a, 0x77, + 0x72, 0x84, 0x90, 0x1f, 0x1c, 0x1d, 0x08, 0x17, 0x1a, 0x1a, 0x1a, 0xe2, + 0x1e, 0x1a, 0x1c, 0x80, 0xba, 0x1c, 0x1c, 0x1c, 0x1f, 0x21, 0x1f, 0x25, + 0x00, 0x28, 0x2c, 0x2f, 0x3b, 0x3b, 0x43, 0x43, 0x53, 0x08, 0x53, 0x5a, + 0x5a, 0x5a, 0xe9, 0x53, 0x53, 0x4c, 0x01, 0x43, 0x3e, 0x3e, 0x42, 0x00, + 0x00, 0x00, 0xe9, 0xc0, 0xd4, 0xa4, 0x84, 0x71, 0x68, 0x68, 0x6d, 0x6d, + 0x02, 0x6e, 0x70, 0x70, 0x73, 0x73, 0x73, 0xe9, 0x70, 0x00, 0x6d, 0x6d, + 0x6d, 0x68, 0x67, 0x68, 0x68, 0x68, 0xc0, 0xe9, 0xcc, 0x67, 0x6a, 0x6a, + 0x6d, 0x6d, 0x70, 0x00, 0x70, 0x70, 0x75, 0x75, 0x75, 0x75, 0x7b, 0x7c, + 0x02, 0x81, 0x81, 0x81, 0x89, 0x89, 0x89, 0xd1, 0x81, 0x00, 0x7a, 0x73, + 0x70, 0x6d, 0x71, 0x90, 0x46, 0x17, 0x00, 0x14, 0x14, 0x12, 0x16, 0x12, + 0x14, 0x14, 0x16, 0x00, 0x31, 0x31, 0x24, 0x12, 0x14, 0x16, 0x12, 0x16, + 0x00, 0x16, 0x16, 0x16, 0x1c, 0x17, 0x1d, 0x1f, 0x21, 0x00, 0x25, 0x28, + 0x2f, 0x34, 0x3b, 0x43, 0x43, 0x4c, 0x00, 0x4c, 0x4c, 0x53, 0x53, 0x53, + 0x4c, 0x4c, 0x43, 0x00, 0x43, 0x3e, 0x34, 0x39, 0x33, 0x00, 0x00, 0x00, + 0xe0, 0xe9, 0xd4, 0xa5, 0x71, 0x60, 0x60, 0x65, 0x65, 0x08, 0x65, 0x6a, + 0x6a, 0x6a, 0xe9, 0x6a, 0x67, 0x65, 0x00, 0x64, 0x62, 0x62, 0x60, 0x5e, + 0x60, 0x59, 0x59, 0x12, 0x59, 0x59, 0x60, 0xc1, 0x60, 0x60, 0xe9, 0x60, + 0x00, 0x62, 0x62, 0x62, 0x65, 0x67, 0x6a, 0x6a, 0x6d, 0x00, 0x6d, 0x70, + 0x75, 0x75, 0x7c, 0x7b, 0x7b, 0x7b, 0x40, 0x81, 0xe1, 0x75, 0x75, 0x70, + 0x6a, 0x67, 0x64, 0x00, 0x90, 0x74, 0x74, 0x56, 0x46, 0x31, 0x31, 0x31, + 0x00, 0x46, 0x56, 0x56, 0x00, 0x00, 0x74, 0x24, 0x0e, 0x10, 0x12, 0x12, + 0x12, 0xe9, 0x14, 0x14, 0x14, 0x15, 0x00, 0x15, 0x1b, 0x1f, 0x28, 0x2c, + 0x34, 0x34, 0x3b, 0x10, 0x43, 0x43, 0x43, 0xe9, 0x43, 0x43, 0x3b, 0x3b, + 0x03, 0x34, 0x34, 0x33, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa6, 0x69, + 0x57, 0x57, 0x58, 0x5b, 0x5e, 0x5e, 0x00, 0x63, 0x60, 0x62, 0x62, 0x5e, + 0x5e, 0x5e, 0x58, 0x00, 0x58, 0x57, 0x57, 0x54, 0x54, 0x52, 0x52, 0x4f, + 0x06, 0x52, 0x4f, 0x52, 0x57, 0x57, 0xe9, 0x11, 0x58, 0x00, 0x58, 0x59, + 0x5b, 0x5e, 0x5e, 0x60, 0x62, 0x65, 0x00, 0x6a, 0x6a, 0x6a, 0x6f, 0x6f, + 0x75, 0x75, 0x75, 0x00, 0x75, 0x7b, 0x75, 0x75, 0x6f, 0x6f, 0x6a, 0x65, + 0x03, 0x63, 0x5e, 0x80, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0xb4, 0x56, + 0x12, 0x0e, 0x0e, 0x0e, 0x0d, 0x0e, 0x00, 0x0d, 0x0e, 0x0e, 0x10, 0x0e, + 0x13, 0x15, 0x19, 0x00, 0x1f, 0x22, 0x22, 0x2c, 0x34, 0x34, 0x3b, 0x3b, + 0x40, 0x3b, 0xe9, 0x3b, 0x34, 0x34, 0x2c, 0x28, 0x5c, 0x1c, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa6, 0x84, 0x54, 0x00, 0x4e, 0x4e, 0x4e, 0x52, 0x57, + 0x58, 0x58, 0x58, 0x00, 0x57, 0x57, 0x52, 0x52, 0x4e, 0x4d, 0x4b, 0x49, + 0x00, 0x49, 0x49, 0x49, 0x49, 0x4d, 0x4b, 0x4b, 0x4b, 0x80, 0xe9, 0x4d, + 0x4d, 0x4d, 0x4e, 0x4e, 0x4f, 0x4f, 0x00, 0x4f, 0x52, 0x52, 0x57, 0x58, + 0x58, 0x5f, 0x5f, 0x00, 0x5e, 0x63, 0x63, 0x6a, 0x6a, 0x6f, 0x6f, 0x6f, + 0x80, 0xe9, 0x6f, 0x6a, 0x63, 0x5f, 0x58, 0x55, 0x71, 0x18, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0x00, 0x74, 0x31, 0x18, 0x0b, 0x0b, 0x0b, 0xe9, 0xd2, + 0x10, 0x10, 0x11, 0x00, 0x13, 0x1b, 0x1b, 0x22, 0x22, 0x2c, 0x34, 0x34, + 0x02, 0x34, 0x34, 0x34, 0x2c, 0x2c, 0x2c, 0xa9, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x00, 0x61, 0x44, 0x00, 0x48, 0x47, 0x47, 0x4a, 0x4a, + 0x4a, 0x4a, 0x4a, 0x01, 0x47, 0x49, 0x47, 0x44, 0x3f, 0x3f, 0x3f, 0xe9, + 0x44, 0x3a, 0xca, 0x48, 0x3f, 0x47, 0x31, 0x48, 0x48, 0x00, 0x47, 0x49, + 0x49, 0x49, 0x4b, 0x4b, 0x4e, 0x4e, 0x00, 0x4e, 0x51, 0x51, 0x55, 0x5f, + 0x5d, 0x63, 0x63, 0x00, 0x66, 0x6a, 0x6a, 0x6a, 0x66, 0x66, 0x63, 0x5d, + 0x01, 0x55, 0x51, 0x4e, 0x61, 0x00, 0x00, 0x00, 0xe9, 0x80, 0xd4, 0x00, + 0x00, 0x61, 0x31, 0x08, 0x08, 0x08, 0x80, 0xe9, 0x08, 0x0b, 0x0b, 0x0b, + 0x0a, 0x0a, 0x10, 0x00, 0x13, 0x13, 0x19, 0x1b, 0x1b, 0x22, 0x22, 0x22, + 0x00, 0x22, 0x2c, 0x22, 0x1b, 0x1b, 0x1f, 0x34, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x74, 0x00, 0x48, 0x3a, 0x3a, 0x3c, 0x42, + 0x42, 0x42, 0x42, 0x00, 0x3c, 0x3c, 0x3c, 0x37, 0x37, 0x36, 0x36, 0x35, + 0x00, 0x35, 0x35, 0x35, 0x30, 0x37, 0x3a, 0x3f, 0x3f, 0x2c, 0x3a, 0x3a, + 0xd9, 0x3f, 0xe2, 0xc9, 0x44, 0x44, 0x00, 0x44, 0x47, 0x47, 0x4a, 0x4a, + 0x51, 0x50, 0x55, 0x08, 0x55, 0x5d, 0x5d, 0x5d, 0xe9, 0x5d, 0x55, 0x51, + 0x03, 0x51, 0x45, 0x61, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa1, 0x56, + 0x24, 0x08, 0x05, 0x08, 0x05, 0x05, 0x00, 0x08, 0x07, 0x07, 0x07, 0x07, + 0x0a, 0x0a, 0x0a, 0x00, 0x11, 0x11, 0x11, 0x19, 0x19, 0x19, 0x1b, 0x1b, + 0x07, 0x19, 0x19, 0x13, 0x1b, 0x3c, 0x02, 0xe2, 0xc6, 0x80, 0x87, 0x46, + 0x32, 0x2a, 0x2e, 0x30, 0x33, 0x35, 0x00, 0x35, 0x2d, 0x33, 0x2e, 0x2e, + 0x29, 0x29, 0x27, 0x20, 0x27, 0x27, 0xe9, 0x27, 0x30, 0x38, 0x38, 0x38, + 0xc0, 0xe9, 0xd4, 0x38, 0x38, 0x37, 0x37, 0x3a, 0x3a, 0x00, 0x3a, 0x3c, + 0x42, 0x42, 0x44, 0x4a, 0x4a, 0x51, 0x00, 0x53, 0x53, 0x55, 0x55, 0x55, + 0x55, 0x50, 0x51, 0x01, 0x4a, 0x44, 0x42, 0x61, 0x00, 0x00, 0x00, 0xe9, + 0xc0, 0xd4, 0xa2, 0x74, 0x18, 0x0f, 0x02, 0x05, 0x05, 0x10, 0x05, 0x05, + 0x08, 0xe9, 0x07, 0x07, 0x09, 0x0a, 0x04, 0x0a, 0x10, 0x11, 0x11, 0x11, + 0xe9, 0x10, 0x61, 0xf0, 0x04, 0xd4, 0xa7, 0x5c, 0x40, 0x23, 0x21, 0x21, + 0x00, 0x21, 0x23, 0x21, 0x23, 0x20, 0x21, 0x1d, 0x1c, 0x00, 0x1c, 0x1a, + 0x1c, 0x1c, 0x1c, 0x17, 0x17, 0x46, 0x01, 0x00, 0x74, 0x29, 0x2b, 0x2d, + 0x2d, 0x2d, 0xe9, 0x00, 0x2d, 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x30, 0x30, + 0x00, 0x30, 0x35, 0x35, 0x36, 0x36, 0x37, 0x3c, 0x45, 0x00, 0x45, 0x4a, + 0x4c, 0x50, 0x50, 0x50, 0x50, 0x4a, 0x00, 0x45, 0x42, 0x3c, 0x3c, 0x69, + 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa3, 0x31, 0x1a, 0x0f, 0x05, 0x02, + 0x00, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x06, + 0x06, 0x06, 0x09, 0x0a, 0x09, 0x0a, 0x1e, 0x0a, 0x13, 0x0c, 0x06, 0xc6, + 0x87, 0x3a, 0x31, 0x08, 0x1d, 0x14, 0x14, 0x14, 0xe9, 0x14, 0x12, 0x12, + 0x01, 0x12, 0x12, 0x0e, 0x0e, 0x0e, 0x0b, 0x46, 0x01, 0x04, 0x74, 0x21, + 0x27, 0x27, 0x27, 0xe9, 0x27, 0x26, 0x20, 0x27, 0x26, 0xda, 0x27, 0x2a, + 0x2a, 0x2a, 0x2e, 0x00, 0x33, 0x39, 0x39, 0x3c, 0x3e, 0x3e, 0x45, 0x45, + 0x00, 0x45, 0x43, 0x3e, 0x3e, 0x39, 0x39, 0x3d, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa6, 0x0c, 0x18, 0x0f, 0x08, 0x04, 0x02, 0x02, 0x02, 0xe9, + 0x03, 0x03, 0x03, 0x87, 0xe9, 0x06, 0x0b, 0x11, 0x0c, 0x07, 0xbf, 0x77, + 0x80, 0x2c, 0x18, 0x0b, 0x0b, 0x0b, 0x0d, 0x0b, 0x07, 0x00, 0x07, 0x08, + 0x08, 0x08, 0x08, 0x07, 0x0b, 0x56, 0x80, 0x04, 0x29, 0x1c, 0x20, 0x20, + 0x1e, 0x1e, 0x1d, 0x08, 0x20, 0x24, 0x1e, 0x20, 0xb9, 0x20, 0x20, 0x23, + 0x00, 0x23, 0x21, 0x28, 0x28, 0x33, 0x2f, 0x34, 0x39, 0x00, 0x3b, 0x3e, + 0x3b, 0x3e, 0x39, 0x34, 0x2f, 0x2a, 0x0e, 0x44, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x00, 0x00, 0x00, 0x2e, 0x0f, 0x04, 0x04, 0x01, 0x01, 0x02, + 0x01, 0x01, 0x02, 0x04, 0x05, 0x08, 0x04, 0x1f, 0x07, 0xe0, 0x07, 0x77, + 0x2f, 0x00, 0x31, 0x0f, 0x05, 0x02, 0x12, 0x02, 0x02, 0x04, 0xe1, 0x08, + 0x31, 0x07, 0x56, 0x00, 0x24, 0x16, 0x14, 0x14, 0x14, 0x16, 0x31, 0x46, + 0x00, 0x1e, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x00, 0x1c, 0x1d, + 0x1f, 0x21, 0x28, 0x28, 0x2c, 0x2f, 0x00, 0x2f, 0x2f, 0x2f, 0x28, 0x28, + 0x25, 0x29, 0x00, 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0xe0, 0x07, 0x07, 0x07, 0x00, 0x00, 0x56, 0x31, 0x24, 0x06, 0x1d, 0x1a, + 0x1e, 0x31, 0x56, 0x07, 0x02, 0x80, 0x10, 0x74, 0x74, 0x74, 0x01, 0x74, + 0x12, 0x12, 0x12, 0x80, 0xe9, 0x12, 0x12, 0x14, 0x15, 0x15, 0x1f, 0x1f, + 0x00, 0x25, 0x22, 0x22, 0x22, 0x22, 0x1f, 0x1f, 0x1f, 0x7f, 0x44, 0x31, + 0x19, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x02, 0x31, 0x08, 0x0b, 0x0d, 0x0d, 0x0d, 0xe9, 0x0d, 0x10, 0x11, + 0x04, 0x11, 0x13, 0x19, 0x1b, 0x19, 0xe9, 0x15, 0x2f, 0xff, 0x07, 0xbf, + 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0x24, + 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, + 0x17, 0x10, 0x10, 0x10, 0xe9, 0x28, 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x07, 0x00, 0x00, 0x24, 0x08, + 0x03, 0x05, 0x03, 0x00, 0x05, 0x05, 0x08, 0x06, 0x07, 0x07, 0x07, 0x07, + 0x0f, 0x09, 0x07, 0x0b, 0x1b, 0x07, 0xbf, 0x77, 0x2f, 0x08, 0x00, 0xfe, + 0x00, 0xf9, 0x01, 0xf9, 0xf6, 0xfe, 0xff, 0x07, 0x07, 0x77, 0x2f, 0x07, + 0x07, 0x07, 0x01, 0x00, 0x46, 0x08, 0x05, 0x02, 0x02, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x0a, 0x07, 0x07, 0xc0, 0x77, 0x2f, + 0x00, 0x00, 0xf6, 0xfd, 0xfe, 0xf6, 0xbf, 0x01, 0xfe, 0xd3, 0x07, 0xa7, + 0x5f, 0x17, 0x07, 0xc0, 0x07, 0x07, 0x00, 0x00, 0x46, 0x08, 0x04, 0x04, + 0x03, 0x01, 0x01, 0x04, 0x04, 0x05, 0x0b, 0x07, 0x07, 0xe1, 0x77, 0x2f, + 0x02, 0xfe, 0xfe, 0xfd, 0xfe, 0xd1, 0x1f, 0xfd, 0xfe, 0xfe, 0xc9, 0x07, + 0xaf, 0x67, 0x1f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x8b, 0x07, 0xfe, 0xfe, 0xfe, 0xe9, 0xf4, 0x07, 0x07, 0xff, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf1, 0x07, 0x07, 0x07, 0x01, 0xfe, + 0xfe, 0xfe, 0xe9, 0x3e, 0xfe, 0xfe, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x00, + 0x27, 0x00, 0xf9, 0xe2, 0xfe, 0xfe, 0x07, 0x07, 0x77, 0xc7, 0x2f, 0x01, + 0xfe, 0x00, 0xfe, 0xc4, 0xcc, 0x47, 0x8d, 0x52, 0xfe, 0xfe, 0xfe, 0xe9, + 0x01, 0xf9, 0x27, 0xf0, 0x07, 0x77, 0x2f, 0x03, 0xf6, 0xfd, 0xfe, 0xf6, + 0xbe, 0x01, 0xfe, 0xd3, 0x07, 0xa7, 0x5f, 0x17, 0xfe, 0x2e, 0xfe, 0xfe, + 0x01, 0xf6, 0xd3, 0x07, 0x79, 0xfd, 0xe0, 0x39, 0x21, 0x09, 0xfd, 0xfe, + 0xf4, 0xfe, 0xf6, 0xf8, 0x17, 0xbf, 0x77, 0x2f, 0x02, 0xfe, 0xfe, 0xfd, + 0x4f, 0xfe, 0xd1, 0xfd, 0xfe, 0xd1, 0x07, 0x07, 0x67, 0x81, 0x1f, 0xf9, + 0xfe, 0xfe, 0xfd, 0xfe, 0x00, 0xda, 0x6b, 0xfe, 0x07, 0x01, 0xf4, 0x81, + 0xfe, 0xe9, 0xd4, 0xfc, 0xa2, 0x17, 0xbf, 0x77, 0x2f, 0x03, 0xfe, 0xfe, + 0x5f, 0xfe, 0xe9, 0xf4, 0x07, 0x07, 0x77, 0x2f, 0x03, 0x01, 0xf4, 0xfe, + 0xfd, 0xfe, 0xfd, 0xfe, 0xfe, 0x07, 0xac, 0x04, 0xf6, 0x69, 0xfe, 0xe9, + 0xd1, 0xfd, 0xfe, 0x7c, 0xf4, 0x17, 0x07, 0x7f, 0x37, 0x05, 0xfe, 0xfe, + 0x4f, 0xfe, 0xe9, 0xfe, 0xfe, 0x07, 0x07, 0x77, 0x2f, 0x85, 0x03, 0xfd, + 0xfe, 0xfe, 0xfe, 0xe9, 0xf6, 0x07, 0x86, 0x04, 0xfe, 0x00, 0x00, 0xf4, + 0x34, 0xb1, 0xf9, 0xf8, 0x91, 0x07, 0xaf, 0x67, 0x1f, 0xfe, 0x00, 0x00, + 0x0d, 0xf4, 0xfe, 0xfe, 0xfe, 0xe9, 0xb1, 0xf9, 0x07, 0xe0, 0x07, 0x77, + 0x2d, 0xf9, 0x00, 0x00, 0xfe, 0xfe, 0x40, 0xfe, 0xe9, 0xfe, 0xfe, 0x00, + 0xfe, 0x00, 0xfc, 0xff, 0x07, 0x04, 0x2f, 0x47, 0x07, 0x6f, 0x27, 0x02, + 0x06, 0xf6, 0xfd, 0xfe, 0xfe, 0xfe, 0xe9, 0xd1, 0xfd, 0x0f, 0xfe, 0xf4, + 0xfe, 0xf6, 0x07, 0xbf, 0x77, 0x2c, 0x03, 0xfe, 0xfe, 0xfd, 0xfe, 0xfe, + 0xfe, 0xe9, 0xd2, 0x3f, 0xf4, 0xfe, 0x0f, 0x0f, 0x43, 0x4f, 0x07, 0x77, + 0xc1, 0x2f, 0x02, 0xfe, 0xfd, 0xfe, 0xfe, 0xfe, 0xe9, 0xfc, 0xd4, 0xa2, + 0x07, 0xbf, 0x77, 0x2a, 0xfe, 0xfe, 0x73, 0xfe, 0xe9, 0xd4, 0xa2, 0xfd, + 0xfe, 0x17, 0x13, 0xcf, 0x82, 0x59, 0xfe, 0xf4, 0x4f, 0x07, 0x77, 0x2f, + 0x83, 0x01, 0xf6, 0xfd, 0xfe, 0xfe, 0xfe, 0xe9, 0xd1, 0x07, 0xfd, 0xfe, + 0xf4, 0xfe, 0xf6, 0x07, 0xbf, 0x77, 0x81, 0x2c, 0xfe, 0xfe, 0xfd, 0xfe, + 0xfe, 0xfe, 0xe9, 0x98, 0xd2, 0xf4, 0xfe, 0x07, 0x03, 0xf6, 0xfd, 0xfe, + 0x5f, 0xf6, 0x71, 0xfe, 0xd3, 0x2f, 0xa7, 0x5f, 0x17, 0x00, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0xf4, 0xfe, 0xfe, 0x6f, 0xfe, 0xe9, 0xb1, 0xf9, 0x07, + 0x07, 0x77, 0x2d, 0x02, 0xf9, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xe9, 0xfe, + 0x5a, 0xfe, 0x01, 0xfc, 0x07, 0x04, 0xfe, 0x02, 0x00, 0x3f, 0xf9, 0xf6, + 0x22, 0x2f, 0xa7, 0x5f, 0x17, 0x03, 0x13, 0xfe, 0xfe, 0xfe, 0xe9, 0xfe, + 0xfe, 0x3f, 0x3f, 0x26, 0x00, 0xf9, 0x01, 0xf9, 0xf6, 0x37, 0x05, 0xfd, + 0x1f, 0xfe, 0xfe, 0xfe, 0xe9, 0x57, 0x0f, 0x77, 0x2f, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0x00, 0xfe, 0xfe, 0xfe, 0xe1, 0xe9, 0x07, 0x06, 0xf6, 0xfd, + 0xfe, 0xf6, 0x13, 0xe0, 0xd2, 0x17, 0x73, 0xfd, 0xfe, 0xfd, 0xfe, 0xfe, + 0xff, 0x57, 0x0f, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x06, 0x09, 0xfe, 0xfe, + 0xfd, 0xfe, 0xd1, 0xfd, 0xfe, 0xd1, 0xce, 0x3f, 0x3f, 0x00, 0x00, 0x39, + 0x37, 0x02, 0xf9, 0xff, 0x43, 0x1a, 0x4f, 0x0f, 0x7f, 0x37, 0x07, 0x07, + 0xc2, 0x07, 0x05, 0xf6, 0xfd, 0xfe, 0xf6, 0x01, 0xfe, 0xe2, 0xd3, 0x07, + 0x03, 0xfe, 0xfe, 0xfe, 0xe9, 0xf4, 0xef, 0x57, 0x57, 0x01, 0xf6, 0xd3, + 0x2f, 0xa7, 0x5f, 0xf8, 0x17, 0x07, 0x07, 0x07, 0x03, 0xfe, 0x00, 0xf9, + 0x8c, 0x01, 0xf9, 0xf6, 0xfe, 0x3f, 0x3e, 0xfe, 0xfe, 0xb5, 0xe9, 0xfe, + 0x47, 0x4e, 0x00, 0x72, 0xf9, 0x09, 0xff, 0x3f, 0x07, 0x77, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x07, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xf4, + 0x1b, 0xfe, 0xfe, 0xfe, 0xe9, 0xb1, 0xf9, 0x07, 0x07, 0xff, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x03, 0xf6, 0xfd, + 0xfe, 0xfe, 0xfe, 0xc1, 0xe9, 0xd1, 0xfd, 0xfe, 0xf4, 0xfe, 0xf6, 0x07, + 0xff, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x01, 0xf4, 0xfd, 0xfe, 0xfe, 0x7f, 0xfe, 0xe9, 0xd4, 0xa2, 0x07, + 0xbf, 0x77, 0x2f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x83, 0x01, 0xf6, 0xfd, 0xfe, 0xfe, 0xfe, 0xe9, 0xd1, 0x07, 0xfd, 0xfe, + 0xf4, 0xfe, 0xf6, 0x07, 0xbf, 0x77, 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x03, 0xfe, 0x00, 0x00, 0xf4, 0xfe, 0xfe, + 0x6f, 0xfe, 0xe9, 0xb1, 0xf9, 0x07, 0x07, 0x77, 0x2f, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x89, 0x07, 0xfe, 0xfe, 0xfe, 0xe9, + 0xfe, 0xfe, 0x07, 0xff, 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xf8, 0x07, 0x07, 0x07, 0x07, 0x02, 0xfe, 0xfe, 0xfe, 0xbf, 0xe9, 0xf4, + 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x00, 0x04, 0x00, 0xfe, 0xfe, 0xfd, 0xfe, 0xd1, 0xfd, 0xfe, + 0x7f, 0xfe, 0xc9, 0x07, 0xaf, 0x67, 0x1f, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x05, 0xf6, 0x17, 0xfd, 0xfe, 0xf6, 0x01, 0xfe, + 0xd3, 0x07, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xe2, 0x07, 0x07, 0x06, 0xfe, 0x00, 0xf9, 0x01, 0xf9, 0x3f, 0xf6, 0xfe, + 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, +}; + +//***************************************************************************** +// +// Moon Image +// +//***************************************************************************** +const uint8_t g_pui8MoonImage[] = +{ + IMAGE_FMT_8BPP_COMP, + 128, 0, + 128, 0, + + 223, + 0x00, 0x00, 0x00, + 0x05, 0x05, 0x05, + 0x0d, 0x0d, 0x0d, + 0x16, 0x16, 0x16, + 0x1c, 0x1d, 0x1d, + 0x1f, 0x1f, 0x1f, + 0x20, 0x20, 0x20, + 0x23, 0x23, 0x23, + 0x25, 0x25, 0x25, + 0x26, 0x26, 0x26, + 0x27, 0x27, 0x27, + 0x28, 0x28, 0x28, + 0x2a, 0x29, 0x29, + 0x29, 0x29, 0x2a, + 0x2b, 0x2b, 0x2b, + 0x2b, 0x2c, 0x2b, + 0x2c, 0x2d, 0x2d, + 0x2d, 0x2d, 0x2d, + 0x2f, 0x2f, 0x2f, + 0x30, 0x30, 0x30, + 0x30, 0x30, 0x31, + 0x31, 0x31, 0x31, + 0x31, 0x32, 0x32, + 0x32, 0x32, 0x32, + 0x33, 0x33, 0x33, + 0x33, 0x33, 0x34, + 0x34, 0x34, 0x35, + 0x36, 0x35, 0x36, + 0x36, 0x37, 0x37, + 0x38, 0x38, 0x38, + 0x3a, 0x3a, 0x3a, + 0x3c, 0x3c, 0x3c, + 0x3d, 0x3d, 0x3d, + 0x3e, 0x3e, 0x3e, + 0x3f, 0x3f, 0x3f, + 0x40, 0x40, 0x41, + 0x40, 0x41, 0x41, + 0x42, 0x41, 0x42, + 0x42, 0x42, 0x42, + 0x42, 0x43, 0x42, + 0x43, 0x43, 0x43, + 0x44, 0x43, 0x43, + 0x43, 0x43, 0x44, + 0x43, 0x44, 0x44, + 0x44, 0x44, 0x44, + 0x44, 0x45, 0x44, + 0x44, 0x45, 0x45, + 0x45, 0x45, 0x45, + 0x46, 0x46, 0x46, + 0x46, 0x46, 0x47, + 0x47, 0x47, 0x47, + 0x48, 0x47, 0x48, + 0x48, 0x48, 0x47, + 0x48, 0x48, 0x48, + 0x47, 0x49, 0x48, + 0x49, 0x49, 0x48, + 0x48, 0x49, 0x49, + 0x49, 0x49, 0x49, + 0x4a, 0x49, 0x4a, + 0x4a, 0x4a, 0x4a, + 0x4b, 0x4a, 0x4a, + 0x4b, 0x4a, 0x4b, + 0x4a, 0x4b, 0x4a, + 0x4a, 0x4b, 0x4b, + 0x4b, 0x4b, 0x4b, + 0x4c, 0x4b, 0x4b, + 0x4b, 0x4b, 0x4c, + 0x4b, 0x4c, 0x4c, + 0x4c, 0x4c, 0x4c, + 0x4d, 0x4c, 0x4c, + 0x4c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x4d, + 0x4e, 0x4e, 0x4d, + 0x4d, 0x4e, 0x4e, + 0x4e, 0x4e, 0x4e, + 0x4f, 0x4e, 0x4e, + 0x4e, 0x4e, 0x4f, + 0x4f, 0x4f, 0x4f, + 0x50, 0x4f, 0x4f, + 0x4f, 0x50, 0x50, + 0x50, 0x50, 0x50, + 0x50, 0x50, 0x51, + 0x51, 0x50, 0x51, + 0x50, 0x51, 0x51, + 0x51, 0x51, 0x51, + 0x52, 0x52, 0x51, + 0x52, 0x52, 0x52, + 0x52, 0x53, 0x53, + 0x53, 0x53, 0x53, + 0x53, 0x54, 0x53, + 0x54, 0x54, 0x54, + 0x55, 0x54, 0x54, + 0x55, 0x55, 0x55, + 0x56, 0x56, 0x56, + 0x57, 0x57, 0x57, + 0x57, 0x58, 0x58, + 0x58, 0x58, 0x58, + 0x58, 0x58, 0x59, + 0x58, 0x59, 0x58, + 0x59, 0x59, 0x59, + 0x5a, 0x5a, 0x5a, + 0x5b, 0x5b, 0x5b, + 0x5c, 0x5b, 0x5b, + 0x5b, 0x5c, 0x5c, + 0x5c, 0x5c, 0x5c, + 0x5d, 0x5c, 0x5c, + 0x5c, 0x5c, 0x5d, + 0x5d, 0x5d, 0x5d, + 0x5d, 0x5e, 0x5d, + 0x5d, 0x5e, 0x5e, + 0x5e, 0x5e, 0x5e, + 0x5f, 0x5e, 0x5f, + 0x5f, 0x5f, 0x5e, + 0x5f, 0x5f, 0x5f, + 0x5f, 0x60, 0x60, + 0x60, 0x60, 0x60, + 0x60, 0x60, 0x61, + 0x60, 0x61, 0x60, + 0x60, 0x61, 0x61, + 0x61, 0x61, 0x61, + 0x61, 0x62, 0x62, + 0x62, 0x62, 0x62, + 0x63, 0x62, 0x63, + 0x63, 0x63, 0x63, + 0x63, 0x63, 0x64, + 0x63, 0x64, 0x63, + 0x63, 0x64, 0x64, + 0x64, 0x64, 0x64, + 0x65, 0x64, 0x65, + 0x64, 0x65, 0x65, + 0x65, 0x65, 0x65, + 0x65, 0x66, 0x66, + 0x66, 0x66, 0x66, + 0x66, 0x66, 0x67, + 0x67, 0x66, 0x67, + 0x66, 0x67, 0x66, + 0x67, 0x67, 0x67, + 0x67, 0x67, 0x68, + 0x67, 0x68, 0x67, + 0x67, 0x68, 0x68, + 0x68, 0x68, 0x68, + 0x68, 0x68, 0x69, + 0x68, 0x69, 0x69, + 0x69, 0x69, 0x69, + 0x6a, 0x69, 0x69, + 0x6a, 0x69, 0x6b, + 0x6a, 0x6a, 0x6a, + 0x6a, 0x6b, 0x6b, + 0x6b, 0x6b, 0x6b, + 0x6c, 0x6b, 0x6b, + 0x6b, 0x6b, 0x6c, + 0x6c, 0x6c, 0x6c, + 0x6c, 0x6d, 0x6d, + 0x6d, 0x6d, 0x6d, + 0x6e, 0x6e, 0x6e, + 0x6f, 0x6e, 0x6f, + 0x6e, 0x6f, 0x6f, + 0x6f, 0x6f, 0x6f, + 0x6e, 0x6f, 0x70, + 0x70, 0x6f, 0x70, + 0x6f, 0x70, 0x70, + 0x70, 0x70, 0x70, + 0x71, 0x70, 0x70, + 0x70, 0x71, 0x70, + 0x71, 0x71, 0x71, + 0x71, 0x71, 0x72, + 0x72, 0x72, 0x71, + 0x72, 0x72, 0x72, + 0x71, 0x72, 0x73, + 0x73, 0x72, 0x73, + 0x72, 0x73, 0x73, + 0x73, 0x73, 0x73, + 0x74, 0x74, 0x74, + 0x74, 0x74, 0x75, + 0x75, 0x74, 0x75, + 0x75, 0x75, 0x75, + 0x76, 0x75, 0x75, + 0x75, 0x75, 0x76, + 0x75, 0x76, 0x76, + 0x76, 0x76, 0x76, + 0x76, 0x76, 0x78, + 0x77, 0x77, 0x77, + 0x78, 0x78, 0x78, + 0x79, 0x78, 0x79, + 0x78, 0x79, 0x79, + 0x79, 0x79, 0x79, + 0x7a, 0x79, 0x7a, + 0x7a, 0x7a, 0x79, + 0x7a, 0x7a, 0x7a, + 0x7b, 0x7a, 0x7a, + 0x7a, 0x7a, 0x7b, + 0x7a, 0x7b, 0x7a, + 0x7b, 0x7b, 0x7b, + 0x7b, 0x7c, 0x7c, + 0x7c, 0x7c, 0x7c, + 0x7d, 0x7c, 0x7d, + 0x7c, 0x7d, 0x7d, + 0x7d, 0x7d, 0x7d, + 0x7e, 0x7d, 0x7d, + 0x7d, 0x7e, 0x7d, + 0x7d, 0x7e, 0x7e, + 0x7e, 0x7e, 0x7e, + 0x7f, 0x7e, 0x7e, + 0x7e, 0x7e, 0x7f, + 0x7e, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, + 0x80, 0x80, 0x7f, + 0x7f, 0x80, 0x80, + 0x80, 0x80, 0x80, + 0x81, 0x80, 0x80, + 0x80, 0x81, 0x7f, + 0x80, 0x80, 0x81, + 0x80, 0x81, 0x81, + 0x81, 0x81, 0x81, + 0x82, 0x81, 0x81, + 0x80, 0x81, 0x82, + 0x81, 0x82, 0x82, + 0x82, 0x82, 0x82, + 0x83, 0x82, 0x83, + 0x82, 0x83, 0x82, + 0x83, 0x83, 0x83, + 0x84, 0x84, 0x84, + 0x84, 0x85, 0x85, + 0x86, 0x86, 0x87, + + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x03, 0x04, 0x05, 0x06, 0x06, 0x06, 0x05, 0x04, + 0x3f, 0x03, 0x01, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xfc, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x03, 0x07, 0x13, 0x1b, + 0x1b, 0x1a, 0x1a, 0x00, 0x18, 0x17, 0x17, 0x18, 0x18, 0x1b, 0x1c, 0x1d, + 0x00, 0x20, 0x26, 0x30, 0x30, 0x18, 0x09, 0x08, 0x02, 0xff, 0x06, 0xc6, + 0x87, 0x3f, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x01, 0x02, + 0x03, 0x0e, 0x13, 0x00, 0x11, 0x0f, 0x0d, 0x0e, 0x11, 0x15, 0x1a, 0x1b, + 0x00, 0x1d, 0x1e, 0x20, 0x23, 0x24, 0x26, 0x26, 0x26, 0x00, 0x26, 0x27, + 0x28, 0x23, 0x21, 0x21, 0x23, 0x35, 0x03, 0x4d, 0x07, 0x0d, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x80, 0x07, 0x00, 0x01, 0x04, 0x0f, 0x0f, 0x0d, 0x09, 0x00, 0x0b, 0x11, + 0x17, 0x1b, 0x1d, 0x1e, 0x1f, 0x21, 0x00, 0x23, 0x26, 0x2c, 0x2f, 0x30, + 0x35, 0x39, 0x40, 0x00, 0x44, 0x47, 0x47, 0x4a, 0x50, 0x54, 0x53, 0x50, + 0x00, 0x46, 0x35, 0x2c, 0x2c, 0x54, 0x1e, 0x0f, 0x00, 0x3f, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x03, + 0x03, 0x0b, 0x0e, 0x00, 0x0a, 0x09, 0x0b, 0x11, 0x15, 0x1b, 0x1b, 0x1d, + 0x00, 0x1f, 0x22, 0x26, 0x2c, 0x2f, 0x31, 0x35, 0x35, 0x00, 0x3b, 0x40, + 0x44, 0x4a, 0x4d, 0x50, 0x56, 0x5a, 0x00, 0x5c, 0x5e, 0x60, 0x60, 0x5f, + 0x60, 0x60, 0x63, 0x00, 0x5d, 0x54, 0x40, 0x32, 0x5c, 0x20, 0x03, 0x00, + 0x3f, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x06, 0x01, 0x03, 0x0b, 0x09, 0x00, 0x07, 0x08, 0x0e, 0x13, 0x17, + 0x1a, 0x1d, 0x1f, 0x00, 0x22, 0x22, 0x24, 0x26, 0x2c, 0x2f, 0x30, 0x32, + 0x00, 0x35, 0x3b, 0x3b, 0x44, 0x4a, 0x4d, 0x50, 0x56, 0x00, 0x58, 0x5a, + 0x5d, 0x60, 0x64, 0x65, 0x6b, 0x6b, 0x00, 0x71, 0x71, 0x71, 0x71, 0x6e, + 0x68, 0x5d, 0x47, 0x03, 0x54, 0x23, 0x03, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x03, 0x00, 0x03, 0x0b, + 0x08, 0x06, 0x09, 0x0f, 0x13, 0x15, 0x00, 0x1b, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x24, 0x26, 0x00, 0x28, 0x2c, 0x30, 0x32, 0x39, 0x3b, 0x40, 0x46, + 0x00, 0x47, 0x4a, 0x50, 0x56, 0x58, 0x5a, 0x5d, 0x62, 0x00, 0x63, 0x68, + 0x6e, 0x73, 0x71, 0x77, 0x77, 0x7b, 0x00, 0x7f, 0x82, 0x7f, 0x7b, 0x7b, + 0x71, 0x5a, 0x54, 0x07, 0x26, 0x03, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xfc, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x00, 0x03, 0x00, 0x09, 0x07, + 0x06, 0x08, 0x0e, 0x11, 0x13, 0x1b, 0x00, 0x1d, 0x1e, 0x1e, 0x20, 0x21, + 0x22, 0x24, 0x26, 0x00, 0x28, 0x2f, 0x30, 0x32, 0x39, 0x3b, 0x40, 0x4d, + 0x00, 0x4c, 0x4f, 0x50, 0x58, 0x59, 0x5c, 0x5d, 0x60, 0x00, 0x68, 0x65, + 0x71, 0x73, 0x79, 0x7b, 0x7b, 0x7f, 0x00, 0x82, 0x84, 0x84, 0x88, 0x8c, + 0x8f, 0x84, 0x88, 0x00, 0x7f, 0x60, 0x5a, 0x2f, 0x03, 0x00, 0x00, 0x00, + 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x80, 0x04, 0x01, + 0x07, 0x08, 0x06, 0x08, 0x0e, 0x11, 0x00, 0x12, 0x1b, 0x1d, 0x1d, 0x1e, + 0x1e, 0x1f, 0x21, 0x00, 0x22, 0x23, 0x24, 0x28, 0x2c, 0x2f, 0x32, 0x35, + 0x00, 0x3b, 0x40, 0x47, 0x47, 0x50, 0x5a, 0x5a, 0x5c, 0x00, 0x5c, 0x5e, + 0x60, 0x68, 0x6b, 0x68, 0x73, 0x77, 0x00, 0x7b, 0x7f, 0x84, 0x88, 0x8c, + 0x88, 0x8c, 0x8f, 0x00, 0x92, 0x92, 0x97, 0x99, 0x94, 0x92, 0x8c, 0x65, + 0x07, 0x60, 0x39, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xfc, 0x5f, 0x17, + 0x07, 0x07, 0x07, 0x02, 0x03, 0x08, 0x00, 0x06, 0x06, 0x0b, 0x0f, 0x11, + 0x18, 0x1b, 0x1c, 0x00, 0x1d, 0x1e, 0x1e, 0x1f, 0x21, 0x22, 0x23, 0x26, + 0x00, 0x28, 0x2c, 0x30, 0x32, 0x35, 0x3b, 0x40, 0x44, 0x00, 0x4a, 0x54, + 0x54, 0x56, 0x5d, 0x60, 0x5e, 0x63, 0x00, 0x64, 0x68, 0x71, 0x71, 0x77, + 0x7b, 0x7f, 0x84, 0x00, 0x85, 0x8c, 0x92, 0x92, 0x94, 0x94, 0x92, 0x94, + 0x00, 0x99, 0x9a, 0x9a, 0xa1, 0x99, 0x99, 0x8c, 0x61, 0x07, 0x79, 0x0f, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf8, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x01, 0x07, 0x07, 0x00, 0x05, 0x08, 0x0e, 0x0e, 0x12, 0x1b, 0x1b, 0x1c, + 0x00, 0x1d, 0x1e, 0x1e, 0x1f, 0x20, 0x22, 0x23, 0x24, 0x00, 0x26, 0x2c, + 0x2f, 0x30, 0x35, 0x3b, 0x40, 0x44, 0x00, 0x4a, 0x54, 0x56, 0x5a, 0x5e, + 0x5f, 0x63, 0x68, 0x00, 0x6b, 0x6e, 0x71, 0x79, 0x79, 0x7f, 0x7f, 0x82, + 0x00, 0x84, 0x8c, 0x8c, 0x94, 0x97, 0x99, 0x97, 0x97, 0x00, 0x97, 0x9a, + 0x9d, 0xa4, 0xa7, 0xab, 0xa7, 0x9d, 0x00, 0xa1, 0x7f, 0x60, 0x39, 0x02, + 0x00, 0x00, 0x00, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x04, + 0x00, 0x02, 0x08, 0x05, 0x06, 0x0b, 0x0d, 0x0f, 0x17, 0x00, 0x19, 0x1b, + 0x1b, 0x1d, 0x1d, 0x1e, 0x1f, 0x20, 0x00, 0x22, 0x23, 0x26, 0x28, 0x2c, + 0x2f, 0x32, 0x35, 0x00, 0x39, 0x3b, 0x44, 0x4a, 0x50, 0x56, 0x5c, 0x5d, + 0x00, 0x61, 0x64, 0x68, 0x6b, 0x71, 0x77, 0x79, 0x7f, 0x00, 0x82, 0x84, + 0x88, 0x8c, 0x88, 0x8c, 0x92, 0x94, 0x00, 0x99, 0x9c, 0x9d, 0x9d, 0x9a, + 0x9d, 0xa4, 0xab, 0x00, 0xac, 0xaf, 0xaf, 0xaf, 0xab, 0xa4, 0xa1, 0x6a, + 0x07, 0x73, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf8, 0x5f, 0x17, + 0x07, 0x07, 0x02, 0x03, 0x07, 0x05, 0x00, 0x07, 0x0d, 0x0d, 0x11, 0x18, + 0x18, 0x1b, 0x1c, 0x00, 0x1d, 0x1d, 0x1e, 0x1e, 0x20, 0x21, 0x23, 0x24, + 0x00, 0x26, 0x28, 0x2f, 0x30, 0x35, 0x39, 0x40, 0x44, 0x00, 0x47, 0x4a, + 0x50, 0x58, 0x5e, 0x63, 0x64, 0x6b, 0x00, 0x6e, 0x71, 0x79, 0x78, 0x7b, + 0x82, 0x8f, 0x8e, 0x00, 0x8f, 0x8f, 0x8c, 0x92, 0x94, 0x97, 0x9a, 0x9d, + 0x00, 0xa1, 0xa3, 0xa3, 0xa4, 0xa4, 0xac, 0xb3, 0xb6, 0x00, 0xb6, 0xb6, + 0xb6, 0xb6, 0xa7, 0xaf, 0x82, 0x73, 0x0f, 0x2c, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0xe0, 0x17, 0x07, 0x07, 0x00, 0x00, 0x05, 0x07, 0x05, + 0x00, 0x08, 0x0d, 0x0d, 0x10, 0x18, 0x1a, 0x1b, 0x1c, 0x00, 0x1d, 0x1d, + 0x1e, 0x1e, 0x20, 0x21, 0x23, 0x24, 0x00, 0x27, 0x2c, 0x30, 0x35, 0x3b, + 0x40, 0x47, 0x4a, 0x00, 0x4d, 0x54, 0x56, 0x5a, 0x5e, 0x62, 0x64, 0x68, + 0x00, 0x6e, 0x73, 0x79, 0x7b, 0x82, 0x87, 0x8c, 0x78, 0x00, 0x7f, 0x84, + 0x94, 0x94, 0x94, 0x99, 0x99, 0x9d, 0x00, 0xa1, 0xa4, 0xa4, 0xa7, 0xa4, + 0xa7, 0xaf, 0xb6, 0x00, 0xbc, 0xbc, 0xc0, 0xc0, 0xc0, 0xbc, 0xad, 0xb5, + 0x03, 0x9a, 0x6b, 0x40, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f, + 0x17, 0x07, 0x07, 0x06, 0x05, 0x05, 0x00, 0x0a, 0x0d, 0x0d, 0x11, 0x17, + 0x19, 0x1a, 0x1c, 0x00, 0x1c, 0x1d, 0x1e, 0x1e, 0x20, 0x20, 0x22, 0x23, + 0x00, 0x20, 0x1a, 0x0f, 0x0b, 0x08, 0x07, 0x07, 0x07, 0x00, 0x08, 0x0d, + 0x12, 0x1d, 0x32, 0x5d, 0x65, 0x65, 0x00, 0x6b, 0x71, 0x77, 0x79, 0x82, + 0x84, 0x92, 0x97, 0x00, 0x79, 0x8c, 0x88, 0x94, 0x97, 0x9a, 0x99, 0x9a, + 0x00, 0x9a, 0xa3, 0xa7, 0xab, 0xab, 0xab, 0xab, 0xaf, 0x00, 0xb7, 0xc0, + 0xc2, 0xc5, 0xc8, 0xc5, 0xc5, 0xc1, 0x00, 0xb5, 0xb6, 0xaf, 0x71, 0x4a, + 0x00, 0x00, 0x00, 0xfe, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x04, 0x01, + 0x00, 0x07, 0x05, 0x05, 0x0a, 0x0a, 0x0d, 0x11, 0x17, 0x00, 0x18, 0x1a, + 0x1b, 0x1b, 0x1d, 0x1d, 0x1e, 0x1f, 0x00, 0x21, 0x1e, 0x11, 0x07, 0x06, + 0x07, 0x09, 0x0d, 0x00, 0x0f, 0x11, 0x12, 0x13, 0x13, 0x13, 0x12, 0x11, + 0x00, 0x0d, 0x0d, 0x1a, 0x40, 0x71, 0x77, 0x7b, 0x82, 0x00, 0x84, 0x8f, + 0x92, 0x99, 0x82, 0x88, 0x84, 0x94, 0x00, 0xa4, 0x9d, 0xa1, 0xa7, 0xa4, + 0xa7, 0xaa, 0xac, 0x00, 0xaf, 0xac, 0xac, 0xb3, 0xb6, 0xbc, 0xc2, 0xc5, + 0x00, 0xc9, 0xcd, 0xcd, 0xcd, 0xc5, 0xb5, 0xb6, 0xb6, 0x07, 0x77, 0x4d, + 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf0, 0x5f, 0x17, 0x07, 0x02, 0x01, + 0x07, 0x05, 0x05, 0x00, 0x0a, 0x0a, 0x0b, 0x11, 0x17, 0x17, 0x18, 0x1a, + 0x00, 0x1b, 0x1d, 0x1d, 0x1e, 0x20, 0x1c, 0x0a, 0x06, 0x00, 0x07, 0x0a, + 0x0e, 0x14, 0x1a, 0x1d, 0x20, 0x22, 0x00, 0x24, 0x26, 0x26, 0x23, 0x26, + 0x23, 0x20, 0x1e, 0x00, 0x1a, 0x11, 0x11, 0x2f, 0x77, 0x7b, 0x7f, 0x84, + 0x00, 0x92, 0x98, 0x9a, 0x97, 0x99, 0xa7, 0xa1, 0xa7, 0x00, 0xa7, 0xa7, + 0xa7, 0xab, 0xa7, 0xac, 0xb3, 0xb3, 0x00, 0xaf, 0xb3, 0xb6, 0xb9, 0xbf, + 0xc3, 0xc8, 0xd0, 0x00, 0xd5, 0xd0, 0xd0, 0xcd, 0xb6, 0xb6, 0xbc, 0x7e, + 0x0f, 0x4d, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xe0, 0x17, 0x07, + 0x01, 0x06, 0x05, 0x06, 0x0a, 0x0a, 0x00, 0x0d, 0x0e, 0x17, 0x17, 0x18, + 0x1b, 0x1b, 0x1d, 0x00, 0x1d, 0x1e, 0x1e, 0x0b, 0x05, 0x07, 0x0b, 0x12, + 0x00, 0x1c, 0x21, 0x2c, 0x35, 0x40, 0x43, 0x49, 0x4a, 0x00, 0x4c, 0x49, + 0x4a, 0x47, 0x47, 0x40, 0x3b, 0x30, 0x00, 0x24, 0x1d, 0x16, 0x12, 0x50, + 0x8c, 0x8f, 0x8c, 0x00, 0x9a, 0x9d, 0xa1, 0xa1, 0xa1, 0xab, 0xa7, 0xa7, + 0x00, 0xac, 0xb3, 0xb5, 0xad, 0xaf, 0xb3, 0xb5, 0xb5, 0x00, 0xb5, 0xb6, + 0xb6, 0xb9, 0xbc, 0xc4, 0xd0, 0xd5, 0x00, 0xd5, 0xd9, 0xd0, 0xcb, 0xb8, + 0xb9, 0xc2, 0x82, 0x0f, 0x4a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0xc0, 0x17, 0x07, 0x00, 0x05, 0x05, 0x05, 0x0a, 0x0a, 0x00, 0x0b, 0x0d, + 0x13, 0x15, 0x18, 0x1a, 0x1a, 0x1b, 0x00, 0x1c, 0x1e, 0x17, 0x05, 0x06, + 0x0a, 0x13, 0x1d, 0x00, 0x26, 0x39, 0x44, 0x50, 0x56, 0x56, 0x57, 0x56, + 0x00, 0x5a, 0x56, 0x58, 0x58, 0x54, 0x54, 0x56, 0x54, 0x00, 0x50, 0x46, + 0x3b, 0x2b, 0x1f, 0x17, 0x21, 0x82, 0x00, 0x97, 0x99, 0xa1, 0xa1, 0x9d, + 0xa1, 0xa4, 0xab, 0x00, 0xad, 0xac, 0xac, 0xaf, 0xb5, 0xaf, 0xb5, 0xb5, + 0x00, 0xb5, 0xb5, 0xb6, 0xb3, 0xb5, 0xb9, 0xbc, 0xc9, 0x00, 0xd5, 0xdc, + 0xdc, 0xd9, 0xd0, 0xc5, 0xb9, 0xbc, 0x03, 0xc0, 0x7f, 0x47, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xf0, 0xa7, 0x5f, 0x17, 0x06, 0x04, 0x06, 0x05, 0x09, + 0x00, 0x0a, 0x0b, 0x0d, 0x12, 0x15, 0x17, 0x18, 0x1a, 0x00, 0x1b, 0x1c, + 0x1d, 0x0e, 0x04, 0x08, 0x0e, 0x1c, 0x00, 0x24, 0x3b, 0x50, 0x58, 0x5c, + 0x5c, 0x5a, 0x5a, 0x00, 0x58, 0x58, 0x58, 0x58, 0x57, 0x54, 0x54, 0x57, + 0x00, 0x58, 0x5a, 0x58, 0x57, 0x50, 0x4d, 0x40, 0x2c, 0x00, 0x1e, 0x1b, + 0x83, 0x99, 0xa1, 0x9d, 0x9c, 0xa1, 0x00, 0xa1, 0xa7, 0xab, 0xaf, 0xb3, + 0xb3, 0xb3, 0xae, 0x00, 0xb5, 0xb5, 0xb5, 0xb3, 0xaf, 0xae, 0xaf, 0xb6, + 0x00, 0xbe, 0xb9, 0xd0, 0xda, 0xdd, 0xdc, 0xd5, 0xd0, 0x00, 0xc1, 0xbc, + 0xc0, 0xc0, 0x7e, 0x35, 0x00, 0x00, 0x7e, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0x17, 0x04, 0x03, 0x00, 0x06, 0x05, 0x09, 0x0a, 0x0b, 0x0d, 0x0f, 0x15, + 0x00, 0x16, 0x18, 0x19, 0x1b, 0x1b, 0x1d, 0x09, 0x04, 0x00, 0x09, 0x12, + 0x1f, 0x30, 0x4d, 0x58, 0x5c, 0x5d, 0x00, 0x5c, 0x5a, 0x5a, 0x5c, 0x5a, + 0x5c, 0x56, 0x56, 0x00, 0x56, 0x50, 0x50, 0x56, 0x58, 0x58, 0x56, 0x55, + 0x00, 0x58, 0x55, 0x50, 0x47, 0x39, 0x23, 0x1b, 0x7c, 0x00, 0xa4, 0x9c, + 0xa1, 0xa1, 0xa1, 0xa7, 0xab, 0xab, 0x00, 0xaf, 0xb5, 0xb6, 0xb5, 0xb5, + 0xb5, 0xb3, 0xac, 0x00, 0xab, 0xa7, 0xaa, 0xb3, 0xbe, 0xc0, 0xb9, 0xd5, + 0x00, 0xdd, 0xdc, 0xdc, 0xd9, 0xd0, 0xc0, 0xbe, 0xc0, 0x03, 0xbc, 0x7f, + 0x0d, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xf0, 0xa7, 0x5f, 0x17, 0x02, 0x02, + 0x07, 0x04, 0x08, 0x00, 0x09, 0x0a, 0x0b, 0x0d, 0x11, 0x12, 0x16, 0x17, + 0x00, 0x19, 0x1a, 0x1b, 0x09, 0x05, 0x08, 0x15, 0x22, 0x01, 0x3b, 0x56, + 0x5c, 0x5a, 0x5c, 0x5c, 0x5b, 0xe1, 0x00, 0x5c, 0x5a, 0x59, 0x54, 0x54, + 0x53, 0x54, 0x56, 0x00, 0x58, 0x56, 0x55, 0x56, 0x56, 0x54, 0x55, 0x56, + 0x00, 0x51, 0x44, 0x28, 0x1e, 0x88, 0xa1, 0xa1, 0xa1, 0x00, 0xa4, 0xa7, + 0xa7, 0xa4, 0xab, 0xaf, 0xaf, 0xb3, 0x00, 0xaf, 0xb5, 0xaf, 0xab, 0xa7, + 0x9d, 0x9d, 0xa7, 0x00, 0xb6, 0xc2, 0xc5, 0xbd, 0xdb, 0xdd, 0xdd, 0xd9, + 0x00, 0xd5, 0xc5, 0xc1, 0xc2, 0xc2, 0xb6, 0x88, 0x02, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x80, 0x01, 0x07, 0x04, 0x07, 0x0a, + 0x0a, 0x0b, 0x0b, 0x00, 0x0e, 0x11, 0x13, 0x15, 0x18, 0x18, 0x1b, 0x0d, + 0x00, 0x04, 0x08, 0x14, 0x22, 0x44, 0x56, 0x5c, 0x5c, 0x00, 0x5c, 0x5c, + 0x5a, 0x59, 0x5c, 0x5a, 0x5d, 0x5a, 0x00, 0x5a, 0x59, 0x56, 0x53, 0x56, + 0x54, 0x56, 0x54, 0x04, 0x53, 0x53, 0x54, 0x54, 0x56, 0xb9, 0x50, 0x47, + 0x00, 0x2e, 0x20, 0x99, 0xa4, 0xa2, 0xa5, 0xa4, 0xa4, 0x00, 0x9a, 0xa1, + 0xab, 0xac, 0xa7, 0x9b, 0xa7, 0xac, 0x00, 0xac, 0xab, 0xa1, 0x9a, 0x9a, + 0xab, 0xb9, 0xc9, 0x00, 0xcd, 0xd1, 0xdb, 0xdd, 0xdc, 0xd9, 0xd5, 0xc2, + 0x00, 0xc2, 0xc2, 0xc5, 0xa1, 0x88, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0x00, 0x00, 0x04, 0x00, 0x05, 0x06, 0x09, 0x0a, 0x0b, + 0x0a, 0x0b, 0x10, 0x00, 0x11, 0x11, 0x15, 0x17, 0x18, 0x12, 0x04, 0x06, + 0x00, 0x11, 0x1f, 0x39, 0x4d, 0x5a, 0x5a, 0x5c, 0x5c, 0x04, 0x5a, 0x5a, + 0x58, 0x5a, 0x58, 0xe9, 0x58, 0x56, 0x00, 0x56, 0x56, 0x54, 0x50, 0x50, + 0x4d, 0x51, 0x4d, 0x00, 0x50, 0x54, 0x4d, 0x4d, 0x4e, 0x4d, 0x4a, 0x46, + 0x00, 0x2c, 0x33, 0xa7, 0xa5, 0xa4, 0xa5, 0xa4, 0x99, 0x00, 0x99, 0xa4, + 0xb2, 0xac, 0xb3, 0xad, 0xaf, 0xa7, 0x00, 0xb3, 0xab, 0x9d, 0x99, 0x9d, + 0xaa, 0xb9, 0xd0, 0x00, 0xd5, 0xd9, 0xdd, 0xdd, 0xd9, 0xd9, 0xc9, 0xc5, + 0x00, 0xc5, 0xc5, 0xc9, 0x8f, 0x11, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0x02, 0x07, 0x05, 0x00, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, + 0x0d, 0x11, 0x11, 0x00, 0x12, 0x13, 0x15, 0x18, 0x04, 0x05, 0x0d, 0x1d, + 0x00, 0x2c, 0x40, 0x4d, 0x54, 0x5a, 0x5c, 0x5a, 0x58, 0x08, 0x57, 0x56, + 0x56, 0x54, 0xe1, 0x56, 0x58, 0x56, 0x00, 0x56, 0x50, 0x4d, 0x4c, 0x4d, + 0x4a, 0x4d, 0x50, 0x00, 0x4d, 0x4d, 0x4a, 0x47, 0x40, 0x40, 0x43, 0x3b, + 0x00, 0x22, 0x65, 0xa9, 0xa8, 0xa7, 0xa3, 0x99, 0x97, 0x00, 0x9d, 0xa7, + 0xab, 0xa7, 0xb5, 0xaf, 0xa7, 0xb3, 0x00, 0xb3, 0xa4, 0x99, 0x9a, 0x9d, + 0xab, 0xc0, 0xd5, 0x00, 0xd9, 0xd9, 0xdc, 0xdc, 0xd9, 0xd0, 0xc5, 0xc5, + 0x01, 0xc3, 0xc2, 0xc9, 0x9c, 0x00, 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, + 0x5f, 0x17, 0x08, 0x04, 0x08, 0x0a, 0x00, 0x0a, 0x0b, 0x0b, 0x0b, 0x0d, + 0x11, 0x11, 0x12, 0x00, 0x13, 0x17, 0x08, 0x04, 0x09, 0x1a, 0x24, 0x35, + 0x00, 0x40, 0x47, 0x50, 0x56, 0x58, 0x5a, 0x58, 0x56, 0x00, 0x56, 0x50, + 0x50, 0x54, 0x54, 0x54, 0x56, 0x57, 0x00, 0x57, 0x56, 0x4d, 0x4f, 0x50, + 0x4c, 0x47, 0x47, 0x00, 0x47, 0x4a, 0x4b, 0x4a, 0x44, 0x3b, 0x35, 0x38, + 0x00, 0x31, 0x2c, 0x20, 0x92, 0x97, 0xa1, 0x9b, 0x97, 0x00, 0x97, 0x9d, + 0xa7, 0xaf, 0xaa, 0xac, 0x9f, 0xab, 0x00, 0xc0, 0xb9, 0xac, 0x9d, 0x9a, + 0x9a, 0x9d, 0xac, 0x00, 0xc2, 0xd9, 0xd9, 0xdc, 0xdc, 0xd9, 0xd9, 0xc5, + 0x00, 0xc7, 0xc3, 0xc2, 0xc5, 0xb5, 0x54, 0x00, 0x00, 0x7c, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x15, 0x04, 0x06, 0x00, 0x06, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0d, 0x0b, 0x0f, 0x00, 0x11, 0x11, 0x13, 0x13, 0x15, 0x03, 0x06, 0x11, + 0x00, 0x1f, 0x2f, 0x39, 0x3b, 0x40, 0x49, 0x50, 0x56, 0x00, 0x58, 0x56, + 0x56, 0x50, 0x4f, 0x50, 0x50, 0x50, 0x40, 0x54, 0xb1, 0x54, 0x53, 0x54, + 0x4d, 0x4d, 0x47, 0x00, 0x47, 0x47, 0x45, 0x47, 0x47, 0x44, 0x3c, 0x35, + 0x00, 0x35, 0x31, 0x2c, 0x21, 0x50, 0x92, 0x94, 0x97, 0x00, 0x99, 0x99, + 0x9d, 0xac, 0xab, 0xb5, 0xa4, 0xa4, 0x00, 0xc0, 0xb9, 0xbb, 0xb5, 0xa7, + 0x9d, 0x9a, 0x9d, 0x00, 0xa3, 0xac, 0xc2, 0xdc, 0xdc, 0xd9, 0xdc, 0xdc, + 0x00, 0xcd, 0xc6, 0xc5, 0xc5, 0xc5, 0xcd, 0x9a, 0x03, 0x1f, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x13, 0x00, 0x01, 0x08, 0x04, 0x0a, 0x0b, + 0x0d, 0x0d, 0x0c, 0x00, 0x0d, 0x0d, 0x11, 0x11, 0x14, 0x15, 0x17, 0x09, + 0x00, 0x04, 0x0a, 0x1c, 0x28, 0x32, 0x35, 0x39, 0x3b, 0x00, 0x43, 0x47, + 0x53, 0x56, 0x56, 0x54, 0x50, 0x4a, 0x00, 0x50, 0x4e, 0x50, 0x54, 0x54, + 0x54, 0x4f, 0x4d, 0x00, 0x54, 0x50, 0x4d, 0x4d, 0x47, 0x44, 0x47, 0x46, + 0x00, 0x3f, 0x40, 0x44, 0x44, 0x39, 0x3b, 0x31, 0x2f, 0x00, 0x26, 0x21, + 0x94, 0x97, 0x99, 0x9a, 0x9d, 0x9e, 0x00, 0xa7, 0xac, 0xaf, 0xb3, 0xa4, + 0xb6, 0xc2, 0xc0, 0x00, 0xb6, 0xb3, 0x9d, 0x9d, 0x9d, 0xa4, 0xa4, 0xab, + 0x00, 0xd4, 0xdd, 0xde, 0xde, 0xdd, 0xd5, 0xc9, 0xc9, 0x00, 0xc6, 0xc9, + 0xc8, 0xc2, 0x94, 0x00, 0x00, 0x00, 0xf8, 0xe9, 0xd4, 0xa7, 0x5f, 0x13, + 0x06, 0x05, 0x08, 0x00, 0x0b, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0f, 0x11, + 0x00, 0x12, 0x16, 0x18, 0x1b, 0x04, 0x06, 0x13, 0x22, 0x00, 0x32, 0x39, + 0x35, 0x38, 0x39, 0x3b, 0x46, 0x4d, 0x00, 0x53, 0x54, 0x4f, 0x4d, 0x4d, + 0x4d, 0x4d, 0x54, 0x00, 0x54, 0x50, 0x4f, 0x4a, 0x4a, 0x4d, 0x4e, 0x4f, + 0x00, 0x4d, 0x46, 0x47, 0x47, 0x44, 0x40, 0x44, 0x44, 0x00, 0x41, 0x40, + 0x39, 0x35, 0x2f, 0x2c, 0x22, 0x68, 0x00, 0x99, 0x9a, 0x9d, 0x9d, 0xa1, + 0xa7, 0xb3, 0xad, 0x00, 0xbc, 0xaf, 0xa4, 0xab, 0xc0, 0xc0, 0xb6, 0xa1, + 0x00, 0x9e, 0xa1, 0xa1, 0xa3, 0xaf, 0xc3, 0xdd, 0xde, 0x00, 0xdf, 0xdf, + 0xde, 0xd0, 0xce, 0xcd, 0xcd, 0xc5, 0x03, 0xc9, 0xa0, 0x13, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xe0, 0xa7, 0x5f, 0x11, 0x02, 0x08, 0x05, 0x0d, 0x0d, + 0x00, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x11, 0x12, 0x13, 0x00, 0x17, 0x1b, + 0x18, 0x04, 0x09, 0x1b, 0x2b, 0x3b, 0x00, 0x3b, 0x3b, 0x39, 0x35, 0x39, + 0x43, 0x49, 0x50, 0x00, 0x4f, 0x4d, 0x4d, 0x4e, 0x4f, 0x54, 0x53, 0x53, + 0x00, 0x50, 0x4d, 0x4d, 0x4d, 0x54, 0x53, 0x50, 0x49, 0x00, 0x47, 0x43, + 0x43, 0x42, 0x44, 0x40, 0x44, 0x44, 0x00, 0x40, 0x3b, 0x35, 0x30, 0x2f, + 0x28, 0x43, 0x9a, 0x00, 0x9a, 0x9d, 0xa1, 0xa4, 0xab, 0xb2, 0xb5, 0xb6, + 0x00, 0xc1, 0xa8, 0xab, 0xb9, 0xc3, 0xc0, 0xa7, 0xa1, 0x00, 0x9d, 0x9d, + 0xa1, 0xab, 0xdd, 0xdc, 0xde, 0xdf, 0x00, 0xdf, 0xdd, 0xd0, 0xd0, 0xd3, + 0xd0, 0xcd, 0xc5, 0x07, 0xcd, 0x99, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xc0, 0x5f, 0x11, 0x06, 0x05, 0x08, 0x0d, 0x0d, 0x0e, 0x00, 0x0f, 0x11, + 0x11, 0x11, 0x12, 0x13, 0x17, 0x19, 0x00, 0x1c, 0x0e, 0x05, 0x10, 0x1f, + 0x2f, 0x39, 0x3e, 0x00, 0x40, 0x3b, 0x3b, 0x3b, 0x3e, 0x47, 0x4a, 0x4d, + 0x00, 0x4d, 0x4d, 0x4f, 0x50, 0x53, 0x54, 0x50, 0x4d, 0x00, 0x53, 0x4d, + 0x53, 0x50, 0x4f, 0x4c, 0x4c, 0x47, 0x00, 0x44, 0x40, 0x3b, 0x43, 0x44, + 0x43, 0x3f, 0x40, 0x00, 0x3e, 0x39, 0x32, 0x2f, 0x2c, 0x23, 0x9d, 0x9d, + 0x00, 0xa1, 0xa4, 0xa4, 0xab, 0xb3, 0xb6, 0xbc, 0xc5, 0x00, 0xb9, 0xab, + 0xb5, 0xc3, 0xbd, 0xb5, 0xa7, 0xa1, 0x40, 0xa1, 0x71, 0xd6, 0xdd, 0xde, + 0xdd, 0xd5, 0xc2, 0x00, 0xc2, 0xc5, 0xd1, 0xd4, 0xc5, 0xc3, 0xa1, 0x13, + 0x1e, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x00, 0x00, 0x02, 0x08, + 0x06, 0x0d, 0x0d, 0x0e, 0x0f, 0x11, 0x00, 0x12, 0x12, 0x13, 0x11, 0x13, + 0x18, 0x1a, 0x1d, 0x00, 0x08, 0x07, 0x17, 0x22, 0x30, 0x32, 0x34, 0x40, + 0x00, 0x3f, 0x43, 0x40, 0x47, 0x4a, 0x4d, 0x49, 0x47, 0x00, 0x47, 0x4f, + 0x50, 0x50, 0x50, 0x4f, 0x50, 0x4d, 0x08, 0x50, 0x54, 0x54, 0x4d, 0x89, + 0x44, 0x44, 0x42, 0x00, 0x44, 0x44, 0x44, 0x40, 0x3b, 0x3b, 0x3b, 0x35, + 0x00, 0x2f, 0x2f, 0x23, 0x8e, 0xa3, 0xa4, 0xa1, 0xa5, 0x00, 0xa7, 0xaf, + 0xb8, 0xc2, 0xcd, 0xc9, 0xb6, 0xbd, 0x00, 0xc9, 0xb9, 0xbb, 0xb5, 0xab, + 0xa4, 0xa4, 0xa4, 0x00, 0xa1, 0xc9, 0xdb, 0xdb, 0xd9, 0xcd, 0xbe, 0xb6, + 0x00, 0xbc, 0xcc, 0xd9, 0xd0, 0xc5, 0xc2, 0x94, 0x00, 0x3c, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5f, 0x00, 0x05, 0x00, 0x06, 0x09, 0x0d, 0x0e, 0x0f, + 0x11, 0x11, 0x13, 0x00, 0x13, 0x13, 0x0f, 0x13, 0x1a, 0x1c, 0x1e, 0x06, + 0x00, 0x0d, 0x1e, 0x2d, 0x31, 0x30, 0x2f, 0x2e, 0x39, 0x00, 0x46, 0x47, + 0x47, 0x4a, 0x47, 0x4a, 0x44, 0x47, 0x00, 0x4a, 0x4a, 0x4c, 0x4a, 0x47, + 0x4d, 0x4d, 0x51, 0x00, 0x51, 0x50, 0x4d, 0x4d, 0x4a, 0x46, 0x44, 0x46, + 0x00, 0x44, 0x46, 0x42, 0x42, 0x40, 0x40, 0x44, 0x4f, 0x00, 0x38, 0x2f, + 0x30, 0x26, 0x76, 0xa1, 0xa3, 0xa7, 0x00, 0xa7, 0xa7, 0xab, 0xb5, 0xc4, + 0xcd, 0xc9, 0xc2, 0x00, 0xc3, 0xc9, 0xb5, 0xb9, 0xc5, 0xb5, 0xaf, 0xa6, + 0x00, 0xa4, 0xa1, 0xd5, 0xdc, 0xd9, 0xd0, 0xc3, 0xb5, 0x00, 0xb6, 0xb7, + 0xc9, 0xd6, 0xd5, 0xcd, 0xc0, 0x9b, 0x0f, 0x16, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5e, 0x00, 0x01, 0x09, 0x06, 0x0e, 0x0e, 0x0f, 0x11, 0x11, + 0x00, 0x13, 0x11, 0x15, 0x15, 0x11, 0x1b, 0x1d, 0x1d, 0x00, 0x1f, 0x06, + 0x10, 0x21, 0x35, 0x3b, 0x30, 0x2f, 0x00, 0x2e, 0x32, 0x49, 0x4a, 0x48, + 0x49, 0x44, 0x44, 0x00, 0x44, 0x40, 0x3f, 0x40, 0x3f, 0x3b, 0x43, 0x46, + 0x00, 0x4a, 0x4d, 0x4c, 0x4f, 0x4f, 0x49, 0x47, 0x47, 0x20, 0x46, 0x45, + 0x69, 0x40, 0x3b, 0x3b, 0x47, 0x3b, 0x00, 0x30, 0x30, 0x2e, 0x26, 0x6b, + 0xa2, 0xa5, 0xa7, 0x00, 0xab, 0xab, 0xae, 0xb5, 0xc9, 0xd0, 0xd0, 0xbc, + 0x00, 0xd0, 0xc9, 0xaf, 0xb3, 0xd0, 0xc2, 0xc2, 0xc9, 0x00, 0xa8, 0xc2, + 0xdc, 0xdc, 0xd7, 0xc9, 0xbc, 0xad, 0x00, 0xb3, 0xbc, 0xc9, 0xd4, 0xd5, + 0xcf, 0xc2, 0xbc, 0x0f, 0x40, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5e, + 0x00, 0x03, 0x07, 0x08, 0x0e, 0x0f, 0x11, 0x11, 0x12, 0x00, 0x12, 0x0f, + 0x15, 0x11, 0x11, 0x1a, 0x1e, 0x1e, 0x00, 0x21, 0x05, 0x13, 0x26, 0x42, + 0x42, 0x37, 0x31, 0x00, 0x30, 0x35, 0x4c, 0x4d, 0x48, 0x47, 0x40, 0x40, + 0x00, 0x3b, 0x39, 0x38, 0x39, 0x35, 0x3b, 0x39, 0x44, 0x00, 0x49, 0x49, + 0x4d, 0x4d, 0x4d, 0x4c, 0x4a, 0x4a, 0x00, 0x47, 0x46, 0x44, 0x43, 0x44, + 0x3f, 0x3b, 0x42, 0x00, 0x33, 0x28, 0x2e, 0x2c, 0x2c, 0x28, 0x68, 0xa8, + 0x00, 0xa7, 0xa7, 0xac, 0xaf, 0xb2, 0xb5, 0xc9, 0xd0, 0x00, 0xd6, 0xc2, + 0xb6, 0xc0, 0xab, 0xab, 0xcc, 0xcb, 0x00, 0xd1, 0xdc, 0xdc, 0xdc, 0xdc, + 0xd9, 0xd4, 0xbf, 0x00, 0xb5, 0xab, 0xb1, 0xbc, 0xc4, 0xcb, 0xcd, 0xcd, + 0x01, 0xc5, 0xb9, 0x97, 0x03, 0x00, 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, + 0x5d, 0x09, 0x06, 0x0d, 0x0f, 0x11, 0x00, 0x11, 0x12, 0x13, 0x12, 0x0e, + 0x11, 0x18, 0x15, 0x00, 0x1d, 0x1f, 0x20, 0x23, 0x06, 0x15, 0x2b, 0x44, + 0x00, 0x44, 0x3b, 0x3b, 0x3b, 0x43, 0x4f, 0x4a, 0x47, 0x00, 0x40, 0x42, + 0x3b, 0x39, 0x35, 0x35, 0x32, 0x35, 0x00, 0x32, 0x39, 0x40, 0x44, 0x4c, + 0x4f, 0x50, 0x4c, 0x00, 0x4d, 0x4c, 0x47, 0x47, 0x47, 0x47, 0x4d, 0x47, + 0x00, 0x40, 0x3b, 0x43, 0x2c, 0x2c, 0x2f, 0x28, 0x27, 0x00, 0x26, 0x6b, + 0xac, 0xab, 0xac, 0xac, 0xaf, 0xac, 0x00, 0xb2, 0xc9, 0xd5, 0xd5, 0xdc, + 0xb9, 0xac, 0xac, 0x00, 0xab, 0xc5, 0xcf, 0xcf, 0xd9, 0xdb, 0xdc, 0xd9, + 0x00, 0xd9, 0xc8, 0xb6, 0xb1, 0xa8, 0xb1, 0xb5, 0xb9, 0x00, 0xbe, 0xc4, + 0xc9, 0xc3, 0xb5, 0xa9, 0x0e, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5c, 0x01, 0x0a, 0x00, 0x07, 0x0f, 0x11, 0x11, 0x12, 0x13, 0x17, 0x13, + 0x00, 0x0f, 0x1a, 0x1d, 0x1d, 0x1f, 0x20, 0x21, 0x24, 0x00, 0x06, 0x17, + 0x2c, 0x47, 0x49, 0x47, 0x42, 0x44, 0x00, 0x4d, 0x4c, 0x4a, 0x44, 0x44, + 0x42, 0x3b, 0x35, 0x00, 0x32, 0x30, 0x30, 0x30, 0x35, 0x3b, 0x40, 0x47, + 0x01, 0x4f, 0x4e, 0x4f, 0x4a, 0x4a, 0x47, 0x4a, 0x31, 0x20, 0x46, 0x44, + 0x39, 0x26, 0x3b, 0x35, 0x28, 0x26, 0x00, 0x27, 0x7b, 0xb9, 0xb3, 0xb1, + 0xaf, 0xb2, 0xb0, 0x00, 0xaf, 0xcd, 0xd5, 0xd9, 0xd9, 0xc7, 0xaf, 0xaf, + 0x00, 0xaf, 0xb5, 0xd9, 0xcf, 0xdc, 0xd9, 0xd9, 0xdc, 0x00, 0xd0, 0xbf, + 0xb5, 0xab, 0xab, 0xac, 0xaf, 0xaf, 0x00, 0xb9, 0xc2, 0xc5, 0xc2, 0xb6, + 0xb6, 0x8c, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0x03, 0x07, + 0x00, 0x0b, 0x0f, 0x11, 0x12, 0x13, 0x17, 0x15, 0x0f, 0x00, 0x11, 0x1b, + 0x1a, 0x18, 0x20, 0x22, 0x22, 0x28, 0x00, 0x08, 0x17, 0x29, 0x47, 0x4c, + 0x4b, 0x44, 0x46, 0x00, 0x4d, 0x4a, 0x47, 0x46, 0x42, 0x44, 0x3b, 0x35, + 0x00, 0x30, 0x32, 0x30, 0x35, 0x3b, 0x44, 0x44, 0x4d, 0x00, 0x51, 0x4f, + 0x4d, 0x4c, 0x4d, 0x4a, 0x4a, 0x44, 0x00, 0x44, 0x3b, 0x3b, 0x40, 0x42, + 0x3b, 0x40, 0x39, 0x00, 0x3b, 0x44, 0x2b, 0x26, 0x26, 0x90, 0xc4, 0xbc, + 0x00, 0xb6, 0xb9, 0xb8, 0xb5, 0xb3, 0xc5, 0xd1, 0xc5, 0x00, 0xd9, 0xd9, + 0xdc, 0xb6, 0xb3, 0xac, 0xc5, 0xc2, 0x00, 0xc1, 0xdc, 0xdc, 0xdc, 0xcc, + 0xb6, 0xb2, 0xab, 0x00, 0xa7, 0xaf, 0xa4, 0xa7, 0xb6, 0xbc, 0xc2, 0xc0, + 0x01, 0xb9, 0xb3, 0x97, 0x03, 0x00, 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, + 0x5b, 0x05, 0x06, 0x0f, 0x11, 0x12, 0x00, 0x13, 0x15, 0x18, 0x0f, 0x11, + 0x11, 0x1b, 0x17, 0x00, 0x18, 0x20, 0x1f, 0x1e, 0x2c, 0x0d, 0x17, 0x28, + 0x00, 0x4a, 0x50, 0x50, 0x4a, 0x40, 0x4a, 0x47, 0x32, 0x00, 0x47, 0x44, + 0x44, 0x3b, 0x32, 0x34, 0x30, 0x32, 0x00, 0x3b, 0x47, 0x45, 0x4d, 0x4f, + 0x50, 0x50, 0x4d, 0x00, 0x4b, 0x4d, 0x4d, 0x47, 0x47, 0x40, 0x3b, 0x3f, + 0x00, 0x47, 0x3b, 0x3b, 0x44, 0x3f, 0x44, 0x3b, 0x2b, 0x00, 0x2c, 0x24, + 0xa1, 0xc9, 0xc9, 0xc0, 0xc1, 0xc0, 0x00, 0xb9, 0xb5, 0xb5, 0xb5, 0xb5, + 0xc9, 0xdd, 0xdd, 0x00, 0xc9, 0xb5, 0xb3, 0xaf, 0xab, 0xa7, 0xdb, 0xd9, + 0x00, 0xdb, 0xc0, 0xb3, 0xaf, 0xa7, 0xa7, 0xab, 0xa3, 0x00, 0x9d, 0xb5, + 0xb6, 0xb9, 0xbc, 0xb9, 0xb3, 0xa7, 0x0f, 0x0d, 0x00, 0x00, 0x00, 0xe9, + 0xd4, 0xa7, 0x5b, 0x00, 0x0d, 0x08, 0x11, 0x11, 0x13, 0x15, 0x18, 0x13, + 0x00, 0x12, 0x11, 0x13, 0x13, 0x17, 0x18, 0x1a, 0x22, 0x00, 0x22, 0x27, + 0x18, 0x14, 0x26, 0x44, 0x50, 0x4d, 0x00, 0x4c, 0x43, 0x35, 0x28, 0x2e, + 0x44, 0x3f, 0x43, 0x00, 0x3b, 0x39, 0x32, 0x32, 0x35, 0x40, 0x44, 0x4d, + 0x00, 0x50, 0x50, 0x4d, 0x50, 0x4d, 0x4f, 0x4d, 0x4a, 0x00, 0x49, 0x44, + 0x3f, 0x40, 0x40, 0x40, 0x3f, 0x3b, 0x00, 0x3e, 0x44, 0x44, 0x2f, 0x2c, + 0x2a, 0x24, 0xac, 0x00, 0xcd, 0xcd, 0xc9, 0xc9, 0xcb, 0xc5, 0xb6, 0xb6, + 0x00, 0xb6, 0xb9, 0xb9, 0xcd, 0xc9, 0xb6, 0xb5, 0xb5, 0x00, 0xb5, 0xaf, + 0xab, 0xdc, 0xdb, 0xd5, 0xb5, 0xb2, 0x01, 0xab, 0xa7, 0xa4, 0xa4, 0x9d, + 0x97, 0xb3, 0x79, 0x01, 0xb5, 0xb2, 0xad, 0x7f, 0x00, 0x00, 0x00, 0xe9, + 0xe0, 0xd4, 0xa7, 0x5a, 0x01, 0x0b, 0x0d, 0x11, 0x12, 0x00, 0x15, 0x17, + 0x1a, 0x1b, 0x1b, 0x12, 0x13, 0x17, 0x00, 0x18, 0x1a, 0x1b, 0x1f, 0x2a, + 0x2b, 0x1f, 0x11, 0x00, 0x24, 0x44, 0x4d, 0x4c, 0x49, 0x47, 0x3b, 0x2f, + 0x00, 0x2f, 0x42, 0x3b, 0x44, 0x40, 0x3b, 0x35, 0x35, 0x00, 0x35, 0x39, + 0x40, 0x4c, 0x4d, 0x4c, 0x4a, 0x4c, 0x00, 0x4d, 0x4a, 0x4a, 0x47, 0x44, + 0x44, 0x40, 0x40, 0x00, 0x40, 0x3b, 0x40, 0x3b, 0x44, 0x44, 0x3c, 0x31, + 0x00, 0x2c, 0x2c, 0x4c, 0xaf, 0xc9, 0xd0, 0xd5, 0xd3, 0x00, 0xd0, 0xd0, + 0xc0, 0xb6, 0xb9, 0xb9, 0xb6, 0xb9, 0x80, 0xda, 0xb5, 0xb3, 0xb3, 0xc2, + 0xdc, 0xc2, 0xac, 0x00, 0xaf, 0xa4, 0xa4, 0xa3, 0x9d, 0x9a, 0x94, 0xab, + 0x00, 0xb3, 0xb3, 0xb1, 0xaf, 0xab, 0xab, 0x8c, 0x00, 0x3c, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x5a, 0x03, 0x08, 0x00, 0x0f, 0x11, 0x15, 0x16, 0x18, + 0x1a, 0x1c, 0x1a, 0x00, 0x13, 0x15, 0x18, 0x18, 0x1b, 0x1b, 0x1c, 0x22, + 0x00, 0x27, 0x2e, 0x0f, 0x21, 0x39, 0x4a, 0x4c, 0x4a, 0x00, 0x47, 0x4d, + 0x2f, 0x2e, 0x39, 0x39, 0x43, 0x44, 0x00, 0x42, 0x3b, 0x32, 0x32, 0x35, + 0x3d, 0x44, 0x46, 0x00, 0x44, 0x46, 0x4a, 0x4d, 0x4a, 0x4a, 0x46, 0x42, + 0x00, 0x40, 0x44, 0x47, 0x43, 0x43, 0x40, 0x3b, 0x3b, 0x00, 0x3f, 0x44, + 0x43, 0x32, 0x40, 0x71, 0xaf, 0xd4, 0x00, 0xd5, 0xd5, 0xd5, 0xd3, 0xd9, + 0xc9, 0xb6, 0xb9, 0x00, 0xb8, 0xbc, 0xb9, 0xb8, 0xb9, 0xbd, 0xc0, 0xb6, + 0x00, 0xb9, 0xb6, 0xb5, 0xbb, 0xb1, 0xb0, 0xab, 0xa7, 0x00, 0xa4, 0xa1, + 0x9a, 0x9a, 0x91, 0xa1, 0xb3, 0xaf, 0x00, 0xad, 0xab, 0xa8, 0xa3, 0x8f, + 0x11, 0x00, 0x00, 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x59, 0x0e, 0x08, 0x12, + 0x00, 0x13, 0x15, 0x18, 0x1b, 0x1b, 0x1c, 0x15, 0x17, 0x40, 0x17, 0xc9, + 0x1d, 0x1d, 0x1e, 0x24, 0x3f, 0x1a, 0x00, 0x1d, 0x32, 0x46, 0x4d, 0x47, + 0x4c, 0x44, 0x2c, 0x00, 0x2a, 0x2f, 0x39, 0x44, 0x44, 0x44, 0x42, 0x38, + 0x08, 0x35, 0x35, 0x39, 0x3b, 0xb9, 0x4a, 0x4a, 0x4c, 0x00, 0x4d, 0x47, + 0x46, 0x49, 0x47, 0x47, 0x47, 0x43, 0x00, 0x46, 0x44, 0x3f, 0x43, 0x49, + 0x44, 0x44, 0x39, 0x00, 0x9e, 0xd0, 0xd5, 0xd5, 0xd9, 0xd9, 0xd2, 0xd5, + 0x00, 0xd5, 0xb6, 0xb9, 0xbc, 0xb9, 0xb8, 0xb9, 0xb9, 0x00, 0xc2, 0xbe, + 0xc0, 0xb9, 0xb7, 0xb6, 0xb5, 0xb3, 0x00, 0xac, 0xa7, 0xa5, 0xa1, 0x9e, + 0x99, 0x97, 0x92, 0x00, 0xa5, 0xb2, 0xaf, 0xa7, 0xa4, 0xa4, 0x9d, 0x9d, + 0x0f, 0x0b, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x59, 0x00, 0x11, 0x0a, + 0x13, 0x15, 0x17, 0x1a, 0x1b, 0x1c, 0x00, 0x1e, 0x13, 0x17, 0x18, 0x1b, + 0x1b, 0x1d, 0x1d, 0x00, 0x1e, 0x26, 0x21, 0x39, 0x2b, 0x15, 0x26, 0x44, + 0x00, 0x4c, 0x4c, 0x4a, 0x4d, 0x32, 0x2c, 0x2c, 0x42, 0x00, 0x40, 0x43, + 0x44, 0x3b, 0x3b, 0x38, 0x38, 0x35, 0x00, 0x3b, 0x42, 0x42, 0x4a, 0x4c, + 0x4c, 0x4c, 0x46, 0x00, 0x47, 0x47, 0x47, 0x47, 0x47, 0x40, 0x42, 0x3b, + 0x00, 0x43, 0x43, 0x47, 0x44, 0x44, 0x44, 0x60, 0xb9, 0x00, 0xdc, 0xd9, + 0xdc, 0xd6, 0xdc, 0xcd, 0xd0, 0xd5, 0x00, 0xb6, 0xbc, 0xb9, 0xb9, 0xb6, + 0xb6, 0xb9, 0xc0, 0x00, 0xbc, 0xbc, 0xbc, 0xbc, 0xb5, 0xb5, 0xaf, 0xab, + 0x00, 0xa6, 0xa4, 0xa1, 0x9a, 0x99, 0x95, 0x8f, 0xa3, 0x00, 0xad, 0xac, + 0xa8, 0xa5, 0xa1, 0x9d, 0xa0, 0x71, 0x1e, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x59, 0x0f, 0x00, 0x0d, 0x15, 0x17, 0x19, 0x1b, 0x1c, 0x1d, 0x18, + 0x10, 0x17, 0x18, 0x1a, 0xc9, 0x1d, 0x1e, 0x28, 0x39, 0x00, 0x40, 0x44, + 0x1b, 0x20, 0x39, 0x4b, 0x4f, 0x4f, 0x00, 0x4a, 0x50, 0x2e, 0x2f, 0x44, + 0x40, 0x3b, 0x39, 0x00, 0x40, 0x40, 0x39, 0x35, 0x39, 0x39, 0x3b, 0x44, + 0x00, 0x4a, 0x4f, 0x4a, 0x43, 0x3b, 0x44, 0x43, 0x46, 0x00, 0x46, 0x47, + 0x44, 0x3f, 0x43, 0x43, 0x44, 0x44, 0x00, 0x40, 0x40, 0x35, 0xac, 0xcb, + 0xdd, 0xdd, 0xdc, 0x00, 0xdc, 0xdd, 0xcd, 0xc2, 0xd5, 0xb9, 0xb9, 0xb9, + 0x00, 0xb6, 0xb6, 0xb8, 0xbc, 0xc0, 0xbc, 0xbc, 0xb9, 0x00, 0xb6, 0xb9, + 0xb6, 0xaf, 0xac, 0xa5, 0xa4, 0x9d, 0x00, 0x9a, 0x97, 0x94, 0x8c, 0x97, + 0xac, 0xab, 0xa4, 0x00, 0xa1, 0xa1, 0x9a, 0x9a, 0x77, 0x00, 0x00, 0x00, + 0xe0, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x03, 0x0d, 0x11, 0x00, 0x17, 0x18, + 0x1a, 0x1c, 0x1d, 0x1b, 0x15, 0x18, 0x00, 0x1a, 0x1b, 0x1c, 0x1c, 0x1d, + 0x1e, 0x1f, 0x1f, 0x00, 0x39, 0x42, 0x49, 0x35, 0x1a, 0x2e, 0x49, 0x4d, + 0x00, 0x4d, 0x3f, 0x2f, 0x2e, 0x2e, 0x40, 0x35, 0x30, 0x00, 0x32, 0x40, + 0x44, 0x3b, 0x3b, 0x39, 0x39, 0x44, 0x00, 0x46, 0x47, 0x4c, 0x4a, 0x3f, + 0x35, 0x3b, 0x35, 0x10, 0x39, 0x3f, 0x46, 0x79, 0x3f, 0x40, 0x41, 0x3f, + 0x00, 0x3e, 0x61, 0xcc, 0xd3, 0xdc, 0xdd, 0xde, 0xdd, 0x00, 0xdd, 0xd4, + 0xb9, 0xcd, 0xbc, 0xbc, 0xb9, 0xb6, 0x00, 0xb6, 0xb6, 0xbc, 0xbc, 0xbc, + 0xbc, 0xb6, 0xb8, 0x00, 0xb6, 0xb5, 0xac, 0xab, 0xa5, 0xa4, 0x9c, 0x99, + 0x00, 0x98, 0x92, 0x8c, 0x92, 0xac, 0xa4, 0xa1, 0x9e, 0x00, 0x9d, 0x9a, + 0x97, 0x79, 0x02, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa7, 0x00, 0x03, + 0x0b, 0x12, 0x18, 0x00, 0x1b, 0x18, 0x15, 0x18, 0x18, 0x18, 0x1a, 0x1b, + 0x00, 0x1c, 0x1d, 0x1d, 0x1e, 0x1e, 0x20, 0x21, 0x2f, 0x00, 0x44, 0x4c, + 0x56, 0x1f, 0x20, 0x3b, 0x47, 0x4a, 0x02, 0x2e, 0x2f, 0x2c, 0x2c, 0x38, + 0x30, 0xe1, 0x42, 0x00, 0x43, 0x40, 0x3b, 0x39, 0x40, 0x40, 0x47, 0x4a, + 0x00, 0x53, 0x44, 0x3b, 0x39, 0x32, 0x31, 0x35, 0x3f, 0x00, 0x38, 0x38, + 0x39, 0x3f, 0x42, 0x40, 0x43, 0x44, 0x00, 0xb9, 0xc7, 0xc9, 0xd0, 0xdb, + 0xde, 0xde, 0xdf, 0x00, 0xdd, 0xc0, 0xc0, 0xc2, 0xbc, 0xb9, 0xb6, 0xb6, + 0x00, 0xb6, 0xb9, 0xbe, 0xbc, 0xb9, 0xb9, 0xb6, 0xb5, 0x00, 0xaf, 0xac, + 0xa7, 0xa7, 0xa1, 0x9d, 0x99, 0x96, 0x00, 0x8f, 0x88, 0x8b, 0xa9, 0xa4, + 0x9d, 0x9a, 0x79, 0x01, 0x99, 0x92, 0x79, 0x0b, 0x00, 0x00, 0x00, 0xe9, + 0xc0, 0xd4, 0xa7, 0x00, 0x03, 0x0a, 0x18, 0x1a, 0x15, 0x00, 0x11, 0x1b, + 0x18, 0x18, 0x1a, 0x1b, 0x1b, 0x1d, 0x00, 0x1d, 0x1e, 0x1e, 0x1f, 0x21, + 0x22, 0x26, 0x4a, 0x00, 0x47, 0x4d, 0x4a, 0x1d, 0x2c, 0x3b, 0x3a, 0x2f, + 0x00, 0x2f, 0x30, 0x2a, 0x2c, 0x28, 0x28, 0x2b, 0x2e, 0x00, 0x40, 0x42, + 0x42, 0x3b, 0x3b, 0x38, 0x3b, 0x3c, 0x00, 0x49, 0x4a, 0x4a, 0x3f, 0x39, + 0x39, 0x33, 0x35, 0x00, 0x38, 0x35, 0x39, 0x3b, 0x3b, 0x43, 0x44, 0x3e, + 0x00, 0x9a, 0xcc, 0xcd, 0xcc, 0xd0, 0xd5, 0xdd, 0xdf, 0x00, 0xdf, 0xdf, + 0xc4, 0xc3, 0xc1, 0xc0, 0xbc, 0xb9, 0x00, 0xb6, 0xb9, 0xbc, 0xbc, 0xbc, + 0xb8, 0xb6, 0xb6, 0x00, 0xb5, 0xaf, 0xad, 0xab, 0xa4, 0xa0, 0x9a, 0x99, + 0x00, 0x92, 0x8f, 0x84, 0x7f, 0xa4, 0xa1, 0x9d, 0x96, 0x00, 0x65, 0x96, + 0x8c, 0x7f, 0x0b, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa7, 0x00, 0x03, + 0x0b, 0x1a, 0x1b, 0x00, 0x14, 0x1a, 0x1e, 0x1e, 0x18, 0x1b, 0x1b, 0x1c, + 0x00, 0x1d, 0x1d, 0x1e, 0x20, 0x21, 0x21, 0x22, 0x3b, 0x00, 0x44, 0x44, + 0x4c, 0x44, 0x4a, 0x21, 0x2b, 0x28, 0x00, 0x2c, 0x30, 0x32, 0x31, 0x28, + 0x2b, 0x28, 0x26, 0x00, 0x26, 0x35, 0x44, 0x43, 0x3b, 0x35, 0x35, 0x35, + 0x00, 0x40, 0x43, 0x49, 0x47, 0x44, 0x40, 0x3b, 0x32, 0x00, 0x35, 0x32, + 0x38, 0x39, 0x40, 0x3f, 0x40, 0x3f, 0x00, 0x7f, 0xd4, 0xcd, 0xcf, 0xd4, + 0xd0, 0xd4, 0xdd, 0x00, 0xdf, 0xdf, 0xdf, 0xd4, 0xc3, 0xc4, 0xbc, 0xbc, + 0x00, 0xb6, 0xb6, 0xb9, 0xb6, 0xb9, 0xb6, 0xb6, 0xb6, 0x00, 0xb5, 0xb5, + 0xb2, 0xac, 0xab, 0xa1, 0xa1, 0x9a, 0x00, 0x99, 0x92, 0x8e, 0x86, 0x7f, + 0x8e, 0xa1, 0x99, 0x00, 0x8f, 0x64, 0x8f, 0x8c, 0x8c, 0x0a, 0x00, 0x00, + 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x13, 0x0d, 0x1b, 0x00, 0x1b, 0x1d, + 0x1d, 0x1e, 0x1f, 0x1b, 0x1b, 0x1c, 0x00, 0x1d, 0x1e, 0x1e, 0x1f, 0x21, + 0x21, 0x23, 0x28, 0x00, 0x3b, 0x42, 0x30, 0x44, 0x3b, 0x4e, 0x50, 0x1d, + 0x00, 0x22, 0x2e, 0x32, 0x31, 0x2c, 0x26, 0x26, 0x25, 0x00, 0x24, 0x24, + 0x35, 0x43, 0x3f, 0x35, 0x35, 0x32, 0x00, 0x39, 0x39, 0x42, 0x43, 0x42, + 0x3f, 0x3b, 0x39, 0x00, 0x31, 0x31, 0x38, 0x39, 0x3f, 0x3f, 0x40, 0x3b, + 0x00, 0x6e, 0xd0, 0xcf, 0xd4, 0xd3, 0xd5, 0xd3, 0xd5, 0x00, 0xd5, 0xdd, + 0xdf, 0xdf, 0xd0, 0xc3, 0xc2, 0xbc, 0x00, 0xb9, 0xb8, 0xb9, 0xb9, 0xb6, + 0xb8, 0xb6, 0xb5, 0x00, 0xb3, 0xb3, 0xb1, 0xad, 0xab, 0xac, 0xa4, 0xa1, + 0x00, 0x9a, 0x98, 0x94, 0x8c, 0x88, 0x7e, 0x77, 0x8f, 0x00, 0x99, 0x92, + 0x64, 0x8e, 0x84, 0x84, 0x1d, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x00, 0x15, 0x0e, 0x00, 0x1c, 0x1d, 0x1d, 0x1e, 0x1f, 0x20, 0x1e, 0x1b, + 0x80, 0xcb, 0x21, 0x22, 0x24, 0x2d, 0x33, 0x37, 0x31, 0x00, 0x35, 0x43, + 0x46, 0x50, 0x40, 0x1e, 0x26, 0x2c, 0x00, 0x2c, 0x28, 0x25, 0x27, 0x23, + 0x24, 0x24, 0x26, 0x00, 0x3b, 0x3f, 0x35, 0x32, 0x35, 0x35, 0x3b, 0x38, + 0x08, 0x35, 0x40, 0x39, 0x39, 0xd1, 0x35, 0x3b, 0x3b, 0x00, 0x3b, 0x39, + 0x73, 0xcd, 0xcf, 0xd4, 0xd0, 0xd7, 0x00, 0xd5, 0xd7, 0xd0, 0xd3, 0xd8, + 0xdd, 0xdc, 0xc9, 0x00, 0xc1, 0xc0, 0xbe, 0xb9, 0xb9, 0xbc, 0xb6, 0xb6, + 0x00, 0xb6, 0xb5, 0xb5, 0xb5, 0xaf, 0xb3, 0xab, 0xaa, 0x00, 0xa4, 0xa4, + 0xa1, 0x99, 0x94, 0x92, 0x8c, 0x84, 0x00, 0x7f, 0x77, 0x7c, 0x84, 0x94, + 0x85, 0x82, 0x84, 0x07, 0x84, 0x4a, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x00, 0x00, 0x17, 0x10, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f, 0x00, 0x21, 0x20, + 0x1e, 0x24, 0x1e, 0x1f, 0x20, 0x21, 0x00, 0x22, 0x23, 0x28, 0x2f, 0x35, + 0x32, 0x32, 0x39, 0x00, 0x43, 0x47, 0x4c, 0x54, 0x53, 0x21, 0x22, 0x24, + 0x08, 0x26, 0x24, 0x23, 0x22, 0x59, 0x2c, 0x3f, 0x35, 0x00, 0x35, 0x33, + 0x39, 0x3b, 0x35, 0x38, 0x3b, 0x35, 0x00, 0x35, 0x35, 0x39, 0x42, 0x3f, + 0x3d, 0x3f, 0x39, 0x00, 0x92, 0xd1, 0xcd, 0xd0, 0xd0, 0xd8, 0xd9, 0xd9, + 0x00, 0xd7, 0xd0, 0xd4, 0xd3, 0xd6, 0xd5, 0xcc, 0xca, 0x00, 0xc2, 0xbe, + 0xbc, 0xbc, 0xb9, 0xb6, 0xb5, 0xb5, 0x00, 0xb3, 0xb3, 0xad, 0xac, 0xaa, + 0xa5, 0xa7, 0xa4, 0x00, 0xa1, 0x9a, 0x99, 0x96, 0x92, 0x8d, 0x84, 0x7f, + 0x00, 0x76, 0x6e, 0x64, 0x8c, 0x89, 0x71, 0x6e, 0x82, 0x0e, 0x50, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x1a, 0x11, 0x1e, 0x1e, 0x1e, + 0x20, 0x21, 0x22, 0x00, 0x24, 0x27, 0x2c, 0x23, 0x1f, 0x21, 0x22, 0x23, + 0x00, 0x26, 0x2c, 0x30, 0x35, 0x35, 0x38, 0x3f, 0x44, 0x00, 0x49, 0x4a, + 0x50, 0x56, 0x5a, 0x30, 0x20, 0x23, 0x00, 0x22, 0x23, 0x23, 0x22, 0x24, + 0x26, 0x35, 0x39, 0x00, 0x35, 0x35, 0x35, 0x3f, 0x3b, 0x3f, 0x39, 0x40, + 0x80, 0xc1, 0x40, 0x43, 0x40, 0x3b, 0x54, 0xb2, 0xcd, 0x00, 0xcf, 0xd0, + 0xd3, 0xd8, 0xd5, 0xd8, 0xd9, 0xd3, 0x00, 0xd4, 0xd0, 0xd0, 0xd0, 0xd4, + 0xd0, 0xcd, 0xc4, 0x00, 0xc0, 0xbe, 0xbc, 0xbc, 0xb9, 0xb5, 0xb3, 0xb2, + 0x00, 0xab, 0xab, 0xa5, 0xa4, 0xa1, 0xa0, 0x9a, 0x9d, 0x00, 0x99, 0x94, + 0x94, 0x8f, 0x88, 0x82, 0x7f, 0x77, 0x00, 0x6b, 0x6e, 0x8c, 0x85, 0x7b, + 0x79, 0x7f, 0x56, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x1a, + 0x00, 0x12, 0x1e, 0x1e, 0x1f, 0x21, 0x22, 0x24, 0x26, 0x00, 0x28, 0x2f, + 0x35, 0x31, 0x22, 0x23, 0x26, 0x2c, 0x00, 0x2f, 0x31, 0x39, 0x39, 0x38, + 0x40, 0x44, 0x47, 0x00, 0x4c, 0x54, 0x59, 0x5a, 0x5e, 0x56, 0x26, 0x21, + 0x00, 0x22, 0x22, 0x22, 0x26, 0x30, 0x39, 0x39, 0x35, 0x01, 0x39, 0x39, + 0x39, 0x3f, 0x3f, 0x3b, 0x40, 0xb9, 0x00, 0x42, 0x42, 0x47, 0x8f, 0xc9, + 0xc8, 0xc9, 0xcd, 0x00, 0xd1, 0xd5, 0xd3, 0xd9, 0xd8, 0xd8, 0xd9, 0xd4, + 0x00, 0xcf, 0xd0, 0xcd, 0xcd, 0xcf, 0xcb, 0xc9, 0xc4, 0x00, 0xbe, 0xbf, + 0xbc, 0xb8, 0xb5, 0xb3, 0xb5, 0xaf, 0x00, 0xab, 0xa4, 0xa1, 0x9d, 0x9a, + 0x9a, 0x99, 0x99, 0x00, 0x94, 0x90, 0x88, 0x85, 0x7f, 0x7b, 0x71, 0x6b, + 0x00, 0x7f, 0x88, 0x83, 0x7f, 0x79, 0x79, 0x5a, 0x00, 0x38, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x00, 0x1b, 0x13, 0x00, 0x1f, 0x1f, 0x21, 0x22, 0x23, + 0x26, 0x28, 0x2f, 0x00, 0x30, 0x33, 0x39, 0x3b, 0x24, 0x28, 0x2c, 0x30, + 0x00, 0x35, 0x39, 0x40, 0x3f, 0x40, 0x44, 0x50, 0x50, 0x00, 0x56, 0x5c, + 0x5c, 0x5e, 0x5e, 0x61, 0x58, 0x30, 0x00, 0x22, 0x22, 0x24, 0x30, 0x32, + 0x36, 0x38, 0x39, 0x00, 0x38, 0x38, 0x42, 0x43, 0x40, 0x3b, 0x42, 0x46, + 0x00, 0x3b, 0x57, 0x8f, 0xcd, 0xd4, 0xcc, 0xcc, 0xc9, 0x00, 0xc9, 0xd4, + 0xd5, 0xd9, 0xd8, 0xd5, 0xd9, 0xd6, 0x00, 0xd5, 0xcd, 0xcd, 0xcd, 0xca, + 0xcb, 0xc9, 0xcb, 0x00, 0xc5, 0xc2, 0xc0, 0xbc, 0xb9, 0xb5, 0xb3, 0xaf, + 0x00, 0xac, 0xa7, 0xa1, 0x9d, 0x9a, 0x99, 0x99, 0x99, 0x00, 0x96, 0x93, + 0x8f, 0x88, 0x84, 0x7e, 0x77, 0x71, 0x00, 0x68, 0x82, 0x84, 0x7b, 0x7b, + 0x77, 0x77, 0x56, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x1b, + 0x00, 0x15, 0x21, 0x20, 0x22, 0x23, 0x26, 0x28, 0x2c, 0x00, 0x2f, 0x32, + 0x39, 0x3b, 0x47, 0x32, 0x2c, 0x30, 0x00, 0x35, 0x39, 0x3b, 0x46, 0x47, + 0x47, 0x4d, 0x53, 0x00, 0x56, 0x59, 0x5c, 0x5e, 0x5e, 0x63, 0x65, 0x65, + 0x00, 0x68, 0x65, 0x56, 0x3f, 0x30, 0x2a, 0x2c, 0x2f, 0x00, 0x2e, 0x2c, + 0x30, 0x31, 0x31, 0x33, 0x39, 0x5a, 0x00, 0x79, 0xb1, 0xd0, 0xd4, 0xcf, + 0xcf, 0xcb, 0xcb, 0x00, 0xc5, 0xcb, 0xd0, 0xd9, 0xdd, 0xdb, 0xd9, 0xd8, + 0x00, 0xd5, 0xd0, 0xd0, 0xcf, 0xd0, 0xcd, 0xca, 0xd0, 0x00, 0xc8, 0xc2, + 0xc1, 0xbe, 0xbc, 0xb9, 0xb5, 0xb3, 0x00, 0xaf, 0xaa, 0xa5, 0x9d, 0x9a, + 0x99, 0x98, 0x96, 0x00, 0x97, 0x94, 0x8c, 0x85, 0x84, 0x81, 0x7b, 0x73, + 0x00, 0x6e, 0x68, 0x77, 0x82, 0x82, 0x79, 0x73, 0x73, 0x0e, 0x47, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x00, 0x1b, 0x15, 0x22, 0x22, 0x23, + 0x24, 0x28, 0x2c, 0x00, 0x30, 0x32, 0x35, 0x3b, 0x40, 0x47, 0x4d, 0x30, + 0x00, 0x33, 0x3b, 0x47, 0x44, 0x4a, 0x4d, 0x4a, 0x4d, 0x00, 0x54, 0x56, + 0x58, 0x5c, 0x5d, 0x5e, 0x64, 0x68, 0x00, 0x68, 0x71, 0x73, 0x84, 0x94, + 0x8c, 0x79, 0x6b, 0x00, 0x65, 0x63, 0x65, 0x6e, 0x79, 0x8a, 0xa7, 0xc0, + 0x00, 0xc3, 0xc2, 0xc3, 0xc0, 0xc2, 0xc1, 0xc0, 0xc0, 0x00, 0xc3, 0xc9, + 0xcd, 0xd3, 0xdc, 0xdd, 0xdb, 0xdb, 0x00, 0xd7, 0xd5, 0xd0, 0xce, 0xd5, + 0xd0, 0xcf, 0xcd, 0x00, 0xcd, 0xc5, 0xc5, 0xc7, 0xc2, 0xc0, 0xbc, 0xb5, + 0x00, 0xb3, 0xac, 0xa5, 0xa1, 0x9a, 0x9a, 0x97, 0x94, 0x00, 0x92, 0x94, + 0x92, 0x8c, 0x84, 0x82, 0x7b, 0x79, 0x00, 0x71, 0x6b, 0x64, 0x7b, 0x82, + 0x7b, 0x73, 0x6e, 0x07, 0x71, 0x39, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x00, 0x00, 0x1b, 0x15, 0x23, 0x23, 0x24, 0x28, 0x2c, 0x00, 0x30, 0x32, + 0x35, 0x39, 0x40, 0x44, 0x4c, 0x54, 0x00, 0x58, 0x57, 0x58, 0x50, 0x4d, + 0x4c, 0x53, 0x4f, 0x00, 0x53, 0x56, 0x56, 0x58, 0x5d, 0x60, 0x62, 0x65, + 0x00, 0x68, 0x65, 0x6e, 0x7b, 0x8f, 0x94, 0x8a, 0x85, 0x00, 0x89, 0x8f, + 0x91, 0x99, 0xa5, 0xa9, 0xac, 0xb1, 0x00, 0xb5, 0xb5, 0xb6, 0xbc, 0xbe, + 0xc0, 0xc2, 0xc4, 0x00, 0xc6, 0xcb, 0xcd, 0xd5, 0xd9, 0xdc, 0xdd, 0xdc, + 0x00, 0xdb, 0xd6, 0xd5, 0xd4, 0xd5, 0xd5, 0xd4, 0xcd, 0x00, 0xc9, 0xc5, + 0xc4, 0xc5, 0xc5, 0xc2, 0xbb, 0xb6, 0x00, 0xb5, 0xb2, 0xab, 0xa1, 0x9d, + 0x9a, 0x99, 0x94, 0x00, 0x92, 0x8f, 0x8f, 0x8c, 0x84, 0x82, 0x7b, 0x79, + 0x00, 0x77, 0x71, 0x68, 0x64, 0x7b, 0x7e, 0x79, 0x73, 0x03, 0x6b, 0x68, + 0x30, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x80, 0xa7, 0x00, 0x0d, 0x15, 0x23, + 0x24, 0x28, 0x2c, 0x00, 0x2f, 0x30, 0x35, 0x3b, 0x39, 0x44, 0x4a, 0x50, + 0x00, 0x56, 0x56, 0x5e, 0x4a, 0x4f, 0x57, 0x4f, 0x54, 0x00, 0x56, 0x54, + 0x54, 0x58, 0x5c, 0x5d, 0x5e, 0x61, 0x00, 0x65, 0x68, 0x68, 0x6b, 0x74, + 0x7f, 0x92, 0x94, 0x00, 0x8f, 0x88, 0x8f, 0x91, 0x9a, 0xa5, 0xac, 0xaf, + 0x00, 0xb1, 0xb5, 0xb4, 0xb9, 0xbe, 0xbf, 0xc2, 0xc2, 0x00, 0xc5, 0xcb, + 0xcd, 0xcd, 0xd3, 0xd5, 0xd9, 0xd9, 0x00, 0xdb, 0xd8, 0xd8, 0xd8, 0xd5, + 0xd4, 0xd7, 0xd3, 0x00, 0xcb, 0xc4, 0xc0, 0xc1, 0xbe, 0xc0, 0xb9, 0xb6, + 0x00, 0xb5, 0xb3, 0xab, 0xa4, 0x9d, 0x9a, 0x97, 0x94, 0x00, 0x92, 0x8e, + 0x86, 0x84, 0x84, 0x81, 0x7b, 0x79, 0x00, 0x73, 0x72, 0x6e, 0x68, 0x63, + 0x6b, 0x79, 0x77, 0x01, 0x71, 0x68, 0x68, 0x06, 0x00, 0x00, 0x00, 0xe9, + 0xc0, 0xd4, 0xa7, 0x00, 0x05, 0x15, 0x24, 0x26, 0x28, 0x00, 0x2f, 0x32, + 0x35, 0x3b, 0x30, 0x26, 0x26, 0x39, 0x00, 0x30, 0x1d, 0x1c, 0x1e, 0x32, + 0x56, 0x54, 0x54, 0x00, 0x56, 0x57, 0x56, 0x58, 0x5c, 0x5d, 0x5e, 0x5e, + 0x00, 0x61, 0x65, 0x67, 0x6b, 0x6b, 0x73, 0x82, 0x98, 0x00, 0xa4, 0xa5, + 0xa4, 0x9d, 0x99, 0x9e, 0xa8, 0xad, 0x00, 0xb2, 0xb3, 0xb4, 0xb6, 0xb9, + 0xb9, 0xbe, 0xbe, 0x00, 0xc0, 0xc3, 0xc8, 0xcb, 0xcf, 0xcf, 0xd7, 0xd9, + 0x00, 0xdb, 0xdb, 0xd8, 0xd8, 0xd7, 0xd8, 0xd5, 0xd8, 0x00, 0xd0, 0xcd, + 0xc5, 0xc0, 0xba, 0xb9, 0xb6, 0xb6, 0x00, 0xb5, 0xb3, 0xaf, 0xab, 0xa5, + 0x9a, 0x99, 0x96, 0x00, 0x92, 0x8f, 0x88, 0x84, 0x82, 0x7f, 0x7b, 0x77, + 0x00, 0x77, 0x71, 0x71, 0x6e, 0x65, 0x63, 0x79, 0x77, 0x00, 0x71, 0x6b, + 0x67, 0x64, 0x07, 0x00, 0x00, 0x00, 0xe0, 0xe9, 0xd4, 0xa7, 0x00, 0x06, + 0x18, 0x26, 0x28, 0x00, 0x2f, 0x30, 0x32, 0x39, 0x26, 0x22, 0x24, 0x28, + 0x00, 0x1b, 0x12, 0x1c, 0x1d, 0x1f, 0x1f, 0x22, 0x5c, 0x00, 0x58, 0x56, + 0x56, 0x56, 0x5a, 0x5d, 0x5e, 0x61, 0x00, 0x63, 0x63, 0x65, 0x68, 0x6b, + 0x6c, 0x77, 0x89, 0x00, 0xa7, 0xac, 0xb3, 0xb1, 0xad, 0xa4, 0xa1, 0xa5, + 0x00, 0xab, 0xaf, 0xb5, 0xb6, 0xb9, 0xbe, 0xbf, 0xbc, 0x00, 0xc0, 0xbe, + 0xc3, 0xc9, 0xcb, 0xcd, 0xcd, 0xd6, 0x00, 0xdc, 0xd9, 0xd8, 0xdb, 0xdb, + 0xd7, 0xd5, 0xd0, 0x00, 0xd4, 0xd0, 0xcc, 0xc7, 0xbc, 0xb9, 0xb6, 0xb5, + 0x00, 0xb5, 0xb2, 0xb0, 0xaf, 0xa7, 0xa1, 0x9c, 0x97, 0x00, 0x96, 0x8f, + 0x8c, 0x84, 0x84, 0x7f, 0x79, 0x77, 0x00, 0x77, 0x71, 0x6e, 0x6b, 0x68, + 0x64, 0x60, 0x71, 0x00, 0x71, 0x6e, 0x68, 0x64, 0x5c, 0x07, 0x00, 0x00, + 0x70, 0x00, 0xe9, 0xd4, 0xa7, 0x00, 0x05, 0x1b, 0x22, 0x00, 0x2f, 0x30, + 0x35, 0x39, 0x39, 0x22, 0x24, 0x28, 0x00, 0x21, 0x0f, 0x15, 0x1f, 0x26, + 0x30, 0x30, 0x2c, 0x00, 0x26, 0x63, 0x5c, 0x58, 0x59, 0x5b, 0x5c, 0x5e, + 0x00, 0x60, 0x64, 0x65, 0x68, 0x68, 0x73, 0x8f, 0xa1, 0x00, 0x97, 0xb1, + 0xb1, 0xb5, 0xb5, 0xb5, 0xb5, 0xb3, 0x00, 0xb5, 0xb6, 0xb5, 0xb6, 0xb5, + 0xb8, 0xbf, 0xc0, 0x00, 0xc2, 0xc2, 0xc4, 0xc4, 0xc5, 0xcc, 0xcd, 0xd0, + 0x00, 0xd5, 0xdb, 0xd7, 0xd5, 0xd6, 0xd3, 0xcd, 0xcd, 0x00, 0xca, 0xcd, + 0xc5, 0xc2, 0xbd, 0xbc, 0xb7, 0xb5, 0x00, 0xb3, 0xb0, 0xaf, 0xac, 0xab, + 0xa7, 0xa1, 0x9c, 0x00, 0x9a, 0x91, 0x8f, 0x8b, 0x84, 0x82, 0x7b, 0x77, + 0x00, 0x71, 0x73, 0x6e, 0x6b, 0x6b, 0x65, 0x64, 0x60, 0x00, 0x6c, 0x71, + 0x68, 0x67, 0x63, 0x56, 0x04, 0x00, 0x38, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x00, 0x00, 0x22, 0x00, 0x22, 0x30, 0x32, 0x39, 0x3b, 0x47, 0x24, 0x26, + 0x00, 0x2c, 0x18, 0x13, 0x1c, 0x26, 0x3b, 0x4a, 0x4c, 0x00, 0x44, 0x35, + 0x44, 0x64, 0x5a, 0x5a, 0x5c, 0x5e, 0x00, 0x5e, 0x63, 0x64, 0x67, 0x68, + 0x6a, 0x6d, 0x83, 0x00, 0x9a, 0xad, 0xa5, 0x99, 0x9d, 0xaf, 0xb6, 0xb8, + 0x00, 0xb6, 0xbc, 0xc0, 0xc3, 0xc7, 0xc9, 0xbe, 0xbe, 0x00, 0xc8, 0xc8, + 0xcc, 0xcc, 0xcd, 0xcb, 0xcb, 0xcd, 0x00, 0xd0, 0xd5, 0xd0, 0xd0, 0xcd, + 0xcf, 0xcd, 0xcc, 0x00, 0xc9, 0xc7, 0xc1, 0xc0, 0xbf, 0xb9, 0xb6, 0xb6, + 0x00, 0xb3, 0xb1, 0xac, 0xac, 0xaa, 0xa7, 0xa4, 0x9e, 0x00, 0x9c, 0x97, + 0x8f, 0x8c, 0x85, 0x82, 0x7f, 0x77, 0x00, 0x71, 0x71, 0x6e, 0x6b, 0x6b, + 0x65, 0x64, 0x60, 0x00, 0x5e, 0x5c, 0x68, 0x68, 0x63, 0x63, 0x54, 0x00, + 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x59, 0x24, 0x1f, 0x00, 0x35, 0x39, + 0x3b, 0x3b, 0x32, 0x28, 0x2c, 0x2f, 0x00, 0x11, 0x1a, 0x21, 0x33, 0x4d, + 0x54, 0x54, 0x50, 0x00, 0x4d, 0x35, 0x6c, 0x5e, 0x5c, 0x5d, 0x5e, 0x62, + 0x00, 0x7f, 0x68, 0x65, 0x6b, 0x6b, 0x6e, 0x76, 0x77, 0x00, 0x7b, 0x7f, + 0x82, 0x85, 0x89, 0x8f, 0x96, 0xb5, 0x00, 0xbe, 0xc1, 0xc3, 0xcc, 0xcf, + 0xd4, 0xd9, 0xd9, 0x00, 0xd9, 0xdb, 0xd9, 0xd9, 0xcf, 0xcc, 0xca, 0xcc, + 0x00, 0xcf, 0xcc, 0xcb, 0xc9, 0xcb, 0xc8, 0xc8, 0xc4, 0x00, 0xc1, 0xbe, + 0xbc, 0xb9, 0xb5, 0xb6, 0xb5, 0xb1, 0x00, 0xac, 0xad, 0xac, 0xa8, 0xa2, + 0xa1, 0x9d, 0x9a, 0x00, 0x97, 0x8e, 0x89, 0x84, 0x7b, 0x77, 0x73, 0x71, + 0x00, 0x71, 0x6b, 0x6b, 0x68, 0x64, 0x63, 0x5e, 0x5c, 0x00, 0x5a, 0x54, + 0x64, 0x63, 0x60, 0x44, 0x00, 0x00, 0x78, 0x00, 0xe9, 0xd4, 0xa7, 0x59, + 0x12, 0x1e, 0x3b, 0x00, 0x3b, 0x40, 0x39, 0x24, 0x2c, 0x2f, 0x2c, 0x12, + 0x00, 0x1d, 0x26, 0x35, 0x50, 0x50, 0x54, 0x50, 0x50, 0x00, 0x4a, 0x5c, + 0x65, 0x5d, 0x60, 0x64, 0x7b, 0x92, 0x00, 0x93, 0x68, 0x6b, 0x71, 0x72, + 0x77, 0x79, 0x79, 0x00, 0x82, 0x84, 0x8e, 0x92, 0x8c, 0x8c, 0x8f, 0xb5, + 0x00, 0xa1, 0xc1, 0xcf, 0xd0, 0xd8, 0xd9, 0xdc, 0xdb, 0x00, 0xdc, 0xdc, + 0xdc, 0xd0, 0xc5, 0xc1, 0xc2, 0xc2, 0x00, 0xc2, 0xc5, 0xc7, 0xc7, 0xc4, + 0xc9, 0xc0, 0xbc, 0x00, 0xb9, 0xb6, 0xb6, 0xb5, 0xb3, 0xb2, 0xaf, 0xab, + 0x00, 0xaa, 0xaa, 0xa1, 0xa3, 0x9d, 0x9c, 0x9a, 0x92, 0x00, 0x8d, 0x84, + 0x80, 0x7b, 0x73, 0x71, 0x6e, 0x6b, 0x00, 0x68, 0x68, 0x65, 0x63, 0x61, + 0x5e, 0x5a, 0x56, 0x00, 0x5d, 0x63, 0x5e, 0x5e, 0x17, 0x00, 0x00, 0x00, + 0xf0, 0xe9, 0xd4, 0xa7, 0x59, 0x07, 0x1d, 0x3e, 0x40, 0x00, 0x46, 0x4a, + 0x2c, 0x2c, 0x2f, 0x2f, 0x15, 0x1e, 0x00, 0x2c, 0x35, 0x4a, 0x50, 0x50, + 0x53, 0x53, 0x4d, 0x00, 0x53, 0x6b, 0x60, 0x63, 0x68, 0x82, 0x97, 0x99, + 0x00, 0x71, 0x71, 0x71, 0x74, 0x77, 0x7b, 0x7c, 0x81, 0x00, 0x85, 0x8e, + 0x8f, 0x92, 0x92, 0x8f, 0x93, 0xaa, 0x00, 0xbe, 0xcf, 0xd6, 0xd9, 0xd5, + 0xdc, 0xdb, 0xde, 0x00, 0xdd, 0xdb, 0xd0, 0xc2, 0xbe, 0xbf, 0xc2, 0xc0, + 0x00, 0xc2, 0xc2, 0xc4, 0xc2, 0xbe, 0xba, 0xb9, 0xb9, 0x00, 0xb5, 0xb5, + 0xb3, 0xb2, 0xaf, 0xac, 0xaa, 0xa5, 0x00, 0xa5, 0xa1, 0x9d, 0x9a, 0x9c, + 0x97, 0x92, 0x89, 0x00, 0x83, 0x7f, 0x79, 0x77, 0x6e, 0x6e, 0x6a, 0x68, + 0x00, 0x65, 0x65, 0x63, 0x60, 0x5c, 0x58, 0x54, 0x65, 0x01, 0x5d, 0x5d, + 0x5a, 0x06, 0x00, 0x00, 0x00, 0xe9, 0xe0, 0xd4, 0xa7, 0x59, 0x02, 0x21, + 0x32, 0x44, 0x47, 0x00, 0x4d, 0x40, 0x2c, 0x30, 0x39, 0x1a, 0x1f, 0x2f, + 0x00, 0x39, 0x4a, 0x50, 0x50, 0x53, 0x50, 0x4d, 0x57, 0x00, 0x6e, 0x64, + 0x64, 0x73, 0x85, 0x97, 0x9d, 0x7e, 0x00, 0x72, 0x73, 0x73, 0x78, 0x79, + 0x7d, 0x82, 0x82, 0x00, 0x8c, 0x8f, 0x92, 0x96, 0x96, 0x92, 0xaa, 0x92, + 0x00, 0x9a, 0xb3, 0xd5, 0xd0, 0xd7, 0xdd, 0xde, 0xdd, 0x00, 0xd9, 0xc0, + 0xb5, 0xbc, 0xbe, 0xc0, 0xc2, 0xc1, 0x00, 0xc0, 0xbe, 0xbc, 0xb9, 0xbc, + 0xb9, 0xb6, 0xb5, 0x00, 0xb3, 0xb3, 0xb2, 0xad, 0xac, 0xa5, 0xa4, 0xa3, + 0x00, 0xa1, 0x9c, 0x9a, 0x99, 0x92, 0x8f, 0x8b, 0x84, 0x00, 0x81, 0x79, + 0x71, 0x6e, 0x6b, 0x68, 0x65, 0x63, 0x00, 0x63, 0x60, 0x5e, 0x5c, 0x58, + 0x50, 0x47, 0x5c, 0x03, 0x5a, 0x50, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xc0, 0xa7, 0x5a, 0x31, 0x2f, 0x4a, 0x4d, 0x4f, 0x56, 0x00, 0x30, 0x35, + 0x39, 0x20, 0x1f, 0x2c, 0x35, 0x4d, 0x00, 0x50, 0x50, 0x51, 0x51, 0x50, + 0x5d, 0x7b, 0x6e, 0x00, 0x65, 0x79, 0x8f, 0x9c, 0x9d, 0x78, 0x71, 0x71, + 0x00, 0x73, 0x7b, 0x7b, 0x7f, 0x82, 0x84, 0x88, 0x8b, 0x00, 0x90, 0x96, + 0x97, 0x92, 0x91, 0x94, 0x94, 0xc5, 0x00, 0xd5, 0xd8, 0xd9, 0xdd, 0xde, + 0xdf, 0xde, 0xde, 0x00, 0xcd, 0xb6, 0xbc, 0xc3, 0xc1, 0xc0, 0xc1, 0xb9, + 0x00, 0xb9, 0xb9, 0xb6, 0xb6, 0xb6, 0xb5, 0xb3, 0xb2, 0x00, 0xac, 0xab, + 0xaa, 0xa5, 0xa4, 0xa1, 0x9c, 0x9a, 0x00, 0x99, 0x96, 0x92, 0x8f, 0x88, + 0x84, 0x7b, 0x77, 0x00, 0x71, 0x6e, 0x6b, 0x65, 0x64, 0x63, 0x5e, 0x5d, + 0x00, 0x5d, 0x5a, 0x54, 0x4d, 0x4a, 0x5d, 0x5c, 0x44, 0x1e, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xa7, 0x5b, 0x17, 0x00, 0x23, 0x53, 0x50, 0x51, 0x56, + 0x54, 0x35, 0x3b, 0x00, 0x2f, 0x1e, 0x28, 0x35, 0x54, 0x4d, 0x50, 0x4f, + 0x00, 0x4d, 0x54, 0x65, 0x85, 0x7f, 0x6b, 0x7b, 0x91, 0x00, 0x9e, 0xa1, + 0x8b, 0x71, 0x74, 0x77, 0x79, 0x7f, 0x00, 0x81, 0x84, 0x84, 0x88, 0x8b, + 0x8f, 0x92, 0x98, 0x00, 0x96, 0x94, 0x96, 0x9a, 0xdc, 0xd0, 0xd9, 0xd8, + 0x00, 0xdc, 0xde, 0xdf, 0xdf, 0xde, 0xdf, 0xdd, 0xc9, 0x00, 0xb9, 0xbc, + 0xbe, 0xbe, 0xb6, 0xb6, 0xb6, 0xb8, 0x00, 0xb5, 0xb5, 0xb3, 0xb1, 0xad, + 0xad, 0xaa, 0xa4, 0x00, 0xa1, 0xa0, 0x9d, 0x9c, 0x9a, 0x97, 0x93, 0x8f, + 0x00, 0x8c, 0x88, 0x82, 0x7b, 0x76, 0x71, 0x6d, 0x68, 0x00, 0x65, 0x64, + 0x61, 0x5e, 0x5c, 0x5a, 0x58, 0x50, 0x00, 0x47, 0x54, 0x5c, 0x5a, 0x12, + 0x00, 0x00, 0x00, 0xf0, 0xe9, 0xd4, 0xa7, 0x5b, 0x09, 0x21, 0x50, 0x54, + 0x00, 0x56, 0x59, 0x5c, 0x58, 0x40, 0x40, 0x24, 0x24, 0x00, 0x47, 0x4d, + 0x50, 0x4d, 0x4e, 0x53, 0x54, 0x7f, 0x00, 0x8c, 0x8c, 0x7e, 0x82, 0x97, + 0x9e, 0xa4, 0xad, 0x00, 0x82, 0x77, 0x79, 0x7b, 0x7f, 0x82, 0x83, 0x85, + 0x00, 0x88, 0x92, 0x8f, 0x92, 0x97, 0x94, 0x97, 0x94, 0x00, 0x96, 0xcc, + 0xd5, 0xd7, 0xd8, 0xde, 0xde, 0xdf, 0x20, 0xde, 0xdf, 0xe9, 0xdb, 0xb9, + 0xbc, 0xbc, 0xb9, 0x00, 0xb6, 0xb6, 0xb5, 0xb5, 0xb3, 0xb2, 0xaf, 0xad, + 0x00, 0xaa, 0xa7, 0xa1, 0x9d, 0x9d, 0x9a, 0x99, 0x96, 0x00, 0x93, 0x92, + 0x8c, 0x88, 0x84, 0x7f, 0x79, 0x72, 0x00, 0x6e, 0x6d, 0x65, 0x64, 0x61, + 0x5e, 0x5c, 0x5a, 0x00, 0x57, 0x54, 0x4a, 0x44, 0x40, 0x58, 0x50, 0x05, + 0x1e, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5c, 0x3b, 0x00, 0x3b, 0x58, + 0x58, 0x5b, 0x5d, 0x5e, 0x63, 0x5d, 0x00, 0x5d, 0x38, 0x3e, 0x4d, 0x4e, + 0x50, 0x50, 0x53, 0x00, 0x65, 0x8f, 0x8c, 0x92, 0x92, 0x8f, 0x9a, 0x9d, + 0x00, 0xa5, 0xad, 0x88, 0x7b, 0x7f, 0x7f, 0x7f, 0x82, 0x00, 0x85, 0x88, + 0x8f, 0x91, 0x92, 0x91, 0x94, 0x96, 0x00, 0x96, 0x96, 0x94, 0xc1, 0xcf, + 0xd5, 0xdd, 0xde, 0x04, 0xdd, 0xde, 0xde, 0xdf, 0xde, 0xe1, 0xc1, 0xb6, + 0x00, 0xb8, 0xb6, 0xb6, 0xb5, 0xb5, 0xb3, 0xb3, 0xad, 0x00, 0xac, 0xab, + 0xa4, 0xa4, 0xa0, 0x9a, 0x9a, 0x99, 0x00, 0x97, 0x8f, 0x8f, 0x8f, 0x8b, + 0x88, 0x7f, 0x7b, 0x00, 0x77, 0x71, 0x6d, 0x6b, 0x64, 0x63, 0x5d, 0x5c, + 0x00, 0x5a, 0x56, 0x51, 0x4c, 0x47, 0x3b, 0x44, 0x58, 0x0f, 0x40, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5d, 0x00, 0x32, 0x2b, 0x5c, 0x5c, 0x5d, + 0x5e, 0x60, 0x64, 0x00, 0x65, 0x68, 0x6b, 0x54, 0x44, 0x4a, 0x4a, 0x50, + 0x00, 0x63, 0x8c, 0x8c, 0x92, 0x94, 0x97, 0x98, 0x9d, 0x00, 0xa0, 0xa7, + 0x96, 0x73, 0x7b, 0x7e, 0x7f, 0x82, 0x00, 0x89, 0x88, 0x8e, 0x8e, 0x92, + 0x92, 0x92, 0x94, 0x00, 0x96, 0x97, 0x97, 0xb5, 0xd3, 0xcf, 0xd5, 0xdd, + 0x01, 0xde, 0xde, 0xdd, 0xde, 0xdf, 0xde, 0xde, 0xe1, 0x00, 0xb6, 0xb5, + 0xb5, 0xb3, 0xb5, 0xb5, 0xaf, 0xaf, 0x00, 0xac, 0xac, 0xa4, 0xa0, 0xa1, + 0x9a, 0x9a, 0x9a, 0x00, 0x98, 0x92, 0x8f, 0x8f, 0x8b, 0x85, 0x82, 0x7f, + 0x00, 0x79, 0x74, 0x73, 0x6e, 0x64, 0x63, 0x5e, 0x5d, 0x00, 0x5a, 0x57, + 0x54, 0x4d, 0x50, 0x3b, 0x50, 0x56, 0x07, 0x56, 0x12, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0x80, 0x5d, 0x08, 0x26, 0x58, 0x5d, 0x60, 0x63, 0x64, + 0x00, 0x64, 0x65, 0x68, 0x6e, 0x73, 0x71, 0x68, 0x6b, 0x00, 0x7b, 0x88, + 0x88, 0x8c, 0x93, 0x94, 0x99, 0x9a, 0x00, 0xa1, 0xa1, 0xa5, 0xac, 0xab, + 0x81, 0x7f, 0x85, 0x00, 0x89, 0x91, 0x89, 0x8c, 0x8f, 0x92, 0x94, 0x96, + 0x00, 0x95, 0x94, 0x96, 0x97, 0x9a, 0xd5, 0xd7, 0xd8, 0x00, 0xdc, 0xdd, + 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xdd, 0x00, 0xdf, 0xd9, 0xc5, 0xb1, 0xaf, + 0xb2, 0xaf, 0xb2, 0x00, 0xaf, 0xad, 0xac, 0xa7, 0xa5, 0xa1, 0x9c, 0x9a, + 0x00, 0x98, 0x99, 0x99, 0x93, 0x8f, 0x8c, 0x88, 0x88, 0x00, 0x88, 0x7f, + 0x7b, 0x77, 0x72, 0x6e, 0x68, 0x63, 0x00, 0x5e, 0x5d, 0x5c, 0x58, 0x54, + 0x50, 0x47, 0x58, 0x00, 0x50, 0x56, 0x50, 0x4a, 0x02, 0x00, 0x00, 0x00, + 0xf0, 0xe9, 0xd4, 0xa7, 0x5e, 0x4d, 0x44, 0x60, 0x63, 0x00, 0x64, 0x64, + 0x65, 0x68, 0x6a, 0x6b, 0x6e, 0x73, 0x00, 0x77, 0x7b, 0x7f, 0x84, 0x88, + 0x8c, 0x93, 0x94, 0x00, 0x99, 0x9a, 0xa1, 0xa4, 0xa7, 0xac, 0xaf, 0x7f, + 0x00, 0x82, 0x88, 0x8e, 0x92, 0x8f, 0x8d, 0x92, 0x92, 0x00, 0x94, 0x97, + 0x94, 0x96, 0x94, 0x94, 0x99, 0xd9, 0x00, 0xd5, 0xd5, 0xd9, 0xdd, 0xdd, + 0xde, 0xde, 0xdf, 0x00, 0xde, 0xdd, 0xb6, 0xab, 0xaf, 0xad, 0xac, 0xab, + 0x00, 0xab, 0xac, 0xac, 0xac, 0xaa, 0xa3, 0xa3, 0x9a, 0x00, 0x9a, 0x98, + 0x97, 0x96, 0x94, 0x92, 0x8e, 0x89, 0x00, 0x88, 0x85, 0x81, 0x7b, 0x79, + 0x72, 0x6e, 0x65, 0x00, 0x64, 0x60, 0x5e, 0x5c, 0x58, 0x56, 0x50, 0x4d, + 0x00, 0x50, 0x56, 0x58, 0x53, 0x50, 0x32, 0x00, 0x00, 0x78, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x0a, 0x2c, 0x63, 0x00, 0x65, 0x64, 0x68, 0x68, 0x68, + 0x6b, 0x6a, 0x6d, 0x00, 0x71, 0x77, 0x79, 0x7b, 0x81, 0x84, 0x8c, 0x94, + 0x00, 0x94, 0x99, 0x9e, 0xa4, 0xa7, 0xab, 0xab, 0xac, 0x00, 0xad, 0x85, + 0x89, 0x8c, 0x92, 0x91, 0x8e, 0x8f, 0x00, 0x92, 0x94, 0x97, 0x96, 0x96, + 0x97, 0x97, 0x98, 0x00, 0xbe, 0xd1, 0xd5, 0xdc, 0xdd, 0xdc, 0xdd, 0xdd, + 0x00, 0xdd, 0xdf, 0xc2, 0xa5, 0xac, 0xab, 0xaa, 0xa5, 0x00, 0xa5, 0xa4, + 0xa4, 0xa4, 0xa1, 0xa1, 0x9a, 0x98, 0x00, 0x96, 0x96, 0x94, 0x94, 0x91, + 0x92, 0x8c, 0x88, 0x00, 0x88, 0x87, 0x83, 0x7f, 0x79, 0x72, 0x71, 0x6b, + 0x00, 0x64, 0x63, 0x5e, 0x5c, 0x58, 0x56, 0x54, 0x4d, 0x00, 0x47, 0x50, + 0x58, 0x4d, 0x50, 0x4a, 0x04, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0x5f, 0x00, 0x54, 0x00, 0x50, 0x6a, 0x6a, 0x68, 0x6b, 0x6a, 0x6a, 0x6b, + 0x00, 0x6b, 0x6e, 0x71, 0x73, 0x79, 0x7c, 0x82, 0x88, 0x00, 0x92, 0x98, + 0x99, 0x9d, 0xa5, 0xab, 0xac, 0xaf, 0x00, 0xaf, 0xad, 0x97, 0x8c, 0x92, + 0x92, 0x92, 0x8f, 0x00, 0x92, 0x94, 0x94, 0x97, 0x96, 0x95, 0x97, 0x99, + 0x00, 0xa5, 0xb3, 0xd5, 0xd0, 0xd5, 0xd8, 0xd7, 0xd9, 0x00, 0xdd, 0xdc, + 0xb3, 0x9d, 0xa4, 0xa7, 0xa8, 0xa4, 0x00, 0xa5, 0xa4, 0x9e, 0x9d, 0x9b, + 0x9a, 0x98, 0x97, 0x00, 0x94, 0x93, 0x92, 0x8f, 0x92, 0x8f, 0x8f, 0x88, + 0x00, 0x85, 0x82, 0x7f, 0x7b, 0x79, 0x73, 0x71, 0x6b, 0x00, 0x65, 0x63, + 0x5e, 0x5d, 0x58, 0x58, 0x53, 0x4d, 0x00, 0x4a, 0x44, 0x3e, 0x56, 0x2f, + 0x47, 0x3b, 0x00, 0x3c, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x00, 0x00, + 0x00, 0x0a, 0x33, 0x6e, 0x6b, 0x6d, 0x6e, 0x6b, 0x67, 0x00, 0x68, 0x6b, + 0x6b, 0x6e, 0x71, 0x78, 0x7b, 0x82, 0x00, 0x85, 0x8f, 0x97, 0x9d, 0xa4, + 0xab, 0xaf, 0xa4, 0x00, 0xab, 0xb5, 0xa7, 0x99, 0x8a, 0x8f, 0x91, 0x8f, + 0x00, 0x8f, 0x94, 0x94, 0x96, 0x97, 0x98, 0x97, 0x97, 0x00, 0x98, 0xd0, + 0xd4, 0xd4, 0xb9, 0xdc, 0xd5, 0xd5, 0x00, 0xdb, 0xc8, 0xa4, 0xa3, 0xa0, + 0xa4, 0xa3, 0xa4, 0x00, 0xa1, 0xa1, 0x9d, 0x9a, 0x9a, 0x98, 0x97, 0x91, + 0x00, 0x92, 0x8f, 0x8b, 0x88, 0x88, 0x88, 0x85, 0x84, 0x00, 0x84, 0x82, + 0x7f, 0x7f, 0x7b, 0x77, 0x71, 0x6b, 0x00, 0x65, 0x64, 0x60, 0x5d, 0x5a, + 0x58, 0x54, 0x54, 0x00, 0x4a, 0x45, 0x40, 0x39, 0x35, 0x2f, 0x4a, 0x05, + 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x11, 0x00, 0x5a, 0x5c, + 0x6e, 0x71, 0x6e, 0x6b, 0x6b, 0x68, 0x00, 0x6b, 0x6b, 0x6e, 0x70, 0x73, + 0x7b, 0x82, 0x88, 0x00, 0x91, 0x98, 0x99, 0x94, 0x94, 0x92, 0x96, 0xa5, + 0x00, 0xac, 0xa7, 0x99, 0x92, 0x92, 0x94, 0x90, 0x94, 0x00, 0x98, 0x9a, + 0x96, 0x97, 0x97, 0x98, 0x9a, 0xb5, 0x00, 0xd5, 0xd0, 0xc2, 0x99, 0xa3, + 0xd5, 0xd9, 0xdc, 0x00, 0xdd, 0xaf, 0xd5, 0xac, 0xa1, 0xa4, 0xa0, 0x9e, + 0x00, 0x9c, 0x99, 0x99, 0x97, 0x93, 0x92, 0x8e, 0x8d, 0x00, 0x89, 0x88, + 0x84, 0x82, 0x84, 0x7f, 0x7f, 0x7e, 0x00, 0x7a, 0x79, 0x77, 0x72, 0x71, + 0x6a, 0x66, 0x64, 0x00, 0x61, 0x5e, 0x5c, 0x58, 0x56, 0x50, 0x4d, 0x47, + 0x00, 0x40, 0x3b, 0x35, 0x2f, 0x3b, 0x40, 0x00, 0x00, 0x7c, 0x00, 0xe9, + 0xd4, 0xa7, 0x5f, 0x12, 0x0b, 0x40, 0x00, 0x77, 0x71, 0x71, 0x71, 0x6e, + 0x6b, 0x68, 0x6e, 0x00, 0x6e, 0x71, 0x77, 0x7f, 0x84, 0x8a, 0x8c, 0x8a, + 0x00, 0x84, 0x84, 0x85, 0x93, 0x9e, 0xa4, 0xa4, 0xa1, 0x00, 0x97, 0x8f, + 0x92, 0x95, 0xab, 0xcb, 0xcd, 0x9d, 0x00, 0x97, 0x98, 0x96, 0x97, 0x99, + 0xaa, 0xd5, 0xc9, 0x00, 0x8f, 0x79, 0x6e, 0x7f, 0x97, 0x97, 0x9e, 0x8c, + 0x00, 0xab, 0x9a, 0x94, 0x9a, 0x9d, 0x9a, 0x99, 0x98, 0x00, 0x94, 0x92, + 0x92, 0x8c, 0x8b, 0x84, 0x82, 0x82, 0x00, 0x7d, 0x7f, 0x79, 0x79, 0x78, + 0x76, 0x73, 0x73, 0x00, 0x70, 0x6d, 0x6b, 0x67, 0x64, 0x61, 0x5e, 0x5c, + 0x00, 0x5a, 0x57, 0x56, 0x50, 0x4a, 0x44, 0x3d, 0x35, 0x01, 0x31, 0x2c, + 0x40, 0x05, 0x00, 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, 0x5f, 0x13, 0x5e, + 0x5e, 0x79, 0x76, 0x00, 0x73, 0x73, 0x71, 0x6e, 0x71, 0x6b, 0x71, 0x7a, + 0x00, 0x84, 0x88, 0x8c, 0x8f, 0x8c, 0x88, 0x8b, 0x8f, 0x00, 0x8f, 0x97, + 0x9a, 0xa0, 0xa0, 0x99, 0x92, 0x92, 0x00, 0xa5, 0xbf, 0xcb, 0xcd, 0xab, + 0x99, 0x96, 0x98, 0x00, 0x97, 0xab, 0xc5, 0xa4, 0x97, 0x65, 0x68, 0x6b, + 0x00, 0x71, 0xa1, 0x97, 0x88, 0x79, 0xa1, 0x73, 0x6e, 0x00, 0x77, 0x85, + 0x99, 0x97, 0x97, 0x94, 0x92, 0x8c, 0x00, 0x88, 0x84, 0x82, 0x7f, 0x7b, + 0x7b, 0x74, 0x73, 0x00, 0x71, 0x71, 0x6b, 0x6b, 0x6b, 0x6a, 0x69, 0x68, + 0x00, 0x64, 0x60, 0x5e, 0x5c, 0x5a, 0x58, 0x56, 0x4d, 0x00, 0x4c, 0x45, + 0x40, 0x39, 0x34, 0x2c, 0x2f, 0x35, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x5f, 0x14, 0x00, 0x0d, 0x47, 0x73, 0x77, 0x78, 0x77, 0x72, 0x71, + 0x00, 0x72, 0x72, 0x73, 0x7d, 0x84, 0x92, 0x95, 0x97, 0x01, 0x9a, 0x99, + 0x97, 0x92, 0x8c, 0x8c, 0x92, 0xc1, 0x00, 0x92, 0x94, 0xa8, 0xad, 0xc0, + 0xcf, 0xd5, 0xd0, 0x00, 0xc9, 0xbc, 0xac, 0xa1, 0x92, 0x94, 0x99, 0x71, + 0x00, 0x73, 0x7b, 0x7b, 0x81, 0x82, 0x84, 0x84, 0x82, 0x00, 0x7f, 0x79, + 0x79, 0x71, 0x71, 0x88, 0x93, 0x92, 0x00, 0x8c, 0x85, 0x84, 0x82, 0x82, + 0x7b, 0x77, 0x76, 0x00, 0x71, 0x6e, 0x6e, 0x68, 0x66, 0x65, 0x6b, 0x6d, + 0x00, 0x6e, 0x6a, 0x68, 0x68, 0x63, 0x5e, 0x5c, 0x56, 0x00, 0x51, 0x4c, + 0x47, 0x3f, 0x3b, 0x35, 0x2c, 0x2f, 0x07, 0x3b, 0x02, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0xc0, 0x5f, 0x15, 0x23, 0x5a, 0x82, 0x7b, 0x79, 0x78, + 0x00, 0x77, 0x78, 0x79, 0x78, 0x82, 0x8c, 0x96, 0x9a, 0x00, 0xa2, 0xa7, + 0xa4, 0xa4, 0x9d, 0x9a, 0x92, 0x8c, 0x00, 0x8f, 0x97, 0x97, 0x91, 0x94, + 0x9f, 0x98, 0x94, 0x00, 0xc5, 0xd0, 0xd4, 0xd3, 0xc2, 0x99, 0x92, 0x94, + 0x00, 0x9a, 0x82, 0x7f, 0x7f, 0x84, 0x8b, 0x8c, 0x8b, 0x00, 0x8e, 0x8c, + 0x8c, 0x88, 0x85, 0x7f, 0x7b, 0x73, 0x00, 0x6e, 0x78, 0x8e, 0x8b, 0x85, + 0x81, 0x7f, 0x7f, 0x00, 0x79, 0x73, 0x71, 0x6d, 0x6a, 0x65, 0x64, 0x64, + 0x00, 0x64, 0x67, 0x6b, 0x71, 0x71, 0x6b, 0x65, 0x60, 0x00, 0x5c, 0x56, + 0x50, 0x4c, 0x46, 0x42, 0x39, 0x35, 0x01, 0x2e, 0x30, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0xe9, 0xf0, 0xd4, 0xa7, 0x5f, 0x16, 0x03, 0x5e, 0x71, 0x82, + 0x00, 0x7f, 0x7e, 0x7b, 0x7f, 0x7d, 0x7f, 0x84, 0x8f, 0x00, 0x97, 0xa0, + 0xa7, 0xab, 0xab, 0xb0, 0xb3, 0xb3, 0x00, 0xb5, 0xa8, 0x92, 0x97, 0x92, + 0x92, 0x9a, 0x9d, 0x00, 0x92, 0x97, 0x94, 0xd0, 0xd4, 0xc9, 0x96, 0x97, + 0x00, 0x99, 0xa0, 0xaa, 0x89, 0x84, 0x92, 0xb5, 0x93, 0x00, 0x92, 0x92, + 0x92, 0x8f, 0x8d, 0x8e, 0x8d, 0x88, 0x00, 0x81, 0x79, 0x73, 0x6b, 0x6e, + 0x83, 0x82, 0x7f, 0x00, 0x7b, 0x79, 0x73, 0x71, 0x6e, 0x68, 0x65, 0x64, + 0x00, 0x63, 0x60, 0x65, 0x6a, 0x71, 0x71, 0x6e, 0x67, 0x00, 0x5e, 0x5a, + 0x55, 0x50, 0x4a, 0x47, 0x44, 0x3b, 0x00, 0x32, 0x2c, 0x28, 0x3b, 0x3b, + 0x02, 0x00, 0x00, 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x0d, 0x56, + 0x00, 0x84, 0x84, 0x82, 0x82, 0x85, 0x88, 0x88, 0x8f, 0x00, 0x93, 0x99, + 0xa3, 0xab, 0xad, 0xaf, 0xb2, 0xb6, 0x00, 0xb5, 0xb9, 0xb2, 0xa7, 0x99, + 0x92, 0x94, 0xab, 0x00, 0xb6, 0xbe, 0xb9, 0xc0, 0xd0, 0xc9, 0x97, 0x9a, + 0x00, 0x9d, 0xa4, 0xac, 0xb3, 0xb9, 0xb9, 0xb6, 0xb5, 0x00, 0xb2, 0x8c, + 0x8e, 0x8f, 0x8e, 0x8b, 0x89, 0x89, 0x00, 0x85, 0x7f, 0x7b, 0x78, 0x71, + 0x68, 0x71, 0x7f, 0x00, 0x7f, 0x78, 0x77, 0x71, 0x6e, 0x6b, 0x65, 0x65, + 0x00, 0x63, 0x60, 0x68, 0x73, 0x77, 0x74, 0x71, 0x67, 0x00, 0x5c, 0x59, + 0x56, 0x51, 0x4a, 0x47, 0x41, 0x39, 0x00, 0x32, 0x31, 0x3b, 0x32, 0x3b, + 0x04, 0x00, 0x00, 0x7c, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x00, 0x00, + 0x00, 0x2c, 0x5e, 0x94, 0x8c, 0x8f, 0x8d, 0x92, 0x92, 0x00, 0x97, 0x99, + 0xa1, 0xa7, 0xaf, 0xb2, 0xb3, 0xb5, 0x00, 0xb6, 0xb9, 0xb9, 0xb8, 0xb5, + 0xa7, 0xa1, 0xae, 0x00, 0xc0, 0xc8, 0xc5, 0xd0, 0xd0, 0xd0, 0xa5, 0x94, + 0x00, 0x9d, 0xac, 0xb2, 0xb6, 0xb8, 0xb6, 0xb6, 0xb6, 0x00, 0xb6, 0xb6, + 0xa3, 0x8c, 0x8c, 0x8b, 0x84, 0x84, 0x00, 0x84, 0x82, 0x7b, 0x7b, 0x77, + 0x73, 0x6b, 0x65, 0x00, 0x7b, 0x79, 0x76, 0x71, 0x71, 0x6b, 0x68, 0x68, + 0x00, 0x79, 0x82, 0x82, 0x7b, 0x79, 0x77, 0x71, 0x6f, 0x00, 0x5c, 0x57, + 0x54, 0x54, 0x4d, 0x47, 0x40, 0x39, 0x00, 0x32, 0x30, 0x2d, 0x44, 0x44, + 0x12, 0x00, 0x00, 0x7e, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x01, 0x02, + 0x00, 0x65, 0x71, 0x97, 0x96, 0x97, 0x98, 0x9a, 0x9d, 0x00, 0xa1, 0xaa, + 0xac, 0xb3, 0xb6, 0xb6, 0xb6, 0xb9, 0x00, 0xbc, 0xbc, 0xbe, 0xbe, 0xb9, + 0xb9, 0xc2, 0xb6, 0x00, 0xaf, 0xac, 0xad, 0xd0, 0xc2, 0x93, 0x9c, 0xa8, + 0x00, 0xaf, 0xb9, 0xb9, 0xb9, 0xb8, 0xb6, 0xb5, 0xb5, 0x00, 0xb5, 0xb6, + 0x8f, 0x8b, 0x85, 0x85, 0x82, 0x82, 0x00, 0x7e, 0x7c, 0x79, 0x77, 0x73, + 0x6e, 0x68, 0x67, 0x00, 0x77, 0x71, 0x71, 0x6b, 0x65, 0x64, 0x65, 0x84, + 0x00, 0x82, 0x7f, 0x79, 0x76, 0x71, 0x6e, 0x65, 0x53, 0x00, 0x50, 0x4d, + 0x4a, 0x47, 0x40, 0x39, 0x31, 0x2f, 0x00, 0x2c, 0x28, 0x47, 0x26, 0x01, + 0x00, 0x00, 0x00, 0xfc, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x02, 0x02, 0x68, + 0x00, 0x8c, 0x9a, 0x9d, 0xa0, 0xa4, 0xa7, 0xab, 0xad, 0x00, 0xb5, 0xb5, + 0xbc, 0xc0, 0xbc, 0xbc, 0xbe, 0xbe, 0x00, 0xc2, 0xc2, 0xc4, 0xc3, 0xc0, + 0xa9, 0xac, 0xaf, 0x00, 0xac, 0xcd, 0xad, 0x9a, 0x92, 0x92, 0xa7, 0xb6, + 0x00, 0xb9, 0xbc, 0xb9, 0xb9, 0xb5, 0xb5, 0xb3, 0xb2, 0x00, 0x84, 0x8c, + 0x84, 0x82, 0x7f, 0x7b, 0x79, 0x79, 0x00, 0x77, 0x72, 0x71, 0x6e, 0x6a, + 0x63, 0x71, 0x6e, 0x00, 0x6d, 0x68, 0x64, 0x61, 0x64, 0x84, 0x7d, 0x79, + 0x00, 0x76, 0x71, 0x71, 0x5d, 0x50, 0x4f, 0x4f, 0x4a, 0x00, 0x47, 0x40, + 0x3b, 0x33, 0x2f, 0x35, 0x24, 0x40, 0x07, 0x39, 0x02, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0xa7, 0xe0, 0x5f, 0x17, 0x04, 0x0d, 0x5f, 0x99, 0xa3, 0xa7, + 0x00, 0xab, 0xac, 0xb3, 0xb5, 0xb6, 0xb9, 0xbc, 0xc0, 0x00, 0xc0, 0xbe, + 0xbe, 0xc1, 0xc1, 0xc2, 0xc2, 0xc5, 0x00, 0xc8, 0xae, 0xb2, 0xc0, 0xc5, + 0xd0, 0x9a, 0x82, 0x00, 0x88, 0x92, 0x97, 0xa1, 0xb8, 0xb5, 0xb6, 0xb6, + 0x00, 0xb5, 0xb3, 0xb3, 0xaf, 0xac, 0xab, 0x7f, 0x7e, 0x00, 0x7b, 0x82, + 0x79, 0x77, 0x73, 0x71, 0x6d, 0x68, 0x08, 0x65, 0x63, 0x6e, 0x7e, 0xd9, + 0x5e, 0x65, 0x82, 0x40, 0x7b, 0x81, 0x6a, 0x50, 0x51, 0x4d, 0x4c, 0x49, + 0x00, 0x44, 0x3b, 0x35, 0x30, 0x30, 0x49, 0x3b, 0x35, 0x0f, 0x03, 0x00, + 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xc0, 0x17, 0x06, 0x38, 0x65, 0xa5, + 0xab, 0xad, 0xb3, 0x00, 0xb6, 0xb6, 0xbc, 0xbe, 0xc0, 0xc1, 0xc2, 0xc2, + 0x00, 0xc2, 0xc2, 0xc8, 0xc3, 0xc5, 0xcb, 0xc0, 0xab, 0x00, 0xb3, 0xd5, + 0xd0, 0xcd, 0x79, 0x81, 0x8f, 0x96, 0x00, 0x97, 0x98, 0xab, 0xb5, 0xaf, + 0xad, 0xb5, 0xb3, 0x00, 0xac, 0xad, 0xac, 0xab, 0x94, 0x84, 0x88, 0x9a, + 0x00, 0x88, 0x71, 0x71, 0x6e, 0x6a, 0x65, 0x64, 0x64, 0x00, 0x8f, 0x92, + 0x73, 0x63, 0x5e, 0x6b, 0x71, 0x7e, 0x00, 0x78, 0x77, 0x73, 0x6e, 0x65, + 0x4d, 0x4d, 0x4c, 0x00, 0x49, 0x46, 0x40, 0x39, 0x32, 0x2f, 0x47, 0x40, + 0x07, 0x39, 0x0e, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xe0, 0x5f, 0x17, + 0x07, 0x00, 0x3b, 0x6b, 0xaf, 0xb3, 0x00, 0xb5, 0xb5, 0xbc, 0xbc, 0xc0, + 0xc5, 0xc5, 0xc5, 0x00, 0xc5, 0xc9, 0xcd, 0xc8, 0xcd, 0xc9, 0xcd, 0xc5, + 0x00, 0xab, 0xcd, 0xd0, 0xb6, 0xac, 0x79, 0x82, 0x93, 0x00, 0x97, 0x9a, + 0x97, 0xa1, 0xb6, 0xa1, 0x9a, 0xb2, 0x00, 0xaf, 0xad, 0xac, 0xa8, 0xa7, + 0xa4, 0xa4, 0x99, 0x00, 0x99, 0x9c, 0x6e, 0x6b, 0x67, 0x65, 0x64, 0x65, + 0x00, 0x83, 0x8c, 0x94, 0x92, 0x73, 0x84, 0x82, 0x7f, 0x00, 0x7b, 0x79, + 0x77, 0x6e, 0x6b, 0x5e, 0x4d, 0x50, 0x00, 0x4c, 0x47, 0x41, 0x3b, 0x35, + 0x2f, 0x2c, 0x44, 0x07, 0x39, 0x11, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xf0, 0x5f, 0x17, 0x07, 0x01, 0x40, 0x71, 0xb5, 0xb5, 0x00, 0xb6, 0xb9, + 0xbd, 0xc2, 0xc5, 0xc9, 0xc9, 0xcd, 0x00, 0xcd, 0xd0, 0xcc, 0xcd, 0xce, + 0xcf, 0xd3, 0xac, 0x00, 0xad, 0xaf, 0xaf, 0xaf, 0x7b, 0x84, 0x8f, 0x97, + 0x00, 0x97, 0x98, 0x97, 0x9d, 0x94, 0x92, 0xaa, 0x9d, 0x00, 0xa4, 0xab, + 0xa7, 0xa1, 0x9e, 0x99, 0x71, 0x77, 0x00, 0x99, 0x81, 0x7f, 0x81, 0x7f, + 0x84, 0x84, 0x7b, 0x00, 0x8b, 0x8f, 0x8e, 0x8c, 0x82, 0x82, 0x7f, 0x79, + 0x00, 0x60, 0x56, 0x56, 0x53, 0x50, 0x4f, 0x49, 0x44, 0x00, 0x44, 0x39, + 0x35, 0x31, 0x26, 0x35, 0x3b, 0x13, 0x1f, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xa7, 0x5f, 0x17, 0xc0, 0x07, 0x03, 0x44, 0x72, 0xb3, 0xb6, 0xb6, 0xc0, + 0x00, 0xc2, 0xc5, 0xc9, 0xc8, 0xc9, 0xd8, 0xd0, 0xd5, 0x00, 0xd0, 0xd0, + 0xd1, 0xc9, 0xac, 0xaf, 0xad, 0xaf, 0x00, 0xaf, 0x8d, 0x85, 0x94, 0x98, + 0x99, 0x9a, 0x97, 0x00, 0x94, 0x94, 0x94, 0x92, 0x92, 0x92, 0xa7, 0xa1, + 0x00, 0x9e, 0x9d, 0x9d, 0x88, 0x96, 0x92, 0x8f, 0x8c, 0x02, 0x88, 0x84, + 0x82, 0x7f, 0x79, 0x8e, 0xc1, 0x82, 0x00, 0x7b, 0x77, 0x73, 0x56, 0x56, + 0x54, 0x54, 0x50, 0x00, 0x4b, 0x49, 0x40, 0x39, 0x35, 0x31, 0x2e, 0x3b, + 0x07, 0x3b, 0x13, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0xf0, 0x5f, 0x17, + 0x07, 0x05, 0x40, 0x73, 0xaf, 0xb9, 0x00, 0xb9, 0xc2, 0xc5, 0xcd, 0xc0, + 0x96, 0xb5, 0xdc, 0x00, 0xd4, 0xd0, 0xd0, 0xd1, 0xd9, 0xcb, 0xaf, 0xac, + 0x00, 0xad, 0xac, 0x9a, 0x87, 0x91, 0x97, 0xb1, 0xaf, 0x00, 0x99, 0x9a, + 0x92, 0x8f, 0x8e, 0x8f, 0x8c, 0x92, 0x00, 0x9d, 0x9d, 0x99, 0x97, 0x94, + 0x93, 0x8f, 0x79, 0x00, 0x84, 0x88, 0x83, 0x7f, 0x7b, 0x7b, 0x8f, 0x8c, + 0x00, 0x88, 0x84, 0x7e, 0x79, 0x77, 0x60, 0x56, 0x56, 0x00, 0x51, 0x4d, + 0x5e, 0x45, 0x3f, 0x39, 0x35, 0x32, 0x01, 0x2f, 0x47, 0x39, 0x11, 0x00, + 0x00, 0x00, 0xe9, 0xfc, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x39, 0x73, + 0x00, 0xaf, 0xc0, 0xc0, 0xc5, 0xc9, 0xcf, 0xc9, 0xb3, 0x00, 0xd7, 0xd3, + 0xd8, 0xd5, 0xd3, 0xcd, 0xd0, 0xcf, 0x00, 0xb5, 0xb5, 0xb5, 0xb9, 0x84, + 0x92, 0xad, 0xad, 0x00, 0xb3, 0x97, 0xac, 0xab, 0x97, 0x8c, 0x89, 0x88, + 0x00, 0x88, 0x84, 0x8f, 0x94, 0x94, 0x8c, 0x7b, 0x73, 0x00, 0x71, 0x6e, + 0x6e, 0x82, 0x7c, 0x79, 0x82, 0x8c, 0x00, 0x78, 0x68, 0x60, 0x5f, 0x6b, + 0x5d, 0x56, 0x50, 0x00, 0x52, 0x5d, 0x63, 0x5e, 0x3b, 0x39, 0x35, 0x40, + 0x01, 0x4a, 0x47, 0x35, 0x0d, 0x00, 0x00, 0x00, 0xe9, 0xfc, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0x07, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x9a, 0xc9, 0xc0, + 0xc8, 0xcd, 0xcf, 0x00, 0xd4, 0xd4, 0xd7, 0xd8, 0xd8, 0xd5, 0xd4, 0xd0, + 0x00, 0xd0, 0xd9, 0xdb, 0xd9, 0xd9, 0xbc, 0xa5, 0xac, 0x00, 0xaf, 0xad, + 0xac, 0xab, 0xaa, 0xa7, 0xa7, 0x94, 0x00, 0x82, 0x82, 0x82, 0x7c, 0x79, + 0x77, 0x77, 0x76, 0x00, 0x71, 0x6e, 0x6e, 0x68, 0x6e, 0x7b, 0x79, 0x8b, + 0x00, 0x6a, 0x60, 0x5e, 0x5d, 0x5c, 0x5a, 0x60, 0x64, 0x00, 0x63, 0x65, + 0x61, 0x5d, 0x5d, 0x35, 0x30, 0x50, 0x01, 0x4a, 0x47, 0x32, 0x03, 0x00, + 0x00, 0x00, 0xe9, 0xfe, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x02, 0x02, + 0x00, 0x84, 0x88, 0xc5, 0xc4, 0xc5, 0xd0, 0xd0, 0xd9, 0x00, 0xd5, 0xd9, + 0xd9, 0xd4, 0xd9, 0xd8, 0xd7, 0xd6, 0x00, 0xd6, 0xd7, 0xd5, 0xd7, 0xb5, + 0xa7, 0xab, 0xab, 0x00, 0xab, 0xa7, 0xa4, 0xa1, 0x9e, 0x9a, 0x96, 0x85, + 0x00, 0x7f, 0x8e, 0x93, 0x81, 0x76, 0x72, 0x71, 0x6e, 0x00, 0x6a, 0x65, + 0x68, 0x7b, 0x8b, 0x88, 0x84, 0x7f, 0x00, 0x6a, 0x6a, 0x6e, 0x73, 0x6e, + 0x68, 0x64, 0x63, 0x00, 0x60, 0x54, 0x39, 0x30, 0x3b, 0x4a, 0x44, 0x22, + 0x0f, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xf0, 0x17, 0x07, + 0x07, 0x04, 0x02, 0x40, 0x7f, 0xb6, 0x00, 0xcd, 0xc5, 0xd0, 0xd5, 0xd5, + 0xd8, 0xd3, 0xd8, 0x00, 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd4, 0xd0, + 0x00, 0xcd, 0xb2, 0xa7, 0xa7, 0xa4, 0xa1, 0xa1, 0x9a, 0x00, 0x9a, 0x99, + 0x97, 0x91, 0x92, 0x92, 0x92, 0x8e, 0x00, 0x73, 0x71, 0x79, 0x73, 0x71, + 0x6b, 0x73, 0x8b, 0x00, 0x8b, 0x83, 0x82, 0x7b, 0x7b, 0x77, 0x72, 0x6e, + 0x00, 0x6a, 0x65, 0x64, 0x5e, 0x5e, 0x44, 0x30, 0x30, 0x01, 0x51, 0x39, + 0x11, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xfe, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x07, 0x0f, 0x00, 0x8c, 0x94, 0xc9, 0xcd, 0xcd, 0xd0, 0xd5, 0xd4, + 0x00, 0xd6, 0xd5, 0xd9, 0xd9, 0xd9, 0xd3, 0xd0, 0xcf, 0x00, 0xcf, 0xcc, + 0xc9, 0xb3, 0xa4, 0xa4, 0xa1, 0x9c, 0x00, 0x97, 0x97, 0x94, 0x92, 0x8f, + 0x8c, 0x8c, 0x88, 0x00, 0x82, 0x81, 0x79, 0x81, 0x7b, 0x7b, 0x7e, 0x88, + 0x00, 0x85, 0x84, 0x82, 0x7e, 0x7b, 0x77, 0x71, 0x6d, 0x00, 0x68, 0x65, + 0x64, 0x5e, 0x5d, 0x5a, 0x50, 0x4d, 0x03, 0x4c, 0x27, 0x08, 0x00, 0x00, + 0x00, 0xe9, 0xd4, 0xfe, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x01, 0x02, + 0x00, 0x40, 0x84, 0xab, 0xd4, 0xc9, 0xcc, 0xd3, 0xd8, 0x00, 0xd5, 0xd7, + 0xd9, 0xd0, 0xd3, 0xd4, 0xd0, 0xd4, 0x00, 0xcd, 0xc8, 0xc8, 0xc2, 0xb2, + 0xa7, 0xa4, 0x9d, 0x00, 0x99, 0x90, 0x8a, 0x88, 0x83, 0x81, 0x7f, 0x7b, + 0x00, 0x79, 0x79, 0x77, 0x77, 0x7f, 0x89, 0x85, 0x84, 0x00, 0x82, 0x7b, + 0x77, 0x75, 0x71, 0x6b, 0x6d, 0x65, 0x00, 0x63, 0x61, 0x5d, 0x58, 0x53, + 0x53, 0x3b, 0x11, 0x0f, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, + 0xf8, 0x17, 0x07, 0x07, 0x07, 0x04, 0x0a, 0x88, 0x8c, 0x00, 0xb6, 0xd5, + 0xc8, 0xc8, 0xcf, 0xd0, 0xd5, 0xd1, 0x00, 0xd5, 0xd5, 0xd5, 0xd9, 0xdb, + 0xd5, 0xd5, 0xd7, 0x00, 0xd4, 0xc9, 0xb6, 0xac, 0xa1, 0x99, 0x8f, 0x84, + 0x00, 0x7f, 0x79, 0x77, 0x71, 0x72, 0x77, 0x7b, 0x83, 0x00, 0x7f, 0x82, + 0x81, 0x82, 0x7e, 0x79, 0x77, 0x73, 0x00, 0x6e, 0x6a, 0x65, 0x64, 0x60, + 0x5c, 0x56, 0x58, 0x03, 0x44, 0x17, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xd4, + 0xfe, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x0f, 0x8c, + 0x8c, 0xb3, 0xd4, 0xc5, 0xc4, 0xcd, 0x00, 0xc9, 0xd0, 0xcd, 0xcf, 0xcd, + 0xd5, 0xd9, 0xd5, 0x00, 0xd4, 0xcf, 0xd0, 0xcd, 0xc5, 0xbc, 0xb5, 0xab, + 0x00, 0x9e, 0x94, 0x8c, 0x81, 0x7f, 0x7b, 0x81, 0x7f, 0x00, 0x81, 0x7f, + 0x7c, 0x7f, 0x7f, 0x7b, 0x73, 0x71, 0x00, 0x6e, 0x6e, 0x67, 0x63, 0x5d, + 0x5a, 0x5a, 0x4a, 0x07, 0x26, 0x04, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, + 0xfe, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x03, 0x0f, 0x00, 0x7f, 0x92, + 0xac, 0xc5, 0xcc, 0xc1, 0xc0, 0xc2, 0x00, 0xc2, 0xc2, 0xc2, 0xc9, 0xcd, + 0xd0, 0xcd, 0xc9, 0x00, 0xc8, 0xc2, 0xbc, 0xb9, 0xb6, 0xb2, 0xac, 0xa0, + 0x00, 0x96, 0x88, 0x7f, 0x7f, 0x7d, 0x7b, 0x7f, 0x7b, 0x00, 0x7e, 0x7b, + 0x79, 0x74, 0x6e, 0x68, 0x63, 0x5e, 0x00, 0x5e, 0x5a, 0x4a, 0x17, 0x02, + 0x00, 0x00, 0x00, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x07, 0x03, 0x35, 0x92, 0x92, 0xaf, 0xc2, 0x00, 0xc0, 0xb6, + 0xb5, 0xb6, 0xb8, 0xbc, 0xc2, 0xc5, 0x00, 0xc5, 0xc0, 0xb6, 0xac, 0xa7, + 0xa1, 0x9c, 0x9a, 0x00, 0x9a, 0x9a, 0x92, 0x8b, 0x82, 0x7c, 0x7b, 0x7e, + 0x00, 0x7f, 0x78, 0x71, 0x6b, 0x65, 0x64, 0x63, 0x60, 0x01, 0x50, 0x44, + 0x12, 0x02, 0x00, 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x07, 0x07, 0xc0, 0x07, 0x03, 0x14, 0x35, 0x8f, 0x92, 0xa0, 0xaf, + 0x00, 0xb6, 0xaf, 0xac, 0xac, 0xaf, 0xb2, 0xaf, 0xa4, 0x00, 0x99, 0x92, + 0x8c, 0x84, 0x84, 0x84, 0x84, 0x84, 0x00, 0x82, 0x7b, 0x77, 0x73, 0x71, + 0x6e, 0x6b, 0x6b, 0x00, 0x6b, 0x60, 0x54, 0x4d, 0x17, 0x06, 0x00, 0x00, + 0x7f, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0x00, 0x00, 0x11, 0x11, 0x00, 0x7f, 0x7f, 0x88, 0x94, 0xa1, + 0xa4, 0xa7, 0xa4, 0x00, 0x99, 0x94, 0x8f, 0x83, 0x7f, 0x79, 0x79, 0x78, + 0x00, 0x77, 0x79, 0x78, 0x7b, 0x76, 0x6b, 0x64, 0x5c, 0x01, 0x5a, 0x47, + 0x06, 0x06, 0x00, 0x00, 0x00, 0xe9, 0xff, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0x07, 0x07, 0x07, 0xe0, 0x07, 0x07, 0x06, 0x02, 0x0d, 0x11, 0x24, 0x6a, + 0x00, 0x77, 0x79, 0x73, 0x71, 0x72, 0x71, 0x6e, 0x6d, 0x00, 0x68, 0x65, + 0x63, 0x63, 0x5f, 0x5a, 0x4a, 0x1b, 0x3f, 0x08, 0x06, 0x07, 0xbf, 0x77, + 0x2f, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x05, + 0x00, 0x07, 0x09, 0x0d, 0x0d, 0x0d, 0x0a, 0x08, 0x06, 0x7f, 0x02, 0x07, + 0x07, 0x77, 0x2f, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0x00, +}; + +//***************************************************************************** +// +// Right Arrow Image +// +//***************************************************************************** +const uint8_t g_pui8RightImage[] = +{ + IMAGE_FMT_1BPP_UNCOMP, + 10, 0, + 39, 0, + + 0x7f, 0xc0, 0x7f, 0xc0, 0x3f, 0xc0, 0x3f, 0xc0, 0x1f, 0xc0, 0x1f, 0xc0, + 0x0f, 0xc0, 0x0f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x03, 0xc0, 0x03, 0xc0, + 0x81, 0xc0, 0x81, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0x40, 0xe0, 0x40, + 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xe0, 0x40, 0xe0, 0x40, 0xc0, 0xc0, + 0xc0, 0xc0, 0x81, 0xc0, 0x81, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xc0, + 0x07, 0xc0, 0x0f, 0xc0, 0x0f, 0xc0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0xc0, + 0x3f, 0xc0, 0x7f, 0xc0, 0x7f, 0xc0, +}; + +//***************************************************************************** +// +// Left Arrow Image +// +//***************************************************************************** +const uint8_t g_pui8LeftImage[] = +{ + IMAGE_FMT_1BPP_UNCOMP, + 10, 0, + 39, 0, + + 0xff, 0x80, 0xff, 0x80, 0xff, 0x00, 0xff, 0x00, 0xfe, 0x00, 0xfe, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0xe0, 0x40, 0xe0, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0x81, 0xc0, 0x81, 0xc0, + 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x81, 0xc0, 0x81, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xe0, 0x40, 0xe0, 0x40, 0xf0, 0x00, 0xf0, 0x00, 0xf8, 0x00, + 0xf8, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x80, 0xff, 0x80, +}; + +//***************************************************************************** +// +// Up Tab Image +// +//***************************************************************************** +const uint8_t g_pui8UpTabImage[] = +{ + IMAGE_FMT_1BPP_UNCOMP, + 32, 0, + 10, 0, + + 0xff, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x0f, + 0xc0, 0x00, 0x00, 0x03, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; + +//***************************************************************************** +// +// Down Tab Image +// +//***************************************************************************** +const uint8_t g_pui8DownTabImage[] = +{ + IMAGE_FMT_1BPP_UNCOMP, + 32, 0, + 10, 0, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, + 0xc0, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x3f, + 0xff, 0x00, 0x00, 0xff, +}; + +//***************************************************************************** +// +// Texas Instrument Logo Image +// +//***************************************************************************** +uint8_t g_pui8TIImagePalette[16 * 3]; +uint8_t g_pui8TIImage[] = +{ + IMAGE_FMT_4BPP_COMP, + 64, 1, + 78, 0, + + 15, + 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, + 0x24, 0x24, 0x24, + 0x1b, 0x13, 0xec, + 0x55, 0x55, 0x55, + 0x24, 0x1c, 0xed, + 0x26, 0x1e, 0xed, + 0x3f, 0x38, 0xef, + 0x7b, 0x7b, 0x7b, + 0x87, 0x84, 0xca, + 0xa8, 0xa7, 0xc8, + 0xd5, 0xd5, 0xd5, + 0xe1, 0xe0, 0xfb, + 0xfb, 0xfb, 0xfd, + 0xfb, 0xfb, 0xff, + 0xff, 0xff, 0xff, + + 0x1f, 0xff, 0xff, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x05, 0xfc, 0x13, 0xcc, 0xcc, 0xcc, 0xe9, 0xcc, 0xcd, 0x07, 0x07, + 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x05, 0xf7, 0x13, 0x66, 0x66, 0x66, 0xe9, 0x66, + 0x7a, 0x07, 0x07, 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0xf7, 0x0b, 0x35, 0x55, + 0x55, 0x55, 0xe9, 0x6a, 0x07, 0x07, 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0xf7, + 0x13, 0x55, 0x55, 0x55, 0xe9, 0x55, 0x6a, 0x07, 0x07, 0xff, 0x77, 0x2f, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x05, 0xf7, 0x12, 0x55, 0x55, 0x55, 0xe9, 0x55, 0x6a, 0x02, 0xaa, + 0x1f, 0xaa, 0xa9, 0xaf, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe1, 0x07, 0x07, 0x06, 0xf7, 0x55, + 0x55, 0x55, 0xe9, 0x20, 0x55, 0x6a, 0x01, 0xfc, 0x65, 0x55, 0x53, 0x7f, + 0xff, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x09, 0xf7, 0x55, 0x55, 0x55, 0xe9, + 0x55, 0x6a, 0x01, 0x07, 0xfa, 0x65, 0x55, 0x55, 0x9f, 0x07, 0xbf, 0x77, + 0xff, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x06, 0xf7, 0x55, 0x55, 0x48, 0x55, 0xe9, 0x55, 0x6a, 0x01, + 0xf9, 0x55, 0x55, 0x3f, 0x56, 0xbf, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xc2, 0x07, 0x06, + 0xf7, 0x55, 0x55, 0x55, 0xe9, 0x55, 0x43, 0x6a, 0xa2, 0x35, 0x55, 0x57, + 0xcf, 0x07, 0xbf, 0xff, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0xf7, 0x55, 0x24, 0x55, 0x55, + 0xe9, 0x55, 0x6a, 0x01, 0xd7, 0x35, 0x1f, 0x55, 0x37, 0xef, 0x07, 0xbf, + 0x77, 0x2f, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xe1, 0x07, 0x07, 0x06, 0xf7, 0x55, 0x55, 0x55, 0xe9, 0x21, 0x55, 0x6a, + 0x01, 0xc7, 0x35, 0x55, 0x57, 0x07, 0xff, 0xbf, 0x77, 0x2f, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf7, + 0x12, 0x55, 0x55, 0x55, 0xe9, 0x55, 0x6a, 0x01, 0xed, 0x1f, 0xdd, 0xdd, + 0xdd, 0x07, 0xbf, 0x77, 0x2f, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe1, 0x07, 0x07, 0x07, 0xf7, 0x55, 0x55, 0x55, 0xe9, + 0x3f, 0x55, 0x6b, 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xe1, 0x07, 0x07, 0x05, 0xf7, 0x55, + 0x55, 0x55, 0xe9, 0x00, 0x55, 0x69, 0xaa, 0xac, 0xff, 0xb9, 0xaa, 0xaa, + 0x01, 0x9e, 0xfc, 0x9a, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x03, 0xff, 0xff, + 0xb8, 0x88, 0x88, 0x88, 0xe9, 0xd2, 0x7f, 0x8a, 0x89, 0x71, 0xd4, 0xa7, + 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x04, 0xff, 0xf7, 0x55, 0x55, 0x55, 0xe9, 0x55, 0x53, 0x00, 0x33, 0x39, + 0xfd, 0x73, 0x33, 0x33, 0x6d, 0xf9, 0x10, 0x33, 0x33, 0x33, 0xe9, 0x3a, + 0xff, 0xff, 0xfd, 0x0c, 0x40, 0x00, 0x00, 0x00, 0xe9, 0xd3, 0xbf, 0xff, + 0x3f, 0xff, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0c, 0xf7, 0x55, 0x55, 0x55, 0xe9, + 0xd1, 0x5b, 0xfc, 0x02, 0x73, 0x55, 0x53, 0x9f, 0xe9, 0x35, 0x7b, 0x6a, + 0x01, 0xff, 0xff, 0xfb, 0x10, 0x00, 0x00, 0x00, 0xe9, 0x87, 0xd3, 0x8f, + 0xff, 0xff, 0xff, 0xe9, 0xd4, 0xa7, 0xff, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xe1, 0x07, 0x07, 0x07, 0xf7, 0x55, 0x55, 0x55, 0xe9, + 0x80, 0xd1, 0x5d, 0xfb, 0x65, 0x55, 0x53, 0x9f, 0xc7, 0x40, 0x35, 0x7b, + 0x6a, 0xff, 0xff, 0xfa, 0x00, 0x11, 0x00, 0x22, 0x22, 0x20, 0x00, 0x00, + 0x01, 0x22, 0x22, 0x03, 0x21, 0x00, 0x4d, 0xff, 0xff, 0xff, 0xe9, 0xd4, + 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0xf7, 0x55, 0x55, 0x55, 0xc0, 0xe9, 0xd1, 0x7d, 0xfa, 0x35, + 0x55, 0x53, 0xbf, 0x40, 0xc6, 0x84, 0x6a, 0xff, 0xff, 0xf4, 0x14, 0xab, + 0x00, 0xff, 0xff, 0xd4, 0x00, 0x00, 0x2b, 0xff, 0xff, 0x03, 0xdb, 0x82, + 0x1b, 0xff, 0xff, 0xff, 0xe9, 0xd4, 0xff, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07, 0xf7, 0x55, 0x55, 0x55, + 0x80, 0xe9, 0x55, 0x55, 0x53, 0x9e, 0xf9, 0x35, 0x55, 0x10, 0x55, 0xcf, + 0xb3, 0x84, 0x6a, 0xff, 0xff, 0xb1, 0x42, 0x8f, 0x01, 0xfa, 0x00, 0x00, + 0x2f, 0xc9, 0xfb, 0x7f, 0x28, 0xa1, 0x89, 0xd4, 0xa7, 0x5f, 0x17, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0xf7, 0x55, + 0x55, 0x55, 0xe9, 0x55, 0x55, 0x53, 0x01, 0xaf, 0xd7, 0x35, 0x55, 0x37, + 0xcf, 0x93, 0x84, 0x08, 0x6a, 0xff, 0xff, 0xca, 0x02, 0xfa, 0x00, 0x00, + 0x5f, 0x2f, 0xc2, 0xcb, 0x9a, 0x7a, 0xc6, 0x87, 0x3d, 0x3f, 0xfd, 0xbd, + 0x07, 0x07, 0x77, 0x2f, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x03, 0xf7, + 0x55, 0x55, 0x55, 0x80, 0xe9, 0x55, 0x55, 0x53, 0xcf, 0xc7, 0x35, 0x55, + 0x14, 0x39, 0xee, 0x93, 0x84, 0x6a, 0x05, 0xfa, 0x00, 0x00, 0x00, 0x2f, + 0xff, 0xff, 0xa4, 0x44, 0x88, 0x44, 0x01, 0x44, 0x44, 0x44, 0x44, 0x4a, + 0xfc, 0x84, 0xc2, 0x60, 0xaf, 0x79, 0xd2, 0xff, 0xfd, 0x84, 0x44, 0x4a, + 0x10, 0xff, 0xff, 0xff, 0xe9, 0xb8, 0x22, 0x22, 0x28, 0x3f, 0xbc, 0x8b, + 0xa4, 0x74, 0xa7, 0x5f, 0x17, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x06, 0xf7, + 0x55, 0x55, 0x55, 0x80, 0xe9, 0x56, 0x66, 0x67, 0xcf, 0xc3, 0x55, 0x55, + 0x05, 0x39, 0xfd, 0x76, 0x66, 0x65, 0x72, 0x6a, 0x05, 0x00, 0xfa, 0x00, + 0x00, 0x2f, 0xff, 0xff, 0xa2, 0x00, 0x21, 0x00, 0x00, 0xe9, 0x00, 0x02, + 0xdd, 0x81, 0xb1, 0x08, 0x14, 0xbf, 0xff, 0xb4, 0xd3, 0xff, 0xfb, 0x20, + 0x00, 0x00, 0x02, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xb4, 0x4f, 0x10, 0x01, + 0x12, 0x08, 0xaa, 0x8a, 0xc6, 0x87, 0xfe, 0x3f, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x02, 0xf7, 0x10, 0x55, 0x55, 0x55, 0xe9, 0x39, 0xaa, 0xab, 0xdf, + 0x00, 0xa3, 0x55, 0x55, 0x3a, 0xfd, 0xaa, 0xaa, 0x95, 0xa0, 0x72, 0x6b, + 0x05, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0x00, 0xff, 0xfd, 0x20, 0x00, 0x00, + 0x12, 0x22, 0x21, 0x0c, 0x00, 0x00, 0xaf, 0xfb, 0xb1, 0x79, 0xfb, 0x20, + 0x2c, 0x02, 0xaf, 0x14, 0x00, 0xc2, 0x51, 0x01, 0x22, 0x0f, 0x10, 0x00, + 0x04, 0xdf, 0x61, 0x49, 0xd4, 0xa7, 0xfe, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0x07, 0x05, 0xf7, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x53, 0x7c, 0xff, + 0x12, 0xff, 0xfe, 0x93, 0xcb, 0xff, 0x93, 0x72, 0x6a, 0x84, 0x05, 0xfa, + 0x00, 0x00, 0x2f, 0x61, 0x40, 0x00, 0x00, 0x04, 0xab, 0xbb, 0xba, 0x88, + 0x10, 0x4f, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xf8, 0x10, + 0x80, 0xd9, 0xff, 0xff, 0xd2, 0x00, 0x00, 0x00, 0x8d, 0x80, 0x09, 0xd4, + 0x00, 0x02, 0x8a, 0xbb, 0xa8, 0x20, 0x3f, 0x02, 0xbf, 0x5a, 0x3a, 0xc6, + 0x87, 0x3f, 0x07, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x01, 0xf7, 0x55, 0x55, + 0x00, 0x55, 0x55, 0x55, 0x53, 0x7d, 0xff, 0xff, 0xfd, 0x0a, 0x73, 0x55, + 0x53, 0x7c, 0x01, 0x75, 0x72, 0x39, 0x84, 0x05, 0xfa, 0x00, 0x00, 0x2f, + 0x61, 0x80, 0x00, 0x48, 0x0a, 0x7a, 0xb2, 0x1b, 0x7a, 0x04, 0xdf, 0xff, + 0x10, 0xb2, 0x00, 0xaf, 0x02, 0xb0, 0x01, 0x10, 0x00, 0x53, 0x1b, 0x09, + 0xb1, 0xd3, 0xb8, 0x10, 0x5b, 0x3a, 0xff, 0xc6, 0x87, 0x3f, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x80, 0x01, 0xf7, 0x55, 0x55, 0x55, 0x55, 0x55, 0x53, + 0x00, 0x9f, 0xff, 0xff, 0xfc, 0x65, 0x55, 0x53, 0x9e, 0x09, 0xff, 0xff, + 0xfe, 0x75, 0x72, 0x37, 0xef, 0x04, 0x08, 0xfa, 0x00, 0x00, 0x2f, 0xb1, + 0x80, 0x00, 0x0b, 0x90, 0x82, 0xfc, 0x4b, 0xaa, 0x00, 0xaf, 0xfd, 0x40, + 0x20, 0x04, 0xdf, 0x02, 0x40, 0x08, 0x20, 0x00, 0x0a, 0x89, 0x09, 0xa0, + 0x00, 0x2f, 0x0a, 0xa2, 0x4d, 0x5a, 0xff, 0x3a, 0xc6, 0x87, 0x3f, 0x07, + 0x07, 0x07, 0x07, 0x03, 0xff, 0xff, 0xfd, 0xcc, 0xcc, 0xcc, 0xe9, 0xd1, + 0x00, 0xc7, 0x55, 0x55, 0x55, 0x55, 0x55, 0x53, 0xaf, 0x01, 0xff, 0xff, + 0xfc, 0x35, 0x55, 0x53, 0x9f, 0xc9, 0x41, 0x65, 0x72, 0x36, 0xbf, 0xff, + 0xff, 0xff, 0xe9, 0x08, 0xfa, 0x00, 0x00, 0x2f, 0xb1, 0x80, 0x00, 0x0a, + 0x80, 0x83, 0xdd, 0xff, 0xff, 0xc2, 0x00, 0x00, 0x2b, 0x10, 0xf8, 0x00, + 0x2b, 0x0a, 0xfc, 0x20, 0x1b, 0x80, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, + 0xa0, 0x00, 0x2c, 0x9f, 0x0a, 0xfb, 0xad, 0x52, 0x32, 0xc6, 0x87, 0x3f, + 0xf0, 0x07, 0x07, 0x07, 0x07, 0xff, 0xff, 0xfc, 0x33, 0x30, 0x33, 0x33, + 0xe9, 0xd1, 0x35, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x56, 0xcf, 0xff, + 0xff, 0xfa, 0x35, 0x14, 0x55, 0x56, 0xaf, 0xc9, 0x65, 0x72, 0x53, 0x7d, + 0x10, 0xff, 0xff, 0xff, 0xe9, 0xfa, 0x00, 0x00, 0x2f, 0x89, 0xb1, 0x80, + 0x00, 0x0a, 0x81, 0xfb, 0xbf, 0x72, 0x02, 0x10, 0x00, 0x04, 0xb1, 0x01, + 0xaf, 0x0a, 0xf8, 0x04, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x59, 0xa0, 0x00, + 0x1f, 0x04, 0xab, 0xdf, 0x72, 0x52, 0xc6, 0x87, 0x3f, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x04, 0xfd, 0x75, 0x55, 0x30, 0x55, 0x55, 0xe9, 0xd4, 0x55, + 0x55, 0x37, 0xcf, 0x18, 0xff, 0xff, 0xf9, 0xcd, 0x34, 0x39, 0xef, 0xff, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0x89, 0xb9, 0x80, + 0x00, 0x0b, 0x89, 0xd2, 0x4f, 0x62, 0x04, 0x80, 0x00, 0x01, 0x20, 0x08, + 0x1b, 0xd2, 0x00, 0x00, 0x8f, 0xf2, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb1, + 0x03, 0x00, 0x00, 0x02, 0x48, 0xab, 0xdf, 0x5b, 0x33, 0xfe, 0xb7, 0x6f, + 0x27, 0x07, 0x07, 0x07, 0x07, 0xff, 0x06, 0xfe, 0x93, 0x55, 0x55, 0x55, + 0xe9, 0xd4, 0x55, 0x02, 0x55, 0x37, 0xab, 0xbb, 0xcf, 0xf7, 0xc9, 0xdf, + 0x10, 0xcb, 0xbb, 0xc7, 0x34, 0x53, 0x9e, 0xff, 0xff, 0x01, 0xff, 0xff, + 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xb9, 0x00, 0x80, 0x00, 0x04, 0x88, 0x88, + 0x88, 0x40, 0x8f, 0x82, 0x62, 0xd4, 0x00, 0x00, 0x00, 0x2c, 0x1b, 0xb1, + 0x28, 0x02, 0xcf, 0x01, 0x2d, 0x6c, 0x00, 0x02, 0x48, 0x7f, 0xbf, 0x53, + 0x2b, 0xb7, 0x6f, 0x27, 0x07, 0x07, 0xc1, 0x07, 0x07, 0xff, 0xc3, 0x55, + 0x55, 0x55, 0xe9, 0x80, 0xd4, 0x55, 0x55, 0x56, 0x66, 0x67, 0xbf, 0xc6, + 0x01, 0x55, 0x55, 0x37, 0xff, 0x76, 0x66, 0x65, 0x35, 0x00, 0x5d, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x21, 0x00, 0x2f, 0xb9, 0x80, 0x00, + 0x00, 0x00, 0xe9, 0x41, 0x8f, 0x62, 0xfb, 0x20, 0x00, 0x01, 0xaf, 0x1b, + 0x01, 0x80, 0x04, 0xff, 0xfb, 0x10, 0x00, 0x1a, 0x6b, 0x9f, 0x02, 0x14, + 0xcf, 0x4b, 0x23, 0xb7, 0x6f, 0x27, 0xf0, 0x07, 0x07, 0x07, 0x07, 0xd9, + 0x35, 0x55, 0x55, 0x70, 0x55, 0xe9, 0xd4, 0xa1, 0x37, 0xcf, 0xc6, 0x55, + 0x08, 0x55, 0x59, 0xfd, 0x73, 0x4f, 0x6d, 0xff, 0xff, 0x01, 0xff, 0xff, + 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xb9, 0x00, 0x80, 0x00, 0x01, 0x11, 0x11, + 0x11, 0x00, 0x8f, 0x84, 0x63, 0x80, 0x00, 0x00, 0x4d, 0x1a, 0xfb, 0x20, + 0x00, 0x1a, 0xff, 0xfd, 0x40, 0x00, 0x04, 0xdf, 0xff, 0x00, 0xff, 0xb4, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x4c, 0x03, 0xdb, 0xb7, 0x6f, + 0x27, 0x07, 0x07, 0xc1, 0x07, 0x07, 0xfc, 0x73, 0x55, 0x55, 0x55, 0xe9, + 0xc0, 0xd4, 0xa1, 0x37, 0xdf, 0xa5, 0x55, 0x55, 0x6a, 0x80, 0x4f, 0x55, + 0x55, 0x6d, 0xff, 0xff, 0xff, 0xff, 0x04, 0xff, 0xfa, 0x00, 0x00, 0x2f, + 0xb9, 0x80, 0x00, 0x02, 0x08, 0xaa, 0xaa, 0xaa, 0x81, 0x4f, 0x62, 0xfb, + 0x0c, 0x10, 0x00, 0x00, 0x1a, 0x24, 0x29, 0xa1, 0x00, 0x20, 0x02, 0xbf, + 0x51, 0xa8, 0x42, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x08, 0xdf, 0x42, 0x22, + 0xc6, 0x87, 0x3f, 0xf8, 0x07, 0x07, 0x07, 0x07, 0x01, 0xc7, 0x35, 0x55, + 0x30, 0x55, 0x55, 0xe9, 0xd4, 0x55, 0x55, 0x39, 0xff, 0x02, 0x93, 0x55, + 0x55, 0x6c, 0xfa, 0x65, 0x57, 0x6d, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfa, 0x00, 0x00, 0x44, 0x2f, 0xb9, 0x80, 0x00, 0x0b, 0x89, 0xf4, 0x4f, + 0x81, 0x62, 0xc2, 0x01, 0x10, 0x00, 0x02, 0xbf, 0x11, 0x00, 0xd4, 0x00, + 0x4a, 0xaa, 0xaa, 0x82, 0x00, 0x00, 0x40, 0x8f, 0x52, 0xfb, 0xa8, 0x42, + 0x00, 0x00, 0x01, 0x7f, 0xcf, 0xaa, 0x8a, 0xc6, 0x87, 0x3f, 0x07, 0x07, + 0xe0, 0x07, 0x07, 0x01, 0xfc, 0x73, 0x55, 0x55, 0x55, 0xc0, 0xe9, 0xd4, + 0x55, 0x55, 0x59, 0xff, 0x73, 0x55, 0x08, 0x53, 0x7d, 0xf9, 0x35, 0x57, + 0x6d, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xb9, + 0x12, 0x80, 0x00, 0x0a, 0x89, 0xfc, 0xbf, 0x62, 0x80, 0x04, 0x04, 0xb2, + 0x00, 0x00, 0x4d, 0x11, 0xb1, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4c, 0x52, 0x01, 0xff, 0xff, 0xdb, 0x81, 0x00, 0x00, 0xbf, 0xac, + 0xff, 0x7c, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, 0x06, 0x06, 0xc7, 0x35, + 0x55, 0x55, 0x55, 0xe9, 0xd4, 0x55, 0x01, 0x6a, 0xfc, 0x73, 0x55, 0x55, + 0x7f, 0xf9, 0x5f, 0x00, 0x55, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, + 0x11, 0x00, 0x00, 0x2f, 0xb9, 0x80, 0x00, 0x0a, 0x8b, 0x81, 0x72, 0x10, + 0x1b, 0xf8, 0x00, 0x00, 0x08, 0x5b, 0x21, 0x00, 0x00, 0xe9, 0x00, 0x1a, + 0xfd, 0x8b, 0x1b, 0xbf, 0x49, 0xaf, 0xbb, 0x93, 0xb7, 0x6f, 0x27, 0x07, + 0xe0, 0x07, 0x07, 0x07, 0xff, 0xfd, 0x93, 0x55, 0x55, 0x60, 0x55, 0xe9, + 0xd4, 0x55, 0x6c, 0xfc, 0x63, 0x55, 0x08, 0x55, 0x9f, 0xc7, 0x35, 0x5f, + 0x6d, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xb9, + 0x10, 0x80, 0x00, 0x0a, 0x8b, 0xfb, 0xcf, 0xff, 0xb2, 0x00, 0x00, 0x8f, + 0xff, 0x40, 0x00, 0x01, 0xbf, 0xff, 0x00, 0xfc, 0x20, 0x08, 0x88, 0x88, + 0x88, 0x88, 0x20, 0x04, 0x00, 0x08, 0xfd, 0x42, 0xbf, 0x1b, 0x00, 0x00, + 0x7f, 0xaf, 0xc2, 0xa2, 0xc6, 0x87, 0x3f, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x03, 0xc7, 0x35, 0x55, 0x55, 0x55, 0xca, 0xe9, 0xd4, 0x7e, 0xfa, 0x91, + 0xaf, 0x67, 0x55, 0x00, 0x55, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, + 0x11, 0x00, 0x00, 0x2f, 0xb9, 0x80, 0x00, 0x0b, 0x8b, 0x00, 0xb2, 0xaf, + 0xff, 0x40, 0x02, 0xdf, 0xff, 0xb2, 0x14, 0x00, 0x00, 0x2c, 0x29, 0x2c, + 0x62, 0x80, 0x00, 0x08, 0x02, 0xcf, 0x80, 0x2b, 0x12, 0xfa, 0x00, 0x01, + 0x7f, 0xbf, 0x72, 0x52, 0xc6, 0x87, 0x3f, 0x07, 0x07, 0xe0, 0x07, 0x07, + 0x03, 0xfc, 0x73, 0x55, 0x55, 0x55, 0xc0, 0xe9, 0xd4, 0x7f, 0xf9, 0x35, + 0x55, 0x55, 0xcf, 0x40, 0xa3, 0x6f, 0x55, 0x6d, 0xff, 0xff, 0xff, 0xff, + 0x04, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xb9, 0x80, 0x00, 0x40, 0x0a, 0x8a, + 0xda, 0x22, 0xcf, 0xfa, 0x00, 0x1a, 0x82, 0x53, 0x08, 0xff, 0xf4, 0x00, + 0x8f, 0x62, 0xb1, 0x02, 0x00, 0x00, 0xaf, 0xa0, 0x01, 0x8c, 0x09, 0xb2, + 0x1f, 0x00, 0x04, 0xdf, 0x72, 0x52, 0xc6, 0x87, 0x3f, 0xf8, 0x07, 0x07, + 0x07, 0x07, 0x04, 0x93, 0x55, 0x55, 0x60, 0x55, 0xe9, 0xd4, 0x9f, 0xe7, + 0x35, 0x55, 0x57, 0x40, 0xdf, 0x6f, 0x55, 0x55, 0x6d, 0xff, 0xff, 0xff, + 0x02, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x2d, 0xb9, 0x40, 0x00, 0x00, 0x04, + 0x88, 0x88, 0x88, 0x88, 0x40, 0x08, 0x08, 0xff, 0xb1, 0x00, 0x8d, 0x83, + 0x01, 0xaf, 0xa0, 0x20, 0x01, 0xaf, 0x31, 0xff, 0xf2, 0x00, 0x00, 0x2d, + 0x00, 0xb2, 0x00, 0x02, 0x48, 0xaa, 0xa8, 0x20, 0x00, 0x7f, 0x1a, 0x7a, + 0x5a, 0xc6, 0x87, 0x3f, 0x07, 0x07, 0xe1, 0x07, 0x07, 0x05, 0xc6, 0x55, + 0x55, 0x55, 0xe9, 0x80, 0xd4, 0xbf, 0xc7, 0x35, 0x55, 0x37, 0xef, 0x93, + 0x80, 0x6f, 0x55, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x00, 0xc2, 0x00, + 0x00, 0x08, 0xdf, 0xff, 0xfb, 0x20, 0x10, 0x00, 0x00, 0x00, 0xe9, 0x00, + 0x1b, 0xda, 0x20, 0x20, 0x00, 0x8f, 0x49, 0x80, 0x00, 0x00, 0x18, 0x20, + 0x00, 0x00, 0xad, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x00, 0x00, 0x00, 0x08, + 0xd4, 0x00, 0x00, 0x01, 0x11, 0x10, 0x3f, 0x00, 0x01, 0x29, 0x6a, 0xd4, + 0xa7, 0x5f, 0x17, 0xf0, 0x07, 0x07, 0x07, 0x07, 0xff, 0xff, 0xf7, 0x55, + 0x30, 0x55, 0x55, 0xe9, 0xd4, 0xcf, 0xc7, 0x66, 0x66, 0x04, 0x69, 0xff, + 0xa6, 0x66, 0x65, 0x5e, 0x6d, 0xff, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x10, + 0x00, 0x00, 0x00, 0x18, 0x4c, 0xff, 0xa2, 0xd1, 0xb9, 0x00, 0x00, 0x4b, + 0x01, 0x20, 0x00, 0x00, 0x14, 0xdf, 0xff, 0xb4, 0x84, 0x04, 0x28, 0xdf, + 0xff, 0xff, 0xfb, 0x71, 0x00, 0x48, 0x20, 0x04, 0x41, 0x01, 0x01, 0x2a, + 0xff, 0xff, 0xff, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x07, + 0xc1, 0x07, 0x01, 0xfa, 0x35, 0x55, 0x55, 0x55, 0xe9, 0x80, 0xd2, 0x57, + 0xdf, 0xcb, 0xab, 0xbb, 0xac, 0xff, 0x10, 0xfc, 0xbb, 0x93, 0x65, 0x33, + 0x5d, 0xff, 0xff, 0x00, 0xff, 0xff, 0xfa, 0x88, 0x88, 0x88, 0x88, 0x8c, + 0x34, 0xff, 0xa8, 0xca, 0xaa, 0xbb, 0x82, 0xdf, 0xff, 0x42, 0xb8, 0x85, + 0xdf, 0xff, 0xff, 0xfb, 0x2a, 0x8a, 0x00, 0x8d, 0xfa, 0x84, 0x42, 0x44, + 0x8b, 0xff, 0xff, 0x7f, 0xff, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, + 0xe0, 0x07, 0x07, 0x02, 0xfd, 0x75, 0x55, 0x55, 0x55, 0x09, 0x55, 0x53, + 0x33, 0x35, 0xc9, 0x39, 0xef, 0x05, 0x41, 0xa3, 0x62, 0x55, 0x55, 0x33, + 0x79, 0xae, 0x7d, 0xfb, 0x45, 0x97, 0x4f, 0x07, 0x04, 0xdd, 0x07, 0x07, + 0xfe, 0x77, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0x00, 0xa3, 0x55, + 0x55, 0x55, 0x55, 0x69, 0xcb, 0x96, 0xa4, 0xc9, 0x3a, 0x05, 0xfe, 0x93, + 0x62, 0x55, 0x37, 0x3f, 0x9b, 0xcf, 0x7d, 0x45, 0x97, 0x4f, 0x07, 0x07, + 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x80, 0x07, 0xc7, + 0x35, 0x55, 0x55, 0x37, 0xcf, 0xff, 0x05, 0xfc, 0x73, 0x55, 0x55, 0x3c, + 0x05, 0xfd, 0xa1, 0x07, 0x55, 0x53, 0x37, 0xac, 0xef, 0x85, 0x4d, 0x97, + 0xff, 0x4f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, + 0x07, 0x07, 0xff, 0xfc, 0x63, 0x55, 0x21, 0x53, 0x7c, 0x01, 0xb6, 0x35, + 0x55, 0x3c, 0x6e, 0x02, 0x55, 0x55, 0x55, 0x53, 0x37, 0xad, 0x95, 0xff, + 0x03, 0xdb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0x96, 0x56, 0xff, 0x87, 0x3f, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x04, 0xa7, + 0x33, 0x37, 0xcf, 0x84, 0x01, 0xf9, 0x35, 0x55, 0x39, 0x05, 0xfc, 0x35, + 0x08, 0x55, 0x55, 0x37, 0x9d, 0x06, 0xff, 0xd4, 0x00, 0x0f, 0x00, 0x00, + 0x00, 0x2b, 0x8f, 0x47, 0x77, 0x2f, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xc4, 0x07, 0x02, 0xfc, 0xa9, 0xac, 0xcb, 0x73, 0x55, + 0x20, 0x56, 0xbf, 0x04, 0xfa, 0x35, 0x55, 0x53, 0x7c, 0x81, 0x07, 0xff, + 0xfd, 0xa1, 0x00, 0x00, 0x04, 0x2d, 0xff, 0x57, 0x8f, 0x47, 0x07, 0x07, + 0x07, 0x07, 0x07, 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x95, 0x55, + 0x10, 0x53, 0x69, 0xcd, 0x03, 0xf9, 0x55, 0x55, 0x59, 0x40, 0xdf, 0x07, + 0xff, 0xff, 0xf8, 0x00, 0x00, 0x2b, 0xff, 0x8f, 0x47, 0x77, 0x2f, 0x07, + 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0xd7, + 0x00, 0x55, 0x55, 0x33, 0x67, 0x77, 0x79, 0x99, 0x99, 0x06, 0x99, 0x97, + 0x55, 0x55, 0xae, 0x07, 0x01, 0xfa, 0x1f, 0x00, 0x00, 0x2f, 0x87, 0x3f, + 0x77, 0x2f, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xc0, 0x07, 0x02, 0xf9, 0x35, 0x55, 0x55, 0x53, 0x33, 0x16, 0x55, 0x55, + 0x55, 0xc9, 0x6a, 0x07, 0x02, 0xfa, 0x1f, 0x00, 0x00, 0x2f, 0x7f, 0x37, + 0x77, 0x2f, 0x07, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xc1, 0x07, 0x02, 0xfc, 0x65, 0x55, 0x55, 0x55, 0xe9, 0x98, 0xd1, 0x53, + 0x9f, 0x07, 0x02, 0xfa, 0x00, 0x00, 0x67, 0x2f, 0x7f, 0x35, 0xfd, 0xdd, + 0x77, 0x2f, 0x77, 0xfe, 0x2f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0xdd, + 0x70, 0xdf, 0x07, 0x07, 0x03, 0x93, 0x55, 0x55, 0x55, 0xcc, 0xe9, 0xd1, + 0x39, 0xdf, 0x07, 0x02, 0xfa, 0x00, 0x01, 0x00, 0x2f, 0xff, 0xb8, 0x88, + 0x88, 0x8a, 0x51, 0x00, 0xfd, 0xa8, 0x88, 0x88, 0x8b, 0xff, 0xff, 0xb8, + 0x00, 0x44, 0x44, 0x8a, 0xdb, 0x8c, 0xff, 0xd8, 0x88, 0x23, 0x88, 0x88, + 0xe9, 0x88, 0x88, 0x8f, 0x49, 0xa1, 0x04, 0x8a, 0xab, 0xdf, 0xff, 0xff, + 0xaa, 0x8a, 0xdf, 0x28, 0xff, 0xfd, 0x6a, 0xb8, 0x01, 0x8c, 0xff, 0xff, + 0x0b, 0xff, 0xff, 0xff, 0xd8, 0x01, 0x8d, 0x2a, 0x11, 0x16, 0x88, 0x8a, + 0xff, 0x39, 0x8a, 0x42, 0x71, 0x8b, 0x40, 0xf8, 0x55, 0x88, 0xaf, 0xff, + 0xff, 0xfb, 0x84, 0x07, 0x44, 0x48, 0xaf, 0xb8, 0xdf, 0x2a, 0x0a, 0xc6, + 0x84, 0x82, 0xc6, 0x55, 0x55, 0x55, 0xe9, 0x55, 0x55, 0x30, 0x53, 0x7c, + 0x0f, 0x03, 0xfa, 0x00, 0x00, 0x2f, 0x00, 0xff, 0xb2, 0x00, 0x00, 0x01, + 0xaf, 0xff, 0xff, 0x00, 0xfd, 0x81, 0x00, 0x00, 0x2b, 0xff, 0xb4, 0x20, + 0x80, 0x91, 0x22, 0x0a, 0xff, 0xb1, 0x00, 0x00, 0x00, 0x84, 0xe9, 0x00, + 0x00, 0x1c, 0xa2, 0xb4, 0x02, 0x28, 0x20, 0xbf, 0xff, 0xaa, 0x1a, 0xdf, + 0xff, 0xff, 0xa1, 0x08, 0x00, 0x00, 0x18, 0xb4, 0x01, 0x0a, 0xff, 0xff, + 0x0b, 0xff, 0xff, 0xff, 0xa0, 0x01, 0x8d, 0x2a, 0x11, 0x0a, 0x00, 0x01, + 0xbf, 0xb2, 0xd9, 0xaf, 0x39, 0xa1, 0x08, 0x00, 0x00, 0x1b, 0xb0, 0x55, + 0x00, 0x2b, 0xff, 0x23, 0xfb, 0x42, 0x01, 0x04, 0x20, 0xbf, 0x31, 0x19, + 0xc1, 0xd4, 0xa6, 0xe9, 0x35, 0x55, 0x55, 0x55, 0xe9, 0x18, 0x55, 0x55, + 0x9f, 0x0f, 0x03, 0xfa, 0x00, 0x00, 0x01, 0x2f, 0xff, 0xfc, 0x40, 0x00, + 0x00, 0x2b, 0x41, 0x00, 0xda, 0x20, 0x02, 0xcf, 0xfb, 0x20, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x08, 0xff, 0x80, 0x00, 0x00, 0x46, 0x00, 0xe9, + 0x00, 0x00, 0x1a, 0x0a, 0x9b, 0x2b, 0x40, 0xff, 0xa9, 0x02, 0xbf, 0xff, + 0xff, 0xff, 0xfb, 0x00, 0x20, 0x02, 0xaf, 0xfd, 0x80, 0x00, 0x00, 0x04, + 0x50, 0xdf, 0x99, 0xff, 0x01, 0x1a, 0xdf, 0xfb, 0x20, 0x11, 0x00, 0x00, + 0x00, 0xe9, 0x00, 0x8f, 0xfc, 0x39, 0x43, 0x1a, 0x41, 0xfb, 0x20, 0x02, + 0xbf, 0xa9, 0x4c, 0x03, 0x0a, 0xff, 0xb2, 0x00, 0x00, 0x01, 0x0a, 0x31, + 0xe0, 0x19, 0xd4, 0xa6, 0xfc, 0x63, 0x55, 0x55, 0x55, 0x8c, 0xe9, 0x55, + 0x57, 0xdf, 0x0f, 0x03, 0xfa, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xa0, + 0x00, 0x00, 0x02, 0x00, 0xbf, 0xff, 0xff, 0xfd, 0x40, 0x08, 0xff, 0xd4, + 0x00, 0x00, 0x02, 0x8a, 0xba, 0x82, 0x10, 0x02, 0xfd, 0x00, 0x40, 0x14, + 0x88, 0x82, 0x00, 0x00, 0x48, 0xa8, 0x00, 0x20, 0x04, 0xff, 0x80, 0x00, + 0x01, 0x48, 0x88, 0x00, 0x42, 0x10, 0x00, 0x02, 0xbf, 0xff, 0xa0, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x02, 0x01, 0xff, 0xff, + 0xb1, 0x00, 0x00, 0x00, 0xbf, 0x91, 0x04, 0xfa, 0x10, 0x00, 0x00, 0x2f, + 0x69, 0x00, 0x02, 0x02, 0x88, 0x88, 0x8a, 0x84, 0x10, 0x4d, 0x3a, 0x02, + 0x80, 0x3a, 0x40, 0x08, 0xfd, 0x40, 0x14, 0x8a, 0x82, 0x04, 0x00, 0x00, + 0x4a, 0xa8, 0x21, 0xa9, 0x00, 0x28, 0x07, 0xab, 0xa8, 0x41, 0x00, 0x2f, + 0x39, 0x21, 0xd4, 0x82, 0xa6, 0xfe, 0x93, 0x55, 0x55, 0x55, 0xe9, 0x55, + 0x60, 0x59, 0x17, 0x04, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0x00, 0xff, 0xa1, + 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0x14, 0xfd, 0x40, 0x1a, 0xa9, 0x2b, + 0x01, 0xa4, 0x00, 0x00, 0xdb, 0x12, 0xaf, 0xff, 0xf4, 0x00, 0x00, 0xbf, + 0x01, 0xff, 0xf8, 0x12, 0xdf, 0x80, 0x00, 0x02, 0x61, 0x00, 0x81, 0x00, + 0x00, 0x8f, 0xff, 0xa0, 0x00, 0x08, 0x88, 0x09, 0xff, 0xff, 0x80, 0x71, + 0xb2, 0x00, 0x00, 0x2b, 0x00, 0x4f, 0x39, 0xf4, 0xc1, 0x2f, 0x69, 0x2c, + 0x08, 0xa2, 0x0b, 0xff, 0xb1, 0x39, 0x2c, 0xff, 0xff, 0x00, 0xfd, 0x40, + 0x08, 0xfb, 0x12, 0xaf, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xfa, + 0x12, 0xcb, 0x00, 0x00, 0x02, 0xbf, 0xff, 0xff, 0xfa, 0x40, 0x1b, 0xff, + 0x38, 0xff, 0xff, 0xe9, 0xd4, 0xa7, 0xc6, 0x35, 0x55, 0x2c, 0x55, 0x55, + 0xe9, 0x5a, 0x17, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xa1, + 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xfd, 0x40, 0x1a, 0xff, 0x80, + 0x20, 0x00, 0x8f, 0x02, 0x80, 0x88, 0x1b, 0xff, 0xff, 0x08, 0xf4, 0x00, + 0x00, 0xbf, 0x19, 0xaf, 0x80, 0x00, 0x00, 0x02, 0xdf, 0xff, 0xff, 0xd4, + 0x00, 0x00, 0x4d, 0x08, 0xff, 0xa0, 0x00, 0x08, 0x0a, 0xff, 0x80, 0x02, + 0x01, 0xff, 0xff, 0xb2, 0x01, 0x00, 0x00, 0x1b, 0x91, 0xb0, 0xc2, 0x2f, + 0x69, 0x2c, 0xfb, 0x4a, 0xff, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x04, 0xcf, + 0xff, 0xfd, 0x40, 0x00, 0x08, 0xf8, 0x1a, 0xff, 0xff, 0xd4, 0x00, 0x01, + 0x05, 0xbf, 0xff, 0xff, 0xa0, 0xa8, 0x0c, 0xd8, 0xd3, 0xe0, 0xb2, 0xc6, + 0x83, 0xf9, 0x35, 0x55, 0x55, 0x55, 0xb0, 0xe9, 0x6c, 0x17, 0x04, 0xfa, + 0x00, 0x00, 0x2f, 0x00, 0xff, 0xff, 0xa1, 0x01, 0x20, 0x00, 0x00, 0x8f, + 0x00, 0xff, 0xfd, 0x40, 0x1a, 0xff, 0x40, 0x00, 0x4f, 0x80, 0x02, 0xf8, + 0xaa, 0xaf, 0xff, 0xff, 0xf4, 0x00, 0x20, 0x00, 0xbf, 0xa9, 0xaf, 0x80, + 0x00, 0x02, 0xdf, 0x80, 0x69, 0x00, 0x00, 0x2c, 0xff, 0xa0, 0x00, 0x08, + 0x80, 0x0a, 0xff, 0x80, 0x02, 0xff, 0xff, 0xb2, 0x02, 0x41, 0x20, 0x93, + 0x80, 0x04, 0x00, 0x00, 0x2f, 0x69, 0x80, 0x2d, 0xdc, 0xff, 0xb1, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x4f, 0xff, 0xfd, 0x40, 0x08, 0xfa, 0xaf, 0xff, + 0x00, 0xff, 0xd4, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xd8, 0x5c, 0xb4, 0x0d, + 0xaa, 0xd3, 0xab, 0xb7, 0xff, 0xff, 0x05, 0xfc, 0x73, 0x55, 0x55, 0x55, + 0xe9, 0x6d, 0x17, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xa1, + 0x00, 0x02, 0xb1, 0x00, 0x00, 0x08, 0xff, 0xfd, 0x40, 0x02, 0x1a, 0xff, + 0x80, 0x00, 0x18, 0xdd, 0x06, 0xf4, 0x10, 0x00, 0x00, 0xbf, 0xa1, 0xdf, + 0x80, 0x00, 0x02, 0x00, 0xdf, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x4c, 0xff, + 0x10, 0xa0, 0x00, 0x08, 0x13, 0x80, 0x02, 0xff, 0xff, 0x00, 0xb2, 0x02, + 0xa0, 0x00, 0x02, 0xcf, 0xff, 0xfc, 0x06, 0x20, 0x1b, 0x00, 0x00, 0x2f, + 0x69, 0x2b, 0xfd, 0x01, 0xdf, 0xff, 0xff, 0xb1, 0x01, 0xb2, 0x00, 0x99, + 0x08, 0xfd, 0x40, 0x08, 0xfd, 0x71, 0xd4, 0x00, 0x01, 0x57, 0xbf, 0xcc, + 0x8c, 0x21, 0xff, 0x6a, 0x51, 0xd4, 0x82, 0xa7, 0xff, 0xb5, 0x55, 0x55, + 0x55, 0xe9, 0x6d, 0xc0, 0x17, 0x04, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0xff, + 0x00, 0xa1, 0x01, 0xfa, 0x10, 0x00, 0x00, 0xaf, 0xfd, 0x00, 0x40, 0x1a, + 0xff, 0x80, 0x00, 0x00, 0x14, 0x8b, 0x42, 0xbc, 0x04, 0xf4, 0x00, 0x00, + 0xbf, 0xb2, 0x80, 0x00, 0x00, 0x02, 0xdf, 0xff, 0xff, 0xd4, 0x00, 0x00, + 0x04, 0x8f, 0xff, 0xa0, 0x00, 0x08, 0x23, 0x80, 0x02, 0x04, 0xff, 0xff, + 0xb2, 0x02, 0xc2, 0x6a, 0xfa, 0x00, 0x0c, 0x4c, 0x00, 0x00, 0x2f, 0x69, + 0x2b, 0xf4, 0x4f, 0x00, 0xff, 0xff, 0xb1, 0x01, 0xfb, 0x10, 0x00, 0x00, + 0x10, 0xaf, 0xfd, 0x40, 0x7a, 0xff, 0xd4, 0x00, 0x01, 0x40, 0xbf, 0x39, + 0xf8, 0x00, 0x00, 0x01, 0x48, 0xab, 0x78, 0xcf, 0x72, 0x52, 0xc6, 0x86, + 0xe9, 0x35, 0x55, 0x06, 0x55, 0x55, 0x55, 0x55, 0x5c, 0x07, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xa1, 0x01, 0xff, 0x00, 0xa1, 0x00, + 0x00, 0x1a, 0xfd, 0x40, 0x1a, 0xff, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x8a, 0xcf, 0x84, 0x02, 0xf4, 0x00, 0x00, 0xbf, 0xc2, 0x80, 0x00, + 0x40, 0x04, 0x89, 0x81, 0x00, 0x01, 0xaf, 0xff, 0xa0, 0x20, 0x00, 0x08, + 0x32, 0xff, 0x80, 0x02, 0xff, 0xff, 0x00, 0xb2, 0x02, 0xda, 0x00, 0x00, + 0x2d, 0xff, 0xd4, 0x04, 0x01, 0xbc, 0x00, 0x00, 0x2f, 0x69, 0x00, 0x04, + 0x00, 0xaa, 0xaa, 0xaa, 0x81, 0x4f, 0xff, 0xff, 0xb1, 0x00, 0x01, 0xdf, + 0xa1, 0x00, 0x00, 0x1a, 0xfd, 0x40, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, + 0xd4, 0x00, 0x01, 0x40, 0xbf, 0xc1, 0xfc, 0x10, 0x00, 0x00, 0x00, 0x01, + 0x3c, 0x28, 0xad, 0x6a, 0x4a, 0xc6, 0x85, 0xfe, 0x93, 0x03, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x5a, 0x0f, 0x04, 0x00, 0xfa, 0x00, 0x00, 0x2f, 0xff, + 0xff, 0xa1, 0x01, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x02, 0xbf, 0x40, 0x1a, + 0xa8, 0x7a, 0x00, 0xe9, 0x2a, 0x02, 0xf4, 0x00, 0x00, 0x40, 0xbf, 0xc2, + 0x80, 0x00, 0x02, 0xbb, 0xba, 0xa4, 0x03, 0x10, 0x00, 0x08, 0xff, 0xff, + 0xa0, 0xda, 0x6a, 0x00, 0x02, 0xff, 0xff, 0xb2, 0x02, 0xdc, 0x20, 0x00, + 0x00, 0x1a, 0xff, 0xb0, 0x04, 0xdc, 0x00, 0x00, 0x2f, 0x88, 0x69, 0x00, + 0x00, 0x00, 0xe9, 0x4f, 0xff, 0xff, 0x00, 0xb1, 0x01, 0xdf, 0xf8, 0x00, + 0x00, 0x01, 0xbf, 0x01, 0x40, 0x08, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xb1, + 0xa7, 0xc2, 0xa0, 0x03, 0x04, 0xaf, 0x62, 0x42, 0xc6, 0x80, 0x85, 0xd9, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x59, 0xc0, 0x17, 0x04, 0xfa, 0x00, 0x00, + 0x2f, 0xff, 0xff, 0x00, 0xa1, 0x01, 0xff, 0xfd, 0x80, 0x00, 0x00, 0x2b, + 0x00, 0x40, 0x1a, 0xff, 0xff, 0xa2, 0x00, 0x00, 0x00, 0xa1, 0xe9, 0x8f, + 0x01, 0xf4, 0x00, 0x00, 0xbf, 0xc9, 0x00, 0xff, 0x80, 0x00, 0x01, 0x22, + 0x21, 0x00, 0x00, 0x01, 0x02, 0xad, 0xff, 0xff, 0xa0, 0x00, 0x08, 0x72, + 0x00, 0xff, 0x80, 0x02, 0xff, 0xff, 0xb2, 0x02, 0xdd, 0x00, 0x80, 0x00, + 0x04, 0xdf, 0x40, 0x0a, 0xfc, 0x00, 0x22, 0x00, 0x2f, 0x69, 0x00, 0x00, + 0x00, 0xe9, 0x4f, 0x04, 0xff, 0xff, 0xb1, 0x01, 0xdf, 0x92, 0x2b, 0x40, + 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x00, 0x01, 0x4b, 0xbf, 0xc2, + 0xda, 0x20, 0x03, 0x18, 0x62, 0x42, 0xc0, 0xc6, 0x85, 0xfe, 0xa6, 0x35, + 0x55, 0x55, 0x55, 0x30, 0x57, 0xef, 0x0f, 0x03, 0xfa, 0x00, 0x00, 0x2f, + 0x00, 0xff, 0xff, 0xa1, 0x01, 0xff, 0xff, 0xd4, 0x00, 0x00, 0x00, 0x02, + 0x20, 0x1a, 0xff, 0xff, 0xfc, 0x82, 0x04, 0x11, 0x00, 0x00, 0x00, 0x00, + 0xb1, 0xff, 0xf4, 0x12, 0x00, 0x00, 0xbf, 0xc9, 0xff, 0x80, 0x7a, 0x00, + 0x22, 0x02, 0xad, 0x69, 0xa0, 0x00, 0x08, 0x72, 0xff, 0x00, 0x80, 0x02, + 0xff, 0xff, 0xb2, 0x02, 0xdf, 0xb1, 0x00, 0x00, 0x01, 0xac, 0x10, 0x2c, + 0xfc, 0x00, 0x00, 0x40, 0x2f, 0x69, 0x00, 0x04, 0xaa, 0xaa, 0xa8, 0x40, + 0x00, 0x4f, 0xff, 0xff, 0xb1, 0x01, 0xdf, 0xff, 0xd4, 0x00, 0x00, 0x00, + 0x02, 0x20, 0x08, 0xff, 0xff, 0xff, 0x90, 0xb1, 0x01, 0xbf, 0xc2, 0xff, + 0xca, 0x21, 0x10, 0x07, 0x00, 0x00, 0x00, 0x01, 0xaf, 0x9b, 0x73, 0xb7, + 0x80, 0x02, 0xfc, 0x96, 0x33, 0x35, 0x53, 0x35, 0xcf, 0xc0, 0x17, 0x03, + 0xfa, 0x00, 0x00, 0x2f, 0xff, 0xff, 0x20, 0xa1, 0x01, 0x09, 0x40, 0x00, + 0x00, 0x00, 0x1a, 0x80, 0x12, 0xda, 0x84, 0x21, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0xff, 0xff, 0xf4, 0x00, 0x00, 0xbf, 0x7a, 0x80, 0x01, 0x00, 0x02, + 0x44, 0x42, 0x00, 0x00, 0x2b, 0x19, 0x10, 0xa0, 0x00, 0x08, 0x72, 0xff, + 0x80, 0x02, 0xff, 0x00, 0xff, 0xb2, 0x02, 0xdf, 0xf4, 0x00, 0x00, 0x88, + 0x03, 0x00, 0x8f, 0xfc, 0x00, 0x00, 0x2f, 0x69, 0x2b, 0x00, 0xf8, 0x4f, + 0xff, 0xff, 0xb1, 0x01, 0xdf, 0xff, 0x08, 0xfd, 0x40, 0x00, 0x00, 0x7b, + 0xff, 0xd4, 0x00, 0x20, 0x01, 0xbf, 0xc2, 0xff, 0xff, 0xfc, 0xa8, 0x22, + 0x0f, 0x10, 0x00, 0x00, 0x4d, 0x9c, 0x6c, 0xa7, 0x01, 0x03, 0xfa, 0x97, + 0x76, 0x67, 0x79, 0xcf, 0x67, 0x64, 0x01, 0x00, 0x00, 0x2f, 0xff, 0xff, + 0xa1, 0x01, 0x01, 0x04, 0xb2, 0x00, 0x00, 0x00, 0x1a, 0x14, 0xca, 0x40, + 0x00, 0x00, 0x02, 0xcf, 0xff, 0xff, 0xf4, 0x00, 0x00, 0x40, 0xbf, 0x7a, + 0x80, 0x00, 0x04, 0xff, 0xfd, 0x40, 0x22, 0x00, 0x01, 0x99, 0xa0, 0x00, + 0x08, 0x72, 0xff, 0x00, 0x80, 0x02, 0xff, 0xff, 0xb2, 0x02, 0xdf, 0xfa, + 0x00, 0x10, 0x00, 0x21, 0x02, 0xbf, 0xfc, 0x00, 0x00, 0x60, 0x2f, 0x69, + 0x2b, 0xfb, 0xbf, 0xff, 0xff, 0xb1, 0x24, 0x01, 0xdf, 0x11, 0x00, 0x00, + 0x7b, 0xff, 0xd4, 0x30, 0x00, 0x01, 0x61, 0xb2, 0xff, 0xff, 0xfd, 0xa4, + 0x1c, 0x00, 0x00, 0x2b, 0x9e, 0x5e, 0x87, 0xfc, 0xca, 0x30, 0xbc, 0xcf, + 0x1f, 0x04, 0xfa, 0x00, 0x00, 0x2f, 0x08, 0xff, 0xff, 0xa1, 0x01, 0x01, + 0xfb, 0x20, 0x00, 0x08, 0x00, 0x1a, 0xfc, 0xad, 0x03, 0xd4, 0x00, 0x02, + 0x02, 0xbf, 0xff, 0xff, 0xf4, 0x00, 0x00, 0xd1, 0xff, 0x00, 0xff, 0x80, + 0x00, 0x02, 0xdf, 0xff, 0xd2, 0x00, 0x01, 0x00, 0x2b, 0xff, 0xff, 0xa0, + 0x00, 0x08, 0x02, 0x00, 0xff, 0x80, 0x02, 0xff, 0xff, 0xb2, 0x02, 0xdf, + 0x00, 0xfd, 0x40, 0x00, 0x00, 0x04, 0xff, 0xfc, 0x00, 0x30, 0x00, 0x2f, + 0x69, 0x2d, 0xff, 0xff, 0xb1, 0x01, 0x02, 0xdf, 0xff, 0xff, 0xfb, 0x20, + 0x00, 0x7c, 0xd4, 0x14, 0x00, 0x01, 0xbf, 0x39, 0xca, 0x1b, 0xfd, 0x40, + 0x3f, 0x00, 0x2b, 0xbb, 0x93, 0xb7, 0x6f, 0x27, 0x05, 0x00, 0xfa, 0x00, + 0x00, 0x2f, 0xff, 0xff, 0xa1, 0x01, 0x81, 0x02, 0xa1, 0x00, 0x00, 0x1a, + 0xfb, 0x24, 0x03, 0x00, 0xf8, 0x00, 0x02, 0xbf, 0xff, 0xff, 0xf4, 0x00, + 0x40, 0x00, 0xd1, 0xff, 0xff, 0x80, 0x00, 0x02, 0xdf, 0x00, 0xff, 0xfa, + 0x00, 0x00, 0x04, 0xff, 0xff, 0xa0, 0xc2, 0xda, 0x6a, 0x02, 0xff, 0xff, + 0xb2, 0x51, 0xa1, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xfc, 0x00, 0x00, 0x2f, + 0x90, 0x69, 0x00, 0x08, 0x2b, 0xfd, 0xdf, 0xb1, 0x01, 0x48, 0xdf, 0xb1, + 0xb2, 0x00, 0x7c, 0xd4, 0x00, 0x01, 0x48, 0xbf, 0x39, 0xc1, 0x8f, 0x13, + 0x80, 0x00, 0x2b, 0xfc, 0xc3, 0x9b, 0xb7, 0x6f, 0x27, 0x05, 0xfa, 0x00, + 0x02, 0x00, 0x2f, 0xff, 0xff, 0xa1, 0x01, 0xa5, 0x1a, 0x10, 0xfd, 0x20, + 0x4d, 0x02, 0xf8, 0x00, 0x02, 0xcf, 0x02, 0xff, 0xff, 0xf4, 0x00, 0x00, + 0xbf, 0x3a, 0x80, 0x00, 0x00, 0x02, 0xdf, 0xff, 0xfc, 0x20, 0x00, 0x01, + 0x18, 0xbf, 0xff, 0xb1, 0x3b, 0x99, 0x04, 0xff, 0xff, 0x40, 0xb2, 0x51, + 0xd2, 0x00, 0x00, 0x4f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, + 0x80, 0x00, 0x08, 0x80, 0x31, 0xff, 0xff, 0xd4, 0xaf, 0xb1, 0x01, 0xdf, + 0x90, 0xb1, 0xfa, 0x10, 0x7c, 0xd4, 0x00, 0x01, 0xbf, 0x90, 0x39, 0xf2, + 0x08, 0x5a, 0xff, 0x80, 0x00, 0x2b, 0xfc, 0x5a, 0x3a, 0xc6, 0x87, 0x3f, + 0x07, 0xff, 0xfa, 0x01, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xa1, 0x01, 0x03, + 0x01, 0x80, 0x00, 0x1a, 0xff, 0x80, 0x04, 0xbd, 0x01, 0x10, 0xb2, 0x00, + 0x04, 0x01, 0xf4, 0x00, 0x00, 0xbf, 0x80, 0x44, 0x02, 0xdf, 0xff, 0xff, + 0xa0, 0x00, 0x00, 0x02, 0x4d, 0xff, 0xd4, 0x00, 0x00, 0x8d, 0x01, 0xf8, + 0x04, 0x00, 0x0a, 0xff, 0xff, 0xb2, 0x51, 0xfa, 0x00, 0x00, 0x00, 0xaf, + 0xff, 0xfc, 0x00, 0x00, 0x2f, 0xff, 0x08, 0xff, 0x80, 0x00, 0x08, 0x31, + 0xff, 0xfb, 0x40, 0x0a, 0xbf, 0xb1, 0x01, 0xdf, 0xb2, 0xa1, 0x7c, 0xd8, + 0x11, 0x00, 0x01, 0xbf, 0x39, 0xf8, 0x00, 0x4b, 0x51, 0x0f, 0xfb, 0x20, + 0x00, 0x4f, 0x22, 0x02, 0xc6, 0x87, 0xc0, 0x3f, 0x07, 0xff, 0xf8, 0x00, + 0x00, 0x2d, 0xff, 0x08, 0xff, 0xb1, 0x01, 0xdf, 0x02, 0xd8, 0x00, 0x1a, + 0x00, 0xff, 0xa1, 0x00, 0x14, 0xab, 0xbb, 0xba, 0x20, 0x21, 0x00, 0x1b, + 0x01, 0xf4, 0x00, 0x00, 0xbf, 0x42, 0x10, 0xa0, 0x00, 0x02, 0x09, 0xc2, + 0x00, 0x00, 0x08, 0x04, 0xff, 0xfa, 0x10, 0x00, 0x04, 0x01, 0x80, 0x00, + 0x00, 0x2d, 0xff, 0xff, 0xb1, 0x02, 0xdf, 0xff, 0xfc, 0x40, 0x20, 0xd9, + 0xfb, 0x00, 0x00, 0x2f, 0xff, 0xff, 0x00, 0x80, 0x00, 0x04, 0xaa, 0xaa, + 0xaa, 0xaa, 0x82, 0x00, 0x04, 0xdf, 0xb1, 0x01, 0xcf, 0xff, 0xff, 0xff, + 0x09, 0xff, 0xf8, 0x00, 0x08, 0xcc, 0x01, 0xaf, 0x89, 0x00, 0xfa, 0x00, + 0x00, 0x4a, 0xbb, 0xbb, 0xa2, 0x00, 0x3f, 0x01, 0xbf, 0x22, 0x02, 0xc6, + 0x87, 0x3f, 0x07, 0x00, 0xff, 0xd2, 0x00, 0x00, 0x1a, 0xff, 0xff, 0x80, + 0x22, 0x00, 0x8f, 0x02, 0xfd, 0x40, 0x0a, 0x7a, 0x01, 0x06, 0x22, 0x10, + 0x00, 0x01, 0xaf, 0x1c, 0x43, 0x40, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, + 0xfb, 0x20, 0x00, 0x00, 0x00, 0x8d, 0xff, 0xa1, 0x00, 0x00, 0x02, 0x22, + 0x11, 0x20, 0x00, 0x02, 0x79, 0x80, 0x00, 0xaf, 0xd9, 0x00, 0x0a, 0xff, + 0xff, 0xf8, 0x00, 0x00, 0x1b, 0xff, 0x00, 0xfd, 0x40, 0x00, 0x00, 0x01, + 0x11, 0x11, 0x10, 0x00, 0x00, 0x0a, 0xff, 0xa0, 0x00, 0x8f, 0xff, 0xff, + 0x52, 0xff, 0x71, 0x08, 0xca, 0xd2, 0x00, 0x8b, 0xfc, 0x00, 0x10, 0x00, + 0x00, 0x12, 0x21, 0x00, 0x00, 0x1a, 0xfc, 0x2a, 0x0a, 0xc6, 0x87, 0x3f, + 0x07, 0xff, 0xda, 0x00, 0x20, 0x00, 0x00, 0x01, 0x4b, 0xc4, 0x10, 0x00, + 0x20, 0x14, 0xbf, 0x02, 0xc4, 0x0a, 0xff, 0xf4, 0x14, 0x8a, 0x69, 0x00, + 0x00, 0x2a, 0x01, 0xd8, 0x19, 0x04, 0x00, 0xaf, 0xff, 0xff, 0xb4, 0x10, + 0x00, 0x00, 0x28, 0x80, 0x09, 0xb2, 0x00, 0x00, 0x02, 0x8f, 0xfb, 0x40, + 0x80, 0x0a, 0x00, 0x4b, 0xff, 0xff, 0xd4, 0x10, 0x00, 0x00, 0x28, 0xdf, + 0xff, 0xb2, 0x2b, 0xff, 0xfb, 0x41, 0x06, 0x00, 0x00, 0x01, 0x8d, 0xa4, + 0x43, 0x19, 0x2c, 0x00, 0xc4, 0x10, 0x00, 0x14, 0xbf, 0xff, 0xff, 0xff, + 0x10, 0xff, 0xd4, 0x08, 0xd1, 0xd8, 0x20, 0x00, 0x00, 0x01, 0x14, 0xaf, + 0xff, 0xff, 0xfd, 0x40, 0x22, 0x02, 0x7f, 0x02, 0xa9, 0x22, 0xd4, 0xa7, + 0x5f, 0x17, 0x03, 0x01, 0xd8, 0x88, 0x88, 0x88, 0x88, 0x8b, 0xc8, 0xd1, + 0x40, 0xbf, 0x02, 0xfb, 0x2a, 0xff, 0xfa, 0x8c, 0xb8, 0x05, 0x42, 0x11, + 0x12, 0x8a, 0xdf, 0x01, 0xda, 0x1a, 0x0c, 0xaf, 0xff, 0xff, 0xb4, 0xc2, + 0x79, 0xfc, 0x82, 0x00, 0x11, 0x12, 0xaf, 0xff, 0xdb, 0x84, 0x11, 0x11, + 0x50, 0x14, 0x02, 0xc8, 0x53, 0xf4, 0x8f, 0xff, 0xfb, 0x9a, 0x02, 0x8d, + 0xa8, 0xd2, 0xb2, 0xaf, 0x3a, 0xbf, 0x02, 0xff, 0xff, 0xff, 0xff, 0xfd, + 0x28, 0xd1, 0xd8, 0x90, 0x11, 0x84, 0xaf, 0x89, 0xa8, 0xcc, 0x84, 0x21, + 0x1f, 0x11, 0x24, 0xad, 0x3a, 0x1a, 0xc6, 0x87, 0x3f, 0xff, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xfe, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, +}; diff --git a/boards/dk-tm4c129x/qs_weather/images.h b/boards/dk-tm4c129x/qs_weather/images.h new file mode 100644 index 0000000..4d4ef34 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/images.h @@ -0,0 +1,42 @@ +//***************************************************************************** +// +// images.h - The definitions for the images in the images.c file. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __IMAGES_H__ +#define __IMAGES_H__ + +extern const uint8_t g_pui8SunImage[]; +extern const uint8_t g_pui8MoonImage[]; +extern const uint8_t g_pui8CloudyImage[]; +extern const uint8_t g_pui8RainImage[]; +extern const uint8_t g_pui8ThuderStormImage[]; +extern const uint8_t g_pui8SnowImage[]; +extern const uint8_t g_pui8FogImage[]; +extern const uint8_t g_pui8UpTabImage[]; +extern const uint8_t g_pui8DownTabImage[]; +extern const uint8_t g_pui8LeftImage[]; +extern const uint8_t g_pui8RightImage[]; +extern uint8_t g_pui8TIImagePalette[]; +extern uint8_t g_pui8TIImage[]; + +#endif diff --git a/boards/dk-tm4c129x/qs_weather/json.c b/boards/dk-tm4c129x/qs_weather/json.c new file mode 100644 index 0000000..1f71bc7 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/json.c @@ -0,0 +1,843 @@ +//***************************************************************************** +// +// json.c - File to handle json formatted data from websites. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include +#include "utils/ustdlib.h" +#include "utils/lwiplib.h" +#include "eth_client.h" +#include "json.h" +#include "images.h" + +//**************************************************************************** +// +// The locally defined lwIP buffer parsing pointer. +// +//**************************************************************************** +typedef struct +{ + // + // A pbuf pointer from lwIP. + // + struct pbuf *psBuf; + + // + // The current index into the pbuf pointer. + // + uint32_t ui32Idx; +} +tBufPtr; + +//**************************************************************************** +// +// Initialize a buffer parsing pointer. +// +//**************************************************************************** +static void +BufPtrInit(tBufPtr *psBufPtr, struct pbuf *psBuf) +{ + psBufPtr->psBuf = psBuf; + psBufPtr->ui32Idx = 0; +} + +//**************************************************************************** +// +// Get a single byte from a parsing pointer. +// +//**************************************************************************** +static uint8_t +BufData8Get(tBufPtr *psBufPtr) +{ + return(((uint8_t *)psBufPtr->psBuf->payload)[psBufPtr->ui32Idx]); +} + +//***************************************************************************** +// +// Increment a parsing pointer by a given value. +// +//***************************************************************************** +uint32_t +BufPtrInc(tBufPtr *psBufPtr, uint32_t ui32Inc) +{ + psBufPtr->ui32Idx += ui32Inc; + + if(psBufPtr->ui32Idx >= psBufPtr->psBuf->len) + { + psBufPtr->ui32Idx = 0; + + psBufPtr->psBuf = psBufPtr->psBuf->next; + + if(psBufPtr->psBuf == 0) + { + ui32Inc = 0; + } + } + return(ui32Inc); +} + +//***************************************************************************** +// +// Return the image to use for the given icon returned from the weather update. +// +//***************************************************************************** +void +GetImage(char *pcIcon, const uint8_t **ppui8Image, const char **ppcDescription) +{ + static const struct + { + char pcId[2]; + const uint8_t *pui8Image; + const char *pcDescription; + } + pcIconTable[9] = + { + // + // Clear Sky. + // + { "01", g_pui8SunImage, "Clear Sky"}, + + // + // Light Clouds. + // + { "02", g_pui8CloudyImage, "Light Clouds"}, + + // + // Scattered Clouds. + // + { "03", g_pui8CloudyImage, "Scattered Clouds"}, + + // + // Broken Clouds. + // + { "04", g_pui8CloudyImage, "Broken Clouds"}, + + // + // Rain showers. + // + { "09", g_pui8RainImage, "Light Rain"}, + + // + // Rain. + // + { "10", g_pui8RainImage, "Rain"}, + + // + // Thunderstorms. + // + { "11", g_pui8ThuderStormImage, "Thunderstorms"}, + + // + // Snow. + // + { "13", g_pui8SnowImage, "Snow"}, + + // + // Mist/Fog. + // + { "50", g_pui8FogImage, "Mist/Fog"}, + }; + int32_t i32Idx; + + for(i32Idx = 0; i32Idx < 9; i32Idx++) + { + if((pcIcon[0] == pcIconTable[i32Idx].pcId[0]) && + (pcIcon[1] == pcIconTable[i32Idx].pcId[1])) + { + *ppui8Image = pcIconTable[i32Idx].pui8Image; + *ppcDescription = pcIconTable[i32Idx].pcDescription; + break; + } + } +} + +//***************************************************************************** +// +// Compare a string at the current location of a parsing pointer. +// +//***************************************************************************** +uint32_t +CompareString(tBufPtr *psBufPtr, const char *pcField, uint32_t ui32Size) +{ + uint32_t ui32Idx; + + for(ui32Idx = 0; ui32Idx < ui32Size; ui32Idx++) + { + if(BufData8Get(psBufPtr) == pcField[ui32Idx]) + { + if(BufPtrInc(psBufPtr, 1) != 1) + { + break; + } + } + else + { + break; + } + } + + if(ui32Idx == ui32Size) + { + return(0); + } + + return(1); +} + +//***************************************************************************** +// +// This function searches for a field from the JSON data. The field should be +// quoted in the data and immediately follow a '{' character. This can be used +// to also search for sub data in another field if the pointer to the data for +// the parent field. +// +//***************************************************************************** +static uint32_t +GetField(char *pcField, tBufPtr *psBufPtr) +{ + uint32_t ui32Curly, ui32Quote; + int32_t i32NewItem; + + ui32Curly = 0; + i32NewItem = 0; + ui32Quote = 0; + + while(1) + { + if(BufData8Get(psBufPtr) == '{') + { + ui32Curly++; + } + else if(BufData8Get(psBufPtr) == '}') + { + ui32Curly--; + + if(ui32Curly == 1) + { + ui32Quote = 0; + } + } + else if(BufData8Get(psBufPtr) == ',') + { + if((ui32Curly == 1) && ((ui32Quote & 1) == 0)) + { + ui32Quote = 0; + } + } + else if(BufData8Get(psBufPtr) == '"') + { + if((ui32Curly == 1) && (ui32Quote == 0)) + { + i32NewItem = 1; + } + ui32Quote++; + } + + if(BufPtrInc(psBufPtr, 1) != 1) + { + break; + } + + if(i32NewItem) + { + i32NewItem = 0; + if(CompareString(psBufPtr, pcField, ustrlen(pcField)) == 0) + { + while(1) + { + if(BufData8Get(psBufPtr) == ':') + { + if(BufPtrInc(psBufPtr, 1) != 1) + { + break; + } + return(1); + } + + if(BufPtrInc(psBufPtr, 1) != 1) + { + break; + } + } + return(0); + } + } + } + return(0); +} + +//***************************************************************************** +// +// This function searches for a value in a JSON item as an integer. These are +// non-quoted values so if the number is a quoted integer this function returns +// -1. If the value is found then it is returned by this function. +// +//***************************************************************************** +int32_t +GetFieldValueInt(tBufPtr *psBufPtr) +{ + int32_t i32Idx; + char pcTemp[20]; + const char *pEnd; + + i32Idx = 0; + + while(1) + { + // + // Find the end of this item. + // + if((BufData8Get(psBufPtr) == '}') || (BufData8Get(psBufPtr) == ',')) + { + // + // null terminate the string and get the value from the string in + // decimal. + // + pcTemp[i32Idx] = 0; + return(ustrtoul(pcTemp, &pEnd, 10)); + } + + // + // Should not hit a " char or something went wrong. + // + if(BufData8Get(psBufPtr) == '"') + { + break; + } + + // + // Copy the string to the local variable. + // + pcTemp[i32Idx] = BufData8Get(psBufPtr); + + if((pcTemp[i32Idx] == '\r') || (pcTemp[i32Idx] == '\n')) + { + pcTemp[i32Idx] = 0; + } + else + { + i32Idx++; + } + + if(BufPtrInc(psBufPtr, 1) != 1) + { + break; + } + + // + // Number was too large to represent. + // + if(i32Idx >= sizeof(pcTemp)) + { + break; + } + } + return(INVALID_INT); +} + +//***************************************************************************** +// +// This function searches for a value in a JSON item as quoted value. These +// values are quoted values so if the number is not a quoted value this +// function returns -1. If the quoted value is found then it is returned in +// the pcDataDest array. +// +//***************************************************************************** +int32_t +GetFieldValueString(tBufPtr *psBufPtr, char *pcDataDest, uint32_t ui32SizeDest) +{ + int32_t i32OutIdx; + + // + // The value should always start with a " char or something went wrong. + // + if(BufData8Get(psBufPtr) != '"') + { + return(-1); + } + + // + // Skip the initial " char. + // + if(BufPtrInc(psBufPtr, 1) != 1) + { + return(-1); + } + + for(i32OutIdx = 0; i32OutIdx < ui32SizeDest;) + { + // + // Either a '}', ',', or '"' ends an item. + // + if((BufData8Get(psBufPtr) == '}') || + (BufData8Get(psBufPtr) == ',') || + (BufData8Get(psBufPtr) == '"')) + { + // + // Null terminate the string and return. + // + pcDataDest[i32OutIdx] = 0; + return(i32OutIdx); + } + + // + // Continue coping chars into the destination buffer. + // + pcDataDest[i32OutIdx] = BufData8Get(psBufPtr); + + // + // These can occur in the response string and need to be ignored. + // + if((pcDataDest[i32OutIdx] == '\r') || (pcDataDest[i32OutIdx] == '\n')) + { + pcDataDest[i32OutIdx] = 0; + } + else + { + i32OutIdx++; + } + + if(BufPtrInc(psBufPtr, 1) != 1) + { + break; + } + } + + // + // Make sure to null terminate inside the current string. + // + if(i32OutIdx == ui32SizeDest) + { + pcDataDest[i32OutIdx-1] = 0; + return(i32OutIdx - 1); + } + return(-1); +} + +//***************************************************************************** +// +// Fill out the psWeatherReport structure from data returned from the JSON +// query. +// +//***************************************************************************** +int32_t +JSONParseForecast(uint32_t ui32Index, tWeatherReport *psWeatherReport, + struct pbuf *psBuf) +{ + tBufPtr sBufPtr, sBufList, sBufTemp; + char pcCode[4]; + int32_t i32Items,i32Code; + + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Check and see if the request was valid. + // + if(GetField("cod", &sBufPtr) != 0) + { + // + // Check for a 404 not found error. + // + sBufTemp = sBufPtr; + + // + // Check for a 404 not found error. + // + i32Code = GetFieldValueInt(&sBufTemp); + + sBufTemp = sBufPtr; + + if(i32Code != INVALID_INT) + { + if(i32Code == 404) + { + return(-1); + } + } + else if(GetFieldValueString(&sBufTemp, pcCode, sizeof(pcCode)) >= 0) + { + // + // Check for a 404 not found error. + // + if(ustrncmp(pcCode, "404", 3) == 0) + { + return(-1); + } + } + } + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Initialize the number of items found. + // + i32Items = 0; + + if(GetField("list", &sBufPtr) != 0) + { + // + // Save the list pointer. + // + sBufList = sBufPtr; + + // + // Get the humidity. + // + if(GetField("humidity", &sBufPtr) != 0) + { + psWeatherReport->i32Humidity = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32Humidity = INVALID_INT; + } + + // + // Reset the pointer to the start of the list values. + // + sBufPtr = sBufList; + + // + // Get the average daily pressure. + // + if(GetField("pressure", &sBufPtr) != 0) + { + psWeatherReport->i32Pressure = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32Pressure = INVALID_INT; + } + + // + // Reset the pointer to the start of the list values. + // + sBufPtr = sBufList; + + // + // Get the average daily temperature. + // + if(GetField("temp", &sBufPtr) != 0) + { + if(GetField("day", &sBufPtr) != 0) + { + psWeatherReport->i32Temp = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32Temp = INVALID_INT; + } + } + + // + // Reset the pointer to the start of the list values. + // + sBufPtr = sBufList; + + // + // Get the low temperature. + // + if(GetField("temp", &sBufPtr) != 0) + { + if(GetField("min", &sBufPtr) != 0) + { + psWeatherReport->i32TempLow = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32TempLow = INVALID_INT; + } + } + + // + // Reset the pointer to the start of the list values. + // + sBufPtr = sBufList; + + // + // Get the high temperature. + // + if(GetField("temp", &sBufPtr) != 0) + { + if(GetField("max", &sBufPtr) != 0) + { + psWeatherReport->i32TempHigh = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32TempHigh = INVALID_INT; + } + } + // + // Reset the pointer to the start of the list values. + // + sBufPtr = sBufList; + + if(GetField("dt", &sBufPtr) != 0) + { + psWeatherReport->ui32Time = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->ui32Time = 0; + } + } + + return(i32Items); +} + +//***************************************************************************** +// +// Fill out the psWeatherReport structure from data returned from the JSON +// query. +// +//***************************************************************************** +int32_t +JSONParseCurrent(uint32_t ui32Index, tWeatherReport *psWeatherReport, + struct pbuf *psBuf) +{ + tBufPtr sBufPtr, sBufMain, sBufTemp; + char pcIcon[3]; + char pcCode[4]; + int32_t i32Items, i32Code; + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Check and see if the request was valid. + // + if(GetField("cod", &sBufPtr) != 0) + { + sBufTemp = sBufPtr; + + // + // Check for a 404 not found error. + // + i32Code = GetFieldValueInt(&sBufTemp); + + sBufTemp = sBufPtr; + + if(i32Code != INVALID_INT) + { + if(i32Code == 404) + { + return(-1); + } + } + else if(GetFieldValueString(&sBufTemp, pcCode, sizeof(pcCode)) >= 0) + { + // + // Check for a 404 not found error. + // + if(ustrncmp(pcCode, "404", 3) == 0) + { + return(-1); + } + } + } + + // + // Initialize the number of items that have been found. + // + i32Items = 0; + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Find the basic weather description(weather.description). + // + if(GetField("weather", &sBufPtr) != 0) + { + if(GetField("icon", &sBufPtr) != 0) + { + if(GetFieldValueString(&sBufPtr, pcIcon, sizeof(pcIcon)) > 0) + { + // + // Save the image pointer. + // + GetImage(pcIcon, &psWeatherReport->pui8Image, + &psWeatherReport->pcDescription); + + i32Items++; + } + else + { + // + // No image was found. + // + psWeatherReport->pui8Image = 0; + } + } + } + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Find the humidity value(main.humidity). + // + if(GetField("sys", &sBufPtr) != 0) + { + // + // Save the pointer to the data. + // + sBufMain = sBufPtr; + + // + // Get the sunrise time. + // + if(GetField("sunrise", &sBufPtr) != 0) + { + psWeatherReport->ui32SunRise = GetFieldValueInt(&sBufPtr); + + i32Items++; + } + else + { + psWeatherReport->ui32SunRise = 0; + } + + // + // Restore the pointer to the data. + // + sBufPtr = sBufMain; + + // + // Get the sunset time. + // + if(GetField("sunset", &sBufPtr) != 0) + { + psWeatherReport->ui32SunSet = GetFieldValueInt(&sBufPtr); + + i32Items++; + } + else + { + psWeatherReport->ui32SunSet = 0; + } + } + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Get the last update time. + // + if(GetField("dt", &sBufPtr) != 0) + { + psWeatherReport->ui32Time = GetFieldValueInt(&sBufPtr); + + i32Items++; + } + else + { + psWeatherReport->ui32Time = 0; + } + + // + // Reset the pointers. + // + BufPtrInit(&sBufPtr, psBuf); + + // + // Find the humidity value(main.humidity). + // + if(GetField("main", &sBufPtr) != 0) + { + // + // Save the pointer to the main data. + // + sBufMain = sBufPtr; + + if(GetField("humidity", &sBufPtr) != 0) + { + psWeatherReport->i32Humidity = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32Humidity = INVALID_INT; + } + + // + // Reset the buffer pointer to main. + // + sBufPtr = sBufMain; + + // + // Find the current temperature value. + // + if(GetField("temp", &sBufPtr) != 0) + { + psWeatherReport->i32Temp = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32Temp = INVALID_INT; + } + + // + // Reset the buffer pointer to main. + // + sBufPtr = sBufMain; + + // + // Find the current atmospheric pressure. + // + if(GetField("pressure", &sBufPtr) != 0) + { + psWeatherReport->i32Pressure = GetFieldValueInt(&sBufPtr); + i32Items++; + } + else + { + psWeatherReport->i32Pressure = INVALID_INT; + } + } + return(i32Items); +} diff --git a/boards/dk-tm4c129x/qs_weather/json.h b/boards/dk-tm4c129x/qs_weather/json.h new file mode 100644 index 0000000..989912f --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/json.h @@ -0,0 +1,41 @@ +//***************************************************************************** +// +// json.h - The parsing function headers for JSON data from the web server. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __JSON_H__ +#define __JSON_H__ + +#ifndef JSON_H_ +#define JSON_H_ + +#define INVALID_INT ((int32_t)(0x80000000)) + +extern int32_t JSONParseCurrent(uint32_t ui32Index, + tWeatherReport *psWeatherReport, + struct pbuf *psBuf); +extern int32_t JSONParseForecast(uint32_t ui32Index, + tWeatherReport *psWeatherReport, + struct pbuf *psBuf); +#endif + +#endif diff --git a/boards/dk-tm4c129x/qs_weather/lwipopts.h b/boards/dk-tm4c129x/qs_weather/lwipopts.h new file mode 100644 index 0000000..ef7a6d6 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/lwipopts.h @@ -0,0 +1,444 @@ +//***************************************************************************** +// +// lwipopts.h - Configuration file for lwIP +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +// +// NOTE: This file has been derived from the lwIP/src/include/lwip/opt.h +// header file. +// +// For additional details, refer to the original "opt.h" file, and lwIP +// documentation. +// +//***************************************************************************** +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include + +//***************************************************************************** +// +// ---------- Stellaris / lwIP Port Options ---------- +// +//***************************************************************************** +#define HOST_TMR_INTERVAL 100 // default is 0 +//#define DHCP_EXPIRE_TIMER_MSECS (60 * 1000) +//#define LWIP_HTTPD_SSI 1 +//#define LWIP_HTTPD_CGI 1 +#define LWIP_HTTPD_DYNAMIC_HEADERS 1 +//#define EMAC_PHY_CONFIG EMAC_PHY_TYPE_EXTERNAL_RMII +//#define PHY_PHYS_ADDR 1 +#define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN | \ + EMAC_PHY_AN_100B_T_FULL_DUPLEX) +#define PHY_PHYS_ADDR 0 +#define NUM_TX_DESCRIPTORS 8 +#define NUM_RX_DESCRIPTORS 8 + +//***************************************************************************** +// +// ---------- Platform specific locking ---------- +// +//***************************************************************************** +#define SYS_LIGHTWEIGHT_PROT 1 // default is 0 +#define NO_SYS 1 // default is 0 +//#define MEMCPY(dst,src,len) memcpy(dst,src,len) +//#define SMEMCPY(dst,src,len) memcpy(dst,src,len) + +//***************************************************************************** +// +// ---------- Memory options ---------- +// +//***************************************************************************** +//#define MEM_LIBC_MALLOC 0 +#define MEM_ALIGNMENT 4 +#define MEM_SIZE (32 * 1024) +//#define MEMP_OVERFLOW_CHECK 0 +//#define MEMP_SANITY_CHECK 0 +//#define MEM_USE_POOLS 0 +//#define MEMP_USE_CUSTOM_POOLS 0 + +//***************************************************************************** +// +// ---------- Internal Memory Pool Sizes ---------- +// +//***************************************************************************** +#define MEMP_NUM_PBUF 16 // Default 16, was 16 +//#define MEMP_NUM_RAW_PCB 4 +//#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 16 +//#define MEMP_NUM_TCP_PCB_LISTEN 8 +//#define MEMP_NUM_TCP_SEG 16 +//#define MEMP_NUM_REASSDATA 5 +//#define MEMP_NUM_ARP_QUEUE 30 +//#define MEMP_NUM_IGMP_GROUP 8 +#define MEMP_NUM_SYS_TIMEOUT 6 //5 +//#define MEMP_NUM_NETBUF 2 +//#define MEMP_NUM_NETCONN 4 +//#define MEMP_NUM_TCPIP_MSG_API 8 +//#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 16 // Default 16 + +//***************************************************************************** +// +// ---------- ARP options ---------- +// +//***************************************************************************** +//#define LWIP_ARP 1 +//#define ARP_TABLE_SIZE 10 +//#define ARP_QUEUEING 1 +//#define ETHARP_TRUST_IP_MAC 1 + +//***************************************************************************** +// +// ---------- IP options ---------- +// +//***************************************************************************** +//#define IP_FORWARD 0 +//#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 0 // default is 1 +#define IP_FRAG 0 // default is 1 +//#define IP_REASS_MAXAGE 3 +//#define IP_REASS_MAX_PBUFS 10 +//#define IP_FRAG_USES_STATIC_BUF 1 +//#define IP_FRAG_MAX_MTU 1500 +//#define IP_DEFAULT_TTL 255 + +//***************************************************************************** +// +// ---------- ICMP options ---------- +// +//***************************************************************************** +//#define LWIP_ICMP 1 +//#define ICMP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- RAW options ---------- +// +//***************************************************************************** +//#define LWIP_RAW 1 +//#define RAW_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- DHCP options ---------- +// +//***************************************************************************** +#define LWIP_DHCP 1 // default is 0 +//#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) + +//***************************************************************************** +// +// ---------- UPNP options ---------- +// +//***************************************************************************** +//#define LWIP_UPNP 0 + +//***************************************************************************** +// +// ---------- PTPD options ---------- +// +//***************************************************************************** +//#define LWIP_PTPD 0 + +//***************************************************************************** +// +// ---------- AUTOIP options ---------- +// +//***************************************************************************** +#define LWIP_AUTOIP 1 // default is 0 +#define LWIP_DHCP_AUTOIP_COOP ((LWIP_DHCP) && (LWIP_AUTOIP)) + // default is 0 +#define LWIP_DHCP_AUTOIP_COOP_TRIES 5 // default is 9 + +//***************************************************************************** +// +// ---------- SNMP options ---------- +// +//***************************************************************************** +//#define LWIP_SNMP 0 +//#define SNMP_CONCURRENT_REQUESTS 1 +//#define SNMP_TRAP_DESTINATIONS 1 +//#define SNMP_PRIVATE_MIB 0 +//#define SNMP_SAFE_REQUESTS 1 + +//***************************************************************************** +// +// ---------- IGMP options ---------- +// +//***************************************************************************** +//#define LWIP_IGMP 0 + +//***************************************************************************** +// +// ---------- DNS options ----------- +// +//***************************************************************************** +#define LWIP_DNS 1 +#define DNS_TABLE_SIZE 4 +#define DNS_MAX_NAME_LENGTH 256 +#define DNS_MAX_SERVERS 2 +#define DNS_DOES_NAME_CHECK 1 +#define DNS_USES_STATIC_BUF 1 +#define DNS_MSG_SIZE 512 + +//***************************************************************************** +// +// ---------- UDP options ---------- +// +//***************************************************************************** +//#define LWIP_UDP 1 +//#define LWIP_UDPLITE 0 +//#define UDP_TTL (IP_DEFAULT_TTL) + +//***************************************************************************** +// +// ---------- TCP options ---------- +// +//***************************************************************************** +#define LWIP_TCP 1 +//#define TCP_TTL (IP_DEFAULT_TTL) +#define TCP_WND 4096 // default is 2048 +//#define TCP_MAXRTX 12 +//#define TCP_SYNMAXRTX 6 +//#define TCP_QUEUE_OOSEQ 1 +#define TCP_MSS 1500 // default is 128 +//#define TCP_CALCULATE_EFF_SEND_MSS 1 +#define TCP_SND_BUF (4 * TCP_MSS) + // default is 256, was 6 * +//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) +//#define TCP_SNDLOWAT (TCP_SND_BUF/2) +//#define TCP_LISTEN_BACKLOG 0 +//#define TCP_DEFAULT_LISTEN_BACKLOG 0xff + +//***************************************************************************** +// +// ---------- API options ---------- +// +//***************************************************************************** +//#define LWIP_EVENT_API 0 +//#define LWIP_CALLBACK_API 1 + +//***************************************************************************** +// +// ---------- Pbuf options ---------- +// +//***************************************************************************** +#define PBUF_LINK_HLEN 16 // default is 14 +#define PBUF_POOL_BUFSIZE 512 + // default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#define ETH_PAD_SIZE 0 // default is 0 + +//***************************************************************************** +// +// ---------- Network Interfaces options ---------- +// +//***************************************************************************** +//#define LWIP_NETIF_HOSTNAME 0 +//#define LWIP_NETIF_API 0 +//#define LWIP_NETIF_STATUS_CALLBACK 0 +//#define LWIP_NETIF_LINK_CALLBACK 0 +//#define LWIP_NETIF_HWADDRHINT 0 + +//***************************************************************************** +// +// ---------- LOOPIF options ---------- +// +//***************************************************************************** +//#define LWIP_HAVE_LOOPIF 0 +//#define LWIP_LOOPIF_MULTITHREADING 1 + +//***************************************************************************** +// +// ---------- Thread options ---------- +// +//***************************************************************************** +//#define TCPIP_THREAD_NAME "tcpip_thread" +//#define TCPIP_THREAD_STACKSIZE 0 +//#define TCPIP_THREAD_PRIO 1 +//#define TCPIP_MBOX_SIZE 0 +//#define SLIPIF_THREAD_NAME "slipif_loop" +//#define SLIPIF_THREAD_STACKSIZE 0 +//#define SLIPIF_THREAD_PRIO 1 +//#define PPP_THREAD_NAME "pppMain" +//#define PPP_THREAD_STACKSIZE 0 +//#define PPP_THREAD_PRIO 1 +//#define DEFAULT_THREAD_NAME "lwIP" +//#define DEFAULT_THREAD_STACKSIZE 0 +//#define DEFAULT_THREAD_PRIO 1 +//#define DEFAULT_RAW_RECVMBOX_SIZE 0 +//#define DEFAULT_UDP_RECVMBOX_SIZE 0 +//#define DEFAULT_TCP_RECVMBOX_SIZE 0 +//#define DEFAULT_ACCEPTMBOX_SIZE 0 + +//***************************************************************************** +// +// ---------- Sequential layer options ---------- +// +//***************************************************************************** +//#define LWIP_TCPIP_CORE_LOCKING 0 +#define LWIP_NETCONN 0 // default is 1 + +//***************************************************************************** +// +// ---------- Socket Options ---------- +// +//***************************************************************************** +#define LWIP_SOCKET 0 // default is 1 +//#define LWIP_COMPAT_SOCKETS 1 +//#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +//#define LWIP_TCP_KEEPALIVE 0 +//#define LWIP_SO_RCVTIMEO 0 +//#define LWIP_SO_RCVBUF 0 +//#define SO_REUSE 0 + +//***************************************************************************** +// +// ---------- Statistics options ---------- +// +//***************************************************************************** +//#define LWIP_STATS 1 +//#define LWIP_STATS_DISPLAY 0 +//#define LINK_STATS 1 +//#define ETHARP_STATS (LWIP_ARP) +//#define IP_STATS 1 +//#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +//#define ICMP_STATS 1 +//#define IGMP_STATS (LWIP_IGMP) +//#define UDP_STATS (LWIP_UDP) +//#define TCP_STATS (LWIP_TCP) +//#define MEM_STATS 1 +//#define MEMP_STATS 1 +//#define SYS_STATS 1 + +//***************************************************************************** +// +// ---------- PPP options ---------- +// +//***************************************************************************** +//#define PPP_SUPPORT 0 +//#define PPPOE_SUPPORT 0 +//#define PPPOS_SUPPORT PPP_SUPPORT + +#if PPP_SUPPORT +//#define NUM_PPP 1 +//#define PAP_SUPPORT 0 +//#define CHAP_SUPPORT 0 +//#define MSCHAP_SUPPORT 0 +//#define CBCP_SUPPORT 0 +//#define CCP_SUPPORT 0 +//#define VJ_SUPPORT 0 +//#define MD5_SUPPORT 0 +//#define FSM_DEFTIMEOUT 6 +//#define FSM_DEFMAXTERMREQS 2 +//#define FSM_DEFMAXCONFREQS 10 +//#define FSM_DEFMAXNAKLOOPS 5 +//#define UPAP_DEFTIMEOUT 6 +//#define UPAP_DEFREQTIME 30 +//#define CHAP_DEFTIMEOUT 6 +//#define CHAP_DEFTRANSMITS 10 +//#define LCP_ECHOINTERVAL 0 +//#define LCP_MAXECHOFAILS 3 +//#define PPP_MAXIDLEFLAG 100 + +//#define PPP_MAXMTU 1500 +//#define PPP_DEFMRU 296 +#endif + +//***************************************************************************** +// +// ---------- checksum options ---------- +// +//***************************************************************************** +#define CHECKSUM_GEN_IP 0 +#define CHECKSUM_GEN_ICMP 0 +#define CHECKSUM_GEN_UDP 0 +#define CHECKSUM_GEN_TCP 0 +#define CHECKSUM_CHECK_IP 0 +#define CHECKSUM_CHECK_UDP 0 +#define CHECKSUM_CHECK_TCP 0 + +//***************************************************************************** +// +// ---------- Debugging options ---------- +// +//***************************************************************************** +#ifdef DEBUG +#define U8_F "c" +#define S8_F "c" +#define X8_F "02x" +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" +extern void UARTprintf(const char *pcString, ...); +#define LWIP_PLATFORM_DIAG(msg) UARTprintf msg +#define LWIP_PLATFORM_ASSERT(msg) UARTprintf("ASSERT FAIL at line %d of %s: %s\n", __LINE__, __FILE__, msg) +#define LWIP_DEBUG 1 +#endif + +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_OFF +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SERIOUS +//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_SEVERE + +//#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +//#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH) + +//#define ETHARP_DEBUG LWIP_DBG_ON // default is OFF +#define NETIF_DEBUG LWIP_DBG_OFF +//#define PBUF_DEBUG LWIP_DBG_OFF +//#define API_LIB_DEBUG LWIP_DBG_OFF +//#define API_MSG_DEBUG LWIP_DBG_OFF +//#define SOCKETS_DEBUG LWIP_DBG_OFF +#define HTTPD_DEBUG LWIP_DBG_OFF +//#define ICMP_DEBUG LWIP_DBG_OFF +//#define IGMP_DEBUG LWIP_DBG_OFF +//#define INET_DEBUG LWIP_DBG_OFF +//#define IP_DEBUG LWIP_DBG_ON +//#define IP_REASS_DEBUG LWIP_DBG_OFF +#define RAW_DEBUG LWIP_DBG_OFF +//#define MEM_DEBUG LWIP_DBG_OFF +//#define MEMP_DEBUG LWIP_DBG_OFF +//#define SYS_DEBUG LWIP_DBG_OFF +//#define TCP_DEBUG LWIP_DBG_ON +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +//#define TCP_FR_DEBUG LWIP_DBG_OFF +//#define TCP_RTO_DEBUG LWIP_DBG_OFF +//#define TCP_CWND_DEBUG LWIP_DBG_OFF +//#define TCP_WND_DEBUG LWIP_DBG_OFF +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +//#define TCP_RST_DEBUG LWIP_DBG_OFF +//#define TCP_QLEN_DEBUG LWIP_DBG_OFF +//#define UDP_DEBUG LWIP_DBG_ON // default is OFF +//#define TCPIP_DEBUG LWIP_DBG_ON +//#define PPP_DEBUG LWIP_DBG_OFF +//#define SLIP_DEBUG LWIP_DBG_OFF +//#define DHCP_DEBUG LWIP_DBG_ON // default is OFF +//#define AUTOIP_DEBUG LWIP_DBG_OFF +//#define SNMP_MSG_DEBUG LWIP_DBG_OFF +//#define SNMP_MIB_DEBUG LWIP_DBG_OFF +//#define DNS_DEBUG LWIP_DBG_OFF + +#endif /* __LWIPOPTS_H__ */ diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.c b/boards/dk-tm4c129x/qs_weather/qs_weather.c new file mode 100644 index 0000000..4a0879f --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.c @@ -0,0 +1,2896 @@ +//***************************************************************************** +// +// qs_weather.c - Sample Weather application using lwIP. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_gpio.h" +#include "driverlib/flash.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/emac.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/keyboard.h" +#include "grlib/canvas.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "utils/locator.h" +#include "utils/flash_pb.h" +#include "utils/lwiplib.h" +#include "utils/ustdlib.h" +#include "eth_client.h" +#include "images.h" +#include "json.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Quickstart Weather Application (qs_weather)

      +//! +//! This example application demonstrates the operation of the Tiva C series +//! evaluation kit as a weather reporting application. +//! +//! The application supports updating weather information from Open Weather Map +//! weather provider(http://openweathermap.org/). The application uses the +//! lwIP stack to obtain an address through DNS, resolve the address of the +//! Open Weather Map site and then build and handle all of the requests +//! necessary to access the weather information. The application can also use +//! a web proxy, allows for a custom city to be added to the list of cities and +//! toggles temperature units from Celsius to Fahrenheit. The application uses +//! gestures to navigate between various screens. To open the settings screen +//! just press and drag down on any city screen. To exit the setting screen +//! press and drag up and you are returned to the main city display. To +//! navigate between cities, press and drag left or right and the new city +//! information is displayed. +//! +//! For additional details about Open Weather Map refer to their web page at: +//! http://openweathermap.org/ +//! +//! For additional details on lwIP, refer to the lwIP web page at: +//! http://savannah.nongnu.org/projects/lwip/ +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines for setting up the system tick clock. +// +//***************************************************************************** +#define SYSTEM_TICK_MS 10 +#define SYSTEM_TICK_S 100 + +//***************************************************************************** +// +// Define the size of the flash program blocks for saving configuration data. +// +//***************************************************************************** +#define FLASH_PB_START 0x40000 +#define FLASH_PB_END FLASH_PB_START + 0x4000 + +//***************************************************************************** +// +// The animation delay passed to SysCtlDelay(). +// +//***************************************************************************** +#define SCREEN_ANIMATE_DELAY 0x10000 + +//***************************************************************************** +// +// Minimum change to be a swipe action. +// +//***************************************************************************** +#define SWIPE_MIN_DIFF 40 + +//***************************************************************************** +// +// Connection states for weather application. +// +//***************************************************************************** +volatile enum +{ + STATE_NOT_CONNECTED, + STATE_NEW_CONNECTION, + STATE_CONNECTED_IDLE, + STATE_WAIT_DATA, + STATE_UPDATE_CITY, + STATE_WAIT_NICE, +} +g_iState = STATE_NOT_CONNECTED; + +//***************************************************************************** +// +// The city being displayed. +// +//***************************************************************************** +uint32_t g_ui32CityActive; + +//***************************************************************************** +// +// The city being updated. +// +//***************************************************************************** +uint32_t g_ui32CityUpdating; + +//***************************************************************************** +// +// The delay count to reduce traffic to the weather server. +// +//***************************************************************************** +volatile uint32_t g_ui32Delay; + +//***************************************************************************** +// +// Screen saver timeout. +// +//***************************************************************************** +volatile uint32_t g_ui32ScreenSaver; + +//***************************************************************************** +// +// State information for the toggle buttons used in the settings panel. +// +//***************************************************************************** +typedef struct +{ + // + // The outside area of the button. + // + tRectangle sRectContainer; + + // + // The actual button area. + // + tRectangle sRectButton; + + // + // The text for the on position. + // + const char *pcOn; + + // + // The text for the off position. + // + const char *pcOff; + + // + // The label for the button. + // + const char *pcLabel; +} +tButtonToggle; + +// +// System clock rate in Hz. +// +uint32_t g_ui32SysClock; + +// +// Global graphic context for the application. +// +tContext g_sContext; + +//***************************************************************************** +// +// Storage for the filename list box widget string table. +// +//***************************************************************************** +#define NUM_CITIES 30 + +//***************************************************************************** +// +// The flash parameter block structure. +// +//***************************************************************************** +typedef struct +{ + // + // Reserved space used by the flash program block code. + // + uint32_t ui32PBReserved; + + // + // The custom city name. + // + char pcCustomCity[60]; + + // + // The web proxy name. + // + char pcProxy[80]; + + // + // The current temperature unit setting. + // + bool bCelsius; + + // + // Current enable/disable setting for the custom city. + // + bool bCustomEnabled; + + // + // Current enable/disable setting for the proxy. + // + bool bProxyEnabled; + + // + // Indicates whether the current settings have been saved. + // + bool bSave; +} +sParameters; + +//***************************************************************************** +// +// The defaults for the flash and application settings. +// +//***************************************************************************** +static const sParameters g_sDefaultParams = +{ + 0, + {"Custom City Name"}, + {"your.proxy.com"}, + true, + false, + false, + false +}; + +// +// The current live configuration settings for the application. +// +static sParameters g_sConfig; + +//***************************************************************************** +// +// The state of each city panel. +// +//***************************************************************************** +struct +{ + // + // The last update time for this city. + // + uint32_t ui32LastUpdate; + + // + // The current weather report data for this city. + // + tWeatherReport sReport; + + // + // Indicates if the city needs updating. + // + bool bNeedsUpdate; + + // + // The name of the current city. + // + const char *pcName; +} +g_psCityInfo[NUM_CITIES]; + +// +// The list of city names. +// +static const char *g_ppcCityNames[NUM_CITIES - 1] = +{ + "Austin, TX", + "Beijing, China", + "Berlin, Germany", + "Boston, MA", + "Buenos Aires, Argentina", + "Chicago, IL", + "Dallas, TX", + "Frankfurt, Germany", + "Hong Kong, HK", + "Jerusalem, Israel", + "Johannesburg, ZA", + "London, England", + "Mexico City, Mexico", + "Moscow, Russia", + "New Delhi, India", + "New York, NY", + "Paris, France", + "Rome, Italy", + "San Jose, CA", + "Sao Paulo, Brazil", + "Seoul, S. Korea", + "Shanghai, China", + "Shenzhen, China", + "Singapore City, Singapore", + "Sydney, Australia", + "Taipei, Taiwan", + "Tokyo, Japan", + "Toronto, Canada", + "Vancouver, Canada" +}; + +//***************************************************************************** +// +// Constant strings for status messages. +// +//***************************************************************************** +const char g_pcNotFound[] = "City Not Found"; +const char g_pcServerBusy[] = "Server Busy"; +const char g_pcWaitData[] = "Waiting for Data"; + +//***************************************************************************** +// +// Interrupt priority definitions. The top 3 bits of these values are +// significant with lower values indicating higher priority interrupts. +// +//***************************************************************************** +#define SYSTICK_INT_PRIORITY 0x80 +#define ETHERNET_INT_PRIORITY 0xC0 + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Pre-declaration of the functions used by the graphical objects. +// +//***************************************************************************** +static void UpdateCity(uint32_t ui32Idx, bool bDraw); +static void ProxyEnable(tWidget *psWidget); +static void CustomEnable(tWidget *psWidget); +static void DrawToggle(const tButtonToggle *psButton, bool bOn); +static void OnProxyEntry(tWidget *psWidget); +static void OnCustomEntry(tWidget *psWidget); +static void OnTempUnit(tWidget *psWidget); +static void KeyEvent(tWidget *psWidget, uint32_t ui32Key, uint32_t ui32Event); + +//***************************************************************************** +// +// Defines for the basic screen area used by the application. +// +//***************************************************************************** +#define BG_MIN_X 8 +#define BG_MAX_X (320 - 8) +#define BG_MIN_Y 24 +#define BG_MAX_Y (240 - 8) +#define BG_COLOR_SETTINGS ClrGray +#define BG_COLOR_MAIN ClrBlack + +//***************************************************************************** +// +// The canvas widget acting as the background to the left portion of the +// display. +// +//***************************************************************************** +extern tCanvasWidget g_sMainBackground; + +char g_pcTempHighLow[40]="--/--C"; +Canvas(g_sTempHighLow, &g_sMainBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 120, 195, 70, 30, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT | + CANVAS_STYLE_TEXT_TOP | CANVAS_STYLE_TEXT_OPAQUE, BG_COLOR_MAIN, + ClrWhite, ClrWhite, g_psFontCmss20, g_pcTempHighLow, 0, 0); + +char g_pcTemp[40]="--C"; +Canvas(g_sTemp, &g_sMainBackground, &g_sTempHighLow, 0, + &g_sKentec320x240x16_SSD2119, 20, 175, 100, 50, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_TOP | CANVAS_STYLE_TEXT_OPAQUE, BG_COLOR_MAIN, + ClrWhite, ClrWhite, g_psFontCmss48, g_pcTemp, 0, 0); + +char g_pcHumidity[40]="Humidity: --%"; +Canvas(g_sHumidity, &g_sMainBackground, &g_sTemp, 0, + &g_sKentec320x240x16_SSD2119, 20, 140, 160, 25, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT | + CANVAS_STYLE_TEXT_OPAQUE, BG_COLOR_MAIN, ClrWhite, ClrWhite, + g_psFontCmss20, g_pcHumidity, 0, 0); + +char g_pcStatus[40]; +Canvas(g_sStatus, &g_sMainBackground, &g_sHumidity, 0, + &g_sKentec320x240x16_SSD2119, 20, 110, 160, 25, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT | + CANVAS_STYLE_TEXT_OPAQUE, BG_COLOR_MAIN, ClrWhite, ClrWhite, + g_psFontCmss20, g_pcStatus, 0, 0); + +char g_pcCity[40]; +Canvas(g_sCityName, &g_sMainBackground, &g_sStatus, 0, + &g_sKentec320x240x16_SSD2119, 20, 40, 240, 25, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT | + CANVAS_STYLE_TEXT_OPAQUE, BG_COLOR_MAIN, ClrWhite, ClrWhite, + g_psFontCmss20, g_pcCity, 0, 0); + +Canvas(g_sMainBackground, WIDGET_ROOT, 0, &g_sCityName, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MIN_Y, + BG_MAX_X - BG_MIN_X, + BG_MAX_Y - BG_MIN_Y, CANVAS_STYLE_FILL, + BG_COLOR_MAIN, ClrWhite, ClrWhite, g_psFontCmss20, + 0, 0, 0); + +//***************************************************************************** +// +// Settings panel graphical variables. +// +//***************************************************************************** +extern tCanvasWidget g_sStatusPanel; + +// +// The temperature toggle button. +// +const tButtonToggle sTempToggle = +{ + {12, 90, 164, 117}, + {14, 92, 54, 115}, + "C", + "F", + "Temperature" +}; + +// +// The actual button to receive the press events for temperature unit changes. +// +RectangularButton(g_sTempUnit, &g_sStatusPanel, 0, 0, + &g_sKentec320x240x16_SSD2119, 14, 92, 40, 24, 0, ClrDarkGray, + ClrDarkGray, ClrDarkGray, ClrDarkGray, 0, 0, 0, 0, 0 ,0 , + OnTempUnit); + +//***************************************************************************** +// +// Proxy button and proxy text entry widgets. +// +//***************************************************************************** + +// +// The proxy toggle button. +// +const tButtonToggle sProxyToggle = +{ + // + // Outer border of button. + // + {12, 60, 116, 87}, + + // + // Button border. + // + {14, 62, 54, 85}, + + // + // Button Text. + // + "On", + "Off", + "Proxy" +}; + +// +// The actual button widget that receives the press events. +// +RectangularButton(g_sProxyEnable, &g_sStatusPanel, &g_sTempUnit, 0, + &g_sKentec320x240x16_SSD2119, 14, 62, 40, 24, + 0, ClrDarkGray, ClrDarkGray, ClrDarkGray, + ClrDarkGray, 0, 0, 0, 0, 0 ,0 , ProxyEnable); + +// +// The button that receives press events for text entry. +// +RectangularButton(g_sProxyAddr, &g_sStatusPanel, &g_sProxyEnable, 0, + &g_sKentec320x240x16_SSD2119, 118, 60, 190, 28, + PB_STYLE_FILL | PB_STYLE_TEXT | PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, + ClrLightGrey, ClrWhite, ClrGray, g_psFontCmss16, + g_sConfig.pcProxy, 0, 0, 0 ,0 , OnProxyEntry); + +//***************************************************************************** +// +// Custom city button and city text entry widgets. +// +//***************************************************************************** + +// +// The custom city toggle button. +// +const tButtonToggle sCustomToggle = +{ + // + // Outer border of button. + // + {12, 30, 116, 57}, + + // + // Button border. + // + {14, 32, 54, 55}, + + "On", + "Off", + "City" +}; + +// +// The actual button widget that receives the press events. +// +RectangularButton(g_sCustomEnable, &g_sStatusPanel, &g_sProxyAddr, 0, + &g_sKentec320x240x16_SSD2119, 14, 32, 40, 24, + 0, ClrLightGrey, ClrLightGrey, ClrLightGrey, + ClrBlack, 0, 0, 0, 0, 0 ,0 , CustomEnable); + +// +// The text entry button for the custom city. +// +RectangularButton(g_sCustomCity, &g_sStatusPanel, &g_sCustomEnable, 0, + &g_sKentec320x240x16_SSD2119, 118, 30, 190, 28, + PB_STYLE_FILL | PB_STYLE_TEXT | PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, + ClrLightGrey, ClrWhite, ClrGray, g_psFontCmss16, + g_sConfig.pcCustomCity, 0, 0, 0 ,0 , OnCustomEntry); + +// +// MAC Address display. +// +char g_pcMACAddr[40]; +Canvas(g_sMACAddr, &g_sStatusPanel, &g_sCustomCity, 0, + &g_sKentec320x240x16_SSD2119, 12, 180, 147, 20, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, + ClrGray, ClrDarkGray, ClrBlack, g_psFontCmss16, + g_pcMACAddr, 0, 0); + +// +// IP Address display. +// +char g_pcIPAddr[20]; +Canvas(g_sIPAddr, &g_sStatusPanel, &g_sMACAddr, 0, + &g_sKentec320x240x16_SSD2119, 12, 200, 147, 20, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, + ClrGray, ClrDarkGray, ClrBlack, g_psFontCmss16, + g_pcIPAddr, 0, 0); + +// +// Background of the settings panel. +// +Canvas(g_sStatusPanel, WIDGET_ROOT, 0, &g_sIPAddr, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MIN_Y, + BG_MAX_X - BG_MIN_X, BG_MAX_Y - BG_MIN_Y, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_TOP, ClrGray, ClrWhite, ClrBlack, 0, + 0, 0, 0); + +//***************************************************************************** +// +// Keyboard +// +//***************************************************************************** + +// +// Keyboard cursor blink rate. +// +#define KEYBOARD_BLINK_RATE 100 + +// +// The current string pointer for the keyboard. +// +static char *g_pcKeyStr; + +// +// The current string index for the keyboard. +// +static uint32_t g_ui32StringIdx; + +// +// A place holder string used when nothing is being displayed on the keyboard. +// +static const char g_cTempStr = 0; + +// +// The current string width for the keyboard in pixels. +// +static int32_t g_i32StringWidth; + +// +// The cursor blink counter. +// +static volatile uint32_t g_ui32CursorDelay; + +extern tCanvasWidget g_sKeyboardBackground; + +// +// The keyboard widget used by the application. +// +Keyboard(g_sKeyboard, &g_sKeyboardBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 8, 90, 300, 140, + KEYBOARD_STYLE_FILL | KEYBOARD_STYLE_AUTO_REPEAT | + KEYBOARD_STYLE_PRESS_NOTIFY | KEYBOARD_STYLE_RELEASE_NOTIFY | + KEYBOARD_STYLE_BG, + ClrBlack, ClrGray, ClrDarkGray, ClrGray, ClrBlack, g_psFontCmss14, + 100, 100, NUM_KEYBOARD_US_ENGLISH, g_psKeyboardUSEnglish, KeyEvent); + +// +// The keyboard text entry area. +// +Canvas(g_sKeyboardText, &g_sKeyboardBackground, &g_sKeyboard, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MIN_Y, + BG_MAX_X - BG_MIN_X, 60, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, + ClrBlack, ClrWhite, ClrWhite, g_psFontCmss24, &g_cTempStr, 0 ,0 ); + +// +// The full background for the keyboard when it is takes over the screen. +// +Canvas(g_sKeyboardBackground, WIDGET_ROOT, 0, &g_sKeyboardText, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MIN_Y, + BG_MAX_X - BG_MIN_X, BG_MAX_Y - BG_MIN_Y, + CANVAS_STYLE_FILL, ClrBlack, ClrWhite, ClrWhite, 0, 0, 0 ,0 ); + +//***************************************************************************** +// +// The main control paths for changing screens. +// +//***************************************************************************** +#define NUM_SCREENS 3 + +// +// Screen index values. +// +#define SCREEN_MAIN 0 +#define SCREEN_SETTINGS 1 +#define SCREEN_KEYBOARD 2 + +static struct +{ + tWidget *psWidget; + uint32_t ui32Up; + uint32_t ui32Down; + uint32_t ui32Left; + uint32_t ui32Right; +} +g_sScreens[NUM_SCREENS] = +{ + { + (tWidget *)&g_sMainBackground, + SCREEN_MAIN, SCREEN_SETTINGS, SCREEN_MAIN, SCREEN_MAIN + }, + { + (tWidget *)&g_sStatusPanel, + SCREEN_MAIN, SCREEN_SETTINGS, SCREEN_SETTINGS, SCREEN_SETTINGS + }, + { + (tWidget *)&g_sKeyboardBackground, + SCREEN_KEYBOARD, SCREEN_KEYBOARD, SCREEN_KEYBOARD, SCREEN_KEYBOARD + } +}; + +// +// The current active screen index. +// +static uint32_t g_i32ScreenIdx; + +//***************************************************************************** +// +// The state of the direction control for the application. +// +//***************************************************************************** +static struct +{ + // + // The initial touch location. + // + int32_t i32InitX; + int32_t i32InitY; + + // + // The current movement that was detected. + // + enum + { + iSwipeUp, + iSwipeDown, + iSwipeLeft, + iSwipeRight, + iSwipeNone, + } + eMovement; + + // + // Holds if the swipe detection is enabled. + // + bool bEnable; +} +g_sSwipe; + +//***************************************************************************** +// +// The screen buttons state structure. +// +//***************************************************************************** +struct +{ + // + // Indicates if an on-screen buttons are enabled. + // + bool bEnabled; + + // + // Indicates if an on-screen buttons can be pressed. + // + bool bActive; + + // + // The X position of an on-screen button. + // + int32_t i32X; + + // + // The Y position of an on-screen button. + // + int32_t i32Y; + + // + // The delay time before the on-screen button is removed. + // + volatile uint32_t ui32Delay; +} +g_sButtons; + +//***************************************************************************** +// +// Celsius to Fahrenheit conversion. +// +//***************************************************************************** +static int32_t +TempCtoF(int32_t i32Temp) +{ + // + // Only convert if measurements are not in Celsius. + // + if(g_sConfig.bCelsius == false) + { + i32Temp = ((i32Temp * 9) / 5) + 32; + } + + return(i32Temp); +} + +//***************************************************************************** +// +// Reset a cities information so that it can be properly updated. +// +//***************************************************************************** +void +ResetCity(uint32_t ui32Idx) +{ + g_psCityInfo[ui32Idx].sReport.i32Pressure = INVALID_INT; + g_psCityInfo[ui32Idx].sReport.i32Humidity = INVALID_INT; + g_psCityInfo[ui32Idx].sReport.i32Temp = INVALID_INT; + g_psCityInfo[ui32Idx].sReport.i32TempHigh = INVALID_INT; + g_psCityInfo[ui32Idx].sReport.i32TempLow = INVALID_INT; + g_psCityInfo[ui32Idx].sReport.pcDescription = 0; + g_psCityInfo[ui32Idx].sReport.pui8Image = 0; + g_psCityInfo[ui32Idx].sReport.ui32SunRise = 0; + g_psCityInfo[ui32Idx].sReport.ui32SunSet = 0; + g_psCityInfo[ui32Idx].sReport.ui32Time = 0; + g_psCityInfo[ui32Idx].ui32LastUpdate = 0; + + // + // Make sure to copy the name into the string for a custom city. + // + if(ui32Idx == NUM_CITIES - 1) + { + // + // Custom city is in another list. + // + g_psCityInfo[ui32Idx].pcName = g_sConfig.pcCustomCity; + + if(g_ui32CityActive == ui32Idx) + { + // + // Update the custom city name. + // + ustrncpy(g_pcCity, g_psCityInfo[ui32Idx].pcName, sizeof(g_pcCity)); + } + + // + // The custom city only needs an update if enabled. + // + if(g_sConfig.bCustomEnabled) + { + g_psCityInfo[ui32Idx].bNeedsUpdate = true; + } + } + else + { + g_psCityInfo[ui32Idx].pcName = g_ppcCityNames[ui32Idx]; + g_psCityInfo[ui32Idx].bNeedsUpdate = true; + } +} + +//***************************************************************************** +// +// Handle keyboard updates. +// +//***************************************************************************** +void +HandleKeyboard(void) +{ + // + // Nothing to do if the keyboard is not active. + // + if(g_i32ScreenIdx != SCREEN_KEYBOARD) + { + return; + } + + // + // If the mid value is hit then clear the cursor. + // + if(g_ui32CursorDelay == KEYBOARD_BLINK_RATE / 2) + { + GrContextForegroundSet(&g_sContext, ClrBlack); + + // + // Keep the counter moving now that the clearing has been handled. + // + g_ui32CursorDelay--; + } + else if(g_ui32CursorDelay == 0) + { + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Reset the blink delay now that the drawing of the cursor has been + // handled. + // + g_ui32CursorDelay = KEYBOARD_BLINK_RATE; + } + else + { + return; + } + + // + // Draw the cursor only if it is time. + // + GrLineDrawV(&g_sContext, BG_MIN_X + g_i32StringWidth , BG_MIN_Y + 20, + BG_MIN_Y + 40); +} + +//***************************************************************************** +// +// Draw the pop up buttons on the screen. +// +//***************************************************************************** +static void +DrawButtons(int32_t i32Offset, bool bClear) +{ + static const tRectangle sRectTop = + { + 140, + BG_MIN_Y, + 171, + BG_MIN_Y + 10, + }; + static const tRectangle sRectRight = + { + BG_MAX_X - 11, + BG_MIN_Y - 20 + ((BG_MAX_Y - BG_MIN_Y) / 2), + BG_MAX_X, + BG_MIN_Y - 20 + ((BG_MAX_Y - BG_MIN_Y) / 2) + 40, + }; + static const tRectangle sRectLeft = + { + BG_MIN_X, + BG_MIN_Y - 20 + ((BG_MAX_Y - BG_MIN_Y) / 2), + BG_MIN_X + 10, + BG_MIN_Y - 20 + ((BG_MAX_Y - BG_MIN_Y) / 2) + 40, + }; + + // + // Only draw if they are enabled. + // + if(g_sButtons.bEnabled == false) + { + return; + } + + // + // Draw the three pop up buttons. + // + if(g_i32ScreenIdx == SCREEN_MAIN) + { + GrContextForegroundSet(&g_sContext, ClrBlack); + GrContextBackgroundSet(&g_sContext, ClrGray); + + GrRectFill(&g_sContext, &sRectRight); + GrRectFill(&g_sContext, &sRectLeft); + + if(bClear == false) + { + GrLineDrawH(&g_sContext, 140, 171, BG_MIN_Y + 10 + i32Offset); + + GrImageDraw(&g_sContext, g_pui8DownTabImage, 140, + BG_MIN_Y + i32Offset); + + GrTransparentImageDraw(&g_sContext, g_pui8RightImage, + BG_MAX_X - 10 + i32Offset, + BG_MIN_Y - 20 + ((BG_MAX_Y - BG_MIN_Y) / 2), + 1); + GrTransparentImageDraw(&g_sContext, g_pui8LeftImage, + BG_MIN_X - i32Offset, + BG_MIN_Y - 20 + ((BG_MAX_Y - BG_MIN_Y) / 2), + 1); + } + else + { + GrRectFill(&g_sContext, &sRectTop); + } + } + else if(g_i32ScreenIdx == SCREEN_SETTINGS) + { + GrContextForegroundSet(&g_sContext, ClrGray); + GrContextBackgroundSet(&g_sContext, ClrWhite); + if(bClear == false) + { + GrLineDrawH(&g_sContext, 140, 171, BG_MAX_Y - 11 - i32Offset); + GrImageDraw(&g_sContext, g_pui8UpTabImage, 140, + BG_MAX_Y - 10 - i32Offset); + } + } +} + +//***************************************************************************** +// +// Disable the pop up buttons. +// +//***************************************************************************** +static void +ButtonsDisable(void) +{ + g_sButtons.bEnabled = false; + g_sButtons.bActive = false; +} + +//***************************************************************************** +// +// Draw the weather image icon. +// +//***************************************************************************** +static void +DrawIcon(uint32_t ui32Idx) +{ + if(g_psCityInfo[ui32Idx].sReport.pui8Image) + { + if((g_psCityInfo[ui32Idx].sReport.ui32Time > + g_psCityInfo[ui32Idx].sReport.ui32SunRise) && + (g_psCityInfo[ui32Idx].sReport.ui32Time < + g_psCityInfo[ui32Idx].sReport.ui32SunSet)) + { + GrTransparentImageDraw(&g_sContext, g_pui8SunImage, + 176, 65, 0); + + if(g_psCityInfo[ui32Idx].sReport.pui8Image != g_pui8SunImage) + { + GrTransparentImageDraw(&g_sContext, + g_psCityInfo[ui32Idx].sReport.pui8Image, + 176, 80, 0); + } + } + else + { + GrTransparentImageDraw(&g_sContext, g_pui8MoonImage, + 176, 65, 0); + if(g_psCityInfo[ui32Idx].sReport.pui8Image != g_pui8SunImage) + { + GrTransparentImageDraw(&g_sContext, + g_psCityInfo[ui32Idx].sReport.pui8Image, + 176, 80, 0); + } + } + } +} + +//***************************************************************************** +// +// Handle the animation when switching between screens. +// +//***************************************************************************** +void +AnimatePanel(uint32_t ui32Color) +{ + int32_t i32Idx; + + GrContextForegroundSet(&g_sContext, ui32Color); + + if(g_i32ScreenIdx == SCREEN_SETTINGS) + { + for(i32Idx = BG_MIN_Y; i32Idx < BG_MAX_Y; i32Idx++) + { + GrLineDrawH(&g_sContext, BG_MIN_X, BG_MAX_X, i32Idx); + + if(i32Idx == 58) + { + if(g_sConfig.bCustomEnabled) + { + // + // Draw the text black for the custom city when it is + // enabled. + // + PushButtonTextColorSet(&g_sCustomCity, ClrBlack); + } + else + { + // + // Gray out the text entry for the custom city when it is + // disabled. + // + PushButtonTextColorSet(&g_sCustomCity, ClrGray); + } + WidgetPaint((tWidget *)&g_sCustomCity); + DrawToggle(&sCustomToggle, g_sConfig.bCustomEnabled); + GrContextForegroundSet(&g_sContext, ui32Color); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 88) + { + if(g_sConfig.bProxyEnabled) + { + // + // Enable text entry area for the proxy text entry. + // + PushButtonTextColorSet(&g_sProxyAddr, ClrBlack); + } + else + { + // + // Gray out the text entry area for the proxy text entry. + // + PushButtonTextColorSet(&g_sProxyAddr, ClrGray); + } + DrawToggle(&sProxyToggle, g_sConfig.bProxyEnabled); + WidgetPaint((tWidget *)&g_sProxyAddr); + GrContextForegroundSet(&g_sContext, ui32Color); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 116) + { + DrawToggle(&sTempToggle, g_sConfig.bCelsius); + WidgetPaint((tWidget *)&g_sTempUnit); + GrContextForegroundSet(&g_sContext, ui32Color); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 200) + { + WidgetPaint((tWidget *)&g_sMACAddr); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 220) + { + WidgetPaint((tWidget *)&g_sIPAddr); + WidgetMessageQueueProcess(); + } + + SysCtlDelay(SCREEN_ANIMATE_DELAY); + } + } + else if(g_i32ScreenIdx == SCREEN_MAIN) + { + for(i32Idx = BG_MAX_Y; i32Idx >= BG_MIN_Y; i32Idx--) + { + GrLineDrawH(&g_sContext, BG_MIN_X, BG_MAX_X, i32Idx); + + if(i32Idx == 175) + { + WidgetPaint((tWidget *)&g_sTempHighLow); + WidgetPaint((tWidget *)&g_sTemp); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 140) + { + WidgetPaint((tWidget *)&g_sHumidity); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 110) + { + WidgetPaint((tWidget *)&g_sStatus); + WidgetMessageQueueProcess(); + } + else if(i32Idx == 65) + { + DrawIcon(g_ui32CityActive); + } + else if(i32Idx == 40) + { + WidgetPaint((tWidget *)&g_sCityName); + WidgetMessageQueueProcess(); + } + + SysCtlDelay(SCREEN_ANIMATE_DELAY); + } + } +} + +//***************************************************************************** +// +// Animate Buttons. +// +//***************************************************************************** +void +AnimateButtons(bool bInit) +{ + if(bInit) + { + g_sButtons.i32X = 0; + g_sButtons.i32Y = 0; + g_sButtons.bEnabled = true; + g_sButtons.bActive = false; + g_sButtons.ui32Delay = 0; + } + else if(g_sButtons.bEnabled == false) + { + // + // Just return if the buttons are not on screen. + // + return; + } + + if(g_sButtons.ui32Delay == 0) + { + g_sButtons.ui32Delay = 6; + + GrContextForegroundSet(&g_sContext, ClrBlack); + GrContextBackgroundSet(&g_sContext, ClrGray); + + if((bInit == false) || (g_sButtons.bActive == true)) + { + // + // Update the buttons. + // + DrawButtons(g_sButtons.i32X - g_sButtons.i32Y, true); + + if(g_sButtons.i32X < 3) + { + g_sButtons.i32X++; + } + else + { + g_sButtons.i32Y++; + } + } + + if(g_sButtons.bActive == false) + { + // + // Update the buttons. + // + DrawButtons(g_sButtons.i32X - g_sButtons.i32Y, false); + + if(g_sButtons.i32Y >= 3) + { + g_sButtons.bActive = true; + g_sButtons.ui32Delay = 200; + } + } + else if(g_i32ScreenIdx == SCREEN_MAIN) + { + ButtonsDisable(); + } + } +} + +//***************************************************************************** +// +// Clears the full screen. +// +//***************************************************************************** +void +ClearScreen(tContext *psContext) +{ + static const tRectangle sRect = + { + 0, + 0, + 319, + 239, + }; + + GrRectFill(psContext, &sRect); +} + +//***************************************************************************** +// +// Clears the main screens background. +// +//***************************************************************************** +void +ClearBackground(tContext *psContext) +{ + static const tRectangle sRect = + { + BG_MIN_X, + BG_MIN_Y, + BG_MAX_X, + BG_MAX_Y, + }; + + GrRectFill(psContext, &sRect); +} + +//***************************************************************************** +// +// Update the IP address string. +// +//***************************************************************************** +void +UpdateIPAddress(char *pcAddr, uint32_t ipAddr) +{ + uint8_t *pui8Temp = (uint8_t *)&ipAddr; + + if(ipAddr == 0) + { + ustrncpy(pcAddr, "IP: ---.---.---.---", sizeof(g_pcIPAddr)); + } + else + { + usprintf(pcAddr,"IP: %d.%d.%d.%d", pui8Temp[0], pui8Temp[1], + pui8Temp[2], pui8Temp[3]); + } + + // + // If the status panel is active then update the address. + // + if(g_i32ScreenIdx == SCREEN_SETTINGS) + { + WidgetPaint((tWidget *)&g_sIPAddr); + } +} + +//***************************************************************************** +// +// Handles the proxy select button presses. +// +//***************************************************************************** +void +ProxyEnable(tWidget *psWidget) +{ + // + // If a city was waiting to be updated then reset its data. + // + if(g_iState != STATE_CONNECTED_IDLE) + { + ResetCity(g_ui32CityUpdating); + } + + // + // Reset the state to not connected. + // + g_iState = STATE_NOT_CONNECTED; + + // + // Toggle the proxy setting. + // + if(g_sConfig.bProxyEnabled) + { + g_sConfig.bProxyEnabled = false; + + // + // Reset the IP address on the screen and disable the proxy which + // resets the network interface and starts DHCP again. + // + UpdateIPAddress(g_pcIPAddr, 0); + EthClientProxySet(0); + + // + // Gray out the text entry area for the proxy text entry. + // + PushButtonTextColorSet(&g_sProxyAddr, ClrGray); + } + else + { + g_sConfig.bProxyEnabled = true; + + // + // Enable the proxy which resets the network interface and starts DHCP + // again. + // + EthClientProxySet(g_sConfig.pcProxy); + + // + // Enable text entry area for the proxy text entry. + // + PushButtonTextColorSet(&g_sProxyAddr, ClrBlack); + } + + // + // Update the toggle button. + // + DrawToggle(&sProxyToggle, g_sConfig.bProxyEnabled); + WidgetPaint((tWidget *)&g_sProxyAddr); + + // + // A change was made so update the settings in flash. + // + g_sConfig.bSave = true; +} + +//***************************************************************************** +// +// Handles the custom enable button presses. +// +//***************************************************************************** +void +CustomEnable(tWidget *psWidget) +{ + // + // Toggle the custom city toggle button. + // + if(g_sConfig.bCustomEnabled) + { + g_sConfig.bCustomEnabled = false; + + // + // Gray out the text entry for the custom city when it is disabled. + // + PushButtonTextColorSet(&g_sCustomCity, ClrGray); + + // + // Reset the custom city data. + // + ResetCity(NUM_CITIES - 1); + + if(g_ui32CityActive == (NUM_CITIES - 1)) + { + // + // Move to the first city in the list. + // + g_ui32CityActive = 0; + + // + // Since we must be on the settings screen to change this, then + // just update the city and do not draw it. + // + UpdateCity(g_ui32CityActive, false); + } + } + else + { + g_sConfig.bCustomEnabled = true; + + // + // Draw the text black for the custom city when it is enabled. + // + PushButtonTextColorSet(&g_sCustomCity, ClrBlack); + } + + // + // Update the toggle button. + // + DrawToggle(&sCustomToggle, g_sConfig.bCustomEnabled); + WidgetPaint((tWidget *)&g_sCustomCity); + + // + // A change was made so update the settings in flash. + // + g_sConfig.bSave = true; +} + +//***************************************************************************** +// +// Handles when a key is pressed on the keyboard. +// +//***************************************************************************** +void +KeyEvent(tWidget *psWidget, uint32_t ui32Key, uint32_t ui32Event) +{ + switch(ui32Key) + { + // + // Look for a backspace key press. + // + case UNICODE_BACKSPACE: + { + if(ui32Event == KEYBOARD_EVENT_PRESS) + { + if(g_ui32StringIdx != 0) + { + g_ui32StringIdx--; + g_pcKeyStr[g_ui32StringIdx] = 0; + } + + WidgetPaint((tWidget *)&g_sKeyboardText); + + // + // Save the pixel width of the current string. + // + g_i32StringWidth = GrStringWidthGet(&g_sContext, g_pcKeyStr, + 40); + } + break; + } + // + // Look for an enter/return key press. This will exit the keyboard and + // return to the current active screen. + // + case UNICODE_RETURN: + { + if(ui32Event == KEYBOARD_EVENT_RELEASE) + { + // + // Get rid of the keyboard widget. + // + WidgetRemove(g_sScreens[g_i32ScreenIdx].psWidget); + + // + // Switch back to the previous screen and add its widget back. + // + g_i32ScreenIdx = SCREEN_SETTINGS; + WidgetAdd(WIDGET_ROOT, g_sScreens[g_i32ScreenIdx].psWidget); + + // + // If the proxy was disabled and we were modifying the proxy + // string the re-enable the proxy. + // + if((!g_sConfig.bProxyEnabled) && + (g_pcKeyStr == g_sConfig.pcProxy)) + { + // + // Enable the proxy since it has just been updated. This + // also restarts DHCP for a new address. + // + g_sConfig.bProxyEnabled = true; + EthClientProxySet(g_sConfig.pcProxy); + } + else if((!g_sConfig.bCustomEnabled) && + (g_pcKeyStr == g_sConfig.pcCustomCity)) + { + // + // If the custom city string was being modified then make + // sure to update it. + // + g_sConfig.bCustomEnabled = true; + + // + // Reset the city data. + // + ResetCity(NUM_CITIES - 1); + + // + // Update the city with the reset values. + // + if(g_ui32CityActive == (NUM_CITIES - 1)) + { + UpdateCity(g_ui32CityActive, false); + } + } + + // + // If returning to the main screen then re-draw the frame to + // indicate the main screen. + // + if(g_i32ScreenIdx == SCREEN_MAIN) + { + FrameDraw(&g_sContext, "qs-weather"); + WidgetPaint(g_sScreens[g_i32ScreenIdx].psWidget); + } + else + { + // + // Returning to the settings screen. + // + FrameDraw(&g_sContext, "Settings"); + WidgetPaint(g_sScreens[g_i32ScreenIdx].psWidget); + AnimateButtons(true); + WidgetMessageQueueProcess(); + + // + // Redraw all the toggle buttons. + // + DrawToggle(&sTempToggle, g_sConfig.bCelsius); + DrawToggle(&sProxyToggle, g_sConfig.bProxyEnabled); + DrawToggle(&sCustomToggle, g_sConfig.bCustomEnabled); + } + + // + // Enable gestures. + // + g_sSwipe.bEnable = true; + } + break; + } + // + // If the key is not special then update the text string. + // + default: + { + if(ui32Event == KEYBOARD_EVENT_PRESS) + { + // + // If the proxy is enabled and we get a key stroke then disable + // the proxy and wait for the new proxy string. + // + if((g_sConfig.bProxyEnabled) && + (g_pcKeyStr == g_sConfig.pcProxy)) + { + // + // Disable proxy while updating the proxy string. This + // starts DHCP for a new address. + // + g_sConfig.bProxyEnabled = false; + EthClientProxySet(0); + } + if((g_sConfig.bCustomEnabled) && + (g_pcKeyStr == g_sConfig.pcCustomCity)) + { + // + // Temporarily disable custom city while it is being + // modified. + // + g_sConfig.bCustomEnabled = false; + } + + // + // A change was made so update the settings in flash. + // + g_sConfig.bSave = true; + + // + // Set the string to the current string to be updated. + // + if(g_ui32StringIdx == 0) + { + CanvasTextSet(&g_sKeyboardText, g_pcKeyStr); + } + g_pcKeyStr[g_ui32StringIdx] = (char)ui32Key; + g_ui32StringIdx++; + g_pcKeyStr[g_ui32StringIdx] = 0; + + WidgetPaint((tWidget *)&g_sKeyboardText); + + // + // Save the pixel width of the current string. + // + g_i32StringWidth = GrStringWidthGet(&g_sContext, g_pcKeyStr, + 40); + } + break; + } + } +} + +//***************************************************************************** +// +// Draws a toggle button. +// +//***************************************************************************** +void +DrawToggle(const tButtonToggle *psButton, bool bOn) +{ + tRectangle sRect; + int16_t i16X, i16Y; + + // + // Copy the data out of the bounds of the button. + // + sRect = psButton->sRectButton; + + GrContextForegroundSet(&g_sContext, ClrLightGrey); + GrRectFill(&g_sContext, &psButton->sRectContainer); + + // + // Copy the data out of the bounds of the button. + // + sRect = psButton->sRectButton; + + GrContextForegroundSet(&g_sContext, ClrDarkGray); + GrRectFill(&g_sContext, &psButton->sRectButton); + + if(bOn) + { + sRect.i16XMin += 2; + sRect.i16YMin += 2; + sRect.i16XMax -= 15; + sRect.i16YMax -= 2; + } + else + { + sRect.i16XMin += 15; + sRect.i16YMin += 2; + sRect.i16XMax -= 2; + sRect.i16YMax -= 2; + } + GrContextForegroundSet(&g_sContext, ClrLightGrey); + GrRectFill(&g_sContext, &sRect); + + GrContextFontSet(&g_sContext, &g_sFontCm16); + GrContextForegroundSet(&g_sContext, ClrBlack); + GrContextBackgroundSet(&g_sContext, ClrLightGrey); + + i16X = sRect.i16XMin + ((sRect.i16XMax - sRect.i16XMin) / 2); + i16Y = sRect.i16YMin + ((sRect.i16YMax - sRect.i16YMin) / 2); + + if(bOn) + { + GrStringDrawCentered(&g_sContext, psButton->pcOn, -1, i16X, i16Y, + true); + } + else + { + GrStringDrawCentered(&g_sContext, psButton->pcOff, -1, i16X, i16Y, + true); + } + + if(psButton->pcLabel) + { + GrStringDraw(&g_sContext, psButton->pcLabel, -1, + psButton->sRectButton.i16XMax + 2, + psButton->sRectButton.i16YMin + 6, + true); + } +} + +//***************************************************************************** +// +// Handles the temperature unit select button is pressed. +// +//***************************************************************************** +static void +OnTempUnit(tWidget *psWidget) +{ + // + // Toggle the Celsius state. + // + if(g_sConfig.bCelsius) + { + g_sConfig.bCelsius = false; + + } + else + { + g_sConfig.bCelsius = true; + } + + // + // Update the toggle button and the current city. + // + DrawToggle(&sTempToggle, g_sConfig.bCelsius); + UpdateCity(g_ui32CityActive, false); + + // + // A change was made so update the settings in flash. + // + g_sConfig.bSave = true; +} + +//***************************************************************************** +// +// Handles when the proxy text area is pressed. +// +//***************************************************************************** +static void +OnProxyEntry(tWidget *psWidget) +{ + // + // Only respond if the proxy has been enabled. + // + if(g_sConfig.bProxyEnabled) + { + // + // Disable swiping while the keyboard is active. + // + g_sSwipe.bEnable = false; + + // + // The keyboard string is now the proxy address so set the string, + // reset the string index and width to 0. + // + g_pcKeyStr = g_sConfig.pcProxy; + g_ui32StringIdx = 0; + g_i32StringWidth = 0; + + // + // Set the initial string to a null string so that nothing is shown. + // + CanvasTextSet(&g_sKeyboardText, &g_cTempStr); + + // + // Remove the current widget so that it is not used while keyboard + // is active. + // + WidgetRemove(g_sScreens[g_i32ScreenIdx].psWidget); + + // + // Activate the keyboard. + // + g_i32ScreenIdx = SCREEN_KEYBOARD; + WidgetAdd(WIDGET_ROOT, g_sScreens[g_i32ScreenIdx].psWidget); + + // + // Clear the main screen area with the settings background color. + // + GrContextForegroundSet(&g_sContext, BG_COLOR_SETTINGS); + ClearBackground(&g_sContext); + + GrContextFontSet(&g_sContext, g_psFontCmss24); + WidgetPaint((tWidget *)&g_sKeyboardBackground); + } +} + +//***************************************************************************** +// +// Handles when the custom text area is pressed. +// +//***************************************************************************** +static void +OnCustomEntry(tWidget *psWidget) +{ + // + // Only respond if the custom has been enabled. + // + if(g_sConfig.bCustomEnabled) + { + // + // Disable swiping while the keyboard is active. + // + g_sSwipe.bEnable = false; + + // + // The keyboard string is now the custom city so set the string, + // reset the string index and width to 0. + // + g_pcKeyStr = g_sConfig.pcCustomCity; + g_ui32StringIdx = 0; + g_i32StringWidth = 0; + + // + // Set the initial string to a null string so that nothing is shown. + // + CanvasTextSet(&g_sKeyboardText, &g_cTempStr); + + // + // Remove the current widget so that it is not used while keyboard + // is active. + // + WidgetRemove(g_sScreens[g_i32ScreenIdx].psWidget); + + // + // Activate the keyboard. + // + g_i32ScreenIdx = SCREEN_KEYBOARD; + WidgetAdd(WIDGET_ROOT, g_sScreens[g_i32ScreenIdx].psWidget); + + // + // Clear the main screen area with the settings background color. + // + GrContextForegroundSet(&g_sContext, BG_COLOR_SETTINGS); + ClearBackground(&g_sContext); + + GrContextFontSet(&g_sContext, g_psFontCmss24); + WidgetPaint((tWidget *)&g_sKeyboardBackground); + } +} + +//***************************************************************************** +// +// Update the MAC address string. +// +//***************************************************************************** +void +UpdateMACAddr(void) +{ + uint8_t pui8MACAddr[6]; + + EthClientMACAddrGet(pui8MACAddr); + + usprintf(g_pcMACAddr, "MAC: %02x:%02x:%02x:%02x:%02x:%02x", + pui8MACAddr[0], pui8MACAddr[1], pui8MACAddr[2], pui8MACAddr[3], + pui8MACAddr[4], pui8MACAddr[5]); +} + +//***************************************************************************** +// +// The weather event handler. +// +//***************************************************************************** +void +WeatherEvent(uint32_t ui32Event, void* pvData, uint32_t ui32Param) +{ + if(ui32Event == ETH_EVENT_RECEIVE) + { + // + // Let the main loop update the city. + // + g_iState = STATE_UPDATE_CITY; + + g_psCityInfo[g_ui32CityUpdating].ui32LastUpdate = + g_psCityInfo[g_ui32CityUpdating].sReport.ui32Time; + } + else if(ui32Event == ETH_EVENT_INVALID_REQ) + { + g_psCityInfo[g_ui32CityUpdating].sReport.pcDescription = g_pcNotFound; + g_iState = STATE_UPDATE_CITY; + } + else if(ui32Event == ETH_EVENT_CLOSE) + { + if(g_iState == STATE_WAIT_DATA) + { + g_psCityInfo[g_ui32CityUpdating].sReport.pcDescription = + g_pcServerBusy; + + g_iState = STATE_UPDATE_CITY; + } + } + + // + // If the update indicated no time, then just set the time to a value + // to indicate that at least the update occurred. + // + if(g_psCityInfo[g_ui32CityUpdating].ui32LastUpdate == 0) + { + // + // Failed to update for some reason. + // + g_psCityInfo[g_ui32CityUpdating].ui32LastUpdate = 1; + } +} + +//***************************************************************************** +// +// The interrupt handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Call the lwIP timer handler. + // + EthClientTick(SYSTEM_TICK_MS); + + // + // Handle the delay between accesses to the weather server. + // + if(g_ui32Delay != 0) + { + g_ui32Delay--; + } + + if(g_sButtons.ui32Delay != 0) + { + g_sButtons.ui32Delay--; + } + + // + // Timeout for the screen saver. + // + if(g_ui32ScreenSaver != 0) + { + g_ui32ScreenSaver--; + } + + // + // Stop updating until the toggle event points have been handled. + // + if((g_ui32CursorDelay != 0) && + (g_ui32CursorDelay != (KEYBOARD_BLINK_RATE / 2))) + { + g_ui32CursorDelay--; + } +} + +//***************************************************************************** +// +// Network events handler. +// +//***************************************************************************** +void +EnetEvents(uint32_t ui32Event, void *pvData, uint32_t ui32Param) +{ + if(ui32Event == ETH_EVENT_CONNECT) + { + g_iState = STATE_NEW_CONNECTION; + + // + // Update the string version of the address. + // + UpdateIPAddress(g_pcIPAddr, EthClientAddrGet()); + } + else if(ui32Event == ETH_EVENT_DISCONNECT) + { + // + // If a city was waiting to be updated then reset its data. + // + if(g_iState != STATE_CONNECTED_IDLE) + { + ResetCity(g_ui32CityUpdating); + } + + g_iState = STATE_NOT_CONNECTED; + + // + // Update the address to 0.0.0.0. + // + UpdateIPAddress(g_pcIPAddr, 0); + } +} + +//***************************************************************************** +// +// Update the information for the current city. +// +//***************************************************************************** +void +UpdateCity(uint32_t ui32Idx, bool bDraw) +{ + char cUnits; + bool bIntDisabled; + + // + // Need to disable interrupts since this can be called from interrupt + // handlers for both System tick and Ethernet controller and from the + // main routine. + // + bIntDisabled = IntMasterDisable(); + + if(g_sConfig.bCelsius) + { + cUnits = 'C'; + } + else + { + cUnits = 'F'; + } + + // + // Update the city. + // + ustrncpy(g_pcCity, g_psCityInfo[ui32Idx].pcName, sizeof(g_pcCity)); + + // + // Check if the humidity value is valid. + // + if(g_psCityInfo[ui32Idx].sReport.i32Humidity == INVALID_INT) + { + usprintf(g_pcHumidity, "Humidity: --%%"); + } + else + { + usprintf(g_pcHumidity, "Humidity: %d%%", + g_psCityInfo[ui32Idx].sReport.i32Humidity); + } + + // + // Copy the updated description. + // + if(g_psCityInfo[ui32Idx].sReport.pcDescription) + { + ustrncpy(g_pcStatus, g_psCityInfo[ui32Idx].sReport.pcDescription, + sizeof(g_pcStatus)); + } + else if((g_ui32CityUpdating == g_ui32CityActive) && + (g_iState != STATE_NOT_CONNECTED)) + { + // + // Waiting on data for this city. + // + ustrncpy(g_pcStatus, g_pcWaitData, sizeof(g_pcStatus)); + } + else + { + // + // No current status. + // + ustrncpy(g_pcStatus, "--", sizeof(g_pcStatus)); + } + + + // + // Check if the temperature value is valid. + // + if(g_psCityInfo[ui32Idx].sReport.i32Temp == INVALID_INT) + { + usprintf(g_pcTemp, "--%c", cUnits); + usprintf(g_pcTempHighLow, "--/--%c", + TempCtoF(g_psCityInfo[ui32Idx].sReport.i32TempHigh), + TempCtoF(g_psCityInfo[ui32Idx].sReport.i32TempLow), cUnits); + } + else + { + usprintf(g_pcTemp, "%d%c", + TempCtoF(g_psCityInfo[ui32Idx].sReport.i32Temp), cUnits); + usprintf(g_pcTempHighLow, "%d/%d%c", + TempCtoF(g_psCityInfo[ui32Idx].sReport.i32TempHigh), + TempCtoF(g_psCityInfo[ui32Idx].sReport.i32TempLow), cUnits); + } + + // + // Update the screen contents if requested. + // + if(bDraw) + { + GrContextForegroundSet(&g_sContext, BG_COLOR_MAIN); + ClearBackground(&g_sContext); + WidgetPaint((tWidget *)&g_sCityName); + WidgetPaint((tWidget *)&g_sStatus); + WidgetPaint((tWidget *)&g_sHumidity); + WidgetPaint((tWidget *)&g_sTemp); + WidgetPaint((tWidget *)&g_sTempHighLow); + + DrawIcon(ui32Idx); + + DrawButtons(0, false); + } + + if(bIntDisabled == false) + { + IntMasterEnable(); + } +} + +//***************************************************************************** +// +// The callback function that is called by the touch screen driver to indicate +// activity on the touch screen. +// +//***************************************************************************** +int32_t +TouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + int32_t i32XDiff, i32YDiff; + + // + // Reset the timeout for the screen saver. + // + g_ui32ScreenSaver = 60 * SYSTEM_TICK_S; + + if(g_sSwipe.bEnable) + { + switch(ui32Message) + { + // + // The user has just touched the screen. + // + case WIDGET_MSG_PTR_DOWN: + { + // + // Save this press location. + // + g_sSwipe.i32InitX = i32X; + g_sSwipe.i32InitY = i32Y; + + // + // Done handling this message. + // + break; + } + + // + // The user has moved the touch location on the screen. + // + case WIDGET_MSG_PTR_MOVE: + { + // + // Done handling this message. + // + break; + } + + // + // The user is no longer touching the screen. + // + case WIDGET_MSG_PTR_UP: + { + // + // Indicate that no key is being pressed. + // + i32XDiff = i32X - g_sSwipe.i32InitX; + i32YDiff = i32Y - g_sSwipe.i32InitY; + + // + // Dead zone for just a button press. + // + if(((i32XDiff < SWIPE_MIN_DIFF) && + (i32XDiff > -SWIPE_MIN_DIFF)) && + ((i32YDiff < SWIPE_MIN_DIFF) && + (i32YDiff > -SWIPE_MIN_DIFF))) + { + if(g_sButtons.bActive) + { + // + // Reset the delay. + // + g_sButtons.ui32Delay = 200; + + if(i32X < 30) + { + g_sSwipe.eMovement = iSwipeRight; + } + else if(i32X > 290) + { + g_sSwipe.eMovement = iSwipeLeft; + } + else if(i32Y < 40) + { + g_sSwipe.eMovement = iSwipeDown; + } + else if(i32Y > 200) + { + g_sSwipe.eMovement = iSwipeUp; + } + else + { + g_sSwipe.eMovement = iSwipeNone; + } + } + else + { + if(g_i32ScreenIdx == SCREEN_MAIN) + { + AnimateButtons(true); + } + } + break; + } + + // + // If Y movement dominates then this is an up/down motion. + // + if(i32YDiff/i32XDiff) + { + if(i32YDiff < 0) + { + g_sSwipe.eMovement = iSwipeUp; + } + else + { + g_sSwipe.eMovement = iSwipeDown; + } + } + else + { + if(i32XDiff > 0) + { + g_sSwipe.eMovement = iSwipeRight; + } + else + { + g_sSwipe.eMovement = iSwipeLeft; + } + } + + // + // Done handling this message. + // + break; + } + } + } + WidgetPointerMessage(ui32Message, i32X, i32Y); + + return(0); +} + +//***************************************************************************** +// +// Handle the touch screen movements. +// +//***************************************************************************** +void +HandleMovement(void) +{ + uint32_t ui32NumCities; + uint32_t ui32NewIdx; + + if(g_sSwipe.eMovement != iSwipeNone) + { + if(g_sConfig.bCustomEnabled) + { + ui32NumCities = NUM_CITIES; + } + else + { + ui32NumCities = NUM_CITIES - 1; + } + + switch(g_sSwipe.eMovement) + { + case iSwipeUp: + { + ui32NewIdx = g_sScreens[g_i32ScreenIdx].ui32Up; + + break; + } + case iSwipeDown: + { + ui32NewIdx = g_sScreens[g_i32ScreenIdx].ui32Down; + + break; + } + case iSwipeRight: + { + ui32NewIdx = g_sScreens[g_i32ScreenIdx].ui32Left; + + // + // Check if on main screen. + // + if(g_i32ScreenIdx == SCREEN_MAIN) + { + if(g_ui32CityActive == 0) + { + g_ui32CityActive = ui32NumCities - 1; + + } + else + { + g_ui32CityActive--; + } + + UpdateCity(g_ui32CityActive, true); + } + + break; + } + case iSwipeLeft: + { + ui32NewIdx = g_sScreens[g_i32ScreenIdx].ui32Right; + + // + // Check if on main screen. + // + if(g_i32ScreenIdx == SCREEN_MAIN) + { + if(g_ui32CityActive >= ui32NumCities - 1) + { + g_ui32CityActive = 0; + } + else + { + g_ui32CityActive++; + } + + UpdateCity(g_ui32CityActive, true); + } + + break; + } + default: + { + ui32NewIdx = g_i32ScreenIdx; + break; + } + } + + // + // Check if the panel has changed. + // + if(ui32NewIdx != g_i32ScreenIdx) + { + // + // Remove the current widget. + // + WidgetRemove(g_sScreens[g_i32ScreenIdx].psWidget); + + WidgetAdd(WIDGET_ROOT, g_sScreens[ui32NewIdx].psWidget); + + g_i32ScreenIdx = ui32NewIdx; + + // + // Screen switched so disable the overlay buttons. + // + ButtonsDisable(); + + if(g_i32ScreenIdx == SCREEN_MAIN) + { + // + // Update the frame. + // + FrameDraw(&g_sContext, "qs-weather"); + + // + // Change the status to updating if on the main screen. + // + UpdateCity(g_ui32CityActive, false); + + // + // Animate the panel switch. + // + AnimatePanel(ClrBlack); + + // + // If returning to the main screen then see if the settings + // should be saved. + // + if(g_sConfig.bSave) + { + g_sConfig.bSave = false; + FlashPBSave((uint8_t *)&g_sConfig); + } + } + else + { + // + // Update the frame. + // + FrameDraw(&g_sContext, "Settings"); + + // + // Animate the panel switch. + // + AnimatePanel(ClrGray); + + // + // Animate the pull up tab once. + // + AnimateButtons(true); + } + } + + g_sSwipe.eMovement = iSwipeNone; + } +} + +//***************************************************************************** +// +// Linear scaling of the palette entries from white to normal color. +// +//***************************************************************************** +static uint8_t +PaletteScale(uint32_t ui32Entry, uint32_t ui32Scale) +{ + uint32_t ui32Value; + + ui32Value = ui32Entry + ((0xff - ui32Entry) * ui32Scale)/15; + + return((uint8_t)ui32Value); +} + +//***************************************************************************** +// +// Display the TI logo screen. +// +//***************************************************************************** +void +TIWelcome(void) +{ + int32_t i32Idx, i32Line, i32Step; + + // + // Initial color is white. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + ClearScreen(&g_sContext); + + // + // Copy the default palette from the image. + // + for(i32Idx = 0; i32Idx < (g_pui8TIImage[5] * 3); i32Idx++) + { + g_pui8TIImagePalette[i32Idx] = g_pui8TIImage[6 + i32Idx]; + } + + // + // Palette multiplier. + // + i32Step = 0xf; + + while(i32Step > 0) + { + // + // Shift the palette of the image. + // + for(i32Idx = 0; i32Idx < g_pui8TIImage[5]; i32Idx++) + { + g_pui8TIImage[6 + (i32Idx * 3)] = + PaletteScale(g_pui8TIImagePalette[i32Idx * 3], i32Step); + g_pui8TIImage[7 + (i32Idx * 3)] = + PaletteScale(g_pui8TIImagePalette[(i32Idx * 3) + 1], + i32Step); + g_pui8TIImage[8 + (i32Idx * 3)] = + PaletteScale(g_pui8TIImagePalette[(i32Idx * 3) + 2], + i32Step); + } + + // + // Draw the areas of the screen. + // + GrImageDraw(&g_sContext, g_pui8TIImage, 0, 75); + + SysCtlDelay(g_ui32SysClock/50); + + // + // Decrement the palette scaling. + // + i32Step--; + } + + // + // Hold the image for a few seconds. + // + SysCtlDelay(g_ui32SysClock); + + // + // Set the initial scaling to not adjust the palette. + // + i32Step = 0; + + GrContextForegroundSet(&g_sContext, ClrBlack); + + // + // Clear the screen from top and bottom while fading out the logo. + // + for(i32Line = 0; i32Line < 119; i32Line++) + { + // + // Erase from the top and bottom of the screen. + // + GrLineDrawH(&g_sContext, 0, 329, i32Line); + GrLineDrawH(&g_sContext, 0, 329, 239-i32Line); + + // + // Fade the palette every 5th line and stop when the line draws cross + // the image. + // + if(((i32Line % 5) == 0) && (i32Line < 75)) + { + // + // Shift the palette of the image. + // + for(i32Idx = 0; i32Idx < g_pui8TIImage[5]; i32Idx++) + { + g_pui8TIImage[6 + (i32Idx * 3)] = + PaletteScale(g_pui8TIImagePalette[i32Idx * 3], + i32Step); + g_pui8TIImage[7 + (i32Idx * 3)] = + PaletteScale(g_pui8TIImagePalette[(i32Idx * 3) + 1], + i32Step); + g_pui8TIImage[8 + (i32Idx * 3)] = + PaletteScale(g_pui8TIImagePalette[(i32Idx * 3) + 2], + i32Step); + + } + + // + // Draw the areas of the screen. + // + GrImageDraw(&g_sContext, g_pui8TIImage, 0, 75); + + // + // Darken the background and decrement the palette multiplier. + // + i32Step++; + } + + SysCtlDelay(g_ui32SysClock/2400); + } + + // + // Blank out one of the last pairs of lines. + // + GrContextForegroundSet(&g_sContext, ClrBlack); + GrLineDrawH(&g_sContext, 0, 329, 120); + + // + // "erase" the final line towards the middle. + // + for(i32Line = 0; i32Line < 159; i32Line++) + { + GrPixelDraw(&g_sContext,i32Line, 119); + GrPixelDraw(&g_sContext,319- i32Line, 119); + SysCtlDelay(g_ui32SysClock/2400); + } + + // + // Wait about a 1/4 second and set the background to black. + // + SysCtlDelay(g_ui32SysClock/12); + GrContextForegroundSet(&g_sContext, ClrBlack); + ClearScreen(&g_sContext); +} + +//***************************************************************************** +// +// This example demonstrates the use of the Ethernet Controller. +// +//***************************************************************************** +int +main(void) +{ + enum + { + eRequestIdle, + eRequestUpdate, + eRequestForecast, + eRequestCurrent, + eRequestComplete, + } + iRequest; + int32_t i32City; + sParameters *pParams; + iRequest = eRequestIdle; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Logo Screen + // + TIWelcome(); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "qs-weather"); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sMainBackground); + + // + // Start on the main screen. + // + g_i32ScreenIdx = SCREEN_MAIN; + + WidgetPaint(WIDGET_ROOT); + + // + // Make sure the main oscillator is enabled because this is required by + // the PHY. The system must have a 25MHz crystal attached to the OSC + // pins. The SYSCTL_MOSC_HIGHFREQ parameter is used when the crystal + // frequency is 10MHz or higher. + // + SysCtlMOSCConfigSet(SYSCTL_MOSC_HIGHFREQ); + + // + // Configure SysTick for a periodic interrupt at 10ms. + // + SysTickPeriodSet((g_ui32SysClock / 1000) * SYSTEM_TICK_MS); + SysTickEnable(); + SysTickIntEnable(); + + // + // Initialized the flash program block and read the current settings. + // + FlashPBInit(FLASH_PB_START, FLASH_PB_END, 256); + pParams = (sParameters *)FlashPBGet(); + + // + // Use the defaults if no settings were found. + // + if(pParams == 0) + { + g_sConfig = g_sDefaultParams; + } + else + { + g_sConfig = *pParams; + } + + // + // Initialize all of the cities. + // + for(i32City = 0; i32City < NUM_CITIES; i32City++) + { + ResetCity(i32City); + } + + // + // Initialize the swipe state. + // + g_sSwipe.eMovement = iSwipeNone; + + // + // Set the IP address to 0.0.0.0. + // + UpdateIPAddress(g_pcIPAddr, 0); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(g_ui32SysClock); + TouchScreenCallbackSet(TouchCallback); + + // + // Enable processor interrupts. + // + IntMasterEnable(); + + // + // Set the interrupt priorities. We set the SysTick interrupt to a higher + // priority than the Ethernet interrupt to ensure that the file system + // tick is processed if SysTick occurs while the Ethernet handler is being + // processed. This is very likely since all the TCP/IP and HTTP work is + // done in the context of the Ethernet interrupt. + // + IntPriorityGroupingSet(4); + IntPrioritySet(INT_EMAC0, ETHERNET_INT_PRIORITY); + IntPrioritySet(FAULT_SYSTICK, SYSTICK_INT_PRIORITY); + + if(g_sConfig.bProxyEnabled) + { + EthClientProxySet(g_sConfig.pcProxy); + EthClientInit(EnetEvents); + } + else + { + EthClientProxySet(0); + EthClientInit(EnetEvents); + } + + UpdateMACAddr(); + + // + // Initialize the city index and enable swipe detection. + // + g_ui32CityActive = 0; + g_ui32CityUpdating = 0; + g_sSwipe.bEnable = true; + + // + // Display the current city information. + // + UpdateCity(g_ui32CityActive, true); + + // + // One minute timeout for screen saver. + // + g_ui32ScreenSaver = SYSTEM_TICK_S * 60; + + // + // Loop forever. All the work is done in interrupt handlers. + // + while(1) + { + if(g_iState == STATE_NEW_CONNECTION) + { + iRequest = eRequestIdle; + + g_iState = STATE_CONNECTED_IDLE; + } + else if(g_iState == STATE_CONNECTED_IDLE) + { + if(iRequest == eRequestIdle) + { + // + // If this city needs updating then start an update. + // + if((g_psCityInfo[g_ui32CityUpdating].bNeedsUpdate) && + ((g_ui32CityUpdating < NUM_CITIES - 1) || + (g_sConfig.bCustomEnabled == true))) + { + iRequest = eRequestUpdate; + + // + // Change the status to updating if on the main screen. + // + if((g_ui32CityUpdating == g_ui32CityActive) && + (g_i32ScreenIdx == SCREEN_MAIN)) + { + // + // Display the waiting message. + // + ustrncpy(g_pcStatus, g_pcWaitData, sizeof(g_pcStatus)); + WidgetPaint((tWidget *)&g_sStatus); + } + } + + if(iRequest != eRequestUpdate) + { + // + // If the custom city is enabled and it needs updating, + // then update it first. + // + if((g_psCityInfo[NUM_CITIES - 1].bNeedsUpdate) && + (g_sConfig.bCustomEnabled == true)) + { + g_ui32CityUpdating = NUM_CITIES - 1; + } + else + { + // + // Move on to the next city to see if it needs to be + // updated on the next pass. + // + g_ui32CityUpdating++; + } + if(g_ui32CityUpdating >= NUM_CITIES) + { + g_ui32CityUpdating = 0; + } + } + } + else if(iRequest == eRequestUpdate) + { + g_iState = STATE_WAIT_DATA; + + // + // Timeout at 10 seconds. + // + g_ui32Delay = 1000; + + WeatherForecast(iWSrcOpenWeatherMap, + g_psCityInfo[g_ui32CityUpdating].pcName, + &g_psCityInfo[g_ui32CityUpdating].sReport, + WeatherEvent); + + iRequest = eRequestForecast; + } + else if(iRequest == eRequestForecast) + { + g_iState = STATE_WAIT_DATA; + + // + // Timeout at 10 seconds. + // + g_ui32Delay = 1000; + + WeatherCurrent(iWSrcOpenWeatherMap, + g_psCityInfo[g_ui32CityUpdating].pcName, + &g_psCityInfo[g_ui32CityUpdating].sReport, + WeatherEvent); + + iRequest = eRequestCurrent; + } + else if(iRequest == eRequestCurrent) + { + // + // Return to the idle request state. + // + iRequest = eRequestIdle; + + // + // Done updating this city. + // + g_psCityInfo[g_ui32CityUpdating].bNeedsUpdate = false; + } + } + else if(g_iState == STATE_UPDATE_CITY) + { + if(iRequest == eRequestCurrent) + { + // + // If the city is the current active city and the the + // application is on the main screen then update the screen + // and not just the values. + // + if(g_ui32CityUpdating == g_ui32CityActive) + { + // + // Update the current city. + // + if(g_i32ScreenIdx == SCREEN_MAIN) + { + UpdateCity(g_ui32CityUpdating, true); + } + else + { + UpdateCity(g_ui32CityUpdating, false); + } + } + + // + // Done updating this city. + // + g_psCityInfo[g_ui32CityUpdating].bNeedsUpdate = false; + } + + // + // Go to the wait nice state. + // + g_iState = STATE_WAIT_NICE; + + // + // 10ms * 10 is a 1 second delay between updates. + // + g_ui32Delay = SYSTEM_TICK_MS * 10; + } + else if(g_iState == STATE_WAIT_NICE) + { + // + // Wait for the "nice" delay to not hit the server too often. + // + if(g_ui32Delay == 0) + { + g_iState = STATE_CONNECTED_IDLE; + } + } + else if(g_iState == STATE_WAIT_DATA) + { + // + // If no data has been received by the timeout then close the + // connection. + // + if(g_ui32Delay == 0) + { + // + // Close out the current connection. + // + EthClientTCPDisconnect(); + } + } + + // + // Handle screen movements. + // + HandleMovement(); + + // + // Handle button animation. + // + AnimateButtons(false); + + // + // Handle keyboard entry if it is open. + // + HandleKeyboard(); + + // + // If nothing has happened for awhile, then move to a new city. + // + if(g_ui32ScreenSaver == 0) + { + // + // Reset the timeout for 10s to update the screen more often. + // + g_ui32ScreenSaver = 10 * SYSTEM_TICK_S; + + // + // Trigger a left swipe. + // + g_sSwipe.eMovement = iSwipeLeft; + } + + WidgetMessageQueueProcess(); + } +} diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.ewd b/boards/dk-tm4c129x/qs_weather/qs_weather.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.ewp b/boards/dk-tm4c129x/qs_weather/qs_weather.ewp new file mode 100644 index 0000000..e5ad3ac --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.ewp @@ -0,0 +1,838 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\eth_client.c + + + $PROJ_DIR$\..\..\..\..\utils\flash_pb.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\images.c + + + $PROJ_DIR$\json.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\utils\locator.c + + + $PROJ_DIR$\..\..\..\..\utils\lwiplib.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\qs_weather.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.icf b/boards/dk-tm4c129x/qs_weather/qs_weather.icf new file mode 100644 index 0000000..3161586 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// qs_weather.icf - Linker configuration file for qs_weather. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.ld b/boards/dk-tm4c129x/qs_weather/qs_weather.ld new file mode 100644 index 0000000..0e981fb --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * qs_weather.ld - Linker configuration file for qs_weather. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.sct b/boards/dk-tm4c129x/qs_weather/qs_weather.sct new file mode 100644 index 0000000..0f0224f --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; qs_weather.sct - Linker configuration file for qs_weather. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.uvopt b/boards/dk-tm4c129x/qs_weather/qs_weather.uvopt new file mode 100644 index 0000000..6de8f21 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.uvopt @@ -0,0 +1,471 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + qs_weather + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\eth_client.c + eth_client.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\flash_pb.c + flash_pb.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\images.c + images.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\json.c + json.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\locator.c + locator.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\lwiplib.c + lwiplib.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\qs_weather.c + qs_weather.c + + + 1 + 11 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 15 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 16 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 17 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather.uvproj b/boards/dk-tm4c129x/qs_weather/qs_weather.uvproj new file mode 100644 index 0000000..19664ce --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather.uvproj @@ -0,0 +1,489 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + qs_weather + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + qs_weather + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\qs_weather.bin .\rvmdk\qs_weather.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 LWIP_1_4_1 + + .;..;..\..\..\..;..\..\..\..\third_party\lwip-1.4.1\apps;..\..\..\..\third_party\lwip-1.4.1\ports\tiva-tm4c129\include;..\..\..\..\third_party\lwip-1.4.1\src\include;..\..\..\..\third_party\lwip-1.4.1\src\include\ipv4;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + qs_weather.sct + + + --entry Reset_Handler + + + + + + + + Source + + + eth_client.c + 1 + .\eth_client.c + + + flash_pb.c + 1 + ..\..\..\..\utils\flash_pb.c + + + frame.c + 1 + ..\drivers\frame.c + + + images.c + 1 + .\images.c + + + json.c + 1 + .\json.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + locator.c + 1 + ..\..\..\..\utils\locator.c + + + lwiplib.c + 1 + ..\..\..\..\utils\lwiplib.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + qs_weather.c + 1 + .\qs_weather.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/qs_weather/qs_weather_ccs.cmd b/boards/dk-tm4c129x/qs_weather/qs_weather_ccs.cmd new file mode 100644 index 0000000..cf784c9 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/qs_weather_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * qs_weather_ccs.cmd - CCS linker configuration file for qs_weather. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/qs_weather/readme.txt b/boards/dk-tm4c129x/qs_weather/readme.txt new file mode 100644 index 0000000..af26898 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/readme.txt @@ -0,0 +1,43 @@ +Quickstart Weather Application + +This example application demonstrates the operation of the Tiva C series +evaluation kit as a weather reporting application. + +The application supports updating weather information from Open Weather Map +weather provider(http://openweathermap.org/). The application uses the +lwIP stack to obtain an address through DNS, resolve the address of the +Open Weather Map site and then build and handle all of the requests +necessary to access the weather information. The application can also use +a web proxy, allows for a custom city to be added to the list of cities and +toggles temperature units from Celsius to Fahrenheit. The application uses +gestures to navigate between various screens. To open the settings screen +just press and drag down on any city screen. To exit the setting screen +press and drag up and you are returned to the main city display. To +navigate between cities, press and drag left or right and the new city +information is displayed. + +For additional details about Open Weather Map refer to their web page at: +http://openweathermap.org/ + +For additional details on lwIP, refer to the lwIP web page at: +http://savannah.nongnu.org/projects/lwip/ + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.axf b/boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.axf new file mode 100644 index 0000000..1469761 Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.axf differ diff --git a/boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.bin b/boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.bin new file mode 100644 index 0000000..9e5d9a5 Binary files /dev/null and b/boards/dk-tm4c129x/qs_weather/rvmdk/qs_weather.bin differ diff --git a/boards/dk-tm4c129x/qs_weather/startup_ccs.c b/boards/dk-tm4c129x/qs_weather/startup_ccs.c new file mode 100644 index 0000000..9a270fa --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/qs_weather/startup_ewarm.c b/boards/dk-tm4c129x/qs_weather/startup_ewarm.c new file mode 100644 index 0000000..b284964 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/qs_weather/startup_gcc.c b/boards/dk-tm4c129x/qs_weather/startup_gcc.c new file mode 100644 index 0000000..2dd0712 --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void lwIPEthernetIntHandler(void); +extern void SysTickIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + lwIPEthernetIntHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/qs_weather/startup_rvmdk.S b/boards/dk-tm4c129x/qs_weather/startup_rvmdk.S new file mode 100644 index 0000000..767456e --- /dev/null +++ b/boards/dk-tm4c129x/qs_weather/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN lwIPEthernetIntHandler + EXTERN SysTickIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD lwIPEthernetIntHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/scribble/Makefile b/boards/dk-tm4c129x/scribble/Makefile new file mode 100644 index 0000000..9aa1d3b --- /dev/null +++ b/boards/dk-tm4c129x/scribble/Makefile @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Makefile - Rules for building the scribble example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the scribble example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/scribble.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the scribble example. +# +${COMPILER}/scribble.axf: ${COMPILER}/frame.o +${COMPILER}/scribble.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/scribble.axf: ${COMPILER}/pinout.o +${COMPILER}/scribble.axf: ${COMPILER}/ringbuf.o +${COMPILER}/scribble.axf: ${COMPILER}/scribble.o +${COMPILER}/scribble.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/scribble.axf: ${COMPILER}/touch.o +${COMPILER}/scribble.axf: ${COMPILER}/ustdlib.o +${COMPILER}/scribble.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/scribble.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/scribble.axf: scribble.ld +SCATTERgcc_scribble=scribble.ld +ENTRY_scribble=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/scribble/ccs/.ccsimportspec b/boards/dk-tm4c129x/scribble/ccs/.ccsimportspec new file mode 100644 index 0000000..b34cde8 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/scribble/ccs/.ccsproject b/boards/dk-tm4c129x/scribble/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/scribble/ccs/.cproject b/boards/dk-tm4c129x/scribble/ccs/.cproject new file mode 100644 index 0000000..e82c0b5 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/.cproject @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/scribble/ccs/.project b/boards/dk-tm4c129x/scribble/ccs/.project new file mode 100644 index 0000000..369b681 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/.project @@ -0,0 +1,80 @@ + + + scribble + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + scribble.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/scribble/scribble.c + + + scribble_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/scribble/scribble_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/scribble/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/ringbuf.c + 1 + SW_ROOT/utils/ringbuf.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/scribble/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/scribble/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/scribble/ccs/Debug/scribble.bin b/boards/dk-tm4c129x/scribble/ccs/Debug/scribble.bin new file mode 100644 index 0000000..22002e0 Binary files /dev/null and b/boards/dk-tm4c129x/scribble/ccs/Debug/scribble.bin differ diff --git a/boards/dk-tm4c129x/scribble/ccs/Debug/scribble.out b/boards/dk-tm4c129x/scribble/ccs/Debug/scribble.out new file mode 100644 index 0000000..85e3113 Binary files /dev/null and b/boards/dk-tm4c129x/scribble/ccs/Debug/scribble.out differ diff --git a/boards/dk-tm4c129x/scribble/ccs/macros.ini_initial b/boards/dk-tm4c129x/scribble/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/scribble/ccs/target_config.ccxml b/boards/dk-tm4c129x/scribble/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.bin b/boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.bin new file mode 100644 index 0000000..c4328c4 Binary files /dev/null and b/boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.bin differ diff --git a/boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.out b/boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.out new file mode 100644 index 0000000..9b08717 Binary files /dev/null and b/boards/dk-tm4c129x/scribble/ewarm/Exe/scribble.out differ diff --git a/boards/dk-tm4c129x/scribble/gcc/scribble.axf b/boards/dk-tm4c129x/scribble/gcc/scribble.axf new file mode 100644 index 0000000..497aa65 Binary files /dev/null and b/boards/dk-tm4c129x/scribble/gcc/scribble.axf differ diff --git a/boards/dk-tm4c129x/scribble/gcc/scribble.bin b/boards/dk-tm4c129x/scribble/gcc/scribble.bin new file mode 100644 index 0000000..66ef308 Binary files /dev/null and b/boards/dk-tm4c129x/scribble/gcc/scribble.bin differ diff --git a/boards/dk-tm4c129x/scribble/readme.txt b/boards/dk-tm4c129x/scribble/readme.txt new file mode 100644 index 0000000..b49afec --- /dev/null +++ b/boards/dk-tm4c129x/scribble/readme.txt @@ -0,0 +1,28 @@ +Scribble Pad + +The scribble pad provides a drawing area on the screen. Touching the +screen will draw onto the drawing area using a selection of fundamental +colors (in other words, the seven colors produced by the three color +channels being either fully on or fully off). Each time the screen is +touched to start a new drawing, the drawing area is erased and the next +color is selected. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/scribble/rvmdk/scribble.axf b/boards/dk-tm4c129x/scribble/rvmdk/scribble.axf new file mode 100644 index 0000000..a05a43b Binary files /dev/null and b/boards/dk-tm4c129x/scribble/rvmdk/scribble.axf differ diff --git a/boards/dk-tm4c129x/scribble/rvmdk/scribble.bin b/boards/dk-tm4c129x/scribble/rvmdk/scribble.bin new file mode 100644 index 0000000..1af807f Binary files /dev/null and b/boards/dk-tm4c129x/scribble/rvmdk/scribble.bin differ diff --git a/boards/dk-tm4c129x/scribble/scribble.c b/boards/dk-tm4c129x/scribble/scribble.c new file mode 100644 index 0000000..c9d0723 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.c @@ -0,0 +1,399 @@ +//***************************************************************************** +// +// scribble.c - A simple scribble pad to demonstrate the touch screen driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "utils/ringbuf.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Scribble Pad (scribble)

      +//! +//! The scribble pad provides a drawing area on the screen. Touching the +//! screen will draw onto the drawing area using a selection of fundamental +//! colors (in other words, the seven colors produced by the three color +//! channels being either fully on or fully off). Each time the screen is +//! touched to start a new drawing, the drawing area is erased and the next +//! color is selected. +// +//***************************************************************************** + +//***************************************************************************** +// +// A structure used to pass touchscreen messages from the interrupt-context +// handler function to the main loop for processing. +// +//***************************************************************************** +typedef struct +{ + uint32_t ui32Msg; + int32_t i32X; + int32_t i32Y; +} +tScribbleMessage; + +//***************************************************************************** +// +// The number of messages we can store in the message queue. +// +//***************************************************************************** +#define MSG_QUEUE_SIZE 16 + +//***************************************************************************** +// +// The ring buffer memory and control structure we use to implement the +// message queue. +// +//***************************************************************************** +static tScribbleMessage g_psMsgQueueBuffer[MSG_QUEUE_SIZE]; +static tRingBufObject g_sMsgQueue; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The colors that are used to draw on the screen. +// +//***************************************************************************** +static const uint32_t g_pui32Colors[] = +{ + ClrWhite, + ClrYellow, + ClrMagenta, + ClrRed, + ClrCyan, + ClrLime, + ClrBlue +}; + +//***************************************************************************** +// +// The index to the current color in use. +// +//***************************************************************************** +static uint32_t g_ui32ColorIdx; + +//***************************************************************************** +// +// The previous pen position returned from the touch screen driver. +// +//***************************************************************************** +static int32_t g_i32X, g_i32Y; + +//***************************************************************************** +// +// The drawing context used to draw to the screen. +// +//***************************************************************************** +static tContext g_sContext; + +//***************************************************************************** +// +// The interrupt-context handler for touch screen events from the touch screen +// driver. This function merely bundles up the event parameters and posts +// them to a message queue. In the context of the main loop, they will be +// read from the queue and handled using TSMainHandler(). +// +//***************************************************************************** +int32_t +TSHandler(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + tScribbleMessage sMsg; + + // + // Build the message that we will write to the queue. + // + sMsg.ui32Msg = ui32Message; + sMsg.i32X = i32X; + sMsg.i32Y = i32Y; + + // + // Make sure the queue isn't full. If it is, we just ignore this message. + // + if(!RingBufFull(&g_sMsgQueue)) + { + RingBufWrite(&g_sMsgQueue, (uint8_t *)&sMsg, sizeof(tScribbleMessage)); + } + + // + // Tell the touch handler that everything is fine. + // + return(1); +} + +//***************************************************************************** +// +// The main loop handler for touch screen events from the touch screen driver. +// +//***************************************************************************** +int32_t +TSMainHandler(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + tRectangle sRect; + + // + // See which event is being sent from the touch screen driver. + // + switch(ui32Message) + { + // + // The pen has just been placed down. + // + case WIDGET_MSG_PTR_DOWN: + { + // + // Erase the drawing area. + // + GrContextForegroundSet(&g_sContext, ClrBlack); + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = 319; + sRect.i16YMax = 239; + GrRectFill(&g_sContext, &sRect); + + // + // Flush any cached drawing operations. + // + GrFlush(&g_sContext); + + // + // Set the drawing color to the current pen color. + // + GrContextForegroundSet(&g_sContext, g_pui32Colors[g_ui32ColorIdx]); + + // + // Save the current position. + // + g_i32X = i32X; + g_i32Y = i32Y; + + // + // This event has been handled. + // + break; + } + + // + // Then pen has moved. + // + case WIDGET_MSG_PTR_MOVE: + { + // + // Draw a line from the previous position to the current position. + // + GrLineDraw(&g_sContext, g_i32X, g_i32Y, i32X, i32Y); + + // + // Flush any cached drawing operations. + // + GrFlush(&g_sContext); + + // + // Save the current position. + // + g_i32X = i32X; + g_i32Y = i32Y; + + // + // This event has been handled. + // + break; + } + + // + // The pen has just been picked up. + // + case WIDGET_MSG_PTR_UP: + { + // + // Draw a line from the previous position to the current position. + // + GrLineDraw(&g_sContext, g_i32X, g_i32Y, i32X, i32Y); + + // + // Flush any cached drawing operations. + // + GrFlush(&g_sContext); + + // + // Increment to the next drawing color. + // + g_ui32ColorIdx++; + if(g_ui32ColorIdx == + (sizeof(g_pui32Colors) / sizeof(g_pui32Colors[0]))) + { + g_ui32ColorIdx = 0; + } + + // + // This event has been handled. + // + break; + } + } + + // + // Success. + // + return(1); +} + +//***************************************************************************** +// +// This function is called in the context of the main loop to process any +// touch screen messages that have been sent. Messages are posted to a +// queue from the message handler and pulled off here. This is required +// since it is not safe to have two different execution contexts performing +// graphics operations using the same graphics context. +// +//***************************************************************************** +void +ProcessTouchMessages(void) +{ + tScribbleMessage sMsg; + + // + // Loop while there are more messages to process. + // + while(!RingBufEmpty(&g_sMsgQueue)) + { + // + // Get the next message. + // + RingBufRead(&g_sMsgQueue, (uint8_t *)&sMsg, sizeof(tScribbleMessage)); + + // + // Dispatch it to the handler. + // + TSMainHandler(sMsg.ui32Msg, sMsg.i32X, sMsg.i32Y); + } +} + +//***************************************************************************** +// +// Provides a scribble pad using the display on the Intelligent Display Module. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "scribble"); + + // + // Print the instructions across the top of the screen in white with a 20 + // point san-serif font. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrContextFontSet(&g_sContext, g_psFontCmss20); + GrStringDrawCentered(&g_sContext, "Touch the screen to draw", -1, + GrContextDpyWidthGet(&g_sContext) / 2, + ((GrContextDpyHeightGet(&g_sContext) - 32) / 2) + 14, + 0); + + // + // Flush any cached drawing operations. + // + GrFlush(&g_sContext); + + // + // Set the color index to zero. + // + g_ui32ColorIdx = 0; + + // + // Initialize the message queue we use to pass messages from the touch + // interrupt handler context to the main loop for processing. + // + RingBufInit(&g_sMsgQueue, (uint8_t *)g_psMsgQueueBuffer, + (MSG_QUEUE_SIZE * sizeof(tScribbleMessage))); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(TSHandler); + + // + // Loop forever. All the drawing is done in the touch screen event + // handler. + // + while(1) + { + // + // Process any new touchscreen messages. + // + ProcessTouchMessages(); + } +} diff --git a/boards/dk-tm4c129x/scribble/scribble.ewd b/boards/dk-tm4c129x/scribble/scribble.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/scribble/scribble.ewp b/boards/dk-tm4c129x/scribble/scribble.ewp new file mode 100644 index 0000000..dadca7f --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\..\..\..\..\utils\ringbuf.c + + + $PROJ_DIR$\scribble.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/scribble/scribble.icf b/boards/dk-tm4c129x/scribble/scribble.icf new file mode 100644 index 0000000..58f279a --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// scribble.icf - Linker configuration file for scribble. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/scribble/scribble.ld b/boards/dk-tm4c129x/scribble/scribble.ld new file mode 100644 index 0000000..9e82a87 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * scribble.ld - Linker configuration file for scribble. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/scribble/scribble.sct b/boards/dk-tm4c129x/scribble/scribble.sct new file mode 100644 index 0000000..00eb028 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; scribble.sct - Linker configuration file for scribble. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/scribble/scribble.uvopt b/boards/dk-tm4c129x/scribble/scribble.uvopt new file mode 100644 index 0000000..4848f1a --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + scribble + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ringbuf.c + ringbuf.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\scribble.c + scribble.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/scribble/scribble.uvproj b/boards/dk-tm4c129x/scribble/scribble.uvproj new file mode 100644 index 0000000..13d7cec --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + scribble + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + scribble + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\scribble.bin .\rvmdk\scribble.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + scribble.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + ringbuf.c + 1 + ..\..\..\..\utils\ringbuf.c + + + scribble.c + 1 + .\scribble.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/scribble/scribble_ccs.cmd b/boards/dk-tm4c129x/scribble/scribble_ccs.cmd new file mode 100644 index 0000000..cd2e46c --- /dev/null +++ b/boards/dk-tm4c129x/scribble/scribble_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * scribble_ccs.cmd - CCS linker configuration file for scribble. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/scribble/startup_ccs.c b/boards/dk-tm4c129x/scribble/startup_ccs.c new file mode 100644 index 0000000..5d2884c --- /dev/null +++ b/boards/dk-tm4c129x/scribble/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/scribble/startup_ewarm.c b/boards/dk-tm4c129x/scribble/startup_ewarm.c new file mode 100644 index 0000000..860b8a6 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/scribble/startup_gcc.c b/boards/dk-tm4c129x/scribble/startup_gcc.c new file mode 100644 index 0000000..fad3049 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/scribble/startup_rvmdk.S b/boards/dk-tm4c129x/scribble/startup_rvmdk.S new file mode 100644 index 0000000..07659c1 --- /dev/null +++ b/boards/dk-tm4c129x/scribble/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/sd_card/Makefile b/boards/dk-tm4c129x/sd_card/Makefile new file mode 100644 index 0000000..2a4122e --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/Makefile @@ -0,0 +1,101 @@ +#****************************************************************************** +# +# Makefile - Rules for building the SD card example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fatfs/src/option +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../third_party/fatfs/src +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party + +# +# The default rule, which causes the SD card example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/sd_card.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the SD card example. +# +${COMPILER}/sd_card.axf: ${COMPILER}/cc932.o +${COMPILER}/sd_card.axf: ${COMPILER}/cmdline.o +${COMPILER}/sd_card.axf: ${COMPILER}/ff.o +${COMPILER}/sd_card.axf: ${COMPILER}/frame.o +${COMPILER}/sd_card.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/sd_card.axf: ${COMPILER}/mmc-dk-tm4c129x.o +${COMPILER}/sd_card.axf: ${COMPILER}/pinout.o +${COMPILER}/sd_card.axf: ${COMPILER}/sd_card.o +${COMPILER}/sd_card.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/sd_card.axf: ${COMPILER}/touch.o +${COMPILER}/sd_card.axf: ${COMPILER}/uartstdio.o +${COMPILER}/sd_card.axf: ${COMPILER}/ustdlib.o +${COMPILER}/sd_card.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/sd_card.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/sd_card.axf: sd_card.ld +SCATTERgcc_sd_card=sd_card.ld +ENTRY_sd_card=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DENABLE_LFN -DUART_BUFFERED + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/sd_card/ccs/.ccsimportspec b/boards/dk-tm4c129x/sd_card/ccs/.ccsimportspec new file mode 100644 index 0000000..67417bd --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/sd_card/ccs/.ccsproject b/boards/dk-tm4c129x/sd_card/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sd_card/ccs/.cproject b/boards/dk-tm4c129x/sd_card/ccs/.cproject new file mode 100644 index 0000000..4cf1f8e --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/.cproject @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sd_card/ccs/.project b/boards/dk-tm4c129x/sd_card/ccs/.project new file mode 100644 index 0000000..f6bd6d2 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/.project @@ -0,0 +1,100 @@ + + + sd_card + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + sd_card.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sd_card/sd_card.c + + + sd_card_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sd_card/sd_card_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sd_card/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/cmdline.c + 1 + SW_ROOT/utils/cmdline.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fatfs/port/mmc-dk-tm4c129x.c + 1 + SW_ROOT/third_party/fatfs/port/mmc-dk-tm4c129x.c + + + third_party/fatfs/src/ff.c + 1 + SW_ROOT/third_party/fatfs/src/ff.c + + + third_party/fatfs/src/option/cc932.c + 1 + SW_ROOT/third_party/fatfs/src/option/cc932.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/sd_card/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/sd_card/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.bin b/boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.bin new file mode 100644 index 0000000..4236f8d Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.bin differ diff --git a/boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.out b/boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.out new file mode 100644 index 0000000..ba13ff6 Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/ccs/Debug/sd_card.out differ diff --git a/boards/dk-tm4c129x/sd_card/ccs/macros.ini_initial b/boards/dk-tm4c129x/sd_card/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/sd_card/ccs/target_config.ccxml b/boards/dk-tm4c129x/sd_card/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.bin b/boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.bin new file mode 100644 index 0000000..93bfd71 Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.bin differ diff --git a/boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.out b/boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.out new file mode 100644 index 0000000..9055afc Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/ewarm/Exe/sd_card.out differ diff --git a/boards/dk-tm4c129x/sd_card/gcc/sd_card.axf b/boards/dk-tm4c129x/sd_card/gcc/sd_card.axf new file mode 100644 index 0000000..5a0575e Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/gcc/sd_card.axf differ diff --git a/boards/dk-tm4c129x/sd_card/gcc/sd_card.bin b/boards/dk-tm4c129x/sd_card/gcc/sd_card.bin new file mode 100644 index 0000000..4a81f2d Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/gcc/sd_card.bin differ diff --git a/boards/dk-tm4c129x/sd_card/readme.txt b/boards/dk-tm4c129x/sd_card/readme.txt new file mode 100644 index 0000000..ba7be54 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/readme.txt @@ -0,0 +1,35 @@ +SD card using FAT file system + +This example application demonstrates reading a file system from +an SD card. It makes use of FatFs, a FAT file system driver. It +provides a simple widget-based console on the display and also a +UART-based command line for viewing and navigating the file system +on the SD card. + +For additional details about FatFs, see the following site: +http://elm-chan.org/fsw/ff/00index_e.html + +The application may also be operated via a serial terminal attached to +UART0. The RS232 communication parameters should be set to 115,200 bits +per second, and 8-n-1 mode. When the program is started a message will +be printed to the terminal. Type ``help'' for command help. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/sd_card/rvmdk/sd_card.axf b/boards/dk-tm4c129x/sd_card/rvmdk/sd_card.axf new file mode 100644 index 0000000..6c57656 Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/rvmdk/sd_card.axf differ diff --git a/boards/dk-tm4c129x/sd_card/rvmdk/sd_card.bin b/boards/dk-tm4c129x/sd_card/rvmdk/sd_card.bin new file mode 100644 index 0000000..a50ccb1 Binary files /dev/null and b/boards/dk-tm4c129x/sd_card/rvmdk/sd_card.bin differ diff --git a/boards/dk-tm4c129x/sd_card/sd_card.c b/boards/dk-tm4c129x/sd_card/sd_card.c new file mode 100644 index 0000000..d1a7e6a --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.c @@ -0,0 +1,1579 @@ +//***************************************************************************** +// +// sd_card.c - Example program for reading files from an SD card. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/listbox.h" +#include "grlib/pushbutton.h" +#include "utils/cmdline.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "fatfs/src/ff.h" +#include "fatfs/src/diskio.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      SD card using FAT file system (sd_card)

      +//! +//! This example application demonstrates reading a file system from +//! an SD card. It makes use of FatFs, a FAT file system driver. It +//! provides a simple widget-based console on the display and also a +//! UART-based command line for viewing and navigating the file system +//! on the SD card. +//! +//! For additional details about FatFs, see the following site: +//! http://elm-chan.org/fsw/ff/00index_e.html +//! +//! The application may also be operated via a serial terminal attached to +//! UART0. The RS232 communication parameters should be set to 115,200 bits +//! per second, and 8-n-1 mode. When the program is started a message will +//! be printed to the terminal. Type ``help'' for command help. +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines the size of the buffers that hold the path, or temporary data from +// the SD card. There are two buffers allocated of this size. The buffer size +// must be large enough to hold the longest expected full path name, including +// the file name, and a trailing null character. +// +//***************************************************************************** +#define PATH_BUF_SIZE 80 + +//***************************************************************************** +// +// Defines the size of the buffer that holds the command line. +// +//***************************************************************************** +#define CMD_BUF_SIZE 64 + +//***************************************************************************** +// +// This buffer holds the full path to the current working directory. Initially +// it is root ("/"). +// +//***************************************************************************** +static char g_pcCwdBuf[PATH_BUF_SIZE] = "/"; + +//***************************************************************************** +// +// A temporary data buffer used when manipulating file paths, or reading data +// from the SD card. +// +//***************************************************************************** +static char g_pcTmpBuf[PATH_BUF_SIZE]; + +//***************************************************************************** +// +// The buffer that holds the command line. +// +//***************************************************************************** +static char g_pcCmdBuf[CMD_BUF_SIZE]; + +//***************************************************************************** +// +// The following are data structures used by FatFs. +// +//***************************************************************************** +static FATFS g_sFatFs; +static DIR g_sDirObject; +static FILINFO g_sFileInfo; +static FIL g_sFileObject; + +//***************************************************************************** +// +// A structure that holds a mapping between an FRESULT numerical code, and a +// string representation. FRESULT codes are returned from the FatFs FAT file +// system driver. +// +//***************************************************************************** +typedef struct +{ + FRESULT iFResult; + char *pcResultStr; +} +tFResultString; + +//***************************************************************************** +// +// A macro to make it easy to add result codes to the table. +// +//***************************************************************************** +#define FRESULT_ENTRY(f) { (f), (#f) } + +//***************************************************************************** +// +// A table that holds a mapping between the numerical FRESULT code and it's +// name as a string. This is used for looking up error codes for printing to +// the console. +// +//***************************************************************************** +tFResultString g_psFResultStrings[] = +{ + FRESULT_ENTRY(FR_OK), + FRESULT_ENTRY(FR_DISK_ERR), + FRESULT_ENTRY(FR_INT_ERR), + FRESULT_ENTRY(FR_NOT_READY), + FRESULT_ENTRY(FR_NO_FILE), + FRESULT_ENTRY(FR_NO_PATH), + FRESULT_ENTRY(FR_INVALID_NAME), + FRESULT_ENTRY(FR_DENIED), + FRESULT_ENTRY(FR_EXIST), + FRESULT_ENTRY(FR_INVALID_OBJECT), + FRESULT_ENTRY(FR_WRITE_PROTECTED), + FRESULT_ENTRY(FR_INVALID_DRIVE), + FRESULT_ENTRY(FR_NOT_ENABLED), + FRESULT_ENTRY(FR_NO_FILESYSTEM), + FRESULT_ENTRY(FR_MKFS_ABORTED), + FRESULT_ENTRY(FR_TIMEOUT), + FRESULT_ENTRY(FR_LOCKED), + FRESULT_ENTRY(FR_NOT_ENOUGH_CORE), + FRESULT_ENTRY(FR_TOO_MANY_OPEN_FILES), + FRESULT_ENTRY(FR_INVALID_PARAMETER), +}; + +//***************************************************************************** +// +// Error reasons returned by ChangeDirectory(). +// +//***************************************************************************** +#define NAME_TOO_LONG_ERROR 1 +#define OPENDIR_ERROR 2 + +//***************************************************************************** +// +// A macro that holds the number of result codes. +// +//***************************************************************************** +#define NUM_FRESULT_CODES (sizeof(g_psFResultStrings) / \ + sizeof(tFResultString)) + +//***************************************************************************** +// +// Storage for the filename listbox widget string table. +// +//***************************************************************************** +#define NUM_LIST_STRINGS 48 +const char *g_ppcDirListStrings[NUM_LIST_STRINGS]; + +//***************************************************************************** +// +// Storage for the names of the files in the current directory. Filenames +// are stored in format "(D) filename.ext" for directories or "(F) filename.ext" +// for files. +// +//***************************************************************************** +#define MAX_FILENAME_STRING_LEN (4 + 8 + 1 + 3 + 1) +char g_pcFilenames[NUM_LIST_STRINGS][MAX_FILENAME_STRING_LEN]; + +//***************************************************************************** +// +// Storage for the strings which appear in the status box at the bottom of the +// display. +// +//**************************************************************************** +#define NUM_STATUS_STRINGS 6 +#define MAX_STATUS_STRING_LEN (36 + 1) +char g_pcStatus[NUM_STATUS_STRINGS][MAX_STATUS_STRING_LEN]; + +//***************************************************************************** +// +// Storage for the status listbox widget string table. +// +//***************************************************************************** +const char *g_ppcStatusStrings[NUM_STATUS_STRINGS] = +{ + g_pcStatus[0], + g_pcStatus[1], + g_pcStatus[2], + g_pcStatus[3], + g_pcStatus[4], + g_pcStatus[5] +}; +uint32_t g_ui32StatusStringIndex = 0; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The system clock frequency in Hz. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// Forward declarations for functions called by the widgets used in the user +// interface. +// +//***************************************************************************** +void OnListBoxChange(tWidget *psWidget, int16_t i16Selected); +void OnBtnCD(tWidget *psWidget); +void OnBtnUp(tWidget *psWidget); +static int PopulateFileListBox(bool bRedraw); +static FRESULT ChangeToDirectory(char *pcDirectory, uint32_t *pui32Reason); +static int PrintfStatus(char *pcFormat, ...); +static const char *StringFromFResult(FRESULT iFResult); + +//***************************************************************************** +// +// Widget definitions +// +//***************************************************************************** + +//***************************************************************************** +// +// The listbox used to display directory contents. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; +extern tCanvasWidget g_sUpBackground; +extern tCanvasWidget g_sCDBackground; + +ListBox(g_sStatusList, &g_sBackground, 0, 0, &g_sKentec320x240x16_SSD2119, + 40, 170, 220, 52, (LISTBOX_STYLE_OUTLINE | LISTBOX_STYLE_LOCKED | + LISTBOX_STYLE_WRAP), ClrBlack, ClrBlack, ClrSilver, ClrSilver, ClrWhite, + g_psFontFixed6x8, g_ppcStatusStrings, NUM_STATUS_STRINGS, + NUM_STATUS_STRINGS, 0); + +ListBox(g_sDirList, &g_sBackground, &g_sStatusList, 0, + &g_sKentec320x240x16_SSD2119, + 40, 60, 120, 100, LISTBOX_STYLE_OUTLINE, ClrBlack, ClrDarkBlue, + ClrSilver, ClrWhite, ClrWhite, g_psFontCmss12, g_ppcDirListStrings, + NUM_LIST_STRINGS, 0, OnListBoxChange); + +//***************************************************************************** +// +// The canvas widget used to show the current directory prompt. +// +//***************************************************************************** +Canvas(g_sPWDTitle, &g_sBackground, &g_sDirList, 0, + &g_sKentec320x240x16_SSD2119, 10, 35, 40, 20, CANVAS_STYLE_TEXT, + ClrBlack, 0, ClrWhite, g_psFontCmss12, "PWD:", 0, 0); + +//***************************************************************************** +// +// The canvas widget used to show the current directory. +// +//***************************************************************************** +Canvas(g_sPWD, &g_sBackground, &g_sPWDTitle, 0, &g_sKentec320x240x16_SSD2119, + 50, 35, 260, 20, (CANVAS_STYLE_TEXT | CANVAS_STYLE_FILL | + CANVAS_STYLE_TEXT_LEFT), ClrBlack, 0, ClrWhite, g_psFontCmss12, + g_pcCwdBuf, 0, 0); + +//***************************************************************************** +// +// The button used to change to the selected directory directory. +// +//***************************************************************************** +RectangularButton(g_sCDBtn, &g_sCDBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 170, 75, 90, 30, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY), + ClrBlack, ClrBlue, ClrWhite, ClrWhite, + g_psFontCm20, "CD", 0, 0, 0, 0, OnBtnCD); + +//***************************************************************************** +// +// The canvas widget acting as the background to the CD button. +// +//***************************************************************************** +Canvas(g_sCDBackground, WIDGET_ROOT, 0, 0, + &g_sKentec320x240x16_SSD2119, 170, 75, 90, 30, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The button used to change to the next higher directory. +// +//***************************************************************************** +RectangularButton(g_sUpBtn, &g_sUpBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 170, 115, 90, 30, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY), + ClrBlack, ClrBlue, ClrWhite, ClrWhite, + g_psFontCm20, "Up", 0, 0, 0, 0, OnBtnUp); + +//***************************************************************************** +// +// The canvas widget acting as the background to the UP button. +// +//***************************************************************************** +Canvas(g_sUpBackground, WIDGET_ROOT, &g_sCDBackground, 0, + &g_sKentec320x240x16_SSD2119, 170, 115, 90, 30, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The canvas widget acting as the background to the left portion of the +// display. +// +//***************************************************************************** +Canvas(g_sBackground, WIDGET_ROOT, &g_sUpBackground, &g_sPWD, + &g_sKentec320x240x16_SSD2119, 10, 60, 120, 160, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The listbox widget callback function. +// +// This function is called whenever someone changes the selected entry in the +// listbox containing the files and directories found in the current directory. +// +//***************************************************************************** +void OnListBoxChange(tWidget *psWidget, int16_t i16Selected) +{ + int16_t i16Sel; + + // + // Get the current selection from the list box. + // + i16Sel = ListBoxSelectionGet(&g_sDirList); + + // + // Is there any selection? + // + if(i16Sel == -1) + { + return; + } + else + { + // + // Is the selection a directory name? + // + if(g_pcFilenames[i16Sel][1] == 'D') + { + // + // Enable the "CD" button. + // + WidgetAdd((tWidget *)&g_sCDBackground, (tWidget *)&g_sCDBtn); + } + else + { + // + // Hide the "CD" button. + // + WidgetRemove((tWidget *)&g_sCDBtn); + } + + // + // Make sure the CD button (or its background) is drawn correctly). + // + WidgetPaint((tWidget *)&g_sCDBackground); + } + + // + // Update the status display to say what we've done. + // + PrintfStatus("Selected %s %s\n", + (g_pcFilenames[i16Sel][1] == 'D') ? "dir" : "file", + &g_pcFilenames[i16Sel][4]); +} + +//***************************************************************************** +// +// The "CD" button widget callback function. +// +// This function is called whenever someone presses the "CD" button. +// +//***************************************************************************** +void OnBtnCD(tWidget *psWidget) +{ + int16_t i16Selected; + uint32_t ui32Reason; + FRESULT iFResult; + // + // Get the current selection from the list box. + // + i16Selected = ListBoxSelectionGet(&g_sDirList); + + // + // Is there any selection? + // + if(i16Selected == -1) + { + return; + } + else + { + // + // Is the selection a directory name? + // + if(g_pcFilenames[i16Selected][1] == 'D') + { + // + // Yes - change to the new directory. + // + iFResult = ChangeToDirectory(&g_pcFilenames[i16Selected][4], + &ui32Reason); + + if(iFResult != FR_OK) + { + // + // Update the status display to show the error. + // + PrintfStatus("Error changing directory."); + PrintfStatus((char *)StringFromFResult(iFResult)); + } + else + { + // + // Tell the user what happened. + // + PrintfStatus("Changed to %s", g_pcCwdBuf); + + // + // Update the directory name and the list box contents. + // + PopulateFileListBox(true); + WidgetPaint((tWidget *)&g_sPWD); + + // + // Enable the "Up" button and disable the "CD" button. + // + WidgetAdd((tWidget *)&g_sUpBackground, (tWidget *)&g_sUpBtn); + WidgetRemove((tWidget *)&g_sCDBtn); + + // + // Make sure the buttons are repainted correctly. + // + WidgetPaint((tWidget *)&g_sUpBtn); + WidgetPaint((tWidget *)&g_sCDBackground); + } + } + } +} + +//***************************************************************************** +// +// The "Up" button widget callback function. +// +// This function is called whenever someone presses the "Up" button. +// +//***************************************************************************** +void OnBtnUp(tWidget *psWidget) +{ + uint32_t ui32Reason; + FRESULT iFResult; + + // + // Change up one directory. + // + iFResult = ChangeToDirectory("..", &ui32Reason); + + if(iFResult != FR_OK) + { + // + // Update the status display to show the error. + // + PrintfStatus("Error changing directory."); + PrintfStatus((char *)StringFromFResult(iFResult)); + } + else + { + // + // Update the directory name and the list box contents. + // + WidgetPaint((tWidget *)&g_sPWD); + PopulateFileListBox(true); + + // + // If we are now in the root directory, hide the "Up" button. + // + if((strlen(g_pcCwdBuf) == 1) && (g_pcCwdBuf[0] == '/')) + { + WidgetRemove((tWidget *)&g_sUpBtn); + } + else + { + WidgetAdd((tWidget *)&g_sUpBackground, (tWidget *)&g_sUpBtn); + } + + // + // Disable the CD button since repopulating the list removes the + // selection. + // + WidgetRemove((tWidget *)&g_sCDBtn); + + // + // Tell the user what happened. + // + PrintfStatus("Changed to %s", g_pcCwdBuf); + + // + // Repaint the buttons. + // + WidgetPaint((tWidget *)&g_sUpBackground); + WidgetPaint((tWidget *)&g_sCDBackground); + } +} + +//***************************************************************************** +// +// This function is used to add a new string to the status list box at the +// bottom of the display. This shows errors and echos user commands entered +// via the UART. +// +//***************************************************************************** +static int +PrintfStatus(char *pcFormat, ...) +{ + int32_t i32Ret; + va_list vaArgP; + + // + // Start the varargs processing. + // + va_start(vaArgP, pcFormat); + + // + // Call vsnprintf to perform the conversion. + // + i32Ret = uvsnprintf(g_pcStatus[g_ui32StatusStringIndex], + MAX_STATUS_STRING_LEN, pcFormat, vaArgP); + + // + // End the varargs processing. + // + va_end(vaArgP); + + // + // Add the new string to the status listbox. + // + ListBoxTextAdd(&g_sStatusList, g_pcStatus[g_ui32StatusStringIndex]); + + // + // Update our string index. + // + g_ui32StatusStringIndex++; + if(g_ui32StatusStringIndex == NUM_STATUS_STRINGS) + { + g_ui32StatusStringIndex = 0; + } + + // + // Repaint the status listbox. + // + WidgetPaint((tWidget *)&g_sStatusList); + + // + // Return the conversion count. + // + return(i32Ret); + +} + +//***************************************************************************** +// +// This function returns a string representation of an error code +// that was returned from a function call to FatFs. It can be used +// for printing human readable error messages. +// +//***************************************************************************** +static const char * +StringFromFResult(FRESULT iFResult) +{ + uint32_t ui32Idx; + + // + // Enter a loop to search the error code table for a matching error code. + // + for(ui32Idx = 0; ui32Idx < NUM_FRESULT_CODES; ui32Idx++) + { + // + // If a match is found, then return the string name of the error code. + // + if(g_psFResultStrings[ui32Idx].iFResult == iFResult) + { + return(g_psFResultStrings[ui32Idx].pcResultStr); + } + } + + // + // At this point no matching code was found, so return a string indicating + // an unknown error. + // + return("UNKNOWN ERROR CODE"); +} + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. FatFs requires a timer tick +// every 10 ms for internal timing purposes. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Call the FatFs tick timer. + // + disk_timerproc(); +} + +//***************************************************************************** +// +// This function implements the "ls" command. It opens the current directory +// and enumerates through the contents, and prints a line for each item it +// finds. It shows details such as file attributes, time and date, and the +// file size, along with the name. It shows a summary of file sizes at the end +// along with free space. +// +//***************************************************************************** +int +Cmd_ls(int argc, char *argv[]) +{ + uint32_t ui32TotalSize, ui32ItemCount, ui32FileCount, ui32DirCount; + FRESULT iFResult; + FATFS *psFatFs; + char *pcFileName; +#if _USE_LFN + char pucLfn[_MAX_LFN + 1]; + g_sFileInfo.lfname = pucLfn; + g_sFileInfo.lfsize = sizeof(pucLfn); +#endif + + // + // Empty the list box on the display. + // + ListBoxClear(&g_sDirList); + + // + // Make sure the list box will be redrawn next time the message queue + // is processed. + // + WidgetPaint((tWidget *)&g_sDirList); + + // + // Open the current directory for access. + // + iFResult = f_opendir(&g_sDirObject, g_pcCwdBuf); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + // + // Ensure that the error is reported. + // + ListBoxTextAdd(&g_sDirList, "Error from SD Card:"); + ListBoxTextAdd(&g_sDirList, (char *)StringFromFResult(iFResult)); + return(iFResult); + } + + ui32TotalSize = 0; + ui32FileCount = 0; + ui32DirCount = 0; + ui32ItemCount = 0; + + // + // Give an extra blank line before the listing. + // + UARTprintf("\n"); + + // + // Enter loop to enumerate through all directory entries. + // + for(;;) + { + // + // Read an entry from the directory. + // + iFResult = f_readdir(&g_sDirObject, &g_sFileInfo); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + return((int)iFResult); + } + + // + // If the file name is blank, then this is the end of the listing. + // + if(!g_sFileInfo.fname[0]) + { + break; + } + +#if _USE_LFN + pcFileName = ((*g_sFileInfo.lfname)?g_sFileInfo.lfname:g_sFileInfo.fname); +#else + pcFileName = g_sFileInfo.fname; +#endif + + // + // Print the entry information on a single line with formatting to show + // the attributes, date, time, size, and name. + // + UARTprintf("%c%c%c%c%c %u/%02u/%02u %02u:%02u %9u %s\n", + (g_sFileInfo.fattrib & AM_DIR) ? 'D' : '-', + (g_sFileInfo.fattrib & AM_RDO) ? 'R' : '-', + (g_sFileInfo.fattrib & AM_HID) ? 'H' : '-', + (g_sFileInfo.fattrib & AM_SYS) ? 'S' : '-', + (g_sFileInfo.fattrib & AM_ARC) ? 'A' : '-', + (g_sFileInfo.fdate >> 9) + 1980, + (g_sFileInfo.fdate >> 5) & 15, + g_sFileInfo.fdate & 31, + (g_sFileInfo.ftime >> 11), + (g_sFileInfo.ftime >> 5) & 63, + g_sFileInfo.fsize, + pcFileName); + + // + // Add the information as a line in the listbox widget. + // + if(ui32ItemCount < NUM_LIST_STRINGS) + { + usprintf(g_pcFilenames[ui32ItemCount], "(%c) %12s", + (g_sFileInfo.fattrib & AM_DIR) ? 'D' : 'F', + g_sFileInfo.fname); + ListBoxTextAdd(&g_sDirList, g_pcFilenames[ui32ItemCount]); + } + + // + // If the attribute is directory, then increment the directory count. + // + if(g_sFileInfo.fattrib & AM_DIR) + { + ui32DirCount++; + } + + // + // Otherwise, it is a file. Increment the file count, and + // add in the file size to the total. + // + else + { + ui32FileCount++; + ui32TotalSize += g_sFileInfo.fsize; + } + + // + // Move to the next entry in the item array we use to populate the + // list box. + // + ui32ItemCount++; + + // + // Wait for the UART transmit buffer to empty. + // + UARTFlushTx(false); + + } // endfor + + // + // Print summary lines showing the file, dir, and size totals. + // + UARTprintf("\n%4u File(s),%10u bytes total\n%4u Dir(s)", + ui32FileCount, ui32TotalSize, ui32DirCount); + + // + // Get the free space. + // + iFResult = f_getfree("/", (DWORD *)&ui32TotalSize, &psFatFs); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + return((int)iFResult); + } + + // + // Display the amount of free space that was calculated. + // + UARTprintf(", %10uK bytes free\n", (ui32TotalSize * + psFatFs->free_clust / 2)); + // + // Wait for the UART transmit buffer to empty. + // + UARTFlushTx(false); + + // + // Made it to here, return with no errors. + // + return(0); +} + +//***************************************************************************** +// +// This function is called to read the contents of the current directory on +// the SD card and fill the listbox containing the names of all files and +// directories. +// +//***************************************************************************** +static int +PopulateFileListBox(bool bRepaint) +{ + uint32_t ui32ItemCount; + FRESULT iFResult; + + // + // Empty the list box on the display. + // + ListBoxClear(&g_sDirList); + + // + // Make sure the list box will be redrawn next time the message queue + // is processed. + // + if(bRepaint) + { + WidgetPaint((tWidget *)&g_sDirList); + } + + // + // Open the current directory for access. + // + iFResult = f_opendir(&g_sDirObject, g_pcCwdBuf); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + // + // Ensure that the error is reported. + // + PrintfStatus("Error from SD Card:"); + PrintfStatus((char *)StringFromFResult(iFResult)); + return(iFResult); + } + + ui32ItemCount = 0; + + // + // Enter loop to enumerate through all directory entries. + // + for(;;) + { + // + // Read an entry from the directory. + // + iFResult = f_readdir(&g_sDirObject, &g_sFileInfo); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + PrintfStatus("Error from SD Card:"); + PrintfStatus((char *)StringFromFResult(iFResult)); + return(iFResult); + } + + // + // If the file name is blank, then this is the end of the + // listing. + // + if(!g_sFileInfo.fname[0]) + { + break; + } + + // + // Add the information as a line in the listbox widget. + // + if(ui32ItemCount < NUM_LIST_STRINGS) + { + usnprintf(g_pcFilenames[ui32ItemCount], MAX_FILENAME_STRING_LEN, + "(%c) %s", (g_sFileInfo.fattrib & AM_DIR) ? 'D' : 'F', + g_sFileInfo.fname); + ListBoxTextAdd(&g_sDirList, g_pcFilenames[ui32ItemCount]); + } + + // + // Move to the next entry in the item array we use to populate the + // list box. + // + ui32ItemCount++; + } // endfor + + // + // Made it to here, return with no errors. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "cd" command. It takes an argument +// that specifes the directory to make the current working directory. +// Path separators must use a forward slash "/". The argument to cd +// can be one of the following: +// * root ("/") +// * a fully specified path ("/my/path/to/mydir") +// * a single directory name that is in the current directory ("mydir") +// * parent directory ("..") +// +// It does not understand relative paths, so dont try something like this: +// ("../my/new/path") +// +// Once the new directory is specified, it attempts to open the directory to +// make sure it exists. If the new path is opened successfully, then the +// current working directory (cwd) is changed to the new path. +// +// In cases of error, the pui32Reason parameter will be written with one of +// the following values: +// +//***************************************************************************** +static FRESULT +ChangeToDirectory(char *pcDirectory, uint32_t *pui32Reason) +{ + uint32_t ui32Idx; + FRESULT iFResult; + + // + // Copy the current working path into a temporary buffer so it can be + // manipulated. + // + strcpy(g_pcTmpBuf, g_pcCwdBuf); + + // + // If the first character is /, then this is a fully specified path, and it + // should just be used as-is. + // + if(pcDirectory[0] == '/') + { + // + // Make sure the new path is not bigger than the cwd buffer. + // + if(strlen(pcDirectory) + 1 > sizeof(g_pcCwdBuf)) + { + *pui32Reason = NAME_TOO_LONG_ERROR; + return(FR_OK); + } + + // + // If the new path name (in argv[1]) is not too long, then + // copy it into the temporary buffer so it can be checked. + // + else + { + strncpy(g_pcTmpBuf, pcDirectory, sizeof(g_pcTmpBuf)); + } + } + + // + // If the argument is .. then attempt to remove the lowest level + // on the CWD. + // + else if(!strcmp(pcDirectory, "..")) + { + // + // Get the index to the last character in the current path. + // + ui32Idx = strlen(g_pcTmpBuf) - 1; + + // + // Back up from the end of the path name until a separator (/) is + // found, or until we bump up to the start of the path. + // + while((g_pcTmpBuf[ui32Idx] != '/') && (ui32Idx > 1)) + { + // + // Back up one character. + // + ui32Idx--; + } + + // + // Now we are either at the lowest level separator in the current path, + // or at the beginning of the string (root). So set the new end of + // string here, effectively removing that last part of the path. + // + g_pcTmpBuf[ui32Idx] = 0; + } + + // + // Otherwise this is just a normal path name from the current directory, + // and it needs to be appended to the current path. + // + else + { + // + // Test to make sure that when the new additional path is added on to + // the current path, there is room in the buffer for the full new path. + // It needs to include a new separator, and a trailing null character. + // + if(strlen(g_pcTmpBuf) + strlen(pcDirectory) + 1 + 1 > sizeof(g_pcCwdBuf)) + { + *pui32Reason = NAME_TOO_LONG_ERROR; + return(FR_INVALID_OBJECT); + } + + // + // The new path is okay, so add the separator and then append the new + // directory to the path. + // + else + { + // + // If not already at the root level, then append a / + // + if(strcmp(g_pcTmpBuf, "/")) + { + strcat(g_pcTmpBuf, "/"); + } + + // + // Append the new directory to the path. + // + strcat(g_pcTmpBuf, pcDirectory); + } + } + + // + // At this point, a candidate new directory path is in chTmpBuf. Try to + // open it to make sure it is valid. + // + iFResult = f_opendir(&g_sDirObject, g_pcTmpBuf); + + // + // If it can't be opened, then it is a bad path. Inform the user and + // return. + // + if(iFResult != FR_OK) + { + *pui32Reason = OPENDIR_ERROR; + return(iFResult); + } + + // + // Otherwise, it is a valid new path, so copy it into the CWD and update + // the screen. + // + else + { + strncpy(g_pcCwdBuf, g_pcTmpBuf, sizeof(g_pcCwdBuf)); + } + + // + // Return success. + // + return(FR_OK); +} + +//***************************************************************************** +// +// This function implements the "cd" command. It takes an argument +// that specifes the directory to make the current working directory. +// Path separators must use a forward slash "/". The argument to cd +// can be one of the following: +// * root ("/") +// * a fully specified path ("/my/path/to/mydir") +// * a single directory name that is in the current directory ("mydir") +// * parent directory ("..") +// +// It does not understand relative paths, so dont try something like this: +// ("../my/new/path") +// +// Once the new directory is specified, it attempts to open the directory +// to make sure it exists. If the new path is opened successfully, then +// the current working directory (cwd) is changed to the new path. +// +//***************************************************************************** +int +Cmd_cd(int argc, char *argv[]) +{ + uint32_t ui32Reason; + FRESULT iFResult; + + // + // Try to change to the directory provided on the command line. + // + iFResult = ChangeToDirectory(argv[1], &ui32Reason); + + // + // If an error was reported, try to offer some helpful information. + // + if(iFResult != FR_OK) + { + switch(ui32Reason) + { + case OPENDIR_ERROR: + UARTprintf("Error opening new directory.\n"); + PrintfStatus("Error opening new directory.\n"); + break; + + case NAME_TOO_LONG_ERROR: + UARTprintf("Resulting path name is too long.\n"); + PrintfStatus("Resulting path name is too long.\n"); + break; + + default: + UARTprintf("An unrecognized error was reported.\n"); + PrintfStatus("An unrecognized error was reported.\n"); + break; + } + } + else + { + // + // Tell the user what happened. + // + PrintfStatus("Changed to %s", g_pcCwdBuf); + + // + // Update the contents of the file list. + // + PopulateFileListBox(true); + + // + // Update the current directory on the display. + // + WidgetPaint((tWidget *)&g_sPWD); + + // + // Enable the "Up" button if we are no longer in the root directory. + // + if((g_pcCwdBuf[0] == '/') && (g_pcCwdBuf[1] == '\0')) + { + // + // We are in the root directory so disable the "Up" button. + // + WidgetRemove((tWidget *)&g_sUpBtn); + } + else + { + // + // Enable the "Up" button. + // + WidgetAdd((tWidget *)&g_sUpBackground, (tWidget *)&g_sUpBtn); + } + + // + // Make sure the "Up" button is repainted correctly. + // + WidgetPaint((tWidget *)&g_sUpBackground); + } + + // + // Return the appropriate error code. + // + return(iFResult); +} + +//***************************************************************************** +// +// This function implements the "pwd" command. It simply prints the current +// working directory. +// +//***************************************************************************** +int +Cmd_pwd(int argc, char *argv[]) +{ + // + // Print the CWD to the console. + // + UARTprintf("%s\n", g_pcCwdBuf); + + // + // Wait for the UART transmit buffer to empty. + // + UARTFlushTx(false); + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "cat" command. It reads the contents of a file +// and prints it to the console. This should only be used on text files. If +// it is used on a binary file, then a bunch of garbage is likely to printed on +// the console. +// +//***************************************************************************** +int +Cmd_cat(int argc, char *argv[]) +{ + FRESULT iFResult; + uint32_t ui32BytesRead; + + // + // First, check to make sure that the current path (CWD), plus the file + // name, plus a separator and trailing null, will all fit in the temporary + // buffer that will be used to hold the file name. The file name must be + // fully specified, with path, to FatFs. + // + if(strlen(g_pcCwdBuf) + strlen(argv[1]) + 1 + 1 > sizeof(g_pcTmpBuf)) + { + UARTprintf("Resulting path name is too long\n"); + return(0); + } + + // + // Copy the current path to the temporary buffer so it can be manipulated. + // + strcpy(g_pcTmpBuf, g_pcCwdBuf); + + // + // If not already at the root level, then append a separator. + // + if(strcmp("/", g_pcCwdBuf)) + { + strcat(g_pcTmpBuf, "/"); + } + + // + // Now finally, append the file name to result in a fully specified file. + // + strcat(g_pcTmpBuf, argv[1]); + + // + // Open the file for reading. + // + iFResult = f_open(&g_sFileObject, g_pcTmpBuf, FA_READ); + + // + // If there was some problem opening the file, then return an error. + // + if(iFResult != FR_OK) + { + return((int)iFResult); + } + + // + // Enter a loop to repeatedly read data from the file and display it, until + // the end of the file is reached. + // + do + { + // + // Read a block of data from the file. Read as much as can fit in the + // temporary buffer, including a space for the trailing null. + // + iFResult = f_read(&g_sFileObject, g_pcTmpBuf, sizeof(g_pcTmpBuf) - 1, + (UINT *)&ui32BytesRead); + + // + // If there was an error reading, then print a newline and return the + // error to the user. + // + if(iFResult != FR_OK) + { + UARTprintf("\n"); + return((int)iFResult); + } + + // + // Null terminate the last block that was read to make it a null + // terminated string that can be used with printf. + // + g_pcTmpBuf[ui32BytesRead] = 0; + + // + // Print the last chunk of the file that was received. + // + UARTprintf("%s", g_pcTmpBuf); + + // + // Wait for the UART transmit buffer to empty. + // + UARTFlushTx(false); + + // + // Continue reading until less than the full number of bytes are + // read. That means the end of the buffer was reached. + // + } + while(ui32BytesRead == sizeof(g_pcTmpBuf) - 1); + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "help" command. It prints a simple list of the +// available commands with a brief description. +// +//***************************************************************************** +int +Cmd_help(int argc, char *argv[]) +{ + tCmdLineEntry *psEntry; + + // + // Print some header text. + // + UARTprintf("\nAvailable commands\n"); + UARTprintf("------------------\n"); + + // + // Point at the beginning of the command table. + // + psEntry = &g_psCmdTable[0]; + + // + // Enter a loop to read each entry from the command table. The end of the + // table has been reached when the command name is NULL. + // + while(psEntry->pcCmd) + { + // + // Print the command name and the brief description. + // + UARTprintf("%6s: %s\n", psEntry->pcCmd, psEntry->pcHelp); + + // + // Advance to the next entry in the table. + // + psEntry++; + + // + // Wait for the UART to catch up. + // + UARTFlushTx(false); + } + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This is the table that holds the command names, implementing functions, and +// brief description. +// +//***************************************************************************** +tCmdLineEntry g_psCmdTable[] = +{ + { "help", Cmd_help, "Display list of commands" }, + { "h", Cmd_help, "alias for help" }, + { "?", Cmd_help, "alias for help" }, + { "ls", Cmd_ls, "Display list of files" }, + { "chdir", Cmd_cd, "Change directory" }, + { "cd", Cmd_cd, "alias for chdir" }, + { "pwd", Cmd_pwd, "Show current working directory" }, + { "cat", Cmd_cat, "Show contents of a text file" }, + { 0, 0, 0 } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The program main function. It performs initialization, then runs a command +// processing loop to read commands from the console. +// +//***************************************************************************** +int +main(void) +{ + int nStatus; + FRESULT iFResult; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "sd-card"); + + // + // Configure SysTick for a 100Hz interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / 100); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, g_ui32SysClock); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(g_ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + + // + // Set some initial strings. + // + ListBoxTextAdd(&g_sDirList, "Initializing..."); + + // + // Issue the initial paint request to the widgets then immediately call + // the widget manager to process the paint message. This ensures that the + // display is drawn as quickly as possible and saves the delay we would + // otherwise experience if we processed the paint message after mounting + // and reading the SD card. + // + WidgetPaint(WIDGET_ROOT); + WidgetMessageQueueProcess(); + + // + // Print hello message to user. + // + UARTprintf("\n\nSD Card Example Program\n"); + UARTprintf("Type \'help\' for help.\n"); + + // + // Mount the file system, using logical disk 0. + // + iFResult = f_mount(0, &g_sFatFs); + if(iFResult != FR_OK) + { + UARTprintf("f_mount error: %s\n", StringFromFResult(iFResult)); + return(1); + } + + // + // Populate the list box with the contents of the root directory. + // + PopulateFileListBox(true); + + // + // Enter an (almost) infinite loop for reading and processing commands from + // the user. + // + while(1) + { + // + // Print a prompt to the console. Show the CWD. + // + UARTprintf("\n%s> ", g_pcCwdBuf); + + // + // Is there a command waiting to be processed? + // + while(UARTPeek('\r') < 0) + { + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + } + + // + // Get a line of text from the user. + // + UARTgets(g_pcCmdBuf, sizeof(g_pcCmdBuf)); + + // + // Pass the line from the user to the command processor. It will be + // parsed and valid commands executed. + // + nStatus = CmdLineProcess(g_pcCmdBuf); + + // + // Handle the case of bad command. + // + if(nStatus == CMDLINE_BAD_CMD) + { + UARTprintf("Bad command!\n"); + } + + // + // Handle the case of too many arguments. + // + else if(nStatus == CMDLINE_TOO_MANY_ARGS) + { + UARTprintf("Too many arguments for command processor!\n"); + } + + // + // Otherwise the command was executed. Print the error code if one was + // returned. + // + else if(nStatus != 0) + { + UARTprintf("Command returned error code %s\n", + StringFromFResult((FRESULT)nStatus)); + } + } +} diff --git a/boards/dk-tm4c129x/sd_card/sd_card.ewd b/boards/dk-tm4c129x/sd_card/sd_card.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/sd_card/sd_card.ewp b/boards/dk-tm4c129x/sd_card/sd_card.ewp new file mode 100644 index 0000000..205d8d7 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.ewp @@ -0,0 +1,823 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\option\cc932.c + + + $PROJ_DIR$\..\..\..\..\utils\cmdline.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\ff.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\sd_card.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/sd_card/sd_card.icf b/boards/dk-tm4c129x/sd_card/sd_card.icf new file mode 100644 index 0000000..8a589f2 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// sd_card.icf - Linker configuration file for sd_card. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/sd_card/sd_card.ld b/boards/dk-tm4c129x/sd_card/sd_card.ld new file mode 100644 index 0000000..5b3a329 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * sd_card.ld - Linker configuration file for sd_card. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/sd_card/sd_card.sct b/boards/dk-tm4c129x/sd_card/sd_card.sct new file mode 100644 index 0000000..fe3711d --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; sd_card.sct - Linker configuration file for sd_card. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/sd_card/sd_card.uvopt b/boards/dk-tm4c129x/sd_card/sd_card.uvopt new file mode 100644 index 0000000..ccfe1ea --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.uvopt @@ -0,0 +1,443 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + sd_card + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\option\cc932.c + cc932.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\cmdline.c + cmdline.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\ff.c + ff.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + mmc-dk-tm4c129x.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\sd_card.c + sd_card.c + + + 1 + 9 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 15 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/sd_card/sd_card.uvproj b/boards/dk-tm4c129x/sd_card/sd_card.uvproj new file mode 100644 index 0000000..46d41c3 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + sd_card + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + sd_card + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\sd_card.bin .\rvmdk\sd_card.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 ENABLE_LFN UART_BUFFERED + + ..;..\..\..\..;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + sd_card.sct + + + --entry Reset_Handler + + + + + + + + Source + + + cc932.c + 1 + ..\..\..\..\third_party\fatfs\src\option\cc932.c + + + cmdline.c + 1 + ..\..\..\..\utils\cmdline.c + + + ff.c + 1 + ..\..\..\..\third_party\fatfs\src\ff.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + mmc-dk-tm4c129x.c + 1 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + sd_card.c + 1 + .\sd_card.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/sd_card/sd_card_ccs.cmd b/boards/dk-tm4c129x/sd_card/sd_card_ccs.cmd new file mode 100644 index 0000000..5bb5155 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/sd_card_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * sd_card_ccs.cmd - CCS linker configuration file for sd_card. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/sd_card/startup_ccs.c b/boards/dk-tm4c129x/sd_card/startup_ccs.c new file mode 100644 index 0000000..630b0c5 --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void UARTStdioIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sd_card/startup_ewarm.c b/boards/dk-tm4c129x/sd_card/startup_ewarm.c new file mode 100644 index 0000000..3e79ade --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void UARTStdioIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sd_card/startup_gcc.c b/boards/dk-tm4c129x/sd_card/startup_gcc.c new file mode 100644 index 0000000..0e4632c --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void UARTStdioIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sd_card/startup_rvmdk.S b/boards/dk-tm4c129x/sd_card/startup_rvmdk.S new file mode 100644 index 0000000..3be1d1c --- /dev/null +++ b/boards/dk-tm4c129x/sd_card/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickHandler + EXTERN UARTStdioIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UARTStdioIntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/sha1_hash/Makefile b/boards/dk-tm4c129x/sha1_hash/Makefile new file mode 100644 index 0000000..6f151ac --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the SHA1 Hash Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the SHA1 Hash Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/sha1_hash.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the SHA1 Hash Demo. +# +${COMPILER}/sha1_hash.axf: ${COMPILER}/frame.o +${COMPILER}/sha1_hash.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/sha1_hash.axf: ${COMPILER}/pinout.o +${COMPILER}/sha1_hash.axf: ${COMPILER}/sha1_hash.o +${COMPILER}/sha1_hash.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/sha1_hash.axf: ${COMPILER}/uartstdio.o +${COMPILER}/sha1_hash.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/sha1_hash.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/sha1_hash.axf: sha1_hash.ld +SCATTERgcc_sha1_hash=sha1_hash.ld +ENTRY_sha1_hash=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/.ccsimportspec b/boards/dk-tm4c129x/sha1_hash/ccs/.ccsimportspec new file mode 100644 index 0000000..b5b0021 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/.ccsproject b/boards/dk-tm4c129x/sha1_hash/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/.cproject b/boards/dk-tm4c129x/sha1_hash/ccs/.cproject new file mode 100644 index 0000000..a14d344 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/.project b/boards/dk-tm4c129x/sha1_hash/ccs/.project new file mode 100644 index 0000000..fa44b4d --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/.project @@ -0,0 +1,70 @@ + + + sha1_hash + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + sha1_hash.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sha1_hash/sha1_hash.c + + + sha1_hash_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sha1_hash/sha1_hash_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sha1_hash/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/sha1_hash/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.bin b/boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.bin new file mode 100644 index 0000000..28553d7 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.bin differ diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.out b/boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.out new file mode 100644 index 0000000..0601071 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/ccs/Debug/sha1_hash.out differ diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/macros.ini_initial b/boards/dk-tm4c129x/sha1_hash/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/sha1_hash/ccs/target_config.ccxml b/boards/dk-tm4c129x/sha1_hash/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.bin b/boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.bin new file mode 100644 index 0000000..ff4794d Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.bin differ diff --git a/boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.out b/boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.out new file mode 100644 index 0000000..199f49e Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/ewarm/Exe/sha1_hash.out differ diff --git a/boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.axf b/boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.axf new file mode 100644 index 0000000..5aeb94a Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.axf differ diff --git a/boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.bin b/boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.bin new file mode 100644 index 0000000..c9c3371 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/gcc/sha1_hash.bin differ diff --git a/boards/dk-tm4c129x/sha1_hash/readme.txt b/boards/dk-tm4c129x/sha1_hash/readme.txt new file mode 100644 index 0000000..b6b4169 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/readme.txt @@ -0,0 +1,26 @@ +SHA1 Hash Demo + +Simple example showing SHA1 hash generation using a block of random data. + +Please note that the use of uDMA is not required for the operation of the +SHA module. It is for demostration purposes only. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.axf b/boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.axf new file mode 100644 index 0000000..7fb0d53 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.axf differ diff --git a/boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.bin b/boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.bin new file mode 100644 index 0000000..70f1d1f Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hash/rvmdk/sha1_hash.bin differ diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.c b/boards/dk-tm4c129x/sha1_hash/sha1_hash.c new file mode 100644 index 0000000..81fcc85 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.c @@ -0,0 +1,670 @@ +//***************************************************************************** +// +// sha1_hash.c - Simple SHA1 hash demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_shamd5.h" +#include "driverlib/debug.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/shamd5.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      SHA1 Hash Demo (sha1_hash)

      +//! +//! Simple example showing SHA1 hash generation using a block of random data. +//! +//! Please note that the use of uDMA is not required for the operation of the +//! SHA module. It is for demostration purposes only. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Source data for producing hashes. This array contains 1024 bytes of +// randomly generated data. +// +//***************************************************************************** +uint32_t g_pui32RandomData[] = +{ + 0x7c68c9ec, 0x72af34b3, 0xca0edf2e, 0x60f4860d, 0x50cfa1dc, 0x9a2b538c, + 0x98450274, 0x60f5c272, 0x7317d78e, 0x2361ca0e, 0xfa4a52b1, 0x658f729b, + 0x5267f9d9, 0x1bccd3ca, 0x2f0bb993, 0x1be38a3d, 0x00bd2d2a, 0x97405e63, + 0xe3efd585, 0xb02d1588, 0xe55d71c8, 0x43a27ecf, 0x5fd275db, 0x73ad8f06, + 0x88f55495, 0x68922493, 0x03ea6039, 0xe40a678a, 0x052847ce, 0xf7a28b46, + 0x3b60c73e, 0x3f08dbd4, 0x2a66b3a6, 0xcf398b15, 0xacbfc6d8, 0x6c15a285, + 0x997d0e01, 0xbfd12e26, 0xa26bc485, 0xb8946d2f, 0x0f84742b, 0x5be82a2f, + 0x8d2e2cc7, 0xc7a1dea6, 0xcfaa6cb6, 0xe706434c, 0x079810d0, 0x5eca9400, + 0x7b92dd1c, 0x1ec552e8, 0xa74ae9c3, 0x2e859af5, 0x8d9d1a35, 0x07ff6040, + 0xc0b19670, 0x2e348aa8, 0xed89efea, 0x3262e8f0, 0x45093372, 0x8f8bae5c, + 0x505d64bb, 0x9a172079, 0x327b5f67, 0xa3a12ba8, 0x7f573054, 0xd3d5f778, + 0xbc1bd124, 0x0d0ad1c6, 0x24ac345b, 0x4f50084a, 0x302a5985, 0xfa3e8b86, + 0x2022c497, 0xd297e4b4, 0xd1c53c01, 0x6e541890, 0x93ec53c6, 0x24c5ce2b, + 0xdd38e334, 0x078a0334, 0x2a470b22, 0xadad86b4, 0x7b2041db, 0xc74ce30b, + 0x8e6dc4ca, 0x273b85c8, 0x339d2334, 0x86d1dacc, 0xd588e165, 0xcee15221, + 0x8e11a0a1, 0x9315a6c2, 0x53e9fa9a, 0xf4bb6d7a, 0x421cb9ec, 0x1f370567, + 0xfd8c880f, 0xd20797cd, 0x90aee852, 0x2a2f966a, 0x126ffcdd, 0x44a2f09a, + 0xbac72ac4, 0x77d588c5, 0x77b53c09, 0x275b8828, 0x778a2be5, 0x40167d1e, + 0x550c0c94, 0x14e070e7, 0x597ff5a3, 0xbef40dc2, 0x8306d119, 0x6a8d29a6, + 0xb5d8e740, 0x52a37fe2, 0xdf34ad27, 0x1bb885fd, 0x6dd352f8, 0x8b0d62b5, + 0x5c82d35f, 0x0eb84312, 0xd2c7823a, 0x494f7a00, 0x30680642, 0x01fa9460, + 0xdc63956f, 0x70fa0b53, 0xd0865e78, 0x3a52e983, 0x318a881c, 0x4d113947, + 0xc0f302df, 0x6b2027fb, 0x1078566d, 0xd71d39a6, 0xcdd00388, 0x119e3c4e, + 0x4ddbf1c6, 0xb371eb0f, 0xdcbd768f, 0x2fc5b5e8, 0xc67a2efe, 0x29d18630, + 0xb389d68f, 0x26a71f13, 0x43583b57, 0x56f5eae8, 0x2edc7cd5, 0xcc93d41e, + 0xab691f87, 0x51ab1d8e, 0x37c2966e, 0x19ccd9ec, 0xb782124a, 0xdefc2804, + 0xea3bde3c, 0x46d81e08, 0xf828d58e, 0x757a39d3, 0xc92f1b5f, 0x56a2b368, + 0x1bbbb9b9, 0x46086ac7, 0x8a343144, 0x1675157a, 0x28ac0cf1, 0xb8695178, + 0x25fc4cec, 0x3f23a44e, 0x0a697977, 0x525794ad, 0xf920e15c, 0x49a0a7a7, + 0x1f54cafb, 0x7357b64c, 0x6d3a19c6, 0x5efb526d, 0x3d37f6e2, 0xd4f5835b, + 0x6ff454ee, 0x4f2a311c, 0x83cc4a40, 0x003036e9, 0xd481bf33, 0x38868b3c, + 0x63ee4445, 0x58426a29, 0xa022ae59, 0x07deb8ce, 0xfe3e673d, 0x176aa368, + 0xf2b18641, 0xbadeccd8, 0xea7a72b4, 0x72ccf0a0, 0xcdee3b08, 0x1689c54f, + 0xd577085a, 0xd9d79bd1, 0x089fa69a, 0x03fdaf65, 0x855e5697, 0x5788c00c, + 0x1139e03e, 0x48f4305f, 0x2d8ad2fd, 0x71ab04b5, 0xf5c7871c, 0x76801f21, + 0x329a590e, 0xe8e982a2, 0xdb67783e, 0x26ebf88b, 0x13ac5de7, 0x69b07707, + 0x2bc54e92, 0xc2556f94, 0x6d21bc3b, 0x3a230d0c, 0x4e02eeec, 0x53605beb, + 0x3a31e796, 0x6e186887, 0x8f93356e, 0xfa2342e4, 0xfbf2f519, 0x7ae95455, + 0xad6e9d94, 0xd942c7ab, 0x624f7aed, 0xd4158624, 0x82a0c0a9, 0x6d79b262, + 0xa7b9c84d, 0x2015bfeb, 0x462c7267, 0x44a17743, 0x7d207f71, 0xc2ab7566, + 0xaa833e65, 0x0a6c385e, 0x3b2d85f1, 0x8a4821a8, 0x62bf5742, 0xf55cf0e1, + 0xfc07d0d9, 0x54910235, 0xe8ae66c9, 0x9beb7306, 0xe5671f9e, 0x3332ad03, + 0xdb2343b6, 0x124332ac, 0xf595c7fb, 0xda2c72b0 +}; + +//***************************************************************************** +// +// Expected hash results. These results have been separately verified using +// a Perl script. +// +//***************************************************************************** +typedef struct SHA1TestVectorStruct +{ + uint32_t pui32HashResult[5]; + uint32_t ui32DataLength; +} +tSHA1TestVector; + +tSHA1TestVector g_psSHA1TestVectors[] = +{ + { + { 0xe08e0896, 0xe63b4b20, 0x5c8d85b0, 0x95a95bdd, 0x2b4f2797 }, + 1024 + }, + { + { 0x11e16f58, 0x04518339, 0x6e6bcaff, 0xdf48fb60, 0xed5ff029 }, + 1000 + }, + { + { 0xeea339da, 0x0d4b6b5e, 0xefbf5532, 0x90186095, 0x0907d8af }, + 0 + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The SHA/MD5 interrupt handler +// +//***************************************************************************** + +// +// Flags to check that interrupts were successfully generated. +// +volatile bool g_bContextReadyFlag; +volatile bool g_bParthashReadyFlag; +volatile bool g_bInputReadyFlag; +volatile bool g_bOutputReadyFlag; +volatile bool g_bContextInDMADoneFlag; +volatile bool g_bDataInDMADoneFlag; +volatile bool g_bContextOutDMADoneFlag; + +void +SHAMD5IntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the SHA/MD5 masked interrupt status. + // + ui32IntStatus = ROM_SHAMD5IntStatus(SHAMD5_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & SHAMD5_INT_CONTEXT_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_CONTEXT_READY); + g_bContextReadyFlag = true; + UARTprintf("Context input registers are ready.\n"); + } + if(ui32IntStatus & SHAMD5_INT_PARTHASH_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_PARTHASH_READY); + UARTprintf("Context output registers are ready after a\n"); + UARTprintf("context switch.\n"); + } + if(ui32IntStatus & SHAMD5_INT_INPUT_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_INPUT_READY); + g_bInputReadyFlag = true; + UARTprintf("Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & SHAMD5_INT_OUTPUT_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_OUTPUT_READY); + g_bOutputReadyFlag = true; + UARTprintf("Context output registers are ready.\n"); + } + if(ui32IntStatus & SHAMD5_INT_DMA_CONTEXT_IN) + { + ROM_SHAMD5IntClear(SHAMD5_BASE, SHAMD5_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneFlag = true; + UARTprintf("DMA completed a context write to the internal\n"); + UARTprintf("registers.\n"); + } + if(ui32IntStatus & SHAMD5_INT_DMA_DATA_IN) + { + ROM_SHAMD5IntClear(SHAMD5_BASE, SHAMD5_INT_DMA_DATA_IN); + g_bDataInDMADoneFlag = true; + UARTprintf("DMA has written the last word of input data to\n"); + UARTprintf("the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & SHAMD5_INT_DMA_CONTEXT_OUT) + { + ROM_SHAMD5IntClear(SHAMD5_BASE, SHAMD5_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneFlag = true; + UARTprintf("DMA completed the output context movement from\n"); + UARTprintf("the internal registers.\n"); + } +} + +//***************************************************************************** +// +// Generate a hash for the given data. +// +//***************************************************************************** +void +SHA1HashGenerate(uint32_t *pui32Data, uint32_t ui32DataLength, + uint32_t *pui32HashResult, bool bUseDMA) +{ + // + // Perform a soft reset of the SHA module. + // + ROM_SHAMD5Reset(SHAMD5_BASE); + + // + // Clear the flags + // + g_bContextReadyFlag = false; + g_bInputReadyFlag = false; + g_bDataInDMADoneFlag = false; + g_bContextOutDMADoneFlag = false; + + // + // Enable interrupts. + // + ROM_SHAMD5IntEnable(SHAMD5_BASE, (SHAMD5_INT_CONTEXT_READY | + SHAMD5_INT_PARTHASH_READY | + SHAMD5_INT_INPUT_READY | + SHAMD5_INT_OUTPUT_READY)); + + // + // Wait for the context ready flag. + // + while(!g_bContextReadyFlag) + { + } + + // + // Configure the SHA/MD5 module. + // + ROM_SHAMD5ConfigSet(SHAMD5_BASE, SHAMD5_ALGO_SHA1); + + // + // Use DMA to write the data into the SHA/MD5 module. + // + if(bUseDMA) + { + // + // Enable DMA done interrupts. + // + ROM_SHAMD5IntEnable(SHAMD5_BASE, (SHAMD5_INT_DMA_CONTEXT_IN | + SHAMD5_INT_DMA_DATA_IN | + SHAMD5_INT_DMA_CONTEXT_OUT)); + + if(ui32DataLength != 0) + { + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH5_SHAMD50DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH5_SHAMD50DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH5_SHAMD50DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_16 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH5_SHAMD50DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Data, + (void *)(SHAMD5_BASE + + SHAMD5_O_DATA_0_IN), + ui32DataLength / 4); + ROM_uDMAChannelEnable(UDMA_CH5_SHAMD50DIN); + UARTprintf("Data in DMA request enabled.\n"); + } + + // + // Setup the DMA module to copy the hash out. + // + ROM_uDMAChannelAssign(UDMA_CH6_SHAMD50COUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH6_SHAMD50COUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH6_SHAMD50COUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_32 | UDMA_ARB_8 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH6_SHAMD50COUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(SHAMD5_BASE + SHAMD5_O_IDIGEST_A), + (void *)pui32HashResult, 5); + ROM_uDMAChannelEnable(UDMA_CH6_SHAMD50COUT); + UARTprintf("Context out DMA request enabled.\n"); + + // + // Enable DMA in the SHA/MD5 module. + // + ROM_SHAMD5DMAEnable(SHAMD5_BASE); + + // + // Write the length. + // + ROM_SHAMD5HashLengthSet(SHAMD5_BASE, ui32DataLength); + + if(ui32DataLength != 0) + { + // + // Wait for the DMA done interrupt. + // + while(!g_bDataInDMADoneFlag) + { + } + } + + // + // Wait for the next DMA done interrupt. + // + while(!g_bContextOutDMADoneFlag) + { + } + + // + // Disable DMA requests. + // + ROM_SHAMD5DMADisable(SHAMD5_BASE); + } + + // + // Perform hash computation by copying the data with the CPU. + // + else + { + // + // Perform the hashing operation + // + ROM_SHAMD5DataProcess(SHAMD5_BASE, pui32Data, ui32DataLength, + pui32HashResult); + } +} + +//***************************************************************************** +// +// Initializes the CCM and SHA/MD5 modules. +// +//***************************************************************************** +bool +SHAMD5Init(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf(" No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example generates hashes from a random block of data and empty block. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32HashResult[5], ui32Errors, ui32Vector, ui32Idx, ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "sha1-hash"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + + // + // Enable SHA interrupts. + // + ROM_IntEnable(INT_SHA0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting SHA1 hash encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and SHAMD5 modules. + // + if(!SHAMD5Init()) + { + UARTprintf("Initialization of the SHA module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Run tests without uDMA. + // + for(ui32Vector = 0; ui32Vector < 3; ui32Vector++) + { + UARTprintf("Running test #%d without uDMA\n", ui32Vector); + + // + // Generate the hash. + // + SHA1HashGenerate(g_pui32RandomData, + g_psSHA1TestVectors[ui32Vector].ui32DataLength, + pui32HashResult, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 5; ui32Idx++) + { + if(pui32HashResult[ui32Idx] != + g_psSHA1TestVectors[ui32Vector].pui32HashResult[ui32Idx]) + { + UARTprintf("Hash result mismatch - Exp: 0x%x, Act: 0x%x\n", + g_psSHA1TestVectors[ui32Vector]. + pui32HashResult[ui32Idx], pui32HashResult[0]); + ui32Errors |= ((ui32Idx << 16) | 0x2); + } + } + } + + // + // Run tests with uDMA. + // + for(ui32Vector = 0; ui32Vector < 3; ui32Vector++) + { + UARTprintf("Running test #%d with uDMA\n", ui32Vector); + + // + // Generate the hash. + // + SHA1HashGenerate(g_pui32RandomData, + g_psSHA1TestVectors[ui32Vector].ui32DataLength, + pui32HashResult, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 5; ui32Idx++) + { + if(pui32HashResult[ui32Idx] != + g_psSHA1TestVectors[ui32Vector].pui32HashResult[ui32Idx]) + { + UARTprintf("Hash result mismatch - Exp: 0x%x, Act: 0x%x\n", + g_psSHA1TestVectors[ui32Vector]. + pui32HashResult[ui32Idx], pui32HashResult[0]); + ui32Errors |= ((ui32Idx << 16) | 0x3); + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.ewd b/boards/dk-tm4c129x/sha1_hash/sha1_hash.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.ewp b/boards/dk-tm4c129x/sha1_hash/sha1_hash.ewp new file mode 100644 index 0000000..ee1c7b0 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\sha1_hash.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.icf b/boards/dk-tm4c129x/sha1_hash/sha1_hash.icf new file mode 100644 index 0000000..6adf7d0 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// sha1_hash.icf - Linker configuration file for sha1_hash. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.ld b/boards/dk-tm4c129x/sha1_hash/sha1_hash.ld new file mode 100644 index 0000000..bad97da --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * sha1_hash.ld - Linker configuration file for sha1_hash. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.sct b/boards/dk-tm4c129x/sha1_hash/sha1_hash.sct new file mode 100644 index 0000000..cafaee8 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; sha1_hash.sct - Linker configuration file for sha1_hash. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.uvopt b/boards/dk-tm4c129x/sha1_hash/sha1_hash.uvopt new file mode 100644 index 0000000..0f2dc5a --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + sha1_hash + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\sha1_hash.c + sha1_hash.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash.uvproj b/boards/dk-tm4c129x/sha1_hash/sha1_hash.uvproj new file mode 100644 index 0000000..b4587a3 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + sha1_hash + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + sha1_hash + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\sha1_hash.bin .\rvmdk\sha1_hash.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + sha1_hash.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + sha1_hash.c + 1 + .\sha1_hash.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/sha1_hash/sha1_hash_ccs.cmd b/boards/dk-tm4c129x/sha1_hash/sha1_hash_ccs.cmd new file mode 100644 index 0000000..bed8652 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/sha1_hash_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * sha1_hash_ccs.cmd - CCS linker configuration file for sha1_hash. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/sha1_hash/startup_ccs.c b/boards/dk-tm4c129x/sha1_hash/startup_ccs.c new file mode 100644 index 0000000..1652405 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SHAMD5IntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + SHAMD5IntHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hash/startup_ewarm.c b/boards/dk-tm4c129x/sha1_hash/startup_ewarm.c new file mode 100644 index 0000000..db90816 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SHAMD5IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + SHAMD5IntHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hash/startup_gcc.c b/boards/dk-tm4c129x/sha1_hash/startup_gcc.c new file mode 100644 index 0000000..08d01f3 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SHAMD5IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + SHAMD5IntHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hash/startup_rvmdk.S b/boards/dk-tm4c129x/sha1_hash/startup_rvmdk.S new file mode 100644 index 0000000..5d04775 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hash/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN SHAMD5IntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD SHAMD5IntHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/sha1_hmac/Makefile b/boards/dk-tm4c129x/sha1_hmac/Makefile new file mode 100644 index 0000000..d33d663 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the SHA1 HMAC Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the SHA1 HMAC Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/sha1_hmac.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the SHA1 HMAC Demo. +# +${COMPILER}/sha1_hmac.axf: ${COMPILER}/frame.o +${COMPILER}/sha1_hmac.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/sha1_hmac.axf: ${COMPILER}/pinout.o +${COMPILER}/sha1_hmac.axf: ${COMPILER}/sha1_hmac.o +${COMPILER}/sha1_hmac.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/sha1_hmac.axf: ${COMPILER}/uartstdio.o +${COMPILER}/sha1_hmac.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/sha1_hmac.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/sha1_hmac.axf: sha1_hmac.ld +SCATTERgcc_sha1_hmac=sha1_hmac.ld +ENTRY_sha1_hmac=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/.ccsimportspec b/boards/dk-tm4c129x/sha1_hmac/ccs/.ccsimportspec new file mode 100644 index 0000000..aadf516 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/.ccsproject b/boards/dk-tm4c129x/sha1_hmac/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/.cproject b/boards/dk-tm4c129x/sha1_hmac/ccs/.cproject new file mode 100644 index 0000000..8ad8822 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/.project b/boards/dk-tm4c129x/sha1_hmac/ccs/.project new file mode 100644 index 0000000..895e2b0 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/.project @@ -0,0 +1,70 @@ + + + sha1_hmac + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + sha1_hmac.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.c + + + sha1_hmac_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sha1_hmac/sha1_hmac_ccs.cmd + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/sha1_hmac/startup_ccs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/sha1_hmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.bin b/boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.bin new file mode 100644 index 0000000..448a26b Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.bin differ diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.out b/boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.out new file mode 100644 index 0000000..33d3065 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/ccs/Debug/sha1_hmac.out differ diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/macros.ini_initial b/boards/dk-tm4c129x/sha1_hmac/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/sha1_hmac/ccs/target_config.ccxml b/boards/dk-tm4c129x/sha1_hmac/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.bin b/boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.bin new file mode 100644 index 0000000..a35158d Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.bin differ diff --git a/boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.out b/boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.out new file mode 100644 index 0000000..5afb179 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/ewarm/Exe/sha1_hmac.out differ diff --git a/boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.axf b/boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.axf new file mode 100644 index 0000000..6eb1969 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.axf differ diff --git a/boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.bin b/boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.bin new file mode 100644 index 0000000..1e4322a Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/gcc/sha1_hmac.bin differ diff --git a/boards/dk-tm4c129x/sha1_hmac/readme.txt b/boards/dk-tm4c129x/sha1_hmac/readme.txt new file mode 100644 index 0000000..6223135 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/readme.txt @@ -0,0 +1,23 @@ +SHA1 HMAC Demo + +Simple example showing SHA1 HMAC generation using a block of random data. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.axf b/boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.axf new file mode 100644 index 0000000..2f15935 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.axf differ diff --git a/boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.bin b/boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.bin new file mode 100644 index 0000000..7c26843 Binary files /dev/null and b/boards/dk-tm4c129x/sha1_hmac/rvmdk/sha1_hmac.bin differ diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.c b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.c new file mode 100644 index 0000000..81f97a1 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.c @@ -0,0 +1,733 @@ +//***************************************************************************** +// +// sha1_hmac.c - Simple SHA1 HMAC demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_shamd5.h" +#include "driverlib/debug.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/shamd5.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      SHA1 HMAC Demo (sha1_hmac)

      +//! +//! Simple example showing SHA1 HMAC generation using a block of random data. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Source data for producing HMACs. This array contains 1024 bytes of +// randomly generated data. +// +//***************************************************************************** +uint32_t g_pui32RandomData[] = +{ + 0x7c68c9ec, 0x72af34b3, 0xca0edf2e, 0x60f4860d, 0x50cfa1dc, 0x9a2b538c, + 0x98450274, 0x60f5c272, 0x7317d78e, 0x2361ca0e, 0xfa4a52b1, 0x658f729b, + 0x5267f9d9, 0x1bccd3ca, 0x2f0bb993, 0x1be38a3d, 0x00bd2d2a, 0x97405e63, + 0xe3efd585, 0xb02d1588, 0xe55d71c8, 0x43a27ecf, 0x5fd275db, 0x73ad8f06, + 0x88f55495, 0x68922493, 0x03ea6039, 0xe40a678a, 0x052847ce, 0xf7a28b46, + 0x3b60c73e, 0x3f08dbd4, 0x2a66b3a6, 0xcf398b15, 0xacbfc6d8, 0x6c15a285, + 0x997d0e01, 0xbfd12e26, 0xa26bc485, 0xb8946d2f, 0x0f84742b, 0x5be82a2f, + 0x8d2e2cc7, 0xc7a1dea6, 0xcfaa6cb6, 0xe706434c, 0x079810d0, 0x5eca9400, + 0x7b92dd1c, 0x1ec552e8, 0xa74ae9c3, 0x2e859af5, 0x8d9d1a35, 0x07ff6040, + 0xc0b19670, 0x2e348aa8, 0xed89efea, 0x3262e8f0, 0x45093372, 0x8f8bae5c, + 0x505d64bb, 0x9a172079, 0x327b5f67, 0xa3a12ba8, 0x7f573054, 0xd3d5f778, + 0xbc1bd124, 0x0d0ad1c6, 0x24ac345b, 0x4f50084a, 0x302a5985, 0xfa3e8b86, + 0x2022c497, 0xd297e4b4, 0xd1c53c01, 0x6e541890, 0x93ec53c6, 0x24c5ce2b, + 0xdd38e334, 0x078a0334, 0x2a470b22, 0xadad86b4, 0x7b2041db, 0xc74ce30b, + 0x8e6dc4ca, 0x273b85c8, 0x339d2334, 0x86d1dacc, 0xd588e165, 0xcee15221, + 0x8e11a0a1, 0x9315a6c2, 0x53e9fa9a, 0xf4bb6d7a, 0x421cb9ec, 0x1f370567, + 0xfd8c880f, 0xd20797cd, 0x90aee852, 0x2a2f966a, 0x126ffcdd, 0x44a2f09a, + 0xbac72ac4, 0x77d588c5, 0x77b53c09, 0x275b8828, 0x778a2be5, 0x40167d1e, + 0x550c0c94, 0x14e070e7, 0x597ff5a3, 0xbef40dc2, 0x8306d119, 0x6a8d29a6, + 0xb5d8e740, 0x52a37fe2, 0xdf34ad27, 0x1bb885fd, 0x6dd352f8, 0x8b0d62b5, + 0x5c82d35f, 0x0eb84312, 0xd2c7823a, 0x494f7a00, 0x30680642, 0x01fa9460, + 0xdc63956f, 0x70fa0b53, 0xd0865e78, 0x3a52e983, 0x318a881c, 0x4d113947, + 0xc0f302df, 0x6b2027fb, 0x1078566d, 0xd71d39a6, 0xcdd00388, 0x119e3c4e, + 0x4ddbf1c6, 0xb371eb0f, 0xdcbd768f, 0x2fc5b5e8, 0xc67a2efe, 0x29d18630, + 0xb389d68f, 0x26a71f13, 0x43583b57, 0x56f5eae8, 0x2edc7cd5, 0xcc93d41e, + 0xab691f87, 0x51ab1d8e, 0x37c2966e, 0x19ccd9ec, 0xb782124a, 0xdefc2804, + 0xea3bde3c, 0x46d81e08, 0xf828d58e, 0x757a39d3, 0xc92f1b5f, 0x56a2b368, + 0x1bbbb9b9, 0x46086ac7, 0x8a343144, 0x1675157a, 0x28ac0cf1, 0xb8695178, + 0x25fc4cec, 0x3f23a44e, 0x0a697977, 0x525794ad, 0xf920e15c, 0x49a0a7a7, + 0x1f54cafb, 0x7357b64c, 0x6d3a19c6, 0x5efb526d, 0x3d37f6e2, 0xd4f5835b, + 0x6ff454ee, 0x4f2a311c, 0x83cc4a40, 0x003036e9, 0xd481bf33, 0x38868b3c, + 0x63ee4445, 0x58426a29, 0xa022ae59, 0x07deb8ce, 0xfe3e673d, 0x176aa368, + 0xf2b18641, 0xbadeccd8, 0xea7a72b4, 0x72ccf0a0, 0xcdee3b08, 0x1689c54f, + 0xd577085a, 0xd9d79bd1, 0x089fa69a, 0x03fdaf65, 0x855e5697, 0x5788c00c, + 0x1139e03e, 0x48f4305f, 0x2d8ad2fd, 0x71ab04b5, 0xf5c7871c, 0x76801f21, + 0x329a590e, 0xe8e982a2, 0xdb67783e, 0x26ebf88b, 0x13ac5de7, 0x69b07707, + 0x2bc54e92, 0xc2556f94, 0x6d21bc3b, 0x3a230d0c, 0x4e02eeec, 0x53605beb, + 0x3a31e796, 0x6e186887, 0x8f93356e, 0xfa2342e4, 0xfbf2f519, 0x7ae95455, + 0xad6e9d94, 0xd942c7ab, 0x624f7aed, 0xd4158624, 0x82a0c0a9, 0x6d79b262, + 0xa7b9c84d, 0x2015bfeb, 0x462c7267, 0x44a17743, 0x7d207f71, 0xc2ab7566, + 0xaa833e65, 0x0a6c385e, 0x3b2d85f1, 0x8a4821a8, 0x62bf5742, 0xf55cf0e1, + 0xfc07d0d9, 0x54910235, 0xe8ae66c9, 0x9beb7306, 0xe5671f9e, 0x3332ad03, + 0xdb2343b6, 0x124332ac, 0xf595c7fb, 0xda2c72b0 +}; + +//***************************************************************************** +// +// Sample key for generating an HMAC. This array contains 64 bytes (512 bits) +// of randomly generated data. +// +//***************************************************************************** +uint32_t g_pui32SHA1HMACKey[] = +{ + 0x8a5f1b22, 0xcb935d29, 0xcc1ac092, 0x5dad8c9e, 0x6a83b39f, 0x8607dc60, + 0xda0ba4d2, 0xf49b0fa2, 0xaf35d524, 0xffa8001d, 0xbcc931e8, 0x4a2c99ef, + 0x7fa297ab, 0xab943bae, 0x07c61cc4, 0x47c8627d +}; + +//***************************************************************************** +// +// Expected HMAC results. These results have been separately verified using +// a Perl script. +// +//***************************************************************************** +typedef struct SHA1TestVectorStruct +{ + uint32_t pui32HMACResult[5]; + uint32_t ui32DataLength; +} +tSHA1TestVector; + +tSHA1TestVector g_psSHA1TestVectors[] = +{ + { + { 0x06d4db72, 0xa1f8c22a, 0x869efcc5, 0xca8bc8fc, 0x30b77c92 }, + 1024 + }, + { + { 0x5c01f196, 0xbad6b65e, 0x73eed7a2, 0x61665901, 0x7320b932 }, + 1000 + }, + { + { 0xee4dfa06, 0x78f74a98, 0x109a6d09, 0xa9470d90, 0xeb550d5f }, + 0 + } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +//! The SHA/MD5 interrupt handler +// +//***************************************************************************** + +// +// Flags to check that interrupts were successfully generated. +// +volatile bool g_bContextReadyFlag; +volatile bool g_bParthashReadyFlag; +volatile bool g_bInputReadyFlag; +volatile bool g_bOutputReadyFlag; +volatile bool g_bContextInDMADoneFlag; +volatile bool g_bDataInDMADoneFlag; +volatile bool g_bContextOutDMADoneFlag; + +void +SHAMD5IntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the SHA/MD5 masked interrupt status. + // + ui32IntStatus = ROM_SHAMD5IntStatus(SHAMD5_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & SHAMD5_INT_CONTEXT_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_CONTEXT_READY); + g_bContextReadyFlag = true; + UARTprintf("Context input registers are ready.\n"); + } + if(ui32IntStatus & SHAMD5_INT_PARTHASH_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_PARTHASH_READY); + UARTprintf("Context output registers are ready after a\n"); + UARTprintf("context switch.\n"); + } + if(ui32IntStatus & SHAMD5_INT_INPUT_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_INPUT_READY); + g_bInputReadyFlag = true; + UARTprintf("Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & SHAMD5_INT_OUTPUT_READY) + { + ROM_SHAMD5IntDisable(SHAMD5_BASE, SHAMD5_INT_OUTPUT_READY); + g_bOutputReadyFlag = true; + UARTprintf("Context output registers are ready.\n"); + } + if(ui32IntStatus & SHAMD5_INT_DMA_CONTEXT_IN) + { + ROM_SHAMD5IntClear(SHAMD5_BASE, SHAMD5_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneFlag = true; + UARTprintf("DMA completed a context write to the internal\n"); + UARTprintf("registers.\n"); + } + if(ui32IntStatus & SHAMD5_INT_DMA_DATA_IN) + { + ROM_SHAMD5IntClear(SHAMD5_BASE, SHAMD5_INT_DMA_DATA_IN); + g_bDataInDMADoneFlag = true; + UARTprintf("DMA has written the last word of input data to\n"); + UARTprintf("the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & SHAMD5_INT_DMA_CONTEXT_OUT) + { + ROM_SHAMD5IntClear(SHAMD5_BASE, SHAMD5_INT_DMA_CONTEXT_OUT); + g_bContextOutDMADoneFlag = true; + UARTprintf("DMA completed the output context movement from\n"); + UARTprintf("the internal registers.\n"); + } +} + +//***************************************************************************** +// +// Generate a HMAC for the given data. +// +//***************************************************************************** +void +SHA1HMACGenerate(uint32_t *pui32Data, uint32_t ui32DataLength, + uint32_t *pui32HMACKey, uint32_t *pui32HMACResult, + bool bUseDMA, bool bPreProcessedKey) +{ + // + // Perform a soft reset of the SHA module. + // + ROM_SHAMD5Reset(SHAMD5_BASE); + + // + // Clear the flags + // + g_bContextReadyFlag = false; + g_bInputReadyFlag = false; + g_bDataInDMADoneFlag = false; + g_bContextOutDMADoneFlag = false; + + // + // Enable interrupts. + // + ROM_SHAMD5IntEnable(SHAMD5_BASE, (SHAMD5_INT_CONTEXT_READY | + SHAMD5_INT_PARTHASH_READY | + SHAMD5_INT_INPUT_READY | + SHAMD5_INT_OUTPUT_READY)); + + // + // Wait for the context ready flag. + // + while(!g_bContextReadyFlag) + { + } + + // + // Configure the SHA/MD5 module. + // + ROM_SHAMD5ConfigSet(SHAMD5_BASE, SHAMD5_ALGO_HMAC_SHA1); + + // + // Write the key. + // + if(bPreProcessedKey) + { + ROM_SHAMD5HMACPPKeySet(SHAMD5_BASE, pui32HMACKey); + } + else + { + ROM_SHAMD5HMACKeySet(SHAMD5_BASE, pui32HMACKey); + } + + // + // Use DMA to write the data into the SHA/MD5 module. + // + if(bUseDMA) + { + // + // Enable DMA done interrupts. + // + ROM_SHAMD5IntEnable(SHAMD5_BASE, (SHAMD5_INT_DMA_CONTEXT_IN | + SHAMD5_INT_DMA_DATA_IN | + SHAMD5_INT_DMA_CONTEXT_OUT)); + + if(ui32DataLength != 0) + { + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH5_SHAMD50DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH5_SHAMD50DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH5_SHAMD50DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_16 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH5_SHAMD50DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Data, + (void *)(SHAMD5_BASE + + SHAMD5_O_DATA_0_IN), + ui32DataLength / 4); + ROM_uDMAChannelEnable(UDMA_CH5_SHAMD50DIN); + UARTprintf("Data in DMA request enabled.\n"); + } + + // + // Setup the DMA module to copy the HMAC out. + // + ROM_uDMAChannelAssign(UDMA_CH6_SHAMD50COUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH6_SHAMD50COUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH6_SHAMD50COUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_32 | UDMA_ARB_8 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH6_SHAMD50COUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(SHAMD5_BASE + SHAMD5_O_IDIGEST_A), + (void *)pui32HMACResult, 5); + ROM_uDMAChannelEnable(UDMA_CH6_SHAMD50COUT); + UARTprintf("Context out DMA request enabled.\n"); + + // + // Enable DMA in the SHA/MD5 module. + // + ROM_SHAMD5DMAEnable(SHAMD5_BASE); + + // + // Write the length. + // + ROM_SHAMD5HashLengthSet(SHAMD5_BASE, ui32DataLength); + + if(ui32DataLength != 0) + { + // + // Wait for the DMA done interrupt. + // + while(!g_bDataInDMADoneFlag) + { + } + } + + // + // Wait for the next DMA done interrupt. + // + while(!g_bContextOutDMADoneFlag) + { + } + + // + // Disable DMA requests. + // + ROM_SHAMD5DMADisable(SHAMD5_BASE); + } + + // + // Perform hash computation by copying the data with the CPU. + // + else + { + // + // Perform the hashing operation + // + ROM_SHAMD5HMACProcess(SHAMD5_BASE, pui32Data, ui32DataLength, + pui32HMACResult); + } +} + +//***************************************************************************** +// +// Initializes the CCM and SHA/MD5 modules. +// +//***************************************************************************** +bool +SHAMD5Init(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf(" No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example generates HMACs from a random block of data and empty block. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32HMACPPKey[16], pui32HMACResult[5], ui32Errors, ui32Vector; + uint32_t ui32Idx, ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "sha1-hmac"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + + // + // Enable SHA interrupts. + // + ROM_IntEnable(INT_SHA0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting SHA1 HMAC encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and SHAMD5 modules. + // + if(!SHAMD5Init()) + { + UARTprintf("Initialization of the SHA module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Run tests without uDMA. + // + for(ui32Vector = 0; ui32Vector < 3; ui32Vector++) + { + UARTprintf("Running test #%d without uDMA\n", ui32Vector); + + // + // Generate the HMAC. + // + SHA1HMACGenerate(g_pui32RandomData, + g_psSHA1TestVectors[ui32Vector].ui32DataLength, + g_pui32SHA1HMACKey, pui32HMACResult, false, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 5; ui32Idx++) + { + if(pui32HMACResult[ui32Idx] != + g_psSHA1TestVectors[ui32Vector].pui32HMACResult[ui32Idx]) + { + UARTprintf("HMAC result mismatch - Exp: 0x%x, Act: 0x%x\n", + g_psSHA1TestVectors[ui32Vector]. + pui32HMACResult[ui32Idx], pui32HMACResult[0]); + ui32Errors |= ((ui32Idx << 16) | 0x2); + } + } + } + + // + // Run tests with uDMA. + // + for(ui32Vector = 0; ui32Vector < 3; ui32Vector++) + { + UARTprintf("Running test #%d with uDMA\n", ui32Vector); + + // + // Generate the HMAC. + // + SHA1HMACGenerate(g_pui32RandomData, + g_psSHA1TestVectors[ui32Vector].ui32DataLength, + g_pui32SHA1HMACKey, pui32HMACResult, true, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 5; ui32Idx++) + { + if(pui32HMACResult[ui32Idx] != + g_psSHA1TestVectors[ui32Vector].pui32HMACResult[ui32Idx]) + { + UARTprintf("HMAC result mismatch - Exp: 0x%x, Act: 0x%x\n", + g_psSHA1TestVectors[ui32Vector]. + pui32HMACResult[ui32Idx], pui32HMACResult[0]); + ui32Errors |= ((ui32Idx << 16) | 0x3); + } + } + } + + // + // Preprocess the HMAC key. + // + UARTprintf("Preprocessing HMAC key with SHA1...\n"); + ROM_SHAMD5Reset(SHAMD5_BASE); + ROM_SHAMD5ConfigSet(SHAMD5_BASE, SHAMD5_ALGO_HMAC_SHA1); + ROM_SHAMD5HMACPPKeyGenerate(SHAMD5_BASE, g_pui32SHA1HMACKey, + pui32HMACPPKey); + + // + // Run tests with a preprocessed key and without uDMA. + // + for(ui32Vector = 0; ui32Vector < 3; ui32Vector++) + { + UARTprintf("Running test #%d without uDMA\n", ui32Vector); + + // + // Generate the HMAC. + // + SHA1HMACGenerate(g_pui32RandomData, + g_psSHA1TestVectors[ui32Vector].ui32DataLength, + pui32HMACPPKey, pui32HMACResult, false, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 5; ui32Idx++) + { + if(pui32HMACResult[ui32Idx] != + g_psSHA1TestVectors[ui32Vector].pui32HMACResult[ui32Idx]) + { + UARTprintf("HMAC result mismatch - Exp: 0x%x, Act: 0x%x\n", + g_psSHA1TestVectors[ui32Vector]. + pui32HMACResult[ui32Idx], pui32HMACResult[0]); + ui32Errors |= ((ui32Idx << 16) | 0x2); + } + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewd b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewp b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewp new file mode 100644 index 0000000..9d3822c --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\sha1_hmac.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.icf b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.icf new file mode 100644 index 0000000..4915b70 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// sha1_hmac.icf - Linker configuration file for sha1_hmac. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ld b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ld new file mode 100644 index 0000000..faeddb8 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * sha1_hmac.ld - Linker configuration file for sha1_hmac. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.sct b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.sct new file mode 100644 index 0000000..734e64d --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; sha1_hmac.sct - Linker configuration file for sha1_hmac. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvopt b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvopt new file mode 100644 index 0000000..8ea2cd7 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + sha1_hmac + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\sha1_hmac.c + sha1_hmac.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvproj b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvproj new file mode 100644 index 0000000..ecef863 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + sha1_hmac + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + sha1_hmac + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\sha1_hmac.bin .\rvmdk\sha1_hmac.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + sha1_hmac.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + sha1_hmac.c + 1 + .\sha1_hmac.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/sha1_hmac/sha1_hmac_ccs.cmd b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac_ccs.cmd new file mode 100644 index 0000000..d6bd3f0 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/sha1_hmac_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * sha1_hmac_ccs.cmd - CCS linker configuration file for sha1_hmac. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/sha1_hmac/startup_ccs.c b/boards/dk-tm4c129x/sha1_hmac/startup_ccs.c new file mode 100644 index 0000000..1652405 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SHAMD5IntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + SHAMD5IntHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hmac/startup_ewarm.c b/boards/dk-tm4c129x/sha1_hmac/startup_ewarm.c new file mode 100644 index 0000000..db90816 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SHAMD5IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + SHAMD5IntHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hmac/startup_gcc.c b/boards/dk-tm4c129x/sha1_hmac/startup_gcc.c new file mode 100644 index 0000000..08d01f3 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void SHAMD5IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + SHAMD5IntHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/sha1_hmac/startup_rvmdk.S b/boards/dk-tm4c129x/sha1_hmac/startup_rvmdk.S new file mode 100644 index 0000000..5d04775 --- /dev/null +++ b/boards/dk-tm4c129x/sha1_hmac/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN SHAMD5IntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD SHAMD5IntHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/synth/Makefile b/boards/dk-tm4c129x/synth/Makefile new file mode 100644 index 0000000..69e0aeb --- /dev/null +++ b/boards/dk-tm4c129x/synth/Makefile @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Makefile - Rules for building the synth example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the synth example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/synth.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the synth example. +# +${COMPILER}/synth.axf: ${COMPILER}/frame.o +${COMPILER}/synth.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/synth.axf: ${COMPILER}/pinout.o +${COMPILER}/synth.axf: ${COMPILER}/sine.o +${COMPILER}/synth.axf: ${COMPILER}/sound.o +${COMPILER}/synth.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/synth.axf: ${COMPILER}/synth.o +${COMPILER}/synth.axf: ${COMPILER}/touch.o +${COMPILER}/synth.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/synth.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/synth.axf: synth.ld +SCATTERgcc_synth=synth.ld +ENTRY_synth=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/synth/ccs/.ccsimportspec b/boards/dk-tm4c129x/synth/ccs/.ccsimportspec new file mode 100644 index 0000000..637a7b0 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/synth/ccs/.ccsproject b/boards/dk-tm4c129x/synth/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/synth/ccs/.cproject b/boards/dk-tm4c129x/synth/ccs/.cproject new file mode 100644 index 0000000..f4620a0 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/synth/ccs/.project b/boards/dk-tm4c129x/synth/ccs/.project new file mode 100644 index 0000000..9654eb4 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/.project @@ -0,0 +1,80 @@ + + + synth + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/synth/startup_ccs.c + + + synth.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/synth/synth.c + + + synth_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/synth/synth_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/sound.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/sound.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/sine.c + 1 + SW_ROOT/utils/sine.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/synth/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/synth/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/synth/ccs/Debug/synth.bin b/boards/dk-tm4c129x/synth/ccs/Debug/synth.bin new file mode 100644 index 0000000..3f9a91c Binary files /dev/null and b/boards/dk-tm4c129x/synth/ccs/Debug/synth.bin differ diff --git a/boards/dk-tm4c129x/synth/ccs/Debug/synth.out b/boards/dk-tm4c129x/synth/ccs/Debug/synth.out new file mode 100644 index 0000000..004bd85 Binary files /dev/null and b/boards/dk-tm4c129x/synth/ccs/Debug/synth.out differ diff --git a/boards/dk-tm4c129x/synth/ccs/macros.ini_initial b/boards/dk-tm4c129x/synth/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/synth/ccs/target_config.ccxml b/boards/dk-tm4c129x/synth/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/synth/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/synth/ewarm/Exe/synth.bin b/boards/dk-tm4c129x/synth/ewarm/Exe/synth.bin new file mode 100644 index 0000000..46491fc Binary files /dev/null and b/boards/dk-tm4c129x/synth/ewarm/Exe/synth.bin differ diff --git a/boards/dk-tm4c129x/synth/ewarm/Exe/synth.out b/boards/dk-tm4c129x/synth/ewarm/Exe/synth.out new file mode 100644 index 0000000..942c13c Binary files /dev/null and b/boards/dk-tm4c129x/synth/ewarm/Exe/synth.out differ diff --git a/boards/dk-tm4c129x/synth/gcc/synth.axf b/boards/dk-tm4c129x/synth/gcc/synth.axf new file mode 100644 index 0000000..99411cd Binary files /dev/null and b/boards/dk-tm4c129x/synth/gcc/synth.axf differ diff --git a/boards/dk-tm4c129x/synth/gcc/synth.bin b/boards/dk-tm4c129x/synth/gcc/synth.bin new file mode 100644 index 0000000..841b06b Binary files /dev/null and b/boards/dk-tm4c129x/synth/gcc/synth.bin differ diff --git a/boards/dk-tm4c129x/synth/readme.txt b/boards/dk-tm4c129x/synth/readme.txt new file mode 100644 index 0000000..a979dcd --- /dev/null +++ b/boards/dk-tm4c129x/synth/readme.txt @@ -0,0 +1,25 @@ +Synthesizer + +This application provides a single-octave synthesizer utilizing the touch +screen as a virtual piano keyboard. The notes played on the virtual piano +are played out via the on-board speaker. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/synth/rvmdk/synth.axf b/boards/dk-tm4c129x/synth/rvmdk/synth.axf new file mode 100644 index 0000000..4e87774 Binary files /dev/null and b/boards/dk-tm4c129x/synth/rvmdk/synth.axf differ diff --git a/boards/dk-tm4c129x/synth/rvmdk/synth.bin b/boards/dk-tm4c129x/synth/rvmdk/synth.bin new file mode 100644 index 0000000..fc3d204 Binary files /dev/null and b/boards/dk-tm4c129x/synth/rvmdk/synth.bin differ diff --git a/boards/dk-tm4c129x/synth/startup_ccs.c b/boards/dk-tm4c129x/synth/startup_ccs.c new file mode 100644 index 0000000..30b1a9a --- /dev/null +++ b/boards/dk-tm4c129x/synth/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/synth/startup_ewarm.c b/boards/dk-tm4c129x/synth/startup_ewarm.c new file mode 100644 index 0000000..5694146 --- /dev/null +++ b/boards/dk-tm4c129x/synth/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/synth/startup_gcc.c b/boards/dk-tm4c129x/synth/startup_gcc.c new file mode 100644 index 0000000..12e19b0 --- /dev/null +++ b/boards/dk-tm4c129x/synth/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/synth/startup_rvmdk.S b/boards/dk-tm4c129x/synth/startup_rvmdk.S new file mode 100644 index 0000000..78d5a58 --- /dev/null +++ b/boards/dk-tm4c129x/synth/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SoundIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD SoundIntHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/synth/synth.c b/boards/dk-tm4c129x/synth/synth.c new file mode 100644 index 0000000..7a59e3b --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.c @@ -0,0 +1,1438 @@ +//***************************************************************************** +// +// synth.c - A single-octave synthesizer to demonstrate the use of the sound +// driver. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "utils/sine.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/sound.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Synthesizer (synth)

      +//! +//! This application provides a single-octave synthesizer utilizing the touch +//! screen as a virtual piano keyboard. The notes played on the virtual piano +//! are played out via the on-board speaker. +// +//***************************************************************************** + +//***************************************************************************** +// +// The colors used to draw the white keys. +// +//***************************************************************************** +#define ClrWhiteKey 0xcfcfcf +#define ClrWhiteBright 0xffffff +#define ClrWhiteDim 0x9f9f9f + +//***************************************************************************** +// +// The colors used to draw the black keys. +// +//***************************************************************************** +#define ClrBlackKey 0x000000 +#define ClrBlackBright 0x606060 +#define ClrBlackDim 0x303030 + +//***************************************************************************** +// +// The color used to draw a pressed key. +// +//***************************************************************************** +#define ClrPressed 0x3f3fbf + +//***************************************************************************** +// +// The width and height of the white keys. The width should be an even number. +// +//***************************************************************************** +#define WHITE_WIDTH 36 +#define WHITE_HEIGHT 190 + +//***************************************************************************** +// +// The width and height of the black keys. The width should be a multiple of +// four. +// +//***************************************************************************** +#define BLACK_WIDTH 26 +#define BLACK_HEIGHT 110 + +//***************************************************************************** +// +// The screen offset of the upper left hand corner of the keyboard. +// +//***************************************************************************** +#define X_OFFSET 16 +#define Y_OFFSET 32 + +//***************************************************************************** +// +// A structure that describes a key on the keyboard. +// +//***************************************************************************** +typedef struct +{ + // + // The outline of the key. + // + tRectangle sOutline; + + // + // The first/top fill for the key. + // + tRectangle sFill1; + + // + // The second/bottom fill for the key (not used for black keys). + // + tRectangle sFill2; + + // + // The frequency of the note produced by this key. + // + uint32_t ui32Freq; +} +tKey; + +//***************************************************************************** +// +// The white keys on the keyboard. +// +//***************************************************************************** +static const tKey g_psWhiteKeys[] = +{ + // + // C4 + // + { + // + // Outline + // + { + X_OFFSET, + Y_OFFSET, + X_OFFSET + WHITE_WIDTH - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + 2, + Y_OFFSET + 2, + X_OFFSET + WHITE_WIDTH - ((BLACK_WIDTH * 3) / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + WHITE_WIDTH - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 261 + }, + + // + // D4 + // + { + // + // Outline + // + { + X_OFFSET + WHITE_WIDTH, + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 2) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + WHITE_WIDTH + (BLACK_WIDTH / 4), + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 2) - (BLACK_WIDTH / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + WHITE_WIDTH + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 2) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 294 + }, + + // + // E4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 2), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 3) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + (WHITE_WIDTH * 2) + ((BLACK_WIDTH * 3) / 4), + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 3) - 3, + Y_OFFSET + BLACK_HEIGHT - 1, + }, + + // + // Bottom fill + // + { + X_OFFSET + (WHITE_WIDTH * 2) + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 3) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 330 + }, + + // + // F4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 3), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 4) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + (WHITE_WIDTH * 3) + 2, + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 4) - ((BLACK_WIDTH * 3) / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + (WHITE_WIDTH * 3) + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 4) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 349 + }, + + // + // G4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 4), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 5) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + (WHITE_WIDTH * 4) + (BLACK_WIDTH / 4), + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 5) - (BLACK_WIDTH / 2) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + (WHITE_WIDTH * 4) + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 5) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 392 + }, + + // + // A4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 5), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 6) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + (WHITE_WIDTH * 5) + (BLACK_WIDTH / 2), + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 6) - (BLACK_WIDTH / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + (WHITE_WIDTH * 5) + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 6) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 440 + }, + + // + // B4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 6), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 7) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + (WHITE_WIDTH * 6) + ((BLACK_WIDTH * 3) / 4), + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 7) - 3, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + (WHITE_WIDTH * 6) + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 7) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 494 + }, + + // + // C5 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 7), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 8) - 1, + Y_OFFSET + WHITE_HEIGHT - 1 + }, + + // + // Top fill + // + { + X_OFFSET + (WHITE_WIDTH * 7) + 2, + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 8) - 3, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Bottom fill + // + { + X_OFFSET + (WHITE_WIDTH * 7) + 2, + Y_OFFSET + BLACK_HEIGHT, + X_OFFSET + (WHITE_WIDTH * 8) - 3, + Y_OFFSET + WHITE_HEIGHT - 3 + }, + + // + // Frequency + // + 523 + } +}; + +//***************************************************************************** +// +// The number of white keys. +// +//***************************************************************************** +#define NUM_WHITE_KEYS (sizeof(g_psWhiteKeys) / \ + sizeof(g_psWhiteKeys[0])) + +//***************************************************************************** +// +// The black keys on the keyboard. +// +//***************************************************************************** +static const tKey g_psBlackKeys[] = +{ + // + // C#4 + // + { + // + // Outline + // + { + X_OFFSET + WHITE_WIDTH - ((BLACK_WIDTH * 3) / 4), + Y_OFFSET, + X_OFFSET + WHITE_WIDTH + (BLACK_WIDTH / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Fill + // + { + X_OFFSET + WHITE_WIDTH - ((BLACK_WIDTH * 3) / 4) + 2, + Y_OFFSET + 2, + X_OFFSET + WHITE_WIDTH + (BLACK_WIDTH / 4) - 3, + Y_OFFSET + BLACK_HEIGHT - 3 + }, + + // + // Unused + // + { + 0 + }, + + // + // Frequency + // + 277 + }, + + // + // D#4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 2) - (BLACK_WIDTH / 4), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 2) + ((BLACK_WIDTH * 3) / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Fill + // + { + X_OFFSET + (WHITE_WIDTH * 2) - (BLACK_WIDTH / 4) + 2, + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 2) + ((BLACK_WIDTH * 3) / 4) - 3, + Y_OFFSET + BLACK_HEIGHT - 3 + }, + + // + // Unused + // + { + 0 + }, + + // + // Frequency + // + 311 + }, + + // + // F#4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 4) - ((BLACK_WIDTH * 3) / 4), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 4) + (BLACK_WIDTH / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Fill + // + { + X_OFFSET + (WHITE_WIDTH * 4) - ((BLACK_WIDTH * 3) / 4) + 2, + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 4) + (BLACK_WIDTH / 4) - 3, + Y_OFFSET + BLACK_HEIGHT - 3 + }, + + // + // Unused + // + { + 0 + }, + + // + // Frequency + // + 370 + }, + + // + // G#4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 5) - (BLACK_WIDTH / 2), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 5) + (BLACK_WIDTH / 2) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Fill + // + { + X_OFFSET + (WHITE_WIDTH * 5) - (BLACK_WIDTH / 2) + 2, + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 5) + (BLACK_WIDTH / 2) - 3, + Y_OFFSET + BLACK_HEIGHT - 3 + }, + + // + // Unused + // + { + 0 + }, + + // + // Frequency + // + 415 + }, + + // + // A#4 + // + { + // + // Outline + // + { + X_OFFSET + (WHITE_WIDTH * 6) - (BLACK_WIDTH / 4), + Y_OFFSET, + X_OFFSET + (WHITE_WIDTH * 6) + ((BLACK_WIDTH * 3) / 4) - 1, + Y_OFFSET + BLACK_HEIGHT - 1 + }, + + // + // Fill + // + { + X_OFFSET + (WHITE_WIDTH * 6) - (BLACK_WIDTH / 4) + 2, + Y_OFFSET + 2, + X_OFFSET + (WHITE_WIDTH * 6) + ((BLACK_WIDTH * 3) / 4) - 3, + Y_OFFSET + BLACK_HEIGHT - 3 + }, + + // + // Unused + // + { + 0 + }, + + // + // Frequency + // + 466 + } +}; + +//***************************************************************************** +// +// The number of black keys. +// +//***************************************************************************** +#define NUM_BLACK_KEYS (sizeof(g_psBlackKeys) / \ + sizeof(g_psBlackKeys[0])) + +//***************************************************************************** +// +// The buffer used to store the synthesized waveform that is to be played. The +// buffer size must be a power of 2 less than or equal to 2048. +// +//***************************************************************************** +#define AUDIO_SIZE 2048 +static int16_t g_pi16AudioBuffer[AUDIO_SIZE]; + +//***************************************************************************** +// +// A set of flags that indicate the current state of the application. +// +//***************************************************************************** +static uint32_t g_ui32Flags; +#define FLAG_PING 0 // The "ping" half of the sound + // buffer needs to be filled +#define FLAG_PONG 1 // The "pong" half of the sound + // buffer needs to be filled + +//***************************************************************************** +// +// The key that is currently pressed. +// +//***************************************************************************** +uint32_t g_ui32Key = NUM_WHITE_KEYS + NUM_BLACK_KEYS; + +//***************************************************************************** +// +// The position within the waveform of the currently playing key. +// +//***************************************************************************** +uint32_t g_ui32AudioPos; + +//***************************************************************************** +// +// The step rate of the waveform for the currently playing key. +// +//***************************************************************************** +uint32_t g_ui32AudioStep; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Fills in one of the white keys with the given color. +// +//***************************************************************************** +static inline void +FillWhiteKey(tContext *pContext, uint32_t ui32Key, uint32_t ui32Color) +{ + // + // Select the specified color. + // + GrContextForegroundSet(pContext, ui32Color); + + // + // Fill in the upper and lower portions of the white key. + // + GrRectFill(pContext, &(g_psWhiteKeys[ui32Key].sFill1)); + GrRectFill(pContext, &(g_psWhiteKeys[ui32Key].sFill2)); +} + +//***************************************************************************** +// +// Draws the white keys on the display. +// +//***************************************************************************** +static inline void +DrawWhiteKeys(tContext *pContext) +{ + uint32_t ui32Key; + + // + // Loop through the white keys. + // + for(ui32Key = 0; ui32Key < NUM_WHITE_KEYS; ui32Key++) + { + // + // Select the color for the top and left edges of the white key. + // + GrContextForegroundSet(pContext, ClrWhiteBright); + + // + // Draw the top and left edges of the white key. + // + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMin, + g_psWhiteKeys[ui32Key].sOutline.i16YMin, + g_psWhiteKeys[ui32Key].sOutline.i16XMax, + g_psWhiteKeys[ui32Key].sOutline.i16YMin); + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16XMax - 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMin + 1); + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMin, + g_psWhiteKeys[ui32Key].sOutline.i16YMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16XMin, + g_psWhiteKeys[ui32Key].sOutline.i16YMax); + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMin + 2, + g_psWhiteKeys[ui32Key].sOutline.i16XMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMax - 1); + + // + // Select the color for the bottom and right edges of the white key. + // + GrContextForegroundSet(pContext, ClrWhiteDim); + + // + // Draw the bottom and right edges of the white key. + // + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMax, + g_psWhiteKeys[ui32Key].sOutline.i16YMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16XMax, + g_psWhiteKeys[ui32Key].sOutline.i16YMax); + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMax - 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMin + 2, + g_psWhiteKeys[ui32Key].sOutline.i16XMax - 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMax - 1); + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMin + 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMax, + g_psWhiteKeys[ui32Key].sOutline.i16XMax - 1, + g_psWhiteKeys[ui32Key].sOutline.i16YMax); + GrLineDraw(pContext, + g_psWhiteKeys[ui32Key].sOutline.i16XMin + 2, + g_psWhiteKeys[ui32Key].sOutline.i16YMax - 1, + g_psWhiteKeys[ui32Key].sOutline.i16XMax - 2, + g_psWhiteKeys[ui32Key].sOutline.i16YMax - 1); + + // + // Fill in the white key with the default color. + // + FillWhiteKey(pContext, ui32Key, ClrWhiteKey); + } +} + +//***************************************************************************** +// +// Fills in one of the black keys with the given color. +// +//***************************************************************************** +static inline void +FillBlackKey(tContext *pContext, uint32_t ui32Key, uint32_t ui32Color) +{ + // + // Select the specified color. + // + GrContextForegroundSet(pContext, ui32Color); + + // + // FIll in the black key. + // + GrRectFill(pContext, &(g_psBlackKeys[ui32Key].sFill1)); +} + +//***************************************************************************** +// +// Draws the black keys on the display. +// +//***************************************************************************** +static inline void +DrawBlackKeys(tContext *pContext) +{ + uint32_t ui32Key; + + // + // Loop through the black keys. + // + for(ui32Key = 0; ui32Key < NUM_BLACK_KEYS; ui32Key++) + { + // + // Select the color for the top and left edges of the black key. + // + GrContextForegroundSet(pContext, ClrBlackBright); + + // + // Draw the top and left edges of the black key. + // + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMin, + g_psBlackKeys[ui32Key].sOutline.i16YMin, + g_psBlackKeys[ui32Key].sOutline.i16XMax, + g_psBlackKeys[ui32Key].sOutline.i16YMin); + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16YMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16XMax - 1, + g_psBlackKeys[ui32Key].sOutline.i16YMin + 1); + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMin, + g_psBlackKeys[ui32Key].sOutline.i16YMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16XMin, + g_psBlackKeys[ui32Key].sOutline.i16YMax); + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16YMin + 2, + g_psBlackKeys[ui32Key].sOutline.i16XMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16YMax - 1); + + // + // Select the color for the bottom and right edges of the black key. + // + GrContextForegroundSet(pContext, ClrBlackDim); + + // + // Draw the bottom and right edges of the black key. + // + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMax, + g_psBlackKeys[ui32Key].sOutline.i16YMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16XMax, + g_psBlackKeys[ui32Key].sOutline.i16YMax); + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMax - 1, + g_psBlackKeys[ui32Key].sOutline.i16YMin + 2, + g_psBlackKeys[ui32Key].sOutline.i16XMax - 1, + g_psBlackKeys[ui32Key].sOutline.i16YMax - 1); + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMin + 1, + g_psBlackKeys[ui32Key].sOutline.i16YMax, + g_psBlackKeys[ui32Key].sOutline.i16XMax - 1, + g_psBlackKeys[ui32Key].sOutline.i16YMax); + GrLineDraw(pContext, + g_psBlackKeys[ui32Key].sOutline.i16XMin + 2, + g_psBlackKeys[ui32Key].sOutline.i16YMax - 1, + g_psBlackKeys[ui32Key].sOutline.i16XMax - 2, + g_psBlackKeys[ui32Key].sOutline.i16YMax - 1); + + // + // Fill in the black key with the default color. + // + FillBlackKey(pContext, ui32Key, ClrBlackKey); + } +} + +//***************************************************************************** +// +// The callback function that is called by the sound driver to indicate that +// half of the sound buffer has been played. +// +//***************************************************************************** +void +SoundCallback(uint32_t ui32Half) +{ + // + // See which half of the sound buffer has been played. + // + if(ui32Half == 0) + { + // + // The first half of the sound buffer needs to be filled. + // + HWREGBITW(&g_ui32Flags, FLAG_PING) = 1; + } + else + { + // + // The second half of the sound buffer needs to be filled. + // + HWREGBITW(&g_ui32Flags, FLAG_PONG) = 1; + } +} + +//***************************************************************************** +// +// The callback function that is called by the touch screen driver to indicate +// activity on the touch screen. +// +//***************************************************************************** +int32_t +TouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + uint32_t ui32Key; + + // + // See if this touch event occurred on one of the black keys. + // + for(ui32Key = 0; ui32Key < NUM_BLACK_KEYS; ui32Key++) + { + if((i32X >= g_psBlackKeys[ui32Key].sOutline.i16XMin) && + (i32X <= g_psBlackKeys[ui32Key].sOutline.i16XMax) && + (i32Y >= g_psBlackKeys[ui32Key].sOutline.i16YMin) && + (i32Y <= g_psBlackKeys[ui32Key].sOutline.i16YMax)) + { + break; + } + } + + // + // See if a match was found. + // + if(ui32Key != NUM_BLACK_KEYS) + { + // + // The touch event occurred on one of the black keys. Increment the + // index by the number of white keys since they are listed first. + // + ui32Key += NUM_WHITE_KEYS; + } + else + { + // + // The touch event did not occur on one of the black keys. Check the + // white keys. + // + for(ui32Key = 0; ui32Key < NUM_WHITE_KEYS; ui32Key++) + { + if((i32X >= g_psWhiteKeys[ui32Key].sOutline.i16XMin) && + (i32X <= g_psWhiteKeys[ui32Key].sOutline.i16XMax) && + (i32Y >= g_psWhiteKeys[ui32Key].sOutline.i16YMin) && + (i32Y <= g_psWhiteKeys[ui32Key].sOutline.i16YMax)) + { + break; + } + } + + // + // If the touch event did not occur on one of the white keys, set the + // key number to a non-existant key. + // + if(ui32Key == NUM_WHITE_KEYS) + { + ui32Key += NUM_BLACK_KEYS; + } + } + + // + // Determine the message that is being sent. + // + switch(ui32Message) + { + // + // The user has just touched the screen. + // + case WIDGET_MSG_PTR_DOWN: + { + // + // Save this key as the currently pressed key. + // + g_ui32Key = ui32Key; + + // + // Done handling this message. + // + break; + } + + // + // The user has moved the touch location on the screen. + // + case WIDGET_MSG_PTR_MOVE: + { + // + // Save this key as the currently pressed key. + // + g_ui32Key = ui32Key; + + // + // Done handling this message. + // + break; + } + + // + // The user is no longer touching the screen. + // + case WIDGET_MSG_PTR_UP: + { + // + // Indicate that no key is being pressed. + // + g_ui32Key = NUM_WHITE_KEYS + NUM_BLACK_KEYS; + + // + // Done handling this message. + // + break; + } + } + + // + // Success. + // + return(0); +} + +//***************************************************************************** +// +// Generates an additional section of the audio output based on the currently +// pressed key (if any). +// +//***************************************************************************** +uint32_t +GenerateAudio(int16_t *pi16Buffer, uint32_t ui32Count) +{ + int32_t i32Val, i32Vol, i32VolStep; + uint32_t ui32Key, ui32NewStep; + + // + // See if one of the push buttons is pressed. + // + ui32Key = (ROM_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_3) | + ROM_GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_5)); + if(ui32Key == GPIO_PIN_5) + { + // + // The up botton is pressed and the down button is not pressed. + // Therefore, turn up the volume. + // + SoundVolumeUp(1); + } + if(ui32Key == GPIO_PIN_3) + { + // + // The up botton is not pressed and the down button is pressed. + // Therefore, turn down the volume. + // + SoundVolumeDown(1); + } + + // + // Get the currently pressed piano key. + // + ui32Key = g_ui32Key; + + // + // See if this key is one of the white keys. + // + if(ui32Key < NUM_WHITE_KEYS) + { + // + // Compute the step value required to generate this white key's + // frequency. + // + ui32NewStep = + ((g_psWhiteKeys[ui32Key].ui32Freq * 65536) / 64000) * 65536; + } + + // + // See if this key is one of the black keys. + // + else if(ui32Key < (NUM_WHITE_KEYS + NUM_BLACK_KEYS)) + { + // + // Compute the step value required to generate this black key's + // frequency. + // + ui32NewStep = + (((g_psBlackKeys[ui32Key - NUM_WHITE_KEYS].ui32Freq * 65536) / + 64000) * 65536); + } + + // + // No key is being pressed. + // + else + { + // + // Do not generate any waveform. + // + ui32NewStep = 0; + } + + // + // See if no key was previously pressed and no key is currently pressed. + // + if((g_ui32AudioStep == 0) && (ui32NewStep == 0)) + { + // + // Fill the buffer with silence. + // + while(ui32Count--) + { + *pi16Buffer++ = 0; + } + + // + // There is nothing further to do. + // + return(ui32Key); + } + + // + // See if the same key as last time is pressed. + // + if(g_ui32AudioStep == ui32NewStep) + { + // + // Set the volume of the waveform generator to full volume. + // + i32Vol = 1024; + i32VolStep = 0; + } + + // + // See if a key was previously pressed. + // + else if(g_ui32AudioStep == 0) + { + // + // There was not a previously pressed key, so ramp the volume of the + // first waveform generator to full volume. + // + i32Vol = 0; + i32VolStep = 1024 / ui32Count; + + // + // Start the new waveform at zero. + // + g_ui32AudioPos = 0; + } + + // + // Otherwise there is already a key playing. + // + else + { + // + // Ramp the volume of the waveform generator to zero. + // + i32Vol = 1024; + i32VolStep = -1024 / ui32Count; + } + + // + // Loop through the samples to be generated. + // + while(ui32Count--) + { + // + // Compute the value of the waveform. + // + i32Val = sine(g_ui32AudioPos + (sine(g_ui32AudioPos * 3) * 10922)); + + // + // Increment the position of the waveform. + // + g_ui32AudioPos += g_ui32AudioStep; + + // + // Scale the waveform value by the volume. + // + i32Val = (i32Val * i32Vol) / 1024; + + // + // Increment the waveform volume by the step. + // + i32Vol += i32VolStep; + if(i32Vol < 0) + { + i32Vol = 0; + } + if(i32Vol > 1024) + { + i32Vol = 1024; + } + + // + // Cilp the waveform to min/max if required. + // + i32Val /= 2; + if(i32Val > 32767) + { + i32Val = 32767; + } + if(i32Val < -32768) + { + i32Val = -32768; + } + + // + // Add the new waveform value to the sample buffer. + // + *pi16Buffer++ = (int16_t)i32Val; + } + + // + // Save the new step value. + // + g_ui32AudioStep = ui32NewStep; + + // + // Return the currently pressed key. + // + return(ui32Key); +} + +//***************************************************************************** +// +// This application performs simple audio synthesis and playback based on the +// keys pressed on the touch screen virtual piano keyboard. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock, ui32OldKey, ui32NewKey; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "synth"); + + // + // Draw the keys on the virtual piano keyboard. + // + DrawWhiteKeys(&sContext); + DrawBlackKeys(&sContext); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(TouchCallback); + + // + // Initialize the sound driver. + // + SoundInit(ui32SysClock); + SoundVolumeSet(128); + SoundStart(g_pi16AudioBuffer, AUDIO_SIZE, 64000, SoundCallback); + + // + // Default the old and new key to not pressed so that the first key press + // will be properly drawn on the keyboard. + // + ui32OldKey = NUM_WHITE_KEYS + NUM_BLACK_KEYS; + ui32NewKey = NUM_WHITE_KEYS + NUM_BLACK_KEYS; + + // + // Loop forever. + // + while(1) + { + // + // See if the first half of the sound buffer needs to be filled. + // + if(HWREGBITW(&g_ui32Flags, FLAG_PING) == 1) + { + // + // Synthesize new audio into the first half of the sound buffer. + // + ui32NewKey = GenerateAudio(g_pi16AudioBuffer, AUDIO_SIZE / 2); + + // + // Clear the flag for the first half of the sound buffer. + // + HWREGBITW(&g_ui32Flags, FLAG_PING) = 0; + } + + // + // See if the second half of the sound buffer needs to be filled. + // + if(HWREGBITW(&g_ui32Flags, FLAG_PONG) == 1) + { + // + // Synthesize new audio into the second half of the sound buffer. + // + ui32NewKey = GenerateAudio(g_pi16AudioBuffer + (AUDIO_SIZE / 2), + AUDIO_SIZE / 2); + + // + // Clear the flag for the second half of the sound buffer. + // + HWREGBITW(&g_ui32Flags, FLAG_PONG) = 0; + } + + // + // See if a different key has been pressed. + // + if(ui32OldKey != ui32NewKey) + { + // + // See if the old key was a white key. + // + if(ui32OldKey < NUM_WHITE_KEYS) + { + // + // Redraw the face of the white key so that it no longer shows + // as being pressed. + // + FillWhiteKey(&sContext, ui32OldKey, ClrWhiteKey); + } + + // + // See if the old key was a black key. + // + else if(ui32OldKey < (NUM_WHITE_KEYS + NUM_BLACK_KEYS)) + { + // + // Redraw the face of the black key so that it no longer shows + // as being pressed. + // + FillBlackKey(&sContext, ui32OldKey - NUM_WHITE_KEYS, + ClrBlackKey); + } + + // + // See if the new key is a white key. + // + if(ui32NewKey < NUM_WHITE_KEYS) + { + // + // Redraw the face of the white key so that it is shown as + // being pressed. + // + FillWhiteKey(&sContext, ui32NewKey, ClrPressed); + } + + // + // See if the new key is a black key. + // + else if(ui32NewKey < (NUM_WHITE_KEYS + NUM_BLACK_KEYS)) + { + // + // Redraw the face of the black key so that it is shown as + // being pressed. + // + FillBlackKey(&sContext, ui32NewKey - NUM_WHITE_KEYS, + ClrPressed); + } + + // + // Save the new key as the old key. + // + ui32OldKey = ui32NewKey; + } + } +} diff --git a/boards/dk-tm4c129x/synth/synth.ewd b/boards/dk-tm4c129x/synth/synth.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/synth/synth.ewp b/boards/dk-tm4c129x/synth/synth.ewp new file mode 100644 index 0000000..750cd76 --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\..\..\..\..\utils\sine.c + + + $PROJ_DIR$\..\drivers\sound.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\synth.c + + + $PROJ_DIR$\..\drivers\touch.c + + + diff --git a/boards/dk-tm4c129x/synth/synth.icf b/boards/dk-tm4c129x/synth/synth.icf new file mode 100644 index 0000000..7e217ce --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// synth.icf - Linker configuration file for synth. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/synth/synth.ld b/boards/dk-tm4c129x/synth/synth.ld new file mode 100644 index 0000000..d207c8b --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * synth.ld - Linker configuration file for synth. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/synth/synth.sct b/boards/dk-tm4c129x/synth/synth.sct new file mode 100644 index 0000000..e1bef02 --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; synth.sct - Linker configuration file for synth. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/synth/synth.uvopt b/boards/dk-tm4c129x/synth/synth.uvopt new file mode 100644 index 0000000..d39244c --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + synth + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\sine.c + sine.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\sound.c + sound.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\synth.c + synth.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/synth/synth.uvproj b/boards/dk-tm4c129x/synth/synth.uvproj new file mode 100644 index 0000000..497bf42 --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + synth + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + synth + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\synth.bin .\rvmdk\synth.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + synth.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + sine.c + 1 + ..\..\..\..\utils\sine.c + + + sound.c + 1 + ..\drivers\sound.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + synth.c + 1 + .\synth.c + + + touch.c + 1 + ..\drivers\touch.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/synth/synth_ccs.cmd b/boards/dk-tm4c129x/synth/synth_ccs.cmd new file mode 100644 index 0000000..910e257 --- /dev/null +++ b/boards/dk-tm4c129x/synth/synth_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * synth_ccs.cmd - CCS linker configuration file for synth. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/tamper/Makefile b/boards/dk-tm4c129x/tamper/Makefile new file mode 100644 index 0000000..7737e38 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/Makefile @@ -0,0 +1,92 @@ +#****************************************************************************** +# +# Makefile - Rules for building the tamper example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the tamper example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/tamper.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the tamper example. +# +${COMPILER}/tamper.axf: ${COMPILER}/frame.o +${COMPILER}/tamper.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/tamper.axf: ${COMPILER}/pinout.o +${COMPILER}/tamper.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/tamper.axf: ${COMPILER}/tamper.o +${COMPILER}/tamper.axf: ${COMPILER}/touch.o +${COMPILER}/tamper.axf: ${COMPILER}/ustdlib.o +${COMPILER}/tamper.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/tamper.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/tamper.axf: tamper.ld +SCATTERgcc_tamper=tamper.ld +ENTRY_tamper=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/tamper/ccs/.ccsimportspec b/boards/dk-tm4c129x/tamper/ccs/.ccsimportspec new file mode 100644 index 0000000..0c9fc62 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/tamper/ccs/.ccsproject b/boards/dk-tm4c129x/tamper/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tamper/ccs/.cproject b/boards/dk-tm4c129x/tamper/ccs/.cproject new file mode 100644 index 0000000..2296c56 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tamper/ccs/.project b/boards/dk-tm4c129x/tamper/ccs/.project new file mode 100644 index 0000000..042e881 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/.project @@ -0,0 +1,75 @@ + + + tamper + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tamper/startup_ccs.c + + + tamper.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tamper/tamper.c + + + tamper_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tamper/tamper_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/tamper/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/tamper/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/tamper/ccs/Debug/tamper.bin b/boards/dk-tm4c129x/tamper/ccs/Debug/tamper.bin new file mode 100644 index 0000000..507c4d4 Binary files /dev/null and b/boards/dk-tm4c129x/tamper/ccs/Debug/tamper.bin differ diff --git a/boards/dk-tm4c129x/tamper/ccs/Debug/tamper.out b/boards/dk-tm4c129x/tamper/ccs/Debug/tamper.out new file mode 100644 index 0000000..4b2b65a Binary files /dev/null and b/boards/dk-tm4c129x/tamper/ccs/Debug/tamper.out differ diff --git a/boards/dk-tm4c129x/tamper/ccs/macros.ini_initial b/boards/dk-tm4c129x/tamper/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/tamper/ccs/target_config.ccxml b/boards/dk-tm4c129x/tamper/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.bin b/boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.bin new file mode 100644 index 0000000..8288671 Binary files /dev/null and b/boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.bin differ diff --git a/boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.out b/boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.out new file mode 100644 index 0000000..6d1bd11 Binary files /dev/null and b/boards/dk-tm4c129x/tamper/ewarm/Exe/tamper.out differ diff --git a/boards/dk-tm4c129x/tamper/gcc/tamper.axf b/boards/dk-tm4c129x/tamper/gcc/tamper.axf new file mode 100644 index 0000000..0788552 Binary files /dev/null and b/boards/dk-tm4c129x/tamper/gcc/tamper.axf differ diff --git a/boards/dk-tm4c129x/tamper/gcc/tamper.bin b/boards/dk-tm4c129x/tamper/gcc/tamper.bin new file mode 100644 index 0000000..763b384 Binary files /dev/null and b/boards/dk-tm4c129x/tamper/gcc/tamper.bin differ diff --git a/boards/dk-tm4c129x/tamper/readme.txt b/boards/dk-tm4c129x/tamper/readme.txt new file mode 100644 index 0000000..65726d6 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/readme.txt @@ -0,0 +1,46 @@ +Tamper + +An example to demonstrate the use of tamper function in Hibernate module. +The user can ground any of these four GPIO pins(PM4, PM5, PM6, PM7 on +J28 and J30 headers on the development kit) to manually +triggle tamper events(s). The red indicators on the top of display should +reflect on which pin has triggered a tamper event. +The event along with the time stamp will be printed on the display. +The user can put the system in hibernation by pressing the HIB button. +The system should wake when the user either press RESET button, +or ground any of the four pins to trigger tamper event(s). When the +system boots up, the display should show whether the system woke +from hibernation or booted up from POR in which case a description of +howto instruction is printed on the display. +The RTC clock is displayed on the bottom of the display, the clock starts +from August 1st, 2013 at midnight when the app starts. The date and time +can be changed by pressing the CLOCK button. The clock is update every +second using hibernate calendar match interrupt. When the system +is in hibernation, the clock update on the display is paused, it resumes +once the system wakes up from hibernation. + +WARNING: XOSC failure is implemented in this example code, care must be +taken to ensure that the XOSCn pin(Y3) is properly grounded in order to +safely generate the external oscillator failure without damaging the +external oscillator. XOSCFAIL can be triggered as a tamper event, +as well as wakeup event from hibernation. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/tamper/rvmdk/tamper.axf b/boards/dk-tm4c129x/tamper/rvmdk/tamper.axf new file mode 100644 index 0000000..8a5e9cd Binary files /dev/null and b/boards/dk-tm4c129x/tamper/rvmdk/tamper.axf differ diff --git a/boards/dk-tm4c129x/tamper/rvmdk/tamper.bin b/boards/dk-tm4c129x/tamper/rvmdk/tamper.bin new file mode 100644 index 0000000..6a78615 Binary files /dev/null and b/boards/dk-tm4c129x/tamper/rvmdk/tamper.bin differ diff --git a/boards/dk-tm4c129x/tamper/startup_ccs.c b/boards/dk-tm4c129x/tamper/startup_ccs.c new file mode 100644 index 0000000..eb654d8 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/startup_ccs.c @@ -0,0 +1,258 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void HibernateIntHandler(void); +extern void NMITamperEventHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NMITamperEventHandler, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + HibernateIntHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tamper/startup_ewarm.c b/boards/dk-tm4c129x/tamper/startup_ewarm.c new file mode 100644 index 0000000..c82084a --- /dev/null +++ b/boards/dk-tm4c129x/tamper/startup_ewarm.c @@ -0,0 +1,289 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void HibernateIntHandler(void); +extern void NMITamperEventHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NMITamperEventHandler, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + HibernateIntHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tamper/startup_gcc.c b/boards/dk-tm4c129x/tamper/startup_gcc.c new file mode 100644 index 0000000..0922ade --- /dev/null +++ b/boards/dk-tm4c129x/tamper/startup_gcc.c @@ -0,0 +1,305 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void HibernateIntHandler(void); +extern void NMITamperEventHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NMITamperEventHandler, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + HibernateIntHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tamper/startup_rvmdk.S b/boards/dk-tm4c129x/tamper/startup_rvmdk.S new file mode 100644 index 0000000..0431488 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/startup_rvmdk.S @@ -0,0 +1,323 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN HibernateIntHandler + EXTERN NMITamperEventHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMITamperEventHandler ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD HibernateIntHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/tamper/tamper.c b/boards/dk-tm4c129x/tamper/tamper.c new file mode 100644 index 0000000..05b36e3 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.c @@ -0,0 +1,2052 @@ +//***************************************************************************** +// +// tamper.c - tamper example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "inc/hw_ints.h" +#include "inc/hw_hibernate.h" +#include "inc/hw_sysctl.h" +#include "inc/hw_types.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/gpio.h" +#include "driverlib/pin_map.h" +#include "driverlib/hibernate.h" +#include "driverlib/interrupt.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/listbox.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "utils/ustdlib.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Tamper (tamper)

      +//! +//! An example to demonstrate the use of tamper function in Hibernate module. +//! The user can ground any of these four GPIO pins(PM4, PM5, PM6, PM7 on +//! J28 and J30 headers on the development kit) to manually +//! triggle tamper events(s). The red indicators on the top of display should +//! reflect on which pin has triggered a tamper event. +//! The event along with the time stamp will be printed on the display. +//! The user can put the system in hibernation by pressing the HIB button. +//! The system should wake when the user either press RESET button, +//! or ground any of the four pins to trigger tamper event(s). When the +//! system boots up, the display should show whether the system woke +//! from hibernation or booted up from POR in which case a description of +//! howto instruction is printed on the display. +//! The RTC clock is displayed on the bottom of the display, the clock starts +//! from August 1st, 2013 at midnight when the app starts. The date and time +//! can be changed by pressing the CLOCK button. The clock is update every +//! second using hibernate calendar match interrupt. When the system +//! is in hibernation, the clock update on the display is paused, it resumes +//! once the system wakes up from hibernation. +//! +//! WARNING: XOSC failure is implemented in this example code, care must be +//! taken to ensure that the XOSCn pin(Y3) is properly grounded in order to +//! safely generate the external oscillator failure without damaging the +//! external oscillator. XOSCFAIL can be triggered as a tamper event, +//! as well as wakeup event from hibernation. +// +//***************************************************************************** + +//***************************************************************************** +// +// Global variables used for Tamper events. +// +//***************************************************************************** +static volatile uint32_t g_ui32NMIEvent = 0; +static volatile uint32_t g_ui32TamperEventFlag = 0; +static volatile uint32_t g_ui32TamperRTCLog = 0; +static volatile uint32_t g_ui32TamperXOSCFailEvent = 0; +static uint32_t g_ui32RTCLog[4]; +static uint32_t g_ui32EventLog[4]; + +//***************************************************************************** +// +// Flag to indicate that main screen is active so that main screen buffers can +// be updated and widgets redrawn. +// +//***************************************************************************** +static bool g_bMainScreen; + +//***************************************************************************** +// +// Flag that informs that the user has requested hibernation. +// +//***************************************************************************** +static volatile bool g_bHibernate = false; + +//***************************************************************************** +// +// Flag that indicates clock update on the display. +// +//***************************************************************************** +static bool g_bUpdateRTC = 0; + +//***************************************************************************** +// +// Flag that informs that date and time have to be set. +// +//***************************************************************************** +volatile bool g_bSetDate; + +//***************************************************************************** +// +// Buffers to store widget display information. +// +//***************************************************************************** +char g_pcMonBuf[4], g_pcDayBuf[3], g_pcYearBuf[5]; +char g_pcHourBuf[3], g_pcMinBuf[3], g_pcAMPMBuf[3]; + +//***************************************************************************** +// +// Variables that keep track of the date and time across different screens. +// +//***************************************************************************** +uint32_t g_ui32MonthIdx, g_ui32DayIdx, g_ui32YearIdx; +uint32_t g_ui32HourIdx, g_ui32MinIdx; + + +//***************************************************************************** +// +// Lookup table to convert numerical value of a month into text. +// +//***************************************************************************** +static char *g_ppcMonth[12] = +{ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" +}; + +//***************************************************************************** +// +// This is the image of a red LED that is turned off. +// +//***************************************************************************** +const uint8_t g_pui8LightOff[] = +{ + IMAGE_FMT_4BPP_COMP, + 20, 0, + 20, 0, + + 15, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, + 0x00, 0x00, 0x19, + 0x00, 0x00, 0x2a, + 0x00, 0x00, 0x30, + 0x00, 0x00, 0x34, + 0x00, 0x00, 0x37, + 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x3d, + 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x40, + 0x00, 0x00, 0x42, + 0x00, 0x00, 0x45, + 0x00, 0x00, 0x4a, + 0x00, 0x00, 0x50, + 0x00, 0x00, 0x56, + + 0x84, 0x01, 0x13, 0xaf, 0xe8, 0x31, 0x03, 0x1b, 0xff, 0x08, 0xff, 0xee, + 0xed, 0x71, 0x01, 0x02, 0xff, 0xff, 0x00, 0xfe, 0xed, 0xdd, 0xcc, 0x20, + 0x00, 0x00, 0x2f, 0x00, 0xff, 0xfe, 0xee, 0xdd, 0xcc, 0xcb, 0xa2, 0x00, + 0x40, 0x01, 0x21, 0xdd, 0xdc, 0xcc, 0xbb, 0xa8, 0x10, 0x00, 0x09, 0xff, + 0xfe, 0xdd, 0xdc, 0xcb, 0xbb, 0xba, 0x00, 0x98, 0x30, 0x1e, 0xfe, 0xed, + 0xdc, 0xcb, 0xaa, 0x00, 0xaa, 0xaa, 0x98, 0x61, 0x3e, 0xfe, 0xdd, 0xcc, + 0x00, 0xba, 0x99, 0x9a, 0xaa, 0x98, 0x62, 0x7d, 0xee, 0x00, 0xdc, 0xcb, + 0xa9, 0x99, 0x99, 0x99, 0x88, 0x73, 0x08, 0xcd, 0xed, 0xdc, 0xba, 0xb9, + 0x99, 0x88, 0x64, 0x20, 0xcc, 0xdd, 0x6b, 0x99, 0x87, 0x63, 0x6c, 0xcc, + 0x40, 0xba, 0x1a, 0x98, 0x76, 0x42, 0x2b, 0xba, 0xaa, 0x88, 0x1b, 0x65, + 0x42, 0x1a, 0x2a, 0x99, 0x98, 0x87, 0x00, 0x64, 0x30, 0x04, 0x78, 0x88, + 0x88, 0x89, 0x99, 0x00, 0x88, 0x76, 0x54, 0x20, 0x01, 0x67, 0x77, 0x88, + 0x00, 0x88, 0x88, 0x87, 0x65, 0x43, 0x00, 0x00, 0x25, 0x00, 0x67, 0x77, + 0x77, 0x77, 0x65, 0x44, 0x31, 0x00, 0x00, 0x00, 0x01, 0x45, 0x66, 0x66, + 0x65, 0x54, 0x43, 0x00, 0x10, 0x00, 0x00, 0x00, 0x13, 0x44, 0x45, 0x44, + 0x20, 0x33, 0x20, 0xb9, 0x00, 0x00, 0x12, 0x23, 0x32, 0x80, 0x72, +}; + +//***************************************************************************** +// +// This is the image of a red LED that is turned on. +// +//***************************************************************************** +const uint8_t g_pui8LightOn[] = +{ + IMAGE_FMT_4BPP_COMP, + 20, 0, + 20, 0, + + 15, + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, + 0x00, 0x00, 0x40, + 0x00, 0x00, 0x76, + 0x00, 0x00, 0x9b, + 0x00, 0x00, 0xac, + 0x00, 0x00, 0xb6, + 0x00, 0x00, 0xbc, + 0x00, 0x00, 0xbe, + 0x00, 0x00, 0xbf, + 0x00, 0x00, 0xc1, + 0x00, 0x00, 0xc5, + 0x00, 0x00, 0xcd, + 0x00, 0x00, 0xdb, + 0x00, 0x00, 0xef, + 0x00, 0x00, 0xfc, + + 0x84, 0x01, 0x13, 0xaf, 0xe7, 0x31, 0x03, 0x1b, 0xff, 0x09, 0xff, 0xee, + 0xee, 0x51, 0x01, 0x02, 0xff, 0xb1, 0x02, 0xdd, 0xcc, 0x20, 0x00, 0x00, + 0x2f, 0xbb, 0xcc, 0x10, 0x92, 0x00, 0x01, 0x72, 0xdc, 0xcc, 0xcb, 0x96, + 0x00, 0x10, 0x07, 0xff, 0xfe, 0xed, 0xdc, 0xcc, 0xbb, 0x08, 0xba, 0x96, + 0x30, 0x1e, 0x22, 0xba, 0xaa, 0xaa, 0x10, 0x86, 0x51, 0x3e, 0x69, 0xba, + 0x99, 0x99, 0x99, 0x01, 0x76, 0x52, 0x5d, 0xee, 0xdd, 0xcb, 0xa9, 0xb2, + 0x20, 0x53, 0xcd, 0x6c, 0x98, 0x76, 0x54, 0xcc, 0xdd, 0x40, 0xcc, 0x6a, + 0x97, 0x66, 0x43, 0x5c, 0xcc, 0xba, 0x40, 0x98, 0x19, 0x87, 0x65, 0x43, + 0x3c, 0xcb, 0xa9, 0x20, 0x98, 0x89, 0x1a, 0x42, 0x1a, 0x88, 0x98, 0x77, + 0x40, 0x88, 0x69, 0x44, 0x31, 0x04, 0x67, 0x77, 0x77, 0x00, 0x78, 0x88, + 0x76, 0x55, 0x44, 0x20, 0x01, 0x55, 0x00, 0x66, 0x66, 0x77, 0x77, 0x65, + 0x54, 0x43, 0x10, 0x00, 0x00, 0x24, 0x55, 0x55, 0x66, 0x65, 0x54, 0x44, + 0x00, 0x31, 0x00, 0x00, 0x02, 0x44, 0x45, 0x55, 0x54, 0x00, 0x44, 0x33, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x44, 0x08, 0x44, 0x44, 0x33, 0x21, 0xb9, + 0x00, 0x00, 0x12, 0x10, 0x33, 0x32, 0x20, 0xba, +}; + +//***************************************************************************** +// +// The screen offset of the upper left hand corner where we start to draw. +// +//***************************************************************************** +#define X_OFFSET 8 +#define Y_OFFSET 24 + +//***************************************************************************** +// +// Defines for Hibernate memory value. It is used to determine if a wakeup is +// due to a tamper event. +// +//***************************************************************************** +#define HIBERNATE_TAMPER_DATA0 0xdeadbeef + +//***************************************************************************** +// +// Storage for the strings which appear in the status box in the middle of the +// display. +// +//**************************************************************************** +#define NUM_STATUS_STRINGS 10 +#define MAX_STATUS_STRING_LEN (64 + 1) +char g_pcStatus[NUM_STATUS_STRINGS][MAX_STATUS_STRING_LEN]; + +//***************************************************************************** +// +// Storage for the status listbox widget string table. +// +//***************************************************************************** +const char *g_ppcStatusStrings[NUM_STATUS_STRINGS] = +{ + g_pcStatus[0], g_pcStatus[1], g_pcStatus[2], g_pcStatus[3], + g_pcStatus[4], g_pcStatus[5], g_pcStatus[6], g_pcStatus[7], + g_pcStatus[8], g_pcStatus[9] +}; +uint32_t g_ui32StatusStringIndex = 0; + +//***************************************************************************** +// +// Forward reference to various widget structures in the main screen. +// +//***************************************************************************** +extern tCanvasWidget g_sMainScreen; +extern tCanvasWidget g_sIndicator0; +extern tCanvasWidget g_sIndicator1; +extern tCanvasWidget g_sIndicator2; +extern tCanvasWidget g_sIndicator3; +extern tCanvasWidget g_sIndicatorMarker; +extern tCanvasWidget g_sRTC; +extern tListBoxWidget g_sStatusList; +extern tPushButtonWidget g_sDateTimeSetBtn; +extern tPushButtonWidget g_sHIBBtn; + +//***************************************************************************** +// +// Forward reference to various widget structures in the clock setting screen. +// +//***************************************************************************** +extern tCanvasWidget g_sDateScreen; +extern tCanvasWidget g_sMonText; +extern tPushButtonWidget g_sMonUpBtn, g_sMonDwnBtn; +extern tCanvasWidget g_sDayText; +extern tPushButtonWidget g_sDayUpBtn, g_sDayDwnBtn; +extern tCanvasWidget g_sYearText; +extern tPushButtonWidget g_sYearUpBtn, g_sYearDwnBtn; +extern tPushButtonWidget g_sDateNextBtn; +extern tCanvasWidget g_sTimeScreen; +extern tCanvasWidget g_sHourText; +extern tPushButtonWidget g_sHourUpBtn, g_sHourDwnBtn; +extern tCanvasWidget g_sMinText; +extern tPushButtonWidget g_sMinUpBtn, g_sMinDwnBtn; +extern tCanvasWidget g_sAMPMText; +extern tPushButtonWidget g_sAMPMUpBtn, g_sAMPMDwnBtn; +extern tPushButtonWidget g_sTimeDoneBtn; + +//***************************************************************************** +// +// Forward reference of functions that are called on a button press. +// +//***************************************************************************** +void OnHIBBtnPress(tWidget *psWidget); +void OnDateTimeSetBtnPress(tWidget *psWidget); +void OnMonUpBtnPress(tWidget *psWidget); +void OnMonDwnBtnPress(tWidget *psWidget); +void OnDayUpBtnPress(tWidget *psWidget); +void OnDayDwnBtnPress(tWidget *psWidget); +void OnYearUpBtnPress(tWidget *psWidget); +void OnYearDwnBtnPress(tWidget *psWidget); +void OnDateNextBtnPress(tWidget *psWidget); +void OnHourUpBtnPress(tWidget *psWidget); +void OnHourDwnBtnPress(tWidget *psWidget); +void OnMinUpBtnPress(tWidget *psWidget); +void OnMinDwnBtnPress(tWidget *psWidget); +void OnAMPMBtnPress(tWidget *psWidget); +void OnTimeDoneBtnPress(tWidget *psWidget); + +//***************************************************************************** +// +// The canvas widget acting as the background to the display. +// +//***************************************************************************** +Canvas(g_sMainScreen, WIDGET_ROOT, 0, &g_sIndicator0, + &g_sKentec320x240x16_SSD2119, X_OFFSET, Y_OFFSET, (320 - X_OFFSET*2), + 240-X_OFFSET-Y_OFFSET, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); +//***************************************************************************** +// +// The four indicators on the top of the screen. +// +//***************************************************************************** +Canvas(g_sIndicator0, &g_sMainScreen, &g_sIndicator1, 0, + &g_sKentec320x240x16_SSD2119, 20, 30, 50, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0); +Canvas(g_sIndicator1, &g_sMainScreen, &g_sIndicator2, 0, + &g_sKentec320x240x16_SSD2119, 20 + 75*1, 30, 50, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0); +Canvas(g_sIndicator2, &g_sMainScreen, &g_sIndicator3, 0, + &g_sKentec320x240x16_SSD2119, 20 + 75*2, 30, 50, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0); +Canvas(g_sIndicator3, &g_sMainScreen, 0, &g_sIndicatorMarker, + &g_sKentec320x240x16_SSD2119, 20 + 75*3, 30, 50, 20, + CANVAS_STYLE_IMG, 0, 0, 0, 0, 0, g_pui8LightOff, 0); + +//***************************************************************************** +// +// The canvas widget used to show the text under indicators +// +//***************************************************************************** +Canvas(g_sIndicatorMarker, &g_sIndicator3, 0, &g_sStatusList, + &g_sKentec320x240x16_SSD2119, X_OFFSET, 60, 304, 16, + CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_OPAQUE, 0, 0, ClrWhite, + g_psFontCm16, "PM7 PM6 PM5 PM4", 0, 0); + +//***************************************************************************** +// +// The listbox used to display tamper events. +// +//***************************************************************************** +ListBox(g_sStatusList, &g_sIndicatorMarker, 0, &g_sDateTimeSetBtn, + &g_sKentec320x240x16_SSD2119, + X_OFFSET, 90, (320-(X_OFFSET*2)), 90, + (LISTBOX_STYLE_OUTLINE | LISTBOX_STYLE_LOCKED | + LISTBOX_STYLE_WRAP), ClrBlack, ClrBlack, ClrSilver, ClrSilver, ClrWhite, + g_psFontFixed6x8, g_ppcStatusStrings, NUM_STATUS_STRINGS, + NUM_STATUS_STRINGS, 0); +//***************************************************************************** +// +// The button used to enter hibernation. +// +//***************************************************************************** +RectangularButton(g_sHIBBtn, &g_sStatusList, 0, 0, + &g_sKentec320x240x16_SSD2119, 320-50-X_OFFSET, 190, 50, 40, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrDarkRed, 0, + ClrWhite, g_psFontCm14, "HIB", 0, 0, 0, 0, OnHIBBtnPress); + +//***************************************************************************** +// +// The Canvas used to display the time. +// +//***************************************************************************** +Canvas(g_sRTC, &g_sStatusList, &g_sHIBBtn, 0, &g_sKentec320x240x16_SSD2119, + (X_OFFSET+50), 200, 204, 20, + CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_OPAQUE, 0, 0, ClrSilver, + g_psFontCm16, 0, 0, 0); + +//***************************************************************************** +// +// The button used to set the clock. +// +//***************************************************************************** +RectangularButton(g_sDateTimeSetBtn, &g_sStatusList, &g_sRTC, 0, + &g_sKentec320x240x16_SSD2119, X_OFFSET, 190, 50, 40, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm14, "CLOCK", 0, 0, 0, 0, + OnDateTimeSetBtnPress); + +//***************************************************************************** +// +// The graphics library structures for the Date screen. +// +//***************************************************************************** +RectangularButton(g_sDateNextBtn, &g_sDateScreen, 0, 0, + &g_sKentec320x240x16_SSD2119, 240, 190, 60, 30, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm16, "NEXT", 0, 0, 0, 0, OnDateNextBtnPress); +CircularButton(g_sYearDwnBtn, &g_sDateScreen, &g_sDateNextBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 10, OnYearDwnBtnPress); +CircularButton(g_sYearUpBtn, &g_sDateScreen, &g_sYearDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 10, OnYearUpBtnPress); +Canvas(g_sYearText, &g_sDateScreen, &g_sYearUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 230, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcYearBuf, 0, 0); +CircularButton(g_sDayDwnBtn, &g_sDateScreen, &g_sYearText, 0, + &g_sKentec320x240x16_SSD2119, 160, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 10, OnDayDwnBtnPress); +CircularButton(g_sDayUpBtn, &g_sDateScreen, &g_sDayDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 160, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 10, OnDayUpBtnPress); +Canvas(g_sDayText, &g_sDateScreen, &g_sDayUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 130, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcDayBuf, 0, 0); +CircularButton(g_sMonDwnBtn, &g_sDateScreen, &g_sDayText, 0, + &g_sKentec320x240x16_SSD2119, 60, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 20, OnMonDwnBtnPress); +CircularButton(g_sMonUpBtn, &g_sDateScreen, &g_sMonDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 60, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 20, OnMonUpBtnPress); +Canvas(g_sMonText, &g_sDateScreen, &g_sMonUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 30, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcMonBuf, 0, 0); +Canvas(g_sDateScreen, WIDGET_ROOT, 0, &g_sMonText, + &g_sKentec320x240x16_SSD2119, X_OFFSET, Y_OFFSET, (320 - X_OFFSET*2), + (240-X_OFFSET-Y_OFFSET), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The graphics library structures for the Time screen. +// +//***************************************************************************** +RectangularButton(g_sTimeDoneBtn, &g_sTimeScreen, 0, 0, + &g_sKentec320x240x16_SSD2119, 240, 190, 60, 30, + (PB_STYLE_TEXT | PB_STYLE_FILL | PB_STYLE_OUTLINE | + PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, ClrWhite, + g_psFontCm16, "DONE", 0, 0, 0, 0, OnTimeDoneBtnPress); +CircularButton(g_sAMPMDwnBtn, &g_sTimeScreen, &g_sTimeDoneBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, + ClrWhite, g_psFontCm20, "+", 0, 0, 0, 0, OnAMPMBtnPress); +CircularButton(g_sAMPMUpBtn, &g_sTimeScreen, &g_sAMPMDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 260, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE), ClrDarkBlue, ClrBlue, 0, + ClrWhite, g_psFontCm20, "-", 0, 0, 0, 0, OnAMPMBtnPress); +Canvas(g_sAMPMText, &g_sTimeScreen, &g_sAMPMUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 230, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcAMPMBuf, 0, 0); +CircularButton(g_sMinDwnBtn, &g_sTimeScreen, &g_sAMPMText, 0, + &g_sKentec320x240x16_SSD2119, 160, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 10, OnMinDwnBtnPress); +CircularButton(g_sMinUpBtn, &g_sTimeScreen, &g_sMinDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 160, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 10, OnMinUpBtnPress); +Canvas(g_sMinText, &g_sTimeScreen, &g_sMinUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 130, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcMinBuf, 0, 0); +CircularButton(g_sHourDwnBtn, &g_sTimeScreen, &g_sMinText, 0, + &g_sKentec320x240x16_SSD2119, 60, 90, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "+", 0, 0, 100, + 20, OnHourDwnBtnPress); +CircularButton(g_sHourUpBtn, &g_sTimeScreen, &g_sHourDwnBtn, 0, + &g_sKentec320x240x16_SSD2119, 60, 153, 15, (PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_TEXT_OPAQUE | PB_STYLE_AUTO_REPEAT), + ClrDarkBlue, ClrBlue, 0, ClrWhite, g_psFontCm20, "-", 0, 0, 100, + 20, OnHourUpBtnPress); +Canvas(g_sHourText, &g_sTimeScreen, &g_sHourUpBtn, 0, + &g_sKentec320x240x16_SSD2119, 30, 110, 60, 25, (CANVAS_STYLE_OUTLINE | + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT), ClrBlack, ClrWhite, ClrWhite, + g_psFontCm16, g_pcHourBuf, 0, 0); +Canvas(g_sTimeScreen, WIDGET_ROOT, 0, &g_sHourText, + &g_sKentec320x240x16_SSD2119, 9, 25, (310 - 9), (230 - 25), + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Handle the "Date/Time" button press on Main Screen. +// +//***************************************************************************** +void +OnHIBBtnPress(tWidget *psWidget) +{ + // + // The button has been touched. So indicate that the + // user wants the device to enter hibernation. + // + g_bHibernate = true; +} + +//***************************************************************************** +// +// This function is used to add a new string to the status list box in the +// middle of the display. This shows tamper events and system status. +// +//***************************************************************************** +static int +PrintfStatus(char *pcFormat, ...) +{ + int32_t i32Ret; + va_list vaArgP; + + // + // Start the varargs processing. + // + va_start(vaArgP, pcFormat); + + // + // Call vsnprintf to perform the conversion. + // + i32Ret = uvsnprintf(g_pcStatus[g_ui32StatusStringIndex], + MAX_STATUS_STRING_LEN, pcFormat, vaArgP); + + // + // End the varargs processing. + // + va_end(vaArgP); + + // + // Add the new string to the status listbox. + // + ListBoxTextAdd(&g_sStatusList, g_pcStatus[g_ui32StatusStringIndex]); + + // + // Update our string index. + // + g_ui32StatusStringIndex++; + if(g_ui32StatusStringIndex == NUM_STATUS_STRINGS) + { + g_ui32StatusStringIndex = 0; + } + + // + // Repaint the status listbox. + // + WidgetPaint((tWidget *)&g_sStatusList); + + // + // Return the conversion count. + // + return(i32Ret); + +} + +//***************************************************************************** +// +// Handles an NMI interrupt generated by a Tamper event. +// +//***************************************************************************** +void +NMITamperEventHandler(void) +{ + uint32_t ui32NMIStatus, ui32TamperStatus; + uint32_t pui32Buf[3]; + uint8_t ui8Idx, ui8StartIdx; + bool bDetectedEventsDuringClear; + + // + // Get the cause of the NMI event. + // + ui32NMIStatus = SysCtlNMIStatus(); + + // + // Get the tamper event. + // + ui32TamperStatus = HibernateTamperStatusGet(); + + if(CLASS_IS_TM4C129 && REVISION_IS_A0) + { + // + // We should have got the cause of the NMI event in ui32NMIStatus. + // But in Snowflake RA0 the NMIC register is not set correctly when an + // event occurs. So as a work around check if the NMI event is caused by a + // tamper event and append this to the return value from SysCtlNMIStatus(). + // This way only this section can be removed once the bug is fixed in next + // silicon rev. + // + if(ui32TamperStatus & (HIBERNATE_TAMPER_STATUS_EVENT | + HIBERNATE_TAMPER_STATUS_EXT_OSC_FAILED)) + { + ui32NMIStatus |= SYSCTL_NMI_TAMPER; + } + } + + // + // Clear NMI events if SysCtlNMIStatus() returned a value. + // + if(ui32NMIStatus) + { + SysCtlNMIClear(ui32NMIStatus); + } + + // + // Check if NMI interrupt is due to a tamper event. + // + if((ui32NMIStatus & SYSCTL_NMI_TAMPER) == 0) + { + + // + // Not due to tamper event. + // Should not get here. + // + return; + } + + // + // Now handle NMI Interrupt due to a tamper event. + // + + // + // If the previous NMI event has not been processed by main + // thread, we need to OR the new event along with the old ones. + // Otherwise, clear the variables here. + // + if(g_ui32NMIEvent == 0) + { + // + // Reset variables that used for tamper event. + // + g_ui32TamperEventFlag = 0; + g_ui32TamperRTCLog = 0; + + // + // Clean the log data for debugging purpose. + // + memset(g_ui32RTCLog, 0, sizeof(g_ui32RTCLog)); + memset(g_ui32EventLog, 0, sizeof(g_ui32EventLog)); + } + + + // + // Log the tamper event data before clearing tamper events. + // + for(ui8Idx = 0; ui8Idx< 4; ui8Idx++) + { + if(HibernateTamperEventsGet(ui8Idx, + &g_ui32RTCLog[ui8Idx], + &g_ui32EventLog[ui8Idx])) + { + // + // If the timestamp entry has zero, ignore the tamper + // log entry, otherwise, save the event. + // + if(g_ui32RTCLog[ui8Idx]) + { + // + // Event in this log entry, store it. + // + g_ui32TamperEventFlag |= g_ui32EventLog[ui8Idx]; + g_ui32TamperRTCLog = g_ui32RTCLog[ui8Idx]; + } + else + { + // + // Not valid event in this log entry. Done checking the logs. + // + break; + } + } + else + { + // + // No event in this log entry. Done checking the logs. + // + break; + } + } + + // + // Process external oscillator failed event. + // + if(ui32TamperStatus & HIBERNATE_TAMPER_STATUS_EXT_OSC_FAILED) + { + g_ui32TamperXOSCFailEvent++; + + if(CLASS_IS_TM4C129 && REVISION_IS_A0) + { + // + // Snowflake A0 bug: XOSCFAIL doesn't get logged + // + g_ui32TamperEventFlag |= HIBERNATE_TAMPER_EVENT_EXT_OSC; + g_ui32TamperRTCLog = HWREG(HIB_TPLOG0); + } + } + + // + // Clear tamper event. + // + // + // The following block of code is to workaround hardware defect + // which results in missing new tamper events during tamper clear + // synchronization. + // + // There is a window after the application code writes the tamper + // clear where a new tamper event can be missed if the application + // requires more than one tamper event pins detection. + // + // The tamper Clear is synchronized to the hibernate 32kHz clock + // domain. The clear takes 3 rising edges of the 32KHz clock. + // During this window, new tamper events could be missed. + // A software workaround is to poll the tamper log during the + // tamper event clear synchronization. + // + + + // + // Record the index for the first empty log entry, this is the first + // entry log we will be polling from for any new events. + // + if(ui8Idx >= 4) + { + // + // All 4 log entries have data, new event will be ORed in the last + // entry. + // + ui8StartIdx = 3; + } + else + { + ui8StartIdx = ui8Idx; + } + + // + // Clear the flag for the case there are events triggered + // during clear execution. + // + bDetectedEventsDuringClear = false; + + // + // Unlock the Tamper Control register. This is required before + // calling HibernateTamperEventsClearNoLock(). + // + HibernateTamperUnLock(); + do + { + + // + // Clear the Tamper event. + // Note this API doesn't wait for synchronization, which + // allows us to check the tamper log during synchronization. + // + HibernateTamperEventsClearNoLock(); + + // + // Check new tamper event during tamper event clear + // synchronization, start polling until clear is done. + // This will take about 92us(three clock cycles) at most. + // + while(HibernateTamperStatusGet() & HIBERNATE_TAMPER_STATUS_EVENT) + { + + // + // Clear execution isn't done yet , poll for new events. + // If there were any new event, it will be logged starting + // the first empty log entry. + // + for(ui8Idx = ui8StartIdx; ui8Idx< 4; ui8Idx++) + { + if(HibernateTamperEventsGet(ui8Idx, + &g_ui32RTCLog[ui8Idx], + &g_ui32EventLog[ui8Idx])) + { + // + // If the timestamp log has zero, ignore the tamper + // log entry. + // + if(g_ui32RTCLog[ui8Idx]) + { + // + // detected new event, store it. + // + g_ui32TamperEventFlag |= g_ui32EventLog[ui8Idx]; + } + else + { + // + // Not valid event in this log, update the log + // entry index to be checked in next iteration. + // Break out of loop. + // + ui8StartIdx = ui8Idx; + break; + } + + // + // check for more event. + // + continue; + } + else + { + // + // No new event in this log, update the log + // entry index to be checked in next iteration. + // Break out of loop. + // + ui8StartIdx = ui8Idx; + break; + } + } + + // + // all last three logs have info. Check if all 4 logs + // have the same info. This is to detect the case that + // events happen during clear execution. + // + if(ui8Idx == 4) + { + // + // If events happens during clear + // execution, all four log registers will be + // logged with the same event, to detect this + // condition, we will compare with all four log data. + // + if(HibernateTamperEventsGet(0, &g_ui32RTCLog[0], &g_ui32EventLog[0])) + { + if((g_ui32RTCLog[0] == g_ui32RTCLog[1]) && + (g_ui32EventLog[0] == g_ui32EventLog[1]) && + (g_ui32RTCLog[0] == g_ui32RTCLog[2]) && + (g_ui32EventLog[0] == g_ui32EventLog[2]) && + (g_ui32RTCLog[0] == g_ui32RTCLog[3]) && + (g_ui32EventLog[0] == g_ui32EventLog[3])) + { + // + // Detected events during clear execution. + // Event logging takes priority, the clear + // will not be done in this case. We will need + // to go back to the beginning of the loop and + // clear the events. + // + if(bDetectedEventsDuringClear) + { + // + // This condition has already detected, + // we have cleared the event, + // clear the flag. + // + bDetectedEventsDuringClear = false; + } + else + { + // This is the first time it has been + // detected, set the flag. + // + bDetectedEventsDuringClear = true; + } + + // + // Break out of while loop so that we can + // clear the events, and start the + // workaround all over again. + // + break; + } + } + else + { + // + // Log 0 didn't detect any events. So this is not + // the case of missing events during clear + // execution. + // Update the log index at which we will poll next. + // It should be the last log entry that OR all the + // new events. + // + ui8StartIdx = 3; + } + } + } + } + while(bDetectedEventsDuringClear); + + // + // Lock the Tamper Control register. + // + HibernateTamperLock(); + + // + // Save the tamper event and RTC log info in the Hibernate Memory + // + HibernateDataGet(pui32Buf, 3); + pui32Buf[1] = g_ui32TamperEventFlag; + pui32Buf[2] = g_ui32TamperRTCLog; + HibernateDataSet(pui32Buf, 3); + + // + // Signal the main loop that an NMI event occurred. + // + g_ui32NMIEvent++; + +} + +//***************************************************************************** +// +// The interrupt handler for the Hibernate interrupt. It clears any pending +// interrupts and set the flag used by the application to update calendar time +// on the display. +// +//***************************************************************************** +void +HibernateIntHandler(void) +{ + uint32_t ui32Status; + + // + // Get the interrupt status, and clear any pending interrupts. + // + ui32Status = ROM_HibernateIntStatus(1); + ROM_HibernateIntClear(ui32Status); + + // + // Process the RTC match 0 interrupt + // + if(ui32Status & HIBERNATE_INT_RTC_MATCH_0) + { + g_bUpdateRTC = 1; + } +} + +//***************************************************************************** +// +// Returns whether the system has come out of Hibernation due to a tamper +// event or reset event. +// +//***************************************************************************** +void +HibernateTamperWakeUp(bool *pbWakeupFromTamper, bool *pbWakeupFromReset) +{ + uint32_t ui32TempBuf[3]; + + // + // Clear both flags. + // + *pbWakeupFromReset = false; + *pbWakeupFromTamper = false; + + // + // Read the status bits to see what caused the wake. Clear the wake + // source so that the device can be put into hibernation again. + // + ui32TempBuf[0] = HibernateIntStatus(0); + HibernateIntClear(ui32TempBuf[0]); + + // + // Check the wake was due to reset. + // + if(ui32TempBuf[0] & HIBERNATE_INT_RESET_WAKE) + { + *pbWakeupFromReset = true; + return; + } + + // + // The wake was not due to reset. + // Check if it is due to tamper event. + // + // Read the Hibernate module memory registers that show the state of the + // system. + // + HibernateDataGet(ui32TempBuf, 3); + + // + // Determine if system came out of hibernation due to a tamper event. + // + if(ui32TempBuf[0] == HIBERNATE_TAMPER_DATA0) + { + // + // It is due to a tamper event. + // Read the saved tamper event and RTC log info from the hibernate + // memory, so the main routine can print the info on the display. + // + g_ui32TamperEventFlag = ui32TempBuf[1]; + g_ui32TamperRTCLog = ui32TempBuf[2]; + g_ui32NMIEvent++; + *pbWakeupFromTamper = true; + return; + } + + return; +} + +//***************************************************************************** +// +// This function convert the hour in 24 hour format to 12 hour format +// +//***************************************************************************** +void +ConvertHourTo12Mode(uint8_t *pui8Hour, bool *pbPM) +{ + if(*pui8Hour == 0) + { + *pbPM = false; + *pui8Hour += 12; + } + else if(*pui8Hour == 12) + { + *pbPM = true; + } + else if(*pui8Hour > 12) + { + *pui8Hour -= 12; + *pbPM = true; + } + else + { + *pbPM = false; + } +} + +//***************************************************************************** +// +// This function returns the number of days in a month including for a leap +// year. +// +//***************************************************************************** +uint32_t +GetDaysInMonth(uint32_t ui32Year, uint32_t ui32Mon) +{ + // + // Return the number of days based on the month. + // + if(ui32Mon == 1) + { + // + // For February return the number of days based on the year being a + // leap year or not. + // + if((ui32Year % 4) == 0) + { + // + // If leap year return 29. + // + return 29; + } + else + { + // + // If not leap year return 28. + // + return 28; + } + } + else if((ui32Mon == 3) || (ui32Mon == 5) || (ui32Mon == 8) || + (ui32Mon == 10)) + { + // + // For April, June, September and November return 30. + // + return 30; + } + + // + // For all the other months return 31. + // + return 31; +} + +//***************************************************************************** +// +// This function updates individual buffers with valid date and time to be +// displayed on the date screen so that the date and time can be updated. +// +//***************************************************************************** +bool +DateTimeUpdateGet(char *pcMon, char *pcDay, char *pcYear, char *pcHour, + char *pcMin, char *pcAMPM) +{ + struct tm sTime; + bool bPM; + + + // + // Get the latest time. + // + HibernateCalendarGet(&sTime); + + // + // Set AM as default. + // + bPM = false; + + // + // Convert 24-hour format into 12-hour format with AM/PM indication. + // + ConvertHourTo12Mode((uint8_t*)&sTime.tm_hour, &bPM); + strcpy(pcAMPM, bPM?"PM":"AM"); + + // + // If date and time is valid, copy the date and time values into respective + // indexes. + // + g_ui32MonthIdx = sTime.tm_mon; + g_ui32DayIdx = sTime.tm_mday; + g_ui32YearIdx = sTime.tm_year - 100; + g_ui32HourIdx = sTime.tm_hour; + g_ui32MinIdx = sTime.tm_min; + + // + // Convert the date and time into string format and copy into supplied + // buffers. + // + usnprintf(pcMon, 4, "%s", g_ppcMonth[g_ui32MonthIdx]); + usnprintf(pcDay, 3, "%u", g_ui32DayIdx); + usnprintf(pcYear, 5, "20%02u", g_ui32YearIdx); + usnprintf(pcHour, 3, "%u", g_ui32HourIdx); + usnprintf(pcMin, 3, "%02u", g_ui32MinIdx); + + // + // Return true to indicate new information has been updated. + // + return true; +} + +//***************************************************************************** +// +// This function writes the requested date and time to the calendar logic of +// hibernation module. +// +//***************************************************************************** +void +DateTimeSet(void) +{ + struct tm sTime; + + // + // Get the latest date and time. This is done here so that unchanged + // parts of date and time can be written back as is. + // + HibernateCalendarGet(&sTime); + + // + // Set the date and time values that are to be updated. + // + sTime.tm_hour = g_ui32HourIdx; + sTime.tm_min = g_ui32MinIdx; + sTime.tm_mon = g_ui32MonthIdx; + sTime.tm_mday = g_ui32DayIdx; + sTime.tm_year = 100 + g_ui32YearIdx; + + // + // Convert 12-hour format into 24-hour format. + // + if(strcmp(g_pcAMPMBuf, "PM") == 0) + { + if(sTime.tm_hour < 12) + { + sTime.tm_hour += 12; + } + } + else + { + if(sTime.tm_hour > 11) + { + sTime.tm_hour -= 12; + } + } + + // + // Update the calendar logic of hibernation module with the requested data. + // + HibernateCalendarSet(&sTime); +} + +//***************************************************************************** +// +// Handle the "Date/Time" button press on Main Screen. +// +//***************************************************************************** +void +OnDateTimeSetBtnPress(tWidget *psWidget) +{ + // + // Update the date and time screen buffers before painting the screens. + // Even though only buffers used with the date screen are needed at this + // time, we update both to save few cycles. + // + DateTimeUpdateGet(g_pcMonBuf, g_pcDayBuf, g_pcYearBuf, g_pcHourBuf, + g_pcMinBuf, g_pcAMPMBuf); + + // + // Remove the main screen from the root. + // + WidgetRemove((tWidget *)&g_sMainScreen); + + // + // Add the date screen to the root. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sDateScreen); + + // + // Add the widget tree to message queue so that it can be drawn on the + // display. + // + WidgetPaint(WIDGET_ROOT); + + // + // Set the flag to indicate that the main screen is not active. + // + g_bMainScreen = false; +} + +//***************************************************************************** +// +// Handle the Month "-" button press on Date Screen. +// +//***************************************************************************** +void +OnMonUpBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to decrement the month. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. + // + g_ui32MonthIdx = (g_ui32MonthIdx == 0) ? 11 : g_ui32MonthIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + strcpy(g_pcMonBuf, g_ppcMonth[g_ui32MonthIdx]); + WidgetPaint(&g_sMonText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Month "+" button press on Date Screen. +// +//***************************************************************************** +void +OnMonDwnBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to increment the month. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32MonthIdx = (g_ui32MonthIdx == 11) ? 0 : g_ui32MonthIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + strcpy(g_pcMonBuf, g_ppcMonth[g_ui32MonthIdx]); + WidgetPaint(&g_sMonText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Day "-" button press on Date Screen. +// +//***************************************************************************** +void +OnDayUpBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to decrement the day. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. Make + // sure that the day index is adjusted based on the number of days in a + // month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx < 2) ? ui32DaysInMonth : g_ui32DayIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Day "+" button press on Date Screen. +// +//***************************************************************************** +void +OnDayDwnBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to increment the day. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // Make sure that the day index does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > (ui32DaysInMonth - 1)) ? 1 : + (g_ui32DayIdx + 1); + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Year "-" button press on Date Screen. +// +//***************************************************************************** +void +OnYearUpBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to decrement the year. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. + // + g_ui32YearIdx = (g_ui32YearIdx == 0) ? 99 : g_ui32YearIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcYearBuf, sizeof(g_pcYearBuf), "20%02u", g_ui32YearIdx); + WidgetPaint(&g_sYearText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the Year "+" button press on Date Screen. +// +//***************************************************************************** +void +OnYearDwnBtnPress(tWidget *psWidget) +{ + uint32_t ui32DaysInMonth; + + // + // User wants to increment the year. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32YearIdx = (g_ui32YearIdx == 99) ? 0 : g_ui32YearIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcYearBuf, sizeof(g_pcYearBuf), "20%02u", g_ui32YearIdx); + WidgetPaint(&g_sYearText.sBase); + + // + // Makes sure that the day value does not exceed the number of days for the + // selected month. + // + ui32DaysInMonth = GetDaysInMonth(g_ui32YearIdx, g_ui32MonthIdx); + g_ui32DayIdx = (g_ui32DayIdx > ui32DaysInMonth) ? ui32DaysInMonth : + g_ui32DayIdx; + + // + // Since the day value might also have been modified, store the day index + // in a buffer as a string and add the widget to the message queue so that + // it can be redrawn. + // + usnprintf(g_pcDayBuf, sizeof(g_pcDayBuf), "%02u", g_ui32DayIdx); + WidgetPaint(&g_sDayText.sBase); +} + +//***************************************************************************** +// +// Handle the "NEXT" button press on Date Screen. +// +//***************************************************************************** +void +OnDateNextBtnPress(tWidget *psWidget) +{ + // + // Remove the main screen from the root. + // + WidgetRemove((tWidget *)&g_sDateScreen); + + // + // Add the date screen to the root. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sTimeScreen); + + // + // Add the widget tree to message queue so that it can be drawn on the + // display. + // + WidgetPaint(WIDGET_ROOT); +} + +//***************************************************************************** +// +// Handle the Hour "-" button press on Time Screen. +// +//***************************************************************************** +void +OnHourUpBtnPress(tWidget *psWidget) +{ + // + // User wants to decrement the hour. So reduce index by one such that the + // index cycles back to the bottom of the list if it is at the top. + // + g_ui32HourIdx = (g_ui32HourIdx == 1) ? 12 : g_ui32HourIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcHourBuf, sizeof(g_pcHourBuf), "%u", g_ui32HourIdx); + WidgetPaint(&g_sHourText.sBase); +} + +//***************************************************************************** +// +// Handle the Hour "+" button press on Time Screen. +// +//***************************************************************************** +void +OnHourDwnBtnPress(tWidget *psWidget) +{ + // + // User wants to increment the hour. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32HourIdx = (g_ui32HourIdx == 12) ? 1 : g_ui32HourIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcHourBuf, sizeof(g_pcHourBuf), "%u", g_ui32HourIdx); + WidgetPaint(&g_sHourText.sBase); +} + +//***************************************************************************** +// +// Handle the Minute "-" button press on Time Screen. +// +//***************************************************************************** +void +OnMinUpBtnPress(tWidget *psWidget) +{ + // + // User wants to decrement the minute. So reduce index by one such that + // the index cycles back to the bottom of the list if it is at the top. + // + g_ui32MinIdx = (g_ui32MinIdx == 0) ? 59 : g_ui32MinIdx - 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcMinBuf, sizeof(g_pcMinBuf), "%02u", g_ui32MinIdx); + WidgetPaint(&g_sMinText.sBase); +} + +//***************************************************************************** +// +// Handle the Minute "+" button press on Time Screen. +// +//***************************************************************************** +void +OnMinDwnBtnPress(tWidget *psWidget) +{ + // + // User wants to increment the minute. So increment index by one such that + // the index cycles back to the top of the list if it is at the bottom. + // + g_ui32MinIdx = (g_ui32MinIdx == 59) ? 0 : g_ui32MinIdx + 1; + + // + // Store the index in a buffer as a string and add the widget to the + // message queue so that it can be redrawn. + // + usnprintf(g_pcMinBuf, sizeof(g_pcMinBuf), "%02u", g_ui32MinIdx); + WidgetPaint(&g_sMinText.sBase); +} + +//***************************************************************************** +// +// Handle the AM/PM "+" and "-" button press on Time Screen. The same function +// handles both the button presses. +// +//***************************************************************************** +void +OnAMPMBtnPress(tWidget *psWidget) +{ + // + // User wants to change AM to PM or vice versa. Change to "PM" if "AM" and + // vice versa. + // + if(strcmp(g_pcAMPMBuf, "AM") == 0) + { + strcpy(g_pcAMPMBuf, "PM"); + } + else + { + strcpy(g_pcAMPMBuf, "AM"); + } + + // + // Add the widget to the message queue so that it can be redrawn. + // + WidgetPaint(&g_sAMPMText.sBase); +} + +//***************************************************************************** +// +// Handle the "DONE" button press on Time Screen. +// +//***************************************************************************** +void +OnTimeDoneBtnPress(tWidget *psWidget) +{ + // + // Remove the time screen from the root. + // + WidgetRemove((tWidget *)&g_sTimeScreen); + + // + // Add the main screen to the root. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sMainScreen); + + // + // Add the widget tree to message queue so that it can be drawn on the + // display. + // + WidgetPaint(WIDGET_ROOT); + + // + // Set the flag to indicate that date and time have to updated. + // + g_bSetDate = true; +} + +//***************************************************************************** +// +// This example demonstrates the use of the Tamper module. +// +//***************************************************************************** +int +main(void) +{ + tContext sContext; + uint32_t ui32SysClock; + uint32_t ui32Index; + uint32_t ui32TempBuf[3]; + struct tm sTime; + bool bWakeFromTamper; + bool bWakeFromReset; + char pcBuf[64]; + char pcRTCBuf[32]; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "tamper"); + + // + // Initialize the touch screen driver and have it route its messages to the + // widget tree. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Check to see if the processor is waking from a hibernation. + // + HibernateTamperWakeUp(&bWakeFromTamper, &bWakeFromReset); + + if(!bWakeFromTamper && !bWakeFromReset) + { + // + // If the system didn't wake from hibernation, + // Initialize the Hibernate module and enable the RTC/calendar mode. + // + HibernateEnableExpClk(0); + HibernateRTCEnable(); + HibernateCounterMode(HIBERNATE_COUNTER_24HR); + + // + // Fill the first three words in the Hibernate module memory with + // the required values. + // + ui32TempBuf[0] = HIBERNATE_TAMPER_DATA0; + ui32TempBuf[1] = 0; + ui32TempBuf[2] = 0; + HibernateDataSet(ui32TempBuf, 3); + + // + // Configure Hibernate wake sources. + // + HibernateWakeSet(HIBERNATE_WAKE_RESET); + + // + // Start Calendar time from 2013/8/1 00:00:00 + // + sTime.tm_hour = 0; + sTime.tm_min = 0; + sTime.tm_sec = 0; + sTime.tm_wday = 4; + sTime.tm_mon = 7; // [0, 11] + sTime.tm_mday = 1; // [1, 31] + sTime.tm_year = 113; // since 1900 + HibernateCalendarSet(&sTime); + + // + // Set Calendar match to every second + // + memset((void*)&sTime, 0, sizeof(struct tm)); + sTime.tm_sec = 0xFF; + sTime.tm_min = 0xFF; + sTime.tm_hour = 0xFF; + sTime.tm_mday = 0xFF; + HibernateCalendarMatchSet(0, &sTime); + + // + // Enable Calendar Match interrupt + // + ROM_HibernateIntClear(HIBERNATE_INT_RTC_MATCH_0); + ROM_HibernateIntEnable(HIBERNATE_INT_RTC_MATCH_0); + + + // + // Configure the TPIO0~3 signals by enabling trigger on low, + // weak pull-up and glitch filtering. + // + for(ui32Index = 0; ui32Index < 4; ui32Index++) + { + HibernateTamperIOEnable(ui32Index, + HIBERNATE_TAMPER_IO_TRIGGER_LOW | + HIBERNATE_TAMPER_IO_WPU_ENABLED | + HIBERNATE_TAMPER_IO_MATCH_SHORT); + } + + // + // Configure Hibernate module to wake up from tamper event. + // + HibernateTamperEventsConfig(HIBERNATE_TAMPER_EVENTS_HIB_WAKE); + + // + // Enable Tamper Module. + // + HibernateTamperEnable(); + } + else + { + if(bWakeFromTamper && + (g_ui32TamperEventFlag & HIBERNATE_TAMPER_EVENT_EXT_OSC)) + { + // + // XOSCFAIL was used to trigger a tamper event, set the flag + // g_ui32TamperXOSCFailEvent so that it will clear external + // oscillator failure after the external oscillator becomes + // active. + // + g_ui32TamperXOSCFailEvent = 1; + } + } + + // + // Clear Tamper event flag. + // + g_ui32NMIEvent = 0; + + + // + // Enable interrupts. + // + IntEnable(INT_HIBERNATE); + IntMasterEnable(); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sMainScreen); + + // + // Print instruction + // + if(!bWakeFromTamper && !bWakeFromReset) + { + PrintfStatus("Tamper Example app instruction:"); + PrintfStatus("-Ground PM4~7 to GND to trigger tamper events."); + PrintfStatus(" Corresponding indicator above should lightup") ; + PrintfStatus(" upon detection, the event along with the time"); + PrintfStatus(" stamp should be logged on the display."); + PrintfStatus("-Tap HIB button on the display to hibernate, and"); + PrintfStatus(" press RESET button or ground PM4~7 to wake up"); + PrintfStatus(" from hibernation."); + } + else + { + PrintfStatus("Wake from %s...", + bWakeFromReset? "RESET":"tamper event"); + } + + // + // Issue the initial paint request to the widgets. + // + WidgetPaint(WIDGET_ROOT); + + g_bMainScreen = true; + g_bHibernate = false; + g_bSetDate = false; + + while(1) + { + + if( g_bMainScreen && g_bUpdateRTC ) + { + bool bPM = false; + uint8_t ui8Hour; + + g_bUpdateRTC = 0; + HibernateCalendarGet(&sTime); + ui8Hour = sTime.tm_hour; + // + // covert the hour to 12 hour format + // + ConvertHourTo12Mode(&ui8Hour, &bPM); + usprintf(pcRTCBuf, " %02d/%02d/%04d %02d:%02d:%02d %s", + (sTime.tm_mon+1), sTime.tm_mday, (sTime.tm_year+1900), + ui8Hour, sTime.tm_min, sTime.tm_sec, (bPM?"PM":"AM") ); + CanvasTextSet(&g_sRTC, pcRTCBuf); + WidgetPaint((tWidget *)&g_sRTC.sBase); + } + + // + // Check if date and time has to be written to the calendar logic of + // hibernate module. + // + if(g_bSetDate == true) + { + // + // Yes - Clear the flag to avoid unwanted writes to the calendar + // logic. + // + g_bSetDate = false; + + // + // Write the requested date and time. + // + DateTimeSet(); + + // + // Set the flag to indicate that the main screen is active. + // + g_bMainScreen = true; + } + + if(g_ui32NMIEvent && g_bMainScreen) + { + uint8_t ui8Pos= 0; + uint8_t ui8Hour; + bool bPM; + + // + // Save the temper event first, so that they don't get overwriten + // from IRQ while we reference them. + // + ui32TempBuf[0] = g_ui32TamperEventFlag; + ui32TempBuf[1] = g_ui32TamperRTCLog; + + // + // Clear NMI event counter + // + g_ui32NMIEvent = 0; + + // + // Update GPIO indicator lights and status list box + // + if(ui32TempBuf[0] & HIBERNATE_TAMPER_EVENT_0) + { + CanvasImageSet(&g_sIndicator0,g_pui8LightOn); + strcpy(pcBuf, "PM7/TMPR0 "); + ui8Pos = 10; + } + else + { + CanvasImageSet(&g_sIndicator0, g_pui8LightOff); + } + + if(ui32TempBuf[0] & HIBERNATE_TAMPER_EVENT_1) + { + CanvasImageSet(&g_sIndicator1, g_pui8LightOn); + strcpy(pcBuf + ui8Pos, "PM6/TMPR1 "); + ui8Pos += 10; + } + else + { + CanvasImageSet(&g_sIndicator1, g_pui8LightOff); + } + + if(ui32TempBuf[0] & HIBERNATE_TAMPER_EVENT_2) + { + CanvasImageSet(&g_sIndicator2,g_pui8LightOn); + strcpy(pcBuf + ui8Pos, "PM5/TMPR2 "); + ui8Pos += 10; + } + else + { + CanvasImageSet(&g_sIndicator2, g_pui8LightOff); + } + + if(ui32TempBuf[0] & HIBERNATE_TAMPER_EVENT_3) + { + CanvasImageSet(&g_sIndicator3,g_pui8LightOn); + strcpy(pcBuf + ui8Pos, "PM4/TMPR3 "); + ui8Pos += 10; + } + else + { + CanvasImageSet(&g_sIndicator3,g_pui8LightOff); + } + + if(ui32TempBuf[0] & HIBERNATE_TAMPER_EVENT_EXT_OSC) + { + strcpy(pcBuf + ui8Pos, "XOSCFAIL "); + } + + WidgetPaint((tWidget *)&g_sMainScreen); + + // + // covert the hour to 12 hour format + // + ui8Hour = (ui32TempBuf[1]&0x0001F000)>>12; + ConvertHourTo12Mode(&ui8Hour, &bPM); + PrintfStatus("%s triggered on", pcBuf); + PrintfStatus(" %02d/%02d/%04d %02d:%02d:%02d %s", + (ui32TempBuf[1]&0x03C00000)>>22, + (ui32TempBuf[1]&0x003E0000)>>17, + (((ui32TempBuf[1]&0xFC000000)>>26) + 2000), + ui8Hour, + (ui32TempBuf[1]&0x00000FC0)>>6, + (ui32TempBuf[1]&0x0000003F), + (bPM?"PM":"AM")); + + } + + // + // Wait for the user to touch the display panel. + // + if(g_bHibernate == true) + { + // + // Clear the flag. + // + g_bHibernate = false; + + // + // Read and clear any status bits that might have been set since + // last clearing them. + // + ui32Index = HibernateIntStatus(0); + HibernateIntClear(ui32Index); + + PrintfStatus("Hibernating..."); + + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + + // + // Request Hibernation. + // + HibernateRequest(); + + // + // Wait for a while for hibernate to activate. It should never + // get past this point. + // + SysCtlDelay(100); + } + + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + + // + // If we have external oscillator failure, wait till the external + // oscillator becomes active, then clear external oscillator failure. + // + if(g_ui32TamperXOSCFailEvent) + { + while(HibernateTamperExtOscValid() == 0); + HibernateTamperExtOscRecover(); + g_ui32TamperXOSCFailEvent = 0; + } + } + +} diff --git a/boards/dk-tm4c129x/tamper/tamper.ewd b/boards/dk-tm4c129x/tamper/tamper.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/tamper/tamper.ewp b/boards/dk-tm4c129x/tamper/tamper.ewp new file mode 100644 index 0000000..afb914e --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.ewp @@ -0,0 +1,804 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\tamper.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/tamper/tamper.icf b/boards/dk-tm4c129x/tamper/tamper.icf new file mode 100644 index 0000000..cf5c508 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// tamper.icf - Linker configuration file for tamper. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/tamper/tamper.ld b/boards/dk-tm4c129x/tamper/tamper.ld new file mode 100644 index 0000000..2b243b5 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * tamper.ld - Linker configuration file for tamper. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/tamper/tamper.sct b/boards/dk-tm4c129x/tamper/tamper.sct new file mode 100644 index 0000000..05d4ea4 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; tamper.sct - Linker configuration file for tamper. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/tamper/tamper.uvopt b/boards/dk-tm4c129x/tamper/tamper.uvopt new file mode 100644 index 0000000..9cdc669 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.uvopt @@ -0,0 +1,373 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + tamper + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\tamper.c + tamper.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 10 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/tamper/tamper.uvproj b/boards/dk-tm4c129x/tamper/tamper.uvproj new file mode 100644 index 0000000..6323755 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper.uvproj @@ -0,0 +1,454 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + tamper + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + tamper + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\tamper.bin .\rvmdk\tamper.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + tamper.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + tamper.c + 1 + .\tamper.c + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/tamper/tamper_ccs.cmd b/boards/dk-tm4c129x/tamper/tamper_ccs.cmd new file mode 100644 index 0000000..0ea48b4 --- /dev/null +++ b/boards/dk-tm4c129x/tamper/tamper_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * tamper_ccs.cmd - CCS linker configuration file for tamper. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/Makefile b/boards/dk-tm4c129x/tdes_cbc_decrypt/Makefile new file mode 100644 index 0000000..a86262c --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Triple DES CBC Decryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the Triple DES CBC Decryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/tdes_cbc_decrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Triple DES CBC Decryption Demo. +# +${COMPILER}/tdes_cbc_decrypt.axf: ${COMPILER}/frame.o +${COMPILER}/tdes_cbc_decrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/tdes_cbc_decrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/tdes_cbc_decrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/tdes_cbc_decrypt.axf: ${COMPILER}/tdes_cbc_decrypt.o +${COMPILER}/tdes_cbc_decrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/tdes_cbc_decrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/tdes_cbc_decrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/tdes_cbc_decrypt.axf: tdes_cbc_decrypt.ld +SCATTERgcc_tdes_cbc_decrypt=tdes_cbc_decrypt.ld +ENTRY_tdes_cbc_decrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..4183821 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsproject b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.cproject b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.cproject new file mode 100644 index 0000000..0404349 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.project b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.project new file mode 100644 index 0000000..c494820 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.project @@ -0,0 +1,70 @@ + + + tdes_cbc_decrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ccs.c + + + tdes_cbc_decrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.c + + + tdes_cbc_decrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.bin b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.bin new file mode 100644 index 0000000..f190c78 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.out b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.out new file mode 100644 index 0000000..14e1212 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/Debug/tdes_cbc_decrypt.out differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.bin b/boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.bin new file mode 100644 index 0000000..197997a Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.out b/boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.out new file mode 100644 index 0000000..cb16423 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/ewarm/Exe/tdes_cbc_decrypt.out differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.axf b/boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.axf new file mode 100644 index 0000000..c4ef1c4 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.axf differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.bin b/boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.bin new file mode 100644 index 0000000..3d60493 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/gcc/tdes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/readme.txt b/boards/dk-tm4c129x/tdes_cbc_decrypt/readme.txt new file mode 100644 index 0000000..990fb46 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/readme.txt @@ -0,0 +1,31 @@ +TDES CBC Decryption Demo + +Simple demo showing an decryption operation using the DES module with +triple DES in CBC mode. A single block of data is decrypted at a time. +The module is also capable of performing in DES mode, but this has been +proven to be cryptographically insecure. CBC mode is also not recommended +because it will always produce the same ciphertext for a block of +plaintext. CBC and CFB modes are recommended instead. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.axf b/boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.axf new file mode 100644 index 0000000..4ba4a4b Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.axf differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.bin b/boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.bin new file mode 100644 index 0000000..ee86af7 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_decrypt/rvmdk/tdes_cbc_decrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ccs.c b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ccs.c new file mode 100644 index 0000000..9f7112d --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TDESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + TDESIntHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ewarm.c b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ewarm.c new file mode 100644 index 0000000..2220a82 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TDESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + TDESIntHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_gcc.c b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_gcc.c new file mode 100644 index 0000000..2b05d71 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TDESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + TDESIntHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_rvmdk.S b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_rvmdk.S new file mode 100644 index 0000000..0fdfbc1 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TDESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD TDESIntHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.c b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.c new file mode 100644 index 0000000..bcb575f --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.c @@ -0,0 +1,657 @@ +//***************************************************************************** +// +// tdes_cbc_decrypt.c - Simple TDES CBC decryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_des.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/des.h" +#include "driverlib/debug.h" +#include "driverlib/fpu.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      TDES CBC Decryption Demo (tdes_cbc_decrypt)

      +//! +//! Simple demo showing an decryption operation using the DES module with +//! triple DES in CBC mode. A single block of data is decrypted at a time. +//! The module is also capable of performing in DES mode, but this has been +//! proven to be cryptographically insecure. CBC mode is also not recommended +//! because it will always produce the same ciphertext for a block of +//! plaintext. CBC and CFB modes are recommended instead. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Triple DES test vector. +// The plaintext is from the AES example. The key was randomly generated. +// The resulting ciphertext was then generated using a Perl script with the +// Crypt::DES_EDE3 module. +// +//***************************************************************************** +uint32_t g_pui32TDESPlainText[16] = +{ + 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 +}; + +uint32_t g_pui32TDESKey[6] = +{ + 0xc7f51c87, 0x8076211f, 0x5de5c871, 0xa243cf7e, + 0xd25fdb75, 0xad73068f +}; + +uint32_t g_pui32TDESIV[2] = +{ + 0x6d8ecac4, 0x3b27c885 +}; + +uint32_t g_pui32TDESCipherText[16] = +{ + 0x24c69385, 0xb338be54, 0x6eeeb276, 0x1a952b4e, + 0x7242ce4b, 0x9ec147cf, 0x765916ee, 0x3d25e685, + 0xfe5865b4, 0xf2238cb8, 0x2a5b68d5, 0x0f79a41a, + 0x6f4a7601, 0x7a57235f, 0xce84d08a, 0x1a34d011 +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 8 byte boundary. This is needed because all +// two data registers must be written at once. This is handled in the DES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 8; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (8 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The TDES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +TDESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the DES masked interrupt status. + // + ui32IntStatus = ROM_DESIntStatus(DES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & DES_INT_CONTEXT_IN) + { + ROM_DESIntDisable(DES_BASE, DES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & DES_INT_DATA_IN) + { + ROM_DESIntDisable(DES_BASE, DES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & DES_INT_DATA_OUT) + { + ROM_DESIntDisable(DES_BASE, DES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & DES_INT_DMA_CONTEXT_IN) + { + ROM_DESIntClear(DES_BASE, DES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & DES_INT_DMA_DATA_IN) + { + ROM_DESIntClear(DES_BASE, DES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & DES_INT_DMA_DATA_OUT) + { + ROM_DESIntClear(DES_BASE, DES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an decryption operation. +// +//***************************************************************************** +bool +TDESCBCDecrypt(uint32_t *pui32Src, uint32_t *pui32Dst, uint32_t *pui32Key, + uint32_t ui32Length, uint32_t *pui32IV, bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_DESReset(DES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_DESIntEnable(DES_BASE, (DES_INT_CONTEXT_IN | + DES_INT_DATA_IN | DES_INT_DATA_OUT)); + + // + // Configure the DES module. + // + ROM_DESConfigSet(DES_BASE, (DES_CFG_DIR_DECRYPT | DES_CFG_TRIPLE | + DES_CFG_MODE_CBC)); + + // + // Write the key. + // + ROM_DESKeySet(DES_BASE, pui32Key); + + // + // Write the IV. + // + ROM_DESIVSet(DES_BASE, pui32IV); + + // + // Depending on the argument, perform the decryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_DESIntEnable(DES_BASE, (DES_INT_DMA_CONTEXT_IN | + DES_INT_DMA_DATA_IN | + DES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH21_DES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH21_DES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH21_DES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_2 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH21_DES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(DES_BASE + DES_O_DATA_L), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH22_DES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH22_DES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH22_DES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_2 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH22_DES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(DES_BASE + DES_O_DATA_L), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Enable DMA requests + // + ROM_DESDMAEnable(DES_BASE, DES_DMA_DATA_IN | DES_DMA_DATA_OUT); + + // + // Write the length registers to start the process. + // + ROM_DESLengthSet(DES_BASE, ui32Length); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH21_DES0DIN); + ROM_uDMAChannelEnable(UDMA_CH22_DES0DOUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + else + { + // + // Perform the decryption. + // + ROM_DESDataProcess(DES_BASE, pui32Src, pui32Dst, ui32Length); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the DES and CCM modules. +// +//***************************************************************************** +bool +DESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable the GPIO Peripheral used by the UART. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure GPIO Pins for UART mode. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example decrypts blocks of plaintext using TDES in CBC mode. It +// does the decryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32PlainText[16], ui32Errors, ui32Idx, ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "tdes-cbc-decrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable DES interrupts. + // + ROM_IntEnable(INT_DES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting TDES CBC decryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and DES modules. + // + if(!DESInit()) + { + UARTprintf("Initialization of the DES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Perform the decryption without uDMA. + // + UARTprintf("Performing decryption without uDMA.\n"); + TDESCBCDecrypt(g_pui32TDESCipherText, pui32PlainText, g_pui32TDESKey, + 64, g_pui32TDESIV, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32PlainText[ui32Idx] != g_pui32TDESPlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, g_pui32TDESPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the plaintext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32PlainText[ui32Idx] = 0; + } + + // + // Perform the decryption with uDMA. + // + UARTprintf("Performing decryption with uDMA.\n"); + TDESCBCDecrypt(g_pui32TDESCipherText, pui32PlainText, g_pui32TDESKey, + 64, g_pui32TDESIV, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32PlainText[ui32Idx] != g_pui32TDESPlainText[ui32Idx]) + { + UARTprintf("Plaintext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, g_pui32TDESPlainText[ui32Idx], + pui32PlainText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewd b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewp b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewp new file mode 100644 index 0000000..05e10e3 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\tdes_cbc_decrypt.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.icf b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.icf new file mode 100644 index 0000000..0ead529 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// tdes_cbc_decrypt.icf - Linker configuration file for tdes_cbc_decrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ld b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ld new file mode 100644 index 0000000..f5649e0 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * tdes_cbc_decrypt.ld - Linker configuration file for tdes_cbc_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.sct b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.sct new file mode 100644 index 0000000..1787e52 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; tdes_cbc_decrypt.sct - Linker configuration file for tdes_cbc_decrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvopt b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvopt new file mode 100644 index 0000000..f79d52c --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + tdes_cbc_decrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\tdes_cbc_decrypt.c + tdes_cbc_decrypt.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvproj b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvproj new file mode 100644 index 0000000..015bb4e --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + tdes_cbc_decrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + tdes_cbc_decrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\tdes_cbc_decrypt.bin .\rvmdk\tdes_cbc_decrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + tdes_cbc_decrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + tdes_cbc_decrypt.c + 1 + .\tdes_cbc_decrypt.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt_ccs.cmd b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt_ccs.cmd new file mode 100644 index 0000000..8b635ae --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_decrypt/tdes_cbc_decrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * tdes_cbc_decrypt_ccs.cmd - CCS linker configuration file for tdes_cbc_decrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/Makefile b/boards/dk-tm4c129x/tdes_cbc_encrypt/Makefile new file mode 100644 index 0000000..7b07ffc --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/Makefile @@ -0,0 +1,91 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Triple DES CBC Ecryption Demo. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the Triple DES CBC Ecryption Demo to be built. +# +all: ${COMPILER} +all: ${COMPILER}/tdes_cbc_encrypt.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Triple DES CBC Ecryption Demo. +# +${COMPILER}/tdes_cbc_encrypt.axf: ${COMPILER}/frame.o +${COMPILER}/tdes_cbc_encrypt.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/tdes_cbc_encrypt.axf: ${COMPILER}/pinout.o +${COMPILER}/tdes_cbc_encrypt.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/tdes_cbc_encrypt.axf: ${COMPILER}/tdes_cbc_encrypt.o +${COMPILER}/tdes_cbc_encrypt.axf: ${COMPILER}/uartstdio.o +${COMPILER}/tdes_cbc_encrypt.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/tdes_cbc_encrypt.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/tdes_cbc_encrypt.axf: tdes_cbc_encrypt.ld +SCATTERgcc_tdes_cbc_encrypt=tdes_cbc_encrypt.ld +ENTRY_tdes_cbc_encrypt=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsimportspec b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsimportspec new file mode 100644 index 0000000..e936c38 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsproject b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.cproject b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.cproject new file mode 100644 index 0000000..660aba4 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.project b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.project new file mode 100644 index 0000000..f6a2c0a --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.project @@ -0,0 +1,70 @@ + + + tdes_cbc_encrypt + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ccs.c + + + tdes_cbc_encrypt.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.c + + + tdes_cbc_encrypt_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.bin b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.bin new file mode 100644 index 0000000..ebd6c76 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.out b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.out new file mode 100644 index 0000000..9684a84 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/Debug/tdes_cbc_encrypt.out differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/macros.ini_initial b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/target_config.ccxml b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.bin b/boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.bin new file mode 100644 index 0000000..37d84eb Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.out b/boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.out new file mode 100644 index 0000000..4dad88b Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/ewarm/Exe/tdes_cbc_encrypt.out differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.axf b/boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.axf new file mode 100644 index 0000000..e362a71 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.axf differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.bin b/boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.bin new file mode 100644 index 0000000..ec3a270 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/gcc/tdes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/readme.txt b/boards/dk-tm4c129x/tdes_cbc_encrypt/readme.txt new file mode 100644 index 0000000..2af8698 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/readme.txt @@ -0,0 +1,31 @@ +TDES CBC Encryption Demo + +Simple demo showing an encryption operation using the DES module with +triple DES in CBC mode. A single block of data is encrypted at a time. +The module is also capable of performing in DES mode, but this has been +proven to be cryptographically insecure. CBC mode is also not recommended +because it will always produce the same ciphertext for a block of +plaintext. CBC and CFB modes are recommended instead. + +Please note that the use of interrupts and uDMA is not required for the +operation of the module. It is only done for demonstration purposes. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.axf b/boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.axf new file mode 100644 index 0000000..6ccdf58 Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.axf differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.bin b/boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.bin new file mode 100644 index 0000000..3e689ae Binary files /dev/null and b/boards/dk-tm4c129x/tdes_cbc_encrypt/rvmdk/tdes_cbc_encrypt.bin differ diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ccs.c b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ccs.c new file mode 100644 index 0000000..9f7112d --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TDESIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + TDESIntHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ewarm.c b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ewarm.c new file mode 100644 index 0000000..2220a82 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TDESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + TDESIntHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_gcc.c b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_gcc.c new file mode 100644 index 0000000..2b05d71 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void TDESIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + TDESIntHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_rvmdk.S b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_rvmdk.S new file mode 100644 index 0000000..0fdfbc1 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN TDESIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD TDESIntHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.c b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.c new file mode 100644 index 0000000..ad23545 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.c @@ -0,0 +1,657 @@ +//***************************************************************************** +// +// tdes_cbc_encrypt.c - Simple TDES CBC encryption demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_des.h" +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/des.h" +#include "driverlib/debug.h" +#include "driverlib/fpu.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "utils/uartstdio.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      TDES CBC Encryption Demo (tdes_cbc_encrypt)

      +//! +//! Simple demo showing an encryption operation using the DES module with +//! triple DES in CBC mode. A single block of data is encrypted at a time. +//! The module is also capable of performing in DES mode, but this has been +//! proven to be cryptographically insecure. CBC mode is also not recommended +//! because it will always produce the same ciphertext for a block of +//! plaintext. CBC and CFB modes are recommended instead. +//! +//! Please note that the use of interrupts and uDMA is not required for the +//! operation of the module. It is only done for demonstration purposes. +// +//***************************************************************************** + +//***************************************************************************** +// +// Configuration defines. +// +//***************************************************************************** +#define CCM_LOOP_TIMEOUT 500000 + +//***************************************************************************** +// +// The DMA control structure table. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_psDMAControlTable, 1024) +tDMAControlTable g_psDMAControlTable[64]; +#else +tDMAControlTable g_psDMAControlTable[64] __attribute__((aligned(1024))); +#endif + +//***************************************************************************** +// +// Triple DES test vector. +// The plaintext is from the AES example. The key was randomly generated. +// The resulting ciphertext was then generated using a Perl script with the +// Crypt::DES_EDE3 module. +// +//***************************************************************************** +uint32_t g_pui32TDESPlainText[16] = +{ + 0xe2bec16b, 0x969f402e, 0x117e3de9, 0x2a179373, + 0x578a2dae, 0x9cac031e, 0xac6fb79e, 0x518eaf45, + 0x461cc830, 0x11e45ca3, 0x19c1fbe5, 0xef520a1a, + 0x45249ff6, 0x179b4fdf, 0x7b412bad, 0x10376ce6 +}; + +uint32_t g_pui32TDESKey[6] = +{ + 0xc7f51c87, 0x8076211f, 0x5de5c871, 0xa243cf7e, + 0xd25fdb75, 0xad73068f +}; + +uint32_t g_pui32TDESIV[2] = +{ + 0x6d8ecac4, 0x3b27c885 +}; + +uint32_t g_pui32TDESCipherText[16] = +{ + 0x24c69385, 0xb338be54, 0x6eeeb276, 0x1a952b4e, + 0x7242ce4b, 0x9ec147cf, 0x765916ee, 0x3d25e685, + 0xfe5865b4, 0xf2238cb8, 0x2a5b68d5, 0x0f79a41a, + 0x6f4a7601, 0x7a57235f, 0xce84d08a, 0x1a34d011 +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Round up length to nearest 8 byte boundary. This is needed because all +// two data registers must be written at once. This is handled in the DES +// driver, but if using uDMA, the length must rounded up. +// +//***************************************************************************** +uint32_t +LengthRoundUp(uint32_t ui32Length) +{ + uint32_t ui32Remainder; + + ui32Remainder = ui32Length % 8; + if(ui32Remainder == 0) + { + return(ui32Length); + } + else + { + return(ui32Length + (8 - ui32Remainder)); + } +} + +//***************************************************************************** +// +// The TDES interrupt handler and interrupt flags. +// +//***************************************************************************** +static volatile bool g_bContextInIntFlag; +static volatile bool g_bDataInIntFlag; +static volatile bool g_bDataOutIntFlag; +static volatile bool g_bContextInDMADoneIntFlag; +static volatile bool g_bDataInDMADoneIntFlag; +static volatile bool g_bDataOutDMADoneIntFlag; + +void +TDESIntHandler(void) +{ + uint32_t ui32IntStatus; + + // + // Read the DES masked interrupt status. + // + ui32IntStatus = ROM_DESIntStatus(DES_BASE, true); + + // + // Print a different message depending on the interrupt source. + // + if(ui32IntStatus & DES_INT_CONTEXT_IN) + { + ROM_DESIntDisable(DES_BASE, DES_INT_CONTEXT_IN); + g_bContextInIntFlag = true; + UARTprintf(" Context input registers are ready.\n"); + } + if(ui32IntStatus & DES_INT_DATA_IN) + { + ROM_DESIntDisable(DES_BASE, DES_INT_DATA_IN); + g_bDataInIntFlag = true; + UARTprintf(" Data FIFO is ready to receive data.\n"); + } + if(ui32IntStatus & DES_INT_DATA_OUT) + { + ROM_DESIntDisable(DES_BASE, DES_INT_DATA_OUT); + g_bDataOutIntFlag = true; + UARTprintf(" Data FIFO is ready to provide data.\n"); + } + if(ui32IntStatus & DES_INT_DMA_CONTEXT_IN) + { + ROM_DESIntClear(DES_BASE, DES_INT_DMA_CONTEXT_IN); + g_bContextInDMADoneIntFlag = true; + UARTprintf(" DMA completed a context write to the internal\n"); + UARTprintf(" registers.\n"); + } + if(ui32IntStatus & DES_INT_DMA_DATA_IN) + { + ROM_DESIntClear(DES_BASE, DES_INT_DMA_DATA_IN); + g_bDataInDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of input data to\n"); + UARTprintf(" the internal FIFO of the engine.\n"); + } + if(ui32IntStatus & DES_INT_DMA_DATA_OUT) + { + ROM_DESIntClear(DES_BASE, DES_INT_DMA_DATA_OUT); + g_bDataOutDMADoneIntFlag = true; + UARTprintf(" DMA has written the last word of process result.\n"); + } +} + +//***************************************************************************** +// +// Perform an encryption operation. +// +//***************************************************************************** +bool +TDESCBCEncrypt(uint32_t *pui32Src, uint32_t *pui32Dst, uint32_t *pui32Key, + uint32_t ui32Length, uint32_t *pui32IV, bool bUseDMA) +{ + // + // Perform a soft reset. + // + ROM_DESReset(DES_BASE); + + // + // Clear the interrupt flags. + // + g_bContextInIntFlag = false; + g_bDataInIntFlag = false; + g_bDataOutIntFlag = false; + g_bContextInDMADoneIntFlag = false; + g_bDataInDMADoneIntFlag = false; + g_bDataOutDMADoneIntFlag = false; + + // + // Enable all interrupts. + // + ROM_DESIntEnable(DES_BASE, (DES_INT_CONTEXT_IN | + DES_INT_DATA_IN | DES_INT_DATA_OUT)); + + // + // Configure the DES module. + // + ROM_DESConfigSet(DES_BASE, (DES_CFG_DIR_ENCRYPT | DES_CFG_TRIPLE | + DES_CFG_MODE_CBC)); + + // + // Write the key. + // + ROM_DESKeySet(DES_BASE, pui32Key); + + // + // Write the IV. + // + ROM_DESIVSet(DES_BASE, pui32IV); + + // + // Depending on the argument, perform the encryption + // with or without uDMA. + // + if(bUseDMA) + { + // + // Enable DMA interrupts. + // + ROM_DESIntEnable(DES_BASE, (DES_INT_DMA_CONTEXT_IN | + DES_INT_DMA_DATA_IN | + DES_INT_DMA_DATA_OUT)); + + // + // Setup the DMA module to copy data in. + // + ROM_uDMAChannelAssign(UDMA_CH21_DES0DIN); + ROM_uDMAChannelAttributeDisable(UDMA_CH21_DES0DIN, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH21_DES0DIN | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | + UDMA_DST_INC_NONE | UDMA_ARB_2 | + UDMA_DST_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH21_DES0DIN | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, (void *)pui32Src, + (void *)(DES_BASE + DES_O_DATA_L), + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data in DMA request enabled.\n"); + + // + // Setup the DMA module to copy the data out. + // + ROM_uDMAChannelAssign(UDMA_CH22_DES0DOUT); + ROM_uDMAChannelAttributeDisable(UDMA_CH22_DES0DOUT, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + ROM_uDMAChannelControlSet(UDMA_CH22_DES0DOUT | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_NONE | + UDMA_DST_INC_32 | UDMA_ARB_2 | + UDMA_SRC_PROT_PRIV); + ROM_uDMAChannelTransferSet(UDMA_CH22_DES0DOUT | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, + (void *)(DES_BASE + DES_O_DATA_L), + (void *)pui32Dst, + LengthRoundUp(ui32Length) / 4); + UARTprintf("Data out DMA request enabled.\n"); + + // + // Enable DMA requests + // + ROM_DESDMAEnable(DES_BASE, DES_DMA_DATA_IN | DES_DMA_DATA_OUT); + + // + // Write the length registers to start the process. + // + ROM_DESLengthSet(DES_BASE, ui32Length); + + // + // Enable the DMA channels to start the transfers. This must be done after + // writing the length to prevent data from copying before the context is + // truly ready. + // + ROM_uDMAChannelEnable(UDMA_CH21_DES0DIN); + ROM_uDMAChannelEnable(UDMA_CH22_DES0DOUT); + + // + // Wait for the data in DMA done interrupt. + // + while(!g_bDataInDMADoneIntFlag) + { + } + + // + // Wait for the data out DMA done interrupt. + // + while(!g_bDataOutDMADoneIntFlag) + { + } + } + else + { + // + // Perform the encryption. + // + ROM_DESDataProcess(DES_BASE, pui32Src, pui32Dst, ui32Length); + } + + return(true); +} + +//***************************************************************************** +// +// Initialize the DES and CCM modules. +// +//***************************************************************************** +bool +DESInit(void) +{ + uint32_t ui32Loop; + + // + // Check that the CCM peripheral is present. + // + if(!ROM_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0)) + { + UARTprintf("No CCM peripheral found!\n"); + + // + // Return failure. + // + return(false); + } + + // + // The hardware is available, enable it. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, notify and spin. + // + UARTprintf("Time out on CCM ready after enable.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Reset the peripheral to ensure we are starting from a known condition. + // + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0); + + // + // Wait for the peripheral to be ready again. + // + ui32Loop = 0; + while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0)) + { + // + // Increment our poll counter. + // + ui32Loop++; + + if(ui32Loop > CCM_LOOP_TIMEOUT) + { + // + // Timed out, spin. + // + UARTprintf("Time out on CCM ready after reset.\n"); + + // + // Return failure. + // + return(false); + } + } + + // + // Return initialization success. + // + return(true); +} + +//***************************************************************************** +// +// Configure the UART and its pins. This must be called before UARTprintf(). +// +//***************************************************************************** +void +ConfigureUART(void) +{ + // + // Enable the GPIO Peripheral used by the UART. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); + + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Configure GPIO Pins for UART mode. + // + ROM_GPIOPinConfigure(GPIO_PA0_U0RX); + ROM_GPIOPinConfigure(GPIO_PA1_U0TX); + ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Use the internal 16MHz oscillator as the UART clock source. + // + ROM_UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, 16000000); +} + +//***************************************************************************** +// +// This example encrypts blocks of plaintext using TDES in CBC mode. It +// does the encryption first without uDMA and then with uDMA. The results +// are checked after each operation. +// +//***************************************************************************** +int +main(void) +{ + uint32_t pui32CipherText[16], ui32Errors, ui32Idx, ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "tdes-cbc-encrypt"); + + // + // Show some instructions on the display + // + GrContextFontSet(&sContext, g_psFontCm20); + GrContextForegroundSet(&sContext, ClrWhite); + GrStringDrawCentered(&sContext, "Connect a terminal to", -1, + GrContextDpyWidthGet(&sContext) / 2, 60, false); + GrStringDrawCentered(&sContext, "UART0 (115200,N,8,1)", -1, + GrContextDpyWidthGet(&sContext) / 2, 80, false); + GrStringDrawCentered(&sContext, "for more information.", -1, + GrContextDpyWidthGet(&sContext) / 2, 100, false); + + // + // Initialize local variables. + // + ui32Errors = 0; + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Enable stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPUStackingEnable(); + + // + // Enable DES interrupts. + // + ROM_IntEnable(INT_DES0); + + // + // Enable debug output on UART0 and print a welcome message. + // + ConfigureUART(); + UARTprintf("Starting TDES CBC encryption demo.\n"); + GrStringDrawCentered(&sContext, "Starting demo...", -1, + GrContextDpyWidthGet(&sContext) / 2, 140, false); + + // + // Enable the uDMA module. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + + // + // Setup the control table. + // + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_psDMAControlTable); + + // + // Initialize the CCM and DES modules. + // + if(!DESInit()) + { + UARTprintf("Initialization of the DES module failed.\n"); + ui32Errors |= 0x00000001; + } + + // + // Perform the encryption without uDMA. + // + UARTprintf("Performing encryption without uDMA.\n"); + TDESCBCEncrypt(g_pui32TDESPlainText, pui32CipherText, g_pui32TDESKey, + 64, g_pui32TDESIV, false); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32CipherText[ui32Idx] != g_pui32TDESCipherText[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, g_pui32TDESCipherText[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000002; + } + } + + // + // Clear the array containing the ciphertext. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + pui32CipherText[ui32Idx] = 0; + } + + // + // Perform the encryption with uDMA. + // + UARTprintf("Performing encryption with uDMA.\n"); + TDESCBCEncrypt(g_pui32TDESPlainText, pui32CipherText, g_pui32TDESKey, + 64, g_pui32TDESIV, true); + + // + // Check the result. + // + for(ui32Idx = 0; ui32Idx < 16; ui32Idx++) + { + if(pui32CipherText[ui32Idx] != g_pui32TDESCipherText[ui32Idx]) + { + UARTprintf("Ciphertext mismatch on word %d. Exp: 0x%x, Act: " + "0x%x\n", ui32Idx, g_pui32TDESCipherText[ui32Idx], + pui32CipherText[ui32Idx]); + ui32Errors |= (ui32Idx << 16) | 0x00000004; + } + } + + // + // Finished. + // + if(ui32Errors) + { + UARTprintf("Demo failed with error code 0x%x.\n", ui32Errors); + GrStringDrawCentered(&sContext, "Demo failed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + else + { + UARTprintf("Demo completed successfully.\n"); + GrStringDrawCentered(&sContext, "Demo passed.", -1, + GrContextDpyWidthGet(&sContext) / 2, 180, false); + } + + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewd b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewp b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewp new file mode 100644 index 0000000..0f1ef88 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ewp @@ -0,0 +1,801 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\tdes_cbc_encrypt.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.icf b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.icf new file mode 100644 index 0000000..4933f04 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// tdes_cbc_encrypt.icf - Linker configuration file for tdes_cbc_encrypt. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ld b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ld new file mode 100644 index 0000000..9cb345d --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * tdes_cbc_encrypt.ld - Linker configuration file for tdes_cbc_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.sct b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.sct new file mode 100644 index 0000000..cec817b --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; tdes_cbc_encrypt.sct - Linker configuration file for tdes_cbc_encrypt. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvopt b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvopt new file mode 100644 index 0000000..912fee3 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvopt @@ -0,0 +1,359 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + tdes_cbc_encrypt + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\tdes_cbc_encrypt.c + tdes_cbc_encrypt.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 9 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvproj b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvproj new file mode 100644 index 0000000..d993dfd --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt.uvproj @@ -0,0 +1,449 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + tdes_cbc_encrypt + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + tdes_cbc_encrypt + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\tdes_cbc_encrypt.bin .\rvmdk\tdes_cbc_encrypt.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + tdes_cbc_encrypt.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + tdes_cbc_encrypt.c + 1 + .\tdes_cbc_encrypt.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt_ccs.cmd b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt_ccs.cmd new file mode 100644 index 0000000..8a50399 --- /dev/null +++ b/boards/dk-tm4c129x/tdes_cbc_encrypt/tdes_cbc_encrypt_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * tdes_cbc_encrypt_ccs.cmd - CCS linker configuration file for tdes_cbc_encrypt. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/timers/Makefile b/boards/dk-tm4c129x/timers/Makefile new file mode 100644 index 0000000..5c06af4 --- /dev/null +++ b/boards/dk-tm4c129x/timers/Makefile @@ -0,0 +1,89 @@ +#****************************************************************************** +# +# Makefile - Rules for building the timers example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the timers example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/timers.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the timers example. +# +${COMPILER}/timers.axf: ${COMPILER}/frame.o +${COMPILER}/timers.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/timers.axf: ${COMPILER}/pinout.o +${COMPILER}/timers.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/timers.axf: ${COMPILER}/timers.o +${COMPILER}/timers.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/timers.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/timers.axf: timers.ld +SCATTERgcc_timers=timers.ld +ENTRY_timers=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/timers/ccs/.ccsimportspec b/boards/dk-tm4c129x/timers/ccs/.ccsimportspec new file mode 100644 index 0000000..e61983c --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/timers/ccs/.ccsproject b/boards/dk-tm4c129x/timers/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/timers/ccs/.cproject b/boards/dk-tm4c129x/timers/ccs/.cproject new file mode 100644 index 0000000..76a4eff --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/timers/ccs/.project b/boards/dk-tm4c129x/timers/ccs/.project new file mode 100644 index 0000000..ad6a35e --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/.project @@ -0,0 +1,65 @@ + + + timers + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/timers/startup_ccs.c + + + timers.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/timers/timers.c + + + timers_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/timers/timers_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/timers/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/timers/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/timers/ccs/Debug/timers.bin b/boards/dk-tm4c129x/timers/ccs/Debug/timers.bin new file mode 100644 index 0000000..5b46901 Binary files /dev/null and b/boards/dk-tm4c129x/timers/ccs/Debug/timers.bin differ diff --git a/boards/dk-tm4c129x/timers/ccs/Debug/timers.out b/boards/dk-tm4c129x/timers/ccs/Debug/timers.out new file mode 100644 index 0000000..762bd25 Binary files /dev/null and b/boards/dk-tm4c129x/timers/ccs/Debug/timers.out differ diff --git a/boards/dk-tm4c129x/timers/ccs/macros.ini_initial b/boards/dk-tm4c129x/timers/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/timers/ccs/target_config.ccxml b/boards/dk-tm4c129x/timers/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/timers/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/timers/ewarm/Exe/timers.bin b/boards/dk-tm4c129x/timers/ewarm/Exe/timers.bin new file mode 100644 index 0000000..1452b86 Binary files /dev/null and b/boards/dk-tm4c129x/timers/ewarm/Exe/timers.bin differ diff --git a/boards/dk-tm4c129x/timers/ewarm/Exe/timers.out b/boards/dk-tm4c129x/timers/ewarm/Exe/timers.out new file mode 100644 index 0000000..7e5939b Binary files /dev/null and b/boards/dk-tm4c129x/timers/ewarm/Exe/timers.out differ diff --git a/boards/dk-tm4c129x/timers/gcc/timers.axf b/boards/dk-tm4c129x/timers/gcc/timers.axf new file mode 100644 index 0000000..3d13480 Binary files /dev/null and b/boards/dk-tm4c129x/timers/gcc/timers.axf differ diff --git a/boards/dk-tm4c129x/timers/gcc/timers.bin b/boards/dk-tm4c129x/timers/gcc/timers.bin new file mode 100644 index 0000000..9998957 Binary files /dev/null and b/boards/dk-tm4c129x/timers/gcc/timers.bin differ diff --git a/boards/dk-tm4c129x/timers/readme.txt b/boards/dk-tm4c129x/timers/readme.txt new file mode 100644 index 0000000..e1b65a2 --- /dev/null +++ b/boards/dk-tm4c129x/timers/readme.txt @@ -0,0 +1,26 @@ +Timer + +This example application demonstrates the use of the timers to generate +periodic interrupts. One timer is set up to interrupt once per second and +the other to interrupt twice per second; each interrupt handler will toggle +its own indicator on the display. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/timers/rvmdk/timers.axf b/boards/dk-tm4c129x/timers/rvmdk/timers.axf new file mode 100644 index 0000000..b64b0d4 Binary files /dev/null and b/boards/dk-tm4c129x/timers/rvmdk/timers.axf differ diff --git a/boards/dk-tm4c129x/timers/rvmdk/timers.bin b/boards/dk-tm4c129x/timers/rvmdk/timers.bin new file mode 100644 index 0000000..407b29c Binary files /dev/null and b/boards/dk-tm4c129x/timers/rvmdk/timers.bin differ diff --git a/boards/dk-tm4c129x/timers/startup_ccs.c b/boards/dk-tm4c129x/timers/startup_ccs.c new file mode 100644 index 0000000..1b86573 --- /dev/null +++ b/boards/dk-tm4c129x/timers/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void Timer0IntHandler(void); +extern void Timer1IntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + Timer0IntHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + Timer1IntHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/timers/startup_ewarm.c b/boards/dk-tm4c129x/timers/startup_ewarm.c new file mode 100644 index 0000000..0abf7ce --- /dev/null +++ b/boards/dk-tm4c129x/timers/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void Timer0IntHandler(void); +extern void Timer1IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + Timer0IntHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + Timer1IntHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/timers/startup_gcc.c b/boards/dk-tm4c129x/timers/startup_gcc.c new file mode 100644 index 0000000..c249581 --- /dev/null +++ b/boards/dk-tm4c129x/timers/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void Timer0IntHandler(void); +extern void Timer1IntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + Timer0IntHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + Timer1IntHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/timers/startup_rvmdk.S b/boards/dk-tm4c129x/timers/startup_rvmdk.S new file mode 100644 index 0000000..365e20f --- /dev/null +++ b/boards/dk-tm4c129x/timers/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN Timer0IntHandler + EXTERN Timer1IntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD Timer0IntHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD Timer1IntHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/timers/timers.c b/boards/dk-tm4c129x/timers/timers.c new file mode 100644 index 0000000..72ec92f --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.c @@ -0,0 +1,216 @@ +//***************************************************************************** +// +// timers.c - Timers example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Timer (timers)

      +//! +//! This example application demonstrates the use of the timers to generate +//! periodic interrupts. One timer is set up to interrupt once per second and +//! the other to interrupt twice per second; each interrupt handler will toggle +//! its own indicator on the display. +// +//***************************************************************************** + +//***************************************************************************** +// +// Flags that contain the current value of the interrupt indicator as displayed +// on the display. +// +//***************************************************************************** +uint32_t g_ui32Flags; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The interrupt handler for the first timer interrupt. +// +//***************************************************************************** +void +Timer0IntHandler(void) +{ + // + // Clear the timer interrupt. + // + ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); + + // + // Toggle the flag for the first timer. + // + HWREGBITW(&g_ui32Flags, 0) ^= 1; + + // + // Update the interrupt status on the display. + // + ROM_IntMasterDisable(); + GrStringDraw(&g_sContext, (HWREGBITW(&g_ui32Flags, 0) ? "1" : "0"), -1, + 195, 108, 1); + ROM_IntMasterEnable(); +} + +//***************************************************************************** +// +// The interrupt handler for the second timer interrupt. +// +//***************************************************************************** +void +Timer1IntHandler(void) +{ + // + // Clear the timer interrupt. + // + ROM_TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); + + // + // Toggle the flag for the second timer. + // + HWREGBITW(&g_ui32Flags, 1) ^= 1; + + // + // Update the interrupt status on the display. + // + ROM_IntMasterDisable(); + GrStringDraw(&g_sContext, (HWREGBITW(&g_ui32Flags, 1) ? "1" : "0"), -1, + 195, 128, 1); + ROM_IntMasterEnable(); +} + +//***************************************************************************** +// +// This example application demonstrates the use of the timers to generate +// periodic interrupts. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "timers"); + + // + // Initialize timer status display. + // + GrStringDraw(&g_sContext, "Timer 0:", -1, 100, 108, 0); + GrStringDraw(&g_sContext, "Timer 1:", -1, 100, 128, 0); + + // + // Enable the peripherals used by this example. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); + + // + // Enable processor interrupts. + // + ROM_IntMasterEnable(); + + // + // Configure the two 32-bit periodic timers. + // + ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); + ROM_TimerConfigure(TIMER1_BASE, TIMER_CFG_PERIODIC); + ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, ui32SysClock); + ROM_TimerLoadSet(TIMER1_BASE, TIMER_A, ui32SysClock / 2); + + // + // Setup the interrupts for the timer timeouts. + // + ROM_IntEnable(INT_TIMER0A); + ROM_IntEnable(INT_TIMER1A); + ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); + ROM_TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); + + // + // Enable the timers. + // + ROM_TimerEnable(TIMER0_BASE, TIMER_A); + ROM_TimerEnable(TIMER1_BASE, TIMER_A); + + // + // Loop forever while the timers run. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/timers/timers.ewd b/boards/dk-tm4c129x/timers/timers.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/timers/timers.ewp b/boards/dk-tm4c129x/timers/timers.ewp new file mode 100644 index 0000000..4b0b64a --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\timers.c + + + diff --git a/boards/dk-tm4c129x/timers/timers.icf b/boards/dk-tm4c129x/timers/timers.icf new file mode 100644 index 0000000..ad775c2 --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// timers.icf - Linker configuration file for timers. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/timers/timers.ld b/boards/dk-tm4c129x/timers/timers.ld new file mode 100644 index 0000000..3c45d47 --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * timers.ld - Linker configuration file for timers. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/timers/timers.sct b/boards/dk-tm4c129x/timers/timers.sct new file mode 100644 index 0000000..03b5e15 --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; timers.sct - Linker configuration file for timers. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/timers/timers.uvopt b/boards/dk-tm4c129x/timers/timers.uvopt new file mode 100644 index 0000000..d722453 --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + timers + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\timers.c + timers.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/timers/timers.uvproj b/boards/dk-tm4c129x/timers/timers.uvproj new file mode 100644 index 0000000..284ecce --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + timers + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + timers + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\timers.bin .\rvmdk\timers.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + timers.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + timers.c + 1 + .\timers.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/timers/timers_ccs.cmd b/boards/dk-tm4c129x/timers/timers_ccs.cmd new file mode 100644 index 0000000..5bffa4a --- /dev/null +++ b/boards/dk-tm4c129x/timers/timers_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * timers_ccs.cmd - CCS linker configuration file for timers. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/uart_echo/Makefile b/boards/dk-tm4c129x/uart_echo/Makefile new file mode 100644 index 0000000..68229ef --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/Makefile @@ -0,0 +1,89 @@ +#****************************************************************************** +# +# Makefile - Rules for building the uart_echo example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the uart_echo example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/uart_echo.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the uart_echo example. +# +${COMPILER}/uart_echo.axf: ${COMPILER}/frame.o +${COMPILER}/uart_echo.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/uart_echo.axf: ${COMPILER}/pinout.o +${COMPILER}/uart_echo.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/uart_echo.axf: ${COMPILER}/uart_echo.o +${COMPILER}/uart_echo.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/uart_echo.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/uart_echo.axf: uart_echo.ld +SCATTERgcc_uart_echo=uart_echo.ld +ENTRY_uart_echo=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/uart_echo/ccs/.ccsimportspec b/boards/dk-tm4c129x/uart_echo/ccs/.ccsimportspec new file mode 100644 index 0000000..9a02fa9 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/uart_echo/ccs/.ccsproject b/boards/dk-tm4c129x/uart_echo/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/uart_echo/ccs/.cproject b/boards/dk-tm4c129x/uart_echo/ccs/.cproject new file mode 100644 index 0000000..2cce08d --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/uart_echo/ccs/.project b/boards/dk-tm4c129x/uart_echo/ccs/.project new file mode 100644 index 0000000..72362ca --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/.project @@ -0,0 +1,65 @@ + + + uart_echo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/uart_echo/startup_ccs.c + + + uart_echo.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/uart_echo/uart_echo.c + + + uart_echo_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/uart_echo/uart_echo_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/uart_echo/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/uart_echo/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.bin b/boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.bin new file mode 100644 index 0000000..2645f4c Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.bin differ diff --git a/boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.out b/boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.out new file mode 100644 index 0000000..476d864 Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/ccs/Debug/uart_echo.out differ diff --git a/boards/dk-tm4c129x/uart_echo/ccs/macros.ini_initial b/boards/dk-tm4c129x/uart_echo/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/uart_echo/ccs/target_config.ccxml b/boards/dk-tm4c129x/uart_echo/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.bin b/boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.bin new file mode 100644 index 0000000..6276789 Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.bin differ diff --git a/boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.out b/boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.out new file mode 100644 index 0000000..ea87942 Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/ewarm/Exe/uart_echo.out differ diff --git a/boards/dk-tm4c129x/uart_echo/gcc/uart_echo.axf b/boards/dk-tm4c129x/uart_echo/gcc/uart_echo.axf new file mode 100644 index 0000000..19b8215 Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/gcc/uart_echo.axf differ diff --git a/boards/dk-tm4c129x/uart_echo/gcc/uart_echo.bin b/boards/dk-tm4c129x/uart_echo/gcc/uart_echo.bin new file mode 100644 index 0000000..dbc05ff Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/gcc/uart_echo.bin differ diff --git a/boards/dk-tm4c129x/uart_echo/readme.txt b/boards/dk-tm4c129x/uart_echo/readme.txt new file mode 100644 index 0000000..9410427 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/readme.txt @@ -0,0 +1,26 @@ +UART Echo + +This example application utilizes the UART to echo text. The first UART +(connected to the FTDI virtual serial port on the evaluation board) will be +configured in 115,200 baud, 8-n-1 mode. All characters received on the +UART are transmitted back to the UART. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.axf b/boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.axf new file mode 100644 index 0000000..4295465 Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.axf differ diff --git a/boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.bin b/boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.bin new file mode 100644 index 0000000..c6c0afc Binary files /dev/null and b/boards/dk-tm4c129x/uart_echo/rvmdk/uart_echo.bin differ diff --git a/boards/dk-tm4c129x/uart_echo/startup_ccs.c b/boards/dk-tm4c129x/uart_echo/startup_ccs.c new file mode 100644 index 0000000..1d6dc44 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void UARTIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/uart_echo/startup_ewarm.c b/boards/dk-tm4c129x/uart_echo/startup_ewarm.c new file mode 100644 index 0000000..82f52a2 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void UARTIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/uart_echo/startup_gcc.c b/boards/dk-tm4c129x/uart_echo/startup_gcc.c new file mode 100644 index 0000000..350c6e6 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void UARTIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/uart_echo/startup_rvmdk.S b/boards/dk-tm4c129x/uart_echo/startup_rvmdk.S new file mode 100644 index 0000000..30c1e2e --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN UARTIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UARTIntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.c b/boards/dk-tm4c129x/uart_echo/uart_echo.c new file mode 100644 index 0000000..83d1507 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.c @@ -0,0 +1,207 @@ +//***************************************************************************** +// +// uart_echo.c - Example for reading data from and writing data to the UART in +// an interrupt driven fashion. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/uart.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/frame.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      UART Echo (uart_echo)

      +//! +//! This example application utilizes the UART to echo text. The first UART +//! (connected to the FTDI virtual serial port on the evaluation board) will be +//! configured in 115,200 baud, 8-n-1 mode. All characters received on the +//! UART are transmitted back to the UART. +// +//***************************************************************************** + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The UART interrupt handler. +// +//***************************************************************************** +void +UARTIntHandler(void) +{ + uint32_t ui32Status; + + // + // Get the interrrupt status. + // + ui32Status = ROM_UARTIntStatus(UART0_BASE, true); + + // + // Clear the asserted interrupts. + // + ROM_UARTIntClear(UART0_BASE, ui32Status); + + // + // Loop while there are characters in the receive FIFO. + // + while(ROM_UARTCharsAvail(UART0_BASE)) + { + // + // Read the next character from the UART and write it back to the UART. + // + ROM_UARTCharPutNonBlocking(UART0_BASE, + UARTCharGetNonBlocking(UART0_BASE)); + } +} + +//***************************************************************************** +// +// Send a string to the UART. +// +//***************************************************************************** +void +UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count) +{ + // + // Loop while there are more characters to send. + // + while(ui32Count--) + { + // + // Write the next character to the UART. + // + ROM_UARTCharPutNonBlocking(UART0_BASE, *pui8Buffer++); + } +} + +//***************************************************************************** +// +// This example demonstrates how to send a string of data to the UART. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "uart-echo"); + + // + // Display UART configuration on the display. + // + GrStringDraw(&sContext, "Port:", -1, 70, 70, 0); + GrStringDraw(&sContext, "Baud:", -1, 70, 95, 0); + GrStringDraw(&sContext, "Data:", -1, 70, 120, 0); + GrStringDraw(&sContext, "Parity:", -1, 70, 145, 0); + GrStringDraw(&sContext, "Stop:", -1, 70, 170, 0); + GrStringDraw(&sContext, "Uart 0", -1, 150, 70, 0); + GrStringDraw(&sContext, "115,200 bps", -1, 150, 95, 0); + GrStringDraw(&sContext, "8 Bit", -1, 150, 120, 0); + GrStringDraw(&sContext, "None", -1, 150, 145, 0); + GrStringDraw(&sContext, "1 Bit", -1, 150, 170, 0); + + // + // Enable the (non-GPIO) peripherals used by this example. PinoutSet() + // already enabled GPIO Port A. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Enable processor interrupts. + // + IntMasterEnable(); + + // + // Configure the UART for 115,200, 8-N-1 operation. + // + ROM_UARTConfigSetExpClk(UART0_BASE, ui32SysClock, 115200, + (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | + UART_CONFIG_PAR_NONE)); + + // + // Enable the UART interrupt. + // + ROM_IntEnable(INT_UART0); + ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); + + // + // Prompt for text to be entered. + // + UARTSend((uint8_t *)"Enter text: ", 12); + + // + // Loop forever echoing data through the UART. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.ewd b/boards/dk-tm4c129x/uart_echo/uart_echo.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.ewp b/boards/dk-tm4c129x/uart_echo/uart_echo.ewp new file mode 100644 index 0000000..ecaa25d --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\uart_echo.c + + + diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.icf b/boards/dk-tm4c129x/uart_echo/uart_echo.icf new file mode 100644 index 0000000..939afba --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// uart_echo.icf - Linker configuration file for uart_echo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.ld b/boards/dk-tm4c129x/uart_echo/uart_echo.ld new file mode 100644 index 0000000..fe62efb --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * uart_echo.ld - Linker configuration file for uart_echo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.sct b/boards/dk-tm4c129x/uart_echo/uart_echo.sct new file mode 100644 index 0000000..5b1afe1 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; uart_echo.sct - Linker configuration file for uart_echo. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.uvopt b/boards/dk-tm4c129x/uart_echo/uart_echo.uvopt new file mode 100644 index 0000000..7e1c9d2 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + uart_echo + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\uart_echo.c + uart_echo.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo.uvproj b/boards/dk-tm4c129x/uart_echo/uart_echo.uvproj new file mode 100644 index 0000000..70ecbc6 --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + uart_echo + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + uart_echo + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\uart_echo.bin .\rvmdk\uart_echo.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + uart_echo.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uart_echo.c + 1 + .\uart_echo.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/uart_echo/uart_echo_ccs.cmd b/boards/dk-tm4c129x/uart_echo/uart_echo_ccs.cmd new file mode 100644 index 0000000..687e69c --- /dev/null +++ b/boards/dk-tm4c129x/uart_echo/uart_echo_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * uart_echo_ccs.cmd - CCS linker configuration file for uart_echo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/dk-tm4c129x/udma_demo/Makefile b/boards/dk-tm4c129x/udma_demo/Makefile new file mode 100644 index 0000000..d5e1ab9 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/Makefile @@ -0,0 +1,92 @@ +#****************************************************************************** +# +# Makefile - Rules for building the uDMA example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the uDMA example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/udma_demo.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the uDMA example. +# +${COMPILER}/udma_demo.axf: ${COMPILER}/cpu_usage.o +${COMPILER}/udma_demo.axf: ${COMPILER}/frame.o +${COMPILER}/udma_demo.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/udma_demo.axf: ${COMPILER}/pinout.o +${COMPILER}/udma_demo.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/udma_demo.axf: ${COMPILER}/udma_demo.o +${COMPILER}/udma_demo.axf: ${COMPILER}/ustdlib.o +${COMPILER}/udma_demo.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/udma_demo.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/udma_demo.axf: udma_demo.ld +SCATTERgcc_udma_demo=udma_demo.ld +ENTRY_udma_demo=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/udma_demo/ccs/.ccsimportspec b/boards/dk-tm4c129x/udma_demo/ccs/.ccsimportspec new file mode 100644 index 0000000..aea8941 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/udma_demo/ccs/.ccsproject b/boards/dk-tm4c129x/udma_demo/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/udma_demo/ccs/.cproject b/boards/dk-tm4c129x/udma_demo/ccs/.cproject new file mode 100644 index 0000000..1fc0fea --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/udma_demo/ccs/.project b/boards/dk-tm4c129x/udma_demo/ccs/.project new file mode 100644 index 0000000..b96b6fa --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/.project @@ -0,0 +1,75 @@ + + + udma_demo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/udma_demo/startup_ccs.c + + + udma_demo.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/udma_demo/udma_demo.c + + + udma_demo_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/udma_demo/udma_demo_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/cpu_usage.c + 1 + SW_ROOT/utils/cpu_usage.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/udma_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/udma_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.bin b/boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.bin new file mode 100644 index 0000000..5a4d0e2 Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.bin differ diff --git a/boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.out b/boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.out new file mode 100644 index 0000000..861f9b8 Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/ccs/Debug/udma_demo.out differ diff --git a/boards/dk-tm4c129x/udma_demo/ccs/macros.ini_initial b/boards/dk-tm4c129x/udma_demo/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/udma_demo/ccs/target_config.ccxml b/boards/dk-tm4c129x/udma_demo/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.bin b/boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.bin new file mode 100644 index 0000000..15c0693 Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.bin differ diff --git a/boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.out b/boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.out new file mode 100644 index 0000000..6a1ef26 Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/ewarm/Exe/udma_demo.out differ diff --git a/boards/dk-tm4c129x/udma_demo/gcc/udma_demo.axf b/boards/dk-tm4c129x/udma_demo/gcc/udma_demo.axf new file mode 100644 index 0000000..a2f9a0d Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/gcc/udma_demo.axf differ diff --git a/boards/dk-tm4c129x/udma_demo/gcc/udma_demo.bin b/boards/dk-tm4c129x/udma_demo/gcc/udma_demo.bin new file mode 100644 index 0000000..9ff4e83 Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/gcc/udma_demo.bin differ diff --git a/boards/dk-tm4c129x/udma_demo/readme.txt b/boards/dk-tm4c129x/udma_demo/readme.txt new file mode 100644 index 0000000..65b5f3d --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/readme.txt @@ -0,0 +1,25 @@ +uDMA + +This example application demonstrates the use of the uDMA controller to +transfer data between memory buffers, and to transfer data to and from a +UART. The test runs for 10 seconds before exiting. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.axf b/boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.axf new file mode 100644 index 0000000..068386f Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.axf differ diff --git a/boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.bin b/boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.bin new file mode 100644 index 0000000..fe2996c Binary files /dev/null and b/boards/dk-tm4c129x/udma_demo/rvmdk/udma_demo.bin differ diff --git a/boards/dk-tm4c129x/udma_demo/startup_ccs.c b/boards/dk-tm4c129x/udma_demo/startup_ccs.c new file mode 100644 index 0000000..672bdc7 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/startup_ccs.c @@ -0,0 +1,278 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void UART0IntHandler(void); +extern void uDMAIntHandler(void); +extern void uDMAErrorHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UART0IntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + uDMAIntHandler, // uDMA Software Transfer + uDMAErrorHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/udma_demo/startup_ewarm.c b/boards/dk-tm4c129x/udma_demo/startup_ewarm.c new file mode 100644 index 0000000..d0b84b2 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/startup_ewarm.c @@ -0,0 +1,309 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void UART0IntHandler(void); +extern void uDMAIntHandler(void); +extern void uDMAErrorHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UART0IntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + uDMAIntHandler, // uDMA Software Transfer + uDMAErrorHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/udma_demo/startup_gcc.c b/boards/dk-tm4c129x/udma_demo/startup_gcc.c new file mode 100644 index 0000000..e0eaf61 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/startup_gcc.c @@ -0,0 +1,325 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void UART0IntHandler(void); +extern void uDMAIntHandler(void); +extern void uDMAErrorHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UART0IntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + uDMAIntHandler, // uDMA Software Transfer + uDMAErrorHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/udma_demo/startup_rvmdk.S b/boards/dk-tm4c129x/udma_demo/startup_rvmdk.S new file mode 100644 index 0000000..24c63fd --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/startup_rvmdk.S @@ -0,0 +1,334 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN SysTickHandler + EXTERN UART0IntHandler + EXTERN uDMAIntHandler + EXTERN uDMAErrorHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UART0IntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD uDMAIntHandler ; uDMA Software Transfer + DCD uDMAErrorHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.c b/boards/dk-tm4c129x/udma_demo/udma_demo.c new file mode 100644 index 0000000..c2293a8 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.c @@ -0,0 +1,924 @@ +//***************************************************************************** +// +// udma_demo.c - uDMA example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_uart.h" +#include "driverlib/gpio.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/uart.h" +#include "driverlib/udma.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "utils/cpu_usage.h" +#include "utils/ustdlib.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/frame.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      uDMA (udma_demo)

      +//! +//! This example application demonstrates the use of the uDMA controller to +//! transfer data between memory buffers, and to transfer data to and from a +//! UART. The test runs for 10 seconds before exiting. +// +//***************************************************************************** + + +//***************************************************************************** +// +// The number of SysTick ticks per second used for the SysTick interrupt. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 100 + +//***************************************************************************** +// +// The size of the memory transfer source and destination buffers (in words). +// +//***************************************************************************** +#define MEM_BUFFER_SIZE 1024 + +//***************************************************************************** +// +// The size of the UART transmit and receive buffers. They do not need to be +// the same size. +// +//***************************************************************************** +#define UART_TXBUF_SIZE 256 +#define UART_RXBUF_SIZE 256 + +//***************************************************************************** +// +// The system clock frequency in Hz. +// +//***************************************************************************** +volatile uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// Graphics context used to show text on the CSTN display. +// +//***************************************************************************** +static tContext g_sContext; + +//***************************************************************************** +// +// The source and destination buffers used for memory transfers. +// +//***************************************************************************** +static uint32_t g_ui32SrcBuf[MEM_BUFFER_SIZE]; +static uint32_t g_ui32DstBuf[MEM_BUFFER_SIZE]; + +//***************************************************************************** +// +// The transmit and receive buffers used for the UART transfers. There is one +// transmit buffer and a pair of recieve ping-pong buffers. +// +//***************************************************************************** +static uint8_t g_ui8TxBuf[UART_TXBUF_SIZE]; +static uint8_t g_ui8RxBufA[UART_RXBUF_SIZE]; +static uint8_t g_ui8RxBufB[UART_RXBUF_SIZE]; + +//***************************************************************************** +// +// The count of uDMA errors. This value is incremented by the uDMA error +// handler. +// +//***************************************************************************** +static volatile uint32_t g_ui32uDMAErrCount = 0; + +//***************************************************************************** +// +// The count of times the uDMA interrupt occurred but the uDMA transfer was not +// complete. This should remain 0. +// +//***************************************************************************** +static volatile uint32_t g_ui32BadISR = 0; + +//***************************************************************************** +// +// The count of UART buffers filled, one for each ping-pong buffer. +// +//***************************************************************************** +static volatile uint32_t g_ui32RxBufACount = 0; +static volatile uint32_t g_ui32RxBufBCount = 0; + +//***************************************************************************** +// +// The count of memory uDMA transfer blocks. This value is incremented by the +// uDMA interrupt handler whenever a memory block transfer is completed. +// +//***************************************************************************** +static volatile uint32_t g_ui32MemXferCount = 0; + +//***************************************************************************** +// +// The CPU usage in percent, in 16.16 fixed point format. +// +//***************************************************************************** +static volatile uint32_t g_ui32CPUUsage; + +//***************************************************************************** +// +// The number of seconds elapsed since the start of the program. This value is +// maintained by the SysTick interrupt handler. +// +//***************************************************************************** +static volatile uint32_t g_ui32Seconds = 0; + +//***************************************************************************** +// +// The control table used by the uDMA controller. This table must be aligned +// to a 1024 byte boundary. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +uint8_t pui8ControlTable[1024]; +#elif defined(ccs) +#pragma DATA_ALIGN(pui8ControlTable, 1024) +uint8_t pui8ControlTable[1024]; +#else +uint8_t pui8ControlTable[1024] __attribute__ ((aligned(1024))); +#endif + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The interrupt handler for the SysTick timer. This handler will increment a +// seconds counter whenever the appropriate number of ticks has occurred. It +// will also call the CPU usage tick function to find the CPU usage percent. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + static uint32_t ui32TickCount = 0; + + // + // Increment the tick counter. + // + ui32TickCount++; + + // + // If the number of ticks per second has occurred, then increment the + // seconds counter. + // + if(!(ui32TickCount % SYSTICKS_PER_SECOND)) + { + g_ui32Seconds++; + } + + // + // Call the CPU usage tick function. This function will compute the amount + // of cycles used by the CPU since the last call and return the result in + // percent in fixed point 16.16 format. + // + g_ui32CPUUsage = CPUUsageTick(); +} + +//***************************************************************************** +// +// The interrupt handler for uDMA errors. This interrupt will occur if the +// uDMA encounters a bus error while trying to perform a transfer. This +// handler just increments a counter if an error occurs. +// +//***************************************************************************** +void +uDMAErrorHandler(void) +{ + uint32_t ui32Status; + + // + // Check for uDMA error bit + // + ui32Status = ROM_uDMAErrorStatusGet(); + + // + // If there is a uDMA error, then clear the error and increment + // the error counter. + // + if(ui32Status) + { + ROM_uDMAErrorStatusClear(); + g_ui32uDMAErrCount++; + } +} + +//***************************************************************************** +// +// The interrupt handler for uDMA interrupts from the memory channel. This +// interrupt will increment a counter, and then restart another memory +// transfer. +// +//***************************************************************************** +void +uDMAIntHandler(void) +{ + uint32_t ui32Mode; + + // + // Check for the primary control structure to indicate complete. + // + ui32Mode = ROM_uDMAChannelModeGet(UDMA_CHANNEL_SW); + if(ui32Mode == UDMA_MODE_STOP) + { + // + // Increment the count of completed transfers. + // + g_ui32MemXferCount++; + + // + // Configure it for another transfer. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_SW, UDMA_MODE_AUTO, + g_ui32SrcBuf, g_ui32DstBuf, + MEM_BUFFER_SIZE); + + // + // Initiate another transfer. + // + ROM_uDMAChannelEnable(UDMA_CHANNEL_SW); + ROM_uDMAChannelRequest(UDMA_CHANNEL_SW); + } + + // + // If the channel is not stopped, then something is wrong. + // + else + { + g_ui32BadISR++; + } +} + +//***************************************************************************** +// +// The interrupt handler for UART0. This interrupt will occur when a DMA +// transfer is complete using the UART0 uDMA channel. It will also be +// triggered if the peripheral signals an error. This interrupt handler will +// switch between receive ping-pong buffers A and B. It will also restart a TX +// uDMA transfer if the prior transfer is complete. This will keep the UART +// running continuously (looping TX data back to RX). +// +//***************************************************************************** +void +UART0IntHandler(void) +{ + uint32_t ui32Status; + uint32_t ui32Mode; + + // + // Read the interrupt status of the UART. + // + ui32Status = ROM_UARTIntStatus(UART0_BASE, 1); + + // + // Clear any pending status, even though there should be none since no UART + // interrupts were enabled. If UART error interrupts were enabled, then + // those interrupts could occur here and should be handled. Since uDMA is + // used for both the RX and TX, then neither of those interrupts should be + // enabled. + // + ROM_UARTIntClear(UART0_BASE, ui32Status); + + // + // Check the DMA control table to see if the ping-pong "A" transfer is + // complete. The "A" transfer uses receive buffer "A", and the primary + // control structure. + // + ui32Mode = ROM_uDMAChannelModeGet(UDMA_CHANNEL_UART0RX | UDMA_PRI_SELECT); + + // + // If the primary control structure indicates stop, that means the "A" + // receive buffer is done. The uDMA controller should still be receiving + // data into the "B" buffer. + // + if(ui32Mode == UDMA_MODE_STOP) + { + // + // Increment a counter to indicate data was received into buffer A. In + // a real application this would be used to signal the main thread that + // data was received so the main thread can process the data. + // + g_ui32RxBufACount++; + + // + // Set up the next transfer for the "A" buffer, using the primary + // control structure. When the ongoing receive into the "B" buffer is + // done, the uDMA controller will switch back to this one. This + // example re-uses buffer A, but a more sophisticated application could + // use a rotating set of buffers to increase the amount of time that + // the main thread has to process the data in the buffer before it is + // reused. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0RX | UDMA_PRI_SELECT, + UDMA_MODE_PINGPONG, + (void *)(UART0_BASE + UART_O_DR), + g_ui8RxBufA, sizeof(g_ui8RxBufA)); + } + + // + // Check the DMA control table to see if the ping-pong "B" transfer is + // complete. The "B" transfer uses receive buffer "B", and the alternate + // control structure. + // + ui32Mode = ROM_uDMAChannelModeGet(UDMA_CHANNEL_UART0RX | UDMA_ALT_SELECT); + + // + // If the alternate control structure indicates stop, that means the "B" + // receive buffer is done. The uDMA controller should still be receiving + // data into the "A" buffer. + // + if(ui32Mode == UDMA_MODE_STOP) + { + // + // Increment a counter to indicate data was received into buffer A. In + // a real application this would be used to signal the main thread that + // data was received so the main thread can process the data. + // + g_ui32RxBufBCount++; + + // + // Set up the next transfer for the "B" buffer, using the alternate + // control structure. When the ongoing receive into the "A" buffer is + // done, the uDMA controller will switch back to this one. This + // example re-uses buffer B, but a more sophisticated application could + // use a rotating set of buffers to increase the amount of time that + // the main thread has to process the data in the buffer before it is + // reused. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0RX | UDMA_ALT_SELECT, + UDMA_MODE_PINGPONG, + (void *)(UART0_BASE + UART_O_DR), + g_ui8RxBufB, sizeof(g_ui8RxBufB)); + } + + // + // If the UART0 DMA TX channel is disabled, that means the TX DMA transfer + // is done. + // + if(!ROM_uDMAChannelIsEnabled(UDMA_CHANNEL_UART0TX)) + { + // + // Start another DMA transfer to UART0 TX. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0TX | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, g_ui8TxBuf, + (void *)(UART0_BASE + UART_O_DR), + sizeof(g_ui8TxBuf)); + + // + // The uDMA TX channel must be re-enabled. + // + ROM_uDMAChannelEnable(UDMA_CHANNEL_UART0TX); + } +} + +//***************************************************************************** +// +// Initializes the UART0 peripheral and sets up the TX and RX uDMA channels. +// The UART is configured for loopback mode so that any data sent on TX will be +// received on RX. The uDMA channels are configured so that the TX channel +// will copy data from a buffer to the UART TX output. And the uDMA RX channel +// will receive any incoming data into a pair of buffers in ping-pong mode. +// +//***************************************************************************** +void +InitUART0Transfer(void) +{ + uint_fast16_t ui16Idx; + + // + // Fill the TX buffer with a simple data pattern. + // + for(ui16Idx = 0; ui16Idx < UART_TXBUF_SIZE; ui16Idx++) + { + g_ui8TxBuf[ui16Idx] = ui16Idx; + } + + // + // Enable the UART peripheral, and configure it to operate even if the CPU + // is in sleep. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0); + + // + // Configure the UART communication parameters. + // + ROM_UARTConfigSetExpClk(UART0_BASE, g_ui32SysClock, 115200, + UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | + UART_CONFIG_PAR_NONE); + + // + // Set both the TX and RX trigger thresholds to 4. This will be used by + // the uDMA controller to signal when more data should be transferred. The + // uDMA TX and RX channels will be configured so that it can transfer 4 + // bytes in a burst when the UART is ready to transfer more data. + // + ROM_UARTFIFOLevelSet(UART0_BASE, UART_FIFO_TX4_8, UART_FIFO_RX4_8); + + // + // Enable the UART for operation, and enable the uDMA interface for both TX + // and RX channels. + // + ROM_UARTEnable(UART0_BASE); + ROM_UARTDMAEnable(UART0_BASE, UART_DMA_RX | UART_DMA_TX); + + // + // This register write will set the UART to operate in loopback mode. Any + // data sent on the TX output will be received on the RX input. + // + HWREG(UART0_BASE + UART_O_CTL) |= UART_CTL_LBE; + + // + // Put the attributes in a known state for the uDMA UART0RX channel. These + // should already be disabled by default. + // + ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_UART0RX, + UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + + // + // Configure the control parameters for the primary control structure for + // the UART RX channel. The primary contol structure is used for the "A" + // part of the ping-pong receive. The transfer data size is 8 bits, the + // source address does not increment since it will be reading from a + // register. The destination address increment is byte 8-bit bytes. The + // arbitration size is set to 4 to match the RX FIFO trigger threshold. + // The uDMA controller will use a 4 byte burst transfer if possible. This + // will be somewhat more effecient that single byte transfers. + // + ROM_uDMAChannelControlSet(UDMA_CHANNEL_UART0RX | UDMA_PRI_SELECT, + UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | + UDMA_ARB_4); + + // + // Configure the control parameters for the alternate control structure for + // the UART RX channel. The alternate contol structure is used for the "B" + // part of the ping-pong receive. The configuration is identical to the + // primary/A control structure. + // + ROM_uDMAChannelControlSet(UDMA_CHANNEL_UART0RX | UDMA_ALT_SELECT, + UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | + UDMA_ARB_4); + + // + // Set up the transfer parameters for the UART RX primary control + // structure. The mode is set to ping-pong, the transfer source is the + // UART data register, and the destination is the receive "A" buffer. The + // transfer size is set to match the size of the buffer. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0RX | UDMA_PRI_SELECT, + UDMA_MODE_PINGPONG, + (void *)(UART0_BASE + UART_O_DR), + g_ui8RxBufA, sizeof(g_ui8RxBufA)); + + // + // Set up the transfer parameters for the UART RX alternate control + // structure. The mode is set to ping-pong, the transfer source is the + // UART data register, and the destination is the receive "B" buffer. The + // transfer size is set to match the size of the buffer. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0RX | UDMA_ALT_SELECT, + UDMA_MODE_PINGPONG, + (void *)(UART0_BASE + UART_O_DR), + g_ui8RxBufB, sizeof(g_ui8RxBufB)); + + // + // Put the attributes in a known state for the uDMA UART0TX channel. These + // should already be disabled by default. + // + ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_UART0TX, + UDMA_ATTR_ALTSELECT | + UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK); + + // + // Set the USEBURST attribute for the uDMA UART TX channel. This will + // force the controller to always use a burst when transferring data from + // the TX buffer to the UART. This is somewhat more effecient bus usage + // than the default which allows single or burst transfers. + // + ROM_uDMAChannelAttributeEnable(UDMA_CHANNEL_UART0TX, UDMA_ATTR_USEBURST); + + // + // Configure the control parameters for the UART TX. The uDMA UART TX + // channel is used to transfer a block of data from a buffer to the UART. + // The data size is 8 bits. The source address increment is 8-bit bytes + // since the data is coming from a buffer. The destination increment is + // none since the data is to be written to the UART data register. The + // arbitration size is set to 4, which matches the UART TX FIFO trigger + // threshold. + // + ROM_uDMAChannelControlSet(UDMA_CHANNEL_UART0TX | UDMA_PRI_SELECT, + UDMA_SIZE_8 | UDMA_SRC_INC_8 | + UDMA_DST_INC_NONE | + UDMA_ARB_4); + + // + // Set up the transfer parameters for the uDMA UART TX channel. This will + // configure the transfer source and destination and the transfer size. + // Basic mode is used because the peripheral is making the uDMA transfer + // request. The source is the TX buffer and the destination is the UART + // data register. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0TX | UDMA_PRI_SELECT, + UDMA_MODE_BASIC, g_ui8TxBuf, + (void *)(UART0_BASE + UART_O_DR), + sizeof(g_ui8TxBuf)); + + // + // Now both the uDMA UART TX and RX channels are primed to start a + // transfer. As soon as the channels are enabled, the peripheral will + // issue a transfer request and the data transfers will begin. + // + ROM_uDMAChannelEnable(UDMA_CHANNEL_UART0RX); + ROM_uDMAChannelEnable(UDMA_CHANNEL_UART0TX); + + // + // Enable the UART DMA TX/RX interrupts. + // + ROM_UARTIntEnable(UART0_BASE, UART_INT_DMATX | UART_INT_DMATX); + + // + // Enable the UART peripheral interrupts. + // + ROM_IntEnable(INT_UART0); +} + +//***************************************************************************** +// +// Initializes the uDMA software channel to perform a memory to memory uDMA +// transfer. +// +//***************************************************************************** +void +InitSWTransfer(void) +{ + uint_fast16_t ui16Idx; + + // + // Fill the source memory buffer with a simple incrementing pattern. + // + for(ui16Idx = 0; ui16Idx < MEM_BUFFER_SIZE; ui16Idx++) + { + g_ui32SrcBuf[ui16Idx] = ui16Idx; + } + + // + // Enable interrupts from the uDMA software channel. + // + ROM_IntEnable(INT_UDMA); + + // + // Put the attributes in a known state for the uDMA software channel. + // These should already be disabled by default. + // + ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_SW, + UDMA_ATTR_USEBURST | UDMA_ATTR_ALTSELECT | + (UDMA_ATTR_HIGH_PRIORITY | + UDMA_ATTR_REQMASK)); + + // + // Configure the control parameters for the SW channel. The SW channel + // will be used to transfer between two memory buffers, 32 bits at a time. + // Therefore the data size is 32 bits, and the address increment is 32 bits + // for both source and destination. The arbitration size will be set to 8, + // which causes the uDMA controller to rearbitrate after 8 items are + // transferred. This keeps this channel from hogging the uDMA controller + // once the transfer is started, and allows other channels cycles if they + // are higher priority. + // + ROM_uDMAChannelControlSet(UDMA_CHANNEL_SW | UDMA_PRI_SELECT, + UDMA_SIZE_32 | UDMA_SRC_INC_32 | UDMA_DST_INC_32 | + UDMA_ARB_8); + + // + // Set up the transfer parameters for the software channel. This will + // configure the transfer buffers and the transfer size. Auto mode must be + // used for software transfers. + // + ROM_uDMAChannelTransferSet(UDMA_CHANNEL_SW | UDMA_PRI_SELECT, + UDMA_MODE_AUTO, g_ui32SrcBuf, g_ui32DstBuf, + MEM_BUFFER_SIZE); + + // + // Now the software channel is primed to start a transfer. The channel + // must be enabled. For software based transfers, a request must be + // issued. After this, the uDMA memory transfer begins. + // + ROM_uDMAChannelEnable(UDMA_CHANNEL_SW); + ROM_uDMAChannelRequest(UDMA_CHANNEL_SW); +} + +//***************************************************************************** +// +// This example demonstrates how to use the uDMA controller to transfer data +// between memory buffers and to and from a peripheral, in this case a UART. +// The uDMA controller is configured to repeatedly transfer a block of data +// from one memory buffer to another. It is also set up to repeatedly copy a +// block of data from a buffer to the UART output. The UART data is looped +// back so the same data is received, and the uDMA controlled is configured to +// continuously receive the UART data using ping-pong buffers. +// +// The processor is put to sleep when it is not doing anything, and this allows +// collection of CPU usage data to see how much CPU is being used while the +// data transfers are ongoing. +// +//***************************************************************************** +int +main(void) +{ + static uint32_t ui32PrevSeconds; + static uint32_t ui32PrevXferCount; + static uint32_t ui32PrevUARTCount = 0; + static char pcStrBuf[40]; + uint32_t ui32CenterX; + uint32_t ui32XfersCompleted; + uint32_t ui32BytesTransferred; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "udma-demo"); + + // + // Enable peripherals to operate when CPU is in sleep. + // + ROM_SysCtlPeripheralClockGating(true); + + // + // Get the center X coordinate of the screen, since it is used a lot. + // + ui32CenterX = GrContextDpyWidthGet(&g_sContext) / 2; + + // + // Show the clock frequency on the display. + // + GrContextFontSet(&g_sContext, g_psFontCmss18b); + usnprintf(pcStrBuf, sizeof(pcStrBuf), "TM4C129X @ %u MHz", + g_ui32SysClock / 1000000); + GrStringDrawCentered(&g_sContext, pcStrBuf, -1, ui32CenterX, 40, 0); + + // + // Show static text and field labels on the display. + // + GrContextFontSet(&g_sContext, g_psFontCmss18b); + GrStringDrawCentered(&g_sContext, "uDMA Mem Transfers", -1, + ui32CenterX, 70, 0); + GrStringDrawCentered(&g_sContext, "uDMA UART Transfers", -1, + ui32CenterX, 124, 0); + + // + // Configure SysTick to occur 100 times per second, to use as a time + // reference. Enable SysTick to generate interrupts. + // + ROM_SysTickPeriodSet(g_ui32SysClock / SYSTICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Initialize the CPU usage measurement routine. + // + CPUUsageInit(g_ui32SysClock, SYSTICKS_PER_SECOND, 2); + + // + // Enable the uDMA controller at the system level. Enable it to continue + // to run while the processor is in sleep. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UDMA); + + // + // Enable the uDMA controller error interrupt. This interrupt will occur + // if there is a bus error during a transfer. + // + ROM_IntEnable(INT_UDMAERR); + + // + // Enable the uDMA controller. + // + ROM_uDMAEnable(); + + // + // Point at the control table to use for channel control structures. + // + ROM_uDMAControlBaseSet(pui8ControlTable); + + // + // Initialize the uDMA memory to memory transfers. + // + InitSWTransfer(); + + // + // Initialize the uDMA UART transfers. + // + InitUART0Transfer(); + + // + // Remember the current SysTick seconds count. + // + ui32PrevSeconds = g_ui32Seconds; + + // + // Remember the current count of memory buffer transfers. + // + ui32PrevXferCount = g_ui32MemXferCount; + + // + // Loop until 10 seconds have passed. The processor is put to sleep + // in this loop so that CPU utilization can be measured. + // + while(1) + { + // + // Check to see if one second has elapsed. If so, the make some + // updates. + // + if(g_ui32Seconds != ui32PrevSeconds) + { + // + // Print a message to the display showing the CPU usage percent. + // The fractional part of the percent value is ignored. + // + GrContextFontSet(&g_sContext, g_psFontCmss18b); + usnprintf(pcStrBuf, sizeof(pcStrBuf), "CPU utilization %2u%%", + g_ui32CPUUsage >> 16); + GrStringDrawCentered(&g_sContext, pcStrBuf, -1, + ui32CenterX, 180, 1); + + // + // Tell the user how many seconds we have to go before ending. + // + usnprintf(pcStrBuf, sizeof(pcStrBuf), " Test ends in %d seconds ", + 10 - g_ui32Seconds); + GrStringDrawCentered(&g_sContext, pcStrBuf, -1, + ui32CenterX, 220, 1); + + // + // Remember the new seconds count. + // + ui32PrevSeconds = g_ui32Seconds; + + // + // Calculate how many memory transfers have occurred since the last + // second. + // + ui32XfersCompleted = g_ui32MemXferCount - ui32PrevXferCount; + + // + // Remember the new transfer count. + // + ui32PrevXferCount = g_ui32MemXferCount; + + // + // Compute how many bytes were transferred in the memory transfer + // since the last second. + // + ui32BytesTransferred = ui32XfersCompleted * MEM_BUFFER_SIZE * 4; + + // + // Print a message to the display showing the memory transfer rate. + // + GrContextFontSet(&g_sContext, g_psFontCmss16b); + usnprintf(pcStrBuf, sizeof(pcStrBuf), " %8u Bytes/Sec ", + ui32BytesTransferred); + GrStringDrawCentered(&g_sContext, pcStrBuf, -1, + ui32CenterX, 94, 1); + + // + // Calculate how many UART transfers have occurred since the last + // second. This expression is split to prevent a compiler warning + // about undefined order of volatile accesses. + // + ui32XfersCompleted = g_ui32RxBufACount; + ui32XfersCompleted += g_ui32RxBufBCount - ui32PrevUARTCount; + + // + // Remember the new UART transfer count. This expression is split + // to prevent a compiler warning about undefined order of volatile + // accesses. + // + ui32PrevUARTCount = g_ui32RxBufACount; + ui32PrevUARTCount += g_ui32RxBufBCount; + + // + // Compute how many bytes were transferred by the UART. The number + // of bytes received is multiplied by 2 so that the TX bytes + // transferred are also accounted for. + // + ui32BytesTransferred = ui32XfersCompleted * UART_RXBUF_SIZE * 2; + + // + // Print a message to the display showing the UART transfer rate. + // + usnprintf(pcStrBuf, sizeof(pcStrBuf), " %8u Bytes/Sec ", + ui32BytesTransferred); + GrStringDrawCentered(&g_sContext, pcStrBuf, -1, + ui32CenterX, 146, 1); + } + + // + // Put the processor to sleep if there is nothing to do. This allows + // the CPU usage routine to measure the number of free CPU cycles. + // If the processor is sleeping a lot, it can be hard to connect to + // the target with the debugger. + // + ROM_SysCtlSleep(); + + // + // See if we have run long enough and exit the loop if so. + // + if(g_ui32Seconds >= 10) + { + break; + } + } + + // + // Indicate on the display that the example is stopped. + // + GrContextFontSet(&g_sContext, g_psFontCmss18b); + GrContextForegroundSet(&g_sContext, ClrRed); + GrStringDrawCentered(&g_sContext, " Stopped ", -1, + ui32CenterX, 220, 1); + + // + // Disable uDMA and UART interrupts now that the test is complete. + // + ROM_IntDisable(INT_UART0); + ROM_IntDisable(INT_UDMA); + + // + // Loop forever with the CPU not sleeping, so the debugger can connect. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.ewd b/boards/dk-tm4c129x/udma_demo/udma_demo.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.ewp b/boards/dk-tm4c129x/udma_demo/udma_demo.ewp new file mode 100644 index 0000000..7b9507d --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.ewp @@ -0,0 +1,804 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\utils\cpu_usage.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\udma_demo.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.icf b/boards/dk-tm4c129x/udma_demo/udma_demo.icf new file mode 100644 index 0000000..486555b --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// udma_demo.icf - Linker configuration file for udma_demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.ld b/boards/dk-tm4c129x/udma_demo/udma_demo.ld new file mode 100644 index 0000000..20affeb --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * udma_demo.ld - Linker configuration file for udma_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.sct b/boards/dk-tm4c129x/udma_demo/udma_demo.sct new file mode 100644 index 0000000..3d7f9bf --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; udma_demo.sct - Linker configuration file for udma_demo. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.uvopt b/boards/dk-tm4c129x/udma_demo/udma_demo.uvopt new file mode 100644 index 0000000..4b76900 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.uvopt @@ -0,0 +1,373 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + udma_demo + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\cpu_usage.c + cpu_usage.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\udma_demo.c + udma_demo.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 10 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo.uvproj b/boards/dk-tm4c129x/udma_demo/udma_demo.uvproj new file mode 100644 index 0000000..557a037 --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo.uvproj @@ -0,0 +1,454 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + udma_demo + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + udma_demo + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\udma_demo.bin .\rvmdk\udma_demo.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + udma_demo.sct + + + --entry Reset_Handler + + + + + + + + Source + + + cpu_usage.c + 1 + ..\..\..\..\utils\cpu_usage.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + udma_demo.c + 1 + .\udma_demo.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/udma_demo/udma_demo_ccs.cmd b/boards/dk-tm4c129x/udma_demo/udma_demo_ccs.cmd new file mode 100644 index 0000000..ad8cc9b --- /dev/null +++ b/boards/dk-tm4c129x/udma_demo/udma_demo_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * udma_demo_ccs.cmd - CCS linker configuration file for udma_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_bulk/Makefile b/boards/dk-tm4c129x/usb_dev_bulk/Makefile new file mode 100644 index 0000000..3fcb90d --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/Makefile @@ -0,0 +1,94 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB device bulk example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB device bulk example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_dev_bulk.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB device bulk example. +# +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/frame.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/uartstdio.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/usb_bulk_structs.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/usb_dev_bulk.o +${COMPILER}/usb_dev_bulk.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_dev_bulk.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_dev_bulk.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_dev_bulk.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_dev_bulk.axf: usb_dev_bulk.ld +SCATTERgcc_usb_dev_bulk=usb_dev_bulk.ld +ENTRY_usb_dev_bulk=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DUART_BUFFERED + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsimportspec new file mode 100644 index 0000000..6c9f4a0 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsproject b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/.cproject b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.cproject new file mode 100644 index 0000000..8c2c9d0 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/.project b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.project new file mode 100644 index 0000000..8995056 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.project @@ -0,0 +1,80 @@ + + + usb_dev_bulk + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_bulk/startup_ccs.c + + + usb_bulk_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.c + + + usb_dev_bulk.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.c + + + usb_dev_bulk_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.bin b/boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.bin new file mode 100644 index 0000000..55d54b0 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.out b/boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.out new file mode 100644 index 0000000..ee22e4e Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/ccs/Debug/usb_dev_bulk.out differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_dev_bulk/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_dev_bulk/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.bin b/boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.bin new file mode 100644 index 0000000..7f80d3d Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.out b/boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.out new file mode 100644 index 0000000..14f8f8b Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/ewarm/Exe/usb_dev_bulk.out differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.axf b/boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.axf new file mode 100644 index 0000000..0ac7241 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.bin b/boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.bin new file mode 100644 index 0000000..179ebab Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/gcc/usb_dev_bulk.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/readme.txt b/boards/dk-tm4c129x/usb_dev_bulk/readme.txt new file mode 100644 index 0000000..351243c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/readme.txt @@ -0,0 +1,43 @@ +USB Generic Bulk Device + +This example provides a generic USB device offering simple bulk data +transfer to and from the host. The device uses a vendor-specific class ID +and supports a single bulk IN endpoint and a single bulk OUT endpoint. +Data received from the host is assumed to be ASCII text and it is +echoed back with the case of all alphabetic characters swapped. + +A Windows INF file for the device is provided on the installation media and +in the C:/ti/TivaWare-C-Series-X.X/windows_drivers directory of TivaWare +releases. This INF contains information required to install the WinUSB +subsystem on WindowsXP and Vista PCs. WinUSB is a Windows subsystem +allowing user mode applications to access the USB device without the need +for a vendor-specific kernel mode driver. + +A sample Windows command-line application, usb_bulk_example, illustrating +how to connect to and communicate with the bulk device is also provided. +The application binary is installed as part of the ``Windows-side examples +for USB kits'' package (SW-USB-win) on the installation CD or via download +from http://www.ti.com/tivaware . Project files are included to allow +the examples to be built using Microsoft Visual Studio 2008. Source code +for this application can be found in directory +ti/TivaWare-for-C-Series/tools/usb_bulk_example. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.axf b/boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.axf new file mode 100644 index 0000000..807c85e Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.bin b/boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.bin new file mode 100644 index 0000000..f9d9b2f Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_bulk/rvmdk/usb_dev_bulk.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_bulk/startup_ccs.c b/boards/dk-tm4c129x/usb_dev_bulk/startup_ccs.c new file mode 100644 index 0000000..511f849 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickIntHandler(void); +extern void UARTStdioIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_bulk/startup_ewarm.c b/boards/dk-tm4c129x/usb_dev_bulk/startup_ewarm.c new file mode 100644 index 0000000..a2a01fe --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickIntHandler(void); +extern void UARTStdioIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_bulk/startup_gcc.c b/boards/dk-tm4c129x/usb_dev_bulk/startup_gcc.c new file mode 100644 index 0000000..a514361 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickIntHandler(void); +extern void UARTStdioIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_bulk/startup_rvmdk.S b/boards/dk-tm4c129x/usb_dev_bulk/startup_rvmdk.S new file mode 100644 index 0000000..e2bf0c1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN SysTickIntHandler + EXTERN UARTStdioIntHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UARTStdioIntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.c b/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.c new file mode 100644 index 0000000..fac11df --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.c @@ -0,0 +1,199 @@ +//***************************************************************************** +// +// usb_bulk_structs.c - Data structures defining this bulk USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/usb.h" +#include "usblib/usblib.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdbulk.h" +#include "usb_bulk_structs.h" + +//***************************************************************************** +// +// The languages supported by this device. +// +//***************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//***************************************************************************** +// +// The manufacturer string. +// +//***************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//***************************************************************************** +// +// The product string. +// +//***************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (19 + 1) * 2, + USB_DTYPE_STRING, + 'G', 0, 'e', 0, 'n', 0, 'e', 0, 'r', 0, 'i', 0, 'c', 0, ' ', 0, 'B', 0, + 'u', 0, 'l', 0, 'k', 0, ' ', 0, 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, + 'e', 0 +}; + +//***************************************************************************** +// +// The serial number string. +// +//***************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The data interface description string. +// +//***************************************************************************** +const uint8_t g_pui8DataInterfaceString[] = +{ + (19 + 1) * 2, + USB_DTYPE_STRING, + 'B', 0, 'u', 0, 'l', 0, 'k', 0, ' ', 0, 'D', 0, 'a', 0, 't', 0, + 'a', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, + 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + (23 + 1) * 2, + USB_DTYPE_STRING, + 'B', 0, 'u', 0, 'l', 0, 'k', 0, ' ', 0, 'D', 0, 'a', 0, 't', 0, + 'a', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, 'f', 0, 'i', 0, 'g', 0, + 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, 'o', 0, 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t *const g_ppui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, + g_pui8DataInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_ppui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//***************************************************************************** +// +// The bulk device initialization and customization structures. In this case, +// we are using USBBuffers between the bulk device class driver and the +// application code. The function pointers and callback data values are set +// to insert a buffer in each of the data channels, transmit and receive. +// +// With the buffer in place, the bulk channel callback is set to the relevant +// channel function and the callback data is set to point to the channel +// instance data. The buffer, in turn, has its callback set to the application +// function and the callback data set to our bulk instance structure. +// +//***************************************************************************** +extern const tUSBBuffer g_sTxBuffer; +extern const tUSBBuffer g_sRxBuffer; + +tUSBDBulkDevice g_sBulkDevice = +{ + USB_VID_TI_1CBE, + USB_PID_BULK, + 500, + USB_CONF_ATTR_SELF_PWR, + USBBufferEventCallback, + (void *)&g_sRxBuffer, + USBBufferEventCallback, + (void *)&g_sTxBuffer, + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS +}; + +//***************************************************************************** +// +// Receive buffer (from the USB perspective). +// +//***************************************************************************** +uint8_t g_pui8USBRxBuffer[BULK_BUFFER_SIZE]; +uint8_t g_pui8RxBufferWorkspace[USB_BUFFER_WORKSPACE_SIZE]; +const tUSBBuffer g_sRxBuffer = +{ + false, // This is a receive buffer. + RxHandler, // pfnCallback + (void *)&g_sBulkDevice, // Callback data is our device pointer. + USBDBulkPacketRead, // pfnTransfer + USBDBulkRxPacketAvailable, // pfnAvailable + (void *)&g_sBulkDevice, // pvHandle + g_pui8USBRxBuffer, // pi8Buffer + BULK_BUFFER_SIZE, // ui32BufferSize + g_pui8RxBufferWorkspace // pvWorkspace +}; + +//***************************************************************************** +// +// Transmit buffer (from the USB perspective). +// +//***************************************************************************** +uint8_t g_pui8USBTxBuffer[BULK_BUFFER_SIZE]; +uint8_t g_pui8TxBufferWorkspace[USB_BUFFER_WORKSPACE_SIZE]; +const tUSBBuffer g_sTxBuffer = +{ + true, // This is a transmit buffer. + TxHandler, // pfnCallback + (void *)&g_sBulkDevice, // Callback data is our device pointer. + USBDBulkPacketWrite, // pfnTransfer + USBDBulkTxPacketAvailable, // pfnAvailable + (void *)&g_sBulkDevice, // pvHandle + g_pui8USBTxBuffer, // pi8Buffer + BULK_BUFFER_SIZE, // ui32BufferSize + g_pui8TxBufferWorkspace // pvWorkspace +}; diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.h b/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.h new file mode 100644 index 0000000..3249890 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_bulk_structs.h @@ -0,0 +1,48 @@ +//***************************************************************************** +// +// usb_bulk_structs.h - Data structures defining this bulk USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef _USB_BULK_STRUCTS_H_ +#define _USB_BULK_STRUCTS_H_ + +//***************************************************************************** +// +// The size of the transmit and receive buffers used. 256 is chosen pretty +// much at random though the buffer should be at least twice the size of +// a maximum-sized USB packet. +// +//***************************************************************************** +#define BULK_BUFFER_SIZE 256 + +extern uint32_t RxHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgValue, void *pvMsgData); +extern uint32_t TxHandler(void *pvi32CBData, uint32_t ui32Event, + uint32_t ui32MsgValue, void *pvMsgData); + +extern const tUSBBuffer g_sTxBuffer; +extern const tUSBBuffer g_sRxBuffer; +extern tUSBDBulkDevice g_sBulkDevice; +extern uint8_t g_pui8USBTxBuffer[]; +extern uint8_t g_pui8USBRxBuffer[]; + +#endif diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.c b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.c new file mode 100644 index 0000000..3c08376 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.c @@ -0,0 +1,655 @@ +//***************************************************************************** +// +// usb_dev_bulk.c - Main routines for the generic bulk device example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdbulk.h" +#include "utils/uartstdio.h" +#include "utils/ustdlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "usb_bulk_structs.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Generic Bulk Device (usb_dev_bulk)

      +//! +//! This example provides a generic USB device offering simple bulk data +//! transfer to and from the host. The device uses a vendor-specific class ID +//! and supports a single bulk IN endpoint and a single bulk OUT endpoint. +//! Data received from the host is assumed to be ASCII text and it is +//! echoed back with the case of all alphabetic characters swapped. +//! +//! A Windows INF file for the device is provided on the installation media and +//! in the C:/ti/TivaWare-C-Series-X.X/windows_drivers directory of TivaWare +//! releases. This INF contains information required to install the WinUSB +//! subsystem on WindowsXP and Vista PCs. WinUSB is a Windows subsystem +//! allowing user mode applications to access the USB device without the need +//! for a vendor-specific kernel mode driver. +//! +//! A sample Windows command-line application, usb_bulk_example, illustrating +//! how to connect to and communicate with the bulk device is also provided. +//! The application binary is installed as part of the ``Windows-side examples +//! for USB kits'' package (SW-USB-win) on the installation CD or via download +//! from http://www.ti.com/tivaware . Project files are included to allow +//! the examples to be built using Microsoft Visual Studio 2008. Source code +//! for this application can be found in directory +//! ti/TivaWare-for-C-Series/tools/usb_bulk_example. +// +//***************************************************************************** + + +//***************************************************************************** +// +// The system tick rate expressed both as ticks per second and a millisecond +// period. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 100 +#define SYSTICK_PERIOD_MS (1000 / SYSTICKS_PER_SECOND) + +//***************************************************************************** +// +// The global system tick counter. +// +//***************************************************************************** +volatile uint32_t g_ui32SysTickCount = 0; + +//***************************************************************************** +// +// Variables tracking transmit and receive counts. +// +//***************************************************************************** +volatile uint32_t g_ui32TxCount = 0; +volatile uint32_t g_ui32RxCount = 0; +#ifdef DEBUG +uint32_t g_ui32UARTRxErrors = 0; +#endif + +//***************************************************************************** +// +// Debug-related definitions and declarations. +// +// Debug output is available via UART0 if DEBUG is defined during build. +// +//***************************************************************************** +#ifdef DEBUG +//***************************************************************************** +// +// Map all debug print calls to UARTprintf in debug builds. +// +//***************************************************************************** +#define DEBUG_PRINT UARTprintf + +#else + +//***************************************************************************** +// +// Compile out all debug print calls in release builds. +// +//***************************************************************************** +#define DEBUG_PRINT while(0) ((int32_t (*)(char *, ...))0) +#endif + +//***************************************************************************** +// +// Graphics context used to show text on the color LCD display. +// +//***************************************************************************** +tContext g_sContext; +#define TEXT_FONT g_psFontCmss18b + +//***************************************************************************** +// +// Flags used to pass commands from interrupt context to the main loop. +// +//***************************************************************************** +#define COMMAND_PACKET_RECEIVED 0x00000001 +#define COMMAND_STATUS_UPDATE 0x00000002 + +volatile uint32_t g_ui32Flags = 0; +char *g_pcStatus; + +//***************************************************************************** +// +// Global flag indicating that a USB configuration has been set. +// +//***************************************************************************** +static volatile bool g_bUSBConfigured = false; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ + UARTprintf("Error at line %d of %s\n", ui32Line, pcFilename); + while(1) + { + } +} +#endif + +//***************************************************************************** +// +// Interrupt handler for the system tick counter. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + // + // Update our system tick counter. + // + g_ui32SysTickCount++; +} + +//***************************************************************************** +// +// Receive new data and echo it back to the host. +// +// \param psDevice points to the instance data for the device whose data is to +// be processed. +// \param pi8Data points to the newly received data in the USB receive buffer. +// \param ui32NumBytes is the number of bytes of data available to be processed. +// +// This function is called whenever we receive a notification that data is +// available from the host. We read the data, byte-by-byte and swap the case +// of any alphabetical characters found then write it back out to be +// transmitted back to the host. +// +// \return Returns the number of bytes of data processed. +// +//***************************************************************************** +static uint32_t +EchoNewDataToHost(tUSBDBulkDevice *psDevice, uint8_t *pi8Data, + uint_fast32_t ui32NumBytes) +{ + uint_fast32_t ui32Loop, ui32Space, ui32Count; + uint_fast32_t ui32ReadIndex; + uint_fast32_t ui32WriteIndex; + tUSBRingBufObject sTxRing; + + // + // Get the current buffer information to allow us to write directly to + // the transmit buffer (we already have enough information from the + // parameters to access the receive buffer directly). + // + USBBufferInfoGet(&g_sTxBuffer, &sTxRing); + + // + // How much space is there in the transmit buffer? + // + ui32Space = USBBufferSpaceAvailable(&g_sTxBuffer); + + // + // How many characters can we process this time round? + // + ui32Loop = (ui32Space < ui32NumBytes) ? ui32Space : ui32NumBytes; + ui32Count = ui32Loop; + + // + // Update our receive counter. + // + g_ui32RxCount += ui32NumBytes; + + // + // Dump a debug message. + // + DEBUG_PRINT("Received %d bytes\n", ui32NumBytes); + + // + // Set up to process the characters by directly accessing the USB buffers. + // + ui32ReadIndex = (uint32_t)(pi8Data - g_pui8USBRxBuffer); + ui32WriteIndex = sTxRing.ui32WriteIndex; + + while(ui32Loop) + { + // + // Copy from the receive buffer to the transmit buffer converting + // character case on the way. + // + + // + // Is this a lower case character? + // + if((g_pui8USBRxBuffer[ui32ReadIndex] >= 'a') && + (g_pui8USBRxBuffer[ui32ReadIndex] <= 'z')) + { + // + // Convert to upper case and write to the transmit buffer. + // + g_pui8USBTxBuffer[ui32WriteIndex] = + (g_pui8USBRxBuffer[ui32ReadIndex] - 'a') + 'A'; + } + else + { + // + // Is this an upper case character? + // + if((g_pui8USBRxBuffer[ui32ReadIndex] >= 'A') && + (g_pui8USBRxBuffer[ui32ReadIndex] <= 'Z')) + { + // + // Convert to lower case and write to the transmit buffer. + // + g_pui8USBTxBuffer[ui32WriteIndex] = + (g_pui8USBRxBuffer[ui32ReadIndex] - 'Z') + 'z'; + } + else + { + // + // Copy the received character to the transmit buffer. + // + g_pui8USBTxBuffer[ui32WriteIndex] = + g_pui8USBRxBuffer[ui32ReadIndex]; + } + } + + // + // Move to the next character taking care to adjust the pointer for + // the buffer wrap if necessary. + // + ui32WriteIndex++; + ui32WriteIndex = + (ui32WriteIndex == BULK_BUFFER_SIZE) ? 0 : ui32WriteIndex; + + ui32ReadIndex++; + ui32ReadIndex = (ui32ReadIndex == BULK_BUFFER_SIZE) ? 0 : ui32ReadIndex; + + ui32Loop--; + } + + // + // We've processed the data in place so now send the processed data + // back to the host. + // + USBBufferDataWritten(&g_sTxBuffer, ui32Count); + + DEBUG_PRINT("Wrote %d bytes\n", ui32Count); + + // + // We processed as much data as we can directly from the receive buffer so + // we need to return the number of bytes to allow the lower layer to + // update its read pointer appropriately. + // + return(ui32Count); +} + +//***************************************************************************** +// +// Shows the status string on the display. +// +// \param psContext is a pointer to the graphics context representing the +// display. +// \param pi8Status is a pointer to the string to be shown. +// +//***************************************************************************** +void +DisplayStatus(tContext *psContext, char *pcStatus) +{ + tRectangle sRectLine; + int32_t i32Y; + + // + // Calculate the Y coordinate of the top left of the character cell + // for our line of text. + // + i32Y = (GrContextDpyHeightGet(psContext) / 4) - + (GrFontHeightGet(TEXT_FONT) / 2); + + // + // Determine the bounding rectangle for this line of text. We add 4 pixels + // to the height just to ensure that we clear a couple of pixels above and + // below the line of text. + // + sRectLine.i16XMin = 0; + sRectLine.i16XMax = GrContextDpyWidthGet(psContext) - 1; + sRectLine.i16YMin = i32Y; + sRectLine.i16YMax = i32Y + GrFontHeightGet(TEXT_FONT) + 3; + + // + // Clear the line with black. + // + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(psContext, &sRectLine); + + // + // Draw the new status string + // + DEBUG_PRINT("%s\n", pcStatus); + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(psContext, pcStatus, -1, + GrContextDpyWidthGet(psContext) / 2, + GrContextDpyHeightGet(psContext) / 4 , false); +} + +//***************************************************************************** +// +// Handles bulk driver notifications related to the transmit channel (data to +// the USB host). +// +// \param pvCBData is the client-supplied callback pointer for this channel. +// \param ulEvent identifies the event we are being notified about. +// \param ulMsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the bulk driver to notify us of any events +// related to operation of the transmit data channel (the IN channel carrying +// data to the USB host). +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +TxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + // + // We are not required to do anything in response to any transmit event + // in this example. All we do is update our transmit counter. + // + if(ui32Event == USB_EVENT_TX_COMPLETE) + { + g_ui32TxCount += ui32MsgValue; + } + + // + // Dump a debug message. + // + DEBUG_PRINT("TX complete %d\n", ui32MsgValue); + + return(0); +} + +//***************************************************************************** +// +// Handles bulk driver notifications related to the receive channel (data from +// the USB host). +// +// \param pvCBData is the client-supplied callback pointer for this channel. +// \param ui32Event identifies the event we are being notified about. +// \param ui32MsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the bulk driver to notify us of any events +// related to operation of the receive data channel (the OUT channel carrying +// data from the USB host). +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +RxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + // + // Which event are we being sent? + // + switch(ui32Event) + { + // + // We are connected to a host and communication is now possible. + // + case USB_EVENT_CONNECTED: + { + g_bUSBConfigured = true; + g_pcStatus = "Host connected."; + g_ui32Flags |= COMMAND_STATUS_UPDATE; + + // + // Flush our buffers. + // + USBBufferFlush(&g_sTxBuffer); + USBBufferFlush(&g_sRxBuffer); + + break; + } + + // + // The host has disconnected. + // + case USB_EVENT_DISCONNECTED: + { + g_bUSBConfigured = false; + g_pcStatus = "Host disconnected."; + g_ui32Flags |= COMMAND_STATUS_UPDATE; + break; + } + + // + // A new packet has been received. + // + case USB_EVENT_RX_AVAILABLE: + { + tUSBDBulkDevice *psDevice; + + // + // Get a pointer to our instance data from the callback data + // parameter. + // + psDevice = (tUSBDBulkDevice *)pvCBData; + + // + // Read the new packet and echo it back to the host. + // + return(EchoNewDataToHost(psDevice, pvMsgData, ui32MsgValue)); + } + + // + // Ignore SUSPEND and RESUME for now. + // + case USB_EVENT_SUSPEND: + case USB_EVENT_RESUME: + break; + + // + // Ignore all other events and return 0. + // + default: + break; + } + + return(0); +} + +//***************************************************************************** +// +// This is the main application entry function. +// +//***************************************************************************** +int +main(void) +{ + uint_fast32_t ui32TxCount; + uint_fast32_t ui32RxCount; + char pcBuffer[16]; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-dev-bulk"); + +#ifdef DEBUG + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, ui32SysClock); +#endif + + // + // Not configured initially. + // + g_bUSBConfigured = false; + + // + // Show the various static text elements on the color STN display. + // + GrContextFontSet(&g_sContext, TEXT_FONT); + GrStringDraw(&g_sContext, "Tx bytes:", -1, 110, 100, false); + GrStringDraw(&g_sContext, "Rx bytes:", -1, 110, 130, false); + + // + // Enable the system tick. + // + ROM_SysTickPeriodSet(ui32SysClock / SYSTICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Show the application name on the display and UART output. + // + DEBUG_PRINT("\nTiva C Series USB bulk device example\n"); + DEBUG_PRINT("---------------------------------\n\n"); + + // + // Tell the user what we are up to. + // + DisplayStatus(&g_sContext, " Configuring USB... "); + + // + // Initialize the transmit and receive buffers. + // + USBBufferInit(&g_sTxBuffer); + USBBufferInit(&g_sRxBuffer); + + // + // Initialize the USB stack for device mode. + // + USBStackModeSet(0, eUSBModeDevice, 0); + + // + // Pass our device information to the USB library and place the device + // on the bus. + // + USBDBulkInit(0, &g_sBulkDevice); + + // + // Wait for initial configuration to complete. + // + DisplayStatus(&g_sContext, "Waiting for host..."); + + // + // Clear our local byte counters. + // + ui32RxCount = 0; + ui32TxCount = 0; + + // + // Main application loop. + // + while(1) + { + + // + // Have we been asked to update the status display? + // + if(g_ui32Flags & COMMAND_STATUS_UPDATE) + { + // + // Clear the command flag + // + g_ui32Flags &= ~COMMAND_STATUS_UPDATE; + DisplayStatus(&g_sContext, g_pcStatus); + } + + // + // Has there been any transmit traffic since we last checked? + // + if(ui32TxCount != g_ui32TxCount) + { + // + // Take a snapshot of the latest transmit count. + // + ui32TxCount = g_ui32TxCount; + + // + // Update the display of bytes transmitted by the UART. + // + usnprintf(pcBuffer, 16, " %d ", ui32TxCount); + GrStringDraw(&g_sContext, pcBuffer, -1, 190, 100, true); + } + + // + // Has there been any receive traffic since we last checked? + // + if(ui32RxCount != g_ui32RxCount) + { + // + // Take a snapshot of the latest receive count. + // + ui32RxCount = g_ui32RxCount; + + // + // Update the display of bytes received by the UART. + // + usnprintf(pcBuffer, 16, " %d ", ui32RxCount); + GrStringDraw(&g_sContext, pcBuffer, -1, 190, 130, true); + } + } +} diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewd b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewp b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewp new file mode 100644 index 0000000..41dce5d --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ewp @@ -0,0 +1,811 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\usb_bulk_structs.c + + + $PROJ_DIR$\usb_dev_bulk.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.icf b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.icf new file mode 100644 index 0000000..4097f05 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_dev_bulk.icf - Linker configuration file for usb_dev_bulk. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ld b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ld new file mode 100644 index 0000000..3694939 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_dev_bulk.ld - Linker configuration file for usb_dev_bulk. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.sct b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.sct new file mode 100644 index 0000000..8b0f720 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_dev_bulk.sct - Linker configuration file for usb_dev_bulk. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvopt b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvopt new file mode 100644 index 0000000..dda4eee --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvopt @@ -0,0 +1,401 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_dev_bulk + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_bulk_structs.c + usb_bulk_structs.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_bulk.c + usb_dev_bulk.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 12 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvproj b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvproj new file mode 100644 index 0000000..4e0d7e4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk.uvproj @@ -0,0 +1,464 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_dev_bulk + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_dev_bulk + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_dev_bulk.bin .\rvmdk\usb_dev_bulk.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 UART_BUFFERED + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_dev_bulk.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + usb_bulk_structs.c + 1 + .\usb_bulk_structs.c + + + usb_dev_bulk.c + 1 + .\usb_dev_bulk.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk_ccs.cmd b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk_ccs.cmd new file mode 100644 index 0000000..f0821ed --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_bulk/usb_dev_bulk_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_dev_bulk_ccs.cmd - CCS linker configuration file for usb_dev_bulk. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_chid/Makefile b/boards/dk-tm4c129x/usb_dev_chid/Makefile new file mode 100644 index 0000000..35b1455 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/Makefile @@ -0,0 +1,96 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB composite device keyboard mouse example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB composite device keyboard mouse example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_dev_chid.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB composite device keyboard mouse example. +# +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/frame.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/touch.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/ui.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/usb_dev_chid.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/usb_keyboard.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/usb_mouse.o +${COMPILER}/usb_dev_chid.axf: ${COMPILER}/usb_structs.o +${COMPILER}/usb_dev_chid.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_dev_chid.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_dev_chid.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_dev_chid.axf: usb_dev_chid.ld +SCATTERgcc_usb_dev_chid=usb_dev_chid.ld +ENTRY_usb_dev_chid=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DUART_BUFFERED + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsimportspec new file mode 100644 index 0000000..ad87d37 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsimportspec @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsproject b/boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/.cproject b/boards/dk-tm4c129x/usb_dev_chid/ccs/.cproject new file mode 100644 index 0000000..c5939e5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/.project b/boards/dk-tm4c129x/usb_dev_chid/ccs/.project new file mode 100644 index 0000000..ff9589b --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/.project @@ -0,0 +1,90 @@ + + + usb_dev_chid + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/startup_ccs.c + + + ui.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/ui.c + + + usb_dev_chid.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.c + + + usb_dev_chid_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid_ccs.cmd + + + usb_keyboard.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/usb_keyboard.c + + + usb_mouse.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/usb_mouse.c + + + usb_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_chid/usb_structs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_dev_chid/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.bin b/boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.bin new file mode 100644 index 0000000..1afab23 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.out b/boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.out new file mode 100644 index 0000000..f7f89a6 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/ccs/Debug/usb_dev_chid.out differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_dev_chid/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_dev_chid/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_dev_chid/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.bin b/boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.bin new file mode 100644 index 0000000..e81065d Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.out b/boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.out new file mode 100644 index 0000000..59834a2 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/ewarm/Exe/usb_dev_chid.out differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.axf b/boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.axf new file mode 100644 index 0000000..45ac7d9 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.bin b/boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.bin new file mode 100644 index 0000000..2adbee4 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/gcc/usb_dev_chid.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/readme.txt b/boards/dk-tm4c129x/usb_dev_chid/readme.txt new file mode 100644 index 0000000..1360d27 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/readme.txt @@ -0,0 +1,31 @@ +USB Composite HID Keyboard Mouse Device + +This example application turns the evaluation board into a composite USB +keyboard and mouse example using the Human Interface Device class. The +color LCD displays a blank area which acts as a mouse touchpad. The button +on the bottom of the screen acts as a toggle between keyboard and mouse +mode. Pressing it toggles the screen to keyboard mode and allows keys +to be sent to the USB host. The board status LED is used to indicate the +current Caps Lock state and is updated in response to pressing the ``Caps'' +key on the virtual keyboard or any other keyboard attached to the same USB +host system. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.axf b/boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.axf new file mode 100644 index 0000000..9513e58 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.bin b/boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.bin new file mode 100644 index 0000000..dd96634 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_chid/rvmdk/usb_dev_chid.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_chid/startup_ccs.c b/boards/dk-tm4c129x/usb_dev_chid/startup_ccs.c new file mode 100644 index 0000000..df1d903 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/startup_ewarm.c b/boards/dk-tm4c129x/usb_dev_chid/startup_ewarm.c new file mode 100644 index 0000000..cab0d61 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/startup_gcc.c b/boards/dk-tm4c129x/usb_dev_chid/startup_gcc.c new file mode 100644 index 0000000..3967484 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/startup_rvmdk.S b/boards/dk-tm4c129x/usb_dev_chid/startup_rvmdk.S new file mode 100644 index 0000000..aa300ff --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickIntHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_dev_chid/ui.c b/boards/dk-tm4c129x/usb_dev_chid/ui.c new file mode 100644 index 0000000..688b6a1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ui.c @@ -0,0 +1,718 @@ +//***************************************************************************** +// +// ui.c - User interface code for the USB composite HID keyboard/mouse example. +// This file seperates out the USB library accesses and the general hardware +// access and solely handles the user interface. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/keyboard.h" +#include "grlib/pushbutton.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "ui.h" + +//***************************************************************************** +// +// Global graphics context. +// +//***************************************************************************** +static tContext g_sContext; + +static void ToggleMode(tWidget *psWidget); +static void Status1(tWidget *psWidget); +static void Status2(tWidget *psWidget); +static void Status3(tWidget *psWidget); + +//***************************************************************************** +// +// Defines for the basic screen area used by the application. +// +//***************************************************************************** +#define STATUS_HEIGHT 40 +#define BG_MIN_X 7 +#define BG_MAX_X (320 - 8) +#define BG_MIN_Y 24 +#define BG_MAX_Y (240 - 8) +#define BUTTON_HEIGHT (STATUS_HEIGHT - 8) +#define BG_COLOR_SETTINGS ClrGray +#define BG_COLOR_MAIN ClrBlack + +//***************************************************************************** +// +// The global UI state. +// +//***************************************************************************** +static struct +{ + uint32_t ui32Indicators; +} +g_sUIState; + +//***************************************************************************** +// +// The defined values used with ui32Indicators. +// +//***************************************************************************** +#define UI_STATUS_MS_RIGHT 0x00000001 +#define UI_STATUS_MS_MIDDLE 0x00000002 +#define UI_STATUS_MS_LEFT 0x00000004 + +#define UI_STATUS_KEY_CAPS 0x00000001 +#define UI_STATUS_KEY_SCROLL 0x00000002 +#define UI_STATUS_KEY_NUM 0x00000004 + +#define UI_STATUS_UPDATE 0x80000000 +#define UI_STATUS_KEYBOARD 0x00000008 +#define UI_STATUS_MOUSE 0x00000000 + +//***************************************************************************** +// +// The graphical widgets that are used by this example. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; +extern tCanvasWidget g_sStatusPanel; + +// +// The keyboard widget used by the application. +// +Keyboard(g_sKeyboard, &g_sBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 2, BG_MIN_Y + 4, 300, 160, + KEYBOARD_STYLE_FILL | KEYBOARD_STYLE_AUTO_REPEAT | + KEYBOARD_STYLE_PRESS_NOTIFY | KEYBOARD_STYLE_RELEASE_NOTIFY | + KEYBOARD_STYLE_BG, + ClrBlack, ClrGray, ClrDarkGray, ClrGray, ClrBlack, g_psFontCmtt14, + 100, 100, NUM_KEYBOARD_US_ENGLISH, g_psKeyboardUSEnglish, UIKeyEvent); + +// +// The full background for the application. +// +Canvas(g_sBackground, WIDGET_ROOT, 0, &g_sStatusPanel, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MIN_Y, + BG_MAX_X - BG_MIN_X, BG_MAX_Y - BG_MIN_Y - STATUS_HEIGHT, + CANVAS_STYLE_FILL, ClrBlack, ClrWhite, ClrWhite, 0, 0, 0 ,0 ); + + +// +// Right button in mouse mode and Num Lock in keyboard mode. +// +RectangularButton(g_sStatus3, &g_sStatusPanel, 0, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 250, + BG_MAX_Y - STATUS_HEIGHT + 4, 50, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | + PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, ClrDarkGray, 0, + ClrBlack, g_psFontCmss16, "Right", 0, 0, 0 ,0 , Status3); + +// +// Middle button in mouse mode and Scroll Lock in keyboard mode. +// +RectangularButton(g_sStatus2, &g_sStatusPanel, &g_sStatus3, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 196, + BG_MAX_Y - STATUS_HEIGHT + 4, 50, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | + PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, ClrDarkGray, 0, + ClrBlack, g_psFontCmss16, "Middle", 0, 0, 0 ,0 , Status2); + +// +// Left button in mouse mode and Caps Lock in keyboard mode. +// +RectangularButton(g_sStatus1, &g_sStatusPanel, &g_sStatus2, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 142, + BG_MAX_Y - STATUS_HEIGHT + 4, 50, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | + PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, ClrDarkGray, 0, + ClrBlack, g_psFontCmss16, "Left", 0, 0, 0 ,0 , Status1); + +// +// The mode toggle button. +// +RectangularButton(g_sToggle, &g_sStatusPanel, &g_sStatus1, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 4, + BG_MAX_Y - STATUS_HEIGHT + 4, 80, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, + ClrDarkGray, 0, ClrBlack, g_psFontCmss16, "Mouse", 0, 0, 0 ,0 , + ToggleMode); + +// +// Background of the status area behind the buttons. +// +Canvas(g_sStatusPanel, &g_sBackground, 0, &g_sToggle, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MAX_Y - STATUS_HEIGHT, + BG_MAX_X - BG_MIN_X, STATUS_HEIGHT, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_TOP, ClrGray, ClrWhite, ClrBlack, 0, + 0, 0, 0); + +tUIState g_eState; + +//**************************************************************************** +// +// This is the callback from the graphical keyboard that is defined above as +// g_sKeyboard global. +// +//**************************************************************************** +void +UIKeyEvent(tWidget *psWidget, uint32_t ui32Key, uint32_t ui32Event) +{ + if(ui32Event == KEYBOARD_EVENT_PRESS) + { + USBKeyboardUpdate(0, ui32Key, true); + + } + else if(ui32Event == KEYBOARD_EVENT_RELEASE) + { + USBKeyboardUpdate(0, ui32Key, false); + } +} + +//**************************************************************************** +// +// Handles updating the Caps Lock status when in keyboard mode. +// +//**************************************************************************** +void +UIUpdateCapsLock(void) +{ + if(g_sUIState.ui32Indicators & UI_STATUS_KEY_CAPS) + { + PushButtonTextSet(&g_sStatus1, "CAPS"); + PushButtonTextColorSet(&g_sStatus1, ClrRed); + } + else + { + PushButtonTextSet(&g_sStatus1, "caps"); + PushButtonTextColorSet(&g_sStatus1, ClrBlack); + } + + WidgetPaint((tWidget *)&g_sStatus1); +} + +void +UICapsLock(bool bEnable) +{ + if(bEnable) + { + // + // Enable caps lock. + // + g_sUIState.ui32Indicators |= UI_STATUS_KEY_CAPS; + } + else + { + // + // Disable caps lock. + // + g_sUIState.ui32Indicators &= ~UI_STATUS_KEY_CAPS; + } + + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + UIUpdateCapsLock(); + } +} + +//**************************************************************************** +// +// Handles updating the Scroll Lock status when in keyboard mode. +// +//**************************************************************************** +void +UIUpdateScrollLock(void) +{ + if(g_sUIState.ui32Indicators & UI_STATUS_KEY_SCROLL) + { + PushButtonTextSet(&g_sStatus2, "SCROLL"); + PushButtonTextColorSet(&g_sStatus2, ClrRed); + } + else + { + PushButtonTextSet(&g_sStatus2, "scroll"); + PushButtonTextColorSet(&g_sStatus2, ClrBlack); + } + + WidgetPaint((tWidget *)&g_sStatus2); +} + +void +UIScrollLock(bool bEnable) +{ + if(bEnable) + { + // + // Enable caps lock. + // + g_sUIState.ui32Indicators |= UI_STATUS_KEY_SCROLL; + } + else + { + // + // Disable caps lock. + // + g_sUIState.ui32Indicators &= ~UI_STATUS_KEY_SCROLL; + } + + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + UIUpdateScrollLock(); + } +} + +//**************************************************************************** +// +// Handles updating the Num Lock status when in keyboard mode. +// +//**************************************************************************** +void +UIUpdateNumLock(void) +{ + if(g_sUIState.ui32Indicators & UI_STATUS_KEY_NUM) + { + PushButtonTextSet(&g_sStatus3, "NUM"); + PushButtonTextColorSet(&g_sStatus3, ClrRed); + } + else + { + PushButtonTextSet(&g_sStatus3, "num"); + PushButtonTextColorSet(&g_sStatus3, ClrBlack); + } + + WidgetPaint((tWidget *)&g_sStatus3); +} + +void +UINumLock(bool bEnable) +{ + if(bEnable) + { + // + // Enable caps lock. + // + g_sUIState.ui32Indicators |= UI_STATUS_KEY_NUM; + } + else + { + // + // Disable caps lock. + // + g_sUIState.ui32Indicators &= ~UI_STATUS_KEY_NUM; + } + + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + UIUpdateNumLock(); + } +} + +//**************************************************************************** +// +// Handles updates to the current status. +// +//**************************************************************************** +void +UIUpdateStatus(uint32_t ui32Indicators) +{ + if(g_eState == UI_NOT_CONNECTED) + { + PushButtonTextSet(&g_sToggle, "---"); + + PushButtonTextColorSet(&g_sStatus1, ClrBlack); + PushButtonTextSet(&g_sStatus1, "---"); + + PushButtonTextColorSet(&g_sStatus2, ClrBlack); + PushButtonTextSet(&g_sStatus2, "---"); + + PushButtonTextColorSet(&g_sStatus3, ClrBlack); + PushButtonTextSet(&g_sStatus3, "---"); + + if(ui32Indicators & UI_STATUS_KEYBOARD) + { + WidgetRemove((tWidget *)&g_sKeyboard); + } + + WidgetPaint((tWidget *)&g_sBackground); + + return; + } + + // + // See if there is a change to update. + // + if(ui32Indicators == g_sUIState.ui32Indicators) + { + return; + } + + // + // Was there a global change in the keyboard/mouse state. + // + if(((ui32Indicators ^ g_sUIState.ui32Indicators) & UI_STATUS_KEYBOARD) || + (ui32Indicators & UI_STATUS_UPDATE)) + { + // + // Update to keyboard mode or mouse mode for the UI. + // + if(ui32Indicators & UI_STATUS_KEYBOARD) + { + PushButtonTextSet(&g_sToggle, "Keyboard"); + WidgetPaint((tWidget *)&g_sToggle); + UIUpdateCapsLock(); + UIUpdateScrollLock(); + UIUpdateNumLock(); + + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sKeyboard); + + WidgetPaint((tWidget *)&g_sKeyboard); + } + else + { + // + // Switch back to a mouse UI. + // + PushButtonTextSet(&g_sToggle, "Mouse"); + + PushButtonTextColorSet(&g_sStatus1, ClrBlack); + PushButtonTextSet(&g_sStatus1, "Left"); + + PushButtonTextColorSet(&g_sStatus2, ClrBlack); + PushButtonTextSet(&g_sStatus2, "Middle"); + + PushButtonTextColorSet(&g_sStatus3, ClrBlack); + PushButtonTextSet(&g_sStatus3, "Right"); + + WidgetRemove((tWidget *)&g_sKeyboard); + + WidgetPaint((tWidget *)&g_sBackground); + } + } + + // + // Update the new state of the indicators. + // + g_sUIState.ui32Indicators = ui32Indicators & ~UI_STATUS_UPDATE; +} + + +//**************************************************************************** +// +// Called by the mode toggle button in the g_sToggle variable. +// +//**************************************************************************** +static void +ToggleMode(tWidget *psWidget) +{ + if(g_eState == UI_CONNECTED) + { + UIUpdateStatus(g_sUIState.ui32Indicators ^ UI_STATUS_KEYBOARD); + } +} + +void +UIMode(tUIState eState) +{ + if(g_eState != UI_CONNECTED) + { + if(eState == UI_CONNECTED) + { + UIUpdateStatus(g_sUIState.ui32Indicators | UI_STATUS_UPDATE); + } + } + else if(g_eState == UI_CONNECTED) + { + if(eState == UI_NOT_CONNECTED) + { + UIUpdateStatus(g_sUIState.ui32Indicators & ~UI_STATUS_UPDATE); + } + } + + g_eState = eState; + UIUpdateStatus(g_sUIState.ui32Indicators); +} + +//**************************************************************************** +// +// Called by the button code controlled by the g_sStatus1 variable. +// +//**************************************************************************** +static void +Status1(tWidget *psWidget) +{ + if(g_eState == UI_CONNECTED) + { + // + // Toggle the state of the first status button. + // + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + // + // Toggle the state of the caps lock. + // + g_sUIState.ui32Indicators ^= UI_STATUS_KEY_CAPS; + + UIUpdateCapsLock(); + + USBKeyboardUpdate(0, UI_CAPS_LOCK, true); + } + else + { + USBMouseUpdate(0, 0, 0x01); + } + } +} + +//**************************************************************************** +// +// Called by the button code controlled by the g_sStatus2 variable. +// +//**************************************************************************** +static void +Status2(tWidget *psWidget) +{ + if(g_eState == UI_CONNECTED) + { + // + // Toggle the state of the first status button. + // + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + // + // Toggle the state of the caps lock. + // + g_sUIState.ui32Indicators ^= UI_STATUS_KEY_SCROLL; + + UIUpdateScrollLock(); + + USBKeyboardUpdate(0, UI_SCROLL_LOCK, true); + } + else + { + USBMouseUpdate(0, 0, 0x04); + } + } +} + +//**************************************************************************** +// +// Called by the button code controlled by the g_sStatus3 variable. +// +//**************************************************************************** +static void +Status3(tWidget *psWidget) +{ + if(g_eState == UI_CONNECTED) + { + // + // Toggle the state of the first status button. + // + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + // + // Toggle the state of the caps lock. + // + g_sUIState.ui32Indicators ^= UI_STATUS_KEY_NUM; + + UIUpdateNumLock(); + USBKeyboardUpdate(0, UI_NUM_LOCK, true); + } + else + { + USBMouseUpdate(0, 0, 0x02); + } + } +} + +static struct +{ + int32_t i32XLast; + int32_t i32YLast; + int8_t i8Buttons; + bool bPressed; +} +sMouseState; + +volatile uint32_t ui32PressCount; + +//***************************************************************************** +// +// The callback function that is called by the touch screen driver to indicate +// activity on the touch screen. +// +//***************************************************************************** +int32_t +UITouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + int32_t i32XDiff, i32YDiff; + + if(((g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) == 0) && + ((i32Y > BG_MIN_Y) && (i32Y < (BG_MAX_Y - STATUS_HEIGHT)))) + { + + switch(ui32Message) + { + // + // . + // + case WIDGET_MSG_PTR_DOWN: + { + sMouseState.i32XLast = i32X; + sMouseState.i32YLast = i32Y; + + sMouseState.bPressed = true; + + ui32PressCount = g_ui32SysTickCount; + break; + } + + + // The touchscreen is no longer being pressed. + // + case WIDGET_MSG_PTR_UP: + { + sMouseState.bPressed = false; + + if(ui32PressCount > g_ui32SysTickCount) + { + ui32PressCount = ui32PressCount - g_ui32SysTickCount; + } + else + { + ui32PressCount = g_ui32SysTickCount - ui32PressCount; + } + + if(ui32PressCount < 20) + { + // + // Ensure that all buttons are not pressed. + // + sMouseState.i8Buttons = 0x01; + } + else + { + // + // Ensure that all buttons are not pressed. + // + sMouseState.i8Buttons = 0x00; + } + + // + // Send the report back to the host. + // + USBMouseUpdate(0, 0, sMouseState.i8Buttons); + + break; + } + + // + // The touch position has moved. + // + case WIDGET_MSG_PTR_MOVE: + { + // + // Send the difference not the absolute value. + // + i32XDiff = i32X - sMouseState.i32XLast; + i32YDiff = i32Y - sMouseState.i32YLast; + + // + // Send the report back to the host. + // + USBMouseUpdate(i32XDiff, i32YDiff, 0); + + // + // Save these values to calculate the next move. + // + sMouseState.i32XLast = i32X; + sMouseState.i32YLast = i32Y; + + break; + } + default: + { + break; + } + } + } + else + { + WidgetPointerMessage(ui32Message, i32X, i32Y); + } + + return(0); +} + + +//**************************************************************************** +// +// Application calls this once to initialize the UI. +// +//**************************************************************************** +void +UIInit(void) +{ + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-dev-chid"); + + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + WidgetPaint((tWidget *)&g_sBackground); + + // + // Initially not connected. + // + g_eState = UI_NOT_CONNECTED; + + // + // Not initialized. + // + UIUpdateStatus(UI_STATUS_UPDATE); + +} + +//**************************************************************************** +// +// Application should periodically call this function. +// +//**************************************************************************** +void +UIMain(void) +{ + WidgetMessageQueueProcess(); + + if(g_sUIState.ui32Indicators & UI_STATUS_KEYBOARD) + { + + } + else + { + USBMouseMain(); + } +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/ui.h b/boards/dk-tm4c129x/usb_dev_chid/ui.h new file mode 100644 index 0000000..c8bf2ad --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/ui.h @@ -0,0 +1,85 @@ +//***************************************************************************** +// +// ui.c - User interface code for the USB composite HID keyboard/mouse example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __UI_H__ +#define __UI_H__ + +//***************************************************************************** +// +// The three special lock keys. +// +//***************************************************************************** +#define UI_CAPS_LOCK 0x00000001 +#define UI_SCROLL_LOCK 0x00000002 +#define UI_NUM_LOCK 0x00000003 + +//***************************************************************************** +// +// The state of the UI in terms of USB. +// +//***************************************************************************** +typedef enum +{ + UI_CONNECTED, + UI_NOT_CONNECTED, + UI_SUSPENDED +} +tUIState; + +extern volatile uint32_t g_ui32SysTickCount; + +//***************************************************************************** +// +// UI function prototypes. +// +//***************************************************************************** +void UIKeyEvent(tWidget *psWidget, uint32_t ui32Key, uint32_t ui32Event); +void UIInit(void); +void UIMain(void); +void UICapsLock(bool bEnable); +void UIScrollLock(bool bEnable); +void UINumLock(bool bEnable); +void UIMode(tUIState eState); +int32_t UITouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y); + +//***************************************************************************** +// +// USB mouse function prototypes. +// +//***************************************************************************** +void USBMouseInit(void); +void USBMouseMain(void); +void USBMouseUpdate(int32_t i32X, int32_t i32Y, uint8_t ui8Buttons); + +//***************************************************************************** +// +// USB keyboard prototypes. +// +//***************************************************************************** +void USBKeyboardInit(void); +void USBKeyboardMain(void); +void USBKeyboardUpdate(uint8_t ui8Modifiers, uint8_t ui8UsageCode, + bool bPressed); + +#endif diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.c b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.c new file mode 100644 index 0000000..8402f8a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.c @@ -0,0 +1,209 @@ + //***************************************************************************** +// +// usb_dev_chid.c - Main routines for the composite keyboard mouse example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcomp.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usblib/device/usbdhidkeyb.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "usb_structs.h" +#include "ui.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Composite HID Keyboard Mouse Device (usb_dev_chid)

      +//! +//! This example application turns the evaluation board into a composite USB +//! keyboard and mouse example using the Human Interface Device class. The +//! color LCD displays a blank area which acts as a mouse touchpad. The button +//! on the bottom of the screen acts as a toggle between keyboard and mouse +//! mode. Pressing it toggles the screen to keyboard mode and allows keys +//! to be sent to the USB host. The board status LED is used to indicate the +//! current Caps Lock state and is updated in response to pressing the ``Caps'' +//! key on the virtual keyboard or any other keyboard attached to the same USB +//! host system. +// +//***************************************************************************** + +//***************************************************************************** +// +// The system tick timer period. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 100 + +//***************************************************************************** +// +// The current system tick count. +// +//***************************************************************************** +volatile uint32_t g_ui32SysTickCount; + +//***************************************************************************** +// +// This is the interrupt handler for the SysTick interrupt. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + g_ui32SysTickCount++; +} + +//***************************************************************************** +// +// Handles all of the generic USB events. +// +//***************************************************************************** +uint32_t +USBEventHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgParam, + void *pvMsgData) +{ + // + // Infor the UI code of the state change. + // + if(ui32Event == USB_EVENT_CONNECTED) + { + UIMode(UI_CONNECTED); + } + else if(ui32Event == USB_EVENT_DISCONNECTED) + { + UIMode(UI_NOT_CONNECTED); + } + else if(ui32Event == USB_EVENT_SUSPEND) + { + UIMode(UI_SUSPENDED); + } + else if(ui32Event == USB_EVENT_RESUME) + { + UIMode(UI_CONNECTED); + } + return(0); +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(UITouchCallback); + + // + // Set the system tick to fire 100 times per second. + // + ROM_SysTickPeriodSet(ui32SysClock / SYSTICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Initialize the USB stack for device mode. + // + USBStackModeSet(0, eUSBModeDevice, 0); + + // + // Initialize the USB keyboard interface. + // + USBKeyboardInit(); + + // + // Initialize the USB mouse interface. + // + USBMouseInit(); + + // + // Call the composite device initialization for both the mouse and + // keyboard. + // + USBDHIDMouseCompositeInit(0, &g_sMouseDevice, &g_psCompDevices[0]); + USBDHIDKeyboardCompositeInit(0, &g_sKeyboardDevice, &g_psCompDevices[1]); + + // + // Pass the device information to the USB library and place the device + // on the bus. + // + USBDCompositeInit(0, &g_sCompDevice, DESCRIPTOR_DATA_SIZE, + g_pui8DescriptorData); + + // + // Initialize the user interface. + // + UIInit(); + + while(1) + { + // + // Run the main loop for the user interface. + // + UIMain(); + } +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewd b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewp b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewp new file mode 100644 index 0000000..aafa6e9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ewp @@ -0,0 +1,817 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\ui.c + + + $PROJ_DIR$\usb_dev_chid.c + + + $PROJ_DIR$\usb_keyboard.c + + + $PROJ_DIR$\usb_mouse.c + + + $PROJ_DIR$\usb_structs.c + + + diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.icf b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.icf new file mode 100644 index 0000000..336ada8 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_dev_chid.icf - Linker configuration file for usb_dev_chid. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ld b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ld new file mode 100644 index 0000000..ce8769b --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_dev_chid.ld - Linker configuration file for usb_dev_chid. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.sct b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.sct new file mode 100644 index 0000000..dacce46 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_dev_chid.sct - Linker configuration file for usb_dev_chid. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvopt b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvopt new file mode 100644 index 0000000..fe47128 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvopt @@ -0,0 +1,429 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_dev_chid + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\ui.c + ui.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_chid.c + usb_dev_chid.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_keyboard.c + usb_keyboard.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_mouse.c + usb_mouse.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_structs.c + usb_structs.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 14 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvproj b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvproj new file mode 100644 index 0000000..2dd784b --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid.uvproj @@ -0,0 +1,474 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_dev_chid + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_dev_chid + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_dev_chid.bin .\rvmdk\usb_dev_chid.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 UART_BUFFERED + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_dev_chid.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ui.c + 1 + .\ui.c + + + usb_dev_chid.c + 1 + .\usb_dev_chid.c + + + usb_keyboard.c + 1 + .\usb_keyboard.c + + + usb_mouse.c + 1 + .\usb_mouse.c + + + usb_structs.c + 1 + .\usb_structs.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid_ccs.cmd b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid_ccs.cmd new file mode 100644 index 0000000..87c55e3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_dev_chid_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_dev_chid_ccs.cmd - CCS linker configuration file for usb_dev_chid. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_keyboard.c b/boards/dk-tm4c129x/usb_dev_chid/usb_keyboard.c new file mode 100644 index 0000000..bb8bf46 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_keyboard.c @@ -0,0 +1,314 @@ +//***************************************************************************** +// +// usb_dev_keyboard.c - Main routines for the keyboard portion of the composite +// device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/gpio.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/keyboard.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcomp.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usblib/device/usbdhidkeyb.h" +#include "usb_structs.h" +#include "ui.h" + +//**************************************************************************** +// +// Global USB keyboard state. +// +//**************************************************************************** +struct +{ + // + // Holds a pending special key press for the Caps Lock, Scroll Lock, or + // Num Lock keys. + // + uint8_t ui8Special; +} +g_sKeyboardState; + +//**************************************************************************** +// +// The look up table entries for usage codes. +// +//**************************************************************************** +typedef struct +{ + char cChar; + char cUsage; +} +sUsageEntry; + +//**************************************************************************** +// +// The un-shifted HID usage codes used by the graphical keyboard. +// +//**************************************************************************** +static const sUsageEntry g_pcUsageCodes[] = +{ + {'q', HID_KEYB_USAGE_Q}, {'w', HID_KEYB_USAGE_W}, + {'e', HID_KEYB_USAGE_E}, {'r', HID_KEYB_USAGE_R}, + {'t', HID_KEYB_USAGE_T}, {'y', HID_KEYB_USAGE_Y}, + {'u', HID_KEYB_USAGE_U}, {'i', HID_KEYB_USAGE_I}, + {'o', HID_KEYB_USAGE_O}, {'p', HID_KEYB_USAGE_P}, + {'a', HID_KEYB_USAGE_A}, {'s', HID_KEYB_USAGE_S}, + {'d', HID_KEYB_USAGE_D}, {'f', HID_KEYB_USAGE_F}, + {'g', HID_KEYB_USAGE_G}, {'h', HID_KEYB_USAGE_H}, + {'j', HID_KEYB_USAGE_J}, {'k', HID_KEYB_USAGE_K}, + {'l', HID_KEYB_USAGE_L}, {'z', HID_KEYB_USAGE_Z}, + {'x', HID_KEYB_USAGE_X}, {'c', HID_KEYB_USAGE_C}, + {'v', HID_KEYB_USAGE_V}, {'b', HID_KEYB_USAGE_B}, + {'n', HID_KEYB_USAGE_N}, {'m', HID_KEYB_USAGE_M}, + {'0', HID_KEYB_USAGE_0}, {'1', HID_KEYB_USAGE_1}, + {'2', HID_KEYB_USAGE_2}, {'3', HID_KEYB_USAGE_3}, + {'4', HID_KEYB_USAGE_4}, {'5', HID_KEYB_USAGE_5}, + {'6', HID_KEYB_USAGE_6}, {'7', HID_KEYB_USAGE_7}, + {'8', HID_KEYB_USAGE_8}, {'9', HID_KEYB_USAGE_9}, + {'-', HID_KEYB_USAGE_MINUS}, {'=', HID_KEYB_USAGE_EQUAL}, + {'\'', HID_KEYB_USAGE_FQUOTE}, {'[', HID_KEYB_USAGE_LBRACKET}, + {']', HID_KEYB_USAGE_RBRACKET}, {';', HID_KEYB_USAGE_SEMICOLON}, + {' ', HID_KEYB_USAGE_SPACE}, {'/', HID_KEYB_USAGE_FSLASH}, + {'\\', HID_KEYB_USAGE_BSLASH}, {'.', HID_KEYB_USAGE_PERIOD}, + {',', HID_KEYB_USAGE_COMMA}, + {UI_CAPS_LOCK, HID_KEYB_USAGE_CAPSLOCK}, + {UI_SCROLL_LOCK, HID_KEYB_USAGE_SCROLLOCK}, + {UI_NUM_LOCK, HID_KEYB_USAGE_NUMLOCK}, + {UNICODE_BACKSPACE, HID_KEYB_USAGE_BACKSPACE}, + {UNICODE_RETURN, HID_KEYB_USAGE_ENTER}, +}; + +static const uint32_t ui32NumUsageCodes = + sizeof(g_pcUsageCodes)/sizeof(sUsageEntry); + +//**************************************************************************** +// +// The shifted HID usage codes that are used by the graphical keyboard. +// +//**************************************************************************** +static const sUsageEntry g_pcUsageCodesShift[] = +{ + {')', HID_KEYB_USAGE_0}, {'!', HID_KEYB_USAGE_1}, + {'@', HID_KEYB_USAGE_2}, {'#', HID_KEYB_USAGE_3}, + {'$', HID_KEYB_USAGE_4}, {'%', HID_KEYB_USAGE_5}, + {'^', HID_KEYB_USAGE_6}, {'&', HID_KEYB_USAGE_7}, + {'*', HID_KEYB_USAGE_8}, {'(', HID_KEYB_USAGE_9}, + {'?', HID_KEYB_USAGE_FSLASH}, {'+', HID_KEYB_USAGE_EQUAL}, + {':', HID_KEYB_USAGE_SEMICOLON}, {'_', HID_KEYB_USAGE_MINUS}, + {'~', HID_KEYB_USAGE_BQUOTE}, {'|', HID_KEYB_USAGE_BSLASH}, + {'\"', HID_KEYB_USAGE_FQUOTE}, +}; + +static const uint32_t ui32NumUsageCodesShift = + sizeof(g_pcUsageCodes)/sizeof(sUsageEntry); + +//**************************************************************************** +// +// Handle basic initialization of the USB keyboard. +// +//**************************************************************************** +void +USBKeyboardInit(void) +{ + // + // Clear out the special key variable. + // + g_sKeyboardState.ui8Special = 0; +} + +//**************************************************************************** +// +// Returns the Usage code for a ASCII character. +// +// \param cKey is the ASCII character to look up. +// \param bShifted determines if the look up is for the shifted value or not. +// +// This function is used to look up the USB HID usage code for a given +// ASCII character. The \e bShifted value indicates if the key should be +// resported as shifted. +// +// \return Returns the usage code for the ASCII character or 0 if none found. +// +//**************************************************************************** +static uint8_t +GetUsageCode(char cKey, bool bShifted) +{ + int32_t i32Idx, i32Entries; + const sUsageEntry *pUsageTable; + + if(bShifted) + { + i32Entries = ui32NumUsageCodesShift; + pUsageTable = g_pcUsageCodesShift; + } + else + { + i32Entries = ui32NumUsageCodes; + pUsageTable = g_pcUsageCodes; + } + + for(i32Idx = 0; i32Idx < i32Entries; i32Idx++) + { + if(pUsageTable[i32Idx].cChar == cKey) + { + return(pUsageTable[i32Idx].cUsage); + } + } + return(0); +} + +//**************************************************************************** +// +// Called by the UI interface to update the USB keyboard. +// +// \param ui8Modifiers is the set of key modifiers. +// \param ui8Key is ASCII character to look up. +// \param bPressed indicates if this is a press or release event. +// +// This function is used to update a key that has been pressed based on the +// ASCII character that is passed in the \e ui8Key parameter. The \e bPressed +// parameter is \b true if the key was pressed and \b false if the key was +// released. +// +// \return None. +// +//**************************************************************************** +void +USBKeyboardUpdate(uint8_t ui8Modifiers, uint8_t ui8Key, bool bPressed) +{ + uint8_t ui8Usage; + + // + // Move these to a-z because USB HID does not recognize unshifted values, + // it uses the SHIFT modifier to change the case. + // + if((ui8Key >= 'A') && (ui8Key <= 'Z')) + { + ui8Key |= 0x20; + + if(bPressed) + { + ui8Modifiers |= HID_KEYB_LEFT_SHIFT; + } + } + + // + // Get the usage code for this character. + // + ui8Usage = GetUsageCode(ui8Key, false); + + // + // Check if this was a "special" key because USB HID handles these + // separately. + // + if((ui8Usage == HID_KEYB_USAGE_CAPSLOCK) || + (ui8Usage == HID_KEYB_USAGE_SCROLLOCK) || + (ui8Usage == HID_KEYB_USAGE_NUMLOCK)) + { + // + // If there was already a special key pressed, then force it to be + // released. + // + if(g_sKeyboardState.ui8Special) + { + USBDHIDKeyboardKeyStateChange(&g_sKeyboardDevice, ui8Modifiers, + g_sKeyboardState.ui8Special, false); + } + + // + // Save the new special key. + // + g_sKeyboardState.ui8Special = ui8Usage; + } + + // + // If there was not an unshifted value for this character then look for + // a shifted version of the character. + // + if(ui8Usage == 0) + { + // + // Get the shifted value and set the shift modifier. + // + ui8Usage = GetUsageCode(ui8Key, true); + + if(bPressed) + { + ui8Modifiers |= HID_KEYB_LEFT_SHIFT; + } + } + + // + // If a valid usage code was found then pass the key along to the + // USB library. + // + if(ui8Usage) + { + USBDHIDKeyboardKeyStateChange(&g_sKeyboardDevice, ui8Modifiers, + ui8Usage, bPressed); + } +} + +//**************************************************************************** +// +// Handle the callbacks from the USB library's HID keyboard layer. +// +//**************************************************************************** +uint32_t +USBKeyboardHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgParam, + void *pvMsgData) +{ + // + // Handle LED set requests. These are the various lock key requests. + // + if(ui32Event == USBD_HID_KEYB_EVENT_SET_LEDS) + { + // + // Set the state of the lock keys in the UI. + // + UICapsLock(ui32MsgParam & HID_KEYB_CAPS_LOCK); + UIScrollLock(ui32MsgParam & HID_KEYB_SCROLL_LOCK); + UINumLock(ui32MsgParam & HID_KEYB_NUM_LOCK); + } + else if(ui32Event == USB_EVENT_TX_COMPLETE) + { + // + // Any time a report is sent and there is a pending special key + // pressed send a key release. + // + if(g_sKeyboardState.ui8Special) + { + USBDHIDKeyboardKeyStateChange(&g_sKeyboardDevice, 0, + g_sKeyboardState.ui8Special, false); + g_sKeyboardState.ui8Special = 0; + } + + } + return(0); +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_mouse.c b/boards/dk-tm4c129x/usb_dev_chid/usb_mouse.c new file mode 100644 index 0000000..fa46f3f --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_mouse.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// usb_dev_mouse.c - Main routines for the mouse portion of the composite +// device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcomp.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usblib/device/usbdhidkeyb.h" +#include "usb_structs.h" + +//***************************************************************************** +// +// The global state of the mouse. +// +//***************************************************************************** +static volatile struct +{ + int32_t i32X; + int32_t i32Y; + uint8_t ui8Buttons; + + enum + { + // + // No pending or reports being sent. + // + MOUSE_IDLE, + + // + // Sending a report with none pending. + // + MOUSE_SENDING, + + // + // Sending a report and have one pending. + // + MOUSE_SENDING_PEND, + + // + // Pending report but none currently sending. + // + MOUSE_PENDING, + + // + // Disconnect occurred. + // + MOUSE_DISCONNECT + } + eState; +} +sMouseState; + +//***************************************************************************** +// +// Initialize the global state of the mouse. +// +//***************************************************************************** +void +USBMouseInit(void) +{ + // + // Initialize the mouse state.. + // + sMouseState.i32X = 0; + sMouseState.i32Y = 0; + sMouseState.eState = MOUSE_IDLE; + sMouseState.ui8Buttons = 0; +} + +//***************************************************************************** +// +// This function is called by the UI to update the mouse movement and buttons. +// +// \param i32X is the delta in X movement for the mouse. +// \param i32Y is the delta in Y movement for the mouse. +// \param ui8Buttons is the bit mapped value for the buttons. +// +// \return None. +// +//***************************************************************************** +void +USBMouseUpdate(int32_t i32X, int32_t i32Y, uint8_t ui8Buttons) +{ + switch(sMouseState.eState) + { + case MOUSE_SENDING: + { + // + // Go to the pending while sending state because there is a + // transmit already being sent. This + // + sMouseState.eState = MOUSE_SENDING_PEND; + } + case MOUSE_SENDING_PEND: + case MOUSE_PENDING: + { + // + // Accumulate changes in mouse position if there is already a + // report being sent. + // + sMouseState.i32X += i32X; + if(sMouseState.i32X > 127) + { + sMouseState.i32X = 127; + } + else if(sMouseState.i32X < -128) + { + sMouseState.i32X = -128; + } + + sMouseState.i32Y += i32Y; + if(sMouseState.i32X > 127) + { + sMouseState.i32X = 127; + } + else if(sMouseState.i32X < -128) + { + sMouseState.i32X = -128; + } + sMouseState.ui8Buttons |= ui8Buttons; + + break; + } + case MOUSE_IDLE: + default: + { + // + // If idle then just send the update. + // + sMouseState.i32X = i32X; + sMouseState.i32Y = i32Y; + + sMouseState.ui8Buttons |= ui8Buttons; + + sMouseState.eState = MOUSE_PENDING; + + break; + } + } +} + +//***************************************************************************** +// +// Event handler for the USB HID mouse callbacks. This was passed into the +// USB library as the callback for USB HID mouse events. +// +//***************************************************************************** +uint32_t +USBMouseHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgParam, + void *pvMsgData) +{ + // + // The only event that is monitored is the transmit complete to know + // that it safe to send another report. + // + if(ui32Event == USB_EVENT_TX_COMPLETE) + { + switch(sMouseState.eState) + { + // + // Done sending return to idle. + // + case MOUSE_SENDING: + { + // + // Clear the previous X,Y accumulated values. + // + sMouseState.i32X = 0; + sMouseState.i32Y = 0; + + // + // If done with sending then always send out a button update + // if buttons were pressed. + // + if(sMouseState.ui8Buttons) + { + sMouseState.ui8Buttons = 0; + sMouseState.eState = MOUSE_PENDING; + } + else + { + sMouseState.eState = MOUSE_IDLE; + } + break; + } + + // + // While sending more data was ready to be sent so switch to the + // pending state again. + // + case MOUSE_SENDING_PEND: + { + sMouseState.eState = MOUSE_PENDING; + break; + } + + // + // Should not get here, but included for completeness. + // + case MOUSE_PENDING: + case MOUSE_IDLE: + default: + { + break; + } + } + } + else if(ui32Event == USB_EVENT_DISCONNECTED) + { + // + // Stay in the disconnected state. + // + sMouseState.eState = MOUSE_DISCONNECT; + } + else if(ui32Event == USB_EVENT_CONNECTED) + { + // + // This received even if the mouse is not active, but reset the state + // in all cases. + // + sMouseState.i32X = 0; + sMouseState.i32Y = 0; + sMouseState.ui8Buttons = 0; + sMouseState.eState = MOUSE_IDLE; + } + return(0); +} + +//***************************************************************************** +// +// Main routine for the mouse. +// +//***************************************************************************** +void +USBMouseMain(void) +{ + // + // Disable interrupts while changing the variables below. + // + IntMasterDisable(); + + switch(sMouseState.eState) + { + case MOUSE_PENDING: + { + // + // Send the report since there is one pending. + // + USBDHIDMouseStateChange((void *)&g_sMouseDevice, + (uint8_t)sMouseState.i32X, + (uint8_t)sMouseState.i32Y, + sMouseState.ui8Buttons); + // + // Clear out the report data so that pending data does not + // continually accumulate. + // + sMouseState.i32X = 0; + sMouseState.i32Y = 0; + + if(sMouseState.ui8Buttons) + { + // + // Need to always send out that all buttons are released. + // + sMouseState.ui8Buttons = 0; + sMouseState.eState = MOUSE_SENDING_PEND; + } + else + { + // + // Switch to sending state and wait for the transmit to be + // complete. + // + sMouseState.eState = MOUSE_SENDING; + } + + break; + } + case MOUSE_DISCONNECT: + case MOUSE_SENDING: + case MOUSE_SENDING_PEND: + case MOUSE_IDLE: + default: + { + break; + } + } + + // + // Enable interrupts now that the main loop is complete. + // + IntMasterEnable(); +} diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_structs.c b/boards/dk-tm4c129x/usb_dev_chid/usb_structs.c new file mode 100644 index 0000000..892f527 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_structs.c @@ -0,0 +1,255 @@ +//***************************************************************************** +// +// usb_structs.c - Data structures defining the USB keyboard and mouse device. +// +// Copyright (c) 2009-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcomp.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usblib/device/usbdhidkeyb.h" +#include "usb_structs.h" + +//***************************************************************************** +// +// Flags for Keyboard and Mouse shared states. +// +//***************************************************************************** +volatile uint32_t g_ui32USBFlags; + +//***************************************************************************** +// +// The languages supported by this device. +// +//***************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//***************************************************************************** +// +// The manufacturer string. +// +//***************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//***************************************************************************** +// +// The product string. +// +//***************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (13 + 1) * 2, + USB_DTYPE_STRING, + 'M', 0, 'o', 0, 'u', 0, 's', 0, 'e', 0, ' ', 0, 'E', 0, 'x', 0, 'a', 0, + 'm', 0, 'p', 0, 'l', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The serial number string. +// +//***************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_pui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_pui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//**************************************************************************** +// +// The HID mouse device initialization and customization structures. +// +//**************************************************************************** +tUSBDHIDMouseDevice g_sMouseDevice = +{ + // + // Tiva VID. + // + USB_VID_TI_1CBE, + + // + // Tiva HID Mouse PID. + // + USB_PID_MOUSE, + + // + // This is in 2mA increments so 500mA. + // + 250, + + // + // Bus powered device. + // + USB_CONF_ATTR_BUS_PWR, + + // + // The Mouse handler function. + // + USBMouseHandler, + + // + // Point to the mouse device structure. + // + (void *)&g_sMouseDevice, + + // + // The composite device does not use the strings from the class. + // + 0, + 0, +}; + +//***************************************************************************** +// +// The HID keyboard device initialization and customization structures. +// +//***************************************************************************** +tUSBDHIDKeyboardDevice g_sKeyboardDevice = +{ + // + // Tiva VID. + // + USB_VID_TI_1CBE, + + // + // Tiva HID Mouse PID. + // + USB_PID_KEYBOARD, + + // + // This is in 2mA increments so 500mA. + // + 250, + + // + // Bus powered device. + // + USB_CONF_ATTR_BUS_PWR, + + // + // The Mouse handler function. + // + USBKeyboardHandler, + + // + // Point to the mouse device structure. + // + (void *)&g_sKeyboardDevice, + + // + // The composite device does not use the strings from the class. + // + 0, + 0, +}; + +//**************************************************************************** +// +// The array of devices supported by this composite device. +// +//**************************************************************************** +tCompositeEntry g_psCompDevices[NUM_DEVICES]; + +//**************************************************************************** +// +// The memory allocation for the composite USB device descriptors. +// +//**************************************************************************** +uint8_t g_pui8DescriptorData[DESCRIPTOR_DATA_SIZE]; + +//**************************************************************************** +// +// Allocate the Device Data for the top level composite device class. +// +//**************************************************************************** +tUSBDCompositeDevice g_sCompDevice = +{ + // + // Tiva VID. + // + USB_VID_TI_1CBE, + + // + // Tiva PID for composite HID and HID. + // + USB_PID_COMP_HID_HID, + + // + // This is in 2mA increments so 500mA. + // + 250, + + // + // Bus powered device. + // + USB_CONF_ATTR_BUS_PWR, + + // + // There is no need for a default composite event handler. + // + USBEventHandler, + + // + // The string table. + // + g_pui8StringDescriptors, + NUM_STRING_DESCRIPTORS, + + // + // The Composite device array. + // + NUM_DEVICES, + g_psCompDevices, +}; diff --git a/boards/dk-tm4c129x/usb_dev_chid/usb_structs.h b/boards/dk-tm4c129x/usb_dev_chid/usb_structs.h new file mode 100644 index 0000000..df0082a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_chid/usb_structs.h @@ -0,0 +1,118 @@ +//***************************************************************************** +// +// usb_structs.h - Data structures defining the composite mouse and keyboard +// USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USB_STRUCTS_H__ +#define __USB_STRUCTS_H__ + +//**************************************************************************** +// +// Globals used by both classes. +// +//**************************************************************************** +extern volatile uint32_t g_ui32USBFlags; +extern volatile uint32_t g_ui32SysTickCount; +extern volatile uint8_t g_ui8Buttons; + +//**************************************************************************** +// +// The number of individual device class instances comprising this composite +// device. +// +//**************************************************************************** +#define NUM_DEVICES 2 + +//***************************************************************************** +// +// Keyboard Device Instance. +// +//***************************************************************************** +extern tUSBDHIDKeyboardDevice g_sKeyboardDevice; + +//***************************************************************************** +// +// Mouse Device instance +// +//***************************************************************************** +extern tUSBDHIDMouseDevice g_sMouseDevice; + +//***************************************************************************** +// +// Array of all composite devices. +// +//***************************************************************************** +extern tCompositeEntry g_psCompDevices[NUM_DEVICES]; + +//***************************************************************************** +// +// the root composite device. +// +//***************************************************************************** +extern tUSBDCompositeDevice g_sCompDevice; + +//***************************************************************************** +// +// The memory allocated to hold the composite descriptor that is created by +// the call to USBDCompositeInit(). +// +//***************************************************************************** +#define DESCRIPTOR_DATA_SIZE (COMPOSITE_DHID_SIZE + COMPOSITE_DHID_SIZE) +extern uint8_t g_pui8DescriptorData[DESCRIPTOR_DATA_SIZE]; + +//**************************************************************************** +// +// The flags used by this application for the g_ulFlags value. +// +//**************************************************************************** +#define FLAG_MOVE_UPDATE 0 +#define FLAG_CONNECTED 1 +#define FLAG_LED_ACTIVITY 2 +#define FLAG_MOVE_MOUSE 3 +#define FLAG_COMMAND_RECEIVED 4 +#define FLAG_SUSPENDED 5 + +//**************************************************************************** +// +// The size of the transmit and receive buffers used for the redirected UART. +// This number should be a power of 2 for best performance. 256 is chosen +// pretty much at random though the buffer should be at least twice the size +// of a maximum-sized USB packet. +// +//**************************************************************************** + +extern void USBMouseMoveHandler(void); +extern void USBKeyboardMain(void); + +//**************************************************************************** +// +// CDC device callback function prototypes. +// +//**************************************************************************** +extern uint32_t USBEventHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgValue, void *pvMsgData); +extern uint32_t USBMouseHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgData, void *pvMsgData); +extern uint32_t USBKeyboardHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgData, void *pvMsgData); +#endif diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/Makefile b/boards/dk-tm4c129x/usb_dev_gamepad/Makefile new file mode 100644 index 0000000..68e1edc --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/Makefile @@ -0,0 +1,94 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB device gamepad example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB device gamepad example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_dev_gamepad.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB device gamepad example. +# +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/buttons.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/frame.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/touch.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/usb_dev_gamepad.o +${COMPILER}/usb_dev_gamepad.axf: ${COMPILER}/usb_gamepad_structs.o +${COMPILER}/usb_dev_gamepad.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_dev_gamepad.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_dev_gamepad.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_dev_gamepad.axf: usb_dev_gamepad.ld +SCATTERgcc_usb_dev_gamepad=usb_dev_gamepad.ld +ENTRY_usb_dev_gamepad=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsimportspec new file mode 100644 index 0000000..0228898 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsproject b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.cproject b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.cproject new file mode 100644 index 0000000..50ef429 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.cproject @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.project b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.project new file mode 100644 index 0000000..84a943a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.project @@ -0,0 +1,80 @@ + + + usb_dev_gamepad + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_gamepad/startup_ccs.c + + + usb_dev_gamepad.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.c + + + usb_dev_gamepad_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad_ccs.cmd + + + usb_gamepad_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.c + + + drivers/buttons.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/buttons.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.bin b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.bin new file mode 100644 index 0000000..40ca182 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.out b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.out new file mode 100644 index 0000000..fafab9e Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/Debug/usb_dev_gamepad.out differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.bin b/boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.bin new file mode 100644 index 0000000..2a05e7c Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.out b/boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.out new file mode 100644 index 0000000..5d954a4 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/ewarm/Exe/usb_dev_gamepad.out differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.axf b/boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.axf new file mode 100644 index 0000000..2adea80 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.bin b/boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.bin new file mode 100644 index 0000000..c154b5a Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/gcc/usb_dev_gamepad.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/readme.txt b/boards/dk-tm4c129x/usb_dev_gamepad/readme.txt new file mode 100644 index 0000000..3b945f1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/readme.txt @@ -0,0 +1,28 @@ +USB HID Gamepad Device + +This example application turns the evaluation board into USB game pad +device using the Human Interface Device gamepad class. The buttons on the +board are reported as buttons 1, 2, and 3. The X and Y coordinates are +reported using the touch screen input. This example also demonstrates how +to use a custom HID report descriptor which is specified in the +usb_game_structs.c in the g_pui8GameReportDescriptor structure. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.axf b/boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.axf new file mode 100644 index 0000000..67cb194 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.bin b/boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.bin new file mode 100644 index 0000000..c690f32 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_gamepad/rvmdk/usb_dev_gamepad.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/startup_ccs.c b/boards/dk-tm4c129x/usb_dev_gamepad/startup_ccs.c new file mode 100644 index 0000000..fa95ff6 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/startup_ewarm.c b/boards/dk-tm4c129x/usb_dev_gamepad/startup_ewarm.c new file mode 100644 index 0000000..ac0de91 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/startup_gcc.c b/boards/dk-tm4c129x/usb_dev_gamepad/startup_gcc.c new file mode 100644 index 0000000..3ca97aa --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/startup_rvmdk.S b/boards/dk-tm4c129x/usb_dev_gamepad/startup_rvmdk.S new file mode 100644 index 0000000..31024c1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.c b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.c new file mode 100644 index 0000000..03bfd18 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.c @@ -0,0 +1,507 @@ +//***************************************************************************** +// +// usb_dev_gamepad.c - Main routines for the gamepad example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_gpio.h" +#include "inc/hw_sysctl.h" +#include "driverlib/adc.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidgamepad.h" +#include "usb_gamepad_structs.h" +#include "drivers/buttons.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB HID Gamepad Device (usb_dev_gamepad)

      +//! +//! This example application turns the evaluation board into USB game pad +//! device using the Human Interface Device gamepad class. The buttons on the +//! board are reported as buttons 1, 2, and 3. The X and Y coordinates are +//! reported using the touch screen input. This example also demonstrates how +//! to use a custom HID report descriptor which is specified in the +//! usb_game_structs.c in the g_pui8GameReportDescriptor structure. +// +//***************************************************************************** + +//***************************************************************************** +// +// Graphics context used to show text on the color LCD display. +// +//***************************************************************************** +static tContext g_sContext; +#define TEXT_FONT g_psFontCmss18b + +//***************************************************************************** +// +// The HID custom gamepad report that is returned to the host. +// +//***************************************************************************** +static tCustomReport g_sReport; + +//***************************************************************************** +// +// Global holding if there is an update to send to the host. +// +//***************************************************************************** +static volatile bool g_bUpdate; + +//***************************************************************************** +// +// This enumeration holds the various states that the gamepad can be in during +// normal operation. +// +//***************************************************************************** +volatile enum +{ + // + // Not yet configured. + // + eStateNotConfigured, + + // + // Connected and not waiting on data to be sent. + // + eStateIdle, + + // + // Suspended. + // + eStateSuspend, + + // + // Connected and waiting on data to be sent out. + // + eStateSending +} +g_iGamepadState; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Shows the status string on the display. +// +// \param psContext is a pointer to the graphics context representing the +// display. +// \param pcStatus is a pointer to the string to be shown. +// +//***************************************************************************** +void +DisplayStatus(tContext *psContext, char *pcStatus) +{ + tRectangle sRectLine; + int32_t i32Y; + + // + // Calculate the Y coordinate of the top left of the character cell + // for our line of text. + // + i32Y = GrContextDpyHeightGet(psContext) - GrFontHeightGet(TEXT_FONT) - 10; + + // + // Determine the bounding rectangle for this line of text. We add 4 pixels + // to the height just to ensure that we clear a couple of pixels above and + // below the line of text. + // + sRectLine.i16XMin = 0; + sRectLine.i16XMax = GrContextDpyWidthGet(psContext) - 1; + sRectLine.i16YMin = i32Y - GrFontHeightGet(TEXT_FONT); + sRectLine.i16YMax = i32Y + GrFontHeightGet(TEXT_FONT) + 3; + + // + // Clear the line with black. + // + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(psContext, &sRectLine); + + // + // Draw the new status string + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(psContext, pcStatus, -1, + GrContextDpyWidthGet(psContext) / 2, + i32Y, false); +} + +//***************************************************************************** +// +// The interrupt-context handler for touch screen events from the touch screen +// driver. This function constantly overwrites the current report until the +// main loop can handle the new data. +// +//***************************************************************************** +int32_t +TSHandler(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + // + // See which event is being sent from the touch screen driver. + // + switch(ui32Message) + { + // + // The pen has just been placed down. + // + case WIDGET_MSG_PTR_DOWN: + case WIDGET_MSG_PTR_MOVE: + { + // + // Let the main loop know that there is an update. + // + g_bUpdate = true; + + // + // Scale and save the current position. + // + g_sReport.i8XPos = (int8_t)(((i32X - 160) * 255)/320); + g_sReport.i8YPos = (int8_t)(((i32Y - 120) * 255)/240); + + // + // This event has been handled. + // + break; + } + + // + // The pen has just been picked up. + // + case WIDGET_MSG_PTR_UP: + { + // + // Let the main loop know that there is an update. + // + g_bUpdate = true; + + // + // Reset to the center position. + // + g_sReport.i8XPos = 0; + g_sReport.i8YPos = 0; + + // + // This event has been handled. + // + break; + } + } + + + // + // Tell the touch handler that everything is fine. + // + return(1); +} + +//***************************************************************************** +// +// Handles asynchronous events from the HID gamepad driver. +// +// \param pvCBData is the event callback pointer provided during +// USBDHIDGamepadInit(). This is a pointer to our gamepad device structure +// (&g_sGamepadDevice). +// \param ui32Event identifies the event we are being called back for. +// \param ui32MsgData is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the HID gamepad driver to inform the application +// of particular asynchronous events related to operation of the gamepad HID +// device. +// +// \return Returns 0 in all cases. +// +//***************************************************************************** +uint32_t +GamepadHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, + void *pvMsgData) +{ + switch (ui32Event) + { + // + // The host has connected to us and configured the device. + // + case USB_EVENT_CONNECTED: + { + g_iGamepadState = eStateIdle; + + DisplayStatus(&g_sContext, "Connected"); + break; + } + + // + // The host has disconnected from us. + // + case USB_EVENT_DISCONNECTED: + { + g_iGamepadState = eStateNotConfigured; + + DisplayStatus(&g_sContext, "Disconnected"); + break; + } + + // + // This event occurs every time the host acknowledges transmission + // of a report. It is to return to the idle state so that a new report + // can be sent to the host. + // + case USB_EVENT_TX_COMPLETE: + { + // + // Enter the idle state since we finished sending something. + // + g_iGamepadState = eStateIdle; + + break; + } + + // + // This event indicates that the host has suspended the USB bus. + // + case USB_EVENT_SUSPEND: + { + // + // Go to the suspended state. + // + g_iGamepadState = eStateSuspend; + + DisplayStatus(&g_sContext, "Suspended"); + break; + } + + // + // This event signals that the host has resumed signaling on the bus. + // + case USB_EVENT_RESUME: + { + // + // Go back to the idle state. + // + g_iGamepadState = eStateIdle; + + DisplayStatus(&g_sContext, "Connected"); + break; + } + + // + // Return the pointer to the current report. This call is + // rarely if ever made, but is required by the USB HID + // specification. + // + case USBD_HID_EVENT_GET_REPORT: + { + *(void **)pvMsgData = (void *)&g_sReport; + + break; + } + + // + // We ignore all other events. + // + default: + { + break; + } + } + + return(0); +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +int +main(void) +{ + uint8_t ui8ButtonsChanged, ui8Buttons; + uint32_t ui32SysClock; + + // + // Set the clocking to run from the PLL at 120MHz + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | + SYSCTL_XTAL_25MHZ | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Configure the buttons driver. + // + ButtonsInit(ALL_BUTTONS); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-dev-gamepad"); + + // + // Default status is disconnected. + // + DisplayStatus(&g_sContext, "Disconnected"); + + // + // Not configured initially. + // + g_iGamepadState = eStateNotConfigured; + + // + // Initialize the USB stack for device mode. + // + USBStackModeSet(0, eUSBModeDevice, 0); + + // + // Pass the device information to the USB library and place the device + // on the bus. + // + USBDHIDGamepadInit(0, &g_sGamepadDevice); + + // + // Zero out the initial report. + // + g_sReport.ui8Buttons = 0; + g_sReport.i8XPos = 0; + g_sReport.i8YPos = 0; + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(TSHandler); + + // + // The main loop starts here. We begin by waiting for a host connection + // then drop into the main gamepad handling section. If the host + // disconnects, we return to the top and wait for a new connection. + // + while(1) + { + // + // Wait here until USB device is connected to a host. + // + if(g_iGamepadState == eStateIdle) + { + // + // See if the buttons updated. + // + ButtonsPoll(&ui8ButtonsChanged, &ui8Buttons); + + g_sReport.ui8Buttons = 0; + + // + // Set button 1 if up button pressed. + // + if(ui8Buttons & UP_BUTTON) + { + g_sReport.ui8Buttons |= 0x01; + } + + // + // Set button 2 if down button pressed. + // + if(ui8Buttons & DOWN_BUTTON) + { + g_sReport.ui8Buttons |= 0x02; + } + + // + // Set button 3 if select button pressed. + // + if(ui8Buttons & SELECT_BUTTON) + { + g_sReport.ui8Buttons |= 0x04; + } + + if(ui8ButtonsChanged) + { + g_bUpdate = true; + } + + // + // Send the report if there was an update. + // + if(g_bUpdate) + { + g_bUpdate = false; + + USBDHIDGamepadSendReport(&g_sGamepadDevice, &g_sReport, + sizeof(g_sReport)); + + // + // Now sending data but protect this from an interrupt since + // it can change in interrupt context as well. + // + IntMasterDisable(); + g_iGamepadState = eStateSending; + IntMasterEnable(); + } + } + } +} diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewd b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewp b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewp new file mode 100644 index 0000000..1e50581 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ewp @@ -0,0 +1,810 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\buttons.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\usb_dev_gamepad.c + + + $PROJ_DIR$\usb_gamepad_structs.c + + + diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.icf b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.icf new file mode 100644 index 0000000..4f6fd19 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_dev_gamepad.icf - Linker configuration file for usb_dev_gamepad. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ld b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ld new file mode 100644 index 0000000..72abf82 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_dev_gamepad.ld - Linker configuration file for usb_dev_gamepad. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.sct b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.sct new file mode 100644 index 0000000..9d53b08 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_dev_gamepad.sct - Linker configuration file for usb_dev_gamepad. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvopt b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvopt new file mode 100644 index 0000000..e34964a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvopt @@ -0,0 +1,401 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_dev_gamepad + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\buttons.c + buttons.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_gamepad.c + usb_dev_gamepad.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_gamepad_structs.c + usb_gamepad_structs.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 12 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvproj b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvproj new file mode 100644 index 0000000..b0391d0 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad.uvproj @@ -0,0 +1,464 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_dev_gamepad + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_dev_gamepad + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_dev_gamepad.bin .\rvmdk\usb_dev_gamepad.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_dev_gamepad.sct + + + --entry Reset_Handler + + + + + + + + Source + + + buttons.c + 1 + ..\drivers\buttons.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + usb_dev_gamepad.c + 1 + .\usb_dev_gamepad.c + + + usb_gamepad_structs.c + 1 + .\usb_gamepad_structs.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad_ccs.cmd b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad_ccs.cmd new file mode 100644 index 0000000..e6fae80 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_dev_gamepad_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_dev_gamepad_ccs.cmd - CCS linker configuration file for usb_dev_gamepad. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.c b/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.c new file mode 100644 index 0000000..42a55fd --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.c @@ -0,0 +1,221 @@ +//***************************************************************************** +// +// usb_gamepad_structs.c - Data structures defining the USB gamepad device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcomp.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidgamepad.h" +#include "usb_gamepad_structs.h" + +//**************************************************************************** +// +// The languages supported by this device. +// +//**************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//**************************************************************************** +// +// The manufacturer string. +// +//**************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//**************************************************************************** +// +// The product string. +// +//**************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'E', 0, 'x', 0, 'a', 0, 'm', 0, 'p', 0, 'l', 0, 'e', 0, ' ', 0, + 'G', 0, 'a', 0, 'm', 0, 'e', 0, ' ', 0, 'P', 0, 'a', 0, 'd', 0, ' ', 0, +}; + +//**************************************************************************** +// +// The serial number string. +// +//**************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The interface description string. +// +//***************************************************************************** +const uint8_t g_pui8HIDInterfaceString[] = +{ + (21 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'G', 0, 'a', 0, 'm', 0, 'e', 0, + 'p', 0, 'a', 0, 'd', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, + 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + (25 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'G', 0, 'a', 0, 'm', 0, 'e', 0, + 'p', 0, 'a', 0, 'd', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, 'f', 0, + 'i', 0, 'g', 0, 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, 'o', 0, + 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_ppui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, + g_pui8HIDInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_ppui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//***************************************************************************** +// +// The following is the custom HID report structure definition that is passed +// back to the host. This structure shows the basics of overriding the default +// HID gamepad descriptor provided by the USB library. Every entry in this +// report descriptor is mapped into the tCustomReport structure. +// +//***************************************************************************** +static const uint8_t g_pui8GameReportDescriptor[] = +{ + UsagePage(USB_HID_GENERIC_DESKTOP), + Usage(USB_HID_JOYSTICK), + Collection(USB_HID_APPLICATION), + + // + // The axis for the controller. + // + UsagePage(USB_HID_GENERIC_DESKTOP), + Usage (USB_HID_POINTER), + Collection (USB_HID_PHYSICAL), + + // + // 8-bit absolute X value (tCustomReport.i8XPos). + // + Usage (USB_HID_X), + ReportSize(8), + ReportCount(1), + Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE | + USB_HID_INPUT_ABS), + + // + // 8-bit absolute Y value (tCustomReport.i8YPos). + // + Usage (USB_HID_Y), + ReportSize(8), + ReportCount(1), + Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE | + USB_HID_INPUT_ABS), + + // + // The 3 buttons (tCustomReport.i8Buttons bits 0-2). + // + UsagePage(USB_HID_BUTTONS), + UsageMinimum(1), + UsageMaximum(3), + LogicalMinimum(0), + LogicalMaximum(1), + PhysicalMinimum(0), + PhysicalMaximum(1), + + // + // 3 - 1 bit values for the buttons. + // + ReportSize(1), + ReportCount(3), + Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE | + USB_HID_INPUT_ABS), + + // + // 5 - 1 bit constant values for padding + // (tCustomReport.i8Buttons bits 3-7). + // + ReportCount(1), + ReportSize(5), + Input(USB_HID_INPUT_CONSTANT), + + EndCollection, + EndCollection +}; + +//***************************************************************************** +// +// The HID game pad device initialization and customization structures. +// +//***************************************************************************** +tUSBDHIDGamepadDevice g_sGamepadDevice = +{ + USB_VID_TI_1CBE, + USB_PID_GAMEPAD, + 0, + USB_CONF_ATTR_SELF_PWR, + GamepadHandler, + (void *)&g_sGamepadDevice, + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS, + g_pui8GameReportDescriptor, + sizeof(g_pui8GameReportDescriptor) +}; diff --git a/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.h b/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.h new file mode 100644 index 0000000..0b5a72c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_gamepad/usb_gamepad_structs.h @@ -0,0 +1,56 @@ +//***************************************************************************** +// +// usb_gamepad_structs.h - Data structures defining the gamepad USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef _USB_GAMEPAD_STRUCTS_H_ +#define _USB_GAMEPAD_STRUCTS_H_ + +//***************************************************************************** +// +//! The custom HID report that is sent back to the host. +// +//***************************************************************************** +typedef struct +{ + // + //! The current 8-bit signed X position. + // + int8_t i8XPos; + + // + //! The current 8-bit signed Y position. + // + int8_t i8YPos; + + // + //! The current button state, only the bits 0-2 are valid. + // + uint8_t ui8Buttons; +} tCustomReport; + +extern tUSBDHIDGamepadDevice g_sGamepadDevice; + +extern uint32_t GamepadHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgData, void *pvMsgData); + +#endif diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/Makefile b/boards/dk-tm4c129x/usb_dev_keyboard/Makefile new file mode 100644 index 0000000..b64db29 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/Makefile @@ -0,0 +1,94 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB device keyboard example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB device keyboard example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_dev_keyboard.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB device keyboard example. +# +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/frame.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/touch.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/uartstdio.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/usb_dev_keyboard.o +${COMPILER}/usb_dev_keyboard.axf: ${COMPILER}/usb_keyb_structs.o +${COMPILER}/usb_dev_keyboard.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_dev_keyboard.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_dev_keyboard.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_dev_keyboard.axf: usb_dev_keyboard.ld +SCATTERgcc_usb_dev_keyboard=usb_dev_keyboard.ld +ENTRY_usb_dev_keyboard=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 -DUART_BUFFERED + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsimportspec new file mode 100644 index 0000000..4a82f9a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsproject b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.cproject b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.cproject new file mode 100644 index 0000000..dcbef63 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.project b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.project new file mode 100644 index 0000000..6d19cd3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.project @@ -0,0 +1,80 @@ + + + usb_dev_keyboard + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_keyboard/startup_ccs.c + + + usb_dev_keyboard.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.c + + + usb_dev_keyboard_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard_ccs.cmd + + + usb_keyb_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.bin b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.bin new file mode 100644 index 0000000..cd1bef1 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.out b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.out new file mode 100644 index 0000000..b0e1e7c Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/Debug/usb_dev_keyboard.out differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.bin b/boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.bin new file mode 100644 index 0000000..eb2c92c Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.out b/boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.out new file mode 100644 index 0000000..da4b1fd Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/ewarm/Exe/usb_dev_keyboard.out differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.axf b/boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.axf new file mode 100644 index 0000000..ed0e0f3 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.bin b/boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.bin new file mode 100644 index 0000000..950df49 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/gcc/usb_dev_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/readme.txt b/boards/dk-tm4c129x/usb_dev_keyboard/readme.txt new file mode 100644 index 0000000..5ed683d --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/readme.txt @@ -0,0 +1,36 @@ +USB HID Keyboard Device + +This example application turns the evaluation board into a USB keyboard +supporting the Human Interface Device class. The color LCD display shows a +virtual keyboard and taps on the touchscreen will send appropriate key +usage codes back to the USB host. Modifier keys (Shift, Ctrl and Alt) are +``sticky'' and tapping them toggles their state. The board status LED is +used to indicate the current Caps Lock state and is updated in response to +pressing the ``Caps'' key on the virtual keyboard or any other keyboard +attached to the same USB host system. + +The device implemented by this application also supports USB remote wakeup +allowing it to request the host to reactivate a suspended bus. If the bus +is suspended (as indicated on the application display), touching the +display will request a remote wakeup assuming the host has not +specifically disabled such requests. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.axf b/boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.axf new file mode 100644 index 0000000..efad965 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.bin b/boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.bin new file mode 100644 index 0000000..709b9ca Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_keyboard/rvmdk/usb_dev_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/startup_ccs.c b/boards/dk-tm4c129x/usb_dev_keyboard/startup_ccs.c new file mode 100644 index 0000000..61959bb --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/startup_ccs.c @@ -0,0 +1,278 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void UARTStdioIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/startup_ewarm.c b/boards/dk-tm4c129x/usb_dev_keyboard/startup_ewarm.c new file mode 100644 index 0000000..1bb30c3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/startup_ewarm.c @@ -0,0 +1,309 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void UARTStdioIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/startup_gcc.c b/boards/dk-tm4c129x/usb_dev_keyboard/startup_gcc.c new file mode 100644 index 0000000..984aeed --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/startup_gcc.c @@ -0,0 +1,325 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickIntHandler(void); +extern void UARTStdioIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickIntHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + UARTStdioIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/startup_rvmdk.S b/boards/dk-tm4c129x/usb_dev_keyboard/startup_rvmdk.S new file mode 100644 index 0000000..69a068c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/startup_rvmdk.S @@ -0,0 +1,334 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickIntHandler + EXTERN UARTStdioIntHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickIntHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD UARTStdioIntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.c b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.c new file mode 100644 index 0000000..9157ea9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.c @@ -0,0 +1,2355 @@ +//***************************************************************************** +// +// usb_dev_keyboard.c - Main routines for the keyboard example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/usb.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidkeyb.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "usb_keyb_structs.h" +#ifdef DEBUG +#include "utils/uartstdio.h" +#endif + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB HID Keyboard Device (usb_dev_keyboard)

      +//! +//! This example application turns the evaluation board into a USB keyboard +//! supporting the Human Interface Device class. The color LCD display shows a +//! virtual keyboard and taps on the touchscreen will send appropriate key +//! usage codes back to the USB host. Modifier keys (Shift, Ctrl and Alt) are +//! ``sticky'' and tapping them toggles their state. The board status LED is +//! used to indicate the current Caps Lock state and is updated in response to +//! pressing the ``Caps'' key on the virtual keyboard or any other keyboard +//! attached to the same USB host system. +//! +//! The device implemented by this application also supports USB remote wakeup +//! allowing it to request the host to reactivate a suspended bus. If the bus +//! is suspended (as indicated on the application display), touching the +//! display will request a remote wakeup assuming the host has not +//! specifically disabled such requests. +// +//***************************************************************************** + +//***************************************************************************** +// +// Notes about the virtual keyboard definition +// +// The virtual keyboard is defined in terms of rows of keys. Each row of +// keys may be either a normal alphanumeric row in which all keys are the +// same size and handled in exactly the say way, or a row of "special keys" +// which may have different widths and which have a handler function defined +// for each key. In the definition used here, g_psKeyboard[] contains 6 rows +// and defines the keyboard at the top level. +// +// The keyboard can be in 1 of 4 states defined by the current shift and +// caps lock state. For alphanumeric rows, the row definition (tAlphaKeys) +// contain strings representing the key cap characters for each of the keys +// in each of the four states. Function DrawVirtualKeyboard uses these +// strings and the current state to display the correct key caps. +// +//***************************************************************************** + +//***************************************************************************** +// +// Hardware resources related to the LED we use to show the CAPSLOCK state. +// +//***************************************************************************** +#define CAPSLOCK_GPIO_BASE GPIO_PORTQ_BASE +#define CAPSLOCK_GPIO_PIN GPIO_PIN_4 +#define CAPSLOCK_ACTIVE CAPSLOCK_GPIO_PIN +#define CAPSLOCK_INACTIVE 0 + +//***************************************************************************** +// +// The system tick timer period. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 100 +#define SYSTICK_PERIOD_MS (1000 / SYSTICKS_PER_SECOND) + +//***************************************************************************** +// +// A structure describing special keys which are not handled the same way as +// all the alphanumeric keys. +// +//***************************************************************************** +typedef struct +{ + // + // The label string for the key. + // + const char *pcLabel; + + // + // The width of the displayed key in pixels. + // + int16_t i16Width; + + // + // The usage code (if any) associated with this key. + // + char cUsageCode; + + // + // A function to be called when the user presses or releases this key. + // + uint32_t (*pfnPressHandler)(int16_t i16Row, int16_t i16Col, bool bPress); + + // + // A function to be called to redraw the special key. If NULL, the + // default redraw handler is used. + // + void (*pfnRedrawHandler)(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder); +} tSpecialKey; + +//***************************************************************************** +// +// A list of the states that the keyboard can be in. +// +//***************************************************************************** +typedef enum +{ + // + // Neither shift nor caps lock is active. + // + KEY_STATE_NORMAL, + + // + // Shift is active, caps lock is not. + // + KEY_STATE_SHIFT, + + // + // Shift is not active, caps lock is active. + // + KEY_STATE_CAPS, + + // + // Both shift and caps lock are active. + // + KEY_STATE_BOTH, + + // + // State counter member. + // + NUM_KEY_STATES +} tKeyState; + +tKeyState g_eVirtualKeyState = KEY_STATE_NORMAL; + +//***************************************************************************** +// +// A structure describing typical alphanumeric keys. +// +//***************************************************************************** +typedef struct +{ + // + // Strings containing the unshifted, shifted and caps representations of + // each of the keys in the row. + // + const char *pcKey[NUM_KEY_STATES]; + const char *pcUsageCodes; +} tAlphaKeys; + +//***************************************************************************** +// +// A structure describing a single row of the virtual keyboard. +// +//***************************************************************************** +typedef struct +{ + // + // Does this row consist of alphanumeric keys or special keys? + // + bool bSpecial; + + // + // Pointer to data describing this row of keys. If bSpecial is true, + // this points to an array of tSpecialKey structures. If bSpecial is + // false, it points to a single tAlphaKeys structure. + // + void *pvKeys; + + // + // The number of keys in the row. + // + int16_t i16NumKeys; + + // + // The horizontal offset to apply when drawing the characters in this + // row to the screen. This allows us to offset the rows slightly as they + // would look on a normal keyboard. + // + int16_t i16LeftOffset; +} tRow; + +//***************************************************************************** +// +// Labels defining the layout of the virtual keyboard on the display. +// +//***************************************************************************** +#define NUM_KEYBOARD_ROWS 6 +#define KEYBOARD_TOP 60 +#define KEYBOARD_KEY_WIDTH 26 +#define KEYBOARD_KEY_HEIGHT 24 +#define KEYBOARD_COL_SPACING 2 +#define KEYBOARD_ROW_SPACING 4 + +#define KEYBOARD_CELL_WIDTH (KEYBOARD_KEY_WIDTH + KEYBOARD_COL_SPACING) +#define KEYBOARD_CELL_HEIGHT (KEYBOARD_KEY_HEIGHT + KEYBOARD_ROW_SPACING) + +//***************************************************************************** +// +// Colors used to draw various parts of the virtual keyboard. +// +//***************************************************************************** +#define FOCUS_COLOR ClrRed +#define BACKGROUND_COLOR ClrBlack +#define HIGHLIGHT_COLOR ClrWhite +#define SHADOW_COLOR ClrGray +#define KEY_COLOR 0x00E0E0E0 +#define KEY_BRIGHT_COLOR 0x00E0E000 +#define HIGHLIGHT_BRIGHT_COLOR ClrYellow +#define SHADOW_BRIGHT_COLOR 0x00808000 +#define KEY_TEXT_COLOR ClrBlack + +//***************************************************************************** +// +// Keys on the top row of the virtual keyboard. Strings are defined showing +// the keycaps in unshifted, shifted and caps states. +// +//***************************************************************************** +#define NUM_ROW0_KEYS 10 + +const char g_pcRow0UsageCodes[NUM_ROW0_KEYS] = +{ + HID_KEYB_USAGE_1, HID_KEYB_USAGE_2, HID_KEYB_USAGE_3, HID_KEYB_USAGE_4, + HID_KEYB_USAGE_5, HID_KEYB_USAGE_6, HID_KEYB_USAGE_7, HID_KEYB_USAGE_8, + HID_KEYB_USAGE_9, HID_KEYB_USAGE_0 +}; + +const tAlphaKeys g_sRow0 = +{ + {"1234567890", // Normal + "!@#$%^&*()", // Shift + "1234567890", // Caps + "!@#$%^&*()"}, // Shift + Caps + g_pcRow0UsageCodes +}; + +//***************************************************************************** +// +// Keys on the second row of the virtual keyboard. Strings are defined showing +// the keycaps in unshifted, shifted and caps states. +// +//***************************************************************************** +#define NUM_ROW1_KEYS 10 + +const char g_pcRow1UsageCodes[NUM_ROW1_KEYS] = +{ + HID_KEYB_USAGE_Q, HID_KEYB_USAGE_W, HID_KEYB_USAGE_E, HID_KEYB_USAGE_R, + HID_KEYB_USAGE_T, HID_KEYB_USAGE_Y, HID_KEYB_USAGE_U, HID_KEYB_USAGE_I, + HID_KEYB_USAGE_O, HID_KEYB_USAGE_P +}; + +const tAlphaKeys g_sRow1 = +{ + {"qwertyuiop", // Normal + "QWERTYUIOP", // Shift + "QWERTYUIOP", // Caps + "qwertyuiop"}, // Shift + Caps + g_pcRow1UsageCodes +}; + +//***************************************************************************** +// +// Keys on the third row of the virtual keyboard. Strings are defined showing +// the keycaps in unshifted, shifted and caps states. +// +//***************************************************************************** +#define NUM_ROW2_KEYS 10 + +const char g_pcRow2UsageCodes[NUM_ROW2_KEYS] = +{ + HID_KEYB_USAGE_A, HID_KEYB_USAGE_S, HID_KEYB_USAGE_D, HID_KEYB_USAGE_F, + HID_KEYB_USAGE_G, HID_KEYB_USAGE_H, HID_KEYB_USAGE_J, HID_KEYB_USAGE_K, + HID_KEYB_USAGE_L, HID_KEYB_USAGE_SEMICOLON +}; + +const tAlphaKeys g_sRow2 = +{ + {"asdfghjkl;", // Normal + "ASDFGHJKL:", // Shift + "ASDFGHJKL;", // Caps + "asdfghjkl;"}, // Shift + Caps + g_pcRow2UsageCodes +}; + +//***************************************************************************** +// +// Keys on the fourth row of the virtual keyboard. Strings are defined showing +// the keycaps in unshifted, shifted and caps states. +// +//***************************************************************************** +#define NUM_ROW3_KEYS 10 + +const char g_pcRow3UsageCodes[NUM_ROW3_KEYS] = +{ + HID_KEYB_USAGE_Z, HID_KEYB_USAGE_X, HID_KEYB_USAGE_C, HID_KEYB_USAGE_V, + HID_KEYB_USAGE_B, HID_KEYB_USAGE_N, HID_KEYB_USAGE_M, HID_KEYB_USAGE_COMMA, + HID_KEYB_USAGE_PERIOD, HID_KEYB_USAGE_FSLASH +}; + +const tAlphaKeys g_sRow3 = +{ + {"zxcvbnm,./", // Normal + "ZXCVBNM<>?", // Shift + "ZXCVBNM,./", // Caps + "zxcvbnm<>?"}, // Shift + Caps + g_pcRow3UsageCodes +}; + +//***************************************************************************** +// +// Prototypes for special key handlers +// +//***************************************************************************** +uint32_t CapsLockHandler(int16_t i16Col, int16_t i16Row, bool bPress); +uint32_t ShiftLockHandler(int16_t i16Col, int16_t i16Row, bool bPress); +uint32_t CtrlHandler(int16_t i16Col, int16_t i16Row, bool bPress); +uint32_t AltHandler(int16_t i16Col, int16_t i16Row, bool bPress); +uint32_t GUIHandler(int16_t i16Col, int16_t i16Row, bool bPress); +uint32_t DefaultSpecialHandler(int16_t i16Col, int16_t i16Row, bool bPress); +void CapsLockRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder); +void ShiftLockRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder); +void CtrlRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder); +void AltRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder); +void GUIRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder); + +//***************************************************************************** +// +// The bottom 2 rows of the virtual keyboard contains special keys which are +// handled differently from the basic, alphanumeric keys. +// +//***************************************************************************** +const tSpecialKey g_psRow4[] = +{ + {"Cap", 38, HID_KEYB_USAGE_CAPSLOCK, CapsLockHandler, + CapsLockRedrawHandler}, + {"Shift", 54 , 0, ShiftLockHandler, ShiftLockRedrawHandler}, + {" ", 80, HID_KEYB_USAGE_SPACE, DefaultSpecialHandler, 0}, + {"Ent", 54, HID_KEYB_USAGE_ENTER, DefaultSpecialHandler, 0}, + {"BS", 38, HID_KEYB_USAGE_BACKSPACE, DefaultSpecialHandler, 0} +}; + +#define NUM_ROW4_KEYS (sizeof(g_psRow4) / sizeof(tSpecialKey)) + +//***************************************************************************** +// +// Keys on the fifth row of the virtual keyboard. Strings are defined showing +// the keycaps in unshifted, shifted and caps states. This row contains only +// cursor keys so the key caps are the same for each state. +// +//***************************************************************************** +const tSpecialKey g_psRow5[] = +{ + {"Alt", 54, 0, AltHandler, AltRedrawHandler}, + {"Ctrl", 54, 0, CtrlHandler, CtrlRedrawHandler}, + {"GUI", 36, 0, GUIHandler, GUIRedrawHandler}, + {"<", 26, HID_KEYB_USAGE_LEFT_ARROW, DefaultSpecialHandler, 0}, + {">", 26, HID_KEYB_USAGE_RIGHT_ARROW, DefaultSpecialHandler, 0}, + {"^", 26, HID_KEYB_USAGE_UP_ARROW, DefaultSpecialHandler, 0}, + {"v", 26, HID_KEYB_USAGE_DOWN_ARROW, DefaultSpecialHandler, 0}, +}; + +#define NUM_ROW5_KEYS (sizeof(g_psRow5) / sizeof(tSpecialKey)) + +//***************************************************************************** +// +// Define the rows of the virtual keyboard. +// +//***************************************************************************** +const tRow g_psKeyboard[NUM_KEYBOARD_ROWS] = +{ + {false, (void *)&g_sRow0, NUM_ROW0_KEYS, 10}, + {false, (void *)&g_sRow1, NUM_ROW1_KEYS, 10 + (KEYBOARD_CELL_WIDTH / 3)}, + {false, (void *)&g_sRow2, NUM_ROW2_KEYS, 10 + + ((2 * KEYBOARD_CELL_WIDTH) / 3)}, + {false, (void *)&g_sRow3, NUM_ROW3_KEYS, 20}, + {true, (void *)g_psRow4, NUM_ROW4_KEYS, 20}, + {true, (void *)g_psRow5, NUM_ROW5_KEYS, 20 + (KEYBOARD_CELL_WIDTH / 4)} +}; + +//***************************************************************************** +// +// The current active key in the virtual keyboard. +// +//***************************************************************************** +int16_t g_i16FocusRow = 0; +int16_t g_i16FocusCol = 0; + +//***************************************************************************** +// +// The coordinates of the last touchscreen press. +// +//***************************************************************************** +int16_t g_i16XPress = 0; +int16_t g_i16YPress = 0; + +//***************************************************************************** +// +// Flags used to indicate events requiring attention from the main loop. +// +//***************************************************************************** +uint32_t g_ui32Command = 0; + +//***************************************************************************** +// +// Values ORed into g_ui32Command to indicate screen press and release events. +// +//***************************************************************************** +#define COMMAND_PRESS 0x01 +#define COMMAND_RELEASE 0x02 + +//***************************************************************************** +// +// SysCtlDelay takes 3 clock cycles so calculate the number of loops +// per millisecond. +// +// = ((120000000 cycles/sec) / (1000 ms/sec)) / 3 cycles/loop +// +// = (120000000 / (1000 * 3)) loops +// +//***************************************************************************** +#define SYSDELAY_1_MS (120000000 / (1000 * 3)) + +//***************************************************************************** +// +// This global indicates whether or not we are connected to a USB host. +// +//***************************************************************************** +volatile bool g_bConnected = false; + +//***************************************************************************** +// +// This global indicates whether or not the USB bus is currently in the suspend +// state. +// +//***************************************************************************** +volatile bool g_bSuspended = false; + +//***************************************************************************** +// +// Global system tick counter holds elapsed time since the application started +// expressed in 100ths of a second. +// +//***************************************************************************** +volatile uint32_t g_ui32SysTickCount; + +//***************************************************************************** +// +// The number of system ticks to wait for each USB packet to be sent before +// we assume the host has disconnected. The value 50 equates to half a second. +// +//***************************************************************************** +#define MAX_SEND_DELAY 50 + +//***************************************************************************** +// +// This global is set to true if the host sends a request to set or clear +// any keyboard LED. +// +//***************************************************************************** +volatile bool g_bDisplayUpdateRequired; + +//***************************************************************************** +// +// This global holds the current state of the keyboard LEDs as sent by the +// host. +// +//***************************************************************************** +volatile uint8_t g_ui8LEDStates; + +//***************************************************************************** +// +// This global is set by the USB data handler if the host reports a change in +// the keyboard LED states. The main loop uses it to update the virtual +// keyboard state. +// +//***************************************************************************** +volatile bool g_bLEDStateChanged; + +//***************************************************************************** +// +// This enumeration holds the various states that the keyboard can be in during +// normal operation. +// +//***************************************************************************** +volatile enum +{ + // + // Unconfigured. + // + STATE_UNCONFIGURED, + + // + // No keys to send and not waiting on data. + // + STATE_IDLE, + + // + // Waiting on data to be sent out. + // + STATE_SENDING +} g_eKeyboardState = STATE_UNCONFIGURED; + +//***************************************************************************** +// +// The current state of the modifier key flags which form the first byte of +// the report to the host. This indicates the state of the shift, control, +// alt and GUI keys on the keyboard. +// +//***************************************************************************** +static uint8_t g_ui8Modifiers = 0; + +//***************************************************************************** +// +// Graphics context used to show text on the color STN display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Debug-related definitions and declarations. +// +// Debug output is available via UART0 if DEBUG is defined during build. +// +//***************************************************************************** +#ifdef DEBUG +//***************************************************************************** +// +// Map all debug print calls to UARTprintf in debug builds. +// +//***************************************************************************** +#define DEBUG_PRINT UARTprintf + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +void +__error__(char *pcFilename, uint32_t ui32Line) +{ + while(1) + { + } +} +#else + +//***************************************************************************** +// +// Compile out all debug print calls in release builds. +// +//***************************************************************************** +#define DEBUG_PRINT while(0) ((int (*)(char *, ...))0) + +#endif + +//***************************************************************************** +// +// This function is called by the touchscreen driver whenever there is a +// change in press state or position. +// +//***************************************************************************** +static int32_t +KeyboardTouchHandler(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + switch(ui32Message) + { + // + // The touchscreen has been pressed. Remember the coordinates and + // set the flag indicating that the main loop should process some new + // input. + // + case WIDGET_MSG_PTR_DOWN: + g_i16XPress = (int16_t)i32X; + g_i16YPress = (int16_t)i32Y; + g_ui32Command |= COMMAND_PRESS; + break; + + // + // The touchscreen is no longer being pressed. Release any key which + // was previously pressed. + // + case WIDGET_MSG_PTR_UP: + g_ui32Command |= COMMAND_RELEASE; + break; + + // + // We have nothing to do on pointer move events. + // + case WIDGET_MSG_PTR_MOVE: + break; + } + + return(0); +} + +//***************************************************************************** +// +// Handles asynchronous events from the HID keyboard driver. +// +// \param pvCBData is the event callback pointer provided during +// USBDHIDKeyboardInit(). This is a pointer to our keyboard device structure +// (&g_sKeyboardDevice). +// \param ui32Event identifies the event we are being called back for. +// \param ui32MsgData is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the HID keyboard driver to inform the application +// of particular asynchronous events related to operation of the keyboard HID +// device. +// +// \return Returns 0 in all cases. +// +//***************************************************************************** +uint32_t +KeyboardHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, + void *pvMsgData) +{ + switch (ui32Event) + { + // + // The host has connected to us and configured the device. + // + case USB_EVENT_CONNECTED: + { + g_bConnected = true; + g_bSuspended = false; + break; + } + + // + // The host has disconnected from us. + // + case USB_EVENT_DISCONNECTED: + { + g_bConnected = false; + break; + } + + // + // We receive this event every time the host acknowledges transmission + // of a report. It is used here purely as a way of determining whether + // the host is still talking to us or not. + // + case USB_EVENT_TX_COMPLETE: + { + // + // Enter the idle state since we finished sending something. + // + g_eKeyboardState = STATE_IDLE; + break; + } + + // + // This event indicates that the host has suspended the USB bus. + // + case USB_EVENT_SUSPEND: + { + g_bSuspended = true; + break; + } + + // + // This event signals that the host has resumed signaling on the bus. + // + case USB_EVENT_RESUME: + { + g_bSuspended = false; + break; + } + + // + // This event indicates that the host has sent us an Output or + // Feature report and that the report is now in the buffer we provided + // on the previous USBD_HID_EVENT_GET_REPORT_BUFFER callback. + // + case USBD_HID_KEYB_EVENT_SET_LEDS: + { + + // + // Remember the new LED state. + // + g_ui8LEDStates = (uint8_t)(ui32MsgData & 0xFF); + + // + // Set a flag to tell the main loop that the LED state changed. + // + g_bLEDStateChanged = true; + + break; + } + + // + // We ignore all other events. + // + default: + { + break; + } + } + return (0); +} + +//*************************************************************************** +// +// Wait for a period of time for the state to become idle. +// +// \param ulTimeoutTick is the number of system ticks to wait before +// declaring a timeout and returning \b false. +// +// This function polls the current keyboard state for ui32TimeoutTicks system +// ticks waiting for it to become idle. If the state becomes idle, the +// function returns true. If it ui32TimeoutTicks occur prior to the state +// becoming idle, false is returned to indicate a timeout. +// +// \return Returns \b true on success or \b false on timeout. +// +//*************************************************************************** +bool WaitForSendIdle(uint_fast32_t ui32TimeoutTicks) +{ + uint32_t ui32Start; + uint32_t ui32Now; + uint32_t ui32Elapsed; + + ui32Start = g_ui32SysTickCount; + ui32Elapsed = 0; + + while (ui32Elapsed < ui32TimeoutTicks) + { + // + // Is the keyboard is idle, return immediately. + // + if (g_eKeyboardState == STATE_IDLE) + { + return (true); + } + + // + // Determine how much time has elapsed since we started waiting. This + // should be safe across a wrap of g_ui32SysTickCount. I suspect you + // won't likely leave the app running for the 497.1 days it will take + // for this to occur but you never know... + // + ui32Now = g_ui32SysTickCount; + ui32Elapsed = (ui32Start < ui32Now) ? (ui32Now - ui32Start) : + (((uint32_t)0xFFFFFFFF - ui32Start) + ui32Now + 1); + } + + // + // If we get here, we timed out so return a bad return code to let the + // caller know. + // + return (false); +} + +//*************************************************************************** +// +// Determine the X position on the screen for a given key in the virtual +// keyboard. +// +// \param i16Col is the column number of the key whose position is being +// queried. +// \param i16Row is the row number of the key whose position is being queried. +// +// \return Returns the horizontal pixel coordinate of the left edge of the +// key. Note that this is 1 greater than you would expect since we allow +// space for the focus border round the character. +// +//*************************************************************************** +int16_t GetVirtualKeyX(int16_t i16Col, int16_t i16Row) +{ + int16_t i16X; + int16_t i16Count; + tSpecialKey *psKey; + + // + // Is this a row of special keys? + // + if (g_psKeyboard[i16Row].bSpecial) + { + // + // Yes - we need to walk along the row of keys since the widths can + // vary by key. + // + i16X = g_psKeyboard[i16Row].i16LeftOffset; + psKey = (tSpecialKey *)(g_psKeyboard[i16Row].pvKeys); + + for (i16Count = 0; i16Count < i16Col; i16Count++) + { + i16X += (psKey[i16Count].i16Width + KEYBOARD_COL_SPACING); + } + + // + // Return the calculated X position for the key. + // + return (i16X + 1); + } + else + { + // + // This is a normal alphanumeric row so the keys are all the same + // width. + // + return (g_psKeyboard[i16Row].i16LeftOffset + + (i16Col * KEYBOARD_CELL_WIDTH) + 1); + } +} + +//*************************************************************************** +// +// Find a key on one row closest the a key on another row. +// +// \param i16FromCol +// \param i16FromRow +// \param i16ToRow +// +// This function is called during processing of the up and down keys while +// navigating the virtual keyboard. It finds the key in row i16ToRow that +// sits closest to key index i16FromCol in row i16FromRow. +// +// \return Returns the index (column number) of the closest key in row +// i16ToRow. +// +//*************************************************************************** +int16_t VirtualKeyboardFindClosestKey(int16_t i16FromCol, int16_t i16FromRow, + int16_t i16ToRow) +{ + int16_t i16Index; + int16_t i16X; + + // + // If moving between 2 alphanumeric rows, just move to the same key + // index in the new row (taking care to pass back a valid key index). + // + if (!g_psKeyboard[i16FromRow].bSpecial && + !g_psKeyboard[i16ToRow].bSpecial) + { + i16Index = i16FromCol; + if (i16Index > g_psKeyboard[i16ToRow].i16NumKeys) + { + i16Index = g_psKeyboard[i16ToRow].i16NumKeys - 1; + } + + return (i16Index); + } + + // + // Determine the x position of the key we are moving from. + // + i16X = GetVirtualKeyX(i16FromCol, i16FromRow); + + // + // Check for cases where the supplied x coordinate is at or to the left of + // any key in this row. In this case, we always pass back index 0. + // + if (i16X <= g_psKeyboard[i16ToRow].i16LeftOffset) + { + return (0); + } + + // + // The x coordinate is not to the left of any key so we need to determine + // which particular key it relates to. The position is associated with a + // key if it falls within the width of the key and the following space. + // + if (g_psKeyboard[i16ToRow].bSpecial) + { + // + // This is a special key so the keys on this row can all have different + // widths. We walk through them looking for a hit. + // + for (i16Index = 1; i16Index < g_psKeyboard[i16ToRow].i16NumKeys; + i16Index++) + { + // + // If the passed coordinate is less than the leftmost position of + // this key, we've overshot. Drop out since we've found our + // answer. + // + if (i16X < GetVirtualKeyX(i16Index, i16ToRow)) + { + break; + } + } + + // + // Return the index of the key one before the one we last looked at + // since this is the key which contains the supplied x coordinate. + // Since we end the loop above on the last key this handles cases + // where the x coordinate passed is further right than any key on the + // row. + // + return (i16Index - 1); + } + else + { + // + // This is an alphanumeric row so we determine the index based on + // the fixed character cell width. + // + i16Index = (i16X - g_psKeyboard[i16ToRow].i16LeftOffset) / + KEYBOARD_CELL_WIDTH; + + // + // If we calculated an index higher than the number of keys on the + // row, return the largest index supported. + // + if (i16Index >= g_psKeyboard[i16ToRow].i16NumKeys) + { + i16Index = g_psKeyboard[i16ToRow].i16NumKeys - 1; + } + } + + // + // Return the column index we calculated. + // + return (i16Index); +} + +//*************************************************************************** +// +// Draw a single key of the virtual keyboard. +// +// \param i16Col contains the column number for the key to be drawn. +// \param i16Row contains the row number for the key to be drawn. +// \param bFocus is \b true if the red focus border is to be drawn around this +// key or \b false if the border is to be erased. +// \param bPressed is \b true of the key is to be drawn in the pressed state +// or \b false if it is to be drawn in the released state. +// \param bBorder is \b true if the whole key is to be redrawn or \b false +// if only the key cap text is to be redrawn. +// \param bBright is \b true if the key is to be drawn in the bright (yellow) +// color or \b false if drawn in the normal (grey) color. +// +// This function draws a single key, varying the look depending upon whether +// the key is pressed or released and whether it has the input focus or not. +// If the bBorder parameter is false, only the key label is refreshed. If +// true, the whole key is redrawn. +// +// This is the lowest level function used to refresh the display of both +// alphanumeric and special keys. +// +// \return None. +// +//*************************************************************************** +void DrawKey(int16_t i16Col, int16_t i16Row, bool bFocus, bool bPressed, + bool bBorder, bool bBright) +{ + tRectangle sRectOutline; + tRectangle sFocusBorder; + tSpecialKey *psSpecial; + tAlphaKeys *psAlpha; + int16_t i16X; + int16_t i16Y; + int16_t i16Width; + char pcBuffer[2]; + char *pcLabel; + uint32_t ui32Highlight; + uint32_t ui32Shadow; + + // + // Determine the position, width and text label for this key. + // + i16X = GetVirtualKeyX(i16Col, i16Row); + i16Y = KEYBOARD_TOP + (i16Row * KEYBOARD_CELL_HEIGHT); + if (g_psKeyboard[i16Row].bSpecial) + { + psSpecial = (tSpecialKey *)g_psKeyboard[i16Row].pvKeys; + i16Width = psSpecial[i16Col].i16Width; + pcLabel = (char *)psSpecial[i16Col].pcLabel; + } + else + { + i16Width = KEYBOARD_KEY_WIDTH; + + psAlpha = (tAlphaKeys *)g_psKeyboard[i16Row].pvKeys; + pcBuffer[1] = (char)0; + pcBuffer[0] = (psAlpha->pcKey[g_eVirtualKeyState])[i16Col]; + pcLabel = pcBuffer; + } + + // + // Determine the bounding rectangle for the key. This rectangle is the + // area containing the key background color and label text. It excludes + // the 1 line border. + // + sRectOutline.i16XMin = i16X + 1; + sRectOutline.i16YMin = i16Y + 1; + sRectOutline.i16XMax = (i16X + i16Width) - 2; + sRectOutline.i16YMax = (i16Y + KEYBOARD_KEY_HEIGHT) - 2; + + // + // If the key has focus, we will draw a 1 pixel red line around it + // outside the actual key cell. Set up the rectangle for this here. + // + sFocusBorder.i16XMin = i16X - 1; + sFocusBorder.i16YMin = i16Y - 1; + sFocusBorder.i16XMax = i16X + i16Width; + sFocusBorder.i16YMax = i16Y + KEYBOARD_KEY_HEIGHT; + + // + // Pick the relevant highlight and shadow colors depending upon the button + // state. + // + if (!bBright) + { + // + // The key is not bright so just pick the normal (grey) + // + ui32Highlight = bPressed ? SHADOW_COLOR : HIGHLIGHT_COLOR; + ui32Shadow = bPressed ? HIGHLIGHT_COLOR : SHADOW_COLOR; + } + else + { + ui32Highlight = bPressed ? SHADOW_BRIGHT_COLOR : + HIGHLIGHT_BRIGHT_COLOR; + ui32Shadow = bPressed ? HIGHLIGHT_BRIGHT_COLOR : SHADOW_BRIGHT_COLOR; + } + + // + // Are we drawing the whole key or merely updating the label? + // + if (bBorder) + { + // + // Draw the focus border in the relevant color. + // + GrContextForegroundSet(&g_sContext, bFocus ? FOCUS_COLOR + : BACKGROUND_COLOR); + GrRectDraw(&g_sContext, &sFocusBorder); + + // + // Draw the key border. + // + GrContextForegroundSet(&g_sContext, ui32Highlight); + GrLineDrawH(&g_sContext, i16X, i16X + i16Width - 1, i16Y); + GrLineDrawV(&g_sContext, i16X, i16Y, i16Y + KEYBOARD_KEY_HEIGHT - 1); + GrContextForegroundSet(&g_sContext, ui32Shadow); + GrLineDrawH(&g_sContext, i16X + 1, i16X + i16Width - 1, i16Y + + KEYBOARD_KEY_HEIGHT - 1); + GrLineDrawV(&g_sContext, i16X + i16Width - 1, i16Y + 1, i16Y + + KEYBOARD_KEY_HEIGHT - 1); + } + + // + // Fill the button with the main button color + // + GrContextForegroundSet(&g_sContext, bBright ? KEY_BRIGHT_COLOR : + KEY_COLOR); + GrRectFill(&g_sContext, &sRectOutline); + + // + // Update the key label. We center the text in the key, moving it one + // pixel down and to the right if the key is in the pressed state. + // + GrContextForegroundSet(&g_sContext, KEY_TEXT_COLOR); + GrContextBackgroundSet(&g_sContext, bBright ? KEY_BRIGHT_COLOR : + KEY_COLOR); + GrContextClipRegionSet(&g_sContext, &sRectOutline); + GrStringDrawCentered(&g_sContext, pcLabel, -1, (bPressed ? 1 : 0) + + ((sRectOutline.i16XMax + sRectOutline.i16XMin) / 2), + (bPressed ? 1 : 0) + ((sRectOutline.i16YMax + + sRectOutline.i16YMin) / 2), true); + + // + // Revert to the previous clipping region. + // + sRectOutline.i16XMin = 0; + sRectOutline.i16YMin = 0; + sRectOutline.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRectOutline.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1; + GrContextClipRegionSet(&g_sContext, &sRectOutline); + + // + // Revert to the usual background and foreground colors. + // + GrContextBackgroundSet(&g_sContext, BACKGROUND_COLOR); + GrContextForegroundSet(&g_sContext, ClrWhite); +} + +//*************************************************************************** +// +// Call the appropriate handler to draw a single key on the virtual +// keyboard. This top level function handles both alphanumeric and special +// keys. +// +// \param i16Col contains the column number for the key to be drawn. +// \param i16Row contains the row number for the key to be drawn. +// \param bFocus is \b true if the red focus border is to be drawn around this +// key or \b false if the border is to be erased. +// \param bPressed is \b true of the key is to be drawn in the pressed state +// or \b false if it is to be drawn in the released state. +// \param bBorder is \b true if the whole key is to be redrawn or \b false +// if only the key cap text is to be redrawn. +// +// This function draws a single key on the keyboard, varying the look depending +// upon whether the key is pressed or released and whether it has the input +// focus or not. If the bBorder parameter is \b false, only the key label is +// refreshed. If \b true, the whole key is redrawn. +// +// If the specific key is a special key with a redraw handler set, the +// handler function is called to update the display. If not, the basic +// DrawKey() function is used. +// +// \return None. +// +//*************************************************************************** +void DrawVirtualKey(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder) +{ + tSpecialKey *psSpecial; + + // + // Get a pointer to the array of special keys for this row (even though + // we are not yet sure if this is a special row). + // + psSpecial = (tSpecialKey *)g_psKeyboard[i16Row].pvKeys; + + // + // Is this a special row and, if so, does the current key have a redraw + // handler installed? + // + if (g_psKeyboard[i16Row].bSpecial && psSpecial[i16Col].pfnRedrawHandler) + { + // + // Yes - call the special handler for this key. + // + psSpecial[i16Col].pfnRedrawHandler(i16Col, i16Row, bFocus, bPressed, + bBorder); + } + else + { + // + // The key has no redraw handler so just treat it as a normal + // key. + // + DrawKey(i16Col, i16Row, bFocus, bPressed, bBorder, false); + } +} + +//*************************************************************************** +// +// Draw or update the virtual keyboard on the display. +// +// \param bBorder is \b true if the whole virtual keyboard is to be drawn or +// \b false if only the key caps have to be updated. +// +// Draw the virtual keyboard on the display. The bBorder parameter controls +// whether the whole keyboard is drawn (true) or whether only the key labels +// are replaced (false). +// +// \return None. +// +//*************************************************************************** +void DrawVirtualKeyboard(bool bBorder) +{ + int16_t i16Col; + int16_t i16Row; + + // + // Select the font we use for the keycaps. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + // + // Loop through each row, drawing each to the display + // + for (i16Row = 0; i16Row < NUM_KEYBOARD_ROWS; i16Row++) + { + // + // Loop through each key on this row of the keyboard. + // + for (i16Col = 0; i16Col < g_psKeyboard[i16Row].i16NumKeys; i16Col++) + { + // + // Draw a single key. + // + DrawVirtualKey(i16Col, i16Row, false, false, bBorder); + } + } +} + +//**************************************************************************** +// +// This function is called by the main loop if it receives a signal from the +// USB data handler telling it that the host has changed the state of the +// keyboard LEDs. We update the state and display accordingly. +// +//**************************************************************************** +void KeyboardLEDsChanged(void) +{ + bool bCapsOn; + + // + // Clear the flag indicating a state change occurred. + // + g_bLEDStateChanged = false; + + // + // Is CAPSLOCK on or off? + // + bCapsOn = (g_ui8LEDStates & HID_KEYB_CAPS_LOCK) ? true : false; + + // + // Update the state to ensure that the communicated CAPSLOCK state is + // incorporated. + // + switch (g_eVirtualKeyState) + { + // + // Are we in an unshifted state? + // + case KEY_STATE_NORMAL: + case KEY_STATE_CAPS: + { + if (bCapsOn) + { + g_eVirtualKeyState = KEY_STATE_CAPS; + } + else + { + g_eVirtualKeyState = KEY_STATE_NORMAL; + } + break; + } + + // + // Are we in a shifted state? + // + case KEY_STATE_SHIFT: + case KEY_STATE_BOTH: + { + if (bCapsOn) + { + g_eVirtualKeyState = KEY_STATE_BOTH; + } + else + { + g_eVirtualKeyState = KEY_STATE_SHIFT; + } + break; + } + + default: + { + // + // Do nothing. This default case merely prevents a compiler + // warning related to the NUM_KEY_STATES enum member not having + // a handler. + // + break; + } + } + + // + // Redraw the virtual keyboard keycaps with the appropriate characters. + // + DrawVirtualKeyboard(false); + + // + // Set the CAPSLOCK LED appropriately. + // + ROM_GPIOPinWrite(CAPSLOCK_GPIO_BASE, CAPSLOCK_GPIO_PIN, + bCapsOn ? CAPSLOCK_ACTIVE : CAPSLOCK_INACTIVE); +} + +//*************************************************************************** +// +// Special key handler for the Caps virtual key. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the user presses the "Select" button +// when the CapsLock key on the virtual keyboard has input focus. +// +// \returns Returns \b KEYB_SUCCESS on success or a non-zero value to +// indicate failure. +// +//*************************************************************************** +uint32_t +CapsLockHandler(int16_t i16Col, int16_t i16Row, bool bPress) +{ + uint32_t ui32Retcode; + + // + // Note that we don't set the state or redraw the keyboard here since the + // host is expected to send us an update telling is that the CAPSLOCK + // state changed. We trigger the keyboard redrawing and LED setting off + // this message instead. In this function, we only redraw the CAPSLOCK + // key itself to provide user feedback. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, + (g_ui8LEDStates & HID_KEYB_CAPS_LOCK) ? true : false); + + // + // Send the CAPSLOCK key code back to the host. + // + g_eKeyboardState = STATE_SENDING; + ui32Retcode = USBDHIDKeyboardKeyStateChange((void *)&g_sKeyboardDevice, + g_ui8Modifiers, + HID_KEYB_USAGE_CAPSLOCK, + bPress); + + return (ui32Retcode); +} + +//*************************************************************************** +// +// Special key handler for the Ctrl virtual key. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the user presses the "Select" button +// when the Ctrl key on the virtual keyboard has input focus. +// +// \returns Returns \b KEYB_SUCCESS on success or a non-zero value to +// indicate failure. +// +//*************************************************************************** +uint32_t +CtrlHandler(int16_t i16Col, int16_t i16Row, bool bPress) +{ + uint32_t ui32Retcode; + + // + // Ignore key release messages. + // + if(bPress) + { + // + // Toggle the modifier bit for the left control key. + // + g_ui8Modifiers ^= HID_KEYB_LEFT_CTRL; + + // + // Update the host with the new modifier state. Sending usage code + // HID_KEYB_USAGE_RESERVED indicates no key press so this changes only + // the modifiers. + // + g_eKeyboardState = STATE_SENDING; + ui32Retcode = USBDHIDKeyboardKeyStateChange((void *)&g_sKeyboardDevice, + g_ui8Modifiers, + HID_KEYB_USAGE_RESERVED, + true); + } + else + { + // + // We are ignoring key release but tell the caller that all is well. + // + ui32Retcode = KEYB_SUCCESS; + } + + // + // Redraw the key in the appropriate state. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, + (g_ui8Modifiers & HID_KEYB_LEFT_CTRL) ? true : false); + + return(ui32Retcode); +} + +//*************************************************************************** +// +// Special key handler for the Alt virtual key. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the user presses the "Select" button +// when the Alt key on the virtual keyboard has input focus. +// +// \returns Returns \b KEYB_SUCCESS on success or a non-zero value to +// indicate failure. +// +//*************************************************************************** +uint32_t +AltHandler(int16_t i16Col, int16_t i16Row, bool bPress) +{ + uint32_t ui32Retcode; + + // + // Ignore key release messages. + // + if(bPress) + { + // + // Toggle the modifier bit for the left ALT key. + // + g_ui8Modifiers ^= HID_KEYB_LEFT_ALT; + + // + // Update the host with the new modifier state. Sending usage code + // HID_KEYB_USAGE_RESERVED indicates no key press so this changes only + // the modifiers. + // + g_eKeyboardState = STATE_SENDING; + ui32Retcode = USBDHIDKeyboardKeyStateChange((void *)&g_sKeyboardDevice, + g_ui8Modifiers, + HID_KEYB_USAGE_RESERVED, + true); + } + else + { + // + // We are ignoring key release but tell the caller that all is well. + // + ui32Retcode = KEYB_SUCCESS; + } + + // + // Redraw the key in the appropriate state. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, + (g_ui8Modifiers & HID_KEYB_LEFT_ALT) ? true : false); + + return(ui32Retcode); +} + +//*************************************************************************** +// +// Special key handler for the GUI virtual key. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the user presses the "Select" button +// when the GUI key on the virtual keyboard has input focus. +// +// \returns Returns \b KEYB_SUCCESS on success or a non-zero value to +// indicate failure. +// +//*************************************************************************** +uint32_t +GUIHandler(int16_t i16Col, int16_t i16Row, bool bPress) +{ + uint32_t ui32Retcode; + + // + // Ignore key release messages. + // + if(bPress) + { + // + // Toggle the modifier bit for the left GUI key. + // + g_ui8Modifiers ^= HID_KEYB_LEFT_GUI; + + // + // Update the host with the new modifier state. Sending usage code + // HID_KEYB_USAGE_RESERVED indicates no key press so this changes only + // the modifiers. + // + g_eKeyboardState = STATE_SENDING; + ui32Retcode = USBDHIDKeyboardKeyStateChange((void *)&g_sKeyboardDevice, + g_ui8Modifiers, + HID_KEYB_USAGE_RESERVED, + true); + } + else + { + // + // We are ignoring key release but tell the caller that all is well. + // + ui32Retcode = KEYB_SUCCESS; + } + + // + // Redraw the key in the appropriate state. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, + (g_ui8Modifiers & HID_KEYB_LEFT_GUI) ? true : false); + + return(ui32Retcode); +} + +//*************************************************************************** +// +// Special key handler for the Shift virtual key. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the user presses the "Select" button +// when the ShiftLock key on the virtual keyboard has input focus. +// +// \returns Returns \b true on success or \b false on failure. +// +//*************************************************************************** +uint32_t +ShiftLockHandler(int16_t i16Col, int16_t i16Row, bool bPress) +{ + // + // We ignore key release for the shift lock. + // + if(bPress) + { + // + // Set the new state by toggling the shift component. + // + switch(g_eVirtualKeyState) + { + case KEY_STATE_NORMAL: + { + g_eVirtualKeyState = KEY_STATE_SHIFT; + g_ui8Modifiers |= HID_KEYB_LEFT_SHIFT; + break; + } + + case KEY_STATE_SHIFT: + { + g_eVirtualKeyState = KEY_STATE_NORMAL; + g_ui8Modifiers &= ~HID_KEYB_LEFT_SHIFT; + break; + } + + case KEY_STATE_CAPS: + { + g_eVirtualKeyState = KEY_STATE_BOTH; + g_ui8Modifiers |= HID_KEYB_LEFT_SHIFT; + break; + } + + case KEY_STATE_BOTH: + { + g_eVirtualKeyState = KEY_STATE_CAPS; + g_ui8Modifiers &= ~HID_KEYB_LEFT_SHIFT; + break; + } + + default: + { + // + // Do nothing. This default case merely prevents a compiler + // warning related to the NUM_KEY_STATES enum member not having + // a handler. + // + break; + } + } + + // + // Redraw the keycaps to show the shifted characters. + // + DrawVirtualKeyboard(false); + } + + // + // Redraw the SHIFT key in the appropriate state. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, + (g_ui8Modifiers & HID_KEYB_LEFT_SHIFT) ? true : false); + + return(KEYB_SUCCESS); +} + +//*************************************************************************** +// +// Redraw the caps lock key. This is a thin layer over the usual DrawKey +// function which merely sets the key into bright or normal mode depending +// upon the current caps lock state. +// +//*************************************************************************** +void +CapsLockRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder) +{ + // + // Draw the key in either normal color if the CAPS lock is not active + // or in the bright color if it is. + // + DrawKey(i16Col, i16Row, bFocus, bPressed, bBorder, + ((g_eVirtualKeyState == KEY_STATE_BOTH) || + (g_eVirtualKeyState == KEY_STATE_CAPS)) ? true : false); +} + +//*************************************************************************** +// +// Redraw the Shift lock key. This is a thin layer over the usual DrawKey +// function which merely sets the key into bright or normal mode depending +// upon the current shift state. +// +//*************************************************************************** +void +ShiftLockRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder) +{ + // + // Draw the key in either normal color if the shift lock is not active + // or in the bright color if it is. + // + DrawKey(i16Col, i16Row, bFocus, bPressed, bBorder, + (g_ui8Modifiers & HID_KEYB_LEFT_SHIFT) ? true : false); +} + +//*************************************************************************** +// +// Redraw the Ctrl sticky key. This is a thin layer over the usual DrawKey +// function which merely sets the key into bright or normal mode depending +// upon the current key state. +// +//*************************************************************************** +void +CtrlRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder) +{ + // + // Draw the key in either normal color if CTRL is not active + // or in the bright color if it is. + // + DrawKey(i16Col, i16Row, bFocus, bPressed, bBorder, + (g_ui8Modifiers & HID_KEYB_LEFT_CTRL) ? true : false); +} + +//*************************************************************************** +// +// Redraw the Alt sticky key. This is a thin layer over the usual DrawKey +// function which merely sets the key into bright or normal mode depending +// upon the current key state. +// +//*************************************************************************** +void +AltRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder) +{ + // + // Draw the key in either normal color if CTRL is not active + // or in the bright color if it is. + // + DrawKey(i16Col, i16Row, bFocus, bPressed, bBorder, + (g_ui8Modifiers & HID_KEYB_LEFT_ALT) ? true : false); +} + +//*************************************************************************** +// +// Redraw the GUI sticky key. This is a thin layer over the usual DrawKey +// function which merely sets the key into bright or normal mode depending +// upon the current key state. +// +//*************************************************************************** +void +GUIRedrawHandler(int16_t i16Col, int16_t i16Row, bool bFocus, + bool bPressed, bool bBorder) +{ + // + // Draw the key in either normal color if CTRL is not active + // or in the bright color if it is. + // + DrawKey(i16Col, i16Row, bFocus, bPressed, bBorder, + (g_ui8Modifiers & HID_KEYB_LEFT_GUI) ? true : false); +} + +//*************************************************************************** +// +// Special key handler for the space, enter, backspace and cursor control +// virtual keys. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the user presses the "Select" button +// when the space, backspace, enter or cursor control keys on the virtual +// keyboard have input focus. These keys are like any other alpha key in that +// they merely send a single usage code back to the host. We need a special +// handler for them, however, since they are on the bottom row of the virtual +// keyboard and this row contains other special keys. +// +// \returns Returns \b true on success or \b false on failure. +// +//*************************************************************************** +uint32_t +DefaultSpecialHandler(int16_t i16Col, int16_t i16Row, bool bPress) +{ + tSpecialKey *psKey; + uint32_t ui32Retcode; + + // + // Get a pointer to the array of keys for this row. + // + psKey = (tSpecialKey *)g_psKeyboard[i16Row].pvKeys; + + // + // Send the usage code for this key back to the USB host. + // + g_eKeyboardState = STATE_SENDING; + ui32Retcode = USBDHIDKeyboardKeyStateChange((void *)&g_sKeyboardDevice, + g_ui8Modifiers, + psKey[i16Col].cUsageCode, + bPress); + + // + // Redraw the key in the appropriate state. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, false); + + return(ui32Retcode); +} + +//***************************************************************************** +// +// Processes a single key press on the virtual keyboard. +// +// \param i16Col is the column number of the key which has been pressed. +// \param i16Row is the row number of the key which has been pressed. +// \param bPress is \b true if the key has been pressed or \b false if it has +// been released. +// +// This function is called whenever the "Select" button is pressed or released. +// Depending upon the specific key, this will either call a special key handler +// function or send a report back to the USB host indicating the change of +// state. +// +// \return Returns \b true on success or \b false on failure. +// +//***************************************************************************** +bool +VirtualKeyboardKeyPress(int16_t i16Col, int16_t i16Row, bool bPress) +{ + tSpecialKey *psKey; + tAlphaKeys *psAlphaKeys; + uint32_t ui32Retcode; + bool bSuccess; + + // + // Are we dealing with a special key? + // + if(g_psKeyboard[i16Row].bSpecial) + { + // + // Yes - call the handler for this special key. + // + psKey = (tSpecialKey *)g_psKeyboard[i16Row].pvKeys; + ui32Retcode = psKey[i16Col].pfnPressHandler(i16Col, i16Row, bPress); + + DEBUG_PRINT("Key \"%s\" %s\n", psKey[i16Col].pcLabel, + (bPress ? "pressed" : "released")); + } + else + { + // + // Normal key - add or remove this key from the list of keys currently + // pressed and pass the latest report back to the host. + // + psAlphaKeys = (tAlphaKeys *)g_psKeyboard[i16Row].pvKeys; + g_eKeyboardState = STATE_SENDING; + ui32Retcode = USBDHIDKeyboardKeyStateChange( + (void *)&g_sKeyboardDevice, + g_ui8Modifiers, + psAlphaKeys->pcUsageCodes[i16Col], + bPress); + DEBUG_PRINT("Key \"%c\" %s\n", + psAlphaKeys->pcKey[g_eVirtualKeyState][i16Col], + (bPress ? "pressed" : "released")); + + // + // Redraw the key in the appropriate state. + // + DrawKey(i16Col, i16Row, bPress ? true : false, bPress, true, false); + } + + // + // Did we schedule the report for transmission? + // + if(ui32Retcode == KEYB_SUCCESS) + { + // + // Wait for the host to acknowledge the transmission if all went well. + // + bSuccess = WaitForSendIdle(MAX_SEND_DELAY); + + // + // Did we time out waiting for the packet to be sent? + // + if (!bSuccess) + { + // + // Yes - assume the host disconnected and go back to + // waiting for a new connection. + // + g_bConnected = 0; + } + } + else + { + // + // An error was reported when trying to send the character. + // + bSuccess = false; + } + return(bSuccess); +} + +//***************************************************************************** +// +// Map a screen coordinate to the column and row of a virtual key. +// +// \param i16X is the screen X coordinate that is to be mapped. +// \param i16Y is the screen Y coordinate that is to be mapped. +// \param pusCol is a pointer to the variable which will be written with the +// column number of the virtual key at screen position (i16X, i16Y). +// \param pusRow is a pointer to the variable which will be written with the +// row number of the virtual key at screen position (i16X, i16Y). +// +// \return Returns \b true if a virtual key exists at the position provided or +// \b false otherwise. If \b false is returned, pointers \e pusCol and \e +// pusRow will not be written. +// +//***************************************************************************** +static bool +FindVirtualKey(int16_t i16X, int16_t i16Y, int16_t *psCol, int16_t *psRow) +{ + uint32_t ui32Row, ui32Col, ui32NumKeys; + int16_t i16KeyX, i16KeyWidth; + tSpecialKey *psKey; + + // + // Initialize the column value. + // + ui32Col = 0; + + // + // Determine which row the coordinates occur in. + // + for(ui32Row = 0; ui32Row < NUM_KEYBOARD_ROWS; ui32Row++) + { + if((i16Y > (KEYBOARD_TOP + (ui32Row * KEYBOARD_CELL_HEIGHT))) && + (i16Y < (KEYBOARD_TOP + (ui32Row * KEYBOARD_CELL_HEIGHT) + + KEYBOARD_KEY_HEIGHT))) + { + // + // If this is a standard alphanumeric row, we can determine the + // mapping arithmetically since all the keys are the same width. + if(!g_psKeyboard[ui32Row].bSpecial) + { + // + // First check to make sure that the press is not to the left + // of the first key in the row. + // + if(i16X < g_psKeyboard[ui32Row].i16LeftOffset) + { + return(false); + } + + // + // This includes presses that occur in the space between + // keys but, given that the touchscreen is not hugely accurate + // and that fingers or styli will likely cover more than a + // couple of pixels, this is probably perfectly fine. + // + ui32Col = ((i16X - g_psKeyboard[ui32Row].i16LeftOffset) / + KEYBOARD_CELL_WIDTH); + + // + // If we calculated an out of range column, this means no key + // exists under the press position so return false to indicate + // this. + // + if(ui32Col >= g_psKeyboard[ui32Row].i16NumKeys) + { + return(false); + } + } + else + { + // + // The touch is somewhere within this row of keys. How many keys + // are in this row? + // + ui32NumKeys = g_psKeyboard[ui32Row].i16NumKeys; + i16KeyX = g_psKeyboard[ui32Row].i16LeftOffset; + + // + // Walk through the keys in this row. + // + for(ui32Col = 0; ui32Col < ui32NumKeys; ui32Col++) + { + i16KeyX = GetVirtualKeyX(ui32Col, ui32Row); + psKey = (tSpecialKey *)(g_psKeyboard[ui32Row].pvKeys); + i16KeyWidth = psKey[ui32Col].i16Width + KEYBOARD_COL_SPACING; + + if((i16X >= i16KeyX) && (i16X < (i16KeyX + i16KeyWidth))) + { + // + // We found a matching key so drop out of the loop. + // + break; + } + } + + // + // If we get here and ui32Col has reached ui32NumKeys, we didn't + // find a key under the press position. + // + if(ui32Col == ui32NumKeys) + { + return(false); + } + } + break; + } + } + + // + // If we end up here and the row number is equal to the number of rows in + // the keyboard, the press was not in any keyboard row so return false. + // + if(ui32Row == NUM_KEYBOARD_ROWS) + { + return(false); + } + + // + // At this point, we found a key beneath the press so we return the + // information to the caller. + // + *psCol = (int16_t)ui32Col; + *psRow = (int16_t)ui32Row; + return(true); +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +int +main(void) +{ + tRectangle sRect; + int32_t int32CenterX; + uint32_t ui32LastTickCount, ui32Processing; + bool bRetcode, bLastSuspend, bKeyPressed; + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-dev-keyboard"); + + + // + // Configure GPIO pin which controls the CAPSLOCK LED and turn it off + // initially. Note that PinoutSet() already enabled the GPIO peripheral + // containing this pin + // + ROM_GPIOPinTypeGPIOOutput(CAPSLOCK_GPIO_BASE, CAPSLOCK_GPIO_PIN); + ROM_GPIOPinWrite(CAPSLOCK_GPIO_BASE, CAPSLOCK_GPIO_PIN, CAPSLOCK_INACTIVE); + +#ifdef DEBUG + // + // Open UART0 for debug output. + // + // + // Enable UART0 + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Initialize the UART for console I/O. + // + UARTStdioConfig(0, 115200, ui32SysClock); +#endif + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(KeyboardTouchHandler); + + // + // Set the system tick to fire 100 times per second. + // + ROM_SysTickPeriodSet(ui32SysClock / SYSTICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Not configured initially. + // + g_bConnected = false; + g_bSuspended = false; + bLastSuspend = false; + + // + // Initialize the USB stack for device mode. + // + USBStackModeSet(0, eUSBModeDevice, 0); + + // + // Pass our device information to the USB HID device class driver, + // initialize the USB + // controller and connect the device to the bus. + // + USBDHIDKeyboardInit(0, &g_sKeyboardDevice); + + // + // find the middle X coordinate. + // + int32CenterX = GrContextDpyWidthGet(&g_sContext) / 2; + + // + // The main loop starts here. We begin by waiting for a host connection + // then drop into the main keyboard handling section. If the host + // disconnects, we return to the top and wait for a new connection. + // + while(1) + { + // + // Fill all but the top 24 rows of the screen with black to erase the + // keyboard. + // + sRect.i16XMin = 10; + sRect.i16YMin = 24; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 10; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 10; + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(&g_sContext, &sRect); + + // + // Tell the user what we are doing and provide some basic instructions. + // + GrContextFontSet(&g_sContext, g_psFontCmss20b); + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(&g_sContext, " Waiting for host... ", -1, + int32CenterX, 40, true); + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + DEBUG_PRINT("Waiting for host connection...\n"); + + // + // Wait for USB configuration to complete. Even in this state, we look + // for key presses and, if any occur while the bus is suspended, we + // issue a remote wakeup request. + // + while(!g_bConnected) + { + // + // Remember the current time. + // + ui32LastTickCount = g_ui32SysTickCount; + + // + // Has the suspend state changed since last time we checked? + // + if(bLastSuspend != g_bSuspended) + { + // + // Yes - the state changed so update the display. + // + bLastSuspend = g_bSuspended; + GrContextFontSet(&g_sContext, g_psFontCmss20b); + GrStringDrawCentered(&g_sContext, + (bLastSuspend ? " Bus suspended... ": + " Waiting for host... "), + -1, int32CenterX, 40, true); + DEBUG_PRINT(bLastSuspend ? "Bus suspended.\n" : + "Bus resumed.\n"); + + } + + // + // Wait for at least 1 system tick to have gone by before we poll + // the buttons again. + // + while(g_ui32SysTickCount == ui32LastTickCount) + { + // + // Hang around doing nothing. + // + } + } + + // + // Update the status. + // + GrContextFontSet(&g_sContext, g_psFontCmss20b); + GrStringDrawCentered(&g_sContext, " Host connected... ", -1, + int32CenterX, 40, true); + DEBUG_PRINT("Host connected.\n"); + + // + // Enter the idle state. + // + g_eKeyboardState = STATE_IDLE; + + // + // Draw the keyboard on the display. + // + DrawVirtualKeyboard(true); + + // + // Assume that the bus is not currently suspended if we have just been + // configured. + // + bLastSuspend = false; + + // + // Start with the assumption that no keys are pressed. + // + bKeyPressed = false; + + // + // Keep transfering characters from the UART to the USB host for as + // long as we are connected to the host. + // + while(g_bConnected) + { + // + // Remember the current time. + // + ui32LastTickCount = g_ui32SysTickCount; + + // + // Has the suspend state changed since last time we checked? + // + if(bLastSuspend != g_bSuspended) + { + // + // Yes - the state changed so update the display. + // + bLastSuspend = g_bSuspended; + GrContextFontSet(&g_sContext, g_psFontCmss20b); + GrStringDrawCentered(&g_sContext, + (bLastSuspend ? " Bus suspended... ": + " Host connected... "), + -1, int32CenterX, 40, true); + DEBUG_PRINT(bLastSuspend ? "Bus suspended.\n" : + "Bus resumed.\n"); + } + + // + // Do we have any touchscreen input to process? + // + if(g_ui32Command) + { + // + // Take a snapshot of the commands we were sent then clear + // the global command flags. + // + ui32Processing = g_ui32Command; + g_ui32Command = 0; + + // + // Is the bus currently suspended? + // + if(g_bSuspended) + { + // + // We are suspended so request a remote wakeup. + // + USBDHIDKeyboardRemoteWakeupRequest( + (void *)&g_sKeyboardDevice); + } + + // + // Process the command unless we got simultaneous press and + // release commands in which case we ignore them. + // + if(!((ui32Processing & (COMMAND_PRESS | COMMAND_RELEASE)) == + (COMMAND_PRESS | COMMAND_RELEASE))) + { + // + // Was the touchscreen pressed? + // + if(ui32Processing & COMMAND_PRESS) + { + // + // Map the touchscreen press to an actual key in the + // virtual keyboard. + // + bRetcode = FindVirtualKey(g_i16XPress, g_i16YPress, + &g_i16FocusCol, &g_i16FocusRow); + if(!bRetcode) + { + // + // The press was outside any key on the virtual + // keyboard so just go back and wait for something + // else to happen. + // + continue; + } + + // + // A key is pressed. + // + bKeyPressed = true; + } + + // + // Pass information on the press or release to the host, + // making sure we only send a message if we really saw a + // change of state. + // + if(bKeyPressed) + { + bRetcode = VirtualKeyboardKeyPress(g_i16FocusCol, g_i16FocusRow, + ((ui32Processing == COMMAND_PRESS) ? + true : false)); + } + else + { + bRetcode = true; + } + + // + // Remember that no key is currently pressed. + // + if(ui32Processing & COMMAND_RELEASE) + { + bKeyPressed = false; + } + + // + // If the key press generated an error, this likely + // indicates that the host has disconnected so drop out of + // the loop and go back to looking for a new connection. + // + if(!bRetcode) + { + break; + } + } + } + + // + // Update the state if the host set the LEDs since we last looked. + // + if(g_bLEDStateChanged) + { + KeyboardLEDsChanged(); + } + + // + // Wait for at least 1 system tick to have gone by before we poll + // the buttons again. + // + while(g_ui32SysTickCount == ui32LastTickCount) + { + // + // Hang around doing nothing. + // + } + } + + // + // Dropping out of the previous loop indicates that the host has + // disconnected so go back and wait for reconnection. + // + DEBUG_PRINT("Host disconnected.\n"); + } +} + +//***************************************************************************** +// +// This is the interrupt handler for the SysTick interrupt. It is used to +// update our local tick count which, in turn, is used to check for transmit +// timeouts. +// +//***************************************************************************** +void +SysTickIntHandler(void) +{ + g_ui32SysTickCount++; +} diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewd b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewp b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewp new file mode 100644 index 0000000..2acbfc1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ewp @@ -0,0 +1,811 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\usb_dev_keyboard.c + + + $PROJ_DIR$\usb_keyb_structs.c + + + diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.icf b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.icf new file mode 100644 index 0000000..018a437 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_dev_keyboard.icf - Linker configuration file for usb_dev_keyboard. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ld b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ld new file mode 100644 index 0000000..fd8090c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_dev_keyboard.ld - Linker configuration file for usb_dev_keyboard. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.sct b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.sct new file mode 100644 index 0000000..139076a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_dev_keyboard.sct - Linker configuration file for usb_dev_keyboard. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvopt b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvopt new file mode 100644 index 0000000..b8391f7 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvopt @@ -0,0 +1,401 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_dev_keyboard + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_keyboard.c + usb_dev_keyboard.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_keyb_structs.c + usb_keyb_structs.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 12 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvproj b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvproj new file mode 100644 index 0000000..19e74d6 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard.uvproj @@ -0,0 +1,464 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_dev_keyboard + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_dev_keyboard + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_dev_keyboard.bin .\rvmdk\usb_dev_keyboard.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 UART_BUFFERED + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_dev_keyboard.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + usb_dev_keyboard.c + 1 + .\usb_dev_keyboard.c + + + usb_keyb_structs.c + 1 + .\usb_keyb_structs.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard_ccs.cmd b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard_ccs.cmd new file mode 100644 index 0000000..c18cd99 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_dev_keyboard_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_dev_keyboard_ccs.cmd - CCS linker configuration file for usb_dev_keyboard. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.c b/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.c new file mode 100644 index 0000000..94e2e21 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.c @@ -0,0 +1,148 @@ +//***************************************************************************** +// +// usb_keyb_structs.c - Data structures defining the USB keyboard device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/usb.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidkeyb.h" +#include "usb_keyb_structs.h" + +//**************************************************************************** +// +// The languages supported by this device. +// +//**************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//**************************************************************************** +// +// The manufacturer string. +// +//**************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//**************************************************************************** +// +// The product string. +// +//**************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (16 + 1) * 2, + USB_DTYPE_STRING, + 'K', 0, 'e', 0, 'y', 0, 'b', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0, + 'E', 0, 'x', 0, 'a', 0, 'm', 0, 'p', 0, 'l', 0, 'e', 0 +}; + +//**************************************************************************** +// +// The serial number string. +// +//**************************************************************************** +const uint8_t g_pui8SeriailNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The interface description string. +// +//***************************************************************************** +const uint8_t g_pui8HIDInterfaceString[] = +{ + (22 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'K', 0, 'e', 0, 'y', 0, 'b', 0, + 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, + 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + (26 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'K', 0, 'e', 0, 'y', 0, 'b', 0, + 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, + 'f', 0, 'i', 0, 'g', 0, 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, + 'o', 0, 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_ppui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SeriailNumberString, + g_pui8HIDInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_ppui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//***************************************************************************** +// +// The HID keyboard device initialization and customization structures. +// +//***************************************************************************** +tUSBDHIDKeyboardDevice g_sKeyboardDevice = +{ + USB_VID_TI_1CBE, + USB_PID_KEYBOARD, + 500, + USB_CONF_ATTR_SELF_PWR | USB_CONF_ATTR_RWAKE, + KeyboardHandler, + (void *)&g_sKeyboardDevice, + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS +}; diff --git a/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.h b/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.h new file mode 100644 index 0000000..21af08c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_keyboard/usb_keyb_structs.h @@ -0,0 +1,35 @@ +//***************************************************************************** +// +// usb_keyb_structs.h - Data structures defining the keyboard USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef _USB_KEYB_STRUCTS_H_ +#define _USB_KEYB_STRUCTS_H_ + +extern uint32_t KeyboardHandler(void *pvCBData, + uint32_t ui32Event, + uint32_t ui32MsgData, + void *pvMsgData); + +extern tUSBDHIDKeyboardDevice g_sKeyboardDevice; + +#endif diff --git a/boards/dk-tm4c129x/usb_dev_msc/Makefile b/boards/dk-tm4c129x/usb_dev_msc/Makefile new file mode 100644 index 0000000..a244274 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/Makefile @@ -0,0 +1,98 @@ +#****************************************************************************** +# +# Makefile - Rules for building the Mass Storage Class example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party + +# +# The default rule, which causes the Mass Storage Class example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_dev_msc.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the Mass Storage Class example. +# +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/frame.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/mmc-dk-tm4c129x.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/mx66l51235f.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/usb_dev_msc.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/usb_msc_structs.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/usbdspiflash.o +${COMPILER}/usb_dev_msc.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_dev_msc.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_dev_msc.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_dev_msc.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_dev_msc.axf: usb_dev_msc.ld +SCATTERgcc_usb_dev_msc=usb_dev_msc.ld +ENTRY_usb_dev_msc=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsimportspec new file mode 100644 index 0000000..0742128 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsimportspec @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsproject b/boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/.cproject b/boards/dk-tm4c129x/usb_dev_msc/ccs/.cproject new file mode 100644 index 0000000..fcd0504 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/.project b/boards/dk-tm4c129x/usb_dev_msc/ccs/.project new file mode 100644 index 0000000..34a4a8e --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/.project @@ -0,0 +1,90 @@ + + + usb_dev_msc + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_msc/startup_ccs.c + + + usb_dev_msc.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.c + + + usb_dev_msc_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc_ccs.cmd + + + usb_msc_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.c + + + usbdspiflash.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/mx66l51235f.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/mx66l51235f.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fatfs/port/mmc-dk-tm4c129x.c + 1 + SW_ROOT/third_party/fatfs/port/mmc-dk-tm4c129x.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_dev_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.bin b/boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.bin new file mode 100644 index 0000000..be46b33 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.out b/boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.out new file mode 100644 index 0000000..a78f74f Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/ccs/Debug/usb_dev_msc.out differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_dev_msc/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_dev_msc/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_dev_msc/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.bin b/boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.bin new file mode 100644 index 0000000..260eafb Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.out b/boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.out new file mode 100644 index 0000000..7100957 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/ewarm/Exe/usb_dev_msc.out differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.axf b/boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.axf new file mode 100644 index 0000000..b9d1be1 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.bin b/boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.bin new file mode 100644 index 0000000..0d8b44a Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/gcc/usb_dev_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/readme.txt b/boards/dk-tm4c129x/usb_dev_msc/readme.txt new file mode 100644 index 0000000..6ec2e08 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/readme.txt @@ -0,0 +1,27 @@ +USB MSC Device + +This example application turns the evaluation board into a USB mass storage +class device. The application will use the onboard flash memory for the +storage media for the mass storage device. The screen will display the +current action occurring on the device ranging from disconnected, reading, +writing and idle. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.axf b/boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.axf new file mode 100644 index 0000000..1779039 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.bin b/boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.bin new file mode 100644 index 0000000..662fac5 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_msc/rvmdk/usb_dev_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_msc/startup_ccs.c b/boards/dk-tm4c129x/usb_dev_msc/startup_ccs.c new file mode 100644 index 0000000..ae3b438 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/startup_ewarm.c b/boards/dk-tm4c129x/usb_dev_msc/startup_ewarm.c new file mode 100644 index 0000000..717a316 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/startup_gcc.c b/boards/dk-tm4c129x/usb_dev_msc/startup_gcc.c new file mode 100644 index 0000000..db2ed7c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/startup_rvmdk.S b/boards/dk-tm4c129x/usb_dev_msc/startup_rvmdk.S new file mode 100644 index 0000000..78417bb --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN SysTickHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.c b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.c new file mode 100644 index 0000000..f74c8b2 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.c @@ -0,0 +1,616 @@ +//***************************************************************************** +// +// usb_dev_msc.c - Main routines for the device mass storage class example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdmsc.h" +#include "utils/ustdlib.h" +#include "fatfs/src/diskio.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/mx66l51235f.h" +#include "drivers/pinout.h" +#include "usbdspiflash.h" +#include "usb_msc_structs.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB MSC Device (usb_dev_msc)

      +//! +//! This example application turns the evaluation board into a USB mass storage +//! class device. The application will use the onboard flash memory for the +//! storage media for the mass storage device. The screen will display the +//! current action occurring on the device ranging from disconnected, reading, +//! writing and idle. +// +//***************************************************************************** + +//***************************************************************************** +// +// The number of ticks to wait before falling back to the idle state. Since +// the tick rate is 100Hz this is approximately 1 second. +// +//***************************************************************************** +#define USBMSC_ACTIVITY_TIMEOUT 100 + +//***************************************************************************** +// +// This enumeration holds the various states that the device can be in during +// normal operation. +// +//***************************************************************************** +volatile enum +{ + // + // Unconfigured. + // + MSC_DEV_DISCONNECTED, + + // + // Connected and fully enumerated but not currently handling a command. + // + MSC_DEV_IDLE, + + // + // Currently reading the device. + // + MSC_DEV_READ, + + // + // Currently writing the device. + // + MSC_DEV_WRITE, +} +g_eMSCState; + +//***************************************************************************** +// +// The Flags that handle updates to the status area to avoid drawing when no +// updates are required.. +// +//***************************************************************************** +#define FLAG_UPDATE_STATUS 1 +static uint32_t g_ui32Flags; +static uint32_t g_ui32IdleTimeout; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//****************************************************************************** +// +// The DMA control structure table. +// +//****************************************************************************** +#ifdef ewarm +#pragma data_alignment=1024 +tDMAControlTable psDMAControlTable[64]; +#elif defined(ccs) +#pragma DATA_ALIGN(psDMAControlTable, 1024) +tDMAControlTable psDMAControlTable[64]; +#else +tDMAControlTable psDMAControlTable[64] __attribute__ ((aligned(1024))); +#endif + +//***************************************************************************** +// +// A buffer used for updating the read/write counts. +// +//***************************************************************************** +static char g_pcBuffer[32]; + +//***************************************************************************** +// +// The system clock frequency in Hz. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Handles bulk driver notifications related to the receive channel (data from +// the USB host). +// +// \param pvCBData is the client-supplied callback pointer for this channel. +// \param ui32Event identifies the event we are being notified about. +// \param ui32MsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the bulk driver to notify us of any events +// related to operation of the receive data channel (the OUT channel carrying +// data from the USB host). +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +RxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + return(0); +} + +//***************************************************************************** +// +// Handles bulk driver notifications related to the transmit channel (data to +// the USB host). +// +// \param pvCBData is the client-supplied callback pointer for this channel. +// \param ui32Event identifies the event we are being notified about. +// \param ui32MsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the bulk driver to notify us of any events +// related to operation of the transmit data channel (the IN channel carrying +// data to the USB host). +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +TxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + return(0); +} + +//***************************************************************************** +// +// This function updates the status area of the screen. It uses the current +// state of the application to print the status area. +// +//***************************************************************************** +void +UpdateStatus(char *pcString) +{ + // + // Write the current state to the bottom of screen. + // + GrStringDrawCentered(&g_sContext, pcString, -1, 160, 78, true); +} + +//***************************************************************************** +// +// This function updates the read/write count area of the screen. +// +//***************************************************************************** +void +UpdateCount(uint32_t ui32Count, uint32_t ui32Y) +{ + // + // See if the count is at least a billion. + // + if(ui32Count > 999999999) + { + // + // Format the value with commas separating the billions, millions, + // thousands, and ones. + // + usnprintf(g_pcBuffer, sizeof(g_pcBuffer), " %d,%03d,%03d,%03d ", + ui32Count / 1000000000, (ui32Count / 1000000) % 1000, + (ui32Count / 1000) % 1000, ui32Count % 1000); + } + + // + // See if the count is at least a million. + // + else if(ui32Count > 999999) + { + // + // Format the value with commas separating the millions, thousands, and + // ones. + // + usnprintf(g_pcBuffer, sizeof(g_pcBuffer), " %d,%03d,%03d ", + (ui32Count / 1000000) % 1000, (ui32Count / 1000) % 1000, + ui32Count % 1000); + } + + // + // See if the count is at least a thousand. + // + else if(ui32Count > 999) + { + // + // Format the value with a comma separating the thousands and ones. + // + usnprintf(g_pcBuffer, sizeof(g_pcBuffer), " %d,%03d ", + (ui32Count / 1000) % 1000, ui32Count % 1000); + } + + // + // Otherwise the value is less than a thousand. + // + else + { + // + // Simply print the value. This will occur in two cases: at startup + // when the count is 0 and after the 32-bit count has rolled-over. In + // the later case, a large number of spaces are needed before and after + // the actual value in order to erase the text from the large value + // that preceeded the roll-over. + // + usnprintf(g_pcBuffer, sizeof(g_pcBuffer), " %d ", + ui32Count); + } + + // + // Draw the formatted string. + // + GrStringDrawCentered(&g_sContext, g_pcBuffer, -1, 160, ui32Y, true); +} + +//***************************************************************************** +// +// This function is the call back notification function provided to the USB +// library's mass storage class. +// +//***************************************************************************** +uint32_t +USBDMSCEventCallback(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgParam, + void *pvMsgData) +{ + // + // Reset the time out every time an event occurs. + // + g_ui32IdleTimeout = USBMSC_ACTIVITY_TIMEOUT; + + switch(ui32Event) + { + // + // Writing to the device. + // + case USBD_MSC_EVENT_WRITING: + { + // + // Only update if this is a change. + // + if(g_eMSCState != MSC_DEV_WRITE) + { + // + // Go to the write state. + // + g_eMSCState = MSC_DEV_WRITE; + + // + // Cause the main loop to update the screen. + // + g_ui32Flags |= FLAG_UPDATE_STATUS; + } + + break; + } + + // + // Reading from the device. + // + case USBD_MSC_EVENT_READING: + { + // + // Only update if this is a change. + // + if(g_eMSCState != MSC_DEV_READ) + { + // + // Go to the read state. + // + g_eMSCState = MSC_DEV_READ; + + // + // Cause the main loop to update the screen. + // + g_ui32Flags |= FLAG_UPDATE_STATUS; + } + + break; + } + + // + // The USB host has disconnected from the device. + // + case USB_EVENT_DISCONNECTED: + { + // + // Go to the disconnected state. + // + g_eMSCState = MSC_DEV_DISCONNECTED; + + // + // Cause the main loop to update the screen. + // + g_ui32Flags |= FLAG_UPDATE_STATUS; + + break; + } + + // + // The USB host has connected to the device. + // + case USB_EVENT_CONNECTED: + { + // + // Go to the idle state to wait for read/writes. + // + g_eMSCState = MSC_DEV_IDLE; + + break; + } + + case USBD_MSC_EVENT_IDLE: + default: + { + break; + } + } + + return(0); +} + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. This is to detect idle +// state for the SPI flash. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + if(g_ui32IdleTimeout != 0) + { + g_ui32IdleTimeout--; + } +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Read, ui32Write; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-dev-msc"); + + // + // Place the static status text on the display. + // + GrStringDrawCentered(&g_sContext, "Status", -1, 160, 58, false); + GrStringDrawCentered(&g_sContext, "Bytes Read", -1, 160, 118, false); + GrStringDrawCentered(&g_sContext, "Bytes Written", -1, 160, 178, false); + GrContextForegroundSet(&g_sContext, ClrGray); + UpdateCount(0, 138); + UpdateCount(0, 198); + + // + // Configure SysTick for a 100Hz interrupt. This is to detect idle state + // every 10ms after a state change. + // + ROM_SysTickPeriodSet(g_ui32SysClock / 100); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Configure and enable uDMA + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + SysCtlDelay(10); + ROM_uDMAControlBaseSet(&psDMAControlTable[0]); + ROM_uDMAEnable(); + + // + // Initialize the idle timeout and reset all flags. + // + g_ui32IdleTimeout = 0; + g_ui32Flags = 0; + + // + // Initialize the state to idle. + // + g_eMSCState = MSC_DEV_DISCONNECTED; + + // + // Draw the status bar and set it to idle. + // + UpdateStatus("Disconnected"); + + // + // Enable the USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + + // + // Enable the SSI3 used by SPI flash. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); + ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_SSI3); + + // + // Set the USB stack mode to Device mode with VBUS monitoring. + // + USBStackModeSet(0, eUSBModeDevice, 0); + + // + // Pass our device information to the USB library and place the device + // on the bus. + // + USBDMSCInit(0, (tUSBDMSCDevice*)&g_sMSCDevice); + + // + // Initialize the SD card, if present. This prevents it from interfering + // with accesses to the SPI flash. + // + disk_initialize(0); + + // + // Initialize MX66L51235F Flash memory. + // + MX66L51235FInit(g_ui32SysClock); + + // + // Drop into the main loop. + // + ui32Read = g_ui32ReadCount; + ui32Write = g_ui32WriteCount; + while(1) + { + switch(g_eMSCState) + { + case MSC_DEV_READ: + { + // + // Update the screen if necessary. + // + if(g_ui32Flags & FLAG_UPDATE_STATUS) + { + UpdateStatus(" Reading "); + g_ui32Flags &= ~FLAG_UPDATE_STATUS; + } + + // + // If there is no activity then return to the idle state. + // + if(g_ui32IdleTimeout == 0) + { + UpdateStatus(" Idle "); + g_eMSCState = MSC_DEV_IDLE; + } + + break; + } + + case MSC_DEV_WRITE: + { + // + // Update the screen if necessary. + // + if(g_ui32Flags & FLAG_UPDATE_STATUS) + { + UpdateStatus(" Writing "); + g_ui32Flags &= ~FLAG_UPDATE_STATUS; + } + + // + // If there is no activity then return to the idle state. + // + if(g_ui32IdleTimeout == 0) + { + UpdateStatus(" Idle "); + g_eMSCState = MSC_DEV_IDLE; + } + break; + } + + case MSC_DEV_DISCONNECTED: + { + // + // Update the screen if necessary. + // + if(g_ui32Flags & FLAG_UPDATE_STATUS) + { + UpdateStatus(" Disconnected "); + g_ui32Flags &= ~FLAG_UPDATE_STATUS; + } + break; + } + + case MSC_DEV_IDLE: + { + break; + } + + default: + { + break; + } + } + + // + // Update the read count if it has changed. + // + if(g_ui32ReadCount != ui32Read) + { + ui32Read = g_ui32ReadCount; + UpdateCount(ui32Read, 138); + } + + // + // Update the write count if it has changed. + // + if(g_ui32WriteCount != ui32Write) + { + ui32Write = g_ui32WriteCount; + UpdateCount(ui32Write, 198); + } + } +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewd b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewp b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewp new file mode 100644 index 0000000..578cce1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ewp @@ -0,0 +1,818 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + $PROJ_DIR$\..\drivers\mx66l51235f.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\usb_dev_msc.c + + + $PROJ_DIR$\usb_msc_structs.c + + + $PROJ_DIR$\usbdspiflash.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.icf b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.icf new file mode 100644 index 0000000..1334e92 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_dev_msc.icf - Linker configuration file for usb_dev_msc. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ld b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ld new file mode 100644 index 0000000..351f499 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_dev_msc.ld - Linker configuration file for usb_dev_msc. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.sct b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.sct new file mode 100644 index 0000000..e6f5cd5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_dev_msc.sct - Linker configuration file for usb_dev_msc. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvopt b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvopt new file mode 100644 index 0000000..461345c --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvopt @@ -0,0 +1,429 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_dev_msc + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + mmc-dk-tm4c129x.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\mx66l51235f.c + mx66l51235f.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_msc.c + usb_dev_msc.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_msc_structs.c + usb_msc_structs.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usbdspiflash.c + usbdspiflash.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 14 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvproj b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvproj new file mode 100644 index 0000000..45667a7 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc.uvproj @@ -0,0 +1,474 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_dev_msc + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_dev_msc + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_dev_msc.bin .\rvmdk\usb_dev_msc.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_dev_msc.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + mmc-dk-tm4c129x.c + 1 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + mx66l51235f.c + 1 + ..\drivers\mx66l51235f.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + usb_dev_msc.c + 1 + .\usb_dev_msc.c + + + usb_msc_structs.c + 1 + .\usb_msc_structs.c + + + usbdspiflash.c + 1 + .\usbdspiflash.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc_ccs.cmd b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc_ccs.cmd new file mode 100644 index 0000000..e3e7e08 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_dev_msc_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_dev_msc_ccs.cmd - CCS linker configuration file for usb_dev_msc. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.c b/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.c new file mode 100644 index 0000000..268b905 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.c @@ -0,0 +1,184 @@ +//***************************************************************************** +// +// usb_bulk_structs.c - Data structures defining the mass storage USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/usb.h" +#include "usblib/usblib.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdmsc.h" +#include "usb_msc_structs.h" +#include "usbdspiflash.h" + +//***************************************************************************** +// +// The languages supported by this device. +// +//***************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//***************************************************************************** +// +// The manufacturer string. +// +//***************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//***************************************************************************** +// +// The product string. +// +//***************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (19 + 1) * 2, + USB_DTYPE_STRING, + 'M', 0, 'a', 0, 's', 0, 's', 0, ' ', 0, 'S', 0, 't', 0, 'o', 0, 'r', 0, + 'a', 0, 'g', 0, 'e', 0, ' ', 0, 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, + 'e', 0 +}; + +//***************************************************************************** +// +// The serial number string. +// +//***************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The data interface description string. +// +//***************************************************************************** +const uint8_t g_pui8DataInterfaceString[] = +{ + (19 + 1) * 2, + USB_DTYPE_STRING, + 'B', 0, 'u', 0, 'l', 0, 'k', 0, ' ', 0, 'D', 0, 'a', 0, 't', 0, + 'a', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, + 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + (23 + 1) * 2, + USB_DTYPE_STRING, + 'B', 0, 'u', 0, 'l', 0, 'k', 0, ' ', 0, 'D', 0, 'a', 0, 't', 0, + 'a', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, 'f', 0, 'i', 0, 'g', 0, + 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, 'o', 0, 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_ppui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, + g_pui8DataInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_ppui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//***************************************************************************** +// +// The bulk device initialization and customization structures. In this case, +// we are using USBBuffers between the bulk device class driver and the +// application code. The function pointers and callback data values are set +// to insert a buffer in each of the data channels, transmit and receive. +// +// With the buffer in place, the bulk channel callback is set to the relevant +// channel function and the callback data is set to point to the channel +// instance data. The buffer, in turn, has its callback set to the application +// function and the callback data set to our bulk instance structure. +// +//***************************************************************************** +tUSBDMSCDevice g_sMSCDevice = +{ + // + // Vendor ID. + // + USB_VID_TI_1CBE, + + // + // Product ID. + // + USB_PID_MSC, + + // + // Vendor Information. + // + "TI ", + + // + // Product Identification. + // + "Mass Storage ", + + // + // Revision. + // + "1.00", + 500, + USB_CONF_ATTR_SELF_PWR, + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS, + { + USBDMSCStorageOpen, + USBDMSCStorageClose, + USBDMSCStorageRead, + USBDMSCStorageWrite, + USBDMSCStorageNumBlocks, + USBDMSCStorageBlockSize + }, + USBDMSCEventCallback +}; diff --git a/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.h b/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.h new file mode 100644 index 0000000..3d272ab --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usb_msc_structs.h @@ -0,0 +1,46 @@ +//***************************************************************************** +// +// usb_msc_structs.h - Data structures defining the mass storage USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USB_MSC_STRUCTS_H__ +#define __USB_MSC_STRUCTS_H__ + +//***************************************************************************** +// +// The mass storage class device structure. +// +//***************************************************************************** +extern tUSBDMSCDevice g_sMSCDevice; + +//***************************************************************************** +// +// The externally provided mass storage class event call back function. +// +//***************************************************************************** +extern uint32_t USBDMSCEventCallback(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgParam, + void *pvMsgData); + + + +#endif diff --git a/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.c b/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.c new file mode 100644 index 0000000..e186e13 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.c @@ -0,0 +1,259 @@ +//***************************************************************************** +// +// usbdspiflash.c - Routines supplied for use by the mass storage class device +// class. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/debug.h" +#include "driverlib/sysctl.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdmsc.h" +#include "usb_msc_structs.h" +#include "drivers/mx66l51235f.h" + +#define SPIFLASH_IN_USE 0x00000001 + +struct +{ + uint32_t ulFlags; +} +g_sDriveInformation; + +//***************************************************************************** +// +// The number of bytes that have been read from the SPI flash. +// +//***************************************************************************** +uint32_t g_ui32ReadCount; + +//***************************************************************************** +// +// The number of bytes that have been written to the SPI flash. +// +//***************************************************************************** +uint32_t g_ui32WriteCount; + +//***************************************************************************** +// +// This function opens the drive number and prepares it for use by the Mass +// storage class device. +// +// \param ulDrive is the driver number to open. +// +// This function is used to initialize and open the physical drive number +// associated with the parameter \e ulDrive. The function will return zero if +// the drive has already been opened. +// +// \return Returns a pointer to data that should be passed to other APIs or it +// will return 0 if no drive was found. +// +//***************************************************************************** +void * +USBDMSCStorageOpen(uint32_t ulDrive) +{ + ASSERT(ulDrive == 0); + + // + // Return if already in use. + // + if(g_sDriveInformation.ulFlags & SPIFLASH_IN_USE) + { + return(0); + } + + // + // Flash is in use. + // + g_sDriveInformation.ulFlags = SPIFLASH_IN_USE; + + return((void *)&g_sDriveInformation); +} + +//***************************************************************************** +// +// This function close the drive number in use by the mass storage class device. +// +// \param pvDrive is the pointer that was returned from a call to +// USBDMSCStorageOpen(). +// +// This function is used to close the physical drive number associated with the +// parameter \e pvDrive. This function will return 0 if the drive was closed +// successfully and any other value will indicate a failure. +// +// \return Returns 0 if the drive was successfully closed or non-zero for a +// failure. +// +//***************************************************************************** +void +USBDMSCStorageClose(void *pvDrive) +{ + ASSERT(pvDrive != 0); + + // + // Clear all flags. + // + g_sDriveInformation.ulFlags = 0; + +} + +//***************************************************************************** +// +// This function will read a block from a device opened by the +// USBDMSCStorageOpen() call. +// +// \param pvDrive is the pointer that was returned from a call to +// USBDMSCStorageOpen(). +// \param pucData is the buffer that data will be written into. +// \param ui32NumBlocks is the number of blocks to read. +// +// This function is use to read blocks from a physical device and return them +// in the \e pucData buffer. The data area pointed to by \e pucData should be +// at least \e ui32NumBlocks * Block Size bytes to prevent overwriting data. +// +// \return Returns the number of bytes that were read from the device. +// +//***************************************************************************** +uint32_t +USBDMSCStorageRead(void *pvDrive, uint8_t *pui8Data, uint32_t ui32Sector, + uint32_t ui32NumBlocks) +{ + ASSERT(pvDrive != 0); + + g_ui32ReadCount += ui32NumBlocks * MX66L51235F_BLOCK_SIZE; + + MX66L51235FRead(ui32Sector * MX66L51235F_BLOCK_SIZE, pui8Data, + ui32NumBlocks * MX66L51235F_BLOCK_SIZE); + + return(ui32NumBlocks * MX66L51235F_BLOCK_SIZE); +} + +//***************************************************************************** +// +// This function will write a block to a device opened by the +// USBDMSCStorageOpen() call. +// +// \param pvDrive is the pointer that was returned from a call to +// USBDMSCStorageOpen(). +// \param pucData is the buffer that data will be used for writing. +// \param ui32NumBlocks is the number of blocks to write. +// +// This function is use to write blocks to a physical device from the buffer +// pointed to by the \e pucData buffer. If the number of blocks is greater +// than one then the block address will increment and write to the next block +// until \e ui32NumBlocks * Block Size bytes have been written. +// +// \return Returns the number of bytes that were written to the device. +// +//***************************************************************************** +uint32_t +USBDMSCStorageWrite(void *pvDrive, uint8_t *pui8Data, uint32_t ui32Sector, + uint32_t ui32NumBlocks) +{ + uint32_t ui32Idx, ui32BlockAddr; + uint32_t ui32PageIdx; + + ASSERT(pvDrive != 0); + + g_ui32WriteCount += ui32NumBlocks * MX66L51235F_BLOCK_SIZE; + + for(ui32Idx = 0; ui32Idx < ui32NumBlocks; ui32Idx++) + { + // + // each block is 4K(0x1000) bytes + // + ui32BlockAddr = (ui32Sector + ui32Idx) * MX66L51235F_BLOCK_SIZE; + + // + // erase the block + // + MX66L51235FSectorErase(ui32BlockAddr); + + // + // program the block one page(256 bytes) a time + // + for(ui32PageIdx = 0; ui32PageIdx < (MX66L51235F_BLOCK_SIZE / 256); + ui32PageIdx++) + { + MX66L51235FPageProgram((ui32BlockAddr + (ui32PageIdx * 256)), + (pui8Data + + (ui32Idx * MX66L51235F_BLOCK_SIZE) + + (ui32PageIdx * 256)), 256); + } + } + + return(ui32NumBlocks * MX66L51235F_BLOCK_SIZE); +} + +//***************************************************************************** +// +// This function will return the number of blocks present on a device. +// +// \param pvDrive is the pointer that was returned from a call to +// USBDMSCStorageOpen(). +// +// This function is used to return the total number of blocks on a physical +// device based on the \e pvDrive parameter. +// +// \return Returns the number of blocks that are present in a device. +// +//***************************************************************************** +uint32_t +USBDMSCStorageNumBlocks(void *pvDrive) +{ + // + // return number of blocks. + // + return(MX66L51235F_MEMORY_SIZE / MX66L51235F_BLOCK_SIZE); +} + +//***************************************************************************** +// +// This function will return the block size on a device. +// +// \param pvDrive is the pointer that was returned from a call to +// USBDMSCStorageOpen(). +// +// This function is used to return the block size on a physical +// device based on the \e pvDrive parameter. +// +// \return Returns the block size for a device. +// +//***************************************************************************** +uint32_t +USBDMSCStorageBlockSize(void *pvDrive) +{ + // + // return block size. + // + return(MX66L51235F_BLOCK_SIZE); +} diff --git a/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.h b/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.h new file mode 100644 index 0000000..4c04dce --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_msc/usbdspiflash.h @@ -0,0 +1,47 @@ +//***************************************************************************** +// +// usbdspiflash.h - Prototypes for functions supplied for use by the mass +// storage class device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USBDSPIFLASH_H__ +#define __USBDSPIFLASH_H__ + +//***************************************************************************** +// +// Prototypes. +// +//***************************************************************************** +extern uint32_t g_ui32ReadCount; +extern uint32_t g_ui32WriteCount; +extern void *USBDMSCStorageOpen(uint32_t ui32Drive); +extern void USBDMSCStorageClose(void *pvDrive); +extern uint32_t USBDMSCStorageRead(void *pvDrive, uint8_t *pui8Data, + uint32_t ui32Sector, + uint32_t ui32NumBlocks); +extern uint32_t USBDMSCStorageWrite(void *pvDrive, uint8_t *pui8Data, + uint32_t ui32Sector, + uint32_t ui32NumBlocks); +uint32_t USBDMSCStorageNumBlocks(void *pvDrive); +uint32_t USBDMSCStorageBlockSize(void *pvDrive); + +#endif // __USBDSPIFLASH_H__ diff --git a/boards/dk-tm4c129x/usb_dev_serial/Makefile b/boards/dk-tm4c129x/usb_dev_serial/Makefile new file mode 100644 index 0000000..785ef74 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/Makefile @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB device serial example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB device serial example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_dev_serial.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB device serial example. +# +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/frame.o +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/usb_dev_serial.o +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/usb_serial_structs.o +${COMPILER}/usb_dev_serial.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_dev_serial.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_dev_serial.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_dev_serial.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_dev_serial.axf: usb_dev_serial.ld +SCATTERgcc_usb_dev_serial=usb_dev_serial.ld +ENTRY_usb_dev_serial=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsimportspec new file mode 100644 index 0000000..c5ecbbf --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsproject b/boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/.cproject b/boards/dk-tm4c129x/usb_dev_serial/ccs/.cproject new file mode 100644 index 0000000..9188475 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/.cproject @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/.project b/boards/dk-tm4c129x/usb_dev_serial/ccs/.project new file mode 100644 index 0000000..c78f782 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/.project @@ -0,0 +1,75 @@ + + + usb_dev_serial + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_serial/startup_ccs.c + + + usb_dev_serial.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.c + + + usb_dev_serial_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial_ccs.cmd + + + usb_serial_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_dev_serial/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.bin b/boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.bin new file mode 100644 index 0000000..129e069 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.out b/boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.out new file mode 100644 index 0000000..d4bbe87 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/ccs/Debug/usb_dev_serial.out differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_dev_serial/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_dev_serial/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_dev_serial/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.bin b/boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.bin new file mode 100644 index 0000000..c08c90f Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.out b/boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.out new file mode 100644 index 0000000..2974c9a Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/ewarm/Exe/usb_dev_serial.out differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.axf b/boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.axf new file mode 100644 index 0000000..5b6534b Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.bin b/boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.bin new file mode 100644 index 0000000..4e4a7b3 Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/gcc/usb_dev_serial.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/readme.txt b/boards/dk-tm4c129x/usb_dev_serial/readme.txt new file mode 100644 index 0000000..eb3c4f8 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/readme.txt @@ -0,0 +1,39 @@ +USB Serial Device + +This example application turns the development kit into a virtual serial +port when connected to the USB host system. The application supports the +USB Communication Device Class, Abstract Control Model to redirect UART0 +traffic to and from the USB host system. + +The application can be recompiled to run using and external USB phy to +implement a high speed device using an external USB phy. To use the +external phy the application must be built with \b USE_ULPI defined. This +disables the internal phy and the connector on the DK-TM4C129X board and +enables the connections to the external ULPI phy pins on the DK-TM4C129X +board. + +Assuming you installed TivaWare in the default directory, a +driver information (INF) file for use with Windows XP, Windows Vista and +Windows7 can be found in C:/ti/TivaWare-for-C-Series/windows_drivers. +For Windows 2000, the required INF file is in +C:/ti/TivaWare-for-C-Series/windows_drivers/win2K. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.axf b/boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.axf new file mode 100644 index 0000000..003d03c Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.axf differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.bin b/boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.bin new file mode 100644 index 0000000..f9ea72c Binary files /dev/null and b/boards/dk-tm4c129x/usb_dev_serial/rvmdk/usb_dev_serial.bin differ diff --git a/boards/dk-tm4c129x/usb_dev_serial/startup_ccs.c b/boards/dk-tm4c129x/usb_dev_serial/startup_ccs.c new file mode 100644 index 0000000..ae6ce33 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void USBUARTIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + USBUARTIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_serial/startup_ewarm.c b/boards/dk-tm4c129x/usb_dev_serial/startup_ewarm.c new file mode 100644 index 0000000..1f8b909 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void USBUARTIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + USBUARTIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_serial/startup_gcc.c b/boards/dk-tm4c129x/usb_dev_serial/startup_gcc.c new file mode 100644 index 0000000..750c565 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void SysTickHandler(void); +extern void USBUARTIntHandler(void); +extern void USB0DeviceIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + USBUARTIntHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0DeviceIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_dev_serial/startup_rvmdk.S b/boards/dk-tm4c129x/usb_dev_serial/startup_rvmdk.S new file mode 100644 index 0000000..408be55 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN SysTickHandler + EXTERN USBUARTIntHandler + EXTERN USB0DeviceIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD USBUARTIntHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0DeviceIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.c b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.c new file mode 100644 index 0000000..a31e163 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.c @@ -0,0 +1,1455 @@ +//***************************************************************************** +// +// usb_dev_serial.c - Main routines for the USB CDC serial example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_uart.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/timer.h" +#include "driverlib/uart.h" +#include "driverlib/usb.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usbcdc.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcdc.h" +#include "utils/ustdlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "usb_serial_structs.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Serial Device (usb_dev_serial)

      +//! +//! This example application turns the development kit into a virtual serial +//! port when connected to the USB host system. The application supports the +//! USB Communication Device Class, Abstract Control Model to redirect UART0 +//! traffic to and from the USB host system. +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed device using an external USB phy. To use the +//! external phy the application must be built with \b USE_ULPI defined. This +//! disables the internal phy and the connector on the DK-TM4C129X board and +//! enables the connections to the external ULPI phy pins on the DK-TM4C129X +//! board. +//! +//! Assuming you installed TivaWare in the default directory, a +//! driver information (INF) file for use with Windows XP, Windows Vista and +//! Windows7 can be found in C:/ti/TivaWare-for-C-Series/windows_drivers. +//! For Windows 2000, the required INF file is in +//! C:/ti/TivaWare-for-C-Series/windows_drivers/win2K. +// +//***************************************************************************** + +//***************************************************************************** +// +// Note: +// +// This example is intended to run on Tiva C Series evaluation kit hardware +// where the UARTs are wired solely for TX and RX, and do not have GPIOs +// connected to act as handshake signals. As a result, this example mimics +// the case where communication is always possible. It reports DSR, DCD +// and CTS as high to ensure that the USB host recognizes that data can be +// sent and merely ignores the host's requested DTR and RTS states. "TODO" +// comments in the code indicate where code would be required to add support +// for real handshakes. +// +//***************************************************************************** + + +//***************************************************************************** +// +// Configuration and tuning parameters. +// +//***************************************************************************** + +//***************************************************************************** +// +// The system tick rate expressed both as ticks per second and a millisecond +// period. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 + +//***************************************************************************** +// +// The UART peripheral clock rate. +// +//***************************************************************************** +#define UART_CLOCK 16000000 + +//***************************************************************************** +// +// Variables tracking transmit and receive counts. +// +//***************************************************************************** +static volatile uint32_t g_ui32UARTTxCount; +static volatile uint32_t g_ui32UARTRxCount; +#ifdef DEBUG +uint32_t g_ui32UARTRxErrors; +#endif + +//***************************************************************************** +// +// The base address, peripheral ID and interrupt ID of the UART that is to +// be redirected. +// +//***************************************************************************** + +//***************************************************************************** +// +// Default line coding settings for the redirected UART. +// +//***************************************************************************** +#define DEFAULT_BIT_RATE 115200 +#define DEFAULT_UART_CONFIG (UART_CONFIG_WLEN_8 | UART_CONFIG_PAR_NONE | \ + UART_CONFIG_STOP_ONE) + +//***************************************************************************** +// +// Global system tick counter +// +//***************************************************************************** +static volatile uint32_t g_ui32SysTickCount = 0; + +//***************************************************************************** +// +// Graphics context used to show text on the color STN display. +// +//***************************************************************************** +static tContext g_sContext; +#define TEXT_FONT g_psFontCmss22b +#define TEXT_HEIGHT (GrFontHeightGet(TEXT_FONT)) +#define BUFFER_METER_HEIGHT TEXT_HEIGHT +#define BUFFER_METER_WIDTH 150 + +//***************************************************************************** +// +// Flags used to pass commands from interrupt context to the main loop. +// +//***************************************************************************** +#define FLAG_STATUS_UPDATE 0 +#define FLAG_USB_CONFIGURED 1 +#define FLAG_SENDING_BREAK 2 +static volatile uint32_t g_ui32Flags; + +//***************************************************************************** +// +// Global pointer to the current status string. +// +//***************************************************************************** +static char *g_pcStatus; + +//***************************************************************************** +// +// Internal function prototypes. +// +//***************************************************************************** +static void USBUARTPrimeTransmit(uint32_t ui32Base); +static void CheckForSerialStateChange(const tUSBDCDCDevice *psDevice, + uint32_t ui32Errors); +static void SetControlLineState(uint16_t ui16State); +static bool SetLineCoding(tLineCoding *psLineCoding, uint32_t ui32UARTClock); +static void GetLineCoding(tLineCoding *psLineCoding, uint32_t ui32UARTClock); +static void SendBreak(bool bSend); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ + while(1) + { + } +} +#endif + +//***************************************************************************** +// +// This function is called whenever serial data is received from the UART. +// It is passed the accumulated error flags from each character received in +// this interrupt and determines from them whether or not an interrupt +// notification to the host is required. +// +// If a notification is required and the control interrupt endpoint is idle, +// we send the notification immediately. If the endpoint is not idle, we +// accumulate the errors in a global variable which will be checked on +// completion of the previous notification and used to send a second one +// if necessary. +// +//***************************************************************************** +static void +CheckForSerialStateChange(const tUSBDCDCDevice *psDevice, uint32_t ui32Errors) +{ + uint16_t ui16SerialState; + + // + // Clear our USB serial state. Since we are faking the handshakes, always + // set the TXCARRIER (DSR) and RXCARRIER (DCD) bits. + // + ui16SerialState = USB_CDC_SERIAL_STATE_TXCARRIER | + USB_CDC_SERIAL_STATE_RXCARRIER; + + // + // Are any error bits set? + // + if(ui32Errors) + { + // + // At least one error is being notified so translate from our hardware + // error bits into the correct state markers for the USB notification. + // + if(ui32Errors & UART_DR_OE) + { + ui16SerialState |= USB_CDC_SERIAL_STATE_OVERRUN; + } + + if(ui32Errors & UART_DR_PE) + { + ui16SerialState |= USB_CDC_SERIAL_STATE_PARITY; + } + + if(ui32Errors & UART_DR_FE) + { + ui16SerialState |= USB_CDC_SERIAL_STATE_FRAMING; + } + + if(ui32Errors & UART_DR_BE) + { + ui16SerialState |= USB_CDC_SERIAL_STATE_BREAK; + } + + // + // Call the CDC driver to notify the state change. + // + USBDCDCSerialStateChange((void *)psDevice, ui16SerialState); + } +} + +//***************************************************************************** +// +// Read as many characters from the UART FIFO as we can and move them into +// the CDC transmit buffer. +// +// \return Returns UART error flags read during data reception. +// +//***************************************************************************** +static uint32_t +ReadUARTData(void) +{ + int32_t i32Char; + int8_t ui8Char; + uint32_t ui32Space, ui32Errors; + + // + // Clear our error indicator. + // + ui32Errors = 0; + + // + // How much space do we have in the buffer? + // + ui32Space = USBBufferSpaceAvailable((tUSBBuffer *)&g_sTxBuffer); + + // + // Read data from the UART FIFO until there is none left or we run + // out of space in our receive buffer. + // + while(ui32Space && UARTCharsAvail(UART0_BASE)) + { + // + // Read a character from the UART FIFO into the ring buffer if no + // errors are reported. + // + i32Char = UARTCharGetNonBlocking(UART0_BASE); + + // + // If the character did not contain any error notifications, + // copy it to the output buffer. + // + if(!(i32Char & ~0xFF)) + { + ui8Char = (unsigned char)(i32Char & 0xFF); + USBBufferWrite((tUSBBuffer *)&g_sTxBuffer, + (unsigned char *)&ui8Char, 1); + + // + // Decrement the number of bytes we know the buffer can accept. + // + ui32Space--; + } + else + { +#ifdef DEBUG + // + // Increment our receive error counter. + // + g_ui32UARTRxErrors++; +#endif + // + // Update our error accumulator. + // + ui32Errors |= i32Char; + } + + // + // Update our count of bytes received via the UART. + // + g_ui32UARTRxCount++; + } + + // + // Pass back the accumulated error indicators. + // + return(ui32Errors); +} + +//***************************************************************************** +// +// Take as many bytes from the transmit buffer as we have space for and move +// them into the USB UART's transmit FIFO. +// +//***************************************************************************** +static void +USBUARTPrimeTransmit(uint32_t ui32Base) +{ + uint32_t ui32Read; + uint8_t ui8Char; + + // + // If we are currently sending a break condition, don't receive any + // more data. We will resume transmission once the break is turned off. + // + if(HWREGBITW(&g_ui32Flags, FLAG_SENDING_BREAK)) + { + return; + } + + // + // If there is space in the UART FIFO, try to read some characters + // from the receive buffer to fill it again. + // + while(UARTSpaceAvail(ui32Base)) + { + // + // Get a character from the buffer. + // + ui32Read = USBBufferRead((tUSBBuffer *)&g_sRxBuffer, &ui8Char, 1); + + // + // Did we get a character? + // + if(ui32Read) + { + // + // Place the character in the UART transmit FIFO. + // + ROM_UARTCharPutNonBlocking(ui32Base, ui8Char); + + // + // Update our count of bytes transmitted via the UART. + // + g_ui32UARTTxCount++; + } + else + { + // + // We ran out of characters so exit the function. + // + return; + } + } +} + +//***************************************************************************** +// +// Interrupt handler for the system tick counter. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Update our system time. + // + g_ui32SysTickCount++; +} + +//***************************************************************************** +// +// Interrupt handler for the UART which we are redirecting via USB. +// +//***************************************************************************** +void +USBUARTIntHandler(void) +{ + uint32_t ui32Ints, ui32Errors; + + // + // Get and clear the current interrupt source(s) + // + ui32Ints = ROM_UARTIntStatus(UART0_BASE, true); + ROM_UARTIntClear(UART0_BASE, ui32Ints); + + // + // Are we being interrupted because the TX FIFO has space available? + // + if(ui32Ints & UART_INT_TX) + { + // + // Move as many bytes as we can into the transmit FIFO. + // + USBUARTPrimeTransmit(UART0_BASE); + + // + // If the output buffer is empty, turn off the transmit interrupt. + // + if(!USBBufferDataAvailable(&g_sRxBuffer)) + { + ROM_UARTIntDisable(UART0_BASE, UART_INT_TX); + } + } + + // + // Handle receive interrupts. + // + if(ui32Ints & (UART_INT_RX | UART_INT_RT)) + { + // + // Read the UART's characters into the buffer. + // + ui32Errors = ReadUARTData(); + + // + // Check to see if we need to notify the host of any errors we just + // detected. + // + CheckForSerialStateChange(&g_sCDCDevice, ui32Errors); + } +} + +//***************************************************************************** +// +// Set the state of the RS232 RTS and DTR signals. +// +//***************************************************************************** +static void +SetControlLineState(uint16_t ui16State) +{ + // + // TODO: If configured with GPIOs controlling the handshake lines, + // set them appropriately depending upon the flags passed in the wValue + // field of the request structure passed. + // +} + +//***************************************************************************** +// +// Set the communication parameters to use on the UART. +// +//***************************************************************************** +static bool +SetLineCoding(tLineCoding *psLineCoding, uint32_t ui32UARTClock) +{ + uint32_t ui32Config; + bool bRetcode; + + // + // Assume everything is OK until we detect any problem. + // + bRetcode = true; + + // + // Word length. For invalid values, the default is to set 8 bits per + // character and return an error. + // + switch(psLineCoding->ui8Databits) + { + case 5: + { + ui32Config = UART_CONFIG_WLEN_5; + break; + } + + case 6: + { + ui32Config = UART_CONFIG_WLEN_6; + break; + } + + case 7: + { + ui32Config = UART_CONFIG_WLEN_7; + break; + } + + case 8: + { + ui32Config = UART_CONFIG_WLEN_8; + break; + } + + default: + { + ui32Config = UART_CONFIG_WLEN_8; + bRetcode = false; + break; + } + } + + // + // Parity. For any invalid values, we set no parity and return an error. + // + switch(psLineCoding->ui8Parity) + { + case USB_CDC_PARITY_NONE: + { + ui32Config |= UART_CONFIG_PAR_NONE; + break; + } + + case USB_CDC_PARITY_ODD: + { + ui32Config |= UART_CONFIG_PAR_ODD; + break; + } + + case USB_CDC_PARITY_EVEN: + { + ui32Config |= UART_CONFIG_PAR_EVEN; + break; + } + + case USB_CDC_PARITY_MARK: + { + ui32Config |= UART_CONFIG_PAR_ONE; + break; + } + + case USB_CDC_PARITY_SPACE: + { + ui32Config |= UART_CONFIG_PAR_ZERO; + break; + } + + default: + { + ui32Config |= UART_CONFIG_PAR_NONE; + bRetcode = false; + break; + } + } + + // + // Stop bits. Our hardware only supports 1 or 2 stop bits whereas CDC + // allows the host to select 1.5 stop bits. If passed 1.5 (or any other + // invalid or unsupported value of ucStop, we set up for 1 stop bit but + // return an error in case the caller needs to Stall or otherwise report + // this back to the host. + // + switch(psLineCoding->ui8Stop) + { + // + // One stop bit requested. + // + case USB_CDC_STOP_BITS_1: + { + ui32Config |= UART_CONFIG_STOP_ONE; + break; + } + + // + // Two stop bits requested. + // + case USB_CDC_STOP_BITS_2: + { + ui32Config |= UART_CONFIG_STOP_TWO; + break; + } + + // + // Other cases are either invalid values of ucStop or values that we + // cannot support so set 1 stop bit but return an error. + // + default: + { + ui32Config = UART_CONFIG_STOP_ONE; + bRetcode |= false; + break; + } + } + + // + // Set the UART mode appropriately. + // + ROM_UARTConfigSetExpClk(UART0_BASE, ui32UARTClock, + psLineCoding->ui32Rate, ui32Config); + + // + // Let the caller know if we had a problem or not. + // + return(bRetcode); +} + +//***************************************************************************** +// +// Get the communication parameters in use on the UART. +// +//***************************************************************************** +static void +GetLineCoding(tLineCoding *psLineCoding, uint32_t ui32UARTClock) +{ + uint32_t ui32Config, ui32Rate; + + // + // Get the current line coding set in the UART. + // + ROM_UARTConfigGetExpClk(UART0_BASE, ui32UARTClock, &ui32Rate, + &ui32Config); + psLineCoding->ui32Rate = ui32Rate; + + // + // Translate the configuration word length field into the format expected + // by the host. + // + switch(ui32Config & UART_CONFIG_WLEN_MASK) + { + case UART_CONFIG_WLEN_8: + { + psLineCoding->ui8Databits = 8; + break; + } + + case UART_CONFIG_WLEN_7: + { + psLineCoding->ui8Databits = 7; + break; + } + + case UART_CONFIG_WLEN_6: + { + psLineCoding->ui8Databits = 6; + break; + } + + case UART_CONFIG_WLEN_5: + { + psLineCoding->ui8Databits = 5; + break; + } + } + + // + // Translate the configuration parity field into the format expected + // by the host. + // + switch(ui32Config & UART_CONFIG_PAR_MASK) + { + case UART_CONFIG_PAR_NONE: + { + psLineCoding->ui8Parity = USB_CDC_PARITY_NONE; + break; + } + + case UART_CONFIG_PAR_ODD: + { + psLineCoding->ui8Parity = USB_CDC_PARITY_ODD; + break; + } + + case UART_CONFIG_PAR_EVEN: + { + psLineCoding->ui8Parity = USB_CDC_PARITY_EVEN; + break; + } + + case UART_CONFIG_PAR_ONE: + { + psLineCoding->ui8Parity = USB_CDC_PARITY_MARK; + break; + } + + case UART_CONFIG_PAR_ZERO: + { + psLineCoding->ui8Parity = USB_CDC_PARITY_SPACE; + break; + } + } + + // + // Translate the configuration stop bits field into the format expected + // by the host. + // + switch(ui32Config & UART_CONFIG_STOP_MASK) + { + case UART_CONFIG_STOP_ONE: + { + psLineCoding->ui8Stop = USB_CDC_STOP_BITS_1; + break; + } + + case UART_CONFIG_STOP_TWO: + { + psLineCoding->ui8Stop = USB_CDC_STOP_BITS_2; + break; + } + } +} + +//***************************************************************************** +// +// This function sets or clears a break condition on the redirected UART RX +// line. A break is started when the function is called with \e bSend set to +// \b true and persists until the function is called again with \e bSend set +// to \b false. +// +//***************************************************************************** +static void +SendBreak(bool bSend) +{ + // + // Are we being asked to start or stop the break condition? + // + if(!bSend) + { + // + // Remove the break condition on the line. + // + ROM_UARTBreakCtl(UART0_BASE, false); + HWREGBITW(&g_ui32Flags, FLAG_SENDING_BREAK) = 0; + } + else + { + // + // Start sending a break condition on the line. + // + ROM_UARTBreakCtl(UART0_BASE, true); + HWREGBITW(&g_ui32Flags, FLAG_SENDING_BREAK) = 1; + } +} + +//***************************************************************************** +// +// Shows the status string on the color STN display. +// +// \param psContext is a pointer to the graphics context representing the +// display. +// \param pcStatus is a pointer to the string to be shown. +// +//***************************************************************************** +void +DisplayStatus(tContext *psContext, char *pcStatus) +{ + tRectangle rectLine; + int32_t i32Y; + + // + // Calculate the Y coordinate of the top left of the character cell + // for our line of text. + // + i32Y = (GrContextDpyHeightGet(psContext) / 4) - + (GrFontHeightGet(TEXT_FONT) / 2); + + // + // Determine the bounding rectangle for this line of text. We add 4 pixels + // to the height just to ensure that we clear a couple of pixels above and + // below the line of text. + // + rectLine.i16XMin = 0; + rectLine.i16XMax = GrContextDpyWidthGet(psContext) - 1; + rectLine.i16YMin = i32Y; + rectLine.i16YMax = i32Y + GrFontHeightGet(TEXT_FONT) + 3; + + // + // Clear the line with black. + // + GrContextForegroundSet(&g_sContext, ClrBlack); + GrRectFill(psContext, &rectLine); + + // + // Draw the new status string + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrStringDrawCentered(psContext, pcStatus, -1, + GrContextDpyWidthGet(psContext) / 2, + GrContextDpyHeightGet(psContext) / 4 , false); +} + +//***************************************************************************** +// +// Draw a horizontal meter at a given position on the display and fill it +// with green. +// +//***************************************************************************** +void +DrawBufferMeter(tContext *psContext, int32_t i32X, int32_t i32Y) +{ + tRectangle sRect; + int32_t i32CorrectedY; + + // + // Correct the Y coordinate so that the meter is centered on the same line + // as the text caption to its left. + // + i32CorrectedY = i32Y - ((BUFFER_METER_HEIGHT - TEXT_HEIGHT) / 2); + + // + // Determine the bounding rectangle of the meter. + // + sRect.i16XMin = i32X; + sRect.i16XMax = i32X + BUFFER_METER_WIDTH - 1; + sRect.i16YMin = i32CorrectedY; + sRect.i16YMax = i32CorrectedY + BUFFER_METER_HEIGHT - 1; + + // + // Fill the meter with green to indicate empty + // + GrContextForegroundSet(psContext, ClrGreen); + GrRectFill(psContext, &sRect); + + // + // Put a white box around the meter. + // + GrContextForegroundSet(psContext, ClrWhite); + GrRectDraw(psContext, &sRect); +} + +//***************************************************************************** +// +// Draw green and red blocks within a graphical meter on the display to +// indicate percentage fullness of some quantity (transmit and receive buffers +// in this case). +// +//***************************************************************************** +void +UpdateBufferMeter(tContext *psContext, uint32_t ui32FullPercent, int32_t i32X, + int32_t i32Y) +{ + tRectangle sRect; + int32_t i32CorrectedY, i32XBreak; + + // + // Correct the Y coordinate so that the meter is centered on the same line + // as the text caption to its left and so that we avoid the meter's 1 pixel + // white border. + // + i32CorrectedY = i32Y - ((BUFFER_METER_HEIGHT - TEXT_HEIGHT) / 2) + 1; + + // + // Determine where the break point between full (red) and empty (green) + // sections occurs. + // + i32XBreak = (i32X + 1) + (ui32FullPercent * (BUFFER_METER_WIDTH - 2)) / + 100; + + // + // Determine the bounding rectangle of the full section. + // + sRect.i16XMin = i32X + 1; + sRect.i16XMax = i32XBreak; + sRect.i16YMin = i32CorrectedY; + sRect.i16YMax = i32CorrectedY + BUFFER_METER_HEIGHT - 3; + + // + // Fill the full section with red (if there is anything to draw) + // + if(ui32FullPercent) + { + GrContextForegroundSet(psContext, ClrRed); + GrRectFill(psContext, &sRect); + } + + // + // Fill the empty section with green. + // + sRect.i16XMin = i32XBreak; + sRect.i16XMax = i32X + BUFFER_METER_WIDTH - 2; + if(sRect.i16XMax > sRect.i16XMin) + { + GrContextForegroundSet(psContext, ClrGreen); + GrRectFill(psContext, &sRect); + } + + // + // Revert to white for text drawing which may occur later. + // + GrContextForegroundSet(psContext, ClrWhite); + +} + +//***************************************************************************** +// +// Handles CDC driver notifications related to control and setup of the device. +// +// \param pvCBData is the client-supplied callback pointer for this channel. +// \param ulEvent identifies the event we are being notified about. +// \param ulMsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the CDC driver to perform control-related +// operations on behalf of the USB host. These functions include setting +// and querying the serial communication parameters, setting handshake line +// states and sending break conditions. +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +ControlHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + // + // Which event are we being asked to process? + // + switch(ui32Event) + { + // + // We are connected to a host and communication is now possible. + // + case USB_EVENT_CONNECTED: + { + // + // Now connected and ready for normal operation. + // + HWREGBITW(&g_ui32Flags, FLAG_USB_CONFIGURED) = 1; + + // + // Flush our buffers. + // + USBBufferFlush(&g_sTxBuffer); + USBBufferFlush(&g_sRxBuffer); + + // + // Tell the main loop to update the display. + // + g_pcStatus = "Host connected."; + + // + // Set the command status update flag. + // + HWREGBITW(&g_ui32Flags, FLAG_STATUS_UPDATE) = 1; + + break; + } + + // + // The host has disconnected. + // + case USB_EVENT_DISCONNECTED: + { + // + // No longer connected. + // + HWREGBITW(&g_ui32Flags, FLAG_USB_CONFIGURED) = 0; + + g_pcStatus = "Host disconnected."; + + // + // Set the command status update flag. + // + HWREGBITW(&g_ui32Flags, FLAG_STATUS_UPDATE) = 1; + + break; + } + + // + // Return the current serial communication parameters. + // + case USBD_CDC_EVENT_GET_LINE_CODING: + { + GetLineCoding(pvMsgData, UART_CLOCK); + break; + } + + // + // Set the current serial communication parameters. + // + case USBD_CDC_EVENT_SET_LINE_CODING: + { + SetLineCoding(pvMsgData, UART_CLOCK); + break; + } + + // + // Set the current serial communication parameters. + // + case USBD_CDC_EVENT_SET_CONTROL_LINE_STATE: + { + SetControlLineState((uint16_t)ui32MsgValue); + break; + } + + // + // Send a break condition on the serial line. + // + case USBD_CDC_EVENT_SEND_BREAK: + { + SendBreak(true); + break; + } + + // + // Clear the break condition on the serial line. + // + case USBD_CDC_EVENT_CLEAR_BREAK: + { + SendBreak(false); + break; + } + + // + // Ignore SUSPEND and RESUME for now. + // + case USB_EVENT_SUSPEND: + case USB_EVENT_RESUME: + { + break; + } + + // + // We don't expect to receive any other events. Ignore any that show + // up in a release build or hang in a debug build. + // + default: + { +#ifdef DEBUG + while(1); +#else + break; +#endif + } + + } + + return(0); +} + +//***************************************************************************** +// +// Handles CDC driver notifications related to the transmit channel (data to +// the USB host). +// +// \param pvCBData is the client-supplied callback pointer for this channel. +// \param ui32Event identifies the event we are being notified about. +// \param ui32MsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the CDC driver to notify us of any events +// related to operation of the transmit data channel (the IN channel carrying +// data to the USB host). +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +TxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + // + // Which event have we been sent? + // + switch(ui32Event) + { + case USB_EVENT_TX_COMPLETE: + { + // + // Since we are using the USBBuffer, we don't need to do anything + // here. + // + break; + } + + // + // We don't expect to receive any other events. Ignore any that show + // up in a release build or hang in a debug build. + // + default: + { +#ifdef DEBUG + while(1); +#else + break; +#endif + } + } + return(0); +} + +//***************************************************************************** +// +// Handles CDC driver notifications related to the receive channel (data from +// the USB host). +// +// \param pvCBData is the client-supplied callback data value for this channel. +// \param ui32Event identifies the event we are being notified about. +// \param ui32MsgValue is an event-specific value. +// \param pvMsgData is an event-specific pointer. +// +// This function is called by the CDC driver to notify us of any events +// related to operation of the receive data channel (the OUT channel carrying +// data from the USB host). +// +// \return The return value is event-specific. +// +//***************************************************************************** +uint32_t +RxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData) +{ + uint32_t ui32Count; + + // + // Which event are we being sent? + // + switch(ui32Event) + { + // + // A new packet has been received. + // + case USB_EVENT_RX_AVAILABLE: + { + // + // Feed some characters into the UART TX FIFO and enable the + // interrupt so we are told when there is more space. + // + USBUARTPrimeTransmit(UART0_BASE); + ROM_UARTIntEnable(UART0_BASE, UART_INT_TX); + break; + } + + // + // We are being asked how much unprocessed data we have still to + // process. We return 0 if the UART is currently idle or 1 if it is + // in the process of transmitting something. The actual number of + // bytes in the UART FIFO is not important here, merely whether or + // not everything previously sent to us has been transmitted. + // + case USB_EVENT_DATA_REMAINING: + { + // + // Get the number of bytes in the buffer and add 1 if some data + // still has to clear the transmitter. + // + ui32Count = UARTBusy(UART0_BASE) ? 1 : 0; + return(ui32Count); + } + + // + // We are being asked to provide a buffer into which the next packet + // can be read. We do not support this mode of receiving data so let + // the driver know by returning 0. The CDC driver should not be sending + // this message but this is included just for illustration and + // completeness. + // + case USB_EVENT_REQUEST_BUFFER: + { + return(0); + } + + // + // We don't expect to receive any other events. Ignore any that show + // up in a release build or hang in a debug build. + // + default: +#ifdef DEBUG + while(1); +#else + break; +#endif + } + + return(0); +} + +//***************************************************************************** +// +// This is the main application entry function. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32TxCount, ui32RxCount, ui32Fullness, ui32SysClock, ui32PLLRate; + tRectangle sRect; + char pcBuffer[16]; +#ifdef USE_ULPI + uint32_t ui32Setting; +#endif + + // + // Set the system clock to run at 120MHz from the PLL. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + +#ifdef USE_ULPI + // + // Switch the USB ULPI Pins over. + // + USBULPIPinoutSet(); + + // + // Enable USB ULPI with high speed support. + // + ui32Setting = USBLIB_FEATURE_ULPI_HS; + USBOTGFeatureSet(0, USBLIB_FEATURE_USBULPI, &ui32Setting); + + // + // Setting the PLL frequency to zero tells the USB library to use the + // external USB clock. + // + ui32PLLRate = 0; +#else + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; +#endif + + // + // Enable the system tick. + // + ROM_SysTickPeriodSet(ui32SysClock / TICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Not configured initially. + // + g_ui32Flags = 0; + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-dev-serial"); + + // + // Fill the top 15 rows of the screen with blue to create the banner. + // + sRect.i16XMin = 0; + sRect.i16YMin = 0; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMax = 23; + GrContextForegroundSet(&g_sContext, ClrDarkBlue); + GrRectFill(&g_sContext, &sRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrRectDraw(&g_sContext, &sRect); + + // + // Show the various static text elements on the color STN display. + // + GrContextFontSet(&g_sContext, TEXT_FONT); + GrStringDraw(&g_sContext, "Tx bytes:", -1, 8, 80, false); + GrStringDraw(&g_sContext, "Tx buffer:", -1, 8, 105, false); + GrStringDraw(&g_sContext, "Rx bytes:", -1, 8, 160, false); + GrStringDraw(&g_sContext, "Rx buffer:", -1, 8, 185, false); + DrawBufferMeter(&g_sContext, 150, 105); + DrawBufferMeter(&g_sContext, 150, 185); + + // + // Enable the UART that we will be redirecting. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); + + // + // Change the UART clock to the 16 MHz PIOSC. + // + UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); + + // + // Set the default UART configuration. + // + ROM_UARTConfigSetExpClk(UART0_BASE, UART_CLOCK, + DEFAULT_BIT_RATE, DEFAULT_UART_CONFIG); + ROM_UARTFIFOLevelSet(UART0_BASE, UART_FIFO_TX4_8, UART_FIFO_RX4_8); + + // + // Configure and enable UART interrupts. + // + ROM_UARTIntClear(UART0_BASE, ROM_UARTIntStatus(UART0_BASE, false)); + ROM_UARTIntEnable(UART0_BASE, (UART_INT_OE | UART_INT_BE | UART_INT_PE | + UART_INT_FE | UART_INT_RT | UART_INT_TX | UART_INT_RX)); + + // + // Tell the user what we are up to. + // + DisplayStatus(&g_sContext, " Configuring USB... "); + + // + // Initialize the transmit and receive buffers. + // + USBBufferInit(&g_sTxBuffer); + USBBufferInit(&g_sRxBuffer); + + // + // Set the USB stack mode to Device mode with VBUS monitoring. + // + USBStackModeSet(0, eUSBModeDevice, 0); + + // + // Tell the USB library the CPU clock and the PLL frequency. This is a + // new requirement for TM4C129 devices. + // + USBDCDFeatureSet(0, USBLIB_FEATURE_CPUCLK, &ui32SysClock); + USBDCDFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Pass our device information to the USB library and place the device + // on the bus. + // + USBDCDCInit(0, (tUSBDCDCDevice *)&g_sCDCDevice); + + // + // Wait for initial configuration to complete. + // + DisplayStatus(&g_sContext, " Waiting for host... "); + + // + // Clear our local byte counters. + // + ui32RxCount = 0; + ui32TxCount = 0; + g_ui32UARTTxCount = 0; + g_ui32UARTRxCount = 0; +#ifdef DEBUG + g_ui32UARTRxErrors = 0; +#endif + + // + // Enable interrupts now that the application is ready to start. + // + ROM_IntEnable(INT_UART0); + + // + // Main application loop. + // + while(1) + { + // + // Have we been asked to update the status display? + // + if(HWREGBITW(&g_ui32Flags, FLAG_STATUS_UPDATE)) + { + // + // Clear the command flag + // + HWREGBITW(&g_ui32Flags, FLAG_STATUS_UPDATE) = 0; + + DisplayStatus(&g_sContext, g_pcStatus); + } + + // + // Has there been any transmit traffic since we last checked? + // + if(ui32TxCount != g_ui32UARTTxCount) + { + // + // Take a snapshot of the latest transmit count. + // + ui32TxCount = g_ui32UARTTxCount; + + // + // Update the display of bytes transmitted by the UART. + // + usnprintf(pcBuffer, 16, "%d ", ui32TxCount); + GrStringDraw(&g_sContext, pcBuffer, -1, 150, 80, true); + + // + // Update the RX buffer fullness. Remember that the buffers are + // named relative to the USB whereas the status display is from + // the UART's perspective. The USB's receive buffer is the UART's + // transmit buffer. + // + ui32Fullness = ((USBBufferDataAvailable(&g_sRxBuffer) * 100) / + UART_BUFFER_SIZE); + + UpdateBufferMeter(&g_sContext, ui32Fullness, 150, 105); + } + + // + // Has there been any receive traffic since we last checked? + // + if(ui32RxCount != g_ui32UARTRxCount) + { + // + // Take a snapshot of the latest receive count. + // + ui32RxCount = g_ui32UARTRxCount; + + // + // Update the display of bytes received by the UART. + // + usnprintf(pcBuffer, 16, "%d ", ui32RxCount); + GrStringDraw(&g_sContext, pcBuffer, -1, 150, 160, true); + + // + // Update the TX buffer fullness. Remember that the buffers are + // named relative to the USB whereas the status display is from + // the UART's perspective. The USB's transmit buffer is the UART's + // receive buffer. + // + ui32Fullness = ((USBBufferDataAvailable(&g_sTxBuffer) * 100) / + UART_BUFFER_SIZE); + + UpdateBufferMeter(&g_sContext, ui32Fullness, 150, 185); + } + } +} diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewd b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewp b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewp new file mode 100644 index 0000000..773234b --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\usb_dev_serial.c + + + $PROJ_DIR$\usb_serial_structs.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.icf b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.icf new file mode 100644 index 0000000..1410483 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_dev_serial.icf - Linker configuration file for usb_dev_serial. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ld b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ld new file mode 100644 index 0000000..a384044 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_dev_serial.ld - Linker configuration file for usb_dev_serial. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.sct b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.sct new file mode 100644 index 0000000..b764196 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_dev_serial.sct - Linker configuration file for usb_dev_serial. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvopt b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvopt new file mode 100644 index 0000000..8439fbf --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_dev_serial + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_serial.c + usb_dev_serial.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_serial_structs.c + usb_serial_structs.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvproj b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvproj new file mode 100644 index 0000000..b728459 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_dev_serial + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_dev_serial + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_dev_serial.bin .\rvmdk\usb_dev_serial.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_dev_serial.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + usb_dev_serial.c + 1 + .\usb_dev_serial.c + + + usb_serial_structs.c + 1 + .\usb_serial_structs.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial_ccs.cmd b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial_ccs.cmd new file mode 100644 index 0000000..a4e0293 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_dev_serial_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_dev_serial_ccs.cmd - CCS linker configuration file for usb_dev_serial. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.c b/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.c new file mode 100644 index 0000000..30a1bd4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.c @@ -0,0 +1,217 @@ +//***************************************************************************** +// +// usb_serial_structs.c - Data structures defining this CDC USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_types.h" +#include "driverlib/usb.h" +#include "usblib/usblib.h" +#include "usblib/usbcdc.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdcdc.h" +#include "usb_serial_structs.h" + +//***************************************************************************** +// +// The languages supported by this device. +// +//***************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//***************************************************************************** +// +// The manufacturer string. +// +//***************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//***************************************************************************** +// +// The product string. +// +//***************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + 2 + (16 * 2), + USB_DTYPE_STRING, + 'V', 0, 'i', 0, 'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, + 'C', 0, 'O', 0, 'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0 +}; + +//***************************************************************************** +// +// The serial number string. +// +//***************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + 2 + (8 * 2), + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The control interface description string. +// +//***************************************************************************** +const uint8_t g_pui8ControlInterfaceString[] = +{ + 2 + (21 * 2), + USB_DTYPE_STRING, + 'A', 0, 'C', 0, 'M', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, 't', 0, + 'r', 0, 'o', 0, 'l', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, + 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + 2 + (26 * 2), + USB_DTYPE_STRING, + 'S', 0, 'e', 0, 'l', 0, 'f', 0, ' ', 0, 'P', 0, 'o', 0, 'w', 0, + 'e', 0, 'r', 0, 'e', 0, 'd', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, + 'f', 0, 'i', 0, 'g', 0, 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, + 'o', 0, 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_pui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, + g_pui8ControlInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_pui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//***************************************************************************** +// +// CDC device callback function prototypes. +// +//***************************************************************************** +uint32_t RxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData); +uint32_t TxHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgValue, + void *pvMsgData); +uint32_t ControlHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgValue, void *pvMsgData); + +//***************************************************************************** +// +// The CDC device initialization and customization structures. In this case, +// we are using USBBuffers between the CDC device class driver and the +// application code. The function pointers and callback data values are set +// to insert a buffer in each of the data channels, transmit and receive. +// +// With the buffer in place, the CDC channel callback is set to the relevant +// channel function and the callback data is set to point to the channel +// instance data. The buffer, in turn, has its callback set to the application +// function and the callback data set to our CDC instance structure. +// +//***************************************************************************** +tCDCSerInstance g_sCDCInstance; + +extern const tUSBBuffer g_sTxBuffer; +extern const tUSBBuffer g_sRxBuffer; + +tUSBDCDCDevice g_sCDCDevice = +{ + USB_VID_TI_1CBE, + USB_PID_SERIAL, + 0, + USB_CONF_ATTR_SELF_PWR, + ControlHandler, + (void *)&g_sCDCDevice, + USBBufferEventCallback, + (void *)&g_sRxBuffer, + USBBufferEventCallback, + (void *)&g_sTxBuffer, + g_pui8StringDescriptors, + NUM_STRING_DESCRIPTORS, +}; + +//***************************************************************************** +// +// Receive buffer (from the USB perspective). +// +//***************************************************************************** +uint8_t g_pui8USBRxBuffer[UART_BUFFER_SIZE]; +uint8_t g_pui8RxBufferWorkspace[USB_BUFFER_WORKSPACE_SIZE]; +const tUSBBuffer g_sRxBuffer = +{ + false, // This is a receive buffer. + RxHandler, // pfnCallback + (void *)&g_sCDCDevice, // Callback data is our device pointer. + USBDCDCPacketRead, // pfnTransfer + USBDCDCRxPacketAvailable, // pfnAvailable + (void *)&g_sCDCDevice, // pvHandle + g_pui8USBRxBuffer, // pui8Buffer + UART_BUFFER_SIZE, // ui32BufferSize + g_pui8RxBufferWorkspace // pvWorkspace +}; + +//***************************************************************************** +// +// Transmit buffer (from the USB perspective). +// +//***************************************************************************** +uint8_t g_pui8USBTxBuffer[UART_BUFFER_SIZE]; +uint8_t g_pui8TxBufferWorkspace[USB_BUFFER_WORKSPACE_SIZE]; +const tUSBBuffer g_sTxBuffer = +{ + true, // This is a transmit buffer. + TxHandler, // pfnCallback + (void *)&g_sCDCDevice, // Callback data is our device pointer. + USBDCDCPacketWrite, // pfnTransfer + USBDCDCTxPacketAvailable, // pfnAvailable + (void *)&g_sCDCDevice, // pvHandle + g_pui8USBTxBuffer, // pcBuffer + UART_BUFFER_SIZE, // ulBufferSize + g_pui8TxBufferWorkspace // pvWorkspace +}; diff --git a/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.h b/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.h new file mode 100644 index 0000000..4015bed --- /dev/null +++ b/boards/dk-tm4c129x/usb_dev_serial/usb_serial_structs.h @@ -0,0 +1,49 @@ +//***************************************************************************** +// +// usb_serial_structs.h - Data structures defining this USB CDC device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef _USB_SERIAL_STRUCTS_H_ +#define _USB_SERIAL_STRUCTS_H_ + +//***************************************************************************** +// +// The size of the transmit and receive buffers used for the redirected UART. +// This number should be a power of 2 for best performance. 256 is chosen +// pretty much at random though the buffer should be at least twice the size of +// a maximum-sized USB packet. +// +//***************************************************************************** +#define UART_BUFFER_SIZE 256 + +extern uint32_t RxHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgValue, void *pvMsgData); +extern uint32_t TxHandler(void *pvlCBData, uint32_t ui32Event, + uint32_t ui32MsgValue, void *pvMsgData); + +extern const tUSBBuffer g_sTxBuffer; +extern const tUSBBuffer g_sRxBuffer; +extern tUSBDCDCDevice g_sCDCDevice; +extern uint8_t g_pui8USBTxBuffer[]; +extern uint8_t g_pui8USBRxBuffer[]; + +#endif diff --git a/boards/dk-tm4c129x/usb_host_audio/Makefile b/boards/dk-tm4c129x/usb_host_audio/Makefile new file mode 100644 index 0000000..fb9a35d --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/Makefile @@ -0,0 +1,102 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB host audio example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../third_party/fatfs/src +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party +IPATH+=../../../../utils + +# +# The default rule, which causes the USB host audio example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_host_audio.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB host audio example. +# +${COMPILER}/usb_host_audio.axf: ${COMPILER}/buttons.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/ff.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/frame.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/mmc-dk-tm4c129x.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/touch.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/usb_host_audio.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/usb_sound.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_host_audio.axf: ${COMPILER}/wavfile.o +${COMPILER}/usb_host_audio.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_host_audio.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_host_audio.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_host_audio.axf: usb_host_audio.ld +SCATTERgcc_usb_host_audio=usb_host_audio.ld +ENTRY_usb_host_audio=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_host_audio/ccs/.ccsimportspec new file mode 100644 index 0000000..fbf85a1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/.ccsproject b/boards/dk-tm4c129x/usb_host_audio/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/.cproject b/boards/dk-tm4c129x/usb_host_audio/ccs/.cproject new file mode 100644 index 0000000..ce10e9d --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/.cproject @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/.project b/boards/dk-tm4c129x/usb_host_audio/ccs/.project new file mode 100644 index 0000000..52d2783 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/.project @@ -0,0 +1,100 @@ + + + usb_host_audio + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_audio/startup_ccs.c + + + usb_host_audio.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.c + + + usb_host_audio_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_audio/usb_host_audio_ccs.cmd + + + drivers/buttons.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/buttons.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + drivers/usb_sound.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/usb_sound.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + utils/wavfile.c + 1 + SW_ROOT/utils/wavfile.c + + + third_party/fatfs/port/mmc-dk-tm4c129x.c + 1 + SW_ROOT/third_party/fatfs/port/mmc-dk-tm4c129x.c + + + third_party/fatfs/src/ff.c + 1 + SW_ROOT/third_party/fatfs/src/ff.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_host_audio/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.bin b/boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.bin new file mode 100644 index 0000000..7bdbd53 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.out b/boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.out new file mode 100644 index 0000000..b77c709 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/ccs/Debug/usb_host_audio.out differ diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_host_audio/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_host_audio/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_host_audio/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.bin b/boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.bin new file mode 100644 index 0000000..057570a Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.out b/boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.out new file mode 100644 index 0000000..4d54294 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/ewarm/Exe/usb_host_audio.out differ diff --git a/boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.axf b/boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.axf new file mode 100644 index 0000000..72a455d Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.axf differ diff --git a/boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.bin b/boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.bin new file mode 100644 index 0000000..397de3a Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/gcc/usb_host_audio.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio/readme.txt b/boards/dk-tm4c129x/usb_host_audio/readme.txt new file mode 100644 index 0000000..d4ffd1d --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/readme.txt @@ -0,0 +1,38 @@ +USB host audio example application using SD Card FAT file system + + +This example application demonstrates playing .wav files from an SD card +that is formatted with a FAT file system using USB host audio class. The +application can browse the file system on the SD card and displays +all files that are found. Files can be selected to show their format and +then played if the application determines that they are a valid .wav file. +Only PCM format (uncompressed) files may be played. + +For additional details about FatFs, see the following site: +http://elm-chan.org/fsw/ff/00index_e.html + +The application can be recompiled to run using and external USB phy to +implement a high speed host using an external USB phy. To use the external +phy the application must be built with \b USE_ULPI defined. This disables +the internal phy and the connector on the DK-TM4C129X board and enables the +connections to the external ULPI phy pins on the DK-TM4C129X board. + +------------------------------------------------------------------------------- + +Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.axf b/boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.axf new file mode 100644 index 0000000..cc13300 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.axf differ diff --git a/boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.bin b/boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.bin new file mode 100644 index 0000000..ee00144 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio/rvmdk/usb_host_audio.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio/startup_ccs.c b/boards/dk-tm4c129x/usb_host_audio/startup_ccs.c new file mode 100644 index 0000000..5bf38b3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio/startup_ewarm.c b/boards/dk-tm4c129x/usb_host_audio/startup_ewarm.c new file mode 100644 index 0000000..cad5a03 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio/startup_gcc.c b/boards/dk-tm4c129x/usb_host_audio/startup_gcc.c new file mode 100644 index 0000000..ae0bddc --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio/startup_rvmdk.S b/boards/dk-tm4c129x/usb_host_audio/startup_rvmdk.S new file mode 100644 index 0000000..80a2337 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickHandler + EXTERN USB0OTGModeIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0OTGModeIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.c b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.c new file mode 100644 index 0000000..d2bee89 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.c @@ -0,0 +1,1554 @@ +//***************************************************************************** +// +// usb_host_audio.c - Main routine for the USB host audio example. +// +// Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_ints.h" +#include "driverlib/flash.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/udma.h" +#include "driverlib/systick.h" +#include "driverlib/pin_map.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/listbox.h" +#include "grlib/pushbutton.h" +#include "utils/ustdlib.h" +#include "third_party/fatfs/src/ff.h" +#include "third_party/fatfs/src/diskio.h" +#include "drivers/usb_sound.h" +#include "utils/wavfile.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/frame.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "usblib/usblib.h" +#include "usblib/host/usbhost.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB host audio example application using SD Card FAT file system +//! (usb_host_audio)

      +//! +//! This example application demonstrates playing .wav files from an SD card +//! that is formatted with a FAT file system using USB host audio class. The +//! application can browse the file system on the SD card and displays +//! all files that are found. Files can be selected to show their format and +//! then played if the application determines that they are a valid .wav file. +//! Only PCM format (uncompressed) files may be played. +//! +//! For additional details about FatFs, see the following site: +//! http://elm-chan.org/fsw/ff/00index_e.html +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed host using an external USB phy. To use the external +//! phy the application must be built with \b USE_ULPI defined. This disables +//! the internal phy and the connector on the DK-TM4C129X board and enables the +//! connections to the external ULPI phy pins on the DK-TM4C129X board. +// +//***************************************************************************** + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} + +#endif + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Global needed by the FAT driver to know the processor speed of the system. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// Defines for the basic screen area used by the application. +// +//***************************************************************************** +#define STATUS_HEIGHT 40 +#define BG_MIN_X 7 +#define BG_MAX_X (320 - 8) +#define BG_MIN_Y 24 +#define BG_MAX_Y (240 - 8) +#define BUTTON_HEIGHT (STATUS_HEIGHT - 8) + +//***************************************************************************** +// +// Forward declarations for functions called by the widgets used in the user +// interface. +// +//***************************************************************************** +void OnListBoxChange(tWidget *psWidget, int16_t i16Selected); +static void PlayPause(tWidget *psWidget); +static void Stop(tWidget *psWidget); + +//***************************************************************************** +// +// The following are data structures used by FatFs. +// +//***************************************************************************** +static FATFS g_sFatFs; +static DIR g_sDirObject; +static FILINFO g_sFileInfo; + +//***************************************************************************** +// +// Define a pair of buffers that are used for holding path information. +// The buffer size must be large enough to hold the longest expected +// full path name, including the file name, and a trailing null character. +// The initial path is set to root "/". +// +//***************************************************************************** +#define PATH_BUF_SIZE 80 +static char g_pcCwdBuf[PATH_BUF_SIZE] = "/"; +static char g_pcTmpBuf[PATH_BUF_SIZE]; + +//***************************************************************************** +// +// The number of SysTick ticks per second. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 +#define MS_PER_SYSTICK (1000 / TICKS_PER_SECOND) + +//***************************************************************************** +// +// Audio buffering definitions, these are optimized to deal with USB audio. +// AUDIO_TRANSFER_SIZE define one frame of audio at 48000 Stereo 16 bit +// and AUDIO_BUFFERS declares 16 frames(16ms) of audio buffering. +// +//***************************************************************************** +#define AUDIO_TRANSFER_SIZE (192) +#define AUDIO_BUFFERS (64) +#define AUDIO_BUFFER_SIZE (AUDIO_TRANSFER_SIZE * AUDIO_BUFFERS) +uint32_t g_ui32TransferSize; +uint32_t g_ui32BufferSize; + +//***************************************************************************** +// +// The main audio buffer and it's pointers. +// +//***************************************************************************** +uint8_t g_pui8AudioBuffer[AUDIO_BUFFER_SIZE]; +volatile uint8_t *g_pui8Read; +volatile uint8_t *g_pui8Write; +volatile uint32_t g_ui32ValidBytes; + +//***************************************************************************** +// +// Holds global flags for the system. +// +//***************************************************************************** +uint32_t g_ui32Flags; + +// +// The last transfer has competed so a new one can be started. +// +#define FLAGS_TX_COMPLETE 1 + +// +// New audio device present. +// +#define FLAGS_DEVICE_CONNECT 2 + +//***************************************************************************** +// +// The global playback state for the application. +// +//***************************************************************************** +volatile enum +{ + AUDIO_PLAYING, + AUDIO_PAUSED, + AUDIO_STOPPED, + AUDIO_NONE +} +g_ePlayState; + +//***************************************************************************** +// +// These are the global .wav file states used by the application. +// +//***************************************************************************** +tWavFile g_sWavFile; +tWavHeader g_sWavHeader; + +//***************************************************************************** +// +// Widget definitions +// +//***************************************************************************** + +//***************************************************************************** +// +// Storage for the filename listbox widget string table. +// +//***************************************************************************** +#define NUM_LIST_STRINGS 48 +const char *g_ppcDirListStrings[NUM_LIST_STRINGS]; + +//***************************************************************************** +// +// Storage for the names of the files in the current directory. Filenames +// are stored in format "(D) filename.ext" for directories or "(F) filename.ext" +// for files. +// +//***************************************************************************** +#define MAX_FILENAME_STRING_LEN (4 + 8 + 1 + 3 + 1) +char g_pcFilenames[NUM_LIST_STRINGS][MAX_FILENAME_STRING_LEN]; + +//***************************************************************************** +// +// The canvas widgets for the wav file information. +// +//***************************************************************************** +extern tCanvasWidget g_sWaveInfoBackground; + +char g_pcTime[16] = ""; +Canvas(g_sWaveInfoTime, &g_sWaveInfoBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, BG_MAX_X - 166, BG_MIN_Y + 28, 158, 10, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_OPAQUE, ClrBlack, ClrWhite, ClrWhite, + g_psFontFixed6x8, g_pcTime, 0, 0); + +char g_pcFormat[24] = ""; +Canvas(g_sWaveInfoSample, &g_sWaveInfoBackground, &g_sWaveInfoTime, 0, + &g_sKentec320x240x16_SSD2119, BG_MAX_X - 166, BG_MIN_Y + 18, 158, 10, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_OPAQUE, ClrBlack, ClrWhite, ClrWhite, + g_psFontFixed6x8, g_pcFormat, 0, 0); + +Canvas(g_sWaveInfoFileName, &g_sWaveInfoBackground, &g_sWaveInfoSample, 0, + &g_sKentec320x240x16_SSD2119, BG_MAX_X - 166, BG_MIN_Y + 8, 158, 10, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_OPAQUE, ClrBlack, ClrWhite, ClrWhite, + g_psFontFixed6x8, "", 0, 0); + +//***************************************************************************** +// +// The canvas widget acting as the background for the wav file information. +// +//***************************************************************************** +Canvas(g_sWaveInfoBackground, WIDGET_ROOT, 0, + &g_sWaveInfoFileName, &g_sKentec320x240x16_SSD2119, + BG_MAX_X - 170, BG_MIN_Y + 4, 166, 80, + CANVAS_STYLE_FILL, ClrBlack, ClrWhite, ClrWhite, + g_psFontFixed6x8, 0, 0, 0); + +extern tCanvasWidget g_sStatusPanel; + +// +// Status text area. +// +Canvas(g_sStatusText, &g_sStatusPanel, 0, 0, &g_sKentec320x240x16_SSD2119, + BG_MIN_X + 112, BG_MAX_Y - STATUS_HEIGHT + 4, 189, BUTTON_HEIGHT, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_OPAQUE, ClrLightGrey, ClrDarkGray, ClrBlack, + g_psFontCmss16, "", 0, 0); + +// +// Stop button. +// +RectangularButton(g_sStop, &g_sStatusPanel, &g_sStatusText, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 58, + BG_MAX_Y - STATUS_HEIGHT + 4, 50, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | + PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, ClrDarkGray, 0, + ClrBlack, g_psFontCmss16, "Stop", 0, 0, 0 ,0 , Stop); + +// +// Play/Pause button. +// +RectangularButton(g_sPlayPause, &g_sStatusPanel, &g_sStop, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 4, + BG_MAX_Y - STATUS_HEIGHT + 4, 50, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | + PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, ClrDarkGray, 0, + ClrBlack, g_psFontCmss16, "Play", 0, 0, 0 ,0 , PlayPause); + +// +// Background of the status area behind the buttons. +// +Canvas(g_sStatusPanel, WIDGET_ROOT, 0, &g_sPlayPause, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MAX_Y - STATUS_HEIGHT, + BG_MAX_X - BG_MIN_X, STATUS_HEIGHT, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_TOP, ClrGray, ClrWhite, ClrBlack, 0, + 0, 0, 0); + +// +// The file list box. +// +ListBox(g_sDirList, WIDGET_ROOT, 0, 0, + &g_sKentec320x240x16_SSD2119, + BG_MIN_X + 4, BG_MIN_Y + 4, 120, + BG_MAX_Y - BG_MIN_Y - STATUS_HEIGHT - 8, + LISTBOX_STYLE_OUTLINE, ClrBlack, ClrDarkBlue, ClrSilver, ClrWhite, + ClrWhite, g_psFontCmss12, g_ppcDirListStrings, + NUM_LIST_STRINGS, 0, OnListBoxChange); + +//***************************************************************************** +// +// State information for keep track of time. +// +//***************************************************************************** +static uint32_t g_ui32BytesPlayed; +static uint32_t g_ui32NextUpdate; + +//***************************************************************************** +// +// Globals used to track play back position. +// +//***************************************************************************** +static uint16_t g_ui16Minutes; +static uint16_t g_ui16Seconds; + +//***************************************************************************** +// +// Static constant strings used by the application. +// +//***************************************************************************** +static const char g_pcPlay[] = "Play"; +static const char g_pcPause[] = "Pause"; +static const char g_pcNoDevice[] ="No USB Device "; +static const char g_pcUnknownDevice[] ="Unknown Device "; +static const char g_pcDirError[] ="Directory Read Error "; + +//***************************************************************************** +// +// This function is used to tell when to update the play back times for a file. +// It will only update the screen at 1 second intervals but can be called more +// often with no result. +// +//***************************************************************************** +static void +DisplayTime(uint32_t ui32ForceUpdate) +{ + uint32_t ui32Seconds; + uint32_t ui32Minutes; + + // + // Only display on the screen once per second. + // + if((g_ui32BytesPlayed >= g_ui32NextUpdate) || (ui32ForceUpdate != 0)) + { + // + // Set the next update time to one second later. + // + g_ui32NextUpdate = g_ui32BytesPlayed + g_sWavHeader.ui32AvgByteRate; + + // + // Calculate the integer number of minutes and seconds. + // + ui32Seconds = g_ui32BytesPlayed / g_sWavHeader.ui32AvgByteRate; + ui32Minutes = ui32Seconds / 60; + ui32Seconds -= ui32Minutes * 60; + + // + // Print the time string in the format mm.ss/mm.ss + // + usprintf(g_pcTime, "%2d:%02d/%d:%02d\0", ui32Minutes,ui32Seconds, + g_ui16Minutes, g_ui16Seconds); + + // + // Display the updated time on the screen. + // + WidgetPaint((tWidget *)&g_sWaveInfoTime); + } +} + +//***************************************************************************** +// +// This function will handle stopping the play back of audio. It will not do +// this immediately but will defer stopping audio at a later time. This allows +// this function to be called from an interrupt handler. +// +//***************************************************************************** +static void +WaveStop(void) +{ + uint32_t ui32Idx; + uint32_t *pui32Buffer; + + // + // Stop playing audio. + // + g_ePlayState = AUDIO_STOPPED; + + // + // Do unsigned long accesses to clear out the buffer. + // + pui32Buffer = (uint32_t *)g_pui8AudioBuffer; + + // + // Zero out the buffer. + // + for(ui32Idx = 0; ui32Idx < (AUDIO_BUFFER_SIZE >> 2); ui32Idx++) + { + pui32Buffer[ui32Idx] = 0; + } + + // + // Reset the number of bytes played and for a time update on the screen. + // + g_ui32BytesPlayed = 0; + g_ui32NextUpdate = 0; + DisplayTime(1); + + // + // Change the play/pause button to say play. + // + PushButtonTextSet(&g_sPlayPause, g_pcPlay); + WidgetPaint((tWidget *)&g_sPlayPause); +} + +//***************************************************************************** +// +// This function is used to change to a new directory in the file system. +// It takes a parameter that specifies the directory to make the current +// working directory. +// Path separators must use a forward slash "/". The directory parameter +// can be one of the following: +// * root ("/") +// * a fully specified path ("/my/path/to/mydir") +// * a single directory name that is in the current directory ("mydir") +// * parent directory ("..") +// +// It does not understand relative paths, so dont try something like this: +// ("../my/new/path") +// +// Once the new directory is specified, it attempts to open the directory +// to make sure it exists. If the new path is opened successfully, then +// the current working directory (cwd) is changed to the new path. +// +// In cases of error, the pui32Reason parameter will be written with one of +// the following values: +// +// NAME_TOO_LONG_ERROR - combination of paths are too long for the buffer +// OPENDIR_ERROR - there is some problem opening the new directory +// +//***************************************************************************** +static FRESULT +ChangeToDirectory(char *pcDirectory) +{ + uint32_t ui32Idx; + FRESULT fresult; + + // + // Copy the current working path into a temporary buffer so + // it can be manipulated. + // + strcpy(g_pcTmpBuf, g_pcCwdBuf); + + // + // If the first character is /, then this is a fully specified + // path, and it should just be used as-is. + // + if(pcDirectory[0] == '/') + { + // + // Make sure the new path is not bigger than the cwd buffer. + // + if(strlen(pcDirectory) + 1 > sizeof(g_pcCwdBuf)) + { + return(FR_OK); + } + + // + // If the new path name (in argv[1]) is not too long, then + // copy it into the temporary buffer so it can be checked. + // + else + { + strncpy(g_pcTmpBuf, pcDirectory, sizeof(g_pcTmpBuf)); + } + } + + // + // If the argument is .. then attempt to remove the lowest level + // on the CWD. + // + else if(!strcmp(pcDirectory, "..")) + { + // + // Get the index to the last character in the current path. + // + ui32Idx = strlen(g_pcTmpBuf) - 1; + + // + // Back up from the end of the path name until a separator (/) + // is found, or until we bump up to the start of the path. + // + while((g_pcTmpBuf[ui32Idx] != '/') && (ui32Idx > 1)) + { + // + // Back up one character. + // + ui32Idx--; + } + + // + // Now we are either at the lowest level separator in the + // current path, or at the beginning of the string (root). + // So set the new end of string here, effectively removing + // that last part of the path. + // + g_pcTmpBuf[ui32Idx] = 0; + } + + // + // Otherwise this is just a normal path name from the current + // directory, and it needs to be appended to the current path. + // + else + { + // + // Test to make sure that when the new additional path is + // added on to the current path, there is room in the buffer + // for the full new path. It needs to include a new separator, + // and a trailing null character. + // + if(strlen(g_pcTmpBuf) + strlen(pcDirectory) + 2 > sizeof(g_pcCwdBuf)) + { + return(FR_INVALID_OBJECT); + } + + // + // The new path is okay, so add the separator and then append + // the new directory to the path. + // + else + { + // + // If not already at the root level, then append a / + // + if(strcmp(g_pcTmpBuf, "/")) + { + strcat(g_pcTmpBuf, "/"); + } + + // + // Append the new directory to the path. + // + strcat(g_pcTmpBuf, pcDirectory); + } + } + + // + // At this point, a candidate new directory path is in g_pcTmpBuf. + // Try to open it to make sure it is valid. + // + fresult = f_opendir(&g_sDirObject, g_pcTmpBuf); + + // + // This was a valid path, so copy it into the CWD. + // + if(fresult == FR_OK) + { + strncpy(g_pcCwdBuf, g_pcTmpBuf, sizeof(g_pcCwdBuf)); + } + + // + // Return success. + // + return(fresult); +} + +//***************************************************************************** +// +// Fill the audio buffer with data from the open file. +// +//***************************************************************************** +static void +FillAudioBuffer(void) +{ + uint32_t ui32Count, ui32Size; + uint8_t *pui8Read; + + // + // If already full return. + // + if(g_ui32ValidBytes == g_ui32BufferSize) + { + return; + } + + // + // Snap shot the read pointer since it might change while we are filling + // the buffer. If the read pointer moved due to an interrupt we will + // get the update on the next call to this function. + // + pui8Read = (uint8_t *)g_pui8Read; + + // + // If write is ahead of read then fill to the end of the buffer if + // possible. + // + if(pui8Read <= g_pui8Write) + { + // + // Calculate the amount of space we have. + // + ui32Size = g_ui32BufferSize - + (uint32_t)(g_pui8Write - g_pui8AudioBuffer); + ui32Count = WavRead(&g_sWavFile, (uint8_t *)g_pui8Write, ui32Size); + + g_pui8Write += ui32Count; + IntMasterDisable(); + g_ui32ValidBytes += ui32Count; + IntMasterEnable(); + + if(g_pui8Write == (g_pui8AudioBuffer + g_ui32BufferSize)) + { + g_pui8Write = g_pui8AudioBuffer; + } + + ui32Size = pui8Read - g_pui8AudioBuffer; + + if(ui32Size) + { + ui32Count = WavRead(&g_sWavFile, (uint8_t *)g_pui8Write, ui32Size); + g_pui8Write += ui32Count; + IntMasterDisable(); + g_ui32ValidBytes += ui32Count; + IntMasterEnable(); + } + } + + // + // If read is now ahead of write then fill to the read pointer. + // + if(pui8Read > g_pui8Write) + { + // + // Calculate the amount of space we have. + // + ui32Size = (uint32_t)(pui8Read - g_pui8Write); + ui32Count = WavRead(&g_sWavFile, (uint8_t *)g_pui8Write, ui32Size); + + g_pui8Write += ui32Count; + + IntMasterDisable(); + g_ui32ValidBytes += ui32Count; + IntMasterEnable(); + } +} + +//***************************************************************************** +// +// This function handles the callback from the USB audio device when a buffer +// has been played or a new buffer has been received. +// +//***************************************************************************** +static void +USBAudioOutCallback(void *pvBuffer, uint32_t ui32Event, uint32_t ui32Value) +{ + // + // If a buffer has been played then schedule a new one to play. + // + if((ui32Event == USB_EVENT_TX_COMPLETE) && (g_ePlayState == AUDIO_PLAYING)) + { + // + // Indicate that a transfer was complete so that the non-interrupt + // code can read in more data from the file. + // + HWREGBITW(&g_ui32Flags, FLAGS_TX_COMPLETE) = 1; + + // + // Increment the read pointer. + // + g_pui8Read += g_ui32TransferSize; + + // + // Remove the specified number of bytes from the buffer. + // + if(g_ui32ValidBytes > g_ui32TransferSize) + { + g_ui32ValidBytes -= g_ui32TransferSize; + } + else + { + g_ui32ValidBytes = 0; + } + + // + // Wrap the read pointer if necessary. + // + if(g_pui8Read >= (g_pui8AudioBuffer + g_ui32BufferSize)) + { + g_pui8Read = g_pui8AudioBuffer; + } + + // + // Increment the number of bytes that have been played. + // + g_ui32BytesPlayed += g_ui32TransferSize; + + // + // Schedule a new USB audio buffer to be transmitted to the USB + // audio device. + // + USBSoundBufferOut((uint8_t *)g_pui8Read, g_ui32TransferSize, + USBAudioOutCallback); + } +} + +//***************************************************************************** +// +// This is the callback for the play/pause button. +// +//***************************************************************************** +static void +PlayPause(tWidget *psWidget) +{ + int16_t i16Select; + + // + // If we are stopped, then start playing. + // + if(g_ePlayState == AUDIO_STOPPED) + { + // + // Get the current selection from the list box. + // + i16Select = ListBoxSelectionGet(&g_sDirList); + + // + // See if this is a valid .wav file that can be opened. + // + if(WavOpen(g_pcFilenames[i16Select], &g_sWavFile) == 0) + { + // + // Initialize the read and write pointers. + // + g_pui8Read = g_pui8AudioBuffer; + g_pui8Write = g_pui8AudioBuffer; + g_ui32ValidBytes = 0; + + // + // Fill the audio buffer from the file. + // + FillAudioBuffer(); + + // + // Start the audio playback. + // + USBSoundBufferOut((uint8_t *)g_pui8Read, g_ui32TransferSize, + USBAudioOutCallback); + // + // Indicate that wave play back should start. + // + g_ePlayState = AUDIO_PLAYING; + + // + // Change the button to indicate pause. + // + PushButtonTextSet(&g_sPlayPause, g_pcPause); + WidgetPaint((tWidget *)&g_sPlayPause); + } + else + { + // + // Play was pressed on an invalid file. + // + CanvasTextSet(&g_sStatusText, "Invalid wav format "); + WidgetPaint((tWidget *)&g_sPlayPause); + + return; + } + + // + // Initialize the read and write pointers. + // + g_pui8Read = g_pui8AudioBuffer; + g_pui8Write = g_pui8AudioBuffer; + g_ui32ValidBytes = 0; + + // + // Fill the audio buffer from the file. + // + FillAudioBuffer(); + + // + // Start the audio playback. + // + USBSoundBufferOut((uint8_t *)g_pui8Read, g_ui32TransferSize, + USBAudioOutCallback); + } + else if(g_ePlayState == AUDIO_PLAYING) + { + // + // Now switching to a paused state, so change the button to say play. + // + PushButtonTextSet(&g_sPlayPause, g_pcPlay); + WidgetPaint((tWidget *)&g_sPlayPause); + + g_ePlayState = AUDIO_PAUSED; + } + else if(g_ePlayState == AUDIO_PAUSED) + { + // + // Fill the audio buffer from the file. + // + FillAudioBuffer(); + + // + // Start the audio playback. + // + USBSoundBufferOut((uint8_t *)g_pui8Read, g_ui32TransferSize, + USBAudioOutCallback); + + // + // Now switching to a play state, so change the button to say paused. + // + PushButtonTextSet(&g_sPlayPause, g_pcPause); + WidgetPaint((tWidget *)&g_sPlayPause); + + g_ePlayState = AUDIO_PLAYING; + } +} + +//***************************************************************************** +// +// Stopped pressed so stop the wav playback. +// +//***************************************************************************** +static void +Stop(tWidget *psWidget) +{ + // + // Stop play back if we are playing. + // + if((g_ePlayState == AUDIO_PLAYING) || (g_ePlayState == AUDIO_PAUSED)) + { + WaveStop(); + } +} + +//***************************************************************************** +// +// This function is called to read the contents of the current directory on +// the SD card and fill the listbox containing the names of all files and +// directories. +// +//***************************************************************************** +static int +PopulateFileListBox(bool bRepaint) +{ + uint32_t ui32ItemCount; + FRESULT iFResult; + + // + // Empty the list box on the display. + // + ListBoxClear(&g_sDirList); + + // + // Make sure the list box will be redrawn next time the message queue + // is processed. + // + if(bRepaint) + { + WidgetPaint((tWidget *)&g_sDirList); + } + + // + // Open the current directory for access. + // + iFResult = f_opendir(&g_sDirObject, g_pcCwdBuf); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + // + // Change the text to reflect the change. + // + CanvasTextSet(&g_sStatusText, g_pcDirError); + WidgetPaint((tWidget *)&g_sStatusText); + return(iFResult); + } + + // + // If not at the root then add the ".." entry. + // + if(g_pcCwdBuf[1] != 0) + { + g_pcFilenames[0][0] = '.'; + g_pcFilenames[0][1] = '.'; + g_pcFilenames[0][2] = 0; + ListBoxTextAdd(&g_sDirList, g_pcFilenames[0]); + ui32ItemCount = 1; + } + else + { + ui32ItemCount = 0; + } + + // + // Enter loop to enumerate through all directory entries. + // + for(;;) + { + // + // Read an entry from the directory. + // + iFResult = f_readdir(&g_sDirObject, &g_sFileInfo); + + // + // Check for error and return if there is a problem. + // + if(iFResult != FR_OK) + { + // + // Change the text to reflect the change. + // + CanvasTextSet(&g_sStatusText, g_pcDirError); + WidgetPaint((tWidget *)&g_sStatusText); + return(iFResult); + } + + // + // If the file name is blank, then this is the end of the + // listing. + // + if(!g_sFileInfo.fname[0]) + { + break; + } + + // + // Add the information as a line in the listbox widget. + // + if(ui32ItemCount < NUM_LIST_STRINGS) + { + if(g_sFileInfo.fattrib & AM_DIR) + { + usnprintf(g_pcFilenames[ui32ItemCount], + MAX_FILENAME_STRING_LEN, "+ %s", g_sFileInfo.fname); + } + else + { + ustrncpy(g_pcFilenames[ui32ItemCount], g_sFileInfo.fname, + MAX_FILENAME_STRING_LEN); + } + ListBoxTextAdd(&g_sDirList, g_pcFilenames[ui32ItemCount]); + } + + // + // Move to the next entry in the item array we use to populate the + // list box. + // + ui32ItemCount++; + } + + // + // Made it to here, return with no errors. + // + return(0); +} + +//***************************************************************************** +// +// The listbox widget callback function. +// +// This function is called whenever someone changes the selected entry in the +// listbox containing the files and directories found in the current directory. +// +//***************************************************************************** +void OnListBoxChange(tWidget *psWidget, int16_t i16Selected) +{ + int16_t i16Sel; + + // + // Get the current selection from the list box. + // + i16Sel = ListBoxSelectionGet(&g_sDirList); + + // + // Is there any selection? + // + if(i16Sel == -1) + { + return; + } + else + { + // + // Is the selection a directory name. + // + if(g_pcFilenames[i16Sel][0] == '+') + { + if((g_ePlayState != AUDIO_PLAYING) && + (g_ePlayState != AUDIO_PAUSED)) + { + CanvasTextSet(&g_sWaveInfoFileName, ""); + CanvasTextSet(&g_sWaveInfoSample, ""); + g_pcTime[0] = 0; + } + + if(ChangeToDirectory(&g_pcFilenames[i16Sel][2]) == FR_OK) + { + PopulateFileListBox(true); + } + } + else if((g_pcFilenames[i16Sel][0] == '.') && + (g_pcFilenames[i16Sel][1] == '.')) + { + // + // If this was the .. selection then move up a directory. + // + if(ChangeToDirectory("..") == FR_OK) + { + PopulateFileListBox(true); + } + + if((g_ePlayState != AUDIO_PLAYING) && + (g_ePlayState != AUDIO_PAUSED)) + { + CanvasTextSet(&g_sWaveInfoFileName, ""); + CanvasTextSet(&g_sWaveInfoSample, ""); + g_pcTime[0] = 0; + } + } + else + { + // + // This was a normal file selections so see if it is a wav file. + // + CanvasTextSet(&g_sWaveInfoFileName, g_pcFilenames[i16Sel]); + + if((g_ePlayState == AUDIO_PLAYING) || + (g_ePlayState == AUDIO_PAUSED)) + { + WaveStop(); + } + + if(WavOpen(g_pcFilenames[i16Sel], &g_sWavFile) == 0) + { + // + // Read the .wav file format. + // + WavGetFormat(&g_sWavFile, &g_sWavHeader); + + // + // Print the formatted string so that it can be + // displayed. + // + usprintf(g_pcFormat, "%d Hz %d bit ", + g_sWavHeader.ui32SampleRate, + g_sWavHeader.ui16BitsPerSample); + + // + // Concatenate the number of channels. + // + if(g_sWavHeader.ui16NumChannels == 1) + { + strcat(g_pcFormat, "Mono"); + } + else + { + strcat(g_pcFormat, "Stereo"); + } + + CanvasTextSet(&g_sWaveInfoSample, g_pcFormat); + + // + // Calculate the minutes and seconds in the file. + // + g_ui16Seconds = g_sWavHeader.ui32DataSize / + g_sWavHeader.ui32AvgByteRate; + g_ui16Minutes = g_ui16Seconds / 60; + g_ui16Seconds -= g_ui16Minutes * 60; + + // + // Close the file, it will be re-opened on play. + // + WavClose(&g_sWavFile); + + // + // Update the file time information. + // + DisplayTime(1); + + // + // Close the file, it will be re-opened on play. + // + WavClose(&g_sWavFile); + } + else + { + CanvasTextSet(&g_sWaveInfoSample, ""); + g_pcTime[0] = 0; + WidgetPaint((tWidget *)&g_sWaveInfoTime); + } + } + + // + // Update the file name and wav file information + // + WidgetPaint((tWidget *)&g_sWaveInfoFileName); + WidgetPaint((tWidget *)&g_sWaveInfoSample); + WidgetPaint((tWidget *)&g_sWaveInfoTime); + } +} + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. FatFs requires a +// timer tick every 10ms for internal timing purposes. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Call the FatFs tick timer. + // + disk_timerproc(); +} + +//***************************************************************************** +// +// Initializes the file system module. +// +// \param None. +// +// This function initializes the third party FAT implementation. +// +// \return Returns \e true on success or \e false on failure. +// +//***************************************************************************** +static bool +FileInit(void) +{ + // + // Mount the file system, using logical disk 0. + // + if(f_mount(0, &g_sFatFs) != FR_OK) + { + return(false); + } + return(true); +} + +//***************************************************************************** +// +// This function handled global level events for the USB host audio. This +// function was passed into the USBSoundInit() function. +// +//***************************************************************************** +static void +AudioEvent(uint32_t ui32Event, uint32_t ui32Param) +{ + switch(ui32Event) + { + case SOUND_EVENT_READY: + { + // + // Flag that a new audio device is present. + // + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT) = 1; + + // + // Change the text to reflect the change. + // + CanvasTextSet(&g_sStatusText, "Ready "); + WidgetPaint((tWidget *)&g_sStatusText); + + break; + } + case SOUND_EVENT_DISCONNECT: + { + // + // If playing return the button text to play. + // + if(g_ePlayState == AUDIO_PLAYING) + { + PushButtonTextSet(&g_sPlayPause, g_pcPlay); + WidgetPaint((tWidget *)&g_sPlayPause); + + WaveStop(); + } + + // + // Device is no longer present. + // + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT) = 0; + g_ePlayState = AUDIO_NONE; + + // + // Change the text to reflect the change. + // + CanvasTextSet(&g_sStatusText, g_pcNoDevice); + WidgetPaint((tWidget *)&g_sStatusText); + + break; + } + case SOUND_EVENT_UNKNOWN_DEV: + { + if(ui32Param == 1) + { + // + // . + // + CanvasTextSet(&g_sStatusText, g_pcUnknownDevice); + } + else + { + // + // Unknown device disconnected. + // + CanvasTextSet(&g_sStatusText, g_pcNoDevice); + } + WidgetPaint((tWidget *)&g_sStatusText); + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// The program main function. It performs initialization, then handles wav +// file playback. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Temp; + uint32_t ui32Retcode, ui32PLLRate; +#ifdef USE_ULPI + uint32_t ui32Setting; +#endif + + // + // Set the system clock to run at 120MHz from the PLL. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + +#ifdef USE_ULPI + // + // Switch the USB ULPI Pins over. + // + USBULPIPinoutSet(); + + // + // Enable USB ULPI with high speed support. + // + ui32Setting = USBLIB_FEATURE_ULPI_HS; + USBOTGFeatureSet(0, USBLIB_FEATURE_USBULPI, &ui32Setting); + + // + // Setting the PLL frequency to zero tells the USB library to use the + // external USB clock. + // + ui32PLLRate = 0; +#else + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; +#endif + + // + // Configure SysTick for a 100Hz interrupt. + // + ROM_SysTickPeriodSet(g_ui32SysClock / TICKS_PER_SECOND); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-host-audio"); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(g_ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sDirList); + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sStatusPanel); + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sWaveInfoBackground); + + // + // Issue the initial paint request to the widgets then immediately call + // the widget manager to process the paint message. This ensures that the + // display is drawn as quickly as possible and saves the delay we would + // otherwise experience if we processed the paint message after mounting + // and reading the SD card. + // + WidgetPaint(WIDGET_ROOT); + WidgetMessageQueueProcess(); + + // + // Determine whether or not an SD Card is installed. If not, print a + // warning and have the user install one and restart. + // + ui32Retcode = disk_initialize(0); + + if(ui32Retcode != RES_OK) + { + CanvasTextSet(&g_sStatusText, "File system error! "); + WidgetPaint((tWidget *)&g_sStatusText); + while(1); + } + else + { + // + // Mount the file system, using logical disk 0. + // + f_mount(0, &g_sFatFs); + + if(!FileInit()) + { + CanvasTextSet(&g_sStatusText, "File system error! "); + WidgetPaint((tWidget *)&g_sStatusText); + while(1); + } + } + + // + // Not playing anything right now. + // + g_ui32Flags = 0; + g_ePlayState = AUDIO_NONE; + + PopulateFileListBox(true); + + // + // Tell the USB library the CPU clock and the PLL frequency. This is a + // new requirement for TM4C129 devices. + // + USBHCDFeatureSet(0, USBLIB_FEATURE_CPUCLK, &g_ui32SysClock); + USBHCDFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Configure the USB host output. + // + USBSoundInit(0, AudioEvent); + + // + // Enter an (almost) infinite loop for reading and processing commands from + // the user. + // + while(1) + { + // + // On connect change the device state to ready. + // + if(HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT)) + { + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT) = 0; + + // + // Getting here means the device is ready. + // Reset the CWD to the root directory. + // + g_pcCwdBuf[0] = '/'; + g_pcCwdBuf[1] = 0; + + // + // Initiate a directory change to the root. This will + // populate a menu structure representing the root directory. + // + if(ChangeToDirectory("/") == FR_OK) + { + // + // Request a repaint so the file menu will be shown + // + WidgetPaint(WIDGET_ROOT); + } + else + { + CanvasTextSet(&g_sStatusText, + "Error accessing root directory "); + WidgetPaint((tWidget *)&g_sStatusText); + while(1); + } + + // + // Attempt to set the audio format to 44100 16 bit stereo by + // default otherwise try 48000 16 bit stereo. + // + if(USBSoundOutputFormatSet(44100, 16, 2) == 0) + { + ui32Temp = 44100; + } + else if(USBSoundOutputFormatSet(48000, 16, 2) == 0) + { + ui32Temp = 48000; + } + else + { + ui32Temp = 0; + } + + // + // If the audio device was support put the sample rate in the + // status line. + // + if(ui32Temp != 0) + { + // + // Calculate the number of bytes per USB frame. + // + g_ui32TransferSize = (ui32Temp * 4) / 1000; + + // + // Calculate the size of the audio buffer. + // + g_ui32BufferSize = AUDIO_BUFFERS * g_ui32TransferSize; + + // + // Print the time string in the format mm.ss/mm.ss + // + if(ui32Temp == 44100) + { + CanvasTextSet(&g_sStatusText, "44.1 kHz Ready "); + } + else if(ui32Temp == 48000) + { + CanvasTextSet(&g_sStatusText, "48 kHz Ready "); + } + + g_ePlayState = AUDIO_STOPPED; + } + else + { + CanvasTextSet(&g_sStatusText, "Unsupported Audio Device "); + g_ePlayState = AUDIO_NONE; + } + WidgetPaint((tWidget *)&g_sStatusText); + } + + // + // Handle the case when the wave file is playing. + // + if(g_ePlayState == AUDIO_PLAYING) + { + // + // Handle the transmit complete event. + // + if(HWREGBITW(&g_ui32Flags, FLAGS_TX_COMPLETE)) + { + // + // Clear the transmit complete flag. + // + HWREGBITW(&g_ui32Flags, FLAGS_TX_COMPLETE) = 0; + + // + // If there is space available then fill the buffer. + // + FillAudioBuffer(); + + // + // If we run out of valid bytes then stop the playback. + // + if(g_ui32ValidBytes == 0) + { + // + // No more data or error so stop playing. + // + WaveStop(); + } + + // + // Update the real display time. + // + DisplayTime(0); + } + } + + // + // Need to periodically call the USBSoundMain() routine so that + // non-interrupt gets a chance to run. + // + USBSoundMain(); + + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + } +} + diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewd b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewp b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewp new file mode 100644 index 0000000..eccc4bc --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ewp @@ -0,0 +1,826 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\buttons.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\ff.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\usb_host_audio.c + + + $PROJ_DIR$\..\drivers\usb_sound.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + $PROJ_DIR$\..\..\..\..\utils\wavfile.c + + + diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.icf b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.icf new file mode 100644 index 0000000..446697f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_host_audio.icf - Linker configuration file for usb_host_audio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ld b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ld new file mode 100644 index 0000000..fe5586f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_host_audio.ld - Linker configuration file for usb_host_audio. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.sct b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.sct new file mode 100644 index 0000000..5ef103b --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_host_audio.sct - Linker configuration file for usb_host_audio. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvopt b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvopt new file mode 100644 index 0000000..db2729f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvopt @@ -0,0 +1,457 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_host_audio + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\buttons.c + buttons.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\ff.c + ff.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + mmc-dk-tm4c129x.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 7 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_audio.c + usb_host_audio.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\usb_sound.c + usb_sound.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + 1 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\wavfile.c + wavfile.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 15 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 16 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvproj b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvproj new file mode 100644 index 0000000..b082e1b --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio.uvproj @@ -0,0 +1,484 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_host_audio + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_host_audio + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_host_audio.bin .\rvmdk\usb_host_audio.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..;..\..\..\..\third_party;..\..\..\..\utils; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_host_audio.sct + + + --entry Reset_Handler + + + + + + + + Source + + + buttons.c + 1 + ..\drivers\buttons.c + + + ff.c + 1 + ..\..\..\..\third_party\fatfs\src\ff.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + mmc-dk-tm4c129x.c + 1 + ..\..\..\..\third_party\fatfs\port\mmc-dk-tm4c129x.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + usb_host_audio.c + 1 + .\usb_host_audio.c + + + usb_sound.c + 1 + ..\drivers\usb_sound.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + wavfile.c + 1 + ..\..\..\..\utils\wavfile.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_audio/usb_host_audio_ccs.cmd b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio_ccs.cmd new file mode 100644 index 0000000..508557d --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio/usb_host_audio_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_host_audio_ccs.cmd - CCS linker configuration file for usb_host_audio. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/usb_host_audio_in/Makefile b/boards/dk-tm4c129x/usb_host_audio_in/Makefile new file mode 100644 index 0000000..09db7fa --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/Makefile @@ -0,0 +1,95 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB host audio input example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB host audio input example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_host_audio_in.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB host audio input example. +# +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/frame.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/sound.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/touch.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/usb_host_audio_in.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/usb_sound.o +${COMPILER}/usb_host_audio_in.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_host_audio_in.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_host_audio_in.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_host_audio_in.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_host_audio_in.axf: usb_host_audio_in.ld +SCATTERgcc_usb_host_audio_in=usb_host_audio_in.ld +ENTRY_usb_host_audio_in=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsimportspec new file mode 100644 index 0000000..ec2571f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsproject b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/.cproject b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.cproject new file mode 100644 index 0000000..b590189 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.cproject @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/.project b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.project new file mode 100644 index 0000000..49209cc --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.project @@ -0,0 +1,85 @@ + + + usb_host_audio_in + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_audio_in/startup_ccs.c + + + usb_host_audio_in.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.c + + + usb_host_audio_in_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/sound.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/sound.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + drivers/usb_sound.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/usb_sound.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.bin b/boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.bin new file mode 100644 index 0000000..70ad370 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.out b/boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.out new file mode 100644 index 0000000..b092b0d Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/ccs/Debug/usb_host_audio_in.out differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_host_audio_in/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_host_audio_in/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.bin b/boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.bin new file mode 100644 index 0000000..51a9556 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.out b/boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.out new file mode 100644 index 0000000..ea12dcb Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/ewarm/Exe/usb_host_audio_in.out differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.axf b/boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.axf new file mode 100644 index 0000000..123fe2e Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.axf differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.bin b/boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.bin new file mode 100644 index 0000000..9068841 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/gcc/usb_host_audio_in.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/readme.txt b/boards/dk-tm4c129x/usb_host_audio_in/readme.txt new file mode 100644 index 0000000..76c5886 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/readme.txt @@ -0,0 +1,35 @@ +USB host audio example application using a USB audio device for input +and PWM audio to the on board speaker for output. + +This example application demonstrates streaming audio from a USB audio +device that supports recording an audio source at 48000 16 bit stereo. +The application starts recording audio from the USB audio device when +the "Record" button is pressed and stream it to the speaker on the board. +Because some audio devices require more power, you may need to use an +external 5 volt supply to provide enough power to the USB audio device. + +The application can be recompiled to run using and external USB phy to +implement a high speed host using an external USB phy. To use the external +phy the application must be built with \b USE_ULPI defined. This disables +the internal phy and the connector on the DK-TM4C129X board and enables the +connections to the external ULPI phy pins on the DK-TM4C129X board. + +------------------------------------------------------------------------------- + +Copyright (c) 2010-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.axf b/boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.axf new file mode 100644 index 0000000..0af42df Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.axf differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.bin b/boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.bin new file mode 100644 index 0000000..e676494 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_audio_in/rvmdk/usb_host_audio_in.bin differ diff --git a/boards/dk-tm4c129x/usb_host_audio_in/startup_ccs.c b/boards/dk-tm4c129x/usb_host_audio_in/startup_ccs.c new file mode 100644 index 0000000..7e2f713 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio_in/startup_ewarm.c b/boards/dk-tm4c129x/usb_host_audio_in/startup_ewarm.c new file mode 100644 index 0000000..4aa9b90 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio_in/startup_gcc.c b/boards/dk-tm4c129x/usb_host_audio_in/startup_gcc.c new file mode 100644 index 0000000..e8e3ffb --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SoundIntHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + SoundIntHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio_in/startup_rvmdk.S b/boards/dk-tm4c129x/usb_host_audio_in/startup_rvmdk.S new file mode 100644 index 0000000..17ac79f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SoundIntHandler + EXTERN USB0OTGModeIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0OTGModeIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD SoundIntHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.c b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.c new file mode 100644 index 0000000..b2ee667 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.c @@ -0,0 +1,791 @@ +//***************************************************************************** +// +// usb_host_audioin.c - Main routine for the USB host audio input example. +// +// Copyright (c) 2010-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_ints.h" +#include "inc/hw_sysctl.h" +#include "driverlib/flash.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/slider.h" +#include "grlib/listbox.h" +#include "grlib/pushbutton.h" +#include "utils/ustdlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/usb_sound.h" +#include "drivers/sound.h" +#include "drivers/touch.h" +#include "drivers/pinout.h" +#include "drivers/usb_sound.h" +#include "usblib/usblib.h" +#include "usblib/host/usbhost.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB host audio example application using a USB audio device for input +//! and PWM audio to the on board speaker for output. (usb_host_audioin)

      +//! +//! This example application demonstrates streaming audio from a USB audio +//! device that supports recording an audio source at 48000 16 bit stereo. +//! The application starts recording audio from the USB audio device when +//! the "Record" button is pressed and stream it to the speaker on the board. +//! Because some audio devices require more power, you may need to use an +//! external 5 volt supply to provide enough power to the USB audio device. +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed host using an external USB phy. To use the external +//! phy the application must be built with \b USE_ULPI defined. This disables +//! the internal phy and the connector on the DK-TM4C129X board and enables the +//! connections to the external ULPI phy pins on the DK-TM4C129X board. +// +//***************************************************************************** + +//***************************************************************************** +// +// Interrupt priority definitions. The top 3 bits of these values are +// significant with lower values indicating higher priority interrupts. +// +//***************************************************************************** +#define AUDIO_INT_PRIORITY 0x00 +#define ADC3_INT_PRIORITY 0x80 + +//***************************************************************************** +// +// Forward declarations for functions called by the widgets used in the user +// interface. +// +//***************************************************************************** +static void OnRecord(tWidget *pWidget); + +//***************************************************************************** +// +// Audio buffering definitions, these are optimized to deal with USB audio. +// +//***************************************************************************** +#define USB_TRANSFER_SIZE (192) +#define USB_BUFFERS (18) +#define USB_AUDIO_BUFFER_SIZE (USB_TRANSFER_SIZE * USB_BUFFERS) +#define PWM_AUDIO_BUFFER_SIZE (USB_AUDIO_BUFFER_SIZE / (2 * 3 * 2)) +#define AUDIO_MIN_DIFF (USB_TRANSFER_SIZE * ((USB_BUFFERS >> 1) - 1)) +#define AUDIO_NOMINAL_DIFF (USB_TRANSFER_SIZE * (USB_BUFFERS >> 1)) +#define AUDIO_MAX_DIFF (USB_TRANSFER_SIZE * ((USB_BUFFERS >> 1) + 1)) +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The USB audio buffer and it's pointers. +// +//***************************************************************************** +static uint8_t g_pui8USBAudioBuffer[USB_AUDIO_BUFFER_SIZE]; +static uint8_t *g_pui8USBWrite; +static volatile uint32_t g_ui32USBCount; + +//***************************************************************************** +// +// The PWM audio buffer and it's pointers. +// +//***************************************************************************** +static int16_t g_pi16PWMAudioBuffer[PWM_AUDIO_BUFFER_SIZE]; +static int32_t i32PWMAudioIdx; + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +static tContext g_sContext; + +//***************************************************************************** +// +// Variable status string for the application. +// +//***************************************************************************** +#define STATUS_SIZE 40 +static char g_pcStatusText[STATUS_SIZE]; + +//***************************************************************************** +// +// Holds global flags for the system. +// +//***************************************************************************** +static uint32_t g_ui32Flags; + +// +// Currently streaming audio to the USB device. +// +#define FLAGS_STREAMING 1 + +// +// New audio device present. +// +#define FLAGS_DEVICE_CONNECT 2 + +// +// New audio device present. +// +#define FLAGS_DEVICE_READY 3 + +//***************************************************************************** +// +// Widget definitions +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines for the basic screen area used by the application. +// +//***************************************************************************** +#define STATUS_HEIGHT 40 +#define BG_MIN_X 7 +#define BG_MAX_X (320 - 8) +#define BG_MIN_Y 24 +#define BG_MAX_Y (240 - 8) +#define BUTTON_HEIGHT (STATUS_HEIGHT - 8) + +//***************************************************************************** +// +// The list box used to display directory contents. +// +//***************************************************************************** +tCanvasWidget g_sStatusPanel; + +// +// Status text area. +// +Canvas(g_sStatusText, &g_sStatusPanel, 0, 0, &g_sKentec320x240x16_SSD2119, + BG_MIN_X + 112, BG_MAX_Y - STATUS_HEIGHT + 4, 189, BUTTON_HEIGHT, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_OPAQUE, ClrLightGrey, ClrDarkGray, ClrBlack, + g_psFontCmss16, "", 0, 0); + +// +// Record button. +// +RectangularButton(g_sRecord, &g_sStatusPanel, &g_sStatusText, 0, + &g_sKentec320x240x16_SSD2119, BG_MIN_X + 4, + BG_MAX_Y - STATUS_HEIGHT + 4, 50, BUTTON_HEIGHT, + PB_STYLE_FILL | PB_STYLE_TEXT | + PB_STYLE_RELEASE_NOTIFY, ClrLightGrey, ClrDarkGray, 0, + ClrBlack, g_psFontCmss16, "Record", 0, 0, 0 ,0 , OnRecord); + +// +// Background of the status area behind the buttons. +// +Canvas(g_sStatusPanel, WIDGET_ROOT, 0, &g_sRecord, + &g_sKentec320x240x16_SSD2119, BG_MIN_X, BG_MAX_Y - STATUS_HEIGHT, + BG_MAX_X - BG_MIN_X, STATUS_HEIGHT, + CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT_RIGHT | + CANVAS_STYLE_TEXT_TOP, ClrGray, ClrWhite, ClrBlack, 0, + 0, 0, 0); + +//***************************************************************************** +// +// The PWM audio callback from the sound driver for the dk-tm4c129x board. +// +//***************************************************************************** +void +PWMAudioCallback(uint32_t ui32Half) +{ + int32_t i32Current, i32PeriodAdj; + + // + // Initial sound period adjustment is 0. + // + i32PeriodAdj = 0; + + // + // Calculate the number of buffers that we are from ideal. + // + i32Current = ((int32_t)g_pui8USBAudioBuffer - (int32_t)g_pui8USBWrite + + (USB_AUDIO_BUFFER_SIZE / 2)) / (int32_t)(USB_TRANSFER_SIZE); + + // + // Make sample rate adjustments based on being in the top half of the + // ping-pong buffer. + // + if(ui32Half) + { + // + // USB is faster than the PWM audio. + // + if(g_ui32USBCount > (USB_BUFFERS / 2)) + { + // + // PWM audio is running slow so speed it up and handle the sign + // properly. + // + if(i32Current < 0) + { + i32PeriodAdj = i32Current; + } + else + { + i32PeriodAdj = -i32Current; + } + } + else if(g_ui32USBCount < (USB_BUFFERS / 2)) + { + // + // PWM audio is running fast so slow it down and handle the sign + // properly. + // + if(i32Current < 0) + { + i32PeriodAdj = -i32Current; + } + else + { + i32PeriodAdj = i32Current; + } + } + } + else + { + // + // The measurements are reversed when in the bottom half. + // + i32Current = -i32Current; + + // + // USB is faster than the PWM audio. + // + if(g_ui32USBCount > (USB_BUFFERS / 2)) + { + // + // PWM audio is running slow so speed it up and handle the sign + // properly. + // + if(i32Current < 0) + { + i32PeriodAdj = i32Current; + } + else + { + i32PeriodAdj = -i32Current; + } + } + else if(g_ui32USBCount < (USB_BUFFERS / 2)) + { + // + // PWM audio is running fast so slow it down and handle the sign + // properly. + // + if(i32Current < 0) + { + i32PeriodAdj = -i32Current; + } + else + { + i32PeriodAdj = i32Current; + } + } + } + + // + // Was there an adjustment to make? + // + if(i32PeriodAdj != 0) + { + SoundPeriodAdjust(i32PeriodAdj); + } + + // + // Reset the USB audio buffer count. + // + g_ui32USBCount = 0; +} + + +//***************************************************************************** +// +// Schedules new USB Isochronous input from the USB audio device when a +// previous transfer has completed. +// +//***************************************************************************** +static void +USBAudioInCallback(void *pvBuffer, uint32_t ui32Event, uint32_t ui32Value) +{ + int32_t i32Idx; + int16_t *pi16Buffer; + + // + // Increase the number of USB audio buffers received. + // + g_ui32USBCount++; + + // + // Create a 16-bit pointer to the data. + // + pi16Buffer = (int16_t *)g_pui8USBWrite; + + // + // If a buffer has been played then schedule a new one to play. + // + if((ui32Event == USB_EVENT_RX_AVAILABLE) && + (HWREGBITW(&g_ui32Flags, FLAGS_STREAMING))) + { + // + // Increment the read pointer. + // + g_pui8USBWrite += USB_TRANSFER_SIZE; + + // + // Wrap the read pointer if necessary. + // + if(g_pui8USBWrite >= (g_pui8USBAudioBuffer + USB_AUDIO_BUFFER_SIZE)) + { + g_pui8USBWrite = g_pui8USBAudioBuffer; + } + + // + // Schedule a new USB audio buffer to be transmitted to the USB + // audio device. + // + USBSoundBufferIn(g_pui8USBWrite, USB_TRANSFER_SIZE, USBAudioInCallback); + + // + // This copy throws away 2 out of 3 samples to match the basic + // sample rate difference of 48kHz versus 16kHz. + // + for(i32Idx = 0; i32Idx < (ui32Value >> 1); i32Idx+=6) + { + // + // Basic stereo mix to mono. + // + g_pi16PWMAudioBuffer[i32PWMAudioIdx] = pi16Buffer[i32Idx] + + pi16Buffer[i32Idx + 1]; + + i32PWMAudioIdx++; + + if(i32PWMAudioIdx >= PWM_AUDIO_BUFFER_SIZE) + { + i32PWMAudioIdx = 0; + } + } + } +} + +//***************************************************************************** +// +// This function starts up the audio streaming from the USB audio device. The +// PWM audio is started later when enough audio has been received to start +// transferring buffers to the PWM audio interface. +// +//***************************************************************************** +static void +StartStreaming(void) +{ + int i; + + // + // Change the text on the button to Stop. + // + PushButtonTextSet(&g_sRecord, "Stop"); + WidgetPaint((tWidget *)&g_sRecord); + + // + // Zero out the PWM audio buffer. + // + for(i=0; i< PWM_AUDIO_BUFFER_SIZE; i++) + { + g_pi16PWMAudioBuffer[i] = 0; + } + + // + // Initialize the USB audio write pointer to the middle of the buffer. + // + g_pui8USBWrite = g_pui8USBAudioBuffer + (USB_AUDIO_BUFFER_SIZE / 2); + + // + // Initialize the fill position of the PWM audio buffer to the middle of + // its buffer. + // + i32PWMAudioIdx = PWM_AUDIO_BUFFER_SIZE/2; + + // + // Initialize the USB audio count. + // + g_ui32USBCount = 0; + + // + // Initialize the PWM audio and start playing. + // + SoundInit(g_ui32SysClock); + SoundStart((int16_t *)g_pi16PWMAudioBuffer, PWM_AUDIO_BUFFER_SIZE, 16000, + PWMAudioCallback); + + // + // Request and audio buffer from the USB device. + // + USBSoundBufferIn(g_pui8USBWrite, USB_TRANSFER_SIZE, USBAudioInCallback); +} + +//***************************************************************************** +// +// Stops audio streaming for the application. +// +//***************************************************************************** +static void +StopAudio(void) +{ + int32_t i32Idx; + uint32_t *pui32Buffer; + + // + // Stop playing audio. + // + HWREGBITW(&g_ui32Flags, FLAGS_STREAMING) = 0; + + // + // Do 32-bit accesses to clear out the buffer. + // + pui32Buffer = (uint32_t *)g_pui8USBAudioBuffer; + + // + // Zero out the buffer. + // + for(i32Idx = 0; i32Idx < (USB_AUDIO_BUFFER_SIZE >> 2); i32Idx++) + { + pui32Buffer[i32Idx] = 0; + } + + // + // Initialize the read and write pointers. + // + g_pui8USBWrite = g_pui8USBAudioBuffer + (USB_AUDIO_BUFFER_SIZE / 2); + + // + // Change the text on the button to Stop. + // + PushButtonTextSet(&g_sRecord, "Record"); + WidgetPaint((tWidget *)&g_sRecord); + + SoundStop(); +} + +//***************************************************************************** +// +// The "Play/Stop" button widget call back function. +// +// This function is called whenever someone presses the "Play/Stop" button. +// +//***************************************************************************** +static void +OnRecord(tWidget *pWidget) +{ + // + // Nothing to do if not ready yet. + // + if(HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_READY)) + { + // + // Determine if this was a Play or Stop command. + // + if(HWREGBITW(&g_ui32Flags, FLAGS_STREAMING)) + { + // + // If already playing then this was a press to stop play back. + // + StopAudio(); + } + else + { + // + // Indicate that audio streaming should start. + // + HWREGBITW(&g_ui32Flags, FLAGS_STREAMING) = 1; + StartStreaming(); + } + } +} + +//***************************************************************************** +// +// This function handled global level events for the USB host audio. This +// function was passed into the USBSoundInit() function. +// +//***************************************************************************** +static void +AudioEvent(uint32_t ui32Event, uint32_t ui32Param) +{ + switch(ui32Event) + { + case SOUND_EVENT_READY: + { + // + // Flag that a new audio device is present. + // + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT) = 1; + + break; + } + case SOUND_EVENT_DISCONNECT: + { + // + // Device is no longer present. + // + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_READY) = 0; + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT) = 0; + + // + // Stop streaming audio. + // + StopAudio(); + + // + // Change the text to reflect the change. + // + CanvasTextSet(&g_sStatusText, "No Device"); + WidgetPaint((tWidget *)&g_sStatusText); + + break; + } + case SOUND_EVENT_UNKNOWN_DEV: + { + if(ui32Param == 1) + { + // + // Unknown device connected. + // + CanvasTextSet(&g_sStatusText, "Unknown Device"); + WidgetPaint((tWidget *)&g_sStatusText); + } + else + { + // + // Unknown device disconnected. + // + CanvasTextSet(&g_sStatusText, "No Device"); + WidgetPaint((tWidget *)&g_sStatusText); + } + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The program main function. It performs initialization, then handles wav +// file playback. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Temp, ui32PLLRate; + + // + // Set the system clock to run at 120MHz from the PLL. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Set the device pinout appropriately for this board. + // + PinoutSet(); + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; + + // + // Set the interrupt priorities to give USB and timer higher priority + // than the ADC. While playing the touch screen should have lower priority + // to reduce audio drop out. + // + ROM_IntPriorityGroupingSet(4); + ROM_IntPrioritySet(INT_USB0, AUDIO_INT_PRIORITY); + ROM_IntPrioritySet(INT_TIMER5A, AUDIO_INT_PRIORITY); + ROM_IntPrioritySet(INT_ADC0SS3, ADC3_INT_PRIORITY); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-host-audio-in"); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(g_ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Issue the initial paint request to the widgets then immediately call + // the widget manager to process the paint message. This ensures that the + // display is drawn as quickly as possible and saves the delay we would + // otherwise experience if we processed the paint message after mounting + // and reading the SD card. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sStatusPanel); + WidgetPaint(WIDGET_ROOT); + WidgetMessageQueueProcess(); + + // + // Not playing anything right now. + // + g_ui32Flags = 0; + + // + // Tell the USB library the CPU clock and the PLL frequency. This is a + // new requirement for TM4C129 devices. + // + USBHCDFeatureSet(0, USBLIB_FEATURE_CPUCLK, &g_ui32SysClock); + USBHCDFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Configure the USB host audio. + // + USBSoundInit(0, AudioEvent); + + // + // Initialize audio streaming to stopped state. + // + StopAudio(); + SoundInit(g_ui32SysClock); + SoundVolumeSet(255); + + while(1) + { + // + // On connect change the device state to ready. + // + if(HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT)) + { + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_CONNECT) = 0; + + // + // Attempt to set the audio format to 48000 16 bit stereo. + // + if(USBSoundInputFormatSet(48000, 16, 2) == 0) + { + ui32Temp = 48000; + } + else + { + ui32Temp = 0; + } + + // + // Try to set the output format to match the input and fail if it + // cannot be set. + // + if((ui32Temp != 0) && + (USBSoundOutputFormatSet(ui32Temp, 16, 2) != 0)) + { + ui32Temp = 0; + } + + // + // If the audio device was support put the sample rate in the + // status line. + // + if(ui32Temp != 0) + { + // + // Print the time string in the format mm.ss/mm.ss + // + usprintf(g_pcStatusText, "Ready %dHz 16 bit Stereo", + ui32Temp); + + // + // USB device is ready for operation. + // + HWREGBITW(&g_ui32Flags, FLAGS_DEVICE_READY) = 1; + } + else + { + strcpy(g_pcStatusText, "Unsupported Audio Device"); + } + + // + // Update the status line. + // + CanvasTextSet(&g_sStatusText, g_pcStatusText); + WidgetPaint((tWidget *)&g_sStatusText); + } + + // + // Allow the USB non-interrupt code to run. + // + USBSoundMain(); + + // + // Process any messages in the widget message queue. + // + WidgetMessageQueueProcess(); + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewd b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewp b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewp new file mode 100644 index 0000000..fea56aa --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ewp @@ -0,0 +1,813 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\..\drivers\sound.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\usb_host_audio_in.c + + + $PROJ_DIR$\..\drivers\usb_sound.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.icf b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.icf new file mode 100644 index 0000000..9feacdf --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_host_audio_in.icf - Linker configuration file for usb_host_audio_in. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ld b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ld new file mode 100644 index 0000000..e7ea443 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_host_audio_in.ld - Linker configuration file for usb_host_audio_in. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.sct b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.sct new file mode 100644 index 0000000..9686268 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_host_audio_in.sct - Linker configuration file for usb_host_audio_in. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvopt b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvopt new file mode 100644 index 0000000..43459c7 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvopt @@ -0,0 +1,415 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_host_audio_in + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\sound.c + sound.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_audio_in.c + usb_host_audio_in.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\usb_sound.c + usb_sound.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 13 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvproj b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvproj new file mode 100644 index 0000000..36e60c8 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in.uvproj @@ -0,0 +1,469 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_host_audio_in + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_host_audio_in + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_host_audio_in.bin .\rvmdk\usb_host_audio_in.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_host_audio_in.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + sound.c + 1 + ..\drivers\sound.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + usb_host_audio_in.c + 1 + .\usb_host_audio_in.c + + + usb_sound.c + 1 + ..\drivers\usb_sound.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in_ccs.cmd b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in_ccs.cmd new file mode 100644 index 0000000..f5279da --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_audio_in/usb_host_audio_in_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_host_audio_in_ccs.cmd - CCS linker configuration file for usb_host_audio_in. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/usb_host_hub/Makefile b/boards/dk-tm4c129x/usb_host_hub/Makefile new file mode 100644 index 0000000..64416dc --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/Makefile @@ -0,0 +1,100 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB host Hub keyboard/msc example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../third_party/fatfs/src +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party + +# +# The default rule, which causes the USB host Hub keyboard/msc example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_host_hub.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB host Hub keyboard/msc example. +# +${COMPILER}/usb_host_hub.axf: ${COMPILER}/cmdline.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/fat_usbmsc.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/ff.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/frame.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/usb_host_hub.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/usb_host_keyboard.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/usb_host_msc.o +${COMPILER}/usb_host_hub.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_host_hub.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_host_hub.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_host_hub.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_host_hub.axf: usb_host_hub.ld +SCATTERgcc_usb_host_hub=usb_host_hub.ld +ENTRY_usb_host_hub=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_host_hub/ccs/.ccsimportspec new file mode 100644 index 0000000..11379e2 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/.ccsimportspec @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/.ccsproject b/boards/dk-tm4c129x/usb_host_hub/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/.cproject b/boards/dk-tm4c129x/usb_host_hub/ccs/.cproject new file mode 100644 index 0000000..fee8fd0 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/.project b/boards/dk-tm4c129x/usb_host_hub/ccs/.project new file mode 100644 index 0000000..395cab9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/.project @@ -0,0 +1,95 @@ + + + usb_host_hub + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_hub/startup_ccs.c + + + usb_host_hub.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.c + + + usb_host_hub_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_hub/usb_host_hub_ccs.cmd + + + usb_host_keyboard.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_hub/usb_host_keyboard.c + + + usb_host_msc.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_hub/usb_host_msc.c + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/cmdline.c + 1 + SW_ROOT/utils/cmdline.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fatfs/port/fat_usbmsc.c + 1 + SW_ROOT/third_party/fatfs/port/fat_usbmsc.c + + + third_party/fatfs/src/ff.c + 1 + SW_ROOT/third_party/fatfs/src/ff.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_host_hub/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.bin b/boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.bin new file mode 100644 index 0000000..e36089b Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.bin differ diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.out b/boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.out new file mode 100644 index 0000000..9330c59 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/ccs/Debug/usb_host_hub.out differ diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_host_hub/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_host_hub/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_host_hub/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.bin b/boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.bin new file mode 100644 index 0000000..c89bd8f Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.bin differ diff --git a/boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.out b/boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.out new file mode 100644 index 0000000..155af65 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/ewarm/Exe/usb_host_hub.out differ diff --git a/boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.axf b/boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.axf new file mode 100644 index 0000000..97e8e4b Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.axf differ diff --git a/boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.bin b/boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.bin new file mode 100644 index 0000000..19ca975 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/gcc/usb_host_hub.bin differ diff --git a/boards/dk-tm4c129x/usb_host_hub/readme.txt b/boards/dk-tm4c129x/usb_host_hub/readme.txt new file mode 100644 index 0000000..bc99e7a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/readme.txt @@ -0,0 +1,44 @@ +USB HUB Host example(usb_host_hub) + +This example application demonstrates how to support a USB keyboard +and a USB mass storage with a USB Hub. The application emulates a very +simple console with the USB keyboard used for input. The application +requires that the mass storage device is also inserted or the console will +generate errors when accessing the file system. The console supports the +following commands: "ls", "cat", "pwd", "cd" and "help". The "ls" command +will provide a listing of the files in the current directory. The "cat" +command can be used to print the contents of a file to the screen. The +"pwd" command displays the current working directory. The "cd" command +allows the application to move to a new directory. The cd command is +simplified and only supports "cd .." but not directory changes like +"cd ../somedir". The "help" command has other aliases that are displayed +when the "help" command is issued. + +Any keyboard that supports the USB HID BIOS protocol should work with this +demo application. + +The application can be recompiled to run using and external USB phy to +implement a high speed host using an external USB phy. To use the external +phy the application must be built with \b USE_ULPI defined. This disables +the internal phy and the connector on the DK-TM4C129X board and enables the +connections to the external ULPI phy pins on the DK-TM4C129X board. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.axf b/boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.axf new file mode 100644 index 0000000..a0a0f86 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.axf differ diff --git a/boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.bin b/boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.bin new file mode 100644 index 0000000..a8eab88 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_hub/rvmdk/usb_host_hub.bin differ diff --git a/boards/dk-tm4c129x/usb_host_hub/startup_ccs.c b/boards/dk-tm4c129x/usb_host_hub/startup_ccs.c new file mode 100644 index 0000000..b58a80a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_hub/startup_ewarm.c b/boards/dk-tm4c129x/usb_host_hub/startup_ewarm.c new file mode 100644 index 0000000..c7be392 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_hub/startup_gcc.c b/boards/dk-tm4c129x/usb_host_hub/startup_gcc.c new file mode 100644 index 0000000..401f526 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_hub/startup_rvmdk.S b/boards/dk-tm4c129x/usb_host_hub/startup_rvmdk.S new file mode 100644 index 0000000..812126e --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN USB0OTGModeIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0OTGModeIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.c b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.c new file mode 100644 index 0000000..6753cbb --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.c @@ -0,0 +1,1133 @@ +//***************************************************************************** +// +// usb_host_hub.c - An example using that supports a USB Hub, USB keyboard, and +// a USB mass storage device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhhid.h" +#include "usblib/host/usbhhub.h" +#include "usblib/host/usbhhidkeyboard.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "third_party/fatfs/src/ff.h" +#include "utils/cmdline.h" +#include "utils/ustdlib.h" +#include "usb_host_hub.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB HUB Host example(usb_host_hub)

      +//! +//! This example application demonstrates how to support a USB keyboard +//! and a USB mass storage with a USB Hub. The application emulates a very +//! simple console with the USB keyboard used for input. The application +//! requires that the mass storage device is also inserted or the console will +//! generate errors when accessing the file system. The console supports the +//! following commands: "ls", "cat", "pwd", "cd" and "help". The "ls" command +//! will provide a listing of the files in the current directory. The "cat" +//! command can be used to print the contents of a file to the screen. The +//! "pwd" command displays the current working directory. The "cd" command +//! allows the application to move to a new directory. The cd command is +//! simplified and only supports "cd .." but not directory changes like +//! "cd ../somedir". The "help" command has other aliases that are displayed +//! when the "help" command is issued. +//! +//! Any keyboard that supports the USB HID BIOS protocol should work with this +//! demo application. +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed host using an external USB phy. To use the external +//! phy the application must be built with \b USE_ULPI defined. This disables +//! the internal phy and the connector on the DK-TM4C129X board and enables the +//! connections to the external ULPI phy pins on the DK-TM4C129X board. +// +//***************************************************************************** + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pui8HCDPool[HCD_MEMORY_SIZE * MAX_USB_DEVICES]; + +//***************************************************************************** +// +// Declare the USB Events driver interface. +// +//***************************************************************************** +DECLARE_EVENT_DRIVER(g_sUSBEventDriver, 0, 0, USBHCDEvents); + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the Keyboard class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHostMSCClassDriver, + &g_sUSBHIDClassDriver, + &g_sUSBHubClassDriver, + &g_sUSBEventDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +static const uint32_t g_ui32NumHostClassDrivers = + sizeof(g_ppHostClassDrivers) / sizeof(tUSBHostClassDriver *); + +//***************************************************************************** +// +// The number of SysTick ticks per second. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 +#define MS_PER_SYSTICK (1000 / TICKS_PER_SECOND) + +//***************************************************************************** +// +// Graphics context used to show text on the CSTN display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// The global flags for this application. The only flag defined is the +// FLAG_CMD_READY which indicates that a command has been entered and is ready +// to be processed. +// +//***************************************************************************** +static uint32_t g_ui32Flags; + +#define FLAG_CMD_READY 0x00000001 + +//***************************************************************************** +// +// These defines are used to define the screen constraints to the application. +// +//***************************************************************************** +#define DISPLAY_BANNER_HEIGHT 18 +#define DISPLAY_TEXT_BORDER 8 +#define DISPLAY_TEXT_BORDER_H 8 +#define BUTTON_WIDTH ((320 - (2 * DISPLAY_TEXT_BORDER_H)) / \ + NUM_HUB_STATUS) +#define BUTTON_HEIGHT 18 + +//***************************************************************************** +// +// This is the number of characters that will fit on a line in the text area. +// +//***************************************************************************** +uint32_t g_ui32CharsPerLine; + +//***************************************************************************** +// +// This is the number of lines that will fit in the text area. +// +//***************************************************************************** +uint32_t g_ui32LinesPerScreen; + +//***************************************************************************** +// +// This is the current line for printing in the text area. +// +//***************************************************************************** +uint32_t g_ui32Line; + +//***************************************************************************** +// +// This is the current column for printing in the text area. +// +//***************************************************************************** +uint32_t g_ui32Column; + +//***************************************************************************** +// +// File system variables. +// +//***************************************************************************** +const char * StringFromFresult(FRESULT fresult); + +//***************************************************************************** +// +// Defines the size of the buffer that holds the command line. +// +//***************************************************************************** +#define CMD_BUF_SIZE 64 + +//***************************************************************************** +// +// Define the maximum number of lines and columns in the command windows. +// +//***************************************************************************** +#define MAX_LINES 23 +#define MAX_COLUMNS 60 + +//***************************************************************************** +// +// The buffer that holds the command line. +// +//***************************************************************************** +static char g_pcCmdBuf[CMD_BUF_SIZE]; + +//***************************************************************************** +// +// The variables that are used to allow the screen to scroll. +// +//***************************************************************************** +static uint32_t g_ui32CmdIdx; +static char g_pcLines[MAX_LINES * MAX_COLUMNS]; +static uint32_t g_ui32CurrentLine; + +//***************************************************************************** +// +// Status bar boxes for hub ports. +// +//***************************************************************************** +#define NUM_HUB_STATUS 4 +struct +{ + // + // Holds if there is a device connected to this port. + // + bool bConnected; + + // + // The instance data for the device if bConnected is true. + // + uint32_t ui32Instance; +} +g_psHubStatus[NUM_HUB_STATUS]; + +//***************************************************************************** +// +// Print a string to the screen and save it to the screen buffer. +// +//***************************************************************************** +void +WriteString(const char *pcString) +{ + uint32_t ui32Size, ui32StrSize; + char *pcCurLine; + int32_t i32Idx; + + ui32StrSize = ustrlen(pcString); + + // + // Check if the string requires scrolling the text in order to print. + // + if((g_ui32Line >= MAX_LINES) && (g_ui32Column == 0)) + { + // + // Start redrawing at line 0. + // + g_ui32Line = 0; + + // + // Print lines from the current position down first. + // + for(i32Idx = g_ui32CurrentLine + 1; i32Idx < MAX_LINES; i32Idx++) + { + GrStringDraw(&g_sContext, g_pcLines + (MAX_COLUMNS * i32Idx), + ustrlen(g_pcLines + (MAX_COLUMNS * i32Idx)), + DISPLAY_TEXT_BORDER_H, + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + + g_ui32Line++; + } + + // + // If not already at the top then print the lines starting at the + // top of the buffer. + // + if(g_ui32CurrentLine != 0) + { + for(i32Idx = 0; i32Idx < g_ui32CurrentLine; i32Idx++) + { + GrStringDraw(&g_sContext, g_pcLines + (MAX_COLUMNS * i32Idx), + ustrlen(g_pcLines + (MAX_COLUMNS * i32Idx)), + DISPLAY_TEXT_BORDER_H, + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), + 1); + + g_ui32Line++; + } + } + } + + // + // Save the current line pointer to use in references below. + // + pcCurLine = g_pcLines + (MAX_COLUMNS * g_ui32CurrentLine); + + if(g_ui32Column + ui32StrSize >= MAX_COLUMNS - 1) + { + ui32Size = MAX_COLUMNS - g_ui32Column - 1; + } + else + { + ui32Size = ui32StrSize; + } + + // + // Handle the case where the string has a new line at the end. + // + if(pcString[ui32StrSize-1] == '\n') + { + // + // Make sure that this is not a single new line. + // + if(ui32Size > 0 ) + { + // + // Copy the string into the screen buffer. + // + ustrncpy(pcCurLine + g_ui32Column, pcString, ui32Size - 1); + } + + // + // If this is the start of a new line then clear out the rest of the + // line by writing spaces to the end of the line. + // + if(g_ui32Column == 0) + { + // + // Clear out the string with spaces to overwrite any existing + // characters with spaces. + // + for(i32Idx = ui32Size - 1; i32Idx < MAX_COLUMNS; i32Idx++) + { + pcCurLine[i32Idx] = ' '; + } + } + + // + // Null terminate the string. + // + pcCurLine[g_ui32Column + MAX_COLUMNS - 1] = 0; + + // + // Draw the new string. + // + GrStringDraw(&g_sContext, pcCurLine + g_ui32Column, ui32Size - 1, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + + // + // Increment the line values and reset the column to 0. + // + g_ui32Line++; + g_ui32CurrentLine++; + + if(g_ui32CurrentLine >= MAX_LINES) + { + g_ui32CurrentLine = 0; + } + g_ui32Column = 0; + } + else + { + // + // Copy the string into the screen buffer. + // + ustrncpy(pcCurLine + g_ui32Column, pcString, ui32Size); + + // + // See if this was the first string draw on this line. + // + if(g_ui32Column == 0) + { + // + // Pad the rest of the string with spaces to overwrite any existing + // characters with spaces. + // + for(i32Idx = ui32Size; i32Idx < MAX_COLUMNS - 1; i32Idx++) + { + pcCurLine[i32Idx] = ' '; + } + + // + // Draw the new string. + // + GrStringDraw(&g_sContext, + pcCurLine + g_ui32Column, MAX_COLUMNS - 1, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + } + else + { + // + // Draw the new string. + // + GrStringDraw(&g_sContext, pcCurLine + g_ui32Column, + g_ui32Column + ui32Size, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + } + + // + // Update the current column. + // + g_ui32Column += ui32Size; + } +} + +//***************************************************************************** +// +// This function prints the character out the screen and into the command +// buffer. +// +// ucChar is the character to print out. +// +// This function handles all of the detail of printing a character to the +// screen and into the command line buffer. +// +// No return value. +// +//***************************************************************************** +void +PrintChar(const char cChar) +{ + int32_t i32Char; + char *pcCurLine; + + GrContextForegroundSet(&g_sContext, ClrWhite); + + pcCurLine = g_pcLines + (MAX_COLUMNS * g_ui32CurrentLine); + + // + // Allow new lines to cause the column to go back to zero. + // + if(cChar != '\n') + { + // + // Handle when receiving a backspace character. + // + if(cChar != ASCII_BACKSPACE) + { + // + // This is not a backspace so print the character to the screen. + // + GrStringDraw(&g_sContext, &cChar, 1, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + + pcCurLine[g_ui32Column] = cChar; + } + else + { + // + // We got a backspace. If we are at the top left of the screen, + // return since we don't need to do anything. + // + if(g_ui32Column || g_ui32Line) + { + // + // Adjust the cursor position to erase the last character. + // + if(g_ui32Column > 2) + { + g_ui32Column--; + g_ui32CmdIdx--; + } + + // + // Print a space at this position then return without fixing up + // the cursor again. + // + GrStringDraw(&g_sContext, " ", 1, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32Line * GrFontHeightGet(g_psFontFixed6x8)), + true); + + pcCurLine[g_ui32Column] = ' '; + } + return; + } + } + else + { + for(i32Char = g_ui32Column; i32Char < MAX_COLUMNS - 1; i32Char++) + { + pcCurLine[i32Char] = ' '; + } + + // + // Null terminate the string when enter is pressed. + // + pcCurLine[MAX_COLUMNS - 1] = 0; + + g_ui32CurrentLine++; + if(g_ui32CurrentLine >= MAX_LINES) + { + g_ui32CurrentLine = 0; + } + + + // + // This will allow the code below to properly handle the new line. + // + g_ui32Column = g_ui32CharsPerLine; + + g_ui32Flags |= FLAG_CMD_READY; + + g_pcCmdBuf[g_ui32CmdIdx++] = ' '; + } + + // + // Update the text row and column that the next character will use. + // + if(g_ui32Column < g_ui32CharsPerLine) + { + // + // No line wrap yet so move one column over. + // + g_ui32Column++; + } + else + { + // + // Line wrapped so go back to the first column and update the line. + // + g_ui32Column = 0; + g_ui32Line++; + + // + // The line has gone past the end so go back to the first line. + // + if(g_ui32Line >= g_ui32LinesPerScreen) + { + g_ui32Line = g_ui32LinesPerScreen - 1; + } + } + + // + // Save the new character in the buffer. + // + g_pcCmdBuf[g_ui32CmdIdx++] = cChar; +} + +//***************************************************************************** +// +// This function implements the "help" command. It prints a simple list +// of the available commands with a brief description. +// +//***************************************************************************** +int +Cmd_help(int argc, char *argv[]) +{ + tCmdLineEntry *psEntry; + + // + // Print some header text. + // + WriteString("Available commands\n"); + WriteString("------------------\n"); + + // + // Point at the beginning of the command table. + // + psEntry = &g_psCmdTable[0]; + + // + // Enter a loop to read each entry from the command table. The + // end of the table has been reached when the command name is NULL. + // + while(psEntry->pcCmd) + { + // + // Print the command name and the brief description. + // + WriteString(psEntry->pcCmd); + WriteString(psEntry->pcHelp); + WriteString("\n"); + + // + // Advance to the next entry in the table. + // + psEntry++; + } + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This is the table that holds the command names, implementing functions, +// and brief description. +// +//***************************************************************************** +tCmdLineEntry g_psCmdTable[] = +{ + { "help", Cmd_help, " : Display list of commands" }, + { "h", Cmd_help, " : alias for help" }, + { "?", Cmd_help, " : alias for help" }, + { "ls", Cmd_ls, " : Display list of files" }, + { "chdir", Cmd_cd, ": Change directory" }, + { "cd", Cmd_cd, " : alias for chdir" }, + { "pwd", Cmd_pwd, " : Show current working directory" }, + { "cat", Cmd_cat, " : Show contents of a text file" }, + { 0, 0, 0 } +}; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Update one of the status boxes at the bottom of the screen. +// +//***************************************************************************** +static void +UpdateStatusBox(tRectangle *psRect, const char *pcString, bool bActive) +{ + uint32_t ui32TextColor; + + // + // Change the status box to green for active devices. + // + if(bActive) + { + GrContextForegroundSet(&g_sContext, ClrOrange); + ui32TextColor = ClrBlack; + } + else + { + GrContextForegroundSet(&g_sContext, ClrBlack); + ui32TextColor = ClrWhite; + } + + // + // Draw the background box. + // + GrRectFill(&g_sContext, psRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Draw the box border. + // + GrRectDraw(&g_sContext, psRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ui32TextColor); + + // + // Unknown device is currently connected. + // + GrStringDrawCentered(&g_sContext, pcString, -1, + psRect->i16XMin + (BUTTON_WIDTH / 2), + psRect->i16YMin + 8, false); + +} + +//***************************************************************************** +// +// This function updates the status area of the screen. It uses the current +// state of the application to print the status bar. +// +//***************************************************************************** +void +UpdateStatus(int32_t i32Port) +{ + tRectangle sRect; + uint8_t ui8DevClass, ui8DevProtocol; + + // + // Calculate the box size based on the lPort value to update one of the + // status boxes. The first and last boxes will draw slightly off screen + // to make the status area have no borders on the sides and bottom. + // + sRect.i16XMin = DISPLAY_TEXT_BORDER_H + (BUTTON_WIDTH * i32Port); + sRect.i16XMax = sRect.i16XMin + BUTTON_WIDTH; + sRect.i16YMin = 240 - 10 - BUTTON_HEIGHT; + sRect.i16YMax = sRect.i16YMin + BUTTON_HEIGHT; + + // + // Slightly adjust the first box to draw it off screen properly. + // + if(i32Port == (NUM_HUB_STATUS - 1)) + { + sRect.i16XMax -= 2; + } + + // + // Put the application name in the middle of the banner. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + if(g_psHubStatus[i32Port].bConnected) + { + ui8DevClass = USBHCDDevClass(g_psHubStatus[i32Port].ui32Instance, 0); + ui8DevProtocol = USBHCDDevProtocol( + g_psHubStatus[i32Port].ui32Instance, 0); + + if(ui8DevClass == USB_CLASS_HID) + { + if(ui8DevProtocol == USB_HID_PROTOCOL_MOUSE) + { + // + // Mouse is currently connected. + // + UpdateStatusBox(&sRect, "Mouse", true); + } + else if(ui8DevProtocol == USB_HID_PROTOCOL_KEYB) + { + // + // Keyboard is currently connected. + // + UpdateStatusBox(&sRect, "Keyboard", true); + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&sRect, "Unknown", true); + } + } + else if(ui8DevClass == USB_CLASS_MASS_STORAGE) + { + // + // MSC device is currently connected. + // + UpdateStatusBox(&sRect, "Mass Storage", true); + } + else if(ui8DevClass == USB_CLASS_HUB) + { + // + // MSC device is currently connected. + // + UpdateStatusBox(&sRect, "Hub", true); + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&sRect, "Unknown", true); + } + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&sRect, "No Device", false); + } +} + +//***************************************************************************** +// +// This is the generic callback from host stack. +// +// pvData is actually a pointer to a tEventInfo structure. +// +// This function will be called to inform the application when a USB event has +// occurred that is outside those related to the keyboard device. At this +// point this is used to detect unsupported devices being inserted and removed. +// It is also used to inform the application when a power fault has occurred. +// This function is required when the g_USBGenericEventDriver is included in +// the host controller driver array that is passed in to the +// USBHCDRegisterDrivers() function. +// +//***************************************************************************** +void +USBHCDEvents(void *pvData) +{ + tEventInfo *pEventInfo; + uint8_t ui8Port; + + // + // Cast this pointer to its actual type. + // + pEventInfo = (tEventInfo *)pvData; + + // + // Get the hub port number that the device is connected to. + // + ui8Port = USBHCDDevHubPort(pEventInfo->ui32Instance); + + switch(pEventInfo->ui32Event) + { + case USB_EVENT_UNKNOWN_CONNECTED: + case USB_EVENT_CONNECTED: + { + // + // If this is the hub then ignore this connection. + // + if(USBHCDDevClass(pEventInfo->ui32Instance, 0) == USB_CLASS_HUB) + { + break; + } + + // + // If this is not a direct connection, then the hub is on + // port 0 so the index should be moved down from 1-4 to 0-3. + // + if(ui8Port > 0) + { + ui8Port--; + } + + // + // Save the device instance data. + // + g_psHubStatus[ui8Port].ui32Instance = pEventInfo->ui32Instance; + g_psHubStatus[ui8Port].bConnected = true; + + // + // Update the port status for the new device. + // + UpdateStatus(ui8Port); + + break; + } + // + // A device has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // If this is not a direct connection, then the hub is on + // port 0 so the index should be moved down from 1-4 to 0-3. + // + if(ui8Port > 0) + { + ui8Port--; + } + + // + // Device is no longer connected. + // + g_psHubStatus[ui8Port].bConnected = false; + + // + // Update the port status for the new device. + // + UpdateStatus(ui8Port); + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This is the callback from the USB HUB mouse handler. +// +// pvCBData is ignored by this function. +// ui32Event is one of the valid events for a mouse device. +// ui32MsgParam is defined by the event that occurs. +// pvMsgData is a pointer to data that is defined by the event that occurs. +// +// This function will be called to inform the application when a mouse has +// been plugged in or removed and any time mouse movement or button pressed +// is detected. +// +// This function will return 0. +// +//***************************************************************************** +void +HubCallback(tHubInstance *psHubInstance, uint32_t ui32Event, + uint32_t ui32MsgParam, void *pvMsgData) +{ +} + +//***************************************************************************** +// +// The main application loop. +// +//***************************************************************************** +int +main(void) +{ + int32_t i32Status, i32Idx; + uint32_t ui32SysClock, ui32PLLRate; +#ifdef USE_ULPI + uint32_t ui32Setting; +#endif + + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Set the part pin out appropriately for this device. + // + PinoutSet(); + +#ifdef USE_ULPI + // + // Switch the USB ULPI Pins over. + // + USBULPIPinoutSet(); + + // + // Enable USB ULPI with high speed support. + // + ui32Setting = USBLIB_FEATURE_ULPI_HS; + USBOTGFeatureSet(0, USBLIB_FEATURE_USBULPI, &ui32Setting); + + // + // Setting the PLL frequency to zero tells the USB library to use the + // external USB clock. + // + ui32PLLRate = 0; +#else + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; +#endif + + // + // Initialize the hub port status. + // + for(i32Idx = 0; i32Idx < NUM_HUB_STATUS; i32Idx++) + { + g_psHubStatus[i32Idx].bConnected = false; + } + + // + // Enable Clocking to the USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the USB stack mode and pass in a mode callback. + // + USBStackModeSet(0, eUSBModeHost, 0); + + // + // Register the host class drivers. + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, g_ui32NumHostClassDrivers); + + // + // Open the Keyboard interface. + // + KeyboardOpen(); + MSCOpen(ui32SysClock); + + // + // Open a hub instance and provide it with the memory required to hold + // configuration descriptors for each attached device. + // + USBHHubOpen(HubCallback); + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Tell the USB library the CPU clock and the PLL frequency. + // + USBOTGFeatureSet(0, USBLIB_FEATURE_CPUCLK, &ui32SysClock); + USBOTGFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Initialize the USB controller for Host mode. + // + USBHCDInit(0, g_pui8HCDPool, sizeof(g_pui8HCDPool)); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-host-hub"); + + // + // Calculate the number of characters that will fit on a line. + // Make sure to leave a small border for the text box. + // + g_ui32CharsPerLine = (GrContextDpyWidthGet(&g_sContext) - 16) / + GrFontMaxWidthGet(g_psFontFixed6x8); + + // + // Calculate the number of lines per usable text screen. This requires + // taking off space for the top and bottom banners and adding a small bit + // for a border. + // + g_ui32LinesPerScreen = (GrContextDpyHeightGet(&g_sContext) - + (2*(DISPLAY_BANNER_HEIGHT + 1)))/ + GrFontHeightGet(g_psFontFixed6x8); + + // + // Initial update of the screen. + // + UpdateStatus(0); + UpdateStatus(1); + UpdateStatus(2); + UpdateStatus(3); + + g_ui32CmdIdx = 0; + g_ui32CurrentLine = 0; + + // + // Initialize the file system. + // + FileInit(); + + // + // The main loop for the application. + // + while(1) + { + // + // Print a prompt to the console. Show the CWD. + // + WriteString("> "); + + // + // Is there a command waiting to be processed? + // + while((g_ui32Flags & FLAG_CMD_READY) == 0) + { + // + // Call the YSB library to let non-interrupt code run. + // + USBHCDMain(); + + // + // Call the keyboard and mass storage main routines. + // + KeyboardMain(); + MSCMain(); + } + + // + // Pass the line from the user to the command processor. + // It will be parsed and valid commands executed. + // + i32Status = CmdLineProcess(g_pcCmdBuf); + + // + // Handle the case of bad command. + // + if(i32Status == CMDLINE_BAD_CMD) + { + WriteString("Bad command!\n"); + } + // + // Handle the case of too many arguments. + // + else if(i32Status == CMDLINE_TOO_MANY_ARGS) + { + WriteString("Too many arguments for command processor!\n"); + } + // + // Otherwise the command was executed. Print the error + // code if one was returned. + // + else if(i32Status != 0) + { + WriteString("Command returned error code\n"); + WriteString((char *)StringFromFresult((FRESULT)i32Status)); + WriteString("\n"); + } + + // + // Reset the command flag and the command index. + // + g_ui32Flags &= ~FLAG_CMD_READY; + g_ui32CmdIdx = 0; + } +} diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewd b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewp b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewp new file mode 100644 index 0000000..e8d7a6e --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ewp @@ -0,0 +1,821 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\utils\cmdline.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\fat_usbmsc.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\ff.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\usb_host_hub.c + + + $PROJ_DIR$\usb_host_keyboard.c + + + $PROJ_DIR$\usb_host_msc.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.h b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.h new file mode 100644 index 0000000..dfe12b1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.h @@ -0,0 +1,50 @@ +//***************************************************************************** +// +// usb_host_hub.h - The common definitions for the usb_host_hub application. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USB_HOST_HUB_H__ +#define __USB_HOST_HUB_H__ + +//***************************************************************************** +// +// The ASCII code for a backspace character. +// +//***************************************************************************** +#define ASCII_BACKSPACE 0x08 + +void KeyboardOpen(void); +void KeyboardMain(void); +void MSCOpen(uint32_t ui32Clock); +void MSCMain(void); +void UpdateStatus(int32_t i32Port); +void PrintChar(const char cChar); +void WriteString(const char *pcString); + +bool FileInit(void); + +int Cmd_ls(int argc, char *argv[]); +int Cmd_cd(int argc, char *argv[]); +int Cmd_pwd(int argc, char *argv[]); +int Cmd_cat(int argc, char *argv[]); + +#endif diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.icf b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.icf new file mode 100644 index 0000000..604a13e --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_host_hub.icf - Linker configuration file for usb_host_hub. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ld b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ld new file mode 100644 index 0000000..8851b5f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_host_hub.ld - Linker configuration file for usb_host_hub. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.sct b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.sct new file mode 100644 index 0000000..05bb783 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_host_hub.sct - Linker configuration file for usb_host_hub. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvopt b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvopt new file mode 100644 index 0000000..49d227e --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvopt @@ -0,0 +1,443 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_host_hub + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\cmdline.c + cmdline.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\fat_usbmsc.c + fat_usbmsc.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\ff.c + ff.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 7 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_hub.c + usb_host_hub.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_keyboard.c + usb_host_keyboard.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_msc.c + usb_host_msc.c + + + 1 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 14 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 15 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvproj b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvproj new file mode 100644 index 0000000..0ccafd8 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub.uvproj @@ -0,0 +1,479 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_host_hub + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_host_hub + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_host_hub.bin .\rvmdk\usb_host_hub.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_host_hub.sct + + + --entry Reset_Handler + + + + + + + + Source + + + cmdline.c + 1 + ..\..\..\..\utils\cmdline.c + + + fat_usbmsc.c + 1 + ..\..\..\..\third_party\fatfs\port\fat_usbmsc.c + + + ff.c + 1 + ..\..\..\..\third_party\fatfs\src\ff.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + usb_host_hub.c + 1 + .\usb_host_hub.c + + + usb_host_keyboard.c + 1 + .\usb_host_keyboard.c + + + usb_host_msc.c + 1 + .\usb_host_msc.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_hub_ccs.cmd b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub_ccs.cmd new file mode 100644 index 0000000..f3a9810 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_hub_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_host_hub_ccs.cmd - CCS linker configuration file for usb_host_hub. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_keyboard.c b/boards/dk-tm4c129x/usb_host_hub/usb_host_keyboard.c new file mode 100644 index 0000000..64955a1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_keyboard.c @@ -0,0 +1,351 @@ +//***************************************************************************** +// +// usb_host_keyboard.c - The USB keyboard handling routines. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhhid.h" +#include "usblib/host/usbhhidkeyboard.h" +#include "usb_host_hub.h" + +//***************************************************************************** +// +// The size of the keyboard device interface's memory pool in bytes. +// +//***************************************************************************** +#define KEYBOARD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The memory pool to provide to the keyboard device. +// +//***************************************************************************** +uint8_t g_pui8Buffer[KEYBOARD_MEMORY_SIZE]; + +//***************************************************************************** +// +// The global value used to store the keyboard instance value. +// +//***************************************************************************** +static tUSBHKeyboard * g_psKeyboardInstance; + +extern const tHIDKeyboardUsageTable g_sUSKeyboardMap; + +//***************************************************************************** +// +// This enumerated type is used to hold the states of the keyboard. +// +//***************************************************************************** +enum +{ + // + // No device is present. + // + eStateNoDevice, + + // + // Keyboard has been detected and needs to be initialized in the main + // loop. + // + eStateKeyboardInit, + + // + // Keyboard is connected and waiting for events. + // + eStateKeyboardConnected, + + // + // Keyboard has received a key press that requires updating the keyboard + // in the main loop. + // + eStateKeyboardUpdate, +} +g_iKeyboardState; + +//***************************************************************************** +// +// This variable holds the current status of the modifiers keys. +// +//***************************************************************************** +uint32_t g_ui32Modifiers; + +//***************************************************************************** +// +// This is the callback from the USB HID keyboard handler. +// +// pvCBData is ignored by this function. +// ui32Event is one of the valid events for a keyboard device. +// ui32MsgParam is defined by the event that occurs. +// pvMsgData is a pointer to data that is defined by the event that +// occurs. +// +// This function will be called to inform the application when a keyboard has +// been plugged in or removed and any time a key is pressed or released. +// +// This function will return 0. +// +//***************************************************************************** +void +KeyboardCallback(tUSBHKeyboard *psKbInstance, uint32_t ui32Event, + uint32_t ui32MsgParam, void *pvMsgData) +{ + char cChar; + + switch(ui32Event) + { + // + // New keyboard detected. + // + case USB_EVENT_CONNECTED: + { + // + // Proceed to the STATE_KEYBOARD_INIT state so that the main loop + // can finish initialized the mouse since USBHKeyboardInit() cannot + // be called from within a callback. + // + g_iKeyboardState = eStateKeyboardInit; + + break; + } + + // + // Keyboard has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Change the state so that the main loop knows that the keyboard + // is no longer present. + // + g_iKeyboardState = eStateNoDevice; + + break; + } + + // + // New Key press detected. + // + case USBH_EVENT_HID_KB_PRESS: + { + // + // If this was a Caps Lock key then update the Caps Lock state. + // + if(ui32MsgParam == HID_KEYB_USAGE_CAPSLOCK) + { + // + // The main loop needs to update the keyboard's Caps Lock + // state. + // + g_iKeyboardState = eStateKeyboardUpdate; + + // + // Toggle the current Caps Lock state. + // + g_ui32Modifiers ^= HID_KEYB_CAPS_LOCK; + } + else if(ui32MsgParam == HID_KEYB_USAGE_SCROLLOCK) + { + // + // The main loop needs to update the keyboard's Scroll Lock + // state. + // + g_iKeyboardState = eStateKeyboardUpdate; + + // + // Toggle the current Scroll Lock state. + // + g_ui32Modifiers ^= HID_KEYB_SCROLL_LOCK; + } + else if(ui32MsgParam == HID_KEYB_USAGE_NUMLOCK) + { + // + // The main loop needs to update the keyboard's Scroll Lock + // state. + // + g_iKeyboardState = eStateKeyboardUpdate; + + // + // Toggle the current Num Lock state. + // + g_ui32Modifiers ^= HID_KEYB_NUM_LOCK; + } + else + { + // + // Was this the backspace key? + // + if((uint8_t)ui32MsgParam == HID_KEYB_USAGE_BACKSPACE) + { + // + // Yes - set the ASCII code for a backspace key. This is + // not returned by USBHKeyboardUsageToChar since this only + // returns printable characters. + // + cChar = ASCII_BACKSPACE; + } + else + { + // + // This is not backspace so try to map the usage code to a + // printable ASCII character. + // + cChar = (char) + USBHKeyboardUsageToChar(g_psKeyboardInstance, + &g_sUSKeyboardMap, + (uint8_t)ui32MsgParam); + } + + // + // A zero value indicates there was no textual mapping of this + // usage code. + // + if(cChar != 0) + { + PrintChar(cChar); + } + } + break; + } + case USBH_EVENT_HID_KB_MOD: + { + // + // This application ignores the state of the shift or control + // and other special keys. + // + break; + } + case USBH_EVENT_HID_KB_REL: + { + // + // This applications ignores the release of keys as well. + // + break; + } + } +} + +//***************************************************************************** +// +// The main routine for handling the USB keyboard. +// +//***************************************************************************** +void +KeyboardMain(void) +{ + switch(g_iKeyboardState) + { + // + // This state is entered when they keyboard is first detected. + // + case eStateKeyboardInit: + { + // + // Initialized the newly connected keyboard. + // + USBHKeyboardInit(g_psKeyboardInstance); + + // + // Proceed to the keyboard connected state. + // + g_iKeyboardState = eStateKeyboardConnected; + + // + // Set the current state of the modifiers. + // + USBHKeyboardModifierSet(g_psKeyboardInstance, g_ui32Modifiers); + + break; + } + case eStateKeyboardUpdate: + { + // + // If the application detected a change that required an + // update to be sent to the keyboard to change the modifier + // state then call it and return to the connected state. + // + g_iKeyboardState = eStateKeyboardConnected; + + USBHKeyboardModifierSet(g_psKeyboardInstance, g_ui32Modifiers); + + // + // Set the USER LED based on the Caps Lock. + // + if(g_ui32Modifiers & HID_KEYB_CAPS_LOCK) + { +// ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3); + } + else + { +// ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0); + } + + break; + } + case eStateKeyboardConnected: + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +void +KeyboardOpen(void) +{ + // + // Open an instance of the keyboard driver. The keyboard does not need + // to be present at this time, this just save a place for it and allows + // the applications to be notified when a keyboard is present. + // + g_psKeyboardInstance = USBHKeyboardOpen(KeyboardCallback, g_pui8Buffer, + KEYBOARD_MEMORY_SIZE); + +// // +// // Enable the peripheral used by the USER LED. +// // +// ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); + + g_ui32Modifiers = 0; + + // + // Set GPIO F3 to and output so that the LED can be controlled with GPIO + // Port F pin 3. + // +// ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3); +// ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0); +} + diff --git a/boards/dk-tm4c129x/usb_host_hub/usb_host_msc.c b/boards/dk-tm4c129x/usb_host_hub/usb_host_msc.c new file mode 100644 index 0000000..e7b9a7c --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_hub/usb_host_msc.c @@ -0,0 +1,946 @@ +//***************************************************************************** +// +// usb_host_msc.c - The USB Mass storage handling routines. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "driverlib/sysctl.h" +#include "utils/ustdlib.h" +#include "usblib/usblib.h" +#include "usblib/usbmsc.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhmsc.h" +#include "third_party/fatfs/src/ff.h" +#include "third_party/fatfs/src/diskio.h" +#include "usb_host_hub.h" + +//***************************************************************************** +// +// A structure that holds a mapping between an FRESULT numerical code, +// and a string representation. FRESULT codes are returned from the FatFs +// FAT file system driver. +// +//***************************************************************************** +typedef struct +{ + FRESULT iResult; + char *pcResultStr; +} +tFresultString; + +//***************************************************************************** +// +// A macro to make it easy to add result codes to the table. +// +//***************************************************************************** +#define FRESULT_ENTRY(f) { (f), (#f) } + +//***************************************************************************** +// +// A table that holds a mapping between the numerical FRESULT code and +// it's name as a string. This is used for looking up error codes for +// printing to the console. +// +//***************************************************************************** +tFresultString g_sFresultStrings[] = +{ + FRESULT_ENTRY(FR_OK), + FRESULT_ENTRY(FR_NOT_READY), + FRESULT_ENTRY(FR_NO_FILE), + FRESULT_ENTRY(FR_NO_PATH), + FRESULT_ENTRY(FR_INVALID_NAME), + FRESULT_ENTRY(FR_INVALID_DRIVE), + FRESULT_ENTRY(FR_DENIED), + FRESULT_ENTRY(FR_EXIST), + FRESULT_ENTRY(FR_INVALID_OBJECT), + FRESULT_ENTRY(FR_WRITE_PROTECTED), + FRESULT_ENTRY(FR_NOT_ENABLED), + FRESULT_ENTRY(FR_NO_FILESYSTEM), + FRESULT_ENTRY(FR_INVALID_OBJECT), + FRESULT_ENTRY(FR_MKFS_ABORTED) +}; + +//***************************************************************************** +// +// A macro that holds the number of result codes. +// +//***************************************************************************** +#define NUM_FRESULT_CODES (sizeof(g_sFresultStrings) / sizeof(tFresultString)) + +//***************************************************************************** +// +// Defines the size of the buffers that hold the path, or temporary +// data from the USB disk. There are two buffers allocated of this size. +// The buffer size must be large enough to hold the longest expected +// full path name, including the file name, and a trailing null character. +// +//***************************************************************************** +#define PATH_BUF_SIZE 80 + +//***************************************************************************** +// +// This buffer holds the full path to the current working directory. +// Initially it is root ("/"). +// +//***************************************************************************** +static char g_pcCwdBuf[PATH_BUF_SIZE] = "/"; + +//***************************************************************************** +// +// A temporary data buffer used when manipulating file paths, or reading data +// from the SD card. +// +//***************************************************************************** +static char g_pcTmpBuf[PATH_BUF_SIZE]; + +//***************************************************************************** +// +// The following are data structures used by FatFs. +// +//***************************************************************************** +static FATFS g_sFatFs; +static DIR g_sDirObject; +static FILINFO g_sFileInfo; +static FIL g_sFileObject; +static uint32_t g_ui32Clock; + +//***************************************************************************** +// +// Error reasons returned by ChangeDirectory(). +// +//***************************************************************************** +#define NAME_TOO_LONG_ERROR 1 +#define OPENDIR_ERROR 2 + +//***************************************************************************** +// +// Hold the current state for the application. +// +//***************************************************************************** +volatile enum +{ + // + // No device is present. + // + eStateNoDevice, + + // + // Mass storage device is being enumerated. + // + eStateDeviceEnum, + + // + // Mass storage device is ready. + // + eStateDeviceReady, + + // + // A mass storage device was connected but failed to ever report ready. + // + eStateDeviceTimeout, +} +g_iState; + +//***************************************************************************** +// +// The instance data for the MSC driver. +// +//***************************************************************************** +tUSBHMSCInstance *g_psMSCInstance; + +//***************************************************************************** +// +// The instance data for the MSC driver. +// +//***************************************************************************** +uint32_t g_ui32DriveTimeout; + +//***************************************************************************** +// +// This function initializes the third party FAT implementation. +// +// Returns true on success or false on failure. +// +//***************************************************************************** +bool +FileInit(void) +{ + // + // Mount the file system, using logical disk 0. + // + if(f_mount(0, &g_sFatFs) != FR_OK) + { + return(false); + } + return(true); +} + +//***************************************************************************** +// +// This function returns a string representation of an error code +// that was returned from a function call to FatFs. It can be used +// for printing human readable error messages. +// +//***************************************************************************** +const char * +StringFromFresult(FRESULT iResult) +{ + uint32_t ui32Idx; + + // + // Enter a loop to search the error code table for a matching + // error code. + // + for(ui32Idx = 0; ui32Idx < NUM_FRESULT_CODES; ui32Idx++) + { + // + // If a match is found, then return the string name of the + // error code. + // + if(g_sFresultStrings[ui32Idx].iResult == iResult) + { + return(g_sFresultStrings[ui32Idx].pcResultStr); + } + } + + // + // At this point no matching code was found, so return a + // string indicating unknown error. + // + return("UNKNOWN ERROR CODE"); +} + +//***************************************************************************** +// +// This function implements the "ls" command. It opens the current +// directory and enumerates through the contents, and prints a line for +// each item it finds. It shows details such as file attributes, time and +// date, and the file size, along with the name. It shows a summary of +// file sizes at the end along with free space. +// +//***************************************************************************** +int +Cmd_ls(int argc, char *argv[]) +{ + uint32_t ui32TotalSize, ui32ItemCount, ui32FileCount, ui32DirCount; + FRESULT iResult; + FATFS *psFatFs; + + // + // Open the current directory for access. + // + iResult = f_opendir(&g_sDirObject, g_pcCwdBuf); + + // + // Check for error and return if there is a problem. + // + if(iResult != FR_OK) + { + // + // Ensure that the error is reported. + // + WriteString("Error from file system:"); + WriteString(StringFromFresult(iResult)); + WriteString("\n"); + return(iResult); + } + + ui32TotalSize = 0; + ui32FileCount = 0; + ui32DirCount = 0; + ui32ItemCount = 0; + + // + // Enter loop to enumerate through all directory entries. + // + for(;;) + { + // + // Read an entry from the directory. + // + iResult = f_readdir(&g_sDirObject, &g_sFileInfo); + + // + // Check for error and return if there is a problem. + // + if(iResult != FR_OK) + { + return(iResult); + } + + // + // If the file name is blank, then this is the end of the + // listing. + // + if(!g_sFileInfo.fname[0]) + { + break; + } + + // + // Print the entry information on a single line with formatting + // to show the attributes, date, time, size, and name. + // + usprintf(g_pcTmpBuf, "%c%c%c%c%c %u/%02u/%02u %02u:%02u %9u %s\n", + (g_sFileInfo.fattrib & AM_DIR) ? 'D' : '-', + (g_sFileInfo.fattrib & AM_RDO) ? 'R' : '-', + (g_sFileInfo.fattrib & AM_HID) ? 'H' : '-', + (g_sFileInfo.fattrib & AM_SYS) ? 'S' : '-', + (g_sFileInfo.fattrib & AM_ARC) ? 'A' : '-', + (g_sFileInfo.fdate >> 9) + 1980, + (g_sFileInfo.fdate >> 5) & 15, + g_sFileInfo.fdate & 31, + (g_sFileInfo.ftime >> 11), + (g_sFileInfo.ftime >> 5) & 63, + g_sFileInfo.fsize, + g_sFileInfo.fname); + + WriteString(g_pcTmpBuf); + + // + // If the attribute is directory, then increment the directory count. + // + if(g_sFileInfo.fattrib & AM_DIR) + { + ui32DirCount++; + } + + // + // Otherwise, it is a file. Increment the file count, and + // add in the file size to the total. + // + else + { + ui32FileCount++; + ui32TotalSize += g_sFileInfo.fsize; + } + + // + // Move to the next entry in the item array we use to populate the + // list box. + // + ui32ItemCount++; + } + + // + // Print summary lines showing the file, dir, and size totals. + // + usprintf(g_pcTmpBuf, "\n%4u File(s),%10u bytes total\n", ui32FileCount, + ui32TotalSize); + + WriteString(g_pcTmpBuf); + + // + // Get the free space. + // + iResult = f_getfree("/", (DWORD *)&ui32TotalSize, &psFatFs); + + // + // Check for error and return if there is a problem. + // + if(iResult != FR_OK) + { + return(iResult); + } + + // + // Made it to here, return with no errors. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "cd" command. It takes an argument +// that specifies the directory to make the current working directory. +// Path separators must use a forward slash "/". The argument to cd +// can be one of the following: +// * root ("/") +// * a fully specified path ("/my/path/to/mydir") +// * a single directory name that is in the current directory ("mydir") +// * parent directory ("..") +// +// It does not understand relative paths, so do not try something like this: +// ("../my/new/path") +// +// Once the new directory is specified, it attempts to open the directory +// to make sure it exists. If the new path is opened successfully, then +// the current working directory (cwd) is changed to the new path. +// +// In cases of error, the pui32Reason parameter will be written with one of +// the following values: +// +//***************************************************************************** +static FRESULT +ChangeToDirectory(char *pcDirectory, uint32_t *pui32Reason) +{ + uint32_t ui32Idx; + FRESULT iResult; + + // + // Copy the current working path into a temporary buffer so + // it can be manipulated. + // + strcpy(g_pcTmpBuf, g_pcCwdBuf); + + // + // If the first character is /, then this is a fully specified + // path, and it should just be used as-is. + // + if(pcDirectory[0] == '/') + { + // + // Make sure the new path is not bigger than the cwd buffer. + // + if(strlen(pcDirectory) + 1 > sizeof(g_pcCwdBuf)) + { + *pui32Reason = NAME_TOO_LONG_ERROR; + return(FR_OK); + } + + // + // If the new path name (in argv[1]) is not too long, then + // copy it into the temporary buffer so it can be checked. + // + else + { + strncpy(g_pcTmpBuf, pcDirectory, sizeof(g_pcTmpBuf)); + } + } + + // + // If the argument is .. then attempt to remove the lowest level + // on the CWD. + // + else if(!strcmp(pcDirectory, "..")) + { + // + // Get the index to the last character in the current path. + // + ui32Idx = strlen(g_pcTmpBuf) - 1; + + // + // Back up from the end of the path name until a separator (/) + // is found, or until we bump up to the start of the path. + // + while((g_pcTmpBuf[ui32Idx] != '/') && (ui32Idx > 1)) + { + // + // Back up one character. + // + ui32Idx--; + } + + // + // Now we are either at the lowest level separator in the + // current path, or at the beginning of the string (root). + // So set the new end of string here, effectively removing + // that last part of the path. + // + g_pcTmpBuf[ui32Idx] = 0; + } + + // + // Otherwise this is just a normal path name from the current + // directory, and it needs to be appended to the current path. + // + else + { + // + // Test to make sure that when the new additional path is + // added on to the current path, there is room in the buffer + // for the full new path. It needs to include a new separator, + // and a trailing null character. + // + if(strlen(g_pcTmpBuf) + strlen(pcDirectory) + 1 + 1 > sizeof(g_pcCwdBuf)) + { + *pui32Reason = NAME_TOO_LONG_ERROR; + return(FR_INVALID_OBJECT); + } + + // + // The new path is okay, so add the separator and then append + // the new directory to the path. + // + else + { + // + // If not already at the root level, then append a / + // + if(strcmp(g_pcTmpBuf, "/")) + { + strcat(g_pcTmpBuf, "/"); + } + + // + // Append the new directory to the path. + // + strcat(g_pcTmpBuf, pcDirectory); + } + } + + // + // At this point, a candidate new directory path is in chTmpBuf. + // Try to open it to make sure it is valid. + // + iResult = f_opendir(&g_sDirObject, g_pcTmpBuf); + + // + // If it cannot be opened, then it is a bad path. Inform + // user and return. + // + if(iResult != FR_OK) + { + *pui32Reason = OPENDIR_ERROR; + return(iResult); + } + + // + // Otherwise, it is a valid new path, so copy it into the CWD and update + // the screen. + // + else + { + strncpy(g_pcCwdBuf, g_pcTmpBuf, sizeof(g_pcCwdBuf)); + } + + // + // Return success. + // + return(FR_OK); +} + +//***************************************************************************** +// +// This function implements the "cd" command. It takes an argument +// that specifies the directory to make the current working directory. +// Path separators must use a forward slash "/". The argument to cd +// can be one of the following: +// * root ("/") +// * a fully specified path ("/my/path/to/mydir") +// * a single directory name that is in the current directory ("mydir") +// * parent directory ("..") +// +// It does not understand relative paths, so don't try something like this: +// ("../my/new/path") +// +// Once the new directory is specified, it attempts to open the directory +// to make sure it exists. If the new path is opened successfully, then +// the current working directory (cwd) is changed to the new path. +// +//***************************************************************************** +int +Cmd_cd(int argc, char *argv[]) +{ + uint32_t ui32Reason; + FRESULT iResult; + + // + // Try to change to the directory provided on the command line. + // + iResult = ChangeToDirectory(argv[1], &ui32Reason); + + // + // If an error was reported, try to offer some helpful information. + // + if(iResult != FR_OK) + { + switch(ui32Reason) + { + case OPENDIR_ERROR: + WriteString("Error opening new directory.\n"); + break; + + case NAME_TOO_LONG_ERROR: + WriteString("Resulting path name is too long.\n"); + break; + + default: + WriteString("An unrecognized error was reported.\n"); + break; + } + } + else + { + // + // Tell the user what happened. + // + WriteString("Changed to "); + WriteString(g_pcCwdBuf); + WriteString("\n"); + } + + // + // Return the appropriate error code. + // + return(iResult); +} + +//***************************************************************************** +// +// This function implements the "pwd" command. It simply prints the +// current working directory. +// +//***************************************************************************** +int +Cmd_pwd(int argc, char *argv[]) +{ + // + // Print the CWD to the console. + // + WriteString(g_pcCwdBuf); + WriteString("\n"); + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "cat" command. It reads the contents of +// a file and prints it to the console. This should only be used on +// text files. If it is used on a binary file, then a bunch of garbage +// is likely to printed on the console. +// +//***************************************************************************** +int +Cmd_cat(int argc, char *argv[]) +{ + FRESULT iResult; + uint32_t ui32BytesRead; + int iIdx; + char *pcCurrent; + + // + // First, check to make sure that the current path (CWD), plus + // the file name, plus a separator and trailing null, will all + // fit in the temporary buffer that will be used to hold the + // file name. The file name must be fully specified, with path, + // to FatFs. + // + if(strlen(g_pcCwdBuf) + strlen(argv[1]) + 1 + 1 > sizeof(g_pcTmpBuf)) + { + WriteString("Resulting path name is too long\n"); + return(0); + } + + // + // Copy the current path to the temporary buffer so it can be manipulated. + // + strcpy(g_pcTmpBuf, g_pcCwdBuf); + + // + // If not already at the root level, then append a separator. + // + if(strcmp("/", g_pcCwdBuf)) + { + strcat(g_pcTmpBuf, "/"); + } + + // + // Now finally, append the file name to result in a fully specified file. + // + strcat(g_pcTmpBuf, argv[1]); + + // + // Open the file for reading. + // + iResult = f_open(&g_sFileObject, g_pcTmpBuf, FA_READ); + + // + // If there was some problem opening the file, then return + // an error. + // + if(iResult != FR_OK) + { + return(iResult); + } + + // + // Enter a loop to repeatedly read data from the file and display it, + // until the end of the file is reached. + // + do + { + // + // Read a block of data from the file. Read as much as can fit + // in the temporary buffer, including a space for the trailing null. + // + iResult = f_read(&g_sFileObject, g_pcTmpBuf, sizeof(g_pcTmpBuf) - 1, + (UINT *)&ui32BytesRead); + + // + // If there was an error reading, then print a newline and + // return the error to the user. + // + if(iResult != FR_OK) + { + WriteString("\n"); + return(iResult); + } + + // + // Null terminate the last block that was read to make it a + // null terminated string that can be used with printing. + // + g_pcTmpBuf[ui32BytesRead] = 0; + + pcCurrent = g_pcTmpBuf; + + for(iIdx = 0; iIdx < ui32BytesRead; iIdx++) + { + if(g_pcTmpBuf[iIdx] == '\r') + { + // + // Ignore carriage return. + // + g_pcTmpBuf[iIdx] = 0; + } + else if(g_pcTmpBuf[iIdx] == '\n') + { + g_pcTmpBuf[iIdx] = 0; + + // + // Print the current line in the file. + // + WriteString(pcCurrent); + WriteString("\n"); + + // + // Move the pointer up to the next line. + // + pcCurrent = g_pcTmpBuf + iIdx + 1; + } + else if(g_pcTmpBuf[iIdx] == 0) + { + // + // Print the current string and move past the null. + // + WriteString(pcCurrent); + pcCurrent = g_pcTmpBuf + iIdx + 1; + } + } + + if(pcCurrent < g_pcTmpBuf + ui32BytesRead) + { + // + // Null terminate the line. + // + g_pcTmpBuf[ui32BytesRead] = 0; + + // + // Print any remaining characters before reading a new line. + // + WriteString(pcCurrent); + } + } + while(ui32BytesRead == sizeof(g_pcTmpBuf) - 1); + + WriteString("\n"); + + // + // Return success. + // + return(0); +} + +//***************************************************************************** +// +// This is the callback from the MSC driver. +// +// ulInstance is the driver instance which is needed when communicating with +// the driver. +// ulEvent is one of the events defined by the driver. +// pvData is a pointer to data passed into the initial call to register +// the callback. +// +// This function handles callback events from the MSC driver. The only events +// currently handled are the MSC_EVENT_OPEN and MSC_EVENT_CLOSE. This allows +// the main routine to know when an MSC device has been detected and +// enumerated and when an MSC device has been removed from the system. +// +// This function returns no values. +// +//***************************************************************************** +void +MSCCallback(tUSBHMSCInstance *psMSCInstance, uint32_t ui32Event, void *pvData) +{ + // + // Determine the event. + // + switch(ui32Event) + { + // + // Called when the device driver has successfully enumerated an MSC + // device. + // + case MSC_EVENT_OPEN: + { + // + // Proceed to the enumeration state. + // + g_iState = eStateDeviceEnum; + + break; + } + + // + // Called when the device driver has been unloaded due to error or + // the device is no longer present. + // + case MSC_EVENT_CLOSE: + { + // + // Go back to the "no device" state and wait for a new connection. + // + g_iState = eStateNoDevice; + + // + // Re-initialize the file system. + // + FileInit(); + + break; + } + + default: + { + break; + } + } +} + +//***************************************************************************** +// +// Prepares an instance of the USB MSC class to handle a USB flash drive. +// +//***************************************************************************** +void +MSCOpen(uint32_t ui32Clock) +{ + // + // Save the processor clock. + // + g_ui32Clock = ui32Clock; + + // + // Open an instance of the mass storage class driver. + // + g_psMSCInstance = USBHMSCDriveOpen(0, MSCCallback); +} + +//***************************************************************************** +// +// The main routine for handling the USB mass storage device. +// +//***************************************************************************** +void +MSCMain(void) +{ + FRESULT iResult; + + switch(g_iState) + { + case eStateDeviceEnum: + { + // + // Take it easy on the Mass storage device if it is slow to + // start up after connecting. + // + if(USBHMSCDriveReady(g_psMSCInstance) != 0) + { + // + // Wait about 500ms before attempting to check if the + // device is ready again. + // + SysCtlDelay(g_ui32Clock/(3*2)); + + // + // Decrement the retry count. + // + g_ui32DriveTimeout--; + + // + // If the timeout is hit then go to the + // eStateDeviceTimeout state. + // + if(g_ui32DriveTimeout == 0) + { + g_iState = eStateDeviceTimeout; + } + + break; + } + + // + // Reset the root directory. + // + g_pcCwdBuf[0] = '/'; + g_pcCwdBuf[1] = 0; + + // + // Open the current directory for access. + // + iResult = f_opendir(&g_sDirObject, g_pcCwdBuf); + + // + // Check for error and return if there is a problem. + // + if(iResult != FR_OK) + { + // + // Ensure that the error is reported. + // + WriteString("Error from USB disk:"); + WriteString((char *)StringFromFresult(iResult)); + WriteString("\n"); + return; + } + + g_iState = eStateDeviceReady; + + break; + } + + // + // The connected mass storage device is not reporting ready. + // + case eStateDeviceTimeout: + { + WriteString("\n"); + WriteString("Device Timeout.\n"); + break; + } + case eStateNoDevice: + case eStateDeviceReady: + default: + { + break; + } + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/Makefile b/boards/dk-tm4c129x/usb_host_keyboard/Makefile new file mode 100644 index 0000000..2d4d4f4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/Makefile @@ -0,0 +1,92 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB host keyboard example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB host keyboard example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_host_keyboard.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB host keyboard example. +# +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/frame.o +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/keyboard_ui.o +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/touch.o +${COMPILER}/usb_host_keyboard.axf: ${COMPILER}/usb_host_keyboard.o +${COMPILER}/usb_host_keyboard.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_host_keyboard.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_host_keyboard.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_host_keyboard.axf: usb_host_keyboard.ld +SCATTERgcc_usb_host_keyboard=usb_host_keyboard.ld +ENTRY_usb_host_keyboard=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsimportspec new file mode 100644 index 0000000..29d7898 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsproject b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/.cproject b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.cproject new file mode 100644 index 0000000..b909c55 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.cproject @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/.project b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.project new file mode 100644 index 0000000..2d8f252 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.project @@ -0,0 +1,75 @@ + + + usb_host_keyboard + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + keyboard_ui.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_keyboard/startup_ccs.c + + + usb_host_keyboard.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.c + + + usb_host_keyboard_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.bin b/boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.bin new file mode 100644 index 0000000..5b5ec03 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.out b/boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.out new file mode 100644 index 0000000..e6a3d4b Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/ccs/Debug/usb_host_keyboard.out differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_host_keyboard/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_host_keyboard/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.bin b/boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.bin new file mode 100644 index 0000000..6d96248 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.out b/boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.out new file mode 100644 index 0000000..9899f6c Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/ewarm/Exe/usb_host_keyboard.out differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.axf b/boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.axf new file mode 100644 index 0000000..3d8a582 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.axf differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.bin b/boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.bin new file mode 100644 index 0000000..f05d591 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/gcc/usb_host_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.c b/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.c new file mode 100644 index 0000000..780c4e2 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.c @@ -0,0 +1,578 @@ +//***************************************************************************** +// +// keyboard_ui.c - The DK-TM4C129X USB keyboard application UI. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "keyboard_ui.h" + +//***************************************************************************** +// +// These defines are used to define the screen constraints to the application. +// +//***************************************************************************** +#define DISPLAY_BANNER_HEIGHT 18 +#define DISPLAY_TEXT_BORDER 8 +#define DISPLAY_TEXT_BORDER_H 8 +#define BUTTON_HEIGHT 18 + +//***************************************************************************** +// +// This is the number of characters that will fit on a line in the text area. +// +//***************************************************************************** +uint32_t g_ui32CharsPerLine; + +//***************************************************************************** +// +// This is the number of lines that will fit in the text area. +// +//***************************************************************************** +uint32_t g_ui32LinesPerScreen; + +//***************************************************************************** +// +// This is the current column for printing in the text area. +// +//***************************************************************************** +uint32_t g_ui32Column; + +//***************************************************************************** +// +// Define the maximum number of lines and columns in the command windows. +// +//***************************************************************************** +#define MAX_LINES 23 +#define MAX_COLUMNS 60 + +//***************************************************************************** +// +// The variables that are used to allow the screen to scroll. +// +//***************************************************************************** +static char g_ppcLines[MAX_LINES][MAX_COLUMNS]; +static uint32_t g_ui32CurrentLine; +uint32_t g_ui32EntryLine; + +//***************************************************************************** +// +// Graphics context used to show text on the CSTN display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Draws the prompt for each new line. +// +//***************************************************************************** +static void +DrawPrompt(void) +{ + int32_t i32Idx; + + g_ppcLines[g_ui32CurrentLine][0] = '>'; + + for(i32Idx = 1; i32Idx < MAX_COLUMNS - 1; i32Idx++) + { + g_ppcLines[g_ui32CurrentLine][i32Idx] = ' '; + } + g_ppcLines[g_ui32CurrentLine][i32Idx] = 0; + + GrStringDraw(&g_sContext, g_ppcLines[g_ui32CurrentLine], MAX_COLUMNS, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32EntryLine * GrFontHeightGet(g_psFontFixed6x8)), + true); + + g_ui32Column = 2; +} + +//***************************************************************************** +// +// Initialize the application interface. +// +//***************************************************************************** +void +UIInit(uint32_t ui32SysClock) +{ + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-host-keyboard"); + + // + // Set the font for the application. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + // + // Calculate the number of characters that will fit on a line. + // Make sure to leave a small border for the text box. + // + g_ui32CharsPerLine = (GrContextDpyWidthGet(&g_sContext) - 16) / + GrFontMaxWidthGet(g_psFontFixed6x8); + + // + // Calculate the number of lines per usable text screen. This requires + // taking off space for the top and bottom banners and adding a small bit + // for a border. + // + g_ui32LinesPerScreen = (GrContextDpyHeightGet(&g_sContext) - + (2*(DISPLAY_BANNER_HEIGHT + 1)) - + BUTTON_HEIGHT) / GrFontHeightGet(g_psFontFixed6x8); + + // + // Set up the text scrolling variables. + // + g_ui32CurrentLine = 0; + g_ui32EntryLine = 0; + + // + // Draw the initial prompt on the screen. + // + DrawPrompt(); + + // + // Initial update of the screen. + // + UIUpdateStatus(); +} + +//***************************************************************************** +// +// Handles scrolling the text on the screen. +// +//***************************************************************************** +static void +ScrollText(void) +{ + int32_t i32Idx; + uint32_t ui32Line, ui32Start; + + ui32Line = 0; + + // + // Skip the oldest entry in the circular list. + // + if(g_ui32CurrentLine == (MAX_LINES - 1)) + { + // + // If at the end of the list wrap to entry 1. + // + ui32Start = 1; + } + else + { + // + // The oldest is 1 in front of the most recent. + // + ui32Start = g_ui32CurrentLine + 2; + } + + // + // Print lines from the current position down first. + // + for(i32Idx = ui32Start; i32Idx < MAX_LINES; i32Idx++) + { + GrStringDraw(&g_sContext, g_ppcLines[i32Idx], + strlen(g_ppcLines[i32Idx]), DISPLAY_TEXT_BORDER_H, + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + + ui32Line++; + } + + // + // If not the special case of the last line where everything has already + // printed, print the remaining lines. + // + if(g_ui32CurrentLine != (MAX_LINES - 1)) + { + for(i32Idx = 0; i32Idx <= g_ui32CurrentLine; i32Idx++) + { + GrStringDraw(&g_sContext, g_ppcLines[i32Idx], + strlen(g_ppcLines[i32Idx]), + DISPLAY_TEXT_BORDER_H, + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (ui32Line * GrFontHeightGet(g_psFontFixed6x8)), 1); + + ui32Line++; + } + } + + // + // Reset the column to zero. + // + g_ui32Column = 0; +} + +//***************************************************************************** +// +// This function prints the character out the screen and into the command +// buffer. +// +// ucChar is the character to print out. +// +// This function handles all of the detail of printing a character to the +// screen and into the command line buffer. +// +// No return value. +// +//***************************************************************************** +void +UIPrintChar(const char cChar) +{ + bool bNewLine; + int32_t i32Idx; + + GrContextForegroundSet(&g_sContext, ClrWhite); + + bNewLine = true; + + // + // Allow new lines to cause the column to go back to zero. + // + if(cChar != '\n') + { + // + // Handle when receiving a backspace character. + // + if(cChar != ASCII_BACKSPACE) + { + // + // This is not a backspace so print the character to the screen. + // + GrStringDraw(&g_sContext, &cChar, 1, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32EntryLine * GrFontHeightGet(g_psFontFixed6x8)), + 1); + + g_ppcLines[g_ui32CurrentLine][g_ui32Column] = cChar; + + if(g_ui32Column < g_ui32CharsPerLine) + { + // + // No line wrap yet so move one column over. + // + g_ui32Column++; + + bNewLine = false; + } + } + else + { + // + // We got a backspace. If we are at the top left of the screen, + // return since we don't need to do anything. + // + if(g_ui32Column || g_ui32EntryLine) + { + // + // Adjust the cursor position to erase the last character. + // + if(g_ui32Column > 2) + { + g_ui32Column--; + } + + // + // Print a space at this position then return without fixing up + // the cursor again. + // + GrStringDraw(&g_sContext, " ", 1, + DISPLAY_TEXT_BORDER_H + + (GrFontMaxWidthGet(g_psFontFixed6x8) * g_ui32Column), + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32EntryLine * GrFontHeightGet(g_psFontFixed6x8)), + true); + + g_ppcLines[g_ui32CurrentLine][g_ui32Column] = ' '; + } + + bNewLine = false; + } + } + + // + // . + // + if(bNewLine) + { + g_ui32Column = 0; + + if(g_ui32EntryLine < (MAX_LINES - 1)) + { + g_ui32EntryLine++; + } + else + { + ScrollText(); + } + + g_ui32CurrentLine++; + + // + // The line has gone past the end so go back to the first line. + // + if(g_ui32CurrentLine >= MAX_LINES) + { + g_ui32CurrentLine = 0; + } + + // + // Add a prompt to the new line. + // + if(cChar == '\n') + { + DrawPrompt(); + } + else + { + // + // Clear out the current line. + // + for(i32Idx = 0; i32Idx < MAX_COLUMNS - 1; i32Idx++) + { + g_ppcLines[g_ui32CurrentLine][i32Idx] = ' '; + } + g_ppcLines[g_ui32CurrentLine][i32Idx] = 0; + + GrStringDraw(&g_sContext, g_ppcLines[g_ui32CurrentLine], + strlen(g_ppcLines[g_ui32CurrentLine]), + DISPLAY_TEXT_BORDER_H, + DISPLAY_BANNER_HEIGHT + DISPLAY_TEXT_BORDER + + (g_ui32EntryLine * GrFontHeightGet(g_psFontFixed6x8)), + 1); + } + } +} + +//***************************************************************************** +// +// Update one of the status boxes at the bottom of the screen. +// +//***************************************************************************** +static void +UpdateStatusBox(const tRectangle *psRect, const char *pcString, bool bActive) +{ + uint32_t ui32TextColor; + + // + // Change the status box to green for active devices. + // + if(bActive) + { + GrContextForegroundSet(&g_sContext, ClrOrange); + ui32TextColor = ClrBlack; + } + else + { + GrContextForegroundSet(&g_sContext, ClrBlack); + ui32TextColor = ClrWhite; + } + + // + // Draw the background box. + // + GrRectFill(&g_sContext, psRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Draw the box border. + // + GrRectDraw(&g_sContext, psRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ui32TextColor); + + // + // Unknown device is currently connected. + // + GrStringDrawCentered(&g_sContext, pcString, -1, + psRect->i16XMin + ((psRect->i16XMax - psRect->i16XMin) / 2), + psRect->i16YMin + (BUTTON_HEIGHT / 2), false); + +} + +//***************************************************************************** +// +// This function updates the status area of the screen. It uses the current +// state of the application to print the status bar. +// +//***************************************************************************** +void +UIUpdateStatus(void) +{ + uint8_t ui8DevClass, ui8DevProtocol; + static const tRectangle psRect[4] = + { + { + DISPLAY_TEXT_BORDER_H, 240 - 10 - BUTTON_HEIGHT, + DISPLAY_TEXT_BORDER_H + 124, 240 - 10 + }, + { + DISPLAY_TEXT_BORDER_H + 124, 240 - 10 - BUTTON_HEIGHT, + DISPLAY_TEXT_BORDER_H + 184, 240 - 10 + }, + { + DISPLAY_TEXT_BORDER_H + 184, 240 - 10 - BUTTON_HEIGHT, + DISPLAY_TEXT_BORDER_H + 244, 240 - 10 + }, + { + DISPLAY_TEXT_BORDER_H + 244, 240 - 10 - BUTTON_HEIGHT, + DISPLAY_TEXT_BORDER_H + 303, 240 - 10 + }, + }; + + // + // Put the application name in the middle of the banner. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + // + // Default the protocol to none so that non-HID devices do not update + // the keyboard modifiers. + // + ui8DevProtocol = USB_HID_PROTOCOL_NONE; + + if(g_sStatus.bConnected) + { + ui8DevClass = USBHCDDevClass(g_sStatus.ui32Instance, 0); + ui8DevProtocol = USBHCDDevProtocol(g_sStatus.ui32Instance, 0); + + if(ui8DevClass == USB_CLASS_HID) + { + if(ui8DevProtocol == USB_HID_PROTOCOL_MOUSE) + { + // + // Mouse is currently connected. + // + UpdateStatusBox(&psRect[0], "Mouse", true); + } + else if(ui8DevProtocol == USB_HID_PROTOCOL_KEYB) + { + // + // Keyboard is currently connected. + // + UpdateStatusBox(&psRect[0], "Keyboard", true); + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&psRect[0], "Unknown", true); + } + } + else if(ui8DevClass == USB_CLASS_MASS_STORAGE) + { + // + // MSC device is currently connected. + // + UpdateStatusBox(&psRect[0], "Mass Storage", true); + } + else if(ui8DevClass == USB_CLASS_HUB) + { + // + // MSC device is currently connected. + // + UpdateStatusBox(&psRect[0], "Hub", true); + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&psRect[0], "Unknown", true); + } + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&psRect[0], "No Device", false); + } + + if(ui8DevProtocol == USB_HID_PROTOCOL_KEYB) + { + if(g_sStatus.ui32Modifiers & HID_KEYB_CAPS_LOCK) + { + UpdateStatusBox(&psRect[1], "CAPS", true); + } + else + { + UpdateStatusBox(&psRect[1], "caps", false); + } + + if(g_sStatus.ui32Modifiers & HID_KEYB_SCROLL_LOCK) + { + UpdateStatusBox(&psRect[2], "SCROLL", true); + } + else + { + UpdateStatusBox(&psRect[2], "scroll", false); + } + + if(g_sStatus.ui32Modifiers & HID_KEYB_NUM_LOCK) + { + UpdateStatusBox(&psRect[3], "NUM", true); + } + else + { + UpdateStatusBox(&psRect[3], "num", false); + } + } + else + { + UpdateStatusBox(&psRect[1], "caps", false); + UpdateStatusBox(&psRect[2], "scroll", false); + UpdateStatusBox(&psRect[3], "num", false); + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.h b/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.h new file mode 100644 index 0000000..e944440 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/keyboard_ui.h @@ -0,0 +1,71 @@ +//***************************************************************************** +// +// keyboard_ui.h - Header for the DK-TM4C129X USB keyboard application UI. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __KEYBOARD_UI_H__ +#define __KEYBOARD_UI_H__ + +//***************************************************************************** +// +// Status of the device. +// +//***************************************************************************** +typedef struct +{ + // + // Holds if there is a device connected to this port. + // + bool bConnected; + + // + // Move to a new line. + // + bool bNewLine; + + // + // The instance data for the device if bConnected is true. + // + uint32_t ui32Instance; + + // + // The keyboard modifier flags. + // + uint32_t ui32Modifiers; +} +tKeyboardStatus; + +extern tKeyboardStatus g_sStatus; + + +//***************************************************************************** +// +// The ASCII code for a backspace character. +// +//***************************************************************************** +#define ASCII_BACKSPACE 0x08 + +void UIInit(uint32_t ui32SysClock); +void UIPrintChar(const char cChar); +void UIUpdateStatus(void); + +#endif diff --git a/boards/dk-tm4c129x/usb_host_keyboard/readme.txt b/boards/dk-tm4c129x/usb_host_keyboard/readme.txt new file mode 100644 index 0000000..3703e24 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/readme.txt @@ -0,0 +1,37 @@ +USB Host keyboard example(usb_host_keyboard) + +This example application demonstrates how to support a USB keyboard using +the DK-TM4C129X development board. This application supports only a +standard keyboard HID device, but can report on the types of other devices +that are connected without having the ability to access them. Key presses +are shown on the display as well as the caps-lock, scroll-lock, and +num-lock states of the keyboard. The bottom left status bar reports the +type of device attached. The user interface for the application is +handled in the keyboard_ui.c file while the usb_host_keyboard.c file +handles start up and the USB interface. + +The application can be recompiled to run using and external USB phy to +implement a high speed host using an external USB phy. To use the external +phy the application must be built with \b USE_ULPI defined. This disables +the internal phy and the connector on the DK-TM4C129X board and enables the +connections to the external ULPI phy pins on the DK-TM4C129X board. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.axf b/boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.axf new file mode 100644 index 0000000..e2a3d16 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.axf differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.bin b/boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.bin new file mode 100644 index 0000000..fcb1bda Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_keyboard/rvmdk/usb_host_keyboard.bin differ diff --git a/boards/dk-tm4c129x/usb_host_keyboard/startup_ccs.c b/boards/dk-tm4c129x/usb_host_keyboard/startup_ccs.c new file mode 100644 index 0000000..f9c8ded --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/startup_ewarm.c b/boards/dk-tm4c129x/usb_host_keyboard/startup_ewarm.c new file mode 100644 index 0000000..5a63952 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/startup_gcc.c b/boards/dk-tm4c129x/usb_host_keyboard/startup_gcc.c new file mode 100644 index 0000000..78235b0 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/startup_rvmdk.S b/boards/dk-tm4c129x/usb_host_keyboard/startup_rvmdk.S new file mode 100644 index 0000000..0920130 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN USB0HostIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0HostIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.c b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.c new file mode 100644 index 0000000..fe2b253 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.c @@ -0,0 +1,561 @@ +//***************************************************************************** +// +// usb_host_keyboard.c - An example using that supports a keyboard. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhhid.h" +#include "usblib/host/usbhhidkeyboard.h" +#include "drivers/pinout.h" +#include "keyboard_ui.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Host keyboard example(usb_host_keyboard)

      +//! +//! This example application demonstrates how to support a USB keyboard using +//! the DK-TM4C129X development board. This application supports only a +//! standard keyboard HID device, but can report on the types of other devices +//! that are connected without having the ability to access them. Key presses +//! are shown on the display as well as the caps-lock, scroll-lock, and +//! num-lock states of the keyboard. The bottom left status bar reports the +//! type of device attached. The user interface for the application is +//! handled in the keyboard_ui.c file while the usb_host_keyboard.c file +//! handles start up and the USB interface. +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed host using an external USB phy. To use the external +//! phy the application must be built with \b USE_ULPI defined. This disables +//! the internal phy and the connector on the DK-TM4C129X board and enables the +//! connections to the external ULPI phy pins on the DK-TM4C129X board. +// +//***************************************************************************** + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The global keyboard status structure. +// +//***************************************************************************** +tKeyboardStatus g_sStatus; + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pui8HCDPool[HCD_MEMORY_SIZE * MAX_USB_DEVICES]; + +//***************************************************************************** +// +// Declare the USB Events driver interface. +// +//***************************************************************************** +DECLARE_EVENT_DRIVER(g_sUSBEventDriver, 0, 0, USBHCDEvents); + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the Keyboard class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHIDClassDriver, + &g_sUSBEventDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +static const uint32_t g_ui32NumHostClassDrivers = + sizeof(g_ppHostClassDrivers) / sizeof(tUSBHostClassDriver *); + +//***************************************************************************** +// +// The global value used to store the keyboard instance value. +// +//***************************************************************************** +static tUSBHKeyboard *g_psKeyboard; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This enumerated type is used to hold the states of the keyboard. +// +//***************************************************************************** +enum +{ + // + // No device is present. + // + eStateNoDevice, + + // + // Keyboard has been detected and needs to be initialized in the main + // loop. + // + eStateKeyboardInit, + + // + // Keyboard is connected and waiting for events. + // + eStateKeyboardConnected, + + // + // Keyboard has received a key press that requires updating the keyboard + // in the main loop. + // + eStateKeyboardUpdate, +} +g_iKeyboardState; + +//***************************************************************************** +// +// This is the callback from the USB HID keyboard handler. +// +// pvCBData is ignored by this function. +// ui32Event is one of the valid events for a keyboard device. +// ui32MsgParam is defined by the event that occurs. +// pvMsgData is a pointer to data that is defined by the event that +// occurs. +// +// This function will be called to inform the application when a keyboard has +// been plugged in or removed and any time a key is pressed or released. +// +// This function will return 0. +// +//***************************************************************************** +void +KeyboardCallback(tUSBHKeyboard *psKbInstance, uint32_t ui32Event, + uint32_t ui32MsgParam, void *pvMsgData) +{ + char cChar; + + switch(ui32Event) + { + // + // New keyboard detected. + // + case USB_EVENT_CONNECTED: + { + // + // Proceed to the STATE_KEYBOARD_INIT state so that the main loop + // can finish initialized the mouse since USBHKeyboardInit() cannot + // be called from within a callback. + // + g_iKeyboardState = eStateKeyboardInit; + + break; + } + + // + // Keyboard has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Change the state so that the main loop knows that a device is no + // longer present. + // + g_iKeyboardState = eStateNoDevice; + + break; + } + + // + // New Key press detected. + // + case USBH_EVENT_HID_KB_PRESS: + { + if(ui32MsgParam == HID_KEYB_USAGE_CAPSLOCK) + { + // + // The main loop needs to update the device state. + // + g_iKeyboardState = eStateKeyboardUpdate; + + // + // Toggle the current Caps Lock state. + // + g_sStatus.ui32Modifiers ^= HID_KEYB_CAPS_LOCK; + } + else if(ui32MsgParam == HID_KEYB_USAGE_SCROLLOCK) + { + // + // The main loop needs to update the device state. + // + g_iKeyboardState = eStateKeyboardUpdate; + + // + // Toggle the current Scroll Lock state. + // + g_sStatus.ui32Modifiers ^= HID_KEYB_SCROLL_LOCK; + } + else if(ui32MsgParam == HID_KEYB_USAGE_NUMLOCK) + { + // + // The main loop needs to update the device state. + // + g_iKeyboardState = eStateKeyboardUpdate; + + // + // Toggle the current Num Lock state. + // + g_sStatus.ui32Modifiers ^= HID_KEYB_NUM_LOCK; + } + else + { + // + // Was this the backspace key? + // + if((uint8_t)ui32MsgParam == HID_KEYB_USAGE_BACKSPACE) + { + // + // Yes - set the ASCII code for a backspace key. This is + // not returned by USBHKeyboardUsageToChar since this only + // returns printable characters. + // + cChar = ASCII_BACKSPACE; + } + else + { + // + // This is not backspace so try to map the usage code to a + // printable ASCII character. + // + cChar = (char)USBHKeyboardUsageToChar(g_psKeyboard, + &g_sUSKeyboardMap, + (uint8_t)ui32MsgParam); + } + + // + // A zero value indicates there was no textual mapping of this + // usage code. + // + if(cChar != 0) + { + UIPrintChar(cChar); + } + } + break; + } + case USBH_EVENT_HID_KB_MOD: + { + // + // This application ignores the state of the shift or control + // and other special keys. + // + break; + } + case USBH_EVENT_HID_KB_REL: + { + // + // This applications ignores the release of keys as well. + // + break; + } + } +} + +//***************************************************************************** +// +// The main routine for handling the USB keyboard. +// +//***************************************************************************** +void +KeyboardMain(void) +{ + switch(g_iKeyboardState) + { + // + // This state is entered when they keyboard is first detected. + // + case eStateKeyboardInit: + { + // + // Initialized the newly connected keyboard. + // + USBHKeyboardInit(g_psKeyboard); + + // + // Proceed to the keyboard connected state. + // + g_iKeyboardState = eStateKeyboardConnected; + + // + // Set the current state of the modifiers. + // + USBHKeyboardModifierSet(g_psKeyboard, g_sStatus.ui32Modifiers); + + break; + } + case eStateKeyboardUpdate: + { + // + // If the application detected a change that required an + // update to be sent to the keyboard to change the modifier + // state then call it and return to the connected state. + // + g_iKeyboardState = eStateKeyboardConnected; + + USBHKeyboardModifierSet(g_psKeyboard, g_sStatus.ui32Modifiers); + + // + // Update the modifier status. + // + UIUpdateStatus(); + + break; + } + case eStateKeyboardConnected: + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This is the generic callback from host stack. +// +// pvData is actually a pointer to a tEventInfo structure. +// +// This function will be called to inform the application when a USB event has +// occurred that is outside those related to the keyboard device. At this +// point this is used to detect unsupported devices being inserted and removed. +// It is also used to inform the application when a power fault has occurred. +// This function is required when the g_USBGenericEventDriver is included in +// the host controller driver array that is passed in to the +// USBHCDRegisterDrivers() function. +// +//***************************************************************************** +void +USBHCDEvents(void *pvData) +{ + tEventInfo *pEventInfo; + + // + // Cast this pointer to its actual type. + // + pEventInfo = (tEventInfo *)pvData; + + switch(pEventInfo->ui32Event) + { + case USB_EVENT_UNKNOWN_CONNECTED: + case USB_EVENT_CONNECTED: + { + // + // Save the device instance data. + // + g_sStatus.ui32Instance = pEventInfo->ui32Instance; + g_sStatus.bConnected = true; + + // + // Update the port status for the new device. + // + UIUpdateStatus(); + + break; + } + // + // A device has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Device is no longer connected. + // + g_sStatus.bConnected = false; + + // + // Update the port status for the new device. + // + UIUpdateStatus(); + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// The main application loop. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock, ui32PLLRate; +#ifdef USE_ULPI + uint32_t ui32Setting; +#endif + + // + // Set the application to run at 120 MHz with a PLL frequency of 480 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Set the part pin out appropriately for this device. + // + PinoutSet(); + +#ifdef USE_ULPI + // + // Switch the USB ULPI Pins over. + // + USBULPIPinoutSet(); + + // + // Enable USB ULPI with high speed support. + // + ui32Setting = USBLIB_FEATURE_ULPI_HS; + USBOTGFeatureSet(0, USBLIB_FEATURE_USBULPI, &ui32Setting); + + // + // Setting the PLL frequency to zero tells the USB library to use the + // external USB clock. + // + ui32PLLRate = 0; +#else + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; +#endif + + // + // Initialize the connection status. + // + g_sStatus.bConnected = false; + + // + // Initially there are no modifiers set. + // + g_sStatus.ui32Modifiers = 0; + + // + // Enable Clocking to the USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the USB stack mode and pass in a mode callback. + // + USBStackModeSet(0, eUSBModeHost, 0); + + // + // Register the host class drivers. + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, g_ui32NumHostClassDrivers); + + // + // Open an instance of the keyboard driver. The keyboard does not need + // to be present at this time, this just save a place for it and allows + // the applications to be notified when a keyboard is present. + // + g_psKeyboard = USBHKeyboardOpen(KeyboardCallback, 0, 0); + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Tell the USB library the CPU clock and the PLL frequency. This is a + // new requirement for TM4C129 devices. + // + USBHCDFeatureSet(0, USBLIB_FEATURE_CPUCLK, &ui32SysClock); + USBHCDFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Initialize the USB controller for Host mode. + // + USBHCDInit(0, g_pui8HCDPool, sizeof(g_pui8HCDPool)); + + // + // Initialize the GUI elements. + // + UIInit(ui32SysClock); + + // + // The main loop for the application. + // + while(1) + { + // + // Call the USB library to let non-interrupt code run. + // + USBHCDMain(); + + // + // Call the keyboard and mass storage main routines. + // + KeyboardMain(); + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewd b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewp b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewp new file mode 100644 index 0000000..40f752e --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\keyboard_ui.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\usb_host_keyboard.c + + + diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.icf b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.icf new file mode 100644 index 0000000..32882e4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_host_keyboard.icf - Linker configuration file for usb_host_keyboard. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ld b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ld new file mode 100644 index 0000000..ba8518c --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_host_keyboard.ld - Linker configuration file for usb_host_keyboard. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.sct b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.sct new file mode 100644 index 0000000..a9c6309 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_host_keyboard.sct - Linker configuration file for usb_host_keyboard. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvopt b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvopt new file mode 100644 index 0000000..2e1d709 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_host_keyboard + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\keyboard_ui.c + keyboard_ui.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_keyboard.c + usb_host_keyboard.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvproj b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvproj new file mode 100644 index 0000000..8ecbaa9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_host_keyboard + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_host_keyboard + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_host_keyboard.bin .\rvmdk\usb_host_keyboard.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_host_keyboard.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + keyboard_ui.c + 1 + .\keyboard_ui.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + usb_host_keyboard.c + 1 + .\usb_host_keyboard.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard_ccs.cmd b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard_ccs.cmd new file mode 100644 index 0000000..657a4d5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_keyboard/usb_host_keyboard_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_host_keyboard_ccs.cmd - CCS linker configuration file for usb_host_keyboard. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/usb_host_mouse/Makefile b/boards/dk-tm4c129x/usb_host_mouse/Makefile new file mode 100644 index 0000000..a3ce9d3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/Makefile @@ -0,0 +1,93 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB host mouse example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB host mouse example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_host_mouse.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB host mouse example. +# +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/frame.o +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/mouse_ui.o +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/usb_host_mouse.o +${COMPILER}/usb_host_mouse.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_host_mouse.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_host_mouse.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_host_mouse.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_host_mouse.axf: usb_host_mouse.ld +SCATTERgcc_usb_host_mouse=usb_host_mouse.ld +ENTRY_usb_host_mouse=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsimportspec new file mode 100644 index 0000000..427cc34 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsproject b/boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/.cproject b/boards/dk-tm4c129x/usb_host_mouse/ccs/.cproject new file mode 100644 index 0000000..696bc2e --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/.cproject @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/.project b/boards/dk-tm4c129x/usb_host_mouse/ccs/.project new file mode 100644 index 0000000..e5d3842 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/.project @@ -0,0 +1,75 @@ + + + usb_host_mouse + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + mouse_ui.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_mouse/startup_ccs.c + + + usb_host_mouse.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.c + + + usb_host_mouse_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_host_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.bin b/boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.bin new file mode 100644 index 0000000..8b266e4 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.out b/boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.out new file mode 100644 index 0000000..e85d862 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/ccs/Debug/usb_host_mouse.out differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_host_mouse/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_host_mouse/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_host_mouse/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.bin b/boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.bin new file mode 100644 index 0000000..3fa3aa2 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.out b/boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.out new file mode 100644 index 0000000..7afbdce Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/ewarm/Exe/usb_host_mouse.out differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.axf b/boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.axf new file mode 100644 index 0000000..3c63a96 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.axf differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.bin b/boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.bin new file mode 100644 index 0000000..44647df Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/gcc/usb_host_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.c b/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.c new file mode 100644 index 0000000..344ca0b --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.c @@ -0,0 +1,429 @@ +//***************************************************************************** +// +// mouse_ui.h - The DK-TM4C129X USB mouse application UI. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "mouse_ui.h" +#include "utils/ustdlib.h" + +//***************************************************************************** +// +// These defines are used to define the screen constraints to the application. +// +//***************************************************************************** +#define DISPLAY_BANNER_HEIGHT 18 +#define DISPLAY_TEXT_BORDER 8 +#define DISPLAY_TEXT_BORDER_H 8 +#define BUTTON_HEIGHT 18 +#define BUTTON_WIDTH 30 +#define STATUS_MIN_Y (240 - 10 - BUTTON_HEIGHT) +#define STATUS_MIDDLE_X 140 +#define BUTTON_MIN_X (MOUSE_MAX_X - (BUTTON_WIDTH * 3) - 1) + +//***************************************************************************** +// +// The cursor rectangle. +// +//***************************************************************************** +tRectangle g_sCursor; + +//***************************************************************************** +// +// Graphics context used to show text on the CSTN display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Used to remember if the UI has updated the connection status yet. +// +//***************************************************************************** +bool g_bTypeUpdated; + +//***************************************************************************** +// +// Initialize the application interface. +// +//***************************************************************************** +void +UIInit(uint32_t ui32SysClock) +{ + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-host-mouse"); + + // + // Set the font for the application. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + // + // Default to device type not yet updated. + // + g_bTypeUpdated = false; + + // + // Initial update of the screen. + // + UIUpdateStatus(); +} + +//***************************************************************************** +// +// Update one of the status boxes at the bottom of the screen. +// +//***************************************************************************** +static void +UpdateStatusBox(const tRectangle *psRect, const char *pcString, bool bActive) +{ + uint32_t ui32TextColor; + + // + // Change the status box to green for active devices. + // + if(bActive) + { + GrContextForegroundSet(&g_sContext, ClrOrange); + ui32TextColor = ClrBlack; + } + else + { + GrContextForegroundSet(&g_sContext, ClrBlack); + ui32TextColor = ClrWhite; + } + + // + // Draw the background box. + // + GrRectFill(&g_sContext, psRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Draw the box border. + // + GrRectDraw(&g_sContext, psRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, ui32TextColor); + + // + // Unknown device is currently connected. + // + GrStringDrawCentered(&g_sContext, pcString, -1, + psRect->i16XMin + ((psRect->i16XMax - psRect->i16XMin) / 2), + psRect->i16YMin + (BUTTON_HEIGHT / 2), false); + +} + +//***************************************************************************** +// +// This function updates the cursor position based on the current state +// information in the g_sStatus structure. This function takes the inputs and +// forces them to be constrained to the display area of the screen. If the +// left mouse button is pressed then the mouse will draw on the screen and if +// it is not it will move around normally. A side effect of not being able to +// read the current state of the screen is that the cursor will erase anything +// it moves over even while the left mouse button is not pressed. +// +// \return None. +// +//***************************************************************************** +static void +UpdateCursor(void) +{ + // + // If the left button is not pressed then erase the previous cursor + // position. + // + if((g_sStatus.ui32Buttons & 1) == 0) + { + // + // Erase the previous cursor. + // + GrContextForegroundSet(&g_sContext, DISPLAY_MOUSE_BG); + GrRectFill(&g_sContext, &g_sCursor); + } + + // + // Update the X position. + // + if(g_sStatus.ui32XPos >= (MOUSE_MAX_X - DISPLAY_MOUSE_SIZE)) + { + g_sCursor.i16XMin = MOUSE_MAX_X - DISPLAY_MOUSE_SIZE - 1; + } + else if(g_sStatus.ui32XPos < MOUSE_MIN_X) + { + g_sCursor.i16XMin = MOUSE_MIN_X; + } + else + { + g_sCursor.i16XMin = g_sStatus.ui32XPos; + } + + g_sCursor.i16XMax = g_sCursor.i16XMin + DISPLAY_MOUSE_SIZE; + + // + // Update the Y position. + // + if(g_sStatus.ui32YPos >= (MOUSE_MAX_Y - DISPLAY_MOUSE_SIZE)) + { + g_sCursor.i16YMin = MOUSE_MAX_Y - DISPLAY_MOUSE_SIZE - 1; + } + else if(g_sStatus.ui32YPos < MOUSE_MIN_Y) + { + g_sCursor.i16YMin = MOUSE_MIN_Y; + } + else + { + g_sCursor.i16YMin = g_sStatus.ui32YPos; + } + + g_sCursor.i16YMax = g_sCursor.i16YMin + DISPLAY_MOUSE_SIZE; + + // + // Draw the cursor at the new position. + // + GrContextForegroundSet(&g_sContext, DISPLAY_MOUSE_FG); + GrRectFill(&g_sContext, &g_sCursor); +} + +//***************************************************************************** +// +// This function will update the mouse button indicators in the status +// bar area of the screen. +// +//***************************************************************************** +static void +UpdateButtons(void) +{ + tRectangle sRect, sRectInner; + int iButton; + + // + // Initialize the button indicator position. + // + sRect.i16XMin = BUTTON_MIN_X; + sRect.i16YMin = STATUS_MIN_Y; + sRect.i16XMax = sRect.i16XMin + BUTTON_WIDTH; + sRect.i16YMax = sRect.i16YMin + BUTTON_HEIGHT ; + sRectInner.i16XMin = sRect.i16XMin + 1; + sRectInner.i16YMin = sRect.i16YMin + 1; + sRectInner.i16XMax = sRect.i16XMax - 1; + sRectInner.i16YMax = sRect.i16YMax - 1; + + // + // Check all three buttons. + // + for(iButton = 0; iButton < 3; iButton++) + { + // + // Draw the button indicator red if pressed and black if not pressed. + // + if(g_sStatus.ui32Buttons & (1 << iButton)) + { + GrContextForegroundSet(&g_sContext, ClrRed); + } + else + { + GrContextForegroundSet(&g_sContext, ClrBlack); + } + + // + // Draw the back of the button indicator. + // + GrRectFill(&g_sContext, &sRectInner); + + // + // Draw the border on the button indicator. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrRectDraw(&g_sContext, &sRect); + + // + // Move to the next button indicator position. + // + sRect.i16XMin += BUTTON_WIDTH; + sRect.i16XMax += BUTTON_WIDTH; + sRectInner.i16XMin += BUTTON_WIDTH; + sRectInner.i16XMax += BUTTON_WIDTH; + } +} + +//***************************************************************************** +// +// This function updates the status area of the screen. It uses the current +// state of the application to print the status bar. +// +//***************************************************************************** +void +UIUpdateStatus(void) +{ + uint8_t ui8DevClass, ui8DevProtocol; + static const char pcNoPos[] = "---,---"; + static const tRectangle psRect[2] = + { + { + DISPLAY_TEXT_BORDER_H, + STATUS_MIN_Y, + DISPLAY_TEXT_BORDER_H + STATUS_MIDDLE_X, + STATUS_MIN_Y + BUTTON_HEIGHT + }, + { + DISPLAY_TEXT_BORDER_H + STATUS_MIDDLE_X, + STATUS_MIN_Y, + BUTTON_MIN_X, + STATUS_MIN_Y + BUTTON_HEIGHT + }, + }; + + char pcPos[8]; + + // + // Put the application name in the middle of the banner. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + // + // Default the protocol to none. + // + ui8DevProtocol = USB_HID_PROTOCOL_NONE; + + if(g_sStatus.bConnected) + { + ui8DevClass = USBHCDDevClass(g_sStatus.ui32Instance, 0); + ui8DevProtocol = USBHCDDevProtocol(g_sStatus.ui32Instance, 0); + + // + // If the class has not yet been recognized then print out the new + // class of device that has been connected. + // + if(g_bTypeUpdated == false) + { + // + // Now the class has been updated so do not update it again. + // + g_bTypeUpdated = true; + + if(ui8DevClass == USB_CLASS_HID) + { + if(ui8DevProtocol == USB_HID_PROTOCOL_MOUSE) + { + // + // Mouse is currently connected. + // + UpdateStatusBox(&psRect[0], "Mouse", true); + } + else if(ui8DevProtocol == USB_HID_PROTOCOL_KEYB) + { + // + // Keyboard is currently connected. + // + UpdateStatusBox(&psRect[0], "Keyboard", true); + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&psRect[0], "Unknown", true); + } + } + else if(ui8DevClass == USB_CLASS_MASS_STORAGE) + { + // + // MSC device is currently connected. + // + UpdateStatusBox(&psRect[0], "Mass Storage", true); + } + else if(ui8DevClass == USB_CLASS_HUB) + { + // + // MSC device is currently connected. + // + UpdateStatusBox(&psRect[0], "Hub", true); + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&psRect[0], "Unknown", true); + } + } + } + else + { + // + // Unknown device is currently connected. + // + UpdateStatusBox(&psRect[0], "No Device", false); + + // + // No device is present so allow the class to update when a new device + // is connected. + // + g_bTypeUpdated = false; + } + + if(ui8DevProtocol == USB_HID_PROTOCOL_MOUSE) + { + // + // Update the current cursor position. + // + UpdateCursor(); + + usprintf(pcPos, "%3d,%3d", g_sCursor.i16XMin, g_sCursor.i16YMin); + UpdateStatusBox(&psRect[1], pcPos, false); + } + else + { + UpdateStatusBox(&psRect[1], pcNoPos, false); + } + + UpdateButtons(); +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.h b/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.h new file mode 100644 index 0000000..da29d30 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/mouse_ui.h @@ -0,0 +1,94 @@ +//***************************************************************************** +// +// mouse_ui.h - Header for the DK-TM4C129X USB keyboard application UI. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef _MOUSE_UI_H__ +#define _MOUSE_UI_H__ + +//***************************************************************************** +// +// The extents of the drawing area. +// +//***************************************************************************** +#define MOUSE_MIN_X 8 +#define MOUSE_MAX_X 312 +#define MOUSE_MIN_Y 25 +#define MOUSE_MAX_Y 210 + +//***************************************************************************** +// +// The mouse colors and size. +// +//***************************************************************************** +#define DISPLAY_MOUSE_BG ClrBlack +#define DISPLAY_MOUSE_FG ClrWhite +#define DISPLAY_MOUSE_SIZE 2 + +//***************************************************************************** +// +// Status of the device. +// +//***************************************************************************** +typedef struct +{ + // + // Holds if there is a device connected to this port. + // + bool bConnected; + + // + // Holds if the mouse state has been updated. + // + bool bUpdate; + + // + // The instance data for the device if bConnected is true. + // + uint32_t ui32Instance; + + // + // The mouse button state. + // + uint32_t ui32Buttons; + + // + // The mouse X position. + // + uint32_t ui32XPos; + + // + // The mouse Y position. + // + uint32_t ui32YPos; +} +tMouseStatus; + +// +// Global status information for this application. +// +extern tMouseStatus g_sStatus; + +void UIInit(uint32_t ui32SysClock); +void UIUpdateStatus(void); + +#endif diff --git a/boards/dk-tm4c129x/usb_host_mouse/readme.txt b/boards/dk-tm4c129x/usb_host_mouse/readme.txt new file mode 100644 index 0000000..7d69ef4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/readme.txt @@ -0,0 +1,36 @@ +USB Host mouse example(usb_host_mouse) + +This example application demonstrates how to support a USB mouse using +the DK-TM4C129X development board. This application supports only a +standard mouse HID device, but can report on the types of other devices +that are connected without having the ability to access them. +The bottom left status bar reports the +type of device attached. The user interface for the application is +handled in the mouse_ui.c file while the usb_host_mouse.c file +handles start up and the USB interface. + +The application can be recompiled to run using and external USB phy to +implement a high speed host using an external USB phy. To use the external +phy the application must be built with \b USE_ULPI defined. This disables +the internal phy and the connector on the DK-TM4C129X board and enables the +connections to the external ULPI phy pins on the DK-TM4C129X board. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.axf b/boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.axf new file mode 100644 index 0000000..7e86dd8 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.axf differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.bin b/boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.bin new file mode 100644 index 0000000..405c55b Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_mouse/rvmdk/usb_host_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_host_mouse/startup_ccs.c b/boards/dk-tm4c129x/usb_host_mouse/startup_ccs.c new file mode 100644 index 0000000..241fab2 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/startup_ccs.c @@ -0,0 +1,275 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/startup_ewarm.c b/boards/dk-tm4c129x/usb_host_mouse/startup_ewarm.c new file mode 100644 index 0000000..76a7c18 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/startup_ewarm.c @@ -0,0 +1,306 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/startup_gcc.c b/boards/dk-tm4c129x/usb_host_mouse/startup_gcc.c new file mode 100644 index 0000000..73b7020 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/startup_gcc.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the interrupt handler used by the application. +// +//***************************************************************************** +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/startup_rvmdk.S b/boards/dk-tm4c129x/usb_host_mouse/startup_rvmdk.S new file mode 100644 index 0000000..28288a3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/startup_rvmdk.S @@ -0,0 +1,331 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declaration for the interrupt handler used by the application. +; +;****************************************************************************** + EXTERN USB0HostIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0HostIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.c b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.c new file mode 100644 index 0000000..268ba51 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.c @@ -0,0 +1,553 @@ +//***************************************************************************** +// +// usb_host_mouse.c - An example using that supports a mouse. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhhid.h" +#include "usblib/host/usbhhidmouse.h" +#include "drivers/pinout.h" +#include "mouse_ui.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Host mouse example(usb_host_mouse)

      +//! +//! This example application demonstrates how to support a USB mouse using +//! the DK-TM4C129X development board. This application supports only a +//! standard mouse HID device, but can report on the types of other devices +//! that are connected without having the ability to access them. +//! The bottom left status bar reports the +//! type of device attached. The user interface for the application is +//! handled in the mouse_ui.c file while the usb_host_mouse.c file +//! handles start up and the USB interface. +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed host using an external USB phy. To use the external +//! phy the application must be built with \b USE_ULPI defined. This disables +//! the internal phy and the connector on the DK-TM4C129X board and enables the +//! connections to the external ULPI phy pins on the DK-TM4C129X board. +// +//***************************************************************************** + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The global application status structure. +// +//***************************************************************************** +tMouseStatus g_sStatus; + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pui8HCDPool[HCD_MEMORY_SIZE * MAX_USB_DEVICES]; + +//***************************************************************************** +// +// Declare the USB Events driver interface. +// +//***************************************************************************** +DECLARE_EVENT_DRIVER(g_sUSBEventDriver, 0, 0, USBHCDEvents); + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the HID class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHIDClassDriver, + &g_sUSBEventDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +static const uint32_t g_ui32NumHostClassDrivers = + sizeof(g_ppHostClassDrivers) / sizeof(tUSBHostClassDriver *); + +//***************************************************************************** +// +// The global value used to store the mouse instance value. +// +//***************************************************************************** +static tUSBHMouse *g_psMouse; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// This enumerated type is used to hold the states of the mouse. +// +//***************************************************************************** +enum +{ + // + // No device is present. + // + eStateNoDevice, + + // + // Mouse has been detected and needs to be initialized in the main loop. + // + eStateMouseInit, + + // + // Mouse is connected and waiting for events. + // + eStateMouseConnected, +} +g_iMouseState; + +//***************************************************************************** +// +// This is the callback from the USB HID mouse handler. +// +// pvCBData is ignored by this function. +// ui32Event is one of the valid events for a mouse device. +// ui32MsgParam is defined by the event that occurs. +// pvMsgData is a pointer to data that is defined by the event that +// occurs. +// +// This function will be called to inform the application when a mouse has +// been plugged in or removed and any time a mouse movement or button pressed +// has occurred. +// +// This function will return 0. +// +//***************************************************************************** +void +MouseCallback(tUSBHMouse *psMouse, uint32_t ui32Event, uint32_t ui32MsgParam, + void *pvMsgData) +{ + int32_t i32Pos; + + switch(ui32Event) + { + // + // New mouse detected. + // + case USB_EVENT_CONNECTED: + { + // + // Proceed to the eStateMouseInit state so that the main loop + // can finish initializing the mouse since USBHMouseInit() cannot + // be called from within a callback. + // + g_iMouseState = eStateMouseInit; + + break; + } + + // + // Mouse has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Change the state so that the main loop knows that a device is no + // longer present. + // + g_iMouseState = eStateNoDevice; + + // + // Need to clear out any held buttons. + // + g_sStatus.ui32Buttons = 0; + + g_sStatus.bUpdate = true; + + break; + } + + // + // New button press detected. + // + case USBH_EVENT_HID_MS_PRESS: + { + // + // Save the new button that was pressed. + // + g_sStatus.ui32Buttons |= ui32MsgParam; + + g_sStatus.bUpdate = true; + + break; + } + + // + // A button was released on a HID mouse. + // + case USBH_EVENT_HID_MS_REL: + { + // + // Remove the button from the pressed state. + // + g_sStatus.ui32Buttons &= ~ui32MsgParam; + + g_sStatus.bUpdate = true; + + break; + } + + // + // The HID mouse detected movement in the X direction. + // + case USBH_EVENT_HID_MS_X: + { + // + // Update the cursor X position. + // This has to be calculated as an intermediate signed value + // because the position can go negative with fast movements. + // + i32Pos = g_sStatus.ui32XPos + (int8_t)ui32MsgParam; + + if(i32Pos < 0) + { + g_sStatus.ui32XPos = MOUSE_MIN_X; + } + else + { + g_sStatus.ui32XPos = (uint32_t)i32Pos; + } + + if(g_sStatus.ui32XPos < MOUSE_MIN_X) + { + g_sStatus.ui32XPos = MOUSE_MIN_X; + } + + if(g_sStatus.ui32XPos > MOUSE_MAX_X) + { + g_sStatus.ui32XPos = MOUSE_MAX_X; + } + + g_sStatus.bUpdate = true; + + break; + } + + // + // The HID mouse detected movement in the Y direction. + // + case USBH_EVENT_HID_MS_Y: + { + // + // Update the cursor Y position. + // This has to be calculated as an intermediate signed value + // because the position can go negative with fast movements. + // + i32Pos = (int32_t)g_sStatus.ui32YPos + (int8_t)ui32MsgParam; + + if(i32Pos < 0) + { + g_sStatus.ui32YPos = MOUSE_MIN_Y; + } + else + { + g_sStatus.ui32YPos = (uint32_t)i32Pos; + } + + if(g_sStatus.ui32YPos < MOUSE_MIN_Y) + { + g_sStatus.ui32YPos = MOUSE_MIN_Y; + } + + if(g_sStatus.ui32YPos > MOUSE_MAX_Y) + { + g_sStatus.ui32YPos = MOUSE_MAX_Y; + } + + g_sStatus.bUpdate = true; + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// The main routine for handling the USB mouse. +// +//***************************************************************************** +void +MouseMain(void) +{ + switch(g_iMouseState) + { + // + // This state is entered when they mouse is first detected. + // + case eStateMouseInit: + { + // + // Initialized the newly connected mouse. + // + USBHMouseInit(g_psMouse); + + // + // Proceed to the mouse connected state. + // + g_iMouseState = eStateMouseConnected; + + break; + } + case eStateMouseConnected: + default: + { + if(g_sStatus.bUpdate == true) + { + g_sStatus.bUpdate = false; + + UIUpdateStatus(); + } + break; + } + } +} + +//***************************************************************************** +// +// This is the generic callback from host stack. +// +// pvData is actually a pointer to a tEventInfo structure. +// +// This function will be called to inform the application when a USB event has +// occurred that is outside those related to the mouse device. At this +// point this is used to detect unsupported devices being inserted and removed. +// It is also used to inform the application when a power fault has occurred. +// This function is required when the g_USBGenericEventDriver is included in +// the host controller driver array that is passed in to the +// USBHCDRegisterDrivers() function. +// +//***************************************************************************** +void +USBHCDEvents(void *pvData) +{ + tEventInfo *pEventInfo; + + // + // Cast this pointer to its actual type. + // + pEventInfo = (tEventInfo *)pvData; + + switch(pEventInfo->ui32Event) + { + case USB_EVENT_UNKNOWN_CONNECTED: + case USB_EVENT_CONNECTED: + { + // + // Save the device instance data. + // + g_sStatus.ui32Instance = pEventInfo->ui32Instance; + g_sStatus.bConnected = true; + + // + // Update the port status for the new device. + // + UIUpdateStatus(); + + break; + } + // + // A device has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Device is no longer connected. + // + g_sStatus.bConnected = false; + + // + // Update the port status for the new device. + // + UIUpdateStatus(); + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// The main application loop. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock, ui32PLLRate; +#ifdef USE_ULPI + uint32_t ui32Setting; +#endif + + // + // Set the application to run at 120 MHz with a PLL frequency of 480 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Set the part pin out appropriately for this device. + // + PinoutSet(); + +#ifdef USE_ULPI + // + // Switch the USB ULPI Pins over. + // + USBULPIPinoutSet(); + + // + // Enable USB ULPI with high speed support. + // + ui32Setting = USBLIB_FEATURE_ULPI_HS; + USBOTGFeatureSet(0, USBLIB_FEATURE_USBULPI, &ui32Setting); + + // + // Setting the PLL frequency to zero tells the USB library to use the + // external USB clock. + // + ui32PLLRate = 0; +#else + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; +#endif + + // + // Initialize the connection status. + // + g_sStatus.bConnected = false; + g_sStatus.ui32Buttons = 0; + + // + // Enable Clocking to the USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + + // + // Enable Interrupts + // + ROM_IntMasterEnable(); + + // + // Initialize the USB stack mode and pass in a mode callback. + // + USBStackModeSet(0, eUSBModeHost, 0); + + // + // Register the host class drivers. + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, g_ui32NumHostClassDrivers); + + // + // Open an instance of the mouse driver. The mouse does not need + // to be present at this time, this just save a place for it and allows + // the applications to be notified when a mouse is present. + // + g_psMouse = USBHMouseOpen(MouseCallback, 0, 0); + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Tell the USB library the CPU clock and the PLL frequency. This is a + // new requirement for TM4C129 devices. + // + USBHCDFeatureSet(0, USBLIB_FEATURE_CPUCLK, &ui32SysClock); + USBHCDFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Initialize the USB controller for Host mode. + // + USBHCDInit(0, g_pui8HCDPool, sizeof(g_pui8HCDPool)); + + // + // Initialize the UI elements. + // + UIInit(ui32SysClock); + + // + // The main loop for the application. + // + while(1) + { + // + // Call the USB library to let non-interrupt code run. + // + USBHCDMain(); + + // + // Call the mouse and mass storage main routines. + // + MouseMain(); + } +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewd b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewp b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewp new file mode 100644 index 0000000..e6e3efb --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ewp @@ -0,0 +1,807 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\mouse_ui.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\usb_host_mouse.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.icf b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.icf new file mode 100644 index 0000000..da51a4f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_host_mouse.icf - Linker configuration file for usb_host_mouse. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ld b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ld new file mode 100644 index 0000000..e889167 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_host_mouse.ld - Linker configuration file for usb_host_mouse. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.sct b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.sct new file mode 100644 index 0000000..84044ff --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_host_mouse.sct - Linker configuration file for usb_host_mouse. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvopt b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvopt new file mode 100644 index 0000000..f4f2ddb --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvopt @@ -0,0 +1,387 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_host_mouse + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\mouse_ui.c + mouse_ui.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 5 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_mouse.c + usb_host_mouse.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 11 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvproj b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvproj new file mode 100644 index 0000000..270017c --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse.uvproj @@ -0,0 +1,459 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_host_mouse + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_host_mouse + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_host_mouse.bin .\rvmdk\usb_host_mouse.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_host_mouse.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + mouse_ui.c + 1 + .\mouse_ui.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + usb_host_mouse.c + 1 + .\usb_host_mouse.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse_ccs.cmd b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse_ccs.cmd new file mode 100644 index 0000000..9ec800f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_mouse/usb_host_mouse_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_host_mouse_ccs.cmd - CCS linker configuration file for usb_host_mouse. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/usb_host_msc/Makefile b/boards/dk-tm4c129x/usb_host_msc/Makefile new file mode 100644 index 0000000..02c02dd --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/Makefile @@ -0,0 +1,98 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB host mass storage example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../third_party/fatfs/port +VPATH+=../../../../third_party/fatfs/src +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. +IPATH+=../../../../third_party + +# +# The default rule, which causes the USB host mass storage example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_host_msc.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB host mass storage example. +# +${COMPILER}/usb_host_msc.axf: ${COMPILER}/fat_usbmsc.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/ff.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/frame.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/touch.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/usb_host_msc.o +${COMPILER}/usb_host_msc.axf: ${COMPILER}/ustdlib.o +${COMPILER}/usb_host_msc.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_host_msc.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_host_msc.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_host_msc.axf: usb_host_msc.ld +SCATTERgcc_usb_host_msc=usb_host_msc.ld +ENTRY_usb_host_msc=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_host_msc/ccs/.ccsimportspec new file mode 100644 index 0000000..252e9bb --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/.ccsproject b/boards/dk-tm4c129x/usb_host_msc/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/.cproject b/boards/dk-tm4c129x/usb_host_msc/ccs/.cproject new file mode 100644 index 0000000..05e2a09 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/.project b/boards/dk-tm4c129x/usb_host_msc/ccs/.project new file mode 100644 index 0000000..192a5e8 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/.project @@ -0,0 +1,85 @@ + + + usb_host_msc + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_msc/startup_ccs.c + + + usb_host_msc.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.c + + + usb_host_msc_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_host_msc/usb_host_msc_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + third_party/fatfs/port/fat_usbmsc.c + 1 + SW_ROOT/third_party/fatfs/port/fat_usbmsc.c + + + third_party/fatfs/src/ff.c + 1 + SW_ROOT/third_party/fatfs/src/ff.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_host_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.bin b/boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.bin new file mode 100644 index 0000000..5ab4eda Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.out b/boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.out new file mode 100644 index 0000000..d19d86e Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/ccs/Debug/usb_host_msc.out differ diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_host_msc/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_host_msc/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_host_msc/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.bin b/boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.bin new file mode 100644 index 0000000..125f699 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.out b/boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.out new file mode 100644 index 0000000..6f63440 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/ewarm/Exe/usb_host_msc.out differ diff --git a/boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.axf b/boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.axf new file mode 100644 index 0000000..5d05e07 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.axf differ diff --git a/boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.bin b/boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.bin new file mode 100644 index 0000000..d0ef3b2 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/gcc/usb_host_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_host_msc/readme.txt b/boards/dk-tm4c129x/usb_host_msc/readme.txt new file mode 100644 index 0000000..b77aca9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/readme.txt @@ -0,0 +1,35 @@ +USB Mass Storage Class Host Example + +This example application demonstrates reading a file system from +a USB flash disk. It makes use of FatFs, a FAT file system driver. It +provides a simple widget-based interface on the display for viewing and +navigating the file system on the flash disk. + +For additional details about FatFs, see the following site: +http://elm-chan.org/fsw/ff/00index_e.html + +The application can be recompiled to run using and external USB phy to +implement a high speed host using an external USB phy. To use the external +phy the application must be built with \b USE_ULPI defined. This disables +the internal phy and the connector on the DK-TM4C129X board and enables the +connections to the external ULPI phy pins on the DK-TM4C129X board. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.axf b/boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.axf new file mode 100644 index 0000000..618f93b Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.axf differ diff --git a/boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.bin b/boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.bin new file mode 100644 index 0000000..dc08ad5 Binary files /dev/null and b/boards/dk-tm4c129x/usb_host_msc/rvmdk/usb_host_msc.bin differ diff --git a/boards/dk-tm4c129x/usb_host_msc/startup_ccs.c b/boards/dk-tm4c129x/usb_host_msc/startup_ccs.c new file mode 100644 index 0000000..5bf38b3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_msc/startup_ewarm.c b/boards/dk-tm4c129x/usb_host_msc/startup_ewarm.c new file mode 100644 index 0000000..cad5a03 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_msc/startup_gcc.c b/boards/dk-tm4c129x/usb_host_msc/startup_gcc.c new file mode 100644 index 0000000..ae0bddc --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[512]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_host_msc/startup_rvmdk.S b/boards/dk-tm4c129x/usb_host_msc/startup_rvmdk.S new file mode 100644 index 0000000..80a2337 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000800 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickHandler + EXTERN USB0OTGModeIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0OTGModeIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.c b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.c new file mode 100644 index 0000000..2f65dd3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.c @@ -0,0 +1,1591 @@ +//***************************************************************************** +// +// usb_host_msc.c - Example program for reading files from a USB flash drive. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/systick.h" +#include "driverlib/udma.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "grlib/canvas.h" +#include "grlib/listbox.h" +#include "grlib/pushbutton.h" +#include "usblib/usblib.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhmsc.h" +#include "utils/ustdlib.h" +#include "third_party/fatfs/src/ff.h" +#include "third_party/fatfs/src/diskio.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Mass Storage Class Host Example (usb_host_msc)

      +//! +//! This example application demonstrates reading a file system from +//! a USB flash disk. It makes use of FatFs, a FAT file system driver. It +//! provides a simple widget-based interface on the display for viewing and +//! navigating the file system on the flash disk. +//! +//! For additional details about FatFs, see the following site: +//! http://elm-chan.org/fsw/ff/00index_e.html +//! +//! The application can be recompiled to run using and external USB phy to +//! implement a high speed host using an external USB phy. To use the external +//! phy the application must be built with \b USE_ULPI defined. This disables +//! the internal phy and the connector on the DK-TM4C129X board and enables the +//! connections to the external ULPI phy pins on the DK-TM4C129X board. +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines the size of the buffers that hold the path, or temporary +// data from the USB disk. There are two buffers allocated of this size. +// The buffer size must be large enough to hold the int32_test expected +// full path name, including the file name, and a trailing null character. +// +//***************************************************************************** +#define PATH_BUF_SIZE 80 + +//***************************************************************************** +// +// Defines the size of the buffer that holds the command line. +// +//***************************************************************************** +#define CMD_BUF_SIZE 64 + +//***************************************************************************** +// +// Defines the number of times to call to check if the attached device is +// ready. +// +//***************************************************************************** +#define USBMSC_DRIVE_RETRY 4 + +//***************************************************************************** +// +// This buffer holds the full path to the current working directory. +// Initially it is root ("/"). +// +//***************************************************************************** +static char g_cCwdBuf[PATH_BUF_SIZE] = "/"; + +//***************************************************************************** +// +// A temporary data buffer used when manipulating file paths, or reading data +// from the SD card. +// +//***************************************************************************** +static char g_cTmpBuf[PATH_BUF_SIZE]; + +//***************************************************************************** +// +// The following are data structures used by FatFs. +// +//***************************************************************************** +static FATFS g_sFatFs; +static DIR g_sDirObject; +static FILINFO g_sFileInfo; + +//***************************************************************************** +// +// A structure that holds a mapping between an FRESULT numerical code, +// and a string representation. FRESULT codes are returned from the FatFs +// FAT file system driver. +// +//***************************************************************************** +typedef struct +{ + FRESULT fresult; + char *pcResultStr; +} +tFresultString; + +//***************************************************************************** +// +// A macro to make it easy to add result codes to the table. +// +//***************************************************************************** +#define FRESULT_ENTRY(f) { (f), (#f) } + +//***************************************************************************** +// +// A table that holds a mapping between the numerical FRESULT code and +// it's name as a string. This is used for looking up error codes for +// printing to the screen. +// +//***************************************************************************** +tFresultString g_cFresultStrings[] = +{ + FRESULT_ENTRY(FR_OK), + FRESULT_ENTRY(FR_DISK_ERR), + FRESULT_ENTRY(FR_INT_ERR), + FRESULT_ENTRY(FR_NOT_READY), + FRESULT_ENTRY(FR_NO_FILE), + FRESULT_ENTRY(FR_NO_PATH), + FRESULT_ENTRY(FR_INVALID_NAME), + FRESULT_ENTRY(FR_DENIED), + FRESULT_ENTRY(FR_EXIST), + FRESULT_ENTRY(FR_INVALID_OBJECT), + FRESULT_ENTRY(FR_WRITE_PROTECTED), + FRESULT_ENTRY(FR_INVALID_DRIVE), + FRESULT_ENTRY(FR_NOT_ENABLED), + FRESULT_ENTRY(FR_NO_FILESYSTEM), + FRESULT_ENTRY(FR_MKFS_ABORTED), + FRESULT_ENTRY(FR_TIMEOUT), + FRESULT_ENTRY(FR_LOCKED), + FRESULT_ENTRY(FR_NOT_ENOUGH_CORE), + FRESULT_ENTRY(FR_TOO_MANY_OPEN_FILES), + FRESULT_ENTRY(FR_INVALID_PARAMETER), +}; + +//***************************************************************************** +// +// Error reasons returned by ChangeDirectory(). +// +//***************************************************************************** +#define NAME_TOO_LONG_ERROR 1 +#define OPENDIR_ERROR 2 + +//***************************************************************************** +// +// A macro that holds the number of result codes. +// +//***************************************************************************** +#define NUM_FRESULT_CODES (sizeof(g_cFresultStrings) / sizeof(tFresultString)) + +//***************************************************************************** +// +// The number of SysTick ticks per second. +// +//***************************************************************************** +#define TICKS_PER_SECOND 100 +#define MS_PER_SYSTICK (1000 / TICKS_PER_SECOND) + +//***************************************************************************** +// +// Our running system tick counter and a global used to determine the time +// elapsed since last call to GetTickms(). +// +//***************************************************************************** +uint32_t g_ui32SysTickCount; +uint32_t g_ui32LastTick; + +//***************************************************************************** +// +// Storage for the filename listbox widget string table. +// +//***************************************************************************** +#define NUM_LIST_STRINGS 48 +const char *g_ppcDirListStrings[NUM_LIST_STRINGS]; + +//***************************************************************************** +// +// Storage for the names of the files in the current directory. Filenames +// are stored in format "(D) filename.ext" for directories or "(F) filename.ext" +// for files. +// +//***************************************************************************** +#define MAX_FILENAME_STRING_LEN (4 + 8 + 1 + 3 + 1) +char g_pcFilenames[NUM_LIST_STRINGS][MAX_FILENAME_STRING_LEN]; + +//***************************************************************************** +// +// Storage for the strings which appear in the status box at the bottom of the +// display. +// +//**************************************************************************** +#define NUM_STATUS_STRINGS 6 +#define MAX_STATUS_STRING_LEN (36 + 1) +char g_pcStatus[NUM_STATUS_STRINGS][MAX_STATUS_STRING_LEN]; + +//***************************************************************************** +// +// Holds global flags for the system. +// +//***************************************************************************** +uint32_t g_ui32Flags = 0; + +//***************************************************************************** +// +// Flag indicating that some USB device is connected. +// +//***************************************************************************** +#define FLAGS_DEVICE_PRESENT 0x00000001 + +//***************************************************************************** +// +// Hold the current state for the application. +// +//***************************************************************************** +volatile enum +{ + // + // No device is present. + // + STATE_NO_DEVICE, + + // + // Mass storage device is being enumerated. + // + STATE_DEVICE_ENUM, + + // + // Mass storage device is ready. + // + STATE_DEVICE_READY, + + // + // An unsupported device has been attached. + // + STATE_UNKNOWN_DEVICE, + + // + // A mass storage device was connected but failed to ever report ready. + // + STATE_TIMEOUT_DEVICE, + + // + // A power fault has occurred. + // + STATE_POWER_FAULT +} +g_eState; + +//***************************************************************************** +// +// The current USB operating mode - Host, Device or unknown. +// +//***************************************************************************** +tUSBMode g_eCurrentUSBMode; + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pHCDPool[HCD_MEMORY_SIZE]; + +//***************************************************************************** +// +// The instance data for the MSC driver. +// +//***************************************************************************** +tUSBHMSCInstance *g_psMSCInstance = 0; + +//***************************************************************************** +// +// Declare the USB Events driver interface. +// +//***************************************************************************** +DECLARE_EVENT_DRIVER(g_sUSBEventDriver, 0, 0, USBHCDEvents); + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the MSC class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHostMSCClassDriver, + &g_sUSBEventDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +static const uint32_t g_ui32NumHostClassDrivers = + sizeof(g_ppHostClassDrivers) / sizeof(tUSBHostClassDriver *); + +//***************************************************************************** +// +// The control table used by the uDMA controller. This table must be aligned +// to a 1024 byte boundary. In this application uDMA is only used for USB, +// so only the first 6 channels are needed. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_sDMAControlTable[6]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_sDMAControlTable, 1024) +tDMAControlTable g_sDMAControlTable[6]; +#else +tDMAControlTable g_sDMAControlTable[6] __attribute__ ((aligned(1024))); +#endif + +//***************************************************************************** +// +// Storage for the status listbox widget string table. +// +//***************************************************************************** +const char *g_ppcStatusStrings[NUM_STATUS_STRINGS] = +{ + g_pcStatus[0], + g_pcStatus[1], + g_pcStatus[2], + g_pcStatus[3], + g_pcStatus[4], + g_pcStatus[5] +}; +uint32_t g_ui32StatusStringIndex = 0; + +//***************************************************************************** +// +// Forward declarations for functions called by the widgets used in the user +// interface. +// +//***************************************************************************** +void OnListBoxChange(tWidget *pWidget, int16_t ui16Selected); +void OnBtnCD(tWidget *pWidget); +void OnBtnUp(tWidget *pWidget); +static int PopulateFileListBox(bool bRedraw); +static FRESULT ChangeToDirectory(char *pcDirectory, uint32_t *pui32Reason); +static int PrintfStatus(char *pcFormat, ...); +static const char *StringFromFresult(FRESULT fresult); + +//***************************************************************************** +// +// Widget definitions +// +//***************************************************************************** + +//***************************************************************************** +// +// The listbox used to display directory contents. +// +//***************************************************************************** +extern tCanvasWidget g_sBackground; +extern tCanvasWidget g_sUpBackground; +extern tCanvasWidget g_sCDBackground; + +ListBox(g_sStatusList, &g_sBackground, 0, 0, &g_sKentec320x240x16_SSD2119, + 40, 170, 220, 52, (LISTBOX_STYLE_OUTLINE | LISTBOX_STYLE_LOCKED | + LISTBOX_STYLE_WRAP), ClrBlack, ClrBlack, ClrSilver, ClrSilver, ClrWhite, + &g_sFontFixed6x8, g_ppcStatusStrings, NUM_STATUS_STRINGS, + NUM_STATUS_STRINGS, 0); + +ListBox(g_sDirList, &g_sBackground, &g_sStatusList, 0, + &g_sKentec320x240x16_SSD2119, + 40, 60, 120, 100, LISTBOX_STYLE_OUTLINE, ClrBlack, ClrDarkBlue, + ClrSilver, ClrWhite, ClrWhite, &g_sFontCmss12, g_ppcDirListStrings, + NUM_LIST_STRINGS, 0, OnListBoxChange); + +//***************************************************************************** +// +// The canvas widget used to show the current directory. +// +//***************************************************************************** +Canvas(g_sPWDTitle, &g_sBackground, &g_sDirList, 0, + &g_sKentec320x240x16_SSD2119, 10, 35, 40, 20, CANVAS_STYLE_TEXT, + ClrBlack, 0, ClrWhite, &g_sFontCmss12, "PWD:", 0, 0); + +//***************************************************************************** +// +// The canvas widget used to show the current directory. +// +//***************************************************************************** +Canvas(g_sPWD, &g_sBackground, &g_sPWDTitle, 0, &g_sKentec320x240x16_SSD2119, + 50, 35, 260, 20, (CANVAS_STYLE_TEXT | CANVAS_STYLE_FILL | + CANVAS_STYLE_TEXT_LEFT), ClrBlack, 0, ClrWhite, &g_sFontCmss12, + g_cCwdBuf, 0, 0); + +//***************************************************************************** +// +// The button used to change to the selected directory directory. +// +//***************************************************************************** +RectangularButton(g_sCDBtn, &g_sCDBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 170, 75, 90, 30, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY), + ClrBlack, ClrBlue, ClrWhite, ClrWhite, + &g_sFontCm20, "CD", 0, 0, 0, 0, OnBtnCD); + +//***************************************************************************** +// +// The canvas widget acting as the background to the CD button. +// +//***************************************************************************** +Canvas(g_sCDBackground, WIDGET_ROOT, 0, 0, + &g_sKentec320x240x16_SSD2119, 170, 75, 90, 30, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The button used to change to the next higher directory. +// +//***************************************************************************** +RectangularButton(g_sUpBtn, &g_sUpBackground, 0, 0, + &g_sKentec320x240x16_SSD2119, 170, 115, 90, 30, + (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT | + PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY), + ClrBlack, ClrBlue, ClrWhite, ClrWhite, + &g_sFontCm20, "Up", 0, 0, 0, 0, OnBtnUp); + +//***************************************************************************** +// +// The canvas widget acting as the background to the UP button. +// +//***************************************************************************** +Canvas(g_sUpBackground, WIDGET_ROOT, &g_sCDBackground, 0, + &g_sKentec320x240x16_SSD2119, 170, 115, 90, 30, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The canvas widget acting as the background to the left portion of the +// display. +// +//***************************************************************************** +Canvas(g_sBackground, WIDGET_ROOT, &g_sUpBackground, &g_sPWD, + &g_sKentec320x240x16_SSD2119, 10, 60, 120, 170, + CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(int8_t *pi8Filename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The listbox widget callback function. +// +// This function is called whenever someone changes the selected entry in the +// listbox containing the files and directories found in the current directory. +// +//***************************************************************************** +void +OnListBoxChange(tWidget *pWidget, int16_t ui16Selected) +{ + int16_t i16Selected; + + // + // If no USB drive is present, just ignore this. + // + if(g_eState != STATE_DEVICE_READY) + { + return; + } + + // + // Get the current selection from the list box. + // + i16Selected = ListBoxSelectionGet(&g_sDirList); + + // + // Is there any selection? + // + if(i16Selected == -1) + { + return; + } + else + { + // + // Is the selection a directory name? + // + if(g_pcFilenames[i16Selected][1] == 'D') + { + // + // Enable the "CD" button. + // + WidgetAdd((tWidget *)&g_sCDBackground, (tWidget *)&g_sCDBtn); + } + else + { + // + // Hide the "CD" button. + // + WidgetRemove((tWidget *)&g_sCDBtn); + } + + // + // Make sure the CD button (or its background) is drawn correctly). + // + WidgetPaint((tWidget *)&g_sCDBackground); + } + + // + // Update the status display to say what we've done. + // + PrintfStatus("Selected %s %s\n", + (g_pcFilenames[i16Selected][1] == 'D') ? "dir" : "file", + &g_pcFilenames[i16Selected][4]); +} + +//***************************************************************************** +// +// The "CD" button widget callback function. +// +// This function is called whenever someone presses the "CD" button. +// +//***************************************************************************** +void +OnBtnCD(tWidget *pWidget) +{ + int16_t i16Selected; + uint32_t ui32Reason; + FRESULT fresult; + // + // Get the current selection from the list box. + // + i16Selected = ListBoxSelectionGet(&g_sDirList); + + // + // Is there any selection? + // + if(i16Selected == -1) + { + return; + } + else + { + // + // Is the selection a directory name? + // + if(g_pcFilenames[i16Selected][1] == 'D') + { + // + // Yes - change to the new directory. + // + fresult = ChangeToDirectory(&g_pcFilenames[i16Selected][4], + &ui32Reason); + + if(fresult != FR_OK) + { + // + // Update the status display to show the error. + // + PrintfStatus("Error changing directory."); + PrintfStatus((char *)StringFromFresult(fresult)); + } + else + { + // + // Tell the user what happened. + // + PrintfStatus("Changed to %s", g_cCwdBuf); + + // + // Update the directory name and the list box contents. + // + PopulateFileListBox(true); + WidgetPaint((tWidget *)&g_sPWD); + + // + // Enable the "Up" button and disable the "CD" button. + // + WidgetAdd((tWidget *)&g_sUpBackground, (tWidget *)&g_sUpBtn); + WidgetRemove((tWidget *)&g_sCDBtn); + + // + // Make sure the buttons are repainted correctly. + // + WidgetPaint((tWidget *)&g_sUpBtn); + WidgetPaint((tWidget *)&g_sCDBackground); + } + } + } +} + +//***************************************************************************** +// +// The "Up" button widget callback function. +// +// This function is called whenever someone presses the "Up" button. +// +//***************************************************************************** +void +OnBtnUp(tWidget *pWidget) +{ + uint32_t ui32Reason; + FRESULT fresult; + + // + // Change up one directory. + // + fresult = ChangeToDirectory("..", &ui32Reason); + + if(fresult != FR_OK) + { + // + // Update the status display to show the error. + // + PrintfStatus("Error changing directory."); + PrintfStatus((char *)StringFromFresult(fresult)); + } + else + { + // + // Update the directory name and the list box contents. + // + WidgetPaint((tWidget *)&g_sPWD); + PopulateFileListBox(true); + + // + // If we are now in the root directory, hide the "Up" button. + // + if((strlen(g_cCwdBuf) == 1) && (g_cCwdBuf[0] == '/')) + { + WidgetRemove((tWidget *)&g_sUpBtn); + } + else + { + WidgetAdd((tWidget *)&g_sUpBackground, (tWidget *)&g_sUpBtn); + } + + // + // Disable the CD button since re-populating the list removes the + // selection. + // + WidgetRemove((tWidget *)&g_sCDBtn); + + // + // Tell the user what happened. + // + PrintfStatus("Changed to %s", g_cCwdBuf); + + // + // Repaint the buttons. + // + WidgetPaint((tWidget *)&g_sUpBackground); + WidgetPaint((tWidget *)&g_sCDBackground); + } +} + +//***************************************************************************** +// +// This function is used to add a new string to the status list box at the +// bottom of the display. +// +//***************************************************************************** +static int +PrintfStatus(char *pi8Format, ...) +{ + int iRet; + va_list vaArgP; + + // + // Start the varargs processing. + // + va_start(vaArgP, pi8Format); + + // + // Call vsnprintf to perform the conversion. + // + iRet = uvsnprintf(g_pcStatus[g_ui32StatusStringIndex], + MAX_STATUS_STRING_LEN, pi8Format, vaArgP); + + // + // End the varargs processing. + // + va_end(vaArgP); + + // + // Add the new string to the status listbox. + // + ListBoxTextAdd(&g_sStatusList, g_pcStatus[g_ui32StatusStringIndex]); + + // + // Update our string index. + // + g_ui32StatusStringIndex++; + if(g_ui32StatusStringIndex == NUM_STATUS_STRINGS) + { + g_ui32StatusStringIndex = 0; + } + + // + // Repaint the status listbox. + // + WidgetPaint((tWidget *)&g_sStatusList); + + // + // Return the conversion count. + // + return(iRet); + +} + +//***************************************************************************** +// +// This function returns a string representation of an error code +// that was returned from a function call to FatFs. It can be used +// for printing human readable error messages. +// +//***************************************************************************** +static const char * +StringFromFresult(FRESULT fresult) +{ + unsigned int uIdx; + + // + // Enter a loop to search the error code table for a matching + // error code. + // + for(uIdx = 0; uIdx < NUM_FRESULT_CODES; uIdx++) + { + // + // If a match is found, then return the string name of the + // error code. + // + if(g_cFresultStrings[uIdx].fresult == fresult) + { + return(g_cFresultStrings[uIdx].pcResultStr); + } + } + + // + // At this point no matching code was found, so return a + // string indicating unknown error. + // + return("UNKNOWN ERROR CODE"); +} + +//***************************************************************************** +// +// This is the handler for this SysTick interrupt. FatFs requires a +// timer tick every 10 ms for internal timing purposes. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + // + // Update our tick counter. + // + g_ui32SysTickCount++; +} + +//***************************************************************************** +// +// Initializes the file system module. +// +// \param None. +// +// This function initializes the third party FAT implementation. +// +// \return Returns \e true on success or \e false on failure. +// +//***************************************************************************** +static bool +FileInit(void) +{ + // + // Mount the file system, using logical disk 0. + // + if(f_mount(0, &g_sFatFs) != FR_OK) + { + return(false); + } + return(true); +} + +//***************************************************************************** +// +// This is the callback from the MSC driver. +// +// \param ps32Instance is the driver instance which is needed when communicating +// with the driver. +// \param ui32Event is one of the events defined by the driver. +// \param pvData is a pointer to data passed into the initial call to register +// the callback. +// +// This function handles callback events from the MSC driver. The only events +// currently handled are the MSC_EVENT_OPEN and MSC_EVENT_CLOSE. This allows +// the main routine to know when an MSC device has been detected and +// enumerated and when an MSC device has been removed from the system. +// +// \return None +// +//***************************************************************************** +static void +MSCCallback(tUSBHMSCInstance *ps32Instance, uint32_t ui32Event, void *pvData) +{ + // + // Determine the event. + // + switch(ui32Event) + { + // + // Called when the device driver has successfully enumerated an MSC + // device. + // + case MSC_EVENT_OPEN: + { + // + // Proceed to the enumeration state. + // + g_eState = STATE_DEVICE_ENUM; + + break; + } + + // + // Called when the device driver has been unloaded due to error or + // the device is no int32_ter present. + // + case MSC_EVENT_CLOSE: + { + // + // Go back to the "no device" state and wait for a new connection. + // + g_eState = STATE_NO_DEVICE; + + // + // Re-initialize the file system. + // + FileInit(); + + break; + } + + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This is the generic callback from host stack. +// +// \param pvData is actually a pointer to a tEventInfo structure. +// +// This function will be called to inform the application when a USB event has +// occurred that is outside those related to the mass storage device. At this +// point this is used to detect unsupported devices being inserted and removed. +// It is also used to inform the application when a power fault has occurred. +// This function is required when the g_USBGenerii8EventDriver is included in +// the host controller driver array that is passed in to the +// USBHCDRegisterDrivers() function. +// +// \return None. +// +//***************************************************************************** +void +USBHCDEvents(void *pvData) +{ + tEventInfo *pEventInfo; + + // + // Cast this pointer to its actual type. + // + pEventInfo = (tEventInfo *)pvData; + + switch(pEventInfo->ui32Event) + { + // + // An unknown device has been connected. + // + case USB_EVENT_UNKNOWN_CONNECTED: + { + // + // An unknown device was detected. + // + g_eState = STATE_UNKNOWN_DEVICE; + + break; + } + + // + // The unknown device has been been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Unknown device has been removed. + // + g_eState = STATE_NO_DEVICE; + + break; + } + + // + // A bus power fault was detected. + // + case USB_EVENT_POWER_FAULT: + { + // + // No power means no device is present. + // + g_eState = STATE_POWER_FAULT; + + break; + } + + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This function is called to read the contents of the current directory on +// the SD card and fill the listbox containing the names of all files and +// directories. +// +//***************************************************************************** +static int +PopulateFileListBox(bool bRepaint) +{ + uint32_t ui32ItemCount; + FRESULT fresult; + + // + // Empty the list box on the display. + // + ListBoxClear(&g_sDirList); + + // + // Make sure the list box will be redrawn next time the message queue + // is processed. + // + if(bRepaint) + { + WidgetPaint((tWidget *)&g_sDirList); + } + + // + // Open the current directory for access. + // + fresult = f_opendir(&g_sDirObject, g_cCwdBuf); + + // + // Check for error and return if there is a problem. + // + if(fresult != FR_OK) + { + // + // Ensure that the error is reported. + // + PrintfStatus("Error from USB disk:"); + PrintfStatus((char *)StringFromFresult(fresult)); + return(fresult); + } + + ui32ItemCount = 0; + + // + // Enter loop to enumerate through all directory entries. + // + for(;;) + { + // + // Read an entry from the directory. + // + fresult = f_readdir(&g_sDirObject, &g_sFileInfo); + + // + // Check for error and return if there is a problem. + // + if(fresult != FR_OK) + { + PrintfStatus("Error from USB disk:"); + PrintfStatus((char *)StringFromFresult(fresult)); + return(fresult); + } + + // + // If the file name is blank, then this is the end of the + // listing. + // + if(!g_sFileInfo.fname[0]) + { + break; + } + + // + // Add the information as a line in the listbox widget. + // + if(ui32ItemCount < NUM_LIST_STRINGS) + { + usnprintf(g_pcFilenames[ui32ItemCount], MAX_FILENAME_STRING_LEN, + "(%c) %s", (g_sFileInfo.fattrib & AM_DIR) ? 'D' : 'F', + g_sFileInfo.fname); + ListBoxTextAdd(&g_sDirList, g_pcFilenames[ui32ItemCount]); + } + + // + // Move to the next entry in the item array we use to populate the + // list box. + // + ui32ItemCount++; + } + + // + // Made it to here, return with no errors. + // + return(0); +} + +//***************************************************************************** +// +// This function implements the "cd" command. It takes an argument +// that specifies the directory to make the current working directory. +// Path separators must use a forward slash "/". The argument to cd +// can be one of the following: +// * root ("/") +// * a fully specified path ("/my/path/to/mydir") +// * a single directory name that is in the current directory ("mydir") +// * parent directory ("..") +// +// It does not understand relative paths, so dont try something like this: +// ("../my/new/path") +// +// Once the new directory is specified, it attempts to open the directory +// to make sure it exists. If the new path is opened successfully, then +// the current working directory (cwd) is changed to the new path. +// +// In cases of error, the pui32Reason parameter will be written with one of +// the following values: +// +//***************************************************************************** +static FRESULT +ChangeToDirectory(char *pi8Directory, uint32_t *pui32Reason) +{ + unsigned int uIdx; + FRESULT fresult; + + // + // Copy the current working path into a temporary buffer so + // it can be manipulated. + // + strcpy(g_cTmpBuf, g_cCwdBuf); + + // + // If the first character is /, then this is a fully specified + // path, and it should just be used as-is. + // + if(pi8Directory[0] == '/') + { + // + // Make sure the new path is not bigger than the cwd buffer. + // + if(strlen(pi8Directory) + 1 > sizeof(g_cCwdBuf)) + { + *pui32Reason = NAME_TOO_LONG_ERROR; + return(FR_OK); + } + + // + // If the new path name (in argv[1]) is not too int32_t, then + // copy it into the temporary buffer so it can be checked. + // + else + { + strncpy(g_cTmpBuf, pi8Directory, sizeof(g_cTmpBuf)); + } + } + + // + // If the argument is .. then attempt to remove the lowest level + // on the CWD. + // + else if(!strcmp(pi8Directory, "..")) + { + // + // Get the index to the last character in the current path. + // + uIdx = strlen(g_cTmpBuf) - 1; + + // + // Back up from the end of the path name until a separator (/) + // is found, or until we bump up to the start of the path. + // + while((g_cTmpBuf[uIdx] != '/') && (uIdx > 1)) + { + // + // Back up one character. + // + uIdx--; + } + + // + // Now we are either at the lowest level separator in the + // current path, or at the beginning of the string (root). + // So set the new end of string here, effectively removing + // that last part of the path. + // + g_cTmpBuf[uIdx] = 0; + } + + // + // Otherwise this is just a normal path name from the current + // directory, and it needs to be appended to the current path. + // + else + { + // + // Test to make sure that when the new additional path is + // added on to the current path, there is room in the buffer + // for the full new path. It needs to include a new separator, + // and a trailing null character. + // + if(strlen(g_cTmpBuf) + strlen(pi8Directory) + 1 + 1 > sizeof(g_cCwdBuf)) + { + *pui32Reason = NAME_TOO_LONG_ERROR; + return(FR_INVALID_OBJECT); + } + + // + // The new path is okay, so add the separator and then append + // the new directory to the path. + // + else + { + // + // If not already at the root level, then append a / + // + if(strcmp(g_cTmpBuf, "/")) + { + strcat(g_cTmpBuf, "/"); + } + + // + // Append the new directory to the path. + // + strcat(g_cTmpBuf, pi8Directory); + } + } + + // + // At this point, a candidate new directory path is in chTmpBuf. + // Try to open it to make sure it is valid. + // + fresult = f_opendir(&g_sDirObject, g_cTmpBuf); + + // + // If it cant be opened, then it is a bad path. Inform + // user and return. + // + if(fresult != FR_OK) + { + *pui32Reason = OPENDIR_ERROR; + return(fresult); + } + + // + // Otherwise, it is a valid new path, so copy it into the CWD and update + // the screen. + // + else + { + strncpy(g_cCwdBuf, g_cTmpBuf, sizeof(g_cCwdBuf)); + } + + // + // Return success. + // + return(FR_OK); +} + +//***************************************************************************** +// +// This function returns the number of ticks since the last time this function +// was called. +// +//***************************************************************************** +uint32_t +GetTickms(void) +{ + uint32_t ui32RetVal; + uint32_t ui32Saved; + + ui32RetVal = g_ui32SysTickCount; + ui32Saved = ui32RetVal; + + if(ui32Saved > g_ui32LastTick) + { + ui32RetVal = ui32Saved - g_ui32LastTick; + } + else + { + ui32RetVal = g_ui32LastTick - ui32Saved; + } + + // + // This could miss a few milliseconds but the timings here are on a + // much larger scale. + // + g_ui32LastTick = ui32Saved; + + // + // Return the number of milliseconds since the last time this was called. + // + return(ui32RetVal * MS_PER_SYSTICK); +} + +//***************************************************************************** +// +// The program main function. It performs initialization, then handles the +// user interaction via the touch screen graphical interface. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32DriveTimeout, ui32SysClock, ui32PLLRate; +#ifdef USE_ULPI + uint32_t ui32Setting; +#endif + tContext sContext; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + +#ifdef USE_ULPI + // + // Switch the USB ULPI Pins over. + // + USBULPIPinoutSet(); + + // + // Enable USB ULPI with high speed support. + // + ui32Setting = USBLIB_FEATURE_ULPI_HS; + USBOTGFeatureSet(0, USBLIB_FEATURE_USBULPI, &ui32Setting); + + // + // Setting the PLL frequency to zero tells the USB library to use the + // external USB clock. + // + ui32PLLRate = 0; +#else + // + // Save the PLL rate used by this application. + // + ui32PLLRate = 480000000; +#endif + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&sContext, "usb-host-msc"); + + // + // Configure SysTick for a 100Hz interrupt. + // + ROM_SysTickPeriodSet(ui32SysClock / TICKS_PER_SECOND); + ROM_SysTickEnable(); + ROM_SysTickIntEnable(); + + // + // Enable the uDMA controller and set up the control table base. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + ROM_uDMAEnable(); + ROM_uDMAControlBaseSet(g_sDMAControlTable); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + + // + // Set the touch screen event handler. + // + TouchScreenCallbackSet(WidgetPointerMessage); + + // + // Add the compile-time defined widgets to the widget tree. + // + WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); + + // + // Set some initial strings. + // + ListBoxTextAdd(&g_sDirList, "Waiting for device..."); + + // + // Issue the initial paint request to the widgets then immediately call + // the widget manager to process the paint message. This ensures that the + // display is drawn as quickly as possible and saves the delay we would + // otherwise experience if we processed the paint message after mounting + // and reading the SD card. + // + WidgetPaint(WIDGET_ROOT); + WidgetMessageQueueProcess(); + + // + // Initially wait for device connection. + // + g_eState = STATE_NO_DEVICE; + + // + // Initialize the USB stack for host mode. + // + USBStackModeSet(0, eUSBModeHost, 0); + + // + // Register the host class drivers. + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, g_ui32NumHostClassDrivers); + + // + // Open an instance of the mass storage class driver. + // + g_psMSCInstance = USBHMSCDriveOpen(0, MSCCallback); + + // + // Initialize the drive timeout. + // + ui32DriveTimeout = USBMSC_DRIVE_RETRY; + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Tell the USB library the CPU clock and the PLL frequency. This is a + // new requirement for TM4C129 devices. + // + USBHCDFeatureSet(0, USBLIB_FEATURE_CPUCLK, &ui32SysClock); + USBHCDFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Initialize the USB controller for host operation. + // + USBHCDInit(0, g_pHCDPool, HCD_MEMORY_SIZE); + + // + // Initialize the file system. + // + FileInit(); + + // + // Enter an (almost) infinite loop for reading and processing commands from + // the user. + // + while(1) + { + // + // Call the USB stack to keep it running. + // + USBHCDMain(); + + // + // Process any messages in the widget message queue. This keeps the + // display UI running. + // + WidgetMessageQueueProcess(); + + switch(g_eState) + { + case STATE_DEVICE_ENUM: + { + // + // Take it easy on the Mass storage device if it is slow to + // start up after connecting. + // + if(USBHMSCDriveReady(g_psMSCInstance) != 0) + { + // + // Wait about 500ms before attempting to check if the + // device is ready again. + // + ROM_SysCtlDelay(ui32SysClock / (3 * 2)); + + // + // Decrement the retry count. + // + ui32DriveTimeout--; + + // + // If the timeout is hit then go to the + // STATE_TIMEOUT_DEVICE state. + // + if(ui32DriveTimeout == 0) + { + g_eState = STATE_TIMEOUT_DEVICE; + } + break; + } + + // + // Getting here means the device is ready. + // Reset the CWD to the root directory. + // + g_cCwdBuf[0] = '/'; + g_cCwdBuf[1] = 0; + + // + // Fill the list box with the files and directories found. + // + if(!PopulateFileListBox(true)) + { + // + // If there were no errors reported, we are ready for + // MSC operation. + // + g_eState = STATE_DEVICE_READY; + } + + // + // Set the Device Present flag. + // + g_ui32Flags = FLAGS_DEVICE_PRESENT; + break; + } + + // + // If there is no device then just wait for one. + // + case STATE_NO_DEVICE: + { + if(g_ui32Flags == FLAGS_DEVICE_PRESENT) + { + // + // Empty the list box on the display. + // + ListBoxClear(&g_sDirList); + ListBoxTextAdd(&g_sDirList, "Waiting for device..."); + WidgetPaint((tWidget *)&g_sDirList); + + // + // Clear the Device Present flag. + // + g_ui32Flags &= ~FLAGS_DEVICE_PRESENT; + } + break; + } + + // + // An unknown device was connected. + // + case STATE_UNKNOWN_DEVICE: + { + // + // If this is a new device then change the status. + // + if((g_ui32Flags & FLAGS_DEVICE_PRESENT) == 0) + { + // + // Clear the screen and indicate that an unknown device + // is present. + // + ListBoxClear(&g_sDirList); + ListBoxTextAdd(&g_sDirList, "Unknown device."); + WidgetPaint((tWidget *)&g_sDirList); + } + // + // Set the Device Present flag. + // + g_ui32Flags = FLAGS_DEVICE_PRESENT; + break; + } + + // + // The connected mass storage device is not reporting ready. + // + case STATE_TIMEOUT_DEVICE: + { + // + // If this is the first time in this state then print a + // message. + // + if((g_ui32Flags & FLAGS_DEVICE_PRESENT) == 0) + { + // + // Clear the screen and indicate that an unknown device + // is present. + // + ListBoxClear(&g_sDirList); + ListBoxTextAdd(&g_sDirList, "Device Timeout."); + WidgetPaint((tWidget *)&g_sDirList); + } + + // + // Set the Device Present flag. + // + g_ui32Flags = FLAGS_DEVICE_PRESENT; + break; + } + + // + // Something has caused a power fault. + // + case STATE_POWER_FAULT: + { + break; + } + default: + { + break; + } + } + } +} diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewd b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewp b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewp new file mode 100644 index 0000000..e751d97 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ewp @@ -0,0 +1,815 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\port\fat_usbmsc.c + + + $PROJ_DIR$\..\..\..\..\third_party\fatfs\src\ff.c + + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\usb_host_msc.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.icf b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.icf new file mode 100644 index 0000000..1d4d691 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_host_msc.icf - Linker configuration file for usb_host_msc. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ld b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ld new file mode 100644 index 0000000..1a2c564 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_host_msc.ld - Linker configuration file for usb_host_msc. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.sct b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.sct new file mode 100644 index 0000000..615572d --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_host_msc.sct - Linker configuration file for usb_host_msc. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvopt b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvopt new file mode 100644 index 0000000..c5e3a8f --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvopt @@ -0,0 +1,415 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_host_msc + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\port\fat_usbmsc.c + fat_usbmsc.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\third_party\fatfs\src\ff.c + ff.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 4 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 6 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_msc.c + usb_host_msc.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 10 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 13 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvproj b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvproj new file mode 100644 index 0000000..1041e88 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc.uvproj @@ -0,0 +1,469 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_host_msc + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_host_msc + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_host_msc.bin .\rvmdk\usb_host_msc.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..;..\..\..\..\third_party; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_host_msc.sct + + + --entry Reset_Handler + + + + + + + + Source + + + fat_usbmsc.c + 1 + ..\..\..\..\third_party\fatfs\port\fat_usbmsc.c + + + ff.c + 1 + ..\..\..\..\third_party\fatfs\src\ff.c + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + usb_host_msc.c + 1 + .\usb_host_msc.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_host_msc/usb_host_msc_ccs.cmd b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc_ccs.cmd new file mode 100644 index 0000000..0d7d179 --- /dev/null +++ b/boards/dk-tm4c129x/usb_host_msc/usb_host_msc_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_host_msc_ccs.cmd - CCS linker configuration file for usb_host_msc. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 2048; diff --git a/boards/dk-tm4c129x/usb_otg_mouse/Makefile b/boards/dk-tm4c129x/usb_otg_mouse/Makefile new file mode 100644 index 0000000..438beff --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/Makefile @@ -0,0 +1,99 @@ +#****************************************************************************** +# +# Makefile - Rules for building the OTG Mouse. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=. +VPATH+= +VPATH+=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=. +IPATH+=.. +IPATH+=../../../.. + +# +# The default rule, which causes the OTG Mouse to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_otg_mouse.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the OTG Mouse. +# +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/frame.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/touch.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/uartstdio.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/usb_dev_mouse.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/usb_host_mouse.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/usb_mouse_structs.o +${COMPILER}/usb_otg_mouse.axf: ${COMPILER}/usb_otg_mouse.o +${COMPILER}/usb_otg_mouse.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_otg_mouse.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_otg_mouse.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_otg_mouse.axf: usb_otg_mouse.ld +SCATTERgcc_usb_otg_mouse=usb_otg_mouse.ld +ENTRY_usb_otg_mouse=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsimportspec new file mode 100644 index 0000000..df0b48e --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsimportspec @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsproject b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/.cproject b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.cproject new file mode 100644 index 0000000..43a0ef4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.cproject @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/.project b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.project new file mode 100644 index 0000000..d1a43bd --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.project @@ -0,0 +1,90 @@ + + + usb_otg_mouse + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_otg_mouse/startup_ccs.c + + + usb_dev_mouse.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_otg_mouse/usb_dev_mouse.c + + + usb_host_mouse.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_otg_mouse/usb_host_mouse.c + + + usb_mouse_structs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.c + + + usb_otg_mouse.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.c + + + usb_otg_mouse_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/uartstdio.c + 1 + SW_ROOT/utils/uartstdio.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.bin b/boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.bin new file mode 100644 index 0000000..68fff38 Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.out b/boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.out new file mode 100644 index 0000000..961d5ea Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/ccs/Debug/usb_otg_mouse.out differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_otg_mouse/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_otg_mouse/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.bin b/boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.bin new file mode 100644 index 0000000..eee3454 Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.out b/boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.out new file mode 100644 index 0000000..4c20367 Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/ewarm/Exe/usb_otg_mouse.out differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.axf b/boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.axf new file mode 100644 index 0000000..4f5bb32 Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.axf differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.bin b/boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.bin new file mode 100644 index 0000000..921aec0 Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/gcc/usb_otg_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/readme.txt b/boards/dk-tm4c129x/usb_otg_mouse/readme.txt new file mode 100644 index 0000000..ab67d23 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/readme.txt @@ -0,0 +1,34 @@ +USB OTG HID Mouse Example + +This example application demonstrates the use of USB On-The-Go (OTG) to +offer both USB host and device operation. When the DK board is connected +to a USB host, it acts as a BIOS-compatible USB mouse. The select button +on the board (on the bottom right corner) acts as mouse button 1 and +the mouse pointer may be moved by dragging your finger or a stylus across +the touchscreen in the desired direction. + +If a USB mouse is connected to the USB OTG port, the board operates as a +USB host and draws dots on the display to track the mouse movement. The +states of up to three mouse buttons are shown at the bottom right of the +display. + + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.axf b/boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.axf new file mode 100644 index 0000000..e979b07 Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.axf differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.bin b/boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.bin new file mode 100644 index 0000000..db1ae8f Binary files /dev/null and b/boards/dk-tm4c129x/usb_otg_mouse/rvmdk/usb_otg_mouse.bin differ diff --git a/boards/dk-tm4c129x/usb_otg_mouse/startup_ccs.c b/boards/dk-tm4c129x/usb_otg_mouse/startup_ccs.c new file mode 100644 index 0000000..5bf38b3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/startup_ccs.c @@ -0,0 +1,277 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/startup_ewarm.c b/boards/dk-tm4c129x/usb_otg_mouse/startup_ewarm.c new file mode 100644 index 0000000..eb5ec25 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/startup_ewarm.c @@ -0,0 +1,308 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/startup_gcc.c b/boards/dk-tm4c129x/usb_otg_mouse/startup_gcc.c new file mode 100644 index 0000000..1a66105 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/startup_gcc.c @@ -0,0 +1,324 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void SysTickHandler(void); +extern void USB0OTGModeIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + SysTickHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0OTGModeIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/startup_rvmdk.S b/boards/dk-tm4c129x/usb_otg_mouse/startup_rvmdk.S new file mode 100644 index 0000000..ebb3292 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/startup_rvmdk.S @@ -0,0 +1,333 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN SysTickHandler + EXTERN USB0OTGModeIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD SysTickHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0OTGModeIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_dev_mouse.c b/boards/dk-tm4c129x/usb_otg_mouse/usb_dev_mouse.c new file mode 100644 index 0000000..9390d8c --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_dev_mouse.c @@ -0,0 +1,556 @@ +//***************************************************************************** +// +// usb_dev_mouse.c - Main routines for the mouse device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "driverlib/systick.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "utils/uartstdio.h" +#include "usb_mouse_structs.h" +#include "drivers/touch.h" +#include "usb_otg_mouse.h" + +//***************************************************************************** +// +// The GPIO pin which is connected to the select button. +// +//***************************************************************************** +#define SEL_BTN_PORT GPIO_PORTP_BASE +#define SEL_BTN_PIN GPIO_PIN_1 + +//***************************************************************************** +// +// The defines used with the g_ui32Commands variable. +// +//***************************************************************************** +#define UPDATE_TICK_EVENT 0x80000000 + +//***************************************************************************** +// +// The incremental update for the mouse. +// +//***************************************************************************** +#define MOUSE_MOVE_INC ((char)4) +#define MOUSE_MOVE_DEC ((char)-4) + +//***************************************************************************** +// +// The HID mouse report offsets for this mouse application. +// +//***************************************************************************** +#define HID_REPORT_BUTTONS 0 +#define HID_REPORT_X 1 +#define HID_REPORT_Y 2 + +//***************************************************************************** +// +// Holds command bits used to signal the main loop to perform various tasks. +// +//***************************************************************************** +volatile uint32_t g_ui32Commands; + +//***************************************************************************** +// +// Holds the current state of the touchscreen - pressed or not. +// +//***************************************************************************** +volatile bool g_bScreenPressed; + +//***************************************************************************** +// +// Holds the current state of the user button - pressed or not. +// +//***************************************************************************** +volatile bool g_bButtonPressed; + + +//***************************************************************************** +// +// A flag used to indicate whether or not we are currently connected to the USB +// host. +// +//***************************************************************************** +volatile bool g_bConnected; + +//***************************************************************************** +// +// Holds the previous press position for the touchscreen. +// +//***************************************************************************** +volatile int32_t g_i32ScreenStartX; +volatile int32_t g_i32ScreenStartY; + +//***************************************************************************** +// +// Holds the current press position for the touchscreen. +// +//***************************************************************************** +volatile int32_t g_i32ScreenX; +volatile int32_t g_i32ScreenY; + +//***************************************************************************** +// +// The system tick timer rate. +// +//***************************************************************************** +#define SYSTICKS_PER_SECOND 100 +#define MS_PER_SYSTICK (1000 / SYSTICKS_PER_SECOND) + +//***************************************************************************** +// +// Global system tick counter holds elapsed time since the application started +// expressed in 100ths of a second. +// +//***************************************************************************** +volatile uint32_t g_ui32SysTickCount; + +//***************************************************************************** +// +// Global system tick counter hold the g_ui32SysTickCount the last time +// GetTickms() was called. +// +//***************************************************************************** +static uint32_t g_ui32LastTick; + +//***************************************************************************** +// +// The number of system ticks to wait for each USB packet to be sent before +// we assume the host has disconnected. The value 50 equates to half a second. +// +//***************************************************************************** +#define MAX_SEND_DELAY 50 + +//***************************************************************************** +// +// This enumeration holds the various states that the mouse can be in during +// normal operation. +// +//***************************************************************************** +volatile enum +{ + // + // Unconfigured. + // + eMouseStateUnconfigured, + + // + // No keys to send and not waiting on data. + // + eMouseStateIdle, + + // + // Waiting on data to be sent out. + // + eMouseStateSend +} +g_iMouseState = eMouseStateUnconfigured; + + +uint32_t +MouseHandler(void *pvCBData, uint32_t ui32Event, uint32_t ui32MsgData, + void *pvMsgData) +{ + switch(ui32Event) + { + // + // The USB host has connected to and configured the device. + // + case USB_EVENT_CONNECTED: + { + UARTprintf("Host connected.\n"); + g_iMouseState = eMouseStateIdle; + g_bConnected = true; + break; + } + + // + // The USB host has disconnected from the device. + // + case USB_EVENT_DISCONNECTED: + { + UARTprintf("Host disconnected.\n"); + g_bConnected = false; + g_iMouseState = eMouseStateUnconfigured; + break; + } + + // + // A report was sent to the host. We are now free to send another. + // + case USB_EVENT_TX_COMPLETE: + { + g_iMouseState = eMouseStateIdle; + break; + } + } + return(0); +} + +//*************************************************************************** +// +// Wait for a period of time for the state to become idle or unconfigured. +// +// \param ui32TimeoutTick is the number of system ticks to wait before +// declaring a timeout and returning \b false. +// +// This function polls the current mouse state for ui32TimeoutTicks system +// ticks waiting for it to either become idle or unconfigured. If the state +// becomes one of these, the function returns true. If ui32TimeoutTicks +// occur prior to the state becoming idle or unconfigured, false is returned +// to indicate a timeout. +// +// \return Returns \b true on success or \b false on timeout. +// +//*************************************************************************** +bool +WaitForSendIdle(uint32_t ui32TimeoutTicks) +{ + uint32_t ui32Start, ui32Now, ui32Elapsed; + + ui32Start = g_ui32SysTickCount; + ui32Elapsed = 0; + + while(ui32Elapsed < ui32TimeoutTicks) + { + // + // Is the mouse is idle or we have disconnected, return immediately. + // + if((g_iMouseState == eMouseStateIdle) || + (g_iMouseState == eMouseStateUnconfigured)) + { + return(true); + } + + // + // Determine how much time has elapsed since we started waiting. This + // should be safe across a wrap of g_ui32SysTickCount. I suspect you + // won't likely leave the app running for the 497.1 days it will take + // for this to occur but you never know... + // + ui32Now = g_ui32SysTickCount; + ui32Elapsed = (ui32Start < ui32Now) ? (ui32Now - ui32Start) : + (((uint32_t)0xFFFFFFFF - ui32Start) + ui32Now + 1); + } + + // + // If we get here, we timed out so return a bad return code to let the + // caller know. + // + return(false); +} + +//***************************************************************************** +// +// This is the interrupt handler for the SysTick interrupt. It is called +// periodically and updates a global tick counter then sets a flag to tell the +// main loop to check to see if a new HID report should be sent to the host. +// +//***************************************************************************** +void +SysTickHandler(void) +{ + g_ui32SysTickCount++; + g_ui32Commands |= UPDATE_TICK_EVENT; +} + +//***************************************************************************** +// +// This function handles updates due to the touchscreen and buttons. +// +// This function is called from the main loop each time the touchscreen state +// needs to be checked. If it detects an update it will schedule an transfer +// to the host. +// +// Returns Returns \b true on success or \b false if an error is detected. +// +//***************************************************************************** +bool +TouchEventHandler(void) +{ + uint32_t ui32Retcode; + int32_t i32DeltaX, i32DeltaY; + bool bSuccess; + bool bBtnPressed; + + // + // Assume all is well until we determine otherwise. + // + bSuccess = true; + + // + // Get the current state of the select button. + // + bBtnPressed = (ROM_GPIOPinRead(SEL_BTN_PORT, SEL_BTN_PIN) & SEL_BTN_PIN) ? + false : true; + + // + // Is someone pressing the screen or has the button changed state? If so, + // we determine how far they have dragged their finger/stylus and use this + // to calculate mouse position changes to send to the host. + // + if(g_bScreenPressed || (bBtnPressed != g_bButtonPressed)) + { + // + // Calculate how far we moved since the last time we checked. This + // rather odd layout prevents a compiler warning about undefined order + // of volatile accesses. + // + i32DeltaX = g_i32ScreenX; + i32DeltaX -= g_i32ScreenStartX; + i32DeltaY = g_i32ScreenY; + i32DeltaY -= g_i32ScreenStartY; + + // + // Reset our start position. + // + g_i32ScreenStartX = g_i32ScreenX; + g_i32ScreenStartY = g_i32ScreenY; + + // + // Was there any movement or change in button state? + // + if(i32DeltaX || i32DeltaY || (bBtnPressed != g_bButtonPressed)) + { + // + // Yes - send a report back to the host after clipping the deltas + // to the maximum we can support. + // + i32DeltaX = (i32DeltaX > 127) ? 127 : i32DeltaX; + i32DeltaX = (i32DeltaX < -128) ? -128 : i32DeltaX; + i32DeltaY = (i32DeltaY > 127) ? 127 : i32DeltaY; + i32DeltaY = (i32DeltaY < -128) ? -128 : i32DeltaY; + + // + // Remember the current button state. + // + g_bButtonPressed = bBtnPressed; + + // + // Send the report back to the host. + // + g_iMouseState = eMouseStateSend; + ui32Retcode = USBDHIDMouseStateChange((void *)&g_sMouseDevice, + (char)i32DeltaX, (char)i32DeltaY, + (bBtnPressed ? + MOUSE_REPORT_BUTTON_1 : 0)); + + // + // Did we schedule the report for transmission? + // + if(ui32Retcode == MOUSE_SUCCESS) + { + // + // Wait for the host to acknowledge the transmission if all went + // well. + // + bSuccess = WaitForSendIdle(MAX_SEND_DELAY); + + // + // Did we time out waiting for the packet to be sent? + // + if (!bSuccess) + { + // + // Yes - assume the host disconnected and go back to + // waiting for a new connection. + // + UARTprintf("Send timed out!\n"); + g_bConnected = 0; + } + } + else + { + // + // An error was reported when trying to send the report. This + // may be due to host disconnection but could also be due to a + // clash between our attempt to send a report and the driver + // sending the last report in response to an idle timer timeout + // so we don't jump to the conclusion that we were disconnected + // in this case. + // + UARTprintf("Can't send report.\n"); + bSuccess = false; + } + } + } + + return(bSuccess); +} + +//***************************************************************************** +// +// This function is called by the touchscreen driver whenever there is a +// change in press state or position. +// +//***************************************************************************** +int32_t +DeviceMouseTouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + switch(ui32Message) + { + // + // The touchscreen has been pressed. Remember where we are so that + // we can determine how far the pointer moves later. + // + case WIDGET_MSG_PTR_DOWN: + g_i32ScreenStartX = i32X; + g_i32ScreenStartY = i32Y; + g_i32ScreenX = i32X; + g_i32ScreenY = i32Y; + g_bScreenPressed = true; + break; + + // + // The touchscreen is no longer being pressed. + // + case WIDGET_MSG_PTR_UP: + g_bScreenPressed = false; + break; + + // + // The user is dragging his/her finger/stylus over the touchscreen. + // + case WIDGET_MSG_PTR_MOVE: + g_i32ScreenX = i32X; + g_i32ScreenY = i32Y; + break; + } + + // + // Tell the mouse driver we handled the message. + // + return(1); +} + +//***************************************************************************** +// +// This function initializes the mouse in device mode. +// +//***************************************************************************** +void +DeviceInit(void) +{ + // + // Initialize the touchscreen driver and install our event handler. + // + TouchScreenInit(g_ui32SysClock); + TouchScreenCallbackSet(DeviceMouseTouchCallback); + + // + // Set the system tick to fire 100 times per second. + // + ROM_SysTickPeriodSet(g_ui32SysClock / SYSTICKS_PER_SECOND); + ROM_SysTickIntEnable(); + ROM_SysTickEnable(); + + // + // Pass the USB library our device information, initialize the USB + // controller and connect the device to the bus. + // + USBDHIDMouseInit(0, (tUSBDHIDMouseDevice *)&g_sMouseDevice); +} + +//***************************************************************************** +// +// This is the main loop that runs the mouse device application. +// +//***************************************************************************** +void +DeviceMain(void) +{ + bool bRetcode; + + if(g_iMouseState == eMouseStateUnconfigured) + { + return; + } + + // + // If it is time to check the touchscreen state then do so. + // + if(g_ui32Commands & UPDATE_TICK_EVENT) + { + g_ui32Commands &= ~UPDATE_TICK_EVENT; + TouchEventHandler(); + + // + // Wait for the last data to go out before sending more data. Also + // ensure that we drop out if the device is disconnected. + // + bRetcode = WaitForSendIdle(MAX_SEND_DELAY); + + // + // If we timed out, assume the host disconnected and start looking + // for a new connection. + // + if(!bRetcode) + { + g_iMouseState = eMouseStateUnconfigured; + } + } +} + +//***************************************************************************** +// +// This function returns the number of ticks since the last time this function +// was called. +// +//***************************************************************************** +uint32_t +GetTickms(void) +{ + uint32_t ui32RetVal, ui32Saved; + + ui32RetVal = g_ui32SysTickCount; + ui32Saved = ui32RetVal; + + if(ui32Saved > g_ui32LastTick) + { + ui32RetVal = ui32Saved - g_ui32LastTick; + } + else + { + ui32RetVal = g_ui32LastTick - ui32Saved; + } + + // + // This could miss a few milliseconds but the timings here are on a + // much larger scale. + // + g_ui32LastTick = ui32Saved; + + // + // Return the number of milliseconds since the last time this was called. + // + return(ui32RetVal * MS_PER_SYSTICK); +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_host_mouse.c b/boards/dk-tm4c129x/usb_otg_mouse/usb_host_mouse.c new file mode 100644 index 0000000..c2b0de6 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_host_mouse.c @@ -0,0 +1,740 @@ +//***************************************************************************** +// +// usb_host_mouse.c - main application code for the host mouse example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhhid.h" +#include "usblib/host/usbhhidmouse.h" +#include "utils/uartstdio.h" +#include "usb_otg_mouse.h" + +//***************************************************************************** +// +// The size of the mouse device interface's memory pool in bytes. +// +//***************************************************************************** +#define MOUSE_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The memory pool to provide to the mouse device. +// +//***************************************************************************** +uint8_t g_pui8Buffer[MOUSE_MEMORY_SIZE]; + +//***************************************************************************** +// +// Declare the USB Events driver interface. +// +//***************************************************************************** +DECLARE_EVENT_DRIVER(g_sUSBEventDriver, 0, 0, USBHCDEvents); + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the Mouse class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHIDClassDriver, + &g_sUSBEventDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +static const uint32_t g_ui32NumHostClassDrivers = + sizeof(g_ppHostClassDrivers) / sizeof(tUSBHostClassDriver *); + +//***************************************************************************** +// +// The global value used to store the mouse instance value. +// +//***************************************************************************** +static tUSBHMouse *g_psMouseInstance; + +//***************************************************************************** +// +// The global values used to store the mouse state. +// +//***************************************************************************** +static uint32_t g_ui32Buttons; +static tRectangle g_sCursor; + +//***************************************************************************** +// +// This enumerated type is used to hold the states of the mouse. +// +//***************************************************************************** +enum +{ + // + // No device is present. + // + eStateNoDevice, + + // + // Mouse has been detected and needs to be initialized in the main + // loop. + // + eStateMouseInit, + + // + // Mouse is connected and waiting for events. + // + eStateMouseConnected, + + // + // An unsupported device has been attached. + // + eStateUnknownDevice, + + // + // A power fault has occurred. + // + eStatePowerFault +} +iUSBState; + +//***************************************************************************** +// +// These defines are used to define the screen constraints to the application. +// +//***************************************************************************** +#define DISPLAY_BANNER_HEIGHT 20 +#define DISPLAY_BANNER_BG ClrDarkBlue +#define DISPLAY_BANNER_FG ClrWhite +#define DISPLAY_MOUSE_BG ClrBlack +#define DISPLAY_MOUSE_FG ClrWhite +#define DISPLAY_MOUSE_SIZE 2 + +//***************************************************************************** +// +// This function clears the main application screen area. +// +//***************************************************************************** +void +ClearMainWindow(void) +{ + tRectangle sRect; + + // + // Initialize the button indicator. + // + sRect.i16XMin = 0; + sRect.i16YMin = DISPLAY_BANNER_HEIGHT + 1; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - DISPLAY_BANNER_HEIGHT; + + GrContextForegroundSet(&g_sContext, DISPLAY_MOUSE_BG); + GrRectFill(&g_sContext, &sRect); + GrContextForegroundSet(&g_sContext, DISPLAY_MOUSE_FG); +} + +//***************************************************************************** +// +// This function updates the cursor position based on deltas received from +// the mouse device. +// +// \param i32XDelta is the signed movement in the X direction. +// \param i32YDelta is the signed movement in the Y direction. +// +// This function is called by the mouse handler code when it detects a change +// in the position of the mouse. It will take the inputs and force them +// to be constrained to the display area of the screen. If the left mouse +// button is pressed then the mouse will draw on the screen and if it is not +// it will move around normally. A side effect of not being able to read the +// current state of the screen is that the cursor will erase anything it moves +// over while the left mouse button is not pressed. +// +// \return None. +// +//***************************************************************************** +void +UpdateCursor(int32_t i32XDelta, int32_t i32YDelta) +{ + int32_t i32Temp; + + // + // If the left button is not pressed then erase the previous cursor + // position. + // + if((g_ui32Buttons & 1) == 0) + { + // + // Erase the previous cursor. + // + GrContextForegroundSet(&g_sContext, DISPLAY_MOUSE_BG); + GrRectFill(&g_sContext, &g_sCursor); + } + + // + // Need to do signed math so use the temporary signed value. + // + i32Temp = g_sCursor.i16XMin; + + // + // Update the X position without going off the screen. + // + if(((int)g_sCursor.i16XMin + i32XDelta + DISPLAY_MOUSE_SIZE) < + GrContextDpyWidthGet(&g_sContext)) + { + // + // Update the X cursor position. + // + i32Temp += i32XDelta; + + // + // Don't let the cursor go off the left of the screen either. + // + if(i32Temp < 0) + { + i32Temp = 0; + } + } + + // + // Update the X position. + // + g_sCursor.i16XMin = i32Temp; + g_sCursor.i16XMax = i32Temp + DISPLAY_MOUSE_SIZE; + + // + // Need to do signed math so use the temporary signed value. + // + i32Temp = g_sCursor.i16YMin; + + // + // Update the Y position without going off the screen. + // + if(((int)g_sCursor.i16YMin + i32YDelta) < + (GrContextDpyHeightGet(&g_sContext) - + DISPLAY_BANNER_HEIGHT - DISPLAY_MOUSE_SIZE - 1)) + { + // + // Update the Y cursor position. + // + i32Temp += i32YDelta; + + // + // Don't let the cursor overwrite the status area of the screen. + // + if(i32Temp < DISPLAY_BANNER_HEIGHT + 1) + { + i32Temp = DISPLAY_BANNER_HEIGHT + 1; + } + } + + // + // Update the Y position. + // + g_sCursor.i16YMin = i32Temp; + g_sCursor.i16YMax = i32Temp + DISPLAY_MOUSE_SIZE; + + // + // Draw the new cursor. + // + GrContextForegroundSet(&g_sContext, DISPLAY_MOUSE_FG); + GrRectFill(&g_sContext, &g_sCursor); +} + +//***************************************************************************** +// +// This function will update the small mouse button indicators in the status +// bar area of the screen. This can be called on its own or it will be called +// whenever UpdateStatus() is called as well. +// +//***************************************************************************** +void +UpdateButtons(void) +{ + tRectangle sRect, sRectInner; + int iButton; + + // + // Initialize the button indicator position. + // + sRect.i16XMin = GrContextDpyWidthGet(&g_sContext) - 36; + sRect.i16YMin = GrContextDpyHeightGet(&g_sContext) - 18; + sRect.i16XMax = sRect.i16XMin + 6; + sRect.i16YMax = sRect.i16YMin + 8; + sRectInner.i16XMin = sRect.i16XMin + 1; + sRectInner.i16YMin = sRect.i16YMin + 1; + sRectInner.i16XMax = sRect.i16XMax - 1; + sRectInner.i16YMax = sRect.i16YMax - 1; + + // + // Check all three buttons. + // + for(iButton = 0; iButton < 3; iButton++) + { + // + // Draw the button indicator red if pressed and black if not pressed. + // + if(g_ui32Buttons & (1 << iButton)) + { + GrContextForegroundSet(&g_sContext, ClrRed); + } + else + { + GrContextForegroundSet(&g_sContext, ClrBlack); + } + + // + // Draw the back of the button indicator. + // + GrRectFill(&g_sContext, &sRectInner); + + // + // Draw the border on the button indicator. + // + GrContextForegroundSet(&g_sContext, ClrWhite); + GrRectDraw(&g_sContext, &sRect); + + // + // Move to the next button indicator position. + // + sRect.i16XMin += 8; + sRect.i16XMax += 8; + sRectInner.i16XMin += 8; + sRectInner.i16XMax += 8; + } +} + +//***************************************************************************** +// +// This function updates the status area of the screen. It uses the current +// state of the application to print the status bar. +// +//***************************************************************************** +void +UpdateStatus(char *pcString, uint32_t ui32Buttons, bool bClrBackground) +{ + tRectangle sRect; + + // + // Fill the bottom rows of the screen with blue to create the status area. + // + sRect.i16XMin = 0; + sRect.i16YMin = GrContextDpyHeightGet(&g_sContext) - + DISPLAY_BANNER_HEIGHT - 1; + sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1; + sRect.i16YMax = sRect.i16YMin + DISPLAY_BANNER_HEIGHT; + + // + // Were we asked to clear the background of the status area? + // + GrContextBackgroundSet(&g_sContext, DISPLAY_BANNER_BG); + + if(bClrBackground) + { + // + // Draw the background of the banner. + // + GrContextForegroundSet(&g_sContext, DISPLAY_BANNER_BG); + GrRectFill(&g_sContext, &sRect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&g_sContext, DISPLAY_BANNER_FG); + GrRectDraw(&g_sContext, &sRect); + } + + // + // Write the current state to the left of the status area. + // + GrContextFontSet(&g_sContext, g_psFontFixed6x8); + + // + // Update the status on the screen. + // + if(pcString != 0) + { + UARTprintf(pcString); + UARTprintf("\n"); + GrStringDraw(&g_sContext, pcString, -1, 10, sRect.i16YMin + 4, 1); + + g_ui32Buttons = ui32Buttons; + } + else if(iUSBState == eStateNoDevice) + { + // + // Mouse is currently disconnected. + // + UARTprintf("no device\n"); + GrStringDraw(&g_sContext, "no device ", -1, 10, sRect.i16YMin + 4, + 1); + } + else if(iUSBState == eStateMouseConnected) + { + // + // Mouse is connected. + // + UARTprintf("connected\n"); + GrStringDraw(&g_sContext, "connected ", -1, 10, sRect.i16YMin + 4, + 1); + } + else if(iUSBState == eStateUnknownDevice) + { + // + // Some other (unknown) device is connected. + // + UARTprintf("unknown device\n"); + GrStringDraw(&g_sContext, "unknown device", -1, 10, sRect.i16YMin + 4, + 1); + } + else if(iUSBState == eStatePowerFault) + { + // + // Power fault. + // + UARTprintf("power fault\n"); + GrStringDraw(&g_sContext, "power fault ", -1, 10, sRect.i16YMin + 4, + 1); + } + + UpdateButtons(); +} + +//***************************************************************************** +// +// This is the generic callback from host stack. +// +// \param pvData is actually a pointer to a tEventInfo structure. +// +// This function will be called to inform the application when a USB event has +// occurred that is outside those related to the mouse device. At this +// point this is used to detect unsupported devices being inserted and removed. +// It is also used to inform the application when a power fault has occurred. +// This function is required when the g_USBGenericEventDriver is included in +// the host controller driver array that is passed in to the +// USBHCDRegisterDrivers() function. +// +// \return None. +// +//***************************************************************************** +void +USBHCDEvents(void *pvData) +{ + tEventInfo *psEventInfo; + + // + // Cast this pointer to its actual type. + // + psEventInfo = (tEventInfo *)pvData; + + switch(psEventInfo->ui32Event) + { + // + // New mouse detected. + // + case USB_EVENT_CONNECTED: + { + // + // See if this is a HID Keyboard. + // + if((USBHCDDevClass(psEventInfo->ui32Instance, 0) == + USB_CLASS_HID) && + (USBHCDDevProtocol(psEventInfo->ui32Instance, 0) == + USB_HID_PROTOCOL_MOUSE)) + { + // + // Indicate that the mouse has been detected. + // + UARTprintf("Mouse Connected\n"); + + // + // Proceed to the eStateMouseInit state so that the main loop + // can finish initialized the mouse since USBHMouseInit() + // cannot be called from within a callback. + // + iUSBState = eStateMouseInit; + } + + break; + } + // + // Unsupported device detected. + // + case USB_EVENT_UNKNOWN_CONNECTED: + { + UARTprintf("Unsupported Device Connected\n"); + + // + // An unknown device was detected. + // + iUSBState = eStateUnknownDevice; + + break; + } + // + // Device has been unplugged. + // + case USB_EVENT_DISCONNECTED: + { + // + // Indicate that the mouse has been disconnected. + // + UARTprintf("Device Disconnected\n"); + + // + // Change the state so that the main loop knows that the mouse is + // no longer present. + // + iUSBState = eStateNoDevice; + + // + // Reset the button state. + // + g_ui32Buttons = 0; + + break; + } + // + // Power Fault. + // + case USB_EVENT_POWER_FAULT: + { + UARTprintf("Power Fault\n"); + + // + // No power means no device is present. + // + iUSBState = eStatePowerFault; + + break; + } + default: + { + break; + } + } +} + +//***************************************************************************** +// +// This is the callback from the USB HID mouse handler. +// +// \param pvCBData is ignored by this function. +// \param ui32Event is one of the valid events for a mouse device. +// \param ui32MsgParam is defined by the event that occurs. +// \param pvMsgData is a pointer to data that is defined by the event that +// occurs. +// +// This function will be called to inform the application when a mouse has +// been plugged in or removed and any time mouse movement or button pressed +// is detected. +// +// \return None. +// +//***************************************************************************** +void +MouseCallback(tUSBHMouse *psMsInstance, uint32_t ui32Event, + uint32_t ui32MsgParam, void *pvMsgData) +{ + switch(ui32Event) + { + // + // Mouse button press detected. + // + case USBH_EVENT_HID_MS_PRESS: + { + UARTprintf("Button Pressed %02x\n", ui32MsgParam); + + // + // Save the new button that was pressed. + // + g_ui32Buttons |= ui32MsgParam; + + break; + } + + // + // Mouse button release detected. + // + case USBH_EVENT_HID_MS_REL: + { + UARTprintf("Button Released %02x\n", ui32MsgParam); + + // + // Remove the button from the pressed state. + // + g_ui32Buttons &= ~ui32MsgParam; + + break; + } + + // + // Mouse X movement detected. + // + case USBH_EVENT_HID_MS_X: + { + UARTprintf("X:%02d.\n", (signed char)ui32MsgParam); + + // + // Update the cursor on the screen. + // + UpdateCursor((signed char)ui32MsgParam, 0); + + break; + } + + // + // Mouse Y movement detected. + // + case USBH_EVENT_HID_MS_Y: + { + UARTprintf("Y:%02d.\n", (signed char)ui32MsgParam); + + // + // Update the cursor on the screen. + // + UpdateCursor(0, (signed char)ui32MsgParam); + + break; + } + } + + // + // Update the status area of the screen. + // + UpdateStatus(0, 0, false); +} + +//***************************************************************************** +// +// Initialize the host mode stack. +// +//***************************************************************************** +void +HostInit(void) +{ + // + // Register the host class drivers. + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, g_ui32NumHostClassDrivers); + + // + // Initialize the button states. + // + g_ui32Buttons = 0; + + // + // Update the status on the screen. + // + UpdateStatus(0, 0, true); + + // + // Open an instance of the mouse driver. The mouse does not need + // to be present at this time, this just saves a place for it and allows + // the applications to be notified when a mouse is present. + // + g_psMouseInstance = + USBHMouseOpen(MouseCallback, g_pui8Buffer, MOUSE_MEMORY_SIZE); + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Call the main loop for the Host controller driver. + // + iUSBState = eStateNoDevice; +} + +//***************************************************************************** +// +// This is the main loop that runs the application. +// +//***************************************************************************** +void +HostMain(void) +{ + switch(iUSBState) + { + // + // This state is entered when the mouse is first detected. + // + case eStateMouseInit: + { + // + // Initialize the newly connected mouse. + // + USBHMouseInit(g_psMouseInstance); + + // + // Proceed to the mouse connected state. + // + iUSBState = eStateMouseConnected; + + // + // Update the status on the screen. + // + UpdateStatus(0, 0, true); + + // + // Update the cursor on the screen. + // + UpdateCursor(GrContextDpyWidthGet(&g_sContext) / 2, + GrContextDpyHeightGet(&g_sContext)/ 2); + + break; + } + case eStateMouseConnected: + { + // + // Nothing is currently done in the main loop when the mouse + // is connected. + // + break; + } + case eStateNoDevice: + { + // + // The mouse is not connected so nothing needs to be done here. + // + break; + } + default: + { + break; + } + } + + // + // Periodically call the main loop for the Host controller driver. + // + USBHCDMain(); +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.c b/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.c new file mode 100644 index 0000000..1be2ae3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.c @@ -0,0 +1,147 @@ +//***************************************************************************** +// +// usb_mouse_structs.c - Data structures defining the USB mouse device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "driverlib/usb.h" +#include "usblib/usblib.h" +#include "usblib/usbhid.h" +#include "usblib/usb-ids.h" +#include "usblib/device/usbdevice.h" +#include "usblib/device/usbdhid.h" +#include "usblib/device/usbdhidmouse.h" +#include "usb_mouse_structs.h" + +//***************************************************************************** +// +// The languages supported by this device. +// +//***************************************************************************** +const uint8_t g_pui8LangDescriptor[] = +{ + 4, + USB_DTYPE_STRING, + USBShort(USB_LANG_EN_US) +}; + +//***************************************************************************** +// +// The manufacturer string. +// +//***************************************************************************** +const uint8_t g_pui8ManufacturerString[] = +{ + (17 + 1) * 2, + USB_DTYPE_STRING, + 'T', 0, 'e', 0, 'x', 0, 'a', 0, 's', 0, ' ', 0, 'I', 0, 'n', 0, 's', 0, + 't', 0, 'r', 0, 'u', 0, 'm', 0, 'e', 0, 'n', 0, 't', 0, 's', 0, +}; + +//***************************************************************************** +// +// The product string. +// +//***************************************************************************** +const uint8_t g_pui8ProductString[] = +{ + (13 + 1) * 2, + USB_DTYPE_STRING, + 'M', 0, 'o', 0, 'u', 0, 's', 0, 'e', 0, ' ', 0, 'E', 0, 'x', 0, 'a', 0, + 'm', 0, 'p', 0, 'l', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The serial number string. +// +//***************************************************************************** +const uint8_t g_pui8SerialNumberString[] = +{ + (8 + 1) * 2, + USB_DTYPE_STRING, + '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0 +}; + +//***************************************************************************** +// +// The interface description string. +// +//***************************************************************************** +const uint8_t g_pui8HIDInterfaceString[] = +{ + (19 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'M', 0, 'o', 0, 'u', 0, 's', 0, + 'e', 0, ' ', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, + 'a', 0, 'c', 0, 'e', 0 +}; + +//***************************************************************************** +// +// The configuration description string. +// +//***************************************************************************** +const uint8_t g_pui8ConfigString[] = +{ + (23 + 1) * 2, + USB_DTYPE_STRING, + 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'M', 0, 'o', 0, 'u', 0, 's', 0, + 'e', 0, ' ', 0, 'C', 0, 'o', 0, 'n', 0, 'f', 0, 'i', 0, 'g', 0, + 'u', 0, 'r', 0, 'a', 0, 't', 0, 'i', 0, 'o', 0, 'n', 0 +}; + +//***************************************************************************** +// +// The descriptor string table. +// +//***************************************************************************** +const uint8_t * const g_ppui8StringDescriptors[] = +{ + g_pui8LangDescriptor, + g_pui8ManufacturerString, + g_pui8ProductString, + g_pui8SerialNumberString, + g_pui8HIDInterfaceString, + g_pui8ConfigString +}; + +#define NUM_STRING_DESCRIPTORS (sizeof(g_ppui8StringDescriptors) / \ + sizeof(uint8_t *)) + +//***************************************************************************** +// +// The HID mouse device initialization and customization structures. +// +//***************************************************************************** +tUSBDHIDMouseDevice g_sMouseDevice = +{ + USB_VID_TI_1CBE, + USB_PID_MOUSE, + 500, + USB_CONF_ATTR_SELF_PWR, + MouseHandler, + (void *)&g_sMouseDevice, + g_ppui8StringDescriptors, + NUM_STRING_DESCRIPTORS +}; diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.h b/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.h new file mode 100644 index 0000000..a89debf --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_mouse_structs.h @@ -0,0 +1,33 @@ +//***************************************************************************** +// +// usb_mouse_structs.h - Data structures defining the mouse USB device. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef _USB_MOUSE_STRUCTS_H_ +#define _USB_MOUSE_STRUCTS_H_ + +extern uint32_t MouseHandler(void *pvCBData, uint32_t ui32Event, + uint32_t ui32MsgData, void *pvMsgData); + +extern tUSBDHIDMouseDevice g_sMouseDevice; + +#endif diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.c b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.c new file mode 100644 index 0000000..50bebd9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.c @@ -0,0 +1,322 @@ +//***************************************************************************** +// +// usb_otg_mouse.c - USB OTG Mouse (combined host and device mouse). +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "inc/hw_types.h" +#include "inc/hw_usb.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "usblib/usblib.h" +#include "usblib/device/usbdevice.h" +#include "usblib/host/usbhost.h" +#include "utils/uartstdio.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "usb_otg_mouse.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB OTG HID Mouse Example (usb_otg_mouse)

      +//! +//! This example application demonstrates the use of USB On-The-Go (OTG) to +//! offer both USB host and device operation. When the DK board is connected +//! to a USB host, it acts as a BIOS-compatible USB mouse. The select button +//! on the board (on the bottom right corner) acts as mouse button 1 and +//! the mouse pointer may be moved by dragging your finger or a stylus across +//! the touchscreen in the desired direction. +//! +//! If a USB mouse is connected to the USB OTG port, the board operates as a +//! USB host and draws dots on the display to track the mouse movement. The +//! states of up to three mouse buttons are shown at the bottom right of the +//! display. +//! +//***************************************************************************** + +//***************************************************************************** +// +// The current state of the USB in the system based on the detected mode. +// +//***************************************************************************** +volatile tUSBMode g_iCurrentMode = eUSBModeNone; + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pui8HCDPool[HCD_MEMORY_SIZE]; + +//***************************************************************************** +// +// This global is used to indicate to the main that a mode change has +// occurred. +// +//***************************************************************************** +uint32_t g_ui32NewState; + +//***************************************************************************** +// +// The system clock frequency in Hz. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The graphics context for the screen. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// A function which returns the number of milliseconds since it was last +// called. This can be found in usb_dev_mouse.c. +// +//***************************************************************************** +extern uint32_t GetTickms(void); + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Callback function for mode changes. +// +//***************************************************************************** +void +ModeCallback(uint32_t ui32Index, tUSBMode iMode) +{ + // + // Save the new mode. + // + g_iCurrentMode = iMode; + + switch(iMode) + { + case eUSBModeHost: + { + break; + } + case eUSBModeDevice: + { + break; + } + case eUSBModeNone: + { + break; + } + default: + { + break; + } + } + g_ui32NewState = 1; +} + +//***************************************************************************** +// +// Initialize the USB for OTG mode on the platform. +// +//***************************************************************************** +void +USBOTGInit(uint32_t ui32ClockRate, tUSBModeCallback pfnModeCallback) +{ + uint32_t ui32PLLRate; + + // + // Enable USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + + // + // Set the current processor speed to provide more accurate timing + // information to the USB library. + // + ui32PLLRate = 480000000; + USBOTGFeatureSet(0, USBLIB_FEATURE_CPUCLK, &ui32ClockRate); + USBOTGFeatureSet(0, USBLIB_FEATURE_USBPLL, &ui32PLLRate); + + // + // Initialize the USB OTG mode and pass in a mode callback. + // + USBStackModeSet(0, eUSBModeOTG, pfnModeCallback); +} + +//***************************************************************************** +// +// main routine. +// +//***************************************************************************** +int +main(void) +{ + tLPMFeature sLPMFeature; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Configure the UART. + // + UARTStdioConfig(0, 115200, g_ui32SysClock); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(g_ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "usb-otg-mouse"); + + // + // Configure USB for OTG operation. + // + USBOTGInit(g_ui32SysClock, ModeCallback); + + sLPMFeature.ui32HIRD = 500; + sLPMFeature.ui32Features = USBLIB_FEATURE_LPM_EN | + USBLIB_FEATURE_LPM_RMT_WAKE; + USBHCDFeatureSet(0, USBLIB_FEATURE_LPM, &sLPMFeature); + + // + // Initialize the host stack. + // + HostInit(); + + // + // Initialize the device stack. + // + DeviceInit(); + + // + // Initialize the USB controller for dual mode operation with a 2ms polling + // rate. + // + USBOTGModeInit(0, 2000, g_pui8HCDPool, HCD_MEMORY_SIZE); + + // + // Set the new state so that the screen updates on the first + // pass. + // + g_ui32NewState = 1; + + // + // Loop forever. + // + while(1) + { + // + // Tell the OTG library code how much time has passed in milliseconds + // since the last call. + // + USBOTGMain(GetTickms()); + + // + // Handle deferred state change. + // + if(g_ui32NewState) + { + g_ui32NewState =0; + + // + // Update the status area of the screen. + // + ClearMainWindow(); + + // + // Update the status bar with the new mode. + // + switch(g_iCurrentMode) + { + case eUSBModeHost: + { + UpdateStatus("Host Mode", 0, true); + break; + } + case eUSBModeDevice: + { + UpdateStatus("Device Mode", 0, true); + break; + } + case eUSBModeNone: + { + UpdateStatus("Idle Mode\n", 0, true); + break; + } + default: + { + break; + } + } + } + + if(g_iCurrentMode == eUSBModeDevice) + { + DeviceMain(); + } + else if(g_iCurrentMode == eUSBModeHost) + { + HostMain(); + } + } +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewd b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewp b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewp new file mode 100644 index 0000000..f73c2f4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ewp @@ -0,0 +1,818 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\uartstdio.c + + + $PROJ_DIR$\usb_dev_mouse.c + + + $PROJ_DIR$\usb_host_mouse.c + + + $PROJ_DIR$\usb_mouse_structs.c + + + $PROJ_DIR$\usb_otg_mouse.c + + + diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.h b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.h new file mode 100644 index 0000000..ed90da9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.h @@ -0,0 +1,49 @@ +//***************************************************************************** +// +// usb_otg_mouse.h - The otg example application common definitions. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __USB_OTG_MOUSE_H__ +#define __USB_OTG_MOUSE_H__ + +void HostInit(void); +void HostMain(void); +void DeviceInit(void); +void DeviceMain(void); +void UpdateStatus(char *pcString, uint32_t ui32Buttons, bool bClrGBg); +void ClearMainWindow(void); + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +extern tContext g_sContext; + +//***************************************************************************** +// +// The system clock frequency in Hz. +// +//***************************************************************************** +extern uint32_t g_ui32SysClock; + +#endif diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.icf b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.icf new file mode 100644 index 0000000..7ba5d52 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_otg_mouse.icf - Linker configuration file for usb_otg_mouse. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ld b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ld new file mode 100644 index 0000000..03d922d --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_otg_mouse.ld - Linker configuration file for usb_otg_mouse. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.sct b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.sct new file mode 100644 index 0000000..cec7e8f --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_otg_mouse.sct - Linker configuration file for usb_otg_mouse. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvopt b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvopt new file mode 100644 index 0000000..4e7c593 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvopt @@ -0,0 +1,429 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_otg_mouse + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\uartstdio.c + uartstdio.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_dev_mouse.c + usb_dev_mouse.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_host_mouse.c + usb_host_mouse.c + + + 1 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_mouse_structs.c + usb_mouse_structs.c + + + 1 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_otg_mouse.c + usb_otg_mouse.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 11 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 12 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + 2 + 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 14 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvproj b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvproj new file mode 100644 index 0000000..19c10e3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse.uvproj @@ -0,0 +1,474 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_otg_mouse + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_otg_mouse + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_otg_mouse.bin .\rvmdk\usb_otg_mouse.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + .;..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_otg_mouse.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + uartstdio.c + 1 + ..\..\..\..\utils\uartstdio.c + + + usb_dev_mouse.c + 1 + .\usb_dev_mouse.c + + + usb_host_mouse.c + 1 + .\usb_host_mouse.c + + + usb_mouse_structs.c + 1 + .\usb_mouse_structs.c + + + usb_otg_mouse.c + 1 + .\usb_otg_mouse.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse_ccs.cmd b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse_ccs.cmd new file mode 100644 index 0000000..f1c94b9 --- /dev/null +++ b/boards/dk-tm4c129x/usb_otg_mouse/usb_otg_mouse_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_otg_mouse_ccs.cmd - CCS linker configuration file for usb_otg_mouse. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/usb_stick_demo/Makefile b/boards/dk-tm4c129x/usb_stick_demo/Makefile new file mode 100644 index 0000000..769c69e --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/Makefile @@ -0,0 +1,90 @@ +#****************************************************************************** +# +# Makefile - Rules for building the usb_stick_demo example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the usb_stick_demo example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_stick_demo.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the usb_stick_demo example. +# +${COMPILER}/usb_stick_demo.axf: ${COMPILER}/frame.o +${COMPILER}/usb_stick_demo.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/usb_stick_demo.axf: ${COMPILER}/pinout.o +${COMPILER}/usb_stick_demo.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_stick_demo.axf: ${COMPILER}/usb_stick_demo.o +${COMPILER}/usb_stick_demo.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/usb_stick_demo.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_stick_demo.axf: usb_stick_demo.ld +SCATTERgcc_usb_stick_demo=usb_stick_demo.ld +ENTRY_usb_stick_demo=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsimportspec new file mode 100644 index 0000000..64f9068 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsproject b/boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/.cproject b/boards/dk-tm4c129x/usb_stick_demo/ccs/.cproject new file mode 100644 index 0000000..6d68498 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/.project b/boards/dk-tm4c129x/usb_stick_demo/ccs/.project new file mode 100644 index 0000000..b425daa --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/.project @@ -0,0 +1,65 @@ + + + usb_stick_demo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_demo/startup_ccs.c + + + usb_stick_demo.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.c + + + usb_stick_demo_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_stick_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.bin b/boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.bin new file mode 100644 index 0000000..0cf2163 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.out b/boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.out new file mode 100644 index 0000000..ec7f7c7 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/ccs/Debug/usb_stick_demo.out differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_stick_demo/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_stick_demo/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_stick_demo/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.bin b/boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.bin new file mode 100644 index 0000000..ef21b81 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.out b/boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.out new file mode 100644 index 0000000..d29377a Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/ewarm/Exe/usb_stick_demo.out differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.axf b/boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.axf new file mode 100644 index 0000000..f5307f4 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.axf differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.bin b/boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.bin new file mode 100644 index 0000000..0e76b2b Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/gcc/usb_stick_demo.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/readme.txt b/boards/dk-tm4c129x/usb_stick_demo/readme.txt new file mode 100644 index 0000000..8690968 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/readme.txt @@ -0,0 +1,39 @@ +USB Stick Update Demo + +An example to demonstrate the use of the flash-based USB stick update +program. This example is meant to be loaded into flash memory from a USB +memory stick, using the USB stick update program (usb_stick_update), +running on the microcontroller. + +After this program is built, the binary file (usb_stick_demo.bin), should +be renamed to the filename expected by usb_stick_update ("FIRMWARE.BIN" by +default) and copied to the root directory of a USB memory stick. Then, +when the memory stick is plugged into the eval board that is running the +usb_stick_update program, this example program will be loaded into flash +and then run on the microcontroller. + +This program simply displays a message on the screen and prompts the user +to press the select button. Once the button is pressed, control is passed +back to the usb_stick_update program which is still is flash, and it will +attempt to load another program from the memory stick. This shows how +a user application can force a new firmware update from the memory stick. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.axf b/boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.axf new file mode 100644 index 0000000..a57bb7c Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.axf differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.bin b/boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.bin new file mode 100644 index 0000000..2eba7d9 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_demo/rvmdk/usb_stick_demo.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_demo/startup_ccs.c b/boards/dk-tm4c129x/usb_stick_demo/startup_ccs.c new file mode 100644 index 0000000..a769216 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/startup_ccs.c @@ -0,0 +1,268 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_demo/startup_ewarm.c b/boards/dk-tm4c129x/usb_stick_demo/startup_ewarm.c new file mode 100644 index 0000000..cf3864b --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/startup_ewarm.c @@ -0,0 +1,299 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_demo/startup_gcc.c b/boards/dk-tm4c129x/usb_stick_demo/startup_gcc.c new file mode 100644 index 0000000..00771a6 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/startup_gcc.c @@ -0,0 +1,315 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_demo/startup_rvmdk.S b/boards/dk-tm4c129x/usb_stick_demo/startup_rvmdk.S new file mode 100644 index 0000000..f07ac83 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/startup_rvmdk.S @@ -0,0 +1,324 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.c b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.c new file mode 100644 index 0000000..80f6e41 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.c @@ -0,0 +1,261 @@ +//***************************************************************************** +// +// usb_stick_demo.c - USB stick update demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_memmap.h" +#include "driverlib/gpio.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "grlib/grlib.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Stick Update Demo (usb_stick_demo)

      +//! +//! An example to demonstrate the use of the flash-based USB stick update +//! program. This example is meant to be loaded into flash memory from a USB +//! memory stick, using the USB stick update program (usb_stick_update), +//! running on the microcontroller. +//! +//! After this program is built, the binary file (usb_stick_demo.bin), should +//! be renamed to the filename expected by usb_stick_update ("FIRMWARE.BIN" by +//! default) and copied to the root directory of a USB memory stick. Then, +//! when the memory stick is plugged into the eval board that is running the +//! usb_stick_update program, this example program will be loaded into flash +//! and then run on the microcontroller. +//! +//! This program simply displays a message on the screen and prompts the user +//! to press the select button. Once the button is pressed, control is passed +//! back to the usb_stick_update program which is still is flash, and it will +//! attempt to load another program from the memory stick. This shows how +//! a user application can force a new firmware update from the memory stick. +// +//***************************************************************************** + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Demonstrate the use of the USB stick update example. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32Count; + uint32_t ui32SysClock; + tContext i16Context; + tRectangle i16Rect; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&i16Context, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&i16Context, "usb-stick-demo"); + + // + // Fill the top 24 rows of the screen with blue to create the banner. + // + i16Rect.i16XMin = 0; + i16Rect.i16YMin = 0; + i16Rect.i16XMax = GrContextDpyWidthGet(&i16Context) - 1; + i16Rect.i16YMax = 23; + GrContextForegroundSet(&i16Context, ClrDarkBlue); + GrRectFill(&i16Context, &i16Rect); + + // + // Put a white box around the banner. + // + GrContextForegroundSet(&i16Context, ClrWhite); + GrRectDraw(&i16Context, &i16Rect); + + // + // Put the application name in the middle of the banner. + // + GrContextFontSet(&i16Context, g_psFontCm20); + GrStringDrawCentered(&i16Context, "usb-stick-demo", -1, + GrContextDpyWidthGet(&i16Context) / 2, 10, 0); + + // + // Indicate what is happening. + // + GrContextFontSet(&i16Context, g_psFontCm24); + GrStringDrawCentered(&i16Context, "Press the SEL button to", -1, + GrContextDpyWidthGet(&i16Context) / 2, 60, 0); + GrStringDrawCentered(&i16Context, "start the USB stick updater", -1, + GrContextDpyWidthGet(&i16Context) / 2, 84, 0); + + // + // Flush any cached drawing operations. + // + GrFlush(&i16Context); + + // + // Wait for the pullup to take effect or the next loop will exist too soon. + // + ROM_SysCtlDelay(1000); + + // + // Wait until the select button has been pressed for ~40ms (in order to + // debounce the press). + // + ui32Count = 0; + while(1) + { + // + // See if the button is pressed. + // + if(ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_1) == 0) + { + // + // Increment the count since the button is pressed. + // + ui32Count++; + + // + // If the count has reached 4, then the button has been debounced + // as being pressed. + // + if(ui32Count == 4) + { + break; + } + } + else + { + // + // Reset the count since the button is not pressed. + // + ui32Count = 0; + } + + // + // Delay for approximately 10ms. + // + ROM_SysCtlDelay(120000000 / (3 * 100)); + } + + // + // Wait until the select button has been released for ~40ms (in order to + // debounce the release). + // + ui32Count = 0; + while(1) + { + // + // See if the button is pressed. + // + if(ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_1) != 0) + { + // + // Increment the count since the button is released. + // + ui32Count++; + + // + // If the count has reached 4, then the button has been debounced + // as being released. + // + if(ui32Count == 4) + { + break; + } + } + else + { + // + // Reset the count since the button is pressed. + // + ui32Count = 0; + } + + // + // Delay for approximately 10ms. + // + ROM_SysCtlDelay(120000000 / (3 * 100)); + } + + // + // Indicate that the updater is being called. + // + GrStringDrawCentered(&i16Context, "The USB stick updater is now", -1, + GrContextDpyWidthGet(&i16Context) / 2, 140, 0); + GrStringDrawCentered(&i16Context, "waiting for a USB stick", -1, + GrContextDpyWidthGet(&i16Context) / 2, 164, 0); + + // + // Flush any cached drawing operations. + // + GrFlush(&i16Context); + + // + // Call the updater so that it will search for an update on a memory stick. + // + (*((void (*)(void))(*(uint32_t *)0x2c)))(); + + // + // The updater should take control, so this should never be reached. + // Just in case, loop forever. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewd b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewp b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewp new file mode 100644 index 0000000..224e575 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ewp @@ -0,0 +1,798 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\usb_stick_demo.c + + + diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.icf b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.icf new file mode 100644 index 0000000..6e4fa72 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_stick_demo.icf - Linker configuration file for usb_stick_demo. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00008000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ld b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ld new file mode 100644 index 0000000..e0d7496 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_stick_demo.ld - Linker configuration file for usb_stick_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 0x000f8000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.sct b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.sct new file mode 100644 index 0000000..a0a4d80 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_stick_demo.sct - Linker configuration file for usb_stick_demo. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00008000 0x000f8000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00008000 0x000f8000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvopt b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvopt new file mode 100644 index 0000000..2167088 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvopt @@ -0,0 +1,345 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_stick_demo + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_stick_demo.c + usb_stick_demo.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 6 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 7 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 8 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvproj b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvproj new file mode 100644 index 0000000..1dfd884 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo.uvproj @@ -0,0 +1,444 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_stick_demo + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_stick_demo + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_stick_demo.bin .\rvmdk\usb_stick_demo.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_stick_demo.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + usb_stick_demo.c + 1 + .\usb_stick_demo.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo_ccs.cmd b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo_ccs.cmd new file mode 100644 index 0000000..e785079 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_demo/usb_stick_demo_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_stick_demo_ccs.cmd - CCS linker configuration file for usb_stick_demo. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00008000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x000f8000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; diff --git a/boards/dk-tm4c129x/usb_stick_update/Makefile b/boards/dk-tm4c129x/usb_stick_update/Makefile new file mode 100644 index 0000000..b1aed62 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/Makefile @@ -0,0 +1,87 @@ +#****************************************************************************** +# +# Makefile - Rules for building the USB memory stick updater example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the USB memory stick updater example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/usb_stick_update.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the USB memory stick updater example. +# +${COMPILER}/usb_stick_update.axf: ${COMPILER}/simple_fs.o +${COMPILER}/usb_stick_update.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/usb_stick_update.axf: ${COMPILER}/usb_stick_update.o +${COMPILER}/usb_stick_update.axf: ${ROOT}/usblib/${COMPILER}/libusb.a +${COMPILER}/usb_stick_update.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/usb_stick_update.axf: usb_stick_update.ld +SCATTERgcc_usb_stick_update=usb_stick_update.ld +ENTRY_usb_stick_update=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/.ccsimportspec b/boards/dk-tm4c129x/usb_stick_update/ccs/.ccsimportspec new file mode 100644 index 0000000..d225a1d --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/.ccsimportspec @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/.ccsproject b/boards/dk-tm4c129x/usb_stick_update/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/.cproject b/boards/dk-tm4c129x/usb_stick_update/ccs/.cproject new file mode 100644 index 0000000..ebaa41e --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/.project b/boards/dk-tm4c129x/usb_stick_update/ccs/.project new file mode 100644 index 0000000..0fe4424 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/.project @@ -0,0 +1,55 @@ + + + usb_stick_update + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + simple_fs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_update/simple_fs.c + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_update/startup_ccs.c + + + usb_stick_update.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.c + + + usb_stick_update_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/usb_stick_update/usb_stick_update_ccs.cmd + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/usb_stick_update/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.bin b/boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.bin new file mode 100644 index 0000000..c173ab1 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.out b/boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.out new file mode 100644 index 0000000..8ab0bc2 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/ccs/Debug/usb_stick_update.out differ diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/macros.ini_initial b/boards/dk-tm4c129x/usb_stick_update/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/usb_stick_update/ccs/target_config.ccxml b/boards/dk-tm4c129x/usb_stick_update/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.bin b/boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.bin new file mode 100644 index 0000000..dfb1e56 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.out b/boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.out new file mode 100644 index 0000000..0e91253 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/ewarm/Exe/usb_stick_update.out differ diff --git a/boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.axf b/boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.axf new file mode 100644 index 0000000..99cb6a0 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.axf differ diff --git a/boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.bin b/boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.bin new file mode 100644 index 0000000..0c58747 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/gcc/usb_stick_update.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_update/readme.txt b/boards/dk-tm4c129x/usb_stick_update/readme.txt new file mode 100644 index 0000000..8f0167b --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/readme.txt @@ -0,0 +1,49 @@ +USB Memory Stick Updater + +This example application behaves the same way as a boot loader. It resides +at the beginning of flash, and will read a binary file from a USB memory +stick and program it into another location in flash. Once the user +application has been programmed into flash, this program will always start +the user application until requested to load a new application. + +When this application starts, if there is a user application already in +flash (at \b APP_START_ADDRESS), then it will just run the user application. +It will attempt to load a new application from a USB memory stick under +the following conditions: + +- no user application is present at \b APP_START_ADDRESS +- the user application has requested an update by transferring control +to the updater +- the user holds down the eval board push button when the board is reset + +When this application is attempting to perform an update, it will wait +forever for a USB memory stick to be plugged in. Once a USB memory stick +is found, it will search the root directory for a specific file name, which +is \e FIRMWARE.BIN by default. This file must be a binary image of the +program you want to load (the .bin file), linked to run from the correct +address, at \b APP_START_ADDRESS. + +The USB memory stick must be formatted as a FAT16 or FAT32 file system +(the normal case), and the binary file must be located in the root +directory. Other files can exist on the memory stick but they will be +ignored. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.axf b/boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.axf new file mode 100644 index 0000000..6d3534c Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.axf differ diff --git a/boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.bin b/boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.bin new file mode 100644 index 0000000..5ad8a57 Binary files /dev/null and b/boards/dk-tm4c129x/usb_stick_update/rvmdk/usb_stick_update.bin differ diff --git a/boards/dk-tm4c129x/usb_stick_update/simple_fs.c b/boards/dk-tm4c129x/usb_stick_update/simple_fs.c new file mode 100644 index 0000000..2fdc17f --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/simple_fs.c @@ -0,0 +1,865 @@ +//***************************************************************************** +// +// simple_fs.c - Functions for simple FAT file system support +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "simple_fs.h" + +//***************************************************************************** +// +// \addtogroup simple_fs_api +// @{ +// +// This file system API should be used as follows: +// - Initialize it by calling SimpleFsInit(). You must supply a pointer to a +// 512 byte buffer that will be used for storing device sector data. +// - "Open" a file by calling SimpleFsOpen() and passing the 8.3-style filename +// as an 11-character string. +// - Read successive sectors from the file by using the convenience macro +// SimpleFsReadFileSector(). +// +// This API does not use any file handles so there is no way to open more than +// one file at a time. There is also no random access into the file, each +// sector must be read in sequence. +// +// The client of this API supplies a 512-byte buffer for storage of data read +// from the device. But this file also maintains an additional, internal +// 512-byte buffer used for caching FAT sectors. This minimizes the amount +// of device reads required to fetch cluster chain entries from the FAT. +// +// The application code (the client) must also provide a function used for +// reading sectors from the storage device, whatever it may be. This allows +// the code in this file to be independent of the type of device used for +// storing the file system. The name of the function is +// SimpleFsReadMediaSector(). +// +//***************************************************************************** + +//***************************************************************************** +// +// Setup a macro for handling packed data structures. +// +//***************************************************************************** +#if defined(ccs) || \ + defined(codered) || \ + defined(gcc) || \ + defined(rvmdk) || \ + defined(__ARMCC_VERSION) || \ + defined(sourcerygxx) +#define PACKED __attribute__((packed)) +#elif defined(ewarm) +#define PACKED +#else +#error "Unrecognized COMPILER!" +#endif + +//***************************************************************************** +// +// Instruct the IAR compiler to pack the following structures. +// +//***************************************************************************** +#ifdef ewarm +#pragma pack(1) +#endif + +//***************************************************************************** +// +// Structures for mapping FAT file system +// +//***************************************************************************** + +//***************************************************************************** +// +// The FAT16 boot sector extension +// +//***************************************************************************** +typedef struct +{ + uint8_t ui8DriveNumber; + uint8_t ui8Reserved; + uint8_t ui8ExtSig; + uint32_t ui32Serial; + char pcVolumeLabel[11]; + char pcFsType[8]; + uint8_t ui8BootCode[448]; + uint16_t ui16Sig; +} +PACKED tBootExt16; + +//***************************************************************************** +// +// The FAT32 boot sector extension +// +//***************************************************************************** +typedef struct +{ + uint32_t ui32SectorsPerFAT; + uint16_t ui16Flags; + uint16_t ui16Version; + uint32_t ui32RootCluster; + uint16_t ui16InfoSector; + uint16_t ui16BootCopy; + uint8_t ui8Reserved[12]; + uint8_t ui8DriveNumber; + uint8_t ui8Reserved1; + uint8_t ui8ExtSig; + uint32_t ui32Serial; + char pcVolumeLabel[11]; + char pcFsType[8]; + uint8_t ui8BootCode[420]; + uint16_t ui16Sig; +} +PACKED tBootExt32; + +//***************************************************************************** +// +// The FAT16/32 boot sector main section +// +//***************************************************************************** +typedef struct +{ + uint8_t ui8Jump[3]; + uint8_t i8OEMName[8]; + uint16_t ui16BytesPerSector; + uint8_t ui8SectorsPerCluster; + uint16_t ui16ReservedSectors; + uint8_t ui8NumFATs; + uint16_t ui16NumRootEntries; + uint16_t ui16TotalSectorsSmall; + uint8_t ui8MediaDescriptor; + uint16_t ui16SectorsPerFAT; + uint16_t ui16SectorsPerTrack; + uint16_t ui16NumberHeads; + uint32_t ui32HiddenSectors; + uint32_t ui32TotalSectorsBig; + union + { + tBootExt16 sExt16; + tBootExt32 sExt32; + } + PACKED ext; +} +PACKED tBootSector; + +//***************************************************************************** +// +// The partition table +// +//***************************************************************************** +typedef struct +{ + uint8_t ui8Status; + uint8_t ui8CHSFirst[3]; + uint8_t ui8Type; + uint8_t ui8CHSLast[3]; + uint32_t ui32FirstSector; + uint32_t ui32NumBlocks; +} +PACKED tPartitionTable; + +//***************************************************************************** +// +// The master boot record (MBR) +// +//***************************************************************************** +typedef struct +{ + uint8_t ui8CodeArea[440]; + uint8_t ui8DiskSignature[4]; + uint8_t ui8Nulls[2]; + tPartitionTable sPartTable[4]; + uint16_t ui16Sig; +} +PACKED tMasterBootRecord; + +//***************************************************************************** +// +// The structure for a single directory entry +// +//***************************************************************************** +typedef struct +{ + char pcFileName[11]; + uint8_t ui8Attr; + uint8_t ui8Reserved; + uint8_t ui8CreateTime[5]; + uint8_t ui8LastDate[2]; + uint16_t ui16ClusterHi; + uint8_t ui8LastModified[4]; + uint16_t ui16Cluster; + uint32_t ui32FileSize; +} +PACKED tDirEntry; + +//***************************************************************************** +// +// Tell the IAR compiler that the remaining structures do not need to be +// packed. +// +//***************************************************************************** +#ifdef ewarm +#pragma pack() +#endif + +//***************************************************************************** +// +// This structure holds information about the layout of the file system +// +//***************************************************************************** +typedef struct +{ + uint32_t ui32FirstSector; + uint32_t ui32NumBlocks; + uint16_t ui16SectorsPerCluster; + uint16_t ui16MaxRootEntries; + uint32_t ui32SectorsPerFAT; + uint32_t ui32FirstFATSector; + uint32_t ui32LastFATSector; + uint32_t ui32FirstDataSector; + uint32_t ui32Type; + uint32_t ui32StartRootDir; +} +tPartitionInfo; + +static tPartitionInfo sPartInfo; + +//***************************************************************************** +// +// A pointer to the client provided sector buffer. +// +//***************************************************************************** +static uint8_t *g_pui8SectorBuf; + +//***************************************************************************** +// +// Initializes the simple file system +// +// \param pui8SectorBuf is a pointer to a caller supplied 512-byte buffer +// that will be used for holding sectors that are loaded from the media +// storage device. +// +// Reads the MBR, partition table, and boot record to find the logical +// structure of the file system. This function stores the file system +// structural data internally so that the remaining functions of the API +// can read the file system. +// +// To read data from the storage device, the function SimpleFsReadMediaSector() +// will be called. This function is not implemented here but must be +// implemented by the user of this simple file system. +// +// This file system support is extremely simple-minded. It will only +// find the first partition of a FAT16 or FAT32 formatted mass storage +// device. Only very minimal error checking is performed in order to save +// code space. +// +// \return Zero if successful, non-zero if there was an error. +// +//***************************************************************************** +uint32_t +SimpleFsInit(uint8_t *pui8SectorBuf) +{ + tMasterBootRecord *pMBR; + tPartitionTable *pPart; + tBootSector *pBoot; + + // + // Save the sector buffer pointer. The input parameter is assumed + // to be good. + // + g_pui8SectorBuf = pui8SectorBuf; + + // + // Get the MBR + // + if(SimpleFsReadMediaSector(0, pui8SectorBuf)) + { + return(1); + } + + // + // Verify MBR signature - bare minimum validation of MBR. + // + pMBR = (tMasterBootRecord *)pui8SectorBuf; + if(pMBR->ui16Sig != 0xAA55) + { + return(1); + } + + // + // See if this is a MBR or a boot sector. + // + pBoot = (tBootSector *)pui8SectorBuf; + if((strncmp(pBoot->ext.sExt16.pcFsType, "FAT", 3) != 0) && + (strncmp(pBoot->ext.sExt32.pcFsType, "FAT32", 5) != 0)) + { + // + // Get the first partition table + // + pPart = &(pMBR->sPartTable[0]); + + // + // Could optionally check partition type here ... + // + + // + // Get the partition location and size + // + sPartInfo.ui32FirstSector = pPart->ui32FirstSector; + sPartInfo.ui32NumBlocks = pPart->ui32NumBlocks; + + // + // Read the boot sector from the partition + // + if(SimpleFsReadMediaSector(sPartInfo.ui32FirstSector, pui8SectorBuf)) + { + return(1); + } + } + else + { + // + // Extract the number of sectors from the boot sector. + // + sPartInfo.ui32FirstSector = 0; + if(pBoot->ui16TotalSectorsSmall == 0) + { + sPartInfo.ui32NumBlocks = pBoot->ui32TotalSectorsBig; + } + else + { + sPartInfo.ui32NumBlocks = pBoot->ui16TotalSectorsSmall; + } + } + + // + // Get pointer to the boot sector + // + if(pBoot->ext.sExt16.ui16Sig != 0xAA55) + { + return(1); + } + + // + // Verify the sector size is 512. We can't deal with anything else + // + if(pBoot->ui16BytesPerSector != 512) + { + return(1); + } + + // + // Extract some info from the boot record + // + sPartInfo.ui16SectorsPerCluster = pBoot->ui8SectorsPerCluster; + sPartInfo.ui16MaxRootEntries = pBoot->ui16NumRootEntries; + + // + // Decide if we are dealing with FAT16 or FAT32. + // If number of root entries is 0, that suggests FAT32 + // + if(sPartInfo.ui16MaxRootEntries == 0) + { + // + // Confirm FAT 32 signature in the expected place + // + if(!strncmp(pBoot->ext.sExt32.pcFsType, "FAT32 ", 8)) + { + sPartInfo.ui32Type = 32; + } + else + { + return(1); + } + } + // + // Root entries is non-zero, suggests FAT16 + // + else + { + // + // Confirm FAT16 signature + // + if(!strncmp(pBoot->ext.sExt16.pcFsType, "FAT16 ", 8)) + { + sPartInfo.ui32Type = 16; + } + else + { + return(1); + } + } + + // + // Find the beginning of the FAT, in absolute sectors + // + sPartInfo.ui32FirstFATSector = sPartInfo.ui32FirstSector + + pBoot->ui16ReservedSectors; + + // + // Find the end of the FAT in absolute sectors. FAT16 and 32 + // are handled differently. + // + sPartInfo.ui32SectorsPerFAT = (sPartInfo.ui32Type == 16) ? + pBoot->ui16SectorsPerFAT : + pBoot->ext.sExt32.ui32SectorsPerFAT; + sPartInfo.ui32LastFATSector = sPartInfo.ui32FirstFATSector + + sPartInfo.ui32SectorsPerFAT - 1; + + // + // Find the start of the root directory and the data area. + // For FAT16, the root will be stored as an absolute sector number + // For FAT32, the root will be stored as the starting cluster of the root + // The data area start is the absolute first sector of the data area. + // + if(sPartInfo.ui32Type == 16) + { + sPartInfo.ui32StartRootDir = sPartInfo.ui32FirstFATSector + + (sPartInfo.ui32SectorsPerFAT * + pBoot->ui8NumFATs); + sPartInfo.ui32FirstDataSector = sPartInfo.ui32StartRootDir + + (sPartInfo.ui16MaxRootEntries / 16); + } + else + { + sPartInfo.ui32StartRootDir = pBoot->ext.sExt32.ui32RootCluster; + sPartInfo.ui32FirstDataSector = sPartInfo.ui32FirstFATSector + + (sPartInfo.ui32SectorsPerFAT * pBoot->ui8NumFATs); + } + + // + // At this point the file system has been initialized, so return + // success to the caller. + // + return(0); +} + +//***************************************************************************** +// +// Find the next cluster in a FAT chain +// +// \param ui32ThisCluster is the current cluster in the chain +// +// Reads the File Allocation Table (FAT) of the file system to find the +// next cluster in a chain of clusters. The current cluster is passed in +// and the next cluster in the chain will be returned. +// +// This function reads sectors from the storage device as needed in order +// to parse the FAT tables. Error handling is minimal since there is not +// much that can be done if an error is encountered. If any error is +// encountered, or if this is the last cluster in the chain, then 0 is +// returned. This signals the caller to stop traversing the chain (either +// due to error or end of chain). +// +// The function maintains a cache of a single sector from the FAT. It only +// reads in a new FAT sector if the requested cluster is not in the +// currently cached sector. +// +// \return Next cluster number if successful, 0 if this is the last cluster +// or any error is found. +// +//***************************************************************************** +static uint32_t +SimpleFsGetNextCluster(uint_fast32_t ui32ThisCluster) +{ + static uint8_t ui8FATCache[512]; + static uint_fast32_t ui32CachedFATSector = (uint32_t)-1; + uint_fast32_t ui32ClustersPerFATSector; + uint_fast32_t ui32ClusterIdx; + uint_fast32_t ui32FATSector; + uint_fast32_t ui32NextCluster; + uint_fast32_t ui32MaxCluster; + + // + // Compute the maximum possible reasonable cluster number + // + ui32MaxCluster = sPartInfo.ui32NumBlocks / sPartInfo.ui16SectorsPerCluster; + + // + // Make sure cluster input number is reasonable. If not then return + // 0 indicating error. + // + if((ui32ThisCluster < 2) || (ui32ThisCluster > ui32MaxCluster)) + { + return(0); + } + + // + // Compute the index of the requested cluster within the sector. + // Also compute the sector number within the FAT that contains the + // entry for the requested cluster. + // + ui32ClustersPerFATSector = (sPartInfo.ui32Type == 16) ? 256 : 128; + ui32ClusterIdx = ui32ThisCluster % ui32ClustersPerFATSector; + ui32FATSector = ui32ThisCluster / ui32ClustersPerFATSector; + + // + // Check to see if the FAT sector we need is already cached + // + if(ui32FATSector != ui32CachedFATSector) + { + // + // FAT sector we need is not cached, so read it in + // + if(SimpleFsReadMediaSector(sPartInfo.ui32FirstFATSector + ui32FATSector, + ui8FATCache) != 0) + { + // + // There was an error so mark cache as unavailable and return + // an error. + // + ui32CachedFATSector = (uint32_t)-1; + return(0); + } + + // + // Remember which FAT sector was just loaded into the cache. + // + ui32CachedFATSector = ui32FATSector; + } + + // + // Now look up the next cluster value from the cached sector, using this + // requested cluster as an index. It needs to be indexed as 16 or 32 + // bit values depending on whether it is FAT16 or 32 + // If the cluster value means last cluster, then return 0 + // + if(sPartInfo.ui32Type == 16) + { + ui32NextCluster = ((uint16_t *)ui8FATCache)[ui32ClusterIdx]; + if(ui32NextCluster >= 0xFFF8) + { + return(0); + } + } + else + { + ui32NextCluster = ((uint32_t *)ui8FATCache)[ui32ClusterIdx]; + if(ui32NextCluster >= 0x0FFFFFF8) + { + return(0); + } + } + + // + // Check new cluster value to make sure it is reasonable. If not then + // return 0 to indicate an error. + // + if((ui32NextCluster >= 2) && (ui32NextCluster <= ui32MaxCluster)) + { + return(ui32NextCluster); + } + else + { + return(0); + } +} + +//***************************************************************************** +// +// Read a single sector from a file into the sector buffer +// +// \param ui32StartCluster is the first cluster of the file, used to +// initialize the file read. Use 0 for successive sectors. +// +// Reads sectors in sequence from a file and stores the data in the sector +// buffer that was passed in the initial call to SimpleFsInit(). The function +// is initialized with the file to read by passing the starting cluster of +// the file. The function will initialize some static data and return. It +// does not read any file data when passed a starting cluster (and +// returns 0 - this is normal). +// +// Once the function has been initialized with the file's starting cluster, +// then successive calls should be made, passing a value of 0 for the +// cluster number. This tells the function to read the next sector from the +// file and store it in the sector buffer. The function remembers the last +// sector that was read, and each time it is called with a cluster value of +// 0, it will read the next sector. The function will traverse the FAT +// chain as needed to read all the sectors. When a sector has been +// successfully read from a file, the function will return non-zero. When +// there are no more sectors to read, or any error is encountered, the +// function will return 0. +// +// Note that the function always reads a whole sector, even if the end of +// a file does not fill the last sector. It is the responsibility of the +// caller to track the file size and to deal with a partially full last +// sector. +// +// \return Non-zero if a sector was read into the sector buffer, or +// 0 if there are no more sectors or if any error occurred. +// +//***************************************************************************** +uint32_t +SimpleFsGetNextFileSector(uint_fast32_t ui32StartCluster) +{ + static uint_fast32_t ui32WorkingCluster = 0; + static uint_fast32_t ui32WorkingSector; + uint_fast32_t ui32ReadSector; + + // + // If user specified starting cluster, then init the working cluster + // and sector values + // + if(ui32StartCluster) + { + ui32WorkingCluster = ui32StartCluster; + ui32WorkingSector = 0; + return(0); + } + + // + // Otherwise, make sure there is a valid working cluster already + // + else if(ui32WorkingCluster == 0) + { + return(0); + } + + // + // If the current working sector is the same as sectors per cluster, + // then that means that the next cluster needs to be loaded. + // + if(ui32WorkingSector == sPartInfo.ui16SectorsPerCluster) + { + // + // Get the next cluster in the chain for this file. + // + ui32WorkingCluster = SimpleFsGetNextCluster(ui32WorkingCluster); + + // + // If the next cluster is valid, then reset the working sector + // + if(ui32WorkingCluster) + { + ui32WorkingSector = 0; + } + + // + // Next cluster is not valid, or this was the end of the chain. + // Clear the working cluster and return an indication that no new + // sector data was loaded. + // + else + { + ui32WorkingCluster = 0; + return(0); + } + } + + // + // Calculate the sector to read from. It is the sector of the start + // of the working cluster, plus the working sector (the sector within + // the cluster), plus the offset to the start of the data area. + // Note that the cluster needs to be reduced by 2 in order to index + // properly into the data area. That is a feature of FAT file system. + // + ui32ReadSector = (ui32WorkingCluster - 2) * sPartInfo.ui16SectorsPerCluster; + ui32ReadSector += ui32WorkingSector; + ui32ReadSector += sPartInfo.ui32FirstDataSector; + + // + // Attempt to read the next sector from the cluster. If not successful, + // then clear the working cluster and return a non-success indication. + // + if(SimpleFsReadMediaSector(ui32ReadSector, g_pui8SectorBuf) != 0) + { + ui32WorkingCluster = 0; + return(0); + } + else + { + // + // Read was successful. Increment to the next sector of the cluster + // and return a success indication. + // + ui32WorkingSector++; + return(1); + } +} + +//***************************************************************************** +// +// Find a file in the root directory of the file system and open it for +// reading. +// +// \param pcName83 is an 11-character string that represents the 8.3 file +// name of the file to open. +// +// This function traverses the root directory of the file system to find +// the file name specified by the caller. Note that the file name must be +// an 8.3 file name that is 11 characters int32_t. The first 8 characters are +// the base name and the last 3 characters are the extension. If there are +// fewer characters in the base name or extension, the name should be padded +// with spaces. For example "myfile.bn" has fewer than 11 characters, and +// should be passed with padding like this: "myfile bn ". Note the extra +// spaces, and that the dot ('.') is not part of the string that is passed +// to this function. +// +// If the file is found, then it initializes the file for reading, and returns +// the file length. The file can be read by making successive calls to +// SimpleFsReadFileSector(). +// +// The function only searches the root directory and ignores any +// subdirectories. It also ignores any int32_t file name entries, looking only +// at the 8.3 file name for a match. +// +// \return The size of the file if it is found, or 0 if the file could not +// be found. +// +//***************************************************************************** +uint32_t +SimpleFsOpen(char *pcName83) +{ + tDirEntry *pDirEntry; + uint_fast32_t ui32DirSector; + uint_fast32_t ui32FirstCluster; + + // + // Find starting root dir sector, only used for FAT16 + // If FAT32 then this is the first cluster of root dir + // + ui32DirSector = sPartInfo.ui32StartRootDir; + + // + // For FAT32, root dir is like a file, so init a file read of the root dir + // + if(sPartInfo.ui32Type == 32) + { + SimpleFsGetNextFileSector(ui32DirSector); + } + + // + // Search the root directory entry for the firmware file + // + while(1) + { + // + // Read in a directory block. + // + if(sPartInfo.ui32Type == 16) + { + // + // For FAT16, read in a sector of the root directory + // + if(SimpleFsReadMediaSector(ui32DirSector, g_pui8SectorBuf)) + { + return(0); + } + } + else + { + // + // For FAT32, the root directory is treated like a file. + // The root directory sector will be loaded into the sector buf + // + if(SimpleFsGetNextFileSector(0) == 0) + { + return(0); + } + } + + // + // Initialize the directory entry pointer to the first entry of + // this sector. + // + pDirEntry = (tDirEntry *)g_pui8SectorBuf; + + // + // Iterate through all the directory entries in this sector + // + while((uint8_t *)pDirEntry < &g_pui8SectorBuf[512]) + { + // + // If the 8.3 filename of this entry matches the firmware + // file name, then we have a match, so return a pointer to + // this entry. + // + if(!strncmp(pDirEntry->pcFileName, pcName83, 11)) + { + // + // Compute the starting cluster of the file + // + ui32FirstCluster = pDirEntry->ui16Cluster; + if(sPartInfo.ui32Type == 32) + { + // + // For FAT32, add in the upper word of the + // starting cluster number + // + ui32FirstCluster += pDirEntry->ui16ClusterHi << 16; + } + + // + // Initialize the start of the file + // + SimpleFsGetNextFileSector(ui32FirstCluster); + return(pDirEntry->ui32FileSize); + } + + // + // Advance to the next entry in this sector. + // + pDirEntry++; + } + + // + // Need to get the next sector in the directory. Handled + // differently depending on if this is FAT16 or 32 + // + if(sPartInfo.ui32Type == 16) + { + // + // FAT16: advance sectors as int32_t as there are more possible + // entries. + // + sPartInfo.ui16MaxRootEntries -= 512 / 32; + if(sPartInfo.ui16MaxRootEntries) + { + ui32DirSector++; + } + else + { + // + // Ran out of directory entries and didn't find the file, + // so return a null. + // + return(0); + } + } + else + { + // + // FAT32: there is nothing to compute here. The next root + // dir sector will be fetched at the top of the loop + // + } + } +} + +//***************************************************************************** +// +// Close the Doxygen group. +// @} +// +//***************************************************************************** diff --git a/boards/dk-tm4c129x/usb_stick_update/simple_fs.h b/boards/dk-tm4c129x/usb_stick_update/simple_fs.h new file mode 100644 index 0000000..86fff46 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/simple_fs.h @@ -0,0 +1,105 @@ +//***************************************************************************** +// +// simple_fs.h - Header for simple FAT file system support +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#ifndef __SIMPLE_FS_H__ +#define __SIMPLE_FS_H__ + +//***************************************************************************** +// +// \addtogroup simple_fs_api +// @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// Macro to read a single sector from a file that was opened with +// SimpleFsOpen() +// +// This convenience macro maps to the function SimpleFsGetNextFileSector() +// called with a parameter of 0. It should be used to read successive +// sectors from a file after the file has been opened with SimpleFsOpen(). +// +// When a sector is read, it is loaded into the sector buffer that was passed +// when SimpleFsInit() was called. +// +// A non-zero value will be returned to the caller as int32_t as successive +// sectors are successfully read into the sector buffer. At the end of the +// file, or if there is any error, then a value of 0 is returned. +// +// Note that the a whole sector is always loaded, even if the end of +// a file does not fill the last sector. It is the responsibility of the +// caller to track the file size and to deal with a partially full last +// sector. +// +// \return Non-zero if a sector was read into the sector buffer, or +// 0 if there are no more sectors or if any error occurred. +// +//***************************************************************************** +#define SimpleFsReadFileSector() SimpleFsGetNextFileSector(0) + +//***************************************************************************** +// +// Read a single sector from the application-specific storage device into +// the sector buffer. +// +// \param ui32Sector is the absolute sector number to read from the storage +// device +// \param pui8SectorBuf is a pointer to a 512 byte buffer where the sector +// data should be written +// +// This function is used by the simple file system functions to read a sector +// of data from a storage device. It must be implemented as part of the +// application specific code. For example, it could be used to read sectors +// from a USB mass storage device, or from an SD card, or any device that can +// be used to store a FAT file system. Note that the sector size is always +// assumed to be 512 bytes. +// +// \return Zero value if a sector of data was successfully read from the +// device and stored in the sector buffer, non-zero if not successful. +// +//***************************************************************************** +// +// This function to be supplied by the client +// +extern uint32_t SimpleFsReadMediaSector(uint_fast32_t ui32Sector, + uint8_t *pui8SectorBuf); + +//***************************************************************************** +// +// Close the Doxygen group. +// @} +// +//***************************************************************************** + +//***************************************************************************** +// +// Functions to help with accessing the FAT file system on a storage device +// +//**************************************************************************** +extern uint32_t SimpleFsInit(uint8_t *pui8SectorBuf); +extern uint32_t SimpleFsOpen(char *pcName83); +extern uint32_t SimpleFsGetNextFileSector(uint_fast32_t ui32StartCluster); + +#endif // __SIMPLE_FS_H__ diff --git a/boards/dk-tm4c129x/usb_stick_update/startup_ccs.c b/boards/dk-tm4c129x/usb_stick_update/startup_ccs.c new file mode 100644 index 0000000..2ac9b8b --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void AppForceUpdate(void); +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + AppForceUpdate, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_update/startup_ewarm.c b/boards/dk-tm4c129x/usb_stick_update/startup_ewarm.c new file mode 100644 index 0000000..55e3cf3 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void AppForceUpdate(void); +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + AppForceUpdate, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_update/startup_gcc.c b/boards/dk-tm4c129x/usb_stick_update/startup_gcc.c new file mode 100644 index 0000000..6e9a465 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void AppForceUpdate(void); +extern void USB0HostIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[256]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + AppForceUpdate, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + IntDefaultHandler, // ADC Sequence 3 + IntDefaultHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + USB0HostIntHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/usb_stick_update/startup_rvmdk.S b/boards/dk-tm4c129x/usb_stick_update/startup_rvmdk.S new file mode 100644 index 0000000..7d18e70 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000400 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN AppForceUpdate + EXTERN USB0HostIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD AppForceUpdate ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD IntDefaultHandler ; ADC Sequence 3 + DCD IntDefaultHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD USB0HostIntHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.c b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.c new file mode 100644 index 0000000..8281c2c --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.c @@ -0,0 +1,942 @@ +//***************************************************************************** +// +// usb_stick_update.c - Example to update flash from a USB memory stick. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include +#include "inc/hw_flash.h" +#include "inc/hw_gpio.h" +#include "inc/hw_memmap.h" +#include "inc/hw_nvic.h" +#include "inc/hw_sysctl.h" +#include "inc/hw_types.h" +#include "driverlib/gpio.h" +#include "driverlib/pin_map.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/udma.h" +#include "usblib/usblib.h" +#include "usblib/usbmsc.h" +#include "usblib/host/usbhost.h" +#include "usblib/host/usbhmsc.h" +#include "simple_fs.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      USB Memory Stick Updater (usb_stick_update)

      +//! +//! This example application behaves the same way as a boot loader. It resides +//! at the beginning of flash, and will read a binary file from a USB memory +//! stick and program it into another location in flash. Once the user +//! application has been programmed into flash, this program will always start +//! the user application until requested to load a new application. +//! +//! When this application starts, if there is a user application already in +//! flash (at \b APP_START_ADDRESS), then it will just run the user application. +//! It will attempt to load a new application from a USB memory stick under +//! the following conditions: +//! +//! - no user application is present at \b APP_START_ADDRESS +//! - the user application has requested an update by transferring control +//! to the updater +//! - the user holds down the eval board push button when the board is reset +//! +//! When this application is attempting to perform an update, it will wait +//! forever for a USB memory stick to be plugged in. Once a USB memory stick +//! is found, it will search the root directory for a specific file name, which +//! is \e FIRMWARE.BIN by default. This file must be a binary image of the +//! program you want to load (the .bin file), linked to run from the correct +//! address, at \b APP_START_ADDRESS. +//! +//! The USB memory stick must be formatted as a FAT16 or FAT32 file system +//! (the normal case), and the binary file must be located in the root +//! directory. Other files can exist on the memory stick but they will be +//! ignored. +// +//***************************************************************************** + +//***************************************************************************** +// +// Defines the number of times to call to check if the attached device is +// ready. +// +//***************************************************************************** +#define USBMSC_DRIVE_RETRY 4 + +//***************************************************************************** +// +// The name of the binary firmware file on the USB stick. This is the user +// application that will be searched for and loaded into flash if it is found. +// Note that the name of the file must be 11 characters total, 8 for the base +// name and 3 for the extension. If the actual file name has fewer characters +// then it must be padded with spaces. This macro should not contain the dot +// "." for the extension. +// +// Examples: firmware.bin --> "FIRMWAREBIN" +// myfile.bn --> "MYFILE BN " +// +//***************************************************************************** +#define USB_UPDATE_FILENAME "FIRMWAREBIN" + +//***************************************************************************** +// +// The size of the flash for this microcontroller. +// +//***************************************************************************** +#define FLASH_SIZE (1 * 1024 * 1024) + +//***************************************************************************** +// +// The starting address for the application that will be loaded into flash +// memory from the USB stick. This address must be high enough to be above +// the USB stick updater, and must be on a 1K boundary. +// Note that the application that will be loaded must also be linked to run +// from this address. +// +//***************************************************************************** +#define APP_START_ADDRESS 0x8000 + +//***************************************************************************** +// +// A memory location and value that is used to indicate that the application +// wants to force an update. +// +//***************************************************************************** +#define FORCE_UPDATE_ADDR 0x20004000 +#define FORCE_UPDATE_VALUE 0x1234cdef + +//***************************************************************************** +// +// The prototype for the function that is used to call the user application. +// +//***************************************************************************** +void CallApplication(uint_fast32_t ui32StartAddr); + +//***************************************************************************** +// +// The control table used by the uDMA controller. This table must be aligned +// to a 1024 byte boundary. In this application uDMA is only used for USB, +// so only the first 6 channels are needed. +// +//***************************************************************************** +#if defined(ewarm) +#pragma data_alignment=1024 +tDMAControlTable g_sDMAControlTable[6]; +#elif defined(ccs) +#pragma DATA_ALIGN(g_sDMAControlTable, 1024) +tDMAControlTable g_sDMAControlTable[6]; +#else +tDMAControlTable g_sDMAControlTable[6] __attribute__ ((aligned(1024))); +#endif + +//***************************************************************************** +// +// The global that holds all of the host drivers in use in the application. +// In this case, only the MSC class is loaded. +// +//***************************************************************************** +static tUSBHostClassDriver const * const g_ppHostClassDrivers[] = +{ + &g_sUSBHostMSCClassDriver +}; + +//***************************************************************************** +// +// This global holds the number of class drivers in the g_ppHostClassDrivers +// list. +// +//***************************************************************************** +#define NUM_CLASS_DRIVERS (sizeof(g_ppHostClassDrivers) / \ + sizeof(g_ppHostClassDrivers[0])) + +//***************************************************************************** +// +// Hold the current state for the application. +// +//***************************************************************************** +volatile enum +{ + // + // No device is present. + // + STATE_NO_DEVICE, + + // + // Mass storage device is being enumerated. + // + STATE_DEVICE_ENUM, +} +g_eState; + +//***************************************************************************** +// +// The instance data for the MSC driver. +// +//***************************************************************************** +tUSBHMSCInstance *g_psMSCInstance = 0; + +//***************************************************************************** +// +// The size of the host controller's memory pool in bytes. +// +//***************************************************************************** +#define HCD_MEMORY_SIZE 128 + +//***************************************************************************** +// +// The memory pool to provide to the Host controller driver. +// +//***************************************************************************** +uint8_t g_pHCDPool[HCD_MEMORY_SIZE]; + +//***************************************************************************** +// +// A buffer for holding sectors read from the storage device +// +//***************************************************************************** +static uint8_t g_ui8SectorBuf[512]; + +//***************************************************************************** +// +// Global to hold the clock rate. Set once read many. +// +//***************************************************************************** +uint32_t g_ui32SysClock; + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// Read a sector from the USB mass storage device. +// +// \param ui32Sector is the sector to read from the connected USB mass storage +// device (memory stick) +// \param pui8Buf is a pointer to the buffer where the sector data should be +// stored +// +// This is the application-specific implementation of a function to read +// sectors from a storage device, in this case a USB mass storage device. +// This function is called from the \e simple_fs.c file when it needs to read +// data from the storage device. +// +// \return Non-zero if data was read from the device, 0 if no data was read. +// +//***************************************************************************** +uint32_t +SimpleFsReadMediaSector(uint_fast32_t ui32Sector, uint8_t *pui8Buf) +{ + // + // Return the requested sector from the connected USB mass storage + // device. + // + return(USBHMSCBlockRead(g_psMSCInstance, ui32Sector, pui8Buf, 1)); +} + +//***************************************************************************** +// +// This is the callback from the MSC driver. +// +// \param ui32Instance is the driver instance which is needed when communicating +// with the driver. +// \param ui32Event is one of the events defined by the driver. +// \param pvData is a pointer to data passed into the initial call to register +// the callback. +// +// This function handles callback events from the MSC driver. The only events +// currently handled are the \b MSC_EVENT_OPEN and \b MSC_EVENT_CLOSE. This +// allows the main routine to know when an MSC device has been detected and +// enumerated and when an MSC device has been removed from the system. +// +// \return Returns \e true on success or \e false on failure. +// +//***************************************************************************** +static void +MSCCallback(tUSBHMSCInstance *psMSCInstance, uint32_t ui32Event, void *pvData) +{ + // + // Determine the event. + // + switch(ui32Event) + { + // + // Called when the device driver has successfully enumerated an MSC + // device. + // + case MSC_EVENT_OPEN: + { + // + // Proceed to the enumeration state. + // + g_eState = STATE_DEVICE_ENUM; + break; + } + + // + // Called when the device driver has been unloaded due to error or + // the device is no longer present. + // + case MSC_EVENT_CLOSE: + { + // + // Go back to the "no device" state and wait for a new connection. + // + g_eState = STATE_NO_DEVICE; + break; + } + + default: + { + break; + } + } +} + +//***************************************************************************** +// +// Read the application image from the file system and program it into flash. +// +// This function will attempt to open and read the firmware image file from +// the mass storage device. If the file is found it will be programmed into +// flash. The name of the file to be read is configured by the macro +// \b USB_UPDATE_FILENAME. It will be programmed into flash starting at the +// address specified by APP_START_ADDRESS. +// +// \return Zero if successful or non-zero if the file cannot be read or +// programmed. +// +//***************************************************************************** +uint32_t +ReadAppAndProgram(void) +{ + uint_fast32_t ui32FlashEnd; + uint_fast32_t ui32FileSize; + uint_fast32_t ui32DataSize; + uint_fast32_t ui32Remaining; + uint_fast32_t ui32ProgAddr; + uint_fast32_t ui32SavedRegs[2]; + volatile uint_fast32_t ui32Idx; + uint_fast32_t ui32DriveTimeout; + + // + // Initialize the drive timeout. + // + ui32DriveTimeout = USBMSC_DRIVE_RETRY; + + // + // Check to see if the mass storage device is ready. Some large drives + // take a while to be ready, so retry until they are ready. + // + while(USBHMSCDriveReady(g_psMSCInstance)) + { + // + // Wait about 500ms before attempting to check if the + // device is ready again. + // + SysCtlDelay(g_ui32SysClock/(3*2)); + + // + // Decrement the retry count. + // + ui32DriveTimeout--; + + // + // If the timeout is hit then return with a failure. + // + if(ui32DriveTimeout == 0) + { + return(1); + } + } + + // + // Initialize the file system and return if error. + // + if(SimpleFsInit(g_ui8SectorBuf)) + { + return(1); + } + + // + // Attempt to open the firmware file, retrieving the file/image size. + // A file size of error means the file was not there, or there was an + // error. + // + ui32FileSize = SimpleFsOpen(USB_UPDATE_FILENAME); + if(ui32FileSize == 0) + { + return(1); + } + + // + // Get the size of flash. This is the ending address of the flash. + // If reserved space is configured, then the ending address is reduced + // by the amount of the reserved block. + // + ui32FlashEnd = FLASH_SIZE; +#ifdef FLASH_RSVD_SPACE + ui32FlashEnd -= FLASH_RSVD_SPACE; +#endif + + // + // If flash code protection is not used, then change the ending address + // to be the ending of the application image. This will be the highest + // flash page that will be erased and so only the necessary pages will + // be erased. If flash code protection is enabled, then all of the + // application area pages will be erased. + // +#ifndef FLASH_CODE_PROTECTION + ui32FlashEnd = ui32FileSize + APP_START_ADDRESS; +#endif + + // + // Check to make sure the file size is not too large to fit in the flash. + // If it is too large, then return an error. + // + if((ui32FileSize + APP_START_ADDRESS) > ui32FlashEnd) + { + return(1); + } + + // + // Enter a loop to erase all the requested flash pages beginning at the + // application start address (above the USB stick updater). + // + for(ui32Idx = APP_START_ADDRESS; ui32Idx < ui32FlashEnd; ui32Idx += 1024) + { + ROM_FlashErase(ui32Idx); + } + + // + // Enter a loop to read sectors from the application image file and + // program into flash. Start at the user app start address (above the USB + // stick updater). + // + ui32ProgAddr = APP_START_ADDRESS; + ui32Remaining = ui32FileSize; + while(SimpleFsReadFileSector()) + { + // + // Compute how much data was read from this sector and adjust the + // remaining amount. + // + ui32DataSize = ui32Remaining >= 512 ? 512 : ui32Remaining; + ui32Remaining -= ui32DataSize; + + // + // Special handling for the first block of the application. + // This block contains as the first two location the application's + // initial stack pointer and instruction pointer. The USB updater + // relied on the values in these locations to determine if a valid + // application is present. When there is a valid application the + // updater runs the user application. Otherwise the updater attempts + // to load a new application. + // In order to prevent a partially programmed imaged (due to some + // error occurring while programming), the first two locations are + // not programmed until all of the rest of the image has been + // successfully loaded into the flash. This way if there is some error, + // the updater will detect that a user application is not present and + // will not attempt to run it. + // + // For the first block, do not program the first two word locations + // (8 bytes). These two words will be programmed later, after + // everything else. + // + if(ui32ProgAddr == APP_START_ADDRESS) + { + uint32_t *pui32Temp; + + pui32Temp = (uint32_t *)g_ui8SectorBuf; + ui32SavedRegs[0] = pui32Temp[0]; + ui32SavedRegs[1] = pui32Temp[1]; + + // + // Call the function to program a block of flash. Skip the first + // two words (8 bytes) since these contain the initial SP and PC. + // + ROM_FlashProgram((uint32_t *)&g_ui8SectorBuf[8], + ui32ProgAddr + 8, + ((ui32DataSize - 8) + 3) & ~3); + } + + // + // All other blocks except the first block + // + else + { + // + // Call the function to program a block of flash. The length of the + // block passed to the flash function must be divisible by 4. + // + ROM_FlashProgram((uint32_t *)g_ui8SectorBuf, ui32ProgAddr, + (ui32DataSize + 3) & ~3); + } + + // + // If there is more image to program, then update the programming + // address. Progress will continue to the next iteration of + // the while loop. + // + if(ui32Remaining) + { + ui32ProgAddr += ui32DataSize; + } + + // + // Otherwise we are done programming so perform final steps. + // Program the first two words of the image that were saved earlier, + // and return a success indication. + // + else + { + ROM_FlashProgram((uint32_t *)ui32SavedRegs, APP_START_ADDRESS, + 8); + + return(0); + } + } + + // + // If we make it here, that means that an attempt to read a sector of + // data from the device was not successful. That means that the complete + // user app has not been programmed into flash, so just return an error + // indication. + // + return(1); +} + +//***************************************************************************** +// +// This is the main routine for performing an update from a mass storage +// device. +// +// This function forms the main loop of the USB stick updater. It polls for +// a USB mass storage device to be connected, Once a device is connected +// it will attempt to read a firmware image from the device and load it into +// flash. +// +// \return None. +// +//***************************************************************************** +void +UpdaterUSB(void) +{ + // + // Loop forever, running the USB host driver. + // + while(1) + { + USBHCDMain(); + + // + // Check for a state change from the USB driver. + // + switch(g_eState) + { + // + // This state means that a mass storage device has been + // plugged in and enumerated. + // + case STATE_DEVICE_ENUM: + { + // + // Attempt to read the application image from the storage + // device and load it into flash memory. + // + if(ReadAppAndProgram()) + { + // + // There was some error reading or programming the app, + // so reset the state to no device which will cause a + // wait for a new device to be plugged in. + // + g_eState = STATE_NO_DEVICE; + } + else + { + // + // User app load and programming was successful, so reboot + // the micro. Perform a software reset request. This + // will cause the microcontroller to reset; no further + // code will be executed. + // + HWREG(NVIC_APINT) = NVIC_APINT_VECTKEY | + NVIC_APINT_SYSRESETREQ; + + // + // The microcontroller should have reset, so this should + // never be reached. Just in case, loop forever. + // + while(1) + { + } + } + break; + } + + // + // This state means that there is no device present, so just + // do nothing until something is plugged in. + // + case STATE_NO_DEVICE: + { + break; + } + } + } +} + +//***************************************************************************** +// +// Configure the USB controller and power the bus. +// +// This function configures the USB controller for host operation. +// It is assumed that the main system clock has been configured at this point. +// +// \return None. +// +//***************************************************************************** +void +ConfigureUSBInterface(void) +{ + // + // Enable the uDMA controller and set up the control table base. + // This is required by usblib. + // + SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); + SysCtlDelay(80); + uDMAEnable(); + uDMAControlBaseSet(g_sDMAControlTable); + + // + // Enable the USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_USB0); + + // + // Set the USB pins to be controlled by the USB controller. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); + ROM_GPIOPinConfigure(GPIO_PD6_USB0EPEN); + ROM_GPIOPinTypeUSBDigital(GPIO_PORTD_BASE, GPIO_PIN_6); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); + ROM_GPIOPinTypeUSBAnalog(GPIO_PORTL_BASE, GPIO_PIN_6 | GPIO_PIN_7); + ROM_GPIOPinTypeUSBAnalog(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1); + + // + // Register the host class driver + // + USBHCDRegisterDrivers(0, g_ppHostClassDrivers, NUM_CLASS_DRIVERS); + + // + // Open an instance of the mass storage class driver. + // + g_psMSCInstance = USBHMSCDriveOpen(0, MSCCallback); + + // + // Initialize the power configuration. This sets the power enable signal + // to be active high and does not enable the power fault. + // + USBHCDPowerConfigInit(0, USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER); + + // + // Force the USB mode to host with no callback on mode changes since + // there should not be any. + // + USBStackModeSet(0, eUSBModeForceHost, 0); + + // + // Wait 10ms for the pin to go low. + // + SysCtlDelay(g_ui32SysClock/100); + + // + // Initialize the host controller. + // + USBHCDInit(0, g_pHCDPool, HCD_MEMORY_SIZE); +} + +//***************************************************************************** +// +// Generic configuration is handled in this function. +// +// This function is called by the start up code to perform any configuration +// necessary before calling the update routine. It is responsible for setting +// the system clock to the expected rate and setting flash programming +// parameters prior to calling ConfigureUSBInterface() to set up the USB +// hardware. +// +// \return None. +// +//***************************************************************************** +void +UpdaterMain(void) +{ + // + // Make sure NVIC points at the correct vector table. + // + HWREG(NVIC_VTABLE) = 0; + + // + // Run from the PLL at 120 MHz. + // + g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Enable lazy stacking for interrupt handlers. This allows floating-point + // instructions to be used within interrupt handlers, but at the expense of + // extra stack usage. + // + ROM_FPULazyStackingEnable(); + + // + // Configure the USB interface and power the bus. + // + ConfigureUSBInterface(); + + // + // Call the updater function. This will attempt to load a new image + // into flash from a USB memory stick. + // + UpdaterUSB(); +} + +//***************************************************************************** +// +// Main entry point for the USB stick update example. +// +// This function will check to see if a flash update should be performed from +// the USB memory stick, or if the user application should just be run without +// any update. +// +// The following checks are made, any of which mean that an update should be +// performed: +// - the PC and SP for the user app do not appear to be valid +// - a memory location contains a certain value, meaning the user app wants +// to force an update +// - the user button on the eval board is being pressed, meaning the user wants +// to force an update even if there is a valid user app in memory +// +// If any of the above checks are true, then that means that an update should +// be attempted. The USB stick updater will then wait for a USB stick to be +// plugged in, and once it is look for a firmware update file. +// +// If none of the above checks are true, then the user application that is +// already in flash is run and no update is performed. +// +// \return None. +// +//***************************************************************************** +int +main(void) +{ + uint32_t *pui32App; + + // + // See if the first location is 0xfffffffff or something that does not + // look like a stack pointer, or if the second location is 0xffffffff or + // something that does not look like a reset vector. + // + pui32App = (uint32_t *)APP_START_ADDRESS; + if((pui32App[0] == 0xffffffff) || + ((pui32App[0] & 0xfff00000) != 0x20000000) || + (pui32App[1] == 0xffffffff) || + ((pui32App[1] & 0xfff00001) != 0x00000001)) + { + // + // App starting stack pointer or PC is not valid, so force an update. + // + UpdaterMain(); + } + + // + // Check to see if the application has requested an update + // + if(HWREG(FORCE_UPDATE_ADDR) == FORCE_UPDATE_VALUE) + { + HWREG(FORCE_UPDATE_ADDR) = 0; + UpdaterMain(); + } + + // + // Enable the GPIO input for the SEL button. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); + ROM_GPIODirModeSet(GPIO_PORTP_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN); + MAP_GPIOPadConfigSet(GPIO_PORTP_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA, + GPIO_PIN_TYPE_STD_WPU); + + // + // Check if the button is pressed, if so then force an update. + // + if(ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_1) == 0) + { + UpdaterMain(); + } + + // + // If we get to here that means that none of the conditions that should + // cause an update are true. Therefore, call the application. + // + CallApplication(APP_START_ADDRESS); +} + +//***************************************************************************** +// +// This function is called from the application to request an update. The +// address of this function is stored in the SVC vector at offset 0x2C, so +// the user application can call it by using a statement like this: +// +// (*((void (*)(void))(*(uint32_t *)0x2c)))(); +// +//***************************************************************************** +void +AppForceUpdate(void) +{ + // + // Set a value in a memory location to indicate that the app requests + // an update. Then cause the processor to reset. + // + HWREG(FORCE_UPDATE_ADDR) = FORCE_UPDATE_VALUE; + HWREG(NVIC_APINT) = NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ; +} + +//***************************************************************************** +// +// This function is used to call the user application. It will set the NVIC +// to point at the user app's vector table, load up the user app's stack +// pointer, and then jump to the application. +// +// This function must be programmed in assembly since it needs to directly +// manipulate the value in the stack pointer, and because it needs to perform +// a direct branch to the user app and not a function call (bl). +// +//***************************************************************************** +#if defined(codered) || defined(gcc) || defined(sourcerygxx) +void __attribute__((naked)) +CallApplication(uint_fast32_t ui32StartAddr) +{ + // + // Set the vector table to the beginning of the app in flash. + // + HWREG(NVIC_VTABLE) = ui32StartAddr; + + // + // Load the stack pointer from the application's vector table. + // + __asm(" ldr r1, [r0]\n" + " mov sp, r1"); + + // + // Load the initial PC from the application's vector table and branch to + // the application's entry point. + // + __asm(" ldr r0, [r0, #4]\n" + " bx r0\n"); +} +#elif defined(ewarm) +void +CallApplication(uint_fast32_t ui32StartAddr) +{ + // + // Set the vector table to the beginning of the app in flash. + // + HWREG(NVIC_VTABLE) = ui32StartAddr; + + // + // Load the stack pointer from the application's vector table. + // + __asm(" ldr r1, [r0]\n" + " mov sp, r1"); + + // + // Load the initial PC from the application's vector table and branch to + // the application's entry point. + // + __asm(" ldr r0, [r0, #4]\n" + " bx r0\n"); +} +#elif defined(rvmdk) || defined(__ARMCC_VERSION) +__asm void +CallApplication(uint_fast32_t ui32StartAddr) +{ + // + // Set the vector table address to the beginning of the application. + // + ldr r1, =0xe000ed08 + str r0, [r1] + + // + // Load the stack pointer from the application's vector table. + // + ldr r1, [r0] + mov sp, r1 + + // + // Load the initial PC from the application's vector table and branch to + // the application's entry point. + // + ldr r0, [r0, #4] + bx r0 +} +#elif defined(ccs) +void +CallApplication(uint_fast32_t ui32StartAddr) +{ + // + // Set the vector table to the beginning of the app in flash. + // + HWREG(NVIC_VTABLE) = ui32StartAddr; + + // + // Load the stack pointer from the application's vector table. + // + __asm(" ldr r1, [r0]\n" + " mov sp, r1\n"); + + // + // Load the initial PC from the application's vector table and branch to + // the application's entry point. + // + __asm(" ldr r0, [r0, #4]\n" + " bx r0\n"); +} +#else +#error Undefined compiler! +#endif + diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewd b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewp b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewp new file mode 100644 index 0000000..b835ac4 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ewp @@ -0,0 +1,792 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\usblib\ewarm\Exe\usblib.a + + + + Source + + $PROJ_DIR$\simple_fs.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\usb_stick_update.c + + + diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.icf b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.icf new file mode 100644 index 0000000..c269e21 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// usb_stick_update.icf - Linker configuration file for usb_stick_update. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ld b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ld new file mode 100644 index 0000000..1d0be8a --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * usb_stick_update.ld - Linker configuration file for usb_stick_update. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.sct b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.sct new file mode 100644 index 0000000..29b9fe6 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; usb_stick_update.sct - Linker configuration file for usb_stick_update. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvopt b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvopt new file mode 100644 index 0000000..6508277 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvopt @@ -0,0 +1,317 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + usb_stick_update + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\simple_fs.c + simple_fs.c + + + 1 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\usb_stick_update.c + usb_stick_update.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 5 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\usblib\rvmdk\usblib.lib + usblib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 6 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvproj b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvproj new file mode 100644 index 0000000..e4ef4a1 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update.uvproj @@ -0,0 +1,434 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + usb_stick_update + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + usb_stick_update + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\usb_stick_update.bin .\rvmdk\usb_stick_update.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + usb_stick_update.sct + + + --entry Reset_Handler + + + + + + + + Source + + + simple_fs.c + 1 + .\simple_fs.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + usb_stick_update.c + 1 + .\usb_stick_update.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + usblib.lib + 4 + ..\..\..\..\usblib\rvmdk\usblib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/usb_stick_update/usb_stick_update_ccs.cmd b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update_ccs.cmd new file mode 100644 index 0000000..3198798 --- /dev/null +++ b/boards/dk-tm4c129x/usb_stick_update/usb_stick_update_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * usb_stick_update_ccs.cmd - CCS linker configuration file for usb_stick_update. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 1024; diff --git a/boards/dk-tm4c129x/watchdog/Makefile b/boards/dk-tm4c129x/watchdog/Makefile new file mode 100644 index 0000000..c4959a8 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/Makefile @@ -0,0 +1,92 @@ +#****************************************************************************** +# +# Makefile - Rules for building the watchdog example. +# +# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +# Software License Agreement +# +# Texas Instruments (TI) is supplying this software for use solely and +# exclusively on TI's microcontroller products. The software is owned by +# TI and/or its suppliers, and is protected under applicable copyright +# laws. You may not combine this software with "viral" open-source +# software in order to form a larger program. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +# DAMAGES, FOR ANY REASON WHATSOEVER. +# +# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +# +#****************************************************************************** + +# +# Defines the part type that this project uses. +# +PART=TM4C129XNCZAD + +# +# The base directory for TivaWare. +# +ROOT=../../../.. + +# +# Include the common make definitions. +# +include ${ROOT}/makedefs + +# +# Where to find source files that do not live in this directory. +# +VPATH=../drivers +VPATH+=../../../../utils + +# +# Where to find header files that do not live in the source directory. +# +IPATH=.. +IPATH+=../../../.. + +# +# The default rule, which causes the watchdog example to be built. +# +all: ${COMPILER} +all: ${COMPILER}/watchdog.axf + +# +# The rule to clean out all the build products. +# +clean: + @rm -rf ${COMPILER} ${wildcard *~} + +# +# The rule to create the target directory. +# +${COMPILER}: + @mkdir -p ${COMPILER} + +# +# Rules for building the watchdog example. +# +${COMPILER}/watchdog.axf: ${COMPILER}/frame.o +${COMPILER}/watchdog.axf: ${COMPILER}/kentec320x240x16_ssd2119.o +${COMPILER}/watchdog.axf: ${COMPILER}/pinout.o +${COMPILER}/watchdog.axf: ${COMPILER}/startup_${COMPILER}.o +${COMPILER}/watchdog.axf: ${COMPILER}/touch.o +${COMPILER}/watchdog.axf: ${COMPILER}/ustdlib.o +${COMPILER}/watchdog.axf: ${COMPILER}/watchdog.o +${COMPILER}/watchdog.axf: ${ROOT}/grlib/${COMPILER}/libgr.a +${COMPILER}/watchdog.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a +${COMPILER}/watchdog.axf: watchdog.ld +SCATTERgcc_watchdog=watchdog.ld +ENTRY_watchdog=ResetISR +CFLAGSgcc=-DTARGET_IS_TM4C129_RA0 + +# +# Include the automatically generated dependency files. +# +ifneq (${MAKECMDGOALS},clean) +-include ${wildcard ${COMPILER}/*.d} __dummy__ +endif diff --git a/boards/dk-tm4c129x/watchdog/ccs/.ccsimportspec b/boards/dk-tm4c129x/watchdog/ccs/.ccsimportspec new file mode 100644 index 0000000..6379126 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/.ccsimportspec @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/boards/dk-tm4c129x/watchdog/ccs/.ccsproject b/boards/dk-tm4c129x/watchdog/ccs/.ccsproject new file mode 100644 index 0000000..59a3400 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/.ccsproject @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/boards/dk-tm4c129x/watchdog/ccs/.cproject b/boards/dk-tm4c129x/watchdog/ccs/.cproject new file mode 100644 index 0000000..200a16f --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/.cproject @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/watchdog/ccs/.project b/boards/dk-tm4c129x/watchdog/ccs/.project new file mode 100644 index 0000000..2ae56c7 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/.project @@ -0,0 +1,75 @@ + + + watchdog + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + startup_ccs.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/watchdog/startup_ccs.c + + + watchdog.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/watchdog/watchdog.c + + + watchdog_ccs.cmd + 1 + SW_ROOT/examples/boards/dk-tm4c129x/watchdog/watchdog_ccs.cmd + + + drivers/frame.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/frame.c + + + drivers/kentec320x240x16_ssd2119.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c + + + drivers/pinout.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c + + + drivers/touch.c + 1 + SW_ROOT/examples/boards/dk-tm4c129x/drivers/touch.c + + + utils/ustdlib.c + 1 + SW_ROOT/utils/ustdlib.c + + + + + SW_ROOT + $%7BPARENT-5-PROJECT_LOC%7D + + + diff --git a/boards/dk-tm4c129x/watchdog/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/watchdog/ccs/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..98b6350 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.bin b/boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.bin new file mode 100644 index 0000000..f8ec1b7 Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.bin differ diff --git a/boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.out b/boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.out new file mode 100644 index 0000000..ffc87e3 Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/ccs/Debug/watchdog.out differ diff --git a/boards/dk-tm4c129x/watchdog/ccs/macros.ini_initial b/boards/dk-tm4c129x/watchdog/ccs/macros.ini_initial new file mode 100644 index 0000000..31214b5 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/macros.ini_initial @@ -0,0 +1 @@ +SW_ROOT = ../../../../.. diff --git a/boards/dk-tm4c129x/watchdog/ccs/target_config.ccxml b/boards/dk-tm4c129x/watchdog/ccs/target_config.ccxml new file mode 100644 index 0000000..6e5ef45 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/ccs/target_config.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.bin b/boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.bin new file mode 100644 index 0000000..dd7d4ca Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.bin differ diff --git a/boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.out b/boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.out new file mode 100644 index 0000000..31afaae Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/ewarm/Exe/watchdog.out differ diff --git a/boards/dk-tm4c129x/watchdog/gcc/watchdog.axf b/boards/dk-tm4c129x/watchdog/gcc/watchdog.axf new file mode 100644 index 0000000..a36eb46 Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/gcc/watchdog.axf differ diff --git a/boards/dk-tm4c129x/watchdog/gcc/watchdog.bin b/boards/dk-tm4c129x/watchdog/gcc/watchdog.bin new file mode 100644 index 0000000..c2b91fb Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/gcc/watchdog.bin differ diff --git a/boards/dk-tm4c129x/watchdog/readme.txt b/boards/dk-tm4c129x/watchdog/readme.txt new file mode 100644 index 0000000..d5e98c8 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/readme.txt @@ -0,0 +1,33 @@ +Watchdog + +This example application demonstrates the use of the watchdog as a simple +heartbeat for the system. If a watchdog is not periodically fed, it will +reset the system. The GREEN LED will blink once every second to show +every time watchdog 0 is being fed, the Amber LED will blink once every +second to indicate watchdog 1 is being fed. To stop the watchdog being fed +and, hence, cause a system reset, tap the left screen to starve the +watchdog 0, and right screen to starve the watchdog 1. + +The counters on the screen show the number of interrupts that each watchdog +served; the count wraps at 255. Since the two watchdogs run in different +clock domains, the counters will get out of sync over time. + +------------------------------------------------------------------------------- + +Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +Software License Agreement + +Texas Instruments (TI) is supplying this software for use solely and +exclusively on TI's microcontroller products. The software is owned by +TI and/or its suppliers, and is protected under applicable copyright +laws. You may not combine this software with "viral" open-source +software in order to form a larger program. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, FOR ANY REASON WHATSOEVER. + +This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. diff --git a/boards/dk-tm4c129x/watchdog/rvmdk/watchdog.axf b/boards/dk-tm4c129x/watchdog/rvmdk/watchdog.axf new file mode 100644 index 0000000..f83a617 Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/rvmdk/watchdog.axf differ diff --git a/boards/dk-tm4c129x/watchdog/rvmdk/watchdog.bin b/boards/dk-tm4c129x/watchdog/rvmdk/watchdog.bin new file mode 100644 index 0000000..954a188 Binary files /dev/null and b/boards/dk-tm4c129x/watchdog/rvmdk/watchdog.bin differ diff --git a/boards/dk-tm4c129x/watchdog/startup_ccs.c b/boards/dk-tm4c129x/watchdog/startup_ccs.c new file mode 100644 index 0000000..c9a4c47 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/startup_ccs.c @@ -0,0 +1,276 @@ +//***************************************************************************** +// +// startup_ccs.c - Startup code for use with TI's Code Composer Studio. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declaration for the reset handler that is to be called when the +// processor is started +// +//***************************************************************************** +extern void _c_int00(void); + +//***************************************************************************** +// +// Linker variable that marks the top of the stack. +// +//***************************************************************************** +extern uint32_t __STACK_TOP; + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void WatchdogIntHandler(void); + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000 or at the start of +// the program if located at a start address other than 0. +// +//***************************************************************************** +#pragma DATA_SECTION(g_pfnVectors, ".intvecs") +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)&__STACK_TOP), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + WatchdogIntHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Jump to the CCS C initialization routine. This will enable the + // floating-point unit as well, so that does not need to be done here. + // + __asm(" .global _c_int00\n" + " b.w _c_int00"); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/watchdog/startup_ewarm.c b/boards/dk-tm4c129x/watchdog/startup_ewarm.c new file mode 100644 index 0000000..fc6102e --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/startup_ewarm.c @@ -0,0 +1,307 @@ +//***************************************************************************** +// +// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench, +// version 5. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Enable the IAR extensions for this source file. +// +//***************************************************************************** +#pragma language=extended + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void WatchdogIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application startup code. +// +//***************************************************************************** +extern void __iar_program_start(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128] @ ".noinit"; + +//***************************************************************************** +// +// A union that describes the entries of the vector table. The union is needed +// since the first entry is the stack pointer and the remainder are function +// pointers. +// +//***************************************************************************** +typedef union +{ + void (*pfnHandler)(void); + uint32_t ui32Ptr; +} +uVectorEntry; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__root const uVectorEntry __vector_table[] @ ".intvec" = +{ + { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) }, + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + WatchdogIntHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + __iar_program_start(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/watchdog/startup_gcc.c b/boards/dk-tm4c129x/watchdog/startup_gcc.c new file mode 100644 index 0000000..50defe3 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/startup_gcc.c @@ -0,0 +1,323 @@ +//***************************************************************************** +// +// startup_gcc.c - Startup code for use with GNU tools. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include "inc/hw_nvic.h" +#include "inc/hw_types.h" + +//***************************************************************************** +// +// Forward declaration of the default fault handlers. +// +//***************************************************************************** +void ResetISR(void); +static void NmiSR(void); +static void FaultISR(void); +static void IntDefaultHandler(void); + +//***************************************************************************** +// +// External declarations for the interrupt handlers used by the application. +// +//***************************************************************************** +extern void TouchScreenIntHandler(void); +extern void WatchdogIntHandler(void); + +//***************************************************************************** +// +// The entry point for the application. +// +//***************************************************************************** +extern int main(void); + +//***************************************************************************** +// +// Reserve space for the system stack. +// +//***************************************************************************** +static uint32_t pui32Stack[128]; + +//***************************************************************************** +// +// The vector table. Note that the proper constructs must be placed on this to +// ensure that it ends up at physical address 0x0000.0000. +// +//***************************************************************************** +__attribute__ ((section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = +{ + (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)), + // The initial stack pointer + ResetISR, // The reset handler + NmiSR, // The NMI handler + FaultISR, // The hard fault handler + IntDefaultHandler, // The MPU fault handler + IntDefaultHandler, // The bus fault handler + IntDefaultHandler, // The usage fault handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // SVCall handler + IntDefaultHandler, // Debug monitor handler + 0, // Reserved + IntDefaultHandler, // The PendSV handler + IntDefaultHandler, // The SysTick handler + IntDefaultHandler, // GPIO Port A + IntDefaultHandler, // GPIO Port B + IntDefaultHandler, // GPIO Port C + IntDefaultHandler, // GPIO Port D + IntDefaultHandler, // GPIO Port E + IntDefaultHandler, // UART0 Rx and Tx + IntDefaultHandler, // UART1 Rx and Tx + IntDefaultHandler, // SSI0 Rx and Tx + IntDefaultHandler, // I2C0 Master and Slave + IntDefaultHandler, // PWM Fault + IntDefaultHandler, // PWM Generator 0 + IntDefaultHandler, // PWM Generator 1 + IntDefaultHandler, // PWM Generator 2 + IntDefaultHandler, // Quadrature Encoder 0 + IntDefaultHandler, // ADC Sequence 0 + IntDefaultHandler, // ADC Sequence 1 + IntDefaultHandler, // ADC Sequence 2 + TouchScreenIntHandler, // ADC Sequence 3 + WatchdogIntHandler, // Watchdog timer + IntDefaultHandler, // Timer 0 subtimer A + IntDefaultHandler, // Timer 0 subtimer B + IntDefaultHandler, // Timer 1 subtimer A + IntDefaultHandler, // Timer 1 subtimer B + IntDefaultHandler, // Timer 2 subtimer A + IntDefaultHandler, // Timer 2 subtimer B + IntDefaultHandler, // Analog Comparator 0 + IntDefaultHandler, // Analog Comparator 1 + IntDefaultHandler, // Analog Comparator 2 + IntDefaultHandler, // System Control (PLL, OSC, BO) + IntDefaultHandler, // FLASH Control + IntDefaultHandler, // GPIO Port F + IntDefaultHandler, // GPIO Port G + IntDefaultHandler, // GPIO Port H + IntDefaultHandler, // UART2 Rx and Tx + IntDefaultHandler, // SSI1 Rx and Tx + IntDefaultHandler, // Timer 3 subtimer A + IntDefaultHandler, // Timer 3 subtimer B + IntDefaultHandler, // I2C1 Master and Slave + IntDefaultHandler, // CAN0 + IntDefaultHandler, // CAN1 + IntDefaultHandler, // Ethernet + IntDefaultHandler, // Hibernate + IntDefaultHandler, // USB0 + IntDefaultHandler, // PWM Generator 3 + IntDefaultHandler, // uDMA Software Transfer + IntDefaultHandler, // uDMA Error + IntDefaultHandler, // ADC1 Sequence 0 + IntDefaultHandler, // ADC1 Sequence 1 + IntDefaultHandler, // ADC1 Sequence 2 + IntDefaultHandler, // ADC1 Sequence 3 + IntDefaultHandler, // External Bus Interface 0 + IntDefaultHandler, // GPIO Port J + IntDefaultHandler, // GPIO Port K + IntDefaultHandler, // GPIO Port L + IntDefaultHandler, // SSI2 Rx and Tx + IntDefaultHandler, // SSI3 Rx and Tx + IntDefaultHandler, // UART3 Rx and Tx + IntDefaultHandler, // UART4 Rx and Tx + IntDefaultHandler, // UART5 Rx and Tx + IntDefaultHandler, // UART6 Rx and Tx + IntDefaultHandler, // UART7 Rx and Tx + IntDefaultHandler, // I2C2 Master and Slave + IntDefaultHandler, // I2C3 Master and Slave + IntDefaultHandler, // Timer 4 subtimer A + IntDefaultHandler, // Timer 4 subtimer B + IntDefaultHandler, // Timer 5 subtimer A + IntDefaultHandler, // Timer 5 subtimer B + IntDefaultHandler, // FPU + 0, // Reserved + 0, // Reserved + IntDefaultHandler, // I2C4 Master and Slave + IntDefaultHandler, // I2C5 Master and Slave + IntDefaultHandler, // GPIO Port M + IntDefaultHandler, // GPIO Port N + 0, // Reserved + IntDefaultHandler, // Tamper + IntDefaultHandler, // GPIO Port P (Summary or P0) + IntDefaultHandler, // GPIO Port P1 + IntDefaultHandler, // GPIO Port P2 + IntDefaultHandler, // GPIO Port P3 + IntDefaultHandler, // GPIO Port P4 + IntDefaultHandler, // GPIO Port P5 + IntDefaultHandler, // GPIO Port P6 + IntDefaultHandler, // GPIO Port P7 + IntDefaultHandler, // GPIO Port Q (Summary or Q0) + IntDefaultHandler, // GPIO Port Q1 + IntDefaultHandler, // GPIO Port Q2 + IntDefaultHandler, // GPIO Port Q3 + IntDefaultHandler, // GPIO Port Q4 + IntDefaultHandler, // GPIO Port Q5 + IntDefaultHandler, // GPIO Port Q6 + IntDefaultHandler, // GPIO Port Q7 + IntDefaultHandler, // GPIO Port R + IntDefaultHandler, // GPIO Port S + IntDefaultHandler, // SHA/MD5 0 + IntDefaultHandler, // AES 0 + IntDefaultHandler, // DES3DES 0 + IntDefaultHandler, // LCD Controller 0 + IntDefaultHandler, // Timer 6 subtimer A + IntDefaultHandler, // Timer 6 subtimer B + IntDefaultHandler, // Timer 7 subtimer A + IntDefaultHandler, // Timer 7 subtimer B + IntDefaultHandler, // I2C6 Master and Slave + IntDefaultHandler, // I2C7 Master and Slave + IntDefaultHandler, // HIM Scan Matrix Keyboard 0 + IntDefaultHandler, // One Wire 0 + IntDefaultHandler, // HIM PS/2 0 + IntDefaultHandler, // HIM LED Sequencer 0 + IntDefaultHandler, // HIM Consumer IR 0 + IntDefaultHandler, // I2C8 Master and Slave + IntDefaultHandler, // I2C9 Master and Slave + IntDefaultHandler // GPIO Port T +}; + +//***************************************************************************** +// +// The following are constructs created by the linker, indicating where the +// the "data" and "bss" segments reside in memory. The initializers for the +// for the "data" segment resides immediately following the "text" segment. +// +//***************************************************************************** +extern uint32_t _etext; +extern uint32_t _data; +extern uint32_t _edata; +extern uint32_t _bss; +extern uint32_t _ebss; + +//***************************************************************************** +// +// This is the code that gets called when the processor first starts execution +// following a reset event. Only the absolutely necessary set is performed, +// after which the application supplied entry() routine is called. Any fancy +// actions (such as making decisions based on the reset cause register, and +// resetting the bits in that register) are left solely in the hands of the +// application. +// +//***************************************************************************** +void +ResetISR(void) +{ + uint32_t *pui32Src, *pui32Dest; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &_etext; + for(pui32Dest = &_data; pui32Dest < &_edata; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Zero fill the bss segment. + // + __asm(" ldr r0, =_bss\n" + " ldr r1, =_ebss\n" + " mov r2, #0\n" + " .thumb_func\n" + "zero_loop:\n" + " cmp r0, r1\n" + " it lt\n" + " strlt r2, [r0], #4\n" + " blt zero_loop"); + + // + // Enable the floating-point unit. This must be done here to handle the + // case where main() uses floating-point and the function prologue saves + // floating-point registers (which will fault if floating-point is not + // enabled). Any configuration of the floating-point unit using DriverLib + // APIs must be done here prior to the floating-point unit being enabled. + // + // Note that this does not use DriverLib since it might not be included in + // this project. + // + HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) & + ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) | + NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL); + + // + // Call the application's entry point. + // + main(); +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a NMI. This +// simply enters an infinite loop, preserving the system state for examination +// by a debugger. +// +//***************************************************************************** +static void +NmiSR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives a fault +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +FaultISR(void) +{ + // + // Enter an infinite loop. + // + while(1) + { + } +} + +//***************************************************************************** +// +// This is the code that gets called when the processor receives an unexpected +// interrupt. This simply enters an infinite loop, preserving the system state +// for examination by a debugger. +// +//***************************************************************************** +static void +IntDefaultHandler(void) +{ + // + // Go into an infinite loop. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/watchdog/startup_rvmdk.S b/boards/dk-tm4c129x/watchdog/startup_rvmdk.S new file mode 100644 index 0000000..51816fb --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/startup_rvmdk.S @@ -0,0 +1,332 @@ +; <<< Use Configuration Wizard in Context Menu >>> +;****************************************************************************** +; +; startup_rvmdk.S - Startup code for use with Keil's uVision. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +;****************************************************************************** +; +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Stack EQU 0x00000200 + +;****************************************************************************** +; +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; +;****************************************************************************** +Heap EQU 0x00000000 + +;****************************************************************************** +; +; Allocate space for the stack. +; +;****************************************************************************** + AREA STACK, NOINIT, READWRITE, ALIGN=3 +StackMem + SPACE Stack +__initial_sp + +;****************************************************************************** +; +; Allocate space for the heap. +; +;****************************************************************************** + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +HeapMem + SPACE Heap +__heap_limit + +;****************************************************************************** +; +; Indicate that the code in this file preserves 8-byte alignment of the stack. +; +;****************************************************************************** + PRESERVE8 + +;****************************************************************************** +; +; Place code into the reset code section. +; +;****************************************************************************** + AREA RESET, CODE, READONLY + THUMB + +;****************************************************************************** +; +; External declarations for the interrupt handlers used by the application. +; +;****************************************************************************** + EXTERN TouchScreenIntHandler + EXTERN WatchdogIntHandler + +;****************************************************************************** +; +; The vector table. +; +;****************************************************************************** + EXPORT __Vectors +__Vectors + DCD StackMem + Stack ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NmiSR ; NMI Handler + DCD FaultISR ; Hard Fault Handler + DCD IntDefaultHandler ; The MPU fault handler + DCD IntDefaultHandler ; The bus fault handler + DCD IntDefaultHandler ; The usage fault handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; SVCall handler + DCD IntDefaultHandler ; Debug monitor handler + DCD 0 ; Reserved + DCD IntDefaultHandler ; The PendSV handler + DCD IntDefaultHandler ; The SysTick handler + DCD IntDefaultHandler ; GPIO Port A + DCD IntDefaultHandler ; GPIO Port B + DCD IntDefaultHandler ; GPIO Port C + DCD IntDefaultHandler ; GPIO Port D + DCD IntDefaultHandler ; GPIO Port E + DCD IntDefaultHandler ; UART0 Rx and Tx + DCD IntDefaultHandler ; UART1 Rx and Tx + DCD IntDefaultHandler ; SSI0 Rx and Tx + DCD IntDefaultHandler ; I2C0 Master and Slave + DCD IntDefaultHandler ; PWM Fault + DCD IntDefaultHandler ; PWM Generator 0 + DCD IntDefaultHandler ; PWM Generator 1 + DCD IntDefaultHandler ; PWM Generator 2 + DCD IntDefaultHandler ; Quadrature Encoder 0 + DCD IntDefaultHandler ; ADC Sequence 0 + DCD IntDefaultHandler ; ADC Sequence 1 + DCD IntDefaultHandler ; ADC Sequence 2 + DCD TouchScreenIntHandler ; ADC Sequence 3 + DCD WatchdogIntHandler ; Watchdog timer + DCD IntDefaultHandler ; Timer 0 subtimer A + DCD IntDefaultHandler ; Timer 0 subtimer B + DCD IntDefaultHandler ; Timer 1 subtimer A + DCD IntDefaultHandler ; Timer 1 subtimer B + DCD IntDefaultHandler ; Timer 2 subtimer A + DCD IntDefaultHandler ; Timer 2 subtimer B + DCD IntDefaultHandler ; Analog Comparator 0 + DCD IntDefaultHandler ; Analog Comparator 1 + DCD IntDefaultHandler ; Analog Comparator 2 + DCD IntDefaultHandler ; System Control (PLL, OSC, BO) + DCD IntDefaultHandler ; FLASH Control + DCD IntDefaultHandler ; GPIO Port F + DCD IntDefaultHandler ; GPIO Port G + DCD IntDefaultHandler ; GPIO Port H + DCD IntDefaultHandler ; UART2 Rx and Tx + DCD IntDefaultHandler ; SSI1 Rx and Tx + DCD IntDefaultHandler ; Timer 3 subtimer A + DCD IntDefaultHandler ; Timer 3 subtimer B + DCD IntDefaultHandler ; I2C1 Master and Slave + DCD IntDefaultHandler ; CAN0 + DCD IntDefaultHandler ; CAN1 + DCD IntDefaultHandler ; Ethernet + DCD IntDefaultHandler ; Hibernate + DCD IntDefaultHandler ; USB0 + DCD IntDefaultHandler ; PWM Generator 3 + DCD IntDefaultHandler ; uDMA Software Transfer + DCD IntDefaultHandler ; uDMA Error + DCD IntDefaultHandler ; ADC1 Sequence 0 + DCD IntDefaultHandler ; ADC1 Sequence 1 + DCD IntDefaultHandler ; ADC1 Sequence 2 + DCD IntDefaultHandler ; ADC1 Sequence 3 + DCD IntDefaultHandler ; External Bus Interface 0 + DCD IntDefaultHandler ; GPIO Port J + DCD IntDefaultHandler ; GPIO Port K + DCD IntDefaultHandler ; GPIO Port L + DCD IntDefaultHandler ; SSI2 Rx and Tx + DCD IntDefaultHandler ; SSI3 Rx and Tx + DCD IntDefaultHandler ; UART3 Rx and Tx + DCD IntDefaultHandler ; UART4 Rx and Tx + DCD IntDefaultHandler ; UART5 Rx and Tx + DCD IntDefaultHandler ; UART6 Rx and Tx + DCD IntDefaultHandler ; UART7 Rx and Tx + DCD IntDefaultHandler ; I2C2 Master and Slave + DCD IntDefaultHandler ; I2C3 Master and Slave + DCD IntDefaultHandler ; Timer 4 subtimer A + DCD IntDefaultHandler ; Timer 4 subtimer B + DCD IntDefaultHandler ; Timer 5 subtimer A + DCD IntDefaultHandler ; Timer 5 subtimer B + DCD IntDefaultHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD IntDefaultHandler ; I2C4 Master and Slave + DCD IntDefaultHandler ; I2C5 Master and Slave + DCD IntDefaultHandler ; GPIO Port M + DCD IntDefaultHandler ; GPIO Port N + DCD 0 ; Reserved + DCD IntDefaultHandler ; Tamper + DCD IntDefaultHandler ; GPIO Port P (Summary or P0) + DCD IntDefaultHandler ; GPIO Port P1 + DCD IntDefaultHandler ; GPIO Port P2 + DCD IntDefaultHandler ; GPIO Port P3 + DCD IntDefaultHandler ; GPIO Port P4 + DCD IntDefaultHandler ; GPIO Port P5 + DCD IntDefaultHandler ; GPIO Port P6 + DCD IntDefaultHandler ; GPIO Port P7 + DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0) + DCD IntDefaultHandler ; GPIO Port Q1 + DCD IntDefaultHandler ; GPIO Port Q2 + DCD IntDefaultHandler ; GPIO Port Q3 + DCD IntDefaultHandler ; GPIO Port Q4 + DCD IntDefaultHandler ; GPIO Port Q5 + DCD IntDefaultHandler ; GPIO Port Q6 + DCD IntDefaultHandler ; GPIO Port Q7 + DCD IntDefaultHandler ; GPIO Port R + DCD IntDefaultHandler ; GPIO Port S + DCD IntDefaultHandler ; SHA/MD5 0 + DCD IntDefaultHandler ; AES 0 + DCD IntDefaultHandler ; DES3DES 0 + DCD IntDefaultHandler ; LCD Controller 0 + DCD IntDefaultHandler ; Timer 6 subtimer A + DCD IntDefaultHandler ; Timer 6 subtimer B + DCD IntDefaultHandler ; Timer 7 subtimer A + DCD IntDefaultHandler ; Timer 7 subtimer B + DCD IntDefaultHandler ; I2C6 Master and Slave + DCD IntDefaultHandler ; I2C7 Master and Slave + DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0 + DCD IntDefaultHandler ; One Wire 0 + DCD IntDefaultHandler ; HIM PS/2 0 + DCD IntDefaultHandler ; HIM LED Sequencer 0 + DCD IntDefaultHandler ; HIM Consumer IR 0 + DCD IntDefaultHandler ; I2C8 Master and Slave + DCD IntDefaultHandler ; I2C9 Master and Slave + DCD IntDefaultHandler ; GPIO Port T + +;****************************************************************************** +; +; This is the code that gets called when the processor first starts execution +; following a reset event. +; +;****************************************************************************** + EXPORT Reset_Handler +Reset_Handler + ; + ; Enable the floating-point unit. This must be done here to handle the + ; case where main() uses floating-point and the function prologue saves + ; floating-point registers (which will fault if floating-point is not + ; enabled). Any configuration of the floating-point unit using + ; DriverLib APIs must be done here prior to the floating-point unit + ; being enabled. + ; + ; Note that this does not use DriverLib since it might not be included + ; in this project. + ; + MOVW R0, #0xED88 + MOVT R0, #0xE000 + LDR R1, [R0] + ORR R1, #0x00F00000 + STR R1, [R0] + + ; + ; Call the C library enty point that handles startup. This will copy + ; the .data section initializers from flash to SRAM and zero fill the + ; .bss section. + ; + IMPORT __main + B __main + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a NMI. This +; simply enters an infinite loop, preserving the system state for examination +; by a debugger. +; +;****************************************************************************** +NmiSR + B NmiSR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives a fault +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +FaultISR + B FaultISR + +;****************************************************************************** +; +; This is the code that gets called when the processor receives an unexpected +; interrupt. This simply enters an infinite loop, preserving the system state +; for examination by a debugger. +; +;****************************************************************************** +IntDefaultHandler + B IntDefaultHandler + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Some code in the normal code section for initializing the heap and stack. +; +;****************************************************************************** + AREA |.text|, CODE, READONLY + +;****************************************************************************** +; +; The function expected of the C library startup code for defining the stack +; and heap memory locations. For the C library version of the startup code, +; provide this function so that the C library initialization code can find out +; the location of the stack and heap. +; +;****************************************************************************** + IF :DEF: __MICROLIB + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + ELSE + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + LDR R0, =HeapMem + LDR R1, =(StackMem + Stack) + LDR R2, =(HeapMem + Heap) + LDR R3, =StackMem + BX LR + ENDIF + +;****************************************************************************** +; +; Make sure the end of this section is aligned. +; +;****************************************************************************** + ALIGN + +;****************************************************************************** +; +; Tell the assembler that we're done. +; +;****************************************************************************** + END diff --git a/boards/dk-tm4c129x/watchdog/watchdog.c b/boards/dk-tm4c129x/watchdog/watchdog.c new file mode 100644 index 0000000..6743375 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.c @@ -0,0 +1,356 @@ +//***************************************************************************** +// +// watchdog.c - Watchdog timer example. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +#include +#include +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "driverlib/debug.h" +#include "driverlib/gpio.h" +#include "driverlib/interrupt.h" +#include "driverlib/rom.h" +#include "driverlib/rom_map.h" +#include "driverlib/sysctl.h" +#include "driverlib/watchdog.h" +#include "grlib/grlib.h" +#include "grlib/widget.h" +#include "drivers/frame.h" +#include "drivers/kentec320x240x16_ssd2119.h" +#include "drivers/pinout.h" +#include "drivers/touch.h" +#include "utils/ustdlib.h" + +//***************************************************************************** +// +//! \addtogroup example_list +//!

      Watchdog (watchdog)

      +//! +//! This example application demonstrates the use of the watchdog as a simple +//! heartbeat for the system. If a watchdog is not periodically fed, it will +//! reset the system. The GREEN LED will blink once every second to show +//! every time watchdog 0 is being fed, the Amber LED will blink once every +//! second to indicate watchdog 1 is being fed. To stop the watchdog being fed +//! and, hence, cause a system reset, tap the left screen to starve the +//! watchdog 0, and right screen to starve the watchdog 1. +//! +//! The counters on the screen show the number of interrupts that each watchdog +//! served; the count wraps at 255. Since the two watchdogs run in different +//! clock domains, the counters will get out of sync over time. +// +//***************************************************************************** + +//***************************************************************************** +// +// Graphics context used to show text on the display. +// +//***************************************************************************** +tContext g_sContext; + +//***************************************************************************** +// +// Flag to tell the watchdog interrupt handler whether or not to clear the +// interrupt (feed the watchdog). +// +//***************************************************************************** +volatile bool g_bFeedWatchdog0 = true; +volatile bool g_bFeedWatchdog1 = true; + +//***************************************************************************** +// +// counter of the watchdog interrupt being served. +// +//***************************************************************************** +volatile uint8_t g_ui8CounterWatchdog0 = 0; +volatile uint8_t g_ui8CounterWatchdog1 = 0; + +//***************************************************************************** +// +// LED pin definations. We use GREEN LED and AMBER LED +// +//***************************************************************************** +#define LED_GREEN_GPIO_PORTBASE GPIO_PORTQ_BASE +#define LED_GREEN_GPIO_PIN GPIO_PIN_7 +#define LED_AMBER_GPIO_PORTBASE GPIO_PORTF_BASE +#define LED_AMBER_GPIO_PIN GPIO_PIN_1 + +//***************************************************************************** +// +// The error routine that is called if the driver library encounters an error. +// +//***************************************************************************** +#ifdef DEBUG +void +__error__(char *pcFilename, uint32_t ui32Line) +{ +} +#endif + +//***************************************************************************** +// +// The interrupt handler for the watchdog. This feeds the dog (so that the +// processor does not get reset) and winks the corresponding LED. +// +//***************************************************************************** +void +WatchdogIntHandler(void) +{ + char pcBuf[8]; + + // + // See if watchdog 0 generated an interrupt. + // + if(ROM_WatchdogIntStatus(WATCHDOG0_BASE, true)) + { + // + // If we have been told to stop feeding the watchdog, return immediately + // without clearing the interrupt. This will cause the system to reset + // next time the watchdog interrupt fires. + // + if(g_bFeedWatchdog0) + { + // + // Clear the watchdog interrupt. + // + ROM_WatchdogIntClear(WATCHDOG0_BASE); + + // + // Increment the counter and display it on the screen. + // + g_ui8CounterWatchdog0++; + GrContextFontSet(&g_sContext, g_psFontCmss20); + usprintf(pcBuf, " %03d ", g_ui8CounterWatchdog0); + GrStringDrawCentered(&g_sContext, pcBuf, -1, 80, 100, 1); + + // + // Invert the GREEN LED value. + // + ROM_GPIOPinWrite(LED_GREEN_GPIO_PORTBASE, LED_GREEN_GPIO_PIN, + (ROM_GPIOPinRead(LED_GREEN_GPIO_PORTBASE, + LED_GREEN_GPIO_PIN) ^ + LED_GREEN_GPIO_PIN)); + } + } + + // + // See if watchdog 1 generated an interrupt. + // + if(ROM_WatchdogIntStatus(WATCHDOG1_BASE, true)) + { + // + // If we have been told to stop feeding the watchdog, return immediately + // without clearing the interrupt. This will cause the system to reset + // next time the watchdog interrupt fires. + // + if(g_bFeedWatchdog1) + { + // + // Clear the watchdog interrupt. + // + ROM_WatchdogIntClear(WATCHDOG1_BASE); + + // + // Increment the counter and display it on the screen. + // + g_ui8CounterWatchdog1++; + GrContextFontSet(&g_sContext, g_psFontCmss20); + usprintf(pcBuf, " %03d ", g_ui8CounterWatchdog1); + GrStringDrawCentered(&g_sContext, pcBuf, -1, 240, 100, 1); + + // + // Invert the AMBER LED value. + // + ROM_GPIOPinWrite(LED_AMBER_GPIO_PORTBASE, LED_AMBER_GPIO_PIN, + (ROM_GPIOPinRead(LED_AMBER_GPIO_PORTBASE, + LED_AMBER_GPIO_PIN) ^ + LED_AMBER_GPIO_PIN)); + } + } +} + +//***************************************************************************** +// +// The touch screen driver calls this function to report all state changes. +// +//***************************************************************************** +static int32_t +WatchdogTouchCallback(uint32_t ui32Message, int32_t i32X, int32_t i32Y) +{ + // + // If the screen is tapped, we will receive a PTR_DOWN then a PTR_UP + // message. Use PTR_UP as the trigger to stop feeding the watchdog. + // + if(ui32Message == WIDGET_MSG_PTR_UP) + { + // + // See if the left or right side of the screen was touched. + // + if(i32X <= (GrContextDpyWidthGet(&g_sContext) / 2)) + { + // + // Let the user know that the tap has been registered and that the + // watchdog0 is being starved. + // + GrContextFontSet(&g_sContext, g_psFontCmss20); + GrContextForegroundSet(&g_sContext, ClrRed); + GrStringDrawCentered(&g_sContext, + "Watchdog 0 starved, reset shortly", -1, + GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) / 2) + 40, + 1); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Set the flag that tells the interrupt handler not to clear the + // watchdog0 interrupt. + // + g_bFeedWatchdog0 = false; + } + else + { + // + // Let the user know that the tap has been registered and that the + // watchdog1 is being starved. + // + GrContextFontSet(&g_sContext, g_psFontCmss20); + GrContextForegroundSet(&g_sContext, ClrRed); + GrStringDrawCentered(&g_sContext, + "Watchdog 1 starved, reset shortly", -1, + GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) / 2) + 60, + 1); + GrContextForegroundSet(&g_sContext, ClrWhite); + + // + // Set the flag that tells the interrupt handler not to clear the + // watchdog1 interrupt. + // + g_bFeedWatchdog1 = false; + } + } + + return(0); +} + +//***************************************************************************** +// +// This example demonstrates the use of both watchdog timers. +// +//***************************************************************************** +int +main(void) +{ + uint32_t ui32SysClock; + + // + // Run from the PLL at 120 MHz. + // + ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + // + // Configure the device pins. + // + PinoutSet(); + + // + // Initialize the display driver. + // + Kentec320x240x16_SSD2119Init(ui32SysClock); + + // + // Initialize the graphics context. + // + GrContextInit(&g_sContext, &g_sKentec320x240x16_SSD2119); + + // + // Draw the application frame. + // + FrameDraw(&g_sContext, "watchdog"); + + // + // Initialize the touch screen driver. + // + TouchScreenInit(ui32SysClock); + TouchScreenCallbackSet(WatchdogTouchCallback); + + // + // Reconfigure PF1 as a GPIO output so that it can be directly driven + // (instead of being an Ethernet LED). + // + ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1); + ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0); + + // + // Show the state and offer some instructions to the user. + // + GrContextFontSet(&g_sContext, g_psFontCmss20); + GrStringDrawCentered(&g_sContext, "Watchdog 0:", -1, 80, 80, 0); + GrStringDrawCentered(&g_sContext, "Watchdog 1:", -1, 240, 80, 0); + GrContextFontSet(&g_sContext, g_psFontCmss14); + GrStringDrawCentered(&g_sContext, + "Tap the left screen to starve the watchdog 0", + -1, GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) / 2) + 40, 1); + GrStringDrawCentered(&g_sContext, + "Tap the right screen to starve the watchdog 1", + -1, GrContextDpyWidthGet(&g_sContext) / 2 , + (GrContextDpyHeightGet(&g_sContext) / 2) + 60, 1); + + // + // Enable the peripherals used by this example. + // + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0); + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG1); + + // + // Enable the watchdog interrupt. + // + ROM_IntEnable(INT_WATCHDOG); + + // + // Set the period of the watchdog timer. + // + ROM_WatchdogReloadSet(WATCHDOG0_BASE, ui32SysClock); + ROM_WatchdogReloadSet(WATCHDOG1_BASE, 16000000); + + // + // Enable reset generation from the watchdog timer. + // + ROM_WatchdogResetEnable(WATCHDOG0_BASE); + ROM_WatchdogResetEnable(WATCHDOG1_BASE); + + // + // Enable the watchdog timer. + // + ROM_WatchdogEnable(WATCHDOG0_BASE); + ROM_WatchdogEnable(WATCHDOG1_BASE); + + // + // Loop forever while the LED winks as watchdog interrupts are handled. + // + while(1) + { + } +} diff --git a/boards/dk-tm4c129x/watchdog/watchdog.ewd b/boards/dk-tm4c129x/watchdog/watchdog.ewd new file mode 100644 index 0000000..484e41a --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.ewd @@ -0,0 +1,614 @@ + + + + 1 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + JLINK_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + MACRAIGOR_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + diff --git a/boards/dk-tm4c129x/watchdog/watchdog.ewp b/boards/dk-tm4c129x/watchdog/watchdog.ewp new file mode 100644 index 0000000..6b6a6ca --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.ewp @@ -0,0 +1,804 @@ + + + + 1 + + Debug + + ARM + + 1 + + General + 3 + + 14 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 19 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 5 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Libraries + + $PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a + + + $PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a + + + + Source + + $PROJ_DIR$\..\drivers\frame.c + + + $PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c + + + $PROJ_DIR$\..\drivers\pinout.c + + + $PROJ_DIR$\startup_ewarm.c + + + $PROJ_DIR$\..\drivers\touch.c + + + $PROJ_DIR$\..\..\..\..\utils\ustdlib.c + + + $PROJ_DIR$\watchdog.c + + + diff --git a/boards/dk-tm4c129x/watchdog/watchdog.icf b/boards/dk-tm4c129x/watchdog/watchdog.icf new file mode 100644 index 0000000..e2d2e8f --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.icf @@ -0,0 +1,78 @@ +//***************************************************************************** +// +// watchdog.icf - Linker configuration file for watchdog. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** + +// +// Define a memory region that covers the entire 4 GB addressible space of the +// processor. +// +define memory mem with size = 4G; + +// +// Define a region for the on-chip flash. +// +define region FLASH = mem:[from 0x00000000 to 0x000fffff]; + +// +// Define a region for the on-chip SRAM. +// +define region SRAM = mem:[from 0x20000000 to 0x2003ffff]; + +// +// Define a block for the heap. The size should be set to something other +// than zero if things in the C library that require the heap are used. +// +define block HEAP with alignment = 8, size = 0x00000000 { }; + +// +// Indicate that the read/write values should be initialized by copying from +// flash. +// +initialize by copy { readwrite }; + +// +// Indicate that the noinit values should be left alone. This includes the +// stack, which if initialized will destroy the return address from the +// initialization code, causing the processor to branch to zero and fault. +// +do not initialize { section .noinit }; + +// +// Place the interrupt vectors at the start of flash. +// +place at start of FLASH { readonly section .intvec }; + +// +// Place the remainder of the read-only items into flash. +// +place in FLASH { readonly }; + +// +// Place the RAM vector table at the start of SRAM. +// +place at start of SRAM { section VTABLE }; + +// +// Place all read/write items into SRAM. +// +place in SRAM { readwrite, block HEAP }; diff --git a/boards/dk-tm4c129x/watchdog/watchdog.ld b/boards/dk-tm4c129x/watchdog/watchdog.ld new file mode 100644 index 0000000..5d9c836 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.ld @@ -0,0 +1,57 @@ +/****************************************************************************** + * + * watchdog.ld - Linker configuration file for watchdog. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) + *(.rodata*) + _etext = .; + } > FLASH + + .data : AT(ADDR(.text) + SIZEOF(.text)) + { + _data = .; + *(vtable) + *(.data*) + _edata = .; + } > SRAM + + .bss : + { + _bss = .; + *(.bss*) + *(COMMON) + _ebss = .; + } > SRAM +} diff --git a/boards/dk-tm4c129x/watchdog/watchdog.sct b/boards/dk-tm4c129x/watchdog/watchdog.sct new file mode 100644 index 0000000..1b76adf --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.sct @@ -0,0 +1,47 @@ +;****************************************************************************** +; +; watchdog.sct - Linker configuration file for watchdog. +; +; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +; Software License Agreement +; +; Texas Instruments (TI) is supplying this software for use solely and +; exclusively on TI's microcontroller products. The software is owned by +; TI and/or its suppliers, and is protected under applicable copyright +; laws. You may not combine this software with "viral" open-source +; software in order to form a larger program. +; +; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +; DAMAGES, FOR ANY REASON WHATSOEVER. +; +; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +; +;****************************************************************************** + +LR_IROM 0x00000000 0x00100000 +{ + ; + ; Specify the Execution Address of the code and the size. + ; + ER_IROM 0x00000000 0x00100000 + { + *.o (RESET, +First) + * (InRoot$$Sections, +RO) + } + + ; + ; Specify the Execution Address of the data area. + ; + RW_IRAM 0x20000000 0x00040000 + { + ; + ; Uncomment the following line in order to use IntRegister(). + ; + ;* (vtable, +First) + * (+RW, +ZI) + } +} diff --git a/boards/dk-tm4c129x/watchdog/watchdog.uvopt b/boards/dk-tm4c129x/watchdog/watchdog.uvopt new file mode 100644 index 0000000..d1bb0fc --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.uvopt @@ -0,0 +1,373 @@ + + + + 1.0 + +
      ### uVision Project, (C) Keil Software
      + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + watchdog + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\rvmdk\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\Luminary\TM4C129XNCZAD.PDF + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + 0 + lmidk-agdi + -O4614 -S1 -FO29 + + + 0 + DLGTARM + + + + 0 + ARMDBGFLAGS + + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\frame.c + frame.c + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\kentec320x240x16_ssd2119.c + kentec320x240x16_ssd2119.c + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\pinout.c + pinout.c + + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\startup_rvmdk.S + startup_rvmdk.S + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\drivers\touch.c + touch.c + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\utils\ustdlib.c + ustdlib.c + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\watchdog.c + watchdog.c + + + + + Libraries + 1 + 0 + 0 + + 2 + 8 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + driverlib.lib + + + 2 + 9 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\grlib\rvmdk\grlib.lib + grlib.lib + + + + + Documentation + 1 + 0 + 0 + + 3 + 10 + 5 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + .\readme.txt + readme.txt + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 0 + 0 + 729 + 300 + + + + + + + 1 + 0 + + 100 + 0 + + + .\readme.txt + 0 + 1 + 1 + + + + + +
      diff --git a/boards/dk-tm4c129x/watchdog/watchdog.uvproj b/boards/dk-tm4c129x/watchdog/watchdog.uvproj new file mode 100644 index 0000000..a7f4a11 --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog.uvproj @@ -0,0 +1,454 @@ + + + + 1.1 + +
      ### uVision Project, (C) Keil Software
      + + + + watchdog + 0x4 + ARM-ADS + + + TM4C129XNCZAD + Texas Instruments + IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2 + + "STARTUP\Luminary\Startup.s" ("Luminary Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000) + 5919 + LM4Fxxxx.H + + + + + + + + + + 0 + + + + Luminary\ + Luminary\ + + 0 + 0 + 0 + 0 + 1 + + .\rvmdk\ + watchdog + 1 + 0 + 0 + 1 + 1 + .\rvmdk\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin --output .\rvmdk\watchdog.bin .\rvmdk\watchdog.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 4 + + + + + + + + + + + + + + BIN\lmidk-agdi.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4099 + + BIN\lmidk-agdi.dll + + + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x0 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + + + + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + + --c99 + rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0 + + ..;..\..\..\..; + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + watchdog.sct + + + --entry Reset_Handler + + + + + + + + Source + + + frame.c + 1 + ..\drivers\frame.c + + + kentec320x240x16_ssd2119.c + 1 + ..\drivers\kentec320x240x16_ssd2119.c + + + pinout.c + 1 + ..\drivers\pinout.c + + + startup_rvmdk.S + 2 + .\startup_rvmdk.S + + + touch.c + 1 + ..\drivers\touch.c + + + ustdlib.c + 1 + ..\..\..\..\utils\ustdlib.c + + + watchdog.c + 1 + .\watchdog.c + + + + + Libraries + + + driverlib.lib + 4 + ..\..\..\..\driverlib\rvmdk\driverlib.lib + + + grlib.lib + 4 + ..\..\..\..\grlib\rvmdk\grlib.lib + + + + + Documentation + + + readme.txt + 5 + .\readme.txt + + + + + + + +
      diff --git a/boards/dk-tm4c129x/watchdog/watchdog_ccs.cmd b/boards/dk-tm4c129x/watchdog/watchdog_ccs.cmd new file mode 100644 index 0000000..dd1e3df --- /dev/null +++ b/boards/dk-tm4c129x/watchdog/watchdog_ccs.cmd @@ -0,0 +1,70 @@ +/****************************************************************************** + * + * watchdog_ccs.cmd - CCS linker configuration file for watchdog. + * + * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. + * Software License Agreement + * + * Texas Instruments (TI) is supplying this software for use solely and + * exclusively on TI's microcontroller products. The software is owned by + * TI and/or its suppliers, and is protected under applicable copyright + * laws. You may not combine this software with "viral" open-source + * software in order to form a larger program. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. + * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT + * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY + * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, FOR ANY REASON WHATSOEVER. + * + * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. + * + *****************************************************************************/ + +--retain=g_pfnVectors + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/* The starting address of the application. Normally the interrupt vectors */ +/* must be located at the beginning of the application. */ +#define APP_BASE 0x00000000 +#define RAM_BASE 0x20000000 + +/* System memory map */ + +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = APP_BASE, length = 0x00100000 + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = 0x20000000, length = 0x00040000 +} + +/* Section allocation in memory */ + +SECTIONS +{ + .intvecs: > APP_BASE + .text : > FLASH + .const : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + + .vtable : > RAM_BASE + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM +} + +__STACK_TOP = __stack + 512; -- cgit v1.3.1